[josm] 02/28: Imported Upstream version 0.0.svn8800+dfsg1

Sebastiaan Couwenberg sebastic at moszumanska.debian.org
Fri Oct 9 22:26:51 UTC 2015


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

sebastic pushed a commit to branch master
in repository josm.

commit 560f79df581c7a44b392e24616d68ee2c272a5c8
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date:   Fri Oct 9 12:44:10 2015 +0200

    Imported Upstream version 0.0.svn8800+dfsg1
---
 .checkstyle                                        |    28 +
 .classpath                                         |    59 +-
 .project                                           |    19 +-
 .settings/edu.umd.cs.findbugs.core.prefs           |    18 +-
 .settings/org.eclipse.jdt.core.prefs               |    23 +
 .settings/org.eclipse.jdt.groovy.core.prefs        |     2 +-
 .settings/org.eclipse.jdt.ui.prefs                 |    10 +-
 ...eclipse.wst.common.project.facet.core.prefs.xml |    15 -
 .../org.eclipse.wst.common.project.facet.core.xml  |     5 -
 .settings/org.sonar.ide.eclipse.core.prefs         |     6 +
 .settings/sf.eclipse.javacc.prefs                  |     2 +
 README                                             |     5 +-
 REVISION                                           |     8 +-
 build.xml                                          |   101 +-
 data/defaultpresets.xml                            |   635 +-
 data/maps.xsd                                      |    20 +-
 data/overpass-turbo-ffs.js                         |     1 +
 data/projection/epsg                               |   360 +-
 data/validator/combinations.mapcss                 |    79 +-
 data/validator/deprecated.mapcss                   |    71 +-
 data/validator/geometry.mapcss                     |    90 +-
 data/validator/numeric.mapcss                      |    23 +-
 data/validator/opening_hours.js                    |  6598 +---
 data/validator/relation.mapcss                     |     2 +-
 .../projection-regression-test-data-java9.csv      |   726 +
 data_nodist/projection-regression-test-data.csv    |  1408 +-
 data_nodist/trans/ast.lang                         |   Bin 9399 -> 8893 bytes
 data_nodist/trans/be.lang                          |   Bin 0 -> 15437 bytes
 data_nodist/trans/bg.lang                          |   Bin 2806 -> 2804 bytes
 data_nodist/trans/ca-valencia.lang                 |   Bin 8323 -> 8068 bytes
 data_nodist/trans/ca.lang                          |   Bin 9737 -> 9810 bytes
 data_nodist/trans/cs.lang                          |   Bin 9742 -> 9583 bytes
 data_nodist/trans/da.lang                          |   Bin 5205 -> 8809 bytes
 data_nodist/trans/de.lang                          |   Bin 9781 -> 9665 bytes
 data_nodist/trans/el.lang                          |   Bin 1395 -> 1393 bytes
 data_nodist/trans/en.lang                          |   Bin 8247 -> 8111 bytes
 data_nodist/trans/en_AU.lang                       |   Bin 1671 -> 1669 bytes
 data_nodist/trans/en_GB.lang                       |   Bin 2259 -> 2091 bytes
 data_nodist/trans/es.lang                          |   Bin 10692 -> 10613 bytes
 data_nodist/trans/et.lang                          |   Bin 1428 -> 1426 bytes
 data_nodist/trans/fi.lang                          |   Bin 2605 -> 2449 bytes
 data_nodist/trans/fr.lang                          |   Bin 9453 -> 9774 bytes
 data_nodist/trans/gl.lang                          |   Bin 3230 -> 3170 bytes
 data_nodist/trans/hu.lang                          |   Bin 10662 -> 10003 bytes
 data_nodist/trans/id.lang                          |   Bin 7149 -> 6911 bytes
 data_nodist/trans/it.lang                          |   Bin 10263 -> 10313 bytes
 data_nodist/trans/ja.lang                          |   Bin 11523 -> 10784 bytes
 data_nodist/trans/km.lang                          |   Bin 17419 -> 16168 bytes
 data_nodist/trans/lt.lang                          |   Bin 708 -> 1942 bytes
 data_nodist/trans/nl.lang                          |   Bin 9085 -> 10415 bytes
 data_nodist/trans/pl.lang                          |   Bin 2855 -> 2923 bytes
 data_nodist/trans/pt.lang                          |   Bin 12660 -> 12597 bytes
 data_nodist/trans/pt_BR.lang                       |   Bin 8869 -> 8361 bytes
 data_nodist/trans/ru.lang                          |   Bin 15654 -> 15485 bytes
 data_nodist/trans/sk.lang                          |   Bin 9163 -> 8972 bytes
 data_nodist/trans/sv.lang                          |   Bin 1332 -> 1330 bytes
 data_nodist/trans/uk.lang                          |   Bin 16154 -> 15842 bytes
 data_nodist/trans/vi.lang                          |   Bin 0 -> 10761 bytes
 data_nodist/trans/zh_CN.lang                       |   Bin 5411 -> 6060 bytes
 data_nodist/trans/zh_TW.lang                       |   Bin 4866 -> 4828 bytes
 data_nodist/wms-cache.xsd                          |    55 -
 i18n/build.xml                                     |     2 +-
 i18n/convpreset.pl                                 |     1 +
 i18n/launchpad.pl                                  |     6 +-
 i18n/po/af.po                                      |  2145 +-
 i18n/po/am.po                                      |  2145 +-
 i18n/po/ar.po                                      |  2421 +-
 i18n/po/ast.po                                     |  2951 +-
 i18n/po/az.po                                      |  2145 +-
 i18n/po/be.po                                      | 19372 +++++++-----
 i18n/po/bg.po                                      |  2301 +-
 i18n/po/bn.po                                      |  2145 +-
 i18n/po/br.po                                      |  2145 +-
 i18n/po/bs.po                                      |  2145 +-
 i18n/po/ca.po                                      |  2202 +-
 i18n/po/ca at valencia.po                             |  2310 +-
 i18n/po/cs.po                                      |  2074 +-
 i18n/po/cy.po                                      |  2145 +-
 i18n/po/da.po                                      |  4736 +--
 i18n/po/de.po                                      |  3090 +-
 i18n/po/de_DE.po                                   |  2145 +-
 i18n/po/el.po                                      |  2835 +-
 i18n/po/en_AU.po                                   |  4781 +--
 i18n/po/en_CA.po                                   |  2145 +-
 i18n/po/en_GB.po                                   |  4916 +--
 i18n/po/eo.po                                      |  2143 +-
 i18n/po/es.po                                      |  2404 +-
 i18n/po/et.po                                      |  2500 +-
 i18n/po/eu.po                                      |  2171 +-
 i18n/po/fa.po                                      |  2263 +-
 i18n/po/fi.po                                      |  2632 +-
 i18n/po/fil.po                                     |  2145 +-
 i18n/po/fo.po                                      |  2145 +-
 i18n/po/fr.po                                      |  2730 +-
 i18n/po/ga.po                                      | 30291 ++++++++++++++++++
 i18n/po/gl.po                                      |  2131 +-
 i18n/po/he.po                                      |  2249 +-
 i18n/po/hi.po                                      |  2145 +-
 i18n/po/hr.po                                      |  2265 +-
 i18n/po/ht.po                                      |  2145 +-
 i18n/po/hu.po                                      |  2524 +-
 i18n/po/hy.po                                      |  2145 +-
 i18n/po/ia.po                                      |  2145 +-
 i18n/po/id.po                                      |  2304 +-
 i18n/po/is.po                                      |  2279 +-
 i18n/po/it.po                                      |  2672 +-
 i18n/po/ja.po                                      |  2522 +-
 i18n/po/ka.po                                      |  2145 +-
 i18n/po/km.po                                      |  2312 +-
 i18n/po/ko.po                                      |  2294 +-
 i18n/po/ky.po                                      |  2147 +-
 i18n/po/lo.po                                      |  2145 +-
 i18n/po/lt.po                                      |  4586 +--
 i18n/po/lv.po                                      |  2145 +-
 i18n/po/mk.po                                      |  2145 +-
 i18n/po/mr.po                                      | 30334 +++++++++++++++++++
 i18n/po/ms.po                                      |  2145 +-
 i18n/po/nb.po                                      |  2671 +-
 i18n/po/nds.po                                     |  2145 +-
 i18n/po/nl.po                                      |  4201 ++-
 i18n/po/nn.po                                      |  2145 +-
 i18n/po/oc.po                                      |  2265 +-
 i18n/po/pa.po                                      |  2145 +-
 i18n/po/pl.po                                      |  2747 +-
 i18n/po/pt.po                                      |  2682 +-
 i18n/po/pt_BR.po                                   |  2786 +-
 i18n/po/rm.po                                      |  2145 +-
 i18n/po/ro.po                                      |  2263 +-
 i18n/po/ru.po                                      |  2093 +-
 i18n/po/sk.po                                      |  2101 +-
 i18n/po/sl.po                                      |  2185 +-
 i18n/po/sq.po                                      |  2145 +-
 i18n/po/sr.po                                      |  2145 +-
 i18n/po/sv.po                                      |  2951 +-
 i18n/po/ta.po                                      |  2141 +-
 i18n/po/te.po                                      |  2145 +-
 i18n/po/th.po                                      |  2145 +-
 i18n/po/tr.po                                      |  2250 +-
 i18n/po/ug.po                                      |  2145 +-
 i18n/po/uk.po                                      |  2376 +-
 i18n/po/ur.po                                      |  2145 +-
 i18n/po/vi.po                                      | 19575 ++++++------
 i18n/po/zh_CN.po                                   |  4285 +--
 i18n/po/zh_TW.po                                   |  2275 +-
 images/Mf_closedway.png                            |   Bin 368 -> 0 bytes
 images/Mf_closedway.svg                            |     8 +
 images/Mf_node.png                                 |   Bin 203 -> 0 bytes
 images/Mf_node.svg                                 |     5 +
 images/Mf_relation.png                             |   Bin 203 -> 0 bytes
 images/Mf_relation.svg                             |     8 +
 images/Mf_way.png                                  |   Bin 428 -> 0 bytes
 images/Mf_way.svg                                  |     8 +
 images/audio-back.png                              |   Bin 247 -> 0 bytes
 images/audio-back.svg                              |     4 +
 images/audio-faster.png                            |   Bin 261 -> 0 bytes
 images/audio-faster.svg                            |     4 +
 images/audio-fwd.png                               |   Bin 247 -> 0 bytes
 images/audio-fwd.svg                               |     4 +
 images/audio-next.png                              |   Bin 220 -> 0 bytes
 images/audio-next.svg                              |     4 +
 images/audio-playpause.png                         |   Bin 233 -> 0 bytes
 images/audio-playpause.svg                         |     4 +
 images/audio-prev.png                              |   Bin 221 -> 0 bytes
 images/audio-prev.svg                              |     4 +
 images/audio-slower.png                            |   Bin 264 -> 0 bytes
 images/audio-slower.svg                            |     4 +
 images/audio-sync.png                              |   Bin 244 -> 0 bytes
 images/audio-sync.svg                              |     4 +
 images/dialogs/add_wmts.png                        |   Bin 0 -> 454 bytes
 images/dialogs/layerlist/gamma.png                 |   Bin 0 -> 489 bytes
 images/dialogs/minimap.png                         |   Bin 0 -> 1086 bytes
 images/dialogs/sort_below.png                      |   Bin 0 -> 249 bytes
 images/dialogs/taginfo.png                         |   Bin 0 -> 240 bytes
 images/download-overpass.png                       |   Bin 0 -> 1516 bytes
 images/icons/power_tower_high2.n.16.png            |   Bin 0 -> 704 bytes
 images/icons/power_tower_low.n.16.png              |   Bin 0 -> 483 bytes
 images/logo.svg                                    |     2 +-
 images/misc/gray_check.png                         |   Bin 0 -> 282 bytes
 images/oauth/oauth-logo.png                        |   Bin 1388 -> 0 bytes
 images/oauth/oauth-logo.svg                        |    34 +
 images/oauth/oauth-small.svg                       |     6 +
 images/oauth/oauth.png                             |   Bin 628 -> 0 bytes
 images/presets/JusticeScales.png                   |   Bin 495 -> 0 bytes
 images/presets/bollard.png                         |   Bin 274 -> 303 bytes
 images/presets/field_hockey.png                    |   Bin 0 -> 304 bytes
 images/presets/ford.png                            |   Bin 607 -> 0 bytes
 images/presets/{Hockey.png => ice_hockey.png}      |   Bin
 images/presets/pharmacy.png                        |   Bin 113 -> 0 bytes
 images/presets/prison.png                          |   Bin 135 -> 0 bytes
 images/presets/recycling.png                       |   Bin 456 -> 0 bytes
 images/presets/safety_training.png                 |   Bin 674 -> 0 bytes
 images/svpDown.png                                 |   Bin 81 -> 0 bytes
 images/svpDown.svg                                 |     4 +
 images/svpLeft.png                                 |   Bin 88 -> 0 bytes
 images/svpLeft.svg                                 |     4 +
 images/svpRight.png                                |   Bin 87 -> 0 bytes
 images/svpRight.svg                                |     4 +
 images/svpUp.png                                   |   Bin 83 -> 0 bytes
 images/svpUp.svg                                   |     4 +
 linux/latest/usr/bin/josm-latest                   |    14 +
 .../usr/share/applications/josm-latest.desktop     |     2 +-
 linux/tested/usr/bin/josm                          |    14 +
 linux/tested/usr/share/applications/josm.desktop   |     2 +-
 netbeans/nbbuild.xml                               |    21 +-
 presets_lang.pl                                    |     2 +-
 scripts/taginfoextract.groovy                      |    68 +-
 src/JOSM.java                                      |     9 +-
 src/org/apache/commons/jcs/JCS.java                |   212 +
 .../commons/jcs/access/AbstractCacheAccess.java    |   203 +
 src/org/apache/commons/jcs/access/CacheAccess.java |   309 +
 .../commons/jcs/access/GroupCacheAccess.java       |   211 +
 .../commons/jcs/access/PartitionedCacheAccess.java |   846 +
 .../commons/jcs/access/behavior/ICacheAccess.java  |   167 +
 .../access/behavior/ICacheAccessManagement.java    |   111 +
 .../jcs/access/behavior/IGroupCacheAccess.java     |    89 +
 .../jcs/access/exception/CacheException.java       |    66 +
 .../access/exception/ConfigurationException.java   |    44 +
 .../access/exception/InvalidArgumentException.java |    47 +
 .../access/exception/InvalidGroupException.java    |    47 +
 .../access/exception/InvalidHandleException.java   |    48 +
 .../access/exception/ObjectExistsException.java    |    53 +
 .../access/exception/ObjectNotFoundException.java  |    51 +
 src/org/apache/commons/jcs/access/package.html     |    27 +
 .../apache/commons/jcs/admin/CacheElementInfo.java |   124 +
 .../apache/commons/jcs/admin/CacheRegionInfo.java  |   180 +
 .../jcs/admin/CountingOnlyOutputStream.java        |    84 +
 src/org/apache/commons/jcs/admin/JCSAdmin.jsp      |   310 +
 src/org/apache/commons/jcs/admin/JCSAdminBean.java |   436 +
 src/org/apache/commons/jcs/admin/JCSJMXBean.java   |    90 +
 .../commons/jcs/admin/servlet/JCSAdminServlet.java |   181 +
 .../jcs/admin/servlet/JCSAdminServletDefault.vm    |    64 +
 .../admin/servlet/JCSAdminServletRegionDetail.vm   |    50 +
 .../jcs/auxiliary/AbstractAuxiliaryCache.java      |   210 +
 .../AbstractAuxiliaryCacheAttributes.java          |   130 +
 .../AbstractAuxiliaryCacheEventLogging.java        |   353 +
 .../auxiliary/AbstractAuxiliaryCacheFactory.java   |    72 +
 .../commons/jcs/auxiliary/AuxiliaryCache.java      |    77 +
 .../jcs/auxiliary/AuxiliaryCacheAttributes.java    |    95 +
 .../jcs/auxiliary/AuxiliaryCacheConfigurator.java  |   128 +
 .../jcs/auxiliary/AuxiliaryCacheFactory.java       |    71 +
 .../jcs/auxiliary/disk/AbstractDiskCache.java      |   872 +
 .../disk/AbstractDiskCacheAttributes.java          |   233 +
 .../commons/jcs/auxiliary/disk/LRUMapJCS.java      |    75 +
 .../jcs/auxiliary/disk/PurgatoryElement.java       |   157 +
 .../disk/behavior/IDiskCacheAttributes.java        |   131 +
 .../jcs/auxiliary/disk/block/BlockDisk.java        |   524 +
 .../jcs/auxiliary/disk/block/BlockDiskCache.java   |   739 +
 .../disk/block/BlockDiskCacheAttributes.java       |   118 +
 .../disk/block/BlockDiskCacheFactory.java          |    66 +
 .../disk/block/BlockDiskElementDescriptor.java     |   132 +
 .../auxiliary/disk/block/BlockDiskKeyStore.java    |   471 +
 .../jcs/auxiliary/disk/indexed/IndexedDisk.java    |   282 +
 .../auxiliary/disk/indexed/IndexedDiskCache.java   |  1773 ++
 .../disk/indexed/IndexedDiskCacheAttributes.java   |   209 +
 .../disk/indexed/IndexedDiskCacheFactory.java      |    66 +
 .../auxiliary/disk/indexed/IndexedDiskDumper.java  |    57 +
 .../disk/indexed/IndexedDiskElementDescriptor.java |   118 +
 .../jcs/auxiliary/disk/jdbc/JDBCDiskCache.java     |  1158 +
 .../disk/jdbc/JDBCDiskCacheAttributes.java         |   290 +
 .../auxiliary/disk/jdbc/JDBCDiskCacheFactory.java  |   182 +
 .../disk/jdbc/JDBCDiskCachePoolAccess.java         |   271 +
 .../jdbc/JDBCDiskCachePoolAccessAttributes.java    |   179 +
 .../disk/jdbc/JDBCDiskCachePoolAccessManager.java  |   211 +
 .../jcs/auxiliary/disk/jdbc/ShrinkerThread.java    |   169 +
 .../jcs/auxiliary/disk/jdbc/TableState.java        |   114 +
 .../disk/jdbc/hsql/HSQLDiskCacheFactory.java       |   206 +
 .../auxiliary/disk/jdbc/mysql/MySQLDiskCache.java  |   168 +
 .../disk/jdbc/mysql/MySQLDiskCacheAttributes.java  |   107 +
 .../disk/jdbc/mysql/MySQLDiskCacheFactory.java     |   193 +
 .../disk/jdbc/mysql/MySQLTableOptimizer.java       |   325 +
 .../disk/jdbc/mysql/util/ScheduleParser.java       |    96 +
 .../apache/commons/jcs/auxiliary/disk/package.html |    27 +
 .../jcs/auxiliary/lateral/LateralCache.java        |   457 +
 .../auxiliary/lateral/LateralCacheAttributes.java  |   313 +
 .../jcs/auxiliary/lateral/LateralCacheMonitor.java |   285 +
 .../jcs/auxiliary/lateral/LateralCacheNoWait.java  |   436 +
 .../lateral/LateralCacheNoWaitFacade.java          |   533 +
 .../jcs/auxiliary/lateral/LateralCommand.java      |    47 +
 .../lateral/LateralElementDescriptor.java          |    83 +
 .../lateral/behavior/ILateralCacheAttributes.java  |   202 +
 .../lateral/behavior/ILateralCacheListener.java    |    51 +
 .../commons/jcs/auxiliary/lateral/package.html     |    26 +
 .../lateral/socket/tcp/LateralTCPCacheFactory.java |   435 +
 .../socket/tcp/LateralTCPDiscoveryListener.java    |   343 +
 .../lateral/socket/tcp/LateralTCPListener.java     |   774 +
 .../lateral/socket/tcp/LateralTCPSender.java       |   272 +
 .../lateral/socket/tcp/LateralTCPService.java      |   458 +
 .../socket/tcp/TCPLateralCacheAttributes.java      |   399 +
 .../tcp/behavior/ITCPLateralCacheAttributes.java   |   218 +
 src/org/apache/commons/jcs/auxiliary/package.html  |    25 +
 .../remote/AbstractRemoteAuxiliaryCache.java       |   718 +
 .../remote/AbstractRemoteCacheListener.java        |   350 +
 .../remote/AbstractRemoteCacheNoWaitFacade.java    |   472 +
 .../remote/CommonRemoteCacheAttributes.java        |   323 +
 .../commons/jcs/auxiliary/remote/RemoteCache.java  |   186 +
 .../auxiliary/remote/RemoteCacheAttributes.java    |   261 +
 .../jcs/auxiliary/remote/RemoteCacheFactory.java   |   165 +
 .../remote/RemoteCacheFailoverRunner.java          |   488 +
 .../jcs/auxiliary/remote/RemoteCacheListener.java  |   121 +
 .../jcs/auxiliary/remote/RemoteCacheManager.java   |   612 +
 .../jcs/auxiliary/remote/RemoteCacheMonitor.java   |   224 +
 .../jcs/auxiliary/remote/RemoteCacheNoWait.java    |   529 +
 .../auxiliary/remote/RemoteCacheNoWaitFacade.java  |   102 +
 .../jcs/auxiliary/remote/RemoteCacheRestore.java   |   129 +
 .../commons/jcs/auxiliary/remote/RemoteUtils.java  |   251 +
 .../behavior/ICommonRemoteCacheAttributes.java     |   177 +
 .../remote/behavior/IRemoteCacheAttributes.java    |   178 +
 .../remote/behavior/IRemoteCacheClient.java        |    61 +
 .../remote/behavior/IRemoteCacheConstants.java     |    70 +
 .../remote/behavior/IRemoteCacheDispatcher.java    |    46 +
 .../remote/behavior/IRemoteCacheListener.java      |    81 +
 .../http/behavior/IRemoteHttpCacheConstants.java   |    31 +
 .../remote/http/client/AbstractHttpClient.java     |   193 +
 .../remote/http/client/RemoteHttpCache.java        |   116 +
 .../http/client/RemoteHttpCacheAttributes.java     |   228 +
 .../remote/http/client/RemoteHttpCacheClient.java  |   496 +
 .../http/client/RemoteHttpCacheDispatcher.java     |   231 +
 .../remote/http/client/RemoteHttpCacheFactory.java |    94 +
 .../remote/http/client/RemoteHttpCacheManager.java |   266 +
 .../remote/http/client/RemoteHttpCacheMonitor.java |   248 +
 .../http/client/RemoteHttpClientListener.java      |    53 +
 .../client/behavior/IRemoteHttpCacheClient.java    |    51 +
 .../http/server/AbstractRemoteCacheService.java    |   603 +
 .../http/server/RemoteCacheServiceAdaptor.java     |   174 +
 .../server/RemoteHttpCacheServerAttributes.java    |   115 +
 .../remote/http/server/RemoteHttpCacheService.java |   270 +
 .../remote/http/server/RemoteHttpCacheServlet.java |   264 +
 .../http/server/RemoteHttpCacheSeviceFactory.java  |    91 +
 .../commons/jcs/auxiliary/remote/package.html      |    25 +
 .../remote/server/RegistryKeepAliveRunner.java     |   189 +
 .../auxiliary/remote/server/RemoteCacheServer.java |  1725 ++
 .../remote/server/RemoteCacheServerAttributes.java |   211 +
 .../remote/server/RemoteCacheServerFactory.java    |   539 +
 .../remote/server/RemoteCacheStartupServlet.java   |   216 +
 .../TimeoutConfigurableRMISocketFactory.java       |   111 +
 .../remote/server/behavior/IRemoteCacheServer.java |    37 +
 .../behavior/IRemoteCacheServerAttributes.java     |   118 +
 .../remote/server/behavior/RemoteType.java         |    32 +
 .../remote/util/RemoteCacheRequestFactory.java     |   254 +
 .../auxiliary/remote/value/RemoteCacheRequest.java |   187 +
 .../remote/value/RemoteCacheResponse.java          |   105 +
 .../auxiliary/remote/value/RemoteRequestType.java  |    53 +
 .../jcs/engine/AbstractCacheEventQueue.java        |   499 +
 .../apache/commons/jcs/engine/CacheAdaptor.java    |   143 +
 .../apache/commons/jcs/engine/CacheConstants.java  |    34 +
 .../apache/commons/jcs/engine/CacheElement.java    |   160 +
 .../commons/jcs/engine/CacheElementSerialized.java |    77 +
 .../apache/commons/jcs/engine/CacheEventQueue.java |   418 +
 .../commons/jcs/engine/CacheEventQueueFactory.java |    88 +
 src/org/apache/commons/jcs/engine/CacheGroup.java  |    59 +
 src/org/apache/commons/jcs/engine/CacheInfo.java   |    47 +
 .../apache/commons/jcs/engine/CacheListeners.java  |    82 +
 src/org/apache/commons/jcs/engine/CacheStatus.java |    37 +
 .../commons/jcs/engine/CacheWatchRepairable.java   |   200 +
 .../jcs/engine/CompositeCacheAttributes.java       |   447 +
 .../commons/jcs/engine/ElementAttributes.java      |   469 +
 .../commons/jcs/engine/PooledCacheEventQueue.java  |   228 +
 .../commons/jcs/engine/ZombieCacheService.java     |   156 +
 .../jcs/engine/ZombieCacheServiceNonLocal.java     |   313 +
 .../commons/jcs/engine/ZombieCacheWatch.java       |    73 +
 .../apache/commons/jcs/engine/behavior/ICache.java |   141 +
 .../commons/jcs/engine/behavior/ICacheElement.java |    74 +
 .../engine/behavior/ICacheElementSerialized.java   |    41 +
 .../jcs/engine/behavior/ICacheEventQueue.java      |   147 +
 .../jcs/engine/behavior/ICacheListener.java        |    86 +
 .../commons/jcs/engine/behavior/ICacheManager.java |    42 +
 .../jcs/engine/behavior/ICacheObserver.java        |    78 +
 .../commons/jcs/engine/behavior/ICacheRestore.java |    37 +
 .../commons/jcs/engine/behavior/ICacheService.java |   117 +
 .../jcs/engine/behavior/ICacheServiceAdmin.java    |    51 +
 .../jcs/engine/behavior/ICacheServiceNonLocal.java |   118 +
 .../commons/jcs/engine/behavior/ICacheType.java    |    49 +
 .../engine/behavior/ICompositeCacheAttributes.java |   246 +
 .../engine/behavior/ICompositeCacheManager.java    |    64 +
 .../jcs/engine/behavior/IElementAttributes.java    |   203 +
 .../jcs/engine/behavior/IElementSerializer.java    |    50 +
 .../jcs/engine/behavior/IProvideScheduler.java     |    38 +
 .../jcs/engine/behavior/IRequireScheduler.java     |    39 +
 .../jcs/engine/behavior/IShutdownObservable.java   |    55 +
 .../jcs/engine/behavior/IShutdownObserver.java     |    41 +
 .../commons/jcs/engine/behavior/IZombie.java       |    30 +
 .../commons/jcs/engine/behavior/package.html       |    25 +
 .../commons/jcs/engine/control/CompositeCache.java |  1848 ++
 .../engine/control/CompositeCacheConfigurator.java |   664 +
 .../jcs/engine/control/CompositeCacheManager.java  |  1025 +
 .../jcs/engine/control/event/ElementEvent.java     |    74 +
 .../engine/control/event/ElementEventQueue.java    |   203 +
 .../control/event/behavior/ElementEventType.java   |    54 +
 .../control/event/behavior/IElementEvent.java      |    42 +
 .../event/behavior/IElementEventHandler.java       |    40 +
 .../control/event/behavior/IElementEventQueue.java |    48 +
 .../jcs/engine/control/group/GroupAttrName.java    |   117 +
 .../commons/jcs/engine/control/group/GroupId.java  |   103 +
 .../apache/commons/jcs/engine/control/package.html |    25 +
 .../commons/jcs/engine/logging/CacheEvent.java     |   177 +
 .../logging/CacheEventLoggerDebugLogger.java       |   113 +
 .../jcs/engine/logging/behavior/ICacheEvent.java   |    77 +
 .../engine/logging/behavior/ICacheEventLogger.java |    91 +
 .../jcs/engine/match/KeyMatcherPatternImpl.java    |    66 +
 .../jcs/engine/match/behavior/IKeyMatcher.java     |    36 +
 .../AbstractDoubleLinkedListMemoryCache.java       |   805 +
 .../jcs/engine/memory/AbstractMemoryCache.java     |   339 +
 .../jcs/engine/memory/behavior/IMemoryCache.java   |   187 +
 .../jcs/engine/memory/fifo/FIFOMemoryCache.java    |    60 +
 .../jcs/engine/memory/lru/LHMLRUMemoryCache.java   |   361 +
 .../jcs/engine/memory/lru/LRUMemoryCache.java      |    67 +
 .../commons/jcs/engine/memory/lru/package.html     |    25 +
 .../jcs/engine/memory/mru/MRUMemoryCache.java      |    63 +
 .../commons/jcs/engine/memory/mru/package.html     |    26 +
 .../apache/commons/jcs/engine/memory/package.html  |    25 +
 .../engine/memory/shrinking/ShrinkerThread.java    |   222 +
 .../memory/util/MemoryElementDescriptor.java       |    47 +
 src/org/apache/commons/jcs/engine/package.html     |    25 +
 .../commons/jcs/engine/stats/CacheStats.java       |   116 +
 .../commons/jcs/engine/stats/StatElement.java      |   104 +
 src/org/apache/commons/jcs/engine/stats/Stats.java |    99 +
 .../jcs/engine/stats/behavior/ICacheStats.java     |    51 +
 .../jcs/engine/stats/behavior/IStatElement.java    |    54 +
 .../commons/jcs/engine/stats/behavior/IStats.java  |    63 +
 .../jcs/io/ObjectInputStreamClassLoaderAware.java  |    62 +
 src/org/apache/commons/jcs/package.html            |    26 +
 .../jcs/utils/access/AbstractJCSWorkerHelper.java  |    59 +
 .../apache/commons/jcs/utils/access/JCSWorker.java |   306 +
 .../commons/jcs/utils/access/JCSWorkerHelper.java  |    61 +
 .../commons/jcs/utils/config/OptionConverter.java  |   427 +
 .../commons/jcs/utils/config/PropertySetter.java   |   300 +
 .../jcs/utils/config/PropertySetterException.java  |    75 +
 .../apache/commons/jcs/utils/config/package.html   |    28 +
 .../jcs/utils/discovery/DiscoveredService.java     |   183 +
 .../jcs/utils/discovery/UDPCleanupRunner.java      |    97 +
 .../utils/discovery/UDPDiscoveryAttributes.java    |   231 +
 .../jcs/utils/discovery/UDPDiscoveryManager.java   |   114 +
 .../jcs/utils/discovery/UDPDiscoveryMessage.java   |   166 +
 .../jcs/utils/discovery/UDPDiscoveryReceiver.java  |   380 +
 .../jcs/utils/discovery/UDPDiscoverySender.java    |   292 +
 .../utils/discovery/UDPDiscoverySenderThread.java  |   199 +
 .../jcs/utils/discovery/UDPDiscoveryService.java   |   438 +
 .../discovery/behavior/IDiscoveryListener.java     |    44 +
 .../apache/commons/jcs/utils/net/HostNameUtil.java |   147 +
 .../jcs/utils/props/AbstractPropertyContainer.java |   190 +
 .../commons/jcs/utils/props/PropertiesFactory.java |    36 +
 .../jcs/utils/props/PropertiesFactoryFileImpl.java |    40 +
 .../commons/jcs/utils/props/PropertyLoader.java    |   174 +
 .../utils/serialization/CompressingSerializer.java |   126 +
 .../serialization/SerializationConversionUtil.java |   147 +
 .../utils/serialization/StandardSerializer.java    |    91 +
 .../utils/servlet/JCSServletContextListener.java   |    87 +
 .../commons/jcs/utils/struct/AbstractLRUMap.java   |   671 +
 .../commons/jcs/utils/struct/BoundedQueue.java     |    94 +
 .../commons/jcs/utils/struct/DoubleLinkedList.java |   303 +
 .../jcs/utils/struct/DoubleLinkedListNode.java     |    62 +
 .../jcs/utils/struct/LRUElementDescriptor.java     |    60 +
 .../apache/commons/jcs/utils/struct/LRUMap.java    |    60 +
 .../commons/jcs/utils/struct/LRUMapEntry.java      |    82 +
 .../commons/jcs/utils/struct/SingleLinkedList.java |   137 +
 .../jcs/utils/struct/SortedPreferentialArray.java  |   612 +
 .../jcs/utils/threadpool/DaemonThreadFactory.java  |    74 +
 .../jcs/utils/threadpool/PoolConfiguration.java    |   268 +
 .../jcs/utils/threadpool/ThreadPoolManager.java    |   465 +
 .../commons/jcs/utils/timing/ElapsedTimer.java     |    58 +
 .../apache/commons/jcs/utils/timing/SleepUtil.java |    50 +
 .../commons/jcs/utils/zip/CompressionUtil.java     |   203 +
 src/org/openstreetmap/josm/Main.java               |   187 +-
 .../openstreetmap/josm/actions/AboutAction.java    |    26 +-
 .../josm/actions/AbstractInfoAction.java           |    42 +-
 .../josm/actions/AbstractMergeAction.java          |     4 +-
 .../josm/actions/AbstractSelectAction.java         |    48 +-
 .../josm/actions/AddImageryLayerAction.java        |    42 +-
 .../openstreetmap/josm/actions/AddNodeAction.java  |     8 +-
 .../josm/actions/AlignInCircleAction.java          |   120 +-
 .../josm/actions/AlignInLineAction.java            |   127 +-
 .../josm/actions/AutoScaleAction.java              |    14 +-
 .../josm/actions/CloseChangesetAction.java         |     9 +-
 .../josm/actions/CombineWayAction.java             |    49 +-
 src/org/openstreetmap/josm/actions/CopyAction.java |     5 +-
 .../josm/actions/CopyCoordinatesAction.java        |     2 +-
 .../josm/actions/CreateCircleAction.java           |    34 +-
 .../josm/actions/CreateMultipolygonAction.java     |    62 +-
 .../josm/actions/DialogsToggleAction.java          |     2 +-
 .../josm/actions/DiskAccessAction.java             |    24 +-
 .../josm/actions/DistributeAction.java             |    36 +-
 .../openstreetmap/josm/actions/DownloadAction.java |     6 +-
 .../josm/actions/DownloadAlongAction.java          |    14 +-
 .../josm/actions/DownloadNotesInViewAction.java    |     5 +-
 .../josm/actions/DownloadPrimitiveAction.java      |    10 +-
 .../josm/actions/DownloadReferrersAction.java      |     2 +-
 .../josm/actions/ExtensionFileFilter.java          |    13 +-
 .../josm/actions/FullscreenToggleAction.java       |     2 +-
 .../josm/actions/GpxExportAction.java              |     7 +-
 src/org/openstreetmap/josm/actions/HelpAction.java |     2 +-
 .../josm/actions/HistoryInfoWebAction.java         |    13 +-
 .../josm/actions/ImageryAdjustAction.java          |    36 +-
 .../openstreetmap/josm/actions/InfoWebAction.java  |    47 +-
 .../josm/actions/JoinAreasAction.java              |   107 +-
 .../josm/actions/JoinNodeWayAction.java            |    10 +-
 src/org/openstreetmap/josm/actions/JosmAction.java |     9 +-
 .../openstreetmap/josm/actions/JumpToAction.java   |    56 +-
 .../josm/actions/MapRectifierWMSmenuAction.java    |    27 +-
 .../josm/actions/MergeLayerAction.java             |     2 +-
 .../josm/actions/MergeNodesAction.java             |     9 +-
 .../josm/actions/MergeSelectionAction.java         |     4 +-
 .../openstreetmap/josm/actions/MirrorAction.java   |     4 +-
 src/org/openstreetmap/josm/actions/MoveAction.java |     6 +-
 .../openstreetmap/josm/actions/MoveNodeAction.java |     2 +-
 .../openstreetmap/josm/actions/OpenFileAction.java |    25 +-
 .../josm/actions/OpenLocationAction.java           |     9 +-
 .../josm/actions/OrthogonalizeAction.java          |    75 +-
 .../josm/actions/OsmPrimitiveAction.java           |     2 +-
 .../josm/actions/OverpassDownloadAction.java       |   249 +
 .../josm/actions/ParameterizedAction.java          |     2 +-
 .../josm/actions/ParameterizedActionDecorator.java |     7 +-
 .../openstreetmap/josm/actions/PasteAction.java    |    31 +-
 .../josm/actions/PasteTagsAction.java              |    32 +-
 .../josm/actions/PreferencesAction.java            |     2 +-
 .../openstreetmap/josm/actions/PurgeAction.java    |    18 +-
 .../josm/actions/RenameLayerAction.java            |     4 +-
 .../openstreetmap/josm/actions/RestartAction.java  |   147 +-
 .../josm/actions/ReverseWayAction.java             |     2 +-
 src/org/openstreetmap/josm/actions/SaveAction.java |     6 +-
 .../openstreetmap/josm/actions/SaveActionBase.java |    12 +-
 .../josm/actions/SearchNotesDownloadAction.java    |    18 +-
 .../josm/actions/SelectAllAction.java              |     7 +-
 .../actions/SelectNonBranchingWaySequences.java    |     7 +-
 .../josm/actions/SessionLoadAction.java            |     5 +-
 .../josm/actions/SessionSaveAsAction.java          |    15 +-
 .../josm/actions/ShowStatusReportAction.java       |    71 +-
 .../josm/actions/SimplifyWayAction.java            |    26 +-
 .../openstreetmap/josm/actions/SplitWayAction.java |    49 +-
 .../openstreetmap/josm/actions/ToggleAction.java   |    16 +-
 .../openstreetmap/josm/actions/UnGlueAction.java   |    10 +-
 .../josm/actions/UnJoinNodeWayAction.java          |    10 +-
 .../josm/actions/UpdateDataAction.java             |    20 +-
 .../josm/actions/UpdateSelectionAction.java        |     9 +-
 .../openstreetmap/josm/actions/UploadAction.java   |     7 +-
 .../josm/actions/UploadNotesAction.java            |     9 +-
 .../josm/actions/UploadSelectionAction.java        |    15 +-
 .../openstreetmap/josm/actions/ValidateAction.java |     7 +-
 .../josm/actions/WireframeToggleAction.java        |     2 +-
 .../openstreetmap/josm/actions/ZoomInAction.java   |     2 +-
 .../openstreetmap/josm/actions/ZoomToAction.java   |    18 +-
 .../josm/actions/audio/AudioFastSlowAction.java    |     2 +-
 .../josm/actions/audio/AudioPlayPauseAction.java   |     5 +-
 .../downloadtasks/AbstractDownloadTask.java        |    31 +-
 .../actions/downloadtasks/DownloadGpsTask.java     |     8 +-
 .../downloadtasks/DownloadNotesUrlBoundsTask.java  |     7 +-
 .../downloadtasks/DownloadNotesUrlIdTask.java      |     2 +-
 .../downloadtasks/DownloadOsmChangeTask.java       |    12 +-
 .../actions/downloadtasks/DownloadOsmTask.java     |     8 +-
 .../downloadtasks/DownloadReferrersTask.java       |    24 +-
 .../actions/downloadtasks/DownloadSessionTask.java |    10 +-
 .../josm/actions/downloadtasks/DownloadTask.java   |     4 +-
 .../actions/downloadtasks/PostDownloadHandler.java |    12 +-
 .../josm/actions/mapmode/DeleteAction.java         |    72 +-
 .../josm/actions/mapmode/DrawAction.java           |   502 +-
 .../josm/actions/mapmode/ExtrudeAction.java        |   104 +-
 .../actions/mapmode/ImproveWayAccuracyAction.java  |    11 +-
 .../actions/mapmode/ImproveWayAccuracyHelper.java  |    17 +-
 .../josm/actions/mapmode/MapMode.java              |    44 +-
 .../josm/actions/mapmode/ModifiersSpec.java        |     8 +-
 .../josm/actions/mapmode/ParallelWayAction.java    |    24 +-
 .../josm/actions/mapmode/ParallelWays.java         |     9 +-
 .../josm/actions/mapmode/PlayHeadDragMode.java     |     6 +-
 .../josm/actions/mapmode/SelectAction.java         |   126 +-
 .../actions/relation/AbstractRelationAction.java   |     2 +-
 .../actions/relation/DeleteRelationsAction.java    |     6 +-
 .../actions/relation/DownloadMembersAction.java    |     2 +-
 .../DownloadSelectedIncompleteMembersAction.java   |     4 +-
 .../actions/relation/DuplicateRelationAction.java  |     2 +-
 .../relation/SelectInRelationListAction.java       |     2 +-
 .../josm/actions/relation/SelectMembersAction.java |     5 +-
 .../actions/relation/SelectRelationAction.java     |     8 +-
 .../josm/actions/search/PushbackTokenizer.java     |    13 +-
 .../josm/actions/search/SearchAction.java          |    95 +-
 .../josm/actions/search/SearchCompiler.java        |   313 +-
 .../actions/upload/ApiPreconditionCheckerHook.java |    10 +-
 .../upload/CyclicUploadDependencyException.java    |    14 +-
 .../josm/actions/upload/FixDataHook.java           |    32 +-
 .../actions/upload/RelationUploadOrderHook.java    |     8 +-
 .../josm/actions/upload/UploadHook.java            |     2 +-
 .../josm/actions/upload/UploadNotesTask.java       |    13 +-
 .../josm/actions/upload/ValidateUploadHook.java    |     4 +-
 src/org/openstreetmap/josm/command/AddCommand.java |    27 +-
 .../josm/command/AddPrimitivesCommand.java         |    51 +-
 .../openstreetmap/josm/command/ChangeCommand.java  |    33 +-
 .../josm/command/ChangeNodesCommand.java           |    33 +-
 .../josm/command/ChangePropertyCommand.java        |    46 +-
 .../josm/command/ChangePropertyKeyCommand.java     |    48 +-
 .../command/ChangeRelationMemberRoleCommand.java   |    46 +
 src/org/openstreetmap/josm/command/Command.java    |    74 +-
 .../openstreetmap/josm/command/DeleteCommand.java  |    59 +-
 .../openstreetmap/josm/command/MoveCommand.java    |    69 +-
 .../openstreetmap/josm/command/PseudoCommand.java  |     3 +
 .../openstreetmap/josm/command/PurgeCommand.java   |    64 +-
 .../josm/command/RemoveNodesCommand.java           |    33 +-
 .../openstreetmap/josm/command/RotateCommand.java  |    38 +-
 .../openstreetmap/josm/command/ScaleCommand.java   |    38 +-
 .../openstreetmap/josm/command/SelectCommand.java  |    31 +
 .../josm/command/SequenceCommand.java              |    36 +-
 .../josm/command/TransformNodesCommand.java        |    36 +-
 .../josm/command/conflict/ConflictAddCommand.java  |    29 +-
 .../command/conflict/ConflictResolveCommand.java   |    31 +-
 .../conflict/CoordinateConflictResolveCommand.java |    37 +-
 .../DeletedStateConflictResolveCommand.java        |    28 +
 .../conflict/ModifiedConflictResolveCommand.java   |    27 +-
 .../RelationMemberConflictResolverCommand.java     |    41 +-
 .../conflict/TagConflictResolveCommand.java        |    42 +-
 .../conflict/VersionConflictResolveCommand.java    |    27 +-
 .../conflict/WayNodesConflictResolverCommand.java  |    33 +-
 .../josm/corrector/CorrectionTable.java            |     5 +-
 .../josm/corrector/CorrectionTableModel.java       |     4 +-
 .../josm/corrector/ReverseWayNoTagCorrector.java   |     3 +-
 .../josm/corrector/ReverseWayTagCorrector.java     |    23 +-
 .../openstreetmap/josm/corrector/TagCorrector.java |    13 +-
 src/org/openstreetmap/josm/data/APIDataSet.java    |    12 +-
 src/org/openstreetmap/josm/data/AutosaveTask.java  |     9 +-
 src/org/openstreetmap/josm/data/Bounds.java        |    13 +-
 .../josm/data/CustomConfigurator.java              |   180 +-
 src/org/openstreetmap/josm/data/Data.java          |     6 +-
 src/org/openstreetmap/josm/data/Preferences.java   |   276 +-
 .../openstreetmap/josm/data/ProjectionBounds.java  |    17 +-
 .../josm/data/SelectionChangedListener.java        |     2 +-
 .../josm/data/SystemOfMeasurement.java             |    86 +-
 .../openstreetmap/josm/data/UndoRedoHandler.java   |    18 +-
 src/org/openstreetmap/josm/data/Version.java       |     8 +-
 .../josm/data/cache/BufferedImageCacheEntry.java   |    20 +-
 .../openstreetmap/josm/data/cache/CacheEntry.java  |     8 +-
 .../josm/data/cache/CacheEntryAttributes.java      |   138 +-
 .../josm/data/cache/HostLimitQueue.java            |   165 +
 .../josm/data/cache/ICachedLoaderJob.java          |    32 +-
 .../josm/data/cache/ICachedLoaderListener.java     |    12 +-
 .../josm/data/cache/JCSCacheManager.java           |    81 +-
 .../josm/data/cache/JCSCachedTileLoaderJob.java    |   382 +-
 .../openstreetmap/josm/data/conflict/Conflict.java |     2 +-
 .../josm/data/conflict/ConflictCollection.java     |    47 +-
 .../josm/data/conflict/IConflictListener.java      |     5 +-
 .../openstreetmap/josm/data/coor/CachedLatLon.java |    31 +-
 .../josm/data/coor/CoordinateFormat.java           |     2 +-
 .../openstreetmap/josm/data/coor/EastNorth.java    |    60 +-
 src/org/openstreetmap/josm/data/coor/LatLon.java   |    18 +-
 .../openstreetmap/josm/data/coor/QuadTiling.java   |    27 +-
 .../openstreetmap/josm/data/gpx/GpxConstants.java  |    78 +-
 src/org/openstreetmap/josm/data/gpx/GpxData.java   |    29 +-
 src/org/openstreetmap/josm/data/gpx/GpxTrack.java  |     3 +
 .../josm/data/gpx/GpxTrackSegment.java             |     3 +
 .../josm/data/gpx/ImmutableGpxTrack.java           |     2 +-
 .../josm/data/gpx/ImmutableGpxTrackSegment.java    |     4 +-
 src/org/openstreetmap/josm/data/gpx/WayPoint.java  |     6 +-
 .../josm/data/gpx/WithAttributes.java              |     4 +-
 .../CachedAttributionBingAerialTileSource.java     |    91 +
 .../josm/data/imagery/CachedTileLoaderFactory.java |    95 +
 .../josm/data/imagery/GeorefImage.java             |   256 -
 .../josm/data/imagery/ImageryInfo.java             |   263 +-
 .../josm/data/imagery/ImageryLayerInfo.java        |    24 +-
 .../josm/data/imagery/OffsetBookmark.java          |     8 +-
 src/org/openstreetmap/josm/data/imagery/Shape.java |    17 +-
 .../josm/data/imagery/TMSCachedTileLoader.java     |   116 +-
 .../josm/data/imagery/TMSCachedTileLoaderJob.java  |   329 +-
 .../josm/data/imagery/TemplatedWMSTileSource.java  |   378 +
 .../josm/data/imagery/TileLoaderFactory.java       |    29 +
 .../josm/data/imagery/WMSCachedTileLoader.java     |    43 +
 .../josm/data/imagery/WMSCachedTileLoaderJob.java  |    46 +
 .../josm/data/imagery/WMTSTileSource.java          |   687 +
 .../openstreetmap/josm/data/imagery/WmsCache.java  |   586 -
 .../openstreetmap/josm/data/notes/NoteComment.java |     8 +-
 .../josm/data/oauth/OAuthParameters.java           |     4 +
 .../josm/data/oauth/OsmPrivileges.java             |     9 +
 .../josm/data/osm/AbstractPrimitive.java           |   107 +-
 src/org/openstreetmap/josm/data/osm/BBox.java      |    14 +-
 src/org/openstreetmap/josm/data/osm/Changeset.java |    14 +-
 .../josm/data/osm/ChangesetCache.java              |     8 +-
 .../josm/data/osm/ChangesetCacheEvent.java         |     4 +-
 .../josm/data/osm/ChangesetDataSet.java            |    13 +-
 src/org/openstreetmap/josm/data/osm/DataSet.java   |    28 +-
 .../openstreetmap/josm/data/osm/DataSetMerger.java |    41 +-
 .../josm/data/osm/DefaultChangesetCacheEvent.java  |     3 +
 .../openstreetmap/josm/data/osm/FilterMatcher.java |     2 +-
 src/org/openstreetmap/josm/data/osm/Hash.java      |     6 +-
 src/org/openstreetmap/josm/data/osm/INode.java     |     3 +
 .../openstreetmap/josm/data/osm/IPrimitive.java    |    25 +-
 src/org/openstreetmap/josm/data/osm/IRelation.java |     4 +-
 src/org/openstreetmap/josm/data/osm/IWay.java      |     3 +-
 .../josm/data/osm/MultipolygonBuilder.java         |    15 +-
 .../openstreetmap/josm/data/osm/NameFormatter.java |     5 +
 src/org/openstreetmap/josm/data/osm/Node.java      |    30 +-
 src/org/openstreetmap/josm/data/osm/NodeData.java  |    23 +-
 src/org/openstreetmap/josm/data/osm/NoteData.java  |    21 +-
 .../openstreetmap/josm/data/osm/OsmPrimitive.java  |   119 +-
 .../josm/data/osm/OsmPrimitiveType.java            |     2 +-
 src/org/openstreetmap/josm/data/osm/OsmUtils.java  |    26 +-
 .../openstreetmap/josm/data/osm/PrimitiveData.java |     4 +-
 .../josm/data/osm/PrimitiveDeepCopy.java           |     2 +
 .../openstreetmap/josm/data/osm/PrimitiveId.java   |     2 +-
 .../openstreetmap/josm/data/osm/QuadBuckets.java   |    76 +-
 src/org/openstreetmap/josm/data/osm/Relation.java  |    76 +-
 .../openstreetmap/josm/data/osm/RelationData.java  |     9 +-
 .../josm/data/osm/RelationMember.java              |     6 +-
 .../josm/data/osm/RelationMemberData.java          |     2 +-
 .../josm/data/osm/RelationToChildReference.java    |     3 +-
 .../josm/data/osm/SimplePrimitiveId.java           |    65 +-
 src/org/openstreetmap/josm/data/osm/Storage.java   |    36 +-
 src/org/openstreetmap/josm/data/osm/Tag.java       |     2 +-
 .../openstreetmap/josm/data/osm/TagCollection.java |    56 +-
 src/org/openstreetmap/josm/data/osm/Tagged.java    |     4 +-
 .../openstreetmap/josm/data/osm/TigerUtils.java    |     2 +-
 src/org/openstreetmap/josm/data/osm/User.java      |    33 +-
 src/org/openstreetmap/josm/data/osm/UserInfo.java  |    11 +
 src/org/openstreetmap/josm/data/osm/Way.java       |    51 +-
 src/org/openstreetmap/josm/data/osm/WayData.java   |    11 +-
 .../openstreetmap/josm/data/osm/WaySegment.java    |     2 +-
 .../josm/data/osm/event/DataSetListener.java       |     2 +-
 .../josm/data/osm/event/DatasetEventManager.java   |   131 +-
 .../josm/data/osm/event/SelectionEventManager.java |     2 +-
 .../josm/data/osm/history/History.java             |    18 +-
 .../josm/data/osm/history/HistoryDataSet.java      |    12 +-
 .../data/osm/history/HistoryNameFormatter.java     |     2 +
 .../josm/data/osm/history/HistoryNode.java         |     3 +-
 .../josm/data/osm/history/HistoryOsmPrimitive.java |    14 +-
 .../josm/data/osm/history/HistoryRelation.java     |     6 +-
 .../josm/data/osm/history/HistoryWay.java          |     2 +-
 .../josm/data/osm/visitor/AllNodesVisitor.java     |     9 +-
 .../josm/data/osm/visitor/BoundingXYVisitor.java   |    21 +-
 .../osm/visitor/MergeSourceBuildingVisitor.java    |     2 +-
 .../osm/visitor/paint/AbstractMapRenderer.java     |    22 +-
 .../josm/data/osm/visitor/paint/LineClip.java      |    40 +-
 .../data/osm/visitor/paint/MapRendererFactory.java |    25 +-
 .../josm/data/osm/visitor/paint/PaintColors.java   |    10 +-
 .../data/osm/visitor/paint/StyledMapRenderer.java  |   384 +-
 .../osm/visitor/paint/WireframeMapRenderer.java    |    21 +-
 .../osm/visitor/paint/relations/Multipolygon.java  |    22 +-
 .../visitor/paint/relations/MultipolygonCache.java |    38 +-
 .../josm/data/preferences/ColorProperty.java       |     9 +-
 .../josm/data/preferences/IntegerProperty.java     |     5 +-
 .../josm/data/projection/AbstractProjection.java   |    24 +-
 .../josm/data/projection/CustomProjection.java     |   152 +-
 .../josm/data/projection/Ellipsoid.java            |    66 +-
 .../josm/data/projection/Projection.java           |    19 +
 .../ProjectionConfigurationException.java          |    25 +-
 .../josm/data/projection/Projections.java          |    72 +-
 .../josm/data/projection/datum/NTV2GridShift.java  |     5 +
 .../data/projection/datum/NTV2GridShiftFile.java   |    58 +-
 .../projection/datum/NTV2GridShiftFileWrapper.java |     4 +
 .../josm/data/projection/datum/NTV2SubGrid.java    |    88 +-
 .../josm/data/projection/datum/NTV2Util.java       |    12 +-
 .../data/projection/datum/SevenParameterDatum.java |     8 +-
 .../projection/proj/LambertConformalConic.java     |    41 +-
 .../josm/data/projection/proj/LonLat.java          |     4 +-
 .../josm/data/projection/proj/Mercator.java        |     5 +-
 .../josm/data/projection/proj/Proj.java            |     1 -
 .../josm/data/projection/proj/ProjParameters.java  |     7 +-
 .../data/projection/proj/SwissObliqueMercator.java |    32 +-
 .../data/projection/proj/TransverseMercator.java   |     7 +-
 .../josm/data/validation/FixableTestError.java     |    89 +-
 .../josm/data/validation/OsmValidator.java         |     6 +-
 .../josm/data/validation/PaintVisitor.java         |    10 +-
 .../josm/data/validation/Severity.java             |     2 +-
 .../openstreetmap/josm/data/validation/Test.java   |    15 +-
 .../josm/data/validation/TestError.java            |    84 +-
 .../josm/data/validation/ValidatorVisitor.java     |     5 +-
 .../data/validation/routines/DomainValidator.java  |    19 +-
 .../data/validation/routines/EmailValidator.java   |     2 +-
 .../validation/routines/InetAddressValidator.java  |     4 +-
 .../data/validation/routines/RegexValidator.java   |    25 +-
 .../data/validation/routines/UrlValidator.java     |     8 +-
 .../josm/data/validation/tests/Addresses.java      |    10 +-
 .../data/validation/tests/BarriersEntrances.java   |     4 +-
 .../josm/data/validation/tests/Coastlines.java     |     7 +-
 .../data/validation/tests/ConditionalKeys.java     |    11 +-
 .../josm/data/validation/tests/CrossingWays.java   |     7 +-
 .../josm/data/validation/tests/DuplicateNode.java  |    42 +-
 .../data/validation/tests/DuplicateRelation.java   |    37 +-
 .../josm/data/validation/tests/DuplicateWay.java   |    33 +-
 .../data/validation/tests/DuplicatedWayNodes.java  |     2 +-
 .../josm/data/validation/tests/Highways.java       |    25 +-
 .../josm/data/validation/tests/InternetTags.java   |     2 +-
 .../josm/data/validation/tests/Lanes.java          |     2 +-
 .../josm/data/validation/tests/LongSegment.java    |     9 +-
 .../data/validation/tests/MapCSSTagChecker.java    |    37 +-
 .../data/validation/tests/MultipolygonTest.java    |    23 +-
 .../josm/data/validation/tests/NameMismatch.java   |     9 +-
 .../data/validation/tests/OpeningHourTest.java     |    22 +-
 .../data/validation/tests/OverlappingWays.java     |    11 +-
 .../josm/data/validation/tests/PowerLines.java     |    12 +-
 .../data/validation/tests/RelationChecker.java     |    24 +-
 .../data/validation/tests/SelfIntersectingWay.java |     2 +-
 .../data/validation/tests/SimilarNamedWays.java    |    17 +-
 .../josm/data/validation/tests/TagChecker.java     |   226 +-
 .../data/validation/tests/TurnrestrictionTest.java |    13 +-
 .../josm/data/validation/tests/UnclosedWays.java   |    28 +-
 .../data/validation/tests/UnconnectedWays.java     |    25 +-
 .../josm/data/validation/tests/UntaggedNode.java   |    80 +-
 .../josm/data/validation/tests/UntaggedWay.java    |    30 +-
 .../data/validation/tests/WayConnectedToArea.java  |     4 +-
 .../data/validation/tests/WronglyOrderedWays.java  |     2 +-
 .../util/AggregatePrimitivesVisitor.java           |     2 +-
 .../josm/data/validation/util/Entities.java        |     6 +-
 .../data/validation/util/MultipleNameVisitor.java  |     6 +-
 .../josm/data/validation/util/NameVisitor.java     |     5 +-
 .../josm/data/validation/util/ValUtil.java         |     8 +-
 .../josm/gui/ConditionalOptionPaneUtil.java        |    27 +-
 .../josm/gui/DefaultNameFormatter.java             |    65 +-
 .../josm/gui/ExceptionDialogUtil.java              |    42 +-
 src/org/openstreetmap/josm/gui/ExtendedDialog.java |    53 +-
 src/org/openstreetmap/josm/gui/FileDrop.java       |   579 +-
 src/org/openstreetmap/josm/gui/GettingStarted.java |     5 +-
 .../josm/gui/HelpAwareOptionPane.java              |    23 +-
 src/org/openstreetmap/josm/gui/HideableButton.java |     7 +
 .../openstreetmap/josm/gui/IconToggleButton.java   |    12 +-
 src/org/openstreetmap/josm/gui/ImageryMenu.java    |    32 +-
 .../josm/gui/JosmUserIdentityManager.java          |     8 +-
 .../openstreetmap/josm/gui/MainApplication.java    |   125 +-
 src/org/openstreetmap/josm/gui/MainMenu.java       |   163 +-
 src/org/openstreetmap/josm/gui/MapFrame.java       |   174 +-
 .../openstreetmap/josm/gui/MapFrameListener.java   |     4 +-
 src/org/openstreetmap/josm/gui/MapMover.java       |    16 +-
 src/org/openstreetmap/josm/gui/MapScaler.java      |     6 +-
 src/org/openstreetmap/josm/gui/MapSlider.java      |     8 +-
 src/org/openstreetmap/josm/gui/MapStatus.java      |   344 +-
 src/org/openstreetmap/josm/gui/MapView.java        |   740 +-
 src/org/openstreetmap/josm/gui/MenuScroller.java   |    13 +-
 .../openstreetmap/josm/gui/NameFormatterHook.java  |     8 +-
 .../josm/gui/NavigatableComponent.java             |   331 +-
 .../openstreetmap/josm/gui/NoteInputDialog.java    |     4 +-
 src/org/openstreetmap/josm/gui/Notification.java   |     4 +-
 .../josm/gui/NotificationManager.java              |    16 +-
 .../josm/gui/OsmPrimitivRenderer.java              |    15 +-
 .../openstreetmap/josm/gui/PleaseWaitDialog.java   |    20 +-
 .../openstreetmap/josm/gui/PleaseWaitRunnable.java |    12 +-
 .../openstreetmap/josm/gui/PopupMenuHandler.java   |    14 +-
 src/org/openstreetmap/josm/gui/ScrollViewport.java |    11 +-
 .../openstreetmap/josm/gui/SelectionManager.java   |   241 +-
 .../josm/gui/ShowHideButtonListener.java           |     5 +-
 src/org/openstreetmap/josm/gui/SideButton.java     |     6 +-
 src/org/openstreetmap/josm/gui/SplashScreen.java   |   357 +-
 .../josm/gui/actionsupport/AlignImageryPanel.java  |    80 -
 .../DeleteFromRelationConfirmationDialog.java      |   360 -
 .../josm/gui/actionsupport/LogShowDialog.java      |    53 -
 .../openstreetmap/josm/gui/bbox/BBoxChooser.java   |     4 +-
 .../openstreetmap/josm/gui/bbox/SizeButton.java    |    22 +-
 .../josm/gui/bbox/SlippyMapBBoxChooser.java        |   101 +-
 .../josm/gui/bbox/SlippyMapControler.java          |     5 +-
 .../openstreetmap/josm/gui/bbox/SourceButton.java  |    15 +-
 .../josm/gui/bbox/TileSelectionBBoxChooser.java    |   101 +-
 .../openstreetmap/josm/gui/bbox/package-info.java  |     6 +
 .../josm/gui/conflict/ConflictColors.java          |    32 +-
 .../josm/gui/conflict/pair/ConflictResolver.java   |    23 +-
 .../josm/gui/conflict/pair/IConflictResolver.java  |     2 +-
 .../josm/gui/conflict/pair/ListMergeModel.java     |    90 +-
 .../josm/gui/conflict/pair/ListMerger.java         |    87 +-
 .../josm/gui/conflict/pair/PairTable.java          |     3 +-
 .../conflict/pair/nodes/NodeListMergeModel.java    |     4 +-
 .../gui/conflict/pair/nodes/NodeListMerger.java    |    12 +-
 .../pair/nodes/NodeListTableCellRenderer.java      |    12 +-
 .../pair/properties/PropertiesMergeModel.java      |    28 +-
 .../conflict/pair/properties/PropertiesMerger.java |    52 +-
 .../relation/RelationMemberListMergeModel.java     |     8 +-
 .../pair/relation/RelationMemberMerger.java        |    21 +-
 .../relation/RelationMemberTableCellEditor.java    |     2 +-
 .../relation/RelationMemberTableCellRenderer.java  |     8 +-
 .../pair/tags/MergedTableCellRenderer.java         |     7 +-
 .../conflict/pair/tags/MineTableCellRenderer.java  |     2 +-
 .../josm/gui/conflict/pair/tags/TagMergeItem.java  |     2 -
 .../josm/gui/conflict/pair/tags/TagMergeModel.java |    26 +-
 .../pair/tags/TagMergeTableCellRenderer.java       |     5 +-
 .../josm/gui/conflict/pair/tags/TagMerger.java     |    66 +-
 .../conflict/pair/tags/TheirTableCellRenderer.java |     2 +-
 .../tags/CombinePrimitiveResolverDialog.java       |    15 +-
 .../gui/conflict/tags/MultiValueCellEditor.java    |    15 +-
 .../gui/conflict/tags/MultiValueCellRenderer.java  |    11 +-
 .../tags/MultiValueResolutionDecision.java         |     5 +-
 .../tags/PasteTagsConflictResolverDialog.java      |    78 +-
 .../tags/RelationMemberConflictDecision.java       |     7 +-
 .../tags/RelationMemberConflictDecisionEditor.java |     2 +-
 .../RelationMemberConflictDecisionRenderer.java    |     5 +-
 .../tags/RelationMemberConflictResolver.java       |     6 +-
 .../tags/RelationMemberConflictResolverModel.java  |    20 +-
 .../tags/RelationMemberConflictResolverTable.java  |     2 +-
 .../conflict/tags/TagConflictResolutionUtil.java   |    17 +-
 .../gui/conflict/tags/TagConflictResolver.java     |     2 +-
 .../conflict/tags/TagConflictResolverModel.java    |    20 +-
 .../conflict/tags/TagConflictResolverTable.java    |     4 +-
 .../josm/gui/dialogs/ChangesetDialog.java          |    14 +-
 .../josm/gui/dialogs/CommandStackDialog.java       |    41 +-
 .../josm/gui/dialogs/ConflictDialog.java           |    30 +-
 .../josm/gui/dialogs/ConflictResolutionDialog.java |     6 +-
 .../DeleteFromRelationConfirmationDialog.java      |   363 +
 .../josm/gui/dialogs/DialogsPanel.java             |    27 +-
 .../josm/gui/dialogs/FilterDialog.java             |    49 +-
 .../josm/gui/dialogs/FilterTableModel.java         |     8 +-
 .../josm/gui/dialogs/InspectPrimitiveDialog.java   |   100 +-
 .../josm/gui/dialogs/LatLonDialog.java             |   281 +-
 .../josm/gui/dialogs/LayerListDialog.java          |   322 +-
 .../josm/gui/dialogs/LayerListPopup.java           |    12 +-
 .../josm/gui/dialogs/LogShowDialog.java            |    60 +
 .../josm/gui/dialogs/MapPaintDialog.java           |    52 +-
 .../josm/gui/dialogs/MinimapDialog.java            |    71 +
 .../josm/gui/dialogs/NotesDialog.java              |    57 +-
 .../josm/gui/dialogs/OsmIdSelectionDialog.java     |    30 +-
 .../josm/gui/dialogs/RelationListDialog.java       |    41 +-
 .../josm/gui/dialogs/SelectionListDialog.java      |    75 +-
 .../josm/gui/dialogs/ToggleDialog.java             |    94 +-
 .../josm/gui/dialogs/UserListDialog.java           |    35 +-
 .../josm/gui/dialogs/ValidatorDialog.java          |    75 +-
 .../dialogs/changeset/ChangesetCacheManager.java   |    15 +-
 .../changeset/ChangesetCacheManagerModel.java      |     4 +-
 .../changeset/ChangesetCacheTableCellRenderer.java |     2 +-
 .../changeset/ChangesetContentDownloadTask.java    |    20 +-
 .../dialogs/changeset/ChangesetContentPanel.java   |    12 +-
 .../ChangesetContentTableCellRenderer.java         |     4 +-
 .../changeset/ChangesetContentTableModel.java      |     3 +-
 .../dialogs/changeset/ChangesetDetailPanel.java    |    10 +-
 .../changeset/ChangesetDiscussionPanel.java        |     6 +-
 .../ChangesetDiscussionTableCellRenderer.java      |     8 +-
 .../dialogs/changeset/ChangesetDownloadTask.java   |     2 +
 .../changeset/ChangesetHeaderDownloadTask.java     |     8 +-
 .../changeset/ChangesetListCellRenderer.java       |    11 +-
 .../gui/dialogs/changeset/ChangesetListModel.java  |    16 +-
 .../gui/dialogs/changeset/ChangesetTagsPanel.java  |     6 +-
 .../ChangesetsInActiveDataLayerListModel.java      |    31 +-
 .../changeset/SingleChangesetDownloadPanel.java    |     7 +-
 .../josm/gui/dialogs/changeset/package-info.java   |     6 +
 .../query/AdvancedChangesetQueryPanel.java         |   133 +-
 .../changeset/query/BasicChangesetQueryPanel.java  |    32 +-
 .../changeset/query/ChangesetQueryDialog.java      |     2 +-
 .../changeset/query/ChangesetQueryTask.java        |    33 +-
 .../changeset/query/UrlBasedQueryPanel.java        |    22 +-
 .../gui/dialogs/changeset/query/package-info.java  |     6 +
 .../josm/gui/dialogs/package-info.java             |    11 +
 .../dialogs/properties/PropertiesCellRenderer.java |    41 +-
 .../gui/dialogs/properties/PropertiesDialog.java   |   167 +-
 .../josm/gui/dialogs/properties/TagEditHelper.java |    99 +-
 .../josm/gui/dialogs/properties/package-info.java  |     6 +
 .../gui/dialogs/relation/ChildRelationBrowser.java |    34 +-
 .../relation/DownloadRelationMemberTask.java       |     6 +-
 .../gui/dialogs/relation/DownloadRelationTask.java |     7 +-
 .../dialogs/relation/GenericRelationEditor.java    |   116 +-
 .../gui/dialogs/relation/MemberRoleCellEditor.java |     4 +-
 .../josm/gui/dialogs/relation/MemberTable.java     |    10 +-
 .../dialogs/relation/MemberTableCellRenderer.java  |     4 +-
 .../relation/MemberTableLinkedCellRenderer.java    |    44 +-
 .../gui/dialogs/relation/MemberTableModel.java     |    51 +-
 .../relation/ParentRelationLoadingTask.java        |     4 +-
 .../relation/ReferringRelationsBrowser.java        |     2 +-
 .../dialogs/relation/RelationDialogManager.java    |    17 +-
 .../josm/gui/dialogs/relation/RelationEditor.java  |     4 +-
 .../josm/gui/dialogs/relation/RelationTree.java    |    22 +-
 .../dialogs/relation/RelationTreeCellRenderer.java |     8 +-
 .../gui/dialogs/relation/RelationTreeModel.java    |    12 +-
 .../josm/gui/dialogs/relation/RunnableAction.java  |     3 -
 .../josm/gui/dialogs/relation/SelectionTable.java  |     2 +-
 .../relation/SelectionTableCellRenderer.java       |     8 +-
 .../gui/dialogs/relation/SelectionTableModel.java  |     2 +-
 .../josm/gui/dialogs/relation/package-info.java    |     6 +
 .../gui/dialogs/relation/sort/RelationNodeMap.java |    69 +-
 .../dialogs/relation/sort/RelationSortUtils.java   |    12 +-
 .../gui/dialogs/relation/sort/RelationSorter.java  |    46 +-
 .../dialogs/relation/sort/WayConnectionType.java   |     2 +-
 .../relation/sort/WayConnectionTypeCalculator.java |    34 +-
 .../gui/dialogs/validator/ValidatorTreePanel.java  |    71 +-
 .../dialogs/validator/ValidatorTreeRenderer.java   |     2 +-
 .../josm/gui/dialogs/validator/package-info.java   |     6 +
 .../josm/gui/download/BookmarkList.java            |    45 +-
 .../josm/gui/download/BookmarkSelection.java       |    27 +-
 .../josm/gui/download/BoundingBoxSelection.java    |    68 +-
 .../josm/gui/download/DownloadDialog.java          |    51 +-
 .../josm/gui/download/DownloadSelection.java       |     2 +-
 .../josm/gui/download/PlaceSelection.java          |    65 +-
 .../josm/gui/download/SlippyMapChooser.java        |    15 +-
 .../josm/gui/download/TileSelection.java           |     5 +-
 .../josm/gui/download/package-info.java            |     6 +
 .../openstreetmap/josm/gui/help/HelpBrowser.java   |    52 +-
 .../josm/gui/help/HelpBrowserHistory.java          |     7 +-
 .../josm/gui/help/HelpContentReader.java           |    16 +-
 src/org/openstreetmap/josm/gui/help/HelpUtil.java  |    26 +-
 .../openstreetmap/josm/gui/help/package-info.java  |     6 +
 .../josm/gui/history/CoordinateInfoViewer.java     |    52 +-
 .../josm/gui/history/DiffTableModel.java           |     3 +-
 .../josm/gui/history/HistoryBrowserDialog.java     |     7 +-
 .../gui/history/HistoryBrowserDialogManager.java   |    13 +-
 .../josm/gui/history/HistoryBrowserModel.java      |    41 +-
 .../josm/gui/history/HistoryLoadTask.java          |     6 +-
 .../josm/gui/history/HistoryViewerPanel.java       |    10 +-
 .../gui/history/NodeListTableCellRenderer.java     |     6 +-
 .../josm/gui/history/NodeListViewer.java           |    21 +-
 .../RelationMemberListTableCellRenderer.java       |    21 +-
 .../josm/gui/history/RelationMemberListViewer.java |     2 +-
 .../josm/gui/history/SelectionSynchronizer.java    |    12 +-
 .../josm/gui/history/TagTableCellRenderer.java     |     8 +-
 .../josm/gui/history/TwoColumnDiff.java            |    38 +-
 .../josm/gui/history/VersionInfoPanel.java         |    31 +-
 .../josm/gui/history/VersionTable.java             |    38 +-
 .../josm/gui/history/package-info.java             |     6 +
 .../josm/gui/io/AbstractUploadTask.java            |    37 +-
 .../josm/gui/io/ActionFlagsTableCell.java          |    11 +-
 .../josm/gui/io/BasicUploadSettingsPanel.java      |     6 +-
 .../josm/gui/io/ChangesetCellRenderer.java         |     6 +-
 .../josm/gui/io/ChangesetCommentModel.java         |     2 +-
 .../josm/gui/io/ChangesetManagementPanel.java      |    21 +-
 .../josm/gui/io/CloseChangesetDialog.java          |     6 +-
 .../josm/gui/io/CloseChangesetTask.java            |     4 +-
 .../io/ConfigurationParameterRequestHandler.java   |     1 +
 .../josm/gui/io/CredentialDialog.java              |    45 +-
 .../josm/gui/io/DownloadFileTask.java              |    44 +-
 .../josm/gui/io/DownloadOpenChangesetsTask.java    |    16 +-
 .../josm/gui/io/DownloadPrimitivesTask.java        |    14 +-
 .../io/DownloadPrimitivesWithReferrersTask.java    |    36 +-
 .../josm/gui/io/LayerNameAndFilePathTableCell.java |    32 +-
 .../josm/gui/io/OpenChangesetComboBoxModel.java    |     6 +-
 .../josm/gui/io/RecentlyOpenedFilesMenu.java       |     2 +-
 .../openstreetmap/josm/gui/io/SaveLayerTask.java   |     8 +-
 .../josm/gui/io/SaveLayersDialog.java              |    37 +-
 .../openstreetmap/josm/gui/io/SaveLayersModel.java |    11 +-
 .../openstreetmap/josm/gui/io/SaveLayersTable.java |     2 +-
 .../josm/gui/io/SaveLayersTableColumnModel.java    |    21 +-
 .../josm/gui/io/TagSettingsPanel.java              |    12 +-
 .../josm/gui/io/UpdatePrimitivesTask.java          |    12 +-
 .../josm/gui/io/UploadAndSaveProgressRenderer.java |    23 +-
 .../openstreetmap/josm/gui/io/UploadDialog.java    |    18 +-
 .../openstreetmap/josm/gui/io/UploadLayerTask.java |    25 +-
 .../josm/gui/io/UploadNoteLayerTask.java           |    51 +
 .../josm/gui/io/UploadParameterSummaryPanel.java   |    60 +-
 .../josm/gui/io/UploadPrimitivesTask.java          |    32 +-
 .../josm/gui/io/UploadSelectionDialog.java         |    46 +-
 .../openstreetmap/josm/gui/io/UploadStrategy.java  |     8 +-
 .../josm/gui/io/UploadStrategySelectionPanel.java  |    73 +-
 .../josm/gui/io/UploadStrategySpecification.java   |     4 +-
 .../josm/gui/io/UploadedObjectsSummaryPanel.java   |    42 +-
 .../openstreetmap/josm/gui/io/package-info.java    |     6 +
 .../gui/layer/AbstractCachedTileSourceLayer.java   |   139 +
 .../josm/gui/layer/AbstractTileSourceLayer.java    |  1719 ++
 .../josm/gui/layer/AlignImageryPanel.java          |    79 +
 .../josm/gui/layer/CustomizeColor.java             |    15 +-
 src/org/openstreetmap/josm/gui/layer/GpxLayer.java |    50 +-
 .../josm/gui/layer/ImageProcessor.java             |    24 +
 .../openstreetmap/josm/gui/layer/ImageryLayer.java |   178 +-
 .../josm/gui/layer/JumpToMarkerActions.java        |     3 +-
 src/org/openstreetmap/josm/gui/layer/Layer.java    |    51 +-
 .../openstreetmap/josm/gui/layer/NoteLayer.java    |    69 +-
 .../openstreetmap/josm/gui/layer/OsmDataLayer.java |    55 +-
 src/org/openstreetmap/josm/gui/layer/TMSLayer.java |  1465 +-
 .../josm/gui/layer/ValidatorLayer.java             |    13 +-
 src/org/openstreetmap/josm/gui/layer/WMSLayer.java |  1128 +-
 .../openstreetmap/josm/gui/layer/WMTSLayer.java    |   133 +
 .../gui/layer/geoimage/CorrelateGpxWithImages.java |   375 +-
 .../josm/gui/layer/geoimage/GeoImageLayer.java     |   146 +-
 .../josm/gui/layer/geoimage/ImageDisplay.java      |    43 +-
 .../josm/gui/layer/geoimage/ImageEntry.java        |    25 +-
 .../josm/gui/layer/geoimage/ImageViewerDialog.java |    30 +-
 .../josm/gui/layer/geoimage/JpegFileFilter.java    |    29 -
 .../gui/layer/geoimage/ShowThumbnailAction.java    |     4 +-
 .../josm/gui/layer/geoimage/ThumbsLoader.java      |    61 +-
 .../josm/gui/layer/geoimage/package-info.java      |     6 +
 .../gui/layer/gpx/ChooseTrackVisibilityAction.java |    21 +-
 .../gui/layer/gpx/ConvertToDataLayerAction.java    |     9 +-
 .../josm/gui/layer/gpx/CustomizeDrawingAction.java |     3 +-
 .../josm/gui/layer/gpx/DateFilterPanel.java        |    42 +-
 .../josm/gui/layer/gpx/DownloadAlongPanel.java     |    12 +-
 .../gui/layer/gpx/DownloadAlongTrackAction.java    |     1 +
 .../gui/layer/gpx/DownloadWmsAlongTrackAction.java |    23 +-
 .../josm/gui/layer/gpx/GpxDrawHelper.java          |    54 +-
 .../josm/gui/layer/gpx/ImportAudioAction.java      |    17 +-
 .../josm/gui/layer/gpx/ImportImagesAction.java     |    10 +-
 .../josm/gui/layer/gpx/package-info.java           |     6 +
 .../josm/gui/layer/markerlayer/AudioMarker.java    |     4 +-
 .../josm/gui/layer/markerlayer/ButtonMarker.java   |     3 +-
 .../josm/gui/layer/markerlayer/ImageMarker.java    |    12 +-
 .../josm/gui/layer/markerlayer/Marker.java         |    31 +-
 .../josm/gui/layer/markerlayer/MarkerLayer.java    |    67 +-
 .../josm/gui/layer/markerlayer/PlayHeadMarker.java |    42 +-
 .../josm/gui/layer/markerlayer/WebMarker.java      |     9 +-
 .../josm/gui/layer/markerlayer/package-info.java   |     6 +
 .../openstreetmap/josm/gui/layer/package-info.java |     6 +
 .../josm/gui/mappaint/BoxTextElemStyle.java        |    11 +-
 .../openstreetmap/josm/gui/mappaint/Cascade.java   |    20 +-
 .../openstreetmap/josm/gui/mappaint/ElemStyle.java |    48 +-
 .../josm/gui/mappaint/ElemStyles.java              |    22 +-
 .../josm/gui/mappaint/Environment.java             |    16 +-
 .../openstreetmap/josm/gui/mappaint/Keyword.java   |     3 +-
 .../gui/mappaint/LabelCompositionStrategy.java     |    14 +-
 .../josm/gui/mappaint/LineElemStyle.java           |    24 +-
 .../josm/gui/mappaint/LineTextElemStyle.java       |     3 +-
 .../josm/gui/mappaint/MapPaintMenu.java            |     1 +
 .../josm/gui/mappaint/MapPaintStyles.java          |    18 +-
 .../josm/gui/mappaint/MultiCascade.java            |     2 +-
 .../josm/gui/mappaint/NodeElemStyle.java           |    23 +-
 .../josm/gui/mappaint/RepeatImageElemStyle.java    |     2 +-
 .../josm/gui/mappaint/StyleCache.java              |    38 +-
 .../josm/gui/mappaint/StyleSetting.java            |     7 +-
 .../josm/gui/mappaint/StyleSource.java             |     6 +-
 .../josm/gui/mappaint/TextElement.java             |    28 +-
 .../josm/gui/mappaint/mapcss/Condition.java        |   316 +-
 .../gui/mappaint/mapcss/ExpressionFactory.java     |   101 +-
 .../josm/gui/mappaint/mapcss/Instruction.java      |     8 +-
 .../gui/mappaint/mapcss/LiteralExpression.java     |     2 +-
 .../josm/gui/mappaint/mapcss/MapCSSParser.jj       |    14 +-
 .../gui/mappaint/mapcss/MapCSSStyleSource.java     |    50 +-
 .../josm/gui/mappaint/mapcss/Selector.java         |    54 +-
 .../josm/gui/mappaint/mapcss/Subpart.java          |    18 +-
 .../josm/gui/mappaint/mapcss/package-info.java     |     8 +
 .../josm/gui/mappaint/package-info.java            |    11 +
 .../josm/gui/mappaint/xml/AreaPrototype.java       |     6 +-
 .../josm/gui/mappaint/xml/IconPrototype.java       |     9 +-
 .../josm/gui/mappaint/xml/LinePrototype.java       |    10 +-
 .../josm/gui/mappaint/xml/LinemodPrototype.java    |    24 +-
 .../josm/gui/mappaint/xml/Prototype.java           |    12 +-
 .../josm/gui/mappaint/xml/XmlCondition.java        |     8 +-
 .../josm/gui/mappaint/xml/XmlStyleSource.java      |    21 +-
 .../gui/mappaint/xml/XmlStyleSourceHandler.java    |    48 +-
 .../josm/gui/mappaint/xml/package-info.java        |     7 +
 .../josm/gui/oauth/AccessTokenInfoPanel.java       |     4 +-
 .../gui/oauth/AdvancedOAuthPropertiesPanel.java    |    20 +-
 .../gui/oauth/FullyAutomaticAuthorizationUI.java   |    46 +-
 .../gui/oauth/FullyAutomaticPropertiesPanel.java   |     6 +-
 .../josm/gui/oauth/ManualAuthorizationUI.java      |    19 +-
 .../josm/gui/oauth/OAuthAuthorizationWizard.java   |    39 +-
 .../josm/gui/oauth/OsmLoginFailedException.java    |     2 +-
 .../gui/oauth/OsmOAuthAuthorizationClient.java     |   110 +-
 .../josm/gui/oauth/OsmPrivilegesPanel.java         |     4 +-
 .../josm/gui/oauth/RetrieveAccessTokenTask.java    |     8 +-
 .../josm/gui/oauth/RetrieveRequestTokenTask.java   |    10 +-
 .../gui/oauth/SemiAutomaticAuthorizationUI.java    |    71 +-
 .../josm/gui/oauth/TestAccessTokenTask.java        |    28 +-
 .../openstreetmap/josm/gui/oauth/package-info.java |     7 +
 .../preferences/DefaultTabPreferenceSetting.java   |    18 +-
 .../josm/gui/preferences/PreferenceDialog.java     |     8 +-
 .../josm/gui/preferences/PreferenceSetting.java    |     2 +-
 .../josm/gui/preferences/PreferenceTabbedPane.java |   256 +-
 .../josm/gui/preferences/SourceEditor.java         |   116 +-
 .../josm/gui/preferences/SourceEntry.java          |     2 +-
 .../josm/gui/preferences/SourceProvider.java       |     2 +-
 .../josm/gui/preferences/SubPreferenceSetting.java |     2 +-
 .../josm/gui/preferences/TabPreferenceSetting.java |    26 +-
 .../josm/gui/preferences/ToolbarPreferences.java   |   399 +-
 .../preferences/advanced/AdvancedPreference.java   |    85 +-
 .../preferences/advanced/ExportProfileAction.java  |    14 +-
 .../josm/gui/preferences/advanced/ListEditor.java  |    14 +-
 .../gui/preferences/advanced/ListListEditor.java   |    16 +-
 .../gui/preferences/advanced/MapListEditor.java    |    24 +-
 .../josm/gui/preferences/advanced/PrefEntry.java   |     2 +-
 .../gui/preferences/advanced/PreferencesTable.java |    25 +-
 .../gui/preferences/advanced/StringEditor.java     |     6 +-
 .../gui/preferences/audio/AudioPreference.java     |    43 +-
 .../gui/preferences/display/ColorPreference.java   |    68 +-
 .../gui/preferences/display/DisplayPreference.java |     5 +-
 .../gui/preferences/display/DrawingPreference.java |    43 +-
 .../gui/preferences/display/GPXSettingsPanel.java  |   176 +-
 .../gui/preferences/display/LafPreference.java     |    14 +-
 .../preferences/display/LanguagePreference.java    |    17 +-
 .../gui/preferences/imagery/AddImageryPanel.java   |    37 +-
 .../gui/preferences/imagery/AddTMSLayerPanel.java  |     6 +-
 .../gui/preferences/imagery/AddWMSLayerPanel.java  |     6 +-
 .../gui/preferences/imagery/AddWMTSLayerPanel.java |    42 +
 .../preferences/imagery/CacheContentsPanel.java    |   255 +
 .../preferences/imagery/CommonSettingsPanel.java   |    72 +-
 .../gui/preferences/imagery/ImageryPreference.java |    87 +-
 .../gui/preferences/imagery/TMSSettingsPanel.java  |    53 +-
 .../gui/preferences/imagery/WMSSettingsPanel.java  |    66 +-
 .../josm/gui/preferences/map/BackupPreference.java |    19 +-
 .../gui/preferences/map/MapPaintPreference.java    |     6 +-
 .../josm/gui/preferences/map/MapPreference.java    |     9 +-
 .../preferences/map/TaggingPresetPreference.java   |    77 +-
 .../gui/preferences/plugin/PluginListPanel.java    |    31 +-
 .../gui/preferences/plugin/PluginPreference.java   |    74 +-
 .../preferences/plugin/PluginPreferencesModel.java |    15 +-
 .../plugin/PluginUpdatePolicyPanel.java            |    35 +-
 .../projection/CodeProjectionChoice.java           |    13 +-
 .../projection/CustomProjectionChoice.java         |    58 +-
 .../projection/GaussKruegerProjectionChoice.java   |     4 +-
 .../LambertCC9ZonesProjectionChoice.java           |    26 +-
 .../projection/LambertProjectionChoice.java        |    12 +-
 .../projection/ListProjectionChoice.java           |     2 +-
 .../projection/ProjectionPreference.java           |    63 +-
 .../projection/PuwgProjectionChoice.java           |     4 +-
 .../projection/SingleProjectionChoice.java         |     2 +-
 .../projection/UTMFranceDOMProjectionChoice.java   |    12 +-
 .../projection/UTMProjectionChoice.java            |    17 +-
 .../remotecontrol/RemoteControlPreference.java     |     4 +-
 .../gui/preferences/server/ApiUrlTestTask.java     |    14 +-
 .../server/AuthenticationPreferencesPanel.java     |     5 +-
 .../BasicAuthenticationPreferencesPanel.java       |    10 +-
 .../josm/gui/preferences/server/FeaturesPanel.java |    13 +-
 .../preferences/server/OAuthAccessTokenHolder.java |     8 +-
 .../OAuthAuthenticationPreferencesPanel.java       |    60 +-
 .../preferences/server/OsmApiUrlInputPanel.java    |    11 +-
 .../server/ProxyPreferenceListener.java            |     2 +-
 .../preferences/server/ProxyPreferencesPanel.java  |    52 +-
 .../preferences/server/ServerAccessPreference.java |     9 +-
 .../gui/preferences/server/UserNameValidator.java  |     2 +-
 .../josm/gui/preferences/shortcut/PrefJPanel.java  |    76 +-
 .../preferences/validator/ValidatorPreference.java |     2 +-
 .../validator/ValidatorTestsPreference.java        |    15 +-
 .../josm/gui/progress/AbstractProgressMonitor.java |    14 +-
 .../gui/progress/PleaseWaitProgressMonitor.java    |    49 +-
 .../josm/gui/progress/ProgressMonitor.java         |    14 +-
 .../josm/gui/progress/ProgressMonitorExecutor.java |    11 +-
 .../josm/gui/progress/ProgressRenderer.java        |     4 +
 .../progress/SwingRenderingProgressMonitor.java    |     2 +-
 .../josm/gui/progress/package-info.java            |     6 +
 .../josm/gui/tagging/PresetHandler.java            |     7 +-
 .../josm/gui/tagging/TagCellEditor.java            |    12 +-
 .../josm/gui/tagging/TagCellRenderer.java          |    13 +-
 .../josm/gui/tagging/TagEditorModel.java           |    57 +-
 .../josm/gui/tagging/TagEditorPanel.java           |    21 +-
 .../openstreetmap/josm/gui/tagging/TagModel.java   |     8 +-
 .../openstreetmap/josm/gui/tagging/TagTable.java   |    64 +-
 .../josm/gui/tagging/TaggingPreset.java            |    46 +-
 .../josm/gui/tagging/TaggingPresetItems.java       |   166 +-
 .../josm/gui/tagging/TaggingPresetListener.java    |     2 +-
 .../josm/gui/tagging/TaggingPresetMenu.java        |    53 +-
 .../gui/tagging/TaggingPresetNameTemplateList.java |     4 +-
 .../josm/gui/tagging/TaggingPresetReader.java      |    91 +-
 .../TaggingPresetSearchPrimitiveDialog.java        |     4 +-
 .../josm/gui/tagging/TaggingPresetSelector.java    |    45 +-
 .../josm/gui/tagging/TaggingPresetType.java        |    30 +-
 .../josm/gui/tagging/TaggingPresets.java           |    12 +-
 .../gui/tagging/ac/AutoCompletingComboBox.java     |    46 +-
 .../gui/tagging/ac/AutoCompletingTextField.java    |    25 +-
 .../gui/tagging/ac/AutoCompletionItemPriority.java |     2 +-
 .../josm/gui/tagging/ac/AutoCompletionList.java    |     6 +-
 .../gui/tagging/ac/AutoCompletionListItem.java     |    23 +-
 .../josm/gui/tagging/ac/AutoCompletionManager.java |    44 +-
 .../josm/gui/tagging/ac/package-info.java          |     6 +
 .../josm/gui/tagging/package-info.java             |     7 +
 .../josm/gui/util/AdjustmentSynchronizer.java      |    19 +-
 .../josm/gui/util/AdvancedKeyPressDetector.java    |    70 +-
 .../josm/gui/util/CellEditorSupport.java           |    11 +-
 .../openstreetmap/josm/gui/util/CursorManager.java |    89 +
 src/org/openstreetmap/josm/gui/util/GuiHelper.java |    60 +-
 .../josm/gui/util/HighlightHelper.java             |    12 +-
 .../josm/gui/util/KeyPressReleaseListener.java     |     5 +-
 .../josm/gui/util/ModifierListener.java            |     2 +-
 .../josm/gui/util/RedirectInputMap.java            |     2 +-
 .../openstreetmap/josm/gui/util/RotationAngle.java |    14 +-
 .../openstreetmap/josm/gui/util/TableHelper.java   |     6 +-
 .../openstreetmap/josm/gui/util/package-info.java  |     6 +
 .../josm/gui/widgets/AbstractFileChooser.java      |    13 +-
 .../widgets/AbstractTextComponentValidator.java    |    16 +-
 .../gui/widgets/BoundingBoxSelectionPanel.java     |    57 +-
 .../josm/gui/widgets/ChangesetIdTextField.java     |    15 +-
 .../josm/gui/widgets/ComboBoxHistory.java          |     8 +-
 .../josm/gui/widgets/DateEditorWithSlider.java     |    26 +-
 .../DisableShortcutsOnFocusGainedTextField.java    |    29 +-
 .../josm/gui/widgets/EditableList.java             |     5 +-
 .../josm/gui/widgets/FileChooserManager.java       |     8 +-
 .../josm/gui/widgets/HistoryChangedListener.java   |     2 +-
 .../josm/gui/widgets/HistoryComboBox.java          |     8 +-
 .../openstreetmap/josm/gui/widgets/ImageLabel.java |     6 +-
 .../josm/gui/widgets/JosmComboBox.java             |    14 +-
 .../josm/gui/widgets/JosmEditorPane.java           |     2 +-
 .../josm/gui/widgets/JosmHTMLEditorKit.java        |    20 +-
 .../josm/gui/widgets/JosmPasswordField.java        |     2 +-
 .../josm/gui/widgets/JosmTextField.java            |     4 +-
 .../josm/gui/widgets/MultiSplitLayout.java         |   462 +-
 .../josm/gui/widgets/MultiSplitPane.java           |    43 +-
 .../josm/gui/widgets/NativeFileChooser.java        |     4 +
 .../josm/gui/widgets/OsmIdTextField.java           |     2 +-
 .../josm/gui/widgets/OsmPrimitivesTableModel.java  |     4 +-
 .../josm/gui/widgets/PopupMenuLauncher.java        |    19 +-
 .../josm/gui/widgets/QuadStateCheckBox.java        |    88 +-
 .../widgets/SelectAllOnFocusGainedDecorator.java   |     2 +-
 .../josm/gui/widgets/TextContextualPopupMenu.java  |     1 +
 .../openstreetmap/josm/gui/widgets/UrlLabel.java   |     8 +-
 .../josm/gui/widgets/package-info.java             |     6 +
 src/org/openstreetmap/josm/io/AbstractParser.java  |    40 +-
 src/org/openstreetmap/josm/io/AbstractReader.java  |    13 +-
 .../openstreetmap/josm/io/AllFormatsImporter.java  |    13 +-
 .../josm/io/BoundingBoxDownloader.java             |    51 +-
 .../openstreetmap/josm/io/CacheCustomContent.java  |     7 +-
 src/org/openstreetmap/josm/io/CacheFiles.java      |   379 -
 src/org/openstreetmap/josm/io/CachedFile.java      |    86 +-
 src/org/openstreetmap/josm/io/Capabilities.java    |    22 +-
 .../josm/io/ChangesetClosedException.java          |     2 +-
 src/org/openstreetmap/josm/io/ChangesetQuery.java  |    89 +-
 src/org/openstreetmap/josm/io/Compression.java     |    10 +-
 .../josm/io/DefaultProxySelector.java              |    10 +-
 .../openstreetmap/josm/io/DiffResultProcessor.java |    18 +-
 src/org/openstreetmap/josm/io/FileWatcher.java     |     8 +-
 src/org/openstreetmap/josm/io/GeoJSONWriter.java   |     2 +-
 src/org/openstreetmap/josm/io/GpxExporter.java     |    46 +-
 src/org/openstreetmap/josm/io/GpxReader.java       |    29 +-
 src/org/openstreetmap/josm/io/GpxWriter.java       |     8 +-
 .../josm/io/InvalidXmlCharacterFilter.java         |     2 +-
 src/org/openstreetmap/josm/io/JpgImporter.java     |     6 +-
 src/org/openstreetmap/josm/io/MessageNotifier.java |    15 +-
 .../josm/io/MissingOAuthAccessTokenException.java  |     2 +-
 .../josm/io/MultiFetchServerObjectReader.java      |    80 +-
 src/org/openstreetmap/josm/io/NMEAImporter.java    |    14 +-
 src/org/openstreetmap/josm/io/NmeaReader.java      |   171 +-
 src/org/openstreetmap/josm/io/NoteReader.java      |    34 +-
 src/org/openstreetmap/josm/io/NoteWriter.java      |    10 +-
 src/org/openstreetmap/josm/io/OnlineResource.java  |     2 +-
 src/org/openstreetmap/josm/io/OsmApi.java          |    90 +-
 src/org/openstreetmap/josm/io/OsmApiException.java |    44 +-
 .../josm/io/OsmApiPrimitiveGoneException.java      |     2 +-
 .../openstreetmap/josm/io/OsmChangeBuilder.java    |     4 +-
 .../openstreetmap/josm/io/OsmChangeImporter.java   |     5 +-
 src/org/openstreetmap/josm/io/OsmChangeReader.java |     1 +
 .../josm/io/OsmChangesetContentParser.java         |     6 +-
 .../openstreetmap/josm/io/OsmChangesetParser.java  |    21 +-
 src/org/openstreetmap/josm/io/OsmConnection.java   |     8 +-
 .../openstreetmap/josm/io/OsmHistoryReader.java    |     2 +-
 src/org/openstreetmap/josm/io/OsmImporter.java     |     3 +-
 src/org/openstreetmap/josm/io/OsmReader.java       |    52 +-
 .../josm/io/OsmServerBackreferenceReader.java      |    16 +-
 .../josm/io/OsmServerChangesetReader.java          |    26 +-
 .../josm/io/OsmServerHistoryReader.java            |     4 +-
 .../josm/io/OsmServerLocationReader.java           |     4 +-
 .../josm/io/OsmServerObjectReader.java             |    16 +-
 .../josm/io/OsmServerReadPostprocessor.java        |     3 +-
 src/org/openstreetmap/josm/io/OsmServerReader.java |    34 +-
 .../josm/io/OsmServerUserInfoReader.java           |    48 +-
 .../josm/io/OsmServerWritePostprocessor.java       |     3 +-
 src/org/openstreetmap/josm/io/OsmServerWriter.java |    60 +-
 .../josm/io/OsmTransferCanceledException.java      |     8 +-
 src/org/openstreetmap/josm/io/OsmWriter.java       |    20 +-
 .../openstreetmap/josm/io/OsmWriterFactory.java    |     1 +
 .../josm/io/OverpassDownloadReader.java            |   153 +
 .../openstreetmap/josm/io/ProgressInputStream.java |     4 +-
 .../josm/io/UTFInputStreamReader.java              |     5 +-
 .../openstreetmap/josm/io/WMSLayerExporter.java    |    19 +-
 .../openstreetmap/josm/io/WMSLayerImporter.java    |    70 +-
 src/org/openstreetmap/josm/io/XmlWriter.java       |     2 +-
 .../josm/io/auth/AbstractCredentialsAgent.java     |     4 +-
 .../josm/io/auth/CredentialsAgent.java             |     3 +-
 .../josm/io/auth/CredentialsAgentException.java    |    28 +-
 .../josm/io/auth/CredentialsAgentResponse.java     |     3 +-
 .../josm/io/auth/CredentialsManager.java           |     7 +-
 .../josm/io/auth/DefaultAuthenticator.java         |     6 +-
 .../io/auth/JosmPreferencesCredentialAgent.java    |    16 +-
 .../openstreetmap/josm/io/imagery/HTMLGrabber.java |    58 -
 .../josm/io/imagery/ImageryReader.java             |    44 +-
 .../josm/io/imagery/WMSException.java              |    59 -
 .../openstreetmap/josm/io/imagery/WMSGrabber.java  |   312 -
 .../openstreetmap/josm/io/imagery/WMSImagery.java  |    23 +-
 .../openstreetmap/josm/io/imagery/WMSRequest.java  |   154 -
 .../josm/io/remotecontrol/AddTagsDialog.java       |    72 +-
 .../josm/io/remotecontrol/DNSName.java             |    22 +-
 .../remotecontrol/PermissionPrefWithDefault.java   |     4 +-
 .../josm/io/remotecontrol/RemoteControl.java       |    14 +-
 .../io/remotecontrol/RemoteControlHttpServer.java  |     9 +-
 .../io/remotecontrol/RemoteControlHttpsServer.java |    31 +-
 .../josm/io/remotecontrol/RequestProcessor.java    |    33 +-
 .../io/remotecontrol/handler/AddNodeHandler.java   |    30 +-
 .../io/remotecontrol/handler/AddWayHandler.java    |    12 +-
 .../io/remotecontrol/handler/FeaturesHandler.java  |    18 +-
 .../io/remotecontrol/handler/ImageryHandler.java   |    14 +-
 .../io/remotecontrol/handler/ImportHandler.java    |     9 +-
 .../remotecontrol/handler/LoadAndZoomHandler.java  |    14 +-
 .../remotecontrol/handler/LoadObjectHandler.java   |     2 +-
 .../io/remotecontrol/handler/OpenFileHandler.java  |     5 -
 .../io/remotecontrol/handler/RequestHandler.java   |    44 +-
 .../io/remotecontrol/handler/VersionHandler.java   |     2 +-
 .../josm/io/session/GeoImageSessionExporter.java   |     3 +-
 .../josm/io/session/GeoImageSessionImporter.java   |    19 +-
 .../josm/io/session/GpxTracksSessionExporter.java  |     8 +-
 .../josm/io/session/GpxTracksSessionImporter.java  |     3 +-
 .../josm/io/session/ImagerySessionExporter.java    |    17 +-
 .../josm/io/session/ImagerySessionImporter.java    |    23 +-
 .../josm/io/session/MarkerSessionExporter.java     |     3 +-
 .../josm/io/session/MarkerSessionImporter.java     |     3 +-
 .../josm/io/session/OsmDataSessionExporter.java    |    12 +-
 .../josm/io/session/OsmDataSessionImporter.java    |     3 +-
 .../josm/io/session/SessionImporter.java           |     3 +-
 .../josm/io/session/SessionReader.java             |    21 +-
 .../josm/io/session/SessionWriter.java             |    11 +-
 src/org/openstreetmap/josm/plugins/Plugin.java     |    11 +-
 .../josm/plugins/PluginDownloadTask.java           |    19 +-
 .../openstreetmap/josm/plugins/PluginHandler.java  |   287 +-
 .../josm/plugins/PluginInformation.java            |    39 +-
 .../josm/plugins/PluginListParser.java             |    12 +-
 .../openstreetmap/josm/plugins/PluginProxy.java    |     2 +-
 .../plugins/ReadLocalPluginInformationTask.java    |    20 +-
 .../plugins/ReadRemotePluginInformationTask.java   |    43 +-
 .../josm/tools/AlphanumComparator.java             |     3 +-
 src/org/openstreetmap/josm/tools/AudioPlayer.java  |    50 +-
 src/org/openstreetmap/josm/tools/Base64.java       |    24 +-
 .../josm/tools/BugReportExceptionHandler.java      |   174 +-
 .../josm/tools/CheckParameterUtil.java             |    35 +-
 src/org/openstreetmap/josm/tools/ColorHelper.java  |    13 +-
 src/org/openstreetmap/josm/tools/ColorScale.java   |    37 +-
 .../openstreetmap/josm/tools/CompositeList.java    |     4 +-
 src/org/openstreetmap/josm/tools/CopyList.java     |     4 +-
 src/org/openstreetmap/josm/tools/Destroyable.java  |     2 +-
 src/org/openstreetmap/josm/tools/Diff.java         |   231 +-
 .../openstreetmap/josm/tools/ExceptionUtil.java    |    33 +-
 src/org/openstreetmap/josm/tools/ExifReader.java   |    23 +-
 src/org/openstreetmap/josm/tools/FontsManager.java |     2 +-
 src/org/openstreetmap/josm/tools/GBC.java          |     4 +-
 .../openstreetmap/josm/tools/GeoPropertyIndex.java |     8 +-
 src/org/openstreetmap/josm/tools/Geometry.java     |    91 +-
 src/org/openstreetmap/josm/tools/I18n.java         |   150 +-
 src/org/openstreetmap/josm/tools/ImageOverlay.java |    27 +-
 .../openstreetmap/josm/tools/ImageProvider.java    |    73 +-
 .../openstreetmap/josm/tools/ImageResource.java    |     4 +-
 .../openstreetmap/josm/tools/InputMapUtils.java    |    12 +-
 src/org/openstreetmap/josm/tools/LanguageInfo.java |    42 +-
 src/org/openstreetmap/josm/tools/MultiMap.java     |     4 +-
 .../josm/tools/MultikeyActionsHandler.java         |   160 +-
 .../josm/tools/MultikeyShortcutAction.java         |    10 +-
 src/org/openstreetmap/josm/tools/OpenBrowser.java  |     3 +-
 .../openstreetmap/josm/tools/OsmUrlToBounds.java   |    10 +-
 .../josm/tools/OverpassTurboQueryWizard.java       |    83 +
 src/org/openstreetmap/josm/tools/Pair.java         |    10 +-
 src/org/openstreetmap/josm/tools/PlatformHook.java |    32 +-
 .../openstreetmap/josm/tools/PlatformHookOsx.java  |    10 +-
 .../josm/tools/PlatformHookUnixoid.java            |    66 +-
 .../josm/tools/PlatformHookWindows.java            |    27 +-
 src/org/openstreetmap/josm/tools/Predicate.java    |     2 +-
 src/org/openstreetmap/josm/tools/Predicates.java   |     1 +
 src/org/openstreetmap/josm/tools/Property.java     |     4 +-
 .../josm/tools/RightAndLefthandTraffic.java        |    15 +-
 src/org/openstreetmap/josm/tools/Shortcut.java     |   108 +-
 .../openstreetmap/josm/tools/TextTagParser.java    |    91 +-
 src/org/openstreetmap/josm/tools/Utils.java        |   352 +-
 src/org/openstreetmap/josm/tools/WikiReader.java   |    16 +-
 .../openstreetmap/josm/tools/WindowGeometry.java   |    59 +-
 .../openstreetmap/josm/tools/XmlObjectParser.java  |    17 +-
 .../josm/tools/XmlParsingException.java            |     3 +-
 .../openstreetmap/josm/tools/date/DateUtils.java   |   123 +-
 .../josm/tools/date/FallbackDateParser.java        |     5 +
 .../josm/tools/date/PrimaryDateParser.java         |    41 +-
 .../template_engine/CompoundTemplateEntry.java     |     5 +-
 .../josm/tools/template_engine/Condition.java      |     8 +-
 .../template_engine/ContextSwitchTemplate.java     |    23 +-
 .../josm/tools/template_engine/ParseError.java     |     3 +-
 .../template_engine/SearchExpressionCondition.java |     3 +-
 .../TemplateEngineDataProvider.java                |     2 +
 .../josm/tools/template_engine/TemplateEntry.java  |     1 +
 .../josm/tools/template_engine/TemplateParser.java |     3 +-
 .../josm/tools/template_engine/Tokenizer.java      |    13 +-
 .../josm/tools/template_engine/Variable.java       |     7 +-
 styles/standard/elemstyles.mapcss                  |   136 +-
 test/data/regress/11548/tiles/1/1/1.png            |   Bin 0 -> 4056 bytes
 test/data/regress/11548/tiles/2/1/1.png            |   Bin 0 -> 8447 bytes
 test/data/regress/11548/tiles/2/1/2.png            |   Bin 0 -> 5270 bytes
 test/data/regress/11548/tiles/2/1/3.png            |   Bin 0 -> 2096 bytes
 test/data/regress/11548/tiles/2/2/1.png            |   Bin 0 -> 12812 bytes
 test/data/regress/11548/tiles/2/2/2.png            |   Bin 0 -> 3537 bytes
 test/data/regress/11548/tiles/2/2/3.png            |   Bin 0 -> 1406 bytes
 test/data/regress/11548/tiles/2/3/1.png            |   Bin 0 -> 7789 bytes
 test/data/regress/11548/tiles/2/3/2.png            |   Bin 0 -> 4913 bytes
 test/data/regress/11548/tiles/2/3/3.png            |   Bin 0 -> 1563 bytes
 test/data/regress/11548/tiles/3/1/1.png            |   Bin 0 -> 9646 bytes
 test/data/regress/11548/tiles/3/1/2.png            |   Bin 0 -> 3848 bytes
 test/data/regress/11548/tiles/3/1/3.png            |   Bin 0 -> 5977 bytes
 test/data/regress/11548/tiles/3/1/4.png            |   Bin 0 -> 297 bytes
 test/data/regress/11548/tiles/3/1/5.png            |   Bin 0 -> 103 bytes
 test/data/regress/11548/tiles/3/1/6.png            |   Bin 0 -> 1642 bytes
 test/data/regress/11548/tiles/3/1/7.png            |   Bin 0 -> 103 bytes
 test/data/regress/11548/tiles/3/2/1.png            |   Bin 0 -> 8674 bytes
 test/data/regress/11548/tiles/3/2/2.png            |   Bin 0 -> 8859 bytes
 test/data/regress/11548/tiles/3/2/3.png            |   Bin 0 -> 7443 bytes
 test/data/regress/11548/tiles/3/2/4.png            |   Bin 0 -> 7095 bytes
 test/data/regress/11548/tiles/3/2/5.png            |   Bin 0 -> 4742 bytes
 test/data/regress/11548/tiles/3/2/6.png            |   Bin 0 -> 2687 bytes
 test/data/regress/11548/tiles/3/2/7.png            |   Bin 0 -> 103 bytes
 test/data/regress/11548/tiles/3/3/1.png            |   Bin 0 -> 4133 bytes
 test/data/regress/11548/tiles/3/3/2.png            |   Bin 0 -> 4620 bytes
 test/data/regress/11548/tiles/3/3/3.png            |   Bin 0 -> 5787 bytes
 test/data/regress/11548/tiles/3/3/4.png            |   Bin 0 -> 1899 bytes
 test/data/regress/11548/tiles/3/3/5.png            |   Bin 0 -> 341 bytes
 test/data/regress/11548/tiles/3/3/6.png            |   Bin 0 -> 1639 bytes
 test/data/regress/11548/tiles/3/3/7.png            |   Bin 0 -> 103 bytes
 test/data/regress/11548/tiles/3/4/1.png            |   Bin 0 -> 5117 bytes
 test/data/regress/11548/tiles/3/4/2.png            |   Bin 0 -> 13981 bytes
 test/data/regress/11548/tiles/3/4/3.png            |   Bin 0 -> 12784 bytes
 test/data/regress/11548/tiles/3/4/4.png            |   Bin 0 -> 8417 bytes
 test/data/regress/11548/tiles/3/4/5.png            |   Bin 0 -> 171 bytes
 test/data/regress/11548/tiles/3/4/6.png            |   Bin 0 -> 1464 bytes
 test/data/regress/11548/tiles/3/4/7.png            |   Bin 0 -> 103 bytes
 test/data/regress/11548/tiles/3/5/1.png            |   Bin 0 -> 4670 bytes
 test/data/regress/11548/tiles/3/5/2.png            |   Bin 0 -> 4692 bytes
 test/data/regress/11548/tiles/3/5/3.png            |   Bin 0 -> 9583 bytes
 test/data/regress/11548/tiles/3/5/4.png            |   Bin 0 -> 921 bytes
 test/data/regress/11548/tiles/3/5/5.png            |   Bin 0 -> 520 bytes
 test/data/regress/11548/tiles/3/5/6.png            |   Bin 0 -> 1510 bytes
 test/data/regress/11548/tiles/3/5/7.png            |   Bin 0 -> 103 bytes
 test/data/regress/11548/tiles/3/6/1.png            |   Bin 0 -> 3398 bytes
 test/data/regress/11548/tiles/3/6/2.png            |   Bin 0 -> 3379 bytes
 test/data/regress/11548/tiles/3/6/3.png            |   Bin 0 -> 11240 bytes
 test/data/regress/11548/tiles/3/6/4.png            |   Bin 0 -> 5059 bytes
 test/data/regress/11548/tiles/3/6/5.png            |   Bin 0 -> 773 bytes
 test/data/regress/11548/tiles/3/6/6.png            |   Bin 0 -> 1003 bytes
 test/data/regress/11548/tiles/3/6/7.png            |   Bin 0 -> 103 bytes
 test/data/regress/11548/tiles/3/7/1.png            |   Bin 0 -> 2555 bytes
 test/data/regress/11548/tiles/3/7/2.png            |   Bin 0 -> 3983 bytes
 test/data/regress/11548/tiles/3/7/3.png            |   Bin 0 -> 1924 bytes
 test/data/regress/11548/tiles/3/7/4.png            |   Bin 0 -> 6262 bytes
 test/data/regress/11548/tiles/3/7/5.png            |   Bin 0 -> 1012 bytes
 test/data/regress/11548/tiles/3/7/6.png            |   Bin 0 -> 2313 bytes
 test/data/regress/11548/tiles/3/7/7.png            |   Bin 0 -> 103 bytes
 test/data/wmts/WMTSCapabilities-Ontario.xml        |   457 +
 ...WMTSCapabilities-Wallonie-nomatrixdimension.xml |   212 +
 test/data/wmts/WMTSCapabilities-Wallonie.xml       |   246 +
 test/data/wmts/getCapabilities-wien.xml            |   359 +
 test/data/wmts/getcapabilities-ORTO.xml            |   779 +
 test/data/wmts/getcapabilities-TOPO.xml            |   890 +
 test/data/wmts/getcapabilities-pseudo-mercator.xml |   165 +
 .../conflict/pair/nodes/NodeListMergerTest.java    |    10 +-
 .../pair/properties/PropertiesMergerTest.java      |     6 +-
 .../pair/relation/RelationMemberMergerTest.java    |     4 +-
 .../josm/gui/conflict/pair/tags/TagMergerTest.java |    13 +-
 .../gui/dialogs/ConflictResolutionDialogTest.java  |     6 +-
 .../changeset/ChangesetCacheManagerTest.java       |     6 +-
 .../changeset/query/ChangesetQueryDialogTest.java  |     6 +-
 .../josm/gui/history/HistoryBrowserTest.java       |    12 +-
 .../josm/io/MultiFetchServerObjectReaderTest.java  |    81 +-
 .../josm/io/OsmServerBackreferenceReaderTest.java  |    32 +-
 .../josm/io/OsmServerHistoryReaderTest.java        |     3 +-
 .../josm/io/UploadStrategySelectionPanelTest.java  |     7 +-
 .../openstreetmap/josm/PerformanceTestUtils.java   |    44 +
 .../josm/data/osm/KeyValuePerformanceTest.java     |   204 +
 .../josm/data/osm/OsmDataGenerator.java            |   274 +
 .../paint/StyledMapRendererPerformanceTest.java    |     6 +-
 .../mapcss/MapCSSStyleSourceFilterTest.java        |   145 +
 test/unit/org/CustomMatchers.java                  |    43 +-
 test/unit/org/openstreetmap/josm/JOSMFixture.java  |    13 +-
 test/unit/org/openstreetmap/josm/MainTest.java     |    15 +
 test/unit/org/openstreetmap/josm/TestUtils.java    |    25 +-
 .../openstreetmap/josm/actions/CopyActionTest.java |    13 +-
 .../josm/actions/CreateCircleActionTest.java       |    14 +-
 .../josm/actions/SplitWayActionTest.java           |    16 +-
 .../josm/actions/UnJoinNodeWayActionTest.java      |     7 +-
 .../josm/actions/mapmode/SelectActionTest.java     |   234 +
 .../josm/actions/search/SearchCompilerTest.java    |     1 +
 .../org/openstreetmap/josm/data/BoundsTest.java    |    27 +-
 .../data/cache/JCSCachedTileLoaderJobTest.java     |   118 +
 .../data/imagery/TemplatedWMSTileSourceTest.java   |   213 +
 .../josm/data/imagery/WMTSTileSourceTest.java      |   234 +
 .../josm/data/osm/APIDataSetTest.java              |    27 +-
 .../josm/data/osm/ChangesetCacheTest.groovy        |   317 +-
 .../josm/data/osm/DataSetMergerTest.java           |   514 +-
 .../openstreetmap/josm/data/osm/FilterTest.java    |     8 +-
 .../josm/data/osm/OsmPrimitiveKeyHandlingTest.java |    49 +-
 .../josm/data/osm/OsmPrimitiveTest.java            |     3 +-
 .../openstreetmap/josm/data/osm/OsmUtilsTest.java  |     3 +-
 .../openstreetmap/josm/data/osm/RelationTest.java  |     2 +-
 .../josm/data/osm/SimplePrimitiveIdTest.groovy     |    25 +
 .../josm/data/osm/history/HistoryNodeTest.java     |    13 +-
 .../josm/data/osm/history/HistoryWayTest.java      |     9 +-
 .../visitor/MergeSourceBuildingVisitorTest.java    |   107 +-
 .../josm/data/projection/EllipsoidTest.java        |     8 +-
 .../josm/data/projection/ProjectionRefTest.java    |     2 +-
 .../data/projection/ProjectionRegressionTest.java  |    36 +-
 .../josm/data/projection/ProjectionTest.java       |    14 +-
 .../josm/data/projection/SwissGridTest.java        |   271 +-
 .../validation/tests/MapCSSTagCheckerTest.java     |     3 +
 .../validation/tests/MultipolygonTestTest.java     |     2 +-
 .../data/validation/tests/NameMismatchTest.java    |    52 +-
 .../data/validation/tests/OpeningHourTestTest.java |    50 +-
 .../josm/data/validation/tests/TagCheckerTest.java |    68 +
 .../josm/gui/DefaultNameFormatterTest.java         |    38 +-
 .../josm/gui/JosmUserIdentityManagerTest.groovy    |   428 +-
 .../josm/gui/NavigatableComponentTest.java         |   187 +
 .../josm/gui/SystemOfMeasurementTest.java          |     1 +
 .../gui/conflict/nodes/NodeListMergeModelTest.java |    82 +-
 .../properties/PropertiesMergeModelTest.java       |    10 +-
 .../josm/gui/conflict/tags/TagMergeItemTest.java   |    30 +-
 .../josm/gui/conflict/tags/TagMergeModelTest.java  |    13 +-
 .../josm/gui/dialogs/LatLonDialogTest.java         |    13 +-
 .../dialogs/relation/sort/RelationSorterTest.java  |     2 +-
 .../sort/WayConnectionTypeCalculatorTest.java      |     2 +-
 .../mapcss/ChildOrParentSelectorTest.groovy        |    20 +-
 .../gui/mappaint/mapcss/KeyConditionTest.groovy    |     4 +-
 .../mappaint/mapcss/KeyValueConditionTest.groovy   |     4 +-
 .../gui/mappaint/mapcss/MapCSSParserTest.groovy    |   110 +-
 .../gui/preferences/ToolbarPreferencesTest.java    |    21 +-
 .../gui/tagging/PresetClassificationsTest.java     |    16 +-
 .../josm/gui/tagging/TaggingPresetReaderTest.java  |     2 +-
 .../josm/gui/util/RotationAngleTest.java           |     1 +
 .../josm/io/ChangesetQueryUrlParserTest.groovy     |   358 +-
 .../josm/io/DiffResultProcessorTest.groovy         |   307 +-
 .../josm/io/OsmChangeBuilderTest.groovy            |   390 +-
 .../josm/io/OsmChangesetContentParserTest.groovy   |   344 +-
 .../josm/io/ParseWithChangesetReaderTest.groovy    |   246 +-
 .../josm/io/remotecontrol/RemoteControlTest.java   |     4 +-
 .../remotecontrol/handler/ImportHandlerTest.java   |     7 +-
 .../remotecontrol/handler/RequestHandlerTest.java  |    16 +-
 .../josm/io/session/SessionReaderTest.java         |    12 +-
 .../josm/io/session/SessionWriterTest.java         |     4 +-
 .../josm/tools/AlphanumComparatorTest.groovy       |     2 +-
 .../josm/tools/BugReportExceptionHandlerTest.java  |     3 +-
 .../openstreetmap/josm/tools/ExifReaderTest.java   |    11 +-
 .../org/openstreetmap/josm/tools/GeometryTest.java |    11 +-
 .../josm/tools/OsmUrlToBoundsTest.java             |    49 +-
 .../josm/tools/OverpassTurboQueryWizardTest.java   |    44 +
 .../josm/tools/TextTagParserTest.java              |    20 +-
 .../org/openstreetmap/josm/tools/UtilsTest.java    |    20 +-
 .../josm/tools/date/DateUtilsTest.java             |     4 +-
 .../tools/template_engine/TemplateEngineTest.java  |    12 +-
 tools/checkstyle/josm_checks.xml                   |   117 +
 tools/checkstyle/josm_filters.xml                  |    22 +
 tools/findbugs/josm-filter.xml                     |     6 +
 1592 files changed, 294862 insertions(+), 108077 deletions(-)

diff --git a/.checkstyle b/.checkstyle
new file mode 100644
index 0000000..d563d13
--- /dev/null
+++ b/.checkstyle
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<fileset-config file-format-version="1.2.0" simple-config="true" sync-formatter="false">
+  <local-check-config name="JOSM" location="tools/checkstyle/josm_checks.xml" type="project" description="">
+    <additional-data name="protect-config-file" value="false"/>
+  </local-check-config>
+  <fileset name="all" enabled="true" check-config-name="JOSM" local="true">
+    <file-match-pattern match-pattern="." include-pattern="true"/>
+  </fileset>
+  <filter name="DerivedFiles" enabled="true"/>
+  <filter name="FilesFromPackage" enabled="true">
+    <filter-data value="src/com"/>
+    <filter-data value="src/gnu"/>
+    <filter-data value="src/javax"/>
+    <filter-data value="src/oauth"/>
+    <filter-data value="src/org/apache"/>
+    <filter-data value="src/org/glassfish"/>
+    <filter-data value="src/org/jdesktop"/>
+    <filter-data value="src/org/openstreetmap/gui"/>
+    <filter-data value="src/org/openstreetmap/josm/gui/mappaint/mapcss/parsergen"/>
+    <filter-data value="src/org/w3"/>
+    <filter-data value="data"/>
+    <filter-data value="images"/>
+    <filter-data value="styles"/>
+    <filter-data value="resources"/>
+    <filter-data value="scripts"/>
+  </filter>
+</fileset-config>
diff --git a/.classpath b/.classpath
index 6bc17e9..925f804 100644
--- a/.classpath
+++ b/.classpath
@@ -1,29 +1,30 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry excluding="org/apache/commons/compress/compressors/CompressorStreamFactory.java|org/apache/commons/compress/compressors/deflate/|org/apache/commons/compress/compressors/gzip/|org/apache/commons/compress/compressors/lzma/|org/apache/commons/compress/compressors/lzw/|org/apache/commons/compress/compressors/pack200/|org/apache/commons/compress/compressors/snappy/|org/apache/commons/compress/compressors/xz/|org/apache/commons/compress/compressors/z/|org/apache/commons/jcs/au [...]
-	<classpathentry kind="src" path="test/unit"/>
-	<classpathentry kind="src" path="test/functional"/>
-	<classpathentry kind="src" path="test/performance"/>
-	<classpathentry kind="src" output="bin2/data" path="data"/>
-	<classpathentry kind="src" output="bin2/images" path="images"/>
-	<classpathentry kind="src" output="bin2/styles" path="styles"/>
-	<classpathentry kind="src" output="bin2/resources" path="resources"/>
-	<classpathentry kind="src" output="bin2/scripts" path="scripts"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
-	<classpathentry kind="lib" path="test/lib/fest/fest-assert-1.0.jar"/>
-	<classpathentry kind="lib" path="test/lib/fest/fest-reflect-1.1.jar"/>
-	<classpathentry kind="lib" path="test/lib/fest/fest-swing-1.1.jar"/>
-	<classpathentry kind="lib" path="test/lib/fest/fest-util-1.0.jar"/>
-	<classpathentry kind="lib" path="test/lib/fest/jcip-annotations-1.0.jar"/>
-	<classpathentry kind="lib" path="test/lib/fest/MRJToolkitStubs-1.0.jar"/>
-	<classpathentry kind="lib" path="test/lib/jfcunit.jar"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.7.0_80"/>
-	<classpathentry exported="true" kind="con" path="GROOVY_SUPPORT"/>
-	<classpathentry kind="lib" path="test/lib/unitils-core/commons-collections-3.2.jar"/>
-	<classpathentry kind="lib" path="test/lib/unitils-core/commons-lang-2.3.jar"/>
-	<classpathentry kind="lib" path="test/lib/unitils-core/commons-logging-1.1.jar"/>
-	<classpathentry kind="lib" path="test/lib/unitils-core/ognl-2.6.9.jar"/>
-	<classpathentry kind="lib" path="test/lib/unitils-core/unitils-core-3.3.jar"/>
-	<classpathentry kind="lib" path="test/lib/fest/debug-1.0.jar"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry excluding="org/apache/commons/compress/compressors/CompressorStreamFactory.java|org/apache/commons/compress/compressors/deflate/|org/apache/commons/compress/compressors/gzip/|org/apache/commons/compress/compressors/lzma/|org/apache/commons/compress/compressors/lzw/|org/apache/commons/compress/compressors/pack200/|org/apache/commons/compress/compressors/snappy/|org/apache/commons/compress/compressors/xz/|org/apache/commons/compress/compressors/z/|org/apache/commons/jcs/au [...]
+	<classpathentry kind="src" path="test/unit"/>
+	<classpathentry kind="src" path="test/functional"/>
+	<classpathentry kind="src" path="test/performance"/>
+	<classpathentry kind="src" output="bin2/data" path="data"/>
+	<classpathentry kind="src" output="bin2/images" path="images"/>
+	<classpathentry kind="src" output="bin2/styles" path="styles"/>
+	<classpathentry kind="src" output="bin2/resources" path="resources"/>
+	<classpathentry kind="src" output="bin2/scripts" path="scripts"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
+	<classpathentry kind="lib" path="test/lib/fest/fest-assert-1.0.jar"/>
+	<classpathentry kind="lib" path="test/lib/fest/fest-reflect-1.1.jar"/>
+	<classpathentry kind="lib" path="test/lib/fest/fest-swing-1.1.jar"/>
+	<classpathentry kind="lib" path="test/lib/fest/fest-util-1.0.jar"/>
+	<classpathentry kind="lib" path="test/lib/fest/jcip-annotations-1.0.jar"/>
+	<classpathentry kind="lib" path="test/lib/fest/MRJToolkitStubs-1.0.jar"/>
+	<classpathentry kind="lib" path="test/lib/jfcunit.jar"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.7.0_80"/>
+	<classpathentry exported="true" kind="con" path="GROOVY_SUPPORT"/>
+	<classpathentry kind="lib" path="test/lib/unitils-core/commons-collections-3.2.jar"/>
+	<classpathentry kind="lib" path="test/lib/unitils-core/commons-lang-2.3.jar"/>
+	<classpathentry kind="lib" path="test/lib/unitils-core/commons-logging-1.1.jar"/>
+	<classpathentry kind="lib" path="test/lib/unitils-core/ognl-2.6.9.jar"/>
+	<classpathentry kind="lib" path="test/lib/unitils-core/unitils-core-3.3.jar"/>
+	<classpathentry kind="lib" path="test/lib/fest/debug-1.0.jar"/>
+	<classpathentry exported="true" kind="con" path="GROOVY_DSL_SUPPORT"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/.project b/.project
index aeab577..7874e55 100644
--- a/.project
+++ b/.project
@@ -6,11 +6,6 @@
 	</projects>
 	<buildSpec>
 		<buildCommand>
-			<name>org.eclipse.wst.common.project.facet.core.builder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
 			<name>sf.eclipse.javacc.javaccbuilder</name>
 			<arguments>
 			</arguments>
@@ -30,11 +25,23 @@
 				</dictionary>
 			</arguments>
 		</buildCommand>
+		<buildCommand>
+			<name>net.sf.eclipsecs.core.CheckstyleBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>edu.umd.cs.findbugs.plugin.eclipse.findbugsBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
 	</buildSpec>
 	<natures>
 		<nature>org.eclipse.jdt.groovy.core.groovyNature</nature>
 		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.sonar.ide.eclipse.core.sonarNature</nature>
 		<nature>sf.eclipse.javacc.javaccnature</nature>
-		<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+		<nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
+		<nature>edu.umd.cs.findbugs.plugin.eclipse.findbugsNature</nature>
 	</natures>
 </projectDescription>
diff --git a/.settings/edu.umd.cs.findbugs.core.prefs b/.settings/edu.umd.cs.findbugs.core.prefs
index e316d6b..c2a7f80 100644
--- a/.settings/edu.umd.cs.findbugs.core.prefs
+++ b/.settings/edu.umd.cs.findbugs.core.prefs
@@ -1,5 +1,5 @@
 #FindBugs User Preferences
-#Fri Jan 24 10:43:38 CET 2014
+#Sat Aug 01 23:18:50 CEST 2015
 cloud_id=edu.umd.cs.findbugs.cloud.doNothingCloud
 detectorAppendingToAnObjectOutputStream=AppendingToAnObjectOutputStream|true
 detectorAtomicityProblem=AtomicityProblem|true
@@ -18,6 +18,7 @@ detectorCloneIdiom=CloneIdiom|true
 detectorComparatorIdiom=ComparatorIdiom|true
 detectorConfusedInheritance=ConfusedInheritance|true
 detectorConfusionBetweenInheritedAndOuterMethod=ConfusionBetweenInheritedAndOuterMethod|true
+detectorCovariantArrayAssignment=CovariantArrayAssignment|false
 detectorCrossSiteScripting=CrossSiteScripting|true
 detectorDefaultEncodingDetector=DefaultEncodingDetector|true
 detectorDoInsideDoPrivileged=DoInsideDoPrivileged|true
@@ -35,6 +36,7 @@ detectorFinalizerNullsFields=FinalizerNullsFields|true
 detectorFindBadCast2=FindBadCast2|true
 detectorFindBadForLoop=FindBadForLoop|true
 detectorFindCircularDependencies=FindCircularDependencies|false
+detectorFindComparatorProblems=FindComparatorProblems|true
 detectorFindDeadLocalStores=FindDeadLocalStores|true
 detectorFindDoubleCheck=FindDoubleCheck|true
 detectorFindEmptySynchronizedBlock=FindEmptySynchronizedBlock|true
@@ -55,6 +57,7 @@ detectorFindOpenStream=FindOpenStream|true
 detectorFindPuzzlers=FindPuzzlers|true
 detectorFindRefComparison=FindRefComparison|true
 detectorFindReturnRef=FindReturnRef|true
+detectorFindRoughConstants=FindRoughConstants|true
 detectorFindRunInvocations=FindRunInvocations|true
 detectorFindSelfComparison=FindSelfComparison|true
 detectorFindSelfComparison2=FindSelfComparison2|true
@@ -71,11 +74,14 @@ detectorFindUnsatisfiedObligation=FindUnsatisfiedObligation|true
 detectorFindUnsyncGet=FindUnsyncGet|true
 detectorFindUseOfNonSerializableValue=FindUseOfNonSerializableValue|true
 detectorFindUselessControlFlow=FindUselessControlFlow|true
+detectorFindUselessObjects=FindUselessObjects|true
 detectorFormatStringChecker=FormatStringChecker|true
 detectorHugeSharedStringConstants=HugeSharedStringConstants|true
 detectorIDivResultCastToDouble=IDivResultCastToDouble|true
 detectorIncompatMask=IncompatMask|true
 detectorInconsistentAnnotations=InconsistentAnnotations|true
+detectorInefficientIndexOf=InefficientIndexOf|false
+detectorInefficientInitializationInsideLoop=InefficientInitializationInsideLoop|false
 detectorInefficientMemberAccess=InefficientMemberAccess|false
 detectorInefficientToArray=InefficientToArray|true
 detectorInfiniteLoop=InfiniteLoop|true
@@ -92,17 +98,20 @@ detectorLoadOfKnownNullValue=LoadOfKnownNullValue|true
 detectorLostLoggerDueToWeakReference=LostLoggerDueToWeakReference|true
 detectorMethodReturnCheck=MethodReturnCheck|true
 detectorMultithreadedInstanceAccess=MultithreadedInstanceAccess|true
+detectorMutableEnum=MutableEnum|true
 detectorMutableLock=MutableLock|true
 detectorMutableStaticFields=MutableStaticFields|true
 detectorNaming=Naming|true
 detectorNoteUnconditionalParamDerefs=NoteUnconditionalParamDerefs|true
 detectorNumberConstructor=NumberConstructor|true
+detectorOptionalReturnNull=OptionalReturnNull|true
 detectorOverridingEqualsNotSymmetrical=OverridingEqualsNotSymmetrical|true
 detectorPreferZeroLengthArrays=PreferZeroLengthArrays|true
 detectorPublicSemaphores=PublicSemaphores|false
 detectorQuestionableBooleanAssignment=QuestionableBooleanAssignment|true
 detectorReadOfInstanceFieldInMethodInvokedByConstructorInSuperclass=ReadOfInstanceFieldInMethodInvokedByConstructorInSuperclass|true
 detectorReadReturnShouldBeChecked=ReadReturnShouldBeChecked|true
+detectorRedundantConditions=RedundantConditions|true
 detectorRedundantInterfaces=RedundantInterfaces|true
 detectorRepeatedConditionals=RepeatedConditionals|true
 detectorRuntimeExceptionCapture=RuntimeExceptionCapture|true
@@ -113,6 +122,7 @@ detectorStringConcatenation=StringConcatenation|true
 detectorSuperfluousInstanceOf=SuperfluousInstanceOf|true
 detectorSuspiciousThreadInterrupted=SuspiciousThreadInterrupted|true
 detectorSwitchFallthrough=SwitchFallthrough|true
+detectorSynchronizationOnSharedBuiltinConstant=SynchronizationOnSharedBuiltinConstant|true
 detectorSynchronizeAndNullCheckField=SynchronizeAndNullCheckField|true
 detectorSynchronizeOnClassLiteralNotGetClass=SynchronizeOnClassLiteralNotGetClass|true
 detectorSynchronizingOnContentsOfFieldToProtectField=SynchronizingOnContentsOfFieldToProtectField|true
@@ -129,6 +139,6 @@ detectorXMLFactoryBypass=XMLFactoryBypass|true
 detector_threshold=2
 effort=max
 excludefilter0=tools/findbugs/josm-filter.xml|true
-filter_settings=Medium|BAD_PRACTICE,CORRECTNESS,EXPERIMENTAL,MALICIOUS_CODE,MT_CORRECTNESS,PERFORMANCE,STYLE|false|16
-filter_settings_neg=NOISE,I18N,SECURITY|
-run_at_full_build=false
+filter_settings=Medium|BAD_PRACTICE,CORRECTNESS,EXPERIMENTAL,I18N,MALICIOUS_CODE,MT_CORRECTNESS,PERFORMANCE,SECURITY,STYLE|false|16
+filter_settings_neg=NOISE|
+run_at_full_build=true
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
index 412d513..78c45e8 100644
--- a/.settings/org.eclipse.jdt.core.prefs
+++ b/.settings/org.eclipse.jdt.core.prefs
@@ -114,6 +114,7 @@ org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.source=1.7
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
@@ -124,15 +125,18 @@ org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
 org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
 org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
 org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
 org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
 org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
 org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
 org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
 org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
 org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
 org.eclipse.jdt.core.formatter.blank_lines_after_package=1
 org.eclipse.jdt.core.formatter.blank_lines_before_field=0
@@ -152,6 +156,7 @@ org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
 org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
 org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
 org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line
 org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
 org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
 org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
@@ -170,10 +175,16 @@ org.eclipse.jdt.core.formatter.comment.indent_root_tags=false
 org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=do not insert
 org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
 org.eclipse.jdt.core.formatter.comment.line_length=100
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
 org.eclipse.jdt.core.formatter.compact_else_if=true
 org.eclipse.jdt.core.formatter.continuation_indentation=2
 org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
 org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
 org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
 org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
 org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
@@ -191,7 +202,9 @@ org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
 org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
 org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
 org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
 org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
 org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
 org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
 org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
@@ -239,6 +252,7 @@ org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=inser
 org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
 org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
 org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
 org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
@@ -257,12 +271,14 @@ org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invoca
 org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
 org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
 org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
 org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
@@ -286,6 +302,7 @@ org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invoc
 org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
 org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
@@ -313,6 +330,7 @@ org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do n
 org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
@@ -341,6 +359,7 @@ org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invoc
 org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
 org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
 org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
@@ -350,6 +369,7 @@ org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=inser
 org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
 org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
@@ -373,5 +393,8 @@ org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
 org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
 org.eclipse.jdt.core.formatter.tabulation.char=space
 org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
 org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
 org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/.settings/org.eclipse.jdt.groovy.core.prefs b/.settings/org.eclipse.jdt.groovy.core.prefs
index f8dc8b1..118c4b4 100644
--- a/.settings/org.eclipse.jdt.groovy.core.prefs
+++ b/.settings/org.eclipse.jdt.groovy.core.prefs
@@ -1,2 +1,2 @@
 eclipse.preferences.version=1
-groovy.compiler.level=23
+groovy.compiler.level=24
diff --git a/.settings/org.eclipse.jdt.ui.prefs b/.settings/org.eclipse.jdt.ui.prefs
index 2ad2ccb..aa64712 100644
--- a/.settings/org.eclipse.jdt.ui.prefs
+++ b/.settings/org.eclipse.jdt.ui.prefs
@@ -2,7 +2,7 @@ cleanup_settings_version=2
 eclipse.preferences.version=1
 editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
 formatter_profile=_josm
-formatter_settings_version=11
+formatter_settings_version=12
 org.eclipse.jdt.ui.javadoc=false
 org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="true" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment">/**\r\n * @return the ${bare_field_name}\r\n */</template><template autoinsert\="true" context\="settercomment_context" deleted\="false" description\="Comment for [...]
 sp_cleanup.add_default_serial_version_id=true
@@ -18,10 +18,12 @@ sp_cleanup.always_use_blocks=false
 sp_cleanup.always_use_parentheses_in_expressions=false
 sp_cleanup.always_use_this_for_non_static_field_access=false
 sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_functional_interfaces=false
 sp_cleanup.convert_to_enhanced_for_loop=false
 sp_cleanup.correct_indentation=false
 sp_cleanup.format_source_code=false
-sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.format_source_code_changes_only=true
+sp_cleanup.insert_inferred_type_arguments=false
 sp_cleanup.make_local_variable_final=false
 sp_cleanup.make_parameters_final=false
 sp_cleanup.make_private_fields_final=false
@@ -37,6 +39,7 @@ sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=
 sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
 sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
 sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_redundant_type_arguments=false
 sp_cleanup.remove_trailing_whitespaces=true
 sp_cleanup.remove_trailing_whitespaces_all=true
 sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
@@ -50,10 +53,13 @@ sp_cleanup.remove_unused_private_methods=true
 sp_cleanup.remove_unused_private_types=true
 sp_cleanup.sort_members=false
 sp_cleanup.sort_members_all=false
+sp_cleanup.use_anonymous_class_creation=false
 sp_cleanup.use_blocks=false
 sp_cleanup.use_blocks_only_for_return_and_throw=true
+sp_cleanup.use_lambda=false
 sp_cleanup.use_parentheses_in_expressions=false
 sp_cleanup.use_this_for_non_static_field_access=false
 sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
 sp_cleanup.use_this_for_non_static_method_access=false
 sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+sp_cleanup.use_type_arguments=false
diff --git a/.settings/org.eclipse.wst.common.project.facet.core.prefs.xml b/.settings/org.eclipse.wst.common.project.facet.core.prefs.xml
deleted file mode 100644
index d948498..0000000
--- a/.settings/org.eclipse.wst.common.project.facet.core.prefs.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<root>
-  <facet id="jpt.jaxb">
-    <node name="libprov">
-      <attribute name="provider-id" value="jaxb-jre-library-provider"/>
-    </node>
-    <node name="platform">
-      <attribute name="platform-id" value="generic_2_2"/>
-    </node>
-    <node name="schemas">
-      <node name="schema-1">
-        <attribute name="location" value="platform:/resource/JOSM/data_nodist/wms-cache.xsd"/>
-      </node>
-    </node>
-  </facet>
-</root>
diff --git a/.settings/org.eclipse.wst.common.project.facet.core.xml b/.settings/org.eclipse.wst.common.project.facet.core.xml
deleted file mode 100644
index afb9576..0000000
--- a/.settings/org.eclipse.wst.common.project.facet.core.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<faceted-project>
-  <installed facet="java" version="1.7"/>
-  <installed facet="jpt.jaxb" version="2.2"/>
-</faceted-project>
diff --git a/.settings/org.sonar.ide.eclipse.core.prefs b/.settings/org.sonar.ide.eclipse.core.prefs
new file mode 100644
index 0000000..e1b42aa
--- /dev/null
+++ b/.settings/org.sonar.ide.eclipse.core.prefs
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1
+extraProperties=
+lastAnalysisDate=1440282418279
+projectKey=josm
+serverUrl=https\://josm.openstreetmap.de/sonar
+version=2
diff --git a/.settings/sf.eclipse.javacc.prefs b/.settings/sf.eclipse.javacc.prefs
index d967ef6..ea04584 100644
--- a/.settings/sf.eclipse.javacc.prefs
+++ b/.settings/sf.eclipse.javacc.prefs
@@ -4,8 +4,10 @@ JJDOC_OPTIONS=
 JJTREE_OPTIONS=
 JJ_NATURE=true
 JTB_OPTIONS=-ia -jd -tk
+KEEP_DEL_FILES_IN_HISTORY=false
 MARK_GEN_FILES_AS_DERIVED=true
 RUNTIME_JJJAR=${project_loc}/tools/javacc.jar
 RUNTIME_JTBJAR=${eclipse_home}/plugins/sf.eclipse.javacc_1.5.27/jtb-1.4.7.jar
+RUNTIME_JVMOPTIONS=
 SUPPRESS_WARNINGS=false
 eclipse.preferences.version=1
diff --git a/README b/README
index b86d9d1..43649db 100644
--- a/README
+++ b/README
@@ -117,9 +117,12 @@ This is an overview of the files and directories in the JOSM code repository:
     - animal-sniffer-ant-tasks-1.14.jar
                             used to build and check code signatures to ensure plugins binary compatibility 
     - appbundler-1.0ea.jar  used to build Mac OS X package for Oracle Java 7
+    - checkstyle/           libs and config files for checkstyle (automatically detects code style
+                            problems in source code); can be launched as an ant target in build.xml
+    - commons-cli-1.3.1.jar dependency of Groovy Ant task
     - findbugs/             libs and config files for findbugs (automatically detects common bugs and potential
                             problems in source code); can be launched as an ant target in build.xml
-    - groovy-all-2.4.3.jar  used for some unit tests and various scripts
+    - groovy-all-2.4.4.jar  used for some unit tests and various scripts
     - jacocoant.jar         used to include coverage data into JUnit test reports 
     - javacc.jar            used in the build process to generate some .java files from a javacc source file
                             (src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSParser.jj)
diff --git a/REVISION b/REVISION
index 8b41789..21860b9 100644
--- a/REVISION
+++ b/REVISION
@@ -3,7 +3,7 @@
 <entry
    kind="dir"
    path="trunk"
-   revision="8339">
+   revision="8800">
 <url>http://josm.openstreetmap.de/svn/trunk</url>
 <relative-url>^/trunk</relative-url>
 <repository>
@@ -11,9 +11,9 @@
 <uuid>0c6e7542-c601-0410-84e7-c038aed88b3b</uuid>
 </repository>
 <commit
-   revision="8339">
-<author>stoecker</author>
-<date>2015-05-07T15:30:43.580086Z</date>
+   revision="8800">
+<author>simon04</author>
+<date>2015-09-27T20:11:06.755093Z</date>
 </commit>
 </entry>
 </info>
diff --git a/build.xml b/build.xml
index c3152c3..47d4162 100644
--- a/build.xml
+++ b/build.xml
@@ -14,7 +14,7 @@
     <property name="build.dir" location="build"/>
     <property name="javacc.home" location="tools"/>
     <property name="mapcss.dir" location="${src.dir}/org/openstreetmap/josm/gui/mappaint/mapcss"/>
-    <property name="imagerytypes.dir" location="${src.dir}/org/openstreetmap/josm/data/imagery/types"/>
+    <property name="groovy.jar" location="tools/groovy-all-2.4.4.jar"/>
     <!-- build parameter: compression level (ant -Dclevel=N)
              N ranges from 0 (no compression) to 9 (maximum compression)
              default: 9 -->
@@ -25,6 +25,10 @@
     <condition property="isWindows">
         <os family="Windows"/>
     </condition>
+    <!-- For Java9-specific stuff -->
+    <condition property="isJava9">
+        <equals arg1="${ant.java.version}" arg2="1.9" />
+    </condition>
 
     <!--
       ** Used by Eclipse ant builder for updating
@@ -198,22 +202,7 @@ Build-Date: ${build.tstamp}
             <arg value="${mapcss.dir}/MapCSSParser.jj"/>
         </exec>
     </target>
-    <target name="-jaxb_win" if="isWindows">
-        <property name="xjc" value="${java.home}\..\bin\xjc.exe" />
-    </target>
-    <target name="-jaxb_nix" unless="isWindows">
-        <property name="xjc" value="${java.home}/../bin/xjc" />
-    </target>
-    <target name="jaxb" depends="init, -jaxb_win, -jaxb_nix" unless="jaxb.notRequired">
-        <exec executable="${xjc}" failonerror="true">
-            <arg value="-d"/>
-            <arg value="${src.dir}"/>
-            <arg value="-encoding"/>
-            <arg value="UTF-8"/>
-            <arg value="data_nodist/wms-cache.xsd"/>
-        </exec>
-    </target>
-    <target name="compile" depends="init,javacc,jaxb">
+    <target name="compile" depends="init,javacc">
         <!-- COTS -->
         <javac srcdir="${src.dir}" includes="com/**,oauth/**,org/apache/commons/**,org/glassfish/**" nowarn="on" encoding="iso-8859-1"
             destdir="build" target="1.7" source="1.7" debug="on" includeAntRuntime="false" createMissingPackageInfoClass="false">
@@ -238,8 +227,8 @@ Build-Date: ${build.tstamp}
             <exclude name="org/apache/commons/logging/impl/LogKitLogger.java"/>
             <exclude name="org/apache/commons/logging/impl/ServletContextCleaner.java"/>
         </javac>
-        <!-- JMapViewer/JOSM -->
-        <javac srcdir="${src.dir}" excludes="com/**,oauth/**,org/apache/commons/**,org/glassfish/**,org/openstreetmap/gui/jmapviewer/Demo.java" 
+        <!-- JMapViewer -->
+        <javac sourcepath="" srcdir="${src.dir}" excludes="com/**,oauth/**,org/apache/commons/**,org/glassfish/**,org/openstreetmap/gui/jmapviewer/Demo.java,org/openstreetmap/josm/**,JOSM.java,gnu/**" 
             destdir="build" target="1.7" source="1.7" debug="on" includeantruntime="false" createMissingPackageInfoClass="false" encoding="UTF-8">
             <compilerarg value="-Xlint:cast"/>
             <compilerarg value="-Xlint:deprecation"/>
@@ -255,6 +244,24 @@ Build-Date: ${build.tstamp}
             <!-- Undocumented argument to ignore "Sun internal proprietary API" warning, see http://stackoverflow.com/a/13862308/2257172 -->
             <compilerarg value="-XDignore.symbol.file"/>
         </javac>
+        <!-- JOSM -->
+        <javac sourcepath="" srcdir="${src.dir}" excludes="com/**,oauth/**,org/apache/commons/**,org/glassfish/**,org/openstreetmap/gui/jmapviewer/Demo.java" 
+            destdir="build" target="1.7" source="1.7" debug="on" includeantruntime="false" createMissingPackageInfoClass="false" encoding="UTF-8">
+            <compilerarg value="-Xlint:cast"/>
+            <compilerarg value="-Xlint:deprecation"/>
+            <compilerarg value="-Xlint:dep-ann"/>
+            <compilerarg value="-Xlint:divzero"/>
+            <compilerarg value="-Xlint:empty"/>
+            <compilerarg value="-Xlint:finally"/>
+            <compilerarg value="-Xlint:overrides"/>
+            <!--<compilerarg value="-Xlint:rawtypes"/>-->
+            <compilerarg value="-Xlint:static"/>
+            <compilerarg value="-Xlint:try"/>
+            <compilerarg value="-Xlint:unchecked"/>
+            <!-- Undocumented argument to ignore "Sun internal proprietary API" warning, see http://stackoverflow.com/a/13862308/2257172 -->
+            <compilerarg value="-XDignore.symbol.file"/>
+        </javac>
+
         <copy todir="build" failonerror="no" includeemptydirs="no">
             <fileset dir="resources"/>
         </copy>
@@ -263,9 +270,6 @@ Build-Date: ${build.tstamp}
         <uptodate property="javacc.notRequired" targetfile="${mapcss.dir}/parsergen/MapCSSParser.java" >
             <srcfiles dir="${mapcss.dir}" includes="MapCSSParser.jj"/>
         </uptodate>
-        <uptodate property="jaxb.notRequired" targetfile="${src.dir}/org/openstreetmap/josm/data/imagery/types/package-info.java" >
-            <srcfiles dir="data_nodist" includes="wms-cache.xsd"/>
-        </uptodate>
         <mkdir dir="build"/>
         <mkdir dir="dist"/>
     </target>
@@ -288,14 +292,15 @@ Build-Date: ${build.tstamp}
         <delete dir="build"/>
         <delete dir="dist"/>
         <delete dir="${mapcss.dir}/parsergen"/>
-        <delete dir="${imagerytypes.dir}"/>
+        <delete file="${src.dir}/org/w3/_2001/xmlschema/Adapter1.java"/>
+        <delete dir="${src.dir}/org/openstreetmap/josm/data/imagery/types"/>
     </target>
     <path id="test.classpath">
         <fileset dir="${test.dir}/lib">
             <include name="**/*.jar"/>
         </fileset>
         <pathelement path="dist/josm-custom.jar"/>
-        <pathelement path="tools/groovy-all-2.4.3.jar"/>
+        <pathelement path="${groovy.jar}"/>
     </path>
     <macrodef name="init-test-preferences">
         <attribute name="testfamily"/>
@@ -342,7 +347,7 @@ Build-Date: ${build.tstamp}
         </sequential>
     </macrodef>
     <target name="test-compile" depends="test-init,dist">
-        <taskdef name="groovyc" classname="org.codehaus.groovy.ant.Groovyc" classpath="tools/groovy-all-2.4.3.jar"/>
+        <taskdef name="groovyc" classname="org.codehaus.groovy.ant.Groovyc" classpath="${groovy.jar}"/>
         <call-groovyc testfamily="unit">
             <cp-elements>
                 <path refid="test.classpath"/>
@@ -417,7 +422,8 @@ Build-Date: ${build.tstamp}
             <html destdir="${test.dir}/report/jacoco"/>
         </jacoco:report>
     </target>
-    <target name="dist-optimized" depends="dist">
+    <!-- Proguard does not support Java 9 : http://sourceforge.net/p/proguard/bugs/551/ -->
+    <target name="dist-optimized" depends="dist" unless="isJava9">
         <taskdef resource="proguard/ant/task.properties" classpath="tools/proguard.jar"/>
         <proguard>
         -injars dist/josm-custom.jar
@@ -436,13 +442,14 @@ Build-Date: ${build.tstamp}
         -keepclasseswithmembers public class org.openstreetmap.josm.gui.MainApplication {
             public static void main(java.lang.String[]);
         }
-        -keepclasseswithmembers public class org.openstreetmap.josm.gui.MainApplet
 
         -keep class JOSM
         -keep class * extends org.openstreetmap.josm.io.FileImporter
         -keep class * extends org.openstreetmap.josm.io.FileExporter
-        -keep class org.w3._2001.xmlschema.Adapter1
         -keep class org.openstreetmap.josm.actions.search.SearchCompiler$Never
+        -keep class org.openstreetmap.josm.gui.mappaint.mapcss.Condition$PseudoClasses {
+            static boolean *(org.openstreetmap.josm.gui.mappaint.Environment);
+        }
         -keep class org.apache.commons.logging.impl.*
 
         -keepclassmembers enum  * {
@@ -571,6 +578,44 @@ Build-Date: ${build.tstamp}
         </as:check-signature>
     </target>
 
+    <macrodef name="_taginfo">
+        <attribute name="type"/>
+        <attribute name="output"/>
+        <sequential>
+            <echo message="Generating Taginfo for type @{type} to @{output}"/>
+            <groovy src="${taginfoextract}" classpath="dist/josm-custom.jar">
+                <arg value="-t"/>
+                <arg value="@{type}"/>
+                <arg value="--noexit"/>
+                <arg value="--svnweb"/>
+                <arg value="--imgurlprefix"/>
+                <arg value="${imgurlprefix}"/>
+                <arg value="-o"/>
+                <arg value="@{output}"/>
+            </groovy>
+        </sequential>
+    </macrodef>
+
+    <target name="taginfo" depends="dist">
+        <taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" classpath="${groovy.jar};tools/commons-cli-1.3.1.jar"/>
+        <property name="taginfoextract" value="scripts/taginfoextract.groovy"/>
+        <property name="imgurlprefix" value="http://josm.openstreetmap.de/download/taginfo/taginfo-img"/>
+    	<_taginfo type="mappaint" output="taginfo_style.json"/>
+    	<_taginfo type="presets" output="taginfo_presets.json"/>
+    	<_taginfo type="external_presets" output="taginfo_external_presets.json"/>
+    </target>
+
+    <target name="checkstyle">
+        <taskdef resource="com/puppycrawl/tools/checkstyle/ant/checkstyle-ant-task.properties" 
+        	classpath="tools/checkstyle/checkstyle-6.10.1-all.jar"/>
+        <checkstyle config="tools/checkstyle/josm_checks.xml">
+            <fileset dir="${basedir}/src/org/openstreetmap/josm" includes="**/*.java" 
+            	excludes="gui/mappaint/mapcss/parsergen/*.java"/>
+            <fileset dir="${basedir}/test" includes="**/*.java"/>
+            <formatter type="xml" toFile="checkstyle-josm.xml"/>
+        </checkstyle>
+    </target>
+
     <target name="findbugs" depends="dist">
         <taskdef name="findbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask" classpath="tools/findbugs/findbugs-ant.jar"/>
         <path id="findbugs-classpath">
diff --git a/data/defaultpresets.xml b/data/defaultpresets.xml
index 6207d93..4a2bd9d 100644
--- a/data/defaultpresets.xml
+++ b/data/defaultpresets.xml
@@ -176,7 +176,7 @@
         <combo key="leisure" text="Type" values="pitch,sports_centre,stadium" default="pitch" />
     </chunk>
     <chunk id="sport">
-            <combo key="sport" text="Sport" values="multi,archery,athletics,american_football,australian_football,baseball,basketball,boules,bowls,canadian_football,canoe,climbing,cricket,cricket_nets,croquet,cycling,dog_racing,equestrian,gaelic_games,golf,gymnastics,handball,hockey,horse_racing,motor,pelota,racquet,rugby_league,rugby_union,running,shooting,skateboard,skating,soccer,swimming,table_tennis,tennis" values_context="sport" />
+            <combo key="sport" text="Sport" values="multi,archery,athletics,american_football,australian_football,baseball,basketball,beachvolleyball,billiards,boules,bowls,canadian_football,canoe,climbing,cricket,croquet,cycling,dog_racing,equestrian,field_hockey,gaelic_games,golf,gymnastics,handball,horse_racing,ice_hockey,karting,model_aerodrome,motocross,motor,pelota,racquet,rc_car,rugby_league,rugby_union,running,safety_training,shooting,skateboard,skating,soccer,swimming,table_tenn [...]
     </chunk>
     <chunk id="fee">
         <combo key="fee" text="Fee" values="yes,no" />
@@ -230,12 +230,12 @@
     <chunk id="leaf">
         <combo key="leaf_type" text="Type" values="broadleaved,needleleaved,mixed,leafless" values_searchable="true" />
         <combo key="leaf_cycle" text="Cycle" values_searchable="true" >
-		    <list_entry value="deciduous" short_description="Plants that are leafless for a certain period during the year." />
-			<list_entry value="evergreen" short_description="Plants that are never entirely without green foliage." />
-			<list_entry value="semi_deciduous" short_description="Plants that lose their foliage for a very short period, when old leaves fall off and new foliage growth is starting." />
-			<list_entry value="semi_evergreen" short_description="Plants that lose most, but not all, of their foliage for a fraction of the year." />
-			<list_entry value="mixed" short_description="Habitat with evergreen and deciduous vegetation." />
-		</combo>
+            <list_entry value="deciduous" short_description="Plants that are leafless for a certain period during the year." />
+            <list_entry value="evergreen" short_description="Plants that are never entirely without green foliage." />
+            <list_entry value="semi_deciduous" short_description="Plants that lose their foliage for a very short period, when old leaves fall off and new foliage growth is starting." />
+            <list_entry value="semi_evergreen" short_description="Plants that lose most, but not all, of their foliage for a fraction of the year." />
+            <list_entry value="mixed" short_description="Habitat with evergreen and deciduous vegetation." />
+        </combo>
     </chunk>
     <chunk id="religious">
         <text key="name" text="Name" />
@@ -415,7 +415,8 @@
                   pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:highway=trunk"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:highway=trunk"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:highway=trunk"
-                  uk.href="http://wiki.openstreetmap.org/wiki/Uk:Tag:highway=trunk" />
+                  uk.href="http://wiki.openstreetmap.org/wiki/Uk:Tag:highway=trunk"
+                  vi.href="http://wiki.openstreetmap.org/wiki/Vi:Tag:highway=trunk" />
             <space />
             <key key="highway" value="trunk" />
             <text key="ref" text="Reference" />
@@ -589,6 +590,7 @@
             <key key="highway" value="unclassified" />
             <optional>
                 <text key="name" text="Name" />
+                <check key="noname" text="Street has no name" disable_off="true" />
                 <text key="ref" text="Reference" />
                 <reference ref="highway_base" />
                 <reference ref="highway_yesno_incline_oneway_lit_width_sidewalk" />
@@ -613,6 +615,7 @@
             <key key="highway" value="residential" />
             <text key="name" text="Name" />
             <optional>
+                <check key="noname" text="Street has no name" disable_off="true" />
                 <text key="ref" text="Reference" />
                 <reference ref="highway_base" />
                 <reference ref="highway_yesno_incline_oneway_lit_width_sidewalk" />
@@ -692,6 +695,7 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:highway=service"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:highway=service"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:highway=service"
+                  it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:highway=service"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:highway=service"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:highway=service"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:highway=service"
@@ -741,6 +745,18 @@
                 <check key="lit" text="Lit" />
             </optional>
         </item> <!-- Escape -->
+        <item name="Raceway" icon="styles/standard/sport/raceway.svg" type="way,closedway" preset_name_label="true">
+            <link href="http://wiki.openstreetmap.org/wiki/Tag:highway=raceway"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:highway=raceway"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:highway=raceway"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:highway=raceway"
+                  pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:highway=raceway"
+                  pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:highway=raceway"
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:highway=raceway" />
+            <space />
+            <key key="highway" value="raceway" />
+            <text key="name" text="Name" />
+        </item> <!-- Raceway -->
         <item name="Road (Unknown Type)" icon="presets/way_unclassified.png" type="way,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:highway=road"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:highway=road"
@@ -780,6 +796,7 @@
         <separator/>
         <item name="Road Restrictions" icon="presets/restrictions.png" type="node,way,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Key:access"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Key:access"
                   da.href="http://wiki.openstreetmap.org/wiki/Da:Key:access"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Key:access"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Key:access"
@@ -850,7 +867,7 @@
             </optional>
             <preset_link preset_name="Road Restrictions" />
         </item> <!-- Roundabout -->
-        <item name="Ford" icon="presets/ford.png" type="node,way" preset_name_label="true">
+        <item name="Ford" icon="styles/standard/misc/ford.svg" type="node,way" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Key:ford"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Key:ford"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Key:ford"
@@ -861,7 +878,6 @@
             <key key="ford" value="yes" />
             <optional>
                 <text key="name" text="Name" />
-                <combo key="incline" text="Incline" values="10%,-10%,10°,-10°,up,down" />
             </optional>
         </item> <!-- Ford -->
     </group> <!-- Streets -->
@@ -870,6 +886,7 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:highway=track"
                   da.href="http://wiki.openstreetmap.org/wiki/Da:Tag:highway=track"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:highway=track"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:highway=track"
                   fi.href="http://wiki.openstreetmap.org/wiki/Fi:Tag:highway=track"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:highway=track"
                   id.href="http://wiki.openstreetmap.org/wiki/Id:Tag:highway=track"
@@ -898,6 +915,7 @@
         <item name="Path" icon="presets/path.png" type="way,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:highway=path"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:highway=path"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:highway=path"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:highway=path"
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:highway=path"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:highway=path"
@@ -1117,6 +1135,7 @@
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:highway=rest_area"
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:highway=rest_area"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:highway=rest_area"
+                  pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:highway=rest_area"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:highway=rest_area"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:highway=rest_area"
                   sv.href="http://wiki.openstreetmap.org/wiki/Sv:Tag:highway=rest_area" />
@@ -1203,6 +1222,7 @@
         </item> <!-- Pedestrian Crossing -->
         <item name="Traffic Calming" icon="styles/standard/vehicle/traffic_calming_blue.png" type="node,way" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Key:traffic_calming"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Key:traffic_calming"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Key:traffic_calming"
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Key:traffic_calming"
                   fi.href="http://wiki.openstreetmap.org/wiki/Fi:Key:traffic_calming"
@@ -1210,6 +1230,7 @@
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Key:traffic_calming"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Key:traffic_calming"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Key:traffic_calming"
+                  pt.href="http://wiki.openstreetmap.org/wiki/Pt:Key:traffic_calming"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Key:traffic_calming"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Key:traffic_calming" />
             <space />
@@ -1269,6 +1290,15 @@
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:highway=traffic_mirror" />
             <key key="highway" value="traffic_mirror" />
         </item> <!-- Traffic Mirror -->
+        <item name="Highway milestone" icon="styles/standard/vehicle/milestone.svg" type="node" preset_name_label="true">
+            <link href="http://wiki.openstreetmap.org/wiki/Tag:highway=milestone"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:highway=milestone"
+                  pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:highway=milestone"
+                  zh_TW.href="http://wiki.openstreetmap.org/wiki/Zh-hant:Tag:highway=milestone" />
+            <key key="highway" value="milestone" />
+            <text key="distance" text="Distance (kilometers)" />
+            <text key="ref" text="Reference" />
+        </item> <!-- Highway Milestone -->
         <item name="Named Junction" name_context="junction=yes" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:junction=yes"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:junction=yes" />
@@ -1374,7 +1404,8 @@
                   nl.href="http://wiki.openstreetmap.org/wiki/NL:Key:barrier"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Key:barrier"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Key:barrier"
-                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Key:barrier" />
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Key:barrier"
+                  uk.href="http://wiki.openstreetmap.org/wiki/Uk:Key:barrier" />
             <key key="barrier" value="spikes" />
             <reference ref="barrier_5" />
         </item> <!-- Spikes -->
@@ -1414,7 +1445,7 @@
                 <text key="genus" text="Genus" />
                 <text key="species" text="Species" />
                 <text key="taxon" text="Taxon" />
-				<reference ref="leaf" />
+                <reference ref="leaf" />
             </optional>
         </item> <!-- Hedge -->
         <item name="Fence" icon="presets/fence.png" type="way,closedway" preset_name_label="true">
@@ -1469,7 +1500,8 @@
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:barrier=retaining_wall"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:barrier=retaining_wall"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:barrier=retaining_wall"
-                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:barrier=retaining_wall" />
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:barrier=retaining_wall"
+                  uk.href="http://wiki.openstreetmap.org/wiki/Uk:Tag:barrier=retaining_wall" />
             <key key="barrier" value="retaining_wall" />
             <reference ref="optional_height" />
         </item> <!-- Retaining Wall -->
@@ -1706,8 +1738,8 @@
         </item> <!-- Avalanche Protector -->
     </group> <!-- Passageways -->
   </group> <!-- Highways -->
-  <group name="Water" icon="presets/waterway.png">
-    <group name="Water" icon="presets/waterway.png">
+  <group name="Water" name_context="main group" icon="presets/waterway.png">
+    <group name="Water" name_context="sub group" icon="presets/waterway.png">
         <item name="Drain" icon="presets/waterway.png" type="way" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:waterway=drain"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:waterway=drain"
@@ -1837,6 +1869,7 @@
         </item> <!-- Dam -->
         <item name="Groyne" icon="presets/groyne.png" type="way,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:man_made=groyne"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:man_made=groyne"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:man_made=groyne"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:man_made=groyne"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:man_made=groyne" />
@@ -1844,6 +1877,7 @@
         </item> <!-- Groyne -->
         <item name="Breakwater" icon="presets/breakwater.png" type="way,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:man_made=breakwater"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:man_made=breakwater"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:man_made=breakwater"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:man_made=breakwater"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:man_made=breakwater"
@@ -1884,6 +1918,7 @@
         </item> <!-- Basin -->
         <item name="Reservoir" icon="presets/landuse_water.png" type="node,closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=reservoir"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:landuse=reservoir"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:landuse=reservoir"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:landuse=reservoir"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:landuse=reservoir"
@@ -1894,6 +1929,7 @@
         </item> <!-- Reservoir -->
         <item name="Covered Reservoir" icon="presets/reservoir_covered.png" type="node,closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:man_made=reservoir_covered"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:man_made=reservoir_covered"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:man_made=reservoir_covered"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:man_made=reservoir_covered"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:man_made=reservoir_covered"
@@ -1903,7 +1939,7 @@
             <text key="name" text="Name" />
         </item> <!-- Covered Reservoir -->
         <separator/>
-        <item name="Water" icon="presets/water.png" type="closedway,relation" preset_name_label="true">
+        <item name="Water" name_context="natural" icon="presets/water.png" type="closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:natural=water"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:natural=water"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:natural=water"
@@ -2054,6 +2090,7 @@
         <item name="Marina" icon="styles/standard/nautical/marina.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:leisure=marina"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:leisure=marina"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:leisure=marina"
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:leisure=marina"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:leisure=marina"
                   pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:leisure=marina"
@@ -2064,8 +2101,36 @@
             <text key="name" text="Name" />
             <combo key="sanitary_dump_station" text="Dump Station" values="yes,public,customers,no" />
         </item> <!-- Marina -->
+        <item name="Marine Fuel" icon="styles/standard/nautical/marine_fuel.png" type="node,closedway" preset_name_label="true">
+            <link href="http://wiki.openstreetmap.org/wiki/Tag:waterway=fuel"/>
+            <space />
+            <key key="waterway" value="fuel" />
+            <optional>
+                <combo key="brand" text="Brand" values="Agip,Aral,Avia,BP,Chevron,Citgo,Eni,Esso,Exxon,Gulf,Mobil,OMV,Petro-Canada,Pioneer,Q8,Repsol,Shell,Socar,Statoil,Sunoco,Tamoil,Texaco,Total,Independent" values_searchable="true" />
+                <reference ref="name_operator" />
+                <reference ref="oh" />
+                <space />
+                <label text="Fuel types:" />
+                <checkgroup columns="2">
+                    <check key="fuel:diesel" text="Diesel" />
+                    <check key="fuel:biodiesel" text="Bio Diesel" />
+                    <check key="fuel:octane_80" text="Octane 80" />
+                    <check key="fuel:octane_91" text="Octane 91" />
+                    <check key="fuel:octane_92" text="Octane 92" />
+                    <check key="fuel:octane_95" text="Octane 95" />
+                    <check key="fuel:octane_98" text="Octane 98" />
+                    <check key="fuel:octane_100" text="Octane 100" />
+                    <check key="fuel:e10" text="E10 (10% Ethanol mix)" />
+                    <check key="fuel:e85" text="E85 (85% Ethanol mix)" />
+                    <check key="fuel:lpg" text="LPG (Liquefied petroleum gas)" />
+                    <check key="fuel:cng" text="CNG (Compressed Natural Gas)" />
+                </checkgroup>
+            </optional>
+            <reference ref="link_contact_address_payment" />
+        </item> <!-- Marine Fuel -->
         <item name="Pier" icon="presets/pier.png" type="node,way,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:man_made=pier"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:man_made=pier"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:man_made=pier"
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:man_made=pier"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:man_made=pier"
@@ -2256,6 +2321,7 @@
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:railway=level_crossing"
                   fi.href="http://wiki.openstreetmap.org/wiki/Fi:Tag:railway=level_crossing"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:railway=level_crossing"
+                  hu.href="http://wiki.openstreetmap.org/wiki/Hu:Tag:railway=level_crossing"
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:railway=level_crossing"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:railway=level_crossing"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:railway=level_crossing"
@@ -2309,6 +2375,12 @@
             <key key="railway" value="switch" />
             <text key="ref" text="Reference" />
         </item> <!-- Railway Switch -->
+        <item name="Railway milestone" icon="styles/standard/vehicle/milestone.svg" type="node" preset_name_label="true">
+            <link href="http://wiki.openstreetmap.org/wiki/Tag:railway=milestone" />
+            <key key="railway" value="milestone" />
+            <text key="distance" text="Distance (kilometers)" />
+            <text key="ref" text="Reference" />
+        </item> <!-- Railway Milestone -->
     </group> <!-- Railway -->
     <group name="Aerialway" icon="presets/aerialway.png">
         <item name="Cable Car" icon="presets/cable_car.png" type="way" preset_name_label="true">
@@ -2560,6 +2632,7 @@
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:shop=car"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:shop=car"
                   nl.href="http://wiki.openstreetmap.org/wiki/NL:Tag:shop=car"
+                  pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:shop=car"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:shop=car"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:shop=car" />
             <space />
@@ -2572,6 +2645,7 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=car_repair"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=car_repair"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:shop=car_repair"
+                  pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:shop=car_repair"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:shop=car_repair"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:shop=car_repair" />
             <space />
@@ -2643,6 +2717,7 @@
         </item> <!-- Parking -->
         <item name="Motorcycle Dealer" icon="presets/motorbike.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=motorcycle"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=motorcycle"
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:shop=motorcycle"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:shop=motorcycle"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:shop=motorcycle"
@@ -2681,11 +2756,11 @@
                   uk.href="http://wiki.openstreetmap.org/wiki/Uk:Tag:amenity=bicycle_parking" />
             <space />
             <key key="amenity" value="bicycle_parking" />
-            <reference ref="name_operator" />
-            <text key="capacity" text="Capacity" />
             <combo key="bicycle_parking" text="Type" values="anchors,building,ground_slots,informal,lockers,rack,shed,stands,wall_loops" />
+            <text key="name" text="Name" />
+            <text key="capacity" text="Capacity" />
+            <reference ref="parking_access_fee_operator_surface_smoothness" />
             <check key="covered" text="Covered" />
-            <reference ref="fee_interval" />
             <reference ref="supervised_lit_oh" />
         </item> <!-- Parking -->
         <item name="Bike Dealer" icon="presets/bike.png" type="node,closedway" preset_name_label="true">
@@ -2762,13 +2837,13 @@
                 <combo key="colour" text="Color (HTML name or hexadecimal code)" values_context="color" values="black,brown,green,red,blue,gray,white,#CD853F" />
             </optional>
             <roles>
-                <role key="" text="route segment" requisite="required" type="way,closedway" member_expression="highway OR railway OR waterway OR aerialway" />
                 <role key="stop" text="stop position" requisite="optional" type="node" member_expression="public_transport=stop_position" />
                 <role key="stop_exit_only" text="stop position (exit only)" requisite="optional" type="node" member_expression="public_transport=stop_position" />
                 <role key="stop_entry_only" text="stop position (entry only)" requisite="optional" type="node" member_expression="public_transport=stop_position" />
-                <role key="platform" text="platform" requisite="optional" type="node,way,closedway" member_expression="public_transport=platform" />
+                <role key="platform" text="platform" requisite="optional" type="node,way,closedway,relation" member_expression="public_transport=platform" />
                 <role key="platform_exit_only" text="platform (exit only)" requisite="optional" type="node,way,closedway" member_expression="public_transport=platform" />
                 <role key="platform_entry_only" text="platform (entry only)" requisite="optional" type="node,way,closedway" member_expression="public_transport=platform" />
+                <role key="" text="route segment" requisite="required" type="way,closedway" member_expression="highway OR railway OR waterway OR aerialway" />
             </roles>
         </item> <!-- Public Transport Route -->
         <item name="Route Master" icon="presets/path.png" type="relation" preset_name_label="true">
@@ -2867,6 +2942,7 @@
         <item name="Station" name_context="railway" type="node,closedway" icon="styles/standard/transport/railway_station.png" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:public_transport=station"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:public_transport=station"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:public_transport=station"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:public_transport=station"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:public_transport=station"
                   nl.href="http://wiki.openstreetmap.org/wiki/NL:Tag:public_transport=station"
@@ -2897,6 +2973,7 @@
         <item name="Ticket Machine" icon="styles/standard/transport/ticket-machine.png" type="node" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=vending_machine"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=vending_machine"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:amenity=vending_machine"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:amenity=vending_machine"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:amenity=vending_machine"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:amenity=vending_machine"
@@ -3013,6 +3090,7 @@
         <item name="Bus Platform" icon="presets/platform_bus.png" type="node,way,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:highway=platform"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:highway=platform"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:highway=platform"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:highway=platform"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:highway=platform" />
             <space />
@@ -3025,6 +3103,7 @@
     <item name="Taxi" icon="presets/taxi.png" type="node,closedway" preset_name_label="true">
         <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=taxi"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=taxi"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:amenity=taxi"
                   et.href="http://wiki.openstreetmap.org/wiki/Et:Tag:amenity=taxi"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:amenity=taxi"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:amenity=taxi"
@@ -3113,6 +3192,7 @@
         </item> <!-- Hangar -->
         <item name="Beacon" icon="styles/standard/misc/landmark/beacon.png" type="node" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:man_made=beacon"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:man_made=beacon"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:man_made=beacon"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:man_made=beacon" />
             <key key="man_made" value="beacon" />
@@ -3150,7 +3230,7 @@
   </group> <!-- Transport -->
   <group name="Facilities" icon="presets/bed.png">
     <group name="Accommodation" icon="presets/bed.png">
-        <item name="Hotel" icon="styles/standard/accommodation.png" type="node,closedway" preset_name_label="true">
+        <item name="Hotel" icon="styles/standard/accommodation/hotel.svg" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:tourism=hotel"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:tourism=hotel"
                   fi.href="http://wiki.openstreetmap.org/wiki/Fi:Tag:tourism=hotel"
@@ -3163,13 +3243,15 @@
             <key key="tourism" value="hotel" />
             <reference ref="name_operator" />
             <combo key="stars" text="Stars" values="1,2,3,4,5,6,7" />
+            <text key="rooms" text="Rooms" />
+            <text key="beds" text="Beds" />
             <reference ref="wheelchair" />
             <space />
             <reference ref="internet_smoking" />
             <space />
             <reference ref="link_contact_address_payment" />
         </item> <!-- Hotel -->
-        <item name="Motel" icon="styles/standard/accommodation/motel.png" type="node,closedway" preset_name_label="true">
+        <item name="Motel" icon="styles/standard/accommodation/motel.svg" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:tourism=motel"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:tourism=motel"
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:tourism=motel"
@@ -3181,6 +3263,8 @@
             <key key="tourism" value="motel" />
             <reference ref="name_operator" />
             <combo key="stars" text="Stars" values="1,2,3,4,5,6,7" />
+            <text key="rooms" text="Rooms" />
+            <text key="beds" text="Beds" />
             <reference ref="wheelchair" />
             <space />
             <reference ref="internet_smoking" />
@@ -3198,6 +3282,8 @@
             <key key="tourism" value="guest_house" />
             <reference ref="name_operator" />
             <combo key="stars" text="Stars" values="1,2,3,4,5,6,7" />
+            <text key="rooms" text="Rooms" />
+            <text key="beds" text="Beds" />
             <reference ref="wheelchair" />
             <space />
             <reference ref="internet_smoking" />
@@ -3216,13 +3302,15 @@
             <key key="tourism" value="chalet" />
             <reference ref="name_operator" />
             <combo key="stars" text="Stars" values="1,2,3,4,5,6,7" />
+            <text key="rooms" text="Rooms" />
+            <text key="beds" text="Beds" />
             <reference ref="wheelchair" />
             <space />
             <reference ref="internet_smoking" />
             <space />
             <reference ref="link_contact_address_payment" />
         </item> <!-- Chalet -->
-        <item name="Hostel" icon="styles/standard/accommodation/hostel.png" type="node,closedway" preset_name_label="true">
+        <item name="Hostel" icon="styles/standard/accommodation/hostel.svg" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:tourism=hostel"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:tourism=hostel"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:tourism=hostel"
@@ -3234,6 +3322,8 @@
             <key key="tourism" value="hostel" />
             <reference ref="name_operator" />
             <combo key="stars" text="Stars" values="1,2,3,4,5,6,7" />
+            <text key="rooms" text="Rooms" />
+            <text key="beds" text="Beds" />
             <reference ref="wheelchair" />
             <space />
             <reference ref="internet_smoking" />
@@ -3251,6 +3341,8 @@
             <key key="tourism" value="alpine_hut" />
             <reference ref="name_operator" />
             <text key="ele" text="Elevation" />
+            <text key="rooms" text="Rooms" />
+            <text key="beds" text="Beds" />
             <space />
             <reference ref="internet_smoking" />
             <space />
@@ -3300,8 +3392,8 @@
             <reference ref="link_contact_address_payment" />
         </item> <!-- Camping Site -->
     </group> <!-- Accommodation -->
-    <group name="Food+Drinks" icon="presets/restaurant.png">
-        <item name="Restaurant" icon="presets/restaurant.png" type="node,closedway" preset_name_label="true">
+    <group name="Food+Drinks" icon="styles/standard/food/restaurant.svg">
+        <item name="Restaurant" icon="styles/standard/food/restaurant.svg" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=restaurant"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=restaurant"
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:amenity=restaurant"
@@ -3313,7 +3405,7 @@
             <space />
             <key key="amenity" value="restaurant" />
             <reference ref="name_operator" />
-            <multiselect key="cuisine" text="Cuisine" values="italian;chinese;pizza;burger;greek;german;indian;regional;kebab;turkish;asian;thai;mexican;japanese;french;sandwich;sushi" values_searchable="true" />
+            <multiselect key="cuisine" text="Cuisine" values="italian;chinese;pizza;burger;greek;german;indian;regional;kebab;turkish;asian;thai;mexican;japanese;french;sandwich;sushi;steak_house" values_searchable="true" />
             <check key="microbrewery" text="Microbrewery" />
             <check key="outdoor_seating" text="Outdoor seating" />
             <reference ref="oh_wheelchair" />
@@ -3359,6 +3451,7 @@
         <item name="Cafe" icon="presets/cafe.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=cafe"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=cafe"
+                  el.href="http://wiki.openstreetmap.org/wiki/El:Tag:amenity=cafe"
                   et.href="http://wiki.openstreetmap.org/wiki/Et:Tag:amenity=cafe"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:amenity=cafe"
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:amenity=cafe"
@@ -3399,6 +3492,7 @@
         <item name="Beer Garden" icon="presets/biergarten.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=biergarten"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=biergarten"
+                  el.href="http://wiki.openstreetmap.org/wiki/El:Tag:amenity=biergarten"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:amenity=biergarten"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:amenity=biergarten"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:amenity=biergarten" />
@@ -3415,6 +3509,7 @@
         <item name="Bar" icon="styles/standard/food/bar.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=bar"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=bar"
+                  el.href="http://wiki.openstreetmap.org/wiki/El:Tag:amenity=bar"
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:amenity=bar"
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:amenity=bar"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:amenity=bar"
@@ -3642,6 +3737,7 @@
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:tourism=zoo"
                   fi.href="http://wiki.openstreetmap.org/wiki/Fi:Tag:tourism=zoo"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:tourism=zoo"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:tourism=zoo"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:tourism=zoo"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:tourism=zoo" />
             <space />
@@ -3696,7 +3792,7 @@
             <space />
             <reference ref="link_contact_address_payment" />
         </item> <!-- Water Park -->
-        <item name="Sauna" de.name="Sauna" icon="presets/sauna.png" type="node,closedway" preset_name_label="true">
+        <item name="Sauna" icon="presets/sauna.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=sauna"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:amenity=sauna"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:amenity=sauna"
@@ -3717,7 +3813,20 @@
             <space />
             <reference ref="link_contact_address_payment" />
         </item> <!-- Horse Riding -->
-        <item name="Brothel" de.name="Bordell" icon="styles/standard/leisure/stripclub.png" type="node,closedway" preset_name_label="true">
+        <item name="Casino" icon="styles/standard/leisure/casino.svg" type="node,closedway" preset_name_label="true">
+            <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=casino"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=casino"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:amenity=casino"
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:amenity=casino" />
+            <space />
+            <key key="amenity" value="casino" />
+            <reference ref="name_operator_oh_wheelchair" />
+            <space />
+            <reference ref="internet_smoking" />
+            <space />
+            <reference ref="link_contact_address_payment" />
+        </item> <!-- Casino -->
+        <item name="Brothel" icon="styles/standard/leisure/stripclub.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=brothel"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=brothel"
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:amenity=brothel"
@@ -3771,6 +3880,7 @@
         <item name="Public Grill" icon="presets/bbq.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=bbq"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=bbq"
+                  el.href="http://wiki.openstreetmap.org/wiki/El:Tag:amenity=bbq"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:amenity=bbq"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:amenity=bbq"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:amenity=bbq" />
@@ -3783,6 +3893,7 @@
         <item name="Firepit" icon="styles/standard/leisure/firepit.svg" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:leisure=firepit"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:leisure=firepit"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:leisure=firepit"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:leisure=firepit"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:leisure=firepit"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:leisure=firepit" />
@@ -3813,7 +3924,7 @@
         </item> <!-- Private Swimming Pool -->
     </group> <!-- Leisure -->
     <group name="Culture" icon="presets/theater.png">
-        <item name="Museum" icon="styles/standard/sightseeing/museum.png" type="node,closedway" preset_name_label="true">
+        <item name="Museum" icon="styles/standard/sightseeing/museum.svg" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:tourism=museum"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:tourism=museum"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:tourism=museum"
@@ -3886,7 +3997,8 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=studio"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=studio"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:amenity=studio"
-                  pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:amenity=studio" />
+                  pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:amenity=studio"
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:amenity=studio" />
             <space />
             <key key="amenity" value="studio" />
             <reference ref="name_operator" />
@@ -4112,7 +4224,7 @@
             <reference ref="name_oh_wheelchair" />
             <reference ref="link_contact_address" />
         </item> <!-- Embassy -->
-        <item name="Courthouse" icon="presets/JusticeScales.png" type="node,closedway,relation" preset_name_label="true">
+        <item name="Courthouse" icon="styles/standard/service/administration/courthouse.svg" type="node,closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=courthouse"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=courthouse"
                   fi.href="http://wiki.openstreetmap.org/wiki/Fi:Tag:amenity=courthouse"
@@ -4124,7 +4236,7 @@
             <reference ref="name_oh_wheelchair" />
             <reference ref="link_contact_address" />
         </item> <!-- Courthouse -->
-        <item name="Prison" icon="presets/prison.png" type="node,closedway,relation" preset_name_label="true">
+        <item name="Prison" icon="styles/standard/service/administration/prison.svg" type="node,closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=prison"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=prison"
                   fi.href="http://wiki.openstreetmap.org/wiki/Fi:Tag:amenity=prison"
@@ -4207,6 +4319,7 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=school"
                   ar.href="http://wiki.openstreetmap.org/wiki/Ar:Tag:amenity=school"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=school"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:amenity=school"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:amenity=school"
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:amenity=school"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:amenity=school"
@@ -4257,10 +4370,11 @@
             <reference ref="link_contact_address" />
         </item> <!-- Driving School -->
     </group> <!-- Education -->
-    <group name="Health" icon="presets/pharmacy.png">
+    <group name="Health" icon="styles/standard/health/pharmacy.png">
         <item name="Hospital" icon="styles/standard/health/hospital.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=hospital"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=hospital"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:amenity=hospital"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:amenity=hospital"
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:amenity=hospital"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:amenity=hospital"
@@ -4274,6 +4388,7 @@
         </item> <!-- Hospital -->
         <item name="Clinic" icon="styles/standard/health/hospital.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=clinic"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:amenity=clinic"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:amenity=clinic" />
             <space />
             <key key="amenity" value="clinic" />
@@ -4320,6 +4435,7 @@
         <item name="Retirement Home" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Key:social_facility"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Key:social_facility"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Key:social_facility"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Key:social_facility"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Key:social_facility"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Key:social_facility"
@@ -4332,7 +4448,7 @@
             <text key="capacity" text="Capacity" />
             <reference ref="link_contact_address" />
         </item> <!-- Retirement Home -->
-        <item name="Pharmacy" icon="presets/pharmacy.png" type="node,closedway" preset_name_label="true">
+        <item name="Pharmacy" icon="styles/standard/health/pharmacy.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=pharmacy"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=pharmacy"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:amenity=pharmacy"
@@ -4340,7 +4456,8 @@
                   no.href="http://wiki.openstreetmap.org/wiki/No:Tag:amenity=pharmacy"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:amenity=pharmacy"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:amenity=pharmacy"
-                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:amenity=pharmacy" />
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:amenity=pharmacy"
+                  uk.href="http://wiki.openstreetmap.org/wiki/Uk:Tag:amenity=pharmacy" />
             <space />
             <key key="amenity" value="pharmacy" />
             <reference ref="name_operator_oh_wheelchair" />
@@ -4384,6 +4501,7 @@
         <separator/>
         <item name="Veterinary" icon="styles/standard/health/veterinary.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=veterinary"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:amenity=veterinary"
                   da.href="http://wiki.openstreetmap.org/wiki/Da:Tag:amenity=veterinary"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=veterinary"
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:amenity=veterinary"
@@ -4504,7 +4622,7 @@
             </optional>
             -->
         </item> <!-- Automated Defibrillator -->
-        <item name="Clock" icon="styles/standard/service/clock.png" type="node" preset_name_label="true">
+        <item name="Clock" icon="styles/standard/service/clock.svg" type="node" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=clock"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=clock"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:amenity=clock"
@@ -4521,7 +4639,7 @@
                 <check key="hygrometer" text="Shows humidity" />
             </optional>
         </item> <!-- Clock -->
-        <item name="Recycling" icon="presets/recycling.png" type="node,closedway" preset_name_label="true">
+        <item name="Recycling Container" icon="styles/standard/service/recycling/recycling_container.svg" type="node,closedway" preset_name_label="true">
            <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=recycling"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=recycling"
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:amenity=recycling"
@@ -4535,14 +4653,65 @@
                   sv.href="http://wiki.openstreetmap.org/wiki/Sv:Tag:amenity=recycling" />
             <space />
             <key key="amenity" value="recycling" />
-            <check key="recycling:batteries" text="Batteries" />
-            <check key="recycling:cans" text="Cans" />
-            <check key="recycling:clothes" text="Clothes" />
-            <check key="recycling:glass" text="Glass" />
-            <check key="recycling:paper" text="Paper" />
-            <check key="recycling:scrap_metal" text="Scrap Metal" />
-            <combo key="recycling_type" text="Type" values="container,centre" />
-        </item> <!-- Recycling -->
+            <key key="recycling_type" value="container" />
+            <reference ref="oh_wheelchair" />
+            <space />
+            <checkgroup columns="4">
+                <check key="recycling:batteries" text="Batteries" />
+                <check key="recycling:cans" text="Cans" />
+                <check key="recycling:cardboard" text="Cardboard" />
+                <check key="recycling:clothes" text="Clothes" />
+                <check key="recycling:electrical_appliances" text="Electrical Appliances" />
+                <check key="recycling:glass" text="Glass" />
+                <check key="recycling:glass_bottles" text="Glass Bottles" />
+                <check key="recycling:green_waste" text="Green Waste" />
+                <check key="recycling:paper" text="Paper" />
+                <check key="recycling:plastic" text="Plastic" />
+                <check key="recycling:plastic_bottles" text="Plastic Bottles" />
+                <check key="recycling:plastic_packaging" text="Plastic Packaging" />
+                <check key="recycling:scrap_metal" text="Scrap Metal" />
+                <check key="recycling:shoes" text="Shoes" />
+                <check key="recycling:small_appliances" text="Small Appliances" />
+                <check key="recycling:waste" text="Waste" />
+            </checkgroup>
+        </item> <!-- Recycling Container-->
+        <item name="Recycling Centre" icon="styles/standard/service/recycling/recycling_centre.svg" type="node,closedway" preset_name_label="true">
+           <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=recycling"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=recycling"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:amenity=recycling"
+                  fi.href="http://wiki.openstreetmap.org/wiki/Fi:Tag:amenity=recycling"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:amenity=recycling"
+                  it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:amenity=recycling"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:amenity=recycling"
+                  pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:amenity=recycling"
+                  pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:amenity=recycling"
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:amenity=recycling"
+                  sv.href="http://wiki.openstreetmap.org/wiki/Sv:Tag:amenity=recycling" />
+            <space />
+            <key key="amenity" value="recycling" />
+            <key key="recycling_type" value="centre" />
+            <reference ref="name_operator_oh_wheelchair" />
+            <space />
+            <checkgroup columns="4">
+                <check key="recycling:batteries" text="Batteries" />
+                <check key="recycling:cans" text="Cans" />
+                <check key="recycling:cardboard" text="Cardboard" />
+                <check key="recycling:clothes" text="Clothes" />
+                <check key="recycling:electrical_appliances" text="Electrical Appliances" />
+                <check key="recycling:glass" text="Glass" />
+                <check key="recycling:glass_bottles" text="Glass Bottles" />
+                <check key="recycling:green_waste" text="Green Waste" />
+                <check key="recycling:paper" text="Paper" />
+                <check key="recycling:plastic" text="Plastic" />
+                <check key="recycling:plastic_bottles" text="Plastic Bottles" />
+                <check key="recycling:plastic_packaging" text="Plastic Packaging" />
+                <check key="recycling:scrap_metal" text="Scrap Metal" />
+                <check key="recycling:shoes" text="Shoes" />
+                <check key="recycling:small_appliances" text="Small Appliances" />
+                <check key="recycling:waste" text="Waste" />
+            </checkgroup>
+            <reference ref="link_contact_address_payment" />
+        </item> <!-- Recycling Centre-->
         <item name="Waste Basket/Trash Can" icon="styles/standard/service/recycling/trash-bin.png" type="node" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=waste_basket"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=waste_basket"
@@ -4596,7 +4765,7 @@
             <space />
             <key key="amenity" value="bench" />
             <check key="backrest" text="Backrest" />
-            <combo key="material" text="Material" values="stone,metal,wood,plastic" />
+            <combo key="material" text="Material" values="concrete,metal,plastic,stone,wood" />
             <combo key="colour" text="Color (HTML name or hexadecimal code)" values_context="color" values="black,brown,green,red,blue,gray,white,#CD853F" />
             <combo key="seats" text="Amount of Seats" values="2,3,4,5,6,7,8,9,10" />
         </item> <!-- Bench -->
@@ -4670,6 +4839,7 @@
         <separator/>
         <item name="Advertising Column" icon="styles/standard/leisure/advertising_column.svg" type="node" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:advertising=column"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:advertising=column"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:advertising=column" />
             <space />
             <key key="advertising" value="column" />
@@ -4694,6 +4864,7 @@
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:leisure=stadium"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:leisure=stadium"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:leisure=stadium"
+                  pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:leisure=stadium"
                   pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:leisure=stadium"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:leisure=stadium"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:leisure=stadium" />
@@ -4719,6 +4890,7 @@
         <item name="Pitch" icon="styles/standard/sport/pitch.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:leisure=pitch"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:leisure=pitch"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:leisure=pitch"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:leisure=pitch"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:leisure=pitch"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:leisure=pitch"
@@ -4744,11 +4916,12 @@
             <space />
             <key key="leisure" value="track" />
             <text key="name" text="Name" />
-            <reference ref="sport" />
+            <combo key="sport" text="Sport" values="athletics,cycling,dog_racing,equestrian,horse_racing,running,skating" values_context="sport" />
         </item> <!-- Racetrack -->
         <item name="Golf Course" icon="styles/standard/sport/golf.svg" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:leisure=golf_course"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:leisure=golf_course"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:leisure=golf_course"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:leisure=golf_course"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:leisure=golf_course"
                   pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:leisure=golf_course"
@@ -4760,6 +4933,7 @@
         <item name="Miniature Golf" icon="styles/standard/sport/miniature_golf.svg" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:leisure=miniature_golf"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:leisure=miniature_golf"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:leisure=miniature_golf"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:leisure=miniature_golf"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:leisure=miniature_golf"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:leisure=miniature_golf" />
@@ -4808,6 +4982,13 @@
             <text key="name" text="Name" />
             <combo key="leisure" text="Type" values="pitch,sports_centre,stadium,track" values_context="running" default="track" />
         </item> <!-- Track and Field Athletics -->
+        <item name="Running" icon="styles/standard/sport/running.svg" type="node,closedway" preset_name_label="true">
+            <link href="http://wiki.openstreetmap.org/wiki/Tag:sport=running" />
+            <space />
+            <key key="sport" value="running" />
+            <reference ref="name_operator" />
+            <combo key="leisure" text="Type" values="pitch,sports_centre,stadium,track" values_context="running" />
+        </item> <!-- Running -->
         <item name="Climbing" icon="styles/standard/sport/climbing.png" type="node,way,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:sport=climbing"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:sport=climbing"
@@ -4893,7 +5074,7 @@
             <text key="name" text="Name" />
         </item> <!-- Scuba Diving -->
         <item name="Skiing" icon="styles/standard/sport/skiing.png" type="node,way,closedway" preset_name_label="true">
-            <link href="http://wiki.openstreetmap.org/wiki/Proposed_features/Piste_Maps"
+            <link href="http://wiki.openstreetmap.org/wiki/Piste_Maps"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Piste_Maps"
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Piste_Maps"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Piste_Maps" />
@@ -4983,6 +5164,13 @@
             <key key="sport" value="basketball" />
             <reference ref="name_leisure_pitch" />
         </item> <!-- Basketball -->
+        <item name="Handball" icon="styles/standard/sport/handball.png" type="node,closedway" preset_name_label="true">
+            <link href="http://wiki.openstreetmap.org/wiki/Tag:sport=handball" />
+            <space />
+            <key key="sport" value="handball" />
+            <reference ref="name_operator" />
+            <combo key="leisure" text="Type" values="stadium,pitch,sports_centre" />
+        </item> <!-- Handball -->
         <item name="Volleyball" icon="styles/standard/sport/volleyball.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:sport=volleyball" />
             <space />
@@ -4997,6 +5185,13 @@
             <reference ref="name_operator" />
             <combo key="leisure" text="Type" values="stadium,pitch,sports_centre" />
         </item> <!-- Beach Volleyball -->
+            <item name="Billiards" icon="styles/standard/sport/billiards.svg" type="node,closedway" preset_name_label="true">
+            <link href="http://wiki.openstreetmap.org/wiki/Tag:sport=billiards" />
+            <space />
+            <key key="sport" value="billiards" />
+            <reference ref="name_operator" />
+            <combo key="leisure" text="Type" values="stadium,pitch,sports_centre" />
+        </item> <!-- Billiards -->
         <item name="Golf" icon="styles/standard/sport/golf.svg" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:sport=golf"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:sport=golf"
@@ -5025,26 +5220,26 @@
             <key key="sport" value="cricket" />
             <reference ref="name_leisure_pitch" />
         </item> <!-- Cricket -->
-        <item name="Cricket Nets" icon="styles/standard/sport/cricket.png" type="node,closedway" preset_name_label="true">
-            <link href="http://wiki.openstreetmap.org/wiki/Tag:sport=cricket_nets" />
-            <space />
-            <key key="sport" value="cricket_nets" />
-            <text key="name" text="Name" />
-            <combo key="leisure" text="Type" values="pitch,sports_centre,stadium" />
-        </item> <!-- Cricket Nets -->
         <item name="Croquet" icon="styles/standard/sport/croquet.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:sport=croquet" />
             <space />
             <key key="sport" value="croquet" />
             <reference ref="name_leisure_pitch" />
         </item> <!-- Croquet -->
-        <item name="Hockey" icon="presets/Hockey.png" type="node,closedway" preset_name_label="true">
-            <link href="http://wiki.openstreetmap.org/wiki/Tag:sport=hockey" />
+        <item name="Field Hockey" icon="presets/field_hockey.png" type="node,closedway" preset_name_label="true">
+            <link href="http://wiki.openstreetmap.org/wiki/Tag:sport=field_hockey" />
+            <space />
+            <key key="sport" value="field_hockey" />
+            <text key="name" text="Name" />
+            <combo key="leisure" text="Type" values="pitch,sports_centre,stadium" />
+        </item> <!-- Field Hockey -->
+        <item name="Ice Hockey" icon="presets/ice_hockey.png" type="node,closedway" preset_name_label="true">
+            <link href="http://wiki.openstreetmap.org/wiki/Tag:sport=ice_hockey" />
             <space />
-            <key key="sport" value="hockey" />
+            <key key="sport" value="ice_hockey" />
             <text key="name" text="Name" />
             <combo key="leisure" text="Type" values="ice_rink,pitch,sports_centre,stadium" />
-        </item> <!-- Hockey -->
+        </item> <!-- Ice Hockey -->
         <item name="Pelota" icon="presets/pelota.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:sport=pelota"
                   uk.href="http://wiki.openstreetmap.org/wiki/Uk:Tag:sport=pelota" />
@@ -5076,14 +5271,16 @@
     </group> <!-- Sport (Ball) -->
     <group name="Motorsport" icon="presets/motorbike.png">
         <item name="Motorsport" icon="styles/standard/sport/motor.png" type="node,closedway" preset_name_label="true">
-            <link href="http://wiki.openstreetmap.org/wiki/Tag:sport=motor" />
+            <link href="http://wiki.openstreetmap.org/wiki/Tag:sport=motor"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:sport=motor" />
             <space />
             <key key="sport" value="motor" />
             <text key="name" text="Name" />
             <combo key="leisure" text="Type" values="pitch,sports_centre,stadium,track" values_context="racing" />
         </item> <!-- Motorsport -->
         <item name="Kart Racing" icon="presets/karting.png" type="node,closedway" preset_name_label="true">
-            <link href="http://wiki.openstreetmap.org/wiki/Tag:sport=karting" />
+            <link href="http://wiki.openstreetmap.org/wiki/Tag:sport=karting"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:sport=karting" />
             <space />
             <key key="sport" value="karting" />
             <text key="name" text="Name" />
@@ -5091,38 +5288,13 @@
         </item> <!-- Kart Racing -->
         <item name="Motocross" icon="styles/standard/sport/motocross.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:sport=motocross"
-                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Key:sport"
-                  de.href="http://wiki.openstreetmap.org/wiki/DE:Key:sport"
-                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Key:sport"
-                  it.href="http://wiki.openstreetmap.org/wiki/IT:Key:sport"
-                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Key:sport"
-                  pl.href="http://wiki.openstreetmap.org/wiki/Pl:Key:sport"
-                  pt.href="http://wiki.openstreetmap.org/wiki/Pt:Key:sport"
-                  pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Key:sport"
-                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Key:sport"
-                  tr.href="http://wiki.openstreetmap.org/wiki/Tr:Key:sport" />
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:sport=motocross"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:sport=motocross" />
             <space />
             <key key="sport" value="motocross" />
             <text key="name" text="Name" />
             <combo key="leisure" text="Type" values="pitch,sports_centre,track" values_context="racing" />
         </item> <!-- Motocross -->
-        <item name="Safety Training" icon="presets/safety_training.png" type="node,closedway" preset_name_label="true">
-            <link href="http://wiki.openstreetmap.org/wiki/Tag:sport=safety_training"
-                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Key:sport"
-                  de.href="http://wiki.openstreetmap.org/wiki/DE:Key:sport"
-                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Key:sport"
-                  it.href="http://wiki.openstreetmap.org/wiki/IT:Key:sport"
-                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Key:sport"
-                  pl.href="http://wiki.openstreetmap.org/wiki/Pl:Key:sport"
-                  pt.href="http://wiki.openstreetmap.org/wiki/Pt:Key:sport"
-                  pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Key:sport"
-                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Key:sport"
-                  tr.href="http://wiki.openstreetmap.org/wiki/Tr:Key:sport" />
-            <space />
-            <key key="sport" value="safety_training" />
-            <text key="name" text="Name" />
-            <combo key="leisure" text="Type" values="pitch,sports_centre,track" values_context="racing" />
-        </item> <!-- Safety Training -->
         <separator/>
         <item name="Model Aerodrome" icon="presets/plane.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:sport=model_aerodrome" />
@@ -5148,18 +5320,6 @@
             <text key="name" text="Name" />
             <combo key="leisure" text="Type" values="pitch,sports_centre,track" values_context="racing" />
         </item> <!-- RC Car -->
-        <item name="Raceway" icon="styles/standard/sport/raceway.svg" type="way,closedway" preset_name_label="true">
-            <link href="http://wiki.openstreetmap.org/wiki/Tag:highway=raceway"
-                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:highway=raceway"
-                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:highway=raceway"
-                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:highway=raceway"
-                  pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:highway=raceway"
-                  pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:highway=raceway"
-                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:highway=raceway" />
-            <space />
-            <key key="highway" value="raceway" />
-            <text key="name" text="Name" />
-        </item> <!-- Raceway -->
     </group> <!-- Motorsport -->
   </group> <!-- Sports -->
   <group name="Man Made" icon="presets/works.png">
@@ -5180,7 +5340,7 @@
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Key:building"
                   uk.href="http://wiki.openstreetmap.org/wiki/Uk:Key:building" />
             <space />
-            <combo key="building" text="Building" values="yes,roof,garage,garages,industrial,school,hangar,commercial,barn,farm_auxiliary,transportation,greenhouse,office,university,hospital,warehouse,retail,shed,storage_tank,cowshed,construction" values_context="building" default="yes" match="keyvalue!" values_searchable="true" />
+            <combo key="building" text="Building" values="yes,roof,garage,garages,industrial,school,hangar,commercial,barn,farm_auxiliary,transportation,greenhouse,office,university,hospital,warehouse,retail,shed,storage_tank,supermarket,gasometer,cowshed,construction" values_context="building" default="yes" match="keyvalue!" values_searchable="true" />
             <text key="name" text="Name" />
             <combo key="building:levels" text="Levels" values="1,2,3,4,5,6,7,8,9,10,11" text_context="building" />
             <text key="height" text="Height (meters)" />
@@ -5214,7 +5374,7 @@
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Key:building:part"
                   zh_CN.href="http://wiki.openstreetmap.org/wiki/Zh-hans:Key:building:part" />
             <space />
-            <combo key="building:part" text="Building part" values="yes,roof,garage,garages,industrial,school,hangar,commercial,barn,farm_auxiliary,transportation,greenhouse,office,university,hospital,warehouse,retail,shed,cowshed,construction" values_context="building" default="yes" match="keyvalue!" values_searchable="true" />
+            <combo key="building:part" text="Building part" values="yes,roof,garage,garages,industrial,school,hangar,commercial,barn,farm_auxiliary,transportation,greenhouse,office,university,hospital,warehouse,retail,shed,supermarket,cowshed,construction" values_context="building" default="yes" match="keyvalue!" values_searchable="true" />
             <text key="name" text="Name" />
             <combo key="building:levels" text="Levels" values="1,2,3,4,5,6,7,8,9,10,11" text_context="building" />
             <combo key="building:min_level" text="Skipped Levels" values="1,2,3,4,5,6,7,8,9,10" text_context="building" />
@@ -5240,6 +5400,7 @@
         </item> <!-- Entrance -->
         <item name="Tower" icon="styles/standard/misc/landmark/tower.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:man_made=tower"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:man_made=tower"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:man_made=tower"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:man_made=tower"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:man_made=tower"
@@ -5257,6 +5418,7 @@
         </item> <!-- Tower -->
         <item name="Flagpole" icon="presets/flag.png" type="node" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:man_made=flagpole"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:man_made=flagpole"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:man_made=flagpole"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:man_made=flagpole"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:man_made=flagpole" />
@@ -5265,6 +5427,7 @@
         <separator/>
         <item name="Works" icon="styles/standard/misc/landmark/works.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:man_made=works"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:man_made=works"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:man_made=works"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:man_made=works"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:man_made=works"
@@ -5276,7 +5439,9 @@
         </item> <!-- Works -->
         <item name="Chimney" icon="presets/chimney.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:man_made=chimney"
-                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:man_made=chimney" />
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:man_made=chimney"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:man_made=chimney"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:man_made=chimney" />
             <space />
             <key key="man_made" value="chimney" />
             <reference ref="name_operator" />
@@ -5284,6 +5449,7 @@
         </item> <!-- Chimney -->
         <item name="Windmill" icon="styles/standard/misc/landmark/windmill.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:man_made=windmill"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:man_made=windmill"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:man_made=windmill"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:man_made=windmill"
                   nl.href="http://wiki.openstreetmap.org/wiki/NL:Tag:man_made=windmill"
@@ -5296,30 +5462,43 @@
         </item> <!-- Windmill -->
         <item name="Gasometer" icon="presets/gasometer.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:man_made=gasometer"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:man_made=gasometer"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:man_made=gasometer" />
             <space />
             <key key="man_made" value="gasometer" />
-            <text key="name" text="Name" />
+            <optional>
+                <reference ref="name_operator" />
+                <combo key="building" text="Building" values="gasometer" values_context="building" />
+                <text key="height" text="Height (meters)" length="7" />
+            </optional>
         </item> <!-- Gasometer -->
         <item name="Storage Tank" icon="presets/storage_tank.png" type="node,closedway">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:man_made=storage_tank"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:man_made=storage_tank"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:man_made=storage_tank"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:man_made=storage_tank" />
             <key key="man_made" value="storage_tank" />
-            <combo key="building" text="Building" values="storage_tank" values_context="building" />
-            <combo key="content"  text="Content" values="fuel,manure,oil,sewage,silage,slurry,water,wine" values_context="content" />
-            <text key="operator" text="Operator" />
-            <text key="height" text="Height (meters)" length="7" />
+            <optional>
+                <reference ref="name_operator" />
+                <combo key="building" text="Building" values="storage_tank" values_context="building" />
+                <combo key="content"  text="Content" values="fuel,manure,oil,sewage,silage,slurry,water,wine" values_context="content" />
+                <text key="height" text="Height (meters)" length="7" />
+            </optional>
         </item> <!-- Storage Tank -->
         <item name="Bunker Silo" icon="styles/standard/bunker_silo.svg" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:man_made=bunker_silo"
-                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:man_made=bunker_silo" />
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:man_made=bunker_silo"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:man_made=bunker_silo"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:man_made=bunker_silo" />
             <space />
             <key key="man_made" value="bunker_silo" />
-            <text key="name" text="Name" />
+            <optional>
+                <reference ref="name_operator" />
+            </optional>
         </item> <!-- Bunker Silo -->
         <item name="Pipeline" icon="presets/path.png" type="way" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:man_made=pipeline"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:man_made=pipeline"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:man_made=pipeline"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:man_made=pipeline"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:man_made=pipeline" />
@@ -5331,6 +5510,7 @@
         </item> <!-- Pipeline -->
         <item name="Crane" icon="presets/crane.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:man_made=crane"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:man_made=crane"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:man_made=crane"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:man_made=crane"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:man_made=crane"
@@ -5375,6 +5555,7 @@
         </item> <!-- Adit -->
         <item name="Embankment" icon="presets/cliff.png" type="way" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:man_made=embankment"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:man_made=embankment"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:man_made=embankment"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:man_made=embankment"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:man_made=embankment"
@@ -5383,19 +5564,26 @@
             <key key="man_made" value="embankment" />
         </item> <!-- Embankment -->
         <separator/>
-        <item name="Water Tower" icon="styles/standard/misc/landmark/water_tower.png" type="node,closedway" preset_name_label="true">
+        <item name="Water Tower" icon="styles/standard/misc/landmark/water_tower.svg" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:man_made=water_tower"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:man_made=water_tower"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:man_made=water_tower"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:man_made=water_tower"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:man_made=water_tower"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:man_made=water_tower"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:man_made=water_tower" />
             <space />
             <key key="man_made" value="water_tower" />
-            <text key="name" text="Name" />
+             <optional>
+                <reference ref="name_operator" />
+                <text key="height" text="Height (meters)" length="7" />
+            </optional>
         </item> <!-- Water Tower -->
         <item name="Water Works" icon="presets/water_works.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:man_made=water_works"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:man_made=water_works"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:man_made=water_works"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:man_made=water_works"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:man_made=water_works"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:man_made=water_works"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:man_made=water_works" />
@@ -5405,7 +5593,9 @@
         </item> <!-- Water Works -->
         <item name="Wastewater Treatment Plant" icon="presets/wastewater_plant.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:man_made=wastewater_plant"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:man_made=wastewater_plant"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:man_made=wastewater_plant"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:man_made=wastewater_plant"
                   fi.href="http://wiki.openstreetmap.org/wiki/Fi:Tag:man_made=wastewater_plant"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:man_made=wastewater_plant"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:man_made=wastewater_plant"
@@ -5417,9 +5607,11 @@
         </item> <!-- Wastewater Treatment Plant -->
         <item name="Watermill" icon="styles/standard/misc/landmark/watermill.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:man_made=watermill"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:man_made=watermill"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:man_made=watermill"
                   fi.href="http://wiki.openstreetmap.org/wiki/Fi:Tag:man_made=watermill"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:man_made=watermill"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:man_made=watermill"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:man_made=watermill"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:man_made=watermill"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:man_made=watermill" />
@@ -5443,7 +5635,9 @@
         </item> <!-- Fountain -->
         <item name="Water Well" icon="presets/water_well.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:man_made=water_well"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:man_made=water_well"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:man_made=water_well"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:man_made=water_well"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:man_made=water_well"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:man_made=water_well"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:man_made=water_well"
@@ -5456,6 +5650,7 @@
         <separator/>
         <item name="Lighthouse" icon="styles/standard/misc/landmark/lighthouse.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:man_made=lighthouse"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:man_made=lighthouse"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:man_made=lighthouse"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:man_made=lighthouse"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:man_made=lighthouse"
@@ -5483,7 +5678,9 @@
         </item> <!-- Street Lamp -->
         <item name="Monitoring Station" icon="presets/monitoring_station.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:man_made=monitoring_station"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:man_made=monitoring_station"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:man_made=monitoring_station"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:man_made=monitoring_station"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:man_made=monitoring_station"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:man_made=monitoring_station"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:man_made=monitoring_station" />
@@ -5519,6 +5716,7 @@
         </item> <!-- Monitoring Station -->
         <item name="Survey Point" icon="styles/standard/misc/landmark/survey_point.png" type="node" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:man_made=survey_point"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:man_made=survey_point"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:man_made=survey_point"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:man_made=survey_point"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:man_made=survey_point"
@@ -5529,6 +5727,7 @@
         </item> <!-- Survey Point -->
         <item name="Surveillance Camera" icon="presets/surveillance.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:man_made=surveillance"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:man_made=surveillance"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:man_made=surveillance"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:man_made=surveillance"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:man_made=surveillance"
@@ -5559,6 +5758,7 @@
     <group name="Bridges" icon="presets/bridge.png">
         <item name="Bridge" icon="presets/bridge.png" type="way,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Key:bridge"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Key:bridge"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Key:bridge"
                   fi.href="http://wiki.openstreetmap.org/wiki/Fi:Key:bridge"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Key:bridge"
@@ -5590,6 +5790,7 @@
         </item> <!-- Bridge Support -->
         <item name="Bridge outline" icon="presets/bridge.png" type="closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:man_made=bridge"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:man_made=bridge"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:man_made=bridge" />
             <space />
             <key key="man_made" value="bridge" />
@@ -5907,6 +6108,7 @@
                   fi.href="http://wiki.openstreetmap.org/wiki/Fi:Tag:power=tower"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:power=tower"
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:power=tower"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:power=tower"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:power=tower"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:power=tower"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:power=tower" />
@@ -5933,6 +6135,7 @@
                   fi.href="http://wiki.openstreetmap.org/wiki/Fi:Tag:power=pole"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:power=pole"
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:power=pole"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:power=pole"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:power=pole"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:power=pole" />
             <space />
@@ -6142,8 +6345,8 @@
     </group> <!-- Historic Places -->
   </group> <!-- Man Made -->
   <group name="Shops" icon="styles/standard/shop/mall.png">
-    <group name="Food" icon="styles/standard/shop/supermarket.png">
-        <item name="Supermarket" icon="styles/standard/shop/supermarket.png" type="node,closedway" preset_name_label="true">
+    <group name="Food" icon="styles/standard/shop/supermarket.svg">
+        <item name="Supermarket" icon="styles/standard/shop/supermarket.svg" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=supermarket"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=supermarket"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:shop=supermarket"
@@ -6177,6 +6380,7 @@
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:shop=kiosk"
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:shop=kiosk"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:shop=kiosk"
+                  pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:shop=kiosk"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:shop=kiosk"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:shop=kiosk" />
             <space />
@@ -6209,6 +6413,7 @@
                   fi.href="http://wiki.openstreetmap.org/wiki/Fi:Tag:shop=butcher"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:shop=butcher"
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:shop=butcher"
+                  pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:shop=butcher"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:shop=butcher"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:shop=butcher" />
             <space />
@@ -6338,6 +6543,7 @@
         <separator/>
         <item name="Alcohol" icon="styles/standard/shop/alcohol.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=alcohol"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=alcohol"
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:shop=alcohol"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:shop=alcohol"
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:shop=alcohol"
@@ -6378,6 +6584,7 @@
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:shop=clothes"
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:shop=clothes"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:shop=clothes"
+                  pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:shop=clothes"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:shop=clothes"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:shop=clothes" />
             <space />
@@ -6423,6 +6630,7 @@
         </item> <!-- Outdoor -->
         <item name="Sports" icon="styles/standard/sport/multi.png" type="node,closedway" preset_name_label="true">
              <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=sports"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=sports"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:shop=sports"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:shop=sports" />
             <space />
@@ -6435,6 +6643,7 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=dry_cleaning"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=dry_cleaning"
                   fi.href="http://wiki.openstreetmap.org/wiki/Fi:Tag:shop=dry_cleaning"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:shop=dry_cleaning"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:shop=dry_cleaning"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:shop=dry_cleaning" />
             <space />
@@ -6495,6 +6704,7 @@
         </item> <!-- Computer -->
         <item name="Mobile Phone" icon="presets/mobile_phone.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=mobile_phone"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=mobile_phone"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:shop=mobile_phone"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:shop=mobile_phone" />
             <space />
@@ -6513,6 +6723,7 @@
         </item> <!-- Vacuum Cleaner -->
         <item name="Hifi" icon="styles/standard/shop/hifi.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=hifi"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=hifi"
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:shop=hifi"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:shop=hifi"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:shop=hifi" />
@@ -6539,7 +6750,9 @@
             <reference ref="link_contact_address_payment" />
         </item> <!-- Video Games -->
         <item name="Music" icon="styles/standard/shop/music.svg" type="node,closedway" preset_name_label="true">
-            <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=music" />
+            <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=music"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=music"
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:shop=music" />
             <space />
             <key key="shop" value="music" />
             <reference ref="name_oh_wheelchair" />
@@ -6651,6 +6864,7 @@
         </item> <!-- Art -->
         <item name="Frame" icon="presets/frame.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=frame"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=frame"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:shop=frame"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:shop=frame"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:shop=frame" />
@@ -6681,6 +6895,7 @@
         </item> <!-- Interior Decoration -->
         <item name="Antiques" icon="styles/standard/shop/antique.svg" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=antiques"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:shop=antiques"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:shop=antiques"
                   uk.href="http://wiki.openstreetmap.org/wiki/Uk:Tag:shop=antiques" />
             <space />
@@ -6725,7 +6940,7 @@
             <combo key="second_hand" text="Second hand" values="only,yes,no" />
             <reference ref="link_contact_address_payment" />
         </item> <!-- Book Store -->
-        <item name="Newspaper Stand" icon="presets/kiosk.png" type="node,closedway" preset_name_label="true">
+        <item name="Newspaper Stand" icon="styles/standard/shop/news.svg" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=newsagent"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=newsagent"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:shop=newsagent"
@@ -6739,6 +6954,8 @@
         </item> <!-- Newspaper Stand -->
         <item name="Ticket" icon="styles/standard/shop/ticket.svg" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=ticket"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=ticket"
+                  pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:shop=ticket"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:shop=ticket" />
             <space />
             <key key="shop" value="ticket" />
@@ -6764,6 +6981,7 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=mall"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=mall"
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:shop=mall"
+                  pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:shop=mall"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:shop=mall"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:shop=mall" />
             <space />
@@ -6800,6 +7018,7 @@
         </item> <!-- Hairdresser/Barber -->
         <item name="Beauty" icon="styles/standard/shop/beauty.svg" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=beauty"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=beauty"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:shop=beauty"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:shop=beauty"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:shop=beauty"
@@ -6820,11 +7039,12 @@
             <reference ref="name_oh_wheelchair" />
             <reference ref="link_contact_address_payment" />
         </item> <!-- Tattoo -->
-        <item name="Optician" icon="styles/standard/shop/optician.png" type="node,closedway" preset_name_label="true">
+        <item name="Optician" icon="styles/standard/shop/optician.svg" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=optician"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=optician"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:shop=optician"
-                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:shop=optician" />
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:shop=optician"
+                  uk.href="http://wiki.openstreetmap.org/wiki/Uk:Tag:shop=optician" />
             <space />
             <key key="shop" value="optician" />
             <reference ref="name_oh_wheelchair" />
@@ -6879,6 +7099,7 @@
         </item> <!-- Gift/Souvenir -->
         <item name="Erotic" icon="presets/erotic.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=erotic"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=erotic"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:shop=erotic"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:shop=erotic" />
             <space />
@@ -6892,6 +7113,7 @@
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=florist"
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:shop=florist"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:shop=florist"
+                  pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:shop=florist"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:shop=florist"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:shop=florist" />
             <space />
@@ -6918,6 +7140,7 @@
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=doityourself"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:shop=doityourself"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:shop=doityourself"
+                  pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:shop=doityourself"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:shop=doityourself"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:shop=doityourself" />
             <space />
@@ -6949,6 +7172,7 @@
         <separator/>
         <item name="Travel Agency" icon="presets/travel.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=travel_agency"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=travel_agency"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:shop=travel_agency"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:shop=travel_agency" />
             <space />
@@ -6958,6 +7182,7 @@
         </item> <!-- Travel Agency -->
         <item name="Musical Instrument" icon="presets/musical_instrument.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:shop=musical_instrument"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:shop=musical_instrument"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:shop=musical_instrument"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:shop=musical_instrument" />
             <space />
@@ -7060,54 +7285,54 @@
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Key:payment"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Key:payment" />
         <space />
-        <combo key="payment:cash" text="Cash" values="yes,no" />
+        <combo key="payment:cash" text="Cash" values="yes,no" match="keyvalue" />
         <checkgroup columns="4">
-            <check key="payment:coins" text="Coins" />
-            <check key="payment:notes" text="Notes" text_context="payment" />
+            <check key="payment:coins" text="Coins" match="keyvalue" />
+            <check key="payment:notes" text="Notes" text_context="payment" match="keyvalue" />
         </checkgroup>
         <space />
-        <combo key="payment:debit_cards" text="Debit cards" values="no" />
+        <combo key="payment:debit_cards" text="Debit cards" values="no" match="keyvalue" />
         <checkgroup columns="4">
-            <check key="payment:bankaxess" text="BankAxess" />
-            <check key="payment:bancomat" text="Bancomat" />
-            <check key="payment:girocard" text="Girocard" />
-            <check key="payment:laser" text="Laser" />
-            <check key="payment:maestro" text="Maestro" />
-            <check key="payment:visa_debit" text="Visa Debit" />
-            <check key="payment:visa_electron" text="Visa Electron" />
+            <check key="payment:bankaxess" text="BankAxess" match="keyvalue" />
+            <check key="payment:bancomat" text="Bancomat" match="keyvalue" />
+            <check key="payment:girocard" text="Girocard" match="keyvalue" />
+            <check key="payment:laser" text="Laser" match="keyvalue" />
+            <check key="payment:maestro" text="Maestro" match="keyvalue" />
+            <check key="payment:visa_debit" text="Visa Debit" match="keyvalue" />
+            <check key="payment:visa_electron" text="Visa Electron" match="keyvalue" />
         </checkgroup>
         <space />
-        <combo key="payment:credit_cards" text="Credit cards" values="no" />
+        <combo key="payment:credit_cards" text="Credit cards" values="no" match="keyvalue" />
         <checkgroup columns="4">
-            <check key="payment:american_express" text="American Express" />
-            <check key="payment:diners_club" text="Diners Club" />
-            <check key="payment:discover_card" text="Discover Card" />
-            <check key="payment:jcb" text="JCB" />
-            <check key="payment:mastercard" text="Mastercard" />
-            <check key="payment:visa" text="Visa" />
+            <check key="payment:american_express" text="American Express" match="keyvalue" />
+            <check key="payment:diners_club" text="Diners Club" match="keyvalue" />
+            <check key="payment:discover_card" text="Discover Card" match="keyvalue" />
+            <check key="payment:jcb" text="JCB" match="keyvalue" />
+            <check key="payment:mastercard" text="Mastercard" match="keyvalue" />
+            <check key="payment:visa" text="Visa" match="keyvalue" />
         </checkgroup>
         <space />
-        <combo key="payment:electronic_purses" text="Electronic purses and Charge cards" values="no" />
+        <combo key="payment:electronic_purses" text="Electronic purses and Charge cards" values="no" match="keyvalue" />
         <checkgroup columns="4">
-            <check key="payment:ep_avant" text="Avant (fi)" />
-            <check key="payment:ep_cash" text="Cash (ch)" />
-            <check key="payment:ep_chipknip" text="Chipknip (nl)" />
-            <check key="payment:ep_geldkarte" text="Geldkarte (de)" />
-            <check key="payment:ep_mep" text="Mep (pt)" />
-            <check key="payment:ep_minicash" text="Minicash (lu)" />
-            <check key="payment:ep_minipay" text="Minipay (it)" />
-            <check key="payment:ep_monedero" text="Mondero (ar)" />
-            <check key="payment:ep_monedero4b" text="Mondero 4b (es)" />
-            <check key="payment:ep_moneo" text="Moneo (fr)" />
-            <check key="payment:ep_proton" text="Proton (be)" />
-            <check key="payment:ep_quick" text="Quick (au)" />
+            <check key="payment:ep_avant" text="Avant (fi)" match="keyvalue" />
+            <check key="payment:ep_cash" text="Cash (ch)" match="keyvalue" />
+            <check key="payment:ep_chipknip" text="Chipknip (nl)" match="keyvalue" />
+            <check key="payment:ep_geldkarte" text="Geldkarte (de)" match="keyvalue" />
+            <check key="payment:ep_mep" text="Mep (pt)" match="keyvalue" />
+            <check key="payment:ep_minicash" text="Minicash (lu)" match="keyvalue" />
+            <check key="payment:ep_minipay" text="Minipay (it)" match="keyvalue" />
+            <check key="payment:ep_monedero" text="Mondero (ar)" match="keyvalue" />
+            <check key="payment:ep_monedero4b" text="Mondero 4b (es)" match="keyvalue" />
+            <check key="payment:ep_moneo" text="Moneo (fr)" match="keyvalue" />
+            <check key="payment:ep_proton" text="Proton (be)" match="keyvalue" />
+            <check key="payment:ep_quick" text="Quick (au)" match="keyvalue" />
         </checkgroup>
         <space />
-        <combo key="payment:cryptocurrencies" text="Cryptocurrencies" values="no" />
+        <combo key="payment:cryptocurrencies" text="Cryptocurrencies" values="no" match="keyvalue" />
         <checkgroup columns="4">
-            <check key="payment:bitcoin" text="Bitcoin" />
-            <check key="payment:dogecoin" text="Dogecoin" />
-            <check key="payment:litecoin" text="Litecoin" />
+            <check key="payment:bitcoin" text="Bitcoin" match="keyvalue" />
+            <check key="payment:dogecoin" text="Dogecoin" match="keyvalue" />
+            <check key="payment:litecoin" text="Litecoin" match="keyvalue" />
         </checkgroup>
     </item> <!-- Payment Methods -->
   </group> <!-- Shops -->
@@ -7129,6 +7354,7 @@
         </item> <!-- Administrative -->
         <item name="Political" icon="presets/boundaries.png" type="closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:boundary=political"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:boundary=political"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:boundary=political"
                   uk.href="http://wiki.openstreetmap.org/wiki/Uk:Tag:boundary=political" />
             <space />
@@ -7299,6 +7525,7 @@
         <item name="Suburb" icon="styles/standard/place/settlement/suburb.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:place=suburb"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:place=suburb"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:place=suburb"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:place=suburb"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:place=suburb"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:place=suburb"
@@ -7352,6 +7579,7 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:natural=peak"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:natural=peak"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:natural=peak"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:natural=peak"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:natural=peak"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:natural=peak"
                   zh_TW.href="http://wiki.openstreetmap.org/wiki/Zh-hant:Tag:natural=peak" />
@@ -7366,6 +7594,7 @@
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:natural=saddle"
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:natural=saddle"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:natural=saddle"
+                  pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:natural=saddle"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:natural=saddle" />
             <label text="A saddle point between mountains or hills." />
             <space/>
@@ -7389,6 +7618,7 @@
         <item name="Volcano" icon="presets/volcano.png" type="node" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:natural=volcano"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:natural=volcano"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:natural=volcano"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:natural=volcano"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:natural=volcano"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:natural=volcano" />
@@ -7406,6 +7636,7 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:natural=ridge"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:natural=ridge"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:natural=ridge"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:natural=ridge"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:natural=ridge"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:natural=ridge"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:natural=ridge" />
@@ -7417,6 +7648,8 @@
         </item> <!-- Ridge -->
         <item name="Valley" icon="presets/valley.svg" type="way,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:natural=valley"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:natural=valley"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:natural=valley"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:natural=valley" />
             <label text="A low area between hills." />
             <space />
@@ -7443,6 +7676,7 @@
         <item name="Island" icon="presets/island.png" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:place=island"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:place=island"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:place=island"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:place=island"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:place=island"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:place=island" />
@@ -7464,6 +7698,7 @@
     <group name="Nature" icon="styles/standard/misc/landmark/trees.png">
         <item name="Tree" icon="styles/standard/misc/landmark/trees.png" type="node" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:natural=tree"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:natural=tree"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:natural=tree"
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:natural=tree"
                   fi.href="http://wiki.openstreetmap.org/wiki/Fi:Tag:natural=tree"
@@ -7506,6 +7741,7 @@
         </item> <!-- Tree Row -->
         <item name="Wood" icon="styles/standard/misc/landmark/forest.svg" type="closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:natural=wood"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:natural=wood"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:natural=wood"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:natural=wood"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:natural=wood"
@@ -7520,6 +7756,7 @@
         </item> <!-- Wood -->
         <item name="Forest" icon="styles/standard/misc/landmark/forest.svg" type="closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=forest"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:landuse=forest"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:landuse=forest"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:landuse=forest"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:landuse=forest"
@@ -7534,6 +7771,7 @@
         </item> <!-- Forest -->
         <item name="Cutline" icon="styles/standard/misc/landmark/cutline.svg" type="way" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:man_made=cutline"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:man_made=cutline"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:man_made=cutline"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:man_made=cutline"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:man_made=cutline"
@@ -7547,6 +7785,7 @@
         <item name="Grassland" icon="styles/standard/misc/landuse/meadow.svg" type="closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:natural=grassland"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:natural=grassland"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:natural=grassland"
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:natural=grassland"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:natural=grassland"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:natural=grassland"
@@ -7599,6 +7838,7 @@
         <item name="Scrub" icon="presets/scrub.svg" type="closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:natural=scrub"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:natural=scrub"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:natural=scrub"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:natural=scrub"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:natural=scrub"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:natural=scrub"
@@ -7616,6 +7856,7 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:natural=heath"
                   bg.href="http://wiki.openstreetmap.org/wiki/Bg:Tag:natural=heath"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:natural=heath"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:natural=heath"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:natural=heath"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:natural=heath"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:natural=heath"
@@ -7637,8 +7878,10 @@
         </item> <!-- Sand -->
         <item name="Bare Rock" icon="presets/empty.png" type="closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:natural=bare_rock"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:natural=bare_rock"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:natural=bare_rock"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:natural=bare_rock"
+                  it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:natural=bare_rock"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:natural=bare_rock"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:natural=bare_rock"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:natural=bare_rock"
@@ -7651,6 +7894,7 @@
         <item name="Rock" icon="styles/standard/misc/rock.svg" type="node,closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:natural=rock"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:natural=rock"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:natural=rock"
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:natural=rock" />
             <label text="A notable rock or group of rocks, with at least one of them firmly attached to the underlying bedrock." />
             <space />
@@ -7679,6 +7923,7 @@
     <group name="Land use" icon="presets/landuse.png">
         <item name="Farmyard" icon="styles/standard/misc/landuse/farmyard.png" type="closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=farmyard"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:landuse=farmyard"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:landuse=farmyard"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:landuse=farmyard"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:landuse=farmyard"
@@ -7691,6 +7936,7 @@
         <item name="Farmland" icon="styles/standard/misc/landuse/farmland.png" type="closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=farmland"
                   ca.href="http://wiki.openstreetmap.org/wiki/Ca:Tag:landuse=farmland"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:landuse=farmland"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:landuse=farmland"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:landuse=farmland"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:landuse=farmland"
@@ -7702,7 +7948,9 @@
         </item> <!-- Farmland -->
         <item name="Meadow" icon="styles/standard/misc/landuse/meadow.svg" type="closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=meadow"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:landuse=meadow"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:landuse=meadow"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:landuse=meadow"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:landuse=meadow"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:landuse=meadow"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:landuse=meadow"
@@ -7713,6 +7961,7 @@
         </item> <!-- Meadow -->
         <item name="Orchard" icon="styles/standard/misc/landuse/orchard.svg" type="closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=orchard"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:landuse=orchard"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:landuse=orchard"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:landuse=orchard"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:landuse=orchard"
@@ -7724,6 +7973,7 @@
         </item> <!-- Orchard -->
         <item name="Vineyard" icon="presets/fruits.png" type="closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=vineyard"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:landuse=vineyard"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:landuse=vineyard"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:landuse=vineyard"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:landuse=vineyard" />
@@ -7733,7 +7983,10 @@
         </item> <!-- Vineyard -->
         <item name="Greenhouse Horticulture" icon="presets/greenhouse_horticulture.png" type="closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=greenhouse_horticulture"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:landuse=greenhouse_horticulture"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:landuse=greenhouse_horticulture"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:landuse=greenhouse_horticulture"
+                  it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:landuse=greenhouse_horticulture"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:landuse=greenhouse_horticulture"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:landuse=greenhouse_horticulture"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:landuse=greenhouse_horticulture"
@@ -7745,6 +7998,7 @@
         </item> <!-- Greenhouse Horticulture -->
         <item name="Plant Nursery" icon="styles/standard/misc/landmark/plant.png" type="closedway" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=plant_nursery"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:landuse=plant_nursery"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:landuse=plant_nursery"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:landuse=plant_nursery"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:landuse=plant_nursery"
@@ -7775,6 +8029,7 @@
         <item name="Garden" icon="styles/standard/leisure/garden.png" type="node,closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:leisure=garden"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:leisure=garden"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:leisure=garden"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:leisure=garden"
                   pt.href="http://wiki.openstreetmap.org/wiki/Pt:Tag:leisure=garden"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:leisure=garden" />
@@ -7784,7 +8039,9 @@
         </item> <!-- Garden -->
         <item name="Grass" icon="styles/standard/misc/landuse/meadow.svg" type="closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=grass"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:landuse=grass"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:landuse=grass"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:landuse=grass"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:landuse=grass"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:landuse=grass"
                   nl.href="http://wiki.openstreetmap.org/wiki/NL:Tag:landuse=grass"
@@ -7797,12 +8054,14 @@
         </item> <!-- Grass -->
         <item name="Village Green" icon="styles/standard/leisure/common.png" type="closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=village_green"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:landuse=village_green"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:landuse=village_green"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:landuse=village_green"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:landuse=village_green"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:landuse=village_green"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:landuse=village_green"
-                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:landuse=village_green" />
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:landuse=village_green"
+                  uk.href="http://wiki.openstreetmap.org/wiki/Uk:Tag:landuse=village_green" />
             <space />
             <key key="landuse" value="village_green" />
             <text key="name" text="Name" />
@@ -7810,7 +8069,8 @@
         <item name="Common" icon="styles/standard/leisure/common.png" type="closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:leisure=common"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:leisure=common"
-                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:leisure=common" />
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:leisure=common"
+                  uk.href="http://wiki.openstreetmap.org/wiki/Uk:Tag:leisure=common" />
             <space />
             <key key="leisure" value="common" />
             <text key="name" text="Name" />
@@ -7830,6 +8090,7 @@
         </item> <!-- Park -->
         <item name="Recreation Ground" icon="styles/standard/leisure/common.png" type="closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=recreation_ground"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:landuse=recreation_ground"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:landuse=recreation_ground"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:landuse=recreation_ground"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:landuse=recreation_ground"
@@ -7842,6 +8103,7 @@
         <separator/>
         <item name="Residential Area" icon="styles/standard/misc/landmark/building.png" type="closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=residential"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:landuse=residential"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:landuse=residential"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:landuse=residential"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:landuse=residential"
@@ -7854,6 +8116,7 @@
         </item> <!-- Residential Area -->
         <item name="Graveyard" icon="presets/graveyard.png" type="node,closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:amenity=grave_yard"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:amenity=grave_yard"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:amenity=grave_yard"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:amenity=grave_yard"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:amenity=grave_yard"
@@ -7867,6 +8130,7 @@
         </item> <!-- Graveyard -->
         <item name="Cemetery" icon="presets/cemetery.png" type="closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=cemetery"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:landuse=cemetery"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:landuse=cemetery"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:landuse=cemetery"
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:landuse=cemetery"
@@ -7891,7 +8155,9 @@
         </item> <!-- Religious -->
         <item name="Retail" icon="styles/standard/shop/mall.png" type="closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=retail"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:landuse=retail"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:landuse=retail"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:landuse=retail"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:landuse=retail"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:landuse=retail"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:landuse=retail"
@@ -7902,7 +8168,9 @@
         </item> <!-- Retail -->
         <item name="Commercial" icon="styles/standard/misc/landuse/commercial.png" type="closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=commercial"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:landuse=commercial"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:landuse=commercial"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Tag:landuse=commercial"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:landuse=commercial"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:landuse=commercial"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:landuse=commercial"
@@ -7913,10 +8181,12 @@
         </item> <!-- Commercial -->
         <item name="Industrial" icon="styles/standard/misc/landmark/works.png" type="closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=industrial"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:landuse=industrial"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:landuse=industrial"
                   es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:landuse=industrial"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:landuse=industrial"
                   nl.href="http://wiki.openstreetmap.org/wiki/NL:Tag:landuse=industrial"
+                  pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:landuse=industrial"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:landuse=industrial"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:landuse=industrial" />
             <space />
@@ -7925,6 +8195,7 @@
         </item> <!-- Industrial -->
         <item name="Garages" icon="presets/garages.png" type="closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=garages"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:landuse=garages"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:landuse=garages"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:landuse=garages"
                   nl.href="http://wiki.openstreetmap.org/wiki/NL:Tag:landuse=garages"
@@ -7937,6 +8208,7 @@
         </item> <!-- Garages -->
         <item name="Railway Land" icon="presets/rail_light.png" type="closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=railway"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:landuse=railway"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:landuse=railway"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:landuse=railway"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:landuse=railway"
@@ -7948,6 +8220,7 @@
         </item> <!-- Railway Land -->
         <item name="Military" icon="presets/military.png" type="closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=military"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:landuse=military"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:landuse=military"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:landuse=military"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:landuse=military"
@@ -7959,6 +8232,7 @@
         <separator/>
         <item name="Construction Area" icon="presets/construction.png" type="closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=construction"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:landuse=construction"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:landuse=construction"
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Tag:landuse=construction"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:landuse=construction"
@@ -7973,6 +8247,7 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=brownfield"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:landuse=brownfield"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:landuse=brownfield"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:landuse=brownfield"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:landuse=brownfield"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:landuse=brownfield"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:landuse=brownfield"
@@ -7985,6 +8260,7 @@
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=greenfield"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:landuse=greenfield"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:landuse=greenfield"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Tag:landuse=greenfield"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:landuse=greenfield"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:landuse=greenfield" />
             <space />
@@ -7993,6 +8269,7 @@
         </item> <!-- Greenfield -->
         <item name="Landfill" icon="presets/landuse.png" type="closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=landfill"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:landuse=landfill"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:landuse=landfill"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:landuse=landfill"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:landuse=landfill"
@@ -8004,6 +8281,7 @@
         </item> <!-- Landfill -->
         <item name="Quarry" icon="presets/mine.png" type="closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:landuse=quarry"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Tag:landuse=quarry"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:landuse=quarry"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Tag:landuse=quarry"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Tag:landuse=quarry"
@@ -8108,12 +8386,12 @@
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Annotations"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Annotations" />
             <space />
-            <text key="phone" text="Phone Number" match="key" />
-            <text key="fax" text="Fax Number" match="key" />
-            <space />
             <text key="website" text="Website" match="key" />
             <text key="email" text="Email Address" match="key" />
             <space />
+            <text key="phone" text="Phone Number" match="key" />
+            <text key="fax" text="Fax Number" match="key" />
+            <space />
             <text key="wikipedia" text="Wikipedia" />
             <text key="image" text="Image" />
         </item> <!-- Contact (Common Schema) -->
@@ -8121,23 +8399,25 @@
             <link href="http://wiki.openstreetmap.org/wiki/Key:contact"
                   cs.href="http://wiki.openstreetmap.org/wiki/Cs:Key:contact"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Key:contact"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Key:contact"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Key:contact"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Key:contact"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Key:contact"
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Key:contact"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Key:contact" />
             <space />
-            <text key="contact:phone" text="Phone Number" match="key" />
-            <text key="contact:fax" text="Fax Number" match="key" />
-            <space />
             <text key="contact:website" text="Website" match="key" />
             <text key="contact:email" text="Email Address" match="key" />
             <space />
+            <text key="contact:phone" text="Phone Number" match="key" />
+            <text key="contact:fax" text="Fax Number" match="key" />
+            <space />
             <text key="wikipedia" text="Wikipedia" />
             <text key="image" text="Image" />
         </item> <!-- Contact (Schema with 'contact:*' Prefix) -->
         <item name="Description" icon="styles/standard/misc/description.svg" type="node,way,closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Key:description"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Key:description"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Key:description"
                   fi.href="http://wiki.openstreetmap.org/wiki/Fi:Key:description"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Key:description"
@@ -8156,13 +8436,15 @@
         </item> <!-- Description -->
         <item name="Note" icon="styles/standard/misc/note-annotation.png" name_context="the tag note=*" type="node,way,closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Key:note"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Key:note"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Key:note"
                   fi.href="http://wiki.openstreetmap.org/wiki/Fi:Key:note"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Key:note"
                   it.href="http://wiki.openstreetmap.org/wiki/IT:Key:note"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Key:note"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Key:note"
-                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Key:note" />
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Key:note"
+                  sk.href="http://wiki.openstreetmap.org/wiki/Sk:Key:note" />
             <space />
             <label text="An important hint for other mappers (not for the end user)." text_context="note=*" />
             <space />
@@ -8174,7 +8456,9 @@
         </item> <!-- Note -->
         <item name="Fixme" icon="styles/standard/misc/fixme-annotation.png" type="node,way,closedway,relation" preset_name_label="true">
             <link href="http://wiki.openstreetmap.org/wiki/Key:fixme"
+                  cs.href="http://wiki.openstreetmap.org/wiki/Cs:Key:fixme"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Key:fixme"
+                  es.href="http://wiki.openstreetmap.org/wiki/ES:Key:fixme"
                   fr.href="http://wiki.openstreetmap.org/wiki/FR:Key:fixme"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Key:fixme"
                   pl.href="http://wiki.openstreetmap.org/wiki/Pl:Key:fixme"
@@ -8301,6 +8585,7 @@
                 <link href="http://wiki.openstreetmap.org/wiki/Tag:route=bicycle"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Cycle_routes"
                   ja.href="http://wiki.openstreetmap.org/wiki/JA:Cycle_routes"
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Cycle_routes"
                   sk.href="http://wiki.openstreetmap.org/wiki/Sk:Cycle_routes"
                   uk.href="http://wiki.openstreetmap.org/wiki/Uk:Cycle_routes" />
                 <space/>
@@ -8312,7 +8597,7 @@
                     <reference ref="route_hikebike_optionals" />
                 </optional>
                 <roles>
-                    <role key="" text="route segment" requisite="required" type="way,closedway" member_expression="highway"/>
+                    <role key="" text="route segment" requisite="required" type="way,closedway" member_expression="highway|route=ferry"/>
                     <role key="forward" text="forward segment" requisite="optional" type="way,closedway" />
                     <role key="backward" text="backward segment" requisite="optional" type="way,closedway" />
                 </roles>
@@ -8334,7 +8619,7 @@
                     <reference ref="route_hikebike_optionals" />
                 </optional>
                 <roles>
-                    <role key="" text="route segment" requisite="required" type="way,closedway" member_expression="highway"/>
+                    <role key="" text="route segment" requisite="required" type="way,closedway" member_expression="highway|route=ferry"/>
                     <role key="forward" text="forward segment" requisite="optional" type="way,closedway" />
                     <role key="backward" text="backward segment" requisite="optional" type="way,closedway" />
                 </roles>
@@ -8358,7 +8643,7 @@
                     <reference ref="route_hikebike_optionals" />
                 </optional>
                 <roles>
-                    <role key="" text="route segment" requisite="required" type="way,closedway" member_expression="highway"/>
+                    <role key="" text="route segment" requisite="required" type="way,closedway" member_expression="highway|route=ferry"/>
                     <role key="" text="infrastructure" requisite="optional" type="node,closedway" member_expression="tourism OR amenity"/>
                     <role key="" text="natural" requisite="optional" type="node,closedway" member_expression="natural=peak OR natural=volcano OR mountain_pass=yes OR natural=water OR tourism=viewpoint OR amenity=drinking_water OR natural=spring OR place=locality"/>
                 </roles>
@@ -8419,7 +8704,7 @@
                     <text key="detour" text="Ref of the way this is a detour to"/>
                 </optional>
                 <roles>
-                    <role key="" text="route segment" requisite="required" type="way,closedway" member_expression="highway"/>
+                    <role key="" text="route segment" requisite="required" type="way,closedway" member_expression="highway|route=ferry"/>
                     <role key="fork" text="fork node for alternative routes" requisite="optional" type="node"/>
                 </roles>
             </item> <!-- Detour Route -->
@@ -8444,7 +8729,7 @@
                 <key key="route" value="railway"/>
                 <reference ref="name_ref_operator"/>
                 <roles>
-                    <role key="" text="route segment" requisite="required" type="way" member_expression="railway"/>
+                    <role key="" text="route segment" requisite="required" type="way" member_expression="railway|route=ferry"/>
                 </roles>
             </item> <!-- Railway Route -->
             <item name="Road Route" icon="presets/path.png" type="relation" preset_name_label="true">
@@ -8460,10 +8745,10 @@
                 <text key="operator" text="Operator" />
                 <text key="distance" text="Distance (km)"/>
                 <roles>
-                    <role key="" text="route segment" requisite="optional" type="way,closedway" member_expression="highway"/>
-                    <role key="forward" text="forward segment" requisite="optional" type="way,closedway" member_expression="highway"/>
-                    <role key="backward" text="backward segment" requisite="optional" type="way,closedway" member_expression="highway"/>
-                    <role key="link" text="link segment" requisite="optional" type="way,closedway" member_expression="highway"/>
+                    <role key="" text="route segment" requisite="optional" type="way,closedway" member_expression="highway|route=ferry"/>
+                    <role key="forward" text="forward segment" requisite="optional" type="way,closedway" member_expression="highway|route=ferry"/>
+                    <role key="backward" text="backward segment" requisite="optional" type="way,closedway" member_expression="highway|route=ferry"/>
+                    <role key="link" text="link segment" requisite="optional" type="way,closedway" member_expression="highway|route=ferry"/>
                 </roles>
             </item> <!-- Road Route -->
         </group> <!-- Routes -->
@@ -8535,7 +8820,11 @@
         </item> <!-- Destination Sign -->
         <separator/>
         <item name="Waterway" icon="presets/river.png" type="relation" preset_name_label="true">
-            <link href="http://wiki.openstreetmap.org/wiki/Relations/Proposed/Waterway" />
+            <link href="http://wiki.openstreetmap.org/wiki/Relation:waterway"
+                  de.href="http://wiki.openstreetmap.org/wiki/DE:Relation:waterway"
+                  fr.href="http://wiki.openstreetmap.org/wiki/FR:Relation:waterway"
+                  ja.href="http://wiki.openstreetmap.org/wiki/JA:Relation:waterway"
+                  ru.href="http://wiki.openstreetmap.org/wiki/RU:Relation:waterway" />
             <space />
             <key key="type" value="waterway" />
             <combo key="waterway" text="Subtype of waterway (largest one of members)" values="river,stream,canal,drain,ditch" values_searchable="true" />
diff --git a/data/maps.xsd b/data/maps.xsd
index d7b8c5d..43ca799 100644
--- a/data/maps.xsd
+++ b/data/maps.xsd
@@ -27,6 +27,7 @@
 		<xs:restriction base="xs:string">
 			<xs:enumeration value="wms" />
 			<xs:enumeration value="wms_endpoint" />
+			<xs:enumeration value="wmts" />
 			<xs:enumeration value="tms" />
 			<xs:enumeration value="html" />
 			<xs:enumeration value="bing" />
@@ -37,7 +38,7 @@
 	<xs:simpleType name="zoom">
 		<xs:restriction base="xs:integer">
 			<xs:minInclusive value="1" />
-			<xs:maxInclusive value="22" />
+			<xs:maxInclusive value="24" />
 		</xs:restriction>
 	</xs:simpleType>
 
@@ -667,9 +668,26 @@
 										<xs:element name="projections" minOccurs="0" maxOccurs="1" type="tns:projections" />
 										<xs:element name="min-zoom" minOccurs="0" maxOccurs="1" type="tns:zoom" />
 										<xs:element name="max-zoom" minOccurs="0" maxOccurs="1" type="tns:zoom" />
+										<xs:element name="tile-size" minOccurs="0" maxOccurs="1" type="xs:positiveInteger" />
 									</xs:all>
 								</xs:complexType>
 							</xs:element>
+							<!-- list of HTTP headers, that indicate "no tile at this zoom level" situation -->
+							<xs:element name="no-tile-header" minOccurs="0" maxOccurs="unbounded">
+								<xs:complexType>
+									<xs:attribute name="name" type="xs:string" />
+									<xs:attribute name="value" type="xs:string" />
+								</xs:complexType>
+							</xs:element>
+							<!-- tile size provided by imagery source. Default - 256 -->
+							<xs:element name="tile-size" minOccurs="0" maxOccurs="1" type="xs:positiveInteger" />
+							<!--  HTTP headers that contain valuable information and that will be shown on "Shown Tile Info" dialog -->
+							<xs:element name="metadata-header" minOccurs="0" maxOccurs="unbounded">
+								<xs:complexType>
+									<xs:attribute name="header-name" type="xs:string" />
+									<xs:attribute name="metadata-key" type="xs:string" />
+								</xs:complexType>
+							</xs:element>
 						</xs:choice>
 					</xs:sequence>
 					<xs:attribute name="last-check" type="xs:date" use="optional" />
diff --git a/data/overpass-turbo-ffs.js b/data/overpass-turbo-ffs.js
new file mode 100644
index 0000000..c2fa7d6
--- /dev/null
+++ b/data/overpass-turbo-ffs.js
@@ -0,0 +1 @@
+"undefined"==typeof turbo&&(turbo={}),turbo.ffs=function(){function e(e){function r(e){if(!e.logical)return[{logical:"and",queries:[e]}];if("and"===e.logical){for(var t=r(e.queries[0]),n=r(e.queries[1]),a=[],u=0;u<t.length;u++)for(var i=0;i<n.length;i++)a.push({logical:"and",queries:t[u].queries.concat(n[i].queries)});return a}if("or"===e.logical){var t=r(e.queries[0]),n=r(e.queries[1]);return[].concat(t,n)}alert("unsupported boolean operator: "+e.logical)}var t={logical:"or",queries:[]} [...]
\ No newline at end of file
diff --git a/data/projection/epsg b/data/projection/epsg
index dae53c0..523fda5 100644
--- a/data/projection/epsg
+++ b/data/projection/epsg
@@ -1,362 +1,362 @@
 # NAD27(76) / MTM zone 8
-<2017> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +bounds=-75.5,40,-74,60  <>
+<2017> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +bounds=-75.5,40,-74,60  <>
 # NAD27(76) / MTM zone 9
-<2018> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +bounds=-78.5,40,-74.5,60  <>
+<2018> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +bounds=-78.5,40,-74.5,60  <>
 # NAD27(76) / MTM zone 10
-<2019> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +bounds=-81.5,40,-77.5,60  <>
+<2019> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +bounds=-81.5,40,-77.5,60  <>
 # NAD27(76) / MTM zone 11
-<2020> +proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +bounds=-84,40,-80.5,60  <>
+<2020> +proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +bounds=-84,40,-80.5,60  <>
 # NAD27(76) / MTM zone 12
-<2021> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +bounds=-83,40,-79,60  <>
+<2021> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +bounds=-83,40,-79,60  <>
 # NAD27(76) / MTM zone 13
-<2022> +proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +bounds=-86,40,-82,60  <>
+<2022> +proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +bounds=-86,40,-82,60  <>
 # NAD27(76) / MTM zone 14
-<2023> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +bounds=-89,40,-85,60  <>
+<2023> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +bounds=-89,40,-85,60  <>
 # NAD27(76) / MTM zone 15
-<2024> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +bounds=-92,40,-88,60  <>
+<2024> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +bounds=-92,40,-88,60  <>
 # NAD27(76) / MTM zone 16
-<2025> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +bounds=-95,40,-91,60  <>
+<2025> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +bounds=-95,40,-91,60  <>
 # NAD27(76) / MTM zone 17
-<2026> +proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +bounds=-96,40,-94,60  <>
+<2026> +proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +bounds=-96,40,-94,60  <>
 # Lambert 93 (France)
-<2154> +proj=lcc +lat_0=46.5 +lat_1=44 +lat_2=49 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +nadgrids=null +bounds=-5.5,41,10.2,51  <>
+<2154> +proj=lcc +lat_0=46.5 +lat_1=44 +lat_2=49 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +nadgrids=null +units=m +bounds=-5.5,41,10.2,51  <>
 # PUWG 2000 Zone 5 (Poland)
-<2176> +proj=tmerc +lon_0=15 +k_0=0.999923 +x_0=5500000 +ellps=GRS80 +nadgrids=null +bounds=13.5,49,16.5,54.84  <>
+<2176> +proj=tmerc +lon_0=15 +k_0=0.999923 +x_0=5500000 +ellps=GRS80 +nadgrids=null +units=m +axis=neu +bounds=13.5,49,16.5,54.84  <>
 # PUWG 2000 Zone 6 (Poland)
-<2177> +proj=tmerc +lon_0=18 +k_0=0.999923 +x_0=6500000 +ellps=GRS80 +nadgrids=null +bounds=16.5,49,19.5,54.84  <>
+<2177> +proj=tmerc +lon_0=18 +k_0=0.999923 +x_0=6500000 +ellps=GRS80 +nadgrids=null +units=m +axis=neu +bounds=16.5,49,19.5,54.84  <>
 # PUWG 2000 Zone 7 (Poland)
-<2178> +proj=tmerc +lon_0=21 +k_0=0.999923 +x_0=7500000 +ellps=GRS80 +nadgrids=null +bounds=19.5,49,22.5,54.84  <>
+<2178> +proj=tmerc +lon_0=21 +k_0=0.999923 +x_0=7500000 +ellps=GRS80 +nadgrids=null +units=m +axis=neu +bounds=19.5,49,22.5,54.84  <>
 # PUWG 2000 Zone 8 (Poland)
-<2179> +proj=tmerc +lon_0=24 +k_0=0.999923 +x_0=8500000 +ellps=GRS80 +nadgrids=null +bounds=22.5,49,25.5,54.84  <>
+<2179> +proj=tmerc +lon_0=24 +k_0=0.999923 +x_0=8500000 +ellps=GRS80 +nadgrids=null +units=m +axis=neu +bounds=22.5,49,25.5,54.84  <>
 # PUWG 1992 (Poland)
-<2180> +proj=tmerc +lon_0=19 +k_0=0.9993 +x_0=500000 +y_0=-5300000 +ellps=GRS80 +nadgrids=null +bounds=14.12,49,24.15,54.84  <>
+<2180> +proj=tmerc +lon_0=19 +k_0=0.9993 +x_0=500000 +y_0=-5300000 +ellps=GRS80 +nadgrids=null +units=m +axis=neu +bounds=14.12,49,24.15,54.84  <>
 # UTM France (DOM) Fort Marigot
-<2969> +proj=tmerc +lon_0=-63 +k_0=0.9996 +x_0=500000 +ellps=intl +towgs84=136.596,248.148,-429.789 +bounds=-63.25,17.6,-62.5,18.5  <>
+<2969> +proj=utm +zone=20 +ellps=intl +towgs84=136.596,248.148,-429.789 +units=m +bounds=-63.25,17.6,-62.5,18.5  <>
 # UTM France (DOM) Sainte Anne
-<2970> +proj=tmerc +lon_0=-63 +k_0=0.9996 +x_0=500000 +ellps=intl +towgs84=-472.29,-5.63,-304.12,0.4362,-0.8374,0.2563,1.8984 +bounds=-61.9,15.8,-60.9,16.6  <>
+<2970> +proj=utm +zone=20 +ellps=intl +towgs84=-472.29,-5.63,-304.12,0.4362,-0.8374,0.2563,1.8984 +units=m +bounds=-61.9,15.8,-60.9,16.6  <>
 # UTM France (DOM) Guyane
-<2972> +proj=tmerc +lon_0=-51 +k_0=0.9996 +x_0=500000 +ellps=GRS80 +nadgrids=null +bounds=-54,2.16,-49.62,9.06  <>
+<2972> +proj=utm +zone=22 +ellps=GRS80 +nadgrids=null +units=m +bounds=-54,2.16,-49.62,9.06  <>
 # UTM France (DOM) Martinique
-<2973> +proj=tmerc +lon_0=-63 +k_0=0.9996 +x_0=500000 +ellps=intl +towgs84=126.926,547.939,130.409,-2.7867,5.16124,-0.85844,13.82265 +bounds=-61.25,14.25,-60.725,15.025  <>
+<2973> +proj=utm +zone=20 +ellps=intl +towgs84=126.926,547.939,130.409,-2.7867,5.16124,-0.85844,13.82265 +units=m +bounds=-61.25,14.25,-60.725,15.025  <>
 # UTM France (DOM) Reunion
-<2975> +proj=tmerc +lon_0=57 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=GRS80 +nadgrids=null +bounds=37.58,-25.92,58.27,-10.6  <>
+<2975> +proj=utm +zone=40 +south +ellps=GRS80 +nadgrids=null +units=m +bounds=37.58,-25.92,58.27,-10.6  <>
 # Monte Mario / Italy zone 1
-<3003> +proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=1500000 +y_0=0 +ellps=intl +bounds=5,36,13,48 <>
+<3003> +proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=1500000 +y_0=0 +ellps=intl +units=m +bounds=5,36,13,48 <>
 # Monte Mario / Italy zone 2
-<3004> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9996 +x_0=2520000 +y_0=0 +ellps=intl +bounds=11,34,24,48 <>
+<3004> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9996 +x_0=2520000 +y_0=0 +ellps=intl +units=m +bounds=11,34,24,48 <>
 # SWEREF99 13 30 / EPSG:3008 (Sweden)
-<3008> +proj=tmerc +lon_0=13.5 +x_0=150000 +ellps=GRS80 +nadgrids=null +bounds=12.1,55.2,14.65,62.26  <>
+<3008> +proj=tmerc +lon_0=13.5 +x_0=150000 +ellps=GRS80 +nadgrids=null +units=m +axis=neu +bounds=12.1,55.2,14.65,62.26  <>
 # LKS-92 (Latvia TM)
-<3059> +proj=tmerc +lon_0=24 +k_0=0.9996 +x_0=500000 +y_0=-6000000 +ellps=GRS80 +nadgrids=null +bounds=-180,-90,180,90  <>
+<3059> +proj=tmerc +lon_0=24 +k_0=0.9996 +x_0=500000 +y_0=-6000000 +ellps=GRS80 +nadgrids=null +units=m +axis=neu +bounds=-180,-90,180,90  <>
 # Lambert Zone (Estonia)
-<3301> +proj=lcc +lat_0=57.51755393055556 +lat_1=59.333333333333336 +lat_2=58 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +nadgrids=null +bounds=21.64,56.05,28.58,61.13  <>
+<3301> +proj=lcc +lat_0=57.51755393055556 +lat_1=59.333333333333336 +lat_2=58 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +nadgrids=null +units=m +axis=neu +bounds=21.64,56.05,28.58,61.13  <>
 # Belgian Lambert 2008
-<3812> +proj=lcc +lat_0=50d47'52.134" +lat_1=49d50'0" +lat_2=51d10'0" +lon_0=4d21'33.177" +x_0=649328 +y_0=665262 +ellps=GRS80 +nadgrids=null +bounds=2.54,49.51,6.4,51.5  <>
+<3812> +proj=lcc +lat_0=50d47'52.134" +lat_1=49d50'0" +lat_2=51d10'0" +lon_0=4d21'33.177" +x_0=649328 +y_0=665262 +ellps=GRS80 +nadgrids=null +units=m +bounds=2.54,49.51,6.4,51.5  <>
 # Pseudo-Mercator
-<3857> +proj=josm:smerc +ellps=WGS84 +datum=WGS84 +bounds=-180,-85.05112877980659,180,85.05112877980659  <>
+<3857> +proj=josm:smerc +datum=WGS84 +units=m +bounds=-180,-85.05112877980659,180,85.05112877980659  <>
 # Lambert CC9 (France) Zone 42
-<3942> +proj=lcc +lat_0=42 +lat_1=41.25 +lat_2=42.75 +lon_0=3 +x_0=1700000 +y_0=1200000 +ellps=GRS80 +nadgrids=null +bounds=-5.5,41,10.2,44.5  <>
+<3942> +proj=lcc +lat_0=42 +lat_1=41.25 +lat_2=42.75 +lon_0=3 +x_0=1700000 +y_0=1200000 +ellps=GRS80 +nadgrids=null +units=m +bounds=-5.5,41,10.2,44.5  <>
 # Lambert CC9 (France) Zone 43
-<3943> +proj=lcc +lat_0=43 +lat_1=42.25 +lat_2=43.75 +lon_0=3 +x_0=1700000 +y_0=2200000 +ellps=GRS80 +nadgrids=null +bounds=-5.5,41,10.2,45.5  <>
+<3943> +proj=lcc +lat_0=43 +lat_1=42.25 +lat_2=43.75 +lon_0=3 +x_0=1700000 +y_0=2200000 +ellps=GRS80 +nadgrids=null +units=m +bounds=-5.5,41,10.2,45.5  <>
 # Lambert CC9 (France) Zone 44
-<3944> +proj=lcc +lat_0=44 +lat_1=43.25 +lat_2=44.75 +lon_0=3 +x_0=1700000 +y_0=3200000 +ellps=GRS80 +nadgrids=null +bounds=-5.5,41.5,10.2,46.5  <>
+<3944> +proj=lcc +lat_0=44 +lat_1=43.25 +lat_2=44.75 +lon_0=3 +x_0=1700000 +y_0=3200000 +ellps=GRS80 +nadgrids=null +units=m +bounds=-5.5,41.5,10.2,46.5  <>
 # Lambert CC9 (France) Zone 45
-<3945> +proj=lcc +lat_0=45 +lat_1=44.25 +lat_2=45.75 +lon_0=3 +x_0=1700000 +y_0=4200000 +ellps=GRS80 +nadgrids=null +bounds=-5.5,42.5,10.2,47.5  <>
+<3945> +proj=lcc +lat_0=45 +lat_1=44.25 +lat_2=45.75 +lon_0=3 +x_0=1700000 +y_0=4200000 +ellps=GRS80 +nadgrids=null +units=m +bounds=-5.5,42.5,10.2,47.5  <>
 # Lambert CC9 (France) Zone 46
-<3946> +proj=lcc +lat_0=46 +lat_1=45.25 +lat_2=46.75 +lon_0=3 +x_0=1700000 +y_0=5200000 +ellps=GRS80 +nadgrids=null +bounds=-5.5,43.5,10.2,48.5  <>
+<3946> +proj=lcc +lat_0=46 +lat_1=45.25 +lat_2=46.75 +lon_0=3 +x_0=1700000 +y_0=5200000 +ellps=GRS80 +nadgrids=null +units=m +bounds=-5.5,43.5,10.2,48.5  <>
 # Lambert CC9 (France) Zone 47
-<3947> +proj=lcc +lat_0=47 +lat_1=46.25 +lat_2=47.75 +lon_0=3 +x_0=1700000 +y_0=6200000 +ellps=GRS80 +nadgrids=null +bounds=-5.5,44.5,10.2,49.5  <>
+<3947> +proj=lcc +lat_0=47 +lat_1=46.25 +lat_2=47.75 +lon_0=3 +x_0=1700000 +y_0=6200000 +ellps=GRS80 +nadgrids=null +units=m +bounds=-5.5,44.5,10.2,49.5  <>
 # Lambert CC9 (France) Zone 48
-<3948> +proj=lcc +lat_0=48 +lat_1=47.25 +lat_2=48.75 +lon_0=3 +x_0=1700000 +y_0=7200000 +ellps=GRS80 +nadgrids=null +bounds=-5.5,45.5,10.2,50.5  <>
+<3948> +proj=lcc +lat_0=48 +lat_1=47.25 +lat_2=48.75 +lon_0=3 +x_0=1700000 +y_0=7200000 +ellps=GRS80 +nadgrids=null +units=m +bounds=-5.5,45.5,10.2,50.5  <>
 # Lambert CC9 (France) Zone 49
-<3949> +proj=lcc +lat_0=49 +lat_1=48.25 +lat_2=49.75 +lon_0=3 +x_0=1700000 +y_0=8200000 +ellps=GRS80 +nadgrids=null +bounds=-5.5,46.5,10.2,51.1  <>
+<3949> +proj=lcc +lat_0=49 +lat_1=48.25 +lat_2=49.75 +lon_0=3 +x_0=1700000 +y_0=8200000 +ellps=GRS80 +nadgrids=null +units=m +bounds=-5.5,46.5,10.2,51.1  <>
 # Lambert CC9 (France) Zone 50
-<3950> +proj=lcc +lat_0=50 +lat_1=49.25 +lat_2=50.75 +lon_0=3 +x_0=1700000 +y_0=9200000 +ellps=GRS80 +nadgrids=null +bounds=-5.5,47.5,10.2,51.1  <>
+<3950> +proj=lcc +lat_0=50 +lat_1=49.25 +lat_2=50.75 +lon_0=3 +x_0=1700000 +y_0=9200000 +ellps=GRS80 +nadgrids=null +units=m +bounds=-5.5,47.5,10.2,51.1  <>
 # ETRS89
-<4258> +proj=lonlat +ellps=GRS80 +datum=GRS80 +bounds=-180,-90,180,90  <>
+<4258> +proj=lonlat +datum=GRS80 +axis=neu +bounds=-180,-90,180,90  <>
 # WGS 84
-<4326> +proj=lonlat +ellps=WGS84 +datum=WGS84 +bounds=-180,-90,180,90  <>
+<4326> +proj=lonlat +datum=WGS84 +axis=neu +bounds=-180,-90,180,90  <>
 # Swiss Grid (Switzerland)
-<21781> +proj=somerc +lat_0=46d57'8.66" +lon_0=7d26'22.5" +x_0=600000 +y_0=200000 +ellps=bessel +towgs84=674.374,15.056,405.346 +bounds=5.7,45.7,10.6,47.9  <>
+<21781> +proj=somerc +lat_0=46d57'8.66" +lon_0=7d26'22.5" +x_0=600000 +y_0=200000 +ellps=bessel +towgs84=674.374,15.056,405.346 +units=m +bounds=5.7,45.7,10.6,47.9  <>
 # HD72 / EOV (Hungary)
 <23700> +proj=somerc +lat_0=47.14439372222222 +lon_0=19.04857177777778 +k_0=0.99993 +x_0=650000 +y_0=200000 +ellps=GRS67 +towgs84=52.17,-71.82,-14.9 +units=m +bounds=16.1200,45.7800,22.9100,48.6000  <>
 # ETRS89 / UTM zone 28N
-<25828> +proj=tmerc +lon_0=-15 +k_0=0.9996 +x_0=500000 +ellps=GRS80 +datum=GRS80 +bounds=-20,-5,-10,85 <>
+<25828> +proj=utm +zone=28 +datum=GRS80 +units=m +bounds=-20,-5,-10,85 <>
 # ETRS89 / UTM zone 29N
-<25829> +proj=tmerc +lon_0=-9 +k_0=0.9996 +x_0=500000 +ellps=GRS80 +datum=GRS80 +bounds=-14,-5,-4,85  <>
+<25829> +proj=utm +zone=29 +datum=GRS80 +units=m +bounds=-14,-5,-4,85  <>
 # ETRS89 / UTM zone 30N
-<25830> +proj=tmerc +lon_0=-3 +k_0=0.9996 +x_0=500000 +ellps=GRS80 +datum=GRS80 +bounds=-8,-5,2,85  <>
+<25830> +proj=utm +zone=30 +datum=GRS80 +units=m +bounds=-8,-5,2,85  <>
 # ETRS89 / UTM zone 31N
-<25831> +proj=tmerc +lon_0=3 +k_0=0.9996 +x_0=500000 +ellps=GRS80 +datum=GRS80 +bounds=-2,-5,8,85  <>
+<25831> +proj=utm +zone=31 +datum=GRS80 +units=m +bounds=-2,-5,8,85  <>
 # ETRS89 / UTM zone 32N
-<25832> +proj=tmerc +lon_0=9 +k_0=0.9996 +x_0=500000 +ellps=GRS80 +datum=GRS80 +bounds=4,-5,14,85  <>
+<25832> +proj=utm +zone=32 +datum=GRS80 +units=m +bounds=4,-5,14,85  <>
 # ETRS89 / UTM zone 33N
-<25833> +proj=tmerc +lon_0=15 +k_0=0.9996 +x_0=500000 +ellps=GRS80 +datum=GRS80 +bounds=10,-5,20,85  <>
+<25833> +proj=utm +zone=33 +datum=GRS80 +units=m +bounds=10,-5,20,85  <>
 # ETRS89 / UTM zone 34N
-<25834> +proj=tmerc +lon_0=21 +k_0=0.9996 +x_0=500000 +ellps=GRS80 +datum=GRS80 +bounds=16,-5,26,85  <>
+<25834> +proj=utm +zone=34 +datum=GRS80 +units=m +bounds=16,-5,26,85  <>
 # ETRS89 / UTM zone 35N
-<25835> +proj=tmerc +lon_0=27 +k_0=0.9996 +x_0=500000 +ellps=GRS80 +datum=GRS80 +bounds=22,-5,32,85  <>
+<25835> +proj=utm +zone=35 +datum=GRS80 +units=m +bounds=22,-5,32,85  <>
 # ETRS89 / UTM zone 36N
-<25836> +proj=tmerc +lon_0=33 +k_0=0.9996 +x_0=500000 +ellps=GRS80 +datum=GRS80 +bounds=28,-5,38,85  <>
+<25836> +proj=utm +zone=36 +datum=GRS80 +units=m +bounds=28,-5,38,85  <>
 # ETRS89 / UTM zone 37N
-<25837> +proj=tmerc +lon_0=39 +k_0=0.9996 +x_0=500000 +ellps=GRS80 +datum=GRS80 +bounds=34,-5,44,85  <>
+<25837> +proj=utm +zone=37 +datum=GRS80 +units=m +bounds=34,-5,44,85  <>
 # ETRS89 / UTM zone 38N
-<25838> +proj=tmerc +lon_0=45 +k_0=0.9996 +x_0=500000 +ellps=GRS80 +datum=GRS80 +bounds=40,-5,50,85  <>
+<25838> +proj=utm +zone=38 +datum=GRS80 +units=m +bounds=40,-5,50,85  <>
 # Lambert 4 Zones France (Nord)
-<27561> +proj=lcc +lat_0=49.5 +lat_1=48d35'54.682" +lat_2=50d23'45.282" +lon_0=2d20'14.025" +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +nadgrids=ntf_r93_b.gsb +bounds=-4.416666666666665,46.65,9.18,51.300000000000004  <>
+<27561> +proj=lcc +lat_0=49.5 +lat_1=48d35'54.682" +lat_2=50d23'45.282" +lon_0=2d20'14.025" +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +nadgrids=ntf_r93_b.gsb +units=m +bounds=-4.416666666666665,46.65,9.18,51.300000000000004  <>
 # Lambert 4 Zones France (Centre)
-<27562> +proj=lcc +lat_0=46.8 +lat_1=45d53'56.108" +lat_2=47d41'45.652" +lon_0=2d20'14.025" +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +nadgrids=ntf_r93_b.gsb +bounds=-4.416666666666665,43.95,9.18,49.65  <>
+<27562> +proj=lcc +lat_0=46.8 +lat_1=45d53'56.108" +lat_2=47d41'45.652" +lon_0=2d20'14.025" +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +nadgrids=ntf_r93_b.gsb +units=m +bounds=-4.416666666666665,43.95,9.18,49.65  <>
 # Lambert 4 Zones France (South)
-<27563> +proj=lcc +lat_0=44.1 +lat_1=43d11'57.449" +lat_2=44d59'45.938" +lon_0=2d20'14.025" +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +nadgrids=ntf_r93_b.gsb +bounds=-4.416666666666665,41.49,9.18,46.95  <>
+<27563> +proj=lcc +lat_0=44.1 +lat_1=43d11'57.449" +lat_2=44d59'45.938" +lon_0=2d20'14.025" +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +nadgrids=ntf_r93_b.gsb +units=m +bounds=-4.416666666666665,41.49,9.18,46.95  <>
 # Lambert 4 Zones France (Corsica)
-<27564> +proj=lcc +lat_0=42.165 +lat_1=41d33'37.396" +lat_2=42d46'3.588" +lon_0=2d20'14.025" +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +nadgrids=ntf_r93_b.gsb +bounds=-4.416666666666665,41.49,9.18,44.267667  <>
+<27564> +proj=lcc +lat_0=42.165 +lat_1=41d33'37.396" +lat_2=42d46'3.588" +lon_0=2d20'14.025" +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +nadgrids=ntf_r93_b.gsb +units=m +bounds=-4.416666666666665,41.49,9.18,44.267667  <>
 # Belgian Lambert 1972
-<31370> +proj=lcc +lat_0=90 +lat_1=49d50'0.00204" +lat_2=51d10'0.00204" +lon_0=4d22'2.952" +x_0=150000.013 +y_0=5400088.438 +ellps=intl +towgs84=-99.06,53.32,-112.49,0.419,-0.83,1.885,-1.0 +bounds=2.54,49.51,6.4,51.5  <>
+<31370> +proj=lcc +lat_0=90 +lat_1=49d50'0.00204" +lat_2=51d10'0.00204" +lon_0=4d22'2.952" +x_0=150000.013 +y_0=5400088.438 +ellps=intl +towgs84=-99.06,53.32,-112.49,0.419,-0.83,1.885,-1.0 +units=m +bounds=2.54,49.51,6.4,51.5  <>
 # Gauß-Krüger Zone 2
-<31466> +proj=tmerc +lon_0=6 +x_0=2500000 +ellps=bessel +nadgrids=BETA2007.gsb +bounds=3.5,-5,8.5,85  <>
+<31466> +proj=tmerc +lon_0=6 +x_0=2500000 +ellps=bessel +nadgrids=BETA2007.gsb +units=m +axis=neu +bounds=3.5,-5,8.5,85  <>
 # Gauß-Krüger Zone 3
-<31467> +proj=tmerc +lon_0=9 +x_0=3500000 +ellps=bessel +nadgrids=BETA2007.gsb +bounds=6.5,-5,11.5,85  <>
+<31467> +proj=tmerc +lon_0=9 +x_0=3500000 +ellps=bessel +nadgrids=BETA2007.gsb +units=m +axis=neu +bounds=6.5,-5,11.5,85  <>
 # Gauß-Krüger Zone 4
-<31468> +proj=tmerc +lon_0=12 +x_0=4500000 +ellps=bessel +nadgrids=BETA2007.gsb +bounds=9.5,-5,14.5,85  <>
+<31468> +proj=tmerc +lon_0=12 +x_0=4500000 +ellps=bessel +nadgrids=BETA2007.gsb +units=m +axis=neu +bounds=9.5,-5,14.5,85  <>
 # Gauß-Krüger Zone 5
-<31469> +proj=tmerc +lon_0=15 +x_0=5500000 +ellps=bessel +nadgrids=BETA2007.gsb +bounds=12.5,-5,17.5,85  <>
+<31469> +proj=tmerc +lon_0=15 +x_0=5500000 +ellps=bessel +nadgrids=BETA2007.gsb +units=m +axis=neu +bounds=12.5,-5,17.5,85  <>
 # UTM zone 1N
-<32601> +proj=tmerc +lon_0=-177 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=-182,-5,-172,85  <>
+<32601> +proj=utm +zone=1 +datum=WGS84 +units=m +bounds=-182,-5,-172,85  <>
 # UTM zone 2N
-<32602> +proj=tmerc +lon_0=-171 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=-176,-5,-166,85  <>
+<32602> +proj=utm +zone=2 +datum=WGS84 +units=m +bounds=-176,-5,-166,85  <>
 # UTM zone 3N
-<32603> +proj=tmerc +lon_0=-165 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=-170,-5,-160,85  <>
+<32603> +proj=utm +zone=3 +datum=WGS84 +units=m +bounds=-170,-5,-160,85  <>
 # UTM zone 4N
-<32604> +proj=tmerc +lon_0=-159 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=-164,-5,-154,85  <>
+<32604> +proj=utm +zone=4 +datum=WGS84 +units=m +bounds=-164,-5,-154,85  <>
 # UTM zone 5N
-<32605> +proj=tmerc +lon_0=-153 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=-158,-5,-148,85  <>
+<32605> +proj=utm +zone=5 +datum=WGS84 +units=m +bounds=-158,-5,-148,85  <>
 # UTM zone 6N
-<32606> +proj=tmerc +lon_0=-147 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=-152,-5,-142,85  <>
+<32606> +proj=utm +zone=6 +datum=WGS84 +units=m +bounds=-152,-5,-142,85  <>
 # UTM zone 7N
-<32607> +proj=tmerc +lon_0=-141 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=-146,-5,-136,85  <>
+<32607> +proj=utm +zone=7 +datum=WGS84 +units=m +bounds=-146,-5,-136,85  <>
 # UTM zone 8N
-<32608> +proj=tmerc +lon_0=-135 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=-140,-5,-130,85  <>
+<32608> +proj=utm +zone=8 +datum=WGS84 +units=m +bounds=-140,-5,-130,85  <>
 # UTM zone 9N
-<32609> +proj=tmerc +lon_0=-129 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=-134,-5,-124,85  <>
+<32609> +proj=utm +zone=9 +datum=WGS84 +units=m +bounds=-134,-5,-124,85  <>
 # UTM zone 10N
-<32610> +proj=tmerc +lon_0=-123 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=-128,-5,-118,85  <>
+<32610> +proj=utm +zone=10 +datum=WGS84 +units=m +bounds=-128,-5,-118,85  <>
 # UTM zone 11N
-<32611> +proj=tmerc +lon_0=-117 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=-122,-5,-112,85  <>
+<32611> +proj=utm +zone=11 +datum=WGS84 +units=m +bounds=-122,-5,-112,85  <>
 # UTM zone 12N
-<32612> +proj=tmerc +lon_0=-111 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=-116,-5,-106,85  <>
+<32612> +proj=utm +zone=12 +datum=WGS84 +units=m +bounds=-116,-5,-106,85  <>
 # UTM zone 13N
-<32613> +proj=tmerc +lon_0=-105 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=-110,-5,-100,85  <>
+<32613> +proj=utm +zone=13 +datum=WGS84 +units=m +bounds=-110,-5,-100,85  <>
 # UTM zone 14N
-<32614> +proj=tmerc +lon_0=-99 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=-104,-5,-94,85  <>
+<32614> +proj=utm +zone=14 +datum=WGS84 +units=m +bounds=-104,-5,-94,85  <>
 # UTM zone 15N
-<32615> +proj=tmerc +lon_0=-93 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=-98,-5,-88,85  <>
+<32615> +proj=utm +zone=15 +datum=WGS84 +units=m +bounds=-98,-5,-88,85  <>
 # UTM zone 16N
-<32616> +proj=tmerc +lon_0=-87 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=-92,-5,-82,85  <>
+<32616> +proj=utm +zone=16 +datum=WGS84 +units=m +bounds=-92,-5,-82,85  <>
 # UTM zone 17N
-<32617> +proj=tmerc +lon_0=-81 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=-86,-5,-76,85  <>
+<32617> +proj=utm +zone=17 +datum=WGS84 +units=m +bounds=-86,-5,-76,85  <>
 # UTM zone 18N
-<32618> +proj=tmerc +lon_0=-75 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=-80,-5,-70,85  <>
+<32618> +proj=utm +zone=18 +datum=WGS84 +units=m +bounds=-80,-5,-70,85  <>
 # UTM zone 19N
-<32619> +proj=tmerc +lon_0=-69 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=-74,-5,-64,85  <>
+<32619> +proj=utm +zone=19 +datum=WGS84 +units=m +bounds=-74,-5,-64,85  <>
 # UTM zone 20N
-<32620> +proj=tmerc +lon_0=-63 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=-68,-5,-58,85  <>
+<32620> +proj=utm +zone=20 +datum=WGS84 +units=m +bounds=-68,-5,-58,85  <>
 # UTM zone 21N
-<32621> +proj=tmerc +lon_0=-57 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=-62,-5,-52,85  <>
+<32621> +proj=utm +zone=21 +datum=WGS84 +units=m +bounds=-62,-5,-52,85  <>
 # UTM zone 22N
-<32622> +proj=tmerc +lon_0=-51 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=-56,-5,-46,85  <>
+<32622> +proj=utm +zone=22 +datum=WGS84 +units=m +bounds=-56,-5,-46,85  <>
 # UTM zone 23N
-<32623> +proj=tmerc +lon_0=-45 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=-50,-5,-40,85  <>
+<32623> +proj=utm +zone=23 +datum=WGS84 +units=m +bounds=-50,-5,-40,85  <>
 # UTM zone 24N
-<32624> +proj=tmerc +lon_0=-39 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=-44,-5,-34,85  <>
+<32624> +proj=utm +zone=24 +datum=WGS84 +units=m +bounds=-44,-5,-34,85  <>
 # UTM zone 25N
-<32625> +proj=tmerc +lon_0=-33 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=-38,-5,-28,85  <>
+<32625> +proj=utm +zone=25 +datum=WGS84 +units=m +bounds=-38,-5,-28,85  <>
 # UTM zone 26N
-<32626> +proj=tmerc +lon_0=-27 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=-32,-5,-22,85  <>
+<32626> +proj=utm +zone=26 +datum=WGS84 +units=m +bounds=-32,-5,-22,85  <>
 # UTM zone 27N
-<32627> +proj=tmerc +lon_0=-21 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=-26,-5,-16,85  <>
+<32627> +proj=utm +zone=27 +datum=WGS84 +units=m +bounds=-26,-5,-16,85  <>
 # UTM zone 28N
-<32628> +proj=tmerc +lon_0=-15 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=-20,-5,-10,85  <>
+<32628> +proj=utm +zone=28 +datum=WGS84 +units=m +bounds=-20,-5,-10,85  <>
 # UTM zone 29N
-<32629> +proj=tmerc +lon_0=-9 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=-14,-5,-4,85  <>
+<32629> +proj=utm +zone=29 +datum=WGS84 +units=m +bounds=-14,-5,-4,85  <>
 # UTM zone 30N
-<32630> +proj=tmerc +lon_0=-3 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=-8,-5,2,85  <>
+<32630> +proj=utm +zone=30 +datum=WGS84 +units=m +bounds=-8,-5,2,85  <>
 # UTM zone 31N
-<32631> +proj=tmerc +lon_0=3 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=-2,-5,8,85  <>
+<32631> +proj=utm +zone=31 +datum=WGS84 +units=m +bounds=-2,-5,8,85  <>
 # UTM zone 32N
-<32632> +proj=tmerc +lon_0=9 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=4,-5,14,85  <>
+<32632> +proj=utm +zone=32 +datum=WGS84 +units=m +bounds=4,-5,14,85  <>
 # UTM zone 33N
-<32633> +proj=tmerc +lon_0=15 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=10,-5,20,85  <>
+<32633> +proj=utm +zone=33 +datum=WGS84 +units=m +bounds=10,-5,20,85  <>
 # UTM zone 34N
-<32634> +proj=tmerc +lon_0=21 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=16,-5,26,85  <>
+<32634> +proj=utm +zone=34 +datum=WGS84 +units=m +bounds=16,-5,26,85  <>
 # UTM zone 35N
-<32635> +proj=tmerc +lon_0=27 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=22,-5,32,85  <>
+<32635> +proj=utm +zone=35 +datum=WGS84 +units=m +bounds=22,-5,32,85  <>
 # UTM zone 36N
-<32636> +proj=tmerc +lon_0=33 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=28,-5,38,85  <>
+<32636> +proj=utm +zone=36 +datum=WGS84 +units=m +bounds=28,-5,38,85  <>
 # UTM zone 37N
-<32637> +proj=tmerc +lon_0=39 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=34,-5,44,85  <>
+<32637> +proj=utm +zone=37 +datum=WGS84 +units=m +bounds=34,-5,44,85  <>
 # UTM zone 38N
-<32638> +proj=tmerc +lon_0=45 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=40,-5,50,85  <>
+<32638> +proj=utm +zone=38 +datum=WGS84 +units=m +bounds=40,-5,50,85  <>
 # UTM zone 39N
-<32639> +proj=tmerc +lon_0=51 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=46,-5,56,85  <>
+<32639> +proj=utm +zone=39 +datum=WGS84 +units=m +bounds=46,-5,56,85  <>
 # UTM zone 40N
-<32640> +proj=tmerc +lon_0=57 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=52,-5,62,85  <>
+<32640> +proj=utm +zone=40 +datum=WGS84 +units=m +bounds=52,-5,62,85  <>
 # UTM zone 41N
-<32641> +proj=tmerc +lon_0=63 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=58,-5,68,85  <>
+<32641> +proj=utm +zone=41 +datum=WGS84 +units=m +bounds=58,-5,68,85  <>
 # UTM zone 42N
-<32642> +proj=tmerc +lon_0=69 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=64,-5,74,85  <>
+<32642> +proj=utm +zone=42 +datum=WGS84 +units=m +bounds=64,-5,74,85  <>
 # UTM zone 43N
-<32643> +proj=tmerc +lon_0=75 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=70,-5,80,85  <>
+<32643> +proj=utm +zone=43 +datum=WGS84 +units=m +bounds=70,-5,80,85  <>
 # UTM zone 44N
-<32644> +proj=tmerc +lon_0=81 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=76,-5,86,85  <>
+<32644> +proj=utm +zone=44 +datum=WGS84 +units=m +bounds=76,-5,86,85  <>
 # UTM zone 45N
-<32645> +proj=tmerc +lon_0=87 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=82,-5,92,85  <>
+<32645> +proj=utm +zone=45 +datum=WGS84 +units=m +bounds=82,-5,92,85  <>
 # UTM zone 46N
-<32646> +proj=tmerc +lon_0=93 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=88,-5,98,85  <>
+<32646> +proj=utm +zone=46 +datum=WGS84 +units=m +bounds=88,-5,98,85  <>
 # UTM zone 47N
-<32647> +proj=tmerc +lon_0=99 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=94,-5,104,85  <>
+<32647> +proj=utm +zone=47 +datum=WGS84 +units=m +bounds=94,-5,104,85  <>
 # UTM zone 48N
-<32648> +proj=tmerc +lon_0=105 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=100,-5,110,85  <>
+<32648> +proj=utm +zone=48 +datum=WGS84 +units=m +bounds=100,-5,110,85  <>
 # UTM zone 49N
-<32649> +proj=tmerc +lon_0=111 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=106,-5,116,85  <>
+<32649> +proj=utm +zone=49 +datum=WGS84 +units=m +bounds=106,-5,116,85  <>
 # UTM zone 50N
-<32650> +proj=tmerc +lon_0=117 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=112,-5,122,85  <>
+<32650> +proj=utm +zone=50 +datum=WGS84 +units=m +bounds=112,-5,122,85  <>
 # UTM zone 51N
-<32651> +proj=tmerc +lon_0=123 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=118,-5,128,85  <>
+<32651> +proj=utm +zone=51 +datum=WGS84 +units=m +bounds=118,-5,128,85  <>
 # UTM zone 52N
-<32652> +proj=tmerc +lon_0=129 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=124,-5,134,85  <>
+<32652> +proj=utm +zone=52 +datum=WGS84 +units=m +bounds=124,-5,134,85  <>
 # UTM zone 53N
-<32653> +proj=tmerc +lon_0=135 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=130,-5,140,85  <>
+<32653> +proj=utm +zone=53 +datum=WGS84 +units=m +bounds=130,-5,140,85  <>
 # UTM zone 54N
-<32654> +proj=tmerc +lon_0=141 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=136,-5,146,85  <>
+<32654> +proj=utm +zone=54 +datum=WGS84 +units=m +bounds=136,-5,146,85  <>
 # UTM zone 55N
-<32655> +proj=tmerc +lon_0=147 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=142,-5,152,85  <>
+<32655> +proj=utm +zone=55 +datum=WGS84 +units=m +bounds=142,-5,152,85  <>
 # UTM zone 56N
-<32656> +proj=tmerc +lon_0=153 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=148,-5,158,85  <>
+<32656> +proj=utm +zone=56 +datum=WGS84 +units=m +bounds=148,-5,158,85  <>
 # UTM zone 57N
-<32657> +proj=tmerc +lon_0=159 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=154,-5,164,85  <>
+<32657> +proj=utm +zone=57 +datum=WGS84 +units=m +bounds=154,-5,164,85  <>
 # UTM zone 58N
-<32658> +proj=tmerc +lon_0=165 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=160,-5,170,85  <>
+<32658> +proj=utm +zone=58 +datum=WGS84 +units=m +bounds=160,-5,170,85  <>
 # UTM zone 59N
-<32659> +proj=tmerc +lon_0=171 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=166,-5,176,85  <>
+<32659> +proj=utm +zone=59 +datum=WGS84 +units=m +bounds=166,-5,176,85  <>
 # UTM zone 60N
-<32660> +proj=tmerc +lon_0=177 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=172,-5,182,85  <>
+<32660> +proj=utm +zone=60 +datum=WGS84 +units=m +bounds=172,-5,182,85  <>
 # UTM zone 1S
-<32701> +proj=tmerc +lon_0=-177 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=-182,-85,-172,5  <>
+<32701> +proj=utm +zone=1 +south +datum=WGS84 +units=m +bounds=-182,-85,-172,5  <>
 # UTM zone 2S
-<32702> +proj=tmerc +lon_0=-171 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=-176,-85,-166,5  <>
+<32702> +proj=utm +zone=2 +south +datum=WGS84 +units=m +bounds=-176,-85,-166,5  <>
 # UTM zone 3S
-<32703> +proj=tmerc +lon_0=-165 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=-170,-85,-160,5  <>
+<32703> +proj=utm +zone=3 +south +datum=WGS84 +units=m +bounds=-170,-85,-160,5  <>
 # UTM zone 4S
-<32704> +proj=tmerc +lon_0=-159 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=-164,-85,-154,5  <>
+<32704> +proj=utm +zone=4 +south +datum=WGS84 +units=m +bounds=-164,-85,-154,5  <>
 # UTM zone 5S
-<32705> +proj=tmerc +lon_0=-153 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=-158,-85,-148,5  <>
+<32705> +proj=utm +zone=5 +south +datum=WGS84 +units=m +bounds=-158,-85,-148,5  <>
 # UTM zone 6S
-<32706> +proj=tmerc +lon_0=-147 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=-152,-85,-142,5  <>
+<32706> +proj=utm +zone=6 +south +datum=WGS84 +units=m +bounds=-152,-85,-142,5  <>
 # UTM zone 7S
-<32707> +proj=tmerc +lon_0=-141 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=-146,-85,-136,5  <>
+<32707> +proj=utm +zone=7 +south +datum=WGS84 +units=m +bounds=-146,-85,-136,5  <>
 # UTM zone 8S
-<32708> +proj=tmerc +lon_0=-135 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=-140,-85,-130,5  <>
+<32708> +proj=utm +zone=8 +south +datum=WGS84 +units=m +bounds=-140,-85,-130,5  <>
 # UTM zone 9S
-<32709> +proj=tmerc +lon_0=-129 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=-134,-85,-124,5  <>
+<32709> +proj=utm +zone=9 +south +datum=WGS84 +units=m +bounds=-134,-85,-124,5  <>
 # UTM zone 10S
-<32710> +proj=tmerc +lon_0=-123 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=-128,-85,-118,5  <>
+<32710> +proj=utm +zone=10 +south +datum=WGS84 +units=m +bounds=-128,-85,-118,5  <>
 # UTM zone 11S
-<32711> +proj=tmerc +lon_0=-117 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=-122,-85,-112,5  <>
+<32711> +proj=utm +zone=11 +south +datum=WGS84 +units=m +bounds=-122,-85,-112,5  <>
 # UTM zone 12S
-<32712> +proj=tmerc +lon_0=-111 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=-116,-85,-106,5  <>
+<32712> +proj=utm +zone=12 +south +datum=WGS84 +units=m +bounds=-116,-85,-106,5  <>
 # UTM zone 13S
-<32713> +proj=tmerc +lon_0=-105 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=-110,-85,-100,5  <>
+<32713> +proj=utm +zone=13 +south +datum=WGS84 +units=m +bounds=-110,-85,-100,5  <>
 # UTM zone 14S
-<32714> +proj=tmerc +lon_0=-99 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=-104,-85,-94,5  <>
+<32714> +proj=utm +zone=14 +south +datum=WGS84 +units=m +bounds=-104,-85,-94,5  <>
 # UTM zone 15S
-<32715> +proj=tmerc +lon_0=-93 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=-98,-85,-88,5  <>
+<32715> +proj=utm +zone=15 +south +datum=WGS84 +units=m +bounds=-98,-85,-88,5  <>
 # UTM zone 16S
-<32716> +proj=tmerc +lon_0=-87 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=-92,-85,-82,5  <>
+<32716> +proj=utm +zone=16 +south +datum=WGS84 +units=m +bounds=-92,-85,-82,5  <>
 # UTM zone 17S
-<32717> +proj=tmerc +lon_0=-81 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=-86,-85,-76,5  <>
+<32717> +proj=utm +zone=17 +south +datum=WGS84 +units=m +bounds=-86,-85,-76,5  <>
 # UTM zone 18S
-<32718> +proj=tmerc +lon_0=-75 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=-80,-85,-70,5  <>
+<32718> +proj=utm +zone=18 +south +datum=WGS84 +units=m +bounds=-80,-85,-70,5  <>
 # UTM zone 19S
-<32719> +proj=tmerc +lon_0=-69 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=-74,-85,-64,5  <>
+<32719> +proj=utm +zone=19 +south +datum=WGS84 +units=m +bounds=-74,-85,-64,5  <>
 # UTM zone 20S
-<32720> +proj=tmerc +lon_0=-63 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=-68,-85,-58,5  <>
+<32720> +proj=utm +zone=20 +south +datum=WGS84 +units=m +bounds=-68,-85,-58,5  <>
 # UTM zone 21S
-<32721> +proj=tmerc +lon_0=-57 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=-62,-85,-52,5  <>
+<32721> +proj=utm +zone=21 +south +datum=WGS84 +units=m +bounds=-62,-85,-52,5  <>
 # UTM zone 22S
-<32722> +proj=tmerc +lon_0=-51 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=-56,-85,-46,5  <>
+<32722> +proj=utm +zone=22 +south +datum=WGS84 +units=m +bounds=-56,-85,-46,5  <>
 # UTM zone 23S
-<32723> +proj=tmerc +lon_0=-45 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=-50,-85,-40,5  <>
+<32723> +proj=utm +zone=23 +south +datum=WGS84 +units=m +bounds=-50,-85,-40,5  <>
 # UTM zone 24S
-<32724> +proj=tmerc +lon_0=-39 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=-44,-85,-34,5  <>
+<32724> +proj=utm +zone=24 +south +datum=WGS84 +units=m +bounds=-44,-85,-34,5  <>
 # UTM zone 25S
-<32725> +proj=tmerc +lon_0=-33 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=-38,-85,-28,5  <>
+<32725> +proj=utm +zone=25 +south +datum=WGS84 +units=m +bounds=-38,-85,-28,5  <>
 # UTM zone 26S
-<32726> +proj=tmerc +lon_0=-27 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=-32,-85,-22,5  <>
+<32726> +proj=utm +zone=26 +south +datum=WGS84 +units=m +bounds=-32,-85,-22,5  <>
 # UTM zone 27S
-<32727> +proj=tmerc +lon_0=-21 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=-26,-85,-16,5  <>
+<32727> +proj=utm +zone=27 +south +datum=WGS84 +units=m +bounds=-26,-85,-16,5  <>
 # UTM zone 28S
-<32728> +proj=tmerc +lon_0=-15 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=-20,-85,-10,5  <>
+<32728> +proj=utm +zone=28 +south +datum=WGS84 +units=m +bounds=-20,-85,-10,5  <>
 # UTM zone 29S
-<32729> +proj=tmerc +lon_0=-9 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=-14,-85,-4,5  <>
+<32729> +proj=utm +zone=29 +south +datum=WGS84 +units=m +bounds=-14,-85,-4,5  <>
 # UTM zone 30S
-<32730> +proj=tmerc +lon_0=-3 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=-8,-85,2,5  <>
+<32730> +proj=utm +zone=30 +south +datum=WGS84 +units=m +bounds=-8,-85,2,5  <>
 # UTM zone 31S
-<32731> +proj=tmerc +lon_0=3 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=-2,-85,8,5  <>
+<32731> +proj=utm +zone=31 +south +datum=WGS84 +units=m +bounds=-2,-85,8,5  <>
 # UTM zone 32S
-<32732> +proj=tmerc +lon_0=9 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=4,-85,14,5  <>
+<32732> +proj=utm +zone=32 +south +datum=WGS84 +units=m +bounds=4,-85,14,5  <>
 # UTM zone 33S
-<32733> +proj=tmerc +lon_0=15 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=10,-85,20,5  <>
+<32733> +proj=utm +zone=33 +south +datum=WGS84 +units=m +bounds=10,-85,20,5  <>
 # UTM zone 34S
-<32734> +proj=tmerc +lon_0=21 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=16,-85,26,5  <>
+<32734> +proj=utm +zone=34 +south +datum=WGS84 +units=m +bounds=16,-85,26,5  <>
 # UTM zone 35S
-<32735> +proj=tmerc +lon_0=27 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=22,-85,32,5  <>
+<32735> +proj=utm +zone=35 +south +datum=WGS84 +units=m +bounds=22,-85,32,5  <>
 # UTM zone 36S
-<32736> +proj=tmerc +lon_0=33 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=28,-85,38,5  <>
+<32736> +proj=utm +zone=36 +south +datum=WGS84 +units=m +bounds=28,-85,38,5  <>
 # UTM zone 37S
-<32737> +proj=tmerc +lon_0=39 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=34,-85,44,5  <>
+<32737> +proj=utm +zone=37 +south +datum=WGS84 +units=m +bounds=34,-85,44,5  <>
 # UTM zone 38S
-<32738> +proj=tmerc +lon_0=45 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=40,-85,50,5  <>
+<32738> +proj=utm +zone=38 +south +datum=WGS84 +units=m +bounds=40,-85,50,5  <>
 # UTM zone 39S
-<32739> +proj=tmerc +lon_0=51 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=46,-85,56,5  <>
+<32739> +proj=utm +zone=39 +south +datum=WGS84 +units=m +bounds=46,-85,56,5  <>
 # UTM zone 40S
-<32740> +proj=tmerc +lon_0=57 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=52,-85,62,5  <>
+<32740> +proj=utm +zone=40 +south +datum=WGS84 +units=m +bounds=52,-85,62,5  <>
 # UTM zone 41S
-<32741> +proj=tmerc +lon_0=63 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=58,-85,68,5  <>
+<32741> +proj=utm +zone=41 +south +datum=WGS84 +units=m +bounds=58,-85,68,5  <>
 # UTM zone 42S
-<32742> +proj=tmerc +lon_0=69 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=64,-85,74,5  <>
+<32742> +proj=utm +zone=42 +south +datum=WGS84 +units=m +bounds=64,-85,74,5  <>
 # UTM zone 43S
-<32743> +proj=tmerc +lon_0=75 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=70,-85,80,5  <>
+<32743> +proj=utm +zone=43 +south +datum=WGS84 +units=m +bounds=70,-85,80,5  <>
 # UTM zone 44S
-<32744> +proj=tmerc +lon_0=81 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=76,-85,86,5  <>
+<32744> +proj=utm +zone=44 +south +datum=WGS84 +units=m +bounds=76,-85,86,5  <>
 # UTM zone 45S
-<32745> +proj=tmerc +lon_0=87 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=82,-85,92,5  <>
+<32745> +proj=utm +zone=45 +south +datum=WGS84 +units=m +bounds=82,-85,92,5  <>
 # UTM zone 46S
-<32746> +proj=tmerc +lon_0=93 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=88,-85,98,5  <>
+<32746> +proj=utm +zone=46 +south +datum=WGS84 +units=m +bounds=88,-85,98,5  <>
 # UTM zone 47S
-<32747> +proj=tmerc +lon_0=99 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=94,-85,104,5  <>
+<32747> +proj=utm +zone=47 +south +datum=WGS84 +units=m +bounds=94,-85,104,5  <>
 # UTM zone 48S
-<32748> +proj=tmerc +lon_0=105 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=100,-85,110,5  <>
+<32748> +proj=utm +zone=48 +south +datum=WGS84 +units=m +bounds=100,-85,110,5  <>
 # UTM zone 49S
-<32749> +proj=tmerc +lon_0=111 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=106,-85,116,5  <>
+<32749> +proj=utm +zone=49 +south +datum=WGS84 +units=m +bounds=106,-85,116,5  <>
 # UTM zone 50S
-<32750> +proj=tmerc +lon_0=117 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=112,-85,122,5  <>
+<32750> +proj=utm +zone=50 +south +datum=WGS84 +units=m +bounds=112,-85,122,5  <>
 # UTM zone 51S
-<32751> +proj=tmerc +lon_0=123 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=118,-85,128,5  <>
+<32751> +proj=utm +zone=51 +south +datum=WGS84 +units=m +bounds=118,-85,128,5  <>
 # UTM zone 52S
-<32752> +proj=tmerc +lon_0=129 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=124,-85,134,5  <>
+<32752> +proj=utm +zone=52 +south +datum=WGS84 +units=m +bounds=124,-85,134,5  <>
 # UTM zone 53S
-<32753> +proj=tmerc +lon_0=135 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=130,-85,140,5  <>
+<32753> +proj=utm +zone=53 +south +datum=WGS84 +units=m +bounds=130,-85,140,5  <>
 # UTM zone 54S
-<32754> +proj=tmerc +lon_0=141 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=136,-85,146,5  <>
+<32754> +proj=utm +zone=54 +south +datum=WGS84 +units=m +bounds=136,-85,146,5  <>
 # UTM zone 55S
-<32755> +proj=tmerc +lon_0=147 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=142,-85,152,5  <>
+<32755> +proj=utm +zone=55 +south +datum=WGS84 +units=m +bounds=142,-85,152,5  <>
 # UTM zone 56S
-<32756> +proj=tmerc +lon_0=153 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=148,-85,158,5  <>
+<32756> +proj=utm +zone=56 +south +datum=WGS84 +units=m +bounds=148,-85,158,5  <>
 # UTM zone 57S
-<32757> +proj=tmerc +lon_0=159 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=154,-85,164,5  <>
+<32757> +proj=utm +zone=57 +south +datum=WGS84 +units=m +bounds=154,-85,164,5  <>
 # UTM zone 58S
-<32758> +proj=tmerc +lon_0=165 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=160,-85,170,5  <>
+<32758> +proj=utm +zone=58 +south +datum=WGS84 +units=m +bounds=160,-85,170,5  <>
 # UTM zone 59S
-<32759> +proj=tmerc +lon_0=171 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=166,-85,176,5  <>
+<32759> +proj=utm +zone=59 +south +datum=WGS84 +units=m +bounds=166,-85,176,5  <>
 # UTM zone 60S
-<32760> +proj=tmerc +lon_0=177 +k_0=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +bounds=172,-85,182,5  <>
+<32760> +proj=utm +zone=60 +south +datum=WGS84 +units=m +bounds=172,-85,182,5  <>
diff --git a/data/validator/combinations.mapcss b/data/validator/combinations.mapcss
index f8aa685..f0aa4db 100644
--- a/data/validator/combinations.mapcss
+++ b/data/validator/combinations.mapcss
@@ -137,6 +137,17 @@ way[junction                   ][!highway][junction!=yes],
   throwWarning: tr("{0} without {1} or {2}", "{0.key}", "{1.key}", "{2.tag}");
 }
 
+/* {0.tag} without {1.tag} (info level) see #11600 #11393 #11850 */
+*[highway=motorway][!oneway][junction!=roundabout],
+*[highway=motorway_link][!oneway][junction!=roundabout] {
+  throwOther: tr("{0} without {1}", "{0.tag}", "{1.tag}");
+}
+
+/* {0.tag} without {1.tag} or {2.tag} */
+*[amenity=recycling][recycling_type!=container][recycling_type!=centre] {
+  throwWarning: tr("{0} without {1} or {2}", "{0.tag}", "{1.tag}", "{2.tag}");
+}
+
 /* {0.key} without {1.key}, {2.tag} or {3.tag} */
 *[intermittent                 ][!waterway][natural!~/^(water|spring)$/][ford!=yes] {
   throwWarning: tr("{0} without {1}, {2} or {3}", "{0.key}", "{1.key}", "{2.tag}", "{3.tag}");
@@ -152,9 +163,9 @@ way[junction                   ][!highway][junction!=yes],
   throwWarning: tr("{0} without {1}, {2} or {3}", "{0.key}", "{1.key}", "{2.key}", "{3.tag}");
 }
 
-/* {0.key} together with {1.key}, see #10837 */
+/* {0.tag} together with {1.key}, see #10837 */
 *[noname?][name] {
-  throwWarning: tr("{0} together with {1}", "{0.key}", "{1.key}");
+  throwWarning: tr("{0} together with {1}", "{0.tag}", "{1.key}");
 }
 
 /* {0.tag} together with {1.key}, see #9389 */
@@ -194,12 +205,30 @@ way[waterway][bridge=yes] {
   throwWarning: tr("incomplete object: only {0} and {1}", "{0.key}", "{1.key}");
 }
 
-/* see #9811 */
+/* see #9811, #11491 */
 *[place][place!=farm][/^addr:/],
 *[boundary][/^addr:/],
-*[highway][/^addr:/][highway!=services][highway!=rest_area] {
+*[highway][/^addr:/][highway!=services][highway!=rest_area][!"addr:postcode"] {
   throwWarning: tr("{0} together with addr:*", "{0.key}");
 }
+*[!highway][postal_code]["addr:postcode"][postal_code=*"addr:postcode"] {
+  throwWarning: tr("{0} together with {1}", "{1.key}", "{2.key}");
+}
+*[!highway][postal_code]["addr:postcode"][postal_code!=*"addr:postcode"] {
+  throwWarning: tr("{0} together with {1} and conflicting values", "{1.key}", "{2.key}");
+}
+way[highway][postal_code]["addr:postcode"][postal_code=*"addr:postcode"] {
+  throwWarning: tr("{0} together with {1}", "{1.key}", "{2.key}");
+  fixRemove: "addr:postcode";
+}
+way[highway][postal_code]["addr:postcode"][postal_code!=*"addr:postcode"] {
+  throwWarning: tr("{0} together with {1} and conflicting values", "{1.key}", "{2.key}");
+}
+way[highway][!postal_code]["addr:postcode"] {
+  throwWarning: tr("{0} together with {1}", "{0.key}", "{2.key}");
+  suggestAlternative: "postal_code";
+  fixChangeKey: "addr:postcode=>postal_code";
+}
 
 /* see #9195 */
 *[highway=footway][cycleway=lane] {
@@ -212,7 +241,7 @@ way[waterway][bridge=yes] {
 *[bridge  ][!highway][!railway][!waterway][!piste:type][public_transport != platform][man_made !~ /^(bridge|pipeline)$/][building != bridge],
 *[psv     ][!highway][!railway][!waterway][amenity !~ /^parking.*/],
 *[width   ][!highway][!railway][!waterway][!aeroway][!cycleway][!footway][!barrier][!man_made][!entrance],
-*[maxspeed][!highway][!railway][traffic_sign !~ /^(.*;)?maxspeed(;.*)?$/][type != enforcement][waterway !~ /^(river|canal|lock)$/],
+*[maxspeed][!highway][!railway][traffic_sign !~ /^(.*;)?maxspeed(;.*)?$/][type != enforcement][waterway !~ /^(river|canal|lock)$/][!traffic_calming],
 *[lit     ][!highway][!railway][!piste:type][!amenity][public_transport!=platform][advertising!=billboard][!leisure][!tourism] {
   throwWarning: tr("{0} on suspicious object", "{0.key}");
 }
@@ -225,7 +254,7 @@ node[amenity =~ /^(restaurant|cafe|fast_food)$/][!name][noname!=yes] {
 }
 
 way[highway][barrier],
-*[highway][waterway][waterway!=dam],
+*[highway][waterway][waterway!=dam][waterway!=weir],
 way[highway][natural],
 *[landuse][building] {
   throwWarning: tr("{0} used with {1}", "{0.key}", "{1.key}");
@@ -240,7 +269,7 @@ way[highway][natural],
 }
 
 /* see #9593, #11183 */
-*[sport][!building][!club][tourism != hotel][highway != raceway][leisure !~ /^(sports_centre|stadium|track|pitch|golf_course|water_park|swimming_pool|recreation_ground)$/][natural !~ /^(beach|bare_rock|peak)$/][amenity !~ /^(pub|restaurant|swimming_pool)$/][landuse !~ /^(recreation_ground|piste|farm|farmland)$/][barrier !~ /^(wall|retaining_wall)$/][!"piste:type"] {
+*[sport][!building][!club][tourism != hotel][highway != raceway][leisure !~ /^(sports_centre|stadium|track|pitch|golf_course|water_park|swimming_pool|recreation_ground|ice_rink)$/][natural !~ /^(beach|bare_rock|peak|water)$/][amenity !~ /^(pub|restaurant|swimming_pool)$/][landuse !~ /^(recreation_ground|piste|farm|farmland)$/][barrier !~ /^(wall|retaining_wall)$/][!"piste:type"] {
     throwWarning: tr("sport without physical feature");
     assertMatch: "node sport=tennis";
     assertNoMatch: "node sport=tennis leisure=pitch";
@@ -258,18 +287,46 @@ way[highway][natural],
 /* see #10471 */
 way[waterway] > node[ford?] { set ford_on_waterway; }
 way[highway] > node[ford?] { set ford_on_highway; }
-node[ford?]!.ford_on_waterway, node[ford?]!.ford_on_highway {
+node[ford?]:in-downloaded-area!.ford_on_waterway, node[ford?]:in-downloaded-area!.ford_on_highway {
     throwWarning: tr("{0} should be on the node where {1} and {2} intersect", "ford", "highway", "waterway");
 }
 
-/* any other *_name tag (except old_name, loc_name and uic_name) but not a name , see #10837 */
-*[/_name$/][!name][!old_name][!loc_name][!uic_name] {
+/* any other *_name tag (with some exceptions) but not a name , see #10837 #11297 #11539 */
+*[/_name$/][!name][!old_name][!loc_name][!uic_name][!artist_name][!"osak:municipality_name"][!"osak:street_name"][noname!=yes] {
   throwWarning: tr("alternative name without {0}", "{1.key}");
 }
 
 /* see #10837 */
-way[destination][!oneway?] {
+way[destination][!oneway?][highway] {
   throwWarning: tr("incomplete usage of {0} on a way without {1}", "{0.key}", "{1.key}");
   suggestAlternative: "destination:forward";
   suggestAlternative: "destination:backward";
+}
+
+/* see #11389 */
+way["maxspeed:forward"=*"maxspeed:backward"][!maxspeed] {
+  throwWarning: tr("Same value of {0} and {1}", "{0.key}", "{1.key}");
+  suggestAlternative: "maxspeed";
+  fixChangeKey: "maxspeed:forward=>maxspeed";
+  fixRemove: "maxspeed:backward";
+}
+way["maxspeed:forward"=*maxspeed]["maxspeed:backward"=*maxspeed][maxspeed] {
+  throwWarning: tr("Same value of {0}, {1} and {2}", "{0.key}", "{1.key}", "{2.key}");
+  set AllSameMaxspeed;
+  suggestAlternative: "maxspeed";
+  fixRemove: "maxspeed:forward";
+  fixRemove: "maxspeed:backward";
+}
+way["maxspeed:forward"]["maxspeed:backward"][maxspeed]!.AllSameMaxspeed {
+  throwWarning: tr("{0} and {1} together with {2} and conflicting values", "{0.key}", "{1.key}", "{2.key}");
+}
+way["maxspeed:forward"][maxspeed][!"maxspeed:backward"],
+way["maxspeed:backward"][maxspeed][!"maxspeed:forward"] {
+  throwWarning: tr("{0} together with {1}", "{0.key}", "{1.key}");
+}
+
+/* see #11837 */
+way[layer][layer<0][bridge][bridge!=no][location!=underground][indoor!=yes][!tunnel],
+way[layer][layer>0][tunnel][tunnel!=no][location!=overground][indoor!=yes][!bridge] {
+  throwWarning: tr("Suspicious tag combination: {0} and {1}", "{2.tag}", "{0.tag}");
 }
\ No newline at end of file
diff --git a/data/validator/deprecated.mapcss b/data/validator/deprecated.mapcss
index 6dfab2b..0b8176d 100644
--- a/data/validator/deprecated.mapcss
+++ b/data/validator/deprecated.mapcss
@@ -331,9 +331,10 @@
   fixAdd: "park_ride=yes";
 }
 
-/* see #10661, #10837 */
+/* see #10661, #10837, #11737 */
+*[access=restricted],
 *[barrier=yes],
-*[aerialway=yes],
+*[aerialway=yes][!public_transport],
 *[amenity=yes],
 *[place=yes] {
   throwWarning: tr("{0}={1} is unspecific. Please replace ''{1}'' by a specific value.", "{0.key}", "{0.value}");
@@ -446,7 +447,7 @@ way[oneway=-1] {
 }
 
 /* see #11234 */
-*[/=|\+|\/|&|<|>|;|'|"|%|#|@|\\|,|\./] {
+*[/=|\+|\/|&|<|>|;|'|"|%|#|@|\\|,|\.|\{|\}|\?|\*|\^|\$/] {
   throwWarning: tr("key with uncommon character");
 }
 
@@ -468,4 +469,68 @@ relation[/^..$/][!to] {
   throwWarning: tr("{0} is deprecated", "{0.tag}");
   suggestAlternative: "pole=transition";
   fixAdd: "pole=transition";
+}
+
+/* see #11439 */
+*[sport=hockey] {
+  throwWarning: tr("{0} is inaccurate", "{0.tag}");
+  suggestAlternative: "sport=field_hockey";
+  suggestAlternative: "sport=ice_hockey";
+}
+
+/* see #11471 */
+*[sport=billard],
+*[sport=billards],
+*[sport=billiard] {
+  throwWarning: tr("{0} is deprecated", "{0.tag}");
+  suggestAlternative: "sport=billiards";
+  fixAdd: "sport=billiards";
+}
+
+/* see #11499 */
+*[payment:credit_cards=yes] {
+  throwWarning: tr("{0} is inaccurate", "{0.tag}");
+  suggestAlternative: "payment:mastercard=yes";
+  suggestAlternative: "payment:visa=yes";
+  suggestAlternative: "...";
+}
+*[payment:debit_cards=yes] {
+  throwWarning: tr("{0} is inaccurate", "{0.tag}");
+  suggestAlternative: "payment:maestro=yes";
+  suggestAlternative: "payment:girocard=yes";
+  suggestAlternative: "...";
+}
+*[payment:electronic_purses=yes] {
+  throwWarning: tr("{0} is inaccurate", "{0.tag}");
+  suggestAlternative: "payment:ep_geldkarte=yes";
+  suggestAlternative: "payment:ep_quick=yes";
+  suggestAlternative: "...";
+}
+*[payment:cryptocurrencies=yes] {
+  throwWarning: tr("{0} is inaccurate", "{0.tag}");
+  suggestAlternative: "payment:bitcoin=yes";
+  suggestAlternative: "payment:litecoin=yes";
+  suggestAlternative: "...";
+}
+
+/* see #8717 */
+*[kp][highway=milestone],
+*[kp][railway=milestone],
+*[kp][waterway=milestone] {
+  throwWarning: tr("{0} is deprecated", "{0.key}");
+  suggestAlternative: "distance";
+  fixChangeKey: "kp => distance";
+}
+*[pk][highway=milestone],
+*[pk][railway=milestone],
+*[pk][waterway=milestone] {
+  throwWarning: tr("{0} is deprecated", "{0.key}");
+  suggestAlternative: "distance";
+  fixChangeKey: "pk => distance";
+}
+
+*[postcode] {
+  throwWarning: tr("{0} is deprecated", "{0.key}");
+  suggestAlternative: "addr:postcode";
+  suggestAlternative: "postal_code";
 }
\ No newline at end of file
diff --git a/data/validator/geometry.mapcss b/data/validator/geometry.mapcss
index 296d221..1029dc2 100644
--- a/data/validator/geometry.mapcss
+++ b/data/validator/geometry.mapcss
@@ -152,51 +152,51 @@ node[tag("power") = parent_tag("power")] ∈ *[power] {
 }
 
 /* isolated nodes which should be part of a way, see #10825 */
-node:unconnected[entrance],
-node:unconnected[traffic_calming],
-node:unconnected[highway=passing_place],
-node:unconnected[highway=mini_roundabout],
-node:unconnected[highway=motorway_junction],
-node:unconnected[highway=turning_loop],
-node:unconnected[highway=turning_circle],
-node:unconnected[highway=stop],
-node:unconnected[highway=give_way],
-node:unconnected[highway=traffic_signals],
-node:unconnected[highway=crossing],
-node:unconnected[crossing],
-node:unconnected[railway=crossing],
-node:unconnected[railway=level_crossing],
-node:unconnected[railway=buffer_stop],
-node:unconnected[public_transport=stop_position],
-node:unconnected[noexit],
-node:unconnected[waterway=dam],
-node:unconnected[waterway=weir],
-node:unconnected[waterway=waterfall],
-node:unconnected[amenity=ferry_terminal],
-node:unconnected[mountain_pass=yes],
-node:unconnected[barrier=gate],
-node:unconnected[barrier=lift_gate],
-node:unconnected[barrier=swing_gate],
-node:unconnected[barrier=toll_booth],
-node:unconnected[barrier=turnstile],
-node:unconnected[barrier=full-height_turnstile],
-node:unconnected[barrier=motorcycle_barrier],
-node:unconnected[barrier=rope],
-node:unconnected[barrier=sally_port],
-node:unconnected[barrier=spikes],
-node:unconnected[barrier=stile],
-node:unconnected[barrier=sump_buster],
-node:unconnected[barrier=kerb],
-node:unconnected[barrier=border_control],
-node:unconnected[barrier=bump_gate],
-node:unconnected[barrier=bus_trap],
-node:unconnected[barrier=cattle_grid],
-node:unconnected[barrier=chain],
-node:unconnected[barrier=cycle_barrier],
-node:unconnected[barrier=hampshire_gate],
-node:unconnected[barrier=height_restrictor],
-node:unconnected[barrier=debris] {
-  throwWarning: tr("{0} must be connected to a way", "{1.tag}");
+node:unconnected:in-downloaded-area[entrance],
+node:unconnected:in-downloaded-area[traffic_calming],
+node:unconnected:in-downloaded-area[highway=passing_place],
+node:unconnected:in-downloaded-area[highway=mini_roundabout],
+node:unconnected:in-downloaded-area[highway=motorway_junction],
+node:unconnected:in-downloaded-area[highway=turning_loop],
+node:unconnected:in-downloaded-area[highway=turning_circle],
+node:unconnected:in-downloaded-area[highway=stop],
+node:unconnected:in-downloaded-area[highway=give_way],
+node:unconnected:in-downloaded-area[highway=traffic_signals],
+node:unconnected:in-downloaded-area[highway=crossing],
+node:unconnected:in-downloaded-area[crossing],
+node:unconnected:in-downloaded-area[railway=crossing],
+node:unconnected:in-downloaded-area[railway=level_crossing],
+node:unconnected:in-downloaded-area[railway=buffer_stop],
+node:unconnected:in-downloaded-area[public_transport=stop_position],
+node:unconnected:in-downloaded-area[noexit],
+node:unconnected:in-downloaded-area[waterway=dam],
+node:unconnected:in-downloaded-area[waterway=weir],
+node:unconnected:in-downloaded-area[waterway=waterfall],
+node:unconnected:in-downloaded-area[amenity=ferry_terminal],
+node:unconnected:in-downloaded-area[mountain_pass=yes],
+node:unconnected:in-downloaded-area[barrier=gate],
+node:unconnected:in-downloaded-area[barrier=lift_gate],
+node:unconnected:in-downloaded-area[barrier=swing_gate],
+node:unconnected:in-downloaded-area[barrier=toll_booth],
+node:unconnected:in-downloaded-area[barrier=turnstile],
+node:unconnected:in-downloaded-area[barrier=full-height_turnstile],
+node:unconnected:in-downloaded-area[barrier=motorcycle_barrier],
+node:unconnected:in-downloaded-area[barrier=rope],
+node:unconnected:in-downloaded-area[barrier=sally_port],
+node:unconnected:in-downloaded-area[barrier=spikes],
+node:unconnected:in-downloaded-area[barrier=stile],
+node:unconnected:in-downloaded-area[barrier=sump_buster],
+node:unconnected:in-downloaded-area[barrier=kerb],
+node:unconnected:in-downloaded-area[barrier=border_control],
+node:unconnected:in-downloaded-area[barrier=bump_gate],
+node:unconnected:in-downloaded-area[barrier=bus_trap],
+node:unconnected:in-downloaded-area[barrier=cattle_grid],
+node:unconnected:in-downloaded-area[barrier=chain],
+node:unconnected:in-downloaded-area[barrier=cycle_barrier],
+node:unconnected:in-downloaded-area[barrier=hampshire_gate],
+node:unconnected:in-downloaded-area[barrier=height_restrictor],
+node:unconnected:in-downloaded-area[barrier=debris] {
+  throwWarning: tr("{0} must be connected to a way", "{2.tag}");
 }
 
 /*see #11127*/
diff --git a/data/validator/numeric.mapcss b/data/validator/numeric.mapcss
index f470546..306b23a 100644
--- a/data/validator/numeric.mapcss
+++ b/data/validator/numeric.mapcss
@@ -80,8 +80,18 @@ way[width][width !~ /^(([0-9]+\.?[0-9]*( [a-z]+)?)|([0-9]+\'([0-9]+\.?[0-9]*\")?
   assertNoMatch: "way maxwidth=2.5";
   assertNoMatch: "way maxwidth=7 ft";
 }
-
-way[maxspeed][maxspeed !~ /^(signals|none|unposted|unknown|variable|walk|[1-9][0-9]*( [a-z]+)?|[A-Z][A-Z]:(urban|rural|living_street|motorway))$/] {
+*[maxweight][maxweight !~ /^(([0-9]+\.?[0-9]*( (t|kg|lbs))?)|([0-9]+\'[0-9]+\.?[0-9]*\"))$/] {
+  throwWarning: tr("{0}: tonne is default; period is separator; if units, put space then unit", "maxweight");
+  assertMatch: "way maxweight=something";
+  assertMatch: "way maxweight=-5";
+  assertNoMatch: "way maxweight=2";
+  assertNoMatch: "way maxweight=6'6\"";
+  assertNoMatch: "way maxweight=2.5";
+  assertNoMatch: "way maxweight=7 kg";
+}
+way[maxspeed][maxspeed !~ /^(signals|none|unposted|variable|walk|[1-9][0-9]*( [a-z]+)?|[A-Z][A-Z]:(urban|rural|living_street|motorway))$/],
+way[maxspeed:forward][maxspeed:forward !~ /^(signals|none|unposted|variable|walk|[1-9][0-9]*( [a-z]+)?|[A-Z][A-Z]:(urban|rural|living_street|motorway))$/],
+way[maxspeed:backward][maxspeed:backward !~ /^(signals|none|unposted|variable|walk|[1-9][0-9]*( [a-z]+)?|[A-Z][A-Z]:(urban|rural|living_street|motorway))$/] {
   throwWarning: tr("unusual {0} format", "maxspeed");
   assertMatch: "way maxspeed=something";
   assertMatch: "way maxspeed=-50";
@@ -97,6 +107,15 @@ way[maxspeed][maxspeed !~ /^(signals|none|unposted|unknown|variable|walk|[1-9][0
   assertNoMatch: "way maxspeed=variable";
 }
 
+*[distance][distance !~ /^(([0-9]+\.?[0-9]*( (km|mi|nmi))?)|([0-9]+\'[0-9]+\.?[0-9]*\"))$/] {
+  throwWarning: tr("{0}: kilometers is default; period is separator; if units, put space then unit", "distance");
+  assertMatch: "way distance=something";
+  assertMatch: "way distance=-5";
+  assertNoMatch: "way distance=2";
+  assertNoMatch: "way distance=2.5";
+  assertNoMatch: "way distance=7 mi";
+}
+
 way[voltage][voltage =~ /(.*[A-Za-z].*)|.*,.*|.*( ).*/] {
   throwWarning: tr("voltage should be in volts with no units/delimiter/spaces");
   assertMatch: "way voltage=medium";
diff --git a/data/validator/opening_hours.js b/data/validator/opening_hours.js
index 1f37775..b8beaa1 100644
--- a/data/validator/opening_hours.js
+++ b/data/validator/opening_hours.js
@@ -1,6579 +1,23 @@
-/*
+require=function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({1:[function(require,module,exports){if(req [...]
+ Copyright (c) 2011-2013, Vladimir Agafonkin
+ SunCalc is a JavaScript library for calculating sun position, sunlight phases, and moon position.
+ https://github.com/mourner/suncalc
+ */
+(function(global){"use strict";var SunCalc;if(typeof exports!=="undefined"){SunCalc=exports}else{SunCalc=global.SunCalc={}}var PI=Math.PI,rad=PI/180,sin=Math.sin,cos=Math.cos,tan=Math.tan,asin=Math.asin,atan=Math.atan2,acos=Math.acos;var dayMs=1e3*60*60*24,J1970=2440588,J2000=2451545;function toJulian(date){return date.valueOf()/dayMs-.5+J1970}function fromJulian(j){return new Date((j+.5-J1970)*dayMs)}function toDays(date){return toJulian(date)-J2000}var e=rad*23.4397;function getRightAs [...]
+// v0.5.0 of https://github.com/goloroden/http.js
+var getXhr=function(callback){if(window.XMLHttpRequest){return callback(null,new XMLHttpRequest)}else if(window.ActiveXObject){try{return callback(null,new ActiveXObject("Msxml2.XMLHTTP"))}catch(e){return callback(null,new ActiveXObject("Microsoft.XMLHTTP"))}}return callback(new Error)};var encodeUsingUrlEncoding=function(data){if(typeof data==="string"){return data}var result=[];for(var dataItem in data){if(data.hasOwnProperty(dataItem)){result.push(encodeURIComponent(dataItem)+"="+enco [...]
+var _rulesPluralsTypes={1:function(n){return Number(n>1)},2:function(n){return Number(n!=1)},3:function(n){return 0},4:function(n){return Number(n%10==1&&n%100!=11?0:n%10>=2&&n%10<=4&&(n%100<10||n%100>=20)?1:2)},5:function(n){return Number(n===0?0:n==1?1:n==2?2:n%100>=3&&n%100<=10?3:n%100>=11?4:5)},6:function(n){return Number(n==1?0:n>=2&&n<=4?1:2)},7:function(n){return Number(n==1?0:n%10>=2&&n%10<=4&&(n%100<10||n%100>=20)?1:2)},8:function(n){return Number(n==1?0:n==2?1:n!=8&&n!=11?2:3)} [...]
+// https://github.com/moment/moment/issues/1423
+c._isAMomentObject=true;c._useUTC=c._isUTC=isUTC;c._l=locale;c._i=input;c._f=format;c._strict=strict;return createFromConfig(c)}function local__createLocal(input,format,locale,strict){return createLocalOrUTC(input,format,locale,strict,false)}var prototypeMin=deprecate("moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(){var other=local__createLocal.apply(null,arguments);return other<this?this:other});var prototypeMax=deprecate("mom [...]
+// https://github.com/moment/moment/pull/1871
+return-Math.round(m._d.getTimezoneOffset()/15)*15}utils_hooks__hooks.updateOffset=function(){};function getSetOffset(input,keepLocalTime){var offset=this._offset||0,localAdjust;if(input!=null){if(typeof input==="string"){input=offsetFromString(input)}if(Math.abs(input)<16){input=input*60}if(!this._isUTC&&keepLocalTime){localAdjust=getDateOffset(this)}this._offset=input;this._isUTC=true;if(localAdjust!=null){this.add(localAdjust,"m")}if(offset!==input){if(!keepLocalTime||this._changeInPro [...]
+// inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js
+var Y=iso_string__abs(this.years());var M=iso_string__abs(this.months());var D=iso_string__abs(this.days());var h=iso_string__abs(this.hours());var m=iso_string__abs(this.minutes());var s=iso_string__abs(this.seconds()+this.milliseconds()/1e3);var total=this.asSeconds();if(!total){return"P0D"}return(total<0?"-":"")+"P"+(Y?Y+"Y":"")+(M?M+"M":"")+(D?D+"D":"")+(h||m||s?"T":"")+(h?h+"H":"")+(m?m+"M":"")+(s?s+"S":"")}var duration_prototype__proto=Duration.prototype;duration_prototype__proto.a [...]
  * For information see https://github.com/ypid/opening_hours.js
- * and the doc directory which contains internal documentation and design.
+ * and the docs directory which contains internal documentation and design.
  */
-/* jshint laxbreak: true */
-/* jshint boss: true */
-/* jshint loopfunc: true */
-
-(function (root, factory) {
-	/* constants (holidays, error correction) {{{ */
-	/* holidays {{{ */
-	/*
-	 * The country code keys and the PH, SH keys are surrounded by '':
-	 * :%s/^\s\+\zs"\([^"]\+\)"\(: {\)/'\1'\2/
-	 * Fixed the indention with Vim Marco:
-	 * /'PH'<cr>f{jVk%k,a:
-	 * Fixed spacing in parenthesis:
-	 * :%s/\[\zs\([^ ]\)/ \1/e | %s/\([^ ]\)\]/\1 \]/e | %s/,\([^ ]\)/, \1/e
-	 */
-	var holidays = {
-		'fr': { // {{{
-			'PH': { // http://fr.wikipedia.org/wiki/F%C3%AAtes_et_jours_f%C3%A9ri%C3%A9s_en_France
-				"Jour de l'an"                          : [  1,  1 ],
-				"Vendredi saint"                        : [  'easter', -2, [ 'Moselle', 'Bas-Rhin', 'Haut-Rhin', 'Guadeloupe', 'Martinique', 'Polynésie française' ] ],
-				"Lundi de Pâques"                       : [  'easter', 1 ],
-				"Saint-Pierre-Chanel"                   : [  4, 28, [ 'Wallis-et-Futuna' ] ],
-				"Fête du Travail"                       : [  5,  1 ],
-				"Fête de la Victoire"                   : [  5,  8 ],
-				"Abolition de l'esclavage (Martinique)" : [  5, 22, [ 'Martinique' ] ],
-				"Abolition de l'esclavage (Guadeloupe)" : [  5, 27, [ 'Guadeloupe' ] ],
-				"Jeudi de l'Ascension"                  : [  'easter', 39 ],
-				"Lundi de Pentecôte"                    : [  'easter', 50 ],
-				"Abolition de l'esclavage (Guyane)"     : [  6, 10, [ 'Guyane' ] ],
-				"Fête de l'autonomie"                   : [  6, 29, [ 'Polynésie française' ] ],
-				"Fête nationale"                        : [  7, 14 ],
-				"Fête Victor Schoelcher"                : [  7, 21, [ 'Guadeloupe', 'Martinique' ] ],
-				"Fête du Territoire"                    : [  7, 29, [ 'Wallis-et-Futuna' ] ],
-				"Assomption"                            : [  8, 15 ],
-				"Fête de la citoyenneté"                : [  9, 24, [ 'Nouvelle-Calédonie' ] ],
-				"Toussaint"                             : [ 11,  1 ],
-				"Armistice"                             : [ 11, 11 ],
-				"Abolition de l'esclavage (Réunion)"    : [ 12, 20, [ 'Réunion' ] ],
-				"Noël"                                  : [ 12, 25 ],
-				"Saint-Étienne "                        : [ 12, 26, [ 'Moselle', 'Bas-Rhin', 'Haut-Rhin' ] ]
-			}
-		}, // }}}
-		'de': { // {{{
-			'PH': { // http://de.wikipedia.org/wiki/Feiertage_in_Deutschland
-				'Neujahrstag'               : [  1,  1 ], // month 1, day 1, whole Germany
-				'Heilige Drei Könige'       : [  1,  6, [ 'Baden-Württemberg', 'Bayern', 'Sachsen-Anhalt'] ], // only in the specified states
-				'Tag der Arbeit'            : [  5,  1 ], // whole Germany
-				'Karfreitag'                : [ 'easter', -2 ], // two days before easter
-				'Ostersonntag'              : [ 'easter',  0, [ 'Brandenburg'] ],
-				'Ostermontag'               : [ 'easter',  1 ],
-				'Christi Himmelfahrt'       : [ 'easter', 39 ],
-				'Pfingstsonntag'            : [ 'easter', 49, [ 'Brandenburg'] ],
-				'Pfingstmontag'             : [ 'easter', 50 ],
-				'Fronleichnam'              : [ 'easter', 60, [ 'Baden-Württemberg', 'Bayern', 'Hessen', 'Nordrhein-Westfalen', 'Rheinland-Pfalz', 'Saarland' ] ],
-				'Mariä Himmelfahrt'         : [  8, 15, [ 'Saarland'] ],
-				'Tag der Deutschen Einheit' : [ 10,  3 ],
-				'Reformationstag'           : [ 10, 31, [ 'Brandenburg', 'Mecklenburg-Vorpommern', 'Sachsen', 'Sachsen-Anhalt', 'Thüringen'] ],
-				'Allerheiligen'             : [ 11,  1, [ 'Baden-Württemberg', 'Bayern', 'Nordrhein-Westfalen', 'Rheinland-Pfalz', 'Saarland' ] ],
-				'1. Weihnachtstag'          : [ 12, 25 ],
-				'2. Weihnachtstag'          : [ 12, 26 ],
-				// 'Silvester'              : [ 12, 31 ], // for testing
-			},
-			'Baden-Württemberg': { // does only apply in Baden-Württemberg
-				// This more specific rule set overwrites the country wide one (they are just ignored).
-				// You may use this instead of the country wide with some
-				// additional holidays for some states, if one state
-				// totally disagrees about how to do holidays …
-				// 'PH': {
-				//     '2. Weihnachtstag'          : [ 12, 26 ],
-				// },
-
-				// school holiday normally variate between states
-				'SH': [ // generated by convert_ical_to_json
-						// You may can adjust this script to use other resources (for other countries) too.
-					{
-						name: 'Osterferien',
-						2005: [  3, 24, /* to */  3, 24,   3, 29, /* to */  4,  2 ],
-						2006: [  4, 18, /* to */  4, 22 ],
-						2007: [  4,  2, /* to */  4, 14 ],
-						2008: [  3, 17, /* to */  3, 28 ],
-						2009: [  4,  9, /* to */  4,  9,   4, 14, /* to */  4, 17 ],
-						2010: [  4,  1, /* to */  4,  1,   4,  6, /* to */  4, 10 ],
-						2011: [  4, 21, /* to */  4, 21,   4, 26, /* to */  4, 30 ],
-						2012: [  4,  2, /* to */  4, 13 ],
-						2013: [  3, 25, /* to */  4,  5 ],
-						2014: [  4, 14, /* to */  4, 25 ],
-						2015: [  3, 30, /* to */  4, 10 ],
-						2016: [  3, 29, /* to */  4,  2 ],
-						2017: [  4, 10, /* to */  4, 21 ],
-					},
-					{
-						name: 'Pfingstferien',
-						2005: [  5, 17, /* to */  5, 28 ],
-						2006: [  5, 29, /* to */  6, 10 ],
-						2007: [  5, 29, /* to */  6,  9 ],
-						2008: [  5, 13, /* to */  5, 23 ],
-						2009: [  5, 25, /* to */  6,  6 ],
-						2010: [  5, 25, /* to */  6,  5 ],
-						2011: [  6, 14, /* to */  6, 25 ],
-						2012: [  5, 29, /* to */  6,  9 ],
-						2013: [  5, 21, /* to */  6,  1 ],
-						2014: [  6, 10, /* to */  6, 21 ],
-						2015: [  5, 26, /* to */  6,  6 ],
-						2016: [  5, 17, /* to */  5, 28 ],
-						2017: [  6,  6, /* to */  6, 16 ],
-					},
-					{
-						name: 'Sommerferien',
-						2005: [  7, 28, /* to */  9, 10 ],
-						2006: [  8,  3, /* to */  9, 16 ],
-						2007: [  7, 26, /* to */  9,  8 ],
-						2008: [  7, 24, /* to */  9,  6 ],
-						2009: [  7, 30, /* to */  9, 12 ],
-						2010: [  7, 29, /* to */  9, 11 ],
-						2011: [  7, 28, /* to */  9, 10 ],
-						2012: [  7, 26, /* to */  9,  8 ],
-						2013: [  7, 25, /* to */  9,  7 ],
-						2014: [  7, 31, /* to */  9, 13 ],
-						2015: [  7, 30, /* to */  9, 12 ],
-						2016: [  7, 28, /* to */  9, 10 ],
-						2017: [  7, 27, /* to */  9,  9 ],
-					},
-					{
-						name: 'Herbstferien',
-						2005: [ 11,  2, /* to */ 11,  4 ],
-						2006: [ 10, 30, /* to */ 11,  3 ],
-						2007: [ 10, 29, /* to */ 11,  3 ],
-						2008: [ 10, 27, /* to */ 10, 31 ],
-						2009: [ 10, 26, /* to */ 10, 31 ],
-						2010: [ 11,  2, /* to */ 11,  6 ],
-						2011: [ 10, 31, /* to */ 10, 31,  11,  2, /* to */ 11,  4 ],
-						2012: [ 10, 29, /* to */ 11,  2 ],
-						2013: [ 10, 28, /* to */ 10, 30 ],
-						2014: [ 10, 27, /* to */ 10, 30 ],
-						2015: [ 11,  2, /* to */ 11,  6 ],
-						2016: [ 11,  2, /* to */ 11,  4 ],
-					},
-					{
-						name: 'Weihnachtsferien',
-						2005: [ 12, 22, /* to */  1,  5 ],
-						2006: [ 12, 27, /* to */  1,  5 ],
-						2007: [ 12, 24, /* to */  1,  5 ],
-						2008: [ 12, 22, /* to */  1, 10 ],
-						2009: [ 12, 23, /* to */  1,  9 ],
-						2010: [ 12, 23, /* to */  1,  8 ],
-						2011: [ 12, 23, /* to */  1,  5 ],
-						2012: [ 12, 24, /* to */  1,  5 ],
-						2013: [ 12, 23, /* to */  1,  4 ],
-						2014: [ 12, 22, /* to */  1,  5 ],
-						2015: [ 12, 23, /* to */  1,  9 ],
-						2016: [ 12, 23, /* to */  1,  7 ],
-					},
-				],
-			},
-			'Mecklenburg-Vorpommern': {
-				'SH': [
-					{
-						name: 'Winterferien',
-						2010: [  2,  6, /* to */  2, 20 ],
-						2011: [  2,  7, /* to */  2, 19 ],
-						2012: [  2,  6, /* to */  2, 17 ],
-						2013: [  2,  4, /* to */  2, 15 ],
-						2014: [  2,  3, /* to */  2, 15 ],
-						2015: [  2,  2, /* to */  2, 14 ],
-						2016: [  2,  1, /* to */  2, 13 ],
-						2017: [  2,  6, /* to */  2, 18 ],
-					},
-					{
-						name: 'Osterferien',
-						2010: [  3, 29, /* to */  4,  7 ],
-						2011: [  4, 16, /* to */  4, 27 ],
-						2012: [  4,  2, /* to */  4, 11 ],
-						2013: [  3, 25, /* to */  4,  3 ],
-						2014: [  4, 14, /* to */  4, 23 ],
-						2015: [  3, 30, /* to */  4,  8 ],
-						2016: [  3, 21, /* to */  3, 30 ],
-						2017: [  4, 10, /* to */  4, 19 ],
-					},
-					{
-						name: 'Pfingstferien',
-						2010: [  5, 21, /* to */  5, 22 ],
-						2011: [  6, 10, /* to */  6, 14 ],
-						2012: [  5, 25, /* to */  5, 29 ],
-						2013: [  5, 17, /* to */  5, 21 ],
-						2014: [  6,  6, /* to */  6, 10 ],
-						2015: [  5, 22, /* to */  5, 26 ],
-						2016: [  5, 14, /* to */  5, 17 ],
-						2017: [  6,  2, /* to */  6,  6 ],
-					},
-					{
-						name: 'Sommerferien',
-						2010: [  7, 12, /* to */  8, 21 ],
-						2011: [  7,  4, /* to */  8, 13 ],
-						2012: [  6, 23, /* to */  8,  4 ],
-						2013: [  6, 22, /* to */  8,  3 ],
-						2014: [  7, 14, /* to */  8, 23 ],
-						2015: [  7, 20, /* to */  8, 29 ],
-						2016: [  7, 25, /* to */  9,  3 ],
-						2017: [  7, 24, /* to */  9,  2 ],
-					},
-					{
-						name: 'Herbstferien',
-						2010: [ 10, 18, /* to */ 10, 23 ],
-						2011: [ 10, 17, /* to */ 10, 21 ],
-						2012: [ 10,  1, /* to */ 10,  5 ],
-						2013: [ 10, 14, /* to */ 10, 19 ],
-						2014: [ 10, 20, /* to */ 10, 25 ],
-						2015: [ 10, 24, /* to */ 10, 30 ],
-						2016: [ 10, 24, /* to */ 10, 28 ],
-					},
-					{
-						name: 'Weihnachtsferien',
-						2010: [ 12, 23, /* to */ 12, 31 ],
-						2011: [ 12, 23, /* to */  1,  3 ],
-						2012: [ 12, 21, /* to */  1,  4 ],
-						2013: [ 12, 23, /* to */  1,  3 ],
-						2014: [ 12, 22, /* to */  1,  2 ],
-						2015: [ 12, 21, /* to */  1,  2 ],
-						2016: [ 12, 22, /* to */  1,  2 ],
-					},
-				],
-			},
-			'Hessen': {
-				'SH': [
-					{
-						name: 'Osterferien',
-						2010: [  3, 29, /* to */  4, 10 ],
-						2011: [  4, 18, /* to */  4, 30 ],
-						2012: [  4,  2, /* to */  4, 14 ],
-						2013: [  3, 25, /* to */  4,  6 ],
-						2014: [  4, 14, /* to */  4, 26 ],
-						2015: [  3, 30, /* to */  4, 11 ],
-						2016: [  3, 29, /* to */  4,  9 ],
-						2017: [  4,  3, /* to */  4, 15 ],
-						2018: [  3, 26, /* to */  4,  7 ],
-					},
-					{
-						name: 'Sommerferien',
-						2010: [  7,  5, /* to */  8, 14 ],
-						2011: [  6, 27, /* to */  8,  5 ],
-						2012: [  7,  2, /* to */  8, 10 ],
-						2013: [  7,  8, /* to */  8, 16 ],
-						2014: [  7, 28, /* to */  9,  5 ],
-						2015: [  7, 27, /* to */  9,  5 ],
-						2016: [  7, 18, /* to */  8, 26 ],
-						2017: [  7,  3, /* to */  8, 11 ],
-					},
-					{
-						name: 'Herbstferien',
-						2010: [ 10, 11, /* to */ 10, 22 ],
-						2011: [ 10, 10, /* to */ 10, 22 ],
-						2012: [ 10, 15, /* to */ 10, 27 ],
-						2013: [ 10, 14, /* to */ 10, 26 ],
-						2014: [ 10, 20, /* to */ 11,  1 ],
-						2015: [ 10, 19, /* to */ 10, 31 ],
-						2016: [ 10, 17, /* to */ 10, 29 ],
-						2017: [ 10,  9, /* to */ 10, 21 ],
-					},
-					{
-						name: 'Weihnachtsferien',
-						2010: [ 12, 20, /* to */  1,  7 ],
-						2011: [ 12, 21, /* to */  1,  6 ],
-						2012: [ 12, 24, /* to */  1, 12 ],
-						2013: [ 12, 23, /* to */  1, 11 ],
-						2014: [ 12, 22, /* to */  1, 10 ],
-						2015: [ 12, 23, /* to */  1,  9 ],
-						2016: [ 12, 22, /* to */  1,  7 ],
-						2017: [ 12, 24, /* to */  1, 13 ],
-					},
-				],
-			},
-			'Schleswig-Holstein': {
-				'SH': [
-					{
-						name: 'Osterferien',
-						2010: [  4,  3, /* to */  4, 17 ],
-						2011: [  4, 15, /* to */  4, 30 ],
-						2012: [  3, 30, /* to */  4, 13 ],
-						2013: [  3, 25, /* to */  4,  9 ],
-						2014: [  4, 16, /* to */  5,  2 ],
-						2015: [  4,  1, /* to */  4, 17 ],
-						2016: [  3, 24, /* to */  4,  9 ],
-						2017: [  4,  7, /* to */  4, 21 ],
-					},
-					{
-						name: 'Sommerferien',
-						2010: [  7, 12, /* to */  8, 21 ],
-						2011: [  7,  4, /* to */  8, 13 ],
-						2012: [  6, 25, /* to */  8,  4 ],
-						2013: [  6, 24, /* to */  8,  3 ],
-						2014: [  7, 14, /* to */  8, 23 ],
-						2015: [  7, 20, /* to */  8, 29 ],
-						2016: [  7, 25, /* to */  9,  3 ],
-						2017: [  7, 24, /* to */  9,  2 ],
-					},
-					{
-						name: 'Pfingstferien',
-						2011: [  6,  3, /* to */  6,  4 ],
-						2012: [  5, 18, /* to */  5, 18 ],
-						2013: [  5, 10, /* to */  5, 10 ],
-						2014: [  5, 30, /* to */  5, 30 ],
-						2015: [  5, 15, /* to */  5, 15 ],
-						2016: [  5,  6, /* to */  5,  6 ],
-						2017: [  5, 26, /* to */  5, 26 ],
-					},
-					{
-						name: 'Herbstferien',
-						2010: [ 10, 11, /* to */ 10, 23 ],
-						2011: [ 10, 10, /* to */ 10, 22 ],
-						2012: [ 10,  4, /* to */ 10, 19 ],
-						2013: [ 10,  4, /* to */ 10, 18 ],
-						2014: [ 10, 13, /* to */ 10, 25 ],
-						2015: [ 10, 19, /* to */ 10, 31 ],
-						2016: [ 10, 17, /* to */ 10, 29 ],
-					},
-					{
-						name: 'Weihnachtsferien',
-						2010: [ 12, 23, /* to */  1,  7 ],
-						2011: [ 12, 23, /* to */  1,  6 ],
-						2012: [ 12, 24, /* to */  1,  5 ],
-						2013: [ 12, 23, /* to */  1,  6 ],
-						2014: [ 12, 22, /* to */  1,  6 ],
-						2015: [ 12, 21, /* to */  1,  6 ],
-						2016: [ 12, 23, /* to */  1,  6 ],
-					},
-				],
-			},
-			'Berlin': {
-				'SH': [
-					{
-						name: 'Winterferien',
-						2010: [  2,  1, /* to */  2,  6 ],
-						2011: [  1, 31, /* to */  2,  5 ],
-						2012: [  1, 30, /* to */  2,  4 ],
-						2013: [  2,  4, /* to */  2,  9 ],
-						2014: [  2,  3, /* to */  2,  8 ],
-						2015: [  2,  2, /* to */  2,  7 ],
-						2016: [  2,  1, /* to */  2,  6 ],
-						2017: [  1, 30, /* to */  2,  4 ],
-					},
-					{
-						name: 'Osterferien',
-						2010: [  3, 31, /* to */  4, 10 ],
-						2011: [  4, 18, /* to */  4, 30 ],
-						2012: [  4,  2, /* to */  4, 14,   4, 30, /* to */  4, 30 ],
-						2013: [  3, 25, /* to */  4,  6 ],
-						2014: [  4, 14, /* to */  4, 26,   5,  2, /* to */  5,  2 ],
-						2015: [  3, 30, /* to */  4, 11 ],
-						2016: [  3, 21, /* to */  4,  2 ],
-						2017: [  4, 10, /* to */  4, 22 ],
-					},
-					{
-						name: 'Pfingstferien',
-						2010: [  5, 14, /* to */  5, 14,   5, 25, /* to */  5, 25 ],
-						2011: [  6,  3, /* to */  6,  3 ],
-						2012: [  5, 18, /* to */  5, 18 ],
-						2013: [  5, 10, /* to */  5, 10,   5, 21, /* to */  5, 21 ],
-						2014: [  5, 30, /* to */  5, 30 ],
-						2015: [  5, 15, /* to */  5, 15 ],
-						2016: [  5,  6, /* to */  5,  6,   5, 17, /* to */  5, 17 ],
-						2017: [  5, 26, /* to */  5, 26 ],
-					},
-					{
-						name: 'Sommerferien',
-						2010: [  7,  7, /* to */  8, 21 ],
-						2011: [  6, 29, /* to */  8, 12 ],
-						2012: [  6, 20, /* to */  8,  3 ],
-						2013: [  6, 19, /* to */  8,  2 ],
-						2014: [  7,  9, /* to */  8, 22 ],
-						2015: [  7, 15, /* to */  8, 28 ],
-						2016: [  7, 20, /* to */  9,  2 ],
-						2017: [  7, 19, /* to */  9,  1 ],
-					},
-					{
-						name: 'Herbstferien',
-						2010: [ 10, 11, /* to */ 10, 23 ],
-						2011: [ 10,  4, /* to */ 10, 14 ],
-						2012: [ 10,  1, /* to */ 10, 13 ],
-						2013: [  9, 30, /* to */ 10, 12 ],
-						2014: [ 10, 20, /* to */ 11,  1 ],
-						2015: [ 10, 19, /* to */ 10, 31 ],
-						2016: [ 10, 17, /* to */ 10, 28 ],
-					},
-					{
-						name: 'Weihnachtsferien',
-						2010: [ 12, 23, /* to */  1,  1 ],
-						2011: [ 12, 23, /* to */  1,  3 ],
-						2012: [ 12, 24, /* to */  1,  4 ],
-						2013: [ 12, 23, /* to */  1,  3 ],
-						2014: [ 12, 22, /* to */  1,  2 ],
-						2015: [ 12, 23, /* to */  1,  2 ],
-						2016: [ 12, 23, /* to */  1,  3 ],
-					},
-				],
-			},
-			'Saarland': {
-				'SH': [
-					{
-						name: 'Winterferien',
-						2010: [  2, 15, /* to */  2, 20 ],
-						2011: [  3,  7, /* to */  3, 12 ],
-						2012: [  2, 20, /* to */  2, 25 ],
-						2013: [  2, 11, /* to */  2, 16 ],
-						2014: [  3,  3, /* to */  3,  8 ],
-						2015: [  2, 16, /* to */  2, 21 ],
-					},
-					{
-						name: 'Osterferien',
-						2010: [  3, 29, /* to */  4, 10 ],
-						2011: [  4, 18, /* to */  4, 30 ],
-						2012: [  4,  2, /* to */  4, 14 ],
-						2013: [  3, 25, /* to */  4,  6 ],
-						2014: [  4, 14, /* to */  4, 26 ],
-						2015: [  3, 30, /* to */  4, 11 ],
-					},
-					{
-						name: 'Sommerferien',
-						2010: [  7,  5, /* to */  8, 14 ],
-						2011: [  6, 24, /* to */  8,  6 ],
-						2012: [  7,  2, /* to */  8, 14 ],
-						2013: [  7,  8, /* to */  8, 17 ],
-						2014: [  7, 28, /* to */  9,  6 ],
-						2015: [  7, 27, /* to */  9,  4 ],
-						2016: [  7, 18, /* to */  8, 26 ],
-						2017: [  7,  3, /* to */  8, 14 ],
-					},
-					{
-						name: 'Herbstferien',
-						2010: [ 10, 11, /* to */ 10, 23 ],
-						2011: [ 10,  4, /* to */ 10, 15 ],
-						2012: [ 10, 22, /* to */ 11,  3 ],
-						2013: [ 10, 21, /* to */ 11,  2 ],
-						2014: [ 10, 20, /* to */ 10, 31 ],
-					},
-					{
-						name: 'Weihnachtsferien',
-						2010: [ 12, 20, /* to */  1,  1 ],
-						2011: [ 12, 23, /* to */  1,  4 ],
-						2012: [ 12, 24, /* to */  1,  5 ],
-						2013: [ 12, 20, /* to */  1,  4 ],
-						2014: [ 12, 22, /* to */  1,  7 ],
-					},
-				],
-			},
-			'Bremen': {
-				'SH': [
-					{
-						name: 'Winterferien',
-						2010: [  2,  1, /* to */  2,  2 ],
-						2011: [  1, 31, /* to */  2,  1 ],
-						2012: [  1, 30, /* to */  1, 31 ],
-						2013: [  1, 31, /* to */  2,  1 ],
-						2014: [  1, 30, /* to */  1, 31 ],
-						2015: [  2,  2, /* to */  2,  3 ],
-						2016: [  1, 28, /* to */  1, 29 ],
-						2017: [  1, 30, /* to */  1, 31 ],
-					},
-					{
-						name: 'Osterferien',
-						2010: [  3, 19, /* to */  4,  6 ],
-						2011: [  4, 16, /* to */  4, 30 ],
-						2012: [  3, 26, /* to */  4, 11,   4, 30, /* to */  4, 30 ],
-						2013: [  3, 16, /* to */  4,  2 ],
-						2014: [  4,  3, /* to */  4, 22,   5,  2, /* to */  5,  2 ],
-						2015: [  3, 25, /* to */  4, 10 ],
-						2016: [  3, 18, /* to */  4,  2 ],
-						2017: [  4, 10, /* to */  4, 22 ],
-					},
-					{
-						name: 'Pfingstferien',
-						2010: [  5, 14, /* to */  5, 14,   5, 25, /* to */  5, 25 ],
-						2011: [  6,  3, /* to */  6,  3,   6, 14, /* to */  6, 14 ],
-						2012: [  5, 18, /* to */  5, 18,   5, 29, /* to */  5, 29 ],
-						2013: [  5, 10, /* to */  5, 10,   5, 21, /* to */  5, 21 ],
-						2014: [  5, 30, /* to */  5, 30,   6, 10, /* to */  6, 10 ],
-						2015: [  5, 15, /* to */  5, 15,   5, 26, /* to */  5, 26 ],
-						2016: [  5,  6, /* to */  5,  6,   5, 17, /* to */  5, 17 ],
-						2017: [  5, 26, /* to */  5, 26,   6,  6, /* to */  6,  6 ],
-					},
-					{
-						name: 'Sommerferien',
-						2010: [  6, 24, /* to */  8,  4 ],
-						2011: [  7,  7, /* to */  8, 17 ],
-						2012: [  7, 23, /* to */  8, 31 ],
-						2013: [  6, 27, /* to */  8,  7 ],
-						2014: [  7, 31, /* to */  9, 10 ],
-						2015: [  7, 23, /* to */  9,  2 ],
-						2016: [  6, 23, /* to */  8,  3 ],
-						2017: [  6, 22, /* to */  8,  2 ],
-					},
-					{
-						name: 'Herbstferien',
-						2010: [ 10,  9, /* to */ 10, 23 ],
-						2011: [ 10, 17, /* to */ 10, 29 ],
-						2012: [ 10, 22, /* to */ 11,  3 ],
-						2013: [ 10,  4, /* to */ 10, 18 ],
-						2014: [ 10, 27, /* to */ 11,  8 ],
-						2015: [ 10, 19, /* to */ 10, 31 ],
-						2016: [ 10,  4, /* to */ 10, 15 ],
-					},
-					{
-						name: 'Weihnachtsferien',
-						2010: [ 12, 22, /* to */  1,  5 ],
-						2011: [ 12, 23, /* to */  1,  4 ],
-						2012: [ 12, 24, /* to */  1,  5 ],
-						2013: [ 12, 23, /* to */  1,  3 ],
-						2014: [ 12, 22, /* to */  1,  5 ],
-						2015: [ 12, 23, /* to */  1,  6 ],
-						2016: [ 12, 21, /* to */  1,  6 ],
-					},
-				],
-			},
-			'Bayern': {
-				'SH': [
-					{
-						name: 'Winterferien',
-						2010: [  2, 15, /* to */  2, 20 ],
-						2011: [  3,  7, /* to */  3, 11 ],
-						2012: [  2, 20, /* to */  2, 24 ],
-						2013: [  2, 11, /* to */  2, 15 ],
-						2014: [  3,  3, /* to */  3,  7 ],
-						2015: [  2, 16, /* to */  2, 20 ],
-						2016: [  2,  8, /* to */  2, 12 ],
-						2017: [  2, 27, /* to */  3,  3 ],
-					},
-					{
-						name: 'Osterferien',
-						2010: [  3, 29, /* to */  4, 10 ],
-						2011: [  4, 18, /* to */  4, 30 ],
-						2012: [  4,  2, /* to */  4, 14 ],
-						2013: [  3, 25, /* to */  4,  6 ],
-						2014: [  4, 14, /* to */  4, 26 ],
-						2015: [  3, 30, /* to */  4, 11 ],
-						2016: [  3, 21, /* to */  4,  1 ],
-						2017: [  4, 10, /* to */  4, 22 ],
-					},
-					{
-						name: 'Pfingstferien',
-						2010: [  5, 25, /* to */  6,  5 ],
-						2011: [  6, 14, /* to */  6, 25 ],
-						2012: [  5, 29, /* to */  6,  9 ],
-						2013: [  5, 21, /* to */  5, 31 ],
-						2014: [  6, 10, /* to */  6, 21 ],
-						2015: [  5, 26, /* to */  6,  5 ],
-						2016: [  5, 17, /* to */  5, 28 ],
-						2017: [  6,  6, /* to */  6, 16 ],
-					},
-					{
-						name: 'Sommerferien',
-						2010: [  8,  2, /* to */  9, 13 ],
-						2011: [  7, 30, /* to */  9, 12 ],
-						2012: [  8,  1, /* to */  9, 12 ],
-						2013: [  7, 31, /* to */  9, 11 ],
-						2014: [  7, 30, /* to */  9, 15 ],
-						2015: [  8,  1, /* to */  9, 14 ],
-						2016: [  7, 30, /* to */  9, 12 ],
-						2017: [  7, 29, /* to */  9, 11 ],
-					},
-					{
-						name: 'Herbstferien',
-						2010: [ 11,  2, /* to */ 11,  5 ],
-						2011: [ 10, 31, /* to */ 11,  5 ],
-						2012: [ 10, 29, /* to */ 11,  3 ],
-						2013: [ 10, 28, /* to */ 10, 31 ],
-						2014: [ 10, 27, /* to */ 10, 31 ],
-						2015: [ 11,  2, /* to */ 11,  7 ],
-						2016: [ 10, 31, /* to */ 11,  4 ],
-					},
-					{
-						name: 'Weihnachtsferien',
-						2010: [ 12, 24, /* to */  1,  7 ],
-						2011: [ 12, 27, /* to */  1,  5 ],
-						2012: [ 12, 24, /* to */  1,  5 ],
-						2013: [ 12, 23, /* to */  1,  4 ],
-						2014: [ 12, 24, /* to */  1,  5 ],
-						2015: [ 12, 24, /* to */  1,  5 ],
-						2016: [ 12, 24, /* to */  1,  5 ],
-					},
-				],
-			},
-			'Niedersachsen': {
-				'SH': [
-					{
-						name: 'Winterferien',
-						2010: [  2,  1, /* to */  2,  2 ],
-						2011: [  1, 31, /* to */  2,  1 ],
-						2012: [  1, 30, /* to */  1, 31 ],
-						2013: [  1, 31, /* to */  2,  1 ],
-						2014: [  1, 30, /* to */  1, 31 ],
-						2015: [  2,  2, /* to */  2,  3 ],
-						2016: [  1, 28, /* to */  1, 29 ],
-						2017: [  1, 30, /* to */  1, 31 ],
-					},
-					{
-						name: 'Osterferien',
-						2010: [  3, 19, /* to */  4,  6 ],
-						2011: [  4, 16, /* to */  4, 30 ],
-						2012: [  3, 26, /* to */  4, 11,   4, 30, /* to */  4, 30 ],
-						2013: [  3, 16, /* to */  4,  2 ],
-						2014: [  4,  3, /* to */  4, 22,   5,  2, /* to */  5,  2 ],
-						2015: [  3, 25, /* to */  4, 10 ],
-						2016: [  3, 18, /* to */  4,  2 ],
-						2017: [  4, 10, /* to */  4, 22 ],
-					},
-					{
-						name: 'Pfingstferien',
-						2010: [  5, 14, /* to */  5, 14,   5, 25, /* to */  5, 25 ],
-						2011: [  6,  3, /* to */  6,  3,   6, 14, /* to */  6, 14 ],
-						2012: [  5, 18, /* to */  5, 18,   5, 29, /* to */  5, 29 ],
-						2013: [  5, 10, /* to */  5, 10,   5, 21, /* to */  5, 21 ],
-						2014: [  5, 30, /* to */  5, 30,   6, 10, /* to */  6, 10 ],
-						2015: [  5, 15, /* to */  5, 15,   5, 26, /* to */  5, 26 ],
-						2016: [  5,  6, /* to */  5,  6,   5, 17, /* to */  5, 17 ],
-						2017: [  5, 26, /* to */  5, 26,   6,  6, /* to */  6,  6 ],
-					},
-					{
-						name: 'Sommerferien',
-						2010: [  6, 24, /* to */  8,  4 ],
-						2011: [  7,  7, /* to */  8, 17 ],
-						2012: [  7, 23, /* to */  8, 31 ],
-						2013: [  6, 27, /* to */  8,  7 ],
-						2014: [  7, 31, /* to */  9, 10 ],
-						2015: [  7, 23, /* to */  9,  2 ],
-						2016: [  6, 23, /* to */  8,  3 ],
-						2017: [  6, 22, /* to */  8,  2 ],
-					},
-					{
-						name: 'Herbstferien',
-						2010: [ 10,  9, /* to */ 10, 23 ],
-						2011: [ 10, 17, /* to */ 10, 29 ],
-						2012: [ 10, 22, /* to */ 11,  3 ],
-						2013: [ 10,  4, /* to */ 10, 18 ],
-						2014: [ 10, 27, /* to */ 11,  8 ],
-						2015: [ 10, 19, /* to */ 10, 31 ],
-						2016: [ 10,  4, /* to */ 10, 15 ],
-					},
-					{
-						name: 'Weihnachtsferien',
-						2010: [ 12, 22, /* to */  1,  5 ],
-						2011: [ 12, 23, /* to */  1,  4 ],
-						2012: [ 12, 24, /* to */  1,  5 ],
-						2013: [ 12, 23, /* to */  1,  3 ],
-						2014: [ 12, 22, /* to */  1,  5 ],
-						2015: [ 12, 23, /* to */  1,  6 ],
-						2016: [ 12, 21, /* to */  1,  6 ],
-					},
-				],
-			},
-			'Nordrhein-Westfalen': {
-				'SH': [
-					{
-						name: 'Osterferien',
-						2010: [  3, 27, /* to */  4, 10 ],
-						2011: [  4, 18, /* to */  4, 30 ],
-						2012: [  4,  2, /* to */  4, 14 ],
-						2013: [  3, 25, /* to */  4,  6 ],
-						2014: [  4, 14, /* to */  4, 26 ],
-						2015: [  3, 30, /* to */  4, 11 ],
-						2016: [  3, 21, /* to */  4,  2 ],
-						2017: [  4, 10, /* to */  4, 22 ],
-					},
-					{
-						name: 'Pfingstferien',
-						2010: [  5, 25, /* to */  5, 25 ],
-						2012: [  5, 29, /* to */  5, 29 ],
-						2013: [  5, 21, /* to */  5, 21 ],
-						2014: [  6, 10, /* to */  6, 10 ],
-						2015: [  5, 26, /* to */  5, 26 ],
-						2016: [  5, 17, /* to */  5, 17 ],
-						2017: [  6,  6, /* to */  6,  6 ],
-					},
-					{
-						name: 'Sommerferien',
-						2010: [  7, 15, /* to */  8, 27 ],
-						2011: [  7, 25, /* to */  9,  6 ],
-						2012: [  7,  9, /* to */  8, 21 ],
-						2013: [  7, 22, /* to */  9,  3 ],
-						2014: [  7,  7, /* to */  8, 19 ],
-						2015: [  6, 29, /* to */  8, 11 ],
-						2016: [  7, 11, /* to */  8, 23 ],
-						2017: [  7, 17, /* to */  8, 29 ],
-					},
-					{
-						name: 'Herbstferien',
-						2010: [ 10, 11, /* to */ 10, 23 ],
-						2011: [ 10, 24, /* to */ 11,  5 ],
-						2012: [ 10,  8, /* to */ 10, 20 ],
-						2013: [ 10, 21, /* to */ 11,  2 ],
-						2014: [ 10,  6, /* to */ 10, 18 ],
-						2015: [ 10,  5, /* to */ 10, 17 ],
-						2016: [ 10, 10, /* to */ 10, 21 ],
-					},
-					{
-						name: 'Weihnachtsferien',
-						2010: [ 12, 24, /* to */  1,  8 ],
-						2011: [ 12, 23, /* to */  1,  6 ],
-						2012: [ 12, 21, /* to */  1,  4 ],
-						2013: [ 12, 23, /* to */  1,  7 ],
-						2014: [ 12, 22, /* to */  1,  6 ],
-						2015: [ 12, 23, /* to */  1,  6 ],
-						2016: [ 12, 23, /* to */  1,  6 ],
-					},
-				],
-			},
-			'Sachsen': {
-				'SH': [
-					{
-						name: 'Winterferien',
-						2010: [  2,  8, /* to */  2, 20 ],
-						2011: [  2, 12, /* to */  2, 26 ],
-						2012: [  2, 13, /* to */  2, 25 ],
-						2013: [  2,  4, /* to */  2, 15 ],
-						2014: [  2, 17, /* to */  3,  1 ],
-						2015: [  2,  9, /* to */  2, 21 ],
-						2016: [  2,  8, /* to */  2, 20 ],
-						2017: [  2, 13, /* to */  2, 24 ],
-					},
-					{
-						name: 'Osterferien',
-						2010: [  4,  1, /* to */  4, 10 ],
-						2011: [  4, 22, /* to */  4, 30 ],
-						2012: [  4,  6, /* to */  4, 14 ],
-						2013: [  3, 29, /* to */  4,  6 ],
-						2014: [  4, 18, /* to */  4, 26 ],
-						2015: [  4,  2, /* to */  4, 11 ],
-						2016: [  3, 25, /* to */  4,  2 ],
-						2017: [  4, 13, /* to */  4, 22 ],
-					},
-					{
-						name: 'Pfingstferien',
-						2010: [  5, 14, /* to */  5, 14 ],
-						2011: [  6,  3, /* to */  6,  3 ],
-						2012: [  5, 18, /* to */  5, 18 ],
-						2013: [  5, 10, /* to */  5, 10,   5, 18, /* to */  5, 22 ],
-						2014: [  5, 30, /* to */  5, 30 ],
-						2015: [  5, 15, /* to */  5, 15 ],
-						2016: [  5,  6, /* to */  5,  6 ],
-						2017: [  5, 26, /* to */  5, 26 ],
-					},
-					{
-						name: 'Sommerferien',
-						2010: [  6, 28, /* to */  8,  6 ],
-						2011: [  7, 11, /* to */  8, 19 ],
-						2012: [  7, 23, /* to */  8, 31 ],
-						2013: [  7, 15, /* to */  8, 23 ],
-						2014: [  7, 21, /* to */  8, 29 ],
-						2015: [  7, 13, /* to */  8, 21 ],
-						2016: [  6, 27, /* to */  8,  5 ],
-						2017: [  6, 26, /* to */  8,  4 ],
-					},
-					{
-						name: 'Herbstferien',
-						2010: [ 10,  4, /* to */ 10, 16 ],
-						2011: [ 10, 17, /* to */ 10, 28 ],
-						2012: [ 10, 22, /* to */ 11,  2 ],
-						2013: [ 10, 21, /* to */ 11,  1 ],
-						2014: [ 10, 20, /* to */ 10, 31 ],
-						2015: [ 10, 12, /* to */ 10, 24 ],
-						2016: [ 10,  3, /* to */ 10, 15 ],
-					},
-					{
-						name: 'Weihnachtsferien',
-						2010: [ 12, 23, /* to */  1,  1 ],
-						2011: [ 12, 23, /* to */  1,  2 ],
-						2012: [ 12, 22, /* to */  1,  2 ],
-						2013: [ 12, 21, /* to */  1,  3 ],
-						2014: [ 12, 22, /* to */  1,  3 ],
-						2015: [ 12, 21, /* to */  1,  2 ],
-						2016: [ 12, 23, /* to */  1,  2 ],
-					},
-				],
-			},
-			'Thüringen': {
-				'SH': [
-					{
-						name: 'Winterferien',
-						2010: [  2,  1, /* to */  2,  6 ],
-						2011: [  1, 31, /* to */  2,  5 ],
-						2012: [  2,  6, /* to */  2, 11 ],
-						2013: [  2, 18, /* to */  2, 23 ],
-						2014: [  2, 17, /* to */  2, 22 ],
-						2015: [  2,  2, /* to */  2,  7 ],
-						2016: [  2,  1, /* to */  2,  6 ],
-						2017: [  2,  6, /* to */  2, 11 ],
-					},
-					{
-						name: 'Osterferien',
-						2010: [  3, 29, /* to */  4,  9 ],
-						2011: [  4, 18, /* to */  4, 30 ],
-						2012: [  4,  2, /* to */  4, 13 ],
-						2013: [  3, 25, /* to */  4,  6 ],
-						2014: [  4, 19, /* to */  5,  2 ],
-						2015: [  3, 30, /* to */  4, 11 ],
-						2016: [  3, 24, /* to */  4,  2 ],
-						2017: [  4, 10, /* to */  4, 21 ],
-					},
-					{
-						name: 'Sommerferien',
-						2010: [  6, 24, /* to */  8,  4 ],
-						2011: [  7, 11, /* to */  8, 19 ],
-						2012: [  7, 23, /* to */  8, 31 ],
-						2013: [  7, 15, /* to */  8, 23 ],
-						2014: [  7, 21, /* to */  8, 29 ],
-						2015: [  7, 13, /* to */  8, 21 ],
-						2016: [  6, 27, /* to */  8, 10 ],
-						2017: [  6, 26, /* to */  8,  9 ],
-					},
-					{
-						name: 'Pfingstferien',
-						2011: [  6, 11, /* to */  6, 14 ],
-						2012: [  5, 25, /* to */  5, 29 ],
-						2013: [  5, 10, /* to */  5, 10 ],
-						2014: [  5, 30, /* to */  5, 30 ],
-						2015: [  5, 15, /* to */  5, 15 ],
-						2016: [  5,  6, /* to */  5,  6 ],
-						2017: [  5, 26, /* to */  5, 26 ],
-					},
-					{
-						name: 'Herbstferien',
-						2010: [ 10,  9, /* to */ 10, 23 ],
-						2011: [ 10, 17, /* to */ 10, 28 ],
-						2012: [ 10, 22, /* to */ 11,  3 ],
-						2013: [ 10, 21, /* to */ 11,  2 ],
-						2014: [ 10,  6, /* to */ 10, 18 ],
-						2015: [ 10,  5, /* to */ 10, 17 ],
-						2016: [ 10, 10, /* to */ 10, 22 ],
-					},
-					{
-						name: 'Weihnachtsferien',
-						2010: [ 12, 23, /* to */  1,  1 ],
-						2011: [ 12, 23, /* to */  1,  1 ],
-						2012: [ 12, 24, /* to */  1,  5 ],
-						2013: [ 12, 23, /* to */  1,  4 ],
-						2014: [ 12, 22, /* to */  1,  3 ],
-						2015: [ 12, 23, /* to */  1,  2 ],
-						2016: [ 12, 23, /* to */ 12, 31 ],
-					},
-				],
-			},
-			'Hamburg': {
-				'SH': [
-					{
-						name: 'Winterferien',
-						2010: [  1, 29, /* to */  1, 29 ],
-						2011: [  1, 31, /* to */  1, 31 ],
-						2012: [  1, 30, /* to */  1, 30 ],
-						2013: [  2,  1, /* to */  2,  1 ],
-						2014: [  1, 31, /* to */  1, 31 ],
-						2015: [  1, 30, /* to */  1, 30 ],
-						2016: [  1, 29, /* to */  1, 29 ],
-						2017: [  1, 30, /* to */  1, 30 ],
-					},
-					{
-						name: 'Osterferien',
-						2010: [  3,  8, /* to */  3, 20 ],
-						2011: [  3,  7, /* to */  3, 18 ],
-						2012: [  3,  5, /* to */  3, 16 ],
-						2013: [  3,  4, /* to */  3, 15 ],
-						2014: [  3,  3, /* to */  3, 14 ],
-						2015: [  3,  2, /* to */  3, 13 ],
-						2016: [  3,  7, /* to */  3, 18 ],
-						2017: [  3,  6, /* to */  3, 17 ],
-					},
-					{
-						name: 'Pfingstferien',
-						2010: [  5, 14, /* to */  5, 22 ],
-						2011: [  4, 26, /* to */  4, 29,   6,  3, /* to */  6,  3 ],
-						2012: [  4, 30, /* to */  5,  4,   5, 18, /* to */  5, 18 ],
-						2013: [  5,  2, /* to */  5, 10 ],
-						2014: [  4, 28, /* to */  5,  2,   5, 30, /* to */  5, 30 ],
-						2015: [  5, 11, /* to */  5, 15 ],
-						2016: [  5,  6, /* to */  5,  6,   5, 17, /* to */  5, 20 ],
-						2017: [  5, 22, /* to */  5, 26 ],
-					},
-					{
-						name: 'Sommerferien',
-						2010: [  7,  8, /* to */  8, 18 ],
-						2011: [  6, 30, /* to */  8, 10 ],
-						2012: [  6, 21, /* to */  8,  1 ],
-						2013: [  6, 20, /* to */  7, 31 ],
-						2014: [  7, 10, /* to */  8, 20 ],
-						2015: [  7, 16, /* to */  8, 26 ],
-						2016: [  7, 21, /* to */  8, 31 ],
-						2017: [  7, 20, /* to */  8, 30 ],
-					},
-					{
-						name: 'Herbstferien',
-						2010: [ 10,  4, /* to */ 10, 15 ],
-						2011: [ 10,  4, /* to */ 10, 14 ],
-						2012: [ 10,  1, /* to */ 10, 12 ],
-						2013: [  9, 30, /* to */ 10, 11 ],
-						2014: [ 10, 13, /* to */ 10, 24 ],
-						2015: [ 10, 19, /* to */ 10, 30 ],
-						2016: [ 10, 17, /* to */ 10, 28 ],
-					},
-					{
-						name: 'Weihnachtsferien',
-						2010: [ 12, 23, /* to */  1,  3 ],
-						2011: [ 12, 27, /* to */  1,  6 ],
-						2012: [ 12, 21, /* to */  1,  4 ],
-						2013: [ 12, 19, /* to */  1,  3 ],
-						2014: [ 12, 22, /* to */  1,  6 ],
-						2015: [ 12, 21, /* to */  1,  1 ],
-						2016: [ 12, 27, /* to */  1,  6 ],
-					},
-				],
-			},
-			'Sachsen-Anhalt': {
-				'SH': [
-					{
-						name: 'Winterferien',
-						2010: [  2,  8, /* to */  2, 13 ],
-						2011: [  2,  5, /* to */  2, 12 ],
-						2012: [  2,  4, /* to */  2, 11 ],
-						2013: [  2,  1, /* to */  2,  8 ],
-						2014: [  2,  1, /* to */  2, 12 ],
-						2015: [  2,  2, /* to */  2, 14 ],
-						2016: [  2,  1, /* to */  2, 10 ],
-						2017: [  2,  4, /* to */  2, 11 ],
-					},
-					{
-						name: 'Osterferien',
-						2010: [  3, 29, /* to */  4,  9 ],
-						2011: [  4, 18, /* to */  4, 27 ],
-						2012: [  4,  2, /* to */  4,  7 ],
-						2013: [  3, 25, /* to */  3, 30 ],
-						2014: [  4, 14, /* to */  4, 17 ],
-						2015: [  4,  2, /* to */  4,  2 ],
-						2016: [  3, 24, /* to */  3, 24 ],
-						2017: [  4, 10, /* to */  4, 13 ],
-					},
-					{
-						name: 'Pfingstferien',
-						2010: [  5, 14, /* to */  5, 22 ],
-						2011: [  6, 14, /* to */  6, 18 ],
-						2012: [  5, 18, /* to */  5, 25 ],
-						2013: [  5, 10, /* to */  5, 18 ],
-						2014: [  5, 30, /* to */  6,  7 ],
-						2015: [  5, 15, /* to */  5, 23 ],
-						2016: [  5,  6, /* to */  5, 14 ],
-						2017: [  5, 26, /* to */  5, 26 ],
-					},
-					{
-						name: 'Sommerferien',
-						2010: [  6, 24, /* to */  8,  4 ],
-						2011: [  7, 11, /* to */  8, 24 ],
-						2012: [  7, 23, /* to */  9,  5 ],
-						2013: [  7, 15, /* to */  8, 28 ],
-						2014: [  7, 21, /* to */  9,  3 ],
-						2015: [  7, 13, /* to */  8, 26 ],
-						2016: [  6, 27, /* to */  8, 10 ],
-						2017: [  6, 26, /* to */  8,  9 ],
-					},
-					{
-						name: 'Herbstferien',
-						2010: [ 10, 18, /* to */ 10, 23 ],
-						2011: [ 10, 17, /* to */ 10, 22 ],
-						2012: [ 10, 29, /* to */ 11,  2 ],
-						2013: [ 10, 21, /* to */ 10, 25 ],
-						2014: [ 10, 27, /* to */ 10, 30 ],
-						2015: [ 10, 17, /* to */ 10, 24 ],
-						2016: [ 10,  4, /* to */ 10, 15 ],
-					},
-					{
-						name: 'Weihnachtsferien',
-						2010: [ 12, 22, /* to */  1,  5 ],
-						2011: [ 12, 22, /* to */  1,  7 ],
-						2012: [ 12, 19, /* to */  1,  4 ],
-						2013: [ 12, 21, /* to */  1,  3 ],
-						2014: [ 12, 22, /* to */  1,  5 ],
-						2015: [ 12, 21, /* to */  1,  5 ],
-						2016: [ 12, 19, /* to */  1,  2 ],
-					},
-				],
-			},
-			'Rheinland-Pfalz': {
-				'SH': [
-					{
-						name: 'Osterferien',
-						2010: [  3, 26, /* to */  4,  9 ],
-						2011: [  4, 18, /* to */  4, 29 ],
-						2012: [  3, 29, /* to */  4, 13 ],
-						2013: [  3, 20, /* to */  4,  5 ],
-						2014: [  4, 11, /* to */  4, 25 ],
-						2015: [  3, 26, /* to */  4, 10 ],
-						2016: [  3, 18, /* to */  4,  1 ],
-						2017: [  4, 10, /* to */  4, 21 ],
-					},
-					{
-						name: 'Sommerferien',
-						2010: [  7,  5, /* to */  8, 13 ],
-						2011: [  6, 27, /* to */  8,  5 ],
-						2012: [  7,  2, /* to */  8, 10 ],
-						2013: [  7,  8, /* to */  8, 16 ],
-						2014: [  7, 28, /* to */  9,  5 ],
-						2015: [  7, 27, /* to */  9,  4 ],
-						2016: [  7, 18, /* to */  8, 26 ],
-						2017: [  7,  3, /* to */  8, 11 ],
-					},
-					{
-						name: 'Herbstferien',
-						2010: [ 10, 11, /* to */ 10, 22 ],
-						2011: [ 10,  4, /* to */ 10, 14 ],
-						2012: [ 10,  1, /* to */ 10, 12 ],
-						2013: [ 10,  4, /* to */ 10, 18 ],
-						2014: [ 10, 20, /* to */ 10, 31 ],
-						2015: [ 10, 19, /* to */ 10, 30 ],
-						2016: [ 10, 10, /* to */ 10, 21 ],
-					},
-					{
-						name: 'Weihnachtsferien',
-						2010: [ 12, 23, /* to */  1,  7 ],
-						2011: [ 12, 22, /* to */  1,  6 ],
-						2012: [ 12, 20, /* to */  1,  4 ],
-						2013: [ 12, 23, /* to */  1,  7 ],
-						2014: [ 12, 22, /* to */  1,  7 ],
-						2015: [ 12, 23, /* to */  1,  8 ],
-						2016: [ 12, 22, /* to */  1,  6 ],
-					},
-				],
-			},
-			'Brandenburg': {
-				'SH': [
-					{
-						name: 'Winterferien',
-						2010: [  2,  1, /* to */  2,  6 ],
-						2011: [  1, 31, /* to */  2,  5 ],
-						2012: [  1, 30, /* to */  2,  4 ],
-						2013: [  2,  4, /* to */  2,  9 ],
-						2014: [  2,  3, /* to */  2,  8 ],
-						2015: [  2,  2, /* to */  2,  7 ],
-						2016: [  2,  1, /* to */  2,  6 ],
-						2017: [  1, 30, /* to */  2,  4 ],
-					},
-					{
-						name: 'Osterferien',
-						2010: [  3, 31, /* to */  4, 10 ],
-						2011: [  4, 20, /* to */  4, 30 ],
-						2012: [  4,  4, /* to */  4, 14,   4, 30, /* to */  4, 30 ],
-						2013: [  3, 27, /* to */  4,  6 ],
-						2014: [  4, 16, /* to */  4, 26,   5,  2, /* to */  5,  2 ],
-						2015: [  4,  1, /* to */  4, 11 ],
-						2016: [  3, 23, /* to */  4,  2 ],
-						2017: [  4, 12, /* to */  4, 22 ],
-					},
-					{
-						name: 'Pfingstferien',
-						2010: [  5, 14, /* to */  5, 14 ],
-						2011: [  6,  3, /* to */  6,  3 ],
-						2012: [  5, 18, /* to */  5, 18 ],
-						2013: [  5, 10, /* to */  5, 10 ],
-						2014: [  5, 30, /* to */  5, 30 ],
-						2015: [  5, 15, /* to */  5, 15 ],
-						2016: [  5,  6, /* to */  5,  6,   5, 17, /* to */  5, 17 ],
-						2017: [  5, 26, /* to */  5, 26 ],
-					},
-					{
-						name: 'Sommerferien',
-						2010: [  7,  8, /* to */  8, 21 ],
-						2011: [  6, 30, /* to */  8, 13 ],
-						2012: [  6, 21, /* to */  8,  3 ],
-						2013: [  6, 20, /* to */  8,  2 ],
-						2014: [  7, 10, /* to */  8, 22 ],
-						2015: [  7, 16, /* to */  8, 28 ],
-						2016: [  7, 21, /* to */  9,  3 ],
-						2017: [  7, 20, /* to */  9,  1 ],
-					},
-					{
-						name: 'Herbstferien',
-						2010: [ 10, 11, /* to */ 10, 23 ],
-						2011: [ 10,  4, /* to */ 10, 14 ],
-						2012: [ 10,  1, /* to */ 10, 13 ],
-						2013: [  9, 30, /* to */ 10, 12,  11,  1, /* to */ 11,  1 ],
-						2014: [ 10, 20, /* to */ 11,  1 ],
-						2015: [ 10, 19, /* to */ 10, 30 ],
-						2016: [ 10, 17, /* to */ 10, 28 ],
-					},
-					{
-						name: 'Weihnachtsferien',
-						2010: [ 12, 23, /* to */  1,  1 ],
-						2011: [ 12, 23, /* to */  1,  3 ],
-						2012: [ 12, 24, /* to */  1,  4 ],
-						2013: [ 12, 23, /* to */  1,  3 ],
-						2014: [ 12, 22, /* to */  1,  2 ],
-						2015: [ 12, 23, /* to */  1,  2 ],
-						2016: [ 12, 23, /* to */  1,  3 ],
-					},
-				],
-			},
-		}, // }}}
-		'at': { // {{{
-			'PH': { // http://de.wikipedia.org/wiki/Feiertage_in_%C3%96sterreich
-				'Neujahrstag'                : [  1,  1 ],
-				'Heilige Drei Könige'        : [  1,  6 ],
-				// 'Josef'                   : [  3, 19, [ 'Kärnten', 'Steiermark', 'Tirol', 'Vorarlberg' ] ],
-				// 'Karfreitag'              : [ 'easter', -2 ],
-				'Ostermontag'                : [ 'easter',  1 ],
-				'Staatsfeiertag'             : [  5,  1 ],
-				// 'Florian'                 : [  5,  4, [ 'Oberösterreich' ] ],
-				'Christi Himmelfahrt'        : [ 'easter', 39 ],
-				'Pfingstmontag'              : [ 'easter', 50 ],
-				'Fronleichnam'               : [ 'easter', 60 ],
-				'Mariä Himmelfahrt'          : [  8, 15 ],
-				// 'Rupert'                  : [  9, 24, [ 'Salzburg' ] ],
-				// 'Tag der Volksabstimmung' : [ 10, 10, [ 'Kärnten' ] ],
-				'Nationalfeiertag'           : [ 10, 26 ],
-				'Allerheiligen'              : [ 11,  1 ],
-				// 'Martin'                  : [ 11, 11, [ 'Burgenland' ] ],
-				// 'Leopold'                 : [ 11, 15, [ 'Niederösterreich', 'Wien' ] ],
-				'Mariä Empfängnis'           : [ 12,  8 ],
-				// 'Heiliger Abend'          : [ 12, 24 ],
-				'Christtag'                  : [ 12, 25 ],
-				'Stefanitag'                 : [ 12, 26 ],
-				// 'Silvester'               : [ 12, 31 ],
-			},
-		}, // }}}
-		'ca': { // {{{
-			'PH': { // https://en.wikipedia.org/wiki/Public_holidays_in_Canada
-				"New Year's Day" : [  1,  1 ],
-				"Good Friday"    : [  'easter', -2 ],
-				"Canada Day"     : [  'canadaDay', 0 ],
-				"Labour Day"     : [  'firstSeptemberMonday', 0 ],
-				"Christmas Day"  : [ 12, 25 ]
-			},
-			'Alberta': {
-				'PH': {
-					"New Year's Day"     : [  1,  1 ],
-					"Alberta Family Day" : [  'firstFebruaryMonday', 14 ],
-					"Good Friday"        : [  'easter', -2 ],
-					"Easter Monday"      : [  'easter', 1 ],
-					"Victoria Day"       : [  'victoriaDay', 0 ],
-					"Canada Day"         : [  'canadaDay', 0 ],
-					"Heritage Day"       : [  'firstAugustMonday', 0 ],
-					"Labour Day"         : [  'firstSeptemberMonday', 0 ],
-					"Thanksgiving"       : [  'firstOctoberMonday', 7 ],
-					"Remembrance Day"    : [ 11, 11 ],
-					"Christmas Day"      : [ 12, 25 ],
-					"Boxing Day"         : [ 12, 26 ]
-				},
-			},
-			'British Columbia': {
-				'PH': {
-					"New Year's Day"       : [  1,  1 ],
-					"Family Day"           : [  'firstFebruaryMonday', 7 ],
-					"Good Friday"          : [  'easter', -2 ],
-					"Victoria Day"         : [  'victoriaDay', 0 ],
-					"Canada Day"           : [  'canadaDay', 0 ],
-					"British Columbia Day" : [  'firstAugustMonday', 0 ],
-					"Labour Day"           : [  'firstSeptemberMonday', 0 ],
-					"Thanksgiving"         : [  'firstOctoberMonday', 7 ],
-					"Remembrance Day"      : [ 11, 11 ],
-					"Christmas Day"        : [ 12, 25 ]
-				},
-			},
-			'Manitoba': {
-				'PH': {
-					"New Year's Day"  : [  1,  1 ],
-					"Louis Riel Day"  : [  'firstFebruaryMonday', 14 ],
-					"Good Friday"     : [  'easter', -2 ],
-					"Victoria Day"    : [  'victoriaDay', 0 ],
-					"Canada Day"      : [  'canadaDay', 0 ],
-					"Civic Holiday"   : [  'firstAugustMonday', 0 ],
-					"Labour Day"      : [  'firstSeptemberMonday', 0 ],
-					"Thanksgiving"    : [  'firstOctoberMonday', 7 ],
-					"Remembrance Day" : [ 11, 11 ],
-					"Christmas Day"   : [ 12, 25 ]
-				},
-			},
-			'New Brunswick': {
-				'PH': {
-					"New Year's Day"    : [  1,  1 ],
-					"Good Friday"       : [  'easter', -2 ],
-					"Victoria Day"      : [  'victoriaDay', 0 ],
-					"Canada Day"        : [  'canadaDay', 0 ],
-					"New Brunswick Day" : [  'firstAugustMonday', 0 ],
-					"Labour Day"        : [  'firstSeptemberMonday', 0 ],
-					"Thanksgiving"      : [  'firstOctoberMonday', 7 ],
-					"Remembrance Day"   : [ 11, 11 ],
-					"Christmas Day"     : [ 12, 25 ],
-					"Boxing Day"        : [ 12, 26 ]
-				},
-			},
-			'Newfoundland and Labrador': {
-				'PH': {
-					"New Year's Day"      : [  1,  1 ],
-					"Saint Patrick's Day" : [  3, 17 ],
-					"Good Friday"         : [  'easter', -2 ],
-					"Saint George's Day"  : [  4, 23 ],
-					"Discovery Day"       : [  6, 24 ],
-					"Memorial Day"        : [  7, 1 ],
-					"Orangemen's Day"     : [  7, 12 ],
-					"Labour Day"          : [  'firstSeptemberMonday', 0 ],
-					"Armistice Day"       : [ 11, 11 ],
-					"Christmas Day"       : [ 12, 25 ]
-				},
-			},
-			'Northwest Territories': {
-				'PH': {
-					"New Year's Day"          : [  1,  1 ],
-					"Good Friday"             : [  'easter', -2 ],
-					"Victoria Day"            : [  'victoriaDay', 0 ],
-					"National Aboriginal Day" : [  6, 21 ],
-					"Canada Day"              : [  'canadaDay', 0 ],
-					"Civic Holiday"           : [  'firstAugustMonday', 0 ],
-					"Labour Day"              : [  'firstSeptemberMonday', 0 ],
-					"Thanksgiving"            : [  'firstOctoberMonday', 7 ],
-					"Remembrance Day"         : [ 11, 11 ],
-					"Christmas Day"           : [ 12, 25 ]
-				},
-			},
-			'Nova Scotia': {
-				'PH': {
-					"New Year's Day"  : [  1,  1 ],
-					"Good Friday"     : [  'easter', -2 ],
-					"Victoria Day"    : [  'victoriaDay', 0 ],
-					"Canada Day"      : [  'canadaDay', 0 ],
-					"Natal Day"       : [  'firstAugustMonday', 0 ],
-					"Labour Day"      : [  'firstSeptemberMonday', 0 ],
-					"Thanksgiving"    : [  'firstOctoberMonday', 7 ],
-					"Remembrance Day" : [ 11, 11 ],
-					"Christmas Day"   : [ 12, 25 ],
-					"Boxing Day"      : [ 12, 26 ]
-				},
-			},
-			'Nunavut': {
-				'PH': {
-					"New Year's Day"  : [  1,  1 ],
-					"Good Friday"     : [  'easter', -2 ],
-					"Victoria Day"    : [  'victoriaDay', 0 ],
-					"Canada Day"      : [  'canadaDay', 0 ],
-					"Nunavut Day"     : [  7, 9 ],
-					"Civic Holiday"   : [  'firstAugustMonday', 0 ],
-					"Labour Day"      : [  'firstSeptemberMonday', 0 ],
-					"Thanksgiving"    : [  'firstOctoberMonday', 7 ],
-					"Remembrance Day" : [ 11, 11 ],
-					"Christmas Day"   : [ 12, 25 ]
-				},
-			},
-			'Ontario': {
-				'PH': {
-					"New Year's Day"              : [  1,  1 ],
-					"Family Day"                  : [  'firstFebruaryMonday', 14 ],
-					"Good Friday"                 : [  'easter', -2 ],
-					"Victoria Day"                : [  'victoriaDay', 0 ],
-					"Canada Day"                  : [  'canadaDay', 0 ],
-					"August Civic Public Holiday" : [  'firstAugustMonday', 0 ],
-					"Labour Day"                  : [  'firstSeptemberMonday', 0 ],
-					"Thanksgiving"                : [  'firstOctoberMonday', 7 ],
-					"Remembrance Day"             : [ 11, 11 ],
-					"Christmas Day"               : [ 12, 25 ],
-					"Boxing Day"                  : [ 12, 26 ]
-				},
-			},
-			'Prince Edward Island': {
-				'PH': {
-					"New Year's Day"      : [  1,  1 ],
-					"Islander Day"        : [  'firstFebruaryMonday', 14 ],
-					"Good Friday"         : [  'easter', -2 ],
-					"Easter Monday"       : [  'easter', 1 ],
-					"Victoria Day"        : [  'victoriaDay', 0 ],
-					"Canada Day"          : [  'canadaDay', 0 ],
-					"Civic Holiday"       : [  'firstAugustMonday', 0 ],
-					"Gold Cup Parade Day" : [  'firstAugustMonday', 18 ],
-					"Labour Day"          : [  'firstSeptemberMonday', 0 ],
-					"Thanksgiving"        : [  'firstOctoberMonday', 7 ],
-					"Remembrance Day"     : [ 11, 11 ],
-					"Christmas Day"       : [ 12, 25 ],
-					"Boxing Day"          : [ 12, 26 ]
-				},
-			},
-			'Quebec': {
-				'PH': {
-					"Jour de l'an"                    : [  1,  1 ],
-					"Vendredi saint"                  : [  'easter', -2 ],
-					"Lundi de Pâques"                 : [  'easter', 1 ],
-					"Journée nationale des patriotes" : [  'victoriaDay', 0 ],
-					"Fête nationale du Québec"        : [  6, 24 ],
-					"Fête du Canada"                  : [  'canadaDay', 0 ],
-					"Fête du Travail"                 : [  'firstSeptemberMonday', 0 ],
-					"Jour de l'Action de grâce"       : [  'firstOctoberMonday', 7 ],
-					"Noël"                            : [ 12, 25 ]
-				},
-			},
-			'Saskatchewan': {
-				'PH': {
-					"New Year's Day"   : [  1,  1 ],
-					"Family Day"       : [  'firstFebruaryMonday', 14 ],
-					"Good Friday"      : [  'easter', -2 ],
-					"Victoria Day"     : [  'victoriaDay', 0 ],
-					"Canada Day"       : [  'canadaDay', 0 ],
-					"Saskatchewan Day" : [  'firstAugustMonday', 0 ],
-					"Labour Day"       : [  'firstSeptemberMonday', 0 ],
-					"Thanksgiving"     : [  'firstOctoberMonday', 7 ],
-					"Remembrance Day"  : [ 11, 11 ],
-					"Christmas Day"    : [ 12, 25 ]
-				},
-			},
-			'Yukon': {
-				'PH': {
-					"New Year's Day"  : [  1,  1 ],
-					"Heritage Day"    : [  'lastFebruarySunday',  -2 ],
-					"Good Friday"     : [  'easter', -2 ],
-					"Easter Monday"   : [  'easter', 1 ],
-					"Victoria Day"    : [  'victoriaDay', 0 ],
-					"Canada Day"      : [  'canadaDay', 0 ],
-					"Discovery Day"   : [  'firstAugustMonday', 14 ],
-					"Labour Day"      : [  'firstSeptemberMonday', 0 ],
-					"Thanksgiving"    : [  'firstOctoberMonday', 7 ],
-					"Remembrance Day" : [ 11, 11 ],
-					"Christmas Day"   : [ 12, 25 ],
-					"Boxing Day"      : [ 12, 26 ]
-				},
-			},
-		}, // }}}
-		'ru': { // {{{
-			'PH': { // https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B0%D0%B7%D0%B4%D0%BD%D0%B8%D0%BA%D0%B8_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8
-				"1. Новогодние каникулы":     [ 1, 1 ],
-				"2. Новогодние каникулы":     [ 1, 2 ],
-				"3. Новогодние каникулы":     [ 1, 3 ],
-				"4. Новогодние каникулы":     [ 1, 4 ],
-				"5. Новогодние каникулы":     [ 1, 5 ],
-				"6. Новогодние каникулы":     [ 1, 6 ],
-				"Рождество Христово":         [ 1, 7 ],
-				"8. Новогодние каникулы":     [ 1, 8 ],
-				"День защитника Отечества":   [ 2, 23 ],
-				"Международный женский день": [ 3, 8 ],
-				"День Победы":                [ 5, 9 ],
-				"Праздник Весны и Труда":     [ 5, 1 ],
-				"День народного единства":    [ 11, 4 ],
-				"День России":                [ 6, 12 ],
-			},
-			'Tatarstan': { // https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B0%D0%B7%D0%B4%D0%BD%D0%B8%D0%BA%D0%B8_%D0%A2%D0%B0%D1%82%D0%B0%D1%80%D1%81%D1%82%D0%B0%D0%BD%D0%B0
-				'PH': {
-					"1. Новогодние каникулы":                [ 1, 1 ],
-					"2. Новогодние каникулы":                [ 1, 2 ],
-					"3. Новогодние каникулы":                [ 1, 3 ],
-					"4. Новогодние каникулы":                [ 1, 4 ],
-					"5. Новогодние каникулы":                [ 1, 5 ],
-					"6. Новогодние каникулы":                [ 1, 6 ],
-					"Рождество Христово":                    [ 1, 7 ],
-					"8. Новогодние каникулы":                [ 1, 8 ],
-					"День защитника Отечества":              [ 2, 23 ],
-					"Международный женский день":            [ 3, 8 ],
-					"День Победы":                           [ 5, 9 ],
-					"Праздник Весны и Труда":                [ 5, 1 ],
-					"День народного единства":               [ 11, 4 ],
-					"День России":                           [ 6, 12 ],
-					// local
-					"Ураза-байрам":                          [ 7, 28 ],
-					"День Республики Татарстан":             [ 8, 30 ],
-					"Курбан-байрам":                         [ 10, 4 ],
-					"День Конституции Республики Татарстан": [ 11, 6 ],
-				},
-			},
-			'Bashkortostan': { // https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B0%D0%B7%D0%B4%D0%BD%D0%B8%D0%BA%D0%B8_%D0%91%D0%B0%D1%88%D0%BA%D0%BE%D1%80%D1%82%D0%BE%D1%81%D1%82%D0%B0%D0%BD%D0%B0
-				'PH': {
-					"1. Новогодние каникулы":               [ 1, 1 ],
-					"2. Новогодние каникулы":           [ 1, 2 ],
-					"3. Новогодние каникулы":           [ 1, 3 ],
-					"4. Новогодние каникулы":           [ 1, 4 ],
-					"5. Новогодние каникулы":           [ 1, 5 ],
-					"6. Новогодние каникулы":           [ 1, 6 ],
-					"Рождество Христово":               [ 1, 7 ],
-					"8. Новогодние каникулы":           [ 1, 8 ],
-					"День защитника Отечества":         [ 2, 23 ],
-					"Международный женский день":       [ 3, 8 ],
-					"День Победы":                      [ 5, 9 ],
-					"Праздник Весны и Труда":           [ 5, 1 ],
-					"День народного единства":          [ 11, 4 ],
-					"День России":                      [ 6, 12 ],
-					// local
-					"Ураза-байрам":                     [ 7, 28 ],
-					"Курбан-байрам":                    [ 10, 4 ],
-					"День Республики Башкирии":         [ 10, 11 ],
-					"День Конституции Башкортостана":   [ 12, 24 ],
-				},
-			},
-			'Chuvashia': {
-				'PH': {
-					"1. Новогодние каникулы":           [ 1, 1 ],
-					"2. Новогодние каникулы":           [ 1, 2 ],
-					"3. Новогодние каникулы":           [ 1, 3 ],
-					"4. Новогодние каникулы":           [ 1, 4 ],
-					"5. Новогодние каникулы":           [ 1, 5 ],
-					"6. Новогодние каникулы":           [ 1, 6 ],
-					"Рождество Христово":               [ 1, 7 ],
-					"8. Новогодние каникулы":           [ 1, 8 ],
-					"День защитника Отечества":         [ 2, 23 ],
-					"Международный женский день":       [ 3, 8 ],
-					"День Победы":                      [ 5, 9 ],
-					"Праздник Весны и Труда":           [ 5, 1 ],
-					"День народного единства":          [ 11, 4 ],
-					"День России":                      [ 6, 12 ],
-					// local
-					"День Чувашской республики":        [ 6, 24 ],
-				},
-			},
-			'Sakha Republic': { // https://ru.wikipedia.org/wiki/%D0%AF%D0%BA%D1%83%D1%82%D0%B8%D1%8F#.D0.9F.D1.80.D0.B0.D0.B7.D0.B4.D0.BD.D0.B8.D0.BA.D0.B8_.D0.AF.D0.BA.D1.83.D1.82.D0.B8.D0.B8
-				'PH': {
-					"1. Новогодние каникулы":                 [ 1, 1 ],
-					"2. Новогодние каникулы":                 [ 1, 2 ],
-					"3. Новогодние каникулы":                 [ 1, 3 ],
-					"4. Новогодние каникулы":                 [ 1, 4 ],
-					"5. Новогодние каникулы":                 [ 1, 5 ],
-					"6. Новогодние каникулы":                 [ 1, 6 ],
-					"Рождество Христово":                     [ 1, 7 ],
-					"8. Новогодние каникулы":                 [ 1, 8 ],
-					"День защитника Отечества":               [ 2, 23 ],
-					"Международный женский день":             [ 3, 8 ],
-					"День Победы":                            [ 5, 9 ],
-					"Праздник Весны и Труда":                 [ 5, 1 ],
-					"День народного единства":                [ 11, 4 ],
-					"День России":                            [ 6, 12 ],
-					// local
-					"День Республики Саха":                   [ 4, 27 ],
-					"Ысыах":                                  [ 6, 23 ],
-					"День государственности Республики Саха": [ 9, 27 ],
-				},
-			},
-			'Republic of Kalmykia': { // https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B0%D0%B7%D0%B4%D0%BD%D0%B8%D0%BA%D0%B8_%D0%B8_%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D0%BD%D1%8B%D0%B5_%D0%B4%D0%B0%D1%82%D1%8B_%D0%9A%D0%B0%D0%BB%D0%BC%D1%8B%D0%BA%D0%B8%D0%B8
-				'PH': {
-					"1. Новогодние каникулы":                                            [ 1, 1 ],
-					"2. Новогодние каникулы":                                            [ 1, 2 ],
-					"3. Новогодние каникулы":                                            [ 1, 3 ],
-					"4. Новогодние каникулы":                                            [ 1, 4 ],
-					"5. Новогодние каникулы":                                            [ 1, 5 ],
-					"6. Новогодние каникулы":                                            [ 1, 6 ],
-					"Рождество Христово":                                                [ 1, 7 ],
-					"8. Новогодние каникулы":                                            [ 1, 8 ],
-					"День защитника Отечества":                                          [ 2, 23 ],
-					"Международный женский день":                                        [ 3, 8 ],
-					"День Победы":                                                       [ 5, 9 ],
-					"Праздник Весны и Труда":                                            [ 5, 1 ],
-					"День народного единства":                                           [ 11, 4 ],
-					"День России":                                                       [ 6, 12 ],
-					// local
-					"Цаган Сар":                                                         [ 1, 14 ],
-					"День принятия Степного Уложения (Конституции) Республики Калмыкия": [ 4, 5 ],
-					"День рождения Будды Шакьямун":                      				 [ 6, 6 ],
-					"Зул":                      									     [ 12, 15 ],
-					"День памяти жертв депортации калмыцкого народа":                    [ 12, 28 ],
-				},
-			},
-			'Buryatia': { // https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B0%D0%B7%D0%B4%D0%BD%D0%B8%D0%BA%D0%B8_%D0%91%D1%83%D1%80%D1%8F%D1%82%D0%B8%D0%B8
-				'PH': {
-					"1. Новогодние каникулы":     [ 1, 1 ],
-					"2. Новогодние каникулы":     [ 1, 2 ],
-					"3. Новогодние каникулы":     [ 1, 3 ],
-					"4. Новогодние каникулы":     [ 1, 4 ],
-					"5. Новогодние каникулы":     [ 1, 5 ],
-					"6. Новогодние каникулы":     [ 1, 6 ],
-					"Рождество Христово":         [ 1, 7 ],
-					"8. Новогодние каникулы":     [ 1, 8 ],
-					"День защитника Отечества":   [ 2, 23 ],
-					"Международный женский день": [ 3, 8 ],
-					"День Победы":                [ 5, 9 ],
-					"Праздник Весны и Труда":     [ 5, 1 ],
-					"День народного единства":    [ 11, 4 ],
-					"День России":                [ 6, 12 ],
-					//
-					"Сагаалган":                  [ 1, 14 ],
-				},
-			},
-			'Republic of Karelia': { // https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B0%D0%B7%D0%B4%D0%BD%D0%B8%D0%BA%D0%B8_%D0%A0%D0%B5%D1%81%D0%BF%D1%83%D0%B1%D0%BB%D0%B8%D0%BA%D0%B8_%D0%9A%D0%B0%D1%80%D0%B5%D0%BB%D0%B8%D1%8F
-				'PH': {
-					"1. Новогодние каникулы":                              [ 1, 1 ],
-					"2. Новогодние каникулы":                              [ 1, 2 ],
-					"3. Новогодние каникулы":                              [ 1, 3 ],
-					"4. Новогодние каникулы":                              [ 1, 4 ],
-					"5. Новогодние каникулы":                              [ 1, 5 ],
-					"6. Новогодние каникулы":                              [ 1, 6 ],
-					"Рождество Христово":                                  [ 1, 7 ],
-					"8. Новогодние каникулы":                              [ 1, 8 ],
-					"День защитника Отечества":                            [ 2, 23 ],
-					"Международный женский день":                          [ 3, 8 ],
-					"День Победы":                                         [ 5, 9 ],
-					"Праздник Весны и Труда":                              [ 5, 1 ],
-					"День народного единства":                             [ 11, 4 ],
-					"День России":                                         [ 6, 12 ],
-					// local
-					"День Республики Карелия":                             [ 6, 8 ],
-					"День освобождения Карелии от фашистских захватчиков": [ 9, 30 ],
-				},
-			},
-			'Удмуртская республика': {
-				'PH': {
-					"1. Новогодние каникулы":                       [ 1, 1 ],
-					"2. Новогодние каникулы":                       [ 1, 2 ],
-					"3. Новогодние каникулы":                       [ 1, 3 ],
-					"4. Новогодние каникулы":                       [ 1, 4 ],
-					"5. Новогодние каникулы":                       [ 1, 5 ],
-					"6. Новогодние каникулы":                       [ 1, 6 ],
-					"Рождество Христово":                           [ 1, 7 ],
-					"8. Новогодние каникулы":                       [ 1, 8 ],
-					"День защитника Отечества":                     [ 2, 23 ],
-					"Международный женский день":                   [ 3, 8 ],
-					"День Победы":                                  [ 5, 9 ],
-					"Праздник Весны и Труда":                       [ 5, 1 ],
-					"День народного единства":                      [ 11, 4 ],
-					"День России":                                  [ 6, 12 ],
-					// local
-					"День Государственности Удмуртской Республики": [ 5, 31 ],
-				},
-			},
-			'Adygea': {
-				'PH': {
-					"1. Новогодние каникулы":             [ 1, 1 ],
-					"2. Новогодние каникулы":             [ 1, 2 ],
-					"3. Новогодние каникулы":             [ 1, 3 ],
-					"4. Новогодние каникулы":             [ 1, 4 ],
-					"5. Новогодние каникулы":             [ 1, 5 ],
-					"6. Новогодние каникулы":             [ 1, 6 ],
-					"Рождество Христово":                 [ 1, 7 ],
-					"8. Новогодние каникулы":             [ 1, 8 ],
-					"День защитника Отечества":           [ 2, 23 ],
-					"Международный женский день":         [ 3, 8 ],
-					"День Победы":                        [ 5, 9 ],
-					"Праздник Весны и Труда":             [ 5, 1 ],
-					"День народного единства":            [ 11, 4 ],
-					"День России":                        [ 6, 12 ],
-					// local
-					"Ураза-байрам":                       [ 7, 28 ],
-					"Курбан-байрам":                      [ 10, 4 ],
-					"День образования Республики Адыгея": [ 10, 5 ],
-				},
-			},
-			'Republic of Dagestan': { // https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B0%D0%B7%D0%B4%D0%BD%D0%B8%D0%BA%D0%B8_%D0%94%D0%B0%D0%B3%D0%B5%D1%81%D1%82%D0%B0%D0%BD%D0%B0
-				'PH': {
-					"1. Новогодние каникулы":               [ 1, 1 ],
-					"2. Новогодние каникулы":               [ 1, 2 ],
-					"3. Новогодние каникулы":               [ 1, 3 ],
-					"4. Новогодние каникулы":               [ 1, 4 ],
-					"5. Новогодние каникулы":               [ 1, 5 ],
-					"6. Новогодние каникулы":               [ 1, 6 ],
-					"Рождество Христово":                   [ 1, 7 ],
-					"8. Новогодние каникулы":               [ 1, 8 ],
-					"День защитника Отечества":             [ 2, 23 ],
-					"Международный женский день":           [ 3, 8 ],
-					"День Победы":                          [ 5, 9 ],
-					"Праздник Весны и Труда":               [ 5, 1 ],
-					"День народного единства":              [ 11, 4 ],
-					"День России":                          [ 6, 12 ],
-					// local
-					"День Конституции Республики Дагестан": [ 7, 26 ],
-					"Ураза-байрам":                         [ 7, 28 ],
-					"День единства народов Дагестана":      [ 9, 15 ],
-					"Курбан-байрам":                        [ 10, 4 ],
-				},
-			},
-			'Ingushetia': { // https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B0%D0%B7%D0%B4%D0%BD%D0%B8%D0%BA%D0%B8_%D0%98%D0%BD%D0%B3%D1%83%D1%88%D0%B5%D1%82%D0%B8%D0%B8
-				'PH': {
-					"1. Новогодние каникулы":                [ 1, 1 ],
-					"2. Новогодние каникулы":                [ 1, 2 ],
-					"3. Новогодние каникулы":                [ 1, 3 ],
-					"4. Новогодние каникулы":                [ 1, 4 ],
-					"5. Новогодние каникулы":                [ 1, 5 ],
-					"6. Новогодние каникулы":                [ 1, 6 ],
-					"Рождество Христово":                    [ 1, 7 ],
-					"8. Новогодние каникулы":                [ 1, 8 ],
-					"День защитника Отечества":              [ 2, 23 ],
-					"Международный женский день":            [ 3, 8 ],
-					"День Победы":                           [ 5, 9 ],
-					"Праздник Весны и Труда":                [ 5, 1 ],
-					"День народного единства":               [ 11, 4 ],
-					"День России":                           [ 6, 12 ],
-					// local
-					"День образования Республики Ингушетия": [ 6, 4 ],
-					"Ураза-байрам":                          [ 7, 28 ],
-					"Курбан-байрам":                         [ 10, 4 ],
-				},
-			},
-			'Карачаево-Черкесская республика': {
-				'PH': {
-					"1. Новогодние каникулы":                [ 1, 1 ],
-					"2. Новогодние каникулы":                [ 1, 2 ],
-					"3. Новогодние каникулы":                [ 1, 3 ],
-					"4. Новогодние каникулы":                [ 1, 4 ],
-					"5. Новогодние каникулы":                [ 1, 5 ],
-					"6. Новогодние каникулы":                [ 1, 6 ],
-					"Рождество Христово":                    [ 1, 7 ],
-					"8. Новогодние каникулы":                [ 1, 8 ],
-					"День защитника Отечества":              [ 2, 23 ],
-					"Международный женский день":            [ 3, 8 ],
-					"День Победы":                           [ 5, 9 ],
-					"Праздник Весны и Труда":                [ 5, 1 ],
-					"День народного единства":               [ 11, 4 ],
-					"День России":                           [ 6, 12 ],
-					// local
-					"День возрождения карачаевского народа": [ 5, 3 ],
-					"Ураза-байрам":                          [ 7, 28 ],
-					"Курбан-байрам":                         [ 10, 4 ],
-				},
-			},
-			'Chechen Republic': { // https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B0%D0%B7%D0%B4%D0%BD%D0%B8%D0%BA%D0%B8_%D0%A7%D0%B5%D1%87%D0%BD%D0%B8
-				'PH': {
-					"1. Новогодние каникулы":           [ 1, 1 ],
-					"2. Новогодние каникулы":           [ 1, 2 ],
-					"3. Новогодние каникулы":           [ 1, 3 ],
-					"4. Новогодние каникулы":           [ 1, 4 ],
-					"5. Новогодние каникулы":           [ 1, 5 ],
-					"6. Новогодние каникулы":           [ 1, 6 ],
-					"Рождество Христово":               [ 1, 7 ],
-					"8. Новогодние каникулы":           [ 1, 8 ],
-					"День защитника Отечества":         [ 2, 23 ],
-					"Международный женский день":       [ 3, 8 ],
-					"День Победы":                      [ 5, 9 ],
-					"Праздник Весны и Труда":           [ 5, 1 ],
-					"День народного единства":          [ 11, 4 ],
-					"День России":                      [ 6, 12 ],
-					// local
-					"День мира в Чеченской Республике": [ 4, 16 ],
-					"Ураза-байрам":                     [ 7, 28 ],
-					"Курбан-байрам":                    [ 10, 4 ],
-				},
-			},
-			'Кабардино-Балкарская республика': {
-				'PH': {
-					"1. Новогодние каникулы":                                 [ 1, 1 ],
-					"2. Новогодние каникулы":                                 [ 1, 2 ],
-					"3. Новогодние каникулы":                                 [ 1, 3 ],
-					"4. Новогодние каникулы":                                 [ 1, 4 ],
-					"5. Новогодние каникулы":                                 [ 1, 5 ],
-					"6. Новогодние каникулы":                                 [ 1, 6 ],
-					"Рождество Христово":                                     [ 1, 7 ],
-					"8. Новогодние каникулы":                                 [ 1, 8 ],
-					"День защитника Отечества":                               [ 2, 23 ],
-					"Международный женский день":                             [ 3, 8 ],
-					"День Победы":                                            [ 5, 9 ],
-					"Праздник Весны и Труда":                                 [ 5, 1 ],
-					"День народного единства":                                [ 11, 4 ],
-					"День России":                                            [ 6, 12 ],
-					// local
-					"День возрождения балкарского народа":                    [ 3, 28 ],
-					"Черкесский день траура":                                 [ 5, 21 ],
-					"Ураза-байрам":                                           [ 7, 28 ],
-					"День государственности Кабардино-Балкарской Республики": [ 9, 1 ],
-					"Курбан-байрам":                                          [ 10, 4 ],
-				},
-			},
-			'Altai Republic': {
-				'PH': {
-					"1. Новогодние каникулы":           [ 1, 1 ],
-					"2. Новогодние каникулы":           [ 1, 2 ],
-					"3. Новогодние каникулы":           [ 1, 3 ],
-					"4. Новогодние каникулы":           [ 1, 4 ],
-					"5. Новогодние каникулы":           [ 1, 5 ],
-					"6. Новогодние каникулы":           [ 1, 6 ],
-					"Рождество Христово":               [ 1, 7 ],
-					"8. Новогодние каникулы":           [ 1, 8 ],
-					"День защитника Отечества":         [ 2, 23 ],
-					"Международный женский день":       [ 3, 8 ],
-					"День Победы":                      [ 5, 9 ],
-					"Праздник Весны и Труда":           [ 5, 1 ],
-					"День народного единства":          [ 11, 4 ],
-					"День России":                      [ 6, 12 ],
-					// local
-					"Чага-Байрам":                      [ 1, 14 ],
-				},
-			},
-			'Tuva': {
-				'PH': {
-					"1. Новогодние каникулы":           [ 1, 1 ],
-					"2. Новогодние каникулы":           [ 1, 2 ],
-					"3. Новогодние каникулы":           [ 1, 3 ],
-					"4. Новогодние каникулы":           [ 1, 4 ],
-					"5. Новогодние каникулы":           [ 1, 5 ],
-					"6. Новогодние каникулы":           [ 1, 6 ],
-					"Рождество Христово":               [ 1, 7 ],
-					"8. Новогодние каникулы":           [ 1, 8 ],
-					"День защитника Отечества":         [ 2, 23 ],
-					"Международный женский день":       [ 3, 8 ],
-					"День Победы":                      [ 5, 9 ],
-					"Праздник Весны и Труда":           [ 5, 1 ],
-					"День народного единства":          [ 11, 4 ],
-					"День России":                      [ 6, 12 ],
-					// local
-					"Народный праздник Шагаа":          [ 1, 14 ],
-					"День Республики Тыва":             [ 8, 15 ],
-				},
-			},
-			'Saratov Oblast': {
-				'PH': {
-					"1. Новогодние каникулы":           [ 1, 1 ],
-					"2. Новогодние каникулы":           [ 1, 2 ],
-					"3. Новогодние каникулы":           [ 1, 3 ],
-					"4. Новогодние каникулы":           [ 1, 4 ],
-					"5. Новогодние каникулы":           [ 1, 5 ],
-					"6. Новогодние каникулы":           [ 1, 6 ],
-					"Рождество Христово":               [ 1, 7 ],
-					"8. Новогодние каникулы":           [ 1, 8 ],
-					"День защитника Отечества":         [ 2, 23 ],
-					"Международный женский день":       [ 3, 8 ],
-					"День Победы":                      [ 5, 9 ],
-					"Праздник Весны и Труда":           [ 5, 1 ],
-					"День народного единства":          [ 11, 4 ],
-					"День России":                      [ 6, 12 ],
-					// local
-					"Радоница":                         [ 4, 29 ],
-				},
-			},
-			'Bryansk Oblast': {
-				'PH': {
-					"1. Новогодние каникулы":           [ 1, 1 ],
-					"2. Новогодние каникулы":           [ 1, 2 ],
-					"3. Новогодние каникулы":           [ 1, 3 ],
-					"4. Новогодние каникулы":           [ 1, 4 ],
-					"5. Новогодние каникулы":           [ 1, 5 ],
-					"6. Новогодние каникулы":           [ 1, 6 ],
-					"Рождество Христово":               [ 1, 7 ],
-					"8. Новогодние каникулы":           [ 1, 8 ],
-					"День защитника Отечества":         [ 2, 23 ],
-					"Международный женский день":       [ 3, 8 ],
-					"День Победы":                      [ 5, 9 ],
-					"Праздник Весны и Труда":           [ 5, 1 ],
-					"День народного единства":          [ 11, 4 ],
-					"День России":                      [ 6, 12 ],
-					// local
-					"Радоница":                         [ 4, 29 ],
-					"День освобождения города Брянска": [ 9, 17 ],
-				},
-			},
-			'Komi Republic': {
-				'PH': {
-					"1. Новогодние каникулы":     [ 1, 1 ],
-					"2. Новогодние каникулы":     [ 1, 2 ],
-					"3. Новогодние каникулы":     [ 1, 3 ],
-					"4. Новогодние каникулы":     [ 1, 4 ],
-					"5. Новогодние каникулы":     [ 1, 5 ],
-					"6. Новогодние каникулы":     [ 1, 6 ],
-					"Рождество Христово":         [ 1, 7 ],
-					"8. Новогодние каникулы":     [ 1, 8 ],
-					"День защитника Отечества":   [ 2, 23 ],
-					"Международный женский день": [ 3, 8 ],
-					"День Победы":                [ 5, 9 ],
-					"Праздник Весны и Труда":     [ 5, 1 ],
-					"День народного единства":    [ 11, 4 ],
-					"День России":                [ 6, 12 ],
-					// local
-					"День Республики Коми":       [ 8, 22 ],
-				},
-			},
-		}, // }}}
-		'ua': { // {{{
-			'PH': { // http://uk.wikipedia.org/wiki/%D0%A1%D0%B2%D1%8F%D1%82%D0%B0_%D1%82%D0%B0_%D0%BF%D0%B0%D0%BC%27%D1%8F%D1%82%D0%BD%D1%96_%D0%B4%D0%BD%D1%96_%D0%B2_%D0%A3%D0%BA%D1%80%D0%B0%D1%97%D0%BD%D1%96
-				"Новий рік"                 : [  1,  1 ],
-				"Різдво"                    : [  1,  7 ],
-				"Міжнародний жіночий день"  : [  3,  8 ],
-				"Великдень"                 : [ 'orthodox easter',  1 ],
-				"День Праці 1"              : [  5,  1 ],
-				"День Праці 2"              : [  5,  2 ],
-				"День Перемоги"             : [  5,  9 ],
-				"День Конституції України"  : [  6, 28 ],
-				"День Незалежності України" : [  8, 24 ],
-			}
-		}, // }}}
-		'us': { // {{{
-			'PH': { // https://en.wikipedia.org/wiki/Public_holidays_in_the_United_States
-				"New Year's Day"   : [ 1, 1 ],
-				"Memorial Day"     : [ "lastMayMonday", 0 ],
-				"Independence Day" : [ 7, 4 ],
-				"Labor Day"        : [ "firstSeptemberMonday", 0 ],
-				"Veterans Day"     : [ 11, 11 ],
-				"Thanksgiving"     : [ "firstNovemberThursday", 21 ],
-				"Christmas Day"    : [ 12, 25 ]
-			},
-			'Alabama': {
-				'PH': { // http://www.archives.alabama.gov/intro/holidays.html
-					"New Year's Day"                              : [ 1, 1 ],
-					"Robert E. Lee/Martin Luther King Birthday"   : [ "firstJanuaryMonday", 14 ],
-					"George Washington/Thomas Jefferson Birthday" : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                                : [ "lastMayMonday", 0 ],
-					"Independence Day"                            : [ 7, 4 ],
-					"Labor Day"                                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                                : [ 11, 11 ],
-					"Thanksgiving"                                : [ "firstNovemberThursday", 21 ],
-					"Christmas Day"                               : [ 12, 25 ],
-					"Confederate Memorial Day"                    : [ "firstAprilMonday", 21 ],
-					"Jefferson Davis' Birthday"                   : [ "firstJuneMonday", 0 ]
-				}
-			},
-			'Alaska': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Christmas Day"               : [ 12, 25 ],
-					"Seward's Day"                : [ "lastMarchMonday", 0 ],
-					"Alaska Day"                  : [ 10, 18 ]
-				}
-			},
-			'Arizona': {
-				'PH': {
-					"New Year's Day"                              : [ 1, 1 ],
-					"Dr. Martin Luther King Jr./Civil Rights Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"                       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                                : [ "lastMayMonday", 0 ],
-					"Independence Day"                            : [ 7, 4 ],
-					"Labor Day"                                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                                : [ 11, 11 ],
-					"Thanksgiving"                                : [ "firstNovemberThursday", 21 ],
-					"Christmas Day"                               : [ 12, 25 ]
-				}
-			},
-			'Arkansas': {
-				'PH': {
-					"New Year's Day"                                           : [ 1, 1 ],
-					"Dr. Martin Luther King Jr. and Robert E. Lee's Birthdays" : [ "firstJanuaryMonday", 14 ],
-					"George Washington's Birthday and Daisy Gatson Bates Day"  : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                                             : [ "lastMayMonday", 0 ],
-					"Independence Day"                                         : [ 7, 4 ],
-					"Labor Day"                                                : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                                             : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                                             : [ 11, 11 ],
-					"Thanksgiving"                                             : [ "firstNovemberThursday", 21 ],
-					"Christmas Eve"                                            : [ 12, 24 ],
-					"Christmas Day"                                            : [ 12, 25 ]
-				}
-			},
-			'California': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Christmas Day"               : [ 12, 25 ],
-					"César Chávez Day"            : [ 3, 31 ]
-				}
-			},
-			'Colorado': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Christmas Day"               : [ 12, 25 ]
-				}
-			},
-			'Connecticut': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Christmas Day"               : [ 12, 25 ],
-					"Lincoln's Birthday"          : [ 2, 12 ],
-					"Good Friday"                 : [ "easter", -2 ]
-				}
-			},
-			'Delaware': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Day After Thanksgiving"      : [ "firstNovemberThursday", 22 ],
-					"Christmas Day"               : [ 12, 25 ],
-					"Good Friday"                 : [ "easter", -2 ]
-				}
-			},
-			'District of Columbia': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Christmas Day"               : [ 12, 25 ],
-					"Emancipation Day"            : [ 4, 16 ]
-				}
-			},
-			'Florida': {
-				'PH': { // http://www.leg.state.fl.us/Statutes/index.cfm?App_mode=Display_Statute&Search_String=&URL=0100-0199/0110/Sections/0110.117.html
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Friday after Thanksgiving"   : [ "firstNovemberThursday", 22 ],
-					"Christmas Day"               : [ 12, 25 ]
-				}
-			},
-			'Georgia': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Robert E. Lee's Birthday"    : [ "firstNovemberThursday", 22 ],
-					"Washington's Birthday"       : [ 12, 24 ],
-					"Christmas Day"               : [ 12, 25 ],
-					"Confederate Memorial Day"    : [ "lastAprilMonday", 0 ]
-				}
-			},
-			'Guam': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Guam Discovery Day"          : [ 3, 5 ],
-					"Good Friday"                 : [ "easter", -2 ],
-					"Liberation Day"              : [ 7, 21 ],
-					"All Souls' Day"              : [ 11, 2 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Lady of Camarin Day"         : [ 12, 8 ],
-					"Christmas Day"               : [ 12, 25 ],
-				}
-			},
-			'Hawaii': {
-				'PH': {
-					"New Year's Day"                      : [ 1, 1 ],
-					"Martin Luther King, Jr. Day"         : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"               : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                        : [ "lastMayMonday", 0 ],
-					"Independence Day"                    : [ 7, 4 ],
-					"Labor Day"                           : [ "firstSeptemberMonday", 0 ],
-					"Veterans Day"                        : [ 11, 11 ],
-					"Thanksgiving"                        : [ "firstNovemberThursday", 21 ],
-					"Christmas Day"                       : [ 12, 25 ],
-					"Prince Jonah Kuhio Kalanianaole Day" : [ 3, 26 ],
-					"Kamehameha Day"                      : [ 6, 11 ],
-					"Statehood Day"                       : [ "firstAugustFriday", 14 ],
-					"Election Day"                        : [ "firstNovemberMonday", 1 ]
-				}
-			},
-			'Idaho': {
-				'PH': {
-					"New Year's Day"                                 : [ 1, 1 ],
-					"Martin Luther King, Jr.-Idaho Human Rights Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"                          : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                                   : [ "lastMayMonday", 0 ],
-					"Independence Day"                               : [ 7, 4 ],
-					"Labor Day"                                      : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                                   : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                                   : [ 11, 11 ],
-					"Thanksgiving"                                   : [ "firstNovemberThursday", 21 ],
-					"Christmas Day"                                  : [ 12, 25 ]
-				}
-			},
-			'Illinois': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Christmas Day"               : [ 12, 25 ],
-					"Lincoln's Birthday"          : [ 2, 12 ],
-					"Casimir Pulaski Day"         : [ "firstMarchMonday", 0 ],
-					"Election Day"                : [ "firstNovemberMonday", 1 ]
-				}
-			},
-			'Indiana': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Lincoln's Birthday"          : [ "firstNovemberThursday", 22 ],
-					"Christmas Day"               : [ 12, 25 ],
-					"Good Friday"                 : [ "easter", -2 ],
-					"Primary Election Day"        : [ "firstMayMonday", 1 ],
-					"Election Day"                : [ "firstNovemberMonday", 1 ]
-				}
-			},
-			'Iowa': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Christmas Day"               : [ 12, 25 ],
-					"Lincoln's Birthday"          : [ 2, 12 ]
-				}
-			},
-			'Kansas': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Christmas Day"               : [ 12, 25 ]
-				}
-			},
-			'Kentucky': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Christmas Eve"               : [ 12, 24 ],
-					"Christmas Day"               : [ 12, 25 ],
-					"New Year's Eve"              : [ 12, 31 ],
-					"Good Friday"                 : [ "easter", -2 ]
-				}
-			},
-			'Louisiana': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Christmas Day"               : [ 12, 25 ],
-					"Mardi Gras"                  : [ "easter", -47 ],
-					"Good Friday"                 : [ "easter", -2 ],
-					"Election Day"                : [ "firstNovemberMonday", 1 ]
-				}
-			},
-			'Maine': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Christmas Day"               : [ 12, 25 ],
-					"Patriots' Day"               : [ "firstAprilMonday", 14 ]
-				}
-			},
-			'Maryland': {
-				'PH': {
-					"New Year's Day"               : [ 1, 1 ],
-					"Martin Luther King, Jr. Day"  : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"        : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                 : [ "lastMayMonday", 0 ],
-					"Independence Day"             : [ 7, 4 ],
-					"Labor Day"                    : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                 : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                 : [ 11, 11 ],
-					"Thanksgiving"                 : [ "firstNovemberThursday", 21 ],
-					"Native American Heritage Day" : [ "firstNovemberThursday", 22 ],
-					"Christmas Day"                : [ 12, 25 ]
-				}
-			},
-			'Massachusetts': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Christmas Day"               : [ 12, 25 ],
-					"Patriots' Day"               : [ "firstAprilMonday", 14 ]
-				}
-			},
-			'Michigan': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Christmas Eve"               : [ 12, 24 ],
-					"Christmas Day"               : [ 12, 25 ],
-					"New Year's Eve"              : [ 12, 31 ]
-				}
-			},
-			'Minnesota': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Christmas Day"               : [ 12, 25 ]
-				}
-			},
-			'Mississippi': {
-				'PH': {
-					"New Year's Day"                                     : [ 1, 1 ],
-					"Martin Luther King's and Robert E. Lee's Birthdays" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"                              : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                                       : [ "lastMayMonday", 0 ],
-					"Independence Day"                                   : [ 7, 4 ],
-					"Labor Day"                                          : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                                       : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                                       : [ 11, 11 ],
-					"Thanksgiving"                                       : [ "firstNovemberThursday", 21 ],
-					"Christmas Day"                                      : [ 12, 25 ],
-					"Confederate Memorial Day"                           : [ "lastAprilMonday", 0 ]
-				}
-			},
-			'Missouri': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Christmas Day"               : [ 12, 25 ],
-					"Truman Day"                  : [ 5, 8 ]
-				}
-			},
-			'Montana': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Christmas Day"               : [ 12, 25 ],
-					"Election Day"                : [ "firstNovemberMonday", 1 ],
-					"Christmas Eve"               : [ 12, 24 ],
-					"New Year's Eve"              : [ 12, 31 ]
-				}
-			},
-			'Nebraska': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Christmas Day"               : [ 12, 25 ],
-					"Arbor Day"                   : [ "lastAprilFriday", 0 ]
-				}
-			},
-			'Nevada': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Christmas Day"               : [ 12, 25 ],
-					"Nevada Day"                  : [ "lastOctoberFriday", 0 ],
-					"Family Day"                  : [ "firstNovemberThursday", 22 ]
-				}
-			},
-			'New Hampshire': {
-				'PH': {
-					"New Year's Day"                           : [ 1, 1 ],
-					"Martin Luther King, Jr. Civil Rights Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"                    : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                             : [ "lastMayMonday", 0 ],
-					"Independence Day"                         : [ 7, 4 ],
-					"Labor Day"                                : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                             : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                             : [ 11, 11 ],
-					"Thanksgiving"                             : [ "firstNovemberThursday", 21 ],
-					"Day after Thanksgiving"                   : [ "firstNovemberThursday", 22 ],
-					"Christmas Day"                            : [ 12, 25 ],
-					"Election Day"                             : [ "firstNovemberMonday", 1 ]
-				}
-			},
-			'New Jersey': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Christmas Day"               : [ 12, 25 ],
-					"Lincoln's Birthday"          : [ 2, 12 ],
-					"Good Friday"                 : [ "easter", -2 ],
-					"Election Day"                : [ "firstNovemberMonday", 1 ]
-				}
-			},
-			'New Mexico': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Day after Thanksgiving"      : [ "firstNovemberThursday", 22 ],
-					"Christmas Day"               : [ 12, 25 ]
-				}
-			},
-			'New York': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Christmas Day"               : [ 12, 25 ],
-					"Lincoln's Birthday"          : [ 2, 12 ],
-					"Election Day"                : [ "firstNovemberMonday", 1 ]
-				}
-			},
-			'North Carolina': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Day after Thanksgiving"      : [ "firstNovemberThursday", 22 ],
-					"Christmas Eve"               : [ 12, 24 ],
-					"Christmas Day"               : [ 12, 25 ],
-					"Day after Christmas"         : [ 12, 26 ],
-					"Good Friday"                 : [ "easter", -2 ]
-				}
-			},
-			'North Dakota': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Christmas Day"               : [ 12, 25 ]
-				}
-			},
-			'Ohio': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Christmas Day"               : [ 12, 25 ]
-				}
-			},
-			'Oklahoma': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Day after Thanksgiving"      : [ "firstNovemberThursday", 22 ],
-					"Christmas Day"               : [ 12, 25 ]
-				}
-			},
-			'Oregon': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Christmas Day"               : [ 12, 25 ]
-				}
-			},
-			'Pennsylvania': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Christmas Day"               : [ 12, 25 ],
-					"Flag Day"                    : [ 6, 14 ]
-				}
-			},
-			'Puerto Rico': {
-				'PH': {
-					"Día de Año Nuevo"                         : [ 1, 1 ],
-					"Día de Reyes"                             : [ 1, 6 ],
-					"Natalicio de Eugenio María de Hostos"     : [ "firstJanuaryMonday", 7 ],
-					"Natalicio de Martin Luther King, Jr."     : [ "firstJanuaryMonday", 14 ],
-					"Día de los Presidentes"                   : [ "firstFebruaryMonday", 14 ],
-					"Día de la Abolición de Esclavitud"        : [ 3, 22 ],
-					"Viernes Santo"                            : [ "easter", -2 ],
-					"Natalicio de José de Diego"               : [ "firstAprilMonday", 14 ],
-					"Recordación de los Muertos de la Guerra"  : [ "lastMayMonday", 0 ],
-					"Día de la Independencia"                  : [ 7, 4 ],
-					"Constitución de Puerto Rico"              : [ 7, 25 ],
-					"Natalicio de Dr. José Celso Barbosa"      : [ 7, 27 ],
-					"Día del Trabajo"                          : [ "firstSeptemberMonday", 0 ],
-					"Día de la Raza Descubrimiento de América" : [ "firstOctoberMonday", 7 ],
-					"Día del Veterano"                         : [ 11, 11 ],
-					"Día del Descubrimiento de Puerto Rico"    : [ 11, 19 ],
-					"Día de Acción de Gracias"                 : [ "firstNovemberThursday", 21 ],
-					"Noche Buena"                              : [ 12, 24 ],
-					"Día de Navidad"                           : [ 12, 25 ]
-				}
-			},
-			'Rhode Island': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Christmas Day"               : [ 12, 25 ],
-					"Victory Day"                 : [ "firstAugustMonday", 7 ]
-				}
-			},
-			'South Carolina': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Christmas Day"               : [ 12, 25 ],
-					"Confederate Memorial Day"    : [ 5, 10 ]
-				}
-			},
-			'South Dakota': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Native American Day"         : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Christmas Day"               : [ 12, 25 ]
-				}
-			},
-			'Tennessee': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Christmas Eve"               : [ 12, 24 ],
-					"Christmas Day"               : [ 12, 25 ],
-					"Good Friday"                 : [ "easter", -2 ]
-				}
-			},
-			'Texas': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Friday after Thanksgiving"   : [ "firstNovemberThursday", 22 ],
-					"Christmas Eve"               : [ 12, 24 ],
-					"Christmas Day"               : [ 12, 25 ],
-					"Day after Christmas"         : [ 12, 26 ]
-				}
-			},
-			'United States Virgin Islands': {
-				'PH': {
-					"New Year's Day"                            : [ 1, 1 ],
-					"Martin Luther King, Jr. Day"               : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"                     : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                              : [ "lastMayMonday", 0 ],
-					"Independence Day"                          : [ 7, 4 ],
-					"Labor Day"                                 : [ "firstSeptemberMonday", 0 ],
-					"Virgin Islands-Puerto Rico Friendship Day" : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                              : [ 11, 11 ],
-					"Thanksgiving"                              : [ "firstNovemberThursday", 21 ],
-					"Christmas Day"                             : [ 12, 25 ],
-					"Three Kings Day"                           : [ 1, 6 ],
-					"Transfer Day"                              : [ 3, 31 ],
-					"Holy Thursday"                             : [ "easter", -3 ],
-					"Good Friday"                               : [ "easter", -2 ],
-					"Easter Monday"                             : [ "easter", 1 ],
-					"Emancipation Day"                          : [ 7, 3 ],
-					"Hurricane Supplication Day"                : [ "firstJulyMonday", 21 ],
-					"Hurricane Thanksgiving"                    : [ 10, 25 ],
-					"Liberty Day"                               : [ 11, 1 ],
-					"Christmas Second Day"                      : [ 12, 26 ],
-					"New Year's Eve"                            : [ 12, 31 ]
-				}
-			},
-			'Utah': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Christmas Day"               : [ 12, 25 ],
-					"Pioneer Day"                 : [ 7, 24 ]
-				}
-			},
-			'Vermont': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Christmas Day"               : [ 12, 25 ],
-					"Town Meeting Day"            : [ "firstMarchTuesday", 0 ],
-					"Battle of Bennington"        : [ "firstAugustMonday", 14 ]
-				}
-			},
-			'Virginia': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Lee-Jackson Day"             : [ "firstJanuaryMonday", 11 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Christmas Day"               : [ 12, 25 ]
-				}
-			},
-			'Washington': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Christmas Day"               : [ 12, 25 ]
-				}
-			},
-			'West Virginia': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Christmas Day"               : [ 12, 25 ],
-					"West Virginia Day"           : [ 6, 20 ],
-					"Lincoln's Day"               : [ "firstNovemberThursday", 22 ]
-				}
-			},
-			'Wisconsin': {
-				'PH': { // http://docs.legis.wisconsin.gov/statutes/statutes/995/20
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Christmas Day"               : [ 12, 25 ],
-					"Primary Election Day"        : [ "firstAugustTuesday", 7 ],
-					"Election Day"                : [ "firstNovemberMonday", 1 ]
-				}
-			},
-			'Wyoming': {
-				'PH': {
-					"New Year's Day"              : [ 1, 1 ],
-					"Martin Luther King, Jr. Day" : [ "firstJanuaryMonday", 14 ],
-					"Washington's Birthday"       : [ "firstFebruaryMonday", 14 ],
-					"Memorial Day"                : [ "lastMayMonday", 0 ],
-					"Independence Day"            : [ 7, 4 ],
-					"Labor Day"                   : [ "firstSeptemberMonday", 0 ],
-					"Columbus Day"                : [ "firstOctoberMonday", 7 ],
-					"Veterans Day"                : [ 11, 11 ],
-					"Thanksgiving"                : [ "firstNovemberThursday", 21 ],
-					"Christmas Day"               : [ 12, 25 ]
-				}
-			}
-		}, // }}}
-		'si': { // {{{
-			'PH': { // http://www.vlada.si/o_sloveniji/politicni_sistem/prazniki/
-				'novo leto'                                 : [  1,  1 ],
-				'Prešernov dan, slovenski kulturni praznik' : [  2,  8 ],
-				'velikonočna nedelja'                       : [ 'easter',  0 ],
-				'velikonočni ponedeljek'                    : [ 'easter',  1 ],
-				'dan upora proti okupatorju'                : [  4,  27 ],
-				'praznik dela 1'                            : [  5, 1 ],
-				'praznik dela 2'                            : [  5, 2 ],
-				'binkoštna nedelja - binkošti'              : [ 'easter',  49 ],
-				'dan državnosti'                            : [  6, 25 ],
-				'Marijino vnebovzetje'                      : [  8, 15 ],
-				'dan reformacije'                           : [ 10, 31 ],
-				'dan spomina na mrtve'                      : [ 11,  1 ],
-				'božič'                                     : [ 12, 25 ],
-				'dan samostojnosti in enotnosti'            : [ 12, 26 ]
-			}
-		}, // }}}
-		'it': { // {{{
-			'PH': { // http://www.governo.it/Presidenza/ufficio_cerimoniale/cerimoniale/giornate.html
-				'Capodanno'                                 : [  1,  1 ],
-				'Epifania'                                  : [  1,  6 ],
-				'Liberazione dal nazifascismo (1945)'       : [  4, 25 ],
-				'Pasqua'                                    : [ 'easter',  0 ],
-				'Lunedì di Pasqua'                          : [ 'easter',  1 ],
-				'Festa del lavoro'                          : [  5, 1 ],
-				'Festa della Repubblica'                    : [  6, 2 ],
-				'Assunzione di Maria'                       : [  8, 15 ],
-				'Ognissanti'                                : [ 11,  1 ],
-				'Festa dell’unità nazionale'                : [ 'firstSeptemberSunday', 0 ],
-				'Immacolata Concezione'                     : [ 12,  8 ],
-				'Natale di Gesù'                            : [ 12, 25 ],
-				'Santo Stefano'                             : [ 12, 26 ],
-			},
-		}, // }}}
-	};
-	// }}}
-
-	// error correction {{{
-	// Taken form http://www.netzwolf.info/j/osm/time_domain.js
-	// Credits go to Netzwolf
-	//
-	// Key to word_error_correction is the token name except wrong_words
-	var word_error_correction = {
-		wrong_words: { /* {{{ */
-			'Assuming "<ok>" for "<ko>".': {
-				'Frühling':  'Mar-May',
-				'Frühjahr':  'Mar-May',
-				'Sommer':    'Jun-Aug',
-				'Herbst':    'Sep-Nov',
-				'winter':    'Dec-Feb',
-			}, '"<ko>" wird als "<ok>" interpertiert.': {
-				'spring':  'Mar-May',
-				'summer':  'Jun-Aug',
-				'autumn':  'Sep-Nov',
-				// 'winter':  'Dec-Feb', // Same as in English.
-				// morning: '08:00-12:00',
-				// evening: '13:00-18:00',
-				'_':  '-',
-				'daytime': 'sunrise-sunset',
-			}, 'Bitte benutze die englische Schreibweise "<ok>" für "<ko>".': {
-				'sommer':   'summer',
-				'werktag':  'Mo-Fr',
-				'werktags': 'Mo-Fr',
-			}, 'Bitte benutze "<ok>" für "<ko>". Beispiel: "Mo-Fr 08:00-12:00; Tu off".': {
-				'ruhetag':     'off',
-				'ruhetage':    'off',
-				'geschlossen': 'off',
-				'geschl':      'off',
-				// 'ausser':      'off',
-				// 'außer':       'off',
-			}, 'Neem de engelse afkorting "<ok>" voor "<ko>" alstublieft.': {
-				'gesloten':   'off',
-				'feestdag':   'PH',
-				'feestdagen': 'PH',
-			}, 'Assuming "<ok>" for "<ko>". Please avoid using "workday": http://wiki.openstreetmap.org/wiki/Talk:Key:opening_hours#need_syntax_for_holidays_and_workingdays': {
-				// Used around 260 times but the problem is, that work day might be different in other countries.
-				'wd':           'Mo-Fr',
-				'on work day':  'Mo-Fr',
-				'on work days': 'Mo-Fr',
-				'weekday':      'Mo-Fr',
-				'weekdays':     'Mo-Fr',
-				'vardagar':     'Mo-Fr',
-			}, 'Please use something like "Mo off" instead "<ko>".': {
-				'except': 'off',
-			}, 'Please omit "<ko>" or use a colon instead: "12:00-14:00".': {
-				'h': '',
-			}, 'Please omit "<ko>".': {
-				'season': '',
-				'hs':     '',
-				'hrs':    '',
-				'hours':  '',
-				'·':      '',
-			}, 'Please omit "<ko>". The key must not be in the value.': {
-				'opening_hours=': '',
-			}, 'Please omit "<ko>". You might want to express open end which can be specified as "12:00+" for example.': {
-				'from': '',
-			}, 'You can use notation "<ok>" for "<ko>" in the case that you want to express open end times. Example: "12:00+".': {
-				'til late': '+',
-				'till late': '+',
-				'bis open end': '+',
-				'-late': '+',
-				'-open end': '+',
-				'-openend': '+',
-			}, 'Please use notation "<ok>" for "<ko>". If the times are unsure or vary consider a comment e.g. 12:00-14:00 "only on sunshine".': {
-				'~':  '-',
-				'~': '-',
-			}, 'Please use notation "<ok>" for "<ko>". Fallback rule: 12:00-14:00 || "call us"': {
-				'otherwise':  '||',
-			}, 'You can use notation "<ok>" for "<ko>" temporally if the syntax will still be valid.': {
-				'?':  'unknown "please add this if known"',
-			}, 'Please use notation "<ok>" for "<ko>". Although using "–" is typographical correct, the opening_hours syntax is defined with the normal hyphen. Correct typography should be done on application level …': {
-				'–':  '-',
-			}, 'Please use notation "<ok>" for "<ko>".': {
-				'→':               '-',
-				'−':               '-',
-				'=':               '-',
-				'ー':              '-',
-				'to':              '-',
-				'до':              '-',
-				'a':               '-', // language unknown
-				'as':              '-', // language unknown
-				'á':               '-', // language unknown
-				'ás':              '-', // language unknown
-				'às':              '-', // language unknown
-				'ate':             '-', // language unknown
-				'till':            '-',
-				'til':             '-',
-				'until':           '-',
-				'through':         '-',
-				'and':             ',',
-				'&':               ',',
-				// '/':               ',', // Can not be corrected as / is a valid token
-				':':              ':',
-				'°°':              ':00',
-				'always':          '24/7',
-				'nonstop':         '24/7',
-				'24x7':            '24/7',
-				'anytime':         '24/7',
-				'all day':         '24/7',
-				'daily':           'Mo-Su',
-				'everyday':        'Mo-Su',
-				'every day':       'Mo-Su',
-				'all days':        'Mo-Su',
-				'7j/7':            'Mo-Su', // I guess that it means that
-				'7/7':             'Mo-Su', // I guess that it means that
-				/* {{{
-				 * Fixing this causes to ignore the following warning: "There should be no
-				 * reason to differ more than 6 days from a constrained
-				 * weekdays. If so tell us …".
-				 * The following mistake is expected to occur more often.
-				 */
-				'7days':           'Mo-Su',
-				'7 days':          'Mo-Su',
-				// }}}
-				'7 days a week':   'Mo-Su',
-				'7 days/week':	   'Mo-Su',
-				'24 hours 7 days a week':   '24/7',
-				'24 hours':		   '00:00-24:00',
-				'midday':          '12:00',
-				'midnight':        '00:00',
-				'holiday':         'PH',
-				'holidays':        'PH',
-				'public holidays': 'PH',
-				'public holiday':  'PH',
-				'day after public holiday':      'PH +1 day',
-				'one day after public holiday':  'PH +1 day',
-				'day before public holiday':     'PH -1 day',
-				'one day before public holiday': 'PH -1 day',
-				'school holiday':  'SH',
-				'school holidays': 'SH',
-				// summerholiday:  'SH',
-				// summerholidays: 'SH',
-				/* Not implemented {{{ */
-				// 'day after school holiday':      'SH +1 day',
-				// 'one day after school holiday':  'SH +1 day',
-				// 'day before school holiday':     'SH -1 day',
-				// 'one day before school holiday': 'SH -1 day',
-				/* }}} */
-				'weekend':         'Sa,Su',
-				'weekends':        'Sa,Su',
-				'daylight':        'sunrise-sunset',
-			}, 'Please use notation "<ok>" for "<ko>". Those characters look very similar but are not the same!': {
-				'оff':             'off', // Russian o
-			}, 'Please use time format in 24 hours notation ("<ko>"). If PM is used you might have to convert the hours to the 24 hours notation.': {
-				'pm': '',
-				'рм': '',
-				'am': '',
-				'ам': '',
-			}, 'Bitte verzichte auf "<ko>".': {
-				'uhr': '',
-				'geöffnet': '',
-				'zwischen': '',
-				'ist': '',
-				'durchgehend': '',
-			}, 'Bitte verzichte auf "<ko>". Sie möchten eventuell eine Öffnungszeit ohne vorgegebenes Ende (Open End) angeben. Beispiel: "12:00+"': {
-				'ab':  '',
-				'von': '',
-			}, 'Es sieht so aus also möchten Sie zusätzliche Einschränkungen für eine Öffnungszeit geben. Falls sich dies nicht mit der Syntax ausdrücken lässt können Kommentare verwendet werden. Zusätzlich sollte eventuell das Schlüsselwort `open` benutzt werden. Bitte probiere "<ok>" für "<ko>".': {
-				'damen':  'open "Damen"',
-				'herren': 'open "Herren"',
-			}, 'Bitte benutze die Schreibweise "<ok>" für "<ko>".': {
-				'bis':         '-',
-				'täglich':     'Mo-Su',
-				'schulferien': 'SH',
-				'sonn und feiertag':   'PH,Su',
-				'sonn und feiertags':  'PH,Su',
-				'sonn- und feiertags': 'PH,Su',
-				'sonn-/feiertag':      'PH,Su',
-				'sonn-/feiertags':     'PH,Su',
-				'an sonn- und feiertagen': 'PH,Su',
-				'nur sonn-/feiertags': 'PH,Su',
-				'sonn- und feiertage': 'PH,Su',
-			}, 'Bitte benutze die Schreibweise "<ok>" für "<ko>". Es ist war typografisch korrekt aber laut der Spezifikation für opening_hours nicht erlaubt. Siehe auch: http://wiki.openstreetmap.org/wiki/DE:Key:opening_hours/specification.': {
-				'„': '"',
-				'“': '"',
-				'”': '"',
-			}, 'Please use notation "<ok>" for "<ko>". The used quote signs might be typographically correct but are not defined in the specification. See http://wiki.openstreetmap.org/wiki/Key:opening_hours/specification.': {
-				'«': '"',
-				'»': '"',
-				'‚': '"',
-				'‘': '"',
-				'’': '"',
-				'「': '"',
-				'」': '"',
-				'『': '"',
-				'』': '"',
-			}, 'Please use notation "<ok>" for "<ko>". The used quote signs are not defined in the specification. See http://wiki.openstreetmap.org/wiki/Key:opening_hours/specification.': {
-				"'": '"',
-			}, 'You might want to use comments instead of brackets (which are not valid in this context). If you do, replace "<ok>" with "<ko>".': {
-				// '(': '"',
-				// ')': '"',
-			}, 'Bitte benutze die Schreibweise "<ok>" als Ersatz für "und" bzw. "u.".': {
-				'und': ',',
-				'u':   ',',
-			}, 'Bitte benutze die englische Abkürzung "<ok>" für "<ko>".': {
-				'feiertag':   'PH',
-				'feiertags':  'PH',
-				'feiertage':  'PH',
-				'feiertagen': 'PH'
-			}, 'S\'il vous plaît utiliser "<ok>" pour "<ko>".': {
-				'fermé':        'off',
-				'et':           ',',
-				'à':            '-',
-				'jours fériés': 'PH',
-			}
-		}, /* }}} */
-
-		month: { /* {{{ */
-			'default': {
-				'jan':  0,
-				'feb':  1,
-				'mar':  2,
-				'apr':  3,
-				'may':  4,
-				'jun':  5,
-				'jul':  6,
-				'aug':  7,
-				'sep':  8,
-				'oct':  9,
-				'nov': 10,
-				'dec': 11,
-			}, 'Please use the English abbreviation "<ok>" for "<ko>".': {
-				'jänner':   0, // Austria
-				'january':    0,
-				'february':   1,
-				'march':      2,
-				'april':      3,
-				// 'may':     4,
-				'june':       5,
-				'july':       6,
-				'august':     7,
-				'september':  8,
-				'sept':       8,
-				'october':    9,
-				'november':  10,
-				'december':  11,
-			}, 'Bitte benutze die englische Abkürzung "<ok>" für "<ko>".': {
-				'januar':    0,
-				'februar':   1,
-				'märz':    2,
-				'maerz':     2,
-				'mai':       4,
-				'juni':      5,
-				'juli':      6,
-				'okt':       9,
-				'oktober':   9,
-				'dez':      11,
-				'dezember': 11,
-			}, 'S\'il vous plaît utiliser l\'abréviation "<ok>" pour "<ko>".': {
-				'janvier':    0,
-				'février':    1,
-				'fév':        1,
-				'mars':       2,
-				'avril':      3,
-				'avr':        3,
-				'mai':        4,
-				'juin':       5,
-				'juillet':    6,
-				'août':       7,
-				'aoû':        7,
-				'septembre':  8,
-				'octobre':    9,
-				'novembre':  10,
-				'décembre':  11,
-			}, 'Neem de engelse afkorting "<ok>" voor "<ko>" alstublieft.': {
-				'januari':  0,
-				'februari': 1,
-				'maart':    2,
-				'mei':      4,
-				'augustus': 7,
-			}
-		}, /* }}} */
-
-		calcday: {
-			'default': {
-				'day': 'day',
-				'days': 'days',
-			},
-		},
-
-		weekday: { // {{{ Good source: http://www.omniglot.com/language/time/days.htm */
-			'default': {
-				'su': 0,
-				'mo': 1,
-				'tu': 2,
-				'we': 3,
-				'th': 4,
-				'fr': 5,
-				'sa': 6,
-			}, 'Assuming "<ok>" for "<ko>"': {
-				'm':          1,
-				'w':          3,
-				'f':          5,
-			}, 'Please use the abbreviation "<ok>" for "<ko>".': {
-				'sun':        0,
-				'sunday':     0,
-				'sundays':    0,
-				'mon':        1,
-				'monday':     1,
-				'mondays':    1,
-				'tue':        2,
-				'tues':       2, // Used here: http://www.westerhambeauty.co.uk/contact.php
-				'tuesday':    2,
-				'tuesdays':   2,
-				'wed':        3,
-				'weds':       3,
-				'wednesday':  3,
-				'wednesdays': 3,
-				'thu':        4,
-				'thur':       4,
-				'thurs':      4,
-				'thursday':   4,
-				'thursdays':  4,
-				'fri':        5,
-				'friday':     5,
-				'fridays':    5,
-				'sat':        6,
-				'saturday':   6,
-				'saturdays':  6,
-			}, 'Bitte benutze die englische Abkürzung "<ok>" für "<ko>". Could also mean Saturday in Polish …': {
-				'so':         0,
-			}, 'Bitte benutze die englische Abkürzung "<ok>" für "<ko>".': {
-				'son':         0,
-				'sonntag':     0,
-				'sonn-':       0,
-				'sonntags':    0,
-				'montag':      1,
-				'montags':     1,
-				'di':          2,
-				'die':         2,
-				'dienstag':    2,
-				'dienstags':   2,
-				'mi':          3,
-				'mit':         3,
-				'mittwoch':    3,
-				'mittwochs':   3,
-				'do':          4,
-				'don':         4,
-				'donnerstag':  4,
-				'donnerstags': 4,
-				'fre':         5,
-				'freitag':     5,
-				'freitags':    5,
-				'sam':         6,
-				'samstag':     6,
-				'samstags':    6,
-			}, 'S\'il vous plaît utiliser l\'abréviation "<ok>" pour "<ko>".': {
-				'dim':      0,
-				'dimanche': 0,
-				'lu':       1,
-				'lun':      1,
-				'lundi':    1,
-				'mardi':    2,
-				'mer':      3,
-				'mercredi': 3,
-				'je':       4,
-				'jeu':      4,
-				'jeudi':    4,
-				've':       5,
-				'ven':      5,
-				'vendredi': 5,
-				'samedi':   6,
-			}, 'Neem de engelse afkorting "<ok>" voor "<ko>" alstublieft.': {
-				'zo':        0,
-				'zon':       0,
-				'zontag':    0, // correct?
-				'zondag':    0,
-				'maandag':   1,
-				'din':       2,
-				'dinsdag':   2,
-				'wo':        3,
-				'woe':       3,
-				'woensdag':  3,
-				'donderdag': 4,
-				'vr':        5,
-				'vri':       5,
-				'vrijdag':   5,
-				'za':        6,
-				'zat':       6,
-				'zaterdag':  6,
-			}, 'Please use the English abbreviation "<ok>" for "<ko>".': { // FIXME: Translate to Czech.
-				'neděle':  0,
-				'ne':      0,
-				'pondělí': 1,
-				'po':      1,
-				'úterý':   2,
-				'út':      2,
-				'středa':  3,
-				'st':      3,
-				'čtvrtek': 4,
-				'čt':      4,
-				'pátek':   5,
-				'pá':      5,
-				'sobota':  6,
-			}, 'Please use the English abbreviation "<ok>" (Spanish) for "<ko>".': {
-				'martes':    0,
-				'miércoles': 1,
-				'jueves':    2,
-				'viernes':   3,
-				'sábado':    4,
-				'domingo':   5,
-				'lunes':     6,
-			}, 'Please use the English abbreviation "<ok>" (Indonesian) for "<ko>".': {
-				'selasa': 0,
-				'rabu':   1,
-				'kami':   2,
-				'jumat':  3,
-				'sabtu':  4,
-				'minggu': 5,
-				'senin':  6,
-			}, 'Please use the English abbreviation "<ok>" (Swedish) for "<ko>".': {
-				'söndag':   0,
-				'söndagar': 0,
-				'måndag':   1,
-				'ma':       1,
-				'tisdag':   2,
-				'onsdag':   3, // Same in Danish
-				'torsdag':  4,
-				'fredag':   5,
-				'lördag':   6,
-				'lördagar': 6,
-			}, 'Please use the English abbreviation "<ok>" (Polish) for "<ko>".': {
-				'niedziela': 0, 'niedz': 0, 'n': 0, 'ndz': 0,
-				'poniedziałek': 1, 'poniedzialek': 1, 'pon': 1, 'pn': 1,
-				'wtorek': 2, 'wt': 2,
-				'środa': 3, 'sroda': 3, 'śr': 3, 'sr': 3,
-				'czwartek': 4, 'czw': 4, 'cz': 4,
-				'piątek': 5, 'piatek': 5, 'pt': 5,
-				'sobota': 6, 'sob': 6, // 'so': 6 // abbreviation also used in German
-			}, 'Please use the English abbreviation "<ok>" (Russian) for "<ko>".': {
-				'воскресенье' : 0,
-				'Вс'          : 0,
-				"voskresen'ye": 0,
-				'понедельник' : 1,
-				'Пн'          : 1,
-				"ponedel'nik" : 1,
-				'вторник'     : 2,
-				'vtornik'     : 2,
-				'среда'       : 3,
-				'sreda'       : 3,
-				'четверг'     : 4,
-				'chetverk'    : 4,
-				'пятница'     : 5,
-				'pyatnitsa'   : 5,
-				'суббота'     : 6,
-				'subbota'     : 6,
-			}, 'Please use the English abbreviation "<ok>" (Danish) for "<ko>".': {
-				'søndag' : 0,
-				'mandag' : 1,
-				'tirsdag': 2,
-				'onsdag' : 3, // Same in Swedish
-				'torsdag': 4,
-				'fredag' : 5,
-				'lørdag' : 6,
-			},
-		}, /* }}} */
-
-		timevar: { /* {{{ Special time variables which actual value depends on the date and the position of the facility. */
-			'default': {
-				'sunrise': 'sunrise',
-				'sunset':  'sunset',
-				'dawn':    'dawn',
-				'dusk':    'dusk',
-			}, 'Please use notation "<ok>" for "<ko>".': {
-				'sundown':  'sunset',
-			}, 'Bitte benutze die Schreibweise "<ok>" für "<ko>".': {
-				'morgendämmerung': 'dawn',
-				'abenddämmerung':  'dusk',
-				'sonnenaufgang':   'sunrise',
-				'sonnenuntergang': 'sunset',
-			},
-		}, /* }}} */
-
-		'event': { // variable events
-			'default': {
-				'easter': 'easter',
-			}, 'Bitte benutze die Schreibweise "<ok>" für "<ko>".': {
-				'ostern': 'easter',
-			},
-		},
-	};
-	// }}}
-	// }}}
-
-	// make the library accessible for the outside world {{{
-	if (typeof exports === 'object') {
-		// For nodejs
-		var SunCalc = require('suncalc');
-		module.exports = factory(SunCalc, holidays, word_error_correction);
-	} else {
-		// For browsers
-		root.opening_hours = factory(root.SunCalc, holidays, word_error_correction);
-	}
-	/// }}}
-}(this, function (SunCalc, holidays, word_error_correction) {
-	return function(value, nominatiomJSON, oh_mode) {
-		// short constants {{{
-		var word_value_replacement = { // If the correct values can not be calculated.
-			dawn    : 60 * 5 + 30,
-			sunrise : 60 * 6,
-			sunset  : 60 * 18,
-			dusk    : 60 * 18 + 30,
-		};
-		var months   = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
-		var weekdays = ['Su','Mo','Tu','We','Th','Fr','Sa'];
-		var default_prettify_conf = {
-			// Update README.md if changed.
-			'zero_pad_hour': true,           // enforce ("%02d", hour)
-			'one_zero_if_hour_zero': false,  // only one zero "0" if hour is zero "0"
-			'leave_off_closed': true,        // leave keywords "off" and "closed" as is
-			'keyword_for_off_closed': 'off', // use given keyword instead of "off" or "closed"
-			'rule_sep_string': ' ',          // separate rules by string
-			'print_semicolon': true,         // print token which separates normal rules
-			'leave_weekday_sep_one_day_betw': true, // use the separator (either "," or "-" which is used to separate days which follow to each other like Sa,Su or Su-Mo
-			'sep_one_day_between': ',',      // separator which should be used
-			'zero_pad_month_and_week_numbers': false, // Format week (e.g. `week 01`) and month day numbers (e.g. `Jan 01`) with "%02d".
-		};
-
-		var minutes_in_day = 60 * 24;
-		var msec_in_day    = 1000 * 60 * minutes_in_day;
-		var msec_in_week   = msec_in_day * 7;
-
-		var library_name   = 'opening_hours.js';
-		var repository_url = 'https://github.com/ypid/' + library_name;
-		var issues_url     = repository_url + '/issues?state=open';
-		// }}}
-
-		// constructor parameters {{{
-		// Evaluate additional information which can be given. They are
-		// required to reasonably calculate 'sunrise' and to use the correct
-		// holidays.
-		var location_cc, location_state, lat, lon;
-		if (typeof nominatiomJSON !== 'undefined') {
-			if (typeof nominatiomJSON.address !== 'undefined') {
-				if (typeof nominatiomJSON.address.country_code !== 'undefined') {
-					location_cc    = nominatiomJSON.address.country_code;
-				}
-				if (typeof nominatiomJSON.address.state !== 'undefined') {
-					location_state = nominatiomJSON.address.state;
-				} else if (typeof nominatiomJSON.address.county !== 'undefined') {
-					location_state = nominatiomJSON.address.county;
-				}
-			}
-
-			if (typeof nominatiomJSON.lon !== 'undefined') { // lat will be tested later …
-				lat = nominatiomJSON.lat;
-				lon = nominatiomJSON.lon;
-			}
-		}
-
-		// 0: time ranges (default), tags: opening_hours, lit, …
-		// 1: points in time
-		// 2: both (time ranges and points in time), tags: collection_times, service_times
-		if (typeof oh_mode === 'undefined') {
-			oh_mode = 0;
-		} else if (!(typeof oh_mode === 'number' && (oh_mode === 0 || oh_mode === 1 || oh_mode === 2))) {
-			throw 'The third constructor parameter is oh_mode and must be a number (0, 1 or 2)';
-		}
-		// }}}
-
-		// Tokenize value and generate selector functions. {{{
-		if (value.match(/^(?:\s*;?\s*)+$/))
-			throw 'Value contains nothing meaningful which can be parsed';
-
-		var parsing_warnings = []; // Elements are fed into function formatWarnErrorMessage(nrule, at, message)
-		var done_with_warnings = false; // The functions which throw warnings can be called multiple times.
-		var done_with_selector_reordering = false;
-		var done_with_selector_reordering_warnings = false;
-		var tokens = tokenize(value);
-		// console.log(JSON.stringify(tokens, null, '    '));
-		var prettified_value = '';
-		var week_stable = true;
-
-		var rules = [];
-		var new_tokens = [];
-
-		for (var nrule = 0; nrule < tokens.length; nrule++) {
-			if (tokens[nrule][0].length === 0) {
-				// Rule does contain nothing useful e.g. second rule of '10:00-12:00;' (empty) which needs to be handled.
-				parsing_warnings.push([nrule, -1,
-					'This rule does not contain anything useful. Please remove this empty rule.'
-					+ (nrule === tokens.length - 1 && nrule > 0 && !tokens[nrule][1] ?
-						' Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ?'
-						+ ' The thing is that the semicolon in the opening_hours syntax is defined as rule separator.'
-						+ ' So for compatibility reasons you should omit this last semicolon.': '')
-					]);
-				continue;
-			}
-
-			var continue_at = 0;
-			var next_rule_is_additional = false;
-			do {
-				if (continue_at === tokens[nrule][0].length) break;
-				// Additional rule does contain nothing useful e.g. second rule of '10:00-12:00,' (empty) which needs to be handled.
-
-				var selectors = {
-					// Time selectors
-					time: [],
-
-					// Temporary array of selectors from time wrapped to the next day
-					wraptime: [],
-
-					// Date selectors
-					weekday: [],
-					holiday: [],
-					week: [],
-					month: [],
-					monthday: [],
-					year: [],
-
-					// Array with non-empty date selector types, with most optimal ordering
-					date: [],
-
-					fallback: tokens[nrule][1],
-					additional: continue_at ? true : false,
-					meaning: true,
-					unknown: false,
-					comment: undefined,
-					build_from_token_rule: undefined,
-				};
-
-				selectors.build_from_token_rule = [ nrule, continue_at, new_tokens.length ];
-				continue_at = parseGroup(tokens[nrule][0], continue_at, selectors, nrule);
-				if (typeof continue_at === 'object') {
-					continue_at = continue_at[0];
-				} else {
-					continue_at = 0;
-				}
-
-				// console.log('Current tokens: ' + JSON.stringify(tokens[nrule], null, '    '));
-
-				new_tokens.push(
-					[
-						tokens[nrule][0].slice(
-							selectors.build_from_token_rule[1],
-							continue_at === 0
-								? tokens[nrule][0].length
-								: continue_at
-						),
-						tokens[nrule][1],
-						tokens[nrule][2],
-					]
-				);
-
-				if (next_rule_is_additional && new_tokens.length > 1) {
-					// Move 'rule separator' from last token of last rule to first token of this rule.
-					new_tokens[new_tokens.length - 1][0].unshift(new_tokens[new_tokens.length - 2][0].pop());
-				}
-
-				next_rule_is_additional = continue_at === 0 ? false : true;
-
-				if (selectors.year.length > 0)
-					selectors.date.push(selectors.year);
-				if (selectors.holiday.length > 0)
-					selectors.date.push(selectors.holiday);
-				if (selectors.month.length > 0)
-					selectors.date.push(selectors.month);
-				if (selectors.monthday.length > 0)
-					selectors.date.push(selectors.monthday);
-				if (selectors.week.length > 0)
-					selectors.date.push(selectors.week);
-				if (selectors.weekday.length > 0)
-					selectors.date.push(selectors.weekday);
-
-				// console.log('weekday: ' + JSON.stringify(selectors.weekday, null, '\t'));
-				rules.push(selectors);
-
-				// This handles selectors with time ranges wrapping over midnight (e.g. 10:00-02:00)
-				// it generates wrappers for all selectors and creates a new rule.
-				if (selectors.wraptime.length > 0) {
-					var wrapselectors = {
-						time: selectors.wraptime,
-						date: [],
-
-						meaning: selectors.meaning,
-						unknown: selectors.unknown,
-						comment: selectors.comment,
-
-						wrapped: true,
-						build_from_token_rule: selectors.build_from_token_rule,
-					};
-
-					for (var dselg = 0; dselg < selectors.date.length; dselg++) {
-						wrapselectors.date.push([]);
-						for (var dsel = 0; dsel < selectors.date[dselg].length; dsel++) {
-							wrapselectors.date[wrapselectors.date.length-1].push(
-									generateDateShifter(selectors.date[dselg][dsel], -msec_in_day)
-								);
-						}
-					}
-
-					rules.push(wrapselectors);
-				}
-			} while (continue_at);
-		}
-		// console.log(JSON.stringify(tokens, null, '    '));
-		// console.log(JSON.stringify(new_tokens, null, '    '));
-		// }}}
-
-		/* Format warning or error message for the user. {{{
-		 *
-		 * :param nrule: Rule number starting with zero.
-		 * :param at: Token position at which the issue occurred.
-		 * :param message: Human readable string with the message.
-		 * :returns: String with position of the warning or error marked for the user.
-		 */
-		function formatWarnErrorMessage(nrule, at, message) {
-			// FIXME: Change to new_tokens.
-			if (typeof nrule === 'number') {
-				var pos = 0;
-				if (nrule === -1) { // Usage of rule index not required because we do have access to value.length.
-					pos = value.length - at;
-				} else { // Issue accrued at a later time, position in string needs to be reconstructed.
-					if (typeof tokens[nrule][0][at] === 'undefined') {
-						if (typeof tokens[nrule][0] && at === -1) {
-							pos = value.length;
-							if (typeof tokens[nrule+1] === 'object' && typeof tokens[nrule+1][2] === 'number') {
-								pos -= tokens[nrule+1][2];
-							} else if (typeof tokens[nrule][2] === 'number') {
-								pos -= tokens[nrule][2];
-							}
-						} else {
-							// Given position is invalid.
-							//
-							formatLibraryBugMessage('Bug in warning generation code which could not determine the exact position of the warning or error in value.');
-							pos = value.length;
-							if (typeof tokens[nrule][2] !== 'undefined') {
-								// Fallback: Point to last token in the rule which caused the problem.
-								// Run real_test regularly to fix the problem before a user is confronted with it.
-								pos -= tokens[nrule][2];
-								console.warn('Last token for rule: ' + tokens[nrule]);
-								console.log(value.substring(0, pos) + ' <--- (' + message + ')');
-								console.log('\n');
-							} {
-								console.warn('tokens[nrule][2] is undefined. This is ok if nrule is the last rule.');
-							}
-						}
-					} else {
-						pos = value.length;
-						if (typeof tokens[nrule][0][at+1] !== 'undefined') {
-							pos -= tokens[nrule][0][at+1][2];
-						} else if (typeof tokens[nrule][2] !== 'undefined') {
-							pos -= tokens[nrule][2];
-						}
-					}
-				}
-				return value.substring(0, pos) + ' <--- (' + message + ')';
-			} else if (typeof nrule === 'string') {
-				return nrule.substring(0, at) + ' <--- (' + message + ')';
-			}
-		}
-		// }}}
-
-		/* Format internal library error message. {{{
-		 *
-		 * :param message: Human readable string with the error message.
-		 * :returns: Error message for the user.
-		 */
-		function formatLibraryBugMessage(message) {
-			if (typeof message === 'undefined')
-				message = '';
-			else
-				message = ' ' + message;
-
-			message = 'An error occurred during evaluation of the value "' + value + '".'
-				+ ' Please file a bug report here: ' + issues_url + '.'
-				+ message;
-			console.log(message);
-			return message;
-		}
-		// }}}
-
-		/* Tokenize input stream. {{{
-		 *
-		 * :param value: Raw opening_hours value.
-		 * :returns: Tokenized list object. Complex structure. Check the
-		 *		internal documentation in the doc directory for details.
-		 */
-		function tokenize(value) {
-			var all_tokens       = [];
-			var curr_rule_tokens = [];
-
-			var last_rule_fallback_terminated = false;
-
-			while (value !== '') {
-				// console.log("Parsing value: " + value);
-				var tmp;
-				if (tmp = value.match(/^week\b/i)) {
-					// Reserved keywords.
-					curr_rule_tokens.push([tmp[0].toLowerCase(), tmp[0].toLowerCase(), value.length ]);
-					value = value.substr(tmp[0].length);
-				} else if (tmp = value.match(/^(?:off\b|closed\b|open\b|unknown\b)/i)) {
-					// Reserved keywords.
-					curr_rule_tokens.push([tmp[0].toLowerCase(), 'state', value.length ]);
-					value = value.substr(tmp[0].length);
-				} else if (tmp = value.match(/^24\/7/i)) {
-					// Reserved keyword.
-					curr_rule_tokens.push([tmp[0], tmp[0], value.length ]);
-					value = value.substr(tmp[0].length);
-				} else if (tmp = value.match(/^(?:PH|SH)/i)) {
-					// special day name (holidays)
-					curr_rule_tokens.push([tmp[0].toUpperCase(), 'holiday', value.length ]);
-					value = value.substr(2);
-				} else if (tmp = value.match(/^(&|_|→|–|−|=|·|opening_hours=|ー|\?|~|~|:|°°|24x7|24 hours 7 days a week|24 hours|7 ?days(?:(?: a |\/)week)?|7j?\/7|all days?|every day|(?:|-|till? |bis )?(?:late|open[ ]?end)|(?:(?:one )?day (?:before|after) )?(?:school|public) holidays?|days?\b|до|рм|ам|jours fériés|on work days?|sonntag?|(?:nur |an )?sonn-?(?:(?: und |\/)feiertag(?:s|en?)?)?|[a-zäößàáéøčěíúýřПнВсо]+\b|à|á|mo|tu|we|th|fr|sa|su|jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\.?/i)) {
-					/* Handle all remaining words and specific other characters with error tolerance.
-					 *
-					 * à|á: Word boundary does not work with unicode chars: 'test à test'.match(/\bà\b/i)
-					 * https://stackoverflow.com/questions/10590098/javascript-regexp-word-boundaries-unicode-characters
-					 * Order in the regular expression capturing group is important in some cases.
-					 *
-					 * mo|tu|we|th|fr|sa|su|jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec: Prefer defended keywords
-					 * if used in cases like 'mo12:00-14:00' (when keyword is followed by number).
-					 */
-					var correct_val = returnCorrectWordOrToken(tmp[1].toLowerCase(), value.length);
-					// console.log('Error tolerance for string "' + tmp[1] + '" returned "' + correct_val + '".');
-					if (typeof correct_val === 'object') {
-						curr_rule_tokens.push([ correct_val[0], correct_val[1], value.length ]);
-						value = value.substr(tmp[0].length);
-					} else if (typeof correct_val === 'string') {
-						if (tmp[1].toLowerCase() === 'pm') {
-							var hours_token_at = curr_rule_tokens.length - 1;
-							var hours_token;
-							if (hours_token_at >= 0) {
-								if (hours_token_at -2 >= 0 &&
-										matchTokens(
-											curr_rule_tokens, hours_token_at - 2,
-											'number', 'timesep', 'number'
-										)
-									) {
-									hours_token_at -= 2;
-									hours_token = curr_rule_tokens[hours_token_at];
-								} else if (matchTokens(curr_rule_tokens, hours_token_at, 'number')) {
-									hours_token = curr_rule_tokens[hours_token_at];
-								}
-
-								if (typeof hours_token === 'object' && hours_token[0] <= 12) {
-									hours_token[0] += 12;
-									curr_rule_tokens[hours_token_at] = hours_token;
-								}
-							}
-						}
-						var correct_tokens = tokenize(correct_val)[0];
-						if (correct_tokens[1] === true) { // last_rule_fallback_terminated
-							throw formatLibraryBugMessage();
-						}
-						for (var i = 0; i < correct_tokens[0].length; i++) {
-							curr_rule_tokens.push([correct_tokens[0][i][0], correct_tokens[0][i][1], value.length]);
-							// value.length - tmp[0].length does not have the desired effect for all test cases.
-						}
-
-						value = value.substr(tmp[0].length);
-						// value = correct_val + value.substr(tmp[0].length);
-						// Does not work because it would generate the wrong length for formatWarnErrorMessage.
-					} else {
-						// other single-character tokens
-						curr_rule_tokens.push([value[0].toLowerCase(), value[0].toLowerCase(), value.length - 1 ]);
-						value = value.substr(1);
-					}
-				} else if (tmp = value.match(/^\d+/)) {
-					// number
-					if (Number(tmp[0]) > 1900) { // Assumed to be a year number.
-						curr_rule_tokens.push([Number(tmp[0]), 'year', value.length ]);
-						if (Number(tmp[0]) >= 2100) // Probably an error
-							parsing_warnings.push([ -1, value.length - 1,
-								'The number ' + Number(tmp[0]) + ' will be interpreted as year.'
-								+ ' This is probably not intended. Times can be specified as "12:00".'
-							]);
-					} else {
-						curr_rule_tokens.push([Number(tmp[0]), 'number', value.length ]);
-					}
-
-					value = value.substr(tmp[0].length);
-				} else if (tmp = value.match(/^"([^"]+)"/)) {
-					// Comment following the specification.
-					// Any character is allowed inside the comment except " itself.
-					curr_rule_tokens.push([tmp[1], 'comment', value.length ]);
-					value = value.substr(tmp[0].length);
-				} else if (tmp = value.match(/^(["'„“‚‘’«「『])([^"'“”‘’»」』;|]*)(["'”“‘’»」』])/)) {
-					// Comments with error tolerance.
-					// The comments still have to be somewhat correct meaning
-					// the start and end quote signs used have to be
-					// appropriate. So “testing„ will not match as it is not a
-					// quote but rather something unknown which the user should
-					// fix first.
-					// console.log('Matched: ' + JSON.stringify(tmp));
-					for (var pos = 1; pos <= 3; pos += 2) {
-						// console.log('Pos: ' + pos + ', substring: ' + tmp[pos]);
-						var correct_val = returnCorrectWordOrToken(tmp[pos],
-							value.length - (pos === 3 ? tmp[1].length + tmp[2].length : 0)
-						);
-						if (typeof correct_val !== 'string' && tmp[pos] !== '"') {
-							throw formatLibraryBugMessage(
-								'A character for error tolerance was allowed in the regular expression'
-								+ ' but is not covered by word_error_correction'
-								+ ' which is needed to format a proper message for the user.'
-							);
-						}
-					}
-					curr_rule_tokens.push([tmp[2], 'comment', value.length ]);
-					value = value.substr(tmp[0].length);
-				} else if (value.match(/^;/)) {
-					// semicolon terminates rule
-					// next tokens belong to a new rule
-					all_tokens.push([ curr_rule_tokens, last_rule_fallback_terminated, value.length ]);
-					value = value.substr(1);
-
-					curr_rule_tokens = [];
-					last_rule_fallback_terminated = false;
-				} else if (value.match(/^\|\|/)) {
-					// || terminates rule
-					// Next tokens belong to a fallback rule.
-					if (curr_rule_tokens.length === 0)
-						throw formatWarnErrorMessage(-1, value.length - 2, 'Rule before fallback rule does not contain anything useful');
-
-					all_tokens.push([ curr_rule_tokens, last_rule_fallback_terminated, value.length ]);
-					curr_rule_tokens = [];
-					// curr_rule_tokens = [ [ '||', 'rule separator', value.length  ] ];
-					// FIXME: Use this. Unknown bug needs to be solved in the process.
-					value = value.substr(2);
-
-					last_rule_fallback_terminated = true;
-				} else if (value.match(/^(?:␣|\s)/)) {
-					// Using "␣" as space is not expected to be a normal
-					// mistake. Just ignore it to make using taginfo easier.
-					value = value.substr(1);
-				} else if (tmp = value.match(/^\s+/)) {
-					// whitespace is ignored
-					value = value.substr(tmp[0].length);
-				} else if (value.match(/^[:.]/)) {
-					// time separator
-					if (value[0] === '.' && !done_with_warnings)
-						parsing_warnings.push([ -1, value.length - 1, 'Please use ":" as hour/minute-separator' ]);
-					curr_rule_tokens.push([ ':', 'timesep', value.length ]);
-					value = value.substr(1);
-				} else {
-					// other single-character tokens
-					curr_rule_tokens.push([value[0].toLowerCase(), value[0].toLowerCase(), value.length ]);
-					value = value.substr(1);
-				}
-			}
-
-			all_tokens.push([ curr_rule_tokens, last_rule_fallback_terminated ]);
-
-			return all_tokens;
-		}
-		// }}}
-
-		/* error correction/tolerance function {{{
-		 * Go through word_error_correction hash and get correct value back.
-		 *
-		 * :param word: Wrong Word or character.
-		 * :param value_length: Current value_length (used for warnings).
-		 * :returns:
-		 *		* (valid) opening_hours sub string.
-		 *		* object with [ internal_value, token_name ] if value is correct.
-		 *		* undefined if word could not be found (and thus is not be corrected).
-		 */
-		function returnCorrectWordOrToken(word, value_length) {
-			for (var token_name in word_error_correction) {
-				for (var comment in word_error_correction[token_name]) {
-					for (var old_val in word_error_correction[token_name][comment]) {
-						if (old_val === word) {
-							var val = word_error_correction[token_name][comment][old_val];
-							if (comment === 'default') {
-								// Return internal representation of word.
-								return [ val, token_name ];
-							} else if (token_name === 'wrong_words' && !done_with_warnings) {
-								// Replace wrong words or characters with correct ones.
-								// This will return a string which is then being tokenized.
-								parsing_warnings.push([ -1, value_length - old_val.length,
-									comment.replace(/<ko>/, old_val).replace(/<ok>/, val) ]);
-								return val;
-							} else {
-								// Get correct string value from the 'default' hash and generate warning.
-								var correct_abbr;
-								for (correct_abbr in word_error_correction[token_name]['default']) {
-									if (word_error_correction[token_name]['default'][correct_abbr] === val)
-										break;
-								}
-								if (typeof correct_abbr === 'undefined') {
-									throw formatLibraryBugMessage('Including the stacktrace.');
-								}
-								if (token_name !== 'timevar') {
-									// Everything else than timevar:
-									// E.g. 'Mo' start with a upper case letter.
-									// It just looks better.
-									correct_abbr = correct_abbr.charAt(0).toUpperCase()
-										+ correct_abbr.slice(1);
-								}
-								if (!done_with_warnings)
-									parsing_warnings.push([ -1, value_length - old_val.length,
-										comment.replace(/<ko>/, old_val).replace(/<ok>/, correct_abbr) ]);
-								return [ val, token_name ];
-							}
-						}
-					}
-				}
-			}
-			return undefined;
-		}
-		// }}}
-
-		/* return warnings as list {{{
-		 *
-		 * :param it: Iterator object if available (optional).
-		 * :returns: Warnings as list with one warning per element.
-		 */
-		function getWarnings(it) {
-			if (!done_with_warnings && typeof it === 'object') {
-				/* getWarnings was called in a state without critical errors.
-				 * We can do extended tests.
-				 */
-
-				/* Place all tests in this function if an additional (high
-				 * level) test is added and this does not require to rewrite
-				 * big parts of (sub) selector parsers only to get the
-				 * position. If that is the case, then rather place the test
-				 * code in the (sub) selector parser function directly.
-				 */
-
-				var wide_range_selectors = [ 'year', 'month', 'week', 'holiday' ];
-				var small_range_selectors = [ 'weekday', 'time', '24/7', 'state', 'comment'];
-
-				// How many times was a selector_type used per rule? {{{
-				var used_selectors = [];
-				var used_selectors_types_array = [];
-				var has_token = {};
-
-				for (var nrule = 0; nrule < new_tokens.length; nrule++) {
-					if (new_tokens[nrule][0].length === 0) continue;
-					// Rule does contain nothing useful e.g. second rule of '10:00-12:00;' (empty) which needs to be handled.
-
-					var selector_start_end_type = [ 0, 0, undefined ],
-						prettified_group_value  = [];
-					// console.log(new_tokens[nrule][0]);
-
-					used_selectors[nrule] = {};
-					used_selectors_types_array[nrule] = [];
-
-					do {
-						selector_start_end_type = getSelectorRange(new_tokens[nrule][0], selector_start_end_type[1]);
-						// console.log(selector_start_end_type, new_tokens[nrule][0].length);
-
-						if (selector_start_end_type[0] === selector_start_end_type[1] &&
-							new_tokens[nrule][0][selector_start_end_type[0]][0] === '24/7'
-							) {
-								has_token['24/7'] = true;
-						}
-
-						if (typeof used_selectors[nrule][selector_start_end_type[2]] !== 'object') {
-							used_selectors[nrule][selector_start_end_type[2]] = [ selector_start_end_type[1] ];
-						} else {
-							used_selectors[nrule][selector_start_end_type[2]].push(selector_start_end_type[1]);
-						}
-						used_selectors_types_array[nrule].push(selector_start_end_type[2]);
-
-						selector_start_end_type[1]++;
-					} while (selector_start_end_type[1] < new_tokens[nrule][0].length);
-				}
-				// console.log('used_selectors: ' + JSON.stringify(used_selectors, null, '    '));
-				// }}}
-
-				for (var nrule = 0; nrule < used_selectors.length; nrule++) {
-
-					/* Check if more than one not connected selector of the same type is used in one rule {{{ */
-					for (var selector_type in used_selectors[nrule]) {
-						// console.log(selector_type + ' use at: ' + used_selectors[nrule][selector_type].length);
-						if (used_selectors[nrule][selector_type].length > 1) {
-							parsing_warnings.push([nrule, used_selectors[nrule][selector_type][used_selectors[nrule][selector_type].length - 1],
-								'You have used ' + used_selectors[nrule][selector_type].length
-								+ (selector_type.match(/^(?:comment|state)/) ?
-									' ' + selector_type
-									+ (selector_type === 'state' ? ' keywords' : 's')
-									+ ' in one rule.'
-									+ ' You may only use one in one rule.'
-									:
-									' not connected ' + selector_type
-									+ (selector_type.match(/^(?:month|weekday)$/) ? 's' : ' ranges')
-									+ ' in one rule.'
-									+ ' This is probably an error.'
-									+ ' Equal selector types can (and should) always be written in conjunction separated by comma.'
-									+ ' Example for time ranges "12:00-13:00,15:00-18:00".'
-									+ ' Example for weekdays "Mo-We,Fr".'
-								  )
-								+ ' Rules can be separated by ";".' ]
-							);
-							done_with_selector_reordering = true; // Correcting the selector order makes no sense if this kind of issue exists.
-						}
-					}
-					/* }}} */
-
-					/* Check if change default state rule is not the first rule {{{ */
-					if (   typeof used_selectors[nrule].state === 'object'
-						&& Object.keys(used_selectors[nrule]).length === 1
-					) {
-
-						if (nrule !== 0) {
-							parsing_warnings.push([nrule, new_tokens[nrule][0].length - 1,
-								"This rule which changes the default state (which is closed) for all following rules is not the first rule."
-								+ " The rule will overwrite all previous rules."
-								+ " It can be legitimate to change the default state to open for example"
-								+ " and then only specify for which times the facility is closed."
-							]);
-						}
-					/* }}} */
-					/* Check if a rule (with state open) has no time selector {{{ */
-					} else if (typeof used_selectors[nrule].time === 'undefined') {
-						if (	(	   typeof used_selectors[nrule].state === 'object'
-									&& new_tokens[nrule][0][used_selectors[nrule].state[0]][0] === 'open'
-									&& typeof used_selectors[nrule].comment === 'undefined'
-								) || ( typeof used_selectors[nrule].comment === 'undefined'
-									&& typeof used_selectors[nrule].state === 'undefined'
-								) &&
-								typeof used_selectors[nrule]['24/7'] === 'undefined'
-						) {
-
-							parsing_warnings.push([nrule, new_tokens[nrule][0].length - 1,
-								"This rule is not very explicit because there is no time selector being used."
-								+ " Please add a time selector to this rule or use a comment to make it more explicit."
-							]);
-						}
-					}
-					/* }}} */
-
-					/* Check if empty comment was given {{{ */
-					if (typeof used_selectors[nrule].comment === 'object'
-						&& new_tokens[nrule][0][used_selectors[nrule].comment[0]][0].length === 0
-					) {
-
-						parsing_warnings.push([nrule, used_selectors[nrule].comment[0],
-							"You have used an empty comment."
-							+ " Please either write something in the comment or use the keyword unknown instead."
-						]);
-					}
-					/* }}} */
-
-					/* Check if rule with closed|off modifier is additional {{{ */
-					/* FIXME: Enable this test. */
-					if (typeof new_tokens[nrule][0][0] === 'object'
-							&& new_tokens[nrule][0][0][0] === ','
-							&& new_tokens[nrule][0][0][1] === 'rule separator'
-							&& typeof used_selectors[nrule].state === 'object'
-							&& (
-								   new_tokens[nrule][0][used_selectors[nrule].state[0]][0] === 'closed'
-								|| new_tokens[nrule][0][used_selectors[nrule].state[0]][0] === 'off'
-							   )
-					) {
-
-						// parsing_warnings.push([nrule, new_tokens[nrule][0].length - 1,
-							// "This rule will be evaluated as closed but it was specified as additional rule."
-							// + " It is enough to specify this rule as normal rule using the \";\" character."
-							// + " See https://wiki.openstreetmap.org/wiki/Key:opening_hours/specification#explain:rule_modifier:closed."
-						// ]);
-					}
-					/* }}} */
-
-					/* Check for valid use of <separator_for_readability> {{{ */
-					for (var i = 0; i < used_selectors_types_array[nrule].length - 1; i++) {
-						var selector_type = used_selectors_types_array[nrule][i];
-						var next_selector_type = used_selectors_types_array[nrule][i+1];
-						if (   (   wide_range_selectors.indexOf(selector_type)       !== -1
-								&& wide_range_selectors.indexOf(next_selector_type)  !== -1
-							) || ( small_range_selectors.indexOf(selector_type)      !== -1
-								&& small_range_selectors.indexOf(next_selector_type) !== -1)
-							) {
-
-							if (new_tokens[nrule][0][used_selectors[nrule][selector_type][0]][0] === ':') {
-								parsing_warnings.push([nrule, used_selectors[nrule][selector_type][0],
-									"You have used the optional symbol <separator_for_readability> in the wrong place."
-									+ " Please check the syntax specification to see where it could be used or remove it."
-								]);
-							}
-						}
-					}
-					/* }}} */
-
-				}
-
-				/* Check if 24/7 is used and it does not mean 24/7 because there are other rules {{{ */
-				var has_advanced = it.advance();
-
-				if (has_advanced === true && has_token['24/7'] && !done_with_warnings) {
-					parsing_warnings.push([ -1, 0, 'You used 24/7 in a way that is probably not interpreted as "24 hours 7 days a week".'
-							// Probably because of: "24/7; 12:00-14:00 open", ". Needs extra testing.
-							+ ' For correctness you might want to use "open" or "closed"'
-							+ ' for this rule and then write your exceptions which should achieve the same goal and is more clear'
-							+ ' e.g. "open; Mo 12:00-14:00 off".']);
-				}
-				/* }}} */
-
-				prettifyValue();
-			}
-			done_with_warnings = true;
-
-			var warnings = [];
-			// FIXME: Sort based on parsing_warnings[1], tricky …
-			for (var i = 0; i < parsing_warnings.length; i++) {
-				warnings.push( formatWarnErrorMessage(parsing_warnings[i][0], parsing_warnings[i][1], parsing_warnings[i][2]) );
-			}
-			return warnings;
-		}
-
-		/* Helpers for getWarnings {{{ */
-
-		/* Check if token is the begin of a selector and why. {{{
-		 *
-		 * :param tokens: List of token objects.
-		 * :param at: Position where to start.
-		 * :returns:
-		 *		* false the current token is not the begin of a selector.
-		 *		* Position in token array from where the decision was made that
-		 *		  the token is the start of a selector.
-		 */
-		function tokenIsTheBeginOfSelector(tokens, at) {
-			if (typeof tokens[at][3] === 'string') {
-				return 3;
-			} else if (tokens[at][1] === 'comment'
-					|| tokens[at][1] === 'state'
-					|| tokens[at][1] === '24/7'
-					|| tokens[at][1] === 'rule separator'
-				){
-
-				return 1;
-			} else {
-				return false;
-			}
-		}
-		/* }}} */
-
-		/* Get start and end position of a selector. {{{
-		 * For example this value 'Mo-We,Fr' will return the position of the
-		 * token lexeme 'Mo' and 'Fr' e.g. there indexes [ 0, 4 ] in the
-		 * selector array of tokens.
-		 *
-		 * :param tokens: List of token objects.
-		 * :param at: Position where to start.
-		 * :returns: Array:
-		 *			0. Index of first token in selector array of tokens.
-		 *			1. Index of last token in selector array of tokens.
-		 *			2. Selector type.
-		 */
-		function getSelectorRange(tokens, at) {
-			var selector_start = at,
-				selector_end,
-				pos_in_token_array;
-
-			for (; selector_start >= 0; selector_start--) {
-				pos_in_token_array = tokenIsTheBeginOfSelector(tokens, selector_start);
-				if (pos_in_token_array)
-					break;
-			}
-			selector_end = selector_start;
-
-			if (pos_in_token_array === 1) {
-				// Selector consists of a single token.
-
-				// Include tailing colon.
-				if (selector_end + 1 < tokens.length && tokens[selector_end + 1][0] === ':')
-					selector_end++;
-
-				return [ selector_start, selector_end, tokens[selector_start][pos_in_token_array] ];
-			}
-
-			for (selector_end++; selector_end < tokens.length ; selector_end++) {
-				if (tokenIsTheBeginOfSelector(tokens, selector_end))
-					return [ selector_start, selector_end - 1, tokens[selector_start][pos_in_token_array] ];
-			}
-
-			return [ selector_start, selector_end - 1, tokens[selector_start][pos_in_token_array] ];
-		}
-		/* }}} */
-		/* }}} */
-		/* }}} */
-
-		/* Prettify raw value from user. {{{
-		 * The value is generated by putting the tokens back together to a string.
-		 *
-		 * :param argument_hash: Hash which can contain:
-		 *		'conf': Configuration hash.
-		 *		'get_internals: If true export internal data structures.
-		 *		'rule_index: Only prettify the rule with this index.
-		 * :returns: Prettified value string or object if get_internals is true.
-		 */
-		function prettifyValue(argument_hash) {
-			var user_conf = {},
-				get_internals   = false,
-				rule_index;
-			if (typeof argument_hash !== 'undefined') {
-
-				if (typeof argument_hash.conf === 'object')
-					user_conf = argument_hash.conf;
-
-				if (typeof argument_hash.rule_index === 'number')
-					rule_index = argument_hash.rule_index;
-
-				if (argument_hash.get_internals === true)
-					get_internals = true;
-			}
-
-			for (var key in default_prettify_conf) {
-				if (typeof user_conf[key] === 'undefined')
-					user_conf[key] = default_prettify_conf[key];
-			}
-
-			prettified_value = '';
-			var prettified_value_array = [];
-
-			for (var nrule = 0; nrule < new_tokens.length; nrule++) {
-				if (new_tokens[nrule][0].length === 0) continue;
-				// Rule does contain nothing useful e.g. second rule of '10:00-12:00;' (empty) which needs to be handled.
-
-				if (typeof rule_index === 'number') {
-					if (rule_index !== nrule) continue;
-				} else {
-					if (nrule !== 0)
-						prettified_value += (
-							new_tokens[nrule][1]
-								? user_conf.rule_sep_string + '|| '
-								: (
-									new_tokens[nrule][0][0][1] === 'rule separator'
-									? ','
-									: (
-										user_conf.print_semicolon
-										? ';'
-										: ''
-									)
-								) +
-							user_conf.rule_sep_string);
-				}
-
-				var selector_start_end_type = [ 0, 0, undefined ],
-					prettified_group_value = [];
-				// console.log(new_tokens[nrule][0]);
-				var count = 0;
-
-
-				do {
-					selector_start_end_type = getSelectorRange(new_tokens[nrule][0], selector_start_end_type[1]);
-					// console.log(selector_start_end_type, new_tokens[nrule][0].length, count);
-
-					if (count > 50) {
-						throw formatLibraryBugMessage('infinite loop');
-					}
-
-					if (selector_start_end_type[2] !== 'rule separator') {
-						prettified_group_value.push(
-							[
-								selector_start_end_type,
-								prettifySelector(
-									new_tokens[nrule][0],
-									selector_start_end_type[0],
-									selector_start_end_type[1],
-									selector_start_end_type[2],
-									user_conf
-								),
-							]
-						);
-					}
-
-					selector_start_end_type[1]++;
-					count++;
-					// console.log(selector_start_end_type, new_tokens[nrule][0].length, count);
-				} while (selector_start_end_type[1] < new_tokens[nrule][0].length);
-				// console.log('Prettified value: ' + JSON.stringify(prettified_group_value, null, '    '));
-				var not_sorted_prettified_group_value = prettified_group_value.slice();
-
-				if (!done_with_selector_reordering) {
-					prettified_group_value.sort(
-						function (a, b) {
-							var selector_order = [ 'year', 'month', 'week', 'holiday', 'weekday', 'time', '24/7', 'state', 'comment'];
-							return selector_order.indexOf(a[0][2]) - selector_order.indexOf(b[0][2]);
-						}
-					);
-				}
-				var old_prettified_value_length = prettified_value.length;
-
-				prettified_value += prettified_group_value.map(
-					function (array) {
-						return array[1];
-					}
-				).join(' ');
-
-				prettified_value_array.push( prettified_group_value );
-
-				if (!done_with_selector_reordering_warnings) {
-					for (var i = 0, l = not_sorted_prettified_group_value.length; i < l; i++) {
-						if (not_sorted_prettified_group_value[i] !== prettified_group_value[i]) {
-							// console.log(i + ': ' + prettified_group_value[i][0][2]);
-							var length = i + old_prettified_value_length; // i: Number of spaces in string.
-							for (var x = 0; x <= i; x++) {
-								length += prettified_group_value[x][1].length;
-								// console.log('Length: ' + length + ' ' + prettified_group_value[x][1]);
-							}
-							// console.log(length);
-							parsing_warnings.push([ prettified_value, length,
-								'The selector "' + prettified_group_value[i][0][2] + '" was switched with'
-								+ ' the selector "' + not_sorted_prettified_group_value[i][0][2] + '"'
-								+ ' for readablitity and compatibiltity reasons.'
-							]);
-						}
-					}
-				}
-			}
-
-			done_with_selector_reordering_warnings = true;
-			// console.log(JSON.stringify(prettified_value_array, null, '    '));
-
-			if (get_internals) {
-				return [ prettified_value_array, new_tokens ];
-			} else {
-				return prettified_value;
-			}
-		}
-		// }}}
-
-		/* Check selector array of tokens for specific token name pattern. {{{
-		 *
-		 * :param tokens: List of token objects.
-		 * :param at: Position at which the matching should begin.
-		 * :param token_name(s): One or many token_name strings which have to match in that order.
-		 * :returns: true if token_name(s) match in order false otherwise.
-		 */
-		function matchTokens(tokens, at /*, matches... */) {
-			if (at + arguments.length - 2 > tokens.length)
-				return false;
-			for (var i = 0; i < arguments.length - 2; i++) {
-				if (tokens[at + i][1] !== arguments[i + 2])
-					return false;
-			}
-
-			return true;
-		}
-		// }}}
-
-		/* Generate selector wrapper with time offset {{{
-		 *
-		 * :param func: Generated selector code function.
-		 * :param shirt: Time to shift in milliseconds.
-		 * :param token_name(s): One or many token_name strings which have to match in that order.
-		 * :returns: See selector code.
-		 */
-		function generateDateShifter(func, shift) {
-			return function(date) {
-				var res = func(new Date(date.getTime() + shift));
-
-				if (typeof res[1] === 'undefined')
-					return res;
-				return [ res[0], new Date(res[1].getTime() - shift) ];
-			};
-		}
-		// }}}
-
-		/* Top-level parser {{{
-		 *
-		 * :param tokens: List of token objects.
-		 * :param at: Position where to start.
-		 * :param selectors: Reference to selector object.
-		 * :param nrule: Rule number starting with 0.
-		 * :returns: See selector code.
-		 */
-		function parseGroup(tokens, at, selectors, nrule) {
-			var rule_modifier_specified = false;
-
-			// console.log(tokens); // useful for debugging of tokenize
-			while (at < tokens.length) {
-				// console.log('Parsing at position', at +':', tokens[at]);
-				if (matchTokens(tokens, at, 'weekday')) {
-					at = parseWeekdayRange(tokens, at, selectors);
-				} else if (matchTokens(tokens, at, '24/7')) {
-					selectors.time.push(function(date) { return [true]; });
-					// Not needed. If there is no selector it automatically matches everything.
-					// WRONG: This only works if there is no other selector in this selector group ...
-					at++;
-				} else if (matchTokens(tokens, at, 'holiday')) {
-					if (matchTokens(tokens, at+1, ','))
-						at = parseHoliday(tokens, at, selectors, true);
-					else
-						at = parseHoliday(tokens, at, selectors, false);
-					week_stable = false;
-				} else if (matchTokens(tokens, at, 'month', 'number')
-						|| matchTokens(tokens, at, 'month', 'weekday')
-						|| matchTokens(tokens, at, 'year', 'month', 'number')
-						|| matchTokens(tokens, at, 'year', 'event')
-						|| matchTokens(tokens, at, 'event')) {
-
-					at = parseMonthdayRange(tokens, at, nrule);
-					week_stable = false;
-				} else if (matchTokens(tokens, at, 'year')) {
-					at = parseYearRange(tokens, at);
-					week_stable = false;
-				} else if (matchTokens(tokens, at, 'month')) {
-					at = parseMonthRange(tokens, at);
-					// week_stable = false; // Decided based on the actual value/tokens.
-				} else if (matchTokens(tokens, at, 'week')) {
-					tokens[at][3] = 'week';
-					at = parseWeekRange(tokens, at);
-
-				} else if (at !== 0 && at !== tokens.length - 1 && tokens[at][0] === ':') {
-					/* Ignore colon if they appear somewhere else than as time separator.
-					 * Except the start or end of the value.
-					 * This provides compatibility with the syntax proposed by Netzwolf:
-					 * http://wiki.openstreetmap.org/wiki/Key:opening_hours/specification#separator_for_readability
-					 * Check for valid use of <separator_for_readability> is implemented in function getWarnings().
-					 */
-
-					if (!done_with_warnings && matchTokens(tokens, at-1, 'holiday'))
-						parsing_warnings.push([nrule, at, 'Please don’t use ":" after ' + tokens[at-1][1] + '.']);
-
-					at++;
-				} else if (matchTokens(tokens, at, 'number', 'timesep')
-						|| matchTokens(tokens, at, 'timevar')
-						|| matchTokens(tokens, at, '(', 'timevar')
-						|| matchTokens(tokens, at, 'number', '-')) {
-
-					at = parseTimeRange(tokens, at, selectors, false);
-
-				} else if (matchTokens(tokens, at, 'state')) {
-
-					if (tokens[at][0] === 'open') {
-						selectors.meaning = true;
-					} else if (tokens[at][0] === 'closed' || tokens[at][0] === 'off') {
-						selectors.meaning = false;
-					} else {
-						selectors.meaning = false;
-						selectors.unknown = true;
-					}
-
-					rule_modifier_specified = true;
-					at++;
-					if (typeof tokens[at] === 'object' && tokens[at][0] === ',') // additional rule
-						at = [ at + 1 ];
-
-				} else if (matchTokens(tokens, at, 'comment')) {
-					selectors.comment = tokens[at][0];
-					if (!rule_modifier_specified) {
-						// Then it is unknown. Either with unknown explicitly
-						// specified or just a comment.
-						selectors.meaning = false;
-						selectors.unknown = true;
-					}
-
-					rule_modifier_specified = true;
-					at++;
-					if (typeof tokens[at] === 'object' && tokens[at][0] === ',') // additional rule
-						at = [ at + 1 ];
-				} else if ((at === 0 || at === tokens.length - 1) && matchTokens(tokens, at, 'rule separator')) {
-					at++;
-					console.log("value: " + nrule);
-					// throw formatLibraryBugMessage('Not implemented yet.');
-				} else {
-					var warnings = getWarnings();
-					throw formatWarnErrorMessage(nrule, at, 'Unexpected token: "' + tokens[at][1]
-						+ '" This means that the syntax is not valid at that point or it is currently not supported.')
-						+ (warnings ? (' ' + warnings.join('; ')) : '');
-				}
-
-				if (typeof at === 'object') { // additional rule
-					tokens[at[0] - 1][1] = 'rule separator';
-					break;
-				}
-			}
-
-			return at;
-		}
-
-		function get_last_token_pos_in_token_group(tokens, at, last_at) {
-			for (at++; at < last_at; at++) {
-				if (typeof tokens[at] !== 'undefined') {
-					if (typeof tokens[at][3] === 'string'
-							|| tokens[at][1] === 'comment'
-							|| tokens[at][1] === 'state'){
-
-							return at - 1;
-					}
-				}
-			}
-			return last_at;
-		}
-		// }}}
-
-		// helper functions for sub parser {{{
-
-		/* For given date, returns date moved to the start of the day with an offset specified in minutes. {{{
-		 * For example, if date is 2014-05-19_18:17:12, dateAtDayMinutes would
-		 * return 2014-05-19_02:00:00 for minutes=120.
-		 *
-		 * :param date: Date object.
-		 * :param minutes: Minutes used as offset starting from midnight of current day.
-		 * :returns: Moved date object.
-		 */
-		function dateAtDayMinutes(date, minutes) {
-			return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, minutes);
-		}
-		// }}}
-
-		/* For given date, returns date moved to the specific day of week {{{
-		 *
-		 * :param date: Date object.
-		 * :param weekday: Integer number for day of week. Starting with zero (Sunday).
-		 * :returns: Moved date object.
-		 */
-		function dateAtNextWeekday(date, weekday) {
-			var delta = weekday - date.getDay();
-			return new Date(date.getFullYear(), date.getMonth(), date.getDate() + delta + (delta < 0 ? 7 : 0));
-		}
-		// }}}
-
-		/* Function to determine whether an array contains a value {{{
-		 * Source: http://stackoverflow.com/a/1181586
-		 *
-		 * :param needle: Element to find.
-		 * :returns: Index of element if present, if not present returns -1.
-		 */
-		function indexOf(needle) {
-			if(typeof Array.prototype.indexOf === 'function') {
-				indexOf = Array.prototype.indexOf;
-			} else {
-				indexOf = function(needle) {
-					var i = -1, index = -1;
-					for(i = 0; i < this.length; i++) {
-						if(this[i] === needle) {
-							index = i;
-							break;
-						}
-					}
-					return index;
-				};
-			}
-			return indexOf.call(this, needle);
-		}
-		// }}}
-
-		/* Numeric list parser (1,2,3-4,-1) {{{
-		 * Used in weekday parser above.
-		 *
-		 * :param tokens: List of token objects.
-		 * :param at: Position where to start.
-		 * :param func: Function func(from, to, at).
-		 * :returns: Position at which the token does not belong to the list any more.
-		 */
-		function parseNumRange(tokens, at, func) {
-			for (; at < tokens.length; at++) {
-				if (matchTokens(tokens, at, 'number', '-', 'number')) {
-					// Number range
-					func(tokens[at][0], tokens[at+2][0], at);
-					at += 3;
-				} else if (matchTokens(tokens, at, '-', 'number')) {
-					// Negative number
-					func(-tokens[at+1][0], -tokens[at+1][0], at);
-					at += 2;
-				} else if (matchTokens(tokens, at, 'number')) {
-					// Single number
-					func(tokens[at][0], tokens[at][0], at);
-					at++;
-				} else {
-					throw formatWarnErrorMessage(nrule, at + matchTokens(tokens, at, '-'),
-						'Unexpected token in number range: ' + tokens[at][1]);
-				}
-
-				if (!matchTokens(tokens, at, ','))
-					break;
-			}
-
-			return at;
-		}
-		// }}}
-
-		/* List parser for constrained weekdays in month range {{{
-		 * e.g. Su[-1] which selects the last Sunday of the month.
-		 *
-		 * :param tokens: List of token objects.
-		 * :param at: Position where to start.
-		 * :returns: Array:
-		 *			0. Constrained weekday number.
-		 *			1. Position at which the token does not belong to the list any more (after ']' token).
-		 */
-		function getConstrainedWeekday(tokens, at) {
-			var number = 0;
-			var endat = parseNumRange(tokens, at, function(from, to, at) {
-
-				// bad number
-				if (from === 0 || from < -5 || from > 5)
-					throw formatWarnErrorMessage(nrule, at,
-						'Number between -5 and 5 (except 0) expected');
-
-				if (from === to) {
-					if (number !== 0)
-						throw formatWarnErrorMessage(nrule, at,
-							'You can not use more than one constrained weekday in a month range');
-					number = from;
-				} else {
-					throw formatWarnErrorMessage(nrule, at+2,
-						'You can not use a range of constrained weekdays in a month range');
-				}
-			});
-
-			if (!matchTokens(tokens, endat, ']'))
-				throw formatWarnErrorMessage(nrule, endat, '"]" expected.');
-
-			return [ number, endat + 1 ];
-		}
-		// }}}
-
-		// Check if period is ok. Period 0 or 1 don’t make much sense.
-		function checkPeriod(at, period, period_type, parm_string) {
-			if (done_with_warnings)
-				return;
-
-			if (period === 0) {
-				throw formatWarnErrorMessage(nrule, at,
-					'You can not use '+ period_type +' ranges with period equals zero.');
-			} else if (period === 1) {
-				if (typeof parm_string === 'string' && parm_string === 'no_end_year')
-					parsing_warnings.push([nrule, at,
-						'Please don’t use '+ period_type +' ranges with period equals one.'
-						+ ' If you want to express that a facility is open starting from a year without limit use "<year>+".']);
-				else
-					parsing_warnings.push([nrule, at,
-						'Please don’t use '+ period_type +' ranges with period equals one.']);
-			}
-		}
-
-		/* Get date moved to constrained weekday (and moved for add_days. {{{
-		 * E.g. used for 'Aug Su[-1] -1 day'.
-		 *
-		 * :param year: Year as integer.
-		 * :param month: Month as integer starting with zero.
-		 * :param weekday: Integer number for day of week. Starting with zero (Sunday).
-		 * :param constrained_weekday: Position where to start.
-		 * :returns: Date object.
-		 */
-		function getDateForConstrainedWeekday(year, month, weekday, constrained_weekday, add_days) {
-			var tmp_date = dateAtNextWeekday(
-				new Date(year, month + (constrained_weekday[0] > 0 ? 0 : 1), 1), weekday);
-
-			tmp_date.setDate(tmp_date.getDate() + (constrained_weekday[0] + (constrained_weekday[0] > 0 ? -1 : 0)) * 7);
-
-			if (typeof add_days !== 'undefined' && add_days[1])
-				tmp_date.setDate(tmp_date.getDate() + add_days[0]);
-
-			return tmp_date;
-		}
-		// }}}
-
-		/* Check if date is valid. {{{
-		 *
-		 * :param month: Month as integer starting with zero.
-		 * :param date: Day of month as integer.
-		 * :returns: undefined. There is no real return value. This function just throws an exception if something is wrong.
-		 */
-		function checkIfDateIsValid(month, day, nrule, at) {
-			// May use this instead. The problem is that this does not give feedback as precise as the code which is used in this function.
-			// var testDate = new Date(year, month, day);
-			// if (testDate.getDate() !== day || testDate.getMonth() !== month || testDate.getFullYear() !== year) {
-			// 	console.error('date not valid');
-			// }
-
-			// https://en.wikipedia.org/wiki/Month#Julian_and_Gregorian_calendars
-			if (day < 1 || day > 31)
-				throw formatWarnErrorMessage(nrule, at, 'Day must be between 1 and 31.');
-			if ((month===3 || month===5 || month===8 || month===10) && day===31)
-				throw formatWarnErrorMessage(nrule, at, 'Month ' + months[month] + " doesn't have 31 days.!");
-			if (month === 1 && day === 30)
-				throw formatWarnErrorMessage(nrule, at, 'Month ' + months[1]+ " either has 28 or 29 days (leap years).");
-		}
-		// }}}
-		// }}}
-
-		/* Time range parser (10:00-12:00,14:00-16:00) {{{
-		 *
-		 * :param tokens: List of token objects.
-		 * :param at: Position where to start.
-		 * :param selectors: Reference to selector object.
-		 * :param extended_open_end: Used for combined time range with open end.
-		 * extended_open_end: <time> - <time> +
-		 *            param at is here A (if extended_open_end is true)
-		 * :returns: Position at which the token does not belong to the selector anymore.
-		 */
-		function parseTimeRange(tokens, at, selectors, extended_open_end) {
-			if (!extended_open_end)
-				tokens[at][3] = 'time';
-
-			for (; at < tokens.length; at++) {
-				var has_time_var_calc = [], has_normal_time = []; // element 0: start time, 1: end time
-					has_normal_time[0]   = matchTokens(tokens, at, 'number', 'timesep', 'number');
-					has_time_var_calc[0] = matchTokens(tokens, at, '(', 'timevar');
-				var minutes_from,
-					minutes_to;
-				if (has_normal_time[0] || matchTokens(tokens, at, 'timevar') || has_time_var_calc[0]) {
-					// relying on the fact that always *one* of them is true
-
-					var is_point_in_time = false; // default no time range
-					var has_open_end     = false; // default no open end
-					var timevar_add      = [ 0, 0 ];
-					var timevar_string   = [];    // capture timevar string like 'sunrise' to calculate it for the current date.
-					var point_in_time_period;
-
-					// minutes_from
-					if (has_normal_time[0]) {
-						minutes_from = getMinutesByHoursMinutes(tokens, nrule, at+has_time_var_calc[0]);
-					} else {
-						timevar_string[0] = tokens[at+has_time_var_calc[0]][0];
-						minutes_from = word_value_replacement[timevar_string[0]];
-
-						if (has_time_var_calc[0]) {
-							timevar_add[0] = parseTimevarCalc(tokens, at);
-							minutes_from += timevar_add[0];
-						}
-					}
-
-					var at_end_time = at+(has_normal_time[0] ? 3 : (has_time_var_calc[0] ? 7 : 1))+1; // after '-'
-					if (!matchTokens(tokens, at_end_time - 1, '-')) { // not time range
-						if (matchTokens(tokens, at_end_time - 1, '+')) {
-							has_open_end = true;
-						} else {
-							if (oh_mode === 0) {
-								throw formatWarnErrorMessage(nrule,
-									at+(
-										has_normal_time[0] ? (
-											typeof tokens[at+3] === 'object' ? 3 : 2
-										) : (
-											has_time_var_calc[0] ? 2 : (
-													typeof tokens[at+1] !== 'undefined' ? 1 : 0
-												)
-										)
-									),
-									'hyphen (-) or open end (+) in time range '
-									+ (has_time_var_calc[0] ? 'calculation ' : '') + 'expected.'
-									+ ' For working with points in time, the mode for ' + library_name + ' has to be altered.'
-									+ ' Maybe wrong tag?');
-							} else {
-								minutes_to = minutes_from + 1;
-								is_point_in_time = true;
-							}
-						}
-					}
-
-					// minutes_to
-					if (has_open_end) {
-						if (extended_open_end === 1)
-							minutes_from += minutes_in_day;
-						if (minutes_from >= 22 * 60)
-							minutes_to = minutes_from +  8 * 60;
-						else if (minutes_from >= 17 * 60)
-							minutes_to = minutes_from + 10 * 60;
-						else
-							minutes_to = minutes_in_day;
-					} else if (!is_point_in_time) {
-						has_normal_time[1] = matchTokens(tokens, at_end_time, 'number', 'timesep', 'number');
-						has_time_var_calc[1]      = matchTokens(tokens, at_end_time, '(', 'timevar');
-						if (!has_normal_time[1] && !matchTokens(tokens, at_end_time, 'timevar') && !has_time_var_calc[1]) {
-							throw formatWarnErrorMessage(nrule, at_end_time - (typeof tokens[at_end_time] !== 'undefined' ? 0 : 1),
-									'Time range does not continue as expected');
-						} else {
-							if (has_normal_time[1]) {
-								minutes_to = getMinutesByHoursMinutes(tokens, nrule, at_end_time);
-							} else {
-								timevar_string[1] = tokens[at_end_time+has_time_var_calc[1]][0];
-								minutes_to = word_value_replacement[timevar_string[1]];
-							}
-
-							if (has_time_var_calc[1]) {
-								timevar_add[1] = parseTimevarCalc(tokens, at_end_time);
-								minutes_to += timevar_add[1];
-							}
-						}
-					}
-
-					at = at_end_time + (is_point_in_time ? -1 :
-							(has_normal_time[1] ? 3 : (has_time_var_calc[1] ? 7 : !has_open_end))
-						);
-
-					if (matchTokens(tokens, at, '/', 'number')) {
-						if (matchTokens(tokens, at + 2, 'timesep', 'number')) { // /hours:minutes
-							point_in_time_period = getMinutesByHoursMinutes(tokens, nrule, at + 1);
-							at += 4;
-						} else { // /minutes
-							point_in_time_period = tokens[at + 1][0];
-							at += 2;
-							if (matchTokens(tokens, at, 'timesep'))
-								throw formatWarnErrorMessage(nrule, at,
-									'Time period does not continue as expected. Exampe "/01:30".');
-						}
-
-						// Check at this later state in the if condition to get the correct position.
-						if (oh_mode === 0)
-							throw formatWarnErrorMessage(nrule, at - 1,
-								'opening_hours is running in "time range mode". Found point in time.');
-
-						is_point_in_time = true;
-					} else if (matchTokens(tokens, at, '+')) {
-						parseTimeRange(tokens, at_end_time, selectors, minutes_to < minutes_from ? 1 : true);
-						at++;
-					} else if (oh_mode === 1 && !is_point_in_time) {
-						throw formatWarnErrorMessage(nrule, at_end_time,
-							'opening_hours is running in "points in time mode". Found time range.');
-					}
-
-					if (typeof lat !== 'undefined') { // lon will also be defined (see above)
-						if (!has_normal_time[0] || !(has_normal_time[1] || has_open_end || is_point_in_time) )
-							week_stable = false;
-					} else { // we can not calculate exact times so we use the already applied constants (word_value_replacement).
-						timevar_string = [];
-					}
-
-					// Normalize minutes into range.
-					if (!extended_open_end && minutes_from >= minutes_in_day)
-						throw formatWarnErrorMessage(nrule, at_end_time - 2,
-							'Time range starts outside of the current day');
-					if (minutes_to < minutes_from || ((has_normal_time[0] && has_normal_time[1]) && minutes_from === minutes_to))
-						minutes_to += minutes_in_day;
-					if (minutes_to > minutes_in_day * 2)
-						throw formatWarnErrorMessage(nrule, at_end_time + (has_normal_time[1] ? 4 : (has_time_var_calc[1] ? 7 : 1)) - 2,
-							'Time spanning more than two midnights not supported');
-
-					// This shortcut makes always-open range check faster.
-					if (minutes_from === 0 && minutes_to === minutes_in_day) {
-						selectors.time.push(function(date) { return [true]; });
-					} else {
-						if (minutes_to > minutes_in_day) { // has_normal_time[1] must be true
-							selectors.time.push(function(minutes_from, minutes_to, timevar_string, timevar_add, has_open_end, is_point_in_time, point_in_time_period, extended_open_end) { return function(date) {
-								var ourminutes = date.getHours() * 60 + date.getMinutes();
-
-								if (timevar_string[0]) {
-									var date_from = SunCalc.getTimes(date, lat, lon)[timevar_string[0]];
-									minutes_from  = date_from.getHours() * 60 + date_from.getMinutes() + timevar_add[0];
-								}
-								if (timevar_string[1]) {
-									var date_to = SunCalc.getTimes(date, lat, lon)[timevar_string[1]];
-									minutes_to  = date_to.getHours() * 60 + date_to.getMinutes() + timevar_add[1];
-									minutes_to += minutes_in_day;
-									// Needs to be added because it was added by
-									// normal times: if (minutes_to < minutes_from)
-									// above the selector construction.
-								} else if (is_point_in_time && typeof point_in_time_period !== 'number') {
-									minutes_to = minutes_from + 1;
-								}
-
-								if (typeof point_in_time_period === 'number') {
-									if (ourminutes < minutes_from) {
-										return [false, dateAtDayMinutes(date, minutes_from)];
-									} else if (ourminutes <= minutes_to) {
-										for (var cur_min = minutes_from; ourminutes + point_in_time_period >= cur_min; cur_min += point_in_time_period) {
-											if (cur_min === ourminutes) {
-												return [true, dateAtDayMinutes(date, ourminutes + 1)];
-											} else if (ourminutes < cur_min) {
-												return [false, dateAtDayMinutes(date, cur_min)];
-											}
-										}
-									}
-									return [false, dateAtDayMinutes(date, minutes_in_day)];
-								} else {
-									if (ourminutes < minutes_from)
-										return [false, dateAtDayMinutes(date, minutes_from)];
-									else
-										return [true, dateAtDayMinutes(date, minutes_to), has_open_end, extended_open_end];
-								}
-							}}(minutes_from, minutes_to, timevar_string, timevar_add, has_open_end, is_point_in_time, point_in_time_period, extended_open_end));
-
-							selectors.wraptime.push(function(minutes_from, minutes_to, timevar_string, timevar_add, has_open_end, is_point_in_time, point_in_time_period, extended_open_end) { return function(date) {
-								var ourminutes = date.getHours() * 60 + date.getMinutes();
-
-								if (timevar_string[0]) {
-									var date_from = SunCalc.getTimes(date, lat, lon)[timevar_string[0]];
-									minutes_from  = date_from.getHours() * 60 + date_from.getMinutes() + timevar_add[0];
-								}
-								if (timevar_string[1]) {
-									var date_to = SunCalc.getTimes(date, lat, lon)[timevar_string[1]];
-									minutes_to  = date_to.getHours() * 60 + date_to.getMinutes() + timevar_add[1];
-									// minutes_in_day does not need to be added.
-									// For normal times in it was added in: if (minutes_to < // minutes_from)
-									// above the selector construction and
-									// subtracted in the selector construction call
-									// which returns the selector function.
-								}
-
-								if (typeof point_in_time_period === 'number') {
-									if (ourminutes <= minutes_to) {
-										for (var cur_min = 0; ourminutes + point_in_time_period >= cur_min; cur_min += point_in_time_period) {
-											if (cur_min === ourminutes) {
-												return [true, dateAtDayMinutes(date, ourminutes + 1)];
-											} else if (ourminutes < cur_min) {
-												return [false, dateAtDayMinutes(date, cur_min)];
-											}
-										}
-									}
-								} else {
-									if (ourminutes < minutes_to)
-										return [true, dateAtDayMinutes(date, minutes_to), has_open_end, extended_open_end];
-								}
-								return [false, undefined];
-							}}(minutes_from, minutes_to - minutes_in_day, timevar_string, timevar_add, has_open_end, is_point_in_time, point_in_time_period, extended_open_end));
-						} else {
-							selectors.time.push(function(minutes_from, minutes_to, timevar_string, timevar_add, has_open_end, is_point_in_time, point_in_time_period, extended_open_end) { return function(date) {
-								var ourminutes = date.getHours() * 60 + date.getMinutes();
-
-								if (timevar_string[0]) {
-									var date_from = SunCalc.getTimes(date, lat, lon)[timevar_string[0]];
-									minutes_from  = date_from.getHours() * 60 + date_from.getMinutes() + timevar_add[0];
-								}
-								if (timevar_string[1]) {
-									var date_to = SunCalc.getTimes(date, lat, lon)[timevar_string[1]];
-									minutes_to  = date_to.getHours() * 60 + date_to.getMinutes() + timevar_add[1];
-								} else if (is_point_in_time && typeof point_in_time_period !== 'number') {
-									minutes_to = minutes_from + 1;
-								}
-
-								if (typeof point_in_time_period === 'number') {
-									if (ourminutes < minutes_from) {
-										return [false, dateAtDayMinutes(date, minutes_from)];
-									} else if (ourminutes <= minutes_to) {
-										for (var cur_min = minutes_from; ourminutes + point_in_time_period >= cur_min; cur_min += point_in_time_period) {
-											if (cur_min === ourminutes) {
-												return [true, dateAtDayMinutes(date, ourminutes + 1)];
-											} else if (ourminutes < cur_min) {
-												return [false, dateAtDayMinutes(date, cur_min)];
-											}
-										}
-									}
-									return [false, dateAtDayMinutes(date, minutes_in_day)];
-								} else {
-									if (ourminutes < minutes_from)
-										return [false, dateAtDayMinutes(date, minutes_from)];
-									else if (ourminutes < minutes_to)
-										return [true, dateAtDayMinutes(date, minutes_to), has_open_end];
-									else
-										return [false, dateAtDayMinutes(date, minutes_from + minutes_in_day)];
-								}
-							}}(minutes_from, minutes_to, timevar_string, timevar_add, has_open_end, is_point_in_time, point_in_time_period, extended_open_end));
-						}
-					}
-
-				} else if (matchTokens(tokens, at, 'number', '-', 'number')) { // "Mo 09-18" (Please don’t use this) -> "Mo 09:00-18:00".
-					minutes_from = tokens[at][0]   * 60;
-					minutes_to   = tokens[at+2][0] * 60;
-					if (!done_with_warnings)
-						parsing_warnings.push([nrule, at + 2,
-							'Time range without minutes specified. Not very explicit!'
-							+ ' Please use this syntax instead "'
-							+ (tokens[at][0]   < 10 ? '0' : '') + tokens[at][0]   + ':00-'
-							+ (tokens[at+2][0] < 10 ? '0' : '') + tokens[at+2][0] + ':00".']);
-
-					if (minutes_from >= minutes_in_day)
-						throw formatWarnErrorMessage(nrule, at,
-							'Time range starts outside of the current day');
-					if (minutes_to < minutes_from)
-						minutes_to += minutes_in_day;
-					if (minutes_to > minutes_in_day * 2)
-						throw formatWarnErrorMessage(nrule, at + 2,
-							'Time spanning more than two midnights not supported');
-
-					if (minutes_to > minutes_in_day) {
-						selectors.time.push(function(minutes_from, minutes_to) { return function(date) {
-							var ourminutes = date.getHours() * 60 + date.getMinutes();
-
-							if (ourminutes < minutes_from)
-								return [false, dateAtDayMinutes(date, minutes_from)];
-							else
-								return [true, dateAtDayMinutes(date, minutes_to)];
-						}}(minutes_from, minutes_to));
-
-						selectors.wraptime.push(function(minutes_from, minutes_to) { return function(date) {
-							var ourminutes = date.getHours() * 60 + date.getMinutes();
-
-							if (ourminutes < minutes_to)
-								return [true, dateAtDayMinutes(date, minutes_to)];
-							else
-								return [false, undefined];
-						}}(minutes_from, minutes_to - minutes_in_day));
-					} else {
-						selectors.time.push(function(minutes_from, minutes_to) { return function(date) {
-							var ourminutes = date.getHours() * 60 + date.getMinutes();
-
-							if (ourminutes < minutes_from)
-								return [false, dateAtDayMinutes(date, minutes_from)];
-							else if (ourminutes < minutes_to)
-								return [true, dateAtDayMinutes(date, minutes_to), has_open_end];
-							else
-								return [false, dateAtDayMinutes(date, minutes_from + minutes_in_day)];
-						}}(minutes_from, minutes_to));
-					}
-
-					at += 3;
-				} else { // additional rule
-					if (matchTokens(tokens, at, '('))
-						throw formatWarnErrorMessage(nrule, at, 'Missing variable time (e.g. sunrise) after: "' + tokens[at][1] + '"');
-					if (matchTokens(tokens, at, 'number', 'timesep'))
-						throw formatWarnErrorMessage(nrule, at+1, 'Missing minutes in time range after: "' + tokens[at+1][1] + '"');
-					if (matchTokens(tokens, at, 'number'))
-						throw formatWarnErrorMessage(nrule, at + (typeof tokens[at+1] !== 'undefined' ? 1 : 0),
-								'Missing time separator in time range after: "' + tokens[at][1] + '"');
-					return [ at ];
-				}
-
-				if (!matchTokens(tokens, at, ','))
-					break;
-			}
-
-			return at;
-		}
-		// }}}
-
-		/* Helpers for time range parser {{{ */
-
-		/* Get time in minutes from <hour>:<minute> (tokens). {{{
-		 * Only used if throwing an error is wanted.
-		 *
-		 * :param tokens: List of token objects.
-		 * :param nrule: Rule number starting with 0.
-		 * :param at: Position at which the time begins.
-		 * :returns: Time in minutes.
-		 */
-		function getMinutesByHoursMinutes(tokens, nrule, at) {
-			if (tokens[at+2][0] > 59)
-				throw formatWarnErrorMessage(nrule, at+2,
-						'Minutes are greater than 59.');
-			return tokens[at][0] * 60 + tokens[at+2][0];
-		}
-		// }}}
-
-		/* Get time in minutes from "(sunrise-01:30)" {{{
-		 * Extract the added or subtracted time from "(sunrise-01:30)"
-		 * returns time in minutes e.g. -90.
-		 *
-		 * :param tokens: List of token objects.
-		 * :param at: Position where the specification for the point in time could be.
-		 * :returns: Time in minutes on suggest, throws an exception otherwise.
-		*/
-		function parseTimevarCalc(tokens, at) {
-			var error;
-			if (matchTokens(tokens, at+2, '+') || matchTokens(tokens, at+2, '-')) {
-				if (matchTokens(tokens, at+3, 'number', 'timesep', 'number')) {
-					if (matchTokens(tokens, at+6, ')')) {
-						var add_or_subtract = tokens[at+2][0] === '+' ? '1' : '-1';
-						var minutes = getMinutesByHoursMinutes(tokens, nrule, at+3) * add_or_subtract;
-						if (minutes === 0)
-							parsing_warnings.push([ nrule, at+5, 'Adding zero in a variable time calculation does not change the variable time.'
-									+ ' Please omit the calculation (example: "sunrise-(sunset-00:00)").' ]
-								);
-						return minutes;
-					} else {
-						error = [ at+6, '. Missing ")".'];
-					}
-				} else {
-					error = [ at+5, ' (time).'];
-				}
-			} else {
-				error = [ at+2, '. "+" or "-" expected.'];
-			}
-
-			if (error)
-				throw formatWarnErrorMessage(nrule, error[0],
-					'Calculcation with variable time is not in the right syntax' + error[1]);
-		}
-		/* }}} */
-		/* }}} */
-
-		/* Weekday range parser (Mo,We-Fr,Sa[1-2,-1],PH). {{{
-		 *
-		 * :param tokens: List of token objects.
-		 * :param at: Position where the weekday tokens could be.
-		 * :param selectors: Reference to selector object.
-		 * :returns: Position at which the token does not belong to the selector anymore.
-		 */
-		function parseWeekdayRange(tokens, at, selectors, in_holiday_selector) {
-			if (!in_holiday_selector) {
-				in_holiday_selector = true;
-				tokens[at][3] = 'weekday';
-			}
-
-			for (; at < tokens.length; at++) {
-				if (matchTokens(tokens, at, 'weekday', '[')) {
-					// Conditional weekday (Mo[3])
-					var numbers = [];
-
-					// Get list of constraints
-					var endat = parseNumRange(tokens, at+2, function(from, to, at) {
-
-						// bad number
-						if (from === 0 || from < -5 || from > 5)
-							throw formatWarnErrorMessage(nrule, at,
-								'Number between -5 and 5 (except 0) expected');
-
-						if (from === to) {
-							numbers.push(from);
-						} else if (from < to) {
-							for (var i = from; i <= to; i++) {
-								// bad number
-								if (i === 0 || i < -5 || i > 5)
-									throw formatWarnErrorMessage(nrule, at+2,
-										'Number between -5 and 5 (except 0) expected.');
-
-								numbers.push(i);
-							}
-						} else {
-							throw formatWarnErrorMessage(nrule, at+2,
-								'Bad range: ' + from + '-' + to);
-						}
-					});
-
-					if (!matchTokens(tokens, endat, ']'))
-						throw formatWarnErrorMessage(nrule, endat, '"]" or more numbers expected.');
-
-					var add_days = getMoveDays(tokens, endat+1, 6, 'constrained weekdays');
-					week_stable = false;
-
-					// Create selector for each list element.
-					for (var nnumber = 0; nnumber < numbers.length; nnumber++) {
-
-						selectors.weekday.push(function(weekday, number, add_days) { return function(date) {
-							var date_num = getValueForDate(date, false); // Year not needed to distinguish.
-							var start_of_this_month = new Date(date.getFullYear(), date.getMonth(), 1);
-							var start_of_next_month = new Date(date.getFullYear(), date.getMonth() + 1, 1);
-
-							var target_day_this_month;
-
-							target_day_this_month = getDateForConstrainedWeekday(date.getFullYear(), date.getMonth(), weekday, [ number ]);
-
-							var target_day_with_added_days_this_month = new Date(target_day_this_month.getFullYear(),
-								target_day_this_month.getMonth(), target_day_this_month.getDate() + add_days);
-
-							// The target day with added days can be before this month
-							if (target_day_with_added_days_this_month.getTime() < start_of_this_month.getTime()) {
-								// but in this case, the target day without the days added needs to be in this month
-								if (target_day_this_month.getTime() >= start_of_this_month.getTime()) {
-									// so we calculate it for the month
-									// following this month and hope that the
-									// target day will actually be this month.
-
-									target_day_with_added_days_this_month = dateAtNextWeekday(
-										new Date(date.getFullYear(), date.getMonth() + (number > 0 ? 0 : 1) + 1, 1), weekday);
-									target_day_this_month.setDate(target_day_with_added_days_this_month.getDate()
-										+ (number + (number > 0 ? -1 : 0)) * 7 + add_days);
-								} else {
-									// Calculated target day is not inside this month
-									// therefore the specified weekday (e.g. fifth Sunday)
-									// does not exist this month. Try it next month.
-									return [false, start_of_next_month];
-								}
-							} else if (target_day_with_added_days_this_month.getTime() >= start_of_next_month.getTime()) {
-								// The target day is in the next month. If the target day without the added days is not in this month
-								if (target_day_this_month.getTime() >= start_of_next_month.getTime())
-									return [false, start_of_next_month];
-							}
-
-							var target_day_with_added_moved_days_this_month;
-							if (add_days > 0) {
-								target_day_with_added_moved_days_this_month = dateAtNextWeekday(
-									new Date(date.getFullYear(), date.getMonth() + (number > 0 ? 0 : 1) -1, 1), weekday);
-								target_day_with_added_moved_days_this_month.setDate(target_day_with_added_moved_days_this_month.getDate()
-									+ (number + (number > 0 ? -1 : 0)) * 7 + add_days);
-
-								if (date_num === getValueForDate(target_day_with_added_moved_days_this_month, false))
-									return [true, dateAtDayMinutes(date, minutes_in_day)];
-							} else if (add_days < 0) {
-								target_day_with_added_moved_days_this_month = dateAtNextWeekday(
-									new Date(date.getFullYear(), date.getMonth() + (number > 0 ? 0 : 1) + 1, 1), weekday);
-								target_day_with_added_moved_days_this_month.setDate(target_day_with_added_moved_days_this_month.getDate()
-									+ (number + (number > 0 ? -1 : 0)) * 7 + add_days);
-
-								if (target_day_with_added_moved_days_this_month.getTime() >= start_of_next_month.getTime()) {
-									if (target_day_with_added_days_this_month.getTime() >= start_of_next_month.getTime())
-										return [false, target_day_with_added_moved_days_this_month];
-								} else {
-									if (target_day_with_added_days_this_month.getTime() < start_of_next_month.getTime()
-										&& getValueForDate(target_day_with_added_days_this_month, false) === date_num)
-										return [true, dateAtDayMinutes(date, minutes_in_day)];
-
-									target_day_with_added_days_this_month = target_day_with_added_moved_days_this_month;
-								}
-							}
-
-							// we hit the target day
-							if (date.getDate() === target_day_with_added_days_this_month.getDate()) {
-								return [true, dateAtDayMinutes(date, minutes_in_day)];
-							}
-
-							// we're before target day
-							if (date.getDate() < target_day_with_added_days_this_month.getDate()) {
-								return [false, target_day_with_added_days_this_month];
-							}
-
-							// we're after target day, set check date to next month
-							return [false, start_of_next_month];
-						}}(tokens[at][0], numbers[nnumber], add_days[0]));
-					}
-
-					at = endat + 1 + add_days[1];
-				} else if (matchTokens(tokens, at, 'weekday')) {
-					// Single weekday (Mo) or weekday range (Mo-Fr)
-					var is_range = matchTokens(tokens, at+1, '-', 'weekday');
-
-					var weekday_from = tokens[at][0];
-					var weekday_to = is_range ? tokens[at+2][0] : weekday_from;
-
-					var inside = true;
-
-					// handle reversed range
-					if (weekday_to < weekday_from) {
-						var tmp = weekday_to;
-						weekday_to = weekday_from - 1;
-						weekday_from = tmp + 1;
-						inside = false;
-					}
-
-					if (weekday_to < weekday_from) { // handle full range
-						selectors.weekday.push(function(date) { return [true]; });
-						// Not needed. If there is no selector it automatically matches everything.
-						// WRONG: This only works if there is no other selector in this selector group ...
-					} else {
-						selectors.weekday.push(function(weekday_from, weekday_to, inside) { return function(date) {
-							var ourweekday = date.getDay();
-
-							if (ourweekday < weekday_from || ourweekday > weekday_to) {
-								return [!inside, dateAtNextWeekday(date, weekday_from)];
-							} else {
-								return [inside, dateAtNextWeekday(date, weekday_to + 1)];
-							}
-						}}(weekday_from, weekday_to, inside));
-					}
-
-					at += is_range ? 3 : 1;
-				} else if (matchTokens(tokens, at, 'holiday')) {
-					week_stable = false;
-					return parseHoliday(tokens, at, selectors, true, in_holiday_selector);
-				} else if (matchTokens(tokens, at - 1, ',')) { // additional rule
-					throw formatWarnErrorMessage(
-						nrule,
-						at - 1,
-						'An additional rule does not make sense here. Just use a ";" as rule separator.'
-						+ ' See https://wiki.openstreetmap.org/wiki/Key:opening_hours/specification#explain:additional_rule_separator');
-				} else {
-					throw formatWarnErrorMessage(nrule, at, 'Unexpected token in weekday range: ' + tokens[at][1]);
-				}
-
-				if (!matchTokens(tokens, at, ','))
-					break;
-			}
-
-			return at;
-		}
-		// }}}
-
-		/* Get the number of days a date should be moved (if any). {{{
-		 *
-		 * :param tokens: List of token objects.
-		 * :param at: Position where the date moving tokens could be.
-		 * :param max_differ: Maximal number of days to move (could also be zero if there are no day move tokens).
-		 * :returns: Array:
-		 *			0. Days to add.
-		 *			1. How many tokens.
-		 */
-		function getMoveDays(tokens, at, max_differ, name) {
-			var add_days = [ 0, 0 ]; // [ 'days to add', 'how many tokens' ]
-			add_days[0] = matchTokens(tokens, at, '+') || (matchTokens(tokens, at, '-') ? -1 : 0);
-			if (add_days[0] !== 0 && matchTokens(tokens, at+1, 'number', 'calcday')) {
-				// continues with '+ 5 days' or something like that
-				if (tokens[at+1][0] > max_differ)
-					throw formatWarnErrorMessage(nrule, at+2,
-						'There should be no reason to differ more than ' + max_differ + ' days from a ' + name + '. If so tell us …');
-				add_days[0] *= tokens[at+1][0];
-				if (add_days[0] === 0 && !done_with_warnings)
-					parsing_warnings.push([ nrule, at+2, 'Adding 0 does not change the date. Please omit this.' ]);
-				add_days[1] = 3;
-			} else {
-				add_days[0] = 0;
-			}
-			return add_days;
-		}
-		// }}}
-
-		/* Holiday parser for public and school holidays (PH,SH) {{{
-		 *
-		 * :param tokens: List of token objects.
-		 * :param at: Position where to start.
-		 * :param selectors: Reference to selector object.
-		 * :param push_to_weekday: Will push the selector into the weekday selector array which has the desired side effect of working in conjunction with the weekday selectors (either the holiday match or the weekday), which is the normal and expected behavior.
-		 * :returns: Position at which the token does not belong to the selector anymore.
-		 */
-		function parseHoliday(tokens, at, selectors, push_to_weekday, in_holiday_selector) {
-			if (!in_holiday_selector) {
-
-				if (push_to_weekday)
-					tokens[at][3] = 'weekday';
-				else
-					tokens[at][3] = 'holiday'; // Could also be holiday but this is not important here.
-			}
-
-			for (; at < tokens.length; at++) {
-				if (matchTokens(tokens, at, 'holiday')) {
-					if (tokens[at][0] === 'PH') {
-						var applying_holidays = getMatchingHoliday(tokens[at][0]);
-
-						// Only allow moving one day in the past or in the future.
-						// This makes implementation easier because only one holiday is assumed to be moved to the next year.
-						var add_days = getMoveDays(tokens, at+1, 1, 'public holiday');
-
-						var selector = function(applying_holidays, add_days) { return function(date) {
-
-							var holidays = getApplyingHolidaysForYear(applying_holidays, date.getFullYear(), add_days);
-							// Needs to be calculated each time because of movable days.
-
-							var date_num = getValueForDate(date, true);
-
-							for (var i = 0; i < holidays.length; i++) {
-								var next_holiday_date_num = getValueForDate(holidays[i][0], true);
-
-								if (date_num < next_holiday_date_num) {
-
-									if (add_days[0] > 0) {
-										// Calculate the last holiday from previous year to tested against it.
-										var holidays_last_year = getApplyingHolidaysForYear(applying_holidays, date.getFullYear() - 1, add_days);
-										var last_holiday_last_year = holidays_last_year[holidays_last_year.length - 1];
-										var last_holiday_last_year_num = getValueForDate(last_holiday_last_year[0], true);
-
-										if (date_num < last_holiday_last_year_num ) {
-											return [ false, last_holiday_last_year[0] ];
-										} else if (date_num === last_holiday_last_year_num) {
-											return [true, dateAtDayMinutes(last_holiday_last_year[0], minutes_in_day),
-												'Day after ' +last_holiday_last_year[1] ];
-										}
-									}
-
-									return [ false, holidays[i][0] ];
-								} else if (date_num === next_holiday_date_num) {
-									return [true, new Date(date.getFullYear(), date.getMonth(), date.getDate() + 1),
-										(add_days[0] > 0 ? 'Day after ' : (add_days[0] < 0 ? 'Day before ' : '')) + holidays[i][1] ];
-								}
-							}
-
-							if (add_days[0] < 0) {
-								// Calculate the first holiday from next year to tested against it.
-								var holidays_next_year = getApplyingHolidaysForYear(applying_holidays, date.getFullYear() + 1, add_days);
-								var first_holidays_next_year = holidays_next_year[0];
-								var first_holidays_next_year_num = getValueForDate(first_holidays_next_year[0], true);
-								if (date_num === first_holidays_next_year_num) {
-									return [true, dateAtDayMinutes(first_holidays_next_year[0], minutes_in_day),
-										'Day before ' + first_holidays_next_year[1] ];
-								}
-							}
-
-							// continue next year
-							return [ false, new Date(holidays[0][0].getFullYear() + 1,
-									holidays[0][0].getMonth(),
-									holidays[0][0].getDate()) ];
-
-						}}(applying_holidays, add_days);
-
-						if (push_to_weekday)
-							selectors.weekday.push(selector);
-						else
-							selectors.holiday.push(selector);
-
-						at += 1 + add_days[1];
-					} else if (tokens[at][0] === 'SH') {
-						var applying_holidays = getMatchingHoliday(tokens[at][0]);
-
-						var holidays = []; // needs to be sorted each time because of movable days
-
-						var selector = function(applying_holidays) { return function(date) {
-							var date_num = getValueForDate(date);
-
-							// Iterate over holiday array containing the different holiday ranges.
-							for (var i = 0; i < applying_holidays.length; i++) {
-
-								var holiday = getSHForYear(applying_holidays[i], date.getFullYear());
-
-								for (var h = 0; h < holiday.length; h+=4) {
-									var holiday_to_plus = new Date(date.getFullYear(), holiday[2+h] - 1, holiday[3+h] + 1);
-									var holiday_from = (holiday[0+h] - 1) * 100 + holiday[1+h];
-									var holiday_to   = (holiday[2+h] - 1) * 100 + holiday[3+h];
-									holiday_to_plus  = getValueForDate(holiday_to_plus);
-
-									var holiday_ends_next_year = holiday_to < holiday_from;
-
-									if (date_num < holiday_from) { // date is before selected holiday
-
-										// check if we are in the holidays from the last year spanning into this year
-										var last_year_holiday = getSHForYear(applying_holidays[applying_holidays.length - 1], date.getFullYear() - 1, false);
-										if (typeof last_year_holiday !== 'undefined') {
-											var last_year_holiday_from = (last_year_holiday[last_year_holiday.length - 4] - 1) * 100
-												+ last_year_holiday[last_year_holiday.length - 3]; // e.g. 1125
-											var last_year_holiday_to   = (last_year_holiday[last_year_holiday.length - 2] - 1) * 100
-												+ last_year_holiday[last_year_holiday.length - 1]; // e.g. 0005
-
-											if (last_year_holiday_to < last_year_holiday_from && date_num < last_year_holiday_to)
-												return [ true, new Date(date.getFullYear(),
-													last_year_holiday[last_year_holiday.length - 2] - 1,
-													last_year_holiday[last_year_holiday.length - 1] + 1),
-													applying_holidays[applying_holidays.length - 1].name ];
-											else
-												return [ false, new Date(date.getFullYear(), holiday[0+h] - 1, holiday[1+h]) ];
-										} else { // school holidays for last year are not defined.
-											return [ false, new Date(date.getFullYear(), holiday[0+h] - 1, holiday[1+h]) ];
-										}
-									} else if (holiday_from <= date_num && (date_num < holiday_to_plus || holiday_ends_next_year)) {
-										return [ true, new Date(date.getFullYear() + holiday_ends_next_year, holiday[2+h] - 1, holiday[3+h] + 1),
-											applying_holidays[i].name ];
-									} else if (holiday_to_plus === date_num) { // selected holiday end is equal to month and day
-										if (h + 4 < holiday.length) { // next holiday is next date range of the same holidays
-											h += 4;
-											return [ false, new Date(date.getFullYear(), holiday[0+h] - 1, holiday[1+h]) ];
-										} else {
-											if (i + 1 === applying_holidays.length) { // last holidays are handled, continue all over again
-												var holiday = getSHForYear(applying_holidays[0], date.getFullYear() + 1);
-												return [ false, new Date(date.getFullYear() + !holiday_ends_next_year, holiday[0+h] - 1, holiday[1+h]) ];
-											} else { // return the start of the next holidays
-													var holiday = getSHForYear(applying_holidays[i+1], date.getFullYear());
-													return [ false, new Date(date.getFullYear(), holiday[0] - 1, holiday[1]) ];
-											}
-										}
-									}
-								}
-							}
-							return [ false ];
-						}}(applying_holidays);
-
-						if (push_to_weekday)
-							selectors.weekday.push(selector);
-						else
-							selectors.holiday.push(selector);
-						at += 1; // FIXME: test
-					}
-				} else if (matchTokens(tokens, at, 'weekday')) {
-					return parseWeekdayRange(tokens, at, selectors, true);
-				} else if (matchTokens(tokens, at - 1, ',')) { // additional rule
-					throw formatWarnErrorMessage(
-						nrule,
-						at - 1,
-						'An additional rule does not make sense here. Just use a ";" as rule separator.'
-						+ ' See https://wiki.openstreetmap.org/wiki/Key:opening_hours/specification#explain:additional_rule_separator');
-				} else {
-					throw formatWarnErrorMessage(nrule, at, 'Unexpected token (holiday parser): ' + tokens[at][1]);
-				}
-
-				if (!matchTokens(tokens, at, ','))
-					break;
-			}
-
-			return at;
-		}
-
-		// Helpers for holiday parsers {{{
-
-		/* Returns a number for a date which can then be used to compare just the dates (without the time). {{{
-		 * This is necessary because a selector could be called for the middle of the day and we need to tell if it matches that day.
-		 * Example: Returns 20150015 for Jan 01 2015
-		 *
-		 * :param date: Date object.
-		 * :param include_year: Boolean. If true include the year.
-		 * :returns: Number for the date.
-		 */
-		function getValueForDate(date, include_year) {
-			// Implicit because undefined evaluates to false.
-			// include_year = typeof include_year !== 'undefined' ? include_year : false;
-
-			return (include_year ? date.getFullYear() * 10000 : 0) + date.getMonth() * 100 + date.getDate();
-		}
-		// }}}
-
-		// return the school holiday definition e.g. [ 5, 25, /* to */ 6, 5 ],
-		// for the specified year
-		function getSHForYear(SH_hash, year, fatal) {
-			if (typeof fatal === 'undefined')
-				fatal = true;
-
-			var holiday = SH_hash[year];
-			if (typeof holiday === 'undefined') {
-				holiday = SH_hash['default']; // applies for any year without explicit definition
-				if (typeof holiday === 'undefined') {
-					if (fatal) {
-						throw formatLibraryBugMessage('School holiday ' + SH_hash.name + ' has no definition for the year ' + year + '.'
-								+ ' You can also add them: ' + repository_url);
-					} else {
-						return undefined;
-					}
-				}
-			}
-			return holiday;
-		}
-
-		// Return closed holiday definition available.
-		// First try to get the state, if missing get the country wide holidays
-		// (which can be limited to some states).
-		function getMatchingHoliday(type_of_holidays) {
-			if (typeof location_cc !== 'undefined') {
-				if (holidays.hasOwnProperty(location_cc)) {
-					if (typeof location_state !== 'undefined'
-							&& holidays[location_cc][location_state]
-							&& holidays[location_cc][location_state][type_of_holidays]) {
-						// if holidays for the state are specified use it
-						// and ignore lesser specific ones (for the country)
-						return holidays[location_cc][location_state][type_of_holidays];
-					} else if (holidays[location_cc][type_of_holidays]) {
-						// holidays are only defined country wide
-						var matching_holiday = {}; // holidays in the country wide scope can be limited to certain states
-						for (var holiday_name in holidays[location_cc][type_of_holidays]) {
-							if (typeof holidays[location_cc][type_of_holidays][holiday_name][2] === 'object') {
-								if (-1 !== holidays[location_cc][type_of_holidays][holiday_name][2].indexOf(location_state))
-									matching_holiday[holiday_name] = holidays[location_cc][type_of_holidays][holiday_name];
-							} else {
-								matching_holiday[holiday_name] = holidays[location_cc][type_of_holidays][holiday_name];
-							}
-						}
-						if (Object.keys(matching_holiday).length === 0)
-						throw formatLibraryBugMessage('There are no holidays ' + type_of_holidays + ' defined for country ' + location_cc + '.'
-								+ ' You can also add them: ' + repository_url);
-						return matching_holiday;
-					} else {
-						throw formatLibraryBugMessage('Holidays ' + type_of_holidays + ' are not defined for country ' + location_cc
-								+ ' and state ' + location_state + '.'
-								+ ' You can also add them: ' + repository_url);
-					}
-				} else {
-					throw formatLibraryBugMessage('No holidays are defined for country ' + location_cc + '.'
-							+ ' You can also add them: ' + repository_url);
-				}
-			} else { /* We have no idea which holidays do apply because the country code was not provided. */
-				throw 'Country code missing which is needed to select the correct holidays (see README how to provide it)';
-			}
-		}
-
-		function getMovableEventsForYear(Y) {
-			// calculate easter
-			var C = Math.floor(Y/100);
-			var N = Y - 19*Math.floor(Y/19);
-			var K = Math.floor((C - 17)/25);
-			var I = C - Math.floor(C/4) - Math.floor((C - K)/3) + 19*N + 15;
-			I = I - 30*Math.floor((I/30));
-			I = I - Math.floor(I/28)*(1 - Math.floor(I/28)*Math.floor(29/(I + 1))*Math.floor((21 - N)/11));
-			var J = Y + Math.floor(Y/4) + I + 2 - C + Math.floor(C/4);
-			J = J - 7*Math.floor(J/7);
-			var L = I - J;
-			var M = 3 + Math.floor((L + 40)/44);
-			var D = L + 28 - 31*Math.floor(M/4);
-
-			// calculate orthodox easter
-			var oA = Y % 4;
-			var oB = Y % 7;
-			var oC = Y % 19;
-			var oD = (19*oC + 15) % 30;
-			var oE = (2*oA+4*oB - oD + 34) % 7;
-			var oF = oD+oE;
-
-			var oDate;
-			if (oF < 9) {
-				oDate = new Date(Y, 4-1, oF+4);
-			} else {
-				if ((oF+4)<31) {
-					oDate = new Date(Y, 4-1, oF+4);
-				} else {
-					oDate = new Date(Y, 5-1, oF-26);
-				}
-			}
-
-			// calculate last Sunday in February
-			var lastFebruaryDay = new Date(Y, 2, 0);
-			var lastFebruarySunday = lastFebruaryDay.getDate() - lastFebruaryDay.getDay();
-
-			// calculate Victoria Day. last Monday before or on May 24
-			var may_24 = new Date(Y, 4, 24);
-			var victoriaDay = 24  - ((6 + may_24.getDay()) % 7);
-
-			// calculate Canada Day. July 1st unless 1st is on Sunday, then July 2.
-			var july_1 = new Date(Y, 6, 1);
-			var canadaDay = july_1.getDay() === 0 ? 2 : 1;
-
-			function firstWeekdayOfMonth(month, weekday){
-				var first = new Date(Y, month, 1);
-				return 1 + ((7 + weekday - first.getDay()) % 7);
-			}
-
-			function lastWeekdayOfMonth(month, weekday){
-				var last = new Date(Y, month+1, 0);
-				var offset=((7 + last.getDay() - weekday) % 7);
-				return last.getDate() - offset;
-			}
-
-			return {
-				'easter'                :  new Date(Y, M - 1, D),
-				'orthodox easter'       :  oDate,
-				'victoriaDay'           :  new Date(Y,  4, victoriaDay),
-				'canadaDay'             :  new Date(Y,  6, canadaDay),
-				'firstJanuaryMonday'    :  new Date(Y,  0, firstWeekdayOfMonth(0, 1)),
-				'firstFebruaryMonday'   :  new Date(Y,  1, firstWeekdayOfMonth(1, 1)),
-				'lastFebruarySunday'    :  new Date(Y,  1, lastFebruarySunday),
-				'firstMarchMonday'      :  new Date(Y,  2, firstWeekdayOfMonth(2, 1)),
-				'firstAprilMonday'      :  new Date(Y,  3, firstWeekdayOfMonth(3, 1)),
-				'firstMayMonday'        :  new Date(Y,  4, firstWeekdayOfMonth(4, 1)),
-				'firstJuneMonday'       :  new Date(Y,  5, firstWeekdayOfMonth(5, 1)),
-				'firstJulyMonday'       :  new Date(Y,  6, firstWeekdayOfMonth(6, 1)),
-				'firstAugustMonday'     :  new Date(Y,  7, firstWeekdayOfMonth(7, 1)),
-				'firstSeptemberMonday'  :  new Date(Y,  8, firstWeekdayOfMonth(8, 1)),
-				'firstSeptemberSunday'  :  new Date(Y,  8, firstWeekdayOfMonth(8, 0)),
-				'firstOctoberMonday'    :  new Date(Y,  9, firstWeekdayOfMonth(9, 1)),
-				'firstNovemberMonday'   :  new Date(Y, 10, firstWeekdayOfMonth(10, 1)),
-				'firstMarchTuesday'     :  new Date(Y,  2, firstWeekdayOfMonth(2, 2)),
-				'firstAugustTuesday'    :  new Date(Y,  7, firstWeekdayOfMonth(7, 2)),
-				'firstAugustFriday'     :  new Date(Y,  7, firstWeekdayOfMonth(7, 5)),
-				'firstNovemberThursday' :  new Date(Y, 10, firstWeekdayOfMonth(10, 4)),
-				'lastMayMonday'         :  new Date(Y,  4, lastWeekdayOfMonth(4, 1)),
-				'lastMarchMonday'       :  new Date(Y,  2, lastWeekdayOfMonth(2, 1)),
-				'lastAprilMonday'       :  new Date(Y,  3, lastWeekdayOfMonth(3, 1)),
-				'lastAprilFriday'       :  new Date(Y,  3, lastWeekdayOfMonth(3, 5)),
-				'lastOctoberFriday'     :  new Date(Y,  9, lastWeekdayOfMonth(9, 5)),
-			};
-		}
-
-		function getApplyingHolidaysForYear(applying_holidays, year, add_days) {
-			var movableDays = getMovableEventsForYear(year);
-
-			var sorted_holidays = [];
-			var next_holiday;
-
-			for (var holiday_name in applying_holidays) {
-				if (typeof applying_holidays[holiday_name][0] === 'string') {
-					var selected_movableDay = movableDays[applying_holidays[holiday_name][0]];
-					if (!selected_movableDay)
-						throw 'Movable day ' + applying_holidays[holiday_name][0] + ' can not not be calculated.'
-							+ ' Please add the formula how to calculate it.';
-					next_holiday = new Date(selected_movableDay.getFullYear(),
-							selected_movableDay.getMonth(),
-							selected_movableDay.getDate()
-							+ applying_holidays[holiday_name][1]
-						);
-					if (year !== next_holiday.getFullYear())
-						throw 'The movable day ' + applying_holidays[holiday_name][0] + ' plus '
-							+ applying_holidays[holiday_name][1]
-							+ ' days is not in the year of the movable day anymore. Currently not supported.';
-				} else {
-					next_holiday = new Date(year,
-							applying_holidays[holiday_name][0] - 1,
-							applying_holidays[holiday_name][1]
-						);
-				}
-				if (add_days[0])
-					next_holiday.setDate(next_holiday.getDate() + add_days[0]);
-
-				sorted_holidays.push([ next_holiday, holiday_name ]);
-			}
-
-			sorted_holidays = sorted_holidays.sort(function(a,b){
-				if (a[0].getTime() < b[0].getTime()) return -1;
-				if (a[0].getTime() > b[0].getTime()) return 1;
-				return 0;
-			});
-
-			return sorted_holidays;
-		}
-		// }}}
-		// }}}
-
-		/* Year range parser (2013,2016-2018,2020/2). {{{
-		 *
-		 * :param tokens: List of token objects.
-		 * :param at: Position where to start.
-		 * :returns: Position at which the token does not belong to the selector anymore.
-		 */
-		function parseYearRange(tokens, at) {
-			tokens[at][3] = 'year';
-			for (; at < tokens.length; at++) {
-				if (matchTokens(tokens, at, 'year')) {
-					var is_range   = false,
-						has_period,
-						period;
-					if (matchTokens(tokens, at+1, '-', 'year', '/', 'number')) {
-						is_range   = true;
-						has_period = true;
-						period = parseInt(tokens[at+4][0]);
-						checkPeriod(at+4, period, 'year');
-					} else {
-						is_range   = matchTokens(tokens, at+1, '-', 'year');
-						has_period = matchTokens(tokens, at+1, '/', 'number');
-						if (has_period) {
-							period = parseInt(tokens[at+2][0]);
-							checkPeriod(at+2, period, 'year', 'no_end_year');
-						} else if (matchTokens(tokens, at+1, '+')) {
-							period = 1;
-							has_period = 2;
-						}
-					}
-
-					var year_from = parseInt(tokens[at][0]);
-					// error checking {{{
-						if (is_range && tokens[at+2][0] <= year_from) {
-							// handle reversed range
-							if (tokens[at+2][0] === year_from) {
-								throw formatWarnErrorMessage(nrule, at,
-										'A year range in which the start year is equal to the end year does not make sense.'
-										+ ' Please remove the end year. E.g. "' + year_from + ' May 23"');
-							} else {
-								throw formatWarnErrorMessage(nrule, at,
-										'A year range in which the start year is greater than the end year does not make sense.'
-										+ ' Please turn it over.');
-							}
-						}
-					// }}}
-
-					selectors.year.push(function(tokens, at, year_from, is_range, has_period, period) { return function(date) {
-						var ouryear = date.getFullYear();
-						var year_to = is_range ? parseInt(tokens[at+2][0]) : year_from;
-
-						if (ouryear < year_from ){
-							return [false, new Date(year_from, 0, 1)];
-						} else if (has_period) {
-							if (year_from <= ouryear) {
-								if (is_range && ouryear > year_to)
-									return [false];
-								if (period > 0) {
-									if ((ouryear - year_from) % period === 0) {
-										return [true, new Date(ouryear + 1, 0, 1)];
-									} else {
-										return [false, new Date(ouryear + period - 1, 0, 1)];
-									}
-								}
-							}
-						} else if (is_range) {
-							if (ouryear <= year_to)
-								return [true, new Date(year_to + 1, 0, 1)];
-						} else if (ouryear === year_from) {
-							return [true];
-						}
-
-						return [false];
-
-					}}(tokens, at, year_from, is_range, has_period, period));
-
-					at += 1 + (is_range ? 2 : 0) + (has_period ? (has_period === 2 ? 1 : 2) : 0);
-				} else if (matchTokens(tokens, at - 1, ',')) { // additional rule
-					throw formatWarnErrorMessage(
-						nrule,
-						at - 1,
-						'An additional rule does not make sense here. Just use a ";" as rule separator.'
-						+ ' See https://wiki.openstreetmap.org/wiki/Key:opening_hours/specification#explain:additional_rule_separator');
-				} else {
-					throw formatWarnErrorMessage(nrule, at, 'Unexpected token in year range: ' + tokens[at][1]);
-				}
-
-				if (!matchTokens(tokens, at, ','))
-					break;
-			}
-
-			return at;
-		}
-		// }}}
-
-		/* Week range parser (week 11-20, week 1-53/2). {{{
-		 *
-		 * :param tokens: List of token objects.
-		 * :param at: Position where to start.
-		 * :returns: Position at which the token does not belong to the selector anymore.
-		 */
-		function parseWeekRange(tokens, at) {
-			for (; at < tokens.length; at++) {
-				if (matchTokens(tokens, at, 'week')) {
-					at++;
-				}
-				if (matchTokens(tokens, at, 'number')) {
-					var is_range = matchTokens(tokens, at+1, '-', 'number'), period = 0;
-					var week_from = tokens[at][0];
-					var week_to   = is_range ? tokens[at+2][0] : week_from;
-					if (week_from > week_to) {
-						throw formatWarnErrorMessage(nrule, at+2,
-							'You have specified a week range in reverse order or leaping over a year. This is (currently) not supported.');
-					}
-					if (week_from < 1) {
-						throw formatWarnErrorMessage(nrule, at,
-							'You have specified a week date less then one. A valid week date range is 1-53.');
-					}
-					if (week_to > 53) {
-						throw formatWarnErrorMessage(nrule, is_range ? at+2 : at,
-							'You have specified a week date greater then 53. A valid week date range is 1-53.');
-					}
-					if (is_range) {
-						period = matchTokens(tokens, at+3, '/', 'number');
-						if (period) {
-							period = tokens[at+4][0];
-							if (period < 2) {
-								throw formatWarnErrorMessage(nrule, at+4,
-									'You have specified a week period which is less than two.'
-									+ ' If you want to select the whole range from week ' + week_from + ' to week ' + week_to + ' then just omit the "/' + period + '".');
-							} else if (period > 26) {
-								throw formatWarnErrorMessage(nrule, at+4,
-									'You have specified a week period which is greater than 26.'
-									+ ' 26.5 is the half of the maximum 53 week dates per year so a week date period greater than 26 would only apply once per year.'
-									+ ' Please specify the week selector as "week ' + week_from + '" if that is what you want to express.');
-							}
-						}
-					}
-
-					if (week_stable && (!(week_from <= 1 && week_to >= 53) || period)) {
-						week_stable = false;
-					}
-
-					if (!period && week_from === 1 && week_to === 53) {
-						/* Shortcut and work around bug. */
-						selectors.week.push(function(date) { return [true]; });
-					} else {
-
-						selectors.week.push(function(week_from, week_to, is_range, period) { return function(date) {
-							var ourweek = getWeekNumber(date);
-
-							// console.log("week_from: %s, week_to: %s", week_from, week_to);
-							// console.log("ourweek: %s, date: %s", ourweek, date);
-
-							// before range
-							if (ourweek < week_from) {
-								// console.log("Before: " + getNextDateOfISOWeek(week_from, date));
-								return [false, getNextDateOfISOWeek(week_from, date)];
-							}
-
-							// we're after range, set check date to next year
-							if (ourweek > week_to) {
-								// console.log("After");
-								return [false, getNextDateOfISOWeek(week_from, date)];
-							}
-
-							// we're in range
-							if (period) {
-								var in_period = (ourweek - week_from) % period === 0;
-								if (in_period) {
-									return [true, getNextDateOfISOWeek(ourweek + 1, date)];
-								} else {
-									return [false, getNextDateOfISOWeek(ourweek + period - 1, date)];
-								}
-							}
-
-							// console.log("Match");
-							return [true, getNextDateOfISOWeek(week_to === 53 ? 1 : week_to + 1, date)];
-						}}(week_from, week_to, is_range, period));
-					}
-
-					at += 1 + (is_range ? 2 : 0) + (period ? 2 : 0);
-				} else if (matchTokens(tokens, at - 1, ',')) { // additional rule
-					throw formatWarnErrorMessage(
-						nrule,
-						at - 1,
-						'An additional rule does not make sense here. Just use a ";" as rule separator.'
-						+ ' See https://wiki.openstreetmap.org/wiki/Key:opening_hours/specification#explain:additional_rule_separator');
-				} else {
-					throw formatWarnErrorMessage(nrule, at, 'Unexpected token in week range: ' + tokens[at][1]);
-				}
-
-				if (!matchTokens(tokens, at, ','))
-					break;
-			}
-
-			return at;
-		}
-
-		// http://stackoverflow.com/a/6117889
-		/* For a given date, get the ISO week number
-		 *
-		 * Based on information at:
-		 *
-		 *    http://www.merlyn.demon.co.uk/weekcalc.htm#WNR
-		 *
-		 * Algorithm is to find nearest thursday, it's year
-		 * is the year of the week number. Then get weeks
-		 * between that date and the first day of that year.
-		 *
-		 * Note that dates in one year can be weeks of previous
-		 * or next year, overlap is up to 3 days.
-		 *
-		 * e.g. 2014/12/29 is Monday in week  1 of 2015
-		 *      2012/1/1   is Sunday in week 52 of 2011
-		 */
-		function getWeekNumber(d) {
-		    // Copy date so don't modify original
-		    d = new Date(+d);
-		    d.setHours(0,0,0);
-		    // Set to nearest Thursday: current date + 4 - current day number
-		    // Make Sunday's day number 7
-		    d.setDate(d.getDate() + 4 - (d.getDay()||7));
-		    // Get first day of year
-		    var yearStart = new Date(d.getFullYear(),0,1);
-		    // Calculate full weeks to nearest Thursday
-		    return Math.ceil(( ( (d - yearStart) / 86400000) + 1)/7)
-		}
-		// http://stackoverflow.com/a/16591175
-		function getDateOfISOWeek(w, y) {
-			var simple = new Date(y, 0, 1 + (w - 1) * 7);
-			var dow = simple.getDay();
-			var ISOweekStart = simple;
-			if (dow <= 4)
-				ISOweekStart.setDate(simple.getDate() - simple.getDay() + 1);
-			else
-				ISOweekStart.setDate(simple.getDate() + 8 - simple.getDay());
-			return ISOweekStart;
-		}
-		function getNextDateOfISOWeek(week, date) {
-			var next_date;
-			for (var i = -1; i <= 1; i++) {
-				next_date = getDateOfISOWeek(week, date.getFullYear() + i);
-				if (next_date.getTime() > date.getTime()) {
-					return next_date;
-				}
-			}
-			throw formatLibraryBugMessage();
-		}
-		// }}}
-
-		/* Month range parser (Jan,Feb-Mar). {{{
-		 *
-		 * :param tokens: List of token objects.
-		 * :param at: Position where to start.
-		 * :param push_to_monthday: Will push the selector into the monthday selector array which has the desired side effect of working in conjunction with the monthday selectors (either the month match or the monthday).
-		 * :returns: Position at which the token does not belong to the selector anymore.
-		 */
-		function parseMonthRange(tokens, at, push_to_monthday, in_selector) {
-			if (!in_selector)
-				tokens[at][3] = 'month';
-
-			for (; at < tokens.length; at++) {
-				// Use parseMonthdayRange if '<month> <daynum>' and not '<month> <hour>:<minute>'
-				if (matchTokens(tokens, at, 'month', 'number') && !matchTokens(tokens, at+2, 'timesep', 'number')) {
-					return parseMonthdayRange(tokens, at, nrule, true);
-				} else if (matchTokens(tokens, at, 'month')) {
-					// Single month (Jan) or month range (Feb-Mar)
-					var is_range = matchTokens(tokens, at+1, '-', 'month');
-
-					var month_from = tokens[at][0];
-					var month_to = is_range ? tokens[at+2][0] : month_from;
-
-					if (is_range && week_stable) {
-						if (month_from !== (month_to + 1) % 12)
-							week_stable = false;
-					} else {
-						week_stable = false;
-					}
-
-					var inside = true;
-
-					// handle reversed range
-					if (month_to < month_from) {
-						var tmp = month_to;
-						month_to = month_from - 1;
-						month_from = tmp + 1;
-						inside = false;
-					}
-
-					var selector = function(tokens, at, month_from, month_to, is_range, inside) { return function(date) {
-						var ourmonth = date.getMonth();
-
-						// handle full range
-						if (month_to < month_from)
-							return [!inside];
-
-						if (ourmonth < month_from || ourmonth > month_to) {
-							return [!inside, dateAtNextMonth(date, month_from)];
-						} else {
-							return [inside, dateAtNextMonth(date, month_to + 1)];
-						}
-					}}(tokens, at, month_from, month_to, is_range, inside);
-
-					if (push_to_monthday === true)
-						selectors.monthday.push(selector);
-					else
-						selectors.month.push(selector);
-
-					at += is_range ? 3 : 1;
-				} else {
-					throw formatWarnErrorMessage(nrule, at, 'Unexpected token in month range: ' + tokens[at][1]);
-				}
-
-				if (!matchTokens(tokens, at, ','))
-					break;
-			}
-
-			return at;
-		}
-
-		function dateAtNextMonth(date, month) {
-			return new Date(date.getFullYear(), month < date.getMonth() ? month + 12 : month);
-		}
-		// }}}
-
-		/* Month day range parser (Jan 26-31; Jan 26-Feb 26). {{{
-		 *
-		 * :param tokens: List of token objects.
-		 * :param at: Position where to start.
-		 * :param nrule: Rule number starting with 0.
-		 * :param push_to_month: Will push the selector into the month selector array which has the desired side effect of working in conjunction with the month selectors (either the month match or the monthday).
-		 * :returns: Position at which the token does not belong to the selector anymore.
-		 */
-		function parseMonthdayRange(tokens, at, nrule, push_to_month) {
-			if (!push_to_month)
-				tokens[at][3] = 'month';
-
-			for (; at < tokens.length; at++) {
-				var has_year = [], has_month = [], has_event = [], has_calc = [], has_constrained_weekday = [];
-				has_year[0]  = matchTokens(tokens, at, 'year');
-				has_month[0] = matchTokens(tokens, at+has_year[0], 'month', 'number');
-				has_event[0] = matchTokens(tokens, at+has_year[0], 'event');
-
-				if (has_event[0])
-					has_calc[0] = getMoveDays(tokens, at+has_year[0]+1, 200, 'event like easter');
-
-				var at_range_sep;
-				if (matchTokens(tokens, at+has_year[0], 'month', 'weekday', '[')) {
-					has_constrained_weekday[0] = getConstrainedWeekday(tokens, at+has_year[0]+3);
-					has_calc[0] = getMoveDays(tokens, has_constrained_weekday[0][1], 6, 'constrained weekdays');
-					at_range_sep = has_constrained_weekday[0][1] + (typeof has_calc[0] !== 'undefined' && has_calc[0][1] ? 3 : 0);
-				} else {
-					at_range_sep = at+has_year[0]
-						+ (has_event[0]
-							? (typeof has_calc[0] !== 'undefined' && has_calc[0][1] ? 4 : 1)
-							: 2);
-				}
-
-				var at_sec_event_or_month;
-				if ((has_month[0] || has_event[0] || has_constrained_weekday[0]) && matchTokens(tokens, at_range_sep, '-')) {
-					has_year[1] = matchTokens(tokens, at_range_sep+1, 'year');
-					at_sec_event_or_month = at_range_sep+1+has_year[1];
-					has_month[1] = matchTokens(tokens, at_sec_event_or_month, 'month', 'number');
-					if (!has_month[1]) {
-						has_event[1] = matchTokens(tokens, at_sec_event_or_month, 'event');
-						if (has_event[1]) {
-							has_calc[1] = getMoveDays(tokens, at_sec_event_or_month+1, 366, 'event like easter');
-						} else if (matchTokens(tokens, at_sec_event_or_month, 'month', 'weekday', '[')) {
-							has_constrained_weekday[1] = getConstrainedWeekday(tokens, at_sec_event_or_month+3);
-							has_calc[1] = getMoveDays(tokens, has_constrained_weekday[1][1], 6, 'constrained weekdays');
-						}
-					}
-				}
-
-				// monthday range like Jan 26-Feb 26 {{{
-				if (has_year[0] === has_year[1] && (has_month[1] || has_event[1] || has_constrained_weekday[1])) {
-
-					if (has_month[0])
-						checkIfDateIsValid(tokens[at+has_year[0]][0], tokens[at+has_year[0]+1][0], nrule, at+has_year[0]+1);
-					if (has_month[1])
-						checkIfDateIsValid(tokens[at_sec_event_or_month][0], tokens[at_sec_event_or_month+1][0], nrule, at_sec_event_or_month+1);
-
-					var selector = function(tokens, at, nrule, has_year, has_event, has_calc, at_sec_event_or_month, has_constrained_weekday) { return function(date) {
-						var start_of_next_year = new Date(date.getFullYear() + 1, 0, 1);
-
-						var movableDays,
-							from_date;
-						if (has_event[0]) {
-							movableDays = getMovableEventsForYear(has_year[0] ? parseInt(tokens[at][0]) : date.getFullYear());
-							from_date = movableDays[tokens[at+has_year[0]][0]];
-
-							if (typeof has_calc[0] !== 'undefined' && has_calc[0][1]) {
-								var from_year_before_calc = from_date.getFullYear();
-								from_date.setDate(from_date.getDate() + has_calc[0][0]);
-								if (from_year_before_calc !== from_date.getFullYear())
-									throw formatWarnErrorMessage(nrule, at+has_year[0]+has_calc[0][1]*3,
-										'The movable day ' + tokens[at+has_year[0]][0] + ' plus ' + has_calc[0][0]
-										+ ' days is not in the year of the movable day anymore. Currently not supported.');
-							}
-						} else if (has_constrained_weekday[0]) {
-							from_date = getDateForConstrainedWeekday((has_year[0] ? tokens[at][0] : date.getFullYear()), // year
-								tokens[at+has_year[0]][0], // month
-								tokens[at+has_year[0]+1][0], // weekday
-								has_constrained_weekday[0],
-								has_calc[0]);
-						} else {
-							from_date = new Date((has_year[0] ? tokens[at][0] : date.getFullYear()),
-								tokens[at+has_year[0]][0], tokens[at+has_year[0]+1][0]);
-						}
-
-						var to_date;
-						if (has_event[1]) {
-							movableDays = getMovableEventsForYear(has_year[1]
-										? parseInt(tokens[at_sec_event_or_month-1][0])
-										: date.getFullYear());
-							to_date = movableDays[tokens[at_sec_event_or_month][0]];
-
-							if (typeof has_calc[1] !== 'undefined' && has_calc[1][1]) {
-								var to_year_before_calc = to_date.getFullYear();
-								to_date.setDate(to_date.getDate() + has_calc[1][0]);
-								if (to_year_before_calc !== to_date.getFullYear())
-									throw formatWarnErrorMessage(nrule, at_sec_event_or_month+has_calc[1][1],
-										'The movable day ' + tokens[at_sec_event_or_month][0] + ' plus ' + has_calc[1][0]
-										+ ' days is not in the year of the movable day anymore. Currently not supported.');
-							}
-						} else if (has_constrained_weekday[1]) {
-							to_date = getDateForConstrainedWeekday((has_year[1] ? tokens[at_sec_event_or_month-1][0] : date.getFullYear()), // year
-								tokens[at_sec_event_or_month][0],   // month
-								tokens[at_sec_event_or_month+1][0], // weekday
-								has_constrained_weekday[1],
-								has_calc[1]);
-						} else {
-							to_date = new Date((has_year[1] ? tokens[at_sec_event_or_month-1][0] : date.getFullYear()),
-								tokens[at_sec_event_or_month][0], tokens[at_sec_event_or_month+1][0] + 1);
-						}
-
-						var inside = true;
-
-						if (to_date < from_date) {
-							var tmp = to_date;
-							to_date = from_date;
-							from_date = tmp;
-							inside = false;
-						}
-
-						if (date.getTime() < from_date.getTime()) {
-							return [!inside, from_date];
-						} else if (date.getTime() < to_date.getTime()) {
-							return [inside, to_date];
-						} else {
-							if (has_year[0]) {
-								return [!inside];
-							} else {
-								return [!inside, start_of_next_year];
-							}
-						}
-					}}(tokens, at, nrule, has_year, has_event, has_calc, at_sec_event_or_month, has_constrained_weekday);
-
-					if (push_to_month === true)
-						selectors.month.push(selector);
-					else
-						selectors.monthday.push(selector);
-
-					at = (has_constrained_weekday[1]
-							? has_constrained_weekday[1][1]
-							: at_sec_event_or_month + (has_event[1] ? 1 : 2))
-						+ (typeof has_calc[1] !== 'undefined' ? has_calc[1][1] : 0);
-
-					// }}}
-					// Monthday range like Jan 26-31 {{{
-				} else if (has_month[0]) {
-
-					has_year = has_year[0];
-					var year = tokens[at][0]; // Could be month if has no year. Tested later.
-					var month = tokens[at+has_year][0];
-
-					var first_round = true;
-
-					do {
-						var range_from = tokens[at+1 + has_year][0];
-						var is_range = matchTokens(tokens, at+2+has_year, '-', 'number');
-						var period = undefined;
-						var range_to = tokens[at+has_year+(is_range ? 3 : 1)][0] + 1;
-						if (is_range && matchTokens(tokens, at+has_year+4, '/', 'number')) {
-							period = tokens[at+has_year+5][0];
-							checkPeriod(at+has_year+5, period, 'day');
-						}
-
-						if (first_round) {
-							var at_timesep_if_monthRange = at + has_year + 1 // at month number
-								+ (is_range ? 2 : 0) + (period ? 2 : 0)
-								+ !(is_range || period); // if not range nor has period, add one
-
-							// Check for '<month> <timespan>'
-							if (matchTokens(tokens, at_timesep_if_monthRange, 'timesep', 'number')
-									&& (matchTokens(tokens, at_timesep_if_monthRange+2, '+')
-										|| matchTokens(tokens, at_timesep_if_monthRange+2, '-')
-										|| oh_mode !== 0)) {
-											return parseMonthRange(tokens, at, true, true);
-							}
-						}
-
-						// error checking {{{
-						if (range_to < range_from)
-							throw formatWarnErrorMessage(nrule, at+has_year+3,
-									'Range in wrong order. From day is greater than to day.');
-
-						checkIfDateIsValid(month, range_from, nrule, at+1 + has_year);
-						checkIfDateIsValid(month, range_to - 1 /* added previously */,
-							nrule, at+has_year+(is_range ? 3 : 1));
-						// }}}
-
-						var selector = function(year, has_year, month, range_from, range_to, period) { return function(date) {
-							var start_of_next_year = new Date(date.getFullYear() + 1, 0, 1);
-
-							var from_date = new Date(has_year ? year : date.getFullYear(),
-								month, range_from);
-							if (month === 1 && range_from !== from_date.getDate()) // Only on leap years does this day exist.
-								return [false]; // If day 29 does not exist,
-												// then the date object adds one day to date
-												// and this selector should not match.
-							var to_date   = new Date(from_date.getFullYear(),
-								month, range_to);
-							if (month === 1 && is_range && range_to !== to_date.getDate()) // Only on leap years does this day exist.
-								return [false];
-
-							if (date.getTime() < from_date.getTime())
-								return [false, from_date];
-							else if (date.getTime() >= to_date.getTime())
-								return [false, start_of_next_year];
-							else if (!period)
-								return [true, to_date];
-
-							var nday = Math.floor((date.getTime() - from_date.getTime()) / msec_in_day);
-							var in_period = nday % period;
-
-							if (in_period === 0)
-								return [true, new Date(date.getFullYear(), date.getMonth(), date.getDate() + 1)];
-							else
-								return [false, new Date(date.getFullYear(), date.getMonth(), date.getDate() + period - in_period)];
-
-						}}(year, has_year, month, range_from, range_to, period);
-
-						if (push_to_month === true)
-							selectors.month.push(selector);
-						else
-							selectors.monthday.push(selector);
-
-						at += 2 + has_year + (is_range ? 2 : 0) + (period ? 2 : 0);
-
-						first_round = false;
-					}
-					while (matchTokens(tokens, at, ',', 'number'))
-
-
-					// }}}
-					// Only event like easter {{{
-				} else if (has_event[0]) {
-
-					var selector = function(tokens, at, nrule, has_year, add_days) { return function(date) {
-
-						// console.log('enter selector with date: ' + date);
-						var movableDays = getMovableEventsForYear((has_year ? tokens[at][0] : date.getFullYear()));
-						var event_date = movableDays[tokens[at+has_year][0]];
-						if (!event_date)
-							throw 'Movable day ' + tokens[at+has_year][0] + ' can not not be calculated.'
-								+ ' Please add the formula how to calculate it.';
-
-						if (add_days[0]) {
-							event_date.setDate(event_date.getDate() + add_days[0]);
-							if (date.getFullYear() !== event_date.getFullYear())
-								throw formatWarnErrorMessage(nrule, at+has_year+add_days[1], 'The movable day ' + tokens[at+has_year][0] + ' plus '
-									+ add_days[0]
-									+ ' days is not in the year of the movable day anymore. Currently not supported.');
-						}
-
-						if (date.getTime() < event_date.getTime())
-							return [false, event_date];
-						// else if (date.getTime() < event_date.getTime() + msec_in_day) // does not work because of daylight saving times
-						else if (event_date.getMonth() * 100 + event_date.getDate() === date.getMonth() * 100 + date.getDate())
-							return [true, new Date(date.getFullYear(), date.getMonth(), date.getDate() + 1)];
-						else
-							return [false, new Date(date.getFullYear() + 1, 0, 1)];
-
-					}}(tokens, at, nrule, has_year[0], has_calc[0]);
-
-					if (push_to_month === true)
-						selectors.month.push(selector);
-					else
-						selectors.monthday.push(selector);
-
-					at += has_year[0] + has_event[0] + (typeof has_calc[0][1] !== 'undefined' && has_calc[0][1] ? 3 : 0);
-					// }}}
-				} else if (has_constrained_weekday[0]) {
-					at = parseMonthRange(tokens, at);
-				} else if (matchTokens(tokens, at, 'month')) {
-					return parseMonthRange(tokens, at, true, true);
-				} else {
-					// throw 'Unexpected token in monthday range: "' + tokens[at] + '"';
-					return at;
-				}
-
-				if (!matchTokens(tokens, at, ','))
-					break;
-			}
-
-			return at;
-		}
-		// }}}
-
-		/* Main selector traversal function (return state array for date). {{{
-		 * Checks for given date which rule and those which state and comment applies.
-		 *
-		 * :param date: Date object.
-		 * :returns: Array:
-		 *			0. resultstate: State: true for 'open', false for 'closed'.
-		 *			1. changedate: Next change as date object.
-		 *			2. unknown: true if state open is not sure.
-		 *			3. comment: Comment which applies for this time range (from date to changedate).
-		 *			4. match_rule: Rule number starting with 0 (nrule).
-		 */
-		this.getStatePair = function(date) {
-			var resultstate = false;
-			var changedate;
-			var unknown = false;
-			var comment;
-			var match_rule;
-
-			var date_matching_rules = [];
-
-			/* Go though all date selectors and check if they return something
-			 * else than closed for the given date.
-			 */
-			for (var nrule = 0; nrule < rules.length; nrule++) {
-				var matching_date_rule = true;
-				// console.log(nrule, 'length',  rules[nrule].date.length);
-
-				/* Try each date selector type. */
-				for (var ndateselector = 0; ndateselector < rules[nrule].date.length; ndateselector++) {
-					var dateselectors = rules[nrule].date[ndateselector];
-					// console.log(nrule, ndateselector);
-
-					var has_matching_selector = false;
-					for (var datesel = 0; datesel < dateselectors.length; datesel++) {
-						var res = dateselectors[datesel](date);
-						if (res[0]) {
-							has_matching_selector = true;
-
-							if (typeof res[2] === 'string') { // holiday name
-								comment = [ res[2], nrule ];
-							}
-
-						}
-						if (typeof changedate === 'undefined' || (typeof res[1] !== 'undefined' && res[1].getTime() < changedate.getTime()))
-							changedate = res[1];
-					}
-
-					if (!has_matching_selector) {
-						matching_date_rule = false;
-						// We can ignore other date selectors, as the state won't change
-						// anyway until THIS selector matches (due to conjunction of date
-						// selectors of different types).
-						// This is also an optimization, if widest date selector types
-						// are checked first.
-						break;
-					}
-				}
-
-				if (matching_date_rule) {
-					/* The following lines implement date overwriting logic (e.g. for
-					 * "Mo-Fr 10:00-20:00; We 10:00-16:00", We rule overrides Mo-Fr rule partly (We).
-					 *
-					 * This is the only way to be consistent. I thought about ("22:00-02:00; Tu 12:00-14:00") letting Th override 22:00-02:00 partly:
-					 * Like: Th 00:00-02:00,12:00-14:00 but this would result in including 22:00-00:00 for Th which is probably not what you want.
-					 */
-					if ((rules[nrule].date.length > 0 || nrule > 0 && rules[nrule].meaning && rules[nrule-1].date.length === 0)
-							&& (rules[nrule].meaning || rules[nrule].unknown)
-							&& !rules[nrule].wrapped && !rules[nrule].additional && !rules[nrule].fallback
-						) {
-
-						// var old_date_matching_rules = date_matching_rules;
-						date_matching_rules = [];
-						// for (var nrule = 0; nrule < old_date_matching_rules.length; nrule++) {
-						// 	if (!rules[old_date_matching_rules[nrule]].wrapped)
-						// 		date_matching_rules.push(nrule);
-						// }
-					}
-					date_matching_rules.push(nrule);
-				}
-			}
-
-			// console.log(date_matching_rules);
-			rule:
-			for (var nrule = 0; nrule < date_matching_rules.length; nrule++) {
-				var rule = date_matching_rules[nrule];
-
-				// console.log('Processing rule ' + rule + ': with date ' + date
-					// + ' and ' + rules[rule].time.length + ' time selectors (comment: "' + rules[rule].comment + '").');
-
-				/* There is no time specified, state applies to the whole day. */
-				if (rules[rule].time.length === 0) {
-					// console.log('there is no time', date);
-					if (!rules[rule].fallback || (rules[rule].fallback && !(resultstate || unknown))) {
-						resultstate = rules[rule].meaning;
-						unknown     = rules[rule].unknown;
-						match_rule  = rule;
-
-						// if (rules[rule].fallback)
-							// break rule; // fallback rule matched, no need for checking the rest
-						// WRONG: What if closing rules follow?
-					}
-				}
-
-				for (var timesel = 0; timesel < rules[rule].time.length; timesel++) {
-					var res = rules[rule].time[timesel](date);
-
-					// console.log('res:', res);
-					if (res[0]) {
-						if (!rules[rule].fallback || (rules[rule].fallback && !(resultstate || unknown))) {
-							resultstate = rules[rule].meaning;
-							unknown     = rules[rule].unknown;
-							match_rule  = rule;
-
-							/* Reset open end comment */
-							if (typeof comment === 'object' && comment[0] === 'Specified as open end. Closing time was guessed.')
-								comment = undefined;
-
-							// open end
-							if (res[2] === true && (resultstate || unknown)) {
-								comment = [ 'Specified as open end. Closing time was guessed.', match_rule ];
-
-								resultstate = false;
-								unknown     = true;
-
-								/* Hack to make second rule in '07:00+,12:00-16:00; 16:00-24:00 closed "needed because of open end"' obsolete {{{ */
-								if (typeof rules[rule].time[timesel+1] === 'function') {
-
-									var next_res = rules[rule].time[timesel+1](date);
-									if (  !next_res[0]
-										// && next_res[2]
-										&& typeof next_res[1] === 'object'
-										// && getValueForDate(next_res[1], true) !== getValueForDate(date, true) // Just to be sure.
-										&& rules[rule].time[timesel](new Date(date.getTime() - 1))[0]
-										/* To distinguish the following two values:
-										 *	 'sunrise-14:00,14:00+',
-										 *   '07:00+,12:00-16:00',
-										 */
-										) {
-
-										// console.log("07:00+,12:00-16:00 matched.");
-
-										resultstate = false;
-										unknown     = false;
-									}
-								}
-
-								/* Hack to handle '17:00+,13:00-02:00' {{{ */
-								/* Not enabled. To complicated, just don‘t use them …
-								 * It gets even crazier …
-								 * Time wrapping over midnight is
-								 * stored in the next internal rule:
-								 * '17:00-00:00 unknown "Specified as open end. Closing time was guessed.", 13:00-00:00 open' // First internal rule.
-								 * + ', ' overwritten part: 00:00-03:00 open + '00:00-02:00 open', // Second internal rule.
-								 */
-								if (	false
-										&& typeof rules[rule-1] === 'object'
-										&& rules[rule].build_from_token_rule.toString() === rules[rule-1].build_from_token_rule.toString()
-										&& typeof rules[rule] === 'object'
-										&& rules[rule].build_from_token_rule.toString() === rules[rule].build_from_token_rule.toString()
-										) {
-
-									var last_wrapping_time_selector = rules[rule].time[rules[rule].time.length - 1];
-									var last_w_res = last_wrapping_time_selector(new Date(date.getTime() - 1));
-									// console.log(last_w_res);
-
-									if (    last_w_res[0]
-											&&  typeof last_w_res[2] === 'undefined'
-											&& (typeof last_w_res[2] === 'undefined' || last_w_res[2] === false) // Do not match for 'Tu 23:59-40:00+'
-											&&  typeof last_w_res[1] === 'object'
-											&& date.getTime() === last_w_res[1].getTime()
-										) {
-
-										// '05:00-06:00,17:00+,13:00-02:00',
-
-										// console.log("17:00+,13:00-02:00 matched.");
-										// console.log(JSON.stringify(rules, null, '    '));
-
-										resultstate = false;
-										unknown     = false;
-									}
-								/* }}} */
-								}
-								/* }}} */
-							}
-
-							if (rules[rule].fallback) {
-								if (typeof changedate === 'undefined' || (typeof res[1] !== 'undefined' && res[1] < changedate))
-									changedate = res[1];
-
-								// break rule; // Fallback rule matched, no need for checking the rest.
-								// WRONG: What if 'off' is used after fallback rule.
-							}
-						}
-					}
-					if (typeof changedate === 'undefined' || (typeof res[1] !== 'undefined' && res[1] < changedate))
-						changedate = res[1];
-				}
-			}
-
-			if (typeof rules[match_rule] === 'object' && typeof rules[match_rule].comment === 'string') {
-				/* Only use comment if one is explicitly specified. */
-				comment = rules[match_rule].comment;
-			} else if (typeof comment === 'object') {
-				if (comment[1] === match_rule) {
-					comment = comment[0];
-				} else {
-					comment = undefined;
-				}
-			}
-
-			// console.log('changedate', changedate, resultstate, comment, match_rule);
-			return [ resultstate, changedate, unknown, comment, match_rule ];
-		};
-		// }}}
-
-		/* Generate prettified value for selector based on tokens. {{{
-		 *
-		 * :param tokens: List of token objects.
-		 * :param at: Position where to start.
-		 * :param last_at: Position where to stop.
-		 * :param conf: Configuration options.
-		 * :returns: Prettified value.
-		 */
-		function prettifySelector(tokens, selector_start, selector_end, selector_type, conf) {
-
-			var value = '';
-			var at = selector_start;
-			while (at <= selector_end) {
-				// console.log('At: ' + at + ', token: ' + tokens[at]);
-				if (matchTokens(tokens, at, 'weekday')) {
-					if (!conf.leave_weekday_sep_one_day_betw
-						&& at - selector_start > 1 && (matchTokens(tokens, at-1, ',') || matchTokens(tokens, at-1, '-'))
-						&& matchTokens(tokens, at-2, 'weekday')
-						&& tokens[at][0] === (tokens[at-2][0] + 1) % 7) {
-							value = value.substring(0, value.length - 1) + conf.sep_one_day_between;
-					}
-					value += weekdays[tokens[at][0]];
-				} else if (at - selector_start > 0 // e.g. '09:0' -> '09:00'
-						&& selector_type === 'time'
-						&& matchTokens(tokens, at-1, 'timesep')
-						&& matchTokens(tokens, at, 'number')) {
-					value += (tokens[at][0] < 10 ? '0' : '') + tokens[at][0].toString();
-				} else if (selector_type === 'time' // e.g. '9:00' -> ' 09:00'
-						&& conf.zero_pad_hour
-						&& at !== tokens.length
-						&& matchTokens(tokens, at, 'number')
-						&& matchTokens(tokens, at+1, 'timesep')) {
-					value += (
-							tokens[at][0] < 10 ?
-								(tokens[at][0] === 0 && conf.one_zero_if_hour_zero ?
-								 '' : '0') :
-								'') + tokens[at][0].toString();
-				} else if (selector_type === 'time' // e.g. '9-18' -> '09:00-18:00'
-						&& at + 2 <= selector_end
-						&& matchTokens(tokens, at, 'number')
-						&& matchTokens(tokens, at+1, '-')
-						&& matchTokens(tokens, at+2, 'number')) {
-					value += (tokens[at][0] < 10 ?
-							(tokens[at][0] === 0 && conf.one_zero_if_hour_zero ? '' : '0')
-							: '') + tokens[at][0].toString();
-					value += ':00-'
-						+ (tokens[at+2][0] < 10 ? '0' : '') + tokens[at+2][0].toString()
-						+ ':00';
-					at += 2;
-				} else if (matchTokens(tokens, at, 'comment')) {
-					value += '"' + tokens[at][0].toString() + '"';
-				} else if (matchTokens(tokens, at, 'closed')) {
-					value += (conf.leave_off_closed ? tokens[at][0] : conf.keyword_for_off_closed);
-				} else if (at - selector_start > 0 && matchTokens(tokens, at, 'number')
-						&& (matchTokens(tokens, at-1, 'month') && selector_type === 'month'
-						||  matchTokens(tokens, at-1, 'week')  && selector_type === 'week'
-						)) {
-					value += ' '
-						+ (conf.zero_pad_month_and_week_numbers && tokens[at][0] < 10 ? '0' : '')
-						+ tokens[at][0];
-				} else if (at - selector_start > 0 && matchTokens(tokens, at, 'month')
-						&& matchTokens(tokens, at-1, 'year')) {
-					value += ' ' + months[[tokens[at][0]]];
-				} else if (at - selector_start > 0 && matchTokens(tokens, at, 'event')
-						&& matchTokens(tokens, at-1, 'year')) {
-					value += ' ' + tokens[at][0];
-				} else if (matchTokens(tokens, at, 'month')) {
-					value += months[[tokens[at][0]]];
-					if (at + 1 <= selector_end && matchTokens(tokens, at+1, 'weekday'))
-						value += ' ';
-				} else if (at + 2 <= selector_end
-						&& (matchTokens(tokens, at, '-') || matchTokens(tokens, at, '+'))
-						&& matchTokens(tokens, at+1, 'number', 'calcday')) {
-					value += ' ' + tokens[at][0] + tokens[at+1][0] + ' day' + (Math.abs(tokens[at+1][0]) === 1 ? '' : 's');
-					at += 2;
-				} else if (at === selector_end
-						&& selector_type === 'weekday'
-						&& tokens[at][0] === ':') {
-					// Do nothing.
-				} else {
-					value += tokens[at][0].toString();
-				}
-				at++;
-			}
-			return value;
-		}
-		// }}}
-
-		//======================================================================
-		// Public interface {{{
-		// All functions below are considered public.
-		//======================================================================
-
-		// Iterator interface {{{
-		this.getIterator = function(date) {
-			return new function(oh) {
-				if (typeof date === 'undefined')
-					date = new Date();
-
-				var prevstate = [ undefined, date, undefined, undefined, undefined ];
-				var state = oh.getStatePair(date);
-
-				/* getDate {{{ */
-				this.getDate = function() {
-					return prevstate[1];
-				};
-				/* }}} */
-
-				/* setDate {{{ */
-				this.setDate = function(date) {
-					if (typeof date !== 'object')
-						throw 'Date parameter needed.';
-
-					prevstate = [ undefined, date, undefined, undefined, undefined ];
-					state     = oh.getStatePair(date);
-				};
-				/* }}} */
-
-				/* getState: Check whether facility is `open' {{{ */
-				this.getState = function() {
-					return state[0];
-				};
-				/* }}} */
-
-				/* getUnknown: Checks whether the opening state is conditional or unknown {{{ */
-				this.getUnknown = function() {
-					return state[2];
-				};
-				/* }}} */
-
-				/* getStateString: Get state string. Either 'open', 'unknown' or 'closed' {{{ */
-				this.getStateString = function(past) {
-					return (state[0] ? 'open' : (state[2] ? 'unknown' : (past ? 'closed' : 'close')));
-				};
-				/* }}} */
-
-				/* getComment: Get the comment, undefined in none {{{ */
-				this.getComment = function() {
-					return state[3];
-				};
-				/* }}} */
-
-				/* getMatchingRule: Get the rule which matched thus deterrents the current state {{{ */
-				this.getMatchingRule = function() {
-					if (typeof state[4] === 'undefined')
-						return undefined;
-
-					return rules[state[4]].build_from_token_rule[2];
-				};
-				/* }}} */
-
-				/* advance: Advances to the next position {{{ */
-				this.advance = function(datelimit) {
-					if (typeof datelimit === 'undefined')
-						datelimit = new Date(prevstate[1].getTime() + msec_in_day * 366 * 5);
-					else if (datelimit.getTime() <= prevstate[1].getTime())
-						return false; // The limit for advance needs to be after the current time.
-
-					do {
-						// open range, we won't be able to advance
-						if (typeof state[1] === 'undefined')
-							return false;
-
-						// console.log('\n' + 'previous check time:', prevstate[1]
-							// + ', current check time:',
-							// // (state[1].getHours() < 10 ? '0' : '') + state[1].getHours() +
-							// // ':'+(state[1].getMinutes() < 10 ? '0' : '')+ state[1].getMinutes(), state[1].getDate(),
-							// state[1],
-							// (state[0] ? 'open' : (state[2] ? 'unknown' : 'closed')) + ', comment:', state[3]);
-
-						// We're going backwards or staying at place.
-						// This always indicates coding error in a selector code.
-						if (state[1].getTime() <= prevstate[1].getTime())
-							throw 'Fatal: infinite loop in nextChange';
-
-						// don't advance beyond limits (same as open range)
-						if (state[1].getTime() >= datelimit.getTime())
-							return false;
-
-						// do advance
-						prevstate = state;
-						state = oh.getStatePair(prevstate[1]);
-					} while (state[0] === prevstate[0] && state[2] === prevstate[2] && state[3] === prevstate[3]);
-					return true;
-				};
-				/* }}} */
-			}(this);
-		};
-		// }}}
-
-		// Simple API {{{
-
-		this.getState = function(date) {
-			var it = this.getIterator(date);
-			return it.getState();
-		};
-
-		this.getUnknown = function(date) {
-			var it = this.getIterator(date);
-			return it.getUnknown();
-		};
-
-		this.getStateString = function(date, past) {
-			var it = this.getIterator(date);
-			return it.getStateString(past);
-		};
-
-		this.getComment = function(date) {
-			var it = this.getIterator(date);
-			return it.getComment();
-		};
-
-		this.getMatchingRule = function(date) {
-			var it = this.getIterator(date);
-			return it.getMatchingRule();
-		};
-
-		/* Not available for iterator API {{{ */
-		/* getWarnings: Get warnings, empty list if none {{{ */
-		this.getWarnings = function() {
-			var it = this.getIterator();
-			return getWarnings(it);
-		};
-		/* }}} */
-
-		/* prettifyValue: Get a nicely formated value {{{ */
-		this.prettifyValue = function(argument_hash) {
-			this.getWarnings();
-			/* getWarnings has to be run before prettifyValue because some
-			 * decisions if a certain aspect makes sense to prettify or not
-			 * are based on the warnings.
-			 * Basically, both functions depend on each other in some way :(
-			 * See done_with_selector_reordering.
-			 */
-			return prettifyValue(argument_hash);
-		};
-		/* }}} */
-
-		/* getNextChange: Get time of next status change {{{ */
-		this.getNextChange = function(date, maxdate) {
-			var it = this.getIterator(date);
-			if (!it.advance(maxdate))
-				return undefined;
-			return it.getDate();
-		};
-		/* }}} */
-
-		/* isWeekStable: Checks whether open intervals are same for every week. {{{ */
-		this.isWeekStable = function() {
-			return week_stable;
-		};
-		/* }}} */
-		/* }}} */
-		/* }}} */
-
-		// High-level API {{{
-
-		/* getOpenIntervals: Get array of open intervals between two dates {{{ */
-		this.getOpenIntervals = function(from, to) {
-			var res = [];
-
-			var it = this.getIterator(from);
-
-			if (it.getState() || it.getUnknown())
-				res.push([from, undefined, it.getUnknown(), it.getComment()]);
-
-			while (it.advance(to)) {
-				if (it.getState() || it.getUnknown()) {
-					if (res.length !== 0 && typeof res[res.length - 1][1] === 'undefined') {
-						// last state was also open or unknown
-						res[res.length - 1][1] = it.getDate();
-					}
-					res.push([it.getDate(), undefined, it.getUnknown(), it.getComment()]);
-				} else {
-					if (res.length !== 0 && typeof res[res.length - 1][1] === 'undefined') {
-						// only use the first time as closing/change time and ignore closing times which might follow
-						res[res.length - 1][1] = it.getDate();
-					}
-				}
-			}
-
-			if (res.length > 0 && typeof res[res.length - 1][1] === 'undefined')
-				res[res.length - 1][1] = to;
-
-			return res;
-		};
-		/* }}} */
-
-		/* getOpenDuration: Get total number of milliseconds a facility is open,unknown within a given date range {{{ */
-		this.getOpenDuration = function(from, to) {
-		// console.log('-----------');
-
-			var open    = 0;
-			var unknown = 0;
-
-			var it = this.getIterator(from);
-			var prevdate    = (it.getState() || it.getUnknown()) ? from : undefined;
-			var prevstate   = it.getState();
-			var prevunknown = it.getUnknown();
-
-			while (it.advance(to)) {
-				if (it.getState() || it.getUnknown()) {
-
-					if (typeof prevdate !== 'undefined') {
-						// last state was also open or unknown
-						if (prevunknown) //
-							unknown += it.getDate().getTime() - prevdate.getTime();
-						else if (prevstate)
-							open    += it.getDate().getTime() - prevdate.getTime();
-					}
-
-					prevdate    = it.getDate();
-					prevstate   = it.getState();
-					prevunknown = it.getUnknown();
-					// console.log('if', prevdate, open / (1000 * 60 * 60), unknown / (1000 * 60 * 60));
-				} else {
-					// console.log('else', prevdate);
-					if (typeof prevdate !== 'undefined') {
-						if (prevunknown)
-							unknown += it.getDate().getTime() - prevdate.getTime();
-						else
-							open    += it.getDate().getTime() - prevdate.getTime();
-						prevdate = undefined;
-					}
-				}
-			}
-
-			if (typeof prevdate !== 'undefined') {
-				if (prevunknown)
-					unknown += to.getTime() - prevdate.getTime();
-				else
-					open    += to.getTime() - prevdate.getTime();
-			}
-
-			return [ open, unknown ];
-		};
-		/* }}} */
-		/* }}} */
-		/* }}} */
-	};
-}));
-// vim: set ts=4 sw=4 tw=0 noet foldmarker={{{,}}} foldlevel=0 foldmethod=marker :
+(function(root,factory){var holidays={fr:{PH:{"Jour de l'an":[1,1],"Vendredi saint":["easter",-2,["Moselle","Bas-Rhin","Haut-Rhin","Guadeloupe","Martinique","Polynésie française"]],"Lundi de Pâques":["easter",1],"Saint-Pierre-Chanel":[4,28,["Wallis-et-Futuna"]],"Fête du Travail":[5,1],"Fête de la Victoire":[5,8],"Abolition de l'esclavage (Martinique)":[5,22,["Martinique"]],"Abolition de l'esclavage (Guadeloupe)":[5,27,["Guadeloupe"]],"Jeudi de l'Ascension":["easter",39],"Lundi de Pentecô [...]
+"Christmas Day":[12,25]},Alabama:{PH:{"New Year's Day":[1,1],"Robert E. Lee/Martin Luther King Birthday":["firstJanuaryMonday",14],"George Washington/Thomas Jefferson Birthday":["firstFebruaryMonday",14],"Memorial Day":["lastMayMonday",0],"Independence Day":[7,4],"Labor Day":["firstSeptemberMonday",0],"Columbus Day":["firstOctoberMonday",7],"Veterans Day":[11,11],Thanksgiving:["firstNovemberThursday",21],"Christmas Day":[12,25],"Confederate Memorial Day":["firstAprilMonday",21],"Jefferso [...]
+"neděle":0,ne:0,"pondělí":1,po:1,"úterý":2,"út":2,"středa":3,st:3,"čtvrtek":4,"čt":4,"pátek":5,"pá":5,sobota:6},'Please use the English abbreviation "<ok>" (Spanish) for "<ko>".':{martes:0,"miércoles":1,jueves:2,viernes:3,"sábado":4,domingo:5,lunes:6},'Please use the English abbreviation "<ok>" (Indonesian) for "<ko>".':{selasa:0,rabu:1,kami:2,jumat:3,sabtu:4,minggu:5,senin:6},'Please use the English abbreviation "<ok>" (Swedish) for "<ko>".':{"söndag":0,"söndagar":0,"måndag":1,ma:1,tisd [...]
+}var selector_start_end_type=[0,0,undefined];var prettified_group_value=[];var count=0;do{selector_start_end_type=getSelectorRange(new_tokens[nrule][0],selector_start_end_type[1]);if(count>50){throw formatLibraryBugMessage("infinite loop")}if(selector_start_end_type[2]!=="rule separator"){prettified_group_value.push([selector_start_end_type,prettifySelector(new_tokens[nrule][0],selector_start_end_type[0],selector_start_end_type[1],selector_start_end_type[2],user_conf)])}selector_start_en [...]
+firstAugustMonday:new Date(Y,7,firstWeekdayOfMonth(7,1)),firstSeptemberMonday:new Date(Y,8,firstWeekdayOfMonth(8,1)),firstSeptemberSunday:new Date(Y,8,firstWeekdayOfMonth(8,0)),firstOctoberMonday:new Date(Y,9,firstWeekdayOfMonth(9,1)),firstNovemberMonday:new Date(Y,10,firstWeekdayOfMonth(10,1)),firstMarchTuesday:new Date(Y,2,firstWeekdayOfMonth(2,2)),firstAugustTuesday:new Date(Y,7,firstWeekdayOfMonth(7,2)),firstAugustFriday:new Date(Y,7,firstWeekdayOfMonth(7,5)),firstNovemberThursday:ne [...]
\ No newline at end of file
diff --git a/data/validator/relation.mapcss b/data/validator/relation.mapcss
index 28f8d3b..6c0e513 100644
--- a/data/validator/relation.mapcss
+++ b/data/validator/relation.mapcss
@@ -10,7 +10,7 @@ relation[!type] {
 /* see also #9071 */
 relation[type=route][!route],
 relation[type=route_master][!route_master],
-relation[type=restriction][!restriction],
+relation[type=restriction][!/^restriction/], /* see #11586 */
 relation[type=boundary][!boundary],
 relation[type=public_transport][!public_transport],
 relation[type=waterway][!waterway],
diff --git a/data_nodist/projection-regression-test-data-java9.csv b/data_nodist/projection-regression-test-data-java9.csv
new file mode 100644
index 0000000..5b01ecc
--- /dev/null
+++ b/data_nodist/projection-regression-test-data-java9.csv
@@ -0,0 +1,726 @@
+# Data for test/unit/org/openstreetmap/josm/data/projection/ProjectionRegressionTest.java
+# Format: 1. Projection code; 2. lat/lon; 3. lat/lon projected -> east/north; 4. east/north (3.) inverse projected
+EPSG:2017
+  ll  43.812639429567476 -74.58089147744877
+  en  217842.5385247235 4853108.866848904
+  ll2 43.81263941463517 -74.58089147744892
+EPSG:2018
+  ll  48.803785465994984 -78.18447205264873
+  en  181076.69718299914 5408651.819228685
+  ll2 48.80378544431245 -78.18447205264994
+EPSG:2019
+  ll  44.43461549887944 -79.86979039760281
+  en  275361.0397123381 4921710.724266457
+  ll2 44.43461548307167 -79.8697903976028
+EPSG:2020
+  ll  45.38253264176999 -83.65709974996614
+  en  214185.31889697257 5027626.260692939
+  ll2 45.38253262464091 -83.65709974996632
+EPSG:2021
+  ll  51.26977312143731 -82.4879236815456
+  en  200972.20211078503 5682595.652449562
+  ll2 51.26977309679259 -82.48792368154609
+EPSG:2022
+  ll  57.85997255684093 -83.44573038107055
+  en  337699.3640660662 6415183.75595507
+  ll2 57.859972526331944 -83.44573038107052
+EPSG:2023
+  ll  44.003261285030206 -88.86828553888091
+  en  154975.21633270266 4875416.105916108
+  ll2 44.00326126982739 -88.86828553888388
+EPSG:2024
+  ll  59.90880361237657 -89.52946578553404
+  en  331124.81140858366 6643341.540139925
+  ll2 59.908803580817505 -89.52946578553401
+EPSG:2025
+  ll  48.14679476148006 -94.65152793199783
+  en  181919.52155394424 5335553.400406892
+  ll2 48.146794740638136 -94.65152793199897
+EPSG:2026
+  ll  54.992681769602285 -95.5752395427661
+  en  331983.93628558825 6095896.9569773795
+  ll2 54.99268174121822 -95.5752395427661
+EPSG:2154
+  ll  44.35373092260113 1.9299510493135594
+  en  614710.6274961736 6362211.136518341
+  ll2 44.35373092260116 1.9299510493135592
+EPSG:2176
+  ll  53.07258325461326 14.905633369804125
+  en  5493675.603954346 5882249.140580588
+  ll2 53.072583254612894 14.905633369804132
+EPSG:2177
+  ll  52.68437294746797 18.521841170172493
+  en  6535287.077942027 5839174.519288139
+  ll2 52.68437294746748 18.52184117017249
+EPSG:2178
+  ll  52.19269518832873 20.583978066870035
+  en  7471553.531709745 5784420.752840815
+  ll2 52.192695188328074 20.583978066870035
+EPSG:21781
+  ll  46.10539428035796 10.09189020217092
+  en  805122.6285901767 109456.51907998892
+  ll2 46.105394289534146 10.091890212399738
+EPSG:2179
+  ll  51.215449887260874 22.58214163169756
+  en  8400941.08821489 5676573.045218964
+  ll2 51.21544988725954 22.582141631697176
+EPSG:2180
+  ll  50.07820346969967 21.404973549201806
+  en  672017.1666306948 248430.3891065931
+  ll2 50.078203469689264 21.404973549207757
+EPSG:23700
+  ll  45.97694629266108 22.878795465763712
+  en  946830.7386146804 77526.12708727017
+  ll2 45.976946293598196 22.878795470281045
+EPSG:25828
+  ll  -4.1054098714278995 -13.093039202004235
+  en  711695.0792489832 -454031.2132203576
+  ll2 -4.105409871426733 -13.093039202013369
+EPSG:25829
+  ll  -3.9515249777694885 -10.844280831864726
+  en  295227.07231557614 -436996.359153384
+  ll2 -3.95152497776835 -10.844280831857004
+EPSG:25830
+  ll  -2.9346400148343643 -3.8538084030228905
+  en  405112.7461393682 -324404.94077485404
+  ll2 -2.934640014833407 -3.853808403022732
+EPSG:25831
+  ll  45.98293085062029 3.4583585116644606
+  en  535502.6597518034 5092253.119116779
+  ll2 45.98293085061834 3.458358511664446
+EPSG:25832
+  ll  28.978940242361965 9.444389968575432
+  en  543292.555574971 3205733.7208008594
+  ll2 28.978940242363837 9.444389968575443
+EPSG:25833
+  ll  -4.189091685704661 13.025970226764912
+  en  280879.6593442116 -463304.59239224106
+  ll2 -4.189091685703484 13.025970226775808
+EPSG:25834
+  ll  75.74408975899891 20.949890484704383
+  en  498622.5702901486 8406630.953540755
+  ll2 75.74408975899773 20.949890484704387
+EPSG:25835
+  ll  76.23959351972334 30.83014224851491
+  en  601631.1445402491 8465221.084257865
+  ll2 76.23959351969762 30.83014224835623
+EPSG:25836
+  ll  66.28301129980083 36.9236047114277
+  en  676010.1670961326 7356976.315906883
+  ll2 66.28301129969988 36.923604711262385
+EPSG:25837
+  ll  58.765510814933926 36.51616649880137
+  en  356349.7890584799 6516605.005131972
+  ll2 58.765510814925236 36.516166498800914
+EPSG:25838
+  ll  78.90937386121946 48.49407789203991
+  en  574989.9568031528 8762104.0279929
+  ll2 78.90937386120982 48.49407789196829
+EPSG:27561
+  ll  46.77813576765672 -1.441621601613082
+  en  311298.1451498816 -95479.4088998771
+  ll2 46.77813576765672 -1.4416216016130818
+EPSG:27562
+  ll  46.03812929055178 5.8313873597903365
+  en  870439.3315802779 121335.83089890497
+  ll2 46.03812929055179 5.8313873597903365
+EPSG:27563
+  ll  45.23275963085384 1.6403432490045127
+  en  545325.5232264523 326105.32562436664
+  ll2 45.23275963085388 1.6403432490045131
+EPSG:27564
+  ll  44.212732598368596 -1.3831097364576572
+  en  -297119.42136144475 419875.36624099035
+  ll2 44.21273259836861 -1.383109736457658
+EPSG:2969
+  ll  17.70389264322191 -62.57380375016622
+  en  544958.7463972603 1957914.5536007592
+  ll2 17.703892620769302 -62.57380373693211
+EPSG:2970
+  ll  16.4454568377889 -61.235547356427155
+  en  688805.3371984751 1819334.8489647326
+  ll2 16.44545682053553 -61.23554738302177
+EPSG:2972
+  ll  3.087236605655137 -52.18804837513089
+  en  367981.07310790545 341309.4414265501
+  ll2 3.0872366056541507 -52.18804837513005
+EPSG:2973
+  ll  14.260637582452576 -61.169562494611895
+  en  697090.5829156451 1577160.0327720663
+  ll2 14.260637598119791 -61.16956247472375
+EPSG:2975
+  ll  -22.004144310178074 55.5088924906041
+  en  346078.5129806745 7565963.781152306
+  ll2 -22.004144310179466 55.508892490604
+EPSG:3003
+  ll  47.012758270470556 8.489836925456373
+  en  1461222.600270462 5206899.3927815985
+  ll2 47.01275829649725 8.489836925456391
+EPSG:3004
+  ll  43.5562583080499 15.422257558203842
+  en  2554106.5408389373 4822854.806565943
+  ll2 43.55625833483955 15.422257558203832
+EPSG:3008
+  ll  55.598519104150505 13.155201669979679
+  en  128264.64205976512 6163916.824807991
+  ll2 55.598519104151016 13.155201669979673
+EPSG:3059
+  ll  85.0891837640614 67.87407522882981
+  en  879979.0230567539 3602267.4429318924
+  ll2 85.12774261630375 65.33691481498725
+EPSG:31370
+  ll  50.02822479331805 3.363551921709463
+  en  77978.49312411762 80145.89987977222
+  ll2 50.02822479688413 3.3635519195004377
+EPSG:31466
+  ll  13.505393376398203 5.786148622670604
+  en  2476850.876807613 1493489.9142068939
+  ll2 13.505393376396816 5.786148622670606
+EPSG:31467
+  ll  66.7149245263202 8.313568285488806
+  en  3469711.971256705 7401942.473805899
+  ll2 66.71492452632175 8.313568285488758
+EPSG:31468
+  ll  66.2017157677127 10.214924080588673
+  en  4419608.582668763 7345698.707050172
+  ll2 66.20171576771344 10.214924080588595
+EPSG:31469
+  ll  0.3634045105682233 14.93608123331359
+  en  5492885.561470025 40179.36931931066
+  ll2 0.36340451056810064 14.936081233313592
+EPSG:32601
+  ll  -3.6495589856169564 -176.6243420458802
+  en  541717.4179094827 -403400.10216603236
+  ll2 -3.6495589856157853 -176.6243420458802
+EPSG:32602
+  ll  38.43328988420372 -175.41454460919266
+  en  114618.99293843779 4263130.091453932
+  ll2 38.43328988397025 -175.41454460952977
+EPSG:32603
+  ll  13.94169016223239 -165.2258799979927
+  en  475600.84907209425 1541289.1313523215
+  ll2 13.941690162231092 -165.2258799979927
+EPSG:32604
+  ll  60.795772683636486 -162.92629418761828
+  en  286368.7420574333 6746432.920966993
+  ll2 60.79577268349323 -162.92629418748652
+EPSG:32605
+  ll  74.2550224215632 -148.20602058272593
+  en  645061.3242085864 8246334.553609347
+  ll2 74.25502242143259 -148.20602058389522
+EPSG:32606
+  ll  80.62633417761566 -151.3471654538554
+  en  421027.4006989514 8954452.981119523
+  ll2 80.62633417759669 -151.34716545333794
+EPSG:32607
+  ll  37.01455086032124 -143.30950802834204
+  en  294532.771208573 4098980.3012167197
+  ll2 37.014550860317 -143.30950802835392
+EPSG:32608
+  ll  -4.653539246315615 -133.56282320890344
+  en  659414.7330360789 -514529.48258251743
+  ll2 -4.653539246314252 -133.56282320890554
+EPSG:32609
+  ll  56.32206179767012 -124.49220399516759
+  en  778688.1176260733 6251055.828952407
+  ll2 56.32206179728912 -124.4922039955294
+EPSG:32610
+  ll  36.921727279752915 -127.6633794079528
+  en  84517.34786617832 4096359.5188621692
+  ll2 36.921727279456555 -127.66337940844218
+EPSG:32611
+  ll  61.640118353720766 -116.73932035402463
+  en  513814.44473742106 6834117.684977713
+  ll2 61.640118353722684 -116.73932035402461
+EPSG:32612
+  ll  61.69639866773598 -111.30686106393058
+  en  483767.78639777703 6840397.679937224
+  ll2 61.69639866773791 -111.3068610639306
+EPSG:32613
+  ll  19.215134444138208 -106.20214869812588
+  en  373630.15798722656 2125068.238834211
+  ll2 19.21513444413868 -106.20214869812575
+EPSG:32614
+  ll  16.494900055550026 -94.60816731824863
+  en  969103.02718262 1828791.6689798017
+  ll2 16.494900055492113 -94.60816731840623
+EPSG:32615
+  ll  83.61536918012229 -93.46595301371315
+  en  494215.18645975593 9285178.496719426
+  ll2 83.61536918012051 -93.46595301371302
+EPSG:32616
+  ll  7.014249507069595 -87.71794057949658
+  en  420703.10661247035 775384.7710193056
+  ll2 7.014249507067748 -87.71794057949653
+EPSG:32617
+  ll  -3.3302161122148046 -82.19832562590992
+  en  366870.3258670751 -368173.9817296882
+  ll2 -3.33021611221375 -82.19832562590905
+EPSG:32618
+  ll  57.18696286723503 -72.70001645536873
+  en  639002.3152045447 6340543.350557207
+  ll2 57.18696286722937 -72.70001645536743
+EPSG:32619
+  ll  4.368358977092871 -64.53035238567001
+  en  996425.9242046585 484321.4351426479
+  ll2 4.368358977068732 -64.53035238657512
+EPSG:32620
+  ll  34.50346552800408 -65.88643009548395
+  en  234986.8357645254 3821764.7436924386
+  ll2 34.50346552799164 -65.88643009552501
+EPSG:32621
+  ll  66.32043205684387 -55.95233500732909
+  en  546950.7762588888 7356020.183886801
+  ll2 66.32043205684555 -55.95233500732901
+EPSG:32622
+  ll  22.880986672953505 -51.04852780641678
+  en  495022.4465742254 2530345.9410377746
+  ll2 22.88098667295498 -51.04852780641678
+EPSG:32623
+  ll  50.70636597139303 -44.415105586563286
+  en  541300.1696982854 5617335.645975685
+  ll2 50.70636597139192 -44.41510558656329
+EPSG:32624
+  ll  59.252750117784515 -34.1965937576106
+  en  773788.335899823 6578068.5697853835
+  ll2 59.252750117274026 -34.19659375841913
+EPSG:32625
+  ll  74.83669811358862 -29.78636313505136
+  en  593787.6709387399 8307926.133431323
+  ll2 74.83669811357657 -29.78636313508365
+EPSG:32626
+  ll  37.06395848498947 -23.32759913796584
+  en  826543.5508567702 4108279.7965503195
+  ll2 37.06395848491914 -23.327599137821036
+EPSG:32627
+  ll  21.63205133470307 -16.125369909277662
+  en  1004897.665170015 2400032.057260925
+  ll2 21.632051334553644 -16.125369908989768
+EPSG:32628
+  ll  41.18279035975444 -12.509306446318838
+  en  708900.236502887 4562039.63374197
+  ll2 41.18279035974452 -12.509306446303412
+EPSG:32629
+  ll  -1.5056398202590895 -13.226571608432748
+  en  29420.422256887134 -166875.50942587046
+  ll2 -1.505639820253348 -13.226571607731465
+EPSG:32630
+  ll  60.97617864835311 -5.1456787213343365
+  en  383876.63834851334 6762035.652459668
+  ll2 60.97617864835112 -5.145678721334658
+EPSG:32631
+  ll  21.778088372390226 3.293215716204843
+  en  530312.9322228377 2408293.560193174
+  ll2 21.778088372391416 3.293215716204845
+EPSG:32632
+  ll  41.781405379957675 9.22208544650317
+  en  518455.40721812454 4625530.209963699
+  ll2 41.78140537995602 9.222085446503165
+EPSG:32633
+  ll  13.769437443342966 12.459184391242701
+  en  225263.60546491505 1523678.082043307
+  ll2 13.769437443341635 12.45918439126195
+EPSG:32634
+  ll  52.60873639594413 23.627632522379443
+  en  677915.0388393129 5831989.435535941
+  ll2 52.60873639592787 23.627632522385106
+EPSG:32635
+  ll  24.91594181729575 22.85543695478043
+  en  81252.09010670881 2762028.1649684547
+  ll2 24.91594181723782 22.85543695457286
+EPSG:32636
+  ll  77.06743470734551 36.30535071085872
+  en  582537.5382539753 8556619.453961581
+  ll2 77.06743470733534 36.305350710815965
+EPSG:32637
+  ll  32.10582753915865 43.30138043198107
+  en  905988.0719325282 3560274.864247192
+  ll2 32.10582753902983 43.301380432359636
+EPSG:32638
+  ll  84.48275616102283 40.84003411261602
+  en  455384.49284733087 9383600.605589997
+  ll2 84.48275616101878 40.84003411297329
+EPSG:32639
+  ll  20.8498525813592 54.77860386823433
+  en  893311.5371425161 2310151.244051726
+  ll2 20.849852581336613 54.778603868270764
+EPSG:32640
+  ll  68.00277995638268 59.474698114871416
+  en  603418.7121789139 7545245.473849232
+  ll2 68.00277995637836 59.474698114869064
+EPSG:32641
+  ll  47.78264301956235 62.488952236723996
+  en  461718.3278955673 5292268.799792763
+  ll2 47.78264301956059 62.48895223672401
+EPSG:32642
+  ll  0.9326717540981502 68.86233656489328
+  en  484683.50743983604 103088.64292632433
+  ll2 0.9326717540978313 68.86233656489328
+EPSG:32643
+  ll  44.846170230678624 73.37627962027206
+  en  371683.90711883584 4967144.466433025
+  ll2 44.84617023067593 73.37627962027075
+EPSG:32644
+  ll  -4.662113413556391 78.17591049523084
+  en  186656.29441169143 -515943.0662307329
+  ll2 -4.662113413554683 78.17591049530117
+EPSG:32645
+  ll  21.85298682592404 83.31084454724608
+  en  118619.21146341297 2421129.418764259
+  ll2 21.85298682590411 83.31084454719573
+EPSG:32646
+  ll  3.83090558426532 93.70522319656826
+  en  578301.4840987214 423468.6984521304
+  ll2 3.8309055842641033 93.7052231965682
+EPSG:32647
+  ll  61.176701380634256 102.3049755772457
+  en  677705.7939869761 6786961.547490153
+  ll2 61.17670138058519 102.30497557722063
+EPSG:32648
+  ll  65.52016341561 108.07283857420049
+  en  642036.2912575123 7269895.306268793
+  ll2 65.52016341558652 108.07283857418378
+EPSG:32649
+  ll  50.51458481950146 112.2497647876952
+  en  588606.0108627022 5596593.02120018
+  ll2 50.51458481950012 112.2497647876954
+EPSG:32650
+  ll  30.317898015756754 115.83447351407865
+  en  387943.86307312315 3354587.2680485984
+  ll2 30.317898015758438 115.83447351407835
+EPSG:32651
+  ll  5.439835265269263 124.12634655970724
+  en  624781.4030536099 601399.6368953715
+  ll2 5.439835265267696 124.12634655970665
+EPSG:32652
+  ll  24.04438471096761 126.6110765311061
+  en  257056.0893575239 2661204.957370432
+  ll2 24.044384710968565 126.61107653109997
+EPSG:32653
+  ll  9.196967409095826 136.5941574268806
+  en  675145.977776799 1017017.9715244808
+  ll2 9.196967409094013 136.59415742687773
+EPSG:32654
+  ll  8.828949468798196 138.3195101449139
+  en  205136.37787458964 977000.6155270364
+  ll2 8.828949468796083 138.31951014495678
+EPSG:32655
+  ll  38.98881999790767 146.43370393605906
+  en  450955.5466387597 4315688.422626878
+  ll2 38.98881999790672 146.43370393605906
+EPSG:32656
+  ll  16.65759552704404 154.97496292314585
+  en  710634.5374776218 1842718.0883714412
+  ll2 16.657595527043867 154.97496292314267
+EPSG:32657
+  ll  19.930570323715436 158.94732919399456
+  en  494487.94613308937 2203799.1129321125
+  ll2 19.93057032371606 158.94732919399456
+EPSG:32658
+  ll  54.122258197403674 167.75166014723632
+  en  679819.5341590005 6000624.159578423
+  ll2 54.122258197383076 167.75166014724059
+EPSG:32659
+  ll  25.934718860161414 166.12759614228142
+  en  11746.201902320201 2877548.4243940827
+  ll2 25.93471885997572 166.12759614167314
+EPSG:32660
+  ll  55.17620724777461 173.35757010739871
+  en  268075.65214530524 6120455.010987351
+  ll2 55.176207247665715 173.35757010742762
+EPSG:32701
+  ll  -79.49425576683728 -175.17261235268
+  en  537190.9449586726 1174278.8979131058
+  ll2 -79.49425576683524 -175.17261235268055
+EPSG:32702
+  ll  -70.3636651216759 -169.0540165216635
+  en  572973.9443382017 2192403.737973204
+  ll2 -70.3636651216755 -169.05401652166373
+EPSG:32703
+  ll  -64.07482155536479 -167.37347836794083
+  en  384239.00670047576 2892491.385879867
+  ll2 -64.07482155536077 -167.37347836793995
+EPSG:32704
+  ll  -81.82759990266321 -161.36129957378873
+  en  462536.10472126206 913651.2670114413
+  ll2 -81.82759990266095 -161.36129957378603
+EPSG:32705
+  ll  -10.618519479667924 -152.80558677569005
+  en  521265.3271498454 8826193.875471806
+  ll2 -10.618519479666025 -152.80558677569005
+EPSG:32706
+  ll  -64.88702541974459 -146.77055628252265
+  en  510865.456044635 2804116.4156432813
+  ll2 -64.88702541974651 -146.77055628252262
+EPSG:32707
+  ll  -17.014236124831925 -138.5560342625061
+  en  760189.8126936387 8117245.628967971
+  ll2 -17.014236124831584 -138.55603426251415
+EPSG:32708
+  ll  -19.360522286858412 -130.51521438438937
+  en  971375.4749390932 7853156.144087005
+  ll2 -19.360522286783237 -130.5152143843627
+EPSG:32709
+  ll  -48.12954384352628 -133.6701726707044
+  en  152541.01484182914 4658745.420074765
+  ll2 -48.12954384305089 -133.67017267060555
+EPSG:32710
+  ll  -52.25433386074913 -125.22009755241042
+  en  348463.814100175 4208351.435288155
+  ll2 -52.25433386074278 -125.2200975524135
+EPSG:32711
+  ll  -19.969438206831114 -112.40559811141517
+  en  981089.1700443368 7785303.299711368
+  ll2 -19.969438206739415 -112.40559811133505
+EPSG:32712
+  ll  -82.30598145289773 -111.54516447887035
+  en  491851.53932606074 860976.4327995479
+  ll2 -82.30598145289581 -111.54516447887022
+EPSG:32713
+  ll  -27.682129312431982 -108.88467228935836
+  en  116766.25790056051 6931967.4751126785
+  ll2 -27.682129312385946 -108.88467228954225
+EPSG:32714
+  ll  -29.87122817201856 -96.79393969412426
+  en  713070.2953358308 6693439.857568208
+  ll2 -29.871228172019055 -96.79393969411603
+EPSG:32715
+  ll  -45.064525740600004 -91.06910863212093
+  en  652012.8450233834 5008067.966598954
+  ll2 -45.06452574059588 -91.06910863211772
+EPSG:32716
+  ll  -58.71229223259745 -84.44411361090351
+  en  648042.0672957059 3489161.1944485996
+  ll2 -58.71229223258684 -84.44411361090329
+EPSG:32717
+  ll  -38.802390463626864 -81.93995602944875
+  en  418380.85195106186 5704732.436690798
+  ll2 -38.80239046362597 -81.93995602944885
+EPSG:32718
+  ll  -3.3629289212908304 -73.44674961461307
+  en  672563.3719880176 9628153.793256724
+  ll2 -3.3629289212898112 -73.44674961461631
+EPSG:32719
+  ll  -33.89082357352943 -70.16473852068903
+  en  392298.6823869157 6249338.709620172
+  ll2 -33.89082357353018 -70.16473852068935
+EPSG:32720
+  ll  -37.963670491552506 -63.152637490725255
+  en  486592.2238327504 5798204.815633492
+  ll2 -37.963670491551895 -63.152637490725255
+EPSG:32721
+  ll  -30.671596491118876 -55.93485084612241
+  en  602035.2371873851 6606308.651040172
+  ll2 -30.6715964911205 -55.93485084612222
+EPSG:32722
+  ll  -48.33797560577525 -51.721136708686714
+  en  446558.9035598788 4645882.823935159
+  ll2 -48.33797560577357 -51.72113670868671
+EPSG:32723
+  ll  -67.34791270049992 -47.105492746268
+  en  409523.37020129093 2528300.3134832922
+  ll2 -67.3479127004991 -47.10549274626766
+EPSG:32724
+  ll  -18.480188081195536 -35.50757293618132
+  en  868887.6679227422 7953120.194515216
+  ll2 -18.48018808118477 -35.50757293619885
+EPSG:32725
+  ll  -79.65616002318849 -34.90810750981947
+  en  461758.5777522838 1156165.090432601
+  ll2 -79.65616002318642 -34.90810750981881
+EPSG:32726
+  ll  -58.050904557642795 -25.614076588233253
+  en  581801.0408022252 3564782.919045305
+  ll2 -58.05090455764374 -25.614076588233054
+EPSG:32727
+  ll  -11.074839610586821 -22.509236738018565
+  en  335149.1342237338 8775328.359513272
+  ll2 -11.074839610585139 -22.509236738016682
+EPSG:32728
+  ll  -30.22368423134398 -14.155511438653734
+  en  581267.1474967783 6656126.712692622
+  ll2 -30.223684231345693 -14.155511438653667
+EPSG:32729
+  ll  -30.227320596530838 -8.86299565287534
+  en  513183.5389036891 6656017.3125942955
+  ll2 -30.227320596532536 -8.862995652875338
+EPSG:32730
+  ll  -22.65541004612829 -6.752038540656425
+  en  114321.06668815808 7489756.433066264
+  ll2 -22.65541004610434 -6.752038540729243
+EPSG:32731
+  ll  -69.74387310983653 0.012693306356169387
+  en  384612.2482139726 2259866.2332176287
+  ll2 -69.7438731098228 0.012693306371272417
+EPSG:32732
+  ll  -14.026991320173153 7.7093432661523185
+  en  360626.78498714697 8448908.056413945
+  ll2 -14.026991320171977 7.709343266152944
+EPSG:32733
+  ll  -56.45428458140137 12.50156596978745
+  en  346029.859834271 3740559.3039264185
+  ll2 -56.45428458139101 12.50156596978566
+EPSG:32734
+  ll  -74.32843031942343 16.893644195286917
+  en  376277.331182472 1747049.6300257826
+  ll2 -74.32843031937078 16.893644195577032
+EPSG:32735
+  ll  -40.275799278738035 28.62542011392181
+  en  638188.6451233265 5540363.68074324
+  ll2 -40.27579927873619 28.625420113923493
+EPSG:32736
+  ll  -65.04402451100779 28.088269872939605
+  en  268942.9946001717 2777652.4024939695
+  ll2 -65.0440245105821 28.08826987416865
+EPSG:32737
+  ll  -56.12569031261057 41.91746685264795
+  en  681335.399562682 3776096.8216309603
+  ll2 -56.1256903125828 41.917466852648374
+EPSG:32738
+  ll  -65.97814099575966 44.72385383977286
+  en  487455.97932662285 2682498.8077909714
+  ll2 -65.97814099576138 44.723853839772836
+EPSG:32739
+  ll  -83.15794305226285 50.985294546824136
+  en  499804.41073336825 765909.3128359821
+  ll2 -83.15794305226103 50.985294546824136
+EPSG:32740
+  ll  -33.90612215333897 55.54340807914578
+  en  365333.57714934787 6247297.927556757
+  ll2 -33.906122153339616 55.54340807914475
+EPSG:32741
+  ll  1.0575806364498845 59.26522425749987
+  en  84186.93583129393 1.0117144976068655E7
+  ll2 1.057580636448166 59.26522425784936
+EPSG:32742
+  ll  -46.178042726951354 66.69823879913768
+  en  322343.7313900407 4883595.078896322
+  ll2 -46.17804272694297 66.6982387991304
+EPSG:32743
+  ll  -39.73188174417527 76.95777139426251
+  en  667772.5884305012 5600168.03909625
+  ll2 -39.73188174417238 76.9577713942671
+EPSG:32744
+  ll  -58.90817409501413 83.51623833851097
+  en  644926.687563036 3467446.9295808133
+  ll2 -58.9081740950047 83.51623833851124
+EPSG:32745
+  ll  -19.13355908174954 83.0612339731479
+  en  85519.0860959157 7879719.58893651
+  ll2 -19.133559081721046 83.06123397315149
+EPSG:32746
+  ll  -79.98303745799947 96.65795352222075
+  en  570985.7969795148 1118075.2147685383
+  ll2 -79.9830374579899 96.6579535221117
+EPSG:32747
+  ll  -60.228788602870765 98.77996463649609
+  en  487811.7927914533 3323088.385469177
+  ll2 -60.22878860287252 98.77996463649608
+EPSG:32748
+  ll  -1.2400504086148914 101.47125324361218
+  en  107180.32612776395 9862674.919377096
+  ll2 -1.2400504086134942 101.47125324386658
+EPSG:32749
+  ll  -14.715058432512933 109.34888827185335
+  en  322238.7089430217 8372538.683268929
+  ll2 -14.715058432512073 109.34888827185527
+EPSG:32750
+  ll  -41.801482732797645 121.04882913878397
+  en  836386.155451505 5364335.267253873
+  ll2 -41.801482732631236 121.04882913894792
+EPSG:32751
+  ll  -40.71839008199499 127.058349678248
+  en  842805.105964907 5484576.478531847
+  ll2 -40.71839008183497 127.0583496784345
+EPSG:32752
+  ll  -72.46474360436092 124.05481128660503
+  en  333868.1451270664 1952386.7334295344
+  ll2 -72.46474360415583 124.05481128811478
+EPSG:32753
+  ll  -33.78436189634808 133.38483653988797
+  en  350459.69487856154 6260580.879620893
+  ll2 -33.78436189634862 133.3848365398862
+EPSG:32754
+  ll  -41.877385502320905 140.28898118102205
+  en  441002.03665171954 5363593.0031704055
+  ll2 -41.87738550231924 140.28898118102205
+EPSG:32755
+  ll  -71.6100953593816 150.91844203859793
+  en  637888.143501346 2050080.8359576007
+  ll2 -71.61009535932321 150.9184420384149
+EPSG:32756
+  ll  -2.4333551434362874 149.30198701386684
+  en  88585.68516044872 9730475.224796707
+  ll2 -2.4333551434326264 149.30198701419155
+EPSG:32757
+  ll  -45.28058180582347 160.9894853454731
+  en  656034.4343928326 4983954.453494608
+  ll2 -45.28058180581893 160.9894853454768
+EPSG:32758
+  ll  -16.194478546960923 167.46553434377688
+  en  763603.8925153038 8207969.773690771
+  ll2 -16.19447854696032 167.46553434376645
+EPSG:32759
+  ll  -23.721981722945728 173.97823953505454
+  en  803660.2707763889 7373376.457123832
+  ll2 -23.721981722942374 173.9782395350765
+EPSG:32760
+  ll  -71.2741256632004 177.7209727164633
+  en  525833.0134556224 2091875.6753999684
+  ll2 -71.27412566320066 177.7209727164633
+EPSG:3301
+  ll  57.66827326755869 27.38651646246947
+  en  702033.9136823909 6396888.581339597
+  ll2 57.66827326755868 27.38651646246947
+EPSG:3812
+  ll  49.80549712200476 6.084016018795101
+  en  773476.5758068399 556329.0585747092
+  ll2 49.805497122004766 6.084016018795101
+EPSG:3857
+  ll  -8.186665784258565 -98.88476391842832
+  en  -1.1007801566612512E7 -914452.3460527665
+  ll2 -8.186665784258578 -98.88476391842832
+EPSG:3942
+  ll  43.31076698835789 4.775330742390713
+  en  1844045.6093504836 1347101.5148460106
+  ll2 43.31076698835793 4.775330742390712
+EPSG:3943
+  ll  45.24385797787262 6.491715701959931
+  en  1974249.979588893 2455068.3748714346
+  ll2 45.24385797787265 6.491715701959932
+EPSG:3944
+  ll  44.60632258869744 0.6721665250429165
+  en  1515235.2084579398 3269976.487566871
+  ll2 44.60632258869745 0.6721665250429147
+EPSG:3945
+  ll  46.04260135928741 2.316103441625539
+  en  1647060.175456604 4316096.661231255
+  ll2 46.04260135928743 2.316103441625539
+EPSG:3946
+  ll  48.120511286262946 -2.638924617409179
+  en  1280270.8431755006 5450639.6088787
+  ll2 48.12051128626297 -2.638924617409182
+EPSG:3947
+  ll  47.56070109322637 -4.454770213125427
+  en  1139846.2284764382 6289004.41408339
+  ll2 47.56070109322638 -4.4547702131254265
+EPSG:3948
+  ll  48.0131835185863 -4.883573621462191
+  en  1112910.0334047128 7231508.515722865
+  ll2 48.01318351858632 -4.883573621462193
+EPSG:3949
+  ll  46.872150221597146 4.348689107452911
+  en  1802876.0001255975 7964286.625010995
+  ll2 46.872150221597174 4.348689107452911
+EPSG:3950
+  ll  50.19462980520668 5.1422282362682346
+  en  1852934.6091613166 9223837.40459054
+  ll2 50.194629805206695 5.142228236268235
+EPSG:4258
+  ll  -80.84968402882117 -168.05419412355394
+  en  -168.05419412355394 -80.84968402882117
+  ll2 -80.84968402882117 -168.05419412355394
+EPSG:4326
+  ll  -68.84284749203007 130.32510320615967
+  en  130.32510320615967 -68.84284749203007
+  ll2 -68.84284749203007 130.32510320615967
diff --git a/data_nodist/projection-regression-test-data.csv b/data_nodist/projection-regression-test-data.csv
index fde455a..b4c2cb9 100644
--- a/data_nodist/projection-regression-test-data.csv
+++ b/data_nodist/projection-regression-test-data.csv
@@ -1,686 +1,726 @@
 # Data for test/unit/org/openstreetmap/josm/data/projection/ProjectionRegressionTest.java
 # Format: 1. Projection code; 2. lat/lon; 3. lat/lon projected -> east/north; 4. east/north (3.) inverse projected
-EPSG:4326
-  ll  -7.087221454568692 41.43170492812351
-  en  41.43170492812351 -7.087221454568692
-  ll2 -7.087221454568692 41.43170492812351
-EPSG:3857
-  ll  26.19321910736396 -57.05540747306637
-  en  -6351378.906904483 3023031.7049287064
-  ll2 26.19321910736395 -57.05540747306636
-EPSG:32601
-  ll  35.30468974675124 -181.75048187801644
-  en  67958.20646357589 3917197.812559492
-  ll2 35.304689746452496 -181.75048187860767
-EPSG:32701
-  ll  -29.00158099669585 -176.06257492764095
-  en  591305.9239689747 6791477.062909814
-  ll2 -29.001580996697747 -176.06257492764087
-EPSG:32602
-  ll  -0.35895685791257925 -175.75420623162898
-  en  -29625.972570086014 -39813.425707889146
-  ll2 -0.3589568579093727 -175.75420623022703
-EPSG:32702
-  ll  -83.61115414945169 -167.84722307361665
-  en  539148.6502865502 714244.7350888532
-  ll2 -83.61115414944909 -167.84722307364663
-EPSG:32603
-  ll  69.06942592353653 -164.25619547568132
-  en  529653.423074742 7662283.255640146
-  ll2 69.06942592353752 -164.2561954756813
-EPSG:32703
-  ll  -59.67977504854512 -165.75611289241155
-  en  457419.4744487591 3384008.1251201406
-  ll2 -59.67977504854674 -165.75611289241158
-EPSG:32604
-  ll  68.49291330851102 -162.96491579603722
-  en  337874.41252150084 7603043.066426898
-  ll2 68.49291330842262 -162.96491579584512
-EPSG:32704
-  ll  -44.74896637041389 -154.13571225132324
-  en  885055.000033729 5033414.625188409
-  ll2 -44.74896636985849 -154.13571225126154
-EPSG:32605
-  ll  70.45567827510386 -154.8711613318192
-  en  430146.7851750106 7817765.523685955
-  ll2 70.45567827510365 -154.87116133181905
-EPSG:32705
-  ll  -4.570782032538887 -155.6804518141318
-  en  202567.24068296672 9494225.759775288
-  ll2 -4.570782032537401 -155.68045181407837
-EPSG:32606
-  ll  45.0472445968384 -147.48643385071935
-  en  461693.09169689566 4988313.776961381
-  ll2 45.04724459683641 -147.48643385071935
-EPSG:32706
-  ll  -55.61672629832347 -144.3508810047789
-  en  666829.6102985529 3833392.573244692
-  ll2 -55.61672629830789 -144.35088100477645
-EPSG:32607
-  ll  17.160888392541953 -136.88735017825638
-  en  937701.0944171889 1901994.1783050983
-  ll2 17.1608883925055 -136.88735017834057
-EPSG:32707
-  ll  -0.22277876804946573 -136.6505910806773
-  en  984445.3083006871 9975304.651945615
-  ll2 -0.22277876804841829 -136.65059108151155
-EPSG:32608
-  ll  17.082700048931713 -138.83952009347482
-  en  91233.83062316518 1892731.362054299
-  ll2 17.082700048910105 -138.8395200934112
-EPSG:32708
-  ll  -2.768962687806777 -135.91033889187207
-  en  398815.28724407975 9693905.200367318
-  ll2 -2.768962687805876 -135.91033889187185
-EPSG:32609
-  ll  32.88791124498886 -124.7743273825516
-  en  895391.2108967202 3646786.763057612
-  ll2 32.88791124486649 -124.7743273822095
-EPSG:32709
-  ll  -32.79190171964473 -131.727811570545
-  en  244542.49842715668 6368487.503688801
-  ll2 -32.79190171963808 -131.7278115705747
-EPSG:32610
-  ll  15.621043862710906 -127.89205445312605
-  en  -24932.886804628302 1733063.1626414557
-  ll2 15.621043862587436 -127.89205445274152
-EPSG:32710
-  ll  1.5712020890239131 -124.21146729170505
-  en  365234.2722858875 1.0173704546361338E7
-  ll2 1.5712020890233884 -124.21146729170411
-EPSG:32611
-  ll  10.73641510533119 -112.16478744764923
-  en  1029269.7699246185 1191002.7127373696
-  ll2 10.73641510524071 -112.16478744856084
-EPSG:32711
-  ll  -41.091261924884776 -120.17689123197003
-  en  233168.6164003252 5446247.135223156
-  ll2 -41.09126192484649 -120.17689123202507
-EPSG:32612
-  ll  61.77560053459669 -114.5125390548194
-  en  314735.1980824949 6854188.166002769
-  ll2 61.77560053452742 -114.51253905477127
-EPSG:32712
-  ll  -79.76744100986106 -115.94410343190378
-  en  402063.9138540749 1140210.1029349882
-  ll2 -79.76744100981378 -115.94410343026465
-EPSG:32613
-  ll  4.7583779488046805 -107.92602632992818
-  en  175381.12258364592 526643.9142125123
-  ll2 4.758377948802733 -107.92602632984342
-EPSG:32713
-  ll  -10.850887170003276 -108.88425627320359
-  en  75152.58517323522 8797793.856423587
-  ll2 -10.85088716998492 -108.88425627294212
-EPSG:32614
-  ll  14.263757165950743 -100.80954124472483
-  en  304782.4591083076 1577656.5830076581
-  ll2 14.26375716594981 -100.80954124472157
-EPSG:32714
-  ll  -56.89459290929925 -97.364159691813
-  en  599649.1533353492 3693155.667478282
-  ll2 -56.89459290929932 -97.36415969181257
-EPSG:32615
-  ll  84.67761930424092 -95.31735150114109
-  en  476007.39052546234 9404225.272890447
-  ll2 84.67761930423927 -95.31735150113857
-EPSG:32715
-  ll  -15.188620247220271 -96.23707027363224
-  en  152136.94772601099 8318235.034911122
-  ll2 -15.188620247214823 -96.23707027358184
-EPSG:32616
-  ll  72.583548496096 -84.95707014904738
-  en  568238.7416437431 8055185.317495109
-  ll2 72.58354849609479 -84.95707014904791
-EPSG:32716
-  ll  -4.559807376181936 -82.52818257741919
-  en  996538.1905094216 9494450.775022857
-  ll2 -4.559807376156723 -82.52818257832048
-EPSG:32617
-  ll  58.773416508274885 -79.23342848764487
-  en  602152.1264258481 6516169.07728455
-  ll2 58.77341650827502 -79.23342848764443
-EPSG:32717
-  ll  -66.29192836668584 -83.46326129024452
-  en  389503.5113214161 2645374.949496709
-  ll2 -66.2919283666812 -83.46326129024257
-EPSG:32618
-  ll  0.8542824171250176 -70.60589399441409
-  en  989382.9848638991 94704.1521896124
-  ll2 0.854282417120703 -70.6058939952968
-EPSG:32718
-  ll  -2.5647882790401297 -76.48884831326323
-  en  334474.62998039776 9716415.67820614
-  ll2 -2.5647882790393166 -76.48884831326058
-EPSG:32619
-  ll  9.928164458825613 -66.53356619660251
-  en  770448.3262748269 1098474.206981794
-  ll2 9.928164458823826 -66.533566196628
-EPSG:32719
-  ll  -3.3106740144730935 -68.43248658691562
-  en  563046.3761068006 9634048.929625366
-  ll2 -3.3106740144720264 -68.43248658691563
-EPSG:32620
-  ll  -2.6787491025025547 -66.88079230367741
-  en  68302.71810571582 -296768.5025927464
-  ll2 -2.678749102496994 -66.88079230325388
-EPSG:32720
-  ll  -69.88660504305992 -58.451395274860495
-  en  674428.974179743 2240266.5274605397
-  ll2 -69.88660504288639 -58.451395275542424
-EPSG:32621
-  ll  69.83911306601517 -54.4569378254068
-  en  597795.3401803295 7749969.356378063
-  ll2 69.83911306601044 -54.4569378254102
-EPSG:32721
-  ll  -1.460807694037996 -56.918034017934815
-  en  509117.82030811213 9838536.34068649
-  ll2 -1.460807694037499 -56.918034017934815
-EPSG:32622
-  ll  14.524484069634685 -53.96374810803576
-  en  180556.3469154662 1607806.3026925516
-  ll2 14.52448406963183 -53.96374810799876
-EPSG:32722
-  ll  -67.51187256863244 -49.8909954222962
-  en  547334.5777219022 2511132.649487271
-  ll2 -67.5118725686338 -49.89099542229613
-EPSG:32623
-  ll  16.394157590092313 -42.12374249522621
-  en  807234.0075202532 1814713.5629615434
-  ll2 16.3941575900903 -42.123742495247065
-EPSG:32723
-  ll  -37.33901138489274 -46.319661481385886
-  en  383102.3012525303 5866702.311873849
-  ll2 -37.33901138489222 -46.3196614813865
-EPSG:32624
-  ll  5.131580338571972 -39.26307503457069
-  en  470842.78426743025 567215.00374571
-  ll2 5.131580338570435 -39.26307503457069
-EPSG:32724
-  ll  -64.98185873306474 -42.631062127293355
-  en  328728.8038014539 2788647.117090909
-  ll2 -64.98185873299518 -42.631062127215536
-EPSG:32625
-  ll  -0.7883094164596285 -30.122300530621676
-  en  820321.3553729916 -87242.6746455976
-  ll2 -0.7883094164592921 -30.12230053070564
-EPSG:32725
-  ll  -65.44826790805924 -36.847373771828195
-  en  321704.4754237144 2736137.6100584166
-  ll2 -65.44826790796357 -36.847373771693476
-EPSG:32626
-  ll  58.43458636013028 -29.168484112078048
-  en  373392.93024697975 6479137.419357916
-  ll2 58.43458636012712 -29.168484112078875
-EPSG:32726
-  ll  -45.64851344048113 -31.882495362328466
-  en  119560.58075143833 4933398.9237327585
-  ll2 -45.64851343989748 -31.88249536231209
-EPSG:32627
-  ll  8.344532201175449 -23.182089463285656
-  en  259685.6891659215 923051.0956246062
-  ll2 8.344532201173756 -23.182089463270486
-EPSG:32727
-  ll  -50.934366256586614 -25.166137353819305
-  en  207304.56798461726 4349205.018263729
-  ll2 -50.93436625633735 -25.166137353769805
-EPSG:32628
-  ll  22.510955722354655 -11.39208694243174
-  en  871237.6024480207 2493863.447968263
-  ll2 22.51095572233715 -11.392086942377526
-EPSG:32728
-  ll  -75.6414574413936 -19.243865220370584
-  en  382615.2732716046 1600607.7105868515
-  ll2 -75.64145744134245 -19.24386521997399
-EPSG:32629
-  ll  21.147897974547682 -10.932715320979701
-  en  299305.3797185818 2339737.5836034226
-  ll2 21.147897974548883 -10.932715320979792
-EPSG:32729
-  ll  -83.5333650193571 -5.501531193633692
-  en  543962.835055189 722665.361454945
-  ll2 -83.53336501935372 -5.501531193708958
-EPSG:32630
-  ll  7.0485574964722595 -2.895336653090574
-  en  511558.9813362481 779118.0296877392
-  ll2 7.048557496470399 -2.8953366530905744
-EPSG:32730
-  ll  -81.54589940598518 -0.6625327966681755
-  en  538355.0358692394 945086.5607411675
-  ll2 -81.5458994059829 -0.6625327966706558
-EPSG:32631
-  ll  62.31144897764639 -1.7488227034434083
-  en  253972.6113974089 6917912.226969319
-  ll2 62.31144897723166 -1.7488227026127516
-EPSG:32731
-  ll  -77.7299649478657 6.793662551026102
-  en  589941.1445311456 1368855.4457779005
-  ll2 -77.72996494784715 6.793662550878116
-EPSG:32632
-  ll  11.834748738967427 11.598093592769366
-  en  783086.673635305 1309597.582045318
-  ll2 11.834748738965645 11.598093592741604
-EPSG:32732
-  ll  -1.791491309390267 5.643292386980017
-  en  126449.06323080737 9801643.353370322
-  ll2 -1.7914913093887788 5.643292387171931
-EPSG:32633
-  ll  42.05539689126687 15.319058068358773
-  en  526400.7140049142 4655976.147280654
-  ll2 42.05539689126517 15.319058068358764
-EPSG:32733
-  ll  -4.126836934079179 14.21193297521501
-  en  412530.97644885455 9543809.318915792
-  ll2 -4.126836934077884 14.211932975215113
-EPSG:32634
-  ll  75.90951295643045 25.503495199048984
-  en  622276.0812525111 8429752.16628064
-  ll2 75.90951295636204 25.503495198369787
-EPSG:32734
-  ll  3.2478852471029853 16.30155670183659
-  en  -22571.106634815456 1.0360208764095124E7
-  ll2 3.247885247076826 16.301556703090707
-EPSG:32635
-  ll  47.49067536542698 25.527726208112252
-  en  389099.4234549984 5260743.8958150195
-  ll2 47.49067536542474 25.527726208111613
-EPSG:32735
-  ll  -67.02488461225471 23.602574863927025
-  en  352075.73642084474 2561806.4975045808
-  ll2 -67.02488461221535 23.602574863972343
-EPSG:32636
-  ll  2.3826611804187845 35.69036984079036
-  en  799224.052045565 263649.3963221862
-  ll2 2.3826611804179456 35.69036984073283
-EPSG:32736
-  ll  -42.55662303150512 29.942428252202173
-  en  248987.61723446447 5283887.580592804
-  ll2 -42.55662303147199 29.942428252161324
-EPSG:32637
-  ll  52.14316359823634 35.33858849767755
-  en  249486.75996839185 5783285.072364062
-  ll2 52.14316359812051 35.33858849768192
-EPSG:32737
-  ll  -63.21444761968792 35.222287816138596
-  en  310135.9849165189 2984926.8570488933
-  ll2 -63.214447619588334 35.22228781624288
-EPSG:32638
-  ll  53.91509364067411 42.2117397712837
-  en  316881.19957743154 5977677.047491307
-  ll2 53.915093640651726 42.21173977127907
-EPSG:32738
-  ll  -33.61049536194267 49.3934280355533
-  en  907721.7528865209 6272366.919585204
-  ll2 -33.61049536177813 49.39342803597181
-EPSG:32639
-  ll  78.6419869416514 46.228999725737076
-  en  395220.30455138447 8734297.00471091
-  ll2 78.64198694159873 46.22899972691323
-EPSG:32739
-  ll  -36.97742607037574 49.32483640492937
-  en  350900.55360484595 5906320.568081439
-  ll2 -36.97742607037497 49.324836404927225
-EPSG:32640
-  ll  53.864121366142705 57.44751774032813
-  en  529429.9386809022 5968496.735426065
-  ll2 53.86412136614262 57.44751774032813
-EPSG:32740
-  ll  -78.828450880352 53.91362023885953
-  en  433274.5310192385 1247408.597646758
-  ll2 -78.82845088034634 53.913620238883254
-EPSG:32641
-  ll  49.571868382578565 60.41766515903435
-  en  313303.34799034183 5494234.471211336
-  ll2 49.57186838256323 60.41766515902558
-EPSG:32741
-  ll  -26.30036312196733 65.289773385337
-  en  728606.5155660608 7089027.454681892
-  ll2 -26.300363121968427 65.28977338534429
-EPSG:32642
-  ll  -1.9071382046033127 69.6619425586165
-  en  573618.7511049965 -210811.0083199154
-  ll2 -1.9071382046026717 69.66194255861646
-EPSG:32742
-  ll  -46.57798418816586 66.46686755703854
-  en  305909.44786115893 4838613.998469358
-  ll2 -46.577984188152286 66.46686755702721
-EPSG:32643
-  ll  1.4895490042363466 73.50410601478126
-  en  333581.31480363844 164696.77435250996
-  ll2 1.4895490042358657 73.50410601478401
-EPSG:32743
-  ll  -25.298456802256545 78.290225577417
-  en  831325.5755857098 7197935.587045648
-  ll2 -25.298456802245934 78.29022557747085
-EPSG:32644
-  ll  62.44367553939567 85.9750751673437
-  en  756598.954905078 6933493.141721524
-  ll2 62.44367553885303 85.97507516606653
-EPSG:32744
-  ll  -23.333853962130412 81.03414728671824
-  en  503490.800754981 7419521.505624639
-  ll2 -23.33385396213198 81.03414728671824
-EPSG:32645
-  ll  77.10426871059683 89.0221872636809
-  en  550370.2039676631 8559275.344482148
-  ll2 77.10426871059488 89.02218726368017
-EPSG:32745
-  ll  -27.850501765768136 88.49974130692067
-  en  647670.9268986753 6918455.120880485
-  ll2 -27.85050176577014 88.49974130692154
-EPSG:32646
-  ll  50.87569190579864 89.74835752271836
-  en  271249.3586776806 5641039.535640001
-  ll2 50.87569190574126 89.74835752270417
-EPSG:32746
-  ll  -21.043491771413862 94.96493214411353
-  en  704183.7578679286 7671781.457049133
-  ll2 -21.04349177141502 94.96493214411359
-EPSG:32647
-  ll  70.62231324887725 99.90770843411856
-  en  533612.0813866678 7835525.490742478
-  ll2 70.62231324887772 99.90770843411859
-EPSG:32747
-  ll  -17.444781767557416 97.838202011294
-  en  376622.8914274465 8070864.873775644
-  ll2 -17.444781767557274 97.8382020112942
-EPSG:32648
-  ll  39.26637557561634 107.38423392284906
-  en  705690.5819331672 4349046.83007862
-  ll2 39.26637557560961 107.38423392286235
-EPSG:32748
-  ll  -58.2033639588618 101.36763036809408
-  en  286575.74435410445 3542895.423578527
-  ll2 -58.203363958762644 101.36763036814246
-EPSG:32649
-  ll  11.255609425170523 111.88005555487531
-  en  596060.37945682 1244386.5306496648
-  ll2 11.255609425168716 111.88005555487518
-EPSG:32749
-  ll  -38.23589206710369 109.25679480724837
-  en  347437.22738472256 5766575.122088731
-  ll2 -38.23589206710225 109.25679480724578
-EPSG:32650
-  ll  9.877161924846341 119.53983649063838
-  en  778545.0254093792 1092890.6707807586
-  ll2 9.877161924844472 119.53983649060855
-EPSG:32750
-  ll  -29.646256411547412 116.5390917394596
-  en  455389.40541231557 6720322.495279071
-  ll2 -29.64625641154921 116.53909173945958
-EPSG:32651
-  ll  29.894404052484198 123.73791699307937
-  en  571246.6122429472 3307313.233021797
-  ll2 29.894404052485946 123.73791699307941
-EPSG:32751
-  ll  -32.31249913837224 123.5620478825476
-  en  552907.9443416377 6424786.563103266
-  ll2 -32.31249913837346 123.56204788254762
-EPSG:32652
-  ll  51.483168367165725 131.7547299698076
-  en  691267.2942592341 5707156.079357853
-  ll2 51.48316836714398 131.75472996981594
-EPSG:32752
-  ll  -40.03951775988635 127.43317318342925
-  en  366330.3564929392 5566680.742924484
-  ll2 -40.03951775988467 127.43317318342785
-EPSG:32653
-  ll  3.9439937741275237 139.56906177178473
-  en  1007763.0974047978 437331.50269813027
-  ll2 3.9439937741018105 139.5690617707412
-EPSG:32753
-  ll  -28.176037015492348 138.7789296805875
-  en  871098.4449456041 6877512.944383415
-  ll2 -28.176037015452554 138.77892968074894
-EPSG:32654
-  ll  0.16694081399375094 139.49272157099904
-  en  332258.8768147535 18458.406171513318
-  ll2 0.16694081399369648 139.49272157100194
-EPSG:32754
-  ll  -76.09420937279235 144.16836879822267
-  en  584959.5966797009 1552021.5295583569
-  ll2 -76.09420937278291 144.16836879819374
-EPSG:32655
-  ll  15.325514479625792 147.8741788025552
-  en  593840.2220569488 1694519.0743215398
-  ll2 15.325514479624909 147.87417880255512
-EPSG:32755
-  ll  -5.430354355649115 147.0530080779711
-  en  505872.17624536785 9399764.410398081
-  ll2 -5.430354355647516 147.0530080779711
-EPSG:32656
-  ll  5.776293589970747 152.597733111241
-  en  455463.1790096139 638491.4093867843
-  ll2 5.776293589969082 152.597733111241
-EPSG:32756
-  ll  -52.48522451023355 152.57450200005235
-  en  471106.27600235335 4184906.4029197395
-  ll2 -52.48522451023299 152.57450200005235
-EPSG:32657
-  ll  46.64079768923685 162.60478038581513
-  en  775876.5142921583 5171562.354304005
-  ll2 46.6407976891373 162.60478038586604
-EPSG:32757
-  ll  -20.68227265660569 154.09167529202733
-  en  -11660.993969266012 7705261.8022987265
-  ll2 -20.682272656454828 154.09167529182264
-EPSG:32658
-  ll  -0.9538168752974308 164.16373403116563
-  en  406954.01883056597 -105436.825076515
-  ll2 -0.9538168752971059 164.16373403116577
-EPSG:32758
-  ll  -6.482322318456696 161.77847911397538
-  en  143617.7405419257 9282345.981167397
-  ll2 -6.48232231845288 161.77847911410754
-EPSG:32659
-  ll  40.50129189541295 171.1151678182983
-  en  509758.4272200559 4483404.501649895
-  ll2 40.501291895411576 171.1151678182983
-EPSG:32759
-  ll  -9.653111284693267 166.1444317382442
-  en  -33309.996839536005 8929144.290482178
-  ll2 -9.653111284606696 166.1444317392922
-EPSG:32660
-  ll  84.38466705329412 178.8187390897748
-  en  519865.4438068825 9371350.999824923
-  ll2 84.38466705329245 178.81873908977406
-EPSG:32760
-  ll  -36.29211488935783 181.82910716731914
-  en  933779.944968744 5972815.905636307
-  ll2 -36.29211488900613 181.82910716792168
-EPSG:31370
-  ll  49.91513996934379 3.0892264075922404
-  en  58108.251968638695 67871.94610605389
-  ll2 49.91513997291573 3.0892264054277314
-EPSG:3812
-  ll  50.76787953358437 3.4513353977071453
-  en  585284.6677650047 662323.5758590293
-  ll2 50.76787953358439 3.451335397707146
-EPSG:21781
-  ll  46.582471410091934 8.159223152110604
-  en  655231.0208778976 159275.39184032555
-  ll2 46.58247142005926 8.159223160343661
-EPSG:31466
-  ll  7.0210401440287065 6.5142293675331056
-  en  2556811.486749014 776341.9609297712
-  ll2 7.021040144026878 6.5142293675330905
-EPSG:31467
-  ll  49.4988750014639 7.261117510799364
-  en  3374117.1277635116 5486123.243966412
-  ll2 49.498875001461215 7.261117510798085
-EPSG:31468
-  ll  48.209523046432196 13.141810876019548
-  en  4584969.350196248 5341912.844584694
-  ll2 48.20952304643043 13.14181087601969
-EPSG:31469
-  ll  75.71474879775388 16.230800026412393
-  en  5533907.888998117 8406162.271952605
-  ll2 75.7147487977527 16.230800026412293
-EPSG:3301
-  ll  59.493759099912154 27.525338967200614
-  en  699626.8833689764 6600366.426436952
-  ll2 59.49375909991213 27.525338967200614
-EPSG:27561
-  ll  48.687023294540744 9.13470536591202
-  en  1099861.4328694288 132165.3475888506
-  ll2 48.687023294540765 9.134705365912021
-EPSG:27562
-  ll  47.083336187611536 -1.6746579886431774
-  en  295565.17384739226 239272.03526596428
-  ll2 47.08333618761155 -1.6746579886431774
-EPSG:27563
-  ll  46.443136133672226 5.992820527372115
-  en  881070.7805340262 466693.7656533603
-  ll2 46.44313613367226 5.992820527372113
-EPSG:27564
-  ll  43.42400252536329 0.5163786716368639
-  en  -147178.2200372536 327298.1840058803
-  ll2 43.42400252536333 0.5163786716368636
-EPSG:2154
-  ll  50.02689509732728 -4.49984483215602
-  en  162883.97727507062 7017576.164756147
-  ll2 50.0268950973273 -4.499844832156021
-EPSG:3942
-  ll  42.50224953559769 -0.5066786018577263
-  en  1411858.985481917 1261685.9957595589
-  ll2 42.50224953559774 -0.5066786018577272
-EPSG:3943
-  ll  43.90555462555216 9.09689182480521
-  en  2189372.9132868364 2318369.8170038997
-  ll2 43.9055546255522 9.096891824805208
-EPSG:3944
-  ll  43.19615820273569 -2.2408194587228754
-  en  1274301.655593946 3124223.7388553144
-  ll2 43.19615820273572 -2.240819458722875
-EPSG:3945
-  ll  42.57364172140781 -4.367440068101999
-  en  1095466.1808782574 3957858.4306936576
-  ll2 42.57364172140783 -4.367440068101998
-EPSG:3946
-  ll  46.450766039756 -1.5829952343218343
-  en  1348093.5108619956 5260228.6829278115
-  ll2 46.450766039756004 -1.5829952343218343
-EPSG:3947
-  ll  45.274573855216566 8.148993756717044
-  en  2103893.8135509207 6021477.631196574
-  ll2 45.27457385521657 8.148993756717044
-EPSG:3948
-  ll  47.57690494420086 8.633366759947714
-  en  2123416.1310845516 7168437.373686953
-  ll2 47.576904944200855 8.633366759947712
-EPSG:3949
-  ll  47.36655471156381 -1.410864163556286
-  en  1366910.6256544283 8028041.335254104
-  ll2 47.36655471156381 -1.410864163556286
-EPSG:3950
-  ll  48.0634969752751 -5.238953399372484
-  en  1086868.313881684 9018423.494770935
-  ll2 48.06349697527511 -5.23895339937248
-EPSG:2969
-  ll  18.09195682909748 -62.90557198327498
-  en  509756.870848181 2000799.1724028364
-  ll2 18.0919568043076 -62.90557196864032
-EPSG:2970
-  ll  16.041843969107557 -61.20853416213802
-  en  692080.8032091985 1774695.5238623084
-  ll2 16.0418439524898 -61.20853418759283
-EPSG:2973
-  ll  14.407542336386097 -60.935843452421075
-  en  722168.211389498 1593628.3260067657
-  ll2 14.407542351752163 -60.93584343336168
-EPSG:2975
-  ll  -16.18983230787581 40.123852994258414
-  en  -1326413.3757486297 8133460.392475484
-  ll2 -16.189831743778907 40.12386116380699
-EPSG:2972
-  ll  8.207268629853019 -50.21680809669106
-  en  586265.5532873704 907296.005720186
-  ll2 8.207268629851077 -50.216808096691146
-EPSG:3059
-  ll  49.23525189671949 -54.40128360306443
-  en  -4263130.034442673 2917092.5518719126
-  ll2 50178.76820064746 246510.82413604847
-EPSG:2180
-  ll  49.52724731520737 18.27654136015328
-  en  447661.13055637287 184674.94547026977
-  ll2 49.527247315205926 18.276541360153285
-EPSG:2176
-  ll  49.64490220491846 16.279713636209475
-  en  5592415.690627584 5501713.997399415
-  ll2 49.64490220491687 16.279713636209717
-EPSG:2177
-  ll  53.90237086111341 17.70353103400919
-  en  6480514.884490048 5974630.160067949
-  ll2 53.90237086111333 17.703531034009195
-EPSG:2178
-  ll  51.28025609515727 21.516295219859636
-  en  7536021.072707665 5682953.495859991
-  ll2 51.28025609515634 21.51629521985963
-EPSG:2179
-  ll  51.812974050704796 24.579389794413864
-  en  8539953.715775384 5742250.607422158
-  ll2 51.812974050704014 24.57938979441386
-EPSG:3008
-  ll  61.864054488897295 13.084399903079879
-  en  128126.42078859449 6861850.502124558
-  ll2 61.86405448889923 13.084399903079852
-EPSG:25831
-  ll  15.703714685419541 1.9029805492944067
-  en  382450.5936273647 1736467.0083671734
-  ll2 15.703714685418815 1.9029805492946246
-EPSG:25832
-  ll  43.42381791085779 9.690565246887022
-  en  555898.5039359011 4808112.365172946
-  ll2 43.42381791085591 9.69056524688702
-EPSG:25833
-  ll  75.7892704557877 11.207180641450057
-  en  396131.7404880665 8415005.737873647
-  ll2 75.7892704557614 11.207180641594613
-EPSG:25834
-  ll  46.44885204974395 22.405231854156536
-  en  607926.6287454234 5144879.313368673
-  ll2 46.448852049741696 22.405231854157073
-EPSG:25835
-  ll  42.57574419494572 31.562543802846626
-  en  874467.6530367588 4723802.227199246
-  ll2 42.57574419459534 31.562543803062233
-EPSG:25836
-  ll  28.15042601064217 29.551501695152517
-  en  161292.70745459147 3118678.701691007
-  ll2 28.150426010621363 29.551501695058164
-EPSG:25837
-  ll  36.3487499992021 40.79948792586663
-  en  661474.4463378746 4024134.2543947804
-  ll2 36.34874999920129 40.799487925869784
-EPSG:25838
-  ll  31.188113573425966 46.337070725825676
-  en  627399.0197288111 3451219.8221930494
-  ll2 31.18811357342744 46.33707072582629
-EPSG:25830
-  ll  37.25171140290211 -2.8211874597155333
-  en  515857.4448277882 4122811.106932232
-  ll2 37.25171140290173 -2.821187459715534
-EPSG:25829
-  ll  65.82806470287636 -9.554928597345642
-  en  474644.50820229325 7300857.887810782
-  ll2 65.82806470287812 -9.55492859734568
-EPSG:25828
-  ll  47.117782320935554 -16.503525409604464
-  en  385946.0034092715 5219349.635451921
-  ll2 47.11778232093319 -16.5035254096052
-EPSG:3004
-  ll  46.42503928302209 18.74399103983138
-  en  2807677.1985695027 5148277.433652771
-  ll2 46.42503930908268 18.743991039891295
-EPSG:3003
-  ll  38.09725651416973 7.4345625019044315
-  en  1362731.716367063 4217921.7769305315
-  ll2 38.09725654133193 7.434562501902943
-EPSG:23700
-  ll  46.46561041539386 21.520339346245464
-  en  839912.6237410088 127576.65601134414
-  ll2 46.46561041643151 21.520339350984706
-EPSG:4258
-  ll  68.95423702701359 -136.7642652058481
-  en  -136.76426520584806 68.95423702701359
-  ll2 68.95423702701359 -136.76426520584806
+EPSG:2017
+  ll  41.91261175251477 -74.89278047335935
+  en  189260.30024365778 4642427.414420127
+  ll2 41.91261174028046 -74.89278047336005
+EPSG:2018
+  ll  59.44382107698691 -75.69994294027252
+  en  350184.36826232105 6591724.739567254
+  ll2 59.44382104562983 -75.69994294027248
+EPSG:2019
+  ll  59.57974571574399 -77.62068644735783
+  en  410971.157096402 6608094.3839778695
+  ll2 59.579745684323775 -77.62068644735736
+EPSG:2020
+  ll  48.70994767392709 -80.98151833777705
+  en  416539.7933200761 5397961.723702785
+  ll2 48.70994765236391 -80.98151833777635
+EPSG:2021
+  ll  44.32069045402543 -82.35101240098113
+  en  197037.10739137608 4909874.048744871
+  ll2 44.320690438377376 -82.35101240098165
+EPSG:2022
+  ll  52.974406405116596 -82.60706276272059
+  en  398360.14985010115 5872104.534202886
+  ll2 52.97440637863645 -82.60706276272029
+EPSG:2023
+  ll  48.878498193945305 -87.13823590455254
+  en  294661.5690908995 5415599.9391717985
+  ll2 48.87849817216946 -87.13823590455254
+EPSG:2024
+  ll  51.35687523407061 -90.17997605532246
+  en  292264.67001158936 5691248.591068828
+  ll2 51.35687520932802 -90.17997605532247
+EPSG:2025
+  ll  43.959735984270985 -93.91753949513763
+  en  231165.66380495718 4869292.415533371
+  ll2 43.959735969131195 -93.91753949513765
+EPSG:2026
+  ll  48.06438094907365 -94.45119612154907
+  en  420222.01031815866 5326231.939443346
+  ll2 48.0643809283388 -94.45119612154826
+EPSG:2154
+  ll  50.02689509732728 -4.49984483215602
+  en  162883.97727507062 7017576.164756147
+  ll2 50.0268950973273 -4.499844832156021
+EPSG:2176
+  ll  49.64490220491846 16.279713636209475
+  en  5592415.690627584 5501713.997399415
+  ll2 49.64490220491687 16.279713636209717
+EPSG:2177
+  ll  53.90237086111341 17.70353103400919
+  en  6480514.884490048 5974630.160067949
+  ll2 53.90237086111333 17.703531034009195
+EPSG:2178
+  ll  51.28025609515727 21.516295219859636
+  en  7536021.072707665 5682953.495859991
+  ll2 51.28025609515634 21.51629521985963
+EPSG:21781
+  ll  46.582471410091934 8.159223152110604
+  en  655231.0208778976 159275.39184032555
+  ll2 46.58247142005926 8.159223160343661
+EPSG:2179
+  ll  51.812974050704796 24.579389794413864
+  en  8539953.715775384 5742250.607422158
+  ll2 51.812974050704014 24.57938979441386
+EPSG:2180
+  ll  49.52724731520737 18.27654136015328
+  en  447661.13055637287 184674.94547026977
+  ll2 49.527247315205926 18.276541360153285
+EPSG:23700
+  ll  46.46561041539386 21.520339346245464
+  en  839912.6237409572 127576.65601458694
+  ll2 46.46561041643151 21.520339350984703
+EPSG:25828
+  ll  47.117782320935554 -16.503525409604464
+  en  385946.0034092715 5219349.635451921
+  ll2 47.11778232093319 -16.5035254096052
+EPSG:25829
+  ll  65.82806470287636 -9.554928597345642
+  en  474644.50820229325 7300857.887810782
+  ll2 65.82806470287812 -9.55492859734568
+EPSG:25830
+  ll  37.25171140290211 -2.8211874597155333
+  en  515857.4448277882 4122811.106932232
+  ll2 37.25171140290173 -2.821187459715534
+EPSG:25831
+  ll  15.703714685419541 1.9029805492944067
+  en  382450.5936273647 1736467.0083671734
+  ll2 15.703714685418815 1.9029805492946246
+EPSG:25832
+  ll  43.42381791085779 9.690565246887022
+  en  555898.5039359011 4808112.365172946
+  ll2 43.42381791085591 9.69056524688702
+EPSG:25833
+  ll  75.7892704557877 11.207180641450057
+  en  396131.7404880665 8415005.737873647
+  ll2 75.7892704557614 11.207180641594613
+EPSG:25834
+  ll  46.44885204974395 22.405231854156536
+  en  607926.6287454234 5144879.313368673
+  ll2 46.448852049741696 22.405231854157073
+EPSG:25835
+  ll  42.57574419494572 31.562543802846626
+  en  874467.6530367588 4723802.227199246
+  ll2 42.57574419459534 31.562543803062233
+EPSG:25836
+  ll  28.15042601064217 29.551501695152517
+  en  161292.70745459147 3118678.701691007
+  ll2 28.150426010621363 29.551501695058164
+EPSG:25837
+  ll  36.3487499992021 40.79948792586663
+  en  661474.4463378746 4024134.2543947804
+  ll2 36.34874999920129 40.799487925869784
+EPSG:25838
+  ll  31.188113573425966 46.337070725825676
+  en  627399.0197288111 3451219.8221930494
+  ll2 31.18811357342744 46.33707072582629
+EPSG:27561
+  ll  48.687023294540744 9.13470536591202
+  en  1099861.4328694288 132165.3475888506
+  ll2 48.687023294540765 9.134705365912021
+EPSG:27562
+  ll  47.083336187611536 -1.6746579886431774
+  en  295565.17384739226 239272.03526596428
+  ll2 47.08333618761155 -1.6746579886431774
+EPSG:27563
+  ll  46.443136133672226 5.992820527372115
+  en  881070.7805340262 466693.7656533603
+  ll2 46.44313613367226 5.992820527372113
+EPSG:27564
+  ll  43.42400252536329 0.5163786716368639
+  en  -147178.2200372536 327298.1840058803
+  ll2 43.42400252536333 0.5163786716368636
+EPSG:2969
+  ll  18.09195682909748 -62.90557198327498
+  en  509756.870848181 2000799.1724028364
+  ll2 18.0919568043076 -62.90557196864032
+EPSG:2970
+  ll  16.041843969107557 -61.20853416213802
+  en  692080.8032091985 1774695.5238623084
+  ll2 16.0418439524898 -61.20853418759283
+EPSG:2972
+  ll  8.207268629853019 -50.21680809669106
+  en  586265.5532873704 907296.005720186
+  ll2 8.207268629851077 -50.216808096691146
+EPSG:2973
+  ll  14.407542336386097 -60.935843452421075
+  en  722168.211389498 1593628.3260067657
+  ll2 14.407542351752163 -60.93584343336168
+EPSG:2975
+  ll  -16.18983230787581 40.123852994258414
+  en  -1326413.3757486297 8133460.392475484
+  ll2 -16.189831743778907 40.12386116380699
+EPSG:3003
+  ll  38.09725651416973 7.4345625019044315
+  en  1362731.716367063 4217921.7769305315
+  ll2 38.09725654133193 7.434562501902943
+EPSG:3004
+  ll  46.42503928302209 18.74399103983138
+  en  2807677.1985695027 5148277.433652771
+  ll2 46.42503930908268 18.743991039891295
+EPSG:3008
+  ll  61.864054488897295 13.084399903079879
+  en  128126.42078859449 6861850.502124558
+  ll2 61.86405448889923 13.084399903079852
+EPSG:3059
+  ll  49.23525189671949 -54.40128360306443
+  en  -4263130.034442673 2917092.5518719126
+  ll2 50178.76820064746 246510.82413604847
+EPSG:31370
+  ll  49.91513996934379 3.0892264075922404
+  en  58108.251968638695 67871.94610605389
+  ll2 49.91513997291573 3.0892264054277314
+EPSG:31466
+  ll  7.0210401440287065 6.5142293675331056
+  en  2556811.486749014 776341.9609297712
+  ll2 7.021040144026878 6.5142293675330905
+EPSG:31467
+  ll  49.4988750014639 7.261117510799364
+  en  3374117.1277635116 5486123.243966412
+  ll2 49.498875001461215 7.261117510798085
+EPSG:31468
+  ll  48.209523046432196 13.141810876019548
+  en  4584969.350196248 5341912.844584694
+  ll2 48.20952304643043 13.14181087601969
+EPSG:31469
+  ll  75.71474879775388 16.230800026412393
+  en  5533907.888998117 8406162.271952605
+  ll2 75.7147487977527 16.230800026412293
+EPSG:32601
+  ll  35.30468974675124 -181.75048187801644
+  en  67958.20646357589 3917197.812559492
+  ll2 35.304689746452496 -181.75048187860767
+EPSG:32602
+  ll  -0.35895685791257925 -175.75420623162898
+  en  -29625.972570086014 -39813.425707889146
+  ll2 -0.3589568579093727 -175.75420623022703
+EPSG:32603
+  ll  69.06942592353653 -164.25619547568132
+  en  529653.423074742 7662283.255640146
+  ll2 69.06942592353752 -164.2561954756813
+EPSG:32604
+  ll  68.49291330851102 -162.96491579603722
+  en  337874.41252150084 7603043.066426898
+  ll2 68.49291330842262 -162.96491579584512
+EPSG:32605
+  ll  70.45567827510386 -154.8711613318192
+  en  430146.7851750106 7817765.523685955
+  ll2 70.45567827510365 -154.87116133181905
+EPSG:32606
+  ll  45.0472445968384 -147.48643385071935
+  en  461693.09169689566 4988313.776961381
+  ll2 45.04724459683641 -147.48643385071935
+EPSG:32607
+  ll  17.160888392541953 -136.88735017825638
+  en  937701.0944171889 1901994.1783050983
+  ll2 17.1608883925055 -136.88735017834057
+EPSG:32608
+  ll  17.082700048931713 -138.83952009347482
+  en  91233.83062316518 1892731.362054299
+  ll2 17.082700048910105 -138.8395200934112
+EPSG:32609
+  ll  32.88791124498886 -124.7743273825516
+  en  895391.2108967202 3646786.763057612
+  ll2 32.88791124486649 -124.7743273822095
+EPSG:32610
+  ll  15.621043862710906 -127.89205445312605
+  en  -24932.886804628302 1733063.1626414557
+  ll2 15.621043862587436 -127.89205445274152
+EPSG:32611
+  ll  10.73641510533119 -112.16478744764923
+  en  1029269.7699246185 1191002.7127373696
+  ll2 10.73641510524071 -112.16478744856084
+EPSG:32612
+  ll  61.77560053459669 -114.5125390548194
+  en  314735.1980824949 6854188.166002769
+  ll2 61.77560053452742 -114.51253905477127
+EPSG:32613
+  ll  4.7583779488046805 -107.92602632992818
+  en  175381.12258364592 526643.9142125123
+  ll2 4.758377948802733 -107.92602632984342
+EPSG:32614
+  ll  14.263757165950743 -100.80954124472483
+  en  304782.4591083076 1577656.5830076581
+  ll2 14.26375716594981 -100.80954124472157
+EPSG:32615
+  ll  84.67761930424092 -95.31735150114109
+  en  476007.39052546234 9404225.272890447
+  ll2 84.67761930423927 -95.31735150113857
+EPSG:32616
+  ll  72.583548496096 -84.95707014904738
+  en  568238.7416437431 8055185.317495109
+  ll2 72.58354849609479 -84.95707014904791
+EPSG:32617
+  ll  58.773416508274885 -79.23342848764487
+  en  602152.1264258481 6516169.07728455
+  ll2 58.77341650827502 -79.23342848764443
+EPSG:32618
+  ll  0.8542824171250176 -70.60589399441409
+  en  989382.9848638991 94704.1521896124
+  ll2 0.854282417120703 -70.6058939952968
+EPSG:32619
+  ll  9.928164458825613 -66.53356619660251
+  en  770448.3262748269 1098474.206981794
+  ll2 9.928164458823826 -66.533566196628
+EPSG:32620
+  ll  -2.6787491025025547 -66.88079230367741
+  en  68302.71810571582 -296768.5025927464
+  ll2 -2.678749102496994 -66.88079230325388
+EPSG:32621
+  ll  69.83911306601517 -54.4569378254068
+  en  597795.3401803295 7749969.356378063
+  ll2 69.83911306601044 -54.4569378254102
+EPSG:32622
+  ll  14.524484069634685 -53.96374810803576
+  en  180556.3469154662 1607806.3026925516
+  ll2 14.52448406963183 -53.96374810799876
+EPSG:32623
+  ll  16.394157590092313 -42.12374249522621
+  en  807234.0075202532 1814713.5629615434
+  ll2 16.3941575900903 -42.123742495247065
+EPSG:32624
+  ll  5.131580338571972 -39.26307503457069
+  en  470842.78426743025 567215.00374571
+  ll2 5.131580338570435 -39.26307503457069
+EPSG:32625
+  ll  -0.7883094164596285 -30.122300530621676
+  en  820321.3553729916 -87242.6746455976
+  ll2 -0.7883094164592921 -30.12230053070564
+EPSG:32626
+  ll  58.43458636013028 -29.168484112078048
+  en  373392.93024697975 6479137.419357916
+  ll2 58.43458636012712 -29.168484112078875
+EPSG:32627
+  ll  8.344532201175449 -23.182089463285656
+  en  259685.6891659215 923051.0956246062
+  ll2 8.344532201173756 -23.182089463270486
+EPSG:32628
+  ll  22.510955722354655 -11.39208694243174
+  en  871237.6024480207 2493863.447968263
+  ll2 22.51095572233715 -11.392086942377526
+EPSG:32629
+  ll  21.147897974547682 -10.932715320979701
+  en  299305.3797185818 2339737.5836034226
+  ll2 21.147897974548883 -10.932715320979792
+EPSG:32630
+  ll  7.0485574964722595 -2.895336653090574
+  en  511558.9813362481 779118.0296877392
+  ll2 7.048557496470399 -2.8953366530905744
+EPSG:32631
+  ll  62.31144897764639 -1.7488227034434083
+  en  253972.6113974089 6917912.226969319
+  ll2 62.31144897723166 -1.7488227026127516
+EPSG:32632
+  ll  11.834748738967427 11.598093592769366
+  en  783086.673635305 1309597.582045318
+  ll2 11.834748738965645 11.598093592741604
+EPSG:32633
+  ll  42.05539689126687 15.319058068358773
+  en  526400.7140049142 4655976.147280654
+  ll2 42.05539689126517 15.319058068358764
+EPSG:32634
+  ll  75.90951295643045 25.503495199048984
+  en  622276.0812525111 8429752.16628064
+  ll2 75.90951295636204 25.503495198369787
+EPSG:32635
+  ll  47.49067536542698 25.527726208112252
+  en  389099.4234549984 5260743.8958150195
+  ll2 47.49067536542474 25.527726208111613
+EPSG:32636
+  ll  2.3826611804187845 35.69036984079036
+  en  799224.052045565 263649.3963221862
+  ll2 2.3826611804179456 35.69036984073283
+EPSG:32637
+  ll  52.14316359823634 35.33858849767755
+  en  249486.75996839185 5783285.072364062
+  ll2 52.14316359812051 35.33858849768192
+EPSG:32638
+  ll  53.91509364067411 42.2117397712837
+  en  316881.19957743154 5977677.047491307
+  ll2 53.915093640651726 42.21173977127907
+EPSG:32639
+  ll  78.6419869416514 46.228999725737076
+  en  395220.30455138447 8734297.00471091
+  ll2 78.64198694159873 46.22899972691323
+EPSG:32640
+  ll  53.864121366142705 57.44751774032813
+  en  529429.9386809022 5968496.735426065
+  ll2 53.86412136614262 57.44751774032813
+EPSG:32641
+  ll  49.571868382578565 60.41766515903435
+  en  313303.34799034183 5494234.471211336
+  ll2 49.57186838256323 60.41766515902558
+EPSG:32642
+  ll  -1.9071382046033127 69.6619425586165
+  en  573618.7511049965 -210811.0083199154
+  ll2 -1.9071382046026717 69.66194255861646
+EPSG:32643
+  ll  1.4895490042363466 73.50410601478126
+  en  333581.31480363844 164696.77435250996
+  ll2 1.4895490042358657 73.50410601478401
+EPSG:32644
+  ll  62.44367553939567 85.9750751673437
+  en  756598.954905078 6933493.141721524
+  ll2 62.44367553885303 85.97507516606653
+EPSG:32645
+  ll  77.10426871059683 89.0221872636809
+  en  550370.2039676631 8559275.344482148
+  ll2 77.10426871059488 89.02218726368017
+EPSG:32646
+  ll  50.87569190579864 89.74835752271836
+  en  271249.3586776806 5641039.535640001
+  ll2 50.87569190574126 89.74835752270417
+EPSG:32647
+  ll  70.62231324887725 99.90770843411856
+  en  533612.0813866678 7835525.490742478
+  ll2 70.62231324887772 99.90770843411859
+EPSG:32648
+  ll  39.26637557561634 107.38423392284906
+  en  705690.5819331672 4349046.83007862
+  ll2 39.26637557560961 107.38423392286235
+EPSG:32649
+  ll  11.255609425170523 111.88005555487531
+  en  596060.37945682 1244386.5306496648
+  ll2 11.255609425168716 111.88005555487518
+EPSG:32650
+  ll  9.877161924846341 119.53983649063838
+  en  778545.0254093792 1092890.6707807586
+  ll2 9.877161924844472 119.53983649060855
+EPSG:32651
+  ll  29.894404052484198 123.73791699307937
+  en  571246.6122429472 3307313.233021797
+  ll2 29.894404052485946 123.73791699307941
+EPSG:32652
+  ll  51.483168367165725 131.7547299698076
+  en  691267.2942592341 5707156.079357853
+  ll2 51.48316836714398 131.75472996981594
+EPSG:32653
+  ll  3.9439937741275237 139.56906177178473
+  en  1007763.0974047978 437331.50269813027
+  ll2 3.9439937741018105 139.5690617707412
+EPSG:32654
+  ll  0.16694081399375094 139.49272157099904
+  en  332258.8768147535 18458.406171513318
+  ll2 0.16694081399369648 139.49272157100194
+EPSG:32655
+  ll  15.325514479625792 147.8741788025552
+  en  593840.2220569488 1694519.0743215398
+  ll2 15.325514479624909 147.87417880255512
+EPSG:32656
+  ll  5.776293589970747 152.597733111241
+  en  455463.1790096139 638491.4093867843
+  ll2 5.776293589969082 152.597733111241
+EPSG:32657
+  ll  46.64079768923685 162.60478038581513
+  en  775876.5142921583 5171562.354304005
+  ll2 46.6407976891373 162.60478038586604
+EPSG:32658
+  ll  -0.9538168752974308 164.16373403116563
+  en  406954.01883056597 -105436.825076515
+  ll2 -0.9538168752971059 164.16373403116577
+EPSG:32659
+  ll  40.50129189541295 171.1151678182983
+  en  509758.4272200559 4483404.501649895
+  ll2 40.501291895411576 171.1151678182983
+EPSG:32660
+  ll  84.38466705329412 178.8187390897748
+  en  519865.4438068825 9371350.999824923
+  ll2 84.38466705329245 178.81873908977406
+EPSG:32701
+  ll  -29.00158099669585 -176.06257492764095
+  en  591305.9239689747 6791477.062909814
+  ll2 -29.001580996697747 -176.06257492764087
+EPSG:32702
+  ll  -83.61115414945169 -167.84722307361665
+  en  539148.6502865502 714244.7350888532
+  ll2 -83.61115414944909 -167.84722307364663
+EPSG:32703
+  ll  -59.67977504854512 -165.75611289241155
+  en  457419.4744487591 3384008.1251201406
+  ll2 -59.67977504854674 -165.75611289241158
+EPSG:32704
+  ll  -44.74896637041389 -154.13571225132324
+  en  885055.000033729 5033414.625188409
+  ll2 -44.74896636985849 -154.13571225126154
+EPSG:32705
+  ll  -4.570782032538887 -155.6804518141318
+  en  202567.24068296672 9494225.759775288
+  ll2 -4.570782032537401 -155.68045181407837
+EPSG:32706
+  ll  -55.61672629832347 -144.3508810047789
+  en  666829.6102985529 3833392.573244692
+  ll2 -55.61672629830789 -144.35088100477645
+EPSG:32707
+  ll  -0.22277876804946573 -136.6505910806773
+  en  984445.3083006871 9975304.651945615
+  ll2 -0.22277876804841829 -136.65059108151155
+EPSG:32708
+  ll  -2.768962687806777 -135.91033889187207
+  en  398815.28724407975 9693905.200367318
+  ll2 -2.768962687805876 -135.91033889187185
+EPSG:32709
+  ll  -32.79190171964473 -131.727811570545
+  en  244542.49842715668 6368487.503688801
+  ll2 -32.79190171963808 -131.7278115705747
+EPSG:32710
+  ll  1.5712020890239131 -124.21146729170505
+  en  365234.2722858875 1.0173704546361338E7
+  ll2 1.5712020890233884 -124.21146729170411
+EPSG:32711
+  ll  -41.091261924884776 -120.17689123197003
+  en  233168.6164003252 5446247.135223156
+  ll2 -41.09126192484649 -120.17689123202507
+EPSG:32712
+  ll  -79.76744100986106 -115.94410343190378
+  en  402063.9138540749 1140210.1029349882
+  ll2 -79.76744100981378 -115.94410343026465
+EPSG:32713
+  ll  -10.850887170003276 -108.88425627320359
+  en  75152.58517323522 8797793.856423587
+  ll2 -10.85088716998492 -108.88425627294212
+EPSG:32714
+  ll  -56.89459290929925 -97.364159691813
+  en  599649.1533353492 3693155.667478282
+  ll2 -56.89459290929932 -97.36415969181257
+EPSG:32715
+  ll  -15.188620247220271 -96.23707027363224
+  en  152136.94772601099 8318235.034911122
+  ll2 -15.188620247214823 -96.23707027358184
+EPSG:32716
+  ll  -4.559807376181936 -82.52818257741919
+  en  996538.1905094216 9494450.775022857
+  ll2 -4.559807376156723 -82.52818257832048
+EPSG:32717
+  ll  -66.29192836668584 -83.46326129024452
+  en  389503.5113214161 2645374.949496709
+  ll2 -66.2919283666812 -83.46326129024257
+EPSG:32718
+  ll  -2.5647882790401297 -76.48884831326323
+  en  334474.62998039776 9716415.67820614
+  ll2 -2.5647882790393166 -76.48884831326058
+EPSG:32719
+  ll  -3.3106740144730935 -68.43248658691562
+  en  563046.3761068006 9634048.929625366
+  ll2 -3.3106740144720264 -68.43248658691563
+EPSG:32720
+  ll  -69.88660504305992 -58.451395274860495
+  en  674428.974179743 2240266.5274605397
+  ll2 -69.88660504288639 -58.451395275542424
+EPSG:32721
+  ll  -1.460807694037996 -56.918034017934815
+  en  509117.82030811213 9838536.34068649
+  ll2 -1.460807694037499 -56.918034017934815
+EPSG:32722
+  ll  -67.51187256863244 -49.8909954222962
+  en  547334.5777219022 2511132.649487271
+  ll2 -67.5118725686338 -49.89099542229613
+EPSG:32723
+  ll  -37.33901138489274 -46.319661481385886
+  en  383102.3012525303 5866702.311873849
+  ll2 -37.33901138489222 -46.3196614813865
+EPSG:32724
+  ll  -64.98185873306474 -42.631062127293355
+  en  328728.8038014539 2788647.117090909
+  ll2 -64.98185873299518 -42.631062127215536
+EPSG:32725
+  ll  -65.44826790805924 -36.847373771828195
+  en  321704.4754237144 2736137.6100584166
+  ll2 -65.44826790796357 -36.847373771693476
+EPSG:32726
+  ll  -45.64851344048113 -31.882495362328466
+  en  119560.58075143833 4933398.9237327585
+  ll2 -45.64851343989748 -31.88249536231209
+EPSG:32727
+  ll  -50.934366256586614 -25.166137353819305
+  en  207304.56798461726 4349205.018263729
+  ll2 -50.93436625633735 -25.166137353769805
+EPSG:32728
+  ll  -75.6414574413936 -19.243865220370584
+  en  382615.2732716046 1600607.7105868515
+  ll2 -75.64145744134245 -19.24386521997399
+EPSG:32729
+  ll  -83.5333650193571 -5.501531193633692
+  en  543962.835055189 722665.361454945
+  ll2 -83.53336501935372 -5.501531193708958
+EPSG:32730
+  ll  -81.54589940598518 -0.6625327966681755
+  en  538355.0358692394 945086.5607411675
+  ll2 -81.5458994059829 -0.6625327966706558
+EPSG:32731
+  ll  -77.7299649478657 6.793662551026102
+  en  589941.1445311456 1368855.4457779005
+  ll2 -77.72996494784715 6.793662550878116
+EPSG:32732
+  ll  -1.791491309390267 5.643292386980017
+  en  126449.06323080737 9801643.353370322
+  ll2 -1.7914913093887788 5.643292387171931
+EPSG:32733
+  ll  -4.126836934079179 14.21193297521501
+  en  412530.97644885455 9543809.318915792
+  ll2 -4.126836934077884 14.211932975215113
+EPSG:32734
+  ll  3.2478852471029853 16.30155670183659
+  en  -22571.106634815456 1.0360208764095124E7
+  ll2 3.247885247076826 16.301556703090707
+EPSG:32735
+  ll  -67.02488461225471 23.602574863927025
+  en  352075.73642084474 2561806.4975045808
+  ll2 -67.02488461221535 23.602574863972343
+EPSG:32736
+  ll  -42.55662303150512 29.942428252202173
+  en  248987.61723446447 5283887.580592804
+  ll2 -42.55662303147199 29.942428252161324
+EPSG:32737
+  ll  -63.21444761968792 35.222287816138596
+  en  310135.9849165189 2984926.8570488933
+  ll2 -63.214447619588334 35.22228781624288
+EPSG:32738
+  ll  -33.61049536194267 49.3934280355533
+  en  907721.7528865209 6272366.919585204
+  ll2 -33.61049536177813 49.39342803597181
+EPSG:32739
+  ll  -36.97742607037574 49.32483640492937
+  en  350900.55360484595 5906320.568081439
+  ll2 -36.97742607037497 49.324836404927225
+EPSG:32740
+  ll  -78.828450880352 53.91362023885953
+  en  433274.5310192385 1247408.597646758
+  ll2 -78.82845088034634 53.913620238883254
+EPSG:32741
+  ll  -26.30036312196733 65.289773385337
+  en  728606.5155660608 7089027.454681892
+  ll2 -26.300363121968427 65.28977338534429
+EPSG:32742
+  ll  -46.57798418816586 66.46686755703854
+  en  305909.44786115893 4838613.998469358
+  ll2 -46.577984188152286 66.46686755702721
+EPSG:32743
+  ll  -25.298456802256545 78.290225577417
+  en  831325.5755857098 7197935.587045648
+  ll2 -25.298456802245934 78.29022557747085
+EPSG:32744
+  ll  -23.333853962130412 81.03414728671824
+  en  503490.800754981 7419521.505624639
+  ll2 -23.33385396213198 81.03414728671824
+EPSG:32745
+  ll  -27.850501765768136 88.49974130692067
+  en  647670.9268986753 6918455.120880485
+  ll2 -27.85050176577014 88.49974130692154
+EPSG:32746
+  ll  -21.043491771413862 94.96493214411353
+  en  704183.7578679286 7671781.457049133
+  ll2 -21.04349177141502 94.96493214411359
+EPSG:32747
+  ll  -17.444781767557416 97.838202011294
+  en  376622.8914274465 8070864.873775644
+  ll2 -17.444781767557274 97.8382020112942
+EPSG:32748
+  ll  -58.2033639588618 101.36763036809408
+  en  286575.74435410445 3542895.423578527
+  ll2 -58.203363958762644 101.36763036814246
+EPSG:32749
+  ll  -38.23589206710369 109.25679480724837
+  en  347437.22738472256 5766575.122088731
+  ll2 -38.23589206710225 109.25679480724578
+EPSG:32750
+  ll  -29.646256411547412 116.5390917394596
+  en  455389.40541231557 6720322.495279071
+  ll2 -29.64625641154921 116.53909173945958
+EPSG:32751
+  ll  -32.31249913837224 123.5620478825476
+  en  552907.9443416377 6424786.563103266
+  ll2 -32.31249913837346 123.56204788254762
+EPSG:32752
+  ll  -40.03951775988635 127.43317318342925
+  en  366330.3564929392 5566680.742924484
+  ll2 -40.03951775988467 127.43317318342785
+EPSG:32753
+  ll  -28.176037015492348 138.7789296805875
+  en  871098.4449456041 6877512.944383415
+  ll2 -28.176037015452554 138.77892968074894
+EPSG:32754
+  ll  -76.09420937279235 144.16836879822267
+  en  584959.5966797009 1552021.5295583569
+  ll2 -76.09420937278291 144.16836879819374
+EPSG:32755
+  ll  -5.430354355649115 147.0530080779711
+  en  505872.17624536785 9399764.410398081
+  ll2 -5.430354355647516 147.0530080779711
+EPSG:32756
+  ll  -52.48522451023355 152.57450200005235
+  en  471106.27600235335 4184906.4029197395
+  ll2 -52.48522451023299 152.57450200005235
+EPSG:32757
+  ll  -20.68227265660569 154.09167529202733
+  en  -11660.993969266012 7705261.8022987265
+  ll2 -20.682272656454828 154.09167529182264
+EPSG:32758
+  ll  -6.482322318456696 161.77847911397538
+  en  143617.7405419257 9282345.981167397
+  ll2 -6.48232231845288 161.77847911410754
+EPSG:32759
+  ll  -9.653111284693267 166.1444317382442
+  en  -33309.996839536005 8929144.290482178
+  ll2 -9.653111284606696 166.1444317392922
+EPSG:32760
+  ll  -36.29211488935783 181.82910716731914
+  en  933779.944968744 5972815.905636307
+  ll2 -36.29211488900613 181.82910716792168
+EPSG:3301
+  ll  59.493759099912154 27.525338967200614
+  en  699626.8833689764 6600366.426436952
+  ll2 59.49375909991213 27.525338967200614
+EPSG:3812
+  ll  50.76787953358437 3.4513353977071453
+  en  585284.6677650047 662323.5758590293
+  ll2 50.76787953358439 3.451335397707146
+EPSG:3857
+  ll  26.19321910736396 -57.05540747306637
+  en  -6351378.906904483 3023031.7049287064
+  ll2 26.19321910736395 -57.05540747306636
+EPSG:3942
+  ll  42.50224953559769 -0.5066786018577263
+  en  1411858.985481917 1261685.9957595589
+  ll2 42.50224953559774 -0.5066786018577272
+EPSG:3943
+  ll  43.90555462555216 9.09689182480521
+  en  2189372.9132868364 2318369.8170038997
+  ll2 43.9055546255522 9.096891824805208
+EPSG:3944
+  ll  43.19615820273569 -2.2408194587228754
+  en  1274301.655593946 3124223.7388553144
+  ll2 43.19615820273572 -2.240819458722875
+EPSG:3945
+  ll  42.57364172140781 -4.367440068101999
+  en  1095466.1808782574 3957858.4306936576
+  ll2 42.57364172140783 -4.367440068101998
+EPSG:3946
+  ll  46.450766039756 -1.5829952343218343
+  en  1348093.5108619956 5260228.6829278115
+  ll2 46.450766039756004 -1.5829952343218343
+EPSG:3947
+  ll  45.274573855216566 8.148993756717044
+  en  2103893.8135509207 6021477.631196574
+  ll2 45.27457385521657 8.148993756717044
+EPSG:3948
+  ll  47.57690494420086 8.633366759947714
+  en  2123416.1310845516 7168437.373686953
+  ll2 47.576904944200855 8.633366759947712
+EPSG:3949
+  ll  47.36655471156381 -1.410864163556286
+  en  1366910.6256544283 8028041.335254104
+  ll2 47.36655471156381 -1.410864163556286
+EPSG:3950
+  ll  48.0634969752751 -5.238953399372484
+  en  1086868.313881684 9018423.494770935
+  ll2 48.06349697527511 -5.23895339937248
+EPSG:4258
+  ll  68.95423702701359 -136.7642652058481
+  en  -136.76426520584806 68.95423702701359
+  ll2 68.95423702701359 -136.76426520584806
+EPSG:4326
+  ll  -7.087221454568692 41.43170492812351
+  en  41.43170492812351 -7.087221454568692
+  ll2 -7.087221454568692 41.43170492812351
diff --git a/data_nodist/trans/ast.lang b/data_nodist/trans/ast.lang
index 6656851..bc53ce3 100644
Binary files a/data_nodist/trans/ast.lang and b/data_nodist/trans/ast.lang differ
diff --git a/data_nodist/trans/be.lang b/data_nodist/trans/be.lang
new file mode 100644
index 0000000..1cffeea
Binary files /dev/null and b/data_nodist/trans/be.lang differ
diff --git a/data_nodist/trans/bg.lang b/data_nodist/trans/bg.lang
index 354c9cc..29d05a2 100644
Binary files a/data_nodist/trans/bg.lang and b/data_nodist/trans/bg.lang differ
diff --git a/data_nodist/trans/ca-valencia.lang b/data_nodist/trans/ca-valencia.lang
index c60c7b7..4983963 100644
Binary files a/data_nodist/trans/ca-valencia.lang and b/data_nodist/trans/ca-valencia.lang differ
diff --git a/data_nodist/trans/ca.lang b/data_nodist/trans/ca.lang
index 60224a5..7c0f114 100644
Binary files a/data_nodist/trans/ca.lang and b/data_nodist/trans/ca.lang differ
diff --git a/data_nodist/trans/cs.lang b/data_nodist/trans/cs.lang
index 4c4efeb..4d20f63 100644
Binary files a/data_nodist/trans/cs.lang and b/data_nodist/trans/cs.lang differ
diff --git a/data_nodist/trans/da.lang b/data_nodist/trans/da.lang
index 4972a21..e46c102 100644
Binary files a/data_nodist/trans/da.lang and b/data_nodist/trans/da.lang differ
diff --git a/data_nodist/trans/de.lang b/data_nodist/trans/de.lang
index 322a150..0b32d1d 100644
Binary files a/data_nodist/trans/de.lang and b/data_nodist/trans/de.lang differ
diff --git a/data_nodist/trans/el.lang b/data_nodist/trans/el.lang
index 05e495b..d8f4979 100644
Binary files a/data_nodist/trans/el.lang and b/data_nodist/trans/el.lang differ
diff --git a/data_nodist/trans/en.lang b/data_nodist/trans/en.lang
index b84d8b5..f41b13d 100644
Binary files a/data_nodist/trans/en.lang and b/data_nodist/trans/en.lang differ
diff --git a/data_nodist/trans/en_AU.lang b/data_nodist/trans/en_AU.lang
index 6728487..f1a47bd 100644
Binary files a/data_nodist/trans/en_AU.lang and b/data_nodist/trans/en_AU.lang differ
diff --git a/data_nodist/trans/en_GB.lang b/data_nodist/trans/en_GB.lang
index 59d354f..75166fc 100644
Binary files a/data_nodist/trans/en_GB.lang and b/data_nodist/trans/en_GB.lang differ
diff --git a/data_nodist/trans/es.lang b/data_nodist/trans/es.lang
index b5d560a..9679f43 100644
Binary files a/data_nodist/trans/es.lang and b/data_nodist/trans/es.lang differ
diff --git a/data_nodist/trans/et.lang b/data_nodist/trans/et.lang
index 2b5d761..0f8633e 100644
Binary files a/data_nodist/trans/et.lang and b/data_nodist/trans/et.lang differ
diff --git a/data_nodist/trans/fi.lang b/data_nodist/trans/fi.lang
index 674e5b5..5b0b083 100644
Binary files a/data_nodist/trans/fi.lang and b/data_nodist/trans/fi.lang differ
diff --git a/data_nodist/trans/fr.lang b/data_nodist/trans/fr.lang
index 9925c14..316b952 100644
Binary files a/data_nodist/trans/fr.lang and b/data_nodist/trans/fr.lang differ
diff --git a/data_nodist/trans/gl.lang b/data_nodist/trans/gl.lang
index cdb7f61..f3812e8 100644
Binary files a/data_nodist/trans/gl.lang and b/data_nodist/trans/gl.lang differ
diff --git a/data_nodist/trans/hu.lang b/data_nodist/trans/hu.lang
index 522b295..00f899f 100644
Binary files a/data_nodist/trans/hu.lang and b/data_nodist/trans/hu.lang differ
diff --git a/data_nodist/trans/id.lang b/data_nodist/trans/id.lang
index c0003af..b68a5bb 100644
Binary files a/data_nodist/trans/id.lang and b/data_nodist/trans/id.lang differ
diff --git a/data_nodist/trans/it.lang b/data_nodist/trans/it.lang
index e7cde95..0154907 100644
Binary files a/data_nodist/trans/it.lang and b/data_nodist/trans/it.lang differ
diff --git a/data_nodist/trans/ja.lang b/data_nodist/trans/ja.lang
index d112cfe..bb313df 100644
Binary files a/data_nodist/trans/ja.lang and b/data_nodist/trans/ja.lang differ
diff --git a/data_nodist/trans/km.lang b/data_nodist/trans/km.lang
index 92f16bf..e5e95eb 100644
Binary files a/data_nodist/trans/km.lang and b/data_nodist/trans/km.lang differ
diff --git a/data_nodist/trans/lt.lang b/data_nodist/trans/lt.lang
index b824b44..2256c83 100644
Binary files a/data_nodist/trans/lt.lang and b/data_nodist/trans/lt.lang differ
diff --git a/data_nodist/trans/nl.lang b/data_nodist/trans/nl.lang
index 7d2e59d..b947d78 100644
Binary files a/data_nodist/trans/nl.lang and b/data_nodist/trans/nl.lang differ
diff --git a/data_nodist/trans/pl.lang b/data_nodist/trans/pl.lang
index 01c49a8..a2c1c36 100644
Binary files a/data_nodist/trans/pl.lang and b/data_nodist/trans/pl.lang differ
diff --git a/data_nodist/trans/pt.lang b/data_nodist/trans/pt.lang
index cfc47fc..0854daa 100644
Binary files a/data_nodist/trans/pt.lang and b/data_nodist/trans/pt.lang differ
diff --git a/data_nodist/trans/pt_BR.lang b/data_nodist/trans/pt_BR.lang
index c576704..4508c9c 100644
Binary files a/data_nodist/trans/pt_BR.lang and b/data_nodist/trans/pt_BR.lang differ
diff --git a/data_nodist/trans/ru.lang b/data_nodist/trans/ru.lang
index 878e2bf..2f511b5 100644
Binary files a/data_nodist/trans/ru.lang and b/data_nodist/trans/ru.lang differ
diff --git a/data_nodist/trans/sk.lang b/data_nodist/trans/sk.lang
index 3f030de..e2e3a89 100644
Binary files a/data_nodist/trans/sk.lang and b/data_nodist/trans/sk.lang differ
diff --git a/data_nodist/trans/sv.lang b/data_nodist/trans/sv.lang
index b9d0f41..4ea2741 100644
Binary files a/data_nodist/trans/sv.lang and b/data_nodist/trans/sv.lang differ
diff --git a/data_nodist/trans/uk.lang b/data_nodist/trans/uk.lang
index a9a88fb..1496f26 100644
Binary files a/data_nodist/trans/uk.lang and b/data_nodist/trans/uk.lang differ
diff --git a/data_nodist/trans/vi.lang b/data_nodist/trans/vi.lang
new file mode 100644
index 0000000..682be9a
Binary files /dev/null and b/data_nodist/trans/vi.lang differ
diff --git a/data_nodist/trans/zh_CN.lang b/data_nodist/trans/zh_CN.lang
index 3abe436..110cb3d 100644
Binary files a/data_nodist/trans/zh_CN.lang and b/data_nodist/trans/zh_CN.lang differ
diff --git a/data_nodist/trans/zh_TW.lang b/data_nodist/trans/zh_TW.lang
index 8eb984e..33dfc23 100644
Binary files a/data_nodist/trans/zh_TW.lang and b/data_nodist/trans/zh_TW.lang differ
diff --git a/data_nodist/wms-cache.xsd b/data_nodist/wms-cache.xsd
deleted file mode 100644
index c6d50b8..0000000
--- a/data_nodist/wms-cache.xsd
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://josm.openstreetmap.de/wms-cache-1.0"
-	xmlns:tns="http://josm.openstreetmap.de/wms-cache-1.0" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd"
-	elementFormDefault="qualified" jaxb:version="2.0">
-	
-	<annotation>
-		<appinfo>
-			<jaxb:schemaBindings>
-				<jaxb:package name="org.openstreetmap.josm.data.imagery.types">
-				</jaxb:package>
-				<jaxb:nameXmlTransform>
-					<jaxb:typeName suffix="Type" />
-					<jaxb:elementName suffix="Type" />
-				</jaxb:nameXmlTransform>
-			</jaxb:schemaBindings>
-			<jaxb:globalBindings>
-				<jaxb:javaType name="java.util.Calendar" xmlType="date"
-					parseMethod="javax.xml.bind.DatatypeConverter.parseDate"
-					printMethod="org.openstreetmap.josm.data.imagery.WmsCache.printDate" />
-			</jaxb:globalBindings>
-		</appinfo>
-	</annotation>
-
-	<element name="wms-cache">
-		<complexType>
-			<sequence>
-				<element name="projection" type="tns:projection" minOccurs="0"
-					maxOccurs="unbounded" />
-			</sequence>
-			<attribute name="tileSize" type="int" use="required" />
-			<attribute name="totalFileSize" type="int" use="required"/>
-		</complexType>
-	</element>
-	
-	<complexType name="projection">
-		<sequence>
-			<element name="entry" type="tns:entry" minOccurs="0" maxOccurs="unbounded"/>
-		</sequence>
-		<attribute name="name" type="string"/>
-		<attribute name="cache-directory" type="string"/>
-	</complexType>
-
-	<complexType name="entry">
-		<sequence>
-			<element name="pixelPerDegree" type="double" />
-			<element name="east" type="double" />
-			<element name="north" type="double" />
-			<element name="lastUsed" type="date" />
-			<element name="lastModified" type="date" />
-			<element name="filename" type="string" />
-		</sequence>
-	</complexType>
-</schema>
diff --git a/i18n/build.xml b/i18n/build.xml
index 07cfed1..9b134e5 100644
--- a/i18n/build.xml
+++ b/i18n/build.xml
@@ -139,7 +139,7 @@
                 </exec>
             </then>
         </if>
-        <delete dir="${po.build.dir}/plugin_${dir}ss"/>
+        <delete dir="${po.build.dir}/plugin_${dir}"/>
     </target>
     <target name="clean">
         <delete dir="${i18n.build.dir}"/>
diff --git a/i18n/convpreset.pl b/i18n/convpreset.pl
index 4eba572..2c4c39a 100644
--- a/i18n/convpreset.pl
+++ b/i18n/convpreset.pl
@@ -209,6 +209,7 @@ while(my $line = <>)
      || $line =~ /<\/?chunk/
      || $line =~ /<reference/
      || $line =~ /<preset_link/
+     || $line =~ /<item_separator\/>/
      || $comment)
   {
     $line =~ s/[ \t]+((?:short)?description) *= *"([^"]+)/*\/ \/* $1 *\/ tr("$2"); \/*/g;
diff --git a/i18n/launchpad.pl b/i18n/launchpad.pl
index e3eedf0..63f417b 100755
--- a/i18n/launchpad.pl
+++ b/i18n/launchpad.pl
@@ -15,13 +15,13 @@ $pwd = '';
 
 # list of supported languages
 my %lang = map {$_ => 1} (
-"ast", "bg", "ca", "ca\@valencia", "cs", "da", "de", "el", "en_AU", "en_GB",
+"ast", "bg", "be", "ca", "ca\@valencia", "cs", "da", "de", "el", "en_AU", "en_GB",
 "es", "et", "fi", "fr", "gl", "hu", "id",
 "it", "ja", "km", "lt", "nl", "pl", "pt", "pt_BR", "ru", "sk",
-"sv", "uk", "zh_CN", "zh_TW"
+"sv", "uk", "vi", "zh_CN", "zh_TW"
 );
 
-my $revision = '$Revision: 31086 $';
+my $revision = '$Revision: 31139 $';
 $revision =~ s/^.*?(\d+).*$/$1/;
 my $agent = "JOSM_Launchpad/1.$revision";
 
diff --git a/i18n/po/af.po b/i18n/po/af.po
index 92eb0cf..e2ce936 100644
--- a/i18n/po/af.po
+++ b/i18n/po/af.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2011-10-13 02:39+0000\n"
 "Last-Translator: Grant Slater <Unknown>\n"
 "Language-Team: Afrikaans <af at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:30+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:31+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: af\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -97,19 +97,16 @@ msgstr ""
 msgid "Updating user interface"
 msgstr ""
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
 msgstr ""
 
 msgid "Warning"
 msgstr "Waarskuwing"
 
-msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
+msgid "Ignoring malformed file URL: \"{0}\""
 msgstr ""
 
-msgid "Ignoring malformed URL: \"{0}\""
+msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 
 msgid ""
@@ -444,6 +441,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
 
@@ -1029,6 +1029,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr ""
 
@@ -1945,15 +1969,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr ""
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -1975,6 +1990,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2093,9 +2117,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2309,9 +2330,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr ""
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2525,6 +2552,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2567,6 +2598,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3017,6 +3051,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3134,10 +3186,44 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3327,6 +3413,12 @@ msgstr ""
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3354,13 +3446,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -3976,9 +4068,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -3988,12 +4077,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4174,13 +4275,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4378,6 +4479,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4591,43 +4693,54 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
 msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
 msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
 msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
 msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
-msgid "Menu: {0}"
+msgctxt "menu"
+msgid "Help"
 msgstr ""
 
-msgid "Save and load the current session (list of layers, etc.)"
+msgid "Menu: {0}"
 msgstr ""
 
 msgid "Edit toolbar"
@@ -4651,6 +4764,7 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
 msgstr ""
 
@@ -4773,58 +4887,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr ""
-
-msgid "Pos."
+msgid " ({0})"
 msgstr ""
 
-msgid "Role"
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5253,6 +5325,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr ""
+
 msgid "Primitive"
 msgstr ""
 
@@ -5493,6 +5568,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5639,6 +5717,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5742,7 +5855,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5870,6 +5983,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5879,17 +5997,48 @@ msgstr ""
 msgid "unknown"
 msgstr ""
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -5935,6 +6084,12 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr ""
 
@@ -6064,10 +6219,16 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
-msgid "List of notes"
+msgid "Mini map"
 msgstr ""
 
-msgid "Add comment"
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
+msgid "List of notes"
+msgstr ""
+
+msgid "Add comment"
 msgstr ""
 
 msgid "Comment"
@@ -6122,10 +6283,15 @@ msgstr ""
 msgid "Enter the ID of the object that should be downloaded"
 msgstr ""
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6154,6 +6320,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr ""
 
+msgid "Selection"
+msgstr ""
+
 msgid "Open a selection list window."
 msgstr ""
 
@@ -6244,6 +6413,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -6838,6 +7013,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6929,14 +7110,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7109,6 +7289,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7644,6 +7830,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8489,6 +8678,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr ""
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr ""
 
@@ -8542,6 +8831,9 @@ msgstr ""
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8562,7 +8854,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8645,80 +8937,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr ""
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-
-msgid "Auto Zoom"
-msgstr ""
-
-msgid "Auto load tiles"
-msgstr ""
-
-msgid "Show Errors"
-msgstr ""
-
-msgid "Load Tile"
-msgstr ""
-
-msgid "Show Tile Info"
-msgstr ""
-
-msgid "Load All Tiles"
-msgstr ""
-
-msgid "Load All Error Tiles"
-msgstr ""
-
-msgid "Increase zoom"
-msgstr ""
-
-msgid "Decrease zoom"
-msgstr ""
-
-msgid "Snap to tile size"
-msgstr ""
-
-msgid "Flush Tile Cache"
-msgstr ""
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
@@ -8728,56 +8946,30 @@ msgstr ""
 msgid "No validation errors"
 msgstr ""
 
-msgid "Blank Layer"
-msgstr ""
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "Download visible tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-
-msgid "Change resolution"
-msgstr ""
-
-msgid "Reload erroneous tiles"
-msgstr ""
-
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Automatic downloading"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Zoom to native resolution"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Supported projections are: {0}"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Save WMS file"
+msgid "Try Again"
 msgstr ""
 
-msgid "Correlate to GPX"
+msgid "No images could be matched!"
 msgstr ""
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
@@ -8864,24 +9056,9 @@ msgstr ""
 msgid "Offset:"
 msgstr ""
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
 msgid "Correlate"
 msgstr ""
 
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9075,9 +9252,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr ""
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9140,9 +9314,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9768,15 +9939,15 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr ""
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -10569,13 +10740,28 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
-msgid "imagery fade"
+msgid "1. Enter getCapabilities URL"
 msgstr ""
 
-msgid "Fade Color: "
+msgid "2. Enter name for this layer"
 msgstr ""
 
-msgid "Fade amount: "
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
+msgid "imagery fade"
+msgstr ""
+
+msgid "Fade Color: "
+msgstr ""
+
+msgid "Fade amount: "
 msgstr ""
 
 msgid "Soft"
@@ -10587,6 +10773,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10608,6 +10806,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10650,9 +10851,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr ""
 
@@ -10677,36 +10875,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11642,6 +11825,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] ""
@@ -11750,6 +11941,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12003,6 +12197,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12539,6 +12736,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12924,6 +13124,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13918,6 +14131,9 @@ msgstr ""
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr ""
+
 msgid "Blue:"
 msgstr ""
 
@@ -13957,7 +14173,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -13969,9 +14185,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14080,6 +14293,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14093,12 +14309,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14135,10 +14357,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14165,6 +14393,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14189,7 +14420,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14204,6 +14435,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14216,12 +14450,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14242,6 +14470,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14274,10 +14505,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14307,6 +14535,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14322,154 +14556,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14484,9 +14724,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14616,6 +14865,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14631,7 +14895,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -14957,6 +15221,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15041,11 +15310,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15099,7 +15363,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15114,9 +15378,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15197,6 +15458,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15235,6 +15504,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15310,9 +15582,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15718,6 +15987,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15742,10 +16019,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15762,6 +16035,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15778,11 +16055,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15798,6 +16087,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15810,6 +16103,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15837,6 +16134,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16228,6 +16537,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16304,6 +16616,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr ""
 
@@ -16841,6 +17156,12 @@ msgstr ""
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17030,6 +17351,11 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
 msgstr ""
 
@@ -17083,6 +17409,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17224,13 +17554,127 @@ msgstr ""
 msgid "public"
 msgstr ""
 
-msgid "Pier"
+msgid "Marine Fuel"
 msgstr ""
 
-msgid "Lock Gate"
+msgid "Agip"
 msgstr ""
 
-msgid "Turning Point"
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
+msgid "Pier"
+msgstr ""
+
+msgid "Lock Gate"
+msgstr ""
+
+msgid "Turning Point"
 msgstr ""
 
 msgid "Slipway"
@@ -17340,6 +17784,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -17463,78 +17910,6 @@ msgstr ""
 msgid "Fuel"
 msgstr ""
 
-msgid "Agip"
-msgstr ""
-
-msgid "Aral"
-msgstr ""
-
-msgid "Avia"
-msgstr ""
-
-msgid "BP"
-msgstr ""
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr ""
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
 msgid "With shop"
 msgstr ""
 
@@ -17544,51 +17919,12 @@ msgstr ""
 msgid "kiosk"
 msgstr ""
 
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -17807,9 +18143,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17828,6 +18161,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18030,6 +18366,12 @@ msgstr ""
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18120,6 +18462,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18334,6 +18679,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18821,7 +19169,7 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
@@ -18830,43 +19178,70 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
-msgid "Glass"
+msgid "Cardboard"
 msgstr ""
 
-msgid "Paper"
+msgid "Electrical Appliances"
 msgstr ""
 
-msgid "Scrap Metal"
+msgid "Glass"
 msgstr ""
 
-msgid "container"
+msgid "Glass Bottles"
 msgstr ""
 
-msgid "centre"
+msgid "Green Waste"
 msgstr ""
 
-msgid "Waste Basket/Trash Can"
+msgid "Paper"
 msgstr ""
 
-msgid "Waste Disposal/Dumpster"
+msgid "Plastic"
 msgstr ""
 
-msgid "Sanitary Dump Station"
+msgid "Plastic Bottles"
 msgstr ""
 
-msgid "Suction pumpout"
+msgid "Plastic Packaging"
 msgstr ""
 
-msgid "Gravity drain for hose"
+msgid "Scrap Metal"
 msgstr ""
 
-msgid "Casette or Elsan Disposal"
+msgid "Shoes"
 msgstr ""
 
-msgid "Operation times"
+msgid "Small Appliances"
 msgstr ""
 
-msgid "Backrest"
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
+msgstr ""
+
+msgid "Waste Basket/Trash Can"
+msgstr ""
+
+msgid "Waste Disposal/Dumpster"
+msgstr ""
+
+msgid "Sanitary Dump Station"
+msgstr ""
+
+msgid "Suction pumpout"
+msgstr ""
+
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
+msgstr ""
+
+msgid "Operation times"
+msgstr ""
+
+msgid "Backrest"
 msgstr ""
 
 msgid "Amount of Seats"
@@ -19046,6 +19421,9 @@ msgstr ""
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr ""
 
@@ -19221,12 +19599,18 @@ msgstr ""
 msgid "Basketball"
 msgstr ""
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr ""
 
@@ -19242,13 +19626,13 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
@@ -19272,9 +19656,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19293,9 +19674,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -19368,6 +19746,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20688,9 +21074,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -21703,10 +22086,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22133,6 +22516,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22157,6 +22543,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22217,6 +22615,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22307,9 +22708,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22679,6 +23089,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22733,9 +23146,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23479,47 +23889,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23528,10 +23947,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24134,6 +24565,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr ""
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25231,374 +25665,680 @@ msgid ""
 "highlight tracks"
 msgstr ""
 
-msgid "Delete this"
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
 msgstr ""
 
-msgid "Delete this&older"
+msgid "Connecting"
 msgstr ""
 
-msgid "km/h"
+msgid "Connected"
 msgstr ""
 
-msgid "Track name: "
+msgid "no name"
 msgstr ""
 
-msgid "Update IRS adjustment layer"
+msgid "Live GPS"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid "Show GPS data."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Speed"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Course"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
+msgid "Explore"
 msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25619,6 +26359,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -25677,47 +26420,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -25950,6 +26652,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr ""
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27167,6 +27872,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27338,6 +28064,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27347,6 +28076,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27527,6 +28259,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27705,6 +28440,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27714,6 +28482,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -27950,9 +28721,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29435,9 +30203,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/am.po b/i18n/po/am.po
index 25d7e61..50ecf49 100644
--- a/i18n/po/am.po
+++ b/i18n/po/am.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2010-03-30 12:09+0000\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: Amharic <am at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:31+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:32+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: am\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -97,19 +97,16 @@ msgstr ""
 msgid "Updating user interface"
 msgstr ""
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
 msgstr ""
 
 msgid "Warning"
 msgstr ""
 
-msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
+msgid "Ignoring malformed file URL: \"{0}\""
 msgstr ""
 
-msgid "Ignoring malformed URL: \"{0}\""
+msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 
 msgid ""
@@ -444,6 +441,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
 
@@ -1029,6 +1029,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr ""
 
@@ -1945,15 +1969,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr ""
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -1975,6 +1990,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2093,9 +2117,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2309,9 +2330,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr ""
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2525,6 +2552,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2567,6 +2598,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3017,6 +3051,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3134,10 +3186,44 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3327,6 +3413,12 @@ msgstr ""
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3354,13 +3446,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -3976,9 +4068,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -3988,12 +4077,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4174,13 +4275,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4378,6 +4479,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4591,43 +4693,54 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
 msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
 msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
 msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
 msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
-msgid "Menu: {0}"
+msgctxt "menu"
+msgid "Help"
 msgstr ""
 
-msgid "Save and load the current session (list of layers, etc.)"
+msgid "Menu: {0}"
 msgstr ""
 
 msgid "Edit toolbar"
@@ -4651,6 +4764,7 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
 msgstr ""
 
@@ -4773,58 +4887,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr ""
-
-msgid "Pos."
+msgid " ({0})"
 msgstr ""
 
-msgid "Role"
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5253,6 +5325,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr ""
+
 msgid "Primitive"
 msgstr ""
 
@@ -5493,6 +5568,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5639,6 +5717,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5742,7 +5855,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5870,6 +5983,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5879,17 +5997,48 @@ msgstr ""
 msgid "unknown"
 msgstr ""
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -5935,6 +6084,12 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr ""
 
@@ -6064,10 +6219,16 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
-msgid "List of notes"
+msgid "Mini map"
 msgstr ""
 
-msgid "Add comment"
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
+msgid "List of notes"
+msgstr ""
+
+msgid "Add comment"
 msgstr ""
 
 msgid "Comment"
@@ -6122,10 +6283,15 @@ msgstr ""
 msgid "Enter the ID of the object that should be downloaded"
 msgstr ""
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6154,6 +6320,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr ""
 
+msgid "Selection"
+msgstr ""
+
 msgid "Open a selection list window."
 msgstr ""
 
@@ -6244,6 +6413,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -6838,6 +7013,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6929,14 +7110,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7109,6 +7289,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7644,6 +7830,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8489,6 +8678,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr ""
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr ""
 
@@ -8542,6 +8831,9 @@ msgstr ""
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8562,7 +8854,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8645,80 +8937,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr ""
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-
-msgid "Auto Zoom"
-msgstr ""
-
-msgid "Auto load tiles"
-msgstr ""
-
-msgid "Show Errors"
-msgstr ""
-
-msgid "Load Tile"
-msgstr ""
-
-msgid "Show Tile Info"
-msgstr ""
-
-msgid "Load All Tiles"
-msgstr ""
-
-msgid "Load All Error Tiles"
-msgstr ""
-
-msgid "Increase zoom"
-msgstr ""
-
-msgid "Decrease zoom"
-msgstr ""
-
-msgid "Snap to tile size"
-msgstr ""
-
-msgid "Flush Tile Cache"
-msgstr ""
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
@@ -8728,56 +8946,30 @@ msgstr ""
 msgid "No validation errors"
 msgstr ""
 
-msgid "Blank Layer"
-msgstr ""
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "Download visible tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-
-msgid "Change resolution"
-msgstr ""
-
-msgid "Reload erroneous tiles"
-msgstr ""
-
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Automatic downloading"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Zoom to native resolution"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Supported projections are: {0}"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Save WMS file"
+msgid "Try Again"
 msgstr ""
 
-msgid "Correlate to GPX"
+msgid "No images could be matched!"
 msgstr ""
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
@@ -8864,24 +9056,9 @@ msgstr ""
 msgid "Offset:"
 msgstr ""
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
 msgid "Correlate"
 msgstr ""
 
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9075,9 +9252,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr ""
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9140,9 +9314,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9768,15 +9939,15 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr ""
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -10569,13 +10740,28 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
-msgid "imagery fade"
+msgid "1. Enter getCapabilities URL"
 msgstr ""
 
-msgid "Fade Color: "
+msgid "2. Enter name for this layer"
 msgstr ""
 
-msgid "Fade amount: "
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
+msgid "imagery fade"
+msgstr ""
+
+msgid "Fade Color: "
+msgstr ""
+
+msgid "Fade amount: "
 msgstr ""
 
 msgid "Soft"
@@ -10587,6 +10773,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10608,6 +10806,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10650,9 +10851,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr ""
 
@@ -10677,36 +10875,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11642,6 +11825,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] ""
@@ -11750,6 +11941,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12003,6 +12197,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12539,6 +12736,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12924,6 +13124,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13918,6 +14131,9 @@ msgstr ""
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr ""
+
 msgid "Blue:"
 msgstr ""
 
@@ -13957,7 +14173,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -13969,9 +14185,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14080,6 +14293,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14093,12 +14309,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14135,10 +14357,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14165,6 +14393,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14189,7 +14420,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14204,6 +14435,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14216,12 +14450,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14242,6 +14470,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14274,10 +14505,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14307,6 +14535,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14322,154 +14556,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14484,9 +14724,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14616,6 +14865,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14631,7 +14895,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -14957,6 +15221,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15041,11 +15310,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15099,7 +15363,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15114,9 +15378,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15197,6 +15458,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15235,6 +15504,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15310,9 +15582,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15718,6 +15987,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15742,10 +16019,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15762,6 +16035,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15778,11 +16055,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15798,6 +16087,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15810,6 +16103,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15837,6 +16134,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16228,6 +16537,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16304,6 +16616,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr ""
 
@@ -16841,6 +17156,12 @@ msgstr ""
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17030,6 +17351,11 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
 msgstr ""
 
@@ -17083,6 +17409,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17224,13 +17554,127 @@ msgstr ""
 msgid "public"
 msgstr ""
 
-msgid "Pier"
+msgid "Marine Fuel"
 msgstr ""
 
-msgid "Lock Gate"
+msgid "Agip"
 msgstr ""
 
-msgid "Turning Point"
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
+msgid "Pier"
+msgstr ""
+
+msgid "Lock Gate"
+msgstr ""
+
+msgid "Turning Point"
 msgstr ""
 
 msgid "Slipway"
@@ -17340,6 +17784,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -17463,78 +17910,6 @@ msgstr ""
 msgid "Fuel"
 msgstr ""
 
-msgid "Agip"
-msgstr ""
-
-msgid "Aral"
-msgstr ""
-
-msgid "Avia"
-msgstr ""
-
-msgid "BP"
-msgstr ""
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr ""
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
 msgid "With shop"
 msgstr ""
 
@@ -17544,51 +17919,12 @@ msgstr ""
 msgid "kiosk"
 msgstr ""
 
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -17807,9 +18143,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17828,6 +18161,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18030,6 +18366,12 @@ msgstr ""
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18120,6 +18462,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18334,6 +18679,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18821,7 +19169,7 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
@@ -18830,43 +19178,70 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
-msgid "Glass"
+msgid "Cardboard"
 msgstr ""
 
-msgid "Paper"
+msgid "Electrical Appliances"
 msgstr ""
 
-msgid "Scrap Metal"
+msgid "Glass"
 msgstr ""
 
-msgid "container"
+msgid "Glass Bottles"
 msgstr ""
 
-msgid "centre"
+msgid "Green Waste"
 msgstr ""
 
-msgid "Waste Basket/Trash Can"
+msgid "Paper"
 msgstr ""
 
-msgid "Waste Disposal/Dumpster"
+msgid "Plastic"
 msgstr ""
 
-msgid "Sanitary Dump Station"
+msgid "Plastic Bottles"
 msgstr ""
 
-msgid "Suction pumpout"
+msgid "Plastic Packaging"
 msgstr ""
 
-msgid "Gravity drain for hose"
+msgid "Scrap Metal"
 msgstr ""
 
-msgid "Casette or Elsan Disposal"
+msgid "Shoes"
 msgstr ""
 
-msgid "Operation times"
+msgid "Small Appliances"
 msgstr ""
 
-msgid "Backrest"
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
+msgstr ""
+
+msgid "Waste Basket/Trash Can"
+msgstr ""
+
+msgid "Waste Disposal/Dumpster"
+msgstr ""
+
+msgid "Sanitary Dump Station"
+msgstr ""
+
+msgid "Suction pumpout"
+msgstr ""
+
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
+msgstr ""
+
+msgid "Operation times"
+msgstr ""
+
+msgid "Backrest"
 msgstr ""
 
 msgid "Amount of Seats"
@@ -19046,6 +19421,9 @@ msgstr ""
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr ""
 
@@ -19221,12 +19599,18 @@ msgstr ""
 msgid "Basketball"
 msgstr ""
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr ""
 
@@ -19242,13 +19626,13 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
@@ -19272,9 +19656,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19293,9 +19674,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -19368,6 +19746,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20688,9 +21074,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -21703,10 +22086,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22133,6 +22516,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22157,6 +22543,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22217,6 +22615,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22307,9 +22708,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22679,6 +23089,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22733,9 +23146,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23479,47 +23889,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23528,10 +23947,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24134,6 +24565,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr ""
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25231,374 +25665,680 @@ msgid ""
 "highlight tracks"
 msgstr ""
 
-msgid "Delete this"
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
 msgstr ""
 
-msgid "Delete this&older"
+msgid "Connecting"
 msgstr ""
 
-msgid "km/h"
+msgid "Connected"
 msgstr ""
 
-msgid "Track name: "
+msgid "no name"
 msgstr ""
 
-msgid "Update IRS adjustment layer"
+msgid "Live GPS"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid "Show GPS data."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Speed"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Course"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
+msgid "Explore"
 msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25619,6 +26359,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -25677,47 +26420,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -25950,6 +26652,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr ""
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27167,6 +27872,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27338,6 +28064,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27347,6 +28076,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27527,6 +28259,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27705,6 +28440,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27714,6 +28482,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -27950,9 +28721,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29435,9 +30203,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/ar.po b/i18n/po/ar.po
index 76d9bd1..eded2ab 100644
--- a/i18n/po/ar.po
+++ b/i18n/po/ar.po
@@ -7,24 +7,24 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
-"PO-Revision-Date: 2013-03-30 14:17+0000\n"
-"Last-Translator: Chdoula <chdoula at gmail.com>\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
+"PO-Revision-Date: 2015-10-08 23:09+0000\n"
+"Last-Translator: mourad101e <mourad.les at gmail.com>\n"
 "Language-Team: Arabic <ar at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n % 100 >= "
 "3 && n % 100 <= 10 ? 3 : n % 100 >= 11 && n % 100 <= 99 ? 4 : 5;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:32+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:33+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: ar\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
-msgstr ""
+msgstr "{0}:خيارات ''{1}'' غير دقيقة"
 
 msgid "{0}: option ''--{1}'' does not allow an argument"
-msgstr ""
+msgstr "{0} خيار '' - {1} '' لا يسمح بوسيطة"
 
 msgid "{0}: option ''{1}{2}'' does not allow an argument"
 msgstr ""
@@ -33,85 +33,82 @@ msgid "{0}: option ''{1}'' requires an argument"
 msgstr ""
 
 msgid "{0}: unrecognized option ''--{1}''"
-msgstr ""
+msgstr "{0}: خيار مجهول \"--{1}''"
 
 msgid "{0}: unrecognized option ''{1}{2}''"
-msgstr ""
+msgstr "{0} الخيار غير المعترف بها '' {1} {2} ''"
 
 msgid "{0}: illegal option -- {1}"
-msgstr ""
+msgstr "{0} الخيار غير شرعي - {1}"
 
 msgid "{0}: invalid option -- {1}"
-msgstr ""
+msgstr "{1}--خيار غير صلاح:{0}"
 
 msgid "{0}: option requires an argument -- {1}"
-msgstr ""
+msgstr "{0}الخاصية تحتاج الى وسيطة-- {1}"
 
 msgid "Invalid value {0} for parameter ''has_arg''"
-msgstr ""
+msgstr "قيمة غير صالحة {0}  للمعلم ''has_arg''"
 
 msgid "Background Terms of Use"
-msgstr ""
+msgstr "خلفية شروط الاستخدام"
 
 msgid "Opening link not supported on current platform (''{0}'')"
-msgstr ""
+msgstr "فتح الرابط غير معتمد  في المنصة الحالية ('' {0} '')"
 
 msgid "ERROR: {0}"
-msgstr ""
+msgstr "خطأ: {0}"
 
 msgid "WARNING: {0}"
-msgstr ""
+msgstr "تحذير: {0}"
 
 msgid "INFO: {0}"
-msgstr ""
+msgstr "معلومة {0}"
 
 msgid "DEBUG: {0}"
-msgstr ""
+msgstr "التصحيح: {0}"
 
 msgid "Cause: "
-msgstr ""
+msgstr "السبب: "
 
 msgid "Executing platform startup hook"
-msgstr ""
+msgstr "المنصة تبدأ تشغيل الربط"
 
 msgid "Building main menu"
-msgstr ""
+msgstr "بناء القائمة الرئيسية"
 
 msgid "Help"
-msgstr "المساعدة"
+msgstr "مساعدة"
 
 msgid "Initializing OSM API"
-msgstr ""
+msgstr "تهيئة OSM API"
 
 msgid "Initializing validator"
-msgstr ""
+msgstr "تهيئة المدقق"
 
 msgid "Initializing presets"
-msgstr ""
+msgstr "التهيئة المسبقة"
 
 msgid "Initializing map styles"
-msgstr ""
+msgstr "تهيئة أنماط الخريطة"
 
 msgid "Loading imagery preferences"
-msgstr ""
+msgstr "تحميل تفضيلات الصور"
 
 msgid "Updating user interface"
-msgstr ""
+msgstr "تحديث واجهة المستخدم"
 
-msgid "{0} completed in {1}"
-msgstr ""
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "تجاهل URL سيئة التكوين: \"{0}\""
+
+msgid "Warning"
+msgstr "تحذير"
 
 msgid "Ignoring malformed file URL: \"{0}\""
 msgstr "تجاهل URL ملف غيرصحيح التكوين: \"{0}\""
 
-msgid "Warning"
-msgstr "التحذير"
-
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
-msgstr ""
-
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "تجاهل URL سيئة التكوين: \"{0}\""
+msgstr "المعلم \"تحميل جبس\" لا يقبل إسم الملف أو عناون الملف"
 
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
@@ -120,16 +117,16 @@ msgid ""
 msgstr ""
 
 msgid "Exit JOSM"
-msgstr ""
+msgstr "الخروج من JOSM"
 
 msgid "Continue, try anyway"
-msgstr ""
+msgstr "واصل,حاول على اية حال"
 
 msgid "Error"
 msgstr "خطأ"
 
 msgid "About"
-msgstr "معلومات حول"
+msgstr "حول"
 
 msgid "Display the about screen."
 msgstr "أعرض شاشة المعلومات حول."
@@ -147,22 +144,22 @@ msgid "Java Version {0}"
 msgstr "إصدارجافا {0}"
 
 msgid "Homepage"
-msgstr "صفحة الإنترنت"
+msgstr "الصفحة الرئيسية"
 
 msgid "Bug Reports"
-msgstr "تقارير عن أخطاء"
+msgstr "تقارير الأخطاء"
 
 msgid "Info"
 msgstr "معلومات"
 
 msgid "Readme"
-msgstr "نص للقراءة"
+msgstr "إقرأني"
 
 msgid "Revision"
 msgstr "مراجعة"
 
 msgid "Contribution"
-msgstr "المشاركة"
+msgstr "مشاركة"
 
 msgid "License"
 msgstr "الرخصة"
@@ -180,41 +177,42 @@ msgid_plural ""
 "You are about to launch {0} browser windows.<br>This may both clutter your "
 "screen with browser windows<br>and take some time to finish."
 msgstr[0] ""
-msgstr[1] ""
+"أنت على صدد ارسال {0} نافذة التصفح<br> هذا قد يسبب فوضى على الشاشة بنوافذ "
+"التصفح <br> وتأخذ بعضا من الوقت لتنتهي,"
 
 msgid "Continue"
-msgstr "تابع"
+msgstr "متابعة"
 
 msgid "Click to continue and to open {0} browser"
 msgid_plural "Click to continue and to open {0} browsers"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "أنقر للمتابعة وفتح {0} متصفح"
+msgstr[1] "انقر للمتابعة وفتح{0} التصفحات"
 
 msgid "Cancel"
 msgstr "إلغاء"
 
 msgid "Click to abort launching external browsers"
-msgstr ""
+msgstr "أنقر لإلغاء فتح متصفحات الإنترنات الخارجية"
 
 msgid "Please select at least one already uploaded node, way, or relation."
-msgstr ""
+msgstr "الرجاء تحديد على الأقل عقدة , وسيلة أو علاقة قد تم تحميلها."
 
 msgid "Please select the target layer."
-msgstr "الرجاء إنتقاء الطبقة الهدف."
+msgstr "الرجاء تحديد الطبقة المستهدفة."
 
 msgid "Select target layer"
-msgstr "إنتقاء الطبقة الهدف."
+msgstr "تحديد الطبقة المستهدفة."
 
 msgid "Merge"
-msgstr "إدمج"
+msgstr "إدماج"
 
 msgid ""
 "<html>There are no layers the source layer<br>''{0}''<br>could be merged "
 "to.</html>"
-msgstr ""
+msgstr "<html>لا توجد طبقات حيث يمكن دمج طبقة المصدر<br>''{0}''<br>.</html>"
 
 msgid "No target layers"
-msgstr "لا يوجد طبقات هدف"
+msgstr "لا يوجد طبقات مستهدفة"
 
 msgid "Select"
 msgstr "إختر"
@@ -222,36 +220,38 @@ msgstr "إختر"
 msgid ""
 "Set the selected elements on the map to the selected items in the list above."
 msgstr ""
+"إضبط العناصر المحددة في الخريطة على العناصر المحددة على القائمة أعلاه."
 
 msgid "Add imagery layer {0}"
-msgstr ""
+msgstr "إضافة طبقة صور {0}"
 
 msgid "Select image format for WMS layer"
-msgstr ""
+msgstr "تحديد بنية الصورة من أجل طبقة خدمة خرائط الويب"
 
 msgid "Select WMS layers"
-msgstr ""
+msgstr "تحديد طبقات خدمة خرائط الويب"
 
 msgid "Add layers"
-msgstr ""
+msgstr "إضافة طبقات"
 
 msgid "Invalid service URL."
-msgstr ""
+msgstr "خدمة URL غير صحيحة"
 
 msgid "WMS Error"
-msgstr ""
+msgstr "خطأ WMS"
 
 msgid "Could not retrieve WMS layer list."
-msgstr ""
+msgstr "لا يمكن إسترجاع قائمة طبقات WMS."
 
 msgid "Could not parse WMS layer list."
-msgstr ""
+msgstr "لا يمكن تحليل قائمة طبقات WMS."
 
 msgid "Add Node..."
 msgstr "أضف عقدة..."
 
 msgid "Add a node by entering latitude / longitude or easting / northing."
 msgstr ""
+"إضافة عقدة عن طريق إدخال خطوط الطول / العرض أو المسافة نحو الشرق / الشمال."
 
 msgid "Edit: {0}"
 msgstr "حرّر : {0}"
@@ -260,23 +260,23 @@ msgid "Align Nodes in Circle"
 msgstr "نظم العقد على حلقة"
 
 msgid "Move the selected nodes into a circle."
-msgstr "حرّك العقد المحددة إلى الحلقة"
+msgstr "أنقل العقد المحددة إلى الحلقة"
 
 msgid "Tool: {0}"
-msgstr "العدة: {0}"
+msgstr "الأداة: {0}"
 
 msgid "Not enough nodes in selected ways."
-msgstr ""
+msgstr "لا يوجد عقد كافية في الطرق المحددة"
 
 msgid "Please select at least four nodes."
 msgstr "الرجاء إختيار أربعة عقد على الأقل."
 
 msgid "Cannot determine center of selected nodes."
-msgstr ""
+msgstr "لا يمكن تحديد مركز العقد المحددة"
 
 msgid ""
 "One or more nodes involved in this action is outside of the downloaded area."
-msgstr ""
+msgstr "عقدة واحدة أو أكثر مشاركة في هذه العملية هي خارج الخريطة المحملة."
 
 msgid "Align Nodes in Line"
 msgstr "صفّ العقد في خطّ مستقيم"
@@ -288,13 +288,13 @@ msgid "Please select at least three nodes."
 msgstr "الرجاء إختيار على الأقل ثلاثة عقد."
 
 msgid "Can not align a polygon. Abort."
-msgstr ""
+msgstr "لا يمكن محاذاة مضلع. إلغاء."
 
 msgid "Intersection of three or more ways can not be solved. Abort."
-msgstr ""
+msgstr "لا يمكن حل تقاطع ثلاثة طرق أو أكثر. إلغاء."
 
 msgid "Two parallels ways found. Abort."
-msgstr ""
+msgstr "العثور على خطين متوازيين. إلغاء."
 
 msgid "data"
 msgstr "المعطيات"
@@ -312,7 +312,7 @@ msgid "download"
 msgstr "نزّل"
 
 msgid "problem"
-msgstr ""
+msgstr "مشكلة"
 
 msgid "previous"
 msgstr "السابق"
@@ -339,10 +339,10 @@ msgid "No conflicts to zoom to"
 msgstr "لا  تناقضات للتكبير عليها"
 
 msgid "Changeset Manager"
-msgstr ""
+msgstr "إدارة مجموعة التغييرات"
 
 msgid "Toggle visibility of Changeset Manager window"
-msgstr ""
+msgstr "تبديل ظهور نافذة إدارة مجموعة التغييرات"
 
 msgid "Close open changesets"
 msgstr "أغلق حزمات التغييرات المفتوحة"
@@ -383,12 +383,11 @@ msgstr ""
 msgid ""
 "Could not combine ways<br>(They could not be merged into a single string of "
 "nodes)"
-msgstr ""
+msgstr "لا يمكن ضم الخطوط <br> (لا يمكن دمجها في سلسلة واحدة من العقد)"
 
 msgid "Combine {0} way"
 msgid_plural "Combine {0} ways"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "ضم {0} خط"
 
 msgid "Please select at least two ways to combine."
 msgstr "الرجاء إختر على الأقل طريقتين للدمج."
@@ -403,10 +402,10 @@ msgid "Please select something to copy."
 msgstr "الرجاء إختيار شيء للنسخ."
 
 msgid "Copy Coordinates"
-msgstr ""
+msgstr "نسخ الإحداثيات"
 
 msgid "Copy coordinates of selected nodes to clipboard."
-msgstr ""
+msgstr "نسخ إحداثيات العقد المحددة إلى الحافظة."
 
 msgid "Create Circle"
 msgstr "إنشاء حلقة"
@@ -418,15 +417,16 @@ msgid ""
 "Please select exactly two or three nodes or one way with exactly two or "
 "three nodes."
 msgstr ""
+"الرجاء تحديد اثنين أو ثلاث عقد بالضبط أو خط واحد مع اثنين أو ثلاث عقد بالضبط."
 
 msgid "Those nodes are not in a circle. Aborting."
 msgstr "هذه العقد لا تشكل دائرة. جاري الإجهاض العملية."
 
 msgid "Update multipolygon"
-msgstr ""
+msgstr "تحديث مضلع"
 
 msgid "Create multipolygon"
-msgstr ""
+msgstr "إنشاء مضلع"
 
 msgid "No data loaded."
 msgstr "لم يتم تحميل أي معطيات."
@@ -441,22 +441,28 @@ msgid "Delete selected objects."
 msgstr "امحي الأغراض المختارة."
 
 msgid "Toggle dialogs panel"
-msgstr ""
+msgstr "تبديل لوحة الحوارات"
 
 msgid "Toggle dialogs panel, maximize mapview"
-msgstr ""
+msgstr "تبديل لوحة الحوارات، وتكبير عرض الخريطة"
+
+msgid "Distribute Nodes"
+msgstr "توزيع العقد"
 
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr "وزع العقد المختارة على مسافاة متساوية على طول خط."
 
 msgid "Ignoring {0} nodes with null coordinates"
-msgstr ""
+msgstr "تجاهل {0} عقدة مع إحداثيات فارغة"
 
 msgid ""
 "Please select :\n"
 "* One no self-crossing way with at most two of its nodes;\n"
 "* Three nodes."
 msgstr ""
+"الرجاء إختيار :\n"
+"* خط واحد ذاتي التقاطع مع اثنين من عقده على الأكثر؛\n"
+"* ثلاث عقد."
 
 msgid "Download from OSM..."
 msgstr "نزّل من أو.أس.أم ..."
@@ -468,30 +474,32 @@ msgid ""
 "<html>This action will require {0} individual<br>download requests. Do you "
 "wish<br>to continue?</html>"
 msgstr ""
+"<html>هذا الإجراء سيتطلب {0} طلب <br> تحميل فردي. هل ترغب<br>في "
+"المتابعة؟</html>"
 
 msgid "Download data"
-msgstr ""
+msgstr "بيانات محملة"
 
 msgid "Download notes in current view"
-msgstr ""
+msgstr "ملاحظات محملة على العرض الحالي"
 
 msgid "Download object..."
-msgstr ""
+msgstr "تحميل الجسم..."
 
 msgid "Download OSM object by ID."
-msgstr ""
+msgstr "تحميل جسم OSM من طرف ID."
 
 msgid "Download parent ways/relations..."
-msgstr ""
+msgstr "تحميل الخطوط/العلاقات الأبوية..."
 
 msgid "Download objects referring to one of the selected objects"
-msgstr ""
+msgstr "تنزيل الأجسام التي تشير الى الأجسام المختارة"
 
 msgid "Duplicate"
 msgstr "نسخة مطابقة"
 
 msgid "Duplicate selection by copy and immediate paste."
-msgstr ""
+msgstr "تكرار التحديد بالنسخ واللصق الفوري."
 
 msgid "Exit"
 msgstr "أخرُج"
@@ -500,22 +508,22 @@ msgid "Exit the application."
 msgstr "أخرُج من التطبيق."
 
 msgid "Expert Mode"
-msgstr ""
+msgstr "نمط الخبير"
 
 msgid "Enable/disable expert mode"
-msgstr ""
+msgstr "تفعيل/توقيف نمط الخبير"
 
 msgid "Follow line"
 msgstr ""
 
 msgid "Continues drawing a line that shares nodes with another line."
-msgstr ""
+msgstr "مواصلة رسم الخط الذي يشارك عقد مع خط آخر."
 
 msgid "Follow"
-msgstr ""
+msgstr "متابعة"
 
 msgid "Fullscreen view"
-msgstr ""
+msgstr "عرض ملء الشاشة"
 
 msgid "Toggle fullscreen view"
 msgstr "تبديل عرض ملء الشاشة"
@@ -536,18 +544,18 @@ msgid "History"
 msgstr "الخط الزمني"
 
 msgid "Display history information about OSM ways, nodes, or relations."
-msgstr ""
+msgstr "عرض معلومات التاريخ عن خطوط، عقد أو علاقات OSM."
 
 msgid "Show history"
-msgstr ""
+msgstr "مشاهدة التاريخ"
 
 msgid "History (web)"
-msgstr ""
+msgstr "تاريخ (ويب)"
 
 msgid ""
 "Display history information about OSM ways, nodes, or relations in web "
 "browser."
-msgstr ""
+msgstr "عرض معلومات التاريخ حول خطوط، عقد أو علاقات OSM في متصفح الويب."
 
 msgid "New offset"
 msgstr ""
@@ -567,9 +575,12 @@ msgid ""
 "You can also enter east and north offset in the {0} coordinates.\n"
 "If you want to save the offset as bookmark, enter the bookmark name below"
 msgstr ""
+"إستخدام مفاتيح الأسهم أو إسحب طبقة الصور بالفأرة لضبط إزاحة الصور.\n"
+"يمكنك أيضا إدخال إزاحة الشرق والشمال في إحداثيات {0}.\n"
+"إذا كنت تريد حفظ الإزاحة كعلامة مرجعية، أدخل إسم العلامة المرجعية أدناه"
 
 msgid "Offset: "
-msgstr ""
+msgstr "إزاحة: "
 
 msgid "Bookmark name: "
 msgstr ""
@@ -578,131 +589,132 @@ msgid "Overwrite"
 msgstr "الكتابة فوقه"
 
 msgid "Offset bookmark already exists. Overwrite?"
-msgstr ""
+msgstr "مرجعية الإزاحة موجودة من قبل. إستبدال؟"
 
 msgid "Advanced info"
-msgstr ""
+msgstr "معلومات متقدمة"
 
 msgid ""
 "Display advanced object information about OSM nodes, ways, or relations."
-msgstr ""
+msgstr "عرض المعلومات المتقدمة للجسم حول عقد، خطوط أو علاقات OSM."
 
 msgid "Advanced info (web)"
-msgstr ""
+msgstr "معلومات متقدمة (ويب)"
 
 msgid ""
 "Display object information about OSM nodes, ways, or relations in web "
 "browser."
-msgstr ""
+msgstr "عرض معلومات الجسم حول عقد، خطوط أو علاقات OSM في متصفح ويب."
 
 msgid "Join overlapping Areas"
-msgstr ""
+msgstr "ضم مناطق متداخلة"
 
 msgid "Joins areas that overlap each other"
-msgstr ""
+msgstr "ضم المساحات التي تتداخل فيما بينها"
 
 msgid "Please select at least one closed way that should be joined."
-msgstr ""
+msgstr "الرجاء تحديد خط مغلق واحد على الأقل يجب ضمه."
 
 msgid ""
 "One of the selected ways is not closed and therefore cannot be joined."
-msgstr ""
+msgstr "أحد الخطوط المحددة ليس مغلق و بالتالي لا يمكن ضمه."
 
 msgid "Join area confirmation"
-msgstr ""
+msgstr "تأكيد انضمام المساحة"
 
 msgid "The selected way has nodes outside of the downloaded data region."
 msgid_plural ""
 "The selected ways have nodes outside of the downloaded data region."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "الخطوط المحددة لديها عقد خارج منطقة البيانات المحملة."
 
 msgid "This can lead to nodes being deleted accidentally."
-msgstr ""
+msgstr "قد يؤدي هذا إلى حذف العقد عن طريق الخطأ."
 
 msgid "Are you really sure to continue?"
-msgstr ""
+msgstr "هل أنت متأكد حقا من المواصلة؟"
 
 msgid "Please abort if you are not sure"
 msgstr "الرجاء إجهاض العملية إن لم تكن أكيداَ"
 
 msgid "The selected area is incomplete. Continue?"
-msgstr ""
+msgstr "المنطقة المحددة غير مكتملة. متابعة؟"
 
 msgid "No intersection found. Nothing was changed."
-msgstr ""
+msgstr "لم يتم العثور على أي تقاطع. لم يتغير أي شيء."
 
 msgid "Move tags from ways to relations"
-msgstr ""
+msgstr "نقل الأوسمة من الخطوط إلى العلاقات"
 
 msgid "Reverting changes"
-msgstr ""
+msgstr "عكس التغييرات"
 
 msgid "Removed duplicate nodes"
-msgstr ""
+msgstr "إزالة العقد المكررة"
 
 msgid "Added node on all intersections"
 msgstr "تمت إضافة العقدة على كل التقطعات"
 
 msgid "Assemble new polygons"
-msgstr ""
+msgstr "تجميع مضلعات جديدة"
 
 msgid "Delete relations"
-msgstr ""
+msgstr "حذف العلاقات"
 
 msgid "Delete Ways that are not part of an inner multipolygon"
-msgstr ""
+msgstr "حذف الخطوط التي ليست جزءا من متعدد المضلعات الداخلي"
 
 msgid "Joined overlapping areas"
-msgstr ""
+msgstr "الإنضمام إلى المساحات المتداخلة"
 
 msgid ""
 "Some of the ways were part of relations that have been modified.<br>Please "
 "verify no errors have been introduced."
 msgstr ""
+"بعض الخطوط كانت جزءا من العلاقات التي تم تعديلها.<br> يرجى التحقق من عدم "
+"إدخال أية أخطاء."
 
 msgid "Fix tag conflicts"
 msgstr "صلّح تضاربات التسمية"
 
 msgid "Split ways into fragments"
-msgstr ""
+msgstr "تقسيم الخطوط إلى أجزاء"
 
 msgid "Sorry. Cannot handle multipolygon relations with multiple outer ways."
-msgstr ""
+msgstr "آسف. لا يمكن معالجة خطوط متعدد مضلعات مع العديد من الخطوط الخارجية."
 
 msgid ""
 "Sorry. Cannot handle way that is outer in multiple multipolygon relations."
-msgstr ""
+msgstr "آسف. لا يمكن معالجة خط خارجي في علاقات متعددة لمتعدد مضلعات."
 
 msgid ""
 "Sorry. Cannot handle way that is both inner and outer in multipolygon "
 "relations."
-msgstr ""
+msgstr "آسف. لا يمكن معالجة خط خارجي وداخلي معا في علاقات متعدد مضلعات."
 
 msgid ""
 "Sorry. Cannot handle way that is inner in multiple multipolygon relations."
-msgstr ""
+msgstr "آسف. لا يمكن معالجة خط داخلي في علاقات متعددة لمتعدد مضلعات."
 
 msgid "Removed Element from Relations"
 msgstr "تم حذف العنصر من العلاقات"
 
 msgid "Remove tags from inner ways"
-msgstr ""
+msgstr "إزالة الأوسمة من الخطوط الداخلية"
 
 msgid "Join Areas Function"
-msgstr ""
+msgstr "وظيفة ضم المساحات"
 
 msgid "Join Node to Way"
 msgstr "ضمّ العقدة إلى الطريق"
 
 msgid "Include a node into the nearest way segments"
-msgstr ""
+msgstr "إدراج عقدة في أقرب قطع الخطوط"
 
 msgid "Move Node onto Way"
-msgstr ""
+msgstr "نقل العقدة إلى الخط"
 
 msgid "Move the node onto the nearest way segments and include it"
-msgstr ""
+msgstr "نقل العقدة على أقرب قطع الخطوط وإدراجها"
 
 msgid "No Shortcut"
 msgstr "لا إختصار"
@@ -711,7 +723,7 @@ msgid "Jump To Position"
 msgstr "أقفز إلى الموقع"
 
 msgid "Opens a dialog that allows to jump to a specific location"
-msgstr ""
+msgstr "فتح الحوار الذي يسمح بالإنتقال إلى موقع معين"
 
 msgid "Enter Lat/Lon to jump to position."
 msgstr ""
@@ -1031,6 +1043,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr "ألصِق"
 
@@ -1951,15 +1987,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr "إنهي الرسم."
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -1981,6 +2008,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2099,9 +2135,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2315,9 +2348,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr "عبارة منتظمة"
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2531,6 +2570,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2573,6 +2616,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3024,6 +3070,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3141,10 +3205,44 @@ msgctxt "compass"
 msgid "E"
 msgstr "ش."
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "HTTP error {0} when loading tiles"
+msgstr ""
+
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3346,6 +3444,12 @@ msgstr "النص"
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3373,13 +3477,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -3995,9 +4099,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -4007,12 +4108,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4193,13 +4306,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4401,6 +4514,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4614,45 +4728,56 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
-msgstr "الملفّ"
+msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
-msgstr "العرض"
+msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
-msgstr "العدة"
+msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
-msgstr "الخيار"
+msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
-msgstr "التعيينات المسبقة"
+msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
+msgctxt "menu"
+msgid "Help"
+msgstr ""
+
 msgid "Menu: {0}"
 msgstr "اللائحة: {0}"
 
-msgid "Save and load the current session (list of layers, etc.)"
-msgstr ""
-
 msgid "Edit toolbar"
 msgstr ""
 
@@ -4674,8 +4799,9 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
-msgstr "سمعيّ"
+msgstr ""
 
 msgid "Do not hide toolbar"
 msgstr ""
@@ -4796,58 +4922,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgid " ({0})"
 msgstr ""
 
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgid "{0} completed in {1}"
+msgstr "{0} يكتمل في {1}"
+
+msgid "Enlarge"
 msgstr ""
 
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr ""
-
-msgid "Pos."
-msgstr ""
-
-msgid "Role"
-msgstr "الدّور"
-
-msgid "Click to close the dialog and remove the object from the relations"
-msgstr ""
-
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5276,6 +5360,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr "الدّور"
+
 msgid "Primitive"
 msgstr ""
 
@@ -5520,6 +5607,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5666,6 +5756,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5769,7 +5894,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5897,6 +6022,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5906,17 +6036,48 @@ msgstr ""
 msgid "unknown"
 msgstr "مجهول"
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -5962,6 +6123,12 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr ""
 
@@ -6091,6 +6258,12 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
+msgid "Mini map"
+msgstr ""
+
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
 msgid "List of notes"
 msgstr ""
 
@@ -6149,10 +6322,15 @@ msgstr ""
 msgid "Enter the ID of the object that should be downloaded"
 msgstr ""
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6181,6 +6359,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr "العلاقات: {0}"
 
+msgid "Selection"
+msgstr "الخيار"
+
 msgid "Open a selection list window."
 msgstr "إفتح نافذة لائحة خيارات."
 
@@ -6271,6 +6452,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -6865,6 +7052,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6956,14 +7149,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7136,6 +7328,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7671,6 +7869,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8517,6 +8718,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr ""
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr "خصّص اللون"
 
@@ -8570,6 +8871,9 @@ msgstr "إحفظ ملف GPX"
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8590,7 +8894,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8673,139 +8977,39 @@ msgstr ""
 msgid "Save OSM file"
 msgstr "إحفظ ملف أو.أس.أم"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
+msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
+msgid "Validation errors"
 msgstr ""
 
-msgid "Auto Zoom"
+msgid "No validation errors"
 msgstr ""
 
-msgid "Auto load tiles"
-msgstr ""
-
-msgid "Show Errors"
-msgstr ""
-
-msgid "Load Tile"
-msgstr ""
-
-msgid "Show Tile Info"
-msgstr ""
-
-msgid "Load All Tiles"
-msgstr ""
-
-msgid "Load All Error Tiles"
-msgstr ""
-
-msgid "Increase zoom"
-msgstr ""
-
-msgid "Decrease zoom"
-msgstr ""
-
-msgid "Snap to tile size"
-msgstr ""
-
-msgid "Flush Tile Cache"
-msgstr ""
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "EPSG:4326 and Mercator projection are supported"
-msgstr ""
-
-msgid "Validation errors"
-msgstr ""
-
-msgid "No validation errors"
-msgstr ""
-
-msgid "Blank Layer"
-msgstr ""
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "Download visible tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-
-msgid "Change resolution"
-msgstr ""
-
-msgid "Reload erroneous tiles"
-msgstr ""
-
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Automatic downloading"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Zoom to native resolution"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Supported projections are: {0}"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Save WMS file"
+msgid "Try Again"
 msgstr ""
 
-msgid "Correlate to GPX"
+msgid "No images could be matched!"
 msgstr ""
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
@@ -8892,24 +9096,9 @@ msgstr ""
 msgid "Offset:"
 msgstr ""
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
 msgid "Correlate"
 msgstr ""
 
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9103,9 +9292,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr "صور  (*.jpg)JPEG"
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9168,9 +9354,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr "المساحة القصوى للمطلب:"
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9800,9 +9983,6 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 "يجب عليك إعادة بدء تشغيل ج.أو.أس.أم كي تُأخذ بعض التغييرات بعين الإعتبار."
@@ -9810,6 +9990,9 @@ msgstr ""
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr ""
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -10603,6 +10786,21 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
+msgid "1. Enter getCapabilities URL"
+msgstr ""
+
+msgid "2. Enter name for this layer"
+msgstr ""
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr ""
 
@@ -10621,6 +10819,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10642,6 +10852,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10684,9 +10897,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr ""
 
@@ -10711,36 +10921,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11676,6 +11871,14 @@ msgstr "طبّق الخيار المسبق"
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] "غيّر غرض {0}"
@@ -11788,6 +11991,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr "التعيينات المسبقة"
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12041,6 +12247,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12579,6 +12788,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12964,6 +13176,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13958,6 +14183,9 @@ msgstr "حدّث"
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr "العرض"
+
 msgid "Blue:"
 msgstr ""
 
@@ -13997,7 +14225,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -14009,9 +14237,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14120,6 +14345,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14133,12 +14361,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14175,10 +14409,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14205,6 +14445,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14229,7 +14472,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14244,6 +14487,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14256,12 +14502,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14282,6 +14522,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14314,10 +14557,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14347,6 +14587,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14362,154 +14608,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14524,9 +14776,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14656,6 +14917,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14671,7 +14947,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -14997,6 +15273,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15081,11 +15362,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15139,7 +15415,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15154,9 +15430,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15237,6 +15510,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15275,6 +15556,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15350,9 +15634,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15758,6 +16039,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15782,10 +16071,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15802,6 +16087,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15818,11 +16107,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15838,6 +16139,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15850,6 +16155,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15877,6 +16186,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr "رسم دخول/إجرة"
 
@@ -16268,6 +16589,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16344,6 +16668,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr ""
 
@@ -16881,6 +17208,12 @@ msgstr "كاميرا مراقبة السير"
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17070,8 +17403,13 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
 msgid "Water"
-msgstr "الماء"
+msgstr ""
+
+msgctxt "sub group"
+msgid "Water"
+msgstr ""
 
 msgid "Drain"
 msgstr "مسرب"
@@ -17123,6 +17461,10 @@ msgstr "خزان"
 msgid "Covered Reservoir"
 msgstr "خزان مغطى"
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17264,6 +17606,120 @@ msgstr ""
 msgid "public"
 msgstr ""
 
+msgid "Marine Fuel"
+msgstr ""
+
+msgid "Agip"
+msgstr ""
+
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
 msgid "Pier"
 msgstr "رصيف ميناء"
 
@@ -17380,6 +17836,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -17503,148 +17962,37 @@ msgstr ""
 msgid "Fuel"
 msgstr "وقود"
 
-msgid "Agip"
+msgid "With shop"
 msgstr ""
 
-msgid "Aral"
+msgid "convenience"
 msgstr ""
 
-msgid "Avia"
+msgid "kiosk"
 msgstr ""
 
-msgid "BP"
+msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
-msgid "Chevron"
+msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Citgo"
+msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
-msgid "Eni"
+msgid "1/50 mix (mofa/moped)"
 msgstr ""
 
-msgid "Esso"
+msgid "Fuel cards:"
 msgstr ""
 
-msgid "Exxon"
+msgid "DKV"
 msgstr ""
 
-msgid "Gulf"
+msgid "Routex"
 msgstr ""
 
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
-msgid "With shop"
-msgstr ""
-
-msgid "convenience"
-msgstr ""
-
-msgid "kiosk"
-msgstr ""
-
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
-msgid "Diesel (Gas To Liquid - ultimate diesel)"
-msgstr ""
-
-msgid "Diesel for Heavy Good Vehicles"
-msgstr ""
-
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
-msgid "1/25 mix (mofa/moped)"
-msgstr ""
-
-msgid "1/50 mix (mofa/moped)"
-msgstr ""
-
-msgid "Fuel cards:"
-msgstr ""
-
-msgid "DKV"
-msgstr ""
-
-msgid "Routex"
-msgstr ""
-
-msgid "UTA"
+msgid "UTA"
 msgstr ""
 
 msgid "Charging Station"
@@ -17847,9 +18195,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr "فلق الطريق"
-
 msgid "stop position"
 msgstr ""
 
@@ -17868,6 +18213,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr "فلق الطريق"
+
 msgid "Route Master"
 msgstr ""
 
@@ -18070,6 +18418,12 @@ msgstr "فندق"
 msgid "Stars"
 msgstr "النجوم"
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr "فندق (رخيص)"
 
@@ -18160,6 +18514,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18374,6 +18731,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18861,8 +19221,8 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
-msgstr "إعادة تصنيع الأشياء"
+msgid "Recycling Container"
+msgstr ""
 
 msgid "Batteries"
 msgstr "بطاريات"
@@ -18870,19 +19230,46 @@ msgstr "بطاريات"
 msgid "Cans"
 msgstr "علب (معدنية)"
 
+msgid "Cardboard"
+msgstr ""
+
+msgid "Electrical Appliances"
+msgstr ""
+
 msgid "Glass"
 msgstr "زجاج"
 
+msgid "Glass Bottles"
+msgstr ""
+
+msgid "Green Waste"
+msgstr ""
+
 msgid "Paper"
 msgstr "ورق"
 
+msgid "Plastic"
+msgstr ""
+
+msgid "Plastic Bottles"
+msgstr ""
+
+msgid "Plastic Packaging"
+msgstr ""
+
 msgid "Scrap Metal"
 msgstr ""
 
-msgid "container"
+msgid "Shoes"
+msgstr "أحذية"
+
+msgid "Small Appliances"
+msgstr ""
+
+msgid "Waste"
 msgstr ""
 
-msgid "centre"
+msgid "Recycling Centre"
 msgstr ""
 
 msgid "Waste Basket/Trash Can"
@@ -19086,6 +19473,9 @@ msgstr "سلاح الرامي"
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr "تسلق"
 
@@ -19261,12 +19651,18 @@ msgstr ""
 msgid "Basketball"
 msgstr "كرة السلّة"
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr ""
 
@@ -19282,13 +19678,13 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
@@ -19312,9 +19708,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19333,9 +19726,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr "من صنع الإنسان"
 
@@ -19408,6 +19798,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20728,9 +21126,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr "أحذية"
-
 msgid "Outdoor"
 msgstr "نشاطات في الخلاء"
 
@@ -21743,10 +22138,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22173,6 +22568,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22197,6 +22595,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22257,6 +22667,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22347,9 +22760,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22719,6 +23141,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22773,9 +23198,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23519,47 +23941,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
+msgstr ""
+
+msgid "Color Threshold"
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Use HSV based algorithm"
 msgstr ""
 
-msgid "merge nodes"
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23568,10 +23999,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24174,6 +24617,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr ""
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25293,352 +25739,658 @@ msgid ""
 "with [irs rectify] in subject."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr "جاري البحث عن خط الشاطئ"
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr "خطء حين إنشاء مجلد الخابية: {0}"
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr "جاري فحص الخابية..."
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr "حجم الخابية الأقصى (م. بايت)"
+
+msgid "Maximum cache age (days)"
+msgstr "عُمر الخابية الأقصى (أيام)"
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr "الحجم الأقصى لكل مجلد خابية بلــبايت. الحجم الغيابي هو 300 م. بايت"
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr "العُمر الأقصى لكل مجلد خابية بلــبايت. العُمر الغيابي هو 100 يوم"
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
+msgstr ""
+
+msgid "Connecting"
+msgstr ""
+
+msgid "Connected"
+msgstr ""
+
+msgid "no name"
+msgstr ""
+
+msgid "Live GPS"
+msgstr ""
+
+msgid "Show GPS data."
+msgstr ""
+
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Speed"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Course"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
-msgstr "جاري البحث عن خط الشاطئ"
+msgid "Join/unjoin pictures"
+msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
-msgstr "خطء حين إنشاء مجلد الخابية: {0}"
+msgid "Upload pictures."
+msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
-msgstr "جاري فحص الخابية..."
+msgid "Start walk mode"
+msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
+msgid "Explore"
 msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
-msgstr "حجم الخابية الأقصى (م. بايت)"
+msgid "Months"
+msgstr ""
 
-msgid "Maximum cache age (days)"
-msgstr "عُمر الخابية الأقصى (أيام)"
+msgid "Days"
+msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
-msgstr "الحجم الأقصى لكل مجلد خابية بلــبايت. الحجم الغيابي هو 300 م. بايت"
+msgid "Jump to red"
+msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
-msgstr "العُمر الأقصى لكل مجلد خابية بلــبايت. العُمر الغيابي هو 100 يوم"
+msgid "Jumps to the picture at the other side of the red line"
+msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25659,6 +26411,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr "الزاوية"
 
@@ -25717,47 +26472,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -25990,6 +26704,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr "العدة"
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27207,6 +27924,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27378,6 +28116,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27387,6 +28128,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27567,6 +28311,9 @@ msgstr "القيمة الجديدة لِــ {0}"
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27745,6 +28492,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27754,6 +28534,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -27990,9 +28773,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29475,9 +30255,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
@@ -29561,7 +30338,7 @@ msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
 
 msgid "Go driving"
-msgstr ""
+msgstr "الذهاب للقيادة"
 
 msgid "Drive a race car on this layer"
-msgstr ""
+msgstr "قيادة سيارة سباق على هذه الطبقة"
diff --git a/i18n/po/ast.po b/i18n/po/ast.po
index d26b471..5c4ac6e 100644
--- a/i18n/po/ast.po
+++ b/i18n/po/ast.po
@@ -7,16 +7,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
-"PO-Revision-Date: 2015-03-26 12:59+0000\n"
-"Last-Translator: Dirk Stöcker <launchpad at dstoecker.de>\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
+"PO-Revision-Date: 2015-08-19 16:42+0000\n"
+"Last-Translator: Simon Legner <Unknown>\n"
 "Language-Team: Asturian <ast at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:33+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:34+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: ast\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -97,21 +97,18 @@ msgstr "Cargando les preferencies d''imaxes"
 msgid "Updating user interface"
 msgstr "Anovando interfaz d''usuariu"
 
-msgid "{0} completed in {1}"
-msgstr "{0} completáu en {1}"
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "Inorando URL de ficheru mal formada: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "Inorando URL mal formada: \"{0}\""
 
 msgid "Warning"
 msgstr "Avisu"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "Inorando URL de ficheru mal formada: \"{0}\""
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr "El parámetru \"downloadgps\" nun aceuta nomes o URLs de ficheros"
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "Inorando URL mal formada: \"{0}\""
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -203,7 +200,7 @@ msgid "Click to abort launching external browsers"
 msgstr "Calca pa encaboxar el llanzamientu de restoladores esternos"
 
 msgid "Please select at least one already uploaded node, way, or relation."
-msgstr "Esbilla polo menos un nodu, vía o rellación yá xubíu."
+msgstr "Esbilla polo menos un nudu, vía o rellación yá xubíu."
 
 msgid "Please select the target layer."
 msgstr "Por favor, seleiciona la capa destín."
@@ -256,45 +253,45 @@ msgid "Could not parse WMS layer list."
 msgstr "Non se pudo analizar la llista de les capes WMS."
 
 msgid "Add Node..."
-msgstr "Amestar nodu..."
+msgstr "Amestar nudu..."
 
 msgid "Add a node by entering latitude / longitude or easting / northing."
-msgstr "Amestar un nodu escribiendo llatitú / llonxitú o este / norte."
+msgstr "Amestar un nudu escribiendo llatitú / llonxitú o este / norte."
 
 msgid "Edit: {0}"
 msgstr "Editar: {0}"
 
 msgid "Align Nodes in Circle"
-msgstr "Alliniar nodos en círculu"
+msgstr "Alliniar nudos en círculu"
 
 msgid "Move the selected nodes into a circle."
-msgstr "Mover los nodos esbillaos nún círculu"
+msgstr "Mover los nudos esbillaos nun círculu."
 
 msgid "Tool: {0}"
 msgstr "Ferramienta: {0}"
 
 msgid "Not enough nodes in selected ways."
-msgstr "Nun hai abondos nodos nes víes escoyíes."
+msgstr "Nun hai nudos abondo nes víes escoyíes."
 
 msgid "Please select at least four nodes."
-msgstr "Por favor, seleiciona polo menos cuatro nodos."
+msgstr "Por favor, seleiciona polo menos cuatro nudos."
 
 msgid "Cannot determine center of selected nodes."
-msgstr "Nun pue determinase el centru de los nodos escoyíos."
+msgstr "Nun pué determinase’l centru de los nudos escoyíos."
 
 msgid ""
 "One or more nodes involved in this action is outside of the downloaded area."
 msgstr ""
-"Un o más nodos que participen nesta acción atópase fora de la zona descarga."
+"Unu o más nudos que participen nesta aición ta fora de la zona descargada."
 
 msgid "Align Nodes in Line"
-msgstr "Alliniar en reuta los nodos"
+msgstr "Alliniar los nudos en reuta"
 
 msgid "Move the selected nodes in to a line."
-msgstr "Mover los nodos esbillaos nuna llinia."
+msgstr "Mover los nudos esbillaos a una llinia."
 
 msgid "Please select at least three nodes."
-msgstr "Por favor seleiciona polo menos trés nodos"
+msgstr "Seleiciona polo menos trés nudos"
 
 msgid "Can not align a polygon. Abort."
 msgstr "Nun se pue alliniar un polígonu. Albortar."
@@ -336,7 +333,7 @@ msgid "Information"
 msgstr "Información"
 
 msgid "Zoom to {0}"
-msgstr "Acercar a {0}"
+msgstr "Averar a {0}"
 
 msgid "Zoom the view to {0}."
 msgstr "Ampliar la vista a {0}."
@@ -394,8 +391,8 @@ msgid ""
 "Could not combine ways<br>(They could not be merged into a single string of "
 "nodes)"
 msgstr ""
-"Nun foi posible combinar les víes<br>(nun pudieron ser combinaes nuna única "
-"cadena de nodos)"
+"Nun pudieron combinase les víes<br>(Nun pudieron combinase n''una cadena "
+"única de nudos)"
 
 msgid "Combine {0} way"
 msgid_plural "Combine {0} ways"
@@ -418,23 +415,23 @@ msgid "Copy Coordinates"
 msgstr "Copiar coordenaes"
 
 msgid "Copy coordinates of selected nodes to clipboard."
-msgstr "Copiar al cartafueyu les coordenaes de los nodos esbillaos."
+msgstr "Copiar al cartafueyu les coordenaes de los nudos esbillaos."
 
 msgid "Create Circle"
 msgstr "Crear un círculu"
 
 msgid "Create a circle from three selected nodes."
-msgstr "Crear un círculu seleicionando trés nodos."
+msgstr "Crear un círculu seleicionando trés nudos."
 
 msgid ""
 "Please select exactly two or three nodes or one way with exactly two or "
 "three nodes."
 msgstr ""
-"Seleiciona exautamente dos o trés nodos, o una vía con dos o trés nodos "
+"Seleiciona exautamente dos o trés nudos, o una vía con dos o trés nudos "
 "namái."
 
 msgid "Those nodes are not in a circle. Aborting."
-msgstr "Los nodos nun tan en círculu. Encaboxando."
+msgstr "Los nudos nun tan en círculu. Encaboxando."
 
 msgid "Update multipolygon"
 msgstr "Actualizar multipolygon"
@@ -460,19 +457,26 @@ msgstr "Activar panel de diálogos"
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Conmuta el panel de diálogos, maximiza la vista del mapa"
 
+msgid "Distribute Nodes"
+msgstr "Distribuir los nudos"
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
-"Distribuir los nodos seleicionaos a distancies iguales a lo llargo d''una "
+"Distribuir los nudos seleicionaos a distancies iguales a lo llargo d''una "
 "llinia."
 
 msgid "Ignoring {0} nodes with null coordinates"
-msgstr "Ignorando {0} nodos con coordenaes nules"
+msgstr "Inorando {0} nudos con coordenaes nules"
 
 msgid ""
 "Please select :\n"
 "* One no self-crossing way with at most two of its nodes;\n"
 "* Three nodes."
 msgstr ""
+"Seleiciona :\n"
+"* Una vía que nun se cruce con ella mesma con dos de los sos nudos como "
+"muncho;\n"
+"* Tres nudos."
 
 msgid "Download from OSM..."
 msgstr "Descargar d''OSM..."
@@ -491,7 +495,7 @@ msgid "Download data"
 msgstr "Descargar datos"
 
 msgid "Download notes in current view"
-msgstr ""
+msgstr "Baxa les notes de la vista actual"
 
 msgid "Download object..."
 msgstr "Descargar oxetu..."
@@ -528,7 +532,7 @@ msgid "Follow line"
 msgstr "Siguir la llinia"
 
 msgid "Continues drawing a line that shares nodes with another line."
-msgstr "Siguir dibuxando una llinia que comparte nodos con otra llinia."
+msgstr "Siguir dibuxando una llinia que comparte nudos con otra llinia."
 
 msgid "Follow"
 msgstr "Siguir"
@@ -556,7 +560,7 @@ msgstr "Historial"
 
 msgid "Display history information about OSM ways, nodes, or relations."
 msgstr ""
-"Amostrar la información del historial de víes, nodos o rellaciones d''OSM."
+"Amostrar la información del historial de víes, nudos o rellaciones d''OSM."
 
 msgid "Show history"
 msgstr "Amosar historial"
@@ -568,7 +572,7 @@ msgid ""
 "Display history information about OSM ways, nodes, or relations in web "
 "browser."
 msgstr ""
-"Amosar información del historial de les víes, nodos, o rellaciones d''OSM "
+"Amosar información del historial de les víes, nudos, o rellaciones d''OSM "
 "nel restolador web."
 
 msgid "New offset"
@@ -612,7 +616,7 @@ msgstr "Información avanzada"
 msgid ""
 "Display advanced object information about OSM nodes, ways, or relations."
 msgstr ""
-"Amosar información avanzada d''oxetu de les víes, nodos, o rellaciones "
+"Amosar información avanzada d''oxetu de les víes, nudos, o rellaciones "
 "d''OSM."
 
 msgid "Advanced info (web)"
@@ -622,7 +626,7 @@ msgid ""
 "Display object information about OSM nodes, ways, or relations in web "
 "browser."
 msgstr ""
-"Amosar información d''oxetu de les víes, nodos, o rellaciones d''OSM nel "
+"Amosar información d''oxetu de les víes, nudos, o rellaciones d''OSM nel "
 "restolador web."
 
 msgid "Join overlapping Areas"
@@ -647,12 +651,12 @@ msgid "The selected way has nodes outside of the downloaded data region."
 msgid_plural ""
 "The selected ways have nodes outside of the downloaded data region."
 msgstr[0] ""
-"La vía seleicionada tien nodos fuera de la rexón de datos descargada."
+"La vía seleicionada tien nudos fuera del área de datos descargada."
 msgstr[1] ""
-"Les víes seleicionaes tienen nodos fuera de la rexón de datos descargada."
+"Les víes seleicionaes tienen nudos fuera del área de datos descargada."
 
 msgid "This can lead to nodes being deleted accidentally."
-msgstr "Esto pue llevar a un desaniciu accidental de nodos"
+msgstr "Esto pué llevar a un desaniciu accidental de nudos"
 
 msgid "Are you really sure to continue?"
 msgstr "¿Tas seguru dafechu de siguir?"
@@ -673,10 +677,10 @@ msgid "Reverting changes"
 msgstr "Desfaciendo cambios"
 
 msgid "Removed duplicate nodes"
-msgstr "Se desaniciaron nodos duplicaos"
+msgstr "Desaniciáronse los nudos duplicaos"
 
 msgid "Added node on all intersections"
-msgstr "S''amestó un nodu en toles interseiciones"
+msgstr "Amestóse un nudu en toles interseiciones"
 
 msgid "Assemble new polygons"
 msgstr "Ensamblar nuevos polígonos"
@@ -737,17 +741,16 @@ msgid "Join Areas Function"
 msgstr "Función pa xuntar árees"
 
 msgid "Join Node to Way"
-msgstr "Xunir nodu a vía"
+msgstr "Xunir nudu a vía"
 
 msgid "Include a node into the nearest way segments"
-msgstr "Incluyir un nodu nos segmentos de la vía más averaos"
+msgstr "Incluyir un nudu nos segmentos de la vía más averaos"
 
 msgid "Move Node onto Way"
-msgstr "Mover nodu so la vía"
+msgstr "Mover nudu a la vía"
 
 msgid "Move the node onto the nearest way segments and include it"
-msgstr ""
-"Mover el nodo sobre''l segmentu de vía más cercana ya incluyilo n''este"
+msgstr "Mover el nudu a los segmentos de vía más cercanos ya incluílu"
 
 msgid "No Shortcut"
 msgstr "Dengún atayu"
@@ -859,34 +862,33 @@ msgid "Ignore this hint and merge anyway"
 msgstr "Ignorar esti mensaxe y fundir igualmente"
 
 msgid "Merge Nodes"
-msgstr "Xunir nodos"
+msgstr "Xunir nudos"
 
 msgid "Merge nodes into the oldest one."
-msgstr "Sumir nodos nel más antiguu."
+msgstr "Sumir nudos nel más antiguu."
 
 msgid ""
 "Please select at least two nodes to merge or one node that is close to "
 "another node."
 msgstr ""
-"Por favor escueya siquier dos nodos pa fundir o un nodo que tea cercanu a "
-"otru."
+"Seleiciona un mínimu de dos nudos pa fundir o un nudu que tea cercanu a otru."
 
 msgid "Abort Merging"
 msgstr "Encaboxar fusión"
 
 msgid "Click to abort merging nodes"
-msgstr "Calca pa encaboxar la fusión de nodos"
+msgstr "Calca pa encaboxar la fusión de nudos"
 
 msgid ""
 "Cannot merge nodes: Would have to delete way {0} which is still used by {1}"
 msgstr ""
-"Imposible fusionar nodos: Habría que eliminar la vía {0} que sigue estando "
-"usada por {1}"
+"Imposible fusionar nudos: Habría que desaniciar la vía {0} que sigue usando "
+"{1}"
 
 msgid "Merge {0} node"
 msgid_plural "Merge {0} nodes"
-msgstr[0] "Combinar {0} nodo"
-msgstr[1] "Combinar {0} nodos"
+msgstr[0] "Combinar {0} nudu"
+msgstr[1] "Combinar {0} nudos"
 
 msgid "Merge selection"
 msgstr "Xunir la seleición"
@@ -912,10 +914,10 @@ msgid "Mirror"
 msgstr "Espeyu"
 
 msgid "Mirror selected nodes and ways."
-msgstr "Espeyar los nodos y víes seleicionaos"
+msgstr "Espeyar los nudos y víes seleicionaos"
 
 msgid "Please select at least one node or way."
-msgstr "Por favor, seleiciona polo menos un nodu o vía"
+msgstr "Seleiciona polo menos un nudu o vía"
 
 msgid "up"
 msgstr "arriba"
@@ -942,10 +944,10 @@ msgid "Cannot move objects outside of the world."
 msgstr "Nun pueden movese oxetos pa fuera''l mundu."
 
 msgid "Move Node..."
-msgstr "Mover nodu..."
+msgstr "Mover nudu..."
 
 msgid "Edit latitude and longitude of a node."
-msgstr "Editar la llatitú y llonxitú d''un nodu."
+msgstr "Editar la llatitú y llonxitú d''un nudu."
 
 msgid "New Layer"
 msgstr "Capa nueva"
@@ -1040,7 +1042,7 @@ msgid "Download Data"
 msgstr "Descargar datos"
 
 msgid "Which tasks to perform?"
-msgstr ""
+msgstr "¿Qué xeres hai que facer?"
 
 msgid "Ok"
 msgstr "Aceutar"
@@ -1060,22 +1062,22 @@ msgid ""
 "shortcut for Orthogonalize / Undo. The default is Shift-Q.)"
 msgstr ""
 "<h3>Al seleicionar una o más víes, la forma s''axusta de manera que tolos "
-"ángulos formen 90 ó 180 graos.</h3>Pues amestar dos nodos a la seleición. "
-"Entós, la direición la marquen esos dos nodos de referencia. (Dempués podrás "
-"desfacer el movimientu pa dellos nodos:<br>Seleiciónalos y calca l''atayu pa "
+"ángulos formen 90 ó 180 graos.</h3>Pues amestar dos nudos a la seleición. "
+"Entós, la direición la marquen esos dos nudos de referencia. (Dempués podrás "
+"desfacer el movimientu pa dellos nudos:<br>Seleiciónalos y calca l''atayu pa "
 "Ortogonalizar / Desfacer. El predetermináu ye Mayús-Q.)"
 
 msgid "Orthogonalize Shape"
 msgstr "Ortogonalizar forma"
 
 msgid "Move nodes so all angles are 90 or 180 degrees"
-msgstr "Mueve los nodos pa tolos ángulos formen 90 o 180 graos"
+msgstr "Mueve los nudos pa que tolos ángulos formen 90 o 180 graos"
 
 msgid "Orthogonalize Shape / Undo"
 msgstr "Ortogonalizar forma / Desfacer"
 
 msgid "Undo orthogonalization for certain nodes"
-msgstr "Desfacer la ortogonalización pa ciertos nodos"
+msgstr "Desfacer la ortogonalización pa ciertos nudos"
 
 msgid "Orthogonalize / Undo"
 msgstr "Ortogonalizar / Desfacer"
@@ -1084,8 +1086,8 @@ msgid ""
 "Orthogonalize Shape / Undo<br>Please select nodes that were moved by the "
 "previous Orthogonalize Shape action!"
 msgstr ""
-"Ortogonalizar figura / Desfaer<br>Por favor ¡escueya nodos que fueren movíos "
-"pola acción de Ortogonalizar Figura anterior!"
+"Ortogonalizar figura / Desfacer<br>Seleiciona nudos que se movieron cola "
+"anterior aición Ortogonalizar Figura"
 
 msgid ""
 "<html>You are using the EPSG:4326 projection which might lead<br>to "
@@ -1097,7 +1099,7 @@ msgstr ""
 "proyeición para quitar esti avisu.<br>¿Quies siguir?</html>"
 
 msgid "Selection must consist only of ways and nodes."
-msgstr "La seleición tien de contener sólo nodos y formes"
+msgstr "La seleición tien de contener sólo nudos y formes"
 
 msgid "Orthogonalize"
 msgstr "Ortogonalizar"
@@ -1116,6 +1118,30 @@ msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 "Por favor, seleiciona víes con ángulos de aproximadamente 90 y 180 graos."
 
+msgid "Download from Overpass API ..."
+msgstr "Descargando dende la API Overpass..."
+
+msgid "Download map data from Overpass API server."
+msgstr "Descargar datos del mapa dende''l servidor API Overpass."
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr "Consulta de nivel superior: "
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr "Apegar"
 
@@ -1385,7 +1411,7 @@ msgid "Simplify Way"
 msgstr "Simplificar vía"
 
 msgid "Delete unnecessary nodes from a way."
-msgstr "Desaniciar los nodos innecesarios d''una vía."
+msgstr "Desaniciar los nudos innecesarios d''una vía."
 
 msgid "Please select at least one way to simplify."
 msgstr "Seleiciona polo menos una vía pa simplificar."
@@ -1414,27 +1440,28 @@ msgstr[1] "Simplificar {0} víes"
 
 msgid "Simplify Way (remove {0} node)"
 msgid_plural "Simplify Way (remove {0} nodes)"
-msgstr[0] "Simplificar vía (desaniciar {0} nodu)"
-msgstr[1] "Simplificar vía (desaniciar {0} nodos)"
+msgstr[0] "Simplificar vía (desaniciar {0} nudu)"
+msgstr[1] "Simplificar vía (desaniciar {0} nudos)"
 
 msgid "Split Way"
 msgstr "Partir vía"
 
 msgid "Split a way at the selected node."
-msgstr "Partir una vía nel nodu seleicionáu"
+msgstr "Partir una vía nel nudu seleicionáu"
 
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
-"La seleición actual nun se pue usar pa partir - nun ta seleicionáu un nodu."
+"La seleición actual nun se pué usar pa partir - nun ta seleicionáu nengún "
+"nudu."
 
 msgid "The selected nodes do not share the same way."
-msgstr "Los nodos seleicionaos nun comparten la mesma vía."
+msgstr "Los nudos seleicionaos nun comparten la mesma vía."
 
 msgid "The selected node is not in the middle of any way."
 msgid_plural "The selected nodes are not in the middle of any way."
-msgstr[0] "El nodu seleicionáu nun ta en mediu de nenguna vía."
-msgstr[1] "Los nodos seleicionaos nun tan en mediu de nenguna vía."
+msgstr[0] "El nudu seleicionáu nun ta nel mediu de nenguna vía."
+msgstr[1] "Los nudos seleicionaos nun tan nel mediu de nenguna vía."
 
 msgid ""
 "There is more than one way using the node you selected. Please select the "
@@ -1443,20 +1470,20 @@ msgid_plural ""
 "There is more than one way using the nodes you selected. Please select the "
 "way also."
 msgstr[0] ""
-"Hai más de una vía usando''l nodu que seleicionasti. Por favor seleiciona "
+"Hai más de una vía usando''l nudu que seleicionasti. Por favor seleiciona "
 "tamién la vía."
 msgstr[1] ""
-"Hai más de una vía usando los nodos que seleicionasti. Por favor seleiciona "
+"Hai más de una vía usando los nudos que seleicionasti. Por favor seleiciona "
 "tamién la vía."
 
 msgid "You must select two or more nodes to split a circular way."
-msgstr "Tienes de seleicionar dos o más nodos pa partir una vía circular."
+msgstr "Tienes de seleicionar dos o más nudos pa partir una vía circular."
 
 msgid ""
 "The way cannot be split at the selected nodes. (Hint: Select nodes in the "
 "middle of the way.)"
 msgstr ""
-"La vía nun se pue partir polos nodos seleicionaos. (Gabitu: seleiciona nodos "
+"La vía nun pué partise polos nudos seleicionaos. (Gabitu: seleiciona nudos "
 "na metá de la vía)."
 
 msgid ""
@@ -1494,16 +1521,16 @@ msgid "UnGlue Ways"
 msgstr "Despegar víes"
 
 msgid "Duplicate nodes that are used by multiple ways."
-msgstr "Doblar nodos usaos per delles víes."
+msgstr "Doblar nudos usaos per delles víes."
 
 msgid "This node is not glued to anything else."
-msgstr "Esti nodo nun ta pegáu a nenguna otra cosa."
+msgstr "Esti nudu nun ta pegáu a nenguna otra cosa."
 
 msgid "None of these nodes are glued to anything else."
-msgstr "Nengún d''éstos nodos ta pegáu a nenguna otra cosa."
+msgstr "Nengún d''éstos nudos ta pegáu a nenguna otra cosa."
 
 msgid "None of this way''s nodes are glued to anything else."
-msgstr "Nengún de los nodos d''esta vía ta pegáu a nenguna otra cosa."
+msgstr "Nengún de los nudos d''esta vía ta pegáu a nenguna otra cosa."
 
 msgid "The current selection cannot be used for unglueing."
 msgstr "La selección actual non puede usase pa desapegar."
@@ -1512,22 +1539,22 @@ msgid "Select either:"
 msgstr "Escuya algún:"
 
 msgid "* One tagged node, or"
-msgstr "* Un nodo etiquetáu, o"
+msgstr "* Un nudu etiquetáu, o"
 
 msgid "* One node that is used by more than one way, or"
-msgstr "* Un nodo que sía usáu por más d''una vía, o"
+msgstr "* Un nudu qu’ usa más d''una vía, o"
 
 msgid ""
 "* One node that is used by more than one way and one of those ways, or"
-msgstr "* Un nodo usáu por más d''una vía y una d''eses víes, o"
+msgstr "* Un nudu qu’usa más d''una vía y una d''eses víes, o"
 
 msgid ""
 "* One way that has one or more nodes that are used by more than one way, or"
-msgstr "* Una vía que tenga un nodo o más usáu por más d''una vía, o"
+msgstr "* Una vía que tenga un nudu o más qu’use más d''una vía, o"
 
 msgid ""
 "* One way and one or more of its nodes that are used by more than one way."
-msgstr "* Una vía y un nodo o más de los sos nodos usaos por más d''una vía."
+msgstr "* Una vía y unu o más de los sos nudos qu’use más d''una vía."
 
 msgid ""
 "Note: If a way is selected, this way will get fresh copies of the unglued\n"
@@ -1535,22 +1562,22 @@ msgid ""
 "their\n"
 "own copy and all nodes will be selected."
 msgstr ""
-"Nota: Si escueye una vía ésta va recibir copies actualizaes de los\n"
-"nodos despegaos y van escoyese los nuevos nodos. De lo contrario, toles\n"
-"víes van llograr la so propia copia y tolos nodos van ser escoyíos."
+"Nota: Si ta seleicionada una vía ésta va recibir copies actualizaes de los\n"
+"nudos despegaos y van escoyese los nudos nuevos. De lo contrario, toles\n"
+"víes recibirán la so propia copia y seleicionaránse tolos nudos."
 
 msgid "Unglued Node"
-msgstr "Nodo despegáu"
+msgstr "Nudu despegáu"
 
 msgid "Dupe into {0} node"
 msgid_plural "Dupe into {0} nodes"
-msgstr[0] "Doblar en {0} nodo"
-msgstr[1] "Doblar en {0} nodos"
+msgstr[0] "Doblar en {0} nudu"
+msgstr[1] "Doblar en {0} nudos"
 
 msgid "Dupe {0} node into {1} nodes"
 msgid_plural "Dupe {0} nodes into {1} nodes"
-msgstr[0] "Doblar {0} nodo en {1} nodos"
-msgstr[1] "Doblar {0} nodos en {1} nodos"
+msgstr[0] "Doblar {0} nudu en {1} nudos"
+msgstr[1] "Doblar {0} nudos en {1} nudos"
 
 msgid "Unglue confirmation"
 msgstr "Confirmación de despegáu"
@@ -1560,9 +1587,9 @@ msgid ""
 "downloaded.<br>This can cause problems because other objects (that you do "
 "not see) might use them.<br>Do you really want to unglue?"
 msgstr ""
-"Ta a puntu de desapegar nodos fuera de la zona que descargó.<br>Esto puede "
-"causar problemes porque otros oxetos (que nun se ven) pueden tar "
-"utilizandolos.<br>¿Ta seguru que quier desapegalos?"
+"Tas a piques de desapegar nudos fuera de la zona que descargasti.<br>Esto "
+"pué causar problemes porque otros oxetos (que nun se ven) puen tar "
+"utilizándolos.<br>¿Tas seguru de que quies desapegalos?"
 
 msgid ""
 "You are about to unglue incomplete objects.<br>This will cause problems "
@@ -1572,29 +1599,29 @@ msgstr ""
 "cuenta de que nun va ver l''oxetu real.<br>¿Realmente quier desapegar?"
 
 msgid "Disconnect Node from Way"
-msgstr "Desconectar nodo de la vía"
+msgstr "Desconectar nudu de la vía"
 
 msgid "Disconnect nodes from a way they currently belong to"
-msgstr "Desconectar nodos dende una vía a la qu''anguaño pertenecen"
+msgstr "Desconectar nudos dende una vía a la que pertenecen anguaño"
 
 msgid "Select at least one node to be disconnected."
-msgstr "Escueye siquier un nodo a ser desconectáu."
+msgstr "Escueye polo menos un nudu a desconectar."
 
 msgid "Selected node cannot be disconnected from anything."
 msgid_plural "Selected nodes cannot be disconnected from anything."
-msgstr[0] "El nodo escoyíu nun puede ser desconectáu de la nada."
-msgstr[1] "Los nodos escoyíos nun pueden ser desconectaos de la nada."
+msgstr[0] "El nudu escoyíu nun pué desconectase de nada."
+msgstr[1] "Los nudos escoyíos nun puen desconectase de nada."
 
 msgid ""
 "The affected way would disappear after disconnecting the selected node."
 msgid_plural ""
 "The affected way would disappear after disconnecting the selected nodes."
-msgstr[0] "El camín afectáu sumiría dempués de desconectar el nodo escoyíu."
+msgstr[0] "La vía afeutada sumiría dempués de desconectar el nudu escoyíu."
 msgstr[1] ""
-"El camín afectáu sumiría dempués de desconectar los nodos escoyíos."
+"La vía afeutada sumiría dempués de desconectar los nudos escoyíos."
 
 msgid "Some irrelevant nodes have been removed from the selection"
-msgstr ""
+msgstr "Dellos nudos non relevantes quitáronse de la esbilla"
 
 msgid "Undo"
 msgstr "Desfacer"
@@ -1730,8 +1757,8 @@ msgstr "Siguimientu automáticu"
 
 msgid "Enable/disable automatic moving of the map view to last placed node"
 msgstr ""
-"Habilitar / deshabilitar movimientu automáticu de la vista del mapa hasta''l "
-"postreru nodo asitiáu"
+"Activar/desactivar el movimientu automáticu de la vista del mapa al últimu "
+"nudu asitiáu"
 
 msgid "Toggle Viewport Following"
 msgstr "Camudar a siguimientu automáticu"
@@ -1746,19 +1773,19 @@ msgid "Toggle Wireframe view"
 msgstr "Activar o desactivar la vista de rejilla"
 
 msgid "Zoom In"
-msgstr "Acercar"
+msgstr "Averar"
 
 msgid "Zoom In (Keypad)"
 msgstr "Ampliar (tecláu numbéricu)"
 
 msgid "Zoom Out"
-msgstr "Allonxar"
+msgstr "Amenorgar"
 
 msgid "Zoom Out (Keypad)"
 msgstr "Alloñar (tecláu numbéricu)"
 
 msgid "Zoom to"
-msgstr "Zoom a"
+msgstr "Averar a"
 
 msgid "Zoom to the object the first selected member refers to"
 msgstr "Averar al oxetu al que se refier el primer miembru escoyíu"
@@ -1770,13 +1797,13 @@ msgid "Zooming disabled because there is no selected member"
 msgstr "Desactivóse''l zoom por cuenta de que nun hai nengún miembru escoyíu"
 
 msgid "Zoom to the first selected node"
-msgstr "Zoom al primer nodo escoyíu"
+msgstr "Averar al primer nudu seleicionáu"
 
 msgid "Zooming disabled because layer of this way is not active"
 msgstr "Zoom desactiváu porque la capa d''esta vía nun ta activa"
 
 msgid "Zooming disabled because there is no selected node"
-msgstr "Zoom desactiváu porque nun hai nengún nodo escoyíu"
+msgstr "Ampliacón desactivada porque nun hai nengún nudu escoyíu"
 
 msgctxt "audio"
 msgid "Back"
@@ -1849,7 +1876,7 @@ msgid "Markers from {0}"
 msgstr "Marcadores dende {0}"
 
 msgid "Download OSM Notes"
-msgstr ""
+msgstr "Descargar les notes d''OSM"
 
 msgid "Downloading Notes"
 msgstr "Descarga de Notes"
@@ -1859,25 +1886,28 @@ msgstr "Billetes"
 
 msgid "{0} note has been downloaded."
 msgid_plural "{0} notes have been downloaded."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "descargóse {0} nota."
+msgstr[1] "descargáronse {0} notes."
 
 msgid ""
 "Since the download limit was {0}, there might be more notes to download."
 msgstr ""
+"Como la llende de descargues yera {0}, podría haber más notes que descargar."
 
 msgid ""
 "Request a smaller area to make sure that all notes are being downloaded."
 msgstr ""
+"Seleiciona una zona más pequeña p''asegurate de que se descargarán toles "
+"notes."
 
 msgid "More notes to download"
-msgstr ""
+msgstr "Hai mas notes pa descargar"
 
 msgid "Download OSM Notes within Bounds"
-msgstr ""
+msgstr "Descargar les notes d''OSM de dientro de les llendes"
 
 msgid "Download OSM Note by ID"
-msgstr ""
+msgstr "Descargar una nota d''OSM pola ID"
 
 msgid "Download Compressed OSM Change"
 msgstr "Descargar cambeos a OSM estruyíos"
@@ -1889,7 +1919,7 @@ msgid "Download Compressed OSM"
 msgstr "Descargar OSM estruyíu"
 
 msgid "Download OSM object by ID"
-msgstr ""
+msgstr "Descargar un oxetu d''OSM pola ID"
 
 msgid "Download OSM"
 msgstr "Descargar OSM"
@@ -2029,7 +2059,7 @@ msgid "Delete Mode"
 msgstr "Mou de desaniciu"
 
 msgid "Delete nodes or ways."
-msgstr "Desaniciar nodos o víes."
+msgstr "Desaniciar nudos o víes."
 
 msgid "Mode: {0}"
 msgstr "Mou: {0}"
@@ -2038,15 +2068,15 @@ msgid ""
 "Click to delete. Shift: delete way segment. Alt: do not delete unused nodes "
 "when deleting a way. Ctrl: delete referring objects."
 msgstr ""
-"Calca pa desaniciar. Mayúscula: desaniciar segmentu de vía. Alt: nun "
-"desaniciar los nodos non usaos al desaniciar una vía. Ctrl: desaniciar los "
+"Fai click pa desaniciar. Mayúscula: desaniciar segmentu de vía. Alt: nun "
+"desaniciar los nudos non usaos al desaniciar una vía. Ctrl: desaniciar los "
 "oxetos de referencia."
 
 msgid "Draw"
 msgstr "Dibuxar"
 
 msgid "Draw nodes"
-msgstr "Dibuxar nodos"
+msgstr "Dibuxar nudos"
 
 msgid "Mode: Draw Angle snapping"
 msgstr "Mou: Dibuxu d`ángulos instantáneu"
@@ -2098,15 +2128,6 @@ msgstr "Autoensambláu d`ángulos activu."
 msgid "Finish drawing."
 msgstr "Acabar de dibuxar."
 
-msgid "FIX"
-msgstr "FIX"
-
-msgid "draw angle snap"
-msgstr "debuxar axuste d`ángulo"
-
-msgid "draw angle snap highlight"
-msgstr "resaltar dibuxáu d`ángulu de corte"
-
 msgid "Toggle snapping by {0}"
 msgstr "Activar/Desactivar instantanea de {0}"
 
@@ -2114,7 +2135,7 @@ msgid "Show helper geometry"
 msgstr "Amosar asistente de xeometría"
 
 msgid "Snap to node projections"
-msgstr "Axustar a les proyecciones de nodo"
+msgstr "Axustar a les proyecciones de nudu"
 
 msgid "Disable"
 msgstr "Deshabilitar"
@@ -2128,6 +2149,15 @@ msgstr "0,45,90,..."
 msgid "0,30,45,60,90,..."
 msgstr "0,30,45,60,90,..."
 
+msgid "FIX"
+msgstr "FIX"
+
+msgid "draw angle snap"
+msgstr "debuxar axuste d`ángulo"
+
+msgid "draw angle snap highlight"
+msgstr "resaltar dibuxáu d`ángulu de corte"
+
 msgid "Angle snapping"
 msgstr "Autoensambláu d''ángulos"
 
@@ -2171,7 +2201,8 @@ msgstr ""
 msgid ""
 "Move the node along one of the segments, then release the mouse button."
 msgstr ""
-"Mueva''l nodo a lo llargo de los segmentos, depués suelte''l botón del mure"
+"Mueve’l nudu a lo llargo d’unu de los segmentos, depués suelta’l botón del "
+"mur"
 
 msgid "Draw a rectangle of the desired size, then release the mouse button."
 msgstr ""
@@ -2205,36 +2236,36 @@ msgid ""
 "Click to add a new node. Release Ctrl to move existing nodes or hold Alt to "
 "delete."
 msgstr ""
-"Faiga clic p''añedir un nuevu nodo. Suelte la tecla Ctrl pa mover los nodos "
-"esistentes o caltenga apertada la tecla Alt pa esaniciar."
+"Fai clic p’amestar un nudu nuevu. Suelta la tecla Ctrl pa mover nudos "
+"esistentes o caltén apretada la tecla Alt pa desaniciar."
 
 msgid ""
 "Click to delete the highlighted node. Release Alt to move existing nodes or "
 "hold Ctrl to add new nodes."
 msgstr ""
-"Faiga clic pa esaniciar el nodo escoyíu. Suelte la tecla Alt pa mover los "
-"nodos esistentes o calten pulsiáu Ctrl p''añedir nuevos nodos."
+"Fai clic pa desaniciar el nudu escoyíu. Suelta la tecla Alt pa mover los "
+"nudos esistentes o caltén apretáu Ctrl p’amestar nudos nuevos."
 
 msgid ""
 "Click to move the highlighted node. Hold Ctrl to add new nodes, or Alt to "
 "delete."
 msgstr ""
-"Faiga clic pa mover el nodo resaltáu. Caltenga pulsiáu Ctrl p''añedir nuevos "
-"nodos o Alt pa esaniciar."
+"Fai clic pa mover el nudu resaltáu. Caltén apretáu Ctrl p’amestar nudos "
+"nuevos o Alt pa desaniciar."
 
 msgid "Cannot place a node outside of the world."
-msgstr "Non puede asitiase un nodo fora''l mundu."
+msgstr "Nun pué asitiase un nudu fora''l mundu."
 
 msgid "Add a new node to way"
 msgid_plural "Add a new node to {0} ways"
-msgstr[0] "Añedir un nuevu nodo a la vía"
-msgstr[1] "Añedir nuevos nodos a les {0} víes"
+msgstr[0] "Amestar un nudu nuevu a la vía"
+msgstr[1] "Amestar un nudu nuevu a {0} víes"
 
 msgid "Cannot delete node that is referenced by multiple objects"
-msgstr "Non pue esaniciase el nodo que fai referencia a dellos oxetos"
+msgstr "Nun pué desaniciase’l nudu que fai referencia a dellos oxetos"
 
 msgid "Cannot delete node that has tags"
-msgstr "Non pue esaniciase el nodo que tien etiquetes"
+msgstr "Nun pué desaniciase un nudu que tien etiquetes"
 
 msgid "Parallel"
 msgstr "Paralela"
@@ -2263,9 +2294,6 @@ msgstr ""
 "ParallelWayAction\n"
 "Les víes escoyíes tienen de formar una vía senciella ensin ramificar"
 
-msgid "Make parallel way error"
-msgstr "Fallu al crear vía paralela"
-
 msgid "Drag play head"
 msgstr "Abasnar pa reproducir la cabecera"
 
@@ -2309,7 +2337,7 @@ msgid "Release the mouse button to select the objects in the rectangle."
 msgstr "Soltar el botón del mure pa escoyer los oxetos nel rectángulu."
 
 msgid "Ctrl to merge with nearest node."
-msgstr "Ctrl pa xuntar nodos cercanos."
+msgstr "Ctrl pa mecer col nudu más cercanu."
 
 msgid "Release the mouse button to stop moving."
 msgstr "Suelte''l botón del mure pa detener el movimientu."
@@ -2330,8 +2358,8 @@ msgstr ""
 
 msgid "Add and move a virtual new node to way"
 msgid_plural "Add and move a virtual new node to {0} ways"
-msgstr[0] "Añedir y mover un nuevu nodo virtual a la vía."
-msgstr[1] "Añedir y mover un nuevu nodo virtual a {0} víes."
+msgstr[0] "Amestar y mover un nudu virtual nuevu a la vía."
+msgstr[1] "Amestar y mover un nudu virtual nuevu a {0} víes."
 
 msgid "Zoom"
 msgstr "Averar"
@@ -2499,9 +2527,15 @@ msgstr "tolos oxetos"
 msgid "Also include incomplete and deleted objects in search."
 msgstr "Incluir tamién na gueta los oxetos incompletos o desaniciaos"
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr "espresión regular"
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr "añedir botón a la barra de ferramientes"
 
@@ -2633,10 +2667,14 @@ msgstr "propiedaes"
 msgid ""
 "ways with at least 20 nodes, or relations containing at least 20 nodes"
 msgstr ""
+"víes con 20 nudos como mínimo, o rellaciones que contienen 20 nudos como "
+"mínimo."
 
 msgid ""
 "nodes with at least 3 referring ways, or relations containing at least 3 ways"
 msgstr ""
+"nudos que faen referencia a 3 víes como mínimo, o rellaciones que contienen "
+"3 víes como mínimo."
 
 msgid "objects having 5 to 10 tags"
 msgstr "oxetos que tienen de 5 a 10 etiquetes"
@@ -2648,7 +2686,7 @@ msgid "closed ways with an area of 100 m²"
 msgstr "víes zarraes con una área de 100 m²"
 
 msgid "ways with a length of 200 m or more"
-msgstr ""
+msgstr "víes con una llonxitú de 200 m. o más"
 
 msgid "state"
 msgstr "estáu"
@@ -2675,10 +2713,10 @@ msgid "all parents of objects matching the expression"
 msgstr "tolos padres de los oxetos coincidentes cola espresión"
 
 msgid "n-th member of relation and/or n-th node of way"
-msgstr "n-ésimu miembru de la relación y/o n-ésimu nodo de la vía"
+msgstr "n-ésimu miembru de la rellación y/o n-ésimu nudu de la vía"
 
 msgid "every n-th member of relation and/or every n-th node of way"
-msgstr "cada n-ésimu miembru de la relación y/o cada n-ésimu nodo de la vía"
+msgstr "cada n-ésimu miembru de la rellación y/o cada n-ésimu nudu de la vía"
 
 msgid "view"
 msgstr "vista"
@@ -2688,14 +2726,15 @@ msgstr "oxetos na vista actual"
 
 msgid "objects (and all its way nodes / relation members) in current view"
 msgstr ""
-"oxetos (y toos les sos víes-nodos / miembros de la relación) na vista actual"
+"oxetos (y tolos sos nudos de vía / miembros de la rellación) de la vista "
+"actual"
 
 msgid "objects in downloaded area"
 msgstr "oxetos na área descargá"
 
 msgid "objects (and all its way nodes / relation members) in downloaded area"
 msgstr ""
-"oxetos (y toos les sos víes-nodos / miembros de la relación) na área "
+"oxetos (y tolos sos nudos de vía / miembros de la rellación) del área "
 "descargada"
 
 msgid "No match found for ''{0}''"
@@ -2726,6 +2765,10 @@ msgid "RX"
 msgstr "RX"
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr "A"
 
@@ -2768,8 +2811,8 @@ msgstr ""
 
 msgid "Unknown primitive type: {0}. Allowed values are node, way or relation"
 msgstr ""
-"Tipu de primitivu desconocíu: {0}. Los valores dexaos son nodo, vía o "
-"relación"
+"Tipu de primitiva desconocíu: {0}. Los valores permitíos son nudu, vía o "
+"rellación"
 
 msgid "Positive integer expected"
 msgstr "Enteru positivu esperáu"
@@ -2780,6 +2823,9 @@ msgstr "S''esperaba un rangu de númberos"
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr "Elementu ensin esperar. Esperábase {0} pero atopóse {1}"
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr "Credencial d`autentificación inesperada: {0}"
 
@@ -2808,7 +2854,7 @@ msgid "Precondition Violation"
 msgstr "Violación de la condición previa"
 
 msgid "{0} nodes in way {1} exceed the max. allowed number of nodes {2}"
-msgstr "{0} nodos na vía {1} supera el máximu númberu permitíu de nodos {2}"
+msgstr "{0} nudos na vía {1} pasa del númberu máximu de nudos permitíu {2}"
 
 msgid "API Capabilities Violation"
 msgstr "Violación de les capacidaes de la API"
@@ -2901,7 +2947,7 @@ msgstr[0] "Amestáu {0} oxetu"
 msgstr[1] "Amestaos {0} oxetos"
 
 msgid "New way {0} has 0 nodes"
-msgstr "La nueva vía {0} tien 0 nodos"
+msgstr "La nueva vía {0} tien 0 nudos"
 
 msgid "Change node {0}"
 msgstr "Camudar nodu {0}"
@@ -2913,10 +2959,10 @@ msgid "Change relation {0}"
 msgstr "Camudar rellación {0}"
 
 msgid "Changed nodes of {0}"
-msgstr "Camudaos nodos de {0}"
+msgstr "Camudaos nudos de {0}"
 
 msgid "Remove \"{0}\" for node ''{1}''"
-msgstr "Esaniciar \"{0}\" por nodo ''{1}''"
+msgstr "Desaniciar \"{0}\" pal nudu ''{1}''"
 
 msgid "Remove \"{0}\" for way ''{1}''"
 msgstr "Esaniciar \"{0}\" pa vía ''{1}''"
@@ -2925,7 +2971,7 @@ msgid "Remove \"{0}\" for relation ''{1}''"
 msgstr "Esaniciar \"{0}\" pa la rellación ''{1}''"
 
 msgid "Set {0}={1} for node ''{2}''"
-msgstr "Establecer {0}={1} pal nodo ''{2}''"
+msgstr "Establecer {0}={1} pal nudu ''{2}''"
 
 msgid "Set {0}={1} for way ''{2}''"
 msgstr "Afitar {0}={1} pa la vía ''{2}''"
@@ -2983,8 +3029,8 @@ msgstr[1] "Desaniciar {0} oxetos"
 
 msgid "Delete {0} node"
 msgid_plural "Delete {0} nodes"
-msgstr[0] "Desaniciar {0} nodu"
-msgstr[1] "Desaniciar {0} nodos"
+msgstr[0] "Desaniciar {0} nudu"
+msgstr[1] "Desaniciar {0} nudos"
 
 msgid "Delete {0} way"
 msgid_plural "Delete {0} ways"
@@ -3007,9 +3053,9 @@ msgid ""
 "downloaded.<br>This can cause problems because other objects (that you do "
 "not see) might use them.<br>Do you really want to delete?"
 msgstr ""
-"Ta a puntu d''esaniciar nodos fuera de la área que se descargó.<br>Esto "
-"puede causar problemes yá que otros oxetos (que nun puede ver) pueden tar "
-"usándolos.<br>¿Ta seguru que quier borrar?"
+"Ta a piques de desaniciar nudos fuera del área que descargasti.<br>Esto pué "
+"causar problemes porque otros oxetos (que nun se ven) puen tar "
+"usándolos.<br>¿Tas seguru que quies desaniciar?"
 
 msgid ""
 "You are about to delete incomplete objects.<br>This will cause problems "
@@ -3040,8 +3086,8 @@ msgstr "¿Esaniciar rellación?"
 
 msgid "Move {0} node"
 msgid_plural "Move {0} nodes"
-msgstr[0] "Mover {0} nodu"
-msgstr[1] "Mover {0} nodos"
+msgstr[0] "Mover {0} nudu"
+msgstr[1] "Mover {0} nudos"
 
 msgid "Purged {0} object"
 msgid_plural "Purged {0} objects"
@@ -3049,17 +3095,17 @@ msgstr[0] "Purgáu {0} oxetu"
 msgstr[1] "Purgaos {0} oxetos"
 
 msgid "Removed nodes from {0}"
-msgstr "Esaniciaos los nodos de {0}"
+msgstr "Desaniciaos nudos de {0}"
 
 msgid "Rotate {0} node"
 msgid_plural "Rotate {0} nodes"
-msgstr[0] "Xirar {0} nodu"
-msgstr[1] "Xirar {0} nodos"
+msgstr[0] "Xirar {0} nudu"
+msgstr[1] "Xirar {0} nudos"
 
 msgid "Scale {0} node"
 msgid_plural "Scale {0} nodes"
-msgstr[0] "Escalar {0} nodu"
-msgstr[1] "Escalar {0} nodos"
+msgstr[0] "Escalar {0} nudu"
+msgstr[1] "Escalar {0} nudos"
 
 msgid "Selected {0} object"
 msgid_plural "Selected {0} objects"
@@ -3071,8 +3117,8 @@ msgstr "Secuencia: {0}"
 
 msgid "Transform {0} node"
 msgid_plural "Transform {0} nodes"
-msgstr[0] "Tresformar {0} nodu"
-msgstr[1] "Tresformar {0} nodos"
+msgstr[0] "Tresformar {0} nudu"
+msgstr[1] "Tresformar {0} nudos"
 
 msgid ""
 "<html>Layer ''{0}'' already has a conflict for object<br>''{1}''.<br>This "
@@ -3109,7 +3155,7 @@ msgid "Resolve conflicts in deleted state in {0}"
 msgstr "Resolver los conflictos nel estáu de borráu en {0}"
 
 msgid "Set the ''modified'' flag for node {0}"
-msgstr "Establecer la marca «modificada» pal nodo {0}"
+msgstr "Poner la marca «camudáu» pal nudu {0}"
 
 msgid "Set the ''modified'' flag for way {0}"
 msgstr "Establecer la marca «modificada» pa la vía {0}"
@@ -3122,8 +3168,8 @@ msgstr "Iguarr conflictos na llista de miembros de la rellación {0}"
 
 msgid "Resolve {0} tag conflict in node {1}"
 msgid_plural "Resolve {0} tag conflicts in node {1}"
-msgstr[0] "Resolver {0} conflictu d`etiqueta nel nodo {1}"
-msgstr[1] "Resolver {0} conflictos d`etiqueta nel nodo {1}"
+msgstr[0] "Resolver {0} conflictu d’etiqueta nel nudu {1}"
+msgstr[1] "Resolver {0} conflictos d’etiqueta nel nudu {1}"
 
 msgid "Resolve {0} tag conflict in way {1}"
 msgid_plural "Resolve {0} tag conflicts in way {1}"
@@ -3136,7 +3182,7 @@ msgstr[0] "Resolver {0} conflictu d`etiqueta na relación {1}"
 msgstr[1] "Resolver {0} conflictos d`etiqueta na relación {1}"
 
 msgid "Resolve version conflict for node {0}"
-msgstr "Resolver conflictu de versión pal nodo {0}"
+msgstr "Resolver conflictu de versión pal nudu {0}"
 
 msgid "Resolve version conflict for way {0}"
 msgstr "Resolver conflictu de versión pa la forma {0}"
@@ -3145,10 +3191,10 @@ msgid "Resolve version conflict for relation {0}"
 msgstr "Resolver conflictu de versión pa la relación {0}"
 
 msgid "Resolve conflicts in node list of way {0}"
-msgstr "Resolver conflictos na llista de nodos de la vía {0}"
+msgstr "Resolver conflictos na llista de nudos de la vía {0}"
 
 msgid "Main dataset does not include node {0}"
-msgstr "El conxuntu de datos principal nun incluye`l nodo {0}"
+msgstr "El conxuntu de datos principal nun incluye’l nudu {0}"
 
 msgid "Apply?"
 msgstr "¿Aplicar?"
@@ -3275,6 +3321,24 @@ msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 "<html>Producióse un fallu al crear el directoriu pal caxé: {0}</html>"
 
+msgid "Unable to delete temporary file {0}"
+msgstr "Nun pudo desaniciase''l ficheru temporal {0}"
+
+msgid "Unable to set file non-readable {0}"
+msgstr "Nun pudo establecese’l ficheru non lleíble {0}"
+
+msgid "Unable to set file non-writable {0}"
+msgstr "Nun pudo establecese’l ficheru non escribible {0}"
+
+msgid "Unable to set file non-executable {0}"
+msgstr "Nun pudo establecese’l ficheru non executable {0}"
+
+msgid "Unable to set file readable {0}"
+msgstr "Nun pudo establecese’l ficheru lleíble {0}"
+
+msgid "Unable to set file writable {0}"
+msgstr "Nun pudo establecese’l ficheru escribíble {0}"
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3349,6 +3413,8 @@ msgid ""
 "Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
 "startup)."
 msgstr ""
+"Intenta activar la rede IPv6, prefiriendo IPv6 antes que IPv4 (solo funciona "
+"al principiu del aniciu)"
 
 msgid " (at line {0}, column {1})"
 msgstr " (a la llínea {0}, columna {1})"
@@ -3413,14 +3479,52 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
-msgid "Not in cache"
-msgstr "Nun ta''n caché"
-
 msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr ""
 "Nun s`atopa la proyección ''{0}'', el marcador ''{1}'' yá nun puede ser "
 "utilizáu"
 
+msgid "HTTP error {0} when loading tiles"
+msgstr "Error HTTP {0} al cargar el mosaicu"
+
+msgid "Error downloading tiles: {0}"
+msgstr "Error al descargar el mosaicu: {0}"
+
+msgid "Could not load image from tile server"
+msgstr "Nun pudo cargase la imaxe dende''l sirvidor de mosaicu"
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+"{0} nun ye un argumentu válidu del WMS. Comprueba la URL d’esti sirvidor.\n"
+"{1}"
+
+msgid "Select WMTS layer"
+msgstr "Seleiciona la capa WMTS"
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr "Proyección"
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr "Nun hai capes definíes pol documentu getCapabilities: {0}"
+
+msgid "No layer selected"
+msgstr "Nun se seleicionó nenguna capa"
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
+msgstr ""
+"Sólo hai encontu pa pieces del mosaicu cuadraes. El sirvidor devolvió "
+"{0}x{1} pal identificador TileMatrix {2}"
+
 msgid "ID > 0 expected. Got {0}."
 msgstr "Esperábase un ID >0. Obteníu {0}"
 
@@ -3462,7 +3566,7 @@ msgstr ""
 "nel conxuntu de dato fuente."
 
 msgid "Missing merge target for node with id {0}"
-msgstr "Falta de combinación de destín pal nodo col ID {0}"
+msgstr "Falta’l destín de combinación pal nodu cola id {0}"
 
 msgid "Missing merge target for relation with id {0}"
 msgstr "Falta de combinación de destín pa la relación col ID {0}"
@@ -3480,10 +3584,10 @@ msgid "Test ''{0}'' completed in {1}"
 msgstr "Test \"{0}\" completáu en {1}"
 
 msgid "Cannot add a way with only {0} nodes."
-msgstr "Non puede amestase una forma con namá {0} nodos."
+msgstr "Nun pué amestase una vía con namái {0} nudos."
 
 msgid "Each node must connect exactly 2 ways"
-msgstr "Cada nodo tien de conectar esactamente dos víes"
+msgstr "Cada nudu tien de conectar exautamente dos víes"
 
 msgid "There is an intersection between ways."
 msgstr "Hai una intersección ente les formes."
@@ -3503,8 +3607,8 @@ msgstr ""
 
 msgid "node"
 msgid_plural "nodes"
-msgstr[0] "nodo"
-msgstr[1] "nodos"
+msgstr[0] "nudu"
+msgstr[1] "nudos"
 
 msgid "way"
 msgid_plural "ways"
@@ -3533,16 +3637,16 @@ msgid "<anonymous>"
 msgstr "<anónimu>"
 
 msgid "Cannot add node {0} to incomplete way {1}."
-msgstr "Non puede añedir nodo {0} a la vía incompleta {1}"
+msgstr "Nun pué amestase’l nudu {0} a la vía incompleta {1}."
 
 msgid "Nodes in way must be in the same dataset"
-msgstr "Los nodos de la vía tienen de tar nel mesmu conxuntu de datos"
+msgstr "Los nudos de la vía tienen de tar nel mesmu conxuntu de datos"
 
 msgid "Deleted node referenced by {0}"
-msgstr "Nodo esaniciáu por {0}"
+msgstr "Nudu desaniciáu con referencia en {0}"
 
 msgid "Complete node {0} with null coordinates in way {1}"
-msgstr "Nodo completu {0} con coordenaes nules na vía {1}"
+msgstr "Nudu completu {0} con coordenaes nules na vía {1}"
 
 msgid ""
 "Cannot compare primitive with ID ''{0}'' to primitive with ID ''{1}''."
@@ -3604,13 +3708,13 @@ msgid "Relation: selected"
 msgstr "Relación: escoyíu"
 
 msgid "Node: standard"
-msgstr "Nodo: estándar"
+msgstr "Nudu: estándar"
 
 msgid "Node: connection"
-msgstr "Nodo: conexión"
+msgstr "Nudu: conexón"
 
 msgid "Node: tagged"
-msgstr "Nodo: etiquetáu"
+msgstr "Nudu: etiquetáu"
 
 msgid "untagged way"
 msgstr "vía ensin etiquetar"
@@ -3633,6 +3737,13 @@ msgstr "testu"
 msgid "areatext"
 msgstr "área de testu"
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr "La proyeición UTM (''+proj=utm'') rique’l parámetru ''+zone=...''."
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+"Esperábase un valor enteru nel rangu 1-60 pal parámetru ''+zone=...''."
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr "El parámetru tien d´empezar con un calter de «+» (atopaos {0})"
 
@@ -3660,6 +3771,9 @@ msgstr "Elipsoide ''{0}'' non almitíu."
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr "La combinación de parámetros d''elipsoide nun ye almitida"
 
+msgid "Unknown datum identifier: ''{0}''"
+msgstr "Identificador de datum desconocíu: ''{0}''"
+
 msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr "Elipsoide riquíu (+ellps=* or +a=*, +b=*)"
 
@@ -3668,9 +3782,6 @@ msgstr ""
 "Non puede usase l´arquivu de desplazamientu d´alluna ''{0}'' pa la opción "
 "+nadgris."
 
-msgid "Unknown datum identifier: ''{0}''"
-msgstr "Identificador de datum desconocíu: ''{0}''"
-
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
 msgstr "Riquise (+datum=*, +towgs84=* or +nadgrids=*)"
 
@@ -3821,10 +3932,10 @@ msgstr ""
 msgid ""
 "Way contains more than {0} nodes. It should be replaced by a multipolygon"
 msgstr ""
-"La vía contien más de {0} nodos. Tien de ser reemplazada por un multipolígonu"
+"La vía contien más de {0} nudos. Tendría de reemplazase por un multipolígonu"
 
 msgid "Way contains more than {0} nodes. It should be split or simplified"
-msgstr "La vía contien más de {0} nodos. Tien de partise o simplificase"
+msgstr "La vía contien más de {0} nudos. Tien de partise o simplificase"
 
 msgid "Barriers and entrances"
 msgstr "Barreres y entraes"
@@ -3891,46 +4002,46 @@ msgid ""
 "the same layer, but are not connected by a node."
 msgstr ""
 "Esti test comprueba si dos carreteres, víes de ferrocarril, canales o "
-"edificios crucien mesma capa, pero nun tán conectaos por un nodo."
+"edificios crúciense na mesma capa, pero nun tán conectaos por un nudu."
 
 msgid "Duplicated nodes"
-msgstr "Nodos doblaos"
+msgstr "Nudos doblaos"
 
 msgid "This test checks that there are no nodes at the very same location."
-msgstr "Esti exame comprueba que nun haya nodos nel mesmu llugar."
+msgstr "Esti exame comprueba que nun hai nudos nel mesmu llugar."
 
 msgid "Mixed type duplicated nodes"
-msgstr "Amestar nodos con tipu duplicáu"
+msgstr "Nudos duplicaos con tipu mestu"
 
 msgid "Highway duplicated nodes"
-msgstr "Nodos doblaos d''autopista"
+msgstr "Nudos d’autopista doblaos"
 
 msgid "Railway duplicated nodes"
-msgstr "Nodos doblaos de fierrocarril"
+msgstr "Nudos de ferrocarril doblaos"
 
 msgid "Waterway duplicated nodes"
-msgstr "Nodos doblaos en vía fluvial"
+msgstr "Nudos de vía fluvial doblaos"
 
 msgid "Boundary duplicated nodes"
-msgstr "Nodos doblaos de frontera"
+msgstr "Nudos de frontera doblaos"
 
 msgid "Power duplicated nodes"
-msgstr "Nodos doblaos d''elletricidá"
+msgstr "Nudos d’enerxía doblaos"
 
 msgid "Natural duplicated nodes"
-msgstr "Elementu natural con nodos duplicaos"
+msgstr "Nudos d’elementu natural doblaos"
 
 msgid "Building duplicated nodes"
-msgstr "Edificios con nodos duplicaos"
+msgstr "Edificios con nudos duplicaos"
 
 msgid "Landuse duplicated nodes"
-msgstr "Usos del suelu con nodos duplicaos"
+msgstr "Usos del suelu con nudos duplicaos"
 
 msgid "Other duplicated nodes"
-msgstr "Otros nodos duplicaos"
+msgstr "Otros nudos duplicaos"
 
 msgid "Nodes at same position"
-msgstr "Nodos nel mesmu sitiu"
+msgstr "Nudos na mesma posición"
 
 msgid "Duplicated relations"
 msgstr "Relaciones doblaes"
@@ -3955,7 +4066,7 @@ msgid ""
 "This test checks that there are no ways with same node coordinates and "
 "optionally also same tags."
 msgstr ""
-"Esti test comprueba que nun hai víes coles mesmes coordenaes de nodos y, "
+"Esti test comprueba que nun hai víes coles mesmes coordenaes de nudos y, "
 "opcionalmente, tamién les mesmes etiquetes."
 
 msgid "Ways with same position"
@@ -3965,10 +4076,10 @@ msgid "Delete duplicate ways"
 msgstr "Desaniciar víes duplicaes"
 
 msgid "Duplicated way nodes"
-msgstr "Nodos de vía doblaos"
+msgstr "Nudos de vía duplicaos"
 
 msgid "Checks for ways with identical consecutive nodes."
-msgstr "Comprueba víes con nodos idénticos consecutivos"
+msgstr "Busca víes con nudos consecutivos idénticos"
 
 msgid "Highways"
 msgstr "Viales"
@@ -4028,13 +4139,13 @@ msgstr ""
 "Númberu de valores dependientes del carril inconsistentes nel sen inversu"
 
 msgid "Long segments"
-msgstr ""
+msgstr "Segmentos llargos"
 
 msgid "This tests for long way segments, which are usually errors."
-msgstr ""
+msgstr "Esto busca los segmentos llargos que, de vezu. son errores."
 
 msgid "Very long segment of {0} kilometers"
-msgstr ""
+msgstr "Segmentu enforma llargu de {0} quilómetros"
 
 msgid "Tag checker (MapCSS based)"
 msgstr "Verificador d''etiquetes (basáu''n MapCSS)"
@@ -4139,6 +4250,7 @@ msgstr ""
 
 msgid "Missing name:*={0}. Add tag with correct language key."
 msgstr ""
+"Falta name:*={0}. Amiesta una etiqueta cola clave de llingua correcha."
 
 msgid "A name is missing, even though name:* exists."
 msgstr "Un nome non s''atopa, anque''l nome: * esiste."
@@ -4185,8 +4297,7 @@ msgid ""
 "This test checks that a connection between two nodes is not used by more "
 "than one way."
 msgstr ""
-"Esti test comprueba si una conexón ente dos nodos nun s''usa por más d''una "
-"vía."
+"Esti test comprueba qu’una conexón ente dos nudos nun la usa más d’una vía."
 
 msgid "Areas share segment"
 msgstr "Segmentu d''árees compartíes"
@@ -4215,7 +4326,7 @@ msgstr "Llínees d''enerxía"
 msgid ""
 "Checks for nodes in power lines that do not have a power=tower/pole tag."
 msgstr ""
-"Busca nodos en llínees d''enerxía que nun tienen una etiqueta "
+"Busca nudos en llinies d’enerxía que nun tienen una etiqueta "
 "power=tower/pole."
 
 msgid "Missing power tower/pole within power line"
@@ -4275,7 +4386,7 @@ msgstr "Víes que s''interseccionen elles mesmes"
 msgid ""
 "This test checks for ways that contain some of their nodes more than once."
 msgstr ""
-"Esti test comprueba víes que contienen dalgunos de los sos nodos más d''una "
+"Esti test comprueba víes que contienen dalgunos de los sos nudos más d’una "
 "vegada."
 
 msgid "Similarly named ways"
@@ -4330,9 +4441,6 @@ msgstr "Valor de la llave de la etiqueta más llargu de lo dexao"
 msgid "Tags with empty values"
 msgstr "Etiquetes con valores vacíos"
 
-msgid "Invalid property key"
-msgstr "Clave de propiedá non válida"
-
 msgid "Invalid white space in property key"
 msgstr "Espaciu''n blancu non válidu na clave de propiedá"
 
@@ -4342,12 +4450,24 @@ msgstr "Los valores de la propiedá entamen y finen con un espaciu''n blancu"
 msgid "Property values contain HTML entity"
 msgstr "Los valores de propiedá contienen entidá de HTML"
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr "La clave ''{0}\" non esiste nos predefiníos"
 
 msgid "Presets do not contain property key"
 msgstr "Esta clave non tá predefinía"
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr "El valor ''{0}'' pa la clave ''{1}'' paezse a ''{2}''."
+
+msgid "Misspelled property value"
+msgstr "Valor de propiedá mal escritu"
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr "El valor \"{0}\" pa la clave \"{1}\" non tá nos predefiníos."
 
@@ -4389,7 +4509,7 @@ msgid "Check for FIXMES."
 msgstr "Comprobar FIXMES"
 
 msgid "Looks for nodes or ways with FIXME in any property value."
-msgstr "Buscar nodos o viales con FIXME''n cualesquier propiedá de valor"
+msgstr "Buscar nudos o víes con FIXME’n cualesquier valor de propiedá"
 
 msgid "Fix tags"
 msgstr "Correxir etiquetes"
@@ -4428,10 +4548,10 @@ msgid "More than one \"to\" way found"
 msgstr "Atopóse más d''una vía \"A\""
 
 msgid "More than one \"via\" node found"
-msgstr "Atopóse más d''un nodo \"vía\""
+msgstr "Alcontróse más d’un nudu \"vía\""
 
 msgid "Cannot mix node and way for role \"via\""
-msgstr "Non se pue amestar el nodo y la vía pal rol \"via\""
+msgstr "Nun pué amestase’l nudu y la vía pal rol \"via\""
 
 msgid "No \"from\" way found"
 msgstr "Non s''atopó una vía \"de\""
@@ -4440,10 +4560,10 @@ msgid "No \"to\" way found"
 msgstr "Non s''atopó una vía \"a\""
 
 msgid "No \"via\" node or way found"
-msgstr "Non s''atopó un nodo o vía \"vía\""
+msgstr "Nun s’alcontró un nudu o vía \"vía\""
 
 msgid "The \"from\" way does not start or end at a \"via\" node."
-msgstr "La vía \"from\" non entama o non fina nun nodo \"via\"."
+msgstr "La vía \"from\" nun principia o termina nun nudu \"via\"."
 
 msgid "Superfluous turnrestriction as \"to\" way is oneway"
 msgstr ""
@@ -4451,7 +4571,7 @@ msgstr ""
 "sentíu"
 
 msgid "The \"to\" way does not start or end at a \"via\" node."
-msgstr "La vía \"to\" non entama o non fina nun nodo \"via\"."
+msgstr "La vía \"to\" nun principia o termina nun nudu \"via\"."
 
 msgid "The \"from\" and the first \"via\" way are not connected."
 msgstr "La vía \"dende\" y la primer via \"via\" non tán conectaes."
@@ -4521,29 +4641,29 @@ msgstr "Llínees d''enerxía desconectaes"
 
 msgid "This test checks if a way has an endpoint very near to another way."
 msgstr ""
-"Esti test comprueba si una vía tien un nodo final mui averáu a otra vía."
+"Esti test comprueba si una vía tien un puntu final mui averáu a otra vía."
 
 msgid "Way end node near other highway"
-msgstr "Nodo d''estremu de vía averada a otra carretera"
+msgstr "Nudu final de vía averáu a otra carretera"
 
 msgid "Way end node near other way"
-msgstr "Nodo d''estremu de vía averáu a otru vial"
+msgstr "Nudu final de vía averáu a otra vía"
 
 msgid "Way node near other way"
-msgstr "Nodo de vía averáu a otru vial"
+msgstr "Nudu de vía averáu a otra vía"
 
 msgid "Connected way end node near other way"
-msgstr "Conectáu nodo d''estremu de vía averáu a otru vial"
+msgstr "Conectáu nudu final de vía averáu a otra vía"
+
+msgid "Unconnected nodes without physical tags"
+msgstr "Nudos desconectaos ensin etiquetes físiques"
 
 msgid "Untagged and unconnected nodes"
-msgstr "Nodos aislaos non etiquetaos"
+msgstr "Nudos aisllaos sin etiquetes"
 
 msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
-"Esti test comprueba nodos ensin etiquetar que non pertenecen a nenguna vía."
-
-msgid "Unconnected nodes without physical tags"
-msgstr "Nodos desconectaos ensin etiquetes físiques"
+"Esti test comprueba nudos ensin etiquetar que nun pertenecen a nenguna vía."
 
 msgid "No tags"
 msgstr "Ensin etiquetes"
@@ -4564,10 +4684,10 @@ msgid "Has key ''source''"
 msgstr "Tien la clave ''source''"
 
 msgid "Untagged, empty and one node ways"
-msgstr "Víes ensin etiquetes, vacíes o de namá un nodo"
+msgstr "Víes ensin etiquetes, vacíes o con un solu nudu"
 
 msgid "This test checks for untagged, empty and one node ways."
-msgstr "Esti test comprueba víes ensin etiquetar, vacíes y de namá un nodo."
+msgstr "Esti test comprueba víes ensin etiquetar, vacíes y con un solu nudu"
 
 msgid "Unnamed ways"
 msgstr "Víes ensin nome"
@@ -4585,7 +4705,7 @@ msgid "Empty ways"
 msgstr "Víes vacíes"
 
 msgid "One node ways"
-msgstr "Víes de namá un nodo"
+msgstr "Víes con un solu nudu"
 
 msgid "Way connected to Area"
 msgstr "Vía conectá a un área"
@@ -4652,8 +4772,8 @@ msgstr "usu del suelu"
 
 msgid "{0} node"
 msgid_plural "{0} nodes"
-msgstr[0] "{0} nodo"
-msgstr[1] "{0} nodos"
+msgstr[0] "{0} nudu"
+msgstr[1] "{0} nudos"
 
 msgid "{0} member"
 msgid_plural "{0} members"
@@ -4743,8 +4863,9 @@ msgstr "Faga clic pa zarrar el cuadru de diálogu"
 msgid "Imagery offset"
 msgstr "Desplazamientu d''imaxes"
 
+msgctxt "menu"
 msgid "Imagery"
-msgstr "Imaxes"
+msgstr ""
 
 msgctxt "layer"
 msgid "Offset"
@@ -4809,7 +4930,7 @@ msgid "Print debugging messages to console"
 msgstr "Imprimir los mensaxes de depuración a la consola"
 
 msgid "Skip loading plugins"
-msgstr ""
+msgstr "Saltar la carga de complementos"
 
 msgid "Disable access to the given resource(s), separated by comma"
 msgstr "Evacuar l''accesu al recursu(s) dáu(s), dixebraos por comes"
@@ -4880,7 +5001,7 @@ msgid "Printing debugging messages to console"
 msgstr "Visualización de mensaxes de depuración en consola"
 
 msgid "Plugin loading skipped"
-msgstr ""
+msgstr "Saltada la carga de complementos"
 
 msgid "Enabled detailed debug level (trace)"
 msgstr "Activáu nivel de depuración detallada (traces)"
@@ -4927,14 +5048,18 @@ msgstr[1] ""
 msgid ""
 "Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
 msgstr ""
+"Detectada una rede IPv6 utilizable, preferiráse IPv6 antes que IPv4 llueu "
+"del siguiente arranque."
 
 msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
-msgstr ""
+msgstr "Detectada una rede IPv6 utilizable, prefiriendo IPv6 antes que IPv4."
 
 msgid ""
 "Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
 "restart."
 msgstr ""
+"Detectada una rede IPv6 non utilizable, preferiráse IPv4 antes que IPv6 "
+"llueu del siguiente arranque."
 
 msgid "Unsaved osm data"
 msgstr "Datos OSM ensin grabar"
@@ -4986,45 +5111,56 @@ msgstr ""
 "Esto pue ser por cuenta de una configuración de proxy errónea. <br> ¿Deseya "
 "camudar la configuración del proxy agora?"
 
+msgctxt "menu"
 msgid "File"
-msgstr "Ficheru"
+msgstr ""
 
-msgid "Session"
-msgstr "Sesión"
+msgctxt "menu"
+msgid "Edit"
+msgstr ""
 
+msgctxt "menu"
 msgid "View"
-msgstr "Vista"
+msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
-msgstr "Ferramientes"
+msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
-msgstr "Más ferramientes"
+msgstr ""
 
+msgctxt "menu"
 msgid "Data"
-msgstr "Datos"
+msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
-msgstr "Seleición"
+msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
-msgstr "Axustes Predefiníos"
+msgstr ""
 
 msgid "More..."
 msgstr "Más…"
 
+msgctxt "menu"
 msgid "GPS"
-msgstr "GPS"
+msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
-msgstr "Ventanes"
+msgstr ""
+
+msgctxt "menu"
+msgid "Help"
+msgstr ""
 
 msgid "Menu: {0}"
 msgstr "Menú: {0}"
 
-msgid "Save and load the current session (list of layers, etc.)"
-msgstr "Grabar y cargar la sesión actual (llista de capes, etc.)"
-
 msgid "Edit toolbar"
 msgstr "Editar barra de ferramientes"
 
@@ -5050,8 +5186,9 @@ msgstr ""
 msgid "Search menu items"
 msgstr "Elementos del menú de gueta"
 
+msgctxt "menu"
 msgid "Audio"
-msgstr "Audiu"
+msgstr ""
 
 msgid "Do not hide toolbar"
 msgstr "Nun despintar la barra de ferramientes"
@@ -5174,71 +5311,17 @@ msgstr "En segundu planu"
 msgid "Click to run job in background"
 msgstr "Faiga clic pa executar la xera en segundu planu"
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-"Les imaxes aérees puen tar equivocadamente alliniaes. ¡Por favor, "
-"compruebe''l so desplazamientu usando trazar de GPS!"
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-
-msgid "Details..."
-msgstr "Detalles..."
-
-msgid "Hide this message and never show it again"
-msgstr "Despintar esti mensaxe y nun volver amosalu de nuevu"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-"<html>Confirme''l borráu de <strong>1 oxetu</strong> de <strong>1 "
-"relación</strong>.</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>Confirme´l borráu de <strong>1 oxetu</strong> de <strong>{0} "
-"relaciones</strong>.</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>Confirme´l borráu de <strong>{0} oxetos</strong> de <strong>{1} "
-"relaciones</strong>.</html>"
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] "Borrando {0} oxetu"
-msgstr[1] "Borrando {0} oxetos"
-
-msgid "Delete objects"
-msgstr "Borrar oxetos"
-
-msgid "To delete"
-msgstr "A borrar"
-
-msgid "From Relation"
-msgstr "De la relación"
-
-msgid "Pos."
-msgstr "Pos."
+msgid " ({0})"
+msgstr " ({0})"
 
-msgid "Role"
-msgstr "Rol"
+msgid "{0} completed in {1}"
+msgstr "{0} completáu en {1}"
 
-msgid "Click to close the dialog and remove the object from the relations"
-msgstr ""
-"Faiga clic pa pesllar el cuadru de diálogu y esaniciar l''oxetu de les "
-"relaciones"
+msgid "Enlarge"
+msgstr "Agrandar"
 
-msgid "Click to close the dialog and to abort deleting the objects"
-msgstr ""
-"Faiga clic pa cerrar el cuadru de diálogu y albortar la eliminación de los "
-"oxetos"
+msgid "Shrink"
+msgstr "Encoyer"
 
 msgid ""
 "<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
@@ -5362,10 +5445,10 @@ msgid "Conflict foreground: keep all tags"
 msgstr "Conflictu de primer planu: caltenga toes les etiquetes"
 
 msgid "Conflict background: sum all numeric tags"
-msgstr ""
+msgstr "Segundu planu del conflictu: suma de toles etiquetes numbériques"
 
 msgid "Conflict foreground: sum all numeric tags"
-msgstr ""
+msgstr "Primer planu del conflictu: suma de toles etiquetes numbériques"
 
 msgid "Conflict background: keep member"
 msgstr "Conflictu de fondu: caltenga el miembru"
@@ -5398,7 +5481,7 @@ msgid "Tags"
 msgstr "Etiquetes"
 
 msgid "Nodes"
-msgstr "Nodos"
+msgstr "Nudos"
 
 msgid "Members"
 msgstr "Miembros"
@@ -5417,19 +5500,19 @@ msgstr[0] "{0} conflictu d´etiquetes pendiente de resolver"
 msgstr[1] "{0} conflictos d´eitquetes pendientes de resolver"
 
 msgid "Nodes(resolved)"
-msgstr "Nodos (resueltos)"
+msgstr "Nudos (resueltos)"
 
 msgid ""
 "Merged node list frozen. No pending conflicts in the node list of this way"
 msgstr ""
-"Llista de nodos fundíos conxelada. Nun hai conflictos pindios na llista de "
-"nodos d''esta vía"
+"Llista de nudos fusionaos conxelada. Nun hai conflictos pendientes na llista "
+"de nudos d’esta vía"
 
 msgid "Nodes(with conflicts)"
-msgstr "Nodos (con conflictos)"
+msgstr "Nudos (con conflictos)"
 
 msgid "Pending conflicts in the node list of this way"
-msgstr "Conflictos pendientes na llista de nodos d''esta vía"
+msgstr "Conflictos pendientes na llista de nudos d’esta vía"
 
 msgid "Members(resolved)"
 msgstr "Miembros (resueltos)"
@@ -5519,7 +5602,7 @@ msgstr "> arriba"
 
 msgid "Copy my selected nodes to the start of the merged node list"
 msgstr ""
-"Copiar los mios nodos escoyíos al entamu de la llista de nodos fundíos"
+"Copiar los mios nudos escoyíos al principiu de la llista de nudos fusionaos"
 
 msgid "> bottom"
 msgstr "> abaxo"
@@ -5650,11 +5733,11 @@ msgstr[0] "La so versión ({0} ingresada)"
 msgstr[1] "La so versión ({0} ingresaes)"
 
 msgid "Node"
-msgstr "Nodo"
+msgstr "Nudu"
 
 msgid "Merged nodes not frozen yet. Cannot build resolution command."
 msgstr ""
-"Los nodos fundíos entá nun tán conxelaos. Non puede construyise la orde de "
+"Los nudos fusionaos inda nun tán conxelaos. Nun pué construyise la orde de "
 "resolvimientu."
 
 msgid "Properties in my dataset, i.e. the local dataset"
@@ -5709,12 +5792,15 @@ msgstr "Caltener el so estáu desaniciáu"
 msgid "Undecide conflict between deleted state"
 msgstr "Conflictu ensin resolver ente estaos desaniciaos"
 
+msgid "Role"
+msgstr "Rol"
+
 msgid "Primitive"
 msgstr "Primitivu/a"
 
 msgid "Merged nodes not frozen yet. Cannot build resolution command"
 msgstr ""
-"Los nodos fundíos entá nun tán conxelaos. Non puede construyise la orde de "
+"Los nudos fusionaos inda nun tán conxelaos. Nun pué construyise la orde de "
 "resolvimientu."
 
 msgid "<undefined>"
@@ -5766,8 +5852,7 @@ msgstr "Conflictos al fundir víes - La vía fundida ye ''{0}''"
 
 msgid "Conflicts when merging nodes - target node is ''{0}''"
 msgstr ""
-"Detectáronse conflictos cuando mientres la unión de nodos. El nodo destín ye "
-"\"{0}\""
+"Conflictos demientres la fusión de nudos. El nudu de destín ye \"{0}\""
 
 msgid "No conflicts to resolve"
 msgstr "Nengún conflictu que resolver"
@@ -5846,7 +5931,7 @@ msgid "all"
 msgstr "toos"
 
 msgid "sum"
-msgstr ""
+msgstr "suma"
 
 msgid "Please decide which values to keep"
 msgstr "Por favor, decida que valores hai que caltener"
@@ -5857,6 +5942,7 @@ msgstr "El valor ''{0}'' va ser aplicáu a la clave ''{1}''"
 msgid ""
 "All numeric values sumed as ''{0}'' are going to be applied for key ''{1}''"
 msgstr ""
+"Tolos valores numbéricos sumaos como ''{0}'' van aplicase a la clave ''{1}''"
 
 msgid "The key ''{0}'' and all its values are going to be removed"
 msgstr "La clave ''{0}'' y tolos sos valores van ser suprimíos"
@@ -5872,7 +5958,7 @@ msgid "Not decided yet."
 msgstr "Entá non decidíu"
 
 msgid "Tags from nodes"
-msgstr "Etiquetes de nodos"
+msgstr "Etiquetes de nudos"
 
 msgid "Tags from ways"
 msgstr "Etiquetes de víes"
@@ -5984,17 +6070,19 @@ msgid ""
 "other nodes that are members of the same relation: the target node will take "
 "the place of the original node in the relation.</html>"
 msgstr ""
-"<html>Los nodos combinaos son miembros d''una o más relaciones. Por favor "
-"decida si quier<strong>caltener</strong> estes membresías nel nodo en "
-"cuestión o si deseya <strong>quitar</strong>.<br>La opción por defectu ye "
-"<strong>caltener</strong> la membresía del primera nodo y "
-"<strong>quitar</strong> la de los otros que son miembros d''una mesma "
-"relación: el nodo fundíu va tomar el llugar del nodo orixinal na "
-"relación.</html>"
+"<html>Los nudos combinaos son miembros d’una o más rellaciones. Por favor "
+"decide si quies <strong>caltener</strong> estes pertenencies nel nudu de "
+"destín o si quies <strong>quitales</strong>.<br>La opción predeterminada ye "
+"<strong>caltener</strong> el primer nudu y <strong>quitar</strong> los otros "
+"que son miembros de la mesma rellación: el nudu de destín tomará el llugar "
+"del nudu orixinal na rellación.</html>"
 
 msgid "Apply this role to all members"
 msgstr "Aplicar esta función a tolos miembros"
 
+msgid "Pos."
+msgstr "Pos."
+
 msgid "Orig. Way"
 msgstr "Vía orixinal"
 
@@ -6097,7 +6185,7 @@ msgstr[0] "Conflictu: {0} non resueltu"
 msgstr[1] "Conflictos: {0} non resueltos"
 
 msgid "Rel.:{0} / Ways:{1} / Nodes:{2}"
-msgstr "Rel.:{0} / Víes:{1} / Nodos:{2}"
+msgstr "Rel.:{0} / Víes:{1} / Nudos:{2}"
 
 msgid "Resolve"
 msgstr "Resolver"
@@ -6156,19 +6244,64 @@ msgstr "Resolver conflictos"
 msgid "Resolve conflicts for ''{0}''"
 msgstr "Resolver los conflictos de ''{0}''"
 
-msgid "Filter objects and hide/disable them."
-msgstr "Peñera oxetos y despíntalos/visualízalos."
-
-msgid "Enable filter"
-msgstr "Activar filtru"
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+"<html>Confirme''l borráu de <strong>1 oxetu</strong> de <strong>1 "
+"relación</strong>.</html>"
 
-msgid "Multikey: {0}"
-msgstr "Combinación de tecles: {0}"
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Confirme´l borráu de <strong>1 oxetu</strong> de <strong>{0} "
+"relaciones</strong>.</html>"
 
-msgid "Hide filter"
-msgstr "Despintar filtru"
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Confirme´l borráu de <strong>{0} oxetos</strong> de <strong>{1} "
+"relaciones</strong>.</html>"
 
-msgid "Hiding filter"
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] "Borrando {0} oxetu"
+msgstr[1] "Borrando {0} oxetos"
+
+msgid "Delete objects"
+msgstr "Borrar oxetos"
+
+msgid "To delete"
+msgstr "A borrar"
+
+msgid "From Relation"
+msgstr "De la relación"
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+"Faiga clic pa pesllar el cuadru de diálogu y esaniciar l''oxetu de les "
+"relaciones"
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+"Faiga clic pa cerrar el cuadru de diálogu y albortar la eliminación de los "
+"oxetos"
+
+msgid "Filter objects and hide/disable them."
+msgstr "Peñera oxetos y despíntalos/visualízalos."
+
+msgid "Enable filter"
+msgstr "Activar filtru"
+
+msgid "Multikey: {0}"
+msgstr "Combinación de tecles: {0}"
+
+msgid "Hide filter"
+msgstr "Despintar filtru"
+
+msgid "Hiding filter"
 msgstr "Despintando filtru"
 
 msgid "Inverse filter"
@@ -6259,14 +6392,14 @@ msgstr "Información ampliada sobre l''oxetu"
 msgid "map style"
 msgstr "estilu de mapa"
 
-msgid " ({0})"
-msgstr " ({0})"
+msgid "edit counts"
+msgstr "cuenta de ediciones"
 
 msgid "not in data set"
 msgstr "non nel conxuntu de datos"
 
 msgid "Node: "
-msgstr "Nodo: "
+msgstr "Nudu: "
 
 msgid "Way: "
 msgstr "Vía: "
@@ -6328,7 +6461,7 @@ msgid " as \"{0}\""
 msgstr " como \"{0}\""
 
 msgid "{0} Nodes: "
-msgstr "{0} Nodos: "
+msgstr "{0} Nudos: "
 
 msgid "Bounding box: "
 msgstr "Cuadru allindiador: "
@@ -6400,6 +6533,11 @@ msgstr ""
 "Atención: los dos oxetos escoyíos tienen caxés d''estilos iguales, pero non "
 "idéntiques."
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] "{0} usuariu camudó la seleición:"
+msgstr[1] "{0} usuarios camudaron la seleición:"
+
 msgid "xml"
 msgstr "xml"
 
@@ -6409,28 +6547,49 @@ msgstr "mapcss"
 msgid "unknown"
 msgstr "desconocíu"
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
-msgstr ""
-"Ingrese les coordenaes pal nuevu nodo.<br/>Puede dixebrar llargor y llatitú "
-"con un espaciu, coma o puntu y coma.<br/>Use númberos positivos o les "
-"lletres N y Y pa indicar los puntos cardinales Norte o Este.<br/>Pa los "
-"puntos cardinales Sur y Oeste utilice númberos negativos o les lletres S y "
-"W.<br/>El valor de les coordenaes puede tar en cualesquier de los siguientes "
-"trés formatos:<ul><li><i>graos</i><tt>°</tt></li><li><i>graos</i><tt>°</tt> "
-"<i>minutos</i><tt>&39;</tt></li><li><i>graos</i><tt>°</tt> "
-"<i>minutos</i><tt>&39;</tt> <i>segundos</i><tt>\"</tt></li></ul>Los símbolos "
-"<tt>°</tt>, <tt>&39;</tt>, <tt>′</tt>, <tt>\"</tt>, <tt>″</tt> son "
-"opcionales.<br/><br/>Dellos exemplos:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
+msgstr ""
 
 msgid "Projected coordinates:"
 msgstr "Coordenaes proyectaes:"
@@ -6477,6 +6636,12 @@ msgstr "Opacidá"
 msgid "Adjust opacity of the layer."
 msgstr "Axustar opacidá de la capa"
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr "Activar"
 
@@ -6523,7 +6688,7 @@ msgid "Map paint preferences"
 msgstr "Preferencies pa la representación del mapa"
 
 msgid "Map Paint Styles"
-msgstr "Estilos de semiología cartográfica"
+msgstr "Estilos de dibuxu del mapa"
 
 msgid "configure the map painting style"
 msgstr "Configurar l''estilo de dibuxáu del mapa"
@@ -6606,9 +6771,15 @@ msgstr "Estilu de axustes"
 msgid "Customize the style"
 msgstr "Personaliza l''estilu"
 
-msgid "List of notes"
+msgid "Mini map"
+msgstr ""
+
+msgid "Displays a small map of the current edit location"
 msgstr ""
 
+msgid "List of notes"
+msgstr "Llista de notes"
+
 msgid "Add comment"
 msgstr "Amestar comentariu"
 
@@ -6664,14 +6835,20 @@ msgstr "ID del oxetu:"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "Escribi la ID del oxetu que se tien de descargar"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+"Les ID de los oxetos puen separase con comes o espacios, por exemplu: {0}"
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
 msgstr ""
-"Los ID de los oxetos puen ser separaos por coma o espaciu.<br/>Exemplos: "
-"{0}<br/>En el mou mistu, especifique oxetos del siguiente mou: {1}<br/>({2} "
-"corresponde a <i>nodo</i>, {3} a <i>vía</i>, y {4} a <i>relación</i>)"
+"En mou mistu, especifica los oxetos d’esta manera: {0}<br/>({1} representa "
+"<i>node</i>, {2} pa <i>way</i>, y {3} pa <i>relation</i>)"
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
+msgstr ""
+"Los rangos de les IDs de los oxetos sepárense con guiones, por exemplu: {0}"
 
 msgid ""
 "Invalid ID list specified\n"
@@ -6701,6 +6878,9 @@ msgstr "Relaciones: {0}/{1}"
 msgid "Relations: {0}"
 msgstr "Relaciones: {0}"
 
+msgid "Selection"
+msgstr "Seleición"
+
 msgid "Open a selection list window."
 msgstr "Abrir una ventana de seleición."
 
@@ -6714,10 +6894,10 @@ msgid "Display the history of the selected objects."
 msgstr "Amosar l''hestóricu de los oxetos escoyíos."
 
 msgid "Zoom to selection"
-msgstr "Zoom a la escoyeta"
+msgstr "Averar a la escoyeta"
 
 msgid "Zoom to selected element(s)"
-msgstr "Zoom a los elementos escoyíos"
+msgstr "Averar a los elementos escoyíos"
 
 msgid "Sel.: Rel.:{0} / Ways:{1} / Nodes:{2}"
 msgstr "Sel.: Rel.:{0} / Víes:{1} / Nodos:{2}"
@@ -6795,6 +6975,12 @@ msgstr "Abrir la ventana de validación"
 msgid "Validation results"
 msgstr "Resultaos de la validación"
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr "Iguar"
 
@@ -6977,13 +7163,13 @@ msgid "Nothing to select"
 msgstr "Naa pa escoyer"
 
 msgid "Zoom to in layer"
-msgstr "Axustar a la capa"
+msgstr "Averar na capa"
 
 msgid "Zoom to the corresponding objects in the current data layer"
-msgstr "Facer zoom a los oxetos correspondientes na capa de datos actual"
+msgstr "Averar a los oxetos correspondientes na capa de datos actual"
 
 msgid "Nothing to zoom to"
-msgstr "Naa p''agrandar"
+msgstr "Nun hai nada p''averar"
 
 msgid "The content of this changeset is not downloaded yet."
 msgstr "Nun se descargó''l conteníu d''esti cambéu."
@@ -7049,14 +7235,14 @@ msgid ""
 "Zoom to the objects in the content of this changeset in the current data "
 "layer"
 msgstr ""
-"Facer zoom a los oxetos que formen parte d''esti conxuntu de cambeos na capa "
-"de datos actual"
+"Averar a los oxetos que formen parte d''esti conxuntu de cambeos na capa de "
+"datos actual"
 
 msgid "Update changeset discussion"
 msgstr "Anovar l’alderique del conxuntu de cambios"
 
 msgid "Update the changeset discussion from the OSM server"
-msgstr ""
+msgstr "Anovar l''alderique del conxuntu de cambios dende''l sirvidor d''OSM"
 
 msgid "Date"
 msgstr "Fecha"
@@ -7380,17 +7566,17 @@ msgid "Discardable key: background"
 msgstr "Clave descartable: segundu planu"
 
 msgid "{0} ''{1}''"
-msgstr ""
+msgstr "{0} ''{1}''"
 
 msgid "{0} different"
 msgid_plural "{0} different"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} distintu"
+msgstr[1] "{0} distintos"
 
 msgid ", {0} unset"
 msgid_plural ", {0} unset"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] ", {0} sin establecer"
+msgstr[1] ", {0} sin establecer"
 
 msgid "Select objects for which to change tags."
 msgstr "Escueya los oxetos a los que camudar les etiquetes."
@@ -7411,7 +7597,7 @@ msgid "<different>"
 msgstr "<diferente>"
 
 msgid "Objects: {2} / Tags: {0} / Memberships: {1}"
-msgstr ""
+msgstr "Oxetos: {2} / Etiquetes: {0} / Pertenencies: {1}"
 
 msgid "Tags: {0} / Memberships: {1}"
 msgstr "Etiquetes: {0} / Miembros: {1}"
@@ -7452,6 +7638,12 @@ msgstr "Ir a la wiki d''OSM p''axuda sobre cómo etiquetar (F1)"
 msgid "Launch browser with wiki help for selected object"
 msgstr "Empecipia''l navegador con ayuda de la wiki pal oxetu escoyíu"
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr "Apegar Valor"
 
@@ -7545,17 +7737,16 @@ msgid "Set number of recently added tags"
 msgstr "Establecer el númberu d''etiquetes añedíes pocayá"
 
 msgid "Remember last used tags after a restart"
-msgstr ""
+msgstr "Alcordase de les últimes etiquetes usaes tres reaniciar"
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
-msgstr ""
+msgid "to apply first suggestion"
+msgstr "p’aplicar la primera suxerencia"
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
-msgstr ""
+msgid "to add without closing the dialog"
+msgstr "p’amestar sin zarrar el diálogu"
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
-msgstr ""
+msgid "to add first suggestion without closing the dialog"
+msgstr "p’amestar la primera suxerencia sin zarrar el diálogu"
 
 msgid "Please enter the number of recently added tags to display"
 msgstr ""
@@ -7755,6 +7946,13 @@ msgstr "Ordenar los miembros de la relación"
 msgid "Relation Editor: Sort"
 msgstr "Editor de rellaciones: axeitar"
 
+msgid "Sort below"
+msgstr "Ordenar abaxo"
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+"Ordenar los miembros esbillaos de la rellación y tolos miembros de más abaxo"
+
 msgid "Reverse the order of the relation members"
 msgstr "Invertir l''orde de los miembros de la relación"
 
@@ -7919,10 +8117,10 @@ msgstr ""
 "Escueye al miembru siguiente de la relación que da llugar a una interrupción"
 
 msgid "Zoom to Gap"
-msgstr "Zoom a distancia"
+msgstr "Averar a saltu"
 
 msgid "Zoom to the gap in the way sequence"
-msgstr "Zoom al interrupción en la secuencia de la vía."
+msgstr "Averar al saltu na secuencia de la vía."
 
 msgid "Refers to"
 msgstr "Refierse a"
@@ -8071,7 +8269,7 @@ msgid "Select to download GPS traces in the selected download area."
 msgstr "Escueya pa descargar traces GPS de la área de descarga escoyida."
 
 msgid "Select to download notes in the selected download area."
-msgstr ""
+msgstr "Seleiciona baxar les notes del área descargada."
 
 msgid "Download as new layer"
 msgstr "Descargar como nueva capa"
@@ -8128,6 +8326,9 @@ msgid ""
 "<strong>{2}</strong> is enabled.<br>Please choose to either download OSM "
 "data, or GPX data, or Notes, or all.</html>"
 msgstr ""
+"<html>Nun tan activaos nin <strong>{0}</strong>, nin <strong>{1}</strong> "
+"nin <strong>{2}</strong>.<br>Escueye si descargar datos d’OSM, o GPX, o "
+"Notes, o toos ellos.</html>"
 
 msgid "Download referrers (parent relations)"
 msgstr "Descargar referencies (rellaciones padre)"
@@ -8189,7 +8390,7 @@ msgid "Error occured with query ''{0}'': ''{1}''"
 msgstr "Hebo un error cola consulta ''{0}'': ''{1}''"
 
 msgid "Name server returned invalid data. Please try again."
-msgstr ""
+msgstr "El sirvidor de nomes devolvió datos inválidos. Vuelve a intentalo."
 
 msgid "Bad response"
 msgstr "Mala respuesta"
@@ -8351,11 +8552,14 @@ msgstr "Cargando historial pa la relación {0}"
 msgid "Node {0}"
 msgstr "Nodo {0}"
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
-msgstr "Zoom a nodo"
+msgstr "Averar a nudu"
 
 msgid "Zoom to this node in the current data layer"
-msgstr "Zoom a esti nodo na actual capa de datos"
+msgstr "Averar a esti nudu na capa de datos actual"
 
 msgid "Open a history browser with the history of this node"
 msgstr "Abrir un navegador d''hestóricos col historial d''esti nodo"
@@ -8379,13 +8583,13 @@ msgid "Changeset source"
 msgstr "Fonte del conxuntu de cambeos"
 
 msgid "Imagery used"
-msgstr ""
+msgstr "Imaxes utilizaes"
 
 msgid "<b>Source</b>:"
 msgstr "<b>Fonte</b>:"
 
 msgid "<b>Imagery</b>:"
-msgstr ""
+msgstr "<b>Imaxes</b>:"
 
 msgid ""
 "<html>Version <strong>{0}</strong> currently edited in layer ''{1}''</html>"
@@ -8398,7 +8602,7 @@ msgstr ""
 "<html>Versión <strong>{0}</strong> creada´l <strong>{1}</strong></html>"
 
 msgid "Changeset"
-msgstr ""
+msgstr "Conxuntu de cambios"
 
 msgid "Changeset info"
 msgstr "Información del coxuntu de cambeos"
@@ -9347,6 +9551,108 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] "{0} oxetu pa esaniciar:"
 msgstr[1] "{0} oxetos pa esaniciar:"
 
+msgid "Show Tile Info"
+msgstr "Amosar información de la tesela"
+
+msgid "Tile Info"
+msgstr "Información del cuadru"
+
+msgid "Metadata "
+msgstr "Metadatos "
+
+msgid "Auto Zoom"
+msgstr "Auto Zoom"
+
+msgid "Auto load tiles"
+msgstr "Cargar teseles automáticamente"
+
+msgid "Load All Tiles"
+msgstr "Cargar toles teseles"
+
+msgid "Load All Error Tiles"
+msgstr "Recargar teseles errónees"
+
+msgid "Zoom to native resolution"
+msgstr "Averar a resolución nativa"
+
+msgid "Change resolution"
+msgstr "Camudar resolvimientu"
+
+msgid "Failed to create tile source"
+msgstr "Falló la creación d’una fonte de cuadros"
+
+msgid "Show Errors"
+msgstr "Amosar erros"
+
+msgid "Load Tile"
+msgstr "Cargar tesela"
+
+msgid "Increase zoom"
+msgstr "Aumentar zoom"
+
+msgid "Decrease zoom"
+msgstr "Amenorgar zoom"
+
+msgid "Snap to tile size"
+msgstr "Axustar al tamañu de la tesela"
+
+msgid "Flush Tile Cache"
+msgstr "Allinear caxé de teseles"
+
+msgid "zoom in to load any tiles"
+msgstr "faiga zoom averando pa cargar cualesquier tesela"
+
+msgid "zoom in to load more tiles"
+msgstr "faiga zoom averando pa cargar más teseles"
+
+msgid "increase zoom level to see more detail"
+msgstr "aumenta''l nivel de zoom pa ver más detalles"
+
+msgid "No tiles at this zoom level"
+msgstr "Non hai teseles a esti nivel de zoom"
+
+msgid "Current zoom: {0}"
+msgstr "Zoom actual: {0}"
+
+msgid "Display zoom: {0}"
+msgstr "Amosar zoom: {0}"
+
+msgid "Pixel scale: {0}"
+msgstr "Escala de píxeles: {0}"
+
+msgid "Best zoom: {0}"
+msgstr "Meyor zoom: {0}"
+
+msgid "Cache stats: {0}"
+msgstr "Estadístiques de caché: {0}"
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr "{0} ({1}), descargando automáticamente cola ampliación {2}"
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr "{0} ({1}), descargando cola ampliación {2}"
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr "Descargaes {0}/{1} teseles"
+
+msgid "Save WMS file"
+msgstr "Guardar arquivu WMS"
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+"Les imaxes aérees puen tar equivocadamente alliniaes. ¡Por favor, "
+"compruebe''l so desplazamientu usando trazar de GPS!"
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+
+msgid "Details..."
+msgstr "Detalles..."
+
+msgid "Hide this message and never show it again"
+msgstr "Despintar esti mensaxe y nun volver amosalu de nuevu"
+
 msgid "Customize Color"
 msgstr "Personaliza la color"
 
@@ -9400,6 +9706,9 @@ msgstr "Guardar ficheru GPX"
 msgid "Imagery fade"
 msgstr "Tresparencia d''imaxes"
 
+msgid "Unsupported imagery type: {0}"
+msgstr "Tipu d’imaxes sin sofitu: {0}"
+
 msgid "ERROR"
 msgstr "ERRU"
 
@@ -9420,12 +9729,12 @@ msgstr "Toles proyecciones son compatibles"
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
-"La capa {0} non ye compatible cola nueva proyección {1}.\n"
-"{2}\n"
-"Camude la proyección otra vegada o esanicie la capa."
+"La capa {0} nun sofita la nueva proyeición {1}.\n"
+"Les proyeiciones con sofitu son: {2}\n"
+"Cambia la proyeición o desanicia la capa."
 
 msgid "Save Layer"
 msgstr "Guardar capa"
@@ -9508,151 +9817,45 @@ msgstr ""
 msgid "Save OSM file"
 msgstr "Guardar ficheru OSM"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-"{0} nun ye un argumentu válidu pa una capa TMS. Compruebe la URL del "
-"servidor:\n"
-"{1}"
+msgid "EPSG:4326 and Mercator projection are supported"
+msgstr "Compatible con EPSG:4326 y la proyección de Mercator"
+
+msgid "Validation errors"
+msgstr "Erros de validación"
+
+msgid "No validation errors"
+msgstr "Ensin erros de validación"
+
+msgid "Set WMS Bookmark"
+msgstr "Afitar marcador WMS"
 
 msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
-"Les capes TMS nun son compatibles cola proyección {0}.\n"
-"{1}\n"
-"Camude la proyección o esanicie la capa."
+"JOSM usará EPSG:4326 pa consultar al sirvidor, pero la respuesta pué variar "
+"dependiendo del sirvidor WMS"
 
-msgid "Auto Zoom"
-msgstr "Auto Zoom"
+msgid "Correlate to GPX"
+msgstr "Correlacionar con GPX"
 
-msgid "Auto load tiles"
-msgstr "Cargar teseles automáticamente"
+msgid "Invalid timezone"
+msgstr "Zona horaria non válida"
 
-msgid "Show Errors"
-msgstr "Amosar erros"
+msgid "Invalid offset"
+msgstr "Desplazamientu inválidu"
 
-msgid "Load Tile"
-msgstr "Cargar tesela"
+msgid "Correlate images with GPX track"
+msgstr "Correlacionar les imaxes con traces GPX"
 
-msgid "Show Tile Info"
-msgstr "Amosar información de la tesela"
+msgid "Try Again"
+msgstr "Volver intentar"
 
-msgid "Load All Tiles"
-msgstr "Cargar toles teseles"
+msgid "No images could be matched!"
+msgstr "¡Non pudo apariase imaxe dalguna!"
 
-msgid "Load All Error Tiles"
-msgstr "Recargar teseles errónees"
-
-msgid "Increase zoom"
-msgstr "Aumentar zoom"
-
-msgid "Decrease zoom"
-msgstr "Amenorgar zoom"
-
-msgid "Snap to tile size"
-msgstr "Axustar al tamañu de la tesela"
-
-msgid "Flush Tile Cache"
-msgstr "Allinear caxé de teseles"
-
-msgid "zoom in to load any tiles"
-msgstr "faiga zoom averando pa cargar cualesquier tesela"
-
-msgid "zoom in to load more tiles"
-msgstr "faiga zoom averando pa cargar más teseles"
-
-msgid "increase zoom level to see more detail"
-msgstr "aumenta''l nivel de zoom pa ver más detalles"
-
-msgid "No tiles at this zoom level"
-msgstr "Non hai teseles a esti nivel de zoom"
-
-msgid "Current zoom: {0}"
-msgstr "Zoom actual: {0}"
-
-msgid "Display zoom: {0}"
-msgstr "Amosar zoom: {0}"
-
-msgid "Pixel scale: {0}"
-msgstr "Escala de píxeles: {0}"
-
-msgid "Best zoom: {0}"
-msgstr "Meyor zoom: {0}"
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr "Capa TMS ({0}), descargando´n nivel d´averamientu {1}"
-
-msgid "EPSG:4326 and Mercator projection are supported"
-msgstr "Compatible con EPSG:4326 y la proyección de Mercator"
-
-msgid "Validation errors"
-msgstr "Erros de validación"
-
-msgid "No validation errors"
-msgstr "Ensin erros de validación"
-
-msgid "Blank Layer"
-msgstr "Capa valera"
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr "Descargaes {0}/{1} teseles"
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr "Capa WMS ({0}) descargándose automáticamente nel zoom {1}"
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr "Capa WMS ({0}), descargando en zoom {1}"
-
-msgid "Download visible tiles"
-msgstr "Descarga teseles visibles"
-
-msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-"La área solicitada ye demasiáu grande. Por favor, amplíe''l zoom un pocu "
-"más, o camude''l resolvimientu"
-
-msgid "Change resolution"
-msgstr "Camudar resolvimientu"
-
-msgid "Reload erroneous tiles"
-msgstr "Recargar teselas errónees"
-
-msgid "Alpha channel"
-msgstr "Canal alfa"
-
-msgid "Automatically change resolution"
-msgstr "Camudar el resolvimientu de forma automática"
-
-msgid "Set WMS Bookmark"
-msgstr "Afitar marcador WMS"
-
-msgid "Automatic downloading"
-msgstr "Descarga automática"
-
-msgid "Zoom to native resolution"
-msgstr "Zoom a resolvimientu nativu"
-
-msgid "Supported projections are: {0}"
-msgstr "Les proyecciones compatibles son: {0}"
-
-msgid "Unsupported WMS file version; found {0}, expected {1}"
-msgstr "Versión d´arquivu WMS non soportada; atopada {0}, esperada {1}"
-
-msgid "Save WMS file"
-msgstr "Guardar arquivu WMS"
-
-msgid "Correlate to GPX"
-msgstr "Correlacionar con GPX"
-
-msgid "GPX Files (*.gpx *.gpx.gz)"
-msgstr "Arquivos GPX (.gpx .gpx.gz)"
+msgid "GPX Files (*.gpx *.gpx.gz)"
+msgstr "Arquivos GPX (.gpx .gpx.gz)"
 
 msgid "File {0} is loaded yet under the name \"{1}\""
 msgstr "L´arquivu {0} yá ta cargáu col nome {1}"
@@ -9742,24 +9945,9 @@ msgstr "Zona horaria: "
 msgid "Offset:"
 msgstr "Desplazamientu:"
 
-msgid "Correlate images with GPX track"
-msgstr "Correlacionar les imaxes con traces GPX"
-
 msgid "Correlate"
 msgstr "Correlacionar"
 
-msgid "Invalid timezone"
-msgstr "Zona horaria non válida"
-
-msgid "Invalid offset"
-msgstr "Desplazamientu inválidu"
-
-msgid "Try Again"
-msgstr "Volver intentar"
-
-msgid "No images could be matched!"
-msgstr "¡Non pudo apariase imaxe dalguna!"
-
 msgid "No gpx selected"
 msgstr "Nun s''escoyó nengún arquivu GPX"
 
@@ -9978,14 +10166,11 @@ msgstr ""
 "\n"
 "Tiempu de GPS : {0}"
 
-msgid "JPEG images (*.jpg)"
-msgstr "Imaxes JPEG (*.jpg)"
-
 msgid "Show thumbnails"
-msgstr ""
+msgstr "Amosar miniatures"
 
 msgid "Show image thumbnails instead of icons."
-msgstr ""
+msgstr "Amosar miniatures de les imaxes en llugar d’iconos"
 
 msgid "Choose visible tracks"
 msgstr "Escoyer traces visibles"
@@ -10049,9 +10234,6 @@ msgstr "metros"
 msgid "Maximum area per request:"
 msgstr "Área máxima por pidimientu:"
 
-msgid "sq km"
-msgstr "km2"
-
 msgid "Download near:"
 msgstr "Descargar cercanos:"
 
@@ -10807,15 +10989,15 @@ msgstr "Cerrar el diálogu de preferencies y refugar los cambeos"
 msgid "Save the preferences and close the dialog"
 msgstr "Guardar les preferencies y cerrar el diálogu"
 
-msgid "Download plugins"
-msgstr "Descargar complementos"
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr "Tien de reiniciar JOSM por que les preferencies tengan efectu."
 
 msgid "Would you like to restart now?"
 msgstr "¿Deseya reiniciar agora?"
 
+msgid "Download plugins"
+msgstr "Descargar complementos"
+
 msgid "Icon paths:"
 msgstr "Ruta de los iconos:"
 
@@ -11692,6 +11874,21 @@ msgstr "Amosar llindar"
 msgid "No bounding box was found for this layer."
 msgstr "Nun s''atoparon les llendes pa esta capa."
 
+msgid "1. Enter getCapabilities URL"
+msgstr "1.  Escribe la URL de getCapabilities"
+
+msgid "2. Enter name for this layer"
+msgstr "2.  Escribe’l nome pa esta capa"
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr "opacidá d''imaxes"
 
@@ -11710,6 +11907,18 @@ msgstr "Fuerte"
 msgid "Sharpen (requires layer re-add): "
 msgstr "Enfoque (rique recarga la capa): "
 
+msgid "Tile cache directory: "
+msgstr "Directoriu del caxé de teseles: "
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr "Preferencies d''imaxes"
 
@@ -11731,6 +11940,9 @@ msgstr "Provisores d''imaxes"
 msgid "Offset bookmarks"
 msgstr "Marcadores de desplazamientos"
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr "Fondu de les capes d''imaxes: por defeutu"
 
@@ -11773,9 +11985,6 @@ msgstr "URL de llicencia EULA non disponible: {0}"
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr "URL malformada pa la llicencia EULA: {0}"
 
-msgid "Projection"
-msgstr "Proyección"
-
 msgid "Layer"
 msgstr "Capa"
 
@@ -11800,18 +12009,12 @@ msgstr "Nivel de zoom máximu: "
 msgid "Add to slippymap chooser: "
 msgstr "Añedir al selector del mapa esnidiosu: "
 
-msgid "Tile cache directory: "
-msgstr "Directoriu del caxé de teseles: "
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
@@ -11819,20 +12022,11 @@ msgstr ""
 "La capa nun ye compatible con nenguna de les proyecciones de JOSM,\n"
 "asina que non puede usar. Esti mensaxe nun se volverá amosar."
 
-msgid "Downloader:"
-msgstr "Xestor de descarga:"
-
 msgid "Simultaneous connections:"
 msgstr "Conexones simultánees:"
 
-msgid "Overlap tiles"
-msgstr "Superposición de teseles"
-
-msgid "% of east:"
-msgstr "% escontra l''este:"
-
-msgid "% of north:"
-msgstr "% escontra''l norte:"
+msgid "Tile size:"
+msgstr "Tamañu de la tesela:"
 
 msgid "Auto save enabled"
 msgstr "Autoguardáu activáu"
@@ -12867,6 +13061,14 @@ msgstr "Aplicar predeterminaos"
 msgid "New relation"
 msgstr "Nueva relación"
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] "Modificar oxetu {0}"
@@ -12985,6 +13187,9 @@ msgstr "Amosar diálogu de busca preestablecía"
 msgid "Search presets"
 msgstr "Buscar predefiníos"
 
+msgid "Presets"
+msgstr "Axustes Predefiníos"
+
 msgid "Search for objects by preset"
 msgstr "Buscar oxetos per tipu predefiníu"
 
@@ -13294,6 +13499,9 @@ msgstr "<html>Non pudieron lleese los arquivos.<br>L´erru ye:<br>{0}</html>"
 msgid "GeoJSON Files"
 msgstr "Arquivos GeoJSON"
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr "Capa ''{0}'' non soportada"
 
@@ -13884,6 +14092,9 @@ msgstr "Arquivos del Servidor OSM estruyíos en zip"
 msgid "WMS Files (*.wms)"
 msgstr "Arquivos WMS (*.wms)"
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr "Versión d´arquivu WMS non soportada; atopada {0}, esperada {1}"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -14031,7 +14242,7 @@ msgid "Remote Control has been asked to load the following data:"
 msgstr ""
 
 msgid "Loading data"
-msgstr ""
+msgstr "Cargando los datos"
 
 msgid ""
 "Remote Control has been asked to load objects (specified by their id) from "
@@ -14321,6 +14532,19 @@ msgstr[1] ""
 "El complementu {0} rique {1} complementos que nun s''atoparon. El plugin que "
 "falta ye:"
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -15529,6 +15753,9 @@ msgstr "Actualizar"
 msgid "Update directory listing."
 msgstr "Actualizar llistáu de directoriu."
 
+msgid "View"
+msgstr "Vista"
+
 msgid "Blue:"
 msgstr "Azul:"
 
@@ -15568,8 +15795,8 @@ msgstr "MapQuest Open Aerial"
 msgid "OpenStreetMap GPS Traces"
 msgstr "OpenStreetMap GPS Traces"
 
-msgid "OpenStreetMap (Mapnik)"
-msgstr "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
+msgstr ""
 
 msgid "skobbler"
 msgstr "skobbler"
@@ -15580,9 +15807,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr "mapa de calor de skobbler"
-
 msgid "OpenCycleMap"
 msgstr "OpenCycleMap"
 
@@ -15691,6 +15915,9 @@ msgstr "Vienna: Orthofoto (imaxe aérea)"
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr "VoGIS: Echtfarbenbild 2012 (12cm)"
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr "VoGIS: Flächenwidmungsplan"
 
@@ -15704,12 +15931,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr "IBGE Mapa de Setores Urbanos"
 
@@ -15746,12 +15979,18 @@ msgstr "Czech RUIAN parcely"
 msgid "Czech pLPIS"
 msgstr "Czech pLPIS"
 
-msgid "Fugro (Denmark)"
-msgstr "Fugro (Denmark)"
-
 msgid "Geodatastyrelsen (Denmark)"
 msgstr "Geodatastyrelsen (Denmark)"
 
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
+msgstr ""
+
 msgid "Stevns (Denmark)"
 msgstr "Stevns (Denmark)"
 
@@ -15776,6 +16015,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr "Bordeaux - 2012"
 
@@ -15800,8 +16042,8 @@ msgstr "Géobretagne - Morbihan 2010"
 msgid "Géolittoral - Orthophotos 2000"
 msgstr "Géolittoral - Orthophotos 2000"
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
-msgstr "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
+msgstr ""
 
 msgid "Géolittoral - Sentiers"
 msgstr "Géolittoral - Sentiers"
@@ -15815,6 +16057,9 @@ msgstr "Loire-Atlantique - Orthophotos 2012 - 20 cm"
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr "Toulouse - Orthophotoplan 2013"
 
@@ -15827,12 +16072,6 @@ msgstr "Toulouse - Orthophotoplan 2007"
 msgid "Tours - Orthophotos 2013"
 msgstr "Tours - Orthophotos 2013"
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr "Tours - Orthophotos 2008-2010"
-
-msgid "Tours - Orthophotos 2008"
-msgstr "Tours - Orthophotos 2008"
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -15855,6 +16094,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr "Hamburg (DK5)"
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr "Bavaria (2 m)"
 
@@ -15890,11 +16132,8 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr "Maps4BW (LGL-BW, www.lgl-bw.de)"
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
-msgstr "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
+msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
 msgstr "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -15923,73 +16162,25 @@ msgstr "Ireland British War Office One-Inch 1941-43 GSGS 4136"
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr "Ireland Bartholomew Quarter-Inch 1940"
 
-msgid "OSMIE Townlands"
-msgstr ""
-
-msgid "OSMIE EDs"
-msgstr ""
-
-msgid "OSMIE Civil Parishes"
-msgstr ""
-
-msgid "OSMIE Baronies"
-msgstr ""
-
-msgid "OSMIE Political"
-msgstr ""
-
-msgid "Ireland EEA GMES Urban Atlas"
-msgstr "Ireland EEA GMES Urban Atlas"
-
-msgid "Ireland EEA CORINE 2006"
-msgstr "Ireland EEA CORINE 2006"
-
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
 msgstr ""
 
 msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Clare Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Dublin Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Fermanagh Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Galway Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Kildare Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Leitrim Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Longford Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Offaly Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Sligo Civil Parishes and Baronies"
+msgid "OSMIE Townlands"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "OSMIE EDs"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "OSMIE Civil Parishes"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "OSMIE Baronies"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "OSMIE Political"
 msgstr ""
 
 msgid "Lodi - Italy"
@@ -16025,6 +16216,9 @@ msgstr "50cm ortho - Latvia"
 msgid "20cm ortho - Latvia - Coastline"
 msgstr "20cm ortho - Latvia - Coastline"
 
+msgid "1.cikla ortofotokarte - Latvia"
+msgstr ""
+
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Lithuania)"
 
@@ -16040,6 +16234,9 @@ msgstr ""
 msgid "Luxembourg Inspire Roads"
 msgstr ""
 
+msgid "Luxembourg Inspire Water"
+msgstr ""
+
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Niger Delta Oct 2012 Landsat"
 
@@ -16055,9 +16252,15 @@ msgstr "Pangasinán/Bulacan (Phillipines HiRes)"
 msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr "Geoportal 2: Ortofotomapa (aerial image)"
 
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgstr ""
+
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr "Geoportal 2: PRNG (geo names)"
 
+msgid "Geoportal 2: ISOK hillshade"
+msgstr ""
+
 msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr "Będzin: Ortofotomapa 2013 (aerial image)"
 
@@ -16067,15 +16270,27 @@ msgstr "Będzin: Budynki (buildings)"
 msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr "Bytom: Ortofotomapa 2012 (aerial image)"
 
+msgid "Bytom: Fotoplan 2014 (aerial image)"
+msgstr ""
+
 msgid "Bytom: Budynki (buildings)"
 msgstr "Bytom: Budynki (buildings)"
 
 msgid "Chorzów: Budynki (buildings)"
 msgstr "Chorzów: Budynki (buildings)"
 
+msgid "Częstochowa: Budynki (buildings)"
+msgstr ""
+
 msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr "Częstochowa: Ortofotomapa 2011 (aerial image)"
 
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgstr ""
+
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgstr ""
+
 msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr "Gliwice: Ortofotomapa 2013 (aerial image)"
 
@@ -16085,10 +16300,46 @@ msgstr "Gliwice: Budynki (buildings)"
 msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr "Katowice: Ortofotomapa (aerial image)"
 
+msgid "Katowice: Budynki (buildings)"
+msgstr ""
+
+msgid "Łódź: Budynki (buildings)"
+msgstr ""
+
 msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr "Łódź: Ortofotomapa (aerial image)"
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat lubaczowski: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat łańcucki: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat poznański: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgstr ""
+
+msgid "Powiat rzeszowski: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgstr ""
+
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgstr ""
+
+msgid "Ruda Śląska: Ortofotomapa (aerial image)"
 msgstr "Ruda Śląska: Ortofotomapa (aerial image)"
 
 msgid "Rzeszów: Ortofotomapa (aerial image)"
@@ -16100,9 +16351,18 @@ msgstr "Rzeszów: Budynki (buildings)"
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr "Zabrze: Ortofotomapa 2011 (aerial image)"
 
@@ -16232,6 +16492,21 @@ msgstr "Bonvillars Orthophoto 2013"
 msgid "Fiez Orthophoto 2013"
 msgstr "Fiez Orthophoto 2013"
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr "MSR Maps Topo"
 
@@ -16247,7 +16522,7 @@ msgstr "USGS Large Scale Imagery"
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -16594,6 +16869,11 @@ msgstr ""
 "Implementa una llínea de comandos y dexa crear los tos comandos. Vea "
 "l''enllaz pa los comandos estándar (arcu, círculu, etc)"
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr "(Peligru: ¡Esperimental!) Ferramienta pa fusionar (entemecer) datos."
 
@@ -16697,13 +16977,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr "Mou de mapa con axuste d''imaxes aérees por aciu el WMSPlugin-style"
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-"Esti componente esperimental dexa a JOSM almacenar el caxé de teseles "
-"n''arquivos de base de datos, non en grandes directorios de caxé."
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -16777,7 +17050,7 @@ msgstr ""
 "sitiu web de MapDust. Puede crear, pesllar, invalidar, reabrir y comentar "
 "los informes d''erros esistentes por aciu l''usu d''esti componente."
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -16795,9 +17068,6 @@ msgstr "Combinar partes superpuestes de víes."
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr "Nun añedir nengún xiru a la izquierda pa conxuntos de 4 o 5 víes"
 
-msgid "Simplifies download from different read-only APIs."
-msgstr "Simplifica la descarga dende distintes APIs de namá llectura."
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr "Dexa asignar al empar etiquetes a tolos oxetos d''una área escoyida."
 
@@ -16901,6 +17171,14 @@ msgstr ""
 "Esti componente simplifica''l cartografiáu y edición de rutes de tresportes "
 "públicos."
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr "Panel d''edición y creación de multipolígonos y relación"
 
@@ -16945,6 +17223,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr "Editar característiques de OpenSeaMap"
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -17047,9 +17328,6 @@ msgstr ""
 "Habilitar busca pa puntos de referencies (waypoints) importaos d''un arquivu "
 "gpx."
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr "Escueye una secuencia de víes conectaes non ramificaes"
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr "Simplifica la vinculación d''oxetos OSM con artículos de Wikipedia"
 
@@ -17460,6 +17738,14 @@ msgid "basketball"
 msgstr "baloncestu"
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr "petanca"
 
@@ -17484,10 +17770,6 @@ msgid "cricket"
 msgstr "críquet"
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr "redes de críquet"
-
-msgctxt "sport"
 msgid "croquet"
 msgstr "cróquet"
 
@@ -17504,6 +17786,10 @@ msgid "equestrian"
 msgstr "hípica"
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr "xuegos gaélicos"
 
@@ -17520,14 +17806,26 @@ msgid "handball"
 msgstr "balonmán"
 
 msgctxt "sport"
-msgid "hockey"
-msgstr "h.oquei"
-
-msgctxt "sport"
 msgid "horse_racing"
 msgstr "carreres d''hípica"
 
 msgctxt "sport"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
+msgstr ""
+
+msgctxt "sport"
 msgid "motor"
 msgstr "motor"
 
@@ -17540,6 +17838,10 @@ msgid "racquet"
 msgstr "raqueta"
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr "liga de rugby"
 
@@ -17552,6 +17854,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr "tiru"
 
@@ -17579,6 +17885,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr "tenis"
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr "De pagu"
 
@@ -17970,6 +18288,9 @@ msgstr "Enllaz a carretera local"
 msgid "Unclassified"
 msgstr "Carretera ensin clasificación"
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr "Llugares d''encruz frecuente de la vía"
 
@@ -18048,6 +18369,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr "Pista de carreres"
+
 msgid "Road (Unknown Type)"
 msgstr "Carretera (tipoloxía desconocida)"
 
@@ -18599,6 +18923,12 @@ msgstr "Rádar de tráficu"
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -18789,8 +19119,13 @@ msgstr "Columnata (galería, portalada, pórticu, peristilo, claustru, etc.)"
 msgid "Avalanche Protector"
 msgstr "Falsu túnel contra ábanos"
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
-msgstr "Llámina d''agua"
+msgstr ""
 
 msgid "Drain"
 msgstr "Desaguadoriu"
@@ -18844,6 +19179,10 @@ msgstr "Banzáu"
 msgid "Covered Reservoir"
 msgstr "Depósitu d''agua"
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr "Un cuerpu d''agua enllancada, tal como un llagu o un estanque."
 
@@ -18933,7 +19272,7 @@ msgid "surfing"
 msgstr "surf"
 
 msgid "Bay"
-msgstr "Badea"
+msgstr "Concha"
 
 msgid ""
 "A large body of water partially enclosed by land but with a wide mouth."
@@ -18992,6 +19331,120 @@ msgstr ""
 msgid "public"
 msgstr "públicu"
 
+msgid "Marine Fuel"
+msgstr ""
+
+msgid "Agip"
+msgstr "Agip"
+
+msgid "Aral"
+msgstr "Aral"
+
+msgid "Avia"
+msgstr "Avia"
+
+msgid "BP"
+msgstr "BP"
+
+msgid "Chevron"
+msgstr "Chevron"
+
+msgid "Citgo"
+msgstr "Citgo"
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr "Esso"
+
+msgid "Exxon"
+msgstr "Exxon"
+
+msgid "Gulf"
+msgstr "Gulf"
+
+msgid "Mobil"
+msgstr "Mobil"
+
+msgid "OMV"
+msgstr "OMV"
+
+msgid "Petro-Canada"
+msgstr "Petro-Canada"
+
+msgid "Pioneer"
+msgstr "Pioneer"
+
+msgid "Q8"
+msgstr "Q8"
+
+msgid "Repsol"
+msgstr "Repsol"
+
+msgid "Shell"
+msgstr "Shell"
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr "Statoil"
+
+msgid "Sunoco"
+msgstr "Sunoco"
+
+msgid "Tamoil"
+msgstr "Tamoil"
+
+msgid "Texaco"
+msgstr "Texaco"
+
+msgid "Total"
+msgstr "Total"
+
+msgid "Independent"
+msgstr "Independiente"
+
+msgid "Fuel types:"
+msgstr "Tipos de combustible:"
+
+msgid "Diesel"
+msgstr "Diesel"
+
+msgid "Bio Diesel"
+msgstr "Bio Diesel"
+
+msgid "Octane 80"
+msgstr "80 octanos"
+
+msgid "Octane 91"
+msgstr "91 octanos"
+
+msgid "Octane 92"
+msgstr "92 octanos"
+
+msgid "Octane 95"
+msgstr "95 octanos"
+
+msgid "Octane 98"
+msgstr "98 octanos"
+
+msgid "Octane 100"
+msgstr "100 octanos"
+
+msgid "E10 (10% Ethanol mix)"
+msgstr "E10 (amiestu al 10% de etanol)"
+
+msgid "E85 (85% Ethanol mix)"
+msgstr "E85 (amiestu al 85% de etanol)"
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr "LPG (Gas licuado de petróleu)"
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr "CNG (Gas Natural Estruyíu)"
+
 msgid "Pier"
 msgstr "Embarcaeru"
 
@@ -19108,6 +19561,9 @@ msgstr "Tope de vía o topera"
 msgid "Railway Switch"
 msgstr "Interruptor de víes"
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr "Remonte"
 
@@ -19231,140 +19687,29 @@ msgstr "Entrada al aparcamientu"
 msgid "Fuel"
 msgstr "Gasolinera"
 
-msgid "Agip"
-msgstr "Agip"
+msgid "With shop"
+msgstr "Con tienda"
 
-msgid "Aral"
-msgstr "Aral"
+msgid "convenience"
+msgstr "tiendina"
 
-msgid "Avia"
-msgstr "Avia"
+msgid "kiosk"
+msgstr "quioscu"
 
-msgid "BP"
-msgstr "BP"
+msgid "Diesel (Gas To Liquid - ultimate diesel)"
+msgstr "Diesel (Gas a Líquidu - ultmate diesel)"
 
-msgid "Chevron"
-msgstr "Chevron"
+msgid "Diesel for Heavy Good Vehicles"
+msgstr "Diesel pa vehículos pesaos ​​de tresporte"
 
-msgid "Citgo"
-msgstr "Citgo"
+msgid "1/25 mix (mofa/moped)"
+msgstr "entemez 1/25 (ciclomotor)"
 
-msgid "Eni"
-msgstr ""
+msgid "1/50 mix (mofa/moped)"
+msgstr "entemez 1/50 (ciclomotor)"
 
-msgid "Esso"
-msgstr "Esso"
-
-msgid "Exxon"
-msgstr "Exxon"
-
-msgid "Gulf"
-msgstr "Gulf"
-
-msgid "Mobil"
-msgstr "Mobil"
-
-msgid "OMV"
-msgstr "OMV"
-
-msgid "Petro-Canada"
-msgstr "Petro-Canada"
-
-msgid "Pioneer"
-msgstr "Pioneer"
-
-msgid "Q8"
-msgstr "Q8"
-
-msgid "Repsol"
-msgstr "Repsol"
-
-msgid "Shell"
-msgstr "Shell"
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr "Statoil"
-
-msgid "Sunoco"
-msgstr "Sunoco"
-
-msgid "Tamoil"
-msgstr "Tamoil"
-
-msgid "Texaco"
-msgstr "Texaco"
-
-msgid "Total"
-msgstr "Total"
-
-msgid "Independent"
-msgstr "Independiente"
-
-msgid "With shop"
-msgstr "Con tienda"
-
-msgid "convenience"
-msgstr "tiendina"
-
-msgid "kiosk"
-msgstr "quioscu"
-
-msgid "Fuel types:"
-msgstr "Tipos de combustible:"
-
-msgid "Diesel"
-msgstr "Diesel"
-
-msgid "Bio Diesel"
-msgstr "Bio Diesel"
-
-msgid "Diesel (Gas To Liquid - ultimate diesel)"
-msgstr "Diesel (Gas a Líquidu - ultmate diesel)"
-
-msgid "Diesel for Heavy Good Vehicles"
-msgstr "Diesel pa vehículos pesaos ​​de tresporte"
-
-msgid "Octane 80"
-msgstr "80 octanos"
-
-msgid "Octane 91"
-msgstr "91 octanos"
-
-msgid "Octane 92"
-msgstr "92 octanos"
-
-msgid "Octane 95"
-msgstr "95 octanos"
-
-msgid "Octane 98"
-msgstr "98 octanos"
-
-msgid "Octane 100"
-msgstr "100 octanos"
-
-msgid "E10 (10% Ethanol mix)"
-msgstr "E10 (amiestu al 10% de etanol)"
-
-msgid "E85 (85% Ethanol mix)"
-msgstr "E85 (amiestu al 85% de etanol)"
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr "LPG (Gas licuado de petróleu)"
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr "CNG (Gas Natural Estruyíu)"
-
-msgid "1/25 mix (mofa/moped)"
-msgstr "entemez 1/25 (ciclomotor)"
-
-msgid "1/50 mix (mofa/moped)"
-msgstr "entemez 1/50 (ciclomotor)"
-
-msgid "Fuel cards:"
-msgstr ""
+msgid "Fuel cards:"
+msgstr ""
 
 msgid "DKV"
 msgstr ""
@@ -19577,9 +19922,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr "#CD853F"
 
-msgid "route segment"
-msgstr "segmentu de la ruta"
-
 msgid "stop position"
 msgstr "puntu de detención"
 
@@ -19598,6 +19940,9 @@ msgstr "plataforma (salida)"
 msgid "platform (entry only)"
 msgstr "plataforma (entrada)"
 
+msgid "route segment"
+msgstr "segmentu de la ruta"
+
 msgid "Route Master"
 msgstr "Ruta Maestra"
 
@@ -19800,6 +20145,12 @@ msgstr "Hotel"
 msgid "Stars"
 msgstr "Estrelles"
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr "Motel"
 
@@ -19890,6 +20241,9 @@ msgstr "sandwich / emparedáu"
 msgid "sushi"
 msgstr "sushi"
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr "Cervecería artesanal"
 
@@ -20104,6 +20458,9 @@ msgstr "Sauna"
 msgid "Horse Riding"
 msgstr "Equitación"
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr "Prostíbulu"
 
@@ -20593,8 +20950,8 @@ msgstr "Amuesa la presión barométrica"
 msgid "Shows humidity"
 msgstr "Amuesa''l mugor"
 
-msgid "Recycling"
-msgstr "Reciclaje"
+msgid "Recycling Container"
+msgstr ""
 
 msgid "Batteries"
 msgstr "Bateríes"
@@ -20602,20 +20959,47 @@ msgstr "Bateríes"
 msgid "Cans"
 msgstr "Envases"
 
+msgid "Cardboard"
+msgstr ""
+
+msgid "Electrical Appliances"
+msgstr ""
+
 msgid "Glass"
 msgstr "Vidriu"
 
+msgid "Glass Bottles"
+msgstr ""
+
+msgid "Green Waste"
+msgstr ""
+
 msgid "Paper"
 msgstr "Papel"
 
+msgid "Plastic"
+msgstr ""
+
+msgid "Plastic Bottles"
+msgstr ""
+
+msgid "Plastic Packaging"
+msgstr ""
+
 msgid "Scrap Metal"
 msgstr "Chatarra"
 
-msgid "container"
-msgstr "contenedor"
+msgid "Shoes"
+msgstr "Zapatería"
+
+msgid "Small Appliances"
+msgstr ""
+
+msgid "Waste"
+msgstr ""
 
-msgid "centre"
-msgstr "centru"
+msgid "Recycling Centre"
+msgstr ""
 
 msgid "Waste Basket/Trash Can"
 msgstr "Papelera"
@@ -20818,6 +21202,9 @@ msgstr "Tiru con arcu"
 msgid "Track and Field Athletics"
 msgstr "Competencies de pista y campu (Track&Field)"
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr "Alpinismu"
 
@@ -20993,12 +21380,18 @@ msgstr "Béisbol"
 msgid "Basketball"
 msgstr "Baloncestu"
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr "Voleybol"
 
 msgid "Beach Volleyball"
 msgstr "Voley playa"
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr "Golf"
 
@@ -21014,14 +21407,14 @@ msgstr "Bowls o bolu verde"
 msgid "Cricket"
 msgstr "Cricket"
 
-msgid "Cricket Nets"
-msgstr "Cricket con redes"
-
 msgid "Croquet"
 msgstr "Croquet"
 
-msgid "Hockey"
-msgstr "H.oquei"
+msgid "Field Hockey"
+msgstr ""
+
+msgid "Ice Hockey"
+msgstr ""
 
 msgid "Pelota"
 msgstr "Frontón"
@@ -21044,9 +21437,6 @@ msgstr "Carrera de karting"
 msgid "Motocross"
 msgstr "Motocross"
 
-msgid "Safety Training"
-msgstr "Capacitación sobre conducción segura"
-
 msgid "Model Aerodrome"
 msgstr "Aeromodelismu"
 
@@ -21065,9 +21455,6 @@ msgstr "pista"
 msgid "RC Car"
 msgstr "Vehículos por control remotu"
 
-msgid "Raceway"
-msgstr "Pista de carreres"
-
 msgid "Man Made"
 msgstr "Fechu pol home"
 
@@ -21140,6 +21527,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -21991,7 +22386,7 @@ msgid "Power Busbar"
 msgstr "Barres d''alta tensión"
 
 msgid "Power Bay"
-msgstr "Badea d''Enerxía"
+msgstr "Toma d''enerxía"
 
 msgid "Power Switch"
 msgstr "Interruptor de Corriente"
@@ -22462,9 +22857,6 @@ msgstr ""
 msgid "Boutique"
 msgstr "Boutique"
 
-msgid "Shoes"
-msgstr "Zapatería"
-
 msgid "Outdoor"
 msgstr "Tienda d''actividaes al campu"
 
@@ -23498,12 +23890,12 @@ msgstr "potencial"
 msgid "Contact (Common Schema)"
 msgstr "Contactu (esquema común)"
 
-msgid "Fax Number"
-msgstr "Númberu de fax"
-
 msgid "Email Address"
 msgstr "Corréu electrónicu"
 
+msgid "Fax Number"
+msgstr "Númberu de fax"
+
 msgid "Image"
 msgstr "Imaxe"
 
@@ -23928,6 +24320,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr "{0} n´oxetu sospechosu"
 
@@ -23952,6 +24347,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr "{0}={1} ta obsoleto"
 
@@ -24017,6 +24424,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -24109,9 +24519,18 @@ msgstr ""
 "{0}: metros ye''l valor por omisión; el puntu ye''l separador; pa otres "
 "unidaes, introduza un espaciu y depués la unidá"
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr "formatu {0} inusual"
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 "el voltaxe tendría de ser en voltios ensin unidaes allindiadores/espacios"
@@ -24500,6 +24919,9 @@ msgstr "Añedir puntos fixos con click"
 msgid "Add fixed points on spacebar"
 msgstr "Añedir puntos fixos con barra espaciadora"
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr "Dibuxar namá polígonos zarraos"
 
@@ -24563,9 +24985,6 @@ msgstr "Dibuxar la vía col mure"
 msgid "min distance={0} px ({1} m)"
 msgstr "distancia mínima={0} px ({1} m)"
 
-msgid "Convert way to FastDraw line"
-msgstr "Convertir la vía a una llínea FastDraw"
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr "Eps={0}, {1} puntos, {2} p/km"
 
@@ -25441,63 +25860,80 @@ msgstr ""
 "Fáiganos saber lo que fixo y lo que asocedió amestando el siguiente testu "
 "nel informe d''erru, pa que podamos atopar l''orixe del problema."
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
-msgstr "Configuración del Algoritmu"
+msgid "Settings for the area detection algorithm."
+msgstr ""
+
+msgid "Boofcv - high resolution images"
+msgstr ""
+
+msgid "Custom - low resolution images"
+msgstr ""
 
 msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
-"L''estragal de color define qué llueñe puede tar el color orixinal d''el "
-"color a escoyer (por defectu: {0})."
 
-msgid "Color Threshold"
-msgstr "Estragal de color"
+msgid "Algorithm"
+msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
-"Distancia máxima en píxeles que puede haber na secuencia ente cada puntu "
-"dende una llínea (por defectu: {0})."
 
-msgid "Tolerance Distance"
-msgstr "Distancia de tolerancia"
+msgid "Distance Tolerance"
+msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
-msgstr "Tolerancia pa los ángulos d´axuste, en radiantes (por defectu {0})."
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
+msgstr ""
 
-msgid "Tolerance Angle"
-msgstr "Ángulu de tolerancia"
+msgid "Angle Tolerance"
+msgstr ""
 
-msgid "Plugin Settings"
-msgstr "Axustes del complementu"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
+msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
-msgstr "Amosar el Diálogu de Dirección dempués de mapear una área"
+msgid "Color Threshold"
+msgstr "Estragal de color"
+
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
+msgstr ""
+
+msgid "How often thinning operation should be applied (Default {0})."
+msgstr ""
+
+msgid "Thinning Iterations"
+msgstr ""
 
 msgid "show address dialog"
 msgstr "amosar el diálogu de dirección"
 
-msgid "Merge nodes with neighbors"
-msgstr "Combinar nodos colos sos vecinos"
+msgid "Show Address Dialog after mapping an area"
+msgstr "Amosar el Diálogu de Dirección dempués de mapear una área"
 
 msgid "merge nodes"
 msgstr "combinar nodos"
 
-msgid "How often thinning operation should be applied (Default {0})."
-msgstr ""
-
-msgid "Thinning Iterations"
+msgid "Merge nodes with existing nodes"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -26171,6 +26607,9 @@ msgstr "Reiniciar rectificación"
 msgid "Reset offset (only vector images)"
 msgstr "Reiniciar rectificación (namá imaxes vectoriales)"
 
+msgid "Blank Layer"
+msgstr "Capa valera"
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr "Capa WMS ({0}), {1} tesela(s) cargada"
 
@@ -26293,7 +26732,7 @@ msgid "Cannot replace geometry."
 msgstr "Nun ye posible remplazar la xeometría."
 
 msgid "Zoom to selected primitive(s)"
-msgstr "Averar a la(s) primitiva(s) escoyida(s)"
+msgstr "Averar a les primitives esbillaes"
 
 msgid "Select selected primitive(s)"
 msgstr "Escoyer la(s) primitiva(s) escoyía(s)"
@@ -27550,194 +27989,500 @@ msgstr "Máximu númberu de sergmento per vía"
 msgid "Maximum number of nodes in initial trace"
 msgstr "Máximu nuedu de nodos na traza inicial"
 
-msgid "Maximum gray value to count as water (0-255)"
-msgstr "Valor máximu de gris par aque cunte como enagua (0-255)"
+msgid "Maximum gray value to count as water (0-255)"
+msgstr "Valor máximu de gris par aque cunte como enagua (0-255)"
+
+msgid "Line simplification accuracy (degrees)"
+msgstr "Precisión na simplificación de llínea (graos)"
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr "Resolvimientu de les teseles del Landsat (píxeles por grau)"
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr "Tamañu de les teseles del Landsat (píxeles)"
+
+msgid "Shift all traces to east (degrees)"
+msgstr "Dirixir toes trazar escontra l''Este (graos)"
+
+msgid "Shift all traces to north (degrees)"
+msgstr "Dirixir toes trazar escontra''l Norte (graos)"
+
+msgid "Direction to search for land"
+msgstr "Dirección pa buscar pela tierra"
+
+msgid "Tag ways as"
+msgstr "Etiquetar víes como"
+
+msgid "WMS Layer"
+msgstr "Capa WMS"
+
+msgid "Maximum cache size (MB)"
+msgstr "Tamañu máximu del caxé (MB)"
+
+msgid "Maximum cache age (days)"
+msgstr "Antigüedá máxima de la caxé (díes)"
+
+msgid "Source text"
+msgstr "Testu sobre la fonte"
+
+msgid "Lakewalker Plugin Preferences"
+msgstr "Preferencies de Lakewalker Plugin"
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr "Un componente p''alcontrar les llámines d''agua nes imaxes Landsat."
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+"Máximu numbero de segmentos dexaos en cada vía xenerada. Por omisión 250."
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+"Máximu númberu de nodos a xenerar antes de la simplificación de la llínea. "
+"Por omisión 50000."
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+"Máximu valor de gris a aceptar como enagua (basáu en datos Landsat DIR-1). "
+"Puede tar ente l''intervalu 0-255. Por omisión 90."
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+"Precisión na simplificación de llínea Douglas-Peucker, midida en graos. "
+"<br>Valores más baxos dan más nodos y llínees más precises. 0,0003 por "
+"omisión."
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+"Resolvimientu de les teseles Landsat, midíu en píxeles por grau. Por omisión "
+"4000."
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr "Tamañu d''una tesela Landsat, midíu en píxeles. Por omisión 2000."
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr "Mover tolos puntos en dirección Esti (por omisión 0 graos)."
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr "Mover tolos puntos en dirección Norte (por omisión 0 graos)."
+
+msgid "Direction to search for land. Default east."
+msgstr "Dirección na que buscar tierra (por omisión Este)"
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+"Etiquetar víes como agua, mariña, tierra o nada. El valor por omisión ye "
+"agua."
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr "Qué capa WMS usar pa trazar. Por defectu DIR1."
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr "Tamañu máximu de cada directoriu cache in bytes. Por omisión 300 MB."
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+"Antigüedá máxima en díes de cada arquivu en caxé. El valor por omisión ye "
+"100."
+
+msgid "Data source text. Default is Landsat."
+msgstr "Testu de la fonte de datos. Por omisión ye Landsat."
+
+msgid "Downloading image tile..."
+msgstr "Descargando tesela de la imaxe..."
+
+msgid "Could not acquire image"
+msgstr "Non se pudo adquirir la imaxe"
+
+msgid "Connection Failed"
+msgstr "Falló la conexón"
+
+msgid "Not connected"
+msgstr "Non conectáu"
+
+msgid "Connecting"
+msgstr "Conectando"
+
+msgid "Connected"
+msgstr "Conectáu"
+
+msgid "no name"
+msgstr "ensin nome"
+
+msgid "Live GPS"
+msgstr "Live GPS"
+
+msgid "Show GPS data."
+msgstr "Amosar datos del GPS"
+
+msgid "Status"
+msgstr "Estáu"
+
+msgid "Way Info"
+msgstr "Información de la vía"
+
+msgid "Speed"
+msgstr "Velocidá"
+
+msgid "Course"
+msgstr "Percorríu"
+
+msgid "LiveGPS layer"
+msgstr "Capa LiveGPS"
+
+msgid "Capture GPS Track"
+msgstr "Prindar traza GPS"
+
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgstr ""
+"Conectar al servidor gpsd y amosar la posición actual na capa LiveGPS."
+
+msgid "Center Once"
+msgstr "Centrar una vegada"
+
+msgid "Center the LiveGPS layer to current position."
+msgstr "Centrar la capa LiveGPS a la posición actual."
+
+msgid "Auto-Center"
+msgstr "Autocentrar"
+
+msgid "Continuously center the LiveGPS layer to current position."
+msgstr "Centrar de cutio la capa LiveGPS a la posición actual."
+
+msgid "Open MapDust"
+msgstr "Abrir MapDust"
+
+msgid "MapDust bug reports"
+msgstr "Informes d''erru de MapDust"
+
+msgid "Activates the MapDust bug reporter plugin"
+msgstr "Activar el complementu d''informes d''erru de MapDust"
+
+msgid "Missing input data"
+msgstr "Falten datos d''entrada"
+
+msgid "Mapillary Images"
+msgstr ""
+
+msgid "Mapillary layer"
+msgstr ""
+
+msgid "Total images:"
+msgstr ""
+
+msgid "images"
+msgstr ""
+
+msgid "Mapillary"
+msgstr ""
+
+msgid "Create Mapillary layer"
+msgstr ""
+
+msgid "Start Mapillary layer"
+msgstr ""
+
+msgid "Download Mapillary images in current view"
+msgstr ""
+
+msgid "Export pictures"
+msgstr ""
+
+msgid "Export Mapillary pictures"
+msgstr ""
+
+msgid "Export images"
+msgstr ""
+
+msgid "Import pictures"
+msgstr ""
+
+msgid "Import local pictures"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer"
+msgstr ""
+
+msgid "Select pictures"
+msgstr ""
+
+msgid "Import pictures into sequence"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer in a sequence"
+msgstr ""
+
+msgid "Join mode"
+msgstr ""
+
+msgid "Join/unjoin pictures"
+msgstr ""
+
+msgid "Join Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures"
+msgstr ""
+
+msgid "Upload Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures."
+msgstr ""
+
+msgid "Walk mode"
+msgstr ""
+
+msgid "Start walk mode"
+msgstr ""
+
+msgid "Zoom to selected image"
+msgstr "Averar a la imaxe seleicionada"
+
+msgid "Zoom to the currently selected Mapillary image"
+msgstr "Averar a la imaxe de Mapillary seleicionada actualmente"
+
+msgid "Uploaded {0} images"
+msgstr ""
+
+msgid "Approve upload on the website"
+msgstr ""
+
+msgid "View in website"
+msgstr ""
+
+msgid "Copy key"
+msgstr ""
+
+msgid "Copy key tag"
+msgstr ""
+
+msgid "Edit on website"
+msgstr ""
+
+msgid "Export all images"
+msgstr ""
+
+msgid "Export selected sequence"
+msgstr ""
+
+msgid "Export selected images"
+msgstr ""
+
+msgid "Rewrite imported images"
+msgstr ""
+
+msgid "Select a folder"
+msgstr ""
+
+msgid "Explore"
+msgstr ""
+
+msgid "Select a directory"
+msgstr ""
+
+msgid "Speed limit"
+msgstr ""
+
+msgid "Give way"
+msgstr ""
+
+msgid "No entry"
+msgstr ""
+
+msgid "Intersection danger"
+msgstr ""
+
+msgid "Mandatory direction (any)"
+msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
-msgstr "Precisión na simplificación de llínea (graos)"
+msgid "No turn"
+msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
-msgstr "Resolvimientu de les teseles del Landsat (píxeles por grau)"
+msgid "Uneven road"
+msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
-msgstr "Tamañu de les teseles del Landsat (píxeles)"
+msgid "No parking"
+msgstr ""
 
-msgid "Shift all traces to east (degrees)"
-msgstr "Dirixir toes trazar escontra l''Este (graos)"
+msgid "No overtaking"
+msgstr ""
 
-msgid "Shift all traces to north (degrees)"
-msgstr "Dirixir toes trazar escontra''l Norte (graos)"
+msgid "Pedestrian crossing"
+msgstr ""
 
-msgid "Direction to search for land"
-msgstr "Dirección pa buscar pela tierra"
+msgid "Years"
+msgstr ""
 
-msgid "Tag ways as"
-msgstr "Etiquetar víes como"
+msgid "Months"
+msgstr ""
 
-msgid "WMS Layer"
-msgstr "Capa WMS"
+msgid "Days"
+msgstr ""
 
-msgid "Maximum cache size (MB)"
-msgstr "Tamañu máximu del caxé (MB)"
+msgid "Mapillary filter"
+msgstr ""
 
-msgid "Maximum cache age (days)"
-msgstr "Antigüedá máxima de la caxé (díes)"
+msgid "Open Mapillary filter dialog"
+msgstr ""
 
-msgid "Source text"
-msgstr "Testu sobre la fonte"
+msgid "Downloaded images"
+msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
-msgstr "Preferencies de Lakewalker Plugin"
+msgid "Only images with signs"
+msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
-msgstr "Un componente p''alcontrar les llámines d''agua nes imaxes Landsat."
+msgid "Choose signs"
+msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Mapillary history"
 msgstr ""
-"Máximu numbero de segmentos dexaos en cada vía xenerada. Por omisión 250."
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Open Mapillary history dialog"
 msgstr ""
-"Máximu númberu de nodos a xenerar antes de la simplificación de la llínea. "
-"Por omisión 50000."
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Open Mapillary window"
 msgstr ""
-"Máximu valor de gris a aceptar como enagua (basáu en datos Landsat DIR-1). "
-"Puede tar ente l''intervalu 0-255. Por omisión 90."
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Mapillary dialog"
 msgstr ""
-"Precisión na simplificación de llínea Douglas-Peucker, midida en graos. "
-"<br>Valores más baxos dan más nodos y llínees más precises. 0,0003 por "
-"omisión."
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary main dialog"
 msgstr ""
-"Resolvimientu de les teseles Landsat, midíu en píxeles por grau. Por omisión "
-"4000."
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
-msgstr "Tamañu d''una tesela Landsat, midíu en píxeles. Por omisión 2000."
+msgid "Next picture"
+msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
-msgstr "Mover tolos puntos en dirección Esti (por omisión 0 graos)."
+msgid "Shows the next picture in the sequence"
+msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
-msgstr "Mover tolos puntos en dirección Norte (por omisión 0 graos)."
+msgid "Previous picture"
+msgstr ""
 
-msgid "Direction to search for land. Default east."
-msgstr "Dirección na que buscar tierra (por omisión Este)"
+msgid "Shows the previous picture in the sequence"
+msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Jump to red"
 msgstr ""
-"Etiquetar víes como agua, mariña, tierra o nada. El valor por omisión ye "
-"agua."
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
-msgstr "Qué capa WMS usar pa trazar. Por defectu DIR1."
+msgid "Jumps to the picture at the other side of the red line"
+msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
-msgstr "Tamañu máximu de cada directoriu cache in bytes. Por omisión 300 MB."
+msgid "Jump to blue"
+msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
-"Antigüedá máxima en díes de cada arquivu en caxé. El valor por omisión ye "
-"100."
 
-msgid "Data source text. Default is Landsat."
-msgstr "Testu de la fonte de datos. Por omisión ye Landsat."
+msgid "Stops the walk."
+msgstr ""
 
-msgid "Downloading image tile..."
-msgstr "Descargando tesela de la imaxe..."
+msgid "Play"
+msgstr ""
 
-msgid "Could not acquire image"
-msgstr "Non se pudo adquirir la imaxe"
+msgid "Continues with the paused walk."
+msgstr ""
 
-msgid "Connection Failed"
-msgstr "Falló la conexón"
+msgid "Pause"
+msgstr ""
 
-msgid "Not connected"
-msgstr "Non conectáu"
+msgid "Pauses the walk."
+msgstr ""
 
-msgid "Connecting"
-msgstr "Conectando"
+msgid "Reverse buttons position when displaying images."
+msgstr ""
 
-msgid "Connected"
-msgstr "Conectáu"
+msgid "Display hour when the picture was taken"
+msgstr ""
 
-msgid "no name"
-msgstr "ensin nome"
+msgid "Use 24 hour format"
+msgstr ""
 
-msgid "Live GPS"
-msgstr "Live GPS"
+msgid "Move to picture''s location with next/previous buttons"
+msgstr ""
 
-msgid "Show GPS data."
-msgstr "Amosar datos del GPS"
+msgid "Download mode: "
+msgstr ""
 
-msgid "Status"
-msgstr "Estáu"
+msgid "Upload selected sequence"
+msgstr ""
 
-msgid "Way Info"
-msgstr "Información de la vía"
+msgid "Delete after upload"
+msgstr ""
 
-msgid "Speed"
-msgstr "Velocidá"
+msgid "Wait for full quality pictures"
+msgstr ""
 
-msgid "Course"
-msgstr "Percorríu"
+msgid "Follow selected image"
+msgstr ""
 
-msgid "LiveGPS layer"
-msgstr "Capa LiveGPS"
+msgid "Go forward"
+msgstr ""
 
-msgid "Capture GPS Track"
-msgstr "Prindar traza GPS"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
-"Conectar al servidor gpsd y amosar la posición actual na capa LiveGPS."
 
-msgid "Center Once"
-msgstr "Centrar una vegada"
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Center the LiveGPS layer to current position."
-msgstr "Centrar la capa LiveGPS a la posición actual."
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Auto-Center"
-msgstr "Autocentrar"
+msgid "2 images unjoined"
+msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
-msgstr "Centrar de cutio la capa LiveGPS a la posición actual."
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
+msgstr ""
 
-msgid "Open MapDust"
-msgstr "Abrir MapDust"
+msgid "Downloading"
+msgstr ""
 
-msgid "MapDust bug reports"
-msgstr "Informes d''erru de MapDust"
+msgid "Select mode"
+msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
-msgstr "Activar el complementu d''informes d''erru de MapDust"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
+msgstr ""
 
-msgid "Missing input data"
-msgstr "Falten datos d''entrada"
+msgid "Downloading Mapillary images"
+msgstr ""
 
-msgid "Mapillary"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "No images found"
 msgstr ""
 
-msgid "Export"
-msgstr "Esportar"
+msgid "Finished upload"
+msgstr ""
+
+msgid "Uploading: {0}"
+msgstr ""
 
 msgid "Measured values"
 msgstr "Valores midíos"
@@ -27758,6 +28503,9 @@ msgstr "Llargor de la selección"
 msgid "Selection Area"
 msgstr "Área de la selección"
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr "Ángulu"
 
@@ -27821,52 +28569,6 @@ msgstr "Crear Michigan left turn restriction"
 msgid "Unable to find via nodes. Please check your selection"
 msgstr "Nun s''atoparon nodos de vía. Por favor revise la so selección"
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-"Consulta XAPI, por casu, '''' (pa descargar tolos datos), ''[highway=*]'', o "
-"''[[network=VRR][ref=603|613]''"
-
-msgid "Download from OSM mirror..."
-msgstr "Descargar dende''l servidor espeyu OSM..."
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-"Esta consulta XAPI paeciera ser incorrecta, por favor realiza un doble "
-"verificación"
-
-msgid "Object type: "
-msgstr "Tipu d''oxetu: "
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr "Tipu d''oxetu OSM a descargase (utilizar ''*'' pa cualesquier)"
-
-msgid "XAPI query: "
-msgstr "Consulta XAPI: "
-
-msgid "Download from Overpass API ..."
-msgstr "Descargando dende la API Overpass..."
-
-msgid "Download map data from Overpass API server."
-msgstr "Descargar datos del mapa dende''l servidor API Overpass."
-
-msgid "Overpass query: "
-msgstr "Consulta de nivel superior: "
-
-msgid "Select OSM mirror URL"
-msgstr "Escoyer la URL del servidor espeyu de OSM"
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-"Escoyer la URL del servidor espeyu de OSM del cual descargar los datos."
-
-msgid "Base URL"
-msgstr "URL base"
-
-msgid "Enforce meta data"
-msgstr "Forzar metadatu"
-
 msgid "About Plugin"
 msgstr "So''l plugin"
 
@@ -28119,6 +28821,9 @@ msgstr ""
 "Visualizar les diferencies ente''l conjutno de datos actuales y los datos "
 "esistentes en OSM."
 
+msgid "Tools"
+msgstr "Ferramientes"
+
 msgid "Open tools menu for this data."
 msgstr "Menú de ferramientes abiertu pa estos datos."
 
@@ -29118,10 +29823,10 @@ msgid "Map Preview"
 msgstr "Previsualización del mapa"
 
 msgid "Zoom To Page"
-msgstr "Averar hasta la páxina"
+msgstr "Averar a la páxina"
 
 msgid "Zoom To Actual Size"
-msgstr "Visualizar tamañu real"
+msgstr "Averar al tamañu real"
 
 msgid "Print"
 msgstr "Imprentar"
@@ -29410,6 +30115,27 @@ msgstr "Tresporte públicu: activar puntos de ruta"
 msgid "Public Transport: Edit waypoint name"
 msgstr "Tresporte públicu: editar nome del puntu de ruta"
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr "Caja de ferramientes de rellaciones"
 
@@ -29584,6 +30310,9 @@ msgstr "Conxuntu de cambeos revertíu"
 msgid "It is not allowed to revert changeset from {0}"
 msgstr "Nun se dexa revertir el conxuntu de cambeos dende {0}"
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr "Destín d´amiestu ausente pa {0} con id {1}"
 
@@ -29593,6 +30322,9 @@ msgstr "Historial d''oxetos"
 msgid "History reverter"
 msgstr "Revertidor d''hestoria"
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr "Preparando datos d''hestoria..."
 
@@ -29780,6 +30512,9 @@ msgstr "Nuevu valor de {0}"
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr "Falta la preferencia ''{0}''. Non se pue anicializar SdsApi."
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -29984,6 +30719,39 @@ msgstr "Estragal de Combinación de Nodos Allegaos"
 msgid "SeaMap Editor"
 msgstr "Editor SeaMap"
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr "Esportar a OSM"
 
@@ -29993,6 +30761,9 @@ msgstr "Esportar datos de tráficu a arquivu de rede SUMU."
 msgid "SUMO Export"
 msgstr "Esportar a SUMU"
 
+msgid "Export"
+msgstr "Esportar"
+
 msgid "AutoSave LiveData"
 msgstr "Autograbar LiveData"
 
@@ -30247,9 +31018,6 @@ msgstr "Erru de Tracer2"
 msgid "Parameter for server request"
 msgstr "Parámetru pa solicitú de servidor"
 
-msgid "Tile size:"
-msgstr "Tamañu de la tesela:"
-
 msgid "Resolution:"
 msgstr "Resolución"
 
@@ -30805,7 +31573,7 @@ msgstr "Escoyer esta restricción de xiru"
 
 msgid "Activate the layer this turn restriction belongs to and zoom to it"
 msgstr ""
-"Activar la capa a la cual pertenez esta restricción de xiru y dir a ella."
+"Activar la capa a la que pertenez esta restricción de xiru y averar a ella"
 
 msgid "{0} warning"
 msgid_plural "{0} warnings"
@@ -30973,7 +31741,7 @@ msgid "Select in current data layer"
 msgstr "Escoyer na capa actual de datos"
 
 msgid "Zoom to the currently selected turn restrictions"
-msgstr "Zoom a les restricciones de xiru escoyíes anguaño"
+msgstr "Averar a les restricciones de xiru esbillaes anguaño"
 
 msgid "An OSM plugin for editing turn restrictions."
 msgstr "Un componente OSM pa la edición de restricciones de xiru."
@@ -31923,9 +32691,6 @@ msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 "Buscar un puntu de vía. Mueva la vista de mapa pa ver el puntu de vía."
 
-msgid "Way Select"
-msgstr "Escoyer vía"
-
 msgid "Add names from Wikipedia"
 msgstr "Añedir nomes dende Wikipedia"
 
diff --git a/i18n/po/az.po b/i18n/po/az.po
index 8e4c89a..a8547bb 100644
--- a/i18n/po/az.po
+++ b/i18n/po/az.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: FULL NAME <EMAIL at ADDRESS>\n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2013-01-12 17:56+0000\n"
 "Last-Translator: iAZISS <iss-sash at mail.ru>\n"
 "Language-Team: Azerbaijani <az at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:33+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:34+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
 msgstr ""
@@ -96,19 +96,16 @@ msgstr ""
 msgid "Updating user interface"
 msgstr ""
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
 msgstr ""
 
 msgid "Warning"
 msgstr ""
 
-msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
+msgid "Ignoring malformed file URL: \"{0}\""
 msgstr ""
 
-msgid "Ignoring malformed URL: \"{0}\""
+msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 
 msgid ""
@@ -443,6 +440,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
 
@@ -1028,6 +1028,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr ""
 
@@ -1944,15 +1968,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr ""
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -1974,6 +1989,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2092,9 +2116,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2308,9 +2329,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr ""
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2524,6 +2551,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2566,6 +2597,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3016,6 +3050,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3133,10 +3185,44 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3326,6 +3412,12 @@ msgstr ""
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3353,13 +3445,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -3975,9 +4067,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -3987,12 +4076,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4173,13 +4274,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4377,6 +4478,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4590,43 +4692,54 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
 msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
 msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
 msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
 msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
-msgid "Menu: {0}"
+msgctxt "menu"
+msgid "Help"
 msgstr ""
 
-msgid "Save and load the current session (list of layers, etc.)"
+msgid "Menu: {0}"
 msgstr ""
 
 msgid "Edit toolbar"
@@ -4650,6 +4763,7 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
 msgstr ""
 
@@ -4772,58 +4886,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr ""
-
-msgid "Pos."
+msgid " ({0})"
 msgstr ""
 
-msgid "Role"
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5252,6 +5324,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr ""
+
 msgid "Primitive"
 msgstr ""
 
@@ -5492,6 +5567,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5638,6 +5716,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5741,7 +5854,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5869,6 +5982,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5878,17 +5996,48 @@ msgstr ""
 msgid "unknown"
 msgstr ""
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -5934,6 +6083,12 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr ""
 
@@ -6063,10 +6218,16 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
-msgid "List of notes"
+msgid "Mini map"
 msgstr ""
 
-msgid "Add comment"
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
+msgid "List of notes"
+msgstr ""
+
+msgid "Add comment"
 msgstr ""
 
 msgid "Comment"
@@ -6121,10 +6282,15 @@ msgstr ""
 msgid "Enter the ID of the object that should be downloaded"
 msgstr ""
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6153,6 +6319,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr ""
 
+msgid "Selection"
+msgstr ""
+
 msgid "Open a selection list window."
 msgstr ""
 
@@ -6243,6 +6412,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -6837,6 +7012,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6928,14 +7109,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7108,6 +7288,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7643,6 +7829,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8488,6 +8677,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr ""
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr ""
 
@@ -8541,6 +8830,9 @@ msgstr ""
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8561,7 +8853,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8644,80 +8936,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr ""
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-
-msgid "Auto Zoom"
-msgstr ""
-
-msgid "Auto load tiles"
-msgstr ""
-
-msgid "Show Errors"
-msgstr ""
-
-msgid "Load Tile"
-msgstr ""
-
-msgid "Show Tile Info"
-msgstr ""
-
-msgid "Load All Tiles"
-msgstr ""
-
-msgid "Load All Error Tiles"
-msgstr ""
-
-msgid "Increase zoom"
-msgstr ""
-
-msgid "Decrease zoom"
-msgstr ""
-
-msgid "Snap to tile size"
-msgstr ""
-
-msgid "Flush Tile Cache"
-msgstr ""
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
@@ -8727,56 +8945,30 @@ msgstr ""
 msgid "No validation errors"
 msgstr ""
 
-msgid "Blank Layer"
-msgstr ""
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "Download visible tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-
-msgid "Change resolution"
-msgstr ""
-
-msgid "Reload erroneous tiles"
-msgstr ""
-
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Automatic downloading"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Zoom to native resolution"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Supported projections are: {0}"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Save WMS file"
+msgid "Try Again"
 msgstr ""
 
-msgid "Correlate to GPX"
+msgid "No images could be matched!"
 msgstr ""
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
@@ -8863,24 +9055,9 @@ msgstr ""
 msgid "Offset:"
 msgstr ""
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
 msgid "Correlate"
 msgstr ""
 
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9074,9 +9251,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr ""
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9139,9 +9313,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9767,15 +9938,15 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr ""
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -10568,13 +10739,28 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
-msgid "imagery fade"
+msgid "1. Enter getCapabilities URL"
 msgstr ""
 
-msgid "Fade Color: "
+msgid "2. Enter name for this layer"
 msgstr ""
 
-msgid "Fade amount: "
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
+msgid "imagery fade"
+msgstr ""
+
+msgid "Fade Color: "
+msgstr ""
+
+msgid "Fade amount: "
 msgstr ""
 
 msgid "Soft"
@@ -10586,6 +10772,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10607,6 +10805,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10649,9 +10850,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr ""
 
@@ -10676,36 +10874,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11641,6 +11824,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] ""
@@ -11749,6 +11940,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12002,6 +12196,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12538,6 +12735,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12923,6 +13123,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13917,6 +14130,9 @@ msgstr ""
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr ""
+
 msgid "Blue:"
 msgstr ""
 
@@ -13956,7 +14172,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -13968,9 +14184,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14079,6 +14292,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14092,12 +14308,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14134,10 +14356,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14164,6 +14392,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14188,7 +14419,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14203,6 +14434,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14215,12 +14449,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14241,6 +14469,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14273,10 +14504,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14306,6 +14534,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14321,154 +14555,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14483,9 +14723,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14615,6 +14864,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14630,7 +14894,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -14956,6 +15220,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15040,11 +15309,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15098,7 +15362,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15113,9 +15377,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15196,6 +15457,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15234,6 +15503,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15309,9 +15581,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15717,6 +15986,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15741,10 +16018,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15761,6 +16034,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15777,11 +16054,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15797,6 +16086,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15809,6 +16102,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15836,6 +16133,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16227,6 +16536,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16303,6 +16615,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr ""
 
@@ -16840,6 +17155,12 @@ msgstr ""
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17029,6 +17350,11 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
 msgstr ""
 
@@ -17082,6 +17408,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17223,13 +17553,127 @@ msgstr ""
 msgid "public"
 msgstr ""
 
-msgid "Pier"
+msgid "Marine Fuel"
 msgstr ""
 
-msgid "Lock Gate"
+msgid "Agip"
 msgstr ""
 
-msgid "Turning Point"
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
+msgid "Pier"
+msgstr ""
+
+msgid "Lock Gate"
+msgstr ""
+
+msgid "Turning Point"
 msgstr ""
 
 msgid "Slipway"
@@ -17339,6 +17783,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -17462,78 +17909,6 @@ msgstr ""
 msgid "Fuel"
 msgstr ""
 
-msgid "Agip"
-msgstr ""
-
-msgid "Aral"
-msgstr ""
-
-msgid "Avia"
-msgstr ""
-
-msgid "BP"
-msgstr ""
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr ""
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
 msgid "With shop"
 msgstr ""
 
@@ -17543,51 +17918,12 @@ msgstr ""
 msgid "kiosk"
 msgstr ""
 
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -17806,9 +18142,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17827,6 +18160,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18029,6 +18365,12 @@ msgstr ""
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18119,6 +18461,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18333,6 +18678,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18820,7 +19168,7 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
@@ -18829,43 +19177,70 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
-msgid "Glass"
+msgid "Cardboard"
 msgstr ""
 
-msgid "Paper"
+msgid "Electrical Appliances"
 msgstr ""
 
-msgid "Scrap Metal"
+msgid "Glass"
 msgstr ""
 
-msgid "container"
+msgid "Glass Bottles"
 msgstr ""
 
-msgid "centre"
+msgid "Green Waste"
 msgstr ""
 
-msgid "Waste Basket/Trash Can"
+msgid "Paper"
 msgstr ""
 
-msgid "Waste Disposal/Dumpster"
+msgid "Plastic"
 msgstr ""
 
-msgid "Sanitary Dump Station"
+msgid "Plastic Bottles"
 msgstr ""
 
-msgid "Suction pumpout"
+msgid "Plastic Packaging"
 msgstr ""
 
-msgid "Gravity drain for hose"
+msgid "Scrap Metal"
 msgstr ""
 
-msgid "Casette or Elsan Disposal"
+msgid "Shoes"
 msgstr ""
 
-msgid "Operation times"
+msgid "Small Appliances"
 msgstr ""
 
-msgid "Backrest"
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
+msgstr ""
+
+msgid "Waste Basket/Trash Can"
+msgstr ""
+
+msgid "Waste Disposal/Dumpster"
+msgstr ""
+
+msgid "Sanitary Dump Station"
+msgstr ""
+
+msgid "Suction pumpout"
+msgstr ""
+
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
+msgstr ""
+
+msgid "Operation times"
+msgstr ""
+
+msgid "Backrest"
 msgstr ""
 
 msgid "Amount of Seats"
@@ -19045,6 +19420,9 @@ msgstr ""
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr ""
 
@@ -19220,12 +19598,18 @@ msgstr ""
 msgid "Basketball"
 msgstr ""
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr ""
 
@@ -19241,13 +19625,13 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
@@ -19271,9 +19655,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19292,9 +19673,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -19367,6 +19745,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20687,9 +21073,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -21702,10 +22085,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22132,6 +22515,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22156,6 +22542,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22216,6 +22614,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22306,9 +22707,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22678,6 +23088,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22732,9 +23145,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23478,47 +23888,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23527,10 +23946,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24133,6 +24564,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr ""
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25230,374 +25664,680 @@ msgid ""
 "highlight tracks"
 msgstr ""
 
-msgid "Delete this"
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
 msgstr ""
 
-msgid "Delete this&older"
+msgid "Connecting"
 msgstr ""
 
-msgid "km/h"
+msgid "Connected"
 msgstr ""
 
-msgid "Track name: "
+msgid "no name"
 msgstr ""
 
-msgid "Update IRS adjustment layer"
+msgid "Live GPS"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid "Show GPS data."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Speed"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Course"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
+msgid "Explore"
 msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25618,6 +26358,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -25676,47 +26419,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -25949,6 +26651,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr ""
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27166,6 +27871,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27337,6 +28063,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27346,6 +28075,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27526,6 +28258,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27704,6 +28439,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27713,6 +28481,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -27949,9 +28720,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29434,9 +30202,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/be.po b/i18n/po/be.po
index db8aaed..ecfd416 100644
--- a/i18n/po/be.po
+++ b/i18n/po/be.po
@@ -10,69 +10,69 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
-"PO-Revision-Date: 2013-07-08 12:07+0000\n"
-"Last-Translator: Andrew West <2thewest at gmail.com>\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
+"PO-Revision-Date: 2015-10-05 10:23+0000\n"
+"Last-Translator: Viktar Palstsiuk <Unknown>\n"
 "Language-Team: Belarusian <i18n at mova.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
 "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:34+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:35+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: be\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
-msgstr "{0}: опцыя'' {1}'' неадназначная"
+msgstr "{0}: опцыя ''{1}'' неадназначная"
 
 msgid "{0}: option ''--{1}'' does not allow an argument"
-msgstr "{0}: опцыя'' - {1}'' не патрабуюцца аргументы"
+msgstr "{0}: опцыя ''--{1}'' не падтрымлівае аргументы"
 
 msgid "{0}: option ''{1}{2}'' does not allow an argument"
-msgstr "{0}: опцыя'' - {1}{2}'' не патрабуюцца аргументы"
+msgstr "{0}: опцыя ''{1}{2}'' не падтрымлівае аргументы"
 
 msgid "{0}: option ''{1}'' requires an argument"
-msgstr "{0}: опцыі'' - {1}'' патрабуюцца аргументы"
+msgstr "{0}: опцыя ''{1}'' патрабуе аргумент"
 
 msgid "{0}: unrecognized option ''--{1}''"
-msgstr "{0}: невядомая опцыя'' - {1}''"
+msgstr "{0}: невядомая опцыя ''--{1}''"
 
 msgid "{0}: unrecognized option ''{1}{2}''"
-msgstr "{0}: невядомая опцыя'' - {1}{2}''"
+msgstr "{0}: невядомая опцыя ''{1}{2}''"
 
 msgid "{0}: illegal option -- {1}"
-msgstr "{0}: недапушчальная опцыя - {1}"
+msgstr "{0}: недапушчальная опцыя -- {1}"
 
 msgid "{0}: invalid option -- {1}"
-msgstr "{0}: няправільная опцыя - {1}"
+msgstr "{0}: няправільная опцыя -- {1}"
 
 msgid "{0}: option requires an argument -- {1}"
-msgstr "{0}: опцыя патрабуе аргументаў - {1}"
+msgstr "{0}: опцыя патрабуе аргумент -- {1}"
 
 msgid "Invalid value {0} for parameter ''has_arg''"
-msgstr "Няправільнае значэнне {0} параметру'' has_arg''"
+msgstr "Няправільнае значэнне {0} параметру ''has_arg''"
 
 msgid "Background Terms of Use"
 msgstr "Умовы выкарыстання падкладкі"
 
 msgid "Opening link not supported on current platform (''{0}'')"
-msgstr "Пераход па спасылцы не падтрымліваецца на гэтай платформе ('' {0}'')"
+msgstr "Пераход па спасылцы не падтрымліваецца на гэтай платформе (''{0}'')"
 
 msgid "ERROR: {0}"
-msgstr ""
+msgstr "ПАМЫЛКА: {0}"
 
 msgid "WARNING: {0}"
-msgstr "ПАПЯРЭДЖАНЬНЕ: {0}"
+msgstr "ПАПЯРЭДЖАННЕ: {0}"
 
 msgid "INFO: {0}"
 msgstr "ІНФАРМАЦЫЯ: {0}"
 
 msgid "DEBUG: {0}"
-msgstr "Адладка: {0}"
+msgstr "АДЛАДКА: {0}"
 
 msgid "Cause: "
-msgstr ""
+msgstr "Прычына: "
 
 msgid "Executing platform startup hook"
 msgstr "Выкананне стартавых працэдур"
@@ -101,26 +101,27 @@ msgstr "Пампоўка ўсталёвак падкладак"
 msgid "Updating user interface"
 msgstr "Абнаўленне інтэрфейсу карыстальніка"
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "Неадпаведны URL да файла - ігнаруецца: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "Неадпаведны URL - ігнаруецца: \"{0}\""
 
 msgid "Warning"
 msgstr "Папярэджанне"
 
-msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
-msgstr "У параметры \"downloadgps\" немагчымы имёны файлаў ці URLы"
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "Неадпаведны URL да файла - ігнаруецца: \"{0}\""
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "Неадпаведны URL - ігнаруецца: \"{0}\""
+msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
+msgstr "Параметр \"downloadgps\" не падтрымлівае імёны файлаў ці URLы"
 
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
 "compatible) version of JOSM.</li></ul>More Info:"
 msgstr ""
+"<h2> JOSM патрабуецца Java версіі {0}. </h2> Выяўленая версія Java: {1}. "
+"<br> Вы можаце <ul> <li> абнавіць Java (JRE) або </ li> <li> выкарыстоўваць "
+"папярэднія (Java {2} сумяшчальныя) версіі JOSM. </li> </ul> Дадатковая "
+"інфармацыя:"
 
 msgid "Exit JOSM"
 msgstr "Выйсці з JOSM"
@@ -135,7 +136,7 @@ msgid "About"
 msgstr "Аб праграме"
 
 msgid "Display the about screen."
-msgstr "Паказаць зьвесткі аб праграме"
+msgstr "Паказаць звесткі аб праграме"
 
 msgid "Java OpenStreetMap Editor"
 msgstr "Рэдактар OpenStreetMap на Java"
@@ -144,7 +145,7 @@ msgid "Version {0}"
 msgstr "Версія {0}"
 
 msgid "Last change at {0}"
-msgstr "Апошнія зьмены {0}"
+msgstr "Апошнія змены {0}"
 
 msgid "Java Version {0}"
 msgstr "Версія Java: {0}"
@@ -153,10 +154,10 @@ msgid "Homepage"
 msgstr "Хатняя старонка"
 
 msgid "Bug Reports"
-msgstr "Зьвесткі пра памылкі"
+msgstr "Звесткі пра памылкі"
 
 msgid "Info"
-msgstr "Зьвесткі"
+msgstr "Звесткі"
 
 msgid "Readme"
 msgstr "ReadMe"
@@ -165,7 +166,7 @@ msgid "Revision"
 msgstr "Рэвізія"
 
 msgid "Contribution"
-msgstr "Унеслі ўклад"
+msgstr "Аўтары"
 
 msgid "License"
 msgstr "Ліцэнзія"
@@ -183,15 +184,23 @@ msgid_plural ""
 "You are about to launch {0} browser windows.<br>This may both clutter your "
 "screen with browser windows<br>and take some time to finish."
 msgstr[0] ""
+"Вы збіраецеся адкрыць {0} акно браўзэра. <br> Гэта можа загрувасціць ваш "
+"экран вокнамі браўзэра <br> і зойме некаторы час."
 msgstr[1] ""
+"Вы збіраецеся адкрыць {0} акны браўзэра. <br> Гэта можа загрувасціць ваш "
+"экран вокнамі браўзэра <br> і зойме некаторы час."
+msgstr[2] ""
+"Вы збіраецеся адкрыць {0} вокнаў браўзэра. <br> Гэта можа загрувасціць ваш "
+"экран вокнамі браўзэра <br> і зойме некаторы час."
 
 msgid "Continue"
 msgstr "Далей"
 
 msgid "Click to continue and to open {0} browser"
 msgid_plural "Click to continue and to open {0} browsers"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Пстрыкніце, каб працягнуць і адкрыць {0} браўзэр"
+msgstr[1] "Пстрыкніце, каб працягнуць і адкрыць {0} браўзэры"
+msgstr[2] "Пстрыкніце, каб працягнуць і адкрыць {0} браўзэраў"
 
 msgid "Cancel"
 msgstr "Скасаваць"
@@ -200,7 +209,7 @@ msgid "Click to abort launching external browsers"
 msgstr "Клікніце каб спыніць запуск знешніх браузэраў"
 
 msgid "Please select at least one already uploaded node, way, or relation."
-msgstr "Выберыце як-меней 1 ужо запампаваную ноду, лінію альбо суадносіны"
+msgstr "Выберыце як-меней 1 ужо адасланую кропку, лінію альбо адносіны"
 
 msgid "Please select the target layer."
 msgstr "Выберыце слой прызначэння"
@@ -209,7 +218,7 @@ msgid "Select target layer"
 msgstr "Выберыце слой прызначэння"
 
 msgid "Merge"
-msgstr "З'яднанне"
+msgstr "З’яднанне"
 
 msgid ""
 "<html>There are no layers the source layer<br>''{0}''<br>could be merged "
@@ -225,13 +234,13 @@ msgstr "Выбар"
 
 msgid ""
 "Set the selected elements on the map to the selected items in the list above."
-msgstr ""
+msgstr "Вылучыць на карце аб’екты, абраныя ў спісе уверсе."
 
 msgid "Add imagery layer {0}"
 msgstr "Дадаць слой здымка {0}"
 
 msgid "Select image format for WMS layer"
-msgstr ""
+msgstr "Выберыце фармат малюнка для WMS пласта"
 
 msgid "Select WMS layers"
 msgstr "Выбраць WMS слой"
@@ -252,7 +261,7 @@ msgid "Could not parse WMS layer list."
 msgstr "Немагчыма разабраць спіс слаёў WMS."
 
 msgid "Add Node..."
-msgstr "Дадаць ноду"
+msgstr "Дадаць ноду..."
 
 msgid "Add a node by entering latitude / longitude or easting / northing."
 msgstr ""
@@ -263,47 +272,49 @@ msgid "Edit: {0}"
 msgstr "Змяніць: {0}"
 
 msgid "Align Nodes in Circle"
-msgstr "Размеркаваць ноды па крузе"
+msgstr "Размеркаваць кропкі па крузе"
 
 msgid "Move the selected nodes into a circle."
-msgstr "Зрушыць ноды ўкруг"
+msgstr "Зрушыць кропкі ўкруг"
 
 msgid "Tool: {0}"
 msgstr "Інструмент: {0}"
 
 msgid "Not enough nodes in selected ways."
-msgstr ""
+msgstr "Недастаткова кропак у выдзеленых лініях."
 
 msgid "Please select at least four nodes."
-msgstr "Выбераце як-меней чатыры ноды."
+msgstr "Выбераце як-меней чатыры кропкі."
 
 msgid "Cannot determine center of selected nodes."
-msgstr ""
+msgstr "Немагчыма вызначыць цэнтр для выбраных кропак."
 
 msgid ""
 "One or more nodes involved in this action is outside of the downloaded area."
 msgstr ""
+"Адна ці некалькі з задзейнічаных кропак знаходзяцца за межамі загружанай "
+"вобласці."
 
 msgid "Align Nodes in Line"
-msgstr "Размеркаваць ноды ўздоуж лініі"
+msgstr "Размеркаваць кропкі ўздоуж лініі"
 
 msgid "Move the selected nodes in to a line."
-msgstr "Зрушыць ноды у лінію"
+msgstr "Зрушыць абраныя кропкі у лінію"
 
 msgid "Please select at least three nodes."
-msgstr "Выбераце як-меней 3 ноды."
+msgstr "Выбераце як-меней тры кропкі."
 
 msgid "Can not align a polygon. Abort."
-msgstr ""
+msgstr "Немагчыма з палігона стварыць лінію. Адмена."
 
 msgid "Intersection of three or more ways can not be solved. Abort."
-msgstr ""
+msgstr "Скрыжаванне трох і больш ліній не можа быць вырашана. Адмена."
 
 msgid "Two parallels ways found. Abort."
-msgstr ""
+msgstr "Выяўлены дзве  паралельныя лініі. Перапыніць."
 
 msgid "data"
-msgstr "Дадзеныя"
+msgstr "дадзеныя"
 
 msgid "layer"
 msgstr "слой"
@@ -315,10 +326,10 @@ msgid "conflict"
 msgstr "канфлікт"
 
 msgid "download"
-msgstr "запампоўка"
+msgstr "запампаванае"
 
 msgid "problem"
-msgstr "праблема"
+msgstr "праблемы"
 
 msgid "previous"
 msgstr "папярэдняе"
@@ -369,41 +380,43 @@ msgid "Downloading open changesets ..."
 msgstr "Запампоўка няскончаных правак ..."
 
 msgid "Combine Way"
-msgstr "З'яднаць лінію"
+msgstr "З’яднаць лінію"
 
 msgid "Combine several ways into one."
-msgstr "З'яднаць некалькі ліній у адну"
+msgstr "З’яднаць некалькі ліній у адну"
 
 msgid "Change directions?"
 msgstr "Змяніць напрамак?"
 
 msgid "Reverse and Combine"
-msgstr "Змяніць напрамак і аб'яднаць"
+msgstr "Змяніць напрамак і аб’яднаць"
 
 msgid ""
 "The ways can not be combined in their current directions.  Do you want to "
 "reverse some of them?"
 msgstr ""
-"Так лініі не могуць быць з'язднаны. Магцыма змяніць напрамак некаторых з іх?"
+"Так лініі не могуць быць з’язднаны. Магцыма змяніць напрамак некаторых з іх?"
 
 msgid ""
 "Could not combine ways<br>(They could not be merged into a single string of "
 "nodes)"
 msgstr ""
+"Немагчыма аб’яднаць лініі<br>(Іх нельга злучыць у адзін шэраг кропак)"
 
 msgid "Combine {0} way"
 msgid_plural "Combine {0} ways"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Аб’яднаць {0} лінію"
+msgstr[1] "Аб’яднаць {0} лініі"
+msgstr[2] "Аб’яднаць {0} ліній"
 
 msgid "Please select at least two ways to combine."
-msgstr "Трэба выбраць як-меней 2 лініі каб з'яднаць."
+msgstr "Трэба выбраць як-меней 2 лініі каб з’яднаць."
 
 msgid "Copy"
 msgstr "Скапіраваць"
 
 msgid "Copy selected objects to paste buffer."
-msgstr "Скаріраваць выбранае у буфер"
+msgstr "Скапіраваць выбранае у буфер"
 
 msgid "Please select something to copy."
 msgstr "Выбераце што-небудзь каб скапіраваць"
@@ -424,16 +437,16 @@ msgid ""
 "Please select exactly two or three nodes or one way with exactly two or "
 "three nodes."
 msgstr ""
-"Выбераце дакладна 2 ці 3 ноды альбо адну лінію з дакладна 2 ці 3 нодамі."
+"Выберыце дакладна 2 ці 3 кропкі альбо адну лінію з дакладна 2 ці 3 кропкамі."
 
 msgid "Those nodes are not in a circle. Aborting."
 msgstr "Ноды не утвараюць акружнасць. Спыняюся."
 
 msgid "Update multipolygon"
-msgstr ""
+msgstr "Абнавіць мультыпалігон"
 
 msgid "Create multipolygon"
-msgstr "Стварыць мульціпалігон"
+msgstr "Стварыць мультыпалігон"
 
 msgid "No data loaded."
 msgstr "Ніякіх дадзеных не загружана"
@@ -445,25 +458,31 @@ msgid "Delete"
 msgstr "Выдаліць"
 
 msgid "Delete selected objects."
-msgstr "Выдаліць выбраныя аб'екты."
+msgstr "Выдаліць выбраныя аб’екты."
 
 msgid "Toggle dialogs panel"
 msgstr "Пераключыць панэлі дыялогаў"
 
 msgid "Toggle dialogs panel, maximize mapview"
-msgstr ""
+msgstr "Хавае панэль дыялогаў, для павелічэння плошчы для рэдагавання"
+
+msgid "Distribute Nodes"
+msgstr "Размеркаваць кропкі"
 
 msgid "Distribute the selected nodes to equal distances along a line."
-msgstr "Размеркаваць ноды праз аднолькавую адлегласць па лініі"
+msgstr "Размеркаваць кропкі з раўнамерным крокам па лініі."
 
 msgid "Ignoring {0} nodes with null coordinates"
-msgstr ""
+msgstr "Прапушчана {0} кропак з нулявымі каардынатамі"
 
 msgid ""
 "Please select :\n"
 "* One no self-crossing way with at most two of its nodes;\n"
 "* Three nodes."
 msgstr ""
+"Вылучыце:\n"
+"* Адну лінію без самаперасячэнняў з  не больш чым дзвюма яе кропкамі;\n"
+"* Тры кропкі."
 
 msgid "Download from OSM..."
 msgstr "Запампоўка з OSM..."
@@ -475,25 +494,27 @@ msgid ""
 "<html>This action will require {0} individual<br>download requests. Do you "
 "wish<br>to continue?</html>"
 msgstr ""
+"<html>Гэта дзеянне запатрабуе {0} асобных<br>запытаў на спампоўку. "
+"Працягнуць?</html>"
 
 msgid "Download data"
 msgstr "Запампоўка дадзеных"
 
 msgid "Download notes in current view"
-msgstr ""
+msgstr "Запампаваць нататкі для бачнай вобласці"
 
 msgid "Download object..."
-msgstr "Запампаваць аб'ект..."
+msgstr "Запампаваць аб’ект..."
 
 msgid "Download OSM object by ID."
-msgstr "Запампаваць аб'ект па ID."
+msgstr "Запампаваць аб’ект па ID."
 
 msgid "Download parent ways/relations..."
 msgstr "Запампаваць звязаныя лініі/суадносіны"
 
 msgid "Download objects referring to one of the selected objects"
 msgstr ""
-"Спампаваць аб'екты, якія спасылаюцца на які-небудзь з вылучаных аб'ектаў"
+"Спампаваць аб’екты, якія спасылаюцца на які-небудзь з вылучаных аб’ектаў"
 
 msgid "Duplicate"
 msgstr "Падвоіць"
@@ -547,7 +568,7 @@ msgid "Display history information about OSM ways, nodes, or relations."
 msgstr "Паказаць гістарычную інфармацыю аб лініях, нодах ці суадносінах OSM."
 
 msgid "Show history"
-msgstr ""
+msgstr "Паказаць гісторыю"
 
 msgid "History (web)"
 msgstr "Гісторыя (на сайце OSM)"
@@ -600,7 +621,7 @@ msgid ""
 msgstr "Паказаць падрабязную інфармацыю аб кропках, лініях альбо адносінах"
 
 msgid "Advanced info (web)"
-msgstr "Пашыраная інфармацыя( на сайце ОСМ)"
+msgstr "Пашыраная інфармацыя (на сайце OSM)"
 
 msgid ""
 "Display object information about OSM nodes, ways, or relations in web "
@@ -609,33 +630,31 @@ msgstr ""
 "Паказаць падрабязную інфармацыю аб кропках, лініях ці адносінах у браўзэры."
 
 msgid "Join overlapping Areas"
-msgstr "З'яднаць плошчы з перакрывам"
+msgstr "З’яднаць плошчы з перакрывам"
 
 msgid "Joins areas that overlap each other"
-msgstr "З'яднаць плошчы з перакрывам адно другой"
+msgstr "З’яднаць плошчы з перакрывам адно другой"
 
 msgid "Please select at least one closed way that should be joined."
-msgstr "Выбераце яшчэ як-меней 1 замкнутую лінію каб з'яднаць"
+msgstr "Выбераце яшчэ як-меней 1 замкнутую лінію каб з’яднаць"
 
 msgid ""
 "One of the selected ways is not closed and therefore cannot be joined."
 msgstr ""
-"Адна з вылучаных ліній замкнёная, таму лініі не могуць быць аб'яднаны"
+"Адна з вылучаных ліній замкнёная, таму лініі не могуць быць аб’яднаны"
 
 msgid "Join area confirmation"
-msgstr "Запыт на аб'яднанне палігонаў"
+msgstr "Запыт на аб’яднанне палігонаў"
 
 msgid "The selected way has nodes outside of the downloaded data region."
 msgid_plural ""
 "The selected ways have nodes outside of the downloaded data region."
-msgstr[0] "Выбраныя лініі маюць ноды паза-межамі запампаванага рэгіёну"
-msgstr[1] ""
-"Вылучаныя лініі змяшчаюць кропкі за межамі запампаванай вобласьці."
-msgstr[2] ""
-"Вылучаныя лініі змяшчаюць кропкі за межамі запампаванай вобласьці."
+msgstr[0] "Выбраныя лініі маюць кропкі паза-межамі запампаванага рэгіёну."
+msgstr[1] "Вылучаныя лініі змяшчаюць кропкі за межамі запампаванай вобласці."
+msgstr[2] "Вылучаныя лініі змяшчаюць кропкі за межамі запампаванай вобласці."
 
 msgid "This can lead to nodes being deleted accidentally."
-msgstr "З гэтага некаторые ноды могуць быць выпадкова выдалены"
+msgstr "З-за гэтага некаторыя кропкі могуць быць выпадкова выдалены."
 
 msgid "Are you really sure to continue?"
 msgstr "Вы сапраўды упэўнены?"
@@ -647,10 +666,10 @@ msgid "The selected area is incomplete. Continue?"
 msgstr "Абраная вобласць няпоўная. Усё роўна працягнуць?"
 
 msgid "No intersection found. Nothing was changed."
-msgstr "Перасячэнни ня знойдзены. Зменаў няма."
+msgstr "Перасячэнні не знойдзены. Зменаў няма."
 
 msgid "Move tags from ways to relations"
-msgstr ""
+msgstr "Перанесці тэгі з ліній на адносіны"
 
 msgid "Reverting changes"
 msgstr "Адмена змяненняў"
@@ -662,21 +681,23 @@ msgid "Added node on all intersections"
 msgstr "Ноды даданыя да кожнага перасячэння."
 
 msgid "Assemble new polygons"
-msgstr "Аб'яднаць новыя палігоны"
+msgstr "Аб’яднаць новыя палігоны"
 
 msgid "Delete relations"
 msgstr "Выдаліць аносіны"
 
 msgid "Delete Ways that are not part of an inner multipolygon"
-msgstr "Выдаліць лініі не прыналежныя да нутраных палігонаў"
+msgstr "Выдаліць лініі не прыналежныя да нутраных мультыпалігонаў"
 
 msgid "Joined overlapping areas"
-msgstr "З'яднаны плошчы з перакрывам"
+msgstr "З’яднаны плошчы з перакрывам"
 
 msgid ""
 "Some of the ways were part of relations that have been modified.<br>Please "
 "verify no errors have been introduced."
 msgstr ""
+"Некаторыя з ліній з’яўляліся часткай адносін, якія былі зменены.<br>Калі "
+"ласка, праверце, ці не паўсталі памылкі."
 
 msgid "Fix tag conflicts"
 msgstr "Вырашыць канфлікты з меткамі"
@@ -686,57 +707,58 @@ msgstr "Падзяліць лініі на фрагменты"
 
 msgid "Sorry. Cannot handle multipolygon relations with multiple outer ways."
 msgstr ""
-"Выбачайце. Не атрымліваецца апрацаваць адносіны мульціпалігона, які "
+"Выбачайце. Не атрымліваецца апрацаваць адносіны мультыпалігона, які "
 "складаецца з некалькіх знешніх ліній."
 
 msgid ""
 "Sorry. Cannot handle way that is outer in multiple multipolygon relations."
 msgstr ""
 "Выбачайце. Немагчыма апрацаваць знешнюю лінію ў некалькіх адносінах "
-"мульціпалігона."
+"мультыпалігона."
 
 msgid ""
 "Sorry. Cannot handle way that is both inner and outer in multipolygon "
 "relations."
 msgstr ""
-"Выбачайце. Немагчыма апрацаваць лінію, якая адначасова з'яўляецца знешняй і "
-"ўнутранай ў адносінах мульціпалігона."
+"Выбачайце. Немагчыма апрацаваць лінію, якая адначасова з’яўляецца знешняй і "
+"ўнутранай ў адносінах мультыпалігона."
 
 msgid ""
 "Sorry. Cannot handle way that is inner in multiple multipolygon relations."
 msgstr ""
 "Выбачайце. Немагчыма апрацаваць ўнутраную лінію ў некалькіх адносінах "
-"мульціпалігона."
+"мультыпалігона."
 
 msgid "Removed Element from Relations"
-msgstr "Выдалены элемент з суадносін"
+msgstr "Выдалены з адносін элемент"
 
 msgid "Remove tags from inner ways"
 msgstr "Выдаліць меткі з нутраных ліній"
 
 msgid "Join Areas Function"
-msgstr "Функцыя З'яднання Плошчаў"
+msgstr "Функцыя аб’яднання палігонаў"
 
 msgid "Join Node to Way"
-msgstr "Дадаць ноду лініі"
+msgstr "Уключыць кропку ў лінію"
 
 msgid "Include a node into the nearest way segments"
 msgstr "Уключыць кропку ў сегменты бліжэйшых ліній"
 
 msgid "Move Node onto Way"
-msgstr ""
+msgstr "Перамясціць кропку на лінію"
 
 msgid "Move the node onto the nearest way segments and include it"
-msgstr ""
+msgstr "Перамяшчае кропку на бліжэйшую лінію і ўключае кропку ў яе склад"
 
 msgid "No Shortcut"
-msgstr "Няма скарачэння"
+msgstr "Няма гарачай клавішы"
 
 msgid "Jump To Position"
 msgstr "перайсці да пазіцыі"
 
 msgid "Opens a dialog that allows to jump to a specific location"
-msgstr "Паказвае дыялог які дазваляе перайсці да азначанага месца"
+msgstr ""
+"Адкрывае дыялогавае акно, якое дазваляе перайсці да вызначанай мясцовасці"
 
 msgid "Enter Lat/Lon to jump to position."
 msgstr "Каб перайсці - задайце шырату/даўгату месца"
@@ -751,13 +773,13 @@ msgid "Longitude"
 msgstr "Даўгата"
 
 msgid "Zoom (in metres)"
-msgstr "Павяличэнне (у метрах)"
+msgstr "Маштаб (у метрах)"
 
 msgid "URL"
 msgstr "URL"
 
 msgid "Jump there"
-msgstr "Перайсці"
+msgstr "Перайсці туды"
 
 msgid "Jump to Position"
 msgstr "Перайсці да пазіцыі"
@@ -774,7 +796,7 @@ msgstr "Рэжым «ласо»"
 
 msgid "Lasso selection mode: select objects within a hand-drawn region"
 msgstr ""
-"Рэжым вылучэння «ласо»: вылучыць аб'екты ў межах намаляванай ад рукі вобласці"
+"Рэжым вылучэння «ласо»: вылучыць аб’екты ў межах намаляванай ад рукі вобласці"
 
 msgid "Rectified Image..."
 msgstr "Трансфармаваны малюнак ..."
@@ -819,7 +841,7 @@ msgid "Merge the current layer into another layer"
 msgstr "Зліць гэты слой у другі"
 
 msgid "Merging layers with different upload policies"
-msgstr "Аб'яднанне слаёў з рознымі палітыкамі перадачы на сервер"
+msgstr "Аб’яднанне слаёў з рознымі палітыкамі перадачы на сервер"
 
 msgid ""
 "You are about to merge data between layers ''{0}'' and ''{1}''.<br /><br "
@@ -830,45 +852,57 @@ msgid ""
 "one by one, by using ''<i>Merge selection</i>''.<br /><br />Are you sure you "
 "want to continue?"
 msgstr ""
+"Вы збіраецеся аб’яднаць дадзеныя паміж пластамі'' {0}'' і'' {1}''. <br /> "
+"<br /> Гэтыя пласты маюць розныя палітыкі перадачы на сервер і не павінны "
+"аб’ядноўвацца так.<br />Іх аб’яднанне прывядзе да ўжывання строгай палітыкі "
+"(якая перашкаджае перадачы) да ''{1}''.<br /><br /><b> Гэты спосаб не "
+"рэкамендуецца для аб’яднання гэтых дадзеных </b>. <br /> Вы павінны "
+"праверыць і аб’яднаць кожны аб’ект, адзін за адным, выкарыстоўваючы "
+"<i>Аб’яднаць вылучанае</i>.<br /><br /> Вы ўпэўнены, што жадаеце працягнуць?"
 
 msgid "Ignore this hint and merge anyway"
-msgstr ""
+msgstr "Ігнараваць раду і працягнуць аб’яднанне"
 
 msgid "Merge Nodes"
-msgstr "Зліць ноды"
+msgstr "Аб’яднаць кропкі"
 
 msgid "Merge nodes into the oldest one."
-msgstr "Зліць ноды у адну найстарэйшаю"
+msgstr "Аб’яднаць кропкі ў адну (больш старую)"
 
 msgid ""
 "Please select at least two nodes to merge or one node that is close to "
 "another node."
 msgstr ""
+"Абярыце сама меней дзве кропкі для аб’яднання ці адну кропку, размешчаную "
+"побач з іншай кропкай."
 
 msgid "Abort Merging"
-msgstr "Адмяніць зліццё"
+msgstr "Перапыніць аб’яднанне"
 
 msgid "Click to abort merging nodes"
-msgstr "Клікніце каб адмяніць зліццё нодаў"
+msgstr "Націсніце, каб перапыніць працэс аб’яднання кропак"
 
 msgid ""
 "Cannot merge nodes: Would have to delete way {0} which is still used by {1}"
 msgstr ""
+"Немагчыма аб’яднаць кропкі: давялося б выдаліць лінію {0}, якая усё яшчэ "
+"выкарыстоўваецца {1}"
 
 msgid "Merge {0} node"
 msgid_plural "Merge {0} nodes"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Аб’яднаць {0} кропку"
+msgstr[1] "Аб’яднаць {0} кропкі"
+msgstr[2] "Аб’яднаць {0} кропак"
 
 msgid "Merge selection"
-msgstr "Зліць выбранае"
+msgstr "Аб’яднаць вылучанае"
 
 msgid "Merge the currently selected objects into another layer"
-msgstr "Аб'яднаць вылучаныя аб'екты ў іншы слой"
+msgstr "Аб’яднаць вылучаныя аб’екты ў іншы слой"
 
 msgid "Merging too many objects with different upload policies"
 msgstr ""
-"Аб'ядноўваецца занадта шмат аб'ектаў з рознымі палітыкамі перадачы на сервер"
+"Аб’ядноўваецца занадта шмат аб’ектаў з рознымі палітыкамі перадачы на сервер"
 
 msgid ""
 "You are about to merge more than 1 object between layers ''{0}'' and "
@@ -876,12 +910,16 @@ msgid ""
 "data</b>.<br />You should instead check and merge each object, <b>one by "
 "one</b>.<br /><br />Are you sure you want to continue?"
 msgstr ""
+"Вы збіраецеся аб’яднаць больш за 1 аб’ект паміж пластамі'' {0}'' і'' {1}''. "
+"<br /> <br /> Гэты спосаб не рэкамендуецца для аб’яднання гэтых дадзеных "
+"</b>. <br /> Вы павінны праверыць і аб’яднаць кожны аб’ект, <b>адзін за "
+"адным</b>.<br /><br /> Вы ўпэўнены, што жадаеце працягнуць?"
 
 msgid "Mirror"
 msgstr "Адлюстраваць"
 
 msgid "Mirror selected nodes and ways."
-msgstr "Адлюстраваць выбраны ноды і лініі"
+msgstr "Адлюстраваць выбраны кропкі й лініі"
 
 msgid "Please select at least one node or way."
 msgstr "Выберыце як-меней 1 ноду ці лінію"
@@ -890,7 +928,7 @@ msgid "up"
 msgstr "угору"
 
 msgid "down"
-msgstr "ўніз"
+msgstr "уніз"
 
 msgid "left"
 msgstr "налева"
@@ -899,22 +937,22 @@ msgid "right"
 msgstr "направа"
 
 msgid "Move objects {0}"
-msgstr ""
+msgstr "Перанесці аб’екты {0}"
 
 msgid "Move {0}"
 msgstr "Перанесці {0}"
 
 msgid "Moves Objects {0}"
-msgstr ""
+msgstr "Перанесці аб’екты {0}"
 
 msgid "Cannot move objects outside of the world."
-msgstr "Немагчыма пераносіць аб'екты па-за межы сьвету"
+msgstr "Немагчыма пераносіць аб’екты па-за межы сьвету"
 
 msgid "Move Node..."
 msgstr "Перанесьці ноду"
 
 msgid "Edit latitude and longitude of a node."
-msgstr "Правіць даўгату/шырату ноды"
+msgstr "Правіць даўгату і шырату кропкі"
 
 msgid "New Layer"
 msgstr "Новы слой"
@@ -1013,7 +1051,7 @@ msgid "Download Data"
 msgstr "Запампаваць дадзеныя"
 
 msgid "Which tasks to perform?"
-msgstr ""
+msgstr "Што трэба зрабіць?"
 
 msgid "Ok"
 msgstr "Ok"
@@ -1022,6 +1060,8 @@ msgid ""
 "Cannot open URL ''{0}''<br>The following download tasks accept the URL "
 "patterns shown:<br>{1}"
 msgstr ""
+"Не атрымалася адкрыць URL ''{0}''<br>Наступныя заданні загрузкі прымаюць "
+"паказаныя шаблоны URL:<br>{1}"
 
 msgid ""
 "<h3>When one or more ways are selected, the shape is adjusted such, that all "
@@ -1031,16 +1071,16 @@ msgid ""
 "shortcut for Orthogonalize / Undo. The default is Shift-Q.)"
 msgstr ""
 "<h3>Калі выбрана адна або некалькі ліній, фігура роўніцца так што застаюцца "
-"толькі вуглы 90 або 180 градусаў</h3>Магчыма дадаць 2 ноды да выбраных. Тады "
-"накірунак раўнання задаецца гэтымі дзьвюмя нодамі. (Затым, магчыма адмяніць "
-"раўнанне некаторых нодаў:<br>Выбярыце іх і выкарыстайце Артаганалізацыя / "
-"Адмяніць. Звычайна гэта Shift-Q.)"
+"толькі вуглы 90 або 180 градусаў</h3>Магчыма дадаць 2 кропкі да выбраных. "
+"Тады накірунак раўнання задаецца гэтымі дзвюмя кропкамі. (Затым, магчыма "
+"адмяніць раўнанне некаторых кропкак:<br>Выберыце іх і выкарыстайце "
+"Артаганалізацыя / Адмяніць. Звычайна гэта Shift-Q.)"
 
 msgid "Orthogonalize Shape"
 msgstr "Артаганалізаваць фігуру"
 
 msgid "Move nodes so all angles are 90 or 180 degrees"
-msgstr "Выроўняць ноды так каб усе вуглы былі 90 або 180 градусаў"
+msgstr "Выраўняць кропкі так, каб усе вуглы былі 90 або 180 градусаў"
 
 msgid "Orthogonalize Shape / Undo"
 msgstr "Артаганалізацыя фігуры / Адмяніць"
@@ -1055,6 +1095,8 @@ msgid ""
 "Orthogonalize Shape / Undo<br>Please select nodes that were moved by the "
 "previous Orthogonalize Shape action!"
 msgstr ""
+"Зрабіць куты прамымі / Адмяніць<br>Абярыце кропкі, перамешчаныя папярэднім "
+"дзеяннем «Зрабіць куты прамымі»!"
 
 msgid ""
 "<html>You are using the EPSG:4326 projection which might lead<br>to "
@@ -1066,13 +1108,13 @@ msgstr ""
 "каб больш ня ўбачыць гэтую перасцярогу.<br>Далей?</html>"
 
 msgid "Selection must consist only of ways and nodes."
-msgstr "Выбірайце толькi лініі альбо ноды"
+msgstr "Выбірайце толькi лініі альбо кропкі"
 
 msgid "Orthogonalize"
 msgstr "Артаганалізаваць"
 
 msgid "Usage"
-msgstr "Выкарыстаньне"
+msgstr "Выкарыстанне"
 
 msgid ""
 "<html>Please make sure all selected ways head in a similar direction<br>or "
@@ -1084,6 +1126,32 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr "Выберыце лініі з вугламі падобнымі на 90 альбо 180 градусаў"
 
+msgid "Download from Overpass API ..."
+msgstr "Загрузіць з Overpass API ..."
+
+msgid "Download map data from Overpass API server."
+msgstr "Загрузіць картаграфічныя дадзеныя з сервера Overpass API."
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+"Стварае запыты Overpass выкарыстоўваючы памочніка па стварэнні запытаў "
+"Overpass Turbo"
+
+msgid "Build query"
+msgstr "Стварыць запыт"
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr "<html>Памочнік Overpass не змог разабраць гэты запыт:"
+
+msgid "Parse error"
+msgstr "Памылка разбору"
+
+msgid "Overpass query: "
+msgstr "Запыт да Overpass: "
+
+msgid "Overpass server: "
+msgstr "Сервер Overpass: "
+
 msgid "Paste"
 msgstr "Уклеіць"
 
@@ -1101,14 +1169,14 @@ msgid ""
 "objects are removed.  Do you want to paste the data without the incomplete "
 "objects?"
 msgstr ""
-"Капіяваныя дадзеныя ўтрымліваюць няпоўныя аб'екты. Пры ўстаўцы яны будуць "
-"выдаленыя. Вы хочаце ўставіць дадзеныя без няпоўных аб'ектаў?"
+"Капіяваныя дадзеныя ўтрымліваюць няпоўныя аб’екты. Пры ўстаўцы яны будуць "
+"выдаленыя. Вы хочаце ўставіць дадзеныя без няпоўных аб’ектаў?"
 
 msgid "Paste Tags"
 msgstr "Уклеіць Меткі"
 
 msgid "Apply tags of contents of paste buffer to all selected items."
-msgstr "Прысвоіць меткі з буфера ўсім выбраным аб'ектам."
+msgstr "Прысвоіць меткі з буфера ўсім выбраным аб’ектам."
 
 msgid "Pasting {0} tag"
 msgid_plural "Pasting {0} tags"
@@ -1118,9 +1186,9 @@ msgstr[2] "Уставіць {0} тэгаў"
 
 msgid "to {0} object"
 msgid_plural "to {0} objects"
-msgstr[0] "у {0} аб'ект"
-msgstr[1] "у {0} аб'екта"
-msgstr[2] "у {0} аб'ектаў"
+msgstr[0] "у {0} аб’ект"
+msgstr[1] "у {0} аб’екта"
+msgstr[2] "у {0} аб’ектаў"
 
 msgid "Preferences..."
 msgstr "Настаўленні..."
@@ -1135,7 +1203,7 @@ msgid "Purge..."
 msgstr "Ачысціць ..."
 
 msgid "Forget objects but do not delete them on server when uploading."
-msgstr "Ігнараваць аб'екты, але не выдаляць іх з сервера пры перадачы."
+msgstr "Ігнараваць аб’екты, але не выдаляць іх з сервера пры перадачы."
 
 msgid "Purge"
 msgstr "Ачысціць"
@@ -1148,7 +1216,7 @@ msgid ""
 "removed from the layer, but <i>not</i> deleted<br> on the server when "
 "uploading."
 msgstr ""
-"Гэтая аперацыя дазволіць JOSM не звяртаць увагі на выдзеленыя аб'екты. <br> "
+"Гэтая аперацыя дазволіць JOSM не звяртаць увагі на выдзеленыя аб’екты. <br> "
 "Яны буду выдаленыя са слою, але <i> не будуць </ i> выдаленыя <br> на "
 "серверы падчас перадачы дадзеных."
 
@@ -1156,8 +1224,8 @@ msgid ""
 "The following dependent objects will be purged<br> in addition to the "
 "selected objects:"
 msgstr ""
-"Наступныя залежныя аб'екты будуць ачышчаны <br> у дадатак да вылучаных "
-"аб'ектаў:"
+"Наступныя залежныя аб’екты будуць ачышчаны <br> у дадатак да вылучаных "
+"аб’ектаў:"
 
 msgid "Add to selection"
 msgstr "Дадаць да выдзялення"
@@ -1166,7 +1234,7 @@ msgid ""
 "Some of the objects are modified.<br> Proceed, if these changes should be "
 "discarded.</html>"
 msgstr ""
-"Некаторыя аб'екты былі змененыя. <br> Калі працягнуць, то гэтыя змены будуць "
+"Некаторыя аб’екты былі змененыя. <br> Калі працягнуць, то гэтыя змены будуць "
 "адмененыя. </ html>"
 
 msgid "Clear Undo/Redo buffer"
@@ -1197,10 +1265,10 @@ msgid "Report bug"
 msgstr "Паведаміць пра памылку"
 
 msgid "Report a ticket to JOSM bugtracker"
-msgstr ""
+msgstr "Стварыць картку ў сістэме адсочвання памылак JOSM"
 
 msgid "Restart"
-msgstr "Перазапусьціць"
+msgstr "Перазапусціць"
 
 msgid "Restart the application."
 msgstr "Перазапусціць праграму."
@@ -1245,35 +1313,35 @@ msgid "Save the current data to a new file."
 msgstr "Запісаць бягучыя дадзеныя новым файлам"
 
 msgid "Search Notes..."
-msgstr ""
+msgstr "Пошук нататак..."
 
 msgid "Download notes from the note search API"
-msgstr ""
+msgstr "Запампаваць нататкі з API пошуку нататак"
 
 msgid "Search the OSM API for notes containing words:"
-msgstr ""
+msgstr "Пошук з дапамогай OSM API нататак, якія змяшчаюць словы:"
 
 msgid "Search for notes"
-msgstr ""
+msgstr "Пошук нататак"
 
 msgid "You must enter a search term"
-msgstr ""
+msgstr "Неабходна ўвесці тэкст для пошуку"
 
 msgid "Select All"
-msgstr "Выбраць усё"
+msgstr "Вылучыць усё"
 
 msgid ""
 "Select all undeleted objects in the data layer. This selects incomplete "
 "objects too."
 msgstr ""
-"Выберыце ўсе нявыдаленыя аб'екты на слоі. Так будуць выбранытаксама і "
-"няскончаныя аб'екты"
+"Выберыце ўсе нявыдаленыя аб’екты на слоі. Так будуць выбранытаксама і "
+"няскончаныя аб’екты"
 
 msgid "Non-branching way sequences"
-msgstr ""
+msgstr "Паслядоўнасці ліній без разгалінаванняў"
 
 msgid "Select non-branching sequences of ways"
-msgstr ""
+msgstr "Выберыце паслядоўнасць ліній, якая не разгаліноўваецца"
 
 msgid "Load Session"
 msgstr "Запампаваць сесію"
@@ -1295,7 +1363,7 @@ msgstr "Памылка ўводу / вываду"
 
 msgid "<html>Could not load session file ''{0}''.<br>Error is:<br>{1}</html>"
 msgstr ""
-"<html> Не атрымалася загрузіць файл сесіі'' {0}''. <br> Памылка: <br> {1} </ "
+"<html> Не атрымалася прачытаць файл сесіі'' {0}''. <br> Памылка: <br> {1} </ "
 "html>"
 
 msgid "Save Session As..."
@@ -1331,18 +1399,19 @@ msgid "No exporter for this layer"
 msgstr "Для гэтага слоя інструмент для экспарту адсутнічае"
 
 msgid "Show Status Report"
-msgstr "Паказаць статус рапорт"
+msgstr "Паказаць справаздачу аб стане"
 
 msgid ""
 "Show status report with useful information that can be attached to bugs"
 msgstr ""
-"Паказаць статус рапорт з карыснай інфармацыей якая можа быць запісана ў багі"
+"Паказаць справаздачу аб стане з карыснай інфармацыяй, якая можа быць "
+"запісана ў багі"
 
 msgid "Help: {0}"
 msgstr "Дапамога: {0}"
 
 msgid "Status Report"
-msgstr "Статус рапорт"
+msgstr "Справаздача пра стан"
 
 msgid "Copy to clipboard and close"
 msgstr "Скапіраваць у буфер і закрыць"
@@ -1354,7 +1423,7 @@ msgid "Simplify Way"
 msgstr "Спрасціць лінію"
 
 msgid "Delete unnecessary nodes from a way."
-msgstr "Выдаліць лішнія ноды з лініі"
+msgstr "Выдаліць лішнія кропкі з лініі"
 
 msgid "Please select at least one way to simplify."
 msgstr "Выберыце як-меней 1 лінію для спрашчэння"
@@ -1377,28 +1446,28 @@ msgstr "Спрасціць лініі?"
 
 msgid "Simplify {0} way"
 msgid_plural "Simplify {0} ways"
-msgstr[0] "Спрасціць лінію {0}"
-msgstr[1] "Спрасціць лініі {0}"
+msgstr[0] "Спрасціць {0} лінію"
+msgstr[1] "Спрасціць {0} лініі"
 msgstr[2] "Спрасціць {0} ліній"
 
 msgid "Simplify Way (remove {0} node)"
 msgid_plural "Simplify Way (remove {0} nodes)"
-msgstr[0] "Спрасціць лінію (выдаліць {0} ноду)"
-msgstr[1] "Спрасціць лінію (выдаліць {0} нодаў)"
-msgstr[2] "Спрасціць лінію (выдаліць {0} нодаў)"
+msgstr[0] "Спрасціць лінію (выдаліць {0} кропку)"
+msgstr[1] "Спрасціць лінію (выдаліць {0} кропкі)"
+msgstr[2] "Спрасціць лінію (выдаліць {0} кропак)"
 
 msgid "Split Way"
 msgstr "Падзяліць лінію"
 
 msgid "Split a way at the selected node."
-msgstr "Падзяліць лінію па выбранай нодзе"
+msgstr "Падзяліць лінію ў вылучанай кропцы."
 
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr "Цяперашнее вылучэнне немагчыма падзяліць - ня вылучана кропка."
 
 msgid "The selected nodes do not share the same way."
-msgstr "Выбраныя ноды не належаць адной лініі."
+msgstr "Выбраныя кропкі не належаць адной лініі."
 
 msgid "The selected node is not in the middle of any way."
 msgid_plural "The selected nodes are not in the middle of any way."
@@ -1423,29 +1492,34 @@ msgstr[2] ""
 "ласка, вылучыце лінію таксама."
 
 msgid "You must select two or more nodes to split a circular way."
-msgstr "Выберыце як-меней 2 ноды каб падзялиць кругавую лінію"
+msgstr "Выберыце як-меней 2 кропкі каб падзяліць кругавую лінію"
 
 msgid ""
 "The way cannot be split at the selected nodes. (Hint: Select nodes in the "
 "middle of the way.)"
 msgstr ""
-"Лінія ня можа быць падзелена па выбраных нодах. (Падказка: Выберыце ноды не "
-"на канцах лініі.)"
+"Лінія не можа быць падзелена па выбраных кропках. (Падказка: Выберыце кропкі "
+"не на канцах лініі.)"
 
 msgid ""
 "A role based relation membership was copied to all new ways.<br>You should "
 "verify this and correct it when necessary."
 msgstr ""
+"Удзел у адносінах, заснаваных на ролях, скапіяваны ва ўсе новыя "
+"лініі.<br>Праверце яго і, пры неабходнасці, выправіце."
 
 msgid ""
 "A relation membership was copied to all new ways.<br>You should verify this "
 "and correct it when necessary."
 msgstr ""
+"Удзел у адносінах скапіяваны ва ўсе новыя лініі.<br>Праверце яго і, пры "
+"неабходнасці, выправіце."
 
 msgid "Split way {0} into {1} part"
 msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Падзяліць лінію {0} на {1} адрэзак"
+msgstr[1] "Падзяліць лінію {0} на {1} адрэзкі"
+msgstr[2] "Падзяліць лінію {0} на {1} адрэзкаў"
 
 msgid "Toggle GPX Lines"
 msgstr "Пераключыць лініі GPX"
@@ -1463,7 +1537,7 @@ msgid "UnGlue Ways"
 msgstr "Расклеіць лініі"
 
 msgid "Duplicate nodes that are used by multiple ways."
-msgstr "Дубліраваць ноды праз якія праходзяць некалькі ліній"
+msgstr "Дубліраваць кропкі, праз якія праходзяць некалькі ліній"
 
 msgid "This node is not glued to anything else."
 msgstr "Гэтая нода нікуды не прывязаная."
@@ -1493,7 +1567,7 @@ msgstr ""
 
 msgid ""
 "* One way that has one or more nodes that are used by more than one way, or"
-msgstr "* Адну лінію у якой ёсць агульныя з другімі лініямі ноды, альбо"
+msgstr "* Адну лінію, у якой ёсць агульныя з другімі лініямі кропкі альбо"
 
 msgid ""
 "* One way and one or more of its nodes that are used by more than one way."
@@ -1507,67 +1581,70 @@ msgid ""
 "their\n"
 "own copy and all nodes will be selected."
 msgstr ""
-"Заўвага: Калі выбрана лінія, яна атрымае новыя ноды скапіраваныя з "
+"Заўвага: Калі выбрана лінія, яна атрымае новыя кропкі скапіраваныя з "
 "расклееных і яны будуць выбраныя. Інакш, усе лініі атрымаюць асабістыя "
 "копіі\n"
-"і усе ноды будуць выбраны"
+"і усе кропкі будуць выбраны"
 
 msgid "Unglued Node"
 msgstr "Расклееная нода"
 
 msgid "Dupe into {0} node"
 msgid_plural "Dupe into {0} nodes"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Падзяліць на {0} кропку"
+msgstr[1] "Падзяліць на {0} кропкі"
+msgstr[2] "Падзяліць на {0} кропак"
 
 msgid "Dupe {0} node into {1} nodes"
 msgid_plural "Dupe {0} nodes into {1} nodes"
-msgstr[0] "Здублікаваць ноду {0} у {1} нодаў"
-msgstr[1] "Здублікаваць ноды {0} у {1} нодаў"
+msgstr[0] "Стварыць {1} копій кропкі {0}"
+msgstr[1] "Стварыць {1} копій кропкі {0}"
 msgstr[2] "Стварыць {1} копій кропкі {0}"
 
 msgid "Unglue confirmation"
-msgstr "Запыт на раз'яднанне"
+msgstr "Запыт на раз’яднанне"
 
 msgid ""
 "You are about to unglue nodes outside of the area you have "
 "downloaded.<br>This can cause problems because other objects (that you do "
 "not see) might use them.<br>Do you really want to unglue?"
 msgstr ""
-"Вы збіраецеся раз'яднаць пункту па-за запампаванай зоны. <br> Гэта можа "
-"прывесці да памылак, паколькі нябачныя для Вас аб'екты могуць выкарыстоўваць "
-"гэтыя кропкі.  <br> Вы сапраўды хочаце раз'яднаць іх?"
+"Вы збіраецеся раз’яднаць пункту па-за запампаванай зоны. <br> Гэта можа "
+"прывесці да памылак, паколькі нябачныя для Вас аб’екты могуць выкарыстоўваць "
+"гэтыя кропкі.  <br> Вы сапраўды хочаце раз’яднаць іх?"
 
 msgid ""
 "You are about to unglue incomplete objects.<br>This will cause problems "
 "because you don''t see the real object.<br>Do you really want to unglue?"
 msgstr ""
-"Вы збіраецеся раз'яднаць няпоўны аб'ект <br> Гэта прывядзе да памылак, "
-"паколькі вы бачыце не ўвесь аб'ект. <br> Вы сапраўды хочаце раз'яднаць іх?"
+"Вы збіраецеся раз’яднаць няпоўны аб’ект <br> Гэта прывядзе да памылак, "
+"паколькі вы бачыце не ўвесь аб’ект. <br> Вы сапраўды хочаце раз’яднаць іх?"
 
 msgid "Disconnect Node from Way"
-msgstr ""
+msgstr "Адлучыць кропку ад лініі"
 
 msgid "Disconnect nodes from a way they currently belong to"
-msgstr ""
+msgstr "Адлучыць кропкі ад лініі, да якой яны прыналежаць"
 
 msgid "Select at least one node to be disconnected."
-msgstr ""
+msgstr "Абярыце хоць бы адну кропку для адлучэння"
 
 msgid "Selected node cannot be disconnected from anything."
 msgid_plural "Selected nodes cannot be disconnected from anything."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Вылучаную кропку нельга ад чаго-небудзь адлучыць."
+msgstr[1] "Вылучаныя кропкі нельга ад чаго-небудзь адлучыць."
+msgstr[2] "Вылучаныя кропкі нельга ад чаго-небудзь адлучыць."
 
 msgid ""
 "The affected way would disappear after disconnecting the selected node."
 msgid_plural ""
 "The affected way would disappear after disconnecting the selected nodes."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Закранутая лінія знікне пасля адлучэння вылучанай кропкі."
+msgstr[1] "Закранутая лінія знікне пасля адлучэння вылучаных кропак."
+msgstr[2] "Закранутая лінія знікне пасля адлучэння вылучаных кропак."
 
 msgid "Some irrelevant nodes have been removed from the selection"
-msgstr ""
+msgstr "Некаторыя непадыходныя кропкі былі выдалены з вылучэння"
 
 msgid "Undo"
 msgstr "Вярнуць"
@@ -1582,48 +1659,48 @@ msgid "Undo {0}"
 msgstr "Адмяніць {0}"
 
 msgid "Unselect All"
-msgstr "Зняць усе вылучэньні"
+msgstr "Зняць усе вылучэнні"
 
 msgid "Unselect all objects."
-msgstr "Зняць вылучэньні з усіх аб'ектаў"
+msgstr "Зняць вылучэнні з усіх аб’ектаў"
 
 msgid "Update data"
 msgstr "Абнавіць дадзеныя"
 
 msgid "Updates the objects in the active data layer from the server."
-msgstr "Абновіць аб'екты на бягучым слаі з сервера"
+msgstr "Абновіць аб’екты на бягучым слаі з сервера"
 
 msgid "Update modified"
 msgstr "Абнавіць праўленае"
 
 msgid ""
 "Updates the currently modified objects from the server (re-downloads data)"
-msgstr "Абновіць праўленыя аб'екты з сервера (Перазапампуе дадзеныя)"
+msgstr "Абновіць праўленыя аб’екты з сервера (Перазапампуе дадзеныя)"
 
 msgid "No current dataset found"
 msgstr "Ня знойдзен бягучы зборДадзеных"
 
 msgid "Did not find an object with id {0} in the current dataset"
-msgstr ""
+msgstr "Не знойдзены аб’ект з id {0} у бягучым наборы дадзеных"
 
 msgid "Update selection"
 msgstr "Абнавіць выбранае"
 
 msgid ""
 "Updates the currently selected objects from the server (re-downloads data)"
-msgstr "Абновіць выбраныя аб'екты з сервера (Перазапампуе дадзеныя)"
+msgstr "Абновіць выбраныя аб’екты з сервера (Перазапампуе дадзеныя)"
 
 msgid "There are no selected objects to update."
-msgstr "Няма выбраных аб'ектаў для абнаўлення"
+msgstr "Няма выбраных аб’ектаў для абнаўлення"
 
 msgid "Selection empty"
 msgstr "Нічога не выбрана"
 
 msgid "Upload data"
-msgstr "Запампаваць на сервер"
+msgstr "Адаслаць на сервер"
 
 msgid "Upload all changes in the active data layer to the OSM server"
-msgstr "Запампаваць на OSM сервер усе змены на бягучым слаі"
+msgstr "Адаслаць на OSM сервер усе змены на бягучым слаі"
 
 msgid ""
 "<html>The data to be uploaded participates in unresolved conflicts of layer "
@@ -1641,6 +1718,10 @@ msgid ""
 "require you subsequently have to revert your changes, or force other "
 "contributors to.<br /><br />Are you sure you want to continue?"
 msgstr ""
+"Вы збіраецеся перадаць на сервер дадзеныя пласта ''{0}''.<br /><br "
+"/>Адпраўка дадзеных гэтага пласта <b>настойліва не рэкамендуецца</b>. Калі "
+"вы працягнеце,<br />то пасля можа запатрабавацца адкат вашых змен, ці змен "
+"іншых удзельнікаў.<br /><br />Вы ўпэўнены ў сваіх дзеяннях?"
 
 msgid "Ignore this hint and upload anyway"
 msgstr "Ігнараваць гэта і перадаць"
@@ -1653,25 +1734,25 @@ msgstr ""
 "Няма дадзеных для запампоўкі на сервер. Спачатку трэба штосці спампаваць."
 
 msgid "Upload note changes to server"
-msgstr ""
+msgstr "Адаслаць змены ў нататках на сервер"
 
 msgid "Upload notes"
-msgstr ""
+msgstr "Адаслаць нататкі"
 
 msgid "Uploading notes to server"
-msgstr ""
+msgstr "Адаслаць нататкі на сервер"
 
 msgid "Upload selection"
-msgstr "Запампаваць выбранае"
+msgstr "Адаслаць выбранае"
 
 msgid "Upload all changes in the current selection to the OSM server."
-msgstr "Перадаць на сервер OSM ўсе змены ў вылучаным."
+msgstr "Адаслаць на сервер OSM усе змены ў вылучаным."
 
 msgid "Checking parents for deleted objects"
-msgstr "Праверка бацькоў для выдаленых аб'ектаў"
+msgstr "Праверка бацькоў для выдаленых аб’ектаў"
 
 msgid "Reading parents of ''{0}''"
-msgstr "Чытанне бацькоў для'' {0}''"
+msgstr "Чытанне бацькоў для ''{0}''"
 
 msgid "Checking for deleted parents in the local dataset"
 msgstr "Праверка на выдаленых бацькоў у лакальным наборы дадзеных"
@@ -1680,7 +1761,7 @@ msgid "Validation"
 msgstr "Праверка"
 
 msgid "Performs the data validation"
-msgstr "Правесьці праверку дадзеных"
+msgstr "Правесці праверку дадзеных"
 
 msgid "Validating"
 msgstr "Праверка"
@@ -1718,7 +1799,7 @@ msgid "Zoom In (Keypad)"
 msgstr "Павялічыць маштаб (лічбавая клавіятура)"
 
 msgid "Zoom Out"
-msgstr "Зьменшыць"
+msgstr "Зменшыць"
 
 msgid "Zoom Out (Keypad)"
 msgstr "Паменmшыць маштаб (лічбавая клавіятура)"
@@ -1727,7 +1808,7 @@ msgid "Zoom to"
 msgstr "Маштабаваць да"
 
 msgid "Zoom to the object the first selected member refers to"
-msgstr "Маштабаванне набліжае да першага абранага аб'екту"
+msgstr "Маштабаванне набліжае да першага абранага аб’екту"
 
 msgid "Zooming disabled because layer of this relation is not active"
 msgstr "Маштабаванне адменена, таму што пласт гэтай адносіны не актыўны"
@@ -1815,63 +1896,65 @@ msgid "Markers from {0}"
 msgstr "Маркеры з {0}"
 
 msgid "Download OSM Notes"
-msgstr ""
+msgstr "Запампаваць нататкі OSM"
 
 msgid "Downloading Notes"
-msgstr ""
+msgstr "Загрузка нататак"
 
 msgid "Notes"
-msgstr ""
+msgstr "Нататкі"
 
 msgid "{0} note has been downloaded."
 msgid_plural "{0} notes have been downloaded."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} нататка запампавана."
+msgstr[1] "{0} нататкі запампаваны."
+msgstr[2] "{0} нататак запампавана."
 
 msgid ""
 "Since the download limit was {0}, there might be more notes to download."
 msgstr ""
+"Паколькі ліміт загрузкі быў {0}, могуць быць яшчэ нататкі для спампоўкі."
 
 msgid ""
 "Request a smaller area to make sure that all notes are being downloaded."
-msgstr ""
+msgstr "Запытаеце меншую вобласць, каб напэўна спампаваць усе нататкі."
 
 msgid "More notes to download"
-msgstr ""
+msgstr "Яшчэ нататкі для спампоўкі"
 
 msgid "Download OSM Notes within Bounds"
-msgstr ""
+msgstr "Запампаваць нататкі OSM у вылучанай вобласці"
 
 msgid "Download OSM Note by ID"
-msgstr ""
+msgstr "Запампаваць нататку OSM па ідэнтыфікатары"
 
 msgid "Download Compressed OSM Change"
-msgstr ""
+msgstr "Запампаваць сціснутыя OSM змены"
 
 msgid "Download OSM Change"
-msgstr ""
+msgstr "Запампаваць змены дадзеных OSM"
 
 msgid "Download Compressed OSM"
-msgstr ""
+msgstr "Запампаваць сціснутыя OSM дадзеныя"
 
 msgid "Download OSM object by ID"
-msgstr ""
+msgstr "Спампаваць аб’ект OSM па ID"
 
 msgid "Download OSM"
-msgstr ""
+msgstr "Запампаваць OSM"
 
 msgid "Downloading data"
-msgstr "Запампоўку дадзеных"
+msgstr "Спампоўка дадзеных"
 
 msgid ""
 "Ignoring exception because download has been canceled. Exception was: {0}"
-msgstr "Ігнараванне памылкі, так як загрузка была адменена. Памылка: {0}"
+msgstr "Ігнараванне памылкі, бо загрузка была адменена. Памылка: {0}"
 
 msgid "No data found in this area."
 msgstr "У гэтым месцы няма дадзеных."
 
 msgid "OSM Server URL:"
-msgstr "URL-адрас сервера OSM:"
+msgstr "URL сервера OSM:"
 
 msgid "Command"
 msgstr "Каманда"
@@ -1880,13 +1963,13 @@ msgid "Request details: {0}"
 msgstr "Параметры запыту: {0}"
 
 msgid "Download OSM URL"
-msgstr ""
+msgstr "Запампаваць дадзеныя OSM (URL)"
 
 msgid "There was {0} conflict during import."
 msgid_plural "There were {0} conflicts during import."
 msgstr[0] "Адбыўся {0} канфлікт падчас імпарту."
-msgstr[1] "Произошло {0} конфликта во время импорта."
-msgstr[2] "Адбылося {0} канфліктаў падчас імпарту"
+msgstr[1] "Адбылося {0} канфлікту падчас імпарту."
+msgstr[2] "Адбылося {0} канфліктаў падчас імпарту."
 
 msgid "Conflict during download"
 msgid_plural "Conflicts during download"
@@ -1895,16 +1978,16 @@ msgstr[1] "Канфлікта падчас запампоўкі з сервер
 msgstr[2] "Канфліктаў падчас запампоўкі з сервера"
 
 msgid "({0}/{1}) Loading parents of node {2}"
-msgstr "({0} / {1}) Загрузка бацькоў пункту {2}"
+msgstr "({0}/{1}) Загрузка бацькоў кропкі {2}"
 
 msgid "({0}/{1}) Loading parents of way {2}"
-msgstr "({0} / {1}) Загрузка бацькоў лініі {2}"
+msgstr "({0}/{1}) Загрузка бацькоў лініі {2}"
 
 msgid "({0}/{1}) Loading parents of relation {2}"
 msgstr "({0} / {1}) Загрузка бацькоў адносіны {2}"
 
 msgid "Download session"
-msgstr ""
+msgstr "Загрузіць сеанс"
 
 msgid "Download {0} of {1} ({2} left)"
 msgstr "Запампоўку {0} з {1} ({2} засталося)"
@@ -1919,7 +2002,7 @@ msgid ""
 "Click to check whether objects in your local dataset are deleted on the "
 "server"
 msgstr ""
-"Націсніце, каб праверыць, ці не выдалены на серверы аб'екты, якія "
+"Націсніце, каб праверыць, ці не выдалены на серверы аб’екты, якія "
 "знаходзяцца ў вашай базе дадзеных"
 
 msgid "Ignore"
@@ -1937,15 +2020,15 @@ msgid_plural ""
 "server.<br>If you later try to delete or update them the server is likely to "
 "report a conflict."
 msgstr[0] ""
-"У вашым лакальным наборы дадзеных {0} аб'ект, які мог быць выдалены на "
+"У вашым лакальным наборы дадзеных {0} аб’ект, які мог быць выдалены на "
 "серверы. <br> Калі пазней вы паспрабуеце выдаліць або абнавіць яго, сервер, "
 "верагодна, паведаміць пра канфлікт."
 msgstr[1] ""
-"У вашым лакальным наборы дадзеных {0} аб'екта, якія маглі быць выдаленыя на "
+"У вашым лакальным наборы дадзеных {0} аб’екта, якія маглі быць выдаленыя на "
 "серверы. <br> Калі пазней вы паспрабуеце выдаліць або абнавіць іх, сервер, "
 "верагодна, паведаміць пра канфлікт."
 msgstr[2] ""
-"У вашым лакальным наборы дадзеных {0} аб'ектаў, якія маглі быць выдаленыя на "
+"У вашым лакальным наборы дадзеных {0} аб’ектаў, якія маглі быць выдаленыя на "
 "серверы. <br> Калі пазней вы паспрабуеце выдаліць або абнавіць іх, сервер, "
 "верагодна, паведаміць пра канфлікт."
 
@@ -1954,17 +2037,17 @@ msgid ""
 msgid_plural ""
 "Click <strong>{0}</strong> to check the state of these objects on the server."
 msgstr[0] ""
-"Націсніце <strong> {0} </ STRONG>, каб праверыць стан аб'екта на серверы."
+"Націсніце <strong> {0} </ STRONG>, каб праверыць стан аб’екта на серверы."
 msgstr[1] ""
-"Націсніце <strong> {0} </ STRONG>, каб праверыць стан аб'ектаў на серверы."
+"Націсніце <strong> {0} </ STRONG>, каб праверыць стан аб’ектаў на серверы."
 msgstr[2] ""
-"Націсніце <strong> {0} </ STRONG>, каб праверыць стан аб'ектаў на серверы."
+"Націсніце <strong> {0} </ STRONG>, каб праверыць стан аб’ектаў на серверы."
 
 msgid "Click <strong>{0}</strong> to ignore.</html>"
-msgstr "Націсніце <strong> {0} </ STRONG>, каб праігнараваць. </ Html>"
+msgstr "Націсніце <strong>{0}</strong>, каб праігнараваць.</html>"
 
 msgid "Deleted or moved objects"
-msgstr "Выдаленыя або перамешчаныя аб'екты"
+msgstr "Выдаленыя або перамешчаныя аб’екты"
 
 msgid "The following errors occurred during mass download: {0}"
 msgstr "Падчас масавай запампоўкі адбыліся наступныя памылкі: {0}"
@@ -1976,25 +2059,25 @@ msgid "Error during download"
 msgstr "Памылка падчас запампоўкі з сервера"
 
 msgid "Add a new Note"
-msgstr ""
+msgstr "Дадаць нататку"
 
 msgid "Add note mode"
-msgstr ""
+msgstr "Рэжым стварэння нататак"
 
 msgid "Click the location where you wish to create a new note"
-msgstr ""
+msgstr "Пстрыкніце там, дзе жадаеце стварыць нататку"
 
 msgid "Create new note"
-msgstr ""
+msgstr "Стварыць нататку"
 
 msgid "Create note"
-msgstr ""
+msgstr "Стварыць нататку"
 
 msgid "Enter a detailed comment to create a note"
-msgstr ""
+msgstr "Увядзіце падрабязны каментар для стварэння нататкі"
 
 msgid "You must enter a comment to create a new note"
-msgstr ""
+msgstr "Неабходна ўвесці каментар для стварэння нататкі"
 
 msgid "Delete Mode"
 msgstr "Рэжым выдалення"
@@ -2002,7 +2085,7 @@ msgstr "Рэжым выдалення"
 msgid "Delete nodes or ways."
 msgstr ""
 "Выдаліць вылучаныя кропкі і лініі (Увага! Пры націску на гэтую кнопку, "
-"вылучаныя аб'екты будзе выдалены без дыялогу)."
+"вылучаныя аб’екты будзе выдалены без дыялогу)."
 
 msgid "Mode: {0}"
 msgstr "Рэжым: {0}"
@@ -2013,7 +2096,7 @@ msgid ""
 msgstr ""
 "Клікніце для выдалення. Shift: выдаліць сегмент. Alt: не выдаляць "
 "невыкарыстоўваемыя кропкі пры выдаленні лініі. Ctrl: выдаліць спасылаючыя "
-"аб'екты."
+"аб’екты."
 
 msgid "Draw"
 msgstr "Маляваць"
@@ -2034,7 +2117,7 @@ msgid "Cannot add a node outside of the world."
 msgstr "Кропка не можа быць дададзеная за межамі свету."
 
 msgid "Add node"
-msgstr "Дадаць ноду"
+msgstr "Дадаць кропку"
 
 msgid "Add node into way"
 msgstr "Уставіць кропку ў лінію"
@@ -2056,9 +2139,9 @@ msgstr "Вылучыць кропку пад курсорам."
 
 msgid "Insert new node into way."
 msgid_plural "Insert new node into {0} ways."
-msgstr[0] "Ўставіць новую кропку у {0} лінію."
-msgstr[1] "Ўставіць новую кропку у {0} лініі."
-msgstr[2] "Ўставіць новую кропку у {0} ліній."
+msgstr[0] "Уставіць новую кропку ў {0} лінію"
+msgstr[1] "Уставіць новую кропку ў {0} лініі"
+msgstr[2] "Уставіць новую кропку ў {0} ліній"
 
 msgid "Start new way from last node."
 msgstr "Пачаць новую лінію з апошняй кропкі."
@@ -2067,20 +2150,11 @@ msgid "Continue way from last node."
 msgstr "Працягнуць лінію з апошняй кропкі."
 
 msgid "Angle snapping active."
-msgstr "Ўключаная прывязка да кутоў."
+msgstr "Уключана прывязка да кутоў."
 
 msgid "Finish drawing."
 msgstr "Скончана вычэрчванне."
 
-msgid "FIX"
-msgstr "Фікс."
-
-msgid "draw angle snap"
-msgstr "Прывязка да кутоў"
-
-msgid "draw angle snap highlight"
-msgstr "Прывязка да кутоў: падсьветка"
-
 msgid "Toggle snapping by {0}"
 msgstr "Пераключэнне прывязкі {0}"
 
@@ -2088,7 +2162,7 @@ msgid "Show helper geometry"
 msgstr "Паказваць дапаможную лінію"
 
 msgid "Snap to node projections"
-msgstr "Прывязка да праекцыі кропак"
+msgstr "Прывязка да праекцый кропак"
 
 msgid "Disable"
 msgstr "Адключыць"
@@ -2102,6 +2176,15 @@ msgstr "0,45,90,…"
 msgid "0,30,45,60,90,..."
 msgstr "0,30,45,60,90,…"
 
+msgid "FIX"
+msgstr "Фікс."
+
+msgid "draw angle snap"
+msgstr "Прывязка да кутоў"
+
+msgid "draw angle snap highlight"
+msgstr "Прывязка да кутоў: падсвятленне"
+
 msgid "Angle snapping"
 msgstr "Прывязка да кутоў"
 
@@ -2109,10 +2192,10 @@ msgid "Switch angle snapping mode while drawing"
 msgstr "Пераключэнне рэжыму прывязкі да кутоў падчас чарчэння"
 
 msgid "Dual alignment"
-msgstr ""
+msgstr "Падвойнае выраўноўванне"
 
 msgid "Switch dual alignment mode while extruding"
-msgstr ""
+msgstr "Перамыкае рэжым двайнога выраўноўвання пры выцісканні"
 
 msgid "Extrude"
 msgstr "Выціснуць"
@@ -2121,19 +2204,22 @@ msgid "Create areas"
 msgstr "Стварэнне вобласці"
 
 msgid "Extrude Dual alignment"
-msgstr ""
+msgstr "Падвойнае выраўноўванне пры выцісканьні"
 
 msgid ""
 "Drag a way segment to make a rectangle. Ctrl-drag to move a segment along "
 "its normal, Alt-drag to create a new rectangle, double click to add a new "
 "node."
 msgstr ""
+"Цягнуць сегмент лініі - стварыць прастакутнік. Цягнуць з Ctrl - перамясціць "
+"сегмент уздоўж яго нармалі. Цягнуць з Alt - стварыць новы прастакутнік. "
+"Двойчы пстрыкнуць - дадаць новую кропку."
 
 msgid "Dual alignment active."
-msgstr ""
+msgstr "Падвойнае выраўноўванне ўключана."
 
 msgid "Segment collapsed due to its direction reversing."
-msgstr ""
+msgstr "Сегмент спляснуўся з-за змены яго кірунку."
 
 msgid "Move a segment along its normal, then release the mouse button."
 msgstr ""
@@ -2142,33 +2228,34 @@ msgstr ""
 msgid ""
 "Move the node along one of the segments, then release the mouse button."
 msgstr ""
+"Перамясціце кропку ўздоўж аднаго з сегментаў, затым адпусціце кнопку мышы."
 
 msgid "Draw a rectangle of the desired size, then release the mouse button."
-msgstr ""
+msgstr "Намалюйце прастакутнік жаданых памераў, і адпусціце кнопку мышы."
 
 msgid "Extrude: main line"
-msgstr ""
+msgstr "Выцісканне: асноўная лінія"
 
 msgid "Extrude: helper line"
-msgstr ""
+msgstr "Выцісканне: дапаможная лінія"
 
 msgid "Extrude Way"
-msgstr ""
+msgstr "Выціснуць лінію"
 
 msgid "Improve Way Accuracy"
-msgstr ""
+msgstr "Паляпшэнне дакладнасці лініі"
 
 msgid "Improve Way Accuracy mode"
 msgstr "Рэжым паляпшэння дакладнасці лініі"
 
 msgid "improve way accuracy helper line"
-msgstr ""
+msgstr "дапаможная лінія рэжыму паляпшэння дакладнасці ліній"
 
 msgid "Click on the way to start improving its shape."
 msgstr "Націсніце на лінію, каб пачаць паляпшаць яе форму."
 
 msgid "Select a way that you want to make more accurate."
-msgstr "Вылучыце лінію, якую вы хочаце зрабіць больш дакладнай."
+msgstr "Вылучыце лінію, якую вы жадаеце зрабіць больш дакладнай."
 
 msgid ""
 "Click to add a new node. Release Ctrl to move existing nodes or hold Alt to "
@@ -2192,27 +2279,28 @@ msgstr ""
 "дадання новых кропак ці Alt для выдалення."
 
 msgid "Cannot place a node outside of the world."
-msgstr "Не ўдаецца змясціць кропку за межамі свету"
+msgstr "Не атрымоўваецца змясціць кропку за межамі свету"
 
 msgid "Add a new node to way"
 msgid_plural "Add a new node to {0} ways"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Дадаць новую кропку да {0} лініі"
+msgstr[1] "Дадаць новую кропку да {0} ліній"
+msgstr[2] "Дадаць новую кропку да {0} ліній"
 
 msgid "Cannot delete node that is referenced by multiple objects"
-msgstr "Немагчыма выдаліць кропку, што ўваходзіць у некалькі аб'ектаў"
+msgstr "Немагчыма выдаліць кропку, што ўваходзіць у некалькі аб’ектаў"
 
 msgid "Cannot delete node that has tags"
 msgstr "Нельга выдаліць кропку, якая мае тэгі"
 
 msgid "Parallel"
-msgstr "Паралель"
+msgstr "Паралельна"
 
 msgid "Make parallel copies of ways"
 msgstr "Ствараць паралельныя копіі ліній"
 
 msgid "make parallel helper line"
-msgstr ""
+msgstr "дапаможная лінія стварэння паралельных ліній"
 
 msgid ""
 "Select ways as in Select mode. Drag selected ways or a single way to create "
@@ -2231,9 +2319,6 @@ msgstr ""
 "Капіяванне паралельна:\n"
 "Абраныя лініі павінны мець простую форму без адгалінаванняў"
 
-msgid "Make parallel way error"
-msgstr "Памылка стварэння паралельнай лініі"
-
 msgid "Drag play head"
 msgstr "Перацягнуць галоўку гуказдымальніка"
 
@@ -2246,7 +2331,7 @@ msgstr ""
 "гэтай кропцы"
 
 msgid "Select, move, scale and rotate objects"
-msgstr "Выдзяляць, перамяшчаць, маштабаваць і круціць аб'екты"
+msgstr "Выдзяляць, перамяшчаць, маштабаваць і круціць аб’екты"
 
 msgid "Move elements"
 msgstr "Перамясціць элементы?"
@@ -2266,13 +2351,23 @@ msgid_plural ""
 "an error.\n"
 "Really move them?"
 msgstr[0] ""
+"Вы перамясцілі больш {0} элемента. Перасоўванне вялікай колькасці элементаў "
+"часта адбываецца па памылцы.\n"
+"Сапраўды перамясціць іх?"
 msgstr[1] ""
+"Вы перамясцілі больш {0} элементаў. Перасоўванне вялікай колькасці элементаў "
+"часта адбываецца па памылцы.\n"
+"Сапраўды перамясціць іх?"
+msgstr[2] ""
+"Вы перамясцілі больш {0} элементаў. Перасоўванне вялікай колькасці элементаў "
+"часта адбываецца па памылцы.\n"
+"Сапраўды перамясціць іх?"
 
 msgid "Release the mouse button to select the objects in the rectangle."
-msgstr "Адпусціце кнопку мышы, каб вылучыць аб'екты ў прамавугольніку."
+msgstr "Адпусціце кнопку мышы, каб вылучыць аб’екты ў прамавугольніку."
 
 msgid "Ctrl to merge with nearest node."
-msgstr "Ctrl для аб'яднання з бліжэйшай кропкай."
+msgstr "Ctrl для аб’яднання з бліжэйшай кропкай."
 
 msgid "Release the mouse button to stop moving."
 msgstr "Адпусціце кнопку мышы, каб спыніць перамяшчэнне."
@@ -2287,9 +2382,9 @@ msgid ""
 "Move objects by dragging; Shift to add to selection (Ctrl to toggle); Shift-"
 "Ctrl to rotate selected; Alt-Ctrl to scale selected; or change selection"
 msgstr ""
-"Перамяшчэнне аб'ектаў перацягваннем; Націсніце Shift для дадання да ўжо "
-"вылучаных аб'ектах (Ctrl для пераключэння); Shift-Ctrl - для кручэння "
-"вылучаных аб'ектаў; Alt-Ctrl - для змены маштабу вылучаных аб'ектаў; або для "
+"Перамяшчэнне аб’ектаў перацягваннем; Націсніце Shift для дадання да ўжо "
+"вылучаных аб’ектах (Ctrl для пераключэння); Shift-Ctrl - для кручэння "
+"вылучаных аб’ектаў; Alt-Ctrl - для змены маштабу вылучаных аб’ектаў; або для "
 "змены вылучэння"
 
 msgid "Add and move a virtual new node to way"
@@ -2314,7 +2409,7 @@ msgstr ""
 
 msgid "Add all objects selected in the current dataset after the last member"
 msgstr ""
-"Дадаць усе аб'екты, вылучаныя ў гэтым наборы, пасля апошняга ўдзельніка"
+"Дадаць усе аб’екты, вылучаныя ў гэтым наборы, пасля апошняга ўдзельніка"
 
 msgid "Add selection to relation"
 msgstr "Дадаць вылучэнне да стаўлення"
@@ -2326,7 +2421,7 @@ msgstr[1] "Дадаць вылучанае да {0} адносін"
 msgstr[2] "Дадаць вылучанае да {0} адносін"
 
 msgid "Delete the selected relation"
-msgstr "Выдаліць абраную адносіну"
+msgstr "Выдаліць абраныя адносіны"
 
 msgid "Download all members of the selected relations"
 msgstr "Спампаваць з сервера ўсіх удзельнікаў вылучаных адносін"
@@ -2344,7 +2439,7 @@ msgid "Create a copy of this relation and open it in another editor window"
 msgstr "Стварыць копію гэтай адносіны і адкрыць яе ў іншым акне рэдактара"
 
 msgid "Edit"
-msgstr "Змяніць"
+msgstr "Праўка"
 
 msgid "Call relation editor for selected relation"
 msgstr "Запусціць рэдактар ​​адносін для вылучанай адносіны"
@@ -2356,16 +2451,22 @@ msgid_plural ""
 "You are about to open <b>{0}</b> different relation editors "
 "simultaneously.<br/>Do you want to continue?"
 msgstr[0] ""
+"Вы збіраецеся адкрыць <b>{0}</b> рэдактар адносін адначасова.<br/>Працягнуць?"
 msgstr[1] ""
+"Вы збіраецеся адкрыць <b>{0}</b> рэдактара адносін "
+"адначасова.<br/>Працягнуць?"
+msgstr[2] ""
+"Вы збіраецеся адкрыць <b>{0}</b> рэдактараў адносін "
+"адначасова.<br/>Працягнуць?"
 
 msgid "Confirmation"
-msgstr ""
+msgstr "Пацверджанне"
 
 msgid "Select in relation list"
 msgstr "Абраць у спісе адносін"
 
 msgid "Select relation in relation list."
-msgstr "Выбраць адносіну ў спісе адносін."
+msgstr "Выбраць адносіны ў спісе адносін."
 
 msgid "Add the members of all selected relations to current selection"
 msgstr "Дадаць ўдзельнікаў усіх выбраных адносін да бягучага вылучэння"
@@ -2386,10 +2487,10 @@ msgid "Set the current selection to the list of selected relations"
 msgstr "Устанавіць бягучы выбар на спісе вылучаных адносін"
 
 msgid "Select relation (add)"
-msgstr "Абраць адносіну (дадаць)"
+msgstr "Абраць адносіны (дадаць)"
 
 msgid "Select relation"
-msgstr "Абраць адносіну"
+msgstr "Абраць адносіны"
 
 msgid "<not>"
 msgstr "<not>"
@@ -2425,7 +2526,7 @@ msgid "Search..."
 msgstr "Шукаць..."
 
 msgid "Search for objects."
-msgstr "Пошук аб'ектаў"
+msgstr "Пошук аб’ектаў"
 
 msgid "{0}: "
 msgstr "{0}: "
@@ -2455,14 +2556,20 @@ msgid "case sensitive"
 msgstr "улічваць рэгістр"
 
 msgid "all objects"
-msgstr "ўсе аб'екты"
+msgstr "ўсе аб’екты"
 
 msgid "Also include incomplete and deleted objects in search."
-msgstr "Уключыць у пошук няскончаныя і выдаленыя аб'екты"
+msgstr "Уключыць у пошук няскончаныя і выдаленыя аб’екты"
+
+msgid "standard"
+msgstr "стандарт"
 
 msgid "regular expression"
 msgstr "рэгулярны выраз"
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr "дадаць кнопку на панэлі інструмэнтаў"
 
@@ -2491,297 +2598,328 @@ msgid "Invalid search expression"
 msgstr "Няправільны выраз для пошуку"
 
 msgid "basic examples"
-msgstr ""
+msgstr "простыя прыклады"
 
 msgid "Baker Street"
-msgstr ""
+msgstr "Baker Street"
 
 msgid "''Baker'' and ''Street'' in any key"
-msgstr ""
+msgstr "''Baker'' і ''Street'' у любым ключы"
 
 msgid "\"Baker Street\""
-msgstr ""
+msgstr "\"Baker Street\""
 
 msgid "''Baker Street'' in any key"
-msgstr ""
+msgstr "''Baker Street''  у любым ключы"
 
 msgid "basics"
-msgstr ""
+msgstr "асноўнае"
 
 msgid "''valuefragment'' anywhere in ''key''"
-msgstr ""
+msgstr "фрагмент ''valuefragment'' у значэнні тэга ''key''"
 
 msgid "''valuefragment'' nowhere in ''key''"
-msgstr ""
+msgstr "няма фрагмента ''valuefragment'' у значэнні тэга ''key''"
 
 msgid "''key'' with exactly ''value''"
-msgstr ""
+msgstr "тэг ''key'' са значэннем ''value''"
 
 msgid "''key'' with any value"
-msgstr ""
+msgstr "ёсць тэг ''key''"
 
 msgid "''value'' in any key"
-msgstr ""
+msgstr "ёсць значэнне ''value'' у любога тэга"
 
 msgid "matches if ''key'' exists"
-msgstr ""
+msgstr "тэг ''key'' існуе"
 
 msgid "matches if ''key'' is greater than ''value'' (analogously, less than)"
 msgstr ""
+"адпавядае, калі ''key'' больш, чым ''value'' (аналагічна для знака \"<\")"
 
 msgid ""
 "to quote operators.<br>Within quoted strings the <b>\"</b> and <b>\\</b> "
 "characters need to be escaped by a preceding <b>\\</b> (e.g. <b>\\\"</b> and "
 "<b>\\\\</b>)."
 msgstr ""
+"Цытаванне аператараў.<br>Радкі ў двукоссі <b>\"</b> і сімвал <b>\\</b> "
+"неабходна экраніровать даданнем <b>\\</b> (напрыклад <b>\\\"</b> і <b>\\\\"
+"</b>)."
 
 msgid "combinators"
-msgstr ""
+msgstr "камбінатары"
 
 msgid "logical and (both expressions have to be satisfied)"
-msgstr ""
+msgstr "лагічнае І (абедзве ўмовы павінны быць выкананы)"
 
 msgid "logical or (at least one expression has to be satisfied)"
-msgstr ""
+msgstr "лагічнае ЦІ (прынамсі адна ўмова выконваецца)"
 
 msgid "logical not"
-msgstr ""
+msgstr "лагічнае НЕ"
 
 msgid "use parenthesis to group expressions"
-msgstr ""
+msgstr "выкарыстоўвайце круглыя дужкі для групоўкі выразаў"
 
 msgid "objects"
-msgstr ""
+msgstr "аб’екты"
 
 msgid "all ways"
-msgstr ""
+msgstr "усе лініі"
 
 msgid "all relations"
-msgstr ""
+msgstr "усе адносіны"
 
 msgid "all closed ways"
-msgstr ""
+msgstr "усе замкнёныя лініі"
 
 msgid "object without useful tags"
-msgstr ""
+msgstr "аб’ект без значных тэгаў"
 
 msgid "metadata"
-msgstr ""
+msgstr "метададзеныя"
 
 msgid "objects changed by user"
-msgstr ""
+msgstr "аб’екты, змененыя карыстальнікам"
 
 msgid "objects with given ID"
-msgstr ""
+msgstr "аб’екты з зададзеным ID"
 
 msgid "objects with given version"
-msgstr ""
+msgstr "аб’екты з указанай версіяй"
 
 msgid "objects with given changeset ID"
-msgstr ""
+msgstr "аб’екты з указаным ID пакета правак"
 
 msgid "objects with last modification timestamp within range"
-msgstr ""
+msgstr "аб’екты з часам апошняй змены ў дыяпазоне"
 
 msgid "properties"
-msgstr ""
+msgstr "уласцівасці"
 
 msgid ""
 "ways with at least 20 nodes, or relations containing at least 20 nodes"
 msgstr ""
+"лініі прынамсі з 20 кропак ці адносіны, якія змяшчаюць не меней 20 кропак"
 
 msgid ""
 "nodes with at least 3 referring ways, or relations containing at least 3 ways"
 msgstr ""
+"кропкі, якія ўваходзяць у 3 ці больш лініі, ці адносіны, што змяшчаюць не "
+"меней 3 ліній"
 
 msgid "objects having 5 to 10 tags"
-msgstr ""
+msgstr "аб’екты, якія маюць ад 5 да 10 тэгаў"
 
 msgid "objects with given role in a relation"
-msgstr ""
+msgstr "аб’екты з указанай роляй у адносінах"
 
 msgid "closed ways with an area of 100 m²"
-msgstr ""
+msgstr "замкнёныя лініі плошчай 100 м²"
 
 msgid "ways with a length of 200 m or more"
-msgstr ""
+msgstr "лініі, даўжынёй 200 м і больш"
 
 msgid "state"
-msgstr ""
+msgstr "стан"
 
 msgid "all modified objects"
-msgstr ""
+msgstr "усе змененыя аб’екты"
 
 msgid "all new objects"
-msgstr ""
+msgstr "усе новыя аб’екты"
 
 msgid "all selected objects"
-msgstr ""
+msgstr "усе абраныя аб’екты"
 
 msgid "all incomplete objects"
-msgstr ""
+msgstr "усе няпоўныя аб’екты"
 
 msgid "related objects"
-msgstr ""
+msgstr "злучаныя аб’екты"
 
 msgid "all children of objects matching the expression"
-msgstr ""
+msgstr "усе даччыныя аб’екты адпаведныя выразу"
 
 msgid "all parents of objects matching the expression"
-msgstr ""
+msgstr "усе бацькоўскія аб’екты адпаведныя выразу"
 
 msgid "n-th member of relation and/or n-th node of way"
-msgstr ""
+msgstr "n-ы ўдзельнік адносін і/або n-ая кропка лініі"
 
 msgid "every n-th member of relation and/or every n-th node of way"
-msgstr ""
+msgstr "кожны n-ы ўдзельнік адносін і/або кожная n-ая кропка лініі"
 
 msgid "view"
-msgstr ""
+msgstr "прагляд"
 
 msgid "objects in current view"
-msgstr ""
+msgstr "аб’екты ў бягучым полі бачнасці"
 
 msgid "objects (and all its way nodes / relation members) in current view"
 msgstr ""
+"аб’екты (і ўсе ўваходныя ў іх кропкі/ўдзельнікі адносін) у бягучым поле "
+"бачнасці"
 
 msgid "objects in downloaded area"
-msgstr ""
+msgstr "аб’екты ў запампаванай вобласці"
 
 msgid "objects (and all its way nodes / relation members) in downloaded area"
-msgstr ""
+msgstr "аб’екты (і ўсе іх кропкі/ўдзельнікі адносін) у запампаванай вобласці"
 
 msgid "No match found for ''{0}''"
-msgstr ""
+msgstr "Не знойдзена супадзенняў для ''{0}''"
 
 msgid "Nothing added to selection by searching for ''{0}''"
-msgstr ""
+msgstr "Нічога не дададзена да вылучэння ў выніку пошуку ''{0}''"
 
 msgid "Nothing removed from selection by searching for ''{0}''"
-msgstr ""
+msgstr "Нічога не выдалена з вылучэння ў выніку пошуку ''{0}''"
 
 msgid "Nothing found in selection by searching for ''{0}''"
-msgstr ""
+msgstr "Нічога не знойдзена ў вылучаным, пры пошуку ''{0}''"
 
 msgid "Found {0} matches"
-msgstr ""
+msgstr "Знойдзена {0} супадзенняў"
 
 msgctxt "search"
 msgid "CS"
-msgstr ""
+msgstr "CS"
 
 msgctxt "search"
 msgid "CI"
-msgstr ""
+msgstr "CI"
 
 msgctxt "search"
 msgid "RX"
-msgstr ""
+msgstr "RX"
+
+msgctxt "search"
+msgid "CSS"
+msgstr "CSS"
 
 msgctxt "search"
 msgid "A"
-msgstr ""
+msgstr "A"
 
 msgid ""
 "The regex \"{0}\" had a parse error at offset {1}, full error:\n"
 "\n"
 "{2}"
 msgstr ""
+"Памылка ў рэгулярным выразе \"{0}\" на пазіцыі {1}, поўны тэкст памылкі:\n"
+"\n"
+"{2}"
 
 msgid ""
 "The regex \"{0}\" had a parse error, full error:\n"
 "\n"
 "{1}"
 msgstr ""
+"Памылка сінтаксічнага разбору рэгулярнага выраза \"{0}\":\n"
+"{1}"
 
 msgid "Expecting <i>min</i>/<i>max</i> after ''timestamp''"
-msgstr ""
+msgstr "Чакаецца <i>min</i>/<i>max</i> пасля ''штампа часу''"
 
 msgid "Range of primitive ids expected"
-msgstr ""
+msgstr "Чакаецца дыяпазон ID аб’ектаў"
 
 msgid "Range of changeset ids expected"
-msgstr ""
+msgstr "Чакаецца дыяпазон ID пакетаў правак"
 
 msgid "Range of versions expected"
-msgstr ""
+msgstr "Чакаецца дыяпазон версій"
 
 msgid "Key cannot be empty when tag operator is used. Sample use: key=value"
 msgstr ""
+"Ключ не можа быць пустым пры выкарыстанні тэга аператара. Прыклад "
+"выкарыстання: ключ=значэнне"
 
 msgid "Unknown primitive type: {0}. Allowed values are node, way or relation"
 msgstr ""
+"Невядомы тып элемента: {0}. Дазволеныя значэнні: кропка, лінія або адносіны"
 
 msgid "Positive integer expected"
-msgstr ""
+msgstr "Чакаўся дадатны цэлы лік"
 
 msgid "Range of numbers expected"
-msgstr ""
+msgstr "Чакалася паслядоўнасць лікаў"
 
 msgid "Unexpected token. Expected {0}, found {1}"
+msgstr "Нечаканы маркер. Чакалася {0}, знойдзена {1}"
+
+msgid "Failed to parse MapCSS selector"
 msgstr ""
 
 msgid "Unexpected token: {0}"
-msgstr ""
+msgstr "Нечаканая лексема: {0}"
 
 msgid "Missing parameter for OR"
-msgstr ""
+msgstr "Прапушчаны параметр для OR"
 
 msgid "Missing parameter for XOR"
-msgstr ""
+msgstr "Адсутнічаюць параметры для XOR"
 
 msgid "Missing operator for NOT"
-msgstr ""
+msgstr "Прапушчаны аператар для NOT"
 
 msgid "Automatically truncating value of tag ''{0}'' on deleted object {1}"
-msgstr ""
+msgstr "Аўтаматычна адкідаць значэнне тэга ''{0}'' на выдаленым аб’екце {1}"
 
 msgid ""
 "Length of value for tag ''{0}'' on object {1} exceeds the max. allowed "
 "length {2}. Values length is {3}."
 msgstr ""
+"Даўжыня значэння тэга ''{0}'' на аб’екце {1} перавышае макс. дазволеную "
+"даўжыню {2}. Даўжыня значэння {3}."
 
 msgid "Precondition Violation"
-msgstr ""
+msgstr "Парушэнне прадумовы"
 
 msgid "{0} nodes in way {1} exceed the max. allowed number of nodes {2}"
 msgstr ""
+"кропак у лініі {1}: {0} шт. Гэта перавышае максімальна дапушчальную "
+"колькасць кропак {2}"
 
 msgid "API Capabilities Violation"
-msgstr ""
+msgstr "Парушэнне магчымасцяў API"
 
 msgid "Cyclic dependency between relations:"
-msgstr ""
+msgstr "Цыклічныя залежнасці паміж адносінамі:"
 
 msgid "Removed obsolete tags"
-msgstr ""
+msgstr "Выдалены састарэлыя тэгі"
 
 msgid "Fix deprecated tags"
-msgstr ""
+msgstr "Выправіць састарэлыя тэгі"
 
 msgid ""
 "<html>{0} relations build a cycle because they refer to each other.<br>JOSM "
 "cannot upload them. Please edit the relations and remove the cyclic "
 "dependency.</html>"
 msgstr ""
+"<html>{0} адносіны стварылі цыкл, бо яны высылаюцца адзін на аднаго.<br>JOSM "
+"не можа перадаць іх на сервер. Калі ласка, адрэдагуйце адносіны, выдаліўшы "
+"цыклічныя спасылкі.</html>"
 
 msgid "Relation ..."
-msgstr ""
+msgstr "Адносіны ..."
 
 msgid "... refers to relation"
-msgstr ""
+msgstr "... спасылаецца на адносіны"
 
 msgid "Cycling dependencies"
-msgstr ""
+msgstr "Цыклічныя залежнасці"
 
 msgid "Uploading modified notes"
-msgstr ""
+msgstr "Адаслаць змененыя нататкі"
 
 msgid "Note {0} failed: {1}"
-msgstr ""
+msgstr "Збой пры перадачы нататкі {0}: {1}"
 
 msgid "Notes failed to upload"
-msgstr ""
+msgstr "Не атрымалася перадаць нататкі"
 
 msgid ""
 "The following are results of automatic validation. Try fixing these, but be "
@@ -2789,157 +2927,180 @@ msgid ""
 "cancel this dialog, you can find the entries in the validator side panel to "
 "inspect them."
 msgstr ""
+"Ніжэй прыведзены вынікі аўтаматычнай праверкі. Паспрабуйце гэтыя "
+"выпраўленні, але будзьце асцярожныя (не знішчыце правільныя дадзеныя). Калі "
+"вы сумняваецеся - праігнаруйце іх.<br>Пасля закрыцця гэтага дыялогавага "
+"акна, вы можаце знайсці запісы праверкі на бакавой панэлі для ўдакладнення "
+"іх стану."
 
 msgid "Errors"
-msgstr ""
+msgstr "Памылкі"
 
 msgid "Usually this should be fixed."
-msgstr ""
+msgstr "Звычайна гэта трэба выправіць."
 
 msgid "Warnings"
-msgstr ""
+msgstr "Папярэджанні"
 
 msgid "Fix these when possible."
-msgstr ""
+msgstr "Выправіце гэта, калі магчыма."
 
 msgid "Other"
-msgstr ""
+msgstr "Іншыя"
 
 msgid "Informational warnings, expect many false entries."
-msgstr ""
+msgstr "Інфармацыйныя папярэджанні, часцяком некарэктныя."
 
 msgid "Suspicious data found. Upload anyway?"
-msgstr ""
+msgstr "Знойдзены падазроныя дадзеныя. Працягнуць перадачу на сервер?"
 
 msgid "Continue upload"
-msgstr ""
+msgstr "Працягнуць перадачу"
 
 msgid "Add node {0}"
-msgstr ""
+msgstr "Дадаць кропку {0}"
 
 msgid "Add way {0}"
-msgstr ""
+msgstr "Дадаць лінію {0}"
 
 msgid "Add relation {0}"
-msgstr ""
+msgstr "Дадаць адносіны {0}"
 
 msgid "Added {0} object"
 msgid_plural "Added {0} objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Дададзены {0} аб’ект"
+msgstr[1] "Дададзена {0} аб’екта"
+msgstr[2] "Дададзена {0} аб’ектаў"
 
 msgid "New way {0} has 0 nodes"
-msgstr ""
+msgstr "Новая лінія {0} утрымоўвае 0 кропак"
 
 msgid "Change node {0}"
-msgstr ""
+msgstr "Змяніць кропку {0}"
 
 msgid "Change way {0}"
-msgstr ""
+msgstr "Змяніць лінію {0}"
 
 msgid "Change relation {0}"
-msgstr ""
+msgstr "Змяніць адносіны {0}"
 
 msgid "Changed nodes of {0}"
-msgstr ""
+msgstr "Змененыя кропкі для {0}"
 
 msgid "Remove \"{0}\" for node ''{1}''"
-msgstr ""
+msgstr "Выдаліць \"{0}\" для кропкі ''{1}''"
 
 msgid "Remove \"{0}\" for way ''{1}''"
-msgstr ""
+msgstr "Выдаліць \"{0}\" для лініі ''{1}''"
 
 msgid "Remove \"{0}\" for relation ''{1}''"
-msgstr ""
+msgstr "Выдаліць \"{0}\" для адносін ''{1}''"
 
 msgid "Set {0}={1} for node ''{2}''"
-msgstr ""
+msgstr "Задаць {0}={1} для кропкі ''{2}''"
 
 msgid "Set {0}={1} for way ''{2}''"
-msgstr ""
+msgstr "Задаць {0}={1} для лініі ''{2}''"
 
 msgid "Set {0}={1} for relation ''{2}''"
-msgstr ""
+msgstr "Усталяваць {0}={1} для адносін ''{2}''"
 
 msgid "Remove \"{0}\" for {1} object"
 msgid_plural "Remove \"{0}\" for {1} objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Выдаліць \"{0}\" у {1} аб`екта"
+msgstr[1] "Выдаліць \"{0}\" у {1} аб`ектаў"
+msgstr[2] "Выдаліць \"{0}\" у {1} аб`ектаў"
 
 msgid "Set {0}={1} for {2} object"
 msgid_plural "Set {0}={1} for {2} objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Усталяваць {0} = {1} для {2} аб’екта"
+msgstr[1] "Усталяваць {0} = {1} для {2} аб’ектаў"
+msgstr[2] "Усталяваць {0} = {1} для {2} аб’ектаў"
 
 msgid "Deleted {0} tags for {1} object"
 msgid_plural "Deleted {0} tags for {1} objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Выдалена {0} тэгаў у {1} аб’екта"
+msgstr[1] "Выдалена {0} тэгаў у {1} аб’ектаў"
+msgstr[2] "Выдалена {0} тэгаў у {1} аб’ектаў"
 
 msgid "Set {0} tags for {1} object"
 msgid_plural "Set {0} tags for {1} objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Усталяваць {0} тэгаў для {1} аб’екта"
+msgstr[1] "Усталяваць {0} тэгаў для {1} аб’ектаў"
+msgstr[2] "Усталяваць {0} тэгаў для {1} аб’ектаў"
 
 msgid "Replace \"{0}\" by \"{1}\" for"
-msgstr ""
+msgstr "Замяніць \"{0}\" на \"{1}\" для"
 
 msgid "object"
 msgid_plural "objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "аб’ект"
+msgstr[1] "аб’екта"
+msgstr[2] "аб’ектаў"
 
 msgid "Change relation member role for {0} {1}"
-msgstr ""
+msgstr "Змяніць ролю ўдзельніка адносін для {0} {1}"
 
 msgid "At least one object to delete required, got empty collection"
 msgstr ""
+"DeleteCommand: Каб выдаліць, патрабуецца хоць бы адзін аб’ект, а атрымана "
+"пустая калекцыя"
 
 msgid "Delete node {0}"
-msgstr ""
+msgstr "Выдаліць кропку {0}"
 
 msgid "Delete way {0}"
-msgstr ""
+msgstr "Выдаліць лінію {0}"
 
 msgid "Delete relation {0}"
-msgstr ""
+msgstr "Выдаліць адносіны {0}"
 
 msgid "Delete {0} object"
 msgid_plural "Delete {0} objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Выдаліць {0} аб’ект"
+msgstr[1] "Выдаліць {0} аб’екта"
+msgstr[2] "Выдаліць {0} аб’ектаў"
 
 msgid "Delete {0} node"
 msgid_plural "Delete {0} nodes"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Выдаліць {0} кропку"
+msgstr[1] "Выдаліць {0} кропкі"
+msgstr[2] "Выдаліць {0} кропак"
 
 msgid "Delete {0} way"
 msgid_plural "Delete {0} ways"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Выдаліць {0} лінію"
+msgstr[1] "Выдаліць {0} лініі"
+msgstr[2] "Выдаліць {0} ліній"
 
 msgid "Delete {0} relation"
 msgid_plural "Delete {0} relations"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Выдаліць {0} адносіны"
+msgstr[1] "Выдаліць {0} адносін"
+msgstr[2] "Выдаліць {0} адносін"
 
 msgid "Deleted ''{0}''"
-msgstr ""
+msgstr "Выдалена {0}"
 
 msgid "Delete confirmation"
-msgstr ""
+msgstr "Выдаліць пацверджанне"
 
 msgid ""
 "You are about to delete nodes outside of the area you have "
 "downloaded.<br>This can cause problems because other objects (that you do "
 "not see) might use them.<br>Do you really want to delete?"
 msgstr ""
+"Вы збіраецеся выдаліць кропкі, змешчаныя за межамі запампаванай "
+"зоны.<br>Гэта можа выклікаць праблемы, таму што іншыя аб’екты (якіх не "
+"відаць) могуць выкарыстоўваць іх.<br> Вы сапраўды жадаеце выдаліць гэтыя "
+"кропкі?"
 
 msgid ""
 "You are about to delete incomplete objects.<br>This will cause problems "
 "because you don''t see the real object.<br>Do you really want to delete?"
 msgstr ""
+"Вы збіраецеся выдаліць няпоўныя аб’екты. <br> Гэта можа прывесці да праблем, "
+"бо вы не бачыце рэальнага аб’екта.<br>Вы сапраўды жадаеце выдаліць?"
 
 msgid ""
 "You are about to delete {0} relation: {1}<br/>This step is rarely necessary "
@@ -2950,120 +3111,143 @@ msgid_plural ""
 "and cannot be undone easily after being uploaded to the server.<br/>Do you "
 "really want to delete?"
 msgstr[0] ""
+"Вы хочаце выдаліць {0} адносіны: {1}<br/>Патрэба ў гэтым узнікае вельмі "
+"рэдка і адмяніць выдаленне пасля загрузкі дадзеных на сервер можа быць не "
+"лёгка. <br/> Вы сапраўды жадаеце выдаліць адносіны?"
 msgstr[1] ""
+"Вы хочаце выдаліць {0} адносін: {1}<br/>Патрэба ў гэтым узнікае вельмі рэдка "
+"і адмяніць выдаленне пасля загрузкі дадзеных на сервер можа быць не лёгка. "
+"<br/> Вы сапраўды жадаеце выдаліць адносіны?"
+msgstr[2] ""
+"Вы хочаце выдаліць {0} адносін: {1}<br/>Патрэба ў гэтым узнікае вельмі рэдка "
+"і адмяніць выдаленне пасля загрузкі дадзеных на сервер можа быць не лёгка. "
+"<br/> Вы сапраўды жадаеце выдаліць адносіны?"
 
 msgid "Delete relation?"
-msgstr ""
+msgstr "Выдаліць адносіны?"
 
 msgid "Move {0} node"
 msgid_plural "Move {0} nodes"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Перамясціць {0} кропку"
+msgstr[1] "Перамясціць {0} кропкі"
+msgstr[2] "Перамясціць {0} кропак"
 
 msgid "Purged {0} object"
 msgid_plural "Purged {0} objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Вычышчаны {0} аб’ект"
+msgstr[1] "Вычышчана {0} аб’екта"
+msgstr[2] "Вычышчана {0} аб’ектаў"
 
 msgid "Removed nodes from {0}"
-msgstr ""
+msgstr "Выдалены кропкі з {0}"
 
 msgid "Rotate {0} node"
 msgid_plural "Rotate {0} nodes"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Павярнуць {0} кропку"
+msgstr[1] "Павярнуць {0} кропкі"
+msgstr[2] "Павярнуць {0} кропак"
 
 msgid "Scale {0} node"
 msgid_plural "Scale {0} nodes"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Маштабаваць {0} кропку"
+msgstr[1] "Маштабаваць {0} кропкі"
+msgstr[2] "Маштабаваць {0} кропак"
 
 msgid "Selected {0} object"
 msgid_plural "Selected {0} objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Вылучаны {0} аб’ект"
+msgstr[1] "Вылучаны {0} аб’екта"
+msgstr[2] "Вылучаны {0} аб’ектаў"
 
 msgid "Sequence: {0}"
-msgstr ""
+msgstr "Паслядоўнасць: {0}"
 
 msgid "Transform {0} node"
 msgid_plural "Transform {0} nodes"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Трансфармаваць {0} кропку"
+msgstr[1] "Трансфармаваць {0} кропкі"
+msgstr[2] "Трансфармаваць {0} кропак"
 
 msgid ""
 "<html>Layer ''{0}'' already has a conflict for object<br>''{1}''.<br>This "
 "conflict cannot be added.</html>"
 msgstr ""
+"<html>Пласт ''{0}'' ужо мае канфлікт для аб’екта<br>''{1}''.<br>Гэты "
+"канфлікт не можа быць дададзены.</html>"
 
 msgid "Double conflict"
-msgstr ""
+msgstr "Падвойны канфлікт"
 
 msgid ""
 "Layer ''{0}'' does not exist any more. Cannot remove conflict for object "
 "''{1}''."
 msgstr ""
+"Пласт ''{0}'' больш не існуе. Немагчыма выдаліць канфлікт для аб’екта "
+"''{1}''."
 
 msgid "Add conflict for ''{0}''"
-msgstr ""
+msgstr "Дадаць канфлікт для элемента ''{0}''"
 
 msgid ""
 "Cannot undo command ''{0}'' because layer ''{1}'' is not present any more"
-msgstr ""
+msgstr "Немагчыма адмяніць каманду ''{0}'' бо адсутнічае пласт ''{1}''"
 
 msgid "Resolve conflicts in coordinates in {0}"
-msgstr ""
+msgstr "Уладзіць канфлікт у каардынатах у {0}"
 
 msgid "Cannot resolve undecided conflict."
-msgstr ""
+msgstr "Немагчыма ўладзіць канфлікт"
 
 msgid "Resolve conflicts in deleted state in {0}"
-msgstr ""
+msgstr "Вырашыць канфлікт у выдаленым стане ў {0}"
 
 msgid "Set the ''modified'' flag for node {0}"
-msgstr ""
+msgstr "Усталяваць сцяг ''modified'' для кропкі {0}"
 
 msgid "Set the ''modified'' flag for way {0}"
-msgstr ""
+msgstr "Усталяваць сцяг ''modified'' для лініі {0}"
 
 msgid "Set the ''modified'' flag for relation {0}"
-msgstr ""
+msgstr "Усталяваць сцяг ''modified'' для адносін {0}"
 
 msgid "Resolve conflicts in member list of relation {0}"
-msgstr ""
+msgstr "Уладзіць канфлікты ў спісе ўдзельнікаў адносін {0}"
 
 msgid "Resolve {0} tag conflict in node {1}"
 msgid_plural "Resolve {0} tag conflicts in node {1}"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Вырашыць {0} канфлікт тэгаў ў кропцы {1}"
+msgstr[1] "Вырашыць {0} канфлікта тэгаў ў кропцы {1}"
+msgstr[2] "Вырашыць {0} канфліктаў тэгаў ў кропцы {1}"
 
 msgid "Resolve {0} tag conflict in way {1}"
 msgid_plural "Resolve {0} tag conflicts in way {1}"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Вырашыць {0} канфлікт тэгаў ў лініі {1}"
+msgstr[1] "Вырашыць {0} канфлікта тэгаў ў лініі {1}"
+msgstr[2] "Вырашыць {0} канфліктаў тэгаў ў лініі {1}"
 
 msgid "Resolve {0} tag conflict in relation {1}"
 msgid_plural "Resolve {0} tag conflicts in relation {1}"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Вырашыць {0} канфлікт тэгаў у адносінах {1}"
+msgstr[1] "Вырашыць {0} канфлікта тэгаў у адносінах {1}"
+msgstr[2] "Вырашыць {0} канфліктаў тэгаў у адносінах {1}"
 
 msgid "Resolve version conflict for node {0}"
-msgstr ""
+msgstr "Уладзіць канфлікт версіі для кропкі {0}"
 
 msgid "Resolve version conflict for way {0}"
-msgstr ""
+msgstr "Уладзіць канфлікт версіі для лініі {0}"
 
 msgid "Resolve version conflict for relation {0}"
-msgstr ""
+msgstr "Уладзіць канфлікт версіі для адносін {0}"
 
 msgid "Resolve conflicts in node list of way {0}"
-msgstr ""
+msgstr "Уладзіць канфлікты ў спісе кропак лініі {0}"
 
 msgid "Main dataset does not include node {0}"
-msgstr ""
+msgstr "Асноўны набор дадзеных не ўтрымоўвае кропку {0}"
 
 msgid "Apply?"
-msgstr ""
+msgstr "Ужыць?"
 
 msgid ""
 "<html>You are going to reverse the way ''{0}'',<br/> whose semantic meaning "
@@ -3074,1565 +3258,1742 @@ msgid_plural ""
 "of these tags are defined by its direction:<br/>{1}Do you really want to "
 "change the way direction, thus its semantic meaning?</html>"
 msgstr[0] ""
+"<html>Вы збіраецеся змяніць напрамак лініі ''{0}'',<br/> але сэнс тэга "
+"''{1}'' залежыць ад яе напрамка.<br/>Скончыць разварот лініі, тым самым "
+"памяняўшы яе характарыстыкі?</html>"
 msgstr[1] ""
+"<html>Вы збіраецеся змяніць напрамак лініі ''{0}'',<br/> але сэнс гэтых "
+"тэгаў залежыць ад яе напрамка.<br/>{1} Скончыць разварот лініі, тым самым "
+"памяняўшы яе характарыстыкі?</html>"
+msgstr[2] ""
+"<html>Вы збіраецеся змяніць напрамак лініі ''{0}'',<br/> але сэнс гэтых "
+"тэгаў залежыць ад яе напрамка.<br/>{1} Скончыць разварот лініі, тым самым "
+"памяняўшы яе характарыстыкі?</html>"
 
 msgid "Reverse directional way."
-msgstr ""
+msgstr "Перавярнуць накіраваную лінію"
 
 msgid ""
 "When reversing this way, the following changes are suggested in order to "
 "maintain data consistency."
 msgstr ""
+"Пры змене напрамка лініі прапануюцца наступныя змены для забеспячэння "
+"ўзгодненасці дадзеных."
 
 msgid "Relation"
-msgstr ""
+msgstr "Адносіны"
 
 msgid "Old role"
-msgstr ""
+msgstr "Старая роля"
 
 msgid "New role"
-msgstr ""
+msgstr "Новая роля"
 
 msgid "Old key"
-msgstr ""
+msgstr "Стары ключ"
 
 msgid "Old value"
-msgstr ""
+msgstr "Старое значэнне"
 
 msgid "New key"
-msgstr ""
+msgstr "Новы ключ"
 
 msgid "New value"
-msgstr ""
+msgstr "Новае значэнне"
 
 msgid "Apply selected changes"
-msgstr ""
+msgstr "Ужыць абраныя змены"
 
 msgid "Do not apply changes"
-msgstr ""
+msgstr "Не ўжываць змены"
 
 msgid "Please select which changes you want to apply."
-msgstr ""
+msgstr "Абярыце змены, якія вы жадаеце ўжыць."
 
 msgid "Tags of "
-msgstr ""
+msgstr "Тэгі "
 
 msgid "Roles in relations referring to"
-msgstr ""
+msgstr "Ролі ў адносінах, якія адносяцца да"
 
 msgid "Automatic tag correction"
-msgstr ""
+msgstr "Аўтаматычна выпраўляць тэгі"
 
 msgid "Unable to create directory {0}, autosave will be disabled"
-msgstr ""
+msgstr "Немагчыма стварыць каталог {0}! Аўтазахаванне будзе адключана"
 
 msgid "Unable to create file {0}, other filename will be used"
-msgstr ""
+msgstr "Немагчыма стварыць файл {0}, будзе скарыстана іншае імя файла"
 
 msgid "IOError while creating file, autosave will be skipped: {0}"
 msgstr ""
+"Памылка ўводу-вываду пры стварэнні файла. Аўтазахаванне прапушчана: {0}"
 
 msgid "Unable to delete old backup file {0}"
-msgstr ""
+msgstr "Немагчыма выдаліць стары бэкап файл {0}"
 
 msgid "Your work has been saved automatically."
-msgstr ""
+msgstr "Вынікі вашай працы былі захаваны аўтаматычна."
 
 msgid "Restoring files"
-msgstr ""
+msgstr "Аднаўленне файлаў"
 
 msgid "Illegal latitude value ''{0}''"
-msgstr ""
+msgstr "Няправільнае значэнне шыраты ''{0}''"
 
 msgid "Illegal longitude value ''{0}''"
-msgstr ""
+msgstr "Няправільнае значэнне даўгаты ''{0}''"
 
 msgid "Question"
-msgstr ""
+msgstr "Пытанне"
 
 msgid "Message"
-msgstr ""
+msgstr "Паведамленне"
 
 msgid "Enter text"
-msgstr ""
+msgstr "Увядзіце тэкст"
 
 msgid "Installing plugins"
-msgstr ""
+msgstr "Усталёўка модуляў"
 
 msgid ""
 "<html>Settings file asks to append preferences to <b>{0}</b>,<br/> but its "
 "default value is unknown at this moment.<br/> Please activate corresponding "
 "function manually and retry importing."
 msgstr ""
+"<html>Файл налад спрабуе дадаць параметры ў <b>{0}</b>,<br/> але яго "
+"значэнне па змаўчанні ў дадзены момант невядома.<br/>Калі ласка, актывуйце "
+"адпаведную функцыю ўручную і паўтарыце імпарт."
 
 msgid "Failed to create missing cache directory: {0}"
-msgstr ""
+msgstr "Не атрымалася стварыць адсутны каталог кэша: {0}"
 
 msgid "<html>Failed to create missing cache directory: {0}</html>"
-msgstr ""
+msgstr "<html>Немагчыма стварыць каталог для часовых дадзеных: {0}</html>"
+
+msgid "Unable to delete temporary file {0}"
+msgstr "Не атрымалася выдаліць часовы файл {0}"
+
+msgid "Unable to set file non-readable {0}"
+msgstr "Не атрымалася зрабіць файл недаступным для чытання {0}"
+
+msgid "Unable to set file non-writable {0}"
+msgstr "Не атрымалася зрабіць файл недаступным для запісу {0}"
+
+msgid "Unable to set file non-executable {0}"
+msgstr "Не ўдалося зрабіць файл непрызначаным для выканання {0}"
+
+msgid "Unable to set file readable {0}"
+msgstr "Не атрымалася зрабіць файл даступным для чытання {0}"
+
+msgid "Unable to set file writable {0}"
+msgstr "Не атрымалася зрабіць файл даступным для запісу {0}"
 
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
 msgstr ""
+"Не атрымалася ініцыялізаваць налады. Каталог налад ''{0}'' не з’яўляецца "
+"каталогам."
 
 msgid ""
 "<html>Failed to initialize preferences.<br>Preference directory ''{0}'' is "
 "not a directory.</html>"
 msgstr ""
+"<html>Памылка ініцыялізацыі налад.<br>Каталог налад ''{0}'' не з’яўляецца "
+"каталогам.</html>"
 
 msgid ""
 "Failed to initialize preferences. Failed to create missing preference "
 "directory: {0}"
 msgstr ""
+"Не атрымалася ініцыялізаваць налады. Не атрымалася стварыць адсутны каталог "
+"налад: {0}"
 
 msgid ""
 "<html>Failed to initialize preferences.<br>Failed to create missing "
 "preference directory: {0}</html>"
 msgstr ""
+"<html>Памылка ініцыялізацыі налад.<br>Не атрымоўваецца стварыць адсутны "
+"каталог налад: {0}</html>"
 
 msgid "Missing preference file ''{0}''. Creating a default preference file."
-msgstr ""
+msgstr "Адсутнічае файл налад ''{0}''. Стварэнне файла налад па змаўчанні."
 
 msgid ""
 "Replacing existing preference file ''{0}'' with default preference file."
-msgstr ""
+msgstr "Замена існага файла налад ''{0}'' файлам налад па змаўчанні."
 
 msgid ""
 "<html>Failed to initialize preferences.<br>Failed to reset preference file "
 "to default: {0}</html>"
 msgstr ""
+"<html>Памылка ініцыялізацыі налад.<br>Не атрымалася скінуць файл налад да "
+"стану па змаўчанні: {0}</html>"
 
 msgid ""
 "<html>Preferences file had errors.<br> Making backup of old one to "
 "<br>{0}<br> and creating a new default preference file.</html>"
 msgstr ""
+"<html>Файл налад утрымоўвае памылкі.<br> Гэты файл будзе пераназваны ў "
+"рэзервовы<br>{0}<br> а новы будзе створаны з наладамі па змаўчанні.</html>"
 
 msgid ""
 "Failed to initialize preferences. Failed to reset preference file to "
 "default: {0}"
 msgstr ""
+"Не атрымалася ініцыялізаваць налады. Не атрымалася выканаць скід да файла "
+"налад па змаўчанні: {0}"
 
 msgid "Paint style {0}: {1}"
-msgstr ""
+msgstr "Стыль малявання {0}:{1}"
 
 msgid "Layer: {0}"
-msgstr "Слой: {0}"
+msgstr "Пласт: {0}"
 
 msgid "Failed to persist preferences to ''{0}''"
-msgstr ""
+msgstr "Не атрымалася захаваць налады ў ''{0}''"
 
 msgid ""
 "Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
 "startup)."
 msgstr ""
+"Спрабаваць выкарыстоўваць сетку IPv6, аддаючы перавагу IPv6 замест IPv4 "
+"(працуе толькі напачатку запуску)."
 
 msgid " (at line {0}, column {1})"
-msgstr ""
+msgstr " (у радку {0}, слупок {1})"
 
 msgid "Preference setting {0} has been removed since it is no longer used."
-msgstr ""
+msgstr "Налада {0}  была выдалена, бо яна больш не выкарыстоўваецца."
 
 msgid "Metric"
-msgstr ""
+msgstr "Метрычная сістэма"
 
 msgid "Chinese"
-msgstr ""
+msgstr "Кітайскі"
 
 msgid "Imperial"
-msgstr ""
+msgstr "Ангельская сістэма мер"
 
 msgid "Nautical Mile"
-msgstr ""
+msgstr "Марская міля"
 
 msgid "Failed to load resource ''{0}'', error is {1}."
-msgstr ""
+msgstr "Збой загрузкі рэсурсу ''{0}'', памылка {1}."
 
 msgid "UNKNOWN"
-msgstr ""
+msgstr "НЕВЯДОМА"
 
 msgid "Unexpected JOSM version number in revision file, value is ''{0}''"
 msgstr ""
+"Неспадзяваны нумар версіі JOSM у файле рэвізій, значэнне роўна ''{0}''"
 
 msgid "The revision file ''/REVISION'' is missing."
-msgstr ""
+msgstr "Файл рэвізій ''/REVISION'' адсутнічае."
 
 msgid "Already registered a conflict for primitive ''{0}''."
-msgstr ""
+msgstr "Канфлікт ужо зарэгістраваны для элемента ''{0}''"
 
 msgid "Decimal Degrees"
-msgstr ""
+msgstr "Дзесятковыя градусы"
 
 msgid "deg° min'' sec\""
-msgstr ""
+msgstr "град° мін'' сек\""
 
 msgid "deg° min'' (Nautical)"
-msgstr ""
+msgstr "град° мін'' (марскі фармат)"
 
 msgid "Projected Coordinates"
-msgstr ""
+msgstr "Прагназуемыя Каардынаты"
 
 msgctxt "compass"
 msgid "S"
-msgstr ""
+msgstr "Пд"
 
 msgctxt "compass"
 msgid "N"
-msgstr ""
+msgstr "Пн"
 
 msgctxt "compass"
 msgid "W"
-msgstr ""
+msgstr "З"
 
 msgctxt "compass"
 msgid "E"
+msgstr "У"
+
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr ""
+"Праекцыя ''{0}'' не знойдзена, закладка ''{1}'' непрыдатная да выкарыстання"
+
+msgid "HTTP error {0} when loading tiles"
+msgstr "Памылка HTTP {0} пры спампоўцы квадратаў"
 
-msgid "Not in cache"
+msgid "Error downloading tiles: {0}"
+msgstr "Памылка загрузкі квадратаў: {0}"
+
+msgid "Could not load image from tile server"
+msgstr "Не атрымалася сцягнуць выяву з сервера"
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
 msgstr ""
+"{0} - не дапушчальны аргумент WMS. Праверце URL гэтага сервера: \n"
+"{1}"
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Select WMTS layer"
+msgstr "Выбраць пласт WMTS"
+
+msgid "Layer name"
+msgstr "Назва пласта"
+
+msgid "Projection"
+msgstr "Праекцыя"
+
+msgid "Matrix set identifier"
+msgstr "Ідэнтыфікатар набору матрыц"
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr "Не вызначана ні аднаго пласта праз getCapabilities дакмент: {0}"
+
+msgid "No layer selected"
+msgstr "Пласт не абраны"
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
+"Падтрымліваюцца толькі квадратныя тайлы. Сервер вярнуў {0}x{1} для "
+"ідэнтыфікатара {2} TileMatrix"
 
 msgid "ID > 0 expected. Got {0}."
-msgstr ""
+msgstr "выяўлена id > 0. Атрымана {0}"
 
 msgid "Version > 0 expected. Got {0}."
-msgstr ""
+msgstr "выяўлена версія > 0. Атрымана {0}"
 
 msgid ""
 "Cannot assign a changesetId > 0 to a new primitive. Value of changesetId is "
 "{0}"
 msgstr ""
+"Немагчыма прызначыць changesetId > 0 на новы элемент. Значэнне changesetId - "
+"{0}"
 
 msgid "A primitive with ID = 0 cannot be invisible."
-msgstr ""
+msgstr "Элемент з id=0 не можа быць нябачным"
 
 msgid ""
 "Unable to add primitive {0} to the dataset because it is already included"
 msgstr ""
+"Немагчыма дадаць элемент {0} да набору дадзеных, бо ён ужо прысутнічае"
 
 msgid ""
 "JOSM expected to find primitive [{0} {1}] in dataset but it is not there. "
 "Please report this at {2}. This is not a critical error, it should be safe "
 "to continue in your work."
 msgstr ""
+"JOSM спадзяваўся знайсці прымітыў [{0} {1}] ў наборы дадзеных, але яго там "
+"няма. Калі ласка, паведаміце пра гэта на {2}. Гэта не крытычная памылка, яна "
+"не стане вам перашкодай у вашай працы."
 
 msgid "Missing merge target for way with id {0}"
-msgstr ""
+msgstr "Адсутнічае вынік аб’яднання для лініі з id {0}"
 
 msgid ""
 "Object of type {0} with id {1} was marked to be deleted, but it''s missing "
 "in the source dataset"
 msgstr ""
+"Аб’ект тыпу {0} з id {1} быў пазначаны для выдалення, але адсутнічае ў "
+"зыходным наборы дадзеных."
 
 msgid "Missing merge target for node with id {0}"
-msgstr ""
+msgstr "Адсутнічае вынік аб’яднання для кропкі з id {0}"
 
 msgid "Missing merge target for relation with id {0}"
-msgstr ""
+msgstr "Адсутнічае вынік аб’яднання для адносін з id {0}"
 
 msgid "Missing merge target of type {0} with id {1}"
-msgstr ""
+msgstr "Адсутнічае вынік аб’яднання тыпу {0} з id {1}"
 
 msgid "Conflict in ''visible'' attribute for object of type {0} with id {1}"
-msgstr ""
+msgstr "Канфлікт у атрыбуце ''visible'' аб’екта {0} з id {1}"
 
 msgid "Merging data..."
-msgstr ""
+msgstr "Аб’яднанне дадзеных..."
 
 msgid "Test ''{0}'' completed in {1}"
-msgstr ""
+msgstr "Тэст ''{0}'' завершаны за {1}"
 
 msgid "Cannot add a way with only {0} nodes."
-msgstr ""
+msgstr "Немагчыма дадаць лінію ў якой толькі {0} кропка."
 
 msgid "Each node must connect exactly 2 ways"
-msgstr ""
+msgstr "КОЖНАЯ кропка павінна злучаць роўна дзве лініі"
 
 msgid "There is an intersection between ways."
-msgstr ""
+msgstr "Існуе скрыжаванне паміж лініямі."
 
 msgid ""
 "Cannot merge because either of the participating primitives is new and the "
 "other is not"
-msgstr ""
+msgstr "Немагчыма аб’яднаць, таму што частка элементаў новыя, а частка не"
 
 msgid ""
 "Cannot merge primitives with different ids. This id is {0}, the other is {1}"
-msgstr ""
+msgstr "Зліццё элементаў з рознымі id немагчыма. Гэты id: {0}, іншы ж: {1}"
 
 msgid "node"
 msgid_plural "nodes"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "кропка"
+msgstr[1] "кропкі"
+msgstr[2] "кропак"
 
 msgid "way"
 msgid_plural "ways"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "лінія"
+msgstr[1] "лініі"
+msgstr[2] "ліній"
 
 msgid "relation"
 msgid_plural "relations"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "адносіны"
+msgstr[1] "адносін"
+msgstr[2] "адносін"
 
 msgid "closedway"
-msgstr ""
+msgstr "замкнёная лінія"
 
 msgid "multipolygon"
-msgstr ""
+msgstr "мультыпалігон"
 
 msgid ""
 "Tag collection cannot be applied to a primitive because there are keys with "
 "multiple values."
 msgstr ""
+"Набор тэгаў не можа быць ужыты да элемента з-за наяўнасці ключоў з "
+"некалькімі значэннямі."
 
 msgid "<anonymous>"
-msgstr ""
+msgstr "<ананімны>"
 
 msgid "Cannot add node {0} to incomplete way {1}."
-msgstr ""
+msgstr "немагчыма дадаць кропку {0} да незавершанай лініі {1}"
 
 msgid "Nodes in way must be in the same dataset"
-msgstr ""
+msgstr "Кропкі лініі павінны быць у тым жа наборы дадзеных"
 
 msgid "Deleted node referenced by {0}"
-msgstr ""
+msgstr "На выдаленую кропку спасылаецца {0}"
 
 msgid "Complete node {0} with null coordinates in way {1}"
-msgstr ""
+msgstr "Выправіце кропку {0} з пустымі каардынатамі ў лініі {1}"
 
 msgid ""
 "Cannot compare primitive with ID ''{0}'' to primitive with ID ''{1}''."
-msgstr ""
+msgstr "Немагчыма параўнаць элемент з  ID ''{0}'' і элемент з ID ''{1}''."
 
 msgid "Parameter {0} not in range 0..{1}. Got ''{2}''."
-msgstr ""
+msgstr "параметр {0} не ў інтэрвале 0..{1}, бягучае значэнне {2}"
 
 msgid "Failed to load map renderer class ''{0}''. The class wasn''t found."
 msgstr ""
+"Не атрымалася загрузіць клас адмалёўшчыка карты ''{0}''. Клас не знойдзены."
 
 msgid ""
 "Can''t activate map renderer class ''{0}'', because the class wasn''t found."
-msgstr ""
+msgstr "Немагчыма актываваць рэндар ''{0}'', таму што клас не знойдзены."
 
 msgid "Activating the standard map renderer instead."
-msgstr ""
+msgstr "Актывацыя стандартнага рэндара карты"
 
 msgid ""
 "Can''t activate map renderer class ''{0}'', because it isn''t a subclass of "
 "''{1}''."
 msgstr ""
+"Немагчыма актываваць рэндэр ''{0}'', таму што ён не з’яўляецца падкласам "
+"''{1}''."
 
 msgid ""
 "Can''t activate map renderer class ''{0}'', because it isn''t registered as "
 "map renderer."
 msgstr ""
+"Немагчыма актываваць рэндэр ''{0}'', таму што ён не з''яўляецца "
+"зарэгістраваным рэндэрам."
 
 msgid "Wireframe Map Renderer"
-msgstr ""
+msgstr "\"Драцяны\" рэндар"
 
 msgid "Renders the map as simple wire frame."
-msgstr ""
+msgstr "Спрошчаны рэндэр. Адлюстроўвае толькі межы аб’ектаў."
 
 msgid "Styled Map Renderer"
-msgstr ""
+msgstr "Стылізаваны рэндар"
 
 msgid "Renders the map using style rules in a set of style sheets."
-msgstr ""
+msgstr "Рэндар, які выкарыстоўвае правілы з табліц стыляў"
 
 msgid "inactive"
-msgstr ""
+msgstr "неактыўны"
 
 msgid "selected"
-msgstr ""
+msgstr "вылучана"
 
 msgid "Relation: selected"
-msgstr ""
+msgstr "Адносіны: вылучаныя"
 
 msgid "Node: standard"
-msgstr ""
+msgstr "Кропка: стандартная"
 
 msgid "Node: connection"
-msgstr ""
+msgstr "Кропка: злучэнне"
 
 msgid "Node: tagged"
-msgstr ""
+msgstr "Кропка: тэгаваная"
 
 msgid "untagged way"
-msgstr ""
+msgstr "лінія без тэгаў"
 
 msgid "background"
-msgstr ""
+msgstr "фон"
 
 msgid "highlight"
-msgstr ""
+msgstr "падсвятленне"
 
 msgid "highlight wireframe"
-msgstr ""
+msgstr "падсвятленне каркаса"
 
 msgid "untagged"
-msgstr ""
+msgstr "без тэгаў"
 
 msgid "text"
-msgstr ""
+msgstr "тэкст"
 
 msgid "areatext"
-msgstr ""
+msgstr "для_тэксту"
+
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr "Праекцыя UTM (''+proj=utm'') патрабуе параметр ''+zone=...''."
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr "Чакаўся цэлы лік у дыяпазоне 1-60 для параметру ''+zone=…''"
 
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
-msgstr ""
+msgstr "Параметр павінен пачынацца са знака «+» (знойдзены: «{0}»)"
 
 msgid "Unknown parameter: ''{0}''."
-msgstr ""
+msgstr "Невядомы параметр: ''{0}''."
 
 msgid "Value expected for parameter ''{0}''."
-msgstr ""
+msgstr "Чакалася значэнне для параметру «{0}»."
 
 msgid "No value expected for parameter ''{0}''."
-msgstr ""
+msgstr "Не чакалася значэнне для параметру «{0}»."
 
 msgid "Unexpected parameter format (''{0}'')"
-msgstr ""
+msgstr "Неспадзяваны фармат параметру («{0}»)"
 
 msgid "Value ''{0}'' for option +init not supported."
-msgstr ""
+msgstr "Значэнне «{0}» для опцыі +init не падтрымліваецца."
 
 msgid ": "
-msgstr ""
+msgstr ": "
 
 msgid "Ellipsoid ''{0}'' not supported."
-msgstr ""
+msgstr "Эліпсоід ''{0}'' не падтрымліваецца."
 
 msgid "Combination of ellipsoid parameters is not supported."
-msgstr ""
+msgstr "Камбінацыя параметраў эліпсоіда не падтрымліваецца"
+
+msgid "Unknown datum identifier: ''{0}''"
+msgstr "Невядомы ідэнтыфікатар датума: ''{0}''"
 
 msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
-msgstr ""
+msgstr "Патрабуецца эліпсоід (+ellps=* ці +a=*, +b=*)"
 
 msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
-msgstr ""
-
-msgid "Unknown datum identifier: ''{0}''"
-msgstr ""
+msgstr "Файл зруху сеткі «{0}» для опцыі +nadgrids не падтрымліваецца."
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
-msgstr ""
+msgstr "Патрабуецца датум (+datum=*, +towgs84=* or +nadgrids=*)"
 
 msgid ""
 "Unexpected number of arguments for parameter ''towgs84'' (must be 3 or 7)"
 msgstr ""
+"Няслушная колькасць аргументаў для параметру «towgs84» (павінна быць 3 ці 7)"
 
 msgid "Unable to parse value of parameter ''towgs84'' (''{0}'')"
-msgstr ""
+msgstr "Немагчыма разабраць значэнне параметру ''towgs84'' (''{0}'')"
 
 msgid "Projection required (+proj=*)"
-msgstr ""
+msgstr "Патрабуецца праекцыя (+proj=*)"
 
 msgid "Unknown projection identifier: ''{0}''"
-msgstr ""
+msgstr "Невядомы ідэнтыфікатар праекцыі: ''{0}''"
 
 msgid "Unexpected number of arguments for parameter ''+bounds'' (must be 4)"
 msgstr ""
+"Неспадзяваная колькасць аргументаў для параметру «+bounds» (павінна быць 4)"
 
 msgid "Unknown parameter ''{0}''"
-msgstr ""
+msgstr "Невядомы параметр ''{0}''"
 
 msgid "Expected number argument for parameter ''{0}''"
-msgstr ""
+msgstr "Чакаўся лікавы аргумент для параметру «{0}»"
 
 msgid "Unable to parse value ''{1}'' of parameter ''{0}'' as number."
-msgstr ""
+msgstr "Немагчыма разабраць значэнне ''{1}'' параметру ''{0}'' як лік."
 
 msgid ""
 "Unable to parse value ''{1}'' of parameter ''{0}'' as coordinate value."
 msgstr ""
+"Немагчыма разабраць значэнне ''{1}'' параметру ''{0}'' як каардынаты."
 
 msgid "Custom Projection"
-msgstr ""
+msgstr "Уласная праекцыя"
 
 msgid "GRS80"
-msgstr ""
+msgstr "GRS80"
 
 msgid "WGS84"
-msgstr ""
+msgstr "WGS84"
 
 msgid "Parameter ''{0}'' required."
-msgstr ""
+msgstr "Патрабуецца параметр «{0}»."
 
 msgid "Lambert Conformal Conic"
-msgstr ""
+msgstr "Раўнакутная канічная праекцыя Ламберта"
 
 msgid "Lat/lon (Geodetic)"
-msgstr ""
+msgstr "Шыр. / даўг. (геадэзічныя)"
 
 msgid "Mercator"
-msgstr ""
+msgstr "Меркатар"
 
 msgid "Swiss Oblique Mercator"
-msgstr ""
+msgstr "Швейцарская праекцыя Меркатара"
 
 msgid "Transverse Mercator"
-msgstr ""
+msgstr "Папярочна-цыліндрычная праекцыя Меркатара"
 
 msgid ""
 "Error initializing test {0}:\n"
 " {1}"
 msgstr ""
+"Памылка пры ініцыялізацыі тэсту {0}:\n"
+"{1}"
 
 msgid "validation error"
-msgstr ""
+msgstr "памылка пры праверцы"
 
 msgid "validation warning"
-msgstr ""
+msgstr "папярэджанне пры праверцы"
 
 msgid "validation other"
-msgstr ""
+msgstr "іншае пры праверцы"
 
 msgid "Running test {0}"
-msgstr ""
+msgstr "Запуск тэста {0}"
 
 msgid "E-mail address contains non-ascii characters"
-msgstr ""
+msgstr "Адрас эл. пошты ўтрымоўвае не-ASCII знакі"
 
 msgid "E-mail address is invalid"
-msgstr ""
+msgstr "Няслушны адрас эл. пошты"
 
 msgid "E-mail address contains an invalid username: {0}"
-msgstr ""
+msgstr "Адрас эл. пошты ўтрымоўвае недапушчальнае імя карыстальніка: {0}"
 
 msgid "E-mail address contains an invalid domain: {0}"
-msgstr ""
+msgstr "Адрас эл. пошты ўтрымоўвае недапушчальны  дамен: {0}"
 
 msgid "URL contains non-ascii characters"
-msgstr ""
+msgstr "URL утрымоўвае не-ASCII знакі"
 
 msgid "URL is invalid"
-msgstr ""
+msgstr "Няслушны URL"
 
 msgid "URL contains an invalid protocol: {0}"
-msgstr ""
+msgstr "URL утрымоўвае недапушчальны пратакол: {0}"
 
 msgid "URL contains an invalid authority: {0}"
-msgstr ""
+msgstr "URL утрымоўвае няслушную частку \"authority\": {0}"
 
 msgid "URL contains an invalid path: {0}"
-msgstr ""
+msgstr "URL утрымоўвае недапушчальны шлях: {0}"
 
 msgid "URL contains an invalid query: {0}"
-msgstr ""
+msgstr "URL утрымоўвае недапушчальны запыт: {0}"
 
 msgid "URL contains an invalid fragment: {0}"
-msgstr ""
+msgstr "URL утрымоўвае недапушчальны фрагмент: {0}"
 
 msgid "Addresses"
-msgstr ""
+msgstr "Адрасы"
 
 msgid "Checks for errors in addresses and associatedStreet relations."
-msgstr ""
+msgstr "Правярае памылкі ў адрасах і адносінах associatedStreet."
 
 msgid "Multiple associatedStreet relations"
-msgstr ""
+msgstr "Некалькі адносін associatedStreet"
 
 msgid "House number without street"
-msgstr ""
+msgstr "Нумар хаты без указання вуліцы"
 
 msgid "House number ''{0}'' duplicated"
-msgstr ""
+msgstr "Дубляваны нумар дома «{0}»"
 
 msgid "Duplicate house numbers"
-msgstr ""
+msgstr "Дубляваць нумары дамоў"
 
 msgid "Multiple street names in relation"
-msgstr ""
+msgstr "Некалькі назваў вуліц у адносінах"
 
 msgid "House number too far from street"
-msgstr ""
+msgstr "Нумар дома занадта далёка ад вуліцы"
 
 msgid "API Capabilities"
-msgstr ""
+msgstr "Магчымасці API"
 
 msgid "Checks for errors against API capabilities"
-msgstr ""
+msgstr "Праверка на памылкі, злучаныя з магчымасцямі API"
 
 msgid ""
 "Way contains more than {0} nodes. It should be replaced by a multipolygon"
 msgstr ""
+"Лінія змяшчае больш за {0} кропак. Яе варта замяніць на мультыпалігон"
 
 msgid "Way contains more than {0} nodes. It should be split or simplified"
-msgstr ""
+msgstr "Лінія ўтрымоўвае больш {0} кропак. Яе варта разбіць ці спрасціць"
 
 msgid "Barriers and entrances"
-msgstr ""
+msgstr "Перашкоды і праходы"
 
 msgid "Checks for errors in barriers and entrances."
-msgstr ""
+msgstr "Праверка памылак у перашкодах і праходах."
 
 msgid "Barrier entrance not set on a barrier"
-msgstr ""
+msgstr "Для перашкоды не пазначаны праход"
 
 msgid "Coastlines"
-msgstr ""
+msgstr "Берагавыя лініі"
 
 msgid "This test checks that coastlines are correct."
-msgstr ""
+msgstr "Гэты тэст правярае правільнасць берагавых ліній."
 
 msgid "Unconnected coastline"
-msgstr ""
+msgstr "Нязлучаная берагавая лінія"
 
 msgid "Unordered coastline"
-msgstr ""
+msgstr "Неўпарадкаваная берагавая лінія"
 
 msgid "Reversed coastline"
-msgstr ""
+msgstr "Зваротная берагавая лінія"
 
 msgid "Conditional Keys"
-msgstr ""
+msgstr "Ключы, якія залежаць ад умоў"
 
 msgid "Tests for the correct usage of ''*:conditional'' tags."
-msgstr ""
+msgstr "Праверка правільнасці выкарыстання тэгаў ''*:conditional''."
 
 msgid "Does not match pattern ''restriction value @ condition''"
-msgstr ""
+msgstr "Не адпавядае шаблону ''абмежавальнае значэнне @ ўмова''"
 
 msgid "{0} is not a valid restriction value"
-msgstr ""
+msgstr "{0} — недапушчальнае абмежавальнае значэнне"
 
 msgid "Wrong syntax in {0} key"
-msgstr ""
+msgstr "Няслушны сінтаксіс у ключы {0}"
 
 msgid "Error in {0} value: {1}"
-msgstr ""
+msgstr "Памылка ў значэнні {0}: {1}"
 
 msgid "Crossing ways"
-msgstr ""
+msgstr "Перасякальныя лініі"
 
 msgid "Crossing buildings"
-msgstr ""
+msgstr "Перасякальныя будынкі"
 
 msgid "Crossing waterways"
-msgstr ""
+msgstr "Скрыжаванне водных шляхоў"
 
 msgid "Crossing waterway/highway"
-msgstr ""
+msgstr "Скрыжаванне воднага/наземнага шляху"
 
 msgid "Crossing boundaries"
-msgstr ""
+msgstr "Перасякальныя межы"
 
 msgid "Crossing barriers"
-msgstr ""
+msgstr "Скрыжаванне бар’ераў"
 
 msgid ""
 "This test checks if two roads, railways, waterways or buildings crosses in "
 "the same layer, but are not connected by a node."
 msgstr ""
+"Гэты тэст правярае, ці злучаны ў кропцы скрыжавання дзве дарогі "
+"(аўтамабільныя, жалезныя, водныя) ці два будынкі, калі яны размешчаны ў "
+"адным і тым жа пласце."
 
 msgid "Duplicated nodes"
-msgstr ""
+msgstr "Дубляваныя кропкі"
 
 msgid "This test checks that there are no nodes at the very same location."
-msgstr ""
+msgstr "Гэты тэст правярае, каб не было накладзеных кропак."
 
 msgid "Mixed type duplicated nodes"
-msgstr ""
+msgstr "Прадубляваныя кропкі змяшанага тыпу"
 
 msgid "Highway duplicated nodes"
-msgstr ""
+msgstr "Прадубляваныя кропкі дарог"
 
 msgid "Railway duplicated nodes"
-msgstr ""
+msgstr "Прадубляваныя кропкі чыгунак"
 
 msgid "Waterway duplicated nodes"
-msgstr ""
+msgstr "Прадубляваныя кропкі водных шляхоў"
 
 msgid "Boundary duplicated nodes"
-msgstr ""
+msgstr "Прадубляваныя кропкі меж"
 
 msgid "Power duplicated nodes"
-msgstr ""
+msgstr "Прадубляваныя кропкі аб’ектаў энергетыкі"
 
 msgid "Natural duplicated nodes"
-msgstr ""
+msgstr "Дублікаты кропак прыроды"
 
 msgid "Building duplicated nodes"
-msgstr ""
+msgstr "Дублікаты кропак будынкаў"
 
 msgid "Landuse duplicated nodes"
-msgstr ""
+msgstr "Дублікаты кропак землекарыстання"
 
 msgid "Other duplicated nodes"
-msgstr ""
+msgstr "Іншыя дублікаты кропак"
 
 msgid "Nodes at same position"
-msgstr ""
+msgstr "Кропкі ў адной і той жа пазіцыі"
 
 msgid "Duplicated relations"
-msgstr ""
+msgstr "Дубляваныя адносіны"
 
 msgid ""
 "This test checks that there are no relations with same tags and same members "
 "with same roles."
 msgstr ""
+"Правярае на наяўнасць адносін 1) з аднолькавымі тэгамі 2) з аднолькавымі "
+"удзельнікамі з аднолькавымі ролямі."
 
 msgid "Relations with same members"
-msgstr ""
+msgstr "Адносіны з аднолькавымі ўдзельнікамі"
 
 msgid "Delete duplicate relations"
-msgstr ""
+msgstr "Выдаліць дубляваныя адносіны"
 
 msgid "Duplicated ways"
-msgstr ""
+msgstr "Дубляваныя лініі"
 
 msgid ""
 "This test checks that there are no ways with same node coordinates and "
 "optionally also same tags."
 msgstr ""
+"Правярае на наяўнасць ліній з аднолькавымі каардынатамі кропак і "
+"(апцыянальна) з аднолькавымі тэгамі."
 
 msgid "Ways with same position"
-msgstr ""
+msgstr "Лініі ў адным і тым жа месцы"
 
 msgid "Delete duplicate ways"
-msgstr ""
+msgstr "Выдаліць дублікаты ліній"
 
 msgid "Duplicated way nodes"
-msgstr ""
+msgstr "Дубляваныя кропкі на лініі"
 
 msgid "Checks for ways with identical consecutive nodes."
-msgstr ""
+msgstr "Правярае лініі на наяўнасць аднолькавых паслядоўных кропак"
 
 msgid "Highways"
-msgstr ""
+msgstr "Дарогі"
 
 msgid "Performs semantic checks on highways."
-msgstr ""
+msgstr "Семантычная праверка тэгаў на дарогах"
 
 msgid "Incorrect roundabout (highway: {0} instead of {1})"
-msgstr ""
+msgstr "Некарэктны кругавы рух (дарога: {0} замест {1})"
 
 msgid "Highway link is not linked to adequate highway/link"
-msgstr ""
+msgstr "Лінія дарогі не злучана з адэкватнай дарогай/лініяй"
 
 msgid "Missing pedestrian crossing information"
-msgstr ""
+msgstr "Адсутнічае інфармацыя пра пешаходны пераход"
 
 msgid "Unknown country code: {0}"
-msgstr ""
+msgstr "Невядомы код краіны: {0}"
 
 msgid "Unknown source:maxspeed context: {0}"
-msgstr ""
+msgstr "Невядомы кантэкст source:maxspeed: {0}"
 
 msgid "Internet tags"
-msgstr ""
+msgstr "Інтэрнэт-тэгі"
 
 msgid "Checks for errors in internet-related tags."
-msgstr ""
+msgstr "Праверка на памылкі ў тэгах, злучаных з Інтэрнэтам."
 
 msgid " URL cannot be converted to ASCII: {0}"
-msgstr ""
+msgstr " Не атрымалася пераўтварыць URL у ASCII: {0}"
 
 msgid "''{0}'': {1}"
-msgstr ""
+msgstr "''{0}'': {1}"
 
 msgid "Lane tags"
-msgstr ""
+msgstr "Тэгі палос руху"
 
 msgid "Test that validates ''lane:'' tags."
-msgstr ""
+msgstr "Тэст для праверкі тэгаў ''lane:''."
 
 msgid "Number of {0} greater than {1}"
-msgstr ""
+msgstr "Колькасць {0} больш, чым {1}"
 
 msgid "{0}+{1}"
-msgstr ""
+msgstr "{0}+{1}"
 
 msgid "Number of lane dependent values inconsistent"
-msgstr ""
+msgstr "Неадпаведнасць ліку значэнняў, якія залежаць ад палос руху"
 
 msgid "Number of lane dependent values inconsistent in forward direction"
 msgstr ""
+"Неадпаведнасць ліку значэнняў, якія залежаць ад палос руху, у прамым кірунку"
 
 msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
+"Неадпаведнасць ліку значэнняў, якія залежаць ад палос руху, у зваротным "
+"кірунку"
 
 msgid "Long segments"
-msgstr ""
+msgstr "Доўгія сегменты"
 
 msgid "This tests for long way segments, which are usually errors."
-msgstr ""
+msgstr "Праверка доўгіх сегментаў ліній, якія звычайна з’яўляюцца памылкамі."
 
 msgid "Very long segment of {0} kilometers"
-msgstr ""
+msgstr "Занадта доўгі сегмент ({0} кіламетраў)"
 
 msgid "Tag checker (MapCSS based)"
-msgstr ""
+msgstr "Праверка тэгаў (заснавана на MapCSS)"
 
 msgid "This test checks for errors in tag keys and values."
-msgstr ""
+msgstr "Дадзены тэст правярае памылкі ў ключах тэгаў і іх значэннях."
 
 msgid "Unable to replace argument {0} in {1}: {2}"
-msgstr ""
+msgstr "Не атрымалася замяніць аргумент {0} у {1}: {2}"
 
 msgid "Fix of {0}"
-msgstr ""
+msgstr "Выпраўленне для {0}"
 
 msgid " or "
-msgstr ""
+msgstr " ці "
 
 msgid "{0}, use {1} instead"
-msgstr ""
+msgstr "{0}, выкарыстоўвайце замест гэтага {1}"
 
 msgid "Adding {0} to tag checker"
-msgstr ""
+msgstr "Даданне {0} да праверкі тэгаў"
 
 msgid "Failed to add {0} to tag checker"
-msgstr ""
+msgstr "Не атрымалася дадаць {0} да праверкі тэгаў"
 
 msgid "Multipolygon"
-msgstr ""
+msgstr "Мультыпалігон"
 
 msgid "This test checks if multipolygons are valid."
-msgstr ""
+msgstr "Гэты тэст правярае правільнасць мультыпалігонаў."
 
 msgid "Area style way is not closed"
-msgstr ""
+msgstr "Лінія стылю \"палігон\" не замкнёна"
 
 msgid "No outer way for multipolygon"
-msgstr ""
+msgstr "У мультыпалігона адсутнічае знешняя лінія"
 
 msgid "Role for ''{0}'' should be ''{1}''"
-msgstr ""
+msgstr "Роля для ''{0}'' павінна быць ''{1}''"
 
 msgid "No area style for multipolygon"
-msgstr ""
+msgstr "Адсутнічае стыль вобласці для мультыпалігона"
 
 msgid ""
 "Multipolygon relation should be tagged with area tags and not the outer way"
 msgid_plural ""
 "Multipolygon relation should be tagged with area tags and not the outer ways"
 msgstr[0] ""
+"Адносінам тыпу \"мультыпалігон\" варта прызначаць тэгі вобласці, а не "
+"знешняй лініі"
 msgstr[1] ""
+"Адносінам тыпу \"мультыпалігон\" варта прызначаць тэгі вобласці, а не "
+"знешнім лініям"
+msgstr[2] ""
+"Адносінам тыпу \"мультыпалігон\" варта прызначаць тэгі вобласці, а не "
+"знешнім лініям"
 
 msgid ""
 "With the currently used mappaint style the style for inner way equals the "
 "multipolygon style"
 msgstr ""
+"З бягучым выкарыстоўваемым стылем адмалёўкі карты стыль ўнутранай лініі "
+"супадае са стылем мультыпалігона"
 
 msgid "Style for outer way mismatches"
-msgstr ""
+msgstr "Неадпаведнасць стылю для вонкавай лініі"
 
 msgid ""
 "With the currently used mappaint style(s) the style for outer way mismatches "
 "polygon"
 msgstr ""
+"З бягучым выкарыстоўваемым стылем (ці некалькімі стылямі) адмалёўкі карты "
+"стыль для знешняй лініі не адпавядае палігону"
 
 msgid "Area style on outer way"
-msgstr ""
+msgstr "Стыль вобласці на вонкавай лініі"
 
 msgid "Multipolygon is not closed"
-msgstr ""
+msgstr "Мультыпалігон не замкнёны"
 
 msgid "Multipolygon inner way is outside"
-msgstr ""
+msgstr "Унутраная лінія мультыпалігона знаходзіцца за яго межамі"
 
 msgid "Intersection between multipolygon ways"
-msgstr ""
+msgstr "Скрыжаванне паміж лініямі мультыпалігона"
 
 msgid "No useful role for multipolygon member"
-msgstr ""
+msgstr "Роля для ўдзельніка мультыпалігона зададзена няўдала"
 
 msgid "Non-Way in multipolygon"
-msgstr ""
+msgstr "Ня-лінія ў мультыпалігоне"
 
 msgid "Missing name:* translation"
-msgstr ""
+msgstr "Адсутны  пераклад name:*"
 
 msgid ""
 "This test finds multilingual objects whose ''name'' attribute is not equal "
 "to some ''name:*'' attribute and not a composition of ''name:*'' attributes, "
 "e.g., Italia - Italien - Italy."
 msgstr ""
+"Гэты тэст знаходзіць шматмоўныя аб’екты, чые атрыбуты ''name'' не супадаюць "
+"з атрыбутам ''name:*'' і не складаюцца з атрыбутаў  ''name:*'', напрыклад, "
+"Italia - Italien - Italy."
 
 msgid "Missing name:*={0}. Add tag with correct language key."
-msgstr ""
+msgstr "Адсутнічае name:*={0}. Дадайце тэг з правільным ключом мовы."
 
 msgid "A name is missing, even though name:* exists."
-msgstr ""
+msgstr "Адсутнічае name, нягледзячы на тое, што існуе name: *"
 
 msgid "Opening hours syntax"
-msgstr ""
+msgstr "Сінтаксіс гадзін працы"
 
 msgid "This test checks the correct usage of the opening hours syntax."
-msgstr ""
+msgstr "Гэты тэст правярае правільнасць сінтаксісу гадзін працы."
 
 msgid "opening_hours value can be prettified"
-msgstr ""
+msgstr "выгляд значэння opening_hours можна палепшыць"
 
 msgid "Unexpected token:"
-msgstr ""
+msgstr "Неспадзяваны токен:"
 
 msgid "Unexpected token (school holiday parser):"
-msgstr ""
+msgstr "Нечаканы токен (парсер невучэбных дзён школы):"
 
 msgid "Unexpected token in number range:"
-msgstr ""
+msgstr "Неспадзяваны токен у лікавым дыяпазоне:"
 
 msgid "Unexpected token in week range:"
-msgstr ""
+msgstr "Неспадзяваны токен у дыяпазоне тыдняў:"
 
 msgid "Unexpected token in weekday range:"
-msgstr ""
+msgstr "Неспадзяваны токен у дыяпазоне дзён тыдня:"
 
 msgid "Unexpected token in month range:"
-msgstr ""
+msgstr "Неспадзяваны токен у дыяпазоне месяцаў:"
 
 msgid "Unexpected token in year range:"
-msgstr ""
+msgstr "Неспадзяваны токен у дыяпазоне гадоў:"
 
 msgid "Invalid/unsupported syntax."
-msgstr ""
+msgstr "Няправільны або непадтрымоўваемы сінтаксіс."
 
 msgid "Overlapping ways"
-msgstr ""
+msgstr "Перакрыцце ліній"
 
 msgid ""
 "This test checks that a connection between two nodes is not used by more "
 "than one way."
-msgstr ""
+msgstr "Гэты тэст правярае, каб дзве кропкі злучаліся толькі адной лініяй."
 
 msgid "Areas share segment"
-msgstr ""
+msgstr "Агульны сегмент абласцей"
 
 msgid "Highways share segment with area"
-msgstr ""
+msgstr "Агульны сегмент дарогі і палігона"
 
 msgid "Railways share segment with area"
-msgstr ""
+msgstr "Агульны сегмент чыгункі і палігона"
 
 msgid "Ways share segment with area"
-msgstr ""
+msgstr "Агульны сегмент ліній і палігона"
 
 msgid "Overlapping highways"
-msgstr ""
+msgstr "Перакрыцце аўтадарог"
 
 msgid "Overlapping railways"
-msgstr ""
+msgstr "Перакрыцце чыгуначных шляхоў"
 
 msgid "Way contains segment twice"
-msgstr ""
+msgstr "Лінія ўтрымоўвае сегмент двойчы"
 
 msgid "Power lines"
-msgstr ""
+msgstr "Лініі электраперадачы"
 
 msgid ""
 "Checks for nodes in power lines that do not have a power=tower/pole tag."
 msgstr ""
+"Тэст шукае кропкі на лініях электраперадачы без тэга power=tower/pole."
 
 msgid "Missing power tower/pole within power line"
-msgstr ""
+msgstr "Адсутнічае тэг power=tower/pole на кропках ліній электраперадачы"
 
 msgid "Role verification problem"
-msgstr ""
+msgstr "Праблема праверкі ролі"
 
 msgid "Relation checker"
-msgstr ""
+msgstr "Праверка адносін"
 
 msgid "Checks for errors in relations."
-msgstr ""
+msgstr "Праверка на памылкі ў адносінах."
 
 msgid ""
 "Route scheme is unspecified. Add {0} ({1}=public_transport; {2}=legacy)"
 msgstr ""
+"Не паказана схема маршруту. Дадайце {0} ({1}=public_transport; {2}=legacy)"
 
 msgid "Relation type is unknown"
-msgstr ""
+msgstr "Тып адносін невядомы"
 
 msgid "Relation is empty"
-msgstr ""
+msgstr "Адносіны парожнія"
 
 msgid "Role member does not match expression {0} in template {1}"
-msgstr ""
+msgstr "Удзельнік ролі не адпавядае выразу {0} ў шаблоне {1}"
 
 msgid ""
 "Role member type {0} does not match accepted list of {1} in template {2}"
 msgstr ""
+"Тып ўдзельніка ролі {0} не адпавядае спісу дапушчальных тыпаў {1} ў шаблоне "
+"{2}"
 
 msgid "<empty>"
-msgstr ""
+msgstr "<пуста>"
 
 msgid "Role {0} unknown in templates {1}"
-msgstr ""
+msgstr "Роля {0} невядомая ў шаблонах {1}"
 
 msgid "Empty role type found when expecting one of {0}"
-msgstr ""
+msgstr "Пусты тып ролі, хоць чакаўся адзін з {0}"
 
 msgid "Role {0} missing"
-msgstr ""
+msgstr "Адсутнічае роля {0}"
 
 msgid "Number of {0} roles too low ({1})"
-msgstr ""
+msgstr "Колькасць роляў {0} занадта маленькая ({1})"
 
 msgid "Number of {0} roles too high ({1})"
-msgstr ""
+msgstr "Колькасць роляў {0} занадта вялікая ({1})"
 
 msgid "Self-intersecting ways"
-msgstr ""
+msgstr "Лініі, якія перасякаюць самі сябе"
 
 msgid ""
 "This test checks for ways that contain some of their nodes more than once."
 msgstr ""
+"Гэты тэст шукае лініі, якія праходзяць праз адну кропку больш аднаго разу."
 
 msgid "Similarly named ways"
-msgstr ""
+msgstr "Падобныя назвы ліній"
 
 msgid ""
 "This test checks for ways with similar names that may have been misspelled."
 msgstr ""
+"Гэты тэст шукае лініі з падобнымі назвамі. Магчыма, гэта выклікана памылкамі "
+"друку."
 
 msgid "Tag checker"
-msgstr ""
+msgstr "Праверка тэгаў"
 
 msgid "Adding {0} to ignore tags"
-msgstr ""
+msgstr "Даданне {0} да ігнаруемых тэгаў"
 
 msgid "Invalid tagchecker line - {0}: {1}"
-msgstr ""
+msgstr "Няправільная лінія аналізатара тэгаў - {0}: {1}"
 
 msgid "Invalid spellcheck line: {0}"
-msgstr ""
+msgstr "Памылка праверкі правапісу радка: {0}"
 
 msgid "Adding {0} to spellchecker"
-msgstr ""
+msgstr "Даданне {0} да праверкі напісання"
 
 msgid ""
 "Could not access data file(s):\n"
 "{0}"
 msgstr ""
+"Няма доступу да файла(ў) дадзеных:\n"
+"{0}"
 
 msgid "Suspicious tag/value combinations"
-msgstr ""
+msgstr "Падазроныя камбінацыі тэг/значэнне"
 
 msgid "Key ''{0}'' invalid."
-msgstr ""
+msgstr "Няправільны ключ {0}."
 
 msgid "Tag value contains character with code less than 0x20"
-msgstr ""
+msgstr "Значэнне тэга ўтрымоўвае знак з кодам менш чым 0x20"
 
 msgid "Tag key contains character with code less than 0x20"
-msgstr ""
+msgstr "Ключ тэга ўтрымоўвае знак з кодам менш чым 0x20"
 
 msgid "Tag value longer than allowed"
-msgstr ""
+msgstr "Значэнне тэга даўжэй, чым дазволена"
 
 msgid "Tag key longer than allowed"
-msgstr ""
+msgstr "Ключ тэга даўжэй, чым дазволена"
 
 msgid "Tags with empty values"
-msgstr ""
-
-msgid "Invalid property key"
-msgstr ""
+msgstr "Тэгі з пустымі значэннямі"
 
 msgid "Invalid white space in property key"
-msgstr ""
+msgstr "Няправільны прабел у напісанні ключа"
 
 msgid "Property values start or end with white space"
-msgstr ""
+msgstr "Значэнне пачынаецца ці сканчаецца прабелам"
 
 msgid "Property values contain HTML entity"
-msgstr ""
+msgstr "Значэнні ўтрымоўваюць HTML разметку"
+
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr "Ключ ''{0}'' падобны да ''{1}''."
+
+msgid "Misspelled property key"
+msgstr "Арфаграфічная памылка ў ключы ўласцівасці"
 
 msgid "Key ''{0}'' not in presets."
-msgstr ""
+msgstr "Ключа ''{0}'' няма ў нарыхтоўках."
 
 msgid "Presets do not contain property key"
-msgstr ""
+msgstr "Нарыхтоўкі не ўтрымліваюць падыходзячага ключа"
+
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr "Значэнне ''{0}'' ключа ''{1}'' выглядае падобным на ''{2}''."
+
+msgid "Misspelled property value"
+msgstr "Памылка друку ў значэнні"
 
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
-msgstr ""
+msgstr "Значэння ''{0}'' для ключа ''{1}'' няма ў нарыхтоўках"
 
 msgid "Presets do not contain property value"
-msgstr ""
+msgstr "У нарыхтоўках няма адпаведнага значэння"
 
 msgid "FIXMES"
-msgstr ""
+msgstr "Тэгі FIXME (да выпраўлення)"
 
 msgid "Check property keys."
-msgstr ""
+msgstr "Праверыць напісанне ключоў."
 
 msgid "Validate that property keys are valid checking against list of words."
-msgstr ""
+msgstr "Праверыць, што напісанне ключоў прайшло праверку па спісе слоў."
 
 msgid "Use complex property checker."
-msgstr ""
+msgstr "Выкарыстоўваць складаную праверку напісання."
 
 msgid "Validate property values and tags using complex rules."
-msgstr ""
+msgstr "Праверка напісання значэнняў і ключоў з дапамогай складаных правіл."
 
 msgid "TagChecker source"
-msgstr ""
+msgstr "Крыніца сродку праверкі тэгаў"
 
 msgid "Data sources ({0})"
-msgstr ""
+msgstr "Крыніцы дадзеных ({0})"
 
 msgid "Check property values."
-msgstr ""
+msgstr "Праверыць напісанне значэнняў"
 
 msgid "Validate that property values are valid checking against presets."
 msgstr ""
+"Праверыць, што значэнні тэгаў прайшлі праверку ў дачыненні да нарыхтовак."
 
 msgid "Check for FIXMES."
-msgstr ""
+msgstr "Праверыць на наяўнасць тэгаў FIXME"
 
 msgid "Looks for nodes or ways with FIXME in any property value."
-msgstr ""
+msgstr "Шукае кропкі ці лініі з FIXME у любым значэнні ўласцівасці."
 
 msgid "Fix tags"
-msgstr ""
+msgstr "Выправіць тэгі"
 
 msgid "Could not find element type"
-msgstr ""
+msgstr "Не атрымалася знайсці тып элемента"
 
 msgid "Incorrect number of parameters"
-msgstr ""
+msgstr "Некарэктная колькасць параметраў"
 
 msgid "Could not find warning level"
-msgstr ""
+msgstr "Не атрымалася знайсці  ўзровень папярэджання"
 
 msgid "Illegal expression ''{0}''"
-msgstr ""
+msgstr "Недапушчальны выраз ''{0}''"
 
 msgid "Illegal regular expression ''{0}''"
-msgstr ""
+msgstr "Недапушчальны рэгулярны выраз ''{0}''"
 
 msgid "Turnrestrictions"
-msgstr ""
+msgstr "Абмежаванні на паварот"
 
 msgid "This test checks if turnrestrictions are valid."
-msgstr ""
+msgstr "Гэты тэст правярае правільнасць абмежаванняў на паварот."
 
 msgid "Unknown role"
-msgstr ""
+msgstr "невядомая роля"
 
 msgid "Unknown member type"
-msgstr ""
+msgstr "Невядомы тып удзельніка"
 
 msgid "More than one \"from\" way found"
-msgstr ""
+msgstr "Выяўлены больш чым адзін шлях \"адкуль\""
 
 msgid "More than one \"to\" way found"
-msgstr ""
+msgstr "Выяўлены больш чым адзін шлях \"куды\""
 
 msgid "More than one \"via\" node found"
-msgstr ""
+msgstr "Знойдзена больш за адна кропка \"via\""
 
 msgid "Cannot mix node and way for role \"via\""
-msgstr ""
+msgstr "Нельга выкарыстоўваць кропку і лінію сумесна ў якасці \"via\"."
 
 msgid "No \"from\" way found"
-msgstr ""
+msgstr "Не паказаны шлях \"адкуль\""
 
 msgid "No \"to\" way found"
-msgstr ""
+msgstr "Не паказаны шлях \"куды\""
 
 msgid "No \"via\" node or way found"
-msgstr ""
+msgstr "Няма кропкі або лініі \"праз\""
 
 msgid "The \"from\" way does not start or end at a \"via\" node."
-msgstr ""
+msgstr "Лінія \"from\" не пачынаецца ці не сканчаецца на кропцы \"via\"."
 
 msgid "Superfluous turnrestriction as \"to\" way is oneway"
-msgstr ""
+msgstr "Лішняе абмежаванне на паварот: шлях \"куды\" - аднабаковы рух"
 
 msgid "The \"to\" way does not start or end at a \"via\" node."
-msgstr ""
+msgstr "Лінія \"to\" не пачынаецца ці не сканчаецца на кропцы \"via\"."
 
 msgid "The \"from\" and the first \"via\" way are not connected."
-msgstr ""
+msgstr "Шлях \"from\" і першы са шляхоў \"via\" не злучаны."
 
 msgid "The \"via\" ways are not connected."
-msgstr ""
+msgstr "Шляхі \"via\" не злучаны."
 
 msgid "The last \"via\" and the \"to\" way are not connected."
-msgstr ""
+msgstr "Апошні шлях \"via\" і шлях \"to\" не злучаны."
 
 msgid "Unclosed Ways"
-msgstr ""
+msgstr "Неазамкнёныя лініі"
 
 msgid "This tests if ways which should be circular are closed."
-msgstr ""
+msgstr "Гэты тэст шукае растуленыя лініі, якія павінны быць замкнёнымі."
 
 msgid "Unclosed way"
-msgstr ""
+msgstr "Незамкёная лінія"
 
 msgid "natural type {0}"
-msgstr ""
+msgstr "прыродны тып {0}"
 
 msgid "landuse type {0}"
-msgstr ""
+msgstr "тып землекарыстання {0}"
 
 msgid "amenities type {0}"
-msgstr ""
+msgstr "выгоды тыпу {0}"
 
 msgid "sport type {0}"
-msgstr ""
+msgstr "спартыўны тып {0}"
 
 msgid "tourism type {0}"
-msgstr ""
+msgstr "турыстычны тып {0}"
 
 msgid "shop type {0}"
-msgstr ""
+msgstr "тып крамы: {0}"
 
 msgid "leisure type {0}"
-msgstr ""
+msgstr "адпачынак тыпу {0}"
 
 msgid "waterway type {0}"
-msgstr ""
+msgstr "тып вадаёма: {0}"
 
 msgid "boundary type {0}"
-msgstr ""
+msgstr "тып мяжы {0}"
 
 msgid "building"
-msgstr ""
+msgstr "будынак"
 
 msgid "area"
-msgstr ""
+msgstr "палігон"
 
 msgid "Unconnected highways"
-msgstr ""
+msgstr "Нязлучаныя аўтадарогі"
 
 msgid "Unconnected railways"
-msgstr ""
+msgstr "Нязлучаныя чыгункі"
 
 msgid "Unconnected waterways"
-msgstr ""
+msgstr "Нязлучаныя водныя шляхі"
 
 msgid "Unconnected natural lands and landuses"
-msgstr ""
+msgstr "Нязлучаныя аб''екты прыроды і землекарыстання"
 
 msgid "Unconnected power ways"
-msgstr ""
+msgstr "Нязлучаныя ЛЭП"
 
 msgid "This test checks if a way has an endpoint very near to another way."
 msgstr ""
+"Гэты тэст шукае лініі, канец якіх размешчаны вельмі блізка да іншай лініі."
 
 msgid "Way end node near other highway"
-msgstr ""
+msgstr "Апошняя кропка лініі размешчана каля іншай дарогі"
 
 msgid "Way end node near other way"
-msgstr ""
+msgstr "Канец лініі размешчаны каля іншай лініі"
 
 msgid "Way node near other way"
-msgstr ""
+msgstr "Кропка лініі размешчана каля іншай лініі"
 
 msgid "Connected way end node near other way"
-msgstr ""
+msgstr "Канчатковая кропка далучанай лініі размешчана каля іншай лініі"
+
+msgid "Unconnected nodes without physical tags"
+msgstr "Нязлучаныя кропкі без тэгаў"
 
 msgid "Untagged and unconnected nodes"
-msgstr ""
+msgstr "Нязлучаныя кропкі без тэгаў"
 
 msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
-
-msgid "Unconnected nodes without physical tags"
-msgstr ""
+"Гэты тэст шукае кропкі, якія не маюць тэгаў, і якія не з''яўляюцца часткай "
+"ліній."
 
 msgid "No tags"
-msgstr ""
+msgstr "Без тэгаў"
 
 msgid "Has tag containing ''fixme'' or ''FIXME''"
-msgstr ""
+msgstr "Маюцца тэг, які змяшчае ''fixme'' ці ''FIXME''"
 
 msgid "Has key ''note'' or ''comment'' or ''description''"
-msgstr ""
+msgstr "Маецца ключ ''note'' ці ''comment'' ці ''description''"
 
 msgid "Has key ''created_by'' or ''converted_by''"
-msgstr ""
+msgstr "Маецца ключ ''created_by'' ці ''converted_by''"
 
 msgid "Has key ''watch''"
-msgstr ""
+msgstr "Маецца ключ ''watch''"
 
 msgid "Has key ''source''"
-msgstr ""
+msgstr "Маецца ключ ''source''"
 
 msgid "Untagged, empty and one node ways"
-msgstr ""
+msgstr "Пустыя, без тэгаў і якія складаюцца з адной кропкі лініі"
 
 msgid "This test checks for untagged, empty and one node ways."
 msgstr ""
+"Дадзены тэст шукае лініі без тэгаў, пустыя, а таксама лініі, якія складаюцца "
+"з адной кропкі"
 
 msgid "Unnamed ways"
-msgstr ""
+msgstr "Безназоўныя лініі"
 
 msgid "Unnamed junction"
-msgstr ""
+msgstr "Скрыжаванне без назвы"
 
 msgid "Untagged ways (commented)"
-msgstr ""
+msgstr "Лініі без тэгаў (каментаваныя)"
 
 msgid "Untagged ways"
-msgstr ""
+msgstr "Лініі без тэгаў"
 
 msgid "Empty ways"
-msgstr ""
+msgstr "Пустыя лініі"
 
 msgid "One node ways"
-msgstr ""
+msgstr "Лініі, якія складаюцца з адной кропкі"
 
 msgid "Way connected to Area"
-msgstr ""
+msgstr "Лінія злучана з палігонам"
 
 msgid "Checks for ways connected to areas."
-msgstr ""
+msgstr "Правярае наяўнасць ліній, злучаных з замкнёнымі абласцямі."
 
 msgid "Way terminates on Area"
-msgstr ""
+msgstr "Лінія сканчаецца на палігоне"
 
 msgid "Wrongly Ordered Ways"
-msgstr ""
+msgstr "Няправільна спарадкаваныя лініі"
 
 msgid "This test checks the direction of water, land and coastline ways."
-msgstr ""
+msgstr "Гэты тэст правярае кірунак берагавых ліній."
 
 msgid "Reversed coastline: land not on left side"
-msgstr ""
+msgstr "Няслушны кірунак берагавой лініі: зямля не злева"
 
 msgid "Reversed land: land not on left side"
-msgstr ""
+msgstr "Няслушны кірунак лініі сушы: зямля не злева"
 
 msgid "Show this dialog again the next time"
-msgstr ""
+msgstr "Паказваць гэты дыялог кожны раз"
 
 msgid "Do not show again (this operation)"
-msgstr ""
+msgstr "Больш не пытаць"
 
 msgid "Do not show again (this session)"
-msgstr ""
+msgstr "Не паказваць ізноў (у гэтым сеансе)"
 
 msgid "Do not show again (remembers choice)"
-msgstr ""
+msgstr "Не паказваць ізноў (запомніць выбар)"
 
 msgid " [id: {0}]"
-msgstr ""
+msgstr " [id: {0}]"
 
 msgid "incomplete"
-msgstr ""
+msgstr "няпоўны"
 
 msgid "House {0}"
-msgstr ""
+msgstr "Хата {0}"
 
 msgid "House number {0} at {1}"
-msgstr ""
+msgstr "Хата нумар {0} на {1}"
 
 msgid "House number {0}"
-msgstr ""
+msgstr "Хата нумар {0}"
 
 msgid "highway"
-msgstr ""
+msgstr "дарога"
 
 msgid "railway"
-msgstr ""
+msgstr "чыгунка"
 
 msgid "waterway"
-msgstr ""
+msgstr "вадаём"
 
 msgid "landuse"
-msgstr ""
+msgstr "землекарыстанне"
 
 msgid "{0} node"
 msgid_plural "{0} nodes"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} кропка"
+msgstr[1] "{0} кропкі"
+msgstr[2] "{0} кропак"
 
 msgid "{0} member"
 msgid_plural "{0} members"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} удзельнік"
+msgstr[1] "{0} удзельніка"
+msgstr[2] "{0} удзельнікаў"
 
 msgid "public transport"
-msgstr ""
+msgstr "грамадскі транспарт"
 
 msgid "Changeset {0}"
-msgstr ""
+msgstr "Пакет правак {0}"
 
 msgid "Precondition violation"
-msgstr ""
+msgstr "Парушэнне папярэдняй умовы"
 
 msgid "Security exception"
-msgstr ""
+msgstr "Памылка бяспекі"
 
 msgid "Network exception"
-msgstr ""
+msgstr "Памылка сеткі"
 
 msgid "IO Exception"
-msgstr ""
+msgstr "Памылка Ўводу-вываду"
 
 msgid "Illegal Data"
-msgstr ""
+msgstr "Няслушныя дадзеныя"
 
 msgid "Offline mode"
-msgstr ""
+msgstr "Аўтаномны рэжым"
 
 msgid "Internal Server Error"
-msgstr ""
+msgstr "Унутраная памылка сервера"
 
 msgid "Bad Request"
-msgstr ""
+msgstr "Няслушны запыт"
 
 msgid "Not Found"
-msgstr ""
+msgstr "Не знойдзена"
 
 msgid "Conflict"
-msgstr ""
+msgstr "Канфлікт"
 
 msgid "Authentication Failed"
-msgstr ""
+msgstr "Памылка аўтэнтыфікацыі"
 
 msgid "Access to redacted version ''{0}'' of {1} {2} is forbidden."
-msgstr ""
+msgstr "Доступ да адрэдагаванай версіі «{0}» {1} {2} забаронены."
 
 msgid "Authorisation Failed"
-msgstr ""
+msgstr "Аўтарызацыя не атрымалася"
 
 msgid "Client Time Out"
-msgstr ""
+msgstr "Час чакання кліента скончылася"
 
 msgid "Bandwidth Limit Exceeded"
-msgstr ""
+msgstr "Перавышана мяжа паласы прапускання"
 
 msgid "Communication with OSM server failed"
-msgstr ""
+msgstr "Не атрымалася звязацца з серверам OSM"
 
 msgid "Authentication failed"
-msgstr ""
+msgstr "Аўтэнтыфікацыя не пройдзена"
 
 msgid "Unknown host"
-msgstr ""
+msgstr "Невядомы хост"
 
 msgid "Object deleted"
 msgid_plural "Objects deleted"
-msgstr[0] "Аб'ект выдалены"
-msgstr[1] ""
-msgstr[2] "Аб'екты выдалены"
+msgstr[0] "Аб’ект выдалены"
+msgstr[1] "Аб’екты выдалены"
+msgstr[2] "Аб’екты выдалены"
 
 msgid "Show help information"
-msgstr ""
+msgstr "Паказаць даведкавую інфармацыю"
 
 msgid "Downloading \"Message of the day\""
-msgstr ""
+msgstr "Спампоўваецца \"Паведамленне дня\""
 
 msgid "Failed to read MOTD. Exception was: {0}"
-msgstr ""
+msgstr "Не атрымалася прачытаць паведамленне дня (MOTD). Памылка: {0}"
 
 msgid "Message of the day not available"
-msgstr ""
+msgstr "Паведамленне дня недаступна"
 
 msgid "Click to close the dialog"
-msgstr ""
+msgstr "Націсніце, каб зачыніць дыялог"
 
 msgid "Imagery offset"
-msgstr ""
+msgstr "Зрушэнне здымка"
 
+msgctxt "menu"
 msgid "Imagery"
-msgstr ""
+msgstr "Здымак"
 
 msgctxt "layer"
 msgid "Offset"
-msgstr ""
+msgstr "Зрушэнне"
 
 msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
-msgstr ""
+msgstr "Чакалася непустое значэнне для параметру ''{0}'', атрымана ''{1}''"
 
 msgid "usage"
-msgstr ""
+msgstr "выкарыстанне"
 
 msgid "options"
-msgstr ""
+msgstr "опцыі"
 
 msgid "Show this help"
-msgstr ""
+msgstr "Паказаць гэту даведку"
 
 msgid "Standard unix geometry argument"
-msgstr ""
+msgstr "Стандартны параметр геаметрыі unix"
 
 msgid "Download the bounding box"
-msgstr ""
+msgstr "Запампаваць вобласць у межах рамкі"
 
 msgid "Download the location at the URL (with lat=x&lon=y&zoom=z)"
-msgstr ""
+msgstr "Запампаваць вобласць па URL (з lat=x&lon=y&zoom=z)"
 
 msgid "Open a file (any file type that can be opened with File/Open)"
 msgstr ""
+"Адкрыць файл (любы тып файлаў, які можна адкрыць з дапамогай Файл/Адкрыць)"
 
 msgid "Download the bounding box as raw GPS"
-msgstr ""
+msgstr "Загрузіць зыходны GPS абмежаваны прастакутнікам"
 
 msgid "Download the location at the URL (with lat=x&lon=y&zoom=z) as raw GPS"
 msgstr ""
+"Загрузіць мясцовасць па спасылцы (lat = x & lon = y & zoom = z) як сырыя "
+"дадзеныя GPS"
 
 msgid "Select with the given search"
-msgstr ""
+msgstr "Выбар з улікам пошуку"
 
 msgid "Launch in maximized mode"
-msgstr ""
+msgstr "Запуск у разгорнутым выглядзе"
 
 msgid "Reset the preferences to default"
-msgstr ""
+msgstr "Аднавіць налады па змаўчанні"
 
 msgid "Changes preferences according to the XML file"
-msgstr ""
+msgstr "Загрузіць налады з XML-файла"
 
 msgid "Set preference key to value"
-msgstr ""
+msgstr "Усталяваць у наладах значэнне ключа"
 
 msgid "Set the language"
-msgstr ""
+msgstr "Абраць мову"
 
 msgid "Displays the JOSM version and exits"
-msgstr ""
+msgstr "Паказаць версію JOSM і выйсці"
 
 msgid "Print debugging messages to console"
-msgstr ""
+msgstr "Выводзіць адладкавыя паведамленні ў кансоль"
 
 msgid "Skip loading plugins"
-msgstr ""
+msgstr "Прапусціць запампоўку модуляў"
 
 msgid "Disable access to the given resource(s), separated by comma"
-msgstr ""
+msgstr "Адключыць доступ да паказаных рэсурсаў (падзяляюцца коскамі)"
 
 msgid "options provided as Java system properties"
-msgstr ""
+msgstr "сістэмныя налады Java"
 
 msgid "/PATH/TO/JOSM/PREF    "
-msgstr ""
+msgstr "/PATH/TO/JOSM/PREF    "
 
 msgid "Set the preferences directory"
-msgstr ""
+msgstr "Паказаць каталог налад"
 
 msgid "/PATH/TO/JOSM/USERDATA"
-msgstr ""
+msgstr "/PATH/TO/JOSM/USERDATA"
 
 msgid "Set the user data directory"
-msgstr ""
+msgstr "Паказаць каталог дадзеных карыстальніка"
 
 msgid "/PATH/TO/JOSM/CACHE   "
-msgstr ""
+msgstr "/PATH/TO/JOSM/CACHE   "
 
 msgid "Set the cache directory"
-msgstr ""
+msgstr "Паказаць каталог кэша"
 
 msgid "/PATH/TO/JOSM/HOMEDIR "
-msgstr ""
+msgstr "/PATH/TO/JOSM/HOMEDIR "
 
 msgid ""
 "Relocate all 3 directories to homedir. Cache directory will be in "
 "homedir/cache"
 msgstr ""
+"Перамясціць усё 3 каталога ў homedir. Каталог кэша будзе ў homedir/cache"
 
 msgid ""
 "-Djosm.home has lower precedence, i.e. the specific setting overrides the "
 "general one"
 msgstr ""
+"-Djosm.home мае ніжэйшы прыярытэт, г.зн. спецыфічныя налады заменяць сабой "
+"агульныя"
 
 msgid ""
 "note: For some tasks, JOSM needs a lot of memory. It can be necessary to add "
@@ -4640,104 +5001,130 @@ msgid ""
 "      Java option to specify the maximum size of allocated memory in "
 "megabytes"
 msgstr ""
+"Нататка: Для некаторых задач, JOSM патрабуе шмат памяці. Можа быць, "
+"неабходна дадаць наступную\n"
+"                          Java опцыю, каб паказаць у мегабайтах максімальны "
+"памер вылучанай памяці"
 
 msgid "examples"
-msgstr ""
+msgstr "прыклады"
 
 msgid ""
 "Parameters --download, --downloadgps, and --selection are processed in this "
 "order."
 msgstr ""
+"Параметры --download, --downloadgps і --selection апрацоўваюцца ў гэтым "
+"парадку."
 
 msgid "Make sure you load some data if you use --selection."
 msgstr ""
+"Пераканаецеся, што вы загрузілі хоць нейкія дадзеныя, калі вы "
+"выкарыстоўваеце --selection."
 
 msgid "Printing debugging messages to console"
-msgstr ""
+msgstr "Вывад адладкавых паведамленняў у кансоль"
 
 msgid "Plugin loading skipped"
-msgstr ""
+msgstr "Запампоўка модуляў прапушчана"
 
 msgid "Enabled detailed debug level (trace)"
-msgstr ""
+msgstr "Уключаны пашыраны ўзровень адладкі (трасіроўка)"
 
 msgid "Initializing"
-msgstr ""
+msgstr "Ініцыялізацыя"
 
 msgid "Updating plugins"
-msgstr ""
+msgstr "Абнаўленне модуляў"
 
 msgid "Installing updated plugins"
-msgstr ""
+msgstr "Усталёўка абноўленых модуляў"
 
 msgid "Loading early plugins"
-msgstr ""
+msgstr "Загрузка ранніх модуляў"
 
 msgid "Setting defaults"
-msgstr ""
+msgstr "Налады па змаўчанні"
 
 msgid "Creating main GUI"
 msgstr "Стварэнне графічнага інтэрфейсу"
 
 msgid "Loading plugins"
-msgstr ""
+msgstr "Загрузка модуляў"
 
 msgid ""
 "''{0}'' is not a valid value for argument ''{1}''. Possible values are {2}, "
 "possibly delimited by commas."
 msgstr ""
+"''{0}'' — недапушчальнае значэнне для аргументу ''{1}''. Магчымыя значэнні: "
+"{2}, падзельнік — коска."
 
 msgid ""
 "JOSM is running in offline mode. This resource will not be available: {0}"
 msgid_plural ""
 "JOSM is running in offline mode. These resources will not be available: {0}"
 msgstr[0] ""
+"JOSM працуе ў аўтаномным рэжыме. Гэты рэсурс будзе недаступны: {0}"
 msgstr[1] ""
+"JOSM працуе ў аўтаномным рэжыме. Гэтыя рэсурсы будуць недаступны: {0}"
+msgstr[2] ""
+"JOSM працуе ў аўтаномным рэжыме. Гэтыя рэсурсы будуць недаступны: {0}"
 
 msgid ""
 "Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
 msgstr ""
+"Выяўлена  падыходная для выкарыстання сетка IPv6, аддаць перавагу IPv6 "
+"замест IPv4 пасля наступнага перазапуску."
 
 msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
 msgstr ""
+"Выяўлена  падыходная для выкарыстання сетка IPv6, аддаць перавагу IPv6 "
+"замест IPv4."
 
 msgid ""
 "Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
 "restart."
 msgstr ""
+"Не выяўлена  падыходнай для выкарыстання сеткі IPv6, аддаць перавагу IPv4 "
+"замест IPv6 пасля наступнага перазапуску."
 
 msgid "Unsaved osm data"
-msgstr ""
+msgstr "Незахаваныя дадзеныя osm"
 
 msgid "Restore"
-msgstr ""
+msgstr "Аднавіць"
 
 msgid "Discard"
-msgstr ""
+msgstr "Выдаліць"
 
 msgid "JOSM found {0} unsaved osm data layer. "
 msgid_plural "JOSM found {0} unsaved osm data layers. "
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "JOSM знайшоў {0} незахаваны пласт дадзеных osm. "
+msgstr[1] "JOSM знайшоў {0} незахаваных пласта дадзеных osm. "
+msgstr[2] "JOSM знайшоў {0} незахаваных пластоў дадзеных osm. "
 
 msgid ""
 "It looks like JOSM crashed last time. Would you like to restore the data?"
 msgstr ""
+"Падобна, у мінулы раз праца JOSM была перапынена з-за памылкі. Жадаеце "
+"паспрабаваць аднавіць дадзеныя?"
 
 msgid "Change proxy settings"
-msgstr ""
+msgstr "Змяніць налады проксі-сервера"
 
 msgid "Proxy errors occurred"
-msgstr ""
+msgstr "Выяўлена памылка проксі-сервера"
 
 msgid ""
 "JOSM tried to access the following resources:<br>{0}but <b>failed</b> to do "
 "so, because of the following proxy errors:<br>{1}Would you like to change "
 "your proxy settings now?"
 msgstr ""
+"JOSM паспрабаваў атрымаць доступ да наступных рэсурсаў:<br>{0}, але гэта "
+"<b>не атрымалася</b> з-за наступных памылак проксі:<br>{1} Жадаеце змяніць "
+"налады проксі цяпер?"
 
 msgid "Network errors occurred"
-msgstr ""
+msgstr "Памылка сеткі"
 
 msgid ""
 "JOSM tried to access the following resources:<br>{0}but <b>failed</b> to do "
@@ -4745,256 +5132,234 @@ msgid ""
 "missing proxy configuration.<br>Would you like to change your proxy settings "
 "now?"
 msgstr ""
+"JOSM спрабаваў атрымаць доступ да наступных рэсурсаў:<br>{0}, але гэта <b>не "
+"атрымалася</b> з-за наступных памылак сеткі:<br>{1}Магчыма, чыннік у "
+"адсутнасці канфігурацыі проксі.<br>Жадаеце змяніць налады проксі цяпер?"
 
+msgctxt "menu"
 msgid "File"
-msgstr ""
+msgstr "Файл"
 
-msgid "Session"
-msgstr ""
+msgctxt "menu"
+msgid "Edit"
+msgstr "Праўка"
 
+msgctxt "menu"
 msgid "View"
-msgstr ""
+msgstr "Выгляд"
 
+msgctxt "menu"
 msgid "Tools"
-msgstr ""
+msgstr "Прылады"
 
+msgctxt "menu"
 msgid "More tools"
-msgstr ""
+msgstr "Яшчэ прылады"
 
+msgctxt "menu"
 msgid "Data"
-msgstr ""
+msgstr "Дадзеныя"
 
+msgctxt "menu"
 msgid "Selection"
-msgstr ""
+msgstr "Вылучэнне"
 
+msgctxt "menu"
 msgid "Presets"
-msgstr ""
+msgstr "Нарыхтоўкі"
 
 msgid "More..."
-msgstr ""
+msgstr "Яшчэ..."
 
+msgctxt "menu"
 msgid "GPS"
-msgstr ""
+msgstr "GPS"
 
+msgctxt "menu"
 msgid "Windows"
-msgstr ""
+msgstr "Вокны"
 
-msgid "Menu: {0}"
-msgstr ""
+msgctxt "menu"
+msgid "Help"
+msgstr "Дапамога"
 
-msgid "Save and load the current session (list of layers, etc.)"
-msgstr ""
+msgid "Menu: {0}"
+msgstr "Меню: {0}"
 
 msgid "Edit toolbar"
-msgstr ""
+msgstr "Панэль прылад рэдагавання"
 
 msgid "Toggles the visibility of the edit toolbar (i.e., the vertical tool)"
 msgstr ""
+"Перамыкае бачнасць панэлі прылад рэдагавання (г.зн. вертыкальнай панэлі)"
 
 msgid "Preset preferences"
-msgstr ""
+msgstr "Налады нарыхтовак"
 
 msgid "Click to open the tagging presets tab in the preferences"
-msgstr ""
+msgstr "Пстрыкніце, каб адкрыць укладку нарыхтовак тэгаў у наладах"
 
 msgid "Imagery preferences"
-msgstr ""
+msgstr "Налады здымкаў"
 
 msgid "Click to open the imagery tab in the preferences"
-msgstr ""
+msgstr "Пстрыкніце, каб адкрыць укладку здымкаў у наладах"
 
 msgid "Search menu items"
-msgstr ""
+msgstr "Пошук пунктаў меню"
 
+msgctxt "menu"
 msgid "Audio"
-msgstr ""
+msgstr "Аўдыё"
 
 msgid "Do not hide toolbar"
-msgstr ""
+msgstr "Не хаваць панэль прылад"
 
 msgid "Hide this button"
-msgstr ""
+msgstr "Схаваць гэту кнопку"
 
 msgid "Click the arrow at the bottom to show it again."
-msgstr ""
+msgstr "Націснуць стрэлку ўнізе, каб паказаць ізноў."
 
 msgid "Hide edit toolbar"
-msgstr ""
+msgstr "Схаваць панэль прылад рэдагавання"
 
 msgid "Hide or show this toggle button"
-msgstr ""
+msgstr "Схаваць ці паказаць кнопку пераключэння"
 
 msgid "Move right"
-msgstr ""
+msgstr "Рух направа"
 
 msgid "Map: {0}"
-msgstr ""
+msgstr "Карта: {0}"
 
 msgid "Move left"
-msgstr ""
+msgstr "Рух налева"
 
 msgid "Move up"
-msgstr ""
+msgstr "Рух угару"
 
 msgid "Move down"
-msgstr ""
+msgstr "Рух уніз"
 
 msgid "Zoom in"
-msgstr ""
+msgstr "Павялічыць маштаб"
 
 msgid "Zoom out"
-msgstr ""
+msgstr "Паменшыць маштаб"
 
 msgid "scale"
-msgstr ""
+msgstr "маштаб"
 
 msgid "Status bar background"
-msgstr ""
+msgstr "Фон радка стану"
 
 msgid "Status bar background: active"
-msgstr ""
+msgstr "Фон радка стану: актыўная"
 
 msgid "Status bar foreground"
-msgstr ""
+msgstr "Пярэдні план радка стану"
 
 msgid "Status bar foreground: active"
-msgstr ""
+msgstr "Пярэдні план радка стану: актыўная"
 
 msgid "{0} ({1})"
-msgstr ""
+msgstr "{0} ({1})"
 
 msgid "The geographic latitude at the mouse pointer."
-msgstr ""
+msgstr "Геаграфічная шырата становішча курсора"
 
 msgid "The geographic longitude at the mouse pointer."
-msgstr ""
+msgstr "Геаграфічная даўгата становішча курсора"
 
 msgid "The (compass) heading of the line segment being drawn."
-msgstr ""
+msgstr "Шляхавы вугал ствараемага сегмента"
 
 msgid "The angle between the previous and the current way segment."
-msgstr ""
+msgstr "Кут паміж папярэднім і бягучым сегментам лініі"
 
 msgid "The length of the new way segment being drawn."
-msgstr ""
+msgstr "Даўжыня ствараемага сегмента лініі"
 
 msgid "The name of the object at the mouse pointer."
-msgstr ""
+msgstr "Назва аб’екта, на які наведзены курсор"
 
 msgid ""
 "Middle click again to cycle through.<br>Hold CTRL to select directly from "
 "this list with the mouse.<hr>"
 msgstr ""
+"Націсніце на сярэднюю клавішу яшчэ раз, каб пераключыцца на наступны "
+"элемент.<br>Утрымлівайце CTRL, каб выбраць мышкай, наўпрост з спісу.<hr>"
 
 msgid "(no object)"
-msgstr ""
+msgstr "(няма аб’екта)"
 
 msgid "User:"
-msgstr ""
+msgstr "Карыстальнік:"
 
 msgid "Do not hide status bar"
-msgstr ""
+msgstr "Не хаваць радок стану"
 
 msgid "System of measurement changed to {0}"
-msgstr ""
+msgstr "Сістэма вымярэнняў зменена на {0}"
 
 msgid "Layer not in list."
-msgstr ""
+msgstr "Пласт не ў спісе."
 
 msgid "Layer ''{0}'' must be in list of layers"
-msgstr ""
+msgstr "Пласт ''{0}'' павінен быць у спісе пластоў"
 
 msgid "Default (open, closed, new)"
-msgstr ""
+msgstr "Па змаўчанні (адкрытыя, зачыненыя, новыя)"
 
 msgid "Username"
-msgstr ""
+msgstr "Імя карыстальніка"
 
 msgid "Created date"
-msgstr ""
+msgstr "Дата стварэння"
 
 msgid "Last change date"
-msgstr ""
+msgstr "Дата апошняй змены"
 
 msgid "Select note sorting method"
-msgstr ""
+msgstr "Абярыце метад сартавання нататак"
 
 msgid "Click to cancel the current operation"
-msgstr ""
+msgstr "Націсніце, каб адмяніць бягучую аперацыю"
 
 msgid "In background"
-msgstr ""
+msgstr "У фоне"
 
 msgid "Click to run job in background"
-msgstr ""
-
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
+msgstr "Націсніце, для запуску задачы ў фонавым рэжыме"
 
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr ""
-
-msgid "Pos."
-msgstr ""
+msgid " ({0})"
+msgstr " ({0})"
 
-msgid "Role"
-msgstr ""
+msgid "{0} completed in {1}"
+msgstr "{0} завершана за {1}"
 
-msgid "Click to close the dialog and remove the object from the relations"
-msgstr ""
+msgid "Enlarge"
+msgstr "Пашырыць"
 
-msgid "Click to close the dialog and to abort deleting the objects"
-msgstr ""
+msgid "Shrink"
+msgstr "Сціснуць"
 
 msgid ""
 "<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
 "level.</html>"
 msgstr ""
+"<html>Калі ласка, абярыце <strong>дыяпазон квадратаў OSM</strong> на "
+"дадзеным узроўні маштабавання.</html>"
 
 msgid "Zoom level:"
-msgstr ""
+msgstr "Узровень маштабавання:"
 
 msgid "from tile"
-msgstr ""
+msgstr "з квадрата"
 
 msgid "up to tile"
-msgstr ""
+msgstr "да квадрата"
 
 msgid ""
 "<html>Alternatively you may enter a <strong>tile address</strong> for a "
@@ -5002,477 +5367,522 @@ msgid ""
 "addresses in the format <i>zoom,x,y</i> or <i>zoom;x;y</i> are valid "
 "too.</html>"
 msgstr ""
+"<html>Таксама можна ўвесці <strong>адрас квадрата</strong> для аднаго "
+"квадрата ў фармаце <i>zoomlevel/x/y</i>, напрыклад <i>15/256/223</i>. Адрасы "
+"квадратаў у фармаце <i>zoom,x,y</i> ці <i>zoom;x;y</i> таксама "
+"дакладныя.</html>"
 
 msgid "Tile address:"
-msgstr ""
+msgstr "Адрас квадрата:"
 
 msgid "Apply the tile address"
-msgstr ""
+msgstr "Прызначыць адрас квадрата"
 
 msgid "Please enter a tile address"
-msgstr ""
+msgstr "Калі ласка, увядзіце адрас квадрата"
 
 msgid "The current value isn''t a valid tile address"
-msgstr ""
+msgstr "Бягучае значэнне не з’яўляецца правільным адрасам"
 
 msgid "Please enter a tile index"
-msgstr ""
+msgstr "Калі ласка, увядзіце індэкс квадрата"
 
 msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr ""
+"Бягучае значэнне не з’яўляецца правільным індэксам квадрата для дадзенага "
+"ўзроўня маштабавання"
 
 msgid "Conflict background: no conflict"
-msgstr ""
+msgstr "Фон канфлікту: няма канфлікту"
 
 msgid "Conflict background: decided"
-msgstr ""
+msgstr "Фон канфлікту: вырашана"
 
 msgid "Conflict background: undecided"
-msgstr ""
+msgstr "Фон канфлікту: не вырашана"
 
 msgid "Conflict background: drop"
-msgstr ""
+msgstr "Фон канфлікту: прыбраць"
 
 msgid "Conflict background: keep"
-msgstr ""
+msgstr "Фон канфлікту: пакінуць"
 
 msgid "Conflict background: combined"
-msgstr ""
+msgstr "Фон канфлікту: аб’яднаны"
 
 msgid "Conflict background: selected"
-msgstr ""
+msgstr "Фон канфлікту: абраны"
 
 msgid "Conflict foreground: undecided"
-msgstr ""
+msgstr "Пярэдні план канфлікту: не вырашана"
 
 msgid "Conflict foreground: drop"
-msgstr ""
+msgstr "Пярэдні план канфлікту: прыбраць"
 
 msgid "Conflict foreground: keep"
-msgstr ""
+msgstr "Пярэдні план канфлікту: пакінуць"
 
 msgid "Conflict background: empty row"
-msgstr ""
+msgstr "Фон канфлікту: пусты шэраг"
 
 msgid "Conflict background: frozen"
-msgstr ""
+msgstr "Фон канфлікту: заблакаваны"
 
 msgid "Conflict background: in comparison"
-msgstr ""
+msgstr "Фон канфлікту: у параўнанні"
 
 msgid "Conflict foreground: in comparison"
-msgstr ""
+msgstr "Пярэдні план канфлікту: у параўнанні"
 
 msgid "Conflict background"
-msgstr ""
+msgstr "Фон канфлікту"
 
 msgid "Conflict foreground"
-msgstr ""
+msgstr "Пярэдні план канфлікту"
 
 msgid "Conflict background: not in opposite"
-msgstr ""
+msgstr "Фон канфлікту: не супрацьпастаўлены"
 
 msgid "Conflict background: in opposite"
-msgstr ""
+msgstr "Фон канфлікту: супрацьпастаўлены"
 
 msgid "Conflict background: same position in opposite"
-msgstr ""
+msgstr "Фон канфлікту: тая ж процілеглая пазіцыя"
 
 msgid "Conflict background: keep one tag"
-msgstr ""
+msgstr "Фон канфлікту: пакінуць адзін тэг"
 
 msgid "Conflict foreground: keep one tag"
-msgstr ""
+msgstr "Пярэдні план канфлікту: пакінуць адзін тэг"
 
 msgid "Conflict background: drop tag"
-msgstr ""
+msgstr "Фон канфлікту: прыбраць тэг"
 
 msgid "Conflict foreground: drop tag"
-msgstr ""
+msgstr "Пярэдні план канфлікту: прыбраць тэг"
 
 msgid "Conflict background: keep all tags"
-msgstr ""
+msgstr "Фон канфлікту: пакінуць усе тэгі"
 
 msgid "Conflict foreground: keep all tags"
-msgstr ""
+msgstr "Пярэдні план канфлікту: пакінуць усе тэгі"
 
 msgid "Conflict background: sum all numeric tags"
-msgstr ""
+msgstr "Фон канфлікту: сума ўсіх лікавых тэгаў"
 
 msgid "Conflict foreground: sum all numeric tags"
-msgstr ""
+msgstr "Пярэдні план канфлікту: сума ўсіх лікавых тэгаў"
 
 msgid "Conflict background: keep member"
-msgstr ""
+msgstr "Фон канфлікту: пакінуць удзельніка"
 
 msgid "Conflict foreground: keep member"
-msgstr ""
+msgstr "Пярэдні план канфлікту: пакінуць удзельніка"
 
 msgid "Conflict background: remove member"
-msgstr ""
+msgstr "Фон канфлікту: прыбраць удзельніка"
 
 msgid "Conflict foreground: remove member"
-msgstr ""
+msgstr "Пярэдні план канфлікту: прыбраць удзельніка"
 
 msgid "My with Their"
-msgstr ""
+msgstr "Маю з іх"
 
 msgid "My with Merged"
-msgstr ""
+msgstr "Маю з аб’яднанай"
 
 msgid "Their with Merged"
-msgstr ""
+msgstr "Іх з аб’яднанай"
 
 msgid "Role {0} is not participating in compare pair {1}."
-msgstr ""
+msgstr "роля {0} не ўдзельнічае ў пары параўнання {1}"
 
 msgid "Properties"
-msgstr ""
+msgstr "Параметры"
 
 msgid "Tags"
-msgstr ""
+msgstr "Тэгі"
 
 msgid "Nodes"
-msgstr ""
+msgstr "Кропкі"
 
 msgid "Members"
-msgstr ""
+msgstr "Удзельнікі"
 
 msgid "No pending tag conflicts to be resolved"
-msgstr ""
+msgstr "Няма канфліктаў тэгаў"
 
 msgid "Tags({0} conflict)"
 msgid_plural "Tags({0} conflicts)"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Тэгі({0} канфлікт)"
+msgstr[1] "Тэгі({0} канфлікту)"
+msgstr[2] "Тэгі({0} канфліктаў)"
 
 msgid "{0} pending tag conflict to be resolved"
 msgid_plural "{0} pending tag conflicts to be resolved"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Трэба будзе вырашыць {0} адкладзены канфлікт тэгаў"
+msgstr[1] "Трэба будзе вырашыць {0} адкладзеных канфлікта тэгаў"
+msgstr[2] "Трэба будзе вырашыць {0} адкладзеных канфліктаў тэгаў"
 
 msgid "Nodes(resolved)"
-msgstr ""
+msgstr "Кропкі (без канфліктаў)"
 
 msgid ""
 "Merged node list frozen. No pending conflicts in the node list of this way"
 msgstr ""
+"Спіс аб’яднаных кропак замарожаны. Няма няўладжаных канфліктаў у спісе "
+"кропак гэтай лініі."
 
 msgid "Nodes(with conflicts)"
-msgstr ""
+msgstr "Кропкі (з канфліктамі)"
 
 msgid "Pending conflicts in the node list of this way"
-msgstr ""
+msgstr "Няўладжаныя канфлікты ў спісе кропак гэтай лініі"
 
 msgid "Members(resolved)"
-msgstr ""
+msgstr "Чальцы (без канфліктаў)"
 
 msgid ""
 "Merged member list frozen. No pending conflicts in the member list of this "
 "relation"
 msgstr ""
+"Аб’яднаны спіс удзельнікаў адносін замарожаны. Няма нявырашаных канфліктаў у "
+"спісе ўдзельнікаў гэтых адносін."
 
 msgid "Members(with conflicts)"
-msgstr ""
+msgstr "Удзельнікі адносін (з канфліктамі)"
 
 msgid "Pending conflicts in the member list of this relation"
-msgstr ""
+msgstr "Нявырашаныя канфлікты ў спісе ўдзельнікаў гэтых адносін"
 
 msgid "No pending property conflicts"
-msgstr ""
+msgstr "Няма актуальных канфліктаў уласцівасцяў"
 
 msgid "Properties(with conflicts)"
-msgstr ""
+msgstr "Уласцівасці (з канфліктамі)"
 
 msgid "Pending property conflicts to be resolved"
-msgstr ""
+msgstr "Канфлікты ўласцівасцяў, якія чакаюць вырашэння"
 
 msgid "Conflict Resolution"
-msgstr ""
+msgstr "Канфлікт у дазволе малюнка"
 
 msgid "{0} more..."
-msgstr ""
+msgstr "Яшчэ {0} ..."
 
 msgid ""
 "The following objects could not be copied to the target object<br>because "
 "they are deleted in the target dataset:"
 msgstr ""
+"Наступныя аб’екты не могуць быць скапіяваны ў мэтавы аб’ект<br>бо яны былі "
+"выдалены ў мэтавым наборы дадзеных:"
 
 msgid "Merging deleted objects failed"
-msgstr ""
+msgstr "Памылка аб’яднання выдаленых аб’ектаў"
 
 msgid "List in role {0} is currently not participating in a compare pair."
-msgstr ""
+msgstr "Спіс у ролі {0} ў сапраўдны момант не ўдзельнічае ў параўнанні пары."
 
 msgid "Unexpected value of parameter ''index''. Got {0}."
-msgstr ""
+msgstr "недапушчальнае значэнне параметру \"index\". Бягучае значэнне {0}"
 
 msgid "Item {0} not found in list."
-msgstr ""
+msgstr "пункт {0} не знойдзены ў спісе"
 
 msgid "lock scrolling"
-msgstr ""
+msgstr "блакаваць прагортку"
 
 msgid "Compare "
-msgstr ""
+msgstr "Параўнаць "
 
 msgid "My version"
-msgstr ""
+msgstr "Мая версія"
 
 msgid "List of elements in my dataset, i.e. the local dataset"
 msgstr ""
+"Спіс элементаў у маім наборы дадзеных, гэта значыць лакальным наборы дадзеных"
 
 msgid "Merged version"
-msgstr ""
+msgstr "Аб’яднаная версія"
 
 msgid ""
 "List of merged elements. They will replace the list of my elements when the "
 "merge decisions are applied."
 msgstr ""
+"Спіс аб''яднаных элементаў. Параметры ў маіх элементах будуць замененыя пры "
+"ўжыванні аб''яднання."
 
 msgid "Their version"
-msgstr ""
+msgstr "Іх версія"
 
 msgid "List of elements in their dataset, i.e. the server dataset"
-msgstr ""
+msgstr "Спіс элементаў у іх наборы дадзеных, набор дадзеных на серверы"
 
 msgid "> top"
-msgstr ""
+msgstr "> наверх"
 
 msgid "Copy my selected nodes to the start of the merged node list"
-msgstr ""
+msgstr "Скапіяваць вылучаныя кропкі ў пачатак спісу аб’яднаных кропак"
 
 msgid "> bottom"
-msgstr ""
+msgstr "> уніз"
 
 msgid "Copy my selected elements to the end of the list of merged elements."
-msgstr ""
+msgstr "Скапіяваць выдзеленыя элементы ў канец спісу аб’яднаных элементаў"
 
 msgid "> before"
-msgstr ""
+msgstr "> перад"
 
 msgid ""
 "Copy my selected elements before the first selected element in the list of "
 "merged elements."
 msgstr ""
+"Скапіяваць вылучаныя элементы перад першым вылучаным элементам у спісе "
+"аб''яднаных элементаў"
 
 msgid "> after"
-msgstr ""
+msgstr "> пасля"
 
 msgid ""
 "Copy my selected elements after the first selected element in the list of "
 "merged elements."
 msgstr ""
+"Скапіяваць мае вылучаныя элементы пасля першага вылучанага элемента ў спісе "
+"аб''яднаных элементаў"
 
 msgid "< top"
-msgstr ""
+msgstr "< угару"
 
 msgid ""
 "Copy their selected element to the start of the list of merged elements."
 msgstr ""
+"Скапіяваць іх выдзеленыя элементы ў пачатак спісу аб’яднаных элементаў"
 
 msgid "< bottom"
-msgstr ""
+msgstr "< уніз"
 
 msgid ""
 "Copy their selected elements to the end of the list of merged elements."
-msgstr ""
+msgstr "Скапіяваць іх выдзеленыя элементы ў канец спісу аб’яднаных элементаў"
 
 msgid "< before"
-msgstr ""
+msgstr "< перад"
 
 msgid ""
 "Copy their selected elements before the first selected element in the list "
 "of merged elements."
 msgstr ""
+"Скапіяваць іх выдзеленыя элементы перад першым вылучаным элементам у спісе "
+"аб’яднаных элементаў"
 
 msgid "< after"
-msgstr ""
+msgstr "< пасля"
 
 msgid ""
 "Copy their selected element after the first selected element in the list of "
 "merged elements"
 msgstr ""
+"Скапіяваць іх вылучаныя элементы пасля першага вылучанага элемента ў спісе "
+"аб’яднаных элементаў"
 
 msgid "Copy all my elements to the target"
-msgstr ""
+msgstr "Скапіяваць усе мае элементы ў месца прызначэння"
 
 msgid "Copy all their elements to the target"
-msgstr ""
+msgstr "Скапіяваць усе чужыя элементы ў месца прызначэння"
 
 msgid "Up"
-msgstr ""
+msgstr "Угару"
 
 msgid "Move up the selected entries by one position."
-msgstr ""
+msgstr "Перамясціць вылучаныя запісы ўгару на адну пазіцыю."
 
 msgid "Down"
-msgstr ""
+msgstr "Уніз"
 
 msgid "Move down the selected entries by one position."
-msgstr ""
+msgstr "Апусціць вылучаныя элементы на адну пазіцыю"
 
 msgid "Remove"
-msgstr ""
+msgstr "Выдаліць"
 
 msgid "Remove the selected entries from the list of merged elements."
-msgstr ""
+msgstr "Выдаліць вылучаныя запісы са спісу аб’яднаных элементаў"
 
 msgid "Freeze"
-msgstr ""
+msgstr "Заблакаваць"
 
 msgid "Freeze the current list of merged elements."
-msgstr ""
+msgstr "Заблакаваць бягучы спіс аб’яднаных элементаў"
 
 msgid "Unfreeze"
-msgstr ""
+msgstr "Разблакаваць"
 
 msgid "Unfreeze the list of merged elements and start merging."
-msgstr ""
+msgstr "Разблакаваць спіс аб’яднаных элементаў і пачаць аб’яднанне"
 
 msgid ""
 "<html>Click <strong>{0}</strong> to start merging my and their "
 "entries.</html>"
 msgstr ""
+"<html>Націсніце <strong>{0}</strong>, каб пачаць аб’яднанне маіх і іх "
+"запісаў</html>"
 
 msgid ""
 "<html>Click <strong>{0}</strong> to finish merging my and their "
 "entries.</html>"
 msgstr ""
+"<html>Націсніце <strong>{0}</strong>, каб скончыць аб’яднанне маіх і іх "
+"запісаў</html>"
 
 msgid "My version ({0} entry)"
 msgid_plural "My version ({0} entries)"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Мая версія ({0} запіс)"
+msgstr[1] "Мая версія ({0} запісы)"
+msgstr[2] "Мая версія ({0} запісаў)"
 
 msgid "Merged version ({0} entry)"
 msgid_plural "Merged version ({0} entries)"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Аб’яднаная версія ({0} запіс)"
+msgstr[1] "Аб’яднаная версія ({0} запісы)"
+msgstr[2] "Аб’яднаная версія ({0} запісаў)"
 
 msgid "Their version ({0} entry)"
 msgid_plural "Their version ({0} entries)"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Іх версія ({0} запіс)"
+msgstr[1] "Іх версія ({0} запісаў)"
+msgstr[2] "Іх версія ({0} запісаў)"
 
 msgid "Node"
-msgstr ""
+msgstr "Кропка"
 
 msgid "Merged nodes not frozen yet. Cannot build resolution command."
 msgstr ""
+"Аб’яднаныя кропкі яшчэ не заблакаваныя. Немагчыма пабудаваць каманду "
+"ліквідацыі канфліктаў."
 
 msgid "Properties in my dataset, i.e. the local dataset"
 msgstr ""
+"Уласцівасці ў маім наборы дадзеных, гэта значыць лакальным наборы дадзеных"
 
 msgid ""
 "Properties in the merged element. They will replace properties in my "
 "elements when merge decisions are applied."
 msgstr ""
+"Параметры ў аб’яднаным элеменце. Параметры ў маіх элементах будуць заменены "
+"пры ўжыванні аб’яднання."
 
 msgid "Properties in their dataset, i.e. the server dataset"
 msgstr ""
+"Уласцівасці ў іх наборы дадзеных, гэта значыць серверным наборы дадзеных"
 
 msgid "Coordinates:"
-msgstr ""
+msgstr "Каардынаты:"
 
 msgid "Deleted State:"
-msgstr ""
+msgstr "Выдалены:"
 
 msgid "Referenced by:"
-msgstr ""
+msgstr "Спасылкі звонку:"
 
 msgid "(none)"
-msgstr ""
+msgstr "(адсутнічае)"
 
 msgid "deleted"
-msgstr ""
+msgstr "выдалены"
 
 msgid "not deleted"
-msgstr ""
+msgstr "не выдалены"
 
 msgid "Keep my coordinates"
-msgstr ""
+msgstr "Захоўваць мае каардынаты"
 
 msgid "Keep their coordinates"
-msgstr ""
+msgstr "Захоўваць іх каардынаты"
 
 msgid "Undecide conflict between different coordinates"
-msgstr ""
+msgstr "Не ўладжваць канфлікт паміж рознымі каардынатамі"
 
 msgid "Keep my deleted state"
-msgstr ""
+msgstr "Пакінуць мой стан \"Выдалены\""
 
 msgid "Keep their deleted state"
-msgstr ""
+msgstr "Пакінуць іх стан \"Выдалены\""
 
 msgid "Undecide conflict between deleted state"
-msgstr ""
+msgstr "Не ўладжваць канфлікт паміж выдаленымі станамі"
+
+msgid "Role"
+msgstr "Роля"
 
 msgid "Primitive"
-msgstr ""
+msgstr "Элемент"
 
 msgid "Merged nodes not frozen yet. Cannot build resolution command"
 msgstr ""
+"Аб’яднаныя кропкі яшчэ не заблакаваныя. Немагчыма пабудаваць каманду "
+"ліквідацыі канфліктаў"
 
 msgid "<undefined>"
-msgstr ""
+msgstr "<не вызначана>"
 
 msgid "The merged dataset will not include a tag with key {0}"
-msgstr ""
+msgstr "Аб’яднаны набор дадзеных не будзе ўтрымоўваць тэг з ключом {0}"
 
 msgid "My dataset does not include a tag with key {0}"
-msgstr ""
+msgstr "Мой набор дадзеных не ўтрымоўвае тэг з ключом {0}"
 
 msgid "Key"
-msgstr ""
+msgstr "Ключ"
 
 msgid "Value"
-msgstr ""
+msgstr "Значэнне"
 
 msgid "Cannot apply undecided tag merge item."
 msgstr ""
+"Немагчыма прымяніць тэг аб''яднанага элемента з-за нявырашанага канфлікту"
 
 msgid "My version (local dataset)"
-msgstr ""
+msgstr "Мая версія (лакальны набор дадзеных)"
 
 msgid "Their version (server dataset)"
-msgstr ""
+msgstr "Іх версія (серверны набор дадзеных)"
 
 msgid "Keep the selected key/value pairs from the local dataset"
-msgstr ""
+msgstr "Пакінуць вылучаныя пары ключ/значэнне з лакальнага набору дадзеных"
 
 msgid "Keep the selected key/value pairs from the server dataset"
-msgstr ""
+msgstr "Пакінуць вылучаныя пары ключ/значэнне з сервернага набору дадзеных"
 
 msgid "Undecide"
-msgstr ""
+msgstr "Аднавіць канфлікт"
 
 msgid "Mark the selected tags as undecided"
-msgstr ""
+msgstr "Пазначыць вылучаныя тэгі, як няўладжаныя канфлікты"
 
 msgid "Their dataset does not include a tag with key {0}"
-msgstr ""
+msgstr "Іх набор дадзеных не ўтрымоўвае тэг з ключом {0}"
 
 msgid "Conflicts when combining primitives"
-msgstr ""
+msgstr "Дыялог вырашэння канфліктаў"
 
 msgid "Conflicts when combining ways - combined way is ''{0}''"
-msgstr ""
+msgstr "Паўсталі канфлікты пры аб’яднанні ліній - атрыманая лінія: ''{0}''"
 
 msgid "Conflicts when merging nodes - target node is ''{0}''"
-msgstr ""
+msgstr "Паўсталі канфлікты пры аб’яднанні кропак - атрыманая кропка ''{0}''"
 
 msgid "No conflicts to resolve"
-msgstr ""
+msgstr "Канфліктаў не выяўлена"
 
 msgid "Cancel conflict resolution"
-msgstr ""
+msgstr "Адмяніць уладжванне канфліктаў"
 
 msgid "Apply resolved conflicts"
-msgstr ""
+msgstr "Ужыць уладжаныя канфлікты"
 
 msgid "Apply"
-msgstr ""
+msgstr "Ужыць"
 
 msgid ""
 "You are about to combine {1} object, which is part of {0} "
@@ -5487,16 +5897,32 @@ msgid_plural ""
 "are shown a dialog to decide how to adapt the relations.<br/><br/>Do you "
 "want to continue?"
 msgstr[0] ""
+"Вы збіраецеся аб''яднаць {1} аб''ект, які з''яўляецца часткай {0} "
+"адносін:<br/>{2}Аб''яднанне гэтых аб''ектаў можа паламаць адносіны. Калі вы "
+"не ўпэўненыя, адмяніце гэта дзеянне.<br/>Калі хочаце працягнуць, будзе "
+"паказаны дыялог, які дазваляе вырашыць, як змяніць "
+"адносіны.<br/><br/>Працягнуць?"
 msgstr[1] ""
+"Вы збіраецеся аб''яднаць {1} аб''екты, якія з''яўляюцца часткай {0} "
+"адносін:<br/>{2}Аб''яднанне гэтых аб''ектаў можа паламаць адносіны. Калі вы "
+"не ўпэўненыя, адмяніце гэта дзеянне.<br/>Калі хочаце працягнуць, будзе "
+"паказаны дыялог, які дазваляе вырашыць, як змяніць "
+"адносіны.<br/><br/>Працягнуць?"
+msgstr[2] ""
+"Вы збіраецеся аб''яднаць {1} аб''ектаў, якія з''яўляюцца часткай {0} "
+"адносін:<br/>{2}Аб''яднанне гэтых аб''ектаў можа паламаць адносіны. Калі вы "
+"не ўпэўненыя, адмяніце гэта дзеянне.<br/>Калі хочаце працягнуць, будзе "
+"паказаны дыялог, які дазваляе вырашыць, як змяніць "
+"адносіны.<br/><br/>Працягнуць?"
 
 msgid "Combine confirmation"
-msgstr ""
+msgstr "Пацверджанне аб’яднання"
 
 msgid ", "
-msgstr ""
+msgstr ", "
 
 msgid "<i>missing</i>"
-msgstr ""
+msgstr "<i>адсутнічае</i>"
 
 msgid ""
 "You are about to combine {0} objects, but the following tags are used "
@@ -5509,123 +5935,145 @@ msgid_plural ""
 "may have unwanted tags.<br/>If you want to continue, you are shown a dialog "
 "to fix the conflicting tags.<br/><br/>Do you want to continue?"
 msgstr[0] ""
+"Вы збіраецеся аб’яднаць {0} аб’ект з наступнымі канфліктуючымі "
+"тэгамі:<br/>{1}. Атрыманы ў выніку аб’яднання аб’ект можа мець непажаданыя "
+"тэгі.<br/>Калі вы жадаеце працягнуць аб’яднанне, будзе паказаны дыялог для "
+"выпраўлення канфліктуючых тэгаў.<br/><br/>Жадаеце працягнуць?"
 msgstr[1] ""
+"Вы збіраецеся аб’яднаць {0} аб’екта з наступнымі канфліктуючымі "
+"тэгамі:<br/>{1}. Атрыманы ў выніку аб’яднання аб’ект можа мець непажаданыя "
+"тэгі.<br/>Калі вы жадаеце працягнуць аб’яднанне, будзе паказаны дыялог для "
+"выпраўлення канфліктуючых тэгаў.<br/><br/>Жадаеце працягнуць?"
+msgstr[2] ""
+"Вы збіраецеся аб’яднаць {0} аб’ектаў з наступнымі канфліктуючымі "
+"тэгамі:<br/>{1}. Атрыманы ў выніку аб’яднання аб’ект можа мець непажаданыя "
+"тэгі.<br/>Калі вы жадаеце працягнуць аб’яднанне, будзе паказаны дыялог для "
+"выпраўлення канфліктуючых тэгаў.<br/><br/>Жадаеце працягнуць?"
 
 msgid "Choose a value"
-msgstr ""
+msgstr "Абярыце значэнне"
 
 msgid "none"
-msgstr ""
+msgstr "нічога"
 
 msgid "all"
-msgstr ""
+msgstr "усё"
 
 msgid "sum"
-msgstr ""
+msgstr "сума"
 
 msgid "Please decide which values to keep"
-msgstr ""
+msgstr "Калі ласка, вырашыце, якія значэнні захаваць"
 
 msgid "Value ''{0}'' is going to be applied for key ''{1}''"
-msgstr ""
+msgstr "Значэнне ''{0}'' будзе прысвоена ключу ''{1}''"
 
 msgid ""
 "All numeric values sumed as ''{0}'' are going to be applied for key ''{1}''"
 msgstr ""
+"Сума ўсіх лікавых значэнняў, роўная ''{0}'', будзе прысвоена ключу ''{1}''"
 
 msgid "The key ''{0}'' and all its values are going to be removed"
-msgstr ""
+msgstr "Ключ ''{0}'' і ўсе яго значэнні будуць выдалены"
 
 msgid "All values joined as ''{0}'' are going to be applied for key ''{1}''"
-msgstr ""
+msgstr "Усе далучаныя значэнні ''{0}'' будуць прысвоены ключу ''{1}''"
 
 msgid "Tag collection does not include the selected value ''{0}''."
-msgstr ""
+msgstr "набор тэгаў не ўтрымоўвае вылучанае значэнне ''{0}''"
 
 msgid "Not decided yet."
-msgstr ""
+msgstr "Яшчэ не вырашана"
 
 msgid "Tags from nodes"
-msgstr ""
+msgstr "Тэгі кропак"
 
 msgid "Tags from ways"
-msgstr ""
+msgstr "Тэгі ліній"
 
 msgid "Tags from relations"
-msgstr ""
+msgstr "Тэгі адносін"
 
 msgid "Conflicts in pasted tags"
-msgstr ""
+msgstr "Канфлікты ва ўстаўленых тэгах"
 
 msgid "Paste ..."
-msgstr ""
+msgstr "Уставіць ..."
 
 msgid "From ..."
-msgstr ""
+msgstr "З ..."
 
 msgid "To ..."
-msgstr ""
+msgstr "У ..."
 
 msgid "{0} tag"
 msgid_plural "{0} tags"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} тэг"
+msgstr[1] "{0} тэга"
+msgstr[2] "{0} тэгаў"
 
 msgid "{0} way"
 msgid_plural "{0} ways"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} лінія"
+msgstr[1] "{0} лініі"
+msgstr[2] "{0} ліній"
 
 msgid "{0} relation"
 msgid_plural "{0} relations"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} адносіны"
+msgstr[1] "{0} адносін"
+msgstr[2] "{0} адносін"
 
 msgid "Position {0} is out of range. Current number of members is {1}."
 msgstr ""
+"Пазіцыя {0} за межамі дапушчальнага. Бягучая колькасць удзельнікаў {1}."
 
 msgid "Remove this relation member from the relation"
-msgstr ""
+msgstr "Выдаліць гэтага ўдзельніка з адносін"
 
 msgid "Keep"
-msgstr ""
+msgstr "Захаваць"
 
 msgid "Keep this relation member for the target object"
-msgstr ""
+msgstr "Аб''яднаны аб''ект зойме месца зыходнага ў гэтых адносінах"
 
 msgid "Undecided"
-msgstr ""
+msgstr "Нявырашаны"
 
 msgid "Not decided yet"
-msgstr ""
+msgstr "Яшчэ не вырашана"
 
 msgid "Role:"
-msgstr ""
+msgstr "Роля:"
 
 msgid "Enter a role for all relation memberships"
-msgstr ""
+msgstr "Вызначце ролю для ўсіх удзельнікаў адносін"
 
 msgid "Tag modified relations with "
-msgstr ""
+msgstr "Пазначыць змененыя адносіны тэгам "
 
 msgid ""
 "<html>Select to enable entering a tag which will be applied<br>to all "
 "modified relations.</html>"
 msgstr ""
+"<html>Адзначце, які тэг будзе прызначаны <br>на ўсе змененыя адносіны.</html>"
 
 msgctxt "tag"
 msgid "Key:"
-msgstr ""
+msgstr "Ключ:"
 
 msgid "<html>Enter a tag key, e.g. <strong><tt>fixme</tt></strong></html>"
 msgstr ""
+"<html>Увядзіце ключ тэга, напрыклад: <strong><tt>fixme</tt></strong></html>"
 
 msgid "Value:"
-msgstr ""
+msgstr "Значэнне:"
 
 msgid ""
 "<html>Enter a tag value, e.g. <strong><tt>check members</tt></strong></html>"
 msgstr ""
+"<html>Увядзіце значэнне тэга, напрыклад: <strong><tt>check "
+"members</tt></strong></html>"
 
 msgid ""
 "<html>The combined ways are members in one or more relations. Please decide "
@@ -5635,6 +6083,12 @@ msgid ""
 "ways that are members of the same relation: the combined way will take the "
 "place of the original way in the relation.</html>"
 msgstr ""
+"<html>Аб’яднаныя лініі з’яўляюцца членамі адных або некалькіх адносін. Калі "
+"ласка, вырашыце, ці вы хочаце <strong>пакінуць</strong> аб’яднаную лінію "
+"членам адносін, або <strong>выдаліць</strong> яе з адносін.<br>Тыпова першая "
+"лінія <strong>застаецца</strong> членам адносін, а іншыя лініі "
+"<strong>прыбіраюцца</ strong> з адных і тых жа адносін: аб’яднаная лінія "
+"займае месца арыгінальнай лініі ў адносінах.</html>"
 
 msgid ""
 "<html>The merged nodes are members in one or more relations. Please decide "
@@ -5644,137 +6098,156 @@ msgid ""
 "other nodes that are members of the same relation: the target node will take "
 "the place of the original node in the relation.</html>"
 msgstr ""
+"<html>Аб''ядноўваемыя кропкі ўдзельнічаюць у адных або некалькіх адносінах. "
+"Вырашыце, ці трэба <strong>пакінуць</strong> гэты ўдзел у выніковай кропцы "
+"або <strong>прыбраць</strong> яго.<br>Па змаўчанні "
+"<strong>пакідаецца</strong> першая кропка і <strong>прыбіраюцца</strong> ўсе "
+"астатнія, якія ўдзельнічаюць у тых жа адносінах: атрыманая кропка зойме "
+"месца зыходнай кропкі ў адносінах.</html>"
 
 msgid "Apply this role to all members"
-msgstr ""
+msgstr "Прызначыць гэту ролю ўсім удзельнікам"
+
+msgid "Pos."
+msgstr "Паз."
 
 msgid "Orig. Way"
-msgstr ""
+msgstr "Арыг. Лін."
 
 msgid "Decision"
-msgstr ""
+msgstr "Рашэнне"
 
 msgid "<html>Please select the values to keep for the following tags.</html>"
 msgstr ""
+"<html>Калі ласка, абярыце, якія значэнні захаваць для новых тэгаў.</html>"
 
 msgid "Show tags with conflicts only"
-msgstr ""
+msgstr "Паказаць толькі тэгі з канфліктамі"
 
 msgid "Show tags with multiple values only"
-msgstr ""
+msgstr "Паказаць толькі тэгі з некалькімі значэннямі"
 
 msgid "For selected objects only"
-msgstr ""
+msgstr "Толькі для абраных аб’ектаў"
 
 msgid ""
 "<html>Select to show changesets for the currently selected objects "
 "only.<br>Unselect to show all changesets for objects in the current data "
 "layer.</html>"
 msgstr ""
+"<html>Выберыце для паказу наборы паправак толькі абраных "
+"аб’ектаў.<br>Скіньце выбар, каб паказаць наборы паправак для ўсіх аб’ектаў "
+"бягучага пласта.</html>"
 
 msgid "Changesets"
-msgstr ""
+msgstr "Пакеты правак"
 
 msgid "Open the list of changesets in the current layer."
-msgstr ""
+msgstr "Адкрыць спіс пакетаў правак у бягучым пласце."
 
 msgid "Select all objects assigned to the currently selected changesets"
-msgstr ""
+msgstr "Вылучыць ўсе аб’екты, якія адносяцца да абранымх пакетаў правак"
 
 msgid "Download"
 msgstr "Сцягнуць"
 
 msgid ""
 "Download information about the selected changesets from the OSM server"
-msgstr ""
+msgstr "Запампаваць дадзеныя пра абраныя пакеты правак з сервера OSM"
 
 msgid "Closes the selected open changesets"
-msgstr ""
+msgstr "Зачыняе абраныя адкрытыя пакеты правак"
 
 msgid "Show info"
-msgstr ""
+msgstr "Паказаць інфармацыю"
 
 msgid "Open a web page for each selected changeset"
-msgstr ""
+msgstr "Адкрыць вэб-старонку для абранага пакета правак"
 
 msgid "Details"
-msgstr ""
+msgstr "Падрабязнасці"
 
 msgid "Opens the Changeset Manager window for the selected changesets"
-msgstr ""
+msgstr "Адкрыць мэнэджар пакетаў правак для абраных пакетаў"
 
 msgid "Command Stack"
-msgstr ""
+msgstr "Спіс змен"
 
 msgid "Open a list of all commands (undo buffer)."
-msgstr ""
+msgstr "Паказаць спіс усіх дзеянняў (буфер адмены)"
 
 msgid "Toggle: {0}"
-msgstr ""
+msgstr "Паказаць/Схаваць: {0}"
 
 msgid "Command Stack: Undo: {0} / Redo: {1}"
-msgstr ""
+msgstr "Стэк каманд: адмяніць: {0} / вярнуць: {1}"
 
 msgid ""
 "Selects the objects that take part in this command (unless currently deleted)"
 msgstr ""
+"Выбар аб’ектаў, якія ўтрымоўваюцца ў гэтай камандзе (акрамя выдаленых)"
 
 msgid "Select and zoom"
-msgstr ""
+msgstr "Вылучыць і наблізіць"
 
 msgid ""
 "Selects the objects that take part in this command (unless currently "
 "deleted), then and zooms to it"
 msgstr ""
+"Вылучыць аб’екты, закранутыя камандай (акрамя выдаленых), і наблізіцца да іх"
 
 msgid "Undo the selected and all later commands"
-msgstr ""
+msgstr "Адмяніць усе абраныя і старыя каманды"
 
 msgid "Redo the selected and all earlier commands"
-msgstr ""
+msgstr "Аднавіць усе абраныя і раннія каманды"
 
 msgid "Resolve conflicts."
-msgstr ""
+msgstr "Уладзіць канфлікты."
 
 msgid "Conflict: {0} unresolved"
 msgid_plural "Conflicts: {0} unresolved"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Канфлікт: {0} не ўладжаны"
+msgstr[1] "Канфлікты: {0} не ўладжана"
+msgstr[2] "Канфлікты: {0} не ўладжана"
 
 msgid "Rel.:{0} / Ways:{1} / Nodes:{2}"
-msgstr ""
+msgstr "Адн.:{0} / Лін.:{1} / Кроп.:{2}"
 
 msgid "Resolve"
-msgstr ""
+msgstr "Уладзіць"
 
 msgid "Open a merge dialog of all selected items in the list above."
 msgstr ""
+"Адкрыць дыялогавае акно для аб’яднання абраных у вышэйпаказаным спісе "
+"аб’ектаў."
 
 msgid "There was {0} conflict detected."
 msgid_plural "There were {0} conflicts detected."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Знойдзены {0} канфлікт."
+msgstr[1] "Знойдзена {0} канфлікты."
+msgstr[2] "Знойдзена {0} канфліктаў."
 
 msgid "Click to close this dialog and continue editing"
-msgstr ""
+msgstr "Націсніце, каб зачыніць гэты дыялог і працягнуць праўку"
 
 msgid "Conflicts detected"
-msgstr ""
+msgstr "Выяўлены канфлікты"
 
 msgid "Cancel conflict resolution and close the dialog"
-msgstr ""
+msgstr "Адмяніць уладжванне канфліктаў і зачыніць дыялог"
 
 msgid "Apply resolved conflicts and close the dialog"
-msgstr ""
+msgstr "Ужыць уладжванне канфліктаў і зачыніць дыялог"
 
 msgid "Apply Resolution"
-msgstr ""
+msgstr "Ужыць вырашэнне канфліктаў"
 
 msgid "Close anyway"
-msgstr ""
+msgstr "Зачыніць у любым выпадку"
 
 msgid "Continue resolving"
-msgstr ""
+msgstr "Працягнуць рашэнне"
 
 msgid ""
 "<html>You did not finish to merge the differences in this "
@@ -5784,758 +6257,911 @@ msgid ""
 "applied.</strong><br>Click <strong>{1}</strong> to return to resolving "
 "conflicts.</html>"
 msgstr ""
+"<html>Вы не скончылі аб’яднанне адрозненняў у гэтым канфлікце.<br>Уладжванне "
+"канфліктаў не будзе ўжыта датуль, пакуль усе адрозненні<br>не будуць "
+"апрацаваны.<br>Націсніце <strong>{0}</strong> каб зачыніць у любым "
+"выпадку.<strong> Ужо<br>апрацаваныя адрозненні не будуць "
+"ужыты.</strong><br>Націсніце <strong>{1}</strong>, каб вярнуцца да "
+"ўладжвання канфліктаў.</html>"
 
 msgid "Conflict not resolved completely"
-msgstr ""
+msgstr "Канфлікт уладжаны не цалкам"
 
 msgid "Resolve conflicts"
-msgstr ""
+msgstr "Уладзіць канфлікты"
 
 msgid "Resolve conflicts for ''{0}''"
+msgstr "Уладзіць канфлікты для ''{0}''"
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
 msgstr ""
+"<html>Калі ласка, пацвердзіце выдаленне <strong>1 аб''екта</strong> з "
+"<strong>1 адносін</strong>.</html>"
 
-msgid "Filter objects and hide/disable them."
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
 msgstr ""
+"<html>Калі ласка, пацвердзіце выдаленне <strong>1 аб’екта</strong> з "
+"<strong>{0} адносін</strong>.</html>"
 
-msgid "Enable filter"
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
 msgstr ""
+"<html>Калі ласка, пацвердзіце выдаленне <strong>{0} аб’ектаў</strong> з "
+"<strong>{1} адносін</strong>.</html>"
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] "Выдаленне {0} аб’екта"
+msgstr[1] "Выдаленне {0} аб’ектаў"
+msgstr[2] "Выдаленне {0} аб’ектаў"
+
+msgid "Delete objects"
+msgstr "Выдаліць аб’екты"
+
+msgid "To delete"
+msgstr "Выдаліць"
+
+msgid "From Relation"
+msgstr "З адносін"
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr "Пстрыкніце, каб зачыніць дыялог і выдаліць аб’ект з адносін"
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr "Пстрыкніце, каб зачыніць дыялог і адмяніць выдаленне аб’ектаў"
+
+msgid "Filter objects and hide/disable them."
+msgstr "Адфільтраваць аб’екты і схаваць/адключыць іх."
+
+msgid "Enable filter"
+msgstr "Уключыць фільтр"
 
 msgid "Multikey: {0}"
-msgstr ""
+msgstr "Мультыключ: {0}"
 
 msgid "Hide filter"
-msgstr ""
+msgstr "Схаваць фільтр"
 
 msgid "Hiding filter"
-msgstr ""
+msgstr "Хаваючы фільтар"
 
 msgid "Inverse filter"
-msgstr ""
+msgstr "Інвертаваць фільтр"
 
 msgid "Filter mode"
-msgstr ""
+msgstr "Рэжым фільтра"
 
 msgid "Add"
-msgstr ""
+msgstr "Дадаць"
 
 msgid "Add filter."
-msgstr ""
+msgstr "Дадаць фільтр."
 
 msgid "Edit filter."
-msgstr ""
+msgstr "Рэдагаваць фільтр."
 
 msgid "Delete filter."
-msgstr ""
+msgstr "Выдаліць фільтр."
 
 msgid "Move filter up."
-msgstr ""
+msgstr "Перамясціць фільтр угару."
 
 msgid "Move filter down."
-msgstr ""
+msgstr "Перамясціць фільтр уніз."
 
 msgid "Filter Hidden:{0} Disabled:{1}"
-msgstr ""
+msgstr "Фільтрам схавана:{0}, адключана:{1}"
 
 msgid "Error in filter"
-msgstr ""
+msgstr "Памылка ў фільтры"
 
 msgctxt "filter"
 msgid "E"
-msgstr ""
+msgstr "E"
 
 msgctxt "filter"
 msgid "H"
-msgstr ""
+msgstr "H"
 
 msgctxt "filter"
 msgid "Text"
-msgstr ""
+msgstr "Тэкст"
 
 msgctxt "filter"
 msgid "I"
-msgstr ""
+msgstr "I"
 
 msgctxt "filter"
 msgid "M"
-msgstr ""
+msgstr "M"
 
 msgctxt "filter"
 msgid "R"
-msgstr ""
+msgstr "R"
 
 msgctxt "filter"
 msgid "A"
-msgstr ""
+msgstr "A"
 
 msgctxt "filter"
 msgid "D"
-msgstr ""
+msgstr "D"
 
 msgctxt "filter"
 msgid "F"
-msgstr ""
+msgstr "F"
 
 msgid "<h2>Filter active</h2>"
-msgstr ""
+msgstr "<h2>Фільтр актыўны</h2>"
 
 msgid "<p><b>{0}</b> object hidden"
 msgid_plural "<p><b>{0}</b> objects hidden"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "<p><b>{0}</b> аб’ект утоены"
+msgstr[1] "<p><b>{0}</b> аб’екта ўтоена"
+msgstr[2] "<p><b>{0}</b> аб’ектаў утоена"
 
 msgid "<b>{0}</b> object disabled"
 msgid_plural "<b>{0}</b> objects disabled"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "<b>{0}</b> аб’ект адключаны"
+msgstr[1] "<b>{0}</b> аб’екта адключана"
+msgstr[2] "<b>{0}</b> аб’ектаў адключана"
 
 msgid "</p><p>Close the filter dialog to see all objects.<p></html>"
 msgstr ""
+"</p><p>Зачыніце дыялог фільтра, калі жадаеце ўбачыць усе аб’екты.<p></html>"
 
 msgid "Advanced object info"
-msgstr ""
+msgstr "Падрабязная інфармацыя"
 
 msgid "map style"
-msgstr ""
+msgstr "стыль карты"
 
-msgid " ({0})"
-msgstr ""
+msgid "edit counts"
+msgstr "колькасць правак"
 
 msgid "not in data set"
-msgstr ""
+msgstr "адсутнічае ў наборы дадзеных"
 
 msgid "Node: "
-msgstr ""
+msgstr "Кропка: "
 
 msgid "Way: "
-msgstr ""
+msgstr "Лінія: "
 
 msgid "Relation: "
-msgstr ""
+msgstr "Адносіны: "
 
 msgid "deleted-on-server"
-msgstr ""
+msgstr "выдалены-на-серверы"
 
 msgid "modified"
-msgstr ""
+msgstr "зменена"
 
 msgid "filtered/hidden"
-msgstr ""
+msgstr "адфільтраваны/утоены"
 
 msgid "filtered/disabled"
-msgstr ""
+msgstr "адфільтраваны/адключаны"
 
 msgid "has direction keys (reversed)"
-msgstr ""
+msgstr "мае тэгі кірунку (рэверсіўныя)"
 
 msgid "has direction keys"
-msgstr ""
+msgstr "мае тэгі кірунку"
 
 msgid "State: "
-msgstr ""
+msgstr "Стан: "
 
 msgid "Data Set: "
-msgstr ""
+msgstr "Набор дадзеных: "
 
 msgid "Edited at: "
-msgstr ""
+msgstr "Дата праўкі: "
 
 msgid "<new object>"
-msgstr ""
+msgstr "<новы_аб’ект>"
 
 msgid "Edited by: "
-msgstr ""
+msgstr "Аўтар праўкі: "
 
 msgid "Version: "
-msgstr ""
+msgstr "Версія: "
 
 msgid "In changeset: "
-msgstr ""
+msgstr "У пакеце правак: "
 
 msgid "Tags: "
-msgstr ""
+msgstr "Тэгі: "
 
 msgid "Centroid: "
-msgstr ""
+msgstr "Цэнтроід: "
 
 msgid "{0} Member: "
 msgid_plural "{0} Members: "
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} удзельнік: "
+msgstr[1] "{0} удзельніка: "
+msgstr[2] "{0} удзельнікаў: "
 
 msgid " as \"{0}\""
-msgstr ""
+msgstr " у ролі \"{0}\""
 
 msgid "{0} Nodes: "
-msgstr ""
+msgstr "{0} кропак: "
 
 msgid "Bounding box: "
-msgstr ""
+msgstr "Абмяжоўваючы прастакутнік: "
 
 msgid "Bounding box (projected): "
-msgstr ""
+msgstr "абмежавальная рамка (праекцыя) "
 
 msgid "Center of bounding box: "
-msgstr ""
+msgstr "Цэнтр абмяжоўваючай рамкі: "
 
 msgid "Coordinates: "
-msgstr ""
+msgstr "Каардынаты: "
 
 msgid "Coordinates (projected): "
-msgstr ""
+msgstr "Каардынаты (якія праецыююцца): "
 
 msgid "Part of: "
-msgstr ""
+msgstr "Уваходзіць у: "
 
 msgid "In conflict with: "
-msgstr ""
+msgstr "Канфліктуе з: "
 
 msgid "Styles Cache for \"{0}\":"
-msgstr ""
+msgstr "Кэш стыляў для \"{0}\":"
 
 msgid ""
 "\n"
 "\n"
 "> applying {0} style \"{1}\"\n"
 msgstr ""
+"\n"
+"\n"
+"> Да {0} Ужываецца стыль \"{1}\"\n"
 
 msgid ""
 "\n"
 "Range:{0}"
 msgstr ""
+"\n"
+"Дыяпазон: {0}"
 
 msgid ""
 "\n"
 "\n"
 "> skipping \"{0}\" (not active)"
 msgstr ""
+"\n"
+"\n"
+"> пропуск \"{0}\" (не актыўна)"
 
 msgid ""
 "\n"
 "\n"
 "List of generated Styles:\n"
 msgstr ""
+"\n"
+"\n"
+"Спіс створаных стыляў:\n"
 
 msgid "The 2 selected objects have identical style caches."
-msgstr ""
+msgstr "Два абраных аб’екта маюць аднолькавыя кэшы стыляў."
 
 msgid "The 2 selected objects have different style caches."
-msgstr ""
+msgstr "Два абраных аб’екта маюць розныя кэшы стыляў"
 
 msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
-msgstr ""
+msgstr "Увага: Два абраных аб’екта ідэнтычныя, але маюць розныя кэшы стыляў"
+
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] "{0} карыстальнік апошнім рэдагаваў вылучанае:"
+msgstr[1] "{0} карыстальніка апошнімі рэдагавалі вылучанае:"
+msgstr[2] "{0} карыстальнікаў апошнімі рэдагавалі вылучанае:"
 
 msgid "xml"
-msgstr ""
+msgstr "xml"
 
 msgid "mapcss"
-msgstr ""
+msgstr "mapcss"
 
 msgid "unknown"
-msgstr ""
+msgstr "невядома"
+
+msgid "Enter the coordinates for the new node."
+msgstr "Увядзіце каардынаты новай кропкі"
 
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
 msgstr ""
+"Даўгату і шырату можна падзяліць прабелам, коскай ці кропкай з коскай."
 
-msgid "Projected coordinates:"
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
 msgstr ""
+"Выкарыстоўвайце дадатныя лікавыя значэнні або сімвалы N, E для паўночнай "
+"шыраты і ўсходняй даўгаты."
 
 msgid ""
-"Enter easting and northing (x and y) separated by space, comma or semicolon."
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
 msgstr ""
+"Для паўднёвай шыраты або ўсходняй даўгаты можна выкарыстоўваць адмоўныя "
+"значэнні або сімвалы S, W."
 
-msgid "Lat/Lon"
-msgstr ""
+msgid "Coordinate value can be in one of three formats:"
+msgstr "Каардынаты могуць быць у адным з трох фарматаў:"
 
-msgid "East/North"
-msgstr ""
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr "<i>градусы</i><tt>°</tt>"
 
-msgid "Please enter a GPS coordinates"
-msgstr ""
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr "<i>градусы</i><tt>°</tt> <i>хвіліны</i><tt>'</tt>"
 
-msgid "Please enter a Easting and Northing"
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
 msgstr ""
+"<i>градусы</i><tt>°</tt> <i>хвіліны</i><tt>'</tt> "
+"<i>секунды</i><tt>&quot</tt>"
 
-msgid "Toggle visibility of layer: {0}"
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
 msgstr ""
+"Сімвалы <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> з''яўляюцца неабавязковымі."
 
-msgid "Open a list of all loaded layers."
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
 msgstr ""
+"Таксама можна выкарыстоўваць сінтаксіс <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
 
-msgid "Delete the selected layers."
-msgstr ""
+msgid "Some examples:"
+msgstr "Прыклады:"
 
-msgid "Show/hide"
+msgid "Projected coordinates:"
+msgstr "Праецыюмыя каардынаты:"
+
+msgid ""
+"Enter easting and northing (x and y) separated by space, comma or semicolon."
 msgstr ""
+"Калі ласка, увядзіце ўсходні і паўночны зрух (x і y каардынаты), падзеленыя "
+"прабелам, коскай ці кропкай з коскай."
+
+msgid "Lat/Lon"
+msgstr "Шырата/даўгата"
+
+msgid "East/North"
+msgstr "Прастакутныя каардынаты"
+
+msgid "Please enter a GPS coordinates"
+msgstr "Увядзіце каардынаты GPS"
+
+msgid "Please enter a Easting and Northing"
+msgstr "Увядзіце ўсходняе і паўночнае зрушэнні"
+
+msgid "Toggle visibility of layer: {0}"
+msgstr "Пераключыць бачнасць пласта: {0}"
+
+msgid "Open a list of all loaded layers."
+msgstr "Паказаць спіс усіх загружаных пластоў."
+
+msgid "Delete the selected layers."
+msgstr "Выдаліць абраныя пласты."
+
+msgid "Show/hide"
+msgstr "Паказаць/схаваць"
 
 msgid "Toggle visible state of the selected layer."
-msgstr ""
+msgstr "Паказаць/схаваць вылучаны пласт"
 
 msgid "Show/hide layer"
-msgstr ""
+msgstr "Паказаць/схаваць пласт"
 
 msgid "Opacity"
-msgstr ""
+msgstr "Непразрыстасць"
 
 msgid "Adjust opacity of the layer."
-msgstr ""
+msgstr "Наладзіць непразрыстасць пласта"
+
+msgid "Gamma"
+msgstr "Ґама (Ступень кантраснасці)"
+
+msgid "Adjust gamma value of the layer."
+msgstr "Падладжвае палітру пласта"
 
 msgid "Activate"
-msgstr ""
+msgstr "Актываваць"
 
 msgid "Activate the selected layer"
-msgstr ""
+msgstr "Актываваць вылучаны пласт"
 
 msgid "Activate layer"
-msgstr ""
+msgstr "Актываваць пласт"
 
 msgid "Merge this layer into another layer"
-msgstr ""
+msgstr "Аб’яднаць гэты пласт з іншым пластом"
 
 msgid "Duplicate this layer"
-msgstr ""
+msgstr "Дубляваць гэты пласт"
 
 msgid "Copy of {0}"
-msgstr "Копія слоя {0}"
+msgstr "Копія {0}"
 
 msgid "Copy {1} of {0}"
-msgstr "Копія {1} слоя {0}"
+msgstr "Копія {1} з {0}"
 
 msgid "layer is currently visible (click to hide layer)"
-msgstr ""
+msgstr "пласт праглядаецца (пстрыкніце, каб яго схаваць)"
 
 msgid "layer is currently hidden (click to show layer)"
-msgstr ""
+msgstr "пласт утоены (пстрыкніце, каб яго паказаць)"
 
 msgid "this layer is the active layer"
-msgstr ""
+msgstr "гэты пласт з’яўляецца актыўным"
 
 msgid "this layer is not currently active (click to activate)"
-msgstr ""
+msgstr "гэты пласт не з’яўляецца актыўным (пстрыкніце, каб яго актываваць)"
 
 msgid "Move the selected layer one row up."
-msgstr ""
+msgstr "Перамясціць вылучаны пласт угару."
 
 msgid "Move the selected layer one row down."
-msgstr ""
+msgstr "Перамясціць вылучаны пласт уніз."
 
 msgid "Information about layer"
-msgstr ""
+msgstr "Інфармацыя пра пласт"
 
 msgid "Map paint preferences"
-msgstr ""
+msgstr "Налады адмалёўкі карты"
 
 msgid "Map Paint Styles"
-msgstr ""
+msgstr "Стылі адмалёўкі карты"
 
 msgid "configure the map painting style"
-msgstr ""
+msgstr "Наладзіць стыль адмалёўкі карты"
 
 msgid "MapPaint"
-msgstr ""
+msgstr "Адлюстраванне карты"
 
 msgid "On/Off"
-msgstr ""
+msgstr "Укл/Выкл"
 
 msgid "Turn selected styles on or off"
-msgstr ""
+msgstr "Уключыць/адключыць абраныя стылі"
 
 msgid "Move the selected entry one row down."
-msgstr ""
+msgstr "Перамясціць абраны пункт на радок уніз."
 
 msgid "Move the selected entry one row up."
-msgstr ""
+msgstr "Перамясціць абраны пункт на радок угару."
 
 msgid "Reload from file"
-msgstr ""
+msgstr "Перазагрузіць з файла"
 
 msgid "reload selected styles from file"
-msgstr ""
+msgstr "перазагрузіць абраныя стылі з файла"
 
 msgid "Save as..."
-msgstr ""
+msgstr "Захаваць як..."
 
 msgid "Save a copy of this Style to file and add it to the list"
-msgstr ""
+msgstr "Захаваць копію гэтага стылю ў файл і дадаць у спіс"
 
 msgid "Map paint style file (*.mapcss, *.zip)"
-msgstr ""
+msgstr "Файлы стыляў адмалёўкі карты (*.mapcss, *.zip)"
 
 msgid "Map paint style file (*.xml, *.zip)"
-msgstr ""
+msgstr "Файлы стыляў адмалёўкі карты (*.xml, *.zip)"
 
 msgid "Reloading style sources"
-msgstr ""
+msgstr "Перазагрузка крыніц стыляў"
 
 msgid "Save style ''{0}'' as ''{1}''"
-msgstr ""
+msgstr "Захаваць стыль ''{0}'' як ''{1}''"
 
 msgid "view meta information, error log and source definition"
-msgstr ""
+msgstr "прагляд метададзеных, справаздачы пра памылкі і апісанні крыніцы"
 
 msgid "Map Style info"
-msgstr ""
+msgstr "Інфармацыя пра стыль карты"
 
 msgid "Source"
-msgstr ""
+msgstr "Крыніца"
 
 msgid "Title:"
-msgstr ""
+msgstr "Назва:"
 
 msgid "URL:"
-msgstr ""
+msgstr "URL:"
 
 msgid "Built-in Style, internal path:"
-msgstr ""
+msgstr "Убудаваны стыль, унутраны шлях:"
 
 msgid "Path:"
-msgstr ""
+msgstr "Шлях:"
 
 msgid "Icon:"
-msgstr ""
+msgstr "Пiктаграма:"
 
 msgid "Background:"
-msgstr ""
+msgstr "Фон:"
 
 msgid "Style is currently active?"
-msgstr ""
+msgstr "Стыль актыўны цяпер?"
 
 msgid "No"
-msgstr ""
+msgstr "Не"
 
 msgid "Style settings"
-msgstr ""
+msgstr "Налады стылю"
 
 msgid "Customize the style"
-msgstr ""
+msgstr "Наладзіць стыль"
+
+msgid "Mini map"
+msgstr "Мінімапа"
+
+msgid "Displays a small map of the current edit location"
+msgstr "Паказвае невялікую карту бягучай вобласці рэдагавання"
 
 msgid "List of notes"
-msgstr ""
+msgstr "Спіс нататак"
 
 msgid "Add comment"
-msgstr ""
+msgstr "Дадаць каментар"
 
 msgid "Comment"
-msgstr ""
+msgstr "Каментар"
 
 msgid "Comment on note"
-msgstr ""
+msgstr "Каментар да нататкі"
 
 msgid "Add comment to note:"
-msgstr ""
+msgstr "Дадаць каментар да нататкі:"
 
 msgid "Close note"
-msgstr ""
+msgstr "Зачыніць нататку"
 
 msgid "Close note with message:"
-msgstr ""
+msgstr "Зачыніць нататку з паведамленнем:"
 
 msgid "Create a new note"
-msgstr ""
+msgstr "Стварыць нататку"
 
 msgid "Create"
-msgstr ""
+msgstr "Стварыць"
 
 msgid "Reopen note"
-msgstr ""
+msgstr "Пераадчыніць нататку"
 
 msgid "Reopen"
-msgstr ""
+msgstr "Пераадчыніць"
 
 msgid "Reopen note with message:"
-msgstr ""
+msgstr "Пераадчыніць нататку з паведамленнем:"
 
 msgid "Sort notes"
-msgstr ""
+msgstr "Сартаваць нататкі"
 
 msgid "Sort"
-msgstr ""
+msgstr "Сартаваць"
 
 msgid "Object type:"
-msgstr "Тып аб'екта"
+msgstr "Тып аб’екта"
 
 msgctxt "osm object types"
 msgid "mixed"
 msgstr "Змешаны"
 
 msgid "Choose the OSM object type"
-msgstr "Выбераце тып аб'екта OSM"
+msgstr "Выбераце тып аб’екта OSM"
 
 msgid "Object ID:"
-msgstr "ID аб'екта:"
+msgstr "ID аб’екта:"
 
 msgid "Enter the ID of the object that should be downloaded"
-msgstr "Пазначце ID аб'екта для запампоўкі"
+msgstr "Пазначце ID аб’екта для запампоўкі"
+
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+"ID аб''ектаў павінны быць падзеленыя коскамі або прабеламі, напрыклад: {0}"
 
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
 msgstr ""
+"У камбінаваным рэжыме, указвайце аб''екты так: {0}<br/>({1} азначае "
+"<i>кропку (node)</ i>, {2} - <i>лінію (way)</i>, а {3} - <i>адносіны "
+"(relation)</i>)"
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
+msgstr "Дыяпазоны ID аб''ектаў падаюцца праз злучок, напрыклад: {0}"
 
 msgid ""
 "Invalid ID list specified\n"
 "Cannot continue."
 msgstr ""
+"Паказаны няслушны спіс ID\n"
+"Працягнуць немагчыма."
 
 msgid "Relations"
-msgstr ""
+msgstr "Адносіны"
 
 msgid "Open a list of all relations."
-msgstr ""
+msgstr "Паказаць спіс усіх адносін."
 
 msgid "Relation list filter"
-msgstr ""
+msgstr "Фільтр спісу адносін"
 
 msgid "Create a new relation"
-msgstr ""
+msgstr "Стварыць новыя адносіны"
 
 msgid "New"
-msgstr "Новая"
+msgstr "Стварыць"
 
 msgid "Relations: {0}/{1}"
-msgstr ""
+msgstr "Адносіны: {0}/{1}"
 
 msgid "Relations: {0}"
-msgstr ""
+msgstr "Адносіны: {0}"
+
+msgid "Selection"
+msgstr "Вылучэнне"
 
 msgid "Open a selection list window."
-msgstr ""
+msgstr "Паказаць акно са спісам вылучаных аб’ектаў."
 
 msgid "Current Selection"
-msgstr ""
+msgstr "Бягучае вылучэнне"
 
 msgid "Search for objects"
-msgstr ""
+msgstr "Пошук аб’ектаў"
 
 msgid "Display the history of the selected objects."
-msgstr ""
+msgstr "Паказаць гісторыю вылучаных аб’ектаў."
 
 msgid "Zoom to selection"
-msgstr ""
+msgstr "Наблізіцца да вылучанага"
 
 msgid "Zoom to selected element(s)"
-msgstr ""
+msgstr "Наблізіцца да вылучаных элементаў"
 
 msgid "Sel.: Rel.:{0} / Ways:{1} / Nodes:{2}"
-msgstr ""
+msgstr "Адн.:{0} / Лін.:{1} / Кроп.:{2} абрана"
 
 msgid "Unselectable now"
-msgstr ""
+msgstr "Нельга абраць у дадзены момант"
 
 msgid "Selection: {0}"
-msgstr ""
+msgstr "Выбар: {0}"
 
 msgid "Always shown"
-msgstr ""
+msgstr "Заўсёды паказваць"
 
 msgid "Dynamic"
-msgstr ""
+msgstr "Паказваць дынамічна"
 
 msgid "Always hidden"
-msgstr ""
+msgstr "Заўсёды хаваць"
 
 msgid "Toggle dynamic buttons"
-msgstr ""
+msgstr "Пераключальнік дынамічных кнопак"
 
 msgid "Open preferences for this panel"
-msgstr ""
+msgstr "Адкрыць налады для гэтай панэлі"
 
 msgid "Undock the panel"
-msgstr ""
+msgstr "Адлучыць панэль"
 
 msgid ""
 "Close this panel. You can reopen it with the buttons in the left toolbar."
 msgstr ""
+"Зачыніць гэту панэль. Вы можаце адкрыць яе зноў, выкарыстоўваючы кнопкі на "
+"левай панэлі."
 
 msgid "Click to minimize/maximize the panel content"
-msgstr ""
+msgstr "Націсніце, каб згарнуць/разгарнуць змесціва панэлі"
 
 msgid "Side buttons"
-msgstr ""
+msgstr "Бакавыя кнопкі"
 
 msgid "Authors"
-msgstr ""
+msgstr "Аўтары"
 
 msgid "Open a list of people working on the selected objects."
-msgstr ""
+msgstr "Паказаць спіс людзей, якія працуюць з вылучанымі аб''ектамі."
 
 msgid "{0} Author"
 msgid_plural "{0} Authors"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} Аўтар"
+msgstr[1] "{0} Аўтара"
+msgstr[2] "{0} Аўтараў"
 
 msgid "Select objects submitted by this user"
-msgstr ""
+msgstr "Вылучыць аб’екты, створаныя гэтым карыстальнікам"
 
 msgid "Launches a browser with information about the user"
-msgstr ""
+msgstr "Адкрыць у браўзары інфармацыю пра карыстальніка"
 
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
+"Запуск браўзараў з інфармацыяй толькі для першых {0} з {1} абраных "
+"карыстальнікаў"
 
 msgid "Author"
-msgstr ""
+msgstr "Аўтар"
 
 msgid "# Objects"
-msgstr ""
+msgstr "колькасць аб''ектаў"
 
 msgid "Validation Results"
-msgstr ""
+msgstr "Вынікі праверкі"
 
 msgid "Open the validation window."
-msgstr ""
+msgstr "Адчыніць акно праверкі"
 
 msgid "Validation results"
-msgstr ""
+msgstr "Вынікі праверкі"
+
+msgid "Lookup"
+msgstr "Адшукаць"
+
+msgid "Looks up the selected primitives in the error list."
+msgstr "Адшукаць вылучаныя прымітывы ў спісе памылак."
 
 msgid "Fix"
-msgstr ""
+msgstr "Выправіць"
 
 msgid "Fix the selected issue."
-msgstr ""
+msgstr "Выправіць абраную праблему."
 
 msgid "Ignore the selected issue next time."
-msgstr ""
+msgstr "Ігнараваць абраную праблему ў наступны раз."
 
 msgid "Whole group"
-msgstr ""
+msgstr "Усю групу"
 
 msgid "Single elements"
-msgstr ""
+msgstr "Асобныя элементы"
 
 msgid "Nothing"
-msgstr ""
+msgstr "Нічога"
 
 msgid "Ignore whole group or individual elements?"
-msgstr ""
+msgstr "Ігнараваць усю групу, ці асобныя элементы?"
 
 msgid "Ignoring elements"
-msgstr ""
+msgstr "Ігнараваць элементы"
 
 msgid "Fixing errors ..."
-msgstr ""
+msgstr "Выпраўленне памылак ..."
 
 msgid "Fixing ({0}/{1}): ''{2}''"
-msgstr ""
+msgstr "Выпраўленне ({0}/{1}): ''{2}''"
 
 msgid "Updating map ..."
-msgstr ""
+msgstr "Абнаўленне карты ..."
 
 msgid "anonymous"
-msgstr ""
+msgstr "ананімны"
 
 msgid "Display the basic properties of the changeset"
-msgstr ""
+msgstr "Адлюстраваць асноўныя параметры пакета правак"
 
 msgid "Display the tags of the changeset"
-msgstr ""
+msgstr "Адлюстраваць тэгі пакета правак"
 
 msgid "Content"
-msgstr ""
+msgstr "Змесціва"
 
 msgid "Display the objects created, updated, and deleted by the changeset"
-msgstr ""
+msgstr "Паказаць аб’екты, створаныя, змененыя ці выдаленыя ў пакеце правак"
 
 msgid "Discussion"
-msgstr ""
+msgstr "Абмеркаванне"
 
 msgid "Display the public discussion around this changeset"
-msgstr ""
+msgstr "Паказаць публічнае абмеркаванне гэтага пакета правак"
 
 msgid "Changeset Management Dialog"
-msgstr ""
+msgstr "Дыялог кіравання пакетамі правак"
 
 msgid "Close the dialog"
-msgstr ""
+msgstr "Зачыніць дыялог"
 
 msgid "Query"
-msgstr ""
+msgstr "Запыт"
 
 msgid "Launch the dialog for querying changesets"
-msgstr ""
+msgstr "Адкрыць дыялог запыту пакетаў правак"
 
 msgid "Remove from cache"
-msgstr ""
+msgstr "Выдаліць з кэша"
 
 msgid "Remove the selected changesets from the local cache"
-msgstr ""
+msgstr "Выдаліць абраныя пакеты правак з лакальнага кэша"
 
 msgid "Close the selected changesets"
-msgstr ""
+msgstr "Зачыніць абраныя пакеты правак"
 
 msgid "Update changeset"
-msgstr ""
+msgstr "Абнавіць пакет правак"
 
 msgid "Updates the selected changesets with current data from the OSM server"
-msgstr ""
+msgstr "Абнаўляе абраныя пакеты правак бягучымі дадзенымі з сервера OSM"
 
 msgid "Download changeset content"
-msgstr ""
+msgstr "Запампаваць з сервера змесціва пакета правак"
 
 msgid "Download the content of the selected changesets from the server"
-msgstr ""
+msgstr "Запампаваць з сервера змесціва вылучаных пакетаў правак"
 
 msgid "My changesets"
-msgstr ""
+msgstr "Мае пакеты правак"
 
 msgid "Download my changesets from the OSM server (max. 100 changesets)"
-msgstr ""
+msgstr "Запампаваць мае пакеты правак (не больш за 100) з сервера OSM"
 
 msgid ""
 "<html>JOSM is currently running with an anonymous user. It cannot "
 "download<br>your changesets from the OSM server unless you enter your OSM "
 "user name<br>in the JOSM preferences.</html>"
 msgstr ""
+"<html>JOSM запушчаны ад імя ананімнага карыстальніка. Ён не можа "
+"загрузіць<br>вашы пакеты правак з сервера OSM, пакуль не ўведзена імя "
+"карыстальніка<br>у наладах JOSM.</html>"
 
 msgctxt "changeset.upload-comment"
 msgid "empty"
-msgstr ""
+msgstr "пуста"
 
 msgctxt "changeset.state"
 msgid "Open"
-msgstr ""
+msgstr "Адкрыты"
 
 msgctxt "changeset.state"
 msgid "Closed"
-msgstr ""
+msgstr "Зачынены"
 
 msgid "ID"
-msgstr ""
+msgstr "ID"
 
 msgid "Open"
-msgstr ""
+msgstr "Адкрыць"
 
 msgid "User"
-msgstr ""
+msgstr "Карыстальнік"
 
 msgid "Created at"
-msgstr ""
+msgstr "Створаны"
 
 msgid "Closed at"
-msgstr ""
+msgstr "Зачынены"
 
 msgid "Discussions"
-msgstr ""
+msgstr "Абмеркаванні"
 
 msgid "Downloading changeset content"
-msgstr ""
+msgstr "Спампоўка з сервера змесціва пакета правак"
 
 msgid "({0}/{1}) Downloading changeset {2}..."
-msgstr ""
+msgstr "({0}/{1}) Спампоўка з сервера пакета правак {2}..."
 
 msgid "({0}/{1}) Downloading content for changeset {2}..."
-msgstr ""
+msgstr "({0}/{1}) Спампоўка з сервера змесціва для пакета правак {2}..."
 
 msgid ""
 "<html>The selected object is not available in the current<br>edit layer "
@@ -6544,276 +7170,316 @@ msgid_plural ""
 "<html>None of the selected objects is available in the current<br>edit layer "
 "''{0}''.</html>"
 msgstr[0] ""
+"<html>Абраны аб''ект не даступны ў бягучым<br>рэдагуемым пласце "
+"''{0}''.</html>"
 msgstr[1] ""
+"<html>Ні адзін з вылучаных аб''ектаў не даступны ў бягучым <br>рэдагуемым "
+"пласце ''{0}''.</html>"
+msgstr[2] ""
+"<html>Ні адзін з вылучаных аб''ектаў не даступны ў бягучым <br>рэдагуемым "
+"пласце ''{0}''.</html>"
 
 msgid "Download content"
-msgstr ""
+msgstr "Запампаваць змесціва"
 
 msgid "Download the changeset content from the OSM server"
-msgstr ""
+msgstr "Запампаваць змесціва пакета правак з сервера OSM"
 
 msgid "Update content"
-msgstr ""
+msgstr "Абнавіць змесціва"
 
 msgid "Update the changeset content from the OSM server"
-msgstr ""
+msgstr "Абнавіць змесціва пакета правак з сервера OSM"
 
 msgid "Download and show the history of the selected objects"
-msgstr ""
+msgstr "Загрузіць і паказаць гісторыю абраных аб’ектаў"
 
 msgid "Select in layer"
-msgstr ""
+msgstr "Вылучыць у пласце"
 
 msgid "Select the corresponding primitives in the current data layer"
-msgstr ""
+msgstr "Выбраць адпаведныя аб’екты ў бягучым пласце дадзеных"
 
 msgid "Nothing to select"
-msgstr ""
+msgstr "Нічога не абрана"
 
 msgid "Zoom to in layer"
-msgstr ""
+msgstr "Наблізіцца ў пласце"
 
 msgid "Zoom to the corresponding objects in the current data layer"
-msgstr ""
+msgstr "Наблізіцца да адпаведных аб’ектаў у бягучым пласце дадзеных"
 
 msgid "Nothing to zoom to"
-msgstr ""
+msgstr "Няма да чаго наблізіцца"
 
 msgid "The content of this changeset is not downloaded yet."
-msgstr ""
+msgstr "Змесціва пакета правак яшчэ не загружана."
 
 msgid "Download now"
-msgstr ""
+msgstr "Запампаваць з сервера цяпер"
 
 msgid "Download the changeset content"
-msgstr ""
+msgstr "Запампаваць змесціва пакета правак"
 
 msgid "Created"
-msgstr ""
+msgstr "Створаны"
 
 msgid "Updated"
-msgstr ""
+msgstr "Абноўлена"
 
 msgid "Deleted"
-msgstr ""
+msgstr "Выдалена"
 
 msgid "Name"
-msgstr ""
+msgstr "Назва"
 
 msgid "ID:"
-msgstr ""
+msgstr "ID:"
 
 msgid "Comment:"
-msgstr ""
+msgstr "Каментар:"
 
 msgid "Open/Closed:"
-msgstr ""
+msgstr "Адкрыты/Зачынены:"
 
 msgid "Created by:"
-msgstr ""
+msgstr "Стварыў:"
 
 msgid "Created on:"
-msgstr ""
+msgstr "Створаны:"
 
 msgid "Closed on:"
-msgstr ""
+msgstr "Зачынены:"
 
 msgid "Remove the changeset in the detail view panel from the local cache"
 msgstr ""
+"Выдаліць з лакальнага кэша пакет правак, паказаны ў панэлі падрабязнага "
+"выгляду"
 
 msgid "Update the changeset from the OSM server"
-msgstr ""
+msgstr "Абнавіць пакет правак з сервера OSM"
 
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
 msgstr ""
+"Абраць элементы ў змесціве гэтага пакета правак у бягучым пласце дадзеных"
 
 msgid ""
 "<html>None of the objects in the content of changeset {0} is available in "
 "the current<br>edit layer ''{1}''.</html>"
 msgstr ""
+"<html>Няма даступных аб’ектаў у змесціве пакета правак {0} у бягучым "
+"<br>рэдагуемым пласце ''{1}''.</html>"
 
 msgid ""
 "Zoom to the objects in the content of this changeset in the current data "
 "layer"
 msgstr ""
+"Наблізіцца да аб’ектаў, якія змяшчаюцца ў гэтым пакеце правак у бягучым "
+"пласце дадзеных"
 
 msgid "Update changeset discussion"
-msgstr ""
+msgstr "Абнавіць абмеркаванне пакета правак"
 
 msgid "Update the changeset discussion from the OSM server"
-msgstr ""
+msgstr "Абнавіць абмеркаванне пакета правак з сервера OSM"
 
 msgid "Date"
-msgstr ""
+msgstr "Дата"
 
 msgid "Download changesets"
-msgstr ""
+msgstr "Запампаваць з сервера пакеты правак"
 
 msgid "{0} [incomplete]"
-msgstr ""
+msgstr "{0} [няпоўны]"
 
 msgid "open"
-msgstr ""
+msgstr "адкрыты"
 
 msgid "closed"
-msgstr ""
+msgstr "зачынены"
 
 msgid "Changeset ID: "
-msgstr ""
+msgstr "ID пакета правак: "
 
 msgid "Enter a changeset id"
-msgstr ""
+msgstr "Увядзіце id пакета правак"
 
 msgid ""
 "Download the changeset with the specified id, including the changeset content"
 msgstr ""
+"Запампаваць з сервера пакет правак з паказаным id, уключаючы змесціва пакета "
+"правак"
 
 msgid "Select changesets owned by specific users"
-msgstr ""
+msgstr "Абраць пакеты правак пэўнага карыстальніка"
 
 msgid "Select changesets depending on whether they are open or closed"
-msgstr ""
+msgstr "Абраць зачыненыя ці адкрытыя пакеты правак"
 
 msgid ""
 "Select changesets based on the date/time they have been created or closed"
 msgstr ""
+"Абраць пакеты правак з зададзенымі часам і датай стварэння ці зачыненні"
 
 msgid "Select only changesets related to a specific bounding box"
-msgstr ""
+msgstr "Абраць пакеты правак у паказаных межах"
 
 msgid "Query open changesets only"
-msgstr ""
+msgstr "Запытаць толькі адкрытыя пакеты правак"
 
 msgid "Query closed changesets only"
-msgstr ""
+msgstr "Запытаць толькі зачыненыя пакеты правак"
 
 msgid "Query both open and closed changesets"
-msgstr ""
+msgstr "Запытаць адкрытыя і зачыненыя пакеты правак"
 
 msgid "User ID:"
-msgstr ""
+msgstr "ID карыстальніка:"
 
 msgid "User name:"
-msgstr ""
+msgstr "Імя карыстальніка:"
 
 msgid "Only changesets owned by myself"
-msgstr ""
+msgstr "Толькі мае пакеты правак"
 
 msgid "Only changesets owned by the user with the following user ID"
-msgstr ""
+msgstr "Толькі пакеты правак карыстальніка з ідэнтыфікатарам"
 
 msgid "Only changesets owned by the user with the following user name"
-msgstr ""
+msgstr "Толькі пакеты правак карыстальніка з імем"
 
 msgid ""
 "Only changesets owned by myself (disabled. JOSM is currently run by an "
 "anonymous user)"
 msgstr ""
+"Толькі мае пакеты правак (адключана. JOSM цяпер запушчаны ананімным "
+"карыстальнікам)"
 
 msgid ""
 "Cannot restrict changeset query to the current user because the current user "
 "is anonymous"
 msgstr ""
+"Немагчыма абраць пакеты правак бягучага карыстальніка, паколькі бягучы "
+"карыстальнік - ананімны"
 
 msgid "Current value ''{0}'' for user ID is not valid"
-msgstr ""
+msgstr "Няслушнае бягучае значэнне ''{0}'' для ID карыстальніка"
 
 msgid "Cannot restrict the changeset query to the user name ''{0}''"
 msgstr ""
+"Немагчыма абмежаваць запыт пакета правак для карыстальніка з імем ''{0}''"
 
 msgid "Please enter a valid user ID"
-msgstr ""
+msgstr "Калі ласка, увядзіце правільны ID карыстальніка"
 
 msgid "Invalid user ID"
-msgstr ""
+msgstr "Няслушны ID карыстальніка"
 
 msgid "Please enter a non-empty user name"
-msgstr ""
+msgstr "Калі ласка, увядзіце імя карыстальніка"
 
 msgid "Invalid user name"
-msgstr ""
+msgstr "Няслушнае імя карыстальніка"
 
 msgid "Date: "
-msgstr ""
+msgstr "Дата: "
 
 msgid "Time:"
-msgstr ""
+msgstr "Час:"
 
 msgid "Closed after - "
-msgstr ""
+msgstr "Зачынены пасля - "
 
 msgid "Date:"
-msgstr ""
+msgstr "Дата:"
 
 msgid "Created before - "
-msgstr ""
+msgstr "Створаны да - "
 
 msgid "Only changesets closed after the following date/time"
-msgstr ""
+msgstr "Толькі пакеты правак, зачыненыя пасля даты/чакай"
 
 msgid "Only changesets closed after and created before a specific date/time"
 msgstr ""
+"Толькі пакеты правак, закрытыя пасля і адкрытыя да названай даты/часу"
 
 msgid ""
 "Cannot build changeset query with time based restrictions. Input is not "
 "valid."
 msgstr ""
+"Немагчыма выканаць запыт пакета правак на аснове абмежаванняў па часе. "
+"Уведзена няслушнае значэнне."
 
 msgid ""
 "<html>Please enter valid date/time values to restrict<br>the query to a "
 "specific time range.</html>"
 msgstr ""
+"<html>Калі ласка, задайце правільныя значэнні для даты/часу, каб "
+"абмежаваць<br>запыт зададзеным часавым інтэрвалам.</html>"
 
 msgid "Invalid date/time values"
-msgstr ""
+msgstr "Няслушныя значэнні даты/часу"
 
 msgid ""
 "Cannot restrict the changeset query to a specific bounding box. The input is "
 "invalid."
 msgstr ""
+"Запыт пакета правак не можа быць абмежаваны зададзенай мяжой. Увод няслушны."
 
 msgid ""
 "<html>Please enter valid longitude/latitude values to restrict<br>the "
 "changeset query to a specific bounding box.</html>"
 msgstr ""
+"<html>Калі ласка, увядзіце правільныя значэнні даўгаты/шыраты, каб "
+"абмежаваць<br>запыт пакета правак да канкрэтнай рамкі ахопу.</html>"
 
 msgid "Invalid bounding box"
-msgstr ""
+msgstr "Няслушная мяжа выбару"
 
 msgid ""
 "The current value is not a valid user ID. Please enter an integer value > 0"
 msgstr ""
+"Бягучае значэнне гэта няслушны ID карыстальніка. Калі ласка, увядзіце цэлае "
+"значэнне > 0"
 
 msgid "Please enter an integer value > 0"
-msgstr ""
+msgstr "Увядзіце цэлы лік > 0"
 
 msgid ""
 "<html>The  current value is not a valid user name.<br>Please enter an non-"
 "empty user name.</html>"
 msgstr ""
+"<html>Бягучае значэнне гэта няслушнае імя карыстальніка.<br>Калі ласка, "
+"увядзіце непустое імя карыстальніка.</html>"
 
 msgid "Please enter an non-empty user name"
-msgstr ""
+msgstr "Калі ласка, увядзіце імя карыстальніка"
 
 msgid ""
 "Please enter a date in the usual format for your locale.<br>Example: "
 "{0}<br>Example: {1}<br>Example: {2}<br>Example: {3}<br>"
 msgstr ""
+"Калі ласка, увядзіце дату ў звычайным фармаце для вашага "
+"рэгіёна.<br>Прыклад: {0}<br>Прыклад: {1}<br>Прыклад: {2}<br>Прыклад: {3}<br>"
 
 msgid ""
 "Please enter a valid time in the usual format for your locale.<br>Example: "
 "{0}<br>Example: {1}<br>Example: {2}<br>Example: {3}<br>"
 msgstr ""
+"Калі ласка, увядзіце правільны час у звычайным фармаце для вашага "
+"рэгіёна.<br>Прыклад: {0}<br>Прыклад: {1}<br>Прыклад: {2}<br>Прыклад: {3}<br>"
 
 msgid "Download my changesets only"
-msgstr ""
+msgstr "Запампаваць з сервера толькі мае пакеты правак"
 
 msgid ""
 "<html>Select to restrict the query to your changesets only.<br>Unselect to "
 "include all changesets in the query.</html>"
 msgstr ""
+"<html>Адзначце, каб абмежавацца запытам толькі да вашага пакета "
+"правак.<br>Зніміце адзнаку, каб уключыць у запыт усе пакеты правак.</html>"
 
 msgid ""
 "<html>Please select one the following <strong>standard "
@@ -6821,322 +7487,355 @@ msgid ""
 "only want to download changesets created by yourself.<br>Note that JOSM will "
 "download max. 100 changesets.</html>"
 msgstr ""
+"<html>Калі ласка, абярыце адзін з наступных <strong>стандартных "
+"запытаў</strong>. Адзначце <strong>Загрузіць толькі мае наборы</strong>, "
+"калі вы хочаце загрузіць толькі наборы зменаў, створаныя вамі. Звярніце "
+"ўвагу, што JOSM можа загрузіць не больш за 100 набораў зменаў.</html>"
 
 msgid "<html>Download the latest changesets</html>"
-msgstr ""
+msgstr "<html>Запампаваць з сервера апошнія пакеты правак</html>"
 
 msgid ""
 "<html>Download my open changesets<br><em>Disabled. Please enter your OSM "
 "user name in the preferences first.</em></html>"
 msgstr ""
+"<html>Спампаваць мае адкрытыя пакеты правак<br><em>Адключанае. Калі ласка, "
+"пазначце спачатку ваша імя карыстальніка ў наладах OSM.</em></html>"
 
 msgid "<html>Download my open changesets</html>"
-msgstr ""
+msgstr "<html>Запампаваць мае адкрытыя пакеты правак</html>"
 
 msgid ""
 "<html>Download changesets in the current map view.<br><em>Disabled. There is "
 "currently no map view active.</em></html>"
 msgstr ""
+"<html>Запампаваць пакеты правак бягучага выгляду карты.<br><em>Адключана. У "
+"сапраўдны момант няма актыўнай карты.</em></html>"
 
 msgid "<html>Download changesets in the current map view</html>"
 msgstr ""
+"<html>Запампаваць з сервера пакеты правак у бягучы выгляд карты</html>"
 
 msgid ""
 "Unexpected value for preference ''{0}'', got ''{1}''. Resetting to default "
 "query."
 msgstr ""
+"Неспадзяванае значэнне налады ''{0}'', роўнае ''{1}''. Зварот да запыту па "
+"змаўчанні."
 
 msgid "Cannot create changeset query for open changesets of anonymous user"
 msgstr ""
+"Ананімныя карыстальнікі не могуць рабіць запыты на стварэнне пакетаў правак"
 
 msgid "Basic"
-msgstr ""
+msgstr "Асноўны"
 
 msgid "Download changesets using predefined queries"
-msgstr ""
+msgstr "Спампаваць з пакеты правак, выкарыстоўваючы прадвызначаныя запыты"
 
 msgid "From URL"
-msgstr ""
+msgstr "З URL"
 
 msgid "Query changesets from a server URL"
-msgstr ""
+msgstr "Запытаць пакеты правак з URL сервера"
 
 msgid "Advanced"
-msgstr ""
+msgstr "Пашыраны"
 
 msgid "Use a custom changeset query"
-msgstr ""
+msgstr "Выкарыстоўваць зададзены запыт пакета правак"
 
 msgid "Query changesets"
-msgstr ""
+msgstr "Запыт пакетаў правак"
 
 msgid "Query and download changesets"
-msgstr ""
+msgstr "Запытаць і запампаваць з сервера пакеты правак"
 
 msgid "Please enter a valid changeset query URL first."
-msgstr ""
+msgstr "Калі ласка, спачатку ўвядзіце правільны URL запыту пакета правак."
 
 msgid "Illegal changeset query URL"
-msgstr ""
+msgstr "Няслушны URL для запыту пакета правак"
 
 msgid "Close the dialog and abort querying of changesets"
-msgstr ""
+msgstr "Зачыніць дыялог і спыніць фармаванне запытаў пакетаў правак"
 
 msgid "Querying and downloading changesets"
-msgstr ""
+msgstr "Запыт і спампоўка пакетаў правак з сервера"
 
 msgid "Determine user id for current user..."
-msgstr ""
+msgstr "Вызначэнне ID карыстальніка для бягучага карыстальніка..."
 
 msgid "Query and download changesets ..."
-msgstr ""
+msgstr "Запытаць і запампаваць з сервера пакеты правак ..."
 
 msgid "URL: "
-msgstr ""
+msgstr "URL: "
 
 msgid "Please enter or paste an URL to retrieve changesets from the OSM API."
 msgstr ""
+"Калі ласка, увядзіце ці ўстаўце URL для атрымання пакетаў правак з OSM API."
 
 msgid "Examples"
-msgstr ""
+msgstr "Прыклады"
 
 msgid ""
 "Note that changeset queries are currently always submitted to ''{0}'', "
 "regardless of the host, port and path of the URL entered below."
 msgstr ""
+"Звярніце ўвагу, што запыты пакетаў правак у цяперашні час заўсёды "
+"накіроўваюцца ў ''{0}'', незалежна ад хаста, порта і шляху URL, уведзеных "
+"ніжэй."
 
 msgid "This changeset query URL is invalid"
-msgstr ""
+msgstr "Няправільны URL запыту пакета правак"
 
 msgid "Discardable key: selection Foreground"
-msgstr ""
+msgstr "Выдаляемы ключ: пярэдні план вылучэння"
 
 msgid "Discardable key: selection Background"
-msgstr ""
+msgstr "Выдаляемы ключ: фон вылучэння"
 
 msgid "Discardable key: foreground"
-msgstr ""
+msgstr "Выдаляемы ключ: foreground"
 
 msgid "Discardable key: background"
-msgstr ""
+msgstr "Выдаляемы ключ: background"
 
 msgid "{0} ''{1}''"
-msgstr ""
+msgstr "{0} ''{1}''"
 
 msgid "{0} different"
 msgid_plural "{0} different"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} рознае"
+msgstr[1] "{0} розных"
+msgstr[2] "{0} розных"
 
 msgid ", {0} unset"
 msgid_plural ", {0} unset"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] ", {0} не зададзена"
+msgstr[1] ", {0} не зададзены"
+msgstr[2] ", {0} не зададзены"
 
 msgid "Select objects for which to change tags."
-msgstr ""
+msgstr "Абярыце аб’екты для змены тэгаў."
 
 msgid "Tags/Memberships"
-msgstr ""
+msgstr "Тэгі/Удзел"
 
 msgid "Tags for selected objects."
-msgstr ""
+msgstr "Тэгі для вылучаных аб’ектаў."
 
 msgid "Member Of"
-msgstr ""
+msgstr "Удзельнік"
 
 msgid "Position"
-msgstr ""
+msgstr "Размяшчэнне"
 
 msgid "<different>"
-msgstr ""
+msgstr "<розныя>"
 
 msgid "Objects: {2} / Tags: {0} / Memberships: {1}"
-msgstr ""
+msgstr "Аб’екты: {2} / Тэгі: {0} / Удзел: {1}"
 
 msgid "Tags: {0} / Memberships: {1}"
-msgstr ""
+msgstr "Тэгі: {0} / Удзел: {1}"
 
 msgid "Tags / Memberships"
-msgstr ""
+msgstr "Тэгі / Удзел"
 
 msgid "Delete the selected key in all objects"
-msgstr ""
+msgstr "Выдаліць вылучаны ключ з усіх аб’ектаў"
 
 msgid "Delete Tags"
-msgstr ""
+msgstr "Выдаліць тэгі"
 
 msgid "Change relation"
-msgstr ""
+msgstr "Змяніць адносіны"
 
 msgid "Delete from relation"
-msgstr ""
+msgstr "Выдаліць з адносін"
 
 msgid "Really delete selection from relation {0}?"
-msgstr ""
+msgstr "Вы сапраўды хочаце выдаліць адзначанае з адносін {0}?"
 
 msgid "Add a new key/value pair to all objects"
-msgstr ""
+msgstr "Дадаць новую пару ключ/значэнне для ўсіх аб’ектаў"
 
 msgid "Add Tag"
-msgstr ""
+msgstr "Дадаць тэг"
 
 msgid "Edit the value of the selected key for all objects"
-msgstr ""
+msgstr "Змяніць значэнне абранага ключа для ўсіх аб’ектаў"
 
 msgid "Edit Tags"
-msgstr ""
+msgstr "Рэдагаваць тэгі"
 
 msgid "Go to OSM wiki for tag help (F1)"
-msgstr ""
+msgstr "Адкрыць апісанне тэга ў OSM wiki (F1)"
 
 msgid "Launch browser with wiki help for selected object"
-msgstr ""
+msgstr "Адкрыць браўзар з апісаннем wiki для абранага аб’екта"
+
+msgid "Go to Taginfo"
+msgstr "Перайсці на Taginfo"
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr "Адкрыць аглядальнік са статыстыкаю з Taginfo для вылучанага аб''екта"
 
 msgid "Paste Value"
-msgstr ""
+msgstr "Уставіць значэнне"
 
 msgid "Paste the value of the selected tag from clipboard"
-msgstr ""
+msgstr "Уставіць значэнне абранага тэга з буфера абмену"
 
 msgid "Copy Value"
-msgstr ""
+msgstr "Капіяваць значэнне"
 
 msgid "Copy the value of the selected tag to clipboard"
-msgstr ""
+msgstr "Капіяваць значэнне абранага тэга ў буфер абмену"
 
 msgid "Copy selected Key(s)/Value(s)"
-msgstr ""
+msgstr "Капіяваць вылучаныя пары ключ/значэнне"
 
 msgid "Copy the key and value of the selected tag(s) to clipboard"
-msgstr ""
+msgstr "Скапіяваць ключы і значэнні вылучаных тэгаў у буфер абмену"
 
 msgid "Copy all Keys/Values"
-msgstr ""
+msgstr "Капіяваць усе ключы і значэнні"
 
 msgid "Copy the key and value of all the tags to clipboard"
-msgstr ""
+msgstr "Скапіяваць ключы і значэнні ўсіх тэгаў у буфер абмену"
 
 msgid "Search Key/Value/Type"
-msgstr ""
+msgstr "Шукаць ключ/значэнне/тып"
 
 msgid ""
 "Search with the key and value of the selected tag, restrict to type (i.e., "
 "node/way/relation)"
 msgstr ""
+"Пры пошуку ключа і значэння абранага тэга, абмежавацца тыпам (г.зн. кропка / "
+"лінія / адносіны)"
 
 msgid "Search Key/Value"
-msgstr ""
+msgstr "Пошук ключа/значэнні"
 
 msgid "Search with the key and value of the selected tag"
-msgstr ""
+msgstr "Пошук ключа і значэнні абранага тэга"
 
 msgid "Overwrite key"
-msgstr ""
+msgstr "Зацерці клавішу"
 
 msgid "Replace"
-msgstr ""
+msgstr "Замяніць"
 
 msgid "The new key is already used, overwrite values?"
-msgstr ""
+msgstr "Новы ключ ужо выкарыстоўваецца, перазапісаць значэнне?"
 
 msgid "Change value?"
 msgid_plural "Change values?"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Змяніць значэнне?"
+msgstr[1] "Змяніць значэнні?"
+msgstr[2] "Змяніць значэнні?"
 
 msgid "This will change {0} object."
 msgid_plural "This will change up to {0} objects."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Гэта зменіць {0} аб’ект."
+msgstr[1] "Гэта зменіць {0} аб’екта."
+msgstr[2] "Гэта зменіць {0} аб’ектаў."
 
 msgid "An empty value deletes the tag."
-msgstr ""
+msgstr "Пустое значэнне выдаляе тэг"
 
 msgid "You changed the key from ''{0}'' to ''{1}''."
-msgstr ""
+msgstr "Вы змянілі ключ з ''{0}'' на ''{1}''."
 
 msgid "Change properties of up to {0} object"
 msgid_plural "Change properties of up to {0} objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Змяніць параметры {0} аб’екта"
+msgstr[1] "Змяніць параметры {0} аб’ектаў"
+msgstr[2] "Змяніць параметры {0} аб’ектаў"
 
 msgid "Use English language for tag by default"
-msgstr ""
+msgstr "Выкарыстоўваць ангельскую мову для тэга па змаўчанні"
 
 msgid "Add value?"
-msgstr ""
+msgstr "Дадаць значэнне?"
 
 msgid "This will change up to {0} object."
 msgid_plural "This will change up to {0} objects."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Колькасць змяняных аб’ектаў: {0}"
+msgstr[1] "Гэта зменіць да {0} аб’ектаў."
+msgstr[2] "Гэта зменіць да {0} аб’ектаў."
 
 msgid "Please select a key"
-msgstr ""
+msgstr "Калі ласка, абярыце ключ"
 
 msgid "Please select a value"
-msgstr ""
+msgstr "Абярыце значэнне"
 
 msgid "Set number of recently added tags"
-msgstr ""
+msgstr "Задаць колькасць нядаўна дададзеных тэгаў"
 
 msgid "Remember last used tags after a restart"
-msgstr ""
+msgstr "Памятаць нядаўна дададзеныя тэгі пасля перазапуску"
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
-msgstr ""
+msgid "to apply first suggestion"
+msgstr "для ўжывання першай прапановы"
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
-msgstr ""
+msgid "to add without closing the dialog"
+msgstr "для дадання без зачынення дыялогу"
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
-msgstr ""
+msgid "to add first suggestion without closing the dialog"
+msgstr "для дадання першай прапановы без зачынення дыялогу"
 
 msgid "Please enter the number of recently added tags to display"
 msgstr ""
+"Калі ласка, увядзіце колькасць нядаўна дададзеных тэгаў для адлюстравання ў "
+"спісе"
 
 msgid "Please enter integer number between 0 and {0}"
-msgstr ""
+msgstr "Калі ласка, увядзіце цэлы лік ад 0 да {0}"
 
 msgid "Recently added tags"
-msgstr ""
+msgstr "Нядаўна дададзеныя тэгі"
 
 msgid "Choose recent tag {0}"
-msgstr ""
+msgstr "Абраць нядаўні тэг {0}"
 
 msgid "Use this tag again"
-msgstr ""
+msgstr "Выкарыстоўваць гэты тэг ізноў"
 
 msgid "Apply recent tag {0}"
-msgstr ""
+msgstr "Ужыць нядаўні тэг {0}"
 
 msgid "The key ''{0}'' is already used"
-msgstr ""
+msgstr "Ключ «{0}» ужо выкарыстоўваецца"
 
 msgid "You changed the value of ''{0}'' from ''{1}'' to ''{2}''."
-msgstr ""
+msgstr "Вы змянілі значэнне ''{0}'' з ''{1}'' на ''{2}''."
 
 msgid "Edit the relation the currently selected relation member refers to."
 msgstr ""
+"Рэдагаваць адносіны, да якіх належыць выдзелены ў сапраўдны момант ўдзельнік."
 
 msgid "Download all child relations (recursively)"
-msgstr ""
+msgstr "Спампаваць ўсе даччыныя элементы (рэкурсіўна)"
 
 msgid "Download All Children"
-msgstr ""
+msgstr "Спампаваць ўсе даччыныя элементы"
 
 msgid "Download selected relations"
-msgstr ""
+msgstr "Запампаваць абраныя адносіны"
 
 msgid "Download Selected Children"
-msgstr ""
+msgstr "Спампаваць даччыныя элементы для абранага"
 
 msgid "Conflict in data"
 msgid_plural "Conflicts in data"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Канфлікт у дадзеных"
+msgstr[1] "Канфлікты ў дадзеных"
+msgstr[2] "Канфліктаў ў дадзеных"
 
 msgid "Download relation members"
 msgstr "Спампаваць удзельнікаў адносін"
@@ -7145,473 +7844,537 @@ msgid ""
 "<html>The child relation<br>{0}<br>is deleted on the server. It cannot be "
 "loaded</html>"
 msgstr ""
+"<html>Даччыныя адносіны<br>{0}<br>не могуць быць загружаны, бо былі выдалены "
+"на серверы.</html>"
 
 msgid "Relation is deleted"
-msgstr ""
+msgstr "Адносіны выдаленыя"
 
 msgid "Downloading relation {0}"
-msgstr ""
+msgstr "Сцягваюцца адносіны {0}"
 
 msgid "Ignoring exception because task was canceled. Exception: {0}"
-msgstr ""
+msgstr "Выключэнне ігнаруецца, бо задача была адменена. Выключэнне: {0}"
 
 msgid "Downloading {0} incomplete object"
 msgid_plural "Downloading {0} incomplete objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Загрузка {0} незавершанага аб’екта"
+msgstr[1] "Загрузка {0} незавершаных аб’ектаў"
+msgstr[2] "Загрузка {0} незавершаных аб’ектаў"
 
 msgid "Downloading {0} incomplete child of relation ''{1}''"
 msgid_plural "Downloading {0} incomplete children of relation ''{1}''"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Загружаецца {0} няпоўны нашчадак адносін ''{1}''"
+msgstr[1] "Загружаецца {0} няпоўных нашчадка адносін ''{1}''"
+msgstr[2] "Загружаецца {0} няпоўных нашчадкаў адносін ''{1}''"
 
 msgid "Downloading {0} incomplete child of {1} parent relations"
 msgid_plural "Downloading {0} incomplete children of {1} parent relations"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Спампоўваецца {0} няпоўны нашчадак {1} бацькоўскіх адносін"
+msgstr[1] "Спампоўваецца {0} няпоўных нашчадка {1} бацькоўскіх адносін"
+msgstr[2] "Спампоўваецца {0} няпоўных нашчадкаў {1} бацькоўскіх адносін"
 
 msgid "Download relations"
-msgstr ""
+msgstr "Спампоўка адносін з сервера"
 
 msgid "({0}/{1}): Downloading relation ''{2}''..."
-msgstr ""
+msgstr "({0}/{1}): Спампоўка адносін ''{2}''..."
 
 msgid "Tags and Members"
-msgstr ""
+msgstr "Тэгі і ўдзельнікі"
 
 msgid "Parent Relations"
-msgstr ""
+msgstr "Бацькоўскія адносіны"
 
 msgid "Child Relations"
-msgstr ""
+msgstr "Даччыныя элементы адносін"
 
 msgid "Apply Role:"
-msgstr ""
+msgstr "Ужыць ролю:"
 
 msgid "Enter a role and apply it to the selected relation members"
-msgstr ""
+msgstr "Увесці ролю і прымяніць яе на выдзеленых удзельнікаў адносін"
 
 msgid "New Relation"
-msgstr ""
+msgstr "Новыя адносіны"
 
 msgid "Focus Relation Editor with relation ''{0}'' in layer ''{1}''"
-msgstr ""
+msgstr "Факусаваць рэдактар адносін на адносінах ''{0}'' ў пласце ''{1}''"
 
 msgid "Relation Editor: {0}"
-msgstr ""
+msgstr "Рэдактар адносін: {0}"
 
 msgid ""
 "<html>There is at least one member in this relation referring<br>to the "
 "relation itself.<br>This creates circular dependencies and is "
 "discouraged.<br>How do you want to proceed with circular dependencies?</html>"
 msgstr ""
+"<html>Існуе па меншай меры адзін член гэтых адносін,<br>што спасылаецца сам "
+"на сябе.<br>Гэта стварае цыклічную залежнасць і не рэкамендуецца.<br>Што "
+"рабіць з цыклічнымі залежнасцямі?</html>"
 
 msgid "Remove them, clean up relation"
-msgstr ""
+msgstr "Выдаліць іх, пачысціць адносіны"
 
 msgid "Ignore them, leave relation as is"
-msgstr ""
+msgstr "Ігнараваць іх, пакінуць адносіны як ёсць"
 
 msgid "Sorry, shortcut \"{0}\" can not be enabled in Relation editor dialog"
 msgstr ""
+"Выбачайце, гарачая клавіша \"{0}\" не даступная ў акне рэдактара адносін"
 
 msgid ""
 "<html>This relation already has one or more members referring to<br>the "
 "object ''{0}''<br><br>Do you really want to add another relation "
 "member?</html>"
 msgstr ""
+"<html>Гэтыя адносіны ўжо ўтрымліваюць адзін ці больш членаў, якія "
+"спасылаюцца на<br>аб''ект ''{0}''<br><br>Вы сапраўды хочаце дадаць яшчэ "
+"адзін член у адносіны?</html>"
 
 msgid "Multiple members referring to same object."
-msgstr ""
+msgstr "Некалькі ўдзельнікаў спасылаюцца на адзін аб’ект."
 
 msgid ""
 "<html>You are trying to add a relation to itself.<br><br>This creates "
 "circular references and is therefore discouraged.<br>Skipping relation "
 "''{0}''.</html>"
 msgstr ""
+"<html>Вы спрабуеце дадаць адносіны да саміх сябе.<br><br>Гэта створыць "
+"цыклічныя спасылкі і таму не рэкамендуецца.<br>Прапусціць адносіны "
+"''{0}''.</html>"
 
 msgid ""
 "Add all objects selected in the current dataset before the first member"
 msgstr ""
+"Дадаць усе аб’екты, вылучаныя ў бягучым наборы, перад першым удзельнікам"
 
 msgid ""
 "Add all objects selected in the current dataset before the first selected "
 "member"
 msgstr ""
+"Дадаць усе аб’екты, вылучаныя ў бягучым наборы, перад першым абраным "
+"удзельнікам"
 
 msgid ""
 "Add all objects selected in the current dataset after the last selected "
 "member"
 msgstr ""
+"Дадаць усе аб’екты, вылучаныя ў бягучым наборы, пасля апошняга абранага "
+"ўдзельніка"
 
 msgid "Remove all members referring to one of the selected objects"
 msgstr ""
+"Выдаліць ўсіх удзельнікаў, якія спасылалаюцца на які-небудзь з вылучаных "
+"аб’ектаў"
 
 msgid ""
 "Select relation members which refer to objects in the current selection"
 msgstr ""
+"Выбраць удзельнікаў, якія спасылаюцца на аб’екты ў бягучым выдзяленні"
 
 msgid ""
 "Select relation members which refer to {0} objects in the current selection"
 msgstr ""
+"Выбраць удзельнікаў, якія спасылаюцца на аб’екты ({0}) у бягучым выдзяленні"
 
 msgid "Select objects for selected relation members"
-msgstr ""
+msgstr "Вылучыць аб’екты для выбраных удзельнікаў адносін"
 
 msgid "Sort the relation members"
-msgstr ""
+msgstr "Сартаваць удзельнікаў адносін"
 
 msgid "Relation Editor: Sort"
-msgstr ""
+msgstr "Рэдактар адносін: сартаваць"
+
+msgid "Sort below"
+msgstr "Сартаваць ніжэйшых"
+
+msgid "Sort the selected relation members and all members below"
+msgstr "Сартаваць выдзеленых удзельнікаў адносін і ўсіх размешчаных ніжэй"
 
 msgid "Reverse the order of the relation members"
-msgstr ""
+msgstr "Памяняць парадак удзельнікаў адносін на зваротны"
 
 msgid "Reverse"
-msgstr ""
+msgstr "У зваротным парадку"
 
 msgid "Move the currently selected members up"
-msgstr ""
+msgstr "Перамясціць выдзеленых удзельнікаў адносін уверх"
 
 msgid "Relation Editor: Move Up"
-msgstr ""
+msgstr "Рэдактар адносін: падняць"
 
 msgid "Move the currently selected members down"
-msgstr ""
+msgstr "Перамясціць выдзеленых удзельнікаў адносін ўніз"
 
 msgid "Relation Editor: Move Down"
-msgstr ""
+msgstr "Рэдактар адносін: апусціць"
 
 msgid "Remove the currently selected members from this relation"
-msgstr ""
+msgstr "Выдаліць адзначаных удзельнікаў з адносін"
 
 msgid "Relation Editor: Remove"
-msgstr ""
+msgstr "Рэдактар адносін: выдаліць"
 
 msgid "Delete the currently edited relation"
-msgstr ""
+msgstr "Выдаліць рэдагуемыя адносіны"
 
 msgid ""
 "One or more members of this new relation have been deleted while the "
 "relation editor\n"
 "was open. They have been removed from the relation members list."
 msgstr ""
+"Адзін ці больш удзельнікаў гэтых новых адносін былі выдаленыя, калі рэдактар "
+"адносін\n"
+"быў адкрыты. Яны былі выдалены са спісу ўдзельнікаў адносін."
 
 msgid "Yes, create a conflict and close"
-msgstr ""
+msgstr "Так, стварыць канфлікт і зачыніць"
 
 msgid "Click to create a conflict and close this relation editor"
-msgstr ""
+msgstr "Пстрыкніце, каб стварыць канфлікт і зачыніць гэты рэдактар адносін"
 
 msgid "No, continue editing"
-msgstr ""
+msgstr "Не, працягнуць праўку"
 
 msgid "Click to return to the relation editor and to resume relation editing"
 msgstr ""
+"Націсніце, каб вярнуцца да рэдактара адносін і працягнуць праўку адносін"
 
 msgid ""
 "<html>This relation has been changed outside of the editor.<br>You cannot "
 "apply your changes and continue editing.<br><br>Do you want to create a "
 "conflict and close the editor?</html>"
 msgstr ""
+"<html>Гэтыя адносігны былі зменены па-за рэдактарам<br>Вы не можаце захаваць "
+"свае змены і працягнуць рэдагаванне.<br><br>Хочаце пазначыць як канфлікт і "
+"зачыніць рэдактар?</html>"
 
 msgid ""
 "<html>Layer ''{0}'' already has a conflict for object<br>''{1}''.<br>Please "
 "resolve this conflict first, then try again.</html>"
 msgstr ""
+"<html>У пласце ''{0}'' ужо ёсць канфлікт для аб’екта <br>''{1}''.<br>Калі "
+"ласка, спачатку ўладзьце гэты канфлікт, затым паспрабуйце зноў.</html>"
 
 msgid "Apply the current updates"
-msgstr ""
+msgstr "Запісаць занесеныя змены"
 
 msgid "Apply the updates and close the dialog"
-msgstr ""
+msgstr "Ужыць абнаўленні і зачыніць дыялог"
 
 msgid "Cancel the updates and close the dialog"
-msgstr ""
+msgstr "Адмяніць абнаўленні і зачыніць дыялог"
 
 msgid "Yes, save the changes and close"
-msgstr ""
+msgstr "Так, захаваць змены і зачыніць"
 
 msgid "Click to save the changes and close this relation editor"
-msgstr ""
+msgstr "Націсніце, каб захаваць змены і зачыніць рэдактар адносін"
 
 msgid "No, discard the changes and close"
-msgstr ""
+msgstr "Не, адмяніць змены і зачыніць"
 
 msgid "Click to discard the changes and close this relation editor"
-msgstr ""
+msgstr "Націсніце, каб адмяніць змены і зачыніць рэдактар адносін"
 
 msgid "Cancel, continue editing"
-msgstr ""
+msgstr "Адмяніць, працягнуць рэдагаванне"
 
 msgid ""
 "<html>The relation has been changed.<br><br>Do you want to save your "
 "changes?</html>"
-msgstr ""
+msgstr "<html>Адносіны былі зменена.<br><br>Вы хочаце захаваць змены?</html>"
 
 msgid "Unsaved changes"
-msgstr ""
+msgstr "Незахаваныя змены"
 
 msgid "Add an empty tag"
-msgstr ""
+msgstr "Дадаць пусты тэг"
 
 msgid "Download all incomplete members"
-msgstr ""
+msgstr "Запампаваць усіх няпоўных удзельнікаў"
 
 msgid "Download Members"
-msgstr ""
+msgstr "Запампаваць удзельнікаў"
 
 msgid "Relation Editor: Download Members"
-msgstr ""
+msgstr "Рэдактар адносін: запампаваць удзельнікаў"
 
 msgid "Download selected incomplete members"
-msgstr ""
+msgstr "Запампаваць з сервера вылучаных няпоўных удзельнікаў"
 
 msgid "Sets a role for the selected members"
-msgstr ""
+msgstr "Задаць ролю для вылучаных удзельнікаў"
 
 msgid "Apply Role"
-msgstr ""
+msgstr "Ужыць ролю"
 
 msgid "You are setting an empty role on {0} object."
 msgid_plural "You are setting an empty role on {0} objects."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Вы задаяце пустую ролю для {0} аб’екта"
+msgstr[1] "Вы задаяце пустую ролю для {0} аб’ектаў"
+msgstr[2] "Вы задаяце пустую ролю для {0} аб’ектаў"
 
 msgid "This is equal to deleting the roles of these objects."
-msgstr ""
+msgstr "Гэта эквівалентна выдаленню роляў з іх."
 
 msgid "Do you really want to apply the new role?"
-msgstr ""
+msgstr "Вы сапраўды жадаеце прызначыць новую ролю?"
 
 msgid "Yes, apply it"
-msgstr ""
+msgstr "Так, запісаць"
 
 msgid "No, do not apply"
-msgstr ""
+msgstr "Не, не запісваць"
 
 msgid "Confirm empty role"
-msgstr ""
+msgstr "Пацвердзіць пустую ролю"
 
 msgid "Edit the relation the currently selected relation member refers to"
-msgstr ""
+msgstr "Выдзелены, пры рэдагаванні адносін, удзельнік адносіцца да"
 
 msgid ""
 "Members from paste buffer cannot be added because they are not included in "
 "current layer"
 msgstr ""
+"Элементы з буфера абмену не могуць быць дададзены таму, што яны не адносяцца "
+"да бягучага пласту"
 
 msgid "Select previous Gap"
-msgstr ""
+msgstr "Выбраць папярэдні разрыў"
 
 msgid "Select the previous relation member which gives rise to a gap"
 msgstr ""
+"Выбраць папярэдняга ўдзельніка адносін, які вінен у разрыве паслядоўнасці"
 
 msgid "Select next Gap"
-msgstr ""
+msgstr "Выбраць наступны разрыў"
 
 msgid "Select the next relation member which gives rise to a gap"
 msgstr ""
+"Выбраць наступнага ўдзельніка адносін - вінаватага ў разрыве паслядоўнасці"
 
 msgid "Zoom to Gap"
-msgstr ""
+msgstr "Маштабаваць да разрыву"
 
 msgid "Zoom to the gap in the way sequence"
-msgstr ""
+msgstr "Маштабаваць да разрыву ў паслядоўнасці лініі"
 
 msgid "Refers to"
-msgstr ""
+msgstr "Спасылаецца на"
 
 msgid "Download referring relations"
-msgstr ""
+msgstr "Сцягнуць адносіны, што спасылаюцца"
 
 msgid "There were {0} conflicts during import."
-msgstr ""
+msgstr "Падчас імпарту адбылося {0} канфлікт(аў)"
 
 msgid "including immediate children of parent relations"
-msgstr ""
+msgstr "уключаючы непасрэдныя даччыныя элементы адносін"
 
 msgid "Load parent relations"
-msgstr ""
+msgstr "Спампаваць бацькоў адносін"
 
 msgid "Reload"
 msgstr "Абнавіць"
 
 msgid "Loading parent relations"
-msgstr ""
+msgstr "Запампоўка бацькоў адносін"
 
 msgid "Edit the currently selected relation"
-msgstr ""
+msgstr "Правіць абраныя адносіны"
 
 msgid "Apply Changes"
-msgstr ""
+msgstr "Ужыць змены"
 
 msgid "Create new relation in layer ''{0}''"
-msgstr ""
+msgstr "Стварыць новыя адносіны ў пласце ''{0}''"
 
 msgid "Edit new relation in layer ''{0}''"
-msgstr ""
+msgstr "Змяніць новыя адносіны ў пласце ''{0}''"
 
 msgid "Edit relation #{0} in layer ''{1}''"
-msgstr ""
+msgstr "Змяніць адносіны #{0} у пласце ''{1}''"
 
 msgid "Load relation"
-msgstr ""
+msgstr "Чытанне адносін"
 
 msgid "way is connected"
-msgstr ""
+msgstr "лінія злучана"
 
 msgid "way is connected to previous relation member"
-msgstr ""
+msgstr "лінія злучаная з папярэднім удзельнікам адносін"
 
 msgid "way is connected to next relation member"
-msgstr ""
+msgstr "лінія злучаная з наступным удзельнікам адносін"
 
 msgid "way is not connected to previous or next relation member"
-msgstr ""
+msgstr "лінія не злучаная ні з папярэднім, ні з наступным членам адносін"
 
 msgid "{0} - {1} ({2})"
-msgstr ""
+msgstr "{0} - {1} ({2})"
 
 msgid "Wrong number of arguments for bookmark"
-msgstr ""
+msgstr "Няслушная колькасць аргументаў для закладкі"
 
 msgid "Error reading bookmark entry: %s"
-msgstr ""
+msgstr "Памылка чытання запісу ў закладцы: %s"
 
 msgid "Bookmarks"
-msgstr ""
+msgstr "Закладкі"
 
 msgid "<html>There is currently no download area selected.</html>"
 msgstr ""
+"<html>У сапраўдны момант не абрана вобласць для спампоўкі з сервера.</html>"
 
 msgid ""
 "<html><strong>Current download area</strong> (minlon, minlat, maxlon, "
 "maxlat): </html>"
 msgstr ""
+"<html><strong>Бягучая вобласць запампоўкі з сервера</strong> (мін.даў, "
+"мін.шыр, макс.даў, макс.шыр): </html>"
 
 msgid "Create bookmark"
-msgstr ""
+msgstr "Стварыць закладку"
 
 msgid "Add a bookmark for the currently selected download area"
-msgstr ""
+msgstr "Дадаць закладку да вобласці,  вылучанай у сапраўдны момант"
 
 msgid ""
 "Currently, there is no download area selected. Please select an area first."
 msgstr ""
+"У сапраўдны момант вы не паказалі вобласць для спампоўкі. Калі ласка, "
+"абярыце яе."
 
 msgid "Please enter a name for the bookmarked download area."
 msgstr ""
+"Калі ласка, увядзіце назву закладкі для пампаванай з сервера вобласці."
 
 msgid "Name of location"
-msgstr ""
+msgstr "Назва месца"
 
 msgid "Remove the currently selected bookmarks"
-msgstr ""
+msgstr "Выдаліць вылучаныя закладкі"
 
 msgid "Rename the currently selected bookmark"
-msgstr ""
+msgstr "Пераназваць вылучаныя закладкі"
 
 msgid "min lat"
-msgstr ""
+msgstr "мін. шырата"
 
 msgid "min lon"
-msgstr ""
+msgstr "мін. даўгата"
 
 msgid "max lat"
-msgstr ""
+msgstr "макс. шырата"
 
 msgid "max lon"
-msgstr ""
+msgstr "макс. даўгата"
 
 msgid "Clear textarea"
-msgstr ""
+msgstr "Ачысціць тэкставае поле"
 
 msgid ""
 "URL from www.openstreetmap.org (you can paste an URL here to download the "
 "area)"
 msgstr ""
+"URL з www.openstreetmap.org (Вы можаце ўставіць URL сюды, каб запампаваць "
+"вобласць)"
 
 msgid "Bounding Box"
-msgstr ""
+msgstr "Рамка"
 
 msgid "The string ''{0}'' is not a valid double value."
-msgstr ""
+msgstr "Радок ''{0}'' не з’яўляецца правільным падвойным значэннем."
 
 msgid "Value for latitude in range [-90,90] required."
-msgstr ""
+msgstr "Значэнне шыраты павінна быць у межах [-90,90]."
 
 msgid "Value for longitude in range [-180,180] required."
-msgstr ""
+msgstr "Значэнне даўгаты павінна быць у межах  [-180,180]."
 
 msgid "Data Sources and Types:"
-msgstr ""
+msgstr "Крыніцы і тыпы дадзеных:"
 
 msgid "OpenStreetMap data"
-msgstr ""
+msgstr "Дадзеныя OpenStreetMap"
 
 msgid "Select to download OSM data in the selected download area."
 msgstr ""
+"Пазначце, каб запампаваць з сервера ДАДЗЕНЫЯ OSM для абранай вобласці."
 
 msgid "Raw GPS data"
-msgstr ""
+msgstr "Дадзеныя GPS"
 
 msgid "Select to download GPS traces in the selected download area."
-msgstr ""
+msgstr "Пазначце, каб запампаваць з сервера ТРЭКІ GPS для абранай вобласці."
 
 msgid "Select to download notes in the selected download area."
-msgstr ""
+msgstr "Адзначце для загрузкі нататак для вылучанага ўчастка."
 
 msgid "Download as new layer"
-msgstr ""
+msgstr "Запампаваць як новы пласт"
 
 msgid ""
 "<html>Select to download data into a new data layer.<br>Unselect to download "
 "into the currently active data layer.</html>"
 msgstr ""
+"<html>Адзначце, каб загрузіць дадзеныя ў новы пласт дадзеных.<br>Здыміце "
+"сцяжок, каб загрузіць дадзеныя ў бягучы актыўны пласт.</html>"
 
 msgid "Open this dialog on startup"
-msgstr ""
+msgstr "Адкрываць гэты дыялог пры запуску"
 
 msgid ""
 "<html>Autostart ''Download from OSM'' dialog every time JOSM is "
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
+"<html>Аўтаматычна адкрываць дыялог «Запампаваць з OSM» пры кожным запуску "
+"JOSM.<br>Яго можна адкрыць уручную з меню «Файл» ці панэлі прылад.</html>"
 
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
 msgstr ""
+"Націсніце левую кнопку мышы і пацягніце — для вылучэння вобласці, стрэлкі ці "
+"правая кнопка мышы — для пракручвання карты, колца ці +/- — для маштабавання."
 
 msgid "No area selected yet"
-msgstr ""
+msgstr "Вобласць яшчэ не абрана"
 
 msgid "Download area too large; will probably be rejected by server"
 msgstr ""
+"Вобласць для спампоўкі занадта вялікая. Верагодна, сервер адмовіцца "
+"апрацаваць запыт."
 
 msgid "Download area ok, size probably acceptable to server"
-msgstr ""
+msgstr "Плошча ўчастка для загрузкі прымальная для сервера"
 
 msgid "Click to close the dialog and to abort downloading"
-msgstr ""
+msgstr "Націсніце, каб зачыніць дыялог і перапыніць спампоўку з сервера"
 
 msgid "Click to download the currently selected area"
-msgstr ""
+msgstr "Націсніце, каб запампаваць бягучую абраную вобласць"
 
 msgid "Please select a download area first."
-msgstr ""
+msgstr "Калі ласка, абярыце спачатку вобласць для спампоўкі."
 
 msgid ""
 "<html>Neither <strong>{0}</strong> nor <strong>{1}</strong> nor "
 "<strong>{2}</strong> is enabled.<br>Please choose to either download OSM "
 "data, or GPX data, or Notes, or all.</html>"
 msgstr ""
+"<html>Ніводны са сцяжкоў <strong>{0}</strong>, <strong>{1}</strong>, ці "
+"<strong>{2}</strong> не ўсталяваны.<br>Абярыце спампоўку дадзеных OSM, GPX-"
+"трэкаў, нататак ці ўсяго пералічанага.</html>"
 
 msgid "Download referrers (parent relations)"
-msgstr "Спампаваць спасылаюшчых на аб'ект (бацькоўскія адносіны)"
+msgstr "Спампаваць спасылаюшчых на аб’ект (бацькоўскія адносіны)"
 
 msgid "Download object"
-msgstr "Запампоўка аб'екта"
+msgstr "Запампоўка аб’екта"
 
 msgid "Start downloading"
 msgstr "Пачатак запампоўкі"
@@ -7620,71 +8383,72 @@ msgid ""
 "Select if the referrers of the object should be downloaded as well, "
 "i.e.,parent relations and for nodes, additionally, parent ways"
 msgstr ""
-"Адзначце, калі павінны быць запампаваны і аб'екты, якія спасылаюцца на "
+"Адзначце, калі павінны быць запампаваны і аб’екты, якія спасылаюцца на "
 "дадзены (бацькоўскія адносіны, для кропак - бацькоўскія лініі)"
 
 msgid "Select if the members of a relation should be downloaded as well"
 msgstr "Адзначце, калі павінны быць запампаваны і ўдзельнікі адносіны"
 
 msgid "Download referrers (parent relations and ways)"
-msgstr "Спампаваць аб'екты, якія спасылаюцца (бацькоўскія адносіны і лініі)"
+msgstr "Спампаваць аб’екты, якія спасылаюцца (бацькоўскія адносіны і лініі)"
 
 msgid "Class Type"
-msgstr ""
+msgstr "Тып класа"
 
 msgid "Bounds"
-msgstr ""
+msgstr "Межы"
 
 msgid "Choose the server for searching:"
-msgstr ""
+msgstr "Абярыце пошукавы сервер:"
 
 msgid "Enter a place name to search for:"
-msgstr ""
+msgstr "Назва месца для пошуку:"
 
 msgid "Enter a place name to search for"
-msgstr ""
+msgstr "Увядзіце назву месца для пошуку"
 
 msgid "Areas around places"
-msgstr ""
+msgstr "Вобласці вакол месцаў"
 
 msgid "Null pointer exception, possibly some missing tags."
-msgstr ""
+msgstr "Пусты паказальнік памылкі, магчыма, ёсць адсутныя тэгі"
 
 msgid "Search ..."
-msgstr ""
+msgstr "Знайсці ..."
 
 msgid "Click to start searching for places"
-msgstr ""
+msgstr "Націсніце, каб пачаць пошук месцаў"
 
 msgid "Querying name server"
-msgstr ""
+msgstr "Запыт на сервер імёнаў"
 
 msgid "Querying name server ..."
-msgstr ""
+msgstr "Запыт на сервер імёнаў ..."
 
 msgid "Error occured with query ''{0}'': ''{1}''"
-msgstr ""
+msgstr "Адбылася памылка пры запыце ''{0}'': ''{1}''"
 
 msgid "Name server returned invalid data. Please try again."
-msgstr ""
+msgstr "Сервер імёнаў вярнуў няслушныя дадзеныя. Паспрабуйце зноў."
 
 msgid "Bad response"
-msgstr ""
+msgstr "Дрэнны адказ"
 
 msgid "Type"
-msgstr ""
+msgstr "Тып"
 
 msgid "Slippy map"
-msgstr ""
+msgstr "Карта"
 
 msgid "Tile Numbers"
-msgstr ""
+msgstr "Нумары квадратаў"
 
 msgid "JOSM Help Browser"
-msgstr ""
+msgstr "Браўзар даведкі JOSM"
 
 msgid "Failed to read CSS file ''help-browser.css''. Exception is: {0}"
 msgstr ""
+"Не атрымалася прачытаць файл CSS ''help-browser.css''. Тэкст памылкі: {0}"
 
 msgid ""
 "<html><p class=\"warning-header\">Help content for help topic missing</p><p "
@@ -7695,6 +8459,13 @@ msgid ""
 "your local language ({1})</a> and the <a href=\"{3}\">help topic in "
 "English</a>.</p></html>"
 msgstr ""
+"<html><p class=\"warning-header\">Дапамога па гэтай тэме адсутнічае</p><p "
+"class=\"warning-body\">Дапамога для тэмы <strong>{0}</strong> яшчэ не "
+"даступная. Яна адсутнічае, як на вашай мове ({1}), так і на "
+"англійскай.<br><br>Калі ласка, дапамажыце палепшыць даведачную сістэму JOSM "
+"і напішыце даведку па адсутнай тэме. Вы можаце рэдагаваць <a "
+"href=\"{2}\">тэму на сваёй мове ({1})</a> і <a href=\"{3}\">на "
+"англійскай</a>.</p></html>"
 
 msgid ""
 "<html><p class=\"error-header\">Error when retrieving help information</p><p "
@@ -7702,199 +8473,226 @@ msgid ""
 "could not be loaded. The error message is "
 "(untranslated):<br><tt>{1}</tt></p></html>"
 msgstr ""
+"<html><p class=\"error-header\">Адбылася памылка пры атрыманні даведкавай "
+"інфармацыі</p><p class=\"error-body\">Немагчыма загрузіць змесціва "
+"даведкавага артыкула <strong>{0}</strong>. Паведамленне пра памылку (не "
+"перакладзена):<br><tt>{1}</tt></p></html>"
 
 msgid ""
 "<html>Failed to open help page for url {0}.<br>This is most likely due to a "
 "network problem, please check<br>your internet connection</html>"
 msgstr ""
+"<html>Не атрымалася адкрыць старонку даведкі для url {0}.<br>Гэта, хутчэй за "
+"ўсё, адбылося з-за праблемы з сеткай, калі ласка, праверце<br>ваша злучэнне "
+"з інтэрнэтам</html>"
 
 msgid "Failed to open URL"
-msgstr ""
+msgstr "Не атрымалася адкрыць спасылку"
 
 msgid "Open the current help page in an external browser"
-msgstr ""
+msgstr "Адкрыць бягучую старонку даведкі ў вонкавым браўзары"
 
 msgid "Edit the current help page"
-msgstr ""
+msgstr "Правіць бягучую старонку даведкі"
 
 msgid ""
 "<html>The current URL <tt>{0}</tt><br>is an external URL. Editing is only "
 "possible for help topics<br>on the help server <tt>{1}</tt>.</html>"
 msgstr ""
+"<html>Бягучая спасылка <tt>{0}</tt><br>гэта вонкавая спасылка. Толькі "
+"даведкавыя артыкулы можна рэдагаваць<br>на серверы "
+"даведкі<tt>{1}</tt>.</html>"
 
 msgid "Reload the current help page"
-msgstr ""
+msgstr "Запампаваць нанова бягучую старонку даведкі"
 
 msgid "Go to the previous page"
-msgstr ""
+msgstr "Перайсці на папярэднюю старонку"
 
 msgid "Go to the next page"
-msgstr ""
+msgstr "Перайсці на наступную старонку"
 
 msgid "Go to the JOSM help home page"
-msgstr ""
+msgstr "Перайсці на пачатковую старонку даведкі JOSM"
 
 msgid "Bad location in HTML document. Exception was: {0}"
-msgstr ""
+msgstr "Няслушнае размяшчэнне ў  HTML дакуменце. Памылка: {0}"
 
 msgid "Failed to open help page. The target URL is empty."
-msgstr ""
+msgstr "Не атрымалася адкрыць даведкавую старонку. Спасылка пустая."
 
 msgid "Failed to open help page"
-msgstr ""
+msgstr "Не атрымалася адкрыць даведкавую старонку"
 
 msgid "Latitude: "
-msgstr ""
+msgstr "Шырата: "
 
 msgid "Longitude: "
-msgstr ""
+msgstr "Даўгата: "
 
 msgid "Distance: "
-msgstr ""
+msgstr "Адлегласць: "
 
 msgid "Coordinates"
-msgstr ""
+msgstr "Каардынаты"
 
 msgid "History for node {0}"
-msgstr ""
+msgstr "Гісторыя кропкі {0}"
 
 msgid "History for way {0}"
-msgstr ""
+msgstr "Гісторыя лініі {0}"
 
 msgid "History for relation {0}"
-msgstr ""
+msgstr "Гісторыя адносін {0}"
 
 msgid "Reload the history from the server"
-msgstr ""
+msgstr "Запампаваць гісторыю з сервера"
 
 msgid "History not initialized yet. Failed to set reference primitive."
 msgstr ""
+"Гісторыя яшчэ не ініцыялізавана. Не атрымалася наладзіць спасылку на элемент."
 
 msgid ""
 "Failed to set reference. Reference ID {0} does not match history ID {1}."
 msgstr ""
+"Не атрымалася наладзіць спасылку. ID спасылкі: {0} не адпавядае ID гісторыі: "
+"{1}."
 
 msgid ""
 "Failed to set reference. Reference version {0} not available in history."
 msgstr ""
+"Не атрымалася наладзіць спасылку. Версія спасылкі {0} адсутнічае ў гісторыі."
 
 msgid "History not initialized yet. Failed to set current primitive."
 msgstr ""
+"Гісторыя яшчэ не ініцыялізавана. Не атрымалася наладзіць бягучы элемент."
 
 msgid ""
 "Failed to set current primitive. Current version {0} not available in "
 "history."
 msgstr ""
+"Не атрымалася наладзіць бягучы элемент. Бягучая версія {0} не магчымая ў "
+"гісторыі."
 
 msgid "Load history"
-msgstr ""
+msgstr "Запампаваць гісторыю"
 
 msgid "Loading history for node {0}"
-msgstr ""
+msgstr "Спампоўка гісторыі для кропкі {0}"
 
 msgid "Loading history for way {0}"
-msgstr ""
+msgstr "Спампоўка гісторыі лініі {0}"
 
 msgid "Loading history for relation {0}"
-msgstr ""
+msgstr "Чытанне гісторыі для адносін {0}"
 
 msgid "Node {0}"
-msgstr ""
+msgstr "Кропка {0}"
+
+msgid "The nodes of this way are in reverse order"
+msgstr "Кропкі на гэтай лініі ідуць у адваротным парадку"
 
 msgid "Zoom to node"
-msgstr ""
+msgstr "Наблізіцца да кропкі"
 
 msgid "Zoom to this node in the current data layer"
-msgstr ""
+msgstr "Наблізіцца да гэтай кропкі ў бягучым пласце"
 
 msgid "Open a history browser with the history of this node"
-msgstr ""
+msgstr "Адкрыць гісторыю гэтай кропкі з дапамогай браўзара"
 
 msgid "Way {0}"
-msgstr ""
+msgstr "Лінія {0}"
 
 msgid "Relation {0}"
-msgstr ""
+msgstr "Адносіны {0}"
 
 msgid "Object"
-msgstr ""
+msgstr "Аб’ект"
 
 msgid "not present"
-msgstr ""
+msgstr "не існуе"
 
 msgid "Changeset comment"
-msgstr ""
+msgstr "Каментар да пакета правак"
 
 msgid "Changeset source"
-msgstr ""
+msgstr "Крыніца дадзеных пакета правак"
 
 msgid "Imagery used"
-msgstr ""
+msgstr "Скарыстаныя здымкі"
 
 msgid "<b>Source</b>:"
-msgstr ""
+msgstr "<b>Крыніца</b>:"
 
 msgid "<b>Imagery</b>:"
-msgstr ""
+msgstr "<b>Здымак</b>:"
 
 msgid ""
 "<html>Version <strong>{0}</strong> currently edited in layer ''{1}''</html>"
 msgstr ""
+"<html>Версію <strong>{0}</strong> ў бягучы момант зменена ў пласце "
+"''{1}''</html>"
 
 msgid ""
 "<html>Version <strong>{0}</strong> created on <strong>{1}</strong></html>"
 msgstr ""
+"<html>Версія<strong>{0}</ strong>Створана на<strong>{1}</strong></html>"
 
 msgid "Changeset"
-msgstr ""
+msgstr "Пакет правак"
 
 msgid "Changeset info"
-msgstr ""
+msgstr "Інфармацыя пра пакет правак"
 
 msgid "Launch browser with information about the changeset"
-msgstr ""
+msgstr "Адкрыць браўзар з інфармацыяй пра пакет правак"
 
 msgid "Show changeset {0}"
-msgstr ""
+msgstr "Паказаць пакет правак {0}"
 
 msgid "User info"
-msgstr ""
+msgstr "Інфармацыя пра карыстальніка"
 
 msgid "Launch browser with information about the user"
-msgstr ""
+msgstr "Адкрыць у браўзары інфармацыю пра карыстальніка"
 
 msgid "Show user {0}"
-msgstr ""
+msgstr "Паказаць карыстальніка {0}"
 
 msgid "Ver"
-msgstr ""
+msgstr "Вер."
 
 msgid "A"
-msgstr ""
+msgstr "A"
 
 msgid "B"
-msgstr ""
+msgstr "B"
 
 msgid ""
 "Failed to update primitive with id {0} because current edit layer is null"
 msgstr ""
+"Не атрымалася абнавіць элемент з id {0}, таму што бягучы рэдагуемы пласт "
+"з’яўляецца null"
 
 msgid ""
 "Failed to update primitive with id {0} because current edit layer does not "
 "include such a primitive"
 msgstr ""
+"Не атрымалася абнавіць элемент з id {0}, таму што бягучы пласт рэдагавання "
+"не ўтрымоўвае такога элемента"
 
 msgid "Synchronize node {0} only"
-msgstr ""
+msgstr "Сінхранізаваць толькі кропку {0}"
 
 msgid "Synchronize way {0} only"
-msgstr ""
+msgstr "Сінхранізаваць толькі лінію {0}"
 
 msgid "Synchronize relation {0} only"
-msgstr ""
+msgstr "Сінхранізаваць толькі адносіны {0}"
 
 msgid "Synchronize entire dataset"
-msgstr ""
+msgstr "Сінхранізаваць увесь набор дадзеных"
 
 msgid ""
 "<html>Uploading <strong>failed</strong> because the server has a newer "
@@ -7906,6 +8704,14 @@ msgid ""
 "server.<br>Click <strong>{6}</strong> to abort and continue "
 "editing.<br></html>"
 msgstr ""
+"<html>Перадача на сервер <strong>перапынена</strong> бо на серверы ёсць "
+"навейшая версія адной<br>з вашых кропак, ліній ці адносін.<br>Чыннікам "
+"канфлікту з’яўляецца <strong>{0}</strong> з id "
+"<strong>{1}</strong>,<br>версія дадзеных на серверы {2}, ваша версія "
+"{3}.<br><br>Націсніце <strong>{4}</strong>, каб сінхранізаваць толькі "
+"канфліктны элемент.<br>Націсніце <strong>{5}</strong>, каб сінхранізаваць "
+"увесь лакальны набор дадзеных з серверам.<br>Націсніце <strong>{6}</strong>, "
+"каб перапыніць перадачу і працягнуць рэдагаванне.<br></html>"
 
 msgid ""
 "<html>Uploading <strong>failed</strong> because the server has a newer "
@@ -7914,38 +8720,50 @@ msgid ""
 "server.<br>Click <strong>{1}</strong> to abort and continue "
 "editing.<br></html>"
 msgstr ""
+"<html><strong>Перадача на сервер </strong>не атрымалася, бо на серверы "
+"маецца навейшая версія адной <br> з вашых кропак, ліній ці адносін. "
+"<br><br>. Націсніце на <strong>{0}</strong> для сінхранізацыі лакальных "
+"дадзеных з серверам. <br> Націсніце <strong>{1}</strong> каб перапыніць "
+"перадачу і працягнуць рэдагаванне.<br></html>"
 
 msgid ""
 "<html>Uploading <strong>failed</strong> because you have been "
 "using<br>changeset {0} which was already closed at {1}.<br>Please upload "
 "again with a new or an existing open changeset.</html>"
 msgstr ""
+"<html>Перадача на сервер <strong>не атрымалася</strong> таму што вы "
+"выкарыстоўваеце<br>пакет правак {0}, які ўжо быў зачынены ў {1}.<br>Калі "
+"ласка, перадайце яшчэ раз, выкарыстоўваючы новы ці існы адкрыты пакет "
+"правак.</html>"
 
 msgid "Changeset closed"
-msgstr ""
+msgstr "Пакет правак зачынены"
 
 msgid "Prepare conflict resolution"
-msgstr ""
+msgstr "Падрыхтаваць уладжванне канфлікту"
 
 msgid "Click to download all referring objects for {0}"
-msgstr ""
+msgstr "Націсніце, каб загрузіць усе аб''екты, на якія спасылаецца {0}"
 
 msgid "Click to cancel and to resume editing the map"
-msgstr ""
+msgstr "Пстрыкніце, каб адмяніць і працягнуць праўку карты"
 
 msgid ""
 "Click <strong>{0}</strong> to load them now.<br>If necessary JOSM will "
 "create conflicts which you can resolve in the Conflict Resolution Dialog."
 msgstr ""
+"Націсніце <strong>{0}</strong>, каб загрузіць іх цяпер.<br>Калі спатрэбіцца, "
+"JOSM створыць канфлікты, якія вы зможаце выправіць праз Дыялог вырашэння "
+"канфліктаў."
 
 msgid "Object still in use"
-msgstr ""
+msgstr "Аб’ект яшчэ выкарыстоўваецца"
 
 msgid "Error header \"{0}\" did not match with an expected pattern"
-msgstr ""
+msgstr "Загаловак памылкі \"{0}\" не адпавядае чаканаму шаблону"
 
 msgid "Upload"
-msgstr ""
+msgstr "Адаслаць"
 
 msgid ""
 "<html>Select which actions to perform for this layer, if you click the "
@@ -7953,169 +8771,192 @@ msgid ""
 "server.<br/>Check \"Save\" to save the layer to the file specified on the "
 "left.</html>"
 msgstr ""
+"<html>Вылучыце, якое дзеянне выконваць над гэтым пластом, націснуўшы на "
+"крайнюю злева кнопку.<br/>Адзначце ''upload'' для перадачы зменаў на сервер "
+"OSM.<br/>Адзначце \"Save\" для захавання пласта ў файл паказаны злева.</html>"
 
 msgid "Provide a brief comment for the changes you are uploading:"
-msgstr ""
+msgstr "Пракаментуйце дадзеныя, якія перадаюцца на сервер:"
 
 msgid "Enter an upload comment"
-msgstr ""
+msgstr "Увядзіце каментар для перадачы на сервер"
 
 msgid "Specify the data source for the changes"
-msgstr ""
+msgstr "Пакажыце крыніцу дадзеных для правак"
 
 msgid "obtain from current layers"
-msgstr ""
+msgstr "атрымаць з бягучых пластоў"
 
 msgid "Enter a source"
-msgstr ""
+msgstr "Увядзіце крыніцу"
 
 msgid "Changeset id:"
-msgstr ""
+msgstr "ID пакета правак:"
 
 msgid "Created at:"
-msgstr ""
+msgstr "Створаны:"
 
 msgid "Changeset comment:"
-msgstr ""
+msgstr "Каментар да пакета правак:"
 
 msgid "No open changeset"
-msgstr ""
+msgstr "Няма адкрытага пакета правак"
 
 msgid ""
 "Please decide what changeset the data is uploaded to and whether to close "
 "the changeset after the next upload."
 msgstr ""
+"Калі ласка, пакажыце, у які пакет правак перадаць дадзеныя і ці трэба затым "
+"зачыніць пакет правак."
 
 msgid "Upload to a new changeset"
-msgstr ""
+msgstr "Адаслаць на сервер у новы пакет правак"
 
 msgid "Open a new changeset and use it in the next upload"
 msgstr ""
+"Адкрыць новы пакет правак і выкарыстоўваць яго ў наступнай перадачы на сервер"
 
 msgid "Upload to an existing changeset"
-msgstr ""
+msgstr "Абраць пакет правак"
 
 msgid "Upload data to an already existing and open changeset"
-msgstr ""
+msgstr "Адаслаць дадзеныя ва ўжо існы і адкрыты пакет правак"
 
 msgid "Select an open changeset"
-msgstr ""
+msgstr "Абярыце адкрыты пакет правак"
 
 msgid "Close changeset after upload"
-msgstr ""
+msgstr "Зачыніць пакет правак пасля перадачы на сервер"
 
 msgid "Select to close the changeset after the next upload"
 msgstr ""
+"Адзначце, калі пакет правак трэба зачыніць пасля наступнай перадачы на сервер"
 
 msgid "Load the list of your open changesets from the server"
-msgstr ""
+msgstr "Загрузіць з сервера спіс адкрытых вамі пакетаў правак"
 
 msgid "Close the currently selected open changeset"
-msgstr ""
+msgstr "Зачыніць адкрыты пакет правак, абраны ў сапраўдны момант"
 
 msgid "<html>Please select the changesets you want to close</html>"
 msgstr ""
+"<html>Калі ласка, абярыце пакеты правак, якія жадаеце зачыніць</html>"
 
 msgid "Open changesets"
-msgstr ""
+msgstr "Адкрыць пакеты правак"
 
 msgid "Close changesets"
-msgstr ""
+msgstr "Зачыніць пакеты правак"
 
 msgid "Close the selected open changesets"
-msgstr ""
+msgstr "Зачыніць абраныя адкрытыя пакеты правак"
 
 msgid "Cancel closing of changesets"
-msgstr ""
+msgstr "Адмяніць зачыненне пакетаў правак"
 
 msgid "Closing changeset"
-msgstr ""
+msgstr "Зачыненне пакета правак"
 
 msgid "Closing changeset {0}"
-msgstr ""
+msgstr "Зачыненне пакета правак {0}"
 
 msgid ""
 "Failed to put Credential Dialog always on top. Caught security exception."
 msgstr ""
+"Не атрымоўваецца змесцаваць дыялог уліковых дадзеных заўсёды па-над іншымі "
+"вокнамі. Памылка бяспекі."
 
 msgid "Enter credentials for OSM API"
-msgstr ""
+msgstr "Увядзіце ўліковыя дадзеныя для OSM API"
 
 msgid "Enter credentials for host"
-msgstr ""
+msgstr "Увядзіце ўліковыя дадзеныя для хаста"
 
 msgid "Enter credentials for HTTP proxy"
-msgstr ""
+msgstr "Увядзіце ўліковыя дадзеныя для проксі HTTP"
 
 msgid "Password"
-msgstr ""
+msgstr "Пароль"
 
 msgid "Warning: The password is transferred unencrypted."
-msgstr ""
+msgstr "Увага: Пароль будзе перададзены ў незашыфраваным выглядзе."
 
 msgid "Please enter the user name of your OSM account"
-msgstr ""
+msgstr "Калі ласка, увядзіце імя карыстальніка для вашага акаўнта OSM"
 
 msgid "Please enter the password of your OSM account"
-msgstr ""
+msgstr "Калі ласка, увядзіце пароль вашага ўліковага запісу OSM"
 
 msgid ""
 "Authenticating at the OSM API ''{0}'' failed. Please enter a valid username "
 "and a valid password."
 msgstr ""
+"Аўтэнтыфікацыя ў OSM API ''{0}'' не атрымалася. Калі ласка, увядзіце "
+"правільныя імя карыстальніка і пароль."
 
 msgid "Please enter the user name of your account"
-msgstr ""
+msgstr "Калі ласка, увядзіце імя карыстальніка"
 
 msgid "Please enter the password of your account"
-msgstr ""
+msgstr "Калі ласка, увядзіце пароль"
 
 msgid ""
 "Authenticating at the host ''{0}'' failed. Please enter a valid username and "
 "a valid password."
 msgstr ""
+"Не атрымалася выканаць аўтэнтыфікацыю на хасце «{0}». Калі ласка, увядзіце "
+"правільныя імя карыстальніка і пароль."
 
 msgid "Please enter the user name for authenticating at your proxy server"
 msgstr ""
+"Калі ласка, увядзіце імя карыстальніка для аўтэнтыфікацыі на вашым проксі-"
+"серверы"
 
 msgid "Please enter the password for authenticating at your proxy server"
 msgstr ""
+"Калі ласка, увядзіце пароль для аўтэнтыфікацыі на вашым проксі-серверы"
 
 msgid ""
 "Authenticating at the HTTP proxy ''{0}'' failed. Please enter a valid "
 "username and a valid password."
 msgstr ""
+"Аўтэнтыфікацыя на проксі HTTP ''{0}'' не атрымалася. Калі ласка, увядзіце "
+"правільныя імя карыстальніка і пароль."
 
 msgid ""
 "Warning: depending on the authentication method the proxy server uses the "
 "password may be transferred unencrypted."
 msgstr ""
+"Папярэджанне: у залежнасці ад метаду аўтэнтыфікацыі, пароль, які "
+"выкарыстоўвае проксі-сервер, можа быць перададзены ў незашыфраваным выглядзе."
 
 msgid "Authenticate"
-msgstr ""
+msgstr "Аўтэнтфікацыя"
 
 msgid "Authenticate with the supplied username and password"
-msgstr ""
+msgstr "Аўтэнтыфікацыя з дадзенымі імем карыстальніка і паролем"
 
 msgid "Cancel authentication"
-msgstr ""
+msgstr "Адмяніць аўтэнтыфікацыю"
 
 msgid "Downloading file"
-msgstr ""
+msgstr "Спампоўка файла"
 
 msgid "Downloading File {0}: {1} bytes..."
-msgstr ""
+msgstr "Загрузка файла {0}: {1} байт..."
 
 msgid "Download finished"
-msgstr ""
+msgstr "Спампоўка завершана"
 
 msgid "Unpacking {0} into {1}"
-msgstr ""
+msgstr "Распакаванне {0} у {1}"
 
 msgid ""
 "Cannot download file ''{0}''. Its download link ''{1}'' is not a valid URL. "
 "Skipping download."
 msgstr ""
+"Не атрымалася загрузіць файл ''{0}''. Спасылка ''{1}'' не з’яўляецца "
+"дзейсным URL. Пропуск загрузкі."
 
 msgid ""
 "Could not retrieve the list of your open changesets because<br>JOSM does not "
@@ -8123,97 +8964,106 @@ msgid ""
 "not entitled<br>to know the identity of the user on whose behalf you are "
 "working."
 msgstr ""
+"Немагчыма атрымаць спіс вашых адкрытых пакетаў правак, таму што<br>JOSM не "
+"ідэнтыфікаваў вас.<br>Або вы працуеце ананімна, або вам не "
+"дазволена<br>ідэнтыфікаваць карыстальніка, ад імя якога вы працуеце."
 
 msgid "Missing user identity"
-msgstr ""
+msgstr "Адсутнасць сапраўднасці карыстальніка"
 
 msgid ""
 "Failed to retrieve user infos for the current JOSM user. Exception was: {0}"
 msgstr ""
+"Не атрымалася атрымаць інфармацыю пра бягучага карыстальніка JOSM. Памылка: "
+"{0}"
 
 msgid "Download objects"
-msgstr ""
+msgstr "Загрузіць аб’екты"
 
 msgid "Initializing nodes to download ..."
-msgstr ""
+msgstr "Ініцыялізацыя кропак для загрузкі..."
 
 msgid "Object could not be downloaded"
 msgid_plural "Some objects could not be downloaded"
-msgstr[0] "Не атрымалася спампаваць аб'ект"
-msgstr[1] "Не атрымалася спампаваць некаторыя аб'екты"
-msgstr[2] "Не атрымалася спампаваць аб'ект"
+msgstr[0] "Не атрымалася запампаваць аб’ект"
+msgstr[1] "Не атрымалася запампаваць некаторыя аб’екты"
+msgstr[2] "Не атрымалася запампаваць некаторыя аб’екты"
 
 msgid "One object could not be downloaded.<br>"
 msgid_plural "{0} objects could not be downloaded.<br>"
-msgstr[0] "Не атрымалася спампаваць аб'ект. <br>"
-msgstr[1] "{0} аб'екта не ўдалося спампаваць. <br>"
-msgstr[2] "{0} аб'ектаў не ўдалося спампаваць. <br>"
+msgstr[0] "Не атрымалася спампаваць {0} аб’ект. <br>"
+msgstr[1] "{0} аб’екта не ўдалося спампаваць. <br>"
+msgstr[2] "{0} аб’ектаў не ўдалося спампаваць. <br>"
 
 msgid ""
 "The server replied with response code 404.<br>This usually means, the server "
 "does not know an object with the requested id."
 msgstr ""
 "Сервер адказаў кодам 404. <br> Звычайна гэта азначае, што серверу невядомы "
-"аб'ект з запытаным ідэнтыфікатарам."
+"аб’ект з запытаным ідэнтыфікатарам."
 
 msgid "missing objects:"
-msgstr "адсутныя аб'екты:"
+msgstr "адсутныя аб’екты:"
 
 msgid "One downloaded object is deleted."
 msgid_plural "{0} downloaded objects are deleted."
-msgstr[0] "Запампаваны аб'ект выдалены."
-msgstr[1] "{0} запампаваных аб'екта выдалена"
-msgstr[2] "{0} запампаваных аб'ектаў выдалена"
+msgstr[0] "Запампаваны {0} аб’ект выдалены."
+msgstr[1] "{0} запампаваных аб’екта выдалена"
+msgstr[2] "{0} запампаваных аб’ектаў выдалена"
 
 msgid ""
 "Either edit the path manually in the text field or click the \"...\" button "
 "to open a file chooser."
 msgstr ""
+"Калі ласка, увядзіце шлях у тэкставае поле ўручную або пстрыкніце кнопку "
+"«...», каб адкрыць дыялог выбару файлаў."
 
 msgid "The bold text is the name of the layer."
-msgstr ""
+msgstr "Тоўсты тэкст — гэта імя пласта."
 
 msgid "Click here to choose save path"
-msgstr ""
+msgstr "<абраць шлях для захавання>"
 
 msgid "Layer ''{0}'' is not backed by a file"
-msgstr ""
+msgstr "Пласт ''{0}'' пакуль яшчэ не захаваны ў файле"
 
 msgid "File ''{0}'' is not writable. Please enter another file name."
-msgstr ""
+msgstr "Файл ''{0}'' не запісваецца. Калі ласка, памяняйце імя файла."
 
 msgid "Click cell to change the file path."
-msgstr ""
+msgstr "Пстрыкніце на вочку, каб змяніць шлях да файла."
 
 msgid "Launch a file chooser to select a file"
-msgstr ""
+msgstr "Адкрыць дыялог выбару файла"
 
 msgid "Select filename"
-msgstr ""
+msgstr "Абярыце імя файла"
 
 msgid "Open Recent"
-msgstr ""
+msgstr "Нядаўнія файлы"
 
 msgid "List of recently opened files"
-msgstr ""
+msgstr "Спіс нядаўна адкрываных файлаў"
 
 msgid "Clear"
-msgstr ""
+msgstr "Ачысціць"
 
 msgid "Clear the list of recently opened files"
-msgstr ""
+msgstr "Ачысціць спіс нядаўна адкрываных файлаў"
 
 msgid "Saving layer to ''{0}'' ..."
-msgstr ""
+msgstr "Захаванне пласта ў ''{0}'' ..."
 
 msgid "Unsaved changes - Save/Upload before exiting?"
 msgstr ""
+"Незахаваныя змены - Захаваць лакальна або перадаць на сервер перад выхадам?"
 
 msgid "Unsaved changes - Save/Upload before deleting?"
 msgstr ""
+"Незахаваныя змены - Захаваць лакальна ці перадаць на сервер перад выдаленнем?"
 
 msgid "Uploading and saving modified layers ..."
-msgstr ""
+msgstr "Перадача на сервер і захаванне змененых пластоў ..."
 
 msgid ""
 "<html>{0} layer has unresolved conflicts.<br>Either resolve them first or "
@@ -8222,10 +9072,17 @@ msgid_plural ""
 "<html>{0} layers have unresolved conflicts.<br>Either resolve them first or "
 "discard the modifications.<br>Layers with conflicts:</html>"
 msgstr[0] ""
+"<html>{0} пласт змяшчае нявырашаныя канфлікты.<br>Спачатку вырашыце іх ці "
+"адмяніце змены<br>Пласт з канфліктамі:</html>"
 msgstr[1] ""
+"<html>{0} пласты змяшчаюць нявырашаныя канфлікты.<br>Спачатку вырашыце іх ці "
+"адмяніце змены<br>Пласты з канфліктамі:</html>"
+msgstr[2] ""
+"<html>{0} пластоў змяшчаюць нявырашаныя канфлікты.<br>Спачатку вырашыце іх "
+"ці адмяніце змены<br>Пласты з канфліктамі:</html>"
 
 msgid "Unsaved data and conflicts"
-msgstr ""
+msgstr "Незахаваныя дадзеныя і канфлікты"
 
 msgid ""
 "<html>{0} layer needs saving but has no associated file.<br>Either select a "
@@ -8235,10 +9092,18 @@ msgid_plural ""
 "file for each of them or discard the changes.<br>Layers without a "
 "file:</html>"
 msgstr[0] ""
+"<html>{0} пласт трэба захаваць, але няма адпаведнага файла.<br>Альбо абярыце "
+"файл для гэтага пласта, альбо адмяніце змены. <br>Пласт без файла:</html>"
 msgstr[1] ""
+"<html>{0} пласта трэба захаваць, але няма адпаведнага файла.<br>Альбо "
+"абярыце файл для кожнага пласта, альбо адмяніце змены.<br>Пласты без "
+"файла:</html>"
+msgstr[2] ""
+"<html>{0} слаёў трэба захаваць, але няма адпаведнага файла.<br>Альбо абярыце "
+"файл для кожнага пласта, альбо адмяніце змены.<br>Пласты без файла:</html>"
 
 msgid "Unsaved data and missing associated file"
-msgstr ""
+msgstr "Незахаваныя дадзеныя і адсутнасць адпаведнага файла"
 
 msgid ""
 "<html>{0} layer needs saving but has an associated file<br>which cannot be "
@@ -8249,40 +9114,53 @@ msgid_plural ""
 "written.<br>Either select another file for each of them or discard the "
 "changes.<br>Layers with non-writable files:</html>"
 msgstr[0] ""
+"<html>{0} пласт патрабуецца захаваць, але адкрыты файл<br>не атрымоўваецца "
+"захаваць.<br>Альбо выберыце іншы файл для гэтага пласта, альбо адмяніце "
+"змены.<br>Пласт з незапісваемым файлам:</html>"
 msgstr[1] ""
+"<html>{0} пласты патрабуецца захаваць, але адкрытыя файлы<br>не "
+"атрымоўваецца захаваць.<br>Альбо выберыце іншыя файлы для гэтагых пластоў, "
+"альбо адмяніце змены.<br>Пласты з незапісваемымі файламі:</html>"
+msgstr[2] ""
+"<html>{0} пластоў патрабуецца захаваць, але адкрытыя файлы<br>не "
+"атрымоўваецца захаваць.<br>Альбо выберыце іншыя файлы для гэтагых пластоў, "
+"альбо адмяніце змены.<br>Пласты з незапісваемымі файламі:</html>"
 
 msgid "Unsaved data non-writable files"
-msgstr ""
+msgstr "Незахаваныя дадзеныя файлаў, у якія немагчыма ажыццявіць запіс"
 
 msgid "Close this dialog and resume editing in JOSM"
-msgstr ""
+msgstr "Зачыніць гэты дыялог і працягнуць рэдагаванне ў JOSM"
 
 msgid "Exit now!"
-msgstr ""
+msgstr "Выйсці цяпер!"
 
 msgid "Exit JOSM without saving. Unsaved changes are lost."
-msgstr ""
+msgstr "Выйсці з  JOSM без захавання. Незахаваныя змены будуць згублены."
 
 msgid "Delete now!"
-msgstr ""
+msgstr "Выдаліць цяпер!"
 
 msgid "Delete layers without saving. Unsaved changes are lost."
-msgstr ""
+msgstr "Выдаліць пласты без захавання. Незахаваныя дадзеныя будуць згублены."
 
 msgid "Perform actions before exiting"
-msgstr ""
+msgstr "Выканаць дзеянне перад выйсцем"
 
 msgid "Exit JOSM with saving. Unsaved changes are uploaded and/or saved."
 msgstr ""
+"Выхад з JOSM з захаваннем. Незахаваныя змены будуць захаваныя лакальна або "
+"загружаныя на сервер."
 
 msgid "Perform actions before deleting"
-msgstr ""
+msgstr "Выканаць дзеянні перад выдаленнем"
 
 msgid "Save/Upload layers before deleting. Unsaved changes are not lost."
 msgstr ""
+"Пласты захаваць лакальна або перадаць на сервер. Змены не будуць страчаныя."
 
 msgid "Preparing layer ''{0}'' for upload ..."
-msgstr ""
+msgstr "Падрыхтоўка пласта ''{0}'' для перадачы на сервер..."
 
 msgid ""
 "<html>An upload and/or save operation of one layer with modifications<br>was "
@@ -8291,85 +9169,97 @@ msgid_plural ""
 "<html>Upload and/or save operations of {0} layers with modifications<br>were "
 "canceled or have failed.</html>"
 msgstr[0] ""
+"<html>Аперацыя па адпраўцы/захаванню пласта са зменамі<br>была адменена "
+"альбо не атрымалася.</html>"
 msgstr[1] ""
+"<html>Аперацыя па адпраўцы/захаванню {0} пластоў са зменамі<br>была адменена "
+"альбо не атрымалася.</html>"
+msgstr[2] ""
+"<html>Аперацыя па адпраўцы/захаванню {0} пластоў са зменамі<br>была адменена "
+"альбо не атрымалася.</html>"
 
 msgid "Incomplete upload and/or save"
-msgstr ""
+msgstr "Няпоўная перадача на сервер ці не ўсё захавана"
 
 msgid "should be uploaded"
-msgstr ""
+msgstr "варта перадаць на сервер"
 
 msgid "should be saved"
-msgstr ""
+msgstr "варта захаваць"
 
 msgid ""
 "Layer ''{0}'' has modifications which should be uploaded to the server."
-msgstr ""
+msgstr "У пласце ''{0}'' ёсць змены, якія павінны быць загружаныя на сервер."
 
 msgid "Layer ''{0}'' has modifications which are discouraged to be uploaded."
-msgstr ""
+msgstr "Пласт ''{0}'' ўтрымлівае змены, якія не рэкамендуюцца для загрузкі."
 
 msgid "Layer ''{0}'' has no modifications to be uploaded."
-msgstr ""
+msgstr "У пласце ''{0}'' няма зменаў, якія трэба было б перадаць на сервер."
 
 msgid ""
 "Layer ''{0}'' has modifications which should be saved to its associated file "
 "''{1}''."
 msgstr ""
+"Пласт ''{0}'' ўтрымлівае змены, якія неабходна захаваць у адпаведны файл "
+"''{1}''."
 
 msgid "Layer ''{0}'' has no modifications to be saved."
-msgstr ""
+msgstr "У пласце ''{0}'' няма змен. Таму няма чаго захоўваць."
 
 msgid "Layer Name and File Path"
-msgstr ""
+msgstr "Імя пласта і шлях да файла"
 
 msgid "Recommended Actions"
-msgstr ""
+msgstr "Рэкамендуемыя дзеянні"
 
 msgid "Actions To Take"
-msgstr ""
+msgstr "Выкананае дзеянне"
 
 msgid "Update objects"
-msgstr ""
+msgstr "Абнавіць аб’екты"
 
 msgid "Initializing nodes to update ..."
-msgstr ""
+msgstr "Ініцыялізацыя кропак для абнаўлення ..."
 
 msgid "Initializing ways to update ..."
-msgstr ""
+msgstr "Ініцыялізацыя ліній для абнаўлення ..."
 
 msgid "Initializing relations to update ..."
-msgstr ""
+msgstr "Ініцыялізацыя адносін для абнаўлення ..."
 
 msgid "Settings"
-msgstr ""
+msgstr "Налады"
 
 msgid "Decide how to upload the data and which changeset to use"
 msgstr ""
+"Вырашыць, як перадаць дадзеныя на сервер і якія выкарыстоўваць пакеты правак"
 
 msgid "Tags of new changeset"
-msgstr ""
+msgstr "Тэгі новага пакета правак"
 
 msgid "Apply tags to the changeset data is uploaded to"
-msgstr ""
+msgstr "Ужыць тэгі на пакет правак, які перадаецца"
 
 msgid "Manage open changesets and select a changeset to upload to"
 msgstr ""
+"Кіраваць адкрытымі пакетамі правак і абраць пакет правак для перадачы на "
+"сервер"
 
 msgid "Configure advanced settings"
-msgstr ""
+msgstr "Задаць пашыраныя налады"
 
 msgid "Upload to ''{0}''"
-msgstr ""
+msgstr "Адаслаць на сервер у ''{0}''"
 
 msgid "Upload Changes"
-msgstr ""
+msgstr "Адаслаць змены на сервер"
 
 msgid "Upload the changed primitives"
-msgstr ""
+msgstr "Перадаць на сервер змененыя элементы"
 
 msgid "Please revise upload comment"
-msgstr ""
+msgstr "Праверце каментар да перадачы"
 
 msgid ""
 "Your upload comment is <i>empty</i>, or <i>very short</i>.<br /><br />This "
@@ -8378,9 +9268,15 @@ msgid ""
 "/>to understand what is going on!<br /><br />If you spend a minute now to "
 "explain your change, you will make life<br />easier for many other mappers."
 msgstr ""
+"Ваш каментар — <i>пусты</i> ці <i>занадта кароткі</i>.<br /><br />Тэхнічна "
+"яго можна пакінуць такім, але ўлічыце, што шматлікія карыстальнікі<br "
+"/>праглядаюць змены ў сваім арэале і жадаюць бачыць зразумелыя тлумачэнні "
+"таго,<br />што было зменена.<br /><br />Выдаткуйце цяпер хвіліну на "
+"тлумачэнне зробленых вамі змен —<br />Вы палегчыце працу іншым удзельнікам "
+"праекта."
 
 msgid "Please specify a changeset source"
-msgstr ""
+msgstr "Пакажыце крыніцу дадзеных для пакета правак"
 
 msgid ""
 "You did not specify a source for your changes.<br />It is technically "
@@ -8388,27 +9284,32 @@ msgid ""
 "origins of the data.<br /><br />If you spend a minute now to explain your "
 "change, you will make life<br />easier for many other mappers."
 msgstr ""
+"Вы не паказалі крыніцу дадзеных для сваіх правак.<br />Тэхнічна гэта "
+"дапушчальна, але гэта інфармацыя дапамагае<br />іншым карыстальнікам "
+"зразумець паходжанне дадзеных.<br /><br />Калі вы выдаткуеце хвіліну, на "
+"тлумачэнне да сваіх правак, гэта <br />спросціць працу шматлікім іншым "
+"картографам."
 
 msgid "Revise"
-msgstr ""
+msgstr "Праверыць"
 
 msgid "Continue as is"
-msgstr ""
+msgstr "Працягнуць як ёсць"
 
 msgid "Return to the previous dialog to enter a more descriptive comment"
-msgstr ""
+msgstr "Вярнуцца ў папярэдні дыялог, каб дадаць больш разгорнуты каментар"
 
 msgid "Cancel and return to the previous dialog"
-msgstr ""
+msgstr "Адмяніць і вярнуцца да папярэдняга дыялогу"
 
 msgid "Please enter a valid chunk size first"
-msgstr ""
+msgstr "Калі ласка, спачатку ўвядзіце дапушчальны памер часткі"
 
 msgid "Illegal chunk size"
-msgstr ""
+msgstr "Няправільны памер часткі"
 
 msgid "{0}={1}"
-msgstr ""
+msgstr "{0}={1}"
 
 msgid ""
 "<html>The following changeset tag contains an empty "
@@ -8417,48 +9318,66 @@ msgid_plural ""
 "<html>The following changeset tags contain an empty "
 "key/value:<br>{0}<br>Continue?</html>"
 msgstr[0] ""
+"<html>Наступны тэг пакета змен утрымоўвае пусты "
+"ключ/значэнне:<br>{0}<br>Працягнуць?</html>"
 msgstr[1] ""
+"<html>Наступныя тэгі пакета змен утрымоўваюць пусты "
+"ключ/значэнне:<br>{0}<br>Працягнуць?</html>"
+msgstr[2] ""
+"<html>Наступныя тэгі пакета змен утрымоўваюць пусты "
+"ключ/значэнне:<br>{0}<br>Працягнуць?</html>"
 
 msgid "Empty metadata"
-msgstr ""
+msgstr "Пустыя метададзеныя"
 
 msgid "Cancel the upload and resume editing"
-msgstr ""
+msgstr "Адмяніць перадачу на сервер і працягнуць рэдагаванне"
 
 msgid "Tags of changeset {0}"
-msgstr ""
+msgstr "Тэгі пакета правак {0}"
 
 msgid ""
 "Object ''{0}'' is already deleted on the server. Skipping this object and "
 "retrying to upload."
 msgstr ""
+"Аб’ект ''{0}'' ужо выдалены з сервера. Пропуск гэтага аб’екта і паўторная "
+"спроба перадачы."
 
 msgid "Preparing objects to upload ..."
-msgstr ""
+msgstr "Падрыхтоўка аб’ектаў для перадачы..."
 
 msgid "Objects are uploaded to a <strong>new changeset</strong>."
-msgstr ""
+msgstr "Аб’екты перадаюцца ў <strong>новы пакет правак</strong>."
 
 msgid ""
 "Objects are uploaded to the <strong>open changeset</strong> {0} with upload "
 "comment ''{1}''."
 msgstr ""
+"Аб’екты накіроўваюцца ў <strong>адкрыты набор змен</strong> {0} з каментаром "
+"''{1}''."
 
 msgid ""
 "The changeset is going to be <strong>closed</strong> after this upload"
 msgstr ""
+"Пакет правак будзе <strong>зачынены</strong> пасля гэтай перадачы на сервер"
 
 msgid "The changeset is <strong>left open</strong> after this upload"
 msgstr ""
+"Пакет правак <strong>застанецца адкрытым</strong> пасля гэтай перадачы на "
+"сервер"
 
 msgid "configure changeset"
-msgstr ""
+msgstr "канфігураваць пакет правак"
 
 msgid "Uploading <strong>{0} object</strong> to <strong>1 changeset</strong>"
 msgid_plural ""
 "Uploading <strong>{0} objects</strong> to <strong>1 changeset</strong>"
 msgstr[0] ""
+"Адпраўка <strong>{0} аб''екта</strong> да <strong>1 набору змен</strong>"
 msgstr[1] ""
+"Адпраўка <strong>{0} аб''ектаў</strong> да <strong>1 набору змен</strong>"
+msgstr[2] ""
+"Адпраўка <strong>{0} аб''ектаў</strong> да <strong>1 набору змен</strong>"
 
 msgid ""
 "Uploading <strong>{0} object</strong> to <strong>1 changeset</strong> using "
@@ -8467,58 +9386,78 @@ msgid_plural ""
 "Uploading <strong>{0} objects</strong> to <strong>1 changeset</strong> using "
 "<strong>1 request</strong>"
 msgstr[0] ""
+"Адпраўка <strong>{0} аб’екта</strong> ў <strong>1 набору змен</strong>, "
+"выкарыстоўваючы <strong>1 запыт</strong>"
 msgstr[1] ""
+"Адпраўка <strong>{0} аб’ектаў</strong> ў <strong>1 набору змен</strong>, "
+"выкарыстоўваючы <strong>1 запыт</strong>"
+msgstr[2] ""
+"Адпраўка <strong>{0} аб’ектаў</strong> ў <strong>1 набору змен</strong>, "
+"выкарыстоўваючы <strong>1 запыт</strong>"
 
 msgid ""
 "Uploading <strong>{0} objects</strong> to <strong>1 changeset</strong> using "
 "<strong>{1} requests</strong>"
 msgstr ""
+"Адпраўка <strong>{0} аб''ектаў</strong> да <strong>1 набору змен</strong>, "
+"выкарыстоўваючы <strong>{1} запыт(ы)</strong>"
 
 msgid "advanced configuration"
-msgstr ""
+msgstr "пашыраная канфігурацыя"
 
 msgid ""
 "{0} objects exceed the max. allowed {1} objects in a changeset on the server "
 "''{2}''. Please <a href=\"urn:advanced-configuration\">configure</a> how to "
 "proceed with <strong>multiple changesets</strong>"
 msgstr ""
+"{0} аб''ектаў перавысілі макс. дазволеныя {1} аб''ектаў у пакеце правак на "
+"серверы ''{2}''. Калі ласка, <a href=\"urn:advanced-"
+"configuration\">пакажыце</a> якім чынам працягнуць з <strong>некалькімі "
+"пакетамі правак</strong>"
 
 msgid ""
 "Uploading <strong>{0} objects</strong> to <strong>multiple "
 "changesets</strong> using <strong>{1} requests</strong>"
 msgstr ""
+"Перадача на сервер <strong>{0} аб’ектаў</strong> у <strong>некалькі пакетаў "
+"правак</strong>, выкарыстоўваючы запыты <strong>{1}</strong>"
 
 msgid "Uploading data for layer ''{0}''"
-msgstr ""
+msgstr "Перадача на сервер дадзеных пласта ''{0}''"
 
 msgid "Continue uploading"
-msgstr ""
+msgstr "Працягнуць перадачу на сервер"
 
 msgid "Click to continue uploading to additional new changesets"
 msgstr ""
+"Націсніце, каб працягнуць перадачу на сервер у дадатковыя новыя пакеты правак"
 
 msgid "Go back to Upload Dialog"
-msgstr ""
+msgstr "Вярнуцца  да Дыялогу перадачы на сервер"
 
 msgid "Click to return to the Upload Dialog"
-msgstr ""
+msgstr "Націсніце, каб вярнуцца да Дыялогу перадачы на сервер"
 
 msgid "Abort"
-msgstr ""
+msgstr "Перапыніць"
 
 msgid "Click to abort uploading"
-msgstr ""
+msgstr "Націсніце, калі жадаеце перапыніць перадачу на сервер"
 
 msgid ""
 "The server reported that the current changeset was closed.<br>This is most "
 "likely because the changesets size exceeded the max. size<br>of {0} objects "
 "on the server ''{1}''."
 msgstr ""
+"Сервер паведаміў, што бягучы пакет правак быў зачынены.<br>Гэта, хутчэй за "
+"ўсё, адбылося з-за таго, што пакет правак дасягнуў свайго макс. "
+"памеру,<br>які складае {0} аб''ектаў на серверы ''{1}''."
 
 msgid "There is {0} object left to upload."
 msgid_plural "There are {0} objects left to upload."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Засталося перадаць на сервер {0} аб’ект."
+msgstr[1] "Засталося перадаць на сервер {0} аб’екта."
+msgstr[2] "Засталося перадаць на сервер {0} аб’ектаў."
 
 msgid ""
 "Click ''<strong>{0}</strong>'' to continue uploading to additional new "
@@ -8526,263 +9465,398 @@ msgid ""
 "dialog.<br>Click ''<strong>{2}</strong>'' to abort uploading and return to "
 "map editing.<br>"
 msgstr ""
+"Націсніце ''<strong>{0}</strong>'', каб працягнуць перадачу на сервер у "
+"дадатковыя новыя пакеты правак.<br>Націсніце ''<strong>{1}</strong>'', каб "
+"вярнуцца да Дыялогу перадачы на сервер.<br>Націсніце "
+"''<strong>{2}</strong>'', каб адмяніць перадачу на сервер і вярнуцца да "
+"праўкі карты.<br>"
 
 msgid "Changeset is full"
-msgstr ""
+msgstr "Пакет правак запоўнены"
 
 msgid "Node ''{0}'' is already deleted. Skipping object in upload."
-msgstr ""
+msgstr "Кропка «{0}» ужо выдалена. Аб’ект будзе прапушчаны пры перадачы."
 
 msgid "Way ''{0}'' is already deleted. Skipping object in upload."
-msgstr ""
+msgstr "Лінія «{0}» ужо выдалена. Аб’ект будзе прапушчаны пры перадачы."
 
 msgid "Relation ''{0}'' is already deleted. Skipping object in upload."
-msgstr ""
+msgstr "Адносіны «{0}» ужо выдалены. Аб''ект будзе прапушчаны пры перадачы."
 
 msgid "Object ''{0}'' is already deleted. Skipping object in upload."
 msgstr ""
+"Аб’ект ''{0}'' ужо выдалены. Аб’ект будзе прапушчаны пры перадачы дадзеных "
+"на сервер."
 
 msgid "Uploading {0} object..."
 msgid_plural "Uploading {0} objects..."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Перадача на сервер {0} аб’екта..."
+msgstr[1] "Перадача на сервер {0} аб’ектаў..."
+msgstr[2] "Перадача на сервер {0} аб’ектаў..."
 
 msgid ""
 "Ignoring caught exception because upload is canceled. Exception is: {0}"
 msgstr ""
+"Ігнараванне выяўленай памылкі, бо перадача на сервер адменена. Памылка: {0}"
 
 msgid "Upload successful!"
-msgstr ""
+msgstr "Загрузка выканана паспяхова!"
 
 msgid ""
 "<html>Mark modified objects <strong>from the current selection</strong> to "
 "be uploaded to the server.</html>"
 msgstr ""
+"<html>Абярыце аб''екты <strong>бягучага вылучэння</strong>, якія трэба "
+"перадаць на сервер.</html>"
 
 msgid ""
 "<html>Mark <strong>locally deleted objects</strong> to be deleted on the "
 "server.</html>"
 msgstr ""
+"<html>Адзначыць <strong>лакальна выдаленыя аб''екты</strong>, якія павінны "
+"быць выдаленыя на серверы.</html>"
 
 msgid "Select objects to upload"
-msgstr ""
+msgstr "Выбар аб’ектаў для перадачы на сервер"
 
 msgid "Cancel uploading"
-msgstr ""
+msgstr "Адмяніць перадачу на сервер"
 
 msgid "Unexpected value for key ''{0}'' in preferences, got ''{1}''"
-msgstr ""
+msgstr "Неспадзяванае значэнне для ключа ''{0}'' у наладах, атрымана ''{1}''"
 
 msgid "Please select the upload strategy:"
-msgstr ""
+msgstr "Калі ласка, абярыце стратэгію перадачы на сервер:"
 
 msgid "Upload data in one request"
-msgstr ""
+msgstr "Адаслаць дадзеныя за адзін запыт"
 
 msgid "Upload data in chunks of objects. Chunk size: "
-msgstr ""
+msgstr "Адаслаць дадзеныя па частках. Памер часткі: "
 
 msgid "Upload each object individually"
-msgstr ""
+msgstr "Адаслаць на сервер па адным аб’екце"
 
 msgid ""
 "<html>There are <strong>multiple changesets</strong> necessary in order to "
 "upload {0} objects. Which strategy do you want to use?</html>"
 msgstr ""
+"<html>Запатрабуецца <strong>некалькі пакетаў правак</strong>, каб перадаць "
+"{0} аб’ектаў. Якую стратэгію вы жадаеце ўжыць?</html>"
 
 msgid "Fill up one changeset and return to the Upload Dialog"
 msgstr ""
+"Запоўніць адзін пакет правак і вярнуцца да Дыялогу перадачы на сервер"
 
 msgid "Open and use as many new changesets as necessary"
-msgstr ""
+msgstr "Адкрыць і выкарыстоўваць гэтулькі пакетаў правак, колькі неабходна"
 
 msgid "Upload in one request not possible (too many objects to upload)"
-msgstr ""
+msgstr "Перадача на сервер за адзін запыт немагчымая (занадта шмат аб’ектаў)"
 
 msgid ""
 "<html>Cannot upload {0} objects in one request because the<br>max. changeset "
 "size {1} on server ''{2}'' is exceeded.</html>"
 msgstr ""
+"<html>Немагчыма перадаць на сервер аб’екты ў колькасці {0} штук за адзін "
+"запыт, таму што<br>перавышаны макс. памер пакета правак {1} на серверы "
+"''{2}''.</html>"
 
 msgid "(1 request)"
-msgstr ""
+msgstr "(1 запыт)"
 
 msgid "(# requests unknown)"
-msgstr ""
+msgstr "(# запытаў невядома)"
 
 msgid "({0} request)"
 msgid_plural "({0} requests)"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "({0} запыт)"
+msgstr[1] "({0} запыту)"
+msgstr[2] "({0} запытаў)"
 
 msgid "Illegal chunk size <= 0. Please enter an integer > 1"
-msgstr ""
+msgstr "Няслушны памер часткі <= 0. Калі ласка, увядзіце цэлае > 1"
 
 msgid "Chunk size {0} exceeds max. changeset size {1} for server ''{2}''"
 msgstr ""
+"Памер часткі {0} перавышае макс. памер пакета правак {1} для сервера ''{2}''"
 
 msgid "Please enter an integer > 1"
-msgstr ""
+msgstr "Калі ласка, увядзіце цэлае значэнне > 1"
 
 msgid "Value ''{0}'' is not a number. Please enter an integer > 1"
-msgstr ""
+msgstr "Значэнне ''{0}'' не лік. Калі ласка, увядзіце цэлае > 1"
 
 msgid "Objects to add:"
-msgstr ""
+msgstr "Новыя аб’екты:"
 
 msgid "Objects to modify:"
-msgstr ""
+msgstr "Змененыя аб’екты:"
 
 msgid "Objects to delete:"
-msgstr ""
+msgstr "Выдаляныя аб’екты:"
 
 msgid "{0} object to add:"
 msgid_plural "{0} objects to add:"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Дадаць {0} аб''ект:"
+msgstr[1] "Дадаць {0} аб''екты:"
+msgstr[2] "Дадаць {0} аб''ектаў:"
 
 msgid "{0} object to modify:"
 msgid_plural "{0} objects to modify:"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} аб''ект змяніць:"
+msgstr[1] "{0} аб''екта змяніць:"
+msgstr[2] "{0} аб''ектаў змяніць:"
 
 msgid "{0} object to delete:"
 msgid_plural "{0} objects to delete:"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Выдаліць {0} аб’ект:"
+msgstr[1] "Выдаліць {0} аб’екта:"
+msgstr[2] "Выдаліць {0} аб’ектаў:"
+
+msgid "Show Tile Info"
+msgstr "Паказаць дадзеныя квадрата"
+
+msgid "Tile Info"
+msgstr "Інфармацыя пра квадрат"
+
+msgid "Metadata "
+msgstr "Метададзеныя "
+
+msgid "Auto Zoom"
+msgstr "Аўтамаштабаванне"
+
+msgid "Auto load tiles"
+msgstr "Аўтазагрузка квадратаў"
+
+msgid "Load All Tiles"
+msgstr "Загрузіць усе квадраты карты"
+
+msgid "Load All Error Tiles"
+msgstr "Загрузіць усе квадраты з памылкамі"
+
+msgid "Zoom to native resolution"
+msgstr "Маштабаваць да зыходнага разрознення"
+
+msgid "Change resolution"
+msgstr "Змяніць разрозненне"
+
+msgid "Failed to create tile source"
+msgstr "Не атрымалася стварыць крыніцу тайлаў"
+
+msgid "Show Errors"
+msgstr "Паказаць памылкі"
+
+msgid "Load Tile"
+msgstr "Загрузіць квадрат карты"
+
+msgid "Increase zoom"
+msgstr "Павялічыць маштаб"
+
+msgid "Decrease zoom"
+msgstr "Паменшыць маштаб"
+
+msgid "Snap to tile size"
+msgstr "Прывязацца да памеру квадрата"
+
+msgid "Flush Tile Cache"
+msgstr "Ачысціць кэш квадратаў карты"
+
+msgid "zoom in to load any tiles"
+msgstr "наблізьце для загрузкі квадратаў"
+
+msgid "zoom in to load more tiles"
+msgstr "наблізьце для загрузкі дадатковых квадратаў"
+
+msgid "increase zoom level to see more detail"
+msgstr "павялічце маштаб для лепшай дэталізацыі"
+
+msgid "No tiles at this zoom level"
+msgstr "Няма квадратаў на дадзеным маштабе"
+
+msgid "Current zoom: {0}"
+msgstr "Бягучы маштаб: {0}"
+
+msgid "Display zoom: {0}"
+msgstr "Маштаб адлюстравання: {0}"
+
+msgid "Pixel scale: {0}"
+msgstr "Маштаб піксела: {0}"
+
+msgid "Best zoom: {0}"
+msgstr "Найлепшы маштаб: {0}"
+
+msgid "Cache stats: {0}"
+msgstr "Статыстыка кэша: {0}"
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr "{0} ({1}), аўтаматычная загрузк ў маштабе {2}"
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr "{0} ({1}), загрузка з узроўнем маштабавання {2}"
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr "Загружана {0}/{1} квадратаў"
+
+msgid "Save WMS file"
+msgstr "Захаваць файл WMS"
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr "Здымак, хутчэй за ўсё, ссунуты. Выраўнуйце яго па GPS-трэках!"
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+
+msgid "Details..."
+msgstr "Падрабязнасці..."
+
+msgid "Hide this message and never show it again"
+msgstr "Схаваць гэта паведамленне і больш не паказваць"
 
 msgid "Customize Color"
-msgstr ""
+msgstr "Абраць колер"
 
 msgid "Default"
-msgstr ""
+msgstr "Па змаўчанні"
 
 msgid "Choose a color"
-msgstr ""
+msgstr "Выбар колеру"
 
 msgid "Name: {0}"
-msgstr ""
+msgstr "Назва: {0}"
 
 msgid "Description: {0}"
-msgstr ""
+msgstr "Апісанне: {0}"
 
 msgid "{0} track"
 msgid_plural "{0} tracks"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} трэк"
+msgstr[1] "{0} трэка"
+msgstr[2] "{0} трэкаў"
 
 msgid "Description"
-msgstr ""
+msgstr "Апісанне"
 
 msgid "Timespan"
-msgstr ""
+msgstr "Перыяд"
 
 msgid "Length"
-msgstr ""
+msgstr "Даўжыня"
 
 msgid "Length: {0}"
-msgstr ""
+msgstr "Даўжыня: {0}"
 
 msgid "{0} route, "
 msgid_plural "{0} routes, "
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} маршрут, "
+msgstr[1] "{0} маршруту, "
+msgstr[2] "{0} маршрутаў, "
 
 msgid "{0} waypoint"
 msgid_plural "{0} waypoints"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} шляхавая кропка"
+msgstr[1] "{0} шляхавыя кропкі"
+msgstr[2] "{0} шляхавых кропак"
 
 msgid "{0} track, "
 msgid_plural "{0} tracks, "
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} дарожка, "
+msgstr[1] "{0} дарожкі, "
+msgstr[2] "{0} дарожак, "
 
 msgid "Save GPX file"
 msgstr "Запісаць файл GPX"
 
 msgid "Imagery fade"
-msgstr ""
+msgstr "Падкладка: згасанне да"
+
+msgid "Unsupported imagery type: {0}"
+msgstr "Непадтрымоўваемы тып фонавага здымка: {0}"
 
 msgid "ERROR"
-msgstr ""
+msgstr "Памылка"
 
 msgid "Next marker"
-msgstr ""
+msgstr "Наступны маркер"
 
 msgid "Jump to next marker"
-msgstr ""
+msgstr "Да наступнага маркера"
 
 msgid "Previous marker"
-msgstr ""
+msgstr "Папярэдні маркер"
 
 msgid "Jump to previous marker"
-msgstr ""
+msgstr "Да папярэдняга маркера"
 
 msgid "All projections are supported"
-msgstr ""
+msgstr "Усе праекцыі падтрымліваюцца"
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
+"Пласт {0} не падтрымлівае новую праекцыю {1}.\n"
+"Падтрымліваюцца праекцыі: {2}\n"
+"Змяніце праекцыю або выдаліце пласт."
 
 msgid "Save Layer"
 msgstr "Запісаць слой"
 
 msgid "Note"
-msgstr ""
+msgstr "Нататка"
 
 msgid "Notes layer"
-msgstr ""
+msgstr "Пласт нататак"
 
 msgid "Total notes:"
-msgstr ""
+msgstr "Усяго нататак:"
 
 msgid "Changes need uploading?"
-msgstr ""
+msgstr "Трэба перадаць змены на сервер?"
 
 msgid "Data Layer {0}"
-msgstr ""
+msgstr "Пласт дадзеных {0}"
 
 msgid "outside downloaded area"
-msgstr ""
+msgstr "па-за запампаванай вобласцю"
 
 msgid "Merging layers"
-msgstr ""
+msgstr "Аб’яднанне пластоў"
 
 msgid "{0} deleted"
 msgid_plural "{0} deleted"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} выдалены"
+msgstr[1] "{0} выдалена"
+msgstr[2] "{0} выдалена"
 
 msgid "{0} consists of:"
-msgstr ""
+msgstr "{0} складаецца з:"
 
 msgid "unset"
-msgstr ""
+msgstr "адключана"
 
 msgid "API version: {0}"
-msgstr ""
+msgstr "Версія API: {0}"
 
 msgid "Upload is discouraged"
-msgstr ""
+msgstr "Перадача не рэкамендуецца"
 
 msgid "Convert to GPX layer"
-msgstr ""
+msgstr "Пераўтварыць у пласт GPX"
 
 msgid "Converted from: {0}"
-msgstr ""
+msgstr "Ператворана з: {0}"
 
 msgid "Dataset consistency test"
-msgstr ""
+msgstr "Тэст узгодненасці набору дадзеных"
 
 msgid "No problems found"
-msgstr ""
+msgstr "Праблемы не выяўлены"
 
 msgid "Following problems found:"
-msgstr ""
+msgstr "Выяўлены наступныя праблемы:"
 
 msgid "Empty document"
 msgstr "Пусты дакумент"
@@ -8791,13 +9865,13 @@ msgid "Save anyway"
 msgstr "Безумоўна запісаць"
 
 msgid "The document contains no data."
-msgstr "Дакумент не месціць ніякіх дадзеных"
+msgstr "У дакуменце няма дадзеных"
 
 msgid "Conflicts"
 msgstr "Канфлікты"
 
 msgid "Reject Conflicts and Save"
-msgstr "Ігнараваць канфлікты і запісаць"
+msgstr "Ігнараваць канфлікты і захаваць"
 
 msgid ""
 "There are unresolved conflicts. Conflicts will not be saved and handled as "
@@ -8809,677 +9883,616 @@ msgstr ""
 msgid "Save OSM file"
 msgstr "Запісаць файл OSM"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-
-msgid "Auto Zoom"
-msgstr ""
-
-msgid "Auto load tiles"
-msgstr ""
-
-msgid "Show Errors"
-msgstr ""
-
-msgid "Load Tile"
-msgstr ""
-
-msgid "Show Tile Info"
-msgstr ""
-
-msgid "Load All Tiles"
-msgstr ""
-
-msgid "Load All Error Tiles"
-msgstr ""
-
-msgid "Increase zoom"
-msgstr ""
-
-msgid "Decrease zoom"
-msgstr ""
-
-msgid "Snap to tile size"
-msgstr ""
-
-msgid "Flush Tile Cache"
-msgstr ""
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
 msgid "EPSG:4326 and Mercator projection are supported"
-msgstr ""
+msgstr "Падтрымліваюцца EPSG:4326 і праекцыя Меркатара"
 
 msgid "Validation errors"
-msgstr ""
+msgstr "Памылкі пры праверцы"
 
 msgid "No validation errors"
-msgstr ""
-
-msgid "Blank Layer"
-msgstr ""
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
+msgstr "Праверка не выявіла памылак"
 
-msgid "Download visible tiles"
-msgstr ""
+msgid "Set WMS Bookmark"
+msgstr "Усталяваць закладку WMS"
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-
-msgid "Change resolution"
-msgstr ""
-
-msgid "Reload erroneous tiles"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
+"JOSM будзе выкарыстоўваць EPSG: 4326 пры запыце да сервера, але вынікі "
+"могуць адрознівацца ў залежнасці ад WMS-сервера"
 
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
-msgstr ""
-
-msgid "Automatic downloading"
-msgstr ""
+msgid "Correlate to GPX"
+msgstr "Адносяцца да GPX"
 
-msgid "Zoom to native resolution"
-msgstr ""
+msgid "Invalid timezone"
+msgstr "Недапушчальны гадзінны пояс"
 
-msgid "Supported projections are: {0}"
-msgstr ""
+msgid "Invalid offset"
+msgstr "Недапушчальнае зрушэнне"
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
-msgstr ""
+msgid "Correlate images with GPX track"
+msgstr "Супаставіць малюнкі з GPX трэкам"
 
-msgid "Save WMS file"
-msgstr ""
+msgid "Try Again"
+msgstr "Паспрабаваць ізноў"
 
-msgid "Correlate to GPX"
-msgstr ""
+msgid "No images could be matched!"
+msgstr "Няма адпаведных малюнкаў!"
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
-msgstr ""
+msgstr "Файлы GPX (*.gpx *.gpx.gz)"
 
 msgid "File {0} is loaded yet under the name \"{1}\""
-msgstr ""
+msgstr "Файл {0} загружаны пад імем \"{1}\""
 
 msgid "Error while parsing {0}"
-msgstr ""
+msgstr "Памылка разбору {0}"
 
 msgid "Could not read \"{0}\""
-msgstr ""
+msgstr "Немагчыма прачытаць \"{0}\""
 
 msgid ""
 "<html>Take a photo of your GPS receiver while it displays the "
 "time.<br>Display that photo here.<br>And then, simply capture the time you "
 "read on the photo and select a timezone<hr></html>"
 msgstr ""
+"<html>Зрабіце фота GPS прымача, калі ён паказвае час.<br>Пакажыце гэта фота "
+"тут.<br>Затым, захапіце час, які вы прачытаеце на фота і абярыце часавы "
+"пояс<hr></html>"
 
 msgid "Photo time (from exif):"
-msgstr ""
+msgstr "Час фотаздымка (з EXIF):"
 
 msgid "Gps time (read from the above photo): "
-msgstr ""
+msgstr "Час GPS (па здымку над фота): "
 
 msgid "I am in the timezone of: "
-msgstr ""
+msgstr "Я знаходжуся ў гадзінным поясе: "
 
 msgid "No date"
-msgstr ""
+msgstr "Без даты"
 
 msgid "Open another photo"
-msgstr ""
+msgstr "Адкрыць іншае фота"
 
 msgid "Synchronize time from a photo of the GPS receiver"
-msgstr ""
+msgstr "Сінхранізаваць час па фатаграфіі з GPS-прымача"
 
 msgid ""
 "Error while parsing the date.\n"
 "Please use the requested format"
 msgstr ""
+"Памылка пры разборы даты.\n"
+"Калі ласка, выкарыстоўвайце запытаны фармат"
 
 msgid "Invalid date"
-msgstr ""
+msgstr "Недапушчальная дата"
 
 msgid "<No GPX track loaded yet>"
-msgstr ""
+msgstr "<Не загружаны трэкі GPX>"
 
 msgid "GPX track: "
-msgstr ""
+msgstr "Трэк GPX: "
 
 msgid "Open another GPX trace"
-msgstr ""
+msgstr "Адкрыць іншы трэк GPX"
 
 msgid ""
 "<html>Use photo of an accurate clock,<br>e.g. GPS receiver display</html>"
 msgstr ""
+"<html>Выкарыстоўвайце фота для ўстанаўлення дакладнага часу,<br>напрыклад, з "
+"экрана GPS-прымача</html>"
 
 msgid "Auto-Guess"
-msgstr ""
+msgstr "Аўта-Адгадванне"
 
 msgid "Matches first photo with first gpx point"
-msgstr ""
+msgstr "Першая фатаграфія адпавядае першай кропцы gpx"
 
 msgid "Manual adjust"
-msgstr ""
+msgstr "Ручная рэгулёўка"
 
 msgid "Override position for: "
-msgstr ""
+msgstr "Пераўсталяваць пазіцыю для: "
 
 msgid "Images with geo location in exif data ({0}/{1})"
-msgstr ""
+msgstr "Выявы з каардынатамі месцазнаходжання ў дадзеных exif ({0}/{1})"
 
 msgid "Images that are already tagged ({0}/{1})"
-msgstr ""
+msgstr "Пазначана выяў ({0}/{1})"
 
 msgid "Show Thumbnail images on the map"
-msgstr ""
+msgstr "Паказаць эскіз выявы на карце"
 
 msgid "Timezone: "
-msgstr ""
+msgstr "Часавы пояс: "
 
 msgid "Offset:"
-msgstr ""
-
-msgid "Correlate images with GPX track"
-msgstr ""
+msgstr "Зрушэнне:"
 
 msgid "Correlate"
-msgstr ""
-
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
+msgstr "Усталяваць суадносіны"
 
 msgid "No gpx selected"
-msgstr ""
+msgstr "Няма абраных gpx"
 
 msgid "<html>Matched <b>{0}</b> of <b>{1}</b> photo to GPX track.</html>"
 msgid_plural ""
 "<html>Matched <b>{0}</b> of <b>{1}</b> photos to GPX track.</html>"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "<html><b>{0}</b> з <b>{1}</b> фота адпавядае трэку GPX.</html>"
+msgstr[1] "<html><b>{0}</b> з <b>{1}</b> фота адпавядае трэку GPX.</html>"
+msgstr[2] "<html><b>{0}</b> з <b>{1}</b> фота адпавядае трэку GPX.</html>"
 
 msgid "Timezone: {0}"
-msgstr ""
+msgstr "Гадзінны пояс: {0}"
 
 msgid "Minutes: {0}"
-msgstr ""
+msgstr "Хвіліны: {0}"
 
 msgid "Seconds: {0}"
-msgstr ""
+msgstr "Секунды: {0}"
 
 msgid "(Time difference of {0} day)"
 msgid_plural "Time difference of {0} days"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "(Разыходжанне ў часе {0} дзень)"
+msgstr[1] "(Разыходжанне ў часе {0} дня)"
+msgstr[2] "(Разыходжанне ў часе {0} дзён)"
 
 msgid ""
 "An error occurred while trying to match the photos to the GPX track. You can "
 "adjust the sliders to manually match the photos."
 msgstr ""
+"Адбылася памылка падчас спробы супаставіць фатаграфіі з GPX трэкам. Вы "
+"можаце ўручную сумясціць фатаграфіі з дапамогай рухавічкоў."
 
 msgid "Matching photos to track failed"
-msgstr ""
+msgstr "Не атрымалася супаставіць фатаграфіі трэку"
 
 msgid "Adjust timezone and offset"
-msgstr ""
+msgstr "Налада гадзіннага пояса і зрушэння"
 
 msgid "The selected photos do not contain time information."
-msgstr ""
+msgstr "Абраныя фатаграфіі не ўтрымоўваюць інфармацыю пра час."
 
 msgid "Photos do not contain time information"
-msgstr ""
+msgstr "Фатаграфіі не ўтрымоўваюць інфармацыю пра час"
 
 msgid ""
 "The selected GPX track does not contain timestamps. Please select another "
 "one."
 msgstr ""
+"Кропкі ў абраным GPX трэку не ўтрымоўваюць часу. Калі ласка, абярыце іншы."
 
 msgid "GPX Track has no time information"
-msgstr ""
+msgstr "GPX трэк не ўтрымоўвае інфармацыі пра час"
 
 msgid "You should select a GPX track"
-msgstr ""
+msgstr "Неабходна абраць трэк GPX"
 
 msgid "No selected GPX track"
-msgstr ""
+msgstr "Трэк GPX не вылучаны"
 
 msgid ""
 "Error while parsing timezone.\n"
 "Expected format: {0}"
 msgstr ""
+"Памылка пры разборы гадзіннага пояса.\n"
+"Чаканы фармат: {0}"
 
 msgid ""
 "Error while parsing offset.\n"
 "Expected format: {0}"
 msgstr ""
+"Памылка пры разборы зрушэння.\n"
+"Чаканы фармат: {0}"
 
 msgid "Extracting GPS locations from EXIF"
-msgstr ""
+msgstr "Выманне GPS каардынат з EXIF"
 
 msgid "Starting directory scan"
-msgstr ""
+msgstr "Запуск сканавання каталога"
 
 msgid "Read photos..."
-msgstr ""
+msgstr "Прачытаць фатаграфіі..."
 
 msgid "Reading {0}..."
-msgstr ""
+msgstr "Чытанне {0}..."
 
 msgid "Unable to get canonical path for directory {0}\n"
-msgstr ""
+msgstr "Не атрымалася атрымаць кананічны шлях да каталога {0}\n"
 
 msgid "Scanning directory {0}"
-msgstr ""
+msgstr "Сканаванне каталога {0}"
 
 msgid "Error while getting files from directory {0}\n"
-msgstr ""
+msgstr "Памылка чытання файлаў у каталогу {0}\n"
 
 msgid "One of the selected files was null"
-msgstr ""
+msgstr "Адзін з вылучаных файлаў пусты"
 
 msgid "Geotagged Images"
-msgstr ""
+msgstr "Малюнкі з дадзенымі пра месцазнаходжанне"
 
 msgid "{0} image loaded."
 msgid_plural "{0} images loaded."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Загружана {0} малюнак."
+msgstr[1] "Загружана {0} малюнкі."
+msgstr[2] "Загружана {0} малюнкаў."
 
 msgid "{0} was found to be GPS tagged."
 msgid_plural "{0} were found to be GPS tagged."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} знойдзены, пазначаным GPS."
+msgstr[1] "{0} знойдзена, пазначаным GPS."
+msgstr[2] "{0} знойдзена, пазначаным GPS."
 
 msgid "{0} has updated GPS data."
 msgid_plural "{0} have updated GPS data."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} утрымоўвае абноўленыя GPS дадзеныя."
+msgstr[1] "{0} утрымоўваюць абноўленыя GPS дадзеныя."
+msgstr[2] "{0} утрымоўваюць абноўленыя GPS дадзеныя."
 
 msgid "Delete image file from disk"
-msgstr ""
+msgstr "Выдаліць малюнак з дыска"
 
 msgid ""
 "<html><h3>Delete the file {0} from disk?<p>The image file will be "
 "permanently lost!</h3></html>"
 msgstr ""
+"<html><h3>Выдаліць файл {0} з дыска?<p>Файл малюнка будзе беззваротна "
+"згублены!</h3></html>"
 
 msgid "Image file could not be deleted."
-msgstr ""
+msgstr "Немагчыма выдаліць файл малюнка."
 
 msgid "No image"
-msgstr ""
+msgstr "Малюнкаў няма"
 
 msgid "Loading {0}"
-msgstr ""
+msgstr "Загрузка {0}"
 
 msgid "Error on file {0}"
-msgstr ""
+msgstr "Памылка ў файле {0}"
 
 msgid "Display geotagged images"
-msgstr ""
+msgstr "Паказаць выявы з геатэгамі"
 
 msgid "Previous"
-msgstr ""
+msgstr "Папярэдняе"
 
 msgid "Show previous Image"
-msgstr ""
+msgstr "Паказаць папярэдні малюнак"
 
 msgid "Geoimage: {0}"
-msgstr ""
+msgstr "Геавыява: {0}"
 
 msgid "Remove photo from layer"
-msgstr ""
+msgstr "Выдаліць фота з пласта"
 
 msgid "Delete File from disk"
-msgstr ""
+msgstr "Выдаліць файл з дыска"
 
 msgid "Copy image path"
-msgstr ""
+msgstr "Капіяваць шлях да малюнка"
 
 msgid "Next"
-msgstr ""
+msgstr "Наступнае"
 
 msgid "Show next Image"
-msgstr ""
+msgstr "Паказаць наступны малюнак"
 
 msgid "Show first Image"
-msgstr ""
+msgstr "Паказаць першы малюнак"
 
 msgid "Show last Image"
-msgstr ""
+msgstr "Паказаць апошні малюнак"
 
 msgid "Center view"
-msgstr ""
+msgstr "Цэнтраваць выгляд"
 
 msgid "Zoom best fit and 1:1"
-msgstr ""
+msgstr "Маштабаваць, каб упісаць з суадносінамі бакоў 1:1"
 
 msgid "Move dialog to the side pane"
-msgstr ""
+msgstr "Перасунуць дыялог на бакавую панэль"
 
 msgid ""
 "\n"
 "Altitude: {0} m"
 msgstr ""
+"\n"
+"Вышыня: {0} м"
 
 msgid ""
 "\n"
 "Speed: {0} km/h"
 msgstr ""
+"\n"
+"Хуткасць: {0} км/г"
 
 msgid ""
 "\n"
 "Direction {0}°"
 msgstr ""
+"\n"
+"Кірунак {0}°"
 
 msgid ""
 "\n"
 "EXIF time: {0}"
 msgstr ""
+"\n"
+"Час EXIF: {0}"
 
 msgid ""
 "\n"
 "GPS time: {0}"
 msgstr ""
-
-msgid "JPEG images (*.jpg)"
-msgstr ""
+"\n"
+"Час GPS: {0}"
 
 msgid "Show thumbnails"
-msgstr ""
+msgstr "Паказваць мініяцюры"
 
 msgid "Show image thumbnails instead of icons."
-msgstr ""
+msgstr "Паказваць мініяцюры малюнкаў замест значкоў"
 
 msgid "Choose visible tracks"
-msgstr ""
+msgstr "Фільтраваць трэкі"
 
 msgid "Select by date"
-msgstr ""
+msgstr "Абраць па даце"
 
 msgid ""
 "<html>Select all tracks that you want to be displayed. You can drag select a "
 "range of tracks or use CTRL+Click to select specific ones. The map is "
 "updated live in the background. Open the URLs by double clicking them.</html>"
 msgstr ""
+"<html>Вылучыце ўсе трэкі, якія вы хочаце бачыць. Вы можаце змяніць дыяпазон "
+"паказваных трэкаў мышшу, ці ж вылучыць толькі патрэбныя, пстрыкаючы на іх, "
+"утрымліваючы CTRL. Карта ў фоне будзе абнаўляцца ўжывую. Адкрывайце URL "
+"падвойным пстрычкай па іх. </html>"
 
 msgid "Set track visibility for {0}"
-msgstr ""
+msgstr "Налада адлюстравання трэкаў для пласта {0}"
 
 msgid "Show all"
-msgstr ""
+msgstr "Паказаць усё"
 
 msgid "Show selected only"
-msgstr ""
+msgstr "Паказаць абраныя"
 
 msgid "Convert to data layer"
-msgstr ""
+msgstr "Пераўтварыць у пласт дадзеных"
 
 msgid ""
 "<html>Upload of unprocessed GPS data as map data is considered "
 "harmful.<br>If you want to upload traces, look here:</html>"
 msgstr ""
+"<html>Перадача на сервер неапрацаваных дадзеных GPS пад выглядам дадзеных "
+"карты лічыцца шкоднаснай.<br>Калі жадаеце загрузіць трэкі, азнаёмцеся з "
+"гэтым:</html>"
 
 msgid "Customize track drawing"
-msgstr ""
+msgstr "Наладзіць адмалёўку трэка"
 
 msgid "From"
-msgstr ""
+msgstr "З"
 
 msgid "To"
-msgstr ""
+msgstr "Да"
 
 msgid "No timestamp"
-msgstr ""
+msgstr "Няма пазнакі часу"
 
 msgid "Select to download OSM data."
-msgstr ""
+msgstr "Абярыце для загрузкі дадзеных OSM."
 
 msgid "Select to download GPS traces."
-msgstr ""
+msgstr "Абярыце для загрузкі трэкаў GPS."
 
 msgid "Download everything within:"
-msgstr ""
+msgstr "Запампаваць усё ў межах:"
 
 msgid "meters"
-msgstr ""
+msgstr "метраў"
 
 msgid "Maximum area per request:"
-msgstr ""
-
-msgid "sq km"
-msgstr ""
+msgstr "Максімальная вобласць для аднаго запыту:"
 
 msgid "Download near:"
-msgstr ""
+msgstr "Загрузіць поруч:"
 
 msgid "track only"
-msgstr ""
+msgstr "толькі трэк"
 
 msgid "waypoints only"
-msgstr ""
+msgstr "толькі шляхавыя кропкі"
 
 msgid "track and waypoints"
-msgstr ""
+msgstr "трэкі і шляхавыя кропкі"
 
 msgid "Click to download"
-msgstr ""
+msgstr "Пстрыкніце для загрузкі"
 
 msgid "Click to cancel"
-msgstr ""
+msgstr "Пстрыкніце, каб адмяніць"
 
 msgid "Download from OSM along this track"
-msgstr ""
+msgstr "Запампаваць з OSM дадзеныя ўздоўж гэтага трэка"
 
 msgid "Calculating Download Area"
-msgstr ""
+msgstr "Разлік загружанай вобласці"
 
 msgid "Precache imagery tiles along this track"
-msgstr ""
+msgstr "Перадкэшаваць квадраты здымка каля трэка"
 
 msgid "Precaching WMS"
-msgstr ""
+msgstr "Перадкэшаванне WMS"
 
 msgid "Please select the imagery layer."
-msgstr ""
+msgstr "Абярыце пласт здымкаў."
 
 msgid "Select imagery layer"
-msgstr ""
+msgstr "Абраць пласт здымка"
 
 msgid "There are no imagery layers."
-msgstr ""
+msgstr "Тут няма пластоў здымкаў."
 
 msgid "No imagery layers"
-msgstr ""
+msgstr "Няма пластоў здымкаў"
 
 msgid "Velocity, km/h"
-msgstr ""
+msgstr "Хуткасць, км/г"
 
 msgid "HDOP, m"
-msgstr ""
+msgstr "HDOP, м"
 
 msgid "Time"
-msgstr ""
+msgstr "Час"
 
 msgid "Direction"
-msgstr ""
+msgstr "Кірунак"
 
 msgid "gps point"
-msgstr ""
+msgstr "кропка GPS"
 
 msgid "Import Audio"
-msgstr ""
+msgstr "Імпартаваць аўдыёфайлы"
 
 msgid ""
 "<html>The data in the GPX layer ''{0}'' has been downloaded from the "
 "server.<br>Because its way points do not include a timestamp we cannot "
 "correlate them with audio data.</html>"
 msgstr ""
+"<html>Дадзеныя ў пласце GPX ''{0}'' былі папярэдне загружаныя з "
+"сервера.<br>Паколькі шляхавыя кропкі не ўтрымліваюць метак часу, мы не можам "
+"сінхранізаваць іх з аўдыёдадзенымі.</html>"
 
 msgid "Import not possible"
-msgstr ""
+msgstr "Імпарт немагчымы"
 
 msgid "Wave Audio files (*.wav)"
-msgstr ""
+msgstr "Аўдыёфайлы Wave (*.wav)"
 
 msgid "Audio markers from {0}"
-msgstr ""
+msgstr "Аўдыё маркеры з {0}"
 
 msgid "No GPX track available in layer to associate audio with."
-msgstr ""
+msgstr "На пласце адсутнічае трэк GPX, каб накласці гук."
 
 msgid ""
 "Some waypoints with timestamps from before the start of the track or after "
 "the end were omitted or moved to the start."
 msgstr ""
+"Некаторыя шляхавыя кропкі створаны да пачатку трэка ці пасля яго канчатка і "
+"будуць прапушчаны ці перанесены ў пачатак трэка."
 
 msgid ""
 "Some waypoints which were too far from the track to sensibly estimate their "
 "time were omitted."
 msgstr ""
+"Некаторыя шляхавыя кропкі, якія былі занадта далёка ад астатніх, былі "
+"праігнараваны пры разліку часу."
 
 msgid "Import images"
-msgstr ""
+msgstr "Імпарт малюнкаў"
 
 msgid ""
 "<html>The data in the GPX layer ''{0}'' has been downloaded from the "
 "server.<br>Because its way points do not include a timestamp we cannot "
 "correlate them with images.</html>"
 msgstr ""
+"<html>Дадзеныя ў пласце GPX ''{0}'' былі папярэдне загружаныя з "
+"сервера.<br>Паколькі шляхавыя кропкі не ўтрымліваюць метак часу, мы не можам "
+"сінхранізаваць іх з выявамі.</html>"
 
 msgid "Markers From Named Points"
-msgstr ""
+msgstr "Маркеры з найменных кропак"
 
 msgid "Named Trackpoints from {0}"
-msgstr ""
+msgstr "Найменныя кропкі трэка з {0}"
 
 msgid "gps marker"
-msgstr ""
+msgstr "маркер GPS"
 
 msgid "marker"
 msgid_plural "markers"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "маркер"
+msgstr[1] "маркера"
+msgstr[2] "маркераў"
 
 msgid "{0} consists of {1} marker"
 msgid_plural "{0} consists of {1} markers"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} складаецца з {1} маркера"
+msgstr[1] "{0} складаецца з {1} маркераў"
+msgstr[2] "{0} складаецца з {1} маркераў"
 
 msgid "No existing audio markers in this layer to offset from."
-msgstr ""
+msgstr "Няма існых аўдыё маркераў на гэтым пласце ад якіх можна зрабіць зрух"
 
 msgid "Show Text/Icons"
-msgstr ""
+msgstr "Паказаць Тэкст/Піктаграмы"
 
 msgid "Toggle visible state of the marker text and icons."
-msgstr ""
+msgstr "Паказаць/схаваць тэкст і значкі маркераў."
 
 msgid "Synchronize Audio"
-msgstr ""
+msgstr "Сінхранізаваць аўдыё"
 
 msgid ""
 "You need to pause audio at the moment when you hear your synchronization cue."
 msgstr ""
+"Вам неабходна прыпыніць прайграванне, калі вы пачуеце вашу пазнаку "
+"сінхранізацыі."
 
 msgid "Audio synchronized at point {0}."
-msgstr ""
+msgstr "Аўдыё сінхранізавана на кропцы {0}."
 
 msgid "Unable to synchronize in layer being played."
-msgstr ""
+msgstr "Не атрымалася сінхранізаваць у прайграваным пласце."
 
 msgid "Make Audio Marker at Play Head"
-msgstr ""
+msgstr "Усталяваць маркер аўдыё на пазіцыі прайгравання"
 
 msgid ""
 "You need to have paused audio at the point on the track where you want the "
 "marker."
 msgstr ""
+"Вы павінны паставіць аўдыё на паўзу ў той кропцы шляху, дзе жадаеце "
+"паставіць маркер."
 
 msgid ""
 "You need to drag the play head near to the GPX track whose associated sound "
 "track you were playing (after the first marker)."
 msgstr ""
+"Вам неабходна перацягнуць значок лапкі прайгравальніка побач з GPX трэкам, з "
+"якім злучана гукавая дарожка (пасля першага маркера)."
 
 msgid ""
 "You need to SHIFT-drag the play head onto an audio marker or onto the track "
 "point where you want to synchronize."
 msgstr ""
+"Трэба ўтрымліваць Shift і перацягнуць значок лапкі прайгравальніка на аўдыё "
+"маркер ці на кропку трэка, дзе вы жадаеце сінхранізаваць."
 
 msgid "Unable to create new audio marker."
-msgstr ""
+msgstr "Немагчыма стварыць новы аўдыё-маркер."
 
 msgid "There was an error while trying to display the URL for this marker"
-msgstr ""
+msgstr "Адбылася памылка пры спробе паказаць URL для гэтага маркера"
 
 msgid "(URL was: "
-msgstr ""
+msgstr "(па спасылцы: "
 
 msgid "Select the map painting styles"
-msgstr ""
+msgstr "Абярыце стылі адмалёўкі карты"
 
 msgid "Failed to load Mappaint styles from ''{0}''. Exception was: {1}"
-msgstr ""
+msgstr "Не атрымалася загрузіць стылі Mappaint з ''{0}''. Памылка: {1}"
 
 msgid "loading style ''{0}''..."
-msgstr ""
+msgstr "загрузка стылю ''{0}''..."
 
 msgid ""
 "There was an error when loading this style. Select ''Info'' from the right "
@@ -9488,80 +10501,97 @@ msgid_plural ""
 "There were {0} errors when loading this style. Select ''Info'' from the "
 "right click menu for details."
 msgstr[0] ""
+"Адбылася {0} памылка пры загрузцы стылю. Падрабязнасці глядзіце ў пункце "
+"\"Інфармацыя\" з кантэкстнага меню."
 msgstr[1] ""
+"Адбылося {0} памылкі пры загрузцы стылю. Падрабязнасці глядзіце ў пункце "
+"\"Інфармацыя\" з кантэкстнага меню."
+msgstr[2] ""
+"Адбылося {0} памылак пры загрузцы стылю. Падрабязнасці глядзіце ў пункце "
+"\"Інфармацыя\" з кантэкстнага меню."
 
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 msgstr ""
+"Не атрымалася выканаць разбор стыляў Mappaint з ''{0}''. Памылка: {1}"
 
 msgid ""
 "Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
 "''{2}'' instead."
 msgstr ""
+"Выяўлены не рэкамендуемы ''{0}'' у ''{1}'', які неўзабаве будзе выдалены. "
+"Выкарыстоўвайце наўзамен ''{2}''."
 
 msgid "Illegal dash pattern, values must be positive"
-msgstr ""
+msgstr "Няслушны шаблон перарывістай лініі, значэнне павінна быць дадатным"
 
 msgid "Illegal dash pattern, at least one value must be > 0"
 msgstr ""
+"Няслушны шаблон перарывістай лініі, прынамсі, адно значэнне павінна быць > 0"
 
 msgid ""
 "Failed to parse Mappaint styles from ''{0}''. Error was: [{1}:{2}] {3}"
 msgstr ""
+"Не атрымалася выканаць разбор стыляў Mappaint з ''{0}''. Памылка: [{1}:{2}] "
+"{3}"
 
 msgid "Access Token Key:"
-msgstr ""
+msgstr "Ключ маркера доступу:"
 
 msgid "Access Token Secret:"
-msgstr ""
+msgstr "Крыпта-ключ маркера доступу:"
 
 msgid "Save Access Token in preferences"
-msgstr ""
+msgstr "Захаваць маркер доступу ў наладах"
 
 msgid ""
 "<html>Select to save the Access Token in the JOSM preferences.<br>Unselect "
 "to use the Access Token in this JOSM session only.</html>"
 msgstr ""
+"<html>Адзначце, каб захаваць маркер доступу ў наладах JOSM.<br>Зніміце "
+"адзнаку, каб выкарыстоўваць маркер доступу толькі ў гэтай сесіі JOSM.</html>"
 
 msgid "Use default settings"
-msgstr ""
+msgstr "Выкарыстоўваць значэння па змаўчанні"
 
 msgid "Consumer Key:"
-msgstr ""
+msgstr "Ключ спажыўца"
 
 msgid "Consumer Secret:"
-msgstr ""
+msgstr "Крыпта-ключ спажыўца"
 
 msgid "Request Token URL:"
-msgstr ""
+msgstr "Запытаць маркер URL:"
 
 msgid "Access Token URL:"
-msgstr ""
+msgstr "URL маркера доступу"
 
 msgid "Authorize URL:"
-msgstr ""
+msgstr "URL аўтарызацыі:"
 
 msgid "Click to reset the OAuth settings to default values"
-msgstr ""
+msgstr "Націсніце, каб скінуць налады OAuth да значэнняў па змаўчанні"
 
 msgid "Click to abort resetting to the OAuth default values"
-msgstr ""
+msgstr "Націсніце, каб адмяніць скід OAuth да значэнняў па змаўчанні"
 
 msgid ""
 "<html>JOSM is about to reset the OAuth settings to default values.<br>The "
 "current custom settings are not saved.</html>"
 msgstr ""
+"<html>JOSM скінуў налады OAuth да значэнняў па змаўчанні.<br>Усталяваныя "
+"перш налады - не захаваны.</html>"
 
 msgid "Overwrite custom OAuth settings?"
-msgstr ""
+msgstr "Перапісаць прызначаныя налады OAuth?"
 
 msgid "Fully automatic"
-msgstr ""
+msgstr "Аўтаматычна"
 
 msgid "Semi-automatic"
-msgstr ""
+msgstr "Паўаўтаматычна"
 
 msgid "Manual"
-msgstr ""
+msgstr "Уручную"
 
 msgid ""
 "<html>Run a fully automatic procedure to get an access token from the OSM "
@@ -9569,6 +10599,10 @@ msgid ""
 "fully<br>automatically authorizes the user and retrieves an Access "
 "Token.</html>"
 msgstr ""
+"<html>Запусціць аўтаматычную працэдуру атрымання маркера доступу з вэб-сайта "
+"OSM.<br>JOSM звернецца да вэбсайта OSM ад імя карыстальніка JOSM, "
+"цалкам<br>аўтаматычна аўтарызуе карыстальніка і атрымае маркер "
+"доступу.</html>"
 
 msgid ""
 "<html>Run a semi-automatic procedure to get an access token from the OSM "
@@ -9577,11 +10611,18 @@ msgid ""
 "external browser<br>to authenticate itself and to accept the request token "
 "submitted by JOSM.</html>"
 msgstr ""
+"<html>Запусціць паўаўтаматычную працэдуру атрымання маркера доступу з вэб-"
+"сайта OSM.<br>Пры гэтым JOSM падпіша стандарты запытаў OAuth, каб атрымаць "
+"маркер запыту і<br>маркер доступу. Карыстальнік будзе адпраўлены на вэбсайт "
+"OSM з дапамогай вонкавага браўзара<br>каб аўтэнтыфікавацца і прыняць маркер "
+"запыту, падпісаны JOSM.</html>"
 
 msgid ""
 "<html>Enter an Access Token manually if it was generated and retrieved "
 "outside<br>of JOSM.</html>"
 msgstr ""
+"<html>Увядзіце маркер доступу ўручную, калі ён быў створаны і атрыманы за "
+"межамі <br>JOSM.</html>"
 
 msgid ""
 "Please enter your OSM user name and password. The password will "
@@ -9589,71 +10630,85 @@ msgid ""
 "will be submitted to the OSM server <strong>only once</strong>. Subsequent "
 "data upload requests don''t use your password any more."
 msgstr ""
+"Калі ласка, увядзіце свой лагін і пароль OSM. Пароль <strong>не "
+"будзе</strong> захаваны адкрытым тэкстам у наладах JOSM і будзе перададзены "
+"на сервер <strong>толькі 1 раз</strong>. Наступныя перадачы дадзеных больш "
+"не будуць выкарыстоўваць пароль."
 
 msgid "Username: "
-msgstr ""
+msgstr "Карыстальнік: "
 
 msgid "Password: "
-msgstr ""
+msgstr "Пароль: "
 
 msgid ""
 "<strong>Warning:</strong> JOSM does login <strong>once</strong> using a "
 "secure connection."
 msgstr ""
+"<strong>Увага:</strong> JOSM ажыццяўляе ўваход <strong>адзін раз</strong>, "
+"выкарыстоўваючы абароненае злучэнне."
 
 msgid "Granted rights"
-msgstr ""
+msgstr "Даць правы"
 
 msgid "Advanced OAuth properties"
-msgstr ""
+msgstr "Пашыраныя ўласцівасці OAuth"
 
 msgid "Accept Access Token"
-msgstr ""
+msgstr "Прыняць маркер доступу"
 
 msgid ""
 "<html>You have successfully retrieved an OAuth Access Token from the OSM "
 "website. Click on <strong>{0}</strong> to accept the token. JOSM will use it "
 "in subsequent requests to gain access to the OSM API.</html>"
 msgstr ""
+"<html>Вы паспяхова атрымалі маркер доступу OAuth з вэб-сайта OSM. Націсніце "
+"на <strong>{0}</strong>, каб прыняць маркер. JOSM будзе выкарыстоўваць яго ў "
+"будучых запытах для доступу да OSM API.</html>"
 
 msgid "Authorize now"
-msgstr ""
+msgstr "Аўтарызавацца"
 
 msgid "Click to redirect you to the authorization form on the JOSM web site"
-msgstr ""
+msgstr "Націсніце, каб выклікаць бланк аўтарызацыі на вэб-сайце JOSM"
 
 msgid "Back"
 msgstr "Назад"
 
 msgid "Run the automatic authorization steps again"
-msgstr ""
+msgstr "Запусціць працэдуру аўтаматычнай аўтарызацыі яшчэ раз"
 
 msgid "Test Access Token"
-msgstr ""
+msgstr "Тэст маркера доступу"
 
 msgid "Please enter your OSM user name"
-msgstr ""
+msgstr "Калі ласка, увядзіце ваша імя карыстальніка ў OSM"
 
 msgid "The user name cannot be empty. Please enter your OSM user name"
 msgstr ""
+"Імя карыстальніка не можа быць пустым. Калі ласка, увядзіце Ваша імя "
+"карыстальніка ў OSM"
 
 msgid "Please enter your OSM password"
-msgstr ""
+msgstr "Калі ласка, увядзіце ваш OSM-пароль"
 
 msgid "The password cannot be empty. Please enter your OSM password"
-msgstr ""
+msgstr "Пароль не можа быць пустым. Калі ласка, увядзіце ваш OSM-пароль"
 
 msgid "Authorize JOSM to access the OSM API"
-msgstr ""
+msgstr "Аўтарызаваць JOSM для атрымання доступу да OSM API"
 
 msgid ""
 "<html>The automatic process for retrieving an OAuth Access Token<br>from the "
 "OSM server failed.<br><br>Please try again or choose another kind of "
 "authorization process,<br>i.e. semi-automatic or manual authorization.</html>"
 msgstr ""
+"<html>Аўтаматычны працэс атрымання маркера доступу OAuth<br>з сервера OSM не "
+"атрымаўся.<br><br>Калі ласка, паспрабуйце яшчэ раз ці абярыце іншы працэс "
+"аўтарызацыі,<br>напрыклад, паўаўтаматычны ці аўтарызацыю ўручную.</html>"
 
 msgid "OAuth authorization failed"
-msgstr ""
+msgstr "Аўтарызацыя OAuth не атрымалася"
 
 msgid ""
 "<html>The automatic process for retrieving an OAuth Access Token<br>from the "
@@ -9661,176 +10716,201 @@ msgid ""
 "from the OAuth Authorize Endpoint URL ''{0}''.<br><br>Please check your "
 "advanced setting and try again.</html>"
 msgstr ""
+"<html>Аўтаматычны працэс атрымання маркера доступу OAuth <br>з сервера OSM "
+"не атрымаўся, таму што JOSM не змог пабудаваць<br>дакладны URL уваходу з URL "
+"OAuth Authorize Endpoint ''{0}''.<br><br>Калі ласка, праверце вашы пашыраныя "
+"налады і паспрабуйце яшчэ раз.</html>"
 
 msgid ""
 "<html>The automatic process for retrieving an OAuth Access Token<br>from the "
 "OSM server failed. JOSM failed to log into {0}<br>for user "
 "{1}.<br><br>Please check username and password and try again.</html>"
 msgstr ""
+"<html>Аўтаматычны працэс атрымання маркера доступу OAuth<br>з сервера OSM не "
+"атрымаўся. JOSM адпрэчыў уваход у {0}<br>для карыстальніка {1}.<br><br>Калі "
+"ласка, праверце імя карыстальніка і пароль і паспрабуйце яшчэ раз.</html>"
 
 msgid ""
 "Please enter an OAuth Access Token which is authorized to access the OSM "
 "server ''{0}''."
 msgstr ""
+"Калі ласка, увядзіце маркер доступу OAuth, які аўтарызуе доступ да сервера "
+"OSM \"{0}\"."
 
 msgid "Access Token"
-msgstr ""
+msgstr "Маркер доступу"
 
 msgid "Advanced OAuth parameters"
-msgstr ""
+msgstr "Пашыраныя налады OAuth"
 
 msgid "Enter the OAuth Access Token"
-msgstr ""
+msgstr "Увядзіце маркер доступу OAuth"
 
 msgid "Enter advanced OAuth properties"
-msgstr ""
+msgstr "Усталюеце пашыраныя налады OAuth"
 
 msgid ""
 "<html><body>Please enter an OAuth Access Token which is authorized to access "
 "the OSM server ''{0}''.</body></html>"
 msgstr ""
+"<html><body>Калі ласка, увядзіце маркер доступу OAuth, які аўтарызуе доступ "
+"да сервера OSM \"{0}\".</body></html>"
 
 msgid "Please enter an Access Token Key"
-msgstr ""
+msgstr "Калі ласка, увядзіце ключ маркера доступу"
 
 msgid ""
 "The Access Token Key must not be empty. Please enter an Access Token Key"
 msgstr ""
+"Ключ маркера доступу не павінен быць пустым. Калі ласка, увядзіце ключ "
+"маркера доступу"
 
 msgid "Please enter an Access Token Secret"
-msgstr ""
+msgstr "Калі ласка, увядзіце крыпта-ключ маркера доступу"
 
 msgid ""
 "The Access Token Secret must not be empty. Please enter an Access Token "
 "Secret"
 msgstr ""
+"Крыпта-ключ маркера доступу не павінен быць пустым. Калі ласка, увядзіце "
+"крыпта-ключ маркера доступу"
 
 msgid "Click to test the Access Token"
-msgstr ""
+msgstr "Націсніце, каб праверыць маркер доступу"
 
 msgid ""
 "With OAuth you grant JOSM the right to upload map data and GPS tracks on "
 "your behalf (<a href=\"{0}\">more info...</a>)."
 msgstr ""
+"Абраўшы OAuth, дазваляеце JOSM перадаваць на сервер карты і трэкі GPS, ад "
+"свайго імя(<a href=\"{0}\">Падрабязнасці...</a>)."
 
 msgid "Please select an authorization procedure: "
-msgstr ""
+msgstr "Калі ласка, абярыце спосаб аўтарызацыі: "
 
 msgid "Get an Access Token for ''{0}''"
-msgstr ""
+msgstr "Атрымаць маркер доступу для ''{0}''"
 
 msgid "Close the dialog and cancel authorization"
-msgstr ""
+msgstr "Зачыніць дыялог і адмяніць аўтарызацыю"
 
 msgid "Close the dialog and accept the Access Token"
-msgstr ""
+msgstr "Зачыніць дыялог і прыняць маркер доступу"
 
 msgid "Failed to cancel running OAuth operation"
-msgstr ""
+msgstr "Не атрымалася адмяніць выкананую аперацыю OAuth"
 
 msgid "Retrieving OAuth Request Token from ''{0}''"
-msgstr ""
+msgstr "Атрыманне маркера запыту OAuth ад ''{0}''"
 
 msgid "Retrieving OAuth Access Token from ''{0}''"
-msgstr ""
+msgstr "Атрыманне маркера доступу OAuth ад ''{0}''"
 
 msgid "OSM website did not return a session cookie in response to ''{0}'',"
-msgstr ""
+msgstr "Сайт OSM не вярнуў кукі сесіі ў адказ на ''{0}'',"
 
 msgid ""
 "Failed to authenticate user ''{0}'' with password ''***'' as OAuth user"
 msgstr ""
+"Збой аўтэнтыфікацыі карыстальніка ''{0}'' з паролем ''***'' як карыстальніка "
+"з OAuth"
 
 msgid "Failed to authorize OAuth request  ''{0}''"
-msgstr ""
+msgstr "Не атрымалася выканаць запыт OAuth-аўтарызацыі ''{0}''"
 
 msgid "Authorizing OAuth Request token ''{0}'' at the OSM website ..."
-msgstr ""
+msgstr "Аўтарызацыя маркера запыту OAuth ''{0}'' на вэб-сайце OSM..."
 
 msgid "Initializing a session at the OSM website..."
-msgstr ""
+msgstr "Ініцыялізацыя сеансу на вэб-сайце OSM..."
 
 msgid "Authenticating the session for user ''{0}''..."
-msgstr ""
+msgstr "Аўтэнтыфікацыі сесіі для карыстальніка ''{0}''..."
 
 msgid "Authorizing request token ''{0}''..."
-msgstr ""
+msgstr "Аўтарызацыя маркера запыту ''{0}''..."
 
 msgid "Logging out session ''{0}''..."
-msgstr ""
+msgstr "Завяршэнне сеансу ''{0}''..."
 
 msgid "Allow to upload map data"
-msgstr ""
+msgstr "Дазволіць перадаваць на сервер дадзеныя карты"
 
 msgid "Select to grant JOSM the right to upload map data on your behalf"
 msgstr ""
+"Абярыце, каб дазволіць JOSM загружаць дадзеныя карты на сервер ад вашага імя"
 
 msgid "Allow to upload GPS traces"
-msgstr ""
+msgstr "Дазволіць перадаваць на сервер GPS трэкі"
 
 msgid "Select to grant JOSM the right to upload GPS traces on your behalf"
 msgstr ""
+"Абярыце, каб дазволіць JOSM перадаваць трэкі GPS на сервер ад вашага імя"
 
 msgid "Allow to download your private GPS traces"
-msgstr ""
+msgstr "Дазволіць загружаць свае GPS трэкі"
 
 msgid ""
 "Select to grant JOSM the right to download your private GPS traces into JOSM "
 "layers"
 msgstr ""
+"Абярыце, каб дазволіць JOSM спампоўваць з сервера вашы асабістыя трэкі GPS у "
+"пласты JOSM"
 
 msgid "Allow to read your preferences"
-msgstr ""
+msgstr "Дазволіць прагляд сваіх налад"
 
 msgid "Select to grant JOSM the right to read your server preferences"
-msgstr ""
+msgstr "Абярыце, каб дазволіць JOSM чытаць вашы налады сервера"
 
 msgid "Allow to write your preferences"
-msgstr ""
+msgstr "Дазволіць запіс сваіх налад"
 
 msgid "Select to grant JOSM the right to write your server preferences"
-msgstr ""
+msgstr "Абярыце, каб дазволіць JOSM запісваць вашы налады сервера"
 
 msgid "Allow modifications of notes"
-msgstr ""
+msgstr "Дазволіць змену нататак"
 
 msgid "Select to grant JOSM the right to modify notes on your behalf"
-msgstr ""
+msgstr "Абярыце, каб дазволіць JOSM змяняць нататкі ад вашага імя"
 
 msgid "Retrieving OAuth Access Token..."
-msgstr ""
+msgstr "Атрыманне маркера доступу OAuth..."
 
 msgid "<html>Retrieving an OAuth Access Token from ''{0}'' failed.</html>"
-msgstr ""
+msgstr "<html>Не атрымалася атрымаць маркер доступу OAuth ад ''{0}''.</html>"
 
 msgid "Request Failed"
-msgstr ""
+msgstr "Запыт не атрымаўся"
 
 msgid "Retrieving OAuth Request Token..."
-msgstr ""
+msgstr "Атрыманне маркера запыту OAuth..."
 
 msgid "<html>Retrieving an OAuth Request Token from ''{0}'' failed.</html>"
-msgstr ""
+msgstr "<html>Не атрымалася атрымаць маркер запыту OAuth ад ''{0}''.</html>"
 
 msgid "Display Advanced OAuth Parameters"
-msgstr ""
+msgstr "Адлюстраваць дадатковыя параметры OAuth"
 
 msgid "Retrieve Request Token"
-msgstr ""
+msgstr "Атрымаць маркер запыту"
 
 msgid ""
 "<html>Please click on <strong>{0}</strong> to retrieve an OAuth Request "
 "Token from ''{1}''.</html>"
 msgstr ""
+"<html>Калі ласка, націсніце на <strong>{0}</strong>, каб атрымаць маркер "
+"запыту OAuth з ''{1}''.</html>"
 
 msgid "<html>Step 1/3: Retrieve an OAuth Request Token</html>"
-msgstr ""
+msgstr "<html>Крок 1/3: Атрымаць маркер запыту OAuth</html>"
 
 msgid "<html>Step 2/3: Authorize and retrieve an Access Token</html>"
-msgstr ""
+msgstr "<html>Крок 2/3: Аўтарызавацца і атрымаць маркер доступу</html>"
 
 msgid "Request Access Token"
-msgstr ""
+msgstr "Запытаць маркер доступу"
 
 msgid ""
 "<html>JOSM successfully retrieved a Request Token. JOSM is now launching an "
@@ -9841,45 +10921,62 @@ msgid ""
 "copy the following authorize URL and paste it into the address field of your "
 "browser.</html>"
 msgstr ""
+"<html>JOSM паспяхова атрымаў маркер запыту. JOSM цяпер адкрые старонку "
+"аўтарызацыі ў вонкавым браўзэры. Калі ласка, увайдзіце, выкарыстоўваючы імя "
+"карыстальніка і пароль OSM, і затым выконвайце інструкцыі, каб аўтарызаваць "
+"маркер запыту. Затым пераключыцеся зваротна ў гэта акно і націсніце на "
+"<strong>{0}</strong><br><br>Калі знешні браўзэр не запусціцца, вы можаце "
+"скапіяваць наступны URL аўтарызацыі і ўставіць яго ў адрасны радок вашага "
+"браўзэра.</html>"
 
 msgid "Go back to step 1/3"
-msgstr ""
+msgstr "Вярнуцца да кроку 1/3"
 
 msgid "<html>Step 3/3: Successfully retrieved an Access Token</html>"
-msgstr ""
+msgstr "<html>Крок 3/3: Маркер доступу паспяхова атрыманы</html>"
 
 msgid ""
 "<html>JOSM has successfully retrieved an Access Token. You can now accept "
 "this token. JOSM will use it in the future for authentication and "
 "authorization to the OSM server.<br><br>The access token is: </html>"
 msgstr ""
+"<html>JOSM паспяхова атрымаў маркер доступу. Вы можаце пацвердзіць гэты "
+"маркер. JOSM будзе выкарыстоўваць яго для аўтэнтыфікацыі і аўтарызацыі на "
+"серверы OSM.<br><br>Маркер доступу: </html>"
 
 msgid "Click to retrieve a Request Token"
-msgstr ""
+msgstr "Націсніце, каб атрымаць маркер запыту"
 
 msgid "Retrieve Access Token"
-msgstr ""
+msgstr "Атрымаць маркер доступу"
 
 msgid "Click to retrieve an Access Token"
-msgstr ""
+msgstr "Націснуць, каб атрымаць маркер доступу"
 
 msgid "Testing OAuth Access Token"
-msgstr ""
+msgstr "Праверка маркера доступу OAuth"
 
 msgid "Retrieving user details with Access Token Key ''{0}'' was rejected."
 msgstr ""
+"Атрыманне інфармацыі пра карыстальніка з ключом маркера доступу ''{0}'' было "
+"адхілена."
 
 msgid "Retrieving user details with Access Token Key ''{0}'' was forbidden."
 msgstr ""
+"Атрыманне інфармацыі пра карыстальніка з ключом маркера доступу ''{0}'' было "
+"забаронена."
 
 msgid ""
 "<html>Successfully used the Access Token ''{0}'' to<br>access the OSM server "
 "at ''{1}''.<br>You are accessing the OSM server as user ''{2}'' with id "
 "''{3}''.</html>"
 msgstr ""
+"<html>Маркер доступу ''{0}'' паспяхова скарыстаны для<br>доступу да сервера "
+"OSM ''{1}''.<br>Вы зараз маеце доступ да сервера OSM у якасці карыстальніка "
+"''{2}'' з id ''{3}''.</html>"
 
 msgid "Success"
-msgstr ""
+msgstr "Паспяхова"
 
 msgid ""
 "<html>Failed to access the OSM server ''{0}''<br>with the Access Token "
@@ -9887,9 +10984,13 @@ msgid ""
 "not<br>be able to access any protected resource on this server using this "
 "token.</html>"
 msgstr ""
+"<html>Не атрымалася атрымаць доступ да сервера OSM «{0}»<br>з маркерам "
+"доступу «{1}».<br>Сервер адхіліў маркер доступу, як неаўтарызаваны. <br>Вы "
+"не зможаце атрымаць доступ да абароненых рэсурсаў на гэтым серверы з "
+"дапамогай гэтага маркера.</html>"
 
 msgid "Test failed"
-msgstr ""
+msgstr "Тэст не прайшоў"
 
 msgid ""
 "<html>The Access Token ''{1}'' is known to the OSM server ''{0}''.<br>The "
@@ -9898,9 +10999,14 @@ msgid ""
 "nevertheless use it<br>to upload data, upload GPS traces, and/or access "
 "other protected resources.</html>"
 msgstr ""
+"<html>Маркер доступу ''{1}'' вядомы серверу OSM ''{0}''.<br>Аднак, тэст "
+"атрымання дадзеных карыстальніка гэтага маркера не атрымаўся.<br>Незалежна "
+"ад таго, якімі правамі нададзены гэты маркер, Вы, тым не менш, можаце "
+"выкарыстоўваць яго<br>для перадачы дадзеных і GPS трэкаў на сервер, а "
+"таксама для доступу да іншых абароненых рэсурсаў.</html>"
 
 msgid "Token allows restricted access"
-msgstr ""
+msgstr "Маркер дае абмежаваны доступ"
 
 msgid ""
 "<html>Failed to retrieve information about the current user from the OSM "
@@ -9908,2800 +11014,3105 @@ msgid ""
 "Access Token, but<br>rather a problem with the server configuration. "
 "Carefully check the server<br>URL and your Internet connection.</html>"
 msgstr ""
+"<html>Не атрымалася атрымаць інфармацыю пра бягучага карыстальніка з сервера "
+"OSM ''{0}''.<br>Магчыма, што гэта не праблема праверкі маркера "
+"доступу,<br>а, хутчэй, праблема канфігурацыі сервера. Уважліва "
+"праверце<br>URL сервера і ваша злучэнне з інтэрнэтам.</html>"
 
 msgid ""
 "<html>Failed to sign the request for the OSM server ''{0}'' with the token "
 "''{1}''.<br>The token ist probably invalid.</html>"
 msgstr ""
+"<html>Не атрымалася падпісаць запыт да OSM серверу ''{0}'' з дапамогай "
+"маркера ''{1}''.<br>Магчыма, што спіс маркераў сапсаваны.</html>"
 
 msgid ""
 "<html>The test failed because the server responded with an internal "
 "error.<br>JOSM could not decide whether the token is valid. Please try again "
 "later.</html>"
 msgstr ""
+"<html>Тэст не прайшоў, таму што сервер паведаміў аб унутранай "
+"памылцы.<br>JOSM не змог вызначыць праўдзіваць маркера. Калі ласка, "
+"паспрабуйце пазней.</html>"
 
 msgid "Retrieving user info..."
-msgstr ""
+msgstr "Атрыманне інфармацыі пра карыстальніка..."
 
 msgid "Expert mode"
-msgstr ""
+msgstr "Экспертны рэжым"
 
 msgid "Close the preferences dialog and discard preference updates"
-msgstr ""
+msgstr "Зачыніць дыялог налад і адмяніць занесеныя змены"
 
 msgid "Save the preferences and close the dialog"
-msgstr ""
-
-msgid "Download plugins"
-msgstr ""
+msgstr "Захаваць налады і зачыніць дыялог"
 
 msgid "You have to restart JOSM for some settings to take effect."
-msgstr ""
+msgstr "Неабходна перазапусціць JOSM, каб змены набылі моц."
 
 msgid "Would you like to restart now?"
-msgstr ""
+msgstr "Перазапусціць цяпер?"
+
+msgid "Download plugins"
+msgstr "Запампаваць модулі"
 
 msgid "Icon paths:"
-msgstr ""
+msgstr "Шлях да значкоў:"
 
 msgid "Short Description:"
-msgstr ""
+msgstr "Кароткае апісанне:"
 
 msgid "Author:"
-msgstr ""
+msgstr "Аўтар:"
 
 msgid "Webpage:"
-msgstr ""
+msgstr "Вэб-старонка:"
 
 msgid "Description:"
-msgstr ""
+msgstr "Апісанне:"
 
 msgid "Version:"
-msgstr ""
+msgstr "Версія:"
 
 msgid "Minimum JOSM Version:"
-msgstr ""
+msgstr "Мінімальная версія JOSM:"
 
 msgid "by {0}"
-msgstr ""
+msgstr "{0}"
 
 msgid "Name (optional):"
-msgstr ""
+msgstr "Назва (неабавязкова):"
 
 msgid "URL / File:"
-msgstr ""
+msgstr "URL / Файл"
 
 msgid "active"
-msgstr ""
+msgstr "актыўны"
 
 msgid "Map paint style file (*.xml, *.mapcss, *.zip)"
-msgstr ""
+msgstr "Файлы стыляў адмалёўкі карты (*.xml, *.mapcss, *.zip)"
 
 msgid "Preset definition file (*.xml, *.zip)"
-msgstr ""
+msgstr "Файл вызначэння нарыхтоўкі (*.xml, *.zip)"
 
 msgid "Tag checker rule (*.validator.mapcss, *.zip)"
-msgstr ""
+msgstr "Правіла праверкі тэгаў (*.validator.mapcss, *.zip)"
 
 msgid "Edit source entry:"
-msgstr ""
+msgstr "Рэдагаванне крыніцы:"
 
 msgid "Entry ''{0}'' requires JOSM Version {1}. (Currently running: {2})"
-msgstr ""
+msgstr "Кампанент «{0}» патрабуе версію JOSM {1}. (Цяпер запушчана: {2})"
 
 msgid "Continue anyway"
-msgstr ""
+msgstr "Усё адно працягнуць"
 
 msgid "Ignore warning and install style anyway"
-msgstr ""
+msgstr "Ігнараваць папярэджанне і ўсталяваць стыль"
 
 msgid "Some entries have unmet dependencies:"
-msgstr ""
+msgstr "Некаторыя кампаненты маюць нездаволеныя залежнасці:"
 
 msgid "Reset"
-msgstr ""
+msgstr "Скід"
 
 msgid "Reset to default"
-msgstr ""
+msgstr "Скінуць на значэнні па змаўчанні"
 
 msgid "Add a new icon path"
-msgstr ""
+msgstr "Дадаць новы шлях да значкоў"
 
 msgid "Remove the selected icon paths"
-msgstr ""
+msgstr "Выдаліць вылучаныя шляхі да значкоў"
 
 msgid "Edit the selected icon path"
-msgstr ""
+msgstr "Кіраваць вылучаныя шляхі да значкоў"
 
 msgid "Tooltip"
-msgstr ""
+msgstr "Падказка"
 
 msgid "Icon"
-msgstr ""
+msgstr "Пiктаграма"
 
 msgid "Remove from toolbar"
-msgstr ""
+msgstr "Выдаліць з панэлі прылад"
 
 msgid "Configure toolbar"
-msgstr ""
+msgstr "Наладзіць панэль прылад"
 
 msgid "Edit shortcut"
-msgstr ""
+msgstr "Уласцівасці гарачай клавішы"
 
 msgid "Do not hide toolbar and menu"
-msgstr ""
+msgstr "Не хаваць панэль прылад і меню"
 
 msgid "Actions"
-msgstr ""
+msgstr "Дзеянні"
 
 msgid "Toolbar customization"
-msgstr ""
+msgstr "Налада панэлі прылад"
 
 msgid "Customize the elements on the toolbar."
-msgstr ""
+msgstr "Наладзіць элементы панэлі прылад."
 
 msgid "Separator"
-msgstr ""
+msgstr "Падзельнік"
 
 msgid "Toolbar"
-msgstr ""
+msgstr "Панэль прылад"
 
 msgid "Available"
-msgstr ""
+msgstr "Даступна"
 
 msgid "Action parameters"
-msgstr ""
+msgstr "Параметры дзеяння"
 
 msgid "Parameter name"
-msgstr ""
+msgstr "Імя параметру"
 
 msgid "Parameter value"
-msgstr ""
+msgstr "Значэнне параметру"
 
 msgid "Toolbar action without name: {0}"
-msgstr ""
+msgstr "Дзеянне без імя на панэлі: {0}"
 
 msgid "Strange toolbar value: {0}"
-msgstr ""
+msgstr "Дзіўнае значэнне панэлі: {0}"
 
 msgid "Toolbar action {0} overwritten: {1} gets {2}"
-msgstr ""
+msgstr "Дзеянне панэлі {0} перазапісана: {1} атрымана {2}"
 
 msgid "Registered toolbar action without name: {0}"
-msgstr ""
+msgstr "Зарэгістраванае дзеянне без імя на панэлі: {0}"
 
 msgid "Registered toolbar action {0} overwritten: {1} gets {2}"
-msgstr ""
+msgstr "Зарэгістраванае дзеянне на панэлі {0} перазапісана: {1} атрыманы {2}"
 
 msgid "Toolbar: {0}"
-msgstr ""
+msgstr "Панэль прылад: {0}"
 
 msgid "Advanced Preferences"
-msgstr ""
+msgstr "Пашыраныя налады"
 
 msgid "Setting Preference entries directly. Use with caution!"
-msgstr ""
+msgstr "Усталёўка налад напроста. Карыстацца з асцярожнасцю!"
 
 msgid "Search: "
-msgstr ""
+msgstr "Пошук: "
 
 msgid "Read from file"
-msgstr ""
+msgstr "Загрузіць з файла..."
 
 msgid "Export selected items"
-msgstr ""
+msgstr "Захаваць у файл..."
 
 msgid "JOSM custom settings files (*.xml)"
-msgstr ""
+msgstr "Файлы карыстацкіх налад JOSM (*.xml)"
 
 msgid "Please select some preference keys not marked as default"
 msgstr ""
+"Абярыце некалькі налад, значэнні якіх адрозніваюцца ад значэнняў па змаўчанні"
 
 msgid "Export preferences keys to JOSM customization file"
-msgstr ""
+msgstr "Экспарт ключоў налад у файл карыстальніцкіх налад JOSM"
 
 msgid "What to do with preference lists when this file is to be imported?"
-msgstr ""
+msgstr "Што рабіць з наладай-спісам, калі файл будзе імпартавацца назад?"
 
 msgid "Append preferences from file to existing values"
-msgstr ""
+msgstr "Дадаць налады з файла"
 
 msgid "Replace existing values"
-msgstr ""
+msgstr "Замяніць наладамі з файла"
 
 msgid "Open JOSM customization file"
-msgstr ""
+msgstr "Адкрыць файл налад JOSM"
 
 msgid "Import log"
-msgstr ""
+msgstr "Часопіс імпарту"
 
 msgid ""
 "<html>Here is file import summary. <br/>You can reject preferences changes "
 "by pressing \"Cancel\" in preferences dialog <br/>To activate some changes "
 "JOSM restart may be needed.</html>"
 msgstr ""
+"<html>Тут сцісла вынікі імпарту налад з файла. <br/>Вы можаце адмовіцца ад "
+"гэтых змен, націснуўшы \"Адмена\" у акне налад.<br/>Для актывацыі некаторых "
+"налад можа запатрабавацца перазапуск JOSM .</html>"
 
 msgid "shortcut"
-msgstr ""
+msgstr "гарачая клавіша"
 
 msgid "color"
-msgstr ""
+msgstr "колер"
 
 msgid "toolbar"
-msgstr ""
+msgstr "панэль прылад"
 
 msgid "imagery"
-msgstr ""
+msgstr "здымкі"
 
 msgid "Reset preferences"
-msgstr ""
+msgstr "Скінуць налады"
 
 msgid ""
 "You are about to clear all preferences to their default values<br />All your "
 "settings will be deleted: plugins, imagery, filters, toolbar buttons, "
 "keyboard, etc. <br />Are you sure you want to continue?"
 msgstr ""
+"Вы збіраецеся скінуць усе налады да значэнняў па змаўчанні<br />Будуць "
+"выдалены ўсе вашы налады: модуляў, здымкаў, фільтраў, кнопак панэлі прылад, "
+"клавіятуры і інш. <br />Вы сапраўды жадаеце працягнуць?"
 
 msgid "Load profile"
-msgstr ""
+msgstr "Загрузіць профіль"
 
 msgid "Save {0} profile"
-msgstr ""
+msgstr "Захаваць профіль {0}"
 
 msgid "All the preferences of this group are default, nothing to save"
-msgstr ""
+msgstr "Усе налады гэтай групы стандартныя, захоўваць няма чаго"
 
 msgid "Choose profile file"
-msgstr ""
+msgstr "Абярыце файл профіля"
 
 msgid "Change list setting"
-msgstr ""
+msgstr "Змяніць параметры спісу"
 
 msgid "Key: {0}"
-msgstr ""
+msgstr "Ключ: {0}"
 
 msgid "Change list of lists setting"
-msgstr ""
+msgstr "Змяніць параметры спісу спісаў"
 
 msgid "add entry"
-msgstr ""
+msgstr "дадаць запіс"
 
 msgid "Remove the selected entry"
-msgstr ""
+msgstr "Выдаліць абраны запіс"
 
 msgid "Change list of maps setting"
-msgstr ""
+msgstr "Змяніць параметры спісу карт"
 
 msgid "Entry {0}"
-msgstr ""
+msgstr "Запіс {0}"
 
 msgid "Please select the row to edit."
-msgstr ""
+msgstr "Калі ласка, абярыце радок для рэдагавання."
 
 msgid "Select Setting Type:"
-msgstr ""
+msgstr "Абярыце тып параметру:"
 
 msgid "Simple"
-msgstr ""
+msgstr "Просты"
 
 msgid "List"
-msgstr ""
+msgstr "Спіс"
 
 msgid "List of lists"
-msgstr ""
+msgstr "Спіс спісаў"
 
 msgid "List of maps"
-msgstr ""
+msgstr "Спіс карт"
 
 msgid "Add setting"
-msgstr ""
+msgstr "Дадаць параметр"
 
 msgid "Please select the row to delete."
-msgstr ""
+msgstr "Калі ласка, абярыце радок для выдалення."
 
 msgid "Advanced Background: Changed"
-msgstr ""
+msgstr "Пашыраныя налады: Зменена"
 
 msgid "Advanced Background: NonDefault"
-msgstr ""
+msgstr "Пашыраныя налады: не па змаўчанні"
 
 msgid "Current value is default."
-msgstr ""
+msgstr "Бягучае значэнне з’яўляецца значэннем па змаўчанні."
 
 msgid "Default value is ''{0}''."
-msgstr ""
+msgstr "Значэнне па змаўчанні: ''{0}''."
 
 msgid "Default value currently unknown (setting has not been used yet)."
 msgstr ""
+"Значэнне па змаўчанні невядома (налада яшчэ ніколі не была скарыстана)."
 
 msgid "Change string setting"
-msgstr ""
+msgstr "Змяніць параметры радка"
 
 msgid "Value: "
-msgstr ""
+msgstr "Значэнне: "
 
 msgid "Audio Settings"
-msgstr ""
+msgstr "Параметры Аўдыё"
 
 msgid "Settings for the audio player and audio markers."
-msgstr ""
+msgstr "Параметры гукавога прайгравальніка, і гукавых маркераў."
 
 msgid "Display the Audio menu."
-msgstr ""
+msgstr "Паказаць меню Аўдыё."
 
 msgid "Label audio (and image and web) markers."
-msgstr ""
+msgstr "Падпісваць маркеры аўдыё, малюначкаў і вэба."
 
 msgid "Display live audio trace."
-msgstr ""
+msgstr "Паказаць гукавыя падказкі ў рэальным часе"
 
 msgid "Explicit waypoints with valid timestamps."
-msgstr ""
+msgstr "Дакладных шляхавых кропак з правільнымі часавымі пазнакамі"
 
 msgid "Explicit waypoints with time estimated from track position."
-msgstr ""
+msgstr "Дакладных шляхавых кропак з прыблізным часам з пазіцыі на трэку"
 
 msgid "Named trackpoints."
-msgstr ""
+msgstr "Названыя кропкі трэка."
 
 msgid "Modified times (time stamps) of audio files."
-msgstr ""
+msgstr "Часоў змен (пазнак часу) гукавых файлаў"
 
 msgid "Start of track (will always do this if no other markers available)."
-msgstr ""
+msgstr "Пачатак трэка (заўсёды рабіць гэта, калі іншыя пазнакі недаступныя)"
 
 msgid "Show or hide the audio menu entry on the main menu bar."
-msgstr ""
+msgstr "Адлюстраваць ці схаваць меню працы з гукам на панэлі Галоўнага меню"
 
 msgid ""
 "Display a moving icon representing the point on the synchronized track where "
 "the audio currently playing was recorded."
 msgstr ""
+"Паказаць анімаваную піктаграму ў кропцы трэка, дзе быў запісаны прайграваны "
+"ў дадзены момант гук."
 
 msgid ""
 "Put text labels against audio (and image and web) markers as well as their "
 "button icons."
 msgstr ""
+"Пастаўце тэкставы надпіс насупраць аўдыё (і малюнкі і вэб-сайта) маркераў, а "
+"таксама іх кнопак."
 
 msgid "When importing audio, make markers from..."
-msgstr ""
+msgstr "Пры імпартаванні гуку, ствараць пазнакі з..."
 
 msgid "When importing audio, apply it to any waypoints in the GPX layer."
 msgstr ""
+"Калі імпартуецца гук, ужываць яго для любых шляхавых кропак з пласта GPX."
 
 msgid ""
 "Automatically create audio markers from trackpoints (rather than explicit "
 "waypoints) with names or descriptions."
 msgstr ""
+"Аўтаматычна ствараць гукавыя пазнакі з кропак трэка (замест відавочных "
+"шляхавых кропак) з імёнамі ці апісаннямі."
 
 msgid ""
 "Create audio markers at the position on the track corresponding to the "
 "modified time of each audio WAV file imported."
 msgstr ""
+"Стварыць аўдыё-адзнакі ў становішчы на трэку, які адпавядае часу змены "
+"кожнага імпартаванага гукавога файла WAV."
 
 msgid ""
 "The number of seconds to jump forward or back when the relevant button is "
 "pressed"
 msgstr ""
+"Паказвае, на колькі секунд наперад ці назад трэба перайсці пры націску "
+"адпаведнай кнопкі"
 
 msgid "Forward/back time (seconds)"
-msgstr ""
+msgstr "Час перамоткі (секунд)"
 
 msgid "The amount by which the speed is multiplied for fast forwarding"
 msgstr ""
+"Паказвае, у колькі разоў павялічваецца хуткасць пры хуткім прайграванні"
 
 msgid "Fast forward multiplier"
-msgstr ""
+msgstr "Множнік хуткага прайгравання"
 
 msgid ""
 "Playback starts this number of seconds before (or after, if negative) the "
 "audio track position requested"
 msgstr ""
+"Прайграванне пачнецца праз гэту колькасць секунд да (ці пасля, у выпадку "
+"адмоўнага) запытанай пазіцыі аўдыёзапіса"
 
 msgid "Lead-in time (seconds)"
-msgstr ""
+msgstr "Працягласць уступа (у секундах)"
 
 msgid "The ratio of voice recorder elapsed time to true elapsed time"
-msgstr ""
+msgstr "Адносіны часу дыктафоннага запісу да праўдзіва затрачанага часу"
 
 msgid "Voice recorder calibration"
-msgstr ""
+msgstr "Каліброўка гукапісу"
 
 msgid "Color"
-msgstr ""
+msgstr "Колер"
 
 msgid "Choose"
-msgstr ""
+msgstr "Абраць"
 
 msgid "Choose a color for {0}"
-msgstr ""
+msgstr "Абярыце колер для {0}"
 
 msgid "Set to default"
-msgstr ""
+msgstr "Усталяваць значэнне па змаўчанні"
 
 msgid "Set all to default"
-msgstr ""
+msgstr "Усталяваць усе значэнні па змаўчанні"
 
 msgid "Colors used by different objects in JOSM."
-msgstr ""
+msgstr "Колеры, выкарыстоўваныя рознымі аб’ектамі ў JOSM."
 
 msgid "Colors"
-msgstr ""
+msgstr "Колеры"
 
 msgid "Display Settings"
-msgstr ""
+msgstr "Налады адлюстравання"
 
 msgid ""
 "Various settings that influence the visual representation of the whole "
 "program."
-msgstr ""
+msgstr "Розныя налады, якія ўплываюць на вонкавы выгляд праграмы."
 
 msgid "Draw Direction Arrows"
-msgstr ""
+msgstr "Адлюстроўваць стрэлкі кірунку"
 
 msgid "Only on the head of a way."
-msgstr ""
+msgstr "Толькі напачатку лініі"
 
 msgid "Draw oneway arrows."
-msgstr ""
+msgstr "Адлюстроўваць стрэлкі аднабаковага руху"
 
 msgid "Draw segment order numbers"
-msgstr ""
+msgstr "Адлюстроўваць парадкавыя нумары сегментаў"
 
 msgid "Draw boundaries of downloaded data"
-msgstr ""
+msgstr "Адлюстроўваць межы запампаваных дадзеных"
 
 msgid "Draw virtual nodes in select mode"
-msgstr ""
+msgstr "Адлюстроўваць віртуальныя кропкі ў рэжыме выбару"
 
 msgid "Draw inactive layers in other color"
-msgstr ""
+msgstr "Адлюстроўваць неактыўныя пласты іншым колерам"
 
 msgid "Display discardable keys"
-msgstr ""
+msgstr "Паказваць выдаляемыя ключы"
 
 msgid "Highlight target ways and nodes"
-msgstr ""
+msgstr "Вылучыце мэтавыя лініі і кропкі"
 
 msgid "Draw rubber-band helper line"
-msgstr ""
+msgstr "Маляваць «гумовую» дапаможную лінію"
 
 msgid "Smooth map graphics (antialiasing)"
-msgstr ""
+msgstr "Згладжаныя лініі (антыальясінг)"
 
 msgid "Smooth map graphics in wireframe mode (antialiasing)"
-msgstr ""
+msgstr "Згладжваць карту ў рэжыме каркаса"
 
 msgid "Draw only outlines of areas"
-msgstr ""
+msgstr "Маляваць толькі контур вобласці"
 
 msgid "GPS Points"
-msgstr ""
+msgstr "Кропкі GPS"
 
 msgid "Draw direction hints for way segments."
-msgstr ""
+msgstr "Паказваць кірунак на сегментах ліній."
 
 msgid "Draw arrows in the direction of oneways and other directed features."
 msgstr ""
+"Адлюстроўваць стрэлкі для аднабаковага руху і іншых накіраваных аб’ектаў."
 
 msgid "Draw the order numbers of all segments within their way."
-msgstr ""
+msgstr "Паказваць парадкавыя нумары на ўсіх сегментах лініі."
 
 msgid "Draw the boundaries of data loaded from the server."
-msgstr ""
+msgstr "Адлюстроўваць межы вобласці, запампаванай з сервера."
 
 msgid "Draw virtual nodes in select mode for easy way modification."
-msgstr ""
+msgstr "Адлюстроўваць віртуальныя кропкі ў рэжыме выбару, для выгоды праўкі."
 
 msgid "Draw the inactive data layers in a different color."
-msgstr ""
+msgstr "Адлюстроўваць неактыўныя пласты дадзеных іншым колерам."
 
 msgid ""
 "Apply antialiasing to the map view resulting in a smoother appearance."
-msgstr ""
+msgstr "Ужыць згладжванне карты."
 
 msgid ""
 "Apply antialiasing to the map view in wireframe mode resulting in a smoother "
 "appearance."
 msgstr ""
+"Ужыванне згладжвання да карты ў рэжыме каркаса дазваляе ўхіліць няроўнасці "
+"контураў."
 
 msgid "Hightlight target nodes and ways while drawing or selecting"
-msgstr ""
+msgstr "Адзначце мэтавыя кропкі і лініі падчас малявання ці выбару"
 
 msgid ""
 "This option suppresses the filling of areas, overriding anything specified "
 "in the selected style."
-msgstr ""
+msgstr "Гэта опцыя блакуе запаўненне абласцей, нягледзячы на абраны стыль."
 
 msgid ""
 "Display keys which have been deemed uninteresting to the point that they can "
 "be silently removed."
 msgstr ""
+"Паказваць ключы, якія не ўяўляюць цікавасці і могуць быць моўчкі выдалены."
 
 msgid "Options that affect drawing performance"
-msgstr ""
+msgstr "Налады, якія ўплываюць на хуткасць адлюстравання"
 
 msgid "Segment drawing options"
-msgstr ""
+msgstr "Налады малявання сегмента"
 
 msgid "Select and draw mode options"
-msgstr ""
+msgstr "Налады вылучэння і маляванні"
 
 msgid "Other options"
-msgstr ""
+msgstr "Іншыя налады"
 
 msgid "OSM Data"
-msgstr ""
+msgstr "Дадзеныя OSM"
 
 msgid "Auto"
-msgstr ""
+msgstr "Аўта"
 
 msgctxt "gpx_field"
 msgid "Name"
-msgstr ""
+msgstr "Імя"
 
 msgctxt "gpx_field"
 msgid "Desc(ription)"
-msgstr ""
+msgstr "Апісанне"
 
 msgid "Everything"
-msgstr ""
+msgstr "Усе дадзеныя"
 
 msgid "Name or offset"
-msgstr ""
+msgstr "Імя ці зрушэнне"
 
 msgid "None"
-msgstr ""
+msgstr "Не"
 
 msgid "Custom"
-msgstr ""
+msgstr "Наладжвальнае"
 
 msgid "Use global settings"
-msgstr ""
+msgstr "Выкарыстоўваць агульныя налады"
 
 msgid "All"
-msgstr ""
+msgstr "Усё"
 
 msgid "Local files"
-msgstr ""
+msgstr "Лакальныя файлы"
 
 msgid "Force lines if no segments imported"
-msgstr ""
+msgstr "Адлюстроўваць лініі, нават калі няма імпартаваных сегментаў"
 
 msgid "Draw large GPS points"
-msgstr ""
+msgstr "Маляваць буйныя GPS кропкі"
 
 msgid "Draw a circle from HDOP value"
-msgstr ""
+msgstr "Маляваць круг значэння HDOP"
 
 msgid "Velocity (red = slow, green = fast)"
-msgstr ""
+msgstr "Хуткасць (чырвоны = павольна, зялёны = хутка)"
 
 msgid "Direction (red = west, yellow = north, green = east, blue = south)"
 msgstr ""
+"Кірунак (чырвоны = захад, жоўты = поўнач, зялёны = усход, сіні = поўдзень)"
 
 msgid "Dilution of Position (red = high, green = low, if available)"
 msgstr ""
+"Адрозніванне становішча (чырвоны = высока, зялёны = нізка, калі такія маюцца)"
 
 msgid "Track date"
-msgstr ""
+msgstr "Дата трэка"
 
 msgid "Single Color (can be customized for named layers)"
-msgstr ""
+msgstr "Адным колерам (можа быць вызначана для найменных слаёў)"
 
 msgid "Car"
-msgstr ""
+msgstr "Аўтамабіль"
 
 msgid "Bicycle"
-msgstr ""
+msgstr "Вела"
 
 msgid "Foot"
-msgstr ""
+msgstr "Пешшу"
 
 msgid "Create markers when reading GPX"
-msgstr ""
+msgstr "Стварыць маркеры пры чытанні GPX"
 
 msgid "Fast drawing (looks uglier)"
-msgstr ""
+msgstr "Хуткая адмалёўка (выглядае горш)"
 
 msgid "Dynamic color range based on data limits"
-msgstr ""
+msgstr "Дынамічны каляровы дыяпазон на аснове меж дадзеных"
 
 msgid "Smooth GPX graphics (antialiasing)"
-msgstr ""
+msgstr "Згладжваць GPX трэкі"
 
 msgid ""
 "Automatically make a marker layer from any waypoints when opening a GPX "
 "layer."
 msgstr ""
+"Аўтаматычна ствараць пласт метак з шляхавых кропак пры адкрыцці GPX пласта."
 
 msgid "Draw lines between raw GPS points"
-msgstr ""
+msgstr "Маляваць лініі паміж кропкамі GPS"
 
 msgid ""
 "Maximum length (in meters) to draw lines for local files. Set to ''-1'' to "
 "draw all lines."
 msgstr ""
+"Максімальная даўжыня ліній (у метрах) для лакальных файлаў. Усталюеце -1 каб "
+"маляваць усе лініі."
 
 msgid "Maximum length for local files (meters)"
-msgstr ""
+msgstr "Максімальная даўжыня для лакальных файлаў (у метрах)"
 
 msgid ""
 "Maximum length (in meters) to draw lines. Set to ''-1'' to draw all lines."
 msgstr ""
+"Максімальная даўжыня (у метрах) ліній для паказу. Усталюйце «-1», каб "
+"паказваць усе лініі."
 
 msgid "Maximum length (meters)"
-msgstr ""
+msgstr "Максімальная даўжыня (у метрах)"
 
 msgid ""
 "Force drawing of lines if the imported data contain no line information."
 msgstr ""
+"Адлюстроўваць лініі, нават калі няма імпартаванай інфармацыі пра лініі."
 
 msgid "Draw direction arrows for lines, connecting GPS points."
-msgstr ""
+msgstr "Адлюстроўваць стрэлкі на лініях, якія злучаюць кропкі GPS."
 
 msgid ""
 "Draw the direction arrows using table lookups instead of complex math."
 msgstr ""
+"Адлюстроўваць стрэлкі кірунку, выкарыстоўваючы табліцы, замест матэматычных "
+"вылічэнняў."
 
 msgid ""
 "Do not draw arrows if they are not at least this distance away from the last "
 "one."
 msgstr ""
+"Не адлюстроўваць стрэлкі, калі яны знаходзяцца блізка ад папярэдніх стрэлак"
 
 msgid "Minimum distance (pixels)"
-msgstr ""
+msgstr "Мінімальная адлегласць (у пікселях)"
 
 msgid "Draw a circle from HDOP value."
-msgstr ""
+msgstr "Маляваць круг значэння HDOP."
 
 msgid "Draw larger dots for the GPS points."
-msgstr ""
+msgstr "Адлюстроўваць кропкі GPS больш тоўста"
 
 msgid "Width of drawn GPX line (0 for default)"
-msgstr ""
+msgstr "Шырыня адлюстроўванай лініі GPX трэка (0 для шырыні па змаўчанні)"
 
 msgid "Drawing width of GPX lines"
-msgstr ""
+msgstr "Шырыня паказу GPX трэкаў"
 
 msgid ""
 "Apply antialiasing to the GPX lines resulting in a smoother appearance."
-msgstr ""
+msgstr "Прымяніць згладжванне да GPX ліній, каб палепшыць іх выгляд."
 
 msgid ""
 "All points and track segments will have the same color. Can be customized in "
 "Layer Manager."
 msgstr ""
+"Аднолькавы колер ва ўсіх кропак і сегментаў трэкаў. Колер можа быць "
+"вызначаны ў менеджэры слаёў."
 
 msgid "Colors points and track segments by velocity."
-msgstr ""
+msgstr "Колеры кропак і сегментаў трэкаў па хуткасці."
 
 msgid "Colors points and track segments by direction."
-msgstr ""
+msgstr "Размаляваць кропкі і сегменты трэка па кірунку."
 
 msgid ""
 "Colors points and track segments by dilution of position (HDOP). Your "
 "capture device needs to log that information."
 msgstr ""
+"Колеры кропак і сегментаў трэка залежаць ад \"зніжэння дакладнасці\" (HDOP). "
+"Ваша прылада павінна рэгістраваць гэтую інфармацыю."
 
 msgid "Colors points and track segments by its timestamp."
-msgstr ""
+msgstr "Размаляваць кропкі і сегменты трэка па пазнаках часу."
 
 msgid "Allows to tune the track coloring for different average speeds."
-msgstr ""
+msgstr "Дазваляе наладжваць афарбоўку трэка для розных сярэдніх хуткасцяў."
 
 msgid "Track and Point Coloring"
-msgstr ""
+msgstr "Размаляваць трэкі і кропкі"
 
 msgid "Colors points and track segments by data limits."
-msgstr ""
+msgstr "Размаляваць кропкі і сегменты трэка па межах дадзеных."
 
 msgid "Waypoint labelling"
-msgstr ""
+msgstr "Адлюстраванне шляхавых кропак"
 
 msgid "Audio waypoint labelling"
-msgstr ""
+msgstr "Аўдыё-адзнакі дарожных кропак"
 
 msgid "Incorrect waypoint label pattern: {0}"
-msgstr ""
+msgstr "Няправільны шаблон подпісу шляхавой кропкі: {0}"
 
 msgid "Incorrect pattern"
-msgstr ""
+msgstr "Няслушны шаблон"
 
 msgid "Incorrect audio waypoint label pattern: {0}"
-msgstr ""
+msgstr "Няправільны шаблон подпісу аўдыё шляхавой кропкі: {0}"
 
 msgid "Show splash screen at startup"
-msgstr ""
+msgstr "Паказваць застаўку пры запуску"
 
 msgid "Show object ID in selection lists"
-msgstr ""
+msgstr "Паказваць ID аб’ектаў у спісе выбару"
 
 msgid "Show localized name in selection lists"
-msgstr ""
+msgstr "Паказаць беларускую назву ў спісах выбару"
 
 msgid "Modeless working (Potlatch style)"
-msgstr ""
+msgstr "Безрэжымная праца (у стылі Potlatch)"
 
 msgid "Dynamic buttons in side menus"
-msgstr ""
+msgstr "Дынамічныя кнопкі ў бакавых меню"
 
 msgid "Display ISO dates"
-msgstr ""
+msgstr "Адлюстроўваць даты ў фармаце ISO"
 
 msgid "Use native file choosers (nicer, but do not support file filters)"
 msgstr ""
+"Выкарыстоўваць сістэмны дыялог выбару файлаў (прыгажэй, але не падтрымлівае "
+"фільтры файлаў)"
 
 msgid "Show localized name in selection lists, if available"
-msgstr ""
+msgstr "Паказаць беларускую назву ў спісах выбару, калі магчыма"
 
 msgid "Do not require to switch modes (potlatch style workflow)"
-msgstr ""
+msgstr "Не патрабуе пераключэння рэжымаў (працоўны стыль potlatch)"
 
 msgid ""
 "Display buttons in right side menus only when mouse is inside the element"
-msgstr ""
+msgstr "Паказваць кнопкі ў меню справа толькі пры навядзенні мышы на элемент"
 
 msgid "ISO 8601"
-msgstr ""
+msgstr "ISO 8601"
 
 msgid ""
 "Format dates according to {0}. Today''s date will be displayed as {1} "
 "instead of {2}"
 msgstr ""
+"Фарматаваць даты ў адпаведнасці з {0}. Сённяшняя дата будзе адлюстроўвацца "
+"як {1} замест {2}"
 
 msgid ""
 "Use file choosers that behave more like native ones. They look nicer but do "
 "not support some features like file filters"
 msgstr ""
+"Выкарыстоўваць дыялогавыя вокны выбару файлаў, больш падобныя на сістэмныя. "
+"Яны выглядаюць прыгажэй, але не падтрымліваюць некаторыя магчымасці, "
+"напрыклад, фільтры тыпаў файлаў"
 
 msgid "Look and Feel"
-msgstr ""
+msgstr "Афармленне"
 
 msgid "Language"
-msgstr ""
+msgstr "Мова"
 
 msgid "Default (Auto determined)"
-msgstr ""
+msgstr "Па змаўчанні (Аўтавызначэнне)"
 
 msgid "Add Imagery URL"
-msgstr ""
+msgstr "Дадаць URL падкладкі"
 
 msgid "1. Enter URL"
-msgstr ""
+msgstr "1. Увядзіце URL"
 
 msgid ""
 "{0} is replaced by tile zoom level, also supported:<br>offsets to the zoom "
 "level: {1} or {2}<br>reversed zoom level: {3}"
 msgstr ""
+"{0} замяняецца на ўзровень маштабу квадратаў, таксама "
+"падтрымліваюцца:<br>зрушэнне ад маштабу: {1} ці {2}<br>зваротны ўзровень "
+"маштабу: {3}"
 
 msgid "{0} is replaced by X-coordinate of the tile"
-msgstr ""
+msgstr "{0} замяняецца на X-каардынату квадрата"
 
 msgid "{0} is replaced by Y-coordinate of the tile"
-msgstr ""
+msgstr "{0} замяняецца на Y-каардынату квадрата"
 
 msgid "{0} is replaced by {1} (Yahoo style Y coordinate)"
-msgstr ""
+msgstr "{0} замяняецца на {1} (Y-каардыната ў стылі Yahoo)"
 
 msgid ""
 "{0} is replaced by {1} (OSGeo Tile Map Service Specification style Y "
 "coordinate)"
 msgstr ""
+"{0} замяняецца на {1} (Y-каардыната ў стылі спецыфікацыі OSGeo Tile Map "
+"Service)"
 
 msgid ""
 "{0} is replaced by a random selection from the given comma separated list, "
 "e.g. {1}"
 msgstr ""
+"{0} замяняецца на выпадковы выбар з падзеленага коскамі спісу, напрыклад: {1}"
 
 msgid "2. Enter maximum zoom (optional)"
-msgstr ""
+msgstr "2. Пазначце максімальны маштаб (неабавязкова)"
 
 msgid "3. Verify generated TMS URL"
-msgstr ""
+msgstr "3. Праверце створаны URL для TMS"
 
 msgid "4. Enter name for this layer"
-msgstr ""
+msgstr "4. Увядзіце імя для гэтага пласта"
 
 msgid "Store WMS endpoint only, select layers at usage"
-msgstr ""
+msgstr "Захаваць толькі канцавыя кропкі WMS, абярыце пласт для выкарыстання"
 
 msgid "Show bounds"
-msgstr ""
+msgstr "Паказаць межы"
 
 msgid "1. Enter service URL"
-msgstr ""
+msgstr "1. Увядзіце URL службы"
 
 msgid "Get layers"
-msgstr ""
+msgstr "Атрымаць пласты"
 
 msgid "2. Select layers"
-msgstr ""
+msgstr "2. Абярыце пласты"
 
 msgid "3. Select image format"
-msgstr ""
+msgstr "3. Абярыце фармат малюнка"
 
 msgid "4. Verify generated WMS URL"
-msgstr ""
+msgstr "4. Праверце створаны WMS URL"
 
 msgid "5. Enter name for this layer"
-msgstr ""
+msgstr "5. Увядзіце назву пласта"
 
 msgid "Show Bounds"
-msgstr ""
+msgstr "Паказаць межы"
 
 msgid "No bounding box was found for this layer."
-msgstr ""
+msgstr "Не знойдзены межы для гэтага пласта."
+
+msgid "1. Enter getCapabilities URL"
+msgstr "1. Калі ласка, увядзіце getCapabilities URL"
+
+msgid "2. Enter name for this layer"
+msgstr "2. Калі ласка, увядзіце назву пласта"
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr "Кэш {0}, агульны пазмер кэшу: {1} байт"
+
+msgid "Cache name"
+msgstr "Назва кэшу"
+
+msgid "Object Count"
+msgstr "Колькасць аб''ектаў"
 
 msgid "imagery fade"
-msgstr ""
+msgstr "зацямненне фону"
 
 msgid "Fade Color: "
-msgstr ""
+msgstr "Колер згасання: "
 
 msgid "Fade amount: "
-msgstr ""
+msgstr "Значэнне згасання: "
 
 msgid "Soft"
-msgstr ""
+msgstr "Згладзіць"
 
 msgid "Strong"
-msgstr ""
+msgstr "Павялічыць рэзкасць"
 
 msgid "Sharpen (requires layer re-add): "
-msgstr ""
+msgstr "Рэзкасць (патрабуе перазагрузкі пласта): "
+
+msgid "Tile cache directory: "
+msgstr "Каталог кэша квадратаў: "
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr "Максімальны памер дыскавага кэша (для здымка) у МБ: "
+
+msgid "Maximum number of objects in memory cache: "
+msgstr "Максімальная колькасць аб''ектаў у кэшы памяці: "
+
+msgid "Tiles zoom offset:"
+msgstr "Зрушэнне маштабу тайлаў:"
 
 msgid "Imagery Preferences"
-msgstr ""
+msgstr "Усталёўкі Здымка"
 
 msgid "Modify list of imagery layers displayed in the Imagery menu"
 msgstr ""
+"Кіраваць спіс пластоў падкладак, якія адлюстроўваюцца ў меню «Здымак»"
 
 msgid "Common Settings"
-msgstr ""
+msgstr "Агульныя налады"
 
 msgid "WMS Settings"
-msgstr ""
+msgstr "Налады WMS"
 
 msgid "TMS Settings"
-msgstr ""
+msgstr "Налады TMS"
 
 msgid "Imagery providers"
-msgstr ""
+msgstr "Пастаўшчыкі падкладак"
 
 msgid "Offset bookmarks"
-msgstr ""
+msgstr "Закладкі зрушэнняў"
+
+msgid "Cache contents"
+msgstr "Змесціва кэша"
 
 msgid "Imagery Background: Default"
-msgstr ""
+msgstr "Падкладка: па змаўчанні"
 
 msgid "Available default entries:"
-msgstr ""
+msgstr "Даступныя па змаўчанні:"
 
 msgid "Selected entries:"
-msgstr ""
+msgstr "Абраныя:"
 
 msgid "Add a new {0} entry by entering the URL"
-msgstr ""
+msgstr "Дадайце новую {0} падкладку, паказаўшы URL"
 
 msgid "Remove entry"
-msgstr ""
+msgstr "Выдаліць запіс"
 
 msgid "copy selected defaults"
-msgstr ""
+msgstr "скапіяваць абраныя з даступных па змаўчанні"
 
 msgid "Please select at least one row to copy."
-msgstr ""
+msgstr "Калі ласка, абярыце, хоць бы адзін радок для капіявання."
 
 msgid "reload defaults"
-msgstr ""
+msgstr "перазагрузіць даступныя па змаўчанні"
 
 msgid "Menu Name"
-msgstr ""
+msgstr "Назва меню"
 
 msgid "Imagery URL"
-msgstr ""
+msgstr "URL падкладкі"
 
 msgid "Menu Name (Default)"
-msgstr ""
+msgstr "Імя пункта меню (па змаўчанні)"
 
 msgid "Imagery URL (Default)"
-msgstr ""
+msgstr "URL падкладкі (па змаўчанні)"
 
 msgid "EULA license URL not available: {0}"
-msgstr ""
+msgstr "URL ліцэнзіі EULA не даступны: {0}"
 
 msgid "Malformed URL for the EULA licence: {0}"
-msgstr ""
-
-msgid "Projection"
-msgstr ""
+msgstr "URL ліцэнзіі EULA скажоны: {0}"
 
 msgid "Layer"
-msgstr ""
+msgstr "Узровень"
 
 msgid "Easting"
-msgstr ""
+msgstr "На ўсход"
 
 msgid "Northing"
-msgstr ""
+msgstr "На поўнач"
 
 msgid "Auto zoom by default: "
-msgstr ""
+msgstr "Аўтамаштабаванне па змаўчанні: "
 
 msgid "Autoload tiles by default: "
-msgstr ""
+msgstr "Аўтазагрузка квадратаў: "
 
 msgid "Min. zoom level: "
-msgstr ""
+msgstr "Мін. маштаб: "
 
 msgid "Max. zoom level: "
-msgstr ""
+msgstr "Макс. маштаб: "
 
 msgid "Add to slippymap chooser: "
-msgstr ""
-
-msgid "Tile cache directory: "
-msgstr ""
+msgstr "Дадаць у меню хуткай карты "
 
 msgid "Maximum concurrent downloads: "
-msgstr ""
+msgstr "Макс. лік адначасовых загрузак: "
 
 msgid "Maximum concurrent downloads per host: "
-msgstr ""
-
-msgid "Maximum elements in disk cache: "
-msgstr ""
+msgstr "Макс. колькасць адначасовых загрузак з хаста: "
 
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
-
-msgid "Downloader:"
-msgstr ""
+"Гэты пласт не падтрымлівае ніводнай праекцыі JOSM,\n"
+"вы не можаце яго выкарыстоўваць. Гэта паведамленне больш паказана не будзе."
 
 msgid "Simultaneous connections:"
-msgstr ""
-
-msgid "Overlap tiles"
-msgstr ""
+msgstr "Адначасовыя падлучэнні:"
 
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
-msgstr ""
+msgid "Tile size:"
+msgstr "Памер квадрата:"
 
 msgid "Auto save enabled"
-msgstr ""
+msgstr "Аўтаматычнае захаванне ўключана"
 
 msgid "Auto save interval (seconds)"
-msgstr ""
+msgstr "Перыяд аўтазахавання (у секундах)"
 
 msgid "Default value: {0}"
-msgstr ""
+msgstr "Значэнне па змаўчанні: {0}"
 
 msgid "Auto saved files per layer"
-msgstr ""
+msgstr "Рэзервовых копій для кожнага пласта"
 
 msgid ""
 "<i>(Autosave stores the changed data layers in periodic intervals. The "
 "backups are saved in JOSM''s preference folder. In case of a crash, JOSM "
 "tries to recover the unsaved changes on next start.)</i>"
 msgstr ""
+"<i>(Аўта-захаванне перыядычна капіюе змененыя дадзеныя для кожнага пласта. "
+"Рэзервовыя копіі захоўваюцца ў тэчцы JOSM. У выпадку збою, JOSM спрабуе "
+"аднавіць не захаваныя змены пры наступным запуску.)</i>"
 
 msgid "Keep backup files when saving data layers"
-msgstr ""
+msgstr "Не выдаляць файлы рэзервовых копій пры захаванні слаёў дадзеных"
 
 msgid "When saving, keep backup files ending with a ~"
 msgstr ""
+"Пры захаванні, пакідаць рэзервовыя копіі файлаў (у канцы назвы ставіцца ~)"
 
 msgid ""
 "<i>(JOSM can keep a backup file when saving data layers. It appends ''~'' to "
 "the file name and saves it in the same folder.)</i>"
 msgstr ""
+"<i>(JOSM можа не выдаляць файлы рэзервовых копій пры захаванні слаёў "
+"дадзеных. Пры гэтым да імя файла дадаецца суфікс ''~'' і ён захоўваецца ў "
+"той жа тэчцы.)</i>"
 
 msgid "Notification at each save"
-msgstr ""
+msgstr "Апавяшчэнне пры кожным захаванні"
 
 msgid "When saving, display a small notification"
-msgstr ""
+msgstr "Пры захаванні паказваць маленькае апавяшчэнне"
 
 msgid "File backup"
-msgstr ""
+msgstr "Рэзервовае капіяванне"
 
 msgid "Configure whether to create backup files"
-msgstr ""
+msgstr "Пазначыць, ці будзеце вы ствараць рэзервовыя файлы"
 
 msgid "Enable built-in icon defaults"
-msgstr ""
+msgstr "Дазволіць прызначэнне піктаграм па змаўчанні"
 
 msgid "Available styles:"
-msgstr ""
+msgstr "Даступныя стылі:"
 
 msgid "Active styles:"
-msgstr ""
+msgstr "Актыўныя стылі:"
 
 msgid "Add a new style by entering filename or URL"
-msgstr ""
+msgstr "Дадаць стыль, паказаўшы імя файла або адрас"
 
 msgid "New style entry:"
-msgstr ""
+msgstr "Новы стыль:"
 
 msgid "Remove the selected styles from the list of active styles"
-msgstr ""
+msgstr "Выдаліць абраныя стылі са спісу актыўных стыляў"
 
 msgid "Edit the filename or URL for the selected active style"
-msgstr ""
+msgstr "Замяніць імя файла ці спасылку для абранага актыўнага стылю"
 
 msgid "Add the selected available styles to the list of active styles"
-msgstr ""
+msgstr "Дадаць вылучаныя даступныя стылі да спісу актыўных стыляў"
 
 msgid "Reloads the list of available styles from ''{0}''"
-msgstr ""
+msgstr "Запампаваць нанова спіс даступных стыляў з ''{0}''"
 
 msgid "Loading style sources from ''{0}''"
-msgstr ""
+msgstr "Спампоўка крыніц стыляў з ''{0}''"
 
 msgid ""
 "<html>Failed to load the list of style sources "
 "from<br>''{0}''.<br><br>Details (untranslated):<br>{1}</html>"
 msgstr ""
+"<html>Не атрымалася загрузіць спіс крыніц стыляў "
+"з<br>''{0}''.<br><br>Падрабязнасці (на ангел.):<br>{1}</html>"
 
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
+"Папярэджанне: няслушны фармат ці запіс у спісе стыляў ''{0}''. Атрымана "
+"''{1}''"
 
 msgid "JOSM default (MapCSS)"
-msgstr ""
+msgstr "Стандартны JOSM (MapCSS)"
 
 msgid ""
 "Internal style to be used as base for runtime switchable overlay styles"
 msgstr ""
+"Убудаваны стыль, які выкарыстоўваецца як базавы для падлучальных стыляў"
 
 msgid "Potlatch 2"
-msgstr ""
+msgstr "Potlatch 2"
 
 msgid "the main Potlatch 2 style"
-msgstr ""
+msgstr "Асноўны стыль Potlatch 2"
 
 msgid "Map Settings"
-msgstr ""
+msgstr "Налады карты"
 
 msgid "Settings for the map projection and data interpretation."
-msgstr ""
+msgstr "Параметры праекцыі карты і адлюстравання дадзеных"
 
 msgid "Could not read tagging preset source: {0}"
-msgstr ""
+msgstr "Не атрымалася прачытаць крыніцу нарыхтовак тэгаў: {0}"
 
 msgid ""
 "Could not read tagging preset source: {0}\n"
 "Do you want to keep it?"
 msgstr ""
+"Немагчыма прачытаць крыніцу нарыхтовак тэгаў: {0}\n"
+"Вы хочаце захаваць яе?"
 
 msgid "Could not read tagging preset source {0}"
-msgstr ""
+msgstr "Немагчыма прачытаць крыніцу нарыхтовак тэгаў {0}"
 
 msgid ""
 "<html>Tagging preset source {0} can be loaded but it contains errors. Do you "
 "really want to use it?<br><br><table width=600>Error is: [{1}:{2}] "
 "{3}</table></html>"
 msgstr ""
+"<html>Крыніца нарыхтовак тэгаў {0} можа быць загружана, але яна ўтрымлівае "
+"памылкі. Вы сапраўды хочаце выкарыстоўваць яе?<br><br><table "
+"width=600>Паведамленне пра памылку: [{1}:{2}] {3}</table></html>"
 
 msgid ""
 "<html>Unable to parse tagging preset source: {0}. Do you really want to use "
 "it?<br><br><table width=400>Error is: [{1}:{2}] {3}</table></html>"
 msgstr ""
+"<html>Разборка крыніцы нарыхтовак тэгаў не ўдалася: {0}. Вы ўсё роўна хочаце "
+"скарыстацца ёю?<br><br><table width=400>Паведамленне пра памылку: [{1}:{2}] "
+"{3}</table></html>"
 
 msgid ""
 "<html>Tagging preset source {0} can be loaded but it contains errors. Do you "
 "really want to use it?<br><br><table width=600>Error is: {1}</table></html>"
 msgstr ""
+"<html>Крыніца нарыхтовак тэгаў {0} можа быць загружана, але ўтрымлівае "
+"памылкі. Вы ўсё роўна хочаце выкарыстоўваць яе?<br><br><table "
+"width=600>Паведамленне пра памылку: {1}</table></html>"
 
 msgid ""
 "<html>Unable to parse tagging preset source: {0}. Do you really want to use "
 "it?<br><br><table width=600>Error is: {1}</table></html>"
 msgstr ""
+"<html>Разборка крыніцы нарыхтовак тэгаў не ўдалася: {0}. Вы ўсё роўна хочаце "
+"скарыстацца ёй?<br><br><table width=600>Паведамленне пра памылку: "
+"{1}</table></html>"
 
 msgid "Sort presets menu"
-msgstr ""
+msgstr "Сартаваць меню нарыхтовак"
 
 msgid "Tagging Presets"
-msgstr ""
+msgstr "Нарыхтоўкі тэгаў"
 
 msgid "Available presets:"
-msgstr ""
+msgstr "Даступныя нарыхтоўкі"
 
 msgid "Active presets:"
-msgstr ""
+msgstr "Актыўныя нарыхтоўкі:"
 
 msgid "Add a new preset by entering filename or URL"
-msgstr ""
+msgstr "Дадаць нарыхтоўку, паказаўшы імя файла ці адрас"
 
 msgid "New preset entry:"
-msgstr ""
+msgstr "Новая нарыхтоўка"
 
 msgid "Remove the selected presets from the list of active presets"
-msgstr ""
+msgstr "Выдаліць абраныя нарыхтоўкі са спісу актыўных нарыхтовак"
 
 msgid "Edit the filename or URL for the selected active preset"
-msgstr ""
+msgstr "Змяніць імя файла ці адрас абранай актыўнай нарыхтоўкі"
 
 msgid "Add the selected available presets to the list of active presets"
-msgstr ""
+msgstr "Дадаць абраныя даступныя нарыхтоўкі ў спіс актыўных нарыхтовак"
 
 msgid "Reloads the list of available presets from ''{0}''"
-msgstr ""
+msgstr "Запампаваць нанова спіс даступных нарыхтовак з \"{0}\""
 
 msgid "Loading preset sources from ''{0}''"
-msgstr ""
+msgstr "Загрузка крыніц нарыхтовак з ''{0}''"
 
 msgid ""
 "<html>Failed to load the list of preset sources "
 "from<br>''{0}''.<br><br>Details (untranslated):<br>{1}</html>"
 msgstr ""
+"<html>Памылка пры загрузцы спісу крыніц нарыхтовак "
+"з<br>''{0}''.<br><br>Падрабязнасці (без перакладу):<br>{1}</html>"
 
 msgid "Warning: illegal format of entry in preset list ''{0}''. Got ''{1}''"
 msgstr ""
+"Папярэджанне: няправільны фармат пункта ў спісе нарыхтовак ''{0}''. Атрымана "
+"''{1}''"
 
 msgid "Internal Preset"
-msgstr ""
+msgstr "Убудаваная нарыхтоўка"
 
 msgid "The default preset for JOSM"
-msgstr ""
+msgstr "Нарыхтоўка па змаўчанні для JOSM"
 
 msgid "Plugin bundled with JOSM"
-msgstr ""
+msgstr "Модуль з пастаўкі JOSM"
 
 msgid ""
 "Please click on <strong>Download list</strong> to download and display a "
 "list of available plugins."
 msgstr ""
+"Націсніце на кнопку <strong>Запампаваць спіс</strong>, каб запампаваць і "
+"паглядзець спіс даступных модуляў."
 
 msgid "Plugin {0} is still required by this plugin:"
 msgid_plural "Plugin {0} is still required by these {1} plugins:"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Модуль  {0} выкарыстоўваецца гэтым {1} модулем:"
+msgstr[1] "Модуль  {0} выкарыстоўваецца гэтымі {1}-мя модулямі:"
+msgstr[2] "Модуль  {0} выкарыстоўваецца гэтымі {1}-ю модулямі:"
 
 msgid "{0}: Version {1} (local: {2})"
-msgstr ""
+msgstr "{0}: Версія {1} (усталявана: {2})"
 
 msgid " (requires: {0})"
-msgstr ""
+msgstr " (патрабуецца: {0})"
 
 msgid "Configure available plugins."
-msgstr ""
+msgstr "Наладзіць даступныя модулі."
 
 msgid ""
 "The following plugin has been downloaded <strong>successfully</strong>:"
 msgid_plural ""
 "The following {0} plugins have been downloaded <strong>successfully</strong>:"
 msgstr[0] ""
+"Наступны {0} модуль быў запампаваны з сервера <strong>паспяхова</strong>:"
 msgstr[1] ""
+"Наступныя {0} модуля былі запампаваны з сервера <strong>паспяхова</strong>:"
+msgstr[2] ""
+"Наступныя {0} модуляў былі запампаваны з сервера <strong>паспяхова</strong>:"
 
 msgid "Downloading the following plugin has <strong>failed</strong>:"
 msgid_plural ""
 "Downloading the following {0} plugins has <strong>failed</strong>:"
 msgstr[0] ""
+"Спампоўка з сервера наступнага {0} модуля <strong>не атрымалася</strong>:"
 msgstr[1] ""
+"Спампоўка з сервера наступных {0} модуляў <strong>не атрымалася</strong>:"
+msgstr[2] ""
+"Спампоўка з сервера наступных {0} модуляў <strong>не атрымалася</strong>:"
 
 msgid "Please restart JOSM to activate the downloaded plugins."
-msgstr ""
+msgstr "Калі ласка, перазапусціце JOSM, каб актываваць загружаныя модулі."
 
 msgid "Update plugins"
-msgstr ""
+msgstr "Абнавіць модулі"
 
 msgid "Search:"
-msgstr ""
+msgstr "Шукаць:"
 
 msgid "Enter a search expression"
-msgstr ""
+msgstr "Увядзіце выраз для пошуку"
 
 msgid "Plugin update policy"
-msgstr ""
+msgstr "Палітыка абнаўлення модуля"
 
 msgid "Accept the new plugin sites and close the dialog"
-msgstr ""
+msgstr "Прыняць новыя сайты модуляў і зачыніць дыялог"
 
 msgid "Configure Plugin Sites"
-msgstr ""
+msgstr "Налада сайтаў модуляў"
 
 msgid "Download list"
-msgstr ""
+msgstr "Запампаваць спіс"
 
 msgid "Download the list of available plugins"
-msgstr ""
+msgstr "Запампаваць з сервера спіс даступных модуляў"
 
 msgid "Update the selected plugins"
-msgstr ""
+msgstr "Абнавіць вылучаныя модулі"
 
 msgid ""
 "All installed plugins are up to date. JOSM does not have to download newer "
 "versions."
 msgstr ""
+"Усе ўсталяваныя модулі найноўшыя. JOSM не будзе спрабаваць спампоўваць новыя "
+"версіі."
 
 msgid "Plugins up to date"
-msgstr ""
+msgstr "Усталяваныя модулі маюць самую апошнюю версію"
 
 msgid "Configure sites..."
-msgstr ""
+msgstr "Крыніцы модуляў..."
 
 msgid "Configure the list of sites where plugins are downloaded from"
-msgstr ""
+msgstr "Канфігураваць спіс сервераў, з якіх можна загрузіць модулі"
 
 msgid "Add JOSM Plugin description URL."
-msgstr ""
+msgstr "Дадаць спасылку на апісанне модуля JOSM."
 
 msgid "Enter URL"
-msgstr ""
+msgstr "Увесці спасылку"
 
 msgid "Please select an entry."
-msgstr ""
+msgstr "Калі ласка, абярыце запіс."
 
 msgid "Edit JOSM Plugin description URL."
-msgstr ""
+msgstr "Рэдагаваць спасылку на апісанне модуля JOSM."
 
 msgid "JOSM Plugin description URL"
-msgstr ""
+msgstr "Спасылка на апісанне модуля JOSM"
 
 msgid "Ask before updating"
-msgstr ""
+msgstr "Пытаць перад абнаўленнем"
 
 msgid "Always update without asking"
-msgstr ""
+msgstr "Заўсёды абнаўляць без запыту"
 
 msgid "Never update"
-msgstr ""
+msgstr "Не абнаўляць"
 
 msgid ""
 "Please decide whether JOSM shall automatically update active plugins at "
 "startup after an update of JOSM itself."
 msgstr ""
+"Калі ласка, вырашыце, ці трэба аўтаматычна абнаўляць усталяваныя модулі, "
+"пасля загрузкі новай версіі JOSM."
 
 msgid "Update interval (in days):"
-msgstr ""
+msgstr "Інтэрвал абнаўлення (у днях):"
 
 msgid ""
 "Please decide whether JOSM shall automatically update active plugins after a "
 "certain period of time."
 msgstr ""
+"Ці павінен JOSM аўтаматычна абнаўляць актыўныя модулі праз вызначаны перыяд "
+"часу?"
 
 msgid "By Code (EPSG)"
-msgstr ""
+msgstr "Па кодзе (EPSG)"
 
 msgid "Invalid projection configuration: {0}"
-msgstr ""
+msgstr "Няслушная канфігурацыя праекцыі: {0}"
 
 msgid "Projection configuration is valid."
-msgstr ""
+msgstr "Канфігурацыя праекцыі карэктная."
 
 msgid "Validate"
-msgstr ""
+msgstr "Праверыць"
 
 msgid "Parameter information..."
-msgstr ""
+msgstr "Інфармацыя пра параметры..."
 
 msgid "Parameter information"
-msgstr ""
+msgstr "Інфармацыя пра параметры"
 
 msgid "Projection name"
-msgstr ""
+msgstr "Назва праекцыі"
 
 msgid "Supported values:"
-msgstr ""
+msgstr "Падтрымоўваныя значэнні:"
 
 msgid "Projection parameters"
-msgstr ""
+msgstr "Параметры праекцыі"
 
 msgid "False easting and false northing"
-msgstr ""
+msgstr "Усходняе і паўночнае зрушэнне"
 
 msgid "Central meridian"
-msgstr ""
+msgstr "Цэнтральны мерыдыян"
 
 msgid "Scaling factor"
-msgstr ""
+msgstr "Каэфіцыент маштабавання"
 
 msgid "Ellipsoid name"
-msgstr ""
+msgstr "Назва эліпсоіда"
 
 msgid "Ellipsoid parameters"
-msgstr ""
+msgstr "Параметры эліпсоіда"
 
 msgid "Datum name"
-msgstr ""
+msgstr "Назва датума"
 
 msgid "3 or 7 term datum transform parameters"
-msgstr ""
+msgstr "3 ці 7 параметраў пераўтварэння датума"
 
 msgid "NTv2 grid file"
-msgstr ""
+msgstr "Файл сеткі NTv2"
 
 msgid "Built-in:"
-msgstr ""
+msgstr "Убудаваная:"
 
 msgid "Projection bounds (in degrees)"
-msgstr ""
+msgstr "Межы праекцыі (у градусах)"
 
 msgid "Sets the SRS=... parameter in the WMS request"
-msgstr ""
+msgstr "Усталёўвае параметр SRS=... у WMS-запыце"
 
 msgid "Gauß-Krüger"
-msgstr ""
+msgstr "Гаўс-Кругер"
 
 msgid "GK Zone"
-msgstr ""
+msgstr "Зона ГК"
 
 msgid "Gauß-Krüger Zone {0}"
-msgstr ""
+msgstr "Зона Гаўса-Кругера {0}"
 
 msgid "{0} ({1} to {2} degrees)"
-msgstr ""
+msgstr "{0} ({1} на {2} град.)"
 
 msgid "Lambert CC9 Zone (France)"
-msgstr ""
+msgstr "Lambert CC9 Zone (Францыя)"
 
 msgid "Lambert CC Zone"
-msgstr ""
+msgstr "Зона Lambert CC"
 
 msgid "{0} (Corsica)"
-msgstr ""
+msgstr "{0} (Корсіка)"
 
 msgid "Lambert 4 Zones (France)"
-msgstr ""
+msgstr "Lambert 4 Zones (Францыя)"
 
 msgid "WGS84 Geographic"
-msgstr ""
+msgstr "Геаграфічная WGS84"
 
 msgid "Belgian Lambert 1972"
-msgstr ""
+msgstr "Lambert 1972 (Бельгія)"
 
 msgid "Belgian Lambert 2008"
-msgstr ""
+msgstr "Lambert 2008 (Бельгія)"
 
 msgid "Lambert Zone (Estonia)"
-msgstr ""
+msgstr "Lambert Зона (Эстонія)"
 
 msgid "Lambert 93 (France)"
-msgstr ""
+msgstr "Lambert 93 (Францыя)"
 
 msgid "LKS-92 (Latvia TM)"
-msgstr ""
+msgstr "LKS-92 (TM Латвіі)"
 
 msgid "SWEREF99 13 30 / EPSG:3008 (Sweden)"
-msgstr ""
+msgstr "SWEREF99 13 30 / EPSG:3008 (Швецыя)"
 
 msgid "Projection method"
-msgstr ""
+msgstr "Тып праекцыі"
 
 msgid "Projection code"
-msgstr ""
+msgstr "Код праекцыі"
 
 msgid "Display coordinates as"
-msgstr ""
+msgstr "Адлюстроўваць каардынаты як"
 
 msgid "System of measurement"
-msgstr ""
+msgstr "Сістэма вымярэння"
 
 msgid "Map Projection"
-msgstr ""
+msgstr "Картаграфічная праекцыя"
 
 msgid "The projection {0} could not be activated. Using Mercator"
-msgstr ""
+msgstr "Немагчыма актываваць праекцыю {0}. Выкарыстоўваецца Меркатар"
 
 msgid "PUWG 1992 (Poland)"
-msgstr ""
+msgstr "PUWG 1992 (Польшча)"
 
 msgid "PUWG 2000 Zone {0} (Poland)"
-msgstr ""
+msgstr "Зона PUWG 2000 {0} (Польшча)"
 
 msgid "PUWG (Poland)"
-msgstr ""
+msgstr "PUWG (Польшча)"
 
 msgid "PUWG Zone"
-msgstr ""
+msgstr "Зона PUWG"
 
 msgid "Swiss Grid (Switzerland)"
-msgstr ""
+msgstr "Швейцарская праекцыя"
 
 msgid "<i>CH1903 / LV03 (without local corrections)</i>"
-msgstr ""
+msgstr "<i>CH1903 / LV03 (без лакальных карэкцый)</i>"
 
 msgid "Guadeloupe Fort-Marigot 1949"
-msgstr ""
+msgstr "Guadeloupe Fort-Marigot 1949"
 
 msgid "Guadeloupe Ste-Anne 1948"
-msgstr ""
+msgstr "Guadeloupe Ste-Anne 1948"
 
 msgid "Martinique Fort Desaix 1952"
-msgstr ""
+msgstr "Martinique Fort Desaix 1952"
 
 msgid "Reunion RGR92"
-msgstr ""
+msgstr "Reunion RGR92"
 
 msgid "Guyane RGFG95"
-msgstr ""
+msgstr "Гвіяна RGFG95"
 
 msgid "UTM France (DOM)"
-msgstr ""
+msgstr "Францыя UTM (DOM)"
 
 msgid "UTM Geodesic system"
-msgstr ""
+msgstr "Сістэма каардынат UTM"
 
 msgid "UTM"
-msgstr ""
+msgstr "UTM"
 
 msgid "UTM Zone"
-msgstr ""
+msgstr "Зона UTM"
 
 msgid "North"
-msgstr ""
+msgstr "Поўнач"
 
 msgid "South"
-msgstr ""
+msgstr "Поўдзень"
 
 msgid "Hemisphere"
-msgstr ""
+msgstr "Паўшар’яў"
 
 msgid "Remote Control"
-msgstr ""
+msgstr "Дыстанцыйнае кіраванне"
 
 msgid "Settings for the remote control feature."
-msgstr ""
+msgstr "Налады Дыстацыйнага кіравання"
 
 msgid "Download objects to new layer"
-msgstr ""
+msgstr "Запампаваць аб’екты на новы пласт"
 
 msgid "Confirm all Remote Control actions manually"
-msgstr ""
+msgstr "Пацвярджаць ўсе дзеянні Дыстацыйнага кіравання ўручную"
 
 msgid ""
 "Allows JOSM to be controlled from other applications, e.g. from a web "
 "browser."
 msgstr ""
+"Дазваляе кіраванне JOSM з іншых прыкладанняў, напрыклад, вэб-браўзара."
 
 msgid ""
 "JOSM will always listen at <b>port {0}</b> (http) and <b>port {1}</b> "
 "(https) on localhost.<br>These ports are not configurable because they are "
 "referenced by external applications talking to JOSM."
 msgstr ""
+"JOSM заўсёды будзе чакаць падключэння на <b>порце {0}</b> (http) і <b>порце "
+"{1}</b> (https) на localhost.<br>Гэтыя нумары партоў нельга змяніць, бо яны "
+"выкарыстоўваюцца вонкавымі прыкладаннямі для сувязі з JOSM."
 
 msgid "Enable remote control"
-msgstr ""
+msgstr "Уключыць дыстанцыйнае кіраванне"
 
 msgid "Enable HTTPS support"
-msgstr ""
+msgstr "Уключыць падтрымку HTTPS"
 
 msgid "Install..."
-msgstr ""
+msgstr "Усталяваць..."
 
 msgid "Uninstall..."
-msgstr ""
+msgstr "Выдаліць..."
 
 msgid "Install JOSM localhost certificate to system/browser root keystores"
 msgstr ""
+"Усталяваць localhost-сертыфікат JOSM у каранёвыя сховішчы ключоў "
+"сістэмы/браўзара"
 
 msgid ""
 "Uninstall JOSM localhost certificate from system/browser root keystores"
 msgstr ""
+"Выдаліць localhost-сертыфікат JOSM з каранёвых сховішчаў ключоў "
+"сістэмы/браўзэра"
 
 msgid "Certificate:"
-msgstr ""
+msgstr "Сертыфікат:"
 
 msgid "Certificate has been successfully installed."
-msgstr ""
+msgstr "Сертыфікат паспяхова ўсталяваны."
 
 msgid "Certificate is already installed. Nothing to do."
-msgstr ""
+msgstr "Сертыфікат ужо ўсталяваны. Ніякіх дзеянняў не патрабуецца."
 
 msgid "Removing certificate {0} from root keystore."
-msgstr ""
+msgstr "Выдаленне сертыфіката {0} з каранёвага сховішча ключоў."
 
 msgid "Certificate has been successfully uninstalled."
-msgstr ""
+msgstr "Сертыфікат паспяхова выдалены."
 
 msgid "Certificate is not installed. Nothing to do."
-msgstr ""
+msgstr "Сертыфікат не ўсталяваны. Ніякіх дзеянняў не патрабуецца."
 
 msgid "Permitted actions:"
-msgstr ""
+msgstr "Дазволеныя дзеянні:"
 
 msgid "Testing OSM API URL ''{0}''"
-msgstr ""
+msgstr "Тэставанне URL OSM API ''{0}''"
 
 msgid ""
 "<html>''{0}'' is not a valid OSM API URL.<br>Please check the spelling and "
 "validate again.</html>"
 msgstr ""
+"<html>''{0}'' з’яўляецца няслушным URL OSM API.<br>Калі ласка, праверце "
+"правільнасць напісання і паспрабуйце яшчэ раз.</html>"
 
 msgid "Invalid API URL"
-msgstr ""
+msgstr "Няслушны URL API"
 
 msgid ""
 "<html>Failed to build URL ''{0}'' for validating the OSM API "
 "server.<br>Please check the spelling of ''{1}'' and validate again.</html>"
 msgstr ""
+"<html>Не атрымалася пабудаваць URL ''{0}'' для адзнакі сервера OSM "
+"API.<br>Калі ласка, праверце напісанне ''{1}'' і паспрабуйце зноў.</html>"
 
 msgid ""
 "<html>Failed to connect to the URL ''{0}''.<br>Please check the spelling of "
 "''{1}'' and your Internet connection and validate again.</html>"
 msgstr ""
+"<html>Не атрымалася перайсці па URL ''{0}''.<br>Калі ласка, праверце "
+"правільнасць напісання ''{1}'', а таксама ваша інтэрнэт-злучэнне, а затым "
+"паспрабуйце зноў.</html>"
 
 msgid "Connection to API failed"
-msgstr ""
+msgstr "Злучэнне з API не атрымалася"
 
 msgid ""
 "<html>Failed to retrieve a list of changesets from the OSM API server "
 "at<br>''{1}''. The server responded with the return code {0} instead of "
 "200.<br>Please check the spelling of ''{1}'' and validate again.</html>"
 msgstr ""
+"<html>Не атрымалася атрымаць спіс пакетаў правак з сервера OSM API "
+"<br>''{1}''. Сервер вярнуў код {0} замест кода 200.<br>Калі ласка, праверце "
+"правільнасць напісання ''{1}'' і паспрабуйце зноў.</html>"
 
 msgid ""
 "<html>The OSM API server at ''{0}'' did not return a valid response.<br>It "
 "is likely that ''{0}'' is not an OSM API server.<br>Please check the "
 "spelling of ''{0}'' and validate again.</html>"
 msgstr ""
+"<html>Сервер OSM API ''{0}'' вярнуў няправільны адказ.<br>Падобна, што "
+"''{0}'' гэта не сервер OSM API.<br>Калі ласка, праверце правільнасць "
+"напісання ''{0}'' і паспрабуйце зноў.</html>"
 
 msgid "Authentication"
-msgstr ""
+msgstr "Аўтэнтыфікацыя"
 
 msgid "Configure your identity and how to authenticate at the OSM server"
 msgstr ""
+"Задаць вашы ўліковыя дадзеныя і вызначыць спосаб аўтэнтыфікацыі на серверы "
+"OSM"
 
 msgid "Use Basic Authentication"
-msgstr ""
+msgstr "Выкарыстоўваць звычайную аўтэнтыфікацыю"
 
 msgid ""
 "Select to use HTTP basic authentication with your OSM username and password"
 msgstr ""
+"Выкарыстоўваць простую HTTP аўтэнтыфікацыю, выкарыстоўваючы вашыя імя і "
+"пароль OSM"
 
 msgid "Use OAuth"
-msgstr ""
+msgstr "OAuth (Адкрыты пратакол аўтарызацыі)"
 
 msgid "Select to use OAuth as authentication mechanism"
-msgstr ""
+msgstr "Выкарыстоўваць алгарытм OAuth (для аўтэнтыфікацыі)"
 
 msgid ""
 "Unsupported value in preference ''{0}'', got ''{1}''. Using authentication "
 "method ''Basic Authentication''."
 msgstr ""
+"Не падтрымоўваемае значэнне ў наладзе ''{0}'', роўнае ''{1}''. "
+"Выкарыстоўваецца метад ''Простая аўтэнтыфікацыя''."
 
 msgid "OSM username:"
-msgstr ""
+msgstr "OSM імя карыстальніка:"
 
 msgid "OSM password:"
-msgstr ""
+msgstr "OSM пароль:"
 
 msgid "Failed to retrieve OSM credentials from credential manager."
 msgstr ""
+"Не атрымалася атрымаць уліковыя дадзеныя OSM з мэнэджара ўліковых дадзеных."
 
 msgid "Current credential manager is of type ''{0}''"
-msgstr ""
+msgstr "Бягучы мэнэджар уліковых дадзеных мае тып ''{0}''"
 
 msgid "Failed to save OSM credentials to credential manager."
 msgstr ""
+"Не атрымалася захаваць уліковыя дадзеныя OSM у мэнэджару ўліковых дадзеных."
 
 msgid "Periodically check for new messages"
-msgstr ""
+msgstr "Перыядычна правяраць наяўнасць новых паведамленняў"
 
 msgid "Check interval (minutes):"
-msgstr ""
+msgstr "Інтэрвал праверкі (хвіліны):"
 
 msgid "Max age for closed notes (days):"
-msgstr ""
+msgstr "Тэрмін выкарыстання зачыненых нататак (дзён):"
 
 msgid ""
 "Specifies the number of days a note needs to be closed to no longer be "
 "downloaded"
 msgstr ""
+"Паказвае, колькі дзён павінна прайсці пасля зачынення нататкі, каб яна больш "
+"не спампоўвалася"
 
 msgid "Failed to retrieve OAuth Access Token from credential manager"
 msgstr ""
+"Не атрымалася атрымаць токен доступу OAuth з мэнэджара ўліковых дадзеных"
 
 msgid "Failed to store OAuth Access Token to credentials manager"
 msgstr ""
+"Не атрымалася захаваць токен доступу OAuth у мэнэджару ўліковых дадзеных"
 
 msgid ""
 "You do not have an Access Token yet to access the OSM server using OAuth. "
 "Please authorize first."
 msgstr ""
+"У Вас яшчэ няма маркера доступу, каб атрымаць доступ да сервера OSM з "
+"дапамогай OAuth. Калі ласка, спачатку аўтарызуйцеся."
 
 msgid ""
 "You already have an Access Token to access the OSM server using OAuth."
 msgstr ""
+"У Вас ужо ёсць маркер доступу для доступу да сервера OSM з дапамогай OAuth."
 
 msgid "Save to preferences"
-msgstr ""
+msgstr "Захаваць у наладах"
 
 msgid "Click to step through the OAuth authorization process"
-msgstr ""
+msgstr "Націсніце, каб прайсці пакрокавы працэс аўтарызацыі OAuth"
 
 msgid "New Access Token"
-msgstr ""
+msgstr "Новы маркер доступу"
 
 msgid ""
 "Click to step through the OAuth authorization process and generate a new "
 "Access Token"
 msgstr ""
+"Націсніце, каб прайсці працэс аўтарызацыі OAuth і стварыць новы маркер "
+"доступу"
 
 msgid "Click test access to the OSM server with the current access token"
 msgstr ""
+"Націсніце, каб праверыць доступ да сервера OSM з бягучым маркерам доступу"
 
 msgid "<html>Use the default OSM server URL (<strong>{0}</strong>)</html>"
 msgstr ""
+"<html>Выкарыстоўваць сервер OSM па змаўчанні (<strong>{0}</strong>)</html>"
 
 msgid "Test the API URL"
-msgstr ""
+msgstr "Тэставаць URL API"
 
 msgid "The API URL is valid."
-msgstr ""
+msgstr "URL API дакладны."
 
 msgid "Validation failed. The API URL seems to be invalid."
-msgstr ""
+msgstr "Праверка не прайшла. URL API няслушны?"
 
 msgid "OSM API URL must not be empty. Please enter the OSM API URL."
-msgstr ""
+msgstr "URL OSM API не павінен быць пусты. Калі ласка, увядзіце URL OSM API."
 
 msgid "The current value is not a valid URL"
-msgstr ""
+msgstr "Бягучае значэнне гэта няслушны URL"
 
 msgid "Please enter the OSM API URL."
-msgstr ""
+msgstr "Калі ласка, увядзіце URL OSM API."
 
 msgid "Proxy settings"
-msgstr ""
+msgstr "Налады проксі-сервера"
 
 msgid "Configure whether to use a proxy server"
-msgstr ""
+msgstr "Паказаць, ці выкарыстоўваеце вы проксі-сервер"
 
 msgid "Host:"
-msgstr ""
+msgstr "Сервер:"
 
 msgctxt "server"
 msgid "Port:"
-msgstr ""
+msgstr "Порт:"
 
 msgid ""
 "Please enter a username and a password if your proxy requires authentication."
 msgstr ""
+"Калі ласка, увядзіце імя карыстальніка і пароль, калі ваш проксі-сервер "
+"патрабуе аўтэнтыфікацыю"
 
 msgid "Password:"
-msgstr ""
+msgstr "Пароль:"
 
 msgid "No proxy"
-msgstr ""
+msgstr "Няма проксі"
 
 msgid "Use standard system settings"
-msgstr ""
+msgstr "Выкарыстоўваць стандартныя налады сістэмы"
 
 msgid ""
 "Use standard system settings (disabled. Start JOSM with <tt>-"
 "Djava.net.useSystemProxies=true</tt> to enable)"
 msgstr ""
+"Выкарыстоўваць стандартныя сістэмныя налады (Заблакавана. Запусціце JOSM з "
+"параметрам <tt>-Djava.net.useSystemProxies=true</tt> для разблакоўкі)"
 
 msgid "Manually configure a HTTP proxy"
-msgstr ""
+msgstr "Уласная канфігурацыя HTTP проксі"
 
 msgid "Use a SOCKS proxy"
-msgstr ""
+msgstr "Выкарыстоўваць SOCKS проксі-сервер"
 
 msgid ""
 "JOSM is configured to use proxies from the system setting, but the JVM is "
 "not configured to retrieve them. Resetting preferences to ''No proxy''"
 msgstr ""
+"JOSM наладжаны на выкарыстанне проксі са стандартных сістэмных налад, але "
+"JVM не наладжана на іх атрыманне. Скід да значэння ''Няма проксі''"
 
 msgid "Connection Settings"
-msgstr ""
+msgstr "Параметры злучэння"
 
 msgid "Connection Settings for the OSM server."
-msgstr ""
+msgstr "Параметры злучэння з серверам OSM."
 
 msgid "Action"
-msgstr ""
+msgstr "Дзеянне"
 
 msgid "Shortcut"
-msgstr ""
+msgstr "Гарачая клавіша"
 
 msgid "Shortcut Background: User"
-msgstr ""
+msgstr "Гарачыя клавішы: карыстацкае"
 
 msgid "Shortcut Background: Modified"
-msgstr ""
+msgstr "Гарачыя клавішы: зменена"
 
 msgid "Use default"
-msgstr ""
+msgstr "Выкарыстоўваць значэнне па змаўчанні"
 
 msgid "Key:"
-msgstr ""
+msgstr "Клавіша:"
 
 msgid "Attention: Use real keyboard keys only!"
-msgstr ""
+msgstr "Увага: Выкарыстоўвайце толькі прысутныя на клавіятуры клавішы!"
 
 msgid "Keyboard Shortcuts"
-msgstr ""
+msgstr "Гарачыя клавішы"
 
 msgid "Changing keyboard shortcuts manually."
-msgstr ""
+msgstr "Змяніць спалучэнні клавіш уручную"
 
 msgid "Data validator"
-msgstr ""
+msgstr "Праверка дадзеных"
 
 msgid ""
 "An OSM data validator that checks for common errors made by users and editor "
 "programs."
 msgstr ""
+"Модуль праверкі дадзеных OSM на прадмет памылак, часта ўносных "
+"карыстальнікамі і праграмамі."
 
 msgid "Available rules:"
-msgstr ""
+msgstr "Даступныя правілы:"
 
 msgid "Active rules:"
-msgstr ""
+msgstr "Актыўныя правілы:"
 
 msgid "Add a new rule by entering filename or URL"
-msgstr ""
+msgstr "Дадаць новае правіла, увёўшы імя файла або URL"
 
 msgid "New rule entry:"
-msgstr ""
+msgstr "Новае правіла:"
 
 msgid "Remove the selected rules from the list of active rules"
-msgstr ""
+msgstr "Выдаліць вылучаныя правілы са спісу актыўных правіл"
 
 msgid "Edit the filename or URL for the selected active rule"
-msgstr ""
+msgstr "Змяніць імя файла ці URL для вылучанага актыўнага правіла"
 
 msgid "Add the selected available rules to the list of active rules"
-msgstr ""
+msgstr "Дадаць вылучаныя правілы ў спіс актыўных правіл"
 
 msgid "Reloads the list of available rules from ''{0}''"
-msgstr ""
+msgstr "Перазагружае спіс даступных правіл з ''{0}''"
 
 msgid "Loading rule sources from ''{0}''"
-msgstr ""
+msgstr "Загрузка крыніц правіл з ''{0}''"
 
 msgid ""
 "<html>Failed to load the list of rule sources "
 "from<br>''{0}''.<br><br>Details (untranslated):<br>{1}</html>"
 msgstr ""
+"<html>Не атрымалася загрузіць спіс крыніц правіл "
+"з<br>''{0}''.<br><br>Падрабязнасці (без перакладу):<br>{1}</html>"
 
 msgid "Warning: illegal format of entry in rule list ''{0}''. Got ''{1}''"
 msgstr ""
+"Папярэджанне: недапушчальны фармат запісу ў спісе правіл ''{0}''. Атрымана "
+"''{1}''"
 
 msgid "Checks for errors on addresses"
-msgstr ""
+msgstr "Праверка памылак у адрасах"
 
 msgid "Tag combinations"
-msgstr ""
+msgstr "Камбінацыя тэгаў"
 
 msgid "Checks for missing tag or suspicious combinations"
-msgstr ""
+msgstr "Праверка на адсутнасць ці сумніўныя камбінацыі тэгаў"
 
 msgid "Deprecated features"
-msgstr ""
+msgstr "Састарэлыя тэгі"
 
 msgid "Checks for deprecated features"
-msgstr ""
+msgstr "Праверка на наяўнасць састарэлых тэгаў"
 
 msgid "Geometry"
-msgstr ""
+msgstr "Геаметрыя"
 
 msgid "Checks for geometry errors"
-msgstr ""
+msgstr "Праверка на памылкі геаметрыі"
 
 msgid "Checks for errors on highways"
-msgstr ""
+msgstr "Праверка на памылкі дарог"
 
 msgid "Multiple values"
-msgstr ""
+msgstr "Множныя значэнні"
 
 msgid "Checks for wrong multiple values"
-msgstr ""
+msgstr "Праверка на хібнае прысваенне некалькіх значэнняў аднаму ключу"
 
 msgid "Numeric values"
-msgstr ""
+msgstr "Лікавыя значэнні"
 
 msgid "Checks for wrong numeric values"
-msgstr ""
+msgstr "Праверка на няправільныя лікавыя значэнні"
 
 msgid "Power"
-msgstr ""
+msgstr "Электраэнергія"
 
 msgid "Checks for errors on power infrastructures"
-msgstr ""
+msgstr "Праверка на памылкі інфраструктуры электразабеспячэння"
 
 msgid "Religion"
-msgstr ""
+msgstr "Рэлігія"
 
 msgid "Checks for errors on religious objects"
-msgstr ""
+msgstr "Праверка на памылкі рэлігійных аб’ектаў"
 
 msgid "Checks for errors on relations"
-msgstr ""
+msgstr "Праверка памылак у адносінах"
 
 msgid "Unnecessary tags"
-msgstr ""
+msgstr "Непатрэбныя тэгі"
 
 msgid "Checks for unnecessary tags"
-msgstr ""
+msgstr "Праверка наяўнасці непатрэбных тэгаў"
 
 msgid "Wikipedia"
-msgstr ""
+msgstr "Вікіпедыя"
 
 msgid "Checks for wrong wikipedia tags"
-msgstr ""
+msgstr "Праверка няправільных тэгаў Вікіпедыі"
 
 msgid "Tag checker rules"
-msgstr ""
+msgstr "Правілы праверкі тэгаў"
 
 msgid "Choose Tag checker rules to enable"
-msgstr ""
+msgstr "Абраць правілы праверкі тэгаў для ўключэння"
 
 msgid "Use ignore list."
-msgstr ""
+msgstr "Выкарыстоўваць спіс ігнаравання"
 
 msgid "Use the ignore list to suppress warnings."
-msgstr ""
+msgstr "Выкарыстоўваць спіс ігнаравання для задушэння папярэджанняў."
 
 msgid "Use error layer."
-msgstr ""
+msgstr "Выкарыстоўваць пласт памылак"
 
 msgid "Use the error layer to display problematic elements."
-msgstr ""
+msgstr "Выкарыстоўваць пласт памылак для адлюстравання праблемных элементаў"
 
 msgid "Show informational level."
-msgstr ""
+msgstr "Паказваць інфармацыйны ўзровень"
 
 msgid "Show the informational tests."
-msgstr ""
+msgstr "Паказваць інфармацыйныя праверкі"
 
 msgid "Show informational level on upload."
-msgstr ""
+msgstr "Паказваць інфармацыйны ўзровень пры перадачы на сервер"
 
 msgid "Show the informational tests in the upload check windows."
-msgstr ""
+msgstr "Паказваць інфармацыйныя праверкі перад перадачай на сервер"
 
 msgid "On demand"
-msgstr ""
+msgstr "Па патрабаванні"
 
 msgid "On upload"
-msgstr ""
+msgstr "Пры перадачы на сервер"
 
 msgid "Tests"
-msgstr ""
+msgstr "Тэсты"
 
 msgid "Choose tests to enable"
-msgstr ""
+msgstr "Абраць тэсты для ўключэння"
 
 msgid "multiple"
-msgstr ""
+msgstr "некалькі"
 
 msgid "Remove old keys from up to {0} object"
 msgid_plural "Remove old keys from up to {0} objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Выдаліць старыя ключы з  {0} аб’екта"
+msgstr[1] "Выдаліць старыя ключы з  {0} аб’ектаў"
+msgstr[2] "Выдаліць старыя ключы з  {0} аб’ектаў"
 
 msgid "Delete the selection in the tag table"
-msgstr ""
+msgstr "Выдаліць адзначанае ў табліцы тэгаў"
 
 msgid "Add a new tag"
-msgstr ""
+msgstr "Дадаць новы тэг"
 
 msgid "Paste tags from buffer"
-msgstr ""
+msgstr "Уставіць тэгі з буфера"
 
 msgid "Use preset ''{0}'' of group ''{1}''"
-msgstr ""
+msgstr "Выкарыстоўваць нарыхтоўку ''{0}'' з групы ''{1}''"
 
 msgid "Use preset ''{0}''"
-msgstr ""
+msgstr "Выкарыстоўваць нарыхтоўку ''{0}''"
 
 msgid "Elements of type {0} are supported."
-msgstr ""
+msgstr "Падтрымліваецца элемент тыпу {0}."
 
 msgid "Edit also …"
-msgstr ""
+msgstr "Змяніць таксама..."
 
 msgid "Apply Preset"
-msgstr ""
+msgstr "Ужыць нарыхтоўку"
 
 msgid "New relation"
+msgstr "Новыя адносіны"
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr "Немагчыма ўжыць нарыхтоўку <i>{0}</i>, бо нічога не вылучана!"
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
 msgstr ""
 
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Змяняем {0} аб''ект"
+msgstr[1] "Змяняем {0} аб''екты"
+msgstr[2] "Змяняем {0} аб''ектаў"
 
 msgid "Nothing selected!"
-msgstr ""
+msgstr "Нічога не вылучана!"
 
 msgid "Selection unsuitable!"
-msgstr ""
+msgstr "Абраны непадыходныя аб’екты!"
 
 msgid "Change Tags"
-msgstr ""
+msgstr "Змяніць тэгі"
 
 msgid "Add or remove toolbar button"
-msgstr ""
+msgstr "Дадаць ці выдаліць кнопку панэлі прылад"
 
 msgid "Unknown requisite: {0}"
-msgstr ""
+msgstr "Невядомы запыт: {0}"
 
 msgid "Illegal member expression: {0}"
-msgstr ""
+msgstr "Недапушчальны выраз у {0}"
 
 msgid "More information about this feature"
-msgstr ""
+msgstr "Падрабязней"
 
 msgid "Available roles"
-msgstr ""
+msgstr "Даступныя ролі"
 
 msgid "role"
-msgstr ""
+msgstr "роля"
 
 msgid "count"
-msgstr ""
+msgstr "колькасць"
 
 msgid "elements"
-msgstr ""
+msgstr "элементы"
 
 msgid "Optional Attributes:"
-msgstr ""
+msgstr "Дадатковыя атрыбуты:"
 
 msgid "Select auto-increment of {0} for this field"
-msgstr ""
+msgstr "Выберыце аўта-павелічэнне {0} для гэтага поля"
 
 msgid "Cancel auto-increment for this field"
-msgstr ""
+msgstr "Адмяніць аўта-павелічэнне для гэтага поля"
 
 msgid "{0}:"
-msgstr ""
+msgstr "{0}:"
 
 msgid ""
 "Warning in tagging preset \"{0}-{1}\": Ignoring ''{2}'' attribute as ''{3}'' "
 "elements are given."
 msgstr ""
+"Папярэджанне: Нарыхтоўка тэгаў \"{0}-{1}\": Ігнаруемы атрыбут ''{2}'' у "
+"элементах ''{3}''."
 
 msgid ""
 "Broken tagging preset \"{0}-{1}\" - Java method given in ''values_from'' is "
 "not \"{2}\""
 msgstr ""
+"Пашкоджаная нарыхтоўка тэгаў \"{0}-{1}\" - Java метад зададзены ў "
+"''values_from'' не \"{2}\""
 
 msgid ""
 "Broken tagging preset \"{0}-{1}\" - Java method given in ''values_from'' "
 "threw {2} ({3})"
 msgstr ""
+"Пашкоджаная нарыхтоўка тэгаў \"{0}-{1}\" - Java метад зададзены ў "
+"''values_from'' перамясціў {2} ({3})"
 
 msgid ""
 "Broken tagging preset \"{0}-{1}\" - number of items in ''display_values'' "
 "must be the same as in ''values''"
 msgstr ""
+"Сапсаваная нарыхтоўка тэгаў \"{0}-{1}\" - колькасць элементаў у "
+"''display_values'' павінна быць такое ж, як і ў ''values''"
 
 msgid ""
 "Broken tagging preset \"{0}-{1}\" - number of items in "
 "''short_descriptions'' must be the same as in ''values''"
 msgstr ""
+"Сапсаваная нарыхтоўка тэгаў \"{0}-{1}\" - колькасць элементаў у "
+"''short_descriptions'' павінна быць такім жа, як і ў ''values''"
 
 msgid "Unknown type: {0}"
-msgstr ""
+msgstr "Невядомы тып: {0}"
 
 msgid "Preset group {1} / {0}"
-msgstr ""
+msgstr "Група нарыхтовак {1} / {0}"
 
 msgid "Preset group {0}"
-msgstr ""
+msgstr "Група нарыхтовак {0}"
 
 msgid "Reference {0} is being used before it was defined"
-msgstr ""
+msgstr "Адносіны {0} былі выкарыстаны перш чым былі апісаны"
 
 msgid "Roles cannot appear more than once"
-msgstr ""
+msgstr "Ролі не могуць з’яўляцца больш аднаго разу"
 
 msgid "Preset role element without parent"
-msgstr ""
+msgstr "Нарыхтоўка элемента ролі без бацькоў"
 
 msgid "Preset sub element without parent"
-msgstr ""
+msgstr "Нарыхтоўка ўкладзенага элемента без бацькоў"
 
 msgid "Error parsing {0}: "
-msgstr ""
+msgstr "Памылка пры разборы {0}: "
 
 msgid "Search preset"
-msgstr ""
+msgstr "Знайсці нарыхтоўку..."
 
 msgid "Show preset search dialog"
-msgstr ""
+msgstr "Паказаць дыялог пошуку нарыхтовак"
 
 msgid "Search presets"
-msgstr ""
+msgstr "Пошук нарыхтовак"
+
+msgid "Presets"
+msgstr "Нарыхтоўкі"
 
 msgid "Search for objects by preset"
-msgstr ""
+msgstr "Пошук аб’ектаў па нарыхтоўцы"
 
 msgid "Show only applicable to selection"
-msgstr ""
+msgstr "Паказваць толькі падыходныя да вылучаных"
 
 msgid "Search in tags"
-msgstr ""
+msgstr "Пошук у тэгах"
 
 msgid "Add toolbar button"
-msgstr ""
+msgstr "Дадаць кнопку на панэль прылад"
 
 msgid ""
 "Adjustable {0} not registered yet. Cannot set participation in synchronized "
 "adjustment."
 msgstr ""
+"Рэгулёўны {0} яшчэ не зарэгістраваны. Немагчыма ўсталяваць удзел у "
+"сінхранізаваных рэгулёўках."
 
 msgid "Adjustable {0} not registered yet."
-msgstr ""
+msgstr "Рэгулёўны {0} яшчэ не зарэгістраваны."
 
 msgid "Some of the key listeners forgot to remove themselves: {0}"
-msgstr ""
+msgstr "Некаторыя з апрацоўнікаў націскаў клавіш забыліся сябе выдаліць: {0}"
 
 msgid "Some of the key modifier listeners forgot to remove themselves: {0}"
 msgstr ""
+"Некаторыя з апрацоўнікаў клавіш-мадыфікатараў забыліся прыбраць сябе: {0}"
 
 msgid "All files (*.*)"
-msgstr ""
+msgstr "Усе файлы (*.*)"
 
 msgid "Received error page:"
-msgstr ""
+msgstr "Атрыманая старонка паведамлення пра памылку:"
 
 msgid "Min. latitude"
-msgstr ""
+msgstr "Мін. шырата"
 
 msgid "Min. longitude"
-msgstr ""
+msgstr "Мін. даўгата"
 
 msgid "Max. latitude"
-msgstr ""
+msgstr "Макс. шырата"
 
 msgid "Max. longitude"
-msgstr ""
+msgstr "Макс. даўгата"
 
 msgid ""
 "URL from www.openstreetmap.org (you can paste a download URL here to specify "
 "a bounding box)"
 msgstr ""
+"URL ад www.openstreetmap.org (Вы можаце ўставіць URL для спампоўкі з сервера "
+"тут, каб паказаць межы рэдагавання)"
 
 msgid ""
 "The current value is not a valid changeset ID. Please enter an integer value "
 "> 0"
 msgstr ""
+"Бягучае значэнне не з’яўляецца правільным нумарам пакета правак. Увядзіце "
+"цэлы лік > 0"
 
 msgid "Add a new source to the list."
-msgstr ""
+msgstr "Дадаць у спіс новую крыніцу."
 
 msgid "Edit the selected source."
-msgstr ""
+msgstr "Кіраваць абраную крыніцу."
 
 msgid "Delete the selected source from the list."
-msgstr ""
+msgstr "Выдаліць крыніцу са спісу."
 
 msgid ""
 "The current value is not a valid OSM ID. Please enter an integer value > 0"
 msgstr ""
+"Бягучае значэнне не з’яўляецца дапушчальным OSM ID. Калі ласка, увядзіце "
+"цэлы лік> 0"
 
 msgid "false: the property is explicitly switched off"
-msgstr ""
+msgstr "false: параметр відавочна выключаны"
 
 msgid "true: the property is explicitly switched on"
-msgstr ""
+msgstr "true: параметр відавочна ўключаны"
 
 msgid ""
 "partial: different selected objects have different values, do not change"
-msgstr ""
+msgstr "часткова: вылучаныя аб’екты маюць розныя значэнні, не змяняйце"
 
 msgid "unset: do not set this property on the selected objects"
-msgstr ""
+msgstr "абнуліць: не ўсталёўваць гэты параметр для выбраных аб’ектаў"
 
 msgid "Cut"
-msgstr ""
+msgstr "Выразаць"
 
 msgid "Right click = copy to clipboard"
-msgstr ""
+msgstr "Пстрычка правай кнопкай = капіяваць у буфер абмену"
 
 msgid "Missing mandatory attribute ''{0}''."
-msgstr ""
+msgstr "абавязковы атрыбут ''{0}'' адсутнічае"
 
 msgid ""
 "Illegal value for mandatory attribute ''{0}'' of type long. Got ''{1}''."
 msgstr ""
+"няслушнае значэнне абавязковага атрыбуту ''{0}'' тыпу long, бягучае значэнне "
+"''{1}''"
 
 msgid ""
 "Illegal value for mandatory attribute ''{0}'' of type long (>=0). Got "
 "''{1}''."
 msgstr ""
+"няслушнае значэнне абавязковага атрыбуту ''{0}'' тыпу long (>=0), бягучае "
+"значэнне ''{1}''"
 
 msgid "Illegal value for attribute ''{0}'' of type double. Got ''{1}''."
 msgstr ""
+"Недапушчальнае значэнне для атрыбуту «{0}» тыпу double. Атрымана «{1}»."
 
 msgid ""
 "Illegal value for mandatory attribute ''{0}'' of type boolean. Got ''{1}''."
 msgstr ""
+"няслушнае значэнне абавязковага атрыбуту ''{0}'' тыпу boolean, бягучае "
+"значэнне ''{1}''"
 
 msgid ""
 "Illegal value for mandatory attribute ''{0}'' of type OsmPrimitiveType. Got "
 "''{1}''."
 msgstr ""
+"няслушнае значэнне абавязковага атрыбуту ''{0}'' тыпу OsmPrimitiveType, "
+"бягучае значэнне ''{1}''"
 
 msgid ""
 "Way with external ID ''{0}'' includes missing node with external ID ''{1}''."
 msgstr ""
+"Лінія з вонкавым ID ''{0}'' утрымоўвае адсутную кропку з вонкавым ID ''{1}''."
 
 msgid "Deleted node {0} is part of way {1}"
-msgstr ""
+msgstr "Выдаленая кропка {0} гэта частка лініі {1}"
 
 msgid ""
 "Way {0} with {1} nodes has incomplete nodes because at least one node was "
 "missing in the loaded data."
 msgstr ""
+"Лінія {0} з {1} кропкамі ўтрымоўвае незавершаныя кропкі, таму што, прынамсі, "
+"адна кропка адсутнічала ў дадзеных, загружаных з сервера."
 
 msgid ""
 "Relation with external id ''{0}'' refers to a missing primitive with "
 "external id ''{1}''."
 msgstr ""
+"Адносіны з вонкавым id ''{0}'' звяртаецца да адсутнага элемента з вонкавым "
+"id ''{1}''."
 
 msgid "Deleted member {0} is used by relation {1}"
-msgstr ""
+msgstr "Выключаны член {0} ўваходзіць у склад адносін {1}"
 
 msgid "All Formats"
-msgstr ""
+msgstr "Усе фарматы"
 
 msgid "Downloading points {0} to {1}..."
-msgstr ""
+msgstr "Спампоўка кропак з {0} да {1}..."
 
 msgid "Contacting OSM Server..."
-msgstr ""
+msgstr "Падлучэнне да сервера OSM..."
 
 msgid "Failed to open input stream for resource ''{0}''"
-msgstr ""
+msgstr "Немагчыма адкрыць уваходны струмень для рэсурсу ''{0}''"
 
 msgid ""
 "Failed to open file with extension ''{2}'' and namepart ''{3}'' in zip file "
 "''{0}''. Exception was: {1}"
 msgstr ""
+"Не атрымалася адкрыць файл з пашырэннем ''{2}'' і імем ''{3}'' у zip-файле "
+"''{0}''. Паўстала выключэнне: {1}"
 
 msgid "Failed to rename file {0} to {1}."
-msgstr ""
+msgstr "Збой пераназвання файла {0} у {1}."
 
 msgid "Failed to load {0}, use cached file and retry next time: {1}"
 msgstr ""
+"Збой загрузкі {0}, выкарыстоўвайце кэшаваны файл і паспрабуйце ізноў пазней: "
+"{1}"
 
 msgid ""
 "Unexpected response from HTTP server. Got {0} response without ''Location'' "
 "header. Can''t redirect. Aborting."
 msgstr ""
+"Нечаканы адказ ад HTTP сервера. Атрыманы {0} адказ без загалоўка "
+"''Месцазнаходжанне''. Перанакіраванне немагчыма. Супын."
 
 msgid "Too many redirects to the download URL detected. Aborting."
-msgstr ""
+msgstr "Выяўлена занадта шмат перанакіраванняў на URL загрузкі. Адмена."
 
 msgid "Download redirected to ''{0}''"
-msgstr ""
+msgstr "Загрузка перанакіравана на ''{0}''"
 
 msgid "Failed to read from ''{0}''. Server responded with status code {1}."
-msgstr ""
+msgstr "Памылка чытання з ''{0}''. Сервер адказаў з кодам стану {1}."
 
 msgid ""
 "Illegal value of attribute ''{0}'' of element ''{1}'' in server "
 "capabilities. Got ''{2}''"
 msgstr ""
+"Недапушчальнае значэнне атрыбуту ''{0}'' элемента ''{1}'' у магчымасцях "
+"сервера, роўнае ''{2}''"
 
 msgid "Failed to parse date ''{0}'' replied by server."
-msgstr ""
+msgstr "Сервер паведаміў пра няўдалы разбор даты ''{0}''."
 
 msgid ""
 "Unexpected format of error header for conflict in changeset update. Got "
 "''{0}''"
 msgstr ""
+"Нечаканы фармат ці памылка загалоўка для канфлікту ў абнаўленні пакета "
+"правак. Атрымана ''{0}''"
 
 msgid "Illegal longitude value for parameter ''{0}'', got {1}"
-msgstr ""
+msgstr "Няслушнае значэнне даўгаты для параметру ''{0}'', атрымана {1}"
 
 msgid "Illegal latitude value for parameter ''{0}'', got {1}"
-msgstr ""
+msgstr "Няслушнае значэнне шыраты для параметру ''{0}'', атрымана {1}"
 
 msgid "Unexpected value for ''{0}'' in changeset query url, got {1}"
 msgstr ""
+"Нечаканае значэнне для ''{0}'' у URL запыту пакета правак, атрымана {1}"
 
 msgid ""
 "Cannot create a changeset query including both the query parameters ''uid'' "
 "and ''display_name''"
 msgstr ""
+"Немагчыма стварыць запыт пакета правак, які ўключае ў сябе абодва параметры "
+"запыту і ''uid'', і ''display_name''"
 
 msgid "Unsupported parameter ''{0}'' in changeset query string"
-msgstr ""
+msgstr "Непадтрымоўваны параметр ''{0}'' у радку запыту пакета правак"
 
 msgid "Unexpected format for port number in preference ''{0}''. Got ''{1}''."
 msgstr ""
+"Неспадзяваны фармат нумара порта ў параметры ''{0}''. Атрымана ''{1}''."
 
 msgid "The proxy will not be used."
-msgstr ""
+msgstr "Проксі не будзе скарыстаны."
 
 msgid "Illegal port number in preference ''{0}''. Got {1}."
-msgstr ""
+msgstr "Няправільны нумар порта ў наладзе ''{0}''. Атрымана {1}."
 
 msgid ""
 "Unexpected value for preference ''{0}'' found. Got ''{1}''. Will use no "
 "proxy."
 msgstr ""
+"Неспадзяванае значэнне параметру ''{0}'', роўнае ''{1}''. Проксі "
+"выкарыстоўвацца не будзе."
 
 msgid ""
 "Unexpected parameters for HTTP proxy. Got host ''{0}'' and port ''{1}''."
 msgstr ""
+"Неспадзяваныя параметры для HTTP-проксі. Паказаны хост ''{0}'' і порт "
+"''{1}''."
 
 msgid ""
 "Unexpected parameters for SOCKS proxy. Got host ''{0}'' and port ''{1}''."
 msgstr ""
+"Неспадзяваныя параметры для SOCKS-проксі. Паказаны хост ''{0}'' і порт "
+"''{1}''."
 
 msgid ""
 "Connection to proxy ''{0}'' for URI ''{1}'' failed. Exception was: {2}"
 msgstr ""
+"Збой падлучэння да проксі-серверу ''{0}'' для URI ''{1}''. Памылка: {2}"
 
 msgid ""
 "The JVM is not configured to lookup proxies from the system settings. The "
 "property ''java.net.useSystemProxies'' was missing at startup time.  Will "
 "not use a proxy."
 msgstr ""
+"JVM не наладжана для пошуку проксі з сістэмных налад. Уласцівасць "
+"''java.net.useSystemProxies'' адсутнічала падчас запуску. Проксі не будзе "
+"выкарыстоўвацца."
 
 msgid "Parsing response from server..."
-msgstr ""
+msgstr "Разбор адказу сервера..."
 
 msgid "Unexpected XML element with name ''{0}''"
-msgstr ""
+msgstr "Нечаканы элемент XML з імем ''{0}''"
 
 msgid "Could not export ''{0}''."
-msgstr ""
+msgstr "Немагчыма экспартаваць ''{0}''."
 
 msgid "Could not import ''{0}''."
-msgstr ""
+msgstr "Немагчыма імпартаваць ''{0}''."
 
 msgid "Could not import files."
-msgstr ""
+msgstr "Немагчыма імпартаваць файлы."
 
 msgid "<html>Could not read file ''{0}''.<br>Error is:<br>{1}</html>"
-msgstr ""
+msgstr "<html>Немагчыма прачытаць файл ''{0}''.<br>Памылка:<br>{1}</html>"
 
 msgid "<html>Could not read files.<br>Error is:<br>{0}</html>"
-msgstr ""
+msgstr "<html>Немагчыма прачытаць файлы.<br>Памылка:<br>{0}</html>"
 
 msgid "GeoJSON Files"
+msgstr "Файлы GeoJSON"
+
+msgid "Projected GeoJSON Files"
 msgstr ""
 
 msgid "Layer ''{0}'' not supported"
-msgstr ""
+msgstr "Пласт «{0}» не падтрымліваецца"
 
 msgid ""
 "Note: GPL is not compatible with the OSM license. Do not upload GPL licensed "
 "tracks."
 msgstr ""
+"Увага: GPL несумяшчальная з ліцэнзіяй OSM. Не перадавайце на сервер трэкі, "
+"ліцэнзаваныя пад GPL"
 
 msgid "GPS track description"
-msgstr ""
+msgstr "апісанне трэка GPS"
 
 msgid "Add author information"
-msgstr ""
+msgstr "Дадаць інфармацыю пра аўтара"
 
 msgid "Real name"
 msgstr "Сапраўднае імя"
 
 msgid "E-Mail"
-msgstr ""
+msgstr "E-Mail"
 
 msgid "Copyright (URL)"
-msgstr ""
+msgstr "Аўтарскія правы (спасылка)"
 
 msgid "Predefined"
-msgstr ""
+msgstr "Прадвызначаны"
 
 msgid "Copyright year"
-msgstr ""
+msgstr "Аўтарскія правы (год)"
 
 msgid "Keywords"
 msgstr "Ключавыя словы"
 
 msgid "Export options"
-msgstr ""
+msgstr "Опцыі экспарту"
 
 msgid "Export and Save"
-msgstr ""
+msgstr "Экспартаваць і захаваць"
 
 msgid ""
 "Error while exporting {0}:\n"
 "{1}"
 msgstr ""
+"Памылка пры экспарце {0}:\n"
+"{1}"
 
 msgid "Choose a predefined license"
-msgstr ""
+msgstr "Абярыце ліцэнзію з набору"
 
 msgid "GPX Files"
-msgstr ""
+msgstr "Файлы GPX"
 
 msgid "Parsing data for layer ''{0}'' failed"
-msgstr ""
+msgstr "Збой апрацоўкі дадзеных пласта ''{0}''"
 
 msgid ""
 "Error occurred while parsing gpx data for layer ''{0}''. Only a part of the "
 "file will be available."
 msgstr ""
+"Адбылася памылка пры аналізе дадзеных gpx для пласта «{0}». Будзе даступная "
+"толькі частка файла."
 
 msgid ""
 "Error occurred while parsing gpx file ''{0}''. Only a part of the file will "
 "be available."
 msgstr ""
+"Адбылася памылка пры апрацоўцы gpx файла ''{0}''. Файл будзе даступны "
+"часткова."
 
 msgid "Parse error: invalid document structure for GPX document."
-msgstr ""
+msgstr "Памылка разбору: няправільная структура дакумента gpx"
 
 msgid "(at line {0}, column {1})"
-msgstr ""
+msgstr "(радок {0}, слупок {1})"
 
 msgid "Unknown mode {0}."
-msgstr ""
+msgstr "Невядомы рэжым {0}."
 
 msgid "Image Files"
-msgstr ""
+msgstr "Файлы малюнкаў"
 
 msgid "folder"
-msgstr ""
+msgstr "каталог"
 
 msgid "Looking for image files"
-msgstr ""
+msgstr "Пошук файлаў малюнкаў"
 
 msgid "No image files found."
-msgstr ""
+msgstr "Файлы малюнкаў не знойдзены"
 
 msgid "get number of unread messages"
-msgstr ""
+msgstr "атрымаць лік непрачытаных паведамленняў"
 
 msgid "You have {0} unread message."
 msgid_plural "You have {0} unread messages."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "У вас {0} непрачытанае паведамленне."
+msgstr[1] "У вас {0} непрачытаных паведамленні."
+msgstr[2] "У вас {0} непрачытаных паведамленняў."
 
 msgid "Click here to see your inbox."
-msgstr ""
+msgstr "Пстрыкніце тут для прагляду ўваходных паведамленняў."
 
 msgid "Message notifier"
-msgstr ""
+msgstr "Паведамленні"
 
 msgid "{0} not available (offline mode)"
-msgstr ""
+msgstr "{0} недаступны (аўтаномны рэжым)"
 
 msgid ""
 "No primitive with id {0} in local dataset. Cannot infer primitive type."
 msgstr ""
+"Няма элементаў з  id {0} у мясцовай базе дадзеных. Немагчыма вывесці тып "
+"элемента."
 
 msgid "Fetching a package of nodes from ''{0}''"
-msgstr ""
+msgstr "Выбарка пакета кропак з ''{0}''"
 
 msgid "Fetching a package of ways from ''{0}''"
-msgstr ""
+msgstr "Выбарка пакета ліній з ''{0}''"
 
 msgid "Fetching a package of relations from ''{0}''"
-msgstr ""
+msgstr "Выбарка пакета адносін з ''{0}''"
 
 msgid "Downloading {0} object from ''{1}''"
 msgid_plural "Downloading {0} objects from ''{1}''"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Спампоўка {0} аб’екта з ''{1}''"
+msgstr[1] "Спампоўка {0} аб’ектаў з ''{1}''"
+msgstr[2] "Спампоўка {0} аб’ектаў з ''{1}''"
 
 msgid ""
 "Server replied with response code 404, retrying with an individual request "
 "for each object."
 msgstr ""
+"Сервер адказаў памылкай з кодам 404, паўтараем індывідуальнымі запытамі для "
+"кожнага аб''екта."
 
 msgid "Downloading OSM data..."
-msgstr ""
+msgstr "Спампоўка дадзеных OSM..."
 
 msgid "Fetching node with id {0} from ''{1}''"
-msgstr ""
+msgstr "Выбарка кропкі з id {0} з ''{1}''"
 
 msgid "Fetching way with id {0} from ''{1}''"
-msgstr ""
+msgstr "Выбарка лініі з id {0} з ''{1}''"
 
 msgid "Fetching relation with id {0} from ''{1}''"
-msgstr ""
+msgstr "Выбарка адносін з id {0} з '' {1} ''"
 
 msgid "Server replied with response code 404 for id {0}. Skipping."
-msgstr ""
+msgstr "Сервер выдаў памылку 404 для id {0}. Прапускаем."
 
 msgid "NMEA-0183 Files"
-msgstr ""
+msgstr "Файлы NMEA-0183"
 
 msgid "Coordinates imported: {0}"
-msgstr ""
+msgstr "Імпартавана каардынат: {0}"
 
 msgid "Malformed sentences: {0}"
-msgstr ""
+msgstr "Няслушны запыт: {0}"
 
 msgid "Checksum errors: {0}"
-msgstr ""
+msgstr "Памылак праверкі кантрольнай сумы: {0}"
 
 msgid "Unknown sentences: {0}"
-msgstr ""
+msgstr "Невядомы выраз: {0}"
 
 msgid "Zero coordinates: {0}"
-msgstr ""
+msgstr "Нулявых каардынат: {0}"
 
 msgid "NMEA import success:"
-msgstr ""
+msgstr "Паспяховы імпарт NMEA дадзеных:"
 
 msgid "NMEA import failure!"
-msgstr ""
+msgstr "Збой пры імпарце NMEA!"
 
 msgid "Note Files"
-msgstr ""
+msgstr "Файлы нататак"
 
 msgid "OSM API"
-msgstr ""
+msgstr "OSM API"
 
 msgid "JOSM website"
-msgstr ""
+msgstr "Вэб-сайт JOSM"
 
 msgid "Unable to access ''{0}'': {1} not available (offline mode)"
-msgstr ""
+msgstr "Няма доступу да ''{0}'': {1} недаступны (аўтаномны рэжым)"
 
 msgid "Unable to initialize OSM API."
-msgstr ""
+msgstr "Не атрымалася ініцыялізаваць OSM API."
 
 msgid "This version of JOSM is incompatible with the configured server."
-msgstr ""
+msgstr "Гэта версія JOSM несумяшчальная з наладжаным серверам."
 
 msgid ""
 "It supports protocol version 0.6, while the server says it supports {0} to "
 "{1}."
 msgstr ""
+"Падтрымліваецца пратакол версіі 0.6, у той час як сервер сказаў, што ён "
+"падтрымлівае {0} да {1}."
 
 msgid "Removed layer {0} because it is not allowed by the configured API."
-msgstr ""
+msgstr "Пласт {0} выдалены, бо забаронены да выкарыстання."
 
 msgid "Unexpected format of ID replied by the server. Got ''{0}''."
-msgstr ""
+msgstr "сервер вярнуў нечаканы фармат id, бягучае значэнне \"{0}\""
 
 msgid ""
 "Unexpected format of new version of modified primitive ''{0}''. Got ''{1}''."
 msgstr ""
+"Нечаканы фармат новай версіі змененага элемента \"{0}\". Атрымана \"{1}\""
 
 msgid "Creating changeset..."
-msgstr ""
+msgstr "Стварэнне пакета правак..."
 
 msgid "Successfully opened changeset {0}"
-msgstr ""
+msgstr "Пакет правак {0} паспяхова адкрыты"
 
 msgid "Changeset ID > 0 expected. Got {0}."
-msgstr ""
+msgstr "патрабуецца ідэнтыфікатар пакета правак > 0. Атрымана {0}"
 
 msgid "Updating changeset..."
-msgstr ""
+msgstr "Абнаўленне пакета правак..."
 
 msgid "Updating changeset {0}..."
-msgstr ""
+msgstr "Абнаўленне пакета правак {0}..."
 
 msgid "Closing changeset..."
-msgstr ""
+msgstr "Зачыненне пакета правак..."
 
 msgid "No changeset present for diff upload."
-msgstr ""
+msgstr "Няма пакетаў правак для перадачы адрозненняў"
 
 msgid "Preparing upload request..."
-msgstr ""
+msgstr "Падрыхтоўка запыту перадачы на сервер..."
 
 msgid "Waiting 10 seconds ... "
-msgstr ""
+msgstr "Чаканне 10 секунд ... "
 
 msgid "Starting retry {0} of {1} in {2} seconds ..."
-msgstr ""
+msgstr "Спроба {0} з {1} праз {2} секунды..."
 
 msgid "OK - trying again."
-msgstr ""
+msgstr "OK - спрабуем яшчэ раз."
 
 msgid "Starting retry {0} of {1}."
-msgstr ""
+msgstr "Спроба {0} з {1}."
 
 msgid "Current changeset is null. Cannot upload data."
-msgstr ""
+msgstr "Бягучы пакет правак пусты. Немагчыма перадаць дадзеныя."
 
 msgid "ID of current changeset > 0 required. Current ID is {0}."
-msgstr ""
+msgstr "Патрабуецца, каб ID бягучага пакета правак быў > 0. Бягучы ID: {0}."
 
 msgid "Open changeset expected. Got closed changeset with id {0}."
 msgstr ""
+"Патрабуецца адкрыты пакет правак. Атрыманы закрыты пакет правак з "
+"ідэнтыфікатарам {0}"
 
 msgid "Note upload failed"
-msgstr ""
+msgstr "Не атрымалася адправіць нататку"
 
 msgid "Error parsing note response from server"
-msgstr ""
+msgstr "Памылка пры разборы адказу сервера на адпраўку нататкі"
 
 msgid "(Code={0})"
-msgstr ""
+msgstr "(Код={0})"
 
 msgid "The server replied an error with code {0}."
-msgstr ""
+msgstr "Сервер вярнуў памылку з кодам {0}"
 
 msgid "OSM Server Files bzip2 compressed"
-msgstr ""
+msgstr "Файлы сервера OSM сціснуты з дапамогай bzip2"
 
 msgid "Prolog of OsmChange document already written. Please write only once."
 msgstr ""
+"Пралог дакумента OsmChange ужо запісаны. Калі ласка, запісвайце толькі адзін "
+"раз."
 
 msgid "Prolog of OsmChange document not written yet. Please write first."
 msgstr ""
+"Пралог дакумента OsmChange яшчэ не напісаны. Калі ласка, будзьце першымі."
 
 msgid "OsmChange File"
-msgstr ""
+msgstr "Файл OsmChange"
 
 msgid "File ''{0}'' does not exist."
-msgstr ""
+msgstr "Файл \"{0}\" не існуе"
 
 msgid "No data found in file {0}."
-msgstr ""
+msgstr "Не знойдзены дадзеныя ў файле {0}."
 
 msgid "Open OsmChange file"
-msgstr ""
+msgstr "Адкрыць файл OsmChange"
 
 msgid "Unsupported version: {0}"
-msgstr ""
+msgstr "Непадтрымоўваная версія: {0}"
 
 msgid ""
 "Unsupported start element ''{0}'' in changeset content at position "
 "({1},{2}). Skipping."
 msgstr ""
+"Не падтрымоўваны пачатковы элемент ''{0}'' у змесціве пакета змен у пазіцыі "
+"({1},{2}). Пропуск."
 
 msgid ""
 "Illegal document structure. Found node, way, or relation outside of "
 "''create'', ''modify'', or ''delete''."
 msgstr ""
+"Няправільная структура дакумента. Знойдзены node, way, ці relation за межамі "
+"''create'', ''modify'', ці ''delete''."
 
 msgid ""
 "Unsupported end element ''{0}'' in changeset content at position ({1},{2}). "
 "Skipping."
 msgstr ""
+"Не падтрымоўваны канчатковы элемент ''{0}'' у змесціве пакета змен у пазіцыі "
+"({1},{2}). Пропуск."
 
 msgid "Parsing changeset content ..."
-msgstr ""
+msgstr "Разбор змесціва пакета правак ..."
 
 msgid "Illegal boolean value for attribute ''{0}''. Got ''{1}''."
-msgstr ""
+msgstr "Няслушнае цэлае значэнне атрыбуту ''{0}''. Атрымана ''{1}''."
 
 msgid "Illegal value for attribute ''{0}''. Got ''{1}''."
-msgstr ""
+msgstr "Няслушнае значэнне для атрыбуту ''{0}''. Атрымана''{1}''."
 
 msgid "Illegal numeric value for attribute ''{0}''. Got ''{1}''."
-msgstr ""
+msgstr "Няслушнае лікавае значэнне для атрыбуту ''{0}''. Атрымана ''{1}''."
 
 msgid "Missing mandatory attribute ''{0}'' of XML element {1}."
-msgstr ""
+msgstr "Адсутнічае абавязковы атрыбут ''{0}'' для элемента XML {1}."
 
 msgid "Undefined element ''{0}'' found in input stream. Aborting."
 msgstr ""
+"Нявызначаны элемент ''{0}'' выяўлены ва ўваходным струмені. Адменена."
 
 msgid "Parsing list of changesets..."
-msgstr ""
+msgstr "Аналіз спісу пакетаў правак..."
 
 msgid "Failed to sign a HTTP connection with an OAuth Authentication header"
 msgstr ""
+"Не атрымалася падпісаць злучэнне HTTP, выкарыстоўваючы загаловак "
+"аўтэнтыфікацыі OAuth"
 
 msgid "Unexpected value for preference ''{0}''. Got ''{1}''."
-msgstr ""
+msgstr "Неспадзяванае значэнне параметру ''{0}'', роўнае ''{1}''."
 
 msgid "<html>An error occurred while saving.<br>Error is:<br>{0}</html>"
-msgstr ""
+msgstr "<html>Адбылася памылка пры захаванні.<br>Памылка: <br>{0}</html>"
 
 msgid ""
 "<html>An error occurred while restoring backup file.<br>Error "
 "is:<br>{0}</html>"
 msgstr ""
+"<html>Адбылася памылка пры аднаўленні рэзервовай копіі файла.<br>Памылка: "
+"<br>{0}</html>"
 
 msgid "OSM Server Files gzip compressed"
-msgstr ""
+msgstr "Файлы сервера OSM сціснуты з дапамогай gzip"
 
 msgid "Parsing OSM history data ..."
-msgstr ""
+msgstr "Разбор дадзеных гісторыі OSM..."
 
 msgid "OSM Server Files"
-msgstr ""
+msgstr "Файлы сервера OSM"
 
 msgid "Invalid dataset"
-msgstr ""
+msgstr "Няслушны набор дадзеных"
 
 msgid "No data found for layer ''{0}''."
-msgstr ""
+msgstr "Няма дадзеных для пласта ''{0}''."
 
 msgid "No data found in file ''{0}''."
-msgstr ""
+msgstr "Няма дадзеных у файле ''{0}''."
 
 msgid "Open OSM file"
-msgstr ""
+msgstr "Адкрыць файл OSM"
 
 msgid "Reading was canceled"
-msgstr ""
+msgstr "Чытанне было адменена"
 
 msgid ""
 "Missing mandatory attributes on element ''bounds''. Got "
 "minlon=''{0}'',minlat=''{1}'',maxlon=''{3}'',maxlat=''{4}'', origin=''{5}''."
 msgstr ""
+"Адсутнічаюць абавязковыя атрыбуты элемента \"межы\". Вызначаны  "
+"minlon=''{0}'',minlat=''{1}'',maxlon=''{3}'',maxlat=''{4}'', origin=''{5}''."
 
 msgid "Deleted way {0} contains nodes"
-msgstr ""
+msgstr "Выдаленая лінія {0} утрымоўвае кропкі"
 
 msgid "Missing mandatory attribute ''{0}'' on <nd> of way {1}."
-msgstr ""
+msgstr "Адсутнічае абавязковы атрыбут ''{0}'' на <nd> лініі {1}."
 
 msgid "Illegal value of attribute ''ref'' of element <nd>. Got {0}."
-msgstr ""
+msgstr "Няслушнае значэнне атрыбуту ''ref'' элемента <nd>. Атрымана {0}."
 
 msgid "Deleted relation {0} contains members"
-msgstr ""
+msgstr "Выдаленыя адносіны {0} ўтрымліваюць даччыныя элементы"
 
 msgid "Missing attribute ''ref'' on member in relation {0}."
-msgstr ""
+msgstr "Адсутнічае атрыбут ''ref'' ва ўдзельніка адносін {0}."
 
 msgid ""
 "Illegal value for attribute ''ref'' on member in relation {0}. Got {1}"
 msgstr ""
+"Няправільнае значэнне атрыбуту ''ref'' у ўдзельніка адносін {0}. Атрымана {1}"
 
 msgid "Missing attribute ''type'' on member {0} in relation {1}."
-msgstr ""
+msgstr "Адсутнічае атрыбут ''type'' у ўдзельніка {0} адносін {1}."
 
 msgid ""
 "Illegal value for attribute ''type'' on member {0} in relation {1}. Got {2}."
 msgstr ""
+"Няправільнае значэнне атрыбуту ''type'' у ўдзельніка {0} адносін {1}. "
+"Атрымана {2}."
 
 msgid "Incomplete <member> specification with ref=0"
-msgstr ""
+msgstr "Няпоўная спецыфікацыя <member> з ref=0"
 
 msgid "Missing key or value attribute in tag."
-msgstr ""
+msgstr "У тэгу адсутнічае ключ ці значэнне атрыбуту."
 
 msgid "Undefined element ''{0}'' found in input stream. Skipping."
 msgstr ""
+"Нявызначаны элемент ''{0}'' выяўлены ва ўваходным струмені. Прапушчана."
 
 msgid "Illegal object with ID=0."
-msgstr ""
+msgstr "Недапушчальны аб’ект з id=0"
 
 msgid ""
 "Illegal value for attribute ''version'' on OSM primitive with ID {0}. Got "
 "{1}."
 msgstr ""
+"Няслушнае значэнне атрыбуту ''version'' на элеменце OSM з ID {0}. Атрымана "
+"{1}."
 
 msgid ""
 "Normalizing value of attribute ''version'' of element {0} to {2}, API "
 "version is ''{3}''. Got {1}."
 msgstr ""
+"Прывядзенне значэння атрыбуту ''version'' элемента {0} да нормы: {2}, Версія "
+"API: ''{3}''. Бягучае значэнне: {1}."
 
 msgid "Unknown or unsupported API version. Got {0}."
-msgstr ""
+msgstr "Невядомая ці непадтрымоўваная версія API. Атрымана {0}."
 
 msgid "Missing attribute ''version'' on OSM primitive with ID {0}."
-msgstr ""
+msgstr "Адсутнічае атрыбут ''version'' на элеменце OSM з ID {0}."
 
 msgid ""
 "Illegal value for attribute ''changeset'' on new object {1}. Got {0}. "
 "Resetting to 0."
 msgstr ""
+"Няслушнае значэнне атрыбуту ''changeset'' для новага аб’екта {1}. Атрымана "
+"{0}. Будзе скінуты на 0."
 
 msgid "Illegal value for attribute ''changeset''. Got {0}."
-msgstr ""
+msgstr "Няслушнае значэнне атрыбуту ''changeset''. Атрымана {0}."
 
 msgid "Missing required attribute ''{0}''."
-msgstr ""
+msgstr "Адсутнічае патрэбны атрыбут ''{0}''."
 
 msgid "Illegal long value for attribute ''{0}''. Got ''{1}''."
-msgstr ""
+msgstr "Няслушная даўжыня значэння атрыбуту ''{0}''. Атрымана ''{1}''."
 
 msgid "{0} bytes have been read"
-msgstr ""
+msgstr "{0} байт прачытана"
 
 msgid "Prepare OSM data..."
-msgstr ""
+msgstr "Падрыхтоўка дадзеных..."
 
 msgid "Parsing OSM data..."
-msgstr ""
+msgstr "Разбор дадзеных OSM..."
 
 msgid "Preparing data set..."
-msgstr ""
+msgstr "Падрыхтоўка набору дадзеных..."
 
 msgid "Line {0} column {1}: "
-msgstr ""
+msgstr "Радок {0} слупок {1}: "
 
 msgid "Downloading referring ways ..."
-msgstr ""
+msgstr "Спампоўка залежных ліній ..."
 
 msgid "Downloading referring relations ..."
-msgstr ""
+msgstr "Спампоўка залежных адносін..."
 
 msgid "Reading changesets..."
-msgstr ""
+msgstr "Чытанне пакетаў правак..."
 
 msgid "Downloading changesets ..."
-msgstr ""
+msgstr "Спампоўка пакетаў правак..."
 
 msgid "Reading changeset {0} ..."
-msgstr ""
+msgstr "Чытанне пакета правак {0} ..."
 
 msgid "Downloading changeset {0} ..."
-msgstr ""
+msgstr "Спампоўка пакета правак {0} ..."
 
 msgid "Downloading {0} changeset ..."
 msgid_plural "Downloading {0} changesets ..."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Спампоўка {0} пакета правак з сервера..."
+msgstr[1] "Спампоўка {0} пакетаў правак з сервера..."
+msgstr[2] "Спампоўка {0} пакетаў правак з сервера..."
 
 msgid "({0}/{1}) Downloading changeset {2} ..."
-msgstr ""
+msgstr "({0}/{1}) Спампоўка пакета правак {2} з сервера..."
 
 msgid "Downloading content for changeset {0} ..."
-msgstr ""
+msgstr "Спампоўка змесціва пакета правак {0}  з сервера..."
 
 msgid "Downloading history..."
-msgstr ""
+msgstr "Спампоўка гісторыі..."
 
 msgid "Contacting Server..."
-msgstr ""
+msgstr "Злучэнне з серверам..."
 
 msgid "Downloading OSM notes..."
-msgstr ""
+msgstr "Загрузка нататак OSM..."
 
 msgid "Failed to open connection to API {0}."
-msgstr ""
+msgstr "Не атрымалася ўсталяваць злучэнне з API {0}"
 
 msgid ""
 "Could not connect to the OSM server. Please check your internet connection."
 msgstr ""
+"Не атрымоўваецца злучыцца з серверам OSM. Калі ласка, праверце Ваша інтэрнэт-"
+"злучэнне."
 
 msgid "Reading error text failed."
-msgstr ""
+msgstr "Не атрымалася прачытаць тэкст памылкі."
 
 msgid "XML tag <user> is missing."
-msgstr ""
+msgstr "Адсутнічае тэг XML <user>."
 
 msgid "Missing attribute ''{0}'' on XML tag ''{1}''."
-msgstr ""
+msgstr "Адсутнічае атрыбут ''{0}'' на тэгу XML ''{1}''."
 
 msgid "Illegal value for attribute ''{0}'' on XML tag ''{1}''. Got {2}."
 msgstr ""
+"Няслушнае значэнне атрыбуту ''{0}'' на тэгу XML ''{1}''. Атрымана {2}."
 
 msgid "Reading user info ..."
-msgstr ""
+msgstr "Чытанне інфармацыі пра карыстальніка ..."
 
 msgid "Starting to upload with one request per primitive ..."
-msgstr ""
+msgstr "Пачатак перадачы на сервер з асобным запытам на кожны элемент ..."
 
 msgid "{0}% ({1}/{2}), {3} left. Uploading node ''{4}'' (id: {5})"
 msgstr ""
+"{0}% ({1}/{2}), {3} засталося. Перадача на сервер кропкі ''{4}'' (id: {5})"
 
 msgid "{0}% ({1}/{2}), {3} left. Uploading way ''{4}'' (id: {5})"
 msgstr ""
+"{0}% ({1}/{2}), {3} засталося. Перадача на сервер лініі ''{4}'' (id: {5})"
 
 msgid "{0}% ({1}/{2}), {3} left. Uploading relation ''{4}'' (id: {5})"
-msgstr ""
+msgstr "{0}% ({1}/{2}), {3} засталося. Перадача стаўлення ''{4}'' (id: {5})"
 
 msgid "Starting to upload in one request ..."
-msgstr ""
+msgstr "Пачатак перадачы на сервер за адзін запыт..."
 
 msgid "Value >0 expected for parameter ''{0}'', got {1}"
-msgstr ""
+msgstr "Значэнне >0 чакалася для параметру ''{0}'', атрымана {1}"
 
 msgid "Starting to upload in chunks..."
-msgstr ""
+msgstr "Пачатак перадачы на сервер па частках..."
 
 msgid "({0}/{1}) Uploading {2} object..."
 msgid_plural "({0}/{1}) Uploading {2} objects..."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "({0}/{1}) Перадача {2} аб’екта..."
+msgstr[1] "({0}/{1}) Перадача {2} аб’ектаў..."
+msgstr[2] "({0}/{1}) Перадача {2} аб’ектаў..."
 
 msgid "Uploading data ..."
-msgstr ""
+msgstr "Перадача дадзеных на сервер ..."
 
 msgid "Unexpected id 0 for osm primitive found"
-msgstr ""
+msgstr "Выяўлены нечаканы id 0 для элемента osm"
 
 msgid "OSM Server Files zip compressed"
-msgstr ""
+msgstr "Сціснутыя zip файлы OSM сервера"
 
 msgid "WMS Files (*.wms)"
-msgstr ""
+msgstr "Файлы WMS (*.wms)"
+
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr "Непадтрымоўваны фармат версіі WMS файла; выяўлена {0}, чакалася {1}"
 
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
@@ -12709,433 +14120,518 @@ msgid ""
 "transferred <strong>unencrypted</strong> in every request sent to the OSM "
 "server. <strong>Do not use a valuable password.</strong></p></body></html>"
 msgstr ""
+"<html><body><p class=\"warning-body\"><strong>Увага:</strong> У гэтым "
+"рэжыме, пароль захоўваецца ў выглядзе звычайнага тэксту ў наладах JOSM "
+"файла. Акрамя таго, ён перадаецца ў кожным запыце на сервер OSM у "
+"<strong>незашыфраваным</strong> выглядзе. <strong>Не выкарыстоўвайце тут "
+"важных пароляў.</strong></p></body></html>"
 
 msgid "Save user and password (unencrypted)"
-msgstr ""
+msgstr "Захаваць імя карыстальніка і пароль (не зашыфравана)"
 
 msgid "<delete from {0} objects>"
-msgstr ""
+msgstr "<выдаліць з {0} аб’ектаў>"
 
 msgid "Old values of"
-msgstr ""
+msgstr "Старыя значэнні"
 
 msgid "Add tags to selected objects"
-msgstr ""
+msgstr "Дадаць тэгі да вылучаных аб’ектаў"
 
 msgid "Add selected tags"
-msgstr ""
+msgstr "Дадаць абраныя тэгі"
 
 msgid "Add all tags"
-msgstr ""
+msgstr "Дадаць усе тэгі"
 
 msgid "Add checked tags to selected objects"
-msgstr ""
+msgstr "Дадаць пазначаныя тэгі да вылучаных аб’ектаў"
 
 msgid "Shift+Enter: Add all tags to selected objects"
-msgstr ""
+msgstr "Shift+Enter: дадаць усе тэгі да вылучаных аб’ектаў"
 
 msgid "Assume"
-msgstr ""
+msgstr "Прысвоіць"
 
 msgid "Existing values"
-msgstr ""
+msgstr "Існыя значэнні"
 
 msgid "Enable the checkbox to accept the value"
-msgstr ""
+msgstr "Пастаўце сцяжок каб ужыць значэнне"
 
 msgid "Accept all tags from {0} for this session"
-msgstr ""
+msgstr "Прыняць усе тэгі {0} для гэтай сесіі"
 
 msgid "Load data from API"
-msgstr ""
+msgstr "Загрузіць дадзеныя API"
 
 msgid "Import data from URL"
-msgstr ""
+msgstr "Імпартаваць дадзеныя па URL"
 
 msgid "Open local files"
-msgstr ""
+msgstr "Адкрываць лакальныя файлы"
 
 msgid "Load imagery layers"
-msgstr ""
+msgstr "Загрузіць здымкі як пласты"
 
 msgid "Change the selection"
-msgstr ""
+msgstr "Змяніць выбар"
 
 msgid "Change the viewport"
-msgstr ""
+msgstr "Змяніць поле індыкацыі"
 
 msgid "Create new objects"
-msgstr ""
+msgstr "Стварыць новыя аб’екты"
 
 msgid "Read protocol version"
-msgstr ""
+msgstr "Чытаць версію пратаколу"
 
 msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
+"Не атрымалася запусціць сервер дыстанцыйнага кіравання IPv4 на порце {0}: {1}"
 
 msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
+"Не атрымалася запусціць сервер дыстанцыйнага кіравання IPv6 на порце {0}: {1}"
 
 msgid "RemoteControl::Accepting remote connections on {0}:{1}"
-msgstr ""
+msgstr "Дыстанцыйнае кіраванне::Прыём аддаленага злучэння на {0}: {1}"
 
 msgid "RemoteControl::Server {0}:{1} stopped."
-msgstr ""
+msgstr "Дыстанцыйнае кіраванне::Сервер {0}:{1} спынены."
 
 msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
+"Не атрымалася запусціць https сервер дыстанцыйнага кіравання IPv4 на порце "
+"{0}: {1}"
 
 msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
+"Не атрымалася запусціць https сервер дыстанцыйнага кіравання IPv6 на порце "
+"{0}: {1}"
 
 msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
+"Дыстанцыйнае кіраванне::Прыём аддаленых абароненых злучэннях на {0}:{1}"
 
 msgid "Remote Control has been asked to create a new node."
 msgstr ""
+"Праз Дыстанцыйнае кіраванне атрыманы запыт на стварэнне новай кропкі."
 
 msgid "There is no layer opened to add node"
-msgstr ""
+msgstr "Няма адкрытага пласта для дадання кропкі"
 
 msgid "Remote Control has been asked to create a new way."
-msgstr ""
+msgstr "Праз Дыстанцыйнае кіраванне атрыманы запыт на стварэнне новай лініі."
 
 msgid "Invalid coordinates: {0}"
-msgstr ""
+msgstr "Няправільныя каардынаты: {0}"
 
 msgid "There is no layer opened to add way"
-msgstr ""
+msgstr "Няма адкрытага пласта для дадання лініі"
 
 msgid "Add way"
-msgstr ""
+msgstr "Дадаць лінію"
 
 msgid ""
 "Remote Control has been asked to report its supported features. This enables "
 "web sites to guess a running JOSM version"
 msgstr ""
+"Праз Дыстанцыйнае кіраванне атрыманы запыт аб падтрымоўваемых магчымасцях. "
+"Гэта дазволіць сайтам паспрабаваць вызначыць вашу версію JOSM"
 
 msgid ""
 "Remote Control has been asked to load an imagery layer from the following "
 "URL:"
 msgstr ""
+"Праз Дыстанцыйнае кіраванне атрыманы запыт на загрузку фону па наступнай "
+"спасылцы:"
 
 msgid "Remote imagery"
-msgstr ""
+msgstr "Аддалены фон"
 
 msgid "Remote Control has been asked to import data from the following URL:"
 msgstr ""
+"Праз Дыстанцыйнае кіраванне атрыманы запыт на імпарт дадзеных з наступнай "
+"спасылкі:"
 
 msgid "Remote Control has been asked to load data from the API."
 msgstr ""
+"Праз Дыстанцыйнае кіраванне атрыманы запыт на загрузку дадзеных з API."
 
 msgid "The latitudes must be between {0} and {1}"
-msgstr ""
+msgstr "Шырата павінна быць паміж {0} і {1}"
 
 msgid "The longitudes must be between {0} and {1}"
-msgstr ""
+msgstr "Даўгата павінна быць паміж {0} і {1}"
 
 msgid "The minima must be less than the maxima"
-msgstr ""
+msgstr "Мінімум павінен быць менш максімуму"
 
 msgid "Remote Control has been asked to load the following data:"
 msgstr ""
+"Было прапанавана спампаваць наступныя дадзеныя праз Дыстанцыйнае кіраванне:"
 
 msgid "Loading data"
-msgstr ""
+msgstr "Загрузка дадзеных"
 
 msgid ""
 "Remote Control has been asked to load objects (specified by their id) from "
 "the API."
 msgstr ""
+"Праз Дыстанцыйнае кіраванне быў атрыманы запыт на загрузку аб’ектаў (па іх "
+"ID) праз API."
 
 msgid "Remote Control has been asked to open a local file."
 msgstr ""
+"Праз Дыстанцыйнае кіраванне атрыманы запыт на адкрыццё лакальнага файла."
 
 msgid "Do you want to allow this?"
-msgstr ""
+msgstr "Дазволіць дзеянне?"
 
 msgid "Confirm Remote Control action"
-msgstr ""
+msgstr "Пацвярджаць дзеянні Дыстанцыйнага кіравання"
 
 msgid ""
 "Remote Control has been asked to report its protocol version. This enables "
 "web sites to detect a running JOSM."
 msgstr ""
+"Праз Дыстанцыйнае кіраванне атрыманы запыт аб версіі пратаколу. Гэта "
+"дазволіць вэб сайтам вызначыць, ці запушчаны JOSM."
 
 msgid ""
 "Version ''{0}'' of meta data for geoimage layer is not supported. Expected: "
 "0.1"
 msgstr ""
+"Версія ''{0}'' мета-дадзеных пласта geoimage не падтрымліваецца. Чакалася: "
+"0.1"
 
 msgid "Data:"
-msgstr ""
+msgstr "Дадзеныя:"
 
 msgid "local file"
-msgstr ""
+msgstr "лакальны файл"
 
 msgid "Link to a GPX file on your local disk."
-msgstr ""
+msgstr "Спасылка на GPX-файл на вашым лакальным дыску."
 
 msgid "include"
-msgstr ""
+msgstr "уключыць"
 
 msgid "Include GPX data in the .joz session file."
-msgstr ""
+msgstr "Уключыць дадзеныя GPX у файл сеансу .joz."
 
 msgid "No file association"
-msgstr ""
+msgstr "Тып файла не зарэгістраваны"
 
 msgid "GPX data will be included in the session file."
-msgstr ""
+msgstr "Дадзеныя GPX будуць уключаны ў файл сеансу."
 
 msgid ""
 "Version ''{0}'' of meta data for gpx track layer is not supported. Expected: "
 "0.1"
 msgstr ""
+"Версія «{0}» метададзеных для пласта трэка gpx не падтрымліваецца. Чакалася: "
+"0.1"
 
 msgid "File name expected for layer no. {0}"
-msgstr ""
+msgstr "Чакалася імя файла для пласта № {0}"
 
 msgid ""
 "Version ''{0}'' of meta data for imagery layer is not supported. Expected: "
 "0.1"
 msgstr ""
+"Версія «{0}» метададзеных для пласта здымка не падтрымліваецца. Чакалася: 0.1"
 
 msgid ""
 "Version ''{0}'' of meta data for marker layer is not supported. Expected: 0.1"
 msgstr ""
+"Версія ''{0}'' метададзеных для пласта маркераў не падтрымліваецца. "
+"Чакалася: 0.1"
 
 msgid "Layer contains unsaved data - save to file."
-msgstr ""
+msgstr "Пласт утрымоўвае незахаваныя дадзеныя - захаваць у файл."
 
 msgid "Layer does not contain unsaved data."
-msgstr ""
+msgstr "Пласт не ўтрымоўвае незахаваных дадзеных."
 
 msgid "Link to a OSM data file on your local disk."
-msgstr ""
+msgstr "Спасылка на OSM-файл на лакальным дыску"
 
 msgid "Include OSM data in the .joz session file."
-msgstr ""
+msgstr "Уключыць дадзеныя OSM у файл сеансу .joz."
 
 msgid "OSM data will be included in the session file."
-msgstr ""
+msgstr "Дадзеныя OSM будуць уключаны ў файл сеансу."
 
 msgid ""
 "Version ''{0}'' of meta data for osm data layer is not supported. Expected: "
 "0.1"
 msgstr ""
+"Версія «{0}» метададзеных для пласта дадзеных OSM не падтрымліваецца. "
+"Чакалася: 0.1"
 
 msgid "Session file (*.jos, *.joz)"
-msgstr "Файл сессіі (*.jos, *.joz)"
+msgstr "Файл сеансу (*.jos, *.joz)"
 
 msgid "Unable to locate file  ''{0}''."
-msgstr ""
+msgstr "Не атрымалася знайсці файл  ''{0}''."
 
 msgid "Unsupported scheme ''{0}'' in URI ''{1}''."
-msgstr ""
+msgstr "Непадтрымоўваная  схема ''{0}'' у URI ''{1}''."
 
 msgid "Unexpected root element ''{0}'' in session file"
-msgstr ""
+msgstr "Нечаканы каранёвы элемент ''{0}'' у файле сеансу"
 
 msgid "Version ''{0}'' of session file is not supported. Expected: 0.1"
-msgstr ""
+msgstr "Непадтрымоўваная  версія ''{0}'' файла сеансу. Чакалася: 0.1"
 
 msgid "missing mandatory attribute ''index'' for element ''layer''"
-msgstr ""
+msgstr "адсутнічае абавязковы атрыбут ''index'' для элемента ''layer''"
 
 msgid "unexpected format of attribute ''index'' for element ''layer''"
-msgstr ""
+msgstr "нечаканы фармат атрыбуту ''index'' для элемента ''layer''"
 
 msgid "attribute ''index'' ({0}) for element ''layer'' must be unique"
 msgstr ""
+"атрыбут ''index'' ({0}) для элемента ''layer'' павінен быць унікальным"
 
 msgid "missing layer with index {0}"
-msgstr ""
+msgstr "адсутнічае пласт з індэксам {0}"
 
 msgid "missing mandatory attribute ''name'' for element ''layer''"
-msgstr ""
+msgstr "адсутнічае абавязковы атрыбут ''name'' для элемента ''layer''"
 
 msgid "missing mandatory attribute ''type'' for element ''layer''"
-msgstr ""
+msgstr "адсутнічае абавязковы атрыбут ''type'' для элемента ''layer''"
 
 msgid "Unable to load layer"
-msgstr ""
+msgstr "Немагчыма загрузіць пласт"
 
 msgid ""
 "Cannot load layer of type ''{0}'' because no suitable importer was found."
 msgstr ""
+"Немагчыма загрузіць пласт тыпу ''{0}'', паколькі падыходны фільтр імпарту не "
+"знойдзены."
 
 msgid ""
 "Cannot load layer {0} because it depends on layer {1} which has been skipped."
 msgstr ""
+"Немагчыма загрузіць пласт {0}, паколькі ён залежыць ад пласта {1}, які быў "
+"прапушчаны."
 
 msgid "Error loading layer"
-msgstr ""
+msgstr "Памылка загрузкі пласта"
 
 msgid "<html>Could not load layer {0} ''{1}''.<br>Error is:<br>{2}</html>"
 msgstr ""
+"<html>Не атрымалася загрузіць пласт {0} ''{1}''.<br>Памылка:<br>{2}</html>"
 
 msgid "Skip layer and continue"
-msgstr ""
+msgstr "Прапусціць пласт і працягнуць"
 
 msgid "expected .jos file inside .joz archive"
-msgstr ""
+msgstr "чакаўся .jos файл у .joz архіве"
 
 msgid "Skip download"
-msgstr ""
+msgstr "Прапусціць спампоўку"
 
 msgid "Download Plugin"
-msgstr ""
+msgstr "Запампаваць модуль"
 
 msgid "Skip Download"
-msgstr ""
+msgstr "Прапусціць спампоўку"
 
 msgid "JOSM version {0} required for plugin {1}."
-msgstr ""
+msgstr "JOSM версіі {0} патрэбен модуль {1}."
 
 msgid "Download skipped"
-msgstr ""
+msgstr "Спампоўка прапушчана"
 
 msgid ""
 "Cannot download plugin ''{0}''. Its download link is not known. Skipping "
 "download."
 msgstr ""
+"Не атрымалася загрузіць модуль ''{0}''. Адрас для яго загрузкі невядомы. "
+"Пропуск загрузкі."
 
 msgid ""
 "Cannot download plugin ''{0}''. Its download link ''{1}'' is not a valid "
 "URL. Skipping download."
 msgstr ""
+"Не атрымалася загрузіць модуль ''{0}''. Спасылка ''{1}'' не з’яўляецца "
+"дзейсным URL. Пропуск загрузкі."
 
 msgid "Failed to create plugin directory ''{0}''"
-msgstr ""
+msgstr "Не атрымалася стварыць каталог модуля ''{0}''"
 
 msgid "Downloading Plugin {0}..."
-msgstr ""
+msgstr "Спампоўка модуля {0}..."
 
 msgid "An error occurred in plugin {0}"
-msgstr ""
+msgstr "У модулі {0} адбылася памылка"
 
 msgid "integrated into main program"
-msgstr ""
+msgstr "убудаванае ў асноўную праграму"
 
 msgid "replaced by new {0} plugin"
-msgstr ""
+msgstr "заменена новым {0} модулем"
 
 msgid "no longer required"
-msgstr ""
+msgstr "больш не патрабуецца"
 
 msgid "The following plugin is no longer necessary and has been deactivated:"
 msgid_plural ""
 "The following plugins are no longer necessary and have been deactivated:"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Наступны модуль больш не патрэбны і быў адключаны:"
+msgstr[1] "Наступны модулі больш не патрэбны і былі адключаны:"
+msgstr[2] "Наступны модулі больш не патрэбны і былі адключаны:"
 
 msgid ""
 "<html>Loading of the plugin \"{0}\" was requested.<br>This plugin is no "
 "longer developed and very likely will produce errors.<br>It should be "
 "disabled.<br>Delete from preferences?</html>"
 msgstr ""
+"<html>Была запытана загрузка модуля \"{0}\". <br> Гэты модуль больш не "
+"ўдасканальваецца і, падобна, што будзе памылкова працаваць.<br>Лепш яго "
+"адключыць.<br>Выдаліць яго з налад?</html>"
 
 msgid "Plugin update"
-msgstr ""
+msgstr "Абнаўленне модуля"
 
 msgid ""
 "You updated your JOSM software.<br>To prevent problems the plugins should be "
 "updated as well.<br><br>Update plugins now?"
 msgstr ""
+"Вы абнавілі ваша праграмнае забеспячэнне JOSM.<br>Каб не было праблем, "
+"модулі таксама варта абнавіць.<br><br>Абнавіць модулі зараз?"
 
 msgid "Last plugin update more than {0} days ago."
-msgstr ""
+msgstr "Апошняе абнаўленне модуля было больш {0} дзён назад"
 
 msgid "Click to update the activated plugins"
-msgstr ""
+msgstr "Націсніце, каб абнавіць усталяваныя модулі"
 
 msgid "Skip update"
-msgstr ""
+msgstr "Прапусціць абнаўленне"
 
 msgid "Click to skip updating the activated plugins"
-msgstr ""
+msgstr "Націсніце, каб прапусціць абнаўленне актываваных модуляў"
 
 msgid ""
 "Skipping plugin update after JOSM upgrade. Automatic update at startup is "
 "disabled."
 msgstr ""
+"Пропуск абнаўленне модуляў пасля абнаўлення JOSM. Аўтаматычнае абнаўленне "
+"пры старце адключана."
 
 msgid ""
 "Skipping plugin update after elapsed update interval. Automatic update at "
 "startup is disabled."
 msgstr ""
+"Пропуск перыядычнага абнаўлення модуляў JOSM. Аўтаматычнае абнаўленне пры "
+"старце адключана."
 
 msgid ""
 "Running plugin update after JOSM upgrade. Automatic update at startup is "
 "enabled."
 msgstr ""
+"Запуск абнаўлення модуля пасля абнаўлення JOSM. Аўтаматычнае абнаўленне ў "
+"момант запуску ўключана."
 
 msgid ""
 "Running plugin update after elapsed update interval. Automatic update at "
 "startup is disabled."
 msgstr ""
+"Запуск перыядычнага абнаўлення модуля. Аўтаматычнае абнаўленне ў момант "
+"запуску выключана."
 
 msgid ""
 "Unexpected value ''{0}'' for preference ''{1}''. Assuming value ''ask''."
 msgstr ""
+"Нечаканае значэнне ''{0}'' для налады ''{1}''. Прымаецца значэнне ''ask''."
 
 msgid ""
 "Plugin {0} requires a plugin which was not found. The missing plugin is:"
 msgid_plural ""
 "Plugin {0} requires {1} plugins which were not found. The missing plugins "
 "are:"
-msgstr[0] ""
+msgstr[0] "Модулю {0} патрабуецца модуль, які не знойдзены. Адсутны модуль:"
 msgstr[1] ""
+"Модулю {0} патрабуецца {1} модуля, якія не знойдзены. Адсутныя модулі:"
+msgstr[2] ""
+"Модулю {0} патрабуецца {1} модуляў, якія не знойдзены. Адсутныя модулі:"
+
+msgid "Download and restart"
+msgstr "Спампаваць і перазапусціць"
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] "Пстрыкніце, каб спампаваць адсутны модуль і перазапусціць JOSM"
+msgstr[1] "Пстрыкніце, каб спампаваць адсутныя модулі і перазапусціць JOSM"
+msgstr[2] "Пстрыкніце, каб спампаваць адсутныя модулі і перазапусціць JOSM"
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] "Пстрыкніце, каб працягнуць без гэтага модуля"
+msgstr[1] "Пстрыкніце, каб працягнуць без гэтых модуляў"
+msgstr[2] "Пстрыкніце, каб працягнуць без гэтых модуляў"
 
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
 msgstr ""
+"<html>Модулю {0} патрэбна версія JOSM {1}. Бягучая версія JOSM: {2}.<br>Вам "
+"неабходна абнавіць JOSM, калі вы хочаце карыстацца гэтым модулем.</html>"
 
 msgid "Could not load plugin {0}. Delete from preferences?"
-msgstr ""
+msgstr "Немагчыма загрузіць модуль {0}. Выдаліць з налад?"
 
 msgid "loading plugin ''{0}'' (version {1})"
-msgstr ""
+msgstr "загрузка модуля ''{0}'' (версія {1})"
 
 msgid ""
 "<html>Could not load plugin {0} because the plugin<br>main class ''{1}'' was "
 "not found.<br>Delete from preferences?</html>"
 msgstr ""
+"<html>Немагчыма загрузіць модуль {0}, бо не знойдзены<br>асноўны клас "
+"''{1}''.<br>Выдаліць з налад?</html>"
 
 msgid "Loading plugins ..."
-msgstr ""
+msgstr "Загрузка модуляў з сервера..."
 
 msgid "Checking plugin preconditions..."
-msgstr ""
+msgstr "Праверка ўваходных умоў для модуляў..."
 
 msgid "Loading plugin ''{0}''..."
-msgstr ""
+msgstr "Загрузка модуля ''{0}''..."
 
 msgid "JOSM could not find information about the following plugin:"
 msgid_plural "JOSM could not find information about the following plugins:"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "JOSM не змог знайсці інфармацыю пра модуль:"
+msgstr[1] "JOSM не змог знайсці інфармацыю пра наступныя модулі:"
+msgstr[2] "JOSM не змог знайсці інфармацыю пра наступныя модулі:"
 
 msgid "The plugin is not going to be loaded."
 msgid_plural "The plugins are not going to be loaded."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Модуль не загружаецца з сервера."
+msgstr[1] "Модулі не загружаюцца з сервера."
+msgstr[2] "Модулі не загружаюцца з сервера."
 
 msgid "Determine plugins to load..."
-msgstr ""
+msgstr "Вызначэнне модуляў для загрузкі з сервера..."
 
 msgid "Removing deprecated plugins..."
-msgstr ""
+msgstr "Выдаленне непажаданых модуляў..."
 
 msgid "Removing unmaintained plugins..."
-msgstr ""
+msgstr "Выдаленне непадтрымоўваных модуляў..."
 
 msgid "Updating the following plugin has failed:"
 msgid_plural "Updating the following plugins has failed:"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Абнаўленне наступнага модуля не атрымалася:"
+msgstr[1] "Абнаўленне наступных модуляў не атрымалася:"
+msgstr[2] "Абнаўленне наступных модуляў не атрымалася:"
 
 msgid ""
 "Please open the Preference Dialog after JOSM has started and try to update "
@@ -13144,184 +14640,211 @@ msgid_plural ""
 "Please open the Preference Dialog after JOSM has started and try to update "
 "them manually."
 msgstr[0] ""
+"Калі ласка, адкрыйце дыялог налад пасля запуску JOSM і паспрабуйце абнавіць "
+"яго ўручную."
 msgstr[1] ""
+"Калі ласка, адкрыйце дыялог налад пасля запуску JOSM і паспрабуйце абнавіць "
+"іх уручную."
+msgstr[2] ""
+"Калі ласка, адкрыйце дыялог налад пасля запуску JOSM і паспрабуйце абнавіць "
+"іх уручную."
 
 msgid "Plugin update failed"
-msgstr ""
+msgstr "Абнаўленне модуля не атрымалася"
 
 msgid "Failed to find plugin {0}"
-msgstr ""
+msgstr "Не атрымалася знайсці модуль {0}"
 
 msgid "Failed to download plugin information list"
-msgstr ""
+msgstr "Не атрымалася загрузіць спіс інфармацыі пра модулі"
 
 msgid "Disable plugin"
-msgstr ""
+msgstr "Адключыць модуль"
 
 msgid "Click to delete the plugin ''{0}''"
-msgstr ""
+msgstr "Націсніце, каб выдаліць модуль ''{0}''"
 
 msgid "Keep plugin"
-msgstr ""
+msgstr "Пакінуць модуль"
 
 msgid "Click to keep the plugin ''{0}''"
-msgstr ""
+msgstr "Націсніце, каб захаваць модуль ''{0}''"
 
 msgid "Failed to delete outdated plugin ''{0}''."
-msgstr ""
+msgstr "Не атрымалася выдаліць састарэлы модуль ''{0}''."
 
 msgid ""
 "Failed to install already downloaded plugin ''{0}''. Skipping installation. "
 "JOSM is still going to load the old plugin version."
 msgstr ""
+"Не атрымалася ўсталяваць загружаны модуль ''{0}''. Пропуск ўстаноўкі. JOSM "
+"загрузіць старую версію модуля."
 
 msgid ""
 "Failed to install plugin ''{0}'' from temporary download file ''{1}''. {2}"
 msgstr ""
+"Не атрымалася ўсталяваць модуль ''{0}'' з часовага файла загрузкі ''{1}''. "
+"{2}"
 
 msgid ""
 "Failed to install plugin ''{0}'' from temporary download file ''{1}''. "
 "Renaming failed."
 msgstr ""
+"Не атрымалася ўсталяваць модуль ''{0}'' з часовага файла загрузкі ''{1}''. "
+"Памылка перайменавання."
 
 msgid "Update plugin"
-msgstr ""
+msgstr "Абнавіць модуль"
 
 msgid "Click to update the plugin ''{0}''"
-msgstr ""
+msgstr "Націсніце для абнаўлення модуля ''{0}''"
 
 msgid "Click to disable the plugin ''{0}''"
-msgstr ""
+msgstr "Націсніце, каб адмяніць модуль ''{0}''"
 
 msgid ""
 "An unexpected exception occurred that may have come from the ''{0}'' plugin."
-msgstr ""
+msgstr "Адбылася нечаканая памылка. Магчыма, яна выклікана модулем ''{0}''."
 
 msgid "According to the information within the plugin, the author is {0}."
-msgstr ""
+msgstr "Паводле інфармацыі ў модулі, аўтарам з’яўляецца {0}."
 
 msgid ""
 "Try updating to the newest version of this plugin before reporting a bug."
 msgstr ""
+"Паспрабуйце абнавіць модуль да апошняй версіі, перш чым паведамляць пра "
+"памылку."
 
 msgid ""
 "The plugin has been removed from the configuration. Please restart JOSM to "
 "unload the plugin."
 msgstr ""
+"Модуль быў выдалены з канфігурацыі. Калі ласка, перазагрузіце JOSM, каб "
+"выгрузіць модуль."
 
 msgid "Plugin information"
-msgstr ""
+msgstr "Інфармацыя пра модуль"
 
 msgid "no description available"
-msgstr ""
+msgstr "апісанне адсутнічае"
 
 msgid ""
 "Do not ask again and remember my decision (go to Preferences->Plugins to "
 "change it later)"
 msgstr ""
+"Не пытаць і запомніць мой выбар (абярыце Налады->Модулі, каб змяніць яго "
+"пазней)"
 
 msgid "Invalid jar file ''{0}''"
-msgstr ""
+msgstr "Няправільны jar-файл ''{0}''"
 
 msgid "The plugin file ''{0}'' does not include a Manifest."
-msgstr ""
+msgstr "Файл модуля ''{0}'' не ўтрымоўвае дэкларацыі."
 
 msgid "Invalid URL ''{0}'' in plugin {1}"
-msgstr ""
+msgstr "Няслушная спасылка \"{0}\" у модулі {1}"
 
 msgid "Invalid plugin description ''{0}'' in plugin {1}"
-msgstr ""
+msgstr "Няправільнае апісанне модуля «{0}» у модулі {1}"
 
 msgid "Invalid plugin main version ''{0}'' in plugin {1}"
-msgstr ""
+msgstr "Няслушны асноўны нумар версіі модуля ''{0}'' у модулі {1}"
 
 msgid "Missing plugin main version in plugin {0}"
-msgstr ""
+msgstr "Адсутнічае асноўны нумар версіі ў модулі {0}"
 
 msgid "More info..."
-msgstr ""
+msgstr "Дадатковая інфармацыя..."
 
 msgid "<b>Plugin provided by an external source:</b> {0}"
-msgstr ""
+msgstr "<b>Модуль атрыманы з вонкавай крыніцы:</b> {0}"
 
 msgid "Failed to create plugin information from manifest for plugin ''{0}''"
-msgstr ""
+msgstr "Немагчыма выняць інфармацыю пра модуль з дэкларацыі модуля ''{0}''"
 
 msgid "Illegal entry in plugin list."
-msgstr ""
+msgstr "Некарэктны запіс у спісе модуляў."
 
 msgid "Reading local plugin information.."
-msgstr ""
+msgstr "Чытанне інфармацыі пра ўсталяваныя модулі..."
 
 msgid "Processing plugin site cache files..."
-msgstr ""
+msgstr "Модуль апрацоўкі файлаў кэша сайта..."
 
 msgid "Processing file ''{0}''"
-msgstr ""
+msgstr "Апрацоўка файла ''{0}''"
 
 msgid "Failed to scan file ''{0}'' for plugin information. Skipping."
 msgstr ""
+"Не атрымалася прасканаваць файл ''{0}'' на інфармацыю пра модулі. Пропуск."
 
 msgid "Processing plugin files..."
-msgstr ""
+msgstr "Апрацоўка файлаў модуляў..."
 
 msgid "Download plugin list..."
-msgstr ""
+msgstr "Спампоўка з сервера спісу модуляў..."
 
 msgid "Downloading plugin list from ''{0}''"
-msgstr ""
+msgstr "Спампоўка спісу модуляў з ''{0}''"
 
 msgid "Plugin list download error"
-msgstr ""
+msgstr "Памылка загрузкі спісу модуляў"
 
 msgid "JOSM failed to download plugin list:"
-msgstr ""
+msgstr "JOSM не атрымалася загрузіць спіс модуляў:"
 
 msgid "Details:"
-msgstr ""
+msgstr "Падрабязнасці:"
 
 msgid ""
 "Failed to create plugin directory ''{0}''. Cannot cache plugin list from "
 "plugin site ''{1}''."
 msgstr ""
+"Не атрымалася стварыць каталог модуляў ''{0}''. Памылка пры кэшаванні спісу "
+"модуляў з сайта ''{1}''."
 
 msgid "Writing plugin list to local cache ''{0}''"
-msgstr ""
+msgstr "Запіс спісу модуляў у лакальны кэш ''{0}''"
 
 msgid "Parsing plugin list from site ''{0}''"
-msgstr ""
+msgstr "Разбор спісу модуляў з сайта ''{0}''"
 
 msgid ""
 "Failed to parse plugin list document from site ''{0}''. Skipping site. "
 "Exception was: {1}"
 msgstr ""
+"Памылка разбору дакумента спісу модуляў з сайта ''{0}''. Сайт прапушчаны. "
+"Тэкст памылкі: {1}"
 
 msgid "Processing plugin list from site ''{0}''"
-msgstr ""
+msgstr "Апрацоўка спісу модуляў з сайта ''{0}''"
 
 msgid "This is after the end of the recording"
-msgstr ""
+msgstr "Гэта пазней канца запісу"
 
 msgid "unspecified reason"
-msgstr ""
+msgstr "нявызначаны чыннік"
 
 msgid "Error playing sound"
-msgstr ""
+msgstr "Памылка пры прайграванні гуку"
 
 msgid "Do nothing"
-msgstr ""
+msgstr "Нічога не рабіць"
 
 msgid "Report Bug"
-msgstr ""
+msgstr "Паведаміць пра памылку"
 
 msgid ""
 "An unexpected exception occurred.<br>This is always a coding error. If you "
 "are running the latest<br>version of JOSM, please consider being kind and "
 "file a bug report."
 msgstr ""
+"Адбылася нечаканая памылка.<br>Гэта заўсёды памылка праграмавання. Калі вы "
+"карыстаецеся апошняй<br>версіяй JOSM - не злічыце за працу, запоўніце, калі "
+"ласка, заяўку на выпраўленне памылкі (trac)."
 
 msgid "Update JOSM"
-msgstr ""
+msgstr "Абнавіць JOSM"
 
 msgid ""
 "An unexpected exception occurred. This is always a coding "
@@ -13330,44 +14853,59 @@ msgid ""
 "(<b>{1}</b>).<br><br><b>Please update JOSM</b> before considering to file a "
 "bug report."
 msgstr ""
+"Паўстала непрадбачаная выключная сітуацыя. Гэта заўсёды памылка "
+"праграмавання.<br><br>Але ў вас старая версія JOSM ({0}),<br>а не бягучая "
+"стабільная версія (<b>{1}</b>).<br><br><b>Калі ласка, абновіце JOSM</b> "
+"перад тым, як прымеце рашэнне аб адпраўцы справаздачы пра памылку."
 
 msgid "Unexpected Exception"
-msgstr ""
+msgstr "Нечаканая памылка"
 
 msgid "Suppress further error dialogs for this session."
-msgstr ""
+msgstr "Больш не паказваць памылкі ў гэтай сесіі"
 
 msgid ""
 "You have encountered an error in JOSM. Before you file a bug report make "
 "sure you have updated to the latest version of JOSM here:"
 msgstr ""
+"Вы выявілі памылку ў JOSM. Перш чым вы паведаміце нам пра яе, праверце што "
+"вы працуеце на апошняй версіі JOSM тут:"
 
 msgid ""
 "You should also update your plugins. If neither of those help please file a "
 "bug report in our bugtracker using this link:"
 msgstr ""
+"Вы таксама павінны абнавіць і модулі. Калі і гэта не дапаможа, паведаміце "
+"нам пра выяўленую памылку, скарыстаўшыся наступнай спасылкай:"
 
 msgid ""
 "There the error information provided below should already be filled in for "
 "you. Please include information on how to reproduce the error and try to "
 "supply as much detail as possible."
 msgstr ""
+"Прадстаўленая ніжэй інфармацыя пра памылку ўжо падрыхтавана для вас. Калі "
+"ласка, дадайце інфармацыю пра тое, як узнавіць памылку і паспрабуйце апісаць "
+"гэта настолькі падрабязна, наколькі гэта магчыма."
 
 msgid ""
 "Alternatively, if that does not work you can manually fill in the "
 "information below at this URL:"
 msgstr ""
+"Як альтэрнатыва, калі гэта не працуе, вы можаце ўручную ўпісаць інфармацыю "
+"ніжэй, па гэтым URL:"
 
 msgid "(The text has already been copied to your clipboard.)"
-msgstr ""
+msgstr "(Тэкст ужо скапіяваны ў буфер абмену)"
 
 msgid "You have encountered a bug in JOSM"
-msgstr ""
+msgstr "Вы сутыкнуліся з памылкай у JOSM"
 
 msgid ""
 "<html>Failed to initialize communication with the OSM server {0}.<br>Check "
 "the server URL in your preferences and your internet connection."
 msgstr ""
+"<html>Не атрымалася ініцыяваць сувязь з серверам OSM {0}.<br>Праверце URL "
+"сервера ў наладах і наяўнасць злучэння з Інтэрнэтам."
 
 msgid ""
 "<html>Failed to authenticate at the OSM server ''{0}''.<br>You are using "
@@ -13375,6 +14913,10 @@ msgid ""
 "configured.<br>Please open the Preferences Dialog and generate or enter an "
 "Access Token.</html>"
 msgstr ""
+"<html>Не атрымалася аўтэнтыфікавацца на серверы OSM ''{0}''.<br>Вы "
+"выкарыстоўваеце аўтэнтыфікацыю OAuth, але ў сапраўдны момант "
+"няма<br>сканфігураванага маркера доступу OAuth.<br>Калі ласка, адкрыйце "
+"дыялог налад і згенеруйце ці ўвядзіце маркер доступу.</html>"
 
 msgid ""
 "<strong>Failed</strong> to delete <strong>node {0}</strong>. It is still "
@@ -13385,7 +14927,17 @@ msgid_plural ""
 "referred to by nodes {1}.<br>Please load the nodes, remove the reference to "
 "the node, and upload again."
 msgstr[0] ""
+"<strong>Не атрымалася</strong> выдаліць <strong>кропку {0}</strong>. Яна ўсё "
+"яшчэ выкарыстоўваецца кропкай {1}.<br>Калі ласка, загрузіце кропку, выдаліце "
+"спасылку на кропку і перадайце на сервер ізноў."
 msgstr[1] ""
+"<strong>Не атрымалася</strong> выдаліць <strong>кропку {0}</strong>. Яна ўсё "
+"яшчэ выкарыстоўваецца кропкамі {1}.<br>Калі ласка, загрузіце кропкі, "
+"выдаліце спасылкі на кропку і перадайце на сервер ізноў."
+msgstr[2] ""
+"<strong>Не атрымалася</strong> выдаліць <strong>кропку {0}</strong>. Яна ўсё "
+"яшчэ выкарыстоўваецца кропкамі {1}.<br>Калі ласка, загрузіце кропкі, "
+"выдаліце спасылкі на кропку і перадайце на сервер ізноў."
 
 msgid ""
 "<strong>Failed</strong> to delete <strong>node {0}</strong>. It is still "
@@ -13396,7 +14948,17 @@ msgid_plural ""
 "referred to by ways {1}.<br>Please load the ways, remove the reference to "
 "the node, and upload again."
 msgstr[0] ""
+"<strong>Не атрымалася</strong> выдаліць <strong>кропку {0}</strong>. Яна ўсё "
+"яшчэ выкарыстоўваецца лініяй {1}.<br>Калі ласка, загрузіце лінію, выдаліце "
+"спасылку на кропку і перадайце на сервер ізноў."
 msgstr[1] ""
+"<strong>Не атрымалася</strong> выдаліць <strong>кропку {0}</strong>. Яна ўсё "
+"яшчэ выкарыстоўваецца лініямі {1}.<br>Калі ласка, загрузіце лініі, выдаліце "
+"спасылкі на кропку і перадайце на сервер ізноў."
+msgstr[2] ""
+"<strong>Не атрымалася</strong> выдаліць <strong>кропку {0}</strong>. Яна ўсё "
+"яшчэ выкарыстоўваецца лініямі {1}.<br>Калі ласка, загрузіце лініі, выдаліце "
+"спасылкі на кропку і перадайце на сервер ізноў."
 
 msgid ""
 "<strong>Failed</strong> to delete <strong>node {0}</strong>. It is still "
@@ -13407,7 +14969,17 @@ msgid_plural ""
 "referred to by relations {1}.<br>Please load the relations, remove the "
 "reference to the node, and upload again."
 msgstr[0] ""
+"<strong>Не атрымалася</strong> выдаліць <strong>кропку {0}</strong>. Яна ўсё "
+"яшчэ выкарыстоўваецца адносінамі {1}.<br>Калі ласка, загрузіце адносіны, "
+"выдаліце спасылку на кропку і перадайце на сервер зноў."
 msgstr[1] ""
+"<strong>Не атрымалася</strong> выдаліць <strong>кропку {0}</strong>. Яна ўсё "
+"яшчэ выкарыстоўваецца адносінамі {1}.<br>Калі ласка, загрузіце адносіны, "
+"выдаліце спасылку на кропку і перадайце на сервер зноў."
+msgstr[2] ""
+"<strong>Не атрымалася</strong> выдаліць <strong>кропку {0}</strong>. Яна ўсё "
+"яшчэ выкарыстоўваецца адносінамі {1}.<br>Калі ласка, загрузіце адносіны, "
+"выдаліце спасылку на кропку і перадайце на сервер зноў."
 
 msgid ""
 "<strong>Failed</strong> to delete <strong>way {0}</strong>. It is still "
@@ -13418,7 +14990,17 @@ msgid_plural ""
 "referred to by nodes {1}.<br>Please load the nodes, remove the reference to "
 "the way, and upload again."
 msgstr[0] ""
+"<strong>Не атрымалася</strong> выдаліць <strong>лінію {0}</strong>. Яна ўсё "
+"яшчэ выкарыстоўваецца кропкай {1}.<br>Калі ласка, загрузіце кропку, выдаліце "
+"спасылку на лінію і перадайце на сервер ізноў."
 msgstr[1] ""
+"<strong>Не атрымалася</strong> выдаліць <strong>лінію {0}</strong>. Яна ўсё "
+"яшчэ выкарыстоўваецца кропкамі {1}.<br>Калі ласка, загрузіце кропкі, "
+"выдаліце спасылкі на лінію і перадайце на сервер ізноў."
+msgstr[2] ""
+"<strong>Не атрымалася</strong> выдаліць <strong>лінію {0}</strong>. Яна ўсё "
+"яшчэ выкарыстоўваецца кропкамі {1}.<br>Калі ласка, загрузіце кропкі, "
+"выдаліце спасылкі на лінію і перадайце на сервер ізноў."
 
 msgid ""
 "<strong>Failed</strong> to delete <strong>way {0}</strong>. It is still "
@@ -13429,7 +15011,17 @@ msgid_plural ""
 "referred to by ways {1}.<br>Please load the ways, remove the reference to "
 "the way, and upload again."
 msgstr[0] ""
+"<strong>Не атрымалася</strong> выдаліць <strong>лінію {0}</strong>. Яна ўсё "
+"яшчэ выкарыстоўваецца лініяй {1}.<br>Калі ласка, загрузіце лінію, выдаліце "
+"спасылку на лінію і перадайце на сервер ізноў."
 msgstr[1] ""
+"<strong>Не атрымалася</strong> выдаліць <strong>лінію {0}</strong>. Яна ўсё "
+"яшчэ выкарыстоўваецца лініямі {1}.<br>Калі ласка, загрузіце лініі, выдаліце "
+"спасылкі на лінію і перадайце на сервер ізноў."
+msgstr[2] ""
+"<strong>Не атрымалася</strong> выдаліць <strong>лінію {0}</strong>. Яна ўсё "
+"яшчэ выкарыстоўваецца лініямі {1}.<br>Калі ласка, загрузіце лініі, выдаліце "
+"спасылкі на лінію і перадайце на сервер ізноў."
 
 msgid ""
 "<strong>Failed</strong> to delete <strong>way {0}</strong>. It is still "
@@ -13440,7 +15032,17 @@ msgid_plural ""
 "referred to by relations {1}.<br>Please load the relations, remove the "
 "reference to the way, and upload again."
 msgstr[0] ""
+"<strong>Не атрымалася</strong> выдаліць <strong>лінію {0}</strong>. Яна ўсё "
+"яшчэ выкарыстоўваецца адносінамі {1}.<br>Калі ласка, загрузіце адносіны, "
+"выдаліце спасылку на лінію і перадайце на сервер зноў."
 msgstr[1] ""
+"<strong>Не атрымалася</strong> выдаліць <strong>лінію {0}</strong>. Яна ўсё "
+"яшчэ выкарыстоўваецца адносінамі {1}.<br>Калі ласка, загрузіце адносіны, "
+"выдаліце спасылку на лінію і перадайце на сервер зноў."
+msgstr[2] ""
+"<strong>Не атрымалася</strong> выдаліць <strong>лінію {0}</strong>. Яна ўсё "
+"яшчэ выкарыстоўваецца адносінамі {1}.<br>Калі ласка, загрузіце адносіны, "
+"выдаліце спасылку на лінію і перадайце на сервер зноў."
 
 msgid ""
 "<strong>Failed</strong> to delete <strong>relation {0}</strong>. It is still "
@@ -13451,7 +15053,17 @@ msgid_plural ""
 "referred to by nodes {1}.<br>Please load the nodes, remove the reference to "
 "the relation, and upload again."
 msgstr[0] ""
+"<strong>Не атрымалася</strong> выдаліць <strong>адносіны {0}</strong>. Яно "
+"ўсё яшчэ выкарыстоўваецца кропкай {1}.<br>Калі ласка, загрузіце кропку, "
+"выдаліце спасылку на адносіны і перадайце на сервер ізноў."
 msgstr[1] ""
+"<strong>Не атрымалася</strong> выдаліць <strong>адносіны {0}</strong>. Яно "
+"ўсё яшчэ выкарыстоўваецца кропкамі {1}.<br>Калі ласка, загрузіце кропкі, "
+"выдаліце спасылкі на адносіны і перадайце на сервер ізноў."
+msgstr[2] ""
+"<strong>Не атрымалася</strong> выдаліць <strong>адносіны {0}</strong>. Яно "
+"ўсё яшчэ выкарыстоўваецца кропкамі {1}.<br>Калі ласка, загрузіце кропкі, "
+"выдаліце спасылкі на адносіны і перадайце на сервер ізноў."
 
 msgid ""
 "<strong>Failed</strong> to delete <strong>relation {0}</strong>. It is still "
@@ -13462,7 +15074,17 @@ msgid_plural ""
 "referred to by ways {1}.<br>Please load the ways, remove the reference to "
 "the relation, and upload again."
 msgstr[0] ""
+"<strong>Не атрымалася</strong> выдаліць <strong>адносіны {0}</strong>. Яно "
+"ўсё яшчэ выкарыстоўваецца лініяй {1}.<br>Калі ласка, загрузіце лінію, "
+"выдаліце спасылку на адносіны і перадайце на сервер ізноў."
 msgstr[1] ""
+"<strong>Не атрымалася</strong> выдаліць <strong>адносіны {0}</strong>. Яно "
+"ўсё яшчэ выкарыстоўваецца лініямі {1}.<br>Калі ласка, загрузіце лініі, "
+"выдаліце спасылкі на адносіны і перадайце на сервер ізноў."
+msgstr[2] ""
+"<strong>Не атрымалася</strong> выдаліць <strong>адносіны {0}</strong>. Яно "
+"ўсё яшчэ выкарыстоўваецца лініямі {1}.<br>Калі ласка, загрузіце лініі, "
+"выдаліце спасылкі на адносіны і перадайце на сервер ізноў."
 
 msgid ""
 "<strong>Failed</strong> to delete <strong>relation {0}</strong>. It is still "
@@ -13473,33 +15095,53 @@ msgid_plural ""
 "referred to by relations {1}.<br>Please load the relations, remove the "
 "reference to the relation, and upload again."
 msgstr[0] ""
+"<strong>Не атрымалася</strong> выдаліць <strong>адносіны {0}</strong>. Яно "
+"ўсё яшчэ выкарыстоўваецца адносіным {1}.<br>Калі ласка, загрузіце адносіны, "
+"выдаліце спасылку на адносіны і перадайце на сервер ізноў."
 msgstr[1] ""
+"<strong>Не атрымалася</strong> выдаліць <strong>адносіны {0}</strong>. Яно "
+"ўсё яшчэ выкарыстоўваецца адносінамі {1}.<br>Калі ласка, загрузіце адносіны, "
+"выдаліце спасылкі на адносіны і перадайце на сервер ізноў."
+msgstr[2] ""
+"<strong>Не атрымалася</strong> выдаліць <strong>адносіны {0}</strong>. Яно "
+"ўсё яшчэ выкарыстоўваецца адносінамі {1}.<br>Калі ласка, загрузіце адносіны, "
+"выдаліце спасылкі на адносіны і перадайце на сервер ізноў."
 
 msgid ""
 "<html>Uploading to the server <strong>failed</strong> because your "
 "current<br>dataset violates a precondition.<br>The error message "
 "is:<br>{0}</html>"
 msgstr ""
+"<html>Перадача на сервер <strong>не атрымалася</strong>, бо вашы "
+"дадзеныя<br> супярэчаць абавязковым умовам.<br> Паведамленне пра памылку: "
+"<br>{0}</html>"
 
 msgid ""
 "<html>Authentication at the OSM server with the username ''{0}'' "
 "failed.<br>Please check the username and the password in the JOSM "
 "preferences.</html>"
 msgstr ""
+"<html><Аўтэнтыфікацыя на серверы OSM з імем карыстальніка ''{0}'' не "
+"атрымалася.<br>Праверце імя карыстальніка і пароль у наладах JOSM.</html>"
 
 msgid ""
 "<html>Authentication at the OSM server with the OAuth token ''{0}'' "
 "failed.<br>Please launch the preferences dialog and retrieve another OAuth "
 "token.</html>"
 msgstr ""
+"<html>Аўтэнтыфікацыя на серверы OSM з маркерам OAuth ''{0}'' не "
+"атрымалася.<br>Калі ласка, запусціце дыялог налад і атрымаеце іншы маркер "
+"OAuth.</html>"
 
 msgid ""
 "<html>Authorisation at the OSM server failed.<br>The server reported the "
 "following error:<br>''{0}''</html>"
 msgstr ""
+"<html>Не атрымалася выканаць аўтарызацыю на серверы OSM.<br>Сервер паведаміў "
+"пра наступную памылку:<br>''{0}''</html>"
 
 msgid "<html>Authorisation at the OSM server failed.<br></html>"
-msgstr ""
+msgstr "<html>Не атрымалася аўтарызавацца на серверы OSM.<br></html>"
 
 msgid ""
 "<html>Authorisation at the OSM server with the OAuth token ''{0}'' "
@@ -13507,14 +15149,20 @@ msgid ""
 "resource<br>''{1}''.<br>Please launch the preferences dialog and retrieve "
 "another OAuth token.</html>"
 msgstr ""
+"<html>Аўтарызацыя на серверы OSM з дапамогай маркера OAuth ''{0}'' не "
+"атрымалася.<br>Дадзены маркер не падае  доступ да абароненых "
+"рэсурсаў<br>''{1}''.<br>Калі ласка, адкрыйце дыялог налад і атрымаеце новы "
+"маркер OAuth.</html>"
 
 msgid ""
 "<html>Communication with the OSM server ''{0}'' timed out. Please retry "
 "later.</html>"
 msgstr ""
+"<html>Мінуў час чакання сувязі з серверам OSM ''{0}''. Калі ласка, "
+"паспрабуйце пазней.</html>"
 
 msgid "no error message available"
-msgstr ""
+msgstr "няма паведамленняў пра памылкі"
 
 msgid ""
 "<html>Communication with the OSM server ''{0}''failed. The server "
@@ -13522,70 +15170,97 @@ msgid ""
 "message:<br><strong>Error code:<strong> {1}<br><strong>Error message "
 "(untranslated)</strong>: {2}</html>"
 msgstr ""
+"<html>Сувязь з серверам ''{0}'' не атрымалася. Сервер адказаў <br>наступным "
+"кодам пра памылку і наступным паведамленнем:<br><strong>Код памылкі:<strong> "
+"{1}<br><strong>Паведамленне пра памылку (ангел.)</strong>: {2}</html>"
 
 msgid ""
 "<html>Closing of changeset <strong>{0}</strong> failed <br>because it has "
 "already been closed."
 msgstr ""
+"<html>Не атрымалася зачыніць пакет правак <strong>{0}</strong><br>, бо ён "
+"быў зачынены раней."
 
 msgid ""
 "<html>Closing of changeset <strong>{0}</strong> failed<br> because it has "
 "already been closed on {1}."
 msgstr ""
+"<html>Не атрымалася зачыніць пакет правак <strong>{0}</strong><br>, бо ён "
+"ужо быў зачынены {1}."
 
 msgid ""
 "<html>The server reported that it has detected a conflict.<br>Error message "
 "(untranslated):<br>{0}</html>"
 msgstr ""
+"<html>Сервер паведаміў, што ён выявіў канфлікт.<br>Паведамленне пра памылку "
+"(ангел.):<br>{0}</html>"
 
 msgid "<html>The server reported that it has detected a conflict."
-msgstr ""
+msgstr "<html>Сервер паведаміў, што выяўлены канфлікт."
 
 msgid ""
 "<html>Failed to upload to changeset <strong>{0}</strong><br>because it has "
 "already been closed on {1}."
 msgstr ""
+"<html>Не атрымалася перадаць на сервер пакет правак "
+"<strong>{0}</strong><br>, бо ён ужо быў зачынены {1}."
 
 msgid ""
 "<html>Failed to open a connection to the remote server<br>''{0}''<br>for "
 "security reasons. This is most likely because you are running<br>in an "
 "applet and because you did not load your applet from ''{1}''."
 msgstr ""
+"<html>Памылка пры ўсталяванні злучэння з аддаленым серверам<br>''{0}''<br>па "
+"меркаваннях бяспекі. Хутчэй за ўсё, вы запусцілі аплет, не запампаваны з "
+"''{1}''."
 
 msgid ""
 "<html>Failed to open a connection to the remote server<br>''{0}''.<br>Please "
 "check your internet connection."
 msgstr ""
+"<html>Не атрымалася адкрыць злучэнне з аддаленым "
+"серверам<br>''{0}''.<br>Праверце наяўнасць злучэння з Інтэрнэтам."
 
 msgid ""
 "<html>Failed to upload data to or download data from<br>''{0}''<br>due to a "
 "problem with transferring data.<br>Details (untranslated): {1}</html>"
 msgstr ""
+"<html>Не атрымалася спампаваць дадзеныя з <br>«{0}» або адправіць іх "
+"туды<br>з-за праблемы пры перадачы дадзеных.<br>Падрабязнасці (без "
+"перакладу): {1}</html>"
 
 msgid ""
 "<html>Failed to download data. Its format is either unsupported, ill-formed, "
 "and/or inconsistent.<br><br>Details (untranslated): {0}</html>"
 msgstr ""
+"<html>Не атрымалася запампаваць дадзеныя. Іх фармат ці не падтрымліваецца, "
+"ці некарэктны, і/ці няўзгоднены.<br><br>Падрабязнасці (ангел.): {0}</html>"
 
 msgid "<html>Failed to download data.<br><br>Details: {0}</html>"
 msgstr ""
+"<html>Не атрымалася загрузіць дадзеныя.<br><br>Падрабязнасці: {0}</html>"
 
 msgid ""
 "<html>The OSM server<br>''{0}''<br>reported an internal server "
 "error.<br>This is most likely a temporary problem. Please try again later."
 msgstr ""
+"<html>Сервер OSM<br>''{0}''<br>паведаміў аб унутранай памылцы.<br>Хутчэй за "
+"ўсё, гэта часовая праблема. Паўтарыце спробу пазней."
 
 msgid "The OSM server ''{0}'' reported a bad request.<br>"
-msgstr ""
+msgstr "Сервер OSM ''{0}'' паведаміў пра няўдалы запыт.<br>"
 
 msgid ""
 "The area you tried to download is too big or your request was too "
 "large.<br>Either request a smaller area or use an export file provided by "
 "the OSM community."
 msgstr ""
+"Вобласць, якую вы жадаеце запампаваць, занадта вялікая ці запытана занадта "
+"шмат дадзеных.<br>Вылучыце меншую вобласць ці скарыстайцеся сродкамі "
+"экспарту файлаў OSM."
 
 msgid "<br>Error message(untranslated): {0}"
-msgstr ""
+msgstr "<br>Паведамленне пра памылку (без перакладу): {0}"
 
 msgid ""
 "The OSM server ''{0}'' does not know about an object<br>you tried to read, "
@@ -13593,12 +15268,19 @@ msgid ""
 "server or you are using an invalid URL to access<br>it. Please carefully "
 "check the server''s address ''{0}'' for typos."
 msgstr ""
+"Сервер OSM ''{0}'' не ведае пра аб’ект,<br>які вы спрабавалі прачытаць, "
+"абнавіць ці выдаліць. Або адпаведны аб’ект<br>не існуе на серверы, або вы "
+"выкарыстоўваеце няправільную URL-спасылку для<br>доступу да яго. Калі ласка, "
+"уважліва праверце адрас сервера ''{0}'' на прадмет памылак друку."
 
 msgid ""
 "<html>Failed to open a connection to the remote server<br>''{0}''.<br>Host "
 "name ''{1}'' could not be resolved. <br>Please check the API URL in your "
 "preferences and your internet connection."
 msgstr ""
+"<html>Збой злучэння з выдаленым серверам <br>''{0}''.<br>Для імя ''{1}'' "
+"немагчыма вызначыць адрас.<br>Калі ласка, праверце URL для API ў вашых "
+"наладах інтэрнэт злучэння."
 
 msgid ""
 "<html>The server reports that an object is deleted.<br><strong>Uploading "
@@ -13606,98 +15288,116 @@ msgid ""
 "<strong>Downloading failed</strong> if you tried to download this "
 "object.<br><br>The error message is:<br>{0}</html>"
 msgstr ""
+"<html>Сервер паведаміў, што аб''ект выдалены. br><strong>Адсылка на сервер "
+"не атрымалася,</strong>калі вы спрабавалі абнавіць або выдаліць гэты "
+"аб''ект.<br><strong>Спампаваць не атрымалася,</strong> калі вы спрабавалі "
+"спампаваць гэты аб''ект.<br><br>Паведамленне пра памылку:<br>{0}</html>"
 
 msgid "Unable to find translation for the locale {0}. Reverting to {1}."
-msgstr ""
+msgstr "Немагчыма знайсці пераклад {0}. Вернута да {1}."
 
 msgid ""
 "Fatal: failed to locate image ''{0}''. This is a serious configuration "
 "problem. JOSM will stop working."
 msgstr ""
+"Сур’ёзная памылка: не ўдалося знайсці выявы ''{0}''. Гэта з’яўляецца "
+"сур’ёзнай праблемай налад. JOSM не працуе."
 
 msgid "Failed to locate image ''{0}''"
-msgstr ""
+msgstr "Збой пошуку выявы ''{0}''"
 
 msgid "Failed to handle zip file ''{0}''. Exception was: {1}"
-msgstr ""
+msgstr "Не атрымалася апрацаваць zip-файл ''{0}''. Паўстала выключэнне: {1}"
 
 msgid ""
 "Failed to access directory ''{0}'' for security reasons. Exception was: {1}"
 msgstr ""
+"Няма доступу да каталога ''{0}'' па меркаваннях бяспекі. Памылка: {1}"
 
 msgid "{0}... [please type its number]"
-msgstr ""
+msgstr "{0}... [калі ласка, увядзіце яго нумар]"
 
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
 msgstr ""
+"Не атрымалася адкрыць URL. Цяпер не ўсталявана платформа. Калі ласка, "
+"усталюеце тып платформы спачатку."
 
 msgid "Opening URL: {0}"
-msgstr ""
+msgstr "Адкрыццё URL: {0}"
 
 msgid "zoom"
-msgstr ""
+msgstr "маштаба"
 
 msgid "latitude"
-msgstr ""
+msgstr "шыраты"
 
 msgid "longitude"
-msgstr ""
+msgstr "даўгаты"
 
 msgid "URL does not contain {0}/{1}/{2}"
-msgstr ""
+msgstr "URL не ўтрымоўвае {0}/{1}/{2}"
 
 msgid "URL does not contain valid {0}"
-msgstr ""
+msgstr "URL не ўтрымоўвае дакладнага значэння {0}"
 
 msgid "reserved"
-msgstr ""
+msgstr "зарэзервавана"
 
 msgid "Outdated Java version"
-msgstr ""
+msgstr "Састарэлая версія Java"
 
 msgid "Update Java"
-msgstr ""
+msgstr "Абнавіць Java"
 
 msgid "You are running version {0} of Java."
-msgstr ""
+msgstr "У вас версія Java {0}."
 
 msgid "April 2015"
-msgstr ""
+msgstr "Красавік 2015"
 
 msgid ""
 "This version is no longer supported by {0} since {1} and is not recommended "
 "for use."
 msgstr ""
+"Гэта версія больш не падтрымліваецца {0} з {1} і не рэкамендуецца для "
+"выкарыстання."
 
 msgid ""
 "JOSM will soon stop working with this version; we highly recommend you to "
 "update to Java {0}."
 msgstr ""
+"JOSM хутка перастане працаваць з гэтай версіяй. Мы настойліва раім выканаць "
+"абнаўленне да Java {0}."
 
 msgid "Would you like to update now ?"
-msgstr ""
+msgstr "Жадаеце выканаць абнаўленне цяпер?"
 
 msgid ""
 "A previous version of JOSM has installed a custom certificate in order to "
 "provide HTTPS support for Remote Control:"
 msgstr ""
+"У папярэдняй версіі JOSM быў уласны сертыфікат для таго, каб мець падтрымку "
+"HTTPS для аддаленага кіравання:"
 
 msgid ""
 "It appears it could be an important <b>security risk</b>.<br><br>You are now "
 "going to be prompted by Windows to remove this insecure certificate.<br>For "
 "your own safety, <b>please click Yes</b> in next dialog."
 msgstr ""
+"Гэта можа стацца сур''ёзнай <b>пагрозай бяспекі</b>.<br><br>Зараз Windows "
+"прапануе вам выдаліць гэты небяспечны сертыфікат.<br>Для ўласнай бяспекі "
+"<b>выберыце «Так»</b> ў наступным дыялогу."
 
 msgid "Removing insecure certificate from {0} keystore: {1}"
-msgstr ""
+msgstr "Выдаленне небяспечнага сертыфіката са сховішча ключоў {0} : {1}"
 
 msgid "Unable to remove insecure certificate from keystore: {0}"
-msgstr ""
+msgstr "Не атрымалася выдаліць небяспечны сертыфікат са сховішча ключоў: {0}"
 
 msgid "JOSM localhost certificate found in {0} keystore: {1}"
-msgstr ""
+msgstr "Сертыфікат JOSM знаходзіцца ў сховішчы ключоў {0}: {1}"
 
 msgid ""
 "Remote Control is configured to provide HTTPS support.<br>This requires to "
@@ -13707,1402 +15407,1496 @@ msgid ""
 "next dialog.<br><br>If unsure, you can also click No then disable HTTPS "
 "support in Remote Control preferences."
 msgstr ""
+"Дыстанцыйнае кіраванне наладжана на падтрымку HTTPS.<br>Для гэтага трэба "
+"дадаць сертыфікат, згенераваны JOSM, у сховішча каранёвых цэнтраў "
+"сертыфікацыі Windows.<br><br>Зараз Windows прапануе вам пацвердзіць гэта "
+"дзеянне.<br>Для забеспячэння падтрымкі HTTPS <b>націсніце «Так»</b> ў "
+"наступным акне.<br><br>Калі вы не ўпэўненыя, можаце выбраць «Не», і затым "
+"выключыць падтрымку HTTPS у наладах Дыстанцыйнага кіравання."
 
 msgid "HTTPS support in Remote Control"
-msgstr ""
+msgstr "Падтрымка HTTPS ў Дыстанцыйным кіраванні"
 
 msgid "Adding JOSM localhost certificate to {0} keystore"
-msgstr ""
+msgstr "Даданне лакальнага сертыфіката JOSM ў сховішча ключоў {0}"
 
 msgid "Silent shortcut conflict: ''{0}'' moved by ''{1}'' to ''{2}''."
 msgstr ""
+"Канфлікт камбінацый клавіш: ''{0}'' пераназначаны з ''{1}'' на ''{2}''."
 
 msgid "There was {0} tag found in the buffer, it is suspicious!"
 msgid_plural "There were {0} tags found in the buffer, it is suspicious!"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "У буферы знойдзены {0} тэг, гэта падазрона!"
+msgstr[1] "У буферы знойдзены {0} тэгі, гэта падазрона!"
+msgstr[2] "У буферы знойдзены {0} тэгаў, гэта падазрона!"
 
 msgid "Key is too long (max {0} characters):"
-msgstr ""
+msgstr "Занадта доўгі ключ (максімум {0} знакаў):"
 
 msgid "Suspicious characters in key:"
-msgstr ""
+msgstr "Падазроныя знакі ў ключы:"
 
 msgid "Value is too long (max {0} characters):"
-msgstr ""
+msgstr "Занадта доўгае значэнне (максімум {0} знакаў):"
 
 msgid "Do you want to paste these tags?"
-msgstr ""
+msgstr "Уставіць гэтыя тэгі?"
 
 msgid "Clear buffer"
-msgstr ""
+msgstr "Ачысціць буфер"
 
 msgid "Ignore warnings"
-msgstr ""
+msgstr "Ігнараваць папярэджанні"
 
 msgid ""
 "<html><p> Sorry, it is impossible to paste tags from buffer. It does not "
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
+"<html><p>На жаль, немагчыма ўставіць тэгі з буфера абмену. Ён не ўтрымлівае "
+"аб`ектаў JOSM або адпаведнага тэксту.</p></html>"
 
 msgid "ms"
-msgstr ""
+msgstr "мс"
 
 msgid "s"
-msgstr ""
+msgstr "с"
 
 msgid "min"
-msgstr ""
+msgstr "мін"
 
 msgid "h"
-msgstr ""
+msgstr "г"
 
 msgid "day"
 msgid_plural "days"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "дзень"
+msgstr[1] "дня"
+msgstr[2] "дзён"
 
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
 msgstr ""
+"Налада з ключом ''{0}'' не ўтрымоўвае ''{1}''. Немагчыма аднавіць геаметрыю "
+"акна з налад."
 
 msgid ""
 "Preference with key ''{0}'' does not provide an int value for ''{1}''. Got "
 "{2}. Cannot restore window geometry from preferences."
 msgstr ""
+"Налада з ключом ''{0}'' не ўтрымоўвае цэлае (int) значэнне для ''{1}''. "
+"Атрымана {2}. Немагчыма аднавіць геаметрыю акна з дапамогай параметраў."
 
 msgid ""
 "Failed to parse field ''{1}'' in preference with key ''{0}''. Exception was: "
 "{2}. Cannot restore window geometry from preferences."
 msgstr ""
+"Памылка пры аналізе поля ''{1}'' у наладзе з ключом ''{0}''. Тэкст памылкі: "
+"{2}. Немагчыма аднавіць геаметрыю акна ў адпаведнасці з наладамі."
 
 msgid ""
 "Preference with key ''{0}'' does not exist. Cannot restore window geometry "
 "from preferences."
 msgstr ""
+"Налада з ключом ''{0}'' не існуе. Немагчыма аднавіць геаметрыю акна ў "
+"адпаведнасці з наладамі."
 
 msgid "Ignoring malformed geometry: {0}"
-msgstr ""
+msgstr "Ігнараванне скажонай геаметрыі: {0}"
 
 msgid "Failed to load XML schema."
-msgstr ""
+msgstr "Немагчыма загрузіць XML схему."
 
 msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
+"Памылка ў пошукавым выразе ў пазіцыі {0} - правая частка выраза or(|) "
+"павінна вяртаць набор элементаў"
 
 msgid ""
 "Error in search expression on position {0} - left side of or(|) expression "
 "must return set of primitives"
 msgstr ""
+"Памылка ў пошукавым выразе ў пазіцыі {0} - левая частка выраза or(|) павінна "
+"вяртаць набор элементаў"
 
 msgid ""
 "Error in search expression on position {0} - not(-) cannot be used in this "
 "context"
 msgstr ""
+"Памылка ў пошукавым выразе ў пазіцыі {0} -  not(-) не можа быць скарыстана ў "
+"гэтым кантэксце"
 
 msgid ""
 "Error in search expression on position {0} - expression must return "
 "different then current primitive"
 msgstr ""
+"Памылка ў пошукавым выразе ў пазіцыі {0} - выраз павінен вяртаць нешта "
+"іншае, а не бягучы прымітыў"
 
 msgid "Unexpected token ({0}) on position {1}"
-msgstr ""
+msgstr "Нечаканая лексема ({0}) у пазіцыі {1}"
 
 msgid "Unexpected token on position {0}. Expected {1}, found {2}"
-msgstr ""
+msgstr "Нечаканая лексема ў пазіцыі {0}. Чакалася {1}, выяўлена {2}"
 
 msgid "Error while parsing search expression on position {0}"
-msgstr ""
+msgstr "Памылка пры разборы пошукавага выраза ў пазіцыі {0}"
 
 msgid "Unexpected char on {0}. Expected {1} found {2}"
-msgstr ""
+msgstr "Нечаканы знак у {0}. Чакаўся {1} выяўлены {2}"
 
 msgid "Expected search expression"
-msgstr ""
+msgstr "Чаканы пошукавы выраз"
 
 msgid ""
 "You requested too many nodes (limit is 50,000). Either request a smaller "
 "area, or use planet.osm"
 msgstr ""
+"Запытана занадта шмат кропак (максімум - 50 000). Абярыце меншую вобласць, "
+"або выкарыстоўвайце planet.osm"
 
 msgid "Database offline for maintenance"
-msgstr ""
+msgstr "База дадзеных адключана на абслугоўванне"
 
 msgid "You have downloaded too much data. Please try again later."
-msgstr ""
+msgstr "Вы загрузілі занадта шмат дадзеных. Калі ласка, паспрабуйце пазней."
 
 msgid ""
 "The maximum bbox size is 0.25, and your request was too large. Either "
 "request a smaller area, or use planet.osm"
 msgstr ""
+"Максімальны памер габарытнага прамавугольніка - 0,25. Вы запыталі занадта "
+"вялікі ўчастак. Паменшыце ўчастак або скарыстайцеся файлам planet.osm."
 
 msgid "JOSM-Trac login at josm.openstreetmap.de"
-msgstr ""
+msgstr "Лагін JOSM-Trac на josm.openstreetmap.de"
 
 msgid "could not get audio input stream from input URL"
-msgstr ""
+msgstr "не можа атрымаць аўдыё струмень з уведзенага URL"
 
 msgid "Audio Device Unavailable"
-msgstr ""
+msgstr "Аўдыёпрылада недаступна"
 
 msgid "You must make your edits public to upload new data"
 msgstr ""
+"Вы павінны зрабіць Вашы праўкі агульнадаступнымі, каб перадаць новыя "
+"дадзеныя на сервер"
 
 msgid "town"
-msgstr ""
+msgstr "адм. цэнтр"
 
 msgctxt "landuse"
 msgid "forest"
-msgstr ""
+msgstr "даглядаемы лес"
 
 msgctxt "landuse"
 msgid "meadow"
-msgstr ""
+msgstr "сенажаць"
 
 msgctxt "landuse"
 msgid "farmland"
-msgstr ""
+msgstr "поле"
 
 msgctxt "landuse"
 msgid "residential"
-msgstr ""
+msgstr "жылыя кварталы"
 
 msgctxt "natural"
 msgid "scrub"
-msgstr ""
+msgstr "хмызняк"
 
 msgctxt "Relation type"
 msgid "associatedStreet"
-msgstr ""
+msgstr "Вуліца"
 
 msgctxt "Relation type"
 msgid "boundary"
-msgstr ""
+msgstr "мяжа"
 
 msgctxt "Relation type"
 msgid "bridge"
-msgstr ""
+msgstr "мост"
 
 msgctxt "Relation type"
 msgid "destination_sign"
-msgstr ""
+msgstr "паказальнік кірунку"
 
 msgctxt "Relation type"
 msgid "enforcement"
-msgstr ""
+msgstr "абмежаванне"
 
 msgctxt "Relation type"
 msgid "multipolygon"
-msgstr ""
+msgstr "мультыпалігон"
 
 msgctxt "Relation type"
 msgid "network"
-msgstr ""
+msgstr "сетка"
 
 msgctxt "Relation type"
 msgid "public_transport"
-msgstr ""
+msgstr "грамадскі транспарт"
 
 msgctxt "Relation type"
 msgid "restriction"
-msgstr ""
+msgstr "абмежаванне"
 
 msgctxt "Relation type"
 msgid "route"
-msgstr ""
+msgstr "маршрут"
 
 msgctxt "Relation type"
 msgid "route_master"
-msgstr ""
+msgstr "майстар-маршрут"
 
 msgctxt "Relation type"
 msgid "site"
-msgstr ""
+msgstr "наваколле"
 
 msgctxt "Relation type"
 msgid "street"
-msgstr ""
+msgstr "вуліца"
 
 msgctxt "Relation type"
 msgid "tunnel"
-msgstr ""
+msgstr "тунэль"
 
 msgctxt "Relation type"
 msgid "waterway"
-msgstr ""
+msgstr "водны шлях"
 
 msgctxt "Place type"
 msgid "city"
-msgstr ""
+msgstr "буйны горад"
 
 msgctxt "Place type"
 msgid "locality"
-msgstr ""
+msgstr "мясцовасць"
 
 msgctxt "Place type"
 msgid "village"
-msgstr ""
+msgstr "сяло"
 
 msgctxt "Place type"
 msgid "town"
-msgstr ""
+msgstr "горад"
 
 msgctxt "Place type"
 msgid "borough"
-msgstr ""
+msgstr "пасёлак"
 
 msgctxt "Place type"
 msgid "municipality"
-msgstr ""
+msgstr "муніцыпалітэт"
 
 msgctxt "Place type"
 msgid "island"
-msgstr ""
+msgstr "выспа"
 
 msgctxt "Place type"
 msgid "county"
-msgstr ""
+msgstr "акруга"
 
 msgctxt "Place type"
 msgid "hamlet"
-msgstr ""
+msgstr "вёска"
 
 msgctxt "Place type"
 msgid "suburb"
-msgstr ""
+msgstr "гарадскі раён"
 
 msgid "All Files"
-msgstr ""
+msgstr "Усе файлы"
 
 msgid "Attributes"
-msgstr ""
+msgstr "Атрыбуты"
 
 msgid "Abort file chooser dialog"
-msgstr ""
+msgstr "Зачыніць дыялогавае акно выбару файла"
 
 msgid "Abort file chooser dialog."
-msgstr ""
+msgstr "Адмяніць дыялог выбару файла."
 
 msgid "Create New Folder"
-msgstr ""
+msgstr "Стварыць новую тэчку"
 
 msgid "Delete File"
-msgstr ""
+msgstr "Выдаліць файл"
 
 msgid "Enter file name:"
-msgstr ""
+msgstr "Калі ласка, увядзіце імя файла:"
 
 msgid "Enter path or folder name:"
-msgstr ""
+msgstr "Увядзіце шлях ці імя каталога:"
 
 msgid "Error "
-msgstr ""
+msgstr "Памылка "
 
 msgid "Error renaming file \"{0}\" to \"{1}\""
-msgstr ""
+msgstr "Памылка пераназвання файла \"{0}\" у \"{1}\""
 
 msgid "File name:"
-msgstr ""
+msgstr "Імя файла:"
 
 msgid "File Name:"
-msgstr ""
+msgstr "Імя файла:"
 
 msgid "FileChooser help."
-msgstr ""
+msgstr "Даведка па выбары файла."
 
 msgid "Files"
-msgstr ""
+msgstr "Файлы"
 
 msgid "Files of type:"
-msgstr ""
+msgstr "Файлы тыпу:"
 
 msgid "Files of Type:"
-msgstr ""
+msgstr "Файлы тыпу:"
 
 msgid "Filter:"
-msgstr ""
+msgstr "Фільтр:"
 
 msgid "Folders"
-msgstr ""
+msgstr "Каталогі"
 
 msgid "Home"
-msgstr ""
+msgstr "Хатняя тэчка"
 
 msgid "Look in:"
-msgstr ""
+msgstr "Шукаць у:"
 
 msgid "Look In:"
-msgstr ""
+msgstr "Тэчка:"
 
 msgid "Modified"
-msgstr ""
+msgstr "Зменена"
 
 msgid "New Folder"
-msgstr ""
+msgstr "Новая тэчка"
 
 msgid "Open selected file"
-msgstr ""
+msgstr "Адкрыць абраны файл"
 
 msgid "Open selected file."
-msgstr ""
+msgstr "Адкрыць абраны файл"
 
 msgid "Refresh"
-msgstr ""
+msgstr "Абнавіць"
 
 msgid "Rename File"
-msgstr ""
+msgstr "Пераназваць файл"
 
 msgid "Rename file \"{0}\" to"
-msgstr ""
+msgstr "Змяніць імя файла \"{0}\" на"
 
 msgid "Save in:"
-msgstr ""
+msgstr "Захаваць у:"
 
 msgid "Save In:"
-msgstr ""
+msgstr "Захаваць у:"
 
 msgid "Save selected file."
-msgstr ""
+msgstr "Захаваць вылучаны файл."
 
 msgid "Selection:"
-msgstr ""
+msgstr "Вылучэнне:"
 
 msgid "Size"
-msgstr ""
+msgstr "Памер"
 
 msgid "Up One Level"
-msgstr ""
+msgstr "Угару на адзін узровень"
 
 msgid "Update"
-msgstr ""
+msgstr "Абнавіць"
 
 msgid "Update directory listing."
-msgstr ""
+msgstr "Абнавіць спіс каталога."
+
+msgid "View"
+msgstr "Прагляд"
 
 msgid "Blue:"
-msgstr ""
+msgstr "Сіні:"
 
 msgid "Color Name:"
-msgstr ""
+msgstr "Колер:"
 
 msgid "Green:"
-msgstr ""
+msgstr "Зялёны:"
 
 msgid "Hue:"
-msgstr ""
+msgstr "Адценне:"
 
 msgid "GTK Color Chooser"
-msgstr ""
+msgstr "Выбар колеру GTK"
 
 msgid "Red:"
-msgstr ""
+msgstr "Чырвоны:"
 
 msgid "Saturation:"
-msgstr ""
+msgstr "Насычанасць:"
 
 msgid "Landsat"
-msgstr ""
+msgstr "Landsat"
 
 msgid "Bing aerial imagery"
-msgstr ""
+msgstr "Спадарожнікавыя здымкі Bing"
 
 msgid "HDM (Humanitarian OpenStreetMap Team)"
-msgstr ""
+msgstr "HDM (каманда па стварэнні карт гуманітарнай дапамогі OpenStreetMap)"
 
 msgid "Mapbox Satellite"
-msgstr ""
+msgstr "Спадарожнікавыя здымкі Mapbox"
 
 msgid "MapQuest Open Aerial"
-msgstr ""
+msgstr "MapQuest Open Aerial"
 
 msgid "OpenStreetMap GPS Traces"
-msgstr ""
+msgstr "GPS-трэкі OpenStreetMap"
 
-msgid "OpenStreetMap (Mapnik)"
-msgstr ""
+msgid "OpenStreetMap (Standard layer)"
+msgstr "OpenStreetMap (Стандартны пласт)"
 
 msgid "skobbler"
-msgstr ""
+msgstr "skobbler"
 
 msgid "OpenStreetMap (Mapnik Black & White)"
-msgstr ""
+msgstr "OpenStreetMap (Mapnik чорна-белы)"
 
 msgid "OpenStreetMap (Mapnik, no labels)"
-msgstr ""
-
-msgid "skobbler heatmap"
-msgstr ""
+msgstr "OpenStreetMap (Mapnik, без подпісаў)"
 
 msgid "OpenCycleMap"
-msgstr ""
+msgstr "OpenCycleMap"
 
 msgid "MapQuest OSM"
-msgstr ""
+msgstr "MapQuest OSM"
 
 msgid "Public Transport (ÖPNV)"
-msgstr ""
+msgstr "Грамадскі транспарт (ÖPNV)"
 
 msgid "OpenStreetMap (German Style)"
-msgstr ""
+msgstr "OpenStreetMap (нямецкі стыль)"
 
 msgid "Cambodia, Laos, Thailand, Vietnam bilingual"
-msgstr ""
+msgstr "Камбоджа, Лаос, Тайланд, В''етнам 2-моўная"
 
 msgid "osmfr"
-msgstr ""
+msgstr "osmfr"
 
 msgid "OpenPT Map (overlay)"
-msgstr ""
+msgstr "OpenPT Map (аверлэй)"
 
 msgid "Strava cycling heatmap"
-msgstr ""
+msgstr "Strava цеплавая веламапа"
 
 msgid "Strava running heatmap"
-msgstr ""
+msgstr "Strava цеплавая карта бегуноў"
 
 msgid "Locator Overlay"
-msgstr ""
+msgstr "MapBox Locator (аверлэй)"
 
 msgid "QA No Address"
-msgstr ""
+msgstr "QA (без адрасоў)"
 
 msgid "Waymarked Trails: Hiking"
-msgstr ""
+msgstr "Waymarked Trails: Пешшу"
 
 msgid "Waymarked Trails: Cycling"
-msgstr ""
+msgstr "Waymarked Trails: веласпорт"
 
 msgid "Waymarked Trails: MTB"
-msgstr ""
+msgstr "Waymarked Trails: горны веласпорт"
 
 msgid "Waymarked Trails: Skating"
-msgstr ""
+msgstr "Waymarked Trails: ролікавыя канькі"
 
 msgid "Waymarked Trails: Horse Riding"
-msgstr ""
+msgstr "Waymarked Trails: верхавая язда"
 
 msgid "Waymarked Trails: Winter Sports"
-msgstr ""
+msgstr "Waymarked Trails: Зімовыя віды спорту"
 
 msgid "OSM Inspector: Geometry"
-msgstr ""
+msgstr "OSM Inspector: геаметрыя"
 
 msgid "OSM Inspector: Tagging"
-msgstr ""
+msgstr "OSM Inspector: тэгі"
 
 msgid "OSM Inspector: Places"
-msgstr ""
+msgstr "OSM Inspector: Месцы"
 
 msgid "OSM Inspector: Highways"
-msgstr ""
+msgstr "OSM Inspector: Аўтадарогі"
 
 msgid "OSM Inspector: Multipolygon"
-msgstr ""
+msgstr "OSM Inspector: Мультыпалігоны"
 
 msgid "OSM Inspector: Routing"
-msgstr ""
+msgstr "OSM Inspector: Маршруты"
 
 msgid "OSM Inspector: Addresses"
-msgstr ""
+msgstr "OSM Inspector: Адрасы"
 
 msgid "OSM Inspector: Boundaries (EU)"
-msgstr ""
+msgstr "OSM Inspector: Межы (EU)"
 
 msgid "AGRI black-and-white 2.5m"
-msgstr ""
+msgstr "AGRI чорна-белая 2.5м"
 
 msgid "Geoimage.at MaxRes"
-msgstr ""
+msgstr "Geoimage.at MaxRes"
 
 msgid "basemap.at"
-msgstr ""
+msgstr "basemap.at"
 
 msgid "basemap.at Orthofoto"
-msgstr ""
+msgstr "basemap.at артафота"
 
 msgid "Graz: Basiskarte (base map)"
-msgstr ""
+msgstr "Грац: Базавая мапа"
 
 msgid "Tiris: DGM (Terrain model)"
-msgstr ""
+msgstr "Tiris: DGM (мадэль рэльефу)"
 
 msgid "Tiris: DOM (Surface model)"
-msgstr ""
+msgstr "Tiris: DOM (мадэль паверхні)"
 
 msgid "Vienna: Mehrzweckkarte (general purpose)"
-msgstr ""
+msgstr "Вена: шматмэтавая карта (агульнага прызначэння)"
 
 msgid "Vienna: Beschriftungen (annotations)"
-msgstr ""
+msgstr "Вена: Адзнакі (анатацыі)"
 
 msgid "Vienna: Orthofoto (aerial image)"
-msgstr ""
+msgstr "Вена: артафота (аэрафотаздымак)"
 
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
-msgstr ""
+msgstr "VoGIS: Поўнакаляровая выява 2012 (12см)"
+
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr "VoGIS: Поўнакаляровая выява 2015 (15см)"
 
 msgid "VoGIS: Flächenwidmungsplan"
-msgstr ""
+msgstr "VoGIS: Планы"
 
 msgid "VoGIS: DGM (Terrain model)"
-msgstr ""
+msgstr "VoGIS: DGM (Мадэль глеб)"
 
 msgid "VoGIS: DOM (Surface model)"
-msgstr ""
+msgstr "VoGIS: DOM (Мадель паверхні)"
 
 msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
-msgstr ""
+msgstr "AGIV (Фландрыя) аэрафотаздымкі (пакрываюць Брусель) (2013)"
+
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr "SPW (allonie) лічбавыя выявы PICC"
 
 msgid "SPW(allonie) 2012 aerial imagery"
-msgstr ""
+msgstr "SPW (allonie) 2012 аэрафотаздымкі"
 
 msgid "SPW(allonie) 2009 aerial imagery"
+msgstr "SPW (allonie) 2009 аэрафотаздымкі"
+
+msgid "cadastre: for names and house numbers only, bad geometry"
 msgstr ""
 
 msgid "IBGE Mapa de Setores Urbanos"
-msgstr ""
+msgstr "IBGE Карта гарадскіх раёнаў"
 
 msgid "IBGE Mapa de Setores Rurais"
-msgstr ""
+msgstr "IBGE Карта сельскіх раёнаў"
 
 msgid "Geobase Hydrography"
-msgstr ""
+msgstr "Geobase Гідраграфія"
 
 msgid "Geobase Roads"
-msgstr ""
+msgstr "Geobase (дарогі)"
 
 msgid "Canvec"
-msgstr ""
+msgstr "Canvec"
 
 msgid "British Columbia Mosaic"
-msgstr ""
+msgstr "Брытанская Калумбія Мазаіка"
 
 msgid "Kelowna 2012"
-msgstr ""
+msgstr "Келоўна 2012"
 
 msgid "Kelowna Roads overlay"
-msgstr ""
+msgstr "Келоўна - оверлэй дарог"
 
 msgid "Czech CUZK:KM"
-msgstr ""
+msgstr "Чэхія CUZK:KM"
 
 msgid "Czech RUIAN budovy"
-msgstr ""
+msgstr "Чэхія RUIAN будынкі"
 
 msgid "Czech RUIAN parcely"
-msgstr ""
+msgstr "Чэхія RUIAN ўчасткі"
 
 msgid "Czech pLPIS"
-msgstr ""
-
-msgid "Fugro (Denmark)"
-msgstr ""
+msgstr "Чэхія pLPIS"
 
 msgid "Geodatastyrelsen (Denmark)"
-msgstr ""
+msgstr "Geodatastyrelsen (Данія)"
+
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr "Геададзеныя агенцтва DTK Kort25"
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr "Агенцтва геададзеных Skyggekort 1.6 м"
+
+msgid "Geodatastyrelsen Skærmkort"
+msgstr "Геададзеныя агенцтва Skærmkort"
 
 msgid "Stevns (Denmark)"
-msgstr ""
+msgstr "Стэвнс (Данія)"
 
 msgid "Vejmidte (Denmark)"
-msgstr ""
+msgstr "Vejmidte (Данія)"
 
 msgid "Estonia Basemap (Maaamet)"
-msgstr ""
+msgstr "Эстонія Базавая карта (Maaamet)"
 
 msgid "Estonia Ortho (Maaamet)"
-msgstr ""
+msgstr "Эстонія: артафота (Maaamet)"
 
 msgid "Estonia Hillshade (Maaamet)"
-msgstr ""
+msgstr "Эстонія рэльеф (Maaamet)"
 
 msgid "Estonia Cadastre (Maaamet)"
-msgstr ""
+msgstr "Эстонія кадастр (Maaamet)"
 
 msgid "Estonia Forestry (Maaamet)"
-msgstr ""
+msgstr "Эстонія лясы (Maaamet)"
 
 msgid "BANO"
-msgstr ""
+msgstr "BANO"
+
+msgid "BD Carthage"
+msgstr "BD Карфаген"
 
 msgid "Bordeaux - 2012"
-msgstr ""
+msgstr "Бардо - 2012"
 
 msgid "Cadastre"
-msgstr ""
+msgstr "Кадастр"
 
 msgid "CRAIG - Auvergne 2013 - 25 cm"
-msgstr ""
+msgstr "CRAIG - Овернь 2013 - 25 см"
 
 msgid "CRIGE PACA Alpes-Maritimes 2009 - 40 cm"
-msgstr ""
+msgstr "CRIGE PACA Прыморскія Альпы 2009 - 40 см"
 
 msgid "GrandNancy Orthophotographie 2012"
-msgstr ""
+msgstr "Вялікі Нансі: артафота 2012"
 
 msgid "Géobretagne - Brest 2010 - 10 cm"
-msgstr ""
+msgstr "Géobretagne - Брэст 2010 - 10 см"
 
 msgid "Géobretagne - Morbihan 2010"
-msgstr ""
+msgstr "Géobretagne - Марбіян 2010"
 
 msgid "Géolittoral - Orthophotos 2000"
-msgstr ""
+msgstr "Géolittoral - артафота 2000"
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
-msgstr ""
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
+msgstr "Géolittoral V2 - Артафота 2011-2014"
 
 msgid "Géolittoral - Sentiers"
-msgstr ""
+msgstr "Géolittoral - трасы"
 
 msgid "Grand Lyon - Orthophotographie 2012 - 10cm"
-msgstr ""
+msgstr "Вялікі Ліён - артафота 2012 - 10см"
 
 msgid "Loire-Atlantique - Orthophotos 2012 - 20 cm"
-msgstr ""
+msgstr "Атлантычная Луара - артафота 2012 - 20 см"
 
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
-msgstr ""
+msgstr "SIG LR - Лангедок-Русільён 2012 - 20 см"
+
+msgid "Route 500™©®"
+msgstr "Route 500™©®"
 
 msgid "Toulouse - Orthophotoplan 2013"
-msgstr ""
+msgstr "Тулуза - артафотаплан 2013"
 
 msgid "Toulouse - Orthophotoplan 2011"
-msgstr ""
+msgstr "Тулуза - артафотаплан 2011"
 
 msgid "Toulouse - Orthophotoplan 2007"
-msgstr ""
+msgstr "Тулуза - артафотаплан 2007"
 
 msgid "Tours - Orthophotos 2013"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
+msgstr "Тур - артафота 2013"
 
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
-msgstr ""
+msgstr "Веркор - запаведнік горнага масіва Веркор - артафота 1999 - 1 м"
 
 msgid "Hike & Bike"
-msgstr ""
+msgstr "Hike & Bike"
 
 msgid "OpenStreetMap (Sorbian Language)"
-msgstr ""
+msgstr "OpenStreetMap (Сербская мова)"
 
 msgid "Hamburg (40 cm)"
-msgstr ""
+msgstr "Гамбург (40 см)"
 
 msgid "Hamburg (20 cm)"
-msgstr ""
+msgstr "Гамбург (20 см)"
 
 msgid "Hamburg (DK5)"
-msgstr ""
+msgstr "Гамбург (DK5)"
+
+msgid "Bavaria (80 cm)"
+msgstr "Баварыя (80 см)"
 
 msgid "Bavaria (2 m)"
-msgstr ""
+msgstr "Баварыя (2 м)"
 
 msgid "Stuttgart (Luftbild)"
-msgstr ""
+msgstr "Штутгарт (аэрафота)"
 
 msgid "Erlangen Luftbild (2013 6,25 cm)"
-msgstr ""
+msgstr "Эрланген аэрафота (2013 6,25 см)"
 
 msgid "Erlangen 2011 Luftbild (5,0 cm)"
-msgstr ""
+msgstr "Эрланген 2011 аэрафотаздымкі (5,0 см)"
 
 msgid "Old map of Zwenkau - TK25 Messtischblatt (4739; 1906; PROJ.4-rect)"
-msgstr ""
+msgstr "Старая карта Цвенкау - TK25 Messtischblatt (4739; 1906; PROJ.4-rect)"
 
 msgid "Old map of Pegau - TK25 Messtischblatt (4839; 1909; PROJ.4-rect)"
-msgstr ""
+msgstr "Старая карта Пегау - TK25 Messtischblatt (4839; 1909; PROJ.4-rect)"
 
 msgid "Physical DE - Physische Karte (Naturräume)"
-msgstr ""
+msgstr "Physical DE - фізічная карта (прыродныя зоны)"
 
 msgid "Physical DE:Harz - Physische Karte (Naturräume)"
-msgstr ""
+msgstr "Physical DE: Гарц - фізічная карта (прыродныя зоны)"
 
 msgid ""
 "Physical DE:Harz - Overlay für Bing (z.B. Deckkraft zw. 20 und 50 Prozent "
 "nutzen)"
 msgstr ""
+"Physical DE: Гарц - овэрлэй для Bing (напрыклад, з непразрыстасцю 20-50%)"
 
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
-msgstr ""
+msgstr "Maps4BW (LGL-BW, www.lgl-bw.de)"
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
-msgstr ""
+msgid "NRW-Atlas: ALKIS"
+msgstr "NRW-Atlas: ALKIS"
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
-msgstr ""
+msgstr "NRW-Atlas: лічбавая базавая карта 1:5000"
 
 msgid "NRW-Atlas: Luftbilder"
-msgstr ""
+msgstr "NRW-Атлас: Аэрафотаздымкі"
 
 msgid "NRW-Atlas: Topographische Karte 1:10000"
-msgstr ""
+msgstr "NRW-Atlas: Тапаграфічная карта 1:10000"
 
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
-msgstr ""
+msgstr "Агламерацыя Рур: Аэрафотаздымкі (10 см)"
 
 msgid "Drone Imagery (Haiti)"
-msgstr ""
+msgstr "Здымкі дронаў (Гаіці)"
 
 msgid "Drone Imagery 2014 (Haiti)"
-msgstr ""
+msgstr "Здымкі з дрону 2014 (Гаіці)"
 
 msgid "Ireland British War Office 1:25k GSGS 3906"
-msgstr ""
+msgstr "Ірландыя Міністэрства абароны Вялікабрытаніі 1:25000 GSGS 3906"
 
 msgid "Ireland British War Office One-Inch 1941-43 GSGS 4136"
 msgstr ""
+"Ірландыя Міністэрства абароны Вялікабрытаніі 1-цаля 1941-43 GSGS 4136"
 
 msgid "Ireland Bartholomew Quarter-Inch 1940"
-msgstr ""
+msgstr "Ірландыя, выд. Bartholomew, чвэрцьцалевая 1940"
+
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr "Ірландскія абшчыны і баронствы - Memorial Atlas"
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr "Памятны атлас Ірландыі (1901) L.J. Richards"
 
 msgid "OSMIE Townlands"
-msgstr ""
+msgstr "OSM Карта землеўладанняў у Ірландыі"
 
 msgid "OSMIE EDs"
-msgstr ""
+msgstr "OSMIE: выбарчыя акругі"
 
 msgid "OSMIE Civil Parishes"
-msgstr ""
+msgstr "OSMIE: абшчыны"
 
 msgid "OSMIE Baronies"
-msgstr ""
+msgstr "OSMIE Баронствы"
 
 msgid "OSMIE Political"
-msgstr ""
-
-msgid "Ireland EEA GMES Urban Atlas"
-msgstr ""
-
-msgid "Ireland EEA CORINE 2006"
-msgstr ""
-
-msgid "Antrim Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
-msgstr ""
-
-msgid "Carlow Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Clare Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Dublin Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Fermanagh Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Galway Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Kildare Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Leitrim Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Longford Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Offaly Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Sligo Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Tyrone Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Westmeath Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Wexford Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Wicklow Civil Parishes and Baronies"
-msgstr ""
+msgstr "OSMIE Палітычная мапа"
 
 msgid "Lodi - Italy"
-msgstr ""
+msgstr "Лодзі - Італія"
 
 msgid "Lombardia - Italy (CTR)"
-msgstr ""
+msgstr "Ламбардыя - Італія (CTR)"
 
 msgid "Sicily - Italy"
-msgstr ""
+msgstr "Сіцылія - Італія"
 
 msgid "PCN 2006 - Italy"
-msgstr ""
+msgstr "PCN 2006 - Італія"
 
 msgid "PCN 2008 - IT Lazio+Umbria"
-msgstr ""
+msgstr "PCN 2008 - IT Лацыё+Умбрыя"
 
 msgid "PCN 2012 - Italy"
-msgstr ""
+msgstr "PCN 2012 - Італія"
 
 msgid "South Tyrol Orthofoto 2011"
-msgstr ""
+msgstr "Паўднёвы Ціроль - артафота 2011"
 
 msgid "South Tyrol Topomap"
-msgstr ""
+msgstr "Паўднёвы Ціроль - тапакарта"
 
 msgid "USSR - Latvia"
-msgstr ""
+msgstr "СССР - Латвія"
 
 msgid "50cm ortho - Latvia"
-msgstr ""
+msgstr "50см артафота - Латвія"
 
 msgid "20cm ortho - Latvia - Coastline"
-msgstr ""
+msgstr "20см артафота - Латвія - узбярэжжа"
+
+msgid "1.cikla ortofotokarte - Latvia"
+msgstr "1.cikla артафотакарта - Латвія"
 
 msgid "ORT10LT (Lithuania)"
-msgstr ""
+msgstr "ORT10LT (Літва)"
 
 msgid "Luxembourg Inspire Ortho 2010"
-msgstr ""
+msgstr "Luxembourg Inspire: артафота 2010"
 
 msgid "Luxembourg Inspire Ortho 2013"
-msgstr ""
+msgstr "Luxembourg Inspire: артафота 2013"
 
 msgid "Luxembourg Inspire Railway"
-msgstr ""
+msgstr "Люксембург Inspire Чыгунка"
 
 msgid "Luxembourg Inspire Roads"
-msgstr ""
+msgstr "Люксембург Inspire Дарогі"
+
+msgid "Luxembourg Inspire Water"
+msgstr "Люксембург Inspire Воды"
 
 msgid "Niger Delta Oct 2012 Landsat"
-msgstr ""
+msgstr "Дэльта Нігера, кастрычнік 2012 Landsat"
 
 msgid "Gaza Strip - Pléiades - 2014/07/06"
-msgstr ""
+msgstr "Сектар Газа - Pléiades - 06.07.2014"
 
 msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
-msgstr ""
+msgstr "Сектар Газа - Pléiades - 06.07.2014 (NIR)"
 
 msgid "Pangasinán/Bulacan (Phillipines HiRes)"
-msgstr ""
+msgstr "Пангасінан/Булакан (Філіпіны HiRes)"
 
 msgid "Geoportal 2: Ortofotomapa (aerial image)"
-msgstr ""
+msgstr "Geoportal 2: артафота"
+
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgstr "Геапартал 2: артафотакарта (аэрафотаздымкі) WMTS"
 
 msgid "Geoportal 2: PRNG (geo names)"
-msgstr ""
+msgstr "Geoportal 2: PRNG (тапонімы)"
+
+msgid "Geoportal 2: ISOK hillshade"
+msgstr "Геапартал 2: рэльеф ISOK"
 
 msgid "Będzin: Ortofotomapa 2013 (aerial image)"
-msgstr ""
+msgstr "Бэндзін: Ortofotomapa 2013 (аэрафотаздымкі)"
 
 msgid "Będzin: Budynki (buildings)"
-msgstr ""
+msgstr "Бэндзін: будынкі"
 
 msgid "Bytom: Ortofotomapa 2012 (aerial image)"
-msgstr ""
+msgstr "Бытам: артафота 2012"
+
+msgid "Bytom: Fotoplan 2014 (aerial image)"
+msgstr "Бытам: фотаплан 2014"
 
 msgid "Bytom: Budynki (buildings)"
-msgstr ""
+msgstr "Бытам: будынкі"
 
 msgid "Chorzów: Budynki (buildings)"
-msgstr ""
+msgstr "Хожаў: будынкі"
+
+msgid "Częstochowa: Budynki (buildings)"
+msgstr "Чэнстахова: Будынкі"
 
 msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
-msgstr ""
+msgstr "Чэнстахова: артафота 2011"
+
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgstr "Чэнстахова: артафотакарта 2013"
+
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgstr "Чэнстахова: артафотакарта 2014"
 
 msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
-msgstr ""
+msgstr "Глівіцы: артафота 2013"
 
 msgid "Gliwice: Budynki (buildings)"
-msgstr ""
+msgstr "Глівіцэ: будынкі"
 
 msgid "Katowice: Ortofotomapa (aerial image)"
-msgstr ""
+msgstr "Катавіцы: артафота"
+
+msgid "Katowice: Budynki (buildings)"
+msgstr "Катовіцэ: Будынкі"
+
+msgid "Łódź: Budynki (buildings)"
+msgstr "Лодзь: будынкі"
 
 msgid "Łódź: Ortofotomapa (aerial image)"
-msgstr ""
+msgstr "Лодзь: артафота"
+
+msgid "Powiat dębicki: Budynki (buildings)"
+msgstr "Дэмбіцкі павет: будынкі"
+
+msgid "Powiat lubaczowski: Budynki (buildings)"
+msgstr "Любачаўскі павет: Будинки"
+
+msgid "Powiat łańcucki: Budynki (buildings)"
+msgstr "Ланцуцкі павет: будынкі"
+
+msgid "Powiat poznański: Budynki (buildings)"
+msgstr "Познанскі павет: будынкі"
+
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgstr "Познаньскі павет: артафотакарта"
+
+msgid "Powiat rzeszowski: Budynki (buildings)"
+msgstr "Жэшаўскі павет: будынкі"
+
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgstr "Жэшаўскі павет: артафотакарта"
+
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr "Сталёвавольскі павет: будынкі"
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr "Пшэмысль: будынкі"
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgstr "Пшэмысль: артафотакарта"
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
-msgstr ""
+msgstr "Руда-Слёнска: артафота"
 
 msgid "Rzeszów: Ortofotomapa (aerial image)"
-msgstr ""
+msgstr "Жэшаў: артафота"
 
 msgid "Rzeszów: Budynki (buildings)"
-msgstr ""
+msgstr "Жэшаў: будынкі"
 
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
-msgstr ""
+msgstr "Семяновіцы-Слёнскія: артафота"
+
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr "Семяновіцы-Слёнскія: будынкі"
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr "Свентахлавіцы: артафотакарта 2008"
 
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
-msgstr ""
+msgstr "Свентахлавіцы: артафота2009"
+
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr "Свентахлавіцы: артафотакарта 2012"
 
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
-msgstr ""
+msgstr "Забжэ: артафота 2011"
 
 msgid "trail.pl: Szlaki (paths)"
-msgstr ""
+msgstr "trail.pl: шляхі"
 
 msgid "ScanEx IRS"
-msgstr ""
+msgstr "ScanEx IRS"
 
 msgid "ScanEx SPOT"
-msgstr ""
+msgstr "ScanEx SPOT"
 
 msgid "Freemap.sk Car"
-msgstr ""
+msgstr "Freemap.sk Аўтамабільная"
 
 msgid "Freemap.sk Hiking"
-msgstr ""
+msgstr "Freemap.sk Пешаходная"
 
 msgid "Freemap.sk Cyclo"
-msgstr ""
+msgstr "Freemap.sk Веласіпедная"
 
 msgid "Freemap.sk Ski"
-msgstr ""
+msgstr "Freemap.sk Лыжная"
 
 msgid "Katastrálna mapa Slovenska (KaPor, 2010-04)"
-msgstr ""
+msgstr "Кадастравая карта Славакіі (KaPor, 2010-04)"
 
 msgid "Katastrálna mapa Slovenska (KaPor, 2011-05)"
-msgstr ""
+msgstr "Кадастравая карта Славакіі (KaPor, 2011-05)"
 
 msgid "Slovakia EEA GMES Urban Atlas"
-msgstr ""
+msgstr "Славакія EEA GMES Urban Atlas"
 
 msgid "Slovakia EEA CORINE 2006"
-msgstr ""
+msgstr "Славакія EEA CORINE 2006"
 
 msgid "Slovakia Historic Maps"
-msgstr ""
+msgstr "Славакія: гістарычныя карты"
 
 msgid "RABA-KGZ: Slovenia farmland use"
-msgstr ""
+msgstr "RABA-KGZ: Славенія - выкарыстанне сельгасзямель"
 
 msgid "RABA-KGZ: Slovenia built-up areas"
-msgstr ""
+msgstr "RABA-KGZ: Славенія - вобласці забудовы"
 
 msgid "South Africa CD:NGI Aerial"
-msgstr ""
+msgstr "Паўднёвая Афрыка CD: NGI аэрафотаздымкі"
 
 msgid "Catastro Spain"
-msgstr ""
+msgstr "Кадастравая карта Іспаніі"
 
 msgid "PNOA Spain"
-msgstr ""
+msgstr "PNOA Іспанія"
 
 msgid "SIGPAC Spain"
-msgstr ""
+msgstr "SIGPAC Іспанія"
 
 msgid "GRAFCAN - Canary Islands"
-msgstr ""
+msgstr "GRAFCAN - Канарскія выспы"
 
 msgid "ITACyL - Castile and León"
-msgstr ""
+msgstr "ITACyL - Кастылія і Леон"
 
 msgid "IDEIB - Balearic Islands"
-msgstr ""
+msgstr "IDEIB - Балеарскія выспы"
 
 msgid "GRAFCAN Express - Canary Islands"
-msgstr ""
+msgstr "GRAFCAN Express - Канарскія выспы"
 
 msgid "Kanton Aargau 25cm (AGIS 2011)"
-msgstr ""
+msgstr "Кантон Аргаў 25 см (AGIS 2011)"
 
 msgid "Kanton Aargau 25cm (AGIS 2014)"
-msgstr ""
+msgstr "Кантон Аргаў 25 см (AGIS 2014)"
 
 msgid "Stadt Uster Orthophoto 2008 10cm"
-msgstr ""
+msgstr "Горад Устэр: артафота 2008 10см"
 
 msgid "Stadtplan Zürich"
-msgstr ""
+msgstr "Цюрых - план горада"
 
 msgid "Stadt Zürich Übersichtsplan (Strassen, Gebäude, Hausnummer)"
-msgstr ""
+msgstr "Цюрых: аглядны план горада (вуліцы, будынкі, нумары дамоў)"
 
 msgid "Stadt Zürich Luftbild 2011"
-msgstr ""
+msgstr "Горад Цюрых: аэрафотаздымка 2011"
 
 msgid "Orthofoto Kanton Solothurn RGB (SOGIS 2011/2012/2013)"
-msgstr ""
+msgstr "Кантон Залатурн: артафота RGB (SOGIS 2011/2012/2013)"
 
 msgid "Orthofoto Kanton Solothurn Infrarot (SOGIS 2011/2012/2013)"
-msgstr ""
+msgstr "Кантон Залатурн: артафота ў ІЧ-дыяпазоне (SOGIS 2011/2012/2013)"
 
 msgid "Canton de Génève 5cm (SITG 2011)"
-msgstr ""
+msgstr "Кантон Жэнева 5 см (SITG 2011)"
 
 msgid "Canton de Neuchâtel 50cm (SITN 2006)"
-msgstr ""
+msgstr "Кантон Нёўшатэль 50 см (SITN 2006)"
 
 msgid "Canton du Jura 50cm (RCJU 1998)"
-msgstr ""
+msgstr "Кантон Юра 50 см (RCJU 1998)"
 
 msgid "Canton de Fribourg 50cm (2005)"
-msgstr ""
+msgstr "Кантон Фрыбур 50 см (2005)"
 
 msgid "Stadt Bern 10cm/25cm (2012)"
-msgstr ""
+msgstr "Горад Берн 10см/25см (2012)"
 
 msgid "HEIG-VD / Orthophoto Yverdon-les-Bains 25cm (2007)"
-msgstr ""
+msgstr "HEIG-VD / артафота Івердон-Ле-Бэн 25см (2007)"
 
 msgid "Ville de Nyon - Orthophoto 2010 HD 5cm/pi"
-msgstr ""
+msgstr "Ньён - артафота 2010 HD 5см/pi"
 
 msgid "Cartoriviera - Orthophoto 2012"
-msgstr ""
+msgstr "Cartoriviera - артафота 2012"
 
 msgid "SIGIP - Orthophoto 2012"
-msgstr ""
+msgstr "SIGIP - артафота 2012"
 
 msgid "Lausanne - Orthophoto technique 2012"
-msgstr ""
+msgstr "Лазана - тэхнічнае артафота 2012"
 
 msgid "Bonvillars Orthophoto 2013"
-msgstr ""
+msgstr "Банвілар - артафота 2013"
 
 msgid "Fiez Orthophoto 2013"
-msgstr ""
+msgstr "Фіез - артафота 2013"
+
+msgid "Taiwan e-Map Open Data"
+msgstr "Тайвань e-Map Open Data"
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr "Тайвань e-Map Open Data (з лініямі вышынь)"
+
+msgid "Taiwan Village Boundaries"
+msgstr "Тайвань межы пасяленняў"
+
+msgid "Taiwan Land-Section Data"
+msgstr "Тайвань Зямельны падзел"
+
+msgid "NLSC Open Data WMTS"
+msgstr "NLSC Open Data WMTS"
 
 msgid "MSR Maps Topo"
-msgstr ""
+msgstr "MSR Maps Topo"
 
 msgid "MSR Maps Urban"
-msgstr ""
+msgstr "MSR Гарадскія карты"
 
 msgid "USGS Topographic Maps"
-msgstr ""
+msgstr "USGS Тапаграфічныя карты"
 
 msgid "USGS Large Scale Imagery"
-msgstr ""
+msgstr "USGS: буйнамаштабныя здымкі"
 
 msgid "TIGER 2012 Roads Overlay"
-msgstr ""
+msgstr "TIGER 2012 пласт дарог"
 
-msgid "New & Misaligned TIGER Roads (2014)"
-msgstr ""
+msgid "New & Misaligned TIGER Roads (2015)"
+msgstr "Новыя ды неправераныя дарогі TIGER (2015)"
 
 msgid "MassGIS L3 Parcels"
-msgstr ""
+msgstr "MassGIS L3 Parcels"
 
 msgid "NC Latest Orthoimagery"
-msgstr ""
+msgstr "Паўночная Караліна: апошнія артаздымкі"
 
 msgid "U.S. Forest Service roads"
-msgstr ""
+msgstr "U.S. Forest Service - дарогі"
 
 msgid "Ukraine - Orthophotomaps 2012"
-msgstr ""
+msgstr "Украіна - артафота 2012"
 
 msgid "7th Series (OS7)"
-msgstr ""
+msgstr "7-я серыя (OS7)"
 
 msgid "OS New Popular Edition historic"
-msgstr ""
+msgstr "OS New Popular Edition гістарычная"
 
 msgid "OS OpenData StreetView"
-msgstr ""
+msgstr "OS OpenData StreetView"
 
 msgid "OS OpenData Locator"
-msgstr ""
+msgstr "OS OpenData Locator"
 
 msgid "Surrey Air Survey"
-msgstr ""
+msgstr "Сурэй, аэраздымкі"
 
 msgid "NLS - OS 6-inch Scotland 1842-82"
-msgstr ""
+msgstr "NLS - OS 6-цалевая карта Шатландыі 1842-82"
 
 msgid "NLS - OS 1:25k 1st Series 1937-61"
-msgstr ""
+msgstr "NLS - ОС 1:25000 1-й серыі 1937-61"
 
 msgid "NLS - OS 1-inch 7th Series 1955-61"
-msgstr ""
+msgstr "NLS - АС 1-цалевая 7-й серыі 1955-61"
 
 msgid "OS 1:25k historic (OSM-Best)"
-msgstr ""
+msgstr "OS 1:25000 гістарычная (OSM-Best)"
 
 msgid "OS 1:25k historic (OSM-Limited)"
-msgstr ""
+msgstr "OS 1:25000 гістарычная (OSM-Limited)"
 
 msgid "OS Scottish Popular historic"
-msgstr ""
+msgstr "OS Scottish Popular гістарычная"
 
 msgid "NLS - Bartholomew Half Inch, 1897-1907"
-msgstr ""
+msgstr "NLS - выд. Bartholomew, паўцалевая, 1897-1907"
 
 msgid "OS Town Plans, Aberdeen 1866-1867 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Абердзін 1866-1867 (NLS)"
 
 msgid "OS Town Plans, Airdrie 1858 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Эйрдры 1858 (NLS)"
 
 msgid "OS Town Plans, Alexandria 1859 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Александрыя 1859 (NLS)"
 
 msgid "OS Town Plans, Alloa 1861-1862 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Алоа 1861-1862 (NLS)"
 
 msgid "OS Town Plans, Annan 1859 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Анан 1859 (NLS)"
 
 msgid "OS Town Plans, Arbroath 1858 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Аброас 1858 (NLS)"
 
 msgid "OS Town Plans, Ayr 1855 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Эр 1855 (NLS)"
 
 msgid "OS Town Plans, Berwick-upon-Tweed 1852 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Бервік-апон-Твід 1852 (NLS)"
 
 msgid "OS Town Plans, Brechin 1862 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Брэхін 1862 (NLS)"
 
 msgid "OS Town Plans, Burntisland 1894 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Бурнтісланд 1894 (NLS)"
 
 msgid "OS Town Plans, Campbelton 1865 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Кемпбелтон 1865 (NLS)"
 
 msgid "OS Town Plans, Coatbridge 1858 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Коатбрыдж 1858 (NLS)"
 
 msgid "OS Town Plans, Cupar 1854 (NLS)"
-msgstr ""
+msgstr "OS: планы гарадоў, Купар 1854 (NLS)"
 
 msgid "OS Town Plans, Cupar 1893-1894 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Купар 1893-1894 (NLS)"
 
 msgid "OS Town Plans, Dalkeith 1852 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Далкейт 1852 (NLS)"
 
 msgid "OS Town Plans, Dalkeith 1893 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Далкейт 1893 (NLS)"
 
 msgid "OS Town Plans, Dumbarton 1859 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Дамбартон 1859 (NLS)"
 
 msgid "OS Town Plans, Dumfries 1850 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Дамфрыз 1850 (NLS)"
 
 msgid "OS Town Plans, Dumfries 1893 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Дамфрыз 1893 (NLS)"
 
 msgid "OS Town Plans, Dundee 1857-1858 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Дандзі 1857-1858 (NLS)"
 
 msgid "OS Town Plans, Dundee 1870-1872 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Дандзі 1870-1872 (NLS)"
 
 msgid "OS Town Plans, Dunfermline 1854 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Данфермлін 1854 (NLS)"
 
 msgid "OS Town Plans, Dunfermline 1894 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Данфермлін 1894 (NLS)"
 
 msgid "OS Town Plans, Edinburgh 1849-1851 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Эдынбург 1849-1851 (NLS)"
 
 msgid "OS Town Plans, Edinburgh 1876-1877 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Эдынбург 1876-1877 (NLS)"
 
 msgid "OS Town Plans, Edinburgh 1893-1894 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Эдынбург 1893-1894 (NLS)"
 
 msgid "OS Town Plans, Elgin 1868 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Элгін 1868 (NLS)"
 
 msgid "OS Town Plans, Falkirk 1858-1859 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Фалкірк 1858-1859 (NLS)"
 
 msgid "OS Town Plans, Forfar 1860-1861 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Форфар 1860-1861 (NLS)"
 
 msgid "OS Town Plans, Forres 1868 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Форэс 1868 (NLS)"
 
 msgid "OS Town Plans, Galashiels 1858 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Галашылс 1858 (NLS)"
 
 msgid "OS Town Plans, Girvan 1857 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Гірван 1857 (NLS)"
 
 msgid "OS Town Plans, Glasgow 1857-1858 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Глазга 1857-1858 (NLS)"
 
 msgid "OS Town Plans, Glasgow 1892-1894 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Глазга 1892-1894 (NLS)"
 
 msgid "OS Town Plans, Greenock 1857 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Грынок 1857 (NLS)"
 
 msgid "OS Town Plans, Haddington 1853 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Хадзінгтон 1853 (NLS)"
 
 msgid "OS Town Plans, Haddington 1893 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Хадзінгтон 1893 (NLS)"
 
 msgid "OS Town Plans, Hamilton 1858 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Гамільтан 1858 (NLS)"
 
 msgid "OS Town Plans, Hawick 1857-1858 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Хоік 1857-1858 (NLS)"
 
 msgid "OS Town Plans, Inverness 1867-1868 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Інвернес 1867-1868 (NLS)"
 
 msgid "OS Town Plans, Irvine 1859 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Ірвін 1859 (NLS)"
 
 msgid "OS Town Plans, Jedburgh 1858 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Джэдбург 1858 (NLS)"
 
 msgid "OS Town Plans, Kelso 1857 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Келсо 1857 (NLS)"
 
 msgid "OS Town Plans, Kilmarnock 1857-1859 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Кілмарнок 1857-1859 (NLS)"
 
 msgid "OS Town Plans, Kirkcaldy 1855 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Кіркалдзі 1855 (NLS)"
 
 msgid "OS Town Plans, Kirkcaldy 1894 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Кіркалдзі 1894 (NLS)"
 
 msgid "OS Town Plans, Kirkcudbright 1850 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Кіркудбрайт 1850 (NLS)"
 
 msgid "OS Town Plans, Kirkcudbright 1893 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Кіркудбрайт 1893 (NLS)"
 
 msgid "OS Town Plans, Kirkintilloch 1859 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Кёркентылек 1859 (NLS)"
 
 msgid "OS Town Plans, Kirriemuir 1861 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Кір’емуір1861 (NLS)"
 
 msgid "OS Town Plans, Lanark 1858 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Ланарк 1858 (NLS)"
 
 msgid "OS Town Plans, Linlithgow 1856 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Лінлітго 1856 (NLS)"
 
 msgid "OS Town Plans, Mayole 1856-1857 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Маёль 1856-1857 (NLS)"
 
 msgid "OS Town Plans, Montrose 1861-1862 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Мантроўз 1861-1862 (NLS)"
 
 msgid "OS Town Plans, Musselburgh 1853 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Масельбург 1853 (NLS)"
 
 msgid "OS Town Plans, Musselburgh 1893 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Масельбург 1893 (NLS)"
 
 msgid "OS Town Plans, Nairn 1867-1868 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Наірн 1867-1868 (NLS)"
 
 msgid "OS Town Plans, Oban 1867-1868 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Обан 1867-1868 (NLS)"
 
 msgid "OS Town Plans, Peebles 1856 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Піблз 1856 (NLS)"
 
 msgid "OS Town Plans, Perth 1860 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Перт 1860 (NLS)"
 
 msgid "OS Town Plans, Peterhead 1868 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Петэрхед 1868 (NLS)"
 
 msgid "OS Town Plans, Port Glasgow 1856-1857 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Порт Глазга 1856-1857 (NLS)"
 
 msgid "OS Town Plans, Portobello 1893-1894 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Портабела 1893-1894 (NLS)"
 
 msgid "OS Town Plans, Rothesay 1862-1863 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Ротсей 1862-1863 (NLS)"
 
 msgid "OS Town Plans, Selkirk 1865 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Селкірк 1865 (NLS)"
 
 msgid "OS Town Plans, St Andrews 1854 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Сэнт-Эндрус 1854 (NLS)"
 
 msgid "OS Town Plans, St Andrews 1893 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Сэнт-Эндрус 1893 (NLS)"
 
 msgid "OS Town Plans, Stirling 1858 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Сцірлінг 1858 (NLS)"
 
 msgid "OS Town Plans, Stonehaven 1864 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Стонхейвен 1864 (NLS)"
 
 msgid "OS Town Plans, Stranraer 1847 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Странраер 1847 (NLS)"
 
 msgid "OS Town Plans, Stranraer 1863-1877 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Странраер 1863-1877 (NLS)"
 
 msgid "OS Town Plans, Stranraer 1893 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Странраер 1893 (NLS)"
 
 msgid "OS Town Plans, Strathaven 1858 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Стартхевен 1858 (NLS)"
 
 msgid "OS Town Plans, Wick 1872 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Вік 1872 (NLS)"
 
 msgid "OS Town Plans, Wigtown 1848 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Вігтон 1848 (NLS)"
 
 msgid "OS Town Plans, Wigtown 1894 (NLS)"
-msgstr ""
+msgstr "Планы гарадоў ад OS, Вігтон 1894 (NLS)"
 
 msgid "Landsat 233055"
-msgstr ""
+msgstr "Landsat 233055"
 
 msgid ""
 "Group common Address Interpolation inputs in a single dialog, as well as an "
 "option to automatically generate individual house number nodes from a Way."
 msgstr ""
+"Адзіны агульны дыялог для ўводу адраснай інтэрпаляцыі з магчымасцю "
+"аўтаматычнай генерацыі асобных кропак з нумарамі дамоў з лініі інтэрпаляцыі."
 
 msgid ""
 "Makes a pair of selected way segments parallel by rotating one of them "
 "around a chosen pivot."
 msgstr ""
+"Робіць пару выдзеленых адрэзкаў лініі паралельнымі, круцячы адзін з іх вакол "
+"абранага цэнтра."
 
 msgid ""
 "Allows selection of areas in an layer and automatic creation of a way as "
 "polygon. Built to ease mapping of building from background layers. Optimized "
 "for basemap.at."
 msgstr ""
+"Дазваляе вылучаць ўчасткі пласта і аўтаматычна ствараць палігоны. Створаны "
+"для палягчэння мапінга будынкаў з фонавага пласта. Аптымізаваны для "
+"basemap.at."
 
 msgid "Tools for drawing buildings."
-msgstr ""
+msgstr "Інструменты для прамалёўкі будынкаў."
 
 msgid "A special handler for the French land registry WMS server."
 msgstr ""
+"Спецыяльны апрацоўшчык для сервера WMS французскага зямельнага кадастру."
 
 msgid ""
 "Overlays the canvec tile grid on the map and prints URL''s to the .zip "
 "files. Future goals: allow auto-downloading and loading of canvec .osm files"
-msgstr ""
+msgstr "Праца з картамі CanVec (толькі Канада)"
 
 msgid ""
 "Allows the user to create different color schemes and to switch between "
@@ -15110,262 +16904,346 @@ msgid ""
 "white background with matching colors for better visibility in bright "
 "sunlight. See dialog in display preferences."
 msgstr ""
+"Дазваляе карыстальніку ствараць розныя каляровыя схемы і перамыкацца паміж "
+"імі. Проста змяніце колер і стварыце новую схему. Пераключэнне на белы фон з "
+"адпаведнымі колерамі для лепшай бачнасці пры яркім сонечным святле. Гл. у "
+"наладах экрана."
 
 msgid ""
 "Imports proprietary CSV files of the Columbus/Visiontac V-900 GPS logger "
 "into a GPX layer."
 msgstr ""
+"Імпартуе патэнтаваныя CSV-файлы з Columbus/Visiontac V-900 GPS рэгістратара "
+"ў пласт GPX."
 
 msgid ""
 "Implements a command line and enables to create your commands. See link for "
 "standard commands (arc, circle etc.)"
 msgstr ""
+"Рэалізацыя каманднага радка і магчымасць стварэння ўласных каманд. "
+"Перайдзіце па спасылцы, каб азнаёміцца са стандартнымі камандамі (arc, "
+"circle і г.д.)"
+
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+"Прадастаўляе бібліятэку Commons Imaging. Не прызначаны для непасрэднага "
+"ўстанаўлення карыстальнікамі, усталёўваецца толькі як залежнасць для іншых "
+"модуляў."
 
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
+"(Увага: Эксперыментальная версія!) Інструмент для аб’яднання (зліцця) "
+"дадзеных."
 
 msgid "Create a grid of ways."
-msgstr ""
+msgstr "Стварае сетку з ліній."
 
 msgid ""
 "Creating and handling address nodes and buildings within Czech Republic."
 msgstr ""
+"Стварэнне і кіраванне адраснымі кропкамі і будынкамі ў Чэскай Рэспубліцы"
 
 msgid ""
 "Allows to import various file formats into JOSM directly. Currently "
 "supported: TangoGPS, Garmin Trainings Center TCX."
 msgstr ""
+"Дазваляе імпартаваць файлы розных фарматаў непасрэдна ў JOSM. Зараз "
+"падтрымліваюцца: TangoGPS, Garmin Trainings Center TCX."
 
 msgid "Download your GPX tracks from openstreetmap.org"
-msgstr ""
+msgstr "Загрузіць вашыя GPX трэкі з openstreetmap.org"
 
 msgid ""
 "This plugin directly upload GPS Traces from current active layer in JOSM to "
 "openstreetmap.org."
 msgstr ""
+"Прамая перадача GPS-трэкаў з бягучага актыўнага пласта JOSM на сайт "
+"openstreetmap.org."
 
 msgid "Downloads OSM data along a way"
-msgstr ""
+msgstr "Загрузка дадзеных OSM ўздоўж лініі"
 
 msgid ""
 "Allows the user to anonymize timestamps and delete parts of huge GPX tracks "
 "very fast."
 msgstr ""
+"Дазваляе карыстальніку рабіць ананімнымі часовыя пазнакі і выдаляць часткі "
+"вялікіх GPX трэкаў"
 
 msgid "Shows the elevation profile and some statistical data of a GPX track."
-msgstr ""
+msgstr "Паказвае профіль вышынь і некаторыя статыстычныя дадзеныя трэка GPX."
 
 msgid "Handling of French EPCIs (boundary=local_authority)"
-msgstr ""
+msgstr "Апрацоўка французскага EPCI (boundary=local_authority)"
 
 msgid "Use external scripts in JOSM"
-msgstr ""
+msgstr "Выкарыстанне знешніх сцэнарыяў ў JOSM"
 
 msgid "Fast drawing ways by mouse"
-msgstr ""
+msgstr "Хуткае маляванне ліній мышшу"
 
 msgid "Finds and fixes invalid street addresses in a comfortable way."
-msgstr ""
+msgstr "Пошук і выпраўленне няслушнай нумарацыі дамоў зручным чынам."
 
 msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
+"Кантактуйце з іншымі ўдзельнікамі, якія працуюць з картай побач з вамі, "
+"атрымлівайце абвесткі, калі хто-то з’яўляецца побач."
 
 msgid ""
 "Provides parts of the GeoTools library for other JOSM plugins. Not meant to "
 "be installed directly by users, but rather as a dependency for other plugins."
 msgstr ""
+"Прадастаўляе часткі бібліятэкі GeoTool іншым модулям JOSM. Ня прызначаны для "
+"непасрэднага ўстанаўлення карыстальнікамі, усталёўваецца толькі як "
+"залежнасць для іншых модуляў."
 
 msgid ""
 "Download GPS points from Globalsat dg100 data logger directly in JOSM."
 msgstr ""
+"Дазваляе загрузіць кропкі GPS з Globalsat dg100 data logger непасрэдна ў "
+"JOSM."
 
 msgid ""
 "Analyse a set of GPS points to obtain its centre and direction of spread."
 msgstr ""
+"Аналіз набору кропак GPS для атрымання іх цэнтра і напрамку распаўсюду."
 
 msgid "Allows to filter out unnecessary GPS tracks"
-msgstr ""
+msgstr "Фільтраванне непатрэбных GPS трэкаў"
 
 msgid "Visualizes routing information as a routing graph."
-msgstr ""
+msgstr "Візуалізуе інфармацыю аб маршрутызацыі ў выглядзе графа."
 
 msgid "Simple tool to tag house numbers."
-msgstr ""
+msgstr "Просты інструмент для нумарацыі дамоў"
 
 msgid "Generate Imagery XML bounds from a multipolygon"
-msgstr ""
+msgstr "Стварыць межы выявы ў фармаце XML з мультыпалігону"
 
 msgid ""
 "Database of imagery offsets: share and aquire imagery offsets with one "
 "button."
 msgstr ""
+"База дадзеных зрушэнняў здымкаў: дзяліцеся і атрымлівайце зрушэнні з "
+"дапамогай адной кнопкі"
 
 msgid "WMSPlugin-style imagery adjustment mapmode"
-msgstr ""
-
-msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
+msgstr "WMSPlugin-падобны модуль для падкладкі фонавай выявы"
 
 msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
 msgstr ""
+"Модуль для сумяшчэння выяў з шляхавымі кропкамі GPX трэка. Спалучэнне будзе "
+"ажыццёўлена, калі атрыбут тэгаў ''name'', ''cmt'' ці ''desc'' шляхавай "
+"кропкі, будзе адпавядаць назве файла выявы."
 
 msgid "Plugin for importing spatial referenced images"
-msgstr ""
+msgstr "Модуль для імпарту прасторава прывязаных выяў"
 
 msgid "Import vector graphics (SVG)"
-msgstr ""
+msgstr "Імпарт вектарнай графікі (SVG)"
 
 msgid ""
 "Extra information about current layer objects pop ups - currently GPX "
 "trackpoint info"
 msgstr ""
+"Усплываючыя вокны з дадатковай інфармацыяй аб аб''ектах бягучага пласта - у "
+"цяперашні час інфармацыяй аб пункце трэка GPX"
 
 msgid "A helper for IRS satellite adjustment."
-msgstr ""
+msgstr "Памагаты карэкціроўкі спадарожніка IRS."
 
 msgid ""
 "Provides Java Native Access (JNA) library. Not meant to be installed "
 "directly by users, but rather as a dependency for other plugins."
 msgstr ""
+"Прадастаўляе бібліятэку Java Native Access (JNA). Не патрабуе ўстаноўкі "
+"непасрэдна самім карыстальнікам, толькі для вырашэння залежнасцяў з іншымі "
+"модулямі."
 
 msgid ""
 "Provides Java Topology Suite (JTS) library and related utilities. Not meant "
 "to be installed directly by users, but rather as a dependency for other "
 "plugins."
 msgstr ""
+"Прадастаўляе бібліятэку Java Topology Suite (JTS) і звязаныя інструменты. Не "
+"патрабуе ўстаноўкі непасрэдна самім карыстальнікам, толькі для вырашэння "
+"залежнасцяў з іншымі модулямі."
 
 msgid ""
 "creates a channel digraph and checks a subset of channels if it is a "
 "junction or searches in a subset of channels for junctions"
 msgstr ""
+"стварае арграф і правярае падмноства каналаў на тое, ці з''яўляюцца яны "
+"развязкамі, або шукае ў падмноствах каналаў развязкі"
 
 msgid "Helps vectorizing WMS images."
-msgstr ""
+msgstr "Дапамагае вектарызаваць выявы WMS."
 
 msgid ""
 "Support live GPS input (moving dot) through a connection to gpsd server."
 msgstr ""
+"Падтрымка GPS ўводу (рух кропкі) з дапамогай падлучэння да сервера gpsd."
 
 msgid ""
 "Provides the Log4j library for other JOSM plugins. Not meant to be installed "
 "directly by users, but rather as a dependency for other plugins."
 msgstr ""
+"Прадастаўляе бібліятэку Log4j для іншых модуляў JOSM. Прызначаны не для "
+"непасрэднай ўстаноўкі карыстальнікамі, а толькі як залежнасць для іншых "
+"модуляў."
 
 msgid ""
 "The MapDust Plug-In shows the MapDust bug reports on the map. You can "
 "create, close,invalidate, re-open and comment bug reports by using this "
 "plugin."
 msgstr ""
+"Модуль MapDust паказвае паведамленні пра памылкі на карце з сэрвісу MapDust. "
+"З дапамогай гэтага модуля вы можаце ствараць, зачыняць, зноў адкрываць і "
+"каментаваць паведамленні аб памылках."
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
+"Дазваляе карыстальніку працаваць з выявамі размешчанымі на mapillary.com"
 
 msgid ""
 "Provide a measurement dialog and a layer to measure length and angle of "
 "segments, area surrounded by a (simple) closed way and create measurement "
 "paths (which also can be imported from a gps layer)."
 msgstr ""
+"Адкрывае дыялогавае акно, каб стварыць пласт для вымярэння даўжыні і кутоў "
+"для ліній і палігонаў, а таксама, каб стварыць вымяральны шлях (які можа "
+"быць таксама імпартаваны з пласта gps)."
 
 msgid "Merge overlapping part of ways."
-msgstr ""
+msgstr "Аб’яднанне накладзеных частак ліній."
 
 msgid "Adds no left turn for sets of 4 or 5 ways"
-msgstr ""
-
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
+msgstr "Дадае забарону павароту налева для набораў з 4 або 5 ліній"
 
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
+"Дазваляе прызначыць тэгі для ўсіх аб’ектаў ўнутры вылучанай вобласці за "
+"адзін раз"
 
 msgid "NanoLog adjustment and browsing layer"
-msgstr ""
+msgstr "Nanolog - налада і прагляд"
 
 msgid ""
 "Use your system''s password manager to store the API username and password. "
 "(KWallet and gnome-keyring are supported.)"
 msgstr ""
+"Выкарыстоўвайце сістэмны менеджэр пароляў, каб захоўваць вашыя лагін і "
+"пароль. (Падтрымліваюцца KWallet і gnome-keyring.)"
 
 msgid ""
 "Disallow using JOSM forever (WARNING: this plugin prevents JOSM from loading "
 "and is hard to rid of)"
 msgstr ""
+"Забараняе выкарыстоўваць JOSM назаўжды (ПАПЯРЭДЖАННЕ: гэты модуль прадухіляе "
+"загрузку JOSM і ад яго цяжка пазбавіцца)"
 
 msgid "Convert data from Open Data portals to OSM layer"
-msgstr ""
+msgstr "Пераўтварэнне дадзеных з парталаў Open Data ў пласт OSM"
 
 msgid "extended options for editing opening_hours"
-msgstr ""
+msgstr "Пашыраныя налады для opening_hours"
 
 msgid ""
 "Allows opening gpx/osm files that intersect the currently visible screen area"
 msgstr ""
+"Дазваляе адкрываць GPX/OSM файлы, якія перасякаюцца з межамі бягучага экрана"
 
 msgid ""
 "Launches FireFox to display the current visible screen as a nice SVG image."
 msgstr ""
+"Запускае FireFox для адлюстравання бягучага выгляду як прыгожага SVG малюнка."
 
 msgid ""
 "Bring in errors from Osm Inspector and display it on the current JOSM "
 "bounding box"
 msgstr ""
+"Атрымаць памылкі з Osm Inspector і адлюстраваць у бягучай працоўнай вобласці "
+"JOSM"
 
 msgid ""
 "Recommends categories/tags on newly created OSM entities by analysing "
 "spatial entities into training features and using SVM classification"
 msgstr ""
+"Рэкамендуе катэгорыі/тэгі для ствараемых аб’ектаў OSM на аснове аналізу "
+"дадзеных механізму навучання і выкарыстання класіфікацыі SVM"
 
 msgid "Import/export OSM data in PBF format"
-msgstr ""
+msgstr "Імпарт/экспарт дадзеных OSM ў фармаце PBF"
 
 msgid "Import PDF file and convert to ways."
-msgstr ""
+msgstr "Імпарт файла PDF і пераўтварэнне ў лініі."
 
 msgid ""
 "Write gps position info to the image file header. Run this feature from the "
 "right click menu of the image layer."
 msgstr ""
+"Запіс пазіцыі gps ў загаловак файла малюнка. Уключыце гэтую магчымасць у "
+"кантэкстным меню пласта малюнка."
 
 msgid "Make photos movable and position them on the map."
-msgstr ""
+msgstr "Робіць фатаграфіі перамяшчанымі і размяшчае іх на карце."
 
 msgid ""
 "This plugin allows to display any picture as a background in the editor and "
 "align it with the map."
 msgstr ""
+"Гэты модуль дазваляе адлюстроўваць любую карцінку як падкладку ў рэдактары і "
+"выраўноўваць яе."
 
 msgid "The great JGoodies Plastic Look and Feel."
-msgstr ""
+msgstr "Цудоўны JGoodies Пластыкавы Скін."
 
 msgid ""
 "Shows an additional information about point on map. There is only a Czech "
 "RUIAN module available at this moment."
 msgstr ""
+"Паказвае дадатковую інфармацыю аб пункце на мапе. Зараз даступны толькі "
+"модуль Czech RUIAN."
 
 msgid "Read and write osmosis poly filter files"
-msgstr ""
+msgstr "Чытанне і запіс файлаў osmosis poly"
 
 msgid "Adds map printing to JOSM"
-msgstr ""
+msgstr "Дадае магчымасць раздрукоўкі карты ў JOSM"
 
 msgid "adds projections from Proj4J"
-msgstr ""
+msgstr "Дадае праекцыі з Proj4J"
 
 msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
+"Гэты модуль спрашчае картаграфаванне і праўку маршрутаў грамадскага "
+"транспарту."
 
-msgid "Relation and multipolygon creating and editing panel."
+msgid "Displays stops of selected public transport routes as graph"
 msgstr ""
+"Адлюстроўвае прыпынкі выбраных маршрутаў грамадскага транспарту ў выглядзе "
+"графа"
 
-msgid "Plugin for reverting changesets"
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
 msgstr ""
+"RasterFiltersPlugin дазваляе абіраць і ўжываць пэўныя графічныя фільтры да "
+"некаторых пластоў"
+
+msgid "Relation and multipolygon creating and editing panel."
+msgstr "Панэль стварэння і праўкі мультыпалігонаў і іншых адносін"
+
+msgid "Plugin for reverting changesets"
+msgstr "Модуль для адкату пакетаў правак"
 
 msgid ""
 "Plugin for tagging of objects based on a selection of road signs. The dialog "
@@ -15373,7510 +17251,7786 @@ msgid ""
 "properties window. Available country presets: Belgium, Germany, Poland, "
 "Slovakia, Spain."
 msgstr ""
+"Модуль для прызначэння аб’ектам тэгаў шляхам выбару дарожных знакаў з спісу. "
+"Дыялог можна адкрыць, пстрыкнуўшы на маленькім значку ў правым верхнім куце "
+"акна ўласцівасцяў аб’екта. Даступныя нарыхтоўкі для краін: Бельгія, "
+"Германія, Польшча, Славакія, Іспанія."
 
 msgid ""
 "Renders routes (bus, hiking trails, bicycle routes, ..). Route types must be "
 "defined in routes.xml file in plugin directory"
 msgstr ""
+"Паказвае маршруты (аўтобусныя, турыстычныя, веласіпедныя, ...). Тыпы "
+"маршрутаў павінны быць вызначаны ў файле routes.xml ў каталогу модуляў"
 
 msgid "Provides routing capabilities."
-msgstr ""
+msgstr "Дае магчымасці маршрутызацыі."
 
 msgid "Loads data from SDS"
-msgstr ""
+msgstr "Захоўванне дадзеных у Separate Data Store (SDS)"
 
 msgid "Imagery Layer for Sea Charts"
-msgstr ""
+msgstr "Пласт здымкаў для марскіх карт"
 
 msgid "Edit features for Sea Charts"
-msgstr ""
+msgstr "Рэдагаванне аб’ектаў марскіх карт"
 
 msgid ""
 "Simplify area by removing nodes on very obtuse angles. This can be "
 "constrained by maximum removed area size. Also average nearby nodes."
 msgstr ""
+"Спрасціць палігон выдаленнем кропак на вельмі тупых кутах. Дадзенае дзеянне "
+"можа быць абмежавана указаннем максімальнага памеру выдаляемага фрагмента. "
+"Таксама выдаляе блізкія кропкі."
 
 msgid "Edit features for OpenSeaMap"
-msgstr ""
+msgstr "Змяненняў уласцівасцяў рэдагавання OpenSeaMap"
+
+msgid "Allows to draw splines"
+msgstr "Дазваляе маляваць сплайны"
 
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
 msgstr ""
+"Дазваляе рэдагаваць інфармацыю пра трафік і экспартаваць яе ў сімулятар "
+"гарадскога дарожнага руху SUMO"
 
 msgid "Allow adding markers/nodes on current gps positions."
-msgstr ""
+msgstr "Дазваляе дадаваць пазнакі/кропкі ў бягучай GPS пазіцыі."
 
 msgid ""
 "Launch browser to a Web resource about a selected object having known tags, "
 "such as Wikipedia"
 msgstr ""
+"Адкрывае ў браўзэры вэб рэсурс з інфармацыяй аб абраным аб’екце, які мае "
+"вядомыя тэгі"
 
 msgid "Provides a dialog for editing tags in a tabular grid."
-msgstr ""
+msgstr "Паказвае акно для рэдагавання тэгаў у таблічнай сетцы."
 
 msgid ""
 "Adds a tagging preset tester to the help menu, which helps you developing of "
 "tagging presets (quick preview of the dialog that will popup). You can start "
 "the jar-file as standalone as well."
 msgstr ""
+"Дадае пункт «Аналізатар нарыхтовак тэгаў» да меню дапамогі, што дапаможа вам "
+"у распрацоўцы нарыхтовак тэгаў (хуткі прагляд у дыялогу, які з’яўляецца ва "
+"ўсплываючым акне). Вы можаце запусціць JAR-файл у аўтаномным рэжыме."
 
 msgid "Make terraced houses out of single blocks."
-msgstr ""
+msgstr "Зрабіць шэраг дамоў уздоўж вуліцы з аднаго блока."
 
 msgid ""
 "Provides helper buttons to allow working with single button mouse (stylus). "
 "Activate by holding T and slip map with left mouse button"
 msgstr ""
+"Прадастаўляе дапаможныя кнопкі, якія дазваляюць працаваць з аднакнопачнай "
+"мышшу (ці стылусам). Актывуйце утрыманнем T і перамяшчайце карту левай "
+"кнопкай мышы"
 
 msgid ""
 "Traces buildings from Czech cadastral map. Needs TracerServer (.NET or Mono) "
 "to be running."
 msgstr ""
+"Нанясенне будынкаў з карты Чэшскага кадастру. Для запуску неабходны "
+"TracerServer (.NET або Mono)."
 
 msgid ""
 "Traces buildings and other shapes from a map. Needs Tracer2Server to be "
 "running."
 msgstr ""
+"Нанясенне будынкаў і іншых аб’ектаў з чэшскай кадастравай карты. Для працы "
+"неабходны Tracer2Server."
 
 msgid "Plugin to digital sign OSM-Data"
-msgstr ""
+msgstr "Модуль для лічбавага подпісу дадзеных OSM"
 
 msgid ""
 "Provides a straightforward GUI for adding, editing and deleting turn lanes."
 msgstr ""
+"Прадастаўляе просты GUI для дадання, рэдагавання і выдалення паваротных "
+"палос."
 
 msgid ""
 "The turnrestrictions plugin allows to enter maintain information about turn "
 "restrictions in the OpenStreetMap database."
 msgstr ""
+"Модуль Turnrestrictions дазваляе ўвесці асноўную інфармацыю пра абмежаванні "
+"на паварот у базу дадзеных OpenStreetMap."
 
 msgid "Allows undeleting object from OSM database"
-msgstr ""
+msgstr "Дазваляе аднаўляць аб’екты, выдаленыя з базы дадзеных OSM"
 
 msgid "Several utilities that make your life easier."
-msgstr ""
+msgstr "Некалькі ўтыліт, якія спрашчаюць жыццё."
 
 msgid ""
 "(This Plugin is currently work in progress!!!) Links and syncs a "
 "georeferenced video against a GPS track, to use it for identify visible "
 "objects."
 msgstr ""
+"(Праца над гэтым модулем яшчэ не скончана!!!) Звязванне і сінхранізацыя "
+"відэа з геаграфічнай прывязкай да трэкаў GPS, выкарыстоўвайце яго для "
+"ідэнтыфікацыі бачных аб''ектаў."
 
 msgid ""
 "Supports downloading tiled, scanned maps from walking-papers.org. This "
 "plugin is still under early development and may be buggy."
 msgstr ""
+"Падтрымлівае запампоўку сканаваных карт па квадратам, з walking-papers.org. "
+"Гэты модуль пакуль яшчэ ўдасканальваецца і можа дрэнна працаваць."
 
 msgid "Easy downloading along a long set of interconnected ways"
-msgstr ""
+msgstr "Хуткая запампоўка ўздоўж вялікага набору злучаных ліній"
 
 msgid "Enables searching for waypoint imported from gpx file."
-msgstr ""
-
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
+msgstr "Пошук па шляхавых кропках, імпартаваных з файлаў gpx."
 
 msgid "Simplifies linking OSM objects to Wikipedia articles"
-msgstr ""
+msgstr "Спрашчае звязванне аб’ектаў OSM з артыкуламі Wikipedia"
 
 msgid ""
 "Drive a race car from point A to point B over aerial imagery, leave cacti "
 "behind."
 msgstr ""
+"Кіруйце гоначны аўтамабіль з пункту A у пункт B па спадарожнікавым здымку, "
+"пакідаючы за ім як-бы-GPS-след і збіваючы па шляху кактусы. (не загружайце "
+"на сервер атрыманы трэк!)"
 
 msgid "Surface"
-msgstr ""
+msgstr "Паверхня"
 
 msgid "paved"
-msgstr ""
+msgstr "негрунтавая дарога"
 
 msgid "unpaved"
-msgstr ""
+msgstr "грунтавая дарога"
 
 msgid "asphalt"
-msgstr ""
+msgstr "асфальт"
 
 msgid "concrete"
-msgstr ""
+msgstr "бетон"
 
 msgid "metal"
-msgstr ""
+msgstr "метал"
 
 msgid "wood"
-msgstr ""
+msgstr "дрэва"
 
 msgid "paving_stones"
-msgstr ""
+msgstr "ходнікавая плітка"
 
 msgid "cobblestone"
-msgstr ""
+msgstr "брук"
 
 msgid "gravel"
-msgstr ""
+msgstr "жвір"
 
 msgid "pebblestone"
-msgstr ""
+msgstr "галька"
 
 msgid "compacted"
-msgstr ""
+msgstr "ушчыльненае"
 
 msgid "grass_paver"
-msgstr ""
+msgstr "экагазон"
 
 msgid "grass"
-msgstr ""
+msgstr "трава"
 
 msgid "sand"
-msgstr ""
+msgstr "пясок"
 
 msgid "ground"
-msgstr ""
+msgstr "грунт"
 
 msgid "sett"
-msgstr ""
+msgstr "брукаванка"
 
 msgid "Smoothness"
-msgstr ""
+msgstr "Праходнасць"
 
 msgid "excellent"
-msgstr ""
+msgstr "выдатная"
 
 msgid "Thin Rollers: rollerblade, skateboard"
-msgstr ""
+msgstr "Ролікавыя канькі, скейтборды і да т.п."
 
 msgid "good"
-msgstr ""
+msgstr "добрая"
 
 msgid "Thin Wheels: racing bike"
-msgstr ""
+msgstr "Гоначныя ровары"
 
 msgid "intermediate"
-msgstr ""
+msgstr "сярэдняя"
 
 msgid "Wheels: city bike, wheelchair, scooter"
-msgstr ""
+msgstr "Дарожныя ровары, інвалідныя калыскі, скутары"
 
 msgid "bad"
-msgstr ""
+msgstr "дрэнная"
 
 msgid "Robust Wheels: trekking bike, car, rickshaw"
-msgstr ""
+msgstr "Гібрыдныя ровары, легкавыя аўтамабілі, рыкшы"
 
 msgid "very_bad"
-msgstr ""
+msgstr "вельмі дрэнная"
 
 msgid "High Clearance: light duty off-road vehicle"
-msgstr ""
+msgstr "Аўтамабілі з высокім клірансам, \"паркетныя\" пазадарожнікі"
 
 msgid "horrible"
-msgstr ""
+msgstr "жудасная"
 
 msgid "Off-Road: heavy duty off-road vehicle"
-msgstr ""
+msgstr "Добрыя пазадарожнікі"
 
 msgid "very_horrible"
-msgstr ""
+msgstr "вельмі жудасная"
 
 msgid "Specialized off-road: tractor, ATV"
-msgstr ""
+msgstr "Трактары, мотаўсюдыходы і да т.п."
 
 msgid "impassable"
-msgstr ""
+msgstr "нельга праехаць"
 
 msgid "No wheeled vehicle"
-msgstr ""
+msgstr "Непраходна ні для якой колавай тэхнікі"
 
 msgctxt "riding"
 msgid "pitch"
-msgstr ""
+msgstr "спартовае поле"
 
 msgctxt "riding"
 msgid "sports_centre"
-msgstr ""
+msgstr "спартовы цэнтр"
 
 msgctxt "riding"
 msgid "stadium"
-msgstr ""
+msgstr "стадыён"
 
 msgctxt "riding"
 msgid "track"
-msgstr ""
+msgstr "трэк"
 
 msgid "clay"
-msgstr ""
+msgstr "гліна"
 
 msgid "dirt"
-msgstr ""
+msgstr "грунт"
 
 msgid "fine_gravel"
-msgstr ""
+msgstr "дробны жвір"
 
 msgid "mud"
-msgstr ""
+msgstr "бруд"
 
 msgid "Lanes"
-msgstr ""
+msgstr "Колькасць палос"
 
 msgid "Max. speed (km/h)"
-msgstr ""
+msgstr "Макс. хуткасць (км/г)"
 
 msgid "Bridge"
-msgstr ""
+msgstr "Мост"
 
 msgid "Tunnel"
-msgstr ""
+msgstr "Тунэль"
 
 msgid "Cutting"
-msgstr ""
+msgstr "Выманне"
 
 msgid "Embankment"
-msgstr ""
+msgstr "Насып"
 
 msgid "Incline"
-msgstr ""
+msgstr "Ухіл"
 
 msgid "10%"
-msgstr ""
+msgstr "10%"
 
 msgid "-10%"
-msgstr ""
+msgstr "-10%"
 
 msgid "10°"
-msgstr ""
+msgstr "10°"
 
 msgid "-10°"
-msgstr ""
+msgstr "-10°"
 
 msgid "Oneway"
-msgstr ""
+msgstr "Аднабаковая"
 
 msgid "Lit"
-msgstr ""
+msgstr "Асветленая"
 
 msgid "Width (meters)"
-msgstr ""
+msgstr "Шырыня (метры)"
 
 msgid "Sidewalk"
-msgstr ""
+msgstr "Ходнік"
 
 msgctxt "sidewalk"
 msgid "both"
-msgstr ""
+msgstr "у абодвух кірунках"
 
 msgctxt "sidewalk"
 msgid "left"
-msgstr ""
+msgstr "злева"
 
 msgctxt "sidewalk"
 msgid "right"
-msgstr ""
+msgstr "справа"
 
 msgctxt "sidewalk"
 msgid "no"
-msgstr ""
+msgstr "не"
 
 msgid "Service type"
-msgstr ""
+msgstr "Тып службовага шляху"
 
 msgid "yard"
-msgstr ""
+msgstr "дэпо"
 
 msgid "siding"
-msgstr ""
+msgstr "бакавы шлях"
 
 msgid "spur"
-msgstr ""
+msgstr "адгалінаванне"
 
 msgid "Electrified"
-msgstr ""
+msgstr "Электрыфікаваная"
 
 msgid "contact_line"
-msgstr ""
+msgstr "кантактны дрот"
 
 msgid "no"
-msgstr ""
+msgstr "не"
 
 msgid "yes"
-msgstr ""
+msgstr "так"
 
 msgid "rail"
-msgstr ""
+msgstr "рэйка"
 
 msgid "Voltage in Volts (V)"
-msgstr ""
+msgstr "Напружанне ў вольтах (В)"
 
 msgid "Frequency in Hertz (Hz)"
-msgstr ""
+msgstr "Чашчыня ў герцах (Гц)"
 
 msgid "16.67"
-msgstr ""
+msgstr "16.67"
 
 msgid "16.7"
-msgstr ""
+msgstr "16.7"
 
 msgctxt "railway"
 msgid "Tracks"
-msgstr ""
+msgstr "Рэйкавыя шляхі"
 
 msgid "Gauge (mm)"
-msgstr ""
+msgstr "Шырыня каляіны (у мм)"
 
 msgid "Allowed traffic:"
-msgstr ""
+msgstr "Дазволены рух:"
 
 msgid "Horse"
-msgstr ""
+msgstr "Конь"
 
 msgid "Motorcycle"
-msgstr ""
+msgstr "Матацыкл"
 
 msgid "Motorcar"
-msgstr ""
+msgstr "Аўтамабіль"
 
 msgid "Reference"
-msgstr ""
+msgstr "Пазначэнне (ref)"
 
 msgid "Operator"
-msgstr ""
+msgstr "Аператар"
 
 msgid "Service Times"
-msgstr ""
+msgstr "Час абслугоўвання"
 
 msgid "18:00"
-msgstr ""
+msgstr "18:00"
 
 msgid "sunset,sunrise"
-msgstr ""
+msgstr "заход,узыход"
 
 msgid "Su 09:30,11:00"
-msgstr ""
+msgstr "Su 09:30,11:00"
 
 msgid "Sa,Su,PH 09:00"
-msgstr ""
+msgstr "Sa,Su,PH 09:00"
 
 msgid "Sa 18:00; Su 10:45"
-msgstr ""
+msgstr "Sa 18:00; Su 10:45"
 
 msgid ""
 "Fr 08:00-18:00; Apr 10-15 off; Jun 07:00-20:00; Aug off; Dec 24 08:00-24:00"
 msgstr ""
+"Fr 08:00-18:00; Apr 10-15 off; Jun 07:00-20:00; Aug off; Dec 24 08:00-24:00"
 
 msgid "Sa 10:00+"
-msgstr ""
+msgstr "Sa 10:00+"
 
 msgid "week 1-53/2 Fr 09:00-12:00; week 2-52/2 We 09:00-12:00"
-msgstr ""
+msgstr "week 1-53/2 Fr 09:00-12:00; week 2-52/2 We 09:00-12:00"
 
 msgid "Opening Hours"
-msgstr ""
+msgstr "Гадзіны працы"
 
 msgid "24/7"
-msgstr ""
+msgstr "24/7"
 
 msgid "08:30-12:30,15:30-20:00"
-msgstr ""
+msgstr "08:30-12:30,15:30-20:00"
 
 msgid "Sa-Su 00:00-24:00"
-msgstr ""
+msgstr "Sa-Su 00:00-24:00"
 
 msgid "Mo-Fr 08:30-20:00; Sa,Su 08:00-15:00; PH off"
-msgstr ""
+msgstr "Mo-Fr 08:30-20:00; Sa,Su 08:00-15:00; PH off"
 
 msgid "Mo-Fr 08:30-20:00, Tu-Su 08:00-15:00; Sa 08:00-12:00"
-msgstr ""
+msgstr "Mo-Fr 08:30-20:00, Tu-Su 08:00-15:00; Sa 08:00-12:00"
 
 msgid ""
 "Mo-Su 08:00-18:00; Apr 10-15 off; Jun 08:00-14:00; Aug off; Dec 25 off"
 msgstr ""
+"Mo-Su 08:00-18:00; Apr 10-15 off; Jun 08:00-14:00; Aug off; Dec 25 off"
 
 msgid "sunrise-sunset"
-msgstr ""
+msgstr "з узыходу да заходу"
 
 msgid "Su 10:00+"
-msgstr ""
+msgstr "Su 10:00+"
 
 msgid "Wheelchairs"
-msgstr ""
+msgstr "Інвалідныя каляскі"
 
 msgid "limited"
-msgstr ""
+msgstr "абмежавана"
 
 msgid "Brand"
-msgstr ""
+msgstr "Брэнд"
 
 msgid "Internet access"
-msgstr ""
+msgstr "Кропка доступу ў інтэрнэт"
 
 msgid "wlan"
-msgstr ""
+msgstr "бесправодная сетка"
 
 msgid "wired"
-msgstr ""
+msgstr "правадны доступ у сетку"
 
 msgid "terminal"
-msgstr ""
+msgstr "тэрмінал"
 
 msgid "Internet access fee"
-msgstr ""
+msgstr "Платны доступ у інтэрнэт"
 
 msgid "Smoking"
-msgstr ""
+msgstr "З месцамі для курэння"
 
 msgid "dedicated"
-msgstr ""
+msgstr "вылучаны"
 
 msgid "separated"
-msgstr ""
+msgstr "падзелены"
 
 msgid "isolated"
-msgstr ""
+msgstr "ізаляваны"
 
 msgid "Height (meters)"
-msgstr ""
+msgstr "Вышыня (у метрах)"
 
 msgid "Max. width (meters)"
-msgstr ""
+msgstr "Макс. шырыня (у метрах)"
 
 msgid "Max. height (meters)"
-msgstr ""
+msgstr "Макс. вышыня (у метрах)"
 
 msgid "pitch"
-msgstr ""
+msgstr "спартовае поле"
 
 msgid "sports_centre"
-msgstr ""
+msgstr "спартовы цэнтр"
 
 msgid "stadium"
-msgstr ""
+msgstr "стадыён"
 
 msgid "Sport"
-msgstr ""
+msgstr "Спорт"
 
 msgctxt "sport"
 msgid "multi"
-msgstr ""
+msgstr "некалькі"
 
 msgctxt "sport"
 msgid "archery"
-msgstr ""
+msgstr "стральба з лука"
 
 msgctxt "sport"
 msgid "athletics"
-msgstr ""
+msgstr "атлетыка"
 
 msgctxt "sport"
 msgid "american_football"
-msgstr ""
+msgstr "амерыканскі футбол"
 
 msgctxt "sport"
 msgid "australian_football"
-msgstr ""
+msgstr "аўстралійскі футбол"
 
 msgctxt "sport"
 msgid "baseball"
-msgstr ""
+msgstr "бейсбол"
 
 msgctxt "sport"
 msgid "basketball"
-msgstr ""
+msgstr "баскетбол"
+
+msgctxt "sport"
+msgid "beachvolleyball"
+msgstr "пляжны валейбол"
+
+msgctxt "sport"
+msgid "billiards"
+msgstr "більярд"
 
 msgctxt "sport"
 msgid "boules"
-msgstr ""
+msgstr "бул"
 
 msgctxt "sport"
 msgid "bowls"
-msgstr ""
+msgstr "боулз"
 
 msgctxt "sport"
 msgid "canadian_football"
-msgstr ""
+msgstr "канадскі футбол"
 
 msgctxt "sport"
 msgid "canoe"
-msgstr ""
+msgstr "байдаркі і каякі"
 
 msgctxt "sport"
 msgid "climbing"
-msgstr ""
+msgstr "скалалазанне"
 
 msgctxt "sport"
 msgid "cricket"
-msgstr ""
-
-msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
+msgstr "крыкет"
 
 msgctxt "sport"
 msgid "croquet"
-msgstr ""
+msgstr "кракет"
 
 msgctxt "sport"
 msgid "cycling"
-msgstr ""
+msgstr "веласпорт"
 
 msgctxt "sport"
 msgid "dog_racing"
-msgstr ""
+msgstr "сабачыя спаборніцтвы"
 
 msgctxt "sport"
 msgid "equestrian"
-msgstr ""
+msgstr "верхавая язда"
+
+msgctxt "sport"
+msgid "field_hockey"
+msgstr "хакей на траве"
 
 msgctxt "sport"
 msgid "gaelic_games"
-msgstr ""
+msgstr "гэльскія гульні"
 
 msgctxt "sport"
 msgid "golf"
-msgstr ""
+msgstr "гольф"
 
 msgctxt "sport"
 msgid "gymnastics"
-msgstr ""
+msgstr "гімнастыка"
 
 msgctxt "sport"
 msgid "handball"
-msgstr ""
+msgstr "гандбол"
 
 msgctxt "sport"
-msgid "hockey"
-msgstr ""
+msgid "horse_racing"
+msgstr "спаборніцтвы на конях"
 
 msgctxt "sport"
-msgid "horse_racing"
-msgstr ""
+msgid "ice_hockey"
+msgstr "хакей на лёдзе"
+
+msgctxt "sport"
+msgid "karting"
+msgstr "картынг"
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr "авіамадэлізм"
+
+msgctxt "sport"
+msgid "motocross"
+msgstr "мотакрос"
 
 msgctxt "sport"
 msgid "motor"
-msgstr ""
+msgstr "аўтамотаспорт"
 
 msgctxt "sport"
 msgid "pelota"
-msgstr ""
+msgstr "пелота"
 
 msgctxt "sport"
 msgid "racquet"
-msgstr ""
+msgstr "гульні з ракеткамі"
+
+msgctxt "sport"
+msgid "rc_car"
+msgstr "аўтамадэлізм"
 
 msgctxt "sport"
 msgid "rugby_league"
-msgstr ""
+msgstr "рэгбі-ліг (рэгбі-13)"
 
 msgctxt "sport"
 msgid "rugby_union"
-msgstr ""
+msgstr "рэгбі-юніён (рэгбі-15)"
 
 msgctxt "sport"
 msgid "running"
-msgstr ""
+msgstr "бег"
+
+msgctxt "sport"
+msgid "safety_training"
+msgstr "самаабарона"
 
 msgctxt "sport"
 msgid "shooting"
-msgstr ""
+msgstr "стральба"
 
 msgctxt "sport"
 msgid "skateboard"
-msgstr ""
+msgstr "скейтборд"
 
 msgctxt "sport"
 msgid "skating"
-msgstr ""
+msgstr "канькі"
 
 msgctxt "sport"
 msgid "soccer"
-msgstr ""
+msgstr "футбол"
 
 msgctxt "sport"
 msgid "swimming"
-msgstr ""
+msgstr "плаванне"
 
 msgctxt "sport"
 msgid "table_tennis"
-msgstr ""
+msgstr "настольны тэніс"
 
 msgctxt "sport"
 msgid "tennis"
-msgstr ""
+msgstr "тэніс"
+
+msgctxt "sport"
+msgid "volleyball"
+msgstr "валейбол"
+
+msgctxt "sport"
+msgid "9pin"
+msgstr "кегельбан"
+
+msgctxt "sport"
+msgid "10pin"
+msgstr "боўлінг"
 
 msgid "Fee"
-msgstr ""
+msgstr "Грашовы збор"
 
 msgid "06:00-20:00"
-msgstr ""
+msgstr "06:00-20:00"
 
 msgid "Mo-Fr 09:00-18:00,Sa 08:00-14:00"
-msgstr ""
+msgstr "Mo-Fr 09:00-18:00,Sa 08:00-14:00"
 
 msgid "May-Sep 09:30-12:30,14:15-19:30"
-msgstr ""
+msgstr "May-Sep 09:30-12:30,14:15-19:30"
 
 msgctxt "parking"
 msgid "multi-storey"
-msgstr ""
+msgstr "шматузроўневая"
 
 msgctxt "parking"
 msgid "surface"
-msgstr ""
+msgstr "адкрытая наземная"
 
 msgctxt "parking"
 msgid "underground"
-msgstr ""
+msgstr "падземная"
 
 msgctxt "parking"
 msgid "rooftop"
-msgstr ""
+msgstr "на даху"
 
 msgid "Reference number"
-msgstr ""
+msgstr "Даведкавы нумар"
 
 msgid "Access"
-msgstr ""
+msgstr "Доступ"
 
 msgid "private"
-msgstr ""
+msgstr "па пропусках"
 
 msgid "customers"
-msgstr ""
+msgstr "кліенты"
 
 msgid "permissive"
-msgstr ""
+msgstr "дазволена ўладальнікам"
 
 msgid "Time Limit (minutes)"
-msgstr ""
+msgstr "Ліміт часу (хвілін)"
 
 msgid "Supervised"
-msgstr ""
+msgstr "Ахоўваемая"
 
 msgid "General Access"
-msgstr ""
+msgstr "Доступ для ўсіх"
 
 msgid "destination"
-msgstr ""
+msgstr "рэзідэнты"
 
 msgid "delivery"
-msgstr ""
+msgstr "дастаўка"
 
 msgid "agricultural"
-msgstr ""
+msgstr "сельскагаспадарчае"
 
 msgid "forestry"
-msgstr ""
+msgstr "ляснікоўства"
 
 msgid "Population"
-msgstr ""
+msgstr "Насельніцтва"
 
 msgid "Post code"
-msgstr ""
+msgstr "Паштовы індэкс"
 
 msgid "Website"
-msgstr ""
+msgstr "Сайт"
 
 msgid "Distance (km)"
-msgstr ""
+msgstr "Адлегласць (км)"
 
 msgid "Ascent (m)"
-msgstr ""
+msgstr "Уздым (м)"
 
 msgid "Descent (m)"
-msgstr ""
+msgstr "Спуск (м)"
 
 msgid "Roundtrip"
-msgstr ""
+msgstr "Замкнёны маршрут"
 
 msgid "Symbol description"
-msgstr ""
+msgstr "Апісанне знака"
 
 msgid "broadleaved"
-msgstr ""
+msgstr "шырокалісцевы"
 
 msgid "needleleaved"
-msgstr ""
+msgstr "іглічны"
 
 msgid "mixed"
-msgstr ""
+msgstr "Змяшаны"
 
 msgid "leafless"
-msgstr ""
+msgstr "без лісця"
 
 msgid "Cycle"
-msgstr ""
+msgstr "Феналагічны цыкл"
 
 msgid "deciduous"
-msgstr ""
+msgstr "Лістападны"
 
 msgid "Plants that are leafless for a certain period during the year."
-msgstr ""
+msgstr "Расліны, якія цалкам скідаюць лістоту ў пэўны перыяд года."
 
 msgid "evergreen"
-msgstr ""
+msgstr "вечназялёны"
 
 msgid "Plants that are never entirely without green foliage."
-msgstr ""
+msgstr "Расліны, якія ніколі не скідаюць лістоту цалкам."
 
 msgid "semi_deciduous"
-msgstr ""
+msgstr "паўлістападны"
 
 msgid ""
 "Plants that lose their foliage for a very short period, when old leaves fall "
 "off and new foliage growth is starting."
 msgstr ""
+"Расліны, якія застаюцца без лістоты на вельмі кароткі перыяд, калі старое "
+"лісце ападае, а новыя пачынаюць расці."
 
 msgid "semi_evergreen"
-msgstr ""
+msgstr "паўвечназялёны"
 
 msgid ""
 "Plants that lose most, but not all, of their foliage for a fraction of the "
 "year."
 msgstr ""
+"Расліны, якія скідаюць большую частку лістоты (але не ўсю) у пэўны перыяд "
+"года."
 
 msgid "Habitat with evergreen and deciduous vegetation."
-msgstr ""
+msgstr "Арэал з вечназялёнай і лістападнай расліннасцю."
 
 msgid "bahai"
-msgstr ""
+msgstr "бахаі"
 
 msgid "buddhist"
-msgstr ""
+msgstr "будызм"
 
 msgid "christian"
-msgstr ""
+msgstr "хрысціянства"
 
 msgid "hindu"
-msgstr ""
+msgstr "індуізм"
 
 msgid "jain"
-msgstr ""
+msgstr "джайнізм"
 
 msgid "jewish"
-msgstr ""
+msgstr "юдаізм"
 
 msgid "muslim"
-msgstr ""
+msgstr "іслам"
 
 msgid "shinto"
-msgstr ""
+msgstr "сінтаізм"
 
 msgid "sikh"
-msgstr ""
+msgstr "сікхізм"
 
 msgid "spiritualist"
-msgstr ""
+msgstr "спірытуалізм"
 
 msgid "taoist"
-msgstr ""
+msgstr "даасізм"
 
 msgid "unitarian"
-msgstr ""
+msgstr "унітарыянства"
 
 msgid "zoroastrian"
-msgstr ""
+msgstr "зораастрызм"
 
 msgid "Denomination"
-msgstr ""
+msgstr "Канфесія"
 
 msgid "anglican"
-msgstr ""
+msgstr "англіканская"
 
 msgid "baptist"
-msgstr ""
+msgstr "баптысты"
 
 msgid "catholic"
-msgstr ""
+msgstr "каталікі"
 
 msgid "evangelical"
-msgstr ""
+msgstr "евангелісты"
 
 msgid "greek_catholic"
-msgstr ""
+msgstr "грэкакаталіцызм"
 
 msgid "jehovahs_witness"
-msgstr ""
+msgstr "сведкі Іеговы"
 
 msgid "lutheran"
-msgstr ""
+msgstr "лютэране"
 
 msgid "methodist"
-msgstr ""
+msgstr "метадысты"
 
 msgid "mormon"
-msgstr ""
+msgstr "мармоны"
 
 msgid "old_catholic"
-msgstr ""
+msgstr "старакаталіцызм"
 
 msgid "orthodox"
-msgstr ""
+msgstr "праваслаўныя"
 
 msgid "pentecostal"
-msgstr ""
+msgstr "пяцідзесятнікі"
 
 msgid "presbyterian"
-msgstr ""
+msgstr "прэсвітарыянства"
 
 msgid "protestant"
-msgstr ""
+msgstr "пратэстанты"
 
 msgid "quaker"
-msgstr ""
+msgstr "квакеры"
 
 msgid "roman_catholic"
-msgstr ""
+msgstr "рымска-каталіцкая царква"
 
 msgid "shia"
-msgstr ""
+msgstr "шыіты"
 
 msgid "sunni"
-msgstr ""
+msgstr "суніты"
 
 msgid "high"
-msgstr ""
+msgstr "высокае"
 
 msgid "medium"
-msgstr ""
+msgstr "сярэдняе"
 
 msgid "low"
-msgstr ""
+msgstr "нізкае"
 
 msgid "750000;200000"
-msgstr ""
+msgstr "750000;200000"
 
 msgid "110000;20000"
-msgstr ""
+msgstr "110000;20000"
 
 msgid "Branch operator"
-msgstr ""
+msgstr "Філіял аператара"
 
 msgid "Amount of Cables"
-msgstr ""
+msgstr "Колькасць кабеляў"
 
 msgid "Amount of circuits"
-msgstr ""
+msgstr "Колькасць ланцугоў"
 
 msgid "Location"
-msgstr ""
+msgstr "Размяшчэнне"
 
 msgctxt "power"
 msgid "outdoor"
-msgstr ""
+msgstr "на адкрытым паветры"
 
 msgctxt "power"
 msgid "indoor"
-msgstr ""
+msgstr "у памяшканні"
 
 msgctxt "power"
 msgid "underground"
-msgstr ""
+msgstr "пад зямлёй"
 
 msgctxt "power"
 msgid "platform"
-msgstr ""
+msgstr "платформа"
 
 msgctxt "power"
 msgid "kiosk"
-msgstr ""
+msgstr "будка"
 
 msgid "Start date"
-msgstr ""
+msgstr "Дата запуску"
 
 msgid "Output forms of energy:"
-msgstr ""
+msgstr "Віды генерыруемай энергіі:"
 
 msgid "biogas"
-msgstr ""
+msgstr "біягаз"
 
 msgid "2 W"
-msgstr ""
+msgstr "2 W"
 
 msgid "3 kW"
-msgstr ""
+msgstr "3 kW"
 
 msgid "5 MW"
-msgstr ""
+msgstr "5 MW"
 
 msgid "7 GW"
-msgstr ""
+msgstr "7 GW"
 
 msgid "electricity"
-msgstr ""
+msgstr "электрычнасць"
 
 msgid "hot water"
-msgstr ""
+msgstr "гарачая вада"
 
 msgid "hot air"
-msgstr ""
+msgstr "гарачае паветра"
 
 msgid "cold water"
-msgstr ""
+msgstr "халодная вада"
 
 msgid "cold air"
-msgstr ""
+msgstr "халоднае паветра"
 
 msgid "compressed air"
-msgstr ""
+msgstr "сціснутае паветра"
 
 msgid "steam"
-msgstr ""
+msgstr "пара"
 
 msgid "vacuum"
-msgstr ""
+msgstr "вакуум"
 
 msgid "Max. weight (tonnes)"
-msgstr ""
+msgstr "Макс. маса (у тонах)"
 
 msgid "Toll"
-msgstr ""
+msgstr "Платная"
 
 msgid "Is the water body intermittent (disappears seasonally)?"
-msgstr ""
+msgstr "Ці вадаём перасыхае (перыядычна знікае)?"
 
 msgid "culvert"
-msgstr ""
+msgstr "дрэнажная труба"
 
 msgid "Water access rules:"
-msgstr ""
+msgstr "Правілы доступу да вады:"
 
 msgid "Ship"
-msgstr ""
+msgstr "Карабель"
 
 msgid "designated"
-msgstr ""
+msgstr "асн. прызначэнне"
 
 msgid "Boat"
-msgstr ""
+msgstr "Лодкі"
 
 msgid "Motorboat"
-msgstr ""
+msgstr "Маторныя лодкі"
 
 msgid "Canoe"
-msgstr ""
+msgstr "Каноэ"
 
 msgid "Streets"
-msgstr ""
+msgstr "Вуліцы"
 
 msgid "Motorway"
-msgstr ""
+msgstr "Аўтамагістраль"
 
 msgid "Motorway Link"
-msgstr ""
+msgstr "З’езд з аўтамагістралі"
 
 msgid "Trunk"
-msgstr ""
+msgstr "Аўтастрада"
 
 msgid "Motorroad"
-msgstr ""
+msgstr "Аўтамагістраль"
 
 msgid "Trunk Link"
-msgstr ""
+msgstr "З’езд з аўтастрады"
 
 msgid "Primary"
-msgstr ""
+msgstr "Асноўная"
 
 msgid "Primary Link"
-msgstr ""
+msgstr "З’езд з асноўнай"
 
 msgid "Secondary"
-msgstr ""
+msgstr "Другасная"
 
 msgid "Secondary Link"
-msgstr ""
+msgstr "З’езд з другаснай"
 
 msgid "Tertiary"
-msgstr ""
+msgstr "Троесная"
 
 msgid "Tertiary Link"
-msgstr ""
+msgstr "З’езд з троеснай"
 
 msgid "Unclassified"
-msgstr ""
+msgstr "Не класіфікавана"
+
+msgid "Street has no name"
+msgstr "Вуліца не мае назвы"
 
 msgid "Passing Places"
-msgstr ""
+msgstr "Месца для раз’езду"
 
 msgid "Residential"
-msgstr ""
+msgstr "Мясцовага значэння"
 
 msgid "Bicycle Road"
-msgstr ""
+msgstr "Веласіпедная дарога"
 
 msgid "Highway type"
-msgstr ""
+msgstr "Тып аўтамабільнай дарогі"
 
 msgctxt "Highway"
 msgid "residential"
-msgstr ""
+msgstr "мясцовага значэння"
 
 msgctxt "Highway"
 msgid "service"
-msgstr ""
+msgstr "службовы"
 
 msgctxt "Highway"
 msgid "unclassified"
-msgstr ""
+msgstr "не класіфікавана"
 
 msgctxt "Highway"
 msgid "path"
-msgstr ""
+msgstr "сцежка"
 
 msgctxt "Highway"
 msgid "cycleway"
-msgstr ""
+msgstr "веласіпедная дарожка"
 
 msgid "Vehicle access"
-msgstr ""
+msgstr "Доступ аўтатранспарту"
 
 msgid "Oneway for bicycle"
-msgstr ""
+msgstr "Аднабаковая для ровараў"
 
 msgid "Living Street"
-msgstr ""
+msgstr "Жылая вуліца"
 
 msgid "Pedestrian"
-msgstr ""
+msgstr "Пешаходная"
 
 msgid "Area"
-msgstr ""
+msgstr "Палігон"
 
 msgid "Service"
-msgstr ""
+msgstr "Службовая"
 
 msgid "Service way type"
-msgstr ""
+msgstr "Тып службовага праезду"
 
 msgid "alley"
-msgstr ""
+msgstr "праезд"
 
 msgid "driveway"
-msgstr ""
+msgstr "пад’язная дарожка"
 
 msgid "parking_aisle"
-msgstr ""
+msgstr "паркавальны праезд"
 
 msgid "drive-through"
-msgstr ""
+msgstr "абслугоўванне ў аўта"
 
 msgid "Parking Aisle"
-msgstr ""
+msgstr "Праезд на паркоўцы"
 
 msgid "Escape"
-msgstr ""
+msgstr "Паласа аварыйнага тармажэння"
 
 msgid ""
 "Emergency lane beside long descending slopes for trucks and other vehicles "
 "to stop safely after brake failure."
 msgstr ""
+"Паласа бяспекі ўздоўж доўгіх схілаў для аварыйнага прыпынку грузавікоў і "
+"іншага аўтатранспарту пры паломцы тармазной сістэмы."
+
+msgid "Raceway"
+msgstr "Гоначная траса"
 
 msgid "Road (Unknown Type)"
-msgstr ""
+msgstr "Дарога (тып невядомы)"
 
 msgid "Construction"
-msgstr ""
+msgstr "Будаўніцтва"
 
 msgctxt "Highway"
 msgid "motorway"
-msgstr ""
+msgstr "аўтамагістраль"
 
 msgctxt "Highway"
 msgid "motorway_link"
-msgstr ""
+msgstr "з’езд з аўтамагістралі"
 
 msgctxt "Highway"
 msgid "trunk"
-msgstr ""
+msgstr "аўтастрада"
 
 msgctxt "Highway"
 msgid "trunk_link"
-msgstr ""
+msgstr "з’езд з аўтастрады"
 
 msgctxt "Highway"
 msgid "primary"
-msgstr ""
+msgstr "асноўная"
 
 msgctxt "Highway"
 msgid "primary_link"
-msgstr ""
+msgstr "з’езд з асноўнай"
 
 msgctxt "Highway"
 msgid "secondary"
-msgstr ""
+msgstr "другасная"
 
 msgctxt "Highway"
 msgid "secondary_link"
-msgstr ""
+msgstr "з’езд з другаснай"
 
 msgctxt "Highway"
 msgid "tertiary"
-msgstr ""
+msgstr "троесная"
 
 msgctxt "Highway"
 msgid "tertiary_link"
-msgstr ""
+msgstr "з’езд з троеснай"
 
 msgctxt "Highway"
 msgid "bus_guideway"
-msgstr ""
+msgstr "аўтобусная рэйка"
 
 msgctxt "Highway"
 msgid "bridleway"
-msgstr ""
+msgstr "для верхавой язды"
 
 msgctxt "Highway"
 msgid "living_street"
-msgstr ""
+msgstr "жылая вуліца"
 
 msgctxt "Highway"
 msgid "pedestrian"
-msgstr ""
+msgstr "пешаходная вуліца"
 
 msgctxt "Highway"
 msgid "track"
-msgstr ""
+msgstr "палявая/лясная дарога"
 
 msgctxt "Highway"
 msgid "footway"
-msgstr ""
+msgstr "пешаходная дарожка"
 
 msgctxt "Highway"
 msgid "steps"
-msgstr ""
+msgstr "прыступкі"
 
 msgid "Junction"
-msgstr ""
+msgstr "Скрыжаванне"
 
 msgid "roundabout"
-msgstr ""
+msgstr "Круг"
 
 msgid "jughandle"
-msgstr ""
+msgstr "аднабаковы"
 
 msgid "Road Restrictions"
-msgstr ""
+msgstr "Дарожныя абмежаванні"
 
 msgid ""
 "Some road types already imply some access restrictions which should not be "
 "set again."
 msgstr ""
+"Некаторыя тыпы дарог ўжо маюць на ўвазе некаторыя абмежаванні доступу, якія "
+"не трэба ўсталёўваць зноў."
 
 msgid "No exit (cul-de-sac)"
-msgstr ""
+msgstr "Тупік"
 
 msgid "Transport mode restrictions"
-msgstr ""
+msgstr "Абмежаванні рэжыму перасоўвання"
 
 msgid "official"
-msgstr ""
+msgstr "афіцыйнае"
 
 msgid "Vehicles per type"
-msgstr ""
+msgstr "Транспартныя сродкі па тыпе"
 
 msgid "All vehicles"
-msgstr ""
+msgstr "Усе транспартныя сродкі"
 
 msgid "use_sidepath"
-msgstr ""
+msgstr "па асобнай паласе"
 
 msgid "Motor vehicles"
-msgstr ""
+msgstr "Механічныя транспартныя сродкі"
 
 msgid "Light Commercial Vehicles (goods)"
-msgstr ""
+msgstr "Невялікі камерцыйны аўтамабіль (goods)"
 
 msgid "Heavy Goods Vehicles (hgv)"
-msgstr ""
+msgstr "Транспартны сродак для перавозкі цяжкіх грузаў"
 
 msgid "Vehicles per use"
-msgstr ""
+msgstr "Транспартныя сродкі  па выкарыстанні"
 
 msgid "Agricultural"
-msgstr ""
+msgstr "Землі сельскагаспадарчага прызначэння"
 
 msgid "Emergency vehicles"
-msgstr ""
+msgstr "Аварыйныя службы (emergency)"
 
 msgid "High-occupancy vehicles (hov)"
-msgstr ""
+msgstr "ТС з пасажырамі (hov)"
 
 msgid "Public Service Vehicles (psv)"
-msgstr ""
+msgstr "Грамадскі транспарт"
 
 msgid "Tourist buses"
-msgstr ""
+msgstr "Турыстычныя аўтобусы"
 
 msgid "Min. speed (km/h)"
-msgstr ""
+msgstr "Мін. хуткасць (у км/г)"
 
 msgid "Max. axleload (tonnes)"
-msgstr ""
+msgstr "Макс. нагрузка на вось (тон)"
 
 msgid "Max. length (meters)"
-msgstr ""
+msgstr "Макс. даўжыня (у метрах)"
 
 msgid "Overtaking"
-msgstr ""
+msgstr "Абгон дазволены"
 
 msgctxt "overtaking"
 msgid "yes"
-msgstr ""
+msgstr "так"
 
 msgctxt "overtaking"
 msgid "both"
-msgstr ""
+msgstr "у абодвух кірунках"
 
 msgctxt "overtaking"
 msgid "forward"
-msgstr ""
+msgstr "па кірунку лініі"
 
 msgctxt "overtaking"
 msgid "backward"
-msgstr ""
+msgstr "супраць кірунку лініі"
 
 msgctxt "overtaking"
 msgid "no"
-msgstr ""
+msgstr "не"
 
 msgid "Roundabout"
-msgstr ""
+msgstr "Круг"
 
 msgctxt "Highway"
 msgid "construction"
-msgstr ""
+msgstr "будаўніцтва"
 
 msgid "Ford"
-msgstr ""
+msgstr "Брод"
 
 msgid "Ways"
-msgstr ""
+msgstr "Лініі"
 
 msgid "Track"
-msgstr ""
+msgstr "Палявая/лясная дарога"
 
 msgid "Tracktype"
-msgstr ""
+msgstr "Узровень праходнасці"
 
 msgid "grade1"
-msgstr ""
+msgstr "тып 1 (з пакрыццём)"
 
 msgid "grade2"
-msgstr ""
+msgstr "тып 2 (жвір, утрамбаваны грунт)"
 
 msgid "grade3"
-msgstr ""
+msgstr "тып 3 (жвір з пяском (не ўтрамбаваны))"
 
 msgid "grade4"
-msgstr ""
+msgstr "тып 4 (грунт)"
 
 msgid "grade5"
-msgstr ""
+msgstr "тып 5 (пясок, трава)"
 
 msgid "MTB Scale"
-msgstr ""
+msgstr "Шкала MTB"
 
 msgid "Path"
-msgstr ""
+msgstr "Сцежка"
 
 msgid "SAC Scale"
-msgstr ""
+msgstr "Шкала SAC"
 
 msgid "T1 - hiking trail"
-msgstr ""
+msgstr "T1 - пешы турызм"
 
 msgid "Trail well cleared. Area flat or slightly sloped, no fall hazard"
 msgstr ""
+"Вычышчаны маршрут. Гарызантальная, трохі нахільная сцежка, без небяспекі "
+"падзення"
 
 msgid "T2 - mountain hiking trail"
-msgstr ""
+msgstr "T2 - горны турызм"
 
 msgid ""
 "Trail with continuous line and balanced ascent. Terrain partially steep, "
 "fall hazard possible"
 msgstr ""
+"Працяглая сцежка, якая патрабуе навыкаў раўнавагі. Небяспека падзення са "
+"схілаў"
 
 msgid "T3 - difficult, exposed hiking trail"
-msgstr ""
+msgstr "T3 - складаны, пешы турызм"
 
 msgid ""
 "exposed sites may be secured with ropes or chains, possible need to use "
 "hands for balance. Partly exposed sites with fall hazard, scree, pathless "
 "jagged rocks"
 msgstr ""
+"некаторыя ўчасткі могуць быць абсталяваны вяроўкамі ці ланцугамі для "
+"палягчэння ўтрымання балансу з дапамогай рук. Некаторыя вядомыя месцы з "
+"магчымасцю каменяпаду, асыпкамі і вострымі камянямі"
 
 msgid "T4 - difficult, exposed, steep alpine trail"
-msgstr ""
+msgstr "T4 - складаны, горны турызм па вывучаных маршрутах"
 
 msgid ""
 "sometimes need for hand use to get ahead. Terrain quite exposed, precarious "
 "grassy acclivities, jagged rocks, facile snow-free glaciers"
 msgstr ""
+"часам даводзіцца выкарыстоўваць рукі пры руху. Адкрыты грунт, ненадзейныя "
+"травяністыя ўздымы, вострыя камяні, невялікія бясснежныя леднікі."
 
 msgid "T5 - difficult alpine trail with climbing"
-msgstr ""
+msgstr "T5 - складаны горны турызм з элементамі скалалазання"
 
 msgid ""
 "single plainly climbing up to second grade. Exposed, demanding terrain, "
 "jagged rocks, few dangerous glacier and snow"
 msgstr ""
+"адзінкавы альпінізм другога класа. Няроўная, небяспечная паверхня, вострыя "
+"камяні, сустракаецца снег і існуе небяспека сыходжання лавіны"
 
 msgid "T6 - hazardous alpine trail with climbing"
-msgstr ""
+msgstr "T6 - вельмі складаны горны турызм з элементамі скалалазання"
 
 msgid ""
 "climbing up to second grade. Often very exposed, precarious jagged rocks, "
 "glacier with danger to slip and fall"
 msgstr ""
+"набліжаецца да другога ўзроўню. Часта вельмі зменены карозіяй, ўтрымліваюць "
+"вострыя камяні, вялікая небяспека саслізвання або падзення"
 
 msgid "Visibility"
-msgstr ""
+msgstr "Бачнасць"
 
 msgctxt "trail_visibility"
 msgid "excellent"
-msgstr ""
+msgstr "выдатная"
 
 msgctxt "trail_visibility"
 msgid "good"
-msgstr ""
+msgstr "добрая"
 
 msgctxt "trail_visibility"
 msgid "intermediate"
-msgstr ""
+msgstr "сярэдняя"
 
 msgctxt "trail_visibility"
 msgid "bad"
-msgstr ""
+msgstr "дрэнная"
 
 msgctxt "trail_visibility"
 msgid "horrible"
-msgstr ""
+msgstr "жудасная"
 
 msgctxt "trail_visibility"
 msgid "no"
-msgstr ""
+msgstr "не"
 
 msgid "Ski"
-msgstr ""
+msgstr "Лыжы"
 
 msgid "Snowmobile"
-msgstr ""
+msgstr "Снегаход"
 
 msgid "Dedicated Bridleway"
-msgstr ""
+msgstr "Дарога для верхавой язды"
 
 msgid "Cycle Lane/Track"
-msgstr ""
+msgstr "Веласіпедная паласа/дарожка"
 
 msgid "Cycleway"
-msgstr ""
+msgstr "Веладарожка"
 
 msgid "lane"
-msgstr ""
+msgstr "паласа"
 
 msgid "track"
-msgstr ""
+msgstr "трэк"
 
 msgid "opposite_lane"
-msgstr ""
+msgstr "сустрэчная_паласа"
 
 msgid "opposite_track"
-msgstr ""
+msgstr "сустрэчная_дарожка"
 
 msgid "opposite"
-msgstr ""
+msgstr "сустрэчная"
 
 msgid "share_busway"
-msgstr ""
+msgstr "сумесна_з_аўтобусам"
 
 msgid "shared_lane"
-msgstr ""
+msgstr "сумесная"
 
 msgid "Cycleway left"
-msgstr ""
+msgstr "Веладарожка злева"
 
 msgid "Cycleway right"
-msgstr ""
+msgstr "Веладарожка справа"
 
 msgid "Oneway (bicycle)"
-msgstr ""
+msgstr "аднабаковы рух (ровараў)"
 
 msgid "Edit Highway Attributes:"
-msgstr ""
+msgstr "Уласцівасці дарогі:"
 
 msgid "Highway"
-msgstr ""
+msgstr "Дарога"
 
 msgid "Dedicated Cycleway"
-msgstr ""
+msgstr "Веладарожка"
 
 msgid "Pedestrians"
-msgstr ""
+msgstr "Пешаходы"
 
 msgid "Segregated Foot- and Cycleway"
-msgstr ""
+msgstr "Падзеленыя пешаходная і веладарожка"
 
 msgid "Combined Foot- and Cycleway"
-msgstr ""
+msgstr "Сумешчаныя пешаходная і веладарожка"
 
 msgid "Dedicated Footway"
-msgstr ""
+msgstr "Пешаходная дарожка"
 
 msgid "Steps"
-msgstr ""
+msgstr "Прыступкі"
 
 msgid "Amount of Steps"
-msgstr ""
+msgstr "Колькасць прыступак"
 
 msgid "Ramp"
-msgstr ""
+msgstr "Пандус"
 
 msgid "Stroller ramp"
-msgstr ""
+msgstr "Пандус для калясак"
 
 msgid "Bicycle ramp"
-msgstr ""
+msgstr "Веласіпедны пандус"
 
 msgid "Wheelchair ramp"
-msgstr ""
+msgstr "Пандус для інвалідных калясак"
 
 msgid "Luggage ramp"
-msgstr ""
+msgstr "Пандус для багажу"
 
 msgid "automatic"
-msgstr ""
+msgstr "аўтаматычны"
 
 msgid "manual"
-msgstr ""
+msgstr "ручны"
 
 msgid "Handrail"
-msgstr ""
+msgstr "Парэнчы"
 
 msgid "Left handrail"
-msgstr ""
+msgstr "Злева"
 
 msgid "Center handrail"
-msgstr ""
+msgstr "Пасярэдзіне"
 
 msgid "Right handrail"
-msgstr ""
+msgstr "Справа"
 
 msgid "Waypoints"
-msgstr ""
+msgstr "Дарожныя кропкі"
 
 msgid "Motorway Junction"
-msgstr ""
+msgstr "Магістральная развязка"
 
 msgid "Number"
-msgstr ""
+msgstr "Нумар"
 
 msgid "Exit to"
-msgstr ""
+msgstr "Выезд на"
 
 msgid "Services"
-msgstr ""
+msgstr "Прыдарожны сэрвіс"
 
 msgid "Toilets"
-msgstr ""
+msgstr "Туалет"
 
 msgid "Rest Area"
-msgstr ""
+msgstr "Месца для адпачынку"
 
 msgid "Drinking Water"
-msgstr ""
+msgstr "Пітная вада"
 
 msgid "Traffic Signal"
-msgstr ""
+msgstr "Святлафор"
 
 msgid "Optional crossing attributes:"
-msgstr ""
+msgstr "Неабавязковыя атрыбуты пераходу:"
 
 msgid "Pedestrian crossing type"
-msgstr ""
+msgstr "Тып пешаходнага пераходу"
 
 msgid "uncontrolled"
-msgstr ""
+msgstr "нерэгулюемы"
 
 msgid "traffic_signals"
-msgstr ""
+msgstr "рэгулюемы"
 
 msgid "island"
-msgstr ""
+msgstr "выспа"
 
 msgid "unmarked"
-msgstr ""
+msgstr "без пазначэнняў"
 
 msgid "Crossing type name (UK)"
-msgstr ""
+msgstr "Назва пераходу (Вялікабрытанія)"
 
 msgid "zebra"
-msgstr ""
+msgstr "zebra (нерэгулёўны)"
 
 msgid "pelican"
-msgstr ""
+msgstr "pelican (са святлафорам)"
 
 msgid "toucan"
-msgstr ""
+msgstr "toucan (вела-пешаходны са святлафорам)"
 
 msgid "puffin"
-msgstr ""
+msgstr "puffin (са святлафорам з кнопкай)"
 
 msgid "pegasus"
-msgstr ""
+msgstr "pegasus (для верхавой язды)"
 
 msgid "tiger"
-msgstr ""
+msgstr "tiger (нерэгулюемы вела-пешаходны)"
 
 msgid "Button operated"
-msgstr ""
+msgstr "Кіруемы кнопкай"
 
 msgid "Sound signals"
-msgstr ""
+msgstr "Гукавыя сігналы"
 
 msgid "Crossing attendant"
-msgstr ""
+msgstr "Пад назіраннем паставога"
 
 msgid "Cross by bicycle"
-msgstr ""
+msgstr "Дазволены пераезд на ровары"
 
 msgid "Cross on horseback"
-msgstr ""
+msgstr "Дазволены пераезд на кані"
 
 msgid "Optional values for specific countries"
-msgstr ""
+msgstr "Неабавязковыя значэнні для асобных краін"
 
 msgid "Stop"
-msgstr ""
+msgstr "Стоп"
 
 msgid "Give Way"
-msgstr ""
+msgstr "Саступіце дарогу"
 
 msgid "Mini-Roundabout"
-msgstr ""
+msgstr "Міні-кругавы рух"
 
 msgid "clockwise"
-msgstr ""
+msgstr "па гадзіннікавай стрэлцы"
 
 msgid "Pedestrian Crossing"
-msgstr ""
+msgstr "Пешаходны пераход"
 
 msgid "In case of traffic signals:"
-msgstr ""
+msgstr "Пры наяўнасці святлафора:"
 
 msgid "Traffic Calming"
-msgstr ""
+msgstr "Прыстасаванне для абмежавання хуткасці"
 
 msgid "bump"
-msgstr ""
+msgstr "ляжачы паліцыянт"
 
 msgid "chicane"
-msgstr ""
+msgstr "зігзагападобныя перашкоды"
 
 msgid "choker"
-msgstr ""
+msgstr "звужэнне"
 
 msgid "cushion"
-msgstr ""
+msgstr "ляжачы паліцэйскі з разрывамі"
 
 msgid "hump"
-msgstr ""
+msgstr "шырокі ляжачы паліцыянт"
 
 msgid "rumble_strip"
-msgstr ""
+msgstr "\"пральная дошка\""
 
 msgid "table"
-msgstr ""
+msgstr "стол"
 
 msgid "Passing Place"
-msgstr ""
+msgstr "Месца раз’езду"
 
 msgid "Turning Circle"
-msgstr ""
+msgstr "Развароная пляцоўка"
 
 msgid "Turning Loop"
-msgstr ""
+msgstr "Разваротнае кола"
 
 msgid "City Limit"
-msgstr ""
+msgstr "Мяжа населенага пункта"
 
 msgid "Second Name"
-msgstr ""
+msgstr "Другая назва"
 
 msgid "Speed Camera"
-msgstr ""
+msgstr "Камера-хуткасцямер"
 
 msgid "Traffic Mirror"
-msgstr ""
+msgstr "Дарожнае люстэрка"
+
+msgid "Highway milestone"
+msgstr "Кіламетровыя слупкі"
+
+msgid "Distance (kilometers)"
+msgstr "Адлегласць (км)"
 
 msgctxt "junction=yes"
 msgid "Named Junction"
-msgstr ""
+msgstr "Найменнае скрыжаванне"
 
 msgid ""
 "Used in some countries for a named road junction who’s name serves for local "
 "orientation."
 msgstr ""
+"Выкарыстоўваецца ў некаторых краінах для найменных скрыжаванняў, назвы якіх "
+"служаць для лакальнай арыентацыі."
 
 msgid "Elevator"
-msgstr ""
+msgstr "Ліфт"
 
 msgid "Grit Bin"
-msgstr ""
+msgstr "Кантэйнер з пяском (друзам)"
 
 msgid "Mountain Pass"
-msgstr ""
+msgstr "Перавал"
 
 msgid "Elevation"
-msgstr ""
+msgstr "Вышыня над узроўнем мора"
 
 msgid "Barriers"
-msgstr ""
+msgstr "Перашкоды"
 
 msgid "Block"
-msgstr ""
+msgstr "Бетонны блок"
 
 msgid "Material"
-msgstr ""
+msgstr "Матэрыял"
 
 msgid "stone"
-msgstr ""
+msgstr "камень"
 
 msgid "Bollard"
-msgstr ""
+msgstr "Слупок"
 
 msgid "Bollard type"
-msgstr ""
+msgstr "Тып слупка"
 
 msgid "rising"
-msgstr ""
+msgstr "узнімальны"
 
 msgid "removable"
-msgstr ""
+msgstr "выдаляемы"
 
 msgid "plastic"
-msgstr ""
+msgstr "пластык"
 
 msgid "Cycle Barrier"
-msgstr ""
+msgstr "Перашкода для ровараў"
 
 msgid "Cattle Grid"
-msgstr ""
+msgstr "Ляжачая рашотка (супраць скаціны)"
 
 msgid "Bus Trap"
-msgstr ""
+msgstr "Праезд для аўтобусаў"
 
 msgid "Spikes"
-msgstr ""
+msgstr "Шыпы"
 
 msgid "Toll Booth"
-msgstr ""
+msgstr "Пункт аплаты за праезд"
 
 msgid "Border Control"
-msgstr ""
+msgstr "Памежны кантроль"
 
 msgid "Hedge"
-msgstr ""
+msgstr "Жывая загарадзь"
 
 msgid "Genus"
-msgstr ""
+msgstr "Род"
 
 msgid "Species"
-msgstr ""
+msgstr "Выгляд"
 
 msgid "Taxon"
-msgstr ""
+msgstr "Таксон"
 
 msgid "Fence"
-msgstr ""
+msgstr "Плот"
 
 msgid "barbed_wire"
-msgstr ""
+msgstr "калючы дрот"
 
 msgid "chain_link"
-msgstr ""
+msgstr "сетка рабіца"
 
 msgid "electric"
-msgstr ""
+msgstr "электрычнасць"
 
 msgid "pole"
-msgstr ""
+msgstr "слуп"
 
 msgid "split_rail"
-msgstr ""
+msgstr "штыкетнік"
 
 msgid "wire"
-msgstr ""
+msgstr "дрот"
 
 msgid "Guard Rail"
-msgstr ""
+msgstr "Дарожная агароджа"
 
 msgid "Wall"
-msgstr ""
+msgstr "Сцяна"
 
 msgid "City Wall"
-msgstr ""
+msgstr "Гарадская сцяна"
 
 msgid "Retaining Wall"
-msgstr ""
+msgstr "Падпорная сценка"
 
 msgctxt "Barrier"
 msgid "Ditch"
-msgstr ""
+msgstr "Канава"
 
 msgid "Kerb"
-msgstr ""
+msgstr "Бардзюр"
 
 msgid "Entrance (Barrier Opening)"
-msgstr ""
+msgstr "Праход ці праезд (праём у перашкодзе)"
 
 msgid "Gate"
-msgstr ""
+msgstr "вароты / дзверы"
 
 msgid "Lift Gate"
-msgstr ""
+msgstr "Шлагбаўм"
 
 msgid "Swing Gate"
-msgstr ""
+msgstr "Паваротны шлагбаўм"
 
 msgctxt "swing_gate"
 msgid "single"
-msgstr ""
+msgstr "адзінарны"
 
 msgctxt "swing_gate"
 msgid "double"
-msgstr ""
+msgstr "падвойны"
 
 msgid "Hampshire Gate"
-msgstr ""
+msgstr "Драцяныя вароты"
 
 msgid "Bump Gate"
-msgstr ""
+msgstr "Вароты, якія адчыняюцца бамперам"
 
 msgid "Kissing Gate"
-msgstr ""
+msgstr "Вузкая брамка"
 
 msgid "Chain"
-msgstr ""
+msgstr "Ланцуг"
 
 msgid "Stile"
-msgstr ""
+msgstr "Прыступкі праз агароджу"
 
 msgid "ladder"
-msgstr ""
+msgstr "лесвіца"
 
 msgid "squeezer"
-msgstr ""
+msgstr "вузкі праход"
 
 msgid "stepover"
-msgstr ""
+msgstr "пералаз"
 
 msgid "Turnstile"
-msgstr ""
+msgstr "Турнікет"
 
 msgid "Sally Port"
-msgstr ""
+msgstr "Падвойныя вароты"
 
 msgid "Passageways"
-msgstr ""
+msgstr "Праезды"
 
 msgid "Building Passage"
-msgstr ""
+msgstr "Скразны праезд у будынку"
 
 msgid "Arcade"
-msgstr ""
+msgstr "Аркада"
 
 msgid "Open on left side"
-msgstr ""
+msgstr "Адкрыты з левага боку"
 
 msgid "Open on right side"
-msgstr ""
+msgstr "Адкрыты з правага боку"
 
 msgid "Colonnade"
-msgstr ""
+msgstr "Каланада"
 
 msgid "Avalanche Protector"
-msgstr ""
+msgstr "Абарона ад лавін"
 
+msgctxt "main group"
 msgid "Water"
-msgstr ""
+msgstr "Вада"
+
+msgctxt "sub group"
+msgid "Water"
+msgstr "Вада"
 
 msgid "Drain"
-msgstr ""
+msgstr "Дрэнажны канал"
 
 msgid "Ditch"
-msgstr ""
+msgstr "Канава"
 
 msgid "Stream"
-msgstr ""
+msgstr "Раўчук"
 
 msgid "River"
-msgstr ""
+msgstr "Рака"
 
 msgid "Canal"
-msgstr ""
+msgstr "Канал"
 
 msgid "Spring"
-msgstr ""
+msgstr "Крыніца"
 
 msgid ""
 "A point where groundwater naturally flows to the surface of the earth from "
 "underground."
 msgstr ""
+"Месца, дзе падземныя воды натуральным шляхам выходзяць на зямную паверхню."
 
 msgid "Waterfall"
-msgstr ""
+msgstr "Вадаспад"
 
 msgid "Weir"
-msgstr ""
+msgstr "Невялікая плаціна"
 
 msgid "Dam"
-msgstr ""
+msgstr "Дамба"
 
 msgid "Groyne"
-msgstr ""
+msgstr "Хвалялом"
 
 msgid "Breakwater"
-msgstr ""
+msgstr "Хвалярэз"
 
 msgid "Culvert"
-msgstr ""
+msgstr "Дрэнажная труба"
 
 msgid "Basin"
-msgstr ""
+msgstr "Сцёкавы басейн"
 
 msgid "Reservoir"
-msgstr ""
+msgstr "Рэзервуар"
 
 msgid "Covered Reservoir"
-msgstr ""
+msgstr "Крыты рэзервуар"
+
+msgctxt "natural"
+msgid "Water"
+msgstr "Вада"
 
 msgid "A body of standing water, such as a lake or pond."
-msgstr ""
+msgstr "Вадаём, такі як возера ці сажалка."
 
 msgid "Water Body"
-msgstr ""
+msgstr "Вадаём"
 
 msgid "canal"
-msgstr ""
+msgstr "канал"
 
 msgid "lake"
-msgstr ""
+msgstr "возера"
 
 msgid "lagoon"
-msgstr ""
+msgstr "лагуна"
 
 msgid "oxbow"
-msgstr ""
+msgstr "старыца"
 
 msgid "pond"
-msgstr ""
+msgstr "сажалка"
 
 msgid "reservoir"
-msgstr ""
+msgstr "вадасховішча"
 
 msgid "river"
-msgstr ""
+msgstr "рака"
 
 msgid "Salt Water"
-msgstr ""
+msgstr "Салёная вада"
 
 msgid "Coastline"
-msgstr ""
+msgstr "Берагавая лінія"
 
 msgid ""
 "Line between the sea and land (with the water on the right side of the way)."
-msgstr ""
+msgstr "Лінія паміж морам і сушай (вада з правага боку ад лініі)."
 
 msgid "Riverbank"
-msgstr ""
+msgstr "Бераг ракі"
 
 msgid "Wetland"
-msgstr ""
+msgstr "Забалочаныя землі"
 
 msgid "Waterlogged area, either permanently or seasonally with vegetation."
-msgstr ""
+msgstr "Забалочаная вобласць са сталай ці сезоннай расліннасцю."
 
 msgid "swamp"
-msgstr ""
+msgstr "лясное балота"
 
 msgid "bog"
-msgstr ""
+msgstr "тарфяное балота"
 
 msgid "marsh"
-msgstr ""
+msgstr "адкрытае балота"
 
 msgid "reedbed"
-msgstr ""
+msgstr "трысняговыя зараснікі (плаўні)"
 
 msgid "saltmarsh"
-msgstr ""
+msgstr "прыбярэжнае салёнае балота (маршы)"
 
 msgid "tidalflat"
-msgstr ""
+msgstr "прытокава-адліўныя ўчасткі"
 
 msgid "mangrove"
-msgstr ""
+msgstr "мангравыя зараснікі"
 
 msgid "Mud"
-msgstr ""
+msgstr "Бруд"
 
 msgid "Large area covered with mud."
-msgstr ""
+msgstr "Вялікая вобласць, пакрытая брудам."
 
 msgid "Beach"
-msgstr ""
+msgstr "Пляж"
 
 msgid "A flat area of sand, gravel or pebble next to water."
-msgstr ""
+msgstr "Роўная прыбярэжная вобласць, пакрытая пяском, жвірам ці галькай."
 
 msgid "swimming"
-msgstr ""
+msgstr "плаванне"
 
 msgid "surfing"
-msgstr ""
+msgstr "серфінг"
 
 msgid "Bay"
-msgstr ""
+msgstr "Бухта"
 
 msgid ""
 "A large body of water partially enclosed by land but with a wide mouth."
 msgstr ""
+"Вялікі водны ўчастак, часткова абмежаваны сушай, але мае шырокае вусце"
 
 msgid "Cliff"
-msgstr ""
+msgstr "Уцёс"
 
 msgid ""
 "A steep rock face exposure, with a significant vertical, or near vertical "
 "(leave the lower face to the right of the way)."
 msgstr ""
+"Стромкі скальны абрыў з блізкімі да вертыкалі схіламі (скала павінна быць "
+"злева ад лініі, абрыў — справа)."
 
 msgid "Shipping"
-msgstr ""
+msgstr "Суднаходства"
 
 msgid "Ferry Terminal"
-msgstr ""
+msgstr "Прычал"
 
 msgid "Cargo"
-msgstr ""
+msgstr "Што перавозіць"
 
 msgctxt "cargo"
 msgid "passengers"
-msgstr ""
+msgstr "пасажыры"
 
 msgctxt "cargo"
 msgid "vehicle"
-msgstr ""
+msgstr "транспарт"
 
 msgctxt "cargo"
 msgid "bicycle"
-msgstr ""
+msgstr "ровары"
 
 msgctxt "cargo"
 msgid "hgv"
-msgstr ""
+msgstr "цяжкі транспарт"
 
 msgctxt "cargo"
 msgid "passengers;vehicle"
-msgstr ""
+msgstr "пасажыры;транспарт"
 
 msgid "Ferry Route"
-msgstr ""
+msgstr "Маршрут воднага транспарта"
 
 msgid "Marina"
-msgstr ""
+msgstr "Прыстань для яхт"
 
 msgid "Dump Station"
-msgstr ""
+msgstr "Зліўная станцыя"
 
 msgid "public"
-msgstr ""
+msgstr "агульнадаступнае"
 
-msgid "Pier"
-msgstr ""
+msgid "Marine Fuel"
+msgstr "Марская запраўка"
 
-msgid "Lock Gate"
-msgstr ""
+msgid "Agip"
+msgstr "Agip"
 
-msgid "Turning Point"
-msgstr ""
+msgid "Aral"
+msgstr "Aral"
 
-msgid "Slipway"
-msgstr ""
+msgid "Avia"
+msgstr "Avia"
 
-msgid "Boatyard"
-msgstr ""
+msgid "BP"
+msgstr "BP"
 
-msgid "Dock"
-msgstr "Док"
+msgid "Chevron"
+msgstr "Chevron"
 
-msgid "Transport"
-msgstr ""
+msgid "Citgo"
+msgstr "Citgo"
 
-msgid "Railway"
-msgstr ""
+msgid "Eni"
+msgstr "Eni"
 
-msgid "Rail"
-msgstr ""
+msgid "Esso"
+msgstr "Esso"
 
-msgid "main"
-msgstr ""
+msgid "Exxon"
+msgstr "Exxon"
 
-msgid "branch"
-msgstr ""
+msgid "Gulf"
+msgstr "Gulf"
 
-msgid "industrial"
-msgstr ""
+msgid "Mobil"
+msgstr "Mobil"
 
-msgid "military"
-msgstr ""
+msgid "OMV"
+msgstr "OMV"
 
-msgid "tourism"
-msgstr ""
+msgid "Petro-Canada"
+msgstr "Petro-Canada"
 
-msgid "freight"
-msgstr ""
+msgid "Pioneer"
+msgstr "Pioneer"
 
-msgid "Narrow Gauge Rail"
-msgstr ""
+msgid "Q8"
+msgstr "Q8"
 
-msgid "Monorail"
-msgstr ""
+msgid "Repsol"
+msgstr "Repsol"
 
-msgid "Preserved"
-msgstr ""
+msgid "Shell"
+msgstr "Shell"
 
-msgid "Light Rail"
-msgstr ""
+msgid "Socar"
+msgstr "Socar"
 
-msgid "Subway"
-msgstr ""
+msgid "Statoil"
+msgstr "Statoil"
 
-msgid "Tram"
-msgstr ""
+msgid "Sunoco"
+msgstr "Sunoco"
 
-msgid "Bus Guideway"
-msgstr ""
+msgid "Tamoil"
+msgstr "Tamoil"
 
-msgid "Disused Rail"
-msgstr ""
+msgid "Texaco"
+msgstr "Texaco"
 
-msgid "Abandoned Rail"
-msgstr ""
+msgid "Total"
+msgstr "Total"
 
-msgid "Level Crossing"
-msgstr ""
+msgid "Independent"
+msgstr "Незалежны"
 
-msgid "Traffic lights"
-msgstr ""
+msgid "Fuel types:"
+msgstr "Віды паліва:"
 
-msgid "Barrier"
-msgstr ""
+msgid "Diesel"
+msgstr "дызельнае"
 
-msgctxt "crossing:barrier"
-msgid "yes"
-msgstr ""
+msgid "Bio Diesel"
+msgstr "біядызель"
+
+msgid "Octane 80"
+msgstr "бензін АИ-80"
+
+msgid "Octane 91"
+msgstr "бензін АИ-91"
+
+msgid "Octane 92"
+msgstr "бензін АИ-92"
+
+msgid "Octane 95"
+msgstr "бензін АИ-95"
+
+msgid "Octane 98"
+msgstr "бензін АИ-98"
+
+msgid "Octane 100"
+msgstr "бензін АИ-100"
+
+msgid "E10 (10% Ethanol mix)"
+msgstr "E10 (10% сумесь этанолу)"
+
+msgid "E85 (85% Ethanol mix)"
+msgstr "E85 (85% сумесь этанолу)"
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr "прапан-бутан (АГЗС)"
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr "прыродны газ"
+
+msgid "Pier"
+msgstr "Пірс"
+
+msgid "Lock Gate"
+msgstr "Вароты шлюза"
+
+msgid "Turning Point"
+msgstr "Месца развароту"
+
+msgid "Slipway"
+msgstr "Сліп"
+
+msgid "Boatyard"
+msgstr "Лодкавая майстэрня"
+
+msgid "Dock"
+msgstr "Док"
+
+msgid "Transport"
+msgstr "Транспарт"
+
+msgid "Railway"
+msgstr "Рэйкавы транспарт"
+
+msgid "Rail"
+msgstr "Чыгунка"
+
+msgid "main"
+msgstr "асноўны"
+
+msgid "branch"
+msgstr "галінка"
+
+msgid "industrial"
+msgstr "прамысловы"
+
+msgid "military"
+msgstr "ваенны"
+
+msgid "tourism"
+msgstr "турыстычны"
+
+msgid "freight"
+msgstr "грузавы"
+
+msgid "Narrow Gauge Rail"
+msgstr "Вузкакалейка"
+
+msgid "Monorail"
+msgstr "Манарэйка"
+
+msgid "Preserved"
+msgstr "Гістарычная чыгунка"
+
+msgid "Light Rail"
+msgstr "Лёгкая чыгунка"
+
+msgid "Subway"
+msgstr "Метрапалітэн"
+
+msgid "Tram"
+msgstr "Трамвайная лінія"
+
+msgid "Bus Guideway"
+msgstr "Аўтобусныя рэйкі"
+
+msgid "Disused Rail"
+msgstr "Неэксплуатуемая чыгунка"
+
+msgid "Abandoned Rail"
+msgstr "Разабраныя шляхі"
+
+msgid "Level Crossing"
+msgstr "Чыгуначны пераезд"
+
+msgid "Traffic lights"
+msgstr "Святлафор"
+
+msgid "Barrier"
+msgstr "Агароджа"
+
+msgctxt "crossing:barrier"
+msgid "yes"
+msgstr "так"
 
 msgctxt "crossing:barrier"
 msgid "no"
-msgstr ""
+msgstr "не"
 
 msgctxt "crossing:barrier"
 msgid "half"
-msgstr ""
+msgstr "палавіннае"
 
 msgctxt "crossing:barrier"
 msgid "full"
-msgstr ""
+msgstr "поўнае"
 
 msgctxt "crossing:barrier"
 msgid "double_half"
-msgstr ""
+msgstr "падвойнае палавіннае"
 
 msgid "Crossing"
-msgstr ""
+msgstr "Пераход праз рэйкавыя шляхі"
 
 msgid "Crossing type"
-msgstr ""
+msgstr "Тып пераходу"
 
 msgid "Turntable"
-msgstr ""
+msgstr "Паваротны стол"
 
 msgid "Buffer Stop"
-msgstr ""
+msgstr "Буферны ўпор"
 
 msgid "Railway Switch"
-msgstr ""
+msgstr "Чыгуначная стрэлка"
+
+msgid "Railway milestone"
+msgstr "Чыгуначны кіламетровы слупок"
 
 msgid "Aerialway"
-msgstr ""
+msgstr "Лінная дарога"
 
 msgid "Cable Car"
-msgstr ""
+msgstr "Фунікулёр"
 
 msgid "Number of people per hour"
-msgstr ""
+msgstr "Пасажыраў у гадзіну"
 
 msgid "Number of people per car"
-msgstr ""
+msgstr "Пасажыраў у кабінцы"
 
 msgid "Typical journey time in minutes"
-msgstr ""
+msgstr "Сярэдні час шляху"
 
 msgid "Has heating?"
-msgstr ""
+msgstr "З падагрэвам?"
 
 msgid "Chair Lift"
-msgstr ""
+msgstr "Крэсельны пад''ёмнік"
 
 msgid "Number of people per chair"
-msgstr ""
+msgstr "Пасажыраў у крэсле"
 
 msgid "Has bubble?"
-msgstr ""
+msgstr "Ёсць купал?"
 
 msgid "Gondola"
-msgstr ""
+msgstr "Гандола"
 
 msgid "Number of people per gondola"
-msgstr ""
+msgstr "Пасажыраў у кабінцы"
 
 msgid "Mixed Lift"
-msgstr ""
+msgstr "Змяшаны пад’ёмнік"
 
 msgid "Number of people per gondola/chair"
-msgstr ""
+msgstr "Колькасць чалавек у гандоле/крэсле"
 
 msgid "Drag Lift"
-msgstr ""
+msgstr "Бугельная"
 
 msgid ""
 "drag_lift (general type - use only if exact type (see values below) is "
 "unknown)"
 msgstr ""
+"пад''ёмнік (агульны тып - выкарыстоўваецца калі дакладны тып пад''ёмніка "
+"(гл. ніжэй) не вядомы)"
 
 msgid "t-bar"
-msgstr ""
+msgstr "T-вобразны"
 
 msgid "j-bar"
-msgstr ""
+msgstr "J-вобразны"
 
 msgid "platter"
-msgstr ""
+msgstr "талерачны"
 
 msgid "rope_tow"
-msgstr ""
+msgstr "рухомая ліна"
 
 msgid "Magic Carpet"
-msgstr ""
+msgstr "Рухомая дарожка"
 
 msgid "Goods"
-msgstr ""
+msgstr "Грузавая"
 
 msgctxt "aerialway"
 msgid "Station"
-msgstr ""
+msgstr "Станцыя"
 
 msgid "Pylon"
-msgstr ""
+msgstr "Апора"
 
 msgid "Parking"
-msgstr ""
+msgstr "Стаянка"
 
 msgid "Park and Ride"
-msgstr ""
+msgstr "Перахаплялая паркоўка"
 
 msgid "bus"
-msgstr ""
+msgstr "аўтобусны"
 
 msgid "train"
-msgstr ""
+msgstr "цягнік"
 
 msgid "tram"
-msgstr ""
+msgstr "трамвайны"
 
 msgid "metro"
-msgstr ""
+msgstr "метро"
 
 msgid "ferry"
-msgstr ""
+msgstr "па вадзе"
 
 msgid "Capacity (overall)"
-msgstr ""
+msgstr "Ёмістасць (агульная)"
 
 msgid "Spaces for Disabled"
-msgstr ""
+msgstr "Месцы для інвалідаў"
 
 msgid "Spaces for Women"
-msgstr ""
+msgstr "Месцы для жанчын"
 
 msgid "Spaces for Parents"
-msgstr ""
+msgstr "Месцы для бацькоў"
 
 msgid "See the Wiki for other capacity:[types]=*."
-msgstr ""
+msgstr "Глядзі ў Wiki іншыя катэгорыі ёмістасці capacity:[types]=*."
 
 msgid "Parking Space"
-msgstr ""
+msgstr "Паркавальнае месца"
 
 msgid "Capacity"
 msgstr "Ёмістасць"
 
 msgid "Covered (with roof)"
-msgstr ""
+msgstr "Зачыненая (з дахам)"
 
 msgid "Parking Entrance"
-msgstr ""
+msgstr "Уезд на паркоўку"
 
 msgid "Fuel"
-msgstr ""
-
-msgid "Agip"
-msgstr ""
-
-msgid "Aral"
-msgstr ""
-
-msgid "Avia"
-msgstr ""
-
-msgid "BP"
-msgstr ""
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr ""
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
+msgstr "Запраўная станцыя"
 
 msgid "With shop"
-msgstr ""
+msgstr "З крамай"
 
 msgid "convenience"
-msgstr ""
+msgstr "прадуктовы"
 
 msgid "kiosk"
-msgstr ""
-
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
+msgstr "шапік"
 
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
-msgstr ""
+msgstr "дызельнае сінтэтычнае (GTL-тэхналогія)"
 
 msgid "Diesel for Heavy Good Vehicles"
-msgstr ""
-
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
+msgstr "дызельнае для цяжкага транспарта"
 
 msgid "1/25 mix (mofa/moped)"
-msgstr ""
+msgstr "паліўная сумесь 1/25 (для мапедаў)"
 
 msgid "1/50 mix (mofa/moped)"
-msgstr ""
+msgstr "паліўная сумесь 1/50 (для мапедаў)"
 
 msgid "Fuel cards:"
-msgstr ""
+msgstr "Паліўныя карты:"
 
 msgid "DKV"
-msgstr ""
+msgstr "DKV"
 
 msgid "Routex"
-msgstr ""
+msgstr "Routex"
 
 msgid "UTA"
-msgstr ""
+msgstr "UTA"
 
 msgid "Charging Station"
-msgstr ""
+msgstr "Станцыя зарадкі"
 
 msgid "Voltage"
-msgstr ""
+msgstr "Напружанне"
 
 msgid "Amperage"
-msgstr ""
+msgstr "Сіла току"
 
 msgid "Wash"
-msgstr ""
+msgstr "Аўтамыйка"
 
 msgid "Car Dealer"
-msgstr ""
+msgstr "Аўтасалон"
 
 msgid "Second hand"
-msgstr ""
+msgstr "Ужываныя"
 
 msgid "only"
-msgstr ""
+msgstr "толькі"
 
 msgid "Repair"
-msgstr ""
+msgstr "Аўтамайстэрня"
 
 msgid "Parts"
-msgstr ""
+msgstr "Запчасткі"
 
 msgid "Tires"
-msgstr ""
+msgstr "Шыны"
 
 msgid "Rental"
-msgstr ""
+msgstr "Пракат"
 
 msgid "Sharing"
-msgstr ""
+msgstr "Кароткачасовы пракат"
 
 msgid "Motorcycle Dealer"
-msgstr ""
+msgstr "Продаж матацыклаў"
 
 msgid "independent"
-msgstr ""
+msgstr "Незалежны"
 
 msgid "Services:"
-msgstr ""
+msgstr "Паслугі:"
 
 msgid "Sale"
-msgstr ""
+msgstr "Кропка продажаў"
 
 msgid "brand"
-msgstr ""
+msgstr "марка"
 
 msgid "oldtimer"
-msgstr ""
+msgstr "класічныя"
 
 msgid "Safety inspection"
-msgstr ""
+msgstr "Праверка бяспекі"
 
 msgid "DEKRA"
-msgstr ""
+msgstr "DEKRA"
 
 msgid "GTÜ"
-msgstr ""
+msgstr "GTÜ"
 
 msgid "MOT"
-msgstr ""
+msgstr "MOT"
 
 msgid "TÜV"
-msgstr ""
+msgstr "TÜV"
 
 msgid "Clothes"
-msgstr ""
+msgstr "Адзежа"
 
 msgid "anchors"
-msgstr ""
+msgstr "якар"
 
 msgid "ground_slots"
-msgstr ""
+msgstr "прарэзы пад кола"
 
 msgid "informal"
-msgstr ""
+msgstr "неафіцыйная"
 
 msgid "lockers"
-msgstr ""
+msgstr "шафы"
 
 msgid "rack"
-msgstr ""
+msgstr "стойка"
 
 msgid "shed"
-msgstr ""
+msgstr "падстрэшак"
 
 msgid "stands"
-msgstr ""
+msgstr "стойкі"
 
 msgid "wall_loops"
-msgstr ""
+msgstr "трымальнікі кола"
 
 msgid "Covered"
-msgstr ""
+msgstr "Пад падстрэшкам"
 
 msgid "Bike Dealer"
-msgstr ""
+msgstr "Продаж ровараў"
 
 msgid "Bicycles are sold"
-msgstr ""
+msgstr "Продаж ровараў"
 
 msgid "Second-hand bicycles are sold"
-msgstr ""
+msgstr "Продаж ужываных ровараў"
 
 msgid "Bicycles are repaired"
-msgstr ""
+msgstr "Рамонт ровараў"
 
 msgid "Bicycles are rented"
-msgstr ""
+msgstr "Пракат ровараў"
 
 msgid "Free bicycle pump"
-msgstr ""
+msgstr "Бясплатная веласіпедная помпа"
 
 msgid "Tools for do-it-yourself repair (may be a bike co-operative)"
 msgstr ""
+"Прылады для самастойнага рамонту (можа быць аб’яднанне веласіпедыстаў)"
 
 msgid "Bicycles are washed (for a fee)"
-msgstr ""
+msgstr "Мыйка для ровараў (платная)"
 
 msgid "Public Bicycle Repair Station"
-msgstr ""
+msgstr "Стойка для рамонту ровараў"
 
 msgid "Chain tool"
-msgstr ""
+msgstr "Прылада для рамонту ланцуга"
 
 msgid "Public Transport"
-msgstr ""
+msgstr "Грамадскі транспарт"
 
 msgid "Public Transport Route"
-msgstr ""
+msgstr "Маршрут грамадскага транспарта"
 
 msgid "Route type"
-msgstr ""
+msgstr "Тып маршруту"
 
 msgid "subway"
-msgstr ""
+msgstr "метро"
 
 msgid "monorail"
-msgstr ""
+msgstr "манарэйка"
 
 msgid "light_rail"
-msgstr ""
+msgstr "лёгкае_метро"
 
 msgid "trolleybus"
-msgstr ""
+msgstr "тралейбус"
 
 msgid "aerialway"
-msgstr ""
+msgstr "лінная дарога"
 
 msgid "From (initial stop)"
-msgstr ""
+msgstr "Ад (пачатковая)"
 
 msgid "To (terminal stop)"
-msgstr ""
+msgstr "Да (канчатковая)"
 
 msgid "Via (intermediate stops)"
-msgstr ""
+msgstr "Праз (прамежкавыя прыпынкі)"
 
 msgid "Network"
-msgstr ""
+msgstr "Сетка"
 
 msgid "Color (HTML name or hexadecimal code)"
-msgstr ""
+msgstr "Колер (HTML-імя ці шаснаццатковы код)"
 
 msgctxt "color"
 msgid "black"
-msgstr ""
+msgstr "чорны"
 
 msgctxt "color"
 msgid "brown"
-msgstr ""
+msgstr "карычневы"
 
 msgctxt "color"
 msgid "green"
-msgstr ""
+msgstr "зялёны"
 
 msgctxt "color"
 msgid "red"
-msgstr ""
+msgstr "чырвоны"
 
 msgctxt "color"
 msgid "blue"
-msgstr ""
+msgstr "сіні"
 
 msgctxt "color"
 msgid "gray"
-msgstr ""
+msgstr "шэры"
 
 msgctxt "color"
 msgid "white"
-msgstr ""
+msgstr "белы"
 
 msgctxt "color"
 msgid "#CD853F"
-msgstr ""
-
-msgid "route segment"
-msgstr ""
+msgstr "#CD853F"
 
 msgid "stop position"
-msgstr ""
+msgstr "месца прыпынку"
 
 msgid "stop position (exit only)"
-msgstr ""
+msgstr "месца прыпынку (толькі высадка)"
 
 msgid "stop position (entry only)"
-msgstr ""
+msgstr "месца прыпынку (толькі пасадка)"
 
 msgid "platform"
-msgstr ""
+msgstr "платформа"
 
 msgid "platform (exit only)"
-msgstr ""
+msgstr "платформа (толькі выхад)"
 
 msgid "platform (entry only)"
-msgstr ""
+msgstr "платформа (толькі выхад)"
+
+msgid "route segment"
+msgstr "участак маршруту"
 
 msgid "Route Master"
-msgstr ""
+msgstr "Майстар-маршрут"
 
 msgid "route variant/direction (at least 2)"
-msgstr ""
+msgstr "варыянт маршруту/кірунак (прынамсі 2)"
 
 msgid "Stop Area"
-msgstr ""
+msgstr "Зона прыпынку"
 
 msgid "UIC reference"
-msgstr ""
+msgstr "Код UIC"
 
 msgid "UIC name"
-msgstr ""
+msgstr "Назва ў UIC"
 
 msgid "Stop Position"
-msgstr ""
+msgstr "Месца прыпынку вагона"
 
 msgid "Platform"
-msgstr ""
+msgstr "Платформа"
 
 msgid "Subway Entrance"
-msgstr ""
+msgstr "Уваход у метро"
 
 msgid "Station or amenities"
-msgstr ""
+msgstr "Станцыя ці паслугі"
 
 msgid "Bus"
-msgstr ""
+msgstr "Аўтобус"
 
 msgid "Bus stop (legacy)"
-msgstr ""
+msgstr "Аўтобусны прыпынак (састарэлае)"
 
 msgid "Tram stop (legacy)"
-msgstr ""
+msgstr "Трамвайны прыпынак (састарэлае)"
 
 msgid "Train"
-msgstr ""
+msgstr "Цягнік"
 
 msgid "Railway station (legacy)"
-msgstr ""
+msgstr "Чыгуначная станцыя (састарэлы фармат)"
 
 msgid "Railway halt (legacy)"
-msgstr ""
+msgstr "Прыпынкавы пункт (састарэлае)"
 
 msgid "Trolleybus"
-msgstr ""
+msgstr "Тралейбус"
 
 msgid "Share taxi"
-msgstr ""
+msgstr "Маршрутнае таксі"
 
 msgid "Funicular"
-msgstr ""
+msgstr "Фунікулёр"
 
 msgid "Ferry"
-msgstr ""
+msgstr "Паром"
 
 msgid "Bench"
-msgstr ""
+msgstr "Лаўка"
 
 msgid "Shelter"
-msgstr ""
+msgstr "Падстрэшак"
 
 msgid "Highway platform (legacy)"
-msgstr ""
+msgstr "Прыпынак на дарозе (састарэлае)"
 
 msgid "Railway platform (legacy)"
-msgstr ""
+msgstr "Чыгуначная платформа (састарэлы фармат)"
 
 msgid "funicular"
-msgstr ""
+msgstr "фунікулёр"
 
 msgctxt "railway"
 msgid "Station"
-msgstr ""
+msgstr "Станцыя"
 
 msgid "Building"
-msgstr ""
+msgstr "Будынак"
 
 msgid "Ticket Machine"
-msgstr ""
+msgstr "Аўтамат для куплі квіткоў"
 
 msgid "Reference Number"
-msgstr ""
+msgstr "Нумар для звароту"
 
 msgid "Public Transport (Legacy)"
-msgstr ""
+msgstr "Грамадскі транспарт (састарэлы)"
 
 msgid "Public transport route (Legacy)"
-msgstr ""
+msgstr "Маршрут грамадскага транспарта (састарэлы)"
 
 msgid "forward segment"
-msgstr ""
+msgstr "сегмент наперад"
 
 msgid "backward segment"
-msgstr ""
+msgstr "сегмент назад"
 
 msgid "halt point"
-msgstr ""
+msgstr "канчатковая кропка"
 
 msgid "forward halt point"
-msgstr ""
+msgstr "канчатковая наперад"
 
 msgid "backward halt point"
-msgstr ""
+msgstr "канчатковая назад"
 
 msgid "UIC-Reference"
-msgstr ""
+msgstr "код UIC"
 
 msgid "Railway Halt"
-msgstr ""
+msgstr "Прыпынкавы пункт"
 
 msgid "Tram Stop"
-msgstr ""
+msgstr "Трамвайны прыпынак"
 
 msgid "Railway Platform"
-msgstr ""
+msgstr "Платформа"
 
 msgid "Reference (track number)"
-msgstr ""
+msgstr "Нумар платформы (шляхі)"
 
 msgid "Bus Station"
-msgstr ""
+msgstr "Аўтобусная станцыя"
 
 msgid "Bus Stop"
-msgstr ""
+msgstr "Аўтобусны прыпынак"
 
 msgid "Tactile Paving"
-msgstr ""
+msgstr "Тактыльнае брукаванне"
 
 msgid "incorrect"
-msgstr ""
+msgstr "няправільнае"
 
 msgid "Bus Platform"
-msgstr ""
+msgstr "Аўтобусная платформа"
 
 msgid "Taxi"
-msgstr ""
+msgstr "Таксі"
 
 msgid "Airport"
-msgstr ""
+msgstr "Аэрапорт"
 
 msgid "Airport Ground"
-msgstr ""
+msgstr "Тэрыторыя аэрапорта"
 
 msgid "IATA"
-msgstr ""
+msgstr "IATA"
 
 msgid "ICAO"
-msgstr ""
+msgstr "ICAO"
 
 msgid "Runway"
-msgstr ""
+msgstr "Узлётна-пасадкавая паласа"
 
 msgid "Taxiway"
-msgstr ""
+msgstr "Рулёжная дарожка"
 
 msgid "Helipad"
-msgstr ""
+msgstr "Верталётная пляцоўка"
 
 msgid "Apron"
-msgstr ""
+msgstr "Перон"
 
 msgid "Plane Parking Position"
-msgstr ""
+msgstr "Месца стаянкі самалёта"
 
 msgid "Hangar"
-msgstr ""
+msgstr "Ангар"
 
 msgctxt "building"
 msgid "hangar"
-msgstr ""
+msgstr "ангар"
 
 msgctxt "building"
 msgid "yes"
-msgstr ""
+msgstr "так"
 
 msgid "Beacon"
-msgstr ""
+msgstr "Бакен"
 
 msgid "Windsock"
-msgstr ""
+msgstr "Ветрапаказальнік (флюгер)"
 
 msgid "Terminal"
-msgstr ""
+msgstr "Тэрмінал"
 
 msgctxt "airport"
 msgid "Gate"
-msgstr ""
+msgstr "Сектар"
 
 msgid "Facilities"
-msgstr ""
+msgstr "Паслугі"
 
 msgid "Accommodation"
-msgstr ""
+msgstr "Жыллё"
 
 msgid "Hotel"
-msgstr ""
+msgstr "Гасцініца"
 
 msgid "Stars"
-msgstr ""
+msgstr "Зоркі"
+
+msgid "Rooms"
+msgstr "Колькасць пакояў"
+
+msgid "Beds"
+msgstr "Колькасць ложкаў"
 
 msgid "Motel"
-msgstr ""
+msgstr "Матэль"
 
 msgid "Guest House/Bed & Breakfast"
-msgstr ""
+msgstr "Гасцявы дом/Ложак+сняданак"
 
 msgid "Chalet"
-msgstr ""
+msgstr "Шале"
 
 msgid "Hostel"
-msgstr ""
+msgstr "Хостэл"
 
 msgid "Alpine Hut"
-msgstr ""
+msgstr "Горная хаціна"
 
 msgid "Caravan Site/RV Park"
-msgstr ""
+msgstr "Кемпінг для хат на колах"
 
 msgid "Number of places"
-msgstr ""
+msgstr "Колькасць месцаў"
 
 msgid "Power supply"
-msgstr ""
+msgstr "Электразабеспячэнне"
 
 msgid "Tents allowed"
-msgstr ""
+msgstr "Дазволены намёты"
 
 msgid "Camping Site"
-msgstr ""
+msgstr "Кемпінг"
 
 msgid "Food+Drinks"
-msgstr ""
+msgstr "Ежа і напоі"
 
 msgid "Restaurant"
-msgstr ""
+msgstr "Рэстаран"
 
 msgid "Cuisine"
-msgstr ""
+msgstr "Кухня"
 
 msgid "italian"
-msgstr ""
+msgstr "італьянская"
 
 msgid "chinese"
-msgstr ""
+msgstr "кітайская"
 
 msgid "pizza"
-msgstr ""
+msgstr "піца"
 
 msgid "burger"
-msgstr ""
+msgstr "бутэрброды"
 
 msgid "greek"
-msgstr ""
+msgstr "грэцкая"
 
 msgid "german"
-msgstr ""
+msgstr "нямецкая"
 
 msgid "indian"
-msgstr ""
+msgstr "індыйская"
 
 msgid "regional"
-msgstr ""
+msgstr "мясцовая"
 
 msgid "kebab"
-msgstr ""
+msgstr "кебаб/шашлык"
 
 msgid "turkish"
-msgstr ""
+msgstr "турэцкая"
 
 msgid "asian"
-msgstr ""
+msgstr "азіяцкая"
 
 msgid "thai"
-msgstr ""
+msgstr "тайская"
 
 msgid "mexican"
-msgstr ""
+msgstr "мексіканская"
 
 msgid "japanese"
-msgstr ""
+msgstr "японская"
 
 msgid "french"
-msgstr ""
+msgstr "французская"
 
 msgid "sandwich"
-msgstr ""
+msgstr "сэндвічы"
 
 msgid "sushi"
-msgstr ""
+msgstr "сушы"
+
+msgid "steak_house"
+msgstr "стэйк хаўз"
 
 msgid "Microbrewery"
-msgstr ""
+msgstr "Бровар"
 
 msgid "Outdoor seating"
-msgstr ""
+msgstr "Столікі на вуліцы"
 
 msgid "Fast Food"
-msgstr ""
+msgstr "Фаст-фуд"
 
 msgid "fish_and_chips"
-msgstr ""
+msgstr "рыба і чыпсы"
 
 msgid "chicken"
-msgstr ""
+msgstr "кураціна"
 
 msgid "Food Court"
-msgstr ""
+msgstr "Рэстаранны панадворак"
 
 msgid "Cafe"
-msgstr ""
+msgstr "Кафэ"
 
 msgid "ice_cream"
-msgstr ""
+msgstr "марожанае"
 
 msgid "Pub"
-msgstr ""
+msgstr "Піўная"
 
 msgid "Beer Garden"
-msgstr ""
+msgstr "Піўны сад"
 
 msgid "Bar"
-msgstr ""
+msgstr "Бар"
 
 msgid "Night Club"
-msgstr ""
+msgstr "Начны клуб"
 
 msgid "Strip Club"
-msgstr ""
+msgstr "Стрып-клуб"
 
 msgid "Tourism"
-msgstr ""
+msgstr "Турызм"
 
 msgid "Attraction"
-msgstr ""
+msgstr "Выбітнасць"
 
 msgid "Viewpoint"
-msgstr ""
+msgstr "Аглядная пляцоўка"
 
 msgid "Look-Out Tower"
-msgstr ""
+msgstr "Аглядная вежа"
 
 msgid "Information Office"
-msgstr ""
+msgstr "Даведкавае бюро"
 
 msgid "An office where you can get information about a town or region."
-msgstr ""
+msgstr "Бюро, у якім вы можаце атрымаць інфармацыю пра горад або рэгіён"
 
 msgid "Map"
-msgstr ""
+msgstr "Карта"
 
 msgid "A board with a map."
-msgstr ""
+msgstr "Інфармацыйная дошка з картай."
 
 msgid "Detail Grade"
-msgstr ""
+msgstr "Тып карты"
 
 msgid "topo"
-msgstr ""
+msgstr "тапаграфічная"
 
 msgid "street"
-msgstr ""
+msgstr "карта вуліц"
 
 msgid "scheme"
-msgstr ""
+msgstr "план-схема"
 
 msgid "toposcope"
-msgstr ""
+msgstr "топаскоп"
 
 msgid "Shown Area"
-msgstr ""
+msgstr "Паказаная вобласць"
 
 msgid "site"
-msgstr ""
+msgstr "наваколле"
 
 msgid "city"
-msgstr ""
+msgstr "горад"
 
 msgid "region"
-msgstr ""
+msgstr "рэгіён"
 
 msgid "Closer Description"
-msgstr ""
+msgstr "Падрабязнае апісанне"
 
 msgid "Routes shown for:"
-msgstr ""
+msgstr "Паказаны маршруты:"
 
 msgid "Hiking"
-msgstr ""
+msgstr "пешыя"
 
 msgid "Cycling"
-msgstr ""
+msgstr "Веласпорт"
 
 msgid "Mountainbiking"
-msgstr ""
+msgstr "для горнага ровара"
 
 msgid "Skiing"
-msgstr ""
+msgstr "Лыжы"
 
 msgid "Riding"
-msgstr ""
+msgstr "конныя"
 
 msgid "... other transportation modes possible"
-msgstr ""
+msgstr "...іншыя магчымыя спосабы перасоўвання"
 
 msgid "Information Board"
-msgstr ""
+msgstr "Інфармацыйны стэнд"
 
 msgid "A board with information."
-msgstr ""
+msgstr "Стэнд з інфармацыяй."
 
 msgid "Board Content"
-msgstr ""
+msgstr "Змест паказальніка"
 
 msgid "notice"
-msgstr ""
+msgstr "аб''явы"
 
 msgid "history"
-msgstr ""
+msgstr "гісторыя"
 
 msgid "nature"
-msgstr ""
+msgstr "прырода"
 
 msgid "wildlife"
-msgstr ""
+msgstr "жывёльны свет"
 
 msgid "plants"
-msgstr ""
+msgstr "расліны"
 
 msgid "geology"
-msgstr ""
+msgstr "геалогія"
 
 msgid "Guidepost"
-msgstr ""
+msgstr "Паказальнік кірункаў"
 
 msgid ""
 "A Signpost/Guidepost to indicate the directions to different destinations."
-msgstr ""
+msgstr "Паказальны слуп з кірункамі на розныя пункты прызначэння."
 
 msgid "Information Terminal"
-msgstr ""
+msgstr "Інфармацыйная стойка"
 
 msgid "Information access via electronic methods."
-msgstr ""
+msgstr "Доступ да інфармацыі з дапамогай лічбавых тэхналогій."
 
 msgid "Closer description"
-msgstr ""
+msgstr "Падрабязнае апісанне"
 
 msgid "Audio Guide"
-msgstr ""
+msgstr "Аўдыё-гід"
 
 msgid "Information using headphones or a mobile phone."
-msgstr ""
+msgstr "Атрыманне інфармацыі праз слухаўкі ці мабільны тэлефон."
 
 msgid "Audioguide via mobile phone?"
-msgstr ""
+msgstr "Аўдыягід з дапамогай мабільнага тэлефона?"
 
 msgid "Phone number"
-msgstr ""
+msgstr "Нумар тэлефона"
 
 msgid "Other Information Point"
-msgstr ""
+msgstr "Іншая інфармацыйная кропка"
 
 msgid "Leisure"
-msgstr ""
+msgstr "Вольны час"
 
 msgid "Movie Theater/Cinema"
-msgstr ""
+msgstr "Кінатэатр"
 
 msgid "Drive-in theater"
-msgstr ""
+msgstr "Аўтакінатэатр"
 
 msgid "3D"
-msgstr ""
+msgstr "3D"
 
 msgid "Number of screens"
-msgstr ""
+msgstr "Колькасць экранаў"
 
 msgid "Minimum age"
-msgstr ""
+msgstr "Мінімальны ўзрост"
 
 msgid "Zoo"
-msgstr ""
+msgstr "Заапарк"
 
 msgid "Dog Park"
-msgstr ""
+msgstr "Пляцоўка для выпасу сабак"
 
 msgid "fence"
-msgstr ""
+msgstr "плот"
 
 msgid "wall"
-msgstr ""
+msgstr "сцяна"
 
 msgid "Amusement/Theme Park"
-msgstr ""
+msgstr "Парк забавак/Тэматычны парк"
 
 msgid "Water Park"
-msgstr ""
+msgstr "Аквапарк"
 
 msgid "Sauna"
-msgstr ""
+msgstr "Сауна"
 
 msgid "Horse Riding"
-msgstr ""
+msgstr "Верхавая язда"
+
+msgid "Casino"
+msgstr "Казіно"
 
 msgid "Brothel"
-msgstr ""
+msgstr "Бардэль"
 
 msgid "Playground"
-msgstr ""
+msgstr "Гульнявая пляцоўка"
 
 msgid "Picnic Site"
-msgstr ""
+msgstr "Месца для пікніка"
 
 msgid "Fireplace"
-msgstr ""
+msgstr "Агмень"
 
 msgid "Picnic Table"
-msgstr ""
+msgstr "Стол для пікніка"
 
 msgid "Public Grill"
-msgstr ""
+msgstr "Публічны мангал"
 
 msgctxt "grill"
 msgid "Fuel"
-msgstr ""
+msgstr "Паліва"
 
 msgid "charcoal"
-msgstr ""
+msgstr "вугаль"
 
 msgid "Firepit"
-msgstr ""
+msgstr "Кастрышча"
 
 msgid "Fishing"
-msgstr ""
+msgstr "Месца для рыбалкі"
 
 msgid "Private Swimming Pool"
-msgstr ""
+msgstr "Прыватны плавальны басейн"
 
 msgid "Culture"
-msgstr ""
+msgstr "Культура"
 
 msgid "Museum"
-msgstr ""
+msgstr "Музей"
 
 msgid "Theatre"
-msgstr ""
+msgstr "Тэатр"
 
 msgid "Library"
-msgstr ""
+msgstr "Бібліятэка"
 
 msgid "Arts Centre"
-msgstr ""
+msgstr "Цэнтр мастацтваў"
 
 msgid "Artwork"
-msgstr ""
+msgstr "Творы мастацтва"
 
 msgid "mural"
-msgstr ""
+msgstr "фрэска"
 
 msgid "sculpture"
-msgstr ""
+msgstr "скульптура"
 
 msgid "statue"
-msgstr ""
+msgstr "статуя"
 
 msgid "Artist Name"
-msgstr ""
+msgstr "Аўтар"
 
 msgid "Recording Studio"
-msgstr ""
+msgstr "Студыя гукапісу"
 
 msgid "audio"
-msgstr ""
+msgstr "аўдыё"
 
 msgid "video"
-msgstr ""
+msgstr "відэа"
 
 msgid "Place of Worship"
-msgstr ""
+msgstr "Культавае месца"
 
 msgid "Church"
-msgstr ""
+msgstr "Царква"
 
 msgid "Building type"
-msgstr ""
+msgstr "Тып будынка"
 
 msgid "basilica"
-msgstr ""
+msgstr "базіліка"
 
 msgid "cathedral"
-msgstr ""
+msgstr "сабор"
 
 msgid "chapel"
-msgstr ""
+msgstr "капліца"
 
 msgid "church"
-msgstr ""
+msgstr "царква"
 
 msgid "temple"
-msgstr ""
+msgstr "храм"
 
 msgctxt "christian"
 msgid "anglican"
-msgstr ""
+msgstr "англіканства"
 
 msgctxt "christian"
 msgid "baptist"
-msgstr ""
+msgstr "баптызм"
 
 msgctxt "christian"
 msgid "catholic"
-msgstr ""
+msgstr "каталіцызм"
 
 msgctxt "christian"
 msgid "evangelical"
-msgstr ""
+msgstr "евангелісты"
 
 msgctxt "christian"
 msgid "greek_catholic"
-msgstr ""
+msgstr "грэкакаталіцызм"
 
 msgctxt "christian"
 msgid "greek_orthodox"
-msgstr ""
+msgstr "грэцкае праваслаўе"
 
 msgctxt "christian"
 msgid "jehovahs_witness"
-msgstr ""
+msgstr "сведкі Іеговы"
 
 msgctxt "christian"
 msgid "lutheran"
-msgstr ""
+msgstr "лютэранства"
 
 msgctxt "christian"
 msgid "methodist"
-msgstr ""
+msgstr "метадызм"
 
 msgctxt "christian"
 msgid "mormon"
-msgstr ""
+msgstr "марманізм"
 
 msgctxt "christian"
 msgid "new_apostolic"
-msgstr ""
+msgstr "нова-апостальская"
 
 msgctxt "christian"
 msgid "orthodox"
-msgstr ""
+msgstr "праваслаўе"
 
 msgctxt "christian"
 msgid "pentecostal"
-msgstr ""
+msgstr "пяцідзесятнікі"
 
 msgctxt "christian"
 msgid "presbyterian"
-msgstr ""
+msgstr "прэсвітарыянства"
 
 msgctxt "christian"
 msgid "protestant"
-msgstr ""
+msgstr "пратэстанцызм"
 
 msgctxt "christian"
 msgid "quaker"
-msgstr ""
+msgstr "квакерства"
 
 msgctxt "christian"
 msgid "roman_catholic"
-msgstr ""
+msgstr "рымска-каталіцкая царква"
 
 msgctxt "christian"
 msgid "russian_orthodox"
-msgstr ""
+msgstr "рускае праваслаўе"
 
 msgctxt "christian"
 msgid "seventh_day_adventist"
-msgstr ""
+msgstr "царква адвентыстаў сёмага дня"
 
 msgid "Mosque"
-msgstr ""
+msgstr "Мячэць"
 
 msgid "mosque"
-msgstr ""
+msgstr "мячэць"
 
 msgid "ibadi"
-msgstr ""
+msgstr "ібадыцкая"
 
 msgid "Synagogue"
-msgstr ""
+msgstr "Сінагога"
 
 msgid "synagogue"
-msgstr ""
+msgstr "сінагога"
 
 msgctxt "jewish"
 msgid "orthodox"
-msgstr ""
+msgstr "праваслаўе"
 
 msgctxt "jewish"
 msgid "conservative"
-msgstr ""
+msgstr "кансерватыўны юдаізм"
 
 msgctxt "jewish"
 msgid "reform"
-msgstr ""
+msgstr "рэфармісцкі юдаізм"
 
 msgid "Buddhist Temple"
-msgstr ""
+msgstr "Будысцкі храм"
 
 msgid "theravada"
-msgstr ""
+msgstr "тхеравада"
 
 msgid "mahayana"
-msgstr ""
+msgstr "махаяна"
 
 msgid "vajrayana"
-msgstr ""
+msgstr "ваджраяна"
 
 msgid "Hindu Temple"
-msgstr ""
+msgstr "Індуісцкі храм"
 
 msgid "vaishnavism"
-msgstr ""
+msgstr "вайшнавізм"
 
 msgid "shaivism"
-msgstr ""
+msgstr "шываізм"
 
 msgid "shaktism"
-msgstr ""
+msgstr "шактызм"
 
 msgid "smartism"
-msgstr ""
+msgstr "смартызм"
 
 msgid "Shinto Shrine"
-msgstr ""
+msgstr "Свяцілішча сінто"
 
 msgid "Other Place of Worship"
-msgstr ""
+msgstr "Іншае культавае месца"
 
 msgid "Public Building"
-msgstr ""
+msgstr "Грамадскі будынак"
 
 msgid "Town Hall"
-msgstr ""
+msgstr "Адміністрацыйны будынак"
 
 msgid "Community Centre"
-msgstr ""
+msgstr "Грамадскі цэнтр"
 
 msgid "Embassy"
-msgstr ""
+msgstr "Пасольства"
 
 msgid "Courthouse"
-msgstr ""
+msgstr "Суд"
 
 msgid "Prison"
-msgstr ""
+msgstr "Турма"
 
 msgid "Police"
-msgstr ""
+msgstr "Паліцыя/міліцыя"
 
 msgid "Ranger Station"
-msgstr ""
+msgstr "Пост рэйнджараў"
 
 msgid "Fire Station"
-msgstr ""
+msgstr "Пажарнае дэпо"
 
 msgid "Post Office"
-msgstr ""
+msgstr "Паштовае аддзяленне"
 
 msgid "Education"
-msgstr ""
+msgstr "Адукацыя"
 
 msgid "Kindergarten"
-msgstr ""
+msgstr "Дзіцячы сад"
 
 msgid "School"
-msgstr ""
+msgstr "Школа"
 
 msgid "University"
-msgstr ""
+msgstr "Універсітэт"
 
 msgid "College"
-msgstr ""
+msgstr "Прафесійная вучэльня"
 
 msgid "Driving School"
-msgstr ""
+msgstr "Аўташкола"
 
 msgid "License Classes"
-msgstr ""
+msgstr "Катэгорыі"
 
 msgid "A;A1;B;BE;C"
-msgstr ""
+msgstr "A;A1;B;BE;C"
 
 msgid "A;A1;B;B1;C;C1;D;D1;BE;CE;C1E;DE;D1E"
-msgstr ""
+msgstr "A;A1;B;B1;C;C1;D;D1;BE;CE;C1E;DE;D1E"
 
 msgid "Health"
-msgstr ""
+msgstr "Ахова здароўя"
 
 msgid "Hospital"
-msgstr ""
+msgstr "Лякарня"
 
 msgid "Clinic"
-msgstr ""
+msgstr "Клініка"
 
 msgid "Doctor''s Office"
-msgstr ""
+msgstr "Кабінет лекара"
 
 msgid "Dentist"
-msgstr ""
+msgstr "Стаматалогія"
 
 msgid "Nursing Home"
-msgstr ""
+msgstr "Дом састарэлых (састарэлы тэг)"
 
 msgid "Retirement Home"
-msgstr ""
+msgstr "Дом састарэлых"
 
 msgid "Pharmacy"
-msgstr ""
+msgstr "Аптэка"
 
 msgid "Dispensing"
-msgstr ""
+msgstr "Па рэцэпце"
 
 msgid "Baby Hatch/Safe Haven"
-msgstr ""
+msgstr "Месца для кінутых немаўлятаў"
 
 msgid "Emergency Access Point"
-msgstr ""
+msgstr "Кропка экстранай дапамогі"
 
 msgid "Point Number"
-msgstr ""
+msgstr "Нумар пункта"
 
 msgid "Point Name"
-msgstr ""
+msgstr "Назва кропкі"
 
 msgid "Phone Number"
-msgstr ""
+msgstr "Нумар тэлефона"
 
 msgid "(Use international code, like +12-345-67890)"
-msgstr ""
+msgstr "(Выкарыстоўвайце міжнародны код, напрыклад: +7-916-0857403)"
 
 msgid "Veterinary"
-msgstr ""
+msgstr "Ветэрынарыя"
 
 msgid "Toilets/Restrooms"
-msgstr ""
+msgstr "Грамадскі туалет"
 
 msgid "Access rights"
-msgstr ""
+msgstr "Правы доступу"
 
 msgid "seasonal"
-msgstr ""
+msgstr "у залежнасці ад сезону"
 
 msgid "flush"
-msgstr ""
+msgstr "са злівам"
 
 msgid "pitlatrine"
-msgstr ""
+msgstr "з выграбной ямай"
 
 msgid "chemical"
-msgstr ""
+msgstr "хімічны"
 
 msgid "bucket"
-msgstr ""
+msgstr "вядро"
 
 msgid "Usage Position"
-msgstr ""
+msgstr "Становішча"
 
 msgid "seated"
-msgstr ""
+msgstr "сядзячае"
 
 msgid "seated;urinal"
-msgstr ""
+msgstr "унітаз; пісуар"
 
 msgid "squat"
-msgstr ""
+msgstr "падлогавы ўнітаз"
 
 msgid "urinal"
-msgstr ""
+msgstr "пісуар"
 
 msgid "Shower"
-msgstr ""
+msgstr "Душ"
 
 msgid "Post Box"
-msgstr ""
+msgstr "Паштовая скрыня"
 
 msgid "Collection times"
-msgstr ""
+msgstr "Час вымання лістоў"
 
 msgid "Mo-Sa 09:00"
-msgstr ""
+msgstr "Mo-Sa 09:00"
 
 msgid "Mo-Fr 17:30; Sa 12:00"
-msgstr ""
+msgstr "Mo-Fr 17:30; Sa 12:00"
 
 msgid "Mo-Fr 15:00,19:00; Sa 15:10; Su 10:30"
-msgstr ""
+msgstr "Mo-Fr 15:00,19:00; Sa 15:10; Su 10:30"
 
 msgid "Drive through"
-msgstr ""
+msgstr "Даступны не выходзячы з аўтамабіля"
 
 msgid "Telephone"
-msgstr ""
+msgstr "Тэлефон"
 
 msgid "Coins"
-msgstr ""
+msgstr "Манеты"
 
 msgctxt "payment"
 msgid "Notes"
-msgstr ""
+msgstr "Банкноты"
 
 msgid "Telephone cards"
-msgstr ""
+msgstr "Тэлефонныя карты"
 
 msgid "Emergency Phone"
-msgstr ""
+msgstr "Тэлефон экстранага выкліку"
 
 msgid "Internet Access"
-msgstr ""
+msgstr "Доступ у інтэрнэт"
 
 msgid "Automated Defibrillator"
-msgstr ""
+msgstr "Аўтаматызаваны дэфібрылятар"
 
 msgid "Located inside a building?"
-msgstr ""
+msgstr "Размешчаны ўсярэдзіне будынка?"
 
 msgid "Last check date (YYYY-MM-DD)"
-msgstr ""
+msgstr "Дата апошняй праверкі (ГГГГ-ММ-ДД)"
 
 msgid "Last check note"
-msgstr ""
+msgstr "Заўвагі апошняй праверкі"
 
 msgid "Clock"
-msgstr ""
+msgstr "Гадзіннік"
 
 msgid "Display"
-msgstr ""
+msgstr "Дысплей"
 
 msgid "analog"
-msgstr ""
+msgstr "стрэлкавы"
 
 msgid "digital"
-msgstr ""
+msgstr "лічбавы"
 
 msgid "sundial"
-msgstr ""
+msgstr "сонечны"
 
 msgid "unorthodox"
-msgstr ""
+msgstr "нестандартны"
 
 msgid "Support"
-msgstr ""
+msgstr "Мацаванне"
 
 msgctxt "mounting/support"
 msgid "pole"
-msgstr ""
+msgstr "на слупе"
 
 msgctxt "mounting/support"
 msgid "wall_mounted"
-msgstr ""
+msgstr "на сцяне"
 
 msgctxt "mounting/support"
 msgid "billboard"
-msgstr ""
+msgstr "на рэкламным шчыце"
 
 msgctxt "mounting/support"
 msgid "ground"
-msgstr ""
+msgstr "наземныя"
 
 msgid "Visibility/readability"
-msgstr ""
+msgstr "Кантраснасць/выразнасць"
 
 msgid "house (up to 5m)"
-msgstr ""
+msgstr "будынак (да 5 м)"
 
 msgid "street (up to 20m)"
-msgstr ""
+msgstr "вуліца (да 20 м)"
 
 msgid "area (more than 20m)"
-msgstr ""
+msgstr "плошча (больш 20м)"
 
 msgid "Shows current date"
-msgstr ""
+msgstr "Паказваюць бягучую дату"
 
 msgid "Shows temperature"
-msgstr ""
+msgstr "Паказваюць тэмпературу"
 
 msgid "Shows barometric pressure"
-msgstr ""
+msgstr "Паказваюць атмасферны ціск"
 
 msgid "Shows humidity"
-msgstr ""
+msgstr "Паказваюць вільготнасць"
 
-msgid "Recycling"
-msgstr ""
+msgid "Recycling Container"
+msgstr "Кантэйнер для перапрацоўваемых адкідаў"
 
 msgid "Batteries"
-msgstr ""
+msgstr "Батарэйкі"
 
 msgid "Cans"
-msgstr ""
+msgstr "Кансервавыя слоікі"
+
+msgid "Cardboard"
+msgstr "Картон"
+
+msgid "Electrical Appliances"
+msgstr "Электрапрылады"
 
 msgid "Glass"
-msgstr ""
+msgstr "Шкло"
+
+msgid "Glass Bottles"
+msgstr "Шклотара"
+
+msgid "Green Waste"
+msgstr "Расліннае смецце"
 
 msgid "Paper"
 msgstr "Папера"
 
+msgid "Plastic"
+msgstr "Пластык"
+
+msgid "Plastic Bottles"
+msgstr "Пластыкавая тара"
+
+msgid "Plastic Packaging"
+msgstr "Пластыкавая тара"
+
 msgid "Scrap Metal"
-msgstr ""
+msgstr "Металалом"
 
-msgid "container"
-msgstr ""
+msgid "Shoes"
+msgstr "Абутак"
 
-msgid "centre"
-msgstr ""
+msgid "Small Appliances"
+msgstr "Дробная бытавая тэхніка"
+
+msgid "Waste"
+msgstr "Адыходы"
+
+msgid "Recycling Centre"
+msgstr "Пункт прыёму перапрацоўваемых адкідаў"
 
 msgid "Waste Basket/Trash Can"
-msgstr ""
+msgstr "Сметніца"
 
 msgid "Waste Disposal/Dumpster"
-msgstr ""
+msgstr "Смеццевы бак"
 
 msgid "Sanitary Dump Station"
-msgstr ""
+msgstr "Асенізацыйнай зліўная станцыя"
 
 msgid "Suction pumpout"
-msgstr ""
+msgstr "Высмоктванне"
 
 msgid "Gravity drain for hose"
-msgstr ""
+msgstr "Злучальнік шланга для зліву самацёкам"
 
 msgid "Casette or Elsan Disposal"
-msgstr ""
+msgstr "Касета ці кантэйнер Elsan"
 
 msgid "Operation times"
-msgstr ""
+msgstr "Час працы"
 
 msgid "Backrest"
-msgstr ""
+msgstr "Спінка"
 
 msgid "Amount of Seats"
-msgstr ""
+msgstr "Колькасць месцаў"
 
 msgid "Type of shelter"
-msgstr ""
+msgstr "Тып падстрэшка"
 
 msgctxt "shelter"
 msgid "basic_hut"
-msgstr ""
+msgstr "халупа"
 
 msgctxt "shelter"
 msgid "lean_to"
-msgstr ""
+msgstr "аднасхільны падстрэшак"
 
 msgctxt "shelter"
 msgid "picnic_shelter"
-msgstr ""
+msgstr "падстрэшак_для_пікніка"
 
 msgctxt "shelter"
 msgid "public_transport"
-msgstr ""
+msgstr "грамадскі транспарт"
 
 msgctxt "shelter"
 msgid "weather_shelter"
-msgstr ""
+msgstr "хованка ад непагадзі"
 
 msgctxt "shelter"
 msgid "wildlife_hide"
-msgstr ""
+msgstr "хованка_ад_пажару"
 
 msgid "Hunting Stand"
-msgstr ""
+msgstr "Паляўнічая вышка"
 
 msgid "Height"
-msgstr ""
+msgstr "Вышыня"
 
 msgctxt "height"
 msgid "low"
-msgstr ""
+msgstr "нізкая"
 
 msgctxt "height"
 msgid "half"
-msgstr ""
+msgstr "палавінная"
 
 msgctxt "height"
 msgid "full"
-msgstr ""
+msgstr "поўная"
 
 msgid "Hide"
-msgstr "Схаваць"
+msgstr "Утоеная"
 
 msgid "Lock"
-msgstr ""
+msgstr "Замыкаецца"
 
 msgid "Indoor"
-msgstr ""
+msgstr "У памяшканні"
 
 msgid "Fire Hydrant"
-msgstr ""
+msgstr "Пажарны кран"
 
 msgctxt "pipeline"
 msgid "underground"
-msgstr ""
+msgstr "падземны"
 
 msgctxt "pipeline"
 msgid "pillar"
-msgstr ""
+msgstr "слуп"
 
 msgctxt "pipeline"
 msgid "wall"
-msgstr ""
+msgstr "насценны"
 
 msgctxt "pipeline"
 msgid "pond"
-msgstr ""
+msgstr "сажалка"
 
 msgid "Diameter (in mm)"
-msgstr ""
+msgstr "Дыяметр (у мм)"
 
 msgid "Hydrant Position"
-msgstr ""
+msgstr "Размяшчэнне"
 
 msgctxt "hydrant position"
 msgid "lane"
-msgstr ""
+msgstr "паласа"
 
 msgctxt "hydrant position"
 msgid "parking_lot"
-msgstr ""
+msgstr "аўтастаянка"
 
 msgctxt "hydrant position"
 msgid "sidewalk"
-msgstr ""
+msgstr "ходнік"
 
 msgctxt "hydrant position"
 msgid "green"
-msgstr ""
+msgstr "зялёны"
 
 msgid "Pressure (in bar)"
-msgstr ""
+msgstr "Ціск (у барах)"
 
 msgid "suction"
-msgstr ""
+msgstr "усмоктванне"
 
 msgid "Count"
-msgstr ""
+msgstr "Колькасць"
 
 msgid "Advertising Column"
-msgstr ""
+msgstr "Рэкламная тумба"
 
 msgid "Billboard"
-msgstr ""
+msgstr "Рэкламны шчыт"
 
 msgid "Sports"
-msgstr ""
+msgstr "Спорт"
 
 msgid "Sport Facilities"
-msgstr ""
+msgstr "Спартовыя збудаванні"
 
 msgid "Stadium"
-msgstr ""
+msgstr "Стадыён"
 
 msgid "Sports Centre"
-msgstr ""
+msgstr "Спартовы цэнтр"
 
 msgid "Pitch"
-msgstr ""
+msgstr "Спартовае поле"
 
 msgid "artificial_turf"
-msgstr ""
+msgstr "штучная трава"
 
 msgid "decoturf"
-msgstr ""
+msgstr "DecoTurf"
 
 msgid "tartan"
-msgstr ""
+msgstr "тартан"
 
 msgid "Racetrack"
-msgstr ""
+msgstr "Трэк"
 
 msgid "Golf Course"
-msgstr ""
+msgstr "Поле для гольфа"
 
 msgid "Miniature Golf"
-msgstr ""
+msgstr "Мінігольф"
 
 msgid "Multi"
-msgstr ""
+msgstr "Мульты"
 
 msgctxt "running"
 msgid "pitch"
-msgstr ""
+msgstr "спартовае поле"
 
 msgctxt "running"
 msgid "sports_centre"
-msgstr ""
+msgstr "спартовы цэнтр"
 
 msgctxt "running"
 msgid "stadium"
-msgstr ""
+msgstr "стадыён"
 
 msgctxt "running"
 msgid "track"
-msgstr ""
+msgstr "дарожка"
 
 msgid "Nine-pin Bowling"
-msgstr ""
+msgstr "Кегельбан (9 кегляў)"
 
 msgid "Ten-pin Bowling"
-msgstr ""
+msgstr "Боўлінг (10 кегляў)"
 
 msgid "Archery"
-msgstr ""
+msgstr "Стральба з лука"
 
 msgid "Track and Field Athletics"
-msgstr ""
+msgstr "Лёгкая атлетыка"
+
+msgid "Running"
+msgstr "Бег"
 
 msgid "Climbing"
-msgstr ""
+msgstr "Скалалазанне"
 
 msgid "Canoeing/Kayaking"
-msgstr ""
+msgstr "Веславанне на каноэ і каяках"
 
 msgctxt "racing"
 msgid "pitch"
-msgstr ""
+msgstr "спартовае поле"
 
 msgctxt "racing"
 msgid "sports_centre"
-msgstr ""
+msgstr "спартовы цэнтр"
 
 msgctxt "racing"
 msgid "stadium"
-msgstr ""
+msgstr "стадыён"
 
 msgctxt "racing"
 msgid "track"
-msgstr ""
+msgstr "трэк"
 
 msgid "Dog Racing"
-msgstr ""
+msgstr "Сабачыя спаборніцтвы"
 
 msgid "Equestrian"
-msgstr ""
+msgstr "Конны спорт"
 
 msgid "Horse Racing"
-msgstr ""
+msgstr "Конныя спаборніцтвы"
 
 msgid "Gymnastics"
-msgstr ""
+msgstr "Гімнастыка"
 
 msgid "Skating"
-msgstr ""
+msgstr "Фігурнае катанне"
 
 msgid "ice_rink"
-msgstr ""
+msgstr "коўзанка"
 
 msgid "Skateboard"
-msgstr ""
+msgstr "Скейтборд"
 
 msgid "Swimming"
-msgstr ""
+msgstr "Плаванне"
 
 msgid "swimming_pool"
-msgstr ""
+msgstr "плавальны басейн"
 
 msgid "water_park"
-msgstr ""
+msgstr "аквапарк"
 
 msgid "Scuba Diving"
-msgstr ""
+msgstr "Падводнае плаванне"
 
 msgid "Piste type"
-msgstr ""
+msgstr "Тып лыжні"
 
 msgid "downhill"
-msgstr ""
+msgstr "горныя лыжы"
 
 msgid "nordic"
-msgstr ""
+msgstr "бегавыя лыжы"
 
 msgid "skitour"
-msgstr ""
+msgstr "лыжны тур"
 
 msgid "sled"
-msgstr ""
+msgstr "санкі"
 
 msgid "sleigh"
-msgstr ""
+msgstr "санкі"
 
 msgid "snow_park"
-msgstr ""
+msgstr "снежны парк"
 
 msgid "Difficulty"
-msgstr ""
+msgstr "Складанасць"
 
 msgctxt "piste:difficulty"
 msgid "novice"
-msgstr ""
+msgstr "для пачаткоўцаў"
 
 msgctxt "piste:difficulty"
 msgid "easy"
-msgstr ""
+msgstr "простая"
 
 msgctxt "piste:difficulty"
 msgid "intermediate"
-msgstr ""
+msgstr "сярэдняя"
 
 msgctxt "piste:difficulty"
 msgid "advanced"
-msgstr ""
+msgstr "ускладненая"
 
 msgctxt "piste:difficulty"
 msgid "expert"
-msgstr ""
+msgstr "для экспертаў"
 
 msgctxt "piste:difficulty"
 msgid "freeride"
-msgstr ""
+msgstr "фрырайд"
 
 msgid "Grooming"
-msgstr ""
+msgstr "Падрыхтоўка"
 
 msgctxt "piste:grooming"
 msgid "classic"
-msgstr ""
+msgstr "для класічнага ходу"
 
 msgctxt "piste:grooming"
 msgid "mogul"
-msgstr ""
+msgstr "для могула"
 
 msgctxt "piste:grooming"
 msgid "skating"
-msgstr ""
+msgstr "канькі"
 
 msgctxt "piste:grooming"
 msgid "classic;skating"
-msgstr ""
+msgstr "класічная; каньковы крок"
 
 msgctxt "piste:grooming"
 msgid "scooter"
-msgstr ""
+msgstr "імклівы спуск"
 
 msgctxt "piste:grooming"
 msgid "backcountry"
-msgstr ""
+msgstr "без падрыхтоўкі"
 
 msgid "Shooting"
-msgstr ""
+msgstr "Стральба"
 
 msgid "Sport (Ball)"
-msgstr ""
+msgstr "Спорт (з мячом)"
 
 msgid "Soccer"
-msgstr ""
+msgstr "Футбол (еўрапейскі)"
 
 msgid "Australian Football"
-msgstr ""
+msgstr "Аўстралійскі футбол"
 
 msgid "American Football"
-msgstr ""
+msgstr "Амерыканскі футбол"
 
 msgid "Canadian Football"
-msgstr ""
+msgstr "Канадскі футбол"
 
 msgid "Gaelic Games"
-msgstr ""
+msgstr "Гэльскія гульні"
 
 msgid "Hurling"
-msgstr ""
+msgstr "Херлінг"
 
 msgid "Football"
-msgstr ""
+msgstr "Футбол"
 
 msgid "Camogie"
-msgstr ""
+msgstr "Камоджы"
 
 msgid "Rounders"
-msgstr ""
+msgstr "Раўндэрз"
 
 msgid "Rugby League"
-msgstr ""
+msgstr "Ліга рэгбі"
 
 msgid "Rugby Union"
-msgstr ""
+msgstr "Саюз рэгбі"
 
 msgid "Baseball"
-msgstr ""
+msgstr "Бейсбол"
 
 msgid "Basketball"
-msgstr ""
+msgstr "Баскетбол"
+
+msgid "Handball"
+msgstr "Гандбол"
 
 msgid "Volleyball"
-msgstr ""
+msgstr "Валейбол"
 
 msgid "Beach Volleyball"
-msgstr ""
+msgstr "Пляжны валейбол"
+
+msgid "Billiards"
+msgstr "Більярд"
 
 msgid "Golf"
-msgstr ""
+msgstr "Гольф"
 
 msgid "golf_course"
-msgstr ""
+msgstr "поле для гольфа"
 
 msgid "Boule"
-msgstr ""
+msgstr "Бочэ"
 
 msgid "Lawn Bowling"
-msgstr ""
+msgstr "Гульня ў шары на траве"
 
 msgid "Cricket"
-msgstr ""
-
-msgid "Cricket Nets"
-msgstr ""
+msgstr "Крыкет"
 
 msgid "Croquet"
-msgstr ""
+msgstr "Кракет"
 
-msgid "Hockey"
-msgstr ""
+msgid "Field Hockey"
+msgstr "Хакей на траве"
+
+msgid "Ice Hockey"
+msgstr "Хакей з шайбай"
 
 msgid "Pelota"
-msgstr ""
+msgstr "Пелота"
 
 msgid "Racquetball"
-msgstr ""
+msgstr "Ракетбол"
 
 msgid "Table Tennis/Ping-Pong"
-msgstr ""
+msgstr "Настольны тэніс (пінг-понг)"
 
 msgid "Tennis"
-msgstr ""
+msgstr "Тэніс"
 
 msgid "Motorsport"
-msgstr ""
+msgstr "Мотаспорт"
 
 msgid "Kart Racing"
-msgstr ""
+msgstr "Картынг"
 
 msgid "Motocross"
-msgstr ""
-
-msgid "Safety Training"
-msgstr ""
+msgstr "Мотакрос"
 
 msgid "Model Aerodrome"
-msgstr ""
+msgstr "Авіямадэльны спорт"
 
 msgctxt "aerialway"
 msgid "pitch"
-msgstr ""
+msgstr "спартовае поле"
 
 msgctxt "aerialway"
 msgid "sports_centre"
-msgstr ""
+msgstr "спартовы цэнтр"
 
 msgctxt "aerialway"
 msgid "track"
-msgstr ""
+msgstr "дарожка"
 
 msgid "RC Car"
-msgstr ""
-
-msgid "Raceway"
-msgstr ""
+msgstr "Аўтамадэляванне"
 
 msgid "Man Made"
-msgstr ""
+msgstr "Створана чалавекам"
 
 msgctxt "building"
 msgid "roof"
-msgstr ""
+msgstr "дах ці падстрэшак"
 
 msgctxt "building"
 msgid "garage"
-msgstr ""
+msgstr "гараж"
 
 msgctxt "building"
 msgid "garages"
-msgstr ""
+msgstr "гаражы"
 
 msgctxt "building"
 msgid "industrial"
-msgstr ""
+msgstr "прамысловае"
 
 msgctxt "building"
 msgid "school"
-msgstr ""
+msgstr "школа"
 
 msgctxt "building"
 msgid "commercial"
-msgstr ""
+msgstr "месца дзелавой актыўнасці"
 
 msgctxt "building"
 msgid "barn"
-msgstr ""
+msgstr "свіран"
 
 msgctxt "building"
 msgid "farm_auxiliary"
-msgstr ""
+msgstr "нежылы будынак фермы"
 
 msgctxt "building"
 msgid "transportation"
-msgstr ""
+msgstr "грузаперавозкі"
 
 msgctxt "building"
 msgid "greenhouse"
-msgstr ""
+msgstr "цяпліца"
 
 msgctxt "building"
 msgid "office"
-msgstr ""
+msgstr "офіс"
 
 msgctxt "building"
 msgid "university"
-msgstr ""
+msgstr "універсітэт"
 
 msgctxt "building"
 msgid "hospital"
-msgstr ""
+msgstr "лякарня"
 
 msgctxt "building"
 msgid "warehouse"
-msgstr ""
+msgstr "склад"
 
 msgctxt "building"
 msgid "retail"
-msgstr ""
+msgstr "дробны гандаль"
 
 msgctxt "building"
 msgid "shed"
-msgstr ""
+msgstr "падстрэшак"
 
 msgctxt "building"
 msgid "storage_tank"
-msgstr ""
+msgstr "рэзервуар"
+
+msgctxt "building"
+msgid "supermarket"
+msgstr "супермаркет"
+
+msgctxt "building"
+msgid "gasometer"
+msgstr "газасховішча"
 
 msgctxt "building"
 msgid "cowshed"
-msgstr ""
+msgstr "кароўнік"
 
 msgctxt "building"
 msgid "construction"
-msgstr ""
+msgstr "будаўніцтва"
 
 msgctxt "building"
 msgid "Levels"
-msgstr ""
+msgstr "Паверхі"
 
 msgid "Residential Building"
-msgstr ""
+msgstr "Жылы будынак"
 
 msgctxt "building"
 msgid "residential"
-msgstr ""
+msgstr "жылое"
 
 msgctxt "building"
 msgid "apartments"
-msgstr ""
+msgstr "шматкватэрны жылы дом"
 
 msgctxt "building"
 msgid "house"
-msgstr ""
+msgstr "жылы дом"
 
 msgctxt "building"
 msgid "hut"
-msgstr ""
+msgstr "халупа"
 
 msgctxt "building"
 msgid "dormitory"
-msgstr ""
+msgstr "інтэрнат"
 
 msgctxt "building"
 msgid "terrace"
-msgstr ""
+msgstr "шэраг стандартных дамоў"
 
 msgctxt "building"
 msgid "detached"
-msgstr ""
+msgstr "асобна стаячы дом"
 
 msgctxt "building"
 msgid "farm"
-msgstr ""
+msgstr "ферма"
 
 msgid "Building part"
-msgstr ""
+msgstr "Частка будынка"
 
 msgctxt "building"
 msgid "Skipped Levels"
-msgstr ""
+msgstr "Прапушчаныя паверхі"
 
 msgid "Skipped height (meters)"
-msgstr ""
+msgstr "Прапушчаная вышыня (метры)"
 
 msgid "Entrance"
-msgstr ""
+msgstr "Уваход"
 
 msgctxt "entrance"
 msgid "yes"
-msgstr ""
+msgstr "так"
 
 msgctxt "entrance"
 msgid "main"
-msgstr ""
+msgstr "галоўны"
 
 msgctxt "entrance"
 msgid "service"
-msgstr ""
+msgstr "службовы"
 
 msgctxt "entrance"
 msgid "exit"
-msgstr ""
+msgstr "выхад"
 
 msgctxt "entrance"
 msgid "emergency"
-msgstr ""
+msgstr "аварыйны"
 
 msgid "Entrance number"
-msgstr ""
+msgstr "Нумар ўваходу"
 
 msgid "Flat numbers"
-msgstr ""
+msgstr "Нумары кватэр"
 
 msgid "Tower"
-msgstr ""
+msgstr "Вежа"
 
 msgid "Tower type"
-msgstr ""
+msgstr "Прызначэнне вежы"
 
 msgid "communication"
-msgstr ""
+msgstr "сувязь"
 
 msgid "observation"
-msgstr ""
+msgstr "назіранне"
 
 msgid "Flagpole"
-msgstr ""
+msgstr "Флагшток"
 
 msgid "Works"
-msgstr ""
+msgstr "Цэхі"
 
 msgid "Chimney"
-msgstr ""
+msgstr "Дымавая труба"
 
 msgid "Windmill"
-msgstr ""
+msgstr "Вятрак"
 
 msgid "Gasometer"
-msgstr ""
+msgstr "Газасховішча"
 
 msgid "Storage Tank"
-msgstr ""
+msgstr "Рэзервуар"
 
 msgctxt "content"
 msgid "fuel"
-msgstr ""
+msgstr "паліва"
 
 msgctxt "content"
 msgid "manure"
-msgstr ""
+msgstr "арганічнае ўгнаенне"
 
 msgctxt "content"
 msgid "oil"
-msgstr ""
+msgstr "нафта"
 
 msgctxt "content"
 msgid "sewage"
-msgstr ""
+msgstr "сцёкавыя воды"
 
 msgctxt "content"
 msgid "silage"
-msgstr ""
+msgstr "сілас"
 
 msgctxt "content"
 msgid "slurry"
-msgstr ""
+msgstr "цэментавы раствор"
 
 msgctxt "content"
 msgid "water"
-msgstr ""
+msgstr "вада"
 
 msgctxt "content"
 msgid "wine"
-msgstr ""
+msgstr "віно"
 
 msgid "Bunker Silo"
-msgstr ""
+msgstr "Сіласная яма"
 
 msgid "Pipeline"
-msgstr ""
+msgstr "Трубаправод"
 
 msgid "water"
-msgstr ""
+msgstr "вада"
 
 msgid "gas"
-msgstr ""
+msgstr "газ"
 
 msgid "heat"
-msgstr ""
+msgstr "цеплатраса"
 
 msgid "oil"
-msgstr ""
+msgstr "нафта"
 
 msgid "sewage"
-msgstr ""
+msgstr "каналізацыя"
 
 msgctxt "pipeline"
 msgid "underwater"
-msgstr ""
+msgstr "падводны"
 
 msgctxt "pipeline"
 msgid "overground"
-msgstr ""
+msgstr "наземны"
 
 msgid "Crane"
-msgstr ""
+msgstr "Кран"
 
 msgid "Mineshaft"
-msgstr ""
+msgstr "Шахта"
 
 msgid "Function"
-msgstr ""
+msgstr "Функцыя"
 
 msgid "winding"
-msgstr ""
+msgstr "для трасоў"
 
 msgid "air"
-msgstr ""
+msgstr "вентыляцыйная"
 
 msgid "Depth in meters"
-msgstr ""
+msgstr "Глыбіня ў метрах"
 
 msgid "Resource"
-msgstr ""
+msgstr "Здабыча"
 
 msgid "aggregate"
-msgstr ""
+msgstr "напаўняльнік бетону"
 
 msgid "bauxite"
-msgstr ""
+msgstr "баксіт"
 
 msgid "coal"
-msgstr ""
+msgstr "вугальная"
 
 msgid "copper"
-msgstr ""
+msgstr "медзь"
 
 msgid "dimension_stone"
-msgstr ""
+msgstr "прыродны камень"
 
 msgid "gold"
-msgstr ""
+msgstr "золата"
 
 msgid "ilmenite"
-msgstr ""
+msgstr "ільменіт"
 
 msgid "iron_ore"
-msgstr ""
+msgstr "жалезная руда"
 
 msgid "lead"
-msgstr ""
+msgstr "свінец"
 
 msgid "limestone"
-msgstr ""
+msgstr "вапняк"
 
 msgid "nickel"
-msgstr ""
+msgstr "нікель"
 
 msgid "rutile"
-msgstr ""
+msgstr "руціл"
 
 msgid "salt"
-msgstr ""
+msgstr "соль"
 
 msgid "silver"
-msgstr ""
+msgstr "срэбра"
 
 msgid "tin"
-msgstr ""
+msgstr "волава"
 
 msgid "zinc"
-msgstr ""
+msgstr "цынк"
 
 msgid "zircon"
-msgstr ""
+msgstr "цырконій"
 
 msgid "Visible Headframe"
-msgstr ""
+msgstr "Бачная клець на гары"
 
 msgid "Disused"
-msgstr ""
+msgstr "Не эксплуатуецца"
 
 msgid "Adit"
-msgstr ""
+msgstr "Ходня"
 
 msgid "Length in meters"
-msgstr ""
+msgstr "Даўжыня ў метрах"
 
 msgid "Water Tower"
-msgstr ""
+msgstr "Воданапорная вежа"
 
 msgid "Water Works"
-msgstr ""
+msgstr "Водазабор"
 
 msgid "Wastewater Treatment Plant"
-msgstr ""
+msgstr "Збудаванні для ачысткі сцёкавых вод"
 
 msgid "Watermill"
-msgstr ""
+msgstr "Вадзяны млын"
 
 msgid "Fountain"
-msgstr ""
+msgstr "Фантан"
 
 msgid "Water Well"
-msgstr ""
+msgstr "Студня"
 
 msgid "Lighthouse"
-msgstr ""
+msgstr "Маяк"
 
 msgid "Street Lamp"
-msgstr ""
+msgstr "Вулічны ліхтар"
 
 msgid "Mo-Fr 22:00-05:00"
-msgstr ""
+msgstr "Mo-Fr 22:00-05:00"
 
 msgid "Monitoring Station"
-msgstr ""
+msgstr "Станцыя назірання"
 
 msgid "Monitoring:"
-msgstr ""
+msgstr "Назіранне за:"
 
 msgid "Water level"
-msgstr ""
+msgstr "Узроўнем вады"
 
 msgid "Tide Level"
-msgstr ""
+msgstr "Узроўнем прыліва"
 
 msgid "Groundwater"
-msgstr ""
+msgstr "Падземныя воды"
 
 msgid "Traffic"
-msgstr ""
+msgstr "Дарожным рухам"
 
 msgid "Air Quality"
-msgstr ""
+msgstr "Чысцінёй паветра"
 
 msgid "Noise"
-msgstr ""
+msgstr "Шумам"
 
 msgid "GPS Signals"
-msgstr ""
+msgstr "Сігналамі GPS"
 
 msgid "GLONASS Signals"
-msgstr ""
+msgstr "Сігналамі GLONASS"
 
 msgid "Galileo Signals"
-msgstr ""
+msgstr "Сігналамі Galileo"
 
 msgid "Weather"
-msgstr ""
+msgstr "Надвор’е"
 
 msgid "Radiation"
-msgstr ""
+msgstr "Радыяцыяй"
 
 msgid "Seismic Activity"
-msgstr ""
+msgstr "Сейсмічнай актыўнасцю"
 
 msgid "Recording:"
-msgstr ""
+msgstr "Запис:"
 
 msgid "Automated"
-msgstr ""
+msgstr "Аўтаматычная"
 
 msgid "Manually"
-msgstr ""
+msgstr "Уручную"
 
 msgid "Remote"
-msgstr ""
+msgstr "Дыстанцыйная"
 
 msgid "Display:"
-msgstr ""
+msgstr "Інтэрфейс:"
 
 msgid "Analog"
-msgstr ""
+msgstr "Аналагавы"
 
 msgid "Digital"
-msgstr ""
+msgstr "Лічбавы"
 
 msgid "Survey Point"
-msgstr ""
+msgstr "Геадэзічны пункт"
 
 msgid "Surveillance Camera"
-msgstr ""
+msgstr "Камера відэаназірання"
 
 msgid "indoor"
-msgstr ""
+msgstr "унутраная"
 
 msgid "outdoor"
-msgstr ""
+msgstr "вонкавая"
 
 msgid "Zone"
-msgstr ""
+msgstr "Вобласць назірання"
 
 msgid "parking"
-msgstr ""
+msgstr "паркоўка"
 
 msgid "traffic"
-msgstr ""
+msgstr "дарожны рух"
 
 msgid "shop"
-msgstr ""
+msgstr "крама"
 
 msgid "bank"
-msgstr ""
+msgstr "банк"
 
 msgid "Camera"
-msgstr ""
+msgstr "Камера"
 
 msgctxt "camera:type"
 msgid "fixed"
-msgstr ""
+msgstr "нерухомая"
 
 msgctxt "camera:type"
 msgid "panning"
-msgstr ""
+msgstr "якая панарамуе"
 
 msgctxt "camera:type"
 msgid "dome"
-msgstr ""
+msgstr "купальная"
 
 msgid "Mounted on"
-msgstr ""
+msgstr "Усталявана на"
 
 msgctxt "camera:mount"
 msgid "wall"
-msgstr ""
+msgstr "сцяне"
 
 msgctxt "camera:mount"
 msgid "pole"
-msgstr ""
+msgstr "слупе"
 
 msgctxt "camera:mount"
 msgid "ceiling"
-msgstr ""
+msgstr "столі"
 
 msgid "Direction in degrees"
-msgstr ""
+msgstr "Кірунак у градусах"
 
 msgid "Inclination in degrees"
-msgstr ""
+msgstr "Нахіл у градусах"
 
 msgid "Bridges"
-msgstr ""
+msgstr "Масты"
 
 msgid "aqueduct"
-msgstr ""
+msgstr "акведук"
 
 msgid "boardwalk"
-msgstr ""
+msgstr "дашчаны насціл"
 
 msgid "cantilever"
-msgstr ""
+msgstr "кансольны"
 
 msgid "covered"
-msgstr ""
+msgstr "крыты"
 
 msgid "low_water_crossing"
-msgstr ""
+msgstr "нізка над вадой"
 
 msgid "trestle"
-msgstr ""
+msgstr "на рамных апорах"
 
 msgid "viaduct"
-msgstr ""
+msgstr "віядук"
 
 msgid "Structure"
-msgstr ""
+msgstr "Структура"
 
 msgid "arch"
-msgstr ""
+msgstr "аркавы"
 
 msgid "beam"
-msgstr ""
+msgstr "бэлечны"
 
 msgid "truss"
-msgstr ""
+msgstr "фермавы"
 
 msgid "floating"
-msgstr ""
+msgstr "на плывучых апорах"
 
 msgid "suspension"
-msgstr ""
+msgstr "падвесны"
 
 msgid "cable-stayed"
-msgstr ""
+msgstr "вантавы"
 
 msgid "simple-suspension"
-msgstr ""
+msgstr "вісячы"
 
 msgid "humpback"
-msgstr ""
+msgstr "гарбаты мост"
 
 msgid "Movable Bridge"
-msgstr ""
+msgstr "Разводны мост"
 
 msgid "bascule"
-msgstr ""
+msgstr "які расчыняецца"
 
 msgid "drawbridge"
-msgstr ""
+msgstr "падымаецца"
 
 msgid "lift"
-msgstr ""
+msgstr "падымаецца вертыкальна"
 
 msgid "submersible"
-msgstr ""
+msgstr "паглыбляецца"
 
 msgid "swing"
-msgstr ""
+msgstr "паваротны мост"
 
 msgid "transporter"
-msgstr ""
+msgstr "лятучы паром"
 
 msgid "Bridge Support"
-msgstr ""
+msgstr "Апора моста"
 
 msgid "pier"
-msgstr ""
+msgstr "бык"
 
 msgid "abutment"
-msgstr ""
+msgstr "берагавая аснова"
 
 msgid "lift_pier"
-msgstr ""
+msgstr "апора пад’ёмнага пралёта"
 
 msgid "pivot_pier"
-msgstr ""
+msgstr "апора разводнага пралёта"
 
 msgid "Bridge outline"
-msgstr ""
+msgstr "Контур моста"
 
 msgid "Power Plant"
-msgstr ""
+msgstr "Электрастанцыя"
 
 msgid "Output forms of energy (optional):"
-msgstr ""
+msgstr "Выхадныя формы энергіі (неабавязкова):"
 
 msgid "Power Generator"
-msgstr ""
+msgstr "Генератар"
 
 msgid "Biofuel Power Generator"
-msgstr ""
+msgstr "Генератар на біяпаліве"
 
 msgid "Generator Type"
-msgstr ""
+msgstr "Тып генератара"
 
 msgid "gas_turbine"
-msgstr ""
+msgstr "газавая турбіна"
 
 msgid "reciprocating_engine"
-msgstr ""
+msgstr "поршневы рухавік"
 
 msgid "steam_generator"
-msgstr ""
+msgstr "парагенератар"
 
 msgid "Biogas Power Generator"
-msgstr ""
+msgstr "Генератар на біягазе"
 
 msgid "Biomass Power Generator"
-msgstr ""
+msgstr "Генератар на біямасе"
 
 msgid "Method"
-msgstr ""
+msgstr "Метад"
 
 msgctxt "generator method"
 msgid "anaerobic_digestion"
-msgstr ""
+msgstr "анаэробнае зброджвання"
 
 msgctxt "generator method"
 msgid "combustion"
-msgstr ""
+msgstr "згаранне"
 
 msgctxt "generator method"
 msgid "gasification"
-msgstr ""
+msgstr "пераўтварэнне ў газ"
 
 msgid "bioreactor"
-msgstr ""
+msgstr "біярэактар"
 
 msgid "anaerobic_digestion / combustion"
-msgstr ""
+msgstr "анаэробнае зброджванне / згаранне"
 
 msgid "pyrolysis"
-msgstr ""
+msgstr "піроліз"
 
 msgid "combustion"
-msgstr ""
+msgstr "згаранне"
 
 msgid "steam_turbine"
-msgstr ""
+msgstr "паравая турбіна"
 
 msgid "Coal Power Generator"
-msgstr ""
+msgstr "Працуючы на вугалі"
 
 msgid "Gas Power Generator"
-msgstr ""
+msgstr "Генератар на газе"
 
 msgid "combined_cycle"
-msgstr ""
+msgstr "парагазавы цыкл"
 
 msgid "Oil Power Generator"
-msgstr ""
+msgstr "Генератар на мазуце"
 
 msgid "Diesel Power Generator"
-msgstr ""
+msgstr "Генератар на дызпаліве"
 
 msgid "Gasoline Power Generator"
-msgstr ""
+msgstr "Генератар на бензіне"
 
 msgid "Nuclear Reactor"
-msgstr ""
+msgstr "Ядзерны рэактар"
 
 msgctxt "generator method"
 msgid "fission"
-msgstr ""
+msgstr "дзяленне ядраў"
 
 msgctxt "generator method"
 msgid "fusion"
-msgstr ""
+msgstr "сінтэз"
 
 msgid "Boiling Water Reactor 1 (BWR-1)"
-msgstr ""
+msgstr "Кіпячы вода-вадзяны рэактар 1 (BWR-1)"
 
 msgid "fission"
-msgstr ""
+msgstr "дзяленне ядраў"
 
 msgid "Boiling Water Reactor 2 (BWR-2)"
-msgstr ""
+msgstr "Кіпячы вода-вадзяны рэактар 2 (BWR-2)"
 
 msgid "Boiling Water Reactor 3 (BWR-3)"
-msgstr ""
+msgstr "Кіпячы вода-вадзяны рэактар 3 (BWR-3)"
 
 msgid "Boiling Water Reactor 4 (BWR-4)"
-msgstr ""
+msgstr "Кіпячы вода-вадзяны рэактар 4 (BWR-4)"
 
 msgid "Boiling Water Reactor 5 (BWR-5)"
-msgstr ""
+msgstr "Кіпячы вода-вадзяны рэактар 5 (BWR-5)"
 
 msgid "Boiling Water Reactor 6 (BWR-6)"
-msgstr ""
+msgstr "Кіпячы вода-вадзяны рэактар 6 (BWR-6)"
 
 msgid "CANada Deuterium Uranium reactor (CANDU)"
-msgstr ""
+msgstr "Рэактар CANDU (CANada Deuterium Uranium)"
 
 msgid "cold-fusion"
-msgstr ""
+msgstr "халодны сінтэз"
 
 msgid "fusion"
-msgstr ""
+msgstr "сінтэз"
 
 msgid "China Pressurized Reactor (CPR-1000)"
-msgstr ""
+msgstr "Кітайскі вода-вадзяны ядзерны рэактар (CPR-1000)"
 
 msgid "European Pressurized Reactor (EPR)"
-msgstr ""
+msgstr "Еўрапейскі вода-вадзяны ядзерны рэактар (EPR)"
 
 msgid "Inertial Confinement Fusion (ICF)"
-msgstr ""
+msgstr "Інерцыяльны кіраваны тэрмаядзерны сінтэз (ICF)"
 
 msgid "Pressurized water reactor (PWR)"
-msgstr ""
+msgstr "Вода-вадзяны ядзерны рэактар (PWR)"
 
 msgid "Reactor Bolshoy Moshchnosti Kanalniy 1000 (RBMK-1000)"
-msgstr ""
+msgstr "Рэактар вялікай магутнасці канальны 1000 (RBMK-1000)"
 
 msgid "Reactor Bolshoy Moshchnosti Kanalniy 1500 (RBMK-1500)"
-msgstr ""
+msgstr "Рэактар вялікай магутнасці канальны 1500 (RBMK-1500)"
 
 msgid "stellarator"
-msgstr ""
+msgstr "стэларатар"
 
 msgid "tokamak"
-msgstr ""
+msgstr "такамак"
 
 msgid "Vodo-Vodyanoi Energetichesky Reactor (VVER)"
-msgstr ""
+msgstr "Вода-вадзяны энергетычны рэактар (VVER)"
 
 msgid "Solar Power Generator"
-msgstr ""
+msgstr "Сонечны генератар"
 
 msgctxt "generator method"
 msgid "photovoltaic"
-msgstr ""
+msgstr "фотаэлектрычны"
 
 msgctxt "generator method"
 msgid "thermal"
-msgstr ""
+msgstr "тэрмальны"
 
 msgid "solar_photovoltaic_panel"
-msgstr ""
+msgstr "сонечная фотаэлектрычная панэль"
 
 msgid "photovoltaic"
-msgstr ""
+msgstr "фотаэлектрычны"
 
 msgid "solar_thermal_collector"
-msgstr ""
+msgstr "сонечны калектар"
 
 msgid "thermal"
-msgstr ""
+msgstr "тэрмальны"
 
 msgid "Waste Power Generator"
-msgstr ""
+msgstr "Генератар на адыходах"
 
 msgctxt "generator method"
 msgid "pyrolysis"
-msgstr ""
+msgstr "піроліз"
 
 msgid "gasification"
-msgstr ""
+msgstr "пераўтварэнне ў газ"
 
 msgid "Water Turbine"
-msgstr ""
+msgstr "Гідраўлічная турбіна"
 
 msgctxt "generator method"
 msgid "run-of-the-river"
-msgstr ""
+msgstr "плынь ракі"
 
 msgctxt "generator method"
 msgid "water-pumped-storage"
-msgstr ""
+msgstr "гідраакумулюючы"
 
 msgctxt "generator method"
 msgid "water-storage"
-msgstr ""
+msgstr "вадасховішча"
 
 msgid "francis_turbine"
-msgstr ""
+msgstr "турбіна Фрэнсіса"
 
 msgid "all methods"
-msgstr ""
+msgstr "усе метады"
 
 msgid "hydrodynamic_screw"
-msgstr ""
+msgstr "шнекавая гідратурбіна"
 
 msgid "run-of-the-river"
-msgstr ""
+msgstr "плынь ракі"
 
 msgid "kaplan_turbine"
-msgstr ""
+msgstr "турбіна Каплана"
 
 msgid "run-of-the-river / water-storage"
-msgstr ""
+msgstr "плынь ракі / вадасховішча"
 
 msgid "pelton_turbine"
-msgstr ""
+msgstr "каўшовая турбіна"
 
 msgid "Tidal Water Turbine"
-msgstr ""
+msgstr "Прыліўная турбіна"
 
 msgctxt "generator method"
 msgid "barrage"
-msgstr ""
+msgstr "плаціна"
 
 msgctxt "generator method"
 msgid "stream"
-msgstr ""
+msgstr "водны струмень"
 
 msgid "horizontal_axis"
-msgstr ""
+msgstr "гарызантальная вось"
 
 msgid "barrage"
-msgstr ""
+msgstr "плаціна"
 
 msgid "vertical_axis"
-msgstr ""
+msgstr "вертыкальная вось"
 
 msgid "Wave Energy Converter"
-msgstr ""
+msgstr "Пераўтваральнік энергіі хваль"
 
 msgid "Osmotic Power Generator"
-msgstr ""
+msgstr "Асматычны генератар"
 
 msgid "Geothermal Power Generator"
-msgstr ""
+msgstr "Геатэрмальны генератар"
 
 msgid "heat_pump"
-msgstr ""
+msgstr "цеплавая помпа"
 
 msgid "Wind Turbine"
-msgstr ""
+msgstr "Ветратурбіна"
 
 msgid "Power Substation"
-msgstr ""
+msgstr "Падстанцыя"
 
 msgid "Type of substation"
-msgstr ""
+msgstr "Тып падстанцыі"
 
 msgctxt "power"
 msgid "transmission"
-msgstr ""
+msgstr "перадаючая"
 
 msgctxt "power"
 msgid "distribution"
-msgstr ""
+msgstr "размеркавальная"
 
 msgctxt "power"
 msgid "minor_distribution"
-msgstr ""
+msgstr "камплектная"
 
 msgctxt "power"
 msgid "converter"
-msgstr ""
+msgstr "пераўтваральная"
 
 msgctxt "power"
 msgid "compensation"
-msgstr ""
+msgstr "кампенсавальная"
 
 msgctxt "power"
 msgid "transition"
-msgstr ""
+msgstr "пераходная"
 
 msgctxt "power"
 msgid "traction"
-msgstr ""
+msgstr "цягавая"
 
 msgctxt "power"
 msgid "industrial"
-msgstr ""
+msgstr "прамысловая"
 
 msgid "Power rating (kVA/MVA)"
-msgstr ""
+msgstr "Намінальная магутнасць (ква/МВА)"
 
 msgid "2700 kVA"
-msgstr ""
+msgstr "2700 kVA"
 
 msgid "12500 kVA"
-msgstr ""
+msgstr "12500 kVA"
 
 msgid "15 MVA"
-msgstr ""
+msgstr "15 MVA"
 
 msgid "50 MVA"
-msgstr ""
+msgstr "50 MVA"
 
 msgid "100 MVA"
-msgstr ""
+msgstr "100 MVA"
 
 msgid "Gas insulated"
-msgstr ""
+msgstr "Элегазавы"
 
 msgid "Power Transformer"
-msgstr ""
+msgstr "Трансфарматар"
 
 msgid "Type of transformer"
-msgstr ""
+msgstr "Тып трансфарматара"
 
 msgctxt "power"
 msgid "generator"
-msgstr ""
+msgstr "генератарны"
 
 msgctxt "power"
 msgid "auto"
-msgstr ""
+msgstr "аўтатрансфарматар"
 
 msgctxt "power"
 msgid "phase_angle_regulator"
-msgstr ""
+msgstr "фазавы рэгулятар"
 
 msgctxt "power"
 msgid "yes"
-msgstr ""
+msgstr "так"
 
 msgid "Phases"
-msgstr ""
+msgstr "Колькасць фаз"
 
 msgid "Power Switchgear"
-msgstr ""
+msgstr "Размеркавальная прылада"
 
 msgid ""
 "(Please only use this tag if more detailed mapping using busbars and bays is "
 "impossible!)"
 msgstr ""
+"(Калі ласка, выкарыстоўвайце гэты тэг толькі тады, калі падрабязная разметка "
+"з пазначэннем зборных шын і ячэек немагчымая!)"
 
 msgid "Power Busbar"
-msgstr ""
+msgstr "Шына"
 
 msgid "Power Bay"
-msgstr ""
+msgstr "Ячэйка"
 
 msgid "Power Switch"
-msgstr ""
+msgstr "Раз’яднальнік"
 
 msgid "Power Converter"
-msgstr ""
+msgstr "Пераўтваральнік"
 
 msgid "Type of converter"
-msgstr ""
+msgstr "Тып пераўтваральніка"
 
 msgctxt "power"
 msgid "lcc"
-msgstr ""
+msgstr "пераўтваральнік з лінейнай камутацыяй (LCC)"
 
 msgctxt "power"
 msgid "vsc"
-msgstr ""
+msgstr "транзістарны пераўтваральнік (VSC)"
 
 msgctxt "power"
 msgid "back-to-back"
-msgstr ""
+msgstr "устаўка пастаяннага току"
 
 msgid "Amount of poles"
-msgstr ""
+msgstr "Колькасць палюсоў"
 
 msgid "monopole"
-msgstr ""
+msgstr "монаполюсны"
 
 msgid "bipole"
-msgstr ""
+msgstr "біпалярны"
 
 msgid "Power rating (MVA)"
-msgstr ""
+msgstr "Намінальная магутнасць (МВА)"
 
 msgid "Power Compensator"
-msgstr ""
+msgstr "Кампенсатар"
 
 msgid "Type of compensator"
-msgstr ""
+msgstr "Тып кампенсатара"
 
 msgctxt "power"
 msgid "shunt_reactor"
-msgstr ""
+msgstr "шунтуючы рэактар"
 
 msgctxt "power"
 msgid "shunt_capacitor"
-msgstr ""
+msgstr "шунтуючы кандэнсатар"
 
 msgctxt "power"
 msgid "static_var"
-msgstr ""
+msgstr "статычны тырыстарны"
 
 msgctxt "power"
 msgid "statcom"
-msgstr ""
+msgstr "статычны сінхронны кампенсатар"
 
 msgctxt "power"
 msgid "synchronous_condenser"
-msgstr ""
+msgstr "сінхронны кампенсатар"
 
 msgctxt "power"
 msgid "filter"
-msgstr ""
+msgstr "фільтр"
 
 msgctxt "power"
 msgid "series_reactor"
-msgstr ""
+msgstr "Рэактарная батарэя"
 
 msgctxt "power"
 msgid "series_capacitor"
-msgstr ""
+msgstr "Кандэнсатарная батарэя"
 
 msgid "Power rating (kvar/Mvar)"
-msgstr ""
+msgstr "Намінальная магутнасць (квар/Мвар)"
 
 msgid "500 kvar"
-msgstr ""
+msgstr "500 kvar"
 
 msgid "1 Mvar"
-msgstr ""
+msgstr "1 Mvar"
 
 msgid "5 Mvar"
-msgstr ""
+msgstr "5 Mvar"
 
 msgid "Cable Distribution Cabinet"
-msgstr ""
+msgstr "Размеркавальная шафа"
 
 msgid "Power Tower"
-msgstr ""
+msgstr "Апора ЛЭП"
 
 msgid "Type of construction"
-msgstr ""
+msgstr "Канструкцыя"
 
 msgid "lattice"
-msgstr ""
+msgstr "рашэцістая"
 
 msgid "tubular"
-msgstr ""
+msgstr "трубчастая"
 
 msgid "solid"
-msgstr ""
+msgstr "суцэльная"
 
 msgid "steel"
-msgstr ""
+msgstr "сталь"
 
 msgctxt "color"
 msgid "red/white"
-msgstr ""
+msgstr "чырвона-белая"
 
 msgctxt "power"
 msgid "Tower type"
-msgstr ""
+msgstr "Тып апоры"
 
 msgctxt "power"
 msgid "suspension"
-msgstr ""
+msgstr "падвесны"
 
 msgctxt "power"
 msgid "anchor"
-msgstr ""
+msgstr "анкерная"
 
 msgctxt "power"
 msgid "termination"
-msgstr ""
+msgstr "канцавая"
 
 msgctxt "power"
 msgid "branch"
-msgstr ""
+msgstr "адгалінавальная"
 
 msgctxt "power"
 msgid "transposing"
-msgstr ""
+msgstr "транспазіцыйная"
 
 msgctxt "power"
 msgid "crossing"
-msgstr ""
+msgstr "перасякалая"
 
 msgid "Branch tower type"
-msgstr ""
+msgstr "Тып адгалінавальнай апоры"
 
 msgctxt "power"
 msgid "tap"
-msgstr ""
+msgstr "адпайка"
 
 msgctxt "power"
 msgid "split"
-msgstr ""
+msgstr "падзел"
 
 msgctxt "power"
 msgid "loop"
-msgstr ""
+msgstr "пятля"
 
 msgctxt "power"
 msgid "cross"
-msgstr ""
+msgstr "скрыжаванне"
 
 msgid "Tower design"
-msgstr ""
+msgstr "Дызайн апоры"
 
 msgctxt "power"
 msgid "one-level"
-msgstr ""
+msgstr "аднаўзроўневая"
 
 msgctxt "power"
 msgid "two-level"
-msgstr ""
+msgstr "двухузроўневая"
 
 msgctxt "power"
 msgid "donau"
-msgstr ""
+msgstr "\"дунайскага\" тыпу"
 
 msgctxt "power"
 msgid "three-level"
-msgstr ""
+msgstr "трохузроўневая"
 
 msgctxt "power"
 msgid "barrel"
-msgstr ""
+msgstr "бочкападобная"
 
 msgctxt "power"
 msgid "asymmetric"
-msgstr ""
+msgstr "асіметрычная"
 
 msgctxt "power"
 msgid "triangle"
-msgstr ""
+msgstr "трохкутная"
 
 msgctxt "power"
 msgid "flag"
-msgstr ""
+msgstr "сцяг"
 
 msgctxt "power"
 msgid "donau;one-level"
-msgstr ""
+msgstr "\"дунайскага\" тыпу, аднаўзроўневая"
 
 msgctxt "power"
 msgid "four-level"
-msgstr ""
+msgstr "чатырохузроўневая"
 
 msgctxt "power"
 msgid "six-level"
-msgstr ""
+msgstr "шасціўзроўневая"
 
 msgctxt "power"
 msgid "nine-level"
-msgstr ""
+msgstr "дзевяціузроўневая"
 
 msgctxt "power"
 msgid "delta"
-msgstr ""
+msgstr "дэльта"
 
 msgctxt "power"
 msgid "delta_two-level"
-msgstr ""
+msgstr "дэльтападобная двухузроўневая"
 
 msgctxt "power"
 msgid "y-frame"
-msgstr ""
+msgstr "Y-вобразная"
 
 msgctxt "power"
 msgid "x-frame"
-msgstr ""
+msgstr "X-вобразная"
 
 msgctxt "power"
 msgid "h-frame"
-msgstr ""
+msgstr "H-вобразная"
 
 msgctxt "power"
 msgid "guyed_h-frame"
-msgstr ""
+msgstr "H-вобразная з расцяжкамі"
 
 msgctxt "power"
 msgid "portal"
-msgstr ""
+msgstr "партал"
 
 msgctxt "power"
 msgid "portal_two-level"
-msgstr ""
+msgstr "двухузроўневы партал"
 
 msgctxt "power"
 msgid "portal_three-level"
-msgstr ""
+msgstr "трохузроўневы партал"
 
 msgctxt "power"
 msgid "guyed_v-frame"
-msgstr ""
+msgstr "V-вобразная з расцяжкамі"
 
 msgctxt "power"
 msgid "bipole"
-msgstr ""
+msgstr "двухпалярная"
 
 msgctxt "power"
 msgid "monopolar"
-msgstr ""
+msgstr "аднапалярная"
 
 msgid "Triple tower"
-msgstr ""
+msgstr "Патройная апора"
 
 msgid "Incomplete tower"
-msgstr ""
+msgstr "Няпоўная апора"
 
 msgid "Location transition"
-msgstr ""
+msgstr "Змена размяшчэння"
 
 msgid "Pole"
-msgstr ""
+msgstr "Слуп"
 
 msgid "Pole with Transformer"
-msgstr ""
+msgstr "Слуп з трансфарматарам"
 
 msgid "Pole Attributes:"
-msgstr ""
+msgstr "Уласцівасці слупа:"
 
 msgid "Transformer Attributes:"
-msgstr ""
+msgstr "Уласцівасці трансфарматара:"
 
 msgid "Power Line"
-msgstr ""
+msgstr "Лінія электраперадач"
 
 msgid "Line type"
-msgstr ""
+msgstr "Тып лініі"
 
 msgid "line"
-msgstr ""
+msgstr "высакавольтная"
 
 msgid "minor_line"
-msgstr ""
+msgstr "нізкавольтная"
 
 msgid "Number of conductors/wires per cable"
-msgstr ""
+msgstr "Лік жыл/правадоў у кабелі"
 
 msgctxt "power"
 msgid "single"
-msgstr ""
+msgstr "1"
 
 msgctxt "power"
 msgid "double"
-msgstr ""
+msgstr "2"
 
 msgctxt "power"
 msgid "triple"
-msgstr ""
+msgstr "3"
 
 msgctxt "power"
 msgid "quad"
-msgstr ""
+msgstr "4"
 
 msgctxt "power"
 msgid "fivefold"
-msgstr ""
+msgstr "5"
 
 msgctxt "power"
 msgid "sixfold"
-msgstr ""
+msgstr "6"
 
 msgctxt "power"
 msgid "eightfold"
-msgstr ""
+msgstr "8"
 
 msgid "Used for data communications"
-msgstr ""
+msgstr "Выкарыстоўваецца для перадачы дадзеных"
 
 msgid "Power Cable"
-msgstr ""
+msgstr "Электрычны кабель"
 
 msgctxt "power cable"
 msgid "underground"
-msgstr ""
+msgstr "падземны"
 
 msgctxt "power cable"
 msgid "underwater"
-msgstr ""
+msgstr "падводны"
 
 msgctxt "power cable"
 msgid "overground"
-msgstr ""
+msgstr "надземны"
 
 msgid "Historic Places"
-msgstr ""
+msgstr "Гістарычныя месцы"
 
 msgid "Castle"
-msgstr ""
+msgstr "Замак"
 
 msgid "Ruins"
-msgstr ""
+msgstr "Разваліны"
 
 msgid "Archaeological Site"
-msgstr ""
+msgstr "Археалагічныя раскопкі"
 
 msgid "Battlefield"
-msgstr ""
+msgstr "Поле бітвы"
 
 msgid "Palaeontological Site"
-msgstr ""
+msgstr "Палеанталагічныя раскопкі"
 
 msgid "Monument"
-msgstr ""
+msgstr "Манумент"
 
 msgid "Memorial"
-msgstr ""
+msgstr "Помнік"
 
 msgctxt "memorial"
 msgid "statue"
-msgstr ""
+msgstr "статуя"
 
 msgctxt "memorial"
 msgid "bust"
-msgstr ""
+msgstr "бюст"
 
 msgctxt "memorial"
 msgid "plaque"
-msgstr ""
+msgstr "мемарыяльная дошка"
 
 msgctxt "memorial"
 msgid "stele"
-msgstr ""
+msgstr "стэла"
 
 msgctxt "memorial"
 msgid "stone"
-msgstr ""
+msgstr "камень"
 
 msgctxt "memorial"
 msgid "war_memorial"
-msgstr ""
+msgstr "ваенны мемарыял"
 
 msgid "Inscription"
-msgstr ""
+msgstr "Надпіс"
 
 msgid "Wayside Cross"
-msgstr ""
+msgstr "Прыдарожны крыж"
 
 msgid "Wayside Shrine"
-msgstr ""
+msgstr "Прыдарожная святыня"
 
 msgid "Place of worship"
-msgstr ""
+msgstr "Культавае месца"
 
 msgctxt "building"
 msgid "wayside_shrine"
-msgstr ""
+msgstr "прыдарожнае свяцілішча"
 
 msgid "Boundary Stone"
-msgstr ""
+msgstr "Памежны камень"
 
 msgid "Shops"
-msgstr ""
+msgstr "Крамы, служба побыту"
 
 msgid "Food"
-msgstr ""
+msgstr "Ежа"
 
 msgid "Supermarket"
-msgstr ""
+msgstr "Супермаркет"
 
 msgid "Convenience Store"
-msgstr ""
+msgstr "Невялікая крама"
 
 msgid "Kiosk"
-msgstr ""
+msgstr "Шапік"
 
 msgid "Bakery"
-msgstr ""
+msgstr "Хлебная крама"
 
 msgid "Butcher"
-msgstr ""
+msgstr "Мясная крама"
 
 msgid "Seafood"
-msgstr ""
+msgstr "Морапрадукты"
 
 msgid "Deli (Fine Food)"
-msgstr ""
+msgstr "Дэлікатэсы"
 
 msgid "Candy Store"
-msgstr ""
+msgstr "Кандытарская"
 
 msgid "Tea"
-msgstr ""
+msgstr "Чай"
 
 msgid "Coffee"
-msgstr ""
+msgstr "Кава"
 
 msgid "Public Market"
-msgstr ""
+msgstr "Рынак"
 
 msgid "Organic"
-msgstr ""
+msgstr "Натуральныя прадукты"
 
 msgid "Greengrocer"
-msgstr ""
+msgstr "Прадавец садавіны ці гародніны"
 
 msgid "Farm Stand"
-msgstr ""
+msgstr "Фермерская крама"
 
 msgid "Organic/Bio"
-msgstr ""
+msgstr "Натуральныя прадукты"
 
 msgid "Fair Trade"
-msgstr ""
+msgstr "Справядлівы гандаль"
 
 msgid "Alcohol"
-msgstr ""
+msgstr "Алкагольная прадукцыя"
 
 msgid "Beverages"
-msgstr ""
+msgstr "Напоі"
 
 msgid "Wine"
-msgstr ""
+msgstr "Віно"
 
 msgid "Boutique"
-msgstr ""
-
-msgid "Shoes"
-msgstr ""
+msgstr "Буцік"
 
 msgid "Outdoor"
-msgstr ""
+msgstr "Тавары для актыўнага адпачынку"
 
 msgid "Dry Cleaning"
-msgstr ""
+msgstr "Хімчыстка"
 
 msgid "Laundry"
-msgstr ""
+msgstr "Пральня"
 
 msgid "Tailor"
-msgstr ""
+msgstr "Кравец"
 
 msgid "Fabric"
-msgstr ""
+msgstr "Тканіны"
 
 msgid "Electronic"
-msgstr ""
+msgstr "Электроніка"
 
 msgid "Computer"
-msgstr "Камп'ютэр"
+msgstr "Кампутары"
 
 msgid "Electronics"
-msgstr ""
+msgstr "Побытавая электроніка"
 
 msgid "Mobile Phone"
-msgstr ""
+msgstr "Мабільны тэлефон"
 
 msgid "Vacuum Cleaner"
-msgstr ""
+msgstr "Пыласос"
 
 msgid "Hifi"
-msgstr ""
+msgstr "Гукавая апаратура"
 
 msgid "Video"
-msgstr ""
+msgstr "Відэа"
 
 msgid "Video Games"
-msgstr ""
+msgstr "Відэагульні"
 
 msgid "Music"
-msgstr ""
+msgstr "Музыка"
 
 msgid "Cash"
-msgstr ""
+msgstr "Грошы"
 
 msgid "Bank"
-msgstr ""
+msgstr "Банк"
 
 msgid "Automated Teller Machine"
-msgstr ""
+msgstr "Банкамат"
 
 msgid "Money Exchange"
-msgstr ""
+msgstr "Абмен валют"
 
 msgid "Pawnbroker"
-msgstr ""
+msgstr "Ламбард"
 
 msgid "Home decoration"
-msgstr ""
+msgstr "Прадметы інтэр’еру"
 
 msgid "Furniture"
-msgstr ""
+msgstr "Мэблевы"
 
 msgid "Kitchen"
-msgstr ""
+msgstr "Кухня"
 
 msgid "Curtain"
-msgstr ""
+msgstr "Запавесы"
 
 msgid "Art"
-msgstr ""
+msgstr "Творы мастацтва"
 
 msgid "Frame"
-msgstr ""
+msgstr "Рамкі"
 
 msgid "Bed"
-msgstr ""
+msgstr "Пасцельнае прыладдзе"
 
 msgid "Interior Decoration"
-msgstr ""
+msgstr "Афармленне інтэр’еру"
 
 msgid "Antiques"
-msgstr ""
+msgstr "Антыкварыят"
 
 msgid "Printed Material"
-msgstr ""
+msgstr "Друкаваныя матэрыялы"
 
 msgid "Stationery"
-msgstr ""
+msgstr "Канцтавары"
 
 msgid "Copy Shop"
-msgstr ""
+msgstr "Капіявальныя і паліграфічныя паслугі"
 
 msgid "Book Store"
-msgstr ""
+msgstr "Кнігарня"
 
 msgid "Newspaper Stand"
-msgstr ""
+msgstr "Газетны шапік"
 
 msgid "Ticket"
-msgstr ""
+msgstr "Білетная каса"
 
 msgid "Department Store"
-msgstr ""
+msgstr "Універмаг"
 
 msgid "Mall"
-msgstr ""
+msgstr "Буйны гандлёвы цэнтр"
 
 msgid "Chemist"
-msgstr ""
+msgstr "Побытавая хімія"
 
 msgid "Hairdresser/Barber"
-msgstr ""
+msgstr "Цырульня"
 
 msgid "Beauty"
-msgstr ""
+msgstr "Салон прыгажосці"
 
 msgid "Tattoo"
-msgstr ""
+msgstr "Татуяванне"
 
 msgid "Optician"
-msgstr ""
+msgstr "Оптыка"
 
 msgid "Hearing Aids"
-msgstr ""
+msgstr "Слыхавыя апараты"
 
 msgid "Medical Supply"
-msgstr ""
+msgstr "Медыцынскае прыладдзе"
 
 msgid "Jewellery"
-msgstr ""
+msgstr "Ювелірная крама"
 
 msgid "Gift/Souvenir"
-msgstr ""
+msgstr "Падарункі і сувеніры"
 
 msgid "Erotic"
-msgstr ""
+msgstr "Сэкс-шоп"
 
 msgid "Florist"
-msgstr ""
+msgstr "Кветкавая крама"
 
 msgid "Garden Centre"
-msgstr ""
+msgstr "Садова-агародная крама"
 
 msgid "Do-It-Yourself Store"
-msgstr ""
+msgstr "Крама \"Зрабі сам\""
 
 msgid "Hardware"
-msgstr ""
+msgstr "Гаспадарчая крама"
 
 msgid "Paint"
-msgstr ""
+msgstr "Фарбы"
 
 msgid "Travel Agency"
-msgstr ""
+msgstr "Турыстычнае агенцтва"
 
 msgid "Musical Instrument"
-msgstr ""
+msgstr "Музычныя інструменты"
 
 msgid "Toys"
-msgstr ""
+msgstr "Цацкі"
 
 msgid "Variety Store"
-msgstr ""
+msgstr "Універсальная крама"
 
 msgid "Bookmaker"
-msgstr ""
+msgstr "Букмекерская кантора"
 
 msgid "Lottery"
-msgstr ""
+msgstr "Латарэйныя квіткі"
 
 msgid "Bag"
-msgstr ""
+msgstr "Торбы і валізкі"
 
 msgid "Pet"
-msgstr ""
+msgstr "Тавары для жывёл"
 
 msgid "Funeral Directors"
-msgstr ""
+msgstr "Рытуальныя паслугі"
 
 msgid "Vending Machine"
-msgstr ""
+msgstr "Гандлёвы аўтамат"
 
 msgid "Vending products"
-msgstr ""
+msgstr "Тавар"
 
 msgid "animal_food"
-msgstr ""
+msgstr "ежа для жывёл"
 
 msgid "bicycle_tube"
-msgstr ""
+msgstr "веласіпедная шына"
 
 msgid "cigarettes"
-msgstr ""
+msgstr "цыгарэты"
 
 msgid "condoms"
-msgstr ""
+msgstr "прэзерватывы"
 
 msgid "drinks"
-msgstr ""
+msgstr "напоі"
 
 msgid "excrement_bags"
-msgstr ""
+msgstr "пакеты для экскрыментаў"
 
 msgid "food"
-msgstr ""
+msgstr "прадукты харчавання"
 
 msgid "news_papers"
-msgstr ""
+msgstr "газеты"
 
 msgid "parking_tickets"
-msgstr ""
+msgstr "талоны на паркоўку"
 
 msgid "photos"
-msgstr ""
+msgstr "фатаграфіі"
 
 msgid "public_transport_plans"
-msgstr ""
+msgstr "схемы грамадскага транспарта"
 
 msgid "public_transport_tickets"
-msgstr ""
+msgstr "квіткі на грамадскі транспарт"
 
 msgid "SIM-cards"
-msgstr ""
+msgstr "SIM-карты"
 
 msgid "stamps"
-msgstr ""
+msgstr "маркі"
 
 msgid "sweets"
-msgstr ""
+msgstr "прысмакі"
 
 msgid "tampons"
-msgstr ""
+msgstr "тампоны"
 
 msgid "telephone_vouchers"
-msgstr ""
+msgstr "тэлефонныя карты"
 
 msgid "toys"
-msgstr ""
+msgstr "цацкі"
 
 msgid "vouchers"
-msgstr ""
+msgstr "ваўчары"
 
 msgid "Payment Methods"
-msgstr ""
+msgstr "Спосабы аплаты"
 
 msgid "Debit cards"
-msgstr ""
+msgstr "Дэбетавыя карты"
 
 msgid "BankAxess"
-msgstr ""
+msgstr "BankAxess"
 
 msgid "Bancomat"
-msgstr ""
+msgstr "Bancomat"
 
 msgid "Girocard"
-msgstr ""
+msgstr "Girocard"
 
 msgid "Laser"
-msgstr ""
+msgstr "Laser"
 
 msgid "Maestro"
-msgstr ""
+msgstr "Maestro"
 
 msgid "Visa Debit"
-msgstr ""
+msgstr "Visa Debit"
 
 msgid "Visa Electron"
-msgstr ""
+msgstr "Visa Electron"
 
 msgid "Credit cards"
-msgstr ""
+msgstr "Крэдытныя карткі"
 
 msgid "American Express"
-msgstr ""
+msgstr "American Express"
 
 msgid "Diners Club"
-msgstr ""
+msgstr "Diners Club"
 
 msgid "Discover Card"
-msgstr ""
+msgstr "Discover Card"
 
 msgid "JCB"
-msgstr ""
+msgstr "JCB"
 
 msgid "Mastercard"
-msgstr ""
+msgstr "Mastercard"
 
 msgid "Visa"
-msgstr ""
+msgstr "Visa"
 
 msgid "Electronic purses and Charge cards"
-msgstr ""
+msgstr "Электронныя сродкі аплаты"
 
 msgid "Avant (fi)"
-msgstr ""
+msgstr "Avant (fi)"
 
 msgid "Cash (ch)"
-msgstr ""
+msgstr "Cash (ch)"
 
 msgid "Chipknip (nl)"
-msgstr ""
+msgstr "Chipknip (nl)"
 
 msgid "Geldkarte (de)"
-msgstr ""
+msgstr "Geldkarte (de)"
 
 msgid "Mep (pt)"
-msgstr ""
+msgstr "Mep (pt)"
 
 msgid "Minicash (lu)"
-msgstr ""
+msgstr "Minicash (lu)"
 
 msgid "Minipay (it)"
-msgstr ""
+msgstr "Minipay (it)"
 
 msgid "Mondero (ar)"
-msgstr ""
+msgstr "Mondero (ar)"
 
 msgid "Mondero 4b (es)"
-msgstr ""
+msgstr "Mondero 4b (es)"
 
 msgid "Moneo (fr)"
-msgstr ""
+msgstr "Moneo (fr)"
 
 msgid "Proton (be)"
-msgstr ""
+msgstr "Proton (be)"
 
 msgid "Quick (au)"
-msgstr ""
+msgstr "Quick (au)"
 
 msgid "Cryptocurrencies"
-msgstr ""
+msgstr "Крыптавалюты"
 
 msgid "Bitcoin"
-msgstr ""
+msgstr "Bitcoin"
 
 msgid "Dogecoin"
-msgstr ""
+msgstr "Dogecoin"
 
 msgid "Litecoin"
-msgstr ""
+msgstr "Litecoin"
 
 msgid "Geography"
-msgstr ""
+msgstr "Геаграфія"
 
 msgid "Boundaries"
-msgstr ""
+msgstr "Межы"
 
 msgid "Administrative"
-msgstr ""
+msgstr "Адміністрацыйная"
 
 msgid "Administrative level"
-msgstr ""
+msgstr "Адміністрацыйны ўзровень"
 
 msgid "Maritime"
-msgstr ""
+msgstr "Марская"
 
 msgid "Political"
-msgstr ""
+msgstr "Палітычная"
 
 msgid "Division"
-msgstr ""
+msgstr "Дзяленне"
 
 msgid "canton"
-msgstr ""
+msgstr "кантон"
 
 msgid "linguistic_community"
-msgstr ""
+msgstr "моўная супольнасць"
 
 msgid "ward"
-msgstr ""
+msgstr "адміністрацыйны раён (ward)"
 
 msgid "Postal Code"
-msgstr ""
+msgstr "Паштовы індэкс"
 
 msgid "National Park"
-msgstr ""
+msgstr "Нацыянальны парк"
 
 msgid "Protected Area"
-msgstr ""
+msgstr "Асоба ахоўваная прыродная тэрыторыя"
 
 msgid "Protect Class"
-msgstr ""
+msgstr "Клас аховы"
 
 msgid "Title or type of protection"
-msgstr ""
+msgstr "Назва ці тып абароны"
 
 msgid "Border type"
-msgstr ""
+msgstr "Тып мяжы"
 
 msgid "baseline"
-msgstr ""
+msgstr "базавая лінія"
 
 msgid "territorial"
-msgstr ""
+msgstr "тэрытарыяльныя воды"
 
 msgid "contiguous"
-msgstr ""
+msgstr "прылеглая зона"
 
 msgid "eez"
-msgstr ""
+msgstr "вылучная эканамічная зона"
 
 msgid "Places"
-msgstr ""
+msgstr "Месцы"
 
 msgid "Continent"
-msgstr ""
+msgstr "Кантынент"
 
 msgid "Country"
-msgstr ""
+msgstr "Краіна"
 
 msgctxt "place"
 msgid "State"
-msgstr ""
+msgstr "Штат"
 
 msgid "Region"
-msgstr ""
+msgstr "Вобласць"
 
 msgid "County"
-msgstr ""
+msgstr "Акруга"
 
 msgid "City"
-msgstr ""
+msgstr "Горад (больш 100 000)"
 
 msgid "Town"
-msgstr ""
+msgstr "Горад (да 100 000)"
 
 msgid "Village"
-msgstr ""
+msgstr "Сяло"
 
 msgid "Hamlet"
-msgstr ""
+msgstr "Вёска"
 
 msgid "Isolated Dwelling"
-msgstr ""
+msgstr "Ізаляванае жыллё"
 
 msgid "Suburb"
-msgstr ""
+msgstr "Прыгарад"
 
 msgid "Neighbourhood"
-msgstr ""
+msgstr "Мікрараён"
 
 msgid "Farm"
-msgstr ""
+msgstr "Ферма"
 
 msgid "A farm within a bigger settlement"
-msgstr ""
+msgstr "Ферма ў межах буйнейшага селішча"
 
 msgid "(please use isolated_dwelling for an isolated farm)"
 msgstr ""
+"(выкарыстоўвайце isolated_dwelling для фермы, размешчанай не ў селішчы)"
 
 msgid "Locality"
-msgstr ""
+msgstr "Мясцовасць"
 
 msgid "Peak"
-msgstr ""
+msgstr "Вяршыня"
 
 msgid "The top (summit) of a mountain or hill."
-msgstr ""
+msgstr "Вяршыня гары ці ўзгорка."
 
 msgid "Saddle"
-msgstr ""
+msgstr "Перавал"
 
 msgid "A saddle point between mountains or hills."
-msgstr ""
+msgstr "Перавал паміж горамі ці ўзгоркамі."
 
 msgid "Glacier"
-msgstr ""
+msgstr "Ляднік"
 
 msgid ""
 "A persistent body of dense ice that is constantly moving under its own "
 "weight."
-msgstr ""
+msgstr "Маса шчыльнага лёду, што пастаянна перамяшчаецца пад уласнай вагой."
 
 msgid "Volcano"
-msgstr ""
+msgstr "Вулкан"
 
 msgid "A volcano, either dormant, extinct or active."
-msgstr ""
+msgstr "Вулкан: спячы, патухлы ці дзейсны."
 
 msgid "Current Status"
-msgstr ""
+msgstr "Бягучы стан"
 
 msgid "dormant"
-msgstr ""
+msgstr "спячы"
 
 msgid "extinct"
-msgstr ""
+msgstr "патухлы"
 
 msgid "stratovolcano"
-msgstr ""
+msgstr "стратавулкан"
 
 msgid "shield"
-msgstr ""
+msgstr "шчыт"
 
 msgid "scoria"
-msgstr ""
+msgstr "шлакавы конус"
 
 msgid "Ridge"
-msgstr ""
+msgstr "Горны хрыбет"
 
 msgid "A mountain or hill ridge."
-msgstr ""
+msgstr "Горны хрыбет або града пагоркаў."
 
 msgid "Valley"
-msgstr ""
+msgstr "Даліна"
 
 msgid "A low area between hills."
-msgstr ""
+msgstr "Лінейна выцягнутая вобласць паніжанага рэльефу паміж узгоркамі"
 
 msgid "Cave Entrance"
-msgstr ""
+msgstr "Уваход у пячору"
 
 msgid "The entrance to a cave."
-msgstr ""
+msgstr "Уваход у пячору"
 
 msgid "Island"
-msgstr ""
+msgstr "Выспа"
 
 msgid "Islet"
-msgstr ""
+msgstr "Астравок"
 
 msgid "Nature"
-msgstr ""
+msgstr "Прырода"
 
 msgid "Tree"
-msgstr ""
+msgstr "Дрэва"
 
 msgid "A single tree."
-msgstr ""
+msgstr "Асобнае дрэва."
 
 msgid "Botanical Name"
-msgstr ""
+msgstr "Навуковая назва"
 
 msgid "Tree Row"
-msgstr ""
+msgstr "Лінія дрэў"
 
 msgid "A line of trees."
-msgstr ""
+msgstr "Шэраг дрэў."
 
 msgid "Wood"
-msgstr ""
+msgstr "Лес"
 
 msgid "Woodland where timber production does not dominate use."
-msgstr ""
+msgstr "Лес, асноўным прызначэннем якога не з’яўляецца нарыхтоўка драўніны."
 
 msgid "Forest"
-msgstr ""
+msgstr "Даглядаемы лес"
 
 msgid "Cutline"
-msgstr ""
+msgstr "Прасека"
 
 msgctxt "cutline"
 msgid "border"
-msgstr ""
+msgstr "мяжа"
 
 msgctxt "cutline"
 msgid "firebreak"
-msgstr ""
+msgstr "вогнеахоўная"
 
 msgctxt "cutline"
 msgid "hunting"
-msgstr ""
+msgstr "для палявання"
 
 msgctxt "cutline"
 msgid "loggingmachine"
-msgstr ""
+msgstr "для лесанарыхтоўчых машын"
 
 msgctxt "cutline"
 msgid "pipeline"
-msgstr ""
+msgstr "для трубаправода"
 
 msgctxt "cutline"
 msgid "piste"
-msgstr ""
+msgstr "лыжня"
 
 msgctxt "cutline"
 msgid "section"
-msgstr ""
+msgstr "мяжа лясных кварталаў"
 
 msgid "Grassland"
-msgstr ""
+msgstr "Луг"
 
 msgid ""
 "Where vegetation is dominated by grasses (Poaceae) and other herbaceous (non-"
 "woody) plants. Excludes cultivated areas and wetlands."
 msgstr ""
+"Месца, дзе ў расліннасці дамінуюць злакі (Poaceae) і іншыя травяністыя "
+"расліны. За выключэннем апрацоўваемых і забалочаных зямель."
 
 msgid "pampas"
-msgstr ""
+msgstr "пампасы"
 
 msgid "prairie"
-msgstr ""
+msgstr "прэрыя"
 
 msgid "puszta"
-msgstr ""
+msgstr "пуста (puszta)"
 
 msgid "savanna"
-msgstr ""
+msgstr "савана"
 
 msgid "steppe"
-msgstr ""
+msgstr "стэп"
 
 msgid "veld"
-msgstr ""
+msgstr "вельд"
 
 msgid "Nature Reserve"
-msgstr ""
+msgstr "Запаведнік"
 
 msgid "Scree"
-msgstr ""
+msgstr "Асыпак"
 
 msgid "An accumulation of loose rocks."
-msgstr ""
+msgstr "Навала абломкаў горных парод, што абсыпаюцца ў выніку выветрывання."
 
 msgid "Fell"
-msgstr ""
+msgstr "Фіельды"
 
 msgid ""
 "Bare upper lying uncultivated land principally covered with grass and often "
 "grazed."
 msgstr ""
+"Аголеная зямля, што не апрацоўваецца, месцамі пакрытая травой, часта "
+"прыдатнай для выпасу жывёлы."
 
 msgid "Scrub"
-msgstr ""
+msgstr "Хмызняк"
 
 msgid ""
 "Bare lower lying uncultivated land with bushes but little or no tree cover."
-msgstr ""
+msgstr "Зямля, што не апрацоўваецца, зарослая хмызняком. Дрэў няма або мала."
 
 msgid "Heath"
-msgstr ""
+msgstr "Пустка (верас)"
 
 msgid ""
 "Bare lower lying uncultivated land with a shrubland habitat found mainly on "
 "free-draining infertile, acidic soils, and is characterised by open, low-"
 "growing woody vegetation."
 msgstr ""
+"Зямля, што не апрацоўваецца, з нізкарослай драўняна-хмызняковай расліннасцю, "
+"характэрнай для неўрадлівых, закісленых глеб."
 
 msgid "Sand"
-msgstr ""
+msgstr "Пясок"
 
 msgid "Large area covered with sand."
-msgstr ""
+msgstr "Вялікая вобласць, пакрытая пяском."
 
 msgid "Bare Rock"
-msgstr ""
+msgstr "Голыя скалы"
 
 msgid ""
 "For areas of solid visible rock that is sparsely vegetated or not vegetated "
 "at all."
 msgstr ""
+"Для абласцей, дзе спрэс аголена скальная карэнная парода, з рэдкай або "
+"адсутнай расліннасцю."
 
 msgid "Rock"
-msgstr ""
+msgstr "Скала"
 
 msgid ""
 "A notable rock or group of rocks, with at least one of them firmly attached "
 "to the underlying bedrock."
 msgstr ""
+"Характэрная скала або група вялікіх камянёў, з якіх як мінімум адзін трывала "
+"звязаны з ніжэйлеглай карэннай пародай."
 
 msgid "Tourism attraction"
-msgstr ""
+msgstr "Турыстычная выбітнасць"
 
 msgid "Stone"
-msgstr ""
+msgstr "Камень"
 
 msgid ""
 "A single notable free-standing rock, which may differ from the composition "
 "of the terrain it lies in."
 msgstr ""
+"Характэрны асобна стаячы камень, які можа вылучацца на фоне атачальнага "
+"ландшафту."
 
 msgid "Land use"
-msgstr ""
+msgstr "Землекарыстанне"
 
 msgid "Farmyard"
-msgstr ""
+msgstr "Двор фермы"
 
 msgid "Farmland"
-msgstr ""
+msgstr "Сельскагаспадарчыя ўгоддзі"
 
 msgid "Meadow"
-msgstr ""
+msgstr "Сенажаць"
 
 msgid "Orchard"
-msgstr ""
+msgstr "Фруктовы сад"
 
 msgid "Vineyard"
-msgstr ""
+msgstr "Вінаграднікі"
 
 msgid "Greenhouse Horticulture"
-msgstr ""
+msgstr "Парніковае садоўніцтва"
 
 msgid "Plant Nursery"
-msgstr ""
+msgstr "Гадавальнік раслін"
 
 msgid "Allotments"
-msgstr ""
+msgstr "Агародныя ўчасткі"
 
 msgid "Garden"
-msgstr ""
+msgstr "Сады"
 
 msgid "Grass"
-msgstr ""
+msgstr "Газон"
 
 msgid "Village Green"
-msgstr ""
+msgstr "Пляцоўка для свят"
 
 msgid "Common"
-msgstr ""
+msgstr "Грамадскія землі"
 
 msgid "Park"
-msgstr ""
+msgstr "Парк"
 
 msgid "Recreation Ground"
-msgstr ""
+msgstr "Гульнявая пляцоўка"
 
 msgid "Residential Area"
-msgstr ""
+msgstr "Жылая зона"
 
 msgid "Graveyard"
-msgstr ""
+msgstr "Пахаванні"
 
 msgid "Cemetery"
-msgstr ""
+msgstr "Могілкі"
 
 msgid "Religious"
-msgstr ""
+msgstr "Рэлігія"
 
 msgid "Retail"
-msgstr ""
+msgstr "Раздробны гандаль"
 
 msgid "Commercial"
-msgstr ""
+msgstr "Дзелавыя раёны"
 
 msgid "Industrial"
-msgstr ""
+msgstr "Прамысловая тэрыторыя"
 
 msgid "Garages"
-msgstr ""
+msgstr "Гаражы"
 
 msgid "Railway Land"
-msgstr ""
+msgstr "Землі чыгункі"
 
 msgid "Military"
-msgstr ""
+msgstr "Ваенная зона"
 
 msgid "Construction Area"
-msgstr ""
+msgstr "Будаўнічая пляцоўка"
 
 msgid "Brownfield"
-msgstr ""
+msgstr "Расчыстка забудовы"
 
 msgid "Greenfield"
-msgstr ""
+msgstr "Зона пад забудову"
 
 msgid "Landfill"
-msgstr ""
+msgstr "Звалка"
 
 msgid "Quarry"
-msgstr ""
+msgstr "Кар’ер"
 
 msgid "Annotation"
-msgstr ""
+msgstr "Анатацыя"
 
 msgid "Alternative name"
-msgstr ""
+msgstr "Альтэрнатыўная назва"
 
 msgid "Historical name"
-msgstr ""
+msgstr "Гістарычная назва"
 
 msgid "Local name"
-msgstr ""
+msgstr "Мясцовая назва"
 
 msgid "Regional name"
-msgstr ""
+msgstr "Рэгіянальная назва"
 
 msgid "National name"
-msgstr ""
+msgstr "Нацыянальная назва"
 
 msgid "International name"
-msgstr ""
+msgstr "Міжнародная назва"
 
 msgid "Official name"
-msgstr ""
+msgstr "Афіцыйная назва"
 
 msgid "Common name abbreviation"
-msgstr ""
+msgstr "Абрэвіятура"
 
 msgid "House number"
-msgstr ""
+msgstr "Нумар хаты"
 
 msgid "Street name"
-msgstr ""
+msgstr "Вуліца"
 
 msgid "Place name"
-msgstr ""
+msgstr "Назва месца"
 
 msgid "City name"
-msgstr ""
+msgstr "Горад"
 
 msgid "Country code"
-msgstr ""
+msgstr "Код краіны"
 
 msgid "House name"
-msgstr ""
+msgstr "Назва хаты"
 
 msgid "Subdistrict"
-msgstr ""
+msgstr "Падраён"
 
 msgid "District"
-msgstr ""
+msgstr "Раён"
 
 msgid "Province"
-msgstr ""
+msgstr "Край/вобласць"
 
 msgctxt "addr:"
 msgid "State"
-msgstr ""
+msgstr "Штат"
 
 msgid "AL"
-msgstr ""
+msgstr "AL - Алабама"
 
 msgid "AK"
-msgstr ""
+msgstr "AK - Аляска"
 
 msgid "AZ"
-msgstr ""
+msgstr "AZ - Арызона"
 
 msgid "AR"
-msgstr ""
+msgstr "AR - Арканзас"
 
 msgid "CA"
-msgstr ""
+msgstr "CA - Каліфорнія"
 
 msgid "CO"
-msgstr ""
+msgstr "CO - Каларада"
 
 msgid "CT"
-msgstr ""
+msgstr "CT"
 
 msgid "DE"
-msgstr ""
+msgstr "DE - Дэлавэр"
 
 msgid "FL"
-msgstr ""
+msgstr "FL - Фларыда"
 
 msgid "GA"
-msgstr ""
+msgstr "GA - Джорджыя"
 
 msgid "HI"
-msgstr ""
+msgstr "HI - Гаваі"
 
 msgid "IL"
-msgstr ""
+msgstr "IL - Ілінойс"
 
 msgid "IN"
-msgstr ""
+msgstr "IN"
 
 msgid "IA"
-msgstr ""
+msgstr "IA - Аёва"
 
 msgid "KS"
-msgstr ""
+msgstr "KS - Канзас"
 
 msgid "KY"
-msgstr ""
+msgstr "KY"
 
 msgid "LA"
-msgstr ""
+msgstr "LA - Луізіяна"
 
 msgid "ME"
-msgstr ""
+msgstr "ME - Мэн"
 
 msgid "MD"
-msgstr ""
+msgstr "MD - Мэрыленд"
 
 msgid "MA"
-msgstr ""
+msgstr "MA - Масачусец"
 
 msgid "MI"
-msgstr ""
+msgstr "MI - Мічыган"
 
 msgid "MN"
-msgstr ""
+msgstr "MN - Мінесота"
 
 msgid "MS"
-msgstr ""
+msgstr "MS - Місісіпі"
 
 msgid "MO"
-msgstr ""
+msgstr "MO - Місуры"
 
 msgid "MT"
-msgstr ""
+msgstr "MT"
 
 msgid "NE"
-msgstr ""
+msgstr "NE - Небраска"
 
 msgid "NV"
-msgstr ""
+msgstr "NV - Невада"
 
 msgid "NH"
-msgstr ""
+msgstr "NH"
 
 msgid "NJ"
-msgstr ""
+msgstr "NJ - Нью-Джэрсі"
 
 msgid "NM"
-msgstr ""
+msgstr "NM - Нью-Мексіко"
 
 msgid "NY"
-msgstr ""
+msgstr "NY - Нью-Ёрк"
 
 msgid "NC"
-msgstr ""
+msgstr "NC - Паўночная Караліна"
 
 msgid "ND"
-msgstr ""
+msgstr "ND - Паўночная Дакота"
 
 msgid "OH"
-msgstr ""
+msgstr "OH - Агаё"
 
 msgid "OR"
-msgstr ""
+msgstr "OR - Арэгон"
 
 msgid "PA"
-msgstr ""
+msgstr "PA - Пенсільванія"
 
 msgid "RI"
-msgstr ""
+msgstr "RI - Род-Айленд"
 
 msgid "SC"
-msgstr ""
+msgstr "SC - Паўднёвая Караліна"
 
 msgid "SD"
-msgstr ""
+msgstr "SD - Паўднёвая Дакота"
 
 msgid "TN"
-msgstr ""
+msgstr "TN"
 
 msgid "TX"
-msgstr ""
+msgstr "TX - Тэхас"
 
 msgid "UT"
-msgstr ""
+msgstr "UT - Юта"
 
 msgid "VT"
-msgstr ""
+msgstr "VT"
 
 msgid "VA"
-msgstr ""
+msgstr "VA - Вірджынія"
 
 msgid "WA"
-msgstr ""
+msgstr "WA - Вашынгтон"
 
 msgid "WV"
-msgstr ""
+msgstr "WV - Заходняя Вірджынія"
 
 msgid "WI"
-msgstr ""
+msgstr "WI - Вісконсін"
 
 msgid "DC"
-msgstr ""
+msgstr "DC - акруга Калумбія"
 
 msgid "AS"
-msgstr ""
+msgstr "AS - Амерыканскае Самоа"
 
 msgid "GU"
-msgstr ""
+msgstr "GU - Гуам"
 
 msgid "MP"
-msgstr ""
+msgstr "MP"
 
 msgid "PR"
-msgstr ""
+msgstr "PR - Пуэрта-Рыко"
 
 msgid "UM"
-msgstr ""
+msgstr "UM - Вонкавыя малыя выспы"
 
 msgid "VI"
-msgstr ""
+msgstr "VI - Амерыканскія Віргінскія выспы"
 
 msgid "Address Interpolation"
-msgstr ""
+msgstr "Інтэрпаляцыя адрасоў"
 
 msgid "Numbering scheme"
-msgstr ""
+msgstr "Схема нумарацыі"
 
 msgid "odd"
-msgstr ""
+msgstr "няцотныя"
 
 msgid "even"
-msgstr ""
+msgstr "цотныя"
 
 msgid "alphabetic"
-msgstr ""
+msgstr "алфавітны"
 
 msgid "Accuracy"
-msgstr ""
+msgstr "Дакладнасць"
 
 msgid "actual"
-msgstr ""
+msgstr "фактычная"
 
 msgid "estimate"
-msgstr ""
+msgstr "прыблізная"
 
 msgid "potential"
-msgstr ""
+msgstr "магчымая"
 
 msgid "Contact (Common Schema)"
-msgstr ""
-
-msgid "Fax Number"
-msgstr ""
+msgstr "Кантактная інфармацыя (агульная схема)"
 
 msgid "Email Address"
-msgstr ""
+msgstr "Адрас электроннай пошты"
+
+msgid "Fax Number"
+msgstr "Нумар факса"
 
 msgid "Image"
-msgstr ""
+msgstr "Малюнак"
 
 msgid "Contact (Schema with ''contact:*'' Prefix)"
-msgstr ""
+msgstr "Кантактная інфармацыя (схема з прэфіксам ''contact:*'')"
 
 msgctxt "description=*"
 msgid "A short text with additional information."
-msgstr ""
+msgstr "Кароткі тэкст з дадатковай інфармацыяй."
 
 msgctxt "description=*"
 msgid ""
 "It might be viewable to the end user (perhaps using a search system or a map "
 "with pop-ups)."
 msgstr ""
+"Ён можа быць бачны карыстальніку карты (магчыма, з дапамогай пошукавай "
+"сістэмы ці карты з усплывальнымі каментарамі)."
 
 msgctxt "note=*, fixme=*, description=*"
 msgid "Similar but different tags:"
-msgstr ""
+msgstr "Іншыя падобныя тэгі:"
 
 msgctxt "the tag note=*"
 msgid "Note"
-msgstr ""
+msgstr "Нататка"
 
 msgctxt "note=*"
 msgid "An important hint for other mappers (not for the end user)."
-msgstr ""
+msgstr "Важная нататка для іншых картографаў (не для карыстальнікаў карты)."
 
 msgid "Fixme"
-msgstr ""
+msgstr "Fixme (трэба выправіць)"
 
 msgctxt "fixme=*"
 msgid ""
 "A hint for other mappers (not for the end user), that an object needs an "
 "improvement."
 msgstr ""
+"Пазнака іншым картографам (не карыстальнікам карты) пра тое, што аб’ект мае "
+"патрэбу ў выпраўленні."
 
 msgid "outer segment"
-msgstr ""
+msgstr "вонкавы сегмент"
 
 msgid "inner segment"
-msgstr ""
+msgstr "унутраны сегмент"
 
 msgid "Boundary"
-msgstr ""
+msgstr "Мяжа"
 
 msgid "Boundary type"
-msgstr ""
+msgstr "Тып мяжы"
 
 msgid "administrative"
-msgstr ""
+msgstr "адміністрацыйная"
 
 msgid "maritime"
-msgstr ""
+msgstr "марская"
 
 msgid "national_park"
-msgstr ""
+msgstr "нацыянальны парк"
 
 msgid "political"
-msgstr ""
+msgstr "палітычная"
 
 msgid "postal_code"
-msgstr ""
+msgstr "паштовы індэкс"
 
 msgid "protected_area"
-msgstr ""
+msgstr "асоба ахоўваная тэрыторыя"
 
 msgid "Sub area"
-msgstr ""
+msgstr "Падпарадкаваная тэрыторыя"
 
 msgid "Administration centre"
-msgstr ""
+msgstr "Адміністрацыйны цэнтр"
 
 msgid "Label point"
-msgstr ""
+msgstr "Кропка подпісу"
 
 msgid "Site"
-msgstr ""
+msgstr "Месца"
 
 msgid "Site name"
-msgstr ""
+msgstr "Назва месца"
 
 msgid "where to place the label"
-msgstr ""
+msgstr "месцаванне пазнакі"
 
 msgid "perimeter of the site"
-msgstr ""
+msgstr "перыметр месца"
 
 msgid "entrances to the site, on the perimeter"
-msgstr ""
+msgstr "уваходы, на перыметры"
 
 msgid "members of site"
-msgstr ""
+msgstr "удзельнікі месца"
 
 msgid "Turn Restriction"
-msgstr ""
+msgstr "Абмежаванне павароту"
 
 msgid "Restriction"
-msgstr ""
+msgstr "Абмежаванне"
 
 msgid "no_left_turn"
-msgstr ""
+msgstr "паварот налева забаронены"
 
 msgid "no_right_turn"
-msgstr ""
+msgstr "паварот направа забаронены"
 
 msgid "no_straight_on"
-msgstr ""
+msgstr "праезд забаронены"
 
 msgid "no_u_turn"
-msgstr ""
+msgstr "разварот забаронены"
 
 msgid "only_right_turn"
-msgstr ""
+msgstr "толькі направа"
 
 msgid "only_left_turn"
-msgstr ""
+msgstr "толькі налева"
 
 msgid "only_straight_on"
-msgstr ""
+msgstr "толькі прама"
 
 msgid "from way"
-msgstr ""
+msgstr "з лініі"
 
 msgid "via node or ways"
-msgstr ""
+msgstr "праз кропку ці лінію"
 
 msgid "to way"
-msgstr ""
+msgstr "на лінію"
 
 msgid "Enforcement"
-msgstr ""
+msgstr "Абмежаванне"
 
 msgid "Type of enforcement"
-msgstr ""
+msgstr "Тып абмежавання"
 
 msgid "maxheight"
-msgstr ""
+msgstr "максімальная вышыня"
 
 msgid "maxweight"
-msgstr ""
+msgstr "максімальная вага"
 
 msgid "maxspeed"
-msgstr ""
+msgstr "максімальная хуткасць"
 
 msgid "mindistance"
-msgstr ""
+msgstr "мінімальная дыстанцыя"
 
 msgid "check"
-msgstr ""
+msgstr "пункт кантролю"
 
 msgid "Max. height (meters, only if enforcement=maxheight)"
-msgstr ""
+msgstr "Макс. вышыня (метры, толькі калі enforcement=maxheight)"
 
 msgid "Max. weight (tonnes, only if enforcement=maxweight)"
-msgstr ""
+msgstr "Макс. маса (тоны, толькі калі enforcement=maxweight)"
 
 msgid "Max. speed (km/h, only if enforcement=maxspeed)"
-msgstr ""
+msgstr "Макс. хуткасць (км/г, толькі калі enforcement=maxspeed)"
 
 msgid "location of enforcement device"
-msgstr ""
+msgstr "размяшчэнне абмяжоўваючай прылады"
 
 msgid "node on way where enforcement starts"
-msgstr ""
+msgstr "кропка пачатку абмежавання на лініі"
 
 msgid "where enforcement ends"
-msgstr ""
+msgstr "канец абмежавання"
 
 msgid "traffic light or barrier that stops you"
-msgstr ""
+msgstr "святлафор ці перашкода, якія спыняюць Вас"
 
 msgid "Routes"
-msgstr ""
+msgstr "Маршруты"
 
 msgid "Bicycle Route"
-msgstr ""
+msgstr "Веласіпедны маршрут"
 
 msgid "icn"
-msgstr ""
+msgstr "міжнародная"
 
 msgid "ncn"
-msgstr ""
+msgstr "нацыянальная"
 
 msgid "rcn"
-msgstr ""
+msgstr "рэгіянальная"
 
 msgid "lcn"
-msgstr ""
+msgstr "мясцовая"
 
 msgid "Mountain Biking Route"
-msgstr ""
+msgstr "Маршрут горных ровараў"
 
 msgid "Hiking Route"
-msgstr ""
+msgstr "Пешы турыстычны маршрут"
 
 msgid "iwn"
-msgstr ""
+msgstr "міжнародная"
 
 msgid "nwn"
-msgstr ""
+msgstr "нацыянальная"
 
 msgid "rwn"
-msgstr ""
+msgstr "рэгіянальная"
 
 msgid "lwn"
-msgstr ""
+msgstr "мясцовая"
 
 msgid "infrastructure"
-msgstr ""
+msgstr "інфраструктура"
 
 msgid "natural"
-msgstr ""
+msgstr "прыродны"
 
 msgid "Piste Route"
-msgstr ""
+msgstr "Гарналыжны маршрут"
 
 msgid "link segment"
-msgstr ""
+msgstr "злучальны сегмент"
 
 msgid "shortcut segment"
-msgstr ""
+msgstr "сегмент найкароткага шляху"
 
 msgid "variant segment"
-msgstr ""
+msgstr "сегмент варыянту шляху"
 
 msgid "entry points"
-msgstr ""
+msgstr "стартавыя пункты"
 
 msgid "Ski Route"
-msgstr ""
+msgstr "Лыжны маршрут"
 
 msgid "alpine"
-msgstr ""
+msgstr "горныя лыжы"
 
 msgid "Detour Route"
-msgstr ""
+msgstr "Аб’язны маршрут"
 
 msgid "Destination"
-msgstr ""
+msgstr "Месца прызначэння"
 
 msgid "Ref of the way this is a detour to"
-msgstr ""
+msgstr "Аб’ездам якой дарогі з’яўляецца"
 
 msgid "fork node for alternative routes"
-msgstr ""
+msgstr "кропка адгалінавання альтэрнатыўных маршрутаў"
 
 msgid "Power Route"
-msgstr ""
+msgstr "Маршрут лініі электраперадачы"
 
 msgid "Railway Route"
-msgstr ""
+msgstr "Чыгуначны маршрут"
 
 msgid "Road Route"
-msgstr ""
+msgstr "Аўтамабільны маршрут"
 
 msgid "Route Network"
-msgstr ""
+msgstr "Сетка маршрутаў"
 
 msgid "member"
-msgstr ""
+msgstr "удзельнік"
 
 msgid "Associated Street"
-msgstr ""
+msgstr "Асацыяваная вуліца"
 
 msgid "house"
-msgstr ""
+msgstr "жылы дом"
 
 msgid "Street"
-msgstr ""
+msgstr "Вуліца"
 
 msgid "ways being part of street"
-msgstr ""
+msgstr "лініі - часткі вуліцы"
 
 msgid "addresses belonging to the street"
-msgstr ""
+msgstr "адрасы, якія належаць вуліцы"
 
 msgid "houses belonging to the street"
-msgstr ""
+msgstr "будынкі па вуліцы"
 
 msgid "anything related to the street"
-msgstr ""
+msgstr "штосьці, злучанае з вуліцай"
 
 msgid "Destination Sign"
-msgstr ""
+msgstr "Паказальнік кірункаў"
 
 msgid "Destination written on sign (w/o distance)"
-msgstr ""
+msgstr "Кірунак, паказаны на знаку (без адлегласці)"
 
 msgid "Time (hh:mm, for trekking)"
-msgstr ""
+msgstr "Час (гг:хх, для адсочвання)"
 
 msgid "Colour of background"
-msgstr ""
+msgstr "Колер фону"
 
 msgid "Colour of text"
-msgstr ""
+msgstr "Колер тэксту"
 
 msgid "Colour of border/arrow"
-msgstr ""
+msgstr "Колер рамкі /стрэлкі"
 
 msgid "last way before junction"
-msgstr ""
+msgstr "апошняя лінія перад скрыжаваннем"
 
 msgid "node of the intersection"
-msgstr ""
+msgstr "кропка скрыжавання"
 
 msgid "first way after junction"
-msgstr ""
+msgstr "першая лінія пасля скрыжавання"
 
 msgid "position of sign"
-msgstr ""
+msgstr "пазіцыя знака"
 
 msgid "Waterway"
-msgstr ""
+msgstr "Водны шлях"
 
 msgid "Subtype of waterway (largest one of members)"
-msgstr ""
+msgstr "Падтып воднага шляху (найбуйны з удзельнікаў)"
 
 msgid "stream"
-msgstr ""
+msgstr "струмень"
 
 msgid "drain"
-msgstr ""
+msgstr "дрэнажная канава"
 
 msgid "ditch"
-msgstr ""
+msgstr "канава"
 
 msgid "Name of river/lake/sea/ocean it runs into"
-msgstr ""
+msgstr "Назва ракі/азёры/мардуючы/акіяна ў які ўпадае"
 
 msgid "Reference Sandre (FR)"
-msgstr ""
+msgstr "Reference Sandre (FR)"
 
 msgid "Reference FGKZ (DE)"
-msgstr ""
+msgstr "Reference FGKZ (DE)"
 
 msgid "Reference REGINE (NO)"
-msgstr ""
+msgstr "Reference REGINE (NO)"
 
 msgid "Reference GNIS (USA)"
-msgstr ""
+msgstr "Reference GNIS (USA)"
 
 msgid "Reference GNBC (CA)"
-msgstr ""
+msgstr "Reference GNBC (CA)"
 
 msgid "waterways (no riverbank)"
-msgstr ""
+msgstr "водныя шляхі (не берагі)"
 
 msgid "branch waterways (no riverbank)"
-msgstr ""
+msgstr "адгалінаванні водных шляхоў (не берагі)"
 
 msgid "spring of waterway"
-msgstr ""
+msgstr "выток воднага шляху"
 
 msgid "Length (meters)"
-msgstr ""
+msgstr "Даўжыня (метры)"
 
 msgid "ways supported by (on top of) the bridge"
-msgstr ""
+msgstr "лініі, якія праходзяць (зверху) па мосце"
 
 msgid "ways passing under the bridge"
-msgstr ""
+msgstr "лініі, якія праходзяць пад мостам"
 
 msgid "way forming the outline footprint"
-msgstr ""
+msgstr "лінія, якая фармуе контур"
 
 msgid "edge ways parallel to ''across''"
-msgstr ""
+msgstr "краявыя лініі, паралельныя ''across''"
 
 msgid "ways passing through the tunnel"
-msgstr ""
+msgstr "лініі, якія праходзяць праз тунэль"
 
 msgid "edge ways parallel to ''through''"
-msgstr ""
+msgstr "краявыя лініі, паралельныя ''through''"
 
 msgid "Tunnel Start"
-msgstr ""
+msgstr "Пачатак тунэля"
 
 msgid "Village/City"
-msgstr ""
+msgstr "Горад/Сяло"
 
 msgid "One Way"
-msgstr ""
+msgstr "Аднабаковая"
 
 msgid "Fuel Station"
-msgstr ""
+msgstr "Запраўная станцыя"
 
 msgid "Shopping"
-msgstr ""
+msgstr "Крама"
 
 msgid "WC"
-msgstr ""
+msgstr "Туалет"
 
 msgid "Camping"
-msgstr ""
+msgstr "Кемпінг"
 
 msgid "Test"
-msgstr ""
+msgstr "Тэст"
 
 msgid "Decreasing house numbers in addresses interpolation"
-msgstr ""
+msgstr "Нумары хат па змяншэнні ў інтэрпаляцыі адрасоў"
 
 msgid "{0} without {1}"
-msgstr ""
+msgstr "{0} без {1}"
 
 msgid "{0} without {1} or {2}"
-msgstr ""
+msgstr "{0} без {1} ці {2}"
 
 msgid "{0} without {1}, {2} or {3}"
-msgstr ""
+msgstr "{0} без {1}, {2} ці {3}"
 
 msgid "{0} together with {1}"
-msgstr ""
+msgstr "{0} разам з {1}"
 
 msgid "incomplete object: only {0}"
-msgstr ""
+msgstr "няпоўны аб`ект: толькі {0}"
 
 msgid "incomplete object: only {0} and {1}"
-msgstr ""
+msgstr "няпоўны аб`ект: толькі {0} і {1}"
 
 msgid "{0} together with addr:*"
-msgstr ""
+msgstr "{0} сумесна з addr:*"
+
+msgid "{0} together with {1} and conflicting values"
+msgstr "{0} разам з {1} і супярэчлівымі значэннямі"
 
 msgid "{0} on suspicious object"
-msgstr ""
+msgstr "{0} на падазроным аб’екце"
 
 msgid "restaurant without name"
-msgstr ""
+msgstr "тэг restaurant без тэга name"
 
 msgid "{0} used with {1}"
-msgstr ""
+msgstr "{0} скарыстаны з {1}"
 
 msgid "natural water used for swimming pool"
-msgstr ""
+msgstr "тэг natural water дададзены для плавальнага басейна"
 
 msgid "sport without physical feature"
-msgstr ""
+msgstr "тэг sport без фізічнага аб’екта"
 
 msgid "{0} should be on the node where {1} and {2} intersect"
-msgstr ""
+msgstr "{0} павінен быць кропкай скрыжавання {1} і {2}"
 
 msgid "alternative name without {0}"
-msgstr ""
+msgstr "альтэрнатыўная назва без {0}"
 
 msgid "incomplete usage of {0} on a way without {1}"
-msgstr ""
+msgstr "няпоўнае выкарыстанне {0} для лініі без {1}"
+
+msgid "Same value of {0} and {1}"
+msgstr "Аднолькавае значэнне {0} і {1}"
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr "Аднолькавае значэнне {0}, {1} і {2}"
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr "{0} і {1} разам з {2} і значэннямі, якія канфліктуюць"
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr "Падазронае спалучэнне тэгаў: {0} і {1}"
 
 msgid "{0}={1} is deprecated"
-msgstr ""
+msgstr "{0}={1} выкарыстоўваць не рэкамендуецца"
 
 msgid "{0} is deprecated"
-msgstr ""
+msgstr "{0} састарэлы"
 
 msgid "''{0}'' is meaningless, use more specific tags, e.g. ''{1}''"
 msgstr ""
+"''{0}'' невыразны, выкарыстоўвайце больш характэрныя тэгі, напрыклад, ''{1}''"
 
 msgid ""
 "''{0}'' does not specify the official mode of transportation, use ''{1}'' "
 "for example"
 msgstr ""
+"''{0}'' не вызначае афіцыйны тып транспарта, выкарыстоўвайце, напрыклад, "
+"''{1}''"
 
 msgid ""
 "{0}={1} is unspecific. Instead of ''{1}'' please give more information about "
 "what exactly should be fixed."
 msgstr ""
+"{0}={1} — сапраўды не вызначаны тэг. Замест ''{1}'' апішыце падрабязней тое, "
+"што павінна быць выпраўлена."
 
 msgid "{0}={1} is deprecated. Please use instead a multipolygon."
 msgstr ""
+"{0}={1} з’яўляецца састарэлым. Калі ласка, выкарыстоўвайце замест "
+"мультыпалігон."
 
 msgid ""
 "{0} is deprecated. Please specify interval by using opening_hours syntax"
 msgstr ""
+"{0} з’яўляецца састарэлым. Калі ласка, указвайце час працы, выкарыстоўваючы "
+"сінтаксіс opening_hours"
 
 msgid ""
 "{0} is deprecated. Please delete this object and use a private layer instead"
 msgstr ""
+"{0} выкарыстоўваць не рэкамендуецца. Выдаліце гэты аб’ект і выкарыстоўвайце "
+"замест гэтага асабісты пласт"
 
 msgid "{0}={1} is unspecific. Please replace ''{1}'' by a specific value."
 msgstr ""
+"{0}={1} з’яўляецца неспецыфічным. Калі ласка, падайце замест ''{1}'' больш "
+"канкрэтнае значэнне."
 
 msgid "{0} should be replaced with {1}"
-msgstr ""
+msgstr "{0} варта замяніць на {1}"
 
 msgid "{0} = {1}; remove {0}"
-msgstr ""
+msgstr "{0} = {1}; выдаліце {0}"
 
 msgid ""
 "{0}={1} is unspecific. Please replace ''{1}'' by ''left'', ''right'' or "
 "''both''."
 msgstr ""
+"{0}={1} не вызначана. Калі ласка, замяніце ''{1}'' на ''left'', ''right'' ці "
+"''both''"
 
 msgid "Unspecific tag {0}"
-msgstr ""
+msgstr "Незразумелы тэг {0}"
 
 msgid "Definition of {0} is unclear"
-msgstr ""
+msgstr "Недакладнае вызначэнне {0}"
 
 msgid ""
 "{0} is not recommended. Use the Reverse Ways function from the Tools menu."
 msgstr ""
+"{0} не рэкамендуецца. Выкарыстоўвайце функцыю «Змяніць кірунак лініі» з меню "
+"«Прылады»."
 
 msgid "key with uncommon character"
-msgstr ""
+msgstr "ключ з незвычайным знакам"
 
 msgid "uncommon short key"
-msgstr ""
+msgstr "незвычайна кароткі ключ"
+
+msgid "{0} is inaccurate"
+msgstr "{0} — недакладнае значэнне"
 
 msgid "{0} on a node. Should be used on a way."
-msgstr ""
+msgstr "{0} на кропцы. Павінен выкарыстоўвацца на лініі."
 
 msgid "{0} on a node. Should be drawn as an area."
-msgstr ""
+msgstr "{0} на кропцы. Павінен быць намаляваны як вобласць."
 
 msgid "{0}=* on a node. Should be used in a relation"
-msgstr ""
+msgstr "{0}=* на кропцы. Варта выкарыстоўваць у адносінах"
 
 msgid "{0} on a way. Should be used on a node."
-msgstr ""
+msgstr "{0} на лініі. Варта выкарыстоўваць на кропцы."
 
 msgid "{0} on a way. Should be used in a relation"
-msgstr ""
+msgstr "{0} на лініі. Павінен выкарыстоўвацца ў адносінах"
 
 msgid "{0} on a node"
-msgstr ""
+msgstr "{0} на кропцы"
 
 msgid "Building inside building"
-msgstr ""
+msgstr "Будынак усярэдзіне іншага будынка"
 
 msgid "Overlapping Water Areas"
-msgstr ""
+msgstr "Скрыжаванне/накладанне вадаёмаў"
 
 msgid "Overlapping Areas"
-msgstr ""
+msgstr "Палігоны, якія перакрываюцца"
 
 msgid "{0} inside {1}"
-msgstr ""
+msgstr "{0} усярэдзіне {1}"
 
 msgid "Overlapping Identical Natural Areas"
-msgstr ""
+msgstr "Перакрыцце ідэнтычных прыродных участкаў"
 
 msgid "Overlapping Identical Landuses"
-msgstr ""
+msgstr "Перакрыцце ідэнтычных участкаў землекарыстання"
 
 msgid "{0} must be connected to a way"
-msgstr ""
+msgstr "{0} павінен быць злучаны з лініяй"
 
 msgid "node connects waterway and bridge"
-msgstr ""
+msgstr "кропка злучае водны шлях і мост"
 
 msgid "abbreviated street name"
-msgstr ""
+msgstr "скарочанае пазначэнне вуліцы"
 
 msgid "wrong highway tag on a node"
-msgstr ""
+msgstr "няправільны тэг highway на кропцы"
 
 msgid "wrong crossing tag on a way"
-msgstr ""
+msgstr "памылкова пазначаны тэг crossing на лініі"
 
 msgid "Unnamed unclassified highway"
-msgstr ""
+msgstr "Безназоўная дарога з тэгам unclassified"
 
 msgid "highway without a reference"
-msgstr ""
+msgstr "тэг highway без пазначэння (ref)"
 
 msgid "temporary highway type"
-msgstr ""
+msgstr "часовы тып дарогі"
 
 msgid "street name contains ss"
-msgstr ""
+msgstr "назва вуліцы ўтрымоўвае ss"
 
 msgid ""
 "Value of ''{0}'' should either be ''{1}'' or ''{2}''. For sidewalks use "
 "''{3}'' instead."
 msgstr ""
+"Значэнне ''{0}'' павінна быць ''{1}'' ці ''{2}''. Для тратуараў "
+"выкарыстоўвайце ''{3}''."
 
 msgid "{0} with multiple values"
-msgstr ""
+msgstr "{0} з некалькімі значэннямі"
 
 msgid "empty value in semicolon-separated ''{0}''"
-msgstr ""
+msgstr "пустое значэнне ў радку з падзельнікамі (;) ''{0}''"
 
 msgid "numerical key"
-msgstr ""
+msgstr "лікавы ключ"
 
 msgid "layer tag with + sign"
-msgstr ""
+msgstr "тэг layer са знакам +"
 
 msgid "layer should be between -5 and 5"
-msgstr ""
+msgstr "узровень павінен быць ад -5 да 5"
 
 msgid "level should be numbers with optional .5 increments"
-msgstr ""
+msgstr "level павінен быць лікам з прырашчэннем 0.5"
 
 msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
+"{0}: па змаўчанні ў метрах; падзельнік - кропка; адзінкі вымярэння "
+"адлучаюцца прабелам"
+
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+"{0}: тыпова ў тонах; падзельнік - кропка; калі трэба, адзінкі вымярэння "
+"адлучаюцца прабелам"
 
 msgid "unusual {0} format"
+msgstr "незвычайны фармат {0}"
+
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
 msgstr ""
+"{0}: тыпова ў кіламетрах; падзельнік - кропка; калі трэба, адзінкі вымярэння "
+"адлучаюцца прабелам"
 
 msgid "voltage should be in volts with no units/delimiter/spaces"
-msgstr ""
+msgstr "напруга павінна быць у вольтах без адзінак/падзельнікаў/прабелаў"
 
 msgid "unusual {0} specification"
-msgstr ""
+msgstr "незвычайнае апісанне {0}"
 
 msgid "unusual train track gauge; use mm with no separator"
-msgstr ""
+msgstr "незвычайная шырыня каляіны; выкарыстоўвайце мм без падзельніка"
 
 msgid "unusual incline; use percentages/degrees or up/down"
-msgstr ""
+msgstr "незвычайны ўхіл; выкарыстоўвайце адсоткі/градусы ці up/down"
 
 msgid "{0} must be a numeric value"
-msgstr ""
+msgstr "{0} павінна быць лікавым значэннем"
 
 msgid "{0} must be a positive integer number"
-msgstr ""
+msgstr "{0} павінен быць дадатным цэлым лікам"
 
 msgid "relation without type"
-msgstr ""
+msgstr "адносіны без тыпу"
 
 msgid "{0} relation without {0} tag"
-msgstr ""
+msgstr "{0} адносіны без тэга {0}"
 
 msgid "religion without denomination"
-msgstr ""
+msgstr "тэг religion без тэга denomination"
 
 msgid "unknown christian denomination"
-msgstr ""
+msgstr "невядомая хрысціянская канфесія"
 
 msgid "unknown muslim denomination"
-msgstr ""
+msgstr "невядомая мусульманская канфесія"
 
 msgid "unknown jewish denomination"
-msgstr ""
+msgstr "невядомая канфесія юдаізму"
 
 msgid "{0} is unnecessary"
-msgstr ""
+msgstr "{0} не патрэбен"
 
 msgid "{0} is unnecessary for {1}"
-msgstr ""
+msgstr "{0} не трэба для {1}"
 
 msgid "{0}={1} makes no sense"
-msgstr ""
+msgstr "{0}={1} не мае сэнсу"
 
 msgid "Nodes duplicating parent way tags"
-msgstr ""
+msgstr "Кропкі з тэгамі як у бацькоўскай лініі"
 
 msgid ""
 "no wikipedia-language given, use ''wikipedia''=''language:page title''"
 msgstr ""
+"не пазначана мова Вікіпедыі, выкарыстоўвайце ''wikipedia''=''мова:загаловак "
+"старонкі''"
 
 msgid "unknown language prefix in wikipedia tag"
-msgstr ""
+msgstr "невядомы прэфікс мовы ў тэгу wikipedia"
 
 msgid "deprecated format for wikipedia tag"
-msgstr ""
+msgstr "састарэлы фармат тэга wikipedia"
 
 msgid "''wikipedia''=''language:page title''"
-msgstr ""
+msgstr "''wikipedia''=''мова:загаловак старонкі''"
 
 msgid "Hide icons at low zoom"
-msgstr ""
+msgstr "Хаваць значкі на малым маштабе"
 
 msgid "Less obtrusive node symbols at low zoom"
-msgstr ""
+msgstr "Меншае загрувашчванне значкамі на малым маштабе"
 
 msgid "Display street labels (at high zoom)"
-msgstr ""
+msgstr "Паказваць назвы вуліц (пры  буйных маштабах)"
 
 msgid "Use alternative turn restriction icon set"
-msgstr ""
+msgstr "Выкарыстоўваць альтэрнатыўны набор значкоў"
 
 msgid "Columbus V-900 CSV Files"
-msgstr ""
+msgstr "Файлы Columbus V-900 CSV"
 
 msgid "Importing CSV file ''%s''..."
-msgstr ""
+msgstr "Імпартаванне CSV файла ''%s''..."
 
 msgid "Markers of "
-msgstr ""
+msgstr "Маркеры "
 
 msgid "Show summary after import"
-msgstr ""
+msgstr "Паказаць апісанне пасля імпарту"
 
 msgid "Do not zoom after import"
-msgstr ""
+msgstr "Не маштабаваць пасля імпарту"
 
 msgid "Ignore hdop/vdop/pdop entries"
-msgstr ""
+msgstr "Ігнараваць hdop/vdop/pdop запісы"
 
 msgid "Warn on missing audio files"
-msgstr ""
+msgstr "Папярэджваць пры страце аўдыё файлаў"
 
 msgid "Warn on conversion errors"
-msgstr ""
+msgstr "Папярэджваць пры памылках пераўтварэння"
 
 msgid "Error in line "
-msgstr ""
+msgstr "Памылка ў радку "
 
 msgid "Missing audio file"
-msgstr ""
+msgstr "Страчаны аўдыё файл"
 
 msgid "Commands"
-msgstr ""
+msgstr "Каманды"
 
 msgid ""
 "No command has been found. Would you like to download and install default "
 "commands now?"
 msgstr ""
+"Каманды не знойдзены. Жадаеце запампаваць і ўсталяваць набор каманд па "
+"змаўчанні?"
 
 msgid "No command found"
-msgstr ""
+msgstr "Каманды не знойдзены"
 
 msgid "Default commands have been successfully installed"
-msgstr ""
+msgstr "Набор каманд па змаўчанні паспяхова ўсталяваны"
 
 msgid ""
 "Failed to download and install default commands.\n"
 "\n"
 "Error: {0}"
 msgstr ""
+"Не атрымалася запампаваць і ўсталяваць набор каманд па змаўчанні.\n"
+"\n"
+"Памылка: {0}"
 
 msgid "Processing..."
-msgstr ""
+msgstr "Апрацоўка…"
 
 msgid "Aborted"
-msgstr ""
+msgstr "Перапынена"
 
 msgid "Error executing the script: "
-msgstr ""
+msgstr "Памылка выканання скрыпту: "
 
 msgid "Command line"
-msgstr ""
+msgstr "Камандны радок"
 
 msgid "Set input focus to the command line."
-msgstr ""
+msgstr "Усталяваць фокус уводу ў камандны радок"
 
 msgid "Point on the start"
-msgstr ""
+msgstr "Пакажыце пачатак"
 
 msgid "Point on the end"
-msgstr ""
+msgstr "Пакажыце канец"
 
 msgid "Missing definition of new object with id {0}."
-msgstr ""
+msgstr "Адсутнічае вызначэнне новага аб’екта з id {0}"
 
 msgid "Missing mandatory attribute ''{0}'' on <member> of relation {1}."
-msgstr ""
+msgstr "Адсутнічае абавязковы параметр ''{0}'' для <члена> адносін {1}."
 
 msgid "Illegal value for attribute ''uid''. Got ''{0}''."
-msgstr ""
+msgstr "Няслушнае значэнне для атрыбуту ''uid'': ''{0}''."
 
 msgid "nodes"
-msgstr ""
+msgstr "кропкі"
 
 msgid "ways"
-msgstr ""
+msgstr "лініі"
 
 msgid "relations"
-msgstr ""
+msgstr "адносіны"
 
 msgid "OSM objects"
-msgstr ""
+msgstr "аб’ектаў OSM"
 
 msgid "Can not draw outside of the world."
-msgstr ""
+msgstr "Дзеянне невыканальна за межамі свету."
 
 msgid "Create grid of ways"
-msgstr ""
+msgstr "Стварыць сетку з ліній"
 
 msgid ""
 "Forms a grid of ways in base to two existing that have various nodes and one "
 "in common"
 msgstr ""
+"Фармаваць сетку ліній, заснаваную на дзвюх існых лініях, якія маюць розныя "
+"кропкі і адну агульную"
 
 msgid "Select two ways with a node in common"
-msgstr ""
+msgstr "Абярыце дзве лініі з агульнай кропкай"
 
 msgid "Select two ways with alone a node in common"
-msgstr ""
+msgstr "Абярыце дзве лініі з адзінай агульнай кропкай"
 
 msgid "Create a grid of ways"
-msgstr ""
+msgstr "Стварэнне сеткі з ліній"
 
 msgid "Download Track ..."
-msgstr ""
+msgstr "Загрузка трэка ..."
 
 msgid "Download GPX track from openstreetmap.org"
-msgstr ""
+msgstr "Загрузка GPX трэка з openstreetmap.org"
 
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
+"Паўстала памылка пры сінтаксічным разборы gpx-файла {0}. Будзе даступная "
+"толькі частка файла."
 
 msgid "Invalid URL {0}"
-msgstr ""
+msgstr "Няслушная спасылка {0}"
 
 msgid "Error fetching URL {0}"
-msgstr ""
+msgstr "Памылка апрацоўкі спасылкі {0}"
 
 msgid "Error parsing data from URL {0}"
-msgstr ""
+msgstr "Памылка аналізу дадзеных спасылкі {0}"
 
 msgid "Download Track"
-msgstr ""
+msgstr "Запампаваць трэк"
 
 msgid "Filename"
-msgstr ""
+msgstr "Імя файла"
 
 msgid "Private (only shared as anonymous, unordered points)"
-msgstr ""
+msgstr "Прыватныя (бачныя іншым, як ананімныя, неўпарадкаваныя кропкі)"
 
 msgid "Public (shown in trace list and as anonymous, unordered points)"
 msgstr ""
+"Агульнадаступныя (паказаны ў апісанні трэка як anonymous, неўпарадкаваныя "
+"кропкі)"
 
 msgid "Trackable (only shared as anonymous, ordered points with timestamps)"
 msgstr ""
+"Адсочваныя (выглядаюць як anonymous, пранумараваныя кропкі з пазнакамі часу)"
 
 msgid ""
 "Identifiable (shown in trace list and as identifiable, ordered points with "
 "timestamps)"
 msgstr ""
+"Ідэнтыфікаваныя (паказваюцца ў спісе трэкаў як ідэнтыфікаваныя, "
+"спарадкаваныя кропкі з часавымі адзнакамі)"
 
 msgid "Upload Trace"
-msgstr ""
+msgstr "Перадача трэка на сервер"
 
 msgid "Upload Traces"
-msgstr ""
+msgstr "Перадача трэкаў на сервер"
 
 msgid "Defines the visibility of your trace for other OSM users."
-msgstr ""
+msgstr "Вызначае бачнасць вашага трэка для іншых карыстальнікоў OSM."
 
 msgid "http://wiki.openstreetmap.org/wiki/Visibility_of_GPS_traces"
-msgstr ""
+msgstr "http://wiki.openstreetmap.org/wiki/Visibility_of_GPS_traces"
 
 msgid "(What does that mean?)"
-msgstr ""
+msgstr "(Што гэта азначае?)"
 
 msgid "Please enter Description about your trace."
-msgstr ""
+msgstr "Калі ласка, увядзіце апісанне вашага трэка"
 
 msgid "Tags (comma delimited)"
-msgstr ""
+msgstr "Тэгі (праз коску)"
 
 msgid "Please enter tags about your trace."
-msgstr ""
+msgstr "Увядзіце тэгі, якія апісваюць ваш трэк."
 
 msgid "Selected track: {0}"
-msgstr ""
+msgstr "Вылучаны трэк: {0}"
 
 msgid "No GPX layer selected. Cannot upload a trace."
-msgstr ""
+msgstr "Пласт GPX не абраны. Не атрымоўваецца перадаць трэк на сервер."
 
 msgid "Uploading trace ..."
-msgstr ""
+msgstr "Перадача трэка на сервер ..."
 
 msgid "Connecting..."
-msgstr ""
+msgstr "Падлучэнне..."
 
 msgid "Upload canceled"
-msgstr ""
+msgstr "Перадача адменена"
 
 msgid "Error while uploading"
-msgstr ""
+msgstr "Памылка падчас перадачы дадзеных на сервер"
 
 msgid "GPX upload was successful"
-msgstr ""
+msgstr "Загрузка GPX на сервер паспяхова завершана"
 
 msgid "Upload failed. Server returned the following message: "
 msgstr ""
+"Перадача на сервер не атрымалася. Сервер вярнуў наступнае паведамленне: "
 
 msgid "Uploading GPX track: {0}% ({1} of {2})"
-msgstr ""
+msgstr "Перадача GPX трэка на сервер: {0}% ({1} з {2})"
 
 msgid "No description provided. Please provide some description."
-msgstr ""
+msgstr "Няма апісання. Просьба падаць некаторае апісанне."
 
 msgid "Uploading GPX Track"
-msgstr ""
+msgstr "Перадача GPX трэка на сервер"
 
 msgid "Uploads traces to openstreetmap.org"
-msgstr ""
+msgstr "Перадача трэкаў на сайт openstreetmap.org"
 
 msgid "Shows elevation profile"
-msgstr ""
+msgstr "Паказвае профіль вышыні"
 
 msgid "Elevation Profile"
-msgstr ""
+msgstr "Профіль вышыні"
 
 msgid "Elevation Grid Layer (experimental!)"
-msgstr ""
+msgstr "Пласт сеткі вышынь (эксперыментальны!)"
 
 msgid "Shows elevation grid layer"
-msgstr ""
+msgstr "Паказаць пласт сеткі вышынь"
 
 msgid "Elevation Grid"
-msgstr ""
+msgstr "Сетка вышынь"
 
 msgid "No SRTM data"
-msgstr ""
+msgstr "Няма дадзеных SRTM"
 
 msgid "Open the elevation profile window."
-msgstr ""
+msgstr "Адчыніць акно профіляў вышыні"
 
 msgid "Min"
-msgstr ""
+msgstr "Мін"
 
 msgid "Avrg"
-msgstr ""
+msgstr "Сяр."
 
 msgid "Max"
-msgstr ""
+msgstr "Макс"
 
 msgid "Dist"
-msgstr ""
+msgstr "Адл."
 
 msgid "Gain"
-msgstr ""
+msgstr "Павелічэнне"
 
 msgid "Tracks"
-msgstr ""
+msgstr "Трэкі"
 
 msgid "Elevation profile for track ''{0}''."
-msgstr ""
+msgstr "Профіль вышынь для трэка ''{0}''."
 
 msgid "Elevation profile"
-msgstr ""
+msgstr "Профіль вышынь"
 
 msgid "(No elevation data)"
-msgstr ""
+msgstr "(Вышыні адсутнічаюць)"
 
 msgid "Can not save preferences"
-msgstr ""
+msgstr "Не атрымоўваецца захаваць налады"
 
 msgid "Epsilon multiplier"
-msgstr ""
+msgstr "Множнік эпсілона"
 
 msgid "Starting Epsilon"
-msgstr ""
+msgstr "Пачатковы эпсілон"
 
 msgid "Max points count per 1 km"
-msgstr ""
+msgstr "Максімальны лік кропак на 1 км"
 
 msgid "Enter key mode"
-msgstr ""
+msgstr "Дзеянне па Enter"
 
 msgid "Auto add tags"
-msgstr ""
+msgstr "Аўтададанне тэгаў"
 
 msgid "Autosimplify"
-msgstr ""
+msgstr "Аўтаспрашчэнне"
 
 msgid "Simplify with initial epsilon"
-msgstr ""
+msgstr "Спрашчэнне з зададзеным адхіленнем"
 
 msgid "Save as is"
-msgstr ""
+msgstr "Захаваць як ёсць"
 
 msgid "Snap to nodes"
-msgstr ""
+msgstr "Прыліпаць да кропак"
 
 msgid "Add fixed points on click"
-msgstr ""
+msgstr "Дадаваць фіксаваныя кропкі па кліку"
 
 msgid "Add fixed points on spacebar"
-msgstr ""
+msgstr "Дадаваць фіксаваныя кропкі па націску прабелу"
+
+msgid "Allow edit existing ways"
+msgstr "Дазволіць рэдагаванне існуючых ліній"
 
 msgid "Draw closed polygons only"
-msgstr ""
+msgstr "Маляваць толькі замкнёныя шматкутнікі"
 
 msgid "FastDraw configuration"
-msgstr ""
+msgstr "Налады FastDraw"
 
 msgid "Try copying tags from properties table"
-msgstr ""
+msgstr "Можна таксама скапіяваць тэгі з табліцы ўласцівасцяў"
 
 msgid "Save settings"
-msgstr ""
+msgstr "Захаваць параметры"
 
 msgid "Can not read settings"
-msgstr ""
+msgstr "Не атрымоўваецца прачытаць параметры"
 
 msgid "Q=Options, Enter=save, Ctrl-Enter=save with tags, Up/Down=tune"
 msgstr ""
+"Q=Налады, Enter=захаваць, Ctrl-Enter=захаваць з тэгамі, Up/Down=падладка"
 
 msgid ""
 "Click or Click&drag to continue, Ctrl-Click to add fixed node, Shift-Click "
 "to delete, Enter to simplify or save, Ctrl-Shift-Click to start new line"
 msgstr ""
+"Націсніце або націсніце і цягніце для працягу, націск з Ctrl для дадання "
+"фіксаванай кропкі, націск з Shift для выдалення, Enter для спрашчэння або "
+"захавання, націск з Ctrl-Shift для пачатку новай лініі"
 
 msgid "FastDrawing"
-msgstr ""
+msgstr "FastDrawing"
 
 msgid "Fast drawing mode"
-msgstr ""
+msgstr "Рэжым хуткага малявання"
 
 msgid "Please move the mouse to draw new way"
-msgstr ""
+msgstr "Рухайце мыш, каб намаляваць новую лінію"
 
 msgid "Are you sure you do not want to save the line containing {0} points?"
-msgstr ""
+msgstr "Упэўнены, што не жадаеце захоўваць лінію з {0} кропак?"
 
 msgid ""
 "{0} m - length of the line\n"
@@ -22884,196 +25038,202 @@ msgid ""
 "{2} points per km (maximum)\n"
 "{3} points per km (average)"
 msgstr ""
+"{0} м - даўжыня лініі\n"
+"{1} вузлоў\n"
+"{2} вузлоў на км (максімум)\n"
+"{3} вузлоў на км (у сярэднім)"
 
 msgid "Line information"
-msgstr ""
+msgstr "Інфармацыя пра лінію"
 
 msgid "Cannot place node outside of the world."
-msgstr ""
+msgstr "Не атрымоўваецца змясціць кропку за межамі свету."
 
 msgid "Draw the way by mouse"
-msgstr ""
+msgstr "Малюйце лінію мышшу"
 
 msgid "min distance={0} px ({1} m)"
-msgstr ""
-
-msgid "Convert way to FastDraw line"
-msgstr ""
+msgstr "мінімальная адлегласць ={0} пікселяў ({1} м)"
 
 msgid "Eps={0}, {1} points, {2} p/km"
-msgstr ""
+msgstr "Eps={0}, {1} кропак, {2} на км"
 
 msgid "Fix addresses"
-msgstr ""
+msgstr "Выправіць адрасаванне"
 
 msgid "Show dialog with incomplete addresses"
-msgstr ""
+msgstr "Паказаць дыялог з незапоўненымі адрасамі"
 
 msgid "Include objects used for guesses"
-msgstr ""
+msgstr "Уключыць аб’екты, скарыстаныя для здагадак"
 
 msgid "Fix street addresses"
-msgstr ""
+msgstr "Выпраўленне адрасавання"
 
 msgid "Find and fix addresses without (valid) streets."
 msgstr ""
+"Знаходзіць і выпраўляе адрасы з адсутнымі (няправільнымі) назвамі вуліц."
 
 msgid "Address Edit"
-msgstr ""
+msgstr "Рэдагаваць адрас"
 
 msgid "Searching"
-msgstr ""
+msgstr "Пошук"
 
 msgid "Guess values for "
-msgstr ""
+msgstr "Адгадаць значэнне "
 
 msgid "Address has no street"
-msgstr ""
+msgstr "У адрасе не паказана вуліца"
 
 msgid "Address has no valid street"
-msgstr ""
+msgstr "Невядомая вуліца ў адрасе"
 
 msgid "Address has no post code"
-msgstr ""
+msgstr "У адрасе не паказаны паштовы індэкс"
 
 msgid "Address has no city"
-msgstr ""
+msgstr "У адрасе не паказаны горад"
 
 msgid "Address has no country"
-msgstr ""
+msgstr "У адрасе не паказана краіна"
 
 msgid "Assign to"
-msgstr ""
+msgstr "Прысвоіць"
 
 msgid "Remove all address tags"
-msgstr ""
+msgstr "Выдаліць усе адрасныя тэгі"
 
 msgid "No name"
-msgstr ""
+msgstr "Без назвы"
 
 msgid "Unresolved Addresses"
-msgstr ""
+msgstr "Сумніўныя адрасы"
 
 msgid "Select and close"
-msgstr ""
+msgstr "Вылучыць і зачыніць"
 
 msgid "Fix unresolved addresses"
-msgstr ""
+msgstr "Выправіць сумніўныя адрасы"
 
 msgid "Complete Addresses"
-msgstr ""
+msgstr "Поўныя адрасы"
 
 msgid "Incomplete Addresses"
-msgstr ""
+msgstr "Няпоўныя адрасы"
 
 msgid "Selected Addresses"
-msgstr ""
+msgstr "Вылучаныя адрасы"
 
 msgid "Selected Street"
-msgstr ""
+msgstr "Вылучаная вуліца"
 
 msgid "(No data)"
-msgstr ""
+msgstr "(Няма дадзеных)"
 
 msgid "Segments"
-msgstr ""
+msgstr "Сегменты"
 
 msgid "Show incomplete addresses"
-msgstr ""
+msgstr "Паказаць няпоўныя адрасы"
 
 msgid "items"
-msgstr ""
+msgstr "элементы"
 
 msgid "no items"
-msgstr ""
+msgstr "элементы адсутнічаюць"
 
 msgctxt "address"
 msgid "City"
-msgstr ""
+msgstr "Горад"
 
 msgid "Postcode"
-msgstr ""
+msgstr "Індэкс"
 
 msgid "Turns all guesses into the corresponding tag values."
-msgstr ""
+msgstr "Ператварыць усе здагадкі ў адпаведныя значэнні тэгаў."
 
 msgid "Applied guessed values"
-msgstr ""
+msgstr "Ужыць адгаданыя значэнні"
 
 msgid "Applied guessed values for "
-msgstr ""
+msgstr "Ужыць адгаданыя значэнні да "
 
 msgid "Assign address to street"
-msgstr ""
+msgstr "Прысвоіць адрас вуліцы"
 
 msgid "Assign the selected address(es) to the selected street."
-msgstr ""
+msgstr "Прызначыць выдзелены адрас(ы) выдзеленай вуліцы."
 
 msgid "Set street name"
-msgstr ""
+msgstr "Прысвоіць назву вуліцы"
 
 msgid "Convert ALL streets."
-msgstr ""
+msgstr "Ператварыць УСЕ вуліцы."
 
 msgid ""
 "Create relation between street and related addresses for ALL streets in the "
 "current layer."
 msgstr ""
+"Стварыць адносіны паміж вуліцамі і злучанымі адрасамі для ЎСІХ вуліц у "
+"бягучым пласце."
 
 msgid "Convert to relation."
-msgstr ""
+msgstr "Стварыць адносіны."
 
 msgid "Create relation between street and related addresses."
-msgstr ""
+msgstr "Стварыць адносіны паміж вуліцай і злучанымі адрасамі."
 
 msgid "Create address relation for "
-msgstr ""
+msgstr "Стварыць адрасныя адносіны для "
 
 msgid "Guess"
-msgstr ""
+msgstr "Выказаць здагадку"
 
 msgid ""
 "Tries to guess address data by picking the name of the closest object with "
 "according tag."
 msgstr ""
+"Спрабаваць падабраць адрас, выбіраючы найблізкі аб’ект з адпаведным тэгам."
 
 msgid "Guessing address values"
-msgstr ""
+msgstr "Магчымыя значэнні адрасу"
 
 msgid "Removes address related tags from the object."
-msgstr ""
+msgstr "Выдаліць у аб’екта тэгі адрасу"
 
 msgid "Remove address tags"
-msgstr ""
+msgstr "Выдаліць адрасныя тэгі"
 
 msgid "Marks selected addresses in the map"
-msgstr ""
+msgstr "Адзначыць вылучаныя адрасы на карце"
 
 msgid "Select incomplete addresses"
-msgstr ""
+msgstr "Вылучыць няпоўныя адрасы"
 
 msgid "Selects all addresses with incomplete data."
-msgstr ""
+msgstr "Вылучыць усе адрасы з няпоўнымі дадзенымі."
 
 msgid "Use tag ''addr:street'' or ''addr:place''"
-msgstr ""
+msgstr "Выкарыстоўваць тэг ''addr:street'' ці ''addr:place''"
 
 msgid "House Number Editor"
-msgstr ""
+msgstr "Рэдактар нумароў будынкаў"
 
 msgid "House number increment:"
-msgstr ""
+msgstr "Прырашчэнне нумара хаты:"
 
 msgid "Updating properties of up to {0} object"
 msgid_plural "Updating properties of up to {0} objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Абнаўленне ўласцівасцяў {0} аб’екта"
+msgstr[1] "Абнаўленне ўласцівасцяў {0} аб’ектаў"
+msgstr[2] "Абнаўленне ўласцівасцяў {0} аб’ектаў"
 
 msgid "Default image projection"
-msgstr ""
+msgstr "Праекцыя малюнка па змаўчанні"
 
 msgid "JOSM''s current projection"
-msgstr ""
+msgstr "Бягучая праекцыя JOSM’а"
 
 msgid ""
 "No projection file (.prj) found.<br>You can choose the default image "
@@ -23081,384 +25241,420 @@ msgid ""
 "image projection.<br>(It can be changed later from the right click menu of "
 "the image layer.)"
 msgstr ""
+"Не знойдзены файл праекцыі (.prj).<br>Можна абраць праекцыю малюнка па "
+"змаўчанні ({0}) ці бягучую праекцыю рэдактара JOSM ({1}).<br>(Пазней можна "
+"змяніць выбар у кантэкстным меню пласта малюнка.)"
 
 msgid "Layer Properties"
-msgstr ""
+msgstr "Уласцівасці пласта"
 
 msgid "Error while creating image layer: {0}"
-msgstr ""
+msgstr "Памылка пры стварэнні пласта малюнка: {0}"
 
 msgid "Import image"
-msgstr ""
+msgstr "Імпартаваць малюнак"
 
 msgid "Import georeferenced image"
-msgstr ""
+msgstr "Імпартаваць выяву, прывязаную да каардынат"
 
 msgid "Error while creating image layer: "
-msgstr ""
+msgstr "Памылка пры стварэнні пласта з малюнкам: "
 
 msgid "NanoLog"
-msgstr ""
+msgstr "NanoLog"
 
 msgid "NanoLog of {0} entries"
-msgstr ""
+msgstr "NanoLog {0} запісаў"
 
 msgid "NanoLog of {0} lines, {1} of them with coordinates."
-msgstr ""
+msgstr "NanoLog {0} ліній, {1} з іх з каардынатамі."
 
 msgid "Correlate with GPX..."
-msgstr ""
+msgstr "Карэляваць з GPX..."
 
 msgid "Put on GPX..."
-msgstr ""
+msgstr "Накласці на GPX..."
 
 msgid "Correlate entries with GPS trace"
-msgstr ""
+msgstr "Карэляваць запісы з GPS-трэкам"
 
 msgid "Save layer..."
-msgstr ""
+msgstr "Захаваць пласт..."
 
 msgid "Save NanoLog layer"
-msgstr ""
+msgstr "Захаваць пласт NanoLog"
 
 msgid "Open NanoLog panel"
-msgstr ""
+msgstr "Адкрыць панэль NanoLog"
 
 msgid "Open NanoLog file..."
-msgstr ""
+msgstr "Адкрыць файл NanoLog..."
 
 msgid "Could not read NanoLog file:"
-msgstr ""
+msgstr "Не атрымалася прачытаць файл NanoLog:"
 
 msgid "OSM Recommendation"
-msgstr ""
+msgstr "Рэкамендацыя OSM"
 
 msgid "Recommend categories to your newly created instances."
-msgstr ""
+msgstr "Рэкамендуе катэгорыі для ствараных аб’ектаў."
 
 msgid "Training process configuration"
-msgstr ""
+msgstr "Канфігурацыя працэсу навучання"
 
 msgid "Model Settings"
-msgstr ""
+msgstr "Параметры мадэлі"
 
 msgid "Select objects or create new objects and get recommendation."
-msgstr ""
+msgstr "Абярыце ці стварыце новыя аб’екты і атрымаеце рэкамендацыю."
 
 msgid "Add Recommendation"
-msgstr ""
+msgstr "Дадаць рэкамендацыю"
 
 msgid "Add a recommended key/value pair to your object"
-msgstr ""
+msgstr "Дадаць рэкамендуемую пару ключ/значэнне да аб’екта"
 
 msgid "Train a Model"
-msgstr ""
+msgstr "Навучанне мадэлі"
 
 msgid "Start the training engine!"
-msgstr ""
+msgstr "Запусціць механізм навучання!"
 
 msgid "Edit opening hours"
-msgstr ""
+msgstr "Правіць гадзіны працы"
 
 msgid "Edit time-tag of selected element in a graphical interface"
-msgstr ""
+msgstr "Рэдагаваць тэг часу абранага элемента ў графічным інтэрфейсе"
 
 msgid "edit existing tag"
-msgstr ""
+msgstr "рэдагаваць існы тэг"
 
 msgid "edit new tag"
-msgstr ""
+msgstr "рэдагаваць новы тэг"
 
 msgid "Display clock in 12h mode."
-msgstr ""
+msgstr "Паказваць час у 12-гадзінным фармаце."
 
 msgid "Choose key"
-msgstr ""
+msgstr "Абяры ключ"
 
 msgid "apply {0}"
-msgstr ""
+msgstr "ужыць {0}"
 
 msgid "There is something wrong in the value near:"
-msgstr ""
+msgstr "Штосьці не правільна ў значэнні каля:"
 
 msgid "Info: {0}"
-msgstr ""
+msgstr "Інфармацыя: {0}"
 
 msgid "Correct the value manually and than press Enter."
-msgstr ""
+msgstr "Выправіце значэнне ўручную і націсніце ўвод."
 
 msgid "Error in timeformat"
-msgstr ""
+msgstr "Памылка ў фармаце часу"
 
 msgid "open end"
-msgstr ""
+msgstr "адкрыты канец"
 
 msgid "Import Osm Inspector Bugs..."
-msgstr ""
+msgstr "Імпартаваць памылкі з Osm Inspector..."
 
 msgid "OsmInspector"
-msgstr ""
+msgstr "OsmInspector"
 
 msgid "Open OsmInspector"
-msgstr ""
+msgstr "Адкрыць OsmInspector"
 
 msgid "OsmBugInfo"
-msgstr ""
+msgstr "OsmBugInfo"
 
 msgid "Open a OSM Inspector selection list window."
-msgstr ""
+msgstr "Адчыніць акно выбару з OSM Inspector."
 
 msgid "Current Selected Bug Info"
-msgstr ""
+msgstr "Інфармацыя пра абраную памылку"
 
 msgid "Prev OSMI bug"
-msgstr ""
+msgstr "Папярэдняя памылка (OSMI)"
 
 msgid "Next OSMI bug"
-msgstr ""
+msgstr "Наступная памылка (OSMI)"
 
 msgid "Osm Inspector Bugs"
-msgstr ""
+msgstr "Памылкі з Osm Inspector"
 
 msgid "OSM Inspector Bugs"
-msgstr ""
+msgstr "Інспектар памылак (OSMI)"
 
 msgid "Selected Bug Info"
-msgstr ""
+msgstr "Інфармацыя пра вылучаную памылку"
 
 msgid "Handy Address Interpolation Functions"
-msgstr ""
+msgstr "Функцыі сродку інтэрпаляцыі адрасоў"
 
 msgid "Define Address Interpolation"
-msgstr ""
+msgstr "Задаць правілы інтэрпаляцыі адрасоў"
 
 msgid "Odd"
-msgstr ""
+msgstr "Няцотныя"
 
 msgid "Even"
-msgstr ""
+msgstr "Цотныя"
 
 msgid "Alphabetic"
-msgstr ""
+msgstr "Па алфавіце"
 
 msgid "Numeric"
-msgstr ""
+msgstr "Лікавае"
 
 msgid "Actual"
-msgstr ""
+msgstr "Актуальнае"
 
 msgid "Estimate"
-msgstr ""
+msgstr "Прыкладнае"
 
 msgid "Potential"
-msgstr ""
+msgstr "Патэнцыйнае"
 
 msgid "Relation: {0}"
-msgstr ""
+msgstr "Адносіны: {0}"
 
 msgid "Associate with street using:"
-msgstr ""
+msgstr "Звязаць з вуліцай, выкарыстоўваючы:"
 
 msgid "Numbering Scheme:"
-msgstr ""
+msgstr "Схема нумарацыі:"
 
 msgid "Increment:"
-msgstr ""
+msgstr "Павелічэнне:"
 
 msgid "Starting #:"
-msgstr ""
+msgstr "Ад №:"
 
 msgid "Ending #:"
-msgstr ""
+msgstr "Да №:"
 
 msgid "Accuracy:"
-msgstr ""
+msgstr "Дакладнасць:"
 
 msgid "Convert way to individual house numbers."
-msgstr ""
+msgstr "Пераўтварыць лінію да асобных нумароў хат."
 
 msgid "Will associate {0} additional house number nodes"
-msgstr ""
+msgstr "Будзе далучана {0} дадатковых кропак нумароў хат"
 
 msgid "City:"
-msgstr ""
+msgstr "Горад:"
 
 msgid "State:"
-msgstr ""
+msgstr "Штат:"
 
 msgid "Post Code:"
-msgstr ""
+msgstr "Паштовы індэкс:"
 
 msgid "Country:"
-msgstr ""
+msgstr "Краіна:"
 
 msgid "Full Address:"
-msgstr ""
+msgstr "Поўны адрас:"
 
 msgid "Optional Information:"
-msgstr ""
+msgstr "Дадатковая інфармацыя:"
 
 msgid "Please select a street to associate with address interpolation way"
 msgstr ""
+"Калі ласка, абярыце вуліцу, каб звязаць яе з лініяй інтэрпаляцыі адрасоў"
 
 msgid "Please select address interpolation way for this street"
-msgstr ""
+msgstr "Калі ласка, абярыце лінію інтэрпаляцыі адрасоў для гэтай вуліцы"
 
 msgid "Expected odd numbers for addresses"
-msgstr ""
+msgstr "Заяўлены няцотныя нумары хат"
 
 msgid "Expected even numbers for addresses"
-msgstr ""
+msgstr "Заяўлены цотныя нумары хат"
 
 msgid "Expected valid number for increment"
-msgstr ""
+msgstr "Пакажыце дакладнае лікавае значэнне прырашчэння"
 
 msgid "Country code must be 2 letters"
-msgstr ""
+msgstr "Код краіны павінен складацца з 2 літар"
 
 msgid "Please enter valid number for starting and ending address"
-msgstr ""
+msgstr "Калі ласка, увядзіце пачатковы і канчатковы нумары хат"
 
 msgid "Alphabetic address must end with a letter"
-msgstr ""
+msgstr "Алфавітныя нумары хат павінны пачынацца з літары"
 
 msgid "Starting and ending numbers must be the same for alphabetic addresses"
 msgstr ""
+"Пачатковы і канчатковы нумары павінны быць аднолькавымі для літарных адрасоў"
 
 msgid "Starting address letter must be less than ending address letter"
 msgstr ""
+"Пачатковая літара нумара хаты павінна быць бліжэй да пачатку алфавіту, чым "
+"канчатковая літара"
 
 msgid "Please enter valid number for starting address"
-msgstr ""
+msgstr "Калі ласка, увядзіце правільны нумар для пачатку нумарацыі хат"
 
 msgid "Please enter valid number for ending address"
-msgstr ""
+msgstr "Калі ласка, увядзіце правільны нумар апошняй хаты"
 
 msgid "Starting address number must be less than ending address number"
-msgstr ""
+msgstr "Пачатковы нумар хаты павінен быць менш, чым канчатковы нумар хаты"
 
 msgid "Align Way Segments"
-msgstr ""
+msgstr "Выраўнаваць сегменты лініі"
 
 msgid "Align Ways"
-msgstr ""
+msgstr "Выраўнаваць лініі"
 
 msgid ""
 "Please select two segments that don''t share any nodes.\n"
 "Alternatively put the pivot on their common node.\n"
 msgstr ""
+"Абярыце два сегмента, не мелыя агульных кропак.\n"
+"Ці выкарыстоўвайце іх агульную кропку як цэнтр кручэння (пстрыкніце па ёй).\n"
 
 msgid ""
 "Aligning would result nodes ''outside the world''.\n"
 "Alignment not possible.\n"
 msgstr ""
+"Выраўноўванне прывядзе да кропак «за межамі свету».\n"
+"Выраўноўванне немагчыма.\n"
 
 msgid ""
 "There is at least a non-pivot endpoint of the alignee that joins more than "
 "two way segments.\n"
 "Preserved angles type alignment is not possible.\n"
 msgstr ""
+"Існуе кропка-ня-цэнтр-кручэння, якая злучае больш, чым два сегменты лініі.\n"
+"Выраўноўванне з захаваннем кутоў немагчыма.\n"
 
 msgid ""
 "The alignment is not possible with maintaining the angles of the joint "
 "segments.\n"
 "Either choose the ''keep length'' aligning method or select other segments.\n"
 msgstr ""
+"Выраўноўванне з захаваннем кутоў немагчыма.\n"
+"Абярыце \"Захаваннем даўжыні\" ці вылучыце іншыя сегменты\n"
 
 msgid ""
 "An intersection point would fall outside its adjacent nodes.\n"
 "This is an unsupported scenario.\n"
 msgstr ""
+"Кропка скрыжавання выйдзе за суседнія кропкі. \n"
+"Такі сцэнар не падтрымліваецца.\n"
 
 msgid "Undocumented problem occured.\n"
-msgstr ""
+msgstr "Паўстала недакументаваная памылка.\n"
 
 msgid "AlignWayS: Alignment not possible"
-msgstr ""
+msgstr "AlignWayS: Выраўноўванне немагчыма"
 
 msgid "Align way segment"
-msgstr ""
+msgstr "Выраўнаваць сегмент лініі"
 
 msgid ""
 "Please select two segments that don''t share any nodes\n"
 " or put the pivot on their common node.\n"
 msgstr ""
+"Калі ласка, вылучыце два сегмента не мелыя агульных кропак\n"
+"ці пакажыце іх агульную кропку.\n"
 
 msgid "Align Way Segments: Modes"
-msgstr ""
+msgstr "Выраўноўванне сегментаў ліній: рэжымы"
 
 msgid "Align Ways control panel"
-msgstr ""
+msgstr "Панэль кіравання выраўноўваннем адрэзкаў ліній"
 
 msgid "This panel activates in Align Ways mode:"
-msgstr ""
+msgstr "Гэтая панэль актывуе рэжымы выраўноўвання адрэзкаў"
 
 msgid "Length preserved"
-msgstr ""
+msgstr "Захоўваць даўжыню"
 
 msgid "Angle preserved"
-msgstr ""
+msgstr "Захоўваць куты"
 
 msgid "Align with:"
-msgstr ""
+msgstr "Выраўнаваць:"
 
 msgid ""
 "<html>Aligns the way segment to the reference so that its length is "
 "preserved.</html>"
 msgstr ""
+"<html>Выраўноўваць адрэзкі лініі па ўзоры так, каб іх даўжыня "
+"захоўвалася.</html>"
 
 msgid ""
 "<html>Aligns the way segment to the reference so that the angles of its "
 "adjacent segments are preserved.<br/>The length of the aligned segment is "
 "likely to change as result.</html>"
 msgstr ""
+"<html>Выраўноўваць адрэзкі ліній па ўзоры так, каб куты паміж злучанымі "
+"лініямі захоўваліся.<br/>Даўжыня выраўноўваемых адрэзкаў, магчыма, "
+"зменіцца.</html>"
 
 msgid "I''m ready!"
-msgstr ""
+msgstr "Я гатовы!"
 
 msgid "AlignWays Tips"
-msgstr ""
+msgstr "Парады для AlignWayS"
 
 msgid "AlignWays: What''s New..."
-msgstr ""
+msgstr "Выраўнаваць адрэзкі лініі: Што новага ..."
 
 msgid "Align Ways mode"
-msgstr ""
+msgstr "Рэжым выраўноўвання ліній"
 
 msgid "Parameter ''{0}'' must not be null"
-msgstr ""
+msgstr "Параметр ''{0}'' не павінен быць пустым"
 
 msgid ""
 "Segment to be aligned cannot be the same with the reference segment.\n"
 "Please choose a different segment to be aligned."
 msgstr ""
+"Адрэзак, становішча якога трэба ўпарадкаваць, не можа быць такім жа, як "
+"узорны адрэзак.\n"
+"Калі ласка, выберыце іншы адрэзак для упарадкавання становішча."
 
 msgid "AlignWayS message"
-msgstr ""
+msgstr "Паведамленне AlignWayS"
 
 msgid ""
 "Reference segment cannot be the same with the segment to be aligned.\n"
 "Please choose a different reference segment."
 msgstr ""
+"Узорны адрэзак не можа быць такім жа, як адрэзак, становішча якога трэба "
+"ўпарадкаваць.\n"
+"Калі ласка, выберыце іншы адрэзак для ўзору."
 
 msgid "Ctrl-Click: select reference way segment; Alt-click: Clear selection"
 msgstr ""
+"Ctrl-Click: вылучыць узорны адрэзак лініі; Alt-Click: Зняць вылучэнне"
 
 msgid ": Align segments; Alt-click: Clear selection"
-msgstr ""
+msgstr ": выраўняць сегменты; Alt-пстрычка: зняць вылучэнне"
 
 msgid ""
 "Ctrl-click: select reference way segment; Click: select way segment to be "
 "aligned"
 msgstr ""
+"Ctrl-Click: вылучыць узорны адрэзак лініі; Click: вылучыць адрэзак, які "
+"трэба выраўнаваць"
 
 msgid "Click: select way segment to be aligned; Alt-click: Clear selection"
 msgstr ""
+"Click: вылучыць адрэзак, які трэба выраўнаваць; Alt-Click: Зняць вылучэнне"
 
 msgid ""
 "Ctrl-Click: select reference way segment; Click: select way segment to be "
 "aligned"
 msgstr ""
+"Ctrl-Click: вылучыць узорны адрэзак лініі; Click: вылучыць адрэзак, які "
+"трэба выраўнаваць"
 
 msgid ""
 "Welcome to the</span><br>\n"
@@ -23468,6 +25664,12 @@ msgid ""
 "...or it rather should be called <br>\n"
 "<span style=\"font-size: large;\">AlignWayS(egments)</span> Plugin..."
 msgstr ""
+"Сардэчна запрашаем у</span><br>\n"
+"модуль <span style=\"font-size: xx-large;\">AlignWay<span style=\"color: "
+"rgb(204, 85, 0);\">S</span><br>\n"
+"</span><span style=\"font-size: medium;\"><br>\n"
+"... або лепш яго варта было б назваць<br>\n"
+"модуль <span style=\"font-size: large;\">AlignWayS(egments)</span>..."
 
 msgid ""
 "<html>\n"
@@ -23481,6 +25683,17 @@ msgid ""
 "</html>\n"
 "\n"
 msgstr ""
+"<html>\n"
+"<p style = \"font-family: sans-serif; font-weight: bold;\">AlignWayS "
+"дапаможа\n"
+"вам выраўнаваць два сегмента ліній. Гэта бывае зручна, калі\n"
+"вы акрэсліваеце будынак і хочаце, каб яго сцены былі паралельныя\n"
+"вуліцы або дарозе.\n"
+"<br>\n"
+"<br> Некаторыя парады могуць стаць Вам карысныя:\n"
+"</p>\n"
+"</html>\n"
+"\n"
 
 msgid ""
 "<html>\n"
@@ -23495,6 +25708,18 @@ msgid ""
 "</html>\n"
 "\n"
 msgstr ""
+"<html>\n"
+"<div style = \"font-family: sans-serif;\">\n"
+"<ul>\n"
+"<li><b>Вылучыце апорны сегмент.</b> Зрабіце гэта, націснуўшы <b><i><span "
+"style=\"color:green\">Ctrl-click</span></i></b>\n"
+"на яго.<b> Гэты сегмент застанецца без руху.</b> Іншы сегмент, які будзе "
+"выраўнаваны, стане паралельным\n"
+"апорнага сегменту.</li>\n"
+"</ul>\n"
+"</div>\n"
+"</html>\n"
+"\n"
 
 msgid ""
 "<html>\n"
@@ -23511,6 +25736,17 @@ msgid ""
 "</html>\n"
 "\n"
 msgstr ""
+"<html>\n"
+"<div style=\"font-family:sans-serif\">\n"
+"<ul>\n"
+"  <li><b>Вылучыце сегмент, які трэба выраўнаваць.</b>Зрабіце гэта, "
+"<b><i><span style=\"color:green\">націснуўшы</span></i></b> на яго.\n"
+"Цэнтр кручэння будзе падсветлены (па змаўчанні - у сярэдзіне сегмента).\n"
+"  </li>\n"
+"</ul>\n"
+"</div>\n"
+"</html>\n"
+"\n"
 
 msgid ""
 "<html>\n"
@@ -23527,6 +25763,19 @@ msgid ""
 "</html>\n"
 "\n"
 msgstr ""
+"<html>\n"
+"<div style=\"font-family:sans-serif\">\n"
+"<ul>\n"
+"  <li>Па жаданні,<b> змяніце цэнтар павароту</b>. Каб стаць паралельным з "
+"апорным сегментам, выраўноўваемы сегмент паварочваецца вакол цэнтра "
+"кручэння. Вы можаце прызначыць цэнтрам кручэння адзін з канцоў або сярэдзіну "
+"сегмента, <b><i><span style=\"color:green\">націснуўшы</span></i></b> "
+"паблізу.\n"
+"  </li>\n"
+"</ul>\n"
+"</div>\n"
+"</html>\n"
+"\n"
 
 msgid ""
 "<html>\n"
@@ -23542,6 +25791,18 @@ msgid ""
 "</html>\n"
 "\n"
 msgstr ""
+"<html>\n"
+"<div style=\"font-family:sans-serif\">\n"
+"<ul>\n"
+"  <li><b>Выраўняць сегменты.</b> Націсніце <b><i><span "
+"style=\"color:green\">{0}</span></i></b>. Таксама вы знойдзеце каманду ў "
+"меню <b>Інструменты</b>\n"
+"або, магчыма, захочаце змясціць дзеянне на <b>панэль інструментаў</b>.\n"
+"  </li>\n"
+"</ul>\n"
+"</div>\n"
+"</html>\n"
+"\n"
 
 msgid ""
 "<html>\n"
@@ -23553,304 +25814,362 @@ msgid ""
 "</html>\n"
 "\n"
 msgstr ""
+"<html>\n"
+"<div style=\"font-family:sans-serif\">\n"
+"<b>Last hint:</b> Ёсць спосаб, вылучыць зноўку што-небудзь, калі гэта "
+"неабходна: Выкарыстоўвайце для гэтага <b><i><span style=\"color:green\">Alt-"
+"Click</span></i></b>.\n"
+"</div>\n"
+"</html>\n"
+"\n"
 
 msgid "Don''t show this again"
-msgstr ""
+msgstr "Больш не паказваць"
 
 msgid "What''s new..."
-msgstr ""
+msgstr "Што новага ..."
 
 msgid "Added <b>angle preserving</b> aligning mode"
-msgstr ""
+msgstr "Дададзены рэжым выраўноўвання з <b>захаваннем кутоў</b>"
 
 msgid "Various improvements and bugfixes"
-msgstr ""
+msgstr "Розныя паляпшэнні і выпраўленні памылак"
 
 msgid "Errr..."
-msgstr ""
+msgstr "Памылка"
 
 msgid "Browser not supported."
-msgstr ""
+msgstr "Аглядальнік не падтрымліваецца."
 
 msgid "Building address"
-msgstr ""
+msgstr "Адрас будынка"
 
 msgid "empty"
-msgstr ""
+msgstr "пуста"
 
 msgid "skip"
-msgstr ""
+msgstr "прапусціць"
 
 msgid "House number:"
-msgstr ""
+msgstr "Нумар дома:"
 
 msgid "Street:"
-msgstr ""
+msgstr "Вуліца:"
 
 msgid "Post code:"
-msgstr ""
+msgstr "Паштовы індэкс:"
 
 msgid "Building:"
-msgstr ""
+msgstr "Будынак:"
 
 msgid "Tags:"
-msgstr ""
+msgstr "Тэгі:"
 
 msgid "Name:"
-msgstr ""
+msgstr "Назва:"
 
 msgid "updated building info"
-msgstr ""
+msgstr "абноўлена інфармацыя пра будынак"
 
 msgid "Tag Element"
-msgstr ""
+msgstr "Задаць тэгі элемента"
 
 msgid "Select an item to tag."
-msgstr ""
+msgstr "Выберыце аб’ект для прызначэння тэгаў."
 
 msgid "Tag Building"
-msgstr ""
+msgstr "Задаць тэгі будынка"
 
 msgid "Tools: {0}"
-msgstr ""
+msgstr "Прылады: {0}"
 
 msgid "Area Selection"
-msgstr ""
+msgstr "Вылучыць вобласць"
 
 msgid "Select an area (e.g. building) from an underlying image."
 msgstr ""
+"Вылучыць вобласць (напрыклад, будынак), выкарыстоўваючы малюнак з "
+"ніжэйлеглага пласта."
 
 msgid "Area Selector"
-msgstr ""
+msgstr "Вылучэнне ўчастка"
 
 msgid "Created area"
-msgstr ""
+msgstr "Створана вобласць"
 
 msgid "Unable to detect a polygon where you clicked."
-msgstr ""
+msgstr "Не атрымалася выявіць палігон у месцы пстрычкі."
 
 msgid "Error Report"
-msgstr ""
+msgstr "Справаздача пра памылку"
 
 msgid "Something went wrong!"
-msgstr ""
+msgstr "Нешта пайшло не так!"
 
 msgid "Please file a bug report on the github project page under"
 msgstr ""
+"Калі ласка, адпраўце справаздачу пра памылку на старонку праекта на github "
+"(спасылка ніжэй)"
 
 msgid ""
 "Let us know what you did and what happend add the following text to the bug "
 "report, so we can find the source of the issue."
 msgstr ""
+"Раскажыце, што вы рабілі і што адбылося, дадайце наступны тэкст паведамлення "
+"пра памылку, такім чынам мы зможам знайсці яе крыніцу."
 
-msgid "Area detection algorithm settings."
-msgstr ""
+msgid "Area Selector - Preferences"
+msgstr "Вылучэнне ўчастка - налада"
 
-msgid "Algorithm Settings"
-msgstr ""
+msgid "Settings for the area detection algorithm."
+msgstr "Налада алгарытму вызначэння ўчастка."
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
-msgstr ""
+msgid "Boofcv - high resolution images"
+msgstr "Boofcv - выявы высокай якасці"
 
-msgid "Color Threshold"
-msgstr ""
+msgid "Custom - low resolution images"
+msgstr "Наладжвальны - выявы нізкай якасці"
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
+"Абярыце які алгарытм выкарыстоўваць. \"Аўта\" спрабуе знайсці ўчастак з "
+"дапамогай Boofcv, наладжвальны алгарытм выкарыстоўваецца ў выпадку адмовы."
 
-msgid "Tolerance Distance"
-msgstr ""
+msgid "Algorithm"
+msgstr "Алгарытм"
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
+"Максімальная адлегласць кропкі ад лініі (пікселяў), пры якім кропка ўсё яшчэ "
+"лічыцца часткай гэтай лініі (Тыпова: {0})"
 
-msgid "Tolerance Angle"
-msgstr ""
+msgid "Distance Tolerance"
+msgstr "Дапушчальнае адхіленне адлегласці"
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
+"Лініі, размешчаныя пад вуглом (у градусах) менш гэтага, будуць аб''яднаны ў "
+"адну (Тыпова {0})."
 
-msgid "Show Address Dialog after mapping an area"
-msgstr ""
+msgid "Angle Tolerance"
+msgstr "Дапушчальнае адхіленне вугла"
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
+"Каляровы парог вызначае, наколькі колер можа адрознівацца ад абранага. "
+"Значэнні чырвонага, зялёнага і сіняга мусяць быць у дыяпазоне ад (абраны - "
+"парог) да (абраны + парог). (Па змаўчанні: {0})."
 
-msgid "Merge nodes with neighbors"
-msgstr ""
+msgid "Color Threshold"
+msgstr "Каляровы парог"
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr "Выкарыстоўваць алгарытм, заснаваны на HSV"
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
+"Выкарыстоўваць адценне і насычанасць замест значэнняў RGB для выбару "
+"адпаведных колераў."
 
 msgid "How often thinning operation should be applied (Default {0})."
-msgstr ""
+msgstr "Як часта варта ўжываць разрэджанне (звычайна {0})."
 
 msgid "Thinning Iterations"
-msgstr ""
+msgstr "Ітэрацыі патанчэння"
 
-msgid "Use hue and saturation instead of RGB distinction"
-msgstr ""
+msgid "show address dialog"
+msgstr "Паказваць адрасны дыялог"
 
-msgid "use HSV based algorithm"
-msgstr ""
+msgid "Show Address Dialog after mapping an area"
+msgstr "Паказваць адрасны дыялог пасля малявання вобласці"
+
+msgid "merge nodes"
+msgstr "Аб''ядноўваць кропкі"
+
+msgid "Merge nodes with existing nodes"
+msgstr "Аб’ядноўваць кропкі з існуючымі кропкамі"
+
+msgid "Debug"
+msgstr "Адладка"
+
+msgid "Debugging mode will write images for each processing step."
+msgstr "У рэжыме адладкі будуць створаны выявы для кожнага кроку апрацоўкі."
 
 msgid "Street Name:"
-msgstr ""
+msgstr "Вуліца:"
 
 msgid "Big buildings mode"
-msgstr ""
+msgstr "Рэжым вялікіх будынкаў"
 
 msgid "Rotate crosshair"
-msgstr ""
+msgstr "Паварочваць прыцэл"
 
 msgid "Advanced settings"
-msgstr ""
+msgstr "Пашыраныя налады"
 
 msgid "Buildings tags:"
-msgstr ""
+msgstr "Тэгі будынкаў:"
 
 msgid "Cannot place building outside of the world."
-msgstr ""
+msgstr "Немагчыма змясціць будынак за межамі свету"
 
 msgid "Create building"
-msgstr ""
+msgstr "Стварыць будынак"
 
 msgid "Set buildings size"
-msgstr ""
+msgstr "Задаць памеры будынкаў"
 
 msgid "Use Address dialog"
-msgstr ""
+msgstr "Выкарыстоўваць дыялог адрасу"
 
 msgid "Auto-select building"
-msgstr ""
+msgstr "Аўта-выбар будынка"
 
 msgid "Use address nodes under buildings"
-msgstr ""
+msgstr "Выкарыстоўваць адрасныя кропкі пад будынкамі"
 
 msgid "Buildings width:"
-msgstr ""
+msgstr "Шырыня будынкаў:"
 
 msgid "Length step:"
-msgstr ""
+msgstr "Крок даўжыні:"
 
 msgid "Advanced..."
-msgstr ""
+msgstr "Дадаткова ..."
 
 msgid "Draw buildings"
-msgstr ""
+msgstr "Маляваць будынкі"
 
 msgid "Point on the corner of the building to start drawing"
-msgstr ""
+msgstr "Адзначце кут будынка, каб пачаць маляваць"
 
 msgid "Point on opposite end of the building"
-msgstr ""
+msgstr "Адзначце процілеглы кут будынка"
 
 msgid "Set width of the building"
-msgstr ""
+msgstr "Пакажыце шырыню будынка"
 
 msgid "Merge address points"
-msgstr ""
+msgstr "Аб’яднаць адрасныя пункты"
 
 msgid "Move tags from address nodes inside buildings to building ways"
 msgstr ""
+"Перанесці тэгі з адрасных кропак усярэдзіне будынкаў на лініі будынкаў"
 
 msgid "Select both address nodes and building ways to merge"
-msgstr ""
+msgstr "Для зліцця вылучыце адрасныя кропкі і контуры будынкаў"
 
 msgid "No address nodes found in the selection"
-msgstr ""
+msgstr "Адрасныя кропкі не вылучаны"
 
 msgid "No building ways found in the selection"
-msgstr ""
+msgstr "Лініі будынкаў не вылучаны"
 
 msgid "There is {0} building with multiple address nodes inside"
 msgid_plural "There are {0} buildings with multiple address nodes inside"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} будынак з некалькімі адраснымі кропкамі ўсярэдзіне"
+msgstr[1] "{0} будынкі з некалькімі адраснымі кропкамі ўсярэдзіне"
+msgstr[2] "{0} будынкаў з некалькімі адраснымі кропкамі ўсярэдзіне"
 
 msgid "There is {0} building with address conflicts"
 msgid_plural "There are {0} buildings with address conflicts"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} будынак з канфліктамі адрасоў"
+msgstr[1] "{0} будынкі з канфліктамі адрасоў"
+msgstr[2] "{0} будынкаў з канфліктамі адрасоў"
 
 msgid "No address nodes inside buildings found"
-msgstr ""
+msgstr "Адрасныя кропкі ўсярэдзіне будынкаў не знойдзены"
 
 msgid "on polygon"
-msgstr ""
+msgstr "на палігоне"
 
 msgid "Add address"
-msgstr ""
+msgstr "Дадаць адрас"
 
 msgid "Helping tool for tag address"
-msgstr ""
+msgstr "Дапаможная прылада для тэга адрасу"
 
 msgid "CadastreFR - Buildings"
-msgstr ""
+msgstr "CadastreFR - Дамы"
 
 msgid "Next no"
-msgstr ""
+msgstr "Наступны №"
 
 msgid "Enter addresses"
-msgstr ""
+msgstr "Увесці адрасы"
 
 msgid ""
 "Location \"{0}\" found in cache.\n"
 "Load cache first ?\n"
 "(No = new cache)"
 msgstr ""
+"Становішча \"{0}\" знойдзена ў кэшы.\n"
+"Спачатку загрузіць кэш?\n"
+"(Не = новы кэш)"
 
 msgid "Select Feuille"
-msgstr ""
+msgstr "Абраць аркуш"
 
 msgid ""
 "Error loading file.\n"
 "Probably an old version of the cache file."
 msgstr ""
+"Памылка загрузкі файла.\n"
+"Магчыма ў кэшы старая версія файла."
 
 msgid "Lambert Zone {0} cache file (.{0})"
-msgstr ""
+msgstr "Файл кэша (.{0}) зоны Lambert {0}"
 
 msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
-msgstr ""
+msgstr "Файл кэша  (.CC{0}) зоны Lambert CC9 {0}"
 
 msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
-msgstr ""
+msgstr "Файл кэша Guadeloupe Fort-Marigot (.UTM1)"
 
 msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
-msgstr ""
+msgstr "Файл кэша Guadeloupe Ste-Anne (.UTM2)"
 
 msgid "Martinique Fort Desaix cache file (.UTM3)"
-msgstr ""
+msgstr "Файл кэша Martinique Fort Desaix (.UTM3)"
 
 msgid "Reunion RGR92 cache file (.UTM4)"
-msgstr ""
+msgstr "Файл кэша Reunion RGR92 (.UTM4)"
 
 msgid "CadastreGrabber: Illegal url."
-msgstr ""
+msgstr "CadastreGrabber: Няправільная спасылка"
 
 msgid ""
 "Cannot open a new client session.\n"
 "Server in maintenance or temporary overloaded."
 msgstr ""
+"Не атрымоўваецца адкрыць новую сесію кліента.\n"
+"Сервер на абслугоўванні ці часова перагружаны."
 
 msgid ""
 "Town/city {0} not found or not available\n"
 "or action canceled"
 msgstr ""
+"Горад {0} не знойдзены ці недаступны\n"
+"ці дзеянне адменена"
 
 msgid "Choose from..."
-msgstr ""
+msgstr "Абраць з..."
 
 msgid "Select commune"
-msgstr ""
+msgstr "Выберыце камуну"
 
 msgid "Auto sourcing"
-msgstr ""
+msgstr "Аўта крыніцы"
 
 msgid ""
 "Plugin cadastre-fr used the key shortcut F11 for grabbing,\n"
@@ -23858,94 +26177,107 @@ msgid ""
 "The new grabbing key is F10, but you can change the key\n"
 "in the shortcut settings if you want."
 msgstr ""
+"Модуль cadastre-fr выкарыстоўваў для захопу клавішу F11,\n"
+"якая цяпер прызначана для пераключэння ў поўнаэкранны рэжым.\n"
+"Новая клавіша захопу — F10, але пры жаданні яе можна змяніць\n"
+"у наладах Гарачых клавіш."
 
 msgid ""
 "Please enable at least two WMS layers in the cadastre-fr plugin "
 "configuration.\n"
 "Layers ''Building'' and ''Parcel'' added by default."
 msgstr ""
+"Калі ласка, уключыце не меней дзвюх WMS пластоў у наладах модуля cadastre-"
+"fr.\n"
+"Пласты ''Building''і ''Parcel''дадаюцца па змаўчанні."
 
 msgid ""
 "Warning: failed to put option pane dialog always on top. Exception was: {0}"
 msgstr ""
+"Папярэджанне: Не атрымалася вывесці наверх дадатковую панэль. Тэкст памылкі: "
+"{0}"
 
 msgid ""
 "To enable the cadastre WMS plugin, change\n"
 "the current projection to one of the cadastre\n"
 "projections and retry"
 msgstr ""
+"Каб уключыць модуль кадастру WMS,\n"
+"змяніце праекцыю на адну з кадастравых\n"
+"праекцый і паспрабуйце яшчэ раз"
 
 msgid "Change the current projection"
-msgstr ""
+msgstr "Змяніць бягучую праекцыю"
 
 msgid "Replace original background by JOSM background color."
-msgstr ""
+msgstr "Памяняць арыгінальны фон на колер фону JOSM."
 
 msgid "Reverse grey colors (for black backgrounds)."
-msgstr ""
+msgstr "Развярнуць шкалу шэрых колераў (для чорнага фону)."
 
 msgid "Set background transparent."
-msgstr ""
+msgstr "Усталяваць празрысты фон."
 
 msgid "Draw boundaries of downloaded data."
-msgstr ""
+msgstr "Адлюстраваць межы запампаваных дадзеных."
 
 msgid "Disable image cropping during georeferencing."
-msgstr ""
+msgstr "Адключыць абразанне малюнкаў пры геапрывязцы"
 
 msgid "Use \"Tableau d''assemblage\""
-msgstr ""
+msgstr "Выкарыстоўваць \"Tableau d''assemblage\""
 
 msgid "Replace grey shades by white color only"
-msgstr ""
+msgstr "Замяніць адценні шэрага толькі белым колерам"
 
 msgid "Select first WMS layer in list."
-msgstr ""
+msgstr "Спачатку абярыце пласт WMS у спісе."
 
 msgid "Don''t use relation for addresses (but \"addr:street\" on elements)."
 msgstr ""
+"Не выкарыстоўваць адносіны для адрасоў (аднак, \"addr:street\" на элементах)."
 
 msgid "off"
-msgstr ""
+msgstr "выкл."
 
 msgid "25 m"
-msgstr ""
+msgstr "25 м"
 
 msgid "50 m"
-msgstr ""
+msgstr "50 м"
 
 msgid "100 m"
-msgstr ""
+msgstr "100 м"
 
 msgid "symbol"
-msgstr ""
+msgstr "знак"
 
 msgid "parcel"
-msgstr ""
+msgstr "участак"
 
 msgid "parcel number"
-msgstr ""
+msgstr "нумар участку"
 
 msgid "address"
-msgstr ""
+msgstr "адрас"
 
 msgid "locality"
-msgstr ""
+msgstr "раён"
 
 msgid "section"
-msgstr ""
+msgstr "частка"
 
 msgid "commune"
-msgstr ""
+msgstr "камуна"
 
 msgid "Enable automatic caching."
-msgstr ""
+msgstr "Уключыць аўтаматычнае кэшаванне."
 
 msgid "Max. cache size (in MB)"
-msgstr ""
+msgstr "Макс. памер кэша (МБ)"
 
 msgid "French cadastre WMS"
-msgstr ""
+msgstr "WMS французскага кадастра"
 
 msgid ""
 "A special handler of the French cadastre wms at "
@@ -23956,1335 +26288,1429 @@ msgid ""
 "http://www.cadastre.gouv.fr/scpc/html/CU_01_ConditionsGenerales_fr.html</a> "
 "<BR>before any upload of data created by this plugin."
 msgstr ""
+"Адмысловы апрацоўнік французскага кадастра WMS на www.cadastre.gouv.fr <BR> "
+"<BR> Калі ласка, прачытайце ўмовы выкарыстання тут (па-французску): <br> <A "
+"HREF = \"http://www. "
+"cadastre.gouv.fr/scpc/html/CU_01_ConditionsGenerales_fr.html \"> "
+"http://www.cadastre.gouv.fr/scpc/html/CU_01_ConditionsGenerales_fr.html </A> "
+"<BR> да перадачы на сервер якіх-небудзь дадзеных, створаных гэтым модулем."
 
 msgid "<html>Value of key \"source\" when autosourcing is enabled</html>"
-msgstr ""
+msgstr "<html>Значэнне тэга \"source\" калі ўключаны аўтакрыніцы</html>"
 
 msgid ""
 "Replace the original white background by the background color defined in "
 "JOSM preferences."
 msgstr ""
+"Памяняць зыходны белы фон на фон з колерам, зададзеным у наладах JOSM."
 
 msgid ""
 "Invert the original black and white colors (and all intermediate greys). "
 "Useful for texts on dark backgrounds."
 msgstr ""
+"Інвертаваць арыгінальныя чорна-белыя колеры (і ўсе прамежкавыя шэрыя). "
+"Карысна для тэкстаў на цёмным фоне."
 
 msgid "Allows multiple layers stacking"
-msgstr ""
+msgstr "Дазваляе накладваць некалькі пластоў"
 
 msgid "Set WMS layers transparency. Right is opaque, left is transparent."
 msgstr ""
+"Усталяваць празрыстасць пластоў WMS. Справа непразрысты, злева празрысты."
 
 msgid "Draw a rectangle around downloaded data from WMS server."
-msgstr ""
+msgstr "Намаляваць прастакутнік вакол дадзеных, запампаваных з сервера WMS."
 
 msgid "Image resolution:"
-msgstr ""
+msgstr "Разрозненне выявы:"
 
 msgid "High resolution (1000x800)"
-msgstr ""
+msgstr "Высокае разрозненне (1000x800)"
 
 msgid "Medium resolution (800x600)"
-msgstr ""
+msgstr "Сярэдняе разрозненне (800x600)"
 
 msgid "Low resolution (600x400)"
-msgstr ""
+msgstr "Нізкае разрозненне (600x400)"
 
 msgid "Image filter interpolation:"
-msgstr ""
+msgstr "Інтэрпаляцыйны фільтр малюнка:"
 
 msgid "Nearest-Neighbor (fastest) [ Default ]"
-msgstr ""
+msgstr "Бліжэйшы-Сусед (вельмі хутка) [тыпова]"
 
 msgid "Bilinear (fast)"
-msgstr ""
+msgstr "Білінейная (хутка)"
 
 msgid "Bicubic (slow)"
-msgstr ""
+msgstr "Бікубічная (павольна)"
 
 msgid "Vector images grab multiplier:"
-msgstr ""
+msgstr "Каэфіцыент захопу вектарных малюнкаў:"
 
 msgid "Grab one image full screen"
-msgstr ""
+msgstr "Захапіць увесь экран у адзін малюнак"
 
 msgid "Grab smaller images (higher quality but use more memory)"
 msgstr ""
+"Захапіць дробныя малюнкі (высокая якасць, але выкарыстоўвае больш памяці)"
 
 msgid "Fixed size square (default is 100m)"
-msgstr ""
+msgstr "Фіксаваны памер плошчы (звычайна 100 м)"
 
 msgid "Fixed size (from 25 to 1000 meters)"
-msgstr ""
+msgstr "Фіксаваны памер (ад 25 да 1000 метраў)"
 
 msgid "Layers:"
-msgstr ""
+msgstr "Пласты:"
 
 msgid "Sea, rivers, swimming pools."
-msgstr ""
+msgstr "Мора, рэкі, плавальныя басейны"
 
 msgid "Buildings, covers, underground constructions."
-msgstr ""
+msgstr "Будынкі, сховішчы, падземныя збудаванні."
 
 msgid "Symbols like cristian cross."
-msgstr ""
+msgstr "Сімвал, напрыклад хрысціянскі крыж."
 
 msgid "Parcels."
-msgstr ""
+msgstr "Участкі."
 
 msgid "Parcels numbers, street names."
-msgstr ""
+msgstr "Нумары ўчасткаў, назвы вуліц."
 
 msgid "Address, houses numbers."
-msgstr ""
+msgstr "Адрасы, нумары хат."
 
 msgid "Locality, hamlet, place."
-msgstr ""
+msgstr "Населеныя пункты, вёскі, мясцовасці"
 
 msgid "Cadastral sections and subsections."
-msgstr ""
+msgstr "Часткі і падпадзелы кадастра."
 
 msgid "Municipality administrative borders."
-msgstr ""
+msgstr "Муніцыпальныя адміністрацыйныя межы."
 
 msgid "Raster images grab multiplier:"
-msgstr ""
+msgstr "Каэфіцыент захопу растравых малюнкаў:"
 
 msgid ""
 "Add the \"Tableau(x) d''assemblage\" in the list of cadastre sheets to grab."
 msgstr ""
+"Дадаць \"Tableau(x) d''assemblage\" у спіс кадастровых лістоў для захопу."
 
 msgid "Replace greyscale by white color (smaller files and memory usage)."
 msgstr ""
+"Замяніць адценні шэрага белым колерам (памяншае памер файла і "
+"выкарыстоўваемай памяці)."
 
 msgid "Display crosspieces:"
-msgstr ""
+msgstr "Паказаць перакрыжаванні:"
 
 msgid "Allows an automatic caching"
-msgstr ""
+msgstr "Дазваляе аўтаматычнае кэшаванне"
 
 msgid "Oldest files are automatically deleted when this size is exceeded"
 msgstr ""
+"Больш старыя файлы аўтаматычна выдаляюцца, калі гэты памер перавышаны"
 
 msgid ""
 "Automatically selects the first WMS layer if multiple layers exist when "
 "grabbing."
 msgstr ""
+"Аўтаматычна выбіраецца першы пласт WMS падчас захопу, калі існуе некалькі "
+"пластоў."
 
 msgid "Enable this to use the tag \"add:street\" on nodes."
-msgstr ""
+msgstr "Дазволіць пры гэтым выкарыстоўваць тэг \"add:street\" на кропках."
 
 msgid "Unexpected file extension. {0}"
-msgstr ""
+msgstr "Неспадзяванае пашырэнне файла. {0}"
 
 msgid "Add \"source=...\" to elements?"
-msgstr ""
+msgstr "Дадаць \"source=...\" да элементаў?"
 
 msgid "Downloading {0}"
-msgstr ""
+msgstr "Спампоўваецца {0}"
 
 msgid "Contacting WMS Server..."
-msgstr ""
+msgstr "Злучэнне з серверам WMS..."
 
 msgid "Create buildings"
-msgstr ""
+msgstr "Стварэнне будынкаў"
 
 msgid ""
 "To avoid cadastre WMS overload,\n"
 "building import size is limited to 1 km2 max."
 msgstr ""
+"Каб пазбегнуць перагрузкі кадастру WMS,\n"
+"памер імпартуемага будынка абмежаваны, да 1 кв.км."
 
 msgid "Please, enable auto-sourcing and check cadastre millesime."
-msgstr ""
+msgstr "Калі ласка, уключыце аўта-крыніцы і праверце марачны кадастр"
 
 msgid "Extract SVG ViewBox..."
-msgstr ""
+msgstr "Выняць SVG ViewBox..."
 
 msgid "Extract best fitting boundary..."
-msgstr ""
+msgstr "Выняць лепшае размяшчэнне мяжы"
 
 msgid "Create boundary"
-msgstr ""
+msgstr "Стварыць межы"
 
 msgid "Contacting cadastre WMS ..."
-msgstr ""
+msgstr "Злучаюся з кадастрам WMS ..."
 
 msgid "Image already loaded"
-msgstr ""
+msgstr "Выява ўжо загружана"
 
 msgid ""
 "Municipality vectorized !\n"
 "Use the normal Cadastre Grab menu."
 msgstr ""
+"Раён вектарызаваны!\n"
+"Выкарыстоўвайце нармальнае меню захопу кадастру."
 
 msgid ""
 "This commune is not vectorized.\n"
 "Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
+"Гэтая камуна не вектарызавана.\n"
+"Калі ласка, выкарыстоўвайце іншае меню для прывязкі \"Плана-схемы\""
 
 msgid "Extract commune boundary"
-msgstr ""
+msgstr "Выняць межы абшчыны"
 
 msgid "Only on vectorized layers"
-msgstr ""
+msgstr "Толькі на вектарызаваных пластах"
 
 msgid "Cancel current grab"
-msgstr ""
+msgstr "Адмяніць бягучы захоп"
 
 msgid "Cancel current grab (only vector images)"
-msgstr ""
+msgstr "Адмяніць бягучую вобласць (толькі вектарныя малюнкі)"
 
 msgid "Cadastre grab"
-msgstr ""
+msgstr "Кадастравы захоп"
 
 msgid "Download Image from French Cadastre WMS"
-msgstr ""
+msgstr "Запампаваць малюнак з WMS французскага кадастра"
 
 msgid "Cadastre: {0}"
-msgstr ""
+msgstr "Кадастр: {0}"
 
 msgid "Georeference an image"
-msgstr ""
+msgstr "Геапрывязка выявы"
 
 msgid "Grab non-georeferenced image"
-msgstr ""
+msgstr "Захапіць непрывязаную да каардынат выяву"
 
 msgid "Georeferencing interrupted"
-msgstr ""
+msgstr "Геапрывязка перарвана"
 
 msgid ""
 "This image contains georeference data.\n"
 "Do you want to use them ?"
 msgstr ""
+"Гэта выява змяшчае дадзеныя геаспасылак.\n"
+"Вы хочаце скарыстацца імі?"
 
 msgid "Load layer from cache"
-msgstr ""
+msgstr "Загрузіць пласт з кэша"
 
 msgid "Load location from cache (only if cache is enabled)"
-msgstr ""
+msgstr "Загрузіць размяшчэнне з кэша (толькі калі кэш уключаны)"
 
 msgid "{0} not allowed with the current projection"
-msgstr ""
+msgstr "{0} не дазволена ў бягучай праекцыі"
 
 msgid ""
 "Cannot load cache {0} which is not compatible with current projection zone"
 msgstr ""
+"Немагчыма загрузіць кэш {0}, які не сумяшчальны з бягучай зонай праекцыі"
 
 msgid ""
 "Selected file {0} is not a cache file from this plugin (invalid extension)"
 msgstr ""
+"Абраны файл {0} гэта не кэш-файл з гэтага модуля (няслушнае пашырэнне)"
 
 msgid "The location {0} is already on screen. Cache not loaded."
-msgstr ""
+msgstr "Становішча {0} ужо на экране. Кэш не загружаны."
 
 msgid "(optional)"
-msgstr ""
+msgstr "(не абавязкова)"
 
 msgid "Change location"
-msgstr ""
+msgstr "Змяніць размяшчэнне"
 
 msgid "Set a new location for the next request"
-msgstr ""
+msgstr "Усталяваць новае месца для наступнага запыту"
 
 msgid "Add a new municipality layer"
-msgstr ""
+msgstr "Дадаць новы муніцыпальны пласт"
 
 msgid "Commune"
-msgstr ""
+msgstr "Камуна"
 
 msgid ""
 "<html>Enter the town,village or city name.<br>Use the syntax and punctuation "
 "known by www.cadastre.gouv.fr .</html>"
 msgstr ""
+"<html>Калі ласка, увядзіце назву сяла, вёскі ці горада.<br>Выкарыстоўвайце "
+"сінтаксіс і пунктуацыю, апублікаваную на www.cadastre.gouv.fr</html>"
 
 msgid "Departement"
-msgstr ""
+msgstr "Дэпартамент"
 
 msgid "<html>Departement number (optional)</html>"
-msgstr ""
+msgstr "<html>Нумар дэпартамента (не абавязкова)</html>"
 
 msgid "Add new layer"
-msgstr ""
+msgstr "Дадаць новы пласт"
 
 msgid "Open Cadastre Preferences"
-msgstr ""
+msgstr "Налады Open Cadastre"
 
 msgid "Refine georeferencing"
-msgstr ""
+msgstr "Удакладніць прывязку"
 
 msgid "Improve georeferencing (only raster images)"
-msgstr ""
+msgstr "Паляпшэнне прывязкі (толькі растравыя малюнкі)"
 
 msgid "Reset cookie"
-msgstr ""
+msgstr "Скінуць кукі."
 
 msgid "Get a new cookie (session timeout)"
-msgstr ""
+msgstr "Атрымаць новыя файлы кукі (сесія скончылася)"
 
 msgid "Save image as..."
-msgstr ""
+msgstr "Захаваць малюнак як..."
 
 msgid "PNG files (*.png)"
-msgstr ""
+msgstr "Файлы PNG (*.png)"
 
 msgid "GeoTiff files (*.tif)"
-msgstr ""
+msgstr "Файлы GeoTiff (*.tif)"
 
 msgid "Export image (only raster images)"
-msgstr ""
+msgstr "Экспартаваць малюнак (толькі растравыя малюнкі)"
 
 msgid ""
 "Click first corner for image cropping\n"
 "(two points required)"
 msgstr ""
+"Адзначце першы кут для абразання малюнка\n"
+"(Патрабуецца адзначыць дзве кропкі)"
 
 msgid "Image cropping"
-msgstr ""
+msgstr "Абразаць малюнак"
 
 msgid ""
 "Click first Lambert crosspiece for georeferencing\n"
 "(two points required)"
 msgstr ""
+"Адзначце першую папярочку Lambert для геапрывязкі\n"
+"(Усяго трэба дзве кропкі)"
 
 msgid "Image georeferencing"
-msgstr ""
+msgstr "Геапрывязка выявы"
 
 msgid ""
 "Do you want to cancel completely\n"
 "or just retry "
 msgstr ""
+"Вы жадаеце адмяніць цалкам\n"
+"ці толькі паспрабаваць ізноў "
 
 msgid ""
 "Ooops. I failed to catch all coordinates\n"
 "correctly. Retry please."
 msgstr ""
+"Ой! Не атрымалася правільна атрымаць усё\n"
+"каардынаты. Калі ласка, паспрабуйце зноў."
 
 msgid "Enter cadastre east,north position"
-msgstr ""
+msgstr "Увесці кадастравую пазіцыю ўсход, поўнач"
 
 msgid "(Warning: verify north with arrow !!)"
-msgstr ""
+msgstr "(Папярэджанне: праверце кірунак на поўнач з дапамогай стрэлкі!!)"
 
 msgid "East"
-msgstr ""
+msgstr "Усход"
 
 msgid "I use the mouse"
-msgstr ""
+msgstr "Я выкарыстоўваю мыш"
 
 msgid "Set {0} Lambert coordinates"
-msgstr ""
+msgstr "Усталяваць {0} Lambert каардынаты"
 
 msgid "Click second corner for image cropping"
-msgstr ""
+msgstr "Адзначце другі кут для абразання малюнка"
 
 msgid "Click second Lambert crosspiece for georeferencing"
-msgstr ""
+msgstr "Адзначце другую папярочку Lambert для геапрывязкі"
 
 msgid "Adjust WMS"
-msgstr ""
+msgstr "Падбудаваць WMS"
 
 msgid "Adjust the position of the WMS layer (saved for raster images only)"
-msgstr ""
+msgstr "Налада становішча пласта WMS (захавана толькі для растравых выяў)"
 
 msgid ""
 "More than one WMS layer present\n"
 "Select one of them first, then retry"
 msgstr ""
+"Прысутнічае больш, чым адзін пласт WMS.\n"
+"Выберыце спачатку адзін з іх, а затым паўтарыце."
 
 msgid "Reset offset"
-msgstr ""
+msgstr "Скід зрушэння"
 
 msgid "Reset offset (only vector images)"
-msgstr ""
+msgstr "Скід зрушэння (толькі вектарны малюнак)"
+
+msgid "Blank Layer"
+msgstr "Пусты пласт"
 
 msgid "WMS layer ({0}), {1} tile(s) loaded"
-msgstr ""
+msgstr "пласт WMS ({0}), квадратаў загружана: {1}"
 
 msgid "Is not vectorized."
-msgstr ""
+msgstr "Не вектарызаваны."
 
 msgid "Bounding box: {0}"
-msgstr ""
+msgstr "Рамка: {0}"
 
 msgid "Image size (px): {0}/{1}"
-msgstr ""
+msgstr "Памер выявы (пікс.): {0}/{1}"
 
 msgid "Is vectorized."
-msgstr ""
+msgstr "Вектарызаваны."
 
 msgid "Commune bbox: {0}"
-msgstr ""
+msgstr "Агульны квадрат: {0}"
 
 msgid ""
 "Unsupported cache file version; found {0}, expected {1}\n"
 "Create a new one."
 msgstr ""
+"Непадтрымоўваная версія кэш файла; выяўлена {0}, чакалася {1}\n"
+"Стварыце новы файл."
 
 msgid "Cache Format Error"
-msgstr ""
+msgstr "Памылка фармату кэша"
 
 msgid "Lambert zone {0} in cache incompatible with current Lambert zone {1}"
-msgstr ""
+msgstr "Зона Ламберта {0} у кэшы несумяшчальная з бягучай зонай Ламберта {1}"
 
 msgid "Cache Lambert Zone Error"
-msgstr ""
+msgstr "Памылка кэшавання зоны Ламберта"
 
 msgid "canvec tile helper"
-msgstr ""
+msgstr "Пласт памагатага CanVec"
 
 msgid "Use"
-msgstr ""
+msgstr "Выкарыстоўваць"
 
 msgid "Please select a scheme to use."
-msgstr ""
+msgstr "Абярыце тэму для выкарыстання."
 
 msgid "Color Scheme"
-msgstr ""
+msgstr "Каляровая схема"
 
 msgid "Please select the scheme to delete."
-msgstr ""
+msgstr "Абярыце тэму для выдалення."
 
 msgid "Use the selected scheme from the list."
-msgstr ""
+msgstr "Выкарыстоўваць абраную тэму са спісу."
 
 msgid "Use the current colors as a new color scheme."
-msgstr ""
+msgstr "Выкарыстоўваць бягучыя колеры як новую каляровую тэму."
 
 msgid "Delete the selected scheme from the list."
-msgstr ""
+msgstr "Выдаліць абраную тэму са спісу."
 
 msgid "Color Schemes"
-msgstr ""
+msgstr "Каляровыя схемы"
 
 msgid "Conflate object pair"
-msgstr ""
+msgstr "Аб''яднаць пару аб''ектаў"
 
 msgid "Added {0} object to subject layer"
 msgid_plural "Added {0} objects to subject layer"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Дададзены {0} аб''ект да мэтавага пласта"
+msgstr[1] "Дададзенf {0} аб''екты да мэтавага пласта"
+msgstr[2] "Дададзена {0} аб''ектаў да мэтавага пласта"
 
 msgid "Conflation"
-msgstr ""
+msgstr "Аб''яднанне"
 
 msgid "Activates the conflation plugin"
-msgstr ""
+msgstr "Актываваць модуль conflation"
 
 msgid "Matches"
-msgstr ""
+msgstr "Супадзенні"
 
 msgid "Reference only"
-msgstr ""
+msgstr "Толькі даведкавы пласт"
 
 msgid "Subject only"
-msgstr ""
+msgstr "Толькі мэтавы пласт"
 
 msgid "Matches ({0})"
-msgstr ""
+msgstr "Супадзенні({0})"
 
 msgid "Reference only ({0})"
-msgstr ""
+msgstr "Толькі даведкавы пласт ({0})"
 
 msgid "Subject only ({0})"
-msgstr ""
+msgstr "Толькі мэтавы пласт ({0})"
 
 msgid "Configure"
-msgstr ""
+msgstr "Налада"
 
 msgid "Configure conflation options"
-msgstr ""
+msgstr "Наладзіць параметры аб''яднання"
 
 msgid "Delete {0} conflation matches"
-msgstr ""
+msgstr "Выдаліць {0} пар зліцця"
 
 msgid "Remove {0} unmatched objects"
-msgstr ""
+msgstr "Выдаліць {0} несупадаючых аб''ектаў"
 
 msgid "Remove selected matches"
-msgstr ""
+msgstr "Выдаліць абраныя пары"
 
 msgid "Conflate"
-msgstr ""
+msgstr "Аб’яднаць"
 
 msgid "Conflate selected objects"
-msgstr ""
+msgstr "Аб''яднаць вылучаныя аб''екты"
 
 msgid "Conflation: {0}"
-msgstr ""
+msgstr "Зліццё: {0}"
 
 msgid "Cannot replace geometry."
-msgstr ""
+msgstr "Немагчыма замяніць геаметрыю."
 
 msgid "Zoom to selected primitive(s)"
-msgstr ""
+msgstr "Наблізіцца да абраных прымітываў"
 
 msgid "Select selected primitive(s)"
-msgstr ""
+msgstr "Вылучыць абраныя прымітывы"
 
 msgid "Select the primitives currently selected in the list"
-msgstr ""
+msgstr "Вылучыць прымітывы, якія абраны ў спісе"
 
 msgid "Match finder settings"
-msgstr ""
+msgstr "Налады пошуку супадзенняў"
 
 msgid "Match finder method"
-msgstr ""
+msgstr "Метад пошуку супадзенняў"
 
 msgid "Threshold distance"
-msgstr ""
+msgstr "Парогавая дыстанцыя"
 
 msgid "Distances greater than this will result in a score of zero."
-msgstr ""
+msgstr "Адлегласць больш за пазначаную лічыцца за нуль"
 
 msgid "Centroid distance"
-msgstr ""
+msgstr "Адлегласць паміж геаметрычнымі цэнтрамі"
 
 msgid "Hausdorff distance"
-msgstr ""
+msgstr "Метрыка Хаусдорфа"
 
 msgid "Configure conflation settings"
-msgstr ""
+msgstr "Налада параметраў зліцця"
 
 msgid "Generate matches"
-msgstr ""
+msgstr "Падабраць пары"
 
 msgid "Subject"
-msgstr ""
+msgstr "Мэтавы пласт"
 
 msgid "Selections must be made for both reference and subject."
-msgstr ""
+msgstr "Вылучэнне павінна быць зроблена і на даведкавым і на мэтавым пласце"
 
 msgid "Incomplete selections"
-msgstr ""
+msgstr "Няпоўнае вылучэнне"
 
 msgid "Restore subject selection"
-msgstr ""
+msgstr "Аднавіць вылучэнне на мэтавым пласце"
 
 msgid "Restore reference selection"
-msgstr ""
+msgstr "Аднавіць вылучэнне на даведкавым пласце"
 
 msgid "Freeze subject selection"
-msgstr ""
+msgstr "Заблакаваць вылучэнне ў мэтавым пласце"
 
 msgid "No valid OSM data layer present."
-msgstr ""
+msgstr "Няма прыдатнага пласта дадзеных OSM."
 
 msgid "Error freezing selection"
-msgstr ""
+msgstr "Памылка пры замарозцы вылучэння"
 
 msgid "Nothing is selected, please try again."
-msgstr ""
+msgstr "Нічога не абрана, паспрабуйце зноў."
 
 msgid "Empty selection"
-msgstr ""
+msgstr "Нічога не вылучана"
 
 msgid "Invalid reference or subject"
-msgstr ""
+msgstr "Няслушны аб''ект даведкавага або мэтавага пласта"
 
 msgid "Address"
-msgstr ""
+msgstr "Адрас"
 
 msgid "Split area"
-msgstr ""
+msgstr "Падзяліць вобласць"
 
 msgid "Splits an area by an untagged way."
-msgstr ""
+msgstr "Падзяляе палігон лініяй без тэгаў"
 
 msgid ""
 "The selected area cannot be splitted, because it is a member of some "
 "relation.\n"
 "Remove the area from the relation before splitting it."
 msgstr ""
+"Выдзелены палігон не можа быць разрэзаны, таму што ён з''яўляецца "
+"ўдзельнікам адносін.\n"
+"Выдаліце палігон з адносін, перш чым разрэзаць яго."
 
 msgid "TangoGPS Files (*.log)"
-msgstr ""
+msgstr "TangoGPS Файлы (*.log)"
 
 msgid "Coordinates imported: "
-msgstr ""
+msgstr "Каардынаты імпартаваны: "
 
 msgid "Format errors: "
-msgstr ""
+msgstr "Памылкі фармату: "
 
 msgid "TangoGPS import success"
-msgstr ""
+msgstr "Імпарт TangoGPS паспяхова скончаны"
 
 msgid "TangoGPS import failure!"
-msgstr ""
+msgstr "Імпарт TangoGPS скончаны памылкай!"
 
 msgid "TCX Files (*.tcx)"
-msgstr ""
+msgstr "Файлы TCX (*.tcx)"
 
 msgid "Download along..."
-msgstr ""
+msgstr "Запампаваць з сервера ўздоўж..."
 
 msgid "Download OSM data along the selected ways."
-msgstr ""
+msgstr "Запампаваць з сервера дадзеныя OSM уздоўж вылучаных ліній."
 
 msgid "Download Along"
-msgstr ""
+msgstr "Запампаваць уздоўж"
 
 msgid "Please select 1 or more ways to download along"
 msgstr ""
+"Вылучыце адну ці некалькі ліній, уздоўж якіх неабходна запампаваць дадзеныя"
 
 msgid "Download from OSM along selected ways"
-msgstr ""
+msgstr "Запампаваць дадзеныя з OSM уздоўж вылучаных ліній"
 
 msgid "{0} intermediate nodes to download."
-msgstr ""
+msgstr "{0} прамежкавых кропак для загрузкі."
 
 msgid "between {0} {1} and {2} {3}"
-msgstr ""
+msgstr "паміж {0} {1} і {2} {3}"
 
 msgid "  adding {0} {1}"
-msgstr ""
+msgstr "  дадаць {0} {1}"
 
 msgid "Layer for editing GPX tracks"
-msgstr ""
+msgstr "Пласт для рэдагавання GPX трэкаў"
 
 msgid "Convert to GPX layer with anonymised time"
-msgstr ""
+msgstr "Пераўтварыць у GPX пласт з абезасобленым часам"
 
 msgid "EditGpx"
-msgstr ""
+msgstr "EditGpx"
 
 msgid "edit gpx tracks"
-msgstr ""
+msgstr "Правіць GPX трэкі"
 
 msgid "Import path from GPX layer"
-msgstr ""
+msgstr "Імпартаваць шлях з пласта дадзеных GPX"
 
 msgid "Drop existing path"
-msgstr ""
+msgstr "Ачысціць існы шлях"
 
 msgid "No GPX data layer found."
-msgstr ""
+msgstr "Не знойдзена пласта дадзеных GPX"
 
 msgid "External tool error"
-msgstr ""
+msgstr "Вонкавая памылка прылады"
 
 msgid "Error executing the script:"
-msgstr ""
+msgstr "Памылка выканання сцэнара:"
 
 msgid ""
 "Child script have returned invalid data.\n"
 "\n"
 "stderr contents:"
 msgstr ""
+"Даччыны сцэнар вярнуў недапушчальныя дадзеныя.\n"
+"\n"
+"stderr змесціва:"
 
 msgid "exttool:{0}"
-msgstr ""
+msgstr "exttool:{0}"
 
 msgid "External Tool: {0}"
-msgstr ""
+msgstr "Вонкавы сцэнар: {0}"
 
 msgid "Edit tool"
-msgstr ""
+msgstr "Прылада рэдагавання"
 
 msgid "CmdLine:"
-msgstr ""
+msgstr "CmdLine:"
 
 msgid "External tools"
-msgstr ""
+msgstr "Вонкавыя прылады"
 
 msgid "Delete tool \"{0}\"?"
-msgstr ""
+msgstr "Выдаліць прыладу \"{0}\"?"
 
 msgid "Are you sure?"
-msgstr ""
+msgstr "Вы ўпэўнены?"
 
 msgid "New tool..."
-msgstr ""
+msgstr "Новая прылада..."
 
 msgid "Install"
-msgstr ""
+msgstr "Усталяваць"
 
 msgid "Public"
-msgstr ""
+msgstr "Агульны"
 
 msgid "Could not get server response, check logs"
-msgstr ""
+msgstr "Не атрымалася атрымаць адказ сервера, праверце часопісы"
 
 msgid "Failed to login as {0}:"
-msgstr ""
+msgstr "Не атрымалася ўвайсці як {0}:"
 
 msgid "The server did not return user ID"
-msgstr ""
+msgstr "Сервер не вярнуў ID карыстальніка"
 
 msgid "Failed to get messages as {0}:"
-msgstr ""
+msgstr "Памылка атрымання паведамленняў для {0}:"
 
 msgid "GeoChat"
-msgstr ""
+msgstr "GeoChat"
 
 msgid "Open GeoChat panel"
-msgstr ""
+msgstr "Адкрыць панэль GeoChat"
 
 msgid "Zoom in to see messages"
-msgstr ""
+msgstr "Наблізьце, каб убачыць паведамленні"
 
 msgid "Login"
-msgstr ""
+msgstr "Увайсці"
 
 msgid "Enable autologin"
-msgstr ""
+msgstr "Уваходзіць аўтаматычна"
 
 msgid "{0} user"
 msgid_plural "{0} users"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} чалавек"
+msgstr[1] "{0} чалавека"
+msgstr[2] "{0} чалавек"
 
 msgid "not logged in"
-msgstr ""
+msgstr "не ўвайшлі ў сістэму"
 
 msgid "Failed to log in to GeoChat:"
-msgstr ""
+msgstr "Не атрымалася ўвайсці ў GeoChat:"
 
 msgid "Failed to send message:"
-msgstr ""
+msgstr "Не атрымалася адправіць паведамленне:"
 
 msgid "User {0} has left"
-msgstr ""
+msgstr "Карыстальнік {0} адключыўся"
 
 msgid "User {0} is mapping nearby"
-msgstr ""
+msgstr "Карыстальнік {0} малюе карту побач"
 
 msgid "Users mapping nearby:"
-msgstr ""
+msgstr "Карыстальнікі, якія малююць карту побач:"
 
 msgid "Private chat"
-msgstr ""
+msgstr "Прыватны чат"
 
 msgid "Close tab"
-msgstr ""
+msgstr "Зачыніць укладку"
 
 msgid "Logout"
-msgstr ""
+msgstr "Выйсці"
 
 msgid "Clear log"
-msgstr ""
+msgstr "Ачысціць часопіс"
 
 msgid "Show users on map"
-msgstr ""
+msgstr "Паказаць карыстальнікаў на карце"
 
 msgid "Position only"
-msgstr ""
+msgstr "Толькі становішча"
 
 msgid "Position, Time, Date, Speed"
-msgstr ""
+msgstr "Становішча, час, дата, хуткасць"
 
 msgid "Position, Time, Date, Speed, Altitude"
-msgstr ""
+msgstr "Становішча, час, дата, хуткасць, вышыня"
 
 msgid "A By Time"
-msgstr ""
+msgstr "А - Па часе"
 
 msgid "A By Distance"
-msgstr ""
+msgstr "А - Па дыстанцыі"
 
 msgid "B By Time"
-msgstr ""
+msgstr "Б - Па часе"
 
 msgid "B By Distance"
-msgstr ""
+msgstr "Б - Па адлегласці"
 
 msgid "C By Time"
-msgstr ""
+msgstr "В - Па часе"
 
 msgid "C By Distance"
-msgstr ""
+msgstr "В - Па адлегласці"
 
 msgid "Data Logging Format"
-msgstr ""
+msgstr "Фармат пратакалявання дадзеных"
 
 msgid "Disable data logging if speed falls below"
-msgstr ""
+msgstr "Адключэнне пратакалявання дадзеных, калі хуткасць валіцца ніжэй"
 
 msgid "Disable data logging if distance falls below"
-msgstr ""
+msgstr "Адключэнне пратакалявання дадзеных, калі адлегласць становіцца менш"
 
 msgid "Unknown logFormat"
-msgstr ""
+msgstr "Невядомы фармат пратакалявання"
 
 msgid "Port:"
-msgstr ""
+msgstr "Порт:"
 
 msgid "refresh the port list"
-msgstr ""
+msgstr "абнавіць спіс партоў"
 
 msgid "Configure Device"
-msgstr ""
+msgstr "Канфігурацыя прылады"
 
 msgid "Connection Error."
-msgstr ""
+msgstr "Памылка злучэння."
 
 msgid "configure the connected DG100"
-msgstr ""
+msgstr "наладзіць падлучаны DG100"
 
 msgid "delete data after import"
-msgstr ""
+msgstr "выдаліць дадзеныя пасля імпарту"
 
 msgid "Importing data from device."
-msgstr ""
+msgstr "Імпартаванне дадзеных з прылады."
 
 msgid "Importing data from DG100..."
-msgstr ""
+msgstr "Імпартаванне дадзеных з DG100..."
 
 msgid "Error deleting data."
-msgstr ""
+msgstr "Памылка выдалення дадзеных."
 
 msgid "imported data from {0}"
-msgstr ""
+msgstr "Імпартаваны дадзеныя з {0}"
 
 msgid "No data found on device."
-msgstr ""
+msgstr "На прыладзе не знойдзена дадзеных."
 
 msgid "Connection failed."
-msgstr ""
+msgstr "Памылка падлучэння."
 
 msgid ""
 "Cannot load library rxtxSerial. If you need support to install it try "
 "Globalsat homepage at http://www.raphael-mack.de/josm-globalsat-gpx-import-"
 "plugin/"
 msgstr ""
+"Не атрымоўваецца загрузіць бібліятэку rxtxSerial. Калі вам патрэбна дапамога "
+"па ўсталёўцы, атрымаеце яе на галоўнай старонцы GlobalSat http://www.raphael-"
+"mack.de/josm-globalsat-gpx-import-plugin/"
 
 msgid "Globalsat Import"
-msgstr ""
+msgstr "Імпарт з Globalsat"
 
 msgid "Import Data from Globalsat Datalogger DG100 into GPX layer."
-msgstr ""
+msgstr "Імпартаваць дадзеныя з Globalsat Datalogger DG100 на пласт GPX."
 
 msgid "Import"
-msgstr ""
+msgstr "Імпартаваць"
 
 msgid "GPS Blams"
-msgstr ""
+msgstr "Дадзеныя GPS Blam"
 
 msgid "GPSBlam"
-msgstr ""
+msgstr "GPSBlam"
 
 msgid "select gpx points and \"blam!\", find centre and direction of spread"
-msgstr ""
+msgstr "Абярыце кропкі gpx і \"blam!\", знайдзіце цэнтр і кірунак распаўсюду"
 
 msgid "Add EGPX layer"
-msgstr ""
+msgstr "Дадаць EGPX пласт"
 
 msgid "GPX Data"
-msgstr ""
+msgstr "Дадзеныя GPX"
 
 msgid "Classes element below root child level"
-msgstr ""
+msgstr "Элемент класа ніжэй ўзроўню асноўнага нашчадка"
 
 msgid "Class element ({0}) outside classes element"
-msgstr ""
+msgstr "Элемент класа ({0}) па-за элемента класаў"
 
 msgid "Class element without name"
-msgstr ""
+msgstr "Элемент класа без імя"
 
 msgid "Tag element outside basetag and implication elements"
-msgstr ""
+msgstr "Элемент тэга па-за тэгам або датычным элементам"
 
 msgid "Implications element below root child level"
-msgstr ""
+msgstr "Датычны элемент ніжэй ўзроўню асноўнага нашчадка"
 
 msgid "Tag without key"
-msgstr ""
+msgstr "Тэг без ключа"
 
 msgid "Tag without value (key is {0})"
-msgstr ""
+msgstr "Тэг без значэння (ключ роўны {0})"
 
 msgid "Closed classes while it was not open"
-msgstr ""
+msgstr "Зачыненне класаў да іх адкрыцця"
 
 msgid "Closed classes element before all class elements were closed"
-msgstr ""
+msgstr "Закрыццё элемента класаў да закрыцця ўсіх элементаў класа"
 
 msgid "Closed class element while none was open"
-msgstr ""
+msgstr "Закрыццё элемента класа да яго адкрыцця"
 
 msgid "Closed basetags while it was not open"
-msgstr ""
+msgstr "Закрыццё тэга да яго адкрыцця"
 
 msgid "Closed implications while it was not open"
-msgstr ""
+msgstr "Закрыццё датычнага элемента да яго адкрыцця"
 
 msgid "Tag element inside other tag element"
-msgstr ""
+msgstr "Тэг усярэдзіне іншага тэга"
 
 msgid "Invalid opening xml tag <{0}> in state {1}"
-msgstr ""
+msgstr "Няслушны адкрываючы xml тэг <{0}> ў стане {1}"
 
 msgid "Condition isn''t finished at </condition> tag"
-msgstr ""
+msgstr "Умова не завершана тэгам </condition>"
 
 msgid "Closing tag element that was not open"
-msgstr ""
+msgstr "Закрыццё тэга элемента да яго адкрыцця"
 
 msgid "Invalid closing xml tag </{0}> in state {1}"
-msgstr ""
+msgstr "Няслушны зачыняючы xml тэг <{0}> ў стане {1}"
 
 msgid "Some tags have not been closed; now in state {0}"
-msgstr ""
+msgstr "Некаторыя тэгі не закрытыя; знаходзяцца ў стане {0}"
 
 msgid "Key element without attribute k"
-msgstr ""
+msgstr "Ключавы элемент без атрыбуту k"
 
 msgid "Condition is already finished at <{0}>"
-msgstr ""
+msgstr "Умова ўжо скончана на <{0}>"
 
 msgid "Unknown tag for condition: {0}"
-msgstr ""
+msgstr "Невядомы тэг для ўмовы: {0}"
 
 msgid "Element must not have children: {0}"
-msgstr ""
+msgstr "Элемент не павінен мець даччыных элементаў: {0}"
 
 msgid "Condition is already finished at </{0}>"
-msgstr ""
+msgstr "Умова ўжо скончана на </{0}>"
 
 msgid "<and> needs at least one child"
-msgstr ""
+msgstr "<and> патрабуе хаця б адзін даччыны элемент"
 
 msgid "<or> needs at least one child"
-msgstr ""
+msgstr "<or> патрабуе хаця б адзін даччыны элемент"
 
 msgid "<not> needs at least one child"
-msgstr ""
+msgstr "<not> патрэбен хаця б адзін нашчадак"
 
 msgid "Wrong closing tag {0} (</{1}> expected)"
-msgstr ""
+msgstr "Памылковы канцавы тэг {0} (чакаецца </{1}>)"
 
 msgid "Condition {0} not yet finished"
-msgstr ""
+msgstr "Умова {0} не скончана"
 
 msgid "Group not yet evaluated"
-msgstr ""
+msgstr "Група яшчэ не вылічаная"
 
 msgid "Collection must contain at least one condition"
-msgstr ""
+msgstr "У калекцыі павінна быць хоць бы адна ўмова"
 
 msgid "No ruleset has been selected!"
-msgstr ""
+msgstr "Набор правіл не абраны!"
 
 msgid "No ruleset"
-msgstr ""
+msgstr "Няма набору правіл"
 
 msgid ""
 "Syntax exception in access ruleset:\n"
 "{0}"
 msgstr ""
+"Сінтаксічная памылка ў наборы правіл доступу:\n"
+"{0}"
 
 msgid ""
 "File not found:\n"
 "{0}"
 msgstr ""
+"Файл не знойдзены:\n"
+" {0}"
 
 msgid ""
 "Problem when accessing a file:\n"
 "{0}"
 msgstr ""
+"Праблема доступу да файла:\n"
+"{0}"
 
 msgid "File not found:\n"
-msgstr ""
+msgstr "Файл не знойдзены:\n"
 
 msgid "Couldn''t find built-in ruleset {0}"
-msgstr ""
+msgstr "Не знойдзены ўбудаваны набор правіл {0}"
 
 msgid "height (m)"
-msgstr ""
+msgstr "вышыня (м)"
 
 msgid "width (m)"
-msgstr ""
+msgstr "шырыня (м)"
 
 msgid "length (m)"
-msgstr ""
+msgstr "даўжыня (м)"
 
 msgid "speed (km/h)"
-msgstr ""
+msgstr "хуткасць (км/г)"
 
 msgid "weight (t)"
-msgstr ""
+msgstr "маса (т)"
 
 msgid "axleload (t)"
-msgstr ""
+msgstr "нагрузка на вось (т)"
 
 msgid "Bookmark name"
-msgstr ""
+msgstr "Імя закладкі"
 
 msgid "Bookmark name already exists!"
-msgstr ""
+msgstr "Закладка з такім імем ужо існуе!"
 
 msgid "Bookmark name must not contain ''{0}''!"
-msgstr ""
+msgstr "Імя закладкі не павінна ўтрымоўваць ''{0}''!"
 
 msgid "Access class"
-msgstr ""
+msgstr "Клас доступу"
 
 msgid "Access class must not contain ''{0}''!"
-msgstr ""
+msgstr "Клас доступу не павінен утрымоўваць ''{0}''!"
 
 msgid "Access types"
-msgstr ""
+msgstr "Тыпы доступу"
 
 msgid "Vehicle properties"
-msgstr ""
+msgstr "Уласцівасці транспартнага сродку"
 
 msgid "Road requirements"
-msgstr ""
+msgstr "Патрабаванні да дарогі"
 
 msgid "Max. incline up (%, pos.)"
-msgstr ""
+msgstr "Макс. уздым (%, pos.)"
 
 msgid "Maximum incline the vehicle can go up"
-msgstr ""
+msgstr "Максімальны ўхіл, па якім транспартны сродак можа падняцца"
 
 msgid "Max. incline down (%, pos.)"
-msgstr ""
+msgstr "Макс. спуск (%, pos.)"
 
 msgid "Maximum incline the vehicle can go down"
-msgstr ""
+msgstr "Максімальны ўхіл, па якім транспартны сродак можа спусціцца"
 
 msgid "Surface blacklist"
-msgstr ""
+msgstr "Чорны спіс дарожных пакрыццяў"
 
 msgid ""
 "List of surfaces the vehicle cannot use, values are separated by semicolons "
 "(;)"
 msgstr ""
+"Пералік тыпаў паверхні, не прыдатных для руху транспартных сродкаў, значэнні "
+"падзяляюцца (;)"
 
 msgid "max. tracktype grade"
-msgstr ""
+msgstr "макс. клас дарожнага пакрыцця"
 
 msgid "Worst tracktype (1-5) the vehicle can still use, 0 for none"
 msgstr ""
+"Найгоршае дарожнае пакрыццё (1-5), якое транспартны сродак ўсё яшчэ можа "
+"выкарыстоўваць, 0 ні для аднаго"
 
 msgid "Change bookmark"
-msgstr ""
+msgstr "Змяніць закладку"
 
 msgid "Edit access parameters"
-msgstr ""
+msgstr "Рэдагаваць параметры доступу"
 
 msgid "Graph View Dialog"
-msgstr ""
+msgstr "Дыялог GraphView"
 
 msgid "Open the dialog for graph view configuration."
-msgstr ""
+msgstr "Адкрыць дыялог для прагляду графіка канфігурацыі."
 
 msgid "default"
-msgstr ""
+msgstr "па змаўчанні"
 
 msgid "end nodes"
-msgstr ""
+msgstr "Канчатковыя кропкі"
 
 msgid "incline"
-msgstr ""
+msgstr "ухіл"
 
 msgid "Ruleset:"
-msgstr ""
+msgstr "Набор правіл:"
 
 msgid "Parameters:"
-msgstr ""
+msgstr "Параметры:"
 
 msgid "Coloring:"
-msgstr ""
+msgstr "Колеры:"
 
 msgid "Create/update graph"
-msgstr ""
+msgstr "Стварыць/абнавіць графік"
 
 msgid "Graphview"
-msgstr ""
+msgstr "Параметры GraphView"
 
 msgid "Settings for the Graphview plugin that visualizes routing graphs."
 msgstr ""
+"Налады модуля GraphView, які стварае пласт з візуалізацыяй інфармацыі пра "
+"маршрутызацыю ў выглядзе дарожнага графа."
 
 msgid "Ruleset"
-msgstr ""
+msgstr "Набор правіл"
 
 msgid "Use built-in rulesets"
-msgstr ""
+msgstr "Выкарыстоўваць убудаваныя наборы правіл"
 
 msgid "External ruleset directory:"
-msgstr ""
+msgstr "Каталог набору правіл:"
 
 msgid "Select directory"
-msgstr ""
+msgstr "Абраць каталог"
 
 msgid "Vehicle"
-msgstr ""
+msgstr "Транспартны сродак"
 
 msgid "Restore defaults"
-msgstr ""
+msgstr "Аднавіць па змаўчанні"
 
 msgid "Visualization"
-msgstr ""
+msgstr "Візуалізацыя"
 
 msgid "Draw directions separately"
-msgstr ""
+msgstr "Маляваць кірункі паасобна"
 
 msgid "Node color"
-msgstr ""
+msgstr "Колер вузла"
 
 msgid "Arrow color"
-msgstr ""
+msgstr "Колер стрэлкі"
 
 msgid "Arrowhead fill color"
-msgstr ""
+msgstr "Колер залівання стрэлкі"
 
 msgid "Arrowhead placement"
-msgstr ""
+msgstr "Становішча наканечніка стрэлкі"
 
 msgid "New bookmark"
-msgstr ""
+msgstr "Новая закладка"
 
 msgid "Really delete \"{0}\"?"
-msgstr ""
+msgstr "Сапраўды выдаліць \"{0}\"?"
 
 msgid "Bookmark deletion"
-msgstr ""
+msgstr "Выдаленне закладкі"
 
 msgid ""
 "Really restore default bookmarks?\n"
 "All manually added or edited bookmarks will be lost!"
 msgstr ""
+"Сапраўды аднавіць тыповыя закладкі?\n"
+"Усе дададзеныя ўручную або скарэкціраваныя закладкі будуць страчаныя!"
 
 msgid "Bookmark reset"
-msgstr ""
+msgstr "Пераўсталёўка закладак"
 
 msgid "Choose node color"
-msgstr ""
+msgstr "Выбар колеру вузла"
 
 msgid "Choose arrow color"
-msgstr ""
+msgstr "Абярыце колер стрэлак"
 
 msgid "Choose arrowhead fill color"
-msgstr ""
+msgstr "Выбар колеру залівання наканечніка стрэлкі"
 
 msgid "Routing graph calculated by the GraphView plugin"
-msgstr ""
+msgstr "Дарожны граф разлічаны модулем GraphView"
 
 msgid "GraphView layer is not mergable"
-msgstr ""
+msgstr "Пласт графа ня аб''ядноўваецца з іншымі пластамі"
 
 msgid "graphview default node"
-msgstr ""
+msgstr "GraphView: вузлы"
 
 msgid "graphview default segment"
-msgstr ""
+msgstr "тыповы адрэзак graphview"
 
 msgid "graphview arrowhead core"
-msgstr ""
+msgstr "GraphView: стрэлкі"
 
 msgid ""
 "Weights must be given as positive decimal numbers with unit \"t\" or without "
 "unit."
 msgstr ""
+"Вагу трэба ўказваць станоўчым дзесятковым лікам разам з адзінкай вымярэння "
+"\"t\" ці без яе."
 
 msgid ""
 "Lengths must be given as positive decimal numbers with unit \"m\", \"km\", "
 "\"mi\" or without unit.\n"
 "Alternatively, the format FEET'' INCHES\" can be used."
 msgstr ""
+"Даўжыня павінна быць зададзена дадатнымі лікамі з адзінкай вымярэння \"m\", "
+"\"km\", \"mi\" ці без яе.\n"
+"Акрамя таго, можа быць скарыстаны фармат ФУТЫ'' ЦАЛІ\" (2'' 7\")."
 
 msgid ""
 "Speeds should be given as numbers without unit or as numbers followed by "
 "\"mph\"."
 msgstr ""
+"Хуткасць павінна быць зададзена дадатнымі лікамі без адзінак вымярэння ці як "
+"лікі з \"mph\"."
 
 msgid ""
 "Inclines must be given as positive decimal numbers with followed by \"%\"."
-msgstr ""
+msgstr "Ухіл павінен быць зададзены дадатнымі лікамі  са знакам \"%\"."
 
 msgid "Tracktype grades must be given as integers between 0 and 5."
 msgstr ""
+"Класы дарожнага пакрыцця павінна быць зададзены цэлымі лікамі ад 0 да 5."
 
 msgid ""
 "Surface values must not contain any of the following characters: '','', '' "
 "'{' '',  '' '}' '', ''='', ''|''"
 msgstr ""
+"Значэнні дарожных пакрыццяў не павінны ўтрымоўваць наступныя знакі: '','', "
+"'' '{' '',  '' '}' '', ''='', ''|''"
 
 msgid "Imagery XML Files"
-msgstr ""
+msgstr "XML файлы здымкаў"
 
 msgid "Save Imagery XML file"
-msgstr ""
+msgstr "Захаваць XML файл здымкаў"
 
 msgid "XML Imagery Bounds"
-msgstr ""
+msgstr "XML межы здымкаў"
 
 msgid "Generate Imagery XML bounds for the selection"
-msgstr ""
+msgstr "Стварыць XML межы здымкаў па вылучэнні"
 
 msgid "edit bounds for selected defaults"
-msgstr ""
+msgstr "змяніць межы для абраных  налад па змаўчанні"
 
 msgid "Download imagery XML bounds"
-msgstr ""
+msgstr "Загрузіць межы здымкаў у фармаце XML"
 
 msgid ""
 "Validating error in file {0}:\n"
 "{1}\n"
 "Do you want to continue without validating the file ?"
 msgstr ""
+"Праверка памылак у файле {0}:\n"
+"{1}\n"
+"Жадаеце працягнуць без праверкі файла?"
 
 msgid "Open Imagery XML file"
-msgstr ""
+msgstr "Адкрыць XML файл здымкаў"
 
 msgid "Calibration Layer"
-msgstr ""
+msgstr "Калібравальны пласт"
 
 msgid "A deprecated calibration geometry of {0} nodes by {1}"
-msgstr ""
+msgstr "Састарэлая калібравальная геаметрыя з {0} вузлоў, створаная {1}"
 
 msgid "A calibration geometry of {0} nodes by {1}"
-msgstr ""
+msgstr "Калібравальная геаметрыя з {0} вузлоў, створаная {1}"
 
 msgid "Change Color"
-msgstr ""
+msgstr "Змяніць колер"
 
 msgid "Deprecate Offset"
-msgstr ""
+msgstr "Выдаліць зрушэнне"
 
 msgid "Are you sure this imagery offset is wrong?"
-msgstr ""
+msgstr "Вы ўпэўненыя, што гэта зрушэнне здымка няправільна?"
 
 msgid "Are you sure this calibration geometry is aligned badly?"
-msgstr ""
+msgstr "Вы ўпэўнены, што гэта калібравальная геаметрыя дрэнна прывязана?"
 
 msgid "Warning: deprecation is basically irreversible!"
-msgstr ""
+msgstr "Увага: выдаленне практычна незваротна"
 
 msgid "To store imagery offsets you must be a registered OSM user."
-msgstr ""
+msgstr "Для захавання зрушэнняў зарэгіструйцеся ў OSM."
 
 msgid ""
 "Please enter the reason why you mark this imagery offset as deprecated"
-msgstr ""
+msgstr "Чаму вы адзначаеце гэта зрушэнне здымка як састарэлае?"
 
 msgid ""
 "Please enter the reason why you mark this calibration geometry as deprecated"
-msgstr ""
+msgstr "Чаму вы адзначаеце гэту калібравальную геаметрыю састарэлай?"
 
 msgid "Notifying the server of the deprecation..."
-msgstr ""
+msgstr "Апавяшчаю сервер пра састарэлы запіс..."
 
 msgid "Get Imagery Offset..."
-msgstr ""
+msgstr "Атрымаць зрушэнне здымка..."
 
 msgid "Download offsets for current imagery from a server"
-msgstr ""
+msgstr "Загрузка зрушэнняў для бягучага фону з сервера"
 
 msgid ""
 "No data for this region. Please adjust imagery layer and upload an offset."
 msgstr ""
+"У акрузе няма дадзеных. Калі ласка, прывяжыце падкладку і адпраўце зрушэнне "
+"на сервер."
 
 msgid "Loading imagery offsets..."
-msgstr ""
+msgstr "Загружаю зрушэнні..."
 
 msgid "Error processing XML response: {0}"
-msgstr ""
+msgstr "Памылка апрацоўкі XML-адказу: {0}"
 
 msgid "Offset"
-msgstr ""
+msgstr "Зрушэнне"
 
 msgid "Imagery Offset Database"
-msgstr ""
+msgstr "База зрушэнняў здымкаў"
 
 msgid "mm"
-msgstr ""
+msgstr "мм"
 
 msgid "cm"
-msgstr ""
+msgstr "см"
 
 msgid "m"
-msgstr ""
+msgstr "м"
 
 msgid "km"
-msgstr ""
+msgstr "км"
 
 msgid "Calibration geometries"
-msgstr ""
+msgstr "Калібравальныя геаметрыі"
 
 msgid "Deprecated offsets"
-msgstr ""
+msgstr "Састарэлыя зрушэнні"
 
 msgid ""
 "The topmost imagery layer has been shifted to presumably match\n"
 "OSM data in the area. Please check that the offset is still valid\n"
 "by downloading GPS tracks and comparing them and OSM data to the imagery."
 msgstr ""
+"Верхні пласт здымкаў зрушаны і павінен адпавядаць\n"
+"дадзеным OSM у акрузе. Праверце, што зрушэнне яшчэ актуальна,\n"
+"загрузіўшы GPS-трэкі і параўнаўшы іх і дадзеныя OSM са здымкамі."
 
 msgid ""
 "A layer has been added with a calibration geometry. Hide data layers,\n"
 "find the corresponding feature on the imagery layer and move it accordingly."
 msgstr ""
+"Дададзены пласт з калібравальнай геаметрыяй. Схавайце пласты дадзеных,\n"
+"знайдзіце адпаведны аб’ект на здымках і пасуньце іх пад геаметрыю."
 
 msgid "Deprecated by {0} on {1}"
-msgstr ""
+msgstr "Адзначана як састарэлае {1} карыстальнікам {0}"
 
 msgid "Created by {0} on {1}"
-msgstr ""
+msgstr "Створана {1} карыстальнікам {0}"
 
 msgid "Offset Information"
-msgstr ""
+msgstr "Інфармацыя пра зрушэнне"
 
 msgid "Report this offset"
-msgstr ""
+msgstr "Паведаміць мадэратарам"
 
 msgid "You are to notify moderators of this offset. Why?"
-msgstr ""
+msgstr "Вы паведамляеце мадэратарам пра гэты запіс. Чаму?"
 
 msgid "Reporting the offset..."
-msgstr ""
+msgstr "Паведамляю пра зрушэнне..."
 
 msgid "An imagery offset of {0}"
-msgstr ""
+msgstr "Зрушэнне здымка ў {0}"
 
 msgid "Imagery ID"
-msgstr ""
+msgstr "Ідэнтыфікатар падкладкі"
 
 msgid "A calibration geometry of {0} nodes"
-msgstr ""
+msgstr "Калібравальная геаметрыя з {0} вузлоў"
 
 msgid "Determined right here"
-msgstr ""
+msgstr "Вызначана ў гэтым месцы"
 
 msgid "Determined {0} away"
-msgstr ""
+msgstr "Вызначана ў {0}"
 
 msgid "Reason"
-msgstr ""
+msgstr "Чыннік"
 
 msgid "This entry has been reported."
-msgstr ""
+msgstr "Мадэратары папярэджаны."
 
 msgid "Server has rejected the request"
-msgstr ""
+msgstr "Сервер адпрэчыў запыт"
 
 msgid "Unable to connect to the server"
-msgstr ""
+msgstr "Не атрымалася злучыцца з серверам"
 
 msgid "Store Imagery Offset..."
-msgstr ""
+msgstr "Захаваць зрушэнне здымка..."
 
 msgid ""
 "Upload an offset for current imagery (or calibration object geometry) to a "
 "server"
 msgstr ""
+"Адправіць зрушэнне пласта здымкаў (ці геаметрыю калібравальнага аб’екта) на "
+"сервер"
 
 msgid "Store calibration geometry"
-msgstr ""
+msgstr "Захаваць калібравальную геаметрыю"
 
 msgid "Store imagery offset"
-msgstr ""
+msgstr "Захаваць зрушэнне здымка"
 
 msgid ""
 "The selected object can be used as a calibration geometry. What do you "
 "intend to do?"
 msgstr ""
+"Абраны аб’ект, які можа паслужыць асновай для калібравальнай геаметрыі. Што "
+"зрабіць?"
 
 msgid ""
 "The topmost imagery layer has no offset. Are you sure you want to upload "
 "this?"
-msgstr ""
+msgstr "Верхні пласт здымкаў не зрушаны. Захаваць нулявы зрух на серверы?"
 
 msgid ""
 "You are registering an imagery offset. Other users in this area will be able "
@@ -25292,6 +27718,10 @@ msgid ""
 "Please make sure it is as precise as possible, and describe a region this "
 "offset is applicable to."
 msgstr ""
+"Вы захоўваеце зрушэнне здымка. Іншыя карыстальнікі будуць выкарыстоўваць яго "
+"ў маляванні карты\n"
+"гэтага раёна. Пераканайцеся, што яно максімальна дакладна, і апішыце "
+"вобласць, для якой яно працуе."
 
 msgid ""
 "You are registering a calibration geometry. It should be the most precisely "
@@ -25299,116 +27729,122 @@ msgid ""
 "clearly visible boundaries on various satellite imagery. Please describe "
 "this object and its whereabouts."
 msgstr ""
+"Вы захоўваеце калібравальную геаметрыю. Яна павінна быць ідэальна прывязана, "
+"а ў адпаведнага\n"
+"аб’екта выразныя межы і дастатковы для розных здымкаў памер. Апішыце аб’ект "
+"і яго месцазнаходжанне."
 
 msgid "Uploading a new offset..."
-msgstr ""
+msgstr "Захоўваю новае зрушэнне..."
 
 msgid "This string should be 3 to 200 letters long."
-msgstr ""
+msgstr "Гэты радок павінен быць даўжынёй ад 3 да 200 знакаў."
 
 msgid "Adjust imagery"
-msgstr ""
+msgstr "Выраўноўванне падкладкі"
 
 msgid "Adjust the position of the selected imagery layer"
-msgstr ""
+msgstr "Наладзіць зрушэнне абранага пласта здымкаў"
 
 msgid "Please select the imagery layer to adjust."
-msgstr ""
+msgstr "Калі ласка, абярыце пласт са здымкамі для выраўноўвання"
 
 msgid "Start adjusting"
-msgstr ""
+msgstr "Пачаць выраўноўванне"
 
 msgid "There are currently no imagery layer to adjust."
-msgstr ""
+msgstr "Няма даступных пластоў са здымкамі для выраўноўвання"
 
 msgid "No layers to adjust"
-msgstr ""
+msgstr "Няма пластоў для выраўноўвання"
 
 msgid "Normal"
-msgstr ""
+msgstr "Звычайны"
 
 msgid "Rotate 90"
-msgstr ""
+msgstr "Павярнуць на 90°"
 
 msgid "Rotate 180"
-msgstr ""
+msgstr "Павярнуць на 180°"
 
 msgid "Rotate 270"
-msgstr ""
+msgstr "Павярнуць на 270°"
 
 msgid "Previous image"
-msgstr ""
+msgstr "Папярэдні малюнак"
 
 msgid "Next image"
-msgstr ""
+msgstr "Наступны малюнак"
 
 msgid "Rotate left"
-msgstr ""
+msgstr "Павярнуць налева"
 
 msgid "Rotate image left"
-msgstr ""
+msgstr "Круціць малюнак налева"
 
 msgid "Rotate right"
-msgstr ""
+msgstr "Павярнуць направа"
 
 msgid "Rotate image right"
-msgstr ""
+msgstr "Круціць малюнак направа"
 
 msgid "WayPoint Image"
-msgstr ""
+msgstr "Малюначак шляхавой кропкі"
 
 msgid "Display non-geotagged photos"
-msgstr ""
+msgstr "Паказаць фатаграфіі, якія не маюць каардынатаў"
 
 msgid "Imported Images"
-msgstr ""
+msgstr "Імпартаваныя малюнкі"
 
 msgid "Image files (*.jpg, *.jpeg, *.png, *.gif)"
-msgstr ""
+msgstr "Файлы малюнкаў (*.jpg, *.jpeg, *.png, *.gif)"
 
 msgid "Import vector graphics"
-msgstr ""
+msgstr "Імпарт вектарнай графікі"
 
 msgid "Scale:"
-msgstr ""
+msgstr "Маштаб:"
 
 msgid "unit(s) = "
-msgstr ""
+msgstr "адзінкі = "
 
 msgid "Importing..."
-msgstr ""
+msgstr "Імпартаванне..."
 
 msgid "SVG files [ImportVec plugin] (*.svg)"
-msgstr ""
+msgstr "SVG файлы [модуль ImportVec] (*.svg)"
 
 msgid "Please open or create data layer before importing"
-msgstr ""
+msgstr "Адкрыйце ці стварыце пласт дадзеных перад імпартам"
 
 msgid "InfoMode"
-msgstr ""
+msgstr "InfoMode"
 
 msgid "GPX info mode"
-msgstr ""
+msgstr "Рэжым GPX інфармацыі"
 
 msgid ""
 "Move the mouse to show trackpoint info for current layer. Hold shift to "
 "highlight tracks"
 msgstr ""
+"Перамяшчайце мыш, каб паказаць інфармацыю аб кропках трэка для бягучага "
+"пласта. Утрымлівайце Shift для падсвятлення трэкаў."
 
 msgid "Delete this"
-msgstr ""
+msgstr "Выдаліць яго"
 
 msgid "Delete this&older"
-msgstr ""
+msgstr "Выдаліць яго і старэй"
 
 msgid "km/h"
-msgstr ""
+msgstr "км/г"
 
 msgid "Track name: "
-msgstr ""
+msgstr "Імя трэка: "
 
 msgid "Update IRS adjustment layer"
-msgstr ""
+msgstr "Абнавіць Cлой зрушэння IRS"
 
 msgid ""
 "This option creates IRS adjustment layer and a little way inside it. You "
@@ -25416,396 +27852,735 @@ msgid ""
 "Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
 "with [irs rectify] in subject."
 msgstr ""
+"Гэтая функцыя стварае зрух пласта IRS і кароткую лінію-вектар. Спачатку вам "
+"неабходна зрушыць WMS пласт для выраўноўвання.\n"
+"Атрыманы пласт неабходна захаваць з пашырэннем * .osm і выслаць на "
+"me at komzpa.net з тэмай [irs rectify]."
 
 msgid "IRS Adjustment Layer"
-msgstr ""
+msgstr "Пласт зрушэння IRS"
 
 msgid "Channel-Digraph created from the active OSM-Layer"
-msgstr ""
+msgstr "Арграф Каналу створаны з актыўнага пласта OSM"
 
 msgid "Create Channel Digraph"
-msgstr ""
+msgstr "Стварыць арграф каналу"
 
 msgid "this layer is no osm data layer"
-msgstr ""
+msgstr "гэты пласт не з’яўляецца пластом дадзеных OSM"
 
 msgid "Converting OSM graph into Channel Digraph"
-msgstr ""
+msgstr "Пераўтварэнне OSM графа ў арграф каналу"
 
 msgid "filtering ways"
-msgstr ""
+msgstr "фільтраванне ліній"
 
 msgid "creating Channel-Digraph"
-msgstr ""
+msgstr "стварэнне канала арграфа"
 
 msgid "sealing Digraph"
-msgstr ""
+msgstr "ушчыльненне арграфа"
 
 msgid "calculating Strong Connectedness"
-msgstr ""
+msgstr "вылічэнне моцнага злучэння"
 
 msgid "creating DigraphLayer"
-msgstr ""
+msgstr "стварэнне пласта арграфа"
 
 msgid "JunctionChecking"
-msgstr ""
+msgstr "Праверка злучэнняў"
 
 msgid "Open the junctionchecking window."
-msgstr ""
+msgstr "Адчыніць акно праверкі злучэнняў"
 
 msgid "junctions"
-msgstr ""
+msgstr "злучэнні"
 
 msgid "Channel-Digraph creation"
-msgstr ""
+msgstr "Стварэнне канала арграфа"
 
 msgid "seal Channel Digraph"
-msgstr ""
+msgstr "ушчыльненне арграфа канала"
 
 msgid "calculate strong connected channels"
-msgstr ""
+msgstr "вылічэнне моцна звязаных каналаў"
 
 msgid "Junctionchecking/junctions searching"
-msgstr ""
+msgstr "Праверка злучэнняў/пошук злучэнняў"
 
 msgid "order of junction (n):"
-msgstr ""
+msgstr "парадак злучэнняў (n)"
 
 msgid "produce OSM-Relations: junction"
-msgstr ""
+msgstr "стварыць адносіны OSM: злучэнні (junction)"
 
 msgid ""
 "if enabled the plugin produces osm-relations from the junction subgraphs"
-msgstr ""
+msgstr "калі уключаны, модуль стварае адносіны OSM з падграфаў развязак"
 
 msgid "create the channel digraph"
-msgstr ""
+msgstr "стварыць арграф канала"
 
 msgid "Check "
-msgstr ""
+msgstr "Праверыць "
 
 msgid "check the subust for junction properties"
-msgstr ""
+msgstr "праверыць набор на ўласцівасці злучэння"
 
 msgid "Search "
-msgstr ""
+msgstr "Знайсці "
 
 msgid "search for junctions in the channel subset"
-msgstr ""
+msgstr "пошук злучэнняў у наборы каналаў"
 
 msgid ""
 "The marked channels contains a junctioncandidate (white). To test this "
 "candidat mark these channel and press the \"Check\" button again."
 msgstr ""
+"Адзначаныя каналы ўтрымоўваюць кандыдаты на злучэнне (белыя). Для праверкі "
+"гэтага кандыдата адзначце гэты канал і націсніце кнопку \"Праверыць\" ізноў."
 
 msgid "The marked channels are a {0}-ways junction"
-msgstr ""
+msgstr "Адзначаныя каналы - гэта {0}-шляхавыя злучэнні"
 
 msgid "The marked channels are not a junction:"
-msgstr ""
+msgstr "Адзначаныя каналы - гэта не злучэнні:"
 
 msgid "construct channel digraph and search for junctions"
-msgstr ""
+msgstr "пабудаваць арграф канала  і шукаць развязкі"
 
 msgid "Number of {0}-ways junctions found: {1}"
-msgstr ""
+msgstr "Лік знойдзеных {0}-шляхавых злучэнняў: {1}"
 
 msgid "generate all combinations from entrie/exit candidates"
-msgstr ""
+msgstr "стварыць усе камбінацыі з кандыдатаў уваходу/выхаду"
 
 msgid "Direction index ''{0}'' not found"
-msgstr ""
+msgstr "Індэкс кірункаў ''{0}'' не знойдзены"
 
 msgid "The starting location was not within the bbox"
-msgstr ""
+msgstr "Пачатковае становішча за межамі рамкі."
 
 msgid "Looking for shoreline..."
-msgstr ""
+msgstr "Пошук берагавой лініі..."
 
 msgid "{0} nodes so far..."
-msgstr ""
+msgstr "{0} кропак на дадзены момант..."
 
 msgid "Lake Walker."
-msgstr ""
+msgstr "Трасіроўшчык азёр"
 
 msgid "Lake Walker"
-msgstr ""
+msgstr "Трасіроўшчык азёр"
 
 msgid "Error creating cache directory: {0}"
-msgstr ""
+msgstr "Памылка стварэння каталога кэша: {0}"
 
 msgid "Tracing"
-msgstr ""
+msgstr "Трасіроўка"
 
 msgid "checking cache..."
-msgstr ""
+msgstr "праверка кэша..."
 
 msgid "Running vertex reduction..."
-msgstr ""
+msgstr "Спрашчэнне геаметрыі..."
 
 msgid "Running Douglas-Peucker approximation..."
-msgstr ""
+msgstr "Апраксімацыя Douglas-Peucker..."
 
 msgid "Removing duplicate nodes..."
-msgstr ""
+msgstr "Выдаленне паўтаральных кропак..."
 
 msgid "Lakewalker trace"
-msgstr ""
+msgstr "Трасіроўшчык азёр"
 
 msgid "An unknown error has occurred"
-msgstr ""
+msgstr "Адбылася невядомая памылка"
 
 msgid "east"
-msgstr ""
+msgstr "усход"
 
 msgid "northeast"
-msgstr ""
+msgstr "паўночны ўсход"
 
 msgid "north"
-msgstr ""
+msgstr "поўнач"
 
 msgid "northwest"
-msgstr ""
+msgstr "паўночны захад"
 
 msgid "west"
-msgstr ""
+msgstr "захад"
 
 msgid "southwest"
-msgstr ""
+msgstr "паўднёвы захад"
 
 msgid "south"
-msgstr ""
+msgstr "поўдзень"
 
 msgid "southeast"
-msgstr ""
+msgstr "паўднёвы ўсход"
 
 msgid "coastline"
-msgstr ""
+msgstr "берагавая лінія"
 
 msgid "land"
-msgstr ""
+msgstr "зямля"
 
 msgid "Maximum number of segments per way"
-msgstr ""
+msgstr "Максімальная колькасць сегментаў у лініі"
 
 msgid "Maximum number of nodes in initial trace"
-msgstr ""
+msgstr "Максімальная колькасць кропак на эскізе"
 
 msgid "Maximum gray value to count as water (0-255)"
-msgstr ""
+msgstr "Самае светлае адценне шэрага, які лічыць вадой (0-255)"
 
 msgid "Line simplification accuracy (degrees)"
-msgstr ""
+msgstr "Дакладнасць спрашчэння ліній (у градусах)"
 
 msgid "Resolution of Landsat tiles (pixels per degree)"
-msgstr ""
+msgstr "Разрозненне квадратаў Landsat (пікселяў на градус)"
 
 msgid "Size of Landsat tiles (pixels)"
-msgstr ""
+msgstr "Памер квадратаў спадарожнікавых здымкаў (у кропках)"
 
 msgid "Shift all traces to east (degrees)"
-msgstr ""
+msgstr "Ссунуць усе трэкі на ўсход (градусы)"
 
 msgid "Shift all traces to north (degrees)"
-msgstr ""
+msgstr "Ссунуць усе трэкі на поўнач (градусы)"
 
 msgid "Direction to search for land"
-msgstr ""
+msgstr "Кірунак для пошуку сушы"
 
 msgid "Tag ways as"
-msgstr ""
+msgstr "Прызначыць на лініі тэгі:"
 
 msgid "WMS Layer"
-msgstr ""
+msgstr "Пласт WMS"
 
 msgid "Maximum cache size (MB)"
-msgstr ""
+msgstr "Памер кэша (MB)"
 
 msgid "Maximum cache age (days)"
-msgstr ""
+msgstr "Захоўваць кэш (дзён)"
 
 msgid "Source text"
-msgstr ""
+msgstr "Зыходны тэкст"
 
 msgid "Lakewalker Plugin Preferences"
-msgstr ""
+msgstr "Налады модуля Lakewalker"
 
 msgid "A plugin to trace water bodies on Landsat imagery."
-msgstr ""
+msgstr "Модуль для трасіроўкі вадаёмаў па малюнках Landsat."
 
 msgid ""
 "Maximum number of segments allowed in each generated way. Default 250."
 msgstr ""
+"Максімальная колькасць адрэзкаў у ствараемых лініях. Пачатковае значэнне - "
+"250."
 
 msgid ""
 "Maximum number of nodes to generate before bailing out (before simplifying "
 "lines). Default 50000."
 msgstr ""
+"Максімальная колькасць кропак, згенераваных перад ачысткай (да спрашчэння "
+"ліній). Па змаўчанні 50000."
 
 msgid ""
 "Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
 "in the range 0-255. Default 90."
 msgstr ""
+"Максімальнае значэнне шэрага для пазначэння вады (на аснове дадзеных Landsat "
+"IR-1). Можа быць у дыяпазоне 0-255. Па змаўчанні 90."
 
 msgid ""
 "Accuracy of Douglas-Peucker line simplification, measured in "
 "degrees.<br>Lower values give more nodes, and more accurate lines. Default "
 "0.0003."
 msgstr ""
+"Дакладнасць алгарытму спрашчэння ліній Douglas-Peucker, якая вымяраецца ў "
+"градусах.<br>Меншыя значэнні даюць больш кропак і больш дакладныя лініі. Па "
+"змаўчанні 0.0003."
 
 msgid ""
 "Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
 msgstr ""
+"Разрозненне квадратаў з Landsat, пікселяў на градус. Пачатковае значэнне - "
+"4000."
 
 msgid "Size of one landsat tile, measured in pixels. Default 2000."
 msgstr ""
+"Памер аднаго квадрата спадарожнікавага здымка, у пікселях. Па змаўчанні 2000."
 
 msgid "Offset all points in East direction (degrees). Default 0."
-msgstr ""
+msgstr "Ссунуць усе кропкі ва ўсходнім кірунку (у градусах). Па змаўчанні 0."
 
 msgid "Offset all points in North direction (degrees). Default 0."
-msgstr ""
+msgstr "Ссунуць усе кропкі ў паўночным кірунку (у градусах). Па змаўчанні 0."
 
 msgid "Direction to search for land. Default east."
-msgstr ""
+msgstr "Кірунак пошуку зямлі. Па змаўчанні — усход."
 
 msgid "Tag ways as water, coastline, land or nothing. Default is water."
 msgstr ""
+"Прызначыць на лініі тэгі: water (вада), coastline (берагі), land (землі) ці "
+"нічога. Па змаўчанні - вада."
 
 msgid "Which WMS layer to use for tracing against. Default is IR1."
-msgstr ""
+msgstr "Які пласт WMS выкарыстоўваць для трасіроўкі. Па змаўчанні IR1."
 
 msgid "Maximum size of each cache directory in bytes. Default is 300MB"
-msgstr ""
+msgstr "Макс. памер кожнага каталога кэша ў байтах. Па змаўчанні 300 МБ."
 
 msgid "Maximum age of each cached file in days. Default is 100"
-msgstr ""
+msgstr "Макс. узрост кожнага кэшаванага файла ў днях. Па змаўчанні 100 дзён."
 
 msgid "Data source text. Default is Landsat."
-msgstr ""
+msgstr "Значэнне тэга \"source\". Па змаўчанні Landsat."
 
 msgid "Downloading image tile..."
-msgstr ""
+msgstr "Спампоўваецца малюнак квадрата карты..."
 
 msgid "Could not acquire image"
-msgstr ""
+msgstr "Немагчыма атрымаць малюнак"
 
 msgid "Connection Failed"
-msgstr ""
+msgstr "Памылка пры падлучэнні"
 
 msgid "Not connected"
-msgstr ""
+msgstr "Не падлучана"
 
 msgid "Connecting"
-msgstr ""
+msgstr "Падлучэнне"
 
 msgid "Connected"
-msgstr ""
+msgstr "Падлучана"
 
 msgid "no name"
-msgstr ""
+msgstr "без імя"
 
 msgid "Live GPS"
-msgstr ""
+msgstr "Бягучая пазіцыя"
 
 msgid "Show GPS data."
-msgstr ""
+msgstr "Паказаць дадзеныя GPS."
 
 msgid "Status"
-msgstr ""
+msgstr "Стан"
 
 msgid "Way Info"
-msgstr ""
+msgstr "Інфармацыя пра лінію"
 
 msgid "Speed"
-msgstr ""
+msgstr "Хуткасць"
 
 msgid "Course"
-msgstr ""
+msgstr "Курс"
 
 msgid "LiveGPS layer"
-msgstr ""
+msgstr "Пласт LiveGPS"
 
 msgid "Capture GPS Track"
-msgstr ""
+msgstr "Захоп трэка GPS"
 
 msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
+"Звязацца з серверам gpsd і паказаць бягучае становішча на пласце LiveGPS."
 
 msgid "Center Once"
-msgstr ""
+msgstr "Цэнтраваць толькі адзін раз"
 
 msgid "Center the LiveGPS layer to current position."
-msgstr ""
+msgstr "Цэнтраваць пласт LiveGPS на бягучай пазіцыі."
 
 msgid "Auto-Center"
-msgstr ""
+msgstr "Аўта-цэнтраванне"
 
 msgid "Continuously center the LiveGPS layer to current position."
-msgstr ""
+msgstr "Бесперапынна цэнтраваць пласт LiveGPS на бягучай пазіцыі."
 
 msgid "Open MapDust"
-msgstr ""
+msgstr "Адкрыць MapDust"
 
 msgid "MapDust bug reports"
-msgstr ""
+msgstr "Паведамленні пра памылкі MapDust"
 
 msgid "Activates the MapDust bug reporter plugin"
-msgstr ""
+msgstr "Уключае модуль паведамленняў пра памылкі MapDust"
 
 msgid "Missing input data"
-msgstr ""
+msgstr "Уваходныя дадзеныя адсутнічаюць"
+
+msgid "Mapillary Images"
+msgstr "Здымкі Mapillary"
+
+msgid "Mapillary layer"
+msgstr "Mapillary"
+
+msgid "Total images:"
+msgstr "Усяго здымкаў:"
+
+msgid "images"
+msgstr "здымкі"
 
 msgid "Mapillary"
+msgstr "Mapillary"
+
+msgid "Create Mapillary layer"
+msgstr "Стварыць пласт Mapillary"
+
+msgid "Start Mapillary layer"
+msgstr "Запусціць пласт Mapillary"
+
+msgid "Download Mapillary images in current view"
+msgstr "Сцягнуць здымкі Mapillary для бягучага віду"
+
+msgid "Export pictures"
+msgstr "Экспартаваць выявы"
+
+msgid "Export Mapillary pictures"
+msgstr "Экспартаваць выявы Mapillary"
+
+msgid "Export images"
+msgstr "Экспарт здымкаў"
+
+msgid "Import pictures"
+msgstr "Імпартаваць выявы"
+
+msgid "Import local pictures"
+msgstr "Імпартаваць лакальныя выявы"
+
+msgid "Import pictures into Mapillary layer"
+msgstr "Імпартаваць выявы на пласт Mapillary"
+
+msgid "Select pictures"
+msgstr "Выберыце выявы"
+
+msgid "Import pictures into sequence"
+msgstr "Імпартаваць выявы ў паслядоўнасць"
+
+msgid "Import pictures into Mapillary layer in a sequence"
+msgstr "Імпартаваць выявы ў паслядоўнасць у пласце Mapillary"
+
+msgid "Join mode"
+msgstr "Рэжым злучэння"
+
+msgid "Join/unjoin pictures"
+msgstr "Злучыць/раз''яднаць выявы"
+
+msgid "Join Mapillary pictures"
+msgstr "Злучыць выявы Mapillary"
+
+msgid "Upload pictures"
+msgstr "Адаслаць выявы"
+
+msgid "Upload Mapillary pictures"
+msgstr "Адаслаць выявы Mapillary"
+
+msgid "Upload pictures."
+msgstr "Адаслаць выявы."
+
+msgid "Walk mode"
+msgstr "Пешаходны рэжым"
+
+msgid "Start walk mode"
+msgstr "Пачаць пешаходны рэжым"
+
+msgid "Zoom to selected image"
+msgstr "Маштабаваць да вылучанага здымка"
+
+msgid "Zoom to the currently selected Mapillary image"
+msgstr "Наблізіцца да бягучага вылучанага здымка Mapillary"
+
+msgid "Uploaded {0} images"
+msgstr "Адасланыя {0} выяў"
+
+msgid "Approve upload on the website"
+msgstr "Пацвярджаць адпраўку на вэб-сайт"
+
+msgid "View in website"
+msgstr "Паглядзець на вэб-сайце"
+
+msgid "Copy key"
+msgstr "Капіяваць ключ"
+
+msgid "Copy key tag"
+msgstr "Капіяваць тэг"
+
+msgid "Edit on website"
+msgstr "Рэдагаваць на сайце"
+
+msgid "Export all images"
+msgstr "Экспартаваць ўсе здымкі"
+
+msgid "Export selected sequence"
+msgstr "Экспартаваць выбраную паслядоўнасць"
+
+msgid "Export selected images"
+msgstr "Экспартаваць выдзеленыя здымкі"
+
+msgid "Rewrite imported images"
+msgstr "Перазапісаць імпартаваныя выявы"
+
+msgid "Select a folder"
+msgstr "Абярыце каталог"
+
+msgid "Explore"
+msgstr "Агляд"
+
+msgid "Select a directory"
+msgstr "Выберыце каталог"
+
+msgid "Speed limit"
+msgstr "Абмежаванне хуткасці"
+
+msgid "Give way"
+msgstr "Даць дарогу"
+
+msgid "No entry"
+msgstr "Заезд забаронены"
+
+msgid "Intersection danger"
+msgstr "Перакрыжаванне з другаснай"
+
+msgid "Mandatory direction (any)"
+msgstr "Кірунак руху"
+
+msgid "No turn"
+msgstr "Паварот забаронены"
+
+msgid "Uneven road"
+msgstr "Няроўная дарога"
+
+msgid "No parking"
+msgstr "Стаянка забаронена"
+
+msgid "No overtaking"
+msgstr "Абгон забаронены"
+
+msgid "Pedestrian crossing"
+msgstr "Пешаходны пераход"
+
+msgid "Years"
+msgstr "Гады"
+
+msgid "Months"
+msgstr "Месяцы"
+
+msgid "Days"
+msgstr "Дні"
+
+msgid "Mapillary filter"
+msgstr "Фільтр Mapillary"
+
+msgid "Open Mapillary filter dialog"
+msgstr "Адкрыць дыялог фільтра Mapillary"
+
+msgid "Downloaded images"
+msgstr "Загружаныя здымкі"
+
+msgid "Only images with signs"
+msgstr "Толькі здымкі са знакамі"
+
+msgid "Choose signs"
+msgstr "Выберыце знакі"
+
+msgid "Mapillary history"
+msgstr "Гісторыя Mapillary"
+
+msgid "Open Mapillary history dialog"
+msgstr "Адкрыць дыялог гісторыі Mapillary"
+
+msgid "Open Mapillary window"
+msgstr "Адкрыць акно Mapillary"
+
+msgid "Mapillary dialog"
+msgstr "Дыялог Mapillary"
+
+msgid "Open Mapillary main dialog"
+msgstr "Адкрыць галоўнае дыялогавае акно Mapillary"
+
+msgid "Next picture"
+msgstr "Наступны здымак"
+
+msgid "Shows the next picture in the sequence"
+msgstr "Паказвае наступны здымак паслядоўнасці"
+
+msgid "Previous picture"
+msgstr "Папярэдні здымак"
+
+msgid "Shows the previous picture in the sequence"
+msgstr "Паказвае папярэдні здымак паслядоўнасці"
+
+msgid "Jump to red"
+msgstr "Перайсці да чырвонага"
+
+msgid "Jumps to the picture at the other side of the red line"
+msgstr "Перайсці да выявы на другім баку чырвонай лініі"
+
+msgid "Jump to blue"
+msgstr "Перайсці да сіняга"
+
+msgid "Jumps to the picture at the other side of the blue line"
+msgstr "Перайсці да выявы на другім баку сіняй лініі"
+
+msgid "Stops the walk."
+msgstr "Cпыніць шпацыр."
+
+msgid "Play"
+msgstr "Прайграць"
+
+msgid "Continues with the paused walk."
+msgstr "Працягвае прыпынены шпацыр."
+
+msgid "Pause"
+msgstr "Прыпыніць"
+
+msgid "Pauses the walk."
+msgstr "Прыпыніць шпацыр."
+
+msgid "Reverse buttons position when displaying images."
+msgstr "Памяняць размяшчэнне кнопак пры паказе выяваў."
+
+msgid "Display hour when the picture was taken"
+msgstr "Паказваць час, калі быў зроблены здымак"
+
+msgid "Use 24 hour format"
+msgstr "Выкарыстоўваць 24-гадзінны фармат"
+
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
+"Перамяшчацца да месцазнаходжання выявы пры націсканні кнопкак наперад/назад"
+
+msgid "Download mode: "
+msgstr "Рэжым сцягвання: "
+
+msgid "Upload selected sequence"
+msgstr "Адаслаць вылучаную паслядоўнасць"
+
+msgid "Delete after upload"
+msgstr "Выдаліць пасля адпраўкі"
+
+msgid "Wait for full quality pictures"
+msgstr "Чакаць якасных фатаграфій"
+
+msgid "Follow selected image"
+msgstr "Прытрымлівацца вылучанага здымка"
+
+msgid "Go forward"
+msgstr "Ісці наперад"
+
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] "Выдалена {0} выява"
+msgstr[1] "Выдалена {0} выявы"
+msgstr[2] "Выдалена {0} выяў"
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] "Імпартавана {0} выява"
+msgstr[1] "Імпартавана {0} выявы"
+msgstr[2] "Імпартавана {0} выяў"
+
+msgid "2 images joined"
+msgstr "2 выявы аб''яднаныя"
+
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] "Перамешчана {0} выява"
+msgstr[1] "Перамешчана {0} выявы"
+msgstr[2] "Перамешчана {0} выяў"
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] "Павернута {0} выява"
+msgstr[1] "Павернута {0} выявы"
+msgstr[2] "Павернута {0} выяў"
+
+msgid "2 images unjoined"
+msgstr "2 выявы раз''яднаныя"
 
-msgid "Create Mapillary layer."
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
+"Запампаваная вобласць OSM - занадта вялікая. Рэжым запампоўкі быў зменены на "
+"паўаўтаматычны да наступнага запуску пласта."
 
-msgid "Export"
+msgid "Downloading"
+msgstr "Сцягванне"
+
+msgid "Select mode"
+msgstr "Рэжым вылучэння"
+
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
+"<html><head><title>Уваход у Mapillary</title></head><body>Уваход ўдалы, "
+"вяртаемся ў JOSM.</body></html>"
+
+msgid "Downloading Mapillary images"
+msgstr "Загрузка здымкаў Mapillary"
+
+msgid "Total Mapillary images: {0}"
+msgstr "Усяго здымкаў Mapillary: {0}"
+
+msgid "No images found"
+msgstr "Выявы не знойдзеныя"
+
+msgid "Finished upload"
+msgstr "Адсылка скончана"
+
+msgid "Uploading: {0}"
+msgstr "Адсылаецца: {0}"
 
 msgid "Measured values"
-msgstr ""
+msgstr "Вымераныя значэнні"
 
 msgid "Open the measurement window."
-msgstr ""
+msgstr "Адчыніць акно вымярэнняў"
 
 msgid "Reset current measurement results and delete measurement path."
-msgstr ""
+msgstr "Абнуліць вынікі вымярэнняў і выдаліць вымяральную лінію."
 
 msgid "Path Length"
-msgstr ""
+msgstr "Даўжыня шляху"
 
 msgid "Selection Length"
-msgstr ""
+msgstr "Даўжыня вылучэння"
 
 msgid "Selection Area"
-msgstr ""
+msgstr "Вобласць вылучэння"
+
+msgid "Selection Radius"
+msgstr "Радыус вылучэння"
 
 msgid "Angle"
-msgstr ""
+msgstr "Кут"
 
 msgid "Angle between two selected Nodes"
-msgstr ""
+msgstr "Кут паміж дзвюма вылучанымі кропкамі"
 
 msgid "Layer to make measurements"
-msgstr ""
+msgstr "Пласт для правядзення вымярэнняў"
 
 msgid "measurement mode"
-msgstr ""
+msgstr "Рэжым вымярэння"
 
 msgid "Measurements"
-msgstr ""
+msgstr "Вымярэнні"
 
 msgid "Merge overlap"
-msgstr ""
+msgstr "Зліццё перакрыцця"
 
 msgid "Merge overlap of ways."
-msgstr ""
+msgstr "Зліццё перакрыцця ліній."
 
 msgid "Merge Overlap (combine)"
-msgstr ""
+msgstr "Зліццё перакрыцця (камбінаванае)"
 
 msgid ""
 "<html>A role based relation membership was copied to all new ways.<br>You "
@@ -25822,378 +28597,363 @@ msgstr ""
 "выправіць калі патрэбна.</html>"
 
 msgid "Split way"
-msgstr ""
+msgstr "Падзяліць лінію"
 
 msgid "Michigan Left"
-msgstr ""
+msgstr "Мічыганскі паварот налева"
 
 msgid "Adds no left turn for sets of 4 or 5 ways."
-msgstr ""
+msgstr "Дадае забарону павароту налева на групу з 4 або 5 ліній."
 
 msgid "Please select 4 or 5 ways to assign no left turns."
 msgstr ""
+"Калі ласка, абярыце 4 або 5 ліній, каб прызначыць забарона павароту налева."
 
 msgid "Please select 4 ways that form a closed relation."
-msgstr ""
+msgstr "Калі ласка, вылучыце 4 лініі, якія ўтвараюць закрытыя адносіны."
 
 msgid "Unable to order the ways. Please verify their directions"
-msgstr ""
+msgstr "Немагчыма спарадкаваць лініі. Калі ласка, праверце іх кірунак"
 
 msgid "Create Michigan left turn restriction"
-msgstr ""
+msgstr "Стварыць абмежаванні павароту налева (Мічыган)"
 
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
-
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
+"Немагчыма знайсці кропкі \"via\" (праз). Калі ласка, праверце, што вы абралі"
 
 msgid "About Plugin"
-msgstr ""
+msgstr "Пра модуль"
 
 msgid "Native password manager plugin"
-msgstr ""
+msgstr "Модуль Native password manager"
 
 msgid "No native password manager could be found!"
-msgstr ""
+msgstr "Уласны мэнэджар пароляў не знойдзены!"
 
 msgid ""
 "Depending on your Operating System / Distribution, you may have to create a "
 "default keyring / wallet first."
 msgstr ""
+"У залежнасці ад вашай АС і яе дыстрыбутыва, магчыма, вам спачатку трэба "
+"стварыць ключы шыфравання."
 
 msgid "No thanks, use JOSM''s plain text preferences storage"
-msgstr ""
+msgstr "Не, дзякуй, выкарыстоўваць тэкставае сховішча параметраў JOSM"
 
 msgid ""
 "Found sensitive data that is still saved in JOSM''s preference file (plain "
 "text)."
 msgstr ""
+"Знойдзены канфідэнцыйныя дадзеныя, якія дагэтуль захоўваюцца ў файле налад "
+"JOSM (у тэкставым выглядзе)."
 
 msgid "Transfer to password manager and remove from preference file"
-msgstr ""
+msgstr "Перанесці ў Мэнэджар пароляў і выдаліць з файла налад"
 
 msgid "No, just keep it"
-msgstr ""
+msgstr "Не, проста захаваць"
 
 msgid "Close the dialog and discard all changes"
-msgstr ""
+msgstr "Зачыніць дыялог і адмяніць усе змены"
 
 msgid "Proceed and go to the next page"
-msgstr ""
+msgstr "Працягнуць і перайсці на наступную старонку"
 
 msgid "Finish"
-msgstr ""
+msgstr "Завяршыць"
 
 msgid "Confirm the setup and close this dialog"
-msgstr ""
+msgstr "Пацвердзіць налады і зачыніць гэта акно"
 
 msgid "JOSM/OSM API/Username"
-msgstr ""
+msgstr "JOSM/OSM API/Імя карыстальніка"
 
 msgid "JOSM/OSM API/Password"
-msgstr ""
+msgstr "JOSM/OSM API/Пароль"
 
 msgid "{0}/Username"
-msgstr ""
+msgstr "{0}/Імя карыстальніка"
 
 msgid "{0}/Password"
-msgstr ""
+msgstr "{0}/Пароль"
 
 msgid "JOSM/Proxy/Username"
-msgstr ""
+msgstr "JOSM/Проксі/Імя карыстальніка"
 
 msgid "JOSM/Proxy/Password"
-msgstr ""
+msgstr "JOSM/Проксі/Пароль"
 
 msgid "JOSM/OAuth/OSM API/Key"
-msgstr ""
+msgstr "JOSM/OAuth/OSM API/Ключ"
 
 msgid "JOSM/OAuth/OSM API/Secret"
-msgstr ""
+msgstr "JOSM/OAuth/OSM API/Сакрэт"
 
 msgid "Native Password Manager Plugin"
-msgstr ""
+msgstr "Модуль Уласны мэнэджар пароляў"
 
 msgid "The username and password is protected by {0}."
-msgstr ""
+msgstr "Імя карыстальніка і пароль абаронены {0}."
 
 msgid "username"
-msgstr ""
+msgstr "імя карыстальніка"
 
 msgid "password"
-msgstr ""
+msgstr "пароль"
 
 msgid "proxy username"
-msgstr ""
+msgstr "імя карыстальніка на проксі-серверы"
 
 msgid "proxy password"
-msgstr ""
+msgstr "пароль на проксі-серверы"
 
 msgid "oauth key"
-msgstr ""
+msgstr "oauth ключ"
 
 msgid "oauth secret"
-msgstr ""
+msgstr "oauth сакрэт"
 
 msgid ""
 "<br><strong>Warning:</strong> There may be sensitive data left in your "
 "preference file. ({0})"
 msgstr ""
+"<br><strong>Увага:</strong> Канфідэнцыйныя дадзеныя могуць застацца ў вашым "
+"файле налад. ({0})"
 
 msgid "Save user and password ({0})"
-msgstr ""
+msgstr "Захаваць карыстальніка і пароль ({0})"
 
 msgid "Plain text, JOSM default"
-msgstr ""
+msgstr "Просты тэкст, па змаўчанні ў JOSM"
 
 msgid "Use {0}"
-msgstr ""
+msgstr "Выкарыстоўваць {0}"
 
 msgid "Encrypt data with Windows logon credentials"
-msgstr ""
+msgstr "Зашыфраваць дадзеныя ўліковымі дадзенымі ўваходу ў Windows"
 
 msgid "The native password manager plugin detected {0} on your system."
-msgstr ""
+msgstr "Родны модуль мэнэджара пароляў выяўлены {0} у вашай сістэме."
 
 msgid "Days without mapping: {0}."
-msgstr ""
+msgstr "Дзён без картаграфавання: {0}"
 
 msgid ""
 "(To miserably continue mapping, edit out no_more_mapping\n"
 "from {0})"
 msgstr ""
+"(Калі вы гатовыя здацца і працягнуць маляваць карты,\n"
+"прыбярыце no_more_mapping з {0})"
 
 msgid "Split by municipality"
-msgstr ""
+msgstr "Разбіць па муніцыпалітэтах"
 
 msgid "Split this data by municipality (admin_level=8)."
-msgstr ""
+msgstr "Разбіць дадзеныя па муніцыпалітэтах (admin_level=8)."
 
 msgid "Split by sector"
-msgstr ""
+msgstr "Падзел па сектарах"
 
 msgid "Split this data by sector (admin_level=10)."
-msgstr ""
+msgstr "Разбіць дадзеныя па сектарах/кварталах (admin_level=10)."
 
 msgid "Split by neighbourhood"
-msgstr ""
+msgstr "Разбіць па наваколлі"
 
 msgid "Split this data by neighbourhood (admin_level=11)."
-msgstr ""
+msgstr "Разбіць дадзеныя па наваколлі (admin_level=11)."
 
 msgid "Download open data"
-msgstr ""
+msgstr "Спампаваць open data"
 
 msgid "License URL not available: {0}"
-msgstr ""
+msgstr "URL ліцэнзіі не даступны: {0}"
 
 msgid "OpenData preferences"
-msgstr ""
+msgstr "Налады OpenData"
 
 msgid "License Agreement"
-msgstr ""
+msgstr "Ліцэнзійная дамова"
 
 msgid "Accept"
-msgstr ""
+msgstr "Прыняць"
 
 msgid "Refuse"
-msgstr ""
+msgstr "Адхіліць"
 
 msgid "I understand and accept these terms and conditions"
-msgstr ""
+msgstr "Я разумею і прымаю гэтыя ўмовы"
 
 msgid "View the full text of this license"
-msgstr ""
+msgstr "Прагледзець поўны тэкст ліцэнзіі"
 
 msgid "I refuse these terms and conditions. Cancel download."
-msgstr ""
+msgstr "Я не прымаю гэтыя ўмовы. Адмяніць спампоўку."
 
 msgid "Module bundled with opendata plugin"
-msgstr ""
+msgstr "Модуль пастаўляецца з модулем OpenData"
 
 msgid ""
 "Please click on <strong>Download list</strong> to download and display a "
 "list of available modules."
 msgstr ""
+"Націсніце <strong>Запампаваць спіс</strong>, каб загрузіць і прагледзець "
+"спіс даступных модуляў."
 
 msgid ""
 "The following module has been downloaded <strong>successfully</strong>:"
 msgid_plural ""
 "The following {0} modules have been downloaded <strong>successfully</strong>:"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} модуль быў запампаваны <strong>паспяхова</strong>:"
+msgstr[1] "{0} модуля былі запампаваны <strong>паспяхова</strong>:"
+msgstr[2] "{0} модуляў былі запампаваны <strong>паспяхова</strong>:"
 
 msgid "Downloading the following module has <strong>failed</strong>:"
 msgid_plural ""
 "Downloading the following {0} modules has <strong>failed</strong>:"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Спампоўка {0} модуля <strong>не атрымалася</strong>:"
+msgstr[1] "Спампоўка {0} модуляў <strong>не атрымалася</strong>:"
+msgstr[2] "Спампоўка {0} модуляў <strong>не атрымалася</strong>:"
 
 msgid "Modules"
-msgstr ""
+msgstr "Модулі"
 
 msgid "Accept the new module sites and close the dialog"
-msgstr ""
+msgstr "Прыняць новыя сайты модуляў і зачыніць дыялог"
 
 msgid "Configure Module Sites"
-msgstr ""
+msgstr "Налада сайтаў модуляў"
 
 msgid "Download the list of available modules"
-msgstr ""
+msgstr "Загрузіць спіс даступных модуляў"
 
 msgid "Update modules"
-msgstr ""
+msgstr "Абнаўленне модуляў"
 
 msgid "Update the selected modules"
-msgstr ""
+msgstr "Абнавіць абраныя модулі"
 
 msgid "Please restart JOSM to activate the downloaded modules."
-msgstr ""
+msgstr "Калі ласка, перазапусціце JOSM для актывацыі загружаных модуляў."
 
 msgid ""
 "All installed modules are up to date. JOSM does not have to download newer "
 "versions."
 msgstr ""
+"Усе ўсталяваныя модулі ў актуальным стане. JOSM не патрабуецца спампоўваць "
+"новыя версіі."
 
 msgid "Modules up to date"
-msgstr ""
+msgstr "Модулі ў актуальным стане"
 
 msgid "Configure the list of sites where modules are downloaded from"
-msgstr ""
+msgstr "Наладзіць спіс сайтаў, з якіх загружаюцца модулі"
 
 msgid "Add Open Data Module description URL."
-msgstr ""
+msgstr "Дадаць спасылку на апісанне модуля OpenData."
 
 msgid "Edit Open Data Module description URL."
-msgstr ""
+msgstr "Рэдагаваць спасылку на апісанне модуля OpenData."
 
 msgid "Open Data Module description URL"
-msgstr ""
+msgstr "Спасылка на апісанне модуля OpenData"
 
 msgid "Download OSM data corresponding to the current data set."
-msgstr ""
+msgstr "Запампаваць дадзеныя OSM, адпаведныя бягучаму набору дадзеных"
 
 msgid "Diff"
-msgstr ""
+msgstr "Адрозненні"
 
 msgid "Perform diff between current data set and existing OSM data."
-msgstr ""
+msgstr "Паказвае адрозненні паміж бягучым наборам дадзеных і дадзенымі OSM."
+
+msgid "Tools"
+msgstr "Прылады"
 
 msgid "Open tools menu for this data."
-msgstr ""
+msgstr "Абраць прыладу"
 
 msgid "Open the OpenData window."
-msgstr ""
+msgstr "Адчыніць акно OpenData."
 
 msgid "Raw data"
-msgstr ""
+msgstr "Зыходныя дадзеныя"
 
 msgid "OpenData Preferences"
-msgstr ""
+msgstr "Налады OpenData"
 
 msgid ""
 "A special handler for various Open Data portals<br/><br/>Please read the "
 "Terms and Conditions of Use of each portal<br/>before any upload of data "
 "loaded by this plugin."
 msgstr ""
+"Адмысловы апрацоўнік для розных парталаў OpenData<br/><br/>Калі ласка, "
+"прачытайце ўмовы выкарыстання кожнага партала<br/>да перадачы на сервер якіх-"
+"небудзь дадзеных, загружаным гэтым модулем."
 
 msgid "General settings"
-msgstr ""
+msgstr "Агульныя налады"
 
 msgid ""
 "Import only raw data (i.e. do not add/delete tags or replace them by "
 "standard OSM tags)"
 msgstr ""
+"Імпарт толькі зыходных дадзеных (г.зн. не дадаваць/выдаляць тэгі і не "
+"замяняць іх стандартнымі тэгамі OSM)"
 
 msgid "Overpass API server:"
-msgstr ""
+msgstr "Сервер Overpass API"
 
 msgid "Overpass API server used to download OSM data"
-msgstr ""
+msgstr "Сервер Overpass API выкарыстоўваецца для спампоўкі OSM дадзеных"
 
 msgid "XAPI server:"
-msgstr ""
+msgstr "XAPI сервер:"
 
 msgid ""
 "XAPI server used to download OSM data when Overpass API is not available"
 msgstr ""
+"XAPI сервер выкарыстоўваецца для спампоўкі OSM дадзеных калі сервер Overpass "
+"API недаступны"
 
 msgid "Download modules"
-msgstr ""
+msgstr "Запампаваць модулі"
 
 msgid "View summary"
-msgstr ""
+msgstr "Паглядзець рэзюмэ"
 
 msgid "View full text"
-msgstr ""
+msgstr "Паглядзець поўны тэкст"
 
 msgid ""
 "''Lambert CC 9 zones'' coordinates found with different zone codes for X and "
 "Y: "
-msgstr ""
+msgstr "Каардынаты ''Lambert CC 9 zones''  маюць розныя коды зон для X і Y: "
 
 msgid "Downloading data..."
-msgstr ""
+msgstr "Спампоўка дадзеных..."
 
 msgid "OpenData XML files"
-msgstr ""
+msgstr "Файлы OpenData XML"
 
 msgid "File to load"
-msgstr ""
+msgstr "Файл для загрузкі"
 
 msgid "7Zip Files"
-msgstr ""
+msgstr "Файлы 7Zip"
 
 msgid "Reading 7Zip file..."
-msgstr ""
+msgstr "Чытанне файла 7Zip..."
 
 msgid "Zip Files"
-msgstr ""
+msgstr "Zip-файлы"
 
 msgid "Reading Zip file..."
-msgstr ""
+msgstr "Чытанне ZIP-архіва..."
 
 msgid "Cannot transform to WGS84"
-msgstr ""
+msgstr "Не атрымоўваецца пераўтварыць у WGS84"
 
 msgid ""
 "JOSM was unable to find a strict mathematical transformation between ''{0}'' "
@@ -26201,1638 +28961,1743 @@ msgid ""
 "perform a non-precise transformation (<b>with location errors up to 1 "
 "km</b>) ?<br/><br/>If so, <b>do NOT upload</b> such data to OSM !"
 msgstr ""
+"JOSM не змог знайсці строгае матэматычнае пераўтварэнне паміж ''{0}'' і "
+"WGS84.<br /><br />Паспрабаваць <i>нястрогі</i> метад, які зробіць "
+"недакладнае пераўтварэнне (<b>з памылкай да 1 км</b>) ?<br/><br/>(У гэтым "
+"выпадку <b>НЕ перадавайце</b> дадзеныя на сервер OSM!)"
 
 msgid "Try lenient method"
-msgstr ""
+msgstr "Паспрабаваць нястрогі метад"
 
 msgid "GML files"
-msgstr ""
+msgstr "Файлы GML"
 
 msgid "KML/KMZ files"
-msgstr ""
+msgstr "Файлы KML/KMZ"
 
 msgid "MapInfo files"
-msgstr ""
+msgstr "Файлы MapInfo"
 
 msgid "Shapefiles"
-msgstr ""
+msgstr "Шейп-файлы"
 
 msgid ""
 "Unable to detect Coordinate Reference System.\n"
 "Would you like to fallback to ESPG:4326 (WGS 84) ?"
 msgstr ""
+"Не атрымалася вызначыць сістэму каардынат.\n"
+"Вы жадаеце вярнуцца да EPSG:4326 (WGS 84)?"
 
 msgid "Warning: CRS not found"
-msgstr ""
+msgstr "Папярэджанне: СК не выяўлена"
 
 msgid "Unable to detect CRS !"
-msgstr ""
+msgstr "Не атрымалася вызначыць СК!"
 
 msgid "Unable to find a data store for file {0}"
-msgstr ""
+msgstr "Не атрымалася знайсці сховішча дадзеных для файла {0}"
 
 msgid "Loading shapefile ({0} features)"
-msgstr ""
+msgstr "Загрузка шэйпы-файла ({0} элементаў)"
 
 msgid "CSV files"
-msgstr ""
+msgstr "Файлы CSV"
 
 msgid "ODS files"
-msgstr ""
+msgstr "Файлы ODS"
 
 msgid "No valid coordinates have been found."
-msgstr ""
+msgstr "Не знойдзена дакладных каардынат."
 
 msgid "Invalid file. Bad length on line {0}. Expected {1} columns, got {2}."
 msgstr ""
+"Памылка ў файле. Няслушная даўжыня радка {0}. Чакаецца {1} калонак, а маецца "
+"{2}."
 
 msgid "XLS files"
-msgstr ""
+msgstr "Файлы XLS"
 
 msgid "View OSM Wiki page"
-msgstr ""
+msgstr "Паглядзець старонку Wiki OSM"
 
 msgid "Launch browser to the OSM Wiki page of the selected data set"
-msgstr ""
+msgstr "Адкрые ў браўзары OSM Wiki старонку для абранага набору дадзеных."
 
 msgid "View Local Portal page"
-msgstr ""
+msgstr "Старонка лакальнага партала"
 
 msgid "Launch browser to the local portal page of the selected data set"
 msgstr ""
+"Адкрые ў браўзары старонку лакальнага партала для абранага набору дадзеных."
 
 msgid "View National Portal page"
-msgstr ""
+msgstr "Старонка нацыянальнага партала"
 
 msgid "Launch browser to the national portal page of the selected data set"
 msgstr ""
+"Адкрые ў браўзары старонку нацыянальнага партала для абранага набору "
+"дадзеных."
 
 msgid "View License"
-msgstr ""
+msgstr "Прагледзець ліцэнзію"
 
 msgid "Launch browser to the license page of the selected data set"
-msgstr ""
+msgstr "Адкрыць у браўзары старонку ліцэнзіі для вылучанага набору дадзеных"
 
 msgid "View License (summary)"
-msgstr ""
+msgstr "Прагледзець ліцэнзію (рэзюмэ)"
 
 msgid "Launch browser to the summary license page of the selected data set"
 msgstr ""
+"Адкрыць у браўзэры старонку зводкі ліцэнзіі для вылучанага набору дадзеных"
 
 msgid "View the license of the selected data set"
-msgstr ""
+msgstr "Прагледзець ліцэнзію для вылучанага набору дадзеных"
 
 msgid ""
 "Warning: Cannot download module ''{0}''. Its download link is not known. "
 "Skipping download."
 msgstr ""
+"Папярэджанне: Немагчыма запампаваць модуль ''{0}''. Спасылка для спампоўкі "
+"невядомая. Спампоўка прапушчана."
 
 msgid ""
 "Warning: Cannot download module ''{0}''. Its download link ''{1}'' is not a "
 "valid URL. Skipping download."
 msgstr ""
+"Папярэджанне: Немагчыма запампаваць модуль «{0}». Спасылка для яго спампоўкі "
+"«{1}» не з’яўляецца дапушчальным URL. Спампоўка прапушчана."
 
 msgid "Downloading Module {0}..."
-msgstr ""
+msgstr "Загрузка модуля {0}..."
 
 msgid "An error occurred in module {0}"
-msgstr ""
+msgstr "Паўстала памылка ў модулі {0}"
 
 msgid "Last module update more than {0} days ago."
-msgstr ""
+msgstr "Апошняе абнаўленне модуля было больш {0} дзён назад."
 
 msgid "Click to update the activated modules"
-msgstr ""
+msgstr "Пстрыкніце, каб абнавіць актываваныя модулі"
 
 msgid "Click to skip updating the activated modules"
-msgstr ""
+msgstr "Пстрыкніце, каб прапусціць абнаўленне актываваных модуляў"
 
 msgid ""
 "Skipping module update after elapsed update interval. Automatic update at "
 "startup is disabled."
 msgstr ""
+"Пропуск перыядычнага абнаўлення модуля. Аўтаматычнае абнаўленне ў момант "
+"запуску адключана."
 
 msgid ""
 "Running module update after elapsed update interval. Automatic update at "
 "startup is disabled."
 msgstr ""
+"Запуск перыядычнага абнаўлення модуля. Аўтаматычнае абнаўленне ў момант "
+"запуску выключана."
 
 msgid "Could not load module {0}. Delete from preferences?"
-msgstr ""
+msgstr "Не атрымалася загрузіць модуль {0}. Выдаліць яго з налад?"
 
 msgid "loading module ''{0}'' (version {1})"
-msgstr ""
+msgstr "Загрузка модуля «{0}» (версія {1})"
 
 msgid ""
 "<html>Could not load module {0} because the module<br>main class ''{1}'' was "
 "not found.<br>Delete from preferences?</html>"
 msgstr ""
+"<html>Немагчыма загрузіць модуль {0}, бо не знойдзены<br>асноўны клас "
+"''{1}''.<br>Выдаліць з налад?</html>"
 
 msgid "Loading modules ..."
-msgstr ""
+msgstr "Загрузка модуляў ..."
 
 msgid "Checking module preconditions..."
-msgstr ""
+msgstr "Праверка прадумоў модуля..."
 
 msgid "Loading module ''{0}''..."
-msgstr ""
+msgstr "Загрузка модуля «{0}»..."
 
 msgid "JOSM could not find information about the following module:"
 msgid_plural "JOSM could not find information about the following modules:"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "JOSM не атрымалася знайсці інфармацыю пра наступны модуль:"
+msgstr[1] "JOSM не атрымалася знайсці інфармацыю пра наступныя модулі:"
+msgstr[2] "JOSM не атрымалася знайсці інфармацыю пра наступныя модулі:"
 
 msgid "The module is not going to be loaded."
 msgid_plural "The modules are not going to be loaded."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Гэты модуль не будзе загружаны."
+msgstr[1] "Гэтыя модулі не будуць загружаны."
+msgstr[2] "Гэтыя модулі не будуць загружаны."
 
 msgid "Updating the following module has failed:"
 msgid_plural "Updating the following modules has failed:"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Не атрымалася абнавіць наступны модуль:"
+msgstr[1] "Не атрымалася абнавіць наступныя модулі:"
+msgstr[2] "Не атрымалася абнавіць наступныя модулі:"
 
 msgid "Module update failed"
-msgstr ""
+msgstr "Не атрымалася абнавіць модулі"
 
 msgid "Warning: failed to download module information list"
 msgstr ""
+"Папярэджанне: Не атрымалася запампаваць з сервера спіс інфармацыі модуля"
 
 msgid "Disable module"
-msgstr ""
+msgstr "Адключыць модуль"
 
 msgid "Click to delete the module ''{0}''"
-msgstr ""
+msgstr "Пстрыкніце, каб выдаліць модуль «{0}»"
 
 msgid "Keep module"
-msgstr ""
+msgstr "Пакінуць модуль"
 
 msgid "Click to keep the module ''{0}''"
-msgstr ""
+msgstr "Націсніце, каб пакінуць модуль ''{0}''"
 
 msgid "Warning: failed to delete outdated module ''{0}''."
-msgstr ""
+msgstr "Папярэджанне: Не атрымалася выдаліць састарэлы модуль «{0}»."
 
 msgid ""
 "Warning: failed to install already downloaded module ''{0}''. Skipping "
 "installation. JOSM is still going to load the old module version."
 msgstr ""
+"Папярэджанне: Не атрымалася ўсталяваць ужо запампаваны модуль «{0}». "
+"Усталёўка прапушчана. JOSM працягне загружаць старую версію модуля."
 
 msgid ""
 "Warning: failed to install module ''{0}'' from temporary download file "
 "''{1}''. Renaming failed."
 msgstr ""
+"Папярэджанне: Не атрымалася ўсталяваць модуль «{0}» з часовага файла "
+"загрузкі «{1}». Памылка пры перайменаванні."
 
 msgid ""
 "Do not ask again and remember my decision (go to Preferences->Modules to "
 "change it later)"
 msgstr ""
+"Запомніць мой выбар і не пытаць ізноў (зайдзіце ў Налады->Модулі, каб "
+"змяніць яго пазней)"
 
 msgid "The module file ''{0}'' does not include a Manifest."
-msgstr ""
+msgstr "Файл модуля ''{0}'' не ўтрымоўвае дэкларацыі."
 
 msgid "Invalid URL ''{0}'' in module {1}"
-msgstr ""
+msgstr "Няслушная спасылка \"{0}\" у модулі {1}"
 
 msgid "<b>Module provided by an external source:</b> {0}"
-msgstr ""
+msgstr "<b>Модуль атрыманы з вонкавай крыніцы:</b> {0}"
 
 msgid "Failed to create module information from manifest for module ''{0}''"
-msgstr ""
+msgstr "Немагчыма выняць інфармацыю пра модуль з дэкларацыі модуля ''{0}''"
 
 msgid "Illegal entry in module list."
-msgstr ""
+msgstr "Некарэктны запіс у спісе модуляў."
 
 msgid "Reading local module information.."
-msgstr ""
+msgstr "Чытанне інфармацыі пра ўсталяваныя модулі..."
 
 msgid "Processing module site cache files..."
-msgstr ""
+msgstr "Апрацоўка файлаў модуляў з кэша..."
 
 msgid ""
 "Warning: Failed to scan file ''{0}'' for module information. Skipping."
 msgstr ""
+"Папярэджанне: Не атрымалася прасканаваць файл ''{0}'' на інфармацыю пра "
+"модуль. Прапушчана."
 
 msgid "Processing module site cache icon files..."
-msgstr ""
+msgstr "Апрацоўка файлаў піктаграм модуляў з кэша..."
 
 msgid "Processing module files..."
-msgstr ""
+msgstr "Апрацоўка файлаў модуляў..."
 
 msgid "Download module list..."
-msgstr ""
+msgstr "Загрузка спісу модуляў..."
 
 msgid "Downloading module list from ''{0}''"
-msgstr ""
+msgstr "Загрузка спісу модуляў з «{0}»"
 
 msgid ""
 "Warning: failed to create module directory ''{0}''. Cannot cache module list "
 "from module site ''{1}''."
 msgstr ""
+"Папярэджанне: Не атрымалася стварыць каталог модуля ''{0}''. Немагчыма "
+"запісаць у кэш спіс модуляў з сайта модуляў ''{1}''."
 
 msgid "Writing module list to local cache ''{0}''"
-msgstr ""
+msgstr "Запіс спісу модуляў у лакальны кэш «{0}»"
 
 msgid "Parsing module list from site ''{0}''"
-msgstr ""
+msgstr "Аналіз спісу модуляў з сайта ''{0}''"
 
 msgid ""
 "Failed to parse module list document from site ''{0}''. Skipping site. "
 "Exception was: {1}"
 msgstr ""
+"Не атрымалася разабраць спіс модуляў з сайта ''{0}''. Сайт прапушчаны. "
+"Памылка: {1}"
 
 msgid "Processing module list from site ''{0}''"
-msgstr ""
+msgstr "Апрацоўка спісу модуляў з сайта «{0}»"
 
 msgid "Open Visible..."
-msgstr ""
+msgstr "Адкрыць бачнае..."
 
 msgid "Open only files that are visible in current view."
-msgstr ""
+msgstr "Адкрыць толькі файлы, бачныя ў бягучай вобласці на экране"
 
 msgid "No view open - cannot determine boundaries!"
-msgstr ""
+msgstr "Не адкрыта вобласць - немагчыма вызначыць межы!"
 
 msgid "Unknown file extension: {0}"
-msgstr ""
+msgstr "Невядомае пашырэнне файла: {0}"
 
 msgid "Parsing file \"{0}\" failed"
-msgstr ""
+msgstr "Не атрымалася разабраць файл ''{0}''"
 
 msgid "Osmarender"
-msgstr ""
+msgstr "Osmarender"
 
 msgid ""
 "Firefox not found. Please set firefox executable in the Map Settings page of "
 "the preferences."
 msgstr ""
+"Firefox не знойдзены. Калі ласка, пакажыце выконваемы файл Firefox на "
+"старонцы Налады карты ў акне налад."
 
 msgid "Firefox executable"
-msgstr ""
+msgstr "выконваемы файл Firefox"
 
 msgid "OSM Server Files pbf compressed"
-msgstr ""
+msgstr "Сціснутыя pbf файлы OSM сервера"
 
 msgid "Download PBF"
-msgstr ""
+msgstr "Запампаваць PBF"
 
 msgid "Invalid changeset id: {0}"
-msgstr ""
+msgstr "Няслушны id пакета правак: {0}"
 
 msgid "Invalid timestamp: {0}"
-msgstr ""
+msgstr "Няслушны штамп часу: {0}"
 
 msgid "Invalid DenseNodes key/values table"
-msgstr ""
+msgstr "Няслушная DenseNodes табліца ключ/значэнне"
 
 msgid "Reading OSM data..."
-msgstr ""
+msgstr "Чытанне дадзеных OSM..."
 
 msgid "Transform error: Min X must be smaller than max"
 msgstr ""
+"Памылка пераўтварэння: Мінімальнае значэнне X павінна быць менш максімальнага"
 
 msgid "Transform error: Min Y must be smaller than max"
 msgstr ""
+"Памылка пераўтварэння: Мінімальнае значэнне Y павінна быць менш максімальнага"
 
 msgid "Transform error: Points too close"
-msgstr ""
+msgstr "Памылка пераўтварэння: кропкі знаходзяцца блізка адзін ад аднаго"
 
 msgid "Transform error: Unsupported variant."
-msgstr ""
+msgstr "Памылка пераўтварэння: Непадтрымоўваны варыянт."
 
 msgid "Transform error: Unsupported orientation"
-msgstr ""
+msgstr "Памылка пераўтварэння: Непадтрымоўваная арыентацыя"
 
 msgid "Finished"
-msgstr ""
+msgstr "Гатова"
 
 msgid "Prefs"
-msgstr ""
+msgstr "Налады"
 
 msgid "Load file..."
-msgstr ""
+msgstr "Загрузка файла ..."
 
 msgid "Place"
-msgstr ""
+msgstr "Месца"
 
 msgid "Show target"
-msgstr ""
+msgstr "Паказаць мэту"
 
 msgid "Take X and Y from selected node"
-msgstr ""
+msgstr "Атрымаць X і Y з вылучанай кропкі"
 
 msgid "Debug info"
-msgstr ""
+msgstr "Адладкавая інфармацыя"
 
 msgid "Merge close nodes"
-msgstr ""
+msgstr "Зліць кропкі, змешчаныя побач"
 
 msgid "Remove objects smaller than"
-msgstr ""
+msgstr "Выдаліць аб’екты менш чым"
 
 msgid "Remove objects larger than"
-msgstr ""
+msgstr "Выдаліць аб’екты буйней чым"
 
 msgid "Only this color"
-msgstr ""
+msgstr "Толькі гэтага колеру"
 
 msgid "Remove parallel lines"
-msgstr ""
+msgstr "Выдаліць паралельныя лініі"
 
 msgid "Take only first X paths"
-msgstr ""
+msgstr "Толькі першыя Х трэкаў"
 
 msgid "Color/width change"
-msgstr ""
+msgstr "Змяніць колер/таўшчыню"
 
 msgid "Shape closed"
-msgstr ""
+msgstr "Замкнёная форма"
 
 msgid "Single segments"
-msgstr ""
+msgstr "Адзінкавыя адрэзкі"
 
 msgid "Orthogonal shapes"
-msgstr ""
+msgstr "Артаганальныя формы"
 
 msgid "Import settings"
-msgstr ""
+msgstr "Імпарт налад"
 
 msgid "Introduce separate layers for:"
-msgstr ""
+msgstr "Ўкараняць асобныя пласты для:"
 
 msgid "Bind to coordinates"
-msgstr ""
+msgstr "Прывязка да каардынат"
 
 msgid "Projection:"
-msgstr ""
+msgstr "Праекцыя:"
 
 msgid "Bottom left (min) corner:"
-msgstr ""
+msgstr "Ніжні левы (мін) кут:"
 
 msgid "PDF X and Y"
-msgstr ""
+msgstr "PDF X і Y"
 
 msgid "East and North"
-msgstr ""
+msgstr "Усход і Поўнач"
 
 msgid "Top right (max) corner:"
-msgstr ""
+msgstr "Правы верхні (макс) кут:"
 
 msgid "Projection Preferences"
-msgstr ""
+msgstr "Налады праекцыі"
 
 msgid "Close the dialog and apply projection preferences"
-msgstr ""
+msgstr "Зачыніць дыялог і ўжыць налады праекцыі"
 
 msgid "Close the dialog, discard projection preference changes"
-msgstr ""
+msgstr "Зачыніць дыялог і адмяніць змены ў наладах праекцыі"
 
 msgid "Loading..."
-msgstr ""
+msgstr "Загрузка..."
 
 msgid "PDF file preview"
-msgstr ""
+msgstr "Папярэдні прагляд PDF"
 
 msgid "Loaded"
-msgstr ""
+msgstr "Загружана"
 
 msgid "Imported PDF: "
-msgstr ""
+msgstr "Імпартаваны PDF: "
 
 msgid "Please select exactly one node."
-msgstr ""
+msgstr "Калі ласка, вылучыце толькі адну кропку"
 
 msgid "PDF files"
-msgstr ""
+msgstr "Файлы PDF"
 
 msgid "OSM files"
-msgstr ""
+msgstr "Файлы OSM"
 
 msgid "Preparing"
-msgstr ""
+msgstr "Ідзе падрыхтоўка"
 
 msgid "Tolerance is not a number"
-msgstr ""
+msgstr "Дапушчальнае адхіленне не з’яўляецца лікам"
 
 msgid "Could not parse color"
-msgstr ""
+msgstr "Немагчыма вызначыць колер"
 
 msgid "Could not parse max path count"
-msgstr ""
+msgstr "Немагчыма вызначыць максімальную колькасць шляхоў"
 
 msgid "Parsing file"
-msgstr ""
+msgstr "Разбор файла"
 
 msgid "File not found."
-msgstr ""
+msgstr "Файл не знойдзены."
 
 msgid "Error while parsing: {0}"
-msgstr ""
+msgstr "Памылка пры разборы: {0}"
 
 msgid "Removing parallel segments"
-msgstr ""
+msgstr "Выдаленне паралельных адрэзкаў"
 
 msgid "Max distance is not a number"
-msgstr ""
+msgstr "Максімальная адлегласць не з’яўляецца лікам"
 
 msgid "Joining nodes"
-msgstr ""
+msgstr "Далучэнне кропак"
 
 msgid "Joining adjacent segments"
-msgstr ""
+msgstr "Злучэнне сумежных адрэзкаў"
 
 msgid "Removing small objects"
-msgstr ""
+msgstr "Выдаленне дробных аб’ектаў"
 
 msgid "Removing large objects"
-msgstr ""
+msgstr "Выдаленне буйных аб’ектаў"
 
 msgid "Finalizing layers"
-msgstr ""
+msgstr "Завяршэнне стварэння пластоў"
 
 msgid "Please set a projection."
-msgstr ""
+msgstr "Калі ласка, задайце праекцыю."
 
 msgid "Could not parse numbers. Please check."
-msgstr ""
+msgstr "Немагчыма разабраць лічбы. Калі ласка, праверце."
 
 msgid "Building JOSM layer"
-msgstr ""
+msgstr "Пласт JOSM з будынкамі"
 
 msgid "Postprocessing layer"
-msgstr ""
+msgstr "Постапрацоўка пласта"
 
 msgid "Saving to file."
-msgstr ""
+msgstr "Захаванне ў файл."
 
 msgid " Writing to file"
-msgstr ""
+msgstr " Запіс у файл"
 
 msgid "Building JOSM layer."
-msgstr ""
+msgstr "Пласт JOSM з будынкамі."
 
 msgid " "
-msgstr ""
+msgstr " "
 
 msgid "Import PDF file"
-msgstr ""
+msgstr "Імпарт PDF файлаў"
 
 msgid "Import PDF file."
-msgstr ""
+msgstr "Імпарт PDF файлаў."
 
 msgid "Import PDF"
-msgstr ""
+msgstr "Імпарт PDF"
 
 msgid " {0} objects so far"
-msgstr ""
+msgstr " {0} аб’ект(аў) засталося"
 
 msgid "Parsing PDF"
-msgstr ""
+msgstr "Разбор PDF"
 
 msgid "Encrypted documents not supported."
-msgstr ""
+msgstr "Зашыфраваныя дакументы не падтрымліваюцца"
 
 msgid "The PDF file must have exactly one page."
-msgstr ""
+msgstr "PDF файл павінен складацца з адной старонкі."
 
 msgid "Read error: "
-msgstr ""
+msgstr "Памылка чытання: "
 
 msgid "Write error: "
-msgstr ""
+msgstr "Памылка запісу: "
 
 msgid "Write coordinates to image header"
-msgstr ""
+msgstr "Запісаць каардынаты ў загаловак малюнка"
 
 msgid ""
 "Write position information into the exif header of the following files:"
-msgstr ""
+msgstr "Запісаць інфармацыю пра становішча ў шапку exif наступных файлаў:"
 
 msgid "settings"
-msgstr ""
+msgstr "налады"
 
 msgid "keep backup files"
-msgstr ""
+msgstr "захаваць рэзервовы файл"
 
 msgid "change file modification time:"
-msgstr ""
+msgstr "памяняць час занясення змен:"
 
 msgid "to gps time"
-msgstr ""
+msgstr "на час па gps"
 
 msgid "to previous value (unchanged mtime)"
-msgstr ""
+msgstr "на папярэдняе значэнне (не змененае mtime)"
 
 msgid "Photo Geotagging Plugin"
-msgstr ""
+msgstr "Модуль геапазнакі фатаграфіі"
 
 msgid "Writing position information to image files..."
-msgstr ""
+msgstr "Запіс інфармацыі пра месцазнаходжанне ў файлы малюнкаў..."
 
 msgid "Could not read mtime."
-msgstr ""
+msgstr "Немагчыма прачытаць mtime."
 
 msgid "Could not write mtime."
-msgstr ""
+msgstr "Немагчыма запісаць mtime."
 
 msgid "File could not be deleted!"
-msgstr ""
+msgstr "Файл не можа быць выдалены!"
 
 msgid "Could not rename file!"
-msgstr ""
+msgstr "Файл не можа быць пераназваны!"
 
 msgid "Could not rename file {0} to {1}!"
-msgstr ""
+msgstr "Немагчыма пераназваць файл {0} у {1}!"
 
 msgid "<html><h3>There are old backup files in the image directory!</h3>"
 msgstr ""
+"<html><h3>У каталогу малюнкаў ёсць старыя файлы рэзервовага капіявання!</h3>"
 
 msgid "Override old backup files?"
-msgstr ""
+msgstr "Перапісаць старыя файлы рэзервовага капіявання?"
 
 msgid "Keep old backups and continue"
-msgstr ""
+msgstr "Захаваць старыя рэзервовыя копіі і працягнуць"
 
 msgid "Override"
-msgstr ""
+msgstr "Перазапісаць"
 
 msgid "Could not delete temporary file!"
-msgstr ""
+msgstr "Немагчыма выдаліць часовы файл!"
 
 msgid "Test failed: Could not read mtime."
-msgstr ""
+msgstr "Тэст не прайшоў: Немагчыма прачытаць mtime."
 
 msgid "Test failed: Could not write mtime."
-msgstr ""
+msgstr "Тэст не прайшоў: Немагчыма запісаць mtime."
 
 msgid "Adjust photos"
-msgstr ""
+msgstr "Рэгуляванне фатаграфіі"
 
 msgid "Move and position photos"
-msgstr ""
+msgstr "Перасоўванне фатаграфіі"
 
 msgid ""
 "Click+drag photo, shift+click to position photo, control+click to set "
 "direction."
 msgstr ""
+"Пстрыкніце + перацягніце фота, Shift + пстрычка для ўстанаўлення пазіцыі "
+"фота, Ctrl + пстрычка, каб задаць напрамак."
 
 msgid "Please load some photos."
-msgstr ""
+msgstr "Загрузіце некалькі здымкаў."
 
 msgid "New layer for untagged images"
-msgstr ""
+msgstr "Новы пласт для не адзначанага малюнка"
 
 msgid "Untagged Images"
-msgstr ""
+msgstr "Не адзначаныя малюнкі"
 
 msgid "Do you want to save current calibration of layer {0}?"
-msgstr ""
+msgstr "Вы жадаеце захаваць каліброўку пласта {0}?"
 
 msgid "Load Picture Calibration..."
-msgstr ""
+msgstr "Загрузіць каліброўку малюнка..."
 
 msgid "Loads calibration data from a file"
-msgstr ""
+msgstr "Загрузіць калібравальныя дадзеныя з файла"
 
 msgid "Loading file failed: {0}"
-msgstr ""
+msgstr "Загрузка файла не атрымалася:  {0}"
 
 msgid "Load World File Calibration..."
-msgstr ""
+msgstr "Загрузіць калібравальныя дадзеныя з world-файла..."
 
 msgid "Loads calibration data from a world file"
-msgstr ""
+msgstr "Загружае калібравальныя дадзеныя з world-файла"
 
 msgid "Reset Calibration"
-msgstr ""
+msgstr "Скід каліброўкі"
 
 msgid "Reset calibration"
-msgstr ""
+msgstr "Скід каліброўкі"
 
 msgid "Calibration reset"
-msgstr ""
+msgstr "Скід каліброўкі"
 
 msgid "Save Picture Calibration..."
-msgstr ""
+msgstr "Захаваць каліброўку малюнка..."
 
 msgid "Saves calibration data to a file"
-msgstr ""
+msgstr "Захоўвае дадзеныя каліброўкі ў файл"
 
 msgid "Saving file failed: {0}"
-msgstr ""
+msgstr "Не атрымалася захаваць файл: {0}"
 
 msgid "New picture layer from clipboard"
-msgstr ""
+msgstr "Новы пласт малюнка з буфера абмену"
 
 msgid "Supported image files, *.zip, *.kml"
-msgstr ""
+msgstr "Падтрымоўваныя файлы малюнкаў, *.zip, *.kml"
 
 msgid "New picture layer from file..."
-msgstr ""
+msgstr "Новы пласт малюнка з файла..."
 
 msgid ""
 "KML calibration is in beta stage and may produce incorrectly calibrated "
 "layers!\n"
 "Please use {0} to upload your KMLs that were calibrated incorrectly."
 msgstr ""
+"KML прывязка знаходзіцца ў стадыі бэта-тэставання і можа прывесці да "
+"няправільнай прывязкі слаёў!\n"
+"Выкарыстоўвайце {0}, каб загрузіць свае KML, якія былі прывязаныя "
+"няправільна."
 
 msgid "PicLayer move"
-msgstr ""
+msgstr "Перамяшчэнне PicLayer"
 
 msgid "Moved"
-msgstr ""
+msgstr "Перамешчана"
 
 msgid "Drag to move the picture"
-msgstr ""
+msgstr "Цягніце, каб зрушыць выявы"
 
 msgid "PicLayer rotate"
-msgstr ""
+msgstr "Паварот выявы"
 
 msgid "Rotated"
-msgstr ""
+msgstr "Павернута"
 
 msgid "Drag to rotate the picture"
-msgstr ""
+msgstr "Цягніце, каб павярнуць выяву"
 
 msgid "PicLayer scale X"
-msgstr ""
+msgstr "Маштабаванне малюнка па X"
 
 msgid "Scaled by X"
-msgstr ""
+msgstr "Зменены маштаб па восі X"
 
 msgid "Drag to scale the picture in the X Axis"
-msgstr ""
+msgstr "Цягніце, каб маштабаваць малюнак па восі X"
 
 msgid "PicLayer scale"
-msgstr ""
+msgstr "Маштабаванне малюнка"
 
 msgid "Scaled"
-msgstr ""
+msgstr "Зменены маштаб"
 
 msgid "Drag to scale the picture in the X and Y Axis"
-msgstr ""
+msgstr "Цягніце, каб маштабаваць малюнак па восях X і Y"
 
 msgid "PicLayer scale Y"
-msgstr ""
+msgstr "Маштабаванне выявы па Y"
 
 msgid "Scaled by Y"
-msgstr ""
+msgstr "Зменены маштаб па восі Y"
 
 msgid "Drag to scale the picture in the Y Axis"
-msgstr ""
+msgstr "Цягніце, каб маштабаваць малюнак па восі Y"
 
 msgid "PicLayer shear"
-msgstr ""
+msgstr "Нахіл выявы"
 
 msgid "Sheared"
-msgstr ""
+msgstr "Абрэзанае"
 
 msgid "Drag to shear the picture"
-msgstr ""
+msgstr "Цягніце, каб змяніць нахіл выявы"
 
 msgid "PicLayer Move point"
-msgstr ""
+msgstr "PicLayer Перамясціць рэпер"
 
 msgid "Point added/moved"
-msgstr ""
+msgstr "Рэпер дададзены/перамешчаны"
 
 msgid "Drag or create point on the picture"
-msgstr ""
+msgstr "Дадаць ці перамясціць рэпер"
 
 msgid "PicLayer Remove point"
-msgstr ""
+msgstr "PicLayer Выдаліць рэпер"
 
 msgid "Point removed"
-msgstr ""
+msgstr "Рэпер выдалены"
 
 msgid "Remove point on the picture"
-msgstr ""
+msgstr "Выдаліць рэпер на малюнку"
 
 msgid "PicLayer Transform point"
-msgstr ""
+msgstr "PicLayer Трансфармацыя рэперам"
 
 msgid "Point transformed"
-msgstr ""
+msgstr "Трансфармацыя рэперам"
 
 msgid "Transform point on the picture"
-msgstr ""
+msgstr "Трансфармаваць малюнак рэперамі"
 
 msgid "PicLayer: {0}"
-msgstr ""
+msgstr "PicLayer: {0}"
 
 msgid "Calibration Files"
-msgstr ""
+msgstr "Файлы каліброўкі"
 
 msgid "Could not find the map object."
-msgstr ""
+msgstr "Немагчыма знайсці аб’ект на карце."
 
 msgid "PicLayer failed to load or import the image."
-msgstr ""
+msgstr "PicLayer-у не ўдалося атрымаць імпартаваць выяву."
 
 msgid "Nothing in clipboard"
-msgstr ""
+msgstr "У буферы абмену нічога няма"
 
 msgid "The clipboard data is not an image"
-msgstr ""
+msgstr "Дадзеныя буферы абмену не з’яўляюцца малюнкам"
 
 msgid "Warning: failed to handle zip file ''{0}''. Exception was: {1}"
 msgstr ""
+"Папярэджанне: Не атрымалася апрацаваць файл .zip {0}''. Тэкст памылкі: {1}"
 
 msgid "A calibration file associated to the picture file was found: {0}\n"
-msgstr ""
+msgstr "Знойдзены файл каліброўкі, злучаны з малюнкам: {0}\n"
 
 msgid ""
 "Set \"{0}\" to yes/no/ask in the preferences\n"
 "to control the autoloading of calibration files."
 msgstr ""
+"Усталюйце пункт налад \"{0}\" на так/не/пытацца, каб задаць паводзіны "
+"аўтазагрузкі калібровачных файлаў."
 
 msgid "Do you want to apply it ?"
-msgstr ""
+msgstr "Жадаеце ўжыць?"
 
 msgid "Load calibration file ?"
-msgstr ""
+msgstr "Загрузіць калібравальны файл?"
 
 msgid "It will be applied automatically."
-msgstr ""
+msgstr "Ён будзе ўжыты аўтаматычна."
 
 msgid ""
 "Also, from now on, calibration files will always be loaded automatically."
 msgstr ""
+"З дадзенага моманту калібравальныя файлы будуць загружацца аўтаматычна."
 
 msgid "Point info"
-msgstr ""
+msgstr "Інфармацыя пра кропку"
 
 msgid "Point info."
-msgstr ""
+msgstr "Інфармацыя пра кропку."
 
 msgid "Connecting server"
-msgstr ""
+msgstr "Злучэнне з серверам"
 
 msgid "PointInfo"
-msgstr ""
+msgstr "PointInfo"
 
 msgid "Data not available."
-msgstr ""
+msgstr "Дадзеныя недаступныя"
 
 msgid "Add new address point"
-msgstr ""
+msgstr "Дадаць новую адрасную кропку"
 
 msgid "Tags copied to clipboard."
-msgstr ""
+msgstr "Тэгі скапіяваны ў буфер абмену."
 
 msgid "New address point added."
-msgstr ""
+msgstr "Новая адрасная кропка дададзена."
 
 msgid "Download Osmosis poly"
-msgstr ""
+msgstr "Запампаваць Osmosis poly"
 
 msgid "Reading polygon filter file..."
-msgstr ""
+msgstr "Чытанне polygon filter file"
 
 msgid "Error reading poly file: {0}"
-msgstr ""
+msgstr "Памылка чытання poly файла: {0}"
 
 msgid "The file must begin with a polygon name"
-msgstr ""
+msgstr "Файл павінен пачынацца з імя палігона"
 
 msgid "There are less than 2 points in an area"
-msgstr ""
+msgstr "У вобласці меней 2 кропак"
 
 msgid "A polygon coordinate line must contain exactly 2 numbers"
-msgstr ""
+msgstr "Радок з каардынатамі палігона павінна ўтрымоўваць 2 лікі"
 
 msgid "Unable to parse {0} as a number"
-msgstr ""
+msgstr "Не атрымалася разабраць {0} як лік"
 
 msgid "Invalid coordinates were found: {0}, {1}"
-msgstr ""
+msgstr "Знойдзены недапушчальныя каардынаты: {0}, {1}"
 
 msgid "{0} points were outside world bounds and were moved"
-msgstr ""
+msgstr "{0} кропак апынуліся за межамі свету і былі перамешчаны"
 
 msgid "Osmosis polygon filter files"
-msgstr ""
+msgstr "Файлы Osmosis polygon filter file"
 
 msgid "Print..."
-msgstr ""
+msgstr "Друк..."
 
 msgid "Print the map"
-msgstr ""
+msgstr "Раздрукаваць карту"
 
 msgid "Print the Map"
-msgstr ""
+msgstr "Друк карты"
 
 msgid "Printer"
-msgstr ""
+msgstr "Друкарка"
 
 msgid "Media"
-msgstr ""
+msgstr "Носьбіт"
 
 msgid "Orientation"
-msgstr ""
+msgstr "Арыентацыя"
 
 msgid "Printer settings"
-msgstr ""
+msgstr "Параметры друкаркі"
 
 msgid "Scale"
-msgstr ""
+msgstr "Маштаб"
 
 msgid "Resolution"
-msgstr ""
+msgstr "Разрозненне"
 
 msgid "Map information"
-msgstr ""
+msgstr "Інфармацыя пра карту"
 
 msgid "Map Preview"
-msgstr ""
+msgstr "Прадпрагляд карты"
 
 msgid "Zoom To Page"
-msgstr ""
+msgstr "Змясціць на старонцы"
 
 msgid "Zoom To Actual Size"
-msgstr ""
+msgstr "Рэальны памер"
 
 msgid "Print"
-msgstr ""
+msgstr "Друк"
 
 msgid "Printing has been cancelled."
-msgstr ""
+msgstr "Друк быў адменены."
 
 msgid "Printing stopped"
-msgstr ""
+msgstr "Друк спынены"
 
 msgid "Printing has failed."
-msgstr ""
+msgstr "Збой друку."
 
 msgid "Proj4J: {0} selected"
-msgstr ""
+msgstr "Proj4J: {0} абрана"
 
 msgid "Selected: {0}"
-msgstr ""
+msgstr "Абрана: {0}"
 
 msgid "Proj4J Plugin"
-msgstr ""
+msgstr "Модуль Proj4J"
 
 msgid "Code"
-msgstr ""
+msgstr "Код"
 
 msgid "added"
-msgstr ""
+msgstr "дададзены"
 
 msgid "Public Transport: Enable GTFSStops"
-msgstr ""
+msgstr "Грамадскі транспарт: Абавязковыя GTFS прыпынкі"
 
 msgid "Public Transport: Catch GTFS stops"
-msgstr ""
+msgstr "Грамадскі транспарт: GTFS прыпынкі па патрабаванні"
 
 msgid "skipped"
-msgstr ""
+msgstr "прапускаць"
 
 msgid "Public Transport: Disable GTFS"
-msgstr ""
+msgstr "Грамадскі транспарт: Выключыць GTFS"
 
 msgid "Create Stops from GTFS ..."
-msgstr ""
+msgstr "Стварыць прыпынкі з GTFS..."
 
 msgid "Create Stops from a GTFS file"
-msgstr ""
+msgstr "Стварыць прыпынкі з файла GTFS"
 
 msgid "Select GTFS file (stops.txt)"
-msgstr ""
+msgstr "Абярыце GTFS файл (stops.txt)"
 
 msgid "File \"{0}\" does not exist"
-msgstr ""
+msgstr "Файл \"{0}\" не існуе"
 
 msgid "IOException \"{0}\" occurred"
-msgstr ""
+msgstr "Сталася памылка ўводу/вываду \"{0}\""
 
 msgid ""
 "There exists no dataset. Try to download data from the server or open an OSM "
 "file."
 msgstr ""
+"Дадзеных не існуе. Паспрабуйце запампаваць дадзеныя з сервера ці адкрыць OSM "
+"файл."
 
 msgid "No data found"
-msgstr ""
+msgstr "Дадзеныя не знойдзены"
 
 msgid "The GTFS file was empty."
-msgstr ""
+msgstr "Файл GTFS быў пусты."
 
 msgid "Create Stops from GTFS"
-msgstr ""
+msgstr "Стварыць прыпынкі з GTFS"
 
 msgid "GTFS-Stops"
-msgstr ""
+msgstr "GTFS-прыпынкі"
 
 msgid "Type of stops to add"
-msgstr ""
+msgstr "Тыпы прыпынкаў для дадання"
 
 msgid "Time on your GPS device"
-msgstr ""
+msgstr "Час на вашым GPS прыстасаванні"
 
 msgid "HH:MM:SS.sss"
-msgstr ""
+msgstr "ГГ:ХХ:СС.ссс"
 
 msgid "Time on your stopwatch"
-msgstr ""
+msgstr "Час на вашым секундамеры"
 
 msgid "Time window"
-msgstr ""
+msgstr "Часавае вакно"
 
 msgid "seconds"
-msgstr ""
+msgstr "секунды"
 
 msgid "Move Threshold"
-msgstr ""
+msgstr "Пачатак руху"
 
 msgid "Suggest Stops"
-msgstr ""
+msgstr "Прапанаваць прыпынкі"
 
 msgid "Find"
-msgstr ""
+msgstr "Знайсці"
 
 msgid "Show"
-msgstr ""
+msgstr "Паказаць"
 
 msgid "Mark"
-msgstr ""
+msgstr "Пазначыць"
 
 msgid "Catch"
-msgstr ""
+msgstr "Злавіць"
 
 msgid "Join"
-msgstr ""
+msgstr "Злучыць"
 
 msgid "Enable"
-msgstr ""
+msgstr "Уключыць"
 
 msgid "Can''t parse a time from this string."
-msgstr ""
+msgstr "Немагчыма разабраць час з гэтай паслядоўнасці."
 
 msgid "Invalid value"
-msgstr ""
+msgstr "Няправільнае значэнне"
 
 msgid "moved"
-msgstr ""
+msgstr "перамешчаны"
 
 msgid "Public Transport: Join GTFS stops"
-msgstr ""
+msgstr "Грамадскі транспарт: Злучэнне GTFS прыпынкаў"
 
 msgid "Id"
-msgstr ""
+msgstr "Ідэнтыфікатар"
 
 msgid "State"
-msgstr ""
+msgstr "Даступныя"
 
 msgid "pending"
-msgstr ""
+msgstr "у чаканні"
 
 msgid "outside"
-msgstr ""
+msgstr "знадворку"
 
 msgid "[incomplete]"
-msgstr ""
+msgstr "[няпоўны]"
 
 msgid "[empty way]"
-msgstr ""
+msgstr "[пусты шлях]"
 
 msgid "[ID] {0}"
-msgstr ""
+msgstr "[ID] {0}"
 
 msgid "[gap]"
-msgstr ""
+msgstr "[прамежак]"
 
 msgid " [ID] {0}"
-msgstr ""
+msgstr " [ID] {0}"
 
 msgid "Route patterns ..."
-msgstr ""
+msgstr "Шаблоны маршрутаў …"
 
 msgid "Edit Route patterns for public transport"
-msgstr ""
+msgstr "Правіць шаблоны маршрутаў грамадскага транспарту"
 
 msgid "Route Patterns"
-msgstr ""
+msgstr "Узоры дарог"
 
 msgid "Overview"
-msgstr ""
+msgstr "Агляд"
 
 msgid "Itinerary"
-msgstr ""
+msgstr "Маршрут"
 
 msgid "Stops"
-msgstr ""
+msgstr "Прыпынкі"
 
 msgid "Meta"
-msgstr ""
+msgstr "Мета"
 
 msgid "Existing route patterns:"
-msgstr ""
+msgstr "Існыя ўзоры дарог"
 
 msgid "Reflect"
-msgstr ""
+msgstr "Адбіць"
 
 msgid "Required tags:"
-msgstr ""
+msgstr "Неабходныя тэгі:"
 
 msgid "Common tags:"
-msgstr ""
+msgstr "Агульныя тэгі:"
 
 msgid "Additional tags:"
-msgstr ""
+msgstr "Дадатковыя тэгі:"
 
 msgid "Add a new Tag"
-msgstr ""
+msgstr "Дадаць новы тэг"
 
 msgid "Name/Id"
-msgstr ""
+msgstr "Імя/ідэнтыфікатар"
 
 msgid "Ref"
-msgstr ""
+msgstr "Спасылка"
 
 msgid "Stops are possible on the"
-msgstr ""
+msgstr "Прыпынкі магчымыя на"
 
 msgid "right hand side"
-msgstr ""
+msgstr "Правы бок"
 
 msgid "left hand side"
-msgstr ""
+msgstr "Левы бок"
 
 msgid "Maximum distance from route"
-msgstr ""
+msgstr "Максімальная дыстанцыя ад маршруту"
 
 msgid "Public Transport: Change stop type"
-msgstr ""
+msgstr "Грамадскі транспарт: Змена выгляду прыпынку"
 
 msgid "Create Stops from GPX ..."
-msgstr ""
+msgstr "Стварыць прыпынкі па GPX..."
 
 msgid "Create Stops from a GPX file"
-msgstr ""
+msgstr "Стварыць прыпынкі з файла GPX"
 
 msgid "Select GPX file"
-msgstr ""
+msgstr "Абярыце GPX файл"
 
 msgid "The GPX file contained no tracks or waypoints."
-msgstr ""
+msgstr "GPX файл не ўтрымоўвае трэкаў ці шляхавых кропак."
 
 msgid "Create Stops from GPX"
-msgstr ""
+msgstr "Стварыць прыпынкі з GPX"
 
 msgid "Tracks in this GPX file:"
-msgstr ""
+msgstr "Маршруты ў GPX файле:"
 
 msgid "Detach"
-msgstr ""
+msgstr "Адлучыць"
 
 msgid "implicit"
-msgstr ""
+msgstr "няяўны"
 
 msgid ""
 "The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
 "has trackpoints."
 msgstr ""
+"GPX файл не ўтрымоўвае пэўных кропак трэка. Калі ласка, выкарыстоўвайце GPX "
+"файл, які мае кропкі трэка."
 
 msgid "GPX File Trouble"
-msgstr ""
+msgstr "Праблемны GPX файл"
 
 msgid "unnamed"
-msgstr "безназоўная"
+msgstr "безназоўны"
 
 msgid "Public Transport: Add track stop"
-msgstr ""
+msgstr "Грамадскі транспарт: Дадаць у маршрут прыпынак"
 
 msgid "Public Transport: Delete track stop"
-msgstr ""
+msgstr "Грамадскі транспарт: Выдаліць з маршруту прыпынак"
 
 msgid "Public Transport: Detach track stop list"
-msgstr ""
+msgstr "Грамадскі транспарт: Адлучыць ад спісу маршруту прыпынак"
 
 msgid "Public Transport: Edit track stop list"
-msgstr ""
+msgstr "Грамадскі транспарт: Рэдагаваць прыпынак у спісе маршруту"
 
 msgid "Public Transport: Relocate nodes in track stoplist"
-msgstr ""
+msgstr "Грамадскі транспарт: Перамясціць кропкі ў спісе прыпынкаў маршруту"
 
 msgid "Public Transport: sort track stop list"
-msgstr ""
+msgstr "Грамадскі транспарт: Сартаваць спіс прыпынкаў маршруту"
 
 msgid "Public Transport: Suggest stops"
-msgstr ""
+msgstr "Грамадскі транспарт: Прапанаваць прыпынкі"
 
 msgid "Stopname"
-msgstr ""
+msgstr "Назва прыпынку"
 
 msgid "Public Transport: Detach waypoints"
-msgstr ""
+msgstr "Грамадскі транспарт: Адлучыць шляхавыя кропкі"
 
 msgid "Public Transport: Disable waypoints"
-msgstr ""
+msgstr "Грамадскі транспарт: Адключыць шляхавыя кропкі"
 
 msgid "Public Transport: Enable waypoints"
-msgstr ""
+msgstr "Грамадскі транспарт: Уключыць шляхавыя кропкі"
 
 msgid "Public Transport: Edit waypoint name"
+msgstr "Грамадскі транспарт: Рэдагаваць імя кропкі"
+
+msgid "Public transport routes"
+msgstr "Маршруты грамадскага транспарту"
+
+msgid "Toggle direction arrows"
+msgstr "Паказаць/схаваць стрэлкі напрамкаў"
+
+msgid "Toggle reference labels"
+msgstr "Паказаць/схаваць пазнакі"
+
+msgid "Visualize public transport routes"
+msgstr "Візуалізаваць маршруты грамадскага транспарту"
+
+msgid "Filters"
+msgstr "Фільтры"
+
+msgid "Choose Filter"
+msgstr "Абраць фільтр"
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
 msgstr ""
+"Памылка ініцыялізацыі JSlider. Пераканайцеся, што ваша мета-інф. карэктная."
 
 msgid "Relation Toolbox"
-msgstr ""
+msgstr "Інструменты для працы з адносінамі"
 
 msgid "Open relation/multipolygon editor panel"
-msgstr ""
+msgstr "Адкрыць панэль рэдагавання адносін"
 
 msgid "Specify role"
-msgstr ""
+msgstr "Пакажыце ролю"
 
 msgid "Change relation member roles to {0}"
-msgstr ""
+msgstr "Змяніць ролі удзельнікаў адносін на {0}"
 
 msgid "Create administrative boundary relations"
-msgstr ""
+msgstr "Стварыць адносіны з адміністрацыйнымі межамі"
 
 msgid "Add tags boundary and admin_level to boundary relation ways"
-msgstr ""
+msgstr "Дадаць тэгі boundary і admin_level да ліній ў адносінах мяжы"
 
 msgid "Move area tags from contour to relation"
-msgstr ""
+msgstr "Перамясціць тэгі палігона з контуру на адносіны"
 
 msgid "When moving tags, consider even non-repeating ones"
-msgstr ""
+msgstr "Перасоўваючы тэгі, не забывайце і пра непаўтаральныя"
 
 msgid "Always split ways of neighbouring multipolygons"
-msgstr ""
+msgstr "Заўсёды падзяляць лініі суседніх мультыпалігонаў"
 
 msgid "Change role"
-msgstr ""
+msgstr "Змена ролі"
 
 msgid "Enter role for selected members"
-msgstr ""
+msgstr "Выберыце ролю для вылучаных аб’ектаў"
 
 msgid "Relation Toolbox: {0}"
-msgstr ""
+msgstr "Інструменты для працы з адносінамі: {0}"
 
 msgid "another..."
-msgstr ""
+msgstr "іншая..."
 
 msgid "Add/remove members from the chosen relation"
-msgstr ""
+msgstr "Дадаць/прыбраць аб’екты з абраных адносін"
 
 msgid "Clear the chosen relation"
-msgstr ""
+msgstr "Прыбраць абраныя адносіны"
 
 msgid "Create a multipolygon from selected objects"
-msgstr ""
+msgstr "Стварыць мультыпалігон з вылучаных аб''ектаў"
 
 msgid "Create multipolygons from rings"
-msgstr ""
+msgstr "Стварыць мультыпалігоны з акружнасцяў"
 
 msgid "Move tags from ways to relation"
-msgstr ""
+msgstr "Перамясціць тэгі з лініі на адносіны"
 
 msgid "Enter admin level and name for the border relation:"
-msgstr ""
+msgstr "Калі ласка, увядзіце admin_level і назву мяжы:"
 
 msgid "Admin level"
-msgstr ""
+msgstr "Адмін. узровень"
 
 msgid "Create a relation from selected objects"
-msgstr ""
+msgstr "Стварыць адносіны з вылучаных аб’ектаў"
 
 msgid "Choose a type for the relation:"
-msgstr ""
+msgstr "Выберыце тып адносінаў:"
 
 msgid "Delete relation"
-msgstr ""
+msgstr "Выдаліць адносіны"
 
 msgid "Download incomplete members for the chosen relation"
-msgstr ""
+msgstr "Дапампаваць удзельнікаў абраных адносінаў"
 
 msgid "Download referrers"
 msgstr "Запампаваць спасылкі"
 
 msgid "Download referrers for the chosen relation and its members."
 msgstr ""
+"Спампаваць аб''екты, якія спасылаюцца на выбраныя адносіны і іх удзельнікаў."
 
 msgid "Duplicate relation"
-msgstr ""
+msgstr "Дубляваць адносіны"
 
 msgid "Open relation editor for the chosen relation"
-msgstr ""
+msgstr "Адкрыць рэдактар для абраных адносінаў"
 
 msgid "Find a relation"
-msgstr ""
+msgstr "Знайсці адносіны"
 
 msgid "Reconstruct polygon"
-msgstr ""
+msgstr "Ператварыць у палігон"
 
 msgid "Multipolygon must consist only of ways"
-msgstr ""
+msgstr "Мультыпалігон павінен складацца толькі з ліній"
 
 msgid "Reconstruction of polygons can be done only from outer ways"
 msgstr ""
+"Рэканструкцыя палігонаў можа быць ажыццёўлена толькі для знешніх ліній"
 
 msgid "Reconstruct polygons from relation {0}"
-msgstr ""
+msgstr "Аднавіць палігон з адносін {0}"
 
 msgid "Reconstruct route"
-msgstr ""
+msgstr "Рэканструяваць маршрут"
 
 msgid "Open relation wiki page"
-msgstr ""
+msgstr "Адкрыць старонку вікі інфармацыі пра адносіны"
 
 msgid "Select relation in main selection."
-msgstr ""
+msgstr "Выбраць адносіны з асноўнага вылучэння"
 
 msgid "Fix roles of the chosen relation members"
-msgstr ""
+msgstr "Выправіць ролі членаў выбарных адносін"
 
 msgid "Complete multipolygon for way {0}"
-msgstr ""
+msgstr "Замкнуць мультыпалігон для лініі {0}"
 
 msgid "Node without ''house'' role found"
-msgstr ""
+msgstr "Знойдзена кропка без ролі ''house''"
 
 msgid "Way without ''house'' or ''street'' role found"
-msgstr ""
+msgstr "Знойдзена лінія без ролі ''house'' ці ''street''"
 
 msgid "Relation without ''house'' role found"
-msgstr ""
+msgstr "Знойдзены адносіны без ролі ''house''"
 
 msgid "Relation does not have name"
-msgstr ""
+msgstr "У адносін адсутнічае імя"
 
 msgid "Relation has streets with different names"
-msgstr ""
+msgstr "Адносіны ўтрымліваюць вуліцы з рознымі назвамі"
 
 msgid "fix associatedStreet relation"
-msgstr ""
+msgstr "выправіць адносіны associatedStreet"
 
 msgid "Relation without ''subarea'' role found"
-msgstr ""
+msgstr "Знойдзены адносіны без ролі ''subarea''"
 
 msgid "Node without ''label'' or ''admin_centre'' role found"
-msgstr ""
+msgstr "Знойдзена кропка без ролі ''label'' ці ''admin_centre''"
 
 msgid "Way without ''inner'' or ''outer'' role found"
-msgstr ""
+msgstr "Знойдзена лінія без ролі ''inner'' ці ''outer''"
 
 msgid "Node without ''stop'' or ''platform'' role found"
-msgstr ""
+msgstr "Выяўлена кропка без ролі ''stop'' ці ''platform''"
 
 msgid "Way platform without ''platform'' role found"
-msgstr ""
+msgstr "Выяўлена лінія платформы без ролі ''platform''"
 
 msgid "Revert changeset fully"
-msgstr ""
+msgstr "Цалкам адкаціць пакет правак"
 
 msgid "Revert selection only"
-msgstr ""
+msgstr "Вярнуць толькі вылучанае"
 
 msgid "Revert selection and restore deleted objects"
-msgstr ""
+msgstr "Вярнуць вылучанае і аднавіць сцёртыя аб’екты"
 
 msgid "Revert changeset"
-msgstr ""
+msgstr "Адкаціць пакет правак"
 
 msgid "Revert"
-msgstr ""
+msgstr "Адкаціць"
 
 msgid "Enter the ID of the changeset that should be reverted"
-msgstr ""
+msgstr "Увядзіце ID пакета правак, які павінен быць адменены"
 
 msgid "Reverted changeset"
-msgstr ""
+msgstr "Адменены пакет правак"
 
 msgid "It is not allowed to revert changeset from {0}"
-msgstr ""
+msgstr "Нельга адкаціць пакет правак з {0}"
+
+msgid "Downloading objects history"
+msgstr "Запампоўка гісторыі аб''ектаў"
 
 msgid "Missing merge target for {0} with id {1}"
-msgstr ""
+msgstr "Адсутнічае вынік аб’яднання для {0} з id {1}"
 
 msgid "Objects history"
-msgstr ""
+msgstr "Гісторыя аб’ектаў"
 
 msgid "History reverter"
-msgstr ""
+msgstr "Адкатчык гісторыі"
+
+msgid "Tool: Display objects history dialog"
+msgstr "Інструменты: Паказаць дыялог гісторыі аб''ектаў"
 
 msgid "Preparing history data..."
-msgstr ""
+msgstr "Падрыхтоўка дадзеных гісторыі..."
 
 msgid "Remote Control has been asked to revert a changeset."
-msgstr ""
+msgstr "Дыстанцыйнае кіраванне запытала адкат пакета правак."
 
 msgid "Reverting..."
-msgstr ""
+msgstr "Адкочваем..."
 
 msgid ""
 "This changeset has objects that are not present in current dataset.\n"
 "It is needed to download them before reverting. Do you want to continue?"
 msgstr ""
+"Гэты набор зменаў змяшчае аб’екты, якіх няма ў бягучым наборы дадзеных.\n"
+"Іх трэба спачатку загрузіць, перад тым як адмяніць. Хочаце працягнуць?"
 
 msgid "Confirm"
-msgstr ""
+msgstr "Пацвердзіць"
 
 msgid "Fetching missing primitives"
-msgstr ""
+msgstr "Спампоўка адсутных элементаў"
 
 msgid "Downloading changeset"
-msgstr ""
+msgstr "Спампоўка пакета правак"
 
 msgid "See {0}"
-msgstr ""
+msgstr "Глядзіце {0}"
 
 msgid "Revert changeset #{0}"
-msgstr ""
+msgstr "Адкаціць пакет правак №{0}"
 
 msgid ""
 "Warning: unsupported start element ''{0}'' in changeset content at position "
 "({1},{2}). Skipping."
 msgstr ""
+"Папярэджанне: непадтрымоўваны пачатковы элемент ''{0}'' у змесціве пакета "
+"правак у пазіцыі ({1},{2}). Прапушчана."
 
 msgid ""
 "Warning: unsupported end element ''{0}'' in changeset content at position "
 "({1},{2}). Skipping."
 msgstr ""
+"Папярэджанне: Непадтрымоўваны канчатковы элемент ''{0}'' у змесціве пакета "
+"правак у пазіцыі ({1},{2}). Прапушчана."
 
 msgid "Road Sign Plugin"
-msgstr ""
+msgstr "Модуль Дарожныя знакі"
 
 msgid "signs"
-msgstr ""
+msgstr "Знакі"
 
 msgid "Change Properties"
-msgstr ""
+msgstr "Змяніць параметры"
 
 msgid "Country preset:"
-msgstr ""
+msgstr "Краіна:"
 
 msgid "Show all signs"
-msgstr ""
+msgstr "Паказаць усе знакі"
 
 msgid "Show a selection of the most useful signs"
-msgstr ""
+msgstr "Паказваць выбарку самых карысных знакаў"
 
 msgid "Belgium"
-msgstr ""
+msgstr "Бельгія"
 
 msgid "Spain"
-msgstr ""
+msgstr "Іспанія"
 
 msgid "Germany"
-msgstr ""
+msgstr "Нямеччына"
 
 msgid "Poland"
-msgstr ""
+msgstr "Польшча"
 
 msgid "Slovakia"
-msgstr ""
+msgstr "Славакія"
 
 msgid "Roadsign tagging"
-msgstr ""
+msgstr "Тэгі для дарожных знакаў"
 
 msgid "Add tags by clicking on road signs"
-msgstr ""
+msgstr "Дадаваць тэгі, пстрычкамі на дарожныя знакі"
 
 msgid "Roadsigns plugin: open dialog"
-msgstr ""
+msgstr "Модуль RoadSigns: адкрыць дыялог"
 
 msgid "custom"
-msgstr ""
+msgstr "карыстальніцкі"
 
 msgid "Could not read tagging preset source: ''{0}''"
-msgstr ""
+msgstr "Не атрымалася прачытаць крыніцу нарыхтовак тэгаў: ''{0}''"
 
 msgid "Error parsing tagging preset from ''{0}'':\n"
-msgstr ""
+msgstr "Памылка разбору нарыхтоўкі тэгаў з ''{0}'':\n"
 
 msgid "Sign {0}"
-msgstr ""
+msgstr "Знак {0}"
 
 msgid "Additional sign {0}"
-msgstr ""
+msgstr "Дадатковы знак {0}"
 
 msgid "Edit relation"
-msgstr ""
+msgstr "Рэдагаваць адносіны"
 
 msgid "Edit relations"
-msgstr ""
+msgstr "Рэдагаваць адносіны"
 
 msgid "No relation is selected"
-msgstr ""
+msgstr "Адносіны не выбраны"
 
 msgid "Remove node ''{0}'' at position {1} from relation ''{2}''"
-msgstr ""
+msgstr "Выдаліць кропку ''{0}'' ў пазіцыі {1} з адносін ''{2}''"
 
 msgid "Remove way ''{0}'' at position {1} from relation ''{2}''"
-msgstr ""
+msgstr "Выдаліць лінію ''{0}'' ў пазіцыі {1} з адносін ''{2}''"
 
 msgid "Remove relation ''{0}'' at position {1} from relation ''{2}''"
-msgstr ""
+msgstr "Выдаліць адносіны ''{0}'' ў пазіцыі {1} з адносін ''{2}''"
 
 msgid "routing active route"
-msgstr ""
+msgstr "Маршрутызацыя: актыўны маршрут"
 
 msgid "routing inactive route"
-msgstr ""
+msgstr "Маршрутызацыя: неактыўны маршрут"
 
 msgid "Routing"
-msgstr ""
+msgstr "Маршрутызацыя"
 
 msgid "Click to add destination."
-msgstr ""
+msgstr "Націсніце, каб дадаць прызначэнне."
 
 msgid "Click and drag to move destination"
-msgstr ""
+msgstr "Націсніце і перацягніце, каб перамясціць прызначэнне."
 
 msgid "Click to remove destination"
-msgstr ""
+msgstr "Націсніце, каб выдаліць прызначэнне"
 
 msgid "Open a list of routing nodes"
-msgstr ""
+msgstr "Адкрыць спіс кропак маршруту"
 
 msgid "Add routing layer"
-msgstr ""
+msgstr "Дадаць пласт шляхоў."
 
 msgid "Criteria"
-msgstr ""
+msgstr "Крытэры"
 
 msgid "Shortest"
-msgstr ""
+msgstr "Найкароткі"
 
 msgid "Fastest"
-msgstr ""
+msgstr "Самы хуткі"
 
 msgid "Ignore oneways"
-msgstr ""
+msgstr "Ігнараваць аднабаковы рух"
 
 msgid "Reverse route"
-msgstr ""
+msgstr "Зваротны маршрут"
 
 msgid "Clear route"
-msgstr ""
+msgstr "Ачысціць маршрут"
 
 msgid "Reconstruct Graph"
-msgstr ""
+msgstr "Аднавіць граф"
 
 msgid "Routing Plugin Preferences"
-msgstr ""
+msgstr "Налады модуля маршрутызацыі"
 
 msgid "Configure routing preferences."
-msgstr ""
+msgstr "Задаць налады маршрутызацыі."
 
 msgid "Speed (Km/h)"
-msgstr ""
+msgstr "Хуткасць (км/г)"
 
 msgid "Weight"
-msgstr ""
+msgstr "Вага"
 
 msgid "Enter weight values"
-msgstr ""
+msgstr "Увядзіце значэнні вагі"
 
 msgid "New value for {0}"
-msgstr ""
+msgstr "Новае значэнне для {0}"
 
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
-msgstr ""
+msgstr "Налада ''{0}'' адсутнічае. Немагчыма ініцыялізаваць SdsApi."
+
+msgid "Proxy Authentication Required"
+msgstr "Неабходная аўтарызацыя на проксі"
 
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
 msgstr ""
+"<html><body><p class=\"warning-body\"><strong>Папярэджанне:</strong> Пароль "
+"у файле налад JOSM захоўваецца ў выглядзе простага тэксту. </p></body></html>"
 
 msgid "Enter credentials for Separate Data Store API"
-msgstr ""
+msgstr "Увядзіце параметры доступу да Separate Data Store API"
 
 msgid "Please enter the user name of your SDS account"
-msgstr ""
+msgstr "Калі ласка, увядзіце Імя карыстальніка ўліковага запісу SDS"
 
 msgid "Please enter the password of your SDS account"
-msgstr ""
+msgstr "Калі ласка, увядзіце Пароль уліковага запісу SDS"
 
 msgid ""
 "Authenticating at the SDS API ''{0}'' failed. Please enter a valid username "
 "and a valid password."
 msgstr ""
+"Аўтэнтыфікацыя ў SDS API ''{0}'' не атрымалася. Калі ласка, увядзіце "
+"правільныя імя карыстальніка і пароль."
 
 msgid "SDS data file"
-msgstr ""
+msgstr "Файл дадзеных SDS"
 
 msgid "Load..."
-msgstr ""
+msgstr "Загрузіць..."
 
 msgid "Load separate data store data from a file."
-msgstr ""
+msgstr "Загрузіць дадзеныя SDS з файла."
 
 msgid "Loading files"
-msgstr ""
+msgstr "Загрузка файлаў"
 
 msgid "SDS"
-msgstr ""
+msgstr "SDS"
 
 msgid "Information about SDS."
-msgstr ""
+msgstr "Інфармацыя пра SDS."
 
 msgid "About SDS..."
-msgstr ""
+msgstr "Пра SDS..."
 
 msgid "Open a preferences dialog for SDS."
-msgstr ""
+msgstr "Адкрыць дыялог налад SDS."
 
 msgid "Separate Data Store"
-msgstr ""
+msgstr "Separate Data Store"
 
 msgid "Configures access to the Separate Data Store."
-msgstr ""
+msgstr "Налады доступу да Separate Data Store"
 
 msgid "Server"
-msgstr ""
+msgstr "Сервер"
 
 msgid "The URL under which the SDS server can be contacted."
-msgstr ""
+msgstr "URL для падлучэння да сервера SDS."
 
 msgid ""
 "The user name at the SDS server. You need to create an account with the SDS "
 "admin first."
 msgstr ""
+"Імя карыстальніка на серверы SDS. (Уліковы запіс ствараецца адміністратарам "
+"сервера SDS)"
 
 msgid ""
 "The password at the SDS server. You need to create an account with the SDS "
 "admin first."
 msgstr ""
+"Пароль на серверы SDS. (Уліковы запіс ствараецца адміністратарам сервера SDS)"
 
 msgid ""
 "Tags beginning with this prefix are never saved to OSM, but to the SDS "
 "server only."
 msgstr ""
+"Тэгі, якія пачынаюцца з гэтага прэфікса, ніколі не перадаюцца на сервер OSM. "
+"Яны захоўваюцца толькі на серверы SDS."
 
 msgid "SDS server URL"
-msgstr ""
+msgstr "URL сервера SDS"
 
 msgid "SDS username"
-msgstr ""
+msgstr "Імя карыстальніка SDS"
 
 msgid "SDS password"
-msgstr ""
+msgstr "Пароль SDS"
 
 msgid "Test credentials now"
-msgstr ""
+msgstr "Праверыць уліковы запіс..."
 
 msgid "SDS tag prefix"
-msgstr ""
+msgstr "Прэфікс тэгаў SDS"
 
 msgid "Connection successful."
-msgstr ""
+msgstr "Злучэнне выканана паспяхова."
 
 msgid "Cannot connect to SDS server: "
-msgstr ""
+msgstr "Не атрымалася падлучыцца да сервера SDS: "
 
 msgid "Save..."
-msgstr ""
+msgstr "Захаваць..."
 
 msgid "Save the current separate data store information to a file."
-msgstr ""
+msgstr "Захаваць бягучую інфармацыю SDS у файл"
 
 msgid "Save SDS file"
-msgstr ""
+msgstr "Захаваць SDS-файл"
 
 msgid "No object selected"
-msgstr ""
+msgstr "Аб’ект не абраны"
 
 msgid "SeaChart Editor"
-msgstr ""
+msgstr "Рэдактар марскіх карт"
 
 msgid "Seamark Inspector"
-msgstr ""
+msgstr "Інспектар навігацыйных знакаў"
 
 msgid "Select only one object"
-msgstr ""
+msgstr "Вылучыце толькі адзін аб’ект"
 
 msgid "Select a map object"
-msgstr ""
+msgstr "Вылучыце аб’ект карты"
 
 msgid "Simplify Area"
-msgstr ""
+msgstr "Спрасціць палігон"
 
 msgid "Delete unnecessary nodes from an area."
-msgstr ""
+msgstr "Выдаліць непатрэбныя кропкі з палігона."
 
 msgid "Yes, delete nodes"
-msgstr "Так, выдаліць ноды"
+msgstr "Так, выдаліць кропкі"
 
 msgid "Delete nodes outside of downloaded data regions"
-msgstr "Выдаліць ноды знешнія да запампаваных рэгіёнаў"
+msgstr "Выдаліць кропкі за межамі вобласці запампаваных з сервера дадзеных"
 
 msgid "No, abort"
-msgstr "Не, спыніць"
+msgstr "Не, перапыніць"
 
 msgid "Do you want to delete them anyway?"
-msgstr "Сапраўды выдаліць?"
+msgstr "Вы ўсё адно жадаеце выдаліць іх?"
 
 msgid "Delete nodes outside of data regions?"
-msgstr "Выдаліць ноды знешнія да запампаваных рэгіёнаў"
+msgstr "Выдаліць кропкі за межамі вобласці дадзеных?"
 
 msgid "average nearby nodes"
-msgstr ""
+msgstr "асерадніць суседнія кропкі"
 
 msgid ""
 "Node of the way (area) is removed if all of <u>Angle Weight</u>, <u>Area "
@@ -27848,713 +30713,807 @@ msgid ""
 "another step of the simplification that merges adjanced nodes that are "
 "closer than <u>Threshold</u> meters."
 msgstr ""
+"Кропка лініі будзе выдаленая, калі ўсё 3 велічыні больш 1: <u>Мера кута</u>, "
+"<u>Мера плошчы</u> і <u>Мера адлегласці</u>. <u>Мера</u> вылічаецца: "
+"<u>Значэнне</u> / <u>Мяжа</u>, дзе <u>Значэнне</u> адно з <u>Кут</u>, "
+"<u>Плошча</u> або <u>Адлегласць</u>, вылічаемае з кожнай тройкі злучаных "
+"кропак лініі. <ul><li><u>Значэнне</u> <u>Кута</u> - кут у градусах на "
+"сярэдняй кропцы</li><li><u>Значэнне</u> <u>Плошчы</u> - плошча "
+"трохвугольніка</li><li><u>Значэнне</u> <u>Адлегласці</u> - Cross Track Error "
+"Distance</li></ul>Усе тры <u>Меры</u > множацца на іх <u>Каэфіцыент</u> і "
+"падсумоўваюцца. Кропка з найменшай сумай выдаляецца. Разлікі і выдаленне "
+"працягваюцца, пакуль ёсць што выдаляць. Зліццё блізкіх кропак - наступны "
+"крок спрашчэння, які аб''ядноўвае кропкі, якія бліжэй названага "
+"<u>Парога</u> у метрах."
 
 msgid "Angle Threshold"
-msgstr ""
+msgstr "Парог кута"
 
 msgid "Angle Factor"
-msgstr ""
+msgstr "Вуглавы каэфіцыент"
 
 msgid "Area Threshold"
-msgstr ""
+msgstr "Парог плошчы"
 
 msgid "Area Factor"
-msgstr ""
+msgstr "Каэфіцыент плошчы"
 
 msgid "Distance Threshold"
-msgstr ""
+msgstr "Парог адлегласці"
 
 msgid "Distance Factor"
-msgstr ""
+msgstr "Каэфіцыент адлегласці"
 
 msgid "Merge Nearby Nodes Threshold"
-msgstr ""
+msgstr "Парог блізкасці кропак (м)"
 
 msgid "SeaMap Editor"
-msgstr ""
+msgstr "Рэдактар марскіх карт"
+
+msgid "Spline drawing"
+msgstr "Маляванне сплайну"
+
+msgid "Draw a spline curve"
+msgstr "Намаляваць сплайн"
+
+msgid "Spline goes outside of the world."
+msgstr "Сплайн выходзіць за межы свету."
+
+msgid "Add an existing node to spline: {0}"
+msgstr "Дадаць існую кропку да сплайну: {0}"
+
+msgid "Add a new node to spline: {0}"
+msgstr "Дадаць новую кропку да сплайну: {0}"
+
+msgid "Delete spline node {0}"
+msgstr "Выдаліць кропку сплайну {0}"
+
+msgid "Finish spline"
+msgstr "Завяршыць сплайн"
+
+msgid "Splines"
+msgstr "Сплайны"
+
+msgid "Spline drawing preferences"
+msgstr "Налады сплайну"
+
+msgid "Curve steps"
+msgstr "Лік сегментаў крывой"
+
+msgid "Undelete node {0}"
+msgstr "Вярнуць выдаленую кропку {0}"
 
 msgid "OSM Export"
-msgstr ""
+msgstr "Экспарт OSM"
 
 msgid "Export traffic data to SUMO network file."
-msgstr ""
+msgstr "Экспартаваць дадзеныя пра трафік у network-файл сімулятара SUMO."
 
 msgid "SUMO Export"
-msgstr ""
+msgstr "Экспарт у SUMO"
+
+msgid "Export"
+msgstr "Экпарт"
 
 msgid "AutoSave LiveData"
-msgstr ""
+msgstr "Аўтазахаванне дадзеных пазіцыянавання"
 
 msgid "Save captured data to file every minute."
-msgstr ""
+msgstr "Захоўваць захопленыя дадзеныя ў файл кожную хвіліну."
 
 msgid "Error while exporting {0}: {1}"
-msgstr ""
+msgstr "Памылка пры экспарце {0}: {1}"
 
 msgid "Duplicate hotkey for button ''{0}'' - button will be ignored!"
 msgstr ""
+"Дублікат гарачай клавішы для кнопкі ''{0}'' - кнопка будзе праігнаравана!"
 
 msgid "SurveyorPlugin needs LiveGpsPlugin, but could not find it!"
-msgstr ""
+msgstr "Модулю Surveyor неабходзен модуль LiveGps, але ён не быў выяўлены!"
 
 msgid "Surveyor..."
-msgstr ""
+msgstr "Surveyor..."
 
 msgid "Open surveyor tool."
-msgstr ""
+msgstr "Адкрыць панэль Surveyor"
 
 msgid "Surveyor"
-msgstr ""
+msgstr "Surveyor"
 
 msgid "Could not read surveyor definition: {0}"
-msgstr ""
+msgstr "Surveyor: Не атрымалася прачытаць вызначэнне: {0}"
 
 msgid "Error parsing {0}: {1}"
-msgstr ""
+msgstr "Памылка разбору {0}: {1}"
 
 msgid "Surveyor waypoint layer"
-msgstr ""
+msgstr "Пласт шляхавых кропак Surveyor"
 
 msgid "{0} start"
-msgstr ""
+msgstr "{0} пачатак"
 
 msgid "{0} end"
-msgstr ""
+msgstr "{0} канец"
 
 msgid "Waypoint Description"
-msgstr ""
+msgstr "Апісанне шляхавой кропкі"
 
 msgid "Tag2Link Preferences"
-msgstr ""
+msgstr "Налады Tag2Link"
 
 msgid "Launch browser with information about the selected object"
-msgstr ""
+msgstr "Запусціць браўзэр з інфармацыяй аб выбраных аб''ектах"
 
 msgid ""
 "Launch your default software for sending an email to the selected contact "
 "address"
 msgstr ""
+"Запускае ваш паштовы кліент для адпраўкі паведамлення па абраным адрасе"
 
 msgid "Edit tags"
-msgstr ""
+msgstr "Рэдагаваць тэгі..."
 
 msgid "Launches the tag editor dialog"
-msgstr ""
+msgstr "Адкрывае дыялог рэдактара тэгаў"
 
 msgid "JOSM Tag Editor Plugin"
-msgstr ""
+msgstr "Модуль рэдагавання тэгаў JOSM"
 
 msgid "Abort tag editing and close dialog"
-msgstr ""
+msgstr "Перапыніць праўку тэгаў і зачыніць дыялог"
 
 msgid "Apply edited tags and close dialog"
-msgstr ""
+msgstr "Ужыць выпраўленыя тэгі і зачыніць дыялог"
 
 msgid "Highlight"
-msgstr ""
+msgstr "Падсвятліць"
 
 msgid "Group"
-msgstr ""
+msgstr "Група"
 
 msgid "Item"
-msgstr ""
+msgstr "Элемент"
 
 msgid "unexpected column number {0}"
-msgstr ""
+msgstr "нечаканы нумар слупка {0}"
 
 msgid "Tagging Preset Tester"
-msgstr ""
+msgstr "Аналізатар нарыхтовак тэгаў"
 
 msgid ""
 "Open the tagging preset test tool for previewing tagging preset dialogs."
 msgstr ""
+"Адкрывае сродак аналізу нарыхтовак тэгаў, каб скарыстацца дыялогам прагляду "
+"гэтых тэгаў."
 
 msgid "You have to specify tagging preset sources in the preferences first."
-msgstr ""
+msgstr "Спачатку вы павінны паказаць у наладах крыніцы нарыхтовак тэгаў."
 
 msgid "Enter housenumbers or amount of segments"
-msgstr ""
+msgstr "Увядзіце нумары хат ці колькасць сегментаў"
 
 msgid "Terrace a house"
-msgstr ""
+msgstr "Пранумараваць хату"
 
 msgid "Interpolation"
-msgstr ""
+msgstr "Інтэрпаляцыя"
 
 msgid "Lowest Number"
-msgstr ""
+msgstr "Мінімальны нумар"
 
 msgid "Lowest housenumber of the terraced house"
-msgstr ""
+msgstr "Мінімальны нумар шэрагу хат"
 
 msgid "Highest Number"
-msgstr ""
+msgstr "Максімальны нумар"
 
 msgid "List of Numbers"
-msgstr ""
+msgstr "Спіс нумароў"
 
 msgid "add to existing associatedStreet relation"
-msgstr ""
+msgstr "дадаць да існуючых адносін associatedStreet"
 
 msgid "create an associatedStreet relation"
-msgstr ""
+msgstr "стварыць адносіны associatedStreet"
 
 msgid "keep outline way"
-msgstr ""
+msgstr "захаваць лінію вонкавага контуру"
 
 msgid "Street name: "
-msgstr ""
+msgstr "Назва вуліцы: "
 
 msgid "Even/Odd"
-msgstr ""
+msgstr "Цотныя/Няцотныя"
 
 msgid "Lowest number"
-msgstr ""
+msgstr "Мінімальны нумар"
 
 msgid "Highest number"
-msgstr ""
+msgstr "Максімальны нумар"
 
 msgid "Lowest housenumber cannot be higher than highest housenumber"
-msgstr ""
+msgstr "Мінімальны нумар хаты не можа быць больш максімальнага"
 
 msgid "Housenumbers do not match odd/even setting"
-msgstr ""
+msgstr "нумары хат не адпавядаюць усталёўкам цотных/няцотных"
 
 msgid "Segment must be a number greater 1"
-msgstr ""
+msgstr "Сегмент павінен быць лікам больш 1"
 
 msgid "{0} must be greater than 0"
-msgstr ""
+msgstr "{0} павінна быць больш, чым 0"
 
 msgid "{0} is not a number"
-msgstr ""
+msgstr "{0} не лік"
 
 msgid "Reverse a terrace"
-msgstr ""
+msgstr "Перанумараваць наадварот"
 
 msgid "Reverses house numbers on a terrace."
-msgstr ""
+msgstr "Рэверсуе нумарацыю дамоў тэрасы"
 
 msgid "Reverse a Terrace"
-msgstr ""
+msgstr "Перанумараваць наадварот"
 
 msgid "Cannot reverse!"
-msgstr ""
+msgstr "Немагчыма рэверсаваць!"
 
 msgid "Reverse Terrace"
-msgstr ""
+msgstr "Перанумараваць наадварот"
 
 msgid "Terrace a building"
-msgstr ""
+msgstr "Шэраг хат уздоўж вуліцы"
 
 msgid "Creates individual buildings from a long building."
-msgstr ""
+msgstr "Стварыць асобныя будынкі  з доўгага будынка"
 
 msgid "Invalid selection"
-msgstr ""
+msgstr "Няправільнае вылучэнне"
 
 msgid ""
 "Select a single, closed way of at least four nodes. (Optionally you can also "
 "select a street for the addr:street tag and a node to mark the start of "
 "numbering.)"
 msgstr ""
+"Вылучыце адну замкнёную лінію, якая складаецца мінімум з чатырох кропак. "
+"(Дадаткова можна абраць дарогу для тэга addr:street і кропку для пазначэння "
+"пачатку нумарацыі)"
 
 msgid "Terrace"
-msgstr ""
+msgstr "Шэраг хат уздоўж вуліцы"
 
 msgid "Browse"
-msgstr ""
+msgstr "Прагляд"
 
 msgid "Browse map with left button"
-msgstr ""
+msgstr "Праглядаць карту, выкарыстоўваючы левую кнопку мышы"
 
 msgid "Merge objects nodes"
-msgstr ""
+msgstr "Аб’яднаць кропкі аб’ектаў"
 
 msgid "Tracer"
-msgstr ""
+msgstr "Трасіроўшчык"
 
 msgid "Tracer."
-msgstr ""
+msgstr "Трасіроўшчык."
 
 msgid "Tracer building"
-msgstr ""
+msgstr "Трасавальнік будынка"
 
 msgid "Tracer2"
-msgstr ""
+msgstr "Tracer2"
 
 msgid "Tracer2."
-msgstr ""
+msgstr "Tracer2."
 
 msgid "Change tag {0} to {1}"
-msgstr ""
+msgstr "Змяніць тэг {0} на {1}"
 
 msgid ""
 "The Tracer2Server version isn''t compatible with this plugin. Please "
 "download version {0} from\n"
 "{1}."
 msgstr ""
+"Версія Tracer2Server не сумяшчальная з гэтым модулем. Загрузіце версію {0} "
+"з\n"
+"{1}."
 
 msgid ""
 "New version of Tracer2Server is available. For best results please upgrade "
 "to version {0}."
 msgstr ""
+"Даступная новая версія Tracer2Server. Для найлепшых вынікаў абнавіцеся да "
+"версіі {0}."
 
 msgid "No set of parameter is active!"
-msgstr ""
+msgstr "Няма актыўнага набору параметраў!"
 
 msgid "Select parameter"
-msgstr ""
+msgstr "Абярыце параметр"
 
 msgid "Tracer2: add a way with {0} points"
-msgstr ""
+msgstr "Tracer2: дадаць лінію з {0} кропак"
 
 msgid "Tracer2: modify way to {0} points"
-msgstr ""
+msgstr "Tracer2: змяніць лінію з {0} кропак"
 
 msgid "Tracer2 error"
-msgstr ""
+msgstr "Памылка Tracer2"
 
 msgid "Parameter for server request"
-msgstr ""
-
-msgid "Tile size:"
-msgstr ""
+msgstr "Параметры запыту да сервера"
 
 msgid "Resolution:"
-msgstr ""
+msgstr "Разрозненне:"
 
 msgid "Mode:"
-msgstr ""
+msgstr "Рэжым:"
 
 msgid "Threshold:"
-msgstr ""
+msgstr "Парог:"
 
 msgid "Points per circle:"
-msgstr ""
+msgstr "Кропак на круг:"
 
 msgid "Tag:"
-msgstr ""
+msgstr "Тэг:"
 
 msgid "Preferred values:"
-msgstr ""
+msgstr "Пераважныя значэнні:"
 
 msgid "Delete parameter \"{0}\"?"
-msgstr ""
+msgstr "Выдаліць параметр \"{0}\"?"
 
 msgid "Add new"
-msgstr ""
+msgstr "Дадаць новы"
 
 msgid "Add predefined"
-msgstr ""
+msgstr "Дадаць наканаваны"
 
 msgid "Select predefined parameter"
-msgstr ""
+msgstr "Абярыце наканаваны параметр"
 
 msgid "Modify list of parameter for server request."
-msgstr ""
+msgstr "Змяніць спіс параметраў запыту да сервера."
 
 msgid "Parameter:"
-msgstr ""
+msgstr "Параметр:"
 
 msgid ""
 "Tracer2Server isn''t running. Please start the Server.\n"
 "If you don''t have the server, please download it from\n"
 "{0}."
 msgstr ""
+"Tracer2Server не запушчаны. Калі ласка, запусціце сервер.\n"
+"Калі ў вас няма сервера, загрузіце яго з\n"
+"{0}."
 
 msgid "Tracer2Server hasn''t found anything."
-msgstr ""
+msgstr "Tracer2Server нічога не знайшоў."
 
 msgid "Tracer2Server has detected an error."
-msgstr ""
+msgstr "Tracer2Server выявіў памылку."
 
 msgid "GPG"
-msgstr ""
+msgstr "GPG"
 
 msgid "Export sigs..."
-msgstr ""
+msgstr "Экспартаваць подпісы..."
 
 msgid "Export all signatures to XML file."
-msgstr ""
+msgstr "Экспартаваць усе подпісы ў файл XML."
 
 msgid "Export sigs to XML..."
-msgstr ""
+msgstr "Экспартаваць подпісы ў XML..."
 
 msgid "Save Signatures file"
-msgstr ""
+msgstr "Захаваць файл подпісаў"
 
 msgid ""
 "Get all referenced but not actually present OSM objects from OSM server."
-msgstr ""
+msgstr "Атрымаць усе згаданыя, але адсутныя OSM аб’екты з OSM сервера."
 
 msgid "Download referenced osm objects..."
-msgstr ""
+msgstr "Спампаваць згаданыя osm аб’екты ..."
 
 msgid "{0} Signatures loaded. All referenced OSM objects found."
-msgstr ""
+msgstr "{0} сігнатуры загружана. Усе згаданыя OSM аб''екты знойдзеныя."
 
 msgid ""
 "{0} of {1} OSM objects are referenced but not there.\n"
 "Do you want to load them from OSM-Server?"
 msgstr ""
+"{0} з {1} OSM аб''ектаў згадваюцца, але адсутнічаюць.\n"
+"Хочаце іх загрузіць з OSM сервера?"
 
 msgid "Load objects from server"
-msgstr ""
+msgstr "Спампаваць аб’екты з сервера"
 
 msgid "Download signed data"
-msgstr ""
+msgstr "Запампаваць падпісаныя дадзеныя"
 
 msgid "Warning: Ignoring exception because task was canceled. Exception: {0}"
 msgstr ""
+"Увага: Памылка праігнаравана, паколькі задача была адменена. Памылка: {0}"
 
 msgid ""
 "Generating new Keypair.\n"
 "Collecting randomness..."
 msgstr ""
+"Стварэнне пары ключоў.\n"
+"Збор энтрапіі ..."
 
 msgid "UID"
-msgstr ""
+msgstr "UID"
 
 msgid "KeyID"
-msgstr ""
+msgstr "KeyID"
 
 msgid "OSM-Info"
-msgstr ""
+msgstr "Інфармацыя OSM"
 
 msgid "Signed"
-msgstr ""
+msgstr "Падпісана"
 
 msgid "Unknown"
-msgstr ""
+msgstr "Невядома"
 
 msgid "Object signatures"
-msgstr ""
+msgstr "Подпісы аб’екта"
 
 msgid "Open object signing window."
-msgstr ""
+msgstr "Адкрыць акно падпісвання аб’екта"
 
 msgid "Check"
-msgstr ""
+msgstr "Праверыць"
 
 msgid "Check all available signatures for selected object."
-msgstr ""
+msgstr "раверыць усе магчымыя подпісы аб’екта."
 
 msgid "Sign"
-msgstr ""
+msgstr "Подпіс"
 
 msgid "Digital sign selected Tags, if you believe they are correct."
 msgstr ""
+"Выкарыстоўвайце лічбавы подпіс для аб’ектаў, у правільнасці якіх Вы "
+"ўпэўненыя."
 
 msgid "Show all available signatures for selected attribute."
-msgstr ""
+msgstr "Адлюстраваць усе наяўныя подпісы для абранага атрыбуту."
 
 msgid "Show deleted tags and notes if they were signed before"
-msgstr ""
+msgstr "Паказаць выдаленыя тэгі і нататкі, калі яны былі падпісаны раней"
 
 msgid ""
 "Use default (and maybe existing) GnuPG directory ({0}) to store new keys and "
 "configs."
 msgstr ""
+"Выкарыстоўваць каталог GnuPG па змаўчанні {0} (магчыма ўжо існуе) для "
+"захоўвання новых ключоў і налад."
 
 msgid "Use separate GnuPG directory ({0}) to store new keys and configs."
 msgstr ""
+"Выкарыстоўвайце асобны GnuPG (зашыфраваны) каталог ({0}) для захоўвання "
+"новых ключоў і налад"
 
 msgid "Trust OSM Settings"
-msgstr ""
+msgstr "Давяраць наладам OSM"
 
 msgid "Change GPG and privacy settings of the trustosm plugin."
-msgstr ""
+msgstr "Змяніць GPG і асабістыя налады модуля trustosm"
 
 msgid "Use separate GnuPG configuration directory?"
-msgstr ""
+msgstr "Выкарыстоўваць асобны GnuPG (зашыфраваны) каталог налад?"
 
 msgid "GnuPG"
-msgstr ""
+msgstr "GnuPG"
 
 msgid "Dialog"
-msgstr ""
+msgstr "Дыялогавае акно"
 
 msgid "Signed key value pair was: {0}={1}"
-msgstr ""
+msgstr "Падпісаны параметр і яго значэнне: {0}={1}"
 
 msgid "{0} Signatures found."
-msgstr ""
+msgstr "Знойдзена {0} подпісаў."
 
 msgid "Signature Info"
-msgstr ""
+msgstr "Падрабязнасці подпісу"
 
 msgid "Sorry, there are no Signatures for the selected Node."
-msgstr ""
+msgstr "Выбачайце, няма подпісаў для абранай кропкі"
 
 msgid "No Signature found"
-msgstr ""
+msgstr "Подпісу не знойдзена"
 
 msgid ""
 "Selected node was:\n"
 "{0}"
 msgstr ""
+"Абраная кропка:\n"
+"{0}"
 
 msgid "Sorry, there are no Signatures for the selected Attribute."
-msgstr ""
+msgstr "На жаль, адсутнічаюць подпісы для абранага атрыбуту."
 
 msgid ""
 "Selected key value pair was:\n"
 "{0}={1}"
 msgstr ""
+"Абраны ключ і яго значэнне:\n"
+"{0}={1}"
 
 msgid "Sorry, there are no Signatures for the selected Segment."
-msgstr ""
+msgstr "На жаль, для вылучанага адрэзка подпіс адсутнічае."
 
 msgid "Selected WaySegment was:"
-msgstr ""
+msgstr "Абраны сегмент:"
 
 msgid "Signature Files"
-msgstr ""
+msgstr "Файлы подпісу"
 
 msgid "OSM Signature Files"
-msgstr ""
+msgstr "Файлы подпісу OSM"
 
 msgid "Only digits allowed in osmid: ''{0}''."
-msgstr ""
+msgstr "У osmid дазволены толькі лічбы: ''{0}''."
 
 msgid "Could not parse OpenPGP message."
-msgstr ""
+msgstr "Немагчыма разабраць паведамленне OpenPGP."
 
 msgid "Prepare stuff..."
-msgstr ""
+msgstr "Падрыхтоўка матэрыялу..."
 
 msgid "Parsing Signature data..."
-msgstr ""
+msgstr "Разбор дадзеных подпісу..."
 
 msgid "The Signature is broken!"
-msgstr ""
+msgstr "Подпіс пашкоджаны!"
 
 msgid "Manipulation Warning"
-msgstr ""
+msgstr "Папярэджанне маніпуляцый"
 
 msgid "Select a signing key from your keyring-file:"
-msgstr ""
+msgstr "Абярыце ключ подпісу для вашага файла ключоў"
 
 msgid "Don''t ask again for the key"
-msgstr ""
+msgstr "Больш не пытаць ключ"
 
 msgid "Use a random key from this list"
-msgstr ""
+msgstr "Выкарыстоўваць выпадковы ключ са спісу"
 
 msgid "Create new Key"
-msgstr ""
+msgstr "Стварыць новы ключ"
 
 msgid "Select a Key to sign"
-msgstr ""
+msgstr "Абярыце ключ для подпісу"
 
 msgid ""
 "The object with the ID \"{0}\" ({1}) is newly created.\n"
 "You can not sign it, because the signature would lose the ID-Reference after "
 "uploading it to the OSM-server."
 msgstr ""
+"Аб''екты з ідэнтыфікатарам \"{0}\" ({1}) толькі што створаны.\n"
+"Вы не можаце іх падпісаць, таму што подпіс сатрэ ідэнтыфікатар прыналежнасці "
+"пасля перадачы на сервер OSM."
 
 msgid "Signing canceled!"
-msgstr ""
+msgstr "Падпісанне адменена!"
 
 msgid "Please give a tolerance in meters"
-msgstr ""
+msgstr "Калі ласка, пакажыце допуск у метрах"
 
 msgid "Select as much as you like:"
-msgstr ""
+msgstr "Абярыце гэтулькі, колькі трэба:"
 
 msgid "Survey"
-msgstr ""
+msgstr "Абследаванне"
 
 msgid "Aerial Photography"
-msgstr ""
+msgstr "Аэрафотаздымкі"
 
 msgid "Web Recherche"
-msgstr ""
+msgstr "Пошук у інтэрнэце"
 
 msgid "Trusted persons told me"
-msgstr ""
+msgstr "Паведамленне ад давераных асоб"
 
 msgid "Which source did you use?"
-msgstr ""
+msgstr "Якая крыніца вы выкарыстоўвалі?"
 
 msgid "never"
-msgstr ""
+msgstr "ніколі"
 
 msgid "Primary user-ID: "
-msgstr ""
+msgstr "Асноўны ID карыстальніка "
 
 msgid "Key-ID: "
-msgstr ""
+msgstr "ID ключа: "
 
 msgid "Fingerprint: "
-msgstr ""
+msgstr "Адбітак пальца: "
 
 msgid "Algorithm: "
-msgstr ""
+msgstr "Алгарытм: "
 
 msgid "Strength in bit: "
-msgstr ""
+msgstr "Даўжыня ключа, біт: "
 
 msgid "Creation date: "
-msgstr ""
+msgstr "Дата стварэння: "
 
 msgid "Expiration date: "
-msgstr ""
+msgstr "Дата анулявання: "
 
 msgid "PGP-Key details"
-msgstr ""
+msgstr "Падрабязнасці ключа PGP"
 
 msgid "User-ID:"
-msgstr ""
+msgstr "ID карыстальніка:"
 
 msgid "Select algorithm:"
-msgstr ""
+msgstr "Абраць алгарытм:"
 
 msgid "Choose Bitlength (Strength):"
-msgstr ""
+msgstr "Абярыце даўжыню (устойлівасць) ключа:"
 
 msgid "Encryption algorithm to protect private key:"
-msgstr ""
+msgstr "Алгарытм шыфравання для абароны ключа:"
 
 msgid "Choose an expiry date for the key:"
-msgstr ""
+msgstr "Абярыце дату заканчэння ключа:"
 
 msgid "Create a new signing key"
-msgstr ""
+msgstr "Стварыць новы ключ подпісу"
 
 msgid "No such lane."
-msgstr ""
+msgstr "Няма такой паласы."
 
 msgid ""
 "<html>The number of lanes is not specified for one or more roads; please add "
 "missing lanes tags.</html>"
 msgstr ""
+"<html>У адной ці некалькіх дарог не вызначана колькасць палос; калі ласка, "
+"прастаўце тэгі lanes.</html>"
 
 msgid ""
 "<html>An error occurred while constructing the model. Please run the "
 "validator to make sure the data is consistent.<br><br>Error: {0}</html>"
 msgstr ""
+"<html>Пры пабудове мадэлі адбылася памылка. Калі ласка, запусціце валідатар "
+"для праверкі цэласнасці дадзеных.<br><br>Памылка: {0}</html>"
 
 msgid "Edit turn relations and lane lengths for selected node."
 msgstr ""
+"Рэдагаваць абмежаванні на паварот і даўжыню паласы для абранай кропкі"
 
 msgid "Validate turn- and lane-length-relations for consistency."
-msgstr ""
+msgstr "Праверыць адносіны абмежаванняў і даўжыні паласы на цэласнасць"
 
 msgid "Turn Lanes"
-msgstr ""
+msgstr "Паваротныя палосы"
 
 msgid "Edit turn lanes"
-msgstr ""
+msgstr "Рэдагаваць паваротныя палосы"
 
 msgid "Quick-Fix"
-msgstr ""
+msgstr "Выправіць"
 
 msgid "Revalidate all turnlanes-relations."
-msgstr ""
+msgstr "Пераправерыць усе адносіны паваротных палос"
 
 msgid "Automatically fixes the issue."
-msgstr ""
+msgstr "Аўтаматычна выправіць праблему"
 
 msgid "Selects the offending relation."
-msgstr ""
+msgstr "Выбраць праблемныя адносіны"
 
 msgid "Add turn"
-msgstr ""
+msgstr "Дадаць паварот"
 
 msgid "Delete lane."
-msgstr ""
+msgstr "Выдаліць паласу."
 
 msgid "Delete turn."
-msgstr ""
+msgstr "Выдаліць паварот"
 
 msgid "{0} lanes are not referenced in any turn-relation."
 msgstr ""
+"У {0} апісанняў палос адсутнічаюць спасылкі на адносіны абмежаванняў "
+"павароту."
 
 msgid "Put the ways in order."
-msgstr ""
+msgstr "Размясціць шляхі па парадку"
 
 msgid "Relation references non-existent (regular) lane {0}"
-msgstr ""
+msgstr "Адносіны спасылаюцца на неіснуючую (звычайную) паласу {0}"
 
 msgid "Relation references non-existent extra lane {0}"
-msgstr ""
+msgstr "Адносіны спасылаюцца на неіснуючую дадатковую паласу {0}"
 
 msgid "Integer list \"{0}\" contains unexpected values."
-msgstr ""
+msgstr "Спіс лікаў \"{0}\" утрымоўвае некарэктныя значэнні"
 
 msgid "Create/Edit turn restriction..."
-msgstr ""
+msgstr "Стварыць/правіць абмежаванне павароту"
 
 msgid "Create or edit a turn restriction."
-msgstr ""
+msgstr "Стварыць ці правіць абмежаванне павароту."
 
 msgid ""
 "In the following table you can edit the <strong>raw tags</strong> of the OSM "
 "relation representing this turn restriction."
 msgstr ""
+"У наступнай табліцы вы можаце рэдагаваць <strong>неапрацаваныя "
+"тэгі</strong>, ўнутры адносін OSM, якія вызначаюць дадзенае абмежаванне на "
+"паварот."
 
 msgid ""
 "In the following table you can edit the <strong>raw members</strong> of the "
 "OSM relation representing this turn restriction."
 msgstr ""
+"У наступнай табліцы вы можаце рэдагаваць <strong>неапрацаваных "
+"удзельнікаў</strong>, ўнутры адносін OSM, якія вызначаюць дадзенае "
+"абмежаванне на паварот."
 
 msgid "Type:"
-msgstr ""
+msgstr "Тып:"
 
 msgid "From:"
-msgstr ""
+msgstr "Ад:"
 
 msgid "To:"
-msgstr ""
+msgstr "Куды:"
 
 msgid "Vias:"
-msgstr ""
+msgstr "Праз:"
 
 msgid "Copy to the clipboard"
-msgstr ""
+msgstr "Скапіяваць у буфер абмену"
 
 msgid "Cannot find object with id ''{0}'' in layer ''{1}''"
-msgstr ""
+msgstr "Немагчыма знайсці аб’ект з id ''{0}'' ў пласце ''{1}''"
 
 msgid ""
 "Cannot add object ''{0}'' as relation member because it is deleted or "
 "invisible in layer ''{1}''"
 msgstr ""
+"Немагчыма дадаць аб''ект ''{0}'' у якасці ўдзельніка адносін, таму што ён "
+"выдалены або нябачны ў пласце ''{1}''"
 
 msgid "Clear the selected roles or delete the selected members"
-msgstr ""
+msgstr "Ачысціць вылучаныя ролі ці выдаліць вылучаных удзельнікаў"
 
 msgid "Insert new relation members from object in the clipboard"
-msgstr ""
+msgstr "Уставіць новых удзельнікаў адносін з аб''екта ў буферы абмену"
 
 msgid "Move the selected relation members down by one position"
-msgstr ""
+msgstr "Перасунуць выдзеленых удзельнікаў адносін ўніз на адну пазіцыю"
 
 msgid "Move the selected relation members up by one position"
-msgstr ""
+msgstr "Перасунуць выдзеленыя члены адносін уверх на адну пазіцыю"
 
 msgid "Edit basic attributes of a turn restriction"
-msgstr ""
+msgstr "Правіць асноўныя атрыбуты абмежавання на паварот"
 
 msgid "Edit the raw tags and members of this turn restriction"
-msgstr ""
+msgstr "Правіць тэгі і членаў гэтага абмежавання на паварот"
 
 msgid "Errors/Warnings"
-msgstr ""
+msgstr "Памылкі/Папярэджанні"
 
 msgid "Show errors and warnings related to this turn restriction"
 msgstr ""
+"Паказаць памылкі і папярэджанні, звязаныя з гэтым абмежаваннем на паварот"
 
 msgid "Create a new turn restriction in layer ''{0}''"
-msgstr ""
+msgstr "Стварыць новае абмежаванне на паварот у пласце ''{0}''"
 
 msgid "Edit a new turn restriction in layer ''{0}''"
-msgstr ""
+msgstr "Правіць новае абмежаванне на паварот у пласце ''{0}''"
 
 msgid "Edit turn restriction ''{0}'' in layer ''{1}''"
-msgstr ""
+msgstr "Правіць абмежаванне на паварот ''{0}'' ў пласце ''{1}''"
 
 msgid ""
 "There is still an unresolved error or warning identified for this turn "
@@ -28563,25 +31522,33 @@ msgid_plural ""
 "There are still {0} errors and/or warnings identified for this turn "
 "restriction. You are recommended to resolve these issues first."
 msgstr[0] ""
+"Існуе нявырашаная памылка або папярэджанне для гэтага абмежавання на "
+"паварот. Рэкамендуецца спачатку вырашыць гэтую праблему."
 msgstr[1] ""
+"Існуюць {0} нявырашаныя памылкі або папярэджанні для гэтага абмежавання на "
+"паварот. Рэкамендуецца спачатку вырашыць гэтую праблему."
+msgstr[2] ""
+"Існуюць {0} нявырашаных памылкак або папярэджанняў для гэтага абмежавання на "
+"паварот. Рэкамендуецца спачатку вырашыць гэтую праблему."
 
 msgid "Do you want to save anyway?"
-msgstr ""
+msgstr "Вы жадаеце захаваць у любым выпадку?"
 
 msgid "Yes, save anyway"
-msgstr ""
+msgstr "Так, у любым выпадку"
 
 msgid "Save the turn restriction despite of errors and/or warnings"
 msgstr ""
+"Захаваць абмежаванне на паварот, нягледзячы на памылкі і/або папярэджанні"
 
 msgid "No, resolve issues first"
-msgstr ""
+msgstr "Не, спачатку вырашыць пытанні"
 
 msgid "Cancel saving and start resolving pending issues first"
-msgstr ""
+msgstr "Адмяніць захаванне і спачатку вырашыць нявырашаныя праблемы"
 
 msgid "Pending errors and warnings"
-msgstr ""
+msgstr "Адкладзеныя памылкі і папярэджанні"
 
 msgid ""
 "This turn restriction refers to an object which was deleted outside of this "
@@ -28590,239 +31557,276 @@ msgid_plural ""
 "This turn restriction refers to {0} objects which were deleted outside of "
 "this turn restriction editor:"
 msgstr[0] ""
+"Гэта абмежаванне на паварот спасылаецца на аб''ект, які быў выдалены за "
+"межамі гэтага рэдактара:"
 msgstr[1] ""
+"Гэта абмежаванне на паварот спасылаецца на {0} аб''екты, якія былі выдалены "
+"за межамі гэтага рэдактара:"
+msgstr[2] ""
+"Гэта абмежаванне на паварот спасылаецца на {0} аб''ектаў, якія былі выдалены "
+"за межамі гэтага рэдактара:"
 
 msgid ""
 "Updates to this turn restriction can''t be saved unless deleted members are "
 "removed.<br>How to you want to proceed?"
 msgstr ""
+"Абнаўлення ў гэтым абмежаванні на паварот не могуць быць захаваны, пакуль "
+"выдаленыя члены не будуць прыбраныя.<br>Як вы хочаце працягнуць?"
 
 msgid "Remove deleted members and save"
-msgstr ""
+msgstr "Прыбраць выдаленых удзельнікаў і захаваць"
 
 msgid "Cancel and return to editor"
-msgstr ""
+msgstr "Адмяніць і вярнуцца ў рэдактар"
 
 msgid "Deleted members in turn restriction"
-msgstr ""
+msgstr "Выдаленыя члены ў абмежаванні на паварот"
 
 msgid "Create a conflict and close this turn restriction editor"
-msgstr ""
+msgstr "Стварыць канфлікт і зачыніць рэдактар абмежаванняў на паварот"
 
 msgid "Return to the turn restriction editor and resume editing"
-msgstr ""
+msgstr "Вярнуцца ў рэдактар абмежаванняў на паварот і працягнуць рэдагаванне"
 
 msgid ""
 "<html>This turn restriction has been changed outside of the editor.<br>You "
 "cannot apply your changes and continue editing.<br><br>Do you want to create "
 "a conflict and close the editor?</html>"
 msgstr ""
+"<html>Гэта абмежаванне на паварот было зменена за межамі рэдактара.<br>Вы не "
+"зможаце прымяніць вашыя змены і не зможаце працягваць рэдагаванне.<br><br>Вы "
+"згодныя стварыць канфлікт і зачыніць рэдактар?</ html>"
 
 msgid "Already participating in a conflict"
-msgstr ""
+msgstr "Ужо ўдзельнічаюць у канфлікце"
 
 msgid "Delete this turn restriction"
-msgstr ""
+msgstr "Выдаліць гэта абмежаванне павароту"
 
 msgid "Select this turn restriction"
-msgstr ""
+msgstr "Абраць гэта абмежаванне павароту"
 
 msgid "Activate the layer this turn restriction belongs to and zoom to it"
 msgstr ""
+"Актываваць пласт, да якога належыць гэта абмежаванне павароту, і павялічыць "
+"да яго"
 
 msgid "{0} warning"
 msgid_plural "{0} warnings"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} папярэджанне"
+msgstr[1] "{0} папярэджанні"
+msgstr[2] "{0} папярэджанняў"
 
 msgid "{0} error"
-msgid_plural "{0} errors"
-msgstr[0] ""
-msgstr[1] ""
+msgid_plural "{0} errors"
+msgstr[0] "{0} памылка"
+msgstr[1] "{0} памылкі"
+msgstr[2] "{0} памылак"
 
 msgid "no issues"
-msgstr ""
+msgstr "праблем няма"
 
 msgid "please select a way"
-msgstr ""
+msgstr "калі ласка, вылучыце лінію"
 
 msgid "multiple objects with role ''{0}''"
-msgstr ""
+msgstr "некалькі аб’ектаў, якія маюць ролю ''{0}''"
 
 msgid "Delete from turn restriction"
-msgstr ""
+msgstr "Выключыць з абмежавання на паварот"
 
 msgid "Accept the currently selected way"
-msgstr ""
+msgstr "Прыняць вылучаную цяпер лінію"
 
 msgid "Paste from the clipboard"
-msgstr ""
+msgstr "Уставіць з буфера абмену"
 
 msgid "Create new turn restriction"
-msgstr ""
+msgstr "Стварыць новае абмежаванне на паварот"
 
 msgid "Launch the turn restriction editor to create a new turn restriction"
 msgstr ""
+"Запусціць рэдактар абмежавання на паварот, каб стварыць новае абмежаванне на "
+"паварот"
 
 msgid "No Right Turn"
-msgstr ""
+msgstr "Паварот направа забаронены"
 
 msgid "No Left Turn"
-msgstr ""
+msgstr "Паварот налева забаронены"
 
 msgid "No U-Turn"
-msgstr ""
+msgstr "Разварот забаронены"
 
 msgid "No Straight On"
-msgstr ""
+msgstr "Забарона праезду прама"
 
 msgid "Only Right Turn"
-msgstr ""
+msgstr "Толькі направа"
 
 msgid "Only Left Turn"
-msgstr ""
+msgstr "Толькі налева"
 
 msgid "Only Straight On"
-msgstr ""
+msgstr "Толькі прама"
 
 msgid "Warning: failed to load icon for turn restriction type ''{0}''"
 msgstr ""
+"Папярэджанне: немагчыма загрузіць значок абмежавання на паварот, тыпу ''{0}''"
 
 msgid "please select a turn restriction type"
-msgstr ""
+msgstr "калі ласка, выберыце тып абмежавання павароту"
 
 msgid ""
 "Select the vehicle types this turn restriction is <strong>not</strong> "
 "applicable for."
 msgstr ""
+"Выберыце тып транспартных сродкаў, на якія <strong>не</strong> "
+"распаўсюджваецца гэта абмежаванне павароту."
 
 msgid "Public Service Vehicles"
-msgstr ""
+msgstr "Грамадскі транспарт"
 
 msgid "Public service vehicles like buses, tramways, etc."
-msgstr ""
+msgstr "Грамадскі транспарт тыпу аўтобусаў, трамваяў, і да т.п."
 
 msgid "Heavy Goods Vehicles"
-msgstr ""
+msgstr "Вялікагрузны транспарт"
 
 msgid "Motorcars"
-msgstr ""
+msgstr "Аўтамабілі"
 
 msgid "Bicycles"
-msgstr ""
+msgstr "Ровары"
 
 msgid "Mopeds"
-msgstr ""
+msgstr "Мапеды"
 
 msgid "Use standard exceptions"
-msgstr ""
+msgstr "Выкарыстоўваць стандартныя выключэнні"
 
 msgid "Use non-standard exceptions"
-msgstr ""
+msgstr "Выкарыстоўваць нестандартныя выключэнні"
 
 msgid "Remove the currently selected vias"
-msgstr ""
+msgstr "Выдаліць выбраныя элементы «праз»"
 
 msgid "Move the selected vias down by one position"
-msgstr ""
+msgstr "Перамясціць выдзеленыя элементы «праз» ўніз на адну пазіцыю"
 
 msgid "Move the selected vias up by one position"
-msgstr ""
+msgstr "Перамясціць выдзеленыя элементы «праз» уверх на адну пазіцыю"
 
 msgid "Copy the selected vias to the clipboard"
-msgstr ""
+msgstr "Скапіяваць выдзеленыя элементы «праз» у буфер абмену"
 
 msgid "Insert ''via'' objects from the clipboard"
-msgstr ""
+msgstr "Уставіць элементы \"праз\" з буфера абмену"
 
 msgid ""
 "Failed to retrieve OSM object with id {0} from dataset {1}. Cannot add it as "
 "''via''."
 msgstr ""
+"Не атрымалася атрымаць аб’екты OSM з ідэнтыфікатарам {0} з набору дадзеных "
+"{1}. Немагчыма дадаць іх як элементы «праз»."
 
 msgctxt "turnrestrictions"
 msgid "From:"
-msgstr ""
+msgstr "Ад:"
 
 msgctxt "turnrestriction"
 msgid "To:"
-msgstr ""
+msgstr "Куды:"
 
 msgid "no participating way with role ''from''"
-msgstr ""
+msgstr "няма даданай лініі з роляй «з» («from»)"
 
 msgid "no participating way with role ''to''"
-msgstr ""
+msgstr "няма даданай лініі з роляй «да» («to»)"
 
 msgid "Only participating in selection"
-msgstr ""
+msgstr "Толькі ўдзельнікі ў вылучаным"
 
 msgid ""
 "<html>Select to display turn restrictions related to object in the current "
 "selection only.<br>Deselect to display all turn restrictions in the current "
 "data set.</html>"
 msgstr ""
+"<html>Выберыце, каб паказаць толькі тыя абмежаванні паваротаў, якія "
+"адносяцца да вылучаных аб''ектаў.<br>Скасуйце выбар, каб паказаць усе "
+"абмежаванні паваротаў у бягучым наборы дадзеных.</html>"
 
 msgid "Turn Restrictions"
-msgstr ""
+msgstr "Абмежаванні паваротаў"
 
 msgid "Display and manage turn restrictions in the current data set"
 msgstr ""
+"Адлюстраванне і кіраванне абмежаваннямі павароту ў бягучым наборы дадзеных"
 
 msgid "Open an editor for the selected turn restriction"
-msgstr ""
+msgstr "Адкрыць рэдактар для гэтага абмежавання на паварот"
 
 msgid "Delete the selected turn restriction"
-msgstr ""
+msgstr "Выдаліць абмежаванне павароту"
 
 msgid "Create a new turn restriction"
-msgstr ""
+msgstr "Стварыць абмежаванне павароту"
 
 msgid "Set the current JOSM selection to the selected turn restrictions"
 msgstr ""
+"Усталяваць бягучае вылучэнне JOSM на выдзеленыя абмежаванні на паварот"
 
 msgid "Select in current data layer"
-msgstr ""
+msgstr "Вылучыць у бягучым пласце дадзеных"
 
 msgid "Zoom to the currently selected turn restrictions"
-msgstr ""
+msgstr "Павялічыць да вылучанага абмежавання павароту"
 
 msgid "An OSM plugin for editing turn restrictions."
-msgstr ""
+msgstr "Модуль OSM для рэдагавання абмежаванняў павароту."
 
 msgid ""
 "Development of the turn restriction plugin was sponsored by <a "
 "href=\"http://www.skobbler.de\">skobbler GmbH</a>."
 msgstr ""
+"Спонсарам стварэння гэтага модуля была кампанія <a "
+"href=\"http://www.skobbler.de\">skobbler GmbH</a>."
 
 msgid "Configure the preferences for the turnrestrictions plugin"
-msgstr ""
+msgstr "Наладзіць параметры модуля turnrestrictions"
 
 msgid "Sponsor"
-msgstr ""
+msgstr "Фундатар"
 
 msgid ""
 "The Basic Editor can optionally display the list of via-objects of a turn "
 "restriction. If enabled, one can edit them in the Basic editor too. If "
 "disabled, editing of via-objects is possible in the Advanced Editor only."
 msgstr ""
+"Базавы рэдактар можа дадаткова паказаць спіс элементаў «праз» ў абмежаванні "
+"на паварот. Калі дазволена, іх таксама можна рэдагаваць ў базавым рэдактары. "
+"Калі не, рэдагаванне элементаў «праз» магчыма толькі ў пашыраным рэдактары."
 
 msgid "Display and edit list of via-objects in the Basic Editor"
-msgstr ""
+msgstr "Паказваць і рэдагаваць элементы «праз» у Базавым рэдактары"
 
 msgid "Road signs - Set A"
-msgstr ""
+msgstr "Дарожныя знакі - Набор A"
 
 msgid "Road signs - Set B"
-msgstr ""
+msgstr "Дарожныя знакі - Набор B"
 
 msgid "Please select the set of road sign icons to be used in the plugin."
 msgstr ""
+"Калі ласка, абярыце набор піктаграм дарожных знакаў, які будзе "
+"выкарыстоўвацца ў модулі."
 
 msgid ""
 "Warning: the preference with key ''{0}'' has an unsupported value ''{1}''. "
 "Assuming the default value ''set-a''."
 msgstr ""
+"Папярэджанне: налада клавішы ''{0}'' змяшчае непадтрымоўваемае значэнне "
+"''{1}''. Мяркуем, што тыповым значэннем з''яўляецца ''set-a''."
 
 msgid ""
 "This turn restriction uses the way <span class=\"object-name\">{0}</span> "
@@ -28830,34 +31834,45 @@ msgid ""
 "turn restriction, the way with role <tt>from</tt> should be different from "
 "the way with role <tt>to</tt>, though."
 msgstr ""
+"Гэта абмежаванне павароту выкарыстоўвае наступны спосаб <span class=\"object-"
+"name\">{0}</span> са значэннем <tt>ад</tt> <strong>і</strong> са значэннем "
+"<tt>да</tt >. У абмежаванні павароту, шлях з гэтым значэннем <tt>ад</tt> "
+"павінен адрознівацца ад гэтага <tt>да</tt>."
 
 msgid "Delete ''from''"
-msgstr ""
+msgstr "Выдаліць ''from''"
 
 msgid "Removes the member with role ''from''"
-msgstr ""
+msgstr "Выдаляе ўдзельніка з роляй ''from''"
 
 msgid "Delete ''to''"
-msgstr ""
+msgstr "Выдаліць ''to''"
 
 msgid "Removes the member with role ''to''"
-msgstr ""
+msgstr "Выдаляе ўдзельніка з роляй ''to'' (куды)"
 
 msgid "Fix in editor"
-msgstr ""
+msgstr "Выправіць у рэдактары"
 
 msgid ""
 "Go to Basic Editor and manually choose members with roles ''from'' and ''to''"
 msgstr ""
+"Перайсці да Асноўнага рэдактара і ўручную абраць удзельнікаў з ролямі "
+"''from'' (адкуль) і ''to'' (куды)"
 
 msgid ""
 "This turn restriction uses a non-standard restriction type <tt>{0}</tt> for "
 "the tag key <tt>restriction</tt>. It is recommended to use standard values "
 "only. Please select one in the Basic editor."
 msgstr ""
+"Гэта абмежаванне на паварот выкарыстоўвае нестандартны тып абмежавання "
+"<tt>{0}</tt> для ключа тэга <tt>restriction</tt>. Рэкамендуецца "
+"выкарыстоўваць толькі стандартныя значэнні. Калі ласка, абярыце стандартнае "
+"значэнне ў Базавым рэдактары."
 
 msgid "Go to Basic Editor and manually choose a turn restriction type"
 msgstr ""
+"Перайдзіце да Базавага рэдактара і ўручную выберыце тып абмежавання павароту."
 
 msgid ""
 "The <strong>from</strong>-way <span class=\"object-name\">{0}</span> and the "
@@ -28866,83 +31881,105 @@ msgid ""
 "<strong>via</strong>-object.<br> It is recommended to set it as unique "
 "<strong>via</strong>-object."
 msgstr ""
+"Лінія з роляй <strong>from</strong><span class=\"object-name\">{0}</span> і "
+"лінія з роляй <strong>to</strong> <span class=\"object-name\">{1}</span> "
+"перасякаюцца ў пункце <span class=\"object-name\">{2}</span>, але гэтая "
+"кропка не выступае ў ролі <strong>via</strong>.<br> Рэкамендуецца стварыць "
+"унікальны аб''ект з роляй <strong>via</strong>."
 
 msgid "Set via-Object"
-msgstr ""
+msgstr "Задаць як элемент «праз»"
 
 msgid ""
 "Replaces the currently configured via-objects with the node at the "
 "intersection"
-msgstr ""
+msgstr "Замяніць ўжо устаноўленыя элементы «праз» на кропку перасячэння"
 
 msgid "Go to Basic Editor and manually fix the list of via-objects"
 msgstr ""
+"Перайсці да Базавага рэдактара і ўручную выправіць спіс элементаў «праз»"
 
 msgid ""
 "A turn restriction must declare the type of restriction. Please select a "
 "type in the Basic Editor."
 msgstr ""
+"Абмежаванне павароту павінна ўказваць тып абмежавання. Калі ласка, абярыце "
+"тып у Базавым рэдактары."
 
 msgid "A way with role <tt>from</tt> is required in a turn restriction."
 msgstr ""
+"Лінія з роляй <tt>з</tt> павінна абавязкова быць у абмежаванні на паварот."
 
 msgid "A way with role <tt>to</tt> is required in a turn restriction."
 msgstr ""
+"Лінія з роляй <tt>да</tt> павінна абавязкова быць у абмежаванні на паварот."
 
 msgid "Please go to the Basic editor and manually choose a way."
-msgstr ""
+msgstr "Калі ласка, перайдзіце ў Асноўны рэдактар і ўручную абярыце шлях."
 
 msgid "Add in editor"
-msgstr ""
+msgstr "Дадаць у рэдактар"
 
 msgid "Add a way with role ''from''"
-msgstr ""
+msgstr "Дадаць лінію з роляй ''ад''"
 
 msgid "Add a way with role ''to''"
-msgstr ""
+msgstr "Дадаць лінію з роляй ''куды''"
 
 msgid ""
 "The two ways participating in the turn restriction <strong>aren''t "
 "connected.</strong>"
 msgstr ""
+"Дзве лініі, якія ўдзельнічаюць у абмежаванні на паварот, <strong>не "
+"злучаныя</strong>."
 
 msgid ""
 "Make sure you add one or more via objects (nodes or ways) to the turn "
 "restriction."
 msgstr ""
+"Пераканайцеся, што вы дадалі адзін або больш аб’ектаў з роляй «праз» (кропак "
+"ці ліній) да абмежавання на паварот."
 
 msgid "Go to the Advanced Editor and add via objects"
-msgstr ""
+msgstr "Перайдзіце ў Пашыраны рэдактар і дадайце аб’екты з роляй «праз»"
 
 msgid ""
 "A turn restriction requires exactly one way with role <tt>from</tt>. This "
 "turn restriction has {0} ways in this role. Please remove {1} of them."
 msgstr ""
+"Абмежаванне на паварот патрабуе толькі адну лінію з роляй <tt>з</tt>. Гэта "
+"абмежаванне мае такіх ліній {0} шт. Калі ласка, выдаліце {1} з іх."
 
 msgid ""
 "A turn restriction requires exactly one way with role <tt>to</tt>. This turn "
 "restriction has {0} ways in this role. Please remove {1} of them."
 msgstr ""
+"Абмежаванне на паварот патрабуе толькі адну лінію з роляй <tt>да</tt>. Гэта "
+"абмежаванне мае такіх ліній {0} шт. Калі ласка, выдаліце {1} з іх."
 
 msgid "Go to the Advanced Editor and remove the members"
-msgstr ""
+msgstr "Перайдзіце да Пашыранага рэдактара і выдаліце ўдзельнікаў"
 
 msgid ""
 "The tag <tt>except</tt> has the non-standard value <tt>{0}</tt>. It is "
 "recommended to use standard values for <tt>except</tt> only."
 msgstr ""
+"Тэг <tt>except</tt> мае нестандартнае значэнне <tt>{0}</tt>. Рэкамендуецца "
+"выкарыстоўваць толькі стандартныя значэнні для <tt>except</tt>."
 
 msgid "Go to Basic Editor and select standard vehicle type based exceptions"
 msgstr ""
+"Перайдзіце да Асноўнага рэдактара і абярыце выключэнні са стандартных тыпаў "
+"транспарта"
 
 msgid "The required tag <tt>{0}={1}</tt> is missing."
-msgstr ""
+msgstr "Патрабаваны тэг <tt>{0}={1}</tt> адсутнічае."
 
 msgid "Add missing tag"
-msgstr ""
+msgstr "Дадаць адсутны тэг"
 
 msgid "Add the missing tag {0}={1}"
-msgstr ""
+msgstr "Дадайце адсутны тэг {0}={1}"
 
 msgid ""
 "The way <span class=\"object-name\">{0}</span> with role <tt>from</tt> and "
@@ -28950,222 +31987,248 @@ msgid ""
 "intersect at node <span class=\"object-name\">{2}</span>. <p> Both ways "
 "should be split at the intersecting node."
 msgstr ""
+"Лінія <span class=\"object-name\">{0}</span> з роляй <tt>from</tt> і лінія "
+"<span class=\"object-name\">{1}</span> з роляй <tt>to</tt> перасякаюцца ў "
+"кропцы <span class=\"object-name\">{2}</span>. <p> Абедзве лініі павінны "
+"быць злучаны ў кропцы скрыжавання."
 
 msgid ""
 "The way <span class=\"object-name\">{0}</span> with role <tt>{1}</tt> should "
 "be split at node <span class=\"object-name\">{2}</span> where it connects to "
 "way <span class=\"object-name\">{3}</span>."
 msgstr ""
+"Лінія <span class=\"object-name\">{0}</span> з роляй <tt>{1}</tt> павінна "
+"быць падзелена ў кропцы <span class=\"object-name\">{2}</span>, дзе яна "
+"злучаецца з лініяй <span class=\"object-name\">{3}</span>."
 
 msgid "Split now"
-msgstr ""
+msgstr "Падзяліць цяпер"
 
 msgid "Split the ways"
-msgstr ""
+msgstr "Падзяліць лінію"
 
 msgid ""
 "This turn restriction uses the node <span class=\"object-name\">{0}</span> "
 "as member with role <tt>{1}</tt>."
 msgstr ""
+"Абмежаванне на паварот выкарыстоўвае кропку <span class=\"object-"
+"name\">{0}</span> у якасці члена з роляй <tt>{1}</tt>."
 
 msgid ""
 "This turn restriction uses the relation <span class=\"object-"
 "name\">{0}</span> as member with role <tt>{1}</tt>."
 msgstr ""
+"Абмежаванне на паварот выкарыстоўвае адносіны <span class=\"object-"
+"name\">{0}</span> у якасці члена з роляй <tt>{1}</tt>."
 
 msgid "A way is required instead."
-msgstr ""
+msgstr "Замест гэтага патрабуецца лінія."
 
 msgid "Delete the member from the turn restriction"
-msgstr ""
+msgstr "Выдаліць ўдзельніка з абмежавання на паварот"
 
 msgid "Change to the Basic Editor and select a way"
-msgstr ""
+msgstr "Перайсці да Асноўнага рэдактара і вылучыць лінію"
 
 msgid "Undelete object..."
-msgstr ""
+msgstr "Аднавіць аб’ект..."
 
 msgid "Undelete object by id"
-msgstr ""
+msgstr "Аднавіць аб’ект па id"
 
 msgid "Unable to undelete node {0}. Object has likely been redacted"
 msgstr ""
+"Не атрымалася аднавіць кропку {0}. Аб’ект, верагодна, быў адрэдагаваны"
 
 msgid "Unable to undelete way {0}. Object has likely been redacted"
 msgstr ""
+"Не атрымалася аднавіць лінію {0}. Аб’ект, верагодна, быў адрэдагаваны"
 
 msgid "Unable to undelete relation {0}. Object has likely been redacted"
 msgstr ""
+"Не атрымалася аднавіць адносіны {0}. Аб’ект, верагодна, быў адрэдагаваны"
 
 msgid "Undelete Object"
-msgstr ""
+msgstr "Аднавіць аб’ект"
 
 msgid "Undelete object"
-msgstr ""
+msgstr "Аднавіць аб’ект"
 
 msgid ""
 "Enter the type and ID of the objects that should be undeleted, e.g., ''n1 "
 "w2''"
 msgstr ""
+"Калі ласка, увядзіце тып і ID аб''ектаў, якія трэба аднавіць, напрыклад ''n1 "
+"w2''"
 
 msgid "Select if the data should be added into a new layer"
-msgstr ""
+msgstr "Вылучыце, калі дадзеныя павінны быць дададзены ў новы пласт"
 
 msgid "Start undeleting"
-msgstr ""
+msgstr "Пачаць аднаўленне"
 
 msgid "Close dialog and cancel"
-msgstr ""
+msgstr "Зачыніць дыялог і адмяніць"
 
 msgid "Add nodes at intersections"
-msgstr ""
+msgstr "Дадаць кропкі на скрыжаванні"
 
 msgid "Add missing nodes at intersections of selected ways."
-msgstr ""
+msgstr "Дадаць адсутныя кропкі на скрыжаваннях выдзеленых ліній."
 
 msgid "Please select one or more ways with intersections of segments."
 msgstr ""
+"Калі ласка, вылучыце адну ці некалькі кропак у месцах скрыжаванняў адрэзкаў."
 
 msgid "Align Way Nodes"
-msgstr ""
+msgstr "Выраўнаваць кропкі лініі"
 
 msgid "Align nodes in a way"
-msgstr ""
+msgstr "Выраўнаваць кропкі ў лініі"
 
 msgid "The way with selected nodes can not be straightened."
-msgstr ""
+msgstr "Лінія з абранымі кропкамі не можа быць выпрастана"
 
 msgid "Internal error: number of nodes is {0}."
-msgstr ""
+msgstr "Унутраная памылка: лік кропак = {0}."
 
 msgid "Extract node"
-msgstr ""
+msgstr "Выняць кропку"
 
 msgid "Extracts node from a way"
-msgstr ""
+msgstr "Выняць кропку з лініі"
 
 msgid ""
 "This tool extracts node from its ways and requires single node to be "
 "selected."
 msgstr ""
+"Гэты інструмент вымае кропку з лініі і патрабуе каб была абрана адна кропка."
 
 msgid "Extract node from line"
-msgstr ""
+msgstr "Выняць кропку з лініі"
 
 msgid "Paste Relations"
-msgstr ""
+msgstr "Уставіць адносіны"
 
 msgid ""
 "Paste relation membership from objects in the buffer onto selected object(s)"
-msgstr ""
+msgstr "Уставіць членства аб''екта з буфера абмену ў выдзелены(я) аб''ект(ы)"
 
 msgid "Split Object"
-msgstr ""
+msgstr "Падзяліць аб’екты"
 
 msgid "Split an object at the selected nodes."
-msgstr ""
+msgstr "Падзяліць аб’екты ў выдзеленых кропках."
 
 msgid "The current selection cannot be used for splitting."
-msgstr "Выбранае ня можа быць выкарыстана для падзелу"
+msgstr "Бягучае вылучэнне немагчыма падзяліць."
 
 msgid "The selected way is not closed."
-msgstr ""
+msgstr "Вылучаная лінія не замкнёная."
 
 msgid "The selected way does not contain the selected node."
 msgid_plural "The selected way does not contain all the selected nodes."
-msgstr[0] "Выбраная нода не належыць выбранай лініі."
-msgstr[1] "Выбранай лініі належаць не ўсе выбраныя ноды."
+msgstr[0] "Выбраная кропка не належыць выбранай лініі."
+msgstr[1] "Выбранай лініі належаць не ўсе выбраныя кропкі."
+msgstr[2] "Выбранай лініі належаць не ўсе выбраныя кропкі."
 
 msgid ""
 "The selected way is not a split way, please select split points or split way "
 "too."
 msgstr ""
+"Немагчыма падзяліць аб’ект па абранай лініі. Выберыце кропкі або лінію, па "
+"якіх аб’ект можа быць разрэзаны."
 
 msgid "The selected nodes can not be consecutive nodes in the object."
-msgstr ""
+msgstr "Выбраныя кропкі не могуць быць паслядоўнымі кропкамі ў аб’екце"
 
 msgid "Split adjacent ways"
-msgstr ""
+msgstr "Падзяліць сумежныя лініі"
 
 msgid "Split adjacent ways on T-intersections"
-msgstr ""
+msgstr "Падзяліць сумежныя лініі на Т-скрыжаванні"
 
 msgid ""
 "There are several ways containing one of the splitting nodes. Select ways "
 "participating in this operation."
 msgstr ""
+"Ёсць некалькі ліній, якія змяшчаюць адну з падзяляльных кропак. Абярыце "
+"лініі, якія ўдзельнічаюць у гэтай аперацыі."
 
 msgid "Symmetry"
-msgstr ""
+msgstr "Сіметрыя"
 
 msgid ""
 "Please select at least two nodes for symmetry axis and something else to "
 "mirror."
 msgstr ""
+"Калі ласка, абярыце, прынамсі, дзве кропкі для восі сіметрыі і штосьці яшчэ "
+"для адлюстравання."
 
 msgid "Copy tags from previous selection"
-msgstr ""
+msgstr "Скапіяваць тэгі з папярэдняга вылучэння"
 
 msgid "Pastes tags of previously selected object(s)"
-msgstr ""
+msgstr "Уставіць тэгі папярэдне вылучанага аб''екта(ў)"
 
 msgid "Add Source Tag"
-msgstr ""
+msgstr "Дадаць тэг source"
 
 msgid "Add remembered source tag"
-msgstr ""
+msgstr "Дадаць тэг \"source=*\", запомнены з папярэдняга вылучэння"
 
 msgid "UnGlue Relation"
-msgstr ""
+msgstr "Падзяліць Адносіны"
 
 msgid ""
 "Duplicate nodes, ways and relations that are used by multiple relations."
 msgstr ""
+"Дубляваць кропкі, лініі і адносіны, якія скарыстаны ў некалькіх адносінах."
 
 msgid "UnGlue Relations"
-msgstr ""
+msgstr "Адлучыць адносіны"
 
 msgid "Unglued Relations"
-msgstr ""
+msgstr "Разарваныя адносіны"
 
 msgid "Change relation member for {0} {1}"
-msgstr ""
+msgstr "Замена члена адносін {0} {1}"
 
 msgid "Circle arc"
-msgstr ""
+msgstr "Дуга акружнасці"
 
 msgid "Create a circle arc"
-msgstr ""
+msgstr "Стварыць дугу акружнасці"
 
 msgid "Select custom URL"
-msgstr ""
+msgstr "Выбраць карыстальніцкі URL"
 
 msgid "Please select one of custom URLs (configured in Preferences)"
-msgstr ""
+msgstr "Калі ласка, абярыце адзін з URL (задаецца ў наладах)"
 
 msgid "Ask every time"
-msgstr ""
+msgstr "Пытаць кожны раз"
 
 msgid "Configure custom URL"
-msgstr ""
+msgstr "Наладзіць карыстальніцкі URL"
 
 msgid "Open custom URL"
-msgstr ""
+msgstr "Адкрыць карыстальніцкі URL"
 
 msgid "Opens specified URL browser"
-msgstr ""
+msgstr "Адкрывае ў браўзары паказаны URL"
 
 msgid "Utilsplugin2 settings"
-msgstr ""
+msgstr "Налады Utilsplugin2"
 
 msgid "Here you can change some preferences of Utilsplugin2 functions"
-msgstr ""
+msgstr "Тут можна змяніць некаторыя налады Utilsplugin2"
 
 msgid "Save to file"
-msgstr ""
+msgstr "Захаваць у файл"
 
 msgid "Load from file"
-msgstr ""
+msgstr "Загрузіць з файла"
 
 msgid ""
 "Please edit custom URLs and select one row to use with the tool<br/> "
@@ -29176,15 +32239,23 @@ msgid ""
 "latitude/longitude <br/> Your can manually load settings from file "
 "<b>customurl.txt</b> in JOSM folder"
 msgstr ""
+"Адрэдагуйце карыстальніцкія URL і абярыце адзін радок для выкарыстання з "
+"гэтым інструментам<br/> <b>{key}</b>замяняецца на значэнне "
+"тэга<br/> <b>{#id}</b> замяняецца на ідэнтыфікатар элемента<br/> "
+"<b>{#type}</b> замяняецца на «node», «way» або «relation» <br/> "
+"<b>{#lat} , {#lon}</b> замяняецца на шырату / даўгату "
+"цэнтра карты <br/> Вы можаце ўручную загрузіць налады з файла "
+"<b>customurl.txt</b> ў тэчцы JOSM"
 
 msgid "Custom URL configuration"
-msgstr ""
+msgstr "Налада карыстальніцкага URL"
 
 msgid "Lat Lon tool"
-msgstr ""
+msgstr "Стварыць па каардынатах..."
 
 msgid "Create geometry by entering lat lon coordinates for it."
 msgstr ""
+"Стварыць геаметрыю, паказаўшы для яе каардынаты кропак (шырату і даўгату)."
 
 msgid ""
 "Enter the coordinates for the new nodes, one for each line.<br/>If you enter "
@@ -29209,370 +32280,422 @@ msgid ""
 "24.5</li><li>-49 29.4 N -19 24.5 W</li></ul><li>48 deg 42' 52.13\" N, 21 "
 "deg 11' 47.60\" E</li></ul>"
 msgstr ""
+"Калі ласка, увядзіце каардынаты новых кропак, па адной у радку.<br/>Калі "
+"ўвесці два радкі з аднолькавымі каардынатамі, будуць створаны дубляваныя "
+"кропкі.<br/>У якасці падзельнікаў даўгаты і шыраты можна выкарыстоўваць "
+"прабел, коску або кропку з коскай.<br/>Дадатныя лікі або сімвалы N, E "
+"паказваюць паўночную шырату і ўсходнюю даўгату.<br/>Для паўднёвай шыраты і "
+"заходняй даўгаты выкарыстоўваце адмоўныя лікі або сімвалы S, "
+"W.<br/>Каардынаты могуць быць у адным з трох "
+"форматаў:<ul><li><i>градусы</i><tt>°</tt></li><li><i>градусы</i><tt>°"
+"</tt> <i>хвіліны</i><tt>'</tt></li><li><i>градусы</i><tt>°</tt> "
+"<i>хвіліны</i><tt>'</tt> <i>секунды</i><tt>"</tt></li></ul>Сімвалы "
+"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> не абавязковыя.<br/><br/>Некалькі "
+"прыкладаў:<ul><li>49.29918° 19.24788°</li><li>N 49.29918 E "
+"19.24788</li><li>W 49°29.918' S 19°24.788'</li><li>N "
+"49°29'04" E 19°24'43"</li><li>49.29918 N, 19.24788 "
+"E</li><li>49°29'21" N 19°24'38" E</li><li>49 29 "
+"51, 19 24 18</li><li>49 29, 19 24</li><li>E 49 29, N 19 24</li><li>49° "
+"29; 19° 24</li><li>N 49° 29, W 19° 24</li><li>49° 29.5 S, "
+"19° 24.6 E</li><li>N 49 29.918 E 19 15.88</li><li>49 29.4 19 "
+"24.5</li><li>-49 29.4 N -19 24.5 W</li></ul><li>48 deg 42' 52.13\" N, 21 "
+"deg 11' 47.60\" E</li></ul>"
 
 msgid "Tag multiple objects [alpha]"
-msgstr ""
+msgstr "Змена тэгаў некалькіх аб’ектаў [альфа]"
 
 msgid "Edit tags of object list in table"
-msgstr ""
+msgstr "Змяніць тэгі для спісу аб’ектаў у табліцы"
 
 msgid "Tag multiple objects"
-msgstr ""
+msgstr "Дадаць тэгі да некалькіх аб''ектаў"
 
 msgid "Sync with JOSM selection"
-msgstr ""
+msgstr "Сінхранізацыя з вылучаным"
 
 msgid "Zoom to objects"
-msgstr ""
+msgstr "Маштабаваць да аб''ектаў"
 
 msgid "Remove tag"
-msgstr ""
+msgstr "Выдаліць тэг"
 
 msgid "Delete tags from multiple objects"
-msgstr ""
+msgstr "Выдаліць тэгі з некалькіх аб’ектаў"
 
 msgid "Duplicate tags from the first"
-msgstr ""
+msgstr "Капіяваць тэгі з першага"
 
 msgid "Set tags for multiple objects"
-msgstr ""
+msgstr "Задать тэгі некалькіх аб’ектам"
 
 msgid "Delete from history"
-msgstr ""
+msgstr "Выдаліць з гісторыі"
 
 msgid "Find primitives with these tags"
-msgstr ""
+msgstr "Знайсці прымітывы з гэтымі тэгамі"
 
 msgid "Multitag Background: highlight"
-msgstr ""
+msgstr "Змена тэгаў некалькіх аб''ектаў: фон вылучэння"
 
 msgid "Replace Geometry"
-msgstr ""
+msgstr "Замяніць геаметрыю"
 
 msgid "Replace geometry of selected object with a new one"
-msgstr ""
+msgstr "Замяніць геаметрыю абранага аб’екта новай"
 
 msgid ""
 "This tool replaces geometry of one object with another, and so requires "
 "exactly two objects to be selected."
 msgstr ""
+"Гэты інструмент замяняе геаметрыю аднаго аб’екта геаметрыяй іншага, таму "
+"трэба вылучыць два аб’екты."
 
 msgid ""
 "This tool can only replace a node, upgrade a node to a way or a "
 "multipolygon, or replace a way with a way."
 msgstr ""
+"Гэты інструмент ў стане замяняць кропкі, абнаўляць кропку да лініі, або "
+"лінію да мультыпалігону, і замяняць лінію лініяй"
 
 msgid "Node belongs to way(s), cannot replace."
-msgstr ""
+msgstr "Кропка прыналежыць да лініі(ям), замяніць нельга."
 
 msgid "Replace geometry for node {0}"
-msgstr ""
+msgstr "Замяніць геаметрыю для кропкі {0}"
 
 msgid "Relation is not a multipolygon, cannot be used as a replacement."
 msgstr ""
+"Адносіны не з''яўляюцца мультыпалігоным і не могуць выкарыстоўвацца ў якасці "
+"замены."
 
 msgid ""
 "Please select one way that exists in the database and one new way with "
 "correct geometry."
 msgstr ""
+"Абярыце адну лінію з базы дадзеных і адну лінію, якую вы толькі што "
+"намалявалі"
 
 msgid "The ways must be entirely within the downloaded area."
-msgstr ""
+msgstr "Лініі павінны цалкам знаходзіцца ў загружанай вобласці."
 
 msgid ""
 "The way to be replaced cannot have any nodes with properties or relation "
 "memberships unless they belong to both ways."
 msgstr ""
+"Лінія, якая замяняецца, не можа мець кропак з тэгамі або кропак, якія "
+"з''яўляюцца членамі адносін, калі толькі яны не належаць абедзьвем гэтым "
+"лініям."
 
 msgid "Exceeded iteration limit for robust method, using simpler method."
 msgstr ""
+"Перавышаны мяжа ітэрацый для надзейнага метаду, выкарыстоўваем просты метад."
 
 msgid "Replace geometry for way {0}"
-msgstr ""
+msgstr "Замяніць геаметрыю для лініі {0}"
 
 msgid "Range of child primitives count"
-msgstr ""
+msgstr "Колькасць нашчадкаў"
 
 msgid "Range of parent primitives count"
-msgstr ""
+msgstr "Дыяпазон колькасці бацькоўскіх прымітываў"
 
 msgid "Range of referencing relation count"
-msgstr ""
+msgstr "Дыяпазон звязаных адносін"
 
 msgid "Range of attached ways count"
-msgstr ""
+msgstr "Дыяпазон колькасці далучаных ліній"
 
 msgid "Adjacent nodes"
-msgstr ""
+msgstr "Прылеглыя кропкі"
 
 msgid "Select adjacent nodes"
-msgstr ""
+msgstr "Вылучыць прылеглыя кропкі"
 
 msgid "Adjacent ways"
-msgstr ""
+msgstr "Прылеглыя лініі"
 
 msgid "Adjacent ways will be selected. Nodes will be deselected."
-msgstr ""
+msgstr "Будуць вылучаны сумежныя лініі, а кропкі выключаны з вылучэння."
 
 msgid "All connected ways"
-msgstr ""
+msgstr "Усе злучаныя лініі"
 
 msgid "Select all connected ways"
-msgstr ""
+msgstr "Вылучыць усе злучаныя лініі"
 
 msgid "Intersecting ways"
-msgstr ""
+msgstr "Перасякальныя лініі"
 
 msgid "Select intersecting ways"
-msgstr ""
+msgstr "Вылучыць перасякальныя лініі"
 
 msgid "Please select some ways to find connected and intersecting ways!"
 msgstr ""
+"Калі ласка, абярыце лініі, каб знайсці прылеглыя і перасякалыя іх лініі!"
 
 msgid "All intersecting ways"
-msgstr ""
+msgstr "Усе перасякальныя лініі"
 
 msgid "Select all intersecting ways"
-msgstr ""
+msgstr "Вылучыць усе перасякальныя лініі"
 
 msgid "Please select some ways to find all connected and intersecting ways!"
 msgstr ""
+"Калі ласка, вылучыце некалькі ліній для знаходжання злучаных ліній, і ліній, "
+"што з імі перасякаюцца!"
 
 msgid "Middle nodes"
-msgstr ""
+msgstr "Прамежкавыя кропкі"
 
 msgid "Select middle nodes"
-msgstr ""
+msgstr "Абярыце прамежкавыя кропкі"
 
 msgid "Please select two nodes connected by way!"
-msgstr ""
+msgstr "Калі ласка, вылучыце дзве кропкі злучаныя лініяй!"
 
 msgid "Too many ways are added: {0}!"
-msgstr ""
+msgstr "Дададзена занадта шмат ліній: {0}!"
 
 msgid "All inside [testing]"
-msgstr ""
+msgstr "Усё ўсярэдзіне [тэставая версія]"
 
 msgid "Select all inside selected polygons"
-msgstr ""
+msgstr "Вылучыць усё ўсярэдзіне абраных палігонаў"
 
 msgid ""
 "Nothing found. Please select some closed ways or multipolygons to find all "
 "primitives inside them!"
 msgstr ""
+"Нічога не знойдзена. Абярыце некалькі замкнёных ліній або мультыпалігонаў, "
+"каб знайсці ўсе прымітывы ў іх!"
 
 msgid "Area boundary [testing]"
-msgstr ""
+msgstr "Межы вобласці [тэставанне]"
 
 msgid "Select relation or all ways that forms area boundary"
-msgstr ""
+msgstr "Выбар адносін або ўсіх ліній, якія ўтвараюць межы палігона"
 
 msgid ""
 "Nothing found. Please select way that is a part of some polygon formed by "
 "connected ways"
 msgstr ""
+"Нічога не знойдзена. Выберыце лінію, якая з’яўляецца часткай якога-небудзь "
+"палігона, які складаецца са злучаных ліній"
 
 msgid "Select Highway"
-msgstr ""
+msgstr "Вылучыць дарогу"
 
 msgid "Select highway for the name/ref given"
-msgstr ""
+msgstr "Вылучыць дарогу з зададзенымі параметрамі name/ref"
 
 msgid "Please select one or two ways for this action"
-msgstr ""
+msgstr "Для гэтага дзеяння вылучыце адну ці дзве лініі"
 
 msgid "Select last modified nodes"
-msgstr ""
+msgstr "Нядаўна змененыя кропкі"
 
 msgid "Select last modified ways"
-msgstr ""
+msgstr "Нядаўна змененыя лініі"
 
 msgid "Select Way Nodes"
-msgstr ""
+msgstr "Кропкі лініі"
 
 msgid "Select all nodes of a selected way."
-msgstr ""
+msgstr "Выбар усіх кропак абранай лініі"
 
 msgid "Undo selection"
-msgstr ""
+msgstr "Адмяніць вылучэнне"
 
 msgid "Reselect last added object or selection form history"
-msgstr ""
+msgstr "Вылучыць зноў апошнія дададзеныя аб’екты ці вылучэнні з гісторыі"
 
 msgid "Unselect nodes"
-msgstr ""
+msgstr "Зняць вылучэнне з кропак"
 
 msgid "Removes all nodes from selection"
-msgstr ""
+msgstr "Прыбраць кропкі з вылучэння"
 
 msgid "Import Video"
-msgstr ""
+msgstr "Імпартаваць відэа"
 
 msgid "Sync a video against this GPS track"
-msgstr ""
+msgstr "Сінхранізаваць відэа з гэтым трэкам GPS"
 
 msgid "Remove Video"
-msgstr ""
+msgstr "Выдаліць відэа"
 
 msgid "removes current video from layer"
-msgstr ""
+msgstr "выдаляе бягучае відэа з пласта"
 
 msgid "Play/Pause"
-msgstr "Граць/Паўза"
+msgstr "Прайграць/паўза"
 
 msgid "starts/pauses video playback"
-msgstr ""
+msgstr "пачынае/прыпыняе прайграванне відэа"
 
 msgid "Video: {0}"
-msgstr ""
+msgstr "Відэа: {0}"
 
 msgid "Backward"
-msgstr ""
+msgstr "Назад"
 
 msgid "jumps n sec back"
-msgstr ""
+msgstr "адкруціць n сек назад"
 
 msgid "Forward"
 msgstr "Наперад"
 
 msgid "jumps n sec forward"
-msgstr ""
+msgstr "праматаць n сек наперад"
 
 msgid "Faster"
-msgstr ""
+msgstr "Хутчэй"
 
 msgid "faster playback"
-msgstr ""
+msgstr "прайграваць хутчэй"
 
 msgid "Slower"
-msgstr ""
+msgstr "Павольней"
 
 msgid "slower playback"
-msgstr ""
+msgstr "прайграваць павольней"
 
 msgid "Jump To"
-msgstr ""
+msgstr "Перайсці да"
 
 msgid "jumps to the entered gps time"
-msgstr ""
+msgstr "перайсці на паказаны час gps трэка"
 
 msgid "Loop"
-msgstr ""
+msgstr "Паўтараць"
 
 msgid "loops n sec around current position"
-msgstr ""
+msgstr "зацыклівацца n сек ў бягучай пазіцыі"
 
 msgid "Keep centered"
-msgstr ""
+msgstr "Утрымліваць у цэнтры"
 
 msgid "follows the video icon automatically"
-msgstr ""
+msgstr "Аўтаматычна ісці за значком відэа"
 
 msgid "Subtitles"
-msgstr ""
+msgstr "Падзагаловак"
 
 msgid "Show subtitles in video"
-msgstr ""
+msgstr "Паказаць субтытры на відэа"
 
 msgid "Jump length"
-msgstr ""
+msgstr "Працягласць пракруткі"
 
 msgid "Set the length of a jump"
-msgstr ""
+msgstr "Задаць працягласць пракруткі"
 
 msgid "Jump in video for x ms"
-msgstr ""
+msgstr "Праматаць відэа на x мсек"
 
 msgid "Loop length"
-msgstr ""
+msgstr "Даўжыня цыклу"
 
 msgid "Set the length around a looppoint"
-msgstr ""
+msgstr "Задаць працягласць цыклу"
 
 msgid "no deinterlacing"
-msgstr ""
+msgstr "без дэінтэрлейсінгу"
 
 msgid "deinterlacing using line doubling"
-msgstr ""
+msgstr "дэінтэрлейсінг з выкарыстаннем дублявання радкоў"
 
 msgid "deinterlacing using linear interpolation"
-msgstr ""
+msgstr "дэінтэрлейсінг з выкарыстаннем лінейнай інтэрпаляцыі"
 
 msgid ""
 "VLC library is not correctly initialized. Please check that VLC {0} is "
 "correctly installed on your system. Its architecture (32/64 bits) must also "
 "be the same as the JRE that runs JOSM."
 msgstr ""
+"Бібліятэка VLC ініцыялізавана няправiльна. Праверце правільнасць ўстаноўкі "
+"VLC {0} у вашай сістэме. Яго архітэктура (32/64 біта) павінна супадаць з "
+"архітэктурай JRE, які выкарыстоўваецца для працы JOSM."
 
 msgid "Jump to"
-msgstr ""
+msgstr "Перайсці да"
 
 msgid "Jump to GPS time"
-msgstr ""
+msgstr "Перайсці да часу GPS"
 
 msgid "Shows current position in the video"
-msgstr ""
+msgstr "Паказвае бягучае становішча для відэафрагмента"
 
 msgid "Sync"
-msgstr ""
+msgstr "Сінхранізаваць"
 
 msgid "Unable to find JNA Java library!"
-msgstr ""
+msgstr "Не атрымалася знайсці бібліятэку JNA Java!"
 
 msgid "Unable to find native libvlc library!"
-msgstr ""
+msgstr "Бібліятэка libvlc не знойдзена!"
 
 msgid "play"
-msgstr ""
+msgstr "граць"
 
 msgid "loop"
-msgstr ""
+msgstr "цыклічна"
 
 msgid "mute"
-msgstr ""
+msgstr "адключыць гук"
 
 msgid "Walking Papers Scanned Map"
-msgstr ""
+msgstr "Сканаваная карта з Walking-Papers.org"
 
 msgid ""
 "Display a map that was previously scanned and uploaded to walking-papers.org"
 msgstr ""
+"Паказаць карту, якая раней была адсканавана і загружана на walking-papers.org"
 
 msgid ""
 "Enter a walking-papers.org URL or ID (the bit after the ?id= in the URL)"
-msgstr ""
+msgstr "Увядзіце URL ці ID (частка пасля ?id= у URL) на walking-papers.org"
 
 msgid "Could not read information from walking-papers.org the id \"{0}\""
 msgstr ""
+"Немагчыма прачытаць інфармацыю з \"walking-papers.org\" па id \"{0}\""
 
 msgid "Walking Papers: {0}"
-msgstr ""
+msgstr "Walking Papers: {0}"
 
 msgid "Walking Papers layer ({0}) in zoom {1}"
-msgstr ""
+msgstr "Пласт ({0}) Walking Papers у маштабе {1}"
 
 msgid "Way Download"
-msgstr ""
+msgstr "Запампаваць лінію"
 
 msgid "Download map data on the end of selected way"
-msgstr ""
+msgstr "Запампаваць дадзеныя карты, якія ляжаць на канцы абранай лініі"
 
 msgid ""
 "<html>Neither a node nor a way with an endpoint outside of the<br>current "
 "download areas is selected.<br>Select a node on the start or end of a way or "
 "an entire way first.</html>"
 msgstr ""
+"<html>Ні кропка на лініі, ні сама лінія з канцом, якія ляжаць за "
+"межамі<br>бягучай вобласці спампоўкі, не абраны.<br>Спачатку трэба абраць "
+"любую кропку, якая ляжыць на такой лініі.</html>"
 
 msgid "<html>Could not find a unique node to start downloading from.</html>"
 msgstr ""
+"<html>Не атрымалася знайсці ўнікальную кропку, каб пачаць з яе "
+"загрузку.</html>"
 
 msgid "<html>There are no ways connected to node ''{0}''. Aborting.</html>"
-msgstr ""
+msgstr "<html>Няма ліній, далучаных да кропкі ''{0}''. Адменена.</html>"
 
 msgid ""
 "Way downloader data inconsistency. Prior connected way ''{0}'' wasn''t "
 "discovered after download"
 msgstr ""
+"Дадзеныя модуля спампоўкі лініі няпоўныя. Раней далучаная лінія ''{0}'' не "
+"была выяўлена пасля спампоўкі з сервера"
 
 msgid ""
 "<html>There aren''t further connected ways to download.<br>A potential "
@@ -29581,115 +32704,124 @@ msgid ""
 "''{1}''<br>Merge the duplicate node onto the currently selected node and "
 "continue way downloading?</html>"
 msgstr ""
+"<html>Няма больш далучаных ліній для загрузкі з сервера.<br>Аднак быў "
+"знойдзены магчымы дублікат вылучанай кропкі.<br><br>Вылучана кропка: "
+"''{0}''.<br>А магчымы яе дублікат: ''{1}''<br>Вырабіць зліццё вылучанай "
+"кропкі з дублікатам і працягнуць спампоўку лініі з сервера?</html>"
 
 msgid "Merge duplicate node?"
-msgstr ""
+msgstr "Аб’яднаць дублікаты кропак?"
 
 msgid "<html>No more connected ways to download.</html>"
-msgstr ""
+msgstr "<html>Няма больш далучаных ліній для спампоўкі з сервера.</html>"
 
 msgid "Node ''{0}'' is a junction with more than 2 connected ways."
-msgstr ""
+msgstr "Кропка ''{0}'' гэта злучэнне больш чым 2 перасякальных ліній."
 
 msgid "Enter search expression here.."
-msgstr ""
+msgstr "Увядзіце дадзеныя для пошуку тут.."
 
 msgid "Select waypoint to move map"
-msgstr ""
+msgstr "Абраць шляхавую кропку для зрушэння карты"
 
 msgid "Waypoint search"
-msgstr ""
+msgstr "Пошук шляхавых кропак"
 
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
-
-msgid "Way Select"
-msgstr ""
+"Пошук шляхавой кропкі. Перасоўвае карту на шляхавую кропку і вылучае яе."
 
 msgid "Add names from Wikipedia"
-msgstr ""
+msgstr "Дадаць назвы з Вікіпедыі"
 
 msgid ""
 "Fetches interwiki links from Wikipedia in order to add several name tags"
 msgstr ""
+"Атрымаць інтэрвікі спасылкі з Вікіпедыі для таго, каб дадаць некаторыя тэгі "
+"name"
 
 msgid ""
 "Copies the {0} template to the system clipboard instantiated with the "
 "coordinates of the first selected node"
 msgstr ""
+"Капіюе ў буфер абмену шаблон {0}, падставіўшы ў яго каардынаты першай "
+"вылучанай кропкі"
 
 msgid "Copy {0} template"
-msgstr ""
+msgstr "Капіяваць шаблон {0}"
 
 msgid "Fetch Wikipedia articles with coordinates"
-msgstr ""
+msgstr "Атрымаць артыкулы Вікіпедыі з каардынатамі"
 
 msgid ""
 "Double click on item to search for object with article name (and center "
 "coordinate)"
 msgstr ""
+"Пстрыкніце на радку двойчы, каб знайсці аб’ект па назве артыкула і наблізіць "
+"яго."
 
 msgid "Available via WIWOSM server"
-msgstr ""
+msgstr "Даступна праз WIWOSM сервер"
 
 msgid "Available in local dataset"
-msgstr ""
+msgstr "Даступна ў лакальным наборы дадзеных"
 
 msgid "Not linked yet"
-msgstr ""
+msgstr "Спасылка яшчэ не створана"
 
 msgid "{0}.Wikipedia.org"
-msgstr ""
+msgstr "{0}.Wikipedia.org"
 
 msgid "{0}.Wikipedia.org: {1}"
-msgstr ""
+msgstr "{0}.Wikipedia.org: {1}"
 
 msgid "Fetches all coordinates from Wikipedia in the current view"
 msgstr ""
+"Атрыманне з Вікіпедыі ўсіх каардынат для бачнай у акне вобласці карты"
 
 msgid "coordinates"
-msgstr ""
+msgstr "каардынаты"
 
 msgid "Category"
-msgstr ""
+msgstr "Катэгорыя"
 
 msgid "Fetches a list of all Wikipedia articles of a category"
-msgstr ""
+msgstr "Атрыманне спісу ўсіх артыкулаў катэгорыі з Вікіпедыі"
 
 msgid "Enter the Wikipedia category"
-msgstr ""
+msgstr "Увядзіце катэгорыю Вікіпедыі"
 
 msgid "Clipboard"
-msgstr ""
+msgstr "Буфер абмену"
 
 msgid "Pastes Wikipedia articles from the system clipboard"
-msgstr ""
+msgstr "Устаўляе артыкулы Вікіпедыі з сістэмнага буфера абмену"
 
 msgid "clipboard"
-msgstr ""
+msgstr "буфер абмену"
 
 msgid "Open Article"
-msgstr ""
+msgstr "Адкрыць артыкул"
 
 msgid "Opens the Wikipedia article of the selected item in a browser"
-msgstr ""
+msgstr "Адкрыць у браўзары артыкул з Вікіпедыі пра абраны аб’ект"
 
 msgid "Sets the default language for the Wikipedia articles"
-msgstr ""
+msgstr "Абраць мову па змаўчанні для артыкулаў Вікіпедыі"
 
 msgid "Enter the Wikipedia language"
-msgstr ""
+msgstr "Увядзіце мову Вікіпедыі"
 
 msgid ""
 "Adds a ''wikipedia'' tag corresponding to this article to the selected "
 "objects"
-msgstr ""
+msgstr "Дадае тэг wikipedia, адпаведны гэтаму артыкулу, абраным аб’ектам"
 
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
-msgstr ""
+msgstr "Канчатковы WMS Супер-хуткасць Турба выклік II"
 
 msgid "Go driving"
-msgstr ""
+msgstr "Прыступіць да кіравання"
 
 msgid "Drive a race car on this layer"
-msgstr ""
+msgstr "Весці гоначны аўтамабіль на гэтым пласце"
diff --git a/i18n/po/bg.po b/i18n/po/bg.po
index aa403e5..dc5ef71 100644
--- a/i18n/po/bg.po
+++ b/i18n/po/bg.po
@@ -7,16 +7,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
-"PO-Revision-Date: 2015-05-10 19:13+0000\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
+"PO-Revision-Date: 2015-08-17 01:50+0000\n"
 "Last-Translator: pl <Unknown>\n"
 "Language-Team: Bulgarian <bg at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:36+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:37+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: bg\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -98,22 +98,19 @@ msgstr "Зареждане на предпочитанията за сатели
 msgid "Updating user interface"
 msgstr "Обновяване на интерфейса"
 
-msgid "{0} completed in {1}"
-msgstr "{0} завършени в {1}"
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "Игнориране неправилен адрес на файл: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "Игнориране на неправилна препратка: \"{0}\""
 
 msgid "Warning"
 msgstr "Внимание"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "Игнориране неправилен адрес на файл: \"{0}\""
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 "Параметърът \"downloadgps\" не възприема имена на файлове или файлови URL."
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "Игнориране на неправилна препратка: \"{0}\""
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -456,6 +453,9 @@ msgstr "Включване на диалоговия панел"
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Включване на диалоговия панел, максимално увеличаване на картата"
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
 "Разпределяне на избраните точки на равни разстояния по дължината на линия"
@@ -1084,6 +1084,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr "Моля, изберете пътища с ъгли приблизително 90 или 180 градуса."
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr "Поставяне"
 
@@ -1807,7 +1831,7 @@ msgid "Downloading Notes"
 msgstr "Сваляне на Бележки"
 
 msgid "Notes"
-msgstr "Банкноти"
+msgstr "Бележки"
 
 msgid "{0} note has been downloaded."
 msgid_plural "{0} notes have been downloaded."
@@ -2037,15 +2061,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr "Завършване на чертането."
 
-msgid "FIX"
-msgstr "FIX"
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -2067,6 +2082,15 @@ msgstr "0,45,90,..."
 msgid "0,30,45,60,90,..."
 msgstr "0,30,45,60,90,..."
 
+msgid "FIX"
+msgstr "FIX"
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2186,9 +2210,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2420,9 +2441,15 @@ msgstr "всички обекти"
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr "регулярен израз"
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr "добавяне на бутон към ленатата"
 
@@ -2640,6 +2667,10 @@ msgid "RX"
 msgstr "RX"
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr "A"
 
@@ -2690,6 +2721,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr "Неочакван знак: {0}"
 
@@ -3152,6 +3186,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3273,12 +3325,46 @@ msgctxt "compass"
 msgid "E"
 msgstr "И"
 
-msgid "Not in cache"
-msgstr "Не е в кеша"
-
 msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr ""
 
+msgid "HTTP error {0} when loading tiles"
+msgstr ""
+
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
+msgstr ""
+
 msgid "ID > 0 expected. Got {0}."
 msgstr "Очаква се ID > 0. Имаме {0}."
 
@@ -3466,6 +3552,12 @@ msgstr "текст"
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 "Параметърът трябва да започва със символа ''+'' (Намерен параметър ''{0}'')"
@@ -3494,13 +3586,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -3655,10 +3747,10 @@ msgid "Barriers and entrances"
 msgstr "Бариери и входове"
 
 msgid "Checks for errors in barriers and entrances."
-msgstr ""
+msgstr "Проверки за бариери и входове"
 
 msgid "Barrier entrance not set on a barrier"
-msgstr ""
+msgstr "Мястото за преминаване не е на заграждение или ограда"
 
 msgid "Coastlines"
 msgstr "Брегови линии"
@@ -3846,13 +3938,13 @@ msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr ""
 
 msgid "Long segments"
-msgstr ""
+msgstr "Дълги сегменти"
 
 msgid "This tests for long way segments, which are usually errors."
-msgstr ""
+msgstr "Тази проверка е за дълги сегменти, които често представляват грешка."
 
 msgid "Very long segment of {0} kilometers"
-msgstr ""
+msgstr "Много дълъг сегмент от {0} км"
 
 msgid "Tag checker (MapCSS based)"
 msgstr ""
@@ -4130,9 +4222,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr "Маркери с празни стойности"
 
-msgid "Invalid property key"
-msgstr "Неправилен параметров ключ"
-
 msgid "Invalid white space in property key"
 msgstr "Неправилен интервал в ключ"
 
@@ -4142,12 +4231,24 @@ msgstr "Стойност на параметър започва или завъ
 msgid "Property values contain HTML entity"
 msgstr "Стойности съдържащи HTML елементи"
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr "Ключ ''{0}'' не е намерен в шаблони."
 
 msgid "Presets do not contain property key"
 msgstr "Шаблоните не съдържат такъв ключ"
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr "Стойността ''{0}'' за ключ ''{1}'' не е намерена в шаблоните."
 
@@ -4328,6 +4429,9 @@ msgstr "Възел близо до друг път"
 msgid "Connected way end node near other way"
 msgstr "Свързан край на път е близо до друг път"
 
+msgid "Unconnected nodes without physical tags"
+msgstr ""
+
 msgid "Untagged and unconnected nodes"
 msgstr ""
 
@@ -4335,9 +4439,6 @@ msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 "Този тест проверява за немаркирани точки, които не са част от някой път."
 
-msgid "Unconnected nodes without physical tags"
-msgstr ""
-
 msgid "No tags"
 msgstr "Няма тагове"
 
@@ -4534,8 +4635,9 @@ msgstr ""
 msgid "Imagery offset"
 msgstr "Отместване на изображението."
 
+msgctxt "menu"
 msgid "Imagery"
-msgstr "Изображения"
+msgstr ""
 
 msgctxt "layer"
 msgid "Offset"
@@ -4747,45 +4849,56 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
-msgstr "Файл"
+msgstr ""
 
-msgid "Session"
-msgstr "Сесия"
+msgctxt "menu"
+msgid "Edit"
+msgstr ""
 
+msgctxt "menu"
 msgid "View"
-msgstr "Преглед"
+msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
-msgstr "Инструменти"
+msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
-msgstr "Още инструменти"
+msgstr ""
 
+msgctxt "menu"
 msgid "Data"
-msgstr "Данни"
+msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
-msgstr "Избор"
+msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
-msgstr "Шаблони"
+msgstr ""
 
 msgid "More..."
 msgstr "Още..."
 
+msgctxt "menu"
 msgid "GPS"
-msgstr "GPS"
+msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
-msgstr "Прозорци"
+msgstr ""
+
+msgctxt "menu"
+msgid "Help"
+msgstr ""
 
 msgid "Menu: {0}"
 msgstr "Меню: {0}"
 
-msgid "Save and load the current session (list of layers, etc.)"
-msgstr ""
-
 msgid "Edit toolbar"
 msgstr ""
 
@@ -4807,8 +4920,9 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
-msgstr "Аудио"
+msgstr ""
 
 msgid "Do not hide toolbar"
 msgstr ""
@@ -4929,58 +5043,16 @@ msgstr "На заден план"
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr "Детайли..."
-
-msgid "Hide this message and never show it again"
-msgstr "Затвори това съобщение и не го показвай отново"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr "От релация"
-
-msgid "Pos."
-msgstr "позиция"
+msgid " ({0})"
+msgstr " ({0})"
 
-msgid "Role"
-msgstr "Роля"
+msgid "{0} completed in {1}"
+msgstr "{0} завършени в {1}"
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5410,6 +5482,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr "Роля"
+
 msgid "Primitive"
 msgstr "Примитив"
 
@@ -5650,6 +5725,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr "Приложи тази роля към всички членове"
 
+msgid "Pos."
+msgstr "позиция"
+
 msgid "Orig. Way"
 msgstr "оригинален път"
 
@@ -5797,6 +5875,41 @@ msgstr "Разрешаване на конфликти"
 msgid "Resolve conflicts for ''{0}''"
 msgstr "Разрешаване на конфликти за ''{0}''"
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr "От релация"
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5900,8 +6013,8 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
-msgstr " ({0})"
+msgid "edit counts"
+msgstr ""
 
 msgid "not in data set"
 msgstr ""
@@ -6028,6 +6141,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr "xml"
 
@@ -6037,17 +6155,48 @@ msgstr ""
 msgid "unknown"
 msgstr "неизвестно"
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -6093,6 +6242,12 @@ msgstr "Прозрачност"
 msgid "Adjust opacity of the layer."
 msgstr ""
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr "Активиране"
 
@@ -6222,6 +6377,12 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
+msgid "Mini map"
+msgstr ""
+
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
 msgid "List of notes"
 msgstr ""
 
@@ -6280,10 +6441,15 @@ msgstr "ID на обекта:"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr ""
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6312,6 +6478,9 @@ msgstr "Релации: {0}/{1}"
 msgid "Relations: {0}"
 msgstr "Релации: {0}"
 
+msgid "Selection"
+msgstr "Избор"
+
 msgid "Open a selection list window."
 msgstr "Отваряне на списък с избрани обекти."
 
@@ -6404,6 +6573,12 @@ msgstr "Отваряне на прозореца с проверките."
 msgid "Validation results"
 msgstr "Резултати от проверката"
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr "Поправяне"
 
@@ -6998,6 +7173,12 @@ msgstr "Отваряне на уики страницата за този таг
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -7089,14 +7270,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7269,6 +7449,12 @@ msgstr "Сортиране на членовете на релацията"
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7808,6 +7994,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr "Възел {0}"
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8682,6 +8871,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] "{0} обект за изтриване:"
 msgstr[1] "{0} обекта за изтриване:"
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr "Зареждане на всички квадранти"
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr "Смяна разделителна способност"
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr "Зареждане на квадрант"
+
+msgid "Increase zoom"
+msgstr "Увеличаване на мащаба"
+
+msgid "Decrease zoom"
+msgstr "Намаляне на мащаба"
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr "Изчистване на кеша"
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr "Детайли..."
+
+msgid "Hide this message and never show it again"
+msgstr "Затвори това съобщение и не го показвай отново"
+
 msgid "Customize Color"
 msgstr "Избор цвят"
 
@@ -8735,6 +9024,9 @@ msgstr "Съхраняване GPX файл"
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8755,7 +9047,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8840,191 +9132,89 @@ msgstr ""
 msgid "Save OSM file"
 msgstr "Съхраняване OSM файл"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
+msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
+msgid "Validation errors"
+msgstr "Грешки при проверка"
 
-msgid "Auto Zoom"
-msgstr ""
+msgid "No validation errors"
+msgstr "Няма грешки при проверката"
 
-msgid "Auto load tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
-msgid "Show Errors"
+msgid ""
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Load Tile"
-msgstr "Зареждане на квадрант"
-
-msgid "Show Tile Info"
-msgstr ""
+msgid "Correlate to GPX"
+msgstr "Корелиране към GPX"
 
-msgid "Load All Tiles"
-msgstr "Зареждане на всички квадранти"
+msgid "Invalid timezone"
+msgstr "Невалидна часова зона"
 
-msgid "Load All Error Tiles"
-msgstr ""
+msgid "Invalid offset"
+msgstr "Невалидно отместване"
 
-msgid "Increase zoom"
-msgstr "Увеличаване на мащаба"
+msgid "Correlate images with GPX track"
+msgstr "Съпоставяне на изображения с GPX следа"
 
-msgid "Decrease zoom"
-msgstr "Намаляне на мащаба"
+msgid "Try Again"
+msgstr "Опитайте отново"
 
-msgid "Snap to tile size"
+msgid "No images could be matched!"
 msgstr ""
 
-msgid "Flush Tile Cache"
-msgstr "Изчистване на кеша"
+msgid "GPX Files (*.gpx *.gpx.gz)"
+msgstr "GPX Файлове (*.gpx *.gpx.gz)"
 
-msgid "zoom in to load any tiles"
-msgstr ""
+msgid "File {0} is loaded yet under the name \"{1}\""
+msgstr "Файлът {0} е зареден вече под името \"{1}\""
 
-msgid "zoom in to load more tiles"
-msgstr ""
+msgid "Error while parsing {0}"
+msgstr "Грешка при разбор {0}"
 
-msgid "increase zoom level to see more detail"
-msgstr ""
+msgid "Could not read \"{0}\""
+msgstr "Не може да се прочете \"{0}\""
 
-msgid "No tiles at this zoom level"
+msgid ""
+"<html>Take a photo of your GPS receiver while it displays the "
+"time.<br>Display that photo here.<br>And then, simply capture the time you "
+"read on the photo and select a timezone<hr></html>"
 msgstr ""
+"<html>Снимайте вашия GPS приемник, докато той показва времето.<br>Покажете "
+"тази снимка тук.<br>И след това, просто вземете времето от снимката и "
+"изберете времева зона<hr></html>"
 
-msgid "Current zoom: {0}"
-msgstr ""
+msgid "Photo time (from exif):"
+msgstr "Време на снимката (от EXIF):"
 
-msgid "Display zoom: {0}"
-msgstr ""
+msgid "Gps time (read from the above photo): "
+msgstr "Gps време (прочетено от снимката по-горе): "
 
-msgid "Pixel scale: {0}"
-msgstr ""
+msgid "I am in the timezone of: "
+msgstr "Намирам се в часовата зона: "
 
-msgid "Best zoom: {0}"
-msgstr ""
+msgid "No date"
+msgstr "Без дата"
 
-msgid "Cache stats: {0}"
-msgstr ""
+msgid "Open another photo"
+msgstr "Отваряне друга снимка"
 
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
+msgid "Synchronize time from a photo of the GPS receiver"
+msgstr "Синхронизиране време от снимка на GPS приемник"
 
-msgid "EPSG:4326 and Mercator projection are supported"
+msgid ""
+"Error while parsing the date.\n"
+"Please use the requested format"
 msgstr ""
+"Грешка при разбор на датата.\n"
+"Моля използвайте изисквания формат!"
 
-msgid "Validation errors"
-msgstr "Грешки при проверка"
-
-msgid "No validation errors"
-msgstr "Няма грешки при проверката"
-
-msgid "Blank Layer"
-msgstr "Празен слой"
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr "WMS слой ({0}), автоматично сваляне в мащаб {1}"
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr "WMS слой ({0}), сваляне в мащаб {1}"
-
-msgid "Download visible tiles"
-msgstr "Сваляне на видимите квадранти"
-
-msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-"Изисканата област е прекалено голяма. Моля, увеличете мащаба, или променете "
-"разделителната способност."
-
-msgid "Change resolution"
-msgstr "Смяна разделителна способност"
-
-msgid "Reload erroneous tiles"
-msgstr "Презареждане грешни квадранти"
-
-msgid "Alpha channel"
-msgstr "Алфа канал"
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
-msgstr ""
-
-msgid "Automatic downloading"
-msgstr "Автоматично сваляне"
-
-msgid "Zoom to native resolution"
-msgstr ""
-
-msgid "Supported projections are: {0}"
-msgstr ""
-
-msgid "Unsupported WMS file version; found {0}, expected {1}"
-msgstr "Неподдъжана WMS файлова версия; намерена {0}, очаквана {1}"
-
-msgid "Save WMS file"
-msgstr ""
-
-msgid "Correlate to GPX"
-msgstr "Корелиране към GPX"
-
-msgid "GPX Files (*.gpx *.gpx.gz)"
-msgstr "GPX Файлове (*.gpx *.gpx.gz)"
-
-msgid "File {0} is loaded yet under the name \"{1}\""
-msgstr "Файлът {0} е зареден вече под името \"{1}\""
-
-msgid "Error while parsing {0}"
-msgstr "Грешка при разбор {0}"
-
-msgid "Could not read \"{0}\""
-msgstr "Не може да се прочете \"{0}\""
-
-msgid ""
-"<html>Take a photo of your GPS receiver while it displays the "
-"time.<br>Display that photo here.<br>And then, simply capture the time you "
-"read on the photo and select a timezone<hr></html>"
-msgstr ""
-"<html>Снимайте вашия GPS приемник, докато той показва времето.<br>Покажете "
-"тази снимка тук.<br>И след това, просто вземете времето от снимката и "
-"изберете времева зона<hr></html>"
-
-msgid "Photo time (from exif):"
-msgstr "Време на снимката (от EXIF):"
-
-msgid "Gps time (read from the above photo): "
-msgstr "Gps време (прочетено от снимката по-горе): "
-
-msgid "I am in the timezone of: "
-msgstr "Намирам се в часовата зона: "
-
-msgid "No date"
-msgstr "Без дата"
-
-msgid "Open another photo"
-msgstr "Отваряне друга снимка"
-
-msgid "Synchronize time from a photo of the GPS receiver"
-msgstr "Синхронизиране време от снимка на GPS приемник"
-
-msgid ""
-"Error while parsing the date.\n"
-"Please use the requested format"
-msgstr ""
-"Грешка при разбор на датата.\n"
-"Моля използвайте изисквания формат!"
-
-msgid "Invalid date"
-msgstr "Невалидна дата"
+msgid "Invalid date"
+msgstr "Невалидна дата"
 
 msgid "<No GPX track loaded yet>"
 msgstr "<Няма още GPX следи заредени>"
@@ -9066,24 +9256,9 @@ msgstr "Часова зона: "
 msgid "Offset:"
 msgstr "Отместване:"
 
-msgid "Correlate images with GPX track"
-msgstr "Съпоставяне на изображения с GPX следа"
-
 msgid "Correlate"
 msgstr "Корелнутииране"
 
-msgid "Invalid timezone"
-msgstr "Невалидна часова зона"
-
-msgid "Invalid offset"
-msgstr "Невалидно отместване"
-
-msgid "Try Again"
-msgstr "Опитайте отново"
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9287,9 +9462,6 @@ msgstr ""
 "\n"
 "GPS време: {0}"
 
-msgid "JPEG images (*.jpg)"
-msgstr "Изображения JPEG (*.jpg)"
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9352,9 +9524,6 @@ msgstr "метра"
 msgid "Maximum area per request:"
 msgstr "Максимална област за една заявка:"
 
-msgid "sq km"
-msgstr "кв. км."
-
 msgid "Download near:"
 msgstr ""
 
@@ -9993,9 +10162,6 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 "Трябва да рестартирате JOSM, за да може изменените настройки да подействат."
@@ -10003,6 +10169,9 @@ msgstr ""
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr ""
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -10825,6 +10994,21 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
+msgid "1. Enter getCapabilities URL"
+msgstr ""
+
+msgid "2. Enter name for this layer"
+msgstr ""
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr ""
 
@@ -10843,6 +11027,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10864,6 +11060,9 @@ msgstr "Доставчици на изображения"
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10906,9 +11105,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr "Слой / Ниво"
 
@@ -10933,36 +11129,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11901,6 +12082,14 @@ msgstr "Прилагане шаблон"
 msgid "New relation"
 msgstr "Нова релация"
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] "Промяна {0} обект"
@@ -12009,6 +12198,9 @@ msgstr "Извежда допълнителен екран за търсене"
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr "Шаблони"
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12264,6 +12456,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12807,6 +13002,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr "файлове WMS (*.wms)"
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr "Неподдъжана WMS файлова версия; намерена {0}, очаквана {1}"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -13195,6 +13393,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -14202,6 +14413,9 @@ msgstr "Обновяване"
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr "Преглед"
+
 msgid "Blue:"
 msgstr ""
 
@@ -14241,8 +14455,8 @@ msgstr "MapQuest Open Aerial"
 msgid "OpenStreetMap GPS Traces"
 msgstr "OpenStreetMap GPS Traces"
 
-msgid "OpenStreetMap (Mapnik)"
-msgstr "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
+msgstr ""
 
 msgid "skobbler"
 msgstr "skobbler"
@@ -14253,9 +14467,6 @@ msgstr "OpenStreetMap (Mapnik Black & White)"
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr "OpenStreetMap (Mapnik, без етикети)"
 
-msgid "skobbler heatmap"
-msgstr "skobbler heatmap"
-
 msgid "OpenCycleMap"
 msgstr "OpenCycleMap"
 
@@ -14364,6 +14575,9 @@ msgstr "Vienna: Orthofoto (aerial image)"
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr "VoGIS: Echtfarbenbild 2012 (12cm)"
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr "VoGIS: Flächenwidmungsplan"
 
@@ -14378,12 +14592,18 @@ msgid ""
 msgstr ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr "SPW(allonie) 2012 aerial imagery"
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr "SPW(allonie) 2009 aerial imagery"
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr "IBGE Mapa de Setores Urbanos"
 
@@ -14420,12 +14640,18 @@ msgstr "Czech RUIAN parcely"
 msgid "Czech pLPIS"
 msgstr "Czech pLPIS"
 
-msgid "Fugro (Denmark)"
-msgstr "Fugro (Denmark)"
-
 msgid "Geodatastyrelsen (Denmark)"
 msgstr "Geodatastyrelsen (Denmark)"
 
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
+msgstr ""
+
 msgid "Stevns (Denmark)"
 msgstr "Stevns (Denmark)"
 
@@ -14450,6 +14676,9 @@ msgstr "Estonia Forestry (Maaamet)"
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr "Bordeaux - 2012"
 
@@ -14474,8 +14703,8 @@ msgstr "Géobretagne - Morbihan 2010"
 msgid "Géolittoral - Orthophotos 2000"
 msgstr "Géolittoral - Orthophotos 2000"
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
-msgstr "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
+msgstr ""
 
 msgid "Géolittoral - Sentiers"
 msgstr "Géolittoral - Sentiers"
@@ -14489,6 +14718,9 @@ msgstr "Loire-Atlantique - Orthophotos 2012 - 20 cm"
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr "Toulouse - Orthophotoplan 2013"
 
@@ -14501,12 +14733,6 @@ msgstr "Toulouse - Orthophotoplan 2007"
 msgid "Tours - Orthophotos 2013"
 msgstr "Tours - Orthophotos 2013"
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr "Tours - Orthophotos 2008-2010"
-
-msgid "Tours - Orthophotos 2008"
-msgstr "Tours - Orthophotos 2008"
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14529,6 +14755,9 @@ msgstr "Hamburg (20 cm)"
 msgid "Hamburg (DK5)"
 msgstr "Hamburg (DK5)"
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr "Bavaria (2 m)"
 
@@ -14563,11 +14792,8 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr "Maps4BW (LGL-BW, www.lgl-bw.de)"
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
-msgstr "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
+msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
 msgstr "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14596,73 +14822,25 @@ msgstr "Ireland British War Office One-Inch 1941-43 GSGS 4136"
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr "Ireland Bartholomew Quarter-Inch 1940"
 
-msgid "OSMIE Townlands"
-msgstr ""
-
-msgid "OSMIE EDs"
-msgstr ""
-
-msgid "OSMIE Civil Parishes"
-msgstr ""
-
-msgid "OSMIE Baronies"
-msgstr ""
-
-msgid "OSMIE Political"
-msgstr ""
-
-msgid "Ireland EEA GMES Urban Atlas"
-msgstr "Ireland EEA GMES Urban Atlas"
-
-msgid "Ireland EEA CORINE 2006"
-msgstr "Ireland EEA CORINE 2006"
-
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
 msgstr ""
 
 msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Clare Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Dublin Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Fermanagh Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Galway Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Kildare Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Leitrim Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Longford Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Offaly Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Sligo Civil Parishes and Baronies"
+msgid "OSMIE Townlands"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "OSMIE EDs"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "OSMIE Civil Parishes"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "OSMIE Baronies"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "OSMIE Political"
 msgstr ""
 
 msgid "Lodi - Italy"
@@ -14698,6 +14876,9 @@ msgstr "50cm ortho - Latvia"
 msgid "20cm ortho - Latvia - Coastline"
 msgstr "20cm ortho - Latvia - Coastline"
 
+msgid "1.cikla ortofotokarte - Latvia"
+msgstr ""
+
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Lithuania)"
 
@@ -14713,6 +14894,9 @@ msgstr "Luxembourg Inspire Railway"
 msgid "Luxembourg Inspire Roads"
 msgstr "Luxembourg Inspire Roads"
 
+msgid "Luxembourg Inspire Water"
+msgstr ""
+
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Niger Delta Oct 2012 Landsat"
 
@@ -14728,9 +14912,15 @@ msgstr "Pangasinán/Bulacan (Phillipines HiRes)"
 msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr "Geoportal 2: Ortofotomapa (aerial image)"
 
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgstr ""
+
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr "Geoportal 2: PRNG (geo names)"
 
+msgid "Geoportal 2: ISOK hillshade"
+msgstr ""
+
 msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr "Będzin: Ortofotomapa 2013 (aerial image)"
 
@@ -14740,15 +14930,27 @@ msgstr "Będzin: Budynki (buildings)"
 msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr "Bytom: Ortofotomapa 2012 (aerial image)"
 
+msgid "Bytom: Fotoplan 2014 (aerial image)"
+msgstr ""
+
 msgid "Bytom: Budynki (buildings)"
 msgstr "Bytom: Budynki (buildings)"
 
 msgid "Chorzów: Budynki (buildings)"
 msgstr "Chorzów: Budynki (buildings)"
 
+msgid "Częstochowa: Budynki (buildings)"
+msgstr ""
+
 msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr "Częstochowa: Ortofotomapa 2011 (aerial image)"
 
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgstr ""
+
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgstr ""
+
 msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr "Gliwice: Ortofotomapa 2013 (aerial image)"
 
@@ -14758,8 +14960,44 @@ msgstr "Gliwice: Budynki (buildings)"
 msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr "Katowice: Ortofotomapa (aerial image)"
 
-msgid "Łódź: Ortofotomapa (aerial image)"
-msgstr "Łódź: Ortofotomapa (aerial image)"
+msgid "Katowice: Budynki (buildings)"
+msgstr ""
+
+msgid "Łódź: Budynki (buildings)"
+msgstr ""
+
+msgid "Łódź: Ortofotomapa (aerial image)"
+msgstr "Łódź: Ortofotomapa (aerial image)"
+
+msgid "Powiat dębicki: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat lubaczowski: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat łańcucki: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat poznański: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgstr ""
+
+msgid "Powiat rzeszowski: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgstr ""
+
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
 msgstr "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14773,9 +15011,18 @@ msgstr "Rzeszów: Budynki (buildings)"
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr "Zabrze: Ortofotomapa 2011 (aerial image)"
 
@@ -14905,6 +15152,21 @@ msgstr "Bonvillars Orthophoto 2013"
 msgid "Fiez Orthophoto 2013"
 msgstr "Fiez Orthophoto 2013"
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr "MSR Maps Topo"
 
@@ -14920,8 +15182,8 @@ msgstr "USGS Large Scale Imagery"
 msgid "TIGER 2012 Roads Overlay"
 msgstr "TIGER 2012 Roads Overlay"
 
-msgid "New & Misaligned TIGER Roads (2014)"
-msgstr "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
+msgstr ""
 
 msgid "MassGIS L3 Parcels"
 msgstr "MassGIS L3 Parcels"
@@ -15246,6 +15508,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15332,11 +15599,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15394,7 +15656,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15412,9 +15674,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15501,6 +15760,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15539,6 +15806,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15618,9 +15888,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -16028,6 +16295,14 @@ msgid "basketball"
 msgstr "Баскетбол"
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -16052,10 +16327,6 @@ msgid "cricket"
 msgstr "Крикет"
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr "Крикет мрежи"
-
-msgctxt "sport"
 msgid "croquet"
 msgstr "Крокет"
 
@@ -16072,6 +16343,10 @@ msgid "equestrian"
 msgstr "Конна езда"
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -16088,14 +16363,26 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
-msgstr "Хокей"
-
-msgctxt "sport"
 msgid "horse_racing"
 msgstr "Конни надбягвания"
 
 msgctxt "sport"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
+msgstr ""
+
+msgctxt "sport"
 msgid "motor"
 msgstr ""
 
@@ -16108,6 +16395,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -16120,6 +16411,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr "Стрелба"
 
@@ -16147,6 +16442,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr "Тенис"
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr "Такса"
 
@@ -16538,6 +16845,9 @@ msgstr "Връзка към третокласен път"
 msgid "Unclassified"
 msgstr "Некласифициран"
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16614,6 +16924,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr "Път (неизвестен тип)"
 
@@ -17151,6 +17464,12 @@ msgstr "Пътна камера"
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17270,7 +17589,7 @@ msgid "Kerb"
 msgstr ""
 
 msgid "Entrance (Barrier Opening)"
-msgstr ""
+msgstr "Място за преминаване през ограда"
 
 msgid "Gate"
 msgstr "Порта"
@@ -17340,8 +17659,13 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
-msgstr "Вода"
+msgstr ""
 
 msgid "Drain"
 msgstr "Отточен канал"
@@ -17393,6 +17717,10 @@ msgstr "Резервоар"
 msgid "Covered Reservoir"
 msgstr "Закрит резервоар"
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17534,6 +17862,120 @@ msgstr ""
 msgid "public"
 msgstr "обществен"
 
+msgid "Marine Fuel"
+msgstr ""
+
+msgid "Agip"
+msgstr "Agip"
+
+msgid "Aral"
+msgstr "Aral"
+
+msgid "Avia"
+msgstr "Avia"
+
+msgid "BP"
+msgstr "BP"
+
+msgid "Chevron"
+msgstr "Chevron"
+
+msgid "Citgo"
+msgstr "Citgo"
+
+msgid "Eni"
+msgstr "Eni"
+
+msgid "Esso"
+msgstr "Esso"
+
+msgid "Exxon"
+msgstr "Exxon"
+
+msgid "Gulf"
+msgstr "Gulf"
+
+msgid "Mobil"
+msgstr "Mobil"
+
+msgid "OMV"
+msgstr "OMV"
+
+msgid "Petro-Canada"
+msgstr "Petro-Canada"
+
+msgid "Pioneer"
+msgstr "Pioneer"
+
+msgid "Q8"
+msgstr "Q8"
+
+msgid "Repsol"
+msgstr "Repsol"
+
+msgid "Shell"
+msgstr "Shell"
+
+msgid "Socar"
+msgstr "Socar"
+
+msgid "Statoil"
+msgstr "Statoil"
+
+msgid "Sunoco"
+msgstr "Sunoco"
+
+msgid "Tamoil"
+msgstr "Tamoil"
+
+msgid "Texaco"
+msgstr "Texaco"
+
+msgid "Total"
+msgstr "Total"
+
+msgid "Independent"
+msgstr "ЕТ"
+
+msgid "Fuel types:"
+msgstr "Видове горива:"
+
+msgid "Diesel"
+msgstr "Дизел"
+
+msgid "Bio Diesel"
+msgstr "Био дизел"
+
+msgid "Octane 80"
+msgstr "А80"
+
+msgid "Octane 91"
+msgstr "Бензин А91"
+
+msgid "Octane 92"
+msgstr "А92"
+
+msgid "Octane 95"
+msgstr "Бензин А95"
+
+msgid "Octane 98"
+msgstr "Бензин А98"
+
+msgid "Octane 100"
+msgstr "Бензин А100"
+
+msgid "E10 (10% Ethanol mix)"
+msgstr "E10 (10% етанол)"
+
+msgid "E85 (85% Ethanol mix)"
+msgstr "E85 (85% етанол)"
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr "LPG (втечнен природен газ)"
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr "CNG (природен газ под налягане)"
+
 msgid "Pier"
 msgstr "Кей"
 
@@ -17650,6 +18092,9 @@ msgstr "Буфер"
 msgid "Railway Switch"
 msgstr "Железопътна стрелка"
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr "Надземни линии"
 
@@ -17768,136 +18213,25 @@ msgid "Covered (with roof)"
 msgstr "покрит"
 
 msgid "Parking Entrance"
-msgstr "вход"
+msgstr "Вход на паркинг"
 
 msgid "Fuel"
 msgstr "Бензиностанция"
 
-msgid "Agip"
-msgstr "Agip"
-
-msgid "Aral"
-msgstr "Aral"
+msgid "With shop"
+msgstr "С магазин"
 
-msgid "Avia"
-msgstr "Avia"
+msgid "convenience"
+msgstr "малък магазин"
 
-msgid "BP"
-msgstr "BP"
+msgid "kiosk"
+msgstr "будка за вестници"
 
-msgid "Chevron"
-msgstr "Chevron"
+msgid "Diesel (Gas To Liquid - ultimate diesel)"
+msgstr "Дизел (от втечнен газ)"
 
-msgid "Citgo"
-msgstr "Citgo"
-
-msgid "Eni"
-msgstr "Eni"
-
-msgid "Esso"
-msgstr "Esso"
-
-msgid "Exxon"
-msgstr "Exxon"
-
-msgid "Gulf"
-msgstr "Gulf"
-
-msgid "Mobil"
-msgstr "Mobil"
-
-msgid "OMV"
-msgstr "OMV"
-
-msgid "Petro-Canada"
-msgstr "Petro-Canada"
-
-msgid "Pioneer"
-msgstr "Pioneer"
-
-msgid "Q8"
-msgstr "Q8"
-
-msgid "Repsol"
-msgstr "Repsol"
-
-msgid "Shell"
-msgstr "Shell"
-
-msgid "Socar"
-msgstr "Socar"
-
-msgid "Statoil"
-msgstr "Statoil"
-
-msgid "Sunoco"
-msgstr "Sunoco"
-
-msgid "Tamoil"
-msgstr "Tamoil"
-
-msgid "Texaco"
-msgstr "Texaco"
-
-msgid "Total"
-msgstr "Total"
-
-msgid "Independent"
-msgstr "ЕТ"
-
-msgid "With shop"
-msgstr "С магазин"
-
-msgid "convenience"
-msgstr "малък магазин"
-
-msgid "kiosk"
-msgstr "будка за вестници"
-
-msgid "Fuel types:"
-msgstr "Видове горива:"
-
-msgid "Diesel"
-msgstr "Дизел"
-
-msgid "Bio Diesel"
-msgstr "Био дизел"
-
-msgid "Diesel (Gas To Liquid - ultimate diesel)"
-msgstr "Дизел (от втечнен газ)"
-
-msgid "Diesel for Heavy Good Vehicles"
-msgstr "Дизел за камиони"
-
-msgid "Octane 80"
-msgstr "А80"
-
-msgid "Octane 91"
-msgstr "Бензин А91"
-
-msgid "Octane 92"
-msgstr "А92"
-
-msgid "Octane 95"
-msgstr "Бензин А95"
-
-msgid "Octane 98"
-msgstr "Бензин А98"
-
-msgid "Octane 100"
-msgstr "Бензин А100"
-
-msgid "E10 (10% Ethanol mix)"
-msgstr "E10 (10% етанол)"
-
-msgid "E85 (85% Ethanol mix)"
-msgstr "E85 (85% етанол)"
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr "LPG (втечнен природен газ)"
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr "CNG (природен газ под налягане)"
+msgid "Diesel for Heavy Good Vehicles"
+msgstr "Дизел за камиони"
 
 msgid "1/25 mix (mofa/moped)"
 msgstr "1/25 mix (mofa/moped)"
@@ -18117,9 +18451,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr "#CD853F"
 
-msgid "route segment"
-msgstr "сегмент от маршрут"
-
 msgid "stop position"
 msgstr ""
 
@@ -18138,6 +18469,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr "сегмент от маршрут"
+
 msgid "Route Master"
 msgstr ""
 
@@ -18340,6 +18674,12 @@ msgstr "Хотел"
 msgid "Stars"
 msgstr "Звезди"
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr "Мотел"
 
@@ -18430,6 +18770,9 @@ msgstr "сандвичи"
 msgid "sushi"
 msgstr "суши"
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18644,6 +18987,9 @@ msgstr "Сауна"
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -19131,8 +19477,8 @@ msgstr "Показва атм. налягане"
 msgid "Shows humidity"
 msgstr "Показва влажност"
 
-msgid "Recycling"
-msgstr "Рециклиране"
+msgid "Recycling Container"
+msgstr ""
 
 msgid "Batteries"
 msgstr "Батерии"
@@ -19140,19 +19486,46 @@ msgstr "Батерии"
 msgid "Cans"
 msgstr "Консервни кутии"
 
+msgid "Cardboard"
+msgstr ""
+
+msgid "Electrical Appliances"
+msgstr ""
+
 msgid "Glass"
 msgstr "Стъкло"
 
+msgid "Glass Bottles"
+msgstr ""
+
+msgid "Green Waste"
+msgstr ""
+
 msgid "Paper"
 msgstr "Хартия"
 
+msgid "Plastic"
+msgstr ""
+
+msgid "Plastic Bottles"
+msgstr ""
+
+msgid "Plastic Packaging"
+msgstr ""
+
 msgid "Scrap Metal"
 msgstr "Вторични суровини"
 
-msgid "container"
-msgstr "контейнер"
+msgid "Shoes"
+msgstr "Обувки"
+
+msgid "Small Appliances"
+msgstr ""
 
-msgid "centre"
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
 msgstr ""
 
 msgid "Waste Basket/Trash Can"
@@ -19356,6 +19729,9 @@ msgstr "Стрелба с лък"
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr "Скално катерене"
 
@@ -19531,12 +19907,18 @@ msgstr "Бейсбол"
 msgid "Basketball"
 msgstr "Баскетбол"
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr "Волейбол"
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr "Голф"
 
@@ -19552,14 +19934,14 @@ msgstr ""
 msgid "Cricket"
 msgstr "Крикет"
 
-msgid "Cricket Nets"
-msgstr "Крикет мрежи"
-
 msgid "Croquet"
 msgstr "Крокет"
 
-msgid "Hockey"
-msgstr "Хокей"
+msgid "Field Hockey"
+msgstr ""
+
+msgid "Ice Hockey"
+msgstr ""
 
 msgid "Pelota"
 msgstr "Пелота"
@@ -19582,9 +19964,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr "Обучение по безопасност"
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19603,9 +19982,6 @@ msgstr "писта"
 msgid "RC Car"
 msgstr "Радиоуправляеми колички"
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr "Изкуствени"
 
@@ -19678,6 +20054,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr "краварник"
 
@@ -19758,7 +20142,7 @@ msgid "emergency"
 msgstr "авариен изход"
 
 msgid "Entrance number"
-msgstr "Вход номер"
+msgstr "Номер на вход"
 
 msgid "Flat numbers"
 msgstr "Брой етажи"
@@ -20998,9 +21382,6 @@ msgstr "Винен магазин"
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr "Обувки"
-
 msgid "Outdoor"
 msgstr "Туристически стоки (за активен отдих)"
 
@@ -21512,7 +21893,7 @@ msgid "A low area between hills."
 msgstr ""
 
 msgid "Cave Entrance"
-msgstr "Пещерен вход"
+msgstr "Вход на пещера"
 
 msgid "The entrance to a cave."
 msgstr "Вход на пещера"
@@ -22015,12 +22396,12 @@ msgstr "възможен"
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
-msgstr ""
-
 msgid "Email Address"
 msgstr "Е-мейл адрес"
 
+msgid "Fax Number"
+msgstr ""
+
 msgid "Image"
 msgstr "Изображение"
 
@@ -22039,7 +22420,7 @@ msgstr ""
 
 msgctxt "note=*, fixme=*, description=*"
 msgid "Similar but different tags:"
-msgstr ""
+msgstr "Подобни, но различни етикети:"
 
 msgctxt "the tag note=*"
 msgid "Note"
@@ -22110,7 +22491,7 @@ msgid "perimeter of the site"
 msgstr ""
 
 msgid "entrances to the site, on the perimeter"
-msgstr ""
+msgstr "вход към мястото"
 
 msgid "members of site"
 msgstr ""
@@ -22445,6 +22826,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22469,6 +22853,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr "{0}={1} е остаряло"
 
@@ -22529,6 +22925,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr "{0} за точка. Трябва да се ползва за път."
 
@@ -22619,9 +23018,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22993,6 +23401,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -23047,9 +23458,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23126,7 +23534,7 @@ msgid "(No data)"
 msgstr ""
 
 msgid "Segments"
-msgstr ""
+msgstr "Сегменти"
 
 msgid "Show incomplete addresses"
 msgstr ""
@@ -23793,47 +24201,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23842,10 +24259,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24467,6 +24896,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr "Празен слой"
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr "WMS слой ({0}), {1} квадрант(и) зареден(и)"
 
@@ -25758,201 +26190,507 @@ msgstr "югоизток"
 msgid "coastline"
 msgstr "брегова линия"
 
-msgid "land"
-msgstr "земя"
+msgid "land"
+msgstr "земя"
+
+msgid "Maximum number of segments per way"
+msgstr "Максимален брой сегменти за един път"
+
+msgid "Maximum number of nodes in initial trace"
+msgstr "Максимален брой възли в началната следа"
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr "Най-светлия отенък на сивото, който да се смяната за вода (0-255)"
+
+msgid "Line simplification accuracy (degrees)"
+msgstr "Точно на опростяването на линии (в градуси)"
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr "Разрешителна способност на Landsat изображенията (точки на градус)"
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr "Размер на Landsat изображенията (точки)"
+
+msgid "Shift all traces to east (degrees)"
+msgstr "Преместване всички следи на изток (в градуси)"
+
+msgid "Shift all traces to north (degrees)"
+msgstr "Преместване всички следи на север (в градуси)"
+
+msgid "Direction to search for land"
+msgstr "Посока в която да се търси земя"
+
+msgid "Tag ways as"
+msgstr "Маркирай пътищата като"
+
+msgid "WMS Layer"
+msgstr "WMS Слой"
+
+msgid "Maximum cache size (MB)"
+msgstr "Макс.размер на кеша (MB)"
+
+msgid "Maximum cache age (days)"
+msgstr "Съхраняване кеш (дни)"
+
+msgid "Source text"
+msgstr "Изходен текст"
+
+msgid "Lakewalker Plugin Preferences"
+msgstr "Lakewalker Настройки на разширението"
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr "Разширение за трасировка на водоеми по Landsat изображения."
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr "Максимален брой сегменти в създаваните линии. По подразбиране 250."
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+"Максимален брой възли за генериране преди опростяване на линиите. По "
+"подразбиране 50000."
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+"Най-светъл сив отенък, приеман като вода (базирано на Landsat IR-1 данни). "
+"Може да бъде 0-255. По подразбиране 90."
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+"Точност на алгоритъма на Douglas-Peucker за опростяване на линии, измервана "
+"в градуси.<br>По-ниски стойности водят до повече възли и по-точни линии. По "
+"подразбиране 0.0003."
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+"Резолюция на Landsat изображенията, в точки на градус. По подразбиране 4000."
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+"Размер на landsat изображение, измервано в точки. По подразбиране 2000."
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+"Отместване на всички точки в посока Изток (градуси). По подразбиране 0."
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+"Отместване на всички точки в посока Север (градуси). По подразбиране 0."
+
+msgid "Direction to search for land. Default east."
+msgstr "Посока за търсене на земя. По подразбиране изток."
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+"Маркирай линиите като вода, крайбрежие, земя или нищо. По подразбиране вода."
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr "Кой WMS слой да използваме за трасиране. По подразбиране IR1."
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+"Максимален размер на всяка кеш директория в байтове. По подразбиране 300MB"
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr "Макс. възраст на всеки кеш файл (в дни). По подразбиране 100 дни."
+
+msgid "Data source text. Default is Landsat."
+msgstr "Източник на данни. По подразбиране Landsat."
+
+msgid "Downloading image tile..."
+msgstr "Сваляне на квадрат с изображение..."
+
+msgid "Could not acquire image"
+msgstr "Невъзможно да се получи изображение"
+
+msgid "Connection Failed"
+msgstr "Неуспех при свързването"
+
+msgid "Not connected"
+msgstr "Не сте свързан"
+
+msgid "Connecting"
+msgstr "Свързване"
+
+msgid "Connected"
+msgstr "Свързан"
+
+msgid "no name"
+msgstr "няма име"
+
+msgid "Live GPS"
+msgstr "GPS на живо"
+
+msgid "Show GPS data."
+msgstr "Показване GPS данни."
+
+msgid "Status"
+msgstr "Състояние"
+
+msgid "Way Info"
+msgstr "Информация за линия"
+
+msgid "Speed"
+msgstr "Скорост"
+
+msgid "Course"
+msgstr "Курс"
+
+msgid "LiveGPS layer"
+msgstr "LiveGPS слой"
+
+msgid "Capture GPS Track"
+msgstr "Записване на GPS следа"
+
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgstr ""
+"Свързване с gpsd сървъра и показване на текущата позиция на слоя LiveGPS."
+
+msgid "Center Once"
+msgstr "Центриране веднъж"
+
+msgid "Center the LiveGPS layer to current position."
+msgstr "Центриране на LiveGPS слоя към текущата позиция."
+
+msgid "Auto-Center"
+msgstr "Авто-Център"
+
+msgid "Continuously center the LiveGPS layer to current position."
+msgstr "Постоянно центриране на LiveGPS слоя към текущата позиция."
+
+msgid "Open MapDust"
+msgstr ""
+
+msgid "MapDust bug reports"
+msgstr ""
+
+msgid "Activates the MapDust bug reporter plugin"
+msgstr ""
+
+msgid "Missing input data"
+msgstr ""
+
+msgid "Mapillary Images"
+msgstr ""
+
+msgid "Mapillary layer"
+msgstr ""
+
+msgid "Total images:"
+msgstr ""
+
+msgid "images"
+msgstr ""
+
+msgid "Mapillary"
+msgstr ""
+
+msgid "Create Mapillary layer"
+msgstr ""
+
+msgid "Start Mapillary layer"
+msgstr ""
+
+msgid "Download Mapillary images in current view"
+msgstr ""
+
+msgid "Export pictures"
+msgstr ""
+
+msgid "Export Mapillary pictures"
+msgstr ""
+
+msgid "Export images"
+msgstr ""
+
+msgid "Import pictures"
+msgstr ""
+
+msgid "Import local pictures"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer"
+msgstr ""
+
+msgid "Select pictures"
+msgstr ""
+
+msgid "Import pictures into sequence"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer in a sequence"
+msgstr ""
+
+msgid "Join mode"
+msgstr ""
+
+msgid "Join/unjoin pictures"
+msgstr ""
+
+msgid "Join Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures"
+msgstr ""
+
+msgid "Upload Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures."
+msgstr ""
+
+msgid "Walk mode"
+msgstr ""
+
+msgid "Start walk mode"
+msgstr ""
+
+msgid "Zoom to selected image"
+msgstr ""
+
+msgid "Zoom to the currently selected Mapillary image"
+msgstr ""
+
+msgid "Uploaded {0} images"
+msgstr ""
+
+msgid "Approve upload on the website"
+msgstr ""
+
+msgid "View in website"
+msgstr ""
+
+msgid "Copy key"
+msgstr ""
+
+msgid "Copy key tag"
+msgstr ""
+
+msgid "Edit on website"
+msgstr ""
+
+msgid "Export all images"
+msgstr ""
+
+msgid "Export selected sequence"
+msgstr ""
+
+msgid "Export selected images"
+msgstr ""
+
+msgid "Rewrite imported images"
+msgstr ""
+
+msgid "Select a folder"
+msgstr ""
+
+msgid "Explore"
+msgstr ""
+
+msgid "Select a directory"
+msgstr ""
+
+msgid "Speed limit"
+msgstr ""
+
+msgid "Give way"
+msgstr ""
+
+msgid "No entry"
+msgstr ""
 
-msgid "Maximum number of segments per way"
-msgstr "Максимален брой сегменти за един път"
+msgid "Intersection danger"
+msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
-msgstr "Максимален брой възли в началната следа"
+msgid "Mandatory direction (any)"
+msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
-msgstr "Най-светлия отенък на сивото, който да се смяната за вода (0-255)"
+msgid "No turn"
+msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
-msgstr "Точно на опростяването на линии (в градуси)"
+msgid "Uneven road"
+msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
-msgstr "Разрешителна способност на Landsat изображенията (точки на градус)"
+msgid "No parking"
+msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
-msgstr "Размер на Landsat изображенията (точки)"
+msgid "No overtaking"
+msgstr ""
 
-msgid "Shift all traces to east (degrees)"
-msgstr "Преместване всички следи на изток (в градуси)"
+msgid "Pedestrian crossing"
+msgstr ""
 
-msgid "Shift all traces to north (degrees)"
-msgstr "Преместване всички следи на север (в градуси)"
+msgid "Years"
+msgstr ""
 
-msgid "Direction to search for land"
-msgstr "Посока в която да се търси земя"
+msgid "Months"
+msgstr ""
 
-msgid "Tag ways as"
-msgstr "Маркирай пътищата като"
+msgid "Days"
+msgstr ""
 
-msgid "WMS Layer"
-msgstr "WMS Слой"
+msgid "Mapillary filter"
+msgstr ""
 
-msgid "Maximum cache size (MB)"
-msgstr "Макс.размер на кеша (MB)"
+msgid "Open Mapillary filter dialog"
+msgstr ""
 
-msgid "Maximum cache age (days)"
-msgstr "Съхраняване кеш (дни)"
+msgid "Downloaded images"
+msgstr ""
 
-msgid "Source text"
-msgstr "Изходен текст"
+msgid "Only images with signs"
+msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
-msgstr "Lakewalker Настройки на разширението"
+msgid "Choose signs"
+msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
-msgstr "Разширение за трасировка на водоеми по Landsat изображения."
+msgid "Mapillary history"
+msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
-msgstr "Максимален брой сегменти в създаваните линии. По подразбиране 250."
+msgid "Open Mapillary history dialog"
+msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Open Mapillary window"
 msgstr ""
-"Максимален брой възли за генериране преди опростяване на линиите. По "
-"подразбиране 50000."
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary dialog"
 msgstr ""
-"Най-светъл сив отенък, приеман като вода (базирано на Landsat IR-1 данни). "
-"Може да бъде 0-255. По подразбиране 90."
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary main dialog"
 msgstr ""
-"Точност на алгоритъма на Douglas-Peucker за опростяване на линии, измервана "
-"в градуси.<br>По-ниски стойности водят до повече възли и по-точни линии. По "
-"подразбиране 0.0003."
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Next picture"
 msgstr ""
-"Резолюция на Landsat изображенията, в точки на градус. По подразбиране 4000."
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Shows the next picture in the sequence"
 msgstr ""
-"Размер на landsat изображение, измервано в точки. По подразбиране 2000."
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Previous picture"
 msgstr ""
-"Отместване на всички точки в посока Изток (градуси). По подразбиране 0."
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
-"Отместване на всички точки в посока Север (градуси). По подразбиране 0."
 
-msgid "Direction to search for land. Default east."
-msgstr "Посока за търсене на земя. По подразбиране изток."
+msgid "Jump to red"
+msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
-"Маркирай линиите като вода, крайбрежие, земя или нищо. По подразбиране вода."
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
-msgstr "Кой WMS слой да използваме за трасиране. По подразбиране IR1."
+msgid "Jump to blue"
+msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
-"Максимален размер на всяка кеш директория в байтове. По подразбиране 300MB"
 
-msgid "Maximum age of each cached file in days. Default is 100"
-msgstr "Макс. възраст на всеки кеш файл (в дни). По подразбиране 100 дни."
+msgid "Stops the walk."
+msgstr ""
 
-msgid "Data source text. Default is Landsat."
-msgstr "Източник на данни. По подразбиране Landsat."
+msgid "Play"
+msgstr ""
 
-msgid "Downloading image tile..."
-msgstr "Сваляне на квадрат с изображение..."
+msgid "Continues with the paused walk."
+msgstr ""
 
-msgid "Could not acquire image"
-msgstr "Невъзможно да се получи изображение"
+msgid "Pause"
+msgstr ""
 
-msgid "Connection Failed"
-msgstr "Неуспех при свързването"
+msgid "Pauses the walk."
+msgstr ""
 
-msgid "Not connected"
-msgstr "Не сте свързан"
+msgid "Reverse buttons position when displaying images."
+msgstr ""
 
-msgid "Connecting"
-msgstr "Свързване"
+msgid "Display hour when the picture was taken"
+msgstr ""
 
-msgid "Connected"
-msgstr "Свързан"
+msgid "Use 24 hour format"
+msgstr ""
 
-msgid "no name"
-msgstr "няма име"
+msgid "Move to picture''s location with next/previous buttons"
+msgstr ""
 
-msgid "Live GPS"
-msgstr "GPS на живо"
+msgid "Download mode: "
+msgstr ""
 
-msgid "Show GPS data."
-msgstr "Показване GPS данни."
+msgid "Upload selected sequence"
+msgstr ""
 
-msgid "Status"
-msgstr "Състояние"
+msgid "Delete after upload"
+msgstr ""
 
-msgid "Way Info"
-msgstr "Информация за линия"
+msgid "Wait for full quality pictures"
+msgstr ""
 
-msgid "Speed"
-msgstr "Скорост"
+msgid "Follow selected image"
+msgstr ""
 
-msgid "Course"
-msgstr "Курс"
+msgid "Go forward"
+msgstr ""
 
-msgid "LiveGPS layer"
-msgstr "LiveGPS слой"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Capture GPS Track"
-msgstr "Записване на GPS следа"
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "2 images joined"
 msgstr ""
-"Свързване с gpsd сървъра и показване на текущата позиция на слоя LiveGPS."
 
-msgid "Center Once"
-msgstr "Центриране веднъж"
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Center the LiveGPS layer to current position."
-msgstr "Центриране на LiveGPS слоя към текущата позиция."
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Auto-Center"
-msgstr "Авто-Център"
+msgid "2 images unjoined"
+msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
-msgstr "Постоянно центриране на LiveGPS слоя към текущата позиция."
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
+msgstr ""
 
-msgid "Open MapDust"
+msgid "Downloading"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid "Select mode"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "No images found"
 msgstr ""
 
-msgid "Export"
+msgid "Finished upload"
+msgstr ""
+
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25974,6 +26712,9 @@ msgstr "Дължина на селекцията"
 msgid "Selection Area"
 msgstr "Площ на селекцията"
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr "Ъгъл"
 
@@ -26036,47 +26777,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -26309,6 +27009,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr "Инструменти"
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27529,6 +28232,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27656,7 +28380,7 @@ msgid "Relation does not have name"
 msgstr ""
 
 msgid "Relation has streets with different names"
-msgstr ""
+msgstr "Релацията съдържа улици с различни имена"
 
 msgid "fix associatedStreet relation"
 msgstr ""
@@ -27700,6 +28424,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27709,6 +28436,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27889,6 +28619,9 @@ msgstr "Нова стойност за {0}"
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -28067,6 +28800,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr "SeaMap Редактор"
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -28076,6 +28842,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr "Автоматичен запис на данни на живо"
 
@@ -28317,9 +29086,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr "Резолюция:"
 
@@ -29802,9 +30568,6 @@ msgstr "Търсене на точки"
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/bn.po b/i18n/po/bn.po
index 6ee1441..514d5be 100644
--- a/i18n/po/bn.po
+++ b/i18n/po/bn.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2015-04-03 09:24+0000\n"
 "Last-Translator: Md Alamgir <alamgircu at hotmail.com>\n"
 "Language-Team: Bengali <bn at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:35+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:36+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: bn\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -97,20 +97,17 @@ msgstr ""
 msgid "Updating user interface"
 msgstr ""
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr ""
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "বিকৃত ইউআরএল উপেক্ষা করছে: \" {0} \""
 
 msgid "Warning"
 msgstr "সতর্কবার্তা"
 
-msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
+msgid "Ignoring malformed file URL: \"{0}\""
 msgstr ""
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "বিকৃত ইউআরএল উপেক্ষা করছে: \" {0} \""
+msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
+msgstr ""
 
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
@@ -447,6 +444,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
 
@@ -1032,6 +1032,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr ""
 
@@ -1948,15 +1972,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr ""
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -1978,6 +1993,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2096,9 +2120,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2312,9 +2333,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr ""
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2528,6 +2555,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2570,6 +2601,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3020,6 +3054,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3137,10 +3189,44 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3330,6 +3416,12 @@ msgstr ""
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3357,13 +3449,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -3979,9 +4071,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -3991,12 +4080,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4177,13 +4278,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4381,6 +4482,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4594,43 +4696,54 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
 msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
 msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
 msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
 msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
-msgid "Menu: {0}"
+msgctxt "menu"
+msgid "Help"
 msgstr ""
 
-msgid "Save and load the current session (list of layers, etc.)"
+msgid "Menu: {0}"
 msgstr ""
 
 msgid "Edit toolbar"
@@ -4654,6 +4767,7 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
 msgstr ""
 
@@ -4776,58 +4890,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr ""
-
-msgid "Pos."
+msgid " ({0})"
 msgstr ""
 
-msgid "Role"
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5256,6 +5328,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr ""
+
 msgid "Primitive"
 msgstr ""
 
@@ -5496,6 +5571,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5642,6 +5720,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5745,7 +5858,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5873,6 +5986,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5882,17 +6000,48 @@ msgstr ""
 msgid "unknown"
 msgstr ""
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -5938,10 +6087,16 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
-msgid "Activate"
+msgid "Gamma"
 msgstr ""
 
-msgid "Activate the selected layer"
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
+msgid "Activate"
+msgstr ""
+
+msgid "Activate the selected layer"
 msgstr ""
 
 msgid "Activate layer"
@@ -6067,6 +6222,12 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
+msgid "Mini map"
+msgstr ""
+
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
 msgid "List of notes"
 msgstr ""
 
@@ -6125,10 +6286,15 @@ msgstr ""
 msgid "Enter the ID of the object that should be downloaded"
 msgstr ""
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6157,6 +6323,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr ""
 
+msgid "Selection"
+msgstr ""
+
 msgid "Open a selection list window."
 msgstr ""
 
@@ -6247,6 +6416,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -6841,6 +7016,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6932,14 +7113,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7112,6 +7292,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7647,6 +7833,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8492,6 +8681,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr ""
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr ""
 
@@ -8545,6 +8834,9 @@ msgstr ""
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8565,7 +8857,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8648,80 +8940,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr ""
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-
-msgid "Auto Zoom"
-msgstr ""
-
-msgid "Auto load tiles"
-msgstr ""
-
-msgid "Show Errors"
-msgstr ""
-
-msgid "Load Tile"
-msgstr ""
-
-msgid "Show Tile Info"
-msgstr ""
-
-msgid "Load All Tiles"
-msgstr ""
-
-msgid "Load All Error Tiles"
-msgstr ""
-
-msgid "Increase zoom"
-msgstr ""
-
-msgid "Decrease zoom"
-msgstr ""
-
-msgid "Snap to tile size"
-msgstr ""
-
-msgid "Flush Tile Cache"
-msgstr ""
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
@@ -8731,56 +8949,30 @@ msgstr ""
 msgid "No validation errors"
 msgstr ""
 
-msgid "Blank Layer"
-msgstr ""
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "Download visible tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-
-msgid "Change resolution"
-msgstr ""
-
-msgid "Reload erroneous tiles"
-msgstr ""
-
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Automatic downloading"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Zoom to native resolution"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Supported projections are: {0}"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Save WMS file"
+msgid "Try Again"
 msgstr ""
 
-msgid "Correlate to GPX"
+msgid "No images could be matched!"
 msgstr ""
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
@@ -8867,24 +9059,9 @@ msgstr ""
 msgid "Offset:"
 msgstr ""
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
 msgid "Correlate"
 msgstr ""
 
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9078,9 +9255,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr ""
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9143,9 +9317,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9771,16 +9942,16 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 
 msgid "Would you like to restart now?"
 msgstr ""
 
-msgid "Icon paths:"
+msgid "Download plugins"
+msgstr ""
+
+msgid "Icon paths:"
 msgstr ""
 
 msgid "Short Description:"
@@ -10572,6 +10743,21 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
+msgid "1. Enter getCapabilities URL"
+msgstr ""
+
+msgid "2. Enter name for this layer"
+msgstr ""
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr ""
 
@@ -10590,6 +10776,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10611,6 +10809,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10653,9 +10854,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr ""
 
@@ -10680,36 +10878,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11645,6 +11828,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] ""
@@ -11753,6 +11944,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12006,6 +12200,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12542,6 +12739,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12927,6 +13127,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13921,6 +14134,9 @@ msgstr ""
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr ""
+
 msgid "Blue:"
 msgstr ""
 
@@ -13960,7 +14176,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -13972,9 +14188,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14083,6 +14296,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14096,12 +14312,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14138,10 +14360,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14168,6 +14396,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14192,7 +14423,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14207,6 +14438,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14219,12 +14453,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14245,6 +14473,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14277,10 +14508,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14310,6 +14538,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14325,154 +14559,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14487,9 +14727,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14619,6 +14868,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14634,7 +14898,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -14960,6 +15224,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15044,11 +15313,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15102,7 +15366,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15117,9 +15381,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15200,6 +15461,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15238,6 +15507,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15313,9 +15585,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15721,6 +15990,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15745,10 +16022,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15765,6 +16038,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15781,11 +16058,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15801,6 +16090,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15813,6 +16106,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15840,6 +16137,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16231,6 +16540,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16307,6 +16619,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr ""
 
@@ -16844,6 +17159,12 @@ msgstr ""
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17033,6 +17354,11 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
 msgstr ""
 
@@ -17086,6 +17412,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17227,13 +17557,127 @@ msgstr ""
 msgid "public"
 msgstr ""
 
-msgid "Pier"
+msgid "Marine Fuel"
 msgstr ""
 
-msgid "Lock Gate"
+msgid "Agip"
 msgstr ""
 
-msgid "Turning Point"
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
+msgid "Pier"
+msgstr ""
+
+msgid "Lock Gate"
+msgstr ""
+
+msgid "Turning Point"
 msgstr ""
 
 msgid "Slipway"
@@ -17343,6 +17787,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -17466,78 +17913,6 @@ msgstr ""
 msgid "Fuel"
 msgstr ""
 
-msgid "Agip"
-msgstr ""
-
-msgid "Aral"
-msgstr ""
-
-msgid "Avia"
-msgstr ""
-
-msgid "BP"
-msgstr ""
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr ""
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
 msgid "With shop"
 msgstr ""
 
@@ -17547,51 +17922,12 @@ msgstr ""
 msgid "kiosk"
 msgstr ""
 
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -17810,9 +18146,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17831,6 +18164,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18033,6 +18369,12 @@ msgstr ""
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18123,6 +18465,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18337,6 +18682,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18824,7 +19172,7 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
@@ -18833,43 +19181,70 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
-msgid "Glass"
+msgid "Cardboard"
 msgstr ""
 
-msgid "Paper"
+msgid "Electrical Appliances"
 msgstr ""
 
-msgid "Scrap Metal"
+msgid "Glass"
 msgstr ""
 
-msgid "container"
+msgid "Glass Bottles"
 msgstr ""
 
-msgid "centre"
+msgid "Green Waste"
 msgstr ""
 
-msgid "Waste Basket/Trash Can"
+msgid "Paper"
 msgstr ""
 
-msgid "Waste Disposal/Dumpster"
+msgid "Plastic"
 msgstr ""
 
-msgid "Sanitary Dump Station"
+msgid "Plastic Bottles"
 msgstr ""
 
-msgid "Suction pumpout"
+msgid "Plastic Packaging"
 msgstr ""
 
-msgid "Gravity drain for hose"
+msgid "Scrap Metal"
 msgstr ""
 
-msgid "Casette or Elsan Disposal"
+msgid "Shoes"
 msgstr ""
 
-msgid "Operation times"
+msgid "Small Appliances"
 msgstr ""
 
-msgid "Backrest"
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
+msgstr ""
+
+msgid "Waste Basket/Trash Can"
+msgstr ""
+
+msgid "Waste Disposal/Dumpster"
+msgstr ""
+
+msgid "Sanitary Dump Station"
+msgstr ""
+
+msgid "Suction pumpout"
+msgstr ""
+
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
+msgstr ""
+
+msgid "Operation times"
+msgstr ""
+
+msgid "Backrest"
 msgstr ""
 
 msgid "Amount of Seats"
@@ -19049,6 +19424,9 @@ msgstr ""
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr ""
 
@@ -19224,12 +19602,18 @@ msgstr ""
 msgid "Basketball"
 msgstr ""
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr ""
 
@@ -19245,13 +19629,13 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
@@ -19275,9 +19659,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19296,9 +19677,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -19371,6 +19749,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20691,9 +21077,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -21706,10 +22089,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22136,6 +22519,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22160,6 +22546,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22220,6 +22618,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22310,9 +22711,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22682,6 +23092,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22736,9 +23149,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23482,47 +23892,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23531,10 +23950,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24137,6 +24568,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr ""
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25234,374 +25668,680 @@ msgid ""
 "highlight tracks"
 msgstr ""
 
-msgid "Delete this"
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
 msgstr ""
 
-msgid "Delete this&older"
+msgid "Connecting"
 msgstr ""
 
-msgid "km/h"
+msgid "Connected"
 msgstr ""
 
-msgid "Track name: "
+msgid "no name"
 msgstr ""
 
-msgid "Update IRS adjustment layer"
+msgid "Live GPS"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid "Show GPS data."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Speed"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Course"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
+msgid "Explore"
 msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25622,6 +26362,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -25680,47 +26423,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -25953,6 +26655,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr ""
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27170,6 +27875,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27341,6 +28067,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27350,6 +28079,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27530,6 +28262,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27708,6 +28443,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27717,6 +28485,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -27953,9 +28724,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29438,9 +30206,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/br.po b/i18n/po/br.po
index ddb746f..962065b 100644
--- a/i18n/po/br.po
+++ b/i18n/po/br.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2011-10-17 12:11+0000\n"
 "Last-Translator: Fulup <Unknown>\n"
 "Language-Team: Breton <br at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:36+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:36+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: br\n"
 
 msgid "License"
@@ -100,21 +100,18 @@ msgstr ""
 msgid "Updating user interface"
 msgstr ""
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
 msgstr "Na ober van ouzh an URL kamm :  \"{0}\""
 
 msgid "Warning"
 msgstr "Diwallit"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "Na ober van ouzh an URL kamm :  \"{0}\""
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "Na ober van ouzh an URL kamm :  \"{0}\""
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -444,6 +441,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
 
@@ -1029,6 +1029,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr ""
 
@@ -1945,15 +1969,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr ""
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -1975,6 +1990,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2093,9 +2117,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2309,9 +2330,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr ""
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2525,6 +2552,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2567,6 +2598,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3017,6 +3051,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3134,10 +3186,44 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "HTTP error {0} when loading tiles"
+msgstr ""
+
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3327,6 +3413,12 @@ msgstr ""
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3354,13 +3446,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -3976,9 +4068,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -3988,12 +4077,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4174,13 +4275,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4378,6 +4479,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4591,43 +4693,54 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
 msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
 msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
 msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
 msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
-msgid "Menu: {0}"
+msgctxt "menu"
+msgid "Help"
 msgstr ""
 
-msgid "Save and load the current session (list of layers, etc.)"
+msgid "Menu: {0}"
 msgstr ""
 
 msgid "Edit toolbar"
@@ -4651,6 +4764,7 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
 msgstr ""
 
@@ -4773,58 +4887,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr ""
-
-msgid "Pos."
+msgid " ({0})"
 msgstr ""
 
-msgid "Role"
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5253,6 +5325,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr ""
+
 msgid "Primitive"
 msgstr ""
 
@@ -5493,6 +5568,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5639,6 +5717,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5742,7 +5855,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5870,6 +5983,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5879,17 +5997,48 @@ msgstr ""
 msgid "unknown"
 msgstr ""
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -5935,6 +6084,12 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr ""
 
@@ -6064,6 +6219,12 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
+msgid "Mini map"
+msgstr ""
+
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
 msgid "List of notes"
 msgstr ""
 
@@ -6122,10 +6283,15 @@ msgstr ""
 msgid "Enter the ID of the object that should be downloaded"
 msgstr ""
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6154,6 +6320,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr ""
 
+msgid "Selection"
+msgstr ""
+
 msgid "Open a selection list window."
 msgstr ""
 
@@ -6244,6 +6413,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -6838,6 +7013,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6929,14 +7110,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7109,6 +7289,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7644,6 +7830,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8489,6 +8678,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr ""
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr ""
 
@@ -8542,6 +8831,9 @@ msgstr ""
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8562,7 +8854,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8645,80 +8937,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr ""
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-
-msgid "Auto Zoom"
-msgstr ""
-
-msgid "Auto load tiles"
-msgstr ""
-
-msgid "Show Errors"
-msgstr ""
-
-msgid "Load Tile"
-msgstr ""
-
-msgid "Show Tile Info"
-msgstr ""
-
-msgid "Load All Tiles"
-msgstr ""
-
-msgid "Load All Error Tiles"
-msgstr ""
-
-msgid "Increase zoom"
-msgstr ""
-
-msgid "Decrease zoom"
-msgstr ""
-
-msgid "Snap to tile size"
-msgstr ""
-
-msgid "Flush Tile Cache"
-msgstr ""
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
@@ -8728,56 +8946,30 @@ msgstr ""
 msgid "No validation errors"
 msgstr ""
 
-msgid "Blank Layer"
-msgstr ""
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "Download visible tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-
-msgid "Change resolution"
-msgstr ""
-
-msgid "Reload erroneous tiles"
-msgstr ""
-
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Automatic downloading"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Zoom to native resolution"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Supported projections are: {0}"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Save WMS file"
+msgid "Try Again"
 msgstr ""
 
-msgid "Correlate to GPX"
+msgid "No images could be matched!"
 msgstr ""
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
@@ -8864,24 +9056,9 @@ msgstr ""
 msgid "Offset:"
 msgstr ""
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
 msgid "Correlate"
 msgstr ""
 
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9075,9 +9252,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr ""
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9140,9 +9314,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9768,15 +9939,15 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr ""
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -10569,24 +10740,51 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
-msgid "imagery fade"
+msgid "1. Enter getCapabilities URL"
 msgstr ""
 
-msgid "Fade Color: "
+msgid "2. Enter name for this layer"
 msgstr ""
 
-msgid "Fade amount: "
+msgid "{0} cache, total cache size: {1} bytes"
 msgstr ""
 
-msgid "Soft"
+msgid "Cache name"
 msgstr ""
 
-msgid "Strong"
+msgid "Object Count"
+msgstr ""
+
+msgid "imagery fade"
+msgstr ""
+
+msgid "Fade Color: "
+msgstr ""
+
+msgid "Fade amount: "
+msgstr ""
+
+msgid "Soft"
+msgstr ""
+
+msgid "Strong"
 msgstr ""
 
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10608,6 +10806,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10650,9 +10851,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr ""
 
@@ -10677,36 +10875,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11642,6 +11825,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] ""
@@ -11750,6 +11941,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12003,6 +12197,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12539,6 +12736,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12924,6 +13124,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13918,6 +14131,9 @@ msgstr ""
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr ""
+
 msgid "Blue:"
 msgstr ""
 
@@ -13957,7 +14173,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -13969,9 +14185,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14080,6 +14293,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14093,12 +14309,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14135,10 +14357,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14165,6 +14393,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14189,7 +14420,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14204,6 +14435,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14216,12 +14450,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14242,6 +14470,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14274,10 +14505,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14307,6 +14535,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14322,154 +14556,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14484,9 +14724,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14616,6 +14865,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14631,7 +14895,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -14957,6 +15221,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15041,11 +15310,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15099,7 +15363,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15114,9 +15378,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15197,6 +15458,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15235,6 +15504,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15310,9 +15582,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15718,6 +15987,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15742,10 +16019,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15762,6 +16035,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15778,11 +16055,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
+msgstr ""
+
+msgctxt "sport"
+msgid "ice_hockey"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15798,6 +16087,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15810,6 +16103,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15837,6 +16134,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16228,6 +16537,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16304,6 +16616,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr ""
 
@@ -16841,6 +17156,12 @@ msgstr ""
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17030,6 +17351,11 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
 msgstr ""
 
@@ -17083,6 +17409,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17224,10 +17554,124 @@ msgstr ""
 msgid "public"
 msgstr ""
 
-msgid "Pier"
+msgid "Marine Fuel"
 msgstr ""
 
-msgid "Lock Gate"
+msgid "Agip"
+msgstr ""
+
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
+msgid "Pier"
+msgstr ""
+
+msgid "Lock Gate"
 msgstr ""
 
 msgid "Turning Point"
@@ -17340,6 +17784,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -17463,78 +17910,6 @@ msgstr ""
 msgid "Fuel"
 msgstr ""
 
-msgid "Agip"
-msgstr ""
-
-msgid "Aral"
-msgstr ""
-
-msgid "Avia"
-msgstr ""
-
-msgid "BP"
-msgstr ""
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr ""
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
 msgid "With shop"
 msgstr ""
 
@@ -17544,51 +17919,12 @@ msgstr ""
 msgid "kiosk"
 msgstr ""
 
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -17807,9 +18143,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17828,6 +18161,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18030,6 +18366,12 @@ msgstr ""
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18120,6 +18462,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18334,6 +18679,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18821,7 +19169,7 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
@@ -18830,43 +19178,70 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
-msgid "Glass"
+msgid "Cardboard"
 msgstr ""
 
-msgid "Paper"
+msgid "Electrical Appliances"
 msgstr ""
 
-msgid "Scrap Metal"
+msgid "Glass"
 msgstr ""
 
-msgid "container"
+msgid "Glass Bottles"
 msgstr ""
 
-msgid "centre"
+msgid "Green Waste"
 msgstr ""
 
-msgid "Waste Basket/Trash Can"
+msgid "Paper"
 msgstr ""
 
-msgid "Waste Disposal/Dumpster"
+msgid "Plastic"
 msgstr ""
 
-msgid "Sanitary Dump Station"
+msgid "Plastic Bottles"
 msgstr ""
 
-msgid "Suction pumpout"
+msgid "Plastic Packaging"
 msgstr ""
 
-msgid "Gravity drain for hose"
+msgid "Scrap Metal"
 msgstr ""
 
-msgid "Casette or Elsan Disposal"
+msgid "Shoes"
 msgstr ""
 
-msgid "Operation times"
+msgid "Small Appliances"
 msgstr ""
 
-msgid "Backrest"
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
+msgstr ""
+
+msgid "Waste Basket/Trash Can"
+msgstr ""
+
+msgid "Waste Disposal/Dumpster"
+msgstr ""
+
+msgid "Sanitary Dump Station"
+msgstr ""
+
+msgid "Suction pumpout"
+msgstr ""
+
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
+msgstr ""
+
+msgid "Operation times"
+msgstr ""
+
+msgid "Backrest"
 msgstr ""
 
 msgid "Amount of Seats"
@@ -19046,6 +19421,9 @@ msgstr ""
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr ""
 
@@ -19221,12 +19599,18 @@ msgstr ""
 msgid "Basketball"
 msgstr ""
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr ""
 
@@ -19242,13 +19626,13 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
@@ -19272,9 +19656,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19293,9 +19674,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -19368,6 +19746,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20688,9 +21074,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -21703,10 +22086,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22133,6 +22516,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22157,6 +22543,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22217,6 +22615,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22307,9 +22708,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22679,6 +23089,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22733,9 +23146,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23479,47 +23889,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23528,10 +23947,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24134,6 +24565,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr ""
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25231,374 +25665,680 @@ msgid ""
 "highlight tracks"
 msgstr ""
 
-msgid "Delete this"
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
 msgstr ""
 
-msgid "Delete this&older"
+msgid "Connecting"
 msgstr ""
 
-msgid "km/h"
+msgid "Connected"
 msgstr ""
 
-msgid "Track name: "
+msgid "no name"
 msgstr ""
 
-msgid "Update IRS adjustment layer"
+msgid "Live GPS"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid "Show GPS data."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Speed"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Course"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
+msgid "Explore"
 msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25619,6 +26359,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -25677,47 +26420,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -25950,6 +26652,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr ""
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27167,6 +27872,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27338,6 +28064,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27347,6 +28076,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27527,6 +28259,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27705,6 +28440,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27714,6 +28482,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -27950,9 +28721,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29435,9 +30203,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/bs.po b/i18n/po/bs.po
index 9590a5e..96bbd23 100644
--- a/i18n/po/bs.po
+++ b/i18n/po/bs.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2012-11-03 23:07+0000\n"
 "Last-Translator: Alen Mahovic <eyeofthestorm at windowslive.com>\n"
 "Language-Team: Bosnian <bs at li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
 "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:35+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:36+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: bs\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -98,21 +98,18 @@ msgstr "Učitavanje postavki slika"
 msgid "Updating user interface"
 msgstr "Ažuriranje korisničkog interfejsa"
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "Ignorisan loše formiran fajl URL: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "Ignorisan loše formiran URL: \"{0}\""
 
 msgid "Warning"
 msgstr "Upozorenje"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "Ignorisan loše formiran fajl URL: \"{0}\""
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr "Parametar \"downloadgps\" ne prihvata ime fajla ili URL fajla"
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "Ignorisan loše formiran URL: \"{0}\""
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -447,6 +444,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
 
@@ -1032,6 +1032,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr ""
 
@@ -1948,15 +1972,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr ""
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -1978,6 +1993,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2096,9 +2120,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2312,9 +2333,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr ""
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2528,6 +2555,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2570,6 +2601,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3020,6 +3054,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3137,10 +3189,44 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3330,6 +3416,12 @@ msgstr ""
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3357,13 +3449,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -3979,9 +4071,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -3991,12 +4080,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4177,13 +4278,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4381,6 +4482,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4594,43 +4696,54 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
 msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
 msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
 msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
 msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
-msgid "Menu: {0}"
+msgctxt "menu"
+msgid "Help"
 msgstr ""
 
-msgid "Save and load the current session (list of layers, etc.)"
+msgid "Menu: {0}"
 msgstr ""
 
 msgid "Edit toolbar"
@@ -4654,6 +4767,7 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
 msgstr ""
 
@@ -4776,58 +4890,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr ""
-
-msgid "Pos."
+msgid " ({0})"
 msgstr ""
 
-msgid "Role"
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5256,6 +5328,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr ""
+
 msgid "Primitive"
 msgstr ""
 
@@ -5496,6 +5571,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5642,6 +5720,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5745,7 +5858,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5873,6 +5986,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5882,17 +6000,48 @@ msgstr ""
 msgid "unknown"
 msgstr "nepoznato"
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -5938,10 +6087,16 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
-msgid "Activate"
+msgid "Gamma"
 msgstr ""
 
-msgid "Activate the selected layer"
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
+msgid "Activate"
+msgstr ""
+
+msgid "Activate the selected layer"
 msgstr ""
 
 msgid "Activate layer"
@@ -6067,6 +6222,12 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
+msgid "Mini map"
+msgstr ""
+
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
 msgid "List of notes"
 msgstr ""
 
@@ -6125,10 +6286,15 @@ msgstr ""
 msgid "Enter the ID of the object that should be downloaded"
 msgstr ""
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6157,6 +6323,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr ""
 
+msgid "Selection"
+msgstr ""
+
 msgid "Open a selection list window."
 msgstr ""
 
@@ -6247,6 +6416,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -6841,6 +7016,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6932,14 +7113,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7112,6 +7292,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7647,6 +7833,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8492,6 +8681,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr ""
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr ""
 
@@ -8545,6 +8834,9 @@ msgstr ""
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8565,7 +8857,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8648,80 +8940,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr ""
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-
-msgid "Auto Zoom"
-msgstr ""
-
-msgid "Auto load tiles"
-msgstr ""
-
-msgid "Show Errors"
-msgstr ""
-
-msgid "Load Tile"
-msgstr ""
-
-msgid "Show Tile Info"
-msgstr ""
-
-msgid "Load All Tiles"
-msgstr ""
-
-msgid "Load All Error Tiles"
-msgstr ""
-
-msgid "Increase zoom"
-msgstr ""
-
-msgid "Decrease zoom"
-msgstr ""
-
-msgid "Snap to tile size"
-msgstr ""
-
-msgid "Flush Tile Cache"
-msgstr ""
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
@@ -8731,56 +8949,30 @@ msgstr ""
 msgid "No validation errors"
 msgstr ""
 
-msgid "Blank Layer"
-msgstr ""
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "Download visible tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-
-msgid "Change resolution"
-msgstr ""
-
-msgid "Reload erroneous tiles"
-msgstr ""
-
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Automatic downloading"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Zoom to native resolution"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Supported projections are: {0}"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Save WMS file"
+msgid "Try Again"
 msgstr ""
 
-msgid "Correlate to GPX"
+msgid "No images could be matched!"
 msgstr ""
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
@@ -8867,24 +9059,9 @@ msgstr ""
 msgid "Offset:"
 msgstr ""
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
 msgid "Correlate"
 msgstr ""
 
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9078,9 +9255,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr ""
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9143,9 +9317,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9771,16 +9942,16 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 
 msgid "Would you like to restart now?"
 msgstr ""
 
-msgid "Icon paths:"
+msgid "Download plugins"
+msgstr ""
+
+msgid "Icon paths:"
 msgstr ""
 
 msgid "Short Description:"
@@ -10572,6 +10743,21 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
+msgid "1. Enter getCapabilities URL"
+msgstr ""
+
+msgid "2. Enter name for this layer"
+msgstr ""
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr ""
 
@@ -10590,6 +10776,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10611,6 +10809,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10653,9 +10854,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr ""
 
@@ -10680,36 +10878,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11645,6 +11828,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] ""
@@ -11753,6 +11944,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12006,6 +12200,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12542,6 +12739,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12927,6 +13127,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13921,6 +14134,9 @@ msgstr "Ažuriraj"
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr ""
+
 msgid "Blue:"
 msgstr ""
 
@@ -13960,7 +14176,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -13972,9 +14188,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14083,6 +14296,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14096,12 +14312,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14138,10 +14360,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14168,6 +14396,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14192,7 +14423,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14207,6 +14438,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14219,12 +14453,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14245,6 +14473,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14277,10 +14508,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14310,6 +14538,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14325,154 +14559,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14487,9 +14727,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14619,6 +14868,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14634,7 +14898,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -14960,6 +15224,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15044,11 +15313,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15102,7 +15366,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15117,9 +15381,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15200,6 +15461,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15238,6 +15507,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15313,9 +15585,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15721,6 +15990,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15745,10 +16022,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15765,6 +16038,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15781,11 +16058,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15801,6 +16090,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15813,6 +16106,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15840,6 +16137,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16231,6 +16540,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16307,6 +16619,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr ""
 
@@ -16844,6 +17159,12 @@ msgstr ""
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17033,6 +17354,11 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
 msgstr ""
 
@@ -17086,6 +17412,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17227,13 +17557,127 @@ msgstr ""
 msgid "public"
 msgstr ""
 
-msgid "Pier"
+msgid "Marine Fuel"
 msgstr ""
 
-msgid "Lock Gate"
+msgid "Agip"
 msgstr ""
 
-msgid "Turning Point"
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
+msgid "Pier"
+msgstr ""
+
+msgid "Lock Gate"
+msgstr ""
+
+msgid "Turning Point"
 msgstr ""
 
 msgid "Slipway"
@@ -17343,6 +17787,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -17466,78 +17913,6 @@ msgstr ""
 msgid "Fuel"
 msgstr ""
 
-msgid "Agip"
-msgstr ""
-
-msgid "Aral"
-msgstr ""
-
-msgid "Avia"
-msgstr ""
-
-msgid "BP"
-msgstr ""
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr ""
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
 msgid "With shop"
 msgstr ""
 
@@ -17547,51 +17922,12 @@ msgstr ""
 msgid "kiosk"
 msgstr ""
 
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -17810,9 +18146,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17831,6 +18164,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18033,6 +18369,12 @@ msgstr ""
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18123,6 +18465,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18337,6 +18682,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18824,7 +19172,7 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
@@ -18833,43 +19181,70 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
-msgid "Glass"
+msgid "Cardboard"
 msgstr ""
 
-msgid "Paper"
+msgid "Electrical Appliances"
 msgstr ""
 
-msgid "Scrap Metal"
+msgid "Glass"
 msgstr ""
 
-msgid "container"
+msgid "Glass Bottles"
 msgstr ""
 
-msgid "centre"
+msgid "Green Waste"
 msgstr ""
 
-msgid "Waste Basket/Trash Can"
+msgid "Paper"
 msgstr ""
 
-msgid "Waste Disposal/Dumpster"
+msgid "Plastic"
 msgstr ""
 
-msgid "Sanitary Dump Station"
+msgid "Plastic Bottles"
 msgstr ""
 
-msgid "Suction pumpout"
+msgid "Plastic Packaging"
 msgstr ""
 
-msgid "Gravity drain for hose"
+msgid "Scrap Metal"
 msgstr ""
 
-msgid "Casette or Elsan Disposal"
+msgid "Shoes"
 msgstr ""
 
-msgid "Operation times"
+msgid "Small Appliances"
 msgstr ""
 
-msgid "Backrest"
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
+msgstr ""
+
+msgid "Waste Basket/Trash Can"
+msgstr ""
+
+msgid "Waste Disposal/Dumpster"
+msgstr ""
+
+msgid "Sanitary Dump Station"
+msgstr ""
+
+msgid "Suction pumpout"
+msgstr ""
+
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
+msgstr ""
+
+msgid "Operation times"
+msgstr ""
+
+msgid "Backrest"
 msgstr ""
 
 msgid "Amount of Seats"
@@ -19049,6 +19424,9 @@ msgstr ""
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr ""
 
@@ -19224,12 +19602,18 @@ msgstr ""
 msgid "Basketball"
 msgstr ""
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr ""
 
@@ -19245,13 +19629,13 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
@@ -19275,9 +19659,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19296,9 +19677,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -19371,6 +19749,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20691,9 +21077,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -21706,10 +22089,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22136,6 +22519,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22160,6 +22546,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22220,6 +22618,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22310,9 +22711,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22682,6 +23092,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22736,9 +23149,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23482,47 +23892,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23531,10 +23950,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24137,6 +24568,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr ""
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25234,374 +25668,680 @@ msgid ""
 "highlight tracks"
 msgstr ""
 
-msgid "Delete this"
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
 msgstr ""
 
-msgid "Delete this&older"
+msgid "Connecting"
 msgstr ""
 
-msgid "km/h"
+msgid "Connected"
 msgstr ""
 
-msgid "Track name: "
+msgid "no name"
 msgstr ""
 
-msgid "Update IRS adjustment layer"
+msgid "Live GPS"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid "Show GPS data."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Speed"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Course"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
+msgid "Explore"
 msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25622,6 +26362,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -25680,47 +26423,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -25953,6 +26655,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr ""
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27170,6 +27875,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27341,6 +28067,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27350,6 +28079,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27530,6 +28262,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27708,6 +28443,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27717,6 +28485,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -27953,9 +28724,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29438,9 +30206,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/ca.po b/i18n/po/ca.po
index 4844796..9354ea4 100644
--- a/i18n/po/ca.po
+++ b/i18n/po/ca.po
@@ -7,16 +7,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
-"PO-Revision-Date: 2015-04-18 21:18+0000\n"
-"Last-Translator: Dirk Stöcker <launchpad at dstoecker.de>\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
+"PO-Revision-Date: 2015-10-06 12:46+0000\n"
+"Last-Translator: pitort <pitort at eclipso.eu>\n"
 "Language-Team: el_libre - - www.catmidia.cat\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:37+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:37+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: ca\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -97,23 +97,20 @@ msgstr "S''estan carregant les preferències de les imatges"
 msgid "Updating user interface"
 msgstr "S''està actualitzant la interfície d''usuari/a"
 
-msgid "{0} completed in {1}"
-msgstr "{0} completat en {1}"
-
-msgid "Ignoring malformed file URL: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
 msgstr "S''està ignorant l''adreça URL malformada: \"{0}\""
 
 msgid "Warning"
 msgstr "Atenció"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "S''està ignorant l''adreça URL malformada: \"{0}\""
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 "El paràmetre \"downloadgps\" no accepta noms de fitxer ni adreces URL de "
 "fitxers"
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "S''està ignorant l''adreça URL malformada: \"{0}\""
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -465,6 +462,9 @@ msgstr "Commuta les finestres"
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Commuta les finestres, maximitza la vista del mapa"
 
+msgid "Distribute Nodes"
+msgstr "Distribueix els nodes"
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
 "Distribueix els nodes seleccionats en distàncies iguals a llarg d''una línia"
@@ -477,6 +477,9 @@ msgid ""
 "* One no self-crossing way with at most two of its nodes;\n"
 "* Three nodes."
 msgstr ""
+"Si us plau seleccioneu :\n"
+"* Una via que no es creui amb ella mateixa i com a mínim dos nodes;\n"
+"* Tres nodes."
 
 msgid "Download from OSM..."
 msgstr "Baixa des de l''OSM..."
@@ -495,7 +498,7 @@ msgid "Download data"
 msgstr "Baixa dades"
 
 msgid "Download notes in current view"
-msgstr ""
+msgstr "Baixa les notes de la vista actual"
 
 msgid "Download object..."
 msgstr "Baixa l''objecte..."
@@ -1119,6 +1122,32 @@ msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 "Seleccioneu vies que formin un angle de 90 o 180 graus, aproximadament."
 
+msgid "Download from Overpass API ..."
+msgstr "Baixa de l''API d''Overpass..."
+
+msgid "Download map data from Overpass API server."
+msgstr "Baixa dades del servidor de l''API d''Overpass..."
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+"Construeix una consulta d''Overpass utilitzant l''assistent de consultes "
+"Overpass Turbo"
+
+msgid "Build query"
+msgstr "Construeix la consulta"
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr "<html>L''assistent d''Overpass no pot analitzar la consulta següent:"
+
+msgid "Parse error"
+msgstr "Error d''anàlisi"
+
+msgid "Overpass query: "
+msgstr "Consulta d''Overpass: "
+
+msgid "Overpass server: "
+msgstr "Servidor Overpass: "
+
 msgid "Paste"
 msgstr "Enganxa"
 
@@ -1606,7 +1635,7 @@ msgstr[1] ""
 "La via afectada despareixeria un cop es desconnectin els nodes seleccionats."
 
 msgid "Some irrelevant nodes have been removed from the selection"
-msgstr ""
+msgstr "Alguns nodes irrellevants han estat suprimits de la selecció"
 
 msgid "Undo"
 msgstr "Desfés"
@@ -1878,19 +1907,22 @@ msgstr "Notes"
 
 msgid "{0} note has been downloaded."
 msgid_plural "{0} notes have been downloaded."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} nota ha estat descarregada."
+msgstr[1] "{0} notes han estat descarregades."
 
 msgid ""
 "Since the download limit was {0}, there might be more notes to download."
 msgstr ""
+"Atès que el límit de descàrregues era {0}, pot haver més notes a descarregar."
 
 msgid ""
 "Request a smaller area to make sure that all notes are being downloaded."
 msgstr ""
+"Seleccioneu una zona més petita per assegurar que totes les notes seran "
+"descarregades."
 
 msgid "More notes to download"
-msgstr ""
+msgstr "Hi ha més notes per descarregar"
 
 msgid "Download OSM Notes within Bounds"
 msgstr "Descarrega notes OSM a dins dels límits"
@@ -1908,7 +1940,7 @@ msgid "Download Compressed OSM"
 msgstr "Baixa OSM comprimit"
 
 msgid "Download OSM object by ID"
-msgstr ""
+msgstr "Baixa un objecte OSM per ID"
 
 msgid "Download OSM"
 msgstr "Baixar OSM"
@@ -2118,15 +2150,6 @@ msgstr "Discretització d''angles activa"
 msgid "Finish drawing."
 msgstr "Finalitza el dibuix."
 
-msgid "FIX"
-msgstr "ARREGLA"
-
-msgid "draw angle snap"
-msgstr "dibuixa angles discrets"
-
-msgid "draw angle snap highlight"
-msgstr "dibuix d''angles discrets ressaltat"
-
 msgid "Toggle snapping by {0}"
 msgstr "Commuta la discretització amb {0}"
 
@@ -2148,6 +2171,15 @@ msgstr "0,45,90,..."
 msgid "0,30,45,60,90,..."
 msgstr "0,30,45,60,90,..."
 
+msgid "FIX"
+msgstr "ARREGLA"
+
+msgid "draw angle snap"
+msgstr "dibuixa angles discrets"
+
+msgid "draw angle snap highlight"
+msgstr "dibuix d''angles discrets ressaltat"
+
 msgid "Angle snapping"
 msgstr "Unió automàtica d''angles"
 
@@ -2285,9 +2317,6 @@ msgstr ""
 "Acció_Via_Paral·lela\n"
 "Les vies seleccionades formaran una via simple sense branques."
 
-msgid "Make parallel way error"
-msgstr "Error en fer una via paral·lela"
-
 msgid "Drag play head"
 msgstr "Desplaça el capçal de lectura"
 
@@ -2524,9 +2553,15 @@ msgstr "tots els objectes"
 msgid "Also include incomplete and deleted objects in search."
 msgstr "Inclou a la cerca els objectes incomplets i els esborrats."
 
+msgid "standard"
+msgstr "estàndard"
+
 msgid "regular expression"
 msgstr "expressió regular"
 
+msgid "MapCSS selector"
+msgstr "Selector de MapCSS"
+
 msgid "add toolbar button"
 msgstr "afegeix un botó a la barra d''eines"
 
@@ -2657,10 +2692,13 @@ msgstr "propietats"
 msgid ""
 "ways with at least 20 nodes, or relations containing at least 20 nodes"
 msgstr ""
+"vies amb 20 nodes com a mínim, o relacions que contenen 20 nodes com a mínim."
 
 msgid ""
 "nodes with at least 3 referring ways, or relations containing at least 3 ways"
 msgstr ""
+"vies que fan referència a 3 vies com a mínim, o relacions que contenen 3 "
+"vies com a mínim."
 
 msgid "objects having 5 to 10 tags"
 msgstr "objectes que tenen entre 5 i 10 etiquetes"
@@ -2749,6 +2787,10 @@ msgid "RX"
 msgstr "RX"
 
 msgctxt "search"
+msgid "CSS"
+msgstr "CSS"
+
+msgctxt "search"
 msgid "A"
 msgstr "A"
 
@@ -2802,6 +2844,9 @@ msgstr "Sèrie de nombres esperats"
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr "Testimoni inesperat. Esperat {0}, trobat {1}"
 
+msgid "Failed to parse MapCSS selector"
+msgstr "Ha fallat l''anàlisi del selector MApCSS"
+
 msgid "Unexpected token: {0}"
 msgstr "S''ha trobat un testimoni inesperat: {0}"
 
@@ -3297,6 +3342,24 @@ msgstr "Ha fallat la creació del directori mancant per la memòria cau: {0}"
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr "<html>Ha fallat la creació del directori de memòria cau: {0}</html>"
 
+msgid "Unable to delete temporary file {0}"
+msgstr "No ha estat possible d''esborrar el fitxer temporal {0}"
+
+msgid "Unable to set file non-readable {0}"
+msgstr "No ha estat possible marcar el fitxer {0} com a no llegible"
+
+msgid "Unable to set file non-writable {0}"
+msgstr "No ha estat possible marcar el fitxer {0} com a no escrivible"
+
+msgid "Unable to set file non-executable {0}"
+msgstr "No ha estat possible marcar el fitxer {0} com a no executable"
+
+msgid "Unable to set file readable {0}"
+msgstr "No ha estat possible marcar el fitxer {0} com a llegible"
+
+msgid "Unable to set file writable {0}"
+msgstr "No ha estat possible marcar el fitxer {0} com a escrivible"
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3371,6 +3434,8 @@ msgid ""
 "Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
 "startup)."
 msgstr ""
+"Prova d''activar la xarxa IPV6, es prefereix IPV6 en comptes de IPV4 (només "
+"en cas de l''arrencada inicial)"
 
 msgid " (at line {0}, column {1})"
 msgstr " (a la línia {0}, columna {1})"
@@ -3435,14 +3500,53 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
-msgid "Not in cache"
-msgstr "No a la memòria cau"
-
 msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr ""
 "No s''ha trobat la projecció ''{0}'', el favorit ''{1}'' no pot ser "
 "utilitzat."
 
+msgid "HTTP error {0} when loading tiles"
+msgstr "Error HTTP {0} mentre es carregàven les tessel·les"
+
+msgid "Error downloading tiles: {0}"
+msgstr "Error en descarregar les tessel·les: {0}"
+
+msgid "Could not load image from tile server"
+msgstr "No es pot carregar la imatge del servidor de tessel·les"
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+"{0} no és un argument WMS vàlid. Si us plau, verifiqueu la URL d''aquest "
+"server:\n"
+"{1}"
+
+msgid "Select WMTS layer"
+msgstr "Seleccioneu una capa WMTS"
+
+msgid "Layer name"
+msgstr "Nom de la capa"
+
+msgid "Projection"
+msgstr "Projecció"
+
+msgid "Matrix set identifier"
+msgstr "Identificador del conjunt de matrius"
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr "No hi ha capes definides al document getCapabilities: {0}"
+
+msgid "No layer selected"
+msgstr "No heu seleccionat cap capa"
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
+msgstr ""
+"Només se suporten tessel·les quadrades. El servidor ha retornat {0}x{1} per "
+"a l''identificador TileMatrix  {2}"
+
 msgid "ID > 0 expected. Got {0}."
 msgstr "S''espera un ID > 0. Actualment és {0}."
 
@@ -3657,6 +3761,14 @@ msgstr "text"
 msgid "areatext"
 msgstr "àrea de text"
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+"La projecció UTM (''+proj=utm'') requereix el paràmetre ''+zone=...''."
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+"S''esperava un valor sencer entre 1 i 60 per al paràmetre ''+zone=...''."
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr "El paràmetre ha de començar amb el caràcter ''+'' (trobat ''{0}''"
 
@@ -3684,6 +3796,9 @@ msgstr "L''el·lipsoide ''{0}'' no és compatible"
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr "La combinació dels paràmetres de l''el·lipsoide no són compatibles"
 
+msgid "Unknown datum identifier: ''{0}''"
+msgstr "Identificador de datum desconegut: ''{0}''"
+
 msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr "El·lipsoide requerit (+ellps=* or +a=*, +b=*)"
 
@@ -3692,9 +3807,6 @@ msgstr ""
 "El fitxer de desplaçament de la graella \"{0}\" per l''opció +nadgrids no "
 "està suportatat."
 
-msgid "Unknown datum identifier: ''{0}''"
-msgstr "Identificador de datum desconegut: ''{0}''"
-
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
 msgstr "Datum requerit (+datum=*, +towgs84=* o +nadgrids=*)"
 
@@ -4063,13 +4175,13 @@ msgstr ""
 "\"endarrere\""
 
 msgid "Long segments"
-msgstr ""
+msgstr "Segments llargs"
 
 msgid "This tests for long way segments, which are usually errors."
-msgstr ""
+msgstr "Comprova si hi ha llargs segments de via, que és un error habitual."
 
 msgid "Very long segment of {0} kilometers"
-msgstr ""
+msgstr "Segment massa llarg, de {0} quilòmetres"
 
 msgid "Tag checker (MapCSS based)"
 msgstr "Verificador d''etiquetes (basat en CSS Map)"
@@ -4175,6 +4287,7 @@ msgstr ""
 
 msgid "Missing name:*={0}. Add tag with correct language key."
 msgstr ""
+"Manca nom:*={0}. Afegiu una etiqueta amb l''etiqueta correcta de llengua."
 
 msgid "A name is missing, even though name:* exists."
 msgstr "Manca una clau nom, fins i tot si existeix la clau nom:*"
@@ -4368,9 +4481,6 @@ msgstr "El valor de la clau és més gran del permés"
 msgid "Tags with empty values"
 msgstr "Etiquetes amb valors buits"
 
-msgid "Invalid property key"
-msgstr "Clau no vàlida"
-
 msgid "Invalid white space in property key"
 msgstr "Espai blanc no vàlid a la clau"
 
@@ -4380,12 +4490,24 @@ msgstr "Els valors comencen o acaben amb un espai en blanc"
 msgid "Property values contain HTML entity"
 msgstr "Els valors contenen codi HTML"
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr "La clau ''{0}'' sembla ''{1}''."
+
+msgid "Misspelled property key"
+msgstr "Propietat de la clau mal escrita"
+
 msgid "Key ''{0}'' not in presets."
 msgstr "La clau ''{0}'' no és ales predefinicions."
 
 msgid "Presets do not contain property key"
 msgstr "Les predefinicions no contenen la propietat de la clau"
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr "El valor ''{0}'' de la clau ''{1}'' apareix com ''{2}''."
+
+msgid "Misspelled property value"
+msgstr "Valor de la propietat mal escrit"
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr "El valor ''{0}'' per a la clau ''{1}'' no és a les predefinicions."
 
@@ -4574,6 +4696,9 @@ msgstr "El node d''una via és a prop d''una altra via"
 msgid "Connected way end node near other way"
 msgstr "El node final de la via és a prop d''una altra via"
 
+msgid "Unconnected nodes without physical tags"
+msgstr "Nodes no connectats sense etiquetes físiques"
+
 msgid "Untagged and unconnected nodes"
 msgstr "nodes sense etiquetes i sense connexió"
 
@@ -4581,9 +4706,6 @@ msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 "Aquest test cerca nodes sense etiquetes i que no són part de cap via."
 
-msgid "Unconnected nodes without physical tags"
-msgstr "Nodes no connectats sense etiquetes físiques"
-
 msgid "No tags"
 msgstr "Cap etiqueta"
 
@@ -4781,6 +4903,7 @@ msgstr "Feu clic per tancar la finestra de diàleg"
 msgid "Imagery offset"
 msgstr "Decalatge de la imatgeria"
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr "Imatgeria"
 
@@ -4960,14 +5083,18 @@ msgstr[1] ""
 msgid ""
 "Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
 msgstr ""
+"Ha estat detectada una xarxa IPv6, es preferirà IPv6 sobre IPv4 a partir del "
+"proper inici."
 
 msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
-msgstr ""
+msgstr "Ha estat detectada una xarxa IPv6, es prefereix IPv6 sobre IPv4."
 
 msgid ""
 "Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
 "restart."
 msgstr ""
+"Ha estat detectada una xarxa IPv4, es preferirà IPv4 sobre IPv6 a partir del "
+"proper inici."
 
 msgid "Unsaved osm data"
 msgstr "Dades de l''OSM no enregistrades"
@@ -5020,45 +5147,56 @@ msgstr ""
 "(proxy).<br>Voleu canviar ara la vostra configuració de servidor "
 "intermediari?"
 
+msgctxt "menu"
 msgid "File"
 msgstr "Fitxer"
 
-msgid "Session"
-msgstr "Sessió"
+msgctxt "menu"
+msgid "Edit"
+msgstr "Modifica"
 
+msgctxt "menu"
 msgid "View"
-msgstr "Visualitza"
+msgstr "Vista"
 
+msgctxt "menu"
 msgid "Tools"
 msgstr "Eines"
 
+msgctxt "menu"
 msgid "More tools"
 msgstr "Més eines"
 
+msgctxt "menu"
 msgid "Data"
 msgstr "Dades"
 
+msgctxt "menu"
 msgid "Selection"
 msgstr "Selecció"
 
+msgctxt "menu"
 msgid "Presets"
 msgstr "Predefinicions"
 
 msgid "More..."
 msgstr "Més ..."
 
+msgctxt "menu"
 msgid "GPS"
 msgstr "GPS"
 
+msgctxt "menu"
 msgid "Windows"
 msgstr "Finestres"
 
+msgctxt "menu"
+msgid "Help"
+msgstr "Ajuda"
+
 msgid "Menu: {0}"
 msgstr "Menú: {0}"
 
-msgid "Save and load the current session (list of layers, etc.)"
-msgstr "Enregistrar i carregar la sessió actual (llista de capes, etc.)"
-
 msgid "Edit toolbar"
 msgstr "Barra d''eines d''edició"
 
@@ -5083,6 +5221,7 @@ msgstr "Feu clic per obrir la pestanya de la imatgeria a les preferències"
 msgid "Search menu items"
 msgstr "Cerca elements de menú"
 
+msgctxt "menu"
 msgid "Audio"
 msgstr "Àudio"
 
@@ -5208,67 +5347,17 @@ msgstr "En segon pla"
 msgid "Click to run job in background"
 msgstr "Feu clic per llançar la tasca en segon pla"
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-"La imatgeria aèria podria estar desalineada. Si us plau verifiqueu el seu "
-"decalatge utilitzant un tack GPS!"
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-
-msgid "Details..."
-msgstr "Detalls..."
-
-msgid "Hide this message and never show it again"
-msgstr "Amagar aquest missatge i no tornar-ho a mostrar"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-"<html>Si us plau confirmeu la supressió d''<strong>1 objecte</strong> "
-"d''<strong>1 relació</strong>.</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>Si us plau confirmeu la supressió d''<strong>1 objecte</strong> de "
-"<strong>{0} relacions</strong>.</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>Si us plau confirmeu la supressió de <strong>{0} objectes</strong> de "
-"<strong>{1} relacions</strong>.</html>"
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] "Suprimint {0} objecte"
-msgstr[1] "Suprimint {0} objectes"
-
-msgid "Delete objects"
-msgstr "Suprimeix objectes"
-
-msgid "To delete"
-msgstr "Per suprimir"
-
-msgid "From Relation"
-msgstr "De la relació"
-
-msgid "Pos."
-msgstr "Pos."
+msgid " ({0})"
+msgstr " ({0})"
 
-msgid "Role"
-msgstr "Rol"
+msgid "{0} completed in {1}"
+msgstr "{0} completat en {1}"
 
-msgid "Click to close the dialog and remove the object from the relations"
-msgstr "Feu clic per tancar la finestra i eliminar l''objecte de relacions"
+msgid "Enlarge"
+msgstr "Engrandeix"
 
-msgid "Click to close the dialog and to abort deleting the objects"
-msgstr "Feu clic per tancar la finestra i aturar la supressió d''objectes"
+msgid "Shrink"
+msgstr "Enpetiteix"
 
 msgid ""
 "<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
@@ -5737,6 +5826,9 @@ msgstr "Conservar el seu estat esborrat"
 msgid "Undecide conflict between deleted state"
 msgstr "Conflicte a resoldre entre elements esborrats"
 
+msgid "Role"
+msgstr "Rol"
+
 msgid "Primitive"
 msgstr "Primitiva"
 
@@ -6027,6 +6119,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr "Aplicar aquest rol a tots els membres"
 
+msgid "Pos."
+msgstr "Pos."
+
 msgid "Orig. Way"
 msgstr "Via original"
 
@@ -6192,6 +6287,47 @@ msgstr "Resol conflictes"
 msgid "Resolve conflicts for ''{0}''"
 msgstr "Resoldre els conflictes per ''{0}''"
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+"<html>Si us plau confirmeu la supressió d''<strong>1 objecte</strong> "
+"d''<strong>1 relació</strong>.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Si us plau confirmeu la supressió d''<strong>1 objecte</strong> de "
+"<strong>{0} relacions</strong>.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Si us plau confirmeu la supressió de <strong>{0} objectes</strong> de "
+"<strong>{1} relacions</strong>.</html>"
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] "Suprimint {0} objecte"
+msgstr[1] "Suprimint {0} objectes"
+
+msgid "Delete objects"
+msgstr "Suprimeix objectes"
+
+msgid "To delete"
+msgstr "Per suprimir"
+
+msgid "From Relation"
+msgstr "De la relació"
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr "Feu clic per tancar la finestra i eliminar l''objecte de relacions"
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr "Feu clic per tancar la finestra i aturar la supressió d''objectes"
+
 msgid "Filter objects and hide/disable them."
 msgstr "Filtrar els objectes i amagar-los/desactivar-los"
 
@@ -6296,8 +6432,8 @@ msgstr "Informació vançada de l''objecte"
 msgid "map style"
 msgstr "estil de mapa"
 
-msgid " ({0})"
-msgstr " ({0})"
+msgid "edit counts"
+msgstr "recompte d''edicions"
 
 msgid "not in data set"
 msgstr "absent del conjunt de dades"
@@ -6439,6 +6575,11 @@ msgstr ""
 "Els dos objectes seleccionats tenen el mateix estil, tot i que no és "
 "idèntic, a la memòria cau"
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] "{0} usuari ha modificat la selecció:"
+msgstr[1] "{0}  usuaris han modificat la selecció:"
+
 msgid "xml"
 msgstr "xml"
 
@@ -6448,28 +6589,62 @@ msgstr "mapcss"
 msgid "unknown"
 msgstr "desconegut"
 
+msgid "Enter the coordinates for the new node."
+msgstr "Indiqueu les coordenades del nou node."
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
 msgstr ""
-"Entreu les coordenades del nou node.<br/>Podeu separar la longitud de la "
-"latitud amb un espai, una coma o punt i coma.<br/>Utilitzeu nombres positius "
-"o els caràcters N i E per indicar el Nord i l''Est.<br/>Per al Sud i l''Oest "
-"podeu utilitzar nombres negatius o els caràcters S i W .<br/>El valor de les "
-"coordenades pot estar en un dels següents tres "
-"formats:<ul><li><i>graus</i><tt>°</tt></li><li><i>graus</i><tt>°</tt>"
-" <i>minuts</i><tt>'</tt></li><li><i>graus</i><tt>°</tt> "
-"<i>minuts</i><tt>'</tt> <i>segons</i><tt>&quot</tt></li></ul>Els símbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> són opcionals.<br/><br/>Alguns exemples:<ul>{0}</ul>"
+"Podeu separar la longitud i la latitud amb un espai, una coma o un punt i "
+"coma."
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+"Utilitzeu valors numèrics positius o els caràcters N i E per indicar les "
+"direccions cardinals Nord i Est."
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+"Per indicar les direccions cardinals Sud i Oest podeu utilitzar valors "
+"numèrics negatius o els caràcters S i W."
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+"El valor de les coordenades han d''estar en un d''aquests tres formats:"
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr "<i>graus</i><tt>°</tt>"
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr "<i>graus</i><tt>°</tt> <i>minuts</i><tt>'</tt>"
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+"<i>graus</i><tt>°</tt> <i>minuts</i><tt>'</tt> "
+"<i>segons</i><tt>&quot</tt>"
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+"Els símbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, "
+"<tt>"</tt>, <tt>″</tt> són opcionals."
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+"També podeu utilitzar la sintaxi <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+
+msgid "Some examples:"
+msgstr "Alguns exemples:"
 
 msgid "Projected coordinates:"
 msgstr "Coordenades projectades:"
@@ -6516,6 +6691,12 @@ msgstr "Opacitat"
 msgid "Adjust opacity of the layer."
 msgstr "Ajustar l''opacitat de la capa"
 
+msgid "Gamma"
+msgstr "Gamma"
+
+msgid "Adjust gamma value of the layer."
+msgstr "Ajusta el valor de la gamma a la capa"
+
 msgid "Activate"
 msgstr "Activa"
 
@@ -6646,6 +6827,12 @@ msgstr "Configuracions d''estil"
 msgid "Customize the style"
 msgstr "Personalitza l''estil"
 
+msgid "Mini map"
+msgstr "Mini mapa"
+
+msgid "Displays a small map of the current edit location"
+msgstr "Mostra un petit mapa de la localització actual"
+
 msgid "List of notes"
 msgstr "Llista de notes"
 
@@ -6704,15 +6891,21 @@ msgstr "ID d''objecte"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "Indiqueu l''ID de l''objecte a baixar"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+"Els ID dels objectes poden separar-se amb una coma o un espai, per exemple: "
+"{0}"
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+"En mode mixt, especifiqueu objectes d''aquesta manera: {0}<br/>({1} "
+"representa <i>node</i>, {2} per <i>way</i>, i {3} per <i>relation</i>)"
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
-"Els ID dels objectes poden ser separts per una coma o un "
-"espai.<br/>Exemples: {0}<br/>En mode mixt, especifiqueu els objectes "
-"d''aquesta manera: {1}<br/>({2} representa un <i>node</i>, {3} una "
-"<i>via</i>, i {4} una <i>relació</i>)"
+"Els rangs dels IDs d''objectes se separen amb guions, per exemple: {0}"
 
 msgid ""
 "Invalid ID list specified\n"
@@ -6742,6 +6935,9 @@ msgstr "Relacions: {0}/{1}"
 msgid "Relations: {0}"
 msgstr "Relacions: {0}"
 
+msgid "Selection"
+msgstr "Selecció"
+
 msgid "Open a selection list window."
 msgstr "Obre la finestra de la llista de relacions"
 
@@ -6837,6 +7033,12 @@ msgstr "Obre la finestra de validació"
 msgid "Validation results"
 msgstr "Resultat de la validació"
 
+msgid "Lookup"
+msgstr "Cerca"
+
+msgid "Looks up the selected primitives in the error list."
+msgstr "Cerca les primitives selecionades en la llista d''errors."
+
 msgid "Fix"
 msgstr "Arregla"
 
@@ -7499,6 +7701,14 @@ msgid "Launch browser with wiki help for selected object"
 msgstr ""
 "Obre la pàgina wiki d''ajuda de l''objecte seleccionat a un navegador web"
 
+msgid "Go to Taginfo"
+msgstr "Vés a sistema d''infomació d''etiquetes Taginfo"
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+"Obre un navegador amb les estadístiques de Taginfo per als objectes "
+"seleccionats"
+
 msgid "Paste Value"
 msgstr "Enganxa el valor"
 
@@ -7593,15 +7803,14 @@ msgstr "Estableix el nombre de les etiquetes afegides recentment"
 msgid "Remember last used tags after a restart"
 msgstr "Recorda les darreres etiquetes utilitzades en reiniciar."
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
-msgstr ""
+msgid "to apply first suggestion"
+msgstr "aplica la primera suggerència"
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
-msgstr ""
+msgid "to add without closing the dialog"
+msgstr "afegeix sense tancar el diàleg"
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
-msgstr ""
+msgid "to add first suggestion without closing the dialog"
+msgstr "afegeix la primera suggerència sense tancar el diàleg"
 
 msgid "Please enter the number of recently added tags to display"
 msgstr ""
@@ -7799,6 +8008,14 @@ msgstr "Ordenar els membres de la relació"
 msgid "Relation Editor: Sort"
 msgstr "Editor de relacions: Ordenar"
 
+msgid "Sort below"
+msgstr "Ordena a sota"
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+"Ordena els membres seleccionats de la relació i tots els altres membres a "
+"sota"
+
 msgid "Reverse the order of the relation members"
 msgstr "Invertir l''ordre dels membres de la relació"
 
@@ -8399,6 +8616,9 @@ msgstr "Carregant l''historial de la relació {0}"
 msgid "Node {0}"
 msgstr "Node {0}"
 
+msgid "The nodes of this way are in reverse order"
+msgstr "Els nodes d''aquesta via són en ordre invers"
+
 msgid "Zoom to node"
 msgstr "Amplia la zona del node"
 
@@ -8427,13 +8647,13 @@ msgid "Changeset source"
 msgstr "Font del conjunt de canvis"
 
 msgid "Imagery used"
-msgstr ""
+msgstr "Imatgeria utilitzada"
 
 msgid "<b>Source</b>:"
 msgstr "<b>Font</b>:"
 
 msgid "<b>Imagery</b>:"
-msgstr ""
+msgstr "<b>Imatgeria</b>:"
 
 msgid ""
 "<html>Version <strong>{0}</strong> currently edited in layer ''{1}''</html>"
@@ -8447,7 +8667,7 @@ msgstr ""
 "<strong>{1}</strong></html>"
 
 msgid "Changeset"
-msgstr ""
+msgstr "Conjunt de canvis"
 
 msgid "Changeset info"
 msgstr "Informació del conjunt de canvis"
@@ -9390,6 +9610,108 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] "{0} objecte a suprimir:"
 msgstr[1] "{0} objectes a suprimir:"
 
+msgid "Show Tile Info"
+msgstr "Mostra informació de la tessel·la"
+
+msgid "Tile Info"
+msgstr "Informació de la tessel·la"
+
+msgid "Metadata "
+msgstr "Metadades "
+
+msgid "Auto Zoom"
+msgstr "Auto-ampliació"
+
+msgid "Auto load tiles"
+msgstr "Carrega automàticament les tessel·les"
+
+msgid "Load All Tiles"
+msgstr "Carrega totes les tessel·les"
+
+msgid "Load All Error Tiles"
+msgstr "Carrega totes les tessel·les amb error"
+
+msgid "Zoom to native resolution"
+msgstr "Amplia a la resolució nativa"
+
+msgid "Change resolution"
+msgstr "Canviar resolució"
+
+msgid "Failed to create tile source"
+msgstr "Ha fallat la creació d''una font de tessel·les"
+
+msgid "Show Errors"
+msgstr "Mostra els errors"
+
+msgid "Load Tile"
+msgstr "Carrega tessel·la"
+
+msgid "Increase zoom"
+msgstr "Ampliar"
+
+msgid "Decrease zoom"
+msgstr "Fer més petit"
+
+msgid "Snap to tile size"
+msgstr "Discretitza a la mida de la tessel·la"
+
+msgid "Flush Tile Cache"
+msgstr "Buida la memòria cau de tessel·les"
+
+msgid "zoom in to load any tiles"
+msgstr "amplia per carregar cada tessel·la"
+
+msgid "zoom in to load more tiles"
+msgstr "amplia per carregar més tessel·les"
+
+msgid "increase zoom level to see more detail"
+msgstr "incrementa el nivell d''ampliació per veure més detalls"
+
+msgid "No tiles at this zoom level"
+msgstr "No hi ha tessel·les en aquest nivell d''ampliació"
+
+msgid "Current zoom: {0}"
+msgstr "NIvell actual d''ampliació: {0}"
+
+msgid "Display zoom: {0}"
+msgstr "Mostra ampliació: {0}"
+
+msgid "Pixel scale: {0}"
+msgstr "Escala de píxel: {0}"
+
+msgid "Best zoom: {0}"
+msgstr "Millor ampliació: {0}"
+
+msgid "Cache stats: {0}"
+msgstr "Estats memòria cau: {0}"
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr "{0} ({1}), descarregant automàticament amb una ampliació {2}"
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr "{0} ({1}), descarregant amb una ampliació {2}"
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr "Baixades {0}/{1} tessel·les"
+
+msgid "Save WMS file"
+msgstr "Enregistra el fitxer WMS"
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+"La imatgeria aèria podria estar desalineada. Si us plau verifiqueu el seu "
+"decalatge utilitzant un tack GPS!"
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+
+msgid "Details..."
+msgstr "Detalls..."
+
+msgid "Hide this message and never show it again"
+msgstr "Amagar aquest missatge i no tornar-ho a mostrar"
+
 msgid "Customize Color"
 msgstr "Personalitzar el color"
 
@@ -9443,6 +9765,9 @@ msgstr "Desa-ho en format GPX"
 msgid "Imagery fade"
 msgstr "Degradació de la imatgeria"
 
+msgid "Unsupported imagery type: {0}"
+msgstr "Tipus d''imatgeria no suportat: {0}"
+
 msgid "ERROR"
 msgstr "ERROR"
 
@@ -9463,11 +9788,11 @@ msgstr "Se suporten totes les projeccions"
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 "La capa {0} no suporta la nova projecció {1}.\n"
-"{2}\n"
+"Les projeccions suportades són: {2}\n"
 "Canvieu la projecció o suprimiu la capa."
 
 msgid "Save Layer"
@@ -9551,85 +9876,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr "Desa el fitxer OSM"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-"{0} no és un argument TMS vàlid. Si us plau verifiqueu aquesta URL:\n"
-"{1}"
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-"Les capes TMS no suporten la projecció {0}.\n"
-"{1}\n"
-"Canvieu la projecció o suprimiu la capa."
-
-msgid "Auto Zoom"
-msgstr "Auto-ampliació"
-
-msgid "Auto load tiles"
-msgstr "Carrega automàticament les tessel·les"
-
-msgid "Show Errors"
-msgstr "Mostra els errors"
-
-msgid "Load Tile"
-msgstr "Carrega tessel·la"
-
-msgid "Show Tile Info"
-msgstr "Mostra informació de la tessel·la"
-
-msgid "Load All Tiles"
-msgstr "Carrega totes les tessel·les"
-
-msgid "Load All Error Tiles"
-msgstr "Carrega totes les tessel·les amb error"
-
-msgid "Increase zoom"
-msgstr "Ampliar"
-
-msgid "Decrease zoom"
-msgstr "Fer més petit"
-
-msgid "Snap to tile size"
-msgstr "Discretitza a la mida de la tessel·la"
-
-msgid "Flush Tile Cache"
-msgstr "Buida la memòria cau de tessel·les"
-
-msgid "zoom in to load any tiles"
-msgstr "amplia per carregar cada tessel·la"
-
-msgid "zoom in to load more tiles"
-msgstr "amplia per carregar més tessel·les"
-
-msgid "increase zoom level to see more detail"
-msgstr "incrementa el nivell d''ampliació per veure més detalls"
-
-msgid "No tiles at this zoom level"
-msgstr "No hi ha tessel·les en aquest nivell d''ampliació"
-
-msgid "Current zoom: {0}"
-msgstr "NIvell actual d''ampliació: {0}"
-
-msgid "Display zoom: {0}"
-msgstr "Mostra ampliació: {0}"
-
-msgid "Pixel scale: {0}"
-msgstr "Escala de píxel: {0}"
-
-msgid "Best zoom: {0}"
-msgstr "Millor ampliació: {0}"
-
-msgid "Cache stats: {0}"
-msgstr "Estats memòria cau: {0}"
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr "La capa TMS ({0}) està sent baixada amb un nivell d''ampliació {1}"
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr "EPSG: les projeccions 4326 i Mercator són suportades"
 
@@ -9639,59 +9885,33 @@ msgstr "Errors de validació"
 msgid "No validation errors"
 msgstr "Cap error de validació"
 
-msgid "Blank Layer"
-msgstr "Capa buida"
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr "Baixades {0}/{1} tessel·les"
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr "La capa WMS ({0}), està sent baixada amb un nivell d''ampliació {1}"
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr "La capa WMS ({0}), està sent baixada amb un nivell d''ampliació {1}"
-
-msgid "Download visible tiles"
-msgstr "Baixa les tessel·les visibles"
+msgid "Set WMS Bookmark"
+msgstr "Establir un favorit WMS"
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
-"La zona demanada és massa gran. Si us plau feu-la una mica més petita o "
-"canvieu la resolució"
-
-msgid "Change resolution"
-msgstr "Canviar resolució"
-
-msgid "Reload erroneous tiles"
-msgstr "Recarrega les tessel·les amb error"
-
-msgid "Alpha channel"
-msgstr "Canal alfa"
-
-msgid "Automatically change resolution"
-msgstr "Canvia la resolució automàticament"
+"JOSM utilitzarà EPSG:4326 per fer la consulta al servidor però la resposta "
+"pot variar en funció del servidor WMS"
 
-msgid "Set WMS Bookmark"
-msgstr "Establir un favorit WMS"
-
-msgid "Automatic downloading"
-msgstr "Baixada automàtica"
+msgid "Correlate to GPX"
+msgstr "Correlacionar a GPX"
 
-msgid "Zoom to native resolution"
-msgstr "Amplia a la resolució nativa"
+msgid "Invalid timezone"
+msgstr "Zona horària no vàlida"
 
-msgid "Supported projections are: {0}"
-msgstr "Les projeccions suportades són: {0}"
+msgid "Invalid offset"
+msgstr "Desplaçament no vàlid"
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
-msgstr "Versió de fitxer WMS no suportada; trobada {0}, esperada {1}"
+msgid "Correlate images with GPX track"
+msgstr "Correlacionar les imatges amb el track GPX"
 
-msgid "Save WMS file"
-msgstr "Enregistra el fitxer WMS"
+msgid "Try Again"
+msgstr "Provar un altre cop"
 
-msgid "Correlate to GPX"
-msgstr "Correlacionar a GPX"
+msgid "No images could be matched!"
+msgstr "No hi ha cap imatge coincident!"
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
 msgstr "Fitxers GPX (*.gpx, *.gpx.gz"
@@ -9784,24 +10004,9 @@ msgstr "Fus horari: "
 msgid "Offset:"
 msgstr "Desplaçament:"
 
-msgid "Correlate images with GPX track"
-msgstr "Correlacionar les imatges amb el track GPX"
-
 msgid "Correlate"
 msgstr "Correlacionar"
 
-msgid "Invalid timezone"
-msgstr "Zona horària no vàlida"
-
-msgid "Invalid offset"
-msgstr "Desplaçament no vàlid"
-
-msgid "Try Again"
-msgstr "Provar un altre cop"
-
-msgid "No images could be matched!"
-msgstr "No hi ha cap imatge coincident!"
-
 msgid "No gpx selected"
 msgstr "Cap gpx seleccionat"
 
@@ -10019,9 +10224,6 @@ msgstr ""
 "\n"
 "hora GPS: {0}"
 
-msgid "JPEG images (*.jpg)"
-msgstr "Imatges JPEG (.jpg)"
-
 msgid "Show thumbnails"
 msgstr "Mostra les miniatures"
 
@@ -10091,9 +10293,6 @@ msgstr "metres"
 msgid "Maximum area per request:"
 msgstr "Àrea màxima per petició:"
 
-msgid "sq km"
-msgstr "km quadrats"
-
 msgid "Download near:"
 msgstr "Baixar a prop:"
 
@@ -10857,9 +11056,6 @@ msgstr "Tancar la finestra de preferències i descartar els canvis"
 msgid "Save the preferences and close the dialog"
 msgstr "Desar les preferències i tancar la finestra"
 
-msgid "Download plugins"
-msgstr "Baixar connector"
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 "Heu de reiniciar JOSM per tal que algunes configuracions tinguin efecte"
@@ -10867,7 +11063,10 @@ msgstr ""
 msgid "Would you like to restart now?"
 msgstr "Voleu reiniciar ara?"
 
-msgid "Icon paths:"
+msgid "Download plugins"
+msgstr "Baixar connector"
+
+msgid "Icon paths:"
 msgstr "Ruta de les icones:"
 
 msgid "Short Description:"
@@ -11745,6 +11944,21 @@ msgstr "Mostra límits"
 msgid "No bounding box was found for this layer."
 msgstr "No ha estat trobat cap límit per aquesta capa."
 
+msgid "1. Enter getCapabilities URL"
+msgstr "1.  Indiqueu la URK de getCapabilities"
+
+msgid "2. Enter name for this layer"
+msgstr "2.  Indiqueu un nom per a aquesta capa"
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr "{0} memòria cau, mida total total de la memòria cau: {1} bytes"
+
+msgid "Cache name"
+msgstr "Nom de la memòria cau"
+
+msgid "Object Count"
+msgstr "Nombre d''objectes"
+
 msgid "imagery fade"
 msgstr "degrada la imatgeria"
 
@@ -11763,6 +11977,18 @@ msgstr "Fort"
 msgid "Sharpen (requires layer re-add): "
 msgstr "Aguditzar (requereix reafegir una capa): "
 
+msgid "Tile cache directory: "
+msgstr "Directori de la memòria cau de tessel·les: "
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr "Màxima ocupació a disc de la memòria cau (per la imargeria) en MB: "
+
+msgid "Maximum number of objects in memory cache: "
+msgstr "Nombre màxim d''objectes a la memòria cau: "
+
+msgid "Tiles zoom offset:"
+msgstr "Desplazament de l''ampliació de les tessel·les:"
+
 msgid "Imagery Preferences"
 msgstr "Preferències d''imatgeria"
 
@@ -11785,6 +12011,9 @@ msgstr "Proveïdors d''imatgeria"
 msgid "Offset bookmarks"
 msgstr "Favorits de decalatge"
 
+msgid "Cache contents"
+msgstr "Contingut de la memòria cau"
+
 msgid "Imagery Background: Default"
 msgstr "Imatgeria de fons: predeterminat"
 
@@ -11827,9 +12056,6 @@ msgstr "l''URL de la llicència EULA no està disponible: {0}"
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr "l''URL de la llicència EULA no té el format correcte: {0}"
 
-msgid "Projection"
-msgstr "Projecció"
-
 msgid "Layer"
 msgstr "Capa"
 
@@ -11854,17 +12080,11 @@ msgstr "Nivell màxim d''ampliació: "
 msgid "Add to slippymap chooser: "
 msgstr "Afegir al selector de mapes lliscants: "
 
-msgid "Tile cache directory: "
-msgstr "Directori de la memòria cau de tessel·les: "
-
 msgid "Maximum concurrent downloads: "
 msgstr "Nombre màxim de descàrregues concurrents: "
 
 msgid "Maximum concurrent downloads per host: "
-msgstr ""
-
-msgid "Maximum elements in disk cache: "
-msgstr "Nombre màxim d''lements a la memòria cau de disc: "
+msgstr "Nombre màxim de baixades concurrents per host: "
 
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
@@ -11873,20 +12093,11 @@ msgstr ""
 "Aquesta capa no suporta cap de les projeccions del JOSM,\n"
 "per això no la podeu utilitzar. Aquest missatge no toranarà a ser mostrat."
 
-msgid "Downloader:"
-msgstr "Baixador:"
-
 msgid "Simultaneous connections:"
 msgstr "Connexions simultànies:"
 
-msgid "Overlap tiles"
-msgstr "Tessel·les superposades"
-
-msgid "% of east:"
-msgstr "% est:"
-
-msgid "% of north:"
-msgstr "% nord:"
+msgid "Tile size:"
+msgstr "Mida de la tessel·la"
 
 msgid "Auto save enabled"
 msgstr "Activar desament automàtic"
@@ -12579,12 +12790,14 @@ msgid "Check interval (minutes):"
 msgstr "Interval de comprovació (minuts):"
 
 msgid "Max age for closed notes (days):"
-msgstr ""
+msgstr "Temps màxim per les notes tancades (dies):"
 
 msgid ""
 "Specifies the number of days a note needs to be closed to no longer be "
 "downloaded"
 msgstr ""
+"Especifica el nombre de dies que una nota necessita per a ser tancada i "
+"deixar de ser descarregable"
 
 msgid "Failed to retrieve OAuth Access Token from credential manager"
 msgstr ""
@@ -12924,6 +13137,17 @@ msgstr "Aplicar"
 msgid "New relation"
 msgstr "Nova relació"
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+"La predefinició <i>{0}</i> no pot ser aplicada perquè no ho res seleccionat!"
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+"La predefinició <i>{0}</i> no pot ser aplicada perquè la selecció no és "
+"adequada!"
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] "Modificar {0} objecte"
@@ -13042,6 +13266,9 @@ msgstr "Mostrar la finestra de cerca de preconfiguracions"
 msgid "Search presets"
 msgstr "Cercar element predefinit"
 
+msgid "Presets"
+msgstr "Predefinicions"
+
 msgid "Search for objects by preset"
 msgstr "Cerca per objectes predefinits"
 
@@ -13356,6 +13583,9 @@ msgstr "<html>No es poden llegir els arxius.<br>L''error és:<br>{0}</html>"
 msgid "GeoJSON Files"
 msgstr "Fitxers GeoJSON"
 
+msgid "Projected GeoJSON Files"
+msgstr "Fitxers GeoJSON projectats"
+
 msgid "Layer ''{0}'' not supported"
 msgstr "Capa ''{0}'' no suportada"
 
@@ -13950,6 +14180,9 @@ msgstr "Fitxers comprimits del servidor OSM"
 msgid "WMS Files (*.wms)"
 msgstr "Fitxers WMS (*.wms)"
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr "Versió de fitxer WMS no suportada; trobada {0}, esperada {1}"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -14024,25 +14257,27 @@ msgid "Read protocol version"
 msgstr "Llegir la versió del protocol"
 
 msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
-msgstr ""
+msgstr "No es pot iniciar el control remot per IPV4 al port  {0}: {1}"
 
 msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
-msgstr ""
+msgstr "No es pot iniciar el control remot per IPV6 al port  {0}: {1}"
 
 msgid "RemoteControl::Accepting remote connections on {0}:{1}"
-msgstr ""
+msgstr "Control remot::Acceptant connexions remotes sobre {0}:{1}"
 
 msgid "RemoteControl::Server {0}:{1} stopped."
-msgstr ""
+msgstr "Control Remot::Serveidor {0}:{1} aturat."
 
 msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
+"No és possible d''iniciar el control remot https IPV4 al port {0}: {1}"
 
 msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
+"No és possible d''iniciar el control remot https IPV6 al port {0}: {1}"
 
 msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
-msgstr ""
+msgstr "Control Remot::Acceptant una connexió segura remota de {0}:{1}"
 
 msgid "Remote Control has been asked to create a new node."
 msgstr "El control remot ha demanat de crear un nou node"
@@ -14392,6 +14627,21 @@ msgstr[1] ""
 "El connector {0} necessita {1} altres que no han estat trobats. Els "
 "connectors que manquen són:"
 
+msgid "Download and restart"
+msgstr "Descarrega i reinicia"
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+"Feu clic per descarregar el connector que manca i reinicieu el JOSM"
+msgstr[1] ""
+"Feu clic per descarregar els connectors que manquen i reinicieu el JOSM"
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] "Feu clic per continuar sense aquest connector"
+msgstr[1] "Feu clic per continuar sense aquests connectors"
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -15609,6 +15859,9 @@ msgstr "Actualitza"
 msgid "Update directory listing."
 msgstr "Actualitzar la llista de directoris."
 
+msgid "View"
+msgstr "Visualitza"
+
 msgid "Blue:"
 msgstr "Blau:"
 
@@ -15648,8 +15901,8 @@ msgstr "MapQuest Open Aerial"
 msgid "OpenStreetMap GPS Traces"
 msgstr "OpenStreetMap Tracks GPS"
 
-msgid "OpenStreetMap (Mapnik)"
-msgstr "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
+msgstr "OpenStreetMap (capa estàndard)"
 
 msgid "skobbler"
 msgstr "skobbler"
@@ -15660,9 +15913,6 @@ msgstr "OpenStreetMap (Mapnik Blanc i negre)"
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr "OpenStreetMap (Mapnik, sense etiquetes)"
 
-msgid "skobbler heatmap"
-msgstr "skobbler mapa de calor"
-
 msgid "OpenCycleMap"
 msgstr "OpenCycleMap"
 
@@ -15771,6 +16021,9 @@ msgstr "Viena: Ortofoto (imatgeria aèria)"
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr "VoGIS: Echtfarbenbild 2012 (12cm)"
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr "VoGIS: Flächenwidmungsplan"
 
@@ -15786,12 +16039,18 @@ msgstr ""
 "AGIV(laanderen) imatgeria aeria (cobreix la regió de Brusel·les prou bé) "
 "(2013)"
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr "SPW (Valònia) PICC imatgeria digital"
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr "SPW(allonie) 2012 imatgeria aèria"
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr "SPW(allonie) 2009 imatgeria aèria"
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr "cadastre: només per noms i nombres de cases, geometria dolenta"
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr "IBGE Mapa de Sectors Urbans"
 
@@ -15828,12 +16087,18 @@ msgstr "Tèquia RUIAN parcel·les"
 msgid "Czech pLPIS"
 msgstr "Tèquia pLPIS"
 
-msgid "Fugro (Denmark)"
-msgstr "Fugro (Dinamarca)"
-
 msgid "Geodatastyrelsen (Denmark)"
 msgstr "Geodatastyrelsen (Dinamarca)"
 
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr "Geodatastyrelsen DTK Kort25"
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr "Geodatastyrelsen Skyggekort 1.6m"
+
+msgid "Geodatastyrelsen Skærmkort"
+msgstr "Geodatastyrelsen Skærmkort"
+
 msgid "Stevns (Denmark)"
 msgstr "Stevns (Dinamarca)"
 
@@ -15858,6 +16123,9 @@ msgstr "Estònia Silvicultura (Maaamet)"
 msgid "BANO"
 msgstr "BANO"
 
+msgid "BD Carthage"
+msgstr "BD Carthage"
+
 msgid "Bordeaux - 2012"
 msgstr "Bordeus - 2012"
 
@@ -15882,8 +16150,8 @@ msgstr "Géobretagne - Morbihan 2010"
 msgid "Géolittoral - Orthophotos 2000"
 msgstr "Géolittoral - Ortofotos 2000"
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
-msgstr "Géolittoral V2 - Ortofotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
+msgstr "Géolittoral V2 - Orthofotos 2011-2014"
 
 msgid "Géolittoral - Sentiers"
 msgstr "Géolittoral - Sentiers"
@@ -15897,6 +16165,9 @@ msgstr "Loire-Atlantique - Ortofotos 2012 - 20 cm"
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr "SIG L-R - Llenguadoc-Rosselló 2012 - 20 cm"
 
+msgid "Route 500™©®"
+msgstr "Route 500™©®"
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr "Tolosa de Llenguadoc - Ortofotoplànol 2013"
 
@@ -15909,12 +16180,6 @@ msgstr "Tolosa de Llenguadoc - Ortofotoplànol 2007"
 msgid "Tours - Orthophotos 2013"
 msgstr "Tours - Ortofotos 2013"
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr "Tours - Ortofotos 2008-2010"
-
-msgid "Tours - Orthophotos 2008"
-msgstr "Tours - Ortofotos 2008"
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -15937,6 +16202,9 @@ msgstr "Hamburg (20 cm)"
 msgid "Hamburg (DK5)"
 msgstr "Hamburg (DK5)"
 
+msgid "Bavaria (80 cm)"
+msgstr "Baviera (80 cm)"
+
 msgid "Bavaria (2 m)"
 msgstr "Baviera(2 m)"
 
@@ -15972,11 +16240,8 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr "Maps4BW (LGL-BW, www.lgl-bw.de)"
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
-msgstr "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
+msgstr "NRW-Atles: ALKIS"
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
 msgstr "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -16005,6 +16270,12 @@ msgstr "Ireland British War Office One-Inch 1941-43 GSGS 4136"
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr "Ireland Bartholomew Quarter-Inch 1940"
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr "Parròquies civils i baronies d''Irlanda - Memorial Atlas"
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr "Memorial Atlas of Ireland (1901) L.J. Richards"
+
 msgid "OSMIE Townlands"
 msgstr "OSMIE Townlands"
 
@@ -16020,60 +16291,6 @@ msgstr "OSMIE Baronies"
 msgid "OSMIE Political"
 msgstr "OSMIE Política"
 
-msgid "Ireland EEA GMES Urban Atlas"
-msgstr "Irlanda EEA GMES Atles urbà"
-
-msgid "Ireland EEA CORINE 2006"
-msgstr "Irlanda EEA CORINE 2006"
-
-msgid "Antrim Civil Parishes and Baronies"
-msgstr "Parròquies civils i baronies d''Antrim"
-
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
-msgstr "Memorial Atlas of Ireland (1901) L.J. Richards"
-
-msgid "Carlow Civil Parishes and Baronies"
-msgstr "Parròquies civils i baronies de  Carlow"
-
-msgid "Clare Civil Parishes and Baronies"
-msgstr "Parròquies civils i baronies de Carlow"
-
-msgid "Dublin Civil Parishes and Baronies"
-msgstr "Parròquies civils i baronies de Dublin"
-
-msgid "Fermanagh Civil Parishes and Baronies"
-msgstr "Parròquies civils i baronies de Fermanagh"
-
-msgid "Galway Civil Parishes and Baronies"
-msgstr "Parròquies civils i baronies de Galway"
-
-msgid "Kildare Civil Parishes and Baronies"
-msgstr "Parròquies civils i baronies de Kildare"
-
-msgid "Leitrim Civil Parishes and Baronies"
-msgstr "Parròquies civils i baronies de Leitrim"
-
-msgid "Longford Civil Parishes and Baronies"
-msgstr "Parròquies civils i baronies de Longford"
-
-msgid "Offaly Civil Parishes and Baronies"
-msgstr "Parròquies civils i baronies de Offaly"
-
-msgid "Sligo Civil Parishes and Baronies"
-msgstr "Parròquies civils i baronies de Sligo"
-
-msgid "Tyrone Civil Parishes and Baronies"
-msgstr "Parròquies civils i baronies de Tyrone"
-
-msgid "Westmeath Civil Parishes and Baronies"
-msgstr "Parròquies civils i baronies de Westmeath"
-
-msgid "Wexford Civil Parishes and Baronies"
-msgstr "Parròquies civils i baronies de Wexford"
-
-msgid "Wicklow Civil Parishes and Baronies"
-msgstr "Parròquies civils i baronies de Wicklow"
-
 msgid "Lodi - Italy"
 msgstr "Lodi - Itàlia"
 
@@ -16107,6 +16324,9 @@ msgstr "50cm ortofoto - Letònia"
 msgid "20cm ortho - Latvia - Coastline"
 msgstr "20cm ortofoto - Letònia - Línia costanera"
 
+msgid "1.cikla ortofotokarte - Latvia"
+msgstr "1.cikla ortofotokarte - Letònia"
+
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Lituània)"
 
@@ -16122,6 +16342,9 @@ msgstr "Luxemburg Inspire Ferrocarrils"
 msgid "Luxembourg Inspire Roads"
 msgstr "Luxemburg Inspire Carreteres"
 
+msgid "Luxembourg Inspire Water"
+msgstr "Luxembourg Inspire Water"
+
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Delta del Níger Oct 2012 Landsat"
 
@@ -16137,9 +16360,15 @@ msgstr "Pangasinán/Bulacan (Filipines alta resolució)"
 msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr "Geoportal 2: Ortofotomapa (imatgeria aèria)"
 
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgstr "Geoportal 2: Ortofotomapa (imatgeria aèria) WMTS"
+
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr "Geoportal 2: PRNG (noms)"
 
+msgid "Geoportal 2: ISOK hillshade"
+msgstr "Geoportal 2: ISOK hillshade"
+
 msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr "Będzin: Ortofotomapa 2013 (imatgeria aèria)"
 
@@ -16149,15 +16378,27 @@ msgstr "Będzin: Budynki (edificis)"
 msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr "Bytom: Ortofotomapa 2012 (imatgeria aèria)"
 
+msgid "Bytom: Fotoplan 2014 (aerial image)"
+msgstr "Bytom: Fotoplan 2014 (imatgeria aèria)"
+
 msgid "Bytom: Budynki (buildings)"
 msgstr "Bytom: Budynki (edificis)"
 
 msgid "Chorzów: Budynki (buildings)"
 msgstr "Chorzów: Budynki (edificis)"
 
+msgid "Częstochowa: Budynki (buildings)"
+msgstr "Częstochowa: Budynki (edificis)"
+
 msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr "Częstochowa: Ortofotomapa 2011 (imatgeria aèria)"
 
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgstr "Częstochowa: Ortofotomapa 2013 (imatgeria aèria)"
+
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgstr "Częstochowa: Ortofotomapa 2014 (imatgeria aèria)"
+
 msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr "Gliwice: Ortofotomapa 2013 (imatgeria aèria)"
 
@@ -16167,9 +16408,45 @@ msgstr "Gliwice: Budynki (edificis)"
 msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr "Katowice: Ortofotomapa (imatgeria aèria)"
 
+msgid "Katowice: Budynki (buildings)"
+msgstr "Katowice: Budynki (edificis)"
+
+msgid "Łódź: Budynki (buildings)"
+msgstr "Łódź: Budynki (edificacions)"
+
 msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr "Łódź: Ortofotomapa (imatgeria aèria)"
 
+msgid "Powiat dębicki: Budynki (buildings)"
+msgstr "Powiat dębicki: Budynki (edificacions)"
+
+msgid "Powiat lubaczowski: Budynki (buildings)"
+msgstr "Powiat lubaczowski: Budynki (edificacions)"
+
+msgid "Powiat łańcucki: Budynki (buildings)"
+msgstr "Powiat łańcucki: Budynki (edificacions)"
+
+msgid "Powiat poznański: Budynki (buildings)"
+msgstr "Powiat poznański: Budynki (edificacions)"
+
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgstr "Powiat poznański: Ortofotomapa (imatgeria aèria)"
+
+msgid "Powiat rzeszowski: Budynki (buildings)"
+msgstr "Powiat rzeszowski: Budynki (edificacions)"
+
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgstr "Powiat rzeszowski: Ortofotomapa (imatgeria aèria)"
+
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr "Powiat stalowowolski: Budynki (edificacions)"
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr "Przemyśl: Budynki (edificacions)"
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgstr "Przemyśl: Ortofotomapa (imatgeria aèria)"
+
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
 msgstr "Ruda Śląska: Ortofotomapa (imatgeria aèria)"
 
@@ -16182,9 +16459,18 @@ msgstr "Rzeszów: Budynki (edificis)"
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr "Siemianowice Śląskie: Ortofotomapa (imatgeria aèria)"
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr "Siemianowice Śląskie: Budynki (edificis)"
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr "Świętochłowice: Ortofotomapa 2008 (imatgeria aèria)"
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr "Świętochłowice: Ortofotomapa 2009 (imatgeria aèria)"
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr "Świętochłowice: Ortofotomapa 2012 (imatgeria aèria)"
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr "Zabrze: Ortofotomapa 2011 (imatgeria aèria)"
 
@@ -16314,6 +16600,21 @@ msgstr "Bonvillars Orthofoto 2013"
 msgid "Fiez Orthophoto 2013"
 msgstr "Fiez Orthofoto 2013"
 
+msgid "Taiwan e-Map Open Data"
+msgstr "Taiwan e-Map Open Data"
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr "Taiwan e-Map Open Data (amb corbes de nivell)"
+
+msgid "Taiwan Village Boundaries"
+msgstr "Taiwan (límits de poblacions)"
+
+msgid "Taiwan Land-Section Data"
+msgstr "Taiwan Land-Section Data"
+
+msgid "NLSC Open Data WMTS"
+msgstr "NLSC Open Data WMTS"
+
 msgid "MSR Maps Topo"
 msgstr "MSR Mapes Topogràfics"
 
@@ -16329,8 +16630,8 @@ msgstr "USGS Imatgeria a escala gran"
 msgid "TIGER 2012 Roads Overlay"
 msgstr "Carreteres TIGER 2012"
 
-msgid "New & Misaligned TIGER Roads (2014)"
-msgstr "Noves carreteres TIGER no alineades (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
+msgstr "Noves carreteres de TIGER desalineades (2015)"
 
 msgid "MassGIS L3 Parcels"
 msgstr "MassGIS L3 Parcels"
@@ -16675,6 +16976,13 @@ msgstr ""
 "ordres. Utilitzeu l''enllaç per veure les ordres estàndard (arc, cercle, "
 "etc.)"
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+"Aporta una llibreria gràfica comuna. No està destinat a ser instal·lat "
+"directament pels usuaris sinó com a dependència per a d''altres connectors."
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr "(Avís: Experimental!) Eina per combinar (fusionar) dades."
 
@@ -16776,13 +17084,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr "Mode de mapa d''ajustament de la imatgeria en estil WMSPlugin"
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-"Aquest connector experimental permet al JOSM emmagatzemar les tessel·les en "
-"fitxers de bases de dades, no en immensos directoris"
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -16857,9 +17158,10 @@ msgstr ""
 "connector podreu crear, tancar, invalidar, reobrir i comentar els errors "
 "reportats que es mostren."
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
-"Permet a l''usuari de treballar amb imatges que es troben a mapillary.com"
+"Permet l''usuari de treballar amb les fotografies emmagatzemades a "
+"mapillary.com"
 
 msgid ""
 "Provide a measurement dialog and a layer to measure length and angle of "
@@ -16876,9 +17178,6 @@ msgstr "Fusiona les parts de les vies que se superposen"
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr "Afegeix una prohibició de gir a l''esquerra a conjunts de 4 o 5 vies"
 
-msgid "Simplifies download from different read-only APIs."
-msgstr "Simplifica la baixada de diferents APIs de només lectura"
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 "Permet l''assignació d''etiquetes a tots els objectes d''una àrea "
@@ -16929,6 +17228,9 @@ msgid ""
 "Recommends categories/tags on newly created OSM entities by analysing "
 "spatial entities into training features and using SVM classification"
 msgstr ""
+"Recomana categories/etiquetes per a entitats OSM de nova creació mitjançant "
+"l''anàlisi de les entitats espacials en funcions d''aprenentatge i l''ús de "
+"la classificació SVM"
 
 msgid "Import/export OSM data in PBF format"
 msgstr "Importa/exporta dades OSM en format PBF"
@@ -16979,6 +17281,18 @@ msgstr ""
 "Aquest connector simplifica el procés d''afegir i modificar rutes de "
 "transport públic al mapa."
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+"Mostra les parades de les línies de transport públic seleccionades en forma "
+"gràfica"
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+"El connector RasterFiltersPlugin permet la selecció i aplicació d''alguns "
+"filtres d''imatge sobre algunes capes."
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr "Tauler de creació i modificació de relacions i multipolígons"
 
@@ -17026,6 +17340,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr "Modifica funcions per OpenSeaMap"
 
+msgid "Allows to draw splines"
+msgstr "Permet dibuixar splines"
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -17128,9 +17445,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr "Habilita la cerca de fites importades d''un fitxer gpx"
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr "Selecciona una seqüència de vies connectades sense bifurcacions"
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr "Simplifica l''enllaç d''objectes OSM als articles de la Viquipèdia."
 
@@ -17540,6 +17854,14 @@ msgid "basketball"
 msgstr "bàsquet"
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr "voleibol de platja"
+
+msgctxt "sport"
+msgid "billiards"
+msgstr "billars"
+
+msgctxt "sport"
 msgid "boules"
 msgstr "Esport de boles"
 
@@ -17564,10 +17886,6 @@ msgid "cricket"
 msgstr "criquet"
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr "Xarxa de criquet"
-
-msgctxt "sport"
 msgid "croquet"
 msgstr "croquet"
 
@@ -17584,6 +17902,10 @@ msgid "equestrian"
 msgstr "equitació"
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr "hoquei sobre herba"
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr "jocs gaèlics"
 
@@ -17600,14 +17922,26 @@ msgid "handball"
 msgstr "handbol"
 
 msgctxt "sport"
-msgid "hockey"
-msgstr "hoquei"
-
-msgctxt "sport"
 msgid "horse_racing"
 msgstr "cursa de cavalls"
 
 msgctxt "sport"
+msgid "ice_hockey"
+msgstr "hoquei sobre gel"
+
+msgctxt "sport"
+msgid "karting"
+msgstr "kàrting"
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr "camp de vol d''aeromodelisme"
+
+msgctxt "sport"
+msgid "motocross"
+msgstr "motocròs"
+
+msgctxt "sport"
 msgid "motor"
 msgstr "motor"
 
@@ -17620,6 +17954,10 @@ msgid "racquet"
 msgstr "raqueta"
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr "cotxes teledirigits"
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr "rugbi a 13"
 
@@ -17632,6 +17970,10 @@ msgid "running"
 msgstr "s’està executant"
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr "cursos de seguretat"
+
+msgctxt "sport"
 msgid "shooting"
 msgstr "tir"
 
@@ -17659,6 +18001,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr "tennis"
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr "voleibol"
+
+msgctxt "sport"
+msgid "9pin"
+msgstr "9 bitlles"
+
+msgctxt "sport"
+msgid "10pin"
+msgstr "10 bitlles"
+
 msgid "Fee"
 msgstr "Quota"
 
@@ -18054,6 +18408,9 @@ msgstr "Enllaç de via terciària"
 msgid "Unclassified"
 msgstr "Sense referència"
 
+msgid "Street has no name"
+msgstr "El carrer no té nom"
+
 msgid "Passing Places"
 msgstr "Llocs de pas"
 
@@ -18133,6 +18490,9 @@ msgstr ""
 "a ser utilitzada pels camions o d''altres vehicles per aturar-se en cas de "
 "fallada dels frens."
 
+msgid "Raceway"
+msgstr "Circuit de carreres"
+
 msgid "Road (Unknown Type)"
 msgstr "Carretera (tipus no conegut)"
 
@@ -18686,6 +19046,12 @@ msgstr "Radar"
 msgid "Traffic Mirror"
 msgstr "Mirall (trànsit)"
 
+msgid "Highway milestone"
+msgstr "Fita de la via"
+
+msgid "Distance (kilometers)"
+msgstr "Distància (quilòmetres)"
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr "Cruïlla amb nom"
@@ -18816,7 +19182,7 @@ msgid "Lift Gate"
 msgstr "Barrera"
 
 msgid "Swing Gate"
-msgstr "Pont giratori"
+msgstr "Barrera giratòria"
 
 msgctxt "swing_gate"
 msgid "single"
@@ -18878,6 +19244,11 @@ msgstr "Columnata"
 msgid "Avalanche Protector"
 msgstr "Túnel de protecció contra allaus"
 
+msgctxt "main group"
+msgid "Water"
+msgstr "Aigua"
+
+msgctxt "sub group"
 msgid "Water"
 msgstr "Aigua"
 
@@ -18888,7 +19259,7 @@ msgid "Ditch"
 msgstr "Sèquia"
 
 msgid "Stream"
-msgstr "Rierol"
+msgstr "Rierol / Torrent / Riera"
 
 msgid "River"
 msgstr "Riu"
@@ -18931,6 +19302,10 @@ msgstr "Embassament"
 msgid "Covered Reservoir"
 msgstr "Dipòsit cobert"
 
+msgctxt "natural"
+msgid "Water"
+msgstr "Aigua"
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr "Un cos d''aigua estancada, com un llac o una llacuna"
 
@@ -19079,6 +19454,120 @@ msgstr "Estació de buidat"
 msgid "public"
 msgstr "públic"
 
+msgid "Marine Fuel"
+msgstr "Combustible per embarcacions"
+
+msgid "Agip"
+msgstr "Agip"
+
+msgid "Aral"
+msgstr "Aral"
+
+msgid "Avia"
+msgstr "Avia"
+
+msgid "BP"
+msgstr "BP"
+
+msgid "Chevron"
+msgstr "Chevron"
+
+msgid "Citgo"
+msgstr "Citgo"
+
+msgid "Eni"
+msgstr "Eni"
+
+msgid "Esso"
+msgstr "Esso"
+
+msgid "Exxon"
+msgstr "Exxon"
+
+msgid "Gulf"
+msgstr "Gulf"
+
+msgid "Mobil"
+msgstr "Mobil"
+
+msgid "OMV"
+msgstr "OMV"
+
+msgid "Petro-Canada"
+msgstr "Petro-Canada"
+
+msgid "Pioneer"
+msgstr "Pioneer"
+
+msgid "Q8"
+msgstr "Q8"
+
+msgid "Repsol"
+msgstr "Repsol"
+
+msgid "Shell"
+msgstr "Shell"
+
+msgid "Socar"
+msgstr "Socar"
+
+msgid "Statoil"
+msgstr "Statoil"
+
+msgid "Sunoco"
+msgstr "Sunoco"
+
+msgid "Tamoil"
+msgstr "Tamoil"
+
+msgid "Texaco"
+msgstr "Texaco"
+
+msgid "Total"
+msgstr "Total"
+
+msgid "Independent"
+msgstr "Independent"
+
+msgid "Fuel types:"
+msgstr "Tipus de combustible:"
+
+msgid "Diesel"
+msgstr "Diesel"
+
+msgid "Bio Diesel"
+msgstr "Bio Diesel"
+
+msgid "Octane 80"
+msgstr "80 octans"
+
+msgid "Octane 91"
+msgstr "91 octans"
+
+msgid "Octane 92"
+msgstr "92 octans"
+
+msgid "Octane 95"
+msgstr "Súper 95 octans"
+
+msgid "Octane 98"
+msgstr "Súper 98 octans"
+
+msgid "Octane 100"
+msgstr "100 octans"
+
+msgid "E10 (10% Ethanol mix)"
+msgstr "E10 (10% de mescla d''etanol)"
+
+msgid "E85 (85% Ethanol mix)"
+msgstr "I85 (85% barreja d''etanol)"
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr "GLP (gas liquat de petroli)"
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr "GNC (Gas Natural Comprimit)"
+
 msgid "Pier"
 msgstr "Embarcador"
 
@@ -19195,6 +19684,9 @@ msgstr "Topall"
 msgid "Railway Switch"
 msgstr "Bifurcació de ferrocarril"
 
+msgid "Railway milestone"
+msgstr "Fita del ferrocarril"
+
 msgid "Aerialway"
 msgstr "Via aèria"
 
@@ -19320,78 +19812,6 @@ msgstr "Entrada d''un aparcament"
 msgid "Fuel"
 msgstr "Benzinera"
 
-msgid "Agip"
-msgstr "Agip"
-
-msgid "Aral"
-msgstr "Aral"
-
-msgid "Avia"
-msgstr "Avia"
-
-msgid "BP"
-msgstr "BP"
-
-msgid "Chevron"
-msgstr "Chevron"
-
-msgid "Citgo"
-msgstr "Citgo"
-
-msgid "Eni"
-msgstr "Eni"
-
-msgid "Esso"
-msgstr "Esso"
-
-msgid "Exxon"
-msgstr "Exxon"
-
-msgid "Gulf"
-msgstr "Gulf"
-
-msgid "Mobil"
-msgstr "Mobil"
-
-msgid "OMV"
-msgstr "OMV"
-
-msgid "Petro-Canada"
-msgstr "Petro-Canada"
-
-msgid "Pioneer"
-msgstr "Pioneer"
-
-msgid "Q8"
-msgstr "Q8"
-
-msgid "Repsol"
-msgstr "Repsol"
-
-msgid "Shell"
-msgstr "Shell"
-
-msgid "Socar"
-msgstr "Socar"
-
-msgid "Statoil"
-msgstr "Statoil"
-
-msgid "Sunoco"
-msgstr "Sunoco"
-
-msgid "Tamoil"
-msgstr "Tamoil"
-
-msgid "Texaco"
-msgstr "Texaco"
-
-msgid "Total"
-msgstr "Total"
-
-msgid "Independent"
-msgstr "Independent"
-
 msgid "With shop"
 msgstr "Amb botiga"
 
@@ -19401,51 +19821,12 @@ msgstr "de conveniència"
 msgid "kiosk"
 msgstr "quiosc"
 
-msgid "Fuel types:"
-msgstr "Tipus de combustible:"
-
-msgid "Diesel"
-msgstr "Diesel"
-
-msgid "Bio Diesel"
-msgstr "Bio Diesel"
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr "Gasoli (GTL, ultimate, etc)"
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr "Dièsel per als vehicles pesants - Gasoil B"
 
-msgid "Octane 80"
-msgstr "80 octans"
-
-msgid "Octane 91"
-msgstr "91 octans"
-
-msgid "Octane 92"
-msgstr "92 octans"
-
-msgid "Octane 95"
-msgstr "Súper 95 octans"
-
-msgid "Octane 98"
-msgstr "Súper 98 octans"
-
-msgid "Octane 100"
-msgstr "100 octans"
-
-msgid "E10 (10% Ethanol mix)"
-msgstr "E10 (10% de mescla d''etanol)"
-
-msgid "E85 (85% Ethanol mix)"
-msgstr "I85 (85% barreja d''etanol)"
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr "GLP (gas liquat de petroli)"
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr "GNC (Gas Natural Comprimit)"
-
 msgid "1/25 mix (mofa/moped)"
 msgstr "barreja 1/25 (ciclomotor)"
 
@@ -19666,9 +20047,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr "#CD853F"
 
-msgid "route segment"
-msgstr "segment de ruta"
-
 msgid "stop position"
 msgstr "situació de la parada"
 
@@ -19687,6 +20065,9 @@ msgstr "andana (només sortida)"
 msgid "platform (entry only)"
 msgstr "andana (només entrada)"
 
+msgid "route segment"
+msgstr "segment de ruta"
+
 msgid "Route Master"
 msgstr "Ruta principal"
 
@@ -19889,6 +20270,12 @@ msgstr "Hotel"
 msgid "Stars"
 msgstr "Estrelles"
 
+msgid "Rooms"
+msgstr "Habitacions"
+
+msgid "Beds"
+msgstr "llits"
+
 msgid "Motel"
 msgstr "Motel"
 
@@ -19979,6 +20366,9 @@ msgstr "sandwich"
 msgid "sushi"
 msgstr "sushi"
 
+msgid "steak_house"
+msgstr "graella"
+
 msgid "Microbrewery"
 msgstr "Microcerveseria"
 
@@ -20195,6 +20585,9 @@ msgstr "Sauna"
 msgid "Horse Riding"
 msgstr "Equitació"
 
+msgid "Casino"
+msgstr "Casino"
+
 msgid "Brothel"
 msgstr "Bordell"
 
@@ -20682,8 +21075,8 @@ msgstr "Mostra la pressió atmosfèrica"
 msgid "Shows humidity"
 msgstr "Mostra la humitat"
 
-msgid "Recycling"
-msgstr "Recollida selectiva / Punt Net"
+msgid "Recycling Container"
+msgstr "Contenidor de reciclatge"
 
 msgid "Batteries"
 msgstr "Piles"
@@ -20691,20 +21084,47 @@ msgstr "Piles"
 msgid "Cans"
 msgstr "Llaunes"
 
+msgid "Cardboard"
+msgstr "Cartró"
+
+msgid "Electrical Appliances"
+msgstr "Dispositius elèctrics"
+
 msgid "Glass"
 msgstr "Vidre"
 
+msgid "Glass Bottles"
+msgstr "Ampolles de vidre"
+
+msgid "Green Waste"
+msgstr "Matèria orgànica"
+
 msgid "Paper"
 msgstr "Paper"
 
+msgid "Plastic"
+msgstr "Plàstic"
+
+msgid "Plastic Bottles"
+msgstr "Ampolles de plàstic"
+
+msgid "Plastic Packaging"
+msgstr "Envasos de plàstic"
+
 msgid "Scrap Metal"
 msgstr "Ferralla"
 
-msgid "container"
-msgstr "contenidor"
+msgid "Shoes"
+msgstr "Sabateria"
+
+msgid "Small Appliances"
+msgstr "Petits electrodomèstics"
+
+msgid "Waste"
+msgstr "Deixalles"
 
-msgid "centre"
-msgstr "centre"
+msgid "Recycling Centre"
+msgstr "Centre de reciclatge"
 
 msgid "Waste Basket/Trash Can"
 msgstr "Paperera"
@@ -20719,10 +21139,10 @@ msgid "Suction pumpout"
 msgstr "Buidat per succió"
 
 msgid "Gravity drain for hose"
-msgstr ""
+msgstr "Drenatge per gravetat a través de mànega"
 
 msgid "Casette or Elsan Disposal"
-msgstr ""
+msgstr "Punt d''eliminació de residus de vàter de caravana (cassetes, elsan)"
 
 msgid "Operation times"
 msgstr "Horari de funcionament"
@@ -20907,6 +21327,9 @@ msgstr "Tir amb arc"
 msgid "Track and Field Athletics"
 msgstr "Atletisme"
 
+msgid "Running"
+msgstr "Carrera a peu"
+
 msgid "Climbing"
 msgstr "Escalada"
 
@@ -21082,12 +21505,18 @@ msgstr "Beisbol"
 msgid "Basketball"
 msgstr "Bàsquet"
 
+msgid "Handball"
+msgstr "Handbol"
+
 msgid "Volleyball"
 msgstr "Voleibol"
 
 msgid "Beach Volleyball"
 msgstr "Voleibol platja"
 
+msgid "Billiards"
+msgstr "Billars"
+
 msgid "Golf"
 msgstr "Golf"
 
@@ -21103,14 +21532,14 @@ msgstr "Lawn Bowling (Joc de boles anglès)"
 msgid "Cricket"
 msgstr "Criquet"
 
-msgid "Cricket Nets"
-msgstr "Criquet amb xarxa"
-
 msgid "Croquet"
 msgstr "Croquet"
 
-msgid "Hockey"
-msgstr "Hoquei"
+msgid "Field Hockey"
+msgstr "Hoquei sobre herba"
+
+msgid "Ice Hockey"
+msgstr "Hoquei sobre gel"
 
 msgid "Pelota"
 msgstr "Pilota Basca/Valenciana"
@@ -21133,9 +21562,6 @@ msgstr "Karts"
 msgid "Motocross"
 msgstr "Motocròs"
 
-msgid "Safety Training"
-msgstr "Entrenament en Seguretat"
-
 msgid "Model Aerodrome"
 msgstr "Aeromodelisme"
 
@@ -21151,11 +21577,8 @@ msgctxt "aerialway"
 msgid "track"
 msgstr "pista"
 
-msgid "RC Car"
-msgstr "Pista per a cotxes teledirigits"
-
-msgid "Raceway"
-msgstr "Circuit de carreres"
+msgid "RC Car"
+msgstr "Pista per a cotxes teledirigits"
 
 msgid "Man Made"
 msgstr "Construccions"
@@ -21226,7 +21649,15 @@ msgstr "cobert"
 
 msgctxt "building"
 msgid "storage_tank"
-msgstr ""
+msgstr "dipòsit"
+
+msgctxt "building"
+msgid "supermarket"
+msgstr "supermercat"
+
+msgctxt "building"
+msgid "gasometer"
+msgstr "gasòmetre"
 
 msgctxt "building"
 msgid "cowshed"
@@ -21342,39 +21773,39 @@ msgid "Gasometer"
 msgstr "Gasòmetre"
 
 msgid "Storage Tank"
-msgstr ""
+msgstr "Dipòsit"
 
 msgctxt "content"
 msgid "fuel"
-msgstr ""
+msgstr "combustible"
 
 msgctxt "content"
 msgid "manure"
-msgstr ""
+msgstr "fems"
 
 msgctxt "content"
 msgid "oil"
-msgstr ""
+msgstr "oli"
 
 msgctxt "content"
 msgid "sewage"
-msgstr ""
+msgstr "aigües residuals"
 
 msgctxt "content"
 msgid "silage"
-msgstr ""
+msgstr "ensitjat"
 
 msgctxt "content"
 msgid "slurry"
-msgstr ""
+msgstr "llots"
 
 msgctxt "content"
 msgid "water"
-msgstr ""
+msgstr "aigua"
 
 msgctxt "content"
 msgid "wine"
-msgstr ""
+msgstr "vi"
 
 msgid "Bunker Silo"
 msgstr "Sitja oberta"
@@ -21956,7 +22387,7 @@ msgstr "presa"
 
 msgctxt "generator method"
 msgid "stream"
-msgstr "torrent"
+msgstr "rierol"
 
 msgid "horizontal_axis"
 msgstr "d''eix horitzontal"
@@ -22551,9 +22982,6 @@ msgstr "Vi"
 msgid "Boutique"
 msgstr "Boutique"
 
-msgid "Shoes"
-msgstr "Sabateria"
-
 msgid "Outdoor"
 msgstr "Paradetes"
 
@@ -23580,12 +24008,12 @@ msgstr "potencial"
 msgid "Contact (Common Schema)"
 msgstr "Contacte (esquema comú)"
 
-msgid "Fax Number"
-msgstr "Número de fax"
-
 msgid "Email Address"
 msgstr "Adreça electrònica"
 
+msgid "Fax Number"
+msgstr "Número de fax"
+
 msgid "Image"
 msgstr "Imatge"
 
@@ -24015,6 +24443,9 @@ msgstr "objecte incomplet: només {0} i {1}"
 msgid "{0} together with addr:*"
 msgstr "{0} juntament amb addr:*"
 
+msgid "{0} together with {1} and conflicting values"
+msgstr "{0} amb {1} i valors conflictius"
+
 msgid "{0} on suspicious object"
 msgstr "{0} a un objecte sospitòs"
 
@@ -24039,6 +24470,18 @@ msgstr "nom alternatiu sense {0}"
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr "ús incomplet de {0} a una via sense {1}"
 
+msgid "Same value of {0} and {1}"
+msgstr "El mateix valor de {0} i {1}"
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr "El mateix valor de {0}, {1} i {2}"
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr "{0} i {1} junt amb {2} i valors conflictius"
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr "Combinació sospitosa d''etiquetes: {0} i {1}"
+
 msgid "{0}={1} is deprecated"
 msgstr "{0}={1} és obsolet"
 
@@ -24114,6 +24557,9 @@ msgstr "clau amb caràcter estrany"
 msgid "uncommon short key"
 msgstr "clau massa curta"
 
+msgid "{0} is inaccurate"
+msgstr "{0} no és prou precís"
+
 msgid "{0} on a node. Should be used on a way."
 msgstr "{0} a un node. Ha de ser utilitzat a una via."
 
@@ -24208,9 +24654,22 @@ msgstr ""
 "{0}: metres és el valor predefinit; el punt és el separador; en cas "
 "d''unitats, poseu un espai i després la unitat"
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+"{0}: tona és el predefinit; el separador és el punt; en cas d''unitats poseu "
+"un espai i després les unitats"
+
 msgid "unusual {0} format"
 msgstr "format inusual {0}"
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+"{0}: quilòmetres és el predefinit; el separador és el punt; en cas "
+"d''unitats poseu un espai i després les unitats"
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr "el voltatge ha d''estar en volts sense unitat/delimitador/espais"
 
@@ -24597,6 +25056,9 @@ msgstr "Afegeix punts fixos en clicar"
 msgid "Add fixed points on spacebar"
 msgstr "Afegeix punts fixos a la barra d''espai"
 
+msgid "Allow edit existing ways"
+msgstr "Permet la modificació de vies existents"
+
 msgid "Draw closed polygons only"
 msgstr "Dibuixa només polígons tancats"
 
@@ -24659,9 +25121,6 @@ msgstr "Dibuixa la via amb el ratolí"
 msgid "min distance={0} px ({1} m)"
 msgstr "distància mínima={0} px ({1} m)"
 
-msgid "Convert way to FastDraw line"
-msgstr "Converteix via en línia FastDraw"
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr "Eps={0}, {1} punts, {2} p/km"
 
@@ -24903,31 +25362,31 @@ msgid "Could not read NanoLog file:"
 msgstr "No és possible la lectura del fitxer NanoLog:"
 
 msgid "OSM Recommendation"
-msgstr ""
+msgstr "Recomanació OSM"
 
 msgid "Recommend categories to your newly created instances."
-msgstr ""
+msgstr "Categories recomandes per a les noves instàncies que heu creat"
 
 msgid "Training process configuration"
-msgstr ""
+msgstr "Configuració del procés de formació"
 
 msgid "Model Settings"
-msgstr ""
+msgstr "Paràmetres del model"
 
 msgid "Select objects or create new objects and get recommendation."
-msgstr ""
+msgstr "Seleccioneu objectes o creeu nous objectes i obteniu recomanacions"
 
 msgid "Add Recommendation"
-msgstr ""
+msgstr "Afegeix recomanació"
 
 msgid "Add a recommended key/value pair to your object"
-msgstr ""
+msgstr "Afegiu un parell clau/valor per al vostre objecte"
 
 msgid "Train a Model"
-msgstr ""
+msgstr "Pràctiques amb un model"
 
 msgid "Start the training engine!"
-msgstr ""
+msgstr "Inicia el motor de pràctiques"
 
 msgid "Edit opening hours"
 msgstr "Edita les hores d''obertura"
@@ -25532,53 +25991,68 @@ msgstr ""
 "Feu-nos saber que heu fet i que ha passat, afegiu el text següent a "
 "l''informe d''error, d''aquesta manera podrem trobar la font del problema."
 
-msgid "Area detection algorithm settings."
-msgstr "Paràmetres de l''algorisme de detecció d''àrea."
+msgid "Area Selector - Preferences"
+msgstr "Selector d''àrea - Preferències"
 
-msgid "Algorithm Settings"
-msgstr "Configuració de l''algorisme"
+msgid "Settings for the area detection algorithm."
+msgstr "Paràmetres de l''algotisme de detecció d''àrea"
+
+msgid "Boofcv - high resolution images"
+msgstr "Boofcv - imatges d''alta resolució"
+
+msgid "Custom - low resolution images"
+msgstr "Personalització - imatges de baixa resolució"
 
 msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
-"El llindar de color defineix com de llunyà ha de ser un color respecte a "
-"l''original per a ser seleccionat (Per defecte: {0})."
+"Trieu quin algorisme s''ha d''utilitzar. \"Auto\" tractarà de trobar una "
+"zona amb Boofcv i utilitzarà l''algorisme personalitzat com a reserva."
 
-msgid "Color Threshold"
-msgstr "Llindar de color"
+msgid "Algorithm"
+msgstr "Algorisme"
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
-"La distància màxima a cada punt de la seqüència pot ser una línia, en píxels "
-"(valor predeterminat: {0})."
+"Nombre màxim de píxels que un punt pot estar lluny d''una línia i tot i així "
+"ser considerat com a membre d''aquesta línia (Valor per defecte: {0})."
 
-msgid "Tolerance Distance"
+msgid "Distance Tolerance"
 msgstr "Tolerància de distància"
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
-"Tolerància per l''ajust d''angle, en radians (Valor predeterminat {0})."
-
-msgid "Tolerance Angle"
-msgstr "Tolerància d''angle"
+"Les línies amb un angle més petit que aquest (en graus) seran combinades en "
+"una única línia (Predefinit {0})."
 
-msgid "Plugin Settings"
-msgstr "Paràmetres dels connectors"
+msgid "Angle Tolerance"
+msgstr "Tolerància de d''angle"
 
-msgid "Show Address Dialog after mapping an area"
-msgstr "Mostra la pantalla d''adreces després de cartografiar una zona"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
+msgstr ""
+"El llindar de color defineix com de diferent pot ser un color respecte al "
+"seleccionat. Els valors vermell, verd i blauhan de ser dins del rang "
+"(seleccionat - llindar) i (seleccionat + llindar). (Valor predefinit: {0})."
 
-msgid "show address dialog"
-msgstr "mostra la pantalla d''adreces"
+msgid "Color Threshold"
+msgstr "Llindar de color"
 
-msgid "Merge nodes with neighbors"
-msgstr "Combina nodes amb veïns"
+msgid "Use HSV based algorithm"
+msgstr "Utilitza un algoristme basat en HSV"
 
-msgid "merge nodes"
-msgstr "combina nodes"
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
+msgstr ""
+"Utilitzeu la tonalitat i la saturació en lloc de la notació RGB per "
+"seleccionar colors equivalents."
 
 msgid "How often thinning operation should be applied (Default {0})."
 msgstr ""
@@ -25588,11 +26062,24 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr "Iteracions d''esqueletització"
 
-msgid "Use hue and saturation instead of RGB distinction"
-msgstr ""
+msgid "show address dialog"
+msgstr "mostra la pantalla d''adreces"
+
+msgid "Show Address Dialog after mapping an area"
+msgstr "Mostra la pantalla d''adreces després de cartografiar una zona"
+
+msgid "merge nodes"
+msgstr "combina nodes"
+
+msgid "Merge nodes with existing nodes"
+msgstr "Combina els nodes amb nodes existents"
 
-msgid "use HSV based algorithm"
+msgid "Debug"
+msgstr "Depura"
+
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
+"El mode de depuració d''errors escriurà imatges per a cada etapa del procés."
 
 msgid "Street Name:"
 msgstr "Nom del carrer:"
@@ -25649,32 +26136,32 @@ msgid "Set width of the building"
 msgstr "Establiu l''amplada de l''edifici"
 
 msgid "Merge address points"
-msgstr ""
+msgstr "Combina punts d''adreça"
 
 msgid "Move tags from address nodes inside buildings to building ways"
-msgstr ""
+msgstr "Moveu les etiquetes dels nodes de direcció cap a dins dels edificis."
 
 msgid "Select both address nodes and building ways to merge"
-msgstr ""
+msgstr "Selecciona nodes d''adreça i edificacions per a ser combinats"
 
 msgid "No address nodes found in the selection"
-msgstr ""
+msgstr "No s''ha trobat cap node d''adreça a la selecció"
 
 msgid "No building ways found in the selection"
-msgstr ""
+msgstr "No s''ha trobat cap edificació a la selecció"
 
 msgid "There is {0} building with multiple address nodes inside"
 msgid_plural "There are {0} buildings with multiple address nodes inside"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Hi ha {0} edifici amb varis nodes d''addreça al seu interior"
+msgstr[1] "Hi ha {0} edificis amb varis nodes d''addreça al seu interior"
 
 msgid "There is {0} building with address conflicts"
 msgid_plural "There are {0} buildings with address conflicts"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Hi ha {0} edificació amb conflictes d''adreça"
+msgstr[1] "Hi ha {0} edificacions amb conflictes d''adreça"
 
 msgid "No address nodes inside buildings found"
-msgstr ""
+msgstr "No s''ha trobat cap node d''adreça dins de les edificacions"
 
 msgid "on polygon"
 msgstr "al polígon"
@@ -26271,6 +26758,9 @@ msgstr "Inicialitza decalatge"
 msgid "Reset offset (only vector images)"
 msgstr "Inicialitza decalatge (només imatges vectorials)"
 
+msgid "Blank Layer"
+msgstr "Capa buida"
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr "Capa WMS ({0}), {1} tessel·les carregades"
 
@@ -27841,14 +28331,324 @@ msgstr "Activa el connector de generació de llistats de problemes de MapDust"
 msgid "Missing input data"
 msgstr "Manquen dades"
 
+msgid "Mapillary Images"
+msgstr "Imatges de Mapillary"
+
+msgid "Mapillary layer"
+msgstr "Capa de Mapillary"
+
+msgid "Total images:"
+msgstr "Imatges totals:"
+
+msgid "images"
+msgstr "imatges"
+
 msgid "Mapillary"
 msgstr "Mapillary"
 
-msgid "Create Mapillary layer."
-msgstr "Crea una capa Mapillary"
+msgid "Create Mapillary layer"
+msgstr "Crea una capa de Mapillary"
 
-msgid "Export"
-msgstr "Exporta"
+msgid "Start Mapillary layer"
+msgstr "Inicia una capa de Mapillary"
+
+msgid "Download Mapillary images in current view"
+msgstr "Descarrega imatges de Mapillary a la vista actual"
+
+msgid "Export pictures"
+msgstr "Exporta imatges"
+
+msgid "Export Mapillary pictures"
+msgstr "Exporta imatges de  Mapillary"
+
+msgid "Export images"
+msgstr "Exporta imatges"
+
+msgid "Import pictures"
+msgstr "Importa imatges"
+
+msgid "Import local pictures"
+msgstr "Importa imatges locals"
+
+msgid "Import pictures into Mapillary layer"
+msgstr "Importa imatges a la capa de Mapillary"
+
+msgid "Select pictures"
+msgstr "Seleccioneu imatges"
+
+msgid "Import pictures into sequence"
+msgstr "Importa imatges a la seqüència"
+
+msgid "Import pictures into Mapillary layer in a sequence"
+msgstr "Importa fotografies a la capa de Mapillary en una seqüència"
+
+msgid "Join mode"
+msgstr "Afegeix mode"
+
+msgid "Join/unjoin pictures"
+msgstr "Afegeix/treu fotografies"
+
+msgid "Join Mapillary pictures"
+msgstr "Afegeix fotografies de Mapillary"
+
+msgid "Upload pictures"
+msgstr "Puja fotografies"
+
+msgid "Upload Mapillary pictures"
+msgstr "Puja fotografies de Mapillary"
+
+msgid "Upload pictures."
+msgstr "Puja fotografies."
+
+msgid "Walk mode"
+msgstr "Mode caminant"
+
+msgid "Start walk mode"
+msgstr "Inicial el \"mode caminant\""
+
+msgid "Zoom to selected image"
+msgstr "Amplia la imatge seleccionada"
+
+msgid "Zoom to the currently selected Mapillary image"
+msgstr "Amplia la imatge seleccionada de Mapillary"
+
+msgid "Uploaded {0} images"
+msgstr "Han estat pujades {0} imatges"
+
+msgid "Approve upload on the website"
+msgstr "Approva la pujada al lloc web"
+
+msgid "View in website"
+msgstr "Veure-ho al lloc web"
+
+msgid "Copy key"
+msgstr "Copia clau"
+
+msgid "Copy key tag"
+msgstr "Copia l''etiqueta de la clau"
+
+msgid "Edit on website"
+msgstr "Modifica al lloc web"
+
+msgid "Export all images"
+msgstr "Exporta totes les imatges"
+
+msgid "Export selected sequence"
+msgstr "Exporta la seqüència seleccionada"
+
+msgid "Export selected images"
+msgstr "Exporta les imatges seleccionades"
+
+msgid "Rewrite imported images"
+msgstr "Reescriu les imatges importades"
+
+msgid "Select a folder"
+msgstr "Seleccioneu una carpeta"
+
+msgid "Explore"
+msgstr "Explora"
+
+msgid "Select a directory"
+msgstr "Seleccioneu un directori"
+
+msgid "Speed limit"
+msgstr "Límit de velocitat"
+
+msgid "Give way"
+msgstr "Cediu el pas"
+
+msgid "No entry"
+msgstr "Entrada prohibida"
+
+msgid "Intersection danger"
+msgstr "Intersecció"
+
+msgid "Mandatory direction (any)"
+msgstr "Sentit obligatori"
+
+msgid "No turn"
+msgstr "Gir prohibit"
+
+msgid "Uneven road"
+msgstr "Perfil irregular"
+
+msgid "No parking"
+msgstr "Estacionament prohibit"
+
+msgid "No overtaking"
+msgstr "Avançament prohibit"
+
+msgid "Pedestrian crossing"
+msgstr "Pas de vianants"
+
+msgid "Years"
+msgstr "Anys"
+
+msgid "Months"
+msgstr "Mesos"
+
+msgid "Days"
+msgstr "Dies"
+
+msgid "Mapillary filter"
+msgstr "Filtre de Mapillary"
+
+msgid "Open Mapillary filter dialog"
+msgstr "Obre el diàleg de filtre de  Mapillary"
+
+msgid "Downloaded images"
+msgstr "Imatges descarregades"
+
+msgid "Only images with signs"
+msgstr "Només les imatges amb senyals"
+
+msgid "Choose signs"
+msgstr "Selecciona un senyal"
+
+msgid "Mapillary history"
+msgstr "Historial de Mapillary"
+
+msgid "Open Mapillary history dialog"
+msgstr "Obre el diàleg de l''historial de Mapillary"
+
+msgid "Open Mapillary window"
+msgstr "Obre una finestra de Mapillary"
+
+msgid "Mapillary dialog"
+msgstr "Diàleg de  Mapillary"
+
+msgid "Open Mapillary main dialog"
+msgstr "Obre el diàleg prinicipal de  Mapillary"
+
+msgid "Next picture"
+msgstr "Imatge següent"
+
+msgid "Shows the next picture in the sequence"
+msgstr "Mostra la següent imatge de la seqüència"
+
+msgid "Previous picture"
+msgstr "Imatge anterior"
+
+msgid "Shows the previous picture in the sequence"
+msgstr "Mostra la imatge anterior de la seqüència"
+
+msgid "Jump to red"
+msgstr "Salta al vermell"
+
+msgid "Jumps to the picture at the other side of the red line"
+msgstr "Salta a la fotografia de l''altra banda de la línia vermella"
+
+msgid "Jump to blue"
+msgstr "Salta al blau"
+
+msgid "Jumps to the picture at the other side of the blue line"
+msgstr "Salta a la fotografia de l''altra banda de la línia blava"
+
+msgid "Stops the walk."
+msgstr "Atura la caminada."
+
+msgid "Play"
+msgstr "Reprodueix"
+
+msgid "Continues with the paused walk."
+msgstr "Continua amb la cminada pausada."
+
+msgid "Pause"
+msgstr "Pausa"
+
+msgid "Pauses the walk."
+msgstr "Posa en pausa la caminada."
+
+msgid "Reverse buttons position when displaying images."
+msgstr "Inverteix la posició dels botons quan es visualitzin les imatges."
+
+msgid "Display hour when the picture was taken"
+msgstr "Mostra l''hora a la qual es van fer les fotografies"
+
+msgid "Use 24 hour format"
+msgstr "Utilitza un format de 24 hores"
+
+msgid "Move to picture''s location with next/previous buttons"
+msgstr "Mou a la ubicació de les fotografies amb els botons següent/previ"
+
+msgid "Download mode: "
+msgstr "Mode de descàrrega: "
+
+msgid "Upload selected sequence"
+msgstr "Puja la seqüència seleccionada"
+
+msgid "Delete after upload"
+msgstr "Suprimeix un cop s''hagi pujat"
+
+msgid "Wait for full quality pictures"
+msgstr "Espereu per a imatges de la màxima qualitat"
+
+msgid "Follow selected image"
+msgstr "Segueix la imatge seleccionada"
+
+msgid "Go forward"
+msgstr "Vés endavant"
+
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] "Suprimida {0} imatge"
+msgstr[1] "Suprimides {0} imatges"
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] "Importada {0} imatge"
+msgstr[1] "Importades {0} imatges"
+
+msgid "2 images joined"
+msgstr "2 imatges afegides"
+
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] "{0} imatge moguda"
+msgstr[1] "{0} imatges mogudes"
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] "{0} imatge girada"
+msgstr[1] "{0} imatges girades"
+
+msgid "2 images unjoined"
+msgstr "2 imatges tretes"
+
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
+msgstr ""
+"L''àrea descarregada d''OSM és massa gran. S''ha canviat el mode de "
+"descàrrega a semi-automàtic fins que la capa sigui reinicialitzada."
+
+msgid "Downloading"
+msgstr "Descarregant"
+
+msgid "Select mode"
+msgstr "Seleccioneu el mode"
+
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
+msgstr ""
+"<html><head><title>Mapillary login</title></head><body>Login aconseguit, "
+"torna a JOSM.</body></html>"
+
+msgid "Downloading Mapillary images"
+msgstr "Descarregant imatges de Mapillary"
+
+msgid "Total Mapillary images: {0}"
+msgstr "Nombre total d''imatges de Mapillary: {0}"
+
+msgid "No images found"
+msgstr "No s''ha trobat cap imatge"
+
+msgid "Finished upload"
+msgstr "La pujada ha finalitzat"
+
+msgid "Uploading: {0}"
+msgstr "Pujant: {0}"
 
 msgid "Measured values"
 msgstr "Valors mesurats"
@@ -27869,6 +28669,9 @@ msgstr "Longitud de la selecció"
 msgid "Selection Area"
 msgstr "Selecció de l''àrea"
 
+msgid "Selection Radius"
+msgstr "Selecció de radi"
+
 msgid "Angle"
 msgstr "Angle"
 
@@ -27937,50 +28740,6 @@ msgstr "Crear una prohibició de gir de tipus Michigan esquerra"
 msgid "Unable to find via nodes. Please check your selection"
 msgstr "No s''han trobat nodes. Si us plau verifiqueu la vostra selecció"
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-"Consulta XAPI, per exemple, '''' (per baixar totes les dades), "
-"''[highway=*]'', o ''[[network=VRR][ref=603|613]''"
-
-msgid "Download from OSM mirror..."
-msgstr "Baixar del servidor rèplica OSM ..."
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-"Aquesta consulta XAPI sembla invàlida, si us plau torneu a verificar-la."
-
-msgid "Object type: "
-msgstr "Tipus d''objecte "
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr "Tipus d''objecte OSM a baixar (''*'' indica qualsevol)"
-
-msgid "XAPI query: "
-msgstr "Consulta XAPI: "
-
-msgid "Download from Overpass API ..."
-msgstr "Baixa de l''API d''Overpass..."
-
-msgid "Download map data from Overpass API server."
-msgstr "Baixa dades del servidor de l''API d''Overpass..."
-
-msgid "Overpass query: "
-msgstr "Consulta d''Overpass: "
-
-msgid "Select OSM mirror URL"
-msgstr "Seleccionar l''URL del servidor rèplica de l''OSM"
-
-msgid "Select OSM mirror URL to download from."
-msgstr "Seleccioneu una rèplica de l''URL de l''OSM per fer la baixada."
-
-msgid "Base URL"
-msgstr "Adreça URL base"
-
-msgid "Enforce meta data"
-msgstr "Aplica meta dades"
-
 msgid "About Plugin"
 msgstr "Quant al connector"
 
@@ -28234,6 +28993,9 @@ msgstr ""
 "Mostra les diferències entre el conjunt de dades actuals i les existents al "
 "servidor OSM"
 
+msgid "Tools"
+msgstr "Eines"
+
 msgid "Open tools menu for this data."
 msgstr "Obre el menú d''eines per aquestes dades."
 
@@ -29531,6 +30293,29 @@ msgstr "Transport públic: activar fites"
 msgid "Public Transport: Edit waypoint name"
 msgstr "Transport públic: modificar el nom d''una fita"
 
+msgid "Public transport routes"
+msgstr "Itinerari de transport públic"
+
+msgid "Toggle direction arrows"
+msgstr "Commuta les fletxes de direcció"
+
+msgid "Toggle reference labels"
+msgstr "Commuta les etiquetes de referència"
+
+msgid "Visualize public transport routes"
+msgstr "Visualitza itineraris de transport públic"
+
+msgid "Filters"
+msgstr "Filtres"
+
+msgid "Choose Filter"
+msgstr "Escull un filtre"
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+"Error d''inicialització de JSlider. Assegureu-vos de que la vostra meta-"
+"informació és correcta."
+
 msgid "Relation Toolbox"
 msgstr "Caixa d''eines de relacions"
 
@@ -29708,6 +30493,9 @@ msgstr "Conjunt de canvis revertit"
 msgid "It is not allowed to revert changeset from {0}"
 msgstr "No és permès de revertir el grup de canvis de {0}"
 
+msgid "Downloading objects history"
+msgstr "Descarregant l''historial dels objectes"
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr "Manca un objectiu de fusió per {0} amb l''ID {1}"
 
@@ -29717,6 +30505,9 @@ msgstr "Historial dels objectes"
 msgid "History reverter"
 msgstr "Historial de reversions"
 
+msgid "Tool: Display objects history dialog"
+msgstr "Eina: Mostra el diàleg de l''historial dels objectes"
+
 msgid "Preparing history data..."
 msgstr "Preparant historial..."
 
@@ -29904,6 +30695,9 @@ msgstr "Nou valor per {0}"
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr "Manca la preferència ''{0}''. No és possible d''inicialitzar SdsApi."
 
+msgid "Proxy Authentication Required"
+msgstr "Es requereix autenticació a través de servidor intermediari"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -30108,6 +30902,39 @@ msgstr "Llindar per fusionar nodes propers"
 msgid "SeaMap Editor"
 msgstr "Editor de cartes nàutiques"
 
+msgid "Spline drawing"
+msgstr "Dibuix d''splines"
+
+msgid "Draw a spline curve"
+msgstr "Dibuixa una corba d''spline"
+
+msgid "Spline goes outside of the world."
+msgstr "L''spline s''en va fora del món."
+
+msgid "Add an existing node to spline: {0}"
+msgstr "Afegeix un node existent a l''spline: {0}"
+
+msgid "Add a new node to spline: {0}"
+msgstr "Afegeix un node nou a l''spline: {0}"
+
+msgid "Delete spline node {0}"
+msgstr "Suprimeix un node de l''spline {0}"
+
+msgid "Finish spline"
+msgstr "Finalitza l''spline"
+
+msgid "Splines"
+msgstr "Splines"
+
+msgid "Spline drawing preferences"
+msgstr "Preferències de dibuix d''splines"
+
+msgid "Curve steps"
+msgstr "Graons corbats"
+
+msgid "Undelete node {0}"
+msgstr "Anul·la la supressió del node {0}"
+
 msgid "OSM Export"
 msgstr "Exporta OSM"
 
@@ -30117,6 +30944,9 @@ msgstr "Exporta dades de trànsit a un fitxer SUMO"
 msgid "SUMO Export"
 msgstr "Exportació SUMO"
 
+msgid "Export"
+msgstr "Exporta"
+
 msgid "AutoSave LiveData"
 msgstr "Desament automàtic de LiveData"
 
@@ -30370,9 +31200,6 @@ msgstr "Error de Tracer2"
 msgid "Parameter for server request"
 msgstr "Paràmetre per consultar el servidor"
 
-msgid "Tile size:"
-msgstr "Mida de la tessel·la"
-
 msgid "Resolution:"
 msgstr "Resolució:"
 
@@ -32069,9 +32896,6 @@ msgstr "Cercar fites"
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr "Cercar fita. Feu clic i moveu el mapa sobre la fita."
 
-msgid "Way Select"
-msgstr "Selecció de via"
-
 msgid "Add names from Wikipedia"
 msgstr "Afegeix noms de la viquipèdia"
 
diff --git a/i18n/po/ca at valencia.po b/i18n/po/ca at valencia.po
index 3bac0ad..25aa20e 100644
--- a/i18n/po/ca at valencia.po
+++ b/i18n/po/ca at valencia.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2015-04-25 18:52+0000\n"
 "Last-Translator: Dirk Stöcker <launchpad at dstoecker.de>\n"
 "Language-Team: el_libre - - www.catmidia.cat\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 05:05+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 05:10+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: ca at valencia\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -97,23 +97,20 @@ msgstr "S''estan carregant les preferències de les imatges"
 msgid "Updating user interface"
 msgstr "S''està actualitzant la interfície d''usuari/a"
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
 msgstr "S''està ignorant l''adreça URL malformada: \"{0}\""
 
 msgid "Warning"
 msgstr "Atenció"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "S''està ignorant l''adreça URL malformada: \"{0}\""
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 "El paràmetre \"downloadgps\" no accepta noms de fitxer ni adreces URL de "
 "fitxers"
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "S''està ignorant l''adreça URL malformada: \"{0}\""
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -455,6 +452,9 @@ msgstr "Commuta les finestres"
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Commuta les finestres, maximitza la vista del mapa"
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
 "Distribueix els nodes seleccionats en distàncies iguals a llarg d''una línia"
@@ -1109,6 +1109,30 @@ msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 "Seleccioneu vies que formin un angle de 90 o 180 graus, aproximadament."
 
+msgid "Download from Overpass API ..."
+msgstr "Descarrega de l''API d''Overpass..."
+
+msgid "Download map data from Overpass API server."
+msgstr "Descarrega dades del servidor de l''API d''Overpass..."
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr "Consulta d''Overpass: "
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr "Apega"
 
@@ -2108,15 +2132,6 @@ msgstr "Discretització d''angles activa"
 msgid "Finish drawing."
 msgstr "Finalitza el dibuix."
 
-msgid "FIX"
-msgstr "ARREGLA"
-
-msgid "draw angle snap"
-msgstr "dibuixa angles discrets"
-
-msgid "draw angle snap highlight"
-msgstr "dibuix d''angles discrets ressaltat"
-
 msgid "Toggle snapping by {0}"
 msgstr "Commuta la discretització amb {0}"
 
@@ -2138,6 +2153,15 @@ msgstr "0,45,90,..."
 msgid "0,30,45,60,90,..."
 msgstr "0,30,45,60,90,..."
 
+msgid "FIX"
+msgstr "ARREGLA"
+
+msgid "draw angle snap"
+msgstr "dibuixa angles discrets"
+
+msgid "draw angle snap highlight"
+msgstr "dibuix d''angles discrets ressaltat"
+
 msgid "Angle snapping"
 msgstr "Unió automàtica d''angles"
 
@@ -2274,9 +2298,6 @@ msgstr ""
 "Acció_Via_Paral·lela\n"
 "Les vies seleccionades formaran una via simple sense branques."
 
-msgid "Make parallel way error"
-msgstr "Error en fer una via paral·lela"
-
 msgid "Drag play head"
 msgstr "Desplaça el capçal de lectura"
 
@@ -2501,9 +2522,15 @@ msgstr "tots els objectes"
 msgid "Also include incomplete and deleted objects in search."
 msgstr "Inclou a la cerca els objectes incomplets i els esborrats."
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr "expressió regular"
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr "afig un botó a la barra d''eines"
 
@@ -2725,6 +2752,10 @@ msgid "RX"
 msgstr "RX"
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr "A"
 
@@ -2778,6 +2809,9 @@ msgstr "Sèrie de nombres esperats"
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr "Testimoni inesperat. Esperat {0}, trobat {1}"
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr "S''ha trobat un testimoni inesperat: {0}"
 
@@ -3272,6 +3306,24 @@ msgstr "Ha fallat la creació del directori mancant per la memòria cau: {0}"
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr "<html>Ha fallat la creació del directori de memòria cau: {0}</html>"
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3410,14 +3462,48 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
-msgid "Not in cache"
-msgstr "No a la memòria cau"
-
 msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr ""
 "No s''ha trobat la projecció ''{0}'', el favorit ''{1}'' no pot ser "
 "utilitzat."
 
+msgid "HTTP error {0} when loading tiles"
+msgstr ""
+
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr "Projecció"
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
+msgstr ""
+
 msgid "ID > 0 expected. Got {0}."
 msgstr "S''espera un ID > 0. Actualment és {0}."
 
@@ -3629,6 +3715,12 @@ msgstr "text"
 msgid "areatext"
 msgstr "àrea de text"
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr "El paràmetre ha de començar amb el caràcter ''+'' (trobat ''{0}''"
 
@@ -3656,6 +3748,9 @@ msgstr "L''el·lipsoide ''{0}'' no és compatible"
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr "La combinació dels paràmetres de l''el·lipsoide no són compatibles"
 
+msgid "Unknown datum identifier: ''{0}''"
+msgstr ""
+
 msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr "El·lipsoide requerit (+ellps=* or +a=*, +b=*)"
 
@@ -3664,9 +3759,6 @@ msgstr ""
 "El fitxer de desplaçament de la graella \"{0}\" per l''opció +nadgrids no "
 "està suportatat."
 
-msgid "Unknown datum identifier: ''{0}''"
-msgstr ""
-
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
 msgstr ""
 
@@ -4313,9 +4405,6 @@ msgstr "El valor de la clau és més gran del permés"
 msgid "Tags with empty values"
 msgstr "Etiquetes amb valors buits"
 
-msgid "Invalid property key"
-msgstr "Clau no vàlida"
-
 msgid "Invalid white space in property key"
 msgstr "Espai blanc no vàlid a la clau"
 
@@ -4325,12 +4414,24 @@ msgstr "Els valors comencen o acaben amb un espai en blanc"
 msgid "Property values contain HTML entity"
 msgstr "Els valors contenen codi HTML"
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr "La clau ''{0}'' no és ales predefinicions."
 
 msgid "Presets do not contain property key"
 msgstr "Les predefinicions no contenen la propietat de la clau"
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr "El valor ''{0}'' per a la clau ''{1}'' no és a les predefinicions."
 
@@ -4517,15 +4618,15 @@ msgstr "El node d''una via és a prop d''una altra via"
 msgid "Connected way end node near other way"
 msgstr "El node final de la via és a prop d''una altra via"
 
+msgid "Unconnected nodes without physical tags"
+msgstr "Nodes no connectats sense etiquetes físiques"
+
 msgid "Untagged and unconnected nodes"
 msgstr "nodes sense etiquetes i sense connexió"
 
 msgid "This test checks for untagged nodes that are not part of any way."
 msgstr "Este test cerca nodes sense etiquetes i que no són part de cap via."
 
-msgid "Unconnected nodes without physical tags"
-msgstr "Nodes no connectats sense etiquetes físiques"
-
 msgid "No tags"
 msgstr "Cap etiqueta"
 
@@ -4723,8 +4824,9 @@ msgstr "Feu clic per tancar la finestra de diàleg"
 msgid "Imagery offset"
 msgstr "Decalatge de la imatgeria"
 
+msgctxt "menu"
 msgid "Imagery"
-msgstr "Imatgeria"
+msgstr ""
 
 msgctxt "layer"
 msgid "Offset"
@@ -4945,45 +5047,56 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
-msgstr "Fitxer"
+msgstr ""
 
-msgid "Session"
-msgstr "Sessió"
+msgctxt "menu"
+msgid "Edit"
+msgstr ""
 
+msgctxt "menu"
 msgid "View"
-msgstr "Visualitza"
+msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
-msgstr "Eines"
+msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
-msgstr "Més eines"
+msgstr ""
 
+msgctxt "menu"
 msgid "Data"
-msgstr "Dades"
+msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
-msgstr "Selecció"
+msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
-msgstr "Predefinicions"
+msgstr ""
 
 msgid "More..."
 msgstr "Més ..."
 
+msgctxt "menu"
 msgid "GPS"
-msgstr "GPS"
+msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
-msgstr "Finestres"
+msgstr ""
+
+msgctxt "menu"
+msgid "Help"
+msgstr ""
 
 msgid "Menu: {0}"
 msgstr "Menú: {0}"
 
-msgid "Save and load the current session (list of layers, etc.)"
-msgstr "Enregistrar i carregar la sessió actual (llista de capes, etc.)"
-
 msgid "Edit toolbar"
 msgstr "Barra d''eines d''edició"
 
@@ -5006,8 +5119,9 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
-msgstr "Àudio"
+msgstr ""
 
 msgid "Do not hide toolbar"
 msgstr "No amagis la barra d''eines"
@@ -5131,67 +5245,17 @@ msgstr "En segon pla"
 msgid "Click to run job in background"
 msgstr "Feu clic per llançar la tasca en segon pla"
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-"La imatgeria aèria podria estar desalineada. Per favor verifiqueu el seu "
-"decalatge utilitzant un tack GPS!"
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-
-msgid "Details..."
-msgstr "Detalls..."
-
-msgid "Hide this message and never show it again"
-msgstr "Amagar este missatge i no tornar-ho a mostrar"
+msgid " ({0})"
+msgstr " ({0})"
 
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
+msgid "{0} completed in {1}"
 msgstr ""
-"<html>Per favor confirmeu la supressió d''<strong>1 objecte</strong> "
-"d''<strong>1 relació</strong>.</html>"
 
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
+msgid "Enlarge"
 msgstr ""
-"<html>Per favor confirmeu la supressió d''<strong>1 objecte</strong> de "
-"<strong>{0} relacions</strong>.</html>"
 
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
+msgid "Shrink"
 msgstr ""
-"<html>Per favor confirmeu la supressió de <strong>{0} objectes</strong> de "
-"<strong>{1} relacions</strong>.</html>"
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] "Suprimint {0} objecte"
-msgstr[1] "Suprimint {0} objectes"
-
-msgid "Delete objects"
-msgstr "Suprimeix objectes"
-
-msgid "To delete"
-msgstr "Per suprimir"
-
-msgid "From Relation"
-msgstr "De la relació"
-
-msgid "Pos."
-msgstr "Pos."
-
-msgid "Role"
-msgstr "Rol"
-
-msgid "Click to close the dialog and remove the object from the relations"
-msgstr "Feu clic per tancar la finestra i eliminar l''objecte de relacions"
-
-msgid "Click to close the dialog and to abort deleting the objects"
-msgstr "Feu clic per tancar la finestra i parar la supressió d''objectes"
 
 msgid ""
 "<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
@@ -5660,6 +5724,9 @@ msgstr "Conservar el seu estat esborrat"
 msgid "Undecide conflict between deleted state"
 msgstr "Conflicte a resoldre entre elements esborrats"
 
+msgid "Role"
+msgstr "Rol"
+
 msgid "Primitive"
 msgstr "Primitiva"
 
@@ -5909,6 +5976,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr "Aplicar este rol a tots els membres"
 
+msgid "Pos."
+msgstr "Pos."
+
 msgid "Orig. Way"
 msgstr "Via original"
 
@@ -6074,6 +6144,47 @@ msgstr "Resol conflictes"
 msgid "Resolve conflicts for ''{0}''"
 msgstr "Resoldre els conflictes per ''{0}''"
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+"<html>Per favor confirmeu la supressió d''<strong>1 objecte</strong> "
+"d''<strong>1 relació</strong>.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Per favor confirmeu la supressió d''<strong>1 objecte</strong> de "
+"<strong>{0} relacions</strong>.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Per favor confirmeu la supressió de <strong>{0} objectes</strong> de "
+"<strong>{1} relacions</strong>.</html>"
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] "Suprimint {0} objecte"
+msgstr[1] "Suprimint {0} objectes"
+
+msgid "Delete objects"
+msgstr "Suprimeix objectes"
+
+msgid "To delete"
+msgstr "Per suprimir"
+
+msgid "From Relation"
+msgstr "De la relació"
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr "Feu clic per tancar la finestra i eliminar l''objecte de relacions"
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr "Feu clic per tancar la finestra i parar la supressió d''objectes"
+
 msgid "Filter objects and hide/disable them."
 msgstr "Filtrar els objectes i amagar-los/desactivar-los"
 
@@ -6178,8 +6289,8 @@ msgstr "Informació vançada de l''objecte"
 msgid "map style"
 msgstr "estil de mapa"
 
-msgid " ({0})"
-msgstr " ({0})"
+msgid "edit counts"
+msgstr ""
 
 msgid "not in data set"
 msgstr "absent del conjunt de dades"
@@ -6321,6 +6432,11 @@ msgstr ""
 "Els dos objectes seleccionats tenen el mateix estil, tot i que no és "
 "idèntic, a la memòria cau"
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr "xml"
 
@@ -6330,17 +6446,48 @@ msgstr "mapcss"
 msgid "unknown"
 msgstr "desconegut"
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -6388,6 +6535,12 @@ msgstr "Opacitat"
 msgid "Adjust opacity of the layer."
 msgstr "Ajustar l''opacitat de la capa"
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr "Activa"
 
@@ -6517,6 +6670,12 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
+msgid "Mini map"
+msgstr ""
+
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
 msgid "List of notes"
 msgstr ""
 
@@ -6575,10 +6734,15 @@ msgstr "ID d''objecte"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "Indiqueu l''ID de l''objecte a baixar"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6607,6 +6771,9 @@ msgstr "Relacions: {0}/{1}"
 msgid "Relations: {0}"
 msgstr "Relacions: {0}"
 
+msgid "Selection"
+msgstr "Selecció"
+
 msgid "Open a selection list window."
 msgstr "Obri la finestra de la llista de relacions"
 
@@ -6702,6 +6869,12 @@ msgstr "Obri la finestra de validació"
 msgid "Validation results"
 msgstr "Resultat de la validació"
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr "Arregla"
 
@@ -7369,6 +7542,12 @@ msgid "Launch browser with wiki help for selected object"
 msgstr ""
 "Obri la pàgina wiki d''ajuda de l''objecte seleccionat a un navegador web"
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr "Apega el valor"
 
@@ -7462,14 +7641,13 @@ msgstr "Estableix el nombre de les etiquetes afegides recentment"
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7668,6 +7846,12 @@ msgstr "Ordenar els membres de la relació"
 msgid "Relation Editor: Sort"
 msgstr "Editor de relacions: Ordenar"
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr "Invertir l''orde dels membres de la relació"
 
@@ -8265,6 +8449,9 @@ msgstr "Carregant l''historial de la relació {0}"
 msgid "Node {0}"
 msgstr "Node {0}"
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr "Amplia la zona del node"
 
@@ -9262,6 +9449,108 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] "{0} objecte a suprimir:"
 msgstr[1] "{0} objectes a suprimir:"
 
+msgid "Show Tile Info"
+msgstr "Mostra informació de la tessel·la"
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr "Auto-ampliació"
+
+msgid "Auto load tiles"
+msgstr "Carrega automàticament les tessel·les"
+
+msgid "Load All Tiles"
+msgstr "Carrega totes les tessel·les"
+
+msgid "Load All Error Tiles"
+msgstr "Carrega totes les tessel·les amb error"
+
+msgid "Zoom to native resolution"
+msgstr "Amplia a la resolució nativa"
+
+msgid "Change resolution"
+msgstr "Canviar resolució"
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr "Mostra els errors"
+
+msgid "Load Tile"
+msgstr "Carrega tessel·la"
+
+msgid "Increase zoom"
+msgstr "Ampliar"
+
+msgid "Decrease zoom"
+msgstr "Fer més petit"
+
+msgid "Snap to tile size"
+msgstr "Discretitza a la mida de la tessel·la"
+
+msgid "Flush Tile Cache"
+msgstr "Buida la memòria cau de tessel·les"
+
+msgid "zoom in to load any tiles"
+msgstr "amplia per carregar cada tessel·la"
+
+msgid "zoom in to load more tiles"
+msgstr "amplia per carregar més tessel·les"
+
+msgid "increase zoom level to see more detail"
+msgstr "incrementa el nivell d''ampliació per veure més detalls"
+
+msgid "No tiles at this zoom level"
+msgstr "No hi ha tessel·les en este nivell d''ampliació"
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr "Descarregades {0}/{1} tessel·les"
+
+msgid "Save WMS file"
+msgstr "Enregistra el fitxer WMS"
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+"La imatgeria aèria podria estar desalineada. Per favor verifiqueu el seu "
+"decalatge utilitzant un tack GPS!"
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+
+msgid "Details..."
+msgstr "Detalls..."
+
+msgid "Hide this message and never show it again"
+msgstr "Amagar este missatge i no tornar-ho a mostrar"
+
 msgid "Customize Color"
 msgstr "Personalitzar el color"
 
@@ -9315,6 +9604,9 @@ msgstr "Guarda-ho en format GPX"
 msgid "Imagery fade"
 msgstr "Degradació de la imatgeria"
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr "ERROR"
 
@@ -9335,12 +9627,9 @@ msgstr "Se suporten totes les projeccions"
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
-"La capa {0} no suporta la nova projecció {1}.\n"
-"{2}\n"
-"Canvieu la projecció o suprimiu la capa."
 
 msgid "Save Layer"
 msgstr "Guarda la capa"
@@ -9423,196 +9712,86 @@ msgstr ""
 msgid "Save OSM file"
 msgstr "Guarda el fitxer OSM"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-"{0} no és un argument TMS vàlid. Per favor verifiqueu esta URL:\n"
-"{1}"
+msgid "EPSG:4326 and Mercator projection are supported"
+msgstr "EPSG: les projeccions 4326 i Mercator són suportades"
+
+msgid "Validation errors"
+msgstr "Errors de validació"
+
+msgid "No validation errors"
+msgstr "Cap error de validació"
+
+msgid "Set WMS Bookmark"
+msgstr "Establir un favorit WMS"
 
 msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
-"Les capes TMS no suporten la projecció {0}.\n"
-"{1}\n"
-"Canvieu la projecció o suprimiu la capa."
 
-msgid "Auto Zoom"
-msgstr "Auto-ampliació"
+msgid "Correlate to GPX"
+msgstr "Correlacionar a GPX"
 
-msgid "Auto load tiles"
-msgstr "Carrega automàticament les tessel·les"
+msgid "Invalid timezone"
+msgstr "Zona horària no vàlida"
 
-msgid "Show Errors"
-msgstr "Mostra els errors"
+msgid "Invalid offset"
+msgstr "Desplaçament no vàlid"
 
-msgid "Load Tile"
-msgstr "Carrega tessel·la"
+msgid "Correlate images with GPX track"
+msgstr "Correlacionar les imatges amb el track GPX"
 
-msgid "Show Tile Info"
-msgstr "Mostra informació de la tessel·la"
+msgid "Try Again"
+msgstr "Provar un altre cop"
 
-msgid "Load All Tiles"
-msgstr "Carrega totes les tessel·les"
+msgid "No images could be matched!"
+msgstr "No hi ha cap imatge coincident!"
 
-msgid "Load All Error Tiles"
-msgstr "Carrega totes les tessel·les amb error"
+msgid "GPX Files (*.gpx *.gpx.gz)"
+msgstr "Fitxers GPX (*.gpx, *.gpx.gz"
 
-msgid "Increase zoom"
-msgstr "Ampliar"
+msgid "File {0} is loaded yet under the name \"{1}\""
+msgstr "El fitxer {0} ja ha estat carregat amb el nom \"{1}\""
 
-msgid "Decrease zoom"
-msgstr "Fer més petit"
+msgid "Error while parsing {0}"
+msgstr "S''ha produït un error mentre s''estava analitzant {0}"
 
-msgid "Snap to tile size"
-msgstr "Discretitza a la mida de la tessel·la"
+msgid "Could not read \"{0}\""
+msgstr "No és possible llegir \"{0}\""
 
-msgid "Flush Tile Cache"
-msgstr "Buida la memòria cau de tessel·les"
+msgid ""
+"<html>Take a photo of your GPS receiver while it displays the "
+"time.<br>Display that photo here.<br>And then, simply capture the time you "
+"read on the photo and select a timezone<hr></html>"
+msgstr ""
+"<html>Preneu una fotografia del vostre receptor GPS mostrant "
+"l''hora.<br>Mostreu la fotografia ací.<br>LLavors captureu l''hora que "
+"mostra la fotografia i seleccioneu una zona horària<hr></html>"
 
-msgid "zoom in to load any tiles"
-msgstr "amplia per carregar cada tessel·la"
+msgid "Photo time (from exif):"
+msgstr "Hora de la fotografia (exif):"
 
-msgid "zoom in to load more tiles"
-msgstr "amplia per carregar més tessel·les"
+msgid "Gps time (read from the above photo): "
+msgstr "Hora del GPS (llegida de la fotografia): "
 
-msgid "increase zoom level to see more detail"
-msgstr "incrementa el nivell d''ampliació per veure més detalls"
+msgid "I am in the timezone of: "
+msgstr "Sóc a la zona horària de: "
 
-msgid "No tiles at this zoom level"
-msgstr "No hi ha tessel·les en este nivell d''ampliació"
+msgid "No date"
+msgstr "Sense data"
 
-msgid "Current zoom: {0}"
-msgstr ""
+msgid "Open another photo"
+msgstr "Obri una altra fotografia"
 
-msgid "Display zoom: {0}"
-msgstr ""
+msgid "Synchronize time from a photo of the GPS receiver"
+msgstr "Sincronitzar l''hora amb una fotografia del receptor GPS"
 
-msgid "Pixel scale: {0}"
+msgid ""
+"Error while parsing the date.\n"
+"Please use the requested format"
 msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-"La capa TMS ({0}) està sent descarregada amb un nivell d''ampliació {1}"
-
-msgid "EPSG:4326 and Mercator projection are supported"
-msgstr "EPSG: les projeccions 4326 i Mercator són suportades"
-
-msgid "Validation errors"
-msgstr "Errors de validació"
-
-msgid "No validation errors"
-msgstr "Cap error de validació"
-
-msgid "Blank Layer"
-msgstr "Capa buida"
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr "Descarregades {0}/{1} tessel·les"
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-"La capa WMS ({0}), està sent descarregada amb un nivell d''ampliació {1}"
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-"La capa WMS ({0}), està sent descarregada amb un nivell d''ampliació {1}"
-
-msgid "Download visible tiles"
-msgstr "Descarrega les tessel·les visibles"
-
-msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-"La zona demanada és massa gran. Per favor feu-la una mica més petita o "
-"canvieu la resolució"
-
-msgid "Change resolution"
-msgstr "Canviar resolució"
-
-msgid "Reload erroneous tiles"
-msgstr "Recarrega les tessel·les amb error"
-
-msgid "Alpha channel"
-msgstr "Canal alfa"
-
-msgid "Automatically change resolution"
-msgstr "Canvia la resolució automàticament"
-
-msgid "Set WMS Bookmark"
-msgstr "Establir un favorit WMS"
-
-msgid "Automatic downloading"
-msgstr "Descàrrega automàtica"
-
-msgid "Zoom to native resolution"
-msgstr "Amplia a la resolució nativa"
-
-msgid "Supported projections are: {0}"
-msgstr "Les projeccions suportades són: {0}"
-
-msgid "Unsupported WMS file version; found {0}, expected {1}"
-msgstr "Versió de fitxer WMS no suportada; trobada {0}, esperada {1}"
-
-msgid "Save WMS file"
-msgstr "Enregistra el fitxer WMS"
-
-msgid "Correlate to GPX"
-msgstr "Correlacionar a GPX"
-
-msgid "GPX Files (*.gpx *.gpx.gz)"
-msgstr "Fitxers GPX (*.gpx, *.gpx.gz"
-
-msgid "File {0} is loaded yet under the name \"{1}\""
-msgstr "El fitxer {0} ja ha estat carregat amb el nom \"{1}\""
-
-msgid "Error while parsing {0}"
-msgstr "S''ha produït un error mentre s''estava analitzant {0}"
-
-msgid "Could not read \"{0}\""
-msgstr "No és possible llegir \"{0}\""
-
-msgid ""
-"<html>Take a photo of your GPS receiver while it displays the "
-"time.<br>Display that photo here.<br>And then, simply capture the time you "
-"read on the photo and select a timezone<hr></html>"
-msgstr ""
-"<html>Preneu una fotografia del vostre receptor GPS mostrant "
-"l''hora.<br>Mostreu la fotografia ací.<br>LLavors captureu l''hora que "
-"mostra la fotografia i seleccioneu una zona horària<hr></html>"
-
-msgid "Photo time (from exif):"
-msgstr "Hora de la fotografia (exif):"
-
-msgid "Gps time (read from the above photo): "
-msgstr "Hora del GPS (llegida de la fotografia): "
-
-msgid "I am in the timezone of: "
-msgstr "Sóc a la zona horària de: "
-
-msgid "No date"
-msgstr "Sense data"
-
-msgid "Open another photo"
-msgstr "Obri una altra fotografia"
-
-msgid "Synchronize time from a photo of the GPS receiver"
-msgstr "Sincronitzar l''hora amb una fotografia del receptor GPS"
-
-msgid ""
-"Error while parsing the date.\n"
-"Please use the requested format"
-msgstr ""
-"Error en analitzar la data.\n"
-"Per favor, utilitzeu el format demanat"
+"Error en analitzar la data.\n"
+"Per favor, utilitzeu el format demanat"
 
 msgid "Invalid date"
 msgstr "La data no és vàlida"
@@ -9659,24 +9838,9 @@ msgstr "Fus horari: "
 msgid "Offset:"
 msgstr "Desplaçament:"
 
-msgid "Correlate images with GPX track"
-msgstr "Correlacionar les imatges amb el track GPX"
-
 msgid "Correlate"
 msgstr "Correlacionar"
 
-msgid "Invalid timezone"
-msgstr "Zona horària no vàlida"
-
-msgid "Invalid offset"
-msgstr "Desplaçament no vàlid"
-
-msgid "Try Again"
-msgstr "Provar un altre cop"
-
-msgid "No images could be matched!"
-msgstr "No hi ha cap imatge coincident!"
-
 msgid "No gpx selected"
 msgstr "Cap gpx seleccionat"
 
@@ -9892,9 +10056,6 @@ msgstr ""
 "\n"
 "hora GPS: {0}"
 
-msgid "JPEG images (*.jpg)"
-msgstr "Imatges JPEG (.jpg)"
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9964,9 +10125,6 @@ msgstr "metres"
 msgid "Maximum area per request:"
 msgstr "Àrea màxima per petició:"
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr "Descarregar a prop:"
 
@@ -10732,9 +10890,6 @@ msgstr "Tancar la finestra de preferències i descartar els canvis"
 msgid "Save the preferences and close the dialog"
 msgstr "Guardar les preferències i tancar la finestra"
 
-msgid "Download plugins"
-msgstr "Descarregar connector"
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 "Heu de reiniciar JOSM per tal que algunes configuracions tinguen efecte"
@@ -10742,6 +10897,9 @@ msgstr ""
 msgid "Would you like to restart now?"
 msgstr "Voleu reiniciar ara?"
 
+msgid "Download plugins"
+msgstr "Descarregar connector"
+
 msgid "Icon paths:"
 msgstr "Ruta de les icones:"
 
@@ -11614,6 +11772,21 @@ msgstr "Mostra límits"
 msgid "No bounding box was found for this layer."
 msgstr "No ha estat trobat cap límit per esta capa."
 
+msgid "1. Enter getCapabilities URL"
+msgstr ""
+
+msgid "2. Enter name for this layer"
+msgstr ""
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr "degrada la imatgeria"
 
@@ -11632,6 +11805,18 @@ msgstr "Fort"
 msgid "Sharpen (requires layer re-add): "
 msgstr "Aguditzar (requereix reafegir una capa): "
 
+msgid "Tile cache directory: "
+msgstr "Directori de la memòria cau de tessel·les: "
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr "Preferències d''imatgeria"
 
@@ -11654,6 +11839,9 @@ msgstr "Proveïdors d''imatgeria"
 msgid "Offset bookmarks"
 msgstr "Favorits de decalatge"
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr "Imatgeria de fons: predeterminat"
 
@@ -11696,9 +11884,6 @@ msgstr "La URL de la llicència EULA no està disponible: {0}"
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr "La URL de la llicència EULA no té el format correcte: {0}"
 
-msgid "Projection"
-msgstr "Projecció"
-
 msgid "Layer"
 msgstr "Capa"
 
@@ -11723,18 +11908,12 @@ msgstr "Nivell màxim d''ampliació: "
 msgid "Add to slippymap chooser: "
 msgstr "Afegir al selector de mapes lliscants: "
 
-msgid "Tile cache directory: "
-msgstr "Directori de la memòria cau de tessel·les: "
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
@@ -11742,20 +11921,11 @@ msgstr ""
 "Esta capa no suporta cap de les projeccions de JOSM,\n"
 "per això no la podeu utilitzar. Este missatge no toranarà a ser mostrat."
 
-msgid "Downloader:"
-msgstr "Descarregador:"
-
 msgid "Simultaneous connections:"
 msgstr "Connexions simultànies:"
 
-msgid "Overlap tiles"
-msgstr "Tessel·les superposades"
-
-msgid "% of east:"
-msgstr "% est:"
-
-msgid "% of north:"
-msgstr "% nord:"
+msgid "Tile size:"
+msgstr ""
 
 msgid "Auto save enabled"
 msgstr "Activar guardat automàtic"
@@ -12783,6 +12953,14 @@ msgstr "Aplicar"
 msgid "New relation"
 msgstr "Nova relació"
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] "Modificar {0} objecte"
@@ -12901,6 +13079,9 @@ msgstr "Mostrar la finestra de cerca de preconfiguracions"
 msgid "Search presets"
 msgstr "Cercar element predefinit"
 
+msgid "Presets"
+msgstr "Predefinicions"
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -13213,6 +13394,9 @@ msgstr "<html>No es poden llegir els arxius.<br>L''error és:<br>{0}</html>"
 msgid "GeoJSON Files"
 msgstr "Fitxers GeoJSON"
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr "Capa ''{0}'' no suportada"
 
@@ -13805,6 +13989,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr "Fitxers WMS (*.wms)"
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr "Versió de fitxer WMS no suportada; trobada {0}, esperada {1}"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -14244,6 +14431,19 @@ msgstr[1] ""
 "El connector {0} necessita {1} altres que no han estat trobats. Els "
 "connectors que manquen són:"
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -15448,6 +15648,9 @@ msgstr "Actualitza"
 msgid "Update directory listing."
 msgstr "Actualitzar la llista de directoris."
 
+msgid "View"
+msgstr "Visualitza"
+
 msgid "Blue:"
 msgstr "Blau:"
 
@@ -15487,7 +15690,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -15499,9 +15702,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -15610,6 +15810,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -15623,12 +15826,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -15665,10 +15874,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
+msgstr ""
+
+msgid "Geodatastyrelsen DTK Kort25"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -15695,6 +15910,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -15719,7 +15937,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -15734,6 +15952,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -15746,12 +15967,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -15772,6 +15987,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -15804,10 +16022,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -15837,73 +16052,25 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
-msgid "OSMIE Townlands"
-msgstr ""
-
-msgid "OSMIE EDs"
-msgstr ""
-
-msgid "OSMIE Civil Parishes"
-msgstr ""
-
-msgid "OSMIE Baronies"
-msgstr ""
-
-msgid "OSMIE Political"
-msgstr ""
-
-msgid "Ireland EEA GMES Urban Atlas"
-msgstr ""
-
-msgid "Ireland EEA CORINE 2006"
-msgstr ""
-
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
 msgstr ""
 
 msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Clare Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Dublin Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Fermanagh Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Galway Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Kildare Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Leitrim Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Longford Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Offaly Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Sligo Civil Parishes and Baronies"
+msgid "OSMIE Townlands"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "OSMIE EDs"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "OSMIE Civil Parishes"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "OSMIE Baronies"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "OSMIE Political"
 msgstr ""
 
 msgid "Lodi - Italy"
@@ -15939,6 +16106,9 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
+msgid "1.cikla ortofotokarte - Latvia"
+msgstr ""
+
 msgid "ORT10LT (Lithuania)"
 msgstr ""
 
@@ -15954,6 +16124,9 @@ msgstr ""
 msgid "Luxembourg Inspire Roads"
 msgstr ""
 
+msgid "Luxembourg Inspire Water"
+msgstr ""
+
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -15969,7 +16142,13 @@ msgstr ""
 msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgstr ""
+
+msgid "Geoportal 2: PRNG (geo names)"
+msgstr ""
+
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
 msgid "Będzin: Ortofotomapa 2013 (aerial image)"
@@ -15981,15 +16160,27 @@ msgstr ""
 msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
+msgid "Bytom: Fotoplan 2014 (aerial image)"
+msgstr ""
+
 msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
 msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
+msgid "Częstochowa: Budynki (buildings)"
+msgstr ""
+
 msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgstr ""
+
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgstr ""
+
 msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
@@ -15999,9 +16190,45 @@ msgstr ""
 msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Katowice: Budynki (buildings)"
+msgstr ""
+
+msgid "Łódź: Budynki (buildings)"
+msgstr ""
+
 msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Powiat dębicki: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat lubaczowski: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat łańcucki: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat poznański: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgstr ""
+
+msgid "Powiat rzeszowski: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgstr ""
+
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgstr ""
+
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
 msgstr ""
 
@@ -16014,9 +16241,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -16146,6 +16382,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -16161,7 +16412,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -16503,6 +16754,11 @@ msgstr ""
 "Implementa una línia d''ordes i habilita la creació de les vostres pròpies "
 "ordes. Utilitzeu l''enllaç per veure les ordes estàndard (arc, cercle, etc.)"
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -16602,13 +16858,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr "Mode de mapa d''ajustament de la imatgeria en estil WMSPlugin"
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-"Este connector experimental permet al JOSM emmagatzemar les tessel·les en "
-"fitxers de bases de dades, no en immensos directoris"
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -16680,7 +16929,7 @@ msgstr ""
 "connector podreu crear, tancar, invalidar, reobrir i comentar els errors "
 "reportats que es mostren."
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -16698,9 +16947,6 @@ msgstr "Fusiona les parts de les vies que se superposen"
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr "Afig una prohibició de gir a l''esquerra a conjunts de 4 o 5 vies"
 
-msgid "Simplifies download from different read-only APIs."
-msgstr "Simplifica la descàrrega de diferents APIs de només lectura"
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 "Permet l''assignació d''etiquetes a tots els objectes d''una àrea "
@@ -16798,6 +17044,14 @@ msgstr ""
 "Este connector simplifica el procés d''afegir i modificar rutes de transport "
 "públic al mapa."
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr "Tauler de creació i modificació de relacions i multipolígons"
 
@@ -16840,6 +17094,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr "Modifica funcions per OpenSeaMap"
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -16940,9 +17197,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr "Habilita la cerca de fites importades d''un fitxer gpx"
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr "Selecciona una seqüència de vies connectades sense bifurcacions"
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -17348,6 +17602,14 @@ msgid "basketball"
 msgstr "bàsquet"
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr "Esport de boles"
 
@@ -17372,10 +17634,6 @@ msgid "cricket"
 msgstr "criquet"
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr "Xarxa de criquet"
-
-msgctxt "sport"
 msgid "croquet"
 msgstr "croquet"
 
@@ -17392,6 +17650,10 @@ msgid "equestrian"
 msgstr "equitació"
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr "jocs gaèlics"
 
@@ -17408,14 +17670,26 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
-msgstr "hoquei"
-
-msgctxt "sport"
 msgid "horse_racing"
 msgstr "cursa de cavalls"
 
 msgctxt "sport"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
+msgstr ""
+
+msgctxt "sport"
 msgid "motor"
 msgstr "motor"
 
@@ -17428,6 +17702,10 @@ msgid "racquet"
 msgstr "raqueta"
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr "rugbi a 13"
 
@@ -17440,6 +17718,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr "tir"
 
@@ -17467,6 +17749,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr "tennis"
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr "Quota"
 
@@ -17858,6 +18152,9 @@ msgstr "Enllaç de via terciària"
 msgid "Unclassified"
 msgstr "Sense referència"
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr "Llocs de pas"
 
@@ -17934,6 +18231,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr "Carretera (tipus no conegut)"
 
@@ -18485,6 +18785,12 @@ msgstr "Radar"
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -18675,8 +18981,13 @@ msgstr "Columnata"
 msgid "Avalanche Protector"
 msgstr "Túnel de protecció contra allaus"
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
-msgstr "Aigua"
+msgstr ""
 
 msgid "Drain"
 msgstr "Canal de drenatge"
@@ -18728,6 +19039,10 @@ msgstr "Embassament"
 msgid "Covered Reservoir"
 msgstr "Dipòsit cobert"
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -18869,6 +19184,120 @@ msgstr ""
 msgid "public"
 msgstr "públic"
 
+msgid "Marine Fuel"
+msgstr ""
+
+msgid "Agip"
+msgstr "Agip"
+
+msgid "Aral"
+msgstr "Aral"
+
+msgid "Avia"
+msgstr "Avia"
+
+msgid "BP"
+msgstr "BP"
+
+msgid "Chevron"
+msgstr "Chevron"
+
+msgid "Citgo"
+msgstr "Citgo"
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr "Esso"
+
+msgid "Exxon"
+msgstr "Exxon"
+
+msgid "Gulf"
+msgstr "Gulf"
+
+msgid "Mobil"
+msgstr "Mobil"
+
+msgid "OMV"
+msgstr "OMV"
+
+msgid "Petro-Canada"
+msgstr "Petro-Canada"
+
+msgid "Pioneer"
+msgstr "Pioneer"
+
+msgid "Q8"
+msgstr "Q8"
+
+msgid "Repsol"
+msgstr "Repsol"
+
+msgid "Shell"
+msgstr "Shell"
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr "Statoil"
+
+msgid "Sunoco"
+msgstr "Sunoco"
+
+msgid "Tamoil"
+msgstr "Tamoil"
+
+msgid "Texaco"
+msgstr "Texaco"
+
+msgid "Total"
+msgstr "Total"
+
+msgid "Independent"
+msgstr "Independent"
+
+msgid "Fuel types:"
+msgstr "Tipus de combustible:"
+
+msgid "Diesel"
+msgstr "Diesel"
+
+msgid "Bio Diesel"
+msgstr "Bio Diesel"
+
+msgid "Octane 80"
+msgstr "80 octans"
+
+msgid "Octane 91"
+msgstr "91 octans"
+
+msgid "Octane 92"
+msgstr "92 octans"
+
+msgid "Octane 95"
+msgstr "Súper 95 octans"
+
+msgid "Octane 98"
+msgstr "Súper 98 octans"
+
+msgid "Octane 100"
+msgstr "100 octans"
+
+msgid "E10 (10% Ethanol mix)"
+msgstr "E10 (10% de mescla d''etanol)"
+
+msgid "E85 (85% Ethanol mix)"
+msgstr "I85 (85% barreja d''etanol)"
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr "GLP (gas liquat de petroli)"
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr "GNC (Gas Natural Comprimit)"
+
 msgid "Pier"
 msgstr "Embarcador"
 
@@ -18985,6 +19414,9 @@ msgstr "Topall"
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr "Via aèria"
 
@@ -19108,132 +19540,21 @@ msgstr ""
 msgid "Fuel"
 msgstr "Benzinera"
 
-msgid "Agip"
-msgstr "Agip"
+msgid "With shop"
+msgstr "Amb botiga"
 
-msgid "Aral"
-msgstr "Aral"
+msgid "convenience"
+msgstr "de conveniència"
 
-msgid "Avia"
-msgstr "Avia"
+msgid "kiosk"
+msgstr "quiosc"
 
-msgid "BP"
-msgstr "BP"
-
-msgid "Chevron"
-msgstr "Chevron"
-
-msgid "Citgo"
-msgstr "Citgo"
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr "Esso"
-
-msgid "Exxon"
-msgstr "Exxon"
-
-msgid "Gulf"
-msgstr "Gulf"
-
-msgid "Mobil"
-msgstr "Mobil"
-
-msgid "OMV"
-msgstr "OMV"
-
-msgid "Petro-Canada"
-msgstr "Petro-Canada"
-
-msgid "Pioneer"
-msgstr "Pioneer"
-
-msgid "Q8"
-msgstr "Q8"
-
-msgid "Repsol"
-msgstr "Repsol"
-
-msgid "Shell"
-msgstr "Shell"
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr "Statoil"
-
-msgid "Sunoco"
-msgstr "Sunoco"
-
-msgid "Tamoil"
-msgstr "Tamoil"
-
-msgid "Texaco"
-msgstr "Texaco"
-
-msgid "Total"
-msgstr "Total"
-
-msgid "Independent"
-msgstr "Independent"
-
-msgid "With shop"
-msgstr "Amb botiga"
-
-msgid "convenience"
-msgstr "de conveniència"
-
-msgid "kiosk"
-msgstr "quiosc"
-
-msgid "Fuel types:"
-msgstr "Tipus de combustible:"
-
-msgid "Diesel"
-msgstr "Diesel"
-
-msgid "Bio Diesel"
-msgstr "Bio Diesel"
-
-msgid "Diesel (Gas To Liquid - ultimate diesel)"
-msgstr "Gasoli (GTL, ultimate, etc)"
+msgid "Diesel (Gas To Liquid - ultimate diesel)"
+msgstr "Gasoli (GTL, ultimate, etc)"
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr "Dièsel per als vehicles pesants - Gasoil B"
 
-msgid "Octane 80"
-msgstr "80 octans"
-
-msgid "Octane 91"
-msgstr "91 octans"
-
-msgid "Octane 92"
-msgstr "92 octans"
-
-msgid "Octane 95"
-msgstr "Súper 95 octans"
-
-msgid "Octane 98"
-msgstr "Súper 98 octans"
-
-msgid "Octane 100"
-msgstr "100 octans"
-
-msgid "E10 (10% Ethanol mix)"
-msgstr "E10 (10% de mescla d''etanol)"
-
-msgid "E85 (85% Ethanol mix)"
-msgstr "I85 (85% barreja d''etanol)"
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr "GLP (gas liquat de petroli)"
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr "GNC (Gas Natural Comprimit)"
-
 msgid "1/25 mix (mofa/moped)"
 msgstr "barreja 1/25 (ciclomotor)"
 
@@ -19454,9 +19775,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr "#CD853F"
 
-msgid "route segment"
-msgstr "segment de ruta"
-
 msgid "stop position"
 msgstr "situació de la parada"
 
@@ -19475,6 +19793,9 @@ msgstr "andana (només eixida)"
 msgid "platform (entry only)"
 msgstr "andana (només entrada)"
 
+msgid "route segment"
+msgstr "segment de ruta"
+
 msgid "Route Master"
 msgstr ""
 
@@ -19677,6 +19998,12 @@ msgstr "Hotel"
 msgid "Stars"
 msgstr "Estrelles"
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr "Motel"
 
@@ -19767,6 +20094,9 @@ msgstr "sandwich"
 msgid "sushi"
 msgstr "sushi"
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr "Microcerveseria"
 
@@ -19981,6 +20311,9 @@ msgstr "Sauna"
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr "Bordell"
 
@@ -20468,8 +20801,8 @@ msgstr "Mostra la pressió atmosfèrica"
 msgid "Shows humidity"
 msgstr "Mostra la humitat"
 
-msgid "Recycling"
-msgstr "Recollida selectiva / Punt Net"
+msgid "Recycling Container"
+msgstr ""
 
 msgid "Batteries"
 msgstr "Piles"
@@ -20477,20 +20810,47 @@ msgstr "Piles"
 msgid "Cans"
 msgstr "Llaunes"
 
+msgid "Cardboard"
+msgstr ""
+
+msgid "Electrical Appliances"
+msgstr ""
+
 msgid "Glass"
 msgstr "Vidre"
 
+msgid "Glass Bottles"
+msgstr ""
+
+msgid "Green Waste"
+msgstr ""
+
 msgid "Paper"
 msgstr "Paper"
 
+msgid "Plastic"
+msgstr ""
+
+msgid "Plastic Bottles"
+msgstr ""
+
+msgid "Plastic Packaging"
+msgstr ""
+
 msgid "Scrap Metal"
 msgstr "Ferralla"
 
-msgid "container"
-msgstr "contenidor"
+msgid "Shoes"
+msgstr "Sabateria"
+
+msgid "Small Appliances"
+msgstr ""
+
+msgid "Waste"
+msgstr ""
 
-msgid "centre"
-msgstr "centre"
+msgid "Recycling Centre"
+msgstr ""
 
 msgid "Waste Basket/Trash Can"
 msgstr ""
@@ -20693,6 +21053,9 @@ msgstr "Tir amb arc"
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr "Escalada"
 
@@ -20868,12 +21231,18 @@ msgstr "Beisbol"
 msgid "Basketball"
 msgstr "Bàsquet"
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr "Voleibol"
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr "Golf"
 
@@ -20889,14 +21258,14 @@ msgstr ""
 msgid "Cricket"
 msgstr "Criquet"
 
-msgid "Cricket Nets"
-msgstr "Criquet amb xarxa"
-
 msgid "Croquet"
 msgstr "Croquet"
 
-msgid "Hockey"
-msgstr "Hoquei"
+msgid "Field Hockey"
+msgstr ""
+
+msgid "Ice Hockey"
+msgstr ""
 
 msgid "Pelota"
 msgstr "Pilota Basca/Valenciana"
@@ -20919,9 +21288,6 @@ msgstr ""
 msgid "Motocross"
 msgstr "Motocròs"
 
-msgid "Safety Training"
-msgstr "Entrenament en Seguretat"
-
 msgid "Model Aerodrome"
 msgstr "Aeromodelisme"
 
@@ -20940,9 +21306,6 @@ msgstr "pista"
 msgid "RC Car"
 msgstr "Pista per a cotxes teledirigits"
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr "Construccions"
 
@@ -21015,6 +21378,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -22335,9 +22706,6 @@ msgstr ""
 msgid "Boutique"
 msgstr "Boutique"
 
-msgid "Shoes"
-msgstr "Sabateria"
-
 msgid "Outdoor"
 msgstr "Paradetes"
 
@@ -23350,12 +23718,12 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
-msgstr "Número de fax"
-
 msgid "Email Address"
 msgstr "Adreça electrònica"
 
+msgid "Fax Number"
+msgstr "Número de fax"
+
 msgid "Image"
 msgstr "Imatge"
 
@@ -23780,6 +24148,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -23804,6 +24175,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -23864,6 +24247,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -23954,9 +24340,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr "el voltatge ha d''estar en volts sense unitat/delimitador/espais"
 
@@ -24337,6 +24732,9 @@ msgstr "Afig punts fixos en clicar"
 msgid "Add fixed points on spacebar"
 msgstr "Afig punts fixos a la barra d''espai"
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr "Dibuixa només polígons tancats"
 
@@ -24399,9 +24797,6 @@ msgstr "Dibuixa la via amb el ratolí"
 msgid "min distance={0} px ({1} m)"
 msgstr "distància mínima={0} px ({1} m)"
 
-msgid "Convert way to FastDraw line"
-msgstr "Converteix via en línia FastDraw"
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr "Eps={0}, {1} punts, {2} p/km"
 
@@ -25268,47 +25663,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -25317,10 +25721,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -26000,6 +26416,9 @@ msgstr "Inicialitza decalatge"
 msgid "Reset offset (only vector images)"
 msgstr "Inicialitza decalatge (només imatges vectorials)"
 
+msgid "Blank Layer"
+msgstr "Capa buida"
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr "Capa WMS ({0}), {1} tessel·les carregades"
 
@@ -27378,205 +27797,511 @@ msgstr "terra"
 msgid "Maximum number of segments per way"
 msgstr "Nombre màxim de segments per via"
 
-msgid "Maximum number of nodes in initial trace"
-msgstr "Nombre màxim de nodes al traçat inicial"
+msgid "Maximum number of nodes in initial trace"
+msgstr "Nombre màxim de nodes al traçat inicial"
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr "Nombre màxim de grisos a considerar com aigua (0-255)"
+
+msgid "Line simplification accuracy (degrees)"
+msgstr "Precisió de la simplificació de línia (graus)"
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr "Resolució de les tessel·les Landsat (píxels per grau)"
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr "Mida de les tessel·les Landsat (píxels)"
+
+msgid "Shift all traces to east (degrees)"
+msgstr "Desplaça totes les traces vers l''est (graus)"
+
+msgid "Shift all traces to north (degrees)"
+msgstr "Desplaça totes les traces vers el nord (graus)"
+
+msgid "Direction to search for land"
+msgstr "Direcció per cercar terra"
+
+msgid "Tag ways as"
+msgstr "Etiquetar la via com"
+
+msgid "WMS Layer"
+msgstr "Capa WMS"
+
+msgid "Maximum cache size (MB)"
+msgstr "Mida màxima de la memòria cau (MB)"
+
+msgid "Maximum cache age (days)"
+msgstr "Antiguitat màxima de la memòria cau (dies)"
+
+msgid "Source text"
+msgstr "Text font"
+
+msgid "Lakewalker Plugin Preferences"
+msgstr "Preferències del connnector Lakewalker"
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr "Un connector per traçar mases d''aigua sobre imatgeria Landsat."
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+"Nombre màxim de segments permesos a cada via generada. Valor predeterminat "
+"250."
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+"Nombre màxim de nodes a generar abans de simplificar les línies. Valor "
+"predeterminat 50000."
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+"Màxim nombre de grisos per ser condierats com a aigua (en base a dades "
+"Landsat IR-1). El valor pot estar entre 0 i 255. Valor predeterminat 90."
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+"Precisió de la simplificació de línies Douglas-Peucker mmesurada "
+"engraus.<br>Valors petits donaran més nodes i línies més precises. Valor "
+"predeterminat 0.0003"
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+"Resolució de les tessel·les Landsat mesurats en píxels per grau. Valor "
+"predeterminat 4000."
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+"Mida d''una tessel·la Landsat mesurat en píxels. Valor predeterminat 2000."
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+"Aplicar un decalatge en graus a tots els punts vers l''Est. Valor "
+"predeterminat 0."
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+"Aplicar un decalatge en graus a tots els punts vers el Nord. Valor "
+"predeterminat 0."
+
+msgid "Direction to search for land. Default east."
+msgstr "Direcció vers la qual cercar terra. (predeterminat l''Est)"
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+"Etiqueta les vies com aigua, lína costanera, terra o res. Valor "
+"predeterminat aigua"
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr "Capa WMS a utilitzar per traçar. IR1 per defecte."
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+"Mida màxima de cada directori de memòri intermèdia en bytes. 300 MB per "
+"defecte."
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+"Antiguitat màxima de cada fitxer de la memòria cau en dies. 100 dies per "
+"defecte."
+
+msgid "Data source text. Default is Landsat."
+msgstr "Text de la font de dades. Landsat per defecte."
+
+msgid "Downloading image tile..."
+msgstr "Descarregant imatge en mosaic ..."
+
+msgid "Could not acquire image"
+msgstr "No és possible d''adquirir la imatge"
+
+msgid "Connection Failed"
+msgstr "Ha fallat la connexió"
+
+msgid "Not connected"
+msgstr "No connectat"
+
+msgid "Connecting"
+msgstr "S''està connectant"
+
+msgid "Connected"
+msgstr "Connectat"
+
+msgid "no name"
+msgstr "sense nom"
+
+msgid "Live GPS"
+msgstr "Live GPS"
+
+msgid "Show GPS data."
+msgstr "Mostra dades GPS."
+
+msgid "Status"
+msgstr "Estat"
+
+msgid "Way Info"
+msgstr "Informació de la via"
+
+msgid "Speed"
+msgstr "Velocitat"
+
+msgid "Course"
+msgstr "Curs"
+
+msgid "LiveGPS layer"
+msgstr "Capa LiveGPS"
+
+msgid "Capture GPS Track"
+msgstr "Captura un recorregut amb GPS"
+
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgstr ""
+"Connecta amb el servidor gpsd i mostra la posició actual a la capa LiveGPS"
+
+msgid "Center Once"
+msgstr "Centrar un cop"
+
+msgid "Center the LiveGPS layer to current position."
+msgstr "Centrar la capa LiveGPS a la posició actual"
+
+msgid "Auto-Center"
+msgstr "Autocentrat"
+
+msgid "Continuously center the LiveGPS layer to current position."
+msgstr "Centrar de manera contínua laq capa LiveGPS a la posició actual"
+
+msgid "Open MapDust"
+msgstr "Obri MapDust"
+
+msgid "MapDust bug reports"
+msgstr "Llistats de probelemes de MapDust"
+
+msgid "Activates the MapDust bug reporter plugin"
+msgstr "Activa el connector de generació de llistats de problemes de MapDust"
+
+msgid "Missing input data"
+msgstr "Manquen dades"
+
+msgid "Mapillary Images"
+msgstr ""
+
+msgid "Mapillary layer"
+msgstr ""
+
+msgid "Total images:"
+msgstr ""
+
+msgid "images"
+msgstr ""
+
+msgid "Mapillary"
+msgstr ""
+
+msgid "Create Mapillary layer"
+msgstr ""
+
+msgid "Start Mapillary layer"
+msgstr ""
+
+msgid "Download Mapillary images in current view"
+msgstr ""
+
+msgid "Export pictures"
+msgstr ""
+
+msgid "Export Mapillary pictures"
+msgstr ""
+
+msgid "Export images"
+msgstr ""
+
+msgid "Import pictures"
+msgstr ""
+
+msgid "Import local pictures"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer"
+msgstr ""
+
+msgid "Select pictures"
+msgstr ""
+
+msgid "Import pictures into sequence"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer in a sequence"
+msgstr ""
+
+msgid "Join mode"
+msgstr ""
+
+msgid "Join/unjoin pictures"
+msgstr ""
+
+msgid "Join Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures"
+msgstr ""
+
+msgid "Upload Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures."
+msgstr ""
+
+msgid "Walk mode"
+msgstr ""
+
+msgid "Start walk mode"
+msgstr ""
+
+msgid "Zoom to selected image"
+msgstr ""
+
+msgid "Zoom to the currently selected Mapillary image"
+msgstr ""
+
+msgid "Uploaded {0} images"
+msgstr ""
+
+msgid "Approve upload on the website"
+msgstr ""
+
+msgid "View in website"
+msgstr ""
+
+msgid "Copy key"
+msgstr ""
+
+msgid "Copy key tag"
+msgstr ""
+
+msgid "Edit on website"
+msgstr ""
+
+msgid "Export all images"
+msgstr ""
+
+msgid "Export selected sequence"
+msgstr ""
+
+msgid "Export selected images"
+msgstr ""
+
+msgid "Rewrite imported images"
+msgstr ""
+
+msgid "Select a folder"
+msgstr ""
+
+msgid "Explore"
+msgstr ""
+
+msgid "Select a directory"
+msgstr ""
+
+msgid "Speed limit"
+msgstr ""
+
+msgid "Give way"
+msgstr ""
+
+msgid "No entry"
+msgstr ""
+
+msgid "Intersection danger"
+msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
-msgstr "Nombre màxim de grisos a considerar com aigua (0-255)"
+msgid "Mandatory direction (any)"
+msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
-msgstr "Precisió de la simplificació de línia (graus)"
+msgid "No turn"
+msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
-msgstr "Resolució de les tessel·les Landsat (píxels per grau)"
+msgid "Uneven road"
+msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
-msgstr "Mida de les tessel·les Landsat (píxels)"
+msgid "No parking"
+msgstr ""
 
-msgid "Shift all traces to east (degrees)"
-msgstr "Desplaça totes les traces vers l''est (graus)"
+msgid "No overtaking"
+msgstr ""
 
-msgid "Shift all traces to north (degrees)"
-msgstr "Desplaça totes les traces vers el nord (graus)"
+msgid "Pedestrian crossing"
+msgstr ""
 
-msgid "Direction to search for land"
-msgstr "Direcció per cercar terra"
+msgid "Years"
+msgstr ""
 
-msgid "Tag ways as"
-msgstr "Etiquetar la via com"
+msgid "Months"
+msgstr ""
 
-msgid "WMS Layer"
-msgstr "Capa WMS"
+msgid "Days"
+msgstr ""
 
-msgid "Maximum cache size (MB)"
-msgstr "Mida màxima de la memòria cau (MB)"
+msgid "Mapillary filter"
+msgstr ""
 
-msgid "Maximum cache age (days)"
-msgstr "Antiguitat màxima de la memòria cau (dies)"
+msgid "Open Mapillary filter dialog"
+msgstr ""
 
-msgid "Source text"
-msgstr "Text font"
+msgid "Downloaded images"
+msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
-msgstr "Preferències del connnector Lakewalker"
+msgid "Only images with signs"
+msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
-msgstr "Un connector per traçar mases d''aigua sobre imatgeria Landsat."
+msgid "Choose signs"
+msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Mapillary history"
 msgstr ""
-"Nombre màxim de segments permesos a cada via generada. Valor predeterminat "
-"250."
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Open Mapillary history dialog"
 msgstr ""
-"Nombre màxim de nodes a generar abans de simplificar les línies. Valor "
-"predeterminat 50000."
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Open Mapillary window"
 msgstr ""
-"Màxim nombre de grisos per ser condierats com a aigua (en base a dades "
-"Landsat IR-1). El valor pot estar entre 0 i 255. Valor predeterminat 90."
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Mapillary dialog"
 msgstr ""
-"Precisió de la simplificació de línies Douglas-Peucker mmesurada "
-"engraus.<br>Valors petits donaran més nodes i línies més precises. Valor "
-"predeterminat 0.0003"
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary main dialog"
 msgstr ""
-"Resolució de les tessel·les Landsat mesurats en píxels per grau. Valor "
-"predeterminat 4000."
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Next picture"
 msgstr ""
-"Mida d''una tessel·la Landsat mesurat en píxels. Valor predeterminat 2000."
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Shows the next picture in the sequence"
 msgstr ""
-"Aplicar un decalatge en graus a tots els punts vers l''Est. Valor "
-"predeterminat 0."
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Previous picture"
 msgstr ""
-"Aplicar un decalatge en graus a tots els punts vers el Nord. Valor "
-"predeterminat 0."
 
-msgid "Direction to search for land. Default east."
-msgstr "Direcció vers la qual cercar terra. (predeterminat l''Est)"
+msgid "Shows the previous picture in the sequence"
+msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Jump to red"
 msgstr ""
-"Etiqueta les vies com aigua, lína costanera, terra o res. Valor "
-"predeterminat aigua"
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
-msgstr "Capa WMS a utilitzar per traçar. IR1 per defecte."
+msgid "Jumps to the picture at the other side of the red line"
+msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to blue"
 msgstr ""
-"Mida màxima de cada directori de memòri intermèdia en bytes. 300 MB per "
-"defecte."
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
-"Antiguitat màxima de cada fitxer de la memòria cau en dies. 100 dies per "
-"defecte."
 
-msgid "Data source text. Default is Landsat."
-msgstr "Text de la font de dades. Landsat per defecte."
+msgid "Stops the walk."
+msgstr ""
 
-msgid "Downloading image tile..."
-msgstr "Descarregant imatge en mosaic ..."
+msgid "Play"
+msgstr ""
 
-msgid "Could not acquire image"
-msgstr "No és possible d''adquirir la imatge"
+msgid "Continues with the paused walk."
+msgstr ""
 
-msgid "Connection Failed"
-msgstr "Ha fallat la connexió"
+msgid "Pause"
+msgstr ""
 
-msgid "Not connected"
-msgstr "No connectat"
+msgid "Pauses the walk."
+msgstr ""
 
-msgid "Connecting"
-msgstr "S''està connectant"
+msgid "Reverse buttons position when displaying images."
+msgstr ""
 
-msgid "Connected"
-msgstr "Connectat"
+msgid "Display hour when the picture was taken"
+msgstr ""
 
-msgid "no name"
-msgstr "sense nom"
+msgid "Use 24 hour format"
+msgstr ""
 
-msgid "Live GPS"
-msgstr "Live GPS"
+msgid "Move to picture''s location with next/previous buttons"
+msgstr ""
 
-msgid "Show GPS data."
-msgstr "Mostra dades GPS."
+msgid "Download mode: "
+msgstr ""
 
-msgid "Status"
-msgstr "Estat"
+msgid "Upload selected sequence"
+msgstr ""
 
-msgid "Way Info"
-msgstr "Informació de la via"
+msgid "Delete after upload"
+msgstr ""
 
-msgid "Speed"
-msgstr "Velocitat"
+msgid "Wait for full quality pictures"
+msgstr ""
 
-msgid "Course"
-msgstr "Curs"
+msgid "Follow selected image"
+msgstr ""
 
-msgid "LiveGPS layer"
-msgstr "Capa LiveGPS"
+msgid "Go forward"
+msgstr ""
 
-msgid "Capture GPS Track"
-msgstr "Captura un recorregut amb GPS"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
-"Connecta amb el servidor gpsd i mostra la posició actual a la capa LiveGPS"
 
-msgid "Center Once"
-msgstr "Centrar un cop"
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Center the LiveGPS layer to current position."
-msgstr "Centrar la capa LiveGPS a la posició actual"
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Auto-Center"
-msgstr "Autocentrat"
+msgid "2 images unjoined"
+msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
-msgstr "Centrar de manera contínua laq capa LiveGPS a la posició actual"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
+msgstr ""
 
-msgid "Open MapDust"
-msgstr "Obri MapDust"
+msgid "Downloading"
+msgstr ""
 
-msgid "MapDust bug reports"
-msgstr "Llistats de probelemes de MapDust"
+msgid "Select mode"
+msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
-msgstr "Activa el connector de generació de llistats de problemes de MapDust"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
+msgstr ""
 
-msgid "Missing input data"
-msgstr "Manquen dades"
+msgid "Downloading Mapillary images"
+msgstr ""
 
-msgid "Mapillary"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "No images found"
 msgstr ""
 
-msgid "Export"
-msgstr "Exporta"
+msgid "Finished upload"
+msgstr ""
+
+msgid "Uploading: {0}"
+msgstr ""
 
 msgid "Measured values"
 msgstr "Valors mesurats"
@@ -27597,6 +28322,9 @@ msgstr "Longitud de la selecció"
 msgid "Selection Area"
 msgstr "Selecció de l''àrea"
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr "Angle"
 
@@ -27664,49 +28392,6 @@ msgstr "Crear una prohibició de gir de tipus Michigan esquerra"
 msgid "Unable to find via nodes. Please check your selection"
 msgstr "No s''han trobat nodes. Per favor verifiqueu la vostra selecció"
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-"Consulta XAPI, per exemple, '''' (per descarregar totes les dades), "
-"''[highway=*]'', o ''[[network=VRR][ref=603|613]''"
-
-msgid "Download from OSM mirror..."
-msgstr "Descarregar del servidor rèplica OSM ..."
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr "Esta consulta XAPI pareix invàlida, per favor torneu a verificar-la."
-
-msgid "Object type: "
-msgstr "Tipus d''objecte "
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr "Tipus d''objecte OSM a descarregar (''*'' indica qualsevol)"
-
-msgid "XAPI query: "
-msgstr "Consulta XAPI: "
-
-msgid "Download from Overpass API ..."
-msgstr "Descarrega de l''API d''Overpass..."
-
-msgid "Download map data from Overpass API server."
-msgstr "Descarrega dades del servidor de l''API d''Overpass..."
-
-msgid "Overpass query: "
-msgstr "Consulta d''Overpass: "
-
-msgid "Select OSM mirror URL"
-msgstr "Seleccionar la URL del servidor rèplica d''OSM"
-
-msgid "Select OSM mirror URL to download from."
-msgstr "Seleccioneu una rèplica de la URL d''OSM per fer la descàrrega."
-
-msgid "Base URL"
-msgstr "Adreça URL base"
-
-msgid "Enforce meta data"
-msgstr "Aplica meta dades"
-
 msgid "About Plugin"
 msgstr "Quant al connector"
 
@@ -27962,6 +28647,9 @@ msgstr ""
 "Mostra les diferències entre el conjunt de dades actuals i les existents al "
 "servidor OSM"
 
+msgid "Tools"
+msgstr "Eines"
+
 msgid "Open tools menu for this data."
 msgstr "Obri el menú d''eines per estes dades."
 
@@ -29255,6 +29943,27 @@ msgstr "Transport públic: activar fites"
 msgid "Public Transport: Edit waypoint name"
 msgstr "Transport públic: modificar el nom d''una fita"
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr "Caixa d''eines de relacions"
 
@@ -29432,6 +30141,9 @@ msgstr "Conjunt de canvis revertit"
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr "Manca un objectiu de fusió per {0} amb l''ID {1}"
 
@@ -29441,6 +30153,9 @@ msgstr "Historial dels objectes"
 msgid "History reverter"
 msgstr "Historial de reversions"
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr "Preparant historial..."
 
@@ -29628,6 +30343,9 @@ msgstr "Nou valor per {0}"
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr "Manca la preferència ''{0}''. No és possible d''inicialitzar SdsApi."
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -29833,6 +30551,39 @@ msgstr "Llindar per fusionar nodes propers"
 msgid "SeaMap Editor"
 msgstr "Editor de cartes nàutiques"
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr "Exporta OSM"
 
@@ -29842,6 +30593,9 @@ msgstr "Exporta dades de trànsit a un fitxer SUMO"
 msgid "SUMO Export"
 msgstr "Exportació SUMO"
 
+msgid "Export"
+msgstr "Exporta"
+
 msgid "AutoSave LiveData"
 msgstr "Desament automàtic de LiveData"
 
@@ -30090,9 +30844,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -31779,9 +32530,6 @@ msgstr "Cercar fites"
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr "Cercar fita. Feu clic i moveu el mapa sobre la fita."
 
-msgid "Way Select"
-msgstr "Selecció de via"
-
 msgid "Add names from Wikipedia"
 msgstr "Afig noms de la viquipèdia"
 
diff --git a/i18n/po/cs.po b/i18n/po/cs.po
index e74dd72..10f0d18 100644
--- a/i18n/po/cs.po
+++ b/i18n/po/cs.po
@@ -7,16 +7,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
-"PO-Revision-Date: 2015-05-06 10:25+0000\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
+"PO-Revision-Date: 2015-10-05 11:12+0000\n"
 "Last-Translator: Dalibor Jelínek <launchpad.net at dalibor.cz>\n"
 "Language-Team: Czech <cs at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:37+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:38+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: cs\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -97,21 +97,18 @@ msgstr "Načítání nastavení mapových podkladů"
 msgid "Updating user interface"
 msgstr "Aktualizace uživatelského rozhraní"
 
-msgid "{0} completed in {1}"
-msgstr "{0} dokončeno v {1}"
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "Ignoruji poškozené URL souboru: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "Ignoruji vadné URL: \"{0}\""
 
 msgid "Warning"
 msgstr "Varování"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "Ignoruji poškozené URL souboru: \"{0}\""
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr "Parametr ''downloadgps'' neakceptuje jména souborů, ani URL souborů"
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "Ignoruji vadné URL: \"{0}\""
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -464,6 +461,9 @@ msgstr "Přepínat panely dialogů"
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Přepínat panely dialogů, maximalizovat zobrazení mapy"
 
+msgid "Distribute Nodes"
+msgstr "Distribuovat uzly"
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr "Rozdělit zvolené uzly ve stejné vzdálenosti podél přímky."
 
@@ -1118,6 +1118,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr "Prosím zvolte cesty s úhlem přibližně 90 nebo 180 stupňů"
 
+msgid "Download from Overpass API ..."
+msgstr "Stáhnout z Overpass API..."
+
+msgid "Download map data from Overpass API server."
+msgstr "Stáhnout data mapy ze serveru Overpass API."
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr "Vytváří dotaz Overpass za použití pomocníka dotazů Overpass Turbo"
+
+msgid "Build query"
+msgstr "Sestavit dotaz"
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr "<html>Pomocník Overpass nemůže zpracovat následující dotaz:"
+
+msgid "Parse error"
+msgstr "Chyba zpracování"
+
+msgid "Overpass query: "
+msgstr "Dotaz Overpass: "
+
+msgid "Overpass server: "
+msgstr "Server Overpass: "
+
 msgid "Paste"
 msgstr "Vložit"
 
@@ -2115,15 +2139,6 @@ msgstr "Přichytávání úhlů aktivní."
 msgid "Finish drawing."
 msgstr "Dokončit kreslení"
 
-msgid "FIX"
-msgstr "OPRAVIT"
-
-msgid "draw angle snap"
-msgstr "Kreslit přichytávání úhlů"
-
-msgid "draw angle snap highlight"
-msgstr "Zvýraznění přichytávání úhlů"
-
 msgid "Toggle snapping by {0}"
 msgstr "přepínat přichytávání {0}"
 
@@ -2145,6 +2160,15 @@ msgstr "0,45,90,..."
 msgid "0,30,45,60,90,..."
 msgstr "0,30,45,60,90,..."
 
+msgid "FIX"
+msgstr "OPRAVIT"
+
+msgid "draw angle snap"
+msgstr "Kreslit přichytávání úhlů"
+
+msgid "draw angle snap highlight"
+msgstr "Zvýraznění přichytávání úhlů"
+
 msgid "Angle snapping"
 msgstr "Přichytávání úhlů"
 
@@ -2276,9 +2300,6 @@ msgstr ""
 "Vytváření rovnoběžné cesty\n"
 "Vybrané cesty musí tvořit jedinou nerozvětvenou dráhu"
 
-msgid "Make parallel way error"
-msgstr "Chyba při vytváření rovnoběžné cesty"
-
 msgid "Drag play head"
 msgstr "Posunout symbol přehrávání"
 
@@ -2520,9 +2541,15 @@ msgstr "všechny objekty"
 msgid "Also include incomplete and deleted objects in search."
 msgstr "Zahrnout do hledání i nekompletní a smazané objekty."
 
+msgid "standard"
+msgstr "standardní"
+
 msgid "regular expression"
 msgstr "regulární výraz"
 
+msgid "MapCSS selector"
+msgstr "Selektor MapCSS"
+
 msgid "add toolbar button"
 msgstr "Přidat tlačítko do nástrojové lišty"
 
@@ -2746,6 +2773,10 @@ msgid "RX"
 msgstr "RX"
 
 msgctxt "search"
+msgid "CSS"
+msgstr "CSS"
+
+msgctxt "search"
 msgid "A"
 msgstr "A"
 
@@ -2796,6 +2827,9 @@ msgstr "Číselný rozsah byl překročen"
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr "Neočekávaný symbol. Očekáváno {0}, nalezeno {1}"
 
+msgid "Failed to parse MapCSS selector"
+msgstr "Selhalo procházení selektoru MapCSS"
+
 msgid "Unexpected token: {0}"
 msgstr "Neočekávaný token: {0}"
 
@@ -3309,6 +3343,24 @@ msgstr "Chybějící adresář keše se nepodařilo vytvořit: {0}"
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr "<html>Nepodařilo se vytvořit chybějící adresář keše: {0}</html>"
 
+msgid "Unable to delete temporary file {0}"
+msgstr "Nemohu smazat dočasný soubor {0}"
+
+msgid "Unable to set file non-readable {0}"
+msgstr "Nemohu nastavit soubor na nečitelný {0}"
+
+msgid "Unable to set file non-writable {0}"
+msgstr "Nemohu nastavit soubor na nezapisovatelný {0}"
+
+msgid "Unable to set file non-executable {0}"
+msgstr "Nemohu nastavit soubor na nespustitelný {0}"
+
+msgid "Unable to set file readable {0}"
+msgstr "Nemohu nastasvit soubor na čitelný {0}"
+
+msgid "Unable to set file writable {0}"
+msgstr "Nemohu nastavit soubor na zapisovatelný {0}"
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3446,12 +3498,50 @@ msgctxt "compass"
 msgid "E"
 msgstr "V"
 
-msgid "Not in cache"
-msgstr "Není v keši"
-
 msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr "Projekce ''{0}'' nenalezena, záložku ''{1}'' nelze použít"
 
+msgid "HTTP error {0} when loading tiles"
+msgstr "Chyba HTTP {0} při načítání dlaždic"
+
+msgid "Error downloading tiles: {0}"
+msgstr "Chyba při stahování dlaždic: {0}"
+
+msgid "Could not load image from tile server"
+msgstr "Nemohu načíst obrázek ze serveru dlaždic"
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+"{0} není platný argument WMS. Prosím, zkontrolujte toto URL serveru:\n"
+"{1}"
+
+msgid "Select WMTS layer"
+msgstr "Zvolit vrstvu WMTS"
+
+msgid "Layer name"
+msgstr "Název vrstvy"
+
+msgid "Projection"
+msgstr "Projekce"
+
+msgid "Matrix set identifier"
+msgstr "Identifikátor množiny matic"
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr "Dokument getCapabilities nedefinuje žádné vrstvy: {0}"
+
+msgid "No layer selected"
+msgstr "Není zvolena žádná vrstva"
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
+msgstr ""
+"Podporovány jsou pouze čtvercové dlaždice. {0}x{1} vráceno serverem pro "
+"TileMatrix identifikátor {2}"
+
 msgid "ID > 0 expected. Got {0}."
 msgstr "očekáváno id > 0. Nalezeno {0}"
 
@@ -3658,6 +3748,12 @@ msgstr "text"
 msgid "areatext"
 msgstr "popisek ploch"
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr "Projekce UTM (''+proj=utm'') požaduje parametr ''+zone=...''."
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr "Pro parametr ''+zone=...'' očekáváno celé  číslo v rozsahu 1-60."
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr "Parametr musí začínat znakem ''+'' (nalezeno ''{0}'')"
 
@@ -3685,15 +3781,15 @@ msgstr "Elipsoid ''{0}'' není podporován."
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr "Tato kombinace parametrů elipsoidu není podporována."
 
+msgid "Unknown datum identifier: ''{0}''"
+msgstr "Neznámý identifikátor geodetického systému: ''{0}''"
+
 msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr "Je vyžadován elipsoid (+ellps=* nebo +a=*, +b =*)"
 
 msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr "Soubor s posuvy mřížky ''{0}'' pro volbu +nadgrids není podporován."
 
-msgid "Unknown datum identifier: ''{0}''"
-msgstr "Neznámý identifikátor geodetického systému: ''{0}''"
-
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
 msgstr ""
 "Je vyžadován geodetický systém (datum) (+datum=*, +towgs84=* nebo "
@@ -4051,7 +4147,7 @@ msgid "Long segments"
 msgstr "Dlouhé segmenty"
 
 msgid "This tests for long way segments, which are usually errors."
-msgstr ""
+msgstr "Kontroluje dlouhé segmenty cest, což jsou obvykle chyby."
 
 msgid "Very long segment of {0} kilometers"
 msgstr "Velmi dlouhý segment - {0} kilometrů"
@@ -4344,9 +4440,6 @@ msgstr "Délka klíče je větší, než je povoleno"
 msgid "Tags with empty values"
 msgstr "Klíče s prázdnými hodnotami"
 
-msgid "Invalid property key"
-msgstr "Neplatné klíče vlastností"
-
 msgid "Invalid white space in property key"
 msgstr "Neplatná mezera v klíči vlastnosti"
 
@@ -4356,12 +4449,24 @@ msgstr "Hodnota začíná nebo končí mezerou"
 msgid "Property values contain HTML entity"
 msgstr "Hodnota obsahuje HTML entitu"
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr "Klíč ''{0}'' vypadá jako ''{1}''."
+
+msgid "Misspelled property key"
+msgstr "Překlep v klíči vlastnosti"
+
 msgid "Key ''{0}'' not in presets."
 msgstr "Klíč ''{0}'' se nenachází mezi předvolbami."
 
 msgid "Presets do not contain property key"
 msgstr "Předvolby neobsahují použitý klíč"
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr "Hodnota ''{0}'' klíče ''{1}'' vypadá jako ''{2}''."
+
+msgid "Misspelled property value"
+msgstr "Překlep v hodnotě vlastnosti"
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr "Hodnota ''{0}'' klíče ''{1}'' není v předvolbách"
 
@@ -4546,15 +4651,15 @@ msgstr "Uzel cesty poblíž jiné cesty"
 msgid "Connected way end node near other way"
 msgstr "Spojený koncový uzel cest poblíž jiné cesty"
 
+msgid "Unconnected nodes without physical tags"
+msgstr "Nenapojené uzly bez fyzických značek"
+
 msgid "Untagged and unconnected nodes"
 msgstr "Neoznačené a nenapojené uzly"
 
 msgid "This test checks for untagged nodes that are not part of any way."
 msgstr "Tento test hledá neoznačené uzly, které nejsou součástí žádné cesty."
 
-msgid "Unconnected nodes without physical tags"
-msgstr "Nenapojené uzly bez fyzických značek"
-
 msgid "No tags"
 msgstr "Žádné značky"
 
@@ -4753,6 +4858,7 @@ msgstr "Klikněte pro zavření dialogu"
 msgid "Imagery offset"
 msgstr "Posunutí vrstvy snímků"
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr "Mapové podklady"
 
@@ -4995,45 +5101,56 @@ msgstr ""
 "důsledek chybějícího nastavení proxy serveru.<br>Chcete teď změnit nastavení "
 "proxy?"
 
+msgctxt "menu"
 msgid "File"
 msgstr "Soubor"
 
-msgid "Session"
-msgstr "Sezení"
+msgctxt "menu"
+msgid "Edit"
+msgstr "Upravit"
 
+msgctxt "menu"
 msgid "View"
 msgstr "Zobrazit"
 
+msgctxt "menu"
 msgid "Tools"
 msgstr "Nástroje"
 
+msgctxt "menu"
 msgid "More tools"
 msgstr "Další nástroje"
 
+msgctxt "menu"
 msgid "Data"
 msgstr "Data"
 
+msgctxt "menu"
 msgid "Selection"
 msgstr "Výběr"
 
+msgctxt "menu"
 msgid "Presets"
 msgstr "Předvolby"
 
 msgid "More..."
 msgstr "Více..."
 
+msgctxt "menu"
 msgid "GPS"
 msgstr "GPS"
 
+msgctxt "menu"
 msgid "Windows"
 msgstr "Okna"
 
+msgctxt "menu"
+msgid "Help"
+msgstr "Napověda"
+
 msgid "Menu: {0}"
 msgstr "Menu: {0}"
 
-msgid "Save and load the current session (list of layers, etc.)"
-msgstr "Uložení a načtení aktuálního sezení (seznam vrstev, atd.)"
-
 msgid "Edit toolbar"
 msgstr "Editační nástrojová lišta"
 
@@ -5057,6 +5174,7 @@ msgstr ""
 msgid "Search menu items"
 msgstr "Hledat položky menu"
 
+msgctxt "menu"
 msgid "Audio"
 msgstr "Zvuk"
 
@@ -5181,68 +5299,17 @@ msgstr "Na pozadí"
 msgid "Click to run job in background"
 msgstr "Kliknutím přesunete úlohu na pozadí"
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-"Podkladové letecké snímky mohou být špatně posunuty. Zkontrolujte jejich "
-"posun pomocí záznamů tras GPS!"
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-
-msgid "Details..."
-msgstr "Podrobnosti…"
-
-msgid "Hide this message and never show it again"
-msgstr "Skrýt tuto zprávu a již ji nikdy nezobrazovat"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-"<html>Prosím potvrďte odstranění <strong>1 objektu</strong> z <strong>1 "
-"relace</strong>.</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>Prosím potvrďte odstranění <strong>1 objektu</strong> z <strong>{0} "
-"relací</strong>.</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>Prosím potvrďte odstranění <strong>{0} objektů</strong> z <strong>{1} "
-"relací</strong>.</html>"
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] "Mažu {0} objekt"
-msgstr[1] "Mažu {0} objekty"
-msgstr[2] "Mažu {0} objektů"
-
-msgid "Delete objects"
-msgstr "Smazat objekty"
-
-msgid "To delete"
-msgstr "Ke smazání"
-
-msgid "From Relation"
-msgstr "Z relace"
-
-msgid "Pos."
-msgstr "Pos."
+msgid " ({0})"
+msgstr " ({0})"
 
-msgid "Role"
-msgstr "Role"
+msgid "{0} completed in {1}"
+msgstr "{0} dokončeno v {1}"
 
-msgid "Click to close the dialog and remove the object from the relations"
-msgstr "Klikněte pro uzavření dialogu a odstranění objektu z relací"
+msgid "Enlarge"
+msgstr "Zvětšit"
 
-msgid "Click to close the dialog and to abort deleting the objects"
-msgstr "Klikněte pro uzavření dialogu a zrušení mazání objektů"
+msgid "Shrink"
+msgstr "Zmenšit"
 
 msgid ""
 "<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
@@ -5705,6 +5772,9 @@ msgstr "Ponechat cizí stav vymazáno"
 msgid "Undecide conflict between deleted state"
 msgstr "Nerozhodnutý konflikt stavu vymazáno"
 
+msgid "Role"
+msgstr "Role"
+
 msgid "Primitive"
 msgstr "Prvek"
 
@@ -5996,6 +6066,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr "Aplikovat tuto roli na všechny členy"
 
+msgid "Pos."
+msgstr "Pos."
+
 msgid "Orig. Way"
 msgstr "Orig. cesta"
 
@@ -6158,6 +6231,48 @@ msgstr "Vyřešit konflikty"
 msgid "Resolve conflicts for ''{0}''"
 msgstr "Vyřešit konflikty pro ''{0}''"
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+"<html>Prosím potvrďte odstranění <strong>1 objektu</strong> z <strong>1 "
+"relace</strong>.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Prosím potvrďte odstranění <strong>1 objektu</strong> z <strong>{0} "
+"relací</strong>.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Prosím potvrďte odstranění <strong>{0} objektů</strong> z <strong>{1} "
+"relací</strong>.</html>"
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] "Mažu {0} objekt"
+msgstr[1] "Mažu {0} objekty"
+msgstr[2] "Mažu {0} objektů"
+
+msgid "Delete objects"
+msgstr "Smazat objekty"
+
+msgid "To delete"
+msgstr "Ke smazání"
+
+msgid "From Relation"
+msgstr "Z relace"
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr "Klikněte pro uzavření dialogu a odstranění objektu z relací"
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr "Klikněte pro uzavření dialogu a zrušení mazání objektů"
+
 msgid "Filter objects and hide/disable them."
 msgstr "Filtruje objekty - schová/zneaktivní je."
 
@@ -6264,8 +6379,8 @@ msgstr "Rozšířené informace o objektu"
 msgid "map style"
 msgstr "Styl mapy"
 
-msgid " ({0})"
-msgstr " ({0})"
+msgid "edit counts"
+msgstr "počet editací"
 
 msgid "not in data set"
 msgstr "není v datové sadě"
@@ -6404,6 +6519,12 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr "Dva vybrané objekty mají stejné, ale nikoliv identické keše stylů."
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] "{0} uživatel naposledy editoval výběr:"
+msgstr[1] "{0} uživatelé naposledy editovali výběr:"
+msgstr[2] "{0} uživatelů naposledy editovalo výběr:"
+
 msgid "xml"
 msgstr "xml"
 
@@ -6413,28 +6534,56 @@ msgstr "mapcss"
 msgid "unknown"
 msgstr "neznámo"
 
+msgid "Enter the coordinates for the new node."
+msgstr "Zadejte souřadnice nového uzlu."
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
-msgstr ""
-"Zadejte souřadnice nového uzlu.<br/>Zeměpisnou šířku a délku můžete oddělit "
-"mezerou, čárkou, nebo středníkem.<br/>Pro zadání severního nebo východního "
-"směru použijte kladná čísla, nebo písmena N a E.<br/>Jižní a západní směr se "
-"popisuje zápornými čísly, nebo znaky S a W.<br/>Hodnota souřadnice může být "
-"v jednom ze třech "
-"tvarů:<ul><li><i>stupně</i><tt>°</tt></li><li><i>stupně</i><tt>°</tt>"
-" <i>minuty</i><tt>'</tt></li><li><i>stupně</i><tt>°</tt> "
-"<i>minuty</i><tt>'</tt> <i>vteřiny</i><tt>&quot</tt></li></ul>Symboly "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> jsou volitelné.<br/><br/>Několik příkladů:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+"Můžete oddělit zeměpisnou délku a šířku pomocí mezery, čárky nebo středníku."
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr "Použijte kladná čísla nebo znaky N, E pro zadání severu či východu."
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr "Pro jih a západ použijte buď záporná čísla nebo znaky S, W."
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr "Hodnoty souřadnic mohou být v jednom ze tří tvarů:"
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr "<i>stupně</i><tt>°</tt>"
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr "<i>stupně</i><tt>°</tt> <i>minuty</i><tt>'</tt>"
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+"<i>stupně</i><tt>°</tt> <i>minuty</i><tt>'</tt> "
+"<i>vteřiny</i><tt>&quot</tt>"
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+"Symboly <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> jsou volitelné."
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+"Také můžete použít syntaxi <tt>lat=\"...\" lon=\"...\"</tt> nebo "
+"<tt>lat=''...'' lon=''...''</tt>."
+
+msgid "Some examples:"
+msgstr "Několik příkladů:"
 
 msgid "Projected coordinates:"
 msgstr "Souřadnice v projekci:"
@@ -6482,6 +6631,12 @@ msgstr "Neprůhlednost"
 msgid "Adjust opacity of the layer."
 msgstr "Upravit průhlednost vrstvy"
 
+msgid "Gamma"
+msgstr "Gama"
+
+msgid "Adjust gamma value of the layer."
+msgstr "Nastavit hodnotu gama poskladové vrstvy."
+
 msgid "Activate"
 msgstr "Aktivovat"
 
@@ -6611,6 +6766,12 @@ msgstr "Nastavení stylu"
 msgid "Customize the style"
 msgstr "Upravit styl"
 
+msgid "Mini map"
+msgstr "Minimapa"
+
+msgid "Displays a small map of the current edit location"
+msgstr "Zobrazí malou náhledovou mapku aktuálně upravované oblasti"
+
 msgid "List of notes"
 msgstr "Seznam poznámek"
 
@@ -6669,14 +6830,18 @@ msgstr "id objektu:"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "Zadejte id objektu, který chcete stáhnout"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr "ID objektů mohou být odděleny čárkou nebo mezerou, například: {0}"
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
 msgstr ""
-"Identifikátory objektů mohou být odděleny čárkou, nebo "
-"mezerou.<br/>Příklady: {0}<br/>Ve smíšeném režimu zadávejte objekty takto: "
-"{1}<br/>({2} znamená <i>uzel</i>, {3} je <i>cesta</i> a {4} je <i>relace</i>)"
+"Ve smíšeném režimu určete objekty následovně: {0}<br/>({1} znamená "
+"<i>uzel</i>, {2} znamená <i>cestu</i> a {3} znamená <i>relaci</i>)"
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
+msgstr "Rozsahy ID objektů se určují pomlčkou, například: {0}"
 
 msgid ""
 "Invalid ID list specified\n"
@@ -6706,6 +6871,9 @@ msgstr "Relácie: {0}/{1}"
 msgid "Relations: {0}"
 msgstr "Relace: {0}"
 
+msgid "Selection"
+msgstr "Výběr"
+
 msgid "Open a selection list window."
 msgstr "Otevřít panel Výběr."
 
@@ -6801,6 +6969,12 @@ msgstr "Otevřít panel s výsledky kontroly."
 msgid "Validation results"
 msgstr "Validace"
 
+msgid "Lookup"
+msgstr "Vyhledat"
+
+msgid "Looks up the selected primitives in the error list."
+msgstr "Vyhledat zvolené prvky v seznamu chyb."
+
 msgid "Fix"
 msgstr "Opravit"
 
@@ -7441,7 +7615,13 @@ msgstr "Podívat se informace o značce na OSM Wiki (F1)"
 msgid "Launch browser with wiki help for selected object"
 msgstr "Spustit prohlížeč s nápovědou z Wiki k vybranému objektu"
 
-msgid "Paste Value"
+msgid "Go to Taginfo"
+msgstr "Jít na Taginfo"
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr "Spustit prohlížeč se statistikou Taginfor pro zvolený objekt"
+
+msgid "Paste Value"
 msgstr "Vložit hodnotu"
 
 msgid "Paste the value of the selected tag from clipboard"
@@ -7538,15 +7718,14 @@ msgstr "Nastavte počet novo pridaných značiek"
 msgid "Remember last used tags after a restart"
 msgstr "Pamatovat si napodle použité značky po restartu"
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
-msgstr "<code>Ctrl-1</code> aplikovat první návrh"
+msgid "to apply first suggestion"
+msgstr "aplikovat první návrh"
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
-msgstr "<code>Shift-Enter</code> přidat bez uzavření dialogu"
+msgid "to add without closing the dialog"
+msgstr "přidat bez uzavření dialogu"
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
-msgstr "<code>Shift-Ctrl-1</code> přidat první návrh bez uzavření dialogu"
+msgid "to add first suggestion without closing the dialog"
+msgstr "přidat první návrh bez uzavření dialogu"
 
 msgid "Please enter the number of recently added tags to display"
 msgstr "Zadajte prosím počet nedávno pridaných značiek pre zobrazenie"
@@ -7736,6 +7915,12 @@ msgstr "Seřadit členy relace"
 msgid "Relation Editor: Sort"
 msgstr "Editor relací: Řazení"
 
+msgid "Sort below"
+msgstr "Setřídit níže"
+
+msgid "Sort the selected relation members and all members below"
+msgstr "Setřídit vybrané členy relace a všechny členy níže"
+
 msgid "Reverse the order of the relation members"
 msgstr "Obrátí pořadí členů relace"
 
@@ -8322,6 +8507,9 @@ msgstr "Nahrávám historii pro relaci {0}"
 msgid "Node {0}"
 msgstr "Uzel {0}"
 
+msgid "The nodes of this way are in reverse order"
+msgstr "Uzly této cesty jsou v opačném pořadí"
+
 msgid "Zoom to node"
 msgstr "Zvětšit na uzel"
 
@@ -9324,6 +9512,108 @@ msgstr[0] "{0} smazaný objekt:"
 msgstr[1] "{0} smazané objekty:"
 msgstr[2] "{0} smazaných objektů:"
 
+msgid "Show Tile Info"
+msgstr "Zobrazit informace o dlaždici"
+
+msgid "Tile Info"
+msgstr "Informace o dlaždici"
+
+msgid "Metadata "
+msgstr "Metadata "
+
+msgid "Auto Zoom"
+msgstr "Automatické zvětšení"
+
+msgid "Auto load tiles"
+msgstr "Automaticky načítat dlaždice"
+
+msgid "Load All Tiles"
+msgstr "Načíst všechny dlaždice"
+
+msgid "Load All Error Tiles"
+msgstr "Načíst všechny vadné dlaždice"
+
+msgid "Zoom to native resolution"
+msgstr "Zvětšit do nativního rozlišení"
+
+msgid "Change resolution"
+msgstr "Změnit rozlišení"
+
+msgid "Failed to create tile source"
+msgstr "Selhalo vytvoření zdroje dlaždice"
+
+msgid "Show Errors"
+msgstr "Zobrazit chyby"
+
+msgid "Load Tile"
+msgstr "Načíst dlaždici"
+
+msgid "Increase zoom"
+msgstr "Zvětšit přiblížení"
+
+msgid "Decrease zoom"
+msgstr "Zmenšit přiblížení"
+
+msgid "Snap to tile size"
+msgstr "Zvětšit na velikost dlaždice"
+
+msgid "Flush Tile Cache"
+msgstr "Vyprázdnit keš dlaždic"
+
+msgid "zoom in to load any tiles"
+msgstr "přibližte pro nahrání dlaždic"
+
+msgid "zoom in to load more tiles"
+msgstr "přibližte pro nahrání více dlaždic"
+
+msgid "increase zoom level to see more detail"
+msgstr "zvětšete přiblížení, abyste viděli více detailů"
+
+msgid "No tiles at this zoom level"
+msgstr "Na této úrovni zvětšení nejsou žádné dlaždice"
+
+msgid "Current zoom: {0}"
+msgstr "Aktuální zvětšení: {0}"
+
+msgid "Display zoom: {0}"
+msgstr "Zvětšení zobrazení: {0}"
+
+msgid "Pixel scale: {0}"
+msgstr "Měřítko bodů: {0}"
+
+msgid "Best zoom: {0}"
+msgstr "Nejlepší zvětšení: {0}"
+
+msgid "Cache stats: {0}"
+msgstr "Statistika keše: {0}"
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr "{0} ({1}), automaticky stahuji ve zvětšení {2}"
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr "{0} ({1}), stahuji ve zvětšení {2}"
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr "Staženo {0}/{1} dlaždic"
+
+msgid "Save WMS file"
+msgstr "Uložit WMS soubor"
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+"Podkladové letecké snímky mohou být špatně posunuty. Zkontrolujte jejich "
+"posun pomocí záznamů tras GPS!"
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+
+msgid "Details..."
+msgstr "Podrobnosti…"
+
+msgid "Hide this message and never show it again"
+msgstr "Skrýt tuto zprávu a již ji nikdy nezobrazovat"
+
 msgid "Customize Color"
 msgstr "Přizpůsobit barvu"
 
@@ -9381,6 +9671,9 @@ msgstr "Uložit GPX soubor"
 msgid "Imagery fade"
 msgstr "Zeslabení mapového podkladu"
 
+msgid "Unsupported imagery type: {0}"
+msgstr "Nepodporovaný typ obrázků: {0}"
+
 msgid "ERROR"
 msgstr "CHYBA"
 
@@ -9401,12 +9694,12 @@ msgstr "Podporovány jsou všechny projekce"
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
-"Vrstva {0} nepodporuje novou projekci {1}.\n"
-"{2}\n"
-"Změňte projekci nebo odstraňte vrstvu."
+"Vrstva {0} nepodporuje novou projekci  {1}.\n"
+"Podporované projekce jsou: {2}\n"
+"Změňte znovu projekci nebo odstraňte vrstvu."
 
 msgid "Save Layer"
 msgstr "Ulož vrstvu"
@@ -9490,85 +9783,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr "Uložit data OSM"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-"{0} není platný parametr TMS. Zkontrolujte URL serveru:\n"
-"{1}"
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-"TMS vrstvy nepodporují projekci {0}.\n"
-"{1}\n"
-"Změňte projekci nebo odstraňte vrstvu."
-
-msgid "Auto Zoom"
-msgstr "Automatické zvětšení"
-
-msgid "Auto load tiles"
-msgstr "Automaticky načítat dlaždice"
-
-msgid "Show Errors"
-msgstr "Zobrazit chyby"
-
-msgid "Load Tile"
-msgstr "Načíst dlaždici"
-
-msgid "Show Tile Info"
-msgstr "Zobrazit informace o dlaždici"
-
-msgid "Load All Tiles"
-msgstr "Načíst všechny dlaždice"
-
-msgid "Load All Error Tiles"
-msgstr "Načíst všechny vadné dlaždice"
-
-msgid "Increase zoom"
-msgstr "Zvětšit přiblížení"
-
-msgid "Decrease zoom"
-msgstr "Zmenšit přiblížení"
-
-msgid "Snap to tile size"
-msgstr "Zvětšit na velikost dlaždice"
-
-msgid "Flush Tile Cache"
-msgstr "Vyprázdnit keš dlaždic"
-
-msgid "zoom in to load any tiles"
-msgstr "přibližte pro nahrání dlaždic"
-
-msgid "zoom in to load more tiles"
-msgstr "přibližte pro nahrání více dlaždic"
-
-msgid "increase zoom level to see more detail"
-msgstr "zvětšete přiblížení, abyste viděli více detailů"
-
-msgid "No tiles at this zoom level"
-msgstr "Na této úrovni zvětšení nejsou žádné dlaždice"
-
-msgid "Current zoom: {0}"
-msgstr "Aktuální zvětšení: {0}"
-
-msgid "Display zoom: {0}"
-msgstr "Zvětšení zobrazení: {0}"
-
-msgid "Pixel scale: {0}"
-msgstr "Měřítko bodů: {0}"
-
-msgid "Best zoom: {0}"
-msgstr "Nejlepší zvětšení: {0}"
-
-msgid "Cache stats: {0}"
-msgstr "Statistika keše: {0}"
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr "Vrstva TMS ({0}), stahuji ve zvětšení {1}"
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr "Projekce EPSG:4326 a Mercator jsou podporované"
 
@@ -9578,58 +9792,33 @@ msgstr "Nalezené problémy"
 msgid "No validation errors"
 msgstr "Žádné chyby při kontrole"
 
-msgid "Blank Layer"
-msgstr "Prázdná vrstva"
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr "Staženo {0}/{1} dlaždic"
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr "Vrstva WMS ({0}), automatické stahování ve zvětšení {1}"
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr "Vrstva WMS ({0}), stahuji ve zvětšení {1}"
-
-msgid "Download visible tiles"
-msgstr "Stáhnout viditelné dlaždice"
+msgid "Set WMS Bookmark"
+msgstr "Nastavit záložku WMS"
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
-"Požadovaná plocha je příliš velká. Přibližte pohled nebo změňte rozlišení."
-
-msgid "Change resolution"
-msgstr "Změnit rozlišení"
+"JOSM použije EPSG:4326 pro dotaz na server, ale výsledek může být jiný v "
+"závislosti na WMS serveru"
 
-msgid "Reload erroneous tiles"
-msgstr "Aktualizovat chybné dlaždice"
-
-msgid "Alpha channel"
-msgstr "Alfa kanál"
-
-msgid "Automatically change resolution"
-msgstr "Automaticky měnit rozlišení"
-
-msgid "Set WMS Bookmark"
-msgstr "Nastavit záložku WMS"
-
-msgid "Automatic downloading"
-msgstr "Automatické stahování"
+msgid "Correlate to GPX"
+msgstr "Korelovat vůči GPX"
 
-msgid "Zoom to native resolution"
-msgstr "Zvětšit do nativního rozlišení"
+msgid "Invalid timezone"
+msgstr "Nepatné časové pásmo"
 
-msgid "Supported projections are: {0}"
-msgstr "Podporované projekce jsou: {0}"
+msgid "Invalid offset"
+msgstr "Neplatný posun"
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
-msgstr "Nepodporovaná verze WMS souboru; nalezeno {0}, očekáváno {1}"
+msgid "Correlate images with GPX track"
+msgstr "Korelovat obrázky s GPX trasou"
 
-msgid "Save WMS file"
-msgstr "Uložit WMS soubor"
+msgid "Try Again"
+msgstr "Zkusit znovu"
 
-msgid "Correlate to GPX"
-msgstr "Korelovat vůči GPX"
+msgid "No images could be matched!"
+msgstr "Žádné odpovídající obrázky!"
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
 msgstr "Soubory GPX (*.gpx *.gpx.gz)"
@@ -9722,24 +9911,9 @@ msgstr "Časové pásmo: "
 msgid "Offset:"
 msgstr "Posun:"
 
-msgid "Correlate images with GPX track"
-msgstr "Korelovat obrázky s GPX trasou"
-
 msgid "Correlate"
 msgstr "Korelovat"
 
-msgid "Invalid timezone"
-msgstr "Nepatné časové pásmo"
-
-msgid "Invalid offset"
-msgstr "Neplatný posun"
-
-msgid "Try Again"
-msgstr "Zkusit znovu"
-
-msgid "No images could be matched!"
-msgstr "Žádné odpovídající obrázky!"
-
 msgid "No gpx selected"
 msgstr "Nevybrán GPX záznam"
 
@@ -9956,9 +10130,6 @@ msgstr ""
 "\n"
 "GPS čas: {0}"
 
-msgid "JPEG images (*.jpg)"
-msgstr "JPEG obrázky (*.jpg)"
-
 msgid "Show thumbnails"
 msgstr "Zobrazit náhledy"
 
@@ -10027,9 +10198,6 @@ msgstr "metrů"
 msgid "Maximum area per request:"
 msgstr "Maximální plocha na požadavek:"
 
-msgid "sq km"
-msgstr "čtverečních km"
-
 msgid "Download near:"
 msgstr "Stáhnout poblíž:"
 
@@ -10769,15 +10937,15 @@ msgstr "Zavřít dialog Nastavení a zahodit všechny provedené změny"
 msgid "Save the preferences and close the dialog"
 msgstr "Uložit nastavení a zavřít dialog"
 
-msgid "Download plugins"
-msgstr "Stáhnout doplňky"
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr "Některá nastavení se projeví až po restartování JOSM."
 
 msgid "Would you like to restart now?"
 msgstr "Chcete restartovat ihned?"
 
+msgid "Download plugins"
+msgstr "Stáhnout doplňky"
+
 msgid "Icon paths:"
 msgstr "Cesty pro ikony:"
 
@@ -11627,6 +11795,21 @@ msgstr "Zobrazit ohraničení"
 msgid "No bounding box was found for this layer."
 msgstr "Na této vrstvě nebyl nalezen žádný ohraničující rámeček."
 
+msgid "1. Enter getCapabilities URL"
+msgstr "1. Zadejte URL getCapabilities"
+
+msgid "2. Enter name for this layer"
+msgstr "2. Zadejte název této vrstvy"
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr "Keš {0}, celková velikost keše: {1} bajtů"
+
+msgid "Cache name"
+msgstr "Název keše"
+
+msgid "Object Count"
+msgstr "Počet objektů"
+
 msgid "imagery fade"
 msgstr "zatmívání podkladových map"
 
@@ -11645,6 +11828,18 @@ msgstr "Silně"
 msgid "Sharpen (requires layer re-add): "
 msgstr "Doostření (vyžaduje znovupřidání vrstvy): "
 
+msgid "Tile cache directory: "
+msgstr "Adresář keše dlaždic: "
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr "Maximální velikost diskové keše (na jednu sadu snímků) v MB: "
+
+msgid "Maximum number of objects in memory cache: "
+msgstr "Maximální počet objektů v paměťové keši: "
+
+msgid "Tiles zoom offset:"
+msgstr "Offset zvětšení dlaždic:"
+
 msgid "Imagery Preferences"
 msgstr "Nastavení vrstvy podkladových map"
 
@@ -11667,6 +11862,9 @@ msgstr "Služby podkladových map"
 msgid "Offset bookmarks"
 msgstr "Záložky posunu podkladu"
 
+msgid "Cache contents"
+msgstr "Obsah keše"
+
 msgid "Imagery Background: Default"
 msgstr "Pozadí snímků: Výchozí"
 
@@ -11709,9 +11907,6 @@ msgstr "URL licence EULA není dostupné: {0}"
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr "Neplatné URL licence EULA: {0}"
 
-msgid "Projection"
-msgstr "Projekce"
-
 msgid "Layer"
 msgstr "Vrstva"
 
@@ -11736,18 +11931,12 @@ msgstr "Max. úroveň zvětšení: "
 msgid "Add to slippymap chooser: "
 msgstr "Přidat do Stáhnout z OSM->Aktuální mapa: "
 
-msgid "Tile cache directory: "
-msgstr "Adresář keše dlaždic: "
-
 msgid "Maximum concurrent downloads: "
 msgstr "Maximum současných stahování: "
 
 msgid "Maximum concurrent downloads per host: "
 msgstr "Maximální počet současných stahování od hostitele: "
 
-msgid "Maximum elements in disk cache: "
-msgstr "Maximum prvků v diskové keši: "
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
@@ -11755,20 +11944,11 @@ msgstr ""
 "Ta vrstva nepodporuje žádnou z projekcí JOSM, takže ji\n"
 "nemůžete použít. Tato zpráva již nebude znovu zobrazena."
 
-msgid "Downloader:"
-msgstr "Stahovač:"
-
 msgid "Simultaneous connections:"
 msgstr "Souběžná připojení:"
 
-msgid "Overlap tiles"
-msgstr "Překryv dlaždic"
-
-msgid "% of east:"
-msgstr "% na východ:"
-
-msgid "% of north:"
-msgstr "% na sever:"
+msgid "Tile size:"
+msgstr "Velikost dlaždic:"
 
 msgid "Auto save enabled"
 msgstr "Povolit automatické ukládání"
@@ -12786,6 +12966,14 @@ msgstr "Aplikovat přednastavení"
 msgid "New relation"
 msgstr "Nová relace"
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr "Předvolbu <i>{0}</i> nelze aplikovat, protože nebylo nic zvoleno!"
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr "Předvolbu <i>{0}</i> nelze aplikovat, protože výběr je nevhodný!"
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] "Změnit {0} objekt"
@@ -12905,6 +13093,9 @@ msgstr "Zobrazit vyhledávací dialog předvoleb"
 msgid "Search presets"
 msgstr "Najít předvolby"
 
+msgid "Presets"
+msgstr "Předvolby"
+
 msgid "Search for objects by preset"
 msgstr "Hledat objekty dle předvolby"
 
@@ -13197,6 +13388,9 @@ msgstr "<html> Nelze číst soubory.<br>Chyba je: <br> {0}</html>"
 msgid "GeoJSON Files"
 msgstr "GeoJSON soubory"
 
+msgid "Projected GeoJSON Files"
+msgstr "Projected GeoJSON soubory"
+
 msgid "Layer ''{0}'' not supported"
 msgstr "Vrstva ''{0}'' nie je podporovaná"
 
@@ -13773,6 +13967,9 @@ msgstr "Soubory OSM serveru komprimované ZIPem"
 msgid "WMS Files (*.wms)"
 msgstr "WMS soubory (*.wms)"
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr "Nepodporovaná verze WMS souboru; nalezeno {0}, očekáváno {1}"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -13845,25 +14042,27 @@ msgid "Read protocol version"
 msgstr "Číst verzi protokolu"
 
 msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
-msgstr ""
+msgstr "Nemohu spustit server vzdáleného ovládání IPv4 na portu {0}: {1}"
 
 msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
-msgstr ""
+msgstr "Nemohu spustit server vzdáleného ovládání IPv6 na portu {0}: {1}"
 
 msgid "RemoteControl::Accepting remote connections on {0}:{1}"
-msgstr ""
+msgstr "Vzdálené ovládání::Přijímá spojení na {0}:{1}"
 
 msgid "RemoteControl::Server {0}:{1} stopped."
-msgstr ""
+msgstr "Vzdálené ovládání::Server {0}:{1} zastaven."
 
 msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
+"Nemohu spustit https server vzdáleného ovládání IPv4 na portu {0}: {1}"
 
 msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
+"Nemohu spustit https server vzdáleného ovládání IPv6 na portu {0}: {1}"
 
 msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
-msgstr ""
+msgstr "Vzdálené ovládání::Přijímá zabezpečená spojení na {0}:{1}"
 
 msgid "Remote Control has been asked to create a new node."
 msgstr "Vzdálené ovládání bylo požádáno o vytvoření nového uzlu."
@@ -14203,6 +14402,21 @@ msgstr[2] ""
 "Doplněk {0} vyžaduje jiných {1} doplňků, který nebyly nalezen. Chybějící "
 "doplňky:"
 
+msgid "Download and restart"
+msgstr "Stáhnout a restartovat"
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] "Kliknutím stáhnete chybějící doplněk a restartujete JOSM"
+msgstr[1] "Kliknutím stáhnete chybějící doplňky a restartujete JOSM"
+msgstr[2] "Kliknutím stáhnete chybějící doplňky a restartujete JOSM"
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] "Kliknutím pokračujete bez tohoto doplňku"
+msgstr[1] "Kliknutím pokračujete bez těchto doplňků"
+msgstr[2] "Kliknutím pokračujete bez těchto doplňků"
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -15437,6 +15651,9 @@ msgstr "Aktualizovat"
 msgid "Update directory listing."
 msgstr "Aktualizovat výpis adresáře."
 
+msgid "View"
+msgstr "Zobrazit"
+
 msgid "Blue:"
 msgstr "Modrá:"
 
@@ -15476,8 +15693,8 @@ msgstr "MapQuest Open Aerial"
 msgid "OpenStreetMap GPS Traces"
 msgstr "OpenStreetMap trasy GPS"
 
-msgid "OpenStreetMap (Mapnik)"
-msgstr "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
+msgstr "OpenStreetMap (Standardní vrstva)"
 
 msgid "skobbler"
 msgstr "skobbler"
@@ -15488,9 +15705,6 @@ msgstr "OpenStreetMap (Mapnik, černobíle)"
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr "OpenStreetMap (Mapnik, bez popisek)"
 
-msgid "skobbler heatmap"
-msgstr "skobbler heatmap"
-
 msgid "OpenCycleMap"
 msgstr "OpenCycleMap"
 
@@ -15599,6 +15813,9 @@ msgstr "Vienna: Orthofoto (letecká)"
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr "VoGIS: Echtfarbenbild 2012 (12cm)"
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr "VoGIS: Flächenwidmungsplan"
 
@@ -15613,12 +15830,18 @@ msgid ""
 msgstr ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr "SPW(allonie) PICC numerical imagery"
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr "SPW(allonie) 2012 aerial imagery"
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr "SPW(allonie) 2009 aerial imagery"
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr "cadastre: pouze pro názvy a čísla domů, špatná geometrie"
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr "IBGE Mapa de Setores Urbanos"
 
@@ -15655,12 +15878,18 @@ msgstr "Český RÚIAN parcely"
 msgid "Czech pLPIS"
 msgstr "Český pLPIS"
 
-msgid "Fugro (Denmark)"
-msgstr "Fugro (Dánsko)"
-
 msgid "Geodatastyrelsen (Denmark)"
 msgstr "Geodatastyrelsen (Dánsko)"
 
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr "Geodatastyrelsen DTK Kort25"
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr "Geodatastyrelsen Skyggekort 1.6m"
+
+msgid "Geodatastyrelsen Skærmkort"
+msgstr "Geodatastyrelsen Skærmkort"
+
 msgid "Stevns (Denmark)"
 msgstr "Stevns (Dánsko)"
 
@@ -15685,6 +15914,9 @@ msgstr "Estonia Forestry (Maaamet)"
 msgid "BANO"
 msgstr "BANO"
 
+msgid "BD Carthage"
+msgstr "BD Carthage"
+
 msgid "Bordeaux - 2012"
 msgstr "Bordeaux - 2012"
 
@@ -15709,8 +15941,8 @@ msgstr "Géobretagne - Morbihan 2010"
 msgid "Géolittoral - Orthophotos 2000"
 msgstr "Géolittoral - Orthophotos 2000"
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
-msgstr "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
+msgstr "Géolittoral V2 - Orthophotos 2011-2014"
 
 msgid "Géolittoral - Sentiers"
 msgstr "Géolittoral - Sentiers"
@@ -15724,6 +15956,9 @@ msgstr "Loire-Atlantique - Orthophotos 2012 - 20 cm"
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 
+msgid "Route 500™©®"
+msgstr "Route 500™©®"
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr "Toulouse - Orthophotoplan 2013"
 
@@ -15736,12 +15971,6 @@ msgstr "Toulouse - Orthophotoplan 2007"
 msgid "Tours - Orthophotos 2013"
 msgstr "Tours - Orthophotos 2013"
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr "Tours - Orthophotos 2008-2010"
-
-msgid "Tours - Orthophotos 2008"
-msgstr "Tours - Orthophotos 2008"
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -15764,6 +15993,9 @@ msgstr "Hamburg (20 cm)"
 msgid "Hamburg (DK5)"
 msgstr "Hamburg (DK5)"
 
+msgid "Bavaria (80 cm)"
+msgstr "Bavaria (80 cm)"
+
 msgid "Bavaria (2 m)"
 msgstr "Bavaria (2 m)"
 
@@ -15798,11 +16030,8 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr "Maps4BW (LGL-BW, www.lgl-bw.de)"
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
-msgstr "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
+msgstr "NRW-Atlas: ALKIS"
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
 msgstr "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -15831,6 +16060,12 @@ msgstr "Ireland British War Office One-Inch 1941-43 GSGS 4136"
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr "Ireland Bartholomew Quarter-Inch 1940"
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr "Ireland Civil Parishes and Baronies - Memorial Atlas"
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr "Memorial Atlas of Ireland (1901) L.J. Richards"
+
 msgid "OSMIE Townlands"
 msgstr "OSMIE Townlands"
 
@@ -15846,60 +16081,6 @@ msgstr "OSMIE Baronies"
 msgid "OSMIE Political"
 msgstr "OSMIE Political"
 
-msgid "Ireland EEA GMES Urban Atlas"
-msgstr "Ireland EEA GMES Urban Atlas"
-
-msgid "Ireland EEA CORINE 2006"
-msgstr "Ireland EEA CORINE 2006"
-
-msgid "Antrim Civil Parishes and Baronies"
-msgstr "Antrim Civil Parishes and Baronies"
-
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
-msgstr "Memorial Atlas of Ireland (1901) L.J. Richards"
-
-msgid "Carlow Civil Parishes and Baronies"
-msgstr "Carlow Civil Parishes and Baronies"
-
-msgid "Clare Civil Parishes and Baronies"
-msgstr "Clare Civil Parishes and Baronies"
-
-msgid "Dublin Civil Parishes and Baronies"
-msgstr "Dublin Civil Parishes and Baronies"
-
-msgid "Fermanagh Civil Parishes and Baronies"
-msgstr "Fermanagh Civil Parishes and Baronies"
-
-msgid "Galway Civil Parishes and Baronies"
-msgstr "Galway Civil Parishes and Baronies"
-
-msgid "Kildare Civil Parishes and Baronies"
-msgstr "Kildare Civil Parishes and Baronies"
-
-msgid "Leitrim Civil Parishes and Baronies"
-msgstr "Leitrim Civil Parishes and Baronies"
-
-msgid "Longford Civil Parishes and Baronies"
-msgstr "Longford Civil Parishes and Baronies"
-
-msgid "Offaly Civil Parishes and Baronies"
-msgstr "Offaly Civil Parishes and Baronies"
-
-msgid "Sligo Civil Parishes and Baronies"
-msgstr "Sligo Civil Parishes and Baronies"
-
-msgid "Tyrone Civil Parishes and Baronies"
-msgstr "Tyrone Civil Parishes and Baronies"
-
-msgid "Westmeath Civil Parishes and Baronies"
-msgstr "Westmeath Civil Parishes and Baronies"
-
-msgid "Wexford Civil Parishes and Baronies"
-msgstr "Wexford Civil Parishes and Baronies"
-
-msgid "Wicklow Civil Parishes and Baronies"
-msgstr "Wicklow Civil Parishes and Baronies"
-
 msgid "Lodi - Italy"
 msgstr "Lodi - Italy"
 
@@ -15933,6 +16114,9 @@ msgstr "50cm ortho - Latvia"
 msgid "20cm ortho - Latvia - Coastline"
 msgstr "20cm ortho - Latvia - Coastline"
 
+msgid "1.cikla ortofotokarte - Latvia"
+msgstr "1.cikla ortofotokarte - Latvia"
+
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Lithuania)"
 
@@ -15948,6 +16132,9 @@ msgstr "Luxembourg Inspire Railway"
 msgid "Luxembourg Inspire Roads"
 msgstr "Luxembourg Inspire Roads"
 
+msgid "Luxembourg Inspire Water"
+msgstr "Luxembourg Inspire Water"
+
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Niger Delta Oct 2012 Landsat"
 
@@ -15963,9 +16150,15 @@ msgstr "Pangasinán/Bulacan (Phillipines HiRes)"
 msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr "Geoportal 2: Ortofotomapa (letecké snímky)"
 
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgstr "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr "Geoportal 2: PRNG (geo names)"
 
+msgid "Geoportal 2: ISOK hillshade"
+msgstr "Geoportal 2: ISOK hillshade"
+
 msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr "Będzin: Ortofotomapa 2013 (letecké snímky)"
 
@@ -15975,15 +16168,27 @@ msgstr "Będzin: Budynki (budovy)"
 msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr "Bytom: Ortofotomapa 2012 (letecké snímky)"
 
+msgid "Bytom: Fotoplan 2014 (aerial image)"
+msgstr "Bytom: Fotoplan 2014 (aerial image)"
+
 msgid "Bytom: Budynki (buildings)"
 msgstr "Bytom: Budynki (budovy)"
 
 msgid "Chorzów: Budynki (buildings)"
 msgstr "Chorzów: Budynki (budovy)"
 
+msgid "Częstochowa: Budynki (buildings)"
+msgstr "Częstochowa: Budynki (buildings)"
+
 msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr "Częstochowa: Ortofotomapa 2011 (letecké snímky)"
 
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgstr "Częstochowa: Ortofotomapa 2013 (aerial image)"
+
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgstr "Częstochowa: Ortofotomapa 2014 (aerial image)"
+
 msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr "Gliwice: Ortofotomapa 2013 (letecké snímky)"
 
@@ -15993,9 +16198,45 @@ msgstr "Gliwice: Budynki (budovy)"
 msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr "Katowice: Ortofotomapa (letecké snímky)"
 
+msgid "Katowice: Budynki (buildings)"
+msgstr "Katowice: Budynki (buildings)"
+
+msgid "Łódź: Budynki (buildings)"
+msgstr "Łódź: Budynki (buildings)"
+
 msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr "Łódź: Ortofotomapa (letecké snímky)"
 
+msgid "Powiat dębicki: Budynki (buildings)"
+msgstr "Powiat dębicki: Budynki (buildings)"
+
+msgid "Powiat lubaczowski: Budynki (buildings)"
+msgstr "Powiat lubaczowski: Budynki (buildings)"
+
+msgid "Powiat łańcucki: Budynki (buildings)"
+msgstr "Powiat łańcucki: Budynki (buildings)"
+
+msgid "Powiat poznański: Budynki (buildings)"
+msgstr "Powiat poznański: Budynki (buildings)"
+
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgstr "Powiat poznański: Ortofotomapa (Aerial image)"
+
+msgid "Powiat rzeszowski: Budynki (buildings)"
+msgstr "Powiat rzeszowski: Budynki (buildings)"
+
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgstr "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr "Powiat stalowowolski: Budynki (buildings)"
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr "Przemyśl: Budynki (buildings)"
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgstr "Przemyśl: Ortofotomapa (aerial image)"
+
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
 msgstr "Ruda Śląska: Ortofotomapa (letecké snímky)"
 
@@ -16008,9 +16249,18 @@ msgstr "Rzeszów: Budynki (budovy)"
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr "Siemianowice Śląskie: Ortofotomapa (letecké snímky)"
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr "Siemianowice Śląskie: Budynki (buildings)"
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr "Świętochłowice: Ortofotomapa 2009 (letecké snímky)"
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr "Zabrze: Ortofotomapa 2011 (letecké snímky)"
 
@@ -16140,6 +16390,21 @@ msgstr "Bonvillars Orthophoto 2013"
 msgid "Fiez Orthophoto 2013"
 msgstr "Fiez Orthophoto 2013"
 
+msgid "Taiwan e-Map Open Data"
+msgstr "Taiwan e-Map Open Data"
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr "Taiwan e-Map Open Data (with Contour Line)"
+
+msgid "Taiwan Village Boundaries"
+msgstr "Taiwan Village Boundaries"
+
+msgid "Taiwan Land-Section Data"
+msgstr "Taiwan Land-Section Data"
+
+msgid "NLSC Open Data WMTS"
+msgstr "NLSC Open Data WMTS"
+
 msgid "MSR Maps Topo"
 msgstr "MSR Maps Topo"
 
@@ -16155,8 +16420,8 @@ msgstr "USGS Large Scale Imagery"
 msgid "TIGER 2012 Roads Overlay"
 msgstr "TIGER 2012 Roads Overlay"
 
-msgid "New & Misaligned TIGER Roads (2014)"
-msgstr "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
+msgstr "New & Misaligned TIGER Roads (2015)"
 
 msgid "MassGIS L3 Parcels"
 msgstr "MassGIS L3 Parcels"
@@ -16499,6 +16764,13 @@ msgstr ""
 "Implementuje příkazový řádek a umožňuje tvorbu vlastních příkazů. Kliknutím "
 "na odkaz zjistíte více informací o základních příkazech (oblouk, kruh atd.)"
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+"Poskytuje knihovnu Commons Imaging. Není myšleno pro použití přímo "
+"uživatelem, ale jako knihovna pro ostatní doplňky."
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr "(Pozor: Experimentální!) Nástroj pro spojování (slučování) dat."
 
@@ -16600,13 +16872,6 @@ msgstr ""
 "zkratky nebo ikonou z editační nástrojové lišty"
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-"Tento experimentální doplněk ukládá keš dlaždic mapových podkladů do "
-"databáze, namísto do obrovských adresářů."
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -16679,7 +16944,7 @@ msgstr ""
 "Doplněk ukazuje v mapě hlášené chyby ze systému MapDust. Hlášení chyb můžete "
 "tímto doplňkem vytvářet, uzavírat, zneplatňovat, znovu otevírat a komentovat."
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr "Dovoluje uživateli pracovat s obrázky uloženými na mapillary.com"
 
 msgid ""
@@ -16697,9 +16962,6 @@ msgstr "Sloučení překrývajících se částí cest."
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr "Přidá zákaz odbočení vlevo pro sadu 4 nebo 5 cest"
 
-msgid "Simplifies download from different read-only APIs."
-msgstr "Zjednodušuje stahování z různých API určených pouze pro čtení."
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 "Umožňuje označit vlastnosti všech objektů ve vybrané oblasti najednou."
@@ -16797,6 +17059,16 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr "Tento doplněk zjednodušuje mapování a úpravy tras veřejné dopravy."
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr "Zobrazuje zastávky zvolených tras veřejné dopravy jako graf"
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+"Doplněk RasterFilters dovoluje zvolit a aplikovat některé obrázkové filtry "
+"do některých vrstev"
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr "Panel pro vytváření a editace relací a multipolygonů."
 
@@ -16843,6 +17115,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr "Editace prvků OpenSeaMap"
 
+msgid "Allows to draw splines"
+msgstr "Umožňuje kreslit spline křivky"
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -16940,9 +17215,6 @@ msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 "Umožňuje vyhledávat trasové body (waypoint) importované ze souboru GPX."
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr "Vyberte sekvenci nevětvících se spojených cest"
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr "Zjednodušuje linkování objektů OSM ke článkům Wikipedie"
 
@@ -17354,6 +17626,14 @@ msgid "basketball"
 msgstr "basketbal"
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr "plážový volejbal"
+
+msgctxt "sport"
+msgid "billiards"
+msgstr "kulečník"
+
+msgctxt "sport"
 msgid "boules"
 msgstr "hry s koulemi (pétanque)"
 
@@ -17378,10 +17658,6 @@ msgid "cricket"
 msgstr "kriket"
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr "kriketové sítě"
-
-msgctxt "sport"
 msgid "croquet"
 msgstr "kroket"
 
@@ -17398,6 +17674,10 @@ msgid "equestrian"
 msgstr "jezdectví"
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr "pozemní hokej"
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr "gaelské hry"
 
@@ -17414,14 +17694,26 @@ msgid "handball"
 msgstr "házená"
 
 msgctxt "sport"
-msgid "hockey"
-msgstr "hokej"
-
-msgctxt "sport"
 msgid "horse_racing"
 msgstr "dostihy"
 
 msgctxt "sport"
+msgid "ice_hockey"
+msgstr "lední hokej"
+
+msgctxt "sport"
+msgid "karting"
+msgstr "motokáry"
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr "letiště pro modely"
+
+msgctxt "sport"
+msgid "motocross"
+msgstr "motokros"
+
+msgctxt "sport"
 msgid "motor"
 msgstr "motorsport"
 
@@ -17434,6 +17726,10 @@ msgid "racquet"
 msgstr "sport hraný raketou"
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr "RC auta"
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr "ragby třináctkové (rugby league)"
 
@@ -17446,6 +17742,10 @@ msgid "running"
 msgstr "běh"
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr "bezpečnostní školení"
+
+msgctxt "sport"
 msgid "shooting"
 msgstr "sportovní střelba"
 
@@ -17473,6 +17773,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr "tenis"
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr "volejbal"
+
+msgctxt "sport"
+msgid "9pin"
+msgstr "kuželky"
+
+msgctxt "sport"
+msgid "10pin"
+msgstr "bowling"
+
 msgid "Fee"
 msgstr "Poplatek"
 
@@ -17868,6 +18180,9 @@ msgstr "Silnice 3. třídy - nájezd"
 msgid "Unclassified"
 msgstr "Silnice bez zařazení (mimo obec)"
 
+msgid "Street has no name"
+msgstr "Ulice nemá žádný název"
+
 msgid "Passing Places"
 msgstr "Výhybny"
 
@@ -17946,6 +18261,9 @@ msgstr ""
 "Nouzový pruh vedle dlouhých klesání pro bezpečné zastavení nákladních a "
 "jiných vozidel v případě selhání brzd."
 
+msgid "Raceway"
+msgstr "Závodní dráha"
+
 msgid "Road (Unknown Type)"
 msgstr "Cesta (neznámý typ)"
 
@@ -18499,6 +18817,12 @@ msgstr "Rychlostní radar"
 msgid "Traffic Mirror"
 msgstr "Dopravní zrcadlo"
 
+msgid "Highway milestone"
+msgstr "Silniční kilometrovník"
+
+msgid "Distance (kilometers)"
+msgstr "Staničení (kilometry)"
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr "Pojmenovaná křižovatka"
@@ -18690,6 +19014,11 @@ msgstr "Kolonáda"
 msgid "Avalanche Protector"
 msgstr "Lavinová ochrana"
 
+msgctxt "main group"
+msgid "Water"
+msgstr "Vodstvo"
+
+msgctxt "sub group"
 msgid "Water"
 msgstr "Vodstvo"
 
@@ -18743,6 +19072,10 @@ msgstr "Umělá vodní nádrž"
 msgid "Covered Reservoir"
 msgstr "Krytá vodní nádrž"
 
+msgctxt "natural"
+msgid "Water"
+msgstr "Vodstvo"
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr "Stojatá vodní plocha, například jezero nebo rybník."
 
@@ -18887,6 +19220,120 @@ msgstr "Výpusť odpadních vod"
 msgid "public"
 msgstr "veřejný"
 
+msgid "Marine Fuel"
+msgstr "Lodní palivo"
+
+msgid "Agip"
+msgstr "Agip"
+
+msgid "Aral"
+msgstr "Aral"
+
+msgid "Avia"
+msgstr "Avia"
+
+msgid "BP"
+msgstr "BP"
+
+msgid "Chevron"
+msgstr "Chevron"
+
+msgid "Citgo"
+msgstr "Citgo"
+
+msgid "Eni"
+msgstr "Eni"
+
+msgid "Esso"
+msgstr "Esso"
+
+msgid "Exxon"
+msgstr "Exxon"
+
+msgid "Gulf"
+msgstr "Gulf"
+
+msgid "Mobil"
+msgstr "Mobil"
+
+msgid "OMV"
+msgstr "OMV"
+
+msgid "Petro-Canada"
+msgstr "Petro-Canada"
+
+msgid "Pioneer"
+msgstr "Pioneer"
+
+msgid "Q8"
+msgstr "Q8"
+
+msgid "Repsol"
+msgstr "Repsol"
+
+msgid "Shell"
+msgstr "Shell"
+
+msgid "Socar"
+msgstr "Socar"
+
+msgid "Statoil"
+msgstr "Statoil"
+
+msgid "Sunoco"
+msgstr "Sunoco"
+
+msgid "Tamoil"
+msgstr "Tamoil"
+
+msgid "Texaco"
+msgstr "Texaco"
+
+msgid "Total"
+msgstr "Total"
+
+msgid "Independent"
+msgstr "Independent"
+
+msgid "Fuel types:"
+msgstr "Typy paliv:"
+
+msgid "Diesel"
+msgstr "Nafta"
+
+msgid "Bio Diesel"
+msgstr "Bionafta"
+
+msgid "Octane 80"
+msgstr "80 oktanů"
+
+msgid "Octane 91"
+msgstr "91 oktanů"
+
+msgid "Octane 92"
+msgstr "92 oktanů"
+
+msgid "Octane 95"
+msgstr "95 oktanů"
+
+msgid "Octane 98"
+msgstr "98 oktanů"
+
+msgid "Octane 100"
+msgstr "100 oktanů"
+
+msgid "E10 (10% Ethanol mix)"
+msgstr "E10 (10% směs etanolu)"
+
+msgid "E85 (85% Ethanol mix)"
+msgstr "E85 (85% směs etanolu)"
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr "LPG (propan-butan)"
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr "CNG (zemní plyn)"
+
 msgid "Pier"
 msgstr "Molo"
 
@@ -18900,7 +19347,7 @@ msgid "Slipway"
 msgstr "Skluz v loděnici"
 
 msgid "Boatyard"
-msgstr "doky"
+msgstr "Loděnice"
 
 msgid "Dock"
 msgstr "Dok"
@@ -19003,6 +19450,9 @@ msgstr "Zarážedlo"
 msgid "Railway Switch"
 msgstr "Výhybka"
 
+msgid "Railway milestone"
+msgstr "Železniční kilometrovník"
+
 msgid "Aerialway"
 msgstr "Lanovka"
 
@@ -19128,78 +19578,6 @@ msgstr "Vjezd do parkoviště"
 msgid "Fuel"
 msgstr "Čerpací stanice"
 
-msgid "Agip"
-msgstr "Agip"
-
-msgid "Aral"
-msgstr "Aral"
-
-msgid "Avia"
-msgstr "Avia"
-
-msgid "BP"
-msgstr "BP"
-
-msgid "Chevron"
-msgstr "Chevron"
-
-msgid "Citgo"
-msgstr "Citgo"
-
-msgid "Eni"
-msgstr "Eni"
-
-msgid "Esso"
-msgstr "Esso"
-
-msgid "Exxon"
-msgstr "Exxon"
-
-msgid "Gulf"
-msgstr "Gulf"
-
-msgid "Mobil"
-msgstr "Mobil"
-
-msgid "OMV"
-msgstr "OMV"
-
-msgid "Petro-Canada"
-msgstr "Petro-Canada"
-
-msgid "Pioneer"
-msgstr "Pioneer"
-
-msgid "Q8"
-msgstr "Q8"
-
-msgid "Repsol"
-msgstr "Repsol"
-
-msgid "Shell"
-msgstr "Shell"
-
-msgid "Socar"
-msgstr "Socar"
-
-msgid "Statoil"
-msgstr "Statoil"
-
-msgid "Sunoco"
-msgstr "Sunoco"
-
-msgid "Tamoil"
-msgstr "Tamoil"
-
-msgid "Texaco"
-msgstr "Texaco"
-
-msgid "Total"
-msgstr "Total"
-
-msgid "Independent"
-msgstr "Independent"
-
 msgid "With shop"
 msgstr "S obchodem"
 
@@ -19209,50 +19587,11 @@ msgstr "smíšené zboží"
 msgid "kiosk"
 msgstr "kiosek"
 
-msgid "Fuel types:"
-msgstr "Typy paliv:"
-
-msgid "Diesel"
-msgstr "Nafta"
-
-msgid "Bio Diesel"
-msgstr "Bionafta"
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr "Diesel GTL (Gas To Liquid)"
 
-msgid "Diesel for Heavy Good Vehicles"
-msgstr "Nafta pre nákladní automobily"
-
-msgid "Octane 80"
-msgstr "80 oktanů"
-
-msgid "Octane 91"
-msgstr "91 oktanů"
-
-msgid "Octane 92"
-msgstr "92 oktanů"
-
-msgid "Octane 95"
-msgstr "95 oktanů"
-
-msgid "Octane 98"
-msgstr "98 oktanů"
-
-msgid "Octane 100"
-msgstr "100 oktanů"
-
-msgid "E10 (10% Ethanol mix)"
-msgstr "E10 (10% směs etanolu)"
-
-msgid "E85 (85% Ethanol mix)"
-msgstr "E85 (85% směs etanolu)"
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr "LPG (propan-butan)"
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr "CNG (zemní plyn)"
+msgid "Diesel for Heavy Good Vehicles"
+msgstr "Nafta pre nákladní automobily"
 
 msgid "1/25 mix (mofa/moped)"
 msgstr "1/25 mix (motorové kolo/moped)"
@@ -19472,9 +19811,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr "#CD853F"
 
-msgid "route segment"
-msgstr "úsek trasy"
-
 msgid "stop position"
 msgstr "zastávka"
 
@@ -19493,6 +19829,9 @@ msgstr "nástupiště (pouze výstup)"
 msgid "platform (entry only)"
 msgstr "nástupiště (pouze nástup)"
 
+msgid "route segment"
+msgstr "úsek trasy"
+
 msgid "Route Master"
 msgstr "Sada tras (route master)"
 
@@ -19636,7 +19975,7 @@ msgid "Airport"
 msgstr "Letiště"
 
 msgid "Airport Ground"
-msgstr "Letisko, pozemné"
+msgstr "Letiště"
 
 msgid "IATA"
 msgstr "IATA"
@@ -19695,6 +20034,12 @@ msgstr "Hotel"
 msgid "Stars"
 msgstr "Počet hvězdiček"
 
+msgid "Rooms"
+msgstr "Pokoje"
+
+msgid "Beds"
+msgstr "Postele"
+
 msgid "Motel"
 msgstr "Motel"
 
@@ -19785,6 +20130,9 @@ msgstr "sendvič"
 msgid "sushi"
 msgstr "suši"
 
+msgid "steak_house"
+msgstr "steak_house"
+
 msgid "Microbrewery"
 msgstr "Minipivovar"
 
@@ -19999,6 +20347,9 @@ msgstr "Sauna"
 msgid "Horse Riding"
 msgstr "Jízda na koni"
 
+msgid "Casino"
+msgstr "Kasino"
+
 msgid "Brothel"
 msgstr "Nevestinec"
 
@@ -20486,8 +20837,8 @@ msgstr "Zobrazen barometrický tlak"
 msgid "Shows humidity"
 msgstr "Zobrazena vlkhost vzduchu"
 
-msgid "Recycling"
-msgstr "Sběr tříděného odpadu"
+msgid "Recycling Container"
+msgstr "Recyklační kontejner"
 
 msgid "Batteries"
 msgstr "Baterie"
@@ -20495,20 +20846,47 @@ msgstr "Baterie"
 msgid "Cans"
 msgstr "Plechovky"
 
+msgid "Cardboard"
+msgstr "Kartón"
+
+msgid "Electrical Appliances"
+msgstr "Elektrická zařízení"
+
 msgid "Glass"
 msgstr "Sklo"
 
+msgid "Glass Bottles"
+msgstr "Skleněné lahve"
+
+msgid "Green Waste"
+msgstr "Zelený odpad"
+
 msgid "Paper"
 msgstr "Papír"
 
+msgid "Plastic"
+msgstr "Plasty"
+
+msgid "Plastic Bottles"
+msgstr "Plastové lahve"
+
+msgid "Plastic Packaging"
+msgstr "Plastové obaly"
+
 msgid "Scrap Metal"
 msgstr "Kovový šrot"
 
-msgid "container"
-msgstr "kontajner"
+msgid "Shoes"
+msgstr "Obuv"
+
+msgid "Small Appliances"
+msgstr "Malé spotřebiče"
 
-msgid "centre"
-msgstr "stredisko"
+msgid "Waste"
+msgstr "Odpad"
+
+msgid "Recycling Centre"
+msgstr "Recyklační centrum"
 
 msgid "Waste Basket/Trash Can"
 msgstr "Odpadkový koš"
@@ -20711,6 +21089,9 @@ msgstr "Lukostřelba"
 msgid "Track and Field Athletics"
 msgstr "Atletika"
 
+msgid "Running"
+msgstr "Běh"
+
 msgid "Climbing"
 msgstr "Horolezení"
 
@@ -20886,12 +21267,18 @@ msgstr "Baseball"
 msgid "Basketball"
 msgstr "Basketbal"
 
+msgid "Handball"
+msgstr "Házená"
+
 msgid "Volleyball"
 msgstr "Volejbal"
 
 msgid "Beach Volleyball"
 msgstr "Plážový volejbal"
 
+msgid "Billiards"
+msgstr "Kulečník"
+
 msgid "Golf"
 msgstr "Golf"
 
@@ -20907,14 +21294,14 @@ msgstr "Bowling na trávě"
 msgid "Cricket"
 msgstr "Kriket"
 
-msgid "Cricket Nets"
-msgstr "Ohražené místo pro tréning kriketu"
-
 msgid "Croquet"
 msgstr "Kroket"
 
-msgid "Hockey"
-msgstr "Hokej"
+msgid "Field Hockey"
+msgstr "Pozemní hokej"
+
+msgid "Ice Hockey"
+msgstr "Lední hokej"
 
 msgid "Pelota"
 msgstr "Pelota (míčová hra)"
@@ -20937,9 +21324,6 @@ msgstr "Motokáry"
 msgid "Motocross"
 msgstr "Motokros"
 
-msgid "Safety Training"
-msgstr "Bezpečnostný výcvik"
-
 msgid "Model Aerodrome"
 msgstr "Modelářské letiště"
 
@@ -20958,9 +21342,6 @@ msgstr "dráha"
 msgid "RC Car"
 msgstr "RC auta"
 
-msgid "Raceway"
-msgstr "Závodní dráha"
-
 msgid "Man Made"
 msgstr "Umělé objekty"
 
@@ -21033,6 +21414,14 @@ msgid "storage_tank"
 msgstr "uskladňovací_nádrž"
 
 msgctxt "building"
+msgid "supermarket"
+msgstr "supermarket"
+
+msgctxt "building"
+msgid "gasometer"
+msgstr "plynojem"
+
+msgctxt "building"
 msgid "cowshed"
 msgstr "kravín"
 
@@ -21181,7 +21570,7 @@ msgid "wine"
 msgstr "víno"
 
 msgid "Bunker Silo"
-msgstr "silážní jáma"
+msgstr "Silážní jáma"
 
 msgid "Pipeline"
 msgstr "Potrubí"
@@ -22355,9 +22744,6 @@ msgstr "Víno"
 msgid "Boutique"
 msgstr "Butik"
 
-msgid "Shoes"
-msgstr "Obuv"
-
 msgid "Outdoor"
 msgstr "Vybavení do přírody"
 
@@ -23381,12 +23767,12 @@ msgstr "teoreticky možné číslování"
 msgid "Contact (Common Schema)"
 msgstr "Kontakt (běžné schéma)"
 
-msgid "Fax Number"
-msgstr "Faxové číslo"
-
 msgid "Email Address"
 msgstr "E-mailová adresa"
 
+msgid "Fax Number"
+msgstr "Faxové číslo"
+
 msgid "Image"
 msgstr "Obrázek"
 
@@ -23815,6 +24201,9 @@ msgstr "nekomplentí objekt: pouze {0} a {1}"
 msgid "{0} together with addr:*"
 msgstr "{0} spolu s addr:*"
 
+msgid "{0} together with {1} and conflicting values"
+msgstr "{0} spolu s {1} a konfliktní hodnoty"
+
 msgid "{0} on suspicious object"
 msgstr "{0} u podezřelého objektu"
 
@@ -23839,6 +24228,18 @@ msgstr "alternativní název bez {0}"
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr "nekompletní použití {0} na cestě bez {1}"
 
+msgid "Same value of {0} and {1}"
+msgstr "Shodná hodnota {0} a {1}"
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr "Shodná hodnota {0}, {1} a {2}"
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr "{0} a {1} spolu s {2} a konfliktními hodnotami"
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr "Podezřelá kombinace značek: {0} a {1}"
+
 msgid "{0}={1} is deprecated"
 msgstr "{0}={1} je zastaralé"
 
@@ -23908,6 +24309,9 @@ msgstr "klíč s neobvyklým znakem"
 msgid "uncommon short key"
 msgstr "neobvyklá klávesová zkratka"
 
+msgid "{0} is inaccurate"
+msgstr "{0} je nepřesné"
+
 msgid "{0} on a node. Should be used on a way."
 msgstr "{0} na uzlu. Mělo by být použito na cestě."
 
@@ -24002,9 +24406,19 @@ msgstr ""
 "{0}: předpokládají se metry; oddělení desetinných míst tečkou; pokud udáváte "
 "jednotky, pak před nimi vložte mezeru"
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr "{0}: tuna je výchozí; oddělovačem je tečka; jednotky oddělte mezerou"
+
 msgid "unusual {0} format"
 msgstr "neobvyklý formát {0}"
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+"{0}: kilometr je výchozí; oddělovačem je tečka; jednotky oddělte mezerou"
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 "napětí má být ve voltech bez jakýchkoliv jednotek,oddělovačů či mezer"
@@ -24392,6 +24806,9 @@ msgstr "Přidávat pevné uzly kliknutím"
 msgid "Add fixed points on spacebar"
 msgstr "Přidávat pevné uzly mezerníkem"
 
+msgid "Allow edit existing ways"
+msgstr "Povolit úpravu existujících cest"
+
 msgid "Draw closed polygons only"
 msgstr "Kreslit pouze uzavřené cesty"
 
@@ -24455,9 +24872,6 @@ msgstr "Nakreslete cestu myší"
 msgid "min distance={0} px ({1} m)"
 msgstr "min. vzdálenost={0} px ({1} m)"
 
-msgid "Convert way to FastDraw line"
-msgstr "Převést cestu na čáru FastDraw"
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr "Epsilon={0}, {1} bodů, {2} bodů/km"
 
@@ -25316,52 +25730,68 @@ msgstr ""
 "Dejte nám vědět, co jste dělal a co se stalo a připojte následující text ke "
 "hlášení chyby, abychom mohli najít příčinu problému."
 
-msgid "Area detection algorithm settings."
-msgstr "Nastavení algoritmu detekce ploch."
+msgid "Area Selector - Preferences"
+msgstr "Area Selector - Předvolby"
+
+msgid "Settings for the area detection algorithm."
+msgstr "Nastavení algoritmu detekce plochy."
+
+msgid "Boofcv - high resolution images"
+msgstr "Boofcv - obrázky s vysokým rozlišením"
 
-msgid "Algorithm Settings"
-msgstr "Nastavení algoritmu"
+msgid "Custom - low resolution images"
+msgstr "Custom - obrázky s nízkým rozlišením"
 
 msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
-"Práh barvy určuje, jak daleko může barva být od originální barvy, aby byla "
-"ještě vybrána (výchozí hodnota: {0})."
+"Zvolte jaký algoritmus se má použít. \"Auto\" se snaží najít plochu pomocí "
+"Boofcv a v případě neúspěchu použije Custom."
 
-msgid "Color Threshold"
-msgstr "Práh barvy"
+msgid "Algorithm"
+msgstr "Algoritmus"
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
-"Maximální vzdálenost, o kterou může být každý bod mimo přímku v pixelech "
-"(výchozí: {0})."
+"Maximální počet pixelů, o které může být bod vzdálen od čáry a stále být "
+"považován za součást čáry (výchozí: {0})."
 
-msgid "Tolerance Distance"
+msgid "Distance Tolerance"
 msgstr "Tolerance vzdálenosti"
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
-msgstr "Tolerance přichytávání úhlů v radiánech (výchozí hodnota {0})."
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
+msgstr ""
+"Čáry s menším úhlem (ve stupních) budou sloučeny do jedné čáry (výchozí: "
+"{0})."
 
-msgid "Tolerance Angle"
+msgid "Angle Tolerance"
 msgstr "Tolerance úhlu"
 
-msgid "Plugin Settings"
-msgstr "Nastavení doplňku"
-
-msgid "Show Address Dialog after mapping an area"
-msgstr "Po zmapování oblasti zobrazit dialog s adresami"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
+msgstr ""
+"Práh barvy určuje, jak moc se může barva lišit od zvolené barvy. Hodnoty "
+"červené, zelené a modré musí být v rozsahu od (zvolená-práh) do "
+"(zvolená+práh) (výchozí: {0})."
 
-msgid "show address dialog"
-msgstr "zobrazit dialog a adresami"
+msgid "Color Threshold"
+msgstr "Práh barvy"
 
-msgid "Merge nodes with neighbors"
-msgstr "Sloučit uzly se sousedy"
+msgid "Use HSV based algorithm"
+msgstr "Použít algoritmus založený na HSV"
 
-msgid "merge nodes"
-msgstr "sloučit uzly"
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
+msgstr ""
+"Použít pro volbu podobných barev odstín a nasycení namísto rozlišování dle "
+"RGB."
 
 msgid "How often thinning operation should be applied (Default {0})."
 msgstr "Jak často má být být provedena operace ztenčování (výchozí {0})."
@@ -25369,11 +25799,23 @@ msgstr "Jak často má být být provedena operace ztenčování (výchozí {0})
 msgid "Thinning Iterations"
 msgstr "Iterace ztenčování"
 
-msgid "Use hue and saturation instead of RGB distinction"
-msgstr "Použít odstín a saturaci namísto rozlišení RGB"
+msgid "show address dialog"
+msgstr "zobrazit dialog a adresami"
+
+msgid "Show Address Dialog after mapping an area"
+msgstr "Po zmapování oblasti zobrazit dialog s adresami"
+
+msgid "merge nodes"
+msgstr "sloučit uzly"
+
+msgid "Merge nodes with existing nodes"
+msgstr "Sloučit uzly s existujícími uzly"
 
-msgid "use HSV based algorithm"
-msgstr "použít algoritmus založený na HSV"
+msgid "Debug"
+msgstr "Ladění"
+
+msgid "Debugging mode will write images for each processing step."
+msgstr "Režim ladění zapíše obrázky v každém kroku zpracování."
 
 msgid "Street Name:"
 msgstr "Jméno ulice:"
@@ -26039,6 +26481,9 @@ msgstr "Vynulovat posuv"
 msgid "Reset offset (only vector images)"
 msgstr "Resetovat posun (pouze vektorové obrázky)"
 
+msgid "Blank Layer"
+msgstr "Prázdná vrstva"
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr "WMS vrstva ({0}), nahráno {1} dlaždic"
 
@@ -27596,14 +28041,328 @@ msgstr "Aktivuje doplněk hlášení chyb MapDust"
 msgid "Missing input data"
 msgstr "Chybějící vstupní data"
 
+msgid "Mapillary Images"
+msgstr "Obrázky Mapillary"
+
+msgid "Mapillary layer"
+msgstr "Vrstva Mapillary"
+
+msgid "Total images:"
+msgstr "Celkem obrázků:"
+
+msgid "images"
+msgstr "obrázků"
+
 msgid "Mapillary"
 msgstr "Mapillary"
 
-msgid "Create Mapillary layer."
-msgstr "Vytvořit vrstvu Mapillary."
+msgid "Create Mapillary layer"
+msgstr "Vytvořit vrstvu Mapillary"
 
-msgid "Export"
-msgstr "Export"
+msgid "Start Mapillary layer"
+msgstr "Spustit vrstvu Mapillary"
+
+msgid "Download Mapillary images in current view"
+msgstr "Stáhnout obrázky Mapillary v aktuálním zobrazení"
+
+msgid "Export pictures"
+msgstr "Exportovat obrázky"
+
+msgid "Export Mapillary pictures"
+msgstr "Export obrázků Mapillary"
+
+msgid "Export images"
+msgstr "Exportovat obrázky"
+
+msgid "Import pictures"
+msgstr "Importovat obrázky"
+
+msgid "Import local pictures"
+msgstr "Import lokálních obrázků"
+
+msgid "Import pictures into Mapillary layer"
+msgstr "Importovat obrázky do vrstvy Mapillary"
+
+msgid "Select pictures"
+msgstr "Výběr obrázků"
+
+msgid "Import pictures into sequence"
+msgstr "Importovat obrázky do sekvence"
+
+msgid "Import pictures into Mapillary layer in a sequence"
+msgstr "Importovat obrázky do vrstvy Mapillary v sekvenci"
+
+msgid "Join mode"
+msgstr "Režim slučování"
+
+msgid "Join/unjoin pictures"
+msgstr "Sloučit/rozdělit obrázky"
+
+msgid "Join Mapillary pictures"
+msgstr "Sloučit obrázky Mapillary"
+
+msgid "Upload pictures"
+msgstr "Nahrát obrázky na server"
+
+msgid "Upload Mapillary pictures"
+msgstr "Nahrát obrázky Mapillary na server"
+
+msgid "Upload pictures."
+msgstr "Nahrát obrázky na server."
+
+msgid "Walk mode"
+msgstr "Režim chůze"
+
+msgid "Start walk mode"
+msgstr "Spustit režim chůze"
+
+msgid "Zoom to selected image"
+msgstr "Zvětšit na zvolený obrázek"
+
+msgid "Zoom to the currently selected Mapillary image"
+msgstr "Zvětšit na aktuálně zvolený obrázek Mapillary"
+
+msgid "Uploaded {0} images"
+msgstr "Nahráno {0} obrázků"
+
+msgid "Approve upload on the website"
+msgstr "Potvrdit nahrání na web"
+
+msgid "View in website"
+msgstr "Zobrazit na webové stránce"
+
+msgid "Copy key"
+msgstr "Kopírovat klíč"
+
+msgid "Copy key tag"
+msgstr "Kopírovat hodnotu klíče"
+
+msgid "Edit on website"
+msgstr "Upravit na webu"
+
+msgid "Export all images"
+msgstr "Exportovat všechny obrázky"
+
+msgid "Export selected sequence"
+msgstr "Exportovat vybranou sekvenci"
+
+msgid "Export selected images"
+msgstr "Exportovat zvolené obrázky"
+
+msgid "Rewrite imported images"
+msgstr "Přepsat importované obrázky"
+
+msgid "Select a folder"
+msgstr "Zvolte složku"
+
+msgid "Explore"
+msgstr "Prozkoumat"
+
+msgid "Select a directory"
+msgstr "Zvolte adresář"
+
+msgid "Speed limit"
+msgstr "Omezení rychlosti"
+
+msgid "Give way"
+msgstr "Dej přednost"
+
+msgid "No entry"
+msgstr "Zákaz vjezdu"
+
+msgid "Intersection danger"
+msgstr "Upozornění na křižovatku"
+
+msgid "Mandatory direction (any)"
+msgstr "Přikázaný směr jízdy (jakýkoliv)"
+
+msgid "No turn"
+msgstr "Zákaz odbočení"
+
+msgid "Uneven road"
+msgstr "Nerovnost vozovky"
+
+msgid "No parking"
+msgstr "Zákaz parkování"
+
+msgid "No overtaking"
+msgstr "Zákaz předjíždění"
+
+msgid "Pedestrian crossing"
+msgstr "Přechod pro chodce"
+
+msgid "Years"
+msgstr "Let"
+
+msgid "Months"
+msgstr "Měsíců"
+
+msgid "Days"
+msgstr "Dnů"
+
+msgid "Mapillary filter"
+msgstr "Filter Mapillary"
+
+msgid "Open Mapillary filter dialog"
+msgstr "Otevřit okno filtru Mapillary"
+
+msgid "Downloaded images"
+msgstr "Stažené obrázky"
+
+msgid "Only images with signs"
+msgstr "Pouze obrázky se značkami"
+
+msgid "Choose signs"
+msgstr "Zvolit značky"
+
+msgid "Mapillary history"
+msgstr "Historie Mapillary"
+
+msgid "Open Mapillary history dialog"
+msgstr "Otevřít dialog historie Mapillary"
+
+msgid "Open Mapillary window"
+msgstr "Otevřít okno Mapillary"
+
+msgid "Mapillary dialog"
+msgstr "Dialog Mapillary"
+
+msgid "Open Mapillary main dialog"
+msgstr "Otevřít hlavní dialog Mapillary"
+
+msgid "Next picture"
+msgstr "Další obrázek"
+
+msgid "Shows the next picture in the sequence"
+msgstr "Ukáže další obrázek v sekvenci"
+
+msgid "Previous picture"
+msgstr "Předchozí obrázek"
+
+msgid "Shows the previous picture in the sequence"
+msgstr "Ukáže předchozí obrázek v sekvenci"
+
+msgid "Jump to red"
+msgstr "Skočit na červenou"
+
+msgid "Jumps to the picture at the other side of the red line"
+msgstr "Skočí na obrázek na druhé straně červené čáry"
+
+msgid "Jump to blue"
+msgstr "Skočit na modrou"
+
+msgid "Jumps to the picture at the other side of the blue line"
+msgstr "Skočí na obrázek na druhé straně modré čáry"
+
+msgid "Stops the walk."
+msgstr "Ukončí průchod."
+
+msgid "Play"
+msgstr "Přehrát"
+
+msgid "Continues with the paused walk."
+msgstr "Pokračuje v pozastaveném průchodu."
+
+msgid "Pause"
+msgstr "Pozastavit"
+
+msgid "Pauses the walk."
+msgstr "Pozastaví průchod."
+
+msgid "Reverse buttons position when displaying images."
+msgstr "Obrátit při zobrazování obrázků polohu tlačítek."
+
+msgid "Display hour when the picture was taken"
+msgstr "Zobrazit hodinu, kdy byl obrázek pořízen"
+
+msgid "Use 24 hour format"
+msgstr "Použít 24hodinový formát"
+
+msgid "Move to picture''s location with next/previous buttons"
+msgstr "Přesunout se na umístění obrázku tlačítky další/předchozí"
+
+msgid "Download mode: "
+msgstr "Režim stahování: "
+
+msgid "Upload selected sequence"
+msgstr "Nahrát vybranou sekvenci"
+
+msgid "Delete after upload"
+msgstr "Smazat po nahrání"
+
+msgid "Wait for full quality pictures"
+msgstr "Počkat na obrázek v maximální kvalitě"
+
+msgid "Follow selected image"
+msgstr "Následovat vybraný obázek"
+
+msgid "Go forward"
+msgstr "Vpřed"
+
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] "Smazán {0} obrázek"
+msgstr[1] "Smazány {0} obrázky"
+msgstr[2] "Smazáno {0} obrázků"
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] "Importován {0} obrázek"
+msgstr[1] "Importovány {0} obrázky"
+msgstr[2] "Importováno {0} obrázků"
+
+msgid "2 images joined"
+msgstr "2 obrázky sloučeny"
+
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] "Posunut {0} obrázek"
+msgstr[1] "Posunuty {0} obrázky"
+msgstr[2] "Posunuto {0} obrázků"
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] "Otočen {0} obrázek"
+msgstr[1] "Otočeny {0} obrázky"
+msgstr[2] "Otočeno {0} obrázků"
+
+msgid "2 images unjoined"
+msgstr "2 obrázky rozděleny"
+
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
+msgstr ""
+"Stahovaná oblast OSM je příliš velká. Režim stahování byl změněn na "
+"poloautomatický do doby, než bude vrstva restartována."
+
+msgid "Downloading"
+msgstr "Stahuji"
+
+msgid "Select mode"
+msgstr "Výběr režimu"
+
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
+msgstr ""
+"<html><head><title>Přihlášení do Mapillary</title></head><body>Přihlášení se "
+"zdařilo, návrat do JOSM.</body></html>"
+
+msgid "Downloading Mapillary images"
+msgstr "Stáhnout obrázky z Mapillary"
+
+msgid "Total Mapillary images: {0}"
+msgstr "Celkem obrázků z Mapillary: {0}"
+
+msgid "No images found"
+msgstr "Nebyly nalezeny žádné obrázky"
+
+msgid "Finished upload"
+msgstr "Nahrávání na server dokončeno"
+
+msgid "Uploading: {0}"
+msgstr "Náhrávám na server: {0}"
 
 msgid "Measured values"
 msgstr "Naměřené hodnoty"
@@ -27623,6 +28382,9 @@ msgstr "Délka výběru"
 msgid "Selection Area"
 msgstr "Plocha výběru"
 
+msgid "Selection Radius"
+msgstr "Poloměr výběru"
+
 msgid "Angle"
 msgstr "Úhel"
 
@@ -27686,49 +28448,6 @@ msgstr "Vytvořit zákaz Michiganského odbočení vlevo"
 msgid "Unable to find via nodes. Please check your selection"
 msgstr "Nenalezeny průjezdní uzly (via). Prosím zkontrolujte svůj výběr."
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-"Dotaz XAPI , např. '''' (stáhne všechna data), ''[highway=*]'', nebo "
-"''[[network=VRR][ref=603|613]''"
-
-msgid "Download from OSM mirror..."
-msgstr "Stáhnout ze zrcadla serveru OSM..."
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr "Tento dotaz XAPI se zdá být neplatný. Zkontrolujte ho, prosím."
-
-msgid "Object type: "
-msgstr "Typ objektu: "
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr "Typ objektu OSM ke stažení (''*'' znamená jakýkoliv)"
-
-msgid "XAPI query: "
-msgstr "Dotaz XAPI: "
-
-msgid "Download from Overpass API ..."
-msgstr "Stáhnout z Overpass API..."
-
-msgid "Download map data from Overpass API server."
-msgstr "Stáhnout data mapy ze serveru Overpass API."
-
-msgid "Overpass query: "
-msgstr "Dotaz Overpass: "
-
-msgid "Select OSM mirror URL"
-msgstr "Zvolit URL zrcadla serveru OSM"
-
-msgid "Select OSM mirror URL to download from."
-msgstr "Zvolit URL zrcadla serveru OSM, ze kterého se bude stahovat"
-
-msgid "Base URL"
-msgstr "Základní URL"
-
-msgid "Enforce meta data"
-msgstr "Vynutit si metadata"
-
 msgid "About Plugin"
 msgstr "O doplňku"
 
@@ -27976,6 +28695,9 @@ msgstr "Rozdíl"
 msgid "Perform diff between current data set and existing OSM data."
 msgstr "Porovnat aktuální datovou sadu a data na serveru OSM."
 
+msgid "Tools"
+msgstr "Nástroje"
+
 msgid "Open tools menu for this data."
 msgstr "Otevřít menu nástrojů pro tato data."
 
@@ -29251,6 +29973,27 @@ msgstr "Veřejná doprava: Povolit body trasy"
 msgid "Public Transport: Edit waypoint name"
 msgstr "Hromadná doprava: Upravit název bodu trasy"
 
+msgid "Public transport routes"
+msgstr "Trasy veřejné dopravy"
+
+msgid "Toggle direction arrows"
+msgstr "Přeponout směrové šipky"
+
+msgid "Toggle reference labels"
+msgstr "Přepnout referenční štítky"
+
+msgid "Visualize public transport routes"
+msgstr "Vizualizovat trasy veřejné dopravy"
+
+msgid "Filters"
+msgstr "Filtry"
+
+msgid "Choose Filter"
+msgstr "Vybrat filtr"
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr "Chyba inicializace JSlider. Ujistěte se, že váš meta-inf je správně."
+
 msgid "Relation Toolbox"
 msgstr "Panel nástrojů relace"
 
@@ -29422,6 +30165,9 @@ msgstr "Zpětvrácená sada změn"
 msgid "It is not allowed to revert changeset from {0}"
 msgstr "Není povoleno vracet zpět sady změn z {0}"
 
+msgid "Downloading objects history"
+msgstr "Stahuji historii objektů"
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr "Chýba zlučovaný cieľ pre {0} s id {1}"
 
@@ -29431,6 +30177,9 @@ msgstr "Historie objektů"
 msgid "History reverter"
 msgstr "Navracení historie"
 
+msgid "Tool: Display objects history dialog"
+msgstr "Nástroj: Zobrazit dialog historie objektů"
+
 msgid "Preparing history data..."
 msgstr "Pripravujem dáta histórie..."
 
@@ -29617,6 +30366,9 @@ msgstr "Nová hodnota pro {0}"
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr "Chybí předvolba ''{0}''. Nelze inicializovat SdsApi."
 
+msgid "Proxy Authentication Required"
+msgstr "Požadována autentizace proxy"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -29818,6 +30570,39 @@ msgstr "Práh sloučení blízkých uzlů"
 msgid "SeaMap Editor"
 msgstr "SeaMap Editor"
 
+msgid "Spline drawing"
+msgstr "Kreslení spline křivek"
+
+msgid "Draw a spline curve"
+msgstr "Nakreslit spline křivku"
+
+msgid "Spline goes outside of the world."
+msgstr "Spline křivka vede mimo svět."
+
+msgid "Add an existing node to spline: {0}"
+msgstr "Přidat existující uzel do spline křivky: {0}"
+
+msgid "Add a new node to spline: {0}"
+msgstr "Přidat nový uzel do spline křivky: {0}"
+
+msgid "Delete spline node {0}"
+msgstr "Smazat uzel spline křivky {0}"
+
+msgid "Finish spline"
+msgstr "Dokončit spline křivku"
+
+msgid "Splines"
+msgstr "Spline křivky"
+
+msgid "Spline drawing preferences"
+msgstr "Předvolby kreslení spline křivek"
+
+msgid "Curve steps"
+msgstr "Kroky křivky"
+
+msgid "Undelete node {0}"
+msgstr "Vzít zpět vymazání uzlu {0}"
+
 msgid "OSM Export"
 msgstr "OSM Export"
 
@@ -29827,6 +30612,9 @@ msgstr "Exportovat dat o dopravním provozu do souboru sítě SUMO."
 msgid "SUMO Export"
 msgstr "SUMO Export"
 
+msgid "Export"
+msgstr "Export"
+
 msgid "AutoSave LiveData"
 msgstr "Automatické ukládání LiveData"
 
@@ -30076,9 +30864,6 @@ msgstr "Tracer2 chyba"
 msgid "Parameter for server request"
 msgstr "Parametry požadavku na server"
 
-msgid "Tile size:"
-msgstr "Velikost dlaždic:"
-
 msgid "Resolution:"
 msgstr "Rozlišení:"
 
@@ -31015,9 +31800,9 @@ msgid ""
 "be split at node <span class=\"object-name\">{2}</span> where it connects to "
 "way <span class=\"object-name\">{3}</span>."
 msgstr ""
-"Cesta <span class=\"object-name\">{0}</span> s úlohou <tt>{1}</tt> by mala "
-"byť rozdelená v bode <span class=\"object-name\">{2}</span> kde sa pripája "
-"na cestu <span class=\"object-name\">{3}</span>."
+"Cesta <span class=\"object-name\">{0}</span> s rolí <tt>{1}</tt> by měla být "
+"rozdělená v bodě <span class=\"object-name\">{2}</span> kde se připojuje na "
+"cestu <span class=\"object-name\">{3}</span>."
 
 msgid "Split now"
 msgstr "Rozdělit teď"
@@ -31738,9 +32523,6 @@ msgstr ""
 "Hledání trasového bodu. Klikněte na trasový bod a zobrazení mapy se na něj "
 "posune."
 
-msgid "Way Select"
-msgstr "Výběr cesty"
-
 msgid "Add names from Wikipedia"
 msgstr "Přidat názvy z Wikipedie"
 
diff --git a/i18n/po/cy.po b/i18n/po/cy.po
index cf8699e..11a92e9 100644
--- a/i18n/po/cy.po
+++ b/i18n/po/cy.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2009-07-17 21:45+0000\n"
 "Last-Translator: iggy23 <Unknown>\n"
 "Language-Team: Welsh <cy at li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=4; plural=n==1 ? 0 : n==2 ? 1 : (n != 8 && n != 11) ? "
 "2 : 3;\n"
-"X-Launchpad-Export-Date: 2015-05-12 05:01+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 05:06+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: cy\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -98,19 +98,16 @@ msgstr ""
 msgid "Updating user interface"
 msgstr ""
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
 msgstr ""
 
 msgid "Warning"
 msgstr "Rhybudd"
 
-msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
+msgid "Ignoring malformed file URL: \"{0}\""
 msgstr ""
 
-msgid "Ignoring malformed URL: \"{0}\""
+msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 
 msgid ""
@@ -445,6 +442,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
 
@@ -1030,6 +1030,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr ""
 
@@ -1946,15 +1970,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr ""
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -1976,6 +1991,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2094,9 +2118,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2310,9 +2331,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr ""
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2526,6 +2553,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2568,6 +2599,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3018,6 +3052,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3135,10 +3187,44 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3328,6 +3414,12 @@ msgstr ""
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3355,13 +3447,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -3977,9 +4069,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -3989,12 +4078,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4175,13 +4276,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4379,6 +4480,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4592,43 +4694,54 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
 msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
 msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
 msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
 msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
-msgid "Menu: {0}"
+msgctxt "menu"
+msgid "Help"
 msgstr ""
 
-msgid "Save and load the current session (list of layers, etc.)"
+msgid "Menu: {0}"
 msgstr ""
 
 msgid "Edit toolbar"
@@ -4652,6 +4765,7 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
 msgstr ""
 
@@ -4774,58 +4888,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr ""
-
-msgid "Pos."
+msgid " ({0})"
 msgstr ""
 
-msgid "Role"
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5254,6 +5326,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr ""
+
 msgid "Primitive"
 msgstr ""
 
@@ -5494,6 +5569,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5640,6 +5718,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5743,7 +5856,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5871,6 +5984,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5880,17 +5998,48 @@ msgstr ""
 msgid "unknown"
 msgstr ""
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -5936,6 +6085,12 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr ""
 
@@ -6065,10 +6220,16 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
-msgid "List of notes"
+msgid "Mini map"
 msgstr ""
 
-msgid "Add comment"
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
+msgid "List of notes"
+msgstr ""
+
+msgid "Add comment"
 msgstr ""
 
 msgid "Comment"
@@ -6123,10 +6284,15 @@ msgstr ""
 msgid "Enter the ID of the object that should be downloaded"
 msgstr ""
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6155,6 +6321,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr ""
 
+msgid "Selection"
+msgstr ""
+
 msgid "Open a selection list window."
 msgstr ""
 
@@ -6245,6 +6414,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -6839,6 +7014,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6930,14 +7111,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7110,6 +7290,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7645,6 +7831,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8490,6 +8679,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr ""
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr ""
 
@@ -8543,6 +8832,9 @@ msgstr ""
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8563,7 +8855,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8646,80 +8938,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr ""
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-
-msgid "Auto Zoom"
-msgstr ""
-
-msgid "Auto load tiles"
-msgstr ""
-
-msgid "Show Errors"
-msgstr ""
-
-msgid "Load Tile"
-msgstr ""
-
-msgid "Show Tile Info"
-msgstr ""
-
-msgid "Load All Tiles"
-msgstr ""
-
-msgid "Load All Error Tiles"
-msgstr ""
-
-msgid "Increase zoom"
-msgstr ""
-
-msgid "Decrease zoom"
-msgstr ""
-
-msgid "Snap to tile size"
-msgstr ""
-
-msgid "Flush Tile Cache"
-msgstr ""
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
@@ -8729,56 +8947,30 @@ msgstr ""
 msgid "No validation errors"
 msgstr ""
 
-msgid "Blank Layer"
-msgstr ""
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "Download visible tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-
-msgid "Change resolution"
-msgstr ""
-
-msgid "Reload erroneous tiles"
-msgstr ""
-
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Automatic downloading"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Zoom to native resolution"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Supported projections are: {0}"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Save WMS file"
+msgid "Try Again"
 msgstr ""
 
-msgid "Correlate to GPX"
+msgid "No images could be matched!"
 msgstr ""
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
@@ -8865,24 +9057,9 @@ msgstr ""
 msgid "Offset:"
 msgstr ""
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
 msgid "Correlate"
 msgstr ""
 
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9076,9 +9253,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr ""
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9141,9 +9315,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9769,15 +9940,15 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr ""
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -10570,13 +10741,28 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
-msgid "imagery fade"
+msgid "1. Enter getCapabilities URL"
 msgstr ""
 
-msgid "Fade Color: "
+msgid "2. Enter name for this layer"
 msgstr ""
 
-msgid "Fade amount: "
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
+msgid "imagery fade"
+msgstr ""
+
+msgid "Fade Color: "
+msgstr ""
+
+msgid "Fade amount: "
 msgstr ""
 
 msgid "Soft"
@@ -10588,6 +10774,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10609,6 +10807,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10651,9 +10852,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr ""
 
@@ -10678,36 +10876,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11643,6 +11826,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] ""
@@ -11751,6 +11942,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12004,6 +12198,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12540,6 +12737,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12925,6 +13125,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13919,6 +14132,9 @@ msgstr ""
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr ""
+
 msgid "Blue:"
 msgstr ""
 
@@ -13958,7 +14174,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -13970,9 +14186,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14081,6 +14294,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14094,12 +14310,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14136,10 +14358,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14166,6 +14394,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14190,7 +14421,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14205,6 +14436,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14217,12 +14451,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14243,6 +14471,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14275,10 +14506,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14308,6 +14536,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14323,154 +14557,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14485,9 +14725,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14617,6 +14866,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14632,7 +14896,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -14958,6 +15222,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15042,11 +15311,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15100,7 +15364,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15115,9 +15379,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15198,6 +15459,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15236,6 +15505,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15311,9 +15583,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15719,6 +15988,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15743,10 +16020,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15763,6 +16036,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15779,11 +16056,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15799,6 +16088,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15811,6 +16104,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15838,6 +16135,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16229,6 +16538,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16305,6 +16617,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr ""
 
@@ -16842,6 +17157,12 @@ msgstr ""
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17031,6 +17352,11 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
 msgstr ""
 
@@ -17084,6 +17410,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17225,13 +17555,127 @@ msgstr ""
 msgid "public"
 msgstr ""
 
-msgid "Pier"
+msgid "Marine Fuel"
 msgstr ""
 
-msgid "Lock Gate"
+msgid "Agip"
 msgstr ""
 
-msgid "Turning Point"
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
+msgid "Pier"
+msgstr ""
+
+msgid "Lock Gate"
+msgstr ""
+
+msgid "Turning Point"
 msgstr ""
 
 msgid "Slipway"
@@ -17341,6 +17785,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -17464,78 +17911,6 @@ msgstr ""
 msgid "Fuel"
 msgstr ""
 
-msgid "Agip"
-msgstr ""
-
-msgid "Aral"
-msgstr ""
-
-msgid "Avia"
-msgstr ""
-
-msgid "BP"
-msgstr ""
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr ""
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
 msgid "With shop"
 msgstr ""
 
@@ -17545,51 +17920,12 @@ msgstr ""
 msgid "kiosk"
 msgstr ""
 
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -17808,9 +18144,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17829,6 +18162,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18031,6 +18367,12 @@ msgstr ""
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18121,6 +18463,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18335,6 +18680,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18822,7 +19170,7 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
@@ -18831,43 +19179,70 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
-msgid "Glass"
+msgid "Cardboard"
 msgstr ""
 
-msgid "Paper"
+msgid "Electrical Appliances"
 msgstr ""
 
-msgid "Scrap Metal"
+msgid "Glass"
 msgstr ""
 
-msgid "container"
+msgid "Glass Bottles"
 msgstr ""
 
-msgid "centre"
+msgid "Green Waste"
 msgstr ""
 
-msgid "Waste Basket/Trash Can"
+msgid "Paper"
 msgstr ""
 
-msgid "Waste Disposal/Dumpster"
+msgid "Plastic"
 msgstr ""
 
-msgid "Sanitary Dump Station"
+msgid "Plastic Bottles"
 msgstr ""
 
-msgid "Suction pumpout"
+msgid "Plastic Packaging"
 msgstr ""
 
-msgid "Gravity drain for hose"
+msgid "Scrap Metal"
 msgstr ""
 
-msgid "Casette or Elsan Disposal"
+msgid "Shoes"
 msgstr ""
 
-msgid "Operation times"
+msgid "Small Appliances"
 msgstr ""
 
-msgid "Backrest"
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
+msgstr ""
+
+msgid "Waste Basket/Trash Can"
+msgstr ""
+
+msgid "Waste Disposal/Dumpster"
+msgstr ""
+
+msgid "Sanitary Dump Station"
+msgstr ""
+
+msgid "Suction pumpout"
+msgstr ""
+
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
+msgstr ""
+
+msgid "Operation times"
+msgstr ""
+
+msgid "Backrest"
 msgstr ""
 
 msgid "Amount of Seats"
@@ -19047,6 +19422,9 @@ msgstr ""
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr ""
 
@@ -19222,12 +19600,18 @@ msgstr ""
 msgid "Basketball"
 msgstr ""
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr ""
 
@@ -19243,13 +19627,13 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
@@ -19273,9 +19657,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19294,9 +19675,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -19369,6 +19747,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20689,9 +21075,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -21704,10 +22087,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22134,6 +22517,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22158,6 +22544,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22218,6 +22616,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22308,9 +22709,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22680,6 +23090,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22734,9 +23147,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23480,47 +23890,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23529,10 +23948,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24135,6 +24566,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr ""
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25232,374 +25666,680 @@ msgid ""
 "highlight tracks"
 msgstr ""
 
-msgid "Delete this"
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
 msgstr ""
 
-msgid "Delete this&older"
+msgid "Connecting"
 msgstr ""
 
-msgid "km/h"
+msgid "Connected"
 msgstr ""
 
-msgid "Track name: "
+msgid "no name"
 msgstr ""
 
-msgid "Update IRS adjustment layer"
+msgid "Live GPS"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid "Show GPS data."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Speed"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Course"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
+msgid "Explore"
 msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25620,6 +26360,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -25678,47 +26421,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -25951,6 +26653,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr ""
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27168,6 +27873,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27339,6 +28065,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27348,6 +28077,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27528,6 +28260,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27706,6 +28441,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27715,6 +28483,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -27951,9 +28722,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29436,9 +30204,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/da.po b/i18n/po/da.po
index 6c58ada..6f11a8b 100644
--- a/i18n/po/da.po
+++ b/i18n/po/da.po
@@ -8,16 +8,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
-"PO-Revision-Date: 2015-05-11 21:20+0000\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
+"PO-Revision-Date: 2015-10-05 15:17+0000\n"
 "Last-Translator: Jørn <joern.map at gmail.com>\n"
 "Language-Team: Dansk <kde-i18n-doc at kde.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:37+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:38+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: da_DK\n"
 "X-Poedit-SourceCharset: utf-8\n"
 
@@ -73,7 +73,7 @@ msgid "Cause: "
 msgstr "Årsag: "
 
 msgid "Executing platform startup hook"
-msgstr "Afvikler platforms opstartskrog"
+msgstr "Afvikler tilføjelse til opstart af platform"
 
 msgid "Building main menu"
 msgstr "Opbygger hovedmenu"
@@ -99,21 +99,18 @@ msgstr "Indlæser billedlags-indstillinger"
 msgid "Updating user interface"
 msgstr "Opdaterer brugerfladen"
 
-msgid "{0} completed in {1}"
-msgstr "{0} færdig i {1}"
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "Ignorerer misformet fil-URL: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "Ignorerer misformet URL: \"{0}\""
 
 msgid "Warning"
 msgstr "Advarsel"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "Ignorerer misformet fil-URL: \"{0}\""
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr "Parameter \"downloadgps\" accepterer ikke filnavne eller fil-URL’er"
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "Ignorerer misformet URL: \"{0}\""
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -199,8 +196,8 @@ msgstr "Fortsæt"
 
 msgid "Click to continue and to open {0} browser"
 msgid_plural "Click to continue and to open {0} browsers"
-msgstr[0] "Klik for at fortsætte og åbne  {0} browser"
-msgstr[1] "Klik for at fortsætte og åbne  {0} browser"
+msgstr[0] "Klik for at fortsætte og åbne {0} browser"
+msgstr[1] "Klik for at fortsætte og åbne {0} browsere"
 
 msgid "Cancel"
 msgstr "Annuller"
@@ -209,10 +206,10 @@ msgid "Click to abort launching external browsers"
 msgstr "Klik for at afbryde åbning af eksterne browsere"
 
 msgid "Please select at least one already uploaded node, way, or relation."
-msgstr "Vælg venligst et allerede uploadet punkt, vej eller relation."
+msgstr "Vælg mindst et allerede uploadet punkt, vej eller relation."
 
 msgid "Please select the target layer."
-msgstr "Vælg venligst det ønskede lag"
+msgstr "Vælg det ønskede lag"
 
 msgid "Select target layer"
 msgstr "Vælg ønsket lag"
@@ -224,7 +221,7 @@ msgid ""
 "<html>There are no layers the source layer<br>''{0}''<br>could be merged "
 "to.</html>"
 msgstr ""
-"<html>Der er ingen lag, kildelaget<br>''{0}''br>kunne flettes sammen "
+"<html>Der er ingen lag kildelaget<br>''{0}''br>kunne lægges sammen "
 "med.</html>"
 
 msgid "No target layers"
@@ -305,7 +302,7 @@ msgid "Move the selected nodes in to a line."
 msgstr "Flyt de valgte punkter ind på linje"
 
 msgid "Please select at least three nodes."
-msgstr "Vælg venligst mindst tre punkter."
+msgstr "Vælg mindst tre punkter."
 
 msgid "Can not align a polygon. Abort."
 msgstr "Kan ikke justere en polygon. Afbryder."
@@ -383,23 +380,23 @@ msgid "Downloading open changesets ..."
 msgstr "Downloader åbne rettesæt ..."
 
 msgid "Combine Way"
-msgstr "Kombinér veje"
+msgstr "Kombiner veje"
 
 msgid "Combine several ways into one."
-msgstr "Kombinér flere veje til én"
+msgstr "Kombiner flere veje til en"
 
 msgid "Change directions?"
 msgstr "Skift retninger?"
 
 msgid "Reverse and Combine"
-msgstr "Reversér og kombinér"
+msgstr "Vend og kombiner"
 
 msgid ""
 "The ways can not be combined in their current directions.  Do you want to "
 "reverse some of them?"
 msgstr ""
-"Vejene kan ikke kombineres med deres nuværende retninger. Vil du reversere "
-"nogle af dem?"
+"Vejene kan ikke kombineres med deres nuværende retninger. Vil du vende nogle "
+"af dem?"
 
 msgid ""
 "Could not combine ways<br>(They could not be merged into a single string of "
@@ -410,8 +407,8 @@ msgstr ""
 
 msgid "Combine {0} way"
 msgid_plural "Combine {0} ways"
-msgstr[0] "Kombinere {0} vej"
-msgstr[1] "Kombinere {0} veje"
+msgstr[0] "Kombiner {0} vej"
+msgstr[1] "Kombiner {0} veje"
 
 msgid "Please select at least two ways to combine."
 msgstr "Vælg mindst to veje at kombinere."
@@ -441,8 +438,8 @@ msgid ""
 "Please select exactly two or three nodes or one way with exactly two or "
 "three nodes."
 msgstr ""
-"Vælg venligst præcis to eller tre punkter eller én vej med præcis to eller "
-"tre punkter."
+"Vælg præcis to eller tre punkter eller en vej med præcis to eller tre "
+"punkter."
 
 msgid "Those nodes are not in a circle. Aborting."
 msgstr "Punkterne er ikke i en cirkel. Afbryder."
@@ -454,10 +451,10 @@ msgid "Create multipolygon"
 msgstr "Opret multipolygon"
 
 msgid "No data loaded."
-msgstr "Intet data indlæst."
+msgstr "Ingen data indlæst."
 
 msgid "You must select at least one way."
-msgstr "Du skal vælge mindst én vej."
+msgstr "Du skal vælge mindst en vej."
 
 msgid "Delete"
 msgstr "Slet"
@@ -471,6 +468,9 @@ msgstr "Vis/skjul dialog panel"
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Vis/skjul dialog panel, maksimer kortvisning"
 
+msgid "Distribute Nodes"
+msgstr "Fordel punkter"
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr "Fordel de valgte punkter med ens afstande langs en linje"
 
@@ -490,7 +490,7 @@ msgid "Download from OSM..."
 msgstr "Download fra OSM..."
 
 msgid "Download map data from the OSM server."
-msgstr "Download kort-data fra OSM serveren."
+msgstr "Download kortdata fra OSM serveren."
 
 msgid ""
 "<html>This action will require {0} individual<br>download requests. Do you "
@@ -533,7 +533,7 @@ msgid "Expert Mode"
 msgstr "Eksperttilstand"
 
 msgid "Enable/disable expert mode"
-msgstr "Aktivér/deaktivér ekspertilstand"
+msgstr "Aktiver/deaktiver ekspertilstand"
 
 msgid "Follow line"
 msgstr "Følg linje"
@@ -560,7 +560,7 @@ msgid "Nothing to export. Get some data first."
 msgstr "Intet at eksportere. Få nogle data først."
 
 msgid "Export GPX file"
-msgstr "Eksportér GPX-fil"
+msgstr "Eksporter GPX-fil"
 
 msgid "History"
 msgstr "Historik"
@@ -588,7 +588,7 @@ msgid "Adjust the position of this imagery layer"
 msgstr "Juster positionen af dette billedlag"
 
 msgid "Adjust imagery offset"
-msgstr "Juster forskydningen for billedlaget"
+msgstr "Justerer forskydningen for billedlaget"
 
 msgid "OK"
 msgstr "OK"
@@ -606,7 +606,7 @@ msgstr ""
 "nedenunder."
 
 msgid "Offset: "
-msgstr "Offset: "
+msgstr "Forskydning: "
 
 msgid "Bookmark name: "
 msgstr "Bogmærkenavn: "
@@ -615,7 +615,7 @@ msgid "Overwrite"
 msgstr "Overskriv"
 
 msgid "Offset bookmark already exists. Overwrite?"
-msgstr "Offset bogmærke eksisterer allerede. Overskriv?"
+msgstr "Forskydnings bogmærke eksisterer allerede. Overskriv?"
 
 msgid "Advanced info"
 msgstr "Avanceret info"
@@ -698,8 +698,8 @@ msgid ""
 "Some of the ways were part of relations that have been modified.<br>Please "
 "verify no errors have been introduced."
 msgstr ""
-"Nogle af vejene var en del af relationer der er blevet ændret.<br>Kontrollér "
-"venligst at der ikke er kommet nogen fejl."
+"Nogle af vejene var en del af relationer der er blevet ændret.<br>Kontroller "
+"venligst at der ikke er indført nogen fejl."
 
 msgid "Fix tag conflicts"
 msgstr "Ret tag konflikter"
@@ -890,7 +890,7 @@ msgstr[0] "Læg {0} punkt sammen"
 msgstr[1] "Læg {0} punkter sammen"
 
 msgid "Merge selection"
-msgstr "Saml markering"
+msgstr "Læg markering sammen"
 
 msgid "Merge the currently selected objects into another layer"
 msgstr "Læg de valgte obekter ind i et andet lag"
@@ -916,7 +916,7 @@ msgid "Mirror selected nodes and ways."
 msgstr "Spejlvend de valgte punkter og veje"
 
 msgid "Please select at least one node or way."
-msgstr "Vælg mindst ét punkt eller vej."
+msgstr "Vælg mindst et punkt eller vej."
 
 msgid "up"
 msgstr "op"
@@ -1082,7 +1082,7 @@ msgid ""
 "Orthogonalize Shape / Undo<br>Please select nodes that were moved by the "
 "previous Orthogonalize Shape action!"
 msgstr ""
-"Retvinkel form / Fortryd<br>Vælg noder der blev flyttet ved den tidligere "
+"Retvinkel form / Fortryd<br>Vælg punkter der blev flyttet ved den tidligere "
 "Retvinkel form handling!"
 
 msgid ""
@@ -1114,6 +1114,31 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr "Vælg venligst veje med vinkler på cirka 90 eller 180 grader."
 
+msgid "Download from Overpass API ..."
+msgstr "Download fra Overpass API ..."
+
+msgid "Download map data from Overpass API server."
+msgstr "Download kortdata fra Overpass API server."
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+"Lav Overpass forespørgsel ved hjælp Overpass Turbo forespørgsels guiden"
+
+msgid "Build query"
+msgstr "Lav forespørgsel"
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr "<html>Overpass guiden kunne ikke fortolke følgende forespørgsel:"
+
+msgid "Parse error"
+msgstr "Fortolkningsfejl"
+
+msgid "Overpass query: "
+msgstr "Overpass forespørgsel: "
+
+msgid "Overpass server: "
+msgstr "Overpass server: "
+
 msgid "Paste"
 msgstr "Indsæt"
 
@@ -1238,19 +1263,19 @@ msgid "Click to restart later."
 msgstr "Klik for at genstarte senere."
 
 msgid "Reverse way"
-msgstr "Vend vej om"
+msgstr "Vend vejretning"
 
 msgid "Reverse Ways"
-msgstr "Reverser veje"
+msgstr "Vend vejretninger"
 
 msgid "Reverse the direction of all selected ways."
-msgstr "Reverser retningen af alle valgte veje."
+msgstr "Vend retningen af alle valgte veje."
 
 msgid "Please select at least one way."
-msgstr "Vælg mindst én vej."
+msgstr "Vælg mindst en vej."
 
 msgid "Reverse ways"
-msgstr "Reverser veje"
+msgstr "Vend vejretninger"
 
 msgid "Save"
 msgstr "Gem"
@@ -1384,7 +1409,7 @@ msgid "Delete unnecessary nodes from a way."
 msgstr "Slet unødige punkter fra en vej."
 
 msgid "Please select at least one way to simplify."
-msgstr "Vælg venligst mindst en vej at forenkle"
+msgstr "Vælg mindst en vej at forenkle."
 
 msgid "Yes"
 msgstr "Ja"
@@ -1439,9 +1464,9 @@ msgid_plural ""
 "There is more than one way using the nodes you selected. Please select the "
 "way also."
 msgstr[0] ""
-"Der er mere end én vej, som bruger det punkt, du har valgt. Vælg også vejen."
+"Der er mere end en vej, som bruger det punkt, du har valgt. Vælg også vejen."
 msgstr[1] ""
-"Der er mere end én vej, som bruger de punkter, du har valgt. Vælg også vejen."
+"Der er mere end en vej, som bruger de punkter, du har valgt. Vælg også vejen."
 
 msgid "You must select two or more nodes to split a circular way."
 msgstr "Du skal vælge mindst to punkter for at opdele en kredsformig vej"
@@ -1509,22 +1534,22 @@ msgid "* One tagged node, or"
 msgstr "* Et tagget punkt, eller"
 
 msgid "* One node that is used by more than one way, or"
-msgstr "* Et punkt, som bruges af mere end én vej, eller"
+msgstr "* Et punkt, som bruges af mere end en vej, eller"
 
 msgid ""
 "* One node that is used by more than one way and one of those ways, or"
-msgstr "* Et punkt, som bruges af mere end én vej og en af disse veje, eller"
+msgstr "* Et punkt, som bruges af mere end en vej og en af disse veje, eller"
 
 msgid ""
 "* One way that has one or more nodes that are used by more than one way, or"
 msgstr ""
-"* En vej, som har ét eller flere punkter, som bruges af mere end én vej, "
+"* En vej, som har et eller flere punkter, som bruges af mere end en vej, "
 "eller"
 
 msgid ""
 "* One way and one or more of its nodes that are used by more than one way."
 msgstr ""
-"* Én vej samt en eller flere af dens punkter, som bruges af mere end én vej."
+"* En vej samt en eller flere af dens punkter, som bruges af mere end en vej."
 
 msgid ""
 "Note: If a way is selected, this way will get fresh copies of the unglued\n"
@@ -1728,7 +1753,7 @@ msgstr "Flytning af kortvisning"
 
 msgid "Enable/disable automatic moving of the map view to last placed node"
 msgstr ""
-"Aktivér/deaktivér automatisk flytning af kortvisningen til det sidste "
+"Aktiver/deaktiver automatisk flytning af kortvisningen til det sidste "
 "placerede punkt"
 
 msgid "Toggle Viewport Following"
@@ -1954,7 +1979,7 @@ msgstr ""
 "serveren"
 
 msgid "Ignore"
-msgstr "Ignorér"
+msgstr "Ignorer"
 
 msgid "Click to abort and to resume editing"
 msgstr "Klik for at afbryde og for at genoptage redigering"
@@ -2093,15 +2118,6 @@ msgstr "Vinkellås aktiv."
 msgid "Finish drawing."
 msgstr "Afslut tegning."
 
-msgid "FIX"
-msgstr "FIX"
-
-msgid "draw angle snap"
-msgstr "tegn vinkellås"
-
-msgid "draw angle snap highlight"
-msgstr "tegn vinkellås fremhævning"
-
 msgid "Toggle snapping by {0}"
 msgstr "Aktiver låsning med {0}"
 
@@ -2123,11 +2139,20 @@ msgstr "0,45,90,..."
 msgid "0,30,45,60,90,..."
 msgstr "0,30,45,60,90,..."
 
+msgid "FIX"
+msgstr "FIX"
+
+msgid "draw angle snap"
+msgstr "tegn vinkellås"
+
+msgid "draw angle snap highlight"
+msgstr "tegn vinkellås fremhævning"
+
 msgid "Angle snapping"
 msgstr "Vinkellås"
 
 msgid "Switch angle snapping mode while drawing"
-msgstr "Aktivér vinkellås tilstand mens der tegnes"
+msgstr "Skift vinkellås tilstand mens der tegnes"
 
 msgid "Dual alignment"
 msgstr "Dobbelt tilpasning"
@@ -2164,7 +2189,7 @@ msgstr "Flyt et segment langs dets normale og slip så museknappen."
 
 msgid ""
 "Move the node along one of the segments, then release the mouse button."
-msgstr "Flyt punkt langs en af segmenterne, og slip så museknappen."
+msgstr "Flyt punkt langs et af segmenterne, og slip så museknappen."
 
 msgid "Draw a rectangle of the desired size, then release the mouse button."
 msgstr "Tegn en firkant af passende størrelse og slip så museknappen."
@@ -2254,9 +2279,6 @@ msgstr ""
 "ParallelWayAction\n"
 "De valgte veje skal være en simpel forgreningsløs vej"
 
-msgid "Make parallel way error"
-msgstr "Fejl i udførsel af parallel vej"
-
 msgid "Drag play head"
 msgstr "Træk spillehoved"
 
@@ -2392,10 +2414,10 @@ msgid "Confirmation"
 msgstr "Bekræftelse"
 
 msgid "Select in relation list"
-msgstr "Markér i relationsliste"
+msgstr "Marker i relationsliste"
 
 msgid "Select relation in relation list."
-msgstr "Markér relation i relationsliste."
+msgstr "Marker relation i relationsliste."
 
 msgid "Add the members of all selected relations to current selection"
 msgstr ""
@@ -2420,7 +2442,7 @@ msgid "Select relation (add)"
 msgstr "Marker relation (tilføj)"
 
 msgid "Select relation"
-msgstr "Markér relation"
+msgstr "Marker relation"
 
 msgid "<not>"
 msgstr "<ikke>"
@@ -2489,11 +2511,17 @@ msgid "all objects"
 msgstr "alle objekter"
 
 msgid "Also include incomplete and deleted objects in search."
-msgstr "Inkludér også ufuldstændige og slettede objekter i søgningen."
+msgstr "Inkluder også ufuldstændige og slettede objekter i søgningen."
+
+msgid "standard"
+msgstr "standard"
 
 msgid "regular expression"
 msgstr "regulært udtryk"
 
+msgid "MapCSS selector"
+msgstr "MapCSS vælger"
+
 msgid "add toolbar button"
 msgstr "tilføj værktøjslinjeknap"
 
@@ -2583,7 +2611,7 @@ msgid "logical not"
 msgstr "logisk ikke"
 
 msgid "use parenthesis to group expressions"
-msgstr "brug paranteser for at gruppére udtryk"
+msgstr "brug paranteser for at gruppere udtryk"
 
 msgid "objects"
 msgstr "objekter"
@@ -2721,6 +2749,10 @@ msgid "RX"
 msgstr "Regulært udtryk"
 
 msgctxt "search"
+msgid "CSS"
+msgstr "CSS"
+
+msgctxt "search"
 msgid "A"
 msgstr "A"
 
@@ -2772,6 +2804,9 @@ msgstr "Forventet talområde"
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr "Uventet udtryk. Forventede {0}, fandt {1}"
 
+msgid "Failed to parse MapCSS selector"
+msgstr "Kunne ikke fortolke MapCSS vælger"
+
 msgid "Unexpected token: {0}"
 msgstr "Uventet udtryk: {0}"
 
@@ -2819,8 +2854,8 @@ msgid ""
 "dependency.</html>"
 msgstr ""
 "<html>{0} relationer skaber en cyklus, fordi de refererer til "
-"hinanden.<br>JOSM kan ikke uploade dem. Redigér venligst relationerne og "
-"fjern den cirkulære afhængighed.</html>"
+"hinanden.<br>JOSM kan ikke uploade dem. Rediger relationerne og fjern den "
+"cirkulære afhængighed.</html>"
 
 msgid "Relation ..."
 msgstr "Relation ..."
@@ -2847,8 +2882,8 @@ msgid ""
 "inspect them."
 msgstr ""
 "Følgende er resultatet af automatisk validering. Prøv at rette disse fejl, "
-"men vær forsigtig (slet ikke gyldig data). Er du i tvivl, så ignorér "
-"dem.<br>Hvis du fortryder denne dialog, kan du finde enhederne i valdator-"
+"men vær forsigtig (slet ikke gyldig data). Er du i tvivl, så ignorer "
+"dem.<br>Hvis du fortryder denne dialog, kan du finde posterne i validator-"
 "sidepanelet for at se nærmere på dem."
 
 msgid "Errors"
@@ -2893,7 +2928,7 @@ msgid "New way {0} has 0 nodes"
 msgstr "Ny vej {0} har 0 punkter"
 
 msgid "Change node {0}"
-msgstr "Ændr punkt {0}"
+msgstr "Ændre punkt {0}"
 
 msgid "Change way {0}"
 msgstr "Ændre vej {0}"
@@ -3047,8 +3082,8 @@ msgstr[1] "Roter {0} punkter"
 
 msgid "Scale {0} node"
 msgid_plural "Scale {0} nodes"
-msgstr[0] "Skalér {0} punkt"
-msgstr[1] "Skalér {0} punkter"
+msgstr[0] "Skalerer {0} punkt"
+msgstr[1] "Skalerer {0} punkter"
 
 msgid "Selected {0} object"
 msgid_plural "Selected {0} objects"
@@ -3161,7 +3196,7 @@ msgstr[1] ""
 "vejens retning, og dermed dens semantiske betydning?</html>"
 
 msgid "Reverse directional way."
-msgstr "Omvend ensrettet vej."
+msgstr "Vend ensrettet vej."
 
 msgid ""
 "When reversing this way, the following changes are suggested in order to "
@@ -3210,7 +3245,7 @@ msgid "Automatic tag correction"
 msgstr "Automatisk tag-rettelse"
 
 msgid "Unable to create directory {0}, autosave will be disabled"
-msgstr "Kunne ikke oprette mappen {0}, autosave er slået fra"
+msgstr "Kunne ikke oprette mappen {0}, autogem er slået fra"
 
 msgid "Unable to create file {0}, other filename will be used"
 msgstr "Kunne ikke oprette filen {0}, andet filnavn vil blive brugt"
@@ -3261,6 +3296,24 @@ msgstr "Kunne ikke oprette manglende cachemappe: {0}"
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr "<html>Advarsel: Kunne ikke oprette manglende cache mappe: {0}</html>"
 
+msgid "Unable to delete temporary file {0}"
+msgstr "Kan ikke slette midlertidig fil {0}"
+
+msgid "Unable to set file non-readable {0}"
+msgstr "Kan ikke sæt fil til ikke-læsbar {0}"
+
+msgid "Unable to set file non-writable {0}"
+msgstr "Kan ikke sæt fil til ikke-skrivbar {0}"
+
+msgid "Unable to set file non-executable {0}"
+msgstr "Kan ikke sæt fil til ikke-kørbar {0}"
+
+msgid "Unable to set file readable {0}"
+msgstr "Kan ikke sæt fil til læsbar {0}"
+
+msgid "Unable to set file writable {0}"
+msgstr "Kan ikke sæt fil til skrivbar {0}"
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3397,13 +3450,51 @@ msgctxt "compass"
 msgid "E"
 msgstr "Ø"
 
-msgid "Not in cache"
-msgstr "Ikke i mellemlager"
-
 msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr ""
 "Projektionen \"{0}\" blev ikke fundet, bogmærket \"{1}\" er ikke brugbart"
 
+msgid "HTTP error {0} when loading tiles"
+msgstr "HTTP fejl {0} ved indlæsning af tern"
+
+msgid "Error downloading tiles: {0}"
+msgstr "Fejl ved downloading af tern: {0}"
+
+msgid "Could not load image from tile server"
+msgstr "Kunne ikke indlæse billede fra tern server"
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+"{0} er ikke et gyldigt WMS argument. Kontroller denne server URL:\n"
+"{1}"
+
+msgid "Select WMTS layer"
+msgstr "Vælg WMTS lag"
+
+msgid "Layer name"
+msgstr "Lagnavn"
+
+msgid "Projection"
+msgstr "Projektion"
+
+msgid "Matrix set identifier"
+msgstr "Matrix sæt identifikator"
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr "Ingen lag defineret af getCapabilities dokument: {0}"
+
+msgid "No layer selected"
+msgstr "Intet lag valgt"
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
+msgstr ""
+"Kun kvadratiske tern understøttes. {0} x {1} returneret af serveren for "
+"TileMatrix identifikator {2}"
+
 msgid "ID > 0 expected. Got {0}."
 msgstr "ID > 0 forventet. Fik {0}."
 
@@ -3613,6 +3704,13 @@ msgstr "tekst"
 msgid "areatext"
 msgstr "Områdetekst"
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr "UTM projektion (''+proj=utm'') kræver ''+zone=...'' parameter."
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+"Forventet heltalsværdi i intervallet 1-60 for ''+zone=...'' parameter."
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr "Parameteren skal begynde med et ''+'' tegn (fandt ''{0}'')"
 
@@ -3640,15 +3738,15 @@ msgstr "Ellipsoiden \"{0}\" er ikke understøttet."
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr "Kombinationen af ellipsoide parametre er ikke understøttet."
 
+msgid "Unknown datum identifier: ''{0}''"
+msgstr "Ukendt datum identifikator: ''{0}''"
+
 msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr "Ellipsoide påkrævet (+ellps=* eller +a=*, +b=*)"
 
 msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr "Grid shift filen ''{0}'' for option +nadgrids understøttes ikke."
 
-msgid "Unknown datum identifier: ''{0}''"
-msgstr "Ukendt datum identifikator: ''{0}''"
-
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
 msgstr "Datum krævet (+datum=*, +towgs84=* eller +nadgrids=*)"
 
@@ -3774,7 +3872,7 @@ msgid "Multiple associatedStreet relations"
 msgstr "Flere associatedStreet relationer"
 
 msgid "House number without street"
-msgstr "Husnummer uden vej"
+msgstr "Husnummer uden gade"
 
 msgid "House number ''{0}'' duplicated"
 msgstr "Husnummer \"{0}\" duplikeret"
@@ -3783,10 +3881,10 @@ msgid "Duplicate house numbers"
 msgstr "Duplikerede husnumre"
 
 msgid "Multiple street names in relation"
-msgstr "Adskillige vejnavne i relationen"
+msgstr "Adskillige gadenavne i relationen"
 
 msgid "House number too far from street"
-msgstr "Husnummer for langt fra vejen"
+msgstr "Husnummer for langt fra gaden"
 
 msgid "API Capabilities"
 msgstr "API-egenskaber"
@@ -3902,7 +4000,7 @@ msgid "Building duplicated nodes"
 msgstr "Duplikerede punkter i bygninger"
 
 msgid "Landuse duplicated nodes"
-msgstr "Duplikerede punkter i landbrug"
+msgstr "Duplikerede punkter i landområde"
 
 msgid "Other duplicated nodes"
 msgstr "Andre duplikerede punkter"
@@ -4066,6 +4164,8 @@ msgid ""
 "With the currently used mappaint style the style for inner way equals the "
 "multipolygon style"
 msgstr ""
+"Med den aktuelt anvendte korttegningsstil er stil for indre vej lig med "
+"multipolygon stil"
 
 msgid "Style for outer way mismatches"
 msgstr "Stilen for ydre vej fejler"
@@ -4074,9 +4174,11 @@ msgid ""
 "With the currently used mappaint style(s) the style for outer way mismatches "
 "polygon"
 msgstr ""
+"Med den aktuelt anvendte korttegningsstil(e) er stilen for ydre måde ikke i "
+"overensstemmelse med polygon"
 
 msgid "Area style on outer way"
-msgstr ""
+msgstr "Område-stil på ydre vej"
 
 msgid "Multipolygon is not closed"
 msgstr "Multipolygon er ikke lukket"
@@ -4152,7 +4254,7 @@ msgid ""
 "than one way."
 msgstr ""
 "Denne test tjekker at en forbindelse mellem to punkter ikke benyttes af mere "
-"end én vej."
+"end en vej."
 
 msgid "Areas share segment"
 msgstr "Områder deler segment"
@@ -4239,7 +4341,7 @@ msgid ""
 "This test checks for ways that contain some of their nodes more than once."
 msgstr ""
 "Denne test tjekker for veje, som indeholder nogle af deres punkter mere end "
-"én gang."
+"en gang."
 
 msgid "Similarly named ways"
 msgstr "Veje med næsten identiske navne"
@@ -4293,9 +4395,6 @@ msgstr "Tag nøgle længere end tilladt"
 msgid "Tags with empty values"
 msgstr "Tags med tomme værdier"
 
-msgid "Invalid property key"
-msgstr "Ulovlig egenskabsnøgle"
-
 msgid "Invalid white space in property key"
 msgstr "Ulovligt blanktegn i egenskabsnøgle"
 
@@ -4305,17 +4404,29 @@ msgstr "Egenskabsværdi begynder eller slutter med blanktegn"
 msgid "Property values contain HTML entity"
 msgstr "Egenskabsværdi indeholder HTML-kodet tegn"
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr "Nøgle ''{0}'' ligner ''{1}''."
+
+msgid "Misspelled property key"
+msgstr "Forkert stavet egenskabsnøgle"
+
 msgid "Key ''{0}'' not in presets."
 msgstr "Nøglen \"{0}\" er ikke i prædefinerede"
 
 msgid "Presets do not contain property key"
 msgstr "Prædefinitionerne indeholder ikke egenskabs-nøglen"
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr "Værdi ''{0}'' for nøgle ''{1}'' ligner ''{2}''."
+
+msgid "Misspelled property value"
+msgstr "Forkert stavet egenskabsværdi"
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr "Værdien \"{0}\" for nøglen \"{1}\" er ikke i prædefinerede"
 
 msgid "Presets do not contain property value"
-msgstr "Prædefinitionerne indeholder ikke egenskabs-værdi"
+msgstr "Prædefinitionerne indeholder ikke egenskabsværdi"
 
 msgid "FIXMES"
 msgstr "FIXMEs"
@@ -4325,13 +4436,13 @@ msgstr "Tjek egenskabsnøgler"
 
 msgid "Validate that property keys are valid checking against list of words."
 msgstr ""
-"Kontrollér at egenskabsnøglerne er gyldige ved at tjekke med en ordliste."
+"Kontroller at egenskabsnøglerne er gyldige ved at tjekke med en ordliste."
 
 msgid "Use complex property checker."
 msgstr "Brug kompleks egenskabs-tjekker."
 
 msgid "Validate property values and tags using complex rules."
-msgstr "Validér egenskabs-værdier og tags ved hjælp af komplekse regler."
+msgstr "Valider egenskabsværdier og tags ved hjælp af komplekse regler."
 
 msgid "TagChecker source"
 msgstr "TagChecker-kilde"
@@ -4344,7 +4455,7 @@ msgstr "Tjek egenskabsværdier."
 
 msgid "Validate that property values are valid checking against presets."
 msgstr ""
-"Godkend at egenskabs-værdier er gyldige tjeks i forhold til prædefinitioner."
+"Godkend at egenskabsværdier er gyldige tjeks i forhold til prædefinitioner."
 
 msgid "Check for FIXMES."
 msgstr "Tjek for FIXMEs"
@@ -4494,6 +4605,9 @@ msgstr "Vejpunkt tæt på anden vej"
 msgid "Connected way end node near other way"
 msgstr "Forbundet vejs slutpunkt tæt på anden vej"
 
+msgid "Unconnected nodes without physical tags"
+msgstr "Uforbundne punkter uden fysiske tags"
+
 msgid "Untagged and unconnected nodes"
 msgstr "Utaggede og uforbundne punkter"
 
@@ -4501,9 +4615,6 @@ msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 "Denne test tjekker for utaggede punkter, som ikke er del af nogen vej."
 
-msgid "Unconnected nodes without physical tags"
-msgstr "Uforbundne punkter uden fysiske tags"
-
 msgid "No tags"
 msgstr "Ingen tags"
 
@@ -4564,10 +4675,10 @@ msgid "This test checks the direction of water, land and coastline ways."
 msgstr "Denne test tjekker retningen af vand-, land- og kystlinje-veje."
 
 msgid "Reversed coastline: land not on left side"
-msgstr "Modsatrettet kystlinje: Der er ikke land på venstre side"
+msgstr "Omvendt kystlinje: Der er ikke land på venstre side"
 
 msgid "Reversed land: land not on left side"
-msgstr "Modsatrettet land: Der er ikke land på venstre side"
+msgstr "Omvendt land: Der er ikke land på venstre side"
 
 msgid "Show this dialog again the next time"
 msgstr "Vis denne dialog igen næste gang"
@@ -4701,12 +4812,13 @@ msgstr "Klik for at lukke dialogen"
 msgid "Imagery offset"
 msgstr "Billedforskydning"
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr "Billedlag"
 
 msgctxt "layer"
 msgid "Offset"
-msgstr "Offset"
+msgstr "Forskydning"
 
 msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
 msgstr "Forventede ikke-tom værdi for parameter \"{0}\". Fik \"{1}\"."
@@ -4724,7 +4836,7 @@ msgid "Standard unix geometry argument"
 msgstr "Standard unix geometrisk argument"
 
 msgid "Download the bounding box"
-msgstr "Download afgrænsningsfeltet"
+msgstr "Download afgrænsningsområdet"
 
 msgid "Download the location at the URL (with lat=x&lon=y&zoom=z)"
 msgstr "Download URL''ens lokation (med lat=x&lon=y&zoom=z)"
@@ -4733,7 +4845,7 @@ msgid "Open a file (any file type that can be opened with File/Open)"
 msgstr "Åbn en fil (enhver filtype der kan åbnes med Fil/Åbn)"
 
 msgid "Download the bounding box as raw GPS"
-msgstr "Download den omkransende boks som rå GPS"
+msgstr "Download afgrænsningsområdet som rå GPS"
 
 msgid "Download the location at the URL (with lat=x&lon=y&zoom=z) as raw GPS"
 msgstr "Download URL''ens lokation (med lat=x&lon=y&zoom=z) som rå GPS"
@@ -4772,25 +4884,25 @@ msgid "options provided as Java system properties"
 msgstr "options givet som Java systemegenskaber"
 
 msgid "/PATH/TO/JOSM/PREF    "
-msgstr ""
+msgstr "/STI/TIL/JOSM/PREF    "
 
 msgid "Set the preferences directory"
 msgstr "Sæt indstillingsmappen"
 
 msgid "/PATH/TO/JOSM/USERDATA"
-msgstr ""
+msgstr "/STI/TIL/JOSM/USERDATA"
 
 msgid "Set the user data directory"
 msgstr "Set brugerdatamappen"
 
 msgid "/PATH/TO/JOSM/CACHE   "
-msgstr ""
+msgstr "/STI/TIL/JOSM/CACHE   "
 
 msgid "Set the cache directory"
 msgstr "Sæt cachemappen"
 
 msgid "/PATH/TO/JOSM/HOMEDIR "
-msgstr ""
+msgstr "/STI/TIL/JOSM/HOMEDIR "
 
 msgid ""
 "Relocate all 3 directories to homedir. Cache directory will be in "
@@ -4937,45 +5049,56 @@ msgstr ""
 "Det kan skyldes en manglende proxy konfiguration.<br>Vil du ændre dine proxy-"
 "indstillinger nu?"
 
+msgctxt "menu"
 msgid "File"
 msgstr "Filer"
 
-msgid "Session"
-msgstr "Session"
+msgctxt "menu"
+msgid "Edit"
+msgstr "Rediger"
 
+msgctxt "menu"
 msgid "View"
 msgstr "Vis"
 
+msgctxt "menu"
 msgid "Tools"
-msgstr "Funktioner"
+msgstr "Værktøjer"
 
+msgctxt "menu"
 msgid "More tools"
 msgstr "Flere værktøjer"
 
+msgctxt "menu"
 msgid "Data"
 msgstr "Data"
 
+msgctxt "menu"
 msgid "Selection"
 msgstr "Markering"
 
+msgctxt "menu"
 msgid "Presets"
 msgstr "Prædefinerede"
 
 msgid "More..."
 msgstr "Mere..."
 
+msgctxt "menu"
 msgid "GPS"
 msgstr "GPS"
 
+msgctxt "menu"
 msgid "Windows"
 msgstr "Vinduer"
 
+msgctxt "menu"
+msgid "Help"
+msgstr "Hjælp"
+
 msgid "Menu: {0}"
 msgstr "Menu: {0}"
 
-msgid "Save and load the current session (list of layers, etc.)"
-msgstr "Gem og indlæs den aktuelle session (liste med lag, osv.)"
-
 msgid "Edit toolbar"
 msgstr "Værktøjslinjen Rediger"
 
@@ -4998,6 +5121,7 @@ msgstr "Åben indstillinger for billedlag"
 msgid "Search menu items"
 msgstr "Søgemenuemner"
 
+msgctxt "menu"
 msgid "Audio"
 msgstr "Lyd"
 
@@ -5122,67 +5246,17 @@ msgstr "I baggrunden"
 msgid "Click to run job in background"
 msgstr "Klik for at afvikle jobbet i baggrunden"
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-"Luftfotos kan være forkert placeret. Kontroller venligst ved hjælp af GPS "
-"spor!"
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-
-msgid "Details..."
-msgstr "Detaljer..."
-
-msgid "Hide this message and never show it again"
-msgstr "Skjul denne besked og vis den aldrig igen"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-"<html>Bekræft venligst for at fjerne <strong>1 objekt</strong> fra <strong>1 "
-"relation</strong>.</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>Bekræft venligst for at fjerne <strong>1 objekt</strong> fra "
-"<strong>{0} relationer</strong>.</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>Bekræft venligst for at fjerne <strong>{0} objekter</strong> fra "
-"<strong>{1} relationer</strong>.</html>"
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] "Sletter {0} objekt"
-msgstr[1] "Sletter {0} objekter"
-
-msgid "Delete objects"
-msgstr "Sletter objekter"
-
-msgid "To delete"
-msgstr "At slette"
-
-msgid "From Relation"
-msgstr "Fra relation"
-
-msgid "Pos."
-msgstr "Pos."
+msgid " ({0})"
+msgstr " ({0})"
 
-msgid "Role"
-msgstr "Rolle"
+msgid "{0} completed in {1}"
+msgstr "{0} færdig i {1}"
 
-msgid "Click to close the dialog and remove the object from the relations"
-msgstr "Klik for at lukke dialogen og fjerne objektet fra relationerne"
+msgid "Enlarge"
+msgstr "Forstør"
 
-msgid "Click to close the dialog and to abort deleting the objects"
-msgstr "Klik for at lukke dialogen og afbryde sletning af objekterne"
+msgid "Shrink"
+msgstr "Formindsk"
 
 msgid ""
 "<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
@@ -5648,6 +5722,9 @@ msgstr "Behold deres slettede status"
 msgid "Undecide conflict between deleted state"
 msgstr "Omgør beslutning om konflikt mellem slettede status"
 
+msgid "Role"
+msgstr "Rolle"
+
 msgid "Primitive"
 msgstr "Primitiv"
 
@@ -5805,7 +5882,7 @@ msgid "Tag collection does not include the selected value ''{0}''."
 msgstr "Tagsamling indeholder ikke den markerede værdi \"{0}\""
 
 msgid "Not decided yet."
-msgstr "Ikke afklaret endnu"
+msgstr "Ikke afklaret endnu."
 
 msgid "Tags from nodes"
 msgstr "Tags fra punkter"
@@ -5927,6 +6004,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr "Anvend denne rolle for alle medlemmer"
 
+msgid "Pos."
+msgstr "Pos."
+
 msgid "Orig. Way"
 msgstr "Orig. vej"
 
@@ -5935,8 +6015,7 @@ msgstr "Beslutning"
 
 msgid "<html>Please select the values to keep for the following tags.</html>"
 msgstr ""
-"<html>Marker venligst de værdier der skal beholdes for de følgende "
-"tags.</html>"
+"<html>Marker de værdier der skal beholdes for de følgende tags.</html>"
 
 msgid "Show tags with conflicts only"
 msgstr "Vis kun tags med konflikter"
@@ -5952,8 +6031,8 @@ msgid ""
 "only.<br>Unselect to show all changesets for objects in the current data "
 "layer.</html>"
 msgstr ""
-"Markér for kun at vise rettesæt for de aktuelt markerede "
-"objekter.<br>Afmarkér for at vise alle rettesæt for objekter i det aktuelle "
+"<html>Vælg for kun at vise rettesæt for de aktuelt markerede "
+"objekter.<br>Fravælg for at vise alle rettesæt for objekter i det aktuelle "
 "data lag.</html>"
 
 msgid "Changesets"
@@ -6089,8 +6168,49 @@ msgstr "Løs konflikter"
 msgid "Resolve conflicts for ''{0}''"
 msgstr "Løs konflikter for ''{0}''"
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+"<html>Bekræft venligst for at fjerne <strong>1 objekt</strong> fra <strong>1 "
+"relation</strong>.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Bekræft venligst for at fjerne <strong>1 objekt</strong> fra "
+"<strong>{0} relationer</strong>.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Bekræft venligst for at fjerne <strong>{0} objekter</strong> fra "
+"<strong>{1} relationer</strong>.</html>"
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] "Sletter {0} objekt"
+msgstr[1] "Sletter {0} objekter"
+
+msgid "Delete objects"
+msgstr "Sletter objekter"
+
+msgid "To delete"
+msgstr "At slette"
+
+msgid "From Relation"
+msgstr "Fra relation"
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr "Klik for at lukke dialogen og fjerne objektet fra relationerne"
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr "Klik for at lukke dialogen og afbryde sletning af objekterne"
+
 msgid "Filter objects and hide/disable them."
-msgstr "Filtrér objekter og skjul/slå dem fra."
+msgstr "Filtrer objekter og skjul/slå dem fra."
 
 msgid "Enable filter"
 msgstr "Slå filter til"
@@ -6192,8 +6312,8 @@ msgstr "Udvidet objekt-information"
 msgid "map style"
 msgstr "kortstil"
 
-msgid " ({0})"
-msgstr " ({0})"
+msgid "edit counts"
+msgstr "rediger tæller"
 
 msgid "not in data set"
 msgstr "ikke i datasæt"
@@ -6264,13 +6384,13 @@ msgid "{0} Nodes: "
 msgstr "{0} Punkter: "
 
 msgid "Bounding box: "
-msgstr "Omkransende boks: "
+msgstr "Afgrænsningsområde: "
 
 msgid "Bounding box (projected): "
-msgstr "Omkransende boks (projekteret): "
+msgstr "Afgrænsningsområde (projekteret): "
 
 msgid "Center of bounding box: "
-msgstr ""
+msgstr "Centrum af afgrænsningsområde: "
 
 msgid "Coordinates: "
 msgstr "Koordinater: "
@@ -6332,6 +6452,11 @@ msgid ""
 msgstr ""
 "Advarsel: De 2 valgte objekter har lignende, men ikke ens stilcacher."
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] "{0} bruger har sidst redigeret udvælgelsen:"
+msgstr[1] "{0} brugere har sidst redigeret udvælgelsen:"
+
 msgid "xml"
 msgstr "xml"
 
@@ -6341,29 +6466,61 @@ msgstr "mapcss"
 msgid "unknown"
 msgstr "ukendt"
 
+msgid "Enter the coordinates for the new node."
+msgstr "Indtast koordinaterne for det nye punkt."
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
 msgstr ""
-"Indtast koordinater for det nye punkt.<br/>Du kan adskille længdegrad og "
-"breddegrad med mellemrum, komma eller semikolon.<br/>Brug positive tal eller "
-"N, E bogstaverne til at angive Nord eller Øst kompasretningerne.<br/>For Syd "
-"og Vest kompasretningerne kan du bruge enten negative tal eller S, W "
-"bogstaverne.<br/>Koordinatværdien kan være i en af tre "
-"formater:<ul><li><i>grader</i><tt>°</tt></li><li><i>grader</i><tt>°</"
-"tt> <i>minutter</i><tt>'</tt></li><li><i>grader</i><tt>°</tt> "
-"<i>minutter</i><tt>'</tt> "
-"<i>sekunder</i><tt>&quot</tt></li></ul>Symbolerne <tt>°</tt>, "
-"<tt>'</tt>, <tt>′</tt>, <tt>"</tt>, <tt>″</tt> er "
-"valgfrie.<br/><br/>Nogle eksempler:<ul>{0}</ul>"
+"Du kan adskille længdegrad og breddegrad med mellemrum, komma eller "
+"semikolon."
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+"Brug positive tal eller N, E bogstaverne til at angive Nord eller Øst "
+"kompasretningerne."
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+"For Syd og Vest kompasretningerne kan du enten bruge negative tal eller S, W "
+"bogstaverne."
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr "Koordinatværdi kan være i en af tre formater:"
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr "<i>grader</i><tt>°</tt>"
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr "<i>grader</i><tt>°</tt> <i>minutter</i><tt>'</tt>"
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+"<i>grader</i><tt>°</tt> <i>minutter</i><tt>'</tt> "
+"<i>sekunder</i><tt>&quot</tt>"
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+"Symbolerne <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, "
+"<tt>"</tt>, <tt>″</tt> er valgfrie."
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+"Du kan også bruge syntaksen <tt>lat=\"...\" lon=\"...\"</tt> eller "
+"<tt>lat=''...'' lon=''...''</tt>."
+
+msgid "Some examples:"
+msgstr "Nogle eksempler:"
 
 msgid "Projected coordinates:"
 msgstr "Projekterede koordinater:"
@@ -6393,7 +6550,7 @@ msgid "Open a list of all loaded layers."
 msgstr "Åbn en liste over alle hentede lag."
 
 msgid "Delete the selected layers."
-msgstr "Slet de markerede lag"
+msgstr "Slet de markerede lag."
 
 msgid "Show/hide"
 msgstr "Vis/skjul"
@@ -6410,6 +6567,12 @@ msgstr "Gennemsigtighed"
 msgid "Adjust opacity of the layer."
 msgstr "Juster lagets gennemsigtighed"
 
+msgid "Gamma"
+msgstr "Gamma"
+
+msgid "Adjust gamma value of the layer."
+msgstr "Juster gammaværdien for laget."
+
 msgid "Activate"
 msgstr "Aktivér"
 
@@ -6459,7 +6622,7 @@ msgid "Map Paint Styles"
 msgstr "Korttegningsstile"
 
 msgid "configure the map painting style"
-msgstr "Konfigurér korttegningsstilen"
+msgstr "Konfigurer korttegningsstilen"
 
 msgid "MapPaint"
 msgstr "MapPaint"
@@ -6539,6 +6702,12 @@ msgstr "Stil indstillinger"
 msgid "Customize the style"
 msgstr "Tilpas stil"
 
+msgid "Mini map"
+msgstr "Mini kort"
+
+msgid "Displays a small map of the current edit location"
+msgstr "Viser et lille kort over den aktuelle redigerings placering"
+
 msgid "List of notes"
 msgstr "Liste over noter"
 
@@ -6589,7 +6758,7 @@ msgid "mixed"
 msgstr "blandet"
 
 msgid "Choose the OSM object type"
-msgstr "Vælg OSM objekt type"
+msgstr "Vælg OSM objekttype"
 
 msgid "Object ID:"
 msgstr "Objekt ID:"
@@ -6597,16 +6766,21 @@ msgstr "Objekt ID:"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "Indtast ID’et fra det objekt der skal downloads"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr "Objekt IDs kan adskilles af komma eller mellemrum, for eksempel: {0}"
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
 msgstr ""
-"Objekt ID’er kan være adskilt af komma eller mellemrum.<br/>Eksempler: "
-"{0}<br/>I blandet tilstand, angives objekter sådan her: {1}<br/>({2} står "
-"for <i>punkt</i>, {3} for <i>vej</i>, og {4} for <i>relation</i>)"
+"I blandet tilstand angiv objekter sådan her: {0}<br/>({1} står for "
+"<i>punkt</i>, {2} for <i>vej</i>, og {3} for <i>relation</i>)"
 
-msgid ""
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
+msgstr ""
+"Intervaller af objekt IDs er angivet med en bindestreg, for eksempel: {0}"
+
+msgid ""
 "Invalid ID list specified\n"
 "Cannot continue."
 msgstr ""
@@ -6634,6 +6808,9 @@ msgstr "Relationer: {0}/{1}"
 msgid "Relations: {0}"
 msgstr "Relationer: {0}"
 
+msgid "Selection"
+msgstr "Markering"
+
 msgid "Open a selection list window."
 msgstr "Åbn et vindue med en markeringsliste."
 
@@ -6724,6 +6901,12 @@ msgstr "Åbn valideringsvindue"
 msgid "Validation results"
 msgstr "Valideringsresultater"
 
+msgid "Lookup"
+msgstr "Opslag"
+
+msgid "Looks up the selected primitives in the error list."
+msgstr "Slå de de valgte primitiver op i fejllisten."
+
 msgid "Fix"
 msgstr "Ret"
 
@@ -6791,7 +6974,7 @@ msgid "Launch the dialog for querying changesets"
 msgstr "Start rettesætsforespørgselsdialogen"
 
 msgid "Remove from cache"
-msgstr "Fjern fra mellemlager"
+msgstr "Fjern fra cache"
 
 msgid "Remove the selected changesets from the local cache"
 msgstr "Fjern de markerede rettesæt fra den lokale cache"
@@ -6885,10 +7068,10 @@ msgid "Download the changeset content from the OSM server"
 msgstr "Download indhold af rettesæt fra OSM-serveren"
 
 msgid "Update content"
-msgstr "Opdatér indhold"
+msgstr "Opdater indhold"
 
 msgid "Update the changeset content from the OSM server"
-msgstr "Opdatér indhold af rettesæt fra OSM-serveren"
+msgstr "Opdater indhold af rettesæt fra OSM-serveren"
 
 msgid "Download and show the history of the selected objects"
 msgstr "Download og vis historikken for de valgte objekter"
@@ -6954,7 +7137,7 @@ msgid "Remove the changeset in the detail view panel from the local cache"
 msgstr "Fjern rettesættet i detaljepanelet fra den lokale cache"
 
 msgid "Update the changeset from the OSM server"
-msgstr "Opdatér rettesættet fra OSM-serveren"
+msgstr "Opdater rettesættet fra OSM-serveren"
 
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
@@ -7020,7 +7203,7 @@ msgstr ""
 "Vælg rettesæt baseret på den dato/tid de er blevet oprettet eller lukket"
 
 msgid "Select only changesets related to a specific bounding box"
-msgstr "Markér kun rettesæt relateret til et specifikt afgrænsningsfelt"
+msgstr "Vælg kun rettesæt relateret til et specifikt afgrænsningsområde"
 
 msgid "Query open changesets only"
 msgstr "Forespørg kun åbne rettesæt"
@@ -7120,18 +7303,19 @@ msgid ""
 "Cannot restrict the changeset query to a specific bounding box. The input is "
 "invalid."
 msgstr ""
-"Kan ikke begrænse rettesæt forespørgslen til en specifik omkransende boks. "
-"Input er ugyldigt."
+"Kan ikke begrænse rettesætsforespørgslen til et specifikt "
+"afgrænsningsområde. Input er ugyldigt."
 
 msgid ""
 "<html>Please enter valid longitude/latitude values to restrict<br>the "
 "changeset query to a specific bounding box.</html>"
 msgstr ""
-"<html>Indtast venligst gyldige længde/breddegradsværdier for at "
-"begrænse<br>rettesætsforespørgslen til et specifikt afgrænsningsfelt.</html>"
+"<html>Indtast gyldige længde/breddegradsværdier for at "
+"begrænse<br>rettesætsforespørgslen til et specifikt "
+"afgrænsningsområde.</html>"
 
 msgid "Invalid bounding box"
-msgstr "Ugyldigt afgrænsningsfelt"
+msgstr "Ugyldigt afgrænsningsområde"
 
 msgid ""
 "The current value is not a valid user ID. Please enter an integer value > 0"
@@ -7370,6 +7554,12 @@ msgstr "Gå til OSM wiki’en for tag-hjælp (F1)"
 msgid "Launch browser with wiki help for selected object"
 msgstr "Start browseren med wikihjælp for det valgte objekt"
 
+msgid "Go to Taginfo"
+msgstr "Gå til Taginfo"
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr "Start browser med Taginfo statistik for valgt objekt"
+
 msgid "Paste Value"
 msgstr "Indsæt værdi"
 
@@ -7463,17 +7653,14 @@ msgstr "Indstil antallet af nyligt tilføjede tags"
 msgid "Remember last used tags after a restart"
 msgstr "Husk seneste brugte tags efter en genstart"
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
-msgstr "<code>Ctrl-1</code> for at anvende første forslag"
+msgid "to apply first suggestion"
+msgstr "for at anvende første forslag"
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
-msgstr "<code>Shift-Enter</code> for at tilføje uden at lukke dialogen"
+msgid "to add without closing the dialog"
+msgstr "for at tilføje uden at lukke dialogen"
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
-msgstr ""
-"<code>Shift-Ctrl-1</code> for at tilføje første forslag uden at lukke "
-"dialogen"
+msgid "to add first suggestion without closing the dialog"
+msgstr "for at tilføje første forslag uden at lukke dialogen"
 
 msgid "Please enter the number of recently added tags to display"
 msgstr "Indtast venligst antallet af nyligt tilføjede tags der skal vises"
@@ -7661,16 +7848,22 @@ msgid "Select objects for selected relation members"
 msgstr "Vælg objekter for valgte relationsmedlemmer"
 
 msgid "Sort the relation members"
-msgstr "Sortér relationsmedlemmerne"
+msgstr "Sorterer relationsmedlemmerne"
 
 msgid "Relation Editor: Sort"
-msgstr "Relationseditor: Sortér"
+msgstr "Relationseditor: Sorterer"
+
+msgid "Sort below"
+msgstr "Sorterer nedenfor"
+
+msgid "Sort the selected relation members and all members below"
+msgstr "Sorterer de valgte relationsmedlemmer og alle medlemmer nedenfor"
 
 msgid "Reverse the order of the relation members"
-msgstr "Reversér relationsmedlemmernes rækkefølge"
+msgstr "Vend rækkefølge af relationsmedlemmerne"
 
 msgid "Reverse"
-msgstr "Omvendt"
+msgstr "Vend"
 
 msgid "Move the currently selected members up"
 msgstr "Flyt de nu markerede medlemmer op"
@@ -7739,7 +7932,7 @@ msgid "Apply the updates and close the dialog"
 msgstr "Tilføj opdateringerne og luk dialogboksen"
 
 msgid "Cancel the updates and close the dialog"
-msgstr "Annullér opdateringerne og luk dialogen"
+msgstr "Annuller opdateringerne og luk dialogen"
 
 msgid "Yes, save the changes and close"
 msgstr "Ja, gem ændringer og luk"
@@ -7954,7 +8147,7 @@ msgstr ""
 "området)"
 
 msgid "Bounding Box"
-msgstr "Omkransende område"
+msgstr "Afgrænsningsområde"
 
 msgid "The string ''{0}'' is not a valid double value."
 msgstr "Strengen ''{0}'' er ikke en gyldig double-værdi"
@@ -8157,10 +8350,10 @@ msgid "Failed to open URL"
 msgstr "Kunne ikke åbne URL"
 
 msgid "Open the current help page in an external browser"
-msgstr "Åbn den nuværende Hjælp-side i en ekstern browser"
+msgstr "Åbn den nuværende hjælpeside i en ekstern browser"
 
 msgid "Edit the current help page"
-msgstr "Redigér den nuværende Hjælp-side"
+msgstr "Rediger den nuværende hjælpeside"
 
 msgid ""
 "<html>The current URL <tt>{0}</tt><br>is an external URL. Editing is only "
@@ -8170,7 +8363,7 @@ msgstr ""
 "mulig for Hjælp-emner<br>på Hjælp-serveren <tt>{1}</tt>.</html>"
 
 msgid "Reload the current help page"
-msgstr "Hent den nuværende Hjælp-side igen"
+msgstr "Hent den nuværende hjælpeside igen"
 
 msgid "Go to the previous page"
 msgstr "Gå til foregående side"
@@ -8185,10 +8378,10 @@ msgid "Bad location in HTML document. Exception was: {0}"
 msgstr "Dårlig placering i HTML-dokument. Handlingen var: {0}"
 
 msgid "Failed to open help page. The target URL is empty."
-msgstr "Kunne ikke åbne Hjælp-side. URL’en er tom."
+msgstr "Kunne ikke åbne hjælpeside. URL’en er tom."
 
 msgid "Failed to open help page"
-msgstr "Kunne ikke åbne Hjælp-side"
+msgstr "Kunne ikke åbne hjælpeside"
 
 msgid "Latitude: "
 msgstr "Breddegrad: "
@@ -8253,6 +8446,9 @@ msgstr "Henter historik for relation {0}"
 msgid "Node {0}"
 msgstr "Punkt {0}"
 
+msgid "The nodes of this way are in reverse order"
+msgstr "Punkterne i denne vej er i omvendt rækkefølge"
+
 msgid "Zoom to node"
 msgstr "Zoom til punkt"
 
@@ -8416,7 +8612,7 @@ msgid "Object still in use"
 msgstr "Objekt stadig i brug"
 
 msgid "Error header \"{0}\" did not match with an expected pattern"
-msgstr ""
+msgstr "Fejl header \"{0}\" passer ikke til det forventet mønster"
 
 msgid "Upload"
 msgstr "Upload"
@@ -8517,6 +8713,8 @@ msgstr "Lukker rettesæt {0}"
 msgid ""
 "Failed to put Credential Dialog always on top. Caught security exception."
 msgstr ""
+"Kunne ikke sætte legitimationsoplysninger altid øverst. Fangede en sikkerhed "
+"handling."
 
 msgid "Enter credentials for OSM API"
 msgstr "Indtast brugeroplysninger for OSM-API"
@@ -8624,6 +8822,7 @@ msgstr "Mangler brugeridentitet"
 msgid ""
 "Failed to retrieve user infos for the current JOSM user. Exception was: {0}"
 msgstr ""
+"Kunne ikke hente brugerinfo for den aktuelle JOSM bruger. Handlingen var: {0}"
 
 msgid "Download objects"
 msgstr "Download objekter"
@@ -8866,7 +9065,7 @@ msgid "Apply tags to the changeset data is uploaded to"
 msgstr "Tilføj tags til det rettesæt, data bliver uploadet til"
 
 msgid "Manage open changesets and select a changeset to upload to"
-msgstr "Håndtér åbne rettesæt og vælg et rettesæt at uploade til"
+msgstr "Administrer åbne rettesæt og vælg et rettesæt at uploade til"
 
 msgid "Configure advanced settings"
 msgstr "Konfigurér avancerede indstillinger"
@@ -8950,7 +9149,7 @@ msgid "Empty metadata"
 msgstr "Tom metadata"
 
 msgid "Cancel the upload and resume editing"
-msgstr "Annullér uploaden og genoptag redigeringen"
+msgstr "Annuller uploaden og genoptag redigeringen"
 
 msgid "Tags of changeset {0}"
 msgstr "Tags i rettesæt {0}"
@@ -9128,7 +9327,7 @@ msgid "Select objects to upload"
 msgstr "Vælg objekter at uploade"
 
 msgid "Cancel uploading"
-msgstr "Annullér upload"
+msgstr "Annuller upload"
 
 msgid "Unexpected value for key ''{0}'' in preferences, got ''{1}''"
 msgstr "Uventet værdi for nøgle ''{0}'' i indstillinger, fik ''{1}''"
@@ -9217,6 +9416,108 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] "{0} objekt at slette:"
 msgstr[1] "{0} objekter at slette:"
 
+msgid "Show Tile Info"
+msgstr "Vis info om tern"
+
+msgid "Tile Info"
+msgstr "Tern info"
+
+msgid "Metadata "
+msgstr "Metadata "
+
+msgid "Auto Zoom"
+msgstr "Autozoom"
+
+msgid "Auto load tiles"
+msgstr "Hent tern automatisk"
+
+msgid "Load All Tiles"
+msgstr "Hent alle tern"
+
+msgid "Load All Error Tiles"
+msgstr "Indlæs alle fejl-tern"
+
+msgid "Zoom to native resolution"
+msgstr "Zoom til oprindelige opløsning"
+
+msgid "Change resolution"
+msgstr "Skift opløsning"
+
+msgid "Failed to create tile source"
+msgstr "Kunne ikke oprette tern kilde"
+
+msgid "Show Errors"
+msgstr "Vis fejl"
+
+msgid "Load Tile"
+msgstr "Hent tern"
+
+msgid "Increase zoom"
+msgstr "Øg zoom"
+
+msgid "Decrease zoom"
+msgstr "Formindsk zoom"
+
+msgid "Snap to tile size"
+msgstr "Ret ind til ternstørrelse"
+
+msgid "Flush Tile Cache"
+msgstr "Tøm tern cache"
+
+msgid "zoom in to load any tiles"
+msgstr "zoom ind for at indlæse nogle tern"
+
+msgid "zoom in to load more tiles"
+msgstr "zoom ind for at indlæse flere tern"
+
+msgid "increase zoom level to see more detail"
+msgstr "forøg zoomniveau for at se flere detaljer"
+
+msgid "No tiles at this zoom level"
+msgstr "Ingen tern på dette zoom niveau"
+
+msgid "Current zoom: {0}"
+msgstr "Nuværende zoom: {0}"
+
+msgid "Display zoom: {0}"
+msgstr "Skærm zoom: {0}"
+
+msgid "Pixel scale: {0}"
+msgstr "Pixel skala: {0}"
+
+msgid "Best zoom: {0}"
+msgstr "Bedste zoom: {0}"
+
+msgid "Cache stats: {0}"
+msgstr "Cache statistik: {0}"
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr "{0} ({1}), downloader automatisk i zoom {2}"
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr "{0} ({1}), downloader i zoom {2}"
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr "Hentede {0}/{1} tern"
+
+msgid "Save WMS file"
+msgstr "Gem WMS fil"
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+"Luftfotos kan være forkert placeret. Kontroller deres forskydning ved hjælp "
+"af GPS spor!"
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+
+msgid "Details..."
+msgstr "Detaljer..."
+
+msgid "Hide this message and never show it again"
+msgstr "Skjul denne besked og vis den aldrig igen"
+
 msgid "Customize Color"
 msgstr "Tilpas farve"
 
@@ -9270,6 +9571,9 @@ msgstr "Gem GPX-fil"
 msgid "Imagery fade"
 msgstr "Billed-toning"
 
+msgid "Unsupported imagery type: {0}"
+msgstr "Billedelagstype ikke understøttet: {0}"
+
 msgid "ERROR"
 msgstr "FEJL"
 
@@ -9290,12 +9594,12 @@ msgstr "Alle projektioner er understøttet"
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 "Laget {0} understøtter ikke den nye projektion {1}.\n"
-"{2}\n"
-"Du skal ændre projektionen igen eller fjerne laget."
+"Understøttede projektioner er: {2}\n"
+"Skift projektion igen eller fjerne laget."
 
 msgid "Save Layer"
 msgstr "Gem lag"
@@ -9378,85 +9682,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr "Gem OSM-fil"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-"{0} er ikke et gyldigt TMS argument. Kontrollér venligst denne server URL:\n"
-"{1}"
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-"TMS laget understøtter ikke projektion {0}.\n"
-"{1}\n"
-"Du skal ændre projektionen igen eller fjerne laget."
-
-msgid "Auto Zoom"
-msgstr "Autozoom"
-
-msgid "Auto load tiles"
-msgstr "Hent tern automatisk"
-
-msgid "Show Errors"
-msgstr "Vis fejl"
-
-msgid "Load Tile"
-msgstr "Hent tern"
-
-msgid "Show Tile Info"
-msgstr "Vis info om tern"
-
-msgid "Load All Tiles"
-msgstr "Hent alle tern"
-
-msgid "Load All Error Tiles"
-msgstr "Indlæs alle fejl-tern"
-
-msgid "Increase zoom"
-msgstr "Øg zoom"
-
-msgid "Decrease zoom"
-msgstr "Reducér zoom"
-
-msgid "Snap to tile size"
-msgstr "Ret ind til ternstørrelse"
-
-msgid "Flush Tile Cache"
-msgstr "Tøm tern-mellemlager"
-
-msgid "zoom in to load any tiles"
-msgstr "zoom ind for at indlæse nogle tern"
-
-msgid "zoom in to load more tiles"
-msgstr "zoom ind for at indlæse flere tern"
-
-msgid "increase zoom level to see more detail"
-msgstr "forøg zoomniveau for at se flere detaljer"
-
-msgid "No tiles at this zoom level"
-msgstr "Ingen tern på dette zoom niveau"
-
-msgid "Current zoom: {0}"
-msgstr "Nuværende zoom: {0}"
-
-msgid "Display zoom: {0}"
-msgstr "Skærm zoom: {0}"
-
-msgid "Pixel scale: {0}"
-msgstr "Pixel skala: {0}"
-
-msgid "Best zoom: {0}"
-msgstr "Bedste zoom: {0}"
-
-msgid "Cache stats: {0}"
-msgstr "Cache statistik: {0}"
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr "TMS lag ({0}), downloader i zoom {1}"
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr "EPSG:4326 og Mercator projektion er understøttet"
 
@@ -9466,59 +9691,33 @@ msgstr "Valideringsfejl"
 msgid "No validation errors"
 msgstr "Ingen valideringsfejl"
 
-msgid "Blank Layer"
-msgstr "Tomt lag"
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr "Hentede {0}/{1} tern"
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr "WMS-lag ({0}) downloader automatisk i zoom {1}"
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr "WMS-lag ({0}) downloader i zoom {1}"
-
-msgid "Download visible tiles"
-msgstr "Download synlige tern"
+msgid "Set WMS Bookmark"
+msgstr "Sæt WMS-bogmærke"
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
-"Det anmodede område er for stort. Zoom venligst lidt ind eller skift "
-"opløsningen."
-
-msgid "Change resolution"
-msgstr "Skift opløsning"
-
-msgid "Reload erroneous tiles"
-msgstr "Genhent fejlagtige tern"
-
-msgid "Alpha channel"
-msgstr "Alpha-kanal"
-
-msgid "Automatically change resolution"
-msgstr "Skift opløsning automatisk"
-
-msgid "Set WMS Bookmark"
-msgstr "Sæt WMS-bogmærke"
+"JOSM vil bruge EPSG:4326 til at forespørge serveren, men resultaterne kan "
+"variere afhængigt af WMS-serveren"
 
-msgid "Automatic downloading"
-msgstr "Automatisk download"
+msgid "Correlate to GPX"
+msgstr "Sammenhold med GPX"
 
-msgid "Zoom to native resolution"
-msgstr "Zoom til oprindelige opløsning"
+msgid "Invalid timezone"
+msgstr "Ugyldig tidszone"
 
-msgid "Supported projections are: {0}"
-msgstr "Understøttede projektioner er: {0}"
+msgid "Invalid offset"
+msgstr "Ugyldig forskydning"
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
-msgstr "WMS-filversion ikke understøttet; fandt {0}, forventede {1}"
+msgid "Correlate images with GPX track"
+msgstr "Afstem billeder med GPX-spor"
 
-msgid "Save WMS file"
-msgstr "Gem WMS fil"
+msgid "Try Again"
+msgstr "Prøv igen"
 
-msgid "Correlate to GPX"
-msgstr "Sammenhold med GPX"
+msgid "No images could be matched!"
+msgstr "Ingen billeder kunne afstemmes!"
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
 msgstr "GPX-filer (*.gpx *.gpx.gz)"
@@ -9610,24 +9809,9 @@ msgstr "Tidszone: "
 msgid "Offset:"
 msgstr "Forskydning:"
 
-msgid "Correlate images with GPX track"
-msgstr "Afstem billeder med GPX-spor"
-
 msgid "Correlate"
 msgstr "Sammenhold"
 
-msgid "Invalid timezone"
-msgstr "Ugyldig tidszone"
-
-msgid "Invalid offset"
-msgstr "Ugyldig forskydning"
-
-msgid "Try Again"
-msgstr "Prøv igen"
-
-msgid "No images could be matched!"
-msgstr "Ingen billeder kunne afstemmes!"
-
 msgid "No gpx selected"
 msgstr "Ingen gpx valgt"
 
@@ -9663,7 +9847,7 @@ msgid "Matching photos to track failed"
 msgstr "Det lykkedes ikke at matche fotos med spor"
 
 msgid "Adjust timezone and offset"
-msgstr "Justér tidszone og forskydning"
+msgstr "Justerer tidszone og forskydning"
 
 msgid "The selected photos do not contain time information."
 msgstr "Det valgte billede rummer ingen tidsangivelse"
@@ -9841,9 +10025,6 @@ msgstr ""
 "\n"
 "GPS tid: {0}"
 
-msgid "JPEG images (*.jpg)"
-msgstr "JPEG-billeder (*.jpg)"
-
 msgid "Show thumbnails"
 msgstr "Vis miniaturer"
 
@@ -9912,9 +10093,6 @@ msgstr "meter"
 msgid "Maximum area per request:"
 msgstr "Maksimum område per anmodning:"
 
-msgid "sq km"
-msgstr "km²"
-
 msgid "Download near:"
 msgstr "Hent nær:"
 
@@ -9973,7 +10151,7 @@ msgid "gps point"
 msgstr "gps-punkt"
 
 msgid "Import Audio"
-msgstr "Importér lyd"
+msgstr "Importer lyd"
 
 msgid ""
 "<html>The data in the GPX layer ''{0}'' has been downloaded from the "
@@ -10012,7 +10190,7 @@ msgstr ""
 "estimere deres tid blev udeladt."
 
 msgid "Import images"
-msgstr "Importér billeder"
+msgstr "Importer billeder"
 
 msgid ""
 "<html>The data in the GPX layer ''{0}'' has been downloaded from the "
@@ -10103,6 +10281,7 @@ msgstr "Vælg korttegningsstilene"
 
 msgid "Failed to load Mappaint styles from ''{0}''. Exception was: {1}"
 msgstr ""
+"Kunne ikke indlæse korttegningsstile fra ''{0}''. Handlingen var: {1}"
 
 msgid "loading style ''{0}''..."
 msgstr "indlæser stilart \"{0}''..."
@@ -10121,7 +10300,7 @@ msgstr[1] ""
 "højrekliks-menuen for detaljer."
 
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
-msgstr ""
+msgstr "Kunne ikke fortolke korttegningsstile fra ''{0}''. Fejlen var: {1}"
 
 msgid ""
 "Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
@@ -10139,6 +10318,7 @@ msgstr "Ulovligt streg-mønster. Mindst en værdi skal være over > 0"
 msgid ""
 "Failed to parse Mappaint styles from ''{0}''. Error was: [{1}:{2}] {3}"
 msgstr ""
+"Kunne ikke fortolke korttegningsstile fra ''{0}''. Fejl var: [{1}: {2}] {3}"
 
 msgid "Access Token Key:"
 msgstr "Adgangsudtryksnøgle:"
@@ -10647,15 +10827,15 @@ msgstr "Luk indstillingsdialogen og smid opdateringer af indstillinger væk"
 msgid "Save the preferences and close the dialog"
 msgstr "Gem indstillingerne og luk dialogen"
 
-msgid "Download plugins"
-msgstr "Download udvidelser"
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr "Du skal genstarte JOSM for at nogle af ændringerne træder i kraft."
 
 msgid "Would you like to restart now?"
 msgstr "Vil du genstarte nu?"
 
+msgid "Download plugins"
+msgstr "Download udvidelser"
+
 msgid "Icon paths:"
 msgstr "Ikonstier:"
 
@@ -10804,7 +10984,7 @@ msgid "Read from file"
 msgstr "Læs fra filen"
 
 msgid "Export selected items"
-msgstr "Eksportér valgte emner"
+msgstr "Eksporter valgte emner"
 
 msgid "JOSM custom settings files (*.xml)"
 msgstr "JOSM tilpasset indstillings-fil (*.xml)"
@@ -10814,7 +10994,7 @@ msgstr ""
 "Vælg venligst nogle indstillingsnøgler der ikke er markeret som standard"
 
 msgid "Export preferences keys to JOSM customization file"
-msgstr "Eksportér indstillingsnøgler til JOSM tilpasningsfil"
+msgstr "Eksporter indstillingsnøgler til JOSM tilpasningsfil"
 
 msgid "What to do with preference lists when this file is to be imported?"
 msgstr ""
@@ -10830,7 +11010,7 @@ msgid "Open JOSM customization file"
 msgstr "Åben JOSM tilpasningsfil"
 
 msgid "Import log"
-msgstr "Importér log"
+msgstr "Importer log"
 
 msgid ""
 "<html>Here is file import summary. <br/>You can reject preferences changes "
@@ -11018,7 +11198,7 @@ msgid ""
 "The number of seconds to jump forward or back when the relevant button is "
 "pressed"
 msgstr ""
-"Antallet af sekunder at springe frem eller tilbage når den relevante knap "
+"Antallet af sekunder der hoppes frem eller tilbage når den relevante knap "
 "trykkes ned"
 
 msgid "Forward/back time (seconds)"
@@ -11198,7 +11378,7 @@ msgid "Everything"
 msgstr "Alt"
 
 msgid "Name or offset"
-msgstr "Navn eller offset"
+msgstr "Navn eller forskydning"
 
 msgid "None"
 msgstr "Ingen"
@@ -11502,7 +11682,22 @@ msgid "Show Bounds"
 msgstr "Vis grænser"
 
 msgid "No bounding box was found for this layer."
-msgstr "Ingen afgrænsende boks blev fundet for dette lag."
+msgstr "Intet afgrænsningsområde blev fundet for dette lag."
+
+msgid "1. Enter getCapabilities URL"
+msgstr "1. Indtast getCapabilities URL"
+
+msgid "2. Enter name for this layer"
+msgstr "2. Indtast navn for dette lag"
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr "{0} cache, total cache størrelse: {1} bytes"
+
+msgid "Cache name"
+msgstr "Cache navn"
+
+msgid "Object Count"
+msgstr "Objekt tæller"
 
 msgid "imagery fade"
 msgstr "billed-toning"
@@ -11522,6 +11717,18 @@ msgstr "Stærk"
 msgid "Sharpen (requires layer re-add): "
 msgstr "Forøg skarphed (kræver gentilføjelse af lag): "
 
+msgid "Tile cache directory: "
+msgstr "Tern-cache mappe: "
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr "Maksimal størrelse på disk cache (per billedlag) i MB: "
+
+msgid "Maximum number of objects in memory cache: "
+msgstr "Maksimalt antal objekter i hukommelses cache: "
+
+msgid "Tiles zoom offset:"
+msgstr "Tern zoom forskydning:"
+
 msgid "Imagery Preferences"
 msgstr "Indstillinger for billedlag"
 
@@ -11541,7 +11748,10 @@ msgid "Imagery providers"
 msgstr "Leverandører af billedlag"
 
 msgid "Offset bookmarks"
-msgstr "Offset bogmærker"
+msgstr "Forskydnings bogmærker"
+
+msgid "Cache contents"
+msgstr "Cache indhold"
 
 msgid "Imagery Background: Default"
 msgstr "Baggrundsbillede: Standard"
@@ -11585,9 +11795,6 @@ msgstr "EULA licens URL er ikke tilgængelig: {0}"
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr "Forkert URL til EULA licensen: {0}"
 
-msgid "Projection"
-msgstr "Projektion"
-
 msgid "Layer"
 msgstr "Lag"
 
@@ -11612,18 +11819,12 @@ msgstr "Maks. zoomniveau: "
 msgid "Add to slippymap chooser: "
 msgstr "Tilføj til flytbart kort vælger: "
 
-msgid "Tile cache directory: "
-msgstr "Tern-cache mappe: "
-
 msgid "Maximum concurrent downloads: "
 msgstr "Højest antal samtidige downloads: "
 
 msgid "Maximum concurrent downloads per host: "
 msgstr "Højest antal samtidige downloads per host: "
 
-msgid "Maximum elements in disk cache: "
-msgstr "Højest antal elementer i disk cache: "
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
@@ -11631,20 +11832,11 @@ msgstr ""
 "Det lag understøtter ikke nogen af JOSM’s projektioner,\n"
 "så du kan ikke bruge det. Denne besked vil ikke blive vist igen."
 
-msgid "Downloader:"
-msgstr "Downloader:"
-
 msgid "Simultaneous connections:"
 msgstr "Samtidige forbindelser:"
 
-msgid "Overlap tiles"
-msgstr "Overlap fliser"
-
-msgid "% of east:"
-msgstr "% af øst:"
-
-msgid "% of north:"
-msgstr "% af nord:"
+msgid "Tile size:"
+msgstr "Tern størrelse:"
 
 msgid "Auto save enabled"
 msgstr "Autogem aktiveret"
@@ -11711,7 +11903,7 @@ msgid "Remove the selected styles from the list of active styles"
 msgstr "Fjern de markerede stile fra listen med aktive stile"
 
 msgid "Edit the filename or URL for the selected active style"
-msgstr "Redigér den markerede aktive stils filnavn eller URL"
+msgstr "Rediger den markerede aktive stils filnavn eller URL"
 
 msgid "Add the selected available styles to the list of active styles"
 msgstr "Tilføj de markerede tilgængelige stile til listen med aktive stile"
@@ -11963,8 +12155,8 @@ msgid ""
 "Please decide whether JOSM shall automatically update active plugins at "
 "startup after an update of JOSM itself."
 msgstr ""
-"Angiv venligst hvorvidt JOSM automatisk skal opdaterer aktive udvidelser ved "
-"opstart efter JOSM selv er opdateret."
+"Beslut hvorvidt JOSM automatisk skal opdatere aktive udvidelser ved opstart "
+"efter JOSM selv er opdateret."
 
 msgid "Update interval (in days):"
 msgstr "Opdateringsinterval (i dage):"
@@ -11973,8 +12165,8 @@ msgid ""
 "Please decide whether JOSM shall automatically update active plugins after a "
 "certain period of time."
 msgstr ""
-"Vælg venligst hvorvidt JOSM automatisk skal opdatere aktive udvidelser efter "
-"et bestemt stykke tid."
+"Beslut hvorvidt JOSM automatisk skal opdatere aktive udvidelser efter et "
+"bestemt stykke tid."
 
 msgid "By Code (EPSG)"
 msgstr "Efter kode (EPSG)"
@@ -12437,9 +12629,9 @@ msgid ""
 "JOSM is configured to use proxies from the system setting, but the JVM is "
 "not configured to retrieve them. Resetting preferences to ''No proxy''"
 msgstr ""
-"JOSM er konfigureret til at bruge mellemlager fra systemindstillingen, men "
-"JVM er ikke konfigureret til at hente dem. Nulstiller indstillinger til "
-"''Intet mellemlager''"
+"JOSM er konfigureret til at bruge proxies fra systemindstillingen, men JVM "
+"er ikke konfigureret til at hente dem. Nulstiller indstillinger til ''Ingen "
+"proxy''"
 
 msgid "Connection Settings"
 msgstr "Indstillinger for forbindelse"
@@ -12660,6 +12852,15 @@ msgstr "Anvend prædefinition"
 msgid "New relation"
 msgstr "Ny relation"
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+"Det prædefinerede <i>{0}</i> kan ikke anvendes, da intet er blevet valgt!"
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr "Det prædefinerede <i>{0}</i> kan ikke anvendes, da valget er uegnet!"
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] "Ret {0} objekt"
@@ -12714,26 +12915,36 @@ msgid ""
 "Warning in tagging preset \"{0}-{1}\": Ignoring ''{2}'' attribute as ''{3}'' "
 "elements are given."
 msgstr ""
+"Advarsel i prædefinerede tags \"{0}-{1}\": Ignorerer ''{2}'' attribut som "
+"''{3}'' elementer er givet."
 
 msgid ""
 "Broken tagging preset \"{0}-{1}\" - Java method given in ''values_from'' is "
 "not \"{2}\""
 msgstr ""
+"Ødelagte prædefinerede tags \"{0}-{1}\" - Java metoden i ''værdier fra'' er "
+"ikke \"{2}\""
 
 msgid ""
 "Broken tagging preset \"{0}-{1}\" - Java method given in ''values_from'' "
 "threw {2} ({3})"
 msgstr ""
+"Ødelagte prædefinerede tags \"{0}-{1}\" - Java metoden i ''værdier fra'' "
+"smed {2} ({3})"
 
 msgid ""
 "Broken tagging preset \"{0}-{1}\" - number of items in ''display_values'' "
 "must be the same as in ''values''"
 msgstr ""
+"Ødelagte prædefinerede tags \"{0}-{1}\" - antallet af elementer i ''vis "
+"værdier'' skal være den samme som i ''værdier''"
 
 msgid ""
 "Broken tagging preset \"{0}-{1}\" - number of items in "
 "''short_descriptions'' must be the same as in ''values''"
 msgstr ""
+"Ødelagte prædefinerede tags \"{0}-{1}\" - antallet af elementer i ''kort "
+"beskrivelse'' skal være den samme som i ''værdier''"
 
 msgid "Unknown type: {0}"
 msgstr "Ukendt type: {0}"
@@ -12768,6 +12979,9 @@ msgstr "Vis prædefinitions søgedialog"
 msgid "Search presets"
 msgstr "Søg i prædefinerede"
 
+msgid "Presets"
+msgstr "Prædefinerede"
+
 msgid "Search for objects by preset"
 msgstr "Søg efter objekter via prædefinerede"
 
@@ -12791,10 +13005,10 @@ msgid "Adjustable {0} not registered yet."
 msgstr "Justerbar {0} ikke registreret endnu."
 
 msgid "Some of the key listeners forgot to remove themselves: {0}"
-msgstr ""
+msgstr "Nogle nøgle lyttere glemte at fjerne sig selv: {0}"
 
 msgid "Some of the key modifier listeners forgot to remove themselves: {0}"
-msgstr ""
+msgstr "Nogle nøgle modificerende lyttere glemte at fjerne sig selv: {0}"
 
 msgid "All files (*.*)"
 msgstr "Alle filer(*.*)"
@@ -12819,7 +13033,7 @@ msgid ""
 "a bounding box)"
 msgstr ""
 "URL fra www.openstreetmap.org (du kan indsætte en download-URL her for at "
-"angive et afgrænsningsfelt)"
+"angive et afgrænsningsområde)"
 
 msgid ""
 "The current value is not a valid changeset ID. Please enter an integer value "
@@ -12935,6 +13149,8 @@ msgid ""
 "Failed to open file with extension ''{2}'' and namepart ''{3}'' in zip file "
 "''{0}''. Exception was: {1}"
 msgstr ""
+"Kunne ikke åbne fil med type ''{2}'' og navnedel ''{3}'' i zip-fil ''{0}''. "
+"Handlingen var: {1}"
 
 msgid "Failed to rename file {0} to {1}."
 msgstr "Kunne ikke omdøbe filen {0} til {1}."
@@ -12962,6 +13178,8 @@ msgid ""
 "Illegal value of attribute ''{0}'' of element ''{1}'' in server "
 "capabilities. Got ''{2}''"
 msgstr ""
+"Ulovlig værdi af attribut ''{0}'' af elementet ''{1}'' i server kapaciteter. "
+"Fik ''{2}''"
 
 msgid "Failed to parse date ''{0}'' replied by server."
 msgstr "Kunne ikke fortolke dato \"{0}\" meldt tilbage af serveren."
@@ -13019,6 +13237,7 @@ msgstr ""
 msgid ""
 "Connection to proxy ''{0}'' for URI ''{1}'' failed. Exception was: {2}"
 msgstr ""
+"Tilslutning til proxy ''{0}'' for URI ''{1}'' fejlede. Handlingen var: {2}"
 
 msgid ""
 "The JVM is not configured to lookup proxies from the system settings. The "
@@ -13053,6 +13272,9 @@ msgstr "<html>Kunne ikke indlæse filerne.<br>Fejlen er:<br>{0}</html>"
 msgid "GeoJSON Files"
 msgstr "GeoJSON filer"
 
+msgid "Projected GeoJSON Files"
+msgstr "Projekterede GeoJSON filer"
+
 msgid "Layer ''{0}'' not supported"
 msgstr "Laget \"{0}\" er ikke understøttet"
 
@@ -13225,7 +13447,7 @@ msgid "NMEA import success:"
 msgstr "NMEA import succes:"
 
 msgid "NMEA import failure!"
-msgstr "Fejl ved NMEA import!"
+msgstr "NMEA import fejl!"
 
 msgid "Note Files"
 msgstr "Notefiler"
@@ -13628,6 +13850,9 @@ msgstr "OSM serverfiler zip-komprimeret"
 msgid "WMS Files (*.wms)"
 msgstr "WMS Filer (*.wms)"
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr "WMS-filversion ikke understøttet; fandt {0}, forventede {1}"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -14007,7 +14232,7 @@ msgstr ""
 "udvidelserne også opdateres.<br><br>Opdater udvidelser nu?"
 
 msgid "Last plugin update more than {0} days ago."
-msgstr "Seneste udvidelsesopdatering var mere end {0} dage siden."
+msgstr "Seneste udvidelsesopdatering var for mere end {0} dage siden."
 
 msgid "Click to update the activated plugins"
 msgstr "Klik for at opdatere de aktiverede udvidelser"
@@ -14063,6 +14288,19 @@ msgstr[1] ""
 "Udvidelsen {0} kræver {1} udvidelser der ikke blev fundet. De manglende "
 "udvidelser er:"
 
+msgid "Download and restart"
+msgstr "Download og genstart"
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] "Klik for at downloade manglende udvidelse og genstart JOSM"
+msgstr[1] "Klik for at downloade manglende udvidelser og genstart JOSM"
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] "Klik for at fortsætte uden denne udvidelse"
+msgstr[1] "Klik for at fortsætte uden disse udvidelser"
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -14123,11 +14361,11 @@ msgid_plural ""
 "Please open the Preference Dialog after JOSM has started and try to update "
 "them manually."
 msgstr[0] ""
-"Åben venligst indstillinger dialogen når JOSM er startet, og prøv at "
-"opdateren den manuelt."
+"Åben indstillinger dialogen når JOSM er startet, og prøv at opdater den "
+"manuelt."
 msgstr[1] ""
-"Åben venligst indstillinger dialogen når JOSM er startet, og prøv at "
-"opdateren dem manuelt."
+"Åben indstillinger dialogen når JOSM er startet, og prøv at opdater dem "
+"manuelt."
 
 msgid "Plugin update failed"
 msgstr "Udvidelsesopdatering mislykkedes"
@@ -14765,7 +15003,7 @@ msgstr ""
 "Handlingen var: {1}"
 
 msgid "{0}... [please type its number]"
-msgstr "{0}... [indtast venligst dens nummer]"
+msgstr "{0}... [indtast dens nummer]"
 
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
@@ -15044,7 +15282,7 @@ msgstr "eng"
 
 msgctxt "landuse"
 msgid "farmland"
-msgstr "landbrug"
+msgstr "landbrugsjord"
 
 msgctxt "landuse"
 msgid "residential"
@@ -15068,7 +15306,7 @@ msgstr "bro"
 
 msgctxt "Relation type"
 msgid "destination_sign"
-msgstr ""
+msgstr "retningsskilt"
 
 msgctxt "Relation type"
 msgid "enforcement"
@@ -15257,11 +15495,14 @@ msgid "Up One Level"
 msgstr "Et niveau op"
 
 msgid "Update"
-msgstr "Opdatér"
+msgstr "Opdater"
 
 msgid "Update directory listing."
 msgstr "Opdatér mappeliste."
 
+msgid "View"
+msgstr "Vis"
+
 msgid "Blue:"
 msgstr "Blå:"
 
@@ -15301,8 +15542,8 @@ msgstr "MapQuest Open Aerial"
 msgid "OpenStreetMap GPS Traces"
 msgstr "OpenStreetMap GPS Traces"
 
-msgid "OpenStreetMap (Mapnik)"
-msgstr "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
+msgstr "OpenStreetMap (Standard layer)"
 
 msgid "skobbler"
 msgstr "skobbler"
@@ -15313,9 +15554,6 @@ msgstr "OpenStreetMap (Mapnik Black & White)"
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr "OpenStreetMap (Mapnik, no labels)"
 
-msgid "skobbler heatmap"
-msgstr "skobbler heatmap"
-
 msgid "OpenCycleMap"
 msgstr "OpenCycleMap"
 
@@ -15424,6 +15662,9 @@ msgstr "Vienna: Orthofoto (aerial image)"
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr "VoGIS: Echtfarbenbild 2012 (12cm)"
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr "VoGIS: Flächenwidmungsplan"
 
@@ -15438,12 +15679,18 @@ msgid ""
 msgstr ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr "SPW(allonie) PICC numerical imagery"
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr "SPW(allonie) 2012 aerial imagery"
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr "SPW(allonie) 2009 aerial imagery"
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr "matrikel: kun for navne og husnumre, dårlig geometri"
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr "IBGE Mapa de Setores Urbanos"
 
@@ -15480,12 +15727,18 @@ msgstr "Czech RUIAN parcely"
 msgid "Czech pLPIS"
 msgstr "Czech pLPIS"
 
-msgid "Fugro (Denmark)"
-msgstr "Fugro (Denmark)"
-
 msgid "Geodatastyrelsen (Denmark)"
 msgstr "Geodatastyrelsen (Denmark)"
 
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr "Geodatastyrelsen DTK Kort25"
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr "Geodatastyrelsen Skyggekort 1.6m"
+
+msgid "Geodatastyrelsen Skærmkort"
+msgstr "Geodatastyrelsen Skærmkort"
+
 msgid "Stevns (Denmark)"
 msgstr "Stevns (Denmark)"
 
@@ -15510,11 +15763,14 @@ msgstr "Estonia Forestry (Maaamet)"
 msgid "BANO"
 msgstr "BANO"
 
+msgid "BD Carthage"
+msgstr "BD Carthage"
+
 msgid "Bordeaux - 2012"
 msgstr "Bordeaux - 2012"
 
 msgid "Cadastre"
-msgstr "Cadastre"
+msgstr "Matrikel"
 
 msgid "CRAIG - Auvergne 2013 - 25 cm"
 msgstr "CRAIG - Auvergne 2013 - 25 cm"
@@ -15534,8 +15790,8 @@ msgstr "Géobretagne - Morbihan 2010"
 msgid "Géolittoral - Orthophotos 2000"
 msgstr "Géolittoral - Orthophotos 2000"
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
-msgstr "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
+msgstr "Géolittoral V2 - Orthophotos 2011-2014"
 
 msgid "Géolittoral - Sentiers"
 msgstr "Géolittoral - Sentiers"
@@ -15549,6 +15805,9 @@ msgstr "Loire-Atlantique - Orthophotos 2012 - 20 cm"
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 
+msgid "Route 500™©®"
+msgstr "Route 500™©®"
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr "Toulouse - Orthophotoplan 2013"
 
@@ -15561,12 +15820,6 @@ msgstr "Toulouse - Orthophotoplan 2007"
 msgid "Tours - Orthophotos 2013"
 msgstr "Tours - Orthophotos 2013"
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr "Tours - Orthophotos 2008-2010"
-
-msgid "Tours - Orthophotos 2008"
-msgstr "Tours - Orthophotos 2008"
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -15589,6 +15842,9 @@ msgstr "Hamburg (20 cm)"
 msgid "Hamburg (DK5)"
 msgstr "Hamburg (DK5)"
 
+msgid "Bavaria (80 cm)"
+msgstr "Bavaria (80 cm)"
+
 msgid "Bavaria (2 m)"
 msgstr "Bavaria (2 m)"
 
@@ -15623,11 +15879,8 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr "Maps4BW (LGL-BW, www.lgl-bw.de)"
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
-msgstr "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
+msgstr "NRW-Atlas: ALKIS"
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
 msgstr "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -15656,6 +15909,12 @@ msgstr "Ireland British War Office One-Inch 1941-43 GSGS 4136"
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr "Ireland Bartholomew Quarter-Inch 1940"
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr "Ireland Civil Parishes and Baronies - Memorial Atlas"
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr "Memorial Atlas of Ireland (1901) L.J. Richards"
+
 msgid "OSMIE Townlands"
 msgstr "OSMIE Townlands"
 
@@ -15671,60 +15930,6 @@ msgstr "OSMIE Baronies"
 msgid "OSMIE Political"
 msgstr "OSMIE Political"
 
-msgid "Ireland EEA GMES Urban Atlas"
-msgstr "Ireland EEA GMES Urban Atlas"
-
-msgid "Ireland EEA CORINE 2006"
-msgstr "Ireland EEA CORINE 2006"
-
-msgid "Antrim Civil Parishes and Baronies"
-msgstr "Antrim Civil Parishes and Baronies"
-
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
-msgstr "Memorial Atlas of Ireland (1901) L.J. Richards"
-
-msgid "Carlow Civil Parishes and Baronies"
-msgstr "Carlow Civil Parishes and Baronies"
-
-msgid "Clare Civil Parishes and Baronies"
-msgstr "Clare Civil Parishes and Baronies"
-
-msgid "Dublin Civil Parishes and Baronies"
-msgstr "Dublin Civil Parishes and Baronies"
-
-msgid "Fermanagh Civil Parishes and Baronies"
-msgstr "Fermanagh Civil Parishes and Baronies"
-
-msgid "Galway Civil Parishes and Baronies"
-msgstr "Galway Civil Parishes and Baronies"
-
-msgid "Kildare Civil Parishes and Baronies"
-msgstr "Kildare Civil Parishes and Baronies"
-
-msgid "Leitrim Civil Parishes and Baronies"
-msgstr "Leitrim Civil Parishes and Baronies"
-
-msgid "Longford Civil Parishes and Baronies"
-msgstr "Longford Civil Parishes and Baronies"
-
-msgid "Offaly Civil Parishes and Baronies"
-msgstr "Offaly Civil Parishes and Baronies"
-
-msgid "Sligo Civil Parishes and Baronies"
-msgstr "Sligo Civil Parishes and Baronies"
-
-msgid "Tyrone Civil Parishes and Baronies"
-msgstr "Tyrone Civil Parishes and Baronies"
-
-msgid "Westmeath Civil Parishes and Baronies"
-msgstr "Westmeath Civil Parishes and Baronies"
-
-msgid "Wexford Civil Parishes and Baronies"
-msgstr "Wexford Civil Parishes and Baronies"
-
-msgid "Wicklow Civil Parishes and Baronies"
-msgstr "Wicklow Civil Parishes and Baronies"
-
 msgid "Lodi - Italy"
 msgstr "Lodi - Italy"
 
@@ -15758,6 +15963,9 @@ msgstr "50cm ortho - Latvia"
 msgid "20cm ortho - Latvia - Coastline"
 msgstr "20cm ortho - Latvia - Coastline"
 
+msgid "1.cikla ortofotokarte - Latvia"
+msgstr "1.cikla ortofotokarte - Latvia"
+
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Lithuania)"
 
@@ -15773,6 +15981,9 @@ msgstr "Luxembourg Inspire Railway"
 msgid "Luxembourg Inspire Roads"
 msgstr "Luxembourg Inspire Roads"
 
+msgid "Luxembourg Inspire Water"
+msgstr "Luxembourg Inspire Water"
+
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Niger Delta Oct 2012 Landsat"
 
@@ -15788,9 +15999,15 @@ msgstr "Pangasinán/Bulacan (Phillipines HiRes)"
 msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr "Geoportal 2: Ortofotomapa (aerial image)"
 
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgstr "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr "Geoportal 2: PRNG (geo names)"
 
+msgid "Geoportal 2: ISOK hillshade"
+msgstr "Geoportal 2: ISOK hillshade"
+
 msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr "Będzin: Ortofotomapa 2013 (aerial image)"
 
@@ -15800,15 +16017,27 @@ msgstr "Będzin: Budynki (buildings)"
 msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr "Bytom: Ortofotomapa 2012 (aerial image)"
 
+msgid "Bytom: Fotoplan 2014 (aerial image)"
+msgstr "Bytom: Fotoplan 2014 (aerial image)"
+
 msgid "Bytom: Budynki (buildings)"
 msgstr "Bytom: Budynki (buildings)"
 
 msgid "Chorzów: Budynki (buildings)"
 msgstr "Chorzów: Budynki (buildings)"
 
+msgid "Częstochowa: Budynki (buildings)"
+msgstr "Częstochowa: Budynki (buildings)"
+
 msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr "Częstochowa: Ortofotomapa 2011 (aerial image)"
 
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgstr "Częstochowa: Ortofotomapa 2013 (aerial image)"
+
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgstr "Częstochowa: Ortofotomapa 2014 (aerial image)"
+
 msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr "Gliwice: Ortofotomapa 2013 (aerial image)"
 
@@ -15818,9 +16047,45 @@ msgstr "Gliwice: Budynki (buildings)"
 msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr "Katowice: Ortofotomapa (aerial image)"
 
+msgid "Katowice: Budynki (buildings)"
+msgstr "Katowice: Budynki (buildings)"
+
+msgid "Łódź: Budynki (buildings)"
+msgstr "Łódź: Budynki (buildings)"
+
 msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr "Łódź: Ortofotomapa (aerial image)"
 
+msgid "Powiat dębicki: Budynki (buildings)"
+msgstr "Powiat dębicki: Budynki (buildings)"
+
+msgid "Powiat lubaczowski: Budynki (buildings)"
+msgstr "Powiat lubaczowski: Budynki (buildings)"
+
+msgid "Powiat łańcucki: Budynki (buildings)"
+msgstr "Powiat łańcucki: Budynki (buildings)"
+
+msgid "Powiat poznański: Budynki (buildings)"
+msgstr "Powiat poznański: Budynki (buildings)"
+
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgstr "Powiat poznański: Ortofotomapa (Aerial image)"
+
+msgid "Powiat rzeszowski: Budynki (buildings)"
+msgstr "Powiat rzeszowski: Budynki (buildings)"
+
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgstr "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr "Powiat stalowowolski: Budynki (buildings)"
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr "Przemyśl: Budynki (buildings)"
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgstr "Przemyśl: Ortofotomapa (aerial image)"
+
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
 msgstr "Ruda Śląska: Ortofotomapa (aerial image)"
 
@@ -15833,9 +16098,18 @@ msgstr "Rzeszów: Budynki (buildings)"
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr "Siemianowice Śląskie: Budynki (buildings)"
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr "Zabrze: Ortofotomapa 2011 (aerial image)"
 
@@ -15965,6 +16239,21 @@ msgstr "Bonvillars Orthophoto 2013"
 msgid "Fiez Orthophoto 2013"
 msgstr "Fiez Orthophoto 2013"
 
+msgid "Taiwan e-Map Open Data"
+msgstr "Taiwan e-Map Open Data"
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr "Taiwan e-Map Open Data (with Contour Line)"
+
+msgid "Taiwan Village Boundaries"
+msgstr "Taiwan Village Boundaries"
+
+msgid "Taiwan Land-Section Data"
+msgstr "Taiwan Land-Section Data"
+
+msgid "NLSC Open Data WMTS"
+msgstr "NLSC Open Data WMTS"
+
 msgid "MSR Maps Topo"
 msgstr "MSR Maps Topo"
 
@@ -15980,8 +16269,8 @@ msgstr "USGS Large Scale Imagery"
 msgid "TIGER 2012 Roads Overlay"
 msgstr "TIGER 2012 Roads Overlay"
 
-msgid "New & Misaligned TIGER Roads (2014)"
-msgstr "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
+msgstr "New & Misaligned TIGER Roads (2015)"
 
 msgid "MassGIS L3 Parcels"
 msgstr "MassGIS L3 Parcels"
@@ -16325,6 +16614,13 @@ msgstr ""
 "Implementerer en kommandolinje og gør det muligt at oprette dine egne "
 "kommandoer. Se link til standard kommandoer (bue, cirkel osv.)"
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+"Tilbyder fælles billede bibliotek. Ikke beregnet til at blive installeret "
+"direkte af brugerne, men snarere som en afhængighed af andre udvidelser."
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr "(Advarsel: Experimental!) Værktøj til at sammenblande (flette) data."
 
@@ -16389,7 +16685,7 @@ msgid ""
 "Provides parts of the GeoTools library for other JOSM plugins. Not meant to "
 "be installed directly by users, but rather as a dependency for other plugins."
 msgstr ""
-"Leverer dele af GeoTools biblioteket til andre JOSM udvidelser. Ikke "
+"Leverer dele af GeoVærktøjs biblioteket til andre JOSM udvidelser. Ikke "
 "beregnet til direkte installation af brugere, men som en afhængighed fra "
 "andre udvidelser."
 
@@ -16420,16 +16716,11 @@ msgid ""
 "Database of imagery offsets: share and aquire imagery offsets with one "
 "button."
 msgstr ""
+"Database over billedlags forskydninger: del- og modtag billedlags "
+"forskydninger med en knap."
 
 msgid "WMSPlugin-style imagery adjustment mapmode"
-msgstr ""
-
-msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-"Denne eksperimentale udvidelse lader JOSM gemme terncachen i databasefiler, "
-"i stedet for store cachemapper"
+msgstr "WMS-udvidelses kortfunktion til billedlagsjustering"
 
 msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
@@ -16441,7 +16732,7 @@ msgstr ""
 "stemmer med et billedes filnavn."
 
 msgid "Plugin for importing spatial referenced images"
-msgstr ""
+msgstr "Udvidelse til at importere rumlige referencebilleder"
 
 msgid "Import vector graphics (SVG)"
 msgstr "Importer vektorgrafik (SVG)"
@@ -16450,25 +16741,35 @@ msgid ""
 "Extra information about current layer objects pop ups - currently GPX "
 "trackpoint info"
 msgstr ""
+"Ekstra oplysninger om nuværende lags pop ups objekter - i øjeblikket GPX "
+"trackpoint info"
 
 msgid "A helper for IRS satellite adjustment."
-msgstr ""
+msgstr "En hjælper til IRS satellitjustering."
 
 msgid ""
 "Provides Java Native Access (JNA) library. Not meant to be installed "
 "directly by users, but rather as a dependency for other plugins."
 msgstr ""
+"Tilbyder Java Native Access (JNA) bibliotek. Ikke beregnet til at blive "
+"installeret direkte af brugerne, men snarere som en afhængighed af andre "
+"udvidelser."
 
 msgid ""
 "Provides Java Topology Suite (JTS) library and related utilities. Not meant "
 "to be installed directly by users, but rather as a dependency for other "
 "plugins."
 msgstr ""
+"Tilbyder Java Topology Suite (JTS) bibliotek og relaterede hjælpeprogrammer. "
+"Ikke beregnet til at blive installeret direkte af brugerne, men snarere som "
+"en afhængighed af andre udvidelser."
 
 msgid ""
 "creates a channel digraph and checks a subset of channels if it is a "
 "junction or searches in a subset of channels for junctions"
 msgstr ""
+"Skaber en kanal digraf og kontrollerer en delmængde af kanaler, hvis det er "
+"et vejkryds eller søgninger i et undersæt af kanaler i kryds"
 
 msgid "Helps vectorizing WMS images."
 msgstr "Hjælper med at vektorisere WMS-billeder."
@@ -16483,15 +16784,21 @@ msgid ""
 "Provides the Log4j library for other JOSM plugins. Not meant to be installed "
 "directly by users, but rather as a dependency for other plugins."
 msgstr ""
+"Tilbyder Log4J bibliotek til andre JOSM udvidelser. Ikke beregnet til at "
+"blive installeret direkte af brugerne, men snarere som en afhængighed af "
+"andre udvidelser."
 
 msgid ""
 "The MapDust Plug-In shows the MapDust bug reports on the map. You can "
 "create, close,invalidate, re-open and comment bug reports by using this "
 "plugin."
 msgstr ""
+"MapDust udvidelsen viser MapDust fejlrapporter på kortet. Du kan oprette, "
+"lukke, ugyldiggøre, genåbne og kommentere fejlrapporter ved at bruge denne "
+"udvidelse."
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
-msgstr ""
+msgid "Allows the user to work with pictures hosted at mapillary.com"
+msgstr "Tillader brugeren at arbejde med billeder gemt på mapillary.com"
 
 msgid ""
 "Provide a measurement dialog and a layer to measure length and angle of "
@@ -16508,11 +16815,10 @@ msgstr "Sammenlæg overlappende dele af veje."
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr "Tilføjer \"ingen venstresving\" for sæt af 4 eller 5 veje"
 
-msgid "Simplifies download from different read-only APIs."
-msgstr "Gør download fra forskellige kun-læs API’ere nemmere."
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
+"Gør det muligt at tilskrive tags til alle objekter i et udvalgt område på en "
+"gang"
 
 msgid "NanoLog adjustment and browsing layer"
 msgstr "NanoLog tilpasnings- og visningslag"
@@ -16551,16 +16857,18 @@ msgid ""
 "Bring in errors from Osm Inspector and display it on the current JOSM "
 "bounding box"
 msgstr ""
-"Henter fejl fra Osm Inspector og viser dem i den aktuelle JOSM omkrandsende "
-"boks"
+"Henter fejl fra Osm Inspector og viser dem i det aktuelle JOSM "
+"afgrænsningsområde"
 
 msgid ""
 "Recommends categories/tags on newly created OSM entities by analysing "
 "spatial entities into training features and using SVM classification"
 msgstr ""
+"Anbefaler kategorier/tags på nyoprettede OSM enheder ved at analysere "
+"rumlige enheder i træningsfunktioner og bruge SVM klassifikation"
 
 msgid "Import/export OSM data in PBF format"
-msgstr "Import/export OSM data i PBF format"
+msgstr "Importer/exporter OSM data i PBF format"
 
 msgid "Import PDF file and convert to ways."
 msgstr "Importer PDF-fil og konverter til veje."
@@ -16573,7 +16881,7 @@ msgstr ""
 "højrekliksmenuen for billedlaget."
 
 msgid "Make photos movable and position them on the map."
-msgstr ""
+msgstr "Gør fotos flytbare og placere dem på kortet."
 
 msgid ""
 "This plugin allows to display any picture as a background in the editor and "
@@ -16583,12 +16891,14 @@ msgstr ""
 "rette det til efter kortet."
 
 msgid "The great JGoodies Plastic Look and Feel."
-msgstr ""
+msgstr "Det store JGoodies Plastic udseende."
 
 msgid ""
 "Shows an additional information about point on map. There is only a Czech "
 "RUIAN module available at this moment."
 msgstr ""
+"Viser yderligere oplysninger om punkt på kortet. Der er kun et tjekkisk "
+"RUIAN modul tilgængelig på dette tidspunkt."
 
 msgid "Read and write osmosis poly filter files"
 msgstr "Læs og skriv osmosis poly filter filer"
@@ -16605,6 +16915,16 @@ msgstr ""
 "Denne udvidelse simplificerer kortlægningen og redigeringen af offentlige "
 "transport ruter."
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr "Viser stop fra udvalgte offentlige transportruter som graf"
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+"RasterFilterUdvidelsen gør det muligt at vælge og anvende nogle billedfiltre "
+"til nogle lag"
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr "Panel til oprettelse og redigering af relationer og multipolygoner."
 
@@ -16617,6 +16937,10 @@ msgid ""
 "properties window. Available country presets: Belgium, Germany, Poland, "
 "Slovakia, Spain."
 msgstr ""
+"Udvidelse til mærkning af objekter baseret på et udvalg af vejskilte. "
+"Dialogen kan åbnes ved at klikke på et lille ikon i øverste højre hjørne af "
+"vinduet egenskaber. Tilgængelige prædefinerede lande: Belgien, Tyskland, "
+"Polen, Slovakiet, Spanien."
 
 msgid ""
 "Renders routes (bus, hiking trails, bicycle routes, ..). Route types must be "
@@ -16648,10 +16972,15 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr "Rediger funktioner til OpenSeaMap"
 
+msgid "Allows to draw splines"
+msgstr "Gør det muligt at tegne kurver"
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
 msgstr ""
+"Gør det muligt at redigere trafikinformation og eksportere den til by "
+"mobilitets simulator SUMO"
 
 msgid "Allow adding markers/nodes on current gps positions."
 msgstr ""
@@ -16725,6 +17054,9 @@ msgid ""
 "georeferenced video against a GPS track, to use it for identify visible "
 "objects."
 msgstr ""
+"(Denne udvidelse er der i øjeblikket arbejde i gang med!!!) Link og "
+"synkroniserer en video med geografiske koordinater mod et GPS spor, brug det "
+"til at identificere synlige objekter."
 
 msgid ""
 "Supports downloading tiled, scanned maps from walking-papers.org. This "
@@ -16739,9 +17071,6 @@ msgstr "Nem download langs et langt sæt af indbyrdes forbundne veje"
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr "Muliggør søgning efter waypoint importeret fra gpx-fil."
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr "Vælg en sekvens af ikkeforgrenede forbundne veje"
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr "Forenkler forbindelse af OSM objekter til Wikipedia-artikler"
 
@@ -17151,6 +17480,14 @@ msgid "basketball"
 msgstr "basketball"
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr "beachvolley"
+
+msgctxt "sport"
+msgid "billiards"
+msgstr "billard"
+
+msgctxt "sport"
 msgid "boules"
 msgstr "kuglespil"
 
@@ -17175,10 +17512,6 @@ msgid "cricket"
 msgstr "cricket"
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr "cricketnet"
-
-msgctxt "sport"
 msgid "croquet"
 msgstr "kroket"
 
@@ -17195,6 +17528,10 @@ msgid "equestrian"
 msgstr "ridning"
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr "landhockey"
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr "gæliske sportsgrene"
 
@@ -17211,14 +17548,26 @@ msgid "handball"
 msgstr "håndbold"
 
 msgctxt "sport"
-msgid "hockey"
-msgstr "hockey"
-
-msgctxt "sport"
 msgid "horse_racing"
 msgstr "hestevæddeløb"
 
 msgctxt "sport"
+msgid "ice_hockey"
+msgstr "ishockey"
+
+msgctxt "sport"
+msgid "karting"
+msgstr "gokart"
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr "modelflyvesport"
+
+msgctxt "sport"
+msgid "motocross"
+msgstr "motocross"
+
+msgctxt "sport"
 msgid "motor"
 msgstr "motorsport"
 
@@ -17231,6 +17580,10 @@ msgid "racquet"
 msgstr "ketsjersport"
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr "radiostyret bil"
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr "13-mands-rugby"
 
@@ -17243,6 +17596,10 @@ msgid "running"
 msgstr "løb"
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr "sikkerhedstræning"
+
+msgctxt "sport"
 msgid "shooting"
 msgstr "skydning"
 
@@ -17270,6 +17627,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr "tennis"
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr "volleyball"
+
+msgctxt "sport"
+msgid "9pin"
+msgstr "9 kegle"
+
+msgctxt "sport"
+msgid "10pin"
+msgstr "10 kegle"
+
 msgid "Fee"
 msgstr "Gebyr"
 
@@ -17430,7 +17799,7 @@ msgid "muslim"
 msgstr "muslimsk"
 
 msgid "shinto"
-msgstr ""
+msgstr "shinto"
 
 msgid "sikh"
 msgstr "sikh"
@@ -17463,10 +17832,10 @@ msgid "evangelical"
 msgstr "evangelisk"
 
 msgid "greek_catholic"
-msgstr ""
+msgstr "græsk katolsk"
 
 msgid "jehovahs_witness"
-msgstr "Jehovas Vidner"
+msgstr "jehovas vidner"
 
 msgid "lutheran"
 msgstr "luthersk"
@@ -17478,7 +17847,7 @@ msgid "mormon"
 msgstr "mormonsk"
 
 msgid "old_catholic"
-msgstr ""
+msgstr "gammel katolsk"
 
 msgid "orthodox"
 msgstr "ortodoks"
@@ -17496,7 +17865,7 @@ msgid "quaker"
 msgstr "kvæker"
 
 msgid "roman_catholic"
-msgstr ""
+msgstr "romersk katolsk"
 
 msgid "shia"
 msgstr "shiitisk"
@@ -17520,7 +17889,7 @@ msgid "110000;20000"
 msgstr "110000;20000"
 
 msgid "Branch operator"
-msgstr ""
+msgstr "Filial operatør"
 
 msgid "Amount of Cables"
 msgstr "Antal kabler"
@@ -17549,13 +17918,13 @@ msgstr "platform"
 
 msgctxt "power"
 msgid "kiosk"
-msgstr "kiosk"
+msgstr "kabinet"
 
 msgid "Start date"
 msgstr "Start dato"
 
 msgid "Output forms of energy:"
-msgstr ""
+msgstr "Producerer energiformer:"
 
 msgid "biogas"
 msgstr "biogas"
@@ -17606,7 +17975,7 @@ msgid "Is the water body intermittent (disappears seasonally)?"
 msgstr "Er vandområdet uregelmæssigt (forsvinder sæsonmæssigt)?"
 
 msgid "culvert"
-msgstr ""
+msgstr "gennemløb"
 
 msgid "Water access rules:"
 msgstr "Vand adgangsregler:"
@@ -17627,7 +17996,7 @@ msgid "Canoe"
 msgstr "Kano"
 
 msgid "Streets"
-msgstr "Veje"
+msgstr "Gader"
 
 msgid "Motorway"
 msgstr "Motorvej"
@@ -17665,6 +18034,9 @@ msgstr "Tertiærforbindelse"
 msgid "Unclassified"
 msgstr "Uklassificeret"
 
+msgid "Street has no name"
+msgstr "Gade har ikke noget navn"
+
 msgid "Passing Places"
 msgstr "Vigesteder"
 
@@ -17743,6 +18115,9 @@ msgstr ""
 "Nødspor, ved siden af lange faldende skråninger til lastbiler og andre "
 "køretøjer, til at stoppe sikkert efter bremsesvigt."
 
+msgid "Raceway"
+msgstr "Motorbane"
+
 msgid "Road (Unknown Type)"
 msgstr "Vej (ukendt type)"
 
@@ -17824,7 +18199,7 @@ msgid "roundabout"
 msgstr "rundkørsel"
 
 msgid "jughandle"
-msgstr ""
+msgstr "hankeanlæg"
 
 msgid "Road Restrictions"
 msgstr "Adgangsbegrænsninger"
@@ -17957,51 +18332,62 @@ msgid "SAC Scale"
 msgstr "SAC skala"
 
 msgid "T1 - hiking trail"
-msgstr ""
+msgstr "T1 - vandresti"
 
 msgid "Trail well cleared. Area flat or slightly sloped, no fall hazard"
-msgstr ""
+msgstr "Sti godt ryddet. Fladt område eller svagt skrånende, ingen fald fare"
 
 msgid "T2 - mountain hiking trail"
-msgstr ""
+msgstr "T2 - bjergvandresti"
 
 msgid ""
 "Trail with continuous line and balanced ascent. Terrain partially steep, "
 "fall hazard possible"
 msgstr ""
+"Sti med ubrudt linje og afbalanceret opstigning. Terræn delvist stejl, mulig "
+"fald fare"
 
 msgid "T3 - difficult, exposed hiking trail"
-msgstr ""
+msgstr "T3 - svær, udsat vandresti"
 
 msgid ""
 "exposed sites may be secured with ropes or chains, possible need to use "
 "hands for balance. Partly exposed sites with fall hazard, scree, pathless "
 "jagged rocks"
 msgstr ""
+"udsatte steder kan være sikret med reb eller kæder, eventuelt behov for at "
+"bruge hænderne for balance. Delvist udsatte steder med fald fare, urer, "
+"sporløse takkede klipper"
 
 msgid "T4 - difficult, exposed, steep alpine trail"
-msgstr ""
+msgstr "T4 - svær, udsat, stejl alpinesti"
 
 msgid ""
 "sometimes need for hand use to get ahead. Terrain quite exposed, precarious "
 "grassy acclivities, jagged rocks, facile snow-free glaciers"
 msgstr ""
+"sommetider brug for hænder for at komme frem. Terræn ganske udsat, usikre "
+"græsklædte stigninger, takkede klipper, overfladiske sne-fri gletsjere"
 
 msgid "T5 - difficult alpine trail with climbing"
-msgstr ""
+msgstr "T5 - vanskelig alpinesti med klatring"
 
 msgid ""
 "single plainly climbing up to second grade. Exposed, demanding terrain, "
 "jagged rocks, few dangerous glacier and snow"
 msgstr ""
+"enkel tydelig klatring op til andet niveau. Udsat, krævende terræn, takkede "
+"klipper, få farlige gletsjer og sne"
 
 msgid "T6 - hazardous alpine trail with climbing"
-msgstr ""
+msgstr "T6 - farlig alpinsti med klatring"
 
 msgid ""
 "climbing up to second grade. Often very exposed, precarious jagged rocks, "
 "glacier with danger to slip and fall"
 msgstr ""
+"klatring op til andet niveau. Ofte meget udsatte, usikre takkede klipper, "
+"gletscher med fare for at glide og falde"
 
 msgid "Visibility"
 msgstr "Synlighed"
@@ -18166,7 +18552,7 @@ msgid "Optional crossing attributes:"
 msgstr "Valgfri passage attributter:"
 
 msgid "Pedestrian crossing type"
-msgstr "Type af fodgængerfelt"
+msgstr "Fodgængerfelttype"
 
 msgid "uncontrolled"
 msgstr "ukontrolleret"
@@ -18282,6 +18668,12 @@ msgstr "Fartkamera"
 msgid "Traffic Mirror"
 msgstr "Trafikspejl"
 
+msgid "Highway milestone"
+msgstr "Vej milepæl"
+
+msgid "Distance (kilometers)"
+msgstr "Afstand (kilometer)"
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr "Navngivet vejkryds"
@@ -18473,6 +18865,11 @@ msgstr "Kolonnade"
 msgid "Avalanche Protector"
 msgstr "Lavinebeskyttelse"
 
+msgctxt "main group"
+msgid "Water"
+msgstr "Vand"
+
+msgctxt "sub group"
 msgid "Water"
 msgstr "Vand"
 
@@ -18517,7 +18914,7 @@ msgid "Breakwater"
 msgstr "Bølgebryder"
 
 msgid "Culvert"
-msgstr ""
+msgstr "Gennemløb"
 
 msgid "Basin"
 msgstr "Bassin"
@@ -18528,6 +18925,10 @@ msgstr "Vandreservoir"
 msgid "Covered Reservoir"
 msgstr "Overdækket reservoir"
 
+msgctxt "natural"
+msgid "Water"
+msgstr "Vandområde"
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr "Stillestående vand, såsom en sø eller dam."
 
@@ -18673,68 +19074,182 @@ msgstr "Tømmested"
 msgid "public"
 msgstr "offentlig"
 
-msgid "Pier"
-msgstr "Bådebro"
+msgid "Marine Fuel"
+msgstr "Skibsbrændstof"
 
-msgid "Lock Gate"
-msgstr "Sluseport"
+msgid "Agip"
+msgstr "Agip"
 
-msgid "Turning Point"
-msgstr "Vendepunkt"
+msgid "Aral"
+msgstr "Aral"
 
-msgid "Slipway"
-msgstr "Slæbested"
+msgid "Avia"
+msgstr "Avia"
 
-msgid "Boatyard"
-msgstr "Værft"
+msgid "BP"
+msgstr "BP"
 
-msgid "Dock"
-msgstr "Dok"
+msgid "Chevron"
+msgstr "Chevron"
 
-msgid "Transport"
-msgstr "Transport"
+msgid "Citgo"
+msgstr "Citgo"
 
-msgid "Railway"
-msgstr "Jernbane"
+msgid "Eni"
+msgstr "Eni"
 
-msgid "Rail"
-msgstr "Spor"
+msgid "Esso"
+msgstr "Esso"
 
-msgid "main"
-msgstr "hovedspor"
+msgid "Exxon"
+msgstr "Exxon"
 
-msgid "branch"
-msgstr "sidespor"
+msgid "Gulf"
+msgstr "Gulf"
 
-msgid "industrial"
-msgstr "industrispor"
+msgid "Mobil"
+msgstr "Mobil"
 
-msgid "military"
-msgstr "militærspor"
+msgid "OMV"
+msgstr "OMV"
 
-msgid "tourism"
-msgstr "turismespor"
+msgid "Petro-Canada"
+msgstr "Petro-Canada"
 
-msgid "freight"
-msgstr "fragtspor"
+msgid "Pioneer"
+msgstr "Pioneer"
 
-msgid "Narrow Gauge Rail"
-msgstr "Smalsporet bane"
+msgid "Q8"
+msgstr "Q8"
 
-msgid "Monorail"
-msgstr "Monorail"
+msgid "Repsol"
+msgstr "Repsol"
 
-msgid "Preserved"
-msgstr "Bevaret"
+msgid "Shell"
+msgstr "Shell"
 
-msgid "Light Rail"
-msgstr "Letbane"
+msgid "Socar"
+msgstr "Socar"
 
-msgid "Subway"
-msgstr "Metro"
+msgid "Statoil"
+msgstr "Statoil"
 
-msgid "Tram"
-msgstr "Sporvogn"
+msgid "Sunoco"
+msgstr "Sunoco"
+
+msgid "Tamoil"
+msgstr "Tamoil"
+
+msgid "Texaco"
+msgstr "Texaco"
+
+msgid "Total"
+msgstr "Total"
+
+msgid "Independent"
+msgstr "Uafhængig"
+
+msgid "Fuel types:"
+msgstr "Brændstoftyper:"
+
+msgid "Diesel"
+msgstr "Diesel"
+
+msgid "Bio Diesel"
+msgstr "Biodiesel"
+
+msgid "Octane 80"
+msgstr "Oktan 80"
+
+msgid "Octane 91"
+msgstr "Oktan 91"
+
+msgid "Octane 92"
+msgstr "Oktan 92"
+
+msgid "Octane 95"
+msgstr "Oktan 95"
+
+msgid "Octane 98"
+msgstr "Oktan 98"
+
+msgid "Octane 100"
+msgstr "Oktan 100"
+
+msgid "E10 (10% Ethanol mix)"
+msgstr "E10 (10% Ethanol blanding)"
+
+msgid "E85 (85% Ethanol mix)"
+msgstr "E85 (85% Ethanol blanding)"
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr "LPG (Flydende petrolium)"
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr "CNG (Komprimeret naturgas)"
+
+msgid "Pier"
+msgstr "Bådebro"
+
+msgid "Lock Gate"
+msgstr "Sluseport"
+
+msgid "Turning Point"
+msgstr "Vendepunkt"
+
+msgid "Slipway"
+msgstr "Slæbested"
+
+msgid "Boatyard"
+msgstr "Værft"
+
+msgid "Dock"
+msgstr "Dok"
+
+msgid "Transport"
+msgstr "Transport"
+
+msgid "Railway"
+msgstr "Jernbane"
+
+msgid "Rail"
+msgstr "Spor"
+
+msgid "main"
+msgstr "hovedspor"
+
+msgid "branch"
+msgstr "sidespor"
+
+msgid "industrial"
+msgstr "industrispor"
+
+msgid "military"
+msgstr "militærspor"
+
+msgid "tourism"
+msgstr "turismespor"
+
+msgid "freight"
+msgstr "fragtspor"
+
+msgid "Narrow Gauge Rail"
+msgstr "Smalsporet bane"
+
+msgid "Monorail"
+msgstr "Monorail"
+
+msgid "Preserved"
+msgstr "Bevaret"
+
+msgid "Light Rail"
+msgstr "Letbane"
+
+msgid "Subway"
+msgstr "Metro"
+
+msgid "Tram"
+msgstr "Sporvogn"
 
 msgid "Bus Guideway"
 msgstr "Styreskinne til bus"
@@ -18789,6 +19304,9 @@ msgstr "Sporstopper"
 msgid "Railway Switch"
 msgstr "Sporskifte"
 
+msgid "Railway milestone"
+msgstr "Jernbane milepæl"
+
 msgid "Aerialway"
 msgstr "Luftvej"
 
@@ -18914,78 +19432,6 @@ msgstr "Parkeringsindgang"
 msgid "Fuel"
 msgstr "Brændstof"
 
-msgid "Agip"
-msgstr "Agip"
-
-msgid "Aral"
-msgstr "Aral"
-
-msgid "Avia"
-msgstr "Avia"
-
-msgid "BP"
-msgstr "BP"
-
-msgid "Chevron"
-msgstr "Chevron"
-
-msgid "Citgo"
-msgstr "Citgo"
-
-msgid "Eni"
-msgstr "Eni"
-
-msgid "Esso"
-msgstr "Esso"
-
-msgid "Exxon"
-msgstr "Exxon"
-
-msgid "Gulf"
-msgstr "Gulf"
-
-msgid "Mobil"
-msgstr "Mobil"
-
-msgid "OMV"
-msgstr "OMV"
-
-msgid "Petro-Canada"
-msgstr "Petro-Canada"
-
-msgid "Pioneer"
-msgstr "Pioneer"
-
-msgid "Q8"
-msgstr "Q8"
-
-msgid "Repsol"
-msgstr "Repsol"
-
-msgid "Shell"
-msgstr "Shell"
-
-msgid "Socar"
-msgstr "Socar"
-
-msgid "Statoil"
-msgstr "Statoil"
-
-msgid "Sunoco"
-msgstr "Sunoco"
-
-msgid "Tamoil"
-msgstr "Tamoil"
-
-msgid "Texaco"
-msgstr "Texaco"
-
-msgid "Total"
-msgstr "Total"
-
-msgid "Independent"
-msgstr "Uafhængig"
-
 msgid "With shop"
 msgstr "Med butik"
 
@@ -18995,51 +19441,12 @@ msgstr "dagligvarer"
 msgid "kiosk"
 msgstr "kiosk"
 
-msgid "Fuel types:"
-msgstr "Brændstoftyper:"
-
-msgid "Diesel"
-msgstr "Diesel"
-
-msgid "Bio Diesel"
-msgstr "Biodiesel"
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
-msgstr ""
+msgstr "Diesel (gas til væske - ultimativ diesel)"
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr "Diesel til lastbiler"
 
-msgid "Octane 80"
-msgstr "Oktan 80"
-
-msgid "Octane 91"
-msgstr "Oktan 91"
-
-msgid "Octane 92"
-msgstr "Oktan 92"
-
-msgid "Octane 95"
-msgstr "Oktan 95"
-
-msgid "Octane 98"
-msgstr "Oktan 98"
-
-msgid "Octane 100"
-msgstr "Oktan 100"
-
-msgid "E10 (10% Ethanol mix)"
-msgstr "E10 (10% Ethanol blanding)"
-
-msgid "E85 (85% Ethanol mix)"
-msgstr "E85 (85% Ethanol blanding)"
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr "LPG (Flydende petrolium)"
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr "CNG (Komprimeret naturgas)"
-
 msgid "1/25 mix (mofa/moped)"
 msgstr "1/25 blanding (knallert)"
 
@@ -19131,28 +19538,28 @@ msgid "Clothes"
 msgstr "Tøj"
 
 msgid "anchors"
-msgstr ""
+msgstr "forankringer"
 
 msgid "ground_slots"
-msgstr ""
+msgstr "jord spalter"
 
 msgid "informal"
-msgstr ""
+msgstr "uformel"
 
 msgid "lockers"
 msgstr "skabe"
 
 msgid "rack"
-msgstr ""
+msgstr "stativ"
 
 msgid "shed"
 msgstr "skur"
 
 msgid "stands"
-msgstr ""
+msgstr "stande"
 
 msgid "wall_loops"
-msgstr ""
+msgstr "væg sløjfer"
 
 msgid "Covered"
 msgstr "Overdækket"
@@ -19258,9 +19665,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr "#CD853F"
 
-msgid "route segment"
-msgstr "rute-segment"
-
 msgid "stop position"
 msgstr "stopposition"
 
@@ -19279,6 +19683,9 @@ msgstr "platform (kun udgang)"
 msgid "platform (entry only)"
 msgstr "platform (kun indgang)"
 
+msgid "route segment"
+msgstr "rutesegment"
+
 msgid "Route Master"
 msgstr "Rute master"
 
@@ -19304,7 +19711,7 @@ msgid "Subway Entrance"
 msgstr "Indgang til undergrundsbane"
 
 msgid "Station or amenities"
-msgstr ""
+msgstr "Station eller faciliteter"
 
 msgid "Bus"
 msgstr "Bus"
@@ -19371,10 +19778,10 @@ msgid "Public transport route (Legacy)"
 msgstr "Offentlig transportrute (gammel)"
 
 msgid "forward segment"
-msgstr "fremad segment"
+msgstr "fremadsegment"
 
 msgid "backward segment"
-msgstr "tilbage segment"
+msgstr "tilbagesegment"
 
 msgid "halt point"
 msgstr "stoppested"
@@ -19407,10 +19814,10 @@ msgid "Bus Stop"
 msgstr "Busstop"
 
 msgid "Tactile Paving"
-msgstr ""
+msgstr "Følbar overflade"
 
 msgid "incorrect"
-msgstr ""
+msgstr "ukorrekt"
 
 msgid "Bus Platform"
 msgstr "Bus-platform"
@@ -19481,6 +19888,12 @@ msgstr "Hotel"
 msgid "Stars"
 msgstr "Stjerner"
 
+msgid "Rooms"
+msgstr "Værelser"
+
+msgid "Beds"
+msgstr "Senge"
+
 msgid "Motel"
 msgstr "Motel"
 
@@ -19571,6 +19984,9 @@ msgstr "sandwich"
 msgid "sushi"
 msgstr "sushi"
 
+msgid "steak_house"
+msgstr "bøfhus"
+
 msgid "Microbrewery"
 msgstr "Mikrobryggeri"
 
@@ -19787,6 +20203,9 @@ msgstr "Sauna"
 msgid "Horse Riding"
 msgstr "Rideskole"
 
+msgid "Casino"
+msgstr "Kasino"
+
 msgid "Brothel"
 msgstr "Bordel"
 
@@ -19870,19 +20289,19 @@ msgid "Building type"
 msgstr "Bygningstype"
 
 msgid "basilica"
-msgstr ""
+msgstr "basilika"
 
 msgid "cathedral"
-msgstr ""
+msgstr "katedral"
 
 msgid "chapel"
-msgstr ""
+msgstr "kapel"
 
 msgid "church"
 msgstr "kirke"
 
 msgid "temple"
-msgstr ""
+msgstr "tempel"
 
 msgctxt "christian"
 msgid "anglican"
@@ -19902,15 +20321,15 @@ msgstr "evangelisk"
 
 msgctxt "christian"
 msgid "greek_catholic"
-msgstr ""
+msgstr "græsk katolsk"
 
 msgctxt "christian"
 msgid "greek_orthodox"
-msgstr ""
+msgstr "græsk ortodoks"
 
 msgctxt "christian"
 msgid "jehovahs_witness"
-msgstr "Jehovas Vidner"
+msgstr "jehovas vidner"
 
 msgctxt "christian"
 msgid "lutheran"
@@ -19926,7 +20345,7 @@ msgstr "mormonsk"
 
 msgctxt "christian"
 msgid "new_apostolic"
-msgstr ""
+msgstr "ny apostolsk"
 
 msgctxt "christian"
 msgid "orthodox"
@@ -19950,30 +20369,30 @@ msgstr "kvæker"
 
 msgctxt "christian"
 msgid "roman_catholic"
-msgstr ""
+msgstr "romersk katolsk"
 
 msgctxt "christian"
 msgid "russian_orthodox"
-msgstr ""
+msgstr "russisk ortodoks"
 
 msgctxt "christian"
 msgid "seventh_day_adventist"
-msgstr ""
+msgstr "syvende dags adventist"
 
 msgid "Mosque"
-msgstr ""
+msgstr "Moske"
 
 msgid "mosque"
-msgstr ""
+msgstr "moske"
 
 msgid "ibadi"
-msgstr ""
+msgstr "ibadi"
 
 msgid "Synagogue"
-msgstr ""
+msgstr "Synagoge"
 
 msgid "synagogue"
-msgstr ""
+msgstr "synagoge"
 
 msgctxt "jewish"
 msgid "orthodox"
@@ -19981,44 +20400,44 @@ msgstr "ortodoks"
 
 msgctxt "jewish"
 msgid "conservative"
-msgstr ""
+msgstr "konservativ"
 
 msgctxt "jewish"
 msgid "reform"
-msgstr ""
+msgstr "reform"
 
 msgid "Buddhist Temple"
-msgstr ""
+msgstr "Buddhistisk tempel"
 
 msgid "theravada"
-msgstr ""
+msgstr "theravada"
 
 msgid "mahayana"
-msgstr ""
+msgstr "mahayana"
 
 msgid "vajrayana"
-msgstr ""
+msgstr "vajrayana"
 
 msgid "Hindu Temple"
-msgstr ""
+msgstr "Hinduistisk tempel"
 
 msgid "vaishnavism"
-msgstr ""
+msgstr "vaishnavism"
 
 msgid "shaivism"
-msgstr ""
+msgstr "shaivism"
 
 msgid "shaktism"
-msgstr ""
+msgstr "shaktism"
 
 msgid "smartism"
-msgstr ""
+msgstr "smartism"
 
 msgid "Shinto Shrine"
-msgstr ""
+msgstr "Shinto helligdom"
 
 msgid "Other Place of Worship"
-msgstr ""
+msgstr "Andet sted for tilbedelse"
 
 msgid "Public Building"
 msgstr "Offentlig bygning"
@@ -20042,7 +20461,7 @@ msgid "Police"
 msgstr "Politi"
 
 msgid "Ranger Station"
-msgstr ""
+msgstr "Service bygning"
 
 msgid "Fire Station"
 msgstr "Brandstation"
@@ -20274,8 +20693,8 @@ msgstr "Viser barometrisk tryk"
 msgid "Shows humidity"
 msgstr "Viser fugtighed"
 
-msgid "Recycling"
-msgstr "Genbrug"
+msgid "Recycling Container"
+msgstr "Genbrugscontainer"
 
 msgid "Batteries"
 msgstr "Batterier"
@@ -20283,20 +20702,47 @@ msgstr "Batterier"
 msgid "Cans"
 msgstr "Dåser"
 
+msgid "Cardboard"
+msgstr "Pap"
+
+msgid "Electrical Appliances"
+msgstr "Elektriske apparater"
+
 msgid "Glass"
 msgstr "Glas"
 
+msgid "Glass Bottles"
+msgstr "Glasflasker"
+
+msgid "Green Waste"
+msgstr "Grønt affald"
+
 msgid "Paper"
 msgstr "Papir"
 
+msgid "Plastic"
+msgstr "Plastic"
+
+msgid "Plastic Bottles"
+msgstr "Plastflasker"
+
+msgid "Plastic Packaging"
+msgstr "Plastemballage"
+
 msgid "Scrap Metal"
 msgstr "Skrotjern"
 
-msgid "container"
-msgstr "container"
+msgid "Shoes"
+msgstr "Sko"
+
+msgid "Small Appliances"
+msgstr "Små apparater"
+
+msgid "Waste"
+msgstr "Affald"
 
-msgid "centre"
-msgstr "center"
+msgid "Recycling Centre"
+msgstr "Genbrugsplads"
 
 msgid "Waste Basket/Trash Can"
 msgstr "Affaldskurv/affaldsspand"
@@ -20311,10 +20757,10 @@ msgid "Suction pumpout"
 msgstr "Udsugningspumpe"
 
 msgid "Gravity drain for hose"
-msgstr ""
+msgstr "Afløb for slange via tyngdekraft"
 
 msgid "Casette or Elsan Disposal"
-msgstr ""
+msgstr "Casette eller Elsan bortskaffelse"
 
 msgid "Operation times"
 msgstr "Betjeningstider"
@@ -20330,27 +20776,27 @@ msgstr "Læskurstype"
 
 msgctxt "shelter"
 msgid "basic_hut"
-msgstr ""
+msgstr "basal hytte"
 
 msgctxt "shelter"
 msgid "lean_to"
-msgstr ""
+msgstr "åben hytte"
 
 msgctxt "shelter"
 msgid "picnic_shelter"
-msgstr ""
+msgstr "picnic hytte"
 
 msgctxt "shelter"
 msgid "public_transport"
-msgstr "offentlig transport"
+msgstr "venteskur"
 
 msgctxt "shelter"
 msgid "weather_shelter"
-msgstr ""
+msgstr "ly mod vejr"
 
 msgctxt "shelter"
 msgid "wildlife_hide"
-msgstr ""
+msgstr "dyreskjul"
 
 msgid "Hunting Stand"
 msgstr "Jagttårn"
@@ -20451,13 +20897,13 @@ msgid "Pitch"
 msgstr "Bane"
 
 msgid "artificial_turf"
-msgstr ""
+msgstr "kunstgræs"
 
 msgid "decoturf"
-msgstr ""
+msgstr "decoturf"
 
 msgid "tartan"
-msgstr ""
+msgstr "tartan"
 
 msgid "Racetrack"
 msgstr "Væddeløbsbane"
@@ -20485,7 +20931,7 @@ msgstr "stadion"
 
 msgctxt "running"
 msgid "track"
-msgstr ""
+msgstr "løbebane"
 
 msgid "Nine-pin Bowling"
 msgstr "Ni-kegle-bowling"
@@ -20497,7 +20943,10 @@ msgid "Archery"
 msgstr "Bueskydning"
 
 msgid "Track and Field Athletics"
-msgstr ""
+msgstr "Atletik"
+
+msgid "Running"
+msgstr "Løb"
 
 msgid "Climbing"
 msgstr "Klatring"
@@ -20519,7 +20968,7 @@ msgstr "stadion"
 
 msgctxt "racing"
 msgid "track"
-msgstr ""
+msgstr "bane"
 
 msgid "Dog Racing"
 msgstr "Hundevæddeløb"
@@ -20555,25 +21004,25 @@ msgid "Scuba Diving"
 msgstr "Dykning"
 
 msgid "Piste type"
-msgstr "Piste type"
+msgstr "Pistetype"
 
 msgid "downhill"
 msgstr "styrtløb"
 
 msgid "nordic"
-msgstr "skiløb"
+msgstr "langrend"
 
 msgid "skitour"
-msgstr ""
+msgstr "skitur"
 
 msgid "sled"
-msgstr ""
+msgstr "slæde"
 
 msgid "sleigh"
-msgstr ""
+msgstr "kane"
 
 msgid "snow_park"
-msgstr ""
+msgstr "sne park"
 
 msgid "Difficulty"
 msgstr "Sværhedsgrad"
@@ -20603,31 +21052,31 @@ msgid "freeride"
 msgstr "udenfor pisterne"
 
 msgid "Grooming"
-msgstr ""
+msgstr "Præparering"
 
 msgctxt "piste:grooming"
 msgid "classic"
-msgstr ""
+msgstr "klassisk"
 
 msgctxt "piste:grooming"
 msgid "mogul"
-msgstr ""
+msgstr "pukkel"
 
 msgctxt "piste:grooming"
 msgid "skating"
-msgstr ""
+msgstr "skøjteløb"
 
 msgctxt "piste:grooming"
 msgid "classic;skating"
-msgstr ""
+msgstr "klassisk;skøjteløb"
 
 msgctxt "piste:grooming"
 msgid "scooter"
-msgstr ""
+msgstr "scooter"
 
 msgctxt "piste:grooming"
 msgid "backcountry"
-msgstr ""
+msgstr "ødemark"
 
 msgid "Shooting"
 msgstr "Skydning"
@@ -20651,16 +21100,16 @@ msgid "Gaelic Games"
 msgstr "Gæliske sportsgrene"
 
 msgid "Hurling"
-msgstr ""
+msgstr "Hurling"
 
 msgid "Football"
-msgstr ""
+msgstr "Fodbold"
 
 msgid "Camogie"
-msgstr ""
+msgstr "Camogie"
 
 msgid "Rounders"
-msgstr ""
+msgstr "Rundbold"
 
 msgid "Rugby League"
 msgstr "13-mands-rugby"
@@ -20674,12 +21123,18 @@ msgstr "Baseball"
 msgid "Basketball"
 msgstr "Basketball"
 
+msgid "Handball"
+msgstr "Håndbold"
+
 msgid "Volleyball"
 msgstr "Volleyball"
 
 msgid "Beach Volleyball"
 msgstr "Beachvolley"
 
+msgid "Billiards"
+msgstr "Billard"
+
 msgid "Golf"
 msgstr "Golf"
 
@@ -20695,14 +21150,14 @@ msgstr "Plænebowling"
 msgid "Cricket"
 msgstr "Cricket"
 
-msgid "Cricket Nets"
-msgstr "Cricketnet"
-
 msgid "Croquet"
 msgstr "Kroket"
 
-msgid "Hockey"
-msgstr "Hockey"
+msgid "Field Hockey"
+msgstr "Landhockey"
+
+msgid "Ice Hockey"
+msgstr "Ishockey"
 
 msgid "Pelota"
 msgstr "Pelota"
@@ -20725,9 +21180,6 @@ msgstr "Gokart"
 msgid "Motocross"
 msgstr "Motocross"
 
-msgid "Safety Training"
-msgstr "Sikkerhedstræning"
-
 msgid "Model Aerodrome"
 msgstr "Modelflyvesport"
 
@@ -20746,9 +21198,6 @@ msgstr "spor"
 msgid "RC Car"
 msgstr "Radiostyret bil"
 
-msgid "Raceway"
-msgstr "Motorbane"
-
 msgid "Man Made"
 msgstr "Menneskeskabt"
 
@@ -20821,6 +21270,14 @@ msgid "storage_tank"
 msgstr "lagertank"
 
 msgctxt "building"
+msgid "supermarket"
+msgstr "supermarked"
+
+msgctxt "building"
+msgid "gasometer"
+msgstr "gasbeholder"
+
+msgctxt "building"
 msgid "cowshed"
 msgstr "kostald"
 
@@ -20865,7 +21322,7 @@ msgstr "parcelhus"
 
 msgctxt "building"
 msgid "farm"
-msgstr "gård"
+msgstr "stuehus"
 
 msgid "Building part"
 msgstr "Bygningsdel"
@@ -20910,7 +21367,7 @@ msgid "Tower"
 msgstr "Tårn"
 
 msgid "Tower type"
-msgstr "Type af tårn"
+msgstr "Tårntype"
 
 msgid "communication"
 msgstr "kommunikation"
@@ -21019,10 +21476,10 @@ msgid "Resource"
 msgstr "Ressource"
 
 msgid "aggregate"
-msgstr ""
+msgstr "granulat"
 
 msgid "bauxite"
-msgstr ""
+msgstr "bauxit"
 
 msgid "coal"
 msgstr "kul"
@@ -21031,16 +21488,16 @@ msgid "copper"
 msgstr "kobber"
 
 msgid "dimension_stone"
-msgstr ""
+msgstr "bygningssten"
 
 msgid "gold"
 msgstr "guld"
 
 msgid "ilmenite"
-msgstr ""
+msgstr "ilmenite"
 
 msgid "iron_ore"
-msgstr ""
+msgstr "jernmalm"
 
 msgid "lead"
 msgstr "bly"
@@ -21052,7 +21509,7 @@ msgid "nickel"
 msgstr "nikkel"
 
 msgid "rutile"
-msgstr ""
+msgstr "rutil"
 
 msgid "salt"
 msgstr "salt"
@@ -21067,10 +21524,10 @@ msgid "zinc"
 msgstr "zink"
 
 msgid "zircon"
-msgstr ""
+msgstr "zirkon"
 
 msgid "Visible Headframe"
-msgstr ""
+msgstr "Synlig hejseramme"
 
 msgid "Disused"
 msgstr "Nedlagt"
@@ -21241,379 +21698,379 @@ msgid "aqueduct"
 msgstr "akvædukt"
 
 msgid "boardwalk"
-msgstr ""
+msgstr "gangbro"
 
 msgid "cantilever"
-msgstr ""
+msgstr "fritbærende"
 
 msgid "covered"
-msgstr ""
+msgstr "overdækket"
 
 msgid "low_water_crossing"
-msgstr ""
+msgstr "lavvandsbro"
 
 msgid "trestle"
-msgstr ""
+msgstr "stillads"
 
 msgid "viaduct"
 msgstr "viadukt"
 
 msgid "Structure"
-msgstr ""
+msgstr "Struktur"
 
 msgid "arch"
-msgstr ""
+msgstr "bue"
 
 msgid "beam"
-msgstr ""
+msgstr "bjælke"
 
 msgid "truss"
-msgstr ""
+msgstr "gitter"
 
 msgid "floating"
-msgstr ""
+msgstr "flydende"
 
 msgid "suspension"
-msgstr ""
+msgstr "hænge"
 
 msgid "cable-stayed"
-msgstr ""
+msgstr "skråstag"
 
 msgid "simple-suspension"
-msgstr ""
+msgstr "simpel hænge"
 
 msgid "humpback"
-msgstr ""
+msgstr "pukkel"
 
 msgid "Movable Bridge"
 msgstr "Bevægelig bro"
 
 msgid "bascule"
-msgstr ""
+msgstr "klap"
 
 msgid "drawbridge"
-msgstr ""
+msgstr "vindebro"
 
 msgid "lift"
-msgstr ""
+msgstr "løfte"
 
 msgid "submersible"
-msgstr ""
+msgstr "nedsænkelig"
 
 msgid "swing"
-msgstr ""
+msgstr "sving"
 
 msgid "transporter"
-msgstr ""
+msgstr "transportør"
 
 msgid "Bridge Support"
 msgstr "Bropille"
 
 msgid "pier"
-msgstr ""
+msgstr "brostøtte"
 
 msgid "abutment"
-msgstr ""
+msgstr "støtte ved broende"
 
 msgid "lift_pier"
-msgstr ""
+msgstr "støtte ved løftebro"
 
 msgid "pivot_pier"
-msgstr ""
+msgstr "støtte ved drejebro"
 
 msgid "Bridge outline"
 msgstr "Bro omrids"
 
 msgid "Power Plant"
-msgstr ""
+msgstr "Kraftværk"
 
 msgid "Output forms of energy (optional):"
-msgstr ""
+msgstr "Producerer energiformer (valgfri):"
 
 msgid "Power Generator"
 msgstr "Generator"
 
 msgid "Biofuel Power Generator"
-msgstr ""
+msgstr "Biobrændselsgenerator"
 
 msgid "Generator Type"
-msgstr ""
+msgstr "Generatortype"
 
 msgid "gas_turbine"
-msgstr ""
+msgstr "gasturbine"
 
 msgid "reciprocating_engine"
-msgstr ""
+msgstr "stempelmotor"
 
 msgid "steam_generator"
-msgstr ""
+msgstr "dampgenerator"
 
 msgid "Biogas Power Generator"
-msgstr ""
+msgstr "Biogasgenerator"
 
 msgid "Biomass Power Generator"
-msgstr ""
+msgstr "Biomassegenerator"
 
 msgid "Method"
 msgstr "Metode"
 
 msgctxt "generator method"
 msgid "anaerobic_digestion"
-msgstr ""
+msgstr "anaerob nedbrydning"
 
 msgctxt "generator method"
 msgid "combustion"
-msgstr ""
+msgstr "forbrænding"
 
 msgctxt "generator method"
 msgid "gasification"
-msgstr ""
+msgstr "forgasning"
 
 msgid "bioreactor"
-msgstr ""
+msgstr "bioreaktor"
 
 msgid "anaerobic_digestion / combustion"
-msgstr ""
+msgstr "anaerob nedbrydning / forbrænding"
 
 msgid "pyrolysis"
-msgstr ""
+msgstr "pyrolyse"
 
 msgid "combustion"
-msgstr ""
+msgstr "forbrænding"
 
 msgid "steam_turbine"
-msgstr ""
+msgstr "dampturbine"
 
 msgid "Coal Power Generator"
-msgstr ""
+msgstr "Kulgenerator"
 
 msgid "Gas Power Generator"
-msgstr ""
+msgstr "Gasgenerator"
 
 msgid "combined_cycle"
-msgstr ""
+msgstr "kombinerede cyklus"
 
 msgid "Oil Power Generator"
-msgstr ""
+msgstr "Oliegenerator"
 
 msgid "Diesel Power Generator"
-msgstr ""
+msgstr "Dieselgenerator"
 
 msgid "Gasoline Power Generator"
-msgstr ""
+msgstr "Benzingenerator"
 
 msgid "Nuclear Reactor"
-msgstr ""
+msgstr "Atomreaktor"
 
 msgctxt "generator method"
 msgid "fission"
-msgstr ""
+msgstr "spaltning"
 
 msgctxt "generator method"
 msgid "fusion"
-msgstr ""
+msgstr "sammensmeltning"
 
 msgid "Boiling Water Reactor 1 (BWR-1)"
-msgstr ""
+msgstr "Varmtvandsreaktor 1 (BWR-1)"
 
 msgid "fission"
-msgstr ""
+msgstr "spaltning"
 
 msgid "Boiling Water Reactor 2 (BWR-2)"
-msgstr ""
+msgstr "Varmtvandsreaktor 2 (BWR-2)"
 
 msgid "Boiling Water Reactor 3 (BWR-3)"
-msgstr ""
+msgstr "Varmtvandsreaktor 3 (BWR-3)"
 
 msgid "Boiling Water Reactor 4 (BWR-4)"
-msgstr ""
+msgstr "Varmtvandsreaktor  4 (BWR-4)"
 
 msgid "Boiling Water Reactor 5 (BWR-5)"
-msgstr ""
+msgstr "Varmtvandsreaktor 5 (BWR-5)"
 
 msgid "Boiling Water Reactor 6 (BWR-6)"
-msgstr ""
+msgstr "Varmtvandsreaktor 6 (BWR-6)"
 
 msgid "CANada Deuterium Uranium reactor (CANDU)"
-msgstr ""
+msgstr "Canadisk deuterium uran reaktor (CANDU)"
 
 msgid "cold-fusion"
-msgstr ""
+msgstr "kold-sammensmeltning"
 
 msgid "fusion"
-msgstr ""
+msgstr "sammensmeltning"
 
 msgid "China Pressurized Reactor (CPR-1000)"
-msgstr ""
+msgstr "Kinesisk tryk reaktor (CPR-1000)"
 
 msgid "European Pressurized Reactor (EPR)"
-msgstr ""
+msgstr "Europæisk tryk reaktor (EPR)"
 
 msgid "Inertial Confinement Fusion (ICF)"
-msgstr ""
+msgstr "Inerti indeslutning fusion (ICF)"
 
 msgid "Pressurized water reactor (PWR)"
-msgstr ""
+msgstr "Trykvandsreaktor (PWR)"
 
 msgid "Reactor Bolshoy Moshchnosti Kanalniy 1000 (RBMK-1000)"
-msgstr ""
+msgstr "Reaktor Bolshoy Moshchnosti Kanalniy 1000 (RBMK-1000)"
 
 msgid "Reactor Bolshoy Moshchnosti Kanalniy 1500 (RBMK-1500)"
-msgstr ""
+msgstr "Reaktor Bolshoy Moshchnosti Kanalniy 1500 (RBMK-1500)"
 
 msgid "stellarator"
-msgstr ""
+msgstr "stellarator"
 
 msgid "tokamak"
-msgstr ""
+msgstr "tokamak"
 
 msgid "Vodo-Vodyanoi Energetichesky Reactor (VVER)"
-msgstr ""
+msgstr "Vodo-Vodyanoi Energetichesky reaktor (VVER)"
 
 msgid "Solar Power Generator"
-msgstr ""
+msgstr "Solgenerator"
 
 msgctxt "generator method"
 msgid "photovoltaic"
-msgstr ""
+msgstr "solceller"
 
 msgctxt "generator method"
 msgid "thermal"
-msgstr ""
+msgstr "termisk"
 
 msgid "solar_photovoltaic_panel"
-msgstr ""
+msgstr "solcellepanel"
 
 msgid "photovoltaic"
-msgstr ""
+msgstr "solceller"
 
 msgid "solar_thermal_collector"
-msgstr ""
+msgstr "solvarmefanger"
 
 msgid "thermal"
-msgstr ""
+msgstr "termisk"
 
 msgid "Waste Power Generator"
-msgstr ""
+msgstr "Affaldsgenerator"
 
 msgctxt "generator method"
 msgid "pyrolysis"
-msgstr ""
+msgstr "pyrolyse"
 
 msgid "gasification"
-msgstr ""
+msgstr "forgasning"
 
 msgid "Water Turbine"
-msgstr ""
+msgstr "Vandturbine"
 
 msgctxt "generator method"
 msgid "run-of-the-river"
-msgstr ""
+msgstr "tilløb fra flod"
 
 msgctxt "generator method"
 msgid "water-pumped-storage"
-msgstr ""
+msgstr "vand pumpes fra lager"
 
 msgctxt "generator method"
 msgid "water-storage"
-msgstr ""
+msgstr "vandlager"
 
 msgid "francis_turbine"
-msgstr ""
+msgstr "francis turbine"
 
 msgid "all methods"
-msgstr ""
+msgstr "alle metoder"
 
 msgid "hydrodynamic_screw"
-msgstr ""
+msgstr "hydrodynamisk skrue"
 
 msgid "run-of-the-river"
-msgstr ""
+msgstr "tilløb fra flod"
 
 msgid "kaplan_turbine"
-msgstr ""
+msgstr "kaplan turbine"
 
 msgid "run-of-the-river / water-storage"
-msgstr ""
+msgstr "tilløb fra flod / vandlager"
 
 msgid "pelton_turbine"
-msgstr ""
+msgstr "pelton turbine"
 
 msgid "Tidal Water Turbine"
-msgstr ""
+msgstr "Tidevandsturbine"
 
 msgctxt "generator method"
 msgid "barrage"
-msgstr ""
+msgstr "dæmning"
 
 msgctxt "generator method"
 msgid "stream"
-msgstr ""
+msgstr "strømning"
 
 msgid "horizontal_axis"
-msgstr ""
+msgstr "vandret akse"
 
 msgid "barrage"
-msgstr ""
+msgstr "dæmning"
 
 msgid "vertical_axis"
-msgstr ""
+msgstr "lodret akse"
 
 msgid "Wave Energy Converter"
-msgstr ""
+msgstr "Bølgeenergiomformer"
 
 msgid "Osmotic Power Generator"
-msgstr ""
+msgstr "Osmotiskgenerator"
 
 msgid "Geothermal Power Generator"
-msgstr ""
+msgstr "Geotermiskgenerator"
 
 msgid "heat_pump"
-msgstr ""
+msgstr "varmepumpe"
 
 msgid "Wind Turbine"
-msgstr ""
+msgstr "Vindmølle"
 
 msgid "Power Substation"
-msgstr ""
+msgstr "Transformerstation"
 
 msgid "Type of substation"
-msgstr ""
+msgstr "Transformerstationstype"
 
 msgctxt "power"
 msgid "transmission"
-msgstr ""
+msgstr "overførsel"
 
 msgctxt "power"
 msgid "distribution"
-msgstr ""
+msgstr "fordeling"
 
 msgctxt "power"
 msgid "minor_distribution"
-msgstr ""
+msgstr "mindre fordeling"
 
 msgctxt "power"
 msgid "converter"
-msgstr ""
+msgstr "omformer"
 
 msgctxt "power"
 msgid "compensation"
-msgstr ""
+msgstr "kompensation"
 
 msgctxt "power"
 msgid "transition"
-msgstr ""
+msgstr "overgang"
 
 msgctxt "power"
 msgid "traction"
-msgstr ""
+msgstr "trækkraft"
 
 msgctxt "power"
 msgid "industrial"
-msgstr ""
+msgstr "industri"
 
 msgid "Power rating (kVA/MVA)"
-msgstr ""
+msgstr "Effekt (kVA/MVA)"
 
 msgid "2700 kVA"
 msgstr "2700 kVA"
@@ -21631,120 +22088,122 @@ msgid "100 MVA"
 msgstr "100 MVA"
 
 msgid "Gas insulated"
-msgstr ""
+msgstr "Gas isolerede"
 
 msgid "Power Transformer"
-msgstr ""
+msgstr "Transformer"
 
 msgid "Type of transformer"
-msgstr ""
+msgstr "Transformertype"
 
 msgctxt "power"
 msgid "generator"
-msgstr ""
+msgstr "generator"
 
 msgctxt "power"
 msgid "auto"
-msgstr ""
+msgstr "auto"
 
 msgctxt "power"
 msgid "phase_angle_regulator"
-msgstr ""
+msgstr "fasevinkelregulator"
 
 msgctxt "power"
 msgid "yes"
 msgstr "ja"
 
 msgid "Phases"
-msgstr ""
+msgstr "Faser"
 
 msgid "Power Switchgear"
-msgstr ""
+msgstr "Koblingsanlæg"
 
 msgid ""
 "(Please only use this tag if more detailed mapping using busbars and bays is "
 "impossible!)"
 msgstr ""
+"(Brug kun dette tag hvis mere detaljeret kortlægning ved hjælp af skinner og "
+"bugter er umuligt!)"
 
 msgid "Power Busbar"
-msgstr ""
+msgstr "Skinner"
 
 msgid "Power Bay"
-msgstr ""
+msgstr "Bugter"
 
 msgid "Power Switch"
-msgstr ""
+msgstr "Afbryder"
 
 msgid "Power Converter"
-msgstr ""
+msgstr "Omformer"
 
 msgid "Type of converter"
-msgstr ""
+msgstr "Omformertype"
 
 msgctxt "power"
 msgid "lcc"
-msgstr ""
+msgstr "lcc"
 
 msgctxt "power"
 msgid "vsc"
-msgstr ""
+msgstr "vsc"
 
 msgctxt "power"
 msgid "back-to-back"
-msgstr ""
+msgstr "ryg mod ryg"
 
 msgid "Amount of poles"
-msgstr ""
+msgstr "Antal poler"
 
 msgid "monopole"
-msgstr ""
+msgstr "monopol"
 
 msgid "bipole"
-msgstr ""
+msgstr "bipol"
 
 msgid "Power rating (MVA)"
-msgstr ""
+msgstr "Effekt (MVA)"
 
 msgid "Power Compensator"
-msgstr ""
+msgstr "Kompensator"
 
 msgid "Type of compensator"
-msgstr ""
+msgstr "Kompensatortype"
 
 msgctxt "power"
 msgid "shunt_reactor"
-msgstr ""
+msgstr "shunt reaktor"
 
 msgctxt "power"
 msgid "shunt_capacitor"
-msgstr ""
+msgstr "shunt kondensator"
 
 msgctxt "power"
 msgid "static_var"
-msgstr ""
+msgstr "statisk var kompensator"
 
 msgctxt "power"
 msgid "statcom"
-msgstr ""
+msgstr "statisk synkron kompensator"
 
 msgctxt "power"
 msgid "synchronous_condenser"
-msgstr ""
+msgstr "synkron kondensator"
 
 msgctxt "power"
 msgid "filter"
-msgstr ""
+msgstr "filter"
 
 msgctxt "power"
 msgid "series_reactor"
-msgstr ""
+msgstr "serie reaktor"
 
 msgctxt "power"
 msgid "series_capacitor"
-msgstr ""
+msgstr "serie kondensator"
 
 msgid "Power rating (kvar/Mvar)"
-msgstr ""
+msgstr "Effekt (kvar/Mvar)"
 
 msgid "500 kvar"
 msgstr "500 kvar"
@@ -21762,239 +22221,239 @@ msgid "Power Tower"
 msgstr "Elmast"
 
 msgid "Type of construction"
-msgstr ""
+msgstr "Konstruktionstype"
 
 msgid "lattice"
-msgstr ""
+msgstr "gitter"
 
 msgid "tubular"
-msgstr ""
+msgstr "rørformet"
 
 msgid "solid"
-msgstr ""
+msgstr "massiv"
 
 msgid "steel"
-msgstr ""
+msgstr "stål"
 
 msgctxt "color"
 msgid "red/white"
-msgstr ""
+msgstr "rød/hvid"
 
 msgctxt "power"
 msgid "Tower type"
-msgstr ""
+msgstr "Tårntype"
 
 msgctxt "power"
 msgid "suspension"
-msgstr ""
+msgstr "hænge"
 
 msgctxt "power"
 msgid "anchor"
-msgstr ""
+msgstr "anker"
 
 msgctxt "power"
 msgid "termination"
-msgstr ""
+msgstr "afslutning"
 
 msgctxt "power"
 msgid "branch"
-msgstr ""
+msgstr "forgrening"
 
 msgctxt "power"
 msgid "transposing"
-msgstr ""
+msgstr "gennemgang"
 
 msgctxt "power"
 msgid "crossing"
-msgstr ""
+msgstr "krydsning"
 
 msgid "Branch tower type"
-msgstr ""
+msgstr "Mastforgreningstype"
 
 msgctxt "power"
 msgid "tap"
-msgstr ""
+msgstr "tappe"
 
 msgctxt "power"
 msgid "split"
-msgstr ""
+msgstr "opdele"
 
 msgctxt "power"
 msgid "loop"
-msgstr ""
+msgstr "sløjfe"
 
 msgctxt "power"
 msgid "cross"
-msgstr ""
+msgstr "krydse"
 
 msgid "Tower design"
-msgstr ""
+msgstr "Mastdesign"
 
 msgctxt "power"
 msgid "one-level"
-msgstr ""
+msgstr "et niveau"
 
 msgctxt "power"
 msgid "two-level"
-msgstr ""
+msgstr "to niveau"
 
 msgctxt "power"
 msgid "donau"
-msgstr ""
+msgstr "donau"
 
 msgctxt "power"
 msgid "three-level"
-msgstr ""
+msgstr "tre niveau"
 
 msgctxt "power"
 msgid "barrel"
-msgstr ""
+msgstr "tønde"
 
 msgctxt "power"
 msgid "asymmetric"
-msgstr ""
+msgstr "asymmetrisk"
 
 msgctxt "power"
 msgid "triangle"
-msgstr ""
+msgstr "trekant"
 
 msgctxt "power"
 msgid "flag"
-msgstr ""
+msgstr "flag"
 
 msgctxt "power"
 msgid "donau;one-level"
-msgstr ""
+msgstr "donau;et niveau"
 
 msgctxt "power"
 msgid "four-level"
-msgstr ""
+msgstr "fire niveau"
 
 msgctxt "power"
 msgid "six-level"
-msgstr ""
+msgstr "seks niveau"
 
 msgctxt "power"
 msgid "nine-level"
-msgstr ""
+msgstr "ni niveau"
 
 msgctxt "power"
 msgid "delta"
-msgstr ""
+msgstr "delta"
 
 msgctxt "power"
 msgid "delta_two-level"
-msgstr ""
+msgstr "delta to niveau"
 
 msgctxt "power"
 msgid "y-frame"
-msgstr ""
+msgstr "y ramme"
 
 msgctxt "power"
 msgid "x-frame"
-msgstr ""
+msgstr "x ramme"
 
 msgctxt "power"
 msgid "h-frame"
-msgstr ""
+msgstr "h ramme"
 
 msgctxt "power"
 msgid "guyed_h-frame"
-msgstr ""
+msgstr "udbarduneret h ramme"
 
 msgctxt "power"
 msgid "portal"
-msgstr ""
+msgstr "portal"
 
 msgctxt "power"
 msgid "portal_two-level"
-msgstr ""
+msgstr "portal to niveau"
 
 msgctxt "power"
 msgid "portal_three-level"
-msgstr ""
+msgstr "portal tre niveau"
 
 msgctxt "power"
 msgid "guyed_v-frame"
-msgstr ""
+msgstr "udbarduneret v ramme"
 
 msgctxt "power"
 msgid "bipole"
-msgstr ""
+msgstr "bipol"
 
 msgctxt "power"
 msgid "monopolar"
-msgstr ""
+msgstr "monopol"
 
 msgid "Triple tower"
-msgstr ""
+msgstr "Tredobbelt mast"
 
 msgid "Incomplete tower"
-msgstr ""
+msgstr "Ufuldstændig mast"
 
 msgid "Location transition"
-msgstr ""
+msgstr "Overgangssted"
 
 msgid "Pole"
 msgstr "Pæl"
 
 msgid "Pole with Transformer"
-msgstr ""
+msgstr "Pæl med transformer"
 
 msgid "Pole Attributes:"
-msgstr ""
+msgstr "Pæle attributter:"
 
 msgid "Transformer Attributes:"
-msgstr ""
+msgstr "Transformer attributter:"
 
 msgid "Power Line"
-msgstr "Strømkabel"
+msgstr "Uisoleret strømkabel"
 
 msgid "Line type"
-msgstr "Linie type"
+msgstr "Linietype"
 
 msgid "line"
-msgstr ""
+msgstr "luftlinje"
 
 msgid "minor_line"
-msgstr ""
+msgstr "mindre luftlinje"
 
 msgid "Number of conductors/wires per cable"
-msgstr ""
+msgstr "Antal ledere/tråde per kabel"
 
 msgctxt "power"
 msgid "single"
-msgstr ""
+msgstr "enkelt"
 
 msgctxt "power"
 msgid "double"
-msgstr ""
+msgstr "dobbelt"
 
 msgctxt "power"
 msgid "triple"
-msgstr ""
+msgstr "tredobbelt"
 
 msgctxt "power"
 msgid "quad"
-msgstr ""
+msgstr "firdobbelt"
 
 msgctxt "power"
 msgid "fivefold"
-msgstr ""
+msgstr "femdobbelt"
 
 msgctxt "power"
 msgid "sixfold"
-msgstr ""
+msgstr "seksdobbelt"
 
 msgctxt "power"
 msgid "eightfold"
-msgstr ""
+msgstr "ottedobbelt"
 
 msgid "Used for data communications"
-msgstr ""
+msgstr "Bruges til datakommunikation"
 
 msgid "Power Cable"
-msgstr ""
+msgstr "Isoleret strømkabel"
 
 msgctxt "power cable"
 msgid "underground"
@@ -22063,14 +22522,14 @@ msgid "Wayside Cross"
 msgstr "Vejkantskors"
 
 msgid "Wayside Shrine"
-msgstr "Ret vejkantstempel"
+msgstr "Vejkantshelligdom"
 
 msgid "Place of worship"
-msgstr ""
+msgstr "Sted for tilbedelse"
 
 msgctxt "building"
 msgid "wayside_shrine"
-msgstr ""
+msgstr "vejkantshelligdom"
 
 msgid "Boundary Stone"
 msgstr "Grænsesten"
@@ -22141,9 +22600,6 @@ msgstr "Vinhandel"
 msgid "Boutique"
 msgstr "Boutique"
 
-msgid "Shoes"
-msgstr "Sko"
-
 msgid "Outdoor"
 msgstr "Udendørs"
 
@@ -22505,16 +22961,16 @@ msgid "Political"
 msgstr "Politisk"
 
 msgid "Division"
-msgstr ""
+msgstr "Opdeling"
 
 msgid "canton"
-msgstr ""
+msgstr "kanton"
 
 msgid "linguistic_community"
-msgstr ""
+msgstr "sprogfællesskab"
 
 msgid "ward"
-msgstr ""
+msgstr "menighed"
 
 msgid "Postal Code"
 msgstr "Postnummer"
@@ -22532,19 +22988,19 @@ msgid "Title or type of protection"
 msgstr "Titel eller type af beskyttelse"
 
 msgid "Border type"
-msgstr ""
+msgstr "Grænsetype"
 
 msgid "baseline"
-msgstr ""
+msgstr "basislinje"
 
 msgid "territorial"
-msgstr ""
+msgstr "territorial"
 
 msgid "contiguous"
-msgstr ""
+msgstr "sammenhængende"
 
 msgid "eez"
-msgstr ""
+msgstr "eksklusiv økonomiske zone"
 
 msgid "Places"
 msgstr "Steder"
@@ -22578,7 +23034,7 @@ msgid "Hamlet"
 msgstr "Landsby"
 
 msgid "Isolated Dwelling"
-msgstr "Isoleret bygning"
+msgstr "Isoleret beboelse"
 
 msgid "Suburb"
 msgstr "Forstad"
@@ -22587,13 +23043,13 @@ msgid "Neighbourhood"
 msgstr "Nabolag"
 
 msgid "Farm"
-msgstr ""
+msgstr "Landbrugsbedrift"
 
 msgid "A farm within a bigger settlement"
-msgstr ""
+msgstr "En gård inden for større bosættelse"
 
 msgid "(please use isolated_dwelling for an isolated farm)"
-msgstr ""
+msgstr "(benyt isoleret beboelse for en isoleret gård)"
 
 msgid "Locality"
 msgstr "Egn"
@@ -22838,7 +23294,7 @@ msgid "Farmyard"
 msgstr "Gårdsplads"
 
 msgid "Farmland"
-msgstr "Jordbrugsland"
+msgstr "Landbrugsjord"
 
 msgid "Meadow"
 msgstr "Eng"
@@ -22952,7 +23408,7 @@ msgid "House number"
 msgstr "Husnummer"
 
 msgid "Street name"
-msgstr "Vejnavn"
+msgstr "Gadenavn"
 
 msgid "Place name"
 msgstr "Stednavn"
@@ -23160,23 +23616,23 @@ msgid "Accuracy"
 msgstr "Præcision"
 
 msgid "actual"
-msgstr ""
+msgstr "faktiske"
 
 msgid "estimate"
-msgstr ""
+msgstr "estimat"
 
 msgid "potential"
-msgstr ""
+msgstr "potentiale"
 
 msgid "Contact (Common Schema)"
 msgstr "Kontakt (Almindeligt skema)"
 
-msgid "Fax Number"
-msgstr "Faxnummer"
-
 msgid "Email Address"
 msgstr "E-mailadresse"
 
+msgid "Fax Number"
+msgstr "Faxnummer"
+
 msgid "Image"
 msgstr "Billede"
 
@@ -23252,16 +23708,16 @@ msgid "Sub area"
 msgstr "Underområde"
 
 msgid "Administration centre"
-msgstr ""
+msgstr "Administrationscenter"
 
 msgid "Label point"
-msgstr ""
+msgstr "Etiketpunkt"
 
 msgid "Site"
 msgstr "Sted"
 
 msgid "Site name"
-msgstr ""
+msgstr "Stednavn"
 
 msgid "where to place the label"
 msgstr "hvor etiketten placeres"
@@ -23318,28 +23774,28 @@ msgid "Type of enforcement"
 msgstr "Type af håndhævelse"
 
 msgid "maxheight"
-msgstr "maxheight"
+msgstr "maxhøjde"
 
 msgid "maxweight"
-msgstr "maxweight"
+msgstr "maxvægt"
 
 msgid "maxspeed"
-msgstr "maxspeed"
+msgstr "maxhastighed"
 
 msgid "mindistance"
-msgstr "mindistance"
+msgstr "minafstand"
 
 msgid "check"
-msgstr ""
+msgstr "kontrol"
 
 msgid "Max. height (meters, only if enforcement=maxheight)"
-msgstr "Maks højde (meter, kun hvis enforcement=maxheight)"
+msgstr "Maks højde (meter, kun hvis håndhævelse er maxhøjde)"
 
 msgid "Max. weight (tonnes, only if enforcement=maxweight)"
-msgstr "Maks vægt (ton, kun hvis enforcement=maxweight)"
+msgstr "Maks vægt (ton, kun hvis håndhævelse er maxvægt)"
 
 msgid "Max. speed (km/h, only if enforcement=maxspeed)"
-msgstr "Maks fart (km/t, kun hvis enforcement=maxspeed)"
+msgstr "Maks fart (km/t, kun hvis håndhævelse er maxhastighed)"
 
 msgid "location of enforcement device"
 msgstr "placering for håndhævelsesenhed"
@@ -23360,16 +23816,16 @@ msgid "Bicycle Route"
 msgstr "Cykelrute"
 
 msgid "icn"
-msgstr ""
+msgstr "international cykel netværk"
 
 msgid "ncn"
-msgstr ""
+msgstr "national cykel netværk"
 
 msgid "rcn"
-msgstr ""
+msgstr "regional cykel netværk"
 
 msgid "lcn"
-msgstr ""
+msgstr "lokal cykel netværk"
 
 msgid "Mountain Biking Route"
 msgstr "Mountainbikerute"
@@ -23378,19 +23834,19 @@ msgid "Hiking Route"
 msgstr "Vandrerute"
 
 msgid "iwn"
-msgstr ""
+msgstr "international vandre netværk"
 
 msgid "nwn"
-msgstr ""
+msgstr "national vandre netværk"
 
 msgid "rwn"
-msgstr ""
+msgstr "regional vandre netværk"
 
 msgid "lwn"
-msgstr ""
+msgstr "lokal vandre netværk"
 
 msgid "infrastructure"
-msgstr ""
+msgstr "infrastruktur"
 
 msgid "natural"
 msgstr "naturlig"
@@ -23399,28 +23855,28 @@ msgid "Piste Route"
 msgstr "Pisterute"
 
 msgid "link segment"
-msgstr ""
+msgstr "forbindelsessegment"
 
 msgid "shortcut segment"
-msgstr ""
+msgstr "genvejssegment"
 
 msgid "variant segment"
-msgstr ""
+msgstr "variantsegment"
 
 msgid "entry points"
-msgstr ""
+msgstr "startpunkter"
 
 msgid "Ski Route"
 msgstr "Skirute"
 
 msgid "alpine"
-msgstr ""
+msgstr "alpint"
 
 msgid "Detour Route"
 msgstr "Omkørselsrute"
 
 msgid "Destination"
-msgstr ""
+msgstr "Destination"
 
 msgid "Ref of the way this is a detour to"
 msgstr "Ref på vejen dette er en omvej til"
@@ -23444,7 +23900,7 @@ msgid "member"
 msgstr "medlem"
 
 msgid "Associated Street"
-msgstr ""
+msgstr "Tilknyttet gade"
 
 msgid "house"
 msgstr "hus"
@@ -23456,16 +23912,16 @@ msgid "ways being part of street"
 msgstr "veje der er del af gaden"
 
 msgid "addresses belonging to the street"
-msgstr "adresser der hører til vejen"
+msgstr "adresser der hører til gaden"
 
 msgid "houses belonging to the street"
-msgstr "huse der hører til vejen"
+msgstr "huse der hører til gaden"
 
 msgid "anything related to the street"
-msgstr "alt der er relateret til vejen"
+msgstr "alt der er relateret til gaden"
 
 msgid "Destination Sign"
-msgstr ""
+msgstr "Retningsskilt"
 
 msgid "Destination written on sign (w/o distance)"
 msgstr "Destination skrevet på skilt (uden afstand)"
@@ -23540,22 +23996,22 @@ msgid "Length (meters)"
 msgstr "Længde (meter)"
 
 msgid "ways supported by (on top of) the bridge"
-msgstr ""
+msgstr "veje der understøttes af (ovenpå) broen"
 
 msgid "ways passing under the bridge"
-msgstr ""
+msgstr "veje der passerer under broen"
 
 msgid "way forming the outline footprint"
-msgstr ""
+msgstr "veje der danner omridset af aftryk"
 
 msgid "edge ways parallel to ''across''"
-msgstr ""
+msgstr "kantveje parallelt med ''på tværs''"
 
 msgid "ways passing through the tunnel"
-msgstr ""
+msgstr "veje der passerer gennem tunnelen"
 
 msgid "edge ways parallel to ''through''"
-msgstr ""
+msgstr "kantveje parallelt med ''gennem''"
 
 msgid "Tunnel Start"
 msgstr "Begyndelse på tunnel"
@@ -23582,7 +24038,7 @@ msgid "Test"
 msgstr "Test"
 
 msgid "Decreasing house numbers in addresses interpolation"
-msgstr ""
+msgstr "Faldende husnumre i adresse interpolation"
 
 msgid "{0} without {1}"
 msgstr "{0} uden {1}"
@@ -23597,13 +24053,16 @@ msgid "{0} together with {1}"
 msgstr "{0} sammen med {1}"
 
 msgid "incomplete object: only {0}"
-msgstr ""
+msgstr "ufuldstændigt objekt: kun {0}"
 
 msgid "incomplete object: only {0} and {1}"
-msgstr ""
+msgstr "ufuldstændigt objekt: kun {0} og {1}"
 
 msgid "{0} together with addr:*"
-msgstr ""
+msgstr "{0} sammen med addr:*"
+
+msgid "{0} together with {1} and conflicting values"
+msgstr "{0} sammen med {1} og modstridende værdier"
 
 msgid "{0} on suspicious object"
 msgstr "{0} på mistænkeligt objekt"
@@ -23618,7 +24077,7 @@ msgid "natural water used for swimming pool"
 msgstr "natural water brugt til swimming pool"
 
 msgid "sport without physical feature"
-msgstr ""
+msgstr "sport uden fysisk funktion"
 
 msgid "{0} should be on the node where {1} and {2} intersect"
 msgstr "{0} bør være på punktet hvor {1} og {2} krydser"
@@ -23629,6 +24088,18 @@ msgstr "alternativt navn uden {0}"
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr "mangelfuld brug af {0} på vej uden {1}"
 
+msgid "Same value of {0} and {1}"
+msgstr "Samme værdi som {0} og {1}"
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr "Samme værdi som {0}, {1} og {2}"
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr "{0} og {1} sammen med {2} og modstridende værdier"
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr "Mistænkelig tag kombination: {0} og {1}"
+
 msgid "{0}={1} is deprecated"
 msgstr "{0}={1} er forældet"
 
@@ -23642,11 +24113,15 @@ msgid ""
 "''{0}'' does not specify the official mode of transportation, use ''{1}'' "
 "for example"
 msgstr ""
+"''{0}'' angiver ikke den officielle form for transport, brug for eksempel "
+"''{1}''"
 
 msgid ""
 "{0}={1} is unspecific. Instead of ''{1}'' please give more information about "
 "what exactly should be fixed."
 msgstr ""
+"{0}={1} er uspecifik. I stedet for ''{1}'' skal der gives flere oplysninger "
+"om, hvad der præcist skal fastsættes."
 
 msgid "{0}={1} is deprecated. Please use instead a multipolygon."
 msgstr "{0}={1} er forældet. Brug i stedet en multipolygon."
@@ -23657,10 +24132,10 @@ msgstr "{0} er forældet. Angiv interval ved brug af opening_hours syntaks"
 
 msgid ""
 "{0} is deprecated. Please delete this object and use a private layer instead"
-msgstr ""
+msgstr "{0} er forældet. Slet dette objekt og brugt et privat lag i stedet"
 
 msgid "{0}={1} is unspecific. Please replace ''{1}'' by a specific value."
-msgstr ""
+msgstr "{0}={1} er uspecifik. Erstat ''{1}'' med en bestemt værdi."
 
 msgid "{0} should be replaced with {1}"
 msgstr "{0} bør erstattes med {1}"
@@ -23672,24 +24147,28 @@ msgid ""
 "{0}={1} is unspecific. Please replace ''{1}'' by ''left'', ''right'' or "
 "''both''."
 msgstr ""
-"{0}={1}  er uspecifik. Udskift ''{1}'' med ''left'', ''right'' eller "
-"''both''."
+"{0}={1}  er uspecifik. Erstat ''{1}'' med ''left'', ''right'' eller ''both''."
 
 msgid "Unspecific tag {0}"
-msgstr ""
+msgstr "Uspecifik tag {0}"
 
 msgid "Definition of {0} is unclear"
-msgstr ""
+msgstr "Definition af {0} er uklar"
 
 msgid ""
 "{0} is not recommended. Use the Reverse Ways function from the Tools menu."
 msgstr ""
+"{0} kan ikke anbefales. Brug vend vejretninger funktionen fra menuen "
+"værktøjer."
 
 msgid "key with uncommon character"
-msgstr ""
+msgstr "nøgle med ualmindelig karakter"
 
 msgid "uncommon short key"
-msgstr ""
+msgstr "ualmindelig kort nøgle"
+
+msgid "{0} is inaccurate"
+msgstr "{0} er unøjagtig"
 
 msgid "{0} on a node. Should be used on a way."
 msgstr "{0} på et punkt. Bør bruges på en vej."
@@ -23701,7 +24180,7 @@ msgid "{0}=* on a node. Should be used in a relation"
 msgstr "{0}=* på et punkt. Bør bruges i en relation"
 
 msgid "{0} on a way. Should be used on a node."
-msgstr ""
+msgstr "{0} på en vej. Bør bruges på et punkt."
 
 msgid "{0} on a way. Should be used in a relation"
 msgstr "{0} på en vej. Bør bruges i en relation"
@@ -23734,7 +24213,7 @@ msgid "node connects waterway and bridge"
 msgstr "node forbinder vandløb og bro"
 
 msgid "abbreviated street name"
-msgstr "forkortet vejnavn"
+msgstr "forkortet gadenavn"
 
 msgid "wrong highway tag on a node"
 msgstr "forkert vej tag på et punkt"
@@ -23752,7 +24231,7 @@ msgid "temporary highway type"
 msgstr "midlertidig vejtype"
 
 msgid "street name contains ss"
-msgstr "vejnavn indeholder ss"
+msgstr "gadenavn indeholder ss"
 
 msgid ""
 "Value of ''{0}'' should either be ''{1}'' or ''{2}''. For sidewalks use "
@@ -23765,13 +24244,13 @@ msgid "{0} with multiple values"
 msgstr "{0} med flere værdier"
 
 msgid "empty value in semicolon-separated ''{0}''"
-msgstr ""
+msgstr "tom værdi i semikolon-separeret ''{0}''"
 
 msgid "numerical key"
 msgstr "numerisk nøgle"
 
 msgid "layer tag with + sign"
-msgstr "layer tag med + tegn"
+msgstr "tag på lag med + tegn"
 
 msgid "layer should be between -5 and 5"
 msgstr "lag bør være mellem -5 og 5"
@@ -23785,9 +24264,22 @@ msgstr ""
 "{0}: meter er standard; punktum er  separator; hvis enheder, brug mellemrum "
 "så enhed"
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+"{0}: ton er standard; punktum adskiller decimaler; hvis enheder sæt "
+"mellemrum derefter enhed"
+
 msgid "unusual {0} format"
 msgstr "usædvanligt {0} format"
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+"{0}: kilometer er standard; punktum adskiller decimaler; hvis enheder sæt "
+"mellemrum derefter enhed"
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr "spænding bør være i volt uden enheder/skilletegn/mellemrum"
 
@@ -23854,13 +24346,13 @@ msgid "Hide icons at low zoom"
 msgstr "Skjul ikoner ved lav zoom"
 
 msgid "Less obtrusive node symbols at low zoom"
-msgstr ""
+msgstr "Mindre skæmmende punktsymboler ved lav zoom"
 
 msgid "Display street labels (at high zoom)"
 msgstr "Vis gadenavne (ved høj zoom)"
 
 msgid "Use alternative turn restriction icon set"
-msgstr ""
+msgstr "Brug alternativ svingbegrænsningsikonsæt"
 
 msgid "Columbus V-900 CSV Files"
 msgstr "Columbus V-900 CSV Filer"
@@ -23933,16 +24425,16 @@ msgid "Set input focus to the command line."
 msgstr "Sæt inputfokus på kommandolinjen."
 
 msgid "Point on the start"
-msgstr ""
+msgstr "Startpunktet"
 
 msgid "Point on the end"
-msgstr ""
+msgstr "Slutpunktet"
 
 msgid "Missing definition of new object with id {0}."
-msgstr ""
+msgstr "Manglende definition af nyt objekt med id {0}."
 
 msgid "Missing mandatory attribute ''{0}'' on <member> of relation {1}."
-msgstr ""
+msgstr "Manglende obligatorisk attribut ''{0}'' på <medlem> af relation {1}."
 
 msgid "Illegal value for attribute ''uid''. Got ''{0}''."
 msgstr "Ulovlig værdi af attribut ''UID''. Fik ''{0}''."
@@ -24016,7 +24508,7 @@ msgid "Public (shown in trace list and as anonymous, unordered points)"
 msgstr "Offentlig (vist i sporliste og som anonyme, uordnede punkter)"
 
 msgid "Trackable (only shared as anonymous, ordered points with timestamps)"
-msgstr ""
+msgstr "Sporbar (kun delt som anonym, ordnede punkter med tidsstempler)"
 
 msgid ""
 "Identifiable (shown in trace list and as identifiable, ordered points with "
@@ -24092,13 +24584,13 @@ msgid "Elevation Profile"
 msgstr "Højdeprofil"
 
 msgid "Elevation Grid Layer (experimental!)"
-msgstr ""
+msgstr "Højdegitterlag (eksperimentel!)"
 
 msgid "Shows elevation grid layer"
-msgstr ""
+msgstr "Viser højdegitterlag"
 
 msgid "Elevation Grid"
-msgstr ""
+msgstr "Højdegitter"
 
 msgid "No SRTM data"
 msgstr "Ingen SRTM data"
@@ -24110,16 +24602,16 @@ msgid "Min"
 msgstr "Min."
 
 msgid "Avrg"
-msgstr ""
+msgstr "Gnsn."
 
 msgid "Max"
 msgstr "Maks."
 
 msgid "Dist"
-msgstr ""
+msgstr "Lgd."
 
 msgid "Gain"
-msgstr ""
+msgstr "Højdemeter"
 
 msgid "Tracks"
 msgstr "Spor"
@@ -24137,46 +24629,49 @@ msgid "Can not save preferences"
 msgstr "Kan ikke gemme indstillinger"
 
 msgid "Epsilon multiplier"
-msgstr ""
+msgstr "Epsilon multiplikator"
 
 msgid "Starting Epsilon"
-msgstr ""
+msgstr "Start epsilon"
 
 msgid "Max points count per 1 km"
-msgstr ""
+msgstr "Max antal punkter per 1 km"
 
 msgid "Enter key mode"
-msgstr ""
+msgstr "Vælg tilstand"
 
 msgid "Auto add tags"
-msgstr ""
+msgstr "Auto tilføj tags"
 
 msgid "Autosimplify"
-msgstr ""
+msgstr "Auto forenkling"
 
 msgid "Simplify with initial epsilon"
-msgstr ""
+msgstr "Forenkling med oprindelig epsilon"
 
 msgid "Save as is"
-msgstr ""
+msgstr "Gem som det er"
 
 msgid "Snap to nodes"
-msgstr ""
+msgstr "Fastgør til punkter"
 
 msgid "Add fixed points on click"
-msgstr ""
+msgstr "Tilføj faste punkter med klik"
 
 msgid "Add fixed points on spacebar"
-msgstr ""
+msgstr "Tilføj faste punkter med mellemrumstast"
+
+msgid "Allow edit existing ways"
+msgstr "Tillad at rediger eksisterende veje"
 
 msgid "Draw closed polygons only"
-msgstr ""
+msgstr "Tegn kun lukkede polygoner"
 
 msgid "FastDraw configuration"
-msgstr ""
+msgstr "HurtigTegning konfiguration"
 
 msgid "Try copying tags from properties table"
-msgstr ""
+msgstr "Prøv at kopiere tags fra egenskaberstabel"
 
 msgid "Save settings"
 msgstr "Gem indstillinger"
@@ -24186,23 +24681,28 @@ msgstr "Kan ikke læse indstillingerne"
 
 msgid "Q=Options, Enter=save, Ctrl-Enter=save with tags, Up/Down=tune"
 msgstr ""
+"Q=Indstillinger, Enter=gemme, Ctrl-Enter=gem med tags, op/ned=indstille"
 
 msgid ""
 "Click or Click&drag to continue, Ctrl-Click to add fixed node, Shift-Click "
 "to delete, Enter to simplify or save, Ctrl-Shift-Click to start new line"
 msgstr ""
+"Klik eller Klik&Træk for at fortsætte, Ctrl-Klik for at tilføje fast punkt, "
+"Shift-Klik for at slette, Enter for at forenkle eller gemme, Ctrl-Shift-Klik "
+"for at starte ny linje"
 
 msgid "FastDrawing"
-msgstr "Hurtig tegning"
+msgstr "HurtigTegning"
 
 msgid "Fast drawing mode"
-msgstr "Hurtig tegning tilstand"
+msgstr "HurtigTegning tilstand"
 
 msgid "Please move the mouse to draw new way"
-msgstr ""
+msgstr "Flyt musen for at tegne ny vej"
 
 msgid "Are you sure you do not want to save the line containing {0} points?"
 msgstr ""
+"Er du sikker på du ikke vil gemme den linje, der indeholder {0} punkter?"
 
 msgid ""
 "{0} m - length of the line\n"
@@ -24210,6 +24710,10 @@ msgid ""
 "{2} points per km (maximum)\n"
 "{3} points per km (average)"
 msgstr ""
+"{0} m - længde af linjen\n"
+"{1} punkter\n"
+"{2} punkter per km (maksimum)\n"
+"{3} punkter per km (gennemsnit)"
 
 msgid "Line information"
 msgstr "Linje information"
@@ -24221,13 +24725,10 @@ msgid "Draw the way by mouse"
 msgstr "Tegn vej med mus"
 
 msgid "min distance={0} px ({1} m)"
-msgstr ""
-
-msgid "Convert way to FastDraw line"
-msgstr ""
+msgstr "min afstand={0} px ({1} m)"
 
 msgid "Eps={0}, {1} points, {2} p/km"
-msgstr ""
+msgstr "Eps={0}, {1} punkter, {2} p/km"
 
 msgid "Fix addresses"
 msgstr "Ret adresser"
@@ -24236,13 +24737,13 @@ msgid "Show dialog with incomplete addresses"
 msgstr "Vis dialog med ufuldstændige adresser"
 
 msgid "Include objects used for guesses"
-msgstr ""
+msgstr "Medtag objekter der bruges til gæt"
 
 msgid "Fix street addresses"
-msgstr ""
+msgstr "Ret gade adresser"
 
 msgid "Find and fix addresses without (valid) streets."
-msgstr ""
+msgstr "Find og ret adresser uden (gyldige) gader."
 
 msgid "Address Edit"
 msgstr "Adresse redigering"
@@ -24324,36 +24825,38 @@ msgid "Turns all guesses into the corresponding tag values."
 msgstr "Lav alle gæt om til de tilsvarende tag værdier."
 
 msgid "Applied guessed values"
-msgstr ""
+msgstr "Gættede værdier brugt"
 
 msgid "Applied guessed values for "
-msgstr ""
+msgstr "Gættede værdier brugt for "
 
 msgid "Assign address to street"
-msgstr ""
+msgstr "Tilknyt adresse til gade"
 
 msgid "Assign the selected address(es) to the selected street."
-msgstr ""
+msgstr "Tilknyt den valgte adresse(r) til den valgte gade."
 
 msgid "Set street name"
-msgstr ""
+msgstr "Sæt gadenavn"
 
 msgid "Convert ALL streets."
-msgstr ""
+msgstr "Konverter ALLE gader."
 
 msgid ""
 "Create relation between street and related addresses for ALL streets in the "
 "current layer."
 msgstr ""
+"Opret relation mellem gade og relaterede adresser for ALLE gader i det "
+"aktuelle lag."
 
 msgid "Convert to relation."
 msgstr "Konverter til relation."
 
 msgid "Create relation between street and related addresses."
-msgstr ""
+msgstr "Opret relation mellem gade og beslægtede adresser."
 
 msgid "Create address relation for "
-msgstr ""
+msgstr "Opret adresse relation "
 
 msgid "Guess"
 msgstr "Gæt"
@@ -24362,6 +24865,8 @@ msgid ""
 "Tries to guess address data by picking the name of the closest object with "
 "according tag."
 msgstr ""
+"Forsøger at gætte adressedata ved at vælge navnet på det nærmeste objekt med "
+"overensstemmelse ifølge tag."
 
 msgid "Guessing address values"
 msgstr "Gætter adresseværdier"
@@ -24385,21 +24890,21 @@ msgid "Use tag ''addr:street'' or ''addr:place''"
 msgstr "Brug tag ''addr:street'' eller ''addr:place''"
 
 msgid "House Number Editor"
-msgstr ""
+msgstr "Husnummereditor"
 
 msgid "House number increment:"
-msgstr ""
+msgstr "Husnummertilvækst:"
 
 msgid "Updating properties of up to {0} object"
 msgid_plural "Updating properties of up to {0} objects"
-msgstr[0] "Opdaterer op til {0} objekts egenskaber"
+msgstr[0] "Opdaterer op til {0} objekts egenskab"
 msgstr[1] "Opdaterer op til {0} objekters egenskaber"
 
 msgid "Default image projection"
-msgstr ""
+msgstr "Standard billede projektion"
 
 msgid "JOSM''s current projection"
-msgstr ""
+msgstr "JOSM''s nuværende projektion"
 
 msgid ""
 "No projection file (.prj) found.<br>You can choose the default image "
@@ -24407,39 +24912,43 @@ msgid ""
 "image projection.<br>(It can be changed later from the right click menu of "
 "the image layer.)"
 msgstr ""
+"Ingen projektion fil (.prj) fundet.<br>Du kan vælge standard billede "
+"projektion ({0}) eller JOSM''s nuværende editor projektion ({1}) som det "
+"oprindelige billede projektion.<br>(Det kan ændres senere fra højreklik-"
+"menuen i billedlag.)"
 
 msgid "Layer Properties"
-msgstr ""
+msgstr "Lagegenskaber"
 
 msgid "Error while creating image layer: {0}"
-msgstr ""
+msgstr "Fejl ved oprettelse af billedlag: {0}"
 
 msgid "Import image"
-msgstr ""
+msgstr "Importer billede"
 
 msgid "Import georeferenced image"
-msgstr ""
+msgstr "Importer billede med geografiske koordinater"
 
 msgid "Error while creating image layer: "
-msgstr ""
+msgstr "Fejl ved oprettelse af billedlag: "
 
 msgid "NanoLog"
-msgstr ""
+msgstr "NanoLog"
 
 msgid "NanoLog of {0} entries"
-msgstr ""
+msgstr "NanoLog med {0} poster"
 
 msgid "NanoLog of {0} lines, {1} of them with coordinates."
-msgstr ""
+msgstr "NanoLog med {0} linjer, {1} af dem med koordinater."
 
 msgid "Correlate with GPX..."
-msgstr ""
+msgstr "Afstemmer med GPX ..."
 
 msgid "Put on GPX..."
-msgstr ""
+msgstr "Sæt på GPX ..."
 
 msgid "Correlate entries with GPS trace"
-msgstr ""
+msgstr "Afstemmer poster med GPS spor"
 
 msgid "Save layer..."
 msgstr "Gem lag..."
@@ -24448,7 +24957,7 @@ msgid "Save NanoLog layer"
 msgstr "Gem NanoLog lag"
 
 msgid "Open NanoLog panel"
-msgstr ""
+msgstr "Åben NanoLog panel"
 
 msgid "Open NanoLog file..."
 msgstr "Åben NanoLog fil..."
@@ -24457,31 +24966,31 @@ msgid "Could not read NanoLog file:"
 msgstr "Kunne ikke læse NanoLog fil:"
 
 msgid "OSM Recommendation"
-msgstr ""
+msgstr "OSM anbefaling"
 
 msgid "Recommend categories to your newly created instances."
-msgstr ""
+msgstr "Anbefal kategorier til dine nyoprettede tilfælder."
 
 msgid "Training process configuration"
-msgstr ""
+msgstr "Konfiguration af træningsproces"
 
 msgid "Model Settings"
-msgstr ""
+msgstr "Model indstillinger"
 
 msgid "Select objects or create new objects and get recommendation."
-msgstr ""
+msgstr "Vælg objekter eller opret nye objekter og få anbefaling."
 
 msgid "Add Recommendation"
-msgstr ""
+msgstr "Tilføj anbefaling"
 
 msgid "Add a recommended key/value pair to your object"
-msgstr ""
+msgstr "Tilføj et anbefalet nøgle/værdi par til dit objekt"
 
 msgid "Train a Model"
-msgstr ""
+msgstr "Træne en model"
 
 msgid "Start the training engine!"
-msgstr ""
+msgstr "Start træningensmotoren!"
 
 msgid "Edit opening hours"
 msgstr "Rediger åbningstider"
@@ -24517,10 +25026,10 @@ msgid "Error in timeformat"
 msgstr "Fejl i tidsformat"
 
 msgid "open end"
-msgstr ""
+msgstr "åben slutning"
 
 msgid "Import Osm Inspector Bugs..."
-msgstr ""
+msgstr "Importer Osm Inspector fejl..."
 
 msgid "OsmInspector"
 msgstr "OsmInspector"
@@ -24529,13 +25038,13 @@ msgid "Open OsmInspector"
 msgstr "Åben OsmInspector"
 
 msgid "OsmBugInfo"
-msgstr ""
+msgstr "OsmFejlInfo"
 
 msgid "Open a OSM Inspector selection list window."
-msgstr ""
+msgstr "Åbn et vindue med en OSM Inspector valgliste."
 
 msgid "Current Selected Bug Info"
-msgstr ""
+msgstr "Nuværende valgt fejl info"
 
 msgid "Prev OSMI bug"
 msgstr "Forrige OSMI fejl"
@@ -24550,13 +25059,13 @@ msgid "OSM Inspector Bugs"
 msgstr "OSM Inspector fejl"
 
 msgid "Selected Bug Info"
-msgstr ""
+msgstr "Valgt fejl info"
 
 msgid "Handy Address Interpolation Functions"
-msgstr ""
+msgstr "Handy adresse interpolationsfunktioner"
 
 msgid "Define Address Interpolation"
-msgstr ""
+msgstr "Definer adresse interpolation"
 
 msgid "Odd"
 msgstr "Ulige"
@@ -24583,7 +25092,7 @@ msgid "Relation: {0}"
 msgstr "Relation: {0}"
 
 msgid "Associate with street using:"
-msgstr ""
+msgstr "Tilknyt til gade ved hjælp af:"
 
 msgid "Numbering Scheme:"
 msgstr "Nummereringssystem:"
@@ -24604,7 +25113,7 @@ msgid "Convert way to individual house numbers."
 msgstr "Omdan vej til individuelle husnumre:"
 
 msgid "Will associate {0} additional house number nodes"
-msgstr ""
+msgstr "Vil tilknytte {0} yderligere husnummer punkter"
 
 msgid "City:"
 msgstr "By:"
@@ -24625,10 +25134,10 @@ msgid "Optional Information:"
 msgstr "Valgfri information:"
 
 msgid "Please select a street to associate with address interpolation way"
-msgstr ""
+msgstr "Vælg en gade til at tilknytte med adresse interpolation vej"
 
 msgid "Please select address interpolation way for this street"
-msgstr ""
+msgstr "Vælg adresse interpolation vej for denne gade"
 
 msgid "Expected odd numbers for addresses"
 msgstr "Forventede ulige numre for adresser"
@@ -24637,7 +25146,7 @@ msgid "Expected even numbers for addresses"
 msgstr "Forventede lige numre for adresser"
 
 msgid "Expected valid number for increment"
-msgstr ""
+msgstr "Forventede gyldigt tal for tilvækst"
 
 msgid "Country code must be 2 letters"
 msgstr "Landekode skal være på 2 bogstaver"
@@ -24674,6 +25183,8 @@ msgid ""
 "Please select two segments that don''t share any nodes.\n"
 "Alternatively put the pivot on their common node.\n"
 msgstr ""
+"Vælg to segmenter der ikke deler nogen punkter.\n"
+"Alternativt sæt omdrejningspunkt på deres fælles punkt.\n"
 
 msgid ""
 "Aligning would result nodes ''outside the world''.\n"
@@ -24687,23 +25198,31 @@ msgid ""
 "two way segments.\n"
 "Preserved angles type alignment is not possible.\n"
 msgstr ""
+"Der er mindst et ikke-omdrejningspunkt endepunkt i tilpasningen der "
+"forbinder mere end to vejsegmenter.\n"
+"Bevar vinkler type tilpasning er ikke mulig.\n"
 
 msgid ""
 "The alignment is not possible with maintaining the angles of the joint "
 "segments.\n"
 "Either choose the ''keep length'' aligning method or select other segments.\n"
 msgstr ""
+"Tilpasningen er ikke mulig med bevarelse af vinklerne mellem de fælles "
+"segmenter.\n"
+"Vælg enten ''hold længde'' tilpasse metoden eller vælg andre segmenter.\n"
 
 msgid ""
 "An intersection point would fall outside its adjacent nodes.\n"
 "This is an unsupported scenario.\n"
 msgstr ""
+"Et skæringspunkt ville falde uden for dets tilstødende punkter.\n"
+"Dette scenario er ikke understøttet.\n"
 
 msgid "Undocumented problem occured.\n"
 msgstr "Udokumenteret problem opstået.\n"
 
 msgid "AlignWayS: Alignment not possible"
-msgstr ""
+msgstr "TilpasVejS: Tilpasning ikke mulig"
 
 msgid "Align way segment"
 msgstr "Tilpas vejsegment"
@@ -24712,6 +25231,8 @@ msgid ""
 "Please select two segments that don''t share any nodes\n"
 " or put the pivot on their common node.\n"
 msgstr ""
+"Vælg to segmenter der ikke deler nogen punkter\n"
+"  eller sæt omdrejningspunktet på deres fællespunkt.\n"
 
 msgid "Align Way Segments: Modes"
 msgstr "Tilpas vejsegmenter: Tilstande"
@@ -24720,7 +25241,7 @@ msgid "Align Ways control panel"
 msgstr "Tilpas veje kontrolpanel"
 
 msgid "This panel activates in Align Ways mode:"
-msgstr ""
+msgstr "Dette panel aktiverer tilpas veje tilstand:"
 
 msgid "Length preserved"
 msgstr "Længde bevaret"
@@ -24765,36 +25286,42 @@ msgid ""
 "Segment to be aligned cannot be the same with the reference segment.\n"
 "Please choose a different segment to be aligned."
 msgstr ""
+"Segmentet der skal tilpasses kan ikke være det samme som "
+"referencesegmentet.\n"
+"Vælg et andet segment der skal tilpasses."
 
 msgid "AlignWayS message"
-msgstr ""
+msgstr "TilpasVejS besked"
 
 msgid ""
 "Reference segment cannot be the same with the segment to be aligned.\n"
 "Please choose a different reference segment."
 msgstr ""
+"Referencesegmentet kan ikke være det samme som segmentet der skal "
+"tilpasses.\n"
+"Vælg et andet referencesegment."
 
 msgid "Ctrl-Click: select reference way segment; Alt-click: Clear selection"
-msgstr "Ctrl-Click: vælg reference vejsegment; Alt-click: Nulstil valg"
+msgstr "Ctrl-Klik: vælg reference vejsegment; Alt-klik: Nulstil valg"
 
 msgid ": Align segments; Alt-click: Clear selection"
-msgstr ": Tilpas segmenter; Alt-click: Nulstil valg"
+msgstr ": Tilpas segmenter; Alt-klik: Nulstil valg"
 
 msgid ""
 "Ctrl-click: select reference way segment; Click: select way segment to be "
 "aligned"
 msgstr ""
-"Ctrl-click: vælg reference vejsegment; Click: vælg vejsegment der skal "
+"Ctrl-klik: vælg reference vejsegment; Klik: vælg vejsegment der skal "
 "tilpasses"
 
 msgid "Click: select way segment to be aligned; Alt-click: Clear selection"
-msgstr "Click: vælg vejsegment der skal tilpasses; Alt-click: Nulstil valg"
+msgstr "Klik: vælg vejsegment der skal tilpasses; Alt-klik: Nulstil valg"
 
 msgid ""
 "Ctrl-Click: select reference way segment; Click: select way segment to be "
 "aligned"
 msgstr ""
-"Ctrl-Click: vælg reference vejsegment; Click: vælg vejsegment der skal "
+"Ctrl-Klik: vælg reference vejsegment; Klik: vælg vejsegment der skal "
 "tilpasses"
 
 msgid ""
@@ -24805,6 +25332,12 @@ msgid ""
 "...or it rather should be called <br>\n"
 "<span style=\"font-size: large;\">AlignWayS(egments)</span> Plugin..."
 msgstr ""
+"Velkommen til</span><br>\n"
+"<span style=\"font-size: xx-large;\">TilpasVej<span style=\"color: rgb (204, "
+"85, 0);\">S</span> udvidelse<br>\n"
+"</span><span style=\"font-size: medium;\"><br>\n"
+"...eller den bør snarere kaldes <br>\n"
+"<span style=\"font-size: large;\">TilpasVejS(egmenter)</span> udvidelse..."
 
 msgid ""
 "<html>\n"
@@ -24818,6 +25351,17 @@ msgid ""
 "</html>\n"
 "\n"
 msgstr ""
+"<html>\n"
+"<p style=\"font-family: sans-serif; font-weight: bold;\">TilpasVejS vil\n"
+"hjælpe dig med at tilpasse tovejs segmenter. Dette kan være praktisk, når "
+"for eksempel\n"
+"du skitser omridsene af en bygning og ønsker siden skal være parallel\n"
+"med en gade eller vej.<br>\n"
+"<br>\n"
+"Nogle tips kan måske hjælpe før du begynder:\n"
+"</p>\n"
+"</html>\n"
+"\n"
 
 msgid ""
 "<html>\n"
@@ -24832,6 +25376,17 @@ msgid ""
 "</html>\n"
 "\n"
 msgstr ""
+"<html>\n"
+"<div style=\"font-family: sans-serif;\">\n"
+"<ul>\n"
+"<li><b>Vælg et reference segment.</b> Du kan gøre dette ved <b><i><span "
+"style=\"color:green\">Ctrl-klik</span></i></b> på et segment. Den anden, der "
+"skal være tilpas segment bliver parallelt til\n"
+"denne. </li>\n"
+"</ul>\n"
+"</div>\n"
+"</html>\n"
+"\n"
 
 msgid ""
 "<html>\n"
@@ -24848,6 +25403,19 @@ msgid ""
 "</html>\n"
 "\n"
 msgstr ""
+"<html>\n"
+"<div style=\"font-family:sans-serif\">\n"
+"<ul>\n"
+"  <li><b>Vælg det der skal være tilpas segment.</b> Du kan gøre dette ved "
+"blot at <b><i><span style=\"color:green\">klik</span></i></b> på et andet "
+"segment.\n"
+"Omdrejningspunktet vil blive fremhævet som standard i midten af "
+"​​segmentet.\n"
+"  </li>\n"
+"</ul>\n"
+"</div>\n"
+"</html>\n"
+"\n"
 
 msgid ""
 "<html>\n"
@@ -24864,6 +25432,18 @@ msgid ""
 "</html>\n"
 "\n"
 msgstr ""
+"<html>\n"
+"<div style=\"font-family: sans-serif\">\n"
+"<ul>\n"
+"  <li>Valgfri <b>ændring af omdrejningspunkt</b>. For at blive parallelt med "
+"reference, vil tilpas segment rotere omkring dette punkt. Du kan vælge de to "
+"ender eller midten af ​​segmentet ved at <b><i><span "
+"style=\"color:green\">klik</span></i></b> i nærheden.\n"
+"  </li>\n"
+"</ul>\n"
+"</div>\n"
+"</html>\n"
+"\n"
 
 msgid ""
 "<html>\n"
@@ -24879,6 +25459,18 @@ msgid ""
 "</html>\n"
 "\n"
 msgstr ""
+"<html>\n"
+"<div style=\"font-family: sans-serif\">\n"
+"<ul>\n"
+"  <li><b>Tilpas segmenterne.</b> Tryk på <b><i><Span "
+"style=\"color:green\">{0}</span></i></b>. Alternativt kan du finde "
+"kommandoen i menuen <b>Værktøjer</b>\n"
+" eller måske ønske at placere handlingen på <b>værktøjslinjen</b>.\n"
+"  </li>\n"
+"</ul>\n"
+"</div>\n"
+"</html>\n"
+"\n"
 
 msgid ""
 "<html>\n"
@@ -24890,6 +25482,14 @@ msgid ""
 "</html>\n"
 "\n"
 msgstr ""
+"<html>\n"
+"<div style=\"font-family: sans-serif\">\n"
+"<b>Sidste tip:</b> Der er en nem måde at starte forfra med dine valg hvis du "
+"ønsker: <b><i><span style=\"color:green\">Alt-klik</span></i></b> et eller "
+"andet sted på kortet.\n"
+"</div>\n"
+"</html>\n"
+"\n"
 
 msgid "Don''t show this again"
 msgstr "Vis ikke dette igen"
@@ -24898,7 +25498,7 @@ msgid "What''s new..."
 msgstr "Hvad er nyt..."
 
 msgid "Added <b>angle preserving</b> aligning mode"
-msgstr ""
+msgstr "Tilføjet <b>bevar vinkel</b> tilpasningstilstand"
 
 msgid "Various improvements and bugfixes"
 msgstr "Diverse forbedringer og fejlrettelser"
@@ -24964,7 +25564,7 @@ msgid "Created area"
 msgstr "Oprettet område"
 
 msgid "Unable to detect a polygon where you clicked."
-msgstr ""
+msgstr "Kan ikke finde en polygon hvor du klikkede."
 
 msgid "Error Report"
 msgstr "Fejlrapport"
@@ -24982,48 +25582,69 @@ msgstr ""
 "Lad os vide hvad du gjorde og hvad der skete tilføj den følgende tekst til "
 "fejlrapporten, så vi kan finde kilden til problemet."
 
-msgid "Area detection algorithm settings."
-msgstr ""
+msgid "Area Selector - Preferences"
+msgstr "Område vælger - indstillinger"
 
-msgid "Algorithm Settings"
-msgstr ""
+msgid "Settings for the area detection algorithm."
+msgstr "Indstillinger for algoritmen til detektion af område."
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
-msgstr ""
+msgid "Boofcv - high resolution images"
+msgstr "Boofcv - billeder i høj opløsning"
 
-msgid "Color Threshold"
-msgstr ""
+msgid "Custom - low resolution images"
+msgstr "Brugerdefineret - billeder i lav opløsning"
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
+"Vælg hvilken algoritme der skal anvendes. \"Auto\" forsøger at finde et "
+"område med Boofcv og bruger den brugerdefinerede algoritmen til at falde "
+"tilbage på."
 
-msgid "Tolerance Distance"
-msgstr ""
+msgid "Algorithm"
+msgstr "Algoritme"
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
+"Maksimum pixel et punkt kan være væk fra en linje og stadig betragtes som "
+"medlem af denne linje (Standard: {0})."
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
+msgstr "Afstand tolerance"
+
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
+"Linjer med en mindre vinkel (grader) end dette vil blive kombineret til en "
+"linje (Standard {0})."
 
-msgid "Plugin Settings"
-msgstr "Udvidelsesindstillinger"
+msgid "Angle Tolerance"
+msgstr "Vinkel tolerance"
 
-msgid "Show Address Dialog after mapping an area"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
+"Farvegrænseværdien definerer hvor meget en farve kan afvige fra den valgte "
+"farve. De røde, grønne og blå værdier skal være i intervallet (valgt - "
+"grænseværdi) til (valgt + grænseværdi). (Standard: {0})."
 
-msgid "show address dialog"
-msgstr ""
+msgid "Color Threshold"
+msgstr "Farvegrænseværdi"
 
-msgid "Merge nodes with neighbors"
-msgstr ""
+msgid "Use HSV based algorithm"
+msgstr "Brug HSV baseret algoritme"
 
-msgid "merge nodes"
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
+"Brug nuance og mætning i stedet for RGB skelnen til at vælge matchende "
+"farver."
 
 msgid "How often thinning operation should be applied (Default {0})."
 msgstr "Hvor ofte udtyndingshandling bør anvendes (Standard {0})."
@@ -25031,11 +25652,23 @@ msgstr "Hvor ofte udtyndingshandling bør anvendes (Standard {0})."
 msgid "Thinning Iterations"
 msgstr "Udtyndingsgennemløb"
 
-msgid "Use hue and saturation instead of RGB distinction"
-msgstr ""
+msgid "show address dialog"
+msgstr "Vis adressedialog"
 
-msgid "use HSV based algorithm"
-msgstr ""
+msgid "Show Address Dialog after mapping an area"
+msgstr "Vis adressedialog efter kortlægning af et område"
+
+msgid "merge nodes"
+msgstr "Læg punkter sammen"
+
+msgid "Merge nodes with existing nodes"
+msgstr "Læg punkter sammen med eksisterende punkter"
+
+msgid "Debug"
+msgstr "Fejlfind"
+
+msgid "Debugging mode will write images for each processing step."
+msgstr "Fejlfindingstilstand vil skrive billeder for hver behandlingstrin."
 
 msgid "Street Name:"
 msgstr "Vejnavn:"
@@ -25092,32 +25725,32 @@ msgid "Set width of the building"
 msgstr "Indstil bredde for bygningen"
 
 msgid "Merge address points"
-msgstr ""
+msgstr "Læg adressepunkter sammen"
 
 msgid "Move tags from address nodes inside buildings to building ways"
-msgstr ""
+msgstr "Flyt tags fra adresse punkter inde i bygninger til bygningsveje"
 
 msgid "Select both address nodes and building ways to merge"
-msgstr ""
+msgstr "Vælg både adresse punkter og bygningsveje der skal lægges sammen"
 
 msgid "No address nodes found in the selection"
-msgstr ""
+msgstr "Ingen adresse punkter fundet i markeringen"
 
 msgid "No building ways found in the selection"
-msgstr ""
+msgstr "Ingen bygningsveje fundet i markeringen"
 
 msgid "There is {0} building with multiple address nodes inside"
 msgid_plural "There are {0} buildings with multiple address nodes inside"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Der er {0} bygning med flere adressepunkter inden i"
+msgstr[1] "Der er {0} bygninger med flere adressepunkter inden i"
 
 msgid "There is {0} building with address conflicts"
 msgid_plural "There are {0} buildings with address conflicts"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Der er {0} bygning med adressekonflikter"
+msgstr[1] "Der er {0} bygninger med adressekonflikter"
 
 msgid "No address nodes inside buildings found"
-msgstr ""
+msgstr "Ingen adressepunkter fundet inden i bygninger"
 
 msgid "on polygon"
 msgstr "på polygon"
@@ -25126,22 +25759,25 @@ msgid "Add address"
 msgstr "Tilføj adresse"
 
 msgid "Helping tool for tag address"
-msgstr ""
+msgstr "Hjælpeværktøj til adresse tags"
 
 msgid "CadastreFR - Buildings"
-msgstr ""
+msgstr "MatrikelFR - Bygninger"
 
 msgid "Next no"
-msgstr ""
+msgstr "Næste nummer"
 
 msgid "Enter addresses"
-msgstr ""
+msgstr "Indtast adresser"
 
 msgid ""
 "Location \"{0}\" found in cache.\n"
 "Load cache first ?\n"
 "(No = new cache)"
 msgstr ""
+"Lokation \"{0}\" fundet i cache.\n"
+"Load cache først?\n"
+"(Nej = ny cache)"
 
 msgid "Select Feuille"
 msgstr "Vælg Feuille"
@@ -25150,42 +25786,46 @@ msgid ""
 "Error loading file.\n"
 "Probably an old version of the cache file."
 msgstr ""
-"fejl ved indlæsning af mellemlagerfil.\n"
-"Sandsynligvis en ældre version af mellemlagerfil."
+"Fejl ved indlæsning af fil.\n"
+"Sandsynligvis en gammel version af cache filen."
 
 msgid "Lambert Zone {0} cache file (.{0})"
-msgstr "Lambert Zone {0} mellemlagerfil (.{0})"
+msgstr "Lambert Zone {0} cache fil (.{0})"
 
 msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
-msgstr "Lambert CC9 Zone {0} mellemlagerfil (.CC{0})"
+msgstr "Lambert CC9 Zone {0} cache fil (.CC{0})"
 
 msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
-msgstr "Guadeloupe Fort-Marigot mellemlagerfil (.UTM1)"
+msgstr "Guadeloupe Fort-Marigot cache fil (.UTM1)"
 
 msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
-msgstr "Guadeloupe Ste-Anne mellemlagerfil (.UTM2)"
+msgstr "Guadeloupe Ste-Anne cache fil (.UTM2)"
 
 msgid "Martinique Fort Desaix cache file (.UTM3)"
-msgstr "Martinique Fort Desaix mellemlagerfil (.UTM3)"
+msgstr "Martinique Fort Desaix cache fil (.UTM3)"
 
 msgid "Reunion RGR92 cache file (.UTM4)"
-msgstr ""
+msgstr "Reunion RGR92 cache fil (.UTM4)"
 
 msgid "CadastreGrabber: Illegal url."
-msgstr "CadastreGrabber: Ugyldig URL."
+msgstr "MatrikelBilledtagning: ugyldig URL."
 
 msgid ""
 "Cannot open a new client session.\n"
 "Server in maintenance or temporary overloaded."
 msgstr ""
+"Kan ikke åbne en ny klient session.\n"
+"Vedligeholdelse af server eller midlertidig overbelastet."
 
 msgid ""
 "Town/city {0} not found or not available\n"
 "or action canceled"
 msgstr ""
+"By {0} ikke fundet eller ikke tilgængelig\n"
+"eller handling annulleret"
 
 msgid "Choose from..."
-msgstr "Vælg fra..."
+msgstr "Vælg mellem..."
 
 msgid "Select commune"
 msgstr "Vælg kommune"
@@ -25199,31 +25839,42 @@ msgid ""
 "The new grabbing key is F10, but you can change the key\n"
 "in the shortcut settings if you want."
 msgstr ""
+"Udvidelsen matrikel-fr brugte genvejen F11 til billedtagning,\n"
+"den bilver nu brugt til fuldsskærms skift.\n"
+"Den nye billedtagnings tast er F10, men du kan ændre tasten\n"
+"i genvejsindstillinger, hvis du ønsker."
 
 msgid ""
 "Please enable at least two WMS layers in the cadastre-fr plugin "
 "configuration.\n"
 "Layers ''Building'' and ''Parcel'' added by default."
 msgstr ""
+"Aktiver mindst to WMS lag i matriklen-fr udvidelsens konfiguration.\n"
+"Lagene ''Bygning'' og ''Grund'' er tilføjet som standard."
 
 msgid ""
 "Warning: failed to put option pane dialog always on top. Exception was: {0}"
 msgstr ""
+"Advarsel: kunne ikke sætte dialogfanevalg til altid øverst. Hændelsen var: "
+"{0}"
 
 msgid ""
 "To enable the cadastre WMS plugin, change\n"
 "the current projection to one of the cadastre\n"
 "projections and retry"
 msgstr ""
+"For at aktivere matrikel WMS udvidelse, ændre\n"
+"den aktuelle projektion til en af matrikel\n"
+"projektionerne og prøv igen"
 
 msgid "Change the current projection"
-msgstr ""
+msgstr "Ændre den aktuelle projektion"
 
 msgid "Replace original background by JOSM background color."
 msgstr "Erstat den originale baggrund med JOSM’s baggrundsfarver."
 
 msgid "Reverse grey colors (for black backgrounds)."
-msgstr "Omvendte grå farver (for sorte baggrunde)"
+msgstr "Vend grå farver (for sorte baggrunde)"
 
 msgid "Set background transparent."
 msgstr "Gør baggrund gennemsigtig"
@@ -25232,19 +25883,19 @@ msgid "Draw boundaries of downloaded data."
 msgstr "Tegn afgrænsninger for downloadede data."
 
 msgid "Disable image cropping during georeferencing."
-msgstr "Slå billedbeskæring fra under geo-referencering."
+msgstr "Slå billedbeskæring fra under tilføjelse af geografiske koordinater."
 
 msgid "Use \"Tableau d''assemblage\""
-msgstr ""
+msgstr "Brug \"Tableau d''assemblage\""
 
 msgid "Replace grey shades by white color only"
-msgstr ""
+msgstr "Udskift grå nuancer med kun hvid farve"
 
 msgid "Select first WMS layer in list."
-msgstr ""
+msgstr "Vælg første WMS lag i liste."
 
 msgid "Don''t use relation for addresses (but \"addr:street\" on elements)."
-msgstr ""
+msgstr "Brug ikke relation til adresser (men \"addr:street\" på elementer)."
 
 msgid "off"
 msgstr "fra"
@@ -25262,10 +25913,10 @@ msgid "symbol"
 msgstr "symbol"
 
 msgid "parcel"
-msgstr ""
+msgstr "grund"
 
 msgid "parcel number"
-msgstr ""
+msgstr "grundnummer"
 
 msgid "address"
 msgstr "adresse"
@@ -25277,7 +25928,7 @@ msgid "section"
 msgstr "sektion"
 
 msgid "commune"
-msgstr ""
+msgstr "kommune"
 
 msgid "Enable automatic caching."
 msgstr "Slå automatisk caching til."
@@ -25286,7 +25937,7 @@ msgid "Max. cache size (in MB)"
 msgstr "Maks. cachestørrelse (i MB)"
 
 msgid "French cadastre WMS"
-msgstr "Fransk Cadastre-WMS"
+msgstr "Fransk matrikel WMS"
 
 msgid ""
 "A special handler of the French cadastre wms at "
@@ -25297,14 +25948,24 @@ msgid ""
 "http://www.cadastre.gouv.fr/scpc/html/CU_01_ConditionsGenerales_fr.html</a> "
 "<BR>before any upload of data created by this plugin."
 msgstr ""
+"En særlig håndtering af den franske matrikel wms på "
+"www.cadastre.gouv.fr<BR><BR>Læs vilkår og betingelser for brug her (på "
+"fransk): <br><a "
+"href=\"http://www.cadastre.gouv.fr/scpc/html/CU_01_ConditionsGenerales_fr.htm"
+"l\"> "
+"http://www.cadastre.gouv.fr/scpc/html/CU_01_ConditionsGenerales_fr.html</a> "
+"<BR>før nogen upload af data oprettet af denne udvidelse."
 
 msgid "<html>Value of key \"source\" when autosourcing is enabled</html>"
 msgstr ""
+"<html>Værdi af nøglen \"source\", når automatisk kilde er aktiveret</html>"
 
 msgid ""
 "Replace the original white background by the background color defined in "
 "JOSM preferences."
 msgstr ""
+"Udskift den oprindelige hvide baggrund med baggrundsfarve defineret i JOSM "
+"indstillinger."
 
 msgid ""
 "Invert the original black and white colors (and all intermediate greys). "
@@ -25314,16 +25975,18 @@ msgstr ""
 "Nyttigt for tekster på sorte baggrunde."
 
 msgid "Allows multiple layers stacking"
-msgstr ""
+msgstr "Tillader flere lags stabling"
 
 msgid "Set WMS layers transparency. Right is opaque, left is transparent."
 msgstr ""
+"Set WMS lag gennemsigtighed. Højre er uigennemsigtig, venstre er "
+"gennemsigtig."
 
 msgid "Draw a rectangle around downloaded data from WMS server."
 msgstr "Tegn et rektangel omkring downloadet data fra WMS-server."
 
 msgid "Image resolution:"
-msgstr ""
+msgstr "Billedopløsning:"
 
 msgid "High resolution (1000x800)"
 msgstr "Høj opløsning (1000x800)"
@@ -25335,25 +25998,25 @@ msgid "Low resolution (600x400)"
 msgstr "Lav opløsning (600x400)"
 
 msgid "Image filter interpolation:"
-msgstr ""
+msgstr "Billede filter interpolation:"
 
 msgid "Nearest-Neighbor (fastest) [ Default ]"
-msgstr ""
+msgstr "Nærmeste-Nabo (hurtigste) [Standard]"
 
 msgid "Bilinear (fast)"
-msgstr ""
+msgstr "Bilineær (hurtig)"
 
 msgid "Bicubic (slow)"
-msgstr ""
+msgstr "Bikubisk (langsom)"
 
 msgid "Vector images grab multiplier:"
-msgstr ""
+msgstr "Vektorbilledtagnings multiplikator:"
 
 msgid "Grab one image full screen"
-msgstr ""
+msgstr "Tag et billede af fuldskærm"
 
 msgid "Grab smaller images (higher quality but use more memory)"
-msgstr "Hent mindre billeder (højere kvalitet men kræver mere hukommelse)"
+msgstr "Tag mindre billeder (højere kvalitet men kræver mere hukommelse)"
 
 msgid "Fixed size square (default is 100m)"
 msgstr "Fast kvadrat-størrelse (standard er 100m)"
@@ -25365,47 +26028,50 @@ msgid "Layers:"
 msgstr "Lag:"
 
 msgid "Sea, rivers, swimming pools."
-msgstr ""
+msgstr "Hav, floder, svømmebassiner."
 
 msgid "Buildings, covers, underground constructions."
-msgstr ""
+msgstr "Bygninger, overdækket, underjordiske konstruktioner."
 
 msgid "Symbols like cristian cross."
-msgstr ""
+msgstr "Symboler som kristen kors."
 
 msgid "Parcels."
-msgstr ""
+msgstr "Grunde."
 
 msgid "Parcels numbers, street names."
-msgstr ""
+msgstr "Grundnumre, gadenavne."
 
 msgid "Address, houses numbers."
-msgstr ""
+msgstr "Adresse, husnumre."
 
 msgid "Locality, hamlet, place."
-msgstr ""
+msgstr "Lokalitet, landsby, sted."
 
 msgid "Cadastral sections and subsections."
-msgstr ""
+msgstr "Matrikulære afsnit og underafsnit."
 
 msgid "Municipality administrative borders."
-msgstr ""
+msgstr "Kommune administrative grænser."
 
 msgid "Raster images grab multiplier:"
-msgstr ""
+msgstr "Rasterbilledtagnings multiplikator:"
 
 msgid ""
 "Add the \"Tableau(x) d''assemblage\" in the list of cadastre sheets to grab."
 msgstr ""
+"Tilføj \"Tableau (x) d''assemblage\" til listen over matrikelark der skal "
+"tages billede af."
 
 msgid "Replace greyscale by white color (smaller files and memory usage)."
 msgstr ""
+"Udskift gråtoner med hvid farve (mindre filer og hukommelsesforbrug)."
 
 msgid "Display crosspieces:"
-msgstr ""
+msgstr "Vis trådkors:"
 
 msgid "Allows an automatic caching"
-msgstr ""
+msgstr "Tillader en automatisk caching"
 
 msgid "Oldest files are automatically deleted when this size is exceeded"
 msgstr ""
@@ -25415,12 +26081,14 @@ msgid ""
 "Automatically selects the first WMS layer if multiple layers exist when "
 "grabbing."
 msgstr ""
+"Vælger automatisk det første WMS lag, hvis flere lag eksistere under "
+"billedtagning."
 
 msgid "Enable this to use the tag \"add:street\" on nodes."
-msgstr ""
+msgstr "Aktiver dette for at bruge tagget \"add:street\" på punkter."
 
 msgid "Unexpected file extension. {0}"
-msgstr ""
+msgstr "Uventet filtype. {0}"
 
 msgid "Add \"source=...\" to elements?"
 msgstr "Tilføj \"source=...\" til elementer?"
@@ -25442,19 +26110,19 @@ msgstr ""
 "er størrelsen af bygningsimport begrænset til max. 1 km²."
 
 msgid "Please, enable auto-sourcing and check cadastre millesime."
-msgstr ""
+msgstr "Aktiver automatisk kilde og tjek matrikel dato."
 
 msgid "Extract SVG ViewBox..."
-msgstr ""
+msgstr "Udtræk SVG visningsboks..."
 
 msgid "Extract best fitting boundary..."
-msgstr ""
+msgstr "Udtræk bedst tilpasset grænse..."
 
 msgid "Create boundary"
 msgstr "Opret grænse"
 
 msgid "Contacting cadastre WMS ..."
-msgstr ""
+msgstr "Kontakter matrikel WMS ..."
 
 msgid "Image already loaded"
 msgstr "Billede allerede indlæst"
@@ -25463,11 +26131,16 @@ msgid ""
 "Municipality vectorized !\n"
 "Use the normal Cadastre Grab menu."
 msgstr ""
+"Kommune vektoriseret !\n"
+"Brug den normale matrikel billedtagnings menu."
 
 msgid ""
 "This commune is not vectorized.\n"
 "Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
+"Denne kommune er ikke vektoriseret.\n"
+"Brug det andet menupunkt til at tilføje geografiske koordinater til et "
+"\"Grundbillede\""
 
 msgid "Extract commune boundary"
 msgstr "Udtræk kommunegrænser"
@@ -25476,41 +26149,41 @@ msgid "Only on vectorized layers"
 msgstr "Kun ved vektoriserede lag"
 
 msgid "Cancel current grab"
-msgstr ""
+msgstr "Afbryd aktuel billedtagning"
 
 msgid "Cancel current grab (only vector images)"
-msgstr ""
+msgstr "Afbryd aktuel billedtagning(kun vektorbilleder)"
 
 msgid "Cadastre grab"
-msgstr ""
+msgstr "Matrikel billedtagning"
 
 msgid "Download Image from French Cadastre WMS"
-msgstr "Download billeder fra Fransk Cadastre WMS"
+msgstr "Download billede fra fransk matrikel WMS"
 
 msgid "Cadastre: {0}"
-msgstr "Cadastre: {0}"
+msgstr "Matrikel: {0}"
 
 msgid "Georeference an image"
-msgstr ""
+msgstr "Tilføj geografiske koordinater til et billede"
 
 msgid "Grab non-georeferenced image"
-msgstr "Snup ikke-georeferenceret billede"
+msgstr "Tag billede uden geografiske koordinater."
 
 msgid "Georeferencing interrupted"
-msgstr ""
+msgstr "Tilføjelse af geografiske koordinater afbrudt"
 
 msgid ""
 "This image contains georeference data.\n"
 "Do you want to use them ?"
 msgstr ""
-"Dette billede indeholder georeference-data\n"
+"Dette billede indeholder geografiske koordinat data\n"
 "Ønsker du at bruge dem?"
 
 msgid "Load layer from cache"
-msgstr ""
+msgstr "Indlæs fra cache"
 
 msgid "Load location from cache (only if cache is enabled)"
-msgstr "Indlæs lokalitet fra cache (kun hvis cachen er slået til)"
+msgstr "Indlæs placering fra cache (kun hvis cache er slået til)"
 
 msgid "{0} not allowed with the current projection"
 msgstr "{0} ikke tilladt med den nuværende projektion"
@@ -25518,15 +26191,16 @@ msgstr "{0} ikke tilladt med den nuværende projektion"
 msgid ""
 "Cannot load cache {0} which is not compatible with current projection zone"
 msgstr ""
-"Kan ikke indlæse mellemlager {0}, som ikke er kompatibel med nuværende "
+"Kan ikke indlæse cache {0}, som ikke er kompatibel med nuværende "
 "projektionszone"
 
 msgid ""
 "Selected file {0} is not a cache file from this plugin (invalid extension)"
 msgstr ""
+"Valgte fil {0} er ikke en cache fil fra denne udvidelse (ugyldig type)"
 
 msgid "The location {0} is already on screen. Cache not loaded."
-msgstr ""
+msgstr "Placeringen {0} er allerede på skærmen. Cache ikke indlæst."
 
 msgid "(optional)"
 msgstr "(valgfri)"
@@ -25535,42 +26209,44 @@ msgid "Change location"
 msgstr "Skift lokalitet"
 
 msgid "Set a new location for the next request"
-msgstr ""
+msgstr "Sæt en ny placering til den næste forespørgsel"
 
 msgid "Add a new municipality layer"
-msgstr ""
+msgstr "Tilføj et nyt kommunelag"
 
 msgid "Commune"
-msgstr ""
+msgstr "Kommune"
 
 msgid ""
 "<html>Enter the town,village or city name.<br>Use the syntax and punctuation "
 "known by www.cadastre.gouv.fr .</html>"
 msgstr ""
+"<html>Indtast by, landsby eller bynavn.<br>Brug syntaks og tegnsætning kendt "
+"fra www.cadastre.gouv.fr .</html>"
 
 msgid "Departement"
 msgstr "Afdeling"
 
 msgid "<html>Departement number (optional)</html>"
-msgstr ""
+msgstr "<html>Afdelingsnummer (valgfrit)</html>"
 
 msgid "Add new layer"
 msgstr "Tilføj nyt lag"
 
 msgid "Open Cadastre Preferences"
-msgstr ""
+msgstr "Åbn indstillinger for matrikel"
 
 msgid "Refine georeferencing"
-msgstr ""
+msgstr "Finjustere geografiske koordinater"
 
 msgid "Improve georeferencing (only raster images)"
-msgstr ""
+msgstr "Forbedre geografiske koordinater (kun rasterbilleder)"
 
 msgid "Reset cookie"
 msgstr "Nulstil cookie"
 
 msgid "Get a new cookie (session timeout)"
-msgstr ""
+msgstr "Få en ny cookie (session udløbet)"
 
 msgid "Save image as..."
 msgstr "Gem billede som..."
@@ -25582,7 +26258,7 @@ msgid "GeoTiff files (*.tif)"
 msgstr "GeoTiff filer (*.tif)"
 
 msgid "Export image (only raster images)"
-msgstr ""
+msgstr "Exporter billede (kun rasterbilleder)"
 
 msgid ""
 "Click first corner for image cropping\n"
@@ -25598,25 +26274,31 @@ msgid ""
 "Click first Lambert crosspiece for georeferencing\n"
 "(two points required)"
 msgstr ""
+"Klik første Lambert trådkors for tilføjelse af geografiske koordinater\n"
+"(to punkter krævet)"
 
 msgid "Image georeferencing"
-msgstr ""
+msgstr "Tilføj geografiske koordinater til billede"
 
 msgid ""
 "Do you want to cancel completely\n"
 "or just retry "
 msgstr ""
+"Ønsker du at afbryde helt\n"
+"eller bare prøve igen "
 
 msgid ""
 "Ooops. I failed to catch all coordinates\n"
 "correctly. Retry please."
 msgstr ""
+"Ups. Kunne ikke fange alle koordinater\n"
+"rigtig. Prøv igen."
 
 msgid "Enter cadastre east,north position"
-msgstr ""
+msgstr "Indtast matrikels øst, nord position"
 
 msgid "(Warning: verify north with arrow !!)"
-msgstr ""
+msgstr "(Advarsel: kontrollere nordpå med pil !!)"
 
 msgid "East"
 msgstr "Øst"
@@ -25625,65 +26307,73 @@ msgid "I use the mouse"
 msgstr "Jeg bruger musen"
 
 msgid "Set {0} Lambert coordinates"
-msgstr ""
+msgstr "Sæt {0} Lambert koordinater"
 
 msgid "Click second corner for image cropping"
 msgstr "Klik andet hjørne til billedbeskæring"
 
 msgid "Click second Lambert crosspiece for georeferencing"
 msgstr ""
+"Klik andet Lambert trådkors for tilføjelse af geografiske koordinater"
 
 msgid "Adjust WMS"
 msgstr "Tilpas WMS"
 
 msgid "Adjust the position of the WMS layer (saved for raster images only)"
-msgstr ""
+msgstr "Justere placeringen af WMS lag (kun gemt for rasterbilleder)"
 
 msgid ""
 "More than one WMS layer present\n"
 "Select one of them first, then retry"
 msgstr ""
+"Mere end et WMS lag til stede\n"
+"Vælg et af dem først, prøv derefter igen"
 
 msgid "Reset offset"
-msgstr ""
+msgstr "Nulstil forskydning"
 
 msgid "Reset offset (only vector images)"
-msgstr ""
+msgstr "Nulstil forskydning (kun vektor billeder)"
+
+msgid "Blank Layer"
+msgstr "Tomt lag"
 
 msgid "WMS layer ({0}), {1} tile(s) loaded"
-msgstr ""
+msgstr "WMS lag ({0}), {1} tern loaded"
 
 msgid "Is not vectorized."
 msgstr "Er ikke vektoriseret"
 
 msgid "Bounding box: {0}"
-msgstr ""
+msgstr "Afgrænsningsområde: {0}"
 
 msgid "Image size (px): {0}/{1}"
-msgstr ""
+msgstr "Billedstørrelse (px): {0}/{1}"
 
 msgid "Is vectorized."
 msgstr "Er vektoriseret"
 
 msgid "Commune bbox: {0}"
-msgstr ""
+msgstr "Kommune bbox: {0}"
 
 msgid ""
 "Unsupported cache file version; found {0}, expected {1}\n"
 "Create a new one."
 msgstr ""
+"Ikke understøttet cache filversion; fundet {0}, forventet {1}\n"
+"Opret en ny."
 
 msgid "Cache Format Error"
-msgstr "Mellemlager format fejl"
+msgstr "Cache format fejl"
 
 msgid "Lambert zone {0} in cache incompatible with current Lambert zone {1}"
-msgstr ""
+msgstr "Lambert zone {0} i cache uforenelig med gældende Lambert zone {1}"
 
 msgid "Cache Lambert Zone Error"
-msgstr "Mellemlager Lambert Zone fejl"
+msgstr "Cache Lambert Zone fejl"
 
 msgid "canvec tile helper"
-msgstr ""
+msgstr "canvec tern hjælper"
 
 msgid "Use"
 msgstr "Brug"
@@ -25802,13 +26492,13 @@ msgid "Generate matches"
 msgstr ""
 
 msgid "Subject"
-msgstr ""
+msgstr "Emne"
 
 msgid "Selections must be made for both reference and subject."
 msgstr ""
 
 msgid "Incomplete selections"
-msgstr ""
+msgstr "Ufuldstændige markeringer"
 
 msgid "Restore subject selection"
 msgstr ""
@@ -25820,22 +26510,22 @@ msgid "Freeze subject selection"
 msgstr ""
 
 msgid "No valid OSM data layer present."
-msgstr ""
+msgstr "Intet gyldigt OSM datalag til stede."
 
 msgid "Error freezing selection"
 msgstr ""
 
 msgid "Nothing is selected, please try again."
-msgstr ""
+msgstr "Intet er valgt, prøv igen."
 
 msgid "Empty selection"
-msgstr ""
+msgstr "Tom markering"
 
 msgid "Invalid reference or subject"
-msgstr ""
+msgstr "Ugyldig reference eller emne"
 
 msgid "Address"
-msgstr ""
+msgstr "Adresse"
 
 msgid "Split area"
 msgstr "Opdel område"
@@ -25871,22 +26561,22 @@ msgid "TCX Files (*.tcx)"
 msgstr "TCX Filer (*.tcx)"
 
 msgid "Download along..."
-msgstr "Download omkring..."
+msgstr "Download langs..."
 
 msgid "Download OSM data along the selected ways."
-msgstr "Download OSM data omkring de markerede veje."
+msgstr "Download OSM data langs de markerede veje."
 
 msgid "Download Along"
-msgstr "Download ommkring"
+msgstr "Download langs"
 
 msgid "Please select 1 or more ways to download along"
-msgstr "Vælg venligst 1 eller flere veje der skal downloades omkring"
+msgstr "Vælg venligst 1 eller flere veje der skal downloades langs"
 
 msgid "Download from OSM along selected ways"
 msgstr "Download fra OSM langs valgte veje"
 
 msgid "{0} intermediate nodes to download."
-msgstr ""
+msgstr "{0} mellemliggende punkter til download."
 
 msgid "between {0} {1} and {2} {3}"
 msgstr "mellem {0} {1} og {2} {3}"
@@ -25907,7 +26597,7 @@ msgid "edit gpx tracks"
 msgstr "Ret gpx-spor"
 
 msgid "Import path from GPX layer"
-msgstr "Importér rute fra GPX-lag"
+msgstr "Importer rute fra GPX-lag"
 
 msgid "Drop existing path"
 msgstr "Slet eksisterende rute"
@@ -25926,63 +26616,66 @@ msgid ""
 "\n"
 "stderr contents:"
 msgstr ""
+"Barne script har returneret ugyldige data.\n"
+"\n"
+"stderr indhold:"
 
 msgid "exttool:{0}"
-msgstr ""
+msgstr "extværktøj:{0}"
 
 msgid "External Tool: {0}"
-msgstr ""
+msgstr "Eksternt værktøj: {0}"
 
 msgid "Edit tool"
-msgstr ""
+msgstr "Rediger værktøj"
 
 msgid "CmdLine:"
-msgstr ""
+msgstr "CmdLine:"
 
 msgid "External tools"
 msgstr "Eksterne værktøjer"
 
 msgid "Delete tool \"{0}\"?"
-msgstr ""
+msgstr "Slet værktøj \"{0}\"?"
 
 msgid "Are you sure?"
 msgstr "Er du sikker?"
 
 msgid "New tool..."
-msgstr "Nyt værktøj"
+msgstr "Nyt værktøj..."
 
 msgid "Install"
-msgstr "Installér"
+msgstr "Installer"
 
 msgid "Public"
 msgstr "Offentlig"
 
 msgid "Could not get server response, check logs"
-msgstr ""
+msgstr "Kunne ikke få respons fra server. Tjek logs"
 
 msgid "Failed to login as {0}:"
-msgstr ""
+msgstr "Kunne ikke logge ind som {0}:"
 
 msgid "The server did not return user ID"
-msgstr ""
+msgstr "Serveren returnerede ikke bruger ID"
 
 msgid "Failed to get messages as {0}:"
-msgstr ""
+msgstr "Kunne ikke få beskeder som {0}:"
 
 msgid "GeoChat"
-msgstr ""
+msgstr "GeoChat"
 
 msgid "Open GeoChat panel"
-msgstr ""
+msgstr "Åben GeoChat panel"
 
 msgid "Zoom in to see messages"
-msgstr ""
+msgstr "Zoom ind for at se beskeder"
 
 msgid "Login"
 msgstr "Log ind"
 
 msgid "Enable autologin"
-msgstr ""
+msgstr "Slå autologin til"
 
 msgid "{0} user"
 msgid_plural "{0} users"
@@ -25990,25 +26683,25 @@ msgstr[0] "{0} bruger"
 msgstr[1] "{0} brugere"
 
 msgid "not logged in"
-msgstr ""
+msgstr "Ikke logget ind"
 
 msgid "Failed to log in to GeoChat:"
-msgstr ""
+msgstr "Kunne ikke logge ind i GeoChat:"
 
 msgid "Failed to send message:"
-msgstr ""
+msgstr "Kunne ikke sende besked:"
 
 msgid "User {0} has left"
-msgstr ""
+msgstr "Bruger {0} er her ikke længere"
 
 msgid "User {0} is mapping nearby"
-msgstr ""
+msgstr "Bruger {0} arbejder i nærheden"
 
 msgid "Users mapping nearby:"
-msgstr ""
+msgstr "Brugere der arbejder i nærheden:"
 
 msgid "Private chat"
-msgstr ""
+msgstr "Privat samtale"
 
 msgid "Close tab"
 msgstr "Luk fane"
@@ -26017,10 +26710,10 @@ msgid "Logout"
 msgstr "Log ud"
 
 msgid "Clear log"
-msgstr ""
+msgstr "Ryd log"
 
 msgid "Show users on map"
-msgstr ""
+msgstr "Vis brugere på kort"
 
 msgid "Position only"
 msgstr "Kun position"
@@ -26102,30 +26795,33 @@ msgid ""
 "Globalsat homepage at http://www.raphael-mack.de/josm-globalsat-gpx-import-"
 "plugin/"
 msgstr ""
+"Kan ikke indlæse bibliotek rxtxSerial. Hvis du har brug for hjælp til at "
+"installere det så prøv Globalsats hjemmeside på http://www.raphael-"
+"mack.de/josm-globalsat-gpx-import-plugin/"
 
 msgid "Globalsat Import"
 msgstr "Globalsat-import"
 
 msgid "Import Data from Globalsat Datalogger DG100 into GPX layer."
-msgstr "Importér data fra Globalsat Datalogger DG100 til GPX lag."
+msgstr "Importer data fra Globalsat Datalogger DG100 til GPX lag."
 
 msgid "Import"
 msgstr "Importer"
 
 msgid "GPS Blams"
-msgstr ""
+msgstr "GPS støj"
 
 msgid "GPSBlam"
-msgstr ""
+msgstr "GPSStøj"
 
 msgid "select gpx points and \"blam!\", find centre and direction of spread"
-msgstr ""
+msgstr "vælg GPX punkter og \"støj!\", find center og retning for spredning"
 
 msgid "Add EGPX layer"
 msgstr "Tilføj EGPX lag"
 
 msgid "GPX Data"
-msgstr ""
+msgstr "GPX data"
 
 msgid "Classes element below root child level"
 msgstr ""
@@ -26143,10 +26839,10 @@ msgid "Implications element below root child level"
 msgstr ""
 
 msgid "Tag without key"
-msgstr ""
+msgstr "Tag uden nøgle"
 
 msgid "Tag without value (key is {0})"
-msgstr ""
+msgstr "Tag uden værdi (nøgle er {0})"
 
 msgid "Closed classes while it was not open"
 msgstr ""
@@ -26164,7 +26860,7 @@ msgid "Closed implications while it was not open"
 msgstr ""
 
 msgid "Tag element inside other tag element"
-msgstr ""
+msgstr "Tag element inde i andet tag element"
 
 msgid "Invalid opening xml tag <{0}> in state {1}"
 msgstr ""
@@ -26197,13 +26893,13 @@ msgid "Condition is already finished at </{0}>"
 msgstr ""
 
 msgid "<and> needs at least one child"
-msgstr ""
+msgstr "<and> har brug for mindst et barn"
 
 msgid "<or> needs at least one child"
-msgstr ""
+msgstr "<or> har brug for mindst et barn"
 
 msgid "<not> needs at least one child"
-msgstr ""
+msgstr "<not> har brug for mindst et barn"
 
 msgid "Wrong closing tag {0} (</{1}> expected)"
 msgstr ""
@@ -26218,10 +26914,10 @@ msgid "Collection must contain at least one condition"
 msgstr ""
 
 msgid "No ruleset has been selected!"
-msgstr ""
+msgstr "Intet regelsæt er blevet valgt!"
 
 msgid "No ruleset"
-msgstr ""
+msgstr "Intet regelsæt"
 
 msgid ""
 "Syntax exception in access ruleset:\n"
@@ -26239,12 +26935,14 @@ msgid ""
 "Problem when accessing a file:\n"
 "{0}"
 msgstr ""
+"Problem ved adgang til en fil:\n"
+"{0}"
 
 msgid "File not found:\n"
 msgstr "Fil ikke fundet:\n"
 
 msgid "Couldn''t find built-in ruleset {0}"
-msgstr ""
+msgstr "Kunne ikke finde indbygget regelsæt {0}"
 
 msgid "height (m)"
 msgstr "højde (m)"
@@ -26262,16 +26960,16 @@ msgid "weight (t)"
 msgstr "vægt (t)"
 
 msgid "axleload (t)"
-msgstr ""
+msgstr "akseltryk (t)"
 
 msgid "Bookmark name"
 msgstr "Bogmærkenavn"
 
 msgid "Bookmark name already exists!"
-msgstr ""
+msgstr "Bogmærkenavn findes allerede!"
 
 msgid "Bookmark name must not contain ''{0}''!"
-msgstr ""
+msgstr "Bogmærkenavn må ikke indeholde ''{0}''!"
 
 msgid "Access class"
 msgstr ""
@@ -26289,13 +26987,13 @@ msgid "Road requirements"
 msgstr ""
 
 msgid "Max. incline up (%, pos.)"
-msgstr ""
+msgstr "Max. hældning op (%, pos.)"
 
 msgid "Maximum incline the vehicle can go up"
 msgstr "Største stigning køretøjet kan køre op ad"
 
 msgid "Max. incline down (%, pos.)"
-msgstr ""
+msgstr "Max. hældning ned (%, pos.)"
 
 msgid "Maximum incline the vehicle can go down"
 msgstr "Største hældning køretøjet kan køre ned ad"
@@ -26317,7 +27015,7 @@ msgid "Worst tracktype (1-5) the vehicle can still use, 0 for none"
 msgstr "Dårligste tracktype (1-5) køretøjet stadig kan bruge, 0 for ingen"
 
 msgid "Change bookmark"
-msgstr ""
+msgstr "Ændre bogmærke"
 
 msgid "Edit access parameters"
 msgstr ""
@@ -26332,13 +27030,13 @@ msgid "default"
 msgstr "standard"
 
 msgid "end nodes"
-msgstr ""
+msgstr "slut punkter"
 
 msgid "incline"
-msgstr "stigning"
+msgstr "hældning"
 
 msgid "Ruleset:"
-msgstr ""
+msgstr "Regelsæt:"
 
 msgid "Parameters:"
 msgstr "Parametre:"
@@ -26356,13 +27054,13 @@ msgid "Settings for the Graphview plugin that visualizes routing graphs."
 msgstr ""
 
 msgid "Ruleset"
-msgstr ""
+msgstr "Regelsæt"
 
 msgid "Use built-in rulesets"
-msgstr ""
+msgstr "Brug indbygget regelsæt"
 
 msgid "External ruleset directory:"
-msgstr ""
+msgstr "Ekstern regelsæt mappe:"
 
 msgid "Select directory"
 msgstr "Vælg mappe"
@@ -26374,22 +27072,22 @@ msgid "Restore defaults"
 msgstr "Gendan standarder"
 
 msgid "Visualization"
-msgstr ""
+msgstr "Visualisering"
 
 msgid "Draw directions separately"
-msgstr ""
+msgstr "Tegn retninger separat"
 
 msgid "Node color"
-msgstr ""
+msgstr "Punktfarve"
 
 msgid "Arrow color"
-msgstr ""
+msgstr "Pilfarve"
 
 msgid "Arrowhead fill color"
-msgstr ""
+msgstr "Pilhoved fyldfarve"
 
 msgid "Arrowhead placement"
-msgstr ""
+msgstr "Pilhoved placering"
 
 msgid "New bookmark"
 msgstr ""
@@ -26409,13 +27107,13 @@ msgid "Bookmark reset"
 msgstr ""
 
 msgid "Choose node color"
-msgstr ""
+msgstr "Vælg punktfarve"
 
 msgid "Choose arrow color"
-msgstr ""
+msgstr "Vælg pilfarve"
 
 msgid "Choose arrowhead fill color"
-msgstr ""
+msgstr "Vælg pilhoved fyldfarve"
 
 msgid "Routing graph calculated by the GraphView plugin"
 msgstr ""
@@ -26436,116 +27134,129 @@ msgid ""
 "Weights must be given as positive decimal numbers with unit \"t\" or without "
 "unit."
 msgstr ""
+"Vægte skal angives som positive decimaltal med enheden \"t\" eller uden "
+"enhed."
 
 msgid ""
 "Lengths must be given as positive decimal numbers with unit \"m\", \"km\", "
 "\"mi\" or without unit.\n"
 "Alternatively, the format FEET'' INCHES\" can be used."
 msgstr ""
+"Længder skal angives som positive decimaltal med enhed \"m\", \"km\", \"mi\" "
+"eller uden enhed.\n"
+"Alternativt kan formatet FEET'' TOMMER\" bruges."
 
 msgid ""
 "Speeds should be given as numbers without unit or as numbers followed by "
 "\"mph\"."
 msgstr ""
+"Hastigheder skal angives som tal uden enhed eller som tal efterfulgt af "
+"\"mph\"."
 
 msgid ""
 "Inclines must be given as positive decimal numbers with followed by \"%\"."
-msgstr ""
+msgstr "Stigninger skal angives som positive decimaltal efterfulgt af \"%\"."
 
 msgid "Tracktype grades must be given as integers between 0 and 5."
-msgstr ""
+msgstr "Kvaliteten af sportype skal gives som heltal mellem 0 og 5."
 
 msgid ""
 "Surface values must not contain any of the following characters: '','', '' "
 "'{' '',  '' '}' '', ''='', ''|''"
 msgstr ""
+"Værdier på overflade må ikke indeholde nogen af følgende tegn: '','', '' '{' "
+"'',  '' '}' '', ''='', ''|''"
 
 msgid "Imagery XML Files"
-msgstr ""
+msgstr "Billedlag XML filer"
 
 msgid "Save Imagery XML file"
-msgstr ""
+msgstr "Gem billedlag XML fil"
 
 msgid "XML Imagery Bounds"
-msgstr ""
+msgstr "XML billedlag grænser"
 
 msgid "Generate Imagery XML bounds for the selection"
-msgstr ""
+msgstr "Lav billedlag XML grænser for det valgte"
 
 msgid "edit bounds for selected defaults"
-msgstr ""
+msgstr "rediger grænser for valgte standard"
 
 msgid "Download imagery XML bounds"
-msgstr ""
+msgstr "Download billedlag XML grænser"
 
 msgid ""
 "Validating error in file {0}:\n"
 "{1}\n"
 "Do you want to continue without validating the file ?"
 msgstr ""
+"Valideringsfejl i filen {0}:\n"
+"{1}\n"
+"Vil du fortsætte uden at validere filen?"
 
 msgid "Open Imagery XML file"
-msgstr ""
+msgstr "Åben billedlag XML fil"
 
 msgid "Calibration Layer"
-msgstr ""
+msgstr "Kalibreringslag"
 
 msgid "A deprecated calibration geometry of {0} nodes by {1}"
-msgstr ""
+msgstr "En forældet kalibreringsgeometri {0} med punkter af {1}"
 
 msgid "A calibration geometry of {0} nodes by {1}"
-msgstr ""
+msgstr "En kalibreringsgeometri {0} med punkter af {1}"
 
 msgid "Change Color"
-msgstr ""
+msgstr "Ændre farve"
 
 msgid "Deprecate Offset"
-msgstr ""
+msgstr "Gør forskydning forældet"
 
 msgid "Are you sure this imagery offset is wrong?"
-msgstr ""
+msgstr "Er du sikker på denne billedforskydning er forkert?"
 
 msgid "Are you sure this calibration geometry is aligned badly?"
-msgstr ""
+msgstr "Er du sikker på denne kalibrerings geometri er justeret dårligt?"
 
 msgid "Warning: deprecation is basically irreversible!"
-msgstr ""
+msgstr "Advarsel: forældelse er stort set uigenkaldelig!"
 
 msgid "To store imagery offsets you must be a registered OSM user."
-msgstr ""
+msgstr "For at gemme billedforskydning skal du være registreret OSM bruger."
 
 msgid ""
 "Please enter the reason why you mark this imagery offset as deprecated"
-msgstr ""
+msgstr "Indtast hvorfor du marker denne billedforskydning som forældet"
 
 msgid ""
 "Please enter the reason why you mark this calibration geometry as deprecated"
-msgstr ""
+msgstr "Indtast hvorfor du marker denne geometri kalibrering som forældet"
 
 msgid "Notifying the server of the deprecation..."
-msgstr ""
+msgstr "Underretter serveren om forældelsen..."
 
 msgid "Get Imagery Offset..."
-msgstr ""
+msgstr "Hent billedlag forskydning..."
 
 msgid "Download offsets for current imagery from a server"
-msgstr ""
+msgstr "Download forskydninger for aktuelt billedlag fra en server"
 
 msgid ""
 "No data for this region. Please adjust imagery layer and upload an offset."
 msgstr ""
+"Ingen data for denne region. Justerer billedlag og upload en forskydning."
 
 msgid "Loading imagery offsets..."
-msgstr ""
+msgstr "Loader billedlag forskydning..."
 
 msgid "Error processing XML response: {0}"
-msgstr ""
+msgstr "Fejl ved behandling af XML svar: {0}"
 
 msgid "Offset"
-msgstr "Offset"
+msgstr "Forskydning"
 
 msgid "Imagery Offset Database"
-msgstr ""
+msgstr "Database med billedlag forskydning"
 
 msgid "mm"
 msgstr "mm"
@@ -26613,13 +27324,13 @@ msgid "Reason"
 msgstr "Årsag"
 
 msgid "This entry has been reported."
-msgstr ""
+msgstr "Denne post er blevet rapporteret."
 
 msgid "Server has rejected the request"
-msgstr ""
+msgstr "Server har afvist anmodningen"
 
 msgid "Unable to connect to the server"
-msgstr ""
+msgstr "Kan ikke oprette forbindelse til serveren"
 
 msgid "Store Imagery Offset..."
 msgstr ""
@@ -26660,28 +27371,28 @@ msgid ""
 msgstr ""
 
 msgid "Uploading a new offset..."
-msgstr ""
+msgstr "Uploader en ny forskydning..."
 
 msgid "This string should be 3 to 200 letters long."
-msgstr ""
+msgstr "Denne streng skal være 3 til 200 bogstaver lang."
 
 msgid "Adjust imagery"
-msgstr "Justér billedlag"
+msgstr "Justerer billedlag"
 
 msgid "Adjust the position of the selected imagery layer"
-msgstr "Justér det valgte billedlags position"
+msgstr "Justerer det valgte billedlags position"
 
 msgid "Please select the imagery layer to adjust."
-msgstr "Marker venligst det billedlag der skal justeres."
+msgstr "Marker det billedlag der skal justeres."
 
 msgid "Start adjusting"
-msgstr ""
+msgstr "Start justering"
 
 msgid "There are currently no imagery layer to adjust."
 msgstr "Der er i øjeblikket ikke noget billedlag at justere."
 
 msgid "No layers to adjust"
-msgstr ""
+msgstr "Intet lag at justere"
 
 msgid "Normal"
 msgstr "Normal"
@@ -26726,7 +27437,7 @@ msgid "Image files (*.jpg, *.jpeg, *.png, *.gif)"
 msgstr "Billedfiler (*.jpg, *.jpeg, *.png, *.gif)"
 
 msgid "Import vector graphics"
-msgstr ""
+msgstr "Importer vektor grafik"
 
 msgid "Scale:"
 msgstr "Skala:"
@@ -26735,39 +27446,41 @@ msgid "unit(s) = "
 msgstr "enhed(er) = "
 
 msgid "Importing..."
-msgstr ""
+msgstr "Importerer..."
 
 msgid "SVG files [ImportVec plugin] (*.svg)"
-msgstr ""
+msgstr "SVG filer [ImportVec plugin] (*.svg)"
 
 msgid "Please open or create data layer before importing"
-msgstr ""
+msgstr "Åben eller skab nyt data lag før import"
 
 msgid "InfoMode"
-msgstr ""
+msgstr "Infotilstand"
 
 msgid "GPX info mode"
-msgstr ""
+msgstr "GPX infotilstand"
 
 msgid ""
 "Move the mouse to show trackpoint info for current layer. Hold shift to "
 "highlight tracks"
 msgstr ""
+"Flyt musen for at vise sporpunkt info for nuværende lag. Hold shift nede for "
+"at fremhæve spor"
 
 msgid "Delete this"
-msgstr ""
+msgstr "Slet dette"
 
 msgid "Delete this&older"
-msgstr ""
+msgstr "Slet dette&ældre"
 
 msgid "km/h"
 msgstr "km/t"
 
 msgid "Track name: "
-msgstr ""
+msgstr "Spor navn: "
 
 msgid "Update IRS adjustment layer"
-msgstr ""
+msgstr "Opdater IRS justeringslag"
 
 msgid ""
 "This option creates IRS adjustment layer and a little way inside it. You "
@@ -26775,9 +27488,13 @@ msgid ""
 "Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
 "with [irs rectify] in subject."
 msgstr ""
+"Denne indstilling opretter IRS justeringslag og en lille vej inde i det. Du "
+"er nødt til at justere WMS lag placering først.\n"
+"Resulterende lag skal gemmes som .osm og sendes til Komzpa (me at komzpa.net) "
+"med [irs rectify] i emnet."
 
 msgid "IRS Adjustment Layer"
-msgstr ""
+msgstr "IRS justeringslag"
 
 msgid "Channel-Digraph created from the active OSM-Layer"
 msgstr ""
@@ -26786,7 +27503,7 @@ msgid "Create Channel Digraph"
 msgstr ""
 
 msgid "this layer is no osm data layer"
-msgstr ""
+msgstr "dette lag er ikke et OSM datalag"
 
 msgid "Converting OSM graph into Channel Digraph"
 msgstr ""
@@ -26891,7 +27608,7 @@ msgid "Lake Walker"
 msgstr "Lake Walker"
 
 msgid "Error creating cache directory: {0}"
-msgstr "Fejl ved oprettelse af mellemlager-mappe: {0}"
+msgstr "Fejl ved oprettelse af cache mappe: {0}"
 
 msgid "Tracing"
 msgstr "Sporer"
@@ -26951,13 +27668,13 @@ msgid "Maximum number of nodes in initial trace"
 msgstr "Maks antal punkter i foreløbig sporing"
 
 msgid "Maximum gray value to count as water (0-255)"
-msgstr ""
+msgstr "Maksimal grå værdi der tæller som vand (0-255)"
 
 msgid "Line simplification accuracy (degrees)"
-msgstr ""
+msgstr "Line forenklings nøjagtighed (grader)"
 
 msgid "Resolution of Landsat tiles (pixels per degree)"
-msgstr "Opløsning af Landsat-tern (pixels pr. grad)"
+msgstr "Opløsning af Landsat-tern (pixels per grad)"
 
 msgid "Size of Landsat tiles (pixels)"
 msgstr "Størrelse af Landsat-tern (pixels)"
@@ -26981,7 +27698,7 @@ msgid "Maximum cache size (MB)"
 msgstr "Maksimal cache-størrelse (MB)"
 
 msgid "Maximum cache age (days)"
-msgstr ""
+msgstr "Maksimal cache alder (dage)"
 
 msgid "Source text"
 msgstr "Kilde tekst"
@@ -27023,29 +27740,28 @@ msgid "Size of one landsat tile, measured in pixels. Default 2000."
 msgstr "Størrelse af et Landsat-tern, målt i pixels. Standard er 2000."
 
 msgid "Offset all points in East direction (degrees). Default 0."
-msgstr ""
+msgstr "Forskyd alle punkter i østlig retning (grader). Standard 0."
 
 msgid "Offset all points in North direction (degrees). Default 0."
-msgstr ""
+msgstr "Forskyd alle punkter i nordlig retning (grader). Standard 0."
 
 msgid "Direction to search for land. Default east."
-msgstr ""
+msgstr "Retning for at søge efter land. Standard øst."
 
 msgid "Tag ways as water, coastline, land or nothing. Default is water."
-msgstr "Marker veje som vand, kystlinje, land eller intet. Default er vand."
+msgstr "Tag veje som vand, kystlinje, land eller intet. Standard er vand."
 
 msgid "Which WMS layer to use for tracing against. Default is IR1."
-msgstr ""
+msgstr "Hvilket WMS lag skal bruges til sporing imod. Standard er IR1."
 
 msgid "Maximum size of each cache directory in bytes. Default is 300MB"
-msgstr ""
-"Maksimal størrelse af hver mellemlager-mappe i bytes. Standard er 300MB"
+msgstr "Maksimal størrelse af hver cache mappe i bytes. Standard er 300MB"
 
 msgid "Maximum age of each cached file in days. Default is 100"
-msgstr ""
+msgstr "Maksimal alder for hver cached fil i dage. Standard er 100"
 
 msgid "Data source text. Default is Landsat."
-msgstr ""
+msgstr "Datakilde tekst. Standard er Landsat."
 
 msgid "Downloading image tile..."
 msgstr "Downloader billedtern..."
@@ -27096,37 +27812,347 @@ msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr "Forbind til gpsd-server og vis nuværende position i LiveGPS-lag"
 
 msgid "Center Once"
-msgstr "Centrér en gang"
+msgstr "Centrer en gang"
 
 msgid "Center the LiveGPS layer to current position."
-msgstr "Centrér LiveGPS-laget til nuværende position."
+msgstr "Centrer LiveGPS-laget til nuværende position."
 
 msgid "Auto-Center"
-msgstr "Auto-centrér"
+msgstr "Auto-centrer"
 
 msgid "Continuously center the LiveGPS layer to current position."
-msgstr "Centrér LiveGPS-laget løbende til den nuværende position."
+msgstr "Centrer LiveGPS-laget løbende til den nuværende position."
 
 msgid "Open MapDust"
 msgstr "Åben MapDust"
 
 msgid "MapDust bug reports"
-msgstr ""
+msgstr "MapDust fejlrapporter"
 
 msgid "Activates the MapDust bug reporter plugin"
-msgstr ""
+msgstr "Aktiverer MapDust fejlrapporter udvidelse"
 
 msgid "Missing input data"
-msgstr ""
+msgstr "Mangler inputdata"
+
+msgid "Mapillary Images"
+msgstr "Mapillary billeder"
+
+msgid "Mapillary layer"
+msgstr "Mapillary lag"
+
+msgid "Total images:"
+msgstr "Total antal billeder:"
+
+msgid "images"
+msgstr "billeder"
 
 msgid "Mapillary"
+msgstr "Mapillary"
+
+msgid "Create Mapillary layer"
+msgstr "Opret Mapillary lag"
+
+msgid "Start Mapillary layer"
+msgstr "Start Mapillary lag"
+
+msgid "Download Mapillary images in current view"
+msgstr "Download Mapillary billeder i den aktuelle visning"
+
+msgid "Export pictures"
+msgstr "Exporter billeder"
+
+msgid "Export Mapillary pictures"
+msgstr "Exporter Mapillary billeder"
+
+msgid "Export images"
+msgstr "Exporter billeder"
+
+msgid "Import pictures"
+msgstr "Importer billeder"
+
+msgid "Import local pictures"
+msgstr "Importer lokale billeder"
+
+msgid "Import pictures into Mapillary layer"
+msgstr "Importer billeder til Mapillary lag"
+
+msgid "Select pictures"
+msgstr "Vælg billeder"
+
+msgid "Import pictures into sequence"
+msgstr "Importer billeder i rækkefølge"
+
+msgid "Import pictures into Mapillary layer in a sequence"
+msgstr "Importer billeder til Mapillary lag i en rækkefølge"
+
+msgid "Join mode"
+msgstr "Sammenlæg tilstand"
+
+msgid "Join/unjoin pictures"
+msgstr "Sammenlæg/adskil billeder"
+
+msgid "Join Mapillary pictures"
+msgstr "Sammenlæg Mapillary billeder"
+
+msgid "Upload pictures"
+msgstr "Upload billeder"
+
+msgid "Upload Mapillary pictures"
+msgstr "Upload Mapillary billeder"
+
+msgid "Upload pictures."
+msgstr "Upload billeder."
+
+msgid "Walk mode"
+msgstr "Gå tilstand"
+
+msgid "Start walk mode"
+msgstr "Start gå tilstand"
+
+msgid "Zoom to selected image"
+msgstr "Zoom til valgt billede"
+
+msgid "Zoom to the currently selected Mapillary image"
+msgstr "Zoom til det aktuelt valgt Mapillary billede"
+
+msgid "Uploaded {0} images"
+msgstr "Uploadede {0} billeder"
+
+msgid "Approve upload on the website"
+msgstr "Godkend upload på hjemmesiden"
+
+msgid "View in website"
+msgstr "Se på hjemmesiden"
+
+msgid "Copy key"
+msgstr "Kopier nøgle"
+
+msgid "Copy key tag"
+msgstr "Kopier nøgle tag"
+
+msgid "Edit on website"
+msgstr "Rediger på hjemmesiden"
+
+msgid "Export all images"
+msgstr "Eksporter alle billeder"
+
+msgid "Export selected sequence"
+msgstr "Eksporter valgte billeder"
+
+msgid "Export selected images"
+msgstr "Eksporter valgte billeder"
+
+msgid "Rewrite imported images"
+msgstr "Genskriv importerede billeder"
+
+msgid "Select a folder"
+msgstr "Vælg en mappe"
+
+msgid "Explore"
+msgstr "Udforsk"
+
+msgid "Select a directory"
+msgstr "Vælg en mappe"
+
+msgid "Speed limit"
+msgstr "Hastighedsbegrænsning"
+
+msgid "Give way"
+msgstr "Ubetinget vigepligt"
+
+msgid "No entry"
+msgstr "Ingen adgang"
+
+msgid "Intersection danger"
+msgstr "Vejkryds fare"
+
+msgid "Mandatory direction (any)"
+msgstr "Obligatorisk retning (enhver)"
+
+msgid "No turn"
+msgstr "Ingen sving"
+
+msgid "Uneven road"
+msgstr "Ujævn vej"
+
+msgid "No parking"
+msgstr "Parking forbudt"
+
+msgid "No overtaking"
+msgstr "Overhaling forbudt"
+
+msgid "Pedestrian crossing"
+msgstr "Fodgængerfelt"
+
+msgid "Years"
+msgstr "År"
+
+msgid "Months"
+msgstr "Måneder"
+
+msgid "Days"
+msgstr "Dage"
+
+msgid "Mapillary filter"
+msgstr "Mapillary filter"
+
+msgid "Open Mapillary filter dialog"
+msgstr "Åbn Mapillary dialog filter"
+
+msgid "Downloaded images"
+msgstr "Downloadede billeder"
+
+msgid "Only images with signs"
+msgstr "Kun billeder med skilte"
+
+msgid "Choose signs"
+msgstr "Vælg skilte"
+
+msgid "Mapillary history"
+msgstr "Mapillary historie"
+
+msgid "Open Mapillary history dialog"
+msgstr "Åbn Mapillary historie dialog"
+
+msgid "Open Mapillary window"
+msgstr "Open Mapillary vindue"
+
+msgid "Mapillary dialog"
+msgstr "Mapillary dialog"
+
+msgid "Open Mapillary main dialog"
+msgstr "Åbn Mapillary hoveddialog"
+
+msgid "Next picture"
+msgstr "Næste billede"
+
+msgid "Shows the next picture in the sequence"
+msgstr "Viser det næste billede i sekvensen"
+
+msgid "Previous picture"
+msgstr "Forrige billede"
+
+msgid "Shows the previous picture in the sequence"
+msgstr "Viser det forrige billede i sekvensen"
+
+msgid "Jump to red"
+msgstr "Hop til rød"
+
+msgid "Jumps to the picture at the other side of the red line"
+msgstr "Hopper til billedet i den anden side af den røde linje"
+
+msgid "Jump to blue"
+msgstr "Hop til blå"
+
+msgid "Jumps to the picture at the other side of the blue line"
+msgstr "Hopper til billedet i den anden side af den blå linje"
+
+msgid "Stops the walk."
+msgstr "Stopper gåtur."
+
+msgid "Play"
+msgstr "Afspil"
+
+msgid "Continues with the paused walk."
+msgstr "Fortsætter med den gåtur der er på pause."
+
+msgid "Pause"
+msgstr "Pause"
+
+msgid "Pauses the walk."
+msgstr "Sætter gåturen på pause."
+
+msgid "Reverse buttons position when displaying images."
+msgstr "Vender knapper position, når der vises billeder."
+
+msgid "Display hour when the picture was taken"
+msgstr "Vis tid som billedet blev taget"
+
+msgid "Use 24 hour format"
+msgstr "Brug 24-timers format"
+
+msgid "Move to picture''s location with next/previous buttons"
+msgstr "Flyt til billedets placering med næste/forrige knapper"
+
+msgid "Download mode: "
+msgstr "Download tilstand: "
+
+msgid "Upload selected sequence"
+msgstr "Upload valgt rækkefølge"
+
+msgid "Delete after upload"
+msgstr "Slet efter upload"
+
+msgid "Wait for full quality pictures"
+msgstr "Vent på fuld kvalitets billeder"
+
+msgid "Follow selected image"
+msgstr "Følg valgt billede"
+
+msgid "Go forward"
+msgstr "Gå frem"
+
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] "Slettede {0} billede"
+msgstr[1] "Slettede {0} billeder"
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] "Importerede {0} billede"
+msgstr[1] "Importerede {0} billeder"
+
+msgid "2 images joined"
+msgstr "2 billeder lagt sammen"
+
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] "Flyttede {0} billede"
+msgstr[1] "Flyttede {0} billeder"
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] "Drejede {0} billede"
+msgstr[1] "Drejede {0} billeder"
+
+msgid "2 images unjoined"
+msgstr "2 billeder adskilt"
+
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
+"Det downloadede OSM-området er for stort. Download tilstand er blevet ændret "
+"til halvautomatisk indtil laget genstartes."
+
+msgid "Downloading"
+msgstr "Downloader"
+
+msgid "Select mode"
+msgstr "Vælg tilstand"
 
-msgid "Create Mapillary layer."
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
+"<html><head><title>Mapillary login</title></head><body>Login lykkes, vender "
+"tilbage til JOSM.</body></html>"
 
-msgid "Export"
-msgstr "Eksporter"
+msgid "Downloading Mapillary images"
+msgstr "Downloader Mapillary billeder"
+
+msgid "Total Mapillary images: {0}"
+msgstr "Total antal Mapillary billeder: {0}"
+
+msgid "No images found"
+msgstr "Ingen billeder fundet"
+
+msgid "Finished upload"
+msgstr "Upload færdig"
+
+msgid "Uploading: {0}"
+msgstr "Uploader: {0}"
 
 msgid "Measured values"
 msgstr "Målte værdier"
@@ -27146,6 +28172,9 @@ msgstr "Markeringens længde"
 msgid "Selection Area"
 msgstr "Markeringsområde"
 
+msgid "Selection Radius"
+msgstr "Vælg radius"
+
 msgid "Angle"
 msgstr "Vinkel"
 
@@ -27162,13 +28191,13 @@ msgid "Measurements"
 msgstr "Målinger"
 
 msgid "Merge overlap"
-msgstr ""
+msgstr "Læg overlapning sammen"
 
 msgid "Merge overlap of ways."
-msgstr ""
+msgstr "Læg overlappende veje sammen"
 
 msgid "Merge Overlap (combine)"
-msgstr ""
+msgstr "Læg overlapning sammen (kombinerer)"
 
 msgid ""
 "<html>A role based relation membership was copied to all new ways.<br>You "
@@ -27194,63 +28223,19 @@ msgid "Adds no left turn for sets of 4 or 5 ways."
 msgstr "Tilføjer ingen venstresving for sæt af 4 eller 5 veje."
 
 msgid "Please select 4 or 5 ways to assign no left turns."
-msgstr ""
+msgstr "Vælg 4 eller 5 veje der skal tildeles ingen venstre sving."
 
 msgid "Please select 4 ways that form a closed relation."
-msgstr ""
+msgstr "Vælg 4 veje der danner en lukket relation."
 
 msgid "Unable to order the ways. Please verify their directions"
-msgstr ""
+msgstr "Kan ikke ordne rækkefølge af veje. Kontrollerer deres retninger"
 
 msgid "Create Michigan left turn restriction"
-msgstr ""
+msgstr "Opret Michigan venstresvingsbegrænsning"
 
 msgid "Unable to find via nodes. Please check your selection"
-msgstr "Ikke i stand til at finde via punkter. Tjek venligst din markering"
-
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-"XAPI forespørgsel, f.eks., '''' (for at downloade alle data), "
-"''[highway=*]'', eller ''[[network=VRR][ref=603|613]''"
-
-msgid "Download from OSM mirror..."
-msgstr "Download fra OSM spejl..."
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-"Denne XAPI forespørgsel ser ud til at være ugyldig, tjek venligst igen"
-
-msgid "Object type: "
-msgstr "Objekttype: "
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr "OSM objekttype der skal downloades (''*'' betyder alle)"
-
-msgid "XAPI query: "
-msgstr "XAPI forespørgsel: "
-
-msgid "Download from Overpass API ..."
-msgstr "Download fra Overpass API ..."
-
-msgid "Download map data from Overpass API server."
-msgstr "Download kortdata fra Overpass API server."
-
-msgid "Overpass query: "
-msgstr "Overpass forespørgsel: "
-
-msgid "Select OSM mirror URL"
-msgstr "Vælg OSM spejl URL"
-
-msgid "Select OSM mirror URL to download from."
-msgstr "Vælg OSM spejl URL der skal downloades fra."
-
-msgid "Base URL"
-msgstr "Grund URL"
-
-msgid "Enforce meta data"
-msgstr "Håndhæv metadata"
+msgstr "Ikke i stand til at finde viapunkter. Tjek din markering"
 
 msgid "About Plugin"
 msgstr "Om udvidelse"
@@ -27267,106 +28252,112 @@ msgid ""
 msgstr ""
 
 msgid "No thanks, use JOSM''s plain text preferences storage"
-msgstr ""
+msgstr "Nej tak, brug JOSM''s lager i klar tekst i indstillinger"
 
 msgid ""
 "Found sensitive data that is still saved in JOSM''s preference file (plain "
 "text)."
 msgstr ""
+"Fandt følsomme data, der stadig er gemt i JOSM''s indstillingsfil (klar "
+"tekst)."
 
 msgid "Transfer to password manager and remove from preference file"
-msgstr ""
+msgstr "Overfør til adgangskode manager og fjern fra indstillingsfil"
 
 msgid "No, just keep it"
-msgstr ""
+msgstr "Nej, bare behold det"
 
 msgid "Close the dialog and discard all changes"
 msgstr "Luk dialogen og smid alle ændringer væk."
 
 msgid "Proceed and go to the next page"
-msgstr ""
+msgstr "Fortsæt og gå til den næste side"
 
 msgid "Finish"
-msgstr ""
+msgstr "Færdig"
 
 msgid "Confirm the setup and close this dialog"
-msgstr ""
+msgstr "Bekræft opsætning og luk denne dialog"
 
 msgid "JOSM/OSM API/Username"
-msgstr ""
+msgstr "JOSM/OSM API/Brugernavn"
 
 msgid "JOSM/OSM API/Password"
-msgstr ""
+msgstr "JOSM/OSM API/Adgangskode"
 
 msgid "{0}/Username"
 msgstr "{0}/Brugernavn"
 
 msgid "{0}/Password"
-msgstr "{0}/Kodeord"
+msgstr "{0}/Adgangskode"
 
 msgid "JOSM/Proxy/Username"
-msgstr ""
+msgstr "JOSM/Proxy/Brugernavn"
 
 msgid "JOSM/Proxy/Password"
-msgstr ""
+msgstr "JOSM/Proxy/Adgangskode"
 
 msgid "JOSM/OAuth/OSM API/Key"
-msgstr ""
+msgstr "JOSM/OAuth/OSM API/Nøgle"
 
 msgid "JOSM/OAuth/OSM API/Secret"
-msgstr ""
+msgstr "JOSM/OAuth/OSM API/Hemmelighed"
 
 msgid "Native Password Manager Plugin"
 msgstr ""
 
 msgid "The username and password is protected by {0}."
-msgstr ""
+msgstr "Brugernavn og adgangskode er beskyttet af {0}."
 
 msgid "username"
 msgstr "brugernavn"
 
 msgid "password"
-msgstr "kodeord"
+msgstr "adgangskode"
 
 msgid "proxy username"
-msgstr ""
+msgstr "proxy brugernavn"
 
 msgid "proxy password"
-msgstr ""
+msgstr "proxy adgangskode"
 
 msgid "oauth key"
-msgstr ""
+msgstr "oauth nøgle"
 
 msgid "oauth secret"
-msgstr ""
+msgstr "oauth hemmelighed"
 
 msgid ""
 "<br><strong>Warning:</strong> There may be sensitive data left in your "
 "preference file. ({0})"
 msgstr ""
+"<br><strong>Advarsel:</strong> Der kan være følsomme data tilbage i din "
+"indstillingsfil. ({0})"
 
 msgid "Save user and password ({0})"
-msgstr ""
+msgstr "Gem bruger og adgangskode ({0})"
 
 msgid "Plain text, JOSM default"
-msgstr ""
+msgstr "Klar tekst, JOSM standard"
 
 msgid "Use {0}"
 msgstr "Brug {0}"
 
 msgid "Encrypt data with Windows logon credentials"
-msgstr ""
+msgstr "Krypter data med Windows logonoplysninger"
 
 msgid "The native password manager plugin detected {0} on your system."
 msgstr ""
 
 msgid "Days without mapping: {0}."
-msgstr ""
+msgstr "Dage uden kortlægning: {0}."
 
 msgid ""
 "(To miserably continue mapping, edit out no_more_mapping\n"
 "from {0})"
 msgstr ""
+"(For ynkeligt at fortsætte kortlægning, fjern no_more_mapping\n"
+"fra {0})"
 
 msgid "Split by municipality"
 msgstr ""
@@ -27390,28 +28381,28 @@ msgid "Download open data"
 msgstr ""
 
 msgid "License URL not available: {0}"
-msgstr ""
+msgstr "Licens URL ikke tilgængelig: {0}"
 
 msgid "OpenData preferences"
 msgstr ""
 
 msgid "License Agreement"
-msgstr ""
+msgstr "Licensaftale"
 
 msgid "Accept"
 msgstr "Accepter"
 
 msgid "Refuse"
-msgstr ""
+msgstr "Afvis"
 
 msgid "I understand and accept these terms and conditions"
-msgstr ""
+msgstr "Jeg forstår og accepterer disse vilkår og betingelser"
 
 msgid "View the full text of this license"
-msgstr ""
+msgstr "Se den fulde ordlyd af denne licens"
 
 msgid "I refuse these terms and conditions. Cancel download."
-msgstr ""
+msgstr "Jeg afviser disse vilkår og betingelser. Annuller download."
 
 msgid "Module bundled with opendata plugin"
 msgstr ""
@@ -27487,6 +28478,9 @@ msgstr "Diff"
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr "Værktøjer"
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27570,9 +28564,13 @@ msgid ""
 "perform a non-precise transformation (<b>with location errors up to 1 "
 "km</b>) ?<br/><br/>If so, <b>do NOT upload</b> such data to OSM !"
 msgstr ""
+"JOSM kunne ikke finde en streng matematisk transformation mellem ''{0}'' og "
+"WGS84. <br /> <br />Vil du prøve en <i>lempelig</ i> metode, som vil udføre "
+"en ikke-præcis transformation (<b>med placeringsfejl på op til 1 km</b>) "
+"?<br/><br/>Hvis ja, <b>upload IKKE</ b> disse data til OSM !"
 
 msgid "Try lenient method"
-msgstr ""
+msgstr "Prøv lempelig metode"
 
 msgid "GML files"
 msgstr "GML filer"
@@ -27708,18 +28706,18 @@ msgstr ""
 
 msgid "JOSM could not find information about the following module:"
 msgid_plural "JOSM could not find information about the following modules:"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "JOSM kunne ikke finde information om følgende modul:"
+msgstr[1] "JOSM kunne ikke finde information om følgende moduler:"
 
 msgid "The module is not going to be loaded."
 msgid_plural "The modules are not going to be loaded."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Modulet vil ikke blive indlæst."
+msgstr[1] "Modulerne vil ikke blive indlæst."
 
 msgid "Updating the following module has failed:"
 msgid_plural "Updating the following modules has failed:"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Opdatering af følgende modul mislykkedes:"
+msgstr[1] "Opdatering af følgende moduler mislykkedes:"
 
 msgid "Module update failed"
 msgstr ""
@@ -27845,13 +28843,13 @@ msgid "OSM Server Files pbf compressed"
 msgstr ""
 
 msgid "Download PBF"
-msgstr ""
+msgstr "Download PBF"
 
 msgid "Invalid changeset id: {0}"
-msgstr ""
+msgstr "Ugyldig rettesæt id: {0}"
 
 msgid "Invalid timestamp: {0}"
-msgstr ""
+msgstr "Ugyldig tidsstempel: {0}"
 
 msgid "Invalid DenseNodes key/values table"
 msgstr ""
@@ -27860,19 +28858,19 @@ msgid "Reading OSM data..."
 msgstr "Indlæser OSM data..."
 
 msgid "Transform error: Min X must be smaller than max"
-msgstr ""
+msgstr "Transformations fejl: Min X skal være mindre end max"
 
 msgid "Transform error: Min Y must be smaller than max"
-msgstr ""
+msgstr "Transformations fejl: Min Y skal være mindre end max"
 
 msgid "Transform error: Points too close"
-msgstr ""
+msgstr "Transformations fejl: Punkter for tæt"
 
 msgid "Transform error: Unsupported variant."
-msgstr ""
+msgstr "Transformations fejl: Ikke understøttet variant."
 
 msgid "Transform error: Unsupported orientation"
-msgstr ""
+msgstr "Transformations fejl: Ikke understøttet orientering"
 
 msgid "Finished"
 msgstr "Færdig"
@@ -27887,40 +28885,40 @@ msgid "Place"
 msgstr "Sted"
 
 msgid "Show target"
-msgstr ""
+msgstr "Vis mål"
 
 msgid "Take X and Y from selected node"
-msgstr ""
+msgstr "Tag X og Y fra udvalgt punkt"
 
 msgid "Debug info"
-msgstr ""
+msgstr "Fejlsøgnings info"
 
 msgid "Merge close nodes"
 msgstr "Sammenlæg lukkede punkter"
 
 msgid "Remove objects smaller than"
-msgstr ""
+msgstr "Fjern objekter mindre end"
 
 msgid "Remove objects larger than"
-msgstr ""
+msgstr "Fjern objekter større end"
 
 msgid "Only this color"
 msgstr "Kun denne farve"
 
 msgid "Remove parallel lines"
-msgstr ""
+msgstr "Fjern parallelle linjer"
 
 msgid "Take only first X paths"
 msgstr ""
 
 msgid "Color/width change"
-msgstr ""
+msgstr "Farve/bredde ændring"
 
 msgid "Shape closed"
-msgstr ""
+msgstr "Form lukket"
 
 msgid "Single segments"
-msgstr ""
+msgstr "Enkelte segmenter"
 
 msgid "Orthogonal shapes"
 msgstr "Retvinklede former"
@@ -27929,16 +28927,16 @@ msgid "Import settings"
 msgstr "Importer indstillinger"
 
 msgid "Introduce separate layers for:"
-msgstr ""
+msgstr "Indfør separate lag til:"
 
 msgid "Bind to coordinates"
-msgstr ""
+msgstr "Bind til koordinaterne"
 
 msgid "Projection:"
 msgstr "Projektion:"
 
 msgid "Bottom left (min) corner:"
-msgstr ""
+msgstr "Nederst til venstre (min) hjørne:"
 
 msgid "PDF X and Y"
 msgstr "PDF X og Y"
@@ -27947,13 +28945,13 @@ msgid "East and North"
 msgstr "Øst og Nord"
 
 msgid "Top right (max) corner:"
-msgstr ""
+msgstr "Øverst til højre (max) hjørne:"
 
 msgid "Projection Preferences"
-msgstr ""
+msgstr "Projektionsindstillinger"
 
 msgid "Close the dialog and apply projection preferences"
-msgstr ""
+msgstr "Luk dialogen og anvend projektionsindstillinger"
 
 msgid "Close the dialog, discard projection preference changes"
 msgstr "Luk dialogen, smid projektionsindstillinger væk."
@@ -27983,28 +28981,28 @@ msgid "Preparing"
 msgstr "Forbereder"
 
 msgid "Tolerance is not a number"
-msgstr ""
+msgstr "Tolerance er ikke et tal"
 
 msgid "Could not parse color"
-msgstr ""
+msgstr "Kunne ikke fortolke farve"
 
 msgid "Could not parse max path count"
-msgstr ""
+msgstr "Kunne ikke fortolke max sti tæller"
 
 msgid "Parsing file"
-msgstr ""
+msgstr "Fortolker fil"
 
 msgid "File not found."
-msgstr "Filen blev ikke fundet."
+msgstr "Fil ikke fundet."
 
 msgid "Error while parsing: {0}"
 msgstr "Fejl under fortolkning: {0}"
 
 msgid "Removing parallel segments"
-msgstr ""
+msgstr "Fjerner parallelle segmenter"
 
 msgid "Max distance is not a number"
-msgstr ""
+msgstr "Max afstand er ikke et tal"
 
 msgid "Joining nodes"
 msgstr "Sammenlægger punkter"
@@ -28013,25 +29011,25 @@ msgid "Joining adjacent segments"
 msgstr "Sammenlægger tilstødende segmenter"
 
 msgid "Removing small objects"
-msgstr ""
+msgstr "Fjerner små objekter"
 
 msgid "Removing large objects"
-msgstr ""
+msgstr "Fjerner store objekter"
 
 msgid "Finalizing layers"
-msgstr ""
+msgstr "Færdiggørelse af lag"
 
 msgid "Please set a projection."
-msgstr ""
+msgstr "Sæt en projektion."
 
 msgid "Could not parse numbers. Please check."
-msgstr ""
+msgstr "Kunne ikke fortolke numre. Kontrollerer venligst."
 
 msgid "Building JOSM layer"
-msgstr ""
+msgstr "Opbygger JOSM lag"
 
 msgid "Postprocessing layer"
-msgstr ""
+msgstr "Efterbehandlings lag"
 
 msgid "Saving to file."
 msgstr "Gemmer til fil."
@@ -28040,7 +29038,7 @@ msgid " Writing to file"
 msgstr " Skriver til fil"
 
 msgid "Building JOSM layer."
-msgstr ""
+msgstr "Opbygger JOSM lag."
 
 msgid " "
 msgstr " "
@@ -28061,7 +29059,7 @@ msgid "Parsing PDF"
 msgstr "Fortolker PDF"
 
 msgid "Encrypted documents not supported."
-msgstr ""
+msgstr "Krypterede dokumenter understøttes ikke."
 
 msgid "The PDF file must have exactly one page."
 msgstr "PDF-filen skal have præcis en side."
@@ -28086,49 +29084,49 @@ msgid "keep backup files"
 msgstr "behold backup filer"
 
 msgid "change file modification time:"
-msgstr ""
+msgstr "ændre fil ændrings tid:"
 
 msgid "to gps time"
 msgstr "til gps tid"
 
 msgid "to previous value (unchanged mtime)"
-msgstr ""
+msgstr "til forrige værdi (uændret mtime)"
 
 msgid "Photo Geotagging Plugin"
-msgstr ""
+msgstr "Foto geotaggings udvidelse"
 
 msgid "Writing position information to image files..."
-msgstr ""
+msgstr "Skriver positions information til billedfiler..."
 
 msgid "Could not read mtime."
-msgstr ""
+msgstr "Kunne ikke læse mtime."
 
 msgid "Could not write mtime."
-msgstr ""
+msgstr "Kunne ikke skrive mtime."
 
 msgid "File could not be deleted!"
-msgstr ""
+msgstr "Fil kunne ikke slettes!"
 
 msgid "Could not rename file!"
 msgstr "Kunne ikke omdøbe filen!"
 
 msgid "Could not rename file {0} to {1}!"
-msgstr ""
+msgstr "Kunne ikke omdøbe filen {0} til {1}!"
 
 msgid "<html><h3>There are old backup files in the image directory!</h3>"
 msgstr ""
 
 msgid "Override old backup files?"
-msgstr ""
+msgstr "Overskriv gamle backup filer?"
 
 msgid "Keep old backups and continue"
-msgstr ""
+msgstr "Behold gamle backups og fortsæt"
 
 msgid "Override"
-msgstr ""
+msgstr "Overskriv"
 
 msgid "Could not delete temporary file!"
-msgstr ""
+msgstr "Kunne ikke slette midlertidig fil!"
 
 msgid "Test failed: Could not read mtime."
 msgstr "Testen fejlede: Kunne ikke læse mtime."
@@ -28137,7 +29135,7 @@ msgid "Test failed: Could not write mtime."
 msgstr "Testen fejlede: Kunne ikke skrive mtime."
 
 msgid "Adjust photos"
-msgstr "Juster billeder"
+msgstr "Justerer billeder"
 
 msgid "Move and position photos"
 msgstr "Flyt og placerer billeder"
@@ -28304,7 +29302,7 @@ msgid "Nothing in clipboard"
 msgstr ""
 
 msgid "The clipboard data is not an image"
-msgstr ""
+msgstr "Udklipsholder data er ikke et billede"
 
 msgid "Warning: failed to handle zip file ''{0}''. Exception was: {1}"
 msgstr ""
@@ -28383,7 +29381,7 @@ msgid "Invalid coordinates were found: {0}, {1}"
 msgstr ""
 
 msgid "{0} points were outside world bounds and were moved"
-msgstr ""
+msgstr "{0} punkter var uden verdens grænser og blev flyttet"
 
 msgid "Osmosis polygon filter files"
 msgstr ""
@@ -28446,7 +29444,7 @@ msgid "Selected: {0}"
 msgstr "Valgte: {0}"
 
 msgid "Proj4J Plugin"
-msgstr ""
+msgstr "Proj4J udvidelse"
 
 msgid "Code"
 msgstr "Kode"
@@ -28624,7 +29622,7 @@ msgid "Name/Id"
 msgstr "Navn/Id"
 
 msgid "Ref"
-msgstr ""
+msgstr "Ref"
 
 msgid "Stops are possible on the"
 msgstr "Stop er muligt på"
@@ -28685,16 +29683,16 @@ msgid "Public Transport: Delete track stop"
 msgstr "Offentlig transport: Slet spor stop"
 
 msgid "Public Transport: Detach track stop list"
-msgstr "Offentlig transport: Frigør spor-stop liste"
+msgstr "Offentlig transport: Frigør spor stop liste"
 
 msgid "Public Transport: Edit track stop list"
 msgstr "Offentlig transport: Rediger spor stop liste"
 
 msgid "Public Transport: Relocate nodes in track stoplist"
-msgstr ""
+msgstr "Offentlig transport: Flyt punkter i spor stop liste"
 
 msgid "Public Transport: sort track stop list"
-msgstr ""
+msgstr "Offentlig transport: Sortering af spor stop liste"
 
 msgid "Public Transport: Suggest stops"
 msgstr "Offentlig transport: Foreslå stop"
@@ -28714,18 +29712,39 @@ msgstr "Offentlig transport: Aktiver waypoints"
 msgid "Public Transport: Edit waypoint name"
 msgstr "Offentlig transport: Rediger waypoint-navn"
 
-msgid "Relation Toolbox"
+msgid "Public transport routes"
 msgstr ""
 
-msgid "Open relation/multipolygon editor panel"
+msgid "Toggle direction arrows"
 msgstr ""
 
-msgid "Specify role"
+msgid "Toggle reference labels"
 msgstr ""
 
-msgid "Change relation member roles to {0}"
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
 msgstr ""
 
+msgid "Relation Toolbox"
+msgstr "Relations værktøjskasse"
+
+msgid "Open relation/multipolygon editor panel"
+msgstr "Åben relation/multipolygon redigeringspanel"
+
+msgid "Specify role"
+msgstr "Angiv rolle"
+
+msgid "Change relation member roles to {0}"
+msgstr "Skift relation medlems roller til {0}"
+
 msgid "Create administrative boundary relations"
 msgstr "Opret administrative grænse-relationer"
 
@@ -28742,49 +29761,49 @@ msgid "Always split ways of neighbouring multipolygons"
 msgstr ""
 
 msgid "Change role"
-msgstr ""
+msgstr "Skift rolle"
 
 msgid "Enter role for selected members"
-msgstr ""
+msgstr "Indtast rolle for valgte medlemmer"
 
 msgid "Relation Toolbox: {0}"
-msgstr ""
+msgstr "Relations værktøjskasse: {0}"
 
 msgid "another..."
-msgstr ""
+msgstr "en anden..."
 
 msgid "Add/remove members from the chosen relation"
-msgstr ""
+msgstr "Tilføj/fjern medlemmer fra den valgte relation"
 
 msgid "Clear the chosen relation"
-msgstr ""
+msgstr "Fjern den valgte relation"
 
 msgid "Create a multipolygon from selected objects"
-msgstr ""
+msgstr "Opret en multipolygon fra valgte objekter"
 
 msgid "Create multipolygons from rings"
-msgstr ""
+msgstr "Opret multipolygoner fra ringene"
 
 msgid "Move tags from ways to relation"
-msgstr ""
+msgstr "Flyt tags fra veje til relation"
 
 msgid "Enter admin level and name for the border relation:"
-msgstr ""
+msgstr "Indtast admin niveau og navn for grænserelationen:"
 
 msgid "Admin level"
-msgstr ""
+msgstr "Admin niveau"
 
 msgid "Create a relation from selected objects"
-msgstr ""
+msgstr "Opret en relation fra valgte objekter"
 
 msgid "Choose a type for the relation:"
-msgstr ""
+msgstr "Vælg en type til relationen:"
 
 msgid "Delete relation"
 msgstr "Slet relation"
 
 msgid "Download incomplete members for the chosen relation"
-msgstr ""
+msgstr "Download ufuldstændige medlemmer for den valgte relation"
 
 msgid "Download referrers"
 msgstr "Download referencer"
@@ -28796,25 +29815,25 @@ msgid "Duplicate relation"
 msgstr ""
 
 msgid "Open relation editor for the chosen relation"
-msgstr ""
+msgstr "Åben relationseditor for den valgte relation"
 
 msgid "Find a relation"
 msgstr "Find en relation"
 
 msgid "Reconstruct polygon"
-msgstr ""
+msgstr "Genopbyg polygon"
 
 msgid "Multipolygon must consist only of ways"
-msgstr ""
+msgstr "Multipolygon må kun bestå af veje"
 
 msgid "Reconstruction of polygons can be done only from outer ways"
-msgstr ""
+msgstr "Genopbygning af polygoner kan kun ske ud fra ydre veje"
 
 msgid "Reconstruct polygons from relation {0}"
-msgstr ""
+msgstr "Genopbyg polygoner fra relation {0}"
 
 msgid "Reconstruct route"
-msgstr ""
+msgstr "Genopbyg rute"
 
 msgid "Open relation wiki page"
 msgstr "Åben relation wiki side"
@@ -28823,10 +29842,10 @@ msgid "Select relation in main selection."
 msgstr "Vælg relation i hovedmarkering."
 
 msgid "Fix roles of the chosen relation members"
-msgstr ""
+msgstr "Ret roller for de valgte relations medlemmer"
 
 msgid "Complete multipolygon for way {0}"
-msgstr ""
+msgstr "Fuldfør multipolygon for vej {0}"
 
 msgid "Node without ''house'' role found"
 msgstr "Punkt uden ''house'' rolle fundet"
@@ -28844,7 +29863,7 @@ msgid "Relation has streets with different names"
 msgstr "Relation har gader med forskellige navne"
 
 msgid "fix associatedStreet relation"
-msgstr ""
+msgstr "ret associatedStreet relation"
 
 msgid "Relation without ''subarea'' role found"
 msgstr "Relation uden ''subarea'' rolle fundet"
@@ -28885,6 +29904,9 @@ msgstr "Tilbageført rettesæt"
 msgid "It is not allowed to revert changeset from {0}"
 msgstr "Det er ikke tilladt at tilbageføre rettesæt fra {0}"
 
+msgid "Downloading objects history"
+msgstr "Downloader objekters historie"
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -28894,6 +29916,9 @@ msgstr "Objekts historik"
 msgid "History reverter"
 msgstr "Historie tilbagefører"
 
+msgid "Tool: Display objects history dialog"
+msgstr "Værktøj: Vis dialogen objekter historie"
+
 msgid "Preparing history data..."
 msgstr "Forbereder historie data..."
 
@@ -28915,13 +29940,13 @@ msgid "Confirm"
 msgstr "Bekræft"
 
 msgid "Fetching missing primitives"
-msgstr ""
+msgstr "Henter manglende primitiver"
 
 msgid "Downloading changeset"
 msgstr "Henter rettesæt"
 
 msgid "See {0}"
-msgstr ""
+msgstr "Se {0}"
 
 msgid "Revert changeset #{0}"
 msgstr "Tilbagefør rettesæt #{0}"
@@ -28941,7 +29966,7 @@ msgstr ""
 "position ({1},{2}). Springer over."
 
 msgid "Road Sign Plugin"
-msgstr ""
+msgstr "Vejskilt-udvidelse"
 
 msgid "signs"
 msgstr "skilte"
@@ -28950,7 +29975,7 @@ msgid "Change Properties"
 msgstr "Ret egenskaber"
 
 msgid "Country preset:"
-msgstr ""
+msgstr "Land valgt:"
 
 msgid "Show all signs"
 msgstr "Vis alle skilte"
@@ -28959,7 +29984,7 @@ msgid "Show a selection of the most useful signs"
 msgstr "Vis et udvalg af de mest brugte skilte"
 
 msgid "Belgium"
-msgstr ""
+msgstr "Belgien"
 
 msgid "Spain"
 msgstr "Spanien"
@@ -28974,13 +29999,13 @@ msgid "Slovakia"
 msgstr "Slovakiet"
 
 msgid "Roadsign tagging"
-msgstr ""
+msgstr "Vejskilt tags"
 
 msgid "Add tags by clicking on road signs"
 msgstr "Tilføj tags ved at klikke på vejskilte"
 
 msgid "Roadsigns plugin: open dialog"
-msgstr ""
+msgstr "Vejskilt-udvidelse: åben dialog"
 
 msgid "custom"
 msgstr "tilpasset"
@@ -29016,10 +30041,10 @@ msgid "Remove relation ''{0}'' at position {1} from relation ''{2}''"
 msgstr "Fjern relation \"{0}\" på position {1} fra relation \"{2}\""
 
 msgid "routing active route"
-msgstr ""
+msgstr "ruteplan aktiv rute"
 
 msgid "routing inactive route"
-msgstr ""
+msgstr "ruteplan inaktiv rute"
 
 msgid "Routing"
 msgstr "Ruteplan"
@@ -29052,7 +30077,7 @@ msgid "Ignore oneways"
 msgstr "Ignorer ensrettet"
 
 msgid "Reverse route"
-msgstr "Vend ruten om"
+msgstr "Vend rute"
 
 msgid "Clear route"
 msgstr "Fjern rute"
@@ -29079,21 +30104,26 @@ msgid "New value for {0}"
 msgstr "Ny værdi for {0}"
 
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
+msgstr "Indstilling ''{0}'' mangler. Kan ikke initialisere SdsApi."
+
+msgid "Proxy Authentication Required"
 msgstr ""
 
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
 msgstr ""
+"<html><body><p class=\"warning-body\"><strong>Advarsel:</strong> "
+"Adgangskoden gemmes i klartekst i JOSM indstillingsfil. </p></body></html>"
 
 msgid "Enter credentials for Separate Data Store API"
-msgstr ""
+msgstr "Indtast legitimationsoplysninger til separat data lager API"
 
 msgid "Please enter the user name of your SDS account"
-msgstr ""
+msgstr "Indtast brugernavnet på din SDS-konto"
 
 msgid "Please enter the password of your SDS account"
-msgstr ""
+msgstr "Indtast adgangskoden for din SDS-konto"
 
 msgid ""
 "Authenticating at the SDS API ''{0}'' failed. Please enter a valid username "
@@ -29107,7 +30137,7 @@ msgid "Load..."
 msgstr "Indlæs..."
 
 msgid "Load separate data store data from a file."
-msgstr ""
+msgstr "Indlæs særskilt datalager data fra en fil."
 
 msgid "Loading files"
 msgstr "Henter filer"
@@ -29122,7 +30152,7 @@ msgid "About SDS..."
 msgstr "Om SDS..."
 
 msgid "Open a preferences dialog for SDS."
-msgstr ""
+msgstr "Åbn en indstillingsdialog til SDS."
 
 msgid "Separate Data Store"
 msgstr ""
@@ -29134,43 +30164,47 @@ msgid "Server"
 msgstr "Server"
 
 msgid "The URL under which the SDS server can be contacted."
-msgstr ""
+msgstr "URL hvor SDS-serveren kan kontaktes."
 
 msgid ""
 "The user name at the SDS server. You need to create an account with the SDS "
 "admin first."
 msgstr ""
+"Brugernavnet på SDS-serveren. Du skal oprette en konto hos SDS admin først."
 
 msgid ""
 "The password at the SDS server. You need to create an account with the SDS "
 "admin first."
 msgstr ""
+"Adgangskoden på SDS-serveren. Du skal oprette en konto hos SDS admin først."
 
 msgid ""
 "Tags beginning with this prefix are never saved to OSM, but to the SDS "
 "server only."
 msgstr ""
+"Tags der begynder med dette præfiks gemmes aldrig i OSM, men kun SDS-"
+"serveren."
 
 msgid "SDS server URL"
-msgstr ""
+msgstr "SDS serverens URL"
 
 msgid "SDS username"
-msgstr ""
+msgstr "SDS brugernavn"
 
 msgid "SDS password"
-msgstr ""
+msgstr "SDS adgangskode"
 
 msgid "Test credentials now"
-msgstr ""
+msgstr "Test legitimationsoplysninger nu"
 
 msgid "SDS tag prefix"
-msgstr ""
+msgstr "SDS tag præfiks"
 
 msgid "Connection successful."
-msgstr ""
+msgstr "Forbindelses succes."
 
 msgid "Cannot connect to SDS server: "
-msgstr ""
+msgstr "Kan ikke forbinde til SDS-server: "
 
 msgid "Save..."
 msgstr "Gem..."
@@ -29182,10 +30216,10 @@ msgid "Save SDS file"
 msgstr "Gem SDS fil"
 
 msgid "No object selected"
-msgstr ""
+msgstr "Inget objekt valgt"
 
 msgid "SeaChart Editor"
-msgstr ""
+msgstr "Søkort editor"
 
 msgid "Seamark Inspector"
 msgstr "Sømærke inspektør"
@@ -29259,17 +30293,53 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr "Søkort editor"
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr "Kurver"
+
+msgid "Spline drawing preferences"
+msgstr "Kurve tegnings indstillinger"
+
+msgid "Curve steps"
+msgstr "Kurve trin"
+
+msgid "Undelete node {0}"
+msgstr "Gendan punkt {0}"
+
 msgid "OSM Export"
 msgstr "OSM eksport"
 
 msgid "Export traffic data to SUMO network file."
-msgstr ""
+msgstr "Eksporter trafikdata til SUMO netværks fil."
 
 msgid "SUMO Export"
 msgstr "SUMO eksport"
 
+msgid "Export"
+msgstr "Eksporter"
+
 msgid "AutoSave LiveData"
-msgstr ""
+msgstr "AutoGem LiveData"
 
 msgid "Save captured data to file every minute."
 msgstr "Gem optagede data til fil hvert minut."
@@ -29279,6 +30349,7 @@ msgstr "Fejl ved eksport af {0}: {1}"
 
 msgid "Duplicate hotkey for button ''{0}'' - button will be ignored!"
 msgstr ""
+"Dubleret genvejstast til knappen ''{0}'' - knappen vil blive ignoreret!"
 
 msgid "SurveyorPlugin needs LiveGpsPlugin, but could not find it!"
 msgstr "Landmålermodul har brug for LiveGpsmodul, men kunne ikke finde den."
@@ -29311,10 +30382,10 @@ msgid "Waypoint Description"
 msgstr "Waypoint beskrivelse"
 
 msgid "Tag2Link Preferences"
-msgstr ""
+msgstr "Tag2Link indstillinger"
 
 msgid "Launch browser with information about the selected object"
-msgstr ""
+msgstr "Start browser med information om det valgte objekt"
 
 msgid ""
 "Launch your default software for sending an email to the selected contact "
@@ -29333,10 +30404,10 @@ msgid "JOSM Tag Editor Plugin"
 msgstr "JOSM tag-editor-udvidelse"
 
 msgid "Abort tag editing and close dialog"
-msgstr ""
+msgstr "Afbryd tag redigering og luk dialog"
 
 msgid "Apply edited tags and close dialog"
-msgstr ""
+msgstr "Anvend redigerede tags og luk dialog"
 
 msgid "Highlight"
 msgstr "Fremhæv"
@@ -29365,10 +30436,10 @@ msgstr ""
 "først."
 
 msgid "Enter housenumbers or amount of segments"
-msgstr ""
+msgstr "Indtast husnumre eller antal af segmenter"
 
 msgid "Terrace a house"
-msgstr ""
+msgstr "Lav hus til rækkehuse"
 
 msgid "Interpolation"
 msgstr "Interpolering"
@@ -29377,22 +30448,22 @@ msgid "Lowest Number"
 msgstr "Laveste tal"
 
 msgid "Lowest housenumber of the terraced house"
-msgstr ""
+msgstr "Laveste husnummer for rækkehuset"
 
 msgid "Highest Number"
 msgstr "Højeste nummer"
 
 msgid "List of Numbers"
-msgstr ""
+msgstr "Liste over numre"
 
 msgid "add to existing associatedStreet relation"
-msgstr ""
+msgstr "tilføj til eksisterende associatedStreet relation"
 
 msgid "create an associatedStreet relation"
-msgstr ""
+msgstr "opret en associatedStreet relation"
 
 msgid "keep outline way"
-msgstr ""
+msgstr "behold omrids af vej"
 
 msgid "Street name: "
 msgstr "Vejnavn: "
@@ -29422,34 +30493,37 @@ msgid "{0} is not a number"
 msgstr "{0} er ikke et nummer"
 
 msgid "Reverse a terrace"
-msgstr "Vend et rækkehus om"
+msgstr "Vend et rækkehus"
 
 msgid "Reverses house numbers on a terrace."
-msgstr "Reverserer rækkehusnumre"
+msgstr "Vender husnumre på et rækkehus."
 
 msgid "Reverse a Terrace"
-msgstr "Vend et rækkehus om"
+msgstr "Vend et rækkehus"
 
 msgid "Cannot reverse!"
-msgstr ""
+msgstr "Kan ikke vendes!"
 
 msgid "Reverse Terrace"
-msgstr "Vend rækkehus om"
+msgstr "Vend rækkehus"
 
 msgid "Terrace a building"
-msgstr "Finmask bygning til rækkehuse"
+msgstr "Lav bygning til rækkehuse"
 
 msgid "Creates individual buildings from a long building."
 msgstr "Opretter individuelle bygninger fra en aflang bygning"
 
 msgid "Invalid selection"
-msgstr ""
+msgstr "Ugyldigt valg"
 
 msgid ""
 "Select a single, closed way of at least four nodes. (Optionally you can also "
 "select a street for the addr:street tag and a node to mark the start of "
 "numbering.)"
 msgstr ""
+"Vælg en enkelt, lukket vej med mindst fire punkter. (Eventuelt kan du også "
+"vælge en gade til adr:gade tag og et punkt for at markere starten på "
+"nummerering)"
 
 msgid "Terrace"
 msgstr "Rækkehus"
@@ -29458,10 +30532,10 @@ msgid "Browse"
 msgstr "Gennemse"
 
 msgid "Browse map with left button"
-msgstr ""
+msgstr "Gennemse kort med venstre knap"
 
 msgid "Merge objects nodes"
-msgstr ""
+msgstr "Læg objekters punkter sammen"
 
 msgid "Tracer"
 msgstr ""
@@ -29493,7 +30567,7 @@ msgid ""
 msgstr ""
 
 msgid "No set of parameter is active!"
-msgstr ""
+msgstr "Intet sæt af parameter er aktivt!"
 
 msgid "Select parameter"
 msgstr "Vælg parameter"
@@ -29508,10 +30582,7 @@ msgid "Tracer2 error"
 msgstr "Tracer2 fejl"
 
 msgid "Parameter for server request"
-msgstr ""
-
-msgid "Tile size:"
-msgstr ""
+msgstr "Parameter for server forespørgelse"
 
 msgid "Resolution:"
 msgstr "Opløsning:"
@@ -29523,19 +30594,19 @@ msgid "Threshold:"
 msgstr ""
 
 msgid "Points per circle:"
-msgstr ""
+msgstr "Punkter per cirkel:"
 
 msgid "Tag:"
 msgstr "Tag:"
 
 msgid "Preferred values:"
-msgstr ""
+msgstr "Foretrukne værdier:"
 
 msgid "Delete parameter \"{0}\"?"
-msgstr ""
+msgstr "Slet parameter \"{0}\"?"
 
 msgid "Add new"
-msgstr ""
+msgstr "Tilføj ny"
 
 msgid "Add predefined"
 msgstr ""
@@ -29568,7 +30639,7 @@ msgid "Export sigs..."
 msgstr ""
 
 msgid "Export all signatures to XML file."
-msgstr "Eksportér alle signaturer til en XML fil."
+msgstr "Eksporter alle signaturer til en XML fil."
 
 msgid "Export sigs to XML..."
 msgstr ""
@@ -29607,10 +30678,10 @@ msgid ""
 msgstr ""
 
 msgid "UID"
-msgstr ""
+msgstr "UID"
 
 msgid "KeyID"
-msgstr ""
+msgstr "NøgleID"
 
 msgid "OSM-Info"
 msgstr "OSM-info"
@@ -29697,12 +30768,14 @@ msgid ""
 "Selected key value pair was:\n"
 "{0}={1}"
 msgstr ""
+"Valgt nøgle værdi par var:\n"
+"{0}={1}"
 
 msgid "Sorry, there are no Signatures for the selected Segment."
 msgstr "Beklager, der er ingen signaturer for det valgte segment."
 
 msgid "Selected WaySegment was:"
-msgstr ""
+msgstr "Valgt VejSegment var:"
 
 msgid "Signature Files"
 msgstr "Signaturfiler"
@@ -29711,13 +30784,13 @@ msgid "OSM Signature Files"
 msgstr "OSM signaturfiler"
 
 msgid "Only digits allowed in osmid: ''{0}''."
-msgstr ""
+msgstr "Kun cifre tilladt i osmid: ''{0}''."
 
 msgid "Could not parse OpenPGP message."
-msgstr ""
+msgstr "Kunne ikke fortolke OpenPGP besked."
 
 msgid "Prepare stuff..."
-msgstr ""
+msgstr "Forbereder ting..."
 
 msgid "Parsing Signature data..."
 msgstr "Fortolker signaturdata..."
@@ -29726,16 +30799,16 @@ msgid "The Signature is broken!"
 msgstr "Signaturen er ødelagt!"
 
 msgid "Manipulation Warning"
-msgstr ""
+msgstr "Manipulations advarsel"
 
 msgid "Select a signing key from your keyring-file:"
-msgstr ""
+msgstr "Vælg en nøgle til underskrivelse fra din nøglerings-fil:"
 
 msgid "Don''t ask again for the key"
-msgstr ""
+msgstr "Spørg ikke igen efter nøglen"
 
 msgid "Use a random key from this list"
-msgstr ""
+msgstr "Brug en tilfældig nøgle fra denne liste"
 
 msgid "Create new Key"
 msgstr "Opret ny nøgle"
@@ -29756,25 +30829,25 @@ msgid "Signing canceled!"
 msgstr ""
 
 msgid "Please give a tolerance in meters"
-msgstr ""
+msgstr "Angiv en tolerance i meter"
 
 msgid "Select as much as you like:"
 msgstr "Vælg så mange som du har lyst til:"
 
 msgid "Survey"
-msgstr ""
+msgstr "Undersøgelse"
 
 msgid "Aerial Photography"
-msgstr ""
+msgstr "Luftfoto"
 
 msgid "Web Recherche"
-msgstr ""
+msgstr "Web søgning"
 
 msgid "Trusted persons told me"
 msgstr ""
 
 msgid "Which source did you use?"
-msgstr ""
+msgstr "Hvilken kilde har du brugt?"
 
 msgid "never"
 msgstr "aldrig"
@@ -29872,19 +30945,19 @@ msgid "Delete turn."
 msgstr "Slet sving."
 
 msgid "{0} lanes are not referenced in any turn-relation."
-msgstr ""
+msgstr "{0} baner er ikke refereret i en sving-relation."
 
 msgid "Put the ways in order."
-msgstr ""
+msgstr "Sæt veje i rækkefølge."
 
 msgid "Relation references non-existent (regular) lane {0}"
-msgstr ""
+msgstr "Relation henviser til ikke-eksisterende (almindelig) bane {0}"
 
 msgid "Relation references non-existent extra lane {0}"
-msgstr ""
+msgstr "Relation henviser til ikke-eksisterende ekstra bane {0}"
 
 msgid "Integer list \"{0}\" contains unexpected values."
-msgstr ""
+msgstr "Heltalsliste \"{0}\" indeholder uventede værdier."
 
 msgid "Create/Edit turn restriction..."
 msgstr "Opret/Rediger svingbegrænsninger..."
@@ -30111,7 +31184,7 @@ msgid "Warning: failed to load icon for turn restriction type ''{0}''"
 msgstr "Advarsel: kunne ikke indlæse ikon for svingbegrænsningstypen ''{0}''"
 
 msgid "please select a turn restriction type"
-msgstr "vælg venligst en svingbegrænsningstype"
+msgstr "vælg en svingbegrænsningstype"
 
 msgid ""
 "Select the vehicle types this turn restriction is <strong>not</strong> "
@@ -30196,7 +31269,7 @@ msgid "Turn Restrictions"
 msgstr "Svingbegrænsninger"
 
 msgid "Display and manage turn restrictions in the current data set"
-msgstr "Vis og håndter svingbegrænsninger i det aktuelle datasæt"
+msgstr "Vis og administrer svingbegrænsninger i det aktuelle datasæt"
 
 msgid "Open an editor for the selected turn restriction"
 msgstr "Åben en editor for den markerede svingbegrænsning"
@@ -30459,33 +31532,36 @@ msgid "Change to the Basic Editor and select a way"
 msgstr "Skift til den basale editor og vælg en vej"
 
 msgid "Undelete object..."
-msgstr ""
+msgstr "Gendan objekt..."
 
 msgid "Undelete object by id"
 msgstr "Gendan objekt udfra id"
 
 msgid "Unable to undelete node {0}. Object has likely been redacted"
 msgstr ""
+"Kan ikke gendanne punkt {0}. Objekt er sandsynligvis blevet redigeret"
 
 msgid "Unable to undelete way {0}. Object has likely been redacted"
-msgstr ""
+msgstr "Kan ikke gendanne vej {0}. Objekt er sandsynligvis blevet redigeret"
 
 msgid "Unable to undelete relation {0}. Object has likely been redacted"
 msgstr ""
+"Kan ikke gendanne relation {0}. Objekt er sandsynligvis blevet redigeret"
 
 msgid "Undelete Object"
-msgstr ""
+msgstr "Gendan objekt"
 
 msgid "Undelete object"
-msgstr ""
+msgstr "Gendan objekt"
 
 msgid ""
 "Enter the type and ID of the objects that should be undeleted, e.g., ''n1 "
 "w2''"
 msgstr ""
+"Indtast typen og ID på de objekter der skal gendannes f.eks. ''n1 w2''"
 
 msgid "Select if the data should be added into a new layer"
-msgstr ""
+msgstr "Vælg om dataene skal tilføjes til et nyt lag"
 
 msgid "Start undeleting"
 msgstr "Start gendannelse"
@@ -30500,7 +31576,7 @@ msgid "Add missing nodes at intersections of selected ways."
 msgstr "Tilføjer manglende punkter ved overskæringer af markerede veje."
 
 msgid "Please select one or more ways with intersections of segments."
-msgstr ""
+msgstr "Vælg en eller flere veje med skæringspunkter af segmenter."
 
 msgid "Align Way Nodes"
 msgstr "Tilpas vejpunkter"
@@ -30509,31 +31585,33 @@ msgid "Align nodes in a way"
 msgstr "Tilpas punkter i en vej"
 
 msgid "The way with selected nodes can not be straightened."
-msgstr ""
+msgstr "Vejen med valgte punkter kan ikke rettes ud."
 
 msgid "Internal error: number of nodes is {0}."
-msgstr ""
+msgstr "Intern fejl: Antallet af punkter er {0}."
 
 msgid "Extract node"
-msgstr ""
+msgstr "Udtræk punkt"
 
 msgid "Extracts node from a way"
-msgstr ""
+msgstr "Udtræker punkt fra en vej"
 
 msgid ""
 "This tool extracts node from its ways and requires single node to be "
 "selected."
 msgstr ""
+"Dette værktøj udtrækker punkt fra dets vej og kræver der vælges enkelt punkt."
 
 msgid "Extract node from line"
-msgstr ""
+msgstr "Udtræk punkt fra linje"
 
 msgid "Paste Relations"
-msgstr ""
+msgstr "Indsæt relationer"
 
 msgid ""
 "Paste relation membership from objects in the buffer onto selected object(s)"
 msgstr ""
+"Indsæt relationsmedlemskab fra objekter i bufferen på markerede objekt(er)"
 
 msgid "Split Object"
 msgstr "Opdel objekt"
@@ -30545,7 +31623,7 @@ msgid "The current selection cannot be used for splitting."
 msgstr "Det markerede kan ikke opdeles"
 
 msgid "The selected way is not closed."
-msgstr ""
+msgstr "Den valgte vej er ikke lukket."
 
 msgid "The selected way does not contain the selected node."
 msgid_plural "The selected way does not contain all the selected nodes."
@@ -30556,9 +31634,10 @@ msgid ""
 "The selected way is not a split way, please select split points or split way "
 "too."
 msgstr ""
+"Den valgte vej er ikke en opdelt vej, vælg delepunkt eller opdel vej også."
 
 msgid "The selected nodes can not be consecutive nodes in the object."
-msgstr ""
+msgstr "De udvalgte punkter kan ikke være efterfølgende punkter i objektet."
 
 msgid "Split adjacent ways"
 msgstr "Opdel tilstødende veje"
@@ -30579,8 +31658,7 @@ msgstr "Symmetri"
 msgid ""
 "Please select at least two nodes for symmetry axis and something else to "
 "mirror."
-msgstr ""
-"Vælg mindst to knudepunkter for symmetriakse og noget andet til spejling."
+msgstr "Vælg mindst to punkter for symmetriakse og noget andet til spejling."
 
 msgid "Copy tags from previous selection"
 msgstr "Kopier tags fra forrige valg"
@@ -30754,48 +31832,56 @@ msgid "Multitag Background: highlight"
 msgstr "Multitag baggrund: fremhæv"
 
 msgid "Replace Geometry"
-msgstr ""
+msgstr "Erstat geometri"
 
 msgid "Replace geometry of selected object with a new one"
-msgstr ""
+msgstr "Erstat geometri på markeret objekt med en ny"
 
 msgid ""
 "This tool replaces geometry of one object with another, and so requires "
 "exactly two objects to be selected."
 msgstr ""
+"Dette værktøj erstatter geometri af et objekt med et andet, og kræver "
+"nøjagtig to objekter, der skal vælges."
 
 msgid ""
 "This tool can only replace a node, upgrade a node to a way or a "
 "multipolygon, or replace a way with a way."
 msgstr ""
+"Dette værktøj kan kun erstatte et punkt, opgradere et punkt til en vej eller "
+"et multipolygon, eller erstatte en vej med en vej."
 
 msgid "Node belongs to way(s), cannot replace."
-msgstr ""
+msgstr "Punkt tilhører vej(e), kan ikke erstatte."
 
 msgid "Replace geometry for node {0}"
-msgstr ""
+msgstr "Erstat geometri for punkt {0}"
 
 msgid "Relation is not a multipolygon, cannot be used as a replacement."
-msgstr ""
+msgstr "Relation er ikke multipolygon, kan ikke anvendes som en erstatning."
 
 msgid ""
 "Please select one way that exists in the database and one new way with "
 "correct geometry."
 msgstr ""
+"Vælg en vej der findes i databasen, og en ny vej med korrekt geometri."
 
 msgid "The ways must be entirely within the downloaded area."
-msgstr ""
+msgstr "Vejene skal være helt inden det downloadede område."
 
 msgid ""
 "The way to be replaced cannot have any nodes with properties or relation "
 "memberships unless they belong to both ways."
 msgstr ""
+"Vejen der skal erstattes, kan ikke have nogen punkter med egenskaber eller "
+"relation medlemskaber, medmindre de tilhører begge veje."
 
 msgid "Exceeded iteration limit for robust method, using simpler method."
 msgstr ""
+"Overskredet iterationsgrænse for robust metode, bruger mere simpel metode."
 
 msgid "Replace geometry for way {0}"
-msgstr ""
+msgstr "Erstat geometri for vej {0}"
 
 msgid "Range of child primitives count"
 msgstr ""
@@ -30834,16 +31920,16 @@ msgid "Select intersecting ways"
 msgstr "Marker krydsende veje"
 
 msgid "Please select some ways to find connected and intersecting ways!"
-msgstr ""
+msgstr "Vælg nogle veje for at finde tilsluttede og krydsende veje!"
 
 msgid "All intersecting ways"
-msgstr ""
+msgstr "Alle krydsende veje"
 
 msgid "Select all intersecting ways"
-msgstr ""
+msgstr "Vælg alle krydsende veje"
 
 msgid "Please select some ways to find all connected and intersecting ways!"
-msgstr ""
+msgstr "Vælg nogle veje for at finde alle tilsluttede og krydsende veje!"
 
 msgid "Middle nodes"
 msgstr "Midterpunkter"
@@ -30852,53 +31938,57 @@ msgid "Select middle nodes"
 msgstr "Vælg midterpunkter"
 
 msgid "Please select two nodes connected by way!"
-msgstr ""
+msgstr "Vælg to punkter forbundet af vejen!"
 
 msgid "Too many ways are added: {0}!"
-msgstr ""
+msgstr "Alt for mange vej tilføjet: {0}!"
 
 msgid "All inside [testing]"
-msgstr ""
+msgstr "Alt indenfor [tester]"
 
 msgid "Select all inside selected polygons"
-msgstr "Marker"
+msgstr "Vælg alt helt indenfor valgte polygoner"
 
 msgid ""
 "Nothing found. Please select some closed ways or multipolygons to find all "
 "primitives inside them!"
 msgstr ""
+"Intet fundet. Vælg nogle lukkede veje eller multipolygons for at finde alle "
+"primitiver indenfor dem!"
 
 msgid "Area boundary [testing]"
-msgstr ""
+msgstr "Område grænse [tester]"
 
 msgid "Select relation or all ways that forms area boundary"
-msgstr ""
+msgstr "Vælg relation eller alle veje, der danner område grænse"
 
 msgid ""
 "Nothing found. Please select way that is a part of some polygon formed by "
 "connected ways"
 msgstr ""
+"Intet fundet. Vælg veje, der er en del af nogle polygon dannet af forbundne "
+"veje"
 
 msgid "Select Highway"
-msgstr "Marker Highway"
+msgstr "Vælg vej"
 
 msgid "Select highway for the name/ref given"
-msgstr ""
+msgstr "Vælg vej med samme navn/ref"
 
 msgid "Please select one or two ways for this action"
-msgstr "Marker venligst en eller to veje for denne handling"
+msgstr "Vælg en eller to veje for denne handling"
 
 msgid "Select last modified nodes"
-msgstr "Marker sidst ændrede punkter"
+msgstr "Vælg sidst ændrede punkter"
 
 msgid "Select last modified ways"
-msgstr "Marker sidst ændrede veje"
+msgstr "Vælg sidst ændrede veje"
 
 msgid "Select Way Nodes"
-msgstr "Marker vej-punkter"
+msgstr "Vælg vejpunkter"
 
 msgid "Select all nodes of a selected way."
-msgstr "Markere alle punkter på en markeret vej."
+msgstr "Vælg alle punkter på en valgt vej."
 
 msgid "Undo selection"
 msgstr "Fortryd markering"
@@ -30913,7 +32003,7 @@ msgid "Removes all nodes from selection"
 msgstr "Fjern alle punkter fra markeringen"
 
 msgid "Import Video"
-msgstr "Importér video"
+msgstr "Importer video"
 
 msgid "Sync a video against this GPS track"
 msgstr "Synkroniser en video med dette GPS spor"
@@ -30937,13 +32027,13 @@ msgid "Backward"
 msgstr "Tilbage"
 
 msgid "jumps n sec back"
-msgstr "springer n sek tilbage"
+msgstr "hopper n sek tilbage"
 
 msgid "Forward"
 msgstr "Fremad"
 
 msgid "jumps n sec forward"
-msgstr "springer n sek fremad"
+msgstr "hopper n sek fremad"
 
 msgid "Faster"
 msgstr "Hurtigere"
@@ -30958,10 +32048,10 @@ msgid "slower playback"
 msgstr "langsommere afspilning"
 
 msgid "Jump To"
-msgstr "Spring til"
+msgstr "Hop til"
 
 msgid "jumps to the entered gps time"
-msgstr "springer til den angivne gps-tid"
+msgstr "hopper til den angivne gps-tid"
 
 msgid "Loop"
 msgstr "Loop"
@@ -30973,7 +32063,7 @@ msgid "Keep centered"
 msgstr ""
 
 msgid "follows the video icon automatically"
-msgstr ""
+msgstr "følger videoikonet automatisk"
 
 msgid "Subtitles"
 msgstr "Undertekster"
@@ -30982,13 +32072,13 @@ msgid "Show subtitles in video"
 msgstr "Vis undertekster i video"
 
 msgid "Jump length"
-msgstr ""
+msgstr "Hop længde"
 
 msgid "Set the length of a jump"
-msgstr ""
+msgstr "Sæt længden af et hop"
 
 msgid "Jump in video for x ms"
-msgstr ""
+msgstr "Hop i video med x ms"
 
 msgid "Loop length"
 msgstr ""
@@ -30997,37 +32087,40 @@ msgid "Set the length around a looppoint"
 msgstr ""
 
 msgid "no deinterlacing"
-msgstr ""
+msgstr "ingen deinterlacing"
 
 msgid "deinterlacing using line doubling"
-msgstr ""
+msgstr "deinterlacing via liniefordobling"
 
 msgid "deinterlacing using linear interpolation"
-msgstr ""
+msgstr "deinterlacing via lineær interpolation"
 
 msgid ""
 "VLC library is not correctly initialized. Please check that VLC {0} is "
 "correctly installed on your system. Its architecture (32/64 bits) must also "
 "be the same as the JRE that runs JOSM."
 msgstr ""
+"VLC bibliotek er ikke korrekt initialiseret. Kontroller, at VLC {0} er "
+"korrekt installeret på dit system. Dets arkitektur (32/64 bit) skal også "
+"være den samme som den JRE, der kører JOSM."
 
 msgid "Jump to"
-msgstr "Gå til"
+msgstr "Hop til"
 
 msgid "Jump to GPS time"
-msgstr ""
+msgstr "Hop til GPS tid"
 
 msgid "Shows current position in the video"
-msgstr ""
+msgstr "Viser nuværende position i videoen"
 
 msgid "Sync"
-msgstr ""
+msgstr "Synk"
 
 msgid "Unable to find JNA Java library!"
-msgstr ""
+msgstr "Kan ikke finde JNA Java bibliotek!"
 
 msgid "Unable to find native libvlc library!"
-msgstr ""
+msgstr "Kan ikke finde oprindeligt libvlc bibliotek!"
 
 msgid "play"
 msgstr "afspil"
@@ -31039,7 +32132,7 @@ msgid "mute"
 msgstr "lyd fra"
 
 msgid "Walking Papers Scanned Map"
-msgstr ""
+msgstr "Walking Papers scannede kort"
 
 msgid ""
 "Display a map that was previously scanned and uploaded to walking-papers.org"
@@ -31049,15 +32142,16 @@ msgstr ""
 msgid ""
 "Enter a walking-papers.org URL or ID (the bit after the ?id= in the URL)"
 msgstr ""
+"Indtast en walking-papers.org URL eller id (den del efter ?id= i URL)"
 
 msgid "Could not read information from walking-papers.org the id \"{0}\""
-msgstr ""
+msgstr "Kunne ikke læse information fra walking-papers.org id \"{0}\""
 
 msgid "Walking Papers: {0}"
 msgstr "Walking Papers: {0}"
 
 msgid "Walking Papers layer ({0}) in zoom {1}"
-msgstr ""
+msgstr "Walking Papers lag ({0}) i zoom {1}"
 
 msgid "Way Download"
 msgstr "Vej-download"
@@ -31079,6 +32173,7 @@ msgstr "<html>Kunne ikke finde et unikt punkt at starte download fra.</html>"
 
 msgid "<html>There are no ways connected to node ''{0}''. Aborting.</html>"
 msgstr ""
+"<html>Der er ingen veje forbundet til punkt ''{0}''. Afbryder.</html>"
 
 msgid ""
 "Way downloader data inconsistency. Prior connected way ''{0}'' wasn''t "
@@ -31101,40 +32196,39 @@ msgstr ""
 "vej-download?</html>"
 
 msgid "Merge duplicate node?"
-msgstr ""
+msgstr "Læg dublerede punkter sammen?"
 
 msgid "<html>No more connected ways to download.</html>"
 msgstr "<html>Ikke flere forbundne veje at downloade.</html>"
 
 msgid "Node ''{0}'' is a junction with more than 2 connected ways."
-msgstr ""
+msgstr "Punkt ''{0}'' er et kryds med mere end 2 forbundne veje."
 
 msgid "Enter search expression here.."
 msgstr "Indtast søgeudtryk her.."
 
 msgid "Select waypoint to move map"
-msgstr ""
+msgstr "Vælg waypoint for at flytte kort"
 
 msgid "Waypoint search"
 msgstr "Waypoint søgning"
 
 msgid "Search after waypoint. Click and move the map view to the waypoint."
-msgstr "Søg efter waypointy. Klik og flyt kortvisningen til waypointet."
-
-msgid "Way Select"
-msgstr ""
+msgstr "Søg efter waypoint. Klik og flyt kortvisningen til waypointet."
 
 msgid "Add names from Wikipedia"
 msgstr "Tilføj navne fra Wikipedia"
 
 msgid ""
 "Fetches interwiki links from Wikipedia in order to add several name tags"
-msgstr ""
+msgstr "Henter interwiki links fra Wikipedia for at tilføje flere navne tags"
 
 msgid ""
 "Copies the {0} template to the system clipboard instantiated with the "
 "coordinates of the first selected node"
 msgstr ""
+"Kopier {0} skabelonen til systemets udklipsholder instantieret med "
+"koordinaterne for det første valgte punkt"
 
 msgid "Copy {0} template"
 msgstr "Kopier {0} skabelon"
@@ -31146,6 +32240,8 @@ msgid ""
 "Double click on item to search for object with article name (and center "
 "coordinate)"
 msgstr ""
+"Dobbeltklik på elementet for at søge efter objekt med artikelnavn (og centre "
+"koordinat)"
 
 msgid "Available via WIWOSM server"
 msgstr "Til rådighed via WIWOSM server"
diff --git a/i18n/po/de.po b/i18n/po/de.po
index 2027bf3..9150cd8 100644
--- a/i18n/po/de.po
+++ b/i18n/po/de.po
@@ -7,16 +7,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: de\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
-"PO-Revision-Date: 2015-05-08 08:58+0000\n"
-"Last-Translator: Dirk Stöcker <launchpad at dstoecker.de>\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
+"PO-Revision-Date: 2015-10-05 13:28+0000\n"
+"Last-Translator: Ettore Atalan <atalanttore at googlemail.com>\n"
 "Language-Team: JOSM\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:41+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:43+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: de\n"
 "X-Poedit-SearchPath-0: .\n"
 "X-Poedit-Basepath: /home/simon/src/josm.all/i18n\n"
@@ -75,47 +75,43 @@ msgid "Cause: "
 msgstr "Ursache: "
 
 msgid "Executing platform startup hook"
-msgstr "Plattform-Start ausführen"
+msgstr "Plattform-Starteinschubmethode wird ausgeführt"
 
 msgid "Building main menu"
-msgstr "Hauptmenü aufbauen"
+msgstr "Hauptmenü wird aufgebaut"
 
 msgid "Help"
 msgstr "Hilfe"
 
 msgid "Initializing OSM API"
-msgstr "OSM-API initialisieren"
+msgstr "OSM-API wird initialisiert"
 
 msgid "Initializing validator"
-msgstr "Datenüberprüfung initialisieren"
+msgstr "Datenüberprüfung wird initialisiert"
 
 msgid "Initializing presets"
-msgstr "Objektvorlagen initialisieren"
+msgstr "Objektvorlagen werden initialisiert"
 
 msgid "Initializing map styles"
-msgstr "Kartenstile initialisieren"
+msgstr "Kartenstile werden initialisiert"
 
 msgid "Loading imagery preferences"
-msgstr "Hintergrundbildeinstellungen laden"
+msgstr "Bildeinstellungen werden geladen"
 
 msgid "Updating user interface"
-msgstr "Nutzerinterface aktualisieren"
+msgstr "Benutzeroberfläche wird aktualisiert"
 
-msgid "{0} completed in {1}"
-msgstr "''{0}'' in {1} beendet"
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "Ignoriere die ungültige Datei-URL: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "Ungültige Adresse wird ignoriert: »{0}«"
 
 msgid "Warning"
-msgstr "Warnung"
+msgstr "Achtung"
 
-msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
-msgstr ""
-"Der Parameter \"downloadgps\" unterstützt keine Dateinamen oder URLs."
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "Ungültige Dateiadresse wird ignoriert: »{0}«"
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "Ignoriere die ungültige URL: \"{0}\""
+msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
+msgstr "Parameter »downloadgps« unterstützt keine Dateinamen oder Adressen."
 
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
@@ -143,7 +139,7 @@ msgid "Display the about screen."
 msgstr "Über dieses Programm"
 
 msgid "Java OpenStreetMap Editor"
-msgstr "Java-OpenStreetMap-Bearbeitung"
+msgstr "Java-OpenStreetMap-Editor"
 
 msgid "Version {0}"
 msgstr "Version {0}"
@@ -155,7 +151,7 @@ msgid "Java Version {0}"
 msgstr "Java-Version {0}"
 
 msgid "Homepage"
-msgstr "Webseite"
+msgstr "Internetseite"
 
 msgid "Bug Reports"
 msgstr "Fehler melden"
@@ -254,7 +250,7 @@ msgid "Add layers"
 msgstr "Ebenen hinzufügen"
 
 msgid "Invalid service URL."
-msgstr "Ungültige Dienst-URL."
+msgstr "Ungültige Dienstadresse."
 
 msgid "WMS Error"
 msgstr "WMS-Fehler"
@@ -333,7 +329,7 @@ msgid "conflict"
 msgstr "Konflikt"
 
 msgid "download"
-msgstr "heruntergeladene Daten"
+msgstr "Herunterladen"
 
 msgid "problem"
 msgstr "Problem"
@@ -345,7 +341,7 @@ msgid "next"
 msgstr "nächster"
 
 msgid "Nothing selected to zoom to."
-msgstr "Nichts ausgewählt, auf das gezoomt werden kann."
+msgstr "Nichts ausgewählt, das vergrößert werden kann."
 
 msgid "Information"
 msgstr "Information"
@@ -354,13 +350,13 @@ msgid "Zoom to {0}"
 msgstr "Auf {0} zoomen"
 
 msgid "Zoom the view to {0}."
-msgstr "Ansicht auf {0} zoomen."
+msgstr "Ansicht auf {0} vergrößern."
 
 msgid "View: {0}"
 msgstr "Anzeige: {0}"
 
 msgid "No conflicts to zoom to"
-msgstr "Keine Konflikte, auf die gezoomt werden kann"
+msgstr "Keine Konflikte, die vergrößern werden können"
 
 msgid "Changeset Manager"
 msgstr "Änderungssatzverwaltung"
@@ -384,7 +380,7 @@ msgid "No open changesets"
 msgstr "Keine offenen Änderungssätze"
 
 msgid "Downloading open changesets ..."
-msgstr "Offene Änderungssätze herunterladen …"
+msgstr "Offene Änderungssätze werden heruntergeladen …"
 
 msgid "Combine Way"
 msgstr "Linien verbinden"
@@ -475,6 +471,9 @@ msgstr "Dialogbedienfeld umschalten"
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Dialogbedienfeld umschalten, Kartenanzeige maximieren"
 
+msgid "Distribute Nodes"
+msgstr "Punkte verteilen"
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr "Gewählte Punkte gleichmäßig auf einer Linie verteilen."
 
@@ -491,7 +490,7 @@ msgstr ""
 "* Drei Punkte."
 
 msgid "Download from OSM..."
-msgstr "Vom OSM-Server herunterladen …"
+msgstr "Von OSM herunterladen…"
 
 msgid "Download map data from the OSM server."
 msgstr "Kartendaten vom OSM-Server herunterladen."
@@ -500,32 +499,32 @@ msgid ""
 "<html>This action will require {0} individual<br>download requests. Do you "
 "wish<br>to continue?</html>"
 msgstr ""
-"<html>Diese Aktion benötigt {0} individuelle Serveranfragen.<br>Wollen Sie "
+"<html>Diese Aktion benötigt {0} individuelle Serveranfragen.<br>Möchten Sie "
 "fortfahren?</html>"
 
 msgid "Download data"
 msgstr "Daten herunterladen"
 
 msgid "Download notes in current view"
-msgstr "OSM-Notizen in aktueller Ansicht herunterladen"
+msgstr "Hinweise in aktueller Ansicht herunterladen"
 
 msgid "Download object..."
-msgstr "Objekt herunterladen …"
+msgstr "Objekt herunterladen…"
 
 msgid "Download OSM object by ID."
 msgstr "OSM-Objekt mittels Kennung herunterladen."
 
 msgid "Download parent ways/relations..."
-msgstr "Elternrelationen, -linien herunterladen …"
+msgstr "Elternrelationen, -linien herunterladen…"
 
 msgid "Download objects referring to one of the selected objects"
 msgstr "Objekte mit Bezug auf eins der ausgewählten Objekte herunterladen"
 
 msgid "Duplicate"
-msgstr "Duplizieren"
+msgstr "Verdoppeln"
 
 msgid "Duplicate selection by copy and immediate paste."
-msgstr "Auswahl durch Kopieren und sofortiges Einfügen duplizieren."
+msgstr "Auswahl durch Kopieren und sofortiges Einfügen verdoppeln."
 
 msgid "Exit"
 msgstr "Beenden"
@@ -569,23 +568,24 @@ msgid "Export GPX file"
 msgstr "GPX-Datei exportieren"
 
 msgid "History"
-msgstr "Versionsprotokoll"
+msgstr "Chronik"
 
 msgid "Display history information about OSM ways, nodes, or relations."
-msgstr "Versionsprotokoll der Linien, Punkte oder Relationen anzeigen."
+msgstr ""
+"Chronikinformationen über OSM-Linien, Punkte oder Relationen anzeigen."
 
 msgid "Show history"
-msgstr "Versionsprotokoll anzeigen"
+msgstr "Chronik anzeigen"
 
 msgid "History (web)"
-msgstr "Versionsprotokoll (Web)"
+msgstr "Chronik (Web)"
 
 msgid ""
 "Display history information about OSM ways, nodes, or relations in web "
 "browser."
 msgstr ""
-"Versionsinformationen übver OSM-Linien, -Punkte oder -Relationen im "
-"Webbrowser anzeigen."
+"Chronikinformationen übver OSM-Linien, Punkte oder Relationen im Webbrowser "
+"anzeigen."
 
 msgid "New offset"
 msgstr "Neuer Versatz"
@@ -649,7 +649,8 @@ msgid "Joins areas that overlap each other"
 msgstr "Sich überlappende Flächen miteinander verbinden"
 
 msgid "Please select at least one closed way that should be joined."
-msgstr "Bitte mindestens eine geschlossene Linie zum Vereinigen wählen."
+msgstr ""
+"Bitte wählen Sie mindestens eine geschlossene Linie zum Verbinden aus."
 
 msgid ""
 "One of the selected ways is not closed and therefore cannot be joined."
@@ -658,15 +659,16 @@ msgstr ""
 "verbunden werden."
 
 msgid "Join area confirmation"
-msgstr "Bestätigung Gebiet vereinigen"
+msgstr "Bestätigung Gebiet verbinden"
 
 msgid "The selected way has nodes outside of the downloaded data region."
 msgid_plural ""
 "The selected ways have nodes outside of the downloaded data region."
 msgstr[0] ""
-"Die gewählte Linie enthält Punkte außerhalb des heruntergeladenen Gebietes."
+"Die ausgewählte Linie enthält Punkte außerhalb des heruntergeladenen "
+"Gebietes."
 msgstr[1] ""
-"Die gewählten Linien enthalten Punkte außerhalb des heruntergeladenen "
+"Die ausgewählten Linien enthalten Punkte außerhalb des heruntergeladenen "
 "Gebietes."
 
 msgid "This can lead to nodes being deleted accidentally."
@@ -679,7 +681,7 @@ msgid "Please abort if you are not sure"
 msgstr "Bitte abbrechen, falls Sie nicht sicher sind"
 
 msgid "The selected area is incomplete. Continue?"
-msgstr "Das gewählte Gebiet ist unvollständig. Fortfahren?"
+msgstr "Das ausgewählte Gebiet ist unvollständig. Fortfahren?"
 
 msgid "No intersection found. Nothing was changed."
 msgstr "Keine Überschneidung gefunden. Es wurde nichts geändert."
@@ -691,7 +693,7 @@ msgid "Reverting changes"
 msgstr "Änderungen umkehren"
 
 msgid "Removed duplicate nodes"
-msgstr "Doppelte Punkte entfernt"
+msgstr "Verdoppeln Punkte entfernt"
 
 msgid "Added node on all intersections"
 msgstr "Punkte auf allen Schnittpunkten erstellt"
@@ -755,7 +757,7 @@ msgid "Join Areas Function"
 msgstr "Funktion zum Flächen verbinden"
 
 msgid "Join Node to Way"
-msgstr "Punkt in die Linie einfügen"
+msgstr "Punkt mit der Linie verbinden"
 
 msgid "Include a node into the nearest way segments"
 msgstr "Einen Punkt in naheliegenden Linienabschnitten einbinden"
@@ -779,7 +781,7 @@ msgid "Enter Lat/Lon to jump to position."
 msgstr "Länge und Breite der Sprungposition angeben."
 
 msgid "You can also paste an URL from www.openstreetmap.org"
-msgstr "Sie können auch eine URL von www.openstreetmap.org einfügen"
+msgstr "Sie können auch eine Adresse von www.openstreetmap.org einfügen"
 
 msgid "Latitude"
 msgstr "Breitengrad"
@@ -788,10 +790,10 @@ msgid "Longitude"
 msgstr "Längengrad"
 
 msgid "Zoom (in metres)"
-msgstr "Zoom (in Meter)"
+msgstr "Vergrößern (in Meter)"
 
 msgid "URL"
-msgstr "URL"
+msgstr "Adresse"
 
 msgid "Jump there"
 msgstr "Dorthin springen"
@@ -800,7 +802,8 @@ msgid "Jump to Position"
 msgstr "Zu Position springen"
 
 msgid "Could not parse Latitude, Longitude or Zoom. Please check."
-msgstr "Länge, Breite oder Zoom konnten nicht gelesen werden. Bitte prüfen."
+msgstr ""
+"Länge, Breite oder Vergrößerung konnten nicht gelesen werden. Bitte prüfen."
 
 msgid "Unable to parse Lon/Lat"
 msgstr "Länge oder Breite nicht lesbar"
@@ -823,16 +826,16 @@ msgid "Imagery: {0}"
 msgstr "Hintergrundbild: {0}"
 
 msgid "Custom WMS Link"
-msgstr "Angepasste WMS-URL"
+msgstr "Angepasste WMS-Adresse"
 
 msgid "Supported Rectifier Services:"
-msgstr "Unterstützte Berichtigungsservices:"
+msgstr "Unterstützte Berichtigungsdienste:"
 
 msgid "Visit Homepage"
-msgstr "Webseite besuchen"
+msgstr "Internetseite besuchen"
 
 msgid "WMS URL or Image ID:"
-msgstr "WMS-URL oder Bildkennung:"
+msgstr "WMS-Adresse oder Bildkennung:"
 
 msgid "Add Rectified Image"
 msgstr "Berichtigtes Bild hinzufügen"
@@ -841,11 +844,11 @@ msgid ""
 "Couldn''t match the entered link or id to the selected service. Please try "
 "again."
 msgstr ""
-"Der eingegebene Link oder die ID konnte dem gewählten Service nicht "
+"Der eingegebene Link oder die Kennung konnte dem gewählten Dienst nicht "
 "zugeordnet werden. Bitte versuchen Sie es erneut."
 
 msgid "No valid WMS URL or id"
-msgstr "Keine gültige WMS-URL oder Kennung"
+msgstr "Keine gültige WMS-Adresse oder Kennung"
 
 msgid "Merge layer"
 msgstr "Ebene vereinigen"
@@ -977,7 +980,7 @@ msgid "Create a new map layer."
 msgstr "Eine neue Datenebene erstellen."
 
 msgid "URL Files"
-msgstr "URL-Dateien"
+msgstr "Adressdateien"
 
 msgid "Open..."
 msgstr "Öffnen …"
@@ -1014,7 +1017,7 @@ msgstr "existiert nicht"
 
 msgid "<html>Cannot open directory ''{0}''.<br>Please select a file.</html>"
 msgstr ""
-"<html>Verzeichnis \"{0}\" kann nicht geöffnet werden.<br>Bitte eine Datei "
+"<html>Verzeichnis »{0}« kann nicht geöffnet werden.<br>Bitte eine Datei "
 "auswählen.</html>"
 
 msgid "Open file"
@@ -1022,33 +1025,34 @@ msgstr "Datei öffnen"
 
 msgid "Opening {0} file..."
 msgid_plural "Opening {0} files..."
-msgstr[0] "Öffne {0} Datei …"
-msgstr[1] "Öffne {0} Dateien …"
+msgstr[0] "{0} Datei wird geöffnet …"
+msgstr[1] "{0} Dateien werden geöffnet …"
 
 msgid "Opening file ''{0}'' ..."
-msgstr "Datei \"{0}\" öffnen …"
+msgstr "Datei »{0}« wird geöffnet …"
 
 msgid "Open Location..."
 msgstr "Adresse öffnen …"
 
 msgid "Open an URL."
-msgstr "Eine URL öffnen."
+msgstr "Eine Adresse öffnen."
 
 msgid "Separate Layer"
 msgstr "Separate Ebene"
 
 msgid "Select if the data should be downloaded into a new layer"
-msgstr "Auswählen, ob die Daten in eine neue Ebene geladen werden sollen"
+msgstr ""
+"Auswählen, ob die Daten in eine neue Ebene heruntergeladen werden sollen"
 
 msgid "Enter URL to download:"
-msgstr "URL zum Herunterladen eingeben:"
+msgstr "Adresse zum Herunterladen eingeben:"
 
 msgid "Enter an URL from where data should be downloaded"
 msgstr ""
-"Bitte geben Sie eine URL ein, von der Daten heruntergeladen werden sollen"
+"Bitte geben Sie eine Adresse ein, von der Daten heruntergeladen werden sollen"
 
 msgid "Download Location"
-msgstr "Adresse herunterladen"
+msgstr "Ort herunterladen"
 
 msgid "Download URL"
 msgstr "URL herunterladen"
@@ -1072,8 +1076,8 @@ msgid ""
 "Cannot open URL ''{0}''<br>The following download tasks accept the URL "
 "patterns shown:<br>{1}"
 msgstr ""
-"URL ''{0}'' kann nicht geöffnet werden.<br>Die folgenden "
-"Herunterladefunktionen akzeptieren die angezeigten URL-Muster:<br>{1}"
+"Adresse »{0}« kann nicht geöffnet werden.<br>Die folgenden "
+"Herunterladefunktionen nehmen die angezeigten Adressmuster an:br>{1}"
 
 msgid ""
 "<h3>When one or more ways are selected, the shape is adjusted such, that all "
@@ -1139,6 +1143,33 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr "Bitte Linien mit Winkel von ungefähr 90 oder 180 Grad auswählen."
 
+msgid "Download from Overpass API ..."
+msgstr "Mittels Overpass-API laden …"
+
+msgid "Download map data from Overpass API server."
+msgstr "Kartendaten mittels Overpass-API laden"
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+"Erstellt eine Overpass-Suchanfrage unter Verwendung des Overpass-Turbo-"
+"Suchanfrageassistenten"
+
+msgid "Build query"
+msgstr "Suchanfrage erstellen"
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+"<html>Der Overpass-Assistent konnte die folgende Suchanfrage nicht auswerten:"
+
+msgid "Parse error"
+msgstr "Auswertungsfehler"
+
+msgid "Overpass query: "
+msgstr "Overpass-Abfrage: "
+
+msgid "Overpass server: "
+msgstr "Overpass-Server: "
+
 msgid "Paste"
 msgstr "Einfügen"
 
@@ -1246,7 +1277,7 @@ msgid "Also rename the file"
 msgstr "Die Datei auch umbenennen"
 
 msgid "Could not rename file ''{0}''"
-msgstr "Die Datei ''{0}'' konnte nicht umbenannt werden"
+msgstr "Datei »{0}« konnte nicht umbenannt werden"
 
 msgid "Report bug"
 msgstr "Fehler melden"
@@ -1300,7 +1331,7 @@ msgid "Save the current data to a new file."
 msgstr "Aktuelle Daten in einer neuen Datei speichern."
 
 msgid "Search Notes..."
-msgstr "Hinweise suchen…"
+msgstr "Hinweise suchen …"
 
 msgid "Download notes from the note search API"
 msgstr "Hinweise von der Such-API herunterladen"
@@ -1340,7 +1371,7 @@ msgid "Open session"
 msgstr "Sitzung öffnen"
 
 msgid "Loading session ''{0}''"
-msgstr "Sitzung ''{0}'' laden"
+msgstr "Sitzung »{0}« wird geladen"
 
 msgid "Data Error"
 msgstr "Datenfehler"
@@ -1350,7 +1381,7 @@ msgstr "Ein-/Ausgabe-Fehler"
 
 msgid "<html>Could not load session file ''{0}''.<br>Error is:<br>{1}</html>"
 msgstr ""
-"<html>Sitzungsdatei ''{0}'' konnte nicht geladen "
+"<html>Sitzungsdatei »{0}« konnte nicht geladen "
 "werden.<br>Fehler:<br>{1}</html>"
 
 msgid "Save Session As..."
@@ -1520,7 +1551,7 @@ msgid "UnGlue Ways"
 msgstr "Linien trennen"
 
 msgid "Duplicate nodes that are used by multiple ways."
-msgstr "Duplizieren von Punkten, welche von mehreren Linien genutzt werden."
+msgstr "Verdoppeln von Punkten, welche von mehreren Linien genutzt werden."
 
 msgid "This node is not glued to anything else."
 msgstr "Dieser Punkt ist mit nichts verbunden."
@@ -1741,13 +1772,13 @@ msgid "Upload all changes in the current selection to the OSM server."
 msgstr "Alle Änderungen in der aktuellen Auswahl zum OSM-Server hochladen."
 
 msgid "Checking parents for deleted objects"
-msgstr "Elternobjekte auf gelöschte Objekten prüfen."
+msgstr "Elternobjekte werden auf gelöschte Objekten geprüft."
 
 msgid "Reading parents of ''{0}''"
 msgstr "Eltern von ''{0}'' lesen"
 
 msgid "Checking for deleted parents in the local dataset"
-msgstr "Im lokalen Datensatz auf gelöschte Elternobjekte prüfen"
+msgstr "Im lokalen Datensatz wird auf gelöschte Elternobjekte geprüft"
 
 msgid "Validation"
 msgstr "Prüfung"
@@ -1785,19 +1816,19 @@ msgid "Toggle Wireframe view"
 msgstr "Drahtdarstellung umschalten"
 
 msgid "Zoom In"
-msgstr "Hineinzoomen"
+msgstr "Vergrößern"
 
 msgid "Zoom In (Keypad)"
-msgstr "Hineinzoomen (Nummernblock)"
+msgstr "Vergrößern (Ziffernblock)"
 
 msgid "Zoom Out"
-msgstr "Herauszoomen"
+msgstr "Verkleinern"
 
 msgid "Zoom Out (Keypad)"
-msgstr "Herauszoomen (Nummernblock)"
+msgstr "Verkleinern (Ziffernblock)"
 
 msgid "Zoom to"
-msgstr "Zoomen auf"
+msgstr "Vergrößern auf"
 
 msgid "Zoom to the object the first selected member refers to"
 msgstr ""
@@ -1882,7 +1913,7 @@ msgid "Download GPS"
 msgstr "GPS herunterladen"
 
 msgid "Downloading GPS data"
-msgstr "Hole GPS-Daten"
+msgstr "GPS-Daten werden heruntergeladen"
 
 msgid "Downloaded GPX Data"
 msgstr "Heruntergeladene GPS-Daten"
@@ -1941,7 +1972,7 @@ msgid "Download OSM"
 msgstr "OSM herunterladen"
 
 msgid "Downloading data"
-msgstr "Daten herunterladen"
+msgstr "Daten werden heruntergeladen"
 
 msgid ""
 "Ignoring exception because download has been canceled. Exception was: {0}"
@@ -1953,7 +1984,7 @@ msgid "No data found in this area."
 msgstr "In diesem Gebiet wurden keine Daten gefunden."
 
 msgid "OSM Server URL:"
-msgstr "OSM-Server-URL:"
+msgstr "OSM-Server-Adresse:"
 
 msgid "Command"
 msgstr "Befehl"
@@ -1975,13 +2006,13 @@ msgstr[0] "Konflikt beim Herunterladen"
 msgstr[1] "Konflikte beim Herunterladen"
 
 msgid "({0}/{1}) Loading parents of node {2}"
-msgstr "({0}/{1}) Eltern des Punktes {2} laden"
+msgstr "({0}/{1}) Eltern des Punktes {2} werden geladen"
 
 msgid "({0}/{1}) Loading parents of way {2}"
-msgstr "({0}/{1}) Eltern der Linie {2} laden"
+msgstr "({0}/{1}) Eltern der Linie {2} werden geladen"
 
 msgid "({0}/{1}) Loading parents of relation {2}"
-msgstr "({0}/{1}) Eltern der Relation {2} laden"
+msgstr "({0}/{1}) Eltern der Relation {2} werden geladen"
 
 msgid "Download session"
 msgstr "Sitzung herunterladen"
@@ -2030,10 +2061,10 @@ msgid ""
 msgid_plural ""
 "Click <strong>{0}</strong> to check the state of these objects on the server."
 msgstr[0] ""
-"<strong>{0}</strong> anklicken um den Status des Objektes auf dem Server zu "
+"<strong>{0}</strong> anklicken, um den Status des Objektes auf dem Server zu "
 "prüfen."
 msgstr[1] ""
-"<strong>{0}</strong> anklicken um den Status dieser Objekte auf dem Server "
+"<strong>{0}</strong> anklicken, um den Status dieser Objekte auf dem Server "
 "zu prüfen."
 
 msgid "Click <strong>{0}</strong> to ignore.</html>"
@@ -2149,15 +2180,6 @@ msgstr "Winkelfangen aktiviert."
 msgid "Finish drawing."
 msgstr "Zeichnen beenden."
 
-msgid "FIX"
-msgstr "FIXIEREN"
-
-msgid "draw angle snap"
-msgstr "Winkelfang zeichnen"
-
-msgid "draw angle snap highlight"
-msgstr "Winkelfang-Hervorhebung"
-
 msgid "Toggle snapping by {0}"
 msgstr "Umschalten des Einrastens mit {0}"
 
@@ -2179,6 +2201,15 @@ msgstr "0,45,90, …"
 msgid "0,30,45,60,90,..."
 msgstr "0,30,45,60,90, …"
 
+msgid "FIX"
+msgstr "FIXIEREN"
+
+msgid "draw angle snap"
+msgstr "Winkelfang zeichnen"
+
+msgid "draw angle snap highlight"
+msgstr "Winkelfang-Hervorhebung"
+
 msgid "Angle snapping"
 msgstr "Winkelfang"
 
@@ -2319,9 +2350,6 @@ msgstr ""
 "Parallellinienerzeugung\n"
 "Die ausgewählten Linien müssen einen einfachen, unverzweigten Pfad bilden"
 
-msgid "Make parallel way error"
-msgstr "Fehler beim Erzeugen einer parallelen Linie"
-
 msgid "Drag play head"
 msgstr "Abspielmarke bewegen"
 
@@ -2390,17 +2418,17 @@ msgstr[0] "Virtuellen Punkt zu Linie hinzufügen und bewegen"
 msgstr[1] "Virtuellen Punkt zu {0} Linien hinzufügen und bewegen"
 
 msgid "Zoom"
-msgstr "Zoomen"
+msgstr "Vergrößern"
 
 msgid "Zoom and move map"
-msgstr "Zoomen und Karte verschieben"
+msgstr "Vergrößern und Karte verschieben"
 
 msgid ""
 "Zoom by dragging or Ctrl+. or Ctrl+,; move with Ctrl+up, left, down, right; "
 "move zoom with right button"
 msgstr ""
-"Zoomen mit ziehen oder Strg+. oder Strg+,; Verschieben mit Strg+hoch, links, "
-"runter, rechts; Zoom verschieben mit rechter Maus"
+"Vergrößern mit ziehen oder Strg+. oder Strg+,; Verschieben mit Strg+hoch, "
+"links, runter, rechts; Vergrößerung mit rechter Maus verschieben"
 
 msgid "Add all objects selected in the current dataset after the last member"
 msgstr ""
@@ -2556,9 +2584,15 @@ msgstr "Alle Objekte"
 msgid "Also include incomplete and deleted objects in search."
 msgstr "Auch unvollständige und gelöschte Objekte in Suche einschließen"
 
+msgid "standard"
+msgstr "Standard"
+
 msgid "regular expression"
 msgstr "Regulärer Ausdruck"
 
+msgid "MapCSS selector"
+msgstr "MapCSS-Selektor"
+
 msgid "add toolbar button"
 msgstr "Als Schaltfläche in Werkzeugleiste"
 
@@ -2789,6 +2823,10 @@ msgid "RX"
 msgstr "RX"
 
 msgctxt "search"
+msgid "CSS"
+msgstr "CSS"
+
+msgctxt "search"
 msgid "A"
 msgstr "A"
 
@@ -2797,7 +2835,7 @@ msgid ""
 "\n"
 "{2}"
 msgstr ""
-"Der reguläre Ausdruck \"{0}\" hat einen Fehler an Position {1}.\n"
+"Der reguläre Ausdruck »{0}« hat einen Fehler an Position {1}.\n"
 "Fehlermeldung:\n"
 "{2}"
 
@@ -2806,11 +2844,12 @@ msgid ""
 "\n"
 "{1}"
 msgstr ""
-"Der reguläre Ausdruck \"{0}\" hat einen Fehler. Fehlermeldung:\n"
+"Der reguläre Ausdruck »{0}« hat einen Fehler. Fehlermeldung:\n"
+"\n"
 "{1}"
 
 msgid "Expecting <i>min</i>/<i>max</i> after ''timestamp''"
-msgstr "Angaben <i>min</i>/<i>max</i> hinter ''timestamp'' erwartet"
+msgstr "Angaben <i>min</i>/<i>max</i> werden hinter »timestamp« erwartet"
 
 msgid "Range of primitive ids expected"
 msgstr "Bereich von Objektkennungen erwartet"
@@ -2839,6 +2878,9 @@ msgstr "Erwarte einen Zahlenbereich"
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr "Unerwartete Kennung: erwartet {0}, erhalten {1}"
 
+msgid "Failed to parse MapCSS selector"
+msgstr "Fehler beim Einlesen des MapCSS-Selektors"
+
 msgid "Unexpected token: {0}"
 msgstr "Unerwartete Daten: {0}"
 
@@ -2998,8 +3040,8 @@ msgstr[1] "''{0}'' entfernen für {1} Objekte"
 
 msgid "Set {0}={1} for {2} object"
 msgid_plural "Set {0}={1} for {2} objects"
-msgstr[0] "{0}={1} setzen für {2} Objekt"
-msgstr[1] "{0}={1} setzen für {2} Objekte"
+msgstr[0] "{0}={1} für {2} Objekt setzen"
+msgstr[1] "{0}={1} für {2} Objekte setzen"
 
 msgid "Deleted {0} tags for {1} object"
 msgid_plural "Deleted {0} tags for {1} objects"
@@ -3170,13 +3212,13 @@ msgid "Resolve conflicts in deleted state in {0}"
 msgstr "Konflikte im Löschstatus für {0} auflösen"
 
 msgid "Set the ''modified'' flag for node {0}"
-msgstr "Die ''Modifiziert''-Eigenschaft für den Punkt {0} setzen"
+msgstr "Die ''Modifiziert''-Eigenschaft für den Punkt {0} festlegen"
 
 msgid "Set the ''modified'' flag for way {0}"
-msgstr "Die ''Modifiziert''-Eigenschaft für die Linie {0} setzen"
+msgstr "Die ''Modifiziert''-Eigenschaft für die Linie {0} festlegen"
 
 msgid "Set the ''modified'' flag for relation {0}"
-msgstr "Die ''Modifiziert''-Eigenschaft für die Relation {0} setzen"
+msgstr "Die ''Modifiziert''-Eigenschaft für die Relation {0} festlegen"
 
 msgid "Resolve conflicts in member list of relation {0}"
 msgstr "Konflikte in der Elementenliste für Relation {0} auflösen"
@@ -3340,25 +3382,43 @@ msgstr ""
 "<html>Erstellen des fehlenden Zwischenspeicherverzeichnisses fehlgeschlagen: "
 "{0}</html>"
 
+msgid "Unable to delete temporary file {0}"
+msgstr "Temporäre Datei kann nicht gelöscht werden {0}"
+
+msgid "Unable to set file non-readable {0}"
+msgstr "Datei kann nicht als nicht lesbar festgelegt werden {0}"
+
+msgid "Unable to set file non-writable {0}"
+msgstr "Datei kann nicht als nicht schreibbar festgelegt werden {0}"
+
+msgid "Unable to set file non-executable {0}"
+msgstr "Datei kann nicht als nicht ausführbar festgelegt werden {0}"
+
+msgid "Unable to set file readable {0}"
+msgstr "Datei kann nicht als lesbar festgelegt werden {0}"
+
+msgid "Unable to set file writable {0}"
+msgstr "Datei kann nicht als schreibbar festgelegt werden {0}"
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
 msgstr ""
-"Fehler beim Setzen der Voreinstellungen, da das angegebene Verzeichnis "
+"Fehler beim Festlegen der Einstellungen, da das angegebene Verzeichnis "
 "''{0}'' kein Verzeichnis ist."
 
 msgid ""
 "<html>Failed to initialize preferences.<br>Preference directory ''{0}'' is "
 "not a directory.</html>"
 msgstr ""
-"<html>Fehler beim Setzen der Voreinstellungen, da das angegebene Verzeichnis "
+"<html>Fehler beim Festlegen der Einstellungen, da das angegebene Verzeichnis "
 "\"{0}\" kein Verzeichnis ist.</html>"
 
 msgid ""
 "Failed to initialize preferences. Failed to create missing preference "
 "directory: {0}"
 msgstr ""
-"Fehler beim Setzen der Voreinstellungen, da das Verzeichnis ''{0}'' nicht "
+"Fehler beim Festlegen der Einstellungen, da das Verzeichnis ''{0}'' nicht "
 "erstellt werden konnte."
 
 msgid ""
@@ -3406,7 +3466,7 @@ msgid "Layer: {0}"
 msgstr "Ebene: {0}"
 
 msgid "Failed to persist preferences to ''{0}''"
-msgstr "Fehler beim Speichern der Voreinstellungen in ''{0}''"
+msgstr "Fehler beim Speichern der Einstellungen in ''{0}''"
 
 msgid ""
 "Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
@@ -3479,14 +3539,53 @@ msgctxt "compass"
 msgid "E"
 msgstr "O"
 
-msgid "Not in cache"
-msgstr "Nicht im Zwischenspeicher"
-
 msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr ""
 "Projektion ''{0}'' nicht gefunden, Lesezeichen ''{1}'' kann nicht verwendet "
 "werden"
 
+msgid "HTTP error {0} when loading tiles"
+msgstr "HTTP-Fehler {0} beim Laden der Kacheln"
+
+msgid "Error downloading tiles: {0}"
+msgstr "Fehler beim Herunterladen von Kacheln: {0}"
+
+msgid "Could not load image from tile server"
+msgstr "Konnte Bild nicht vom Kachelserver laden"
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+"{0} ist kein gültiges WMS-Argument. Bitte überprüfen Sie diese Server-"
+"Adresse:\n"
+"{1}"
+
+msgid "Select WMTS layer"
+msgstr "WMTS-Ebene auswählen"
+
+msgid "Layer name"
+msgstr "Ebenenname"
+
+msgid "Projection"
+msgstr "Projektion"
+
+msgid "Matrix set identifier"
+msgstr "Matrixsatzbezeichner"
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr "Im getCapabilities-Dokument sind keine Ebenen bestimmt: {0}"
+
+msgid "No layer selected"
+msgstr "Keine Ebene ausgewählt"
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
+msgstr ""
+"Nur quadratische Kacheln werden unterstützt. {0}x{1} von Server für "
+"KachelMatrixbezeichner {2} zurückgegeben"
+
 msgid "ID > 0 expected. Got {0}."
 msgstr "Kennung >= 0 erwartet, jedoch {0} erhalten."
 
@@ -3710,6 +3809,12 @@ msgstr "Text"
 msgid "areatext"
 msgstr "Flächentext"
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr "UTM-Projektion (''+proj=utm'') erfordert Parameter ''+zone=...''."
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr "Erwarteter Ganzzahlwert im Bereich 1-60 für Parameter ''+zone=...''."
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr "Parameter muss mit einem ''+''-Zeichen beginnen (''{0}'' gefunden)"
 
@@ -3737,6 +3842,9 @@ msgstr "Ellipsoid ''{0}'' wird nicht unterstützt."
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr "Kombination von Ellipsoidparametern wird nicht unterstützt."
 
+msgid "Unknown datum identifier: ''{0}''"
+msgstr "Unbekannte Datumsbezeichnung: ''{0}''"
+
 msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr "Ellipsoid erforderlich (+ellps=* oder +a=*, +b=*)"
 
@@ -3745,9 +3853,6 @@ msgstr ""
 "Gitterverschiebungs-Datei ''{0}'' wird für die Option +nadgrids nicht "
 "unterstützt."
 
-msgid "Unknown datum identifier: ''{0}''"
-msgstr "Unbekannte Datumsbezeichnung: ''{0}''"
-
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
 msgstr "Datum erforderlich (+datum=*, +towgs84=* or +nadgrids=*)"
 
@@ -3823,13 +3928,13 @@ msgstr ""
 " \"{1}\""
 
 msgid "validation error"
-msgstr "Validierungsfehler"
+msgstr "Prüffehler"
 
 msgid "validation warning"
-msgstr "Validierungswarnung"
+msgstr "Prüfwarnung"
 
 msgid "validation other"
-msgstr "Andere Validierung"
+msgstr "Andere Prüfung"
 
 msgid "Running test {0}"
 msgstr "Test {0} ausführen"
@@ -3847,25 +3952,25 @@ msgid "E-mail address contains an invalid domain: {0}"
 msgstr "E-Mail-Adresse enthält eine ungültige Domain: {0}"
 
 msgid "URL contains non-ascii characters"
-msgstr "URL enthält Nicht-ASCII-Zeichen"
+msgstr "Adresse enthält Nicht-ASCII-Zeichen"
 
 msgid "URL is invalid"
-msgstr "URL ist ungültig"
+msgstr "Adresse ist ungültig"
 
 msgid "URL contains an invalid protocol: {0}"
-msgstr "URL enthält ein ungültiges Protokoll: {0}"
+msgstr "Adresse enthält ein ungültiges Protokoll: {0}"
 
 msgid "URL contains an invalid authority: {0}"
-msgstr "URL enthält eine ungültige Authority: {0}"
+msgstr "Adresse enthält eine ungültige Authority: {0}"
 
 msgid "URL contains an invalid path: {0}"
-msgstr "URL enthält einen ungültigen Pfad: {0}"
+msgstr "Adresse enthält einen ungültigen Pfad: {0}"
 
 msgid "URL contains an invalid query: {0}"
-msgstr "URL enthält eine ungültige Suchanfrage: {0}"
+msgstr "Adresse enthält eine ungültige Suchanfrage: {0}"
 
 msgid "URL contains an invalid fragment: {0}"
-msgstr "URL enthält ein ungültiges Fragment: {0}"
+msgstr "Adresse enthält ein ungültiges Fragment: {0}"
 
 msgid "Addresses"
 msgstr "Adressen"
@@ -3880,10 +3985,10 @@ msgid "House number without street"
 msgstr "Hausnummer ohne Straße"
 
 msgid "House number ''{0}'' duplicated"
-msgstr "Hausnummer ''{0}'' doppelt"
+msgstr "Hausnummer »{0}« verdoppelt"
 
 msgid "Duplicate house numbers"
-msgstr "Doppelte Hausnummern"
+msgstr "Hausnummern verdoppeln"
 
 msgid "Multiple street names in relation"
 msgstr "Mehrere Straßennamen in Relation"
@@ -3996,7 +4101,7 @@ msgid "Boundary duplicated nodes"
 msgstr "Doppelte Grenzpunkte"
 
 msgid "Power duplicated nodes"
-msgstr "Doppelte Strom-Punkte"
+msgstr "Doppelte Strompunkte"
 
 msgid "Natural duplicated nodes"
 msgstr "Doppelte Naturpunkte"
@@ -4081,7 +4186,7 @@ msgid "Checks for errors in internet-related tags."
 msgstr "Prüft auf Fehler in Internet-bezogenen Tags."
 
 msgid " URL cannot be converted to ASCII: {0}"
-msgstr " URL kann nicht in ASCII umgewandelt werden: {0}"
+msgstr " Adresse kann nicht in ASCII umgewandelt werden: {0}"
 
 msgid "''{0}'': {1}"
 msgstr "''{0}'': {1}"
@@ -4389,10 +4494,10 @@ msgstr ""
 "{0}"
 
 msgid "Suspicious tag/value combinations"
-msgstr "Verdächtige Schlüssel/Wert-Kombinationen"
+msgstr "Verdächtige Merkmal/Wert-Kombinationen"
 
 msgid "Key ''{0}'' invalid."
-msgstr "Schlüssel \"{0}\" ungültig."
+msgstr "Schlüssel »{0}« ist ungültig."
 
 msgid "Tag value contains character with code less than 0x20"
 msgstr "Eigenschaftswert enthält Zeichen mit Wert unter 0x20"
@@ -4409,9 +4514,6 @@ msgstr "Schlüsselname länger als erlaubt"
 msgid "Tags with empty values"
 msgstr "Merkmale mit leerem Wert"
 
-msgid "Invalid property key"
-msgstr "Ungültiger Eigenschaftsschlüssel"
-
 msgid "Invalid white space in property key"
 msgstr "Ungültiger Leerraum in Eigenschaftsschlüssel"
 
@@ -4421,12 +4523,24 @@ msgstr "Werte beginnen oder enden mit Leerraum"
 msgid "Property values contain HTML entity"
 msgstr "Werte enthalten HTML-Entität"
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr "Schlüssel ''{0}'' ähnelt ''{1}''."
+
+msgid "Misspelled property key"
+msgstr "Falsch geschriebener Eigenschaftsschlüssel"
+
 msgid "Key ''{0}'' not in presets."
 msgstr "Schlüssel \"{0}\" nicht in Vorlagen."
 
 msgid "Presets do not contain property key"
 msgstr "Vorlagen enthalten Schlüssel nicht"
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr "Wert ''{0}'' für Schlüssel ''{1}'' sieht aus wie ''{2}''."
+
+msgid "Misspelled property value"
+msgstr "Falsch geschriebener Wert"
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr "Wert \"{0}\" für Schlüssel \"{1}\" nicht in Vorlagen."
 
@@ -4437,7 +4551,7 @@ msgid "FIXMES"
 msgstr "Korrekturnotizen"
 
 msgid "Check property keys."
-msgstr "Schlüssel prüfen."
+msgstr "Eigenschaftsschlüssel prüfen."
 
 msgid "Validate that property keys are valid checking against list of words."
 msgstr ""
@@ -4449,7 +4563,7 @@ msgstr "Komplexen Eigenschaftsprüfer verwenden"
 
 msgid "Validate property values and tags using complex rules."
 msgstr ""
-"Gültigkeit von Eigenschaftswerten und Schlüsseln anhand komplexer Regeln "
+"Gültigkeit von Eigenschaftswerten und Schlagwörtern anhand komplexer Regeln "
 "prüfen."
 
 msgid "TagChecker source"
@@ -4466,7 +4580,7 @@ msgstr ""
 "Prüft die Gültigkeit von Eigenschaftswerten anhand von Objektvorlagen."
 
 msgid "Check for FIXMES."
-msgstr "Auf Korrekturnotizen prüfen."
+msgstr "Auf KORREKTURNOTIZEN prüfen."
 
 msgid "Looks for nodes or ways with FIXME in any property value."
 msgstr ""
@@ -4483,13 +4597,13 @@ msgid "Incorrect number of parameters"
 msgstr "Ungültige Anzahl an Parametern"
 
 msgid "Could not find warning level"
-msgstr "Konnte Warnstufe nicht finden"
+msgstr "Warnstufe konnte nicht gefunden werden"
 
 msgid "Illegal expression ''{0}''"
-msgstr "Ungültiger Ausdruck \"{0}\""
+msgstr "Ungültiger Ausdruck »{0}«"
 
 msgid "Illegal regular expression ''{0}''"
-msgstr "Ungültiger regulärer Ausdruck \"{0}\""
+msgstr "Ungültiger regulärer Ausdruck »{0}«"
 
 msgid "Turnrestrictions"
 msgstr "Abbiegerestriktionen"
@@ -4616,6 +4730,9 @@ msgstr "Linienpunkt nahe anderer Linie"
 msgid "Connected way end node near other way"
 msgstr "Verbundenes Linienende nahe anderer Linie"
 
+msgid "Unconnected nodes without physical tags"
+msgstr "Unverbundener Punkt ohne physische Merkmale"
+
 msgid "Untagged and unconnected nodes"
 msgstr "Punkte ohne Merkmale und ohne Verbindung"
 
@@ -4624,9 +4741,6 @@ msgstr ""
 "Dieser Test prüft auf Punkte ohne Merkmale, welche nicht Teil einer Linie "
 "sind."
 
-msgid "Unconnected nodes without physical tags"
-msgstr "Unverbundener Punkt ohne physische Merkmale"
-
 msgid "No tags"
 msgstr "Keine Merkmale"
 
@@ -4778,7 +4892,7 @@ msgid "Conflict"
 msgstr "Konflikt"
 
 msgid "Authentication Failed"
-msgstr "Authentifizierung fehlgeschlagen"
+msgstr "Legitimierung fehlgeschlagen"
 
 msgid "Access to redacted version ''{0}'' of {1} {2} is forbidden."
 msgstr "Zugriff auf redigierte Version ''{0}'' von {1} {2} ist untersagt."
@@ -4796,7 +4910,7 @@ msgid "Communication with OSM server failed"
 msgstr "Kommunikation mit dem OSM Server fehlgeschlagen"
 
 msgid "Authentication failed"
-msgstr "Authentifizierung fehlgeschlagen"
+msgstr "Legitimierung fehlgeschlagen"
 
 msgid "Unknown host"
 msgstr "Rechner unbekannt"
@@ -4810,7 +4924,7 @@ msgid "Show help information"
 msgstr "Hilfe anzeigen"
 
 msgid "Downloading \"Message of the day\""
-msgstr "Nachricht des Tages herunterladen"
+msgstr "\"Nachricht des Tages\" wird heruntergeladen"
 
 msgid "Failed to read MOTD. Exception was: {0}"
 msgstr "Lesen von MOTD fehlgeschlagen. Fehler: {0}"
@@ -4824,6 +4938,7 @@ msgstr "Klicken, um den Dialog zu schließen"
 msgid "Imagery offset"
 msgstr "Hintergrundbild-Versatz"
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr "Hintergrundbild"
 
@@ -4852,7 +4967,7 @@ msgid "Download the bounding box"
 msgstr "Koordinatenbereich herunterladen"
 
 msgid "Download the location at the URL (with lat=x&lon=y&zoom=z)"
-msgstr "Position aus der URL herunterladen (mit lat=x&lon=y&zoom=z)"
+msgstr "Ort aus der Adresse herunterladen (mit lat=x&lon=y&zoom=z)"
 
 msgid "Open a file (any file type that can be opened with File/Open)"
 msgstr ""
@@ -4862,7 +4977,7 @@ msgid "Download the bounding box as raw GPS"
 msgstr "Koordinatenbereich als GPS-Spuren herunterladen"
 
 msgid "Download the location at the URL (with lat=x&lon=y&zoom=z) as raw GPS"
-msgstr "GPS-Daten am Ort der URL (mit lat=x&lon=y&zoom=z) herunterladen"
+msgstr "GPS-Daten am Ort der Adresse (mit lat=x&lon=y&zoom=z) herunterladen"
 
 msgid "Select with the given search"
 msgstr "Mit der angegebenen Suche auswählen"
@@ -4871,13 +4986,13 @@ msgid "Launch in maximized mode"
 msgstr "Mit maximiertem Fenster starten"
 
 msgid "Reset the preferences to default"
-msgstr "Die Einstellungen auf Standardwerte zurücksetzen"
+msgstr "Einstellungen auf Standardwerte zurücksetzen"
 
 msgid "Changes preferences according to the XML file"
 msgstr "Führt Änderungen an den Einstellungen nach der XML-Datei durch"
 
 msgid "Set preference key to value"
-msgstr "Einstellungsschlüssel auf Wert setzen"
+msgstr "Einstellungsschlüssel auf Wert festlegen"
 
 msgid "Set the language"
 msgstr "Sprache einstellen"
@@ -4913,7 +5028,7 @@ msgid "/PATH/TO/JOSM/CACHE   "
 msgstr "/PFAD/ZUM/JOSM/CACHE   "
 
 msgid "Set the cache directory"
-msgstr "Legen Sie das Cache-Verzeichnis fest"
+msgstr "Legen Sie das Zwischenspeicherverzeichnis fest"
 
 msgid "/PATH/TO/JOSM/HOMEDIR "
 msgstr "/PFAD/ZU/JOSM/HOME-VERZEICHNIS "
@@ -4967,25 +5082,25 @@ msgid "Enabled detailed debug level (trace)"
 msgstr "Detaillierte Debug-Nachrichten aktiviert (trace)"
 
 msgid "Initializing"
-msgstr "Initialisieren"
+msgstr "Initialisierungsvorgang"
 
 msgid "Updating plugins"
-msgstr "Plugins aktualisieren"
+msgstr "Plugins werden aktualisiert"
 
 msgid "Installing updated plugins"
-msgstr "Aktualisierte Plugins installieren"
+msgstr "Aktualisierte Plugins werden installiert"
 
 msgid "Loading early plugins"
-msgstr "Zeitige Plugins laden"
+msgstr "Frühzeitige Plugins werden geladen"
 
 msgid "Setting defaults"
-msgstr "Voreinstellungen setzen"
+msgstr "Voreinstellungen werden festgelegt"
 
 msgid "Creating main GUI"
-msgstr "Hauptfenster erzeugen"
+msgstr "Hauptoberfläche wird erzeugt"
 
 msgid "Loading plugins"
-msgstr "Plugins laden"
+msgstr "Plugins werden geladen"
 
 msgid ""
 "''{0}'' is not a valid value for argument ''{1}''. Possible values are {2}, "
@@ -5018,7 +5133,7 @@ msgid ""
 "restart."
 msgstr ""
 "Kein nutzbares IPv6-Netzwerk erkannt, bevorzuge nach dem nächsten Neustart "
-"Pv4 vor IPv4."
+"IPv4 vor IPv6."
 
 msgid "Unsaved osm data"
 msgstr "Nicht gespeicherte osm-Daten"
@@ -5069,45 +5184,56 @@ msgstr ""
 "könnte mit falschen Proxy-Einstellungen zusammenhängen. Möchten Sie die "
 "Proxy-Einstellungen jetzt ändern?"
 
+msgctxt "menu"
 msgid "File"
 msgstr "Datei"
 
-msgid "Session"
-msgstr "Sitzung"
+msgctxt "menu"
+msgid "Edit"
+msgstr "Bearbeiten"
 
+msgctxt "menu"
 msgid "View"
 msgstr "Ansicht"
 
+msgctxt "menu"
 msgid "Tools"
 msgstr "Werkzeuge"
 
+msgctxt "menu"
 msgid "More tools"
-msgstr "Werkzeuge 2"
+msgstr "Weitere Werkzeuge"
 
+msgctxt "menu"
 msgid "Data"
 msgstr "Daten"
 
+msgctxt "menu"
 msgid "Selection"
 msgstr "Auswahl"
 
+msgctxt "menu"
 msgid "Presets"
 msgstr "Vorlagen"
 
 msgid "More..."
 msgstr "Mehr …"
 
+msgctxt "menu"
 msgid "GPS"
 msgstr "GPS"
 
+msgctxt "menu"
 msgid "Windows"
 msgstr "Fenster"
 
+msgctxt "menu"
+msgid "Help"
+msgstr "Hilfe"
+
 msgid "Menu: {0}"
 msgstr "Menü: {0}"
 
-msgid "Save and load the current session (list of layers, etc.)"
-msgstr "Speichern und Laden der aktuellen Sitzung (Ebenenliste, …)"
-
 msgid "Edit toolbar"
 msgstr "Werkzeugleiste bearbeiten"
 
@@ -5122,7 +5248,7 @@ msgid "Click to open the tagging presets tab in the preferences"
 msgstr "Klicken, um die Objektvorlagen in den Einstellungen zu öffnen"
 
 msgid "Imagery preferences"
-msgstr "Hintergrundbildeinstellungen"
+msgstr "Bildeinstellungen"
 
 msgid "Click to open the imagery tab in the preferences"
 msgstr ""
@@ -5131,6 +5257,7 @@ msgstr ""
 msgid "Search menu items"
 msgstr "Menüeinträge suchen"
 
+msgctxt "menu"
 msgid "Audio"
 msgstr "Audio"
 
@@ -5165,10 +5292,10 @@ msgid "Move down"
 msgstr "Nach unten verschieben"
 
 msgid "Zoom in"
-msgstr "Hineinzoomen"
+msgstr "Vergrößern"
 
 msgid "Zoom out"
-msgstr "Herauszoomen"
+msgstr "Verkleinern"
 
 msgid "scale"
 msgstr "Skala"
@@ -5255,70 +5382,17 @@ msgstr "Im Hintergrund"
 msgid "Click to run job in background"
 msgstr "Klicken, um Arbeit im Hintergrund auszuführen"
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-"Luftbilder können falsch ausgerichtet sein. Bitte überprüfen Sie deren "
-"Versatz mithilfe von GPS-Spuren!"
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-
-msgid "Details..."
-msgstr "Details …"
-
-msgid "Hide this message and never show it again"
-msgstr "Diese Meldung ausblenden und nie wieder anzeigen"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-"<html>Bitte bestätigen Sie, dass <strong>1 Objekt</strong> aus <strong>1 "
-"Relation</strong> entfernt werden soll.</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>Bitte bestätigen Sie, dass <strong>1 Objekt</strong> aus <strong>{0} "
-"Relationen</strong> entfernt werden soll.</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>Bitte bestätigen Sie, dass <strong>{0} Objekte</strong> aus "
-"<strong>{1} Relationen</strong> entfernt werden sollen.</html>"
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] "{0} Objekt löschen"
-msgstr[1] "{0} Objekte löschen"
-
-msgid "Delete objects"
-msgstr "Objekte löschen"
-
-msgid "To delete"
-msgstr "Zum Löschen"
-
-msgid "From Relation"
-msgstr "Von Relation"
-
-msgid "Pos."
-msgstr "Pos."
+msgid " ({0})"
+msgstr " ({0})"
 
-msgid "Role"
-msgstr "Rolle"
+msgid "{0} completed in {1}"
+msgstr "''{0}'' in {1} beendet"
 
-msgid "Click to close the dialog and remove the object from the relations"
-msgstr ""
-"Klicken, um das Fenster zu schließen und das Objekt aus den Relationen zu "
-"entfernen."
+msgid "Enlarge"
+msgstr "Vergrößern"
 
-msgid "Click to close the dialog and to abort deleting the objects"
-msgstr ""
-"Klicken, um das Fenster zu schließen und das Löschen der Objekte abzubrechen"
+msgid "Shrink"
+msgstr "Verkleinern"
 
 msgid ""
 "<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
@@ -5328,7 +5402,7 @@ msgstr ""
 "einer festen Zoomstufe.</html>"
 
 msgid "Zoom level:"
-msgstr "Zoomstufe:"
+msgstr "Vergrößerungsstufe:"
 
 msgid "from tile"
 msgstr "von Kachel"
@@ -5781,6 +5855,9 @@ msgstr "Löschstatus der Server-Daten behalten"
 msgid "Undecide conflict between deleted state"
 msgstr "Nicht aufgelöster Konflikt durch unterschiedlichen Löschstatus"
 
+msgid "Role"
+msgstr "Rolle"
+
 msgid "Primitive"
 msgstr "Objekt"
 
@@ -5938,7 +6015,8 @@ msgstr "Der Schlüssel \"{0}\" und alle dazugehörigen Werte werden entfernt"
 
 msgid "All values joined as ''{0}'' are going to be applied for key ''{1}''"
 msgstr ""
-"Alle zu \"{0}\" kombinierten Werte werden im Schlüssel \"{1}\" übernommen."
+"Alle zu \"{0}\" kombinierten Werte werden für den Schlüssel \"{1}\" "
+"übernommen"
 
 msgid "Tag collection does not include the selected value ''{0}''."
 msgstr "Merkmalssammlung enthält nicht den gewählten Wert \"{0}\""
@@ -6068,6 +6146,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr "Rolle zu allen Elementen hinzufügen."
 
+msgid "Pos."
+msgstr "Pos."
+
 msgid "Orig. Way"
 msgstr "Orig. Linie"
 
@@ -6124,7 +6205,7 @@ msgid "Show info"
 msgstr "Informationen anzeigen"
 
 msgid "Open a web page for each selected changeset"
-msgstr "Eine Webseite für jeden ausgewählten Änderungssatz öffnen"
+msgstr "Eine Internetseite für jeden ausgewählten Änderungssatz öffnen"
 
 msgid "Details"
 msgstr "Details"
@@ -6151,7 +6232,7 @@ msgstr ""
 "Von diesem Kommando beeinflusste (und nicht gelöschte) Objekte auswählen"
 
 msgid "Select and zoom"
-msgstr "Auswählen und zoomen"
+msgstr "Auswählen und vergrößern"
 
 msgid ""
 "Selects the objects that take part in this command (unless currently "
@@ -6234,6 +6315,50 @@ msgstr "Konflikte auflösen"
 msgid "Resolve conflicts for ''{0}''"
 msgstr "Konflikte lösen für ''{0}''"
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+"<html>Bitte bestätigen Sie, dass <strong>1 Objekt</strong> aus <strong>1 "
+"Relation</strong> entfernt werden soll.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Bitte bestätigen Sie, dass <strong>1 Objekt</strong> aus <strong>{0} "
+"Relationen</strong> entfernt werden soll.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Bitte bestätigen Sie, dass <strong>{0} Objekte</strong> aus "
+"<strong>{1} Relationen</strong> entfernt werden sollen.</html>"
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] "{0} Objekt löschen"
+msgstr[1] "{0} Objekte löschen"
+
+msgid "Delete objects"
+msgstr "Objekte löschen"
+
+msgid "To delete"
+msgstr "Zum Löschen"
+
+msgid "From Relation"
+msgstr "Von Relation"
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+"Klicken, um das Fenster zu schließen und das Objekt aus den Relationen zu "
+"entfernen."
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+"Klicken, um das Fenster zu schließen und das Löschen der Objekte abzubrechen"
+
 msgid "Filter objects and hide/disable them."
 msgstr "Objekte filtern und diese ausblenden/deaktivieren."
 
@@ -6338,8 +6463,8 @@ msgstr "Erweiterte Objektinformationen"
 msgid "map style"
 msgstr "Kartenstil"
 
-msgid " ({0})"
-msgstr " ({0})"
+msgid "edit counts"
+msgstr "Bearbeitungsanzahl"
 
 msgid "not in data set"
 msgstr "Nicht im Datensatz"
@@ -6468,16 +6593,21 @@ msgstr ""
 "Liste der generierten Stile:\n"
 
 msgid "The 2 selected objects have identical style caches."
-msgstr "Die 2 ausgewählten Objekte haben identische Stilspeicher."
+msgstr "Die 2 ausgewählten Objekte haben identische Stilzwischenspeicher."
 
 msgid "The 2 selected objects have different style caches."
-msgstr "Die 2 gewählten Objekte haben verschiedene Stil-Speicher."
+msgstr "Die 2 ausgewählten Objekte haben verschiedene Stilzwischenspeicher."
 
 msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 "Warnung: Die 2 ausgewählten Objekte haben gleiche, aber nicht identische "
-"Stilspeicher."
+"Stilzwischenspeicher."
+
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] "{0} Benutzer hat die Auswahl zuletzt bearbeitet:"
+msgstr[1] "{0} Benutzer haben die Auswahl zuletzt bearbeitet:"
 
 msgid "xml"
 msgstr "XML"
@@ -6488,48 +6618,81 @@ msgstr "MapCSS"
 msgid "unknown"
 msgstr "unbekannt"
 
+msgid "Enter the coordinates for the new node."
+msgstr "Geben Sie die Koordinaten für den neuen Kontenpunkt ein."
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
 msgstr ""
-"Geben Sie die Koordinaten für den neuen Punkt ein.<br>Längen- und "
-"Breitengrad werden durch Leerzeichen, Komma oder Semikolon "
-"getrennt.<br>Koordinaten können in drei unterschiedlichen Formaten "
-"vorliegen: \n"
-"<ul><li><i>Grad</i><tt>°</tt></li><li><i>Grad</i><tt>°</tt> "
-"<i>Minuten</i><tt>'</tt></li><li><i>Grad</i><tt>°</tt> "
-"<i>Minuten</i><tt>'</tt> "
-"<i>Sekunden</i><tt>&quot</tt></li></ul>Symbole<tt>°</tt>, "
-"<tt>'</tt>, <tt>′</tt>, <tt>"</tt>, <tt>″</tt> sind "
-"optional.<br/><br/>Einige Beispiele:<ul>{0}</ul>"
+"Sie können Längen- und Breitengrad mit einem Leerzeichen, Komma oder "
+"Strichpunkt trennen."
 
-msgid "Projected coordinates:"
-msgstr "Bildkoordinaten:"
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+"Verwenden Sie positive Zahlen oder N-, E-Zeichen, um die Himmelsrichtung "
+"Nord oder Ost anzugeben."
 
 msgid ""
-"Enter easting and northing (x and y) separated by space, comma or semicolon."
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
 msgstr ""
-"Ostwert / Nordwert (x und y) mit einem Leerzeichen, Komma oder Strichpunkt "
-"voneinander getrennt eingeben."
+"Für die Himmelsrichtungen Süd und West können Sie entweder negative Zahlen "
+"oder S-, W-Zeichen verwenden."
 
-msgid "Lat/Lon"
-msgstr "Breite/Länge"
+msgid "Coordinate value can be in one of three formats:"
+msgstr "Koordinatenwert kann in einem von drei Formaten sein:"
 
-msgid "East/North"
-msgstr "Ost/Nord"
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr "<i>Grade</i><tt>°</tt>"
 
-msgid "Please enter a GPS coordinates"
-msgstr "Bitte eine GPS-Koordinate eingeben"
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr "<i>Grade</i><tt>°</tt> <i>Minuten</i><tt>'</tt>"
 
-msgid "Please enter a Easting and Northing"
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+"<i>Grade</i><tt>°</tt> <i>Minuten</i><tt>'</tt> "
+"<i>Sekunden</i><tt>&quot</tt>"
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+"Symbole <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> sind optional."
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+"Sie können auch die Syntax <tt>lat=\"...\" lon=\"...\"</tt> oder "
+"<tt>lat=''...'' lon=''...''</tt> verwenden."
+
+msgid "Some examples:"
+msgstr "Einige Beispiele:"
+
+msgid "Projected coordinates:"
+msgstr "Bildkoordinaten:"
+
+msgid ""
+"Enter easting and northing (x and y) separated by space, comma or semicolon."
+msgstr ""
+"Ostwert / Nordwert (x und y) mit einem Leerzeichen, Komma oder Strichpunkt "
+"voneinander getrennt eingeben."
+
+msgid "Lat/Lon"
+msgstr "Breite/Länge"
+
+msgid "East/North"
+msgstr "Ost/Nord"
+
+msgid "Please enter a GPS coordinates"
+msgstr "Bitte eine GPS-Koordinate eingeben"
+
+msgid "Please enter a Easting and Northing"
 msgstr "Bitte geben Sie einen Ostwert und Nordwert ein"
 
 msgid "Toggle visibility of layer: {0}"
@@ -6556,6 +6719,12 @@ msgstr "Transparenz"
 msgid "Adjust opacity of the layer."
 msgstr "Deckkraft der Ebene anpassen."
 
+msgid "Gamma"
+msgstr "Gamma"
+
+msgid "Adjust gamma value of the layer."
+msgstr "Gammawert der Ebene anpassen."
+
 msgid "Activate"
 msgstr "Aktivieren"
 
@@ -6569,7 +6738,7 @@ msgid "Merge this layer into another layer"
 msgstr "Aktuelle Ebene mit einer anderen Ebene verbinden"
 
 msgid "Duplicate this layer"
-msgstr "Diese Ebene duplizieren"
+msgstr "Diese Ebene verdoppeln"
 
 msgid "Copy of {0}"
 msgstr "Kopie von {0}"
@@ -6643,7 +6812,7 @@ msgid "Map paint style file (*.xml, *.zip)"
 msgstr "MapPaint-Stil-Datei (*.xml, *.zip)"
 
 msgid "Reloading style sources"
-msgstr "Stilquellen neu laden"
+msgstr "Stilquellen werden neu geladen"
 
 msgid "Save style ''{0}'' as ''{1}''"
 msgstr "Stil ''{0}'' speichern als ''{1}''"
@@ -6687,11 +6856,17 @@ msgstr "Zeichenstil-Einstellungen"
 msgid "Customize the style"
 msgstr "Stil anpassen"
 
+msgid "Mini map"
+msgstr "Minikarte"
+
+msgid "Displays a small map of the current edit location"
+msgstr "Zeigt eine kleine Karte des aktuellen Bearbeitungsortes an"
+
 msgid "List of notes"
 msgstr "Liste der Hinweise"
 
 msgid "Add comment"
-msgstr "Hinweis hinzufügen"
+msgstr "Kommentar hinzufügen"
 
 msgid "Comment"
 msgstr "Kommentar"
@@ -6745,15 +6920,22 @@ msgstr "Objektkennung:"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "Geben Sie die Kennung des zu herunterladenden Objekts ein"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+"Objektkennungen können durch Komma oder Leerzeichen getrennt werden, zum "
+"Beispiel: {0}"
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+"Geben Sie Objekte im gemischten Modus so an: {0}<br/>({1} steht für "
+"<i>Knotenpunkt</i>, {2} für <i>Weg</i>, und {3} für <i>Relation</i>)"
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
-"Objektkennungen können durch ein Komma oder Leerzeichen getrennt "
-"werden.<br/>Beispiele: {0}<br/>Im gemischten Modus geben Sie Objekte wie "
-"folgt an: {1}<br/>({2} steht für <i>Punkt</i>, {3} für <i>Linie</i>, {4} für "
-"<i>Relation</i>)"
+"Bereiche von Objektkennungen werden mit einem Bindestrich angegeben, zum "
+"Beispiel: {0}"
 
 msgid ""
 "Invalid ID list specified\n"
@@ -6783,6 +6965,9 @@ msgstr "Relationen: {0}/{1}"
 msgid "Relations: {0}"
 msgstr "Relationen: {0}"
 
+msgid "Selection"
+msgstr "Auswahl"
+
 msgid "Open a selection list window."
 msgstr "Ein Fenster mit der aktuellen Auswahl öffnen."
 
@@ -6793,7 +6978,7 @@ msgid "Search for objects"
 msgstr "Nach Objekten suchen"
 
 msgid "Display the history of the selected objects."
-msgstr "Geschichte der markierten Elemente anzeigen."
+msgstr "Chronik der ausgewählten Objekte anzeigen."
 
 msgid "Zoom to selection"
 msgstr "Auf Auswahl zoomen"
@@ -6879,6 +7064,12 @@ msgstr "Fenster mit dem Ergebnis der Prüfung öffnen."
 msgid "Validation results"
 msgstr "Prüfergebnisse"
 
+msgid "Lookup"
+msgstr "Nachschlagen"
+
+msgid "Looks up the selected primitives in the error list."
+msgstr "Sucht nach den ausgewählten Primitiven in der Fehlerliste."
+
 msgid "Fix"
 msgstr "Reparieren"
 
@@ -6952,7 +7143,7 @@ msgstr "Aus dem Zwischenspeicher löschen"
 
 msgid "Remove the selected changesets from the local cache"
 msgstr ""
-"Die gewählten Änderungssätze aus dem lokalen Zwischenspeicher entfernen"
+"Die ausgewählten Änderungssätze aus dem lokalen Zwischenspeicher entfernen"
 
 msgid "Close the selected changesets"
 msgstr "Ausgewählte Änderungssätze schließen"
@@ -7017,13 +7208,13 @@ msgid "Discussions"
 msgstr "Diskussionen"
 
 msgid "Downloading changeset content"
-msgstr "Änderungssatzinhalt herunterladen"
+msgstr "Änderungssatzinhalt wird heruntergeladen"
 
 msgid "({0}/{1}) Downloading changeset {2}..."
-msgstr "({0}/{1}) Änderungssatz {2} herunterladen …"
+msgstr "({0}/{1}) Änderungssatz {2} wird heruntergeladen …"
 
 msgid "({0}/{1}) Downloading content for changeset {2}..."
-msgstr "({0}/{1}) Inhalt von Änderungssatz {2} herunterladen …"
+msgstr "({0}/{1}) Inhalt von Änderungssatz {2} wird heruntergeladen …"
 
 msgid ""
 "<html>The selected object is not available in the current<br>edit layer "
@@ -7066,10 +7257,10 @@ msgid "Zoom to in layer"
 msgstr "In Ebene auf Auswahl zoomen"
 
 msgid "Zoom to the corresponding objects in the current data layer"
-msgstr "An die zugehörigen Objekte der aktuellen Datenebene heranzoomen"
+msgstr "Auf die zugehörigen Objekte der aktuellen Datenebene zoomen"
 
 msgid "Nothing to zoom to"
-msgstr "Nichts zum Zoomen"
+msgstr "Nichts zum vergrößern"
 
 msgid "The content of this changeset is not downloaded yet."
 msgstr "Der Inhalt dieses Änderungssatzes wurde noch nicht heruntergeladen."
@@ -7136,8 +7327,8 @@ msgid ""
 "Zoom to the objects in the content of this changeset in the current data "
 "layer"
 msgstr ""
-"An die Objekte, die der Änderungssatz des aktuellen Datensatzes beinhaltet, "
-"heranzoomen"
+"Auf die Objekte, die der Änderungssatz des aktuellen Datensatzes beinhaltet, "
+"zoomen"
 
 msgid "Update changeset discussion"
 msgstr "Änderungssatzdiskussion aktualisieren"
@@ -7396,10 +7587,10 @@ msgid "Download changesets using predefined queries"
 msgstr "Änderungssätze mit vorgefertigten Anfragen herunterladen"
 
 msgid "From URL"
-msgstr "von URL"
+msgstr "Von Adresse"
 
 msgid "Query changesets from a server URL"
-msgstr "Änderungssätze mittels Server-URL herunterladen"
+msgstr "Änderungssätze mittels Server-Adresse herunterladen"
 
 msgid "Advanced"
 msgstr "Erweitert"
@@ -7414,11 +7605,10 @@ msgid "Query and download changesets"
 msgstr "Änderungssätze abfragen und herunterladen"
 
 msgid "Please enter a valid changeset query URL first."
-msgstr ""
-"Bitte geben Sie einen URL mit einer gültigen Änderungssatzanfrage ein."
+msgstr "Bitte eine Adresse mit einer gültigen Änderungssatzanfrage eingeben."
 
 msgid "Illegal changeset query URL"
-msgstr "Ungültiger URL für Änderungssatzanfrage"
+msgstr "Ungültige Adresse für Änderungssatzanfrage"
 
 msgid "Close the dialog and abort querying of changesets"
 msgstr "Dialog schließen und Laden der Änderungssätze abbrechen"
@@ -7433,11 +7623,11 @@ msgid "Query and download changesets ..."
 msgstr "Änderungssätze suchen und herunterladen …"
 
 msgid "URL: "
-msgstr "URL: "
+msgstr "Adresse: "
 
 msgid "Please enter or paste an URL to retrieve changesets from the OSM API."
 msgstr ""
-"Bitte geben Sie eine URL an, welche eine Änderungssatzanfrage darstellt."
+"Bitte eine Adresse angeben, welche eine Änderungssatzanfrage darstellt."
 
 msgid "Examples"
 msgstr "Beispiele"
@@ -7446,12 +7636,12 @@ msgid ""
 "Note that changeset queries are currently always submitted to ''{0}'', "
 "regardless of the host, port and path of the URL entered below."
 msgstr ""
-"Beachten Sie, dass Änderungssatzanfragen derzeit immer an ''{0}'' gerichtet "
-"werden, ungeachtet der Servernamen, Ports und Pfadangaben aus der URL, die "
-"Sie unten eingeben."
+"Bitte beachten, dass Änderungssatzanfragen derzeit immer an »{0}« gerichtet "
+"werden, ungeachtet der Servernamen, Anschlüsse (Ports) und Pfadangaben aus "
+"der Adresse, die Sie unten eingeben."
 
 msgid "This changeset query URL is invalid"
-msgstr "Dieser URL ist keine gültige Änderungssatzanfrage."
+msgstr "Diese Adresse ist keine gültige Änderungssatzanfrage."
 
 msgid "Discardable key: selection Foreground"
 msgstr "Überflüssiger Schlüssel: Auswahl-Vordergrund"
@@ -7470,8 +7660,8 @@ msgstr "{0} ''{1}''"
 
 msgid "{0} different"
 msgid_plural "{0} different"
-msgstr[0] "{0} unterschiedlich"
-msgstr[1] "{0} unterschiedlich"
+msgstr[0] "{0} unterschiedliche"
+msgstr[1] "{0} unterschiedliche"
 
 msgid ", {0} unset"
 msgid_plural ", {0} unset"
@@ -7538,6 +7728,12 @@ msgstr "Zur OSM-Wiki für Hilfe zu Merkmalen gehen (F1)"
 msgid "Launch browser with wiki help for selected object"
 msgstr "Browser mit Wikihilfe zum ausgewählten Objekt starten"
 
+msgid "Go to Taginfo"
+msgstr "Zur Taginfo gehen"
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr "Browser mit Taginfo-Statistiken für das ausgewählte Objekt starten"
+
 msgid "Paste Value"
 msgstr "Wert einfügen"
 
@@ -7634,18 +7830,14 @@ msgstr "Anzahl zuletzt ergänzter Merkmale einstellen"
 msgid "Remember last used tags after a restart"
 msgstr "Zuletzt verwendete Schlagwörter nach einem Neustart behalten"
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
-msgstr "<code>Strg-1</code> zum Annehmen des ersten Vorschlags"
+msgid "to apply first suggestion"
+msgstr "zum Übernehmen des ersten Vorschlags"
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
-msgstr ""
-"<code>Umschalt-Return</code> zum Hinzufügen ohne Schließen des Dialogs"
+msgid "to add without closing the dialog"
+msgstr "zum Hinzufügen ohne Schließung des Dialogs"
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
-msgstr ""
-"<code>Umschalt-Strg-1</code> zum Hinzufügen des ersten Vorschlags ohne "
-"Schließen des Dialogs"
+msgid "to add first suggestion without closing the dialog"
+msgstr "zum Hinzufügen des ersten Vorschlags ohne Schließung des Dialogs"
 
 msgid "Please enter the number of recently added tags to display"
 msgstr ""
@@ -7714,24 +7906,28 @@ msgstr "Ignoriere Fehler, da die Aufgabe abgebrochen wurde: Fehler: {0}"
 
 msgid "Downloading {0} incomplete object"
 msgid_plural "Downloading {0} incomplete objects"
-msgstr[0] "{0} unvollständiges Objekt herunterladen"
-msgstr[1] "{0} unvollständige Objekte herunterladen"
+msgstr[0] "{0} unvollständiges Objekt wird heruntergeladen"
+msgstr[1] "{0} unvollständige Objekte werden heruntergeladen"
 
 msgid "Downloading {0} incomplete child of relation ''{1}''"
 msgid_plural "Downloading {0} incomplete children of relation ''{1}''"
-msgstr[0] "{0} unvollständiges Kind der Relation \"{1}\" herunterladen"
-msgstr[1] "{0} unvollständige Kinder der Relation \"{1}\" herunterladen"
+msgstr[0] ""
+"{0} unvollständiges Kind der Relation \"{1}\" wird heruntergeladen"
+msgstr[1] ""
+"{0} unvollständige Kinder der Relation \"{1}\" werden heruntergeladen"
 
 msgid "Downloading {0} incomplete child of {1} parent relations"
 msgid_plural "Downloading {0} incomplete children of {1} parent relations"
-msgstr[0] "Lade {0} unvollständiges Element von {1} Elternrelationen"
-msgstr[1] "Lade {0} unvollständige Elemente von {1} Elternrelationen"
+msgstr[0] ""
+"{0} unvollständiges Element von {1} Elternrelationen wird heruntergeladen"
+msgstr[1] ""
+"{0} unvollständige Elemente von {1} Elternrelationen werden heruntergeladen"
 
 msgid "Download relations"
 msgstr "Relationen herunterladen"
 
 msgid "({0}/{1}): Downloading relation ''{2}''..."
-msgstr "({0}/{1}: Relation ''{2}'' herunterladen …"
+msgstr "({0}/{1}: Relation »{2}« wird heruntergeladen …"
 
 msgid "Tags and Members"
 msgstr "Merkmale und Elemente"
@@ -7844,6 +8040,13 @@ msgstr "Relationselemente sortieren"
 msgid "Relation Editor: Sort"
 msgstr "Relationseditor: Sortieren"
 
+msgid "Sort below"
+msgstr "Unten sortieren"
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+"Die ausgewählten Relationsmitglieder und alle Mitglieder unten sortieren"
+
 msgid "Reverse the order of the relation members"
 msgstr "Die Reihenfolge der Relationselemente umdrehen"
 
@@ -7889,7 +8092,7 @@ msgstr ""
 "schließen"
 
 msgid "No, continue editing"
-msgstr "Bearbeitung fortsetzen"
+msgstr "Nein, Bearbeitung fortsetzen"
 
 msgid "Click to return to the relation editor and to resume relation editing"
 msgstr ""
@@ -8040,7 +8243,7 @@ msgid "Reload"
 msgstr "Neu laden"
 
 msgid "Loading parent relations"
-msgstr "Elternrelationen laden"
+msgstr "Elternrelationen wird geladen"
 
 msgid "Edit the currently selected relation"
 msgstr "Die ausgewählte Relation bearbeiten"
@@ -8139,8 +8342,8 @@ msgid ""
 "URL from www.openstreetmap.org (you can paste an URL here to download the "
 "area)"
 msgstr ""
-"URL von www.openstreetmap.org (Fügen Sie hier eine URL ein, um einen Bereich "
-"zu laden)"
+"Adresse von www.openstreetmap.org (hier eine Adresse einfügen, um einen "
+"Bereich zu laden)"
 
 msgid "Bounding Box"
 msgstr "Koordinaten"
@@ -8285,7 +8488,7 @@ msgid "Querying name server"
 msgstr "Suche nach Namen"
 
 msgid "Querying name server ..."
-msgstr "Suche nach Namen …"
+msgstr "Nach Namensservern wird gesucht …"
 
 msgid "Error occured with query ''{0}'': ''{1}''"
 msgstr "Fehler trat mit der Suche ''{0}'' auf: ''{1}''"
@@ -8346,11 +8549,11 @@ msgid ""
 "<html>Failed to open help page for url {0}.<br>This is most likely due to a "
 "network problem, please check<br>your internet connection</html>"
 msgstr ""
-"<html>Die Hilfe-Seite unter der URL {0} konnte nicht geöffnet "
+"<html>Die Hilfeseite unter der Adresse {0} konnte nicht geöffnet "
 "werden.<br>Vermutlich ist Ihre Internet-Verbindung unterbrochen.</html>"
 
 msgid "Failed to open URL"
-msgstr "Die URL konnte nicht geöffnet werden"
+msgstr "Öffnen der Adresse ist fehlgeschlagen"
 
 msgid "Open the current help page in an external browser"
 msgstr "Aktuelle Hilfeseite in einem externen Browser öffnen"
@@ -8362,8 +8565,9 @@ msgid ""
 "<html>The current URL <tt>{0}</tt><br>is an external URL. Editing is only "
 "possible for help topics<br>on the help server <tt>{1}</tt>.</html>"
 msgstr ""
-"<html>Die aktuelle URL <tt>{0}</tt><br>ist eine externe URL. Änderungen sind "
-"nur möglich für Hilfe-Themen<br>auf dem Hilfe-Server<tt>{1}</tt>.</html>"
+"<html>Die aktuelle Adresse <tt>{0}</tt><br>ist eine externe Adresse. "
+"Änderungen sind nur möglich für Hilfethemen<br>auf dem Hilfe-"
+"Server<tt>{1}</tt>.</html>"
 
 msgid "Reload the current help page"
 msgstr "Die aktuelle Hilfeseite neu laden"
@@ -8381,7 +8585,8 @@ msgid "Bad location in HTML document. Exception was: {0}"
 msgstr "Falsche Position im HTML-Dokument. Der Fehler war: {0}"
 
 msgid "Failed to open help page. The target URL is empty."
-msgstr "Die Hilfe-Seite konnte nicht geöffnet werden. Die Ziel-URL ist leer."
+msgstr ""
+"Die Hilfeseite konnte nicht geöffnet werden. Die Zieladresse ist leer."
 
 msgid "Failed to open help page"
 msgstr "Die Hilfe-Seite konnte nicht geladen werden"
@@ -8399,20 +8604,20 @@ msgid "Coordinates"
 msgstr "Koordinaten"
 
 msgid "History for node {0}"
-msgstr "Versionsprotokoll für Punkt {0}"
+msgstr "Chronik für Punkt {0}"
 
 msgid "History for way {0}"
-msgstr "Versionsprotokoll für Linie {0}"
+msgstr "Chronik für Linie {0}"
 
 msgid "History for relation {0}"
-msgstr "Versionsprotokoll für Relation {0}"
+msgstr "Chronik für Relation {0}"
 
 msgid "Reload the history from the server"
-msgstr "Versionsprotokoll erneut vom Server laden"
+msgstr "Chronik erneut vom Server laden"
 
 msgid "History not initialized yet. Failed to set reference primitive."
 msgstr ""
-"Die Geschichte ist noch nicht initialisiert. Fehler beim Erstellen des "
+"Die Chronik ist noch nicht initialisiert. Fehler beim Erstellen des "
 "Referenzelements."
 
 msgid ""
@@ -8426,41 +8631,46 @@ msgid ""
 "Failed to set reference. Reference version {0} not available in history."
 msgstr ""
 "Fehler beim Erstellen des Referenzelements. Version {0} der Referenz ist in "
-"der Geschichte nicht vorhanden."
+"der Chronik nicht vorhanden."
 
 msgid "History not initialized yet. Failed to set current primitive."
 msgstr ""
-"Die Geschichte ist noch nicht initialisiert. Fehler beim Erstellen des "
+"Die Chronik ist noch nicht initialisiert. Fehler beim Erstellen des "
 "aktuellen Elements."
 
 msgid ""
 "Failed to set current primitive. Current version {0} not available in "
 "history."
-msgstr "Aktuelle Version {0} nicht in der Versionsgeschichte vorhanden!"
+msgstr ""
+"Fehler beim Festlegen der aktuellen Primitive. Aktuelle Version {0} ist "
+"nicht in der Chronik vorhanden!"
 
 msgid "Load history"
-msgstr "Versionsprotokoll laden"
+msgstr "Chronik laden"
 
 msgid "Loading history for node {0}"
-msgstr "Versionsprotokoll für Punkt {0} laden"
+msgstr "Chronik für Punkt {0} wird geladen"
 
 msgid "Loading history for way {0}"
-msgstr "Versionsprotokoll für Linie {0} laden"
+msgstr "Chronik für Linie {0} wird geladen"
 
 msgid "Loading history for relation {0}"
-msgstr "Versionsprotokoll für Relation {0} laden"
+msgstr "Chronik für Relation {0} wird geladen"
 
 msgid "Node {0}"
 msgstr "Punkt {0}"
 
+msgid "The nodes of this way are in reverse order"
+msgstr "Die Knotenpunkte auf diesem Weg sind in umgekehrter Richtung"
+
 msgid "Zoom to node"
-msgstr "Zoom auf Punkt"
+msgstr "Auf Punkt zoomen"
 
 msgid "Zoom to this node in the current data layer"
-msgstr "Zoom zu diesem Punkt in der aktuellen Daten-Ebene"
+msgstr "Auf diesen Punkt in der aktuellen Daten-Ebene zommen"
 
 msgid "Open a history browser with the history of this node"
-msgstr "Browser mit dem Versionsprotokoll dieses Punktes öffnen"
+msgstr "Browser mit der Chronik dieses Punktes öffnen"
 
 msgid "Way {0}"
 msgstr "Linie {0}"
@@ -8641,7 +8851,9 @@ msgstr ""
 "speichern.</html>"
 
 msgid "Provide a brief comment for the changes you are uploading:"
-msgstr "Ein kurzer Kommentar über die hochzuladenden Änderungen:"
+msgstr ""
+"Geben Sie einen kurzen Kommentar über die von Ihnen hochgeladenen Änderungen "
+"an:"
 
 msgid "Enter an upload comment"
 msgstr "Kommentar zum Hochladen eingeben"
@@ -8791,7 +9003,7 @@ msgid ""
 "Warning: depending on the authentication method the proxy server uses the "
 "password may be transferred unencrypted."
 msgstr ""
-"Warnung: Je nachdem, welche Autorisierungsmethode der Proxy-Server benutzt, "
+"Achtung: Je nachdem, welche Legitimierungsmethode der Proxy-Server benutzt, "
 "wird das Kennwort möglicherweise unverschlüsselt übertragen."
 
 msgid "Authenticate"
@@ -8801,7 +9013,7 @@ msgid "Authenticate with the supplied username and password"
 msgstr "Mit dem angegebenen Benutzernamen und Kennwort anmelden"
 
 msgid "Cancel authentication"
-msgstr "Authentifizierung abbrechen"
+msgstr "Legitimierung abbrechen"
 
 msgid "Downloading file"
 msgstr "Datei wird heruntergeladen"
@@ -8819,8 +9031,8 @@ msgid ""
 "Cannot download file ''{0}''. Its download link ''{1}'' is not a valid URL. "
 "Skipping download."
 msgstr ""
-"Datei ''{0}'' kann nicht heruntergeladen werden. Der Link ''{1}'' ist keine "
-"gültige URL. Herunterladen wird übersprungen."
+"Datei »{0}« kann nicht heruntergeladen werden. Der Verweis »{1}« ist keine "
+"gültige Adresse. Herunterladen wird übersprungen."
 
 msgid ""
 "Could not retrieve the list of your open changesets because<br>JOSM does not "
@@ -8845,7 +9057,7 @@ msgid "Download objects"
 msgstr "Objekte herunterladen"
 
 msgid "Initializing nodes to download ..."
-msgstr "Punkte zum Herunterladen initialisieren …"
+msgstr "Punkte zum Herunterladen werden initialisiert …"
 
 msgid "Object could not be downloaded"
 msgid_plural "Some objects could not be downloaded"
@@ -8925,7 +9137,7 @@ msgid "Unsaved changes - Save/Upload before deleting?"
 msgstr "Ungespeicherte Änderungen - Vor dem Löschen speichern/hochladen?"
 
 msgid "Uploading and saving modified layers ..."
-msgstr "Veränderte Ebenen hochladen und speichern …"
+msgstr "Veränderte Ebenen werden hochgeladen und gespeichert …"
 
 msgid ""
 "<html>{0} layer has unresolved conflicts.<br>Either resolve them first or "
@@ -9061,7 +9273,7 @@ msgstr ""
 "gespeichert werden sollten."
 
 msgid "Layer ''{0}'' has no modifications to be saved."
-msgstr "Ebene \"{0}\" enthält keine Änderungen zum Speichern."
+msgstr "Ebene »{0}« enthält keine Änderungen zum Speichern."
 
 msgid "Layer Name and File Path"
 msgstr "Ebenenname und Dateipfad"
@@ -9228,11 +9440,11 @@ msgid "Uploading <strong>{0} object</strong> to <strong>1 changeset</strong>"
 msgid_plural ""
 "Uploading <strong>{0} objects</strong> to <strong>1 changeset</strong>"
 msgstr[0] ""
-"<strong>{0} Objekt</strong> wird <strong>einem Änderungssatz</strong> "
-"hinzugefügt"
+"<strong>{0} Objekt</strong> wird zu <strong>einem Änderungssatz</strong> "
+"hochgeladen"
 msgstr[1] ""
-"<strong>{0} Objekte</strong> werden <strong>einem Änderungssatz</strong> "
-"hinzugefügt"
+"<strong>{0} Objekte</strong> werden zu <strong>einem Änderungssatz</strong> "
+"hochgeladen"
 
 msgid ""
 "Uploading <strong>{0} object</strong> to <strong>1 changeset</strong> using "
@@ -9241,18 +9453,18 @@ msgid_plural ""
 "Uploading <strong>{0} objects</strong> to <strong>1 changeset</strong> using "
 "<strong>1 request</strong>"
 msgstr[0] ""
-"<strong>{0} Objekt</strong> wird <strong>einem Änderungssatz</strong> in "
-"<strong>einem Vorgang</strong> hinzugefügt"
+"<strong>{0} Objekt</strong> wird mit <strong>einem Vorgang</strong> zu "
+"<strong>einem Änderungssatz</strong> hochgeladen"
 msgstr[1] ""
-"<strong>{0} Objekte</strong> werden <strong>einem Änderungssatz</strong> in "
-"<strong>einem Vorgang</strong> hinzugefügt"
+"<strong>{0} Objekte</strong> werden mit <strong>einem Vorgang</strong> zu "
+"<strong>einem Änderungssatz</strong> hochgeladen"
 
 msgid ""
 "Uploading <strong>{0} objects</strong> to <strong>1 changeset</strong> using "
 "<strong>{1} requests</strong>"
 msgstr ""
 "<strong>{0} Objekte</strong> werden mit <strong>{1} Vorgängen</strong> zu "
-"<strong>einem Änderungssatz</strong> hinzugefügt."
+"<strong>einem Änderungssatz</strong> hochgeladen."
 
 msgid "advanced configuration"
 msgstr "erweiterte Konfiguration"
@@ -9271,17 +9483,17 @@ msgid ""
 "Uploading <strong>{0} objects</strong> to <strong>multiple "
 "changesets</strong> using <strong>{1} requests</strong>"
 msgstr ""
-"<strong>{0} Objekte</strong> werden in <strong>{1} Anfragen</strong> in "
-"<strong>mehreren Änderungssätzen</strong> hinzugefügt."
+"<strong>{0} Objekte</strong> werden in <strong>{1} Vorgängen</strong> in "
+"<strong>mehreren Änderungssätzen</strong> hochgeladen."
 
 msgid "Uploading data for layer ''{0}''"
-msgstr "Daten für Ebene \"{0}\" hochladen"
+msgstr "Daten für Ebene \"{0}\" werden hochgeladen"
 
 msgid "Continue uploading"
-msgstr "Mit Hochladen fortfahren"
+msgstr "Hochladen fortsetzen"
 
 msgid "Click to continue uploading to additional new changesets"
-msgstr "Klicken, um in zusätzliche neue Änderungssätze hochzuladen"
+msgstr "Klicken Sie, um in zusätzliche neue Änderungssätze hochzuladen"
 
 msgid "Go back to Upload Dialog"
 msgstr "Gehe zurück zum Hochladen-Dialog"
@@ -9342,8 +9554,8 @@ msgstr ""
 
 msgid "Uploading {0} object..."
 msgid_plural "Uploading {0} objects..."
-msgstr[0] "{0} Objekt hochladen..."
-msgstr[1] "{0} Objekte hochladen …"
+msgstr[0] "{0} Objekt wird hochgeladen..."
+msgstr[1] "{0} Objekte werden hochgeladen…"
 
 msgid ""
 "Ignoring caught exception because upload is canceled. Exception is: {0}"
@@ -9463,6 +9675,108 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] "{0} zu löschendes Objekt:"
 msgstr[1] "{0} zu löschende Objekte:"
 
+msgid "Show Tile Info"
+msgstr "Kachelinformationen anzeigen"
+
+msgid "Tile Info"
+msgstr "Kachelinformationen"
+
+msgid "Metadata "
+msgstr "Metadaten "
+
+msgid "Auto Zoom"
+msgstr "Autom. Vergrößerung"
+
+msgid "Auto load tiles"
+msgstr "Kacheln automatisch laden"
+
+msgid "Load All Tiles"
+msgstr "Alle Kacheln laden"
+
+msgid "Load All Error Tiles"
+msgstr "Alle Fehlerkacheln laden"
+
+msgid "Zoom to native resolution"
+msgstr "Auf Vorgabeauflösung zoomen"
+
+msgid "Change resolution"
+msgstr "Auflösung ändern"
+
+msgid "Failed to create tile source"
+msgstr "Fehler beim Erstellen der Kachelquelle"
+
+msgid "Show Errors"
+msgstr "Zeige Fehler"
+
+msgid "Load Tile"
+msgstr "Kachel laden"
+
+msgid "Increase zoom"
+msgstr "Zoom erhöhen"
+
+msgid "Decrease zoom"
+msgstr "Zoom reduzieren"
+
+msgid "Snap to tile size"
+msgstr "An Kachelgröße anpassen"
+
+msgid "Flush Tile Cache"
+msgstr "Kachel-Zwischenspeicher leeren"
+
+msgid "zoom in to load any tiles"
+msgstr "Zum Laden von Kacheln hereinzoomen"
+
+msgid "zoom in to load more tiles"
+msgstr "Zum Laden weiterer Kacheln hereinzoomen"
+
+msgid "increase zoom level to see more detail"
+msgstr "Zoomstufe erhöhen, um mehr Details zu sehen"
+
+msgid "No tiles at this zoom level"
+msgstr "Keine Kacheln auf dieser Zoomstufe"
+
+msgid "Current zoom: {0}"
+msgstr "Aktuelle Zoomstufe: {0}"
+
+msgid "Display zoom: {0}"
+msgstr "Anzeige-Zoomstufe: {0}"
+
+msgid "Pixel scale: {0}"
+msgstr "Pixel Skalierung: {0}"
+
+msgid "Best zoom: {0}"
+msgstr "Optimaler Zoom: {0}"
+
+msgid "Cache stats: {0}"
+msgstr "Zwischenspeicherstatistik: {0}"
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr "{0} ({1}), wird in Zoomstufe {2} automatisch heruntergeladen"
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr "{0} ({1}), wird in Zoomstufe {2} heruntergeladen"
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr "{0}/{1} Kacheln heruntergeladen"
+
+msgid "Save WMS file"
+msgstr "WMS-Datei speichern"
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+"Luftbilder können falsch ausgerichtet sein. Bitte überprüfen Sie deren "
+"Versatz mithilfe von GPS-Spuren!"
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+
+msgid "Details..."
+msgstr "Details …"
+
+msgid "Hide this message and never show it again"
+msgstr "Diese Meldung ausblenden und nie wieder anzeigen"
+
 msgid "Customize Color"
 msgstr "Farben anpassen"
 
@@ -9516,6 +9830,9 @@ msgstr "GPX-Datei speichern"
 msgid "Imagery fade"
 msgstr "Hintergrundbild überblenden"
 
+msgid "Unsupported imagery type: {0}"
+msgstr "Nicht unterstützer Bildtyp: {0}"
+
 msgid "ERROR"
 msgstr "FEHLER"
 
@@ -9536,12 +9853,12 @@ msgstr "Alle Projektionen werden unterstützt"
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 "Die Ebene {0} unterstützt die neue Projektion {1} nicht.\n"
-"{2}\n"
-"Bitte die Projektion erneut ändern oder die Ebene entfernen."
+"Unterstützte Projektionen sind: {2}\n"
+"Ändern Sie die Projektion erneut oder entfernen Sie die Ebene."
 
 msgid "Save Layer"
 msgstr "Ebene speichern"
@@ -9624,193 +9941,88 @@ msgstr ""
 msgid "Save OSM file"
 msgstr "OSM-Datei speichern"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-"{0} ist kein gültiges TMS-Argument. Bitte die Server-URL prüfen:\n"
-"{1}"
+msgid "EPSG:4326 and Mercator projection are supported"
+msgstr "EPSG:4326 und Mercator-Projektion werden unterstützt"
 
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-"TMS-Ebenen unterstützen die Projektion {0} nicht.\n"
-"{1}\n"
-"Bitte Projektion ändern oder die Ebene entfernen."
+msgid "Validation errors"
+msgstr "Prüffehler"
 
-msgid "Auto Zoom"
-msgstr "Autom. Zoom"
+msgid "No validation errors"
+msgstr "Keine Prüffehler"
 
-msgid "Auto load tiles"
-msgstr "Kacheln automatisch laden"
+msgid "Set WMS Bookmark"
+msgstr "WMS-Lesezeichen erstellen"
 
-msgid "Show Errors"
-msgstr "Zeige Fehler"
+msgid ""
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
+msgstr ""
+"JOSM wird EPSG:4326 für Anfragen an den Server verwenden, aber die "
+"Ergebnisse können je nach WMS-Server variieren"
 
-msgid "Load Tile"
-msgstr "Kachel laden"
+msgid "Correlate to GPX"
+msgstr "Mit GPX korrelieren"
 
-msgid "Show Tile Info"
-msgstr "Kachelinformationen anzeigen"
+msgid "Invalid timezone"
+msgstr "Ungültige Zeitzone"
 
-msgid "Load All Tiles"
-msgstr "Alle Kacheln laden"
+msgid "Invalid offset"
+msgstr "Ungültiger Offset"
 
-msgid "Load All Error Tiles"
-msgstr "Alle Fehlerkacheln laden"
+msgid "Correlate images with GPX track"
+msgstr "Bilder mit GPS-Spur korrelieren"
 
-msgid "Increase zoom"
-msgstr "Zoom erhöhen"
+msgid "Try Again"
+msgstr "Erneut versuchen"
 
-msgid "Decrease zoom"
-msgstr "Zoom reduzieren"
+msgid "No images could be matched!"
+msgstr "Es gibt keine passenden Bilder!"
 
-msgid "Snap to tile size"
-msgstr "An Kachelgröße anpassen"
+msgid "GPX Files (*.gpx *.gpx.gz)"
+msgstr "GPX-Dateien (*.gpx *.gpx.gz)"
 
-msgid "Flush Tile Cache"
-msgstr "Kachel-Zwischenspeicher leeren"
+msgid "File {0} is loaded yet under the name \"{1}\""
+msgstr "Datei {0} ist unter dem Namen \"{1}\" bereits geladen"
 
-msgid "zoom in to load any tiles"
-msgstr "Zum Laden von Kacheln hereinzoomen"
+msgid "Error while parsing {0}"
+msgstr "Fehler beim Einlesen von {0}"
 
-msgid "zoom in to load more tiles"
-msgstr "Zum Laden weiterer Kacheln hereinzoomen"
+msgid "Could not read \"{0}\""
+msgstr "Kann \"{0}\" nicht lesen"
 
-msgid "increase zoom level to see more detail"
-msgstr "Zoomstufe erhöhen, um mehr Details zu sehen"
+msgid ""
+"<html>Take a photo of your GPS receiver while it displays the "
+"time.<br>Display that photo here.<br>And then, simply capture the time you "
+"read on the photo and select a timezone<hr></html>"
+msgstr ""
+"<html>Nehmen Sie ein Foto des GPS-Empfängers auf, während er die Zeit "
+"anzeigt. <br>Dieses Foto hier anzeigen.<br>Erfassen Sie dann die Zeit auf "
+"dem Foto und wählen eine Zeitzone<hr></html>"
 
-msgid "No tiles at this zoom level"
-msgstr "Keine Kacheln auf dieser Zoomstufe"
+msgid "Photo time (from exif):"
+msgstr "Fotozeit (aus EXIF):"
 
-msgid "Current zoom: {0}"
-msgstr "Aktuelle Zoomstufe: {0}"
+msgid "Gps time (read from the above photo): "
+msgstr "GPS-Zeit (aus obigem Photo): "
 
-msgid "Display zoom: {0}"
-msgstr "Anzeige-Zoomstufe: {0}"
+msgid "I am in the timezone of: "
+msgstr "Ich bin in der Zeitzone von: "
 
-msgid "Pixel scale: {0}"
-msgstr "Pixel Skalierung: {0}"
+msgid "No date"
+msgstr "Kein Datum"
 
-msgid "Best zoom: {0}"
-msgstr "Optimaler Zoom: {0}"
+msgid "Open another photo"
+msgstr "Ein anderes Foto öffnen"
 
-msgid "Cache stats: {0}"
-msgstr "Cache-Statistik: {0}"
+msgid "Synchronize time from a photo of the GPS receiver"
+msgstr "Zeit von Foto und GPS-Empfänger synchronisieren"
 
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr "TMS-Ebene ({0}), herunterladend in Zoomstufe {1}"
-
-msgid "EPSG:4326 and Mercator projection are supported"
-msgstr "EPSG:4326 und Mercator-Projektion werden unterstützt"
-
-msgid "Validation errors"
-msgstr "Validierungsfehler"
-
-msgid "No validation errors"
-msgstr "Keine Validierungsfehler"
-
-msgid "Blank Layer"
-msgstr "Leere Ebene"
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr "{0}/{1} Kacheln heruntergeladen"
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr "WMS-Ebene ({0}): Automatisches Laden mit Zoom {1}"
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr "WMS-Ebene ({0}): Laden mit Zoom {1}"
-
-msgid "Download visible tiles"
-msgstr "Sichtbare Kacheln laden"
-
-msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-"Das angeforderte Gebiet ist zu groß. Zoomen Sie ein wenig oder ändern Sie "
-"die Auflösung"
-
-msgid "Change resolution"
-msgstr "Auflösung ändern"
-
-msgid "Reload erroneous tiles"
-msgstr "Fehlerhafte Kacheln neu laden"
-
-msgid "Alpha channel"
-msgstr "Alphakanal"
-
-msgid "Automatically change resolution"
-msgstr "Auflösung automatisch ändern"
-
-msgid "Set WMS Bookmark"
-msgstr "WMS-Lesezeichen erstellen"
-
-msgid "Automatic downloading"
-msgstr "Automatisches Laden"
-
-msgid "Zoom to native resolution"
-msgstr "Auf Vorgabeauflösung zoomen"
-
-msgid "Supported projections are: {0}"
-msgstr "Unterstützte Projektionen sind: {0}"
-
-msgid "Unsupported WMS file version; found {0}, expected {1}"
-msgstr "WMS-Datei-Version nicht unterstützt; gefunden {0}, erwartet {1}"
-
-msgid "Save WMS file"
-msgstr "WMS-Datei speichern"
-
-msgid "Correlate to GPX"
-msgstr "Mit GPX korrelieren"
-
-msgid "GPX Files (*.gpx *.gpx.gz)"
-msgstr "GPX-Dateien (*.gpx *.gpx.gz)"
-
-msgid "File {0} is loaded yet under the name \"{1}\""
-msgstr "Datei {0} ist unter dem Namen \"{1}\" bereits geladen"
-
-msgid "Error while parsing {0}"
-msgstr "Fehler beim Einlesen von {0}"
-
-msgid "Could not read \"{0}\""
-msgstr "Kann \"{0}\" nicht lesen"
-
-msgid ""
-"<html>Take a photo of your GPS receiver while it displays the "
-"time.<br>Display that photo here.<br>And then, simply capture the time you "
-"read on the photo and select a timezone<hr></html>"
-msgstr ""
-"<html>Nehmen Sie ein Foto des GPS-Empfängers auf, während er die Zeit "
-"anzeigt. <br>Dieses Foto hier anzeigen.<br>Erfassen Sie dann die Zeit auf "
-"dem Foto und wählen eine Zeitzone<hr></html>"
-
-msgid "Photo time (from exif):"
-msgstr "Fotozeit (aus EXIF):"
-
-msgid "Gps time (read from the above photo): "
-msgstr "GPS-Zeit (aus obigem Photo): "
-
-msgid "I am in the timezone of: "
-msgstr "Ich bin in der Zeitzone von: "
-
-msgid "No date"
-msgstr "Kein Datum"
-
-msgid "Open another photo"
-msgstr "Ein anderes Foto öffnen"
-
-msgid "Synchronize time from a photo of the GPS receiver"
-msgstr "Zeit von Foto und GPS-Empfänger synchronisieren"
-
-msgid ""
-"Error while parsing the date.\n"
-"Please use the requested format"
-msgstr ""
-"Fehler beim Lesen des Datums.\n"
-"Bitte verwenden Sie das geforderte Format"
+msgid ""
+"Error while parsing the date.\n"
+"Please use the requested format"
+msgstr ""
+"Fehler beim Lesen des Datums.\n"
+"Bitte verwenden Sie das geforderte Format"
 
 msgid "Invalid date"
 msgstr "Ungültiges Datum"
@@ -9857,24 +10069,9 @@ msgstr "Zeitzone: "
 msgid "Offset:"
 msgstr "Offset:"
 
-msgid "Correlate images with GPX track"
-msgstr "Bilder mit GPS-Spur korrelieren"
-
 msgid "Correlate"
 msgstr "Korrelieren"
 
-msgid "Invalid timezone"
-msgstr "Ungültige Zeitzone"
-
-msgid "Invalid offset"
-msgstr "Ungültiger Offset"
-
-msgid "Try Again"
-msgstr "Erneut versuchen"
-
-msgid "No images could be matched!"
-msgstr "Es gibt keine passenden Bilder!"
-
 msgid "No gpx selected"
 msgstr "Keine GPS-Spur ausgewählt"
 
@@ -10008,7 +10205,7 @@ msgid "No image"
 msgstr "Kein Bild"
 
 msgid "Loading {0}"
-msgstr "{0} herunterladen"
+msgstr "{0} wird geladen"
 
 msgid "Error on file {0}"
 msgstr "Fehler bei Datei {0}"
@@ -10090,9 +10287,6 @@ msgstr ""
 "\n"
 "GPS-Zeit: {0}"
 
-msgid "JPEG images (*.jpg)"
-msgstr "JPEG-Bilder (*.jpg)"
-
 msgid "Show thumbnails"
 msgstr "Vorschaubilder anzeigen"
 
@@ -10162,9 +10356,6 @@ msgstr "Meter"
 msgid "Maximum area per request:"
 msgstr "Maximalgebiet je Anfrage:"
 
-msgid "sq km"
-msgstr "km²"
-
 msgid "Download near:"
 msgstr "Herunterladen nahe bei:"
 
@@ -10347,10 +10538,10 @@ msgid "Unable to create new audio marker."
 msgstr "Konnte Audio-Marke nicht synchronisieren."
 
 msgid "There was an error while trying to display the URL for this marker"
-msgstr "Fehler beim Anzeigen der URL für diesen Wegpunkt"
+msgstr "Fehler beim Anzeigen der Adresse für diesen Wegpunkt"
 
 msgid "(URL was: "
-msgstr "(Die URL lautet: "
+msgstr "(Die Adresse lautet: "
 
 msgid "Select the map painting styles"
 msgstr "Wählen Sie den Kartenzeichnungsstil"
@@ -10360,7 +10551,7 @@ msgstr ""
 "Mappaint-Stile konnten nicht von ''{0}'' geladen werden. Fehler war: {1}"
 
 msgid "loading style ''{0}''..."
-msgstr "Lade Stil ''{0}'' …"
+msgstr "Stil ''{0}'' wird geladen…"
 
 msgid ""
 "There was an error when loading this style. Select ''Info'' from the right "
@@ -10429,13 +10620,15 @@ msgid "Access Token URL:"
 msgstr "URL der Zugriffskennung:"
 
 msgid "Authorize URL:"
-msgstr "Autorisierungs-URL:"
+msgstr "Legitimierungsadresse:"
 
 msgid "Click to reset the OAuth settings to default values"
-msgstr "OAuth-Einstellungen auf Standardwerte zurücksetzen"
+msgstr ""
+"Klicken Sie, um die OAuth-Einstellungen auf die Standardwerte zurückzusetzen"
 
 msgid "Click to abort resetting to the OAuth default values"
-msgstr "Zurücksetzen auf OAuth-Standardwerte abbrechen"
+msgstr ""
+"Klicken Sie, um das Zurücksetzen auf die OAuth-Standardwerte abzubrechen"
 
 msgid ""
 "<html>JOSM is about to reset the OAuth settings to default values.<br>The "
@@ -10676,7 +10869,7 @@ msgstr "OAuth-Zugriffskennung von ''{0}'' abrufen"
 
 msgid "OSM website did not return a session cookie in response to ''{0}'',"
 msgstr ""
-"OSM-Webseite lieferte keinen Sitzungs-Cookie als Antwort auf ''{0}'',"
+"OSM-Internetseite lieferte keine Sitzungsprofildatei als Antwort auf »{0}«,"
 
 msgid ""
 "Failed to authenticate user ''{0}'' with password ''***'' as OAuth user"
@@ -10688,10 +10881,11 @@ msgid "Failed to authorize OAuth request  ''{0}''"
 msgstr "OAuth-Autorisierungsanfrage ''{0}'' fehlgeschlagen."
 
 msgid "Authorizing OAuth Request token ''{0}'' at the OSM website ..."
-msgstr "Autorisiere OAuth-Anfragekennung ''{0}'' bei der OSM-Webseite …"
+msgstr ""
+"OAuth-Anfragekennung »{0}« von der OSM-Internetseite wird legitimiert …"
 
 msgid "Initializing a session at the OSM website..."
-msgstr "Initialisiere eine Sitzung auf der OSM-Webseite …"
+msgstr "Eine Sitzung auf der OSM-Internetseite wird initialisiert …"
 
 msgid "Authenticating the session for user ''{0}''..."
 msgstr "Authentifiziere die Sitzung für ''{0}'' …"
@@ -10818,9 +11012,9 @@ msgid ""
 "this token. JOSM will use it in the future for authentication and "
 "authorization to the OSM server.<br><br>The access token is: </html>"
 msgstr ""
-"<html>JOSM hat eine erfolgreich eine Zugriffskennung bezogen. Sie können "
-"diese Kennung nun akzeptieren. JOSM wird sie in Zukunft zur Autorisierung "
-"beim OSM-Server verwenden.<br><br>Die Zugriffskennung ist: </html>"
+"<html>JOSM hat erfolgreich eine Zugriffskennung bezogen. Sie können diese "
+"Kennung nun akzeptieren. JOSM wird sie in Zukunft zur Legitimierung beim OSM-"
+"Server verwenden.<br><br>Die Zugriffskennung ist: </html>"
 
 msgid "Click to retrieve a Request Token"
 msgstr "Klicken, um eine Anfragekennung abzurufen"
@@ -10926,9 +11120,6 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr "Einstellungen speichern und Dialog schließen"
 
-msgid "Download plugins"
-msgstr "Plugins herunterladen"
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 "Einige Einstellungen werden erst nach einem Neustart von JOSM wirksam."
@@ -10936,6 +11127,9 @@ msgstr ""
 msgid "Would you like to restart now?"
 msgstr "Möchten Sie jetzt neu starten?"
 
+msgid "Download plugins"
+msgstr "Plugins herunterladen"
+
 msgid "Icon paths:"
 msgstr "Bild-Verzeichnisse"
 
@@ -11075,7 +11269,8 @@ msgid "Advanced Preferences"
 msgstr "Erweiterte Einstellungen"
 
 msgid "Setting Preference entries directly. Use with caution!"
-msgstr "Einstellungseinträge direkt setzen. Bitte vorsichtig benutzen!"
+msgstr ""
+"Einstellungseinträge werden direkt festgelegt. Bitte vorsichtig benutzen!"
 
 msgid "Search: "
 msgstr "Suche: "
@@ -11808,6 +12003,21 @@ msgstr "Bereichsgrenzen anzeigen"
 msgid "No bounding box was found for this layer."
 msgstr "Für diese Ebene wurden keine Bereichsgrenzen gefunden."
 
+msgid "1. Enter getCapabilities URL"
+msgstr "1. URL für getCapabilities eingeben"
+
+msgid "2. Enter name for this layer"
+msgstr "2. Geben Sie den Namen für diese Ebene ein"
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr "{0} Cache, Gesamte Cachegröße: {1} Bytes"
+
+msgid "Cache name"
+msgstr "Cachename"
+
+msgid "Object Count"
+msgstr "Objektanzahl"
+
 msgid "imagery fade"
 msgstr "Hintergrundbild verblassen"
 
@@ -11826,8 +12036,20 @@ msgstr "Stark"
 msgid "Sharpen (requires layer re-add): "
 msgstr "Bild schärfen (danach Ebene neu hinzufügen): "
 
+msgid "Tile cache directory: "
+msgstr "Kachel-Zwischenspeicherverzeichnis: "
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr "Maximale Größe des Festplattenzwischenspeichers (pro Bild) in MB: "
+
+msgid "Maximum number of objects in memory cache: "
+msgstr "Maximale Anzahl der Objekte im Zwischenspeicher: "
+
+msgid "Tiles zoom offset:"
+msgstr "Kachelzoomversatz:"
+
 msgid "Imagery Preferences"
-msgstr "Hintergrundbildeinstellungen"
+msgstr "Bildeinstellungen"
 
 msgid "Modify list of imagery layers displayed in the Imagery menu"
 msgstr ""
@@ -11849,6 +12071,9 @@ msgstr "Bildanbieter"
 msgid "Offset bookmarks"
 msgstr "Versatz-Lesezeichen"
 
+msgid "Cache contents"
+msgstr "Zwischenspeicherinhalte"
+
 msgid "Imagery Background: Default"
 msgstr "Bildquellen-Hintergrund: Standard"
 
@@ -11891,9 +12116,6 @@ msgstr "URL für Endnutzerlizenz nicht verfügbar: {0}"
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr "Ungültige URL für Endnutzerlizenz: {0}"
 
-msgid "Projection"
-msgstr "Projektion"
-
 msgid "Layer"
 msgstr "Ebene"
 
@@ -11918,17 +12140,11 @@ msgstr "Max. Zoomstufe: "
 msgid "Add to slippymap chooser: "
 msgstr "Zum Slippymap Chooser hinzufügen: "
 
-msgid "Tile cache directory: "
-msgstr "Kachel-Zwischenspeicher-Verzeichnis "
-
 msgid "Maximum concurrent downloads: "
 msgstr "Maximale gleichzeitge Herunterladevorgänge: "
 
 msgid "Maximum concurrent downloads per host: "
-msgstr "Maximale Anzahl gleichzeitiger Zugriffe je Server: "
-
-msgid "Maximum elements in disk cache: "
-msgstr "Maximale Einträge im Festplattencache: "
+msgstr "Maximale Anzahl gleichzeitiger Zugriffe pro Host: "
 
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
@@ -11938,20 +12154,11 @@ msgstr ""
 "deshalb kann sie nicht benutzt werden.\n"
 "Diese Meldung wird nicht noch einmal angezeigt."
 
-msgid "Downloader:"
-msgstr "Herunterladeprogramm:"
-
 msgid "Simultaneous connections:"
 msgstr "Gleichzeitige Verbindungen:"
 
-msgid "Overlap tiles"
-msgstr "Kacheln überlappen"
-
-msgid "% of east:"
-msgstr "Ost-West (%):"
-
-msgid "% of north:"
-msgstr "Nord-Süd (%):"
+msgid "Tile size:"
+msgstr "Kachelgröße:"
 
 msgid "Auto save enabled"
 msgstr "Automatisches Speichern aktivieren"
@@ -12030,7 +12237,7 @@ msgid "Reloads the list of available styles from ''{0}''"
 msgstr "Liste der verfügbaren Stile von ''{0}'' laden"
 
 msgid "Loading style sources from ''{0}''"
-msgstr "Verfügbare Stile von ''{0}'' laden"
+msgstr "Stilquellen von ''{0}'' werden geladen"
 
 msgid ""
 "<html>Failed to load the list of style sources "
@@ -12144,7 +12351,7 @@ msgid "Reloads the list of available presets from ''{0}''"
 msgstr "Die Liste der verfügbaren Vorlagen von ''{0}'' neu laden"
 
 msgid "Loading preset sources from ''{0}''"
-msgstr "Liste der Objektvorlagen von ''{0}'' laden"
+msgstr "Objektvorlagenquellen von ''{0}'' werden geladen"
 
 msgid ""
 "<html>Failed to load the list of preset sources "
@@ -12260,7 +12467,7 @@ msgid "Add JOSM Plugin description URL."
 msgstr "JOSM-Pluginbeschreibungsdatei hinzufügen."
 
 msgid "Enter URL"
-msgstr "URL eingeben"
+msgstr "Adresse eingeben"
 
 msgid "Please select an entry."
 msgstr "Bitte einen Eintrag wählen."
@@ -12595,36 +12802,37 @@ msgid ""
 "is likely that ''{0}'' is not an OSM API server.<br>Please check the "
 "spelling of ''{0}'' and validate again.</html>"
 msgstr ""
-"<html>Vom OSM-API-Server ''{0}'' kam keine gültige "
-"Antwort.<br>Wahrscheinlich ist ''{0}'' kein OSM-API-Server.<br>Bitte die "
-"Schreibweise von ''{0}'' kontrollieren und nochmals prüfen.</html>"
+"<html>Vom OSM-API-Server »{0}« kam keine gültige Antwort.<br>Wahrscheinlich "
+"ist »{0}« kein OSM-API-Server.<br>Bitte die Schreibweise von »{0}« "
+"kontrollieren und nochmals prüfen.</html>"
 
 msgid "Authentication"
-msgstr "Authentifizierung"
+msgstr "Legitimierung"
 
 msgid "Configure your identity and how to authenticate at the OSM server"
 msgstr "Konfigurieren Sie Ihre Identität und Authentifizierung am OSM-Server"
 
 msgid "Use Basic Authentication"
-msgstr "Verwende Basisauthentifizierung"
+msgstr "Basislegitimierung verwenden"
 
 msgid ""
 "Select to use HTTP basic authentication with your OSM username and password"
 msgstr ""
-"Auswählen für HTTP-Basisauthentifizierung mit OSM Benutzernamen und Passwort"
+"Auswählen, um HTTP-Basislegitimierung mit Ihrem OSM-Benutzernamen und -"
+"Passwort zu verwenden"
 
 msgid "Use OAuth"
 msgstr "OAuth verwenden"
 
 msgid "Select to use OAuth as authentication mechanism"
-msgstr "Auswählen für OAuth-Authentifizierungsmethode"
+msgstr "Auswählen, um OAuth-Legitimierungmethode zu verwenden"
 
 msgid ""
 "Unsupported value in preference ''{0}'', got ''{1}''. Using authentication "
 "method ''Basic Authentication''."
 msgstr ""
-"Nicht unterstützter Wert ''{1}'' in Einstellung ''{0}''. "
-"Authentifizierungsmethode ''Basisauthentifizierung'' wird verwendet."
+"Nicht unterstützter Wert »{1}« in Einstellung »{0}«. Legitimierungmethode "
+"»Basislegitimierung« wird verwendet."
 
 msgid "OSM username:"
 msgstr "OSM-Benutzername:"
@@ -12711,7 +12919,8 @@ msgid "The API URL is valid."
 msgstr "Die API-URL ist gültig."
 
 msgid "Validation failed. The API URL seems to be invalid."
-msgstr "Überprüfung fehlgeschlagen. Die API-URL scheint ungültig zu sein."
+msgstr ""
+"Überprüfung fehlgeschlagen. Die API-Adresse scheint ungültig zu sein."
 
 msgid "OSM API URL must not be empty. Please enter the OSM API URL."
 msgstr "OSM-API-URL darf nicht leer sein. Bitte OSM-API-URL eingeben."
@@ -12754,8 +12963,8 @@ msgid ""
 "Use standard system settings (disabled. Start JOSM with <tt>-"
 "Djava.net.useSystemProxies=true</tt> to enable)"
 msgstr ""
-"Benutze Standard-System-Einstellungen (deaktiviert. Starte JOSM mit <tt>-"
-"Djava.net.useSystemProxies=true</tt> zum Aktivieren)"
+"Vorgegebene Systemeinstellungen verwenden (Wenn deaktiviert. Zum Aktivieren "
+"JOSM mit <tt>-Djava.net.useSystemProxies=true</tt> starten.)"
 
 msgid "Manually configure a HTTP proxy"
 msgstr "HTTP-Proxy manuell konfigurieren"
@@ -12909,7 +13118,7 @@ msgid "Unnecessary tags"
 msgstr "Unnötige Merkmale"
 
 msgid "Checks for unnecessary tags"
-msgstr "Auf unnötige Merkmale prüfen"
+msgstr "Prüft auf unnötige Merkmale"
 
 msgid "Wikipedia"
 msgstr "Wikipedia"
@@ -12965,8 +13174,8 @@ msgstr "mehrere"
 
 msgid "Remove old keys from up to {0} object"
 msgid_plural "Remove old keys from up to {0} objects"
-msgstr[0] "Entferne alte Schlüssel von bis zu {0} Objekt"
-msgstr[1] "Entferne alte Schlüssel von bis zu {0} Objekten"
+msgstr[0] "Alte Schlüssel von bis zu {0} Objekt entfernen"
+msgstr[1] "Alte Schlüssel von bis zu {0} Objekten entfernen"
 
 msgid "Delete the selection in the tag table"
 msgstr "Auswahl in der Merkmalstabelle löschen"
@@ -12995,6 +13204,18 @@ msgstr "Vorlage anwenden"
 msgid "New relation"
 msgstr "Neue Relation"
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+"Die Voreinstellung <i>{0}</i> kann nicht angewendet werden, da nichts "
+"ausgewählt wurde!"
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+"Die Voreinstellung <i>{0}</i> kann nicht angewendet werden, da die Auswahl "
+"ungeeignet ist!"
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] "Ändere {0} Objekt"
@@ -13113,6 +13334,9 @@ msgstr "Vorlagensuchdialog zeigen"
 msgid "Search presets"
 msgstr "Vorlagen suchen"
 
+msgid "Presets"
+msgstr "Vorlagen"
+
 msgid "Search for objects by preset"
 msgstr "Suche nach Objekten mittels Vorlage"
 
@@ -13201,7 +13425,9 @@ msgstr ""
 "ändern"
 
 msgid "unset: do not set this property on the selected objects"
-msgstr "ungesetzt: diese Eigenschaft bei den gewählten Objekten nicht setzen"
+msgstr ""
+"nicht festgelegt: diese Eigenschaft bei den gewählten Objekten nicht "
+"festlegen"
 
 msgid "Cut"
 msgstr "Ausschneiden"
@@ -13273,10 +13499,10 @@ msgid "All Formats"
 msgstr "Alle Formate"
 
 msgid "Downloading points {0} to {1}..."
-msgstr "Punkte {0} bis {1} werden heruntergeladen …"
+msgstr "Punkte {0} bis {1} werden heruntergeladen…"
 
 msgid "Contacting OSM Server..."
-msgstr "Verbindung zum OSM-Server …"
+msgstr "Zum OSM-Server wird verbunden …"
 
 msgid "Failed to open input stream for resource ''{0}''"
 msgstr ""
@@ -13294,8 +13520,8 @@ msgstr "Datei umbenennen von {0} in {1} fehlgeschlagen."
 
 msgid "Failed to load {0}, use cached file and retry next time: {1}"
 msgstr ""
-"Fehler beim Laden von {0}, gespeicherte Datei wird bis zum nächsten Versuch "
-"verwendet: {1}"
+"Fehler beim Laden von {0}, zwischengespeicherte Datei wird bis zum nächsten "
+"Versuch verwendet: {1}"
 
 msgid ""
 "Unexpected response from HTTP server. Got {0} response without ''Location'' "
@@ -13388,8 +13614,8 @@ msgstr ""
 msgid ""
 "Connection to proxy ''{0}'' for URI ''{1}'' failed. Exception was: {2}"
 msgstr ""
-"Verbindung zum Proxy ''{0}'' mit der URL ''{1}'' ist fehlgeschlagen. Der "
-"Fehler war: {2}"
+"Verbindung zum Vermittlungsserver »{0}« mit der Adresse »{1}« ist "
+"fehlgeschlagen. Der Fehler war: {2}"
 
 msgid ""
 "The JVM is not configured to lookup proxies from the system settings. The "
@@ -13397,8 +13623,8 @@ msgid ""
 "not use a proxy."
 msgstr ""
 "Die JVM ist nicht konfiguriert, die Proxies aus den Systemeinstellungen zu "
-"laden. Die Option ''java.net.useSystemProxies'' war beim Start nicht "
-"gesetzt. Es wird kein Proxy verwendet."
+"laden. Die Eigenschaft ''java.net.useSystemProxies'' fehlte beim Start. Es "
+"wird kein Proxy verwendet."
 
 msgid "Parsing response from server..."
 msgstr "Server-Antwort wird verarbeitet …"
@@ -13427,6 +13653,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr "GeoJSON-Dateien"
 
+msgid "Projected GeoJSON Files"
+msgstr "Projizierte GeoJSON-Dateien"
+
 msgid "Layer ''{0}'' not supported"
 msgstr "Ebene ''{0}'' nicht unterstützt"
 
@@ -13552,8 +13781,8 @@ msgstr "Mehrere Relationen von \"{0}\" abrufen"
 
 msgid "Downloading {0} object from ''{1}''"
 msgid_plural "Downloading {0} objects from ''{1}''"
-msgstr[0] "{0} Objekt aus \"{1}\" herunterladen"
-msgstr[1] "{0} Objekte aus \"{1}\" herunterladen"
+msgstr[0] "{0} Objekt aus \"{1}\" wird heruntergeladen"
+msgstr[1] "{0} Objekte aus \"{1}\" werden heruntergeladen"
 
 msgid ""
 "Server replied with response code 404, retrying with an individual request "
@@ -13563,7 +13792,7 @@ msgstr ""
 "individuellen Anfrage für jedes Objekt."
 
 msgid "Downloading OSM data..."
-msgstr "OSM-Daten herunterladen …"
+msgstr "OSM-Daten werden heruntergeladen…"
 
 msgid "Fetching node with id {0} from ''{1}''"
 msgstr "Knotenpunkt mit der Kennung {0} von \"{1}\" wird abgerufen"
@@ -13610,7 +13839,7 @@ msgid "OSM API"
 msgstr "OSM API"
 
 msgid "JOSM website"
-msgstr "JOSM-Webseite"
+msgstr "JOSM-Internetseite"
 
 msgid "Unable to access ''{0}'': {1} not available (offline mode)"
 msgstr "Kein Zugriff auf ''{0}'': {1} nicht verfügbar (Offline-Modus)"
@@ -13778,7 +14007,8 @@ msgstr "Liste der Änderungssätze einlesen …"
 
 msgid "Failed to sign a HTTP connection with an OAuth Authentication header"
 msgstr ""
-"Anlegen einer HTTP-Verbindung mit einer OAuth-Authentifikation fehlgeschlagen"
+"Anlegen einer HTTP-Verbindung mit einer OAuth-Legitimierung ist "
+"fehlgeschlagen"
 
 msgid "Unexpected value for preference ''{0}''. Got ''{1}''."
 msgstr "Unerwarteter Wert für Einstellung ''{0}'': ''{1}''."
@@ -13799,7 +14029,7 @@ msgid "OSM Server Files gzip compressed"
 msgstr "OSM-Server-Dateien (gzip-komprimiert)"
 
 msgid "Parsing OSM history data ..."
-msgstr "OSM-Versionsprotokoll einlesen …"
+msgstr "OSM-Chronikdaten werden eingelesen …"
 
 msgid "OSM Server Files"
 msgstr "OSM-Server-Dateien"
@@ -13923,36 +14153,36 @@ msgid "Line {0} column {1}: "
 msgstr "Zeile {0} Spalte {1}: "
 
 msgid "Downloading referring ways ..."
-msgstr "Lade referenzierende Linien herunter …"
+msgstr "Referenzierende Linien werden heruntergeladen …"
 
 msgid "Downloading referring relations ..."
-msgstr "Lade referenzierende Relationen herunter …"
+msgstr "Referenzierende Relationen werden heruntergeladen …"
 
 msgid "Reading changesets..."
 msgstr "Änderungssätze einlesen …"
 
 msgid "Downloading changesets ..."
-msgstr "Änderungssätze herunterladen …"
+msgstr "Änderungssätze werden heruntergeladen …"
 
 msgid "Reading changeset {0} ..."
 msgstr "Änderungssatz {0} einlesen …"
 
 msgid "Downloading changeset {0} ..."
-msgstr "Änderungssatz {0} herunterladen …"
+msgstr "Änderungssatz {0} wird heruntergeladen …"
 
 msgid "Downloading {0} changeset ..."
 msgid_plural "Downloading {0} changesets ..."
-msgstr[0] "{0} Änderungssatz herunterladen …"
-msgstr[1] "{0} Änderungssätze herunterladen …"
+msgstr[0] "{0} Änderungssatz wird heruntergeladen …"
+msgstr[1] "{0} Änderungssätze werden heruntergeladen …"
 
 msgid "({0}/{1}) Downloading changeset {2} ..."
-msgstr "({0}/{1}) Änderungssatz {2} herunterladen …"
+msgstr "({0}/{1}) Änderungssatz {2} wird heruntergeladen …"
 
 msgid "Downloading content for changeset {0} ..."
-msgstr "Inhalt von Änderungssatz {0} herunterladen …"
+msgstr "Inhalt von Änderungssatz {0} wird heruntergeladen …"
 
 msgid "Downloading history..."
-msgstr "Versionsprotokoll herunterladen …"
+msgstr "Chronik wird heruntergeladen …"
 
 msgid "Contacting Server..."
 msgstr "Serververbindung …"
@@ -14013,11 +14243,11 @@ msgstr "Hochladen in Blöcken wird gestartet …"
 
 msgid "({0}/{1}) Uploading {2} object..."
 msgid_plural "({0}/{1}) Uploading {2} objects..."
-msgstr[0] "({0}/{1}) {2} Objekt hochladen …"
-msgstr[1] "({0}/{1}) {2} Objekte hochladen …"
+msgstr[0] "({0}/{1}) {2} Objekt wird hochgeladen…"
+msgstr[1] "({0}/{1}) {2} Objekte werden hochgeladen…"
 
 msgid "Uploading data ..."
-msgstr "Übertragung zum Server …"
+msgstr "Daten werden hochgeladen …"
 
 msgid "Unexpected id 0 for osm primitive found"
 msgstr "Unerwartete Kennung 0 für OSM-Primitive gefunden"
@@ -14028,13 +14258,16 @@ msgstr "OSM-Server-Dateien (zip-komprimiert)"
 msgid "WMS Files (*.wms)"
 msgstr "WMS-Dateien (*.wms)"
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr "WMS-Datei-Version nicht unterstützt; gefunden {0}, erwartet {1}"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
 "transferred <strong>unencrypted</strong> in every request sent to the OSM "
 "server. <strong>Do not use a valuable password.</strong></p></body></html>"
 msgstr ""
-"<html><body><p class=\"warning-body\"><strong>Warnung:</strong> Das OSM-"
+"<html><body><p class=\"warning-body\"><strong>Achtung:</strong> Das OSM-"
 "Passwort wird als Klartext in den JOSM-Einstellungen gespeichert. Außerdem "
 "wird es <strong>unverschlüsselt</strong> in jeder Anfrage zum OSM-Server "
 "gesendet. <strong>Verwenden Sie kein wertvolles "
@@ -14150,8 +14383,8 @@ msgid ""
 "Remote Control has been asked to report its supported features. This enables "
 "web sites to guess a running JOSM version"
 msgstr ""
-"Die Fernsteuerung soll ihre unterstützten Eigenschaften melden. Damit können "
-"Webseiten eine laufende JOSM-Version erkennen."
+"Die Fernsteuerung will einen Bericht über die unterstützten Eigenschaften "
+"melden. Damit können Internetseiten eine laufende JOSM-Version erkennen."
 
 msgid ""
 "Remote Control has been asked to load an imagery layer from the following "
@@ -14203,8 +14436,8 @@ msgid ""
 "Remote Control has been asked to report its protocol version. This enables "
 "web sites to detect a running JOSM."
 msgstr ""
-"Die Fernsteuerung soll Auskunft über die Protokollversion geben. Damit "
-"können Webseiten ein laufendes JOSM erkennen."
+"Die Fernsteuerung will einen Bericht über die Protokollversion melden. Damit "
+"können Internetseite ein laufendes JOSM erkennen."
 
 msgid ""
 "Version ''{0}'' of meta data for geoimage layer is not supported. Expected: "
@@ -14377,7 +14610,7 @@ msgid "Failed to create plugin directory ''{0}''"
 msgstr "Erstellen des Plugin-Verzeichnisses ''{0}'' fehlgeschlagen"
 
 msgid "Downloading Plugin {0}..."
-msgstr "Plugin {0} herunterladen …"
+msgstr "Plugin {0} wird heruntergeladen …"
 
 msgid "An error occurred in plugin {0}"
 msgstr "Ein Fehler ist in dem Plugin {0} aufgetreten."
@@ -14473,6 +14706,21 @@ msgid_plural ""
 msgstr[0] "Das Plugin {0} benötigt zusätzlich das folgende Plugin:"
 msgstr[1] "Das Plugin {0} benötigt zusätzlich die folgenden {1} Plugins:"
 
+msgid "Download and restart"
+msgstr "Herunterladen und Neustarten"
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+"Klicke, um das fehlende Plugin herunterzuladen und JOSM neuzustarten."
+msgstr[1] ""
+"Klicke, um die fehlenden Plugins herunterzuladen und JOSM neuzustarten."
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] "Klicke, um ohne dieses Plugin fortzufahren."
+msgstr[1] "Klicke, um ohne diese Plugins fortzufahren."
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -14486,7 +14734,7 @@ msgstr ""
 "Plugin {0} konnte nicht geladen werden. Aus den Einstellungen entfernen?"
 
 msgid "loading plugin ''{0}'' (version {1})"
-msgstr "Lade Plugin ''{0}'' (Version {1})"
+msgstr "Plugin ''{0}'' wird geladen (Version {1})"
 
 msgid ""
 "<html>Could not load plugin {0} because the plugin<br>main class ''{1}'' was "
@@ -14496,13 +14744,13 @@ msgstr ""
 "nicht gefunden wurde.<br>Aus den Einstellungen entfernen?</html>"
 
 msgid "Loading plugins ..."
-msgstr "Plugins laden …"
+msgstr "Plugins werden geladen …"
 
 msgid "Checking plugin preconditions..."
-msgstr "Plugin-Anforderungen prüfen …"
+msgstr "Plugin-Anforderungen werden geprüft…"
 
 msgid "Loading plugin ''{0}''..."
-msgstr "Plugin {0} laden …"
+msgstr "Plugin {0} wird geladen …"
 
 msgid "JOSM could not find information about the following plugin:"
 msgid_plural "JOSM could not find information about the following plugins:"
@@ -14522,7 +14770,7 @@ msgid "Removing deprecated plugins..."
 msgstr "Veraltete Plugins entfernen …"
 
 msgid "Removing unmaintained plugins..."
-msgstr "Entferne nicht mehr gepflegte Plugins …"
+msgstr "Nicht mehr gepflegte Plugins werden entfernt…"
 
 msgid "Updating the following plugin has failed:"
 msgid_plural "Updating the following plugins has failed:"
@@ -14701,7 +14949,7 @@ msgid ""
 "plugin site ''{1}''."
 msgstr ""
 "Das Anlegen des Erweiterungsverzeichnisses »{0}« ist fehlgeschlagen. Die "
-"Erweiterungsliste der Erweiterungsseite »{1}« kann nicht zwischenspeichert "
+"Erweiterungsliste der Erweiterungsseite »{1}« kann nicht zwischengespeichert "
 "werden."
 
 msgid "Writing plugin list to local cache ''{0}''"
@@ -14994,7 +15242,7 @@ msgid ""
 "failed.<br>Please check the username and the password in the JOSM "
 "preferences.</html>"
 msgstr ""
-"<html>Authentifizierung am OSM-Server mit dem Benutzernamen \"{0}\" "
+"<html>Legitimierung am OSM-Server mit dem Benutzernamen »{0}« ist "
 "fehlgeschlagen.<br>Bitte überprüfen Sie Benutzername und Passwort in den "
 "JOSM-Einstellungen.</html>"
 
@@ -15003,9 +15251,9 @@ msgid ""
 "failed.<br>Please launch the preferences dialog and retrieve another OAuth "
 "token.</html>"
 msgstr ""
-"<html>Die Anmeldung beim OSM-Server mit der OAuth-Zugriffskennung \"{0}\" "
-"ist fehlgeschlagen.<br>Rufen Sie bitte den Voreinstellungsdialog auf, um "
-"eine neue Zugriffskennung anzufordern.</html>"
+"<html>Die Anmeldung beim OSM-Server mit der OAuth-Zugriffskennung »{0}« ist "
+"fehlgeschlagen.<br>Rufen Sie bitte den Voreinstellungsdialog auf, um eine "
+"neue Zugriffskennung anzufordern.</html>"
 
 msgid ""
 "<html>Authorisation at the OSM server failed.<br>The server reported the "
@@ -15086,8 +15334,8 @@ msgid ""
 "applet and because you did not load your applet from ''{1}''."
 msgstr ""
 "<html>Öffnen einer Verbindung zum Server aus Sicherheitsgründen "
-"fehlgeschlagen.<br>''{0}''<br>Wahrscheinlich starten Sie die Software als "
-"Applet<br>und das Applet wurde nicht von ''{1}'' geladen."
+"fehlgeschlagen.<br>»{0}«<br>Wahrscheinlich haben Sie das Programm als Applet "
+"gestartet<br>und das Applet wurde nicht von »{1}« geladen."
 
 msgid ""
 "<html>Failed to open a connection to the remote server<br>''{0}''.<br>Please "
@@ -15124,7 +15372,7 @@ msgstr ""
 "Bitte versuchen Sie es später noch einmal."
 
 msgid "The OSM server ''{0}'' reported a bad request.<br>"
-msgstr "Der OSM-Server \"{0}\" meldet eine fehlerhafte Anfrage.<br>"
+msgstr "Der OSM-Server »{0}« meldet eine fehlerhafte Anfrage.<br>"
 
 msgid ""
 "The area you tried to download is too big or your request was too "
@@ -15202,7 +15450,7 @@ msgid ""
 "platform first."
 msgstr ""
 "URL kann nicht geöffnet werden. Es ist aktuell keine Plattform ausgewählt. "
-"Bitte zuerst eine Plattform setzen."
+"Bitte zuerst eine Plattform festlegen."
 
 msgid "Opening URL: {0}"
 msgstr "Öffne URL: {0}"
@@ -15272,7 +15520,7 @@ msgstr ""
 "Dialog."
 
 msgid "Removing insecure certificate from {0} keystore: {1}"
-msgstr "Entferne unsicheres Zertifikat von {0} Schlüsselspeicher: {1}"
+msgstr "Unsicheres Zertifikat von {0} Schlüsselspeicher wird entfernt: {1}"
 
 msgid "Unable to remove insecure certificate from keystore: {0}"
 msgstr ""
@@ -15701,6 +15949,9 @@ msgstr "Aktualisieren"
 msgid "Update directory listing."
 msgstr "Verzeichnisinhalt aktualisieren."
 
+msgid "View"
+msgstr "Ansicht"
+
 msgid "Blue:"
 msgstr "Blau:"
 
@@ -15740,8 +15991,8 @@ msgstr "MapQuest Open Aerial"
 msgid "OpenStreetMap GPS Traces"
 msgstr "OpenStreetMap GPS-Spuren"
 
-msgid "OpenStreetMap (Mapnik)"
-msgstr "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
+msgstr "OpenStreetMap (Standardebene)"
 
 msgid "skobbler"
 msgstr "skobbler"
@@ -15752,9 +16003,6 @@ msgstr "OpenStreetMap (Mapnik Schwarz&Weiß)"
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr "OpenStreetMap (Mapnik, ohne Beschriftungen)"
 
-msgid "skobbler heatmap"
-msgstr "skobbler heatmap"
-
 msgid "OpenCycleMap"
 msgstr "OpenCycleMap"
 
@@ -15863,6 +16111,9 @@ msgstr "Wien: Orthofoto"
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr "VoGIS: Echtfarbenbild 2012 (12cm)"
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr "VoGIS: Flächenwidmungsplan"
 
@@ -15877,12 +16128,18 @@ msgid ""
 msgstr ""
 "AGIV (Flandern) Luftbilder (deckt auch die Brüsseler Region mit ab) (2013)"
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr "SPW(allonie) PICC-Zahlenbild"
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr "SPW(allonie) 2012 Luftbilder"
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr "SPW(allonie) 2009 Luftbilder"
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr "Kataster: nur für Namen und Hausnummern, schlechte Geometrie"
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr "IBGE Mapa de Setores Urbanos"
 
@@ -15919,12 +16176,18 @@ msgstr "Czech RUIAN parcely"
 msgid "Czech pLPIS"
 msgstr "Czech pLPIS"
 
-msgid "Fugro (Denmark)"
-msgstr "Fugro (Dänemark)"
-
 msgid "Geodatastyrelsen (Denmark)"
 msgstr "Geodatenbehörde (Dänemark)"
 
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr "Geodatenbehörde DTK-Karte25"
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr "Geodatenbehörde Schummerungskarte 1,6 m"
+
+msgid "Geodatastyrelsen Skærmkort"
+msgstr "Geodatenbehörde Bildschirmkarte"
+
 msgid "Stevns (Denmark)"
 msgstr "Stevns (Dänemark)"
 
@@ -15949,6 +16212,9 @@ msgstr "Estland Forstwirtschaft (Maaamet)"
 msgid "BANO"
 msgstr "BANO (Französische Adressen unter offener Lizenz)"
 
+msgid "BD Carthage"
+msgstr "BD Carthage"
+
 msgid "Bordeaux - 2012"
 msgstr "Bordeaux - 2012"
 
@@ -15973,8 +16239,8 @@ msgstr "Géobretagne - Morbihan 2010"
 msgid "Géolittoral - Orthophotos 2000"
 msgstr "Géolittoral - Orthophotos 2000"
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
-msgstr "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
+msgstr "Géolittoral V2 - Orthophotos 2011-2014"
 
 msgid "Géolittoral - Sentiers"
 msgstr "Géolittoral - Sentiers"
@@ -15988,6 +16254,9 @@ msgstr "Loire-Atlantique - Orthophotos 2012 - 20 cm"
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 
+msgid "Route 500™©®"
+msgstr "Route 500™©®"
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr "Toulouse - Orthophotoplan 2013"
 
@@ -16000,12 +16269,6 @@ msgstr "Toulouse - Orthophotoplan 2007"
 msgid "Tours - Orthophotos 2013"
 msgstr "Tours - Orthophotos 2013"
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr "Tours - Orthophotos 2008-2010"
-
-msgid "Tours - Orthophotos 2008"
-msgstr "Tours - Orthophotos 2008"
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -16028,6 +16291,9 @@ msgstr "Hamburg (20 cm)"
 msgid "Hamburg (DK5)"
 msgstr "Hamburg (DK5)"
 
+msgid "Bavaria (80 cm)"
+msgstr "Bayern (80 cm)"
+
 msgid "Bavaria (2 m)"
 msgstr "Bayern (2 m)"
 
@@ -16062,11 +16328,8 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr "Maps4BW (LGL-BW, www.lgl-bw.de)"
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
-msgstr "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
+msgstr "NRW-Atlas: ALKIS"
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
 msgstr "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -16095,6 +16358,12 @@ msgstr "Ireland British War Office One-Inch 1941-43 GSGS 4136"
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr "Ireland Bartholomew Quarter-Inch 1940"
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr "Irland politische Gemeinden und Herrschaftsgebiete - Denkmal-Atlas"
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr "Gedenkatlas Irlands (1901) L.J. Richards"
+
 msgid "OSMIE Townlands"
 msgstr "OSMIE Townlands"
 
@@ -16110,60 +16379,6 @@ msgstr "OSMIE Baronien"
 msgid "OSMIE Political"
 msgstr "OSMIE Politisch"
 
-msgid "Ireland EEA GMES Urban Atlas"
-msgstr "Ireland EEA GMES Urban Atlas"
-
-msgid "Ireland EEA CORINE 2006"
-msgstr "Ireland EEA CORINE 2006"
-
-msgid "Antrim Civil Parishes and Baronies"
-msgstr "Antrim Gemeinden und Baronien"
-
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
-msgstr "Gedenkatlas Irlands (1901) L.J. Richards"
-
-msgid "Carlow Civil Parishes and Baronies"
-msgstr "Carlow Gemeinden und Baronien"
-
-msgid "Clare Civil Parishes and Baronies"
-msgstr "Clare Gemeinden und Baronien"
-
-msgid "Dublin Civil Parishes and Baronies"
-msgstr "Dublin Gemeinden und Baronien"
-
-msgid "Fermanagh Civil Parishes and Baronies"
-msgstr "Fermanagh Gemeinden und Baronien"
-
-msgid "Galway Civil Parishes and Baronies"
-msgstr "Galway Gemeinden und Baronien"
-
-msgid "Kildare Civil Parishes and Baronies"
-msgstr "Kildare Gemeinden und Baronien"
-
-msgid "Leitrim Civil Parishes and Baronies"
-msgstr "Leitrim Gemeinden und Baronien"
-
-msgid "Longford Civil Parishes and Baronies"
-msgstr "Longford Gemeinden und Baronien"
-
-msgid "Offaly Civil Parishes and Baronies"
-msgstr "Offaly Gemeinden und Baronien"
-
-msgid "Sligo Civil Parishes and Baronies"
-msgstr "Sligo Gemeinden und Baronien"
-
-msgid "Tyrone Civil Parishes and Baronies"
-msgstr "Tyrone Gemeinden und Baronien"
-
-msgid "Westmeath Civil Parishes and Baronies"
-msgstr "Westmeath Gemeinden und Baronien"
-
-msgid "Wexford Civil Parishes and Baronies"
-msgstr "Wexford Gemeinden und Baronien"
-
-msgid "Wicklow Civil Parishes and Baronies"
-msgstr "Wicklow Gemeinden und Baronien"
-
 msgid "Lodi - Italy"
 msgstr "Lodi - Italien"
 
@@ -16197,6 +16412,9 @@ msgstr "50cm Orthofoto - Lettland"
 msgid "20cm ortho - Latvia - Coastline"
 msgstr "20cm Orthofoto - Lettland - Küstenlinie"
 
+msgid "1.cikla ortofotokarte - Latvia"
+msgstr "1. Version Orthophoto - Litauen"
+
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Litauen)"
 
@@ -16212,6 +16430,9 @@ msgstr "Luxembourg Inspire Railway"
 msgid "Luxembourg Inspire Roads"
 msgstr "Luxembourg Inspire Roads"
 
+msgid "Luxembourg Inspire Water"
+msgstr "Luxemburg Inspire Water"
+
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Nigerdelta Okt 2012 Landsat"
 
@@ -16225,58 +16446,121 @@ msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr "Pangasinán/Bulacan (Phillipinen HiRes)"
 
 msgid "Geoportal 2: Ortofotomapa (aerial image)"
-msgstr "Geoportal 2: Ortofotomapa (Luftbild)"
+msgstr "Geoportal 2: Luftbild"
+
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgstr "Geoportal 2: Luftbildkarte WMTS"
 
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr "Geoportal 2: PRNG (Geonamen)"
 
+msgid "Geoportal 2: ISOK hillshade"
+msgstr "Geoportal 2: ISOK-Schummerung"
+
 msgid "Będzin: Ortofotomapa 2013 (aerial image)"
-msgstr "Będzin: Ortofotomapa 2013 (Luftbild)"
+msgstr "Będzin: Luftbild 2013"
 
 msgid "Będzin: Budynki (buildings)"
-msgstr "Będzin: Budynki (Gebäude)"
+msgstr "Będzin: Gebäude"
 
 msgid "Bytom: Ortofotomapa 2012 (aerial image)"
-msgstr "Bytom: Ortofotomapa 2012 (Luftbild)"
+msgstr "Bytom: Luftbild 2012"
+
+msgid "Bytom: Fotoplan 2014 (aerial image)"
+msgstr "Beuthen: Fotoplan 2014 (Luftbild)"
 
 msgid "Bytom: Budynki (buildings)"
-msgstr "Bytom: Budynki (Gebäude)"
+msgstr "Bytom: Gebäude"
 
 msgid "Chorzów: Budynki (buildings)"
-msgstr "Chorzów: Budynki (Gebäude)"
+msgstr "Chorzów: Gebäude"
+
+msgid "Częstochowa: Budynki (buildings)"
+msgstr "Tschenstochau: Gebäude (buildings)"
 
 msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
-msgstr "Częstochowa: Ortofotomapa 2011 (Luftbild)"
+msgstr "Częstochowa: Luftbild 2011"
+
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgstr "Tschenstochau: Luftbildkarte 2013"
+
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgstr "Tschenstochau: Luftbildkarte 2014"
 
 msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
-msgstr "Gliwice: Ortofotomapa 2013 (Luftbild)"
+msgstr "Gliwice: Luftbild 2013"
 
 msgid "Gliwice: Budynki (buildings)"
-msgstr "Gliwice: Budynki (Gebäude)"
+msgstr "Gliwice: Gebäude"
 
 msgid "Katowice: Ortofotomapa (aerial image)"
-msgstr "Katowice: Ortofotomapa (Luftbild)"
+msgstr "Katowice: Luftbild"
+
+msgid "Katowice: Budynki (buildings)"
+msgstr "Kattowitz: Gebäude (buildings)"
+
+msgid "Łódź: Budynki (buildings)"
+msgstr "Łódź: Gebäude"
 
 msgid "Łódź: Ortofotomapa (aerial image)"
-msgstr "Łódź: Ortofotomapa (Luftbild)"
+msgstr "Łódź: Luftbild"
+
+msgid "Powiat dębicki: Budynki (buildings)"
+msgstr "Landkreis Dębicki: Gebäude"
+
+msgid "Powiat lubaczowski: Budynki (buildings)"
+msgstr "Landkreis Lubaczowski: Gebäude"
+
+msgid "Powiat łańcucki: Budynki (buildings)"
+msgstr "Landkreis Łańcucki: Gebäude"
+
+msgid "Powiat poznański: Budynki (buildings)"
+msgstr "Landkreis Poznański: Gebäude"
+
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgstr "Landkreis Posen: Luftbildkarte"
+
+msgid "Powiat rzeszowski: Budynki (buildings)"
+msgstr "Landkreis Rzeszowski: Gebäude"
+
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgstr "Landkreis Rzeszowski: Luftbild"
+
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr "Landkreis Stalowowolski: Gebäude"
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr "Przemyśl: Gebäude"
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgstr "Przemyśl: Luftbild"
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
-msgstr "Ruda Śląska: Ortofotomapa (Luftbild)"
+msgstr "Ruda Śląska: Luftbild"
 
 msgid "Rzeszów: Ortofotomapa (aerial image)"
-msgstr "Rzeszów: Ortofotomapa (Luftbild)"
+msgstr "Rzeszów: Luftbild"
 
 msgid "Rzeszów: Budynki (buildings)"
-msgstr "Rzeszów: Budynki (Gebäude)"
+msgstr "Rzeszów: Gebäude"
 
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
-msgstr "Siemianowice Śląskie: Ortofotomapa (Luftbild)"
+msgstr "Siemianowice Śląskie: Luftbild"
+
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr "Siemianowitz: Gebäude (buildings)"
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr "Schwientochlowitz: Luftbildkarte 2008"
 
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
-msgstr "Świętochłowice: Ortofotomapa 2009 (Luftbild)"
+msgstr "Świętochłowice: Luftbild 2009"
+
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr "Schwientochlowitz: Luftbildkarte 2012"
 
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
-msgstr "Zabrze: Ortofotomapa 2011 (Luftbild)"
+msgstr "Zabrze: Luftbild 2011"
 
 msgid "trail.pl: Szlaki (paths)"
 msgstr "trail.pl: Szlaki (Pfade)"
@@ -16404,6 +16688,21 @@ msgstr "Bonvillars Orthophoto 2013"
 msgid "Fiez Orthophoto 2013"
 msgstr "Fiez Orthophoto 2013"
 
+msgid "Taiwan e-Map Open Data"
+msgstr "Taiwan e-Map Open Data"
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr "Taiwan e-Map Open Data (mit Höhenlinie)"
+
+msgid "Taiwan Village Boundaries"
+msgstr "Taiwan Dorfgrenzen"
+
+msgid "Taiwan Land-Section Data"
+msgstr "Taiwan Parzellendaten"
+
+msgid "NLSC Open Data WMTS"
+msgstr "NLSC Open Data WMTS"
+
 msgid "MSR Maps Topo"
 msgstr "MSR Maps Topo"
 
@@ -16419,8 +16718,8 @@ msgstr "USGS Großflächige Bilder"
 msgid "TIGER 2012 Roads Overlay"
 msgstr "TIGER 2012 Straßen Overlay"
 
-msgid "New & Misaligned TIGER Roads (2014)"
-msgstr "Neue & falsch ausgerichtete TIGER Straßen (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
+msgstr "Neue & falsch ausgerichtete TIGER-Straßen (2015)"
 
 msgid "MassGIS L3 Parcels"
 msgstr "MassGIS L3 Parzellen"
@@ -16765,6 +17064,14 @@ msgstr ""
 "Implementiert eine Kommandozeile und erlaubt es Kommandos zu erstellen. "
 "Siehe Link für Standardkommandos (Bogen, Kreis, …)"
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+"Stellt die Commons-Imaging-Bibliothek zur Verfügung. Nicht bestimmt zur "
+"direkten Installation durch Benutzer, sondern als Abhängigkeit für andere "
+"Erweiterungen."
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr "(Warnung: Experimentell!) Werkzeug zum Zusammenführen von Daten."
 
@@ -16867,13 +17174,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr "WMS-Plugin ähnlicher Modus zum Kartenverschieben"
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-"Dieses experimentelle Plugin hält den Kachel-Zwischenspeicher in Datenbank-"
-"Dateien anstatt in (großen) Verzeichnissen vor"
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -16948,9 +17248,9 @@ msgstr ""
 "Mithilfe dieser Erweiterung können Sie Fehlerberichte erstellen, schließen, "
 "wiedereröffnen und kommentieren."
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
-"Erlaubt Nutzern mit auf mapillary.com gespeicherten Bildern zu arbeiten"
+"Ermöglicht dem Benutzer die Arbeit mit auf mapillary.com gehosteten Bildern"
 
 msgid ""
 "Provide a measurement dialog and a layer to measure length and angle of "
@@ -16967,9 +17267,6 @@ msgstr "Überlappendene Teile von Linien zusammenführen."
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr "Fügt Abbiegeverbote nach links für 4 oder 5 ausgewählte Linien hinzu"
 
-msgid "Simplifies download from different read-only APIs."
-msgstr "Vereinfacht das Herunterladen von verschiedenen Nur-Lese-APIs."
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 "Ermöglicht das unmittelbare Zuordnen von Merkmalen zu allen Objekten eines "
@@ -17034,7 +17331,7 @@ msgid ""
 "right click menu of the image layer."
 msgstr ""
 "Schreibt GPS-Position in die Dateiinformationen von Fotos. Rufen Sie diese "
-"Funktion per Rechtsklick auf der Foto-Ebene auf."
+"Funktion per Rechtsklick auf der Fotoebene auf."
 
 msgid "Make photos movable and position them on the map."
 msgstr "Fotos verschiebbar machen und auf der Karte platzieren."
@@ -17071,6 +17368,18 @@ msgstr ""
 "Dieses Plugin erleichtert das Erfassen und Editieren von Routen des "
 "öffentlichen Verkehrs."
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+"Haltestellen der gewählten Routen des öffentlichen Verkehrs als Graph "
+"anzeigen"
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+"Das RasterFiltersPlugin ermöglicht das Auswählen und Anwenden einiger "
+"Bildfilter auf manche Ebenen"
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 "Werkzeuge zum Erstellen und Ändern von Relationen und Multipolygonen."
@@ -17119,6 +17428,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr "Bearbeitungsfunktionen für OpenSeaMap"
 
+msgid "Allows to draw splines"
+msgstr "Ermöglicht das Zeichnen von Splines"
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -17134,8 +17446,8 @@ msgid ""
 "Launch browser to a Web resource about a selected object having known tags, "
 "such as Wikipedia"
 msgstr ""
-"Browser mit einer Webseite über das gewählte Objekt aufrufen, wenn dieses "
-"bekannte Schlüssel, wie z.B. ''wikipedia'' enthält."
+"Browser mit einer Internetseite über das gewählte Objekt aufrufen, wenn "
+"dieses bekannte Schlüssel, wie z.B. »wikipedia« enthält."
 
 msgid "Provides a dialog for editing tags in a tabular grid."
 msgstr "Öffnet einen Dialog, um Merkmale in einer Tabelle zu bearbeiten."
@@ -17220,9 +17532,6 @@ msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 "Erlaubt die Suche nach einem aus einer GPX-Datei importierten Waypoint."
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr "Eine Reihe von nichtverzweigenden verbundenen Linien auswählen"
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr "Vereinfacht das Verknüpfen von OSM-Objekten mit Wikipedia-Artikeln"
 
@@ -17425,7 +17734,7 @@ msgid "no"
 msgstr "nein"
 
 msgid "Service type"
-msgstr "Service-Typ"
+msgstr "Diensttyp"
 
 msgid "yard"
 msgstr "Rangiergleis"
@@ -17489,7 +17798,7 @@ msgid "Operator"
 msgstr "Betreiber"
 
 msgid "Service Times"
-msgstr "Servicezeiten"
+msgstr "Dienstzeiten"
 
 msgid "18:00"
 msgstr "18:00"
@@ -17632,6 +17941,14 @@ msgid "basketball"
 msgstr "Basketball"
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr "Strandvolleyball"
+
+msgctxt "sport"
+msgid "billiards"
+msgstr "Billard"
+
+msgctxt "sport"
 msgid "boules"
 msgstr "Boule"
 
@@ -17656,10 +17973,6 @@ msgid "cricket"
 msgstr "Kricket"
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr "Kricketnetze"
-
-msgctxt "sport"
 msgid "croquet"
 msgstr "Krocket"
 
@@ -17676,6 +17989,10 @@ msgid "equestrian"
 msgstr "Reiten"
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr "Feldhockey"
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr "Gälische Spiele"
 
@@ -17692,16 +18009,28 @@ msgid "handball"
 msgstr "Handball"
 
 msgctxt "sport"
-msgid "hockey"
-msgstr "Hockey"
-
-msgctxt "sport"
 msgid "horse_racing"
 msgstr "Pferderennen"
 
 msgctxt "sport"
-msgid "motor"
-msgstr "Motorsport"
+msgid "ice_hockey"
+msgstr "Eishockey"
+
+msgctxt "sport"
+msgid "karting"
+msgstr "Gokartfahren"
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr "Modellflugplatz"
+
+msgctxt "sport"
+msgid "motocross"
+msgstr "Motocross"
+
+msgctxt "sport"
+msgid "motor"
+msgstr "Motorsport"
 
 msgctxt "sport"
 msgid "pelota"
@@ -17712,6 +18041,10 @@ msgid "racquet"
 msgstr "Schlagball (Racquet)"
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr "ferngesteuertes Auto"
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr "Rugby League"
 
@@ -17724,6 +18057,10 @@ msgid "running"
 msgstr "Laufsport"
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr "Sicherheitstraining"
+
+msgctxt "sport"
 msgid "shooting"
 msgstr "Schießen"
 
@@ -17751,6 +18088,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr "Tennis"
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr "Volleyball"
+
+msgctxt "sport"
+msgid "9pin"
+msgstr "Kegeln"
+
+msgctxt "sport"
+msgid "10pin"
+msgstr "Bowling"
+
 msgid "Fee"
 msgstr "Gebühr"
 
@@ -17822,7 +18171,7 @@ msgid "Post code"
 msgstr "Postleitzahl"
 
 msgid "Website"
-msgstr "Webseite"
+msgstr "Internetseite"
 
 msgid "Distance (km)"
 msgstr "Distanz (km)"
@@ -18147,6 +18496,9 @@ msgstr "Kreisstraßenanschluss"
 msgid "Unclassified"
 msgstr "Verbindungsstraße"
 
+msgid "Street has no name"
+msgstr "Straße hat keinen Namen"
+
 msgid "Passing Places"
 msgstr "Ausweichstellen"
 
@@ -18225,6 +18577,9 @@ msgstr ""
 "Notfallspur neben längeren Gefällestrecken für Lastwagen und andere "
 "Fahrzeuge, um sicher nach Ausfall der Bremse zu stoppen."
 
+msgid "Raceway"
+msgstr "Rennstecke"
+
 msgid "Road (Unknown Type)"
 msgstr "Unbekannter Straßentyp"
 
@@ -18358,7 +18713,7 @@ msgid "High-occupancy vehicles (hov)"
 msgstr "Fahrgemeinschaft"
 
 msgid "Public Service Vehicles (psv)"
-msgstr "Öffentlicher Verkehr & Taxi"
+msgstr "Öffentlicher Verkehr (psv)"
 
 msgid "Tourist buses"
 msgstr "Tourismusbusse"
@@ -18644,7 +18999,7 @@ msgid "Exit to"
 msgstr "Ausfahrt nach"
 
 msgid "Services"
-msgstr "Rastplatz / Autohof"
+msgstr "Raststätte"
 
 msgid "Toilets"
 msgstr "Toiletten"
@@ -18701,7 +19056,7 @@ msgid "Button operated"
 msgstr "Knopfbetätigt"
 
 msgid "Sound signals"
-msgstr "akustisches Warnsignal"
+msgstr "Akustische Warnsignale"
 
 msgid "Crossing attendant"
 msgstr "Schülerlotse"
@@ -18731,7 +19086,7 @@ msgid "Pedestrian Crossing"
 msgstr "Fußgängerüberweg"
 
 msgid "In case of traffic signals:"
-msgstr "Bei Ampel:"
+msgstr "Bei Lichtsignalen:"
 
 msgid "Traffic Calming"
 msgstr "Verkehrsberuhigung"
@@ -18778,6 +19133,12 @@ msgstr "Geschwindigkeitsüberwachung"
 msgid "Traffic Mirror"
 msgstr "Verkehrsspiegel"
 
+msgid "Highway milestone"
+msgstr "Straßenkilometerstein"
+
+msgid "Distance (kilometers)"
+msgstr "Entfernung (Kilometer)"
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr "Benannter Straßenknotenpunkt"
@@ -18969,6 +19330,11 @@ msgstr "Kolonnade"
 msgid "Avalanche Protector"
 msgstr "Lawinenschutz"
 
+msgctxt "main group"
+msgid "Water"
+msgstr "Wasser"
+
+msgctxt "sub group"
 msgid "Water"
 msgstr "Wasser"
 
@@ -19023,6 +19389,10 @@ msgstr "Speicherbecken"
 msgid "Covered Reservoir"
 msgstr "Überdecktes Speicherbassin"
 
+msgctxt "natural"
+msgid "Water"
+msgstr "Wasser"
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr "Ein stehendes Gewässer, zum Beispiel ein See oder Teich"
 
@@ -19073,7 +19443,7 @@ msgstr ""
 "Wassergesättigter Bereich, entweder dauerhaft oder saisonal mit Vegetation."
 
 msgid "swamp"
-msgstr "Sumpf"
+msgstr "Bruchwald"
 
 msgid "bog"
 msgstr "Moor"
@@ -19170,6 +19540,120 @@ msgstr "Entsorgungsstation"
 msgid "public"
 msgstr "öffentlich"
 
+msgid "Marine Fuel"
+msgstr "Wasserfahrzeugtankstelle"
+
+msgid "Agip"
+msgstr "Agip"
+
+msgid "Aral"
+msgstr "Aral"
+
+msgid "Avia"
+msgstr "Avia"
+
+msgid "BP"
+msgstr "BP"
+
+msgid "Chevron"
+msgstr "Chevron"
+
+msgid "Citgo"
+msgstr "Citgo"
+
+msgid "Eni"
+msgstr "Eni"
+
+msgid "Esso"
+msgstr "Esso"
+
+msgid "Exxon"
+msgstr "Exxon"
+
+msgid "Gulf"
+msgstr "Gulf"
+
+msgid "Mobil"
+msgstr "Mobil"
+
+msgid "OMV"
+msgstr "OMV"
+
+msgid "Petro-Canada"
+msgstr "Petro-Canada"
+
+msgid "Pioneer"
+msgstr "Pioneer"
+
+msgid "Q8"
+msgstr "Q8"
+
+msgid "Repsol"
+msgstr "Repsol"
+
+msgid "Shell"
+msgstr "Shell"
+
+msgid "Socar"
+msgstr "Socar"
+
+msgid "Statoil"
+msgstr "Statoil"
+
+msgid "Sunoco"
+msgstr "Sunoco"
+
+msgid "Tamoil"
+msgstr "Tamoil"
+
+msgid "Texaco"
+msgstr "Texaco"
+
+msgid "Total"
+msgstr "Total"
+
+msgid "Independent"
+msgstr "Unabhängig"
+
+msgid "Fuel types:"
+msgstr "Kraftstoffsorten:"
+
+msgid "Diesel"
+msgstr "Diesel"
+
+msgid "Bio Diesel"
+msgstr "Bio Diesel"
+
+msgid "Octane 80"
+msgstr "80 Oktan"
+
+msgid "Octane 91"
+msgstr "Normalbenzin (91)"
+
+msgid "Octane 92"
+msgstr "92 Oktan"
+
+msgid "Octane 95"
+msgstr "Super (95)"
+
+msgid "Octane 98"
+msgstr "Super plus (98)"
+
+msgid "Octane 100"
+msgstr "100 Oktan"
+
+msgid "E10 (10% Ethanol mix)"
+msgstr "E10 (10% Ethanol Gemisch)"
+
+msgid "E85 (85% Ethanol mix)"
+msgstr "E85 (85% Ethanol Gemisch)"
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr "LPG (Flüssiggas)"
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr "CNG (komprimiertes Erdgas)"
+
 msgid "Pier"
 msgstr "Anlegestelle (Pier)"
 
@@ -19237,10 +19721,10 @@ msgid "Bus Guideway"
 msgstr "Spurbus"
 
 msgid "Disused Rail"
-msgstr "Stillgelegte Strecke"
+msgstr "Strecke eingestellt"
 
 msgid "Abandoned Rail"
-msgstr "Strecke abgebaut"
+msgstr "Strecke aufgelassen"
 
 msgid "Level Crossing"
 msgstr "Bahnübergang"
@@ -19286,6 +19770,9 @@ msgstr "Prellbock"
 msgid "Railway Switch"
 msgstr "Weiche"
 
+msgid "Railway milestone"
+msgstr "Eisenbahnkilometerstein"
+
 msgid "Aerialway"
 msgstr "Seilbahn"
 
@@ -19411,78 +19898,6 @@ msgstr "Parkplatz-Eingang"
 msgid "Fuel"
 msgstr "Tankstelle"
 
-msgid "Agip"
-msgstr "Agip"
-
-msgid "Aral"
-msgstr "Aral"
-
-msgid "Avia"
-msgstr "Avia"
-
-msgid "BP"
-msgstr "BP"
-
-msgid "Chevron"
-msgstr "Chevron"
-
-msgid "Citgo"
-msgstr "Citgo"
-
-msgid "Eni"
-msgstr "Eni"
-
-msgid "Esso"
-msgstr "Esso"
-
-msgid "Exxon"
-msgstr "Exxon"
-
-msgid "Gulf"
-msgstr "Gulf"
-
-msgid "Mobil"
-msgstr "Mobil"
-
-msgid "OMV"
-msgstr "OMV"
-
-msgid "Petro-Canada"
-msgstr "Petro-Canada"
-
-msgid "Pioneer"
-msgstr "Pioneer"
-
-msgid "Q8"
-msgstr "Q8"
-
-msgid "Repsol"
-msgstr "Repsol"
-
-msgid "Shell"
-msgstr "Shell"
-
-msgid "Socar"
-msgstr "Socar"
-
-msgid "Statoil"
-msgstr "Statoil"
-
-msgid "Sunoco"
-msgstr "Sunoco"
-
-msgid "Tamoil"
-msgstr "Tamoil"
-
-msgid "Texaco"
-msgstr "Texaco"
-
-msgid "Total"
-msgstr "Total"
-
-msgid "Independent"
-msgstr "Unabhängig"
-
 msgid "With shop"
 msgstr "Mit Geschäft"
 
@@ -19492,51 +19907,12 @@ msgstr "Waren des täglichen Bedarfs"
 msgid "kiosk"
 msgstr "Kiosk"
 
-msgid "Fuel types:"
-msgstr "Kraftstoffsorten:"
-
-msgid "Diesel"
-msgstr "Diesel"
-
-msgid "Bio Diesel"
-msgstr "Bio Diesel"
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr "Diesel (Verflüssigtes Gas, Ultimate Diesel)"
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr "Diesel für LKW"
 
-msgid "Octane 80"
-msgstr "80 Oktan"
-
-msgid "Octane 91"
-msgstr "Normalbenzin (91)"
-
-msgid "Octane 92"
-msgstr "92 Oktan"
-
-msgid "Octane 95"
-msgstr "Super (95)"
-
-msgid "Octane 98"
-msgstr "Super plus (98)"
-
-msgid "Octane 100"
-msgstr "100 Oktan"
-
-msgid "E10 (10% Ethanol mix)"
-msgstr "E10 (10% Ethanol Gemisch)"
-
-msgid "E85 (85% Ethanol mix)"
-msgstr "E85 (85% Ethanol Gemisch)"
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr "LPG (Flüssiggas)"
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr "CNG (komprimiertes Erdgas)"
-
 msgid "1/25 mix (mofa/moped)"
 msgstr "1:25 Gemisch (Mofa/Moped)"
 
@@ -19680,7 +20056,7 @@ msgid "Bicycles are washed (for a fee)"
 msgstr "Fahrräder werden gewaschen (gegen eine Gebühr)"
 
 msgid "Public Bicycle Repair Station"
-msgstr "Öffentliche Fahrradservicestation"
+msgstr "Öffentliche Fahrraddienststation"
 
 msgid "Chain tool"
 msgstr "Kettennieter"
@@ -19756,9 +20132,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr "#CD853F"
 
-msgid "route segment"
-msgstr "Routenabschnitt"
-
 msgid "stop position"
 msgstr "Halteposition"
 
@@ -19777,6 +20150,9 @@ msgstr "Plattform (nur Ausstieg)"
 msgid "platform (entry only)"
 msgstr "Plattform (nur Einstieg)"
 
+msgid "route segment"
+msgstr "Routenabschnitt"
+
 msgid "Route Master"
 msgstr "Master-Route"
 
@@ -19979,6 +20355,12 @@ msgstr "Hotel"
 msgid "Stars"
 msgstr "Sterne"
 
+msgid "Rooms"
+msgstr "Zimmer"
+
+msgid "Beds"
+msgstr "Betten"
+
 msgid "Motel"
 msgstr "Motel"
 
@@ -20069,6 +20451,9 @@ msgstr "Sandwich"
 msgid "sushi"
 msgstr "Sushi"
 
+msgid "steak_house"
+msgstr "Steakhaus"
+
 msgid "Microbrewery"
 msgstr "Hausbrauerei"
 
@@ -20197,7 +20582,7 @@ msgid "notice"
 msgstr "Notiz"
 
 msgid "history"
-msgstr "Geschichte"
+msgstr "Chronik"
 
 msgid "nature"
 msgstr "Natur"
@@ -20284,6 +20669,9 @@ msgstr "Sauna"
 msgid "Horse Riding"
 msgstr "Pferdereiten"
 
+msgid "Casino"
+msgstr "Spielbank"
+
 msgid "Brothel"
 msgstr "Bordell"
 
@@ -20771,8 +21159,8 @@ msgstr "Luftdruckanzeige"
 msgid "Shows humidity"
 msgstr "Feuchtigkeitsanzeige"
 
-msgid "Recycling"
-msgstr "Recyclingstelle & -container"
+msgid "Recycling Container"
+msgstr "Recycling-Container"
 
 msgid "Batteries"
 msgstr "Batterien"
@@ -20780,20 +21168,47 @@ msgstr "Batterien"
 msgid "Cans"
 msgstr "Dosen"
 
+msgid "Cardboard"
+msgstr "Karton"
+
+msgid "Electrical Appliances"
+msgstr "Elektrogeräte"
+
 msgid "Glass"
 msgstr "Glas"
 
+msgid "Glass Bottles"
+msgstr "Glasflaschen"
+
+msgid "Green Waste"
+msgstr "Grüngut"
+
 msgid "Paper"
 msgstr "Papier"
 
+msgid "Plastic"
+msgstr "Plaste"
+
+msgid "Plastic Bottles"
+msgstr "Plasteflaschen"
+
+msgid "Plastic Packaging"
+msgstr "Plasteverpackungen"
+
 msgid "Scrap Metal"
 msgstr "Altmetall"
 
-msgid "container"
-msgstr "Container"
+msgid "Shoes"
+msgstr "Schuhe"
+
+msgid "Small Appliances"
+msgstr "Kleingeräte"
 
-msgid "centre"
-msgstr "Zentrum"
+msgid "Waste"
+msgstr "Abfall"
+
+msgid "Recycling Centre"
+msgstr "Recyclingzentrum"
 
 msgid "Waste Basket/Trash Can"
 msgstr "Papierkorb/Abfalleimer"
@@ -20996,6 +21411,9 @@ msgstr "Bogenschießen"
 msgid "Track and Field Athletics"
 msgstr "Leichtathletik"
 
+msgid "Running"
+msgstr "Laufen"
+
 msgid "Climbing"
 msgstr "Klettern"
 
@@ -21116,7 +21534,7 @@ msgstr "Eislaufen"
 
 msgctxt "piste:grooming"
 msgid "classic;skating"
-msgstr "Klassisch;Eislauf"
+msgstr "Klassisch;Skating"
 
 msgctxt "piste:grooming"
 msgid "scooter"
@@ -21171,12 +21589,18 @@ msgstr "Baseball"
 msgid "Basketball"
 msgstr "Basketball"
 
+msgid "Handball"
+msgstr "Handball"
+
 msgid "Volleyball"
 msgstr "Volleyball"
 
 msgid "Beach Volleyball"
 msgstr "Beachvolleyball"
 
+msgid "Billiards"
+msgstr "Billard"
+
 msgid "Golf"
 msgstr "Golfplatz"
 
@@ -21192,15 +21616,15 @@ msgstr "Rasenbowling"
 msgid "Cricket"
 msgstr "Kricket"
 
-msgid "Cricket Nets"
-msgstr "Kricketnetze"
-
 msgid "Croquet"
 msgstr "Krocket"
 
-msgid "Hockey"
+msgid "Field Hockey"
 msgstr "Hockey"
 
+msgid "Ice Hockey"
+msgstr "Eishockey"
+
 msgid "Pelota"
 msgstr "Pelota"
 
@@ -21222,9 +21646,6 @@ msgstr "Kartrennen"
 msgid "Motocross"
 msgstr "Motocross"
 
-msgid "Safety Training"
-msgstr "Sicherheitstraining"
-
 msgid "Model Aerodrome"
 msgstr "Modellflugplatz"
 
@@ -21243,9 +21664,6 @@ msgstr "Bahn"
 msgid "RC Car"
 msgstr "RC-Modellauto"
 
-msgid "Raceway"
-msgstr "Rennstecke"
-
 msgid "Man Made"
 msgstr "Zivilisationsbauten"
 
@@ -21318,6 +21736,14 @@ msgid "storage_tank"
 msgstr "Speichertank"
 
 msgctxt "building"
+msgid "supermarket"
+msgstr "Supermarkt"
+
+msgctxt "building"
+msgid "gasometer"
+msgstr "Gasometer"
+
+msgctxt "building"
 msgid "cowshed"
 msgstr "Kuhstall"
 
@@ -22640,9 +23066,6 @@ msgstr "Wein"
 msgid "Boutique"
 msgstr "Boutique"
 
-msgid "Shoes"
-msgstr "Schuhe"
-
 msgid "Outdoor"
 msgstr "Camping (Outdoor)"
 
@@ -23192,7 +23615,7 @@ msgid "Woodland where timber production does not dominate use."
 msgstr "Waldgebiet, bei dem die Holzproduktion nicht im Vordergrund steht."
 
 msgid "Forest"
-msgstr "Forst"
+msgstr "Wald"
 
 msgid "Cutline"
 msgstr "Schneise"
@@ -23674,12 +24097,12 @@ msgstr "potentiell"
 msgid "Contact (Common Schema)"
 msgstr "Kontakt (verbreitetes Schema)"
 
-msgid "Fax Number"
-msgstr "Faxnummer"
-
 msgid "Email Address"
 msgstr "E-Mail-Adresse"
 
+msgid "Fax Number"
+msgstr "Faxnummer"
+
 msgid "Image"
 msgstr "Bild"
 
@@ -24109,6 +24532,9 @@ msgstr "unvollständiges Objekt: nur {0} und {1}"
 msgid "{0} together with addr:*"
 msgstr "{0} zusammen mit addr:*"
 
+msgid "{0} together with {1} and conflicting values"
+msgstr "{0} zusammen mit {1} und widersprüchlichen Werten"
+
 msgid "{0} on suspicious object"
 msgstr "{0} auf einem verdächtigen Objekt"
 
@@ -24133,6 +24559,18 @@ msgstr "alternativer Name ohne {0}"
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr "unvollständige Nutzung von {0} auf einer Linie ohne {1}"
 
+msgid "Same value of {0} and {1}"
+msgstr "Gleicher Wert von {0} und {1}"
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr "Gleicher Wert von {0}, {1} und {2}"
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr "{0} und {1} zusammen mit {2} und widersprüchlichen Werten"
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr "Verdächtige Merkmalskombination: {0} und {1}"
+
 msgid "{0}={1} is deprecated"
 msgstr "{0}={1} ist veraltet"
 
@@ -24180,7 +24618,7 @@ msgid "{0} should be replaced with {1}"
 msgstr "{0} sollte mit {1} ersetzt werden"
 
 msgid "{0} = {1}; remove {0}"
-msgstr "{0} = {1}; entferne {0}"
+msgstr "{0} = {1}; entfernen {0}"
 
 msgid ""
 "{0}={1} is unspecific. Please replace ''{1}'' by ''left'', ''right'' or "
@@ -24207,6 +24645,9 @@ msgstr "Schlüssel mit ungewöhnlichem Zeichen"
 msgid "uncommon short key"
 msgstr "ungewöhnlich kurzer Schlüssel"
 
+msgid "{0} is inaccurate"
+msgstr "{0} ist ungenau"
+
 msgid "{0} on a node. Should be used on a way."
 msgstr "{0} auf einem Punkt. Sollte auf einer Linie verwendet werden."
 
@@ -24298,12 +24739,25 @@ msgstr "Stockwerk sollte numerisch sein (ggf. mit .5 Zwischenschritten)"
 msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
-"{0}: Meter ist Standardeinheit; Punkt als Dezimaltrennzeichen; Leerzeichen "
+"{0}: Standard ist Meter; Trennzeichen ist Punkt; wenn Einheiten, Leerzeichen "
+"vor Einheit"
+
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+"{0}: Standard ist Tonne; Trennzeichen ist Punkt; wenn Einheiten, Leerzeichen "
 "vor Einheit"
 
 msgid "unusual {0} format"
 msgstr "ungewöhnliches Format von {0}"
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+"{0}: Standard ist Kilometer; Trennzeichen ist Punkt; wenn Einheiten, "
+"Leerzeichen vor Einheit"
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 "Spannung sollte in Volt ohne Einheitensymbol oder Leerzeichen angegeben "
@@ -24352,7 +24806,7 @@ msgid "{0}={1} makes no sense"
 msgstr "{0}={1} ergibt keinen Sinn"
 
 msgid "Nodes duplicating parent way tags"
-msgstr "Punkte duplizieren Merkmale der Eltern-Linie"
+msgstr "Punkte verdoppeln Merkmale der Elternlinie"
 
 msgid ""
 "no wikipedia-language given, use ''wikipedia''=''language:page title''"
@@ -24449,7 +24903,7 @@ msgid "Command line"
 msgstr "Befehlszeile"
 
 msgid "Set input focus to the command line."
-msgstr "Eingabefokus auf Commandzeile setzen"
+msgstr "Eingabefokus auf Befehlszeile festlegen"
 
 msgid "Point on the start"
 msgstr "Auf Anfang zeigen"
@@ -24516,13 +24970,13 @@ msgstr ""
 "teilweise verwendet."
 
 msgid "Invalid URL {0}"
-msgstr "Ungültige URL {0}"
+msgstr "Ungültige Adresse {0}"
 
 msgid "Error fetching URL {0}"
-msgstr "Fehler beim Empfangen der URL {0}"
+msgstr "Fehler beim Empfangen der Adresse {0}"
 
 msgid "Error parsing data from URL {0}"
-msgstr "Fehler beim Auswerten der Daten der URL {0}"
+msgstr "Fehler beim Auswerten der Daten der Adresse {0}"
 
 msgid "Download Track"
 msgstr "Spur herunterladen"
@@ -24578,7 +25032,7 @@ msgid "No GPX layer selected. Cannot upload a trace."
 msgstr "Keine GPX-Ebene gewählt. Kann GPS-Spur nicht hochladen."
 
 msgid "Uploading trace ..."
-msgstr "Sende Spur …"
+msgstr "Spur wird hochgeladen …"
 
 msgid "Connecting..."
 msgstr "Verbinden …"
@@ -24692,6 +25146,9 @@ msgstr "Gesetzte Punkte mittels Klick hinzufügen"
 msgid "Add fixed points on spacebar"
 msgstr "Gesetzte Punkte mittels Leertaste hinzufügen"
 
+msgid "Allow edit existing ways"
+msgstr "Erlaube existierende Linien zu bearbeiten"
+
 msgid "Draw closed polygons only"
 msgstr "Nur geschlossene Polygone zeichnen"
 
@@ -24756,9 +25213,6 @@ msgstr "Linie mit Maus zeichnen"
 msgid "min distance={0} px ({1} m)"
 msgstr "min. Abstand={0} px ({1} m)"
 
-msgid "Convert way to FastDraw line"
-msgstr "Linie in Schnellzeichenlinie umwandeln"
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr "Eps={0}, {1} Punkte, {2} Pkt./km"
 
@@ -24869,7 +25323,7 @@ msgid "Assign the selected address(es) to the selected street."
 msgstr "Ausgewählte Adressen der gewählten Straße zuweisen."
 
 msgid "Set street name"
-msgstr "Straßenname setzen"
+msgstr "Straßenname festlegen"
 
 msgid "Convert ALL streets."
 msgstr "ALLE Straßen konvertieren."
@@ -25625,52 +26079,68 @@ msgstr ""
 "den folgenden Text dem Fehlerbericht hinzu sodass wir die Quelle des Fehlers "
 "finden können."
 
-msgid "Area detection algorithm settings."
-msgstr "Gebietserkennungsalgorithmus-Einstellungen."
+msgid "Area Selector - Preferences"
+msgstr "Flächenauswahl - Einstellungen"
+
+msgid "Settings for the area detection algorithm."
+msgstr "Einstellungen für den Gebietserkennungsalgorithmus"
 
-msgid "Algorithm Settings"
-msgstr "Algorithmus-Einstellungen"
+msgid "Boofcv - high resolution images"
+msgstr "Boofcv - Hochaufgelöste Bilder"
+
+msgid "Custom - low resolution images"
+msgstr "Regel - Niedrigaufgelöste Bilder"
 
 msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
-"Die Farbschwelle definiert wie weit die Farbe von der Originalfarbe "
-"abweichen darf, um ausgewählt zu werden (Standard: {0})."
+"Den zu nutzenden Algorithmus wählen. \"Auto\" versucht mit Boofcv ein Gebiet "
+"zu finden und fällt ansonsten auf den Regelalgorithmus zurück."
 
-msgid "Color Threshold"
-msgstr "Farbschwelle"
+msgid "Algorithm"
+msgstr "Algorithmus"
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
-"Die Toleranzentfernung definiert, wie weit ein Punkt von der Linie abgelegen "
-"sein darf (Standard: {0})."
-
-msgid "Tolerance Distance"
-msgstr "Toleranzentfernung"
+"Maximalanzahl von Pixeln, die ein Punkt von einer Linie entfernt sein darf, "
+"um noch als Teil der Linie angesehen zu werden (Standard: {0})."
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
-msgstr "Toleranz für Anbauwinkel in Radianten (Standard: {0})."
+msgid "Distance Tolerance"
+msgstr "Entfernungstoleranz"
 
-msgid "Tolerance Angle"
-msgstr "Toleranzwinkel"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
+msgstr ""
+"Linien mit einem kleineren Winkel (Grad) als dieser, werden zu einer Linie "
+"kombiniert (Standard {0})."
 
-msgid "Plugin Settings"
-msgstr "Plugin-Einstellungen"
+msgid "Angle Tolerance"
+msgstr "Winkeltoleranz"
 
-msgid "Show Address Dialog after mapping an area"
-msgstr "Adressdialog nach der Kartierung eines Gebiets anzeigen"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
+msgstr ""
+"Der Farbschwellwert definiert, wie stark eine Farbe von der gewählten Farbe "
+"abweichen darf. Die Rot-, Grün- and Blau-Werte müssen im Bereich (Wert - "
+"Schwellwert) bis (Wert + Schwellwert) liegen. (Standard: {0})."
 
-msgid "show address dialog"
-msgstr "Adressdialog anzeigen"
+msgid "Color Threshold"
+msgstr "Farbschwelle"
 
-msgid "Merge nodes with neighbors"
-msgstr "Punkte mit Nachbarn zusammenführen"
+msgid "Use HSV based algorithm"
+msgstr "HSV-basierten Algorithmus verwenden"
 
-msgid "merge nodes"
-msgstr "Punkte zusammenführen"
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
+msgstr ""
+"Farbton und Sättigung anstatt der RGB-Unterschiede zur Auswahl "
+"zusammenpassender Farben nutzen."
 
 msgid "How often thinning operation should be applied (Default {0})."
 msgstr ""
@@ -25679,11 +26149,25 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr "Ausdünnungs-Iterationen"
 
-msgid "Use hue and saturation instead of RGB distinction"
-msgstr "Farbton und Sättingung anstatt RGB-Unterscheidung nutzen"
+msgid "show address dialog"
+msgstr "Adressdialog anzeigen"
+
+msgid "Show Address Dialog after mapping an area"
+msgstr "Adressdialog nach der Kartierung eines Gebiets anzeigen"
+
+msgid "merge nodes"
+msgstr "Punkte zusammenführen"
 
-msgid "use HSV based algorithm"
-msgstr "HSV-basierten Algorithmus verwenden"
+msgid "Merge nodes with existing nodes"
+msgstr "Knotenpunkte mit vorhandenen Knotenpunkten zusammenführen"
+
+msgid "Debug"
+msgstr "Fehlerdiagnose"
+
+msgid "Debugging mode will write images for each processing step."
+msgstr ""
+"Im Fehleranalysemodus wird ein Bild für jeden Bearbeitungsschritt "
+"geschrieben."
 
 msgid "Street Name:"
 msgstr "Straße:"
@@ -25738,7 +26222,7 @@ msgid "Point on opposite end of the building"
 msgstr "Auf gegenüberliegende Gebäudeecke zeigen"
 
 msgid "Set width of the building"
-msgstr "Gebäudebreite setzen"
+msgstr "Gebäudebreite festlegen"
 
 msgid "Merge address points"
 msgstr "Adresspunkte vereinen"
@@ -25792,7 +26276,7 @@ msgid ""
 "Load cache first ?\n"
 "(No = new cache)"
 msgstr ""
-"Bereich \"{0}\" wurde im Zwischenspeicher gefunden.\n"
+"Bereich »{0}« wurde im Zwischenspeicher gefunden.\n"
 "Soll dieser zuerst benutzt werden?\n"
 "(Nein = Zwischenspeicher wird geleert)"
 
@@ -25890,13 +26374,13 @@ msgid "Change the current projection"
 msgstr "Die aktuelle Projektion ändern"
 
 msgid "Replace original background by JOSM background color."
-msgstr "Originale Hintergrundfarbe durch JOSM-Farbe ersetzen."
+msgstr "Ursprüngliche Hintergrundfarbe durch JOSM-Hintergrundfarbe ersetzen."
 
 msgid "Reverse grey colors (for black backgrounds)."
 msgstr "Graue Farben invertieren (für schwarze Hintergründe)"
 
 msgid "Set background transparent."
-msgstr "Transparenten Hintergrund aktivieren"
+msgstr "Transparenten Hintergrund festlegen"
 
 msgid "Draw boundaries of downloaded data."
 msgstr "Begrenzung der heruntergeladenen Daten zeichnen."
@@ -25954,7 +26438,7 @@ msgid "Enable automatic caching."
 msgstr "Automatischen Zwischenspeicher aktivieren."
 
 msgid "Max. cache size (in MB)"
-msgstr "Max. Speichergröße (in MB)"
+msgstr "Max. Zwischenspeichergröße (in MB)"
 
 msgid "French cadastre WMS"
 msgstr "Französisches Kataster-WMS"
@@ -25984,8 +26468,8 @@ msgid ""
 "Replace the original white background by the background color defined in "
 "JOSM preferences."
 msgstr ""
-"Original weißen Hintergrund durch die in den JOSM Einstellungen definierte "
-"Hintergrundfarbe ersetzen."
+"Ursprünglichen weißen Hintergrund durch die in den JOSM-Einstellungen "
+"definierte Hintergrundfarbe ersetzen."
 
 msgid ""
 "Invert the original black and white colors (and all intermediate greys). "
@@ -25999,7 +26483,7 @@ msgstr "Stapeln mehrerer Schichten erlauben"
 
 msgid "Set WMS layers transparency. Right is opaque, left is transparent."
 msgstr ""
-"Tranzparenz der WMS-Schicht setzen. Rechts ist undurchsichtig, links ist "
+"Tranzparenz der WMS-Ebene festlegen. Rechts ist undurchsichtig, links ist "
 "durchsichtig."
 
 msgid "Draw a rectangle around downloaded data from WMS server."
@@ -26115,7 +26599,7 @@ msgid "Add \"source=...\" to elements?"
 msgstr "Merkmal \"source= …\" zu Elementen hinzufügen?"
 
 msgid "Downloading {0}"
-msgstr "{0} herunterladen"
+msgstr "{0} wird heruntergeladen"
 
 msgid "Contacting WMS Server..."
 msgstr "Verbinde zu WMS-Server …"
@@ -26132,8 +26616,8 @@ msgstr ""
 
 msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
-"Bitte aktivieren Sie automatische \"source\"-Texte und prüfen das Kataster-"
-"Millisime (Jahr)."
+"Bitte aktivieren Sie automatische Quelltexte und überprüfen Sie den Jahrgang "
+"des Katasters."
 
 msgid "Extract SVG ViewBox..."
 msgstr "SVG-Dimensionen extrahieren …"
@@ -26206,7 +26690,9 @@ msgid "Load layer from cache"
 msgstr "Ebene aus Zwischenspeicher laden"
 
 msgid "Load location from cache (only if cache is enabled)"
-msgstr "Position aus dem Zwischenspeicher laden (nur wenn er aktiviert ist)"
+msgstr ""
+"Position aus dem Zwischenspeicher laden (nur wenn der Zwischenspeicher "
+"aktiviert ist)"
 
 msgid "{0} not allowed with the current projection"
 msgstr "{0} ist in der aktuellen Projektion nicht erlaubt"
@@ -26220,7 +26706,7 @@ msgstr ""
 msgid ""
 "Selected file {0} is not a cache file from this plugin (invalid extension)"
 msgstr ""
-"Die gewählte Datei {0} ist keine Zwischenspeicherdatei dieses Plugins "
+"Die ausgewählte Datei {0} ist keine Zwischenspeicherdatei dieses Plugins "
 "(ungültige Dateiendung)"
 
 msgid "The location {0} is already on screen. Cache not loaded."
@@ -26233,7 +26719,7 @@ msgid "Change location"
 msgstr "Ort ändern"
 
 msgid "Set a new location for the next request"
-msgstr "Für die nächste Anfrage eine neue Position setzen"
+msgstr "Für die nächste Anfrage eine neue Position festlegen"
 
 msgid "Add a new municipality layer"
 msgstr "Erzeuge neue Ebene \"Municipality\""
@@ -26357,6 +26843,9 @@ msgstr "Offset zurücksetzen"
 msgid "Reset offset (only vector images)"
 msgstr "Offset zurücksetzen (Nur Vektorbilder)"
 
+msgid "Blank Layer"
+msgstr "Leere Ebene"
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr "WMS-Ebene ({0}), {1} Kachel(n) geladen"
 
@@ -26379,17 +26868,16 @@ msgid ""
 "Unsupported cache file version; found {0}, expected {1}\n"
 "Create a new one."
 msgstr ""
-"Zwischenspeicher-Datei-Version nicht unterstützt; gefunden {0}, erwartet "
-"{1}\n"
-"Erzeuge eine neue Datei."
+"Zwischenspeicherdatei-Version nicht unterstützt; gefunden {0}, erwartet {1}\n"
+"Erstellen Sie eine Neue."
 
 msgid "Cache Format Error"
 msgstr "Zwischenspeicher-Formatfehler"
 
 msgid "Lambert zone {0} in cache incompatible with current Lambert zone {1}"
 msgstr ""
-"Lambert-Zone {0} im Cache ist mit der gegenwärtigen Lambert-Zone {1} "
-"inkompatibel"
+"Lambert-Zone {0} im Zwischenspeicher ist mit der gegenwärtigen Lambert-Zone "
+"{1} inkompatibel"
 
 msgid "Cache Lambert Zone Error"
 msgstr "Lambert-Zonenfehler zwischenspeichern"
@@ -26675,7 +27163,7 @@ msgid "Public"
 msgstr "Öffentlich"
 
 msgid "Could not get server response, check logs"
-msgstr "Keine Serverantwort erhalten, Bitte Loginformationen prüfen"
+msgstr "Keine Serverantwort erhalten, Protokolle prüfen"
 
 msgid "Failed to login as {0}:"
 msgstr "Fehler beim Anmelden als {0}:"
@@ -27290,7 +27778,7 @@ msgstr ""
 "hochladen."
 
 msgid "Loading imagery offsets..."
-msgstr "Bildverschiebungen laden …"
+msgstr "Bildversätze werden geladen…"
 
 msgid "Error processing XML response: {0}"
 msgstr "Fehler beim Bearbeiten der XML-Antwort: {0}"
@@ -27344,7 +27832,7 @@ msgid "Created by {0} on {1}"
 msgstr "Erstellt von {0} zur Zeit {1}"
 
 msgid "Offset Information"
-msgstr "Versatz-Information"
+msgstr "Versatzinformation"
 
 msgid "Report this offset"
 msgstr "Diesen Versatz melden"
@@ -27434,7 +27922,7 @@ msgstr ""
 "beschreiben Sie das Objekt und seine Lage."
 
 msgid "Uploading a new offset..."
-msgstr "Neuen Versatz hochladen …"
+msgstr "Neuer Versatz wird hochgeladen…"
 
 msgid "This string should be 3 to 200 letters long."
 msgstr "Der Text sollte 3 bis 200 Zeichen lang sein."
@@ -27674,13 +28162,13 @@ msgid "Lake Walker"
 msgstr "Lake Walker"
 
 msgid "Error creating cache directory: {0}"
-msgstr "Fehler beim Erstellen des Speichers: {0}"
+msgstr "Fehler beim Erstellen des Zwischenspeicherverzeichnisses: {0}"
 
 msgid "Tracing"
 msgstr "Abzeichnen"
 
 msgid "checking cache..."
-msgstr "Speicher prüfen …"
+msgstr "Zwischenspeicher wird überprüft…"
 
 msgid "Running vertex reduction..."
 msgstr "Stützpunktreduktion durchführen …"
@@ -27689,10 +28177,10 @@ msgid "Running Douglas-Peucker approximation..."
 msgstr "Douglas-Peucker-Näherung durchführen …"
 
 msgid "Removing duplicate nodes..."
-msgstr "Doppelte Punkte entfernen …"
+msgstr "Doppelte Punkte werden entfernt …"
 
 msgid "Lakewalker trace"
-msgstr "Lake Walker Spur"
+msgstr "Lake Walker-Spur"
 
 msgid "An unknown error has occurred"
 msgstr "Ein unbekannter Fehler ist aufgetreten"
@@ -27761,10 +28249,10 @@ msgid "WMS Layer"
 msgstr "WMS-Ebene"
 
 msgid "Maximum cache size (MB)"
-msgstr "Maximale Speichergröße (MB)"
+msgstr "Maximale Zwischenspeichergröße (MB)"
 
 msgid "Maximum cache age (days)"
-msgstr "Maximales Speicheralter (Tage)"
+msgstr "Maximales Zwischenspeicheralter (Tage)"
 
 msgid "Source text"
 msgstr "Datenquelle"
@@ -27831,17 +28319,19 @@ msgstr "Zum Abzeichnen genutzte WMS-Ebene. Standard ist IR1."
 
 msgid "Maximum size of each cache directory in bytes. Default is 300MB"
 msgstr ""
-"Maximale Größe des Speicherverzeichnisses in Bytes. Standard ist 300MB"
+"Maximale Größe des Zwischenspeicherverzeichnisses in Bytes. Standard ist "
+"300MB"
 
 msgid "Maximum age of each cached file in days. Default is 100"
 msgstr ""
-"Maximales Dateialter von gespeicherten Dateien in Tagen. Standard ist 100"
+"Maximales Dateialter von zwischengespeicherten Dateien in Tagen. Standard "
+"ist 100"
 
 msgid "Data source text. Default is Landsat."
 msgstr "Name der Datenquelle. Standardeinstellung ist Landsat."
 
 msgid "Downloading image tile..."
-msgstr "Bildkachel herunterladen …"
+msgstr "Bildkachel wird heruntergeladen…"
 
 msgid "Could not acquire image"
 msgstr "Bild kann nicht geladen werden"
@@ -27915,14 +28405,325 @@ msgstr "Aktiviert die MapDust-Fehlerreporter-Erweiterung"
 msgid "Missing input data"
 msgstr "Fehlende Eingabedaten"
 
+msgid "Mapillary Images"
+msgstr "Mapillary Bilder"
+
+msgid "Mapillary layer"
+msgstr "Mapillary Ebene"
+
+msgid "Total images:"
+msgstr "Bilder insgesamt:"
+
+msgid "images"
+msgstr "Bilder"
+
 msgid "Mapillary"
 msgstr "Mapillary"
 
-msgid "Create Mapillary layer."
-msgstr "Mapillary-Ebene erstellen."
+msgid "Create Mapillary layer"
+msgstr "Mapillary-Ebene erstellen"
 
-msgid "Export"
-msgstr "Exportieren"
+msgid "Start Mapillary layer"
+msgstr "Mapillary-Ebene starten"
+
+msgid "Download Mapillary images in current view"
+msgstr "Mapillary-Bilder in aktueller Ansicht herunterladen"
+
+msgid "Export pictures"
+msgstr "Bilder exportieren"
+
+msgid "Export Mapillary pictures"
+msgstr "Mapillary-Bilder exportieren"
+
+msgid "Export images"
+msgstr "Bilder exportieren"
+
+msgid "Import pictures"
+msgstr "Bilder importieren"
+
+msgid "Import local pictures"
+msgstr "Lokale Bilder importieren"
+
+msgid "Import pictures into Mapillary layer"
+msgstr "Bilder in Mapillary-Ebene importieren"
+
+msgid "Select pictures"
+msgstr "Bilder auswählen"
+
+msgid "Import pictures into sequence"
+msgstr "Bilder in die Sequenz importieren"
+
+msgid "Import pictures into Mapillary layer in a sequence"
+msgstr "Bilder in die Mapillary-Ebene einer Sequenz importieren"
+
+msgid "Join mode"
+msgstr "Verbindungsmodus"
+
+msgid "Join/unjoin pictures"
+msgstr "Bilder verbinden/trennen"
+
+msgid "Join Mapillary pictures"
+msgstr "Mapillary-Bilder verbinden"
+
+msgid "Upload pictures"
+msgstr "Bilder hochladen"
+
+msgid "Upload Mapillary pictures"
+msgstr "Mapillary-Bilder hochladen"
+
+msgid "Upload pictures."
+msgstr "Bilder hochladen."
+
+msgid "Walk mode"
+msgstr "Spaziergangmodus"
+
+msgid "Start walk mode"
+msgstr "Spaziergangmodus starten"
+
+msgid "Zoom to selected image"
+msgstr "Auf ausgewähltes Bild zoomen"
+
+msgid "Zoom to the currently selected Mapillary image"
+msgstr "Auf das aktuell ausgewählte Mapillary-Bild zoomen"
+
+msgid "Uploaded {0} images"
+msgstr "{0} Bilder hochgeladen"
+
+msgid "Approve upload on the website"
+msgstr "Hochladen auf Webseite bestätigen"
+
+msgid "View in website"
+msgstr "In Internetseite ansehen"
+
+msgid "Copy key"
+msgstr "Schlüssel kopieren"
+
+msgid "Copy key tag"
+msgstr "Schlüsselanhänger kopieren"
+
+msgid "Edit on website"
+msgstr "Auf Webseite bearbeiten"
+
+msgid "Export all images"
+msgstr "Alle Bilder exportieren"
+
+msgid "Export selected sequence"
+msgstr "Ausgewählte Sequenz exportieren"
+
+msgid "Export selected images"
+msgstr "Ausgewählte Bilder exportieren"
+
+msgid "Rewrite imported images"
+msgstr "Importierte Bilder neu schreiben"
+
+msgid "Select a folder"
+msgstr "Wählen Sie einen Ordner aus"
+
+msgid "Explore"
+msgstr "Erkunden"
+
+msgid "Select a directory"
+msgstr "Wählen Sie ein Verzeichnis aus"
+
+msgid "Speed limit"
+msgstr "Geschwindigkeitsbegrenzung"
+
+msgid "Give way"
+msgstr "Vorfahrt gewähren"
+
+msgid "No entry"
+msgstr "Einfahrt verboten"
+
+msgid "Intersection danger"
+msgstr "Gefährliche Kreuzung"
+
+msgid "Mandatory direction (any)"
+msgstr "Vorgeschriebene Richtung (beliebig)"
+
+msgid "No turn"
+msgstr "Abbiegen verboten"
+
+msgid "Uneven road"
+msgstr "Unebene Fahrbahn"
+
+msgid "No parking"
+msgstr "Parkverbot"
+
+msgid "No overtaking"
+msgstr "Überholverbot"
+
+msgid "Pedestrian crossing"
+msgstr "Fußgängerübergang"
+
+msgid "Years"
+msgstr "Jahre"
+
+msgid "Months"
+msgstr "Monate"
+
+msgid "Days"
+msgstr "Tage"
+
+msgid "Mapillary filter"
+msgstr "Mapillary-Filter"
+
+msgid "Open Mapillary filter dialog"
+msgstr "Mapillary-Filterdialog öffnen"
+
+msgid "Downloaded images"
+msgstr "Heruntergeladene Bilder"
+
+msgid "Only images with signs"
+msgstr "Nur Bilder mit Zeichen"
+
+msgid "Choose signs"
+msgstr "Zeichen auswählen"
+
+msgid "Mapillary history"
+msgstr "Mapillary-Chronik"
+
+msgid "Open Mapillary history dialog"
+msgstr "Mapillary-Chronikdialog öffnen"
+
+msgid "Open Mapillary window"
+msgstr "Mapillary Fenster öffnen"
+
+msgid "Mapillary dialog"
+msgstr "Mapillary-Dialog"
+
+msgid "Open Mapillary main dialog"
+msgstr "Mapillary-Hauptdialog öffnen"
+
+msgid "Next picture"
+msgstr "Nächstes Bild"
+
+msgid "Shows the next picture in the sequence"
+msgstr "Zeigt das nächste Bild in der Sequenz an"
+
+msgid "Previous picture"
+msgstr "Vorheriges Bild"
+
+msgid "Shows the previous picture in the sequence"
+msgstr "Zeigt das vorherige Bild in der Sequenz an"
+
+msgid "Jump to red"
+msgstr "Zu Rot wechseln"
+
+msgid "Jumps to the picture at the other side of the red line"
+msgstr "Wechselt zu dem Bild auf der anderen Seite der roten Linie"
+
+msgid "Jump to blue"
+msgstr "Zu Blau wechseln"
+
+msgid "Jumps to the picture at the other side of the blue line"
+msgstr "Wechselt zu dem Bild auf der anderen Seite der blauen Linie"
+
+msgid "Stops the walk."
+msgstr "Stoppt den Spaziergang."
+
+msgid "Play"
+msgstr "Wiedergabe"
+
+msgid "Continues with the paused walk."
+msgstr "Setzt den pausierten Spaziergang fort."
+
+msgid "Pause"
+msgstr "Pause"
+
+msgid "Pauses the walk."
+msgstr "Pausiert den Spaziergang."
+
+msgid "Reverse buttons position when displaying images."
+msgstr "Schaltflächenposition beim Anzeigen von Bildern umkehren."
+
+msgid "Display hour when the picture was taken"
+msgstr "Stunde, in der das Bild gemacht wurde, anzeigen"
+
+msgid "Use 24 hour format"
+msgstr "24-Stunden-Format verwenden"
+
+msgid "Move to picture''s location with next/previous buttons"
+msgstr ""
+"Wechseln Sie zur Bildadresse mit den nächstes/vorheriges Schaltflächen"
+
+msgid "Download mode: "
+msgstr "Herunterlademodus: "
+
+msgid "Upload selected sequence"
+msgstr "Ausgewählte Sequenz hochladen"
+
+msgid "Delete after upload"
+msgstr "Nach dem Hochladen löschen"
+
+msgid "Wait for full quality pictures"
+msgstr "Warten Sie für Bilder in voller Qualität"
+
+msgid "Follow selected image"
+msgstr "Ausgewähltem Bild folgen"
+
+msgid "Go forward"
+msgstr "Vorwärts gehen"
+
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] "{0} Bild gelöscht"
+msgstr[1] "{0} Bilder gelöscht"
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] "{0} Bild importiert"
+msgstr[1] "{0} Bilder importiert"
+
+msgid "2 images joined"
+msgstr "2 Bilder verbunden"
+
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] "{0} Bild verschoben"
+msgstr[1] "{0} Bilder verschoben"
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] "{0} Bild gedreht"
+msgstr[1] "{0} Bilder gedreht"
+
+msgid "2 images unjoined"
+msgstr "2 Bilder getrennt"
+
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
+msgstr ""
+"Der heruntergeladene OSM-Bereich ist zu groß. Herunterlademodus wurde auf "
+"halbautomatisch geändert, bis die Ebene neu gestartet wird."
+
+msgid "Downloading"
+msgstr "Wird heruntergeladen"
+
+msgid "Select mode"
+msgstr "Auswahlmodus"
+
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
+msgstr ""
+"<html><head><title>Mapillary-Anmeldung</title></head><body>Anmeldung "
+"erfolgreich, kehren Sie zu JOSM zurück.</body></html>"
+
+msgid "Downloading Mapillary images"
+msgstr "Mapillary-Bilder werden heruntergeladen"
+
+msgid "Total Mapillary images: {0}"
+msgstr "Mapillary-Bilder insgesamt: {0}"
+
+msgid "No images found"
+msgstr "Keine Bilder gefunden"
+
+msgid "Finished upload"
+msgstr "Hochladen abgeschlossen"
+
+msgid "Uploading: {0}"
+msgstr "Hachladevorgang: {0}"
 
 msgid "Measured values"
 msgstr "Gemessene Werte"
@@ -27942,6 +28743,9 @@ msgstr "Auswahllänge"
 msgid "Selection Area"
 msgstr "Auswahlfläche"
 
+msgid "Selection Radius"
+msgstr "Auswahlradius"
+
 msgid "Angle"
 msgstr "Winkel"
 
@@ -28008,52 +28812,9 @@ msgid "Create Michigan left turn restriction"
 msgstr "Erstelle Michigan Links-Abbiege-Beschränkungen"
 
 msgid "Unable to find via nodes. Please check your selection"
-msgstr "Kreuzungspunkt konnte nicht gefunden werden. Bitte Auswahl prüfen."
-
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-"XAPI-Abfrage, z.B. '''' (lädt alle Daten), ''[highway=*]'' oder "
-"''[[network=VRR][ref=603|613]''"
-
-msgid "Download from OSM mirror..."
-msgstr "Vom OSM-Spiegel herunterladen …"
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-"Diese XAPI-Abfrage scheint ungültig zu sein, bitte nochmals überprüfen"
-
-msgid "Object type: "
-msgstr "Objekttyp: "
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr "OSM-Objekttyp zum Herunterladen (''*'' steht für beliebig)"
-
-msgid "XAPI query: "
-msgstr "XAPI-Abfrage: "
-
-msgid "Download from Overpass API ..."
-msgstr "Mittels Overpass-API laden …"
-
-msgid "Download map data from Overpass API server."
-msgstr "Kartendaten mittels Overpass-API laden"
-
-msgid "Overpass query: "
-msgstr "Overpass-Abfrage: "
-
-msgid "Select OSM mirror URL"
-msgstr "OSM-Spiegel-URL wählen"
-
-msgid "Select OSM mirror URL to download from."
 msgstr ""
-"URL eines OSM-Spiegelservers, von dem heruntergeladen werden soll, auswählen."
-
-msgid "Base URL"
-msgstr "Basis-URL"
-
-msgid "Enforce meta data"
-msgstr "Metadaten erzwingen"
+"Kreuzungspunkt konnte nicht gefunden werden. Bitte überprüfen Sie Ihre "
+"Auswahl"
 
 msgid "About Plugin"
 msgstr "Über Plugin"
@@ -28308,6 +29069,9 @@ msgstr ""
 "diff für zwischen den aktuellen Datensatz und den existierenden OSM-Daten "
 "ausführen."
 
+msgid "Tools"
+msgstr "Werkzeuge"
+
 msgid "Open tools menu for this data."
 msgstr "Werkzeugmenü für diese Daten öffnen"
 
@@ -28371,7 +29135,7 @@ msgstr ""
 "''Lambert CC 9 Zonen''-Koordinaten mit verschiedenen Zonencodes für X und Y: "
 
 msgid "Downloading data..."
-msgstr "Daten werden heruntergeladen …"
+msgstr "Daten werden heruntergeladen…"
 
 msgid "OpenData XML files"
 msgstr "OpenData-XML-Dateien"
@@ -28437,7 +29201,7 @@ msgid "Unable to find a data store for file {0}"
 msgstr "Es konnte kein Datenspeicher für Datei {0} gefunden werden"
 
 msgid "Loading shapefile ({0} features)"
-msgstr "Lade Shape-Datei ({0} Elemente)"
+msgstr "Shape-Datei wird geladen ({0} Elemente)"
 
 msgid "CSV files"
 msgstr "CSV-Dateien"
@@ -28550,13 +29314,13 @@ msgstr ""
 "nicht gefunden wurde.<br>Aus den Einstellungen entfernen?</html>"
 
 msgid "Loading modules ..."
-msgstr "Lade Module …"
+msgstr "Module werden geladen …"
 
 msgid "Checking module preconditions..."
 msgstr "Modulvoraussetzungen werden geprüft …"
 
 msgid "Loading module ''{0}''..."
-msgstr "Lade Modul ''{0}'' …"
+msgstr "Modul ''{0}'' wird geladen…"
 
 msgid "JOSM could not find information about the following module:"
 msgid_plural "JOSM could not find information about the following modules:"
@@ -28637,7 +29401,7 @@ msgid "Reading local module information.."
 msgstr "Lokale Modulinformation wird gelesen …"
 
 msgid "Processing module site cache files..."
-msgstr "Modulseiten-Cache-Dateien werden verarbeitet …"
+msgstr "Modulseiten-Zwischenspeicherdateien werden verarbeitet…"
 
 msgid ""
 "Warning: Failed to scan file ''{0}'' for module information. Skipping."
@@ -28646,7 +29410,7 @@ msgstr ""
 "fehlgschlagen. Überspringe."
 
 msgid "Processing module site cache icon files..."
-msgstr "Modulseiten-Cache-Symboldateien werden verarbeitet …"
+msgstr "Modulseiten-Zwischenspeichersymboldateien werden verarbeitet…"
 
 msgid "Processing module files..."
 msgstr "Moduldateien werden verarbeitet …"
@@ -28661,11 +29425,11 @@ msgid ""
 "Warning: failed to create module directory ''{0}''. Cannot cache module list "
 "from module site ''{1}''."
 msgstr ""
-"Warnung: Das Modul-Verzeichnis ''{0}'' konnte nicht erstellt werden. Deshalb "
+"Warnung: Das Modulverzeichnis ''{0}'' konnte nicht erstellt werden. Deshalb "
 "kann die Modulliste von ''{1}'' nicht zwischengespeichert werden."
 
 msgid "Writing module list to local cache ''{0}''"
-msgstr "Modulliste wird zu lokalen Cache ''{0}'' geschrieben"
+msgstr "Modulliste wird in den lokalen Zwischenspeicher ''{0}'' geschrieben"
 
 msgid "Parsing module list from site ''{0}''"
 msgstr "Modulliste von Seite ''{0}'' wird geparst"
@@ -28766,16 +29530,16 @@ msgid "Merge close nodes"
 msgstr "Benachbarte Punkte vereinigen"
 
 msgid "Remove objects smaller than"
-msgstr "Entferne Objekte kleiner als"
+msgstr "Objekte entfernen, die kleiner sind als"
 
 msgid "Remove objects larger than"
-msgstr "Entferne Objekte größer als"
+msgstr "Objekte entfernen, die größer sind als"
 
 msgid "Only this color"
 msgstr "Nur diese Farbe"
 
 msgid "Remove parallel lines"
-msgstr "Entferne parallele Linien"
+msgstr "Parallele Linien entfernen"
 
 msgid "Take only first X paths"
 msgstr "Nur die ersten X Pfade verwenden"
@@ -28827,7 +29591,7 @@ msgstr ""
 "Dialog schließen und Änderungen der Projektionseinstellungen verwerfen"
 
 msgid "Loading..."
-msgstr "Laden …"
+msgstr "Ladevorgang…"
 
 msgid "PDF file preview"
 msgstr "PDF-Dateivorschau"
@@ -28869,7 +29633,7 @@ msgid "Error while parsing: {0}"
 msgstr "Fehler beim Lesen: {0}"
 
 msgid "Removing parallel segments"
-msgstr "Entferne parallele Segmente"
+msgstr "Parallele Segmente werden entfernt"
 
 msgid "Max distance is not a number"
 msgstr "Maximale Entfernung ist kein numerischer Wert"
@@ -28881,10 +29645,10 @@ msgid "Joining adjacent segments"
 msgstr "Benachbarte Punkte verbinden"
 
 msgid "Removing small objects"
-msgstr "Entferne kleine Objekte"
+msgstr "Kleine Objekte werden entfernt"
 
 msgid "Removing large objects"
-msgstr "Entferne große Objekte"
+msgstr "Große Objekte werden entfernt"
 
 msgid "Finalizing layers"
 msgstr "Ebenen abschließen"
@@ -28896,7 +29660,7 @@ msgid "Could not parse numbers. Please check."
 msgstr "Zahlen konnten nicht gelesen werden. Bitte prüfen."
 
 msgid "Building JOSM layer"
-msgstr "JOSM-Ebene aufbauen"
+msgstr "JOSM-Ebene wird aufgebaut"
 
 msgid "Postprocessing layer"
 msgstr "Ebene nachbearbeiten"
@@ -28908,7 +29672,7 @@ msgid " Writing to file"
 msgstr " Schreibe in Datei"
 
 msgid "Building JOSM layer."
-msgstr "JOSM-Ebene aufbauen."
+msgstr "JOSM-Ebene wird aufgebaut."
 
 msgid " "
 msgstr " "
@@ -28961,7 +29725,7 @@ msgid "to gps time"
 msgstr "an die GPS-Zeit"
 
 msgid "to previous value (unchanged mtime)"
-msgstr "auf die alte Zeit zurücksetzen"
+msgstr "auf vorherigen Wert (ungeänderte Bearbeitungszeit)"
 
 msgid "Photo Geotagging Plugin"
 msgstr "Foto-Geotagging-Plugin"
@@ -29016,7 +29780,7 @@ msgid ""
 "direction."
 msgstr ""
 "Fotos mit gedrückter Maustaste verschieben, mit Umschalttaste+Mausklick "
-"positionieren oder Aufnahmerichtung mit Steuerung+Mausklick setzen."
+"positionieren oder Aufnahmerichtung mit Steuerung+Mausklick festlegen."
 
 msgid "Please load some photos."
 msgstr "Bitte einige Fotos laden."
@@ -29038,7 +29802,7 @@ msgid "Loads calibration data from a file"
 msgstr "Lädt Kalibrierungsparameter aus einer Datei"
 
 msgid "Loading file failed: {0}"
-msgstr "Datei laden fehlgeschlagen: {0}"
+msgstr "Laden der Datei ist fehlgeschlagen: {0}"
 
 msgid "Load World File Calibration..."
 msgstr "Weltdatei-Kalibrierung laden …"
@@ -29192,8 +29956,8 @@ msgid ""
 "Set \"{0}\" to yes/no/ask in the preferences\n"
 "to control the autoloading of calibration files."
 msgstr ""
-"Setze ''{0}'' auf yes/no/ask (ja/nein/fragen) in den Einstellungen für das "
-"automatische Laden von Kalibrierungsdateien."
+"Legen Sie ''{0}'' auf yes/no/ask (ja/nein/fragen) in den Einstellungen\n"
+"für das automatische Laden von Kalibrierungsdateien fest."
 
 msgid "Do you want to apply it ?"
 msgstr "Möchten Sie dies anwenden?"
@@ -29411,7 +30175,7 @@ msgid "Catch"
 msgstr "Erfassen"
 
 msgid "Join"
-msgstr "Beitreten"
+msgstr "Verbinden"
 
 msgid "Enable"
 msgstr "Aktivieren"
@@ -29588,6 +30352,29 @@ msgstr "Öffentlicher Verkehr: Wegpunkte aktivieren"
 msgid "Public Transport: Edit waypoint name"
 msgstr "Öffentlicher Verkehr: Wegpunktname bearbeiten"
 
+msgid "Public transport routes"
+msgstr "Routen des öffentlichen Verkehrs"
+
+msgid "Toggle direction arrows"
+msgstr "Richtungspfeile umschalten"
+
+msgid "Toggle reference labels"
+msgstr "Referenzbeschriftung umschalten"
+
+msgid "Visualize public transport routes"
+msgstr "Routen des öffentlichen Verkehrs visualisieren"
+
+msgid "Filters"
+msgstr "Filter"
+
+msgid "Choose Filter"
+msgstr "Filter auswählen"
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+"JSlider-Initialisierungsfehler. Bitte stellen Sie sicher, dass Ihre meta-inf "
+"korrekt ist."
+
 msgid "Relation Toolbox"
 msgstr "Relationswerkzeuge"
 
@@ -29763,17 +30550,23 @@ msgstr "Umkehrter Änderungssatz"
 msgid "It is not allowed to revert changeset from {0}"
 msgstr "Das Zurücksetzen von Änderungssätzen von {0} ist nicht erlaubt"
 
+msgid "Downloading objects history"
+msgstr "Objektechronik wird heruntergeladen"
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr "Fehlendes Vereinigungsziel für {0} mit ID {1}"
 
 msgid "Objects history"
-msgstr "Objektverlauf"
+msgstr "Objektechronik"
 
 msgid "History reverter"
 msgstr "Änderungskorrektur"
 
+msgid "Tool: Display objects history dialog"
+msgstr "Werkzeug: Objektechronikdialog anzeigen"
+
 msgid "Preparing history data..."
-msgstr "Verlaufsdaten vorbereiten …"
+msgstr "Chronikdaten werden vorbereitet…"
 
 msgid "Remote Control has been asked to revert a changeset."
 msgstr "Per Fernsteuerung soll ein Änderungssatz umgekehrt werden."
@@ -29809,21 +30602,21 @@ msgid ""
 "Warning: unsupported start element ''{0}'' in changeset content at position "
 "({1},{2}). Skipping."
 msgstr ""
-"Warnung: nicht unterstütztes Startelement ''{0}'' im Inhalt des "
+"Achtung: nicht unterstütztes Startelement »{0}« im Inhalt des "
 "Änderungssatzes an der Position ({1},{2}) wird übersprungen."
 
 msgid ""
 "Warning: unsupported end element ''{0}'' in changeset content at position "
 "({1},{2}). Skipping."
 msgstr ""
-"Warnung: nicht unterstütztes Endelement ''{0}'' im Inhalt des "
-"Änderungssatzes an der Position ({1},{2}) übersprungen."
+"Achtung: nicht unterstütztes Endelement »{0}« im Inhalt des Änderungssatzes "
+"an der Position ({1},{2}) wird übersprungen."
 
 msgid "Road Sign Plugin"
 msgstr "Verkehrszeichen Plugin"
 
 msgid "signs"
-msgstr "Schilder"
+msgstr "Zeichen"
 
 msgid "Change Properties"
 msgstr "Einstellungen ändern"
@@ -29832,10 +30625,10 @@ msgid "Country preset:"
 msgstr "Standard-Land:"
 
 msgid "Show all signs"
-msgstr "Alle Zeichen zeigen"
+msgstr "Alle Zeichen anzeigen"
 
 msgid "Show a selection of the most useful signs"
-msgstr "Eine Auswahl der wichtigsten Zeichen zeigen"
+msgstr "Eine Auswahl der wichtigsten Zeichen anzeigen"
 
 msgid "Belgium"
 msgstr "Belgien"
@@ -29962,6 +30755,9 @@ msgstr ""
 "Einstellung ''{0}'' fehlt. Kann die Separate-Data-Store-API nicht "
 "initialisieren."
 
+msgid "Proxy Authentication Required"
+msgstr "Proxy-Legitimierung erforderlich"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -29996,7 +30792,7 @@ msgid "Load separate data store data from a file."
 msgstr "Lade die Datei für den Separate-Data-Store"
 
 msgid "Loading files"
-msgstr "Lade Dateien"
+msgstr "Dateien werden geladen"
 
 msgid "SDS"
 msgstr "SDS"
@@ -30166,6 +30962,39 @@ msgstr "Schwellwert zum Vereinen naheliegender Punkte"
 msgid "SeaMap Editor"
 msgstr "SeaMap-Bearbeitung"
 
+msgid "Spline drawing"
+msgstr "Splinezeichnen"
+
+msgid "Draw a spline curve"
+msgstr "Eine Splinekurve zeichnen"
+
+msgid "Spline goes outside of the world."
+msgstr "Spline verlässt den heruntergeladenen Bereich"
+
+msgid "Add an existing node to spline: {0}"
+msgstr "Existierenden Punkt zu Spline hinzufügen: {0}"
+
+msgid "Add a new node to spline: {0}"
+msgstr "Neuen Punkt zu Spline hinzufügen: {0}"
+
+msgid "Delete spline node {0}"
+msgstr "Spline-Punkt {0} löschen"
+
+msgid "Finish spline"
+msgstr "Spline fertigstellen"
+
+msgid "Splines"
+msgstr "Splines"
+
+msgid "Spline drawing preferences"
+msgstr "Spline-Zeicheneinstellungen"
+
+msgid "Curve steps"
+msgstr "Kurvenschritte"
+
+msgid "Undelete node {0}"
+msgstr "Knoten {0} wiederherstellen"
+
 msgid "OSM Export"
 msgstr "OSM-Export"
 
@@ -30175,6 +31004,9 @@ msgstr "Verkehrsdaten in SUMO-Netzwerk-Datei exportieren."
 msgid "SUMO Export"
 msgstr "SUMO-Export"
 
+msgid "Export"
+msgstr "Exportieren"
+
 msgid "AutoSave LiveData"
 msgstr "Live-Daten automatisch speichern"
 
@@ -30185,7 +31017,7 @@ msgid "Error while exporting {0}: {1}"
 msgstr "Fehler beim Exportieren von {0}: {1}"
 
 msgid "Duplicate hotkey for button ''{0}'' - button will be ignored!"
-msgstr "Doppelte Belegung für Taste ''{0}'' - Taste wird ignoriert!"
+msgstr "Doppelte Belegung für Taste »{0}« - Taste wird ignoriert!"
 
 msgid "SurveyorPlugin needs LiveGpsPlugin, but could not find it!"
 msgstr ""
@@ -30239,7 +31071,7 @@ msgid "Launches the tag editor dialog"
 msgstr "Merkmalseditor aufrufen"
 
 msgid "JOSM Tag Editor Plugin"
-msgstr "JOSM-Schlagwortbearbeitungserweiterung"
+msgstr "JOSM-Merkmalsbearbeitungserweiterung"
 
 msgid "Abort tag editing and close dialog"
 msgstr "Merkmalsbearbeitung abbrechen und Dialog schließen"
@@ -30426,9 +31258,6 @@ msgstr "Tracer2-Fehler"
 msgid "Parameter for server request"
 msgstr "Parameter für Serveranfrage"
 
-msgid "Tile size:"
-msgstr "Kachelgröße:"
-
 msgid "Resolution:"
 msgstr "Auflösung:"
 
@@ -31066,7 +31895,7 @@ msgid "Public Service Vehicles"
 msgstr "Öffentlicher Verkehr"
 
 msgid "Public service vehicles like buses, tramways, etc."
-msgstr "Fahrzeuge des öffentlichen Verkehrs wie Busse, Trams, etc."
+msgstr "Fahrzeuge des öffentlichen Verkehrs wie Busse, Trams, usw."
 
 msgid "Heavy Goods Vehicles"
 msgstr "Lastwagen"
@@ -31151,7 +31980,7 @@ msgid "Create a new turn restriction"
 msgstr "Neue Abbiegeeinschränkung erstellen"
 
 msgid "Set the current JOSM selection to the selected turn restrictions"
-msgstr "Aktuelle JOSM-Auswahl auf gewählte Abbiegebeschränkungen setzen"
+msgstr "Aktuelle JOSM-Auswahl auf gewählte Abbiegebeschränkungen festlegen"
 
 msgid "Select in current data layer"
 msgstr "In der aktuellen Datenebene auswählen"
@@ -31189,10 +32018,10 @@ msgid "Display and edit list of via-objects in the Basic Editor"
 msgstr "Zeige und editiere die Liste der Zwischenobjekte im Standardeditor"
 
 msgid "Road signs - Set A"
-msgstr "Straßenschilder - Satz A"
+msgstr "Verkehrszeichen - Satz A"
 
 msgid "Road signs - Set B"
-msgstr "Straßenschilder - Satz B"
+msgstr "Verkehrszeichen - Satz B"
 
 msgid "Please select the set of road sign icons to be used in the plugin."
 msgstr ""
@@ -31339,7 +32168,7 @@ msgstr ""
 "Bitte entfernen Sie {1} davon."
 
 msgid "Go to the Advanced Editor and remove the members"
-msgstr "Gehe zum Fortgeschrittenen-Editor und entferne die Relationselemente"
+msgstr "Wechseln Sie zum Erweiterten Editor und entfernen Sie die Mitglieder"
 
 msgid ""
 "The tag <tt>except</tt> has the non-standard value <tt>{0}</tt>. It is "
@@ -31638,7 +32467,7 @@ msgstr ""
 "im JOSM-Verzeichnis geladen werden."
 
 msgid "Custom URL configuration"
-msgstr "URL konfigurieren"
+msgstr "Benutzerdefinierte Adresse konfigurieren"
 
 msgid "Lat Lon tool"
 msgstr "Länge-Breite-Werkzeug"
@@ -31714,13 +32543,13 @@ msgid "Delete tags from multiple objects"
 msgstr "Merkmal bei mehreren Objekten entfernen"
 
 msgid "Duplicate tags from the first"
-msgstr "Merkmale des ersten Objekts duplizieren"
+msgstr "Merkmale des ersten Objekts verdoppeln"
 
 msgid "Set tags for multiple objects"
-msgstr "Merkmale für mehrere Objekte setzen"
+msgstr "Merkmale für mehrere Objekte festlegen"
 
 msgid "Delete from history"
-msgstr "Von Versionsprotokoll löschen"
+msgstr "Aus Chronik löschen"
 
 msgid "Find primitives with these tags"
 msgstr "Objekte mit diesen Merkmalen finden"
@@ -31905,7 +32734,7 @@ msgstr "Auswahl rückgängig"
 msgid "Reselect last added object or selection form history"
 msgstr ""
 "Wählen Sie erneut ein zuletzt hinzugefügtes Objekt oder eine Markierung aus "
-"der Chronik"
+"der Chronik aus"
 
 msgid "Unselect nodes"
 msgstr "Punkte abwählen"
@@ -32048,19 +32877,19 @@ msgstr "Walking Papers gescannte Karte"
 msgid ""
 "Display a map that was previously scanned and uploaded to walking-papers.org"
 msgstr ""
-"Zeige eine Karte die vorher gescannt und auf walking-papers.org hochgeladen "
-"wurde."
+"Eine Karte anzeigen, die vorher gescannt und auf walking-papers.org "
+"hochgeladen wurde"
 
 msgid ""
 "Enter a walking-papers.org URL or ID (the bit after the ?id= in the URL)"
 msgstr ""
-"Geben Sie eine walking-papers.org URL oder ID (den Teil nach ?id= in der "
-"URL) an"
+"Geben Sie eine walking-papers.org URL oder Kennung (den Teil nach ?id= in "
+"der URL) ein"
 
 msgid "Could not read information from walking-papers.org the id \"{0}\""
 msgstr ""
-"Konnte die Informationen von walking-papers.org mit der id \"{0}\" nicht "
-"lesen"
+"Konnte die Informationen von walking-papers.org mit der Kennung \"{0}\" "
+"nicht lesen"
 
 msgid "Walking Papers: {0}"
 msgstr "Walking Papers: {0}"
@@ -32135,16 +32964,13 @@ msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 "Wegpunkt suchen. Klicken und Karte bewegen, um den Wegpunkt anzuzeigen."
 
-msgid "Way Select"
-msgstr "Linienauswahl"
-
 msgid "Add names from Wikipedia"
 msgstr "Namen aus Wikipedia hinzufügen"
 
 msgid ""
 "Fetches interwiki links from Wikipedia in order to add several name tags"
 msgstr ""
-"Interwiki-Links zum Ergänzen von Namensschlüssel von Wikipedia abrufen"
+"Interwiki-Links zum Ergänzen von Namensmerkmalen von Wikipedia abrufen"
 
 msgid ""
 "Copies the {0} template to the system clipboard instantiated with the "
diff --git a/i18n/po/de_DE.po b/i18n/po/de_DE.po
index 0517a8d..0137bff 100644
--- a/i18n/po/de_DE.po
+++ b/i18n/po/de_DE.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2011-07-10 12:32+0000\n"
 "Last-Translator: ralekuja <Unknown>\n"
 "Language-Team: German (Germany) <de_DE at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 05:04+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 05:09+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -97,22 +97,19 @@ msgstr ""
 msgid "Updating user interface"
 msgstr ""
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "Ignoriere die ungültige Datei-URL: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "Ignoriere die ungültige URL: \"{0}\""
 
 msgid "Warning"
 msgstr "Warnung"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "Ignoriere die ungültige Datei-URL: \"{0}\""
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 "Der Parameter \"downloadgps\" unterstützt keine Dateinamen oder URLs."
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "Ignoriere die ungültige URL: \"{0}\""
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -453,6 +450,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr "Gewählte Knoten gleichmäßig auf einer Linie verteilen."
 
@@ -1038,6 +1038,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr ""
 
@@ -1954,15 +1978,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr ""
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -1984,6 +1999,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2102,9 +2126,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2318,9 +2339,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr ""
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2534,6 +2561,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2576,6 +2607,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3026,6 +3060,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3143,10 +3195,44 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3336,6 +3422,12 @@ msgstr ""
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3363,13 +3455,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -3985,9 +4077,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -3997,12 +4086,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4183,13 +4284,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4387,6 +4488,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4600,43 +4702,54 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
 msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
 msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
 msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
 msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
-msgid "Menu: {0}"
+msgctxt "menu"
+msgid "Help"
 msgstr ""
 
-msgid "Save and load the current session (list of layers, etc.)"
+msgid "Menu: {0}"
 msgstr ""
 
 msgid "Edit toolbar"
@@ -4660,6 +4773,7 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
 msgstr ""
 
@@ -4782,58 +4896,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr ""
-
-msgid "Pos."
+msgid " ({0})"
 msgstr ""
 
-msgid "Role"
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5262,6 +5334,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr ""
+
 msgid "Primitive"
 msgstr ""
 
@@ -5502,6 +5577,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5648,6 +5726,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5751,7 +5864,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5879,6 +5992,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5888,17 +6006,48 @@ msgstr ""
 msgid "unknown"
 msgstr ""
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -5944,10 +6093,16 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
-msgid "Activate"
+msgid "Gamma"
 msgstr ""
 
-msgid "Activate the selected layer"
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
+msgid "Activate"
+msgstr ""
+
+msgid "Activate the selected layer"
 msgstr ""
 
 msgid "Activate layer"
@@ -6073,6 +6228,12 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
+msgid "Mini map"
+msgstr ""
+
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
 msgid "List of notes"
 msgstr ""
 
@@ -6131,10 +6292,15 @@ msgstr "Objekt ID:"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "ID des herunterzuladenden Objekts eingeben"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6163,6 +6329,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr ""
 
+msgid "Selection"
+msgstr ""
+
 msgid "Open a selection list window."
 msgstr ""
 
@@ -6253,6 +6422,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -6847,6 +7022,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6938,14 +7119,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7118,6 +7298,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7653,6 +7839,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8498,6 +8687,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr ""
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr ""
 
@@ -8551,6 +8840,9 @@ msgstr ""
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8571,7 +8863,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8654,80 +8946,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr ""
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-
-msgid "Auto Zoom"
-msgstr ""
-
-msgid "Auto load tiles"
-msgstr ""
-
-msgid "Show Errors"
-msgstr ""
-
-msgid "Load Tile"
-msgstr ""
-
-msgid "Show Tile Info"
-msgstr ""
-
-msgid "Load All Tiles"
-msgstr ""
-
-msgid "Load All Error Tiles"
-msgstr ""
-
-msgid "Increase zoom"
-msgstr ""
-
-msgid "Decrease zoom"
-msgstr ""
-
-msgid "Snap to tile size"
-msgstr ""
-
-msgid "Flush Tile Cache"
-msgstr ""
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
@@ -8737,56 +8955,30 @@ msgstr ""
 msgid "No validation errors"
 msgstr ""
 
-msgid "Blank Layer"
-msgstr ""
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "Download visible tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-
-msgid "Change resolution"
-msgstr ""
-
-msgid "Reload erroneous tiles"
-msgstr ""
-
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Automatic downloading"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Zoom to native resolution"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Supported projections are: {0}"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Save WMS file"
+msgid "Try Again"
 msgstr ""
 
-msgid "Correlate to GPX"
+msgid "No images could be matched!"
 msgstr ""
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
@@ -8873,24 +9065,9 @@ msgstr ""
 msgid "Offset:"
 msgstr ""
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
 msgid "Correlate"
 msgstr ""
 
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9084,9 +9261,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr ""
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9149,9 +9323,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9777,16 +9948,16 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 
 msgid "Would you like to restart now?"
 msgstr ""
 
-msgid "Icon paths:"
+msgid "Download plugins"
+msgstr ""
+
+msgid "Icon paths:"
 msgstr ""
 
 msgid "Short Description:"
@@ -10578,6 +10749,21 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
+msgid "1. Enter getCapabilities URL"
+msgstr ""
+
+msgid "2. Enter name for this layer"
+msgstr ""
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr ""
 
@@ -10596,6 +10782,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10617,6 +10815,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10659,9 +10860,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr ""
 
@@ -10686,36 +10884,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11651,6 +11834,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] ""
@@ -11759,6 +11950,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12012,6 +12206,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12548,6 +12745,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12933,6 +13133,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13930,6 +14143,9 @@ msgstr ""
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr ""
+
 msgid "Blue:"
 msgstr ""
 
@@ -13969,7 +14185,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -13981,9 +14197,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14092,6 +14305,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14105,12 +14321,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14147,10 +14369,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14177,6 +14405,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14201,7 +14432,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14216,6 +14447,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14228,12 +14462,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14254,6 +14482,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14286,10 +14517,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14319,6 +14547,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14334,154 +14568,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14496,9 +14736,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14628,6 +14877,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14643,7 +14907,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -14969,6 +15233,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15053,11 +15322,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15111,7 +15375,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15126,9 +15390,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15209,6 +15470,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15247,6 +15516,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15322,9 +15594,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15730,6 +15999,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15754,10 +16031,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15774,6 +16047,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15790,11 +16067,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15810,6 +16099,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15822,6 +16115,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15849,6 +16146,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16240,6 +16549,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16316,6 +16628,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr ""
 
@@ -16853,6 +17168,12 @@ msgstr ""
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17042,6 +17363,11 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
 msgstr ""
 
@@ -17095,6 +17421,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17236,13 +17566,127 @@ msgstr ""
 msgid "public"
 msgstr ""
 
-msgid "Pier"
+msgid "Marine Fuel"
 msgstr ""
 
-msgid "Lock Gate"
+msgid "Agip"
 msgstr ""
 
-msgid "Turning Point"
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
+msgid "Pier"
+msgstr ""
+
+msgid "Lock Gate"
+msgstr ""
+
+msgid "Turning Point"
 msgstr ""
 
 msgid "Slipway"
@@ -17352,6 +17796,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -17475,78 +17922,6 @@ msgstr ""
 msgid "Fuel"
 msgstr ""
 
-msgid "Agip"
-msgstr ""
-
-msgid "Aral"
-msgstr ""
-
-msgid "Avia"
-msgstr ""
-
-msgid "BP"
-msgstr ""
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr ""
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
 msgid "With shop"
 msgstr ""
 
@@ -17556,51 +17931,12 @@ msgstr ""
 msgid "kiosk"
 msgstr ""
 
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -17819,9 +18155,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17840,6 +18173,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18042,6 +18378,12 @@ msgstr ""
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18132,6 +18474,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18346,6 +18691,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18833,7 +19181,7 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
@@ -18842,43 +19190,70 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
-msgid "Glass"
+msgid "Cardboard"
 msgstr ""
 
-msgid "Paper"
+msgid "Electrical Appliances"
 msgstr ""
 
-msgid "Scrap Metal"
+msgid "Glass"
 msgstr ""
 
-msgid "container"
+msgid "Glass Bottles"
 msgstr ""
 
-msgid "centre"
+msgid "Green Waste"
 msgstr ""
 
-msgid "Waste Basket/Trash Can"
+msgid "Paper"
 msgstr ""
 
-msgid "Waste Disposal/Dumpster"
+msgid "Plastic"
 msgstr ""
 
-msgid "Sanitary Dump Station"
+msgid "Plastic Bottles"
 msgstr ""
 
-msgid "Suction pumpout"
+msgid "Plastic Packaging"
 msgstr ""
 
-msgid "Gravity drain for hose"
+msgid "Scrap Metal"
 msgstr ""
 
-msgid "Casette or Elsan Disposal"
+msgid "Shoes"
 msgstr ""
 
-msgid "Operation times"
+msgid "Small Appliances"
 msgstr ""
 
-msgid "Backrest"
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
+msgstr ""
+
+msgid "Waste Basket/Trash Can"
+msgstr ""
+
+msgid "Waste Disposal/Dumpster"
+msgstr ""
+
+msgid "Sanitary Dump Station"
+msgstr ""
+
+msgid "Suction pumpout"
+msgstr ""
+
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
+msgstr ""
+
+msgid "Operation times"
+msgstr ""
+
+msgid "Backrest"
 msgstr ""
 
 msgid "Amount of Seats"
@@ -19058,6 +19433,9 @@ msgstr ""
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr ""
 
@@ -19233,12 +19611,18 @@ msgstr ""
 msgid "Basketball"
 msgstr ""
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr ""
 
@@ -19254,13 +19638,13 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
@@ -19284,9 +19668,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19305,9 +19686,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -19380,6 +19758,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20700,9 +21086,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -21715,10 +22098,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22145,6 +22528,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22169,6 +22555,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22229,6 +22627,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22319,9 +22720,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22691,6 +23101,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22745,9 +23158,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23491,47 +23901,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23540,10 +23959,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24150,6 +24581,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr ""
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25247,374 +25681,680 @@ msgid ""
 "highlight tracks"
 msgstr ""
 
-msgid "Delete this"
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
 msgstr ""
 
-msgid "Delete this&older"
+msgid "Connecting"
 msgstr ""
 
-msgid "km/h"
+msgid "Connected"
 msgstr ""
 
-msgid "Track name: "
+msgid "no name"
 msgstr ""
 
-msgid "Update IRS adjustment layer"
+msgid "Live GPS"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid "Show GPS data."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Speed"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Course"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
+msgid "Explore"
 msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25635,6 +26375,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -25693,47 +26436,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -25966,6 +26668,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr ""
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27183,6 +27888,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27354,6 +28080,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27363,6 +28092,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27543,6 +28275,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27721,6 +28456,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27730,6 +28498,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -27966,9 +28737,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29451,9 +30219,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/el.po b/i18n/po/el.po
index cc85a6a..fb58a00 100644
--- a/i18n/po/el.po
+++ b/i18n/po/el.po
@@ -7,16 +7,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
-"PO-Revision-Date: 2015-04-14 19:43+0000\n"
-"Last-Translator: aitolos <Unknown>\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
+"PO-Revision-Date: 2015-08-20 19:34+0000\n"
+"Last-Translator: Don-vip <Unknown>\n"
 "Language-Team: Greek <el at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:42+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:44+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: el\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -98,21 +98,18 @@ msgstr "Φόρτωση προτιμήσεων υπόβαθρου εικόνων"
 msgid "Updating user interface"
 msgstr "Ενημέρωση διεπαφής χρήστη"
 
-msgid "{0} completed in {1}"
-msgstr "{0} ολοκληρώθηκε σε {1}"
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "Αγνοήθηκε κακοσχηματισμένο URL αρχείου:\"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "Αγνοήθηκε κακοσχηματισμένο URL:\"{0}\""
 
 msgid "Warning"
 msgstr "Προειδοποίηση"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "Αγνοήθηκε κακοσχηματισμένο URL αρχείου:\"{0}\""
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr "Η παράμετρος \"downloadgps\" δεν δέχεται ονόματα ή URL αρχείων"
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "Αγνοήθηκε κακοσχηματισμένο URL:\"{0}\""
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -191,8 +188,8 @@ msgstr "Συνέχεια"
 
 msgid "Click to continue and to open {0} browser"
 msgid_plural "Click to continue and to open {0} browsers"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Κάντε κλικ για να συνεχίσετε και να ανοιχτεί ο {0} περιηγητής"
+msgstr[1] "Κάντε κλικ για να συνεχίσετε και να ανοιχτεί ο {0} περιηγητές"
 
 msgid "Cancel"
 msgstr "Ακύρωση"
@@ -298,7 +295,7 @@ msgid "Please select at least three nodes."
 msgstr "Παρακαλώ επιλέξτε τουλάχιστον τρείς κόμβους."
 
 msgid "Can not align a polygon. Abort."
-msgstr ""
+msgstr "Αδυναμία ευθυγράμμισης πολύγονου. Εγκατάλειψη."
 
 msgid "Intersection of three or more ways can not be solved. Abort."
 msgstr ""
@@ -346,7 +343,7 @@ msgid "View: {0}"
 msgstr "Προβολή: {0}"
 
 msgid "No conflicts to zoom to"
-msgstr "Καμοία διένεξη για να γίνει ζουμ"
+msgstr "Καμία σύγκρουση για να γίνει εστίαση"
 
 msgid "Changeset Manager"
 msgstr "Διαχειριστής Ομαδας Αλλαγών"
@@ -459,6 +456,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr "Διανομή κόμβων"
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
 "Κατανομή των επιλεγμένων κόμβων σε ίσες αποστάσεις κατά μήκος μιας γραμμής."
@@ -489,7 +489,7 @@ msgid "Download data"
 msgstr "Λήψη δεδομένων"
 
 msgid "Download notes in current view"
-msgstr ""
+msgstr "Λήψη σημειώσεων στην τρέχουσα προβολή"
 
 msgid "Download object..."
 msgstr "Λήψη αντικειμένου..."
@@ -961,7 +961,7 @@ msgid "Create a new map layer."
 msgstr "Δημιουργία ενός νέου επιπέδου χάρτη"
 
 msgid "URL Files"
-msgstr ""
+msgstr "Αρχεία διευθύνσεων"
 
 msgid "Open..."
 msgstr "Άνοιγμα..."
@@ -1110,6 +1110,30 @@ msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 "Παρακαλώ επιλέξτε διαδρομές με γωνίες που πλησιάζουν τις 90 ή τις 180 μοίρες."
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr "Επικόλληση"
 
@@ -1127,6 +1151,9 @@ msgid ""
 "objects are removed.  Do you want to paste the data without the incomplete "
 "objects?"
 msgstr ""
+"Τα αντιγραμμένα δεδομένα περιέχουν μη ολοκληρωμένα αντικείμενα. Κατά την "
+"επικόλληση τα μη ολοκληρωμένα αντικείμενα αφαιρούνται. Θέλετε να "
+"επικολλήσετε τα δεδομένα χωρίς τα μη ολοκληρωμένα αντικείμενα."
 
 msgid "Paste Tags"
 msgstr "Επικόλληση ετικετών"
@@ -1657,7 +1684,7 @@ msgid ""
 "<html>The data to be uploaded participates in unresolved conflicts of layer "
 "''{0}''.<br>You have to resolve them first.</html>"
 msgstr ""
-"<html>Τα δεδομένα προς αποστολή εμπλέκονται σε ανεπίλυτες διενέξεις του "
+"<html>Τα δεδομένα προς αποστολή εμπλέκονται σε ανεπίλυτες συγκρούσεις του "
 "επιπέδου ''{0}''.<br>Πρέπει πρώτα να επιλυθούν.</html>"
 
 msgid "Upload discouraged"
@@ -1913,13 +1940,13 @@ msgstr ""
 
 msgid "There was {0} conflict during import."
 msgid_plural "There were {0} conflicts during import."
-msgstr[0] "Υπήρξε {0} διένεξη κατα τη διάρκεια της εισαγωγής"
-msgstr[1] "Υπήρξαν {0} δινέξεις κατα τη διάρκεια της εισαγωγής"
+msgstr[0] "Υπήρξε {0} σύγκρουση κατα τη διάρκεια της εισαγωγής"
+msgstr[1] "Υπήρξαν {0} συγκρούσεις κατα τη διάρκεια της εισαγωγής"
 
 msgid "Conflict during download"
 msgid_plural "Conflicts during download"
-msgstr[0] "Διένεξη κατα τη διάρκεια της λήψης"
-msgstr[1] "Διενέξεις κατα τηδιάρκεια της λήψης"
+msgstr[0] "Σύγκρουση κατα την διάρκεια της λήψης"
+msgstr[1] "Συγκρούσεις κατα την διάρκεια της λήψης"
 
 msgid "({0}/{1}) Loading parents of node {2}"
 msgstr "({0}/{1}) Φόρτωση γονέων κόμβου {2}"
@@ -1966,11 +1993,11 @@ msgid_plural ""
 msgstr[0] ""
 "Υπάρχει {0} αντικείμενο στο τοπικό σύνολο δεδομένων που μπορεί να έχει "
 "διαγραφεί στο διακομιστή.<br>Αν προσπαθήσετε αργότερα να το διαγράψετε ή να "
-"το ενημερώσετε ο διακομιστής θα αναφέρει διένεξη."
+"το ενημερώσετε ο διακομιστής θα αναφέρει σύγκρουση."
 msgstr[1] ""
 "Υπάρχει {0} αντικείμενα στο τοπικό σύνολο δεδομένων που μπορεί να έχουν "
 "διαγραφεί στο διακομιστή.<br>Αν προσπαθήσετε αργότερα να τα διαγράψετε ή να "
-"τα ενημερώσετε ο διακομιστής θα αναφέρει διένεξη."
+"τα ενημερώσετε ο διακομιστής θα αναφέρει σύγκρουση."
 
 msgid ""
 "Click <strong>{0}</strong> to check the state of this object on the server."
@@ -2089,15 +2116,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr "Τέλος σχεδιασμού."
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -2119,6 +2137,15 @@ msgstr "0,45,90,..."
 msgid "0,30,45,60,90,..."
 msgstr "0,30,45,60,90,..."
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2241,9 +2268,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr "Σφάλμα δημιουργίας παράλληλης διαδρομής"
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2464,9 +2488,15 @@ msgstr "όλα τα αντικείμενα"
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr ""
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2683,6 +2713,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2725,6 +2759,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3016,19 +3053,21 @@ msgid ""
 "<html>Layer ''{0}'' already has a conflict for object<br>''{1}''.<br>This "
 "conflict cannot be added.</html>"
 msgstr ""
-"<html>Το επίπεδο ''{0}'' ήδη έχει διένεξη για το "
-"αντικείμενο<br>''{1}''.<br>Αυτή η διένεξη δεν μπορεί να προστεθεί.</html>"
+"<html>Το επίπεδο ''{0}'' ήδη έχει σύγκρουση για το "
+"αντικείμενο<br>''{1}''.<br>Αυτή η σύγκρουση δεν μπορεί να προστεθεί.</html>"
 
 msgid "Double conflict"
-msgstr "Διπλή διένεξη"
+msgstr "Διπλή σύγκρουση"
 
 msgid ""
 "Layer ''{0}'' does not exist any more. Cannot remove conflict for object "
 "''{1}''."
 msgstr ""
+"Το επίπεδο \"{0}\" δεν υπάρχει πλέον. Δεν μπορεί να αφαιρεθεί η σύγκρουση "
+"για το αντικείμενο ''{1}''."
 
 msgid "Add conflict for ''{0}''"
-msgstr "Προσθήκη διένεξης για ''{0}''"
+msgstr "Προσθήκη σύγκρουσης για ''{0}''"
 
 msgid ""
 "Cannot undo command ''{0}'' because layer ''{1}'' is not present any more"
@@ -3037,10 +3076,10 @@ msgstr ""
 "υφίσταται πια"
 
 msgid "Resolve conflicts in coordinates in {0}"
-msgstr "Επίλυση διενέξεων συντεταγμένων στο {0}"
+msgstr "Επίλυση συγκρούσεων συντεταγμένων στο {0}"
 
 msgid "Cannot resolve undecided conflict."
-msgstr ""
+msgstr "Αδυναμία επίλυσης μη αποφασισμένης σύγκρουσης"
 
 msgid "Resolve conflicts in deleted state in {0}"
 msgstr ""
@@ -3055,34 +3094,34 @@ msgid "Set the ''modified'' flag for relation {0}"
 msgstr "Επισήμανση ως ''τροποποιημένο'' για τη σχέση {0}"
 
 msgid "Resolve conflicts in member list of relation {0}"
-msgstr "Επίλυση διενέξεων στη λίστα μελών της σχέσης {0}"
+msgstr "Επίλυση συγκρούσεων στη λίστα μελών της σχέσης {0}"
 
 msgid "Resolve {0} tag conflict in node {1}"
 msgid_plural "Resolve {0} tag conflicts in node {1}"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Επίλυση {0} σύγκρουσης ετικετών στον κόμβο {1}"
+msgstr[1] "Επίλυσης {0} συγκρούσεων ετικετών στον κόμβο {1}"
 
 msgid "Resolve {0} tag conflict in way {1}"
 msgid_plural "Resolve {0} tag conflicts in way {1}"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Επίλυση {0} σύγκρουσης ετικετών στην διαδρομή {1}"
+msgstr[1] "Επίλυση {0} συγκρούσεων ετικετών στην διαδρομή {1}"
 
 msgid "Resolve {0} tag conflict in relation {1}"
 msgid_plural "Resolve {0} tag conflicts in relation {1}"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Επίλυση {0} σύγκρουσης ετικετών στην σχέση {1}"
+msgstr[1] "Επίλυση {0} συγκρούσεων ετικετών στην σχέση {1}"
 
 msgid "Resolve version conflict for node {0}"
-msgstr "Επίλυση διένεξης έκδοσης για τον κόμβο {0}"
+msgstr "Επίλυση σύγκρουσης έκδοσης για τον κόμβο {0}"
 
 msgid "Resolve version conflict for way {0}"
-msgstr "Επίλυση διένεξης έκδοσης για τη διαδρομή {0}"
+msgstr "Επίλυση σύγκρουσης έκδοσης για τη διαδρομή {0}"
 
 msgid "Resolve version conflict for relation {0}"
-msgstr "Επίλυση διένεξης έκδοσης για τη σχέση {0}"
+msgstr "Επίλυση σύγκρουσης έκδοσης για τη σχέση {0}"
 
 msgid "Resolve conflicts in node list of way {0}"
-msgstr "Επίλυση διενέξεων στη λίστα κόμβων της διαδρομής {0}"
+msgstr "Επίλυση συγκρούσεων στη λίστα κόμβων της διαδρομής {0}"
 
 msgid "Main dataset does not include node {0}"
 msgstr "Η κύρια συλλογή δεδομένων δεν περιέχει τον κόμβο {0}"
@@ -3199,6 +3238,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3317,10 +3374,44 @@ msgctxt "compass"
 msgid "E"
 msgstr "Α"
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "HTTP error {0} when loading tiles"
+msgstr ""
+
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr "Προβολή"
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3510,6 +3601,12 @@ msgstr "κείμενο"
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3537,13 +3634,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -4171,9 +4268,6 @@ msgstr "Κλειδί ετικέτας μεγαλύτερο από το επιτ
 msgid "Tags with empty values"
 msgstr "Ετικέτες χωρίς τιμές"
 
-msgid "Invalid property key"
-msgstr "Μη έγκυρο κλειδί ιδιότητας"
-
 msgid "Invalid white space in property key"
 msgstr "Μη έγκυρο λευκό κενό στο κλειδί ιδιότητας"
 
@@ -4183,12 +4277,24 @@ msgstr "Οι τιμές της ιδιότητας αρχίζουν ή τελει
 msgid "Property values contain HTML entity"
 msgstr "Οι τιμές της ιδιότητας περιέχουν HTML στοιχεία"
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr "Το κλειδί \"{0}\" δεν υπάρχει στις προεπιλογές"
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr "Η τιμή \"{0}\" για το κλειδί \"{1}\" δεν υπάρχει στις προεπιλογές."
 
@@ -4374,6 +4480,9 @@ msgstr "Κόμβος διαδρομής κοντά σε άλλη διαδρομ
 msgid "Connected way end node near other way"
 msgstr ""
 
+msgid "Unconnected nodes without physical tags"
+msgstr "Ασύνδετοι κόμβοι χωρίς ετικέτες"
+
 msgid "Untagged and unconnected nodes"
 msgstr "Ασύνδετοι και χωρίς ετικέτες κόμβοι"
 
@@ -4382,9 +4491,6 @@ msgstr ""
 "Αυτή η δοκιμή ελέγχει για κόμβους χωρίς ετικέτα που δεν είναι μέρος κάποιας "
 "διαδρομής."
 
-msgid "Unconnected nodes without physical tags"
-msgstr "Ασύνδετοι κόμβοι χωρίς ετικέτες"
-
 msgid "No tags"
 msgstr "Χωρίς ετικέτες"
 
@@ -4534,7 +4640,7 @@ msgid "Not Found"
 msgstr "Δε Βρέθηκε"
 
 msgid "Conflict"
-msgstr "Διένεξη"
+msgstr "Σύγκρουση"
 
 msgid "Authentication Failed"
 msgstr "Αποτυχία Πιστοποίησης"
@@ -4583,8 +4689,9 @@ msgstr "Κλικ για κλείσιμο του διαλόγου"
 msgid "Imagery offset"
 msgstr "Μετατόπιση υπόβαθρου εικόνων"
 
+msgctxt "menu"
 msgid "Imagery"
-msgstr "Υπόβαθρο εικόνων"
+msgstr ""
 
 msgctxt "layer"
 msgid "Offset"
@@ -4806,45 +4913,56 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
-msgstr "Αρχείο"
+msgstr ""
 
-msgid "Session"
-msgstr "Συνεδρία"
+msgctxt "menu"
+msgid "Edit"
+msgstr ""
 
+msgctxt "menu"
 msgid "View"
-msgstr "Προβολή"
+msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
-msgstr "Εργαλεία"
+msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
-msgstr "Περισσότερα εργαλεία"
+msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
-msgstr "Επιλογή"
+msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
-msgstr "Προεπιλογές"
+msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
-msgstr "Παράθυρα"
+msgstr ""
+
+msgctxt "menu"
+msgid "Help"
+msgstr ""
 
 msgid "Menu: {0}"
 msgstr "Μενού: {0}"
 
-msgid "Save and load the current session (list of layers, etc.)"
-msgstr ""
-
 msgid "Edit toolbar"
 msgstr "Επεξεργασία εργαλειοθήκης"
 
@@ -4866,8 +4984,9 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
-msgstr "Ήχος"
+msgstr ""
 
 msgid "Do not hide toolbar"
 msgstr ""
@@ -4988,67 +5107,17 @@ msgstr "στο παρασκήνιο"
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-
-msgid "Details..."
-msgstr "Λεπτομέρειες..."
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-"<html>Παρακαλώ επιβεβαιώστε την απομάκρυνση <strong>1 αντικειμένου</strong> "
-"από <strong>1 σχέση</strong>.</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>Παρακαλώ επιβεβαιώστε την απομάκρυνση <strong>1 αντικειμένου</strong> "
-"από <strong>{0} σχέσεις</strong>.</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>Παρακαλώ επιβεβαιώστε την απομάκρυνση <strong>{0} "
-"αντικειμένων</strong> από <strong>{1} σχέσεις</strong>.</html>"
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] "Διαγραφή {0} αντικειμένου"
-msgstr[1] "Διαγραφή {0} αντικειμένων"
-
-msgid "Delete objects"
-msgstr "Διαγραφή αντικειμένων"
-
-msgid "To delete"
-msgstr "Προς διαγραφή"
-
-msgid "From Relation"
-msgstr "Από τη Σχέση"
-
-msgid "Pos."
-msgstr ""
+msgid " ({0})"
+msgstr " ({0})"
 
-msgid "Role"
-msgstr "Ρόλος"
+msgid "{0} completed in {1}"
+msgstr "{0} ολοκληρώθηκε σε {1}"
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
-"Κλικ για κλείσιμο διαλόγου και απομάκρυνση του αντικειμένου από τις σχέσεις"
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
-"Κλικ για κλείσιμο διαλόγου και ματαίωση της διαγραφής των αντικειμένων"
 
 msgid ""
 "<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
@@ -5485,6 +5554,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr "Ρόλος"
+
 msgid "Primitive"
 msgstr ""
 
@@ -5573,7 +5645,7 @@ msgid ", "
 msgstr ", "
 
 msgid "<i>missing</i>"
-msgstr ""
+msgstr "<i>λείπει</i>"
 
 msgid ""
 "You are about to combine {0} objects, but the following tags are used "
@@ -5592,7 +5664,7 @@ msgid "Choose a value"
 msgstr "Επιλογή τιμής"
 
 msgid "none"
-msgstr "καμοία"
+msgstr "καμία"
 
 msgid "all"
 msgstr "όλα"
@@ -5601,17 +5673,17 @@ msgid "sum"
 msgstr ""
 
 msgid "Please decide which values to keep"
-msgstr "Παρακαλώ αποφασίστε ποιες τιμές θα μείνουν"
+msgstr "Παρακαλώ αποφασίστε ποιες τιμές θα κρατήσετε"
 
 msgid "Value ''{0}'' is going to be applied for key ''{1}''"
-msgstr ""
+msgstr "Η τιμή ''{0}'' θα εφαρμοσθεί στο κλειδί ''{1}''"
 
 msgid ""
 "All numeric values sumed as ''{0}'' are going to be applied for key ''{1}''"
 msgstr ""
 
 msgid "The key ''{0}'' and all its values are going to be removed"
-msgstr ""
+msgstr "Το κλειδί ''{0}'' και όλες του οι τιμές θα αφαιρεθούν"
 
 msgid "All values joined as ''{0}'' are going to be applied for key ''{1}''"
 msgstr ""
@@ -5620,7 +5692,7 @@ msgid "Tag collection does not include the selected value ''{0}''."
 msgstr ""
 
 msgid "Not decided yet."
-msgstr ""
+msgstr "Δεν έχει αποφασισθεί ακόμα"
 
 msgid "Tags from nodes"
 msgstr "Ετικέτες από κόμβους"
@@ -5659,7 +5731,7 @@ msgstr[0] "{0} σχέση"
 msgstr[1] "{0} σχέσεις"
 
 msgid "Position {0} is out of range. Current number of members is {1}."
-msgstr ""
+msgstr "Η θέση {0} είναι εκτός εύρους. Ο τρέχων αριθμός μελώ είναι {1}."
 
 msgid "Remove this relation member from the relation"
 msgstr ""
@@ -5671,10 +5743,10 @@ msgid "Keep this relation member for the target object"
 msgstr ""
 
 msgid "Undecided"
-msgstr ""
+msgstr "Μη αποφασισμένο"
 
 msgid "Not decided yet"
-msgstr ""
+msgstr "Δεν έχει αποφασισθεί ακόμα"
 
 msgid "Role:"
 msgstr "Ρόλος:"
@@ -5683,12 +5755,14 @@ msgid "Enter a role for all relation memberships"
 msgstr ""
 
 msgid "Tag modified relations with "
-msgstr ""
+msgstr "Μαρκάρετε τις τροποποιημένες σχέσεις με "
 
 msgid ""
 "<html>Select to enable entering a tag which will be applied<br>to all "
 "modified relations.</html>"
 msgstr ""
+"<html>Επιλέξτε για ενεργοποίηση εισαγωγής ετικέτας η οποία θα "
+"εφαρμοστεί<br>σε όλες τις τροποποιημένες σχέσεις.</html>"
 
 msgctxt "tag"
 msgid "Key:"
@@ -5696,6 +5770,8 @@ msgstr "Κλειδί:"
 
 msgid "<html>Enter a tag key, e.g. <strong><tt>fixme</tt></strong></html>"
 msgstr ""
+"<html>Εισάγετε μια ετικέτα κλειδί, λ.χ. "
+"<strong><tt>διόρθωσέμε</tt></strong></html>"
 
 msgid "Value:"
 msgstr "Τιμή:"
@@ -5703,6 +5779,8 @@ msgstr "Τιμή:"
 msgid ""
 "<html>Enter a tag value, e.g. <strong><tt>check members</tt></strong></html>"
 msgstr ""
+"<html>Εισάγετε μια ετικέτα τιμή, λ.χ. <strong><tt>έλεγχος "
+"μελών</tt></strong></html>"
 
 msgid ""
 "<html>The combined ways are members in one or more relations. Please decide "
@@ -5723,6 +5801,9 @@ msgid ""
 msgstr ""
 
 msgid "Apply this role to all members"
+msgstr "Εφαρμογή αυτού του ρόλου σε όλα τα μέλη"
+
+msgid "Pos."
 msgstr ""
 
 msgid "Orig. Way"
@@ -5733,15 +5814,17 @@ msgstr "Απόφαση"
 
 msgid "<html>Please select the values to keep for the following tags.</html>"
 msgstr ""
+"<html>Παρακαλώ επιλέξτε τις τιμές που θα διατηρηθούν για τις ακόλουθες "
+"ετικέτες.</html>"
 
 msgid "Show tags with conflicts only"
-msgstr ""
+msgstr "Εμφάνιση ετικετών με συγκρούσεις μόνο"
 
 msgid "Show tags with multiple values only"
-msgstr ""
+msgstr "Εμφάνιση ετικετών με πολλαπλές τιμές μόνο"
 
 msgid "For selected objects only"
-msgstr ""
+msgstr "Για επιλεγμένα αντικείμενα μόνο"
 
 msgid ""
 "<html>Select to show changesets for the currently selected objects "
@@ -5753,7 +5836,7 @@ msgid "Changesets"
 msgstr "Ομάδες αλλαγών"
 
 msgid "Open the list of changesets in the current layer."
-msgstr "Άνοιγμα του καταλόγου των ομάδων αλλαγών στο τρέχων επίπεδο."
+msgstr "Άνοιγμα καταλόγου ομάδων αλλαγών στο τρέχον επίπεδο."
 
 msgid "Select all objects assigned to the currently selected changesets"
 msgstr ""
@@ -5783,7 +5866,7 @@ msgstr ""
 "Ανοίγει τον διαχειριστή ομάδων αλλαγών για τις επιλεγμένες ομάδες αλλαγών"
 
 msgid "Command Stack"
-msgstr "Στοίβα Εντολών"
+msgstr "Στοίβα εντολών"
 
 msgid "Open a list of all commands (undo buffer)."
 msgstr "Άνοιγμα λίστας όλων των εντολών (μνήμη αναίρεσης)"
@@ -5792,14 +5875,14 @@ msgid "Toggle: {0}"
 msgstr "Εναλλαγή: {0}"
 
 msgid "Command Stack: Undo: {0} / Redo: {1}"
-msgstr ""
+msgstr "Στοίβα εντολών: Αναίρεση: {0} / Επανάληψη: {1}"
 
 msgid ""
 "Selects the objects that take part in this command (unless currently deleted)"
 msgstr ""
 
 msgid "Select and zoom"
-msgstr ""
+msgstr "Επιλογή και εστίαση"
 
 msgid ""
 "Selects the objects that take part in this command (unless currently "
@@ -5813,15 +5896,15 @@ msgid "Redo the selected and all earlier commands"
 msgstr ""
 
 msgid "Resolve conflicts."
-msgstr "Επίλυση διενέξεων"
+msgstr "Επίλυση συγκρούσεων"
 
 msgid "Conflict: {0} unresolved"
 msgid_plural "Conflicts: {0} unresolved"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Σύγκρουση: {0} μη επιλυμένη"
+msgstr[1] "Σύγκρούσεις: {0} μη επιλυμένες"
 
 msgid "Rel.:{0} / Ways:{1} / Nodes:{2}"
-msgstr ""
+msgstr "Σχέσεις:{0} / Διαδρομές:{1} / Κόμβοι:{2}"
 
 msgid "Resolve"
 msgstr "Επίλυση"
@@ -5837,13 +5920,13 @@ msgstr[0] "Εντοπίστηκε {0} διένεξη"
 msgstr[1] "Εντοπίστηκαν {0} διενέξεις"
 
 msgid "Click to close this dialog and continue editing"
-msgstr ""
+msgstr "Κάντε κλικ για κλείσιμο διαλόγου και συνέχεια στην επεξεργασία"
 
 msgid "Conflicts detected"
-msgstr "Εντοπίστηκαν διενέξεις"
+msgstr "Εντοπίστηκαν συγκρούσεις"
 
 msgid "Cancel conflict resolution and close the dialog"
-msgstr ""
+msgstr "Ακύρωση επίλυσης συγκρούσεων και κλείσιμο διαλόγου"
 
 msgid "Apply resolved conflicts and close the dialog"
 msgstr "Εφαρμογή επίλυσης συγκρούσεων και κλείσιμο του διαλόγου"
@@ -5867,34 +5950,78 @@ msgid ""
 msgstr ""
 
 msgid "Conflict not resolved completely"
-msgstr ""
+msgstr "Η σύγκρουση δεν επιλύθηκε εντελώς"
 
 msgid "Resolve conflicts"
-msgstr "Επίλυση διενέξεων"
+msgstr "Επίλυση συγκρούσεων"
 
 msgid "Resolve conflicts for ''{0}''"
-msgstr ""
+msgstr "Επίλυση συγκρούσεων για ''{0}''"
 
-msgid "Filter objects and hide/disable them."
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
 msgstr ""
+"<html>Παρακαλώ επιβεβαιώστε την απομάκρυνση <strong>1 αντικειμένου</strong> "
+"από <strong>1 σχέση</strong>.</html>"
 
-msgid "Enable filter"
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
 msgstr ""
+"<html>Παρακαλώ επιβεβαιώστε την απομάκρυνση <strong>1 αντικειμένου</strong> "
+"από <strong>{0} σχέσεις</strong>.</html>"
 
-msgid "Multikey: {0}"
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
 msgstr ""
-
-msgid "Hide filter"
+"<html>Παρακαλώ επιβεβαιώστε την απομάκρυνση <strong>{0} "
+"αντικειμένων</strong> από <strong>{1} σχέσεις</strong>.</html>"
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] "Διαγραφή {0} αντικειμένου"
+msgstr[1] "Διαγραφή {0} αντικειμένων"
+
+msgid "Delete objects"
+msgstr "Διαγραφή αντικειμένων"
+
+msgid "To delete"
+msgstr "Προς διαγραφή"
+
+msgid "From Relation"
+msgstr "Από τη Σχέση"
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+"Κάντε κλικ για κλείσιμο διαλόγου και απομάκρυνση του αντικειμένου από τις "
+"σχέσεις"
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+"Κάντε κλικ για κλείσιμο διαλόγου και ματαίωση της διαγραφής των αντικειμένων"
+
+msgid "Filter objects and hide/disable them."
+msgstr ""
+
+msgid "Enable filter"
+msgstr "Ενεργοποίηση φίλτρου"
+
+msgid "Multikey: {0}"
 msgstr ""
 
+msgid "Hide filter"
+msgstr "Απόκρυψη φίλτρου"
+
 msgid "Hiding filter"
 msgstr ""
 
 msgid "Inverse filter"
-msgstr ""
+msgstr "Αντιστροφή φίλτρου"
 
 msgid "Filter mode"
-msgstr ""
+msgstr "Λειτουργία φίλτρου"
 
 msgid "Add"
 msgstr "Προσθήκη"
@@ -5930,7 +6057,7 @@ msgstr "Α"
 
 msgctxt "filter"
 msgid "Text"
-msgstr "κείμενο"
+msgstr "Κείμενο"
 
 msgctxt "filter"
 msgid "I"
@@ -5957,20 +6084,21 @@ msgid "F"
 msgstr "F"
 
 msgid "<h2>Filter active</h2>"
-msgstr ""
+msgstr "<h2>Ενεργό φίλτρο</h2>"
 
 msgid "<p><b>{0}</b> object hidden"
 msgid_plural "<p><b>{0}</b> objects hidden"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "<p><b>{0}</b> κρυφό αντικείμενο"
+msgstr[1] "<p><b>{0}</b> κρυφά αντικείμενα"
 
 msgid "<b>{0}</b> object disabled"
 msgid_plural "<b>{0}</b> objects disabled"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "<b>{0}</b> απενεργοποιημένα αντικείμενα"
+msgstr[1] "<b>{0}</b> απενεργοποιήμενο αντικείμενο"
 
 msgid "</p><p>Close the filter dialog to see all objects.<p></html>"
 msgstr ""
+"</p><p>Κλείσιμο διαλόγου φίλτρου για προβολή όλων των αντικειμένων.<p></html>"
 
 msgid "Advanced object info"
 msgstr "Προχωρημένες πληροφορίες αντικειμένου"
@@ -5978,8 +6106,8 @@ msgstr "Προχωρημένες πληροφορίες αντικειμένου
 msgid "map style"
 msgstr "στυλ χάρτη"
 
-msgid " ({0})"
-msgstr " ({0})"
+msgid "edit counts"
+msgstr ""
 
 msgid "not in data set"
 msgstr ""
@@ -6108,6 +6236,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr "xml"
 
@@ -6117,17 +6250,48 @@ msgstr "mapcss"
 msgid "unknown"
 msgstr "άγνωστο"
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -6173,6 +6337,12 @@ msgstr "Αδιαφάνεια"
 msgid "Adjust opacity of the layer."
 msgstr "Ρύθμιση αδιαφάνειας του επιπέδου"
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr "Ενεργοποίηση"
 
@@ -6302,6 +6472,12 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
+msgid "Mini map"
+msgstr ""
+
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
 msgid "List of notes"
 msgstr "Κατάλογος σημειώσεων"
 
@@ -6360,10 +6536,15 @@ msgstr "Αναγνωριστικό Αντικειμένου (ID):"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "Εισάγετε το αναγνωριστικό του αντικειμένου του οποίου θα γίνει λήψη"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6392,6 +6573,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr "Σχέσεις: {0}"
 
+msgid "Selection"
+msgstr "Επιλογή"
+
 msgid "Open a selection list window."
 msgstr "Άνοιγμα παραθύρου λίστας επιλεγμένων"
 
@@ -6486,6 +6670,12 @@ msgstr "Άνοιγμα παραθύρου επικύρωσης."
 msgid "Validation results"
 msgstr "Αποτελέσματα επικύρωσης"
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr "Διόρθωση"
 
@@ -7094,6 +7284,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -7185,14 +7381,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7367,6 +7562,12 @@ msgstr "Ταξινόμηση των μελών της σχέσης"
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr "Αντιστροφή της σειράς των μελών της σχέσης"
 
@@ -7913,6 +8114,9 @@ msgstr "Φόρτωση ιστορικού για τη σχέση {0}"
 msgid "Node {0}"
 msgstr "Κόμβος {0}"
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr "Εστίαση στον κόμβο"
 
@@ -8808,6 +9012,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] "{0} αντικείμενο προς διαγραφή:"
 msgstr[1] "{0} αντικείμενα προς διαγραφή:"
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr "Αυτόματη Εστίαση"
+
+msgid "Auto load tiles"
+msgstr "Αυτόματη φόρτωση πλακιδίων"
+
+msgid "Load All Tiles"
+msgstr "Φόρτωση όλων των πλακιδίων"
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr "Αλλαγή ανάλυσης"
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr "Φόρτωση πλακιδίου"
+
+msgid "Increase zoom"
+msgstr "Άυξηση ζουμ"
+
+msgid "Decrease zoom"
+msgstr "Μείωση ζουμ"
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr "Χωρίς πλακίδια σε αυτό το επίπεδο εστίασης"
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+
+msgid "Details..."
+msgstr "Λεπτομέρειες..."
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr "Προσαρμογή Χρώματος"
 
@@ -8861,6 +9165,9 @@ msgstr "Αποθήκευση αρχείου GPX"
 msgid "Imagery fade"
 msgstr "Εξασθένιση υπόβαθρου εικόνων"
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr "ΣΦΑΛΜΑ"
 
@@ -8881,7 +9188,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8964,146 +9271,45 @@ msgstr ""
 msgid "Save OSM file"
 msgstr "Αποθήκευση αρχείου OSM"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
+msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
-msgid "Auto Zoom"
-msgstr "Αυτόματη Εστίαση"
+msgid "Validation errors"
+msgstr "Σφάλματα επικύρωσης"
 
-msgid "Auto load tiles"
-msgstr "Αυτόματη φόρτωση πλακιδίων"
+msgid "No validation errors"
+msgstr "Κανένα σφάλμα επικύρωσης"
 
-msgid "Show Errors"
+msgid "Set WMS Bookmark"
 msgstr ""
 
-msgid "Load Tile"
-msgstr "Φόρτωση πλακιδίου"
-
-msgid "Show Tile Info"
+msgid ""
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Load All Tiles"
-msgstr "Φόρτωση όλων των πλακιδίων"
-
-msgid "Load All Error Tiles"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Increase zoom"
-msgstr "Άυξηση ζουμ"
-
-msgid "Decrease zoom"
-msgstr "Μείωση ζουμ"
-
-msgid "Snap to tile size"
-msgstr ""
+msgid "Invalid timezone"
+msgstr "Λανθασμένη ζώνη ώρας"
 
-msgid "Flush Tile Cache"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "zoom in to load any tiles"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "zoom in to load more tiles"
-msgstr ""
+msgid "Try Again"
+msgstr "Προσπάθεια Ξανά"
 
-msgid "increase zoom level to see more detail"
+msgid "No images could be matched!"
 msgstr ""
 
-msgid "No tiles at this zoom level"
-msgstr "Χωρίς πλακίδια σε αυτό το επίπεδο εστίασης"
+msgid "GPX Files (*.gpx *.gpx.gz)"
+msgstr "Αρχεία GPX (*.gpx *.gpx.gz)"
 
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "EPSG:4326 and Mercator projection are supported"
-msgstr ""
-
-msgid "Validation errors"
-msgstr "Σφάλματα επικύρωσης"
-
-msgid "No validation errors"
-msgstr "Κανένα σφάλμα επικύρωσης"
-
-msgid "Blank Layer"
-msgstr "Άδειο επίπεδο"
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr "Επίπεδο WMS ({0}), αυτόματη λήψη στην εστίαση {1}"
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr "Επίπεδο WMS ({0}), λήψη στην εστίαση {1}"
-
-msgid "Download visible tiles"
-msgstr "Λήψη ορατών πλακιδίων"
-
-msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-"Η ζητούμενη περιοχή είναι πολύ μεγάλη. Παρακαλώ κάντε ζουμ, ή αλλάξτε ανάλυση"
-
-msgid "Change resolution"
-msgstr "Αλλαγή ανάλυσης"
-
-msgid "Reload erroneous tiles"
-msgstr "Ανανέωση λανθασμένων πλακιδίων"
-
-msgid "Alpha channel"
-msgstr "Κανάλι άλφα"
-
-msgid "Automatically change resolution"
-msgstr "Αυτόματη αλλαγή ανάλυσης"
-
-msgid "Set WMS Bookmark"
-msgstr ""
-
-msgid "Automatic downloading"
-msgstr "Αυτόματη λήψη"
-
-msgid "Zoom to native resolution"
-msgstr ""
-
-msgid "Supported projections are: {0}"
-msgstr ""
-
-msgid "Unsupported WMS file version; found {0}, expected {1}"
-msgstr "Μη υποστηριζόμενη έκδοση αρχείου WMS΄ βρέθηκε {0}, αναμενόταν {1}"
-
-msgid "Save WMS file"
-msgstr ""
-
-msgid "Correlate to GPX"
-msgstr ""
-
-msgid "GPX Files (*.gpx *.gpx.gz)"
-msgstr "Αρχεία GPX (*.gpx *.gpx.gz)"
-
-msgid "File {0} is loaded yet under the name \"{1}\""
+msgid "File {0} is loaded yet under the name \"{1}\""
 msgstr ""
 
 msgid "Error while parsing {0}"
@@ -9184,24 +9390,9 @@ msgstr "Ζώνη Ώρας: "
 msgid "Offset:"
 msgstr "Μετατόπιση:"
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
 msgid "Correlate"
 msgstr "Συσχέτιση"
 
-msgid "Invalid timezone"
-msgstr "Λανθασμένη ζώνη ώρας"
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr "Προσπάθεια Ξανά"
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9397,9 +9588,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr "Εικόνες JPEG (*.jpg)"
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9462,9 +9650,6 @@ msgstr "μέτρα"
 msgid "Maximum area per request:"
 msgstr "Μέγιστη περιοχή ανά αίτημα:"
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -10095,9 +10280,6 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr "Λήψη πρόσθετων"
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 "Πρέπει να επανεκινήσετε το JOSM για να εφαρμοστούν κάποιες ρυθμίσεις."
@@ -10105,6 +10287,9 @@ msgstr ""
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr "Λήψη πρόσθετων"
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -10908,6 +11093,21 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
+msgid "1. Enter getCapabilities URL"
+msgstr ""
+
+msgid "2. Enter name for this layer"
+msgstr ""
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr "εξασθένιση υπόβαθρου εικόνων"
 
@@ -10926,6 +11126,18 @@ msgstr "Έντονο"
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr "Προτιμήσεις υπόβαθρου εικόνων"
 
@@ -10949,6 +11161,9 @@ msgstr "Παροχείς υπόβαθρου εικόνων"
 msgid "Offset bookmarks"
 msgstr "Σελιδοδείκτες Μετατόπισης"
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr "Παρασκήνιο υπόβαθρου εικόνων:Προκαθορισμένο"
 
@@ -10991,9 +11206,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr "Προβολή"
-
 msgid "Layer"
 msgstr "Επίπεδο"
 
@@ -11018,36 +11230,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr "Προσθήκη στον επιλογέα ολισθαίνοντος χάρτη: "
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr "Επικάλυψη πλακιδίων"
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -12003,6 +12200,14 @@ msgstr "Εφαρμογή Προεπιλογής"
 msgid "New relation"
 msgstr "Νέα σχέση"
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] "Αλλαγή {0} αντικειμένου"
@@ -12111,6 +12316,9 @@ msgstr "Εμφάνιση διαλόγου αναζήτησης προεπιλο
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr "Προεπιλογές"
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12364,6 +12572,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12906,6 +13117,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr "Μη υποστηριζόμενη έκδοση αρχείου WMS΄ βρέθηκε {0}, αναμενόταν {1}"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -13302,6 +13516,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -14063,7 +14290,7 @@ msgid "Database offline for maintenance"
 msgstr "Η βάση δεδομένων είναι εκτός λειτουργίας λόγω συντήρησης"
 
 msgid "You have downloaded too much data. Please try again later."
-msgstr ""
+msgstr "Έχετε λάβει πάρα πολλά δεδομένα. Παρακαλώ προσπαθήστε αργότερα."
 
 msgid ""
 "The maximum bbox size is 0.25, and your request was too large. Either "
@@ -14071,7 +14298,7 @@ msgid ""
 msgstr ""
 
 msgid "JOSM-Trac login at josm.openstreetmap.de"
-msgstr ""
+msgstr "Σύνδεση στο JOSM-Trac στην ιστοσελίδα josm.openstreetmap.de"
 
 msgid "could not get audio input stream from input URL"
 msgstr ""
@@ -14092,7 +14319,7 @@ msgstr "δάσος"
 
 msgctxt "landuse"
 msgid "meadow"
-msgstr ""
+msgstr "λιβάδι"
 
 msgctxt "landuse"
 msgid "farmland"
@@ -14116,7 +14343,7 @@ msgstr "όριο"
 
 msgctxt "Relation type"
 msgid "bridge"
-msgstr ""
+msgstr "γέφυρα"
 
 msgctxt "Relation type"
 msgid "destination_sign"
@@ -14136,7 +14363,7 @@ msgstr "δίκτυο"
 
 msgctxt "Relation type"
 msgid "public_transport"
-msgstr ""
+msgstr "δημόσια_συγκοινωνία"
 
 msgctxt "Relation type"
 msgid "restriction"
@@ -14156,11 +14383,11 @@ msgstr ""
 
 msgctxt "Relation type"
 msgid "street"
-msgstr ""
+msgstr "οδός"
 
 msgctxt "Relation type"
 msgid "tunnel"
-msgstr ""
+msgstr "σήραγγα"
 
 msgctxt "Relation type"
 msgid "waterway"
@@ -14172,7 +14399,7 @@ msgstr "πόλη"
 
 msgctxt "Place type"
 msgid "locality"
-msgstr ""
+msgstr "κοινότητα"
 
 msgctxt "Place type"
 msgid "village"
@@ -14184,7 +14411,7 @@ msgstr "κωμόπολη"
 
 msgctxt "Place type"
 msgid "borough"
-msgstr ""
+msgstr "δήμος"
 
 msgctxt "Place type"
 msgid "municipality"
@@ -14204,7 +14431,7 @@ msgstr "οικισμός"
 
 msgctxt "Place type"
 msgid "suburb"
-msgstr ""
+msgstr "προάστιο"
 
 msgid "All Files"
 msgstr "Όλα τα Αρχεία"
@@ -14213,10 +14440,10 @@ msgid "Attributes"
 msgstr "Χαρακτηριστικά"
 
 msgid "Abort file chooser dialog"
-msgstr ""
+msgstr "Ματαίωση του διαλόγου επιλογής αρχείου"
 
 msgid "Abort file chooser dialog."
-msgstr ""
+msgstr "Ματαίωση του διαλόγου επιλογής αρχείου."
 
 msgid "Create New Folder"
 msgstr "Δημιουργία Νέου Φακέλου"
@@ -14234,7 +14461,7 @@ msgid "Error "
 msgstr "Σφάλμα "
 
 msgid "Error renaming file \"{0}\" to \"{1}\""
-msgstr ""
+msgstr "Σφάλμα κατά την μετονομασία του αρχείου \"{0}\" σε \"{1}\""
 
 msgid "File name:"
 msgstr "Όνομα αρχείου:"
@@ -14243,7 +14470,7 @@ msgid "File Name:"
 msgstr "Όνομα Αρχείου:"
 
 msgid "FileChooser help."
-msgstr ""
+msgstr "Βοήθεια επιλογέα αρχείου."
 
 msgid "Files"
 msgstr "Αρχεία"
@@ -14261,13 +14488,13 @@ msgid "Folders"
 msgstr "Φάκελοι"
 
 msgid "Home"
-msgstr ""
+msgstr "Αρχή"
 
 msgid "Look in:"
-msgstr ""
+msgstr "Αναζήτηση σε:"
 
 msgid "Look In:"
-msgstr ""
+msgstr "Αναζήτηση σε:"
 
 msgid "Modified"
 msgstr "Τροποποιημένο"
@@ -14288,7 +14515,7 @@ msgid "Rename File"
 msgstr "Μετονομασία Αρχείου"
 
 msgid "Rename file \"{0}\" to"
-msgstr ""
+msgstr "Μετονομασία αρχείου \"{0}\" σε"
 
 msgid "Save in:"
 msgstr "Αποθήκευση στο:"
@@ -14297,7 +14524,7 @@ msgid "Save In:"
 msgstr "Αποθήκευση Στο:"
 
 msgid "Save selected file."
-msgstr ""
+msgstr "Αποθήκευση επιλεγμένου αρχείου."
 
 msgid "Selection:"
 msgstr "Επιλογή:"
@@ -14314,6 +14541,9 @@ msgstr "Ενημέρωση"
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr "Προβολή"
+
 msgid "Blue:"
 msgstr "Μπλε:"
 
@@ -14327,7 +14557,7 @@ msgid "Hue:"
 msgstr "Απόχρωση:"
 
 msgid "GTK Color Chooser"
-msgstr ""
+msgstr "Επιλογέας χρωμάτων GTK"
 
 msgid "Red:"
 msgstr "Κόκκινο:"
@@ -14336,112 +14566,109 @@ msgid "Saturation:"
 msgstr "Κορεσμός:"
 
 msgid "Landsat"
-msgstr ""
+msgstr "Landsat"
 
 msgid "Bing aerial imagery"
-msgstr ""
+msgstr "Αεροφωτογραφίες Bing"
 
 msgid "HDM (Humanitarian OpenStreetMap Team)"
-msgstr ""
+msgstr "HDM (Ανθρωπιστική Ομάδα OpenStreetMap)"
 
 msgid "Mapbox Satellite"
-msgstr ""
+msgstr "Δορυφόρος MapBox"
 
 msgid "MapQuest Open Aerial"
-msgstr ""
+msgstr "Ανοιχτές αεροφωτογραφίες MapQuest"
 
 msgid "OpenStreetMap GPS Traces"
-msgstr ""
+msgstr "Ίχνη GPS OpenStreetMap"
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
-msgstr ""
+msgstr "skobbler"
 
 msgid "OpenStreetMap (Mapnik Black & White)"
-msgstr ""
+msgstr "OpenStreetMap (Mapnik Μαύρο & Άσπρο)"
 
 msgid "OpenStreetMap (Mapnik, no labels)"
-msgstr ""
-
-msgid "skobbler heatmap"
-msgstr ""
+msgstr "OpenStreetMap (Mapnik, χωρίς ετικέτες)"
 
 msgid "OpenCycleMap"
-msgstr ""
+msgstr "OpenCycleMap"
 
 msgid "MapQuest OSM"
-msgstr ""
+msgstr "MapQuest OSM"
 
 msgid "Public Transport (ÖPNV)"
-msgstr ""
+msgstr "Δημόσια συγκοινωνία (ÖPNV)"
 
 msgid "OpenStreetMap (German Style)"
-msgstr ""
+msgstr "OpenStreetMap (γερμανικό στιλ)"
 
 msgid "Cambodia, Laos, Thailand, Vietnam bilingual"
-msgstr ""
+msgstr "Καμπότζη, Λάος, Ταϊλάνδη, δίγλωσσο Βιετνάμ"
 
 msgid "osmfr"
-msgstr ""
+msgstr "osmfr"
 
 msgid "OpenPT Map (overlay)"
-msgstr ""
+msgstr "Χάρτης OpenPT (επικάλυψη)"
 
 msgid "Strava cycling heatmap"
-msgstr ""
+msgstr "Χάρτης θερμότητας ποδηλασίας Strava"
 
 msgid "Strava running heatmap"
-msgstr ""
+msgstr "Χάρτης θερμότητας τρεξίματος Strava"
 
 msgid "Locator Overlay"
 msgstr ""
 
 msgid "QA No Address"
-msgstr ""
+msgstr "QA καμία διεύθυνση"
 
 msgid "Waymarked Trails: Hiking"
-msgstr ""
+msgstr "Σηματοδοτημένα μονοπάτια: Ορειβασία"
 
 msgid "Waymarked Trails: Cycling"
-msgstr ""
+msgstr "Σηματοδοτημένα μονοπάτια: Ποδηλασία"
 
 msgid "Waymarked Trails: MTB"
-msgstr ""
+msgstr "Σηματοδοτημένα μονοπάτια: Ποδήλατα βουνού"
 
 msgid "Waymarked Trails: Skating"
-msgstr ""
+msgstr "Σηματοδοτημένα μονοπάτια: Τροχοδρομία"
 
 msgid "Waymarked Trails: Horse Riding"
-msgstr ""
+msgstr "Σηματοδοτημένα μονοπάτια: Ιππασία"
 
 msgid "Waymarked Trails: Winter Sports"
-msgstr ""
+msgstr "Σηματοδοτημένα μονοπάτια: Χειμερινά αθλήματα"
 
 msgid "OSM Inspector: Geometry"
-msgstr ""
+msgstr "Επιθεωρητής OSM: Γεωμετρία"
 
 msgid "OSM Inspector: Tagging"
-msgstr ""
+msgstr "Επιθεωρητής OSM: Τοποθέτηση ετικετών"
 
 msgid "OSM Inspector: Places"
-msgstr ""
+msgstr "Επιθεωρητής OSM: Τοποθεσίες"
 
 msgid "OSM Inspector: Highways"
-msgstr ""
+msgstr "Επιθεωρητής OSM: Αυτοκινητόδρομοι"
 
 msgid "OSM Inspector: Multipolygon"
 msgstr ""
 
 msgid "OSM Inspector: Routing"
-msgstr ""
+msgstr "Επιθεωρητής OSM: Δρομολόγηση"
 
 msgid "OSM Inspector: Addresses"
-msgstr ""
+msgstr "Επιθεωρητής OSM: Διευθύνσεις"
 
 msgid "OSM Inspector: Boundaries (EU)"
-msgstr ""
+msgstr "Επιθεωρητής OSM: Σύνορα (ΕΕ)"
 
 msgid "AGRI black-and-white 2.5m"
 msgstr ""
@@ -14476,6 +14703,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14489,12 +14719,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14531,10 +14767,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
+msgstr ""
+
+msgid "Geodatastyrelsen DTK Kort25"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14561,6 +14803,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14585,7 +14830,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14600,6 +14845,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14612,19 +14860,13 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
 msgstr ""
 
 msgid "Hike & Bike"
-msgstr ""
+msgstr "Ορειβασία & ποδήλατο"
 
 msgid "OpenStreetMap (Sorbian Language)"
 msgstr ""
@@ -14638,6 +14880,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14670,10 +14915,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14703,6 +14945,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14718,154 +14966,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14880,9 +15134,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -15012,6 +15275,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -15027,7 +15305,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -15353,6 +15631,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15437,11 +15720,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15495,7 +15773,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15510,9 +15788,6 @@ msgstr "Συγχώνευση αλληλεπικαλυπτόμενων μερών
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15593,6 +15868,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr "Πίνακας δημιουργίας και επεξεργασίας σχέσης και πολύ-πολυγώνου."
 
@@ -15631,6 +15914,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15709,9 +15995,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15736,7 +16019,7 @@ msgid "concrete"
 msgstr "μπετόν"
 
 msgid "metal"
-msgstr ""
+msgstr "μέταλλο"
 
 msgid "wood"
 msgstr "ξύλο"
@@ -15772,16 +16055,16 @@ msgid "sett"
 msgstr ""
 
 msgid "Smoothness"
-msgstr ""
+msgstr "Ομαλότητα"
 
 msgid "excellent"
-msgstr ""
+msgstr "άριστη"
 
 msgid "Thin Rollers: rollerblade, skateboard"
 msgstr ""
 
 msgid "good"
-msgstr ""
+msgstr "καλή"
 
 msgid "Thin Wheels: racing bike"
 msgstr ""
@@ -15793,7 +16076,7 @@ msgid "Wheels: city bike, wheelchair, scooter"
 msgstr ""
 
 msgid "bad"
-msgstr ""
+msgstr "κακή"
 
 msgid "Robust Wheels: trekking bike, car, rickshaw"
 msgstr ""
@@ -15828,11 +16111,11 @@ msgstr ""
 
 msgctxt "riding"
 msgid "sports_centre"
-msgstr ""
+msgstr "αθλητικό κέντρο"
 
 msgctxt "riding"
 msgid "stadium"
-msgstr ""
+msgstr "στάδιο"
 
 msgctxt "riding"
 msgid "track"
@@ -15842,7 +16125,7 @@ msgid "clay"
 msgstr ""
 
 msgid "dirt"
-msgstr ""
+msgstr "χώμα"
 
 msgid "fine_gravel"
 msgstr ""
@@ -15893,26 +16176,26 @@ msgid "Width (meters)"
 msgstr "Πλάτος (μέτρα)"
 
 msgid "Sidewalk"
-msgstr ""
+msgstr "Πεζοδρόμιο"
 
 msgctxt "sidewalk"
 msgid "both"
-msgstr ""
+msgstr "αμφότερα"
 
 msgctxt "sidewalk"
 msgid "left"
-msgstr ""
+msgstr "αριστερά"
 
 msgctxt "sidewalk"
 msgid "right"
-msgstr ""
+msgstr "δεξιά"
 
 msgctxt "sidewalk"
 msgid "no"
-msgstr ""
+msgstr "όχι"
 
 msgid "Service type"
-msgstr ""
+msgstr "Τύπος υπηρεσίας"
 
 msgid "yard"
 msgstr "γιάρδα"
@@ -15939,20 +16222,20 @@ msgid "rail"
 msgstr ""
 
 msgid "Voltage in Volts (V)"
-msgstr ""
+msgstr "Τάση σε Volts (V)"
 
 msgid "Frequency in Hertz (Hz)"
-msgstr ""
+msgstr "Συχνότητα σε Hertz (Hz)"
 
 msgid "16.67"
-msgstr ""
+msgstr "16.67"
 
 msgid "16.7"
 msgstr "16.7"
 
 msgctxt "railway"
 msgid "Tracks"
-msgstr ""
+msgstr "Γραμμές"
 
 msgid "Gauge (mm)"
 msgstr ""
@@ -15970,7 +16253,7 @@ msgid "Motorcar"
 msgstr "Αυτοκίνητο"
 
 msgid "Reference"
-msgstr ""
+msgstr "Παραπομπή"
 
 msgid "Operator"
 msgstr "Λειτουργός"
@@ -15979,10 +16262,10 @@ msgid "Service Times"
 msgstr ""
 
 msgid "18:00"
-msgstr ""
+msgstr "18:00"
 
 msgid "sunset,sunrise"
-msgstr ""
+msgstr "δύση,ανατολή"
 
 msgid "Su 09:30,11:00"
 msgstr ""
@@ -16032,10 +16315,10 @@ msgid "Su 10:00+"
 msgstr ""
 
 msgid "Wheelchairs"
-msgstr ""
+msgstr "Αναπηρικά αμαξίδια"
 
 msgid "limited"
-msgstr ""
+msgstr "περιορισμένο"
 
 msgid "Brand"
 msgstr "Μάρκα"
@@ -16050,10 +16333,10 @@ msgid "wired"
 msgstr "ενσύρματο"
 
 msgid "terminal"
-msgstr ""
+msgstr "τερματικό"
 
 msgid "Internet access fee"
-msgstr ""
+msgstr "Πάγιο πρόσβασης διαδικτύου"
 
 msgid "Smoking"
 msgstr "Κάπνισμα"
@@ -16071,13 +16354,13 @@ msgid "Height (meters)"
 msgstr "Ύψος (μέτρα)"
 
 msgid "Max. width (meters)"
-msgstr ""
+msgstr "Μέγιστο πλάτος (μέτρα)"
 
 msgid "Max. height (meters)"
-msgstr ""
+msgstr "Μέγιστο ύψος (μέτρα)"
 
 msgid "pitch"
-msgstr ""
+msgstr "γήπεδο"
 
 msgid "sports_centre"
 msgstr "αθλητικό κέντρο"
@@ -16094,7 +16377,7 @@ msgstr ""
 
 msgctxt "sport"
 msgid "archery"
-msgstr ""
+msgstr "τοξοβολία"
 
 msgctxt "sport"
 msgid "athletics"
@@ -16102,19 +16385,27 @@ msgstr ""
 
 msgctxt "sport"
 msgid "american_football"
-msgstr ""
+msgstr "αμερικανικό_ποδόσφαιρο"
 
 msgctxt "sport"
 msgid "australian_football"
-msgstr ""
+msgstr "αυστραλιανό_ποδόσφαιρο"
 
 msgctxt "sport"
 msgid "baseball"
-msgstr ""
+msgstr "μπέιζμπολ"
 
 msgctxt "sport"
 msgid "basketball"
-msgstr ""
+msgstr "καλαθοσφαίριση"
+
+msgctxt "sport"
+msgid "beachvolleyball"
+msgstr "πετοσφαίριση παραλίας"
+
+msgctxt "sport"
+msgid "billiards"
+msgstr "μπιλιάρδο"
 
 msgctxt "sport"
 msgid "boules"
@@ -16122,7 +16413,7 @@ msgstr ""
 
 msgctxt "sport"
 msgid "bowls"
-msgstr ""
+msgstr "μπόουλινγκ"
 
 msgctxt "sport"
 msgid "canadian_football"
@@ -16130,19 +16421,15 @@ msgstr ""
 
 msgctxt "sport"
 msgid "canoe"
-msgstr ""
+msgstr "κωπηλασία"
 
 msgctxt "sport"
 msgid "climbing"
-msgstr ""
+msgstr "αναρρίχιση"
 
 msgctxt "sport"
 msgid "cricket"
-msgstr ""
-
-msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
+msgstr "κρίκετ"
 
 msgctxt "sport"
 msgid "croquet"
@@ -16150,15 +16437,19 @@ msgstr ""
 
 msgctxt "sport"
 msgid "cycling"
-msgstr ""
+msgstr "ποδηλασία"
 
 msgctxt "sport"
 msgid "dog_racing"
-msgstr ""
+msgstr "κυνοδρομίες"
 
 msgctxt "sport"
 msgid "equestrian"
-msgstr ""
+msgstr "ιππασία"
+
+msgctxt "sport"
+msgid "field_hockey"
+msgstr "χόκεϊ_επί_χόρτου"
 
 msgctxt "sport"
 msgid "gaelic_games"
@@ -16166,7 +16457,7 @@ msgstr ""
 
 msgctxt "sport"
 msgid "golf"
-msgstr ""
+msgstr "γκολφ"
 
 msgctxt "sport"
 msgid "gymnastics"
@@ -16174,17 +16465,29 @@ msgstr ""
 
 msgctxt "sport"
 msgid "handball"
-msgstr ""
+msgstr "χειροσφαίριση"
 
 msgctxt "sport"
-msgid "hockey"
-msgstr ""
+msgid "horse_racing"
+msgstr "ιπποδρομίες"
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr "χόκεϊ_πάγου"
+
+msgctxt "sport"
+msgid "karting"
+msgstr "αγώνες καρτ"
+
+msgctxt "sport"
+msgid "model_aerodrome"
 msgstr ""
 
 msgctxt "sport"
+msgid "motocross"
+msgstr "μότο κρος"
+
+msgctxt "sport"
 msgid "motor"
 msgstr ""
 
@@ -16197,6 +16500,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -16206,11 +16513,15 @@ msgstr ""
 
 msgctxt "sport"
 msgid "running"
+msgstr "τρέξιμο"
+
+msgctxt "sport"
+msgid "safety_training"
 msgstr ""
 
 msgctxt "sport"
 msgid "shooting"
-msgstr ""
+msgstr "σκοποβολή"
 
 msgctxt "sport"
 msgid "skateboard"
@@ -16222,18 +16533,30 @@ msgstr ""
 
 msgctxt "sport"
 msgid "soccer"
-msgstr ""
+msgstr "ποδόσφαιρο"
 
 msgctxt "sport"
 msgid "swimming"
-msgstr ""
+msgstr "κολύμβηση"
 
 msgctxt "sport"
 msgid "table_tennis"
-msgstr ""
+msgstr "επιτραπέζια_αντισφαίριση"
 
 msgctxt "sport"
 msgid "tennis"
+msgstr "αντισφαίριση"
+
+msgctxt "sport"
+msgid "volleyball"
+msgstr "πετοσφαίριση"
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
 msgstr ""
 
 msgid "Fee"
@@ -16254,11 +16577,11 @@ msgstr ""
 
 msgctxt "parking"
 msgid "surface"
-msgstr ""
+msgstr "επιφάνεια"
 
 msgctxt "parking"
 msgid "underground"
-msgstr ""
+msgstr "υπόγειο"
 
 msgctxt "parking"
 msgid "rooftop"
@@ -16313,13 +16636,13 @@ msgid "Distance (km)"
 msgstr ""
 
 msgid "Ascent (m)"
-msgstr ""
+msgstr "Ανάβαση (m)"
 
 msgid "Descent (m)"
-msgstr ""
+msgstr "Κατάβαση (m)"
 
 msgid "Roundtrip"
-msgstr ""
+msgstr "Ταξίδι μετ ''επιστροφής"
 
 msgid "Symbol description"
 msgstr "Περιγραφή συμβόλου"
@@ -16334,7 +16657,7 @@ msgid "mixed"
 msgstr "Μικτό"
 
 msgid "leafless"
-msgstr ""
+msgstr "χωρίς φύλλα"
 
 msgid "Cycle"
 msgstr ""
@@ -16346,7 +16669,7 @@ msgid "Plants that are leafless for a certain period during the year."
 msgstr ""
 
 msgid "evergreen"
-msgstr ""
+msgstr "αειθαλής"
 
 msgid "Plants that are never entirely without green foliage."
 msgstr ""
@@ -16627,6 +16950,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr "Αταξινόμητος"
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16703,6 +17029,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr "Δρόμος (Άγνωστος Τύπος)"
 
@@ -17240,6 +17569,12 @@ msgstr "Κάμερα ελέγχου ταχύτητας"
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17429,8 +17764,13 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
 msgid "Water"
-msgstr "Νερό"
+msgstr ""
+
+msgctxt "sub group"
+msgid "Water"
+msgstr ""
 
 msgid "Drain"
 msgstr "Αποχέτευση"
@@ -17482,6 +17822,10 @@ msgstr "Ταμιευτήρας"
 msgid "Covered Reservoir"
 msgstr "Καλυμένος Ταμιευτήρας"
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17623,62 +17967,176 @@ msgstr ""
 msgid "public"
 msgstr "δημόσιο"
 
-msgid "Pier"
-msgstr "Αποβάθρα"
-
-msgid "Lock Gate"
-msgstr ""
-
-msgid "Turning Point"
-msgstr ""
-
-msgid "Slipway"
+msgid "Marine Fuel"
 msgstr ""
 
-msgid "Boatyard"
-msgstr ""
+msgid "Agip"
+msgstr "Agip"
 
-msgid "Dock"
-msgstr ""
+msgid "Aral"
+msgstr "Aral"
 
-msgid "Transport"
-msgstr "Μεταφορές"
+msgid "Avia"
+msgstr "Avia"
 
-msgid "Railway"
-msgstr "Σιδηρόδρομος"
+msgid "BP"
+msgstr "BP"
 
-msgid "Rail"
-msgstr "Σιδηροτροχιά"
+msgid "Chevron"
+msgstr "Chevron"
 
-msgid "main"
-msgstr ""
+msgid "Citgo"
+msgstr "Citgo"
 
-msgid "branch"
+msgid "Eni"
 msgstr ""
 
-msgid "industrial"
-msgstr "βιομηχανική"
+msgid "Esso"
+msgstr "Esso"
 
-msgid "military"
-msgstr "στρατιωτική"
+msgid "Exxon"
+msgstr "Exxon"
 
-msgid "tourism"
-msgstr "τουρισμός"
+msgid "Gulf"
+msgstr "Gulf"
 
-msgid "freight"
-msgstr ""
+msgid "Mobil"
+msgstr "Mobil"
 
-msgid "Narrow Gauge Rail"
-msgstr ""
+msgid "OMV"
+msgstr "OMV"
 
-msgid "Monorail"
-msgstr ""
+msgid "Petro-Canada"
+msgstr "Petro-Canada"
 
-msgid "Preserved"
-msgstr ""
+msgid "Pioneer"
+msgstr "Pioneer"
 
-msgid "Light Rail"
-msgstr ""
+msgid "Q8"
+msgstr "Q8"
+
+msgid "Repsol"
+msgstr "Repsol"
+
+msgid "Shell"
+msgstr "Shell"
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr "Statoil"
+
+msgid "Sunoco"
+msgstr "Sunoco"
+
+msgid "Tamoil"
+msgstr "Tamoil"
+
+msgid "Texaco"
+msgstr "Texaco"
+
+msgid "Total"
+msgstr "Total"
+
+msgid "Independent"
+msgstr "Ανεξάρτητο"
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr "Diesel"
+
+msgid "Bio Diesel"
+msgstr "Bio Diesel"
+
+msgid "Octane 80"
+msgstr "80 Οκτάνια"
+
+msgid "Octane 91"
+msgstr "91 Οκτάνια"
+
+msgid "Octane 92"
+msgstr "92 Οκτάνια"
+
+msgid "Octane 95"
+msgstr "95 Οκτάνια"
+
+msgid "Octane 98"
+msgstr "98 Οκτάνια"
+
+msgid "Octane 100"
+msgstr "100 Οκτάνια"
+
+msgid "E10 (10% Ethanol mix)"
+msgstr "E10 (10% μείγμα αιθανόλης)"
+
+msgid "E85 (85% Ethanol mix)"
+msgstr "E85 (85% μείγμα αιθανόλης)"
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
+msgid "Pier"
+msgstr "Αποβάθρα"
+
+msgid "Lock Gate"
+msgstr ""
+
+msgid "Turning Point"
+msgstr ""
+
+msgid "Slipway"
+msgstr ""
+
+msgid "Boatyard"
+msgstr ""
+
+msgid "Dock"
+msgstr ""
+
+msgid "Transport"
+msgstr "Μεταφορές"
+
+msgid "Railway"
+msgstr "Σιδηρόδρομος"
+
+msgid "Rail"
+msgstr "Σιδηροτροχιά"
+
+msgid "main"
+msgstr ""
+
+msgid "branch"
+msgstr ""
+
+msgid "industrial"
+msgstr "βιομηχανική"
+
+msgid "military"
+msgstr "στρατιωτική"
+
+msgid "tourism"
+msgstr "τουρισμός"
+
+msgid "freight"
+msgstr ""
+
+msgid "Narrow Gauge Rail"
+msgstr ""
+
+msgid "Monorail"
+msgstr ""
+
+msgid "Preserved"
+msgstr ""
+
+msgid "Light Rail"
+msgstr ""
 
 msgid "Subway"
 msgstr "Υπόγειος Σιδηρόδρομος"
@@ -17739,6 +18197,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr "Εναέρια"
 
@@ -17862,78 +18323,6 @@ msgstr ""
 msgid "Fuel"
 msgstr "Καύσιμα"
 
-msgid "Agip"
-msgstr "Agip"
-
-msgid "Aral"
-msgstr "Aral"
-
-msgid "Avia"
-msgstr "Avia"
-
-msgid "BP"
-msgstr "BP"
-
-msgid "Chevron"
-msgstr "Chevron"
-
-msgid "Citgo"
-msgstr "Citgo"
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr "Esso"
-
-msgid "Exxon"
-msgstr "Exxon"
-
-msgid "Gulf"
-msgstr "Gulf"
-
-msgid "Mobil"
-msgstr "Mobil"
-
-msgid "OMV"
-msgstr "OMV"
-
-msgid "Petro-Canada"
-msgstr "Petro-Canada"
-
-msgid "Pioneer"
-msgstr "Pioneer"
-
-msgid "Q8"
-msgstr "Q8"
-
-msgid "Repsol"
-msgstr "Repsol"
-
-msgid "Shell"
-msgstr "Shell"
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr "Statoil"
-
-msgid "Sunoco"
-msgstr "Sunoco"
-
-msgid "Tamoil"
-msgstr "Tamoil"
-
-msgid "Texaco"
-msgstr "Texaco"
-
-msgid "Total"
-msgstr "Total"
-
-msgid "Independent"
-msgstr "Ανεξάρτητο"
-
 msgid "With shop"
 msgstr ""
 
@@ -17943,51 +18332,12 @@ msgstr "παντοπωλείο"
 msgid "kiosk"
 msgstr ""
 
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr "Diesel"
-
-msgid "Bio Diesel"
-msgstr "Bio Diesel"
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Octane 80"
-msgstr "80 Οκτάνια"
-
-msgid "Octane 91"
-msgstr "91 Οκτάνια"
-
-msgid "Octane 92"
-msgstr "92 Οκτάνια"
-
-msgid "Octane 95"
-msgstr "95 Οκτάνια"
-
-msgid "Octane 98"
-msgstr "98 Οκτάνια"
-
-msgid "Octane 100"
-msgstr "100 Οκτάνια"
-
-msgid "E10 (10% Ethanol mix)"
-msgstr "E10 (10% μείγμα αιθανόλης)"
-
-msgid "E85 (85% Ethanol mix)"
-msgstr "E85 (85% μείγμα αιθανόλης)"
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -18206,9 +18556,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr "τμήμα διαδρομής"
-
 msgid "stop position"
 msgstr ""
 
@@ -18227,6 +18574,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr "τμήμα διαδρομής"
+
 msgid "Route Master"
 msgstr ""
 
@@ -18429,6 +18779,12 @@ msgstr "Ξενοδοχείο"
 msgid "Stars"
 msgstr "Αστέρια"
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18519,6 +18875,9 @@ msgstr "σάντουιτς"
 msgid "sushi"
 msgstr "σούσι"
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18733,6 +19092,9 @@ msgstr "Σάουνα"
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -19220,8 +19582,8 @@ msgstr "Δείχνει τη βαρομετρική πίεση"
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
-msgstr "Ανακύκλωση"
+msgid "Recycling Container"
+msgstr ""
 
 msgid "Batteries"
 msgstr "Μπαταρίες"
@@ -19229,19 +19591,46 @@ msgstr "Μπαταρίες"
 msgid "Cans"
 msgstr "Τενεκεδάκια"
 
+msgid "Cardboard"
+msgstr ""
+
+msgid "Electrical Appliances"
+msgstr ""
+
 msgid "Glass"
 msgstr "Γυαλί"
 
-msgid "Paper"
+msgid "Glass Bottles"
+msgstr ""
+
+msgid "Green Waste"
+msgstr ""
+
+msgid "Paper"
 msgstr "Χαρτί"
 
+msgid "Plastic"
+msgstr ""
+
+msgid "Plastic Bottles"
+msgstr ""
+
+msgid "Plastic Packaging"
+msgstr ""
+
 msgid "Scrap Metal"
 msgstr "Μέταλλα"
 
-msgid "container"
+msgid "Shoes"
+msgstr "Υποδήματα"
+
+msgid "Small Appliances"
+msgstr ""
+
+msgid "Waste"
 msgstr ""
 
-msgid "centre"
+msgid "Recycling Centre"
 msgstr ""
 
 msgid "Waste Basket/Trash Can"
@@ -19445,6 +19834,9 @@ msgstr "Τοξοβολία"
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr "Αναρρήχηση"
 
@@ -19620,12 +20012,18 @@ msgstr "Baseball"
 msgid "Basketball"
 msgstr "Καλαθοσφαίρηση"
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr "βόλεϊ"
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr "Golf"
 
@@ -19641,14 +20039,14 @@ msgstr ""
 msgid "Cricket"
 msgstr "Κρίκετ"
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
-msgstr "Hockey"
+msgid "Ice Hockey"
+msgstr ""
 
 msgid "Pelota"
 msgstr ""
@@ -19671,9 +20069,6 @@ msgstr ""
 msgid "Motocross"
 msgstr "Motocross"
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19692,9 +20087,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr "Τεχνητά"
 
@@ -19767,6 +20159,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr "σούπερ μάρκετ"
+
+msgctxt "building"
+msgid "gasometer"
+msgstr "Μετρητής αερίου"
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19776,7 +20176,7 @@ msgstr ""
 
 msgctxt "building"
 msgid "Levels"
-msgstr ""
+msgstr "Stufen"
 
 msgid "Residential Building"
 msgstr ""
@@ -19787,11 +20187,11 @@ msgstr ""
 
 msgctxt "building"
 msgid "apartments"
-msgstr ""
+msgstr "διαμερίσματα"
 
 msgctxt "building"
 msgid "house"
-msgstr ""
+msgstr "σπίτι"
 
 msgctxt "building"
 msgid "hut"
@@ -19811,7 +20211,7 @@ msgstr ""
 
 msgctxt "building"
 msgid "farm"
-msgstr ""
+msgstr "αγρόκτημα"
 
 msgid "Building part"
 msgstr ""
@@ -19828,11 +20228,11 @@ msgstr "Είσοδος"
 
 msgctxt "entrance"
 msgid "yes"
-msgstr ""
+msgstr "ναι"
 
 msgctxt "entrance"
 msgid "main"
-msgstr ""
+msgstr "κύριο"
 
 msgctxt "entrance"
 msgid "service"
@@ -19840,11 +20240,11 @@ msgstr ""
 
 msgctxt "entrance"
 msgid "exit"
-msgstr ""
+msgstr "έξοδος"
 
 msgctxt "entrance"
 msgid "emergency"
-msgstr ""
+msgstr "επείγον"
 
 msgid "Entrance number"
 msgstr ""
@@ -19859,7 +20259,7 @@ msgid "Tower type"
 msgstr ""
 
 msgid "communication"
-msgstr ""
+msgstr "επικοινωνία"
 
 msgid "observation"
 msgstr ""
@@ -19877,14 +20277,14 @@ msgid "Windmill"
 msgstr "Ανεμόμυλος"
 
 msgid "Gasometer"
-msgstr "Μετρητής Αερίου"
+msgstr "Μετρητής αερίου"
 
 msgid "Storage Tank"
 msgstr ""
 
 msgctxt "content"
 msgid "fuel"
-msgstr ""
+msgstr "καύσιμο"
 
 msgctxt "content"
 msgid "manure"
@@ -19892,11 +20292,11 @@ msgstr ""
 
 msgctxt "content"
 msgid "oil"
-msgstr ""
+msgstr "πετρέλαιο"
 
 msgctxt "content"
 msgid "sewage"
-msgstr ""
+msgstr "απόβλητα"
 
 msgctxt "content"
 msgid "silage"
@@ -19908,11 +20308,11 @@ msgstr ""
 
 msgctxt "content"
 msgid "water"
-msgstr ""
+msgstr "νερό"
 
 msgctxt "content"
 msgid "wine"
-msgstr ""
+msgstr "κρασί"
 
 msgid "Bunker Silo"
 msgstr ""
@@ -19924,16 +20324,16 @@ msgid "water"
 msgstr "νερό"
 
 msgid "gas"
-msgstr "Αέριο"
+msgstr "αέριο"
 
 msgid "heat"
 msgstr "θέρμανση"
 
 msgid "oil"
-msgstr ""
+msgstr "πετρέλαιο"
 
 msgid "sewage"
-msgstr "λύματα"
+msgstr "απόβλητα"
 
 msgctxt "pipeline"
 msgid "underwater"
@@ -19971,7 +20371,7 @@ msgid "bauxite"
 msgstr "βωξίτης"
 
 msgid "coal"
-msgstr "Λιγνίτης"
+msgstr "γαιάνθρακας"
 
 msgid "copper"
 msgstr "χαλκός"
@@ -19980,10 +20380,10 @@ msgid "dimension_stone"
 msgstr ""
 
 msgid "gold"
-msgstr "χρυσό"
+msgstr "χρυσός"
 
 msgid "ilmenite"
-msgstr ""
+msgstr "ιλμενίτης"
 
 msgid "iron_ore"
 msgstr ""
@@ -19995,7 +20395,7 @@ msgid "limestone"
 msgstr "ασβεστόλιθος"
 
 msgid "nickel"
-msgstr "νίκελ"
+msgstr "νικέλιο"
 
 msgid "rutile"
 msgstr "ρουτίλιο"
@@ -20004,7 +20404,7 @@ msgid "salt"
 msgstr "αλάτι"
 
 msgid "silver"
-msgstr "ασήμι"
+msgstr "άργυρος"
 
 msgid "tin"
 msgstr "κασσίτερος"
@@ -20031,10 +20431,10 @@ msgid "Water Tower"
 msgstr "Υδραγωγείο"
 
 msgid "Water Works"
-msgstr ""
+msgstr "Υδατικά έργα"
 
 msgid "Wastewater Treatment Plant"
-msgstr ""
+msgstr "Εγκατάσταση επεξεργασίας λυμάτων"
 
 msgid "Watermill"
 msgstr "Νερόμυλος"
@@ -20055,101 +20455,101 @@ msgid "Mo-Fr 22:00-05:00"
 msgstr "Δε-Πα 22:00-05:00"
 
 msgid "Monitoring Station"
-msgstr ""
+msgstr "Σταθμός παρακολούθησης"
 
 msgid "Monitoring:"
 msgstr ""
 
 msgid "Water level"
-msgstr ""
+msgstr "Επίπεδο νερού"
 
 msgid "Tide Level"
-msgstr ""
+msgstr "Επίπεδο παλίρροιας"
 
 msgid "Groundwater"
-msgstr ""
+msgstr "Υπόγεια ύδατα"
 
 msgid "Traffic"
-msgstr ""
+msgstr "Κυκλοφορία"
 
 msgid "Air Quality"
 msgstr ""
 
 msgid "Noise"
-msgstr ""
+msgstr "Θόρυβος"
 
 msgid "GPS Signals"
-msgstr ""
+msgstr "Σήματα GPS"
 
 msgid "GLONASS Signals"
-msgstr ""
+msgstr "Σήματα GLONASS"
 
 msgid "Galileo Signals"
-msgstr ""
+msgstr "Σήματα Galileo"
 
 msgid "Weather"
-msgstr ""
+msgstr "Καιρός"
 
 msgid "Radiation"
-msgstr ""
+msgstr "Ακτινοβολία"
 
 msgid "Seismic Activity"
-msgstr ""
+msgstr "Σεισμική δραστηριότητα"
 
 msgid "Recording:"
-msgstr ""
+msgstr "Εγγραφή:"
 
 msgid "Automated"
-msgstr ""
+msgstr "Αυτόματα"
 
 msgid "Manually"
-msgstr ""
+msgstr "Χειροκίνητα"
 
 msgid "Remote"
-msgstr ""
+msgstr "Απομακρυσμένο"
 
 msgid "Display:"
 msgstr ""
 
 msgid "Analog"
-msgstr ""
+msgstr "Αναλογικό"
 
 msgid "Digital"
-msgstr ""
+msgstr "Ψηφιακό"
 
 msgid "Survey Point"
 msgstr "Σημείο Επιτήρησης"
 
 msgid "Surveillance Camera"
-msgstr ""
+msgstr "Κάμερα παρακολούθησης"
 
 msgid "indoor"
-msgstr ""
+msgstr "εσωτερικό"
 
 msgid "outdoor"
 msgstr "υπαίθριο"
 
 msgid "Zone"
-msgstr ""
+msgstr "Ζώνη"
 
 msgid "parking"
-msgstr ""
+msgstr "στάθμευση"
 
 msgid "traffic"
-msgstr ""
+msgstr "κυκλοφορία"
 
 msgid "shop"
 msgstr "κατάστημα"
 
 msgid "bank"
-msgstr ""
+msgstr "τράπεζα"
 
 msgid "Camera"
-msgstr ""
+msgstr "Φωτογραφική μηχανή"
 
 msgctxt "camera:type"
 msgid "fixed"
-msgstr ""
+msgstr "διορθώθηκε"
 
 msgctxt "camera:type"
 msgid "panning"
@@ -20164,7 +20564,7 @@ msgstr ""
 
 msgctxt "camera:mount"
 msgid "wall"
-msgstr ""
+msgstr "τοίχος"
 
 msgctxt "camera:mount"
 msgid "pole"
@@ -20181,7 +20581,7 @@ msgid "Inclination in degrees"
 msgstr ""
 
 msgid "Bridges"
-msgstr ""
+msgstr "Γέφυρες"
 
 msgid "aqueduct"
 msgstr "υδαταγωγός"
@@ -20205,7 +20605,7 @@ msgid "viaduct"
 msgstr ""
 
 msgid "Structure"
-msgstr ""
+msgstr "Δομή"
 
 msgid "arch"
 msgstr ""
@@ -20253,7 +20653,7 @@ msgid "transporter"
 msgstr ""
 
 msgid "Bridge Support"
-msgstr ""
+msgstr "Υποστήριξη γέφυρας"
 
 msgid "pier"
 msgstr ""
@@ -20271,16 +20671,16 @@ msgid "Bridge outline"
 msgstr ""
 
 msgid "Power Plant"
-msgstr ""
+msgstr "Εργοστάσιο ηλεκτρισμού"
 
 msgid "Output forms of energy (optional):"
 msgstr ""
 
 msgid "Power Generator"
-msgstr "Γεννήτρια Ρεύματος"
+msgstr "Γεννήτρια ρεύματος"
 
 msgid "Biofuel Power Generator"
-msgstr ""
+msgstr "Γεννήτρια ρεύματος με βιοκαύσιμο"
 
 msgid "Generator Type"
 msgstr ""
@@ -20295,10 +20695,10 @@ msgid "steam_generator"
 msgstr ""
 
 msgid "Biogas Power Generator"
-msgstr ""
+msgstr "Γεννήτρια ρεύματος με βιοαέριο"
 
 msgid "Biomass Power Generator"
-msgstr ""
+msgstr "Γεννήτρια ρεύματος με βιομάζα"
 
 msgid "Method"
 msgstr "Μέθοδος"
@@ -20309,76 +20709,76 @@ msgstr ""
 
 msgctxt "generator method"
 msgid "combustion"
-msgstr ""
+msgstr "καύση"
 
 msgctxt "generator method"
 msgid "gasification"
-msgstr ""
+msgstr "αεριοποίηση"
 
 msgid "bioreactor"
-msgstr ""
+msgstr "βιοαντιδραστήρας;"
 
 msgid "anaerobic_digestion / combustion"
 msgstr ""
 
 msgid "pyrolysis"
-msgstr ""
+msgstr "πυρόλυση"
 
 msgid "combustion"
-msgstr ""
+msgstr "καύση"
 
 msgid "steam_turbine"
 msgstr ""
 
 msgid "Coal Power Generator"
-msgstr ""
+msgstr "Γεννήτρια ρεύματος με γαιάνθρακα"
 
 msgid "Gas Power Generator"
-msgstr ""
+msgstr "Γεννήτρια ρεύματος με αέριο"
 
 msgid "combined_cycle"
 msgstr ""
 
 msgid "Oil Power Generator"
-msgstr ""
+msgstr "Γεννήτρια ρεύματος με πετρέλαιο"
 
 msgid "Diesel Power Generator"
-msgstr ""
+msgstr "Γεννήτρια ρεύματος με ντίζελ"
 
 msgid "Gasoline Power Generator"
-msgstr ""
+msgstr "Γεννήτρια ρεύματος με βενζίνη"
 
 msgid "Nuclear Reactor"
-msgstr ""
+msgstr "Πυρηνικός αντιδραστήρας"
 
 msgctxt "generator method"
 msgid "fission"
-msgstr ""
+msgstr "διάσπαση"
 
 msgctxt "generator method"
 msgid "fusion"
-msgstr ""
+msgstr "σύντηξη"
 
 msgid "Boiling Water Reactor 1 (BWR-1)"
-msgstr ""
+msgstr "Ζέοντος ύδατος 1 (BWR-1)"
 
 msgid "fission"
-msgstr ""
+msgstr "σχάση"
 
 msgid "Boiling Water Reactor 2 (BWR-2)"
-msgstr ""
+msgstr "Ζέοντος ύδατος 2 (BWR-2)"
 
 msgid "Boiling Water Reactor 3 (BWR-3)"
-msgstr ""
+msgstr "Ζέοντος ύδατος 3 (BWR-3)"
 
 msgid "Boiling Water Reactor 4 (BWR-4)"
-msgstr ""
+msgstr "Ζέοντος ύδατος 4 (BWR-4)"
 
 msgid "Boiling Water Reactor 5 (BWR-5)"
-msgstr ""
+msgstr "Ζέοντος ύδατος 5 (BWR-5)"
 
 msgid "Boiling Water Reactor 6 (BWR-6)"
-msgstr ""
+msgstr "Ζέοντος ύδατος 6 (BWR-6)"
 
 msgid "CANada Deuterium Uranium reactor (CANDU)"
 msgstr ""
@@ -20387,19 +20787,19 @@ msgid "cold-fusion"
 msgstr ""
 
 msgid "fusion"
-msgstr ""
+msgstr "σύντηξη"
 
 msgid "China Pressurized Reactor (CPR-1000)"
-msgstr ""
+msgstr "Αντιδραστήρας πεπιεσμένου ύδατος Κίνας (CPR-1000)"
 
 msgid "European Pressurized Reactor (EPR)"
-msgstr ""
+msgstr "Αντιδραστήρας πεπιεσμένου ύδατος Ευρώπης (EPR)"
 
 msgid "Inertial Confinement Fusion (ICF)"
-msgstr ""
+msgstr "Αδρανειακή συγκράτηση σύντηξης (ICF)"
 
 msgid "Pressurized water reactor (PWR)"
-msgstr ""
+msgstr "Αντιδραστήρας πεπιεσμένου ύδατος (PWR)"
 
 msgid "Reactor Bolshoy Moshchnosti Kanalniy 1000 (RBMK-1000)"
 msgstr ""
@@ -20417,37 +20817,37 @@ msgid "Vodo-Vodyanoi Energetichesky Reactor (VVER)"
 msgstr ""
 
 msgid "Solar Power Generator"
-msgstr ""
+msgstr "Γεννήτρια ρεύματος με ηλιακή ενέργεια"
 
 msgctxt "generator method"
 msgid "photovoltaic"
-msgstr ""
+msgstr "φωτοβολταϊκά"
 
 msgctxt "generator method"
 msgid "thermal"
-msgstr ""
+msgstr "θερμικό"
 
 msgid "solar_photovoltaic_panel"
 msgstr ""
 
 msgid "photovoltaic"
-msgstr ""
+msgstr "φωτοβολταϊκά"
 
 msgid "solar_thermal_collector"
 msgstr ""
 
 msgid "thermal"
-msgstr ""
+msgstr "θερμικό"
 
 msgid "Waste Power Generator"
-msgstr ""
+msgstr "Γεννήτρια ρεύματος με απόβλητα"
 
 msgctxt "generator method"
 msgid "pyrolysis"
-msgstr ""
+msgstr "πυρόλυση"
 
 msgid "gasification"
-msgstr ""
+msgstr "αεριοποίηση"
 
 msgid "Water Turbine"
 msgstr ""
@@ -20468,7 +20868,7 @@ msgid "francis_turbine"
 msgstr ""
 
 msgid "all methods"
-msgstr ""
+msgstr "όλες οι μέθοδοι"
 
 msgid "hydrodynamic_screw"
 msgstr ""
@@ -20512,16 +20912,16 @@ msgid "Osmotic Power Generator"
 msgstr ""
 
 msgid "Geothermal Power Generator"
-msgstr ""
+msgstr "Γεννήτρια ρεύματος με γεωθερμική ενέργεια"
 
 msgid "heat_pump"
 msgstr ""
 
 msgid "Wind Turbine"
-msgstr ""
+msgstr "Ανεμογεννήτρια"
 
 msgid "Power Substation"
-msgstr ""
+msgstr "Υποσταθμός παραγωγής ηλεκτρικής ενέργειας"
 
 msgid "Type of substation"
 msgstr ""
@@ -20532,7 +20932,7 @@ msgstr ""
 
 msgctxt "power"
 msgid "distribution"
-msgstr ""
+msgstr "διανομή"
 
 msgctxt "power"
 msgid "minor_distribution"
@@ -20556,25 +20956,25 @@ msgstr ""
 
 msgctxt "power"
 msgid "industrial"
-msgstr ""
+msgstr "βιομηχανικός"
 
 msgid "Power rating (kVA/MVA)"
 msgstr ""
 
 msgid "2700 kVA"
-msgstr ""
+msgstr "2700 kVA"
 
 msgid "12500 kVA"
-msgstr ""
+msgstr "12500 kVA"
 
 msgid "15 MVA"
-msgstr ""
+msgstr "15 MVA"
 
 msgid "50 MVA"
-msgstr ""
+msgstr "50 MVA"
 
 msgid "100 MVA"
-msgstr ""
+msgstr "100 MVA"
 
 msgid "Gas insulated"
 msgstr ""
@@ -20599,7 +20999,7 @@ msgstr ""
 
 msgctxt "power"
 msgid "yes"
-msgstr ""
+msgstr "ναι"
 
 msgid "Phases"
 msgstr ""
@@ -21087,9 +21487,6 @@ msgstr ""
 msgid "Boutique"
 msgstr "Μπουτίκ"
 
-msgid "Shoes"
-msgstr "Υποδήματα"
-
 msgid "Outdoor"
 msgstr "Ύπαιθρος"
 
@@ -22102,12 +22499,12 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
-msgstr "Αριθ. Φαξ"
-
 msgid "Email Address"
 msgstr "Διεύθυνση Email"
 
+msgid "Fax Number"
+msgstr "Αριθ. Φαξ"
+
 msgid "Image"
 msgstr "Εικόνα"
 
@@ -22532,6 +22929,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22556,6 +22956,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22616,6 +23028,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22706,9 +23121,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -23078,6 +23502,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -23132,9 +23559,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23882,47 +24306,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23931,10 +24364,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
+msgstr ""
+
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24542,6 +24987,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr "Άδειο επίπεδο"
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr "Επίπεδο WMS ({0}), {1} πλακίδιο(α) φορτώθηκαν"
 
@@ -25814,219 +26262,525 @@ msgstr "βορειοανατολικά"
 msgid "north"
 msgstr "βόρεια"
 
-msgid "northwest"
-msgstr "βορειοδυτικά"
+msgid "northwest"
+msgstr "βορειοδυτικά"
+
+msgid "west"
+msgstr "δυτικά"
+
+msgid "southwest"
+msgstr "νοτιοδυτικά"
+
+msgid "south"
+msgstr "νότια"
+
+msgid "southeast"
+msgstr "νοτιοανατολικά"
+
+msgid "coastline"
+msgstr "ακτογραμμή"
+
+msgid "land"
+msgstr "γη"
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr "Μέγιστος αριθμός κόμβων στο αρχικό ίχνος"
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr "Μέγιστη τιμή γκρίζου που να θεωρείται νερό (0-255)"
+
+msgid "Line simplification accuracy (degrees)"
+msgstr "Ακρίβεια απλοποίησης γραμμής (μοίρες)"
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr "Ανάλυση πλακιδίων Landsat (pixel ανά μοίρα)"
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr "Μέγεθος πλακιδίων Landsat (pixels)"
+
+msgid "Shift all traces to east (degrees)"
+msgstr "Μετατόπιση όλων των ιχνών ανατολικά (μοίρες)"
+
+msgid "Shift all traces to north (degrees)"
+msgstr "Μετατόπιση όλων των ιχνών βόρεια (μοίρες)"
+
+msgid "Direction to search for land"
+msgstr "Κατεύθυνση για αναζήτηση ξηράς"
+
+msgid "Tag ways as"
+msgstr "Σήμανση διαδρομών ως"
+
+msgid "WMS Layer"
+msgstr "Επίπεδο WMS"
+
+msgid "Maximum cache size (MB)"
+msgstr "Μέγιστο μέγεθος cache (MB)"
+
+msgid "Maximum cache age (days)"
+msgstr "Μέγιστη ηλικία cache (ημέρες)"
+
+msgid "Source text"
+msgstr "Πηγαίο κείμενο"
+
+msgid "Lakewalker Plugin Preferences"
+msgstr "Προτιμήσεις πρόσθετου Lakewalker"
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+"Ένα πρόσθετο για ιχνηλάτηση όγκων νερού από υπόβαθρο εικόνων Landsat."
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+"Ακρίβεια απλοποίησης γραμμών Douglas-Peucker , μετρημένη σε "
+"μοίρες.<br>Χαμηλότερες τιμές δίνουν περισσότερους κόμβους, και ποιό ακριβείς "
+"γραμμές. Default 0.0003."
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+"Ανάλυση πλακιδίων Landsat, μετρημένη σε pixels ανά μοίρα. Προκαθορισμένη "
+"τιμή 4000."
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+"Μέγεθος ενός πλακιδίου Landsat, μετρημένο σε pixels. Προκαθορισμένη τιμή "
+"2000."
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+"Μετατόπιση όλων των σημείων Ανατολικά (μοίρες). Προκαθορισμένη τιμή 0."
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr "Μετατόπιση όλων των σημείων Βόρεια (μοίρες). Προκαθορισμένη τιμή 0."
+
+msgid "Direction to search for land. Default east."
+msgstr "Κατεύθυνση για αναζήτηση ξηράς. Προκαθορισμένη τιμή ανατολικά."
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+"Σήμανση διαδρομών ως νερό, ακτογραμμή, έδαφος ή τίποτα. Προεπιλογή είναι το "
+"νερό."
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+"Μέγιστο μέγεθος κάθε καταλόγου cache σε bytes. Προκαθορισμένη τιμή 300MB"
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr "Λήψη πλακιδίου εικόνας..."
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr "Η σύνδεση απέτυχε"
+
+msgid "Not connected"
+msgstr "Χωρίς σύνδεση"
+
+msgid "Connecting"
+msgstr "Γίνεται σύνδεση"
+
+msgid "Connected"
+msgstr "Σε σύνδεση"
+
+msgid "no name"
+msgstr "χωρίς όνομα"
+
+msgid "Live GPS"
+msgstr ""
+
+msgid "Show GPS data."
+msgstr "Εμφάνιση δεδομένων GPS."
+
+msgid "Status"
+msgstr "Κατάσταση"
+
+msgid "Way Info"
+msgstr ""
+
+msgid "Speed"
+msgstr "Ταχύτητα"
+
+msgid "Course"
+msgstr "Πορεία"
+
+msgid "LiveGPS layer"
+msgstr "Επίπεδο LiveGPS"
+
+msgid "Capture GPS Track"
+msgstr "Καταγραφή ίχνους GPS"
+
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgstr ""
+"Σύνδεση στον διακομιστή gpsd και εμφάνιση της τρέχουσας θέσης στο επίπεδο "
+"LiveGPS."
+
+msgid "Center Once"
+msgstr "Κεντράρισμα μία φορά"
+
+msgid "Center the LiveGPS layer to current position."
+msgstr "Κεντράρισμα του επιπέδου LiveGPS στην τρέχουσα θέση."
+
+msgid "Auto-Center"
+msgstr "Αυτόματο Κεντράρισμα"
+
+msgid "Continuously center the LiveGPS layer to current position."
+msgstr "Κεντράρισμα του επιπέδου LiveGPS στην τρέχουσα θέση συνεχώς."
+
+msgid "Open MapDust"
+msgstr ""
+
+msgid "MapDust bug reports"
+msgstr ""
+
+msgid "Activates the MapDust bug reporter plugin"
+msgstr ""
+
+msgid "Missing input data"
+msgstr ""
+
+msgid "Mapillary Images"
+msgstr ""
+
+msgid "Mapillary layer"
+msgstr ""
+
+msgid "Total images:"
+msgstr ""
+
+msgid "images"
+msgstr ""
+
+msgid "Mapillary"
+msgstr ""
+
+msgid "Create Mapillary layer"
+msgstr ""
+
+msgid "Start Mapillary layer"
+msgstr ""
+
+msgid "Download Mapillary images in current view"
+msgstr ""
+
+msgid "Export pictures"
+msgstr ""
+
+msgid "Export Mapillary pictures"
+msgstr ""
+
+msgid "Export images"
+msgstr ""
+
+msgid "Import pictures"
+msgstr ""
+
+msgid "Import local pictures"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer"
+msgstr ""
+
+msgid "Select pictures"
+msgstr ""
+
+msgid "Import pictures into sequence"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer in a sequence"
+msgstr ""
+
+msgid "Join mode"
+msgstr ""
+
+msgid "Join/unjoin pictures"
+msgstr ""
+
+msgid "Join Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures"
+msgstr ""
+
+msgid "Upload Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures."
+msgstr ""
+
+msgid "Walk mode"
+msgstr ""
+
+msgid "Start walk mode"
+msgstr ""
+
+msgid "Zoom to selected image"
+msgstr ""
+
+msgid "Zoom to the currently selected Mapillary image"
+msgstr ""
+
+msgid "Uploaded {0} images"
+msgstr ""
+
+msgid "Approve upload on the website"
+msgstr ""
+
+msgid "View in website"
+msgstr ""
+
+msgid "Copy key"
+msgstr ""
+
+msgid "Copy key tag"
+msgstr ""
+
+msgid "Edit on website"
+msgstr ""
+
+msgid "Export all images"
+msgstr ""
+
+msgid "Export selected sequence"
+msgstr ""
+
+msgid "Export selected images"
+msgstr ""
+
+msgid "Rewrite imported images"
+msgstr ""
 
-msgid "west"
-msgstr "δυτικά"
+msgid "Select a folder"
+msgstr ""
 
-msgid "southwest"
-msgstr "νοτιοδυτικά"
+msgid "Explore"
+msgstr ""
 
-msgid "south"
-msgstr "νότια"
+msgid "Select a directory"
+msgstr ""
 
-msgid "southeast"
-msgstr "νοτιοανατολικά"
+msgid "Speed limit"
+msgstr ""
 
-msgid "coastline"
-msgstr "ακτογραμμή"
+msgid "Give way"
+msgstr ""
 
-msgid "land"
-msgstr "γη"
+msgid "No entry"
+msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
-msgstr "Μέγιστος αριθμός κόμβων στο αρχικό ίχνος"
+msgid "Mandatory direction (any)"
+msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
-msgstr "Μέγιστη τιμή γκρίζου που να θεωρείται νερό (0-255)"
+msgid "No turn"
+msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
-msgstr "Ακρίβεια απλοποίησης γραμμής (μοίρες)"
+msgid "Uneven road"
+msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
-msgstr "Ανάλυση πλακιδίων Landsat (pixel ανά μοίρα)"
+msgid "No parking"
+msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
-msgstr "Μέγεθος πλακιδίων Landsat (pixels)"
+msgid "No overtaking"
+msgstr ""
 
-msgid "Shift all traces to east (degrees)"
-msgstr "Μετατόπιση όλων των ιχνών ανατολικά (μοίρες)"
+msgid "Pedestrian crossing"
+msgstr ""
 
-msgid "Shift all traces to north (degrees)"
-msgstr "Μετατόπιση όλων των ιχνών βόρεια (μοίρες)"
+msgid "Years"
+msgstr ""
 
-msgid "Direction to search for land"
-msgstr "Κατεύθυνση για αναζήτηση ξηράς"
+msgid "Months"
+msgstr ""
 
-msgid "Tag ways as"
-msgstr "Σήμανση διαδρομών ως"
+msgid "Days"
+msgstr ""
 
-msgid "WMS Layer"
-msgstr "Επίπεδο WMS"
+msgid "Mapillary filter"
+msgstr ""
 
-msgid "Maximum cache size (MB)"
-msgstr "Μέγιστο μέγεθος cache (MB)"
+msgid "Open Mapillary filter dialog"
+msgstr ""
 
-msgid "Maximum cache age (days)"
-msgstr "Μέγιστη ηλικία cache (ημέρες)"
+msgid "Downloaded images"
+msgstr ""
 
-msgid "Source text"
-msgstr "Πηγαίο κείμενο"
+msgid "Only images with signs"
+msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
-msgstr "Προτιμήσεις πρόσθετου Lakewalker"
+msgid "Choose signs"
+msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Mapillary history"
 msgstr ""
-"Ένα πρόσθετο για ιχνηλάτηση όγκων νερού από υπόβαθρο εικόνων Landsat."
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary main dialog"
 msgstr ""
-"Ακρίβεια απλοποίησης γραμμών Douglas-Peucker , μετρημένη σε "
-"μοίρες.<br>Χαμηλότερες τιμές δίνουν περισσότερους κόμβους, και ποιό ακριβείς "
-"γραμμές. Default 0.0003."
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Next picture"
 msgstr ""
-"Ανάλυση πλακιδίων Landsat, μετρημένη σε pixels ανά μοίρα. Προκαθορισμένη "
-"τιμή 4000."
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Shows the next picture in the sequence"
 msgstr ""
-"Μέγεθος ενός πλακιδίου Landsat, μετρημένο σε pixels. Προκαθορισμένη τιμή "
-"2000."
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Previous picture"
 msgstr ""
-"Μετατόπιση όλων των σημείων Ανατολικά (μοίρες). Προκαθορισμένη τιμή 0."
 
-msgid "Offset all points in North direction (degrees). Default 0."
-msgstr "Μετατόπιση όλων των σημείων Βόρεια (μοίρες). Προκαθορισμένη τιμή 0."
+msgid "Shows the previous picture in the sequence"
+msgstr ""
 
-msgid "Direction to search for land. Default east."
-msgstr "Κατεύθυνση για αναζήτηση ξηράς. Προκαθορισμένη τιμή ανατολικά."
+msgid "Jump to red"
+msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
-"Σήμανση διαδρομών ως νερό, ακτογραμμή, έδαφος ή τίποτα. Προεπιλογή είναι το "
-"νερό."
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
-"Μέγιστο μέγεθος κάθε καταλόγου cache σε bytes. Προκαθορισμένη τιμή 300MB"
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Play"
 msgstr ""
 
-msgid "Downloading image tile..."
-msgstr "Λήψη πλακιδίου εικόνας..."
+msgid "Continues with the paused walk."
+msgstr ""
 
-msgid "Could not acquire image"
+msgid "Pause"
 msgstr ""
 
-msgid "Connection Failed"
-msgstr "Η σύνδεση απέτυχε"
+msgid "Pauses the walk."
+msgstr ""
 
-msgid "Not connected"
-msgstr "Χωρίς σύνδεση"
+msgid "Reverse buttons position when displaying images."
+msgstr ""
 
-msgid "Connecting"
-msgstr "Γίνεται σύνδεση"
+msgid "Display hour when the picture was taken"
+msgstr ""
 
-msgid "Connected"
-msgstr "Σε σύνδεση"
+msgid "Use 24 hour format"
+msgstr ""
 
-msgid "no name"
-msgstr "χωρίς όνομα"
+msgid "Move to picture''s location with next/previous buttons"
+msgstr ""
 
-msgid "Live GPS"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Show GPS data."
-msgstr "Εμφάνιση δεδομένων GPS."
+msgid "Upload selected sequence"
+msgstr ""
 
-msgid "Status"
-msgstr "Κατάσταση"
+msgid "Delete after upload"
+msgstr ""
 
-msgid "Way Info"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Speed"
-msgstr "Ταχύτητα"
+msgid "Follow selected image"
+msgstr ""
 
-msgid "Course"
-msgstr "Πορεία"
+msgid "Go forward"
+msgstr ""
 
-msgid "LiveGPS layer"
-msgstr "Επίπεδο LiveGPS"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Capture GPS Track"
-msgstr "Καταγραφή ίχνους GPS"
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "2 images joined"
 msgstr ""
-"Σύνδεση στον διακομιστή gpsd και εμφάνιση της τρέχουσας θέσης στο επίπεδο "
-"LiveGPS."
 
-msgid "Center Once"
-msgstr "Κεντράρισμα μία φορά"
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Center the LiveGPS layer to current position."
-msgstr "Κεντράρισμα του επιπέδου LiveGPS στην τρέχουσα θέση."
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Auto-Center"
-msgstr "Αυτόματο Κεντράρισμα"
+msgid "2 images unjoined"
+msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
-msgstr "Κεντράρισμα του επιπέδου LiveGPS στην τρέχουσα θέση συνεχώς."
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
+msgstr ""
 
-msgid "Open MapDust"
+msgid "Downloading"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid "Select mode"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "No images found"
 msgstr ""
 
-msgid "Export"
+msgid "Finished upload"
+msgstr ""
+
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -26047,6 +26801,9 @@ msgstr "Μήκος επιλογής"
 msgid "Selection Area"
 msgstr "Επιφάνεια επιλογής"
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr "Γωνία"
 
@@ -26105,47 +26862,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -26378,6 +27094,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr "Εργαλεία"
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27599,6 +28318,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27771,6 +28511,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27780,6 +28523,9 @@ msgstr "Ιστορικό αντικειμένων"
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27960,6 +28706,9 @@ msgstr "Νέα τιμή για {0}"
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -28138,6 +28887,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -28147,6 +28929,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -28383,9 +29168,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29918,9 +30700,6 @@ msgstr "Αναζήτηση σημείου διαδρομής"
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr "Επιλογή Διαδρομής"
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/en_AU.po b/i18n/po/en_AU.po
index b2e7e8c..8ebb9c5 100644
--- a/i18n/po/en_AU.po
+++ b/i18n/po/en_AU.po
@@ -7,122 +7,122 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
-"PO-Revision-Date: 2013-03-30 14:03+0000\n"
-"Last-Translator: Dirk Stöcker <launchpad at dstoecker.de>\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
+"PO-Revision-Date: 2015-06-08 12:52+0000\n"
+"Last-Translator: Mark Pulley <mrpulley at lizzy.com.au>\n"
 "Language-Team: English (Australia) <en_AU at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 05:03+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 05:07+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
-msgstr ""
+msgstr "{0}: option ''{1}'' is ambiguous"
 
 msgid "{0}: option ''--{1}'' does not allow an argument"
-msgstr ""
+msgstr "{0}: option ''--{1}'' does not allow an argument"
 
 msgid "{0}: option ''{1}{2}'' does not allow an argument"
-msgstr ""
+msgstr "{0}: option ''{1}{2}'' does not allow an argument"
 
 msgid "{0}: option ''{1}'' requires an argument"
-msgstr ""
+msgstr "{0}: option ''{1}'' requires an argument"
 
 msgid "{0}: unrecognized option ''--{1}''"
-msgstr ""
+msgstr "{0}: unrecognised option ''--{1}''"
 
 msgid "{0}: unrecognized option ''{1}{2}''"
-msgstr ""
+msgstr "{0}: unrecognised option ''{1}{2}''"
 
 msgid "{0}: illegal option -- {1}"
-msgstr ""
+msgstr "{0}: illegal option -- {1}"
 
 msgid "{0}: invalid option -- {1}"
-msgstr ""
+msgstr "{0}: invalid option -- {1}"
 
 msgid "{0}: option requires an argument -- {1}"
-msgstr ""
+msgstr "{0}: option requires an argument -- {1}"
 
 msgid "Invalid value {0} for parameter ''has_arg''"
-msgstr ""
+msgstr "Invalid value {0} for parameter ''has_arg''"
 
 msgid "Background Terms of Use"
-msgstr ""
+msgstr "Background Terms of Use"
 
 msgid "Opening link not supported on current platform (''{0}'')"
-msgstr ""
+msgstr "Opening link not supported on current platform (''{0}'')"
 
 msgid "ERROR: {0}"
-msgstr ""
+msgstr "ERROR: {0}"
 
 msgid "WARNING: {0}"
-msgstr ""
+msgstr "WARNING: {0}"
 
 msgid "INFO: {0}"
-msgstr ""
+msgstr "INFO: {0}"
 
 msgid "DEBUG: {0}"
-msgstr ""
+msgstr "DEBUG: {0}"
 
 msgid "Cause: "
-msgstr ""
+msgstr "Cause: "
 
 msgid "Executing platform startup hook"
-msgstr ""
+msgstr "Executing platform startup hook"
 
 msgid "Building main menu"
-msgstr ""
+msgstr "Building main menu"
 
 msgid "Help"
 msgstr "Help"
 
 msgid "Initializing OSM API"
-msgstr ""
+msgstr "Initialising OSM API"
 
 msgid "Initializing validator"
-msgstr ""
+msgstr "Initialising validator"
 
 msgid "Initializing presets"
-msgstr ""
+msgstr "Initialising presets"
 
 msgid "Initializing map styles"
-msgstr ""
+msgstr "Initialising map styles"
 
 msgid "Loading imagery preferences"
-msgstr ""
+msgstr "Loading imagery preferences"
 
 msgid "Updating user interface"
-msgstr ""
-
-msgid "{0} completed in {1}"
-msgstr ""
+msgstr "Updating user interface"
 
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "Ignoring malformed file URL: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "Ignoring malformed URL: \"{0}\""
 
 msgid "Warning"
 msgstr "Warning"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "Ignoring malformed file URL: \"{0}\""
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr "Parameter \"downloadgps\" does not accept file names or file URLs"
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "Ignoring malformed URL: \"{0}\""
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
 "compatible) version of JOSM.</li></ul>More Info:"
 msgstr ""
+"<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
+"can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
+"compatible) version of JOSM.</li></ul>More Info:"
 
 msgid "Exit JOSM"
-msgstr ""
+msgstr "Exit JOSM"
 
 msgid "Continue, try anyway"
-msgstr ""
+msgstr "Continue, try anyway"
 
 msgid "Error"
 msgstr "Error"
@@ -179,15 +179,19 @@ msgid_plural ""
 "You are about to launch {0} browser windows.<br>This may both clutter your "
 "screen with browser windows<br>and take some time to finish."
 msgstr[0] ""
+"You are about to launch {0} browser window.<br>This may both clutter your "
+"screen with browser windows<br>and take some time to finish."
 msgstr[1] ""
+"You are about to launch {0} browser windows.<br>This may both clutter your "
+"screen with browser windows<br>and take some time to finish."
 
 msgid "Continue"
 msgstr "Continue"
 
 msgid "Click to continue and to open {0} browser"
 msgid_plural "Click to continue and to open {0} browsers"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Click to continue and to open {0} browser"
+msgstr[1] "Click to continue and to open {0} browsers"
 
 msgid "Cancel"
 msgstr "Cancel"
@@ -226,34 +230,34 @@ msgstr ""
 "Set the selected elements on the map to the selected items in the list above."
 
 msgid "Add imagery layer {0}"
-msgstr ""
+msgstr "Add imagery layer {0}"
 
 msgid "Select image format for WMS layer"
-msgstr ""
+msgstr "Select image format for WMS layer"
 
 msgid "Select WMS layers"
-msgstr ""
+msgstr "Select WMS layers"
 
 msgid "Add layers"
-msgstr ""
+msgstr "Add layers"
 
 msgid "Invalid service URL."
-msgstr ""
+msgstr "Invalid service URL."
 
 msgid "WMS Error"
-msgstr ""
+msgstr "WMS Error"
 
 msgid "Could not retrieve WMS layer list."
-msgstr ""
+msgstr "Could not retrieve WMS layer list."
 
 msgid "Could not parse WMS layer list."
-msgstr ""
+msgstr "Could not parse WMS layer list."
 
 msgid "Add Node..."
 msgstr "Add Node..."
 
 msgid "Add a node by entering latitude / longitude or easting / northing."
-msgstr ""
+msgstr "Add a node by entering latitude / longitude or easting / northing."
 
 msgid "Edit: {0}"
 msgstr "Edit: {0}"
@@ -268,17 +272,18 @@ msgid "Tool: {0}"
 msgstr "Tool: {0}"
 
 msgid "Not enough nodes in selected ways."
-msgstr ""
+msgstr "Not enough nodes in selected ways."
 
 msgid "Please select at least four nodes."
 msgstr "Please select at least four nodes."
 
 msgid "Cannot determine center of selected nodes."
-msgstr ""
+msgstr "Cannot determine centre of selected nodes."
 
 msgid ""
 "One or more nodes involved in this action is outside of the downloaded area."
 msgstr ""
+"One or more nodes involved in this action is outside of the downloaded area."
 
 msgid "Align Nodes in Line"
 msgstr "Align Nodes in Line"
@@ -290,13 +295,13 @@ msgid "Please select at least three nodes."
 msgstr "Please select at least three nodes."
 
 msgid "Can not align a polygon. Abort."
-msgstr ""
+msgstr "Can not align a polygon. Abort."
 
 msgid "Intersection of three or more ways can not be solved. Abort."
-msgstr ""
+msgstr "Intersection of three or more ways can not be solved. Abort."
 
 msgid "Two parallels ways found. Abort."
-msgstr ""
+msgstr "Two parallel ways found. Abort."
 
 msgid "data"
 msgstr "data"
@@ -314,7 +319,7 @@ msgid "download"
 msgstr "download"
 
 msgid "problem"
-msgstr ""
+msgstr "problem"
 
 msgid "previous"
 msgstr "previous"
@@ -387,11 +392,13 @@ msgid ""
 "Could not combine ways<br>(They could not be merged into a single string of "
 "nodes)"
 msgstr ""
+"Could not combine ways<br>(They could not be merged into a single string of "
+"nodes)"
 
 msgid "Combine {0} way"
 msgid_plural "Combine {0} ways"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Combine {0} way"
+msgstr[1] "Combine {0} ways"
 
 msgid "Please select at least two ways to combine."
 msgstr "Please select at least two ways to combine."
@@ -406,10 +413,10 @@ msgid "Please select something to copy."
 msgstr "Please select something to copy."
 
 msgid "Copy Coordinates"
-msgstr ""
+msgstr "Copy Coordinates"
 
 msgid "Copy coordinates of selected nodes to clipboard."
-msgstr ""
+msgstr "Copy coordinates of selected nodes to clipboard."
 
 msgid "Create Circle"
 msgstr "Create Circle"
@@ -428,7 +435,7 @@ msgid "Those nodes are not in a circle. Aborting."
 msgstr "Those nodes are not in a circle. Aborting."
 
 msgid "Update multipolygon"
-msgstr ""
+msgstr "Update multipolygon"
 
 msgid "Create multipolygon"
 msgstr "Create multipolygon"
@@ -446,22 +453,28 @@ msgid "Delete selected objects."
 msgstr "Delete selected objects."
 
 msgid "Toggle dialogs panel"
-msgstr ""
+msgstr "Toggle dialogues panel"
 
 msgid "Toggle dialogs panel, maximize mapview"
-msgstr ""
+msgstr "Toggle dialogues panel, maximise mapview"
+
+msgid "Distribute Nodes"
+msgstr "Distribute Nodes"
 
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr "Distribute the selected nodes to equal distances along a line."
 
 msgid "Ignoring {0} nodes with null coordinates"
-msgstr ""
+msgstr "Ignoring {0} nodes with null coordinates"
 
 msgid ""
 "Please select :\n"
 "* One no self-crossing way with at most two of its nodes;\n"
 "* Three nodes."
 msgstr ""
+"Please select :\n"
+"* One no self-crossing way with at most two of its nodes;\n"
+"* Three nodes."
 
 msgid "Download from OSM..."
 msgstr "Download from OSM..."
@@ -480,7 +493,7 @@ msgid "Download data"
 msgstr "Download data"
 
 msgid "Download notes in current view"
-msgstr ""
+msgstr "Download notes in current view"
 
 msgid "Download object..."
 msgstr "Download object..."
@@ -492,7 +505,7 @@ msgid "Download parent ways/relations..."
 msgstr "Download parent ways/relations..."
 
 msgid "Download objects referring to one of the selected objects"
-msgstr ""
+msgstr "Download objects referring to one of the selected objects"
 
 msgid "Duplicate"
 msgstr "Duplicate"
@@ -507,22 +520,22 @@ msgid "Exit the application."
 msgstr "Exit the application."
 
 msgid "Expert Mode"
-msgstr ""
+msgstr "Expert Mode"
 
 msgid "Enable/disable expert mode"
-msgstr ""
+msgstr "Enable/disable expert mode"
 
 msgid "Follow line"
-msgstr ""
+msgstr "Follow line"
 
 msgid "Continues drawing a line that shares nodes with another line."
-msgstr ""
+msgstr "Continues drawing a line that shares nodes with another line."
 
 msgid "Follow"
-msgstr ""
+msgstr "Follow"
 
 msgid "Fullscreen view"
-msgstr ""
+msgstr "Fullscreen view"
 
 msgid "Toggle fullscreen view"
 msgstr "Toggle fullscreen view"
@@ -549,21 +562,23 @@ msgid "Show history"
 msgstr "Show history"
 
 msgid "History (web)"
-msgstr ""
+msgstr "History (web)"
 
 msgid ""
 "Display history information about OSM ways, nodes, or relations in web "
 "browser."
 msgstr ""
+"Display history information about OSM ways, nodes, or relations in web "
+"browser."
 
 msgid "New offset"
-msgstr ""
+msgstr "New offset"
 
 msgid "Adjust the position of this imagery layer"
-msgstr ""
+msgstr "Adjust the position of this imagery layer"
 
 msgid "Adjust imagery offset"
-msgstr ""
+msgstr "Adjust imagery offset"
 
 msgid "OK"
 msgstr "OK"
@@ -574,33 +589,40 @@ msgid ""
 "You can also enter east and north offset in the {0} coordinates.\n"
 "If you want to save the offset as bookmark, enter the bookmark name below"
 msgstr ""
+"Use arrow keys or drag the imagery layer with mouse to adjust the imagery "
+"offset.\n"
+"You can also enter east and north offset in the {0} coordinates.\n"
+"If you want to save the offset as bookmark, enter the bookmark name below"
 
 msgid "Offset: "
-msgstr ""
+msgstr "Offset: "
 
 msgid "Bookmark name: "
-msgstr ""
+msgstr "Bookmark name: "
 
 msgid "Overwrite"
 msgstr "Overwrite"
 
 msgid "Offset bookmark already exists. Overwrite?"
-msgstr ""
+msgstr "Offset bookmark already exists. Overwrite?"
 
 msgid "Advanced info"
-msgstr ""
+msgstr "Advanced info"
 
 msgid ""
 "Display advanced object information about OSM nodes, ways, or relations."
 msgstr ""
+"Display advanced object information about OSM nodes, ways, or relations."
 
 msgid "Advanced info (web)"
-msgstr ""
+msgstr "Advanced info (web)"
 
 msgid ""
 "Display object information about OSM nodes, ways, or relations in web "
 "browser."
 msgstr ""
+"Display object information about OSM nodes, ways, or relations in web "
+"browser."
 
 msgid "Join overlapping Areas"
 msgstr "Join overlapping Areas"
@@ -614,9 +636,10 @@ msgstr "Please select at least one closed way that should be joined."
 msgid ""
 "One of the selected ways is not closed and therefore cannot be joined."
 msgstr ""
+"One of the selected ways is not closed and therefore cannot be joined."
 
 msgid "Join area confirmation"
-msgstr ""
+msgstr "Join area confirmation"
 
 msgid "The selected way has nodes outside of the downloaded data region."
 msgid_plural ""
@@ -635,28 +658,28 @@ msgid "Please abort if you are not sure"
 msgstr "Please abort if you are not sure"
 
 msgid "The selected area is incomplete. Continue?"
-msgstr ""
+msgstr "The selected area is incomplete. Continue?"
 
 msgid "No intersection found. Nothing was changed."
 msgstr "No intersection found. Nothing was changed."
 
 msgid "Move tags from ways to relations"
-msgstr ""
+msgstr "Move tags from ways to relations"
 
 msgid "Reverting changes"
-msgstr ""
+msgstr "Reverting changes"
 
 msgid "Removed duplicate nodes"
-msgstr ""
+msgstr "Removed duplicate nodes"
 
 msgid "Added node on all intersections"
 msgstr "Added node on all intersections"
 
 msgid "Assemble new polygons"
-msgstr ""
+msgstr "Assemble new polygons"
 
 msgid "Delete relations"
-msgstr ""
+msgstr "Delete relations"
 
 msgid "Delete Ways that are not part of an inner multipolygon"
 msgstr "Delete Ways that are not part of an inner multipolygon"
@@ -668,28 +691,35 @@ msgid ""
 "Some of the ways were part of relations that have been modified.<br>Please "
 "verify no errors have been introduced."
 msgstr ""
+"Some of the ways were part of relations that have been modified.<br>Please "
+"verify no errors have been introduced."
 
 msgid "Fix tag conflicts"
 msgstr "Fix tag conflicts"
 
 msgid "Split ways into fragments"
-msgstr ""
+msgstr "Split ways into fragments"
 
 msgid "Sorry. Cannot handle multipolygon relations with multiple outer ways."
 msgstr ""
+"Sorry. Cannot handle multipolygon relations with multiple outer ways."
 
 msgid ""
 "Sorry. Cannot handle way that is outer in multiple multipolygon relations."
 msgstr ""
+"Sorry. Cannot handle way that is outer in multiple multipolygon relations."
 
 msgid ""
 "Sorry. Cannot handle way that is both inner and outer in multipolygon "
 "relations."
 msgstr ""
+"Sorry. Cannot handle way that is both inner and outer in multipolygon "
+"relations."
 
 msgid ""
 "Sorry. Cannot handle way that is inner in multiple multipolygon relations."
 msgstr ""
+"Sorry. Cannot handle way that is inner in multiple multipolygon relations."
 
 msgid "Removed Element from Relations"
 msgstr "Removed Element from Relations"
@@ -704,13 +734,13 @@ msgid "Join Node to Way"
 msgstr "Join Node to Way"
 
 msgid "Include a node into the nearest way segments"
-msgstr ""
+msgstr "Include a node into the nearest way segments"
 
 msgid "Move Node onto Way"
-msgstr ""
+msgstr "Move Node onto Way"
 
 msgid "Move the node onto the nearest way segments and include it"
-msgstr ""
+msgstr "Move the node onto the nearest way segments and include it"
 
 msgid "No Shortcut"
 msgstr "No Shortcut"
@@ -752,10 +782,10 @@ msgid "Unable to parse Lon/Lat"
 msgstr "Unable to parse Lon/Lat"
 
 msgid "Lasso Mode"
-msgstr ""
+msgstr "Lasso Mode"
 
 msgid "Lasso selection mode: select objects within a hand-drawn region"
-msgstr ""
+msgstr "Lasso selection mode: select objects within a hand-drawn region"
 
 msgid "Rectified Image..."
 msgstr "Rectified Image..."
@@ -764,7 +794,7 @@ msgid "Download Rectified Images From Various Services"
 msgstr "Download Rectified Images From Various Services"
 
 msgid "Imagery: {0}"
-msgstr ""
+msgstr "Imagery: {0}"
 
 msgid "Custom WMS Link"
 msgstr "Custom WMS Link"
@@ -785,6 +815,8 @@ msgid ""
 "Couldn''t match the entered link or id to the selected service. Please try "
 "again."
 msgstr ""
+"Couldn''t match the entered link or id to the selected service. Please try "
+"again."
 
 msgid "No valid WMS URL or id"
 msgstr "No valid WMS URL or id"
@@ -796,7 +828,7 @@ msgid "Merge the current layer into another layer"
 msgstr "Merge the current layer into another layer"
 
 msgid "Merging layers with different upload policies"
-msgstr ""
+msgstr "Merging layers with different upload policies"
 
 msgid ""
 "You are about to merge data between layers ''{0}'' and ''{1}''.<br /><br "
@@ -807,9 +839,16 @@ msgid ""
 "one by one, by using ''<i>Merge selection</i>''.<br /><br />Are you sure you "
 "want to continue?"
 msgstr ""
+"You are about to merge data between layers ''{0}'' and ''{1}''.<br /><br "
+"/>These layers have different upload policies and should not been merged as "
+"it.<br />Merging them will result to enforce the stricter policy (upload "
+"discouraged) to ''{1}''.<br /><br /><b>This is not the recommended way of "
+"merging such data</b>.<br />You should instead check and merge each object, "
+"one by one, by using ''<i>Merge selection</i>''.<br /><br />Are you sure you "
+"want to continue?"
 
 msgid "Ignore this hint and merge anyway"
-msgstr ""
+msgstr "Ignore this hint and merge anyway"
 
 msgid "Merge Nodes"
 msgstr "Merge Nodes"
@@ -821,6 +860,8 @@ msgid ""
 "Please select at least two nodes to merge or one node that is close to "
 "another node."
 msgstr ""
+"Please select at least two nodes to merge or one node that is close to "
+"another node."
 
 msgid "Abort Merging"
 msgstr "Abort Merging"
@@ -831,20 +872,21 @@ msgstr "Click to abort merging nodes"
 msgid ""
 "Cannot merge nodes: Would have to delete way {0} which is still used by {1}"
 msgstr ""
+"Cannot merge nodes: Would have to delete way {0} which is still used by {1}"
 
 msgid "Merge {0} node"
 msgid_plural "Merge {0} nodes"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Merge {0} node"
+msgstr[1] "Merge {0} nodes"
 
 msgid "Merge selection"
 msgstr "Merge selection"
 
 msgid "Merge the currently selected objects into another layer"
-msgstr ""
+msgstr "Merge the currently selected objects into another layer"
 
 msgid "Merging too many objects with different upload policies"
-msgstr ""
+msgstr "Merging too many objects with different upload policies"
 
 msgid ""
 "You are about to merge more than 1 object between layers ''{0}'' and "
@@ -852,6 +894,10 @@ msgid ""
 "data</b>.<br />You should instead check and merge each object, <b>one by "
 "one</b>.<br /><br />Are you sure you want to continue?"
 msgstr ""
+"You are about to merge more than 1 object between layers ''{0}'' and "
+"''{1}''.<br /><br /><b>This is not the recommended way of merging such "
+"data</b>.<br />You should instead check and merge each object, <b>one by "
+"one</b>.<br /><br />Are you sure you want to continue?"
 
 msgid "Mirror"
 msgstr "Mirror"
@@ -887,19 +933,19 @@ msgid "Cannot move objects outside of the world."
 msgstr "Cannot move objects outside of the world."
 
 msgid "Move Node..."
-msgstr ""
+msgstr "Move Node..."
 
 msgid "Edit latitude and longitude of a node."
-msgstr ""
+msgstr "Edit latitude and longitude of a node."
 
 msgid "New Layer"
 msgstr "New Layer"
 
 msgid "Create a new map layer."
-msgstr ""
+msgstr "Create a new map layer."
 
 msgid "URL Files"
-msgstr ""
+msgstr "URL Files"
 
 msgid "Open..."
 msgstr "Open..."
@@ -922,13 +968,17 @@ msgid_plural ""
 "Cannot open {0} files because files do not exist or no suitable file "
 "importer is available."
 msgstr[0] ""
+"Cannot open {0} file because file does not exist or no suitable file "
+"importer is available."
 msgstr[1] ""
+"Cannot open {0} files because files do not exist or no suitable file "
+"importer is available."
 
 msgid "no importer"
-msgstr ""
+msgstr "no importer"
 
 msgid "does not exist"
-msgstr ""
+msgstr "does not exist"
 
 msgid "<html>Cannot open directory ''{0}''.<br>Please select a file.</html>"
 msgstr "<html>Cannot open directory ''{0}''.<br>Please select a file.</html>"
@@ -978,15 +1028,17 @@ msgid "Download Data"
 msgstr "Download Data"
 
 msgid "Which tasks to perform?"
-msgstr ""
+msgstr "Which tasks to perform?"
 
 msgid "Ok"
-msgstr ""
+msgstr "OK"
 
 msgid ""
 "Cannot open URL ''{0}''<br>The following download tasks accept the URL "
 "patterns shown:<br>{1}"
 msgstr ""
+"Cannot open URL ''{0}''<br>The following download tasks accept the URL "
+"patterns shown:<br>{1}"
 
 msgid ""
 "<h3>When one or more ways are selected, the shape is adjusted such, that all "
@@ -1020,6 +1072,8 @@ msgid ""
 "Orthogonalize Shape / Undo<br>Please select nodes that were moved by the "
 "previous Orthogonalize Shape action!"
 msgstr ""
+"Orthogonalise Shape / Undo<br>Please select nodes that were moved by the "
+"previous Orthogonalise Shape action!"
 
 msgid ""
 "<html>You are using the EPSG:4326 projection which might lead<br>to "
@@ -1049,6 +1103,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr "Please select ways with angles of approximately 90 or 180 degrees."
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr "Paste"
 
@@ -1066,6 +1144,9 @@ msgid ""
 "objects are removed.  Do you want to paste the data without the incomplete "
 "objects?"
 msgstr ""
+"The copied data contains incomplete objects.  When pasting the incomplete "
+"objects are removed.  Do you want to paste the data without the incomplete "
+"objects?"
 
 msgid "Paste Tags"
 msgstr "Paste Tags"
@@ -1080,8 +1161,8 @@ msgstr[1] "Pasting {0} tags"
 
 msgid "to {0} object"
 msgid_plural "to {0} objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "to {0} object"
+msgstr[1] "to {0} objects"
 
 msgid "Preferences..."
 msgstr "Preferences..."
@@ -1093,38 +1174,45 @@ msgid "Preferences"
 msgstr "Preferences"
 
 msgid "Purge..."
-msgstr ""
+msgstr "Purge..."
 
 msgid "Forget objects but do not delete them on server when uploading."
-msgstr ""
+msgstr "Forget objects but do not delete them on server when uploading."
 
 msgid "Purge"
-msgstr ""
+msgstr "Purge"
 
 msgid "Confirm Purging"
-msgstr ""
+msgstr "Confirm Purging"
 
 msgid ""
 "This operation makes JOSM forget the selected objects.<br> They will be "
 "removed from the layer, but <i>not</i> deleted<br> on the server when "
 "uploading."
 msgstr ""
+"This operation makes JOSM forget the selected objects.<br> They will be "
+"removed from the layer, but <i>not</i> deleted<br> on the server when "
+"uploading."
 
 msgid ""
 "The following dependent objects will be purged<br> in addition to the "
 "selected objects:"
 msgstr ""
+"The following dependent objects will be purged<br> in addition to the "
+"selected objects:"
 
 msgid "Add to selection"
-msgstr ""
+msgstr "Add to selection"
 
 msgid ""
 "Some of the objects are modified.<br> Proceed, if these changes should be "
 "discarded.</html>"
 msgstr ""
+"Some of the objects are modified.<br> Proceed, if these changes should be "
+"discarded.</html>"
 
 msgid "Clear Undo/Redo buffer"
-msgstr ""
+msgstr "Clear Undo/Redo buffer"
 
 msgid "Redo"
 msgstr "Redo"
@@ -1133,10 +1221,10 @@ msgid "Redo the last undone action."
 msgstr "Redo the last undone action."
 
 msgid "Redo ..."
-msgstr ""
+msgstr "Redo ..."
 
 msgid "Redo {0}"
-msgstr ""
+msgstr "Redo {0}"
 
 msgid "Rename layer"
 msgstr "Rename layer"
@@ -1148,22 +1236,22 @@ msgid "Could not rename file ''{0}''"
 msgstr "Could not rename file ''{0}''"
 
 msgid "Report bug"
-msgstr ""
+msgstr "Report bug"
 
 msgid "Report a ticket to JOSM bugtracker"
-msgstr ""
+msgstr "Report a ticket to JOSM bugtracker"
 
 msgid "Restart"
 msgstr "Restart"
 
 msgid "Restart the application."
-msgstr ""
+msgstr "Restart the application."
 
 msgid "Click to restart later."
-msgstr ""
+msgstr "Click to restart later."
 
 msgid "Reverse way"
-msgstr ""
+msgstr "Reverse way"
 
 msgid "Reverse Ways"
 msgstr "Reverse Ways"
@@ -1199,19 +1287,19 @@ msgid "Save the current data to a new file."
 msgstr "Save the current data to a new file."
 
 msgid "Search Notes..."
-msgstr ""
+msgstr "Search Notes..."
 
 msgid "Download notes from the note search API"
-msgstr ""
+msgstr "Download notes from the note search API"
 
 msgid "Search the OSM API for notes containing words:"
-msgstr ""
+msgstr "Search the OSM API for notes containing words:"
 
 msgid "Search for notes"
-msgstr ""
+msgstr "Search for notes"
 
 msgid "You must enter a search term"
-msgstr ""
+msgstr "You must enter a search term"
 
 msgid "Select All"
 msgstr "Select All"
@@ -1224,61 +1312,63 @@ msgstr ""
 "objects too."
 
 msgid "Non-branching way sequences"
-msgstr ""
+msgstr "Non-branching way sequences"
 
 msgid "Select non-branching sequences of ways"
-msgstr ""
+msgstr "Select non-branching sequences of ways"
 
 msgid "Load Session"
-msgstr ""
+msgstr "Load Session"
 
 msgid "Load a session from file."
-msgstr ""
+msgstr "Load a session from file."
 
 msgid "Open session"
-msgstr ""
+msgstr "Open session"
 
 msgid "Loading session ''{0}''"
-msgstr ""
+msgstr "Loading session ''{0}''"
 
 msgid "Data Error"
-msgstr ""
+msgstr "Data Error"
 
 msgid "IO Error"
-msgstr ""
+msgstr "IO Error"
 
 msgid "<html>Could not load session file ''{0}''.<br>Error is:<br>{1}</html>"
 msgstr ""
+"<html>Could not load session file ''{0}''.<br>Error is:<br>{1}</html>"
 
 msgid "Save Session As..."
-msgstr ""
+msgstr "Save Session As..."
 
 msgid "Save the current session to a new file."
-msgstr ""
+msgstr "Save the current session to a new file."
 
 msgid "Session file (archive) (*.joz)"
-msgstr ""
+msgstr "Session file (archive) (*.joz)"
 
 msgid "Session file (*.jos)"
-msgstr ""
+msgstr "Session file (*.jos)"
 
 msgid "Save session"
-msgstr ""
+msgstr "Save session"
 
 msgid "<html>Could not save session file ''{0}''.<br>Error is:<br>{1}</html>"
 msgstr ""
+"<html>Could not save session file ''{0}''.<br>Error is:<br>{1}</html>"
 
 msgid "Save Session"
-msgstr ""
+msgstr "Save Session"
 
 msgid "Save As"
-msgstr ""
+msgstr "Save As"
 
 msgid "Layers"
 msgstr "Layers"
 
 msgid "No exporter for this layer"
-msgstr ""
+msgstr "No exporter for this layer"
 
 msgid "Show Status Report"
 msgstr "Show Status Report"
@@ -1345,6 +1435,7 @@ msgstr "Split a way at the selected node."
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
+"The current selection cannot be used for splitting - no node is selected."
 
 msgid "The selected nodes do not share the same way."
 msgstr "The selected nodes do not share the same way."
@@ -1381,16 +1472,20 @@ msgid ""
 "A role based relation membership was copied to all new ways.<br>You should "
 "verify this and correct it when necessary."
 msgstr ""
+"A role based relation membership was copied to all new ways.<br>You should "
+"verify this and correct it when necessary."
 
 msgid ""
 "A relation membership was copied to all new ways.<br>You should verify this "
 "and correct it when necessary."
 msgstr ""
+"A relation membership was copied to all new ways.<br>You should verify this "
+"and correct it when necessary."
 
 msgid "Split way {0} into {1} part"
 msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Split way {0} into {1} part"
+msgstr[1] "Split way {0} into {1} parts"
 
 msgid "Toggle GPX Lines"
 msgstr "Toggle GPX Lines"
@@ -1402,7 +1497,7 @@ msgid "Toggles the global setting ''{0}''."
 msgstr "Toggles the global setting ''{0}''."
 
 msgid "Encourage/discourage upload"
-msgstr ""
+msgstr "Encourage/discourage upload"
 
 msgid "UnGlue Ways"
 msgstr "UnGlue Ways"
@@ -1462,8 +1557,8 @@ msgstr "Unglued Node"
 
 msgid "Dupe into {0} node"
 msgid_plural "Dupe into {0} nodes"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Dupe into {0} node"
+msgstr[1] "Dupe into {0} nodes"
 
 msgid "Dupe {0} node into {1} nodes"
 msgid_plural "Dupe {0} nodes into {1} nodes"
@@ -1471,42 +1566,49 @@ msgstr[0] "Dupe {0} node into {1} nodes"
 msgstr[1] "Dupe {0} nodes into {1} nodes"
 
 msgid "Unglue confirmation"
-msgstr ""
+msgstr "Unglue confirmation"
 
 msgid ""
 "You are about to unglue nodes outside of the area you have "
 "downloaded.<br>This can cause problems because other objects (that you do "
 "not see) might use them.<br>Do you really want to unglue?"
 msgstr ""
+"You are about to unglue nodes outside of the area you have "
+"downloaded.<br>This can cause problems because other objects (that you do "
+"not see) might use them.<br>Do you really want to unglue?"
 
 msgid ""
 "You are about to unglue incomplete objects.<br>This will cause problems "
 "because you don''t see the real object.<br>Do you really want to unglue?"
 msgstr ""
+"You are about to unglue incomplete objects.<br>This will cause problems "
+"because you don''t see the real object.<br>Do you really want to unglue?"
 
 msgid "Disconnect Node from Way"
-msgstr ""
+msgstr "Disconnect Node from Way"
 
 msgid "Disconnect nodes from a way they currently belong to"
-msgstr ""
+msgstr "Disconnect nodes from a way they currently belong to"
 
 msgid "Select at least one node to be disconnected."
-msgstr ""
+msgstr "Select at least one node to be disconnected."
 
 msgid "Selected node cannot be disconnected from anything."
 msgid_plural "Selected nodes cannot be disconnected from anything."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Selected node cannot be disconnected from anything."
+msgstr[1] "Selected nodes cannot be disconnected from anything."
 
 msgid ""
 "The affected way would disappear after disconnecting the selected node."
 msgid_plural ""
 "The affected way would disappear after disconnecting the selected nodes."
 msgstr[0] ""
+"The affected way would disappear after disconnecting the selected node."
 msgstr[1] ""
+"The affected way would disappear after disconnecting the selected nodes."
 
 msgid "Some irrelevant nodes have been removed from the selection"
-msgstr ""
+msgstr "Some irrelevant nodes have been removed from the selection"
 
 msgid "Undo"
 msgstr "Undo"
@@ -1515,10 +1617,10 @@ msgid "Undo the last action."
 msgstr "Undo the last action."
 
 msgid "Undo ..."
-msgstr ""
+msgstr "Undo ..."
 
 msgid "Undo {0}"
-msgstr ""
+msgstr "Undo {0}"
 
 msgid "Unselect All"
 msgstr "Unselect All"
@@ -1574,7 +1676,7 @@ msgstr ""
 "''{0}''.<br>You have to resolve them first.</html>"
 
 msgid "Upload discouraged"
-msgstr ""
+msgstr "Upload discouraged"
 
 msgid ""
 "You are about to upload data from the layer ''{0}''.<br /><br />Sending data "
@@ -1582,9 +1684,13 @@ msgid ""
 "require you subsequently have to revert your changes, or force other "
 "contributors to.<br /><br />Are you sure you want to continue?"
 msgstr ""
-
+"You are about to upload data from the layer ''{0}''.<br /><br />Sending data "
+"from this layer is <b>strongly discouraged</b>. If you continue,<br />it may "
+"require you subsequently have to revert your changes, or force other "
+"contributors to.<br /><br />Are you sure you want to continue?"
+
 msgid "Ignore this hint and upload anyway"
-msgstr ""
+msgstr "Ignore this hint and upload anyway"
 
 msgid "No changes to upload."
 msgstr "No changes to upload."
@@ -1593,13 +1699,13 @@ msgid "Nothing to upload. Get some data first."
 msgstr "Nothing to upload. Get some data first."
 
 msgid "Upload note changes to server"
-msgstr ""
+msgstr "Upload note changes to server"
 
 msgid "Upload notes"
-msgstr ""
+msgstr "Upload notes"
 
 msgid "Uploading notes to server"
-msgstr ""
+msgstr "Uploading notes to server"
 
 msgid "Upload selection"
 msgstr "Upload selection"
@@ -1632,13 +1738,13 @@ msgid "Updating ignored errors ..."
 msgstr "Updating ignored errors ..."
 
 msgid "Viewport Following"
-msgstr ""
+msgstr "Viewport Following"
 
 msgid "Enable/disable automatic moving of the map view to last placed node"
-msgstr ""
+msgstr "Enable/disable automatic moving of the map view to last placed node"
 
 msgid "Toggle Viewport Following"
-msgstr ""
+msgstr "Toggle Viewport Following"
 
 msgid "Wireframe View"
 msgstr "Wireframe View"
@@ -1653,13 +1759,13 @@ msgid "Zoom In"
 msgstr "Zoom In"
 
 msgid "Zoom In (Keypad)"
-msgstr ""
+msgstr "Zoom In (Keypad)"
 
 msgid "Zoom Out"
 msgstr "Zoom Out"
 
 msgid "Zoom Out (Keypad)"
-msgstr ""
+msgstr "Zoom Out (Keypad)"
 
 msgid "Zoom to"
 msgstr "Zoom to"
@@ -1674,13 +1780,13 @@ msgid "Zooming disabled because there is no selected member"
 msgstr "Zooming disabled because there is no selected member"
 
 msgid "Zoom to the first selected node"
-msgstr ""
+msgstr "Zoom to the first selected node"
 
 msgid "Zooming disabled because layer of this way is not active"
-msgstr ""
+msgstr "Zooming disabled because layer of this way is not active"
 
 msgid "Zooming disabled because there is no selected node"
-msgstr ""
+msgstr "Zooming disabled because there is no selected node"
 
 msgctxt "audio"
 msgid "Back"
@@ -1741,7 +1847,7 @@ msgid "Slower Forward"
 msgstr "Slower Forwards"
 
 msgid "Download GPS"
-msgstr ""
+msgstr "Download GPS"
 
 msgid "Downloading GPS data"
 msgstr "Downloading GPS data"
@@ -1753,50 +1859,52 @@ msgid "Markers from {0}"
 msgstr "Markers from {0}"
 
 msgid "Download OSM Notes"
-msgstr ""
+msgstr "Download OSM Notes"
 
 msgid "Downloading Notes"
-msgstr ""
+msgstr "Downloading Notes"
 
 msgid "Notes"
 msgstr "Notes"
 
 msgid "{0} note has been downloaded."
 msgid_plural "{0} notes have been downloaded."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} note has been downloaded."
+msgstr[1] "{0} notes have been downloaded."
 
 msgid ""
 "Since the download limit was {0}, there might be more notes to download."
 msgstr ""
+"Since the download limit was {0}, there might be more notes to download."
 
 msgid ""
 "Request a smaller area to make sure that all notes are being downloaded."
 msgstr ""
+"Request a smaller area to make sure that all notes are being downloaded."
 
 msgid "More notes to download"
-msgstr ""
+msgstr "More notes to download"
 
 msgid "Download OSM Notes within Bounds"
-msgstr ""
+msgstr "Download OSM Notes within Bounds"
 
 msgid "Download OSM Note by ID"
-msgstr ""
+msgstr "Download OSM Note by ID"
 
 msgid "Download Compressed OSM Change"
-msgstr ""
+msgstr "Download Compressed OSM Change"
 
 msgid "Download OSM Change"
-msgstr ""
+msgstr "Download OSM Change"
 
 msgid "Download Compressed OSM"
-msgstr ""
+msgstr "Download Compressed OSM"
 
 msgid "Download OSM object by ID"
-msgstr ""
+msgstr "Download OSM object by ID"
 
 msgid "Download OSM"
-msgstr ""
+msgstr "Download OSM"
 
 msgid "Downloading data"
 msgstr "Downloading data"
@@ -1804,6 +1912,7 @@ msgstr "Downloading data"
 msgid ""
 "Ignoring exception because download has been canceled. Exception was: {0}"
 msgstr ""
+"Ignoring exception because download has been cancelled. Exception was: {0}"
 
 msgid "No data found in this area."
 msgstr "No data found in this area."
@@ -1812,13 +1921,13 @@ msgid "OSM Server URL:"
 msgstr "OSM Server URL:"
 
 msgid "Command"
-msgstr ""
+msgstr "Command"
 
 msgid "Request details: {0}"
-msgstr ""
+msgstr "Request details: {0}"
 
 msgid "Download OSM URL"
-msgstr ""
+msgstr "Download OSM URL"
 
 msgid "There was {0} conflict during import."
 msgid_plural "There were {0} conflicts during import."
@@ -1840,7 +1949,7 @@ msgid "({0}/{1}) Loading parents of relation {2}"
 msgstr "({0}/{1}) Loading parents of relation {2}"
 
 msgid "Download session"
-msgstr ""
+msgstr "Download session"
 
 msgid "Download {0} of {1} ({2} left)"
 msgstr "Download {0} of {1} ({2} left)"
@@ -1873,17 +1982,25 @@ msgid_plural ""
 "server.<br>If you later try to delete or update them the server is likely to "
 "report a conflict."
 msgstr[0] ""
+"There is {0} object in your local dataset which might be deleted on the "
+"server.<br>If you later try to delete or update this the server is likely to "
+"report a conflict."
 msgstr[1] ""
+"There are {0} objects in your local dataset which might be deleted on the "
+"server.<br>If you later try to delete or update them the server is likely to "
+"report a conflict."
 
 msgid ""
 "Click <strong>{0}</strong> to check the state of this object on the server."
 msgid_plural ""
 "Click <strong>{0}</strong> to check the state of these objects on the server."
 msgstr[0] ""
+"Click <strong>{0}</strong> to check the state of this object on the server."
 msgstr[1] ""
+"Click <strong>{0}</strong> to check the state of these objects on the server."
 
 msgid "Click <strong>{0}</strong> to ignore.</html>"
-msgstr ""
+msgstr "Click <strong>{0}</strong> to ignore.</html>"
 
 msgid "Deleted or moved objects"
 msgstr "Deleted or moved objects"
@@ -1895,28 +2012,28 @@ msgid "Errors during download"
 msgstr "Errors during download"
 
 msgid "Error during download"
-msgstr ""
+msgstr "Error during download"
 
 msgid "Add a new Note"
-msgstr ""
+msgstr "Add a new Note"
 
 msgid "Add note mode"
-msgstr ""
+msgstr "Add note mode"
 
 msgid "Click the location where you wish to create a new note"
-msgstr ""
+msgstr "Click the location where you wish to create a new note"
 
 msgid "Create new note"
-msgstr ""
+msgstr "Create new note"
 
 msgid "Create note"
-msgstr ""
+msgstr "Create note"
 
 msgid "Enter a detailed comment to create a note"
-msgstr ""
+msgstr "Enter a detailed comment to create a note"
 
 msgid "You must enter a comment to create a new note"
-msgstr ""
+msgstr "You must enter a comment to create a new note"
 
 msgid "Delete Mode"
 msgstr "Delete Mode"
@@ -1941,13 +2058,13 @@ msgid "Draw nodes"
 msgstr "Draw nodes"
 
 msgid "Mode: Draw Angle snapping"
-msgstr ""
+msgstr "Mode: Draw Angle snapping"
 
 msgid "Backspace in Add mode"
-msgstr ""
+msgstr "Backspace in Add mode"
 
 msgid "helper line"
-msgstr ""
+msgstr "helper line"
 
 msgid "Cannot add a node outside of the world."
 msgstr "Cannot add a node outside of the world."
@@ -1985,52 +2102,52 @@ msgid "Continue way from last node."
 msgstr "Continue way from last node."
 
 msgid "Angle snapping active."
-msgstr ""
+msgstr "Angle snapping active."
 
 msgid "Finish drawing."
 msgstr "Finish drawing."
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
-msgstr ""
+msgstr "Toggle snapping by {0}"
 
 msgid "Show helper geometry"
-msgstr ""
+msgstr "Show helper geometry"
 
 msgid "Snap to node projections"
-msgstr ""
+msgstr "Snap to node projections"
 
 msgid "Disable"
 msgstr "Disable"
 
 msgid "0,90,..."
-msgstr ""
+msgstr "0,90,..."
 
 msgid "0,45,90,..."
-msgstr ""
+msgstr "0,45,90,..."
 
 msgid "0,30,45,60,90,..."
-msgstr ""
+msgstr "0,30,45,60,90,..."
+
+msgid "FIX"
+msgstr "FIX"
+
+msgid "draw angle snap"
+msgstr "draw angle snap"
+
+msgid "draw angle snap highlight"
+msgstr "draw angle snap highlight"
 
 msgid "Angle snapping"
-msgstr ""
+msgstr "Angle snapping"
 
 msgid "Switch angle snapping mode while drawing"
-msgstr ""
+msgstr "Switch angle snapping mode while drawing"
 
 msgid "Dual alignment"
-msgstr ""
+msgstr "Dual alignment"
 
 msgid "Switch dual alignment mode while extruding"
-msgstr ""
+msgstr "Switch dual alignment mode while extruding"
 
 msgid "Extrude"
 msgstr "Extrude"
@@ -2039,19 +2156,22 @@ msgid "Create areas"
 msgstr "Create areas"
 
 msgid "Extrude Dual alignment"
-msgstr ""
+msgstr "Extrude Dual alignment"
 
 msgid ""
 "Drag a way segment to make a rectangle. Ctrl-drag to move a segment along "
 "its normal, Alt-drag to create a new rectangle, double click to add a new "
 "node."
 msgstr ""
+"Drag a way segment to make a rectangle. Ctrl-drag to move a segment along "
+"its normal, Alt-drag to create a new rectangle, double click to add a new "
+"node."
 
 msgid "Dual alignment active."
-msgstr ""
+msgstr "Dual alignment active."
 
 msgid "Segment collapsed due to its direction reversing."
-msgstr ""
+msgstr "Segment collapsed due to its direction reversing."
 
 msgid "Move a segment along its normal, then release the mouse button."
 msgstr "Move a segment along its normal, then release the mouse button."
@@ -2059,87 +2179,95 @@ msgstr "Move a segment along its normal, then release the mouse button."
 msgid ""
 "Move the node along one of the segments, then release the mouse button."
 msgstr ""
+"Move the node along one of the segments, then release the mouse button."
 
 msgid "Draw a rectangle of the desired size, then release the mouse button."
 msgstr "Draw a rectangle of the desired size, then release the mouse button."
 
 msgid "Extrude: main line"
-msgstr ""
+msgstr "Extrude: main line"
 
 msgid "Extrude: helper line"
-msgstr ""
+msgstr "Extrude: helper line"
 
 msgid "Extrude Way"
 msgstr "Extrude Way"
 
 msgid "Improve Way Accuracy"
-msgstr ""
+msgstr "Improve Way Accuracy"
 
 msgid "Improve Way Accuracy mode"
-msgstr ""
+msgstr "Improve Way Accuracy mode"
 
 msgid "improve way accuracy helper line"
-msgstr ""
+msgstr "improve way accuracy helper line"
 
 msgid "Click on the way to start improving its shape."
-msgstr ""
+msgstr "Click on the way to start improving its shape."
 
 msgid "Select a way that you want to make more accurate."
-msgstr ""
+msgstr "Select a way that you want to make more accurate."
 
 msgid ""
 "Click to add a new node. Release Ctrl to move existing nodes or hold Alt to "
 "delete."
 msgstr ""
+"Click to add a new node. Release Ctrl to move existing nodes or hold Alt to "
+"delete."
 
 msgid ""
 "Click to delete the highlighted node. Release Alt to move existing nodes or "
 "hold Ctrl to add new nodes."
 msgstr ""
+"Click to delete the highlighted node. Release Alt to move existing nodes or "
+"hold Ctrl to add new nodes."
 
 msgid ""
 "Click to move the highlighted node. Hold Ctrl to add new nodes, or Alt to "
 "delete."
 msgstr ""
+"Click to move the highlighted node. Hold Ctrl to add new nodes, or Alt to "
+"delete."
 
 msgid "Cannot place a node outside of the world."
-msgstr ""
+msgstr "Cannot place a node outside of the world."
 
 msgid "Add a new node to way"
 msgid_plural "Add a new node to {0} ways"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Add a new node to way"
+msgstr[1] "Add a new node to {0} ways"
 
 msgid "Cannot delete node that is referenced by multiple objects"
-msgstr ""
+msgstr "Cannot delete node that is referenced by multiple objects"
 
 msgid "Cannot delete node that has tags"
-msgstr ""
+msgstr "Cannot delete node that has tags"
 
 msgid "Parallel"
-msgstr ""
+msgstr "Parallel"
 
 msgid "Make parallel copies of ways"
-msgstr ""
+msgstr "Make parallel copies of ways"
 
 msgid "make parallel helper line"
-msgstr ""
+msgstr "make parallel helper line"
 
 msgid ""
 "Select ways as in Select mode. Drag selected ways or a single way to create "
 "a parallel copy (Alt toggles tag preservation)"
 msgstr ""
+"Select ways as in Select mode. Drag selected ways or a single way to create "
+"a parallel copy (Alt toggles tag preservation)"
 
 msgid "Hold Ctrl to toggle snapping"
-msgstr ""
+msgstr "Hold Ctrl to toggle snapping"
 
 msgid ""
 "ParallelWayAction\n"
 "The ways selected must form a simple branchless path"
 msgstr ""
-
-msgid "Make parallel way error"
-msgstr ""
+"ParallelWayAction\n"
+"The ways selected must form a simple branchless path"
 
 msgid "Drag play head"
 msgstr "Drag play head"
@@ -2152,7 +2280,7 @@ msgstr ""
 "SHIFT+release to synchronise audio at that point."
 
 msgid "Select, move, scale and rotate objects"
-msgstr ""
+msgstr "Select, move, scale and rotate objects"
 
 msgid "Move elements"
 msgstr "Move elements"
@@ -2172,27 +2300,35 @@ msgid_plural ""
 "an error.\n"
 "Really move them?"
 msgstr[0] ""
+"You moved more than {0} element. Moving a large number of elements is often "
+"an error.\n"
+"Really move them?"
 msgstr[1] ""
+"You moved more than {0} elements. Moving a large number of elements is often "
+"an error.\n"
+"Really move them?"
 
 msgid "Release the mouse button to select the objects in the rectangle."
 msgstr "Release the mouse button to select the objects in the rectangle."
 
 msgid "Ctrl to merge with nearest node."
-msgstr ""
+msgstr "Ctrl to merge with nearest node."
 
 msgid "Release the mouse button to stop moving."
-msgstr ""
+msgstr "Release the mouse button to stop moving."
 
 msgid "Release the mouse button to stop rotating."
 msgstr "Release the mouse button to stop rotating."
 
 msgid "Release the mouse button to stop scaling."
-msgstr ""
+msgstr "Release the mouse button to stop scaling."
 
 msgid ""
 "Move objects by dragging; Shift to add to selection (Ctrl to toggle); Shift-"
 "Ctrl to rotate selected; Alt-Ctrl to scale selected; or change selection"
 msgstr ""
+"Move objects by dragging; Shift to add to selection (Ctrl to toggle); Shift-"
+"Ctrl to rotate selected; Alt-Ctrl to scale selected; or change selection"
 
 msgid "Add and move a virtual new node to way"
 msgid_plural "Add and move a virtual new node to {0} ways"
@@ -2214,14 +2350,15 @@ msgstr ""
 
 msgid "Add all objects selected in the current dataset after the last member"
 msgstr ""
+"Add all objects selected in the current dataset after the last member"
 
 msgid "Add selection to relation"
-msgstr ""
+msgstr "Add selection to relation"
 
 msgid "Add selection to {0} relation"
 msgid_plural "Add selection to {0} relations"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Add selection to {0} relation"
+msgstr[1] "Add selection to {0} relations"
 
 msgid "Delete the selected relation"
 msgstr "Delete the selected relation"
@@ -2233,10 +2370,10 @@ msgid "Download members"
 msgstr "Download members"
 
 msgid "Download incomplete members of selected relations"
-msgstr ""
+msgstr "Download incomplete members of selected relations"
 
 msgid "Download incomplete members"
-msgstr ""
+msgstr "Download incomplete members"
 
 msgid "Create a copy of this relation and open it in another editor window"
 msgstr "Create a copy of this relation and open it in another editor window"
@@ -2245,7 +2382,7 @@ msgid "Edit"
 msgstr "Edit"
 
 msgid "Call relation editor for selected relation"
-msgstr ""
+msgstr "Call relation editor for selected relation"
 
 msgid ""
 "You are about to open <b>{0}</b> different relation editor "
@@ -2254,10 +2391,14 @@ msgid_plural ""
 "You are about to open <b>{0}</b> different relation editors "
 "simultaneously.<br/>Do you want to continue?"
 msgstr[0] ""
+"You are about to open <b>{0}</b> different relation editor "
+"simultaneously.<br/>Do you want to continue?"
 msgstr[1] ""
+"You are about to open <b>{0}</b> different relation editors "
+"simultaneously.<br/>Do you want to continue?"
 
 msgid "Confirmation"
-msgstr ""
+msgstr "Confirmation"
 
 msgid "Select in relation list"
 msgstr "Select in relation list"
@@ -2266,25 +2407,25 @@ msgid "Select relation in relation list."
 msgstr "Select relation in relation list."
 
 msgid "Add the members of all selected relations to current selection"
-msgstr ""
+msgstr "Add the members of all selected relations to current selection"
 
 msgid "Select the members of all selected relations"
 msgstr "Select the members of all selected relations"
 
 msgid "Select members (add)"
-msgstr ""
+msgstr "Select members (add)"
 
 msgid "Select members"
 msgstr "Select members"
 
 msgid "Add the selected relations to the current selection"
-msgstr ""
+msgstr "Add the selected relations to the current selection"
 
 msgid "Set the current selection to the list of selected relations"
 msgstr "Set the current selection to the list of selected relations"
 
 msgid "Select relation (add)"
-msgstr ""
+msgstr "Select relation (add)"
 
 msgid "Select relation"
 msgstr "Select relation"
@@ -2296,7 +2437,7 @@ msgid "<or>"
 msgstr "<or>"
 
 msgid "<xor>"
-msgstr ""
+msgstr "<xor>"
 
 msgid "<left parent>"
 msgstr "<left parent>"
@@ -2326,13 +2467,13 @@ msgid "Search for objects."
 msgstr "Search for objects."
 
 msgid "{0}: "
-msgstr ""
+msgstr "{0}: "
 
 msgid "Filter string:"
-msgstr ""
+msgstr "Filter string:"
 
 msgid "Search string:"
-msgstr ""
+msgstr "Search string:"
 
 msgid "Enter the search expression"
 msgstr "Enter the search expression"
@@ -2356,14 +2497,20 @@ msgid "all objects"
 msgstr "all objects"
 
 msgid "Also include incomplete and deleted objects in search."
+msgstr "Also include incomplete and deleted objects in search."
+
+msgid "standard"
 msgstr ""
 
 msgid "regular expression"
 msgstr "regular expression"
 
-msgid "add toolbar button"
+msgid "MapCSS selector"
 msgstr ""
 
+msgid "add toolbar button"
+msgstr "add toolbar button"
+
 msgid "Filter"
 msgstr "Filter"
 
@@ -2381,170 +2528,180 @@ msgid ""
 "\n"
 " {0}"
 msgstr ""
+"Search expression is not valid: \n"
+"\n"
+" {0}"
 
 msgid "Invalid search expression"
-msgstr ""
+msgstr "Invalid search expression"
 
 msgid "basic examples"
-msgstr ""
+msgstr "basic examples"
 
 msgid "Baker Street"
-msgstr ""
+msgstr "Baker Street"
 
 msgid "''Baker'' and ''Street'' in any key"
-msgstr ""
+msgstr "''Baker'' and ''Street'' in any key"
 
 msgid "\"Baker Street\""
-msgstr ""
+msgstr "\"Baker Street\""
 
 msgid "''Baker Street'' in any key"
-msgstr ""
+msgstr "''Baker Street'' in any key"
 
 msgid "basics"
-msgstr ""
+msgstr "basics"
 
 msgid "''valuefragment'' anywhere in ''key''"
-msgstr ""
+msgstr "''valuefragment'' anywhere in ''key''"
 
 msgid "''valuefragment'' nowhere in ''key''"
-msgstr ""
+msgstr "''valuefragment'' nowhere in ''key''"
 
 msgid "''key'' with exactly ''value''"
-msgstr ""
+msgstr "''key'' with exactly ''value''"
 
 msgid "''key'' with any value"
-msgstr ""
+msgstr "''key'' with any value"
 
 msgid "''value'' in any key"
-msgstr ""
+msgstr "''value'' in any key"
 
 msgid "matches if ''key'' exists"
-msgstr ""
+msgstr "matches if ''key'' exists"
 
 msgid "matches if ''key'' is greater than ''value'' (analogously, less than)"
 msgstr ""
+"matches if ''key'' is greater than ''value'' (analogously, less than)"
 
 msgid ""
 "to quote operators.<br>Within quoted strings the <b>\"</b> and <b>\\</b> "
 "characters need to be escaped by a preceding <b>\\</b> (e.g. <b>\\\"</b> and "
 "<b>\\\\</b>)."
 msgstr ""
+"to quote operators.<br>Within quoted strings the <b>\"</b> and <b>\\</b> "
+"characters need to be escaped by a preceding <b>\\</b> (e.g. <b>\\\"</b> and "
+"<b>\\\\</b>)."
 
 msgid "combinators"
-msgstr ""
+msgstr "combinators"
 
 msgid "logical and (both expressions have to be satisfied)"
-msgstr ""
+msgstr "logical and (both expressions have to be satisfied)"
 
 msgid "logical or (at least one expression has to be satisfied)"
-msgstr ""
+msgstr "logical or (at least one expression has to be satisfied)"
 
 msgid "logical not"
-msgstr ""
+msgstr "logical not"
 
 msgid "use parenthesis to group expressions"
-msgstr ""
+msgstr "use parenthesis to group expressions"
 
 msgid "objects"
-msgstr ""
+msgstr "objects"
 
 msgid "all ways"
-msgstr ""
+msgstr "all ways"
 
 msgid "all relations"
-msgstr ""
+msgstr "all relations"
 
 msgid "all closed ways"
-msgstr ""
+msgstr "all closed ways"
 
 msgid "object without useful tags"
-msgstr ""
+msgstr "object without useful tags"
 
 msgid "metadata"
-msgstr ""
+msgstr "metadata"
 
 msgid "objects changed by user"
-msgstr ""
+msgstr "objects changed by user"
 
 msgid "objects with given ID"
-msgstr ""
+msgstr "objects with given ID"
 
 msgid "objects with given version"
-msgstr ""
+msgstr "objects with given version"
 
 msgid "objects with given changeset ID"
-msgstr ""
+msgstr "objects with given changeset ID"
 
 msgid "objects with last modification timestamp within range"
-msgstr ""
+msgstr "objects with last modification timestamp within range"
 
 msgid "properties"
-msgstr ""
+msgstr "properties"
 
 msgid ""
 "ways with at least 20 nodes, or relations containing at least 20 nodes"
 msgstr ""
+"ways with at least 20 nodes, or relations containing at least 20 nodes"
 
 msgid ""
 "nodes with at least 3 referring ways, or relations containing at least 3 ways"
 msgstr ""
+"nodes with at least 3 referring ways, or relations containing at least 3 ways"
 
 msgid "objects having 5 to 10 tags"
-msgstr ""
+msgstr "objects having 5 to 10 tags"
 
 msgid "objects with given role in a relation"
-msgstr ""
+msgstr "objects with given role in a relation"
 
 msgid "closed ways with an area of 100 m²"
-msgstr ""
+msgstr "closed ways with an area of 100 m²"
 
 msgid "ways with a length of 200 m or more"
-msgstr ""
+msgstr "ways with a length of 200 m or more"
 
 msgid "state"
-msgstr ""
+msgstr "state"
 
 msgid "all modified objects"
-msgstr ""
+msgstr "all modified objects"
 
 msgid "all new objects"
-msgstr ""
+msgstr "all new objects"
 
 msgid "all selected objects"
-msgstr ""
+msgstr "all selected objects"
 
 msgid "all incomplete objects"
-msgstr ""
+msgstr "all incomplete objects"
 
 msgid "related objects"
-msgstr ""
+msgstr "related objects"
 
 msgid "all children of objects matching the expression"
-msgstr ""
+msgstr "all children of objects matching the expression"
 
 msgid "all parents of objects matching the expression"
-msgstr ""
+msgstr "all parents of objects matching the expression"
 
 msgid "n-th member of relation and/or n-th node of way"
-msgstr ""
+msgstr "n-th member of relation and/or n-th node of way"
 
 msgid "every n-th member of relation and/or every n-th node of way"
-msgstr ""
+msgstr "every n-th member of relation and/or every n-th node of way"
 
 msgid "view"
-msgstr ""
+msgstr "view"
 
 msgid "objects in current view"
-msgstr ""
+msgstr "objects in current view"
 
 msgid "objects (and all its way nodes / relation members) in current view"
-msgstr ""
+msgstr "objects (and all its way nodes / relation members) in current view"
 
 msgid "objects in downloaded area"
-msgstr ""
+msgstr "objects in downloaded area"
 
 msgid "objects (and all its way nodes / relation members) in downloaded area"
 msgstr ""
+"objects (and all its way nodes / relation members) in downloaded area"
 
 msgid "No match found for ''{0}''"
 msgstr "No match found for ''{0}''"
@@ -2574,9 +2731,13 @@ msgid "RX"
 msgstr "RX"
 
 msgctxt "search"
-msgid "A"
+msgid "CSS"
 msgstr ""
 
+msgctxt "search"
+msgid "A"
+msgstr "A"
+
 msgid ""
 "The regex \"{0}\" had a parse error at offset {1}, full error:\n"
 "\n"
@@ -2591,18 +2752,21 @@ msgid ""
 "\n"
 "{1}"
 msgstr ""
+"The regex \"{0}\" had a parse error, full error:\n"
+"\n"
+"{1}"
 
 msgid "Expecting <i>min</i>/<i>max</i> after ''timestamp''"
-msgstr ""
+msgstr "Expecting <i>min</i>/<i>max</i> after ''timestamp''"
 
 msgid "Range of primitive ids expected"
-msgstr ""
+msgstr "Range of primitive ids expected"
 
 msgid "Range of changeset ids expected"
-msgstr ""
+msgstr "Range of changeset ids expected"
 
 msgid "Range of versions expected"
-msgstr ""
+msgstr "Range of versions expected"
 
 msgid "Key cannot be empty when tag operator is used. Sample use: key=value"
 msgstr "Key cannot be empty when tag operator is used. Sample use: key=value"
@@ -2612,7 +2776,7 @@ msgstr ""
 "Unknown primitive type: {0}. Allowed values are node, way or relation"
 
 msgid "Positive integer expected"
-msgstr ""
+msgstr "Positive integer expected"
 
 msgid "Range of numbers expected"
 msgstr "Range of numbers expected"
@@ -2620,6 +2784,9 @@ msgstr "Range of numbers expected"
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr "Unexpected token. Expected {0}, found {1}"
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr "Unexpected token: {0}"
 
@@ -2627,13 +2794,13 @@ msgid "Missing parameter for OR"
 msgstr "Missing parameter for OR"
 
 msgid "Missing parameter for XOR"
-msgstr ""
+msgstr "Missing parameter for XOR"
 
 msgid "Missing operator for NOT"
 msgstr "Missing operator for NOT"
 
 msgid "Automatically truncating value of tag ''{0}'' on deleted object {1}"
-msgstr ""
+msgstr "Automatically truncating value of tag ''{0}'' on deleted object {1}"
 
 msgid ""
 "Length of value for tag ''{0}'' on object {1} exceeds the max. allowed "
@@ -2655,10 +2822,10 @@ msgid "Cyclic dependency between relations:"
 msgstr "Cyclic dependency between relations:"
 
 msgid "Removed obsolete tags"
-msgstr ""
+msgstr "Removed obsolete tags"
 
 msgid "Fix deprecated tags"
-msgstr ""
+msgstr "Fix deprecated tags"
 
 msgid ""
 "<html>{0} relations build a cycle because they refer to each other.<br>JOSM "
@@ -2679,13 +2846,13 @@ msgid "Cycling dependencies"
 msgstr "Cycling dependencies"
 
 msgid "Uploading modified notes"
-msgstr ""
+msgstr "Uploading modified notes"
 
 msgid "Note {0} failed: {1}"
-msgstr ""
+msgstr "Note {0} failed: {1}"
 
 msgid "Notes failed to upload"
-msgstr ""
+msgstr "Notes failed to upload"
 
 msgid ""
 "The following are results of automatic validation. Try fixing these, but be "
@@ -2693,30 +2860,34 @@ msgid ""
 "cancel this dialog, you can find the entries in the validator side panel to "
 "inspect them."
 msgstr ""
+"The following are results of automatic validation. Try fixing these, but be "
+"careful (don''t destroy valid data). When in doubt ignore them.<br>When you "
+"cancel this dialog, you can find the entries in the validator side panel to "
+"inspect them."
 
 msgid "Errors"
 msgstr "Errors"
 
 msgid "Usually this should be fixed."
-msgstr ""
+msgstr "Usually this should be fixed."
 
 msgid "Warnings"
 msgstr "Warnings"
 
 msgid "Fix these when possible."
-msgstr ""
+msgstr "Fix these when possible."
 
 msgid "Other"
 msgstr "Other"
 
 msgid "Informational warnings, expect many false entries."
-msgstr ""
+msgstr "Informational warnings, expect many false entries."
 
 msgid "Suspicious data found. Upload anyway?"
-msgstr ""
+msgstr "Suspicious data found. Upload anyway?"
 
 msgid "Continue upload"
-msgstr ""
+msgstr "Continue upload"
 
 msgid "Add node {0}"
 msgstr "Add node {0}"
@@ -2733,7 +2904,7 @@ msgstr[0] "Added {0} object"
 msgstr[1] "Added {0} objects"
 
 msgid "New way {0} has 0 nodes"
-msgstr ""
+msgstr "New way {0} has 0 nodes"
 
 msgid "Change node {0}"
 msgstr "Change node {0}"
@@ -2745,7 +2916,7 @@ msgid "Change relation {0}"
 msgstr "Change relation {0}"
 
 msgid "Changed nodes of {0}"
-msgstr ""
+msgstr "Changed nodes of {0}"
 
 msgid "Remove \"{0}\" for node ''{1}''"
 msgstr "Remove \"{0}\" for node ''{1}''"
@@ -2767,23 +2938,23 @@ msgstr "Set {0}={1} for relation ''{2}''"
 
 msgid "Remove \"{0}\" for {1} object"
 msgid_plural "Remove \"{0}\" for {1} objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Remove \"{0}\" for {1} object"
+msgstr[1] "Remove \"{0}\" for {1} objects"
 
 msgid "Set {0}={1} for {2} object"
 msgid_plural "Set {0}={1} for {2} objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Set {0}={1} for {2} object"
+msgstr[1] "Set {0}={1} for {2} objects"
 
 msgid "Deleted {0} tags for {1} object"
 msgid_plural "Deleted {0} tags for {1} objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Deleted {0} tags for {1} object"
+msgstr[1] "Deleted {0} tags for {1} objects"
 
 msgid "Set {0} tags for {1} object"
 msgid_plural "Set {0} tags for {1} objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Set {0} tags for {1} object"
+msgstr[1] "Set {0} tags for {1} objects"
 
 msgid "Replace \"{0}\" by \"{1}\" for"
 msgstr "Replace \"{0}\" by \"{1}\" for"
@@ -2829,7 +3000,7 @@ msgstr[0] "Delete {0} relation"
 msgstr[1] "Delete {0} relations"
 
 msgid "Deleted ''{0}''"
-msgstr ""
+msgstr "Deleted ''{0}''"
 
 msgid "Delete confirmation"
 msgstr "Delete confirmation"
@@ -2847,6 +3018,8 @@ msgid ""
 "You are about to delete incomplete objects.<br>This will cause problems "
 "because you don''t see the real object.<br>Do you really want to delete?"
 msgstr ""
+"You are about to delete incomplete objects.<br>This will cause problems "
+"because you don''t see the real object.<br>Do you really want to delete?"
 
 msgid ""
 "You are about to delete {0} relation: {1}<br/>This step is rarely necessary "
@@ -2857,10 +3030,16 @@ msgid_plural ""
 "and cannot be undone easily after being uploaded to the server.<br/>Do you "
 "really want to delete?"
 msgstr[0] ""
+"You are about to delete {0} relation: {1}<br/>This step is rarely necessary "
+"and cannot be undone easily after being uploaded to the server.<br/>Do you "
+"really want to delete?"
 msgstr[1] ""
-
+"You are about to delete {0} relations: {1}<br/>This step is rarely necessary "
+"and cannot be undone easily after being uploaded to the server.<br/>Do you "
+"really want to delete?"
+
 msgid "Delete relation?"
-msgstr ""
+msgstr "Delete relation?"
 
 msgid "Move {0} node"
 msgid_plural "Move {0} nodes"
@@ -2873,7 +3052,7 @@ msgstr[0] "Purged {0} object"
 msgstr[1] "Purged {0} objects"
 
 msgid "Removed nodes from {0}"
-msgstr ""
+msgstr "Removed nodes from {0}"
 
 msgid "Rotate {0} node"
 msgid_plural "Rotate {0} nodes"
@@ -2882,26 +3061,28 @@ msgstr[1] "Rotate {0} nodes"
 
 msgid "Scale {0} node"
 msgid_plural "Scale {0} nodes"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Scale {0} node"
+msgstr[1] "Scale {0} nodes"
 
 msgid "Selected {0} object"
 msgid_plural "Selected {0} objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Selected {0} object"
+msgstr[1] "Selected {0} objects"
 
 msgid "Sequence: {0}"
-msgstr ""
+msgstr "Sequence: {0}"
 
 msgid "Transform {0} node"
 msgid_plural "Transform {0} nodes"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Transform {0} node"
+msgstr[1] "Transform {0} nodes"
 
 msgid ""
 "<html>Layer ''{0}'' already has a conflict for object<br>''{1}''.<br>This "
 "conflict cannot be added.</html>"
 msgstr ""
+"<html>Layer ''{0}'' already has a conflict for object<br>''{1}''.<br>This "
+"conflict cannot be added.</html>"
 
 msgid "Double conflict"
 msgstr "Double conflict"
@@ -2910,6 +3091,8 @@ msgid ""
 "Layer ''{0}'' does not exist any more. Cannot remove conflict for object "
 "''{1}''."
 msgstr ""
+"Layer ''{0}'' does not exist any more. Cannot remove conflict for object "
+"''{1}''."
 
 msgid "Add conflict for ''{0}''"
 msgstr "Add conflict for ''{0}''"
@@ -2942,18 +3125,18 @@ msgstr "Resolve conflicts in member list of relation {0}"
 
 msgid "Resolve {0} tag conflict in node {1}"
 msgid_plural "Resolve {0} tag conflicts in node {1}"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Resolve {0} tag conflict in node {1}"
+msgstr[1] "Resolve {0} tag conflicts in node {1}"
 
 msgid "Resolve {0} tag conflict in way {1}"
 msgid_plural "Resolve {0} tag conflicts in way {1}"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Resolve {0} tag conflict in way {1}"
+msgstr[1] "Resolve {0} tag conflicts in way {1}"
 
 msgid "Resolve {0} tag conflict in relation {1}"
 msgid_plural "Resolve {0} tag conflicts in relation {1}"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Resolve {0} tag conflict in relation {1}"
+msgstr[1] "Resolve {0} tag conflicts in relation {1}"
 
 msgid "Resolve version conflict for node {0}"
 msgstr "Resolve version conflict for node {0}"
@@ -2982,15 +3165,23 @@ msgid_plural ""
 "of these tags are defined by its direction:<br/>{1}Do you really want to "
 "change the way direction, thus its semantic meaning?</html>"
 msgstr[0] ""
+"<html>You are going to reverse the way ''{0}'',<br/> whose semantic meaning "
+"of its tag ''{1}'' is defined by its direction.<br/>Do you really want to "
+"change the way direction, thus its semantic meaning?</html>"
 msgstr[1] ""
+"<html>You are going to reverse the way ''{0}'',<br/> whose semantic meaning "
+"of these tags are defined by its direction:<br/>{1}Do you really want to "
+"change the way direction, thus its semantic meaning?</html>"
 
 msgid "Reverse directional way."
-msgstr ""
+msgstr "Reverse directional way."
 
 msgid ""
 "When reversing this way, the following changes are suggested in order to "
 "maintain data consistency."
 msgstr ""
+"When reversing this way, the following changes are suggested in order to "
+"maintain data consistency."
 
 msgid "Relation"
 msgstr "Relation"
@@ -3020,10 +3211,10 @@ msgid "Do not apply changes"
 msgstr "Do not apply changes"
 
 msgid "Please select which changes you want to apply."
-msgstr ""
+msgstr "Please select which changes you want to apply."
 
 msgid "Tags of "
-msgstr ""
+msgstr "Tags of "
 
 msgid "Roles in relations referring to"
 msgstr "Roles in relations referring to"
@@ -3032,22 +3223,22 @@ msgid "Automatic tag correction"
 msgstr "Automatic tag correction"
 
 msgid "Unable to create directory {0}, autosave will be disabled"
-msgstr ""
+msgstr "Unable to create directory {0}, autosave will be disabled"
 
 msgid "Unable to create file {0}, other filename will be used"
-msgstr ""
+msgstr "Unable to create file {0}, other filename will be used"
 
 msgid "IOError while creating file, autosave will be skipped: {0}"
-msgstr ""
+msgstr "IOError while creating file, autosave will be skipped: {0}"
 
 msgid "Unable to delete old backup file {0}"
-msgstr ""
+msgstr "Unable to delete old backup file {0}"
 
 msgid "Your work has been saved automatically."
-msgstr ""
+msgstr "Your work has been saved automatically."
 
 msgid "Restoring files"
-msgstr ""
+msgstr "Restoring files"
 
 msgid "Illegal latitude value ''{0}''"
 msgstr "Illegal latitude value ''{0}''"
@@ -3056,33 +3247,56 @@ msgid "Illegal longitude value ''{0}''"
 msgstr "Illegal longitude value ''{0}''"
 
 msgid "Question"
-msgstr ""
+msgstr "Question"
 
 msgid "Message"
-msgstr ""
+msgstr "Message"
 
 msgid "Enter text"
-msgstr ""
+msgstr "Enter text"
 
 msgid "Installing plugins"
-msgstr ""
+msgstr "Installing plugins"
 
 msgid ""
 "<html>Settings file asks to append preferences to <b>{0}</b>,<br/> but its "
 "default value is unknown at this moment.<br/> Please activate corresponding "
 "function manually and retry importing."
 msgstr ""
+"<html>Settings file asks to append preferences to <b>{0}</b>,<br/> but its "
+"default value is unknown at this moment.<br/> Please activate corresponding "
+"function manually and retry importing."
 
 msgid "Failed to create missing cache directory: {0}"
-msgstr ""
+msgstr "Failed to create missing cache directory: {0}"
 
 msgid "<html>Failed to create missing cache directory: {0}</html>"
-msgstr ""
+msgstr "<html>Failed to create missing cache directory: {0}</html>"
+
+msgid "Unable to delete temporary file {0}"
+msgstr "Unable to delete temporary file {0}"
+
+msgid "Unable to set file non-readable {0}"
+msgstr "Unable to set file non-readable {0}"
+
+msgid "Unable to set file non-writable {0}"
+msgstr "Unable to set file non-writable {0}"
+
+msgid "Unable to set file non-executable {0}"
+msgstr "Unable to set file non-executable {0}"
+
+msgid "Unable to set file readable {0}"
+msgstr "Unable to set file readable {0}"
+
+msgid "Unable to set file writable {0}"
+msgstr "Unable to set file writable {0}"
 
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
 msgstr ""
+"Failed to initialise preferences. Preference directory ''{0}'' is not a "
+"directory."
 
 msgid ""
 "<html>Failed to initialize preferences.<br>Preference directory ''{0}'' is "
@@ -3095,6 +3309,8 @@ msgid ""
 "Failed to initialize preferences. Failed to create missing preference "
 "directory: {0}"
 msgstr ""
+"Failed to initialise preferences. Failed to create missing preference "
+"directory: {0}"
 
 msgid ""
 "<html>Failed to initialize preferences.<br>Failed to create missing "
@@ -3104,11 +3320,12 @@ msgstr ""
 "preference directory: {0}</html>"
 
 msgid "Missing preference file ''{0}''. Creating a default preference file."
-msgstr ""
+msgstr "Missing preference file ''{0}''. Creating a default preference file."
 
 msgid ""
 "Replacing existing preference file ''{0}'' with default preference file."
 msgstr ""
+"Replacing existing preference file ''{0}'' with default preference file."
 
 msgid ""
 "<html>Failed to initialize preferences.<br>Failed to reset preference file "
@@ -3128,6 +3345,8 @@ msgid ""
 "Failed to initialize preferences. Failed to reset preference file to "
 "default: {0}"
 msgstr ""
+"Failed to initialise preferences. Failed to reset preference file to "
+"default: {0}"
 
 msgid "Paint style {0}: {1}"
 msgstr "Paint style {0}: {1}"
@@ -3136,30 +3355,32 @@ msgid "Layer: {0}"
 msgstr "Layer: {0}"
 
 msgid "Failed to persist preferences to ''{0}''"
-msgstr ""
+msgstr "Failed to persist preferences to ''{0}''"
 
 msgid ""
 "Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
 "startup)."
 msgstr ""
+"Try enabling IPv6 network, preferring IPv6 over IPv4 (only works on early "
+"startup)."
 
 msgid " (at line {0}, column {1})"
-msgstr ""
+msgstr " (at line {0}, column {1})"
 
 msgid "Preference setting {0} has been removed since it is no longer used."
 msgstr "Preference setting {0} has been removed since it is no longer used."
 
 msgid "Metric"
-msgstr ""
+msgstr "Metric"
 
 msgid "Chinese"
-msgstr ""
+msgstr "Chinese"
 
 msgid "Imperial"
-msgstr ""
+msgstr "Imperial"
 
 msgid "Nautical Mile"
-msgstr ""
+msgstr "Nautical Mile"
 
 msgid "Failed to load resource ''{0}'', error is {1}."
 msgstr "Failed to load resource ''{0}'', error is {1}."
@@ -3168,10 +3389,10 @@ msgid "UNKNOWN"
 msgstr "UNKNOWN"
 
 msgid "Unexpected JOSM version number in revision file, value is ''{0}''"
-msgstr ""
+msgstr "Unexpected JOSM version number in revision file, value is ''{0}''"
 
 msgid "The revision file ''/REVISION'' is missing."
-msgstr ""
+msgstr "The revision file ''/REVISION'' is missing."
 
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr "already registered a conflict for primitive ''{0}''"
@@ -3180,10 +3401,10 @@ msgid "Decimal Degrees"
 msgstr "Decimal Degrees"
 
 msgid "deg° min'' sec\""
-msgstr ""
+msgstr "deg° min'' sec\""
 
 msgid "deg° min'' (Nautical)"
-msgstr ""
+msgstr "deg° min'' (Nautical)"
 
 msgid "Projected Coordinates"
 msgstr "Projected Coordinates"
@@ -3204,10 +3425,44 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
-msgid "Not in cache"
-msgstr "Not in cache"
-
 msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+
+msgid "HTTP error {0} when loading tiles"
+msgstr "HTTP error {0} when loading tiles"
+
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3236,6 +3491,9 @@ msgid ""
 "Please report this at {2}. This is not a critical error, it should be safe "
 "to continue in your work."
 msgstr ""
+"JOSM expected to find primitive [{0} {1}] in dataset but it is not there. "
+"Please report this at {2}. This is not a critical error, it should be safe "
+"to continue in your work."
 
 msgid "Missing merge target for way with id {0}"
 msgstr "Missing merge target for way with id {0}"
@@ -3244,6 +3502,8 @@ msgid ""
 "Object of type {0} with id {1} was marked to be deleted, but it''s missing "
 "in the source dataset"
 msgstr ""
+"Object of type {0} with id {1} was marked to be deleted, but it''s missing "
+"in the source dataset"
 
 msgid "Missing merge target for node with id {0}"
 msgstr "Missing merge target for node with id {0}"
@@ -3255,22 +3515,22 @@ msgid "Missing merge target of type {0} with id {1}"
 msgstr "Missing merge target of type {0} with id {1}"
 
 msgid "Conflict in ''visible'' attribute for object of type {0} with id {1}"
-msgstr ""
+msgstr "Conflict in ''visible'' attribute for object of type {0} with id {1}"
 
 msgid "Merging data..."
-msgstr ""
+msgstr "Merging data..."
 
 msgid "Test ''{0}'' completed in {1}"
-msgstr ""
+msgstr "Test ''{0}'' completed in {1}"
 
 msgid "Cannot add a way with only {0} nodes."
-msgstr ""
+msgstr "Cannot add a way with only {0} nodes."
 
 msgid "Each node must connect exactly 2 ways"
-msgstr ""
+msgstr "Each node must connect exactly 2 ways"
 
 msgid "There is an intersection between ways."
-msgstr ""
+msgstr "There is an intersection between ways."
 
 msgid ""
 "Cannot merge because either of the participating primitives is new and the "
@@ -3303,7 +3563,7 @@ msgid "closedway"
 msgstr "closed way"
 
 msgid "multipolygon"
-msgstr ""
+msgstr "multipolygon"
 
 msgid ""
 "Tag collection cannot be applied to a primitive because there are keys with "
@@ -3319,13 +3579,13 @@ msgid "Cannot add node {0} to incomplete way {1}."
 msgstr "Cannot add node {0} to incomplete way {1}."
 
 msgid "Nodes in way must be in the same dataset"
-msgstr ""
+msgstr "Nodes in way must be in the same dataset"
 
 msgid "Deleted node referenced by {0}"
-msgstr ""
+msgstr "Deleted node referenced by {0}"
 
 msgid "Complete node {0} with null coordinates in way {1}"
-msgstr ""
+msgstr "Complete node {0} with null coordinates in way {1}"
 
 msgid ""
 "Cannot compare primitive with ID ''{0}'' to primitive with ID ''{1}''."
@@ -3336,36 +3596,41 @@ msgid "Parameter {0} not in range 0..{1}. Got ''{2}''."
 msgstr "parameter {0} not in range 0..{1}, got {2}"
 
 msgid "Failed to load map renderer class ''{0}''. The class wasn''t found."
-msgstr ""
+msgstr "Failed to load map renderer class ''{0}''. The class wasn''t found."
 
 msgid ""
 "Can''t activate map renderer class ''{0}'', because the class wasn''t found."
 msgstr ""
+"Can''t activate map renderer class ''{0}'', because the class wasn''t found."
 
 msgid "Activating the standard map renderer instead."
-msgstr ""
+msgstr "Activating the standard map renderer instead."
 
 msgid ""
 "Can''t activate map renderer class ''{0}'', because it isn''t a subclass of "
 "''{1}''."
 msgstr ""
+"Can''t activate map renderer class ''{0}'', because it isn''t a subclass of "
+"''{1}''."
 
 msgid ""
 "Can''t activate map renderer class ''{0}'', because it isn''t registered as "
 "map renderer."
 msgstr ""
+"Can''t activate map renderer class ''{0}'', because it isn''t registered as "
+"map renderer."
 
 msgid "Wireframe Map Renderer"
-msgstr ""
+msgstr "Wireframe Map Renderer"
 
 msgid "Renders the map as simple wire frame."
-msgstr ""
+msgstr "Renders the map as simple wire frame."
 
 msgid "Styled Map Renderer"
-msgstr ""
+msgstr "Styled Map Renderer"
 
 msgid "Renders the map using style rules in a set of style sheets."
-msgstr ""
+msgstr "Renders the map using style rules in a set of style sheets."
 
 msgid "inactive"
 msgstr "inactive"
@@ -3374,16 +3639,16 @@ msgid "selected"
 msgstr "selected"
 
 msgid "Relation: selected"
-msgstr ""
+msgstr "Relation: selected"
 
 msgid "Node: standard"
-msgstr ""
+msgstr "Node: standard"
 
 msgid "Node: connection"
-msgstr ""
+msgstr "Node: connection"
 
 msgid "Node: tagged"
-msgstr ""
+msgstr "Node: tagged"
 
 msgid "untagged way"
 msgstr "untagged way"
@@ -3395,7 +3660,7 @@ msgid "highlight"
 msgstr "highlight"
 
 msgid "highlight wireframe"
-msgstr ""
+msgstr "highlight wireframe"
 
 msgid "untagged"
 msgstr "untagged"
@@ -3406,100 +3671,108 @@ msgstr "text"
 msgid "areatext"
 msgstr "areatext"
 
-msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
 msgstr ""
 
-msgid "Unknown parameter: ''{0}''."
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
 msgstr ""
 
+msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
+msgstr "Parameter must begin with a ''+'' character (found ''{0}'')"
+
+msgid "Unknown parameter: ''{0}''."
+msgstr "Unknown parameter: ''{0}''."
+
 msgid "Value expected for parameter ''{0}''."
-msgstr ""
+msgstr "Value expected for parameter ''{0}''."
 
 msgid "No value expected for parameter ''{0}''."
-msgstr ""
+msgstr "No value expected for parameter ''{0}''."
 
 msgid "Unexpected parameter format (''{0}'')"
-msgstr ""
+msgstr "Unexpected parameter format (''{0}'')"
 
 msgid "Value ''{0}'' for option +init not supported."
-msgstr ""
+msgstr "Value ''{0}'' for option +init not supported."
 
 msgid ": "
-msgstr ""
+msgstr ": "
 
 msgid "Ellipsoid ''{0}'' not supported."
-msgstr ""
+msgstr "Ellipsoid ''{0}'' not supported."
 
 msgid "Combination of ellipsoid parameters is not supported."
-msgstr ""
+msgstr "Combination of ellipsoid parameters is not supported."
+
+msgid "Unknown datum identifier: ''{0}''"
+msgstr "Unknown datum identifier: ''{0}''"
 
 msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
-msgstr ""
+msgstr "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 
 msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
-msgstr ""
-
-msgid "Unknown datum identifier: ''{0}''"
-msgstr ""
+msgstr "Grid shift file ''{0}'' for option +nadgrids not supported."
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
-msgstr ""
+msgstr "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
 
 msgid ""
 "Unexpected number of arguments for parameter ''towgs84'' (must be 3 or 7)"
 msgstr ""
+"Unexpected number of arguments for parameter ''towgs84'' (must be 3 or 7)"
 
 msgid "Unable to parse value of parameter ''towgs84'' (''{0}'')"
-msgstr ""
+msgstr "Unable to parse value of parameter ''towgs84'' (''{0}'')"
 
 msgid "Projection required (+proj=*)"
-msgstr ""
+msgstr "Projection required (+proj=*)"
 
 msgid "Unknown projection identifier: ''{0}''"
-msgstr ""
+msgstr "Unknown projection identifier: ''{0}''"
 
 msgid "Unexpected number of arguments for parameter ''+bounds'' (must be 4)"
-msgstr ""
+msgstr "Unexpected number of arguments for parameter ''+bounds'' (must be 4)"
 
 msgid "Unknown parameter ''{0}''"
-msgstr ""
+msgstr "Unknown parameter ''{0}''"
 
 msgid "Expected number argument for parameter ''{0}''"
-msgstr ""
+msgstr "Expected number argument for parameter ''{0}''"
 
 msgid "Unable to parse value ''{1}'' of parameter ''{0}'' as number."
-msgstr ""
+msgstr "Unable to parse value ''{1}'' of parameter ''{0}'' as number."
 
 msgid ""
 "Unable to parse value ''{1}'' of parameter ''{0}'' as coordinate value."
 msgstr ""
+"Unable to parse value ''{1}'' of parameter ''{0}'' as coordinate value."
 
 msgid "Custom Projection"
-msgstr ""
+msgstr "Custom Projection"
 
 msgid "GRS80"
-msgstr ""
+msgstr "GRS80"
 
 msgid "WGS84"
-msgstr ""
+msgstr "WGS84"
 
 msgid "Parameter ''{0}'' required."
-msgstr ""
+msgstr "Parameter ''{0}'' required."
 
 msgid "Lambert Conformal Conic"
-msgstr ""
+msgstr "Lambert Conformal Conic"
 
 msgid "Lat/lon (Geodetic)"
-msgstr ""
+msgstr "Lat/lon (Geodetic)"
 
 msgid "Mercator"
 msgstr "Mercator"
 
 msgid "Swiss Oblique Mercator"
-msgstr ""
+msgstr "Swiss Oblique Mercator"
 
 msgid "Transverse Mercator"
-msgstr ""
+msgstr "Transverse Mercator"
 
 msgid ""
 "Error initializing test {0}:\n"
@@ -3521,86 +3794,87 @@ msgid "Running test {0}"
 msgstr "Running test {0}"
 
 msgid "E-mail address contains non-ascii characters"
-msgstr ""
+msgstr "E-mail address contains non-ascii characters"
 
 msgid "E-mail address is invalid"
-msgstr ""
+msgstr "E-mail address is invalid"
 
 msgid "E-mail address contains an invalid username: {0}"
-msgstr ""
+msgstr "E-mail address contains an invalid username: {0}"
 
 msgid "E-mail address contains an invalid domain: {0}"
-msgstr ""
+msgstr "E-mail address contains an invalid domain: {0}"
 
 msgid "URL contains non-ascii characters"
-msgstr ""
+msgstr "URL contains non-ascii characters"
 
 msgid "URL is invalid"
-msgstr ""
+msgstr "URL is invalid"
 
 msgid "URL contains an invalid protocol: {0}"
-msgstr ""
+msgstr "URL contains an invalid protocol: {0}"
 
 msgid "URL contains an invalid authority: {0}"
-msgstr ""
+msgstr "URL contains an invalid authority: {0}"
 
 msgid "URL contains an invalid path: {0}"
-msgstr ""
+msgstr "URL contains an invalid path: {0}"
 
 msgid "URL contains an invalid query: {0}"
-msgstr ""
+msgstr "URL contains an invalid query: {0}"
 
 msgid "URL contains an invalid fragment: {0}"
-msgstr ""
+msgstr "URL contains an invalid fragment: {0}"
 
 msgid "Addresses"
 msgstr "Addresses"
 
 msgid "Checks for errors in addresses and associatedStreet relations."
-msgstr ""
+msgstr "Checks for errors in addresses and associatedStreet relations."
 
 msgid "Multiple associatedStreet relations"
-msgstr ""
+msgstr "Multiple associatedStreet relations"
 
 msgid "House number without street"
-msgstr ""
+msgstr "House number without street"
 
 msgid "House number ''{0}'' duplicated"
-msgstr ""
+msgstr "House number ''{0}'' duplicated"
 
 msgid "Duplicate house numbers"
-msgstr ""
+msgstr "Duplicate house numbers"
 
 msgid "Multiple street names in relation"
-msgstr ""
+msgstr "Multiple street names in relation"
 
 msgid "House number too far from street"
-msgstr ""
+msgstr "House number too far from street"
 
 msgid "API Capabilities"
-msgstr ""
+msgstr "API Capabilities"
 
 msgid "Checks for errors against API capabilities"
-msgstr ""
+msgstr "Checks for errors against API capabilities"
 
 msgid ""
 "Way contains more than {0} nodes. It should be replaced by a multipolygon"
 msgstr ""
+"Way contains more than {0} nodes. It should be replaced by a multipolygon"
 
 msgid "Way contains more than {0} nodes. It should be split or simplified"
-msgstr ""
+msgstr "Way contains more than {0} nodes. It should be split or simplified"
 
 msgid "Barriers and entrances"
-msgstr ""
+msgstr "Barriers and entrances"
 
 msgid "Checks for errors in barriers and entrances."
-msgstr ""
+msgstr "Checks for errors in barriers and entrances."
 
 msgid "Barrier entrance not set on a barrier"
-msgstr ""
+msgstr "Barrier entrance not set on a barrier"
 
 msgid "Coastlines"
-msgstr ""
+msgstr "Coastlines"
 
 msgid "This test checks that coastlines are correct."
 msgstr "This test checks that coastlines are correct."
@@ -3615,40 +3889,40 @@ msgid "Reversed coastline"
 msgstr "Reversed coastline"
 
 msgid "Conditional Keys"
-msgstr ""
+msgstr "Conditional Keys"
 
 msgid "Tests for the correct usage of ''*:conditional'' tags."
-msgstr ""
+msgstr "Tests for the correct usage of ''*:conditional'' tags."
 
 msgid "Does not match pattern ''restriction value @ condition''"
-msgstr ""
+msgstr "Does not match pattern ''restriction value @ condition''"
 
 msgid "{0} is not a valid restriction value"
-msgstr ""
+msgstr "{0} is not a valid restriction value"
 
 msgid "Wrong syntax in {0} key"
-msgstr ""
+msgstr "Wrong syntax in {0} key"
 
 msgid "Error in {0} value: {1}"
-msgstr ""
+msgstr "Error in {0} value: {1}"
 
 msgid "Crossing ways"
 msgstr "Crossing ways"
 
 msgid "Crossing buildings"
-msgstr ""
+msgstr "Crossing buildings"
 
 msgid "Crossing waterways"
-msgstr ""
+msgstr "Crossing waterways"
 
 msgid "Crossing waterway/highway"
-msgstr ""
+msgstr "Crossing waterway/highway"
 
 msgid "Crossing boundaries"
-msgstr ""
+msgstr "Crossing boundaries"
 
 msgid "Crossing barriers"
-msgstr ""
+msgstr "Crossing barriers"
 
 msgid ""
 "This test checks if two roads, railways, waterways or buildings crosses in "
@@ -3664,51 +3938,53 @@ msgid "This test checks that there are no nodes at the very same location."
 msgstr "This test checks that there are no nodes at the very same location."
 
 msgid "Mixed type duplicated nodes"
-msgstr ""
+msgstr "Mixed type duplicated nodes"
 
 msgid "Highway duplicated nodes"
-msgstr ""
+msgstr "Highway duplicated nodes"
 
 msgid "Railway duplicated nodes"
-msgstr ""
+msgstr "Railway duplicated nodes"
 
 msgid "Waterway duplicated nodes"
-msgstr ""
+msgstr "Waterway duplicated nodes"
 
 msgid "Boundary duplicated nodes"
-msgstr ""
+msgstr "Boundary duplicated nodes"
 
 msgid "Power duplicated nodes"
-msgstr ""
+msgstr "Power duplicated nodes"
 
 msgid "Natural duplicated nodes"
-msgstr ""
+msgstr "Natural duplicated nodes"
 
 msgid "Building duplicated nodes"
-msgstr ""
+msgstr "Building duplicated nodes"
 
 msgid "Landuse duplicated nodes"
-msgstr ""
+msgstr "Landuse duplicated nodes"
 
 msgid "Other duplicated nodes"
-msgstr ""
+msgstr "Other duplicated nodes"
 
 msgid "Nodes at same position"
 msgstr "Nodes at same position"
 
 msgid "Duplicated relations"
-msgstr ""
+msgstr "Duplicated relations"
 
 msgid ""
 "This test checks that there are no relations with same tags and same members "
 "with same roles."
 msgstr ""
+"This test checks that there are no relations with same tags and same members "
+"with same roles."
 
 msgid "Relations with same members"
-msgstr ""
+msgstr "Relations with same members"
 
 msgid "Delete duplicate relations"
-msgstr ""
+msgstr "Delete duplicate relations"
 
 msgid "Duplicated ways"
 msgstr "Duplicated ways"
@@ -3717,9 +3993,11 @@ msgid ""
 "This test checks that there are no ways with same node coordinates and "
 "optionally also same tags."
 msgstr ""
+"This test checks that there are no ways with same node coordinates and "
+"optionally also same tags."
 
 msgid "Ways with same position"
-msgstr ""
+msgstr "Ways with same position"
 
 msgid "Delete duplicate ways"
 msgstr "Delete duplicate ways"
@@ -3734,135 +4012,141 @@ msgid "Highways"
 msgstr "Highways"
 
 msgid "Performs semantic checks on highways."
-msgstr ""
+msgstr "Performs semantic checks on highways."
 
 msgid "Incorrect roundabout (highway: {0} instead of {1})"
-msgstr ""
+msgstr "Incorrect roundabout (highway: {0} instead of {1})"
 
 msgid "Highway link is not linked to adequate highway/link"
-msgstr ""
+msgstr "Highway link is not linked to adequate highway/link"
 
 msgid "Missing pedestrian crossing information"
-msgstr ""
+msgstr "Missing pedestrian crossing information"
 
 msgid "Unknown country code: {0}"
-msgstr ""
+msgstr "Unknown country code: {0}"
 
 msgid "Unknown source:maxspeed context: {0}"
-msgstr ""
+msgstr "Unknown source:maxspeed context: {0}"
 
 msgid "Internet tags"
-msgstr ""
+msgstr "Internet tags"
 
 msgid "Checks for errors in internet-related tags."
-msgstr ""
+msgstr "Checks for errors in internet-related tags."
 
 msgid " URL cannot be converted to ASCII: {0}"
-msgstr ""
+msgstr " URL cannot be converted to ASCII: {0}"
 
 msgid "''{0}'': {1}"
-msgstr ""
+msgstr "''{0}'': {1}"
 
 msgid "Lane tags"
-msgstr ""
+msgstr "Lane tags"
 
 msgid "Test that validates ''lane:'' tags."
-msgstr ""
+msgstr "Test that validates ''lane:'' tags."
 
 msgid "Number of {0} greater than {1}"
-msgstr ""
+msgstr "Number of {0} greater than {1}"
 
 msgid "{0}+{1}"
-msgstr ""
+msgstr "{0}+{1}"
 
 msgid "Number of lane dependent values inconsistent"
-msgstr ""
+msgstr "Number of lane dependent values inconsistent"
 
 msgid "Number of lane dependent values inconsistent in forward direction"
-msgstr ""
+msgstr "Number of lane dependent values inconsistent in forward direction"
 
 msgid "Number of lane dependent values inconsistent in backward direction"
-msgstr ""
+msgstr "Number of lane dependent values inconsistent in backward direction"
 
 msgid "Long segments"
-msgstr ""
+msgstr "Long segments"
 
 msgid "This tests for long way segments, which are usually errors."
-msgstr ""
+msgstr "This tests for long way segments, which are usually errors."
 
 msgid "Very long segment of {0} kilometers"
-msgstr ""
+msgstr "Very long segment of {0} kilometers"
 
 msgid "Tag checker (MapCSS based)"
-msgstr ""
+msgstr "Tag checker (MapCSS based)"
 
 msgid "This test checks for errors in tag keys and values."
-msgstr ""
+msgstr "This test checks for errors in tag keys and values."
 
 msgid "Unable to replace argument {0} in {1}: {2}"
-msgstr ""
+msgstr "Unable to replace argument {0} in {1}: {2}"
 
 msgid "Fix of {0}"
-msgstr ""
+msgstr "Fix of {0}"
 
 msgid " or "
-msgstr ""
+msgstr " or "
 
 msgid "{0}, use {1} instead"
-msgstr ""
+msgstr "{0}, use {1} instead"
 
 msgid "Adding {0} to tag checker"
-msgstr ""
+msgstr "Adding {0} to tag checker"
 
 msgid "Failed to add {0} to tag checker"
-msgstr ""
+msgstr "Failed to add {0} to tag checker"
 
 msgid "Multipolygon"
 msgstr "Multipolygon"
 
 msgid "This test checks if multipolygons are valid."
-msgstr ""
+msgstr "This test checks if multipolygons are valid."
 
 msgid "Area style way is not closed"
-msgstr ""
+msgstr "Area style way is not closed"
 
 msgid "No outer way for multipolygon"
 msgstr "No outer way for multipolygon"
 
 msgid "Role for ''{0}'' should be ''{1}''"
-msgstr ""
+msgstr "Role for ''{0}'' should be ''{1}''"
 
 msgid "No area style for multipolygon"
-msgstr ""
+msgstr "No area style for multipolygon"
 
 msgid ""
 "Multipolygon relation should be tagged with area tags and not the outer way"
 msgid_plural ""
 "Multipolygon relation should be tagged with area tags and not the outer ways"
 msgstr[0] ""
+"Multipolygon relation should be tagged with area tags and not the outer way"
 msgstr[1] ""
+"Multipolygon relation should be tagged with area tags and not the outer ways"
 
 msgid ""
 "With the currently used mappaint style the style for inner way equals the "
 "multipolygon style"
 msgstr ""
+"With the currently used mappaint style the style for inner way equals the "
+"multipolygon style"
 
 msgid "Style for outer way mismatches"
-msgstr ""
+msgstr "Style for outer way mismatches"
 
 msgid ""
 "With the currently used mappaint style(s) the style for outer way mismatches "
 "polygon"
 msgstr ""
+"With the currently used mappaint style(s) the style for outer way mismatches "
+"polygon"
 
 msgid "Area style on outer way"
-msgstr ""
+msgstr "Area style on outer way"
 
 msgid "Multipolygon is not closed"
 msgstr "Multipolygon is not closed"
 
 msgid "Multipolygon inner way is outside"
-msgstr ""
+msgstr "Multipolygon inner way is outside"
 
 msgid "Intersection between multipolygon ways"
 msgstr "Intersection between multipolygon ways"
@@ -3871,55 +4155,58 @@ msgid "No useful role for multipolygon member"
 msgstr "No useful role for multipolygon member"
 
 msgid "Non-Way in multipolygon"
-msgstr ""
+msgstr "Non-Way in multipolygon"
 
 msgid "Missing name:* translation"
-msgstr ""
+msgstr "Missing name:* translation"
 
 msgid ""
 "This test finds multilingual objects whose ''name'' attribute is not equal "
 "to some ''name:*'' attribute and not a composition of ''name:*'' attributes, "
 "e.g., Italia - Italien - Italy."
 msgstr ""
+"This test finds multilingual objects whose ''name'' attribute is not equal "
+"to some ''name:*'' attribute and not a composition of ''name:*'' attributes, "
+"e.g., Italia - Italien - Italy."
 
 msgid "Missing name:*={0}. Add tag with correct language key."
-msgstr ""
+msgstr "Missing name:*={0}. Add tag with correct language key."
 
 msgid "A name is missing, even though name:* exists."
 msgstr "A name is missing, even though name:* exists."
 
 msgid "Opening hours syntax"
-msgstr ""
+msgstr "Opening hours syntax"
 
 msgid "This test checks the correct usage of the opening hours syntax."
-msgstr ""
+msgstr "This test checks the correct usage of the opening hours syntax."
 
 msgid "opening_hours value can be prettified"
-msgstr ""
+msgstr "opening_hours value can be prettified"
 
 msgid "Unexpected token:"
-msgstr ""
+msgstr "Unexpected token:"
 
 msgid "Unexpected token (school holiday parser):"
-msgstr ""
+msgstr "Unexpected token (school holiday parser):"
 
 msgid "Unexpected token in number range:"
-msgstr ""
+msgstr "Unexpected token in number range:"
 
 msgid "Unexpected token in week range:"
-msgstr ""
+msgstr "Unexpected token in week range:"
 
 msgid "Unexpected token in weekday range:"
-msgstr ""
+msgstr "Unexpected token in weekday range:"
 
 msgid "Unexpected token in month range:"
-msgstr ""
+msgstr "Unexpected token in month range:"
 
 msgid "Unexpected token in year range:"
-msgstr ""
+msgstr "Unexpected token in year range:"
 
 msgid "Invalid/unsupported syntax."
-msgstr ""
+msgstr "Invalid/unsupported syntax."
 
 msgid "Overlapping ways"
 msgstr "Overlapping ways"
@@ -3932,16 +4219,16 @@ msgstr ""
 "than one way."
 
 msgid "Areas share segment"
-msgstr ""
+msgstr "Areas share segment"
 
 msgid "Highways share segment with area"
-msgstr ""
+msgstr "Highways share segment with area"
 
 msgid "Railways share segment with area"
-msgstr ""
+msgstr "Railways share segment with area"
 
 msgid "Ways share segment with area"
-msgstr ""
+msgstr "Ways share segment with area"
 
 msgid "Overlapping highways"
 msgstr "Overlapping highways"
@@ -3950,61 +4237,64 @@ msgid "Overlapping railways"
 msgstr "Overlapping railways"
 
 msgid "Way contains segment twice"
-msgstr ""
+msgstr "Way contains segment twice"
 
 msgid "Power lines"
-msgstr ""
+msgstr "Power lines"
 
 msgid ""
 "Checks for nodes in power lines that do not have a power=tower/pole tag."
 msgstr ""
+"Checks for nodes in power lines that do not have a power=tower/pole tag."
 
 msgid "Missing power tower/pole within power line"
-msgstr ""
+msgstr "Missing power tower/pole within power line"
 
 msgid "Role verification problem"
-msgstr ""
+msgstr "Role verification problem"
 
 msgid "Relation checker"
-msgstr ""
+msgstr "Relation checker"
 
 msgid "Checks for errors in relations."
-msgstr ""
+msgstr "Checks for errors in relations."
 
 msgid ""
 "Route scheme is unspecified. Add {0} ({1}=public_transport; {2}=legacy)"
 msgstr ""
+"Route scheme is unspecified. Add {0} ({1}=public_transport; {2}=legacy)"
 
 msgid "Relation type is unknown"
-msgstr ""
+msgstr "Relation type is unknown"
 
 msgid "Relation is empty"
-msgstr ""
+msgstr "Relation is empty"
 
 msgid "Role member does not match expression {0} in template {1}"
-msgstr ""
+msgstr "Role member does not match expression {0} in template {1}"
 
 msgid ""
 "Role member type {0} does not match accepted list of {1} in template {2}"
 msgstr ""
+"Role member type {0} does not match accepted list of {1} in template {2}"
 
 msgid "<empty>"
-msgstr ""
+msgstr "<empty>"
 
 msgid "Role {0} unknown in templates {1}"
-msgstr ""
+msgstr "Role {0} unknown in templates {1}"
 
 msgid "Empty role type found when expecting one of {0}"
-msgstr ""
+msgstr "Empty role type found when expecting one of {0}"
 
 msgid "Role {0} missing"
-msgstr ""
+msgstr "Role {0} missing"
 
 msgid "Number of {0} roles too low ({1})"
-msgstr ""
+msgstr "Number of {0} roles too low ({1})"
 
 msgid "Number of {0} roles too high ({1})"
-msgstr ""
+msgstr "Number of {0} roles too high ({1})"
 
 msgid "Self-intersecting ways"
 msgstr "Self-intersecting ways"
@@ -4023,10 +4313,10 @@ msgstr ""
 "This test checks for ways with similar names that may have been misspelt."
 
 msgid "Tag checker"
-msgstr ""
+msgstr "Tag checker"
 
 msgid "Adding {0} to ignore tags"
-msgstr ""
+msgstr "Adding {0} to ignore tags"
 
 msgid "Invalid tagchecker line - {0}: {1}"
 msgstr "Invalid tagchecker line - {0}: {1}"
@@ -4035,7 +4325,7 @@ msgid "Invalid spellcheck line: {0}"
 msgstr "Invalid spellcheck line: {0}"
 
 msgid "Adding {0} to spellchecker"
-msgstr ""
+msgstr "Adding {0} to spellchecker"
 
 msgid ""
 "Could not access data file(s):\n"
@@ -4045,29 +4335,26 @@ msgstr ""
 "{0}"
 
 msgid "Suspicious tag/value combinations"
-msgstr ""
+msgstr "Suspicious tag/value combinations"
 
 msgid "Key ''{0}'' invalid."
 msgstr "Key ''{0}'' invalid."
 
 msgid "Tag value contains character with code less than 0x20"
-msgstr ""
+msgstr "Tag value contains character with code less than 0x20"
 
 msgid "Tag key contains character with code less than 0x20"
-msgstr ""
+msgstr "Tag key contains character with code less than 0x20"
 
 msgid "Tag value longer than allowed"
-msgstr ""
+msgstr "Tag value longer than allowed"
 
 msgid "Tag key longer than allowed"
-msgstr ""
+msgstr "Tag key longer than allowed"
 
 msgid "Tags with empty values"
 msgstr "Tags with empty values"
 
-msgid "Invalid property key"
-msgstr "Invalid property key"
-
 msgid "Invalid white space in property key"
 msgstr "Invalid white space in property key"
 
@@ -4077,12 +4364,24 @@ msgstr "Property values start or end with white space"
 msgid "Property values contain HTML entity"
 msgstr "Property values contain HTML entity"
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr "Key ''{0}'' not in presets."
 
 msgid "Presets do not contain property key"
 msgstr "Presets do not contain property key"
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+
+msgid "Misspelled property value"
+msgstr "Misspelt property value"
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr "Value ''{0}'' for key ''{1}'' not in presets."
 
@@ -4109,7 +4408,7 @@ msgid "TagChecker source"
 msgstr "TagChecker source"
 
 msgid "Data sources ({0})"
-msgstr ""
+msgstr "Data sources ({0})"
 
 msgid "Check property values."
 msgstr "Check property values."
@@ -4124,7 +4423,7 @@ msgid "Looks for nodes or ways with FIXME in any property value."
 msgstr "Looks for nodes or ways with FIXME in any property value."
 
 msgid "Fix tags"
-msgstr ""
+msgstr "Fix tags"
 
 msgid "Could not find element type"
 msgstr "Could not find element type"
@@ -4142,58 +4441,58 @@ msgid "Illegal regular expression ''{0}''"
 msgstr "Illegal regular expression ''{0}''"
 
 msgid "Turnrestrictions"
-msgstr ""
+msgstr "Turnrestrictions"
 
 msgid "This test checks if turnrestrictions are valid."
-msgstr ""
+msgstr "This test checks if turnrestrictions are valid."
 
 msgid "Unknown role"
-msgstr ""
+msgstr "Unknown role"
 
 msgid "Unknown member type"
-msgstr ""
+msgstr "Unknown member type"
 
 msgid "More than one \"from\" way found"
-msgstr ""
+msgstr "More than one \"from\" way found"
 
 msgid "More than one \"to\" way found"
-msgstr ""
+msgstr "More than one \"to\" way found"
 
 msgid "More than one \"via\" node found"
-msgstr ""
+msgstr "More than one \"via\" node found"
 
 msgid "Cannot mix node and way for role \"via\""
-msgstr ""
+msgstr "Cannot mix node and way for role \"via\""
 
 msgid "No \"from\" way found"
-msgstr ""
+msgstr "No \"from\" way found"
 
 msgid "No \"to\" way found"
-msgstr ""
+msgstr "No \"to\" way found"
 
 msgid "No \"via\" node or way found"
-msgstr ""
+msgstr "No \"via\" node or way found"
 
 msgid "The \"from\" way does not start or end at a \"via\" node."
-msgstr ""
+msgstr "The \"from\" way does not start or end at a \"via\" node."
 
 msgid "Superfluous turnrestriction as \"to\" way is oneway"
-msgstr ""
+msgstr "Superfluous turnrestriction as \"to\" way is oneway"
 
 msgid "The \"to\" way does not start or end at a \"via\" node."
-msgstr ""
+msgstr "The \"to\" way does not start or end at a \"via\" node."
 
 msgid "The \"from\" and the first \"via\" way are not connected."
-msgstr ""
+msgstr "The \"from\" and the first \"via\" way are not connected."
 
 msgid "The \"via\" ways are not connected."
-msgstr ""
+msgstr "The \"via\" ways are not connected."
 
 msgid "The last \"via\" and the \"to\" way are not connected."
-msgstr ""
+msgstr "The last \"via\" and the \"to\" way are not connected."
 
 msgid "Unclosed Ways"
-msgstr ""
+msgstr "Unclosed Ways"
 
 msgid "This tests if ways which should be circular are closed."
 msgstr "This tests if ways which should be circular are closed."
@@ -4226,7 +4525,7 @@ msgid "waterway type {0}"
 msgstr "waterway type {0}"
 
 msgid "boundary type {0}"
-msgstr ""
+msgstr "boundary type {0}"
 
 msgid "building"
 msgstr "building"
@@ -4235,19 +4534,19 @@ msgid "area"
 msgstr "area"
 
 msgid "Unconnected highways"
-msgstr ""
+msgstr "Unconnected highways"
 
 msgid "Unconnected railways"
-msgstr ""
+msgstr "Unconnected railways"
 
 msgid "Unconnected waterways"
-msgstr ""
+msgstr "Unconnected waterways"
 
 msgid "Unconnected natural lands and landuses"
-msgstr ""
+msgstr "Unconnected natural lands and landuses"
 
 msgid "Unconnected power ways"
-msgstr ""
+msgstr "Unconnected power ways"
 
 msgid "This test checks if a way has an endpoint very near to another way."
 msgstr "This test checks if a way has an endpoint very near to another way."
@@ -4264,35 +4563,35 @@ msgstr "Way node near other way"
 msgid "Connected way end node near other way"
 msgstr "Connected way end node near other way"
 
+msgid "Unconnected nodes without physical tags"
+msgstr "Unconnected nodes without physical tags"
+
 msgid "Untagged and unconnected nodes"
-msgstr ""
+msgstr "Untagged and unconnected nodes"
 
 msgid "This test checks for untagged nodes that are not part of any way."
 msgstr "This test checks for untagged nodes that are not part of any way."
 
-msgid "Unconnected nodes without physical tags"
-msgstr ""
-
 msgid "No tags"
-msgstr ""
+msgstr "No tags"
 
 msgid "Has tag containing ''fixme'' or ''FIXME''"
-msgstr ""
+msgstr "Has tag containing ''fixme'' or ''FIXME''"
 
 msgid "Has key ''note'' or ''comment'' or ''description''"
-msgstr ""
+msgstr "Has key ''note'' or ''comment'' or ''description''"
 
 msgid "Has key ''created_by'' or ''converted_by''"
-msgstr ""
+msgstr "Has key ''created_by'' or ''converted_by''"
 
 msgid "Has key ''watch''"
-msgstr ""
+msgstr "Has key ''watch''"
 
 msgid "Has key ''source''"
-msgstr ""
+msgstr "Has key ''source''"
 
 msgid "Untagged, empty and one node ways"
-msgstr ""
+msgstr "Untagged, empty and one node ways"
 
 msgid "This test checks for untagged, empty and one node ways."
 msgstr "This test checks for untagged, empty and one node ways."
@@ -4304,7 +4603,7 @@ msgid "Unnamed junction"
 msgstr "Unnamed junction"
 
 msgid "Untagged ways (commented)"
-msgstr ""
+msgstr "Untagged ways (commented)"
 
 msgid "Untagged ways"
 msgstr "Untagged ways"
@@ -4316,16 +4615,16 @@ msgid "One node ways"
 msgstr "One node ways"
 
 msgid "Way connected to Area"
-msgstr ""
+msgstr "Way connected to Area"
 
 msgid "Checks for ways connected to areas."
-msgstr ""
+msgstr "Checks for ways connected to areas."
 
 msgid "Way terminates on Area"
-msgstr ""
+msgstr "Way terminates on Area"
 
 msgid "Wrongly Ordered Ways"
-msgstr ""
+msgstr "Wrongly Ordered Ways"
 
 msgid "This test checks the direction of water, land and coastline ways."
 msgstr "This test checks the direction of water, land and coastline ways."
@@ -4337,13 +4636,13 @@ msgid "Reversed land: land not on left side"
 msgstr "Reversed land: land not on left side"
 
 msgid "Show this dialog again the next time"
-msgstr ""
+msgstr "Show this dialogue again the next time"
 
 msgid "Do not show again (this operation)"
-msgstr ""
+msgstr "Do not show again (this operation)"
 
 msgid "Do not show again (this session)"
-msgstr ""
+msgstr "Do not show again (this session)"
 
 msgid "Do not show again (remembers choice)"
 msgstr "Do not show again (remembers choice)"
@@ -4355,13 +4654,13 @@ msgid "incomplete"
 msgstr "incomplete"
 
 msgid "House {0}"
-msgstr ""
+msgstr "House {0}"
 
 msgid "House number {0} at {1}"
-msgstr ""
+msgstr "House number {0} at {1}"
 
 msgid "House number {0}"
-msgstr ""
+msgstr "House number {0}"
 
 msgid "highway"
 msgstr "highway"
@@ -4407,7 +4706,7 @@ msgid "Illegal Data"
 msgstr "Illegal Data"
 
 msgid "Offline mode"
-msgstr ""
+msgstr "Offline mode"
 
 msgid "Internal Server Error"
 msgstr "Internal Server Error"
@@ -4425,19 +4724,19 @@ msgid "Authentication Failed"
 msgstr "Authentication Failed"
 
 msgid "Access to redacted version ''{0}'' of {1} {2} is forbidden."
-msgstr ""
+msgstr "Access to redacted version ''{0}'' of {1} {2} is forbidden."
 
 msgid "Authorisation Failed"
 msgstr "Authorisation Failed"
 
 msgid "Client Time Out"
-msgstr ""
+msgstr "Client Time Out"
 
 msgid "Bandwidth Limit Exceeded"
-msgstr ""
+msgstr "Bandwidth Limit Exceeded"
 
 msgid "Communication with OSM server failed"
-msgstr ""
+msgstr "Communication with OSM server failed"
 
 msgid "Authentication failed"
 msgstr "Authentication failed"
@@ -4447,8 +4746,8 @@ msgstr "Unknown host"
 
 msgid "Object deleted"
 msgid_plural "Objects deleted"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Object deleted"
+msgstr[1] "Objects deleted"
 
 msgid "Show help information"
 msgstr "Show help information"
@@ -4457,7 +4756,7 @@ msgid "Downloading \"Message of the day\""
 msgstr "Downloading \"Message of the day\""
 
 msgid "Failed to read MOTD. Exception was: {0}"
-msgstr ""
+msgstr "Failed to read MOTD. Exception was: {0}"
 
 msgid "Message of the day not available"
 msgstr "Message of the day not available"
@@ -4466,14 +4765,15 @@ msgid "Click to close the dialog"
 msgstr "Click to close the dialogue"
 
 msgid "Imagery offset"
-msgstr ""
+msgstr "Imagery offset"
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
 msgctxt "layer"
 msgid "Offset"
-msgstr ""
+msgstr "Offset"
 
 msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
 msgstr "Expected non-empty value for parameter ''{0}'', got ''{1}''"
@@ -4494,16 +4794,17 @@ msgid "Download the bounding box"
 msgstr "Download the bounding box"
 
 msgid "Download the location at the URL (with lat=x&lon=y&zoom=z)"
-msgstr ""
+msgstr "Download the location at the URL (with lat=x&lon=y&zoom=z)"
 
 msgid "Open a file (any file type that can be opened with File/Open)"
 msgstr "Open a file (any file type that can be opened with File/Open)"
 
 msgid "Download the bounding box as raw GPS"
-msgstr ""
+msgstr "Download the bounding box as raw GPS"
 
 msgid "Download the location at the URL (with lat=x&lon=y&zoom=z) as raw GPS"
 msgstr ""
+"Download the location at the URL (with lat=x&lon=y&zoom=z) as raw GPS"
 
 msgid "Select with the given search"
 msgstr "Select with the given search"
@@ -4515,59 +4816,63 @@ msgid "Reset the preferences to default"
 msgstr "Reset the preferences to default"
 
 msgid "Changes preferences according to the XML file"
-msgstr ""
+msgstr "Changes preferences according to the XML file"
 
 msgid "Set preference key to value"
-msgstr ""
+msgstr "Set preference key to value"
 
 msgid "Set the language"
 msgstr "Set the language"
 
 msgid "Displays the JOSM version and exits"
-msgstr ""
+msgstr "Displays the JOSM version and exits"
 
 msgid "Print debugging messages to console"
-msgstr ""
+msgstr "Print debugging messages to console"
 
 msgid "Skip loading plugins"
-msgstr ""
+msgstr "Skip loading plugins"
 
 msgid "Disable access to the given resource(s), separated by comma"
-msgstr ""
+msgstr "Disable access to the given resource(s), separated by comma"
 
 msgid "options provided as Java system properties"
 msgstr "options provided as Java system properties"
 
 msgid "/PATH/TO/JOSM/PREF    "
-msgstr ""
+msgstr "/PATH/TO/JOSM/PREF    "
 
 msgid "Set the preferences directory"
-msgstr ""
+msgstr "Set the preferences directory"
 
 msgid "/PATH/TO/JOSM/USERDATA"
-msgstr ""
+msgstr "/PATH/TO/JOSM/USERDATA"
 
 msgid "Set the user data directory"
-msgstr ""
+msgstr "Set the user data directory"
 
 msgid "/PATH/TO/JOSM/CACHE   "
-msgstr ""
+msgstr "/PATH/TO/JOSM/CACHE   "
 
 msgid "Set the cache directory"
-msgstr ""
+msgstr "Set the cache directory"
 
 msgid "/PATH/TO/JOSM/HOMEDIR "
-msgstr ""
+msgstr "/PATH/TO/JOSM/HOMEDIR "
 
 msgid ""
 "Relocate all 3 directories to homedir. Cache directory will be in "
 "homedir/cache"
 msgstr ""
+"Relocate all 3 directories to homedir. Cache directory will be in "
+"homedir/cache"
 
 msgid ""
 "-Djosm.home has lower precedence, i.e. the specific setting overrides the "
 "general one"
 msgstr ""
+"-Djosm.home has lower precedence, i.e. the specific setting overrides the "
+"general one"
 
 msgid ""
 "note: For some tasks, JOSM needs a lot of memory. It can be necessary to add "
@@ -4594,19 +4899,19 @@ msgid "Make sure you load some data if you use --selection."
 msgstr "Make sure you load some data if you use --selection."
 
 msgid "Printing debugging messages to console"
-msgstr ""
+msgstr "Printing debugging messages to console"
 
 msgid "Plugin loading skipped"
-msgstr ""
+msgstr "Plugin loading skipped"
 
 msgid "Enabled detailed debug level (trace)"
-msgstr ""
+msgstr "Enabled detailed debug level (trace)"
 
 msgid "Initializing"
 msgstr "Initialising"
 
 msgid "Updating plugins"
-msgstr ""
+msgstr "Updating plugins"
 
 msgid "Installing updated plugins"
 msgstr "Installing updated plug-ins"
@@ -4627,58 +4932,69 @@ msgid ""
 "''{0}'' is not a valid value for argument ''{1}''. Possible values are {2}, "
 "possibly delimited by commas."
 msgstr ""
+"''{0}'' is not a valid value for argument ''{1}''. Possible values are {2}, "
+"possibly delimited by commas."
 
 msgid ""
 "JOSM is running in offline mode. This resource will not be available: {0}"
 msgid_plural ""
 "JOSM is running in offline mode. These resources will not be available: {0}"
 msgstr[0] ""
+"JOSM is running in offline mode. This resource will not be available: {0}"
 msgstr[1] ""
+"JOSM is running in offline mode. These resources will not be available: {0}"
 
 msgid ""
 "Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
 msgstr ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
 
 msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
-msgstr ""
+msgstr "Detected useable IPv6 network, prefering IPv6 over IPv4."
 
 msgid ""
 "Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
 "restart."
 msgstr ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
 
 msgid "Unsaved osm data"
-msgstr ""
+msgstr "Unsaved osm data"
 
 msgid "Restore"
-msgstr ""
+msgstr "Restore"
 
 msgid "Discard"
-msgstr ""
+msgstr "Discard"
 
 msgid "JOSM found {0} unsaved osm data layer. "
 msgid_plural "JOSM found {0} unsaved osm data layers. "
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "JOSM found {0} unsaved osm data layer. "
+msgstr[1] "JOSM found {0} unsaved osm data layers. "
 
 msgid ""
 "It looks like JOSM crashed last time. Would you like to restore the data?"
 msgstr ""
+"It looks like JOSM crashed last time. Would you like to restore the data?"
 
 msgid "Change proxy settings"
-msgstr ""
+msgstr "Change proxy settings"
 
 msgid "Proxy errors occurred"
-msgstr ""
+msgstr "Proxy errors occurred"
 
 msgid ""
 "JOSM tried to access the following resources:<br>{0}but <b>failed</b> to do "
 "so, because of the following proxy errors:<br>{1}Would you like to change "
 "your proxy settings now?"
 msgstr ""
+"JOSM tried to access the following resources:<br>{0}but <b>failed</b> to do "
+"so, because of the following proxy errors:<br>{1}Would you like to change "
+"your proxy settings now?"
 
 msgid "Network errors occurred"
-msgstr ""
+msgstr "Network errors occurred"
 
 msgid ""
 "JOSM tried to access the following resources:<br>{0}but <b>failed</b> to do "
@@ -4686,84 +5002,100 @@ msgid ""
 "missing proxy configuration.<br>Would you like to change your proxy settings "
 "now?"
 msgstr ""
+"JOSM tried to access the following resources:<br>{0}but <b>failed</b> to do "
+"so, because of the following network errors:<br>{1}It may be due to a "
+"missing proxy configuration.<br>Would you like to change your proxy settings "
+"now?"
 
+msgctxt "menu"
 msgid "File"
-msgstr "File"
+msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
-msgstr "View"
+msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
-msgstr "Tools"
+msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
-msgstr "Selection"
+msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
-msgstr "Presets"
+msgstr ""
 
 msgid "More..."
-msgstr ""
+msgstr "More..."
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
+msgctxt "menu"
+msgid "Help"
+msgstr ""
+
 msgid "Menu: {0}"
 msgstr "Menu: {0}"
 
-msgid "Save and load the current session (list of layers, etc.)"
-msgstr ""
-
 msgid "Edit toolbar"
-msgstr ""
+msgstr "Edit toolbar"
 
 msgid "Toggles the visibility of the edit toolbar (i.e., the vertical tool)"
-msgstr ""
+msgstr "Toggles the visibility of the edit toolbar (i.e., the vertical tool)"
 
 msgid "Preset preferences"
-msgstr ""
+msgstr "Preset preferences"
 
 msgid "Click to open the tagging presets tab in the preferences"
-msgstr ""
+msgstr "Click to open the tagging presets tab in the preferences"
 
 msgid "Imagery preferences"
-msgstr ""
+msgstr "Imagery preferences"
 
 msgid "Click to open the imagery tab in the preferences"
-msgstr ""
+msgstr "Click to open the imagery tab in the preferences"
 
 msgid "Search menu items"
-msgstr ""
+msgstr "Search menu items"
 
+msgctxt "menu"
 msgid "Audio"
-msgstr "Audio"
+msgstr ""
 
 msgid "Do not hide toolbar"
-msgstr ""
+msgstr "Do not hide toolbar"
 
 msgid "Hide this button"
-msgstr ""
+msgstr "Hide this button"
 
 msgid "Click the arrow at the bottom to show it again."
-msgstr ""
+msgstr "Click the arrow at the bottom to show it again."
 
 msgid "Hide edit toolbar"
-msgstr ""
+msgstr "Hide edit toolbar"
 
 msgid "Hide or show this toggle button"
-msgstr ""
+msgstr "Hide or show this toggle button"
 
 msgid "Move right"
 msgstr "Move right"
@@ -4790,19 +5122,19 @@ msgid "scale"
 msgstr "scale"
 
 msgid "Status bar background"
-msgstr ""
+msgstr "Status bar background"
 
 msgid "Status bar background: active"
-msgstr ""
+msgstr "Status bar background: active"
 
 msgid "Status bar foreground"
-msgstr ""
+msgstr "Status bar foreground"
 
 msgid "Status bar foreground: active"
-msgstr ""
+msgstr "Status bar foreground: active"
 
 msgid "{0} ({1})"
-msgstr ""
+msgstr "{0} ({1})"
 
 msgid "The geographic latitude at the mouse pointer."
 msgstr "The geographic latitude at the mouse pointer."
@@ -4836,10 +5168,10 @@ msgid "User:"
 msgstr "User:"
 
 msgid "Do not hide status bar"
-msgstr ""
+msgstr "Do not hide status bar"
 
 msgid "System of measurement changed to {0}"
-msgstr ""
+msgstr "System of measurement changed to {0}"
 
 msgid "Layer not in list."
 msgstr "layer not in list."
@@ -4848,111 +5180,67 @@ msgid "Layer ''{0}'' must be in list of layers"
 msgstr "Layer ''{0}'' must be in list of layers"
 
 msgid "Default (open, closed, new)"
-msgstr ""
+msgstr "Default (open, closed, new)"
 
 msgid "Username"
 msgstr "Username"
 
 msgid "Created date"
-msgstr ""
+msgstr "Created date"
 
 msgid "Last change date"
-msgstr ""
+msgstr "Last change date"
 
 msgid "Select note sorting method"
-msgstr ""
+msgstr "Select note sorting method"
 
 msgid "Click to cancel the current operation"
 msgstr "Click to cancel the current operation"
 
 msgid "In background"
-msgstr ""
+msgstr "In background"
 
 msgid "Click to run job in background"
-msgstr ""
+msgstr "Click to run job in background"
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
+msgid " ({0})"
+msgstr " ({0})"
 
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
+msgid "{0} completed in {1}"
+msgstr "{0} completed in {1}"
 
-msgid "Details..."
-msgstr ""
+msgid "Enlarge"
+msgstr "Enlarge"
 
-msgid "Hide this message and never show it again"
-msgstr ""
+msgid "Shrink"
+msgstr "Shrink"
 
 msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
+"<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
+"level.</html>"
 msgstr ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
+"<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
+"level.</html>"
 
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
+msgid "Zoom level:"
+msgstr "Zoom level:"
+
+msgid "from tile"
+msgstr "from tile"
+
+msgid "up to tile"
+msgstr "up to tile"
 
 msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] "Deleting {0} object"
-msgstr[1] "Deleting {0} objects"
-
-msgid "Delete objects"
-msgstr "Delete objects"
-
-msgid "To delete"
-msgstr "To delete"
-
-msgid "From Relation"
-msgstr "From Relation"
-
-msgid "Pos."
-msgstr "Pos."
-
-msgid "Role"
-msgstr "Role"
-
-msgid "Click to close the dialog and remove the object from the relations"
-msgstr "Click to close the dialogue and remove the object from the relations"
-
-msgid "Click to close the dialog and to abort deleting the objects"
-msgstr "Click to close the dialogue and to abort deleting the objects"
-
-msgid ""
-"<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
-"level.</html>"
-msgstr ""
-"<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
-"level.</html>"
-
-msgid "Zoom level:"
-msgstr "Zoom level:"
-
-msgid "from tile"
-msgstr "from tile"
-
-msgid "up to tile"
-msgstr "up to tile"
-
-msgid ""
-"<html>Alternatively you may enter a <strong>tile address</strong> for a "
-"single tile in the format <i>zoomlevel/x/y</i>, i.e. <i>15/256/223</i>. Tile "
-"addresses in the format <i>zoom,x,y</i> or <i>zoom;x;y</i> are valid "
-"too.</html>"
+"<html>Alternatively you may enter a <strong>tile address</strong> for a "
+"single tile in the format <i>zoomlevel/x/y</i>, i.e. <i>15/256/223</i>. Tile "
+"addresses in the format <i>zoom,x,y</i> or <i>zoom;x;y</i> are valid "
+"too.</html>"
 msgstr ""
+"<html>Alternatively you may enter a <strong>tile address</strong> for a "
+"single tile in the format <i>zoomlevel/x/y</i>, i.e. <i>15/256/223</i>. Tile "
+"addresses in the format <i>zoom,x,y</i> or <i>zoom;x;y</i> are valid "
+"too.</html>"
 
 msgid "Tile address:"
 msgstr "Tile address:"
@@ -4973,97 +5261,97 @@ msgid "The current value isn''t a valid tile index for the given zoom level"
 msgstr "The current value isn''t a valid tile index for the given zoom level"
 
 msgid "Conflict background: no conflict"
-msgstr ""
+msgstr "Conflict background: no conflict"
 
 msgid "Conflict background: decided"
-msgstr ""
+msgstr "Conflict background: decided"
 
 msgid "Conflict background: undecided"
-msgstr ""
+msgstr "Conflict background: undecided"
 
 msgid "Conflict background: drop"
-msgstr ""
+msgstr "Conflict background: drop"
 
 msgid "Conflict background: keep"
-msgstr ""
+msgstr "Conflict background: keep"
 
 msgid "Conflict background: combined"
-msgstr ""
+msgstr "Conflict background: combined"
 
 msgid "Conflict background: selected"
-msgstr ""
+msgstr "Conflict background: selected"
 
 msgid "Conflict foreground: undecided"
-msgstr ""
+msgstr "Conflict foreground: undecided"
 
 msgid "Conflict foreground: drop"
-msgstr ""
+msgstr "Conflict foreground: drop"
 
 msgid "Conflict foreground: keep"
-msgstr ""
+msgstr "Conflict foreground: keep"
 
 msgid "Conflict background: empty row"
-msgstr ""
+msgstr "Conflict background: empty row"
 
 msgid "Conflict background: frozen"
-msgstr ""
+msgstr "Conflict background: frozen"
 
 msgid "Conflict background: in comparison"
-msgstr ""
+msgstr "Conflict background: in comparison"
 
 msgid "Conflict foreground: in comparison"
-msgstr ""
+msgstr "Conflict foreground: in comparison"
 
 msgid "Conflict background"
-msgstr ""
+msgstr "Conflict background"
 
 msgid "Conflict foreground"
-msgstr ""
+msgstr "Conflict foreground"
 
 msgid "Conflict background: not in opposite"
-msgstr ""
+msgstr "Conflict background: not in opposite"
 
 msgid "Conflict background: in opposite"
-msgstr ""
+msgstr "Conflict background: in opposite"
 
 msgid "Conflict background: same position in opposite"
-msgstr ""
+msgstr "Conflict background: same position in opposite"
 
 msgid "Conflict background: keep one tag"
-msgstr ""
+msgstr "Conflict background: keep one tag"
 
 msgid "Conflict foreground: keep one tag"
-msgstr ""
+msgstr "Conflict foreground: keep one tag"
 
 msgid "Conflict background: drop tag"
-msgstr ""
+msgstr "Conflict background: drop tag"
 
 msgid "Conflict foreground: drop tag"
-msgstr ""
+msgstr "Conflict foreground: drop tag"
 
 msgid "Conflict background: keep all tags"
-msgstr ""
+msgstr "Conflict background: keep all tags"
 
 msgid "Conflict foreground: keep all tags"
-msgstr ""
+msgstr "Conflict foreground: keep all tags"
 
 msgid "Conflict background: sum all numeric tags"
-msgstr ""
+msgstr "Conflict background: sum all numeric tags"
 
 msgid "Conflict foreground: sum all numeric tags"
-msgstr ""
+msgstr "Conflict foreground: sum all numeric tags"
 
 msgid "Conflict background: keep member"
-msgstr ""
+msgstr "Conflict background: keep member"
 
 msgid "Conflict foreground: keep member"
-msgstr ""
+msgstr "Conflict foreground: keep member"
 
 msgid "Conflict background: remove member"
-msgstr ""
+msgstr "Conflict background: remove member"
 
 msgid "Conflict foreground: remove member"
-msgstr ""
+msgstr "Conflict foreground: remove member"
 
 msgid "My with Their"
 msgstr "My with Their"
@@ -5151,9 +5439,11 @@ msgid ""
 "The following objects could not be copied to the target object<br>because "
 "they are deleted in the target dataset:"
 msgstr ""
+"The following objects could not be copied to the target object<br>because "
+"they are deleted in the target dataset:"
 
 msgid "Merging deleted objects failed"
-msgstr ""
+msgstr "Merging deleted objects failed"
 
 msgid "List in role {0} is currently not participating in a compare pair."
 msgstr "list in role {0} is currently not participating in a compare pair"
@@ -5183,6 +5473,8 @@ msgid ""
 "List of merged elements. They will replace the list of my elements when the "
 "merge decisions are applied."
 msgstr ""
+"List of merged elements. They will replace the list of my elements when the "
+"merge decisions are applied."
 
 msgid "Their version"
 msgstr "Their version"
@@ -5203,7 +5495,7 @@ msgid "Copy my selected elements to the end of the list of merged elements."
 msgstr "Copy my selected elements to the end of the list of merged elements"
 
 msgid "> before"
-msgstr ""
+msgstr "> before"
 
 msgid ""
 "Copy my selected elements before the first selected element in the list of "
@@ -5213,7 +5505,7 @@ msgstr ""
 "merged elements"
 
 msgid "> after"
-msgstr ""
+msgstr "> after"
 
 msgid ""
 "Copy my selected elements after the first selected element in the list of "
@@ -5223,7 +5515,7 @@ msgstr ""
 "merged elements"
 
 msgid "< top"
-msgstr ""
+msgstr "< top"
 
 msgid ""
 "Copy their selected element to the start of the list of merged elements."
@@ -5231,7 +5523,7 @@ msgstr ""
 "Copy their selected element to the start of the list of merged elements"
 
 msgid "< bottom"
-msgstr ""
+msgstr "< bottom"
 
 msgid ""
 "Copy their selected elements to the end of the list of merged elements."
@@ -5239,7 +5531,7 @@ msgstr ""
 "Copy their selected elements to the end of the list of merged elements"
 
 msgid "< before"
-msgstr ""
+msgstr "< before"
 
 msgid ""
 "Copy their selected elements before the first selected element in the list "
@@ -5249,7 +5541,7 @@ msgstr ""
 "of merged elements"
 
 msgid "< after"
-msgstr ""
+msgstr "< after"
 
 msgid ""
 "Copy their selected element after the first selected element in the list of "
@@ -5268,7 +5560,7 @@ msgid "Up"
 msgstr "Up"
 
 msgid "Move up the selected entries by one position."
-msgstr ""
+msgstr "Move up the selected entries by one position."
 
 msgid "Down"
 msgstr "Down"
@@ -5360,10 +5652,10 @@ msgid "not deleted"
 msgstr "not deleted"
 
 msgid "Keep my coordinates"
-msgstr ""
+msgstr "Keep my coordinates"
 
 msgid "Keep their coordinates"
-msgstr ""
+msgstr "Keep their coordinates"
 
 msgid "Undecide conflict between different coordinates"
 msgstr "Undecide conflict between different coordinates"
@@ -5377,6 +5669,9 @@ msgstr "Keep their deleted state"
 msgid "Undecide conflict between deleted state"
 msgstr "Undecide conflict between deleted state"
 
+msgid "Role"
+msgstr "Role"
+
 msgid "Primitive"
 msgstr "Primitive"
 
@@ -5456,16 +5751,26 @@ msgid_plural ""
 "are shown a dialog to decide how to adapt the relations.<br/><br/>Do you "
 "want to continue?"
 msgstr[0] ""
+"You are about to combine {1} object, which is part of {0} "
+"relation:<br/>{2}Combining these objects may break this relation. If you are "
+"unsure, please cancel this operation.<br/>If you want to continue, you are "
+"shown a dialog to decide how to adapt the relation.<br/><br/>Do you want to "
+"continue?"
 msgstr[1] ""
+"You are about to combine {1} objects, which are part of {0} "
+"relations:<br/>{2}Combining these objects may break these relations. If you "
+"are unsure, please cancel this operation.<br/>If you want to continue, you "
+"are shown a dialog to decide how to adapt the relations.<br/><br/>Do you "
+"want to continue?"
 
 msgid "Combine confirmation"
-msgstr ""
+msgstr "Combine confirmation"
 
 msgid ", "
-msgstr ""
+msgstr ", "
 
 msgid "<i>missing</i>"
-msgstr ""
+msgstr "<i>missing</i>"
 
 msgid ""
 "You are about to combine {0} objects, but the following tags are used "
@@ -5478,7 +5783,15 @@ msgid_plural ""
 "may have unwanted tags.<br/>If you want to continue, you are shown a dialog "
 "to fix the conflicting tags.<br/><br/>Do you want to continue?"
 msgstr[0] ""
+"You are about to combine {0} objects, but the following tags are used "
+"conflictingly:<br/>{1}If these objects are combined, the resulting object "
+"may have unwanted tags.<br/>If you want to continue, you are shown a "
+"dialogue to fix the conflicting tags.<br/><br/>Do you want to continue?"
 msgstr[1] ""
+"You are about to combine {0} objects, but the following tags are used "
+"conflictingly:<br/>{1}If these objects are combined, the resulting object "
+"may have unwanted tags.<br/>If you want to continue, you are shown a "
+"dialogue to fix the conflicting tags.<br/><br/>Do you want to continue?"
 
 msgid "Choose a value"
 msgstr "Choose a value"
@@ -5490,7 +5803,7 @@ msgid "all"
 msgstr "all"
 
 msgid "sum"
-msgstr ""
+msgstr "sum"
 
 msgid "Please decide which values to keep"
 msgstr "Please decide which values to keep"
@@ -5501,6 +5814,7 @@ msgstr "Value ''{0}'' is going to be applied for key ''{1}''"
 msgid ""
 "All numeric values sumed as ''{0}'' are going to be applied for key ''{1}''"
 msgstr ""
+"All numeric values summed as ''{0}'' are going to be applied for key ''{1}''"
 
 msgid "The key ''{0}'' and all its values are going to be removed"
 msgstr "The key ''{0}'' and all its values are going to be removed"
@@ -5589,7 +5903,7 @@ msgid "Key:"
 msgstr "Key:"
 
 msgid "<html>Enter a tag key, e.g. <strong><tt>fixme</tt></strong></html>"
-msgstr ""
+msgstr "<html>Enter a tag key, e.g. <strong><tt>fixme</tt></strong></html>"
 
 msgid "Value:"
 msgstr "Value:"
@@ -5597,6 +5911,7 @@ msgstr "Value:"
 msgid ""
 "<html>Enter a tag value, e.g. <strong><tt>check members</tt></strong></html>"
 msgstr ""
+"<html>Enter a tag value, e.g. <strong><tt>check members</tt></strong></html>"
 
 msgid ""
 "<html>The combined ways are members in one or more relations. Please decide "
@@ -5606,6 +5921,12 @@ msgid ""
 "ways that are members of the same relation: the combined way will take the "
 "place of the original way in the relation.</html>"
 msgstr ""
+"<html>The combined ways are members in one or more relations. Please decide "
+"whether you want to <strong>keep</strong> these memberships for the combined "
+"way or whether you want to <strong>remove</strong> them.<br>The default is "
+"to <strong>keep</strong> the first way and <strong>remove</strong> the other "
+"ways that are members of the same relation: the combined way will take the "
+"place of the original way in the relation.</html>"
 
 msgid ""
 "<html>The merged nodes are members in one or more relations. Please decide "
@@ -5615,10 +5936,19 @@ msgid ""
 "other nodes that are members of the same relation: the target node will take "
 "the place of the original node in the relation.</html>"
 msgstr ""
+"<html>The merged nodes are members in one or more relations. Please decide "
+"whether you want to <strong>keep</strong> these memberships for the target "
+"node or whether you want to <strong>remove</strong> them.<br>The default is "
+"to <strong>keep</strong> the first node and <strong>remove</strong> the "
+"other nodes that are members of the same relation: the target node will take "
+"the place of the original node in the relation.</html>"
 
 msgid "Apply this role to all members"
 msgstr "Apply this role to all members"
 
+msgid "Pos."
+msgstr "Pos."
+
 msgid "Orig. Way"
 msgstr "Orig. Way"
 
@@ -5689,36 +6019,39 @@ msgid "Toggle: {0}"
 msgstr "Toggle: {0}"
 
 msgid "Command Stack: Undo: {0} / Redo: {1}"
-msgstr ""
+msgstr "Command Stack: Undo: {0} / Redo: {1}"
 
 msgid ""
 "Selects the objects that take part in this command (unless currently deleted)"
 msgstr ""
+"Selects the objects that take part in this command (unless currently deleted)"
 
 msgid "Select and zoom"
-msgstr ""
+msgstr "Select and zoom"
 
 msgid ""
 "Selects the objects that take part in this command (unless currently "
 "deleted), then and zooms to it"
 msgstr ""
+"Selects the objects that take part in this command (unless currently "
+"deleted), then zooms to it"
 
 msgid "Undo the selected and all later commands"
-msgstr ""
+msgstr "Undo the selected and all later commands"
 
 msgid "Redo the selected and all earlier commands"
-msgstr ""
+msgstr "Redo the selected and all earlier commands"
 
 msgid "Resolve conflicts."
 msgstr "Resolve conflicts."
 
 msgid "Conflict: {0} unresolved"
 msgid_plural "Conflicts: {0} unresolved"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Conflict: {0} unresolved"
+msgstr[1] "Conflicts: {0} unresolved"
 
 msgid "Rel.:{0} / Ways:{1} / Nodes:{2}"
-msgstr ""
+msgstr "Rel.:{0} / Ways:{1} / Nodes:{2}"
 
 msgid "Resolve"
 msgstr "Resolve"
@@ -5776,6 +6109,47 @@ msgstr "Resolve conflicts"
 msgid "Resolve conflicts for ''{0}''"
 msgstr "Resolve conflicts for ''{0}''"
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] "Deleting {0} object"
+msgstr[1] "Deleting {0} objects"
+
+msgid "Delete objects"
+msgstr "Delete objects"
+
+msgid "To delete"
+msgstr "To delete"
+
+msgid "From Relation"
+msgstr "From Relation"
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr "Click to close the dialogue and remove the object from the relations"
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr "Click to close the dialogue and to abort deleting the objects"
+
 msgid "Filter objects and hide/disable them."
 msgstr "Filter objects and hide/disable them."
 
@@ -5783,13 +6157,13 @@ msgid "Enable filter"
 msgstr "Enable filter"
 
 msgid "Multikey: {0}"
-msgstr ""
+msgstr "Multikey: {0}"
 
 msgid "Hide filter"
-msgstr ""
+msgstr "Hide filter"
 
 msgid "Hiding filter"
-msgstr ""
+msgstr "Hiding filter"
 
 msgid "Inverse filter"
 msgstr "Inverse filter"
@@ -5816,10 +6190,10 @@ msgid "Move filter down."
 msgstr "Move filter down."
 
 msgid "Filter Hidden:{0} Disabled:{1}"
-msgstr ""
+msgstr "Filter Hidden:{0} Disabled:{1}"
 
 msgid "Error in filter"
-msgstr ""
+msgstr "Error in filter"
 
 msgctxt "filter"
 msgid "E"
@@ -5858,199 +6232,248 @@ msgid "F"
 msgstr "F"
 
 msgid "<h2>Filter active</h2>"
-msgstr ""
+msgstr "<h2>Filter active</h2>"
 
 msgid "<p><b>{0}</b> object hidden"
 msgid_plural "<p><b>{0}</b> objects hidden"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "<p><b>{0}</b> object hidden"
+msgstr[1] "<p><b>{0}</b> objects hidden"
 
 msgid "<b>{0}</b> object disabled"
 msgid_plural "<b>{0}</b> objects disabled"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "<b>{0}</b> object disabled"
+msgstr[1] "<b>{0}</b> objects disabled"
 
 msgid "</p><p>Close the filter dialog to see all objects.<p></html>"
-msgstr ""
+msgstr "</p><p>Close the filter dialogue to see all objects.<p></html>"
 
 msgid "Advanced object info"
-msgstr ""
+msgstr "Advanced object info"
 
 msgid "map style"
-msgstr ""
+msgstr "map style"
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
-msgstr ""
+msgstr "not in data set"
 
 msgid "Node: "
-msgstr ""
+msgstr "Node: "
 
 msgid "Way: "
 msgstr "Way: "
 
 msgid "Relation: "
-msgstr ""
+msgstr "Relation: "
 
 msgid "deleted-on-server"
-msgstr ""
+msgstr "deleted-on-server"
 
 msgid "modified"
-msgstr ""
+msgstr "modified"
 
 msgid "filtered/hidden"
-msgstr ""
+msgstr "filtered/hidden"
 
 msgid "filtered/disabled"
-msgstr ""
+msgstr "filtered/disabled"
 
 msgid "has direction keys (reversed)"
-msgstr ""
+msgstr "has direction keys (reversed)"
 
 msgid "has direction keys"
-msgstr ""
+msgstr "has direction keys"
 
 msgid "State: "
-msgstr ""
+msgstr "State: "
 
 msgid "Data Set: "
-msgstr ""
+msgstr "Data Set: "
 
 msgid "Edited at: "
-msgstr ""
+msgstr "Edited at: "
 
 msgid "<new object>"
 msgstr "<new object>"
 
 msgid "Edited by: "
-msgstr ""
+msgstr "Edited by: "
 
 msgid "Version: "
-msgstr ""
+msgstr "Version: "
 
 msgid "In changeset: "
-msgstr ""
+msgstr "In changeset: "
 
 msgid "Tags: "
-msgstr ""
+msgstr "Tags: "
 
 msgid "Centroid: "
-msgstr ""
+msgstr "Centroid: "
 
 msgid "{0} Member: "
 msgid_plural "{0} Members: "
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} Member: "
+msgstr[1] "{0} Members: "
 
 msgid " as \"{0}\""
-msgstr ""
+msgstr " as \"{0}\""
 
 msgid "{0} Nodes: "
-msgstr ""
+msgstr "{0} Nodes: "
 
 msgid "Bounding box: "
-msgstr ""
+msgstr "Bounding box: "
 
 msgid "Bounding box (projected): "
-msgstr ""
+msgstr "Bounding box (projected): "
 
 msgid "Center of bounding box: "
-msgstr ""
+msgstr "Centre of bounding box: "
 
 msgid "Coordinates: "
-msgstr ""
+msgstr "Coordinates: "
 
 msgid "Coordinates (projected): "
-msgstr ""
+msgstr "Coordinates (projected): "
 
 msgid "Part of: "
-msgstr ""
+msgstr "Part of: "
 
 msgid "In conflict with: "
-msgstr ""
+msgstr "In conflict with: "
 
 msgid "Styles Cache for \"{0}\":"
-msgstr ""
+msgstr "Styles Cache for \"{0}\":"
 
 msgid ""
 "\n"
 "\n"
 "> applying {0} style \"{1}\"\n"
 msgstr ""
+"\n"
+"\n"
+"> applying {0} style \"{1}\"\n"
 
 msgid ""
 "\n"
 "Range:{0}"
 msgstr ""
+"\n"
+"Range:{0}"
 
 msgid ""
 "\n"
 "\n"
 "> skipping \"{0}\" (not active)"
 msgstr ""
+"\n"
+"\n"
+"> skipping \"{0}\" (not active)"
 
 msgid ""
 "\n"
 "\n"
 "List of generated Styles:\n"
 msgstr ""
+"\n"
+"\n"
+"List of generated styles:\n"
 
 msgid "The 2 selected objects have identical style caches."
-msgstr ""
+msgstr "The 2 selected objects have identical style caches."
 
 msgid "The 2 selected objects have different style caches."
-msgstr ""
+msgstr "The 2 selected objects have different style caches."
 
 msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
+"Warning: The 2 selected objects have equal, but not identical style caches."
+
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "xml"
-msgstr ""
+msgstr "xml"
 
 msgid "mapcss"
-msgstr ""
+msgstr "mapcss"
 
 msgid "unknown"
 msgstr "unknown"
 
-msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+msgid "Enter the coordinates for the new node."
 msgstr ""
 
-msgid "Projected coordinates:"
+msgid ""
+"You can separate longitude and latitude with space, comma or semicolon."
 msgstr ""
 
 msgid ""
-"Enter easting and northing (x and y) separated by space, comma or semicolon."
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
 msgstr ""
 
-msgid "Lat/Lon"
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
 msgstr ""
 
-msgid "East/North"
+msgid "Coordinate value can be in one of three formats:"
 msgstr ""
 
-msgid "Please enter a GPS coordinates"
+msgid "<i>degrees</i><tt>°</tt>"
 msgstr ""
 
-msgid "Please enter a Easting and Northing"
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
 msgstr ""
 
-msgid "Toggle visibility of layer: {0}"
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
 msgstr ""
 
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
+msgstr ""
+
+msgid "Projected coordinates:"
+msgstr "Projected coordinates:"
+
+msgid ""
+"Enter easting and northing (x and y) separated by space, comma or semicolon."
+msgstr ""
+"Enter easting and northing (x and y) separated by space, comma or semicolon."
+
+msgid "Lat/Lon"
+msgstr "Lat/Lon"
+
+msgid "East/North"
+msgstr "East/North"
+
+msgid "Please enter a GPS coordinates"
+msgstr "Please enter GPS coordinates"
+
+msgid "Please enter a Easting and Northing"
+msgstr "Please enter an Easting and Northing"
+
+msgid "Toggle visibility of layer: {0}"
+msgstr "Toggle visibility of layer: {0}"
+
 msgid "Open a list of all loaded layers."
 msgstr "Open a list of all loaded layers."
 
@@ -6058,18 +6481,24 @@ msgid "Delete the selected layers."
 msgstr "Delete the selected layers."
 
 msgid "Show/hide"
-msgstr ""
+msgstr "Show/hide"
 
 msgid "Toggle visible state of the selected layer."
 msgstr "Toggle visible state of the selected layer."
 
 msgid "Show/hide layer"
-msgstr ""
+msgstr "Show/hide layer"
 
 msgid "Opacity"
-msgstr ""
+msgstr "Opacity"
 
 msgid "Adjust opacity of the layer."
+msgstr "Adjust opacity of the layer."
+
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
 msgstr ""
 
 msgid "Activate"
@@ -6079,7 +6508,7 @@ msgid "Activate the selected layer"
 msgstr "Activate the selected layer"
 
 msgid "Activate layer"
-msgstr ""
+msgstr "Activate layer"
 
 msgid "Merge this layer into another layer"
 msgstr "Merge this layer into another layer"
@@ -6094,16 +6523,16 @@ msgid "Copy {1} of {0}"
 msgstr "Copy {1} of {0}"
 
 msgid "layer is currently visible (click to hide layer)"
-msgstr ""
+msgstr "layer is currently visible (click to hide layer)"
 
 msgid "layer is currently hidden (click to show layer)"
-msgstr ""
+msgstr "layer is currently hidden (click to show layer)"
 
 msgid "this layer is the active layer"
-msgstr ""
+msgstr "this layer is the active layer"
 
 msgid "this layer is not currently active (click to activate)"
-msgstr ""
+msgstr "this layer is not currently active (click to activate)"
 
 msgid "Move the selected layer one row up."
 msgstr "Move the selected layer one row up."
@@ -6115,130 +6544,136 @@ msgid "Information about layer"
 msgstr "Information about layer"
 
 msgid "Map paint preferences"
-msgstr ""
+msgstr "Map paint preferences"
 
 msgid "Map Paint Styles"
 msgstr "Map Paint Styles"
 
 msgid "configure the map painting style"
-msgstr ""
+msgstr "configure the map painting style"
 
 msgid "MapPaint"
-msgstr ""
+msgstr "MapPaint"
 
 msgid "On/Off"
-msgstr ""
+msgstr "On/Off"
 
 msgid "Turn selected styles on or off"
-msgstr ""
+msgstr "Turn selected styles on or off"
 
 msgid "Move the selected entry one row down."
-msgstr ""
+msgstr "Move the selected entry one row down."
 
 msgid "Move the selected entry one row up."
-msgstr ""
+msgstr "Move the selected entry one row up."
 
 msgid "Reload from file"
-msgstr ""
+msgstr "Reload from file"
 
 msgid "reload selected styles from file"
-msgstr ""
+msgstr "reload selected styles from file"
 
 msgid "Save as..."
-msgstr ""
+msgstr "Save as..."
 
 msgid "Save a copy of this Style to file and add it to the list"
-msgstr ""
+msgstr "Save a copy of this Style to file and add it to the list"
 
 msgid "Map paint style file (*.mapcss, *.zip)"
-msgstr ""
+msgstr "Map paint style file (*.mapcss, *.zip)"
 
 msgid "Map paint style file (*.xml, *.zip)"
-msgstr ""
+msgstr "Map paint style file (*.xml, *.zip)"
 
 msgid "Reloading style sources"
-msgstr ""
+msgstr "Reloading style sources"
 
 msgid "Save style ''{0}'' as ''{1}''"
-msgstr ""
+msgstr "Save style ''{0}'' as ''{1}''"
 
 msgid "view meta information, error log and source definition"
-msgstr ""
+msgstr "view meta information, error log and source definition"
 
 msgid "Map Style info"
-msgstr ""
+msgstr "Map Style info"
 
 msgid "Source"
 msgstr "Source"
 
 msgid "Title:"
-msgstr ""
+msgstr "Title:"
 
 msgid "URL:"
-msgstr ""
+msgstr "URL:"
 
 msgid "Built-in Style, internal path:"
-msgstr ""
+msgstr "Built-in Style, internal path:"
 
 msgid "Path:"
-msgstr ""
+msgstr "Path:"
 
 msgid "Icon:"
-msgstr ""
+msgstr "Icon:"
 
 msgid "Background:"
-msgstr ""
+msgstr "Background:"
 
 msgid "Style is currently active?"
-msgstr ""
+msgstr "Style is currently active?"
 
 msgid "No"
 msgstr "No"
 
 msgid "Style settings"
-msgstr ""
+msgstr "Style settings"
 
 msgid "Customize the style"
+msgstr "Customize the style"
+
+msgid "Mini map"
 msgstr ""
 
-msgid "List of notes"
+msgid "Displays a small map of the current edit location"
 msgstr ""
 
+msgid "List of notes"
+msgstr "List of notes"
+
 msgid "Add comment"
-msgstr ""
+msgstr "Add comment"
 
 msgid "Comment"
 msgstr "Comment"
 
 msgid "Comment on note"
-msgstr ""
+msgstr "Comment on note"
 
 msgid "Add comment to note:"
-msgstr ""
+msgstr "Add comment to note:"
 
 msgid "Close note"
-msgstr ""
+msgstr "Close note"
 
 msgid "Close note with message:"
-msgstr ""
+msgstr "Close note with message:"
 
 msgid "Create a new note"
-msgstr ""
+msgstr "Create a new note"
 
 msgid "Create"
-msgstr ""
+msgstr "Create"
 
 msgid "Reopen note"
-msgstr ""
+msgstr "Reopen note"
 
 msgid "Reopen"
-msgstr ""
+msgstr "Reopen"
 
 msgid "Reopen note with message:"
-msgstr ""
+msgstr "Reopen note with message:"
 
 msgid "Sort notes"
-msgstr ""
+msgstr "Sort notes"
 
 msgid "Sort"
 msgstr "Sort"
@@ -6248,10 +6683,10 @@ msgstr "Object type:"
 
 msgctxt "osm object types"
 msgid "mixed"
-msgstr ""
+msgstr "mixed"
 
 msgid "Choose the OSM object type"
-msgstr ""
+msgstr "Choose the OSM object type"
 
 msgid "Object ID:"
 msgstr "Object ID:"
@@ -6259,16 +6694,23 @@ msgstr "Object ID:"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "Enter the ID of the object that should be downloaded"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
 "Invalid ID list specified\n"
 "Cannot continue."
 msgstr ""
+"Invalid ID list specified\n"
+"Cannot continue."
 
 msgid "Relations"
 msgstr "Relations"
@@ -6277,7 +6719,7 @@ msgid "Open a list of all relations."
 msgstr "Open a list of all relations."
 
 msgid "Relation list filter"
-msgstr ""
+msgstr "Relation list filter"
 
 msgid "Create a new relation"
 msgstr "Create a new relation"
@@ -6286,11 +6728,14 @@ msgid "New"
 msgstr "New"
 
 msgid "Relations: {0}/{1}"
-msgstr ""
+msgstr "Relations: {0}/{1}"
 
 msgid "Relations: {0}"
 msgstr "Relations: {0}"
 
+msgid "Selection"
+msgstr "Selection"
+
 msgid "Open a selection list window."
 msgstr "Open a selection list window."
 
@@ -6298,7 +6743,7 @@ msgid "Current Selection"
 msgstr "Current Selection"
 
 msgid "Search for objects"
-msgstr ""
+msgstr "Search for objects"
 
 msgid "Display the history of the selected objects."
 msgstr "Display the history of the selected objects."
@@ -6313,25 +6758,25 @@ msgid "Sel.: Rel.:{0} / Ways:{1} / Nodes:{2}"
 msgstr "Sel.: Rel.:{0} / Ways:{1} / Nodes:{2}"
 
 msgid "Unselectable now"
-msgstr ""
+msgstr "Unselectable now"
 
 msgid "Selection: {0}"
 msgstr "Selection: {0}"
 
 msgid "Always shown"
-msgstr ""
+msgstr "Always shown"
 
 msgid "Dynamic"
-msgstr ""
+msgstr "Dynamic"
 
 msgid "Always hidden"
-msgstr ""
+msgstr "Always hidden"
 
 msgid "Toggle dynamic buttons"
-msgstr ""
+msgstr "Toggle dynamic buttons"
 
 msgid "Open preferences for this panel"
-msgstr ""
+msgstr "Open preferences for this panel"
 
 msgid "Undock the panel"
 msgstr "Undock the panel"
@@ -6345,7 +6790,7 @@ msgid "Click to minimize/maximize the panel content"
 msgstr "Click to minimise/maximise the panel content"
 
 msgid "Side buttons"
-msgstr ""
+msgstr "Side buttons"
 
 msgid "Authors"
 msgstr "Authors"
@@ -6359,13 +6804,13 @@ msgstr[0] "{0} Author"
 msgstr[1] "{0} Authors"
 
 msgid "Select objects submitted by this user"
-msgstr ""
+msgstr "Select objects submitted by this user"
 
 msgid "Launches a browser with information about the user"
 msgstr "Launches a browser with information about the user"
 
 msgid "Only launching info browsers for the first {0} of {1} selected users"
-msgstr ""
+msgstr "Only launching info browsers for the first {0} of {1} selected users"
 
 msgid "Author"
 msgstr "Author"
@@ -6374,22 +6819,28 @@ msgid "# Objects"
 msgstr "# Objects"
 
 msgid "Validation Results"
-msgstr ""
+msgstr "Validation Results"
 
 msgid "Open the validation window."
 msgstr "Open the validation window."
 
 msgid "Validation results"
+msgstr "Validation results"
+
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
 msgstr ""
 
 msgid "Fix"
 msgstr "Fix"
 
 msgid "Fix the selected issue."
-msgstr ""
+msgstr "Fix the selected issue."
 
 msgid "Ignore the selected issue next time."
-msgstr ""
+msgstr "Ignore the selected issue next time."
 
 msgid "Whole group"
 msgstr "Whole group"
@@ -6431,10 +6882,10 @@ msgid "Display the objects created, updated, and deleted by the changeset"
 msgstr "Display the objects created, updated, and deleted by the changeset"
 
 msgid "Discussion"
-msgstr ""
+msgstr "Discussion"
 
 msgid "Display the public discussion around this changeset"
-msgstr ""
+msgstr "Display the public discussion around this changeset"
 
 msgid "Changeset Management Dialog"
 msgstr "Changeset Management Dialogue"
@@ -6513,7 +6964,7 @@ msgid "Closed at"
 msgstr "Closed at"
 
 msgid "Discussions"
-msgstr ""
+msgstr "Discussions"
 
 msgid "Downloading changeset content"
 msgstr "Downloading changeset content"
@@ -6550,7 +7001,7 @@ msgid "Update the changeset content from the OSM server"
 msgstr "Update the changeset content from the OSM server"
 
 msgid "Download and show the history of the selected objects"
-msgstr ""
+msgstr "Download and show the history of the selected objects"
 
 msgid "Select in layer"
 msgstr "Select in layer"
@@ -6565,7 +7016,7 @@ msgid "Zoom to in layer"
 msgstr "Zoom to in layer"
 
 msgid "Zoom to the corresponding objects in the current data layer"
-msgstr ""
+msgstr "Zoom to the corresponding objects in the current data layer"
 
 msgid "Nothing to zoom to"
 msgstr "Nothing to zoom to"
@@ -6633,15 +7084,17 @@ msgid ""
 "Zoom to the objects in the content of this changeset in the current data "
 "layer"
 msgstr ""
+"Zoom to the objects in the content of this changeset in the current data "
+"layer"
 
 msgid "Update changeset discussion"
-msgstr ""
+msgstr "Update changeset discussion"
 
 msgid "Update the changeset discussion from the OSM server"
-msgstr ""
+msgstr "Update the changeset discussion from the OSM server"
 
 msgid "Date"
-msgstr ""
+msgstr "Date"
 
 msgid "Download changesets"
 msgstr "Download changesets"
@@ -6708,6 +7161,8 @@ msgid ""
 "Only changesets owned by myself (disabled. JOSM is currently run by an "
 "anonymous user)"
 msgstr ""
+"Only changesets owned by myself (disabled. JOSM is currently run by an "
+"anonymous user)"
 
 msgid ""
 "Cannot restrict changeset query to the current user because the current user "
@@ -6738,7 +7193,7 @@ msgid "Date: "
 msgstr "Date: "
 
 msgid "Time:"
-msgstr ""
+msgstr "Time:"
 
 msgid "Closed after - "
 msgstr "Closed after - "
@@ -6837,33 +7292,43 @@ msgid ""
 "only want to download changesets created by yourself.<br>Note that JOSM will "
 "download max. 100 changesets.</html>"
 msgstr ""
+"<html>Please select one the following <strong>standard "
+"queries</strong>.Select <strong>Download my changesets only</strong> if you "
+"only want to download changesets created by yourself.<br>Note that JOSM will "
+"download max. 100 changesets.</html>"
 
 msgid "<html>Download the latest changesets</html>"
-msgstr ""
+msgstr "<html>Download the latest changesets</html>"
 
 msgid ""
 "<html>Download my open changesets<br><em>Disabled. Please enter your OSM "
 "user name in the preferences first.</em></html>"
 msgstr ""
+"<html>Download my open changesets<br><em>Disabled. Please enter your OSM "
+"user name in the preferences first.</em></html>"
 
 msgid "<html>Download my open changesets</html>"
-msgstr ""
+msgstr "<html>Download my open changesets</html>"
 
 msgid ""
 "<html>Download changesets in the current map view.<br><em>Disabled. There is "
 "currently no map view active.</em></html>"
 msgstr ""
+"<html>Download changesets in the current map view.<br><em>Disabled. There is "
+"currently no map view active.</em></html>"
 
 msgid "<html>Download changesets in the current map view</html>"
-msgstr ""
+msgstr "<html>Download changesets in the current map view</html>"
 
 msgid ""
 "Unexpected value for preference ''{0}'', got ''{1}''. Resetting to default "
 "query."
 msgstr ""
+"Unexpected value for preference ''{0}'', got ''{1}''. Resetting to default "
+"query."
 
 msgid "Cannot create changeset query for open changesets of anonymous user"
-msgstr ""
+msgstr "Cannot create changeset query for open changesets of anonymous user"
 
 msgid "Basic"
 msgstr "Basic"
@@ -6928,62 +7393,62 @@ msgid "This changeset query URL is invalid"
 msgstr "This changeset query URL is invalid"
 
 msgid "Discardable key: selection Foreground"
-msgstr ""
+msgstr "Discardable key: selection Foreground"
 
 msgid "Discardable key: selection Background"
-msgstr ""
+msgstr "Discardable key: selection Background"
 
 msgid "Discardable key: foreground"
-msgstr ""
+msgstr "Discardable key: foreground"
 
 msgid "Discardable key: background"
-msgstr ""
+msgstr "Discardable key: background"
 
 msgid "{0} ''{1}''"
-msgstr ""
+msgstr "{0} ''{1}''"
 
 msgid "{0} different"
 msgid_plural "{0} different"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} different"
+msgstr[1] "{0} different"
 
 msgid ", {0} unset"
 msgid_plural ", {0} unset"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] ", {0} unset"
+msgstr[1] ", {0} unset"
 
 msgid "Select objects for which to change tags."
-msgstr ""
+msgstr "Select objects for which to change tags."
 
 msgid "Tags/Memberships"
-msgstr ""
+msgstr "Tags/Memberships"
 
 msgid "Tags for selected objects."
-msgstr ""
+msgstr "Tags for selected objects."
 
 msgid "Member Of"
 msgstr "Member Of"
 
 msgid "Position"
-msgstr ""
+msgstr "Position"
 
 msgid "<different>"
 msgstr "<different>"
 
 msgid "Objects: {2} / Tags: {0} / Memberships: {1}"
-msgstr ""
+msgstr "Objects: {2} / Tags: {0} / Memberships: {1}"
 
 msgid "Tags: {0} / Memberships: {1}"
-msgstr ""
+msgstr "Tags: {0} / Memberships: {1}"
 
 msgid "Tags / Memberships"
-msgstr ""
+msgstr "Tags / Memberships"
 
 msgid "Delete the selected key in all objects"
 msgstr "Delete the selected key in all objects"
 
 msgid "Delete Tags"
-msgstr ""
+msgstr "Delete Tags"
 
 msgid "Change relation"
 msgstr "Change relation"
@@ -6998,71 +7463,79 @@ msgid "Add a new key/value pair to all objects"
 msgstr "Add a new key/value pair to all objects"
 
 msgid "Add Tag"
-msgstr ""
+msgstr "Add Tag"
 
 msgid "Edit the value of the selected key for all objects"
 msgstr "Edit the value of the selected key for all objects"
 
 msgid "Edit Tags"
-msgstr ""
+msgstr "Edit Tags"
 
 msgid "Go to OSM wiki for tag help (F1)"
-msgstr ""
+msgstr "Go to OSM wiki for tag help (F1)"
 
 msgid "Launch browser with wiki help for selected object"
+msgstr "Launch browser with wiki help for selected object"
+
+msgid "Go to Taginfo"
 msgstr ""
 
-msgid "Paste Value"
+msgid "Launch browser with Taginfo statistics for selected object"
 msgstr ""
 
+msgid "Paste Value"
+msgstr "Paste Value"
+
 msgid "Paste the value of the selected tag from clipboard"
-msgstr ""
+msgstr "Paste the value of the selected tag from clipboard"
 
 msgid "Copy Value"
-msgstr ""
+msgstr "Copy Value"
 
 msgid "Copy the value of the selected tag to clipboard"
-msgstr ""
+msgstr "Copy the value of the selected tag to clipboard"
 
 msgid "Copy selected Key(s)/Value(s)"
-msgstr ""
+msgstr "Copy selected Key(s)/Value(s)"
 
 msgid "Copy the key and value of the selected tag(s) to clipboard"
-msgstr ""
+msgstr "Copy the key and value of the selected tag(s) to clipboard"
 
 msgid "Copy all Keys/Values"
-msgstr ""
+msgstr "Copy all Keys/Values"
 
 msgid "Copy the key and value of all the tags to clipboard"
-msgstr ""
+msgstr "Copy the key and value of all the tags to clipboard"
 
 msgid "Search Key/Value/Type"
-msgstr ""
+msgstr "Search Key/Value/Type"
 
 msgid ""
 "Search with the key and value of the selected tag, restrict to type (i.e., "
 "node/way/relation)"
 msgstr ""
+"Search with the key and value of the selected tag, restrict to type (i.e., "
+"node/way/relation)"
 
 msgid "Search Key/Value"
-msgstr ""
+msgstr "Search Key/Value"
 
 msgid "Search with the key and value of the selected tag"
-msgstr ""
+msgstr "Search with the key and value of the selected tag"
 
 msgid "Overwrite key"
-msgstr ""
+msgstr "Overwrite key"
 
 msgid "Replace"
-msgstr ""
+msgstr "Replace"
 
 msgid "The new key is already used, overwrite values?"
-msgstr ""
+msgstr "The new key is already used, overwrite values?"
 
 msgid "Change value?"
 msgid_plural "Change values?"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Change value?"
+msgstr[1] "Change values?"
 
 msgid "This will change {0} object."
 msgid_plural "This will change up to {0} objects."
@@ -7073,7 +7546,7 @@ msgid "An empty value deletes the tag."
 msgstr "An empty value deletes the tag."
 
 msgid "You changed the key from ''{0}'' to ''{1}''."
-msgstr ""
+msgstr "You changed the key from ''{0}'' to ''{1}''."
 
 msgid "Change properties of up to {0} object"
 msgid_plural "Change properties of up to {0} objects"
@@ -7081,10 +7554,10 @@ msgstr[0] "Change properties of up to {0} object"
 msgstr[1] "Change properties of up to {0} objects"
 
 msgid "Use English language for tag by default"
-msgstr ""
+msgstr "Use English language for tag by default"
 
 msgid "Add value?"
-msgstr ""
+msgstr "Add value?"
 
 msgid "This will change up to {0} object."
 msgid_plural "This will change up to {0} objects."
@@ -7098,44 +7571,43 @@ msgid "Please select a value"
 msgstr "Please select a value"
 
 msgid "Set number of recently added tags"
-msgstr ""
+msgstr "Set number of recently added tags"
 
 msgid "Remember last used tags after a restart"
-msgstr ""
+msgstr "Remember last used tags after a restart"
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
-msgstr ""
+msgid "to apply first suggestion"
+msgstr "to apply first suggestion"
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
-msgstr ""
+msgid "to add without closing the dialog"
+msgstr "to add without closing the dialog"
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
-msgstr ""
+msgid "to add first suggestion without closing the dialog"
+msgstr "to add first suggestion without closing the dialog"
 
 msgid "Please enter the number of recently added tags to display"
-msgstr ""
+msgstr "Please enter the number of recently added tags to display"
 
 msgid "Please enter integer number between 0 and {0}"
-msgstr ""
+msgstr "Please enter integer number between 0 and {0}"
 
 msgid "Recently added tags"
-msgstr ""
+msgstr "Recently added tags"
 
 msgid "Choose recent tag {0}"
-msgstr ""
+msgstr "Choose recent tag {0}"
 
 msgid "Use this tag again"
-msgstr ""
+msgstr "Use this tag again"
 
 msgid "Apply recent tag {0}"
-msgstr ""
+msgstr "Apply recent tag {0}"
 
 msgid "The key ''{0}'' is already used"
-msgstr ""
+msgstr "The key ''{0}'' is already used"
 
 msgid "You changed the value of ''{0}'' from ''{1}'' to ''{2}''."
-msgstr ""
+msgstr "You changed the value of ''{0}'' from ''{1}'' to ''{2}''."
 
 msgid "Edit the relation the currently selected relation member refers to."
 msgstr "Edit the relation the currently selected relation member refers to"
@@ -7164,6 +7636,8 @@ msgid ""
 "<html>The child relation<br>{0}<br>is deleted on the server. It cannot be "
 "loaded</html>"
 msgstr ""
+"<html>The child relation<br>{0}<br>is deleted on the server. It cannot be "
+"loaded</html>"
 
 msgid "Relation is deleted"
 msgstr "Relation is deleted"
@@ -7172,12 +7646,12 @@ msgid "Downloading relation {0}"
 msgstr "Downloading relation {0}"
 
 msgid "Ignoring exception because task was canceled. Exception: {0}"
-msgstr ""
+msgstr "Ignoring exception because the task was cancelled. Exception: {0}"
 
 msgid "Downloading {0} incomplete object"
 msgid_plural "Downloading {0} incomplete objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Downloading {0} incomplete object"
+msgstr[1] "Downloading {0} incomplete objects"
 
 msgid "Downloading {0} incomplete child of relation ''{1}''"
 msgid_plural "Downloading {0} incomplete children of relation ''{1}''"
@@ -7186,8 +7660,8 @@ msgstr[1] "Downloading {0} incomplete children of relation ''{1}''"
 
 msgid "Downloading {0} incomplete child of {1} parent relations"
 msgid_plural "Downloading {0} incomplete children of {1} parent relations"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Downloading {0} incomplete child of {1} parent relations"
+msgstr[1] "Downloading {0} incomplete children of {1} parent relations"
 
 msgid "Download relations"
 msgstr "Download relations"
@@ -7211,13 +7685,13 @@ msgid "Enter a role and apply it to the selected relation members"
 msgstr "Enter a role and apply it to the selected relation members"
 
 msgid "New Relation"
-msgstr ""
+msgstr "New Relation"
 
 msgid "Focus Relation Editor with relation ''{0}'' in layer ''{1}''"
-msgstr ""
+msgstr "Focus Relation Editor with relation ''{0}'' in layer ''{1}''"
 
 msgid "Relation Editor: {0}"
-msgstr ""
+msgstr "Relation Editor: {0}"
 
 msgid ""
 "<html>There is at least one member in this relation referring<br>to the "
@@ -7235,16 +7709,19 @@ msgid "Ignore them, leave relation as is"
 msgstr "Ignore them, leave relation as is"
 
 msgid "Sorry, shortcut \"{0}\" can not be enabled in Relation editor dialog"
-msgstr ""
+msgstr "Sorry, shortcut \"{0}\" can not be enabled in Relation editor dialog"
 
 msgid ""
 "<html>This relation already has one or more members referring to<br>the "
 "object ''{0}''<br><br>Do you really want to add another relation "
 "member?</html>"
 msgstr ""
+"<html>This relation already has one or more members referring to<br>the "
+"object ''{0}''<br><br>Do you really want to add another relation "
+"member?</html>"
 
 msgid "Multiple members referring to same object."
-msgstr ""
+msgstr "Multiple members referring to same object."
 
 msgid ""
 "<html>You are trying to add a relation to itself.<br><br>This creates "
@@ -7258,35 +7735,48 @@ msgstr ""
 msgid ""
 "Add all objects selected in the current dataset before the first member"
 msgstr ""
+"Add all objects selected in the current dataset before the first member"
 
 msgid ""
 "Add all objects selected in the current dataset before the first selected "
 "member"
 msgstr ""
+"Add all objects selected in the current dataset before the first selected "
+"member"
 
 msgid ""
 "Add all objects selected in the current dataset after the last selected "
 "member"
 msgstr ""
+"Add all objects selected in the current dataset after the last selected "
+"member"
 
 msgid "Remove all members referring to one of the selected objects"
-msgstr ""
+msgstr "Remove all members referring to one of the selected objects"
 
 msgid ""
 "Select relation members which refer to objects in the current selection"
 msgstr ""
+"Select relation members which refer to objects in the current selection"
 
 msgid ""
 "Select relation members which refer to {0} objects in the current selection"
 msgstr ""
+"Select relation members which refer to {0} objects in the current selection"
 
 msgid "Select objects for selected relation members"
-msgstr ""
+msgstr "Select objects for selected relation members"
 
 msgid "Sort the relation members"
 msgstr "Sort the relation members"
 
 msgid "Relation Editor: Sort"
+msgstr "Relation Editor: Sort"
+
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
 msgstr ""
 
 msgid "Reverse the order of the relation members"
@@ -7351,6 +7841,8 @@ msgid ""
 "<html>Layer ''{0}'' already has a conflict for object<br>''{1}''.<br>Please "
 "resolve this conflict first, then try again.</html>"
 msgstr ""
+"<html>Layer ''{0}'' already has a conflict for object<br>''{1}''.<br>Please "
+"resolve this conflict first, then try again.</html>"
 
 msgid "Apply the current updates"
 msgstr "Apply the current updates"
@@ -7362,27 +7854,29 @@ msgid "Cancel the updates and close the dialog"
 msgstr "Cancel the updates and close the dialogue"
 
 msgid "Yes, save the changes and close"
-msgstr ""
+msgstr "Yes, save the changes and close"
 
 msgid "Click to save the changes and close this relation editor"
-msgstr ""
+msgstr "Click to save the changes and close this relation editor"
 
 msgid "No, discard the changes and close"
-msgstr ""
+msgstr "No, discard the changes and close"
 
 msgid "Click to discard the changes and close this relation editor"
-msgstr ""
+msgstr "Click to discard the changes and close this relation editor"
 
 msgid "Cancel, continue editing"
-msgstr ""
+msgstr "Cancel, continue editing"
 
 msgid ""
 "<html>The relation has been changed.<br><br>Do you want to save your "
 "changes?</html>"
 msgstr ""
+"<html>The relation has been changed.<br><br>Do you want to save your "
+"changes?</html>"
 
 msgid "Unsaved changes"
-msgstr ""
+msgstr "Unsaved changes"
 
 msgid "Add an empty tag"
 msgstr "Add an empty tag"
@@ -7407,11 +7901,11 @@ msgstr "Apply Role"
 
 msgid "You are setting an empty role on {0} object."
 msgid_plural "You are setting an empty role on {0} objects."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "You are setting an empty role on {0} object."
+msgstr[1] "You are setting an empty role on {0} objects."
 
 msgid "This is equal to deleting the roles of these objects."
-msgstr ""
+msgstr "This is equal to deleting the roles of these objects."
 
 msgid "Do you really want to apply the new role?"
 msgstr "Do you really want to apply the new role?"
@@ -7432,24 +7926,26 @@ msgid ""
 "Members from paste buffer cannot be added because they are not included in "
 "current layer"
 msgstr ""
+"Members from paste buffer cannot be added because they are not included in "
+"current layer"
 
 msgid "Select previous Gap"
-msgstr ""
+msgstr "Select previous Gap"
 
 msgid "Select the previous relation member which gives rise to a gap"
-msgstr ""
+msgstr "Select the previous relation member which gives rise to a gap"
 
 msgid "Select next Gap"
-msgstr ""
+msgstr "Select next Gap"
 
 msgid "Select the next relation member which gives rise to a gap"
-msgstr ""
+msgstr "Select the next relation member which gives rise to a gap"
 
 msgid "Zoom to Gap"
-msgstr ""
+msgstr "Zoom to Gap"
 
 msgid "Zoom to the gap in the way sequence"
-msgstr ""
+msgstr "Zoom to the gap in the way sequence"
 
 msgid "Refers to"
 msgstr "Refers to"
@@ -7503,13 +7999,13 @@ msgid "way is not connected to previous or next relation member"
 msgstr "way is not connected to previous or next relation member"
 
 msgid "{0} - {1} ({2})"
-msgstr ""
+msgstr "{0} - {1} ({2})"
 
 msgid "Wrong number of arguments for bookmark"
-msgstr ""
+msgstr "Wrong number of arguments for bookmark"
 
 msgid "Error reading bookmark entry: %s"
-msgstr ""
+msgstr "Error reading bookmark entry: %s"
 
 msgid "Bookmarks"
 msgstr "Bookmarks"
@@ -7560,7 +8056,7 @@ msgid "max lon"
 msgstr "max lon"
 
 msgid "Clear textarea"
-msgstr ""
+msgstr "Clear textarea"
 
 msgid ""
 "URL from www.openstreetmap.org (you can paste an URL here to download the "
@@ -7597,7 +8093,7 @@ msgid "Select to download GPS traces in the selected download area."
 msgstr "Select to download GPS traces in the selected download area."
 
 msgid "Select to download notes in the selected download area."
-msgstr ""
+msgstr "Select to download notes in the selected download area."
 
 msgid "Download as new layer"
 msgstr "Download as new layer"
@@ -7610,17 +8106,21 @@ msgstr ""
 "into the currently active data layer.</html>"
 
 msgid "Open this dialog on startup"
-msgstr ""
+msgstr "Open this dialogue on startup"
 
 msgid ""
 "<html>Autostart ''Download from OSM'' dialog every time JOSM is "
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
+"<html>Autostart ''Download from OSM'' dialogue every time JOSM is "
+"started.<br>You can open it manually from File menu or toolbar.</html>"
 
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
 msgstr ""
+"Use left click&drag to select area, arrows or right mouse button to scroll "
+"map, wheel or +/- to zoom."
 
 msgid "No area selected yet"
 msgstr "No area selected yet"
@@ -7635,7 +8135,7 @@ msgid "Click to close the dialog and to abort downloading"
 msgstr "Click to close the dialogue and to abort downloading"
 
 msgid "Click to download the currently selected area"
-msgstr ""
+msgstr "Click to download the currently selected area"
 
 msgid "Please select a download area first."
 msgstr "Please select a download area first."
@@ -7645,9 +8145,12 @@ msgid ""
 "<strong>{2}</strong> is enabled.<br>Please choose to either download OSM "
 "data, or GPX data, or Notes, or all.</html>"
 msgstr ""
+"<html>Neither <strong>{0}</strong> nor <strong>{1}</strong> nor "
+"<strong>{2}</strong> is enabled.<br>Please choose to either download OSM "
+"data, or GPX data, or Notes, or all.</html>"
 
 msgid "Download referrers (parent relations)"
-msgstr ""
+msgstr "Download referrers (parent relations)"
 
 msgid "Download object"
 msgstr "Download object"
@@ -7659,12 +8162,14 @@ msgid ""
 "Select if the referrers of the object should be downloaded as well, "
 "i.e.,parent relations and for nodes, additionally, parent ways"
 msgstr ""
+"Select if the referrers of the object should be downloaded as well, "
+"i.e.,parent relations and for nodes, additionally, parent ways"
 
 msgid "Select if the members of a relation should be downloaded as well"
-msgstr ""
+msgstr "Select if the members of a relation should be downloaded as well"
 
 msgid "Download referrers (parent relations and ways)"
-msgstr ""
+msgstr "Download referrers (parent relations and ways)"
 
 msgid "Class Type"
 msgstr "Class Type"
@@ -7700,13 +8205,13 @@ msgid "Querying name server ..."
 msgstr "Querying name server ..."
 
 msgid "Error occured with query ''{0}'': ''{1}''"
-msgstr ""
+msgstr "Error occured with query ''{0}'': ''{1}''"
 
 msgid "Name server returned invalid data. Please try again."
-msgstr ""
+msgstr "Name server returned invalid data. Please try again."
 
 msgid "Bad response"
-msgstr ""
+msgstr "Bad response"
 
 msgid "Type"
 msgstr "Type"
@@ -7732,6 +8237,13 @@ msgid ""
 "your local language ({1})</a> and the <a href=\"{3}\">help topic in "
 "English</a>.</p></html>"
 msgstr ""
+"<html><p class=\"warning-header\">Help content for help topic missing</p><p "
+"class=\"warning-body\">Help content for the help topic <strong>{0}</strong> "
+"is not available yet. It is missing both in your local language ({1}) and in "
+"English.<br><br>Please help to improve the JOSM help system and fill in the "
+"missing information. You can both edit the <a href=\"{2}\">help topic in "
+"your local language ({1})</a> and the <a href=\"{3}\">help topic in "
+"English</a>.</p></html>"
 
 msgid ""
 "<html><p class=\"error-header\">Error when retrieving help information</p><p "
@@ -7780,7 +8292,7 @@ msgid "Go to the JOSM help home page"
 msgstr "Go to the JOSM help home page"
 
 msgid "Bad location in HTML document. Exception was: {0}"
-msgstr ""
+msgstr "Bad location in HTML document. Exception was: {0}"
 
 msgid "Failed to open help page. The target URL is empty."
 msgstr "Failed to open help page. The target URL is empty."
@@ -7795,7 +8307,7 @@ msgid "Longitude: "
 msgstr "Longitude: "
 
 msgid "Distance: "
-msgstr ""
+msgstr "Distance: "
 
 msgid "Coordinates"
 msgstr "Coordinates"
@@ -7848,6 +8360,9 @@ msgstr "Loading history for relation {0}"
 msgid "Node {0}"
 msgstr "Node {0}"
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr "Zoom to node"
 
@@ -7864,25 +8379,25 @@ msgid "Relation {0}"
 msgstr "Relation {0}"
 
 msgid "Object"
-msgstr ""
+msgstr "Object"
 
 msgid "not present"
 msgstr "not present"
 
 msgid "Changeset comment"
-msgstr ""
+msgstr "Changeset comment"
 
 msgid "Changeset source"
-msgstr ""
+msgstr "Changeset source"
 
 msgid "Imagery used"
-msgstr ""
+msgstr "Imagery used"
 
 msgid "<b>Source</b>:"
-msgstr ""
+msgstr "<b>Source</b>:"
 
 msgid "<b>Imagery</b>:"
-msgstr ""
+msgstr "<b>Imagery</b>:"
 
 msgid ""
 "<html>Version <strong>{0}</strong> currently edited in layer ''{1}''</html>"
@@ -7895,7 +8410,7 @@ msgstr ""
 "<html>Version <strong>{0}</strong> created on <strong>{1}</strong></html>"
 
 msgid "Changeset"
-msgstr ""
+msgstr "Changeset"
 
 msgid "Changeset info"
 msgstr "Changeset info"
@@ -7907,22 +8422,22 @@ msgid "Show changeset {0}"
 msgstr "Show changeset {0}"
 
 msgid "User info"
-msgstr ""
+msgstr "User info"
 
 msgid "Launch browser with information about the user"
-msgstr ""
+msgstr "Launch browser with information about the user"
 
 msgid "Show user {0}"
-msgstr ""
+msgstr "Show user {0}"
 
 msgid "Ver"
-msgstr ""
+msgstr "Ver"
 
 msgid "A"
-msgstr ""
+msgstr "A"
 
 msgid "B"
-msgstr ""
+msgstr "B"
 
 msgid ""
 "Failed to update primitive with id {0} because current edit layer is null"
@@ -7996,7 +8511,7 @@ msgid "Prepare conflict resolution"
 msgstr "Prepare conflict resolution"
 
 msgid "Click to download all referring objects for {0}"
-msgstr ""
+msgstr "Click to download all referring objects for {0}"
 
 msgid "Click to cancel and to resume editing the map"
 msgstr "Click to cancel and to resume editing the map"
@@ -8005,12 +8520,14 @@ msgid ""
 "Click <strong>{0}</strong> to load them now.<br>If necessary JOSM will "
 "create conflicts which you can resolve in the Conflict Resolution Dialog."
 msgstr ""
+"Click <strong>{0}</strong> to load them now.<br>If necessary JOSM will "
+"create conflicts which you can resolve in the Conflict Resolution dialogue."
 
 msgid "Object still in use"
-msgstr ""
+msgstr "Object still in use"
 
 msgid "Error header \"{0}\" did not match with an expected pattern"
-msgstr ""
+msgstr "Error header \"{0}\" did not match with an expected pattern"
 
 msgid "Upload"
 msgstr "Upload"
@@ -8021,21 +8538,25 @@ msgid ""
 "server.<br/>Check \"Save\" to save the layer to the file specified on the "
 "left.</html>"
 msgstr ""
+"<html>Select which actions to perform for this layer, if you click the "
+"leftmost button.<br/>Check \"upload\" to upload the changes to the OSM "
+"server.<br/>Check \"Save\" to save the layer to the file specified on the "
+"left.</html>"
 
 msgid "Provide a brief comment for the changes you are uploading:"
 msgstr "Provide a brief comment for the changes you are uploading:"
 
 msgid "Enter an upload comment"
-msgstr ""
+msgstr "Enter an upload comment"
 
 msgid "Specify the data source for the changes"
-msgstr ""
+msgstr "Specify the data source for the changes"
 
 msgid "obtain from current layers"
-msgstr ""
+msgstr "obtain from current layers"
 
 msgid "Enter a source"
-msgstr ""
+msgstr "Enter a source"
 
 msgid "Changeset id:"
 msgstr "Changeset id:"
@@ -8069,7 +8590,7 @@ msgid "Upload data to an already existing and open changeset"
 msgstr "Upload data to an already existing and open changeset"
 
 msgid "Select an open changeset"
-msgstr ""
+msgstr "Select an open changeset"
 
 msgid "Close changeset after upload"
 msgstr "Close changeset after upload"
@@ -8107,12 +8628,13 @@ msgstr "Closing changeset {0}"
 msgid ""
 "Failed to put Credential Dialog always on top. Caught security exception."
 msgstr ""
+"Failed to put Credential dialogue always on top. Caught security exception."
 
 msgid "Enter credentials for OSM API"
 msgstr "Enter credentials for OSM API"
 
 msgid "Enter credentials for host"
-msgstr ""
+msgstr "Enter credentials for host"
 
 msgid "Enter credentials for HTTP proxy"
 msgstr "Enter credentials for HTTP proxy"
@@ -8137,15 +8659,17 @@ msgstr ""
 "and a valid password."
 
 msgid "Please enter the user name of your account"
-msgstr ""
+msgstr "Please enter the user name of your account"
 
 msgid "Please enter the password of your account"
-msgstr ""
+msgstr "Please enter the password of your account"
 
 msgid ""
 "Authenticating at the host ''{0}'' failed. Please enter a valid username and "
 "a valid password."
 msgstr ""
+"Authenticating at the host ''{0}'' failed. Please enter a valid username and "
+"a valid password."
 
 msgid "Please enter the user name for authenticating at your proxy server"
 msgstr "Please enter the user name for authenticating at your proxy server"
@@ -8177,21 +8701,23 @@ msgid "Cancel authentication"
 msgstr "Cancel authentication"
 
 msgid "Downloading file"
-msgstr ""
+msgstr "Downloading file"
 
 msgid "Downloading File {0}: {1} bytes..."
-msgstr ""
+msgstr "Downloading File {0}: {1} bytes..."
 
 msgid "Download finished"
-msgstr ""
+msgstr "Download finished"
 
 msgid "Unpacking {0} into {1}"
-msgstr ""
+msgstr "Unpacking {0} into {1}"
 
 msgid ""
 "Cannot download file ''{0}''. Its download link ''{1}'' is not a valid URL. "
 "Skipping download."
 msgstr ""
+"Cannot download file ''{0}''. Its download link ''{1}'' is not a valid URL. "
+"Skipping download."
 
 msgid ""
 "Could not retrieve the list of your open changesets because<br>JOSM does not "
@@ -8210,46 +8736,51 @@ msgstr "Missing user identity"
 msgid ""
 "Failed to retrieve user infos for the current JOSM user. Exception was: {0}"
 msgstr ""
+"Failed to retrieve user infos for the current JOSM user. Exception was: {0}"
 
 msgid "Download objects"
-msgstr ""
+msgstr "Download objects"
 
 msgid "Initializing nodes to download ..."
-msgstr ""
+msgstr "Initialising nodes to download ..."
 
 msgid "Object could not be downloaded"
 msgid_plural "Some objects could not be downloaded"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Object could not be downloaded"
+msgstr[1] "Some objects could not be downloaded"
 
 msgid "One object could not be downloaded.<br>"
 msgid_plural "{0} objects could not be downloaded.<br>"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "One object could not be downloaded.<br>"
+msgstr[1] "{0} objects could not be downloaded.<br>"
 
 msgid ""
 "The server replied with response code 404.<br>This usually means, the server "
 "does not know an object with the requested id."
 msgstr ""
+"The server replied with response code 404.<br>This usually means, the server "
+"does not know an object with the requested id."
 
 msgid "missing objects:"
-msgstr ""
+msgstr "missing objects:"
 
 msgid "One downloaded object is deleted."
 msgid_plural "{0} downloaded objects are deleted."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "One downloaded object is deleted."
+msgstr[1] "{0} downloaded objects are deleted."
 
 msgid ""
 "Either edit the path manually in the text field or click the \"...\" button "
 "to open a file chooser."
 msgstr ""
+"Either edit the path manually in the text field or click the \"...\" button "
+"to open a file chooser."
 
 msgid "The bold text is the name of the layer."
-msgstr ""
+msgstr "The bold text is the name of the layer."
 
 msgid "Click here to choose save path"
-msgstr ""
+msgstr "Click here to choose save path"
 
 msgid "Layer ''{0}'' is not backed by a file"
 msgstr "Layer ''{0}'' is not backed by a file"
@@ -8258,7 +8789,7 @@ msgid "File ''{0}'' is not writable. Please enter another file name."
 msgstr "File ''{0}'' is not writable. Please enter another file name."
 
 msgid "Click cell to change the file path."
-msgstr ""
+msgstr "Click cell to change the file path."
 
 msgid "Launch a file chooser to select a file"
 msgstr "Launch a file chooser to select a file"
@@ -8267,16 +8798,16 @@ msgid "Select filename"
 msgstr "Select filename"
 
 msgid "Open Recent"
-msgstr ""
+msgstr "Open Recent"
 
 msgid "List of recently opened files"
-msgstr ""
+msgstr "List of recently opened files"
 
 msgid "Clear"
 msgstr "Clear"
 
 msgid "Clear the list of recently opened files"
-msgstr ""
+msgstr "Clear the list of recently opened files"
 
 msgid "Saving layer to ''{0}'' ..."
 msgstr "Saving layer to ''{0}'' ..."
@@ -8348,25 +8879,25 @@ msgid "Close this dialog and resume editing in JOSM"
 msgstr "Close this dialogue and resume editing in JOSM"
 
 msgid "Exit now!"
-msgstr ""
+msgstr "Exit now!"
 
 msgid "Exit JOSM without saving. Unsaved changes are lost."
 msgstr "Exit JOSM without saving. Unsaved changes are lost."
 
 msgid "Delete now!"
-msgstr ""
+msgstr "Delete now!"
 
 msgid "Delete layers without saving. Unsaved changes are lost."
 msgstr "Delete layers without saving. Unsaved changes are lost."
 
 msgid "Perform actions before exiting"
-msgstr ""
+msgstr "Perform actions before exiting"
 
 msgid "Exit JOSM with saving. Unsaved changes are uploaded and/or saved."
 msgstr "Exit JOSM with saving. Unsaved changes are uploaded and/or saved."
 
 msgid "Perform actions before deleting"
-msgstr ""
+msgstr "Perform actions before deleting"
 
 msgid "Save/Upload layers before deleting. Unsaved changes are not lost."
 msgstr "Save/Upload layers before deleting. Unsaved changes are not lost."
@@ -8381,16 +8912,20 @@ msgid_plural ""
 "<html>Upload and/or save operations of {0} layers with modifications<br>were "
 "canceled or have failed.</html>"
 msgstr[0] ""
+"<html>An upload and/or save operation of one layer with modifications<br>was "
+"cancelled or has failed.</html>"
 msgstr[1] ""
+"<html>Upload and/or save operations of {0} layers with modifications<br>were "
+"cancelled or have failed.</html>"
 
 msgid "Incomplete upload and/or save"
 msgstr "Incomplete upload and/or save"
 
 msgid "should be uploaded"
-msgstr ""
+msgstr "should be uploaded"
 
 msgid "should be saved"
-msgstr ""
+msgstr "should be saved"
 
 msgid ""
 "Layer ''{0}'' has modifications which should be uploaded to the server."
@@ -8399,6 +8934,7 @@ msgstr ""
 
 msgid "Layer ''{0}'' has modifications which are discouraged to be uploaded."
 msgstr ""
+"Layer ''{0}'' has modifications which are discouraged to be uploaded."
 
 msgid "Layer ''{0}'' has no modifications to be uploaded."
 msgstr "Layer ''{0}'' has no modifications to be uploaded."
@@ -8414,13 +8950,13 @@ msgid "Layer ''{0}'' has no modifications to be saved."
 msgstr "Layer ''{0}'' has no modifications to be saved."
 
 msgid "Layer Name and File Path"
-msgstr ""
+msgstr "Layer Name and File Path"
 
 msgid "Recommended Actions"
-msgstr ""
+msgstr "Recommended Actions"
 
 msgid "Actions To Take"
-msgstr ""
+msgstr "Actions To Take"
 
 msgid "Update objects"
 msgstr "Update objects"
@@ -8462,7 +8998,7 @@ msgid "Upload the changed primitives"
 msgstr "Upload the changed primitives"
 
 msgid "Please revise upload comment"
-msgstr ""
+msgstr "Please revise upload comment"
 
 msgid ""
 "Your upload comment is <i>empty</i>, or <i>very short</i>.<br /><br />This "
@@ -8471,9 +9007,14 @@ msgid ""
 "/>to understand what is going on!<br /><br />If you spend a minute now to "
 "explain your change, you will make life<br />easier for many other mappers."
 msgstr ""
+"Your upload comment is <i>empty</i>, or <i>very short</i>.<br /><br />This "
+"is technically allowed, but please consider that many users who are<br "
+"/>watching changes in their area depend on meaningful changeset comments<br "
+"/>to understand what is going on!<br /><br />If you spend a minute now to "
+"explain your change, you will make life<br />easier for many other mappers."
 
 msgid "Please specify a changeset source"
-msgstr ""
+msgstr "Please specify a changeset source"
 
 msgid ""
 "You did not specify a source for your changes.<br />It is technically "
@@ -8481,18 +9022,22 @@ msgid ""
 "origins of the data.<br /><br />If you spend a minute now to explain your "
 "change, you will make life<br />easier for many other mappers."
 msgstr ""
+"You did not specify a source for your changes.<br />It is technically "
+"allowed, but this information helps<br />other users to understand the "
+"origins of the data.<br /><br />If you spend a minute now to explain your "
+"change, you will make life<br />easier for many other mappers."
 
 msgid "Revise"
-msgstr ""
+msgstr "Revise"
 
 msgid "Continue as is"
-msgstr ""
+msgstr "Continue as is"
 
 msgid "Return to the previous dialog to enter a more descriptive comment"
-msgstr ""
+msgstr "Return to the previous dialogue to enter a more descriptive comment"
 
 msgid "Cancel and return to the previous dialog"
-msgstr ""
+msgstr "Cancel and return to the previous dialogue"
 
 msgid "Please enter a valid chunk size first"
 msgstr "Please enter a valid chunk size first"
@@ -8501,7 +9046,7 @@ msgid "Illegal chunk size"
 msgstr "Illegal chunk size"
 
 msgid "{0}={1}"
-msgstr ""
+msgstr "{0}={1}"
 
 msgid ""
 "<html>The following changeset tag contains an empty "
@@ -8510,10 +9055,14 @@ msgid_plural ""
 "<html>The following changeset tags contain an empty "
 "key/value:<br>{0}<br>Continue?</html>"
 msgstr[0] ""
+"<html>The following changeset tag contains an empty "
+"key/value:<br>{0}<br>Continue?</html>"
 msgstr[1] ""
+"<html>The following changeset tags contain an empty "
+"key/value:<br>{0}<br>Continue?</html>"
 
 msgid "Empty metadata"
-msgstr ""
+msgstr "Empty metadata"
 
 msgid "Cancel the upload and resume editing"
 msgstr "Cancel the upload and resume editing"
@@ -8525,9 +9074,11 @@ msgid ""
 "Object ''{0}'' is already deleted on the server. Skipping this object and "
 "retrying to upload."
 msgstr ""
+"Object ''{0}'' is already deleted on the server. Skipping this object and "
+"retrying to upload."
 
 msgid "Preparing objects to upload ..."
-msgstr ""
+msgstr "Preparing objects to upload ..."
 
 msgid "Objects are uploaded to a <strong>new changeset</strong>."
 msgstr "Objects are uploaded to a <strong>new changeset</strong>."
@@ -8647,13 +9198,13 @@ msgid "Changeset is full"
 msgstr "Changeset is full"
 
 msgid "Node ''{0}'' is already deleted. Skipping object in upload."
-msgstr ""
+msgstr "Node ''{0}'' is already deleted. Skipping object in upload."
 
 msgid "Way ''{0}'' is already deleted. Skipping object in upload."
-msgstr ""
+msgstr "Way ''{0}'' is already deleted. Skipping object in upload."
 
 msgid "Relation ''{0}'' is already deleted. Skipping object in upload."
-msgstr ""
+msgstr "Relation ''{0}'' is already deleted. Skipping object in upload."
 
 msgid "Object ''{0}'' is already deleted. Skipping object in upload."
 msgstr "Object ''{0}'' is already deleted. Skipping object in upload."
@@ -8669,7 +9220,7 @@ msgstr ""
 "Ignoring caught exception because upload is cancelled. Exception is: {0}"
 
 msgid "Upload successful!"
-msgstr ""
+msgstr "Upload successful!"
 
 msgid ""
 "<html>Mark modified objects <strong>from the current selection</strong> to "
@@ -8692,7 +9243,7 @@ msgid "Cancel uploading"
 msgstr "Cancel uploading"
 
 msgid "Unexpected value for key ''{0}'' in preferences, got ''{1}''"
-msgstr ""
+msgstr "Unexpected value for key ''{0}'' in preferences, got ''{1}''"
 
 msgid "Please select the upload strategy:"
 msgstr "Please select the upload strategy:"
@@ -8776,6 +9327,107 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] "{0} object to delete:"
 msgstr[1] "{0} objects to delete:"
 
+msgid "Show Tile Info"
+msgstr "Show Tile Info"
+
+msgid "Tile Info"
+msgstr "Tile Info"
+
+msgid "Metadata "
+msgstr "Metadata "
+
+msgid "Auto Zoom"
+msgstr "Auto Zoom"
+
+msgid "Auto load tiles"
+msgstr "Auto load tiles"
+
+msgid "Load All Tiles"
+msgstr "Load All Tiles"
+
+msgid "Load All Error Tiles"
+msgstr "Load All Error Tiles"
+
+msgid "Zoom to native resolution"
+msgstr "Zoom to native resolution"
+
+msgid "Change resolution"
+msgstr "Change resolution"
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr "Show Errors"
+
+msgid "Load Tile"
+msgstr "Load Tile"
+
+msgid "Increase zoom"
+msgstr "Increase zoom"
+
+msgid "Decrease zoom"
+msgstr "Decrease zoom"
+
+msgid "Snap to tile size"
+msgstr "Snap to tile size"
+
+msgid "Flush Tile Cache"
+msgstr "Flush Tile Cache"
+
+msgid "zoom in to load any tiles"
+msgstr "zoom in to load any tiles"
+
+msgid "zoom in to load more tiles"
+msgstr "zoom in to load more tiles"
+
+msgid "increase zoom level to see more detail"
+msgstr "increase zoom level to see more detail"
+
+msgid "No tiles at this zoom level"
+msgstr "No tiles at this zoom level"
+
+msgid "Current zoom: {0}"
+msgstr "Current zoom: {0}"
+
+msgid "Display zoom: {0}"
+msgstr "Display zoom: {0}"
+
+msgid "Pixel scale: {0}"
+msgstr "Pixel scale: {0}"
+
+msgid "Best zoom: {0}"
+msgstr "Best zoom: {0}"
+
+msgid "Cache stats: {0}"
+msgstr "Cache stats: {0}"
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr "Downloaded {0}/{1} tiles"
+
+msgid "Save WMS file"
+msgstr "Save WMS file"
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+
+msgid "Details..."
+msgstr "Details..."
+
+msgid "Hide this message and never show it again"
+msgstr "Hide this message and never show it again"
+
 msgid "Customize Color"
 msgstr "Customise Colour"
 
@@ -8806,7 +9458,7 @@ msgid "Length"
 msgstr "Length"
 
 msgid "Length: {0}"
-msgstr ""
+msgstr "Length: {0}"
 
 msgid "{0} route, "
 msgid_plural "{0} routes, "
@@ -8820,36 +9472,39 @@ msgstr[1] "{0} waypoints"
 
 msgid "{0} track, "
 msgid_plural "{0} tracks, "
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} track, "
+msgstr[1] "{0} tracks, "
 
 msgid "Save GPX file"
 msgstr "Save GPX file"
 
 msgid "Imagery fade"
+msgstr "Imagery fade"
+
+msgid "Unsupported imagery type: {0}"
 msgstr ""
 
 msgid "ERROR"
-msgstr ""
+msgstr "ERROR"
 
 msgid "Next marker"
-msgstr ""
+msgstr "Next marker"
 
 msgid "Jump to next marker"
-msgstr ""
+msgstr "Jump to next marker"
 
 msgid "Previous marker"
-msgstr ""
+msgstr "Previous marker"
 
 msgid "Jump to previous marker"
-msgstr ""
+msgstr "Jump to previous marker"
 
 msgid "All projections are supported"
-msgstr ""
+msgstr "All projections are supported"
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8860,13 +9515,13 @@ msgid "Note"
 msgstr "Note"
 
 msgid "Notes layer"
-msgstr ""
+msgstr "Notes layer"
 
 msgid "Total notes:"
-msgstr ""
+msgstr "Total notes:"
 
 msgid "Changes need uploading?"
-msgstr ""
+msgstr "Changes need uploading?"
 
 msgid "Data Layer {0}"
 msgstr "Data Layer {0}"
@@ -8875,7 +9530,7 @@ msgid "outside downloaded area"
 msgstr "outside downloaded area"
 
 msgid "Merging layers"
-msgstr ""
+msgstr "Merging layers"
 
 msgid "{0} deleted"
 msgid_plural "{0} deleted"
@@ -8892,7 +9547,7 @@ msgid "API version: {0}"
 msgstr "API version: {0}"
 
 msgid "Upload is discouraged"
-msgstr ""
+msgstr "Upload is discouraged"
 
 msgid "Convert to GPX layer"
 msgstr "Convert to GPX layer"
@@ -8934,147 +9589,46 @@ msgstr ""
 msgid "Save OSM file"
 msgstr "Save OSM file"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
+msgid "EPSG:4326 and Mercator projection are supported"
+msgstr "EPSG:4326 and Mercator projection are supported"
 
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
+msgid "Validation errors"
+msgstr "Validation errors"
 
-msgid "Auto Zoom"
-msgstr "Auto Zoom"
+msgid "No validation errors"
+msgstr "No validation errors"
 
-msgid "Auto load tiles"
-msgstr ""
+msgid "Set WMS Bookmark"
+msgstr "Set WMS Bookmark"
 
-msgid "Show Errors"
+msgid ""
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Load Tile"
-msgstr "Load Tile"
+msgid "Correlate to GPX"
+msgstr "Correlate to GPX"
 
-msgid "Show Tile Info"
-msgstr "Show Tile Info"
+msgid "Invalid timezone"
+msgstr "Invalid timezone"
 
-msgid "Load All Tiles"
-msgstr "Load All Tiles"
+msgid "Invalid offset"
+msgstr "Invalid offset"
 
-msgid "Load All Error Tiles"
-msgstr ""
+msgid "Correlate images with GPX track"
+msgstr "Correlate images with GPX track"
 
-msgid "Increase zoom"
-msgstr "Increase zoom"
+msgid "Try Again"
+msgstr "Try Again"
 
-msgid "Decrease zoom"
-msgstr "Decrease zoom"
+msgid "No images could be matched!"
+msgstr "No images could be matched!"
 
-msgid "Snap to tile size"
-msgstr "Snap to tile size"
+msgid "GPX Files (*.gpx *.gpx.gz)"
+msgstr "GPX Files (*.gpx *.gpx.gz)"
 
-msgid "Flush Tile Cache"
-msgstr "Flush Tile Cache"
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "EPSG:4326 and Mercator projection are supported"
-msgstr ""
-
-msgid "Validation errors"
-msgstr "Validation errors"
-
-msgid "No validation errors"
-msgstr "No validation errors"
-
-msgid "Blank Layer"
-msgstr "Blank Layer"
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr "WMS layer ({0}), automatically downloading in zoom {1}"
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr "WMS layer ({0}), downloading in zoom {1}"
-
-msgid "Download visible tiles"
-msgstr "Download visible tiles"
-
-msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-
-msgid "Change resolution"
-msgstr "Change resolution"
-
-msgid "Reload erroneous tiles"
-msgstr "Reload erroneous tiles"
-
-msgid "Alpha channel"
-msgstr "Alpha channel"
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
-msgstr "Set WMS Bookmark"
-
-msgid "Automatic downloading"
-msgstr "Automatic downloading"
-
-msgid "Zoom to native resolution"
-msgstr ""
-
-msgid "Supported projections are: {0}"
-msgstr ""
-
-msgid "Unsupported WMS file version; found {0}, expected {1}"
-msgstr "Unsupported WMS file version; found {0}, expected {1}"
-
-msgid "Save WMS file"
-msgstr ""
-
-msgid "Correlate to GPX"
-msgstr "Correlate to GPX"
-
-msgid "GPX Files (*.gpx *.gpx.gz)"
-msgstr "GPX Files (*.gpx *.gpx.gz)"
-
-msgid "File {0} is loaded yet under the name \"{1}\""
-msgstr "File {0} is loaded yet under the name \"{1}\""
+msgid "File {0} is loaded yet under the name \"{1}\""
+msgstr "File {0} is loaded yet under the name \"{1}\""
 
 msgid "Error while parsing {0}"
 msgstr "Error while parsing {0}"
@@ -9137,7 +9691,7 @@ msgid "Auto-Guess"
 msgstr "Auto-Guess"
 
 msgid "Matches first photo with first gpx point"
-msgstr ""
+msgstr "Matches first photo with first gpx point"
 
 msgid "Manual adjust"
 msgstr "Manual adjust"
@@ -9160,24 +9714,9 @@ msgstr "Timezone: "
 msgid "Offset:"
 msgstr "Offset:"
 
-msgid "Correlate images with GPX track"
-msgstr "Correlate images with GPX track"
-
 msgid "Correlate"
 msgstr "Correlate"
 
-msgid "Invalid timezone"
-msgstr "Invalid timezone"
-
-msgid "Invalid offset"
-msgstr "Invalid offset"
-
-msgid "Try Again"
-msgstr "Try Again"
-
-msgid "No images could be matched!"
-msgstr "No images could be matched!"
-
 msgid "No gpx selected"
 msgstr "No gpx selected"
 
@@ -9290,8 +9829,8 @@ msgstr[1] "{0} were found to be GPS tagged."
 
 msgid "{0} has updated GPS data."
 msgid_plural "{0} have updated GPS data."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} has updated GPS data."
+msgstr[1] "{0} have updated GPS data."
 
 msgid "Delete image file from disk"
 msgstr "Delete image file from disk"
@@ -9334,7 +9873,7 @@ msgid "Delete File from disk"
 msgstr "Delete File from disk"
 
 msgid "Copy image path"
-msgstr ""
+msgstr "Copy image path"
 
 msgid "Next"
 msgstr "Next"
@@ -9343,10 +9882,10 @@ msgid "Show next Image"
 msgstr "Show next Image"
 
 msgid "Show first Image"
-msgstr ""
+msgstr "Show first Image"
 
 msgid "Show last Image"
-msgstr ""
+msgstr "Show last Image"
 
 msgid "Center view"
 msgstr "Centre view"
@@ -9368,51 +9907,59 @@ msgid ""
 "\n"
 "Speed: {0} km/h"
 msgstr ""
+"\n"
+"Speed: {0} km/h"
 
 msgid ""
 "\n"
 "Direction {0}°"
 msgstr ""
+"\n"
+"Direction {0}°"
 
 msgid ""
 "\n"
 "EXIF time: {0}"
 msgstr ""
+"\n"
+"EXIF time: {0}"
 
 msgid ""
 "\n"
 "GPS time: {0}"
 msgstr ""
-
-msgid "JPEG images (*.jpg)"
-msgstr "JPEG images (*.jpg)"
+"\n"
+"GPS time: {0}"
 
 msgid "Show thumbnails"
-msgstr ""
+msgstr "Show thumbnails"
 
 msgid "Show image thumbnails instead of icons."
-msgstr ""
+msgstr "Show image thumbnails instead of icons."
 
 msgid "Choose visible tracks"
-msgstr ""
+msgstr "Choose visible tracks"
 
 msgid "Select by date"
-msgstr ""
+msgstr "Select by date"
 
 msgid ""
 "<html>Select all tracks that you want to be displayed. You can drag select a "
 "range of tracks or use CTRL+Click to select specific ones. The map is "
 "updated live in the background. Open the URLs by double clicking them.</html>"
 msgstr ""
+"<html>Select all tracks that you want to be displayed. You can drag select a "
+"range of tracks or use CTRL+Click to select specific ones. The map is "
+"updated live in the background. Open the URLs by double clicking them.</html>"
 
 msgid "Set track visibility for {0}"
-msgstr ""
+msgstr "Set track visibility for {0}"
 
 msgid "Show all"
-msgstr ""
+msgstr "Show all"
 
 msgid "Show selected only"
-msgstr ""
+msgstr "Show selected only"
 
 msgid "Convert to data layer"
 msgstr "Convert to data layer"
@@ -9425,85 +9972,82 @@ msgstr ""
 "harmful.<br>If you want to upload traces, look here:</html>"
 
 msgid "Customize track drawing"
-msgstr ""
+msgstr "Customize track drawing"
 
 msgid "From"
-msgstr ""
+msgstr "From"
 
 msgid "To"
-msgstr ""
+msgstr "To"
 
 msgid "No timestamp"
-msgstr ""
+msgstr "No timestamp"
 
 msgid "Select to download OSM data."
-msgstr ""
+msgstr "Select to download OSM data."
 
 msgid "Select to download GPS traces."
-msgstr ""
+msgstr "Select to download GPS traces."
 
 msgid "Download everything within:"
 msgstr "Download everything within:"
 
 msgid "meters"
-msgstr ""
+msgstr "metres"
 
 msgid "Maximum area per request:"
 msgstr "Maximum area per request:"
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
-msgstr ""
+msgstr "Download near:"
 
 msgid "track only"
-msgstr ""
+msgstr "track only"
 
 msgid "waypoints only"
-msgstr ""
+msgstr "waypoints only"
 
 msgid "track and waypoints"
-msgstr ""
+msgstr "track and waypoints"
 
 msgid "Click to download"
-msgstr ""
+msgstr "Click to download"
 
 msgid "Click to cancel"
-msgstr ""
+msgstr "Click to cancel"
 
 msgid "Download from OSM along this track"
 msgstr "Download from OSM along this track"
 
 msgid "Calculating Download Area"
-msgstr ""
+msgstr "Calculating Download Area"
 
 msgid "Precache imagery tiles along this track"
-msgstr ""
+msgstr "Precache imagery tiles along this track"
 
 msgid "Precaching WMS"
-msgstr ""
+msgstr "Precaching WMS"
 
 msgid "Please select the imagery layer."
-msgstr ""
+msgstr "Please select the imagery layer."
 
 msgid "Select imagery layer"
-msgstr ""
+msgstr "Select imagery layer"
 
 msgid "There are no imagery layers."
-msgstr ""
+msgstr "There are no imagery layers."
 
 msgid "No imagery layers"
-msgstr ""
+msgstr "No imagery layers"
 
 msgid "Velocity, km/h"
-msgstr ""
+msgstr "Velocity, km/h"
 
 msgid "HDOP, m"
-msgstr ""
+msgstr "HDOP, m"
 
 msgid "Time"
-msgstr ""
+msgstr "Time"
 
 msgid "Direction"
 msgstr "Direction"
@@ -9584,7 +10128,7 @@ msgid "No existing audio markers in this layer to offset from."
 msgstr "No existing audio markers in this layer to offset from."
 
 msgid "Show Text/Icons"
-msgstr ""
+msgstr "Show Text/Icons"
 
 msgid "Toggle visible state of the marker text and icons."
 msgstr "Toggle visible state of the marker text and icons."
@@ -9637,13 +10181,13 @@ msgid "(URL was: "
 msgstr "(URL was: "
 
 msgid "Select the map painting styles"
-msgstr ""
+msgstr "Select the map painting styles"
 
 msgid "Failed to load Mappaint styles from ''{0}''. Exception was: {1}"
-msgstr ""
+msgstr "Failed to load Mappaint styles from ''{0}''. Exception was: {1}"
 
 msgid "loading style ''{0}''..."
-msgstr ""
+msgstr "loading style ''{0}''..."
 
 msgid ""
 "There was an error when loading this style. Select ''Info'' from the right "
@@ -9652,15 +10196,21 @@ msgid_plural ""
 "There were {0} errors when loading this style. Select ''Info'' from the "
 "right click menu for details."
 msgstr[0] ""
+"There was an error when loading this style. Select ''Info'' from the right "
+"click menu for details."
 msgstr[1] ""
+"There were {0} errors when loading this style. Select ''Info'' from the "
+"right click menu for details."
 
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
-msgstr ""
+msgstr "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
 
 msgid ""
 "Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
 "''{2}'' instead."
 msgstr ""
+"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
+"''{2}'' instead."
 
 msgid "Illegal dash pattern, values must be positive"
 msgstr "Illegal dash pattern, values must be positive"
@@ -9671,6 +10221,7 @@ msgstr "Illegal dash pattern, at least one value must be > 0"
 msgid ""
 "Failed to parse Mappaint styles from ''{0}''. Error was: [{1}:{2}] {3}"
 msgstr ""
+"Failed to parse Mappaint styles from ''{0}''. Error was: [{1}:{2}] {3}"
 
 msgid "Access Token Key:"
 msgstr "Access Token Key:"
@@ -9768,6 +10319,10 @@ msgid ""
 "will be submitted to the OSM server <strong>only once</strong>. Subsequent "
 "data upload requests don''t use your password any more."
 msgstr ""
+"Please enter your OSM user name and password. The password will "
+"<strong>not</strong> be saved in clear text in the JOSM preferences and it "
+"will be submitted to the OSM server <strong>only once</strong>. Subsequent "
+"data upload requests don''t use your password any more."
 
 msgid "Username: "
 msgstr "Username: "
@@ -9779,6 +10334,8 @@ msgid ""
 "<strong>Warning:</strong> JOSM does login <strong>once</strong> using a "
 "secure connection."
 msgstr ""
+"<strong>Warning:</strong> JOSM does login <strong>once</strong> using a "
+"secure connection."
 
 msgid "Granted rights"
 msgstr "Granted rights"
@@ -9911,6 +10468,8 @@ msgid ""
 "With OAuth you grant JOSM the right to upload map data and GPS tracks on "
 "your behalf (<a href=\"{0}\">more info...</a>)."
 msgstr ""
+"With OAuth you grant JOSM the right to upload map data and GPS tracks on "
+"your behalf (<a href=\"{0}\">more info...</a>)."
 
 msgid "Please select an authorization procedure: "
 msgstr "Please select an authorisation procedure: "
@@ -9925,7 +10484,7 @@ msgid "Close the dialog and accept the Access Token"
 msgstr "Close the dialogue and accept the Access Token"
 
 msgid "Failed to cancel running OAuth operation"
-msgstr ""
+msgstr "Failed to cancel running OAuth operation"
 
 msgid "Retrieving OAuth Request Token from ''{0}''"
 msgstr "Retrieving OAuth Request Token from ''{0}''"
@@ -9994,10 +10553,10 @@ msgid "Select to grant JOSM the right to write your server preferences"
 msgstr "Select to grant JOSM the right to write your server preferences"
 
 msgid "Allow modifications of notes"
-msgstr ""
+msgstr "Allow modifications of notes"
 
 msgid "Select to grant JOSM the right to modify notes on your behalf"
-msgstr ""
+msgstr "Select to grant JOSM the right to modify notes on your behalf"
 
 msgid "Retrieving OAuth Access Token..."
 msgstr "Retrieving OAuth Access Token..."
@@ -10104,6 +10663,10 @@ msgid ""
 "not<br>be able to access any protected resource on this server using this "
 "token.</html>"
 msgstr ""
+"<html>Failed to access the OSM server ''{0}''<br>with the Access Token "
+"''{1}''.<br>The server rejected the Access Token as unauthorized. You will "
+"not<br>be able to access any protected resource on this server using this "
+"token.</html>"
 
 msgid "Test failed"
 msgstr "Test failed"
@@ -10163,15 +10726,15 @@ msgstr "Close the preferences dialogue and discard preference updates"
 msgid "Save the preferences and close the dialog"
 msgstr "Save the preferences and close the dialogue"
 
-msgid "Download plugins"
-msgstr "Download plug-ins"
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr "You have to restart JOSM for some settings to take effect."
 
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr "Download plug-ins"
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -10992,6 +11555,21 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
+msgid "1. Enter getCapabilities URL"
+msgstr ""
+
+msgid "2. Enter name for this layer"
+msgstr ""
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr ""
 
@@ -11010,6 +11588,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -11031,6 +11621,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -11073,9 +11666,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr "Layer"
 
@@ -11100,37 +11690,22 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr "Downloader:"
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr "Overlap tiles"
-
-msgid "% of east:"
-msgstr "% of east:"
-
-msgid "% of north:"
-msgstr "% of north:"
+msgid "Tile size:"
+msgstr ""
 
 msgid "Auto save enabled"
 msgstr ""
@@ -12100,6 +12675,14 @@ msgstr "Apply Preset"
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] "Change {0} object"
@@ -12208,6 +12791,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr "Presets"
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12483,6 +13069,9 @@ msgstr "<html>Could not read files.<br>Error is:<br>{0}</html>"
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -13039,6 +13628,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr "WMS Files (*.wms)"
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr "Unsupported WMS file version; found {0}, expected {1}"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -13447,6 +14039,19 @@ msgstr[1] ""
 "Plug-in {0} requires {1} plug-ins which were not found. The missing plug-ins "
 "are:\""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -14514,6 +15119,9 @@ msgstr ""
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr "View"
+
 msgid "Blue:"
 msgstr ""
 
@@ -14553,7 +15161,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -14565,9 +15173,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14676,6 +15281,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14689,12 +15297,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14731,10 +15345,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14761,6 +15381,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14785,7 +15408,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14800,6 +15423,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14812,12 +15438,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14838,6 +15458,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14870,10 +15493,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14903,6 +15523,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14918,154 +15544,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -15080,9 +15712,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -15212,6 +15853,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -15227,7 +15883,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -15555,6 +16211,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15645,11 +16306,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15707,7 +16363,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15725,9 +16381,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr "Adds no left turn for sets of 4 or 5 ways"
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15815,6 +16468,14 @@ msgid ""
 msgstr ""
 "This plug-in simplifies the mapping and editing of public transport routes."
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15855,6 +16516,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15937,9 +16601,6 @@ msgstr "Easy downloading along a long set of interconnected ways"
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -16347,6 +17008,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -16371,10 +17040,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -16391,6 +17056,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -16407,11 +17076,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -16427,6 +17108,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -16439,6 +17124,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -16466,6 +17155,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr "Fee"
 
@@ -16857,6 +17558,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr "Unclassified"
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr "Passing Places"
 
@@ -16933,6 +17637,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr "Road (Unknown Type)"
 
@@ -17470,6 +18177,12 @@ msgstr "Speed Camera"
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17659,8 +18372,13 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
-msgstr "Water"
+msgstr ""
 
 msgid "Drain"
 msgstr "Drain"
@@ -17712,6 +18430,10 @@ msgstr "Reservoir"
 msgid "Covered Reservoir"
 msgstr "Covered Reservoir"
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17853,77 +18575,191 @@ msgstr ""
 msgid "public"
 msgstr "public"
 
-msgid "Pier"
-msgstr "Pier"
+msgid "Marine Fuel"
+msgstr ""
 
-msgid "Lock Gate"
-msgstr "Lock Gate"
+msgid "Agip"
+msgstr "Agip"
 
-msgid "Turning Point"
-msgstr "Turning Point"
+msgid "Aral"
+msgstr "Aral"
 
-msgid "Slipway"
-msgstr "Slipway"
+msgid "Avia"
+msgstr "Avia"
 
-msgid "Boatyard"
-msgstr "Boatyard"
+msgid "BP"
+msgstr "BP"
 
-msgid "Dock"
-msgstr "Dock"
+msgid "Chevron"
+msgstr ""
 
-msgid "Transport"
-msgstr "Transport"
+msgid "Citgo"
+msgstr ""
 
-msgid "Railway"
-msgstr "Railway"
+msgid "Eni"
+msgstr ""
 
-msgid "Rail"
-msgstr "Railway"
+msgid "Esso"
+msgstr "Esso"
 
-msgid "main"
+msgid "Exxon"
 msgstr ""
 
-msgid "branch"
+msgid "Gulf"
 msgstr ""
 
-msgid "industrial"
-msgstr "industrial"
+msgid "Mobil"
+msgstr ""
 
-msgid "military"
-msgstr "military"
+msgid "OMV"
+msgstr "OMV"
 
-msgid "tourism"
-msgstr "tourism"
+msgid "Petro-Canada"
+msgstr ""
 
-msgid "freight"
+msgid "Pioneer"
 msgstr ""
 
-msgid "Narrow Gauge Rail"
-msgstr "Narrow Gauge Railway"
+msgid "Q8"
+msgstr "Q8"
 
-msgid "Monorail"
-msgstr "Monorail"
+msgid "Repsol"
+msgstr "Repsol"
 
-msgid "Preserved"
-msgstr "Preserved"
+msgid "Shell"
+msgstr "Shell"
 
-msgid "Light Rail"
-msgstr "Light Rail"
+msgid "Socar"
+msgstr ""
 
-msgid "Subway"
-msgstr "Subway"
+msgid "Statoil"
+msgstr "Statoil"
 
-msgid "Tram"
-msgstr "Tram"
+msgid "Sunoco"
+msgstr ""
 
-msgid "Bus Guideway"
-msgstr "Bus Guideway"
+msgid "Tamoil"
+msgstr "Tamoil"
 
-msgid "Disused Rail"
-msgstr "Disused Rail"
+msgid "Texaco"
+msgstr "Texaco"
 
-msgid "Abandoned Rail"
-msgstr "Abandoned Rail"
+msgid "Total"
+msgstr "Total"
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr "Fuel types:"
+
+msgid "Diesel"
+msgstr "Diesel"
+
+msgid "Bio Diesel"
+msgstr "Bio Diesel"
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr "Octane 91"
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr "Octane 95"
+
+msgid "Octane 98"
+msgstr "Octane 98"
+
+msgid "Octane 100"
+msgstr "Octane 100"
+
+msgid "E10 (10% Ethanol mix)"
+msgstr "E10 (10% Ethanol mix)"
+
+msgid "E85 (85% Ethanol mix)"
+msgstr "E85 (85% Ethanol mix)"
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr "LPG (Liquefied petroleum gas)"
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr "CNG (Compressed Natural Gas)"
+
+msgid "Pier"
+msgstr "Pier"
+
+msgid "Lock Gate"
+msgstr "Lock Gate"
+
+msgid "Turning Point"
+msgstr "Turning Point"
+
+msgid "Slipway"
+msgstr "Slipway"
+
+msgid "Boatyard"
+msgstr "Boatyard"
+
+msgid "Dock"
+msgstr "Dock"
+
+msgid "Transport"
+msgstr "Transport"
+
+msgid "Railway"
+msgstr "Railway"
+
+msgid "Rail"
+msgstr "Railway"
+
+msgid "main"
+msgstr ""
+
+msgid "branch"
+msgstr ""
+
+msgid "industrial"
+msgstr "industrial"
+
+msgid "military"
+msgstr "military"
+
+msgid "tourism"
+msgstr "tourism"
+
+msgid "freight"
+msgstr ""
+
+msgid "Narrow Gauge Rail"
+msgstr "Narrow Gauge Railway"
+
+msgid "Monorail"
+msgstr "Monorail"
+
+msgid "Preserved"
+msgstr "Preserved"
+
+msgid "Light Rail"
+msgstr "Light Rail"
+
+msgid "Subway"
+msgstr "Subway"
+
+msgid "Tram"
+msgstr "Tram"
+
+msgid "Bus Guideway"
+msgstr "Bus Guideway"
+
+msgid "Disused Rail"
+msgstr "Disused Rail"
+
+msgid "Abandoned Rail"
+msgstr "Abandoned Rail"
 
 msgid "Level Crossing"
 msgstr "Level Crossing"
@@ -17969,6 +18805,9 @@ msgstr "Buffer Stop"
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr "Aerialway"
 
@@ -18092,78 +18931,6 @@ msgstr ""
 msgid "Fuel"
 msgstr "Fuel"
 
-msgid "Agip"
-msgstr "Agip"
-
-msgid "Aral"
-msgstr "Aral"
-
-msgid "Avia"
-msgstr "Avia"
-
-msgid "BP"
-msgstr "BP"
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr "Esso"
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr "OMV"
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr "Q8"
-
-msgid "Repsol"
-msgstr "Repsol"
-
-msgid "Shell"
-msgstr "Shell"
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr "Statoil"
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr "Tamoil"
-
-msgid "Texaco"
-msgstr "Texaco"
-
-msgid "Total"
-msgstr "Total"
-
-msgid "Independent"
-msgstr ""
-
 msgid "With shop"
 msgstr ""
 
@@ -18173,51 +18940,12 @@ msgstr ""
 msgid "kiosk"
 msgstr ""
 
-msgid "Fuel types:"
-msgstr "Fuel types:"
-
-msgid "Diesel"
-msgstr "Diesel"
-
-msgid "Bio Diesel"
-msgstr "Bio Diesel"
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr "Diesel (Gas To Liquid - ultimate diesel)"
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr "Diesel for Heavy Good Vehicles"
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr "Octane 91"
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr "Octane 95"
-
-msgid "Octane 98"
-msgstr "Octane 98"
-
-msgid "Octane 100"
-msgstr "Octane 100"
-
-msgid "E10 (10% Ethanol mix)"
-msgstr "E10 (10% Ethanol mix)"
-
-msgid "E85 (85% Ethanol mix)"
-msgstr "E85 (85% Ethanol mix)"
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr "LPG (Liquefied petroleum gas)"
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr "CNG (Compressed Natural Gas)"
-
 msgid "1/25 mix (mofa/moped)"
 msgstr "1/25 mix (mofa/moped)"
 
@@ -18436,9 +19164,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr "route segment"
-
 msgid "stop position"
 msgstr ""
 
@@ -18457,6 +19182,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr "route segment"
+
 msgid "Route Master"
 msgstr ""
 
@@ -18659,6 +19387,12 @@ msgstr "Hotel"
 msgid "Stars"
 msgstr "Stars"
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr "Motel"
 
@@ -18749,6 +19483,9 @@ msgstr "sandwich"
 msgid "sushi"
 msgstr "sushi"
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18963,6 +19700,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -19450,8 +20190,8 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
-msgstr "Recycling"
+msgid "Recycling Container"
+msgstr ""
 
 msgid "Batteries"
 msgstr "Batteries"
@@ -19459,22 +20199,49 @@ msgstr "Batteries"
 msgid "Cans"
 msgstr "Cans"
 
+msgid "Cardboard"
+msgstr ""
+
+msgid "Electrical Appliances"
+msgstr ""
+
 msgid "Glass"
 msgstr "Glass"
 
+msgid "Glass Bottles"
+msgstr ""
+
+msgid "Green Waste"
+msgstr ""
+
 msgid "Paper"
 msgstr "Paper"
 
-msgid "Scrap Metal"
-msgstr "Scrap Metal"
-
-msgid "container"
+msgid "Plastic"
 msgstr ""
 
-msgid "centre"
+msgid "Plastic Bottles"
 msgstr ""
 
-msgid "Waste Basket/Trash Can"
+msgid "Plastic Packaging"
+msgstr ""
+
+msgid "Scrap Metal"
+msgstr "Scrap Metal"
+
+msgid "Shoes"
+msgstr "Shoes"
+
+msgid "Small Appliances"
+msgstr ""
+
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
+msgstr ""
+
+msgid "Waste Basket/Trash Can"
 msgstr ""
 
 msgid "Waste Disposal/Dumpster"
@@ -19675,6 +20442,9 @@ msgstr "Archery"
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr "Climbing"
 
@@ -19850,12 +20620,18 @@ msgstr "Baseball"
 msgid "Basketball"
 msgstr "Basketball"
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr "Golf"
 
@@ -19871,14 +20647,14 @@ msgstr ""
 msgid "Cricket"
 msgstr "Cricket"
 
-msgid "Cricket Nets"
-msgstr "Cricket Nets"
-
 msgid "Croquet"
 msgstr "Croquet"
 
-msgid "Hockey"
-msgstr "Hockey"
+msgid "Field Hockey"
+msgstr ""
+
+msgid "Ice Hockey"
+msgstr ""
 
 msgid "Pelota"
 msgstr "Pelota"
@@ -19901,9 +20677,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19922,9 +20695,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr "Man Made"
 
@@ -19997,6 +20767,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -21317,9 +22095,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr "Shoes"
-
 msgid "Outdoor"
 msgstr "Outdoor"
 
@@ -22332,10 +23107,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22762,6 +23537,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22786,6 +23564,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22846,6 +23636,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22936,9 +23729,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -23312,6 +24114,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -23366,9 +24171,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -24113,47 +24915,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -24162,10 +24973,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
+msgstr ""
+
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24810,6 +25633,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr "Blank Layer"
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr "WMS layer ({0}), {1} tile(s) loaded"
 
@@ -26114,184 +26940,490 @@ msgstr "Maximum number of nodes in initial trace"
 msgid "Maximum gray value to count as water (0-255)"
 msgstr "Maximum grey value to count as water (0-255)"
 
-msgid "Line simplification accuracy (degrees)"
-msgstr "Line simplification accuracy (degrees)"
+msgid "Line simplification accuracy (degrees)"
+msgstr "Line simplification accuracy (degrees)"
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr "Resolution of Landsat tiles (pixels per degree)"
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr "Size of Landsat tiles (pixels)"
+
+msgid "Shift all traces to east (degrees)"
+msgstr "Shift all traces to east (degrees)"
+
+msgid "Shift all traces to north (degrees)"
+msgstr "Shift all traces to north (degrees)"
+
+msgid "Direction to search for land"
+msgstr "Direction to search for land"
+
+msgid "Tag ways as"
+msgstr "Tag ways as"
+
+msgid "WMS Layer"
+msgstr "WMS Layer"
+
+msgid "Maximum cache size (MB)"
+msgstr "Maximum cache size (MB)"
+
+msgid "Maximum cache age (days)"
+msgstr "Maximum cache age (days)"
+
+msgid "Source text"
+msgstr "Source text"
+
+msgid "Lakewalker Plugin Preferences"
+msgstr "Lakewalker Plug-in Preferences"
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr "A plug-in to trace water bodies on Landsat imagery."
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+"Maximum number of segments allowed in each generated way. Default 250."
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+"Maximum grey value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr "Size of one landsat tile, measured in pixels. Default 2000."
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr "Offset all points in East direction (degrees). Default 0."
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr "Offset all points in North direction (degrees). Default 0."
+
+msgid "Direction to search for land. Default east."
+msgstr "Direction to search for land. Default east."
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr "Tag ways as water, coastline, land or nothing. Default is water."
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr "Which WMS layer to use for tracing against. Default is IR1."
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr "Maximum size of each cache directory in bytes. Default is 300MB"
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr "Maximum age of each cached file in days. Default is 100"
+
+msgid "Data source text. Default is Landsat."
+msgstr "Data source text. Default is Landsat."
+
+msgid "Downloading image tile..."
+msgstr "Downloading image tile..."
+
+msgid "Could not acquire image"
+msgstr "Could not acquire image"
+
+msgid "Connection Failed"
+msgstr "Connection Failed"
+
+msgid "Not connected"
+msgstr "Not connected"
+
+msgid "Connecting"
+msgstr "Connecting"
+
+msgid "Connected"
+msgstr "Connected"
+
+msgid "no name"
+msgstr "no name"
+
+msgid "Live GPS"
+msgstr "Live GPS"
+
+msgid "Show GPS data."
+msgstr "Show GPS data."
+
+msgid "Status"
+msgstr "Status"
+
+msgid "Way Info"
+msgstr "Way Info"
+
+msgid "Speed"
+msgstr "Speed"
+
+msgid "Course"
+msgstr "Course"
+
+msgid "LiveGPS layer"
+msgstr "LiveGPS layer"
+
+msgid "Capture GPS Track"
+msgstr "Capture GPS Track"
+
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgstr "Connect to gpsd server and show current position in LiveGPS layer."
+
+msgid "Center Once"
+msgstr "Centre Once"
+
+msgid "Center the LiveGPS layer to current position."
+msgstr "Centre the LiveGPS layer to current position."
+
+msgid "Auto-Center"
+msgstr "Auto-Centre"
+
+msgid "Continuously center the LiveGPS layer to current position."
+msgstr "Continuously centre the LiveGPS layer to current position."
+
+msgid "Open MapDust"
+msgstr ""
+
+msgid "MapDust bug reports"
+msgstr ""
+
+msgid "Activates the MapDust bug reporter plugin"
+msgstr ""
+
+msgid "Missing input data"
+msgstr ""
+
+msgid "Mapillary Images"
+msgstr ""
+
+msgid "Mapillary layer"
+msgstr ""
+
+msgid "Total images:"
+msgstr ""
+
+msgid "images"
+msgstr ""
+
+msgid "Mapillary"
+msgstr ""
+
+msgid "Create Mapillary layer"
+msgstr ""
+
+msgid "Start Mapillary layer"
+msgstr ""
+
+msgid "Download Mapillary images in current view"
+msgstr ""
+
+msgid "Export pictures"
+msgstr ""
+
+msgid "Export Mapillary pictures"
+msgstr ""
+
+msgid "Export images"
+msgstr ""
+
+msgid "Import pictures"
+msgstr ""
+
+msgid "Import local pictures"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer"
+msgstr ""
+
+msgid "Select pictures"
+msgstr ""
+
+msgid "Import pictures into sequence"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer in a sequence"
+msgstr ""
+
+msgid "Join mode"
+msgstr ""
+
+msgid "Join/unjoin pictures"
+msgstr ""
+
+msgid "Join Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures"
+msgstr ""
+
+msgid "Upload Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures."
+msgstr ""
+
+msgid "Walk mode"
+msgstr ""
+
+msgid "Start walk mode"
+msgstr ""
+
+msgid "Zoom to selected image"
+msgstr ""
+
+msgid "Zoom to the currently selected Mapillary image"
+msgstr ""
+
+msgid "Uploaded {0} images"
+msgstr ""
+
+msgid "Approve upload on the website"
+msgstr ""
+
+msgid "View in website"
+msgstr ""
+
+msgid "Copy key"
+msgstr ""
+
+msgid "Copy key tag"
+msgstr ""
+
+msgid "Edit on website"
+msgstr ""
+
+msgid "Export all images"
+msgstr ""
+
+msgid "Export selected sequence"
+msgstr ""
+
+msgid "Export selected images"
+msgstr ""
+
+msgid "Rewrite imported images"
+msgstr ""
+
+msgid "Select a folder"
+msgstr ""
+
+msgid "Explore"
+msgstr ""
+
+msgid "Select a directory"
+msgstr ""
+
+msgid "Speed limit"
+msgstr ""
+
+msgid "Give way"
+msgstr ""
+
+msgid "No entry"
+msgstr ""
+
+msgid "Intersection danger"
+msgstr ""
+
+msgid "Mandatory direction (any)"
+msgstr ""
+
+msgid "No turn"
+msgstr ""
+
+msgid "Uneven road"
+msgstr ""
+
+msgid "No parking"
+msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
-msgstr "Resolution of Landsat tiles (pixels per degree)"
+msgid "No overtaking"
+msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
-msgstr "Size of Landsat tiles (pixels)"
+msgid "Pedestrian crossing"
+msgstr ""
 
-msgid "Shift all traces to east (degrees)"
-msgstr "Shift all traces to east (degrees)"
+msgid "Years"
+msgstr ""
 
-msgid "Shift all traces to north (degrees)"
-msgstr "Shift all traces to north (degrees)"
+msgid "Months"
+msgstr ""
 
-msgid "Direction to search for land"
-msgstr "Direction to search for land"
+msgid "Days"
+msgstr ""
 
-msgid "Tag ways as"
-msgstr "Tag ways as"
+msgid "Mapillary filter"
+msgstr ""
 
-msgid "WMS Layer"
-msgstr "WMS Layer"
+msgid "Open Mapillary filter dialog"
+msgstr ""
 
-msgid "Maximum cache size (MB)"
-msgstr "Maximum cache size (MB)"
+msgid "Downloaded images"
+msgstr ""
 
-msgid "Maximum cache age (days)"
-msgstr "Maximum cache age (days)"
+msgid "Only images with signs"
+msgstr ""
 
-msgid "Source text"
-msgstr "Source text"
+msgid "Choose signs"
+msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
-msgstr "Lakewalker Plug-in Preferences"
+msgid "Mapillary history"
+msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
-msgstr "A plug-in to trace water bodies on Landsat imagery."
+msgid "Open Mapillary history dialog"
+msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Open Mapillary window"
 msgstr ""
-"Maximum number of segments allowed in each generated way. Default 250."
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Mapillary dialog"
 msgstr ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Open Mapillary main dialog"
 msgstr ""
-"Maximum grey value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Next picture"
 msgstr ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Shows the next picture in the sequence"
 msgstr ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
-msgstr "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Previous picture"
+msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
-msgstr "Offset all points in East direction (degrees). Default 0."
+msgid "Shows the previous picture in the sequence"
+msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
-msgstr "Offset all points in North direction (degrees). Default 0."
+msgid "Jump to red"
+msgstr ""
 
-msgid "Direction to search for land. Default east."
-msgstr "Direction to search for land. Default east."
+msgid "Jumps to the picture at the other side of the red line"
+msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
-msgstr "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Jump to blue"
+msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
-msgstr "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Jumps to the picture at the other side of the blue line"
+msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
-msgstr "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Stops the walk."
+msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
-msgstr "Maximum age of each cached file in days. Default is 100"
+msgid "Play"
+msgstr ""
 
-msgid "Data source text. Default is Landsat."
-msgstr "Data source text. Default is Landsat."
+msgid "Continues with the paused walk."
+msgstr ""
 
-msgid "Downloading image tile..."
-msgstr "Downloading image tile..."
+msgid "Pause"
+msgstr ""
 
-msgid "Could not acquire image"
-msgstr "Could not acquire image"
+msgid "Pauses the walk."
+msgstr ""
 
-msgid "Connection Failed"
-msgstr "Connection Failed"
+msgid "Reverse buttons position when displaying images."
+msgstr ""
 
-msgid "Not connected"
-msgstr "Not connected"
+msgid "Display hour when the picture was taken"
+msgstr ""
 
-msgid "Connecting"
-msgstr "Connecting"
+msgid "Use 24 hour format"
+msgstr ""
 
-msgid "Connected"
-msgstr "Connected"
+msgid "Move to picture''s location with next/previous buttons"
+msgstr ""
 
-msgid "no name"
-msgstr "no name"
+msgid "Download mode: "
+msgstr ""
 
-msgid "Live GPS"
-msgstr "Live GPS"
+msgid "Upload selected sequence"
+msgstr ""
 
-msgid "Show GPS data."
-msgstr "Show GPS data."
+msgid "Delete after upload"
+msgstr ""
 
-msgid "Status"
-msgstr "Status"
+msgid "Wait for full quality pictures"
+msgstr ""
 
-msgid "Way Info"
-msgstr "Way Info"
+msgid "Follow selected image"
+msgstr ""
 
-msgid "Speed"
-msgstr "Speed"
+msgid "Go forward"
+msgstr ""
 
-msgid "Course"
-msgstr "Course"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "LiveGPS layer"
-msgstr "LiveGPS layer"
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Capture GPS Track"
-msgstr "Capture GPS Track"
+msgid "2 images joined"
+msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
-msgstr "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Center Once"
-msgstr "Centre Once"
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Center the LiveGPS layer to current position."
-msgstr "Centre the LiveGPS layer to current position."
+msgid "2 images unjoined"
+msgstr ""
 
-msgid "Auto-Center"
-msgstr "Auto-Centre"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
+msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
-msgstr "Continuously centre the LiveGPS layer to current position."
+msgid "Downloading"
+msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -26312,6 +27444,9 @@ msgstr "Selection Length"
 msgid "Selection Area"
 msgstr "Selection Area"
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr "Angle"
 
@@ -26374,47 +27509,6 @@ msgstr "Create Michigan left turn restriction"
 msgid "Unable to find via nodes. Please check your selection"
 msgstr "Unable to find via nodes. Please check your selection"
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -26647,6 +27741,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr "Tools"
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27867,6 +28964,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -28038,6 +29156,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -28047,6 +29168,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -28231,6 +29355,9 @@ msgstr "New value for {0}"
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -28409,6 +29536,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -28418,6 +29578,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr "AutoSave LiveData"
 
@@ -28655,9 +29818,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -30152,9 +31312,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
@@ -30218,27 +31375,29 @@ msgid "clipboard"
 msgstr ""
 
 msgid "Open Article"
-msgstr ""
+msgstr "Open Article"
 
 msgid "Opens the Wikipedia article of the selected item in a browser"
-msgstr ""
+msgstr "Opens the Wikipedia article of the selected item in a browser"
 
 msgid "Sets the default language for the Wikipedia articles"
-msgstr ""
+msgstr "Sets the default language for the Wikipedia articles"
 
 msgid "Enter the Wikipedia language"
-msgstr ""
+msgstr "Enter the Wikipedia language"
 
 msgid ""
 "Adds a ''wikipedia'' tag corresponding to this article to the selected "
 "objects"
 msgstr ""
+"Adds a ''wikipedia'' tag corresponding to this article to the selected "
+"objects"
 
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
-msgstr ""
+msgstr "The Ultimate WMS Super-speed Turbo Challenge II"
 
 msgid "Go driving"
-msgstr ""
+msgstr "Go driving"
 
 msgid "Drive a race car on this layer"
-msgstr ""
+msgstr "Drive a race car on this layer"
diff --git a/i18n/po/en_CA.po b/i18n/po/en_CA.po
index fa68c5f..85c9307 100644
--- a/i18n/po/en_CA.po
+++ b/i18n/po/en_CA.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2010-09-24 17:25+0000\n"
 "Last-Translator: Johann Beda <Unknown>\n"
 "Language-Team: English (Canada) <en_CA at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 05:04+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 05:09+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -97,21 +97,18 @@ msgstr ""
 msgid "Updating user interface"
 msgstr ""
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "Ignoring malformed file URL: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "Ignoring malformed URL: \"{0}\""
 
 msgid "Warning"
 msgstr "Warning"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "Ignoring malformed file URL: \"{0}\""
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr "Parameter \"downloadgps\" does not accept file names or file URLs"
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "Ignoring malformed URL: \"{0}\""
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -450,6 +447,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr "Distribute the selected nodes to equal distances along a line."
 
@@ -1035,6 +1035,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr ""
 
@@ -1951,15 +1975,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr ""
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -1981,6 +1996,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2099,9 +2123,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2315,9 +2336,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr ""
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2531,6 +2558,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2573,6 +2604,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3023,6 +3057,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3140,10 +3192,44 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3333,6 +3419,12 @@ msgstr ""
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3360,13 +3452,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -3982,9 +4074,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -3994,12 +4083,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4180,13 +4281,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4384,6 +4485,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4597,43 +4699,54 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
 msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
 msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
 msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
 msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
-msgid "Menu: {0}"
+msgctxt "menu"
+msgid "Help"
 msgstr ""
 
-msgid "Save and load the current session (list of layers, etc.)"
+msgid "Menu: {0}"
 msgstr ""
 
 msgid "Edit toolbar"
@@ -4657,6 +4770,7 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
 msgstr ""
 
@@ -4779,58 +4893,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr ""
-
-msgid "Pos."
+msgid " ({0})"
 msgstr ""
 
-msgid "Role"
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5259,6 +5331,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr ""
+
 msgid "Primitive"
 msgstr ""
 
@@ -5499,6 +5574,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5645,6 +5723,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5748,7 +5861,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5876,6 +5989,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5885,17 +6003,48 @@ msgstr ""
 msgid "unknown"
 msgstr ""
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -5941,10 +6090,16 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
-msgid "Activate"
+msgid "Gamma"
 msgstr ""
 
-msgid "Activate the selected layer"
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
+msgid "Activate"
+msgstr ""
+
+msgid "Activate the selected layer"
 msgstr ""
 
 msgid "Activate layer"
@@ -6070,6 +6225,12 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
+msgid "Mini map"
+msgstr ""
+
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
 msgid "List of notes"
 msgstr ""
 
@@ -6128,10 +6289,15 @@ msgstr "Object ID:"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "Enter the ID of the object that should be downloaded"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6160,6 +6326,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr ""
 
+msgid "Selection"
+msgstr ""
+
 msgid "Open a selection list window."
 msgstr ""
 
@@ -6250,6 +6419,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -6844,6 +7019,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6935,14 +7116,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7115,6 +7295,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7650,6 +7836,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8495,6 +8684,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr ""
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr ""
 
@@ -8548,6 +8837,9 @@ msgstr ""
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8568,7 +8860,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8651,80 +8943,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr ""
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-
-msgid "Auto Zoom"
-msgstr ""
-
-msgid "Auto load tiles"
-msgstr ""
-
-msgid "Show Errors"
-msgstr ""
-
-msgid "Load Tile"
-msgstr ""
-
-msgid "Show Tile Info"
-msgstr ""
-
-msgid "Load All Tiles"
-msgstr ""
-
-msgid "Load All Error Tiles"
-msgstr ""
-
-msgid "Increase zoom"
-msgstr ""
-
-msgid "Decrease zoom"
-msgstr ""
-
-msgid "Snap to tile size"
-msgstr ""
-
-msgid "Flush Tile Cache"
-msgstr ""
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
@@ -8734,56 +8952,30 @@ msgstr ""
 msgid "No validation errors"
 msgstr ""
 
-msgid "Blank Layer"
-msgstr ""
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "Download visible tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-
-msgid "Change resolution"
-msgstr ""
-
-msgid "Reload erroneous tiles"
-msgstr ""
-
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Automatic downloading"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Zoom to native resolution"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Supported projections are: {0}"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Save WMS file"
+msgid "Try Again"
 msgstr ""
 
-msgid "Correlate to GPX"
+msgid "No images could be matched!"
 msgstr ""
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
@@ -8870,24 +9062,9 @@ msgstr ""
 msgid "Offset:"
 msgstr ""
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
 msgid "Correlate"
 msgstr ""
 
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9081,9 +9258,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr ""
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9146,9 +9320,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9774,16 +9945,16 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 
 msgid "Would you like to restart now?"
 msgstr ""
 
-msgid "Icon paths:"
+msgid "Download plugins"
+msgstr ""
+
+msgid "Icon paths:"
 msgstr ""
 
 msgid "Short Description:"
@@ -10575,6 +10746,21 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
+msgid "1. Enter getCapabilities URL"
+msgstr ""
+
+msgid "2. Enter name for this layer"
+msgstr ""
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr ""
 
@@ -10593,6 +10779,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10614,6 +10812,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10656,9 +10857,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr ""
 
@@ -10683,36 +10881,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11648,6 +11831,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] ""
@@ -11756,6 +11947,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12009,6 +12203,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12545,6 +12742,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12930,6 +13130,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13924,6 +14137,9 @@ msgstr ""
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr ""
+
 msgid "Blue:"
 msgstr ""
 
@@ -13963,7 +14179,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -13975,9 +14191,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14086,6 +14299,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14099,12 +14315,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14141,10 +14363,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14171,6 +14399,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14195,7 +14426,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14210,6 +14441,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14222,12 +14456,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14248,6 +14476,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14280,10 +14511,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14313,6 +14541,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14328,154 +14562,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14490,9 +14730,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14622,6 +14871,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14637,7 +14901,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -14963,6 +15227,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15047,11 +15316,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15105,7 +15369,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15120,9 +15384,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15203,6 +15464,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15241,6 +15510,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15316,9 +15588,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15724,6 +15993,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15748,10 +16025,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15768,6 +16041,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15784,11 +16061,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15804,6 +16093,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15816,6 +16109,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15843,6 +16140,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16234,6 +16543,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16310,6 +16622,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr ""
 
@@ -16847,6 +17162,12 @@ msgstr ""
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17036,6 +17357,11 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
 msgstr ""
 
@@ -17089,6 +17415,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17230,13 +17560,127 @@ msgstr ""
 msgid "public"
 msgstr ""
 
-msgid "Pier"
+msgid "Marine Fuel"
 msgstr ""
 
-msgid "Lock Gate"
+msgid "Agip"
 msgstr ""
 
-msgid "Turning Point"
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
+msgid "Pier"
+msgstr ""
+
+msgid "Lock Gate"
+msgstr ""
+
+msgid "Turning Point"
 msgstr ""
 
 msgid "Slipway"
@@ -17346,6 +17790,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -17469,78 +17916,6 @@ msgstr ""
 msgid "Fuel"
 msgstr ""
 
-msgid "Agip"
-msgstr ""
-
-msgid "Aral"
-msgstr ""
-
-msgid "Avia"
-msgstr ""
-
-msgid "BP"
-msgstr ""
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr ""
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
 msgid "With shop"
 msgstr ""
 
@@ -17550,51 +17925,12 @@ msgstr ""
 msgid "kiosk"
 msgstr ""
 
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -17813,9 +18149,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17834,6 +18167,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18036,6 +18372,12 @@ msgstr ""
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18126,6 +18468,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18340,6 +18685,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18827,7 +19175,7 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
@@ -18836,43 +19184,70 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
-msgid "Glass"
+msgid "Cardboard"
 msgstr ""
 
-msgid "Paper"
+msgid "Electrical Appliances"
 msgstr ""
 
-msgid "Scrap Metal"
+msgid "Glass"
 msgstr ""
 
-msgid "container"
+msgid "Glass Bottles"
 msgstr ""
 
-msgid "centre"
+msgid "Green Waste"
 msgstr ""
 
-msgid "Waste Basket/Trash Can"
+msgid "Paper"
 msgstr ""
 
-msgid "Waste Disposal/Dumpster"
+msgid "Plastic"
 msgstr ""
 
-msgid "Sanitary Dump Station"
+msgid "Plastic Bottles"
 msgstr ""
 
-msgid "Suction pumpout"
+msgid "Plastic Packaging"
 msgstr ""
 
-msgid "Gravity drain for hose"
+msgid "Scrap Metal"
 msgstr ""
 
-msgid "Casette or Elsan Disposal"
+msgid "Shoes"
 msgstr ""
 
-msgid "Operation times"
+msgid "Small Appliances"
 msgstr ""
 
-msgid "Backrest"
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
+msgstr ""
+
+msgid "Waste Basket/Trash Can"
+msgstr ""
+
+msgid "Waste Disposal/Dumpster"
+msgstr ""
+
+msgid "Sanitary Dump Station"
+msgstr ""
+
+msgid "Suction pumpout"
+msgstr ""
+
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
+msgstr ""
+
+msgid "Operation times"
+msgstr ""
+
+msgid "Backrest"
 msgstr ""
 
 msgid "Amount of Seats"
@@ -19052,6 +19427,9 @@ msgstr ""
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr ""
 
@@ -19227,12 +19605,18 @@ msgstr ""
 msgid "Basketball"
 msgstr ""
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr ""
 
@@ -19248,13 +19632,13 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
@@ -19278,9 +19662,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19299,9 +19680,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -19374,6 +19752,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20694,9 +21080,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -21709,10 +22092,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22139,6 +22522,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22163,6 +22549,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22223,6 +22621,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22313,9 +22714,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22685,6 +23095,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22739,9 +23152,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23485,47 +23895,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23534,10 +23953,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24140,6 +24571,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr ""
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25237,374 +25671,680 @@ msgid ""
 "highlight tracks"
 msgstr ""
 
-msgid "Delete this"
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
 msgstr ""
 
-msgid "Delete this&older"
+msgid "Connecting"
 msgstr ""
 
-msgid "km/h"
+msgid "Connected"
 msgstr ""
 
-msgid "Track name: "
+msgid "no name"
 msgstr ""
 
-msgid "Update IRS adjustment layer"
+msgid "Live GPS"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid "Show GPS data."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Speed"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Course"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
+msgid "Explore"
 msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25625,6 +26365,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -25683,47 +26426,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -25956,6 +26658,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr ""
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27173,6 +27878,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27344,6 +28070,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27353,6 +28082,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27533,6 +28265,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27711,6 +28446,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27720,6 +28488,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -27956,9 +28727,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29441,9 +30209,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/en_GB.po b/i18n/po/en_GB.po
index b7fa59b..41b5fae 100644
--- a/i18n/po/en_GB.po
+++ b/i18n/po/en_GB.po
@@ -10,16 +10,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: JOSM\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
-"PO-Revision-Date: 2015-04-30 11:10+0000\n"
-"Last-Translator: Dee-earlsoft <Unknown>\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
+"PO-Revision-Date: 2015-09-03 22:09+0000\n"
+"Last-Translator: Ben Harris <bjh21 at bjh21.me.uk>\n"
 "Language-Team: German <josm-dev at openstreetmap.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 05:02+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 05:07+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: de\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -100,21 +100,18 @@ msgstr "Loading imagery preferences"
 msgid "Updating user interface"
 msgstr "Updating user interface"
 
-msgid "{0} completed in {1}"
-msgstr "{0} completed in {1}"
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "Ignoring malformed file URL: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "Ignoring malformed URL: \"{0}\""
 
 msgid "Warning"
 msgstr "Warning"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "Ignoring malformed file URL: \"{0}\""
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr "Parameter \"downloadgps\" does not accept file names or file URLs"
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "Ignoring malformed URL: \"{0}\""
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -464,6 +461,9 @@ msgstr "Toggle dialogues panel"
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Toggle dialogues panel, maximise mapview"
 
+msgid "Distribute Nodes"
+msgstr "Distribute Nodes"
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr "Distribute the selected nodes to equal distances along a line."
 
@@ -1106,6 +1106,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr "Please select ways with angles of approximately 90 or 180 degrees."
 
+msgid "Download from Overpass API ..."
+msgstr "Download from Overpass API ..."
+
+msgid "Download map data from Overpass API server."
+msgstr "Download map data from Overpass API server."
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr "Builds an Overpass query using the Overpass Turbo query wizard"
+
+msgid "Build query"
+msgstr "Build query"
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr "<html>The Overpass wizard could not parse the following query:"
+
+msgid "Parse error"
+msgstr "Parse error"
+
+msgid "Overpass query: "
+msgstr "Overpass query: "
+
+msgid "Overpass server: "
+msgstr "Overpass server: "
+
 msgid "Paste"
 msgstr "Paste"
 
@@ -2086,15 +2110,6 @@ msgstr "Angle snapping active."
 msgid "Finish drawing."
 msgstr "Finish drawing."
 
-msgid "FIX"
-msgstr "FIX"
-
-msgid "draw angle snap"
-msgstr "draw angle snap"
-
-msgid "draw angle snap highlight"
-msgstr "draw angle snap highlight"
-
 msgid "Toggle snapping by {0}"
 msgstr "Toggle snapping by {0}"
 
@@ -2116,6 +2131,15 @@ msgstr "0,45,90,..."
 msgid "0,30,45,60,90,..."
 msgstr "0,30,45,60,90,..."
 
+msgid "FIX"
+msgstr "FIX"
+
+msgid "draw angle snap"
+msgstr "draw angle snap"
+
+msgid "draw angle snap highlight"
+msgstr "draw angle snap highlight"
+
 msgid "Angle snapping"
 msgstr "Angle snapping"
 
@@ -2248,9 +2272,6 @@ msgstr ""
 "ParallelWayAction\n"
 "The ways selected must form a simple branchless path"
 
-msgid "Make parallel way error"
-msgstr "Make parallel way error"
-
 msgid "Drag play head"
 msgstr "Drag play head"
 
@@ -2481,9 +2502,15 @@ msgstr "all objects"
 msgid "Also include incomplete and deleted objects in search."
 msgstr "Also include incomplete and deleted objects in search."
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr "regular expression"
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr "add toolbar button"
 
@@ -2707,6 +2734,10 @@ msgid "RX"
 msgstr "RX"
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr "A"
 
@@ -2756,6 +2787,9 @@ msgstr "Range of numbers expected"
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr "Unexpected token. Expected {0}, found {1}"
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr "Unexpected token: {0}"
 
@@ -3242,6 +3276,24 @@ msgstr "Failed to create missing cache directory: {0}"
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr "<html>Failed to create missing cache directory: {0}</html>"
 
+msgid "Unable to delete temporary file {0}"
+msgstr "Unable to delete temporary file {0}"
+
+msgid "Unable to set file non-readable {0}"
+msgstr "Unable to set file non-readable {0}"
+
+msgid "Unable to set file non-writable {0}"
+msgstr "Unable to set file non-writable {0}"
+
+msgid "Unable to set file non-executable {0}"
+msgstr "Unable to set file non-executable {0}"
+
+msgid "Unable to set file readable {0}"
+msgstr "Unable to set file readable {0}"
+
+msgid "Unable to set file writable {0}"
+msgstr "Unable to set file writable {0}"
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3312,6 +3364,8 @@ msgid ""
 "Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
 "startup)."
 msgstr ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
 
 msgid " (at line {0}, column {1})"
 msgstr " (at line {0}, column {1})"
@@ -3374,12 +3428,50 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
-msgid "Not in cache"
-msgstr "Not in cache"
-
 msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 
+msgid "HTTP error {0} when loading tiles"
+msgstr "HTTP error {0} when loading tiles"
+
+msgid "Error downloading tiles: {0}"
+msgstr "Error downloading tiles: {0}"
+
+msgid "Could not load image from tile server"
+msgstr "Could not load image from tile server"
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+
+msgid "Select WMTS layer"
+msgstr "Select WMTS layer"
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr "Projection"
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr "No layers defined by getCapabilities document: {0}"
+
+msgid "No layer selected"
+msgstr "No layer selected"
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
+msgstr ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
+
 msgid "ID > 0 expected. Got {0}."
 msgstr "ID > 0 expected. Got {0}."
 
@@ -3586,6 +3678,12 @@ msgstr "text"
 msgid "areatext"
 msgstr "areatext"
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr "Parameter must begin with a ''+'' character (found ''{0}'')"
 
@@ -3613,15 +3711,15 @@ msgstr "Ellipsoid ''{0}'' not supported."
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr "Combination of ellipsoid parameters is not supported."
 
+msgid "Unknown datum identifier: ''{0}''"
+msgstr "Unknown datum identifier: ''{0}''"
+
 msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 
 msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr "Grid shift file ''{0}'' for option +nadgrids not supported."
 
-msgid "Unknown datum identifier: ''{0}''"
-msgstr "Unknown datum identifier: ''{0}''"
-
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
 msgstr "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
 
@@ -3972,13 +4070,13 @@ msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr "Number of lane dependent values inconsistent in backward direction"
 
 msgid "Long segments"
-msgstr ""
+msgstr "Long segments"
 
 msgid "This tests for long way segments, which are usually errors."
-msgstr ""
+msgstr "This tests for long way segments, which are usually errors."
 
 msgid "Very long segment of {0} kilometers"
-msgstr ""
+msgstr "Very long segment of {0} kilometres"
 
 msgid "Tag checker (MapCSS based)"
 msgstr "Tag checker (MapCSS based)"
@@ -4264,9 +4362,6 @@ msgstr "Tag key longer than allowed"
 msgid "Tags with empty values"
 msgstr "Tags with empty values"
 
-msgid "Invalid property key"
-msgstr "Invalid property key"
-
 msgid "Invalid white space in property key"
 msgstr "Invalid white space in property key"
 
@@ -4276,12 +4371,24 @@ msgstr "Property values start or end with white space"
 msgid "Property values contain HTML entity"
 msgstr "Property values contain HTML entity"
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr "Key ''{0}'' not in presets."
 
 msgid "Presets do not contain property key"
 msgstr "Presets do not contain property key"
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+
+msgid "Misspelled property value"
+msgstr "Misspelled property value"
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr "Value ''{0}'' for key ''{1}'' not in presets."
 
@@ -4463,15 +4570,15 @@ msgstr "Way node near other way"
 msgid "Connected way end node near other way"
 msgstr "Connected way end node near other way"
 
+msgid "Unconnected nodes without physical tags"
+msgstr "Unconnected nodes without physical tags"
+
 msgid "Untagged and unconnected nodes"
 msgstr "Untagged and unconnected nodes"
 
 msgid "This test checks for untagged nodes that are not part of any way."
 msgstr "This test checks for untagged nodes that are not part of any way."
 
-msgid "Unconnected nodes without physical tags"
-msgstr "Unconnected nodes without physical tags"
-
 msgid "No tags"
 msgstr "No tags"
 
@@ -4667,8 +4774,9 @@ msgstr "Click to close the dialogue"
 msgid "Imagery offset"
 msgstr "Imagery offset"
 
+msgctxt "menu"
 msgid "Imagery"
-msgstr "Imagery"
+msgstr ""
 
 msgctxt "layer"
 msgid "Offset"
@@ -4846,14 +4954,17 @@ msgstr[1] ""
 msgid ""
 "Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
 msgstr ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
 
 msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
-msgstr ""
+msgstr "Detected useable IPv6 network, prefering IPv6 over IPv4."
 
 msgid ""
 "Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
 "restart."
 msgstr ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
 
 msgid "Unsaved osm data"
 msgstr "Unsaved osm data"
@@ -4903,45 +5014,56 @@ msgstr ""
 "missing proxy configuration.<br>Would you like to change your proxy settings "
 "now?"
 
+msgctxt "menu"
 msgid "File"
-msgstr "File"
+msgstr ""
 
-msgid "Session"
-msgstr "Session"
+msgctxt "menu"
+msgid "Edit"
+msgstr ""
 
+msgctxt "menu"
 msgid "View"
-msgstr "View"
+msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
-msgstr "Tools"
+msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
-msgstr "More tools"
+msgstr ""
 
+msgctxt "menu"
 msgid "Data"
-msgstr "Data"
+msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
-msgstr "Selection"
+msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
-msgstr "Presets"
+msgstr ""
 
 msgid "More..."
 msgstr "More..."
 
+msgctxt "menu"
 msgid "GPS"
-msgstr "GPS"
+msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
-msgstr "Windows"
+msgstr ""
+
+msgctxt "menu"
+msgid "Help"
+msgstr ""
 
 msgid "Menu: {0}"
 msgstr "Menu: {0}"
 
-msgid "Save and load the current session (list of layers, etc.)"
-msgstr "Save and load the current session (list of layers, etc.)"
-
 msgid "Edit toolbar"
 msgstr "Edit toolbar"
 
@@ -4963,8 +5085,9 @@ msgstr "Click to open the imagery tab in the preferences"
 msgid "Search menu items"
 msgstr "Search menu items"
 
+msgctxt "menu"
 msgid "Audio"
-msgstr "Audio"
+msgstr ""
 
 msgid "Do not hide toolbar"
 msgstr "Do not hide toolbar"
@@ -5087,66 +5210,17 @@ msgstr "In background"
 msgid "Click to run job in background"
 msgstr "Click to run job in background"
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-
-msgid "Details..."
-msgstr "Details..."
-
-msgid "Hide this message and never show it again"
-msgstr "Hide this message and never show it again"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] "Deleting {0} object"
-msgstr[1] "Deleting {0} objects"
-
-msgid "Delete objects"
-msgstr "Delete objects"
-
-msgid "To delete"
-msgstr "To delete"
-
-msgid "From Relation"
-msgstr "From Relation"
-
-msgid "Pos."
-msgstr "Pos."
+msgid " ({0})"
+msgstr " ({0})"
 
-msgid "Role"
-msgstr "Role"
+msgid "{0} completed in {1}"
+msgstr "{0} completed in {1}"
 
-msgid "Click to close the dialog and remove the object from the relations"
-msgstr "Click to close the dialogue and remove the object from the relations"
+msgid "Enlarge"
+msgstr "Enlarge"
 
-msgid "Click to close the dialog and to abort deleting the objects"
-msgstr "Click to close the dialogue and to abort deleting the objects"
+msgid "Shrink"
+msgstr "Shrink"
 
 msgid ""
 "<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
@@ -5602,6 +5676,9 @@ msgstr "Keep their deleted state"
 msgid "Undecide conflict between deleted state"
 msgstr "Undecide conflict between deleted state"
 
+msgid "Role"
+msgstr "Role"
+
 msgid "Primitive"
 msgstr "Primitive"
 
@@ -5876,6 +5953,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr "Apply this role to all members"
 
+msgid "Pos."
+msgstr "Pos."
+
 msgid "Orig. Way"
 msgstr "Orig. Way"
 
@@ -6036,6 +6116,47 @@ msgstr "Resolve conflicts"
 msgid "Resolve conflicts for ''{0}''"
 msgstr "Resolve conflicts for ''{0}''"
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] "Deleting {0} object"
+msgstr[1] "Deleting {0} objects"
+
+msgid "Delete objects"
+msgstr "Delete objects"
+
+msgid "To delete"
+msgstr "To delete"
+
+msgid "From Relation"
+msgstr "From Relation"
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr "Click to close the dialogue and remove the object from the relations"
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr "Click to close the dialogue and to abort deleting the objects"
+
 msgid "Filter objects and hide/disable them."
 msgstr "Filter objects and hide/disable them."
 
@@ -6139,8 +6260,8 @@ msgstr "Advanced object info"
 msgid "map style"
 msgstr "map style"
 
-msgid " ({0})"
-msgstr " ({0})"
+msgid "edit counts"
+msgstr "edit counts"
 
 msgid "not in data set"
 msgstr "not in data set"
@@ -6279,6 +6400,11 @@ msgid ""
 msgstr ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] "{0} user last edited the selection:"
+msgstr[1] "{0} users last edited the selection:"
+
 msgid "xml"
 msgstr "xml"
 
@@ -6288,34 +6414,66 @@ msgstr "mapcss"
 msgid "unknown"
 msgstr "unknown"
 
+msgid "Enter the coordinates for the new node."
+msgstr "Enter the coordinates for the new node."
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
 msgstr ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
-
-msgid "Projected coordinates:"
-msgstr "Projected coordinates:"
+"You can separate longitude and latitude with space, comma or semicolon."
 
 msgid ""
-"Enter easting and northing (x and y) separated by space, comma or semicolon."
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr "Coordinate value can be in one of three formats:"
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr "<i>degrees</i><tt>°</tt>"
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+
+msgid "Some examples:"
+msgstr "Some examples:"
+
+msgid "Projected coordinates:"
+msgstr "Projected coordinates:"
+
+msgid ""
+"Enter easting and northing (x and y) separated by space, comma or semicolon."
 msgstr ""
 "Enter easting and northing (x and y) separated by space, comma or semicolon."
 
@@ -6355,6 +6513,12 @@ msgstr "Opacity"
 msgid "Adjust opacity of the layer."
 msgstr "Adjust opacity of the layer."
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr "Activate"
 
@@ -6484,6 +6648,12 @@ msgstr "Style settings"
 msgid "Customize the style"
 msgstr "Customise the style"
 
+msgid "Mini map"
+msgstr ""
+
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
 msgid "List of notes"
 msgstr "List of notes"
 
@@ -6542,14 +6712,18 @@ msgstr "Object ID:"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "Enter the ID of the object that should be downloaded"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr "Object IDs can be separated by comma or space, for instance: {0}"
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
 msgstr ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
+msgstr "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 
 msgid ""
 "Invalid ID list specified\n"
@@ -6579,6 +6753,9 @@ msgstr "Relations: {0}/{1}"
 msgid "Relations: {0}"
 msgstr "Relations: {0}"
 
+msgid "Selection"
+msgstr "Selection"
+
 msgid "Open a selection list window."
 msgstr "Open a selection list window."
 
@@ -6670,6 +6847,12 @@ msgstr "Open the validation window."
 msgid "Validation results"
 msgstr "Validation results"
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr "Looks up the selected primitives in the error list."
+
 msgid "Fix"
 msgstr "Fix"
 
@@ -7242,17 +7425,17 @@ msgid "Discardable key: background"
 msgstr "Discardable key: background"
 
 msgid "{0} ''{1}''"
-msgstr ""
+msgstr "{0} ''{1}''"
 
 msgid "{0} different"
 msgid_plural "{0} different"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} different"
+msgstr[1] "{0} different"
 
 msgid ", {0} unset"
 msgid_plural ", {0} unset"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] ", {0} unset"
+msgstr[1] ", {0} unset"
 
 msgid "Select objects for which to change tags."
 msgstr "Select objects for which to change tags."
@@ -7314,6 +7497,12 @@ msgstr "Go to OSM wiki for tag help (F1)"
 msgid "Launch browser with wiki help for selected object"
 msgstr "Launch browser with wiki help for selected object"
 
+msgid "Go to Taginfo"
+msgstr "Go to Taginfo"
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr "Launch browser with Taginfo statistics for selected object"
+
 msgid "Paste Value"
 msgstr "Paste Value"
 
@@ -7407,16 +7596,14 @@ msgstr "Set number of recently added tags"
 msgid "Remember last used tags after a restart"
 msgstr "Remember last used tags after a restart"
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
-msgstr "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
+msgstr "to apply first suggestion"
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
-msgstr "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
+msgstr "to add without closing the dialog"
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
-msgstr ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
+msgstr "to add first suggestion without closing the dialog"
 
 msgid "Please enter the number of recently added tags to display"
 msgstr "Please enter the number of recently added tags to display"
@@ -7607,6 +7794,12 @@ msgstr "Sort the relation members"
 msgid "Relation Editor: Sort"
 msgstr "Relation Editor: Sort"
 
+msgid "Sort below"
+msgstr "Sort below"
+
+msgid "Sort the selected relation members and all members below"
+msgstr "Sort the selected relation members and all members below"
+
 msgid "Reverse the order of the relation members"
 msgstr "Reverse the order of the relation members"
 
@@ -8188,6 +8381,9 @@ msgstr "Loading history for relation {0}"
 msgid "Node {0}"
 msgstr "Node {0}"
 
+msgid "The nodes of this way are in reverse order"
+msgstr "The nodes of this way are in reverse order"
+
 msgid "Zoom to node"
 msgstr "Zoom to node"
 
@@ -9152,6 +9348,107 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] "{0} object to delete:"
 msgstr[1] "{0} objects to delete:"
 
+msgid "Show Tile Info"
+msgstr "Show Tile Info"
+
+msgid "Tile Info"
+msgstr "Tile Info"
+
+msgid "Metadata "
+msgstr "Metadata "
+
+msgid "Auto Zoom"
+msgstr "Auto Zoom"
+
+msgid "Auto load tiles"
+msgstr "Auto load tiles"
+
+msgid "Load All Tiles"
+msgstr "Load All Tiles"
+
+msgid "Load All Error Tiles"
+msgstr "Load all error tiles"
+
+msgid "Zoom to native resolution"
+msgstr "Zoom to native resolution"
+
+msgid "Change resolution"
+msgstr "Change resolution"
+
+msgid "Failed to create tile source"
+msgstr "Failed to create tile source"
+
+msgid "Show Errors"
+msgstr "Show Errors"
+
+msgid "Load Tile"
+msgstr "Load Tile"
+
+msgid "Increase zoom"
+msgstr "Increase zoom"
+
+msgid "Decrease zoom"
+msgstr "Decrease zoom"
+
+msgid "Snap to tile size"
+msgstr "Snap to tile size"
+
+msgid "Flush Tile Cache"
+msgstr "Flush Tile Cache"
+
+msgid "zoom in to load any tiles"
+msgstr "zoom in to load any tiles"
+
+msgid "zoom in to load more tiles"
+msgstr "zoom in to load more tiles"
+
+msgid "increase zoom level to see more detail"
+msgstr "increase zoom level to see more detail"
+
+msgid "No tiles at this zoom level"
+msgstr "No tiles at this zoom level"
+
+msgid "Current zoom: {0}"
+msgstr "Current zoom: {0}"
+
+msgid "Display zoom: {0}"
+msgstr "Display zoom: {0}"
+
+msgid "Pixel scale: {0}"
+msgstr "Pixel scale: {0}"
+
+msgid "Best zoom: {0}"
+msgstr "Best zoom: {0}"
+
+msgid "Cache stats: {0}"
+msgstr "Cache stats: {0}"
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr "{0} ({1}), automatically downloading in zoom {2}"
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr "{0} ({1}), downloading in zoom {2}"
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr "Downloaded {0}/{1} tiles"
+
+msgid "Save WMS file"
+msgstr "Save WMS file"
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+
+msgid "Details..."
+msgstr "Details..."
+
+msgid "Hide this message and never show it again"
+msgstr "Hide this message and never show it again"
+
 msgid "Customize Color"
 msgstr "Customise Colour"
 
@@ -9205,6 +9502,9 @@ msgstr "Save GPX file"
 msgid "Imagery fade"
 msgstr "Imagery fade"
 
+msgid "Unsupported imagery type: {0}"
+msgstr "Unsupported imagery type: {0}"
+
 msgid "ERROR"
 msgstr "ERROR"
 
@@ -9225,11 +9525,11 @@ msgstr "All projections are supported"
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 
 msgid "Save Layer"
@@ -9313,85 +9613,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr "Save OSM file"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-
-msgid "Auto Zoom"
-msgstr "Auto Zoom"
-
-msgid "Auto load tiles"
-msgstr "Auto load tiles"
-
-msgid "Show Errors"
-msgstr "Show Errors"
-
-msgid "Load Tile"
-msgstr "Load Tile"
-
-msgid "Show Tile Info"
-msgstr "Show Tile Info"
-
-msgid "Load All Tiles"
-msgstr "Load All Tiles"
-
-msgid "Load All Error Tiles"
-msgstr "Load all error tiles"
-
-msgid "Increase zoom"
-msgstr "Increase zoom"
-
-msgid "Decrease zoom"
-msgstr "Decrease zoom"
-
-msgid "Snap to tile size"
-msgstr "Snap to tile size"
-
-msgid "Flush Tile Cache"
-msgstr "Flush Tile Cache"
-
-msgid "zoom in to load any tiles"
-msgstr "zoom in to load any tiles"
-
-msgid "zoom in to load more tiles"
-msgstr "zoom in to load more tiles"
-
-msgid "increase zoom level to see more detail"
-msgstr "increase zoom level to see more detail"
-
-msgid "No tiles at this zoom level"
-msgstr "No tiles at this zoom level"
-
-msgid "Current zoom: {0}"
-msgstr "Current zoom: {0}"
-
-msgid "Display zoom: {0}"
-msgstr "Display zoom: {0}"
-
-msgid "Pixel scale: {0}"
-msgstr "Pixel scale: {0}"
-
-msgid "Best zoom: {0}"
-msgstr "Best zoom: {0}"
-
-msgid "Cache stats: {0}"
-msgstr "Cache stats: {0}"
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr "TMS layer ({0}), downloading in zoom {1}"
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr "EPSG:4326 and Mercator projection are supported"
 
@@ -9401,58 +9622,33 @@ msgstr "Validation errors"
 msgid "No validation errors"
 msgstr "No validation errors"
 
-msgid "Blank Layer"
-msgstr "Blank Layer"
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr "Downloaded {0}/{1} tiles"
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr "WMS layer ({0}), automatically downloading in zoom {1}"
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr "WMS layer ({0}), downloading in zoom {1}"
-
-msgid "Download visible tiles"
-msgstr "Download visible tiles"
+msgid "Set WMS Bookmark"
+msgstr "Set WMS Bookmark"
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-
-msgid "Change resolution"
-msgstr "Change resolution"
-
-msgid "Reload erroneous tiles"
-msgstr "Reload erroneous tiles"
-
-msgid "Alpha channel"
-msgstr "Alpha channel"
-
-msgid "Automatically change resolution"
-msgstr "Automatically change resolution"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 
-msgid "Set WMS Bookmark"
-msgstr "Set WMS Bookmark"
-
-msgid "Automatic downloading"
-msgstr "Automatic downloading"
+msgid "Correlate to GPX"
+msgstr "Correlate to GPX"
 
-msgid "Zoom to native resolution"
-msgstr "Zoom to native resolution"
+msgid "Invalid timezone"
+msgstr "Invalid timezone"
 
-msgid "Supported projections are: {0}"
-msgstr "Supported projections are: {0}"
+msgid "Invalid offset"
+msgstr "Invalid offset"
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
-msgstr "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Correlate images with GPX track"
+msgstr "Correlate images with GPX track"
 
-msgid "Save WMS file"
-msgstr "Save WMS file"
+msgid "Try Again"
+msgstr "Try Again"
 
-msgid "Correlate to GPX"
-msgstr "Correlate to GPX"
+msgid "No images could be matched!"
+msgstr "No images could be matched!"
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
 msgstr "GPX Files (*.gpx *.gpx.gz)"
@@ -9544,24 +9740,9 @@ msgstr "Timezone: "
 msgid "Offset:"
 msgstr "Offset:"
 
-msgid "Correlate images with GPX track"
-msgstr "Correlate images with GPX track"
-
 msgid "Correlate"
 msgstr "Correlate"
 
-msgid "Invalid timezone"
-msgstr "Invalid timezone"
-
-msgid "Invalid offset"
-msgstr "Invalid offset"
-
-msgid "Try Again"
-msgstr "Try Again"
-
-msgid "No images could be matched!"
-msgstr "No images could be matched!"
-
 msgid "No gpx selected"
 msgstr "No gpx selected"
 
@@ -9776,9 +9957,6 @@ msgstr ""
 "\n"
 "GPS time: {0}"
 
-msgid "JPEG images (*.jpg)"
-msgstr "JPEG images (*.jpg)"
-
 msgid "Show thumbnails"
 msgstr "Show thumbnails"
 
@@ -9846,9 +10024,6 @@ msgstr "metres"
 msgid "Maximum area per request:"
 msgstr "Maximum area per request:"
 
-msgid "sq km"
-msgstr "sq km"
-
 msgid "Download near:"
 msgstr "Download near:"
 
@@ -10577,15 +10752,15 @@ msgstr "Close the preferences dialogue and discard preference updates"
 msgid "Save the preferences and close the dialog"
 msgstr "Save the preferences and close the dialogue"
 
-msgid "Download plugins"
-msgstr "Download plug-ins"
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr "You have to restart JOSM for some settings to take effect."
 
 msgid "Would you like to restart now?"
 msgstr "Would you like to restart now?"
 
+msgid "Download plugins"
+msgstr "Download plug-ins"
+
 msgid "Icon paths:"
 msgstr "Icon paths:"
 
@@ -11274,7 +11449,7 @@ msgid "Colors points and track segments by its timestamp."
 msgstr "Colours points and track segments by its timestamp."
 
 msgid "Allows to tune the track coloring for different average speeds."
-msgstr "Allows to tune the track colouring for different average speeds."
+msgstr "Allows tuning of the track colouring for different average speeds."
 
 msgid "Track and Point Coloring"
 msgstr "Track and Point Colouring"
@@ -11430,6 +11605,21 @@ msgstr "Show bounds"
 msgid "No bounding box was found for this layer."
 msgstr "No bounding box was found for this layer."
 
+msgid "1. Enter getCapabilities URL"
+msgstr "1. Enter getCapabilities URL"
+
+msgid "2. Enter name for this layer"
+msgstr "2. Enter name for this layer"
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr "imagery fade"
 
@@ -11448,6 +11638,18 @@ msgstr "Strong"
 msgid "Sharpen (requires layer re-add): "
 msgstr "Sharpen (requires layer re-add): "
 
+msgid "Tile cache directory: "
+msgstr "Tile cache directory: "
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr "Maximum size of disk cache (per imagery) in MB: "
+
+msgid "Maximum number of objects in memory cache: "
+msgstr "Maximum number of objects in memory cache: "
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr "Imagery preferences"
 
@@ -11469,6 +11671,9 @@ msgstr "Imagery providers"
 msgid "Offset bookmarks"
 msgstr "Offset bookmarks"
 
+msgid "Cache contents"
+msgstr "Cache contents"
+
 msgid "Imagery Background: Default"
 msgstr "Imagery background: Default"
 
@@ -11511,9 +11716,6 @@ msgstr "EULA licence URL not available: {0}"
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr "Malformed URL for the EULA licence: {0}"
 
-msgid "Projection"
-msgstr "Projection"
-
 msgid "Layer"
 msgstr "Layer"
 
@@ -11538,17 +11740,11 @@ msgstr "Max. zoom level: "
 msgid "Add to slippymap chooser: "
 msgstr "Add to slippymap chooser: "
 
-msgid "Tile cache directory: "
-msgstr "Tile cache directory: "
-
 msgid "Maximum concurrent downloads: "
 msgstr "Maximum concurrent downloads: "
 
 msgid "Maximum concurrent downloads per host: "
-msgstr ""
-
-msgid "Maximum elements in disk cache: "
-msgstr "Maximum elements in disk cache: "
+msgstr "Maximum concurrent downloads per host: "
 
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
@@ -11557,20 +11753,11 @@ msgstr ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you cannot use it. This message will not show again."
 
-msgid "Downloader:"
-msgstr "Downloader:"
-
 msgid "Simultaneous connections:"
 msgstr "Simultaneous connections:"
 
-msgid "Overlap tiles"
-msgstr "Overlap tiles"
-
-msgid "% of east:"
-msgstr "% of east:"
-
-msgid "% of north:"
-msgstr "% of north:"
+msgid "Tile size:"
+msgstr "Tile size:"
 
 msgid "Auto save enabled"
 msgstr "Auto save enabled"
@@ -12575,6 +12762,14 @@ msgstr "Apply Preset"
 msgid "New relation"
 msgstr "New relation"
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] "Change {0} object"
@@ -12693,6 +12888,9 @@ msgstr "Show preset search dialogue"
 msgid "Search presets"
 msgstr "Search presets"
 
+msgid "Presets"
+msgstr "Presets"
+
 msgid "Search for objects by preset"
 msgstr "Search for objects by preset"
 
@@ -12983,6 +13181,9 @@ msgstr "<html>Could not read files.<br>Error is:<br>{0}</html>"
 msgid "GeoJSON Files"
 msgstr "GeoJSON Files"
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr "Layer ''{0}'' not supported"
 
@@ -13553,6 +13754,9 @@ msgstr "OSM Server Files zip compressed"
 msgid "WMS Files (*.wms)"
 msgstr "WMS Files (*.wms)"
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr "Unsupported WMS file version; found {0}, expected {1}"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -13625,25 +13829,25 @@ msgid "Read protocol version"
 msgstr "Read protocol version"
 
 msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
-msgstr ""
+msgstr "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 
 msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
-msgstr ""
+msgstr "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 
 msgid "RemoteControl::Accepting remote connections on {0}:{1}"
-msgstr ""
+msgstr "RemoteControl::Accepting remote connections on {0}:{1}"
 
 msgid "RemoteControl::Server {0}:{1} stopped."
-msgstr ""
+msgstr "RemoteControl::Server {0}:{1} stopped."
 
 msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
-msgstr ""
+msgstr "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 
 msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
-msgstr ""
+msgstr "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 
 msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
-msgstr ""
+msgstr "RemoteControl::Accepting secure remote connections on {0}:{1}"
 
 msgid "Remote Control has been asked to create a new node."
 msgstr "Remote Control has been asked to create a new node."
@@ -13984,6 +14188,19 @@ msgstr[1] ""
 "Plug-in {0} requires {1} plug-ins which were not found. The missing plug-ins "
 "are:\""
 
+msgid "Download and restart"
+msgstr "Download and restart"
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] "Click to download missing plugin and restart JOSM"
+msgstr[1] "Click to download missing plugins and restart JOSM"
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] "Click to continue without this plugin"
+msgstr[1] "Click to continue without these plugins"
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -15175,6 +15392,9 @@ msgstr "Update"
 msgid "Update directory listing."
 msgstr "Update directory listing."
 
+msgid "View"
+msgstr "View"
+
 msgid "Blue:"
 msgstr "Blue:"
 
@@ -15214,8 +15434,8 @@ msgstr "MapQuest Open Aerial"
 msgid "OpenStreetMap GPS Traces"
 msgstr "OpenStreetMap GPS Traces"
 
-msgid "OpenStreetMap (Mapnik)"
-msgstr "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
+msgstr "OpenStreetMap (Standard layer)"
 
 msgid "skobbler"
 msgstr "skobbler"
@@ -15226,9 +15446,6 @@ msgstr "OpenStreetMap (Mapnik Black & White)"
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr "OpenStreetMap (Mapnik, no labels)"
 
-msgid "skobbler heatmap"
-msgstr "skobbler heatmap"
-
 msgid "OpenCycleMap"
 msgstr "OpenCycleMap"
 
@@ -15314,7 +15531,7 @@ msgid "basemap.at"
 msgstr "basemap.at"
 
 msgid "basemap.at Orthofoto"
-msgstr ""
+msgstr "basemap.at Orthofoto"
 
 msgid "Graz: Basiskarte (base map)"
 msgstr "Graz: Basiskarte (base map)"
@@ -15337,6 +15554,9 @@ msgstr "Vienna: Orthofoto (aerial image)"
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr "VoGIS: Echtfarbenbild 2012 (12cm)"
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr "VoGIS: Flächenwidmungsplan"
 
@@ -15351,12 +15571,18 @@ msgid ""
 msgstr ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr "SPW(allonie) PICC numerical imagery"
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr "SPW(allonie) 2012 aerial imagery"
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr "SPW(allonie) 2009 aerial imagery"
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr "IBGE Mapa de Setores Urbanos"
 
@@ -15393,12 +15619,18 @@ msgstr "Czech RUIAN parcely"
 msgid "Czech pLPIS"
 msgstr "Czech pLPIS"
 
-msgid "Fugro (Denmark)"
-msgstr "Fugro (Denmark)"
-
 msgid "Geodatastyrelsen (Denmark)"
 msgstr "Geodatastyrelsen (Denmark)"
 
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
+msgstr ""
+
 msgid "Stevns (Denmark)"
 msgstr "Stevns (Denmark)"
 
@@ -15421,6 +15653,9 @@ msgid "Estonia Forestry (Maaamet)"
 msgstr "Estonia Forestry (Maaamet)"
 
 msgid "BANO"
+msgstr "BANO"
+
+msgid "BD Carthage"
 msgstr ""
 
 msgid "Bordeaux - 2012"
@@ -15447,8 +15682,8 @@ msgstr "Géobretagne - Morbihan 2010"
 msgid "Géolittoral - Orthophotos 2000"
 msgstr "Géolittoral - Orthophotos 2000"
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
-msgstr "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
+msgstr ""
 
 msgid "Géolittoral - Sentiers"
 msgstr "Géolittoral - Sentiers"
@@ -15462,6 +15697,9 @@ msgstr "Loire-Atlantique - Orthophotos 2012 - 20 cm"
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr "Toulouse - Orthophotoplan 2013"
 
@@ -15474,12 +15712,6 @@ msgstr "Toulouse - Orthophotoplan 2007"
 msgid "Tours - Orthophotos 2013"
 msgstr "Tours - Orthophotos 2013"
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr "Tours - Orthophotos 2008-2010"
-
-msgid "Tours - Orthophotos 2008"
-msgstr "Tours - Orthophotos 2008"
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -15502,6 +15734,9 @@ msgstr "Hamburg (20 cm)"
 msgid "Hamburg (DK5)"
 msgstr "Hamburg (DK5)"
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr "Bavaria (2 m)"
 
@@ -15536,11 +15771,8 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr "Maps4BW (LGL-BW, www.lgl-bw.de)"
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
-msgstr "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
+msgstr "NRW-Atlas: ALKIS"
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
 msgstr "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -15558,622 +15790,658 @@ msgid "Drone Imagery (Haiti)"
 msgstr "Drone Imagery (Haiti)"
 
 msgid "Drone Imagery 2014 (Haiti)"
-msgstr ""
+msgstr "Drone Imagery 2014 (Haiti)"
 
 msgid "Ireland British War Office 1:25k GSGS 3906"
-msgstr ""
+msgstr "Ireland British War Office 1:25k GSGS 3906"
 
 msgid "Ireland British War Office One-Inch 1941-43 GSGS 4136"
-msgstr ""
+msgstr "Ireland British War Office One-Inch 1941-43 GSGS 4136"
 
 msgid "Ireland Bartholomew Quarter-Inch 1940"
-msgstr ""
+msgstr "Ireland Bartholomew Quarter-Inch 1940"
+
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr "Ireland Civil Parishes and Baronies - Memorial Atlas"
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr "Memorial Atlas of Ireland (1901) L.J. Richards"
 
 msgid "OSMIE Townlands"
-msgstr ""
+msgstr "OSMIE Townlands"
 
 msgid "OSMIE EDs"
-msgstr ""
+msgstr "OSMIE EDs"
 
 msgid "OSMIE Civil Parishes"
-msgstr ""
+msgstr "OSMIE Civil Parishes"
 
 msgid "OSMIE Baronies"
-msgstr ""
+msgstr "OSMIE Baronies"
 
 msgid "OSMIE Political"
-msgstr ""
-
-msgid "Ireland EEA GMES Urban Atlas"
-msgstr ""
-
-msgid "Ireland EEA CORINE 2006"
-msgstr ""
-
-msgid "Antrim Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
-msgstr ""
-
-msgid "Carlow Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Clare Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Dublin Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Fermanagh Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Galway Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Kildare Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Leitrim Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Longford Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Offaly Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Sligo Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Tyrone Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Westmeath Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Wexford Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Wicklow Civil Parishes and Baronies"
-msgstr ""
+msgstr "OSMIE Political"
 
 msgid "Lodi - Italy"
-msgstr ""
+msgstr "Lodi - Italy"
 
 msgid "Lombardia - Italy (CTR)"
-msgstr ""
+msgstr "Lombardia - Italy (CTR)"
 
 msgid "Sicily - Italy"
-msgstr ""
+msgstr "Sicily - Italy"
 
 msgid "PCN 2006 - Italy"
-msgstr ""
+msgstr "PCN 2006 - Italy"
 
 msgid "PCN 2008 - IT Lazio+Umbria"
-msgstr ""
+msgstr "PCN 2008 - IT Lazio+Umbria"
 
 msgid "PCN 2012 - Italy"
-msgstr ""
+msgstr "PCN 2012 - Italy"
 
 msgid "South Tyrol Orthofoto 2011"
-msgstr ""
+msgstr "South Tyrol Orthofoto 2011"
 
 msgid "South Tyrol Topomap"
-msgstr ""
+msgstr "South Tyrol Topomap"
 
 msgid "USSR - Latvia"
-msgstr ""
+msgstr "USSR - Latvia"
 
 msgid "50cm ortho - Latvia"
-msgstr ""
+msgstr "50cm ortho - Latvia"
 
 msgid "20cm ortho - Latvia - Coastline"
-msgstr ""
+msgstr "20cm ortho - Latvia - Coastline"
+
+msgid "1.cikla ortofotokarte - Latvia"
+msgstr "1.cikla ortofotokarte - Latvia"
 
 msgid "ORT10LT (Lithuania)"
-msgstr ""
+msgstr "ORT10LT (Lithuania)"
 
 msgid "Luxembourg Inspire Ortho 2010"
-msgstr ""
+msgstr "Luxembourg Inspire Ortho 2010"
 
 msgid "Luxembourg Inspire Ortho 2013"
-msgstr ""
+msgstr "Luxembourg Inspire Ortho 2013"
 
 msgid "Luxembourg Inspire Railway"
-msgstr ""
+msgstr "Luxembourg Inspire Railway"
 
 msgid "Luxembourg Inspire Roads"
-msgstr ""
+msgstr "Luxembourg Inspire Roads"
+
+msgid "Luxembourg Inspire Water"
+msgstr "Luxembourg Inspire Water"
 
 msgid "Niger Delta Oct 2012 Landsat"
-msgstr ""
+msgstr "Niger Delta Oct 2012 Landsat"
 
 msgid "Gaza Strip - Pléiades - 2014/07/06"
-msgstr ""
+msgstr "Gaza Strip - Pléiades - 2014/07/06"
 
 msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
-msgstr ""
+msgstr "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 
 msgid "Pangasinán/Bulacan (Phillipines HiRes)"
-msgstr ""
+msgstr "Pangasinán/Bulacan (Phillipines HiRes)"
 
 msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgstr "Geoportal 2: Ortofotomapa (aerial image)"
+
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
+msgstr "Geoportal 2: PRNG (geo names)"
+
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
 msgid "Będzin: Ortofotomapa 2013 (aerial image)"
-msgstr ""
+msgstr "Będzin: Ortofotomapa 2013 (aerial image)"
 
 msgid "Będzin: Budynki (buildings)"
-msgstr ""
+msgstr "Będzin: Budynki (buildings)"
 
 msgid "Bytom: Ortofotomapa 2012 (aerial image)"
-msgstr ""
+msgstr "Bytom: Ortofotomapa 2012 (aerial image)"
+
+msgid "Bytom: Fotoplan 2014 (aerial image)"
+msgstr "Bytom: Fotoplan 2014 (aerial image)"
 
 msgid "Bytom: Budynki (buildings)"
-msgstr ""
+msgstr "Bytom: Budynki (buildings)"
 
 msgid "Chorzów: Budynki (buildings)"
-msgstr ""
+msgstr "Chorzów: Budynki (buildings)"
+
+msgid "Częstochowa: Budynki (buildings)"
+msgstr "Częstochowa: Budynki (buildings)"
 
 msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
-msgstr ""
+msgstr "Częstochowa: Ortofotomapa 2011 (aerial image)"
+
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgstr "Częstochowa: Ortofotomapa 2013 (aerial image)"
+
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgstr "Częstochowa: Ortofotomapa 2014 (aerial image)"
 
 msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
-msgstr ""
+msgstr "Gliwice: Ortofotomapa 2013 (aerial image)"
 
 msgid "Gliwice: Budynki (buildings)"
-msgstr ""
+msgstr "Gliwice: Budynki (buildings)"
 
 msgid "Katowice: Ortofotomapa (aerial image)"
-msgstr ""
+msgstr "Katowice: Ortofotomapa (aerial image)"
+
+msgid "Katowice: Budynki (buildings)"
+msgstr "Katowice: Budynki (buildings)"
+
+msgid "Łódź: Budynki (buildings)"
+msgstr "Łódź: Budynki (buildings)"
 
 msgid "Łódź: Ortofotomapa (aerial image)"
-msgstr ""
+msgstr "Łódź: Ortofotomapa (aerial image)"
+
+msgid "Powiat dębicki: Budynki (buildings)"
+msgstr "Powiat dębicki: Budynki (buildings)"
+
+msgid "Powiat lubaczowski: Budynki (buildings)"
+msgstr "Powiat lubaczowski: Budynki (buildings)"
+
+msgid "Powiat łańcucki: Budynki (buildings)"
+msgstr "Powiat łańcucki: Budynki (buildings)"
+
+msgid "Powiat poznański: Budynki (buildings)"
+msgstr "Powiat poznański: Budynki (buildings)"
+
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgstr "Powiat poznański: Ortofotomapa (Aerial image)"
+
+msgid "Powiat rzeszowski: Budynki (buildings)"
+msgstr "Powiat rzeszowski: Budynki (buildings)"
+
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgstr "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr "Powiat stalowowolski: Budynki (buildings)"
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr "Przemyśl: Budynki (buildings)"
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgstr "Przemyśl: Ortofotomapa (aerial image)"
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
-msgstr ""
+msgstr "Ruda Śląska: Ortofotomapa (aerial image)"
 
 msgid "Rzeszów: Ortofotomapa (aerial image)"
-msgstr ""
+msgstr "Rzeszów: Ortofotomapa (aerial image)"
 
 msgid "Rzeszów: Budynki (buildings)"
-msgstr ""
+msgstr "Rzeszów: Budynki (buildings)"
 
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
-msgstr ""
+msgstr "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr "Siemianowice Śląskie: Budynki (buildings)"
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr "Świętochłowice: Ortofotomapa 2008 (aerial image)"
 
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
-msgstr ""
+msgstr "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr "Świętochłowice: Ortofotomapa 2012 (aerial image)"
 
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
-msgstr ""
+msgstr "Zabrze: Ortofotomapa 2011 (aerial image)"
 
 msgid "trail.pl: Szlaki (paths)"
-msgstr ""
+msgstr "trail.pl: Szlaki (paths)"
 
 msgid "ScanEx IRS"
-msgstr ""
+msgstr "ScanEx IRS"
 
 msgid "ScanEx SPOT"
-msgstr ""
+msgstr "ScanEx SPOT"
 
 msgid "Freemap.sk Car"
-msgstr ""
+msgstr "Freemap.sk Car"
 
 msgid "Freemap.sk Hiking"
-msgstr ""
+msgstr "Freemap.sk Hiking"
 
 msgid "Freemap.sk Cyclo"
-msgstr ""
+msgstr "Freemap.sk Cyclo"
 
 msgid "Freemap.sk Ski"
-msgstr ""
+msgstr "Freemap.sk Ski"
 
 msgid "Katastrálna mapa Slovenska (KaPor, 2010-04)"
-msgstr ""
+msgstr "Katastrálna mapa Slovenska (KaPor, 2010-04)"
 
 msgid "Katastrálna mapa Slovenska (KaPor, 2011-05)"
-msgstr ""
+msgstr "Katastrálna mapa Slovenska (KaPor, 2011-05)"
 
 msgid "Slovakia EEA GMES Urban Atlas"
-msgstr ""
+msgstr "Slovakia EEA GMES Urban Atlas"
 
 msgid "Slovakia EEA CORINE 2006"
-msgstr ""
+msgstr "Slovakia EEA CORINE 2006"
 
 msgid "Slovakia Historic Maps"
-msgstr ""
+msgstr "Slovakia Historic Maps"
 
 msgid "RABA-KGZ: Slovenia farmland use"
-msgstr ""
+msgstr "RABA-KGZ: Slovenia farmland use"
 
 msgid "RABA-KGZ: Slovenia built-up areas"
-msgstr ""
+msgstr "RABA-KGZ: Slovenia built-up areas"
 
 msgid "South Africa CD:NGI Aerial"
-msgstr ""
+msgstr "South Africa CD:NGI Aerial"
 
 msgid "Catastro Spain"
-msgstr ""
+msgstr "Catastro Spain"
 
 msgid "PNOA Spain"
-msgstr ""
+msgstr "PNOA Spain"
 
 msgid "SIGPAC Spain"
-msgstr ""
+msgstr "SIGPAC Spain"
 
 msgid "GRAFCAN - Canary Islands"
-msgstr ""
+msgstr "GRAFCAN - Canary Islands"
 
 msgid "ITACyL - Castile and León"
-msgstr ""
+msgstr "ITACyL - Castile and León"
 
 msgid "IDEIB - Balearic Islands"
-msgstr ""
+msgstr "IDEIB - Balearic Islands"
 
 msgid "GRAFCAN Express - Canary Islands"
-msgstr ""
+msgstr "GRAFCAN Express - Canary Islands"
 
 msgid "Kanton Aargau 25cm (AGIS 2011)"
-msgstr ""
+msgstr "Kanton Aargau 25cm (AGIS 2011)"
 
 msgid "Kanton Aargau 25cm (AGIS 2014)"
-msgstr ""
+msgstr "Kanton Aargau 25cm (AGIS 2014)"
 
 msgid "Stadt Uster Orthophoto 2008 10cm"
-msgstr ""
+msgstr "Stadt Uster Orthophoto 2008 10cm"
 
 msgid "Stadtplan Zürich"
-msgstr ""
+msgstr "Stadtplan Zürich"
 
 msgid "Stadt Zürich Übersichtsplan (Strassen, Gebäude, Hausnummer)"
-msgstr ""
+msgstr "Stadt Zürich Übersichtsplan (Strassen, Gebäude, Hausnummer)"
 
 msgid "Stadt Zürich Luftbild 2011"
-msgstr ""
+msgstr "Stadt Zürich Luftbild 2011"
 
 msgid "Orthofoto Kanton Solothurn RGB (SOGIS 2011/2012/2013)"
-msgstr ""
+msgstr "Orthofoto Kanton Solothurn RGB (SOGIS 2011/2012/2013)"
 
 msgid "Orthofoto Kanton Solothurn Infrarot (SOGIS 2011/2012/2013)"
-msgstr ""
+msgstr "Orthofoto Kanton Solothurn Infrarot (SOGIS 2011/2012/2013)"
 
 msgid "Canton de Génève 5cm (SITG 2011)"
-msgstr ""
+msgstr "Canton de Génève 5cm (SITG 2011)"
 
 msgid "Canton de Neuchâtel 50cm (SITN 2006)"
-msgstr ""
+msgstr "Canton de Neuchâtel 50cm (SITN 2006)"
 
 msgid "Canton du Jura 50cm (RCJU 1998)"
-msgstr ""
+msgstr "Canton du Jura 50cm (RCJU 1998)"
 
 msgid "Canton de Fribourg 50cm (2005)"
-msgstr ""
+msgstr "Canton de Fribourg 50cm (2005)"
 
 msgid "Stadt Bern 10cm/25cm (2012)"
-msgstr ""
+msgstr "Stadt Bern 10cm/25cm (2012)"
 
 msgid "HEIG-VD / Orthophoto Yverdon-les-Bains 25cm (2007)"
-msgstr ""
+msgstr "HEIG-VD / Orthophoto Yverdon-les-Bains 25cm (2007)"
 
 msgid "Ville de Nyon - Orthophoto 2010 HD 5cm/pi"
-msgstr ""
+msgstr "Ville de Nyon - Orthophoto 2010 HD 5cm/pi"
 
 msgid "Cartoriviera - Orthophoto 2012"
-msgstr ""
+msgstr "Cartoriviera - Orthophoto 2012"
 
 msgid "SIGIP - Orthophoto 2012"
-msgstr ""
+msgstr "SIGIP - Orthophoto 2012"
 
 msgid "Lausanne - Orthophoto technique 2012"
-msgstr ""
+msgstr "Lausanne - Orthophoto technique 2012"
 
 msgid "Bonvillars Orthophoto 2013"
-msgstr ""
+msgstr "Bonvillars Orthophoto 2013"
 
 msgid "Fiez Orthophoto 2013"
-msgstr ""
+msgstr "Fiez Orthophoto 2013"
 
-msgid "MSR Maps Topo"
-msgstr ""
+msgid "Taiwan e-Map Open Data"
+msgstr "Taiwan e-Map Open Data"
 
-msgid "MSR Maps Urban"
-msgstr ""
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr "Taiwan e-Map Open Data (with Contour Line)"
 
-msgid "USGS Topographic Maps"
-msgstr ""
+msgid "Taiwan Village Boundaries"
+msgstr "Taiwan Village Boundaries"
+
+msgid "Taiwan Land-Section Data"
+msgstr "Taiwan Land-Section Data"
+
+msgid "NLSC Open Data WMTS"
+msgstr "NLSC Open Data WMTS"
+
+msgid "MSR Maps Topo"
+msgstr "MSR Maps Topo"
+
+msgid "MSR Maps Urban"
+msgstr "MSR Maps Urban"
+
+msgid "USGS Topographic Maps"
+msgstr "USGS Topographic Maps"
 
 msgid "USGS Large Scale Imagery"
-msgstr ""
+msgstr "USGS Large Scale Imagery"
 
 msgid "TIGER 2012 Roads Overlay"
-msgstr ""
+msgstr "TIGER 2012 Roads Overlay"
 
-msgid "New & Misaligned TIGER Roads (2014)"
-msgstr ""
+msgid "New & Misaligned TIGER Roads (2015)"
+msgstr "New & Misaligned TIGER Roads (2015)"
 
 msgid "MassGIS L3 Parcels"
-msgstr ""
+msgstr "MassGIS L3 Parcels"
 
 msgid "NC Latest Orthoimagery"
-msgstr ""
+msgstr "NC Latest Orthoimagery"
 
 msgid "U.S. Forest Service roads"
-msgstr ""
+msgstr "U.S. Forest Service roads"
 
 msgid "Ukraine - Orthophotomaps 2012"
-msgstr ""
+msgstr "Ukraine - Orthophotomaps 2012"
 
 msgid "7th Series (OS7)"
-msgstr ""
+msgstr "7th Series (OS7)"
 
 msgid "OS New Popular Edition historic"
-msgstr ""
+msgstr "OS New Popular Edition historic"
 
 msgid "OS OpenData StreetView"
-msgstr ""
+msgstr "OS OpenData StreetView"
 
 msgid "OS OpenData Locator"
-msgstr ""
+msgstr "OS OpenData Locator"
 
 msgid "Surrey Air Survey"
-msgstr ""
+msgstr "Surrey Air Survey"
 
 msgid "NLS - OS 6-inch Scotland 1842-82"
-msgstr ""
+msgstr "NLS - OS 6-inch Scotland 1842-82"
 
 msgid "NLS - OS 1:25k 1st Series 1937-61"
-msgstr ""
+msgstr "NLS - OS 1:25k 1st Series 1937-61"
 
 msgid "NLS - OS 1-inch 7th Series 1955-61"
-msgstr ""
+msgstr "NLS - OS 1-inch 7th Series 1955-61"
 
 msgid "OS 1:25k historic (OSM-Best)"
-msgstr ""
+msgstr "OS 1:25k historic (OSM-Best)"
 
 msgid "OS 1:25k historic (OSM-Limited)"
-msgstr ""
+msgstr "OS 1:25k historic (OSM-Limited)"
 
 msgid "OS Scottish Popular historic"
-msgstr ""
+msgstr "OS Scottish Popular historic"
 
 msgid "NLS - Bartholomew Half Inch, 1897-1907"
-msgstr ""
+msgstr "NLS - Bartholomew Half Inch, 1897-1907"
 
 msgid "OS Town Plans, Aberdeen 1866-1867 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Aberdeen 1866-1867 (NLS)"
 
 msgid "OS Town Plans, Airdrie 1858 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Airdrie 1858 (NLS)"
 
 msgid "OS Town Plans, Alexandria 1859 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Alexandria 1859 (NLS)"
 
 msgid "OS Town Plans, Alloa 1861-1862 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Alloa 1861-1862 (NLS)"
 
 msgid "OS Town Plans, Annan 1859 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Annan 1859 (NLS)"
 
 msgid "OS Town Plans, Arbroath 1858 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Arbroath 1858 (NLS)"
 
 msgid "OS Town Plans, Ayr 1855 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Ayr 1855 (NLS)"
 
 msgid "OS Town Plans, Berwick-upon-Tweed 1852 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Berwick-upon-Tweed 1852 (NLS)"
 
 msgid "OS Town Plans, Brechin 1862 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Brechin 1862 (NLS)"
 
 msgid "OS Town Plans, Burntisland 1894 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Burntisland 1894 (NLS)"
 
 msgid "OS Town Plans, Campbelton 1865 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Campbelton 1865 (NLS)"
 
 msgid "OS Town Plans, Coatbridge 1858 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Coatbridge 1858 (NLS)"
 
 msgid "OS Town Plans, Cupar 1854 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Cupar 1854 (NLS)"
 
 msgid "OS Town Plans, Cupar 1893-1894 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Cupar 1893-1894 (NLS)"
 
 msgid "OS Town Plans, Dalkeith 1852 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Dalkeith 1852 (NLS)"
 
 msgid "OS Town Plans, Dalkeith 1893 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Dalkeith 1893 (NLS)"
 
 msgid "OS Town Plans, Dumbarton 1859 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Dumbarton 1859 (NLS)"
 
 msgid "OS Town Plans, Dumfries 1850 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Dumfries 1850 (NLS)"
 
 msgid "OS Town Plans, Dumfries 1893 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Dumfries 1893 (NLS)"
 
 msgid "OS Town Plans, Dundee 1857-1858 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Dundee 1857-1858 (NLS)"
 
 msgid "OS Town Plans, Dundee 1870-1872 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Dundee 1870-1872 (NLS)"
 
 msgid "OS Town Plans, Dunfermline 1854 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Dunfermline 1854 (NLS)"
 
 msgid "OS Town Plans, Dunfermline 1894 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Dunfermline 1894 (NLS)"
 
 msgid "OS Town Plans, Edinburgh 1849-1851 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Edinburgh 1849-1851 (NLS)"
 
 msgid "OS Town Plans, Edinburgh 1876-1877 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Edinburgh 1876-1877 (NLS)"
 
 msgid "OS Town Plans, Edinburgh 1893-1894 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Edinburgh 1893-1894 (NLS)"
 
 msgid "OS Town Plans, Elgin 1868 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Elgin 1868 (NLS)"
 
 msgid "OS Town Plans, Falkirk 1858-1859 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Falkirk 1858-1859 (NLS)"
 
 msgid "OS Town Plans, Forfar 1860-1861 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Forfar 1860-1861 (NLS)"
 
 msgid "OS Town Plans, Forres 1868 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Forres 1868 (NLS)"
 
 msgid "OS Town Plans, Galashiels 1858 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Galashiels 1858 (NLS)"
 
 msgid "OS Town Plans, Girvan 1857 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Girvan 1857 (NLS)"
 
 msgid "OS Town Plans, Glasgow 1857-1858 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Glasgow 1857-1858 (NLS)"
 
 msgid "OS Town Plans, Glasgow 1892-1894 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Glasgow 1892-1894 (NLS)"
 
 msgid "OS Town Plans, Greenock 1857 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Greenock 1857 (NLS)"
 
 msgid "OS Town Plans, Haddington 1853 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Haddington 1853 (NLS)"
 
 msgid "OS Town Plans, Haddington 1893 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Haddington 1893 (NLS)"
 
 msgid "OS Town Plans, Hamilton 1858 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Hamilton 1858 (NLS)"
 
 msgid "OS Town Plans, Hawick 1857-1858 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Hawick 1857-1858 (NLS)"
 
 msgid "OS Town Plans, Inverness 1867-1868 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Inverness 1867-1868 (NLS)"
 
 msgid "OS Town Plans, Irvine 1859 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Irvine 1859 (NLS)"
 
 msgid "OS Town Plans, Jedburgh 1858 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Jedburgh 1858 (NLS)"
 
 msgid "OS Town Plans, Kelso 1857 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Kelso 1857 (NLS)"
 
 msgid "OS Town Plans, Kilmarnock 1857-1859 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Kilmarnock 1857-1859 (NLS)"
 
 msgid "OS Town Plans, Kirkcaldy 1855 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Kirkcaldy 1855 (NLS)"
 
 msgid "OS Town Plans, Kirkcaldy 1894 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Kirkcaldy 1894 (NLS)"
 
 msgid "OS Town Plans, Kirkcudbright 1850 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Kirkcudbright 1850 (NLS)"
 
 msgid "OS Town Plans, Kirkcudbright 1893 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Kirkcudbright 1893 (NLS)"
 
 msgid "OS Town Plans, Kirkintilloch 1859 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Kirkintilloch 1859 (NLS)"
 
 msgid "OS Town Plans, Kirriemuir 1861 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Kirriemuir 1861 (NLS)"
 
 msgid "OS Town Plans, Lanark 1858 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Lanark 1858 (NLS)"
 
 msgid "OS Town Plans, Linlithgow 1856 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Linlithgow 1856 (NLS)"
 
 msgid "OS Town Plans, Mayole 1856-1857 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Mayole 1856-1857 (NLS)"
 
 msgid "OS Town Plans, Montrose 1861-1862 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Montrose 1861-1862 (NLS)"
 
 msgid "OS Town Plans, Musselburgh 1853 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Musselburgh 1853 (NLS)"
 
 msgid "OS Town Plans, Musselburgh 1893 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Musselburgh 1893 (NLS)"
 
 msgid "OS Town Plans, Nairn 1867-1868 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Nairn 1867-1868 (NLS)"
 
 msgid "OS Town Plans, Oban 1867-1868 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Oban 1867-1868 (NLS)"
 
 msgid "OS Town Plans, Peebles 1856 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Peebles 1856 (NLS)"
 
 msgid "OS Town Plans, Perth 1860 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Perth 1860 (NLS)"
 
 msgid "OS Town Plans, Peterhead 1868 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Peterhead 1868 (NLS)"
 
 msgid "OS Town Plans, Port Glasgow 1856-1857 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Port Glasgow 1856-1857 (NLS)"
 
 msgid "OS Town Plans, Portobello 1893-1894 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Portobello 1893-1894 (NLS)"
 
 msgid "OS Town Plans, Rothesay 1862-1863 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Rothesay 1862-1863 (NLS)"
 
 msgid "OS Town Plans, Selkirk 1865 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Selkirk 1865 (NLS)"
 
 msgid "OS Town Plans, St Andrews 1854 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, St Andrews 1854 (NLS)"
 
 msgid "OS Town Plans, St Andrews 1893 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, St Andrews 1893 (NLS)"
 
 msgid "OS Town Plans, Stirling 1858 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Stirling 1858 (NLS)"
 
 msgid "OS Town Plans, Stonehaven 1864 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Stonehaven 1864 (NLS)"
 
 msgid "OS Town Plans, Stranraer 1847 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Stranraer 1847 (NLS)"
 
 msgid "OS Town Plans, Stranraer 1863-1877 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Stranraer 1863-1877 (NLS)"
 
 msgid "OS Town Plans, Stranraer 1893 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Stranraer 1893 (NLS)"
 
 msgid "OS Town Plans, Strathaven 1858 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Strathaven 1858 (NLS)"
 
 msgid "OS Town Plans, Wick 1872 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Wick 1872 (NLS)"
 
 msgid "OS Town Plans, Wigtown 1848 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Wigtown 1848 (NLS)"
 
 msgid "OS Town Plans, Wigtown 1894 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Wigtown 1894 (NLS)"
 
 msgid "Landsat 233055"
-msgstr ""
+msgstr "Landsat 233055"
 
 msgid ""
 "Group common Address Interpolation inputs in a single dialog, as well as an "
@@ -16236,6 +16504,13 @@ msgstr ""
 "Implements a command line and enables to create your commands. See link for "
 "standard commands (arc, circle etc.)"
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr "(Warning: Experimental!) Tool for conflating (merging) data."
 
@@ -16335,13 +16610,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr "WMSPlugin-style imagery adjustment mapmode"
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -16413,8 +16681,8 @@ msgstr ""
 "create, close, invalidate, re-open and comment bug reports by using this "
 "plugin."
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
-msgstr "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
+msgstr "Allows the user to work with pictures hosted at mapillary.com"
 
 msgid ""
 "Provide a measurement dialog and a layer to measure length and angle of "
@@ -16431,9 +16699,6 @@ msgstr "Merge overlapping part of ways."
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr "Adds no left turn for sets of 4 or 5 ways"
 
-msgid "Simplifies download from different read-only APIs."
-msgstr "Simplifies download from different read-only APIs."
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr "Allows to attribute tags to all objects in any selected area at once"
 
@@ -16531,6 +16796,16 @@ msgid ""
 msgstr ""
 "This plug-in simplifies the mapping and editing of public transport routes."
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr "Displays stops of selected public transport routes as graph"
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr "Relation and multipolygon creating and editing panel."
 
@@ -16577,6 +16852,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr "Edit features for OpenSeaMap"
 
+msgid "Allows to draw splines"
+msgstr "Allows to draw splines"
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -16673,9 +16951,6 @@ msgstr "Easy downloading along a long set of interconnected ways"
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr "Enables searching for waypoints imported from gpx file."
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr "Select a sequence of non-branching connected ways"
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr "Simplifies linking OSM objects to Wikipedia articles"
 
@@ -17085,6 +17360,14 @@ msgid "basketball"
 msgstr "basketball"
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr "beachvolleyball"
+
+msgctxt "sport"
+msgid "billiards"
+msgstr "billiards"
+
+msgctxt "sport"
 msgid "boules"
 msgstr "boules"
 
@@ -17109,10 +17392,6 @@ msgid "cricket"
 msgstr "cricket"
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr "cricket_nets"
-
-msgctxt "sport"
 msgid "croquet"
 msgstr "croquet"
 
@@ -17129,6 +17408,10 @@ msgid "equestrian"
 msgstr "equestrian"
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr "field_hockey"
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr "gaelic_games"
 
@@ -17145,14 +17428,26 @@ msgid "handball"
 msgstr "handball"
 
 msgctxt "sport"
-msgid "hockey"
-msgstr "hockey"
-
-msgctxt "sport"
 msgid "horse_racing"
 msgstr "horse_racing"
 
 msgctxt "sport"
+msgid "ice_hockey"
+msgstr "ice_hockey"
+
+msgctxt "sport"
+msgid "karting"
+msgstr "karting"
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr "model_aerodrome"
+
+msgctxt "sport"
+msgid "motocross"
+msgstr "motocross"
+
+msgctxt "sport"
 msgid "motor"
 msgstr "motor"
 
@@ -17165,6 +17460,10 @@ msgid "racquet"
 msgstr "racquet"
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr "rc_car"
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr "rugby_league"
 
@@ -17177,6 +17476,10 @@ msgid "running"
 msgstr "running"
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr "safety_training"
+
+msgctxt "sport"
 msgid "shooting"
 msgstr "shooting"
 
@@ -17204,17 +17507,29 @@ msgctxt "sport"
 msgid "tennis"
 msgstr "tennis"
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr "volleyball"
+
+msgctxt "sport"
+msgid "9pin"
+msgstr "9pin"
+
+msgctxt "sport"
+msgid "10pin"
+msgstr "10pin"
+
 msgid "Fee"
 msgstr "Fee"
 
 msgid "06:00-20:00"
-msgstr ""
+msgstr "06:00-20:00"
 
 msgid "Mo-Fr 09:00-18:00,Sa 08:00-14:00"
-msgstr ""
+msgstr "Mo-Fr 09:00-18:00,Sa 08:00-14:00"
 
 msgid "May-Sep 09:30-12:30,14:15-19:30"
-msgstr ""
+msgstr "May-Sep 09:30-12:30,14:15-19:30"
 
 msgctxt "parking"
 msgid "multi-storey"
@@ -17599,6 +17914,9 @@ msgstr "Tertiary link"
 msgid "Unclassified"
 msgstr "Unclassified"
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr "Passing Places"
 
@@ -17677,6 +17995,9 @@ msgstr ""
 "Emergency lane beside long descending slopes for trucks and other vehicles "
 "to stop safely after brake failure."
 
+msgid "Raceway"
+msgstr "Raceway"
+
 msgid "Road (Unknown Type)"
 msgstr "Road (Unknown Type)"
 
@@ -17725,7 +18046,7 @@ msgstr "tertiary_link"
 
 msgctxt "Highway"
 msgid "bus_guideway"
-msgstr ""
+msgstr "bus_guideway"
 
 msgctxt "Highway"
 msgid "bridleway"
@@ -17741,15 +18062,15 @@ msgstr "pedestrian"
 
 msgctxt "Highway"
 msgid "track"
-msgstr ""
+msgstr "track"
 
 msgctxt "Highway"
 msgid "footway"
-msgstr ""
+msgstr "footway"
 
 msgctxt "Highway"
 msgid "steps"
-msgstr ""
+msgstr "steps"
 
 msgid "Junction"
 msgstr "Junction"
@@ -17767,6 +18088,8 @@ msgid ""
 "Some road types already imply some access restrictions which should not be "
 "set again."
 msgstr ""
+"Some road types already imply some access restrictions which should not be "
+"set again."
 
 msgid "No exit (cul-de-sac)"
 msgstr "No exit (cul-de-sac)"
@@ -17827,30 +18150,30 @@ msgstr "Overtaking"
 
 msgctxt "overtaking"
 msgid "yes"
-msgstr ""
+msgstr "yes"
 
 msgctxt "overtaking"
 msgid "both"
-msgstr ""
+msgstr "both"
 
 msgctxt "overtaking"
 msgid "forward"
-msgstr ""
+msgstr "forward"
 
 msgctxt "overtaking"
 msgid "backward"
-msgstr ""
+msgstr "backward"
 
 msgctxt "overtaking"
 msgid "no"
-msgstr ""
+msgstr "no"
 
 msgid "Roundabout"
 msgstr "Roundabout"
 
 msgctxt "Highway"
 msgid "construction"
-msgstr ""
+msgstr "construction"
 
 msgid "Ford"
 msgstr "Ford"
@@ -18046,37 +18369,37 @@ msgid "Amount of Steps"
 msgstr "Amount of steps"
 
 msgid "Ramp"
-msgstr ""
+msgstr "Ramp"
 
 msgid "Stroller ramp"
-msgstr ""
+msgstr "Stroller ramp"
 
 msgid "Bicycle ramp"
-msgstr ""
+msgstr "Bicycle ramp"
 
 msgid "Wheelchair ramp"
-msgstr ""
+msgstr "Wheelchair ramp"
 
 msgid "Luggage ramp"
-msgstr ""
+msgstr "Luggage ramp"
 
 msgid "automatic"
-msgstr ""
+msgstr "automatic"
 
 msgid "manual"
-msgstr ""
+msgstr "manual"
 
 msgid "Handrail"
-msgstr ""
+msgstr "Handrail"
 
 msgid "Left handrail"
-msgstr ""
+msgstr "Left handrail"
 
 msgid "Center handrail"
-msgstr ""
+msgstr "Centre handrail"
 
 msgid "Right handrail"
-msgstr ""
+msgstr "Right handrail"
 
 msgid "Waypoints"
 msgstr "Waypoints"
@@ -18145,7 +18468,7 @@ msgid "tiger"
 msgstr "tiger"
 
 msgid "Button operated"
-msgstr ""
+msgstr "Button operated"
 
 msgid "Sound signals"
 msgstr "Sound signals"
@@ -18160,7 +18483,7 @@ msgid "Cross on horseback"
 msgstr "Cross on horseback"
 
 msgid "Optional values for specific countries"
-msgstr ""
+msgstr "Optional values for specific countries"
 
 msgid "Stop"
 msgstr "Stop"
@@ -18178,7 +18501,7 @@ msgid "Pedestrian Crossing"
 msgstr "Pedestrian Crossing"
 
 msgid "In case of traffic signals:"
-msgstr ""
+msgstr "In case of traffic signals:"
 
 msgid "Traffic Calming"
 msgstr "Traffic Calming"
@@ -18223,16 +18546,24 @@ msgid "Speed Camera"
 msgstr "Speed Camera"
 
 msgid "Traffic Mirror"
+msgstr "Traffic Mirror"
+
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
 msgstr ""
 
 msgctxt "junction=yes"
 msgid "Named Junction"
-msgstr ""
+msgstr "Named Junction"
 
 msgid ""
 "Used in some countries for a named road junction who’s name serves for local "
 "orientation."
 msgstr ""
+"Used in some countries for a named road junction whose name serves for local "
+"orientation."
 
 msgid "Elevator"
 msgstr "Elevator"
@@ -18414,6 +18745,11 @@ msgstr "Colonnade"
 msgid "Avalanche Protector"
 msgstr "Avalanche protector"
 
+msgctxt "main group"
+msgid "Water"
+msgstr "Water"
+
+msgctxt "sub group"
 msgid "Water"
 msgstr "Water"
 
@@ -18469,6 +18805,10 @@ msgstr "Reservoir"
 msgid "Covered Reservoir"
 msgstr "Covered Reservoir"
 
+msgctxt "natural"
+msgid "Water"
+msgstr "Water"
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr "A body of standing water, such as a lake or pond."
 
@@ -18609,58 +18949,172 @@ msgid "Marina"
 msgstr "Marina"
 
 msgid "Dump Station"
-msgstr ""
+msgstr "Dump Station"
 
 msgid "public"
 msgstr "public"
 
-msgid "Pier"
-msgstr "Pier"
+msgid "Marine Fuel"
+msgstr "Marine Fuel"
 
-msgid "Lock Gate"
-msgstr "Lock Gate"
+msgid "Agip"
+msgstr "Agip"
 
-msgid "Turning Point"
-msgstr "Turning Point"
+msgid "Aral"
+msgstr "Aral"
 
-msgid "Slipway"
-msgstr "Slipway"
+msgid "Avia"
+msgstr "Avia"
 
-msgid "Boatyard"
-msgstr "Boatyard"
+msgid "BP"
+msgstr "BP"
 
-msgid "Dock"
-msgstr "Dock"
+msgid "Chevron"
+msgstr "Chevron"
 
-msgid "Transport"
-msgstr "Transport"
+msgid "Citgo"
+msgstr "Citgo"
 
-msgid "Railway"
-msgstr "Railway"
+msgid "Eni"
+msgstr "Eni"
 
-msgid "Rail"
-msgstr "Railway"
+msgid "Esso"
+msgstr "Esso"
 
-msgid "main"
-msgstr "main"
+msgid "Exxon"
+msgstr "Exxon"
 
-msgid "branch"
-msgstr "branch"
+msgid "Gulf"
+msgstr "Gulf"
 
-msgid "industrial"
-msgstr "industrial"
+msgid "Mobil"
+msgstr "Mobil"
 
-msgid "military"
-msgstr "military"
+msgid "OMV"
+msgstr "OMV"
 
-msgid "tourism"
-msgstr "tourism"
+msgid "Petro-Canada"
+msgstr "Petro-Canada"
 
-msgid "freight"
-msgstr "freight"
+msgid "Pioneer"
+msgstr "Pioneer"
 
-msgid "Narrow Gauge Rail"
-msgstr "Narrow Gauge Railway"
+msgid "Q8"
+msgstr "Q8"
+
+msgid "Repsol"
+msgstr "Repsol"
+
+msgid "Shell"
+msgstr "Shell"
+
+msgid "Socar"
+msgstr "Socar"
+
+msgid "Statoil"
+msgstr "Statoil"
+
+msgid "Sunoco"
+msgstr "Sunoco"
+
+msgid "Tamoil"
+msgstr "Tamoil"
+
+msgid "Texaco"
+msgstr "Texaco"
+
+msgid "Total"
+msgstr "Total"
+
+msgid "Independent"
+msgstr "Independent"
+
+msgid "Fuel types:"
+msgstr "Fuel types:"
+
+msgid "Diesel"
+msgstr "Diesel"
+
+msgid "Bio Diesel"
+msgstr "Bio Diesel"
+
+msgid "Octane 80"
+msgstr "Octane 80"
+
+msgid "Octane 91"
+msgstr "Octane 91"
+
+msgid "Octane 92"
+msgstr "Octane 92"
+
+msgid "Octane 95"
+msgstr "Octane 95"
+
+msgid "Octane 98"
+msgstr "Octane 98"
+
+msgid "Octane 100"
+msgstr "Octane 100"
+
+msgid "E10 (10% Ethanol mix)"
+msgstr "E10 (10% Ethanol mix)"
+
+msgid "E85 (85% Ethanol mix)"
+msgstr "E85 (85% Ethanol mix)"
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr "LPG (Liquefied petroleum gas)"
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr "CNG (Compressed Natural Gas)"
+
+msgid "Pier"
+msgstr "Pier"
+
+msgid "Lock Gate"
+msgstr "Lock Gate"
+
+msgid "Turning Point"
+msgstr "Turning Point"
+
+msgid "Slipway"
+msgstr "Slipway"
+
+msgid "Boatyard"
+msgstr "Boatyard"
+
+msgid "Dock"
+msgstr "Dock"
+
+msgid "Transport"
+msgstr "Transport"
+
+msgid "Railway"
+msgstr "Railway"
+
+msgid "Rail"
+msgstr "Railway"
+
+msgid "main"
+msgstr "main"
+
+msgid "branch"
+msgstr "branch"
+
+msgid "industrial"
+msgstr "industrial"
+
+msgid "military"
+msgstr "military"
+
+msgid "tourism"
+msgstr "tourism"
+
+msgid "freight"
+msgstr "freight"
+
+msgid "Narrow Gauge Rail"
+msgstr "Narrow Gauge Railway"
 
 msgid "Monorail"
 msgstr "Monorail"
@@ -18730,6 +19184,9 @@ msgstr "Buffer Stop"
 msgid "Railway Switch"
 msgstr "Railway switch"
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr "Aerialway"
 
@@ -18776,18 +19233,20 @@ msgid ""
 "drag_lift (general type - use only if exact type (see values below) is "
 "unknown)"
 msgstr ""
+"drag_lift (general type - use only if exact type (see values below) is "
+"unknown)"
 
 msgid "t-bar"
-msgstr ""
+msgstr "t-bar"
 
 msgid "j-bar"
-msgstr ""
+msgstr "j-bar"
 
 msgid "platter"
-msgstr ""
+msgstr "platter"
 
 msgid "rope_tow"
-msgstr ""
+msgstr "rope_tow"
 
 msgid "Magic Carpet"
 msgstr "Magic carpet"
@@ -18853,78 +19312,6 @@ msgstr "Parking entrance"
 msgid "Fuel"
 msgstr "Fuel"
 
-msgid "Agip"
-msgstr "Agip"
-
-msgid "Aral"
-msgstr "Aral"
-
-msgid "Avia"
-msgstr "Avia"
-
-msgid "BP"
-msgstr "BP"
-
-msgid "Chevron"
-msgstr "Chevron"
-
-msgid "Citgo"
-msgstr "Citgo"
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr "Esso"
-
-msgid "Exxon"
-msgstr "Exxon"
-
-msgid "Gulf"
-msgstr "Gulf"
-
-msgid "Mobil"
-msgstr "Mobil"
-
-msgid "OMV"
-msgstr "OMV"
-
-msgid "Petro-Canada"
-msgstr "Petro-Canada"
-
-msgid "Pioneer"
-msgstr "Pioneer"
-
-msgid "Q8"
-msgstr "Q8"
-
-msgid "Repsol"
-msgstr "Repsol"
-
-msgid "Shell"
-msgstr "Shell"
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr "Statoil"
-
-msgid "Sunoco"
-msgstr "Sunoco"
-
-msgid "Tamoil"
-msgstr "Tamoil"
-
-msgid "Texaco"
-msgstr "Texaco"
-
-msgid "Total"
-msgstr "Total"
-
-msgid "Independent"
-msgstr "Independent"
-
 msgid "With shop"
 msgstr "With shop"
 
@@ -18934,51 +19321,12 @@ msgstr "convenience"
 msgid "kiosk"
 msgstr "kiosk"
 
-msgid "Fuel types:"
-msgstr "Fuel types:"
-
-msgid "Diesel"
-msgstr "Diesel"
-
-msgid "Bio Diesel"
-msgstr "Bio Diesel"
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr "Diesel (Gas To Liquid - ultimate diesel)"
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr "Diesel for Heavy Good Vehicles"
 
-msgid "Octane 80"
-msgstr "Octane 80"
-
-msgid "Octane 91"
-msgstr "Octane 91"
-
-msgid "Octane 92"
-msgstr "Octane 92"
-
-msgid "Octane 95"
-msgstr "Octane 95"
-
-msgid "Octane 98"
-msgstr "Octane 98"
-
-msgid "Octane 100"
-msgstr "Octane 100"
-
-msgid "E10 (10% Ethanol mix)"
-msgstr "E10 (10% Ethanol mix)"
-
-msgid "E85 (85% Ethanol mix)"
-msgstr "E85 (85% Ethanol mix)"
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr "LPG (Liquefied petroleum gas)"
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr "CNG (Compressed Natural Gas)"
-
 msgid "1/25 mix (mofa/moped)"
 msgstr "1/25 mix (mofa/moped)"
 
@@ -18986,16 +19334,16 @@ msgid "1/50 mix (mofa/moped)"
 msgstr "1/50 mix (mofa/moped)"
 
 msgid "Fuel cards:"
-msgstr ""
+msgstr "Fuel cards:"
 
 msgid "DKV"
-msgstr ""
+msgstr "DKV"
 
 msgid "Routex"
-msgstr ""
+msgstr "Routex"
 
 msgid "UTA"
-msgstr ""
+msgstr "UTA"
 
 msgid "Charging Station"
 msgstr "Charging station"
@@ -19121,10 +19469,10 @@ msgid "Bicycles are washed (for a fee)"
 msgstr "Bicycles are washed (for a fee)"
 
 msgid "Public Bicycle Repair Station"
-msgstr ""
+msgstr "Public Bicycle Repair Station"
 
 msgid "Chain tool"
-msgstr ""
+msgstr "Chain tool"
 
 msgid "Public Transport"
 msgstr "Public Transport"
@@ -19142,7 +19490,7 @@ msgid "monorail"
 msgstr "monorail"
 
 msgid "light_rail"
-msgstr ""
+msgstr "light_rail"
 
 msgid "trolleybus"
 msgstr "trolleybus"
@@ -19197,9 +19545,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr "#CD853F"
 
-msgid "route segment"
-msgstr "route segment"
-
 msgid "stop position"
 msgstr "stop position"
 
@@ -19218,6 +19563,9 @@ msgstr "platform (exit only)"
 msgid "platform (entry only)"
 msgstr "platform (entry only)"
 
+msgid "route segment"
+msgstr "route segment"
+
 msgid "Route Master"
 msgstr "Route Master"
 
@@ -19349,7 +19697,7 @@ msgid "Tactile Paving"
 msgstr "Tactile Paving"
 
 msgid "incorrect"
-msgstr ""
+msgstr "incorrect"
 
 msgid "Bus Platform"
 msgstr "Bus Platform"
@@ -19382,14 +19730,14 @@ msgid "Apron"
 msgstr "Apron"
 
 msgid "Plane Parking Position"
-msgstr ""
+msgstr "Plane Parking Position"
 
 msgid "Hangar"
 msgstr "Hangar"
 
 msgctxt "building"
 msgid "hangar"
-msgstr ""
+msgstr "hangar"
 
 msgctxt "building"
 msgid "yes"
@@ -19420,11 +19768,17 @@ msgstr "Hotel"
 msgid "Stars"
 msgstr "Stars"
 
+msgid "Rooms"
+msgstr "Rooms"
+
+msgid "Beds"
+msgstr "Beds"
+
 msgid "Motel"
 msgstr "Motel"
 
 msgid "Guest House/Bed & Breakfast"
-msgstr ""
+msgstr "Guest House/Bed & Breakfast"
 
 msgid "Chalet"
 msgstr "Chalet"
@@ -19510,11 +19864,14 @@ msgstr "sandwich"
 msgid "sushi"
 msgstr "sushi"
 
+msgid "steak_house"
+msgstr "steak_house"
+
 msgid "Microbrewery"
 msgstr "Microbrewery"
 
 msgid "Outdoor seating"
-msgstr ""
+msgstr "Outdoor seating"
 
 msgid "Fast Food"
 msgstr "Fast Food"
@@ -19690,16 +20047,16 @@ msgid "Movie Theater/Cinema"
 msgstr "Movie theater/cinema"
 
 msgid "Drive-in theater"
-msgstr ""
+msgstr "Drive-in theater"
 
 msgid "3D"
-msgstr ""
+msgstr "3D"
 
 msgid "Number of screens"
-msgstr ""
+msgstr "Number of screens"
 
 msgid "Minimum age"
-msgstr ""
+msgstr "Minimum age"
 
 msgid "Zoo"
 msgstr "Zoo"
@@ -19725,6 +20082,9 @@ msgstr "Sauna"
 msgid "Horse Riding"
 msgstr "Horse riding"
 
+msgid "Casino"
+msgstr "Casino"
+
 msgid "Brothel"
 msgstr "Brothel"
 
@@ -19738,7 +20098,7 @@ msgid "Fireplace"
 msgstr "Fireplace"
 
 msgid "Picnic Table"
-msgstr ""
+msgstr "Picnic Table"
 
 msgid "Public Grill"
 msgstr "Public grill"
@@ -19751,7 +20111,7 @@ msgid "charcoal"
 msgstr "charcoal"
 
 msgid "Firepit"
-msgstr ""
+msgstr "Firepit"
 
 msgid "Fishing"
 msgstr "Fishing"
@@ -19980,7 +20340,7 @@ msgid "Police"
 msgstr "Police"
 
 msgid "Ranger Station"
-msgstr ""
+msgstr "Ranger Station"
 
 msgid "Fire Station"
 msgstr "Fire Station"
@@ -20025,7 +20385,7 @@ msgid "Clinic"
 msgstr "Clinic"
 
 msgid "Doctor''s Office"
-msgstr "Doctor''s office"
+msgstr "Doctor''s Surgery"
 
 msgid "Dentist"
 msgstr "Dentist"
@@ -20100,7 +20460,7 @@ msgid "urinal"
 msgstr "urinal"
 
 msgid "Shower"
-msgstr ""
+msgstr "Shower"
 
 msgid "Post Box"
 msgstr "Post Box"
@@ -20109,13 +20469,13 @@ msgid "Collection times"
 msgstr "Collection times"
 
 msgid "Mo-Sa 09:00"
-msgstr ""
+msgstr "Mo-Sa 09:00"
 
 msgid "Mo-Fr 17:30; Sa 12:00"
-msgstr ""
+msgstr "Mo-Fr 17:30; Sa 12:00"
 
 msgid "Mo-Fr 15:00,19:00; Sa 15:10; Su 10:30"
-msgstr ""
+msgstr "Mo-Fr 15:00,19:00; Sa 15:10; Su 10:30"
 
 msgid "Drive through"
 msgstr "Drive through"
@@ -20128,7 +20488,7 @@ msgstr "Coins"
 
 msgctxt "payment"
 msgid "Notes"
-msgstr ""
+msgstr "Notes"
 
 msgid "Telephone cards"
 msgstr "Telephone cards"
@@ -20212,8 +20572,8 @@ msgstr "Shows barometric pressure"
 msgid "Shows humidity"
 msgstr "Shows humidity"
 
-msgid "Recycling"
-msgstr "Recycling"
+msgid "Recycling Container"
+msgstr "Recycling Container"
 
 msgid "Batteries"
 msgstr "Batteries"
@@ -20221,20 +20581,47 @@ msgstr "Batteries"
 msgid "Cans"
 msgstr "Cans"
 
+msgid "Cardboard"
+msgstr "Cardboard"
+
+msgid "Electrical Appliances"
+msgstr "Electrical Appliances"
+
 msgid "Glass"
 msgstr "Glass"
 
+msgid "Glass Bottles"
+msgstr "Glass Bottles"
+
+msgid "Green Waste"
+msgstr "Green Waste"
+
 msgid "Paper"
 msgstr "Paper"
 
+msgid "Plastic"
+msgstr "Plastic"
+
+msgid "Plastic Bottles"
+msgstr "Plastic Bottles"
+
+msgid "Plastic Packaging"
+msgstr "Plastic Packaging"
+
 msgid "Scrap Metal"
 msgstr "Scrap Metal"
 
-msgid "container"
-msgstr "container"
+msgid "Shoes"
+msgstr "Shoes"
+
+msgid "Small Appliances"
+msgstr "Small Appliances"
+
+msgid "Waste"
+msgstr "Waste"
 
-msgid "centre"
-msgstr "centre"
+msgid "Recycling Centre"
+msgstr "Recycling Centre"
 
 msgid "Waste Basket/Trash Can"
 msgstr "Waste basket/Trash can"
@@ -20243,19 +20630,19 @@ msgid "Waste Disposal/Dumpster"
 msgstr "Waste disposal/Dumpster"
 
 msgid "Sanitary Dump Station"
-msgstr ""
+msgstr "Sanitary Dump Station"
 
 msgid "Suction pumpout"
-msgstr ""
+msgstr "Suction pumpout"
 
 msgid "Gravity drain for hose"
-msgstr ""
+msgstr "Gravity drain for hose"
 
 msgid "Casette or Elsan Disposal"
-msgstr ""
+msgstr "Casette or Elsan Disposal"
 
 msgid "Operation times"
-msgstr ""
+msgstr "Operation times"
 
 msgid "Backrest"
 msgstr "Backrest"
@@ -20268,11 +20655,11 @@ msgstr "Type of shelter"
 
 msgctxt "shelter"
 msgid "basic_hut"
-msgstr ""
+msgstr "basic_hut"
 
 msgctxt "shelter"
 msgid "lean_to"
-msgstr ""
+msgstr "lean_to"
 
 msgctxt "shelter"
 msgid "picnic_shelter"
@@ -20368,10 +20755,10 @@ msgid "Count"
 msgstr "Count"
 
 msgid "Advertising Column"
-msgstr ""
+msgstr "Advertising Column"
 
 msgid "Billboard"
-msgstr ""
+msgstr "Billboard"
 
 msgid "Sports"
 msgstr "Sports"
@@ -20389,13 +20776,13 @@ msgid "Pitch"
 msgstr "Pitch"
 
 msgid "artificial_turf"
-msgstr ""
+msgstr "artificial_turf"
 
 msgid "decoturf"
-msgstr ""
+msgstr "decoturf"
 
 msgid "tartan"
-msgstr ""
+msgstr "tartan"
 
 msgid "Racetrack"
 msgstr "Racetrack"
@@ -20437,6 +20824,9 @@ msgstr "Archery"
 msgid "Track and Field Athletics"
 msgstr "Track and Field Athletics"
 
+msgid "Running"
+msgstr "Running"
+
 msgid "Climbing"
 msgstr "Climbing"
 
@@ -20484,13 +20874,13 @@ msgid "Swimming"
 msgstr "Swimming"
 
 msgid "swimming_pool"
-msgstr ""
+msgstr "swimming_pool"
 
 msgid "water_park"
 msgstr "water_park"
 
 msgid "Scuba Diving"
-msgstr ""
+msgstr "Scuba Diving"
 
 msgid "Piste type"
 msgstr "Piste type"
@@ -20505,10 +20895,10 @@ msgid "skitour"
 msgstr "skitour"
 
 msgid "sled"
-msgstr ""
+msgstr "sled"
 
 msgid "sleigh"
-msgstr ""
+msgstr "sleigh"
 
 msgid "snow_park"
 msgstr "snow_park"
@@ -20612,12 +21002,18 @@ msgstr "Baseball"
 msgid "Basketball"
 msgstr "Basketball"
 
+msgid "Handball"
+msgstr "Handball"
+
 msgid "Volleyball"
 msgstr "Volleyball"
 
 msgid "Beach Volleyball"
 msgstr "Beach Volleyball"
 
+msgid "Billiards"
+msgstr "Billiards"
+
 msgid "Golf"
 msgstr "Golf"
 
@@ -20633,14 +21029,14 @@ msgstr "Lawn Bowling"
 msgid "Cricket"
 msgstr "Cricket"
 
-msgid "Cricket Nets"
-msgstr "Cricket Nets"
-
 msgid "Croquet"
 msgstr "Croquet"
 
-msgid "Hockey"
-msgstr "Hockey"
+msgid "Field Hockey"
+msgstr "Field Hockey"
+
+msgid "Ice Hockey"
+msgstr "Ice Hockey"
 
 msgid "Pelota"
 msgstr "Pelota"
@@ -20663,9 +21059,6 @@ msgstr "Kart Racing"
 msgid "Motocross"
 msgstr "Motocross"
 
-msgid "Safety Training"
-msgstr "Safety training"
-
 msgid "Model Aerodrome"
 msgstr "Model Aerodrome"
 
@@ -20684,9 +21077,6 @@ msgstr "track"
 msgid "RC Car"
 msgstr "RC Car"
 
-msgid "Raceway"
-msgstr "Raceway"
-
 msgid "Man Made"
 msgstr "Man Made"
 
@@ -20708,141 +21098,149 @@ msgstr "industrial"
 
 msgctxt "building"
 msgid "school"
-msgstr ""
+msgstr "school"
 
 msgctxt "building"
 msgid "commercial"
-msgstr ""
+msgstr "commercial"
 
 msgctxt "building"
 msgid "barn"
-msgstr ""
+msgstr "barn"
 
 msgctxt "building"
 msgid "farm_auxiliary"
-msgstr ""
+msgstr "farm_auxiliary"
 
 msgctxt "building"
 msgid "transportation"
-msgstr ""
+msgstr "transportation"
 
 msgctxt "building"
 msgid "greenhouse"
-msgstr ""
+msgstr "greenhouse"
 
 msgctxt "building"
 msgid "office"
-msgstr ""
+msgstr "office"
 
 msgctxt "building"
 msgid "university"
-msgstr ""
+msgstr "university"
 
 msgctxt "building"
 msgid "hospital"
-msgstr ""
+msgstr "hospital"
 
 msgctxt "building"
 msgid "warehouse"
-msgstr ""
+msgstr "warehouse"
 
 msgctxt "building"
 msgid "retail"
-msgstr ""
+msgstr "retail"
 
 msgctxt "building"
 msgid "shed"
-msgstr ""
+msgstr "shed"
 
 msgctxt "building"
 msgid "storage_tank"
-msgstr ""
+msgstr "storage_tank"
+
+msgctxt "building"
+msgid "supermarket"
+msgstr "supermarket"
+
+msgctxt "building"
+msgid "gasometer"
+msgstr "gasometer"
 
 msgctxt "building"
 msgid "cowshed"
-msgstr ""
+msgstr "cowshed"
 
 msgctxt "building"
 msgid "construction"
-msgstr ""
+msgstr "construction"
 
 msgctxt "building"
 msgid "Levels"
-msgstr ""
+msgstr "Levels"
 
 msgid "Residential Building"
-msgstr ""
+msgstr "Residential Building"
 
 msgctxt "building"
 msgid "residential"
-msgstr ""
+msgstr "residential"
 
 msgctxt "building"
 msgid "apartments"
-msgstr ""
+msgstr "apartments"
 
 msgctxt "building"
 msgid "house"
-msgstr ""
+msgstr "house"
 
 msgctxt "building"
 msgid "hut"
-msgstr ""
+msgstr "hut"
 
 msgctxt "building"
 msgid "dormitory"
-msgstr ""
+msgstr "dormitory"
 
 msgctxt "building"
 msgid "terrace"
-msgstr ""
+msgstr "terrace"
 
 msgctxt "building"
 msgid "detached"
-msgstr ""
+msgstr "detached"
 
 msgctxt "building"
 msgid "farm"
-msgstr ""
+msgstr "farm"
 
 msgid "Building part"
-msgstr ""
+msgstr "Building part"
 
 msgctxt "building"
 msgid "Skipped Levels"
-msgstr ""
+msgstr "Skipped Levels"
 
 msgid "Skipped height (meters)"
-msgstr ""
+msgstr "Skipped height (metres)"
 
 msgid "Entrance"
 msgstr "Entrance"
 
 msgctxt "entrance"
 msgid "yes"
-msgstr ""
+msgstr "yes"
 
 msgctxt "entrance"
 msgid "main"
-msgstr ""
+msgstr "main"
 
 msgctxt "entrance"
 msgid "service"
-msgstr ""
+msgstr "service"
 
 msgctxt "entrance"
 msgid "exit"
-msgstr ""
+msgstr "exit"
 
 msgctxt "entrance"
 msgid "emergency"
-msgstr ""
+msgstr "emergency"
 
 msgid "Entrance number"
-msgstr ""
+msgstr "Entrance number"
 
 msgid "Flat numbers"
-msgstr ""
+msgstr "Flat numbers"
 
 msgid "Tower"
 msgstr "Tower"
@@ -20857,13 +21255,13 @@ msgid "observation"
 msgstr "observation"
 
 msgid "Flagpole"
-msgstr ""
+msgstr "Flagpole"
 
 msgid "Works"
 msgstr "Works"
 
 msgid "Chimney"
-msgstr ""
+msgstr "Chimney"
 
 msgid "Windmill"
 msgstr "Windmill"
@@ -20872,42 +21270,42 @@ msgid "Gasometer"
 msgstr "Gasometer"
 
 msgid "Storage Tank"
-msgstr ""
+msgstr "Storage Tank"
 
 msgctxt "content"
 msgid "fuel"
-msgstr ""
+msgstr "fuel"
 
 msgctxt "content"
 msgid "manure"
-msgstr ""
+msgstr "manure"
 
 msgctxt "content"
 msgid "oil"
-msgstr ""
+msgstr "oil"
 
 msgctxt "content"
 msgid "sewage"
-msgstr ""
+msgstr "sewage"
 
 msgctxt "content"
 msgid "silage"
-msgstr ""
+msgstr "silage"
 
 msgctxt "content"
 msgid "slurry"
-msgstr ""
+msgstr "slurry"
 
 msgctxt "content"
 msgid "water"
-msgstr ""
+msgstr "water"
 
 msgctxt "content"
 msgid "wine"
-msgstr ""
+msgstr "wine"
 
 msgid "Bunker Silo"
-msgstr ""
+msgstr "Bunker Silo"
 
 msgid "Pipeline"
 msgstr "Pipeline"
@@ -20929,92 +21327,92 @@ msgstr "sewage"
 
 msgctxt "pipeline"
 msgid "underwater"
-msgstr ""
+msgstr "underwater"
 
 msgctxt "pipeline"
 msgid "overground"
-msgstr ""
+msgstr "overground"
 
 msgid "Crane"
 msgstr "Crane"
 
 msgid "Mineshaft"
-msgstr ""
+msgstr "Mineshaft"
 
 msgid "Function"
-msgstr ""
+msgstr "Function"
 
 msgid "winding"
-msgstr ""
+msgstr "winding"
 
 msgid "air"
-msgstr ""
+msgstr "air"
 
 msgid "Depth in meters"
 msgstr "Depth in metres"
 
 msgid "Resource"
-msgstr ""
+msgstr "Resource"
 
 msgid "aggregate"
-msgstr ""
+msgstr "aggregate"
 
 msgid "bauxite"
-msgstr ""
+msgstr "bauxite"
 
 msgid "coal"
 msgstr "coal"
 
 msgid "copper"
-msgstr ""
+msgstr "copper"
 
 msgid "dimension_stone"
-msgstr ""
+msgstr "dimension_stone"
 
 msgid "gold"
-msgstr ""
+msgstr "gold"
 
 msgid "ilmenite"
-msgstr ""
+msgstr "ilmenite"
 
 msgid "iron_ore"
-msgstr ""
+msgstr "iron_ore"
 
 msgid "lead"
-msgstr ""
+msgstr "lead"
 
 msgid "limestone"
-msgstr ""
+msgstr "limestone"
 
 msgid "nickel"
-msgstr ""
+msgstr "nickel"
 
 msgid "rutile"
-msgstr ""
+msgstr "rutile"
 
 msgid "salt"
-msgstr ""
+msgstr "salt"
 
 msgid "silver"
-msgstr ""
+msgstr "silver"
 
 msgid "tin"
-msgstr ""
+msgstr "tin"
 
 msgid "zinc"
-msgstr ""
+msgstr "zinc"
 
 msgid "zircon"
-msgstr ""
+msgstr "zircon"
 
 msgid "Visible Headframe"
-msgstr ""
+msgstr "Visible Headframe"
 
 msgid "Disused"
-msgstr ""
+msgstr "Disused"
 
 msgid "Adit"
-msgstr ""
+msgstr "Adit"
 
 msgid "Length in meters"
 msgstr "Length in metres"
@@ -21023,97 +21421,97 @@ msgid "Water Tower"
 msgstr "Water Tower"
 
 msgid "Water Works"
-msgstr ""
+msgstr "Water Works"
 
 msgid "Wastewater Treatment Plant"
-msgstr ""
+msgstr "Wastewater Treatment Plant"
 
 msgid "Watermill"
-msgstr ""
+msgstr "Watermill"
 
 msgid "Fountain"
 msgstr "Fountain"
 
 msgid "Water Well"
-msgstr ""
+msgstr "Water Well"
 
 msgid "Lighthouse"
 msgstr "Lighthouse"
 
 msgid "Street Lamp"
-msgstr ""
+msgstr "Street Lamp"
 
 msgid "Mo-Fr 22:00-05:00"
-msgstr ""
+msgstr "Mo-Fr 22:00-05:00"
 
 msgid "Monitoring Station"
-msgstr ""
+msgstr "Monitoring Station"
 
 msgid "Monitoring:"
-msgstr ""
+msgstr "Monitoring:"
 
 msgid "Water level"
-msgstr ""
+msgstr "Water level"
 
 msgid "Tide Level"
-msgstr ""
+msgstr "Tide Level"
 
 msgid "Groundwater"
-msgstr ""
+msgstr "Groundwater"
 
 msgid "Traffic"
-msgstr ""
+msgstr "Traffic"
 
 msgid "Air Quality"
-msgstr ""
+msgstr "Air Quality"
 
 msgid "Noise"
-msgstr ""
+msgstr "Noise"
 
 msgid "GPS Signals"
-msgstr ""
+msgstr "GPS Signals"
 
 msgid "GLONASS Signals"
-msgstr ""
+msgstr "GLONASS Signals"
 
 msgid "Galileo Signals"
-msgstr ""
+msgstr "Galileo Signals"
 
 msgid "Weather"
-msgstr ""
+msgstr "Weather"
 
 msgid "Radiation"
-msgstr ""
+msgstr "Radiation"
 
 msgid "Seismic Activity"
-msgstr ""
+msgstr "Seismic Activity"
 
 msgid "Recording:"
-msgstr ""
+msgstr "Recording:"
 
 msgid "Automated"
-msgstr ""
+msgstr "Automated"
 
 msgid "Manually"
-msgstr ""
+msgstr "Manually"
 
 msgid "Remote"
-msgstr ""
+msgstr "Remote"
 
 msgid "Display:"
-msgstr ""
+msgstr "Display:"
 
 msgid "Analog"
-msgstr ""
+msgstr "Analogue"
 
 msgid "Digital"
-msgstr ""
+msgstr "Digital"
 
 msgid "Survey Point"
 msgstr "Survey Point"
 
 msgid "Surveillance Camera"
-msgstr ""
+msgstr "Surveillance Camera"
 
 msgid "indoor"
 msgstr "indoor"
@@ -21122,64 +21520,64 @@ msgid "outdoor"
 msgstr "outdoor"
 
 msgid "Zone"
-msgstr ""
+msgstr "Zone"
 
 msgid "parking"
-msgstr ""
+msgstr "parking"
 
 msgid "traffic"
-msgstr ""
+msgstr "traffic"
 
 msgid "shop"
 msgstr "shop"
 
 msgid "bank"
-msgstr ""
+msgstr "bank"
 
 msgid "Camera"
-msgstr ""
+msgstr "Camera"
 
 msgctxt "camera:type"
 msgid "fixed"
-msgstr ""
+msgstr "fixed"
 
 msgctxt "camera:type"
 msgid "panning"
-msgstr ""
+msgstr "panning"
 
 msgctxt "camera:type"
 msgid "dome"
-msgstr ""
+msgstr "dome"
 
 msgid "Mounted on"
-msgstr ""
+msgstr "Mounted on"
 
 msgctxt "camera:mount"
 msgid "wall"
-msgstr ""
+msgstr "wall"
 
 msgctxt "camera:mount"
 msgid "pole"
-msgstr ""
+msgstr "pole"
 
 msgctxt "camera:mount"
 msgid "ceiling"
-msgstr ""
+msgstr "ceiling"
 
 msgid "Direction in degrees"
-msgstr ""
+msgstr "Direction in degrees"
 
 msgid "Inclination in degrees"
-msgstr ""
+msgstr "Inclination in degrees"
 
 msgid "Bridges"
-msgstr ""
+msgstr "Bridges"
 
 msgid "aqueduct"
 msgstr "aqueduct"
 
 msgid "boardwalk"
-msgstr ""
+msgstr "boardwalk"
 
 msgid "cantilever"
 msgstr "cantilever"
@@ -21197,61 +21595,61 @@ msgid "viaduct"
 msgstr "viaduct"
 
 msgid "Structure"
-msgstr ""
+msgstr "Structure"
 
 msgid "arch"
-msgstr ""
+msgstr "arch"
 
 msgid "beam"
-msgstr ""
+msgstr "beam"
 
 msgid "truss"
-msgstr ""
+msgstr "truss"
 
 msgid "floating"
-msgstr ""
+msgstr "floating"
 
 msgid "suspension"
 msgstr "suspension"
 
 msgid "cable-stayed"
-msgstr ""
+msgstr "cable-stayed"
 
 msgid "simple-suspension"
 msgstr ""
 
 msgid "humpback"
-msgstr ""
+msgstr "humpback"
 
 msgid "Movable Bridge"
-msgstr ""
+msgstr "Movable Bridge"
 
 msgid "bascule"
-msgstr ""
+msgstr "bascule"
 
 msgid "drawbridge"
-msgstr ""
+msgstr "drawbridge"
 
 msgid "lift"
-msgstr ""
+msgstr "lift"
 
 msgid "submersible"
-msgstr ""
+msgstr "submersible"
 
 msgid "swing"
 msgstr "swing"
 
 msgid "transporter"
-msgstr ""
+msgstr "transporter"
 
 msgid "Bridge Support"
-msgstr ""
+msgstr "Bridge Support"
 
 msgid "pier"
-msgstr ""
+msgstr "pier"
 
 msgid "abutment"
-msgstr ""
+msgstr "abutment"
 
 msgid "lift_pier"
 msgstr ""
@@ -21260,22 +21658,22 @@ msgid "pivot_pier"
 msgstr ""
 
 msgid "Bridge outline"
-msgstr ""
+msgstr "Bridge outline"
 
 msgid "Power Plant"
-msgstr ""
+msgstr "Power Plant"
 
 msgid "Output forms of energy (optional):"
-msgstr ""
+msgstr "Output forms of energy (optional):"
 
 msgid "Power Generator"
 msgstr "Power Generator"
 
 msgid "Biofuel Power Generator"
-msgstr ""
+msgstr "Biofuel Power Generator"
 
 msgid "Generator Type"
-msgstr ""
+msgstr "Generator Type"
 
 msgid "gas_turbine"
 msgstr ""
@@ -21287,13 +21685,13 @@ msgid "steam_generator"
 msgstr ""
 
 msgid "Biogas Power Generator"
-msgstr ""
+msgstr "Biogas Power Generator"
 
 msgid "Biomass Power Generator"
-msgstr ""
+msgstr "Biomass Power Generator"
 
 msgid "Method"
-msgstr ""
+msgstr "Method"
 
 msgctxt "generator method"
 msgid "anaerobic_digestion"
@@ -21314,135 +21712,135 @@ msgid "anaerobic_digestion / combustion"
 msgstr ""
 
 msgid "pyrolysis"
-msgstr ""
+msgstr "pyrolysis"
 
 msgid "combustion"
-msgstr ""
+msgstr "combustion"
 
 msgid "steam_turbine"
 msgstr ""
 
 msgid "Coal Power Generator"
-msgstr ""
+msgstr "Coal Power Generator"
 
 msgid "Gas Power Generator"
-msgstr ""
+msgstr "Gas Power Generator"
 
 msgid "combined_cycle"
 msgstr ""
 
 msgid "Oil Power Generator"
-msgstr ""
+msgstr "Oil Power Generator"
 
 msgid "Diesel Power Generator"
-msgstr ""
+msgstr "Diesel Power Generator"
 
 msgid "Gasoline Power Generator"
-msgstr ""
+msgstr "Gasoline Power Generator"
 
 msgid "Nuclear Reactor"
-msgstr ""
+msgstr "Nuclear Reactor"
 
 msgctxt "generator method"
 msgid "fission"
-msgstr ""
+msgstr "fission"
 
 msgctxt "generator method"
 msgid "fusion"
-msgstr ""
+msgstr "fusion"
 
 msgid "Boiling Water Reactor 1 (BWR-1)"
-msgstr ""
+msgstr "Boiling Water Reactor 1 (BWR-1)"
 
 msgid "fission"
-msgstr ""
+msgstr "fission"
 
 msgid "Boiling Water Reactor 2 (BWR-2)"
-msgstr ""
+msgstr "Boiling Water Reactor 2 (BWR-2)"
 
 msgid "Boiling Water Reactor 3 (BWR-3)"
-msgstr ""
+msgstr "Boiling Water Reactor 3 (BWR-3)"
 
 msgid "Boiling Water Reactor 4 (BWR-4)"
-msgstr ""
+msgstr "Boiling Water Reactor 4 (BWR-4)"
 
 msgid "Boiling Water Reactor 5 (BWR-5)"
-msgstr ""
+msgstr "Boiling Water Reactor 5 (BWR-5)"
 
 msgid "Boiling Water Reactor 6 (BWR-6)"
-msgstr ""
+msgstr "Boiling Water Reactor 6 (BWR-6)"
 
 msgid "CANada Deuterium Uranium reactor (CANDU)"
-msgstr ""
+msgstr "CANada Deuterium Uranium reactor (CANDU)"
 
 msgid "cold-fusion"
-msgstr ""
+msgstr "cold-fusion"
 
 msgid "fusion"
-msgstr ""
+msgstr "fusion"
 
 msgid "China Pressurized Reactor (CPR-1000)"
-msgstr ""
+msgstr "China Pressurized Reactor (CPR-1000)"
 
 msgid "European Pressurized Reactor (EPR)"
-msgstr ""
+msgstr "European Pressurized Reactor (EPR)"
 
 msgid "Inertial Confinement Fusion (ICF)"
-msgstr ""
+msgstr "Inertial Confinement Fusion (ICF)"
 
 msgid "Pressurized water reactor (PWR)"
-msgstr ""
+msgstr "Pressurized water reactor (PWR)"
 
 msgid "Reactor Bolshoy Moshchnosti Kanalniy 1000 (RBMK-1000)"
-msgstr ""
+msgstr "Reactor Bolshoy Moshchnosti Kanalniy 1000 (RBMK-1000)"
 
 msgid "Reactor Bolshoy Moshchnosti Kanalniy 1500 (RBMK-1500)"
-msgstr ""
+msgstr "Reactor Bolshoy Moshchnosti Kanalniy 1500 (RBMK-1500)"
 
 msgid "stellarator"
-msgstr ""
+msgstr "stellarator"
 
 msgid "tokamak"
-msgstr ""
+msgstr "tokamak"
 
 msgid "Vodo-Vodyanoi Energetichesky Reactor (VVER)"
-msgstr ""
+msgstr "Vodo-Vodyanoi Energetichesky Reactor (VVER)"
 
 msgid "Solar Power Generator"
-msgstr ""
+msgstr "Solar Power Generator"
 
 msgctxt "generator method"
 msgid "photovoltaic"
-msgstr ""
+msgstr "photovoltaic"
 
 msgctxt "generator method"
 msgid "thermal"
-msgstr ""
+msgstr "thermal"
 
 msgid "solar_photovoltaic_panel"
 msgstr ""
 
 msgid "photovoltaic"
-msgstr ""
+msgstr "photovoltaic"
 
 msgid "solar_thermal_collector"
 msgstr ""
 
 msgid "thermal"
-msgstr ""
+msgstr "thermal"
 
 msgid "Waste Power Generator"
-msgstr ""
+msgstr "Waste Power Generator"
 
 msgctxt "generator method"
 msgid "pyrolysis"
-msgstr ""
+msgstr "pyrolysis"
 
 msgid "gasification"
-msgstr ""
+msgstr "gasification"
 
 msgid "Water Turbine"
-msgstr ""
+msgstr "Water Turbine"
 
 msgctxt "generator method"
 msgid "run-of-the-river"
@@ -21460,71 +21858,71 @@ msgid "francis_turbine"
 msgstr ""
 
 msgid "all methods"
-msgstr ""
+msgstr "all methods"
 
 msgid "hydrodynamic_screw"
 msgstr ""
 
 msgid "run-of-the-river"
-msgstr ""
+msgstr "run-of-the-river"
 
 msgid "kaplan_turbine"
 msgstr ""
 
 msgid "run-of-the-river / water-storage"
-msgstr ""
+msgstr "run-of-the-river / water-storage"
 
 msgid "pelton_turbine"
 msgstr ""
 
 msgid "Tidal Water Turbine"
-msgstr ""
+msgstr "Tidal Water Turbine"
 
 msgctxt "generator method"
 msgid "barrage"
-msgstr ""
+msgstr "barrage"
 
 msgctxt "generator method"
 msgid "stream"
-msgstr ""
+msgstr "stream"
 
 msgid "horizontal_axis"
 msgstr ""
 
 msgid "barrage"
-msgstr ""
+msgstr "barrage"
 
 msgid "vertical_axis"
 msgstr ""
 
 msgid "Wave Energy Converter"
-msgstr ""
+msgstr "Wave Energy Converter"
 
 msgid "Osmotic Power Generator"
-msgstr ""
+msgstr "Osmotic Power Generator"
 
 msgid "Geothermal Power Generator"
-msgstr ""
+msgstr "Geothermal Power Generator"
 
 msgid "heat_pump"
 msgstr ""
 
 msgid "Wind Turbine"
-msgstr ""
+msgstr "Wind Turbine"
 
 msgid "Power Substation"
-msgstr ""
+msgstr "Power Substation"
 
 msgid "Type of substation"
-msgstr ""
+msgstr "Type of substation"
 
 msgctxt "power"
 msgid "transmission"
-msgstr ""
+msgstr "transmission"
 
 msgctxt "power"
 msgid "distribution"
-msgstr ""
+msgstr "distribution"
 
 msgctxt "power"
 msgid "minor_distribution"
@@ -21551,35 +21949,35 @@ msgid "industrial"
 msgstr ""
 
 msgid "Power rating (kVA/MVA)"
-msgstr ""
+msgstr "Power rating (kVA/MVA)"
 
 msgid "2700 kVA"
-msgstr ""
+msgstr "2700 kVA"
 
 msgid "12500 kVA"
-msgstr ""
+msgstr "12500 kVA"
 
 msgid "15 MVA"
-msgstr ""
+msgstr "15 MVA"
 
 msgid "50 MVA"
-msgstr ""
+msgstr "50 MVA"
 
 msgid "100 MVA"
-msgstr ""
+msgstr "100 MVA"
 
 msgid "Gas insulated"
-msgstr ""
+msgstr "Gas insulated"
 
 msgid "Power Transformer"
-msgstr ""
+msgstr "Power Transformer"
 
 msgid "Type of transformer"
-msgstr ""
+msgstr "Type of transformer"
 
 msgctxt "power"
 msgid "generator"
-msgstr ""
+msgstr "generator"
 
 msgctxt "power"
 msgid "auto"
@@ -21591,33 +21989,35 @@ msgstr ""
 
 msgctxt "power"
 msgid "yes"
-msgstr ""
+msgstr "yes"
 
 msgid "Phases"
-msgstr ""
+msgstr "Phases"
 
 msgid "Power Switchgear"
-msgstr ""
+msgstr "Power Switchgear"
 
 msgid ""
 "(Please only use this tag if more detailed mapping using busbars and bays is "
 "impossible!)"
 msgstr ""
+"(Please only use this tag if more detailed mapping using busbars and bays is "
+"impossible!)"
 
 msgid "Power Busbar"
-msgstr ""
+msgstr "Power Busbar"
 
 msgid "Power Bay"
-msgstr ""
+msgstr "Power Bay"
 
 msgid "Power Switch"
-msgstr ""
+msgstr "Power Switch"
 
 msgid "Power Converter"
-msgstr ""
+msgstr "Power Converter"
 
 msgid "Type of converter"
-msgstr ""
+msgstr "Type of converter"
 
 msgctxt "power"
 msgid "lcc"
@@ -21632,7 +22032,7 @@ msgid "back-to-back"
 msgstr ""
 
 msgid "Amount of poles"
-msgstr ""
+msgstr "Amount of poles"
 
 msgid "monopole"
 msgstr ""
@@ -21641,13 +22041,13 @@ msgid "bipole"
 msgstr ""
 
 msgid "Power rating (MVA)"
-msgstr ""
+msgstr "Power rating (MVA)"
 
 msgid "Power Compensator"
-msgstr ""
+msgstr "Power Compensator"
 
 msgid "Type of compensator"
-msgstr ""
+msgstr "Type of compensator"
 
 msgctxt "power"
 msgid "shunt_reactor"
@@ -21682,49 +22082,49 @@ msgid "series_capacitor"
 msgstr ""
 
 msgid "Power rating (kvar/Mvar)"
-msgstr ""
+msgstr "Power rating (kvar/Mvar)"
 
 msgid "500 kvar"
-msgstr ""
+msgstr "500 kvar"
 
 msgid "1 Mvar"
-msgstr ""
+msgstr "1 Mvar"
 
 msgid "5 Mvar"
-msgstr ""
+msgstr "5 Mvar"
 
 msgid "Cable Distribution Cabinet"
-msgstr ""
+msgstr "Cable Distribution Cabinet"
 
 msgid "Power Tower"
 msgstr "Power Tower"
 
 msgid "Type of construction"
-msgstr ""
+msgstr "Type of construction"
 
 msgid "lattice"
-msgstr ""
+msgstr "lattice"
 
 msgid "tubular"
-msgstr ""
+msgstr "tubular"
 
 msgid "solid"
-msgstr ""
+msgstr "solid"
 
 msgid "steel"
-msgstr ""
+msgstr "steel"
 
 msgctxt "color"
 msgid "red/white"
-msgstr ""
+msgstr "red/white"
 
 msgctxt "power"
 msgid "Tower type"
-msgstr ""
+msgstr "Tower type"
 
 msgctxt "power"
 msgid "suspension"
-msgstr ""
+msgstr "suspension"
 
 msgctxt "power"
 msgid "anchor"
@@ -21732,7 +22132,7 @@ msgstr ""
 
 msgctxt "power"
 msgid "termination"
-msgstr ""
+msgstr "termination"
 
 msgctxt "power"
 msgid "branch"
@@ -21747,7 +22147,7 @@ msgid "crossing"
 msgstr ""
 
 msgid "Branch tower type"
-msgstr ""
+msgstr "Branch tower type"
 
 msgctxt "power"
 msgid "tap"
@@ -21766,7 +22166,7 @@ msgid "cross"
 msgstr ""
 
 msgid "Tower design"
-msgstr ""
+msgstr "Tower design"
 
 msgctxt "power"
 msgid "one-level"
@@ -21865,25 +22265,25 @@ msgid "monopolar"
 msgstr ""
 
 msgid "Triple tower"
-msgstr ""
+msgstr "Triple tower"
 
 msgid "Incomplete tower"
-msgstr ""
+msgstr "Incomplete tower"
 
 msgid "Location transition"
-msgstr ""
+msgstr "Location transition"
 
 msgid "Pole"
-msgstr ""
+msgstr "Pole"
 
 msgid "Pole with Transformer"
-msgstr ""
+msgstr "Pole with Transformer"
 
 msgid "Pole Attributes:"
-msgstr ""
+msgstr "Pole Attributes:"
 
 msgid "Transformer Attributes:"
-msgstr ""
+msgstr "Transformer Attributes:"
 
 msgid "Power Line"
 msgstr "Power Line"
@@ -21898,7 +22298,7 @@ msgid "minor_line"
 msgstr ""
 
 msgid "Number of conductors/wires per cable"
-msgstr ""
+msgstr "Number of conductors/wires per cable"
 
 msgctxt "power"
 msgid "single"
@@ -21929,22 +22329,22 @@ msgid "eightfold"
 msgstr ""
 
 msgid "Used for data communications"
-msgstr ""
+msgstr "Used for data communications"
 
 msgid "Power Cable"
-msgstr ""
+msgstr "Power Cable"
 
 msgctxt "power cable"
 msgid "underground"
-msgstr ""
+msgstr "underground"
 
 msgctxt "power cable"
 msgid "underwater"
-msgstr ""
+msgstr "underwater"
 
 msgctxt "power cable"
 msgid "overground"
-msgstr ""
+msgstr "overground"
 
 msgid "Historic Places"
 msgstr "Historic Places"
@@ -21972,15 +22372,15 @@ msgstr "Memorial"
 
 msgctxt "memorial"
 msgid "statue"
-msgstr ""
+msgstr "statue"
 
 msgctxt "memorial"
 msgid "bust"
-msgstr ""
+msgstr "bust"
 
 msgctxt "memorial"
 msgid "plaque"
-msgstr ""
+msgstr "plaque"
 
 msgctxt "memorial"
 msgid "stele"
@@ -21988,14 +22388,14 @@ msgstr ""
 
 msgctxt "memorial"
 msgid "stone"
-msgstr ""
+msgstr "stone"
 
 msgctxt "memorial"
 msgid "war_memorial"
 msgstr ""
 
 msgid "Inscription"
-msgstr ""
+msgstr "Inscription"
 
 msgid "Wayside Cross"
 msgstr "Wayside Cross"
@@ -22004,7 +22404,7 @@ msgid "Wayside Shrine"
 msgstr "Wayside Shrine"
 
 msgid "Place of worship"
-msgstr ""
+msgstr "Place of worship"
 
 msgctxt "building"
 msgid "wayside_shrine"
@@ -22017,7 +22417,7 @@ msgid "Shops"
 msgstr "Shops"
 
 msgid "Food"
-msgstr ""
+msgstr "Food"
 
 msgid "Supermarket"
 msgstr "Supermarket"
@@ -22029,43 +22429,43 @@ msgid "Kiosk"
 msgstr "Kiosk"
 
 msgid "Bakery"
-msgstr ""
+msgstr "Bakery"
 
 msgid "Butcher"
 msgstr "Butcher"
 
 msgid "Seafood"
-msgstr ""
+msgstr "Seafood"
 
 msgid "Deli (Fine Food)"
-msgstr ""
+msgstr "Deli (Fine Food)"
 
 msgid "Candy Store"
-msgstr ""
+msgstr "Candy Store"
 
 msgid "Tea"
-msgstr ""
+msgstr "Tea"
 
 msgid "Coffee"
-msgstr ""
+msgstr "Coffee"
 
 msgid "Public Market"
-msgstr ""
+msgstr "Public Market"
 
 msgid "Organic"
 msgstr "Organic"
 
 msgid "Greengrocer"
-msgstr ""
+msgstr "Greengrocer"
 
 msgid "Farm Stand"
-msgstr ""
+msgstr "Farm Stand"
 
 msgid "Organic/Bio"
-msgstr ""
+msgstr "Organic/Bio"
 
 msgid "Fair Trade"
-msgstr ""
+msgstr "Fair Trade"
 
 msgid "Alcohol"
 msgstr "Alcohol"
@@ -22074,13 +22474,10 @@ msgid "Beverages"
 msgstr "Beverages"
 
 msgid "Wine"
-msgstr ""
+msgstr "Wine"
 
 msgid "Boutique"
-msgstr ""
-
-msgid "Shoes"
-msgstr "Shoes"
+msgstr "Boutique"
 
 msgid "Outdoor"
 msgstr "Outdoor"
@@ -22092,13 +22489,13 @@ msgid "Laundry"
 msgstr "Laundry"
 
 msgid "Tailor"
-msgstr ""
+msgstr "Tailor"
 
 msgid "Fabric"
-msgstr ""
+msgstr "Fabric"
 
 msgid "Electronic"
-msgstr ""
+msgstr "Electronic"
 
 msgid "Computer"
 msgstr "Computer"
@@ -22107,10 +22504,10 @@ msgid "Electronics"
 msgstr "Electronics"
 
 msgid "Mobile Phone"
-msgstr ""
+msgstr "Mobile Phone"
 
 msgid "Vacuum Cleaner"
-msgstr ""
+msgstr "Vacuum Cleaner"
 
 msgid "Hifi"
 msgstr "Hifi"
@@ -22119,10 +22516,10 @@ msgid "Video"
 msgstr "Video"
 
 msgid "Video Games"
-msgstr ""
+msgstr "Video Games"
 
 msgid "Music"
-msgstr ""
+msgstr "Music"
 
 msgid "Cash"
 msgstr "Cash"
@@ -22137,70 +22534,70 @@ msgid "Money Exchange"
 msgstr "Money Exchange"
 
 msgid "Pawnbroker"
-msgstr ""
+msgstr "Pawnbroker"
 
 msgid "Home decoration"
-msgstr ""
+msgstr "Home decoration"
 
 msgid "Furniture"
 msgstr "Furniture"
 
 msgid "Kitchen"
-msgstr ""
+msgstr "Kitchen"
 
 msgid "Curtain"
-msgstr ""
+msgstr "Curtain"
 
 msgid "Art"
-msgstr ""
+msgstr "Art"
 
 msgid "Frame"
-msgstr ""
+msgstr "Frame"
 
 msgid "Bed"
-msgstr ""
+msgstr "Bed"
 
 msgid "Interior Decoration"
-msgstr ""
+msgstr "Interior Decoration"
 
 msgid "Antiques"
-msgstr ""
+msgstr "Antiques"
 
 msgid "Printed Material"
-msgstr ""
+msgstr "Printed Material"
 
 msgid "Stationery"
 msgstr "Stationery"
 
 msgid "Copy Shop"
-msgstr ""
+msgstr "Copy Shop"
 
 msgid "Book Store"
 msgstr "Book Store"
 
 msgid "Newspaper Stand"
-msgstr ""
+msgstr "Newspaper Stand"
 
 msgid "Ticket"
-msgstr ""
+msgstr "Ticket"
 
 msgid "Department Store"
-msgstr ""
+msgstr "Department Store"
 
 msgid "Mall"
-msgstr ""
+msgstr "Mall"
 
 msgid "Chemist"
 msgstr "Chemist"
 
 msgid "Hairdresser/Barber"
-msgstr ""
+msgstr "Hairdresser/Barber"
 
 msgid "Beauty"
-msgstr ""
+msgstr "Beauty"
 
 msgid "Tattoo"
-msgstr ""
+msgstr "Tattoo"
 
 msgid "Optician"
 msgstr "Optician"
@@ -22209,16 +22606,16 @@ msgid "Hearing Aids"
 msgstr "Hearing aids"
 
 msgid "Medical Supply"
-msgstr ""
+msgstr "Medical Supply"
 
 msgid "Jewellery"
-msgstr ""
+msgstr "Jewellery"
 
 msgid "Gift/Souvenir"
-msgstr ""
+msgstr "Gift/Souvenir"
 
 msgid "Erotic"
-msgstr ""
+msgstr "Erotic"
 
 msgid "Florist"
 msgstr "Florist"
@@ -22227,43 +22624,43 @@ msgid "Garden Centre"
 msgstr "Garden Centre"
 
 msgid "Do-It-Yourself Store"
-msgstr ""
+msgstr "Do-It-Yourself Store"
 
 msgid "Hardware"
 msgstr "Hardware"
 
 msgid "Paint"
-msgstr ""
+msgstr "Paint"
 
 msgid "Travel Agency"
 msgstr "Travel Agency"
 
 msgid "Musical Instrument"
-msgstr ""
+msgstr "Musical Instrument"
 
 msgid "Toys"
 msgstr "Toys"
 
 msgid "Variety Store"
-msgstr ""
+msgstr "Variety Store"
 
 msgid "Bookmaker"
-msgstr ""
+msgstr "Bookmaker"
 
 msgid "Lottery"
-msgstr ""
+msgstr "Lottery"
 
 msgid "Bag"
-msgstr ""
+msgstr "Bag"
 
 msgid "Pet"
-msgstr ""
+msgstr "Pet"
 
 msgid "Funeral Directors"
-msgstr ""
+msgstr "Funeral Directors"
 
 msgid "Vending Machine"
-msgstr ""
+msgstr "Vending Machine"
 
 msgid "Vending products"
 msgstr "Vending products"
@@ -22326,103 +22723,103 @@ msgid "vouchers"
 msgstr "vouchers"
 
 msgid "Payment Methods"
-msgstr ""
+msgstr "Payment Methods"
 
 msgid "Debit cards"
 msgstr "Debit cards"
 
 msgid "BankAxess"
-msgstr ""
+msgstr "BankAxess"
 
 msgid "Bancomat"
-msgstr ""
+msgstr "Bancomat"
 
 msgid "Girocard"
-msgstr ""
+msgstr "Girocard"
 
 msgid "Laser"
-msgstr ""
+msgstr "Laser"
 
 msgid "Maestro"
-msgstr ""
+msgstr "Maestro"
 
 msgid "Visa Debit"
-msgstr ""
+msgstr "Visa Debit"
 
 msgid "Visa Electron"
-msgstr ""
+msgstr "Visa Electron"
 
 msgid "Credit cards"
 msgstr "Credit cards"
 
 msgid "American Express"
-msgstr ""
+msgstr "American Express"
 
 msgid "Diners Club"
-msgstr ""
+msgstr "Diners Club"
 
 msgid "Discover Card"
-msgstr ""
+msgstr "Discover Card"
 
 msgid "JCB"
-msgstr ""
+msgstr "JCB"
 
 msgid "Mastercard"
-msgstr ""
+msgstr "Mastercard"
 
 msgid "Visa"
-msgstr ""
+msgstr "Visa"
 
 msgid "Electronic purses and Charge cards"
 msgstr "Electronic purses and Charge cards"
 
 msgid "Avant (fi)"
-msgstr ""
+msgstr "Avant (fi)"
 
 msgid "Cash (ch)"
-msgstr ""
+msgstr "Cash (ch)"
 
 msgid "Chipknip (nl)"
-msgstr ""
+msgstr "Chipknip (nl)"
 
 msgid "Geldkarte (de)"
-msgstr ""
+msgstr "Geldkarte (de)"
 
 msgid "Mep (pt)"
-msgstr ""
+msgstr "Mep (pt)"
 
 msgid "Minicash (lu)"
-msgstr ""
+msgstr "Minicash (lu)"
 
 msgid "Minipay (it)"
-msgstr ""
+msgstr "Minipay (it)"
 
 msgid "Mondero (ar)"
-msgstr ""
+msgstr "Mondero (ar)"
 
 msgid "Mondero 4b (es)"
-msgstr ""
+msgstr "Mondero 4b (es)"
 
 msgid "Moneo (fr)"
-msgstr ""
+msgstr "Moneo (fr)"
 
 msgid "Proton (be)"
-msgstr ""
+msgstr "Proton (be)"
 
 msgid "Quick (au)"
-msgstr ""
+msgstr "Quick (au)"
 
 msgid "Cryptocurrencies"
-msgstr ""
+msgstr "Cryptocurrencies"
 
 msgid "Bitcoin"
-msgstr ""
+msgstr "Bitcoin"
 
 msgid "Dogecoin"
-msgstr ""
+msgstr "Dogecoin"
 
 msgid "Litecoin"
-msgstr ""
+msgstr "Litecoin"
 
 msgid "Geography"
 msgstr "Geography"
@@ -22434,16 +22831,16 @@ msgid "Administrative"
 msgstr "Administrative"
 
 msgid "Administrative level"
-msgstr ""
+msgstr "Administrative level"
 
 msgid "Maritime"
-msgstr ""
+msgstr "Maritime"
 
 msgid "Political"
 msgstr "Political"
 
 msgid "Division"
-msgstr ""
+msgstr "Division"
 
 msgid "canton"
 msgstr ""
@@ -22452,25 +22849,25 @@ msgid "linguistic_community"
 msgstr ""
 
 msgid "ward"
-msgstr ""
+msgstr "ward"
 
 msgid "Postal Code"
-msgstr ""
+msgstr "Postal Code"
 
 msgid "National Park"
-msgstr ""
+msgstr "National Park"
 
 msgid "Protected Area"
-msgstr ""
+msgstr "Protected Area"
 
 msgid "Protect Class"
-msgstr ""
+msgstr "Protect Class"
 
 msgid "Title or type of protection"
-msgstr ""
+msgstr "Title or type of protection"
 
 msgid "Border type"
-msgstr ""
+msgstr "Border type"
 
 msgid "baseline"
 msgstr ""
@@ -22495,7 +22892,7 @@ msgstr "Country"
 
 msgctxt "place"
 msgid "State"
-msgstr ""
+msgstr "State"
 
 msgid "Region"
 msgstr "Region"
@@ -22516,22 +22913,22 @@ msgid "Hamlet"
 msgstr "Hamlet"
 
 msgid "Isolated Dwelling"
-msgstr ""
+msgstr "Isolated Dwelling"
 
 msgid "Suburb"
 msgstr "Suburb"
 
 msgid "Neighbourhood"
-msgstr ""
+msgstr "Neighbourhood"
 
 msgid "Farm"
-msgstr ""
+msgstr "Farm"
 
 msgid "A farm within a bigger settlement"
-msgstr ""
+msgstr "A farm within a bigger settlement"
 
 msgid "(please use isolated_dwelling for an isolated farm)"
-msgstr ""
+msgstr "(please use isolated_dwelling for an isolated farm)"
 
 msgid "Locality"
 msgstr "Locality"
@@ -22540,13 +22937,13 @@ msgid "Peak"
 msgstr "Peak"
 
 msgid "The top (summit) of a mountain or hill."
-msgstr ""
+msgstr "The top (summit) of a mountain or hill."
 
 msgid "Saddle"
-msgstr ""
+msgstr "Saddle"
 
 msgid "A saddle point between mountains or hills."
-msgstr ""
+msgstr "A saddle point between mountains or hills."
 
 msgid "Glacier"
 msgstr "Glacier"
@@ -22562,16 +22959,16 @@ msgid "Volcano"
 msgstr "Volcano"
 
 msgid "A volcano, either dormant, extinct or active."
-msgstr ""
+msgstr "A volcano, either dormant, extinct or active."
 
 msgid "Current Status"
-msgstr ""
+msgstr "Current Status"
 
 msgid "dormant"
-msgstr ""
+msgstr "dormant"
 
 msgid "extinct"
-msgstr ""
+msgstr "extinct"
 
 msgid "stratovolcano"
 msgstr ""
@@ -22583,22 +22980,22 @@ msgid "scoria"
 msgstr ""
 
 msgid "Ridge"
-msgstr ""
+msgstr "Ridge"
 
 msgid "A mountain or hill ridge."
-msgstr ""
+msgstr "A mountain or hill ridge."
 
 msgid "Valley"
-msgstr ""
+msgstr "Valley"
 
 msgid "A low area between hills."
-msgstr ""
+msgstr "A low area between hills."
 
 msgid "Cave Entrance"
 msgstr "Cave Entrance"
 
 msgid "The entrance to a cave."
-msgstr ""
+msgstr "The entrance to a cave."
 
 msgid "Island"
 msgstr "Island"
@@ -22607,34 +23004,34 @@ msgid "Islet"
 msgstr "Islet"
 
 msgid "Nature"
-msgstr ""
+msgstr "Nature"
 
 msgid "Tree"
 msgstr "Tree"
 
 msgid "A single tree."
-msgstr ""
+msgstr "A single tree."
 
 msgid "Botanical Name"
 msgstr "Botanical Name"
 
 msgid "Tree Row"
-msgstr ""
+msgstr "Tree Row"
 
 msgid "A line of trees."
-msgstr ""
+msgstr "A line of trees."
 
 msgid "Wood"
 msgstr "Wood"
 
 msgid "Woodland where timber production does not dominate use."
-msgstr ""
+msgstr "Woodland where timber production does not dominate use."
 
 msgid "Forest"
 msgstr "Forest"
 
 msgid "Cutline"
-msgstr ""
+msgstr "Cutline"
 
 msgctxt "cutline"
 msgid "border"
@@ -22665,12 +23062,14 @@ msgid "section"
 msgstr ""
 
 msgid "Grassland"
-msgstr ""
+msgstr "Grassland"
 
 msgid ""
 "Where vegetation is dominated by grasses (Poaceae) and other herbaceous (non-"
 "woody) plants. Excludes cultivated areas and wetlands."
 msgstr ""
+"Where vegetation is dominated by grasses (Poaceae) and other herbaceous (non-"
+"woody) plants. Excludes cultivated areas and wetlands."
 
 msgid "pampas"
 msgstr ""
@@ -22697,7 +23096,7 @@ msgid "Scree"
 msgstr "Scree"
 
 msgid "An accumulation of loose rocks."
-msgstr ""
+msgstr "An accumulation of loose rocks."
 
 msgid "Fell"
 msgstr "Fell"
@@ -22706,6 +23105,8 @@ msgid ""
 "Bare upper lying uncultivated land principally covered with grass and often "
 "grazed."
 msgstr ""
+"Bare upper lying uncultivated land principally covered with grass and often "
+"grazed."
 
 msgid "Scrub"
 msgstr "Scrub"
@@ -22713,6 +23114,7 @@ msgstr "Scrub"
 msgid ""
 "Bare lower lying uncultivated land with bushes but little or no tree cover."
 msgstr ""
+"Bare lower lying uncultivated land with bushes but little or no tree cover."
 
 msgid "Heath"
 msgstr "Heath"
@@ -22722,39 +23124,48 @@ msgid ""
 "free-draining infertile, acidic soils, and is characterised by open, low-"
 "growing woody vegetation."
 msgstr ""
+"Bare lower lying uncultivated land with a shrubland habitat found mainly on "
+"free-draining infertile, acidic soils, and is characterised by open, low-"
+"growing woody vegetation."
 
 msgid "Sand"
-msgstr ""
+msgstr "Sand"
 
 msgid "Large area covered with sand."
-msgstr ""
+msgstr "Large area covered with sand."
 
 msgid "Bare Rock"
-msgstr ""
+msgstr "Bare Rock"
 
 msgid ""
 "For areas of solid visible rock that is sparsely vegetated or not vegetated "
 "at all."
 msgstr ""
+"For areas of solid visible rock that is sparsely vegetated or not vegetated "
+"at all."
 
 msgid "Rock"
-msgstr ""
+msgstr "Rock"
 
 msgid ""
 "A notable rock or group of rocks, with at least one of them firmly attached "
 "to the underlying bedrock."
 msgstr ""
+"A notable rock or group of rocks, with at least one of them firmly attached "
+"to the underlying bedrock."
 
 msgid "Tourism attraction"
-msgstr ""
+msgstr "Tourism attraction"
 
 msgid "Stone"
-msgstr ""
+msgstr "Stone"
 
 msgid ""
 "A single notable free-standing rock, which may differ from the composition "
 "of the terrain it lies in."
 msgstr ""
+"A single notable free-standing rock, which may differ from the composition "
+"of the terrain it lies in."
 
 msgid "Land use"
 msgstr "Land use"
@@ -22769,16 +23180,16 @@ msgid "Meadow"
 msgstr "Meadow"
 
 msgid "Orchard"
-msgstr ""
+msgstr "Orchard"
 
 msgid "Vineyard"
 msgstr "Vineyard"
 
 msgid "Greenhouse Horticulture"
-msgstr ""
+msgstr "Greenhouse Horticulture"
 
 msgid "Plant Nursery"
-msgstr ""
+msgstr "Plant Nursery"
 
 msgid "Allotments"
 msgstr "Allotments"
@@ -22802,7 +23213,7 @@ msgid "Recreation Ground"
 msgstr "Recreation Ground"
 
 msgid "Residential Area"
-msgstr ""
+msgstr "Residential Area"
 
 msgid "Graveyard"
 msgstr "Graveyard"
@@ -22811,7 +23222,7 @@ msgid "Cemetery"
 msgstr "Cemetery"
 
 msgid "Religious"
-msgstr ""
+msgstr "Religious"
 
 msgid "Retail"
 msgstr "Retail"
@@ -22823,16 +23234,16 @@ msgid "Industrial"
 msgstr "Industrial"
 
 msgid "Garages"
-msgstr ""
+msgstr "Garages"
 
 msgid "Railway Land"
-msgstr ""
+msgstr "Railway Land"
 
 msgid "Military"
 msgstr "Military"
 
 msgid "Construction Area"
-msgstr ""
+msgstr "Construction Area"
 
 msgid "Brownfield"
 msgstr "Brownfield"
@@ -22847,31 +23258,31 @@ msgid "Quarry"
 msgstr "Quarry"
 
 msgid "Annotation"
-msgstr ""
+msgstr "Annotation"
 
 msgid "Alternative name"
-msgstr ""
+msgstr "Alternative name"
 
 msgid "Historical name"
-msgstr ""
+msgstr "Historical name"
 
 msgid "Local name"
-msgstr ""
+msgstr "Local name"
 
 msgid "Regional name"
-msgstr ""
+msgstr "Regional name"
 
 msgid "National name"
-msgstr ""
+msgstr "National name"
 
 msgid "International name"
-msgstr ""
+msgstr "International name"
 
 msgid "Official name"
-msgstr ""
+msgstr "Official name"
 
 msgid "Common name abbreviation"
-msgstr ""
+msgstr "Common name abbreviation"
 
 msgid "House number"
 msgstr "House number"
@@ -22880,7 +23291,7 @@ msgid "Street name"
 msgstr "Street name"
 
 msgid "Place name"
-msgstr ""
+msgstr "Place name"
 
 msgid "City name"
 msgstr "City name"
@@ -22892,17 +23303,17 @@ msgid "House name"
 msgstr "House name"
 
 msgid "Subdistrict"
-msgstr ""
+msgstr "Subdistrict"
 
 msgid "District"
-msgstr ""
+msgstr "District"
 
 msgid "Province"
-msgstr ""
+msgstr "Province"
 
 msgctxt "addr:"
 msgid "State"
-msgstr ""
+msgstr "State"
 
 msgid "AL"
 msgstr ""
@@ -23082,7 +23493,7 @@ msgid "alphabetic"
 msgstr "alphabetic"
 
 msgid "Accuracy"
-msgstr ""
+msgstr "Accuracy"
 
 msgid "actual"
 msgstr ""
@@ -23094,50 +23505,54 @@ msgid "potential"
 msgstr ""
 
 msgid "Contact (Common Schema)"
-msgstr ""
-
-msgid "Fax Number"
-msgstr "Fax number"
+msgstr "Contact (Common Schema)"
 
 msgid "Email Address"
 msgstr "Email address"
 
+msgid "Fax Number"
+msgstr "Fax number"
+
 msgid "Image"
 msgstr "Image"
 
 msgid "Contact (Schema with ''contact:*'' Prefix)"
-msgstr ""
+msgstr "Contact (Schema with ''contact:*'' Prefix)"
 
 msgctxt "description=*"
 msgid "A short text with additional information."
-msgstr ""
+msgstr "A short text with additional information."
 
 msgctxt "description=*"
 msgid ""
 "It might be viewable to the end user (perhaps using a search system or a map "
 "with pop-ups)."
 msgstr ""
+"It might be viewable to the end user (perhaps using a search system or a map "
+"with pop-ups)."
 
 msgctxt "note=*, fixme=*, description=*"
 msgid "Similar but different tags:"
-msgstr ""
+msgstr "Similar but different tags:"
 
 msgctxt "the tag note=*"
 msgid "Note"
-msgstr ""
+msgstr "Note"
 
 msgctxt "note=*"
 msgid "An important hint for other mappers (not for the end user)."
-msgstr ""
+msgstr "An important hint for other mappers (not for the end user)."
 
 msgid "Fixme"
-msgstr ""
+msgstr "Fixme"
 
 msgctxt "fixme=*"
 msgid ""
 "A hint for other mappers (not for the end user), that an object needs an "
 "improvement."
 msgstr ""
+"A hint for other mappers (not for the end user), that an object needs an "
+"improvement."
 
 msgid "outer segment"
 msgstr "outer segment"
@@ -23146,16 +23561,16 @@ msgid "inner segment"
 msgstr "inner segment"
 
 msgid "Boundary"
-msgstr ""
+msgstr "Boundary"
 
 msgid "Boundary type"
-msgstr ""
+msgstr "Boundary type"
 
 msgid "administrative"
 msgstr ""
 
 msgid "maritime"
-msgstr ""
+msgstr "maritime"
 
 msgid "national_park"
 msgstr ""
@@ -23170,22 +23585,22 @@ msgid "protected_area"
 msgstr ""
 
 msgid "Sub area"
-msgstr ""
+msgstr "Sub area"
 
 msgid "Administration centre"
-msgstr ""
+msgstr "Administration centre"
 
 msgid "Label point"
-msgstr ""
+msgstr "Label point"
 
 msgid "Site"
-msgstr ""
+msgstr "Site"
 
 msgid "Site name"
-msgstr ""
+msgstr "Site name"
 
 msgid "where to place the label"
-msgstr ""
+msgstr "where to place the label"
 
 msgid "perimeter of the site"
 msgstr "perimeter of the site"
@@ -23194,10 +23609,10 @@ msgid "entrances to the site, on the perimeter"
 msgstr "entrances to the site, on the perimeter"
 
 msgid "members of site"
-msgstr ""
+msgstr "members of site"
 
 msgid "Turn Restriction"
-msgstr ""
+msgstr "Turn Restriction"
 
 msgid "Restriction"
 msgstr "Restriction"
@@ -23227,16 +23642,16 @@ msgid "from way"
 msgstr "from way"
 
 msgid "via node or ways"
-msgstr ""
+msgstr "via node or ways"
 
 msgid "to way"
 msgstr "to way"
 
 msgid "Enforcement"
-msgstr ""
+msgstr "Enforcement"
 
 msgid "Type of enforcement"
-msgstr ""
+msgstr "Type of enforcement"
 
 msgid "maxheight"
 msgstr ""
@@ -23257,28 +23672,28 @@ msgid "Max. height (meters, only if enforcement=maxheight)"
 msgstr "Max. height (metres, only if enforcement=maxheight)"
 
 msgid "Max. weight (tonnes, only if enforcement=maxweight)"
-msgstr ""
+msgstr "Max. weight (tonnes, only if enforcement=maxweight)"
 
 msgid "Max. speed (km/h, only if enforcement=maxspeed)"
-msgstr ""
+msgstr "Max. speed (km/h, only if enforcement=maxspeed)"
 
 msgid "location of enforcement device"
-msgstr ""
+msgstr "location of enforcement device"
 
 msgid "node on way where enforcement starts"
-msgstr ""
+msgstr "node on way where enforcement starts"
 
 msgid "where enforcement ends"
-msgstr ""
+msgstr "where enforcement ends"
 
 msgid "traffic light or barrier that stops you"
-msgstr ""
+msgstr "traffic light or barrier that stops you"
 
 msgid "Routes"
-msgstr ""
+msgstr "Routes"
 
 msgid "Bicycle Route"
-msgstr ""
+msgstr "Bicycle Route"
 
 msgid "icn"
 msgstr ""
@@ -23293,10 +23708,10 @@ msgid "lcn"
 msgstr ""
 
 msgid "Mountain Biking Route"
-msgstr ""
+msgstr "Mountain Biking Route"
 
 msgid "Hiking Route"
-msgstr ""
+msgstr "Hiking Route"
 
 msgid "iwn"
 msgstr ""
@@ -23317,7 +23732,7 @@ msgid "natural"
 msgstr "natural"
 
 msgid "Piste Route"
-msgstr ""
+msgstr "Piste Route"
 
 msgid "link segment"
 msgstr ""
@@ -23332,43 +23747,43 @@ msgid "entry points"
 msgstr ""
 
 msgid "Ski Route"
-msgstr ""
+msgstr "Ski Route"
 
 msgid "alpine"
-msgstr ""
+msgstr "alpine"
 
 msgid "Detour Route"
-msgstr ""
+msgstr "Detour Route"
 
 msgid "Destination"
-msgstr ""
+msgstr "Destination"
 
 msgid "Ref of the way this is a detour to"
-msgstr ""
+msgstr "Ref of the way this is a detour to"
 
 msgid "fork node for alternative routes"
-msgstr ""
+msgstr "fork node for alternative routes"
 
 msgid "Power Route"
-msgstr ""
+msgstr "Power Route"
 
 msgid "Railway Route"
-msgstr ""
+msgstr "Railway Route"
 
 msgid "Road Route"
-msgstr ""
+msgstr "Road Route"
 
 msgid "Route Network"
-msgstr ""
+msgstr "Route Network"
 
 msgid "member"
 msgstr ""
 
 msgid "Associated Street"
-msgstr ""
+msgstr "Associated Street"
 
 msgid "house"
-msgstr ""
+msgstr "house"
 
 msgid "Street"
 msgstr "Street"
@@ -23389,37 +23804,37 @@ msgid "Destination Sign"
 msgstr ""
 
 msgid "Destination written on sign (w/o distance)"
-msgstr ""
+msgstr "Destination written on sign (w/o distance)"
 
 msgid "Time (hh:mm, for trekking)"
-msgstr ""
+msgstr "Time (hh:mm, for trekking)"
 
 msgid "Colour of background"
-msgstr ""
+msgstr "Colour of background"
 
 msgid "Colour of text"
-msgstr ""
+msgstr "Colour of text"
 
 msgid "Colour of border/arrow"
 msgstr ""
 
 msgid "last way before junction"
-msgstr ""
+msgstr "last way before junction"
 
 msgid "node of the intersection"
-msgstr ""
+msgstr "node of the intersection"
 
 msgid "first way after junction"
-msgstr ""
+msgstr "first way after junction"
 
 msgid "position of sign"
 msgstr ""
 
 msgid "Waterway"
-msgstr ""
+msgstr "Waterway"
 
 msgid "Subtype of waterway (largest one of members)"
-msgstr ""
+msgstr "Subtype of waterway (largest one of members)"
 
 msgid "stream"
 msgstr "stream"
@@ -23521,9 +23936,12 @@ msgid "incomplete object: only {0}"
 msgstr ""
 
 msgid "incomplete object: only {0} and {1}"
-msgstr ""
+msgstr "incomplete object: only {0} and {1}"
 
 msgid "{0} together with addr:*"
+msgstr "{0} together with addr:*"
+
+msgid "{0} together with {1} and conflicting values"
 msgstr ""
 
 msgid "{0} on suspicious object"
@@ -23542,12 +23960,24 @@ msgid "sport without physical feature"
 msgstr "sport without physical feature"
 
 msgid "{0} should be on the node where {1} and {2} intersect"
-msgstr ""
+msgstr "{0} should be on the node where {1} and {2} intersect"
 
 msgid "alternative name without {0}"
-msgstr ""
+msgstr "alternative name without {0}"
 
 msgid "incomplete usage of {0} on a way without {1}"
+msgstr "incomplete usage of {0} on a way without {1}"
+
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
 msgstr ""
 
 msgid "{0}={1} is deprecated"
@@ -23579,19 +24009,21 @@ msgstr "{0}={1} is deprecated. Please use a multipolygon instead."
 msgid ""
 "{0} is deprecated. Please specify interval by using opening_hours syntax"
 msgstr ""
+"{0} is deprecated. Please specify interval by using opening_hours syntax"
 
 msgid ""
 "{0} is deprecated. Please delete this object and use a private layer instead"
 msgstr ""
+"{0} is deprecated. Please delete this object and use a private layer instead"
 
 msgid "{0}={1} is unspecific. Please replace ''{1}'' by a specific value."
-msgstr ""
+msgstr "{0}={1} is unspecific. Please replace ''{1}'' by a specific value."
 
 msgid "{0} should be replaced with {1}"
-msgstr ""
+msgstr "{0} should be replaced with {1}"
 
 msgid "{0} = {1}; remove {0}"
-msgstr ""
+msgstr "{0} = {1}; remove {0}"
 
 msgid ""
 "{0}={1} is unspecific. Please replace ''{1}'' by ''left'', ''right'' or "
@@ -23607,27 +24039,31 @@ msgstr ""
 msgid ""
 "{0} is not recommended. Use the Reverse Ways function from the Tools menu."
 msgstr ""
+"{0} is not recommended. Use the Reverse Ways function from the Tools menu."
 
 msgid "key with uncommon character"
-msgstr ""
+msgstr "key with uncommon character"
 
 msgid "uncommon short key"
-msgstr ""
+msgstr "uncommon short key"
+
+msgid "{0} is inaccurate"
+msgstr "{0} is inaccurate"
 
 msgid "{0} on a node. Should be used on a way."
-msgstr ""
+msgstr "{0} on a node. Should be used on a way."
 
 msgid "{0} on a node. Should be drawn as an area."
-msgstr ""
+msgstr "{0} on a node. Should be drawn as an area."
 
 msgid "{0}=* on a node. Should be used in a relation"
-msgstr ""
+msgstr "{0}=* on a node. Should be used in a relation"
 
 msgid "{0} on a way. Should be used on a node."
-msgstr ""
+msgstr "{0} on a way. Should be used on a node."
 
 msgid "{0} on a way. Should be used in a relation"
-msgstr ""
+msgstr "{0} on a way. Should be used in a relation"
 
 msgid "{0} on a node"
 msgstr "{0} on a node"
@@ -23651,10 +24087,10 @@ msgid "Overlapping Identical Landuses"
 msgstr "Overlapping identical landuses"
 
 msgid "{0} must be connected to a way"
-msgstr ""
+msgstr "{0} must be connected to a way"
 
 msgid "node connects waterway and bridge"
-msgstr ""
+msgstr "node connects waterway and bridge"
 
 msgid "abbreviated street name"
 msgstr "abbreviated street name"
@@ -23686,7 +24122,7 @@ msgid "{0} with multiple values"
 msgstr "{0} with multiple values"
 
 msgid "empty value in semicolon-separated ''{0}''"
-msgstr ""
+msgstr "empty value in semicolon-separated ''{0}''"
 
 msgid "numerical key"
 msgstr "numerical key"
@@ -23703,11 +24139,20 @@ msgstr "level should be numbers with optional .5 increments"
 msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
-"{0}: metrs is default; period is separator; if units, put space then unit"
+"{0}: metres is default; period is separator; if units, put space then unit"
+
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
 
 msgid "unusual {0} format"
 msgstr "unusual {0} format"
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr "voltage should be in volts with no units/delimiter/spaces"
 
@@ -23724,7 +24169,7 @@ msgid "{0} must be a numeric value"
 msgstr "{0} must be a numeric value"
 
 msgid "{0} must be a positive integer number"
-msgstr ""
+msgstr "{0} must be a positive integer number"
 
 msgid "relation without type"
 msgstr "relation without type"
@@ -23777,7 +24222,7 @@ msgid "Less obtrusive node symbols at low zoom"
 msgstr "Less obtrusive node symbols at low zoom"
 
 msgid "Display street labels (at high zoom)"
-msgstr ""
+msgstr "Display street labels (at high zoom)"
 
 msgid "Use alternative turn restriction icon set"
 msgstr ""
@@ -23819,18 +24264,23 @@ msgid ""
 "No command has been found. Would you like to download and install default "
 "commands now?"
 msgstr ""
+"No command has been found. Would you like to download and install default "
+"commands now?"
 
 msgid "No command found"
-msgstr ""
+msgstr "No command found"
 
 msgid "Default commands have been successfully installed"
-msgstr ""
+msgstr "Default commands have been successfully installed"
 
 msgid ""
 "Failed to download and install default commands.\n"
 "\n"
 "Error: {0}"
 msgstr ""
+"Failed to download and install default commands.\n"
+"\n"
+"Error: {0}"
 
 msgid "Processing..."
 msgstr "Processing..."
@@ -24084,6 +24534,9 @@ msgstr "Add fixed points on click"
 msgid "Add fixed points on spacebar"
 msgstr "Add fixed points on spacebar"
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr "Draw closed polygons only"
 
@@ -24144,9 +24597,6 @@ msgstr "Draw the way by mouse"
 msgid "min distance={0} px ({1} m)"
 msgstr "min distance={0} px ({1} m)"
 
-msgid "Convert way to FastDraw line"
-msgstr "Convert way to FastDraw line"
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr "Eps={0}, {1} points, {2} p/km"
 
@@ -24386,7 +24836,7 @@ msgid "Could not read NanoLog file:"
 msgstr "Could not read NanoLog file:"
 
 msgid "OSM Recommendation"
-msgstr ""
+msgstr "OSM Recommendation"
 
 msgid "Recommend categories to your newly created instances."
 msgstr ""
@@ -24404,7 +24854,7 @@ msgid "Add Recommendation"
 msgstr ""
 
 msgid "Add a recommended key/value pair to your object"
-msgstr ""
+msgstr "Add a recommended key/value pair to your object"
 
 msgid "Train a Model"
 msgstr ""
@@ -24972,50 +25422,61 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
-"The colour threshold defines how far the colour can be of the original "
-"colour to be selected (Default: {0})."
 
-msgid "Color Threshold"
-msgstr "Colour Threshold"
+msgid "Custom - low resolution images"
+msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
+"The colour threshold defines how much a colour may differ from the selected "
+"colour. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
+
+msgid "Color Threshold"
+msgstr "Colour Threshold"
 
-msgid "Merge nodes with neighbors"
+msgid "Use HSV based algorithm"
 msgstr ""
 
-msgid "merge nodes"
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
+"Use hue and saturation instead of RGB distinction to select matching colours."
 
 msgid "How often thinning operation should be applied (Default {0})."
 msgstr ""
@@ -25023,10 +25484,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr "show address dialogue"
+
+msgid "Show Address Dialog after mapping an area"
+msgstr "Show Address Dialogue after mapping an area"
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -25675,6 +26148,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr "Blank Layer"
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr "WMS layer ({0}), {1} tile(s) loaded"
 
@@ -26203,55 +26679,55 @@ msgid "Condition isn''t finished at </condition> tag"
 msgstr ""
 
 msgid "Closing tag element that was not open"
-msgstr ""
+msgstr "Closing tag element that was not open"
 
 msgid "Invalid closing xml tag </{0}> in state {1}"
-msgstr ""
+msgstr "Invalid closing xml tag </{0}> in state {1}"
 
 msgid "Some tags have not been closed; now in state {0}"
-msgstr ""
+msgstr "Some tags have not been closed; now in state {0}"
 
 msgid "Key element without attribute k"
-msgstr ""
+msgstr "Key element without attribute k"
 
 msgid "Condition is already finished at <{0}>"
-msgstr ""
+msgstr "Condition is already finished at <{0}>"
 
 msgid "Unknown tag for condition: {0}"
-msgstr ""
+msgstr "Unknown tag for condition: {0}"
 
 msgid "Element must not have children: {0}"
-msgstr ""
+msgstr "Element must not have children: {0}"
 
 msgid "Condition is already finished at </{0}>"
-msgstr ""
+msgstr "Condition is already finished at </{0}>"
 
 msgid "<and> needs at least one child"
-msgstr ""
+msgstr "<and> needs at least one child"
 
 msgid "<or> needs at least one child"
-msgstr ""
+msgstr "<or> needs at least one child"
 
 msgid "<not> needs at least one child"
-msgstr ""
+msgstr "<not> needs at least one child"
 
 msgid "Wrong closing tag {0} (</{1}> expected)"
-msgstr ""
+msgstr "Wrong closing tag {0} (</{1}> expected)"
 
 msgid "Condition {0} not yet finished"
-msgstr ""
+msgstr "Condition {0} not yet finished"
 
 msgid "Group not yet evaluated"
-msgstr ""
+msgstr "Group not yet evaluated"
 
 msgid "Collection must contain at least one condition"
-msgstr ""
+msgstr "Collection must contain at least one condition"
 
 msgid "No ruleset has been selected!"
-msgstr ""
+msgstr "No ruleset has been selected!"
 
 msgid "No ruleset"
-msgstr ""
+msgstr "No ruleset"
 
 msgid ""
 "Syntax exception in access ruleset:\n"
@@ -26262,88 +26738,94 @@ msgid ""
 "File not found:\n"
 "{0}"
 msgstr ""
+"File not found:\n"
+"{0}"
 
 msgid ""
 "Problem when accessing a file:\n"
 "{0}"
 msgstr ""
+"Problem when accessing a file:\n"
+"{0}"
 
 msgid "File not found:\n"
-msgstr ""
+msgstr "File not found:\n"
 
 msgid "Couldn''t find built-in ruleset {0}"
-msgstr ""
+msgstr "Couldn''t find built-in ruleset {0}"
 
 msgid "height (m)"
-msgstr ""
+msgstr "height (m)"
 
 msgid "width (m)"
-msgstr ""
+msgstr "width (m)"
 
 msgid "length (m)"
-msgstr ""
+msgstr "length (m)"
 
 msgid "speed (km/h)"
-msgstr ""
+msgstr "speed (km/h)"
 
 msgid "weight (t)"
-msgstr ""
+msgstr "weight (t)"
 
 msgid "axleload (t)"
 msgstr ""
 
 msgid "Bookmark name"
-msgstr ""
+msgstr "Bookmark name"
 
 msgid "Bookmark name already exists!"
-msgstr ""
+msgstr "Bookmark name already exists!"
 
 msgid "Bookmark name must not contain ''{0}''!"
-msgstr ""
+msgstr "Bookmark name must not contain ''{0}''!"
 
 msgid "Access class"
-msgstr ""
+msgstr "Access class"
 
 msgid "Access class must not contain ''{0}''!"
-msgstr ""
+msgstr "Access class must not contain ''{0}''!"
 
 msgid "Access types"
-msgstr ""
+msgstr "Access types"
 
 msgid "Vehicle properties"
-msgstr ""
+msgstr "Vehicle properties"
 
 msgid "Road requirements"
-msgstr ""
+msgstr "Road requirements"
 
 msgid "Max. incline up (%, pos.)"
-msgstr ""
+msgstr "Max. incline up (%, pos.)"
 
 msgid "Maximum incline the vehicle can go up"
-msgstr ""
+msgstr "Maximum incline the vehicle can go up"
 
 msgid "Max. incline down (%, pos.)"
-msgstr ""
+msgstr "Max. incline down (%, pos.)"
 
 msgid "Maximum incline the vehicle can go down"
-msgstr ""
+msgstr "Maximum incline the vehicle can go down"
 
 msgid "Surface blacklist"
-msgstr ""
+msgstr "Surface blacklist"
 
 msgid ""
 "List of surfaces the vehicle cannot use, values are separated by semicolons "
 "(;)"
 msgstr ""
+"List of surfaces the vehicle cannot use; values are separated by semicolons "
+"(;)"
 
 msgid "max. tracktype grade"
-msgstr ""
+msgstr "max. tracktype grade"
 
 msgid "Worst tracktype (1-5) the vehicle can still use, 0 for none"
 msgstr ""
 
 msgid "Change bookmark"
-msgstr ""
+msgstr "Change bookmark"
 
 msgid "Edit access parameters"
 msgstr "Edit access parameters"
@@ -26355,16 +26837,16 @@ msgid "Open the dialog for graph view configuration."
 msgstr "Open the dialogue for graph view configuration."
 
 msgid "default"
-msgstr ""
+msgstr "default"
 
 msgid "end nodes"
-msgstr ""
+msgstr "end nodes"
 
 msgid "incline"
-msgstr ""
+msgstr "incline"
 
 msgid "Ruleset:"
-msgstr ""
+msgstr "Ruleset:"
 
 msgid "Parameters:"
 msgstr "Parameters:"
@@ -26373,37 +26855,37 @@ msgid "Coloring:"
 msgstr "Colouring:"
 
 msgid "Create/update graph"
-msgstr ""
+msgstr "Create/update graph"
 
 msgid "Graphview"
-msgstr ""
+msgstr "Graphview"
 
 msgid "Settings for the Graphview plugin that visualizes routing graphs."
 msgstr "Settings for the Graphview plugin that visualises routing graphs."
 
 msgid "Ruleset"
-msgstr ""
+msgstr "Ruleset"
 
 msgid "Use built-in rulesets"
-msgstr ""
+msgstr "Use built-in rulesets"
 
 msgid "External ruleset directory:"
-msgstr ""
+msgstr "External ruleset directory:"
 
 msgid "Select directory"
-msgstr ""
+msgstr "Select directory"
 
 msgid "Vehicle"
-msgstr ""
+msgstr "Vehicle"
 
 msgid "Restore defaults"
-msgstr ""
+msgstr "Restore defaults"
 
 msgid "Visualization"
-msgstr ""
+msgstr "Visualisation"
 
 msgid "Draw directions separately"
-msgstr ""
+msgstr "Draw directions separately"
 
 msgid "Node color"
 msgstr "Node colour"
@@ -26415,24 +26897,26 @@ msgid "Arrowhead fill color"
 msgstr "Arrowhead fill colour"
 
 msgid "Arrowhead placement"
-msgstr ""
+msgstr "Arrowhead placement"
 
 msgid "New bookmark"
-msgstr ""
+msgstr "New bookmark"
 
 msgid "Really delete \"{0}\"?"
-msgstr ""
+msgstr "Really delete \"{0}\"?"
 
 msgid "Bookmark deletion"
-msgstr ""
+msgstr "Bookmark deletion"
 
 msgid ""
 "Really restore default bookmarks?\n"
 "All manually added or edited bookmarks will be lost!"
 msgstr ""
+"Really restore default bookmarks?\n"
+"All manually added or edited bookmarks will be lost!"
 
 msgid "Bookmark reset"
-msgstr ""
+msgstr "Bookmark reset"
 
 msgid "Choose node color"
 msgstr "Choose node colour"
@@ -26444,7 +26928,7 @@ msgid "Choose arrowhead fill color"
 msgstr "Choose arrowhead fill colour"
 
 msgid "Routing graph calculated by the GraphView plugin"
-msgstr ""
+msgstr "Routing graph calculated by the GraphView plugin"
 
 msgid "GraphView layer is not mergable"
 msgstr ""
@@ -26453,10 +26937,10 @@ msgid "graphview default node"
 msgstr ""
 
 msgid "graphview default segment"
-msgstr ""
+msgstr "graphview default segment"
 
 msgid "graphview arrowhead core"
-msgstr ""
+msgstr "graphview arrowhead core"
 
 msgid ""
 "Weights must be given as positive decimal numbers with unit \"t\" or without "
@@ -26499,108 +26983,120 @@ msgid "Generate Imagery XML bounds for the selection"
 msgstr ""
 
 msgid "edit bounds for selected defaults"
-msgstr ""
+msgstr "edit bounds for selected defaults"
 
 msgid "Download imagery XML bounds"
-msgstr ""
+msgstr "Download imagery XML bounds"
 
 msgid ""
 "Validating error in file {0}:\n"
 "{1}\n"
 "Do you want to continue without validating the file ?"
 msgstr ""
+"Validating error in file {0}:\n"
+"{1}\n"
+"Do you want to continue without validating the file?"
 
 msgid "Open Imagery XML file"
-msgstr ""
+msgstr "Open Imagery XML file"
 
 msgid "Calibration Layer"
-msgstr ""
+msgstr "Calibration Layer"
 
 msgid "A deprecated calibration geometry of {0} nodes by {1}"
 msgstr ""
 
 msgid "A calibration geometry of {0} nodes by {1}"
-msgstr ""
+msgstr "A calibration geometry of {0} nodes by {1}"
 
 msgid "Change Color"
 msgstr "Change Colour"
 
 msgid "Deprecate Offset"
-msgstr ""
+msgstr "Deprecate Offset"
 
 msgid "Are you sure this imagery offset is wrong?"
-msgstr ""
+msgstr "Are you sure this imagery offset is wrong?"
 
 msgid "Are you sure this calibration geometry is aligned badly?"
-msgstr ""
+msgstr "Are you sure this calibration geometry is aligned badly?"
 
 msgid "Warning: deprecation is basically irreversible!"
 msgstr ""
 
 msgid "To store imagery offsets you must be a registered OSM user."
-msgstr ""
+msgstr "To store imagery offsets you must be a registered OSM user."
 
 msgid ""
 "Please enter the reason why you mark this imagery offset as deprecated"
 msgstr ""
+"Please enter the reason why you are marking this imagery offset as deprecated"
 
 msgid ""
 "Please enter the reason why you mark this calibration geometry as deprecated"
 msgstr ""
+"Please enter the reason why you are marking this calibration geometry as "
+"deprecated"
 
 msgid "Notifying the server of the deprecation..."
-msgstr ""
+msgstr "Notifying the server of the deprecation..."
 
 msgid "Get Imagery Offset..."
-msgstr ""
+msgstr "Get Imagery Offset..."
 
 msgid "Download offsets for current imagery from a server"
-msgstr ""
+msgstr "Download offsets for current imagery from a server"
 
 msgid ""
 "No data for this region. Please adjust imagery layer and upload an offset."
 msgstr ""
+"No data for this region. Please adjust imagery layer and upload an offset."
 
 msgid "Loading imagery offsets..."
-msgstr ""
+msgstr "Loading imagery offsets..."
 
 msgid "Error processing XML response: {0}"
-msgstr ""
+msgstr "Error processing XML response: {0}"
 
 msgid "Offset"
-msgstr ""
+msgstr "Offset"
 
 msgid "Imagery Offset Database"
-msgstr ""
+msgstr "Imagery Offset Database"
 
 msgid "mm"
-msgstr ""
+msgstr "mm"
 
 msgid "cm"
-msgstr ""
+msgstr "cm"
 
 msgid "m"
-msgstr ""
+msgstr "m"
 
 msgid "km"
-msgstr ""
+msgstr "km"
 
 msgid "Calibration geometries"
-msgstr ""
+msgstr "Calibration geometries"
 
 msgid "Deprecated offsets"
-msgstr ""
+msgstr "Deprecated offsets"
 
 msgid ""
 "The topmost imagery layer has been shifted to presumably match\n"
 "OSM data in the area. Please check that the offset is still valid\n"
 "by downloading GPS tracks and comparing them and OSM data to the imagery."
 msgstr ""
+"The topmost imagery layer has been shifted to presumably match\n"
+"OSM data in the area. Please check that the offset is still valid\n"
+"by downloading GPS tracks and comparing them and OSM data to the imagery."
 
 msgid ""
 "A layer has been added with a calibration geometry. Hide data layers,\n"
 "find the corresponding feature on the imagery layer and move it accordingly."
 msgstr ""
+"A layer has been added with a calibration geometry. Hide data layers,\n"
+"find the corresponding feature on the imagery layer and move it accordingly."
 
 msgid "Deprecated by {0} on {1}"
 msgstr ""
@@ -26633,43 +27129,49 @@ msgid "Determined right here"
 msgstr ""
 
 msgid "Determined {0} away"
-msgstr ""
+msgstr "Determined {0} away"
 
 msgid "Reason"
-msgstr ""
+msgstr "Reason"
 
 msgid "This entry has been reported."
-msgstr ""
+msgstr "This entry has been reported."
 
 msgid "Server has rejected the request"
-msgstr ""
+msgstr "Server has rejected the request"
 
 msgid "Unable to connect to the server"
-msgstr ""
+msgstr "Unable to connect to the server"
 
 msgid "Store Imagery Offset..."
-msgstr ""
+msgstr "Store Imagery Offset..."
 
 msgid ""
 "Upload an offset for current imagery (or calibration object geometry) to a "
 "server"
 msgstr ""
+"Upload an offset for current imagery (or calibration object geometry) to a "
+"server"
 
 msgid "Store calibration geometry"
-msgstr ""
+msgstr "Store calibration geometry"
 
 msgid "Store imagery offset"
-msgstr ""
+msgstr "Store imagery offset"
 
 msgid ""
 "The selected object can be used as a calibration geometry. What do you "
 "intend to do?"
 msgstr ""
+"The selected object can be used as a calibration geometry. What do you "
+"intend to do?"
 
 msgid ""
 "The topmost imagery layer has no offset. Are you sure you want to upload "
 "this?"
 msgstr ""
+"The topmost imagery layer has no offset. Are you sure you want to upload "
+"this?"
 
 msgid ""
 "You are registering an imagery offset. Other users in this area will be able "
@@ -26677,6 +27179,10 @@ msgid ""
 "Please make sure it is as precise as possible, and describe a region this "
 "offset is applicable to."
 msgstr ""
+"You are registering an imagery offset. Other users in this area will be able "
+"to use it for mapping.\n"
+"Please make sure it is as precise as possible, and describe a region this "
+"offset is applicable to."
 
 msgid ""
 "You are registering a calibration geometry. It should be the most precisely "
@@ -26684,30 +27190,34 @@ msgid ""
 "clearly visible boundaries on various satellite imagery. Please describe "
 "this object and its whereabouts."
 msgstr ""
+"You are registering a calibration geometry. It should be the most precisely "
+"positioned object, with\n"
+"clearly visible boundaries on various satellite imagery. Please describe "
+"this object and its whereabouts."
 
 msgid "Uploading a new offset..."
-msgstr ""
+msgstr "Uploading a new offset..."
 
 msgid "This string should be 3 to 200 letters long."
-msgstr ""
+msgstr "This string should be 3 to 200 letters long."
 
 msgid "Adjust imagery"
-msgstr ""
+msgstr "Adjust imagery"
 
 msgid "Adjust the position of the selected imagery layer"
-msgstr ""
+msgstr "Adjust the position of the selected imagery layer"
 
 msgid "Please select the imagery layer to adjust."
-msgstr ""
+msgstr "Please select the imagery layer to adjust."
 
 msgid "Start adjusting"
-msgstr ""
+msgstr "Start adjusting"
 
 msgid "There are currently no imagery layer to adjust."
 msgstr ""
 
 msgid "No layers to adjust"
-msgstr ""
+msgstr "No layers to adjust"
 
 msgid "Normal"
 msgstr "Normal"
@@ -26752,33 +27262,35 @@ msgid "Image files (*.jpg, *.jpeg, *.png, *.gif)"
 msgstr "Image files (*.jpg, *.jpeg, *.png, *.gif)"
 
 msgid "Import vector graphics"
-msgstr ""
+msgstr "Import vector graphics"
 
 msgid "Scale:"
-msgstr ""
+msgstr "Scale:"
 
 msgid "unit(s) = "
-msgstr ""
+msgstr "unit(s) = "
 
 msgid "Importing..."
-msgstr ""
+msgstr "Importing..."
 
 msgid "SVG files [ImportVec plugin] (*.svg)"
-msgstr ""
+msgstr "SVG files [ImportVec plugin] (*.svg)"
 
 msgid "Please open or create data layer before importing"
-msgstr ""
+msgstr "Please open or create data layer before importing"
 
 msgid "InfoMode"
-msgstr ""
+msgstr "InfoMode"
 
 msgid "GPX info mode"
-msgstr ""
+msgstr "GPX info mode"
 
 msgid ""
 "Move the mouse to show trackpoint info for current layer. Hold shift to "
 "highlight tracks"
 msgstr ""
+"Move the mouse to show trackpoint info for current layer. Hold shift to "
+"highlight tracks"
 
 msgid "Delete this"
 msgstr ""
@@ -26815,10 +27327,10 @@ msgid "this layer is no osm data layer"
 msgstr ""
 
 msgid "Converting OSM graph into Channel Digraph"
-msgstr ""
+msgstr "Converting OSM graph into Channel Digraph"
 
 msgid "filtering ways"
-msgstr ""
+msgstr "filtering ways"
 
 msgid "creating Channel-Digraph"
 msgstr ""
@@ -26839,13 +27351,13 @@ msgid "Open the junctionchecking window."
 msgstr ""
 
 msgid "junctions"
-msgstr ""
+msgstr "junctions"
 
 msgid "Channel-Digraph creation"
 msgstr ""
 
 msgid "seal Channel Digraph"
-msgstr ""
+msgstr "seal Channel Digraph"
 
 msgid "calculate strong connected channels"
 msgstr ""
@@ -26873,7 +27385,7 @@ msgid "check the subust for junction properties"
 msgstr ""
 
 msgid "Search "
-msgstr ""
+msgstr "Search "
 
 msgid "search for junctions in the channel subset"
 msgstr ""
@@ -27150,14 +27662,320 @@ msgstr ""
 msgid "Missing input data"
 msgstr ""
 
+msgid "Mapillary Images"
+msgstr ""
+
+msgid "Mapillary layer"
+msgstr ""
+
+msgid "Total images:"
+msgstr ""
+
+msgid "images"
+msgstr ""
+
 msgid "Mapillary"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Export"
-msgstr "Export"
+msgid "Start Mapillary layer"
+msgstr ""
+
+msgid "Download Mapillary images in current view"
+msgstr ""
+
+msgid "Export pictures"
+msgstr ""
+
+msgid "Export Mapillary pictures"
+msgstr ""
+
+msgid "Export images"
+msgstr ""
+
+msgid "Import pictures"
+msgstr ""
+
+msgid "Import local pictures"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer"
+msgstr ""
+
+msgid "Select pictures"
+msgstr ""
+
+msgid "Import pictures into sequence"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer in a sequence"
+msgstr ""
+
+msgid "Join mode"
+msgstr ""
+
+msgid "Join/unjoin pictures"
+msgstr ""
+
+msgid "Join Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures"
+msgstr ""
+
+msgid "Upload Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures."
+msgstr ""
+
+msgid "Walk mode"
+msgstr ""
+
+msgid "Start walk mode"
+msgstr ""
+
+msgid "Zoom to selected image"
+msgstr ""
+
+msgid "Zoom to the currently selected Mapillary image"
+msgstr ""
+
+msgid "Uploaded {0} images"
+msgstr ""
+
+msgid "Approve upload on the website"
+msgstr ""
+
+msgid "View in website"
+msgstr ""
+
+msgid "Copy key"
+msgstr ""
+
+msgid "Copy key tag"
+msgstr ""
+
+msgid "Edit on website"
+msgstr ""
+
+msgid "Export all images"
+msgstr ""
+
+msgid "Export selected sequence"
+msgstr ""
+
+msgid "Export selected images"
+msgstr ""
+
+msgid "Rewrite imported images"
+msgstr ""
+
+msgid "Select a folder"
+msgstr ""
+
+msgid "Explore"
+msgstr ""
+
+msgid "Select a directory"
+msgstr ""
+
+msgid "Speed limit"
+msgstr ""
+
+msgid "Give way"
+msgstr ""
+
+msgid "No entry"
+msgstr ""
+
+msgid "Intersection danger"
+msgstr ""
+
+msgid "Mandatory direction (any)"
+msgstr ""
+
+msgid "No turn"
+msgstr ""
+
+msgid "Uneven road"
+msgstr ""
+
+msgid "No parking"
+msgstr ""
+
+msgid "No overtaking"
+msgstr ""
+
+msgid "Pedestrian crossing"
+msgstr ""
+
+msgid "Years"
+msgstr ""
+
+msgid "Months"
+msgstr ""
+
+msgid "Days"
+msgstr ""
+
+msgid "Mapillary filter"
+msgstr ""
+
+msgid "Open Mapillary filter dialog"
+msgstr ""
+
+msgid "Downloaded images"
+msgstr ""
+
+msgid "Only images with signs"
+msgstr ""
+
+msgid "Choose signs"
+msgstr ""
+
+msgid "Mapillary history"
+msgstr ""
+
+msgid "Open Mapillary history dialog"
+msgstr ""
+
+msgid "Open Mapillary window"
+msgstr ""
+
+msgid "Mapillary dialog"
+msgstr ""
+
+msgid "Open Mapillary main dialog"
+msgstr ""
+
+msgid "Next picture"
+msgstr ""
+
+msgid "Shows the next picture in the sequence"
+msgstr ""
+
+msgid "Previous picture"
+msgstr ""
+
+msgid "Shows the previous picture in the sequence"
+msgstr ""
+
+msgid "Jump to red"
+msgstr ""
+
+msgid "Jumps to the picture at the other side of the red line"
+msgstr ""
+
+msgid "Jump to blue"
+msgstr ""
+
+msgid "Jumps to the picture at the other side of the blue line"
+msgstr ""
+
+msgid "Stops the walk."
+msgstr ""
+
+msgid "Play"
+msgstr ""
+
+msgid "Continues with the paused walk."
+msgstr ""
+
+msgid "Pause"
+msgstr ""
+
+msgid "Pauses the walk."
+msgstr ""
+
+msgid "Reverse buttons position when displaying images."
+msgstr ""
+
+msgid "Display hour when the picture was taken"
+msgstr ""
+
+msgid "Use 24 hour format"
+msgstr ""
+
+msgid "Move to picture''s location with next/previous buttons"
+msgstr ""
+
+msgid "Download mode: "
+msgstr ""
+
+msgid "Upload selected sequence"
+msgstr ""
+
+msgid "Delete after upload"
+msgstr ""
+
+msgid "Wait for full quality pictures"
+msgstr ""
+
+msgid "Follow selected image"
+msgstr ""
+
+msgid "Go forward"
+msgstr ""
+
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
+msgstr ""
+
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
+msgstr ""
+
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
+msgstr ""
+
+msgid "Downloading"
+msgstr ""
+
+msgid "Select mode"
+msgstr ""
+
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
+msgstr ""
+
+msgid "Downloading Mapillary images"
+msgstr ""
+
+msgid "Total Mapillary images: {0}"
+msgstr ""
+
+msgid "No images found"
+msgstr ""
+
+msgid "Finished upload"
+msgstr ""
+
+msgid "Uploading: {0}"
+msgstr ""
 
 msgid "Measured values"
 msgstr "Measured values"
@@ -27177,6 +27995,9 @@ msgstr "Selection Length"
 msgid "Selection Area"
 msgstr "Selection Area"
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr "Angle"
 
@@ -27239,47 +28060,6 @@ msgstr "Create Michigan left turn restriction"
 msgid "Unable to find via nodes. Please check your selection"
 msgstr "Unable to find via nodes. Please check your selection"
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -27512,6 +28292,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr "Tools"
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -28288,10 +29071,10 @@ msgid "Drag to shear the picture"
 msgstr ""
 
 msgid "PicLayer Move point"
-msgstr ""
+msgstr "PicLayer Move point"
 
 msgid "Point added/moved"
-msgstr ""
+msgstr "Point added/moved"
 
 msgid "Drag or create point on the picture"
 msgstr ""
@@ -28300,16 +29083,16 @@ msgid "PicLayer Remove point"
 msgstr ""
 
 msgid "Point removed"
-msgstr ""
+msgstr "Point removed"
 
 msgid "Remove point on the picture"
-msgstr ""
+msgstr "Remove point on the picture"
 
 msgid "PicLayer Transform point"
 msgstr ""
 
 msgid "Point transformed"
-msgstr ""
+msgstr "Point transformed"
 
 msgid "Transform point on the picture"
 msgstr ""
@@ -28324,7 +29107,7 @@ msgid "Could not find the map object."
 msgstr "Could not find the map object."
 
 msgid "PicLayer failed to load or import the image."
-msgstr ""
+msgstr "PicLayer failed to load or import the image."
 
 msgid "Nothing in clipboard"
 msgstr "Nothing in clipboard"
@@ -28336,31 +29119,34 @@ msgid "Warning: failed to handle zip file ''{0}''. Exception was: {1}"
 msgstr "Warning: failed to handle zip file ''{0}''. Exception was: {1}"
 
 msgid "A calibration file associated to the picture file was found: {0}\n"
-msgstr ""
+msgstr "A calibration file associated with the picture file was found: {0}\n"
 
 msgid ""
 "Set \"{0}\" to yes/no/ask in the preferences\n"
 "to control the autoloading of calibration files."
 msgstr ""
+"Set \"{0}\" to yes/no/ask in the preferences\n"
+"to control the autoloading of calibration files."
 
 msgid "Do you want to apply it ?"
-msgstr ""
+msgstr "Do you want to apply it ?"
 
 msgid "Load calibration file ?"
-msgstr ""
+msgstr "Load calibration file ?"
 
 msgid "It will be applied automatically."
-msgstr ""
+msgstr "It will be applied automatically."
 
 msgid ""
 "Also, from now on, calibration files will always be loaded automatically."
 msgstr ""
+"Also, from now on, calibration files will always be loaded automatically."
 
 msgid "Point info"
-msgstr ""
+msgstr "Point info"
 
 msgid "Point info."
-msgstr ""
+msgstr "Point info."
 
 msgid "Connecting server"
 msgstr ""
@@ -28369,10 +29155,10 @@ msgid "PointInfo"
 msgstr ""
 
 msgid "Data not available."
-msgstr ""
+msgstr "Data not available."
 
 msgid "Add new address point"
-msgstr ""
+msgstr "Add new address point"
 
 msgid "Tags copied to clipboard."
 msgstr ""
@@ -28399,100 +29185,100 @@ msgid "A polygon coordinate line must contain exactly 2 numbers"
 msgstr ""
 
 msgid "Unable to parse {0} as a number"
-msgstr ""
+msgstr "Unable to parse {0} as a number"
 
 msgid "Invalid coordinates were found: {0}, {1}"
-msgstr ""
+msgstr "Invalid coordinates were found: {0}, {1}"
 
 msgid "{0} points were outside world bounds and were moved"
-msgstr ""
+msgstr "{0} points were outside world bounds and were moved"
 
 msgid "Osmosis polygon filter files"
-msgstr ""
+msgstr "Osmosis polygon filter files"
 
 msgid "Print..."
-msgstr ""
+msgstr "Print..."
 
 msgid "Print the map"
-msgstr ""
+msgstr "Print the map"
 
 msgid "Print the Map"
-msgstr ""
+msgstr "Print the Map"
 
 msgid "Printer"
-msgstr ""
+msgstr "Printer"
 
 msgid "Media"
 msgstr ""
 
 msgid "Orientation"
-msgstr ""
+msgstr "Orientation"
 
 msgid "Printer settings"
-msgstr ""
+msgstr "Printer settings"
 
 msgid "Scale"
-msgstr ""
+msgstr "Scale"
 
 msgid "Resolution"
-msgstr ""
+msgstr "Resolution"
 
 msgid "Map information"
-msgstr ""
+msgstr "Map information"
 
 msgid "Map Preview"
-msgstr ""
+msgstr "Map Preview"
 
 msgid "Zoom To Page"
-msgstr ""
+msgstr "Zoom To Page"
 
 msgid "Zoom To Actual Size"
 msgstr "Zoom To Actual Size"
 
 msgid "Print"
-msgstr ""
+msgstr "Print"
 
 msgid "Printing has been cancelled."
-msgstr ""
+msgstr "Printing has been cancelled."
 
 msgid "Printing stopped"
-msgstr ""
+msgstr "Printing stopped"
 
 msgid "Printing has failed."
-msgstr ""
+msgstr "Printing has failed."
 
 msgid "Proj4J: {0} selected"
 msgstr ""
 
 msgid "Selected: {0}"
-msgstr ""
+msgstr "Selected: {0}"
 
 msgid "Proj4J Plugin"
-msgstr ""
+msgstr "Proj4J Plugin"
 
 msgid "Code"
-msgstr ""
+msgstr "Code"
 
 msgid "added"
-msgstr ""
+msgstr "added"
 
 msgid "Public Transport: Enable GTFSStops"
-msgstr ""
+msgstr "Public Transport: Enable GTFSStops"
 
 msgid "Public Transport: Catch GTFS stops"
-msgstr ""
+msgstr "Public Transport: Catch GTFS stops"
 
 msgid "skipped"
-msgstr ""
+msgstr "skipped"
 
 msgid "Public Transport: Disable GTFS"
-msgstr ""
+msgstr "Public Transport: Disable GTFS"
 
 msgid "Create Stops from GTFS ..."
-msgstr ""
+msgstr "Create Stops from GTFS ..."
 
 msgid "Create Stops from a GTFS file"
-msgstr ""
+msgstr "Create Stops from a GTFS file"
 
 msgid "Select GTFS file (stops.txt)"
 msgstr ""
@@ -28507,15 +29293,16 @@ msgid ""
 "There exists no dataset. Try to download data from the server or open an OSM "
 "file."
 msgstr ""
+"No dataset exists. Try to download data from the server or open an OSM file."
 
 msgid "No data found"
-msgstr ""
+msgstr "No data found"
 
 msgid "The GTFS file was empty."
-msgstr ""
+msgstr "The GTFS file was empty."
 
 msgid "Create Stops from GTFS"
-msgstr ""
+msgstr "Create Stops from GTFS"
 
 msgid "GTFS-Stops"
 msgstr ""
@@ -28524,82 +29311,82 @@ msgid "Type of stops to add"
 msgstr ""
 
 msgid "Time on your GPS device"
-msgstr ""
+msgstr "Time on your GPS device"
 
 msgid "HH:MM:SS.sss"
-msgstr ""
+msgstr "HH:MM:SS.sss"
 
 msgid "Time on your stopwatch"
-msgstr ""
+msgstr "Time on your stopwatch"
 
 msgid "Time window"
-msgstr ""
+msgstr "Time window"
 
 msgid "seconds"
-msgstr ""
+msgstr "seconds"
 
 msgid "Move Threshold"
-msgstr ""
+msgstr "Move Threshold"
 
 msgid "Suggest Stops"
-msgstr ""
+msgstr "Suggest Stops"
 
 msgid "Find"
-msgstr ""
+msgstr "Find"
 
 msgid "Show"
 msgstr "Show"
 
 msgid "Mark"
-msgstr ""
+msgstr "Mark"
 
 msgid "Catch"
-msgstr ""
+msgstr "Catch"
 
 msgid "Join"
-msgstr ""
+msgstr "Join"
 
 msgid "Enable"
-msgstr ""
+msgstr "Enable"
 
 msgid "Can''t parse a time from this string."
-msgstr ""
+msgstr "Can''t parse a time from this string."
 
 msgid "Invalid value"
-msgstr ""
+msgstr "Invalid value"
 
 msgid "moved"
-msgstr ""
+msgstr "moved"
 
 msgid "Public Transport: Join GTFS stops"
-msgstr ""
+msgstr "Public Transport: Join GTFS stops"
 
 msgid "Id"
-msgstr ""
+msgstr "Id"
 
 msgid "State"
 msgstr "State"
 
 msgid "pending"
-msgstr ""
+msgstr "pending"
 
 msgid "outside"
-msgstr ""
+msgstr "outside"
 
 msgid "[incomplete]"
-msgstr ""
+msgstr "[incomplete]"
 
 msgid "[empty way]"
-msgstr ""
+msgstr "[empty way]"
 
 msgid "[ID] {0}"
-msgstr ""
+msgstr "[ID] {0}"
 
 msgid "[gap]"
-msgstr ""
+msgstr "[gap]"
 
 msgid " [ID] {0}"
-msgstr ""
+msgstr " [ID] {0}"
 
 msgid "Route patterns ..."
 msgstr "Route patterns ..."
@@ -28608,7 +29395,7 @@ msgid "Edit Route patterns for public transport"
 msgstr "Edit Route patterns for public transport"
 
 msgid "Route Patterns"
-msgstr ""
+msgstr "Route Patterns"
 
 msgid "Overview"
 msgstr "Overview"
@@ -28623,43 +29410,43 @@ msgid "Meta"
 msgstr "Meta"
 
 msgid "Existing route patterns:"
-msgstr ""
+msgstr "Existing route patterns:"
 
 msgid "Reflect"
-msgstr ""
+msgstr "Reflect"
 
 msgid "Required tags:"
-msgstr ""
+msgstr "Required tags:"
 
 msgid "Common tags:"
-msgstr ""
+msgstr "Common tags:"
 
 msgid "Additional tags:"
-msgstr ""
+msgstr "Additional tags:"
 
 msgid "Add a new Tag"
-msgstr ""
+msgstr "Add a new Tag"
 
 msgid "Name/Id"
-msgstr ""
+msgstr "Name/Id"
 
 msgid "Ref"
-msgstr ""
+msgstr "Ref"
 
 msgid "Stops are possible on the"
-msgstr ""
+msgstr "Stops are possible on the"
 
 msgid "right hand side"
-msgstr ""
+msgstr "right hand side"
 
 msgid "left hand side"
-msgstr ""
+msgstr "left hand side"
 
 msgid "Maximum distance from route"
-msgstr ""
+msgstr "Maximum distance from route"
 
 msgid "Public Transport: Change stop type"
-msgstr ""
+msgstr "Public Transport: Change stop type"
 
 msgid "Create Stops from GPX ..."
 msgstr "Create Stops from GPX ..."
@@ -28668,241 +29455,267 @@ msgid "Create Stops from a GPX file"
 msgstr "Create Stops from a GPX file"
 
 msgid "Select GPX file"
-msgstr ""
+msgstr "Select GPX file"
 
 msgid "The GPX file contained no tracks or waypoints."
-msgstr ""
+msgstr "The GPX file contained no tracks or waypoints."
 
 msgid "Create Stops from GPX"
-msgstr ""
+msgstr "Create Stops from GPX"
 
 msgid "Tracks in this GPX file:"
-msgstr ""
+msgstr "Tracks in this GPX file:"
 
 msgid "Detach"
-msgstr ""
+msgstr "Detach"
 
 msgid "implicit"
-msgstr ""
+msgstr "implicit"
 
 msgid ""
 "The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
 "has trackpoints."
 msgstr ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
 
 msgid "GPX File Trouble"
-msgstr ""
+msgstr "GPX File Trouble"
 
 msgid "unnamed"
 msgstr "unnamed"
 
 msgid "Public Transport: Add track stop"
-msgstr ""
+msgstr "Public Transport: Add track stop"
 
 msgid "Public Transport: Delete track stop"
-msgstr ""
+msgstr "Public Transport: Delete track stop"
 
 msgid "Public Transport: Detach track stop list"
-msgstr ""
+msgstr "Public Transport: Detach track stop list"
 
 msgid "Public Transport: Edit track stop list"
-msgstr ""
+msgstr "Public Transport: Edit track stop list"
 
 msgid "Public Transport: Relocate nodes in track stoplist"
 msgstr ""
 
 msgid "Public Transport: sort track stop list"
-msgstr ""
+msgstr "Public Transport: sort track stop list"
 
 msgid "Public Transport: Suggest stops"
-msgstr ""
+msgstr "Public Transport: Suggest stops"
 
 msgid "Stopname"
 msgstr ""
 
 msgid "Public Transport: Detach waypoints"
-msgstr ""
+msgstr "Public Transport: Detach waypoints"
 
 msgid "Public Transport: Disable waypoints"
-msgstr ""
+msgstr "Public Transport: Disable waypoints"
 
 msgid "Public Transport: Enable waypoints"
-msgstr ""
+msgstr "Public Transport: Enable waypoints"
 
 msgid "Public Transport: Edit waypoint name"
-msgstr ""
+msgstr "Public Transport: Edit waypoint name"
+
+msgid "Public transport routes"
+msgstr "Public transport routes"
+
+msgid "Toggle direction arrows"
+msgstr "Toggle direction arrows"
+
+msgid "Toggle reference labels"
+msgstr "Toggle reference labels"
+
+msgid "Visualize public transport routes"
+msgstr "Visualise public transport routes"
+
+msgid "Filters"
+msgstr "Filters"
+
+msgid "Choose Filter"
+msgstr "Choose Filter"
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr "JSlider initialisation error. Make sure your meta-inf is correct."
 
 msgid "Relation Toolbox"
-msgstr ""
+msgstr "Relation Toolbox"
 
 msgid "Open relation/multipolygon editor panel"
-msgstr ""
+msgstr "Open relation/multipolygon editor panel"
 
 msgid "Specify role"
-msgstr ""
+msgstr "Specify role"
 
 msgid "Change relation member roles to {0}"
-msgstr ""
+msgstr "Change relation member roles to {0}"
 
 msgid "Create administrative boundary relations"
-msgstr ""
+msgstr "Create administrative boundary relations"
 
 msgid "Add tags boundary and admin_level to boundary relation ways"
-msgstr ""
+msgstr "Add tags boundary and admin_level to boundary relation ways"
 
 msgid "Move area tags from contour to relation"
-msgstr ""
+msgstr "Move area tags from contour to relation"
 
 msgid "When moving tags, consider even non-repeating ones"
-msgstr ""
+msgstr "When moving tags, consider even non-repeating ones"
 
 msgid "Always split ways of neighbouring multipolygons"
-msgstr ""
+msgstr "Always split ways of neighbouring multipolygons"
 
 msgid "Change role"
-msgstr ""
+msgstr "Change role"
 
 msgid "Enter role for selected members"
-msgstr ""
+msgstr "Enter role for selected members"
 
 msgid "Relation Toolbox: {0}"
-msgstr ""
+msgstr "Relation Toolbox: {0}"
 
 msgid "another..."
-msgstr ""
+msgstr "another..."
 
 msgid "Add/remove members from the chosen relation"
-msgstr ""
+msgstr "Add/remove members from the chosen relation"
 
 msgid "Clear the chosen relation"
-msgstr ""
+msgstr "Clear the chosen relation"
 
 msgid "Create a multipolygon from selected objects"
-msgstr ""
+msgstr "Create a multipolygon from selected objects"
 
 msgid "Create multipolygons from rings"
-msgstr ""
+msgstr "Create multipolygons from rings"
 
 msgid "Move tags from ways to relation"
-msgstr ""
+msgstr "Move tags from ways to relation"
 
 msgid "Enter admin level and name for the border relation:"
-msgstr ""
+msgstr "Enter admin level and name for the border relation:"
 
 msgid "Admin level"
-msgstr ""
+msgstr "Admin level"
 
 msgid "Create a relation from selected objects"
-msgstr ""
+msgstr "Create a relation from selected objects"
 
 msgid "Choose a type for the relation:"
-msgstr ""
+msgstr "Choose a type for the relation:"
 
 msgid "Delete relation"
-msgstr ""
+msgstr "Delete relation"
 
 msgid "Download incomplete members for the chosen relation"
-msgstr ""
+msgstr "Download incomplete members for the chosen relation"
 
 msgid "Download referrers"
 msgstr "Download referrers"
 
 msgid "Download referrers for the chosen relation and its members."
-msgstr ""
+msgstr "Download referrers for the chosen relation and its members."
 
 msgid "Duplicate relation"
-msgstr ""
+msgstr "Duplicate relation"
 
 msgid "Open relation editor for the chosen relation"
-msgstr ""
+msgstr "Open relation editor for the chosen relation"
 
 msgid "Find a relation"
-msgstr ""
+msgstr "Find a relation"
 
 msgid "Reconstruct polygon"
-msgstr ""
+msgstr "Reconstruct polygon"
 
 msgid "Multipolygon must consist only of ways"
-msgstr ""
+msgstr "Multipolygon must consist only of ways"
 
 msgid "Reconstruction of polygons can be done only from outer ways"
-msgstr ""
+msgstr "Reconstruction of polygons can be done only from outer ways"
 
 msgid "Reconstruct polygons from relation {0}"
-msgstr ""
+msgstr "Reconstruct polygons from relation {0}"
 
 msgid "Reconstruct route"
-msgstr ""
+msgstr "Reconstruct route"
 
 msgid "Open relation wiki page"
-msgstr ""
+msgstr "Open relation wiki page"
 
 msgid "Select relation in main selection."
 msgstr "Select relation in main selection."
 
 msgid "Fix roles of the chosen relation members"
-msgstr ""
+msgstr "Fix roles of the chosen relation members"
 
 msgid "Complete multipolygon for way {0}"
-msgstr ""
+msgstr "Complete multipolygon for way {0}"
 
 msgid "Node without ''house'' role found"
-msgstr ""
+msgstr "Node without ''house'' role found"
 
 msgid "Way without ''house'' or ''street'' role found"
-msgstr ""
+msgstr "Way without ''house'' or ''street'' role found"
 
 msgid "Relation without ''house'' role found"
-msgstr ""
+msgstr "Relation without ''house'' role found"
 
 msgid "Relation does not have name"
-msgstr ""
+msgstr "Relation does not have name"
 
 msgid "Relation has streets with different names"
-msgstr ""
+msgstr "Relation has streets with different names"
 
 msgid "fix associatedStreet relation"
-msgstr ""
+msgstr "fix associatedStreet relation"
 
 msgid "Relation without ''subarea'' role found"
-msgstr ""
+msgstr "Relation without ''subarea'' role found"
 
 msgid "Node without ''label'' or ''admin_centre'' role found"
-msgstr ""
+msgstr "Node without ''label'' or ''admin_centre'' role found"
 
 msgid "Way without ''inner'' or ''outer'' role found"
-msgstr ""
+msgstr "Way without ''inner'' or ''outer'' role found"
 
 msgid "Node without ''stop'' or ''platform'' role found"
-msgstr ""
+msgstr "Node without ''stop'' or ''platform'' role found"
 
 msgid "Way platform without ''platform'' role found"
-msgstr ""
+msgstr "Way platform without ''platform'' role found"
 
 msgid "Revert changeset fully"
-msgstr ""
+msgstr "Revert changeset fully"
 
 msgid "Revert selection only"
-msgstr ""
+msgstr "Revert selection only"
 
 msgid "Revert selection and restore deleted objects"
-msgstr ""
+msgstr "Revert selection and restore deleted objects"
 
 msgid "Revert changeset"
-msgstr ""
+msgstr "Revert changeset"
 
 msgid "Revert"
 msgstr "Revert"
 
 msgid "Enter the ID of the changeset that should be reverted"
-msgstr ""
+msgstr "Enter the ID of the changeset that should be reverted"
 
 msgid "Reverted changeset"
-msgstr ""
+msgstr "Reverted changeset"
 
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -28910,16 +29723,19 @@ msgid "Objects history"
 msgstr ""
 
 msgid "History reverter"
+msgstr "History reverter"
+
+msgid "Tool: Display objects history dialog"
 msgstr ""
 
 msgid "Preparing history data..."
-msgstr ""
+msgstr "Preparing history data..."
 
 msgid "Remote Control has been asked to revert a changeset."
-msgstr ""
+msgstr "Remote Control has been asked to revert a changeset."
 
 msgid "Reverting..."
-msgstr ""
+msgstr "Reverting..."
 
 msgid ""
 "This changeset has objects that are not present in current dataset.\n"
@@ -28927,7 +29743,7 @@ msgid ""
 msgstr ""
 
 msgid "Confirm"
-msgstr ""
+msgstr "Confirm"
 
 msgid "Fetching missing primitives"
 msgstr ""
@@ -28956,61 +29772,61 @@ msgstr ""
 "({1},{2}). Skipping."
 
 msgid "Road Sign Plugin"
-msgstr ""
+msgstr "Road Sign Plugin"
 
 msgid "signs"
-msgstr ""
+msgstr "signs"
 
 msgid "Change Properties"
 msgstr "Change Properties"
 
 msgid "Country preset:"
-msgstr ""
+msgstr "Country preset:"
 
 msgid "Show all signs"
-msgstr ""
+msgstr "Show all signs"
 
 msgid "Show a selection of the most useful signs"
-msgstr ""
+msgstr "Show a selection of the most useful signs"
 
 msgid "Belgium"
-msgstr ""
+msgstr "Belgium"
 
 msgid "Spain"
-msgstr ""
+msgstr "Spain"
 
 msgid "Germany"
-msgstr ""
+msgstr "Germany"
 
 msgid "Poland"
-msgstr ""
+msgstr "Poland"
 
 msgid "Slovakia"
-msgstr ""
+msgstr "Slovakia"
 
 msgid "Roadsign tagging"
-msgstr ""
+msgstr "Roadsign tagging"
 
 msgid "Add tags by clicking on road signs"
-msgstr ""
+msgstr "Add tags by clicking on road signs"
 
 msgid "Roadsigns plugin: open dialog"
 msgstr "Roadsigns plugin: open dialogue"
 
 msgid "custom"
-msgstr ""
+msgstr "custom"
 
 msgid "Could not read tagging preset source: ''{0}''"
-msgstr ""
+msgstr "Could not read tagging preset source: ''{0}''"
 
 msgid "Error parsing tagging preset from ''{0}'':\n"
-msgstr ""
+msgstr "Error parsing tagging preset from ''{0}'':\n"
 
 msgid "Sign {0}"
-msgstr ""
+msgstr "Sign {0}"
 
 msgid "Additional sign {0}"
-msgstr ""
+msgstr "Additional sign {0}"
 
 msgid "Edit relation"
 msgstr "Edit relation"
@@ -29096,126 +29912,139 @@ msgstr "New value for {0}"
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr "Preference ''{0}'' missing. Cannot initialise SdsApi."
 
+msgid "Proxy Authentication Required"
+msgstr "Proxy Authentication Required"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
 msgstr ""
+"<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
+"is stored in plain text in the JOSM preferences file. </p></body></html>"
 
 msgid "Enter credentials for Separate Data Store API"
-msgstr ""
+msgstr "Enter credentials for Separate Data Store API"
 
 msgid "Please enter the user name of your SDS account"
-msgstr ""
+msgstr "Please enter the user name of your SDS account"
 
 msgid "Please enter the password of your SDS account"
-msgstr ""
+msgstr "Please enter the password of your SDS account"
 
 msgid ""
 "Authenticating at the SDS API ''{0}'' failed. Please enter a valid username "
 "and a valid password."
 msgstr ""
+"Authenticating at the SDS API ''{0}'' failed. Please enter a valid username "
+"and a valid password."
 
 msgid "SDS data file"
-msgstr ""
+msgstr "SDS data file"
 
 msgid "Load..."
-msgstr ""
+msgstr "Load..."
 
 msgid "Load separate data store data from a file."
-msgstr ""
+msgstr "Load separate data store data from a file."
 
 msgid "Loading files"
-msgstr ""
+msgstr "Loading files"
 
 msgid "SDS"
-msgstr ""
+msgstr "SDS"
 
 msgid "Information about SDS."
-msgstr ""
+msgstr "Information about SDS."
 
 msgid "About SDS..."
-msgstr ""
+msgstr "About SDS..."
 
 msgid "Open a preferences dialog for SDS."
 msgstr "Open a preferences dialogue for SDS."
 
 msgid "Separate Data Store"
-msgstr ""
+msgstr "Separate Data Store"
 
 msgid "Configures access to the Separate Data Store."
-msgstr ""
+msgstr "Configures access to the Separate Data Store."
 
 msgid "Server"
-msgstr ""
+msgstr "Server"
 
 msgid "The URL under which the SDS server can be contacted."
-msgstr ""
+msgstr "The URL under which the SDS server can be contacted."
 
 msgid ""
 "The user name at the SDS server. You need to create an account with the SDS "
 "admin first."
 msgstr ""
+"The user name at the SDS server. You need to create an account with the SDS "
+"admin first."
 
 msgid ""
 "The password at the SDS server. You need to create an account with the SDS "
 "admin first."
 msgstr ""
+"The password at the SDS server. You need to create an account with the SDS "
+"admin first."
 
 msgid ""
 "Tags beginning with this prefix are never saved to OSM, but to the SDS "
 "server only."
 msgstr ""
+"Tags beginning with this prefix are never saved to OSM, but to the SDS "
+"server only."
 
 msgid "SDS server URL"
-msgstr ""
+msgstr "SDS server URL"
 
 msgid "SDS username"
-msgstr ""
+msgstr "SDS username"
 
 msgid "SDS password"
-msgstr ""
+msgstr "SDS password"
 
 msgid "Test credentials now"
-msgstr ""
+msgstr "Test credentials now"
 
 msgid "SDS tag prefix"
-msgstr ""
+msgstr "SDS tag prefix"
 
 msgid "Connection successful."
-msgstr ""
+msgstr "Connection successful."
 
 msgid "Cannot connect to SDS server: "
-msgstr ""
+msgstr "Cannot connect to SDS server: "
 
 msgid "Save..."
-msgstr ""
+msgstr "Save..."
 
 msgid "Save the current separate data store information to a file."
-msgstr ""
+msgstr "Save the current separate data store information to a file."
 
 msgid "Save SDS file"
-msgstr ""
+msgstr "Save SDS file"
 
 msgid "No object selected"
-msgstr ""
+msgstr "No object selected"
 
 msgid "SeaChart Editor"
 msgstr ""
 
 msgid "Seamark Inspector"
-msgstr ""
+msgstr "Seamark Inspector"
 
 msgid "Select only one object"
-msgstr ""
+msgstr "Select only one object"
 
 msgid "Select a map object"
-msgstr ""
+msgstr "Select a map object"
 
 msgid "Simplify Area"
-msgstr ""
+msgstr "Simplify Area"
 
 msgid "Delete unnecessary nodes from an area."
-msgstr ""
+msgstr "Delete unnecessary nodes from an area."
 
 msgid "Yes, delete nodes"
 msgstr "Yes, delete nodes"
@@ -29233,7 +30062,7 @@ msgid "Delete nodes outside of data regions?"
 msgstr "Delete nodes outside of data regions?"
 
 msgid "average nearby nodes"
-msgstr ""
+msgstr "average nearby nodes"
 
 msgid ""
 "Node of the way (area) is removed if all of <u>Angle Weight</u>, <u>Area "
@@ -29263,28 +30092,61 @@ msgstr ""
 "closer than <u>Threshold</u> metres."
 
 msgid "Angle Threshold"
-msgstr ""
+msgstr "Angle Threshold"
 
 msgid "Angle Factor"
-msgstr ""
+msgstr "Angle Factor"
 
 msgid "Area Threshold"
-msgstr ""
+msgstr "Area Threshold"
 
 msgid "Area Factor"
 msgstr ""
 
 msgid "Distance Threshold"
-msgstr ""
+msgstr "Distance Threshold"
 
 msgid "Distance Factor"
-msgstr ""
+msgstr "Distance Factor"
 
 msgid "Merge Nearby Nodes Threshold"
-msgstr ""
+msgstr "Merge Nearby Nodes Threshold"
 
 msgid "SeaMap Editor"
-msgstr ""
+msgstr "SeaMap Editor"
+
+msgid "Spline drawing"
+msgstr "Spline drawing"
+
+msgid "Draw a spline curve"
+msgstr "Draw a spline curve"
+
+msgid "Spline goes outside of the world."
+msgstr "Spline goes outside of the world."
+
+msgid "Add an existing node to spline: {0}"
+msgstr "Add an existing node to spline: {0}"
+
+msgid "Add a new node to spline: {0}"
+msgstr "Add a new node to spline: {0}"
+
+msgid "Delete spline node {0}"
+msgstr "Delete spline node {0}"
+
+msgid "Finish spline"
+msgstr "Finish spline"
+
+msgid "Splines"
+msgstr "Splines"
+
+msgid "Spline drawing preferences"
+msgstr "Spline drawing preferences"
+
+msgid "Curve steps"
+msgstr "Curve steps"
+
+msgid "Undelete node {0}"
+msgstr "Undelete node {0}"
 
 msgid "OSM Export"
 msgstr "OSM Export"
@@ -29295,6 +30157,9 @@ msgstr "Export traffic data to SUMO network file."
 msgid "SUMO Export"
 msgstr "SUMO Export"
 
+msgid "Export"
+msgstr "Export"
+
 msgid "AutoSave LiveData"
 msgstr "AutoSave LiveData"
 
@@ -29305,7 +30170,7 @@ msgid "Error while exporting {0}: {1}"
 msgstr "Error while exporting {0}: {1}"
 
 msgid "Duplicate hotkey for button ''{0}'' - button will be ignored!"
-msgstr ""
+msgstr "Duplicate hotkey for button ''{0}'' - button will be ignored!"
 
 msgid "SurveyorPlugin needs LiveGpsPlugin, but could not find it!"
 msgstr "SurveyorPlug-in needs LiveGpsPlug-in, but could not find it!"
@@ -29338,15 +30203,17 @@ msgid "Waypoint Description"
 msgstr "Waypoint Description"
 
 msgid "Tag2Link Preferences"
-msgstr ""
+msgstr "Tag2Link Preferences"
 
 msgid "Launch browser with information about the selected object"
-msgstr ""
+msgstr "Launch browser with information about the selected object"
 
 msgid ""
 "Launch your default software for sending an email to the selected contact "
 "address"
 msgstr ""
+"Launch your default software for sending an email to the selected contact "
+"address"
 
 msgid "Edit tags"
 msgstr "Edit tags"
@@ -29405,7 +30272,7 @@ msgid "Highest Number"
 msgstr "Highest Number"
 
 msgid "List of Numbers"
-msgstr ""
+msgstr "List of Numbers"
 
 msgid "add to existing associatedStreet relation"
 msgstr "add to existing associatedStreet relation"
@@ -29414,7 +30281,7 @@ msgid "create an associatedStreet relation"
 msgstr "create an associatedStreet relation"
 
 msgid "keep outline way"
-msgstr ""
+msgstr "keep outline way"
 
 msgid "Street name: "
 msgstr "Street name: "
@@ -29465,22 +30332,25 @@ msgid "Creates individual buildings from a long building."
 msgstr "Creates individual buildings from a long building."
 
 msgid "Invalid selection"
-msgstr ""
+msgstr "Invalid selection"
 
 msgid ""
 "Select a single, closed way of at least four nodes. (Optionally you can also "
 "select a street for the addr:street tag and a node to mark the start of "
 "numbering.)"
 msgstr ""
+"Select a single, closed way of at least four nodes. (Optionally you can also "
+"select a street for the addr:street tag and a node to mark the start of "
+"numbering.)"
 
 msgid "Terrace"
 msgstr "Terrace"
 
 msgid "Browse"
-msgstr ""
+msgstr "Browse"
 
 msgid "Browse map with left button"
-msgstr ""
+msgstr "Browse map with left button"
 
 msgid "Merge objects nodes"
 msgstr "Merge objects nodes"
@@ -29495,24 +30365,29 @@ msgid "Tracer building"
 msgstr "Tracer building"
 
 msgid "Tracer2"
-msgstr ""
+msgstr "Tracer2"
 
 msgid "Tracer2."
-msgstr ""
+msgstr "Tracer2."
 
 msgid "Change tag {0} to {1}"
-msgstr ""
+msgstr "Change tag {0} to {1}"
 
 msgid ""
 "The Tracer2Server version isn''t compatible with this plugin. Please "
 "download version {0} from\n"
 "{1}."
 msgstr ""
+"The Tracer2Server version isn''t compatible with this plugin. Please "
+"download version {0} from\n"
+"{1}."
 
 msgid ""
 "New version of Tracer2Server is available. For best results please upgrade "
 "to version {0}."
 msgstr ""
+"New version of Tracer2Server is available. For best results please upgrade "
+"to version {0}."
 
 msgid "No set of parameter is active!"
 msgstr "No set of parameter is active!"
@@ -29521,46 +30396,43 @@ msgid "Select parameter"
 msgstr "Select parameter"
 
 msgid "Tracer2: add a way with {0} points"
-msgstr ""
+msgstr "Tracer2: add a way with {0} points"
 
 msgid "Tracer2: modify way to {0} points"
-msgstr ""
+msgstr "Tracer2: modify way to {0} points"
 
 msgid "Tracer2 error"
-msgstr ""
+msgstr "Tracer2 error"
 
 msgid "Parameter for server request"
 msgstr "Parameter for server request"
 
-msgid "Tile size:"
-msgstr "Tile size:"
-
 msgid "Resolution:"
-msgstr ""
+msgstr "Resolution:"
 
 msgid "Mode:"
-msgstr ""
+msgstr "Mode:"
 
 msgid "Threshold:"
-msgstr ""
+msgstr "Threshold:"
 
 msgid "Points per circle:"
-msgstr ""
+msgstr "Points per circle:"
 
 msgid "Tag:"
-msgstr ""
+msgstr "Tag:"
 
 msgid "Preferred values:"
-msgstr ""
+msgstr "Preferred values:"
 
 msgid "Delete parameter \"{0}\"?"
 msgstr "Delete parameter \"{0}\"?"
 
 msgid "Add new"
-msgstr ""
+msgstr "Add new"
 
 msgid "Add predefined"
-msgstr ""
+msgstr "Add predefined"
 
 msgid "Select predefined parameter"
 msgstr "Select predefined parameter"
@@ -29576,37 +30448,41 @@ msgid ""
 "If you don''t have the server, please download it from\n"
 "{0}."
 msgstr ""
+"Tracer2Server isn''t running. Please start the Server.\n"
+"If you don''t have the server, please download it from\n"
+"{0}."
 
 msgid "Tracer2Server hasn''t found anything."
-msgstr ""
+msgstr "Tracer2Server hasn''t found anything."
 
 msgid "Tracer2Server has detected an error."
-msgstr ""
+msgstr "Tracer2Server has detected an error."
 
 msgid "GPG"
-msgstr ""
+msgstr "GPG"
 
 msgid "Export sigs..."
-msgstr ""
+msgstr "Export sigs..."
 
 msgid "Export all signatures to XML file."
-msgstr ""
+msgstr "Export all signatures to XML file."
 
 msgid "Export sigs to XML..."
-msgstr ""
+msgstr "Export sigs to XML..."
 
 msgid "Save Signatures file"
-msgstr ""
+msgstr "Save Signatures file"
 
 msgid ""
 "Get all referenced but not actually present OSM objects from OSM server."
 msgstr ""
+"Get all referenced but not actually present OSM objects from OSM server."
 
 msgid "Download referenced osm objects..."
-msgstr ""
+msgstr "Download referenced osm objects..."
 
 msgid "{0} Signatures loaded. All referenced OSM objects found."
-msgstr ""
+msgstr "{0} Signatures loaded. All referenced OSM objects found."
 
 msgid ""
 "{0} of {1} OSM objects are referenced but not there.\n"
@@ -29614,10 +30490,10 @@ msgid ""
 msgstr ""
 
 msgid "Load objects from server"
-msgstr ""
+msgstr "Load objects from server"
 
 msgid "Download signed data"
-msgstr ""
+msgstr "Download signed data"
 
 msgid "Warning: Ignoring exception because task was canceled. Exception: {0}"
 msgstr ""
@@ -29627,62 +30503,66 @@ msgid ""
 "Generating new Keypair.\n"
 "Collecting randomness..."
 msgstr ""
+"Generating new Keypair.\n"
+"Collecting randomness..."
 
 msgid "UID"
-msgstr ""
+msgstr "UID"
 
 msgid "KeyID"
-msgstr ""
+msgstr "KeyID"
 
 msgid "OSM-Info"
 msgstr ""
 
 msgid "Signed"
-msgstr ""
+msgstr "Signed"
 
 msgid "Unknown"
-msgstr ""
+msgstr "Unknown"
 
 msgid "Object signatures"
-msgstr ""
+msgstr "Object signatures"
 
 msgid "Open object signing window."
-msgstr ""
+msgstr "Open object signing window."
 
 msgid "Check"
-msgstr ""
+msgstr "Check"
 
 msgid "Check all available signatures for selected object."
-msgstr ""
+msgstr "Check all available signatures for selected object."
 
 msgid "Sign"
-msgstr ""
+msgstr "Sign"
 
 msgid "Digital sign selected Tags, if you believe they are correct."
-msgstr ""
+msgstr "Digital sign selected Tags, if you believe they are correct."
 
 msgid "Show all available signatures for selected attribute."
-msgstr ""
+msgstr "Show all available signatures for selected attribute."
 
 msgid "Show deleted tags and notes if they were signed before"
-msgstr ""
+msgstr "Show deleted tags and notes if they were signed before"
 
 msgid ""
 "Use default (and maybe existing) GnuPG directory ({0}) to store new keys and "
 "configs."
 msgstr ""
+"Use default (and maybe existing) GnuPG directory ({0}) to store new keys and "
+"configs."
 
 msgid "Use separate GnuPG directory ({0}) to store new keys and configs."
-msgstr ""
+msgstr "Use separate GnuPG directory ({0}) to store new keys and configs."
 
 msgid "Trust OSM Settings"
-msgstr ""
+msgstr "Trust OSM Settings"
 
 msgid "Change GPG and privacy settings of the trustosm plugin."
-msgstr ""
+msgstr "Change GPG and privacy settings of the trustosm plugin."
 
 msgid "Use separate GnuPG configuration directory?"
-msgstr ""
+msgstr "Use separate GnuPG configuration directory?"
 
 msgid "GnuPG"
 msgstr ""
@@ -29725,37 +30605,37 @@ msgid "Selected WaySegment was:"
 msgstr ""
 
 msgid "Signature Files"
-msgstr ""
+msgstr "Signature Files"
 
 msgid "OSM Signature Files"
-msgstr ""
+msgstr "OSM Signature Files"
 
 msgid "Only digits allowed in osmid: ''{0}''."
-msgstr ""
+msgstr "Only digits allowed in osmid: ''{0}''."
 
 msgid "Could not parse OpenPGP message."
-msgstr ""
+msgstr "Could not parse OpenPGP message."
 
 msgid "Prepare stuff..."
-msgstr ""
+msgstr "Prepare stuff..."
 
 msgid "Parsing Signature data..."
-msgstr ""
+msgstr "Parsing Signature data..."
 
 msgid "The Signature is broken!"
-msgstr ""
+msgstr "The Signature is broken!"
 
 msgid "Manipulation Warning"
-msgstr ""
+msgstr "Manipulation Warning"
 
 msgid "Select a signing key from your keyring-file:"
 msgstr ""
 
 msgid "Don''t ask again for the key"
-msgstr ""
+msgstr "Don''t ask again for the key"
 
 msgid "Use a random key from this list"
-msgstr ""
+msgstr "Use a random key from this list"
 
 msgid "Create new Key"
 msgstr ""
@@ -29779,75 +30659,77 @@ msgid "Please give a tolerance in meters"
 msgstr "Please give a tolerance in metres"
 
 msgid "Select as much as you like:"
-msgstr ""
+msgstr "Select as much as you like:"
 
 msgid "Survey"
-msgstr ""
+msgstr "Survey"
 
 msgid "Aerial Photography"
-msgstr ""
+msgstr "Aerial Photography"
 
 msgid "Web Recherche"
 msgstr ""
 
 msgid "Trusted persons told me"
-msgstr ""
+msgstr "Trusted persons told me"
 
 msgid "Which source did you use?"
-msgstr ""
+msgstr "Which source did you use?"
 
 msgid "never"
-msgstr ""
+msgstr "never"
 
 msgid "Primary user-ID: "
-msgstr ""
+msgstr "Primary user-ID: "
 
 msgid "Key-ID: "
-msgstr ""
+msgstr "Key-ID: "
 
 msgid "Fingerprint: "
-msgstr ""
+msgstr "Fingerprint: "
 
 msgid "Algorithm: "
-msgstr ""
+msgstr "Algorithm: "
 
 msgid "Strength in bit: "
 msgstr ""
 
 msgid "Creation date: "
-msgstr ""
+msgstr "Creation date: "
 
 msgid "Expiration date: "
-msgstr ""
+msgstr "Expiration date: "
 
 msgid "PGP-Key details"
 msgstr ""
 
 msgid "User-ID:"
-msgstr ""
+msgstr "User-ID:"
 
 msgid "Select algorithm:"
-msgstr ""
+msgstr "Select algorithm:"
 
 msgid "Choose Bitlength (Strength):"
 msgstr ""
 
 msgid "Encryption algorithm to protect private key:"
-msgstr ""
+msgstr "Encryption algorithm to protect private key:"
 
 msgid "Choose an expiry date for the key:"
-msgstr ""
+msgstr "Choose an expiry date for the key:"
 
 msgid "Create a new signing key"
 msgstr ""
 
 msgid "No such lane."
-msgstr ""
+msgstr "No such lane."
 
 msgid ""
 "<html>The number of lanes is not specified for one or more roads; please add "
 "missing lanes tags.</html>"
 msgstr ""
+"<html>The number of lanes is not specified for one or more roads; please add "
+"missing lanes tags.</html>"
 
 msgid ""
 "<html>An error occurred while constructing the model. Please run the "
@@ -29855,10 +30737,10 @@ msgid ""
 msgstr ""
 
 msgid "Edit turn relations and lane lengths for selected node."
-msgstr ""
+msgstr "Edit turn relations and lane lengths for selected node."
 
 msgid "Validate turn- and lane-length-relations for consistency."
-msgstr ""
+msgstr "Validate turn- and lane-length-relations for consistency."
 
 msgid "Turn Lanes"
 msgstr ""
@@ -29873,16 +30755,16 @@ msgid "Revalidate all turnlanes-relations."
 msgstr ""
 
 msgid "Automatically fixes the issue."
-msgstr ""
+msgstr "Automatically fixes the issue."
 
 msgid "Selects the offending relation."
-msgstr ""
+msgstr "Selects the offending relation."
 
 msgid "Add turn"
 msgstr ""
 
 msgid "Delete lane."
-msgstr ""
+msgstr "Delete lane."
 
 msgid "Delete turn."
 msgstr ""
@@ -29891,16 +30773,16 @@ msgid "{0} lanes are not referenced in any turn-relation."
 msgstr ""
 
 msgid "Put the ways in order."
-msgstr ""
+msgstr "Put the ways in order."
 
 msgid "Relation references non-existent (regular) lane {0}"
 msgstr ""
 
 msgid "Relation references non-existent extra lane {0}"
-msgstr ""
+msgstr "Relation references non-existent extra lane {0}"
 
 msgid "Integer list \"{0}\" contains unexpected values."
-msgstr ""
+msgstr "Integer list \"{0}\" contains unexpected values."
 
 msgid "Create/Edit turn restriction..."
 msgstr "Create/Edit turn restriction..."
@@ -29919,13 +30801,13 @@ msgid ""
 msgstr ""
 
 msgid "Type:"
-msgstr ""
+msgstr "Type:"
 
 msgid "From:"
-msgstr ""
+msgstr "From:"
 
 msgid "To:"
-msgstr ""
+msgstr "To:"
 
 msgid "Vias:"
 msgstr ""
@@ -29934,7 +30816,7 @@ msgid "Copy to the clipboard"
 msgstr "Copy to the clipboard"
 
 msgid "Cannot find object with id ''{0}'' in layer ''{1}''"
-msgstr ""
+msgstr "Cannot find object with id ''{0}'' in layer ''{1}''"
 
 msgid ""
 "Cannot add object ''{0}'' as relation member because it is deleted or "
@@ -29942,16 +30824,16 @@ msgid ""
 msgstr ""
 
 msgid "Clear the selected roles or delete the selected members"
-msgstr ""
+msgstr "Clear the selected roles or delete the selected members"
 
 msgid "Insert new relation members from object in the clipboard"
-msgstr ""
+msgstr "Insert new relation members from object in the clipboard"
 
 msgid "Move the selected relation members down by one position"
-msgstr ""
+msgstr "Move the selected relation members down by one position"
 
 msgid "Move the selected relation members up by one position"
-msgstr ""
+msgstr "Move the selected relation members up by one position"
 
 msgid "Edit basic attributes of a turn restriction"
 msgstr "Edit basic attributes of a turn restriction"
@@ -29960,7 +30842,7 @@ msgid "Edit the raw tags and members of this turn restriction"
 msgstr ""
 
 msgid "Errors/Warnings"
-msgstr ""
+msgstr "Errors/Warnings"
 
 msgid "Show errors and warnings related to this turn restriction"
 msgstr ""
@@ -30064,19 +30946,19 @@ msgstr[0] ""
 msgstr[1] ""
 
 msgid "no issues"
-msgstr ""
+msgstr "no issues"
 
 msgid "please select a way"
 msgstr "please select a way"
 
 msgid "multiple objects with role ''{0}''"
-msgstr ""
+msgstr "multiple objects with role ''{0}''"
 
 msgid "Delete from turn restriction"
 msgstr "Delete from turn restriction"
 
 msgid "Accept the currently selected way"
-msgstr ""
+msgstr "Accept the currently selected way"
 
 msgid "Paste from the clipboard"
 msgstr "Paste from the clipboard"
@@ -30138,10 +31020,10 @@ msgid "Mopeds"
 msgstr ""
 
 msgid "Use standard exceptions"
-msgstr ""
+msgstr "Use standard exceptions"
 
 msgid "Use non-standard exceptions"
-msgstr ""
+msgstr "Use non-standard exceptions"
 
 msgid "Remove the currently selected vias"
 msgstr "Remove the currently selected vias"
@@ -30167,11 +31049,11 @@ msgstr ""
 
 msgctxt "turnrestrictions"
 msgid "From:"
-msgstr ""
+msgstr "From:"
 
 msgctxt "turnrestriction"
 msgid "To:"
-msgstr ""
+msgstr "To:"
 
 msgid "no participating way with role ''from''"
 msgstr "no participating way with role ''from''"
@@ -30224,7 +31106,7 @@ msgid ""
 msgstr ""
 
 msgid "Configure the preferences for the turnrestrictions plugin"
-msgstr ""
+msgstr "Configure the preferences for the turnrestrictions plugin"
 
 msgid "Sponsor"
 msgstr "Sponsor"
@@ -30239,18 +31121,20 @@ msgid "Display and edit list of via-objects in the Basic Editor"
 msgstr ""
 
 msgid "Road signs - Set A"
-msgstr ""
+msgstr "Road signs - Set A"
 
 msgid "Road signs - Set B"
-msgstr ""
+msgstr "Road signs - Set B"
 
 msgid "Please select the set of road sign icons to be used in the plugin."
-msgstr ""
+msgstr "Please select the set of road sign icons to be used in the plugin."
 
 msgid ""
 "Warning: the preference with key ''{0}'' has an unsupported value ''{1}''. "
 "Assuming the default value ''set-a''."
 msgstr ""
+"Warning: the preference with key ''{0}'' has an unsupported value ''{1}''. "
+"Assuming the default value ''set-a''."
 
 msgid ""
 "This turn restriction uses the way <span class=\"object-name\">{0}</span> "
@@ -30260,23 +31144,24 @@ msgid ""
 msgstr ""
 
 msgid "Delete ''from''"
-msgstr ""
+msgstr "Delete ''from''"
 
 msgid "Removes the member with role ''from''"
-msgstr ""
+msgstr "Removes the member with role ''from''"
 
 msgid "Delete ''to''"
-msgstr ""
+msgstr "Delete ''to''"
 
 msgid "Removes the member with role ''to''"
-msgstr ""
+msgstr "Removes the member with role ''to''"
 
 msgid "Fix in editor"
-msgstr ""
+msgstr "Fix in editor"
 
 msgid ""
 "Go to Basic Editor and manually choose members with roles ''from'' and ''to''"
 msgstr ""
+"Go to Basic Editor and manually choose members with roles ''from'' and ''to''"
 
 msgid ""
 "This turn restriction uses a non-standard restriction type <tt>{0}</tt> for "
@@ -30318,16 +31203,16 @@ msgid "A way with role <tt>to</tt> is required in a turn restriction."
 msgstr ""
 
 msgid "Please go to the Basic editor and manually choose a way."
-msgstr ""
+msgstr "Please go to the Basic editor and manually choose a way."
 
 msgid "Add in editor"
-msgstr ""
+msgstr "Add in editor"
 
 msgid "Add a way with role ''from''"
-msgstr ""
+msgstr "Add a way with role ''from''"
 
 msgid "Add a way with role ''to''"
-msgstr ""
+msgstr "Add a way with role ''to''"
 
 msgid ""
 "The two ways participating in the turn restriction <strong>aren''t "
@@ -30353,7 +31238,7 @@ msgid ""
 msgstr ""
 
 msgid "Go to the Advanced Editor and remove the members"
-msgstr ""
+msgstr "Go to the Advanced Editor and remove the members"
 
 msgid ""
 "The tag <tt>except</tt> has the non-standard value <tt>{0}</tt>. It is "
@@ -30364,13 +31249,13 @@ msgid "Go to Basic Editor and select standard vehicle type based exceptions"
 msgstr ""
 
 msgid "The required tag <tt>{0}={1}</tt> is missing."
-msgstr ""
+msgstr "The required tag <tt>{0}={1}</tt> is missing."
 
 msgid "Add missing tag"
-msgstr ""
+msgstr "Add missing tag"
 
 msgid "Add the missing tag {0}={1}"
-msgstr ""
+msgstr "Add the missing tag {0}={1}"
 
 msgid ""
 "The way <span class=\"object-name\">{0}</span> with role <tt>from</tt> and "
@@ -30402,102 +31287,107 @@ msgid ""
 msgstr ""
 
 msgid "A way is required instead."
-msgstr ""
+msgstr "A way is required instead."
 
 msgid "Delete the member from the turn restriction"
 msgstr ""
 
 msgid "Change to the Basic Editor and select a way"
-msgstr ""
+msgstr "Change to the Basic Editor and select a way"
 
 msgid "Undelete object..."
-msgstr ""
+msgstr "Undelete object..."
 
 msgid "Undelete object by id"
-msgstr ""
+msgstr "Undelete object by id"
 
 msgid "Unable to undelete node {0}. Object has likely been redacted"
-msgstr ""
+msgstr "Unable to undelete node {0}. Object has probably been redacted"
 
 msgid "Unable to undelete way {0}. Object has likely been redacted"
-msgstr ""
+msgstr "Unable to undelete way {0}. Object has probably been redacted"
 
 msgid "Unable to undelete relation {0}. Object has likely been redacted"
-msgstr ""
+msgstr "Unable to undelete relation {0}. Object has probably been redacted"
 
 msgid "Undelete Object"
-msgstr ""
+msgstr "Undelete Object"
 
 msgid "Undelete object"
-msgstr ""
+msgstr "Undelete object"
 
 msgid ""
 "Enter the type and ID of the objects that should be undeleted, e.g., ''n1 "
 "w2''"
 msgstr ""
+"Enter the type and ID of the objects that should be undeleted, e.g., ''n1 "
+"w2''"
 
 msgid "Select if the data should be added into a new layer"
-msgstr ""
+msgstr "Select if the data should be added into a new layer"
 
 msgid "Start undeleting"
-msgstr ""
+msgstr "Start undeleting"
 
 msgid "Close dialog and cancel"
 msgstr "Close dialogue and cancel"
 
 msgid "Add nodes at intersections"
-msgstr ""
+msgstr "Add nodes at intersections"
 
 msgid "Add missing nodes at intersections of selected ways."
-msgstr ""
+msgstr "Add missing nodes at intersections of selected ways."
 
 msgid "Please select one or more ways with intersections of segments."
-msgstr ""
+msgstr "Please select one or more ways with intersections of segments."
 
 msgid "Align Way Nodes"
-msgstr ""
+msgstr "Align Way Nodes"
 
 msgid "Align nodes in a way"
-msgstr ""
+msgstr "Align nodes in a way"
 
 msgid "The way with selected nodes can not be straightened."
 msgstr "The way with selected nodes cannot be straightened."
 
 msgid "Internal error: number of nodes is {0}."
-msgstr ""
+msgstr "Internal error: number of nodes is {0}."
 
 msgid "Extract node"
-msgstr ""
+msgstr "Extract node"
 
 msgid "Extracts node from a way"
-msgstr ""
+msgstr "Extracts node from a way"
 
 msgid ""
 "This tool extracts node from its ways and requires single node to be "
 "selected."
 msgstr ""
+"This tool extracts node from its ways and requires single node to be "
+"selected."
 
 msgid "Extract node from line"
-msgstr ""
+msgstr "Extract node from line"
 
 msgid "Paste Relations"
-msgstr ""
+msgstr "Paste Relations"
 
 msgid ""
 "Paste relation membership from objects in the buffer onto selected object(s)"
 msgstr ""
+"Paste relation membership from objects in the buffer onto selected object(s)"
 
 msgid "Split Object"
-msgstr ""
+msgstr "Split Object"
 
 msgid "Split an object at the selected nodes."
-msgstr ""
+msgstr "Split an object at the selected nodes."
 
 msgid "The current selection cannot be used for splitting."
 msgstr "The current selection cannot be used for splitting."
 
 msgid "The selected way is not closed."
-msgstr ""
+msgstr "The selected way is not closed."
 
 msgid "The selected way does not contain the selected node."
 msgid_plural "The selected way does not contain all the selected nodes."
@@ -30508,56 +31398,63 @@ msgid ""
 "The selected way is not a split way, please select split points or split way "
 "too."
 msgstr ""
+"The selected way is not a split way, please select split points or split way "
+"too."
 
 msgid "The selected nodes can not be consecutive nodes in the object."
 msgstr "The selected nodes cannot be consecutive nodes in the object."
 
 msgid "Split adjacent ways"
-msgstr ""
+msgstr "Split adjacent ways"
 
 msgid "Split adjacent ways on T-intersections"
-msgstr ""
+msgstr "Split adjacent ways on T-intersections"
 
 msgid ""
 "There are several ways containing one of the splitting nodes. Select ways "
 "participating in this operation."
 msgstr ""
+"There are several ways containing one of the splitting nodes. Select ways "
+"participating in this operation."
 
 msgid "Symmetry"
-msgstr ""
+msgstr "Symmetry"
 
 msgid ""
 "Please select at least two nodes for symmetry axis and something else to "
 "mirror."
 msgstr ""
+"Please select at least two nodes for symmetry axis and something else to "
+"mirror."
 
 msgid "Copy tags from previous selection"
-msgstr ""
+msgstr "Copy tags from previous selection"
 
 msgid "Pastes tags of previously selected object(s)"
-msgstr ""
+msgstr "Pastes tags of previously selected object(s)"
 
 msgid "Add Source Tag"
-msgstr ""
+msgstr "Add Source Tag"
 
 msgid "Add remembered source tag"
-msgstr ""
+msgstr "Add remembered source tag"
 
 msgid "UnGlue Relation"
-msgstr ""
+msgstr "UnGlue Relation"
 
 msgid ""
 "Duplicate nodes, ways and relations that are used by multiple relations."
 msgstr ""
+"Duplicate nodes, ways and relations that are used by multiple relations."
 
 msgid "UnGlue Relations"
-msgstr ""
+msgstr "UnGlue Relations"
 
 msgid "Unglued Relations"
-msgstr ""
+msgstr "Unglued Relations"
 
 msgid "Change relation member for {0} {1}"
-msgstr ""
+msgstr "Change relation member for {0} {1}"
 
 msgid "Circle arc"
 msgstr ""
@@ -30566,34 +31463,34 @@ msgid "Create a circle arc"
 msgstr ""
 
 msgid "Select custom URL"
-msgstr ""
+msgstr "Select custom URL"
 
 msgid "Please select one of custom URLs (configured in Preferences)"
-msgstr ""
+msgstr "Please select one of custom URLs (configured in Preferences)"
 
 msgid "Ask every time"
-msgstr ""
+msgstr "Ask every time"
 
 msgid "Configure custom URL"
-msgstr ""
+msgstr "Configure custom URL"
 
 msgid "Open custom URL"
-msgstr ""
+msgstr "Open custom URL"
 
 msgid "Opens specified URL browser"
-msgstr ""
+msgstr "Opens specified URL browser"
 
 msgid "Utilsplugin2 settings"
-msgstr ""
+msgstr "Utilsplugin2 settings"
 
 msgid "Here you can change some preferences of Utilsplugin2 functions"
 msgstr ""
 
 msgid "Save to file"
-msgstr ""
+msgstr "Save to file"
 
 msgid "Load from file"
-msgstr ""
+msgstr "Load from file"
 
 msgid ""
 "Please edit custom URLs and select one row to use with the tool<br/> "
@@ -30613,13 +31510,13 @@ msgstr ""
 "<b>customurl.txt</b> in JOSM folder"
 
 msgid "Custom URL configuration"
-msgstr ""
+msgstr "Custom URL configuration"
 
 msgid "Lat Lon tool"
-msgstr ""
+msgstr "Lat Lon tool"
 
 msgid "Create geometry by entering lat lon coordinates for it."
-msgstr ""
+msgstr "Create geometry by entering lat lon coordinates for it."
 
 msgid ""
 "Enter the coordinates for the new nodes, one for each line.<br/>If you enter "
@@ -30644,86 +31541,115 @@ msgid ""
 "24.5</li><li>-49 29.4 N -19 24.5 W</li></ul><li>48 deg 42' 52.13\" N, 21 "
 "deg 11' 47.60\" E</li></ul>"
 msgstr ""
+"Enter the coordinates for the new nodes, one for each line.<br/>If you enter "
+"two lines with the same coordinates there will be generated duplicate "
+"nodes.<br/>You can separate longitude and latitude with space, comma or "
+"semicolon.<br/>Use positive numbers or N, E characters to indicate North or "
+"East cardinal direction.<br/>For South and West cardinal directions you can "
+"use either negative numbers or S, W characters.<br/>Coordinate value can be "
+"in one of three "
+"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
+"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
+"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
+"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional.<br/><br/>Some examples:<ul><li>49.29918° "
+"19.24788°</li><li>N 49.29918 E 19.24788</li><li>W 49°29.918' S "
+"19°24.788'</li><li>N 49°29'04" E "
+"19°24'43"</li><li>49.29918 N, 19.24788 "
+"E</li><li>49°29'21" N 19°24'38" E</li><li>49 29 "
+"51, 19 24 18</li><li>49 29, 19 24</li><li>E 49 29, N 19 24</li><li>49° "
+"29; 19° 24</li><li>N 49° 29, W 19° 24</li><li>49° 29.5 S, "
+"19° 24.6 E</li><li>N 49 29.918 E 19 15.88</li><li>49 29.4 19 "
+"24.5</li><li>-49 29.4 N -19 24.5 W</li></ul><li>48 deg 42' 52.13\" N, 21 "
+"deg 11' 47.60\" E</li></ul>"
 
 msgid "Tag multiple objects [alpha]"
-msgstr ""
+msgstr "Tag multiple objects [alpha]"
 
 msgid "Edit tags of object list in table"
-msgstr ""
+msgstr "Edit tags of object list in table"
 
 msgid "Tag multiple objects"
-msgstr ""
+msgstr "Tag multiple objects"
 
 msgid "Sync with JOSM selection"
-msgstr ""
+msgstr "Sync with JOSM selection"
 
 msgid "Zoom to objects"
-msgstr ""
+msgstr "Zoom to objects"
 
 msgid "Remove tag"
-msgstr ""
+msgstr "Remove tag"
 
 msgid "Delete tags from multiple objects"
-msgstr ""
+msgstr "Delete tags from multiple objects"
 
 msgid "Duplicate tags from the first"
-msgstr ""
+msgstr "Duplicate tags from the first"
 
 msgid "Set tags for multiple objects"
-msgstr ""
+msgstr "Set tags for multiple objects"
 
 msgid "Delete from history"
-msgstr ""
+msgstr "Delete from history"
 
 msgid "Find primitives with these tags"
-msgstr ""
+msgstr "Find primitives with these tags"
 
 msgid "Multitag Background: highlight"
-msgstr ""
+msgstr "Multitag Background: highlight"
 
 msgid "Replace Geometry"
-msgstr ""
+msgstr "Replace Geometry"
 
 msgid "Replace geometry of selected object with a new one"
-msgstr ""
+msgstr "Replace geometry of selected object with a new one"
 
 msgid ""
 "This tool replaces geometry of one object with another, and so requires "
 "exactly two objects to be selected."
 msgstr ""
+"This tool replaces geometry of one object with another, and so requires "
+"exactly two objects to be selected."
 
 msgid ""
 "This tool can only replace a node, upgrade a node to a way or a "
 "multipolygon, or replace a way with a way."
 msgstr ""
+"This tool can only replace a node, upgrade a node to a way or a "
+"multipolygon, or replace a way with a way."
 
 msgid "Node belongs to way(s), cannot replace."
-msgstr ""
+msgstr "Node belongs to way(s), cannot replace."
 
 msgid "Replace geometry for node {0}"
-msgstr ""
+msgstr "Replace geometry for node {0}"
 
 msgid "Relation is not a multipolygon, cannot be used as a replacement."
-msgstr ""
+msgstr "Relation is not a multipolygon, cannot be used as a replacement."
 
 msgid ""
 "Please select one way that exists in the database and one new way with "
 "correct geometry."
 msgstr ""
+"Please select one way that exists in the database and one new way with "
+"correct geometry."
 
 msgid "The ways must be entirely within the downloaded area."
-msgstr ""
+msgstr "The ways must be entirely within the downloaded area."
 
 msgid ""
 "The way to be replaced cannot have any nodes with properties or relation "
 "memberships unless they belong to both ways."
 msgstr ""
+"The way to be replaced cannot have any nodes with properties or relation "
+"memberships unless they belong to both ways."
 
 msgid "Exceeded iteration limit for robust method, using simpler method."
-msgstr ""
+msgstr "Exceeded iteration limit for robust method, using simpler method."
 
 msgid "Replace geometry for way {0}"
-msgstr ""
+msgstr "Replace geometry for way {0}"
 
 msgid "Range of child primitives count"
 msgstr ""
@@ -30738,191 +31664,195 @@ msgid "Range of attached ways count"
 msgstr ""
 
 msgid "Adjacent nodes"
-msgstr ""
+msgstr "Adjacent nodes"
 
 msgid "Select adjacent nodes"
-msgstr ""
+msgstr "Select adjacent nodes"
 
 msgid "Adjacent ways"
-msgstr ""
+msgstr "Adjacent ways"
 
 msgid "Adjacent ways will be selected. Nodes will be deselected."
-msgstr ""
+msgstr "Adjacent ways will be selected. Nodes will be deselected."
 
 msgid "All connected ways"
-msgstr ""
+msgstr "All connected ways"
 
 msgid "Select all connected ways"
-msgstr ""
+msgstr "Select all connected ways"
 
 msgid "Intersecting ways"
-msgstr ""
+msgstr "Intersecting ways"
 
 msgid "Select intersecting ways"
-msgstr ""
+msgstr "Select intersecting ways"
 
 msgid "Please select some ways to find connected and intersecting ways!"
-msgstr ""
+msgstr "Please select some ways to find connected and intersecting ways!"
 
 msgid "All intersecting ways"
-msgstr ""
+msgstr "All intersecting ways"
 
 msgid "Select all intersecting ways"
-msgstr ""
+msgstr "Select all intersecting ways"
 
 msgid "Please select some ways to find all connected and intersecting ways!"
-msgstr ""
+msgstr "Please select some ways to find all connected and intersecting ways!"
 
 msgid "Middle nodes"
-msgstr ""
+msgstr "Middle nodes"
 
 msgid "Select middle nodes"
-msgstr ""
+msgstr "Select middle nodes"
 
 msgid "Please select two nodes connected by way!"
-msgstr ""
+msgstr "Please select two nodes connected by way!"
 
 msgid "Too many ways are added: {0}!"
-msgstr ""
+msgstr "Too many ways are added: {0}!"
 
 msgid "All inside [testing]"
-msgstr ""
+msgstr "All inside [testing]"
 
 msgid "Select all inside selected polygons"
-msgstr ""
+msgstr "Select all inside selected polygons"
 
 msgid ""
 "Nothing found. Please select some closed ways or multipolygons to find all "
 "primitives inside them!"
 msgstr ""
+"Nothing found. Please select some closed ways or multipolygons to find all "
+"primitives inside them!"
 
 msgid "Area boundary [testing]"
-msgstr ""
+msgstr "Area boundary [testing]"
 
 msgid "Select relation or all ways that forms area boundary"
-msgstr ""
+msgstr "Select relation or all ways that forms area boundary"
 
 msgid ""
 "Nothing found. Please select way that is a part of some polygon formed by "
 "connected ways"
 msgstr ""
+"Nothing found. Please select way that is a part of some polygon formed by "
+"connected ways"
 
 msgid "Select Highway"
-msgstr ""
+msgstr "Select Highway"
 
 msgid "Select highway for the name/ref given"
-msgstr ""
+msgstr "Select highway for the name/ref given"
 
 msgid "Please select one or two ways for this action"
-msgstr ""
+msgstr "Please select one or two ways for this action"
 
 msgid "Select last modified nodes"
-msgstr ""
+msgstr "Select last modified nodes"
 
 msgid "Select last modified ways"
-msgstr ""
+msgstr "Select last modified ways"
 
 msgid "Select Way Nodes"
-msgstr ""
+msgstr "Select Way Nodes"
 
 msgid "Select all nodes of a selected way."
-msgstr ""
+msgstr "Select all nodes of a selected way."
 
 msgid "Undo selection"
-msgstr ""
+msgstr "Undo selection"
 
 msgid "Reselect last added object or selection form history"
-msgstr ""
+msgstr "Reselect last added object or selection form history"
 
 msgid "Unselect nodes"
-msgstr ""
+msgstr "Unselect nodes"
 
 msgid "Removes all nodes from selection"
-msgstr ""
+msgstr "Removes all nodes from selection"
 
 msgid "Import Video"
-msgstr ""
+msgstr "Import Video"
 
 msgid "Sync a video against this GPS track"
-msgstr ""
+msgstr "Sync a video against this GPS track"
 
 msgid "Remove Video"
-msgstr ""
+msgstr "Remove Video"
 
 msgid "removes current video from layer"
-msgstr ""
+msgstr "removes current video from layer"
 
 msgid "Play/Pause"
 msgstr "Play/Pause"
 
 msgid "starts/pauses video playback"
-msgstr ""
+msgstr "starts/pauses video playback"
 
 msgid "Video: {0}"
-msgstr ""
+msgstr "Video: {0}"
 
 msgid "Backward"
-msgstr ""
+msgstr "Backwards"
 
 msgid "jumps n sec back"
-msgstr ""
+msgstr "jumps n sec back"
 
 msgid "Forward"
 msgstr "Forwards"
 
 msgid "jumps n sec forward"
-msgstr ""
+msgstr "jumps n sec forwards"
 
 msgid "Faster"
 msgstr "Faster"
 
 msgid "faster playback"
-msgstr ""
+msgstr "faster playback"
 
 msgid "Slower"
 msgstr "Slower"
 
 msgid "slower playback"
-msgstr ""
+msgstr "slower playback"
 
 msgid "Jump To"
-msgstr ""
+msgstr "Jump To"
 
 msgid "jumps to the entered gps time"
-msgstr ""
+msgstr "jumps to the entered gps time"
 
 msgid "Loop"
-msgstr ""
+msgstr "Loop"
 
 msgid "loops n sec around current position"
-msgstr ""
+msgstr "loops n sec around current position"
 
 msgid "Keep centered"
 msgstr "Keep centred"
 
 msgid "follows the video icon automatically"
-msgstr ""
+msgstr "follows the video icon automatically"
 
 msgid "Subtitles"
-msgstr ""
+msgstr "Subtitles"
 
 msgid "Show subtitles in video"
-msgstr ""
+msgstr "Show subtitles in video"
 
 msgid "Jump length"
-msgstr ""
+msgstr "Jump length"
 
 msgid "Set the length of a jump"
-msgstr ""
+msgstr "Set the length of a jump"
 
 msgid "Jump in video for x ms"
-msgstr ""
+msgstr "Jump in video for x ms"
 
 msgid "Loop length"
-msgstr ""
+msgstr "Loop length"
 
 msgid "Set the length around a looppoint"
-msgstr ""
+msgstr "Set the length around a looppoint"
 
 msgid "no deinterlacing"
 msgstr ""
@@ -30931,7 +31861,7 @@ msgid "deinterlacing using line doubling"
 msgstr ""
 
 msgid "deinterlacing using linear interpolation"
-msgstr ""
+msgstr "deinterlacing using linear interpolation"
 
 msgid ""
 "VLC library is not correctly initialized. Please check that VLC {0} is "
@@ -30943,34 +31873,34 @@ msgstr ""
 "be the same as the JRE that runs JOSM."
 
 msgid "Jump to"
-msgstr ""
+msgstr "Jump to"
 
 msgid "Jump to GPS time"
-msgstr ""
+msgstr "Jump to GPS time"
 
 msgid "Shows current position in the video"
-msgstr ""
+msgstr "Shows current position in the video"
 
 msgid "Sync"
-msgstr ""
+msgstr "Sync"
 
 msgid "Unable to find JNA Java library!"
-msgstr ""
+msgstr "Unable to find JNA Java library!"
 
 msgid "Unable to find native libvlc library!"
-msgstr ""
+msgstr "Unable to find native libvlc library!"
 
 msgid "play"
-msgstr ""
+msgstr "play"
 
 msgid "loop"
-msgstr ""
+msgstr "loop"
 
 msgid "mute"
-msgstr ""
+msgstr "mute"
 
 msgid "Walking Papers Scanned Map"
-msgstr ""
+msgstr "Walking Papers Scanned Map"
 
 msgid ""
 "Display a map that was previously scanned and uploaded to walking-papers.org"
@@ -31042,26 +31972,24 @@ msgid "Node ''{0}'' is a junction with more than 2 connected ways."
 msgstr "Node ''{0}'' is a junction with more than 2 connected ways."
 
 msgid "Enter search expression here.."
-msgstr ""
+msgstr "Enter search expression here.."
 
 msgid "Select waypoint to move map"
-msgstr ""
+msgstr "Select waypoint to move map"
 
 msgid "Waypoint search"
-msgstr ""
+msgstr "Waypoint search"
 
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr "Search after waypoint. Click and move the map view to the waypoint."
 
-msgid "Way Select"
-msgstr "Way Select"
-
 msgid "Add names from Wikipedia"
 msgstr "Add names from Wikipedia"
 
 msgid ""
 "Fetches interwiki links from Wikipedia in order to add several name tags"
 msgstr ""
+"Fetches interwiki links from Wikipedia in order to add several name tags"
 
 msgid ""
 "Copies the {0} template to the system clipboard instantiated with the "
@@ -31090,7 +32018,7 @@ msgid "Available in local dataset"
 msgstr "Available in local dataset"
 
 msgid "Not linked yet"
-msgstr ""
+msgstr "Not linked yet"
 
 msgid "{0}.Wikipedia.org"
 msgstr "{0}.Wikipedia.org"
diff --git a/i18n/po/eo.po b/i18n/po/eo.po
index e069e5d..36edee8 100644
--- a/i18n/po/eo.po
+++ b/i18n/po/eo.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2012-10-03 21:33+0000\n"
 "Last-Translator: Michael Moroni <michael.moroni at openmailbox.org>\n"
 "Language-Team: Esperanto <eo at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:38+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:39+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: eo\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -97,21 +97,18 @@ msgstr ""
 msgid "Updating user interface"
 msgstr ""
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "Ignorado de nekorekta URL de dosiero: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "Ignorado de nekorekta URL: \"{0}\""
 
 msgid "Warning"
 msgstr "Averto"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "Ignorado de nekorekta URL de dosiero: \"{0}\""
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "Ignorado de nekorekta URL: \"{0}\""
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -446,6 +443,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
 
@@ -1031,6 +1031,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr "Algluu"
 
@@ -1947,15 +1971,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr ""
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -1977,6 +1992,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2095,9 +2119,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2311,9 +2332,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr ""
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2527,6 +2554,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2569,6 +2600,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3019,6 +3053,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3136,10 +3188,44 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3329,6 +3415,12 @@ msgstr ""
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3356,13 +3448,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -3978,9 +4070,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -3990,12 +4079,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4176,13 +4277,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4380,6 +4481,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4593,43 +4695,54 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
 msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
 msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
 msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
 msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
-msgid "Menu: {0}"
+msgctxt "menu"
+msgid "Help"
 msgstr ""
 
-msgid "Save and load the current session (list of layers, etc.)"
+msgid "Menu: {0}"
 msgstr ""
 
 msgid "Edit toolbar"
@@ -4653,6 +4766,7 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
 msgstr ""
 
@@ -4775,58 +4889,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr ""
-
-msgid "Pos."
+msgid " ({0})"
 msgstr ""
 
-msgid "Role"
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5255,6 +5327,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr ""
+
 msgid "Primitive"
 msgstr ""
 
@@ -5495,6 +5570,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5641,6 +5719,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5744,7 +5857,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5872,6 +5985,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5881,17 +5999,48 @@ msgstr ""
 msgid "unknown"
 msgstr ""
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -5937,10 +6086,16 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
-msgid "Activate"
+msgid "Gamma"
 msgstr ""
 
-msgid "Activate the selected layer"
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
+msgid "Activate"
+msgstr ""
+
+msgid "Activate the selected layer"
 msgstr ""
 
 msgid "Activate layer"
@@ -6066,6 +6221,12 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
+msgid "Mini map"
+msgstr ""
+
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
 msgid "List of notes"
 msgstr ""
 
@@ -6124,10 +6285,15 @@ msgstr ""
 msgid "Enter the ID of the object that should be downloaded"
 msgstr ""
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6156,6 +6322,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr ""
 
+msgid "Selection"
+msgstr ""
+
 msgid "Open a selection list window."
 msgstr ""
 
@@ -6246,6 +6415,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -6840,6 +7015,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6931,14 +7112,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7111,6 +7291,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7646,6 +7832,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8491,6 +8680,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr ""
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr ""
 
@@ -8544,6 +8833,9 @@ msgstr ""
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8564,7 +8856,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8647,80 +8939,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr ""
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-
-msgid "Auto Zoom"
-msgstr ""
-
-msgid "Auto load tiles"
-msgstr ""
-
-msgid "Show Errors"
-msgstr ""
-
-msgid "Load Tile"
-msgstr ""
-
-msgid "Show Tile Info"
-msgstr ""
-
-msgid "Load All Tiles"
-msgstr ""
-
-msgid "Load All Error Tiles"
-msgstr ""
-
-msgid "Increase zoom"
-msgstr ""
-
-msgid "Decrease zoom"
-msgstr ""
-
-msgid "Snap to tile size"
-msgstr ""
-
-msgid "Flush Tile Cache"
-msgstr ""
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
@@ -8730,56 +8948,30 @@ msgstr ""
 msgid "No validation errors"
 msgstr ""
 
-msgid "Blank Layer"
-msgstr ""
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "Download visible tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-
-msgid "Change resolution"
-msgstr ""
-
-msgid "Reload erroneous tiles"
-msgstr ""
-
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Automatic downloading"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Zoom to native resolution"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Supported projections are: {0}"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Save WMS file"
+msgid "Try Again"
 msgstr ""
 
-msgid "Correlate to GPX"
+msgid "No images could be matched!"
 msgstr ""
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
@@ -8866,24 +9058,9 @@ msgstr ""
 msgid "Offset:"
 msgstr ""
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
 msgid "Correlate"
 msgstr ""
 
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9077,9 +9254,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr ""
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9142,9 +9316,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9770,16 +9941,16 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 
 msgid "Would you like to restart now?"
 msgstr ""
 
-msgid "Icon paths:"
+msgid "Download plugins"
+msgstr ""
+
+msgid "Icon paths:"
 msgstr ""
 
 msgid "Short Description:"
@@ -10571,6 +10742,21 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
+msgid "1. Enter getCapabilities URL"
+msgstr ""
+
+msgid "2. Enter name for this layer"
+msgstr ""
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr ""
 
@@ -10589,6 +10775,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10610,6 +10808,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10652,9 +10853,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr ""
 
@@ -10679,36 +10877,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr "% of oriento:"
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11644,6 +11827,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] ""
@@ -11752,6 +11943,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12005,6 +12199,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12545,6 +12742,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12930,6 +13130,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13924,6 +14137,9 @@ msgstr ""
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr ""
+
 msgid "Blue:"
 msgstr ""
 
@@ -13963,7 +14179,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -13975,9 +14191,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14086,6 +14299,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14099,12 +14315,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14141,10 +14363,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
+msgstr ""
+
+msgid "Geodatastyrelsen DTK Kort25"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14171,6 +14399,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14195,7 +14426,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14210,6 +14441,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14222,12 +14456,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14248,6 +14476,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14280,10 +14511,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14313,6 +14541,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14328,154 +14562,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14490,9 +14730,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14622,6 +14871,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14637,7 +14901,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -14963,6 +15227,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15047,11 +15316,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15105,7 +15369,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15120,9 +15384,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15203,6 +15464,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15241,6 +15510,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15316,9 +15588,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15724,6 +15993,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15748,10 +16025,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15768,6 +16041,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15784,11 +16061,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15804,6 +16093,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15816,6 +16109,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15843,6 +16140,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16234,6 +16543,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16310,6 +16622,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr ""
 
@@ -16847,6 +17162,12 @@ msgstr ""
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17036,6 +17357,11 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
 msgstr ""
 
@@ -17089,6 +17415,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17230,13 +17560,127 @@ msgstr ""
 msgid "public"
 msgstr ""
 
-msgid "Pier"
+msgid "Marine Fuel"
 msgstr ""
 
-msgid "Lock Gate"
-msgstr ""
+msgid "Agip"
+msgstr "Agip"
 
-msgid "Turning Point"
+msgid "Aral"
+msgstr "Aral"
+
+msgid "Avia"
+msgstr "Avia"
+
+msgid "BP"
+msgstr "BP"
+
+msgid "Chevron"
+msgstr "Chevron"
+
+msgid "Citgo"
+msgstr "Citgo"
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr "Esso"
+
+msgid "Exxon"
+msgstr "Exxon"
+
+msgid "Gulf"
+msgstr "Gulf"
+
+msgid "Mobil"
+msgstr "Mobil"
+
+msgid "OMV"
+msgstr "OMV"
+
+msgid "Petro-Canada"
+msgstr "Petro-Canada"
+
+msgid "Pioneer"
+msgstr "Pioneer"
+
+msgid "Q8"
+msgstr "Q8"
+
+msgid "Repsol"
+msgstr "Repsol"
+
+msgid "Shell"
+msgstr "Shell"
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr "Statoil"
+
+msgid "Sunoco"
+msgstr "Sunoco"
+
+msgid "Tamoil"
+msgstr "Tamoil"
+
+msgid "Texaco"
+msgstr "Texaco"
+
+msgid "Total"
+msgstr "Sumo"
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr "Dizelo"
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
+msgid "Pier"
+msgstr ""
+
+msgid "Lock Gate"
+msgstr ""
+
+msgid "Turning Point"
 msgstr ""
 
 msgid "Slipway"
@@ -17346,6 +17790,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -17469,78 +17916,6 @@ msgstr ""
 msgid "Fuel"
 msgstr ""
 
-msgid "Agip"
-msgstr "Agip"
-
-msgid "Aral"
-msgstr "Aral"
-
-msgid "Avia"
-msgstr "Avia"
-
-msgid "BP"
-msgstr "BP"
-
-msgid "Chevron"
-msgstr "Chevron"
-
-msgid "Citgo"
-msgstr "Citgo"
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr "Esso"
-
-msgid "Exxon"
-msgstr "Exxon"
-
-msgid "Gulf"
-msgstr "Gulf"
-
-msgid "Mobil"
-msgstr "Mobil"
-
-msgid "OMV"
-msgstr "OMV"
-
-msgid "Petro-Canada"
-msgstr "Petro-Canada"
-
-msgid "Pioneer"
-msgstr "Pioneer"
-
-msgid "Q8"
-msgstr "Q8"
-
-msgid "Repsol"
-msgstr "Repsol"
-
-msgid "Shell"
-msgstr "Shell"
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr "Statoil"
-
-msgid "Sunoco"
-msgstr "Sunoco"
-
-msgid "Tamoil"
-msgstr "Tamoil"
-
-msgid "Texaco"
-msgstr "Texaco"
-
-msgid "Total"
-msgstr "Sumo"
-
-msgid "Independent"
-msgstr ""
-
 msgid "With shop"
 msgstr ""
 
@@ -17550,51 +17925,12 @@ msgstr ""
 msgid "kiosk"
 msgstr ""
 
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr "Dizelo"
-
-msgid "Bio Diesel"
-msgstr ""
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -17813,9 +18149,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17834,6 +18167,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18036,6 +18372,12 @@ msgstr ""
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18126,6 +18468,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18340,6 +18685,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18827,7 +19175,7 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
@@ -18836,28 +19184,55 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
+msgid "Cardboard"
+msgstr ""
+
+msgid "Electrical Appliances"
+msgstr ""
+
 msgid "Glass"
 msgstr ""
 
+msgid "Glass Bottles"
+msgstr ""
+
+msgid "Green Waste"
+msgstr ""
+
 msgid "Paper"
 msgstr "Papero"
 
-msgid "Scrap Metal"
+msgid "Plastic"
 msgstr ""
 
-msgid "container"
+msgid "Plastic Bottles"
 msgstr ""
 
-msgid "centre"
+msgid "Plastic Packaging"
 msgstr ""
 
-msgid "Waste Basket/Trash Can"
+msgid "Scrap Metal"
 msgstr ""
 
-msgid "Waste Disposal/Dumpster"
+msgid "Shoes"
 msgstr ""
 
-msgid "Sanitary Dump Station"
+msgid "Small Appliances"
+msgstr ""
+
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
+msgstr ""
+
+msgid "Waste Basket/Trash Can"
+msgstr ""
+
+msgid "Waste Disposal/Dumpster"
+msgstr ""
+
+msgid "Sanitary Dump Station"
 msgstr ""
 
 msgid "Suction pumpout"
@@ -19052,6 +19427,9 @@ msgstr ""
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr ""
 
@@ -19227,12 +19605,18 @@ msgstr ""
 msgid "Basketball"
 msgstr ""
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr "Golfo"
 
@@ -19248,13 +19632,13 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
@@ -19278,9 +19662,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19299,9 +19680,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -19374,6 +19752,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20694,9 +21080,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -21709,12 +22092,12 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
-msgstr ""
-
 msgid "Email Address"
 msgstr "Retadreso"
 
+msgid "Fax Number"
+msgstr ""
+
 msgid "Image"
 msgstr ""
 
@@ -22139,6 +22522,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22163,6 +22549,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22223,6 +22621,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22313,9 +22714,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22685,6 +23095,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22739,9 +23152,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23485,47 +23895,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23534,10 +23953,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debug"
+msgstr ""
+
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24140,6 +24571,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr ""
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25246,365 +25680,671 @@ msgstr ""
 msgid "km/h"
 msgstr ""
 
-msgid "Track name: "
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr "oriento"
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr "nordo"
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr "okcidento"
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr "sudo"
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
+msgstr ""
+
+msgid "Connecting"
+msgstr ""
+
+msgid "Connected"
+msgstr ""
+
+msgid "no name"
+msgstr "ne nomo"
+
+msgid "Live GPS"
+msgstr ""
+
+msgid "Show GPS data."
 msgstr ""
 
-msgid "Update IRS adjustment layer"
+msgid "Status"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid "Way Info"
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Speed"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Course"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "filtering ways"
+msgid "Center Once"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Open MapDust"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "junctions"
+msgid "Missing input data"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Total images:"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "images"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Mapillary"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Check "
+msgid "Export pictures"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid "Search "
+msgid "Export images"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Import pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Import local pictures"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Select pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Join mode"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Walk mode"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Tracing"
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "View in website"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Copy key"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "east"
-msgstr "oriento"
-
-msgid "northeast"
+msgid "Edit on website"
 msgstr ""
 
-msgid "north"
-msgstr "nordo"
-
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
-msgstr "okcidento"
+msgid "Export selected sequence"
+msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
-msgstr "sudo"
+msgid "Rewrite imported images"
+msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
+msgid "Explore"
 msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
-msgstr "ne nomo"
+msgid "Reverse buttons position when displaying images."
+msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25625,6 +26365,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -25683,47 +26426,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -25956,6 +26658,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr ""
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27173,6 +27878,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27344,6 +28070,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27353,6 +28082,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27533,6 +28265,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27711,6 +28446,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27720,6 +28488,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -27956,9 +28727,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29441,9 +30209,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/es.po b/i18n/po/es.po
index deb0b09..4759125 100644
--- a/i18n/po/es.po
+++ b/i18n/po/es.po
@@ -7,16 +7,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
-"PO-Revision-Date: 2015-05-03 09:34+0000\n"
-"Last-Translator: Emilio Gomez Fernandez <Unknown>\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
+"PO-Revision-Date: 2015-10-02 22:37+0000\n"
+"Last-Translator: Pyro Maggot <isc.chungvazquez at gmail.com>\n"
 "Language-Team: Spanish <es at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:57+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 05:01+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: es\n"
 "X-Language: es_ES\n"
 "X-Source-Language: C\n"
@@ -99,21 +99,18 @@ msgstr "Cargando preferencias de imágenes"
 msgid "Updating user interface"
 msgstr "Actualizando interfaz de usuario"
 
-msgid "{0} completed in {1}"
-msgstr "{0} completado en {1}"
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "Ignorando URL de archivo incorrecta: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "Ignorando URL incorrecta: \"{0}\""
 
 msgid "Warning"
 msgstr "Atención"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "Ignorando URL de archivo incorrecta: \"{0}\""
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr "El parámetro «downloadgps» no acepta nombres ni URL de archivos"
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "Ignorando URL incorrecta: \"{0}\""
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -291,7 +288,7 @@ msgstr ""
 "descarga."
 
 msgid "Align Nodes in Line"
-msgstr "Alinear nodos en línea"
+msgstr "Alinear nodos en línea recta"
 
 msgid "Move the selected nodes in to a line."
 msgstr "Mover los nodos seleccionados a una línea."
@@ -463,6 +460,9 @@ msgstr "Activar panel de diálogos"
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Conmuta el panel de diálogos, maximiza la vista del mapa"
 
+msgid "Distribute Nodes"
+msgstr "Distribuir Nodos"
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
 "Distribuir los nodos seleccionados de forma equidistante a lo largo de una "
@@ -799,11 +799,12 @@ msgid "Unable to parse Lon/Lat"
 msgstr "Imposible analizar Lon/Lat"
 
 msgid "Lasso Mode"
-msgstr "Modo Lasso"
+msgstr "Modo Lazo"
 
 msgid "Lasso selection mode: select objects within a hand-drawn region"
 msgstr ""
-"Modo de selección Lasso: seleccionar objetos dentro de una región dibujada"
+"Modo de selección Lazo: seleccionar objetos dentro de una región dibujada a "
+"mano"
 
 msgid "Rectified Image..."
 msgstr "Imagen rectificada..."
@@ -1129,6 +1130,32 @@ msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 "Por favor, seleccione formas con angulos de aproximadamente 90 y 180 grados"
 
+msgid "Download from Overpass API ..."
+msgstr "Descargando desde la API Overpass..."
+
+msgid "Download map data from Overpass API server."
+msgstr "Descargar datos del mapa desde el servidor API Overpass."
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+"Genera una consulta de Overpass usando el asistente de consultas de OVerpass "
+"Turbo"
+
+msgid "Build query"
+msgstr "Generar consulta"
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr "Generar consulta"
+
+msgid "Parse error"
+msgstr "Error de análisis"
+
+msgid "Overpass query: "
+msgstr "Consulat de paso elevado: "
+
+msgid "Overpass server: "
+msgstr "Servidor de Overpass: "
+
 msgid "Paste"
 msgstr "Pegar"
 
@@ -1615,7 +1642,7 @@ msgstr[1] ""
 "seleccionados."
 
 msgid "Some irrelevant nodes have been removed from the selection"
-msgstr ""
+msgstr "Algunos nodos irrelevantes se han eliminado de la selección"
 
 msgid "Undo"
 msgstr "Deshacer"
@@ -2125,15 +2152,6 @@ msgstr "Autoensamblado de ángulos activo."
 msgid "Finish drawing."
 msgstr "Finalizar dibujo."
 
-msgid "FIX"
-msgstr "FIX"
-
-msgid "draw angle snap"
-msgstr "dibujar ajuste de ángulo"
-
-msgid "draw angle snap highlight"
-msgstr "resaltar dibujado de ángulo de corte"
-
 msgid "Toggle snapping by {0}"
 msgstr "Activar/Desactivar instantanea de {0}"
 
@@ -2155,6 +2173,15 @@ msgstr "0,45,90,..."
 msgid "0,30,45,60,90,..."
 msgstr "0,30,45,60,90,..."
 
+msgid "FIX"
+msgstr "FIX"
+
+msgid "draw angle snap"
+msgstr "dibujar ajuste de ángulo"
+
+msgid "draw angle snap highlight"
+msgstr "resaltar dibujado de ángulo de corte"
+
 msgid "Angle snapping"
 msgstr "Autoensamblado de ángulos"
 
@@ -2290,9 +2317,6 @@ msgstr ""
 "ParallelWayAction\n"
 "Las vías seleccionadas deben formar una vía sencilla sin ramificar"
 
-msgid "Make parallel way error"
-msgstr "Error creando vía paralela"
-
 msgid "Drag play head"
 msgstr "Arrastrar para reproducir la cabecera"
 
@@ -2531,9 +2555,15 @@ msgstr "todos los objetos"
 msgid "Also include incomplete and deleted objects in search."
 msgstr "Incluir en la búsqueda además objetos incompletos o eliminados"
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr "expresión regular"
 
+msgid "MapCSS selector"
+msgstr "Selector de MapCSS"
+
 msgid "add toolbar button"
 msgstr "añadir botón a la barra de herramientas"
 
@@ -2761,6 +2791,10 @@ msgid "RX"
 msgstr "Recepción (RX)"
 
 msgctxt "search"
+msgid "CSS"
+msgstr "CSS"
+
+msgctxt "search"
 msgid "A"
 msgstr "A"
 
@@ -2815,6 +2849,9 @@ msgstr "Se esperaba un rango de números"
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr "Elemento no esperado. Se esperaba {0} pero se encontró {1}"
 
+msgid "Failed to parse MapCSS selector"
+msgstr "Hubo una falla al interpretar el selector de MapCSS"
+
 msgid "Unexpected token: {0}"
 msgstr "Credencial de autentificación inexperada: {0}"
 
@@ -3314,6 +3351,24 @@ msgstr ""
 "<html>Se ha producido un fallo al crear el directorio para la caché: "
 "{0}</html>"
 
+msgid "Unable to delete temporary file {0}"
+msgstr "Incapaz de eliminar el archivo temporal {0}"
+
+msgid "Unable to set file non-readable {0}"
+msgstr "Incapaz de establecer el archivo no legible {0}"
+
+msgid "Unable to set file non-writable {0}"
+msgstr "Incapaz de establecer el archivo no grabable {0}"
+
+msgid "Unable to set file non-executable {0}"
+msgstr "Incapaz de establecer el archivo no ejecutable {0}"
+
+msgid "Unable to set file readable {0}"
+msgstr "Incapaz de establecer el archivo legible {0}"
+
+msgid "Unable to set file writable {0}"
+msgstr "Incapaz de establecer el archivo grabable {0}"
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3388,6 +3443,8 @@ msgid ""
 "Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
 "startup)."
 msgstr ""
+"Intenta habilitar la red IPv6, preferentemente IPv6 sobre IPv4 (solo "
+"funciona en el inicio)"
 
 msgid " (at line {0}, column {1})"
 msgstr " (a la línea {0}, columna {1})"
@@ -3453,14 +3510,53 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
-msgid "Not in cache"
-msgstr "No en caché"
-
 msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr ""
 "No se encuentra la proyección ''{0}'', el marcador ''{1}'' ya no puede ser "
 "utilizado"
 
+msgid "HTTP error {0} when loading tiles"
+msgstr "Error HTTP {0} al cargar teselas"
+
+msgid "Error downloading tiles: {0}"
+msgstr "Error descargando las teselas: {0}"
+
+msgid "Could not load image from tile server"
+msgstr "No se pudo cargar la imagen desde el servidor"
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+"{0} no es un argumento WMS válido. Por favor comprueba la URL de este "
+"servidor.\n"
+"{1}"
+
+msgid "Select WMTS layer"
+msgstr "Seleccionar capa WMTS"
+
+msgid "Layer name"
+msgstr "Nombre de la capa"
+
+msgid "Projection"
+msgstr "Proyección"
+
+msgid "Matrix set identifier"
+msgstr "Identificador de conjunto matriz"
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr "Sin capas definidas en el documento getCapabilities: {0}"
+
+msgid "No layer selected"
+msgstr "Sin capa seleccionada"
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
+msgstr ""
+"Solo teselas cuadradas son soportadas. {0}x{1} devuelto por el servidor por "
+"TileMatrix identifier {2}"
+
 msgid "ID > 0 expected. Got {0}."
 msgstr "Se esperaba un ID >0. Obtenido {0}"
 
@@ -3676,6 +3772,13 @@ msgstr "texto"
 msgid "areatext"
 msgstr "area de texto"
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr "Proyección UTM (''+proj=utm'') requiere el parámetro ''+zone=...''."
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+"Se espera un valor entero en rango 1-60 para el parámetro ''+zone=...''."
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 "El parámetro debe comenzar con un carácter de «+» (encontrados \\\"{0}\\\")"
@@ -3704,6 +3807,9 @@ msgstr "Elipsoide \\\"{0}\\\" no admitido."
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr "La combinación de parámetros de elipsoide no es admitida"
 
+msgid "Unknown datum identifier: ''{0}''"
+msgstr "Identificador de datum desconocido: ''{0}''"
+
 msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr "Elipsoide requerido (+ellps=* or +a=*, +b=*)"
 
@@ -3712,9 +3818,6 @@ msgstr ""
 "No se puede usar el archivo de desplazamiento de grilla \"{0}\" para la "
 "opción +nadgris."
 
-msgid "Unknown datum identifier: ''{0}''"
-msgstr "Identificador de datum desconocido: ''{0}''"
-
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
 msgstr "Se requiere (+datum=*, +towgs84=* or +nadgrids=*)"
 
@@ -3928,7 +4031,7 @@ msgid "Crossing waterway/highway"
 msgstr "Cruce de vía fluvial/carretera"
 
 msgid "Crossing boundaries"
-msgstr "Cruzando límites"
+msgstr "Límites que se cruzan"
 
 msgid "Crossing barriers"
 msgstr "Cruzando barreras"
@@ -3950,7 +4053,7 @@ msgid "Mixed type duplicated nodes"
 msgstr "Mezclar nodos con tipo duplicado"
 
 msgid "Highway duplicated nodes"
-msgstr "Nodos duplicados de autopista"
+msgstr "Nodos de vía duplicados"
 
 msgid "Railway duplicated nodes"
 msgstr "Nodos duplicados de ferrocarril"
@@ -4076,13 +4179,14 @@ msgstr ""
 "inverso"
 
 msgid "Long segments"
-msgstr ""
+msgstr "Segmentos largos"
 
 msgid "This tests for long way segments, which are usually errors."
 msgstr ""
+"Esto pone a prueba los segmentos largos, que usualmente tienen errores."
 
 msgid "Very long segment of {0} kilometers"
-msgstr ""
+msgstr "Segmento muy largo de {0} kilómetros"
 
 msgid "Tag checker (MapCSS based)"
 msgstr "Verificador de etiquetas (basado en MapCSS)"
@@ -4187,9 +4291,10 @@ msgstr ""
 
 msgid "Missing name:*={0}. Add tag with correct language key."
 msgstr ""
+"Nombre faltante:*={0}. Agrega etiqueta con la clave de idioma correcta."
 
 msgid "A name is missing, even though name:* exists."
-msgstr "Falta un nombre, a pesar de que existe:*."
+msgstr "Falta un nombre, a pesar de que existe name:*."
 
 msgid "Opening hours syntax"
 msgstr "Sintaxis de los horarios de apertura"
@@ -4258,24 +4363,24 @@ msgid "Way contains segment twice"
 msgstr "La vía contiene el mismo segmento 2 veces"
 
 msgid "Power lines"
-msgstr "Líneas de energía"
+msgstr "Líneas eléctrticas"
 
 msgid ""
 "Checks for nodes in power lines that do not have a power=tower/pole tag."
 msgstr ""
-"Busca nodos en líneas de energía que no tienen una etiqueta power=tower/pole."
+"Busca nodos en líneas eléctricas que no tienen una etiqueta power=tower/pole."
 
 msgid "Missing power tower/pole within power line"
 msgstr "No se encuentran torres o postes en el tendido eléctrico"
 
 msgid "Role verification problem"
-msgstr "Problema de verificación de rol"
+msgstr "Problema de verificación de función"
 
 msgid "Relation checker"
 msgstr "Comprobación de relaciones"
 
 msgid "Checks for errors in relations."
-msgstr "Verificar errores en las relaciones"
+msgstr "Buscar errores en las relaciones"
 
 msgid ""
 "Route scheme is unspecified. Add {0} ({1}=public_transport; {2}=legacy)"
@@ -4284,32 +4389,32 @@ msgstr ""
 "{2}=legacy)"
 
 msgid "Relation type is unknown"
-msgstr "Tipo de relación desconocida"
+msgstr "Tipo de relación desconocido"
 
 msgid "Relation is empty"
 msgstr "La relación está vacía"
 
 msgid "Role member does not match expression {0} in template {1}"
 msgstr ""
-"El rol del miembro no concuerda con la expresión {0} en la planilla {1}"
+"La función del miembro no concuerda con la expresión {0} en la planilla {1}"
 
 msgid ""
 "Role member type {0} does not match accepted list of {1} in template {2}"
 msgstr ""
-"El tipo de rol de miembro {0} no coincide con la lista aceptada de {1} en la "
-"plantilla {2}"
+"El tipo de función de miembro {0} no coincide con la lista aceptada de {1} "
+"en la plantilla {2}"
 
 msgid "<empty>"
 msgstr "<vacío>"
 
 msgid "Role {0} unknown in templates {1}"
-msgstr "Rol {0} desconocido en plantillas {1}"
+msgstr "Función {0} desconocida en plantillas {1}"
 
 msgid "Empty role type found when expecting one of {0}"
-msgstr "Se encontró rol vacío cuando se esperaba uno de {0}"
+msgstr "Se encontró un tipo de función vacío cuando se esperaba uno de {0}"
 
 msgid "Role {0} missing"
-msgstr "Falta el rol {0}"
+msgstr "Falta la función {0}"
 
 msgid "Number of {0} roles too low ({1})"
 msgstr "{0} es una cantidad de roles muy baja ({1})"
@@ -4323,16 +4428,15 @@ msgstr "Vías que se interseccionan ellas mismas"
 msgid ""
 "This test checks for ways that contain some of their nodes more than once."
 msgstr ""
-"Este test comprueba vías que contienen algunos de sus nodos más de una vez."
+"Este test busca vías que contengan algunos de sus nodos más de una vez."
 
 msgid "Similarly named ways"
-msgstr "Vías con nombres iguales"
+msgstr "Vías con nombres similares"
 
 msgid ""
 "This test checks for ways with similar names that may have been misspelled."
 msgstr ""
-"Este test comprueba vías con nombres similares por si pudieran haberse "
-"escrito mal."
+"Este test busca vías con nombres similares que podrían haberse escrito mal."
 
 msgid "Tag checker"
 msgstr "Corrector de etiquetas"
@@ -4353,11 +4457,11 @@ msgid ""
 "Could not access data file(s):\n"
 "{0}"
 msgstr ""
-"No es posible acceder al archivo de datos(s):\n"
+"No es posible acceder al archivo(s) de datos:\n"
 "{0}"
 
 msgid "Suspicious tag/value combinations"
-msgstr "Combinaciones de etiquetas/valores extraños"
+msgstr "Combinaciones de etiquetas/valores extrañas"
 
 msgid "Key ''{0}'' invalid."
 msgstr "Clave ''{0}'' no válida."
@@ -4379,25 +4483,34 @@ msgstr "Valor de la llave de la etiqueta más largo de lo permitido"
 msgid "Tags with empty values"
 msgstr "Etiquetas con valores vacíos"
 
-msgid "Invalid property key"
-msgstr "Clave de propiedad no válida"
-
 msgid "Invalid white space in property key"
 msgstr "Espacio en blanco no válido en la clave de propiedad"
 
 msgid "Property values start or end with white space"
 msgstr ""
-"Los valores de la propiedad empiezan y terminan con un espacio en blanco"
+"Los valores de la propiedad empiezan o terminan con un espacio en blanco"
 
 msgid "Property values contain HTML entity"
 msgstr "Los valores de propiedad contienen entidad de HTML"
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr "Llave \"{0}\" se parece a \"{1}\"."
+
+msgid "Misspelled property key"
+msgstr "Clave de propiedad mal escrito"
+
 msgid "Key ''{0}'' not in presets."
 msgstr "La clave ''{0}\" no existe en los predefinidos"
 
 msgid "Presets do not contain property key"
 msgstr "Esta clave no está predefinida"
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr "Valor ''{0}'' para clave ''{1}'' se parece a ''{2}''"
+
+msgid "Misspelled property value"
+msgstr "valor de la propiedad mal escrito"
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr "El valor \"{0}\" para la clave \"{1}\" no está en los predefinidos."
 
@@ -4408,11 +4521,11 @@ msgid "FIXMES"
 msgstr "FIXMES"
 
 msgid "Check property keys."
-msgstr "Comprobar las propiedades de las claves"
+msgstr "Comprobar las claves de propiedad."
 
 msgid "Validate that property keys are valid checking against list of words."
 msgstr ""
-"Validar que las propiedades de las claves son válidas analizando la lista de "
+"Validar que las claves de propiedad son válidas analizando la lista de "
 "comprobación de las palabras."
 
 msgid "Use complex property checker."
@@ -4428,7 +4541,7 @@ msgid "Data sources ({0})"
 msgstr "Orígenes de datos ({0})"
 
 msgid "Check property values."
-msgstr "Analizar propiedades de los valores."
+msgstr "Analizar valoresde las propiedades."
 
 msgid "Validate that property values are valid checking against presets."
 msgstr ""
@@ -4436,10 +4549,10 @@ msgstr ""
 "los predefinidos."
 
 msgid "Check for FIXMES."
-msgstr "Comprobar FIXMES"
+msgstr "Comprobar FIXMES."
 
 msgid "Looks for nodes or ways with FIXME in any property value."
-msgstr "Buscar nodos o viales con FIXME en cualquier propiedad de valor"
+msgstr "Buscar nodos o viales con FIXME como valor de cualquier propiedad."
 
 msgid "Fix tags"
 msgstr "Corregir etiquetas"
@@ -4466,7 +4579,7 @@ msgid "This test checks if turnrestrictions are valid."
 msgstr "Esta prueba verifica si las restricciones de giro son válidas"
 
 msgid "Unknown role"
-msgstr "Rol desconocido"
+msgstr "Función desconocida"
 
 msgid "Unknown member type"
 msgstr "Tipo de miembro desconocido"
@@ -4475,13 +4588,13 @@ msgid "More than one \"from\" way found"
 msgstr "Se encontró más de una vía \"de\""
 
 msgid "More than one \"to\" way found"
-msgstr "Se encontró más de una vía \"aA"
+msgstr "Se encontró más de una vía \"hacia\""
 
 msgid "More than one \"via\" node found"
 msgstr "Se encontró mas de un nodo \"vía\""
 
 msgid "Cannot mix node and way for role \"via\""
-msgstr "No se puede mezclar el nodo y la vía para el rol \"via\""
+msgstr "No se puede mezclar el nodo y la vía para la función \"via\""
 
 msgid "No \"from\" way found"
 msgstr "No se encontró una vía \"de\""
@@ -4503,7 +4616,7 @@ msgid "The \"to\" way does not start or end at a \"via\" node."
 msgstr "La vía \"to\" no comienza o no finaliza en un nodo \"via\"."
 
 msgid "The \"from\" and the first \"via\" way are not connected."
-msgstr "La vía \"desde\" y la primera via \"via\" no están conectadas."
+msgstr "La vía \"de\" y la primera vía \"via\" no están conectadas."
 
 msgid "The \"via\" ways are not connected."
 msgstr "Las vías \"vía\" no están conectadas."
@@ -4518,7 +4631,7 @@ msgid "This tests if ways which should be circular are closed."
 msgstr "Esto analiza si las vías circulares están cerradas."
 
 msgid "Unclosed way"
-msgstr "Via sin cerrar"
+msgstr "Vía sin cerrar"
 
 msgid "natural type {0}"
 msgstr "Tipo natural {0}"
@@ -4566,7 +4679,7 @@ msgid "Unconnected natural lands and landuses"
 msgstr "Usos del suelo y tierras naturales desconectados"
 
 msgid "Unconnected power ways"
-msgstr "Líneas de energía desconectadas"
+msgstr "Líneas eléctricas desconectadas"
 
 msgid "This test checks if a way has an endpoint very near to another way."
 msgstr ""
@@ -4585,15 +4698,14 @@ msgstr "Nodo de vía próximo a otro vial"
 msgid "Connected way end node near other way"
 msgstr "Conectado nodo de extremo de vía próximo a otro vial"
 
+msgid "Unconnected nodes without physical tags"
+msgstr "Nodos desconectados sin etiquetas físicas"
+
 msgid "Untagged and unconnected nodes"
 msgstr "Nodos aislados no etiquetados"
 
 msgid "This test checks for untagged nodes that are not part of any way."
-msgstr ""
-"Este test comprueba nodos sin etiquetar que no pertenecen a ninguna vía."
-
-msgid "Unconnected nodes without physical tags"
-msgstr "Nodos desconectados sin etiquetas físicas"
+msgstr "Este test busca nodos sin etiquetar que no pertenecen a ninguna vía."
 
 msgid "No tags"
 msgstr "Sin etiquetas"
@@ -4617,7 +4729,7 @@ msgid "Untagged, empty and one node ways"
 msgstr "Vías sin etiquetas, vacías o de un único nodo"
 
 msgid "This test checks for untagged, empty and one node ways."
-msgstr "Este test comprueba vías sin etiquetar, vacías y de nodo único."
+msgstr "Este test busca vías sin etiquetar, vacías y de nodo único."
 
 msgid "Unnamed ways"
 msgstr "Vías sin nombre"
@@ -4695,7 +4807,7 @@ msgid "railway"
 msgstr "ferrocarril"
 
 msgid "waterway"
-msgstr "vía fluvial"
+msgstr "curso de agua"
 
 msgid "landuse"
 msgstr "uso del suelo"
@@ -4793,6 +4905,7 @@ msgstr "Haga clic para cerrar el cuadro de diálogo"
 msgid "Imagery offset"
 msgstr "Desplazamiento de imágenes"
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr "Imágenes"
 
@@ -4977,14 +5090,18 @@ msgstr[1] ""
 msgid ""
 "Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
 msgstr ""
+"Detectada red IPv6 utilizable. Se preferirá IPv6 sobre IPv4 tras del próximo "
+"reinicio."
 
 msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
-msgstr ""
+msgstr "Red IPv6 usable detectada, prefiriendo IPv6 sobre IPv4"
 
 msgid ""
 "Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
 "restart."
 msgstr ""
+"Red IPv6 no usable detectada, prefiriendo IPv6 sobre IPv4 después del "
+"siguiente reinicio."
 
 msgid "Unsaved osm data"
 msgstr "Datos OSM sin guardar"
@@ -5036,45 +5153,56 @@ msgstr ""
 "Esto puede ser debido a una configuración de proxy errónea. <br> ¿Desea "
 "cambiar la configuración del proxy ahora?"
 
+msgctxt "menu"
 msgid "File"
 msgstr "Archivo"
 
-msgid "Session"
-msgstr "Sesión"
+msgctxt "menu"
+msgid "Edit"
+msgstr "Editar"
 
+msgctxt "menu"
 msgid "View"
 msgstr "Ver"
 
+msgctxt "menu"
 msgid "Tools"
 msgstr "Herramientas"
 
+msgctxt "menu"
 msgid "More tools"
 msgstr "Más herramientas"
 
+msgctxt "menu"
 msgid "Data"
 msgstr "Datos"
 
+msgctxt "menu"
 msgid "Selection"
 msgstr "Selección"
 
+msgctxt "menu"
 msgid "Presets"
 msgstr "Predefinidos"
 
 msgid "More..."
 msgstr "Más…"
 
+msgctxt "menu"
 msgid "GPS"
 msgstr "GPS"
 
+msgctxt "menu"
 msgid "Windows"
 msgstr "Ventanas"
 
+msgctxt "menu"
+msgid "Help"
+msgstr "Ayuda"
+
 msgid "Menu: {0}"
 msgstr "Menú: {0}"
 
-msgid "Save and load the current session (list of layers, etc.)"
-msgstr "Guardar y cargar la sesión actual (lista de capas, etc.)"
-
 msgid "Edit toolbar"
 msgstr "Editar barra de herramientas"
 
@@ -5100,6 +5228,7 @@ msgstr ""
 msgid "Search menu items"
 msgstr "Buscar entradas del menú principal"
 
+msgctxt "menu"
 msgid "Audio"
 msgstr "Audio"
 
@@ -5225,71 +5354,17 @@ msgstr "En segundo plano"
 msgid "Click to run job in background"
 msgstr "Click para ejecutar la tarea en segundo plano"
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-"Las imágenes aéreas puede estar erróneamente alineadas. ¡Por favor, "
-"compruebe su desplazamiento usando las trazas de GPS!"
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-
-msgid "Details..."
-msgstr "Detalles..."
-
-msgid "Hide this message and never show it again"
-msgstr "Ocultar este mensaje y no volver a mostrarlo de nuevo"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-"<html>Confirme el borrado de <strong>1 objeto</strong> de <strong>1 "
-"relación</strong>.</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>Confirme el borrado de <strong>1 objeto</strong> de <strong>{0} "
-"relaciones</strong>.</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>Confirme el borrado de <strong>{0} objetos</strong> de <strong>{1} "
-"relaciones</strong>.</html>"
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] "Borrando {0} objeto"
-msgstr[1] "Borrando {0} objetos"
-
-msgid "Delete objects"
-msgstr "Borrar objetos"
-
-msgid "To delete"
-msgstr "A borrar"
-
-msgid "From Relation"
-msgstr "De la relación"
-
-msgid "Pos."
-msgstr "Posisión"
+msgid " ({0})"
+msgstr " ({0})"
 
-msgid "Role"
-msgstr "Función"
+msgid "{0} completed in {1}"
+msgstr "{0} completado en {1}"
 
-msgid "Click to close the dialog and remove the object from the relations"
-msgstr ""
-"Haga clic para cerrar el cuadro de diálogo y eliminar el objeto de las "
-"relaciones"
+msgid "Enlarge"
+msgstr "Agrandar"
 
-msgid "Click to close the dialog and to abort deleting the objects"
-msgstr ""
-"Haga clic para cerrar el cuadro de diálogo y abortar la eliminación de los "
-"objetos"
+msgid "Shrink"
+msgstr "Contraer"
 
 msgid ""
 "<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
@@ -5764,6 +5839,9 @@ msgstr "Mantener su estado suprimido"
 msgid "Undecide conflict between deleted state"
 msgstr "Conflicto sin resolver entre estados eliminados"
 
+msgid "Role"
+msgstr "Función"
+
 msgid "Primitive"
 msgstr "Primitiva"
 
@@ -6054,6 +6132,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr "Aplicar esta función a todos los miembros"
 
+msgid "Pos."
+msgstr "Posisión"
+
 msgid "Orig. Way"
 msgstr "Vía original"
 
@@ -6221,6 +6302,51 @@ msgstr "Resolver los conflictos"
 msgid "Resolve conflicts for ''{0}''"
 msgstr "Resolver los conflictos de ''{0}''"
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+"<html>Confirme el borrado de <strong>1 objeto</strong> de <strong>1 "
+"relación</strong>.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Confirme el borrado de <strong>1 objeto</strong> de <strong>{0} "
+"relaciones</strong>.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Confirme el borrado de <strong>{0} objetos</strong> de <strong>{1} "
+"relaciones</strong>.</html>"
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] "Borrando {0} objeto"
+msgstr[1] "Borrando {0} objetos"
+
+msgid "Delete objects"
+msgstr "Borrar objetos"
+
+msgid "To delete"
+msgstr "A borrar"
+
+msgid "From Relation"
+msgstr "De la relación"
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+"Haga clic para cerrar el cuadro de diálogo y eliminar el objeto de las "
+"relaciones"
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+"Haga clic para cerrar el cuadro de diálogo y abortar la eliminación de los "
+"objetos"
+
 msgid "Filter objects and hide/disable them."
 msgstr "Filtra objetos y los oculta/visualiza."
 
@@ -6325,8 +6451,8 @@ msgstr "Información ampliada sobre el objeto"
 msgid "map style"
 msgstr "estilo de mapa"
 
-msgid " ({0})"
-msgstr " ({0})"
+msgid "edit counts"
+msgstr "cuenta de edición"
 
 msgid "not in data set"
 msgstr "no en el conjunto de datos"
@@ -6466,6 +6592,11 @@ msgstr ""
 "Atención: los dos objetos elegidos tienen cachés de estilos iguales, pero no "
 "idénticas."
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] "{0} usuario editó por última vez la selección:"
+msgstr[1] "{0} usuarios editaron por última vez la selección:"
+
 msgid "xml"
 msgstr "xml"
 
@@ -6475,50 +6606,81 @@ msgstr "mapcss"
 msgid "unknown"
 msgstr "desconocido"
 
+msgid "Enter the coordinates for the new node."
+msgstr "Introduzca las coordinadas para el nuevo nodo."
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
 msgstr ""
-"Ingrese las coordenadas para el nuevo nodo.<br/>Puede separar longitud y "
-"latitud con un espacio, coma o punto y coma.<br/>Use números positivos o las "
-"letras N y E para indicar los puntos cardinales Norte o Este.<br/>Para los "
-"puntos cardinales Sur y Oeste utilice números negativos o las letras S y "
-"W.<br/>El valor de las coordenadas puede estar en cualquiera de los "
-"siguientes tres "
-"formatos:<ul><li><i>grados</i><tt>°</tt></li><li><i>grados</i><tt>°</"
-"tt> <i>minutos</i><tt>'</tt></li><li><i>grados</i><tt>°</tt> "
-"<i>minutos</i><tt>'</tt> <i>segundos</i><tt>&quot</tt></li></ul>Los "
-"símbolos <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> son opcionales.<br/><br/>Algunos ejemplos:<ul>{0}</ul>"
-
-msgid "Projected coordinates:"
-msgstr "Coordenadas proyectadas:"
+"Puede separar la longitud y la latitud con espacio, coma o punto y coma."
 
 msgid ""
-"Enter easting and northing (x and y) separated by space, comma or semicolon."
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
 msgstr ""
-"Introduzca longitud y latitud (X e Y) separados por espacio, coma o punto y "
-"coma."
+"Use números positivos o los caracteres N, E para indicar las direcciones "
+"cardinales Norte o Este."
 
-msgid "Lat/Lon"
-msgstr "Lat/Lon"
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+"Para las direcciones cardinales Sur y Oeste puede usar tanto números "
+"negativos como los caracteres S, W."
 
-msgid "East/North"
-msgstr "Este/Norte"
+msgid "Coordinate value can be in one of three formats:"
+msgstr "El valor de la coordenada puede ser en uno de estos tres formatos:"
 
-msgid "Please enter a GPS coordinates"
-msgstr "Por favor, introduzca unas coordenadas GPS"
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr "<i>grados</i><tt>°</tt>"
 
-msgid "Please enter a Easting and Northing"
-msgstr "Introduzca una latitud y una longitud"
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr "<i>grados</i><tt>°</tt> <i>minutos</i><tt>'</tt>"
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+"<i>grados</i><tt>°</tt> <i>minutos</i><tt>'</tt> "
+"<i>segundos</i><tt>&quot</tt>"
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+"Los símbolos <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, "
+"<tt>"</tt>, <tt>″</tt> son opcionales."
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+"Además puede usar la sintaxis  <tt>lat=\"...\" lon=\"...\"</tt> o "
+"<tt>lat=''...'' lon=''...''</tt>."
+
+msgid "Some examples:"
+msgstr "Algunos ejemplos:"
+
+msgid "Projected coordinates:"
+msgstr "Coordenadas proyectadas:"
+
+msgid ""
+"Enter easting and northing (x and y) separated by space, comma or semicolon."
+msgstr ""
+"Introduzca longitud y latitud (X e Y) separados por espacio, coma o punto y "
+"coma."
+
+msgid "Lat/Lon"
+msgstr "Lat/Lon"
+
+msgid "East/North"
+msgstr "Este/Norte"
+
+msgid "Please enter a GPS coordinates"
+msgstr "Por favor, introduzca unas coordenadas GPS"
+
+msgid "Please enter a Easting and Northing"
+msgstr "Introduzca una latitud y una longitud"
 
 msgid "Toggle visibility of layer: {0}"
 msgstr "Conmutar visibilidad de la capa: {0}"
@@ -6544,6 +6706,12 @@ msgstr "Opacidad"
 msgid "Adjust opacity of the layer."
 msgstr "Ajustar opacidad de la capa"
 
+msgid "Gamma"
+msgstr "Gamma"
+
+msgid "Adjust gamma value of the layer."
+msgstr "Ajustar el valor gamma de la capa."
+
 msgid "Activate"
 msgstr "Activar"
 
@@ -6673,6 +6841,12 @@ msgstr "Ajustes de estilo"
 msgid "Customize the style"
 msgstr "Personalizar el estilo"
 
+msgid "Mini map"
+msgstr "Mini mapa"
+
+msgid "Displays a small map of the current edit location"
+msgstr "Muestra un mapa pequeño de la localización actual de edición"
+
 msgid "List of notes"
 msgstr "Lista de notas"
 
@@ -6731,15 +6905,22 @@ msgstr "ID del objeto:"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "Introduzca la ID del objeto que debe ser descargado"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+"Identificadores de objeto se pueden separar por coma o espacio, por ejemplo: "
+"{0}"
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+"En modo mixto, especificar objetos como este: {0}<br/>({1} significa "
+"<i>nodo</i>, {2} para la <i>vía</i>, y {3} para la <i>relación</i>)"
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
-"Los ID de los objetos pueden ser separados por coma o espacio.<br/>Ejemplos: "
-"{0}<br/>En el modo mixto, especifique objetos de la siguiente manera: "
-"{1}<br/>({2} corresponde a <i>nodo</i>, {3} a <i>vía</i>, y {4} a "
-"<i>relación</i>)"
+"Rangos de identificadores de objeto se especifican con un guión, por "
+"ejemplo: {0}"
 
 msgid ""
 "Invalid ID list specified\n"
@@ -6769,6 +6950,9 @@ msgstr "Relaciones: {0}/{1}"
 msgid "Relations: {0}"
 msgstr "Relaciones: {0}"
 
+msgid "Selection"
+msgstr "Selección"
+
 msgid "Open a selection list window."
 msgstr "Abrir una ventana de selección."
 
@@ -6863,6 +7047,12 @@ msgstr "Abrir la ventana de validación"
 msgid "Validation results"
 msgstr "Resultados de la validación"
 
+msgid "Lookup"
+msgstr "Búsqueda"
+
+msgid "Looks up the selected primitives in the error list."
+msgstr "Buscar las primitivas seleccionadas en la lista de errores."
+
 msgid "Fix"
 msgstr "Corregir"
 
@@ -7534,6 +7724,13 @@ msgstr "Ir a la wiki de OSM para ayuda sobre cómo etiquetar (F1)"
 msgid "Launch browser with wiki help for selected object"
 msgstr "Inicia el navegador con ayuda de la wiki para el objeto seleccionado"
 
+msgid "Go to Taginfo"
+msgstr "Ir a Taginfo"
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+"Abrir navegador con las estadísticas de Taginfo para el objeto selecionado"
+
 msgid "Paste Value"
 msgstr "Pegar Valor"
 
@@ -7630,18 +7827,14 @@ msgstr "Establecer el número de etiquetas añadidas recientemente"
 msgid "Remember last used tags after a restart"
 msgstr "Recordar últimas etiquetas usadas después de reiniciar"
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
-msgstr "<code>Ctrl+1</code> para aplicar la primera sugerencia"
+msgid "to apply first suggestion"
+msgstr "para aplicar la primer sugerencia"
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
-msgstr ""
-"<code>Mayús+Entrar</code> para añadir sin cerrar el cuadro de diálogo"
+msgid "to add without closing the dialog"
+msgstr "para agregar sin cerrar el diálogo"
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
-msgstr ""
-"<code>Mayús+Ctrl+1</code> para añadir la primera sugerencia sin cerrar el "
-"cuadro de diálogo"
+msgid "to add first suggestion without closing the dialog"
+msgstr "para añadir la primera sugerencia sin cerrar el cuadro de diálogo"
 
 msgid "Please enter the number of recently added tags to display"
 msgstr ""
@@ -7844,6 +8037,13 @@ msgstr "Ordenar los miembros de la relación"
 msgid "Relation Editor: Sort"
 msgstr "Editor de relaciones: ordenar"
 
+msgid "Sort below"
+msgstr "Ordenar debajo"
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+"Ordenar los miembros seleccionados de relación y todos los miembros debajo"
+
 msgid "Reverse the order of the relation members"
 msgstr "Invertir el orden de los miembros de la relación"
 
@@ -8452,6 +8652,9 @@ msgstr "Cargando historial para la relación {0}"
 msgid "Node {0}"
 msgstr "Nodo {0}"
 
+msgid "The nodes of this way are in reverse order"
+msgstr "Nos nodos de esta vía están en orden inverso"
+
 msgid "Zoom to node"
 msgstr "Zoom a nodo"
 
@@ -9454,6 +9657,108 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] "{0} objeto para eliminar:"
 msgstr[1] "{0} objetos para eliminar:"
 
+msgid "Show Tile Info"
+msgstr "Mostrar información de la tesela"
+
+msgid "Tile Info"
+msgstr "Información sobre las teselas"
+
+msgid "Metadata "
+msgstr "Metadatos "
+
+msgid "Auto Zoom"
+msgstr "Auto Zoom"
+
+msgid "Auto load tiles"
+msgstr "Cargar teselas automáticamente"
+
+msgid "Load All Tiles"
+msgstr "Cargar todas las teselas"
+
+msgid "Load All Error Tiles"
+msgstr "Recargar teselas erróneas"
+
+msgid "Zoom to native resolution"
+msgstr "Zoom a resolución nativa"
+
+msgid "Change resolution"
+msgstr "Cambiar resolución"
+
+msgid "Failed to create tile source"
+msgstr "Error al crear la fuente de teselas"
+
+msgid "Show Errors"
+msgstr "Mostrar errores"
+
+msgid "Load Tile"
+msgstr "Cargar tesela"
+
+msgid "Increase zoom"
+msgstr "Incrementar zoom"
+
+msgid "Decrease zoom"
+msgstr "Reducir zoom"
+
+msgid "Snap to tile size"
+msgstr "Ajustar al tamaño de la tesela"
+
+msgid "Flush Tile Cache"
+msgstr "Alinear caché de teselas"
+
+msgid "zoom in to load any tiles"
+msgstr "haga zoom acercando para cargar cualquier tesela"
+
+msgid "zoom in to load more tiles"
+msgstr "haga zoom acercando para cargar más teselas"
+
+msgid "increase zoom level to see more detail"
+msgstr "incrementa el nivel de zoom para ver más detalles"
+
+msgid "No tiles at this zoom level"
+msgstr "No hay teselas a este nivel de zoom"
+
+msgid "Current zoom: {0}"
+msgstr "Zoom actual: {0}"
+
+msgid "Display zoom: {0}"
+msgstr "Mostrar zoom: {0}"
+
+msgid "Pixel scale: {0}"
+msgstr "Escala de píxeles: {0}"
+
+msgid "Best zoom: {0}"
+msgstr "Mejor zoom: {0}"
+
+msgid "Cache stats: {0}"
+msgstr "Estadísticas de caché: {0}"
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr "{0} ({1}), descargando automáticamente en zoom {2}"
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr "{0} ({1}), descargando en zoom {2}"
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr "Descargadas {0}/{1} teselas"
+
+msgid "Save WMS file"
+msgstr "Guardar taselas de archivo"
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+"Las imágenes aéreas puede estar erróneamente alineadas. ¡Por favor, "
+"compruebe su desplazamiento usando las trazas de GPS!"
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+
+msgid "Details..."
+msgstr "Detalles..."
+
+msgid "Hide this message and never show it again"
+msgstr "Ocultar este mensaje y no volver a mostrarlo de nuevo"
+
 msgid "Customize Color"
 msgstr "Personalizar colores"
 
@@ -9507,6 +9812,9 @@ msgstr "Guardar el archivo GPX"
 msgid "Imagery fade"
 msgstr "Transparencia de imágenes"
 
+msgid "Unsupported imagery type: {0}"
+msgstr "Tipo de imagen no soportado: {0}"
+
 msgid "ERROR"
 msgstr "ERROR"
 
@@ -9527,12 +9835,12 @@ msgstr "Todas las proyecciones son compatibles"
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
-"La capa {0} no es compatible con la nueva proyección {1}.\n"
-"{2}\n"
-"Cambie la proyección otra vez o elimine la capa."
+"La capa {0} no soporta la nueva proyección {1}.\n"
+"Proyecciones soportadas son: {2}\n"
+"Cambia la proyección de nuevo o elimine la capa."
 
 msgid "Save Layer"
 msgstr "Guardar capa"
@@ -9615,197 +9923,91 @@ msgstr ""
 msgid "Save OSM file"
 msgstr "Guardar el archivo OSM"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-"{0} no es un argumento válido para una capa TMS. Compruebe la URL del "
-"servidor:\n"
-"{1}"
+msgid "EPSG:4326 and Mercator projection are supported"
+msgstr "Compatble con EPSG:4326 y la proyección de Mercator"
 
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-"Las capas TMS no son compatibles con la proyección {0}.\n"
-"{1}\n"
-"Cambie la proyección o elimine la capa."
+msgid "Validation errors"
+msgstr "Errores de validación"
 
-msgid "Auto Zoom"
-msgstr "Auto Zoom"
+msgid "No validation errors"
+msgstr "Sin errores de validación"
 
-msgid "Auto load tiles"
-msgstr "Cargar teselas automáticamente"
+msgid "Set WMS Bookmark"
+msgstr "Fijar marcador WMS"
 
-msgid "Show Errors"
-msgstr "Mostrar errores"
+msgid ""
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
+msgstr ""
+"JOSM usará EPSG:4326 para consultar el servidor, pero los resultados pueden "
+"variar dependiendo el servidor WMS."
 
-msgid "Load Tile"
-msgstr "Cargar tesela"
+msgid "Correlate to GPX"
+msgstr "Correlacionar con GPX"
 
-msgid "Show Tile Info"
-msgstr "Mostrar información de la tesela"
+msgid "Invalid timezone"
+msgstr "Zona horaria no válida"
 
-msgid "Load All Tiles"
-msgstr "Cargar todas las teselas"
+msgid "Invalid offset"
+msgstr "Desplazamiento inválido"
 
-msgid "Load All Error Tiles"
-msgstr "Recargar teselas erróneas"
+msgid "Correlate images with GPX track"
+msgstr "Correlacionar las imágenes con la traza GPX"
 
-msgid "Increase zoom"
-msgstr "Incrementar zoom"
+msgid "Try Again"
+msgstr "Volver a intentar"
 
-msgid "Decrease zoom"
-msgstr "Reducir zoom"
+msgid "No images could be matched!"
+msgstr "¡No se pudo aparear imagen alguna!"
 
-msgid "Snap to tile size"
-msgstr "Ajustar al tamaño de la tesela"
+msgid "GPX Files (*.gpx *.gpx.gz)"
+msgstr "Archivos GPX (*.gpx *.gpx.gz)"
 
-msgid "Flush Tile Cache"
-msgstr "Alinear caché de teselas"
+msgid "File {0} is loaded yet under the name \"{1}\""
+msgstr "El archivo {0} ya está cargado con el nombre \"{1}\""
 
-msgid "zoom in to load any tiles"
-msgstr "haga zoom acercando para cargar cualquier tesela"
+msgid "Error while parsing {0}"
+msgstr "Error mientras se analizaba sintácticamente {0}"
 
-msgid "zoom in to load more tiles"
-msgstr "haga zoom acercando para cargar más teselas"
+msgid "Could not read \"{0}\""
+msgstr "No se pudo leer \"{0}\""
 
-msgid "increase zoom level to see more detail"
-msgstr "incrementa el nivel de zoom para ver más detalles"
+msgid ""
+"<html>Take a photo of your GPS receiver while it displays the "
+"time.<br>Display that photo here.<br>And then, simply capture the time you "
+"read on the photo and select a timezone<hr></html>"
+msgstr ""
+"<html>Tome una foto de su receptor GPS mientras muestra la hora "
+"exacta.<br>Exponga esa foto aquí.<br>Y luego, simplemente tome la hora que "
+"usted lee en la foto y seleccione una zona horaria<hr></html>"
 
-msgid "No tiles at this zoom level"
-msgstr "No hay teselas a este nivel de zoom"
+msgid "Photo time (from exif):"
+msgstr "Hora de la foto (desde exif)"
 
-msgid "Current zoom: {0}"
-msgstr "Zoom actual: {0}"
+msgid "Gps time (read from the above photo): "
+msgstr "Hora del Gps (leída desde la foto tomada): "
 
-msgid "Display zoom: {0}"
-msgstr "Mostrar zoom: {0}"
+msgid "I am in the timezone of: "
+msgstr "Yo estoy en la zona horaria de: "
 
-msgid "Pixel scale: {0}"
-msgstr "Escala de píxeles: {0}"
+msgid "No date"
+msgstr "Sin fecha"
 
-msgid "Best zoom: {0}"
-msgstr "Mejor zoom: {0}"
+msgid "Open another photo"
+msgstr "Abrir otra foto"
 
-msgid "Cache stats: {0}"
-msgstr "Estadísticas de caché: {0}"
+msgid "Synchronize time from a photo of the GPS receiver"
+msgstr "Sincronizar el tiempo de una foto con el receptor GPS"
 
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr "Capa TMS ({0}), descargando en nivel de acercamiento {1}"
+msgid ""
+"Error while parsing the date.\n"
+"Please use the requested format"
+msgstr ""
+"Error al analizar la fecha.\n"
+"Por favor, utilice el formato requerido."
 
-msgid "EPSG:4326 and Mercator projection are supported"
-msgstr "Compatble con EPSG:4326 y la proyección de Mercator"
-
-msgid "Validation errors"
-msgstr "Errores de validación"
-
-msgid "No validation errors"
-msgstr "Sin errores de validación"
-
-msgid "Blank Layer"
-msgstr "Capa vacía"
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr "Descargadas {0}/{1} teselas"
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr "Capa WMS ({0}) descargándose automáticamente en el zoom {1}"
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr "Capa WMS ({0}), descargando en zoom {1}"
-
-msgid "Download visible tiles"
-msgstr "Descargar las teselas visibles"
-
-msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-"El área solicitada es demasiado grande. Por favor, amplíe el zoom un poco "
-"más, o cambie la resolución"
-
-msgid "Change resolution"
-msgstr "Cambiar resolución"
-
-msgid "Reload erroneous tiles"
-msgstr "Recargar teselas erróneas"
-
-msgid "Alpha channel"
-msgstr "Canal alfa"
-
-msgid "Automatically change resolution"
-msgstr "Cambiar la resolución de forma autmoática"
-
-msgid "Set WMS Bookmark"
-msgstr "Fijar marcador WMS"
-
-msgid "Automatic downloading"
-msgstr "Descarga automática"
-
-msgid "Zoom to native resolution"
-msgstr "Zoom a resolución nativa"
-
-msgid "Supported projections are: {0}"
-msgstr "Las proyecciones compatibles son: {0}"
-
-msgid "Unsupported WMS file version; found {0}, expected {1}"
-msgstr "Versión de archivo WMS no soportada; encontrada {0}, esperada {1}"
-
-msgid "Save WMS file"
-msgstr "Guardar taselas de archivo"
-
-msgid "Correlate to GPX"
-msgstr "Correlacionar con GPX"
-
-msgid "GPX Files (*.gpx *.gpx.gz)"
-msgstr "Archivos GPX (*.gpx *.gpx.gz)"
-
-msgid "File {0} is loaded yet under the name \"{1}\""
-msgstr "El archivo {0} ya está cargado con el nombre \"{1}\""
-
-msgid "Error while parsing {0}"
-msgstr "Error mientras se analizaba sintácticamente {0}"
-
-msgid "Could not read \"{0}\""
-msgstr "No se pudo leer \"{0}\""
-
-msgid ""
-"<html>Take a photo of your GPS receiver while it displays the "
-"time.<br>Display that photo here.<br>And then, simply capture the time you "
-"read on the photo and select a timezone<hr></html>"
-msgstr ""
-"<html>Tome una foto de su receptor GPS mientras muestra la hora "
-"exacta.<br>Exponga esa foto aquí.<br>Y luego, simplemente tome la hora que "
-"usted lee en la foto y seleccione una zona horaria<hr></html>"
-
-msgid "Photo time (from exif):"
-msgstr "Hora de la foto (desde exif)"
-
-msgid "Gps time (read from the above photo): "
-msgstr "Hora del Gps (leída desde la foto tomada): "
-
-msgid "I am in the timezone of: "
-msgstr "Yo estoy en la zona horaria de: "
-
-msgid "No date"
-msgstr "Sin fecha"
-
-msgid "Open another photo"
-msgstr "Abrir otra foto"
-
-msgid "Synchronize time from a photo of the GPS receiver"
-msgstr "Sincronizar el tiempo de una foto con el receptor GPS"
-
-msgid ""
-"Error while parsing the date.\n"
-"Please use the requested format"
-msgstr ""
-"Error al analizar la fecha.\n"
-"Por favor, utilice el formato requerido."
-
-msgid "Invalid date"
-msgstr "Fecha no válida"
+msgid "Invalid date"
+msgstr "Fecha no válida"
 
 msgid "<No GPX track loaded yet>"
 msgstr "<La traza GPX no está cargada aún>"
@@ -9849,24 +10051,9 @@ msgstr "Zona horaria: "
 msgid "Offset:"
 msgstr "Desplazamiento:"
 
-msgid "Correlate images with GPX track"
-msgstr "Correlacionar las imágenes con la traza GPX"
-
 msgid "Correlate"
 msgstr "Correlacionar"
 
-msgid "Invalid timezone"
-msgstr "Zona horaria no válida"
-
-msgid "Invalid offset"
-msgstr "Desplazamiento inválido"
-
-msgid "Try Again"
-msgstr "Volver a intentar"
-
-msgid "No images could be matched!"
-msgstr "¡No se pudo aparear imagen alguna!"
-
 msgid "No gpx selected"
 msgstr "No se ha seleccionado ningún archivo GPX"
 
@@ -10085,9 +10272,6 @@ msgstr ""
 "\n"
 "Tiempo de GPS : {0}"
 
-msgid "JPEG images (*.jpg)"
-msgstr "Imágenes JPEG (*.jpg)"
-
 msgid "Show thumbnails"
 msgstr "Mostrar miniaturas"
 
@@ -10156,9 +10340,6 @@ msgstr "metros"
 msgid "Maximum area per request:"
 msgstr "Área máxima por petición:"
 
-msgid "sq km"
-msgstr "km²"
-
 msgid "Download near:"
 msgstr "Descargar cercanos:"
 
@@ -10923,15 +11104,15 @@ msgstr "Cerrar el diálogo de preferencias y descartar los cambios"
 msgid "Save the preferences and close the dialog"
 msgstr "Guardar las preferencias y cerrar el diálogo"
 
-msgid "Download plugins"
-msgstr "Descargar complementos"
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr "Debe reiniciar JOSM para que las preferencias tengan efecto."
 
 msgid "Would you like to restart now?"
 msgstr "¿Desea reiniciar ahora?"
 
+msgid "Download plugins"
+msgstr "Descargar complementos"
+
 msgid "Icon paths:"
 msgstr "Ruta de los iconos:"
 
@@ -11535,7 +11716,7 @@ msgid "Single Color (can be customized for named layers)"
 msgstr "Color único (puede ser personalizado para las capas nombradas)"
 
 msgid "Car"
-msgstr "Coche"
+msgstr "Automóvil"
 
 msgid "Bicycle"
 msgstr "Bicicleta"
@@ -11692,7 +11873,7 @@ msgid "Dynamic buttons in side menus"
 msgstr "Botones dinámicos en los menús laterales"
 
 msgid "Display ISO dates"
-msgstr "Mostrar las fechas ISO"
+msgstr "Mostrar las fechas en formato ISO"
 
 msgid "Use native file choosers (nicer, but do not support file filters)"
 msgstr ""
@@ -11814,6 +11995,21 @@ msgstr "Mostrar los limites"
 msgid "No bounding box was found for this layer."
 msgstr "No se encontraron los límites para esta capa."
 
+msgid "1. Enter getCapabilities URL"
+msgstr "1. Introduce la URL getCapabilities"
+
+msgid "2. Enter name for this layer"
+msgstr "2. Introduce el nombre para esta capa"
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr "{0} cache, tamaño total de cache: {1} bytes"
+
+msgid "Cache name"
+msgstr "Nombre del caché"
+
+msgid "Object Count"
+msgstr "Cuenta de objetos"
+
 msgid "imagery fade"
 msgstr "opacidad de imágenes"
 
@@ -11832,6 +12028,18 @@ msgstr "Fuerte"
 msgid "Sharpen (requires layer re-add): "
 msgstr "Enfoque (requiere recarga la capa): "
 
+msgid "Tile cache directory: "
+msgstr "Directorio del caché de teselas: "
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr "Tamaño máximo de caché de disco (por las imágenes) en MB: "
+
+msgid "Maximum number of objects in memory cache: "
+msgstr "Máximo número de objetos en memoria cache: "
+
+msgid "Tiles zoom offset:"
+msgstr "Compensación de zoom de tiles"
+
 msgid "Imagery Preferences"
 msgstr "Preferencias de imágenes"
 
@@ -11854,6 +12062,9 @@ msgstr "Proveedores de imágenes"
 msgid "Offset bookmarks"
 msgstr "Marcadores de desplazamientos"
 
+msgid "Cache contents"
+msgstr "Conenido en caché"
+
 msgid "Imagery Background: Default"
 msgstr "Fondo de las capas de imágenes: por omisión"
 
@@ -11896,9 +12107,6 @@ msgstr "URL de licencia EULA no disponible: {0}"
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr "URL malformada para la licencia EULA: {0}"
 
-msgid "Projection"
-msgstr "Proyección"
-
 msgid "Layer"
 msgstr "Capa"
 
@@ -11923,17 +12131,11 @@ msgstr "Nivel de zoom máximo: "
 msgid "Add to slippymap chooser: "
 msgstr "Añadir al selector del mapa deslizante: "
 
-msgid "Tile cache directory: "
-msgstr "Directorio del caché de teselas: "
-
 msgid "Maximum concurrent downloads: "
 msgstr "Descargas máximas simultáneas: "
 
 msgid "Maximum concurrent downloads per host: "
-msgstr ""
-
-msgid "Maximum elements in disk cache: "
-msgstr "Máximos elementos en cache del disco: "
+msgstr "Máximas descargas simultáneas por servidor: "
 
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
@@ -11942,20 +12144,11 @@ msgstr ""
 "La capa no es compatible con ninguna de las proyecciones de JOSM,\n"
 "así que no la puede usar. Este mensaje no se volverá a mostrar."
 
-msgid "Downloader:"
-msgstr "Gestor de descarga:"
-
 msgid "Simultaneous connections:"
 msgstr "Conexiones simultáneas:"
 
-msgid "Overlap tiles"
-msgstr "Superposición de teselas"
-
-msgid "% of east:"
-msgstr "% hacia el este:"
-
-msgid "% of north:"
-msgstr "% hacia el norte:"
+msgid "Tile size:"
+msgstr "Tamaño de la tesela:"
 
 msgid "Auto save enabled"
 msgstr "Autoguardado activado"
@@ -12508,7 +12701,7 @@ msgid "Enable remote control"
 msgstr "Activar control remoto"
 
 msgid "Enable HTTPS support"
-msgstr "Hablitar soporte HTTPS"
+msgstr "Habilitar soporte para HTTPS"
 
 msgid "Install..."
 msgstr "Instalar…"
@@ -12652,6 +12845,8 @@ msgid ""
 "Specifies the number of days a note needs to be closed to no longer be "
 "downloaded"
 msgstr ""
+"Especifica con el número de días en el que una nota necesita ser cerrada a "
+"partir del cual no debe ser descargada"
 
 msgid "Failed to retrieve OAuth Access Token from credential manager"
 msgstr ""
@@ -12994,6 +13189,18 @@ msgstr "Aplicar Predeterminados"
 msgid "New relation"
 msgstr "Nueva relación"
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+"El prefijado <i>{0}</i> no puede ser aplicado ya que no hay nada "
+"seleccionado."
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+"El prefijado <i>{0}</i> no puede ser aplicado ya que no hay nada que se "
+"ajuste al mismo."
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] "Modificar objeto {0}"
@@ -13112,6 +13319,9 @@ msgstr "Mostrar diálogo de búsqueda preestablecida"
 msgid "Search presets"
 msgstr "Buscar predefinidos"
 
+msgid "Presets"
+msgstr "Predefinidos"
+
 msgid "Search for objects by preset"
 msgstr "Buscar objetos por tipo predefinido"
 
@@ -13422,6 +13632,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr "Archivos GeoJSON"
 
+msgid "Projected GeoJSON Files"
+msgstr "Archivos GeoJSON proyectados"
+
 msgid "Layer ''{0}'' not supported"
 msgstr "Capa ''{0}'' no soportada"
 
@@ -14019,6 +14232,9 @@ msgstr "Archivos del Servidor OSM comprimidos en zip"
 msgid "WMS Files (*.wms)"
 msgstr "Archivos WMS (*.wms)"
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr "Versión de archivo WMS no soportada; encontrada {0}, esperada {1}"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -14093,24 +14309,30 @@ msgstr "Leer la versión del protocolo"
 
 msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
+"No se puede iniciar el servidor remotecontrol IPv4 en el puerto {0}: {1}"
 
 msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
+"No se puede iniciar el servidor remotecontrol IPv6 en el puerto {0}: {1}"
 
 msgid "RemoteControl::Accepting remote connections on {0}:{1}"
-msgstr ""
+msgstr "ControlRemoto::Aceptando conexiones remotas en {0}:{1}"
 
 msgid "RemoteControl::Server {0}:{1} stopped."
-msgstr ""
+msgstr "ControlRemoto::Servidor {0}:{1} detenido"
 
 msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
+"No se puede iniciar el servidor https de remotecontrol IPv4  en el puerto "
+"{0}: {1}"
 
 msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
+"No se puede iniciar el servidor https de remotecontrol IPv6  en el puerto "
+"{0}: {1}"
 
 msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
-msgstr ""
+msgstr "ControlRemoto::Aceptando conexiones remotas seguras en {0}:{1}"
 
 msgid "Remote Control has been asked to create a new node."
 msgstr "El Control Remoto recibió una solicitud para crear un nodo nuevo."
@@ -14461,6 +14683,19 @@ msgstr[1] ""
 "El complemento {0} requiere {1}  complementos que no se encontraron. El "
 "plugin que falta es:"
 
+msgid "Download and restart"
+msgstr "Descargar  y reiniciar"
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] "Click para descargar el complemento faltante y reiniciar JOSM"
+msgstr[1] "Click para descargar los complementos faltantes y reiniciar JOSM"
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] "Click para continuar sin este complemento"
+msgstr[1] "Click para continuar sin estos complementos"
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -15682,6 +15917,9 @@ msgstr "Actualizar"
 msgid "Update directory listing."
 msgstr "Actualizar listado de directorio."
 
+msgid "View"
+msgstr "Ver"
+
 msgid "Blue:"
 msgstr "Azul:"
 
@@ -15721,8 +15959,8 @@ msgstr "MapQuest Open Aerial"
 msgid "OpenStreetMap GPS Traces"
 msgstr "Trazas de GPS OpenStreetMap"
 
-msgid "OpenStreetMap (Mapnik)"
-msgstr "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
+msgstr "OpenStreetMap (Capa estándar)"
 
 msgid "skobbler"
 msgstr "skobbler"
@@ -15733,9 +15971,6 @@ msgstr "OpenStreetMap (Mapnik blanco y negro)"
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr "OpenStreetMap (Mapnik, sin etiquetas)"
 
-msgid "skobbler heatmap"
-msgstr "mapa de calor de skobbler"
-
 msgid "OpenCycleMap"
 msgstr "OpenCycleMap"
 
@@ -15844,6 +16079,9 @@ msgstr "Viena: Ortofoto (imagen aérea)"
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr "VoGIS: Echtfarbenbild 2012 (12cm)"
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr "VoGIS: Invierno Echtfarbenbild 2015 (20cm)"
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr "VoGIS: Flächenwidmungsplan"
 
@@ -15858,12 +16096,19 @@ msgid ""
 msgstr ""
 "Imagen aérea AGIV(laanderen), cubre también la región de Bruselas (2013)"
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr "Imágenes aéreas SPW(allonie) PICC numéricas"
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr "Imagen aérea SPW(allonie) 2012"
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr "Imagen aérea SPW(allonie) 2009"
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+"Catastro: para nombres y números de policías únicamente, mala geomatría"
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr "IBGE Mapa de Sectores Urbanos"
 
@@ -15900,12 +16145,18 @@ msgstr "Chequia RUIAN parcely"
 msgid "Czech pLPIS"
 msgstr "Chequia pLPIS"
 
-msgid "Fugro (Denmark)"
-msgstr "Fugro (Dinamarca)"
-
 msgid "Geodatastyrelsen (Denmark)"
 msgstr "Geodatastyrelsen (Dinamarca)"
 
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr "Geodatastyrelsen DTK Kort25"
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr "Geodatastyrelsen Skyggekort 1,6m"
+
+msgid "Geodatastyrelsen Skærmkort"
+msgstr "Geodatastyrelsen Skærmkort"
+
 msgid "Stevns (Denmark)"
 msgstr "Stevns (Dinamarca)"
 
@@ -15930,6 +16181,9 @@ msgstr "Bosques de Estonia (Maaamet)"
 msgid "BANO"
 msgstr "BANO"
 
+msgid "BD Carthage"
+msgstr "BD Carthage"
+
 msgid "Bordeaux - 2012"
 msgstr "Burdeos - 2012"
 
@@ -15954,8 +16208,8 @@ msgstr "Géobretagne - Morbihan 2010"
 msgid "Géolittoral - Orthophotos 2000"
 msgstr "Géolittoral - Ortofotos 2000"
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
-msgstr "Géolittoral V2 - Ortofotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
+msgstr "Géolittoral V2 - Orthofotos 2011-2014"
 
 msgid "Géolittoral - Sentiers"
 msgstr "Géolittoral - Sentiers"
@@ -15969,6 +16223,9 @@ msgstr "Loire-Atlántico - Ortofotos 2012 - 20 cm"
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 
+msgid "Route 500™©®"
+msgstr "Ruta 500™©®"
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr "Tolosa - Ortofotoplan 2013"
 
@@ -15981,12 +16238,6 @@ msgstr "Tolosa - Ortofotoplan 2007"
 msgid "Tours - Orthophotos 2013"
 msgstr "Tours - Ortofotos 2013"
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr "Tours - Ortofotos 2008-2010"
-
-msgid "Tours - Orthophotos 2008"
-msgstr "Tours - Ortofotos 2008"
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -16008,6 +16259,9 @@ msgstr "Hamburgo (20 cm)"
 msgid "Hamburg (DK5)"
 msgstr "Hamburgo (DK5)"
 
+msgid "Bavaria (80 cm)"
+msgstr "Bavaria (80 cm)"
+
 msgid "Bavaria (2 m)"
 msgstr "Bavaria (2 m)"
 
@@ -16044,11 +16298,8 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr "Maps4BW (LGL-BW, www.lgl-bw.de)"
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
-msgstr "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
+msgstr "NRW-Atlas: ALKIS"
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
 msgstr "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -16077,6 +16328,12 @@ msgstr "Oficina de Guerra de Irlanda del Norte Una Pulgada 1941-43 GSGS 4136"
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr "Bartolomé Irlanda Cuarto de Pulgada 1940"
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr "Parroquias Civiles y Baronías de Irlanda - Atlas Memorial"
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr "Memorial Atlas de Irlanda (1901) L.J. Richards"
+
 msgid "OSMIE Townlands"
 msgstr "OSMIE Townlands"
 
@@ -16092,60 +16349,6 @@ msgstr "OSMIE Baronies"
 msgid "OSMIE Political"
 msgstr "OSMIE Político"
 
-msgid "Ireland EEA GMES Urban Atlas"
-msgstr "Atlas urbana EEA GMES de Irlanda"
-
-msgid "Ireland EEA CORINE 2006"
-msgstr "Irlanda EEA CORINE 2006"
-
-msgid "Antrim Civil Parishes and Baronies"
-msgstr "Antrim Civil Parishes and Baronies"
-
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
-msgstr "Memorial Atlas de Irlanda (1901) L.J. Richards"
-
-msgid "Carlow Civil Parishes and Baronies"
-msgstr "Carlow Civil Parishes and Baronies"
-
-msgid "Clare Civil Parishes and Baronies"
-msgstr "Clare Civil Parishes and Baronies"
-
-msgid "Dublin Civil Parishes and Baronies"
-msgstr "Dublin Civil Parishes and Baronies"
-
-msgid "Fermanagh Civil Parishes and Baronies"
-msgstr "Fermanagh Civil Parishes and Baronies"
-
-msgid "Galway Civil Parishes and Baronies"
-msgstr "Galway Civil Parishes and Baronies"
-
-msgid "Kildare Civil Parishes and Baronies"
-msgstr "Kildare Civil Parishes and Baronies"
-
-msgid "Leitrim Civil Parishes and Baronies"
-msgstr "Leitrim Civil Parishes and Baronies"
-
-msgid "Longford Civil Parishes and Baronies"
-msgstr "Longford Civil Parishes and Baronies"
-
-msgid "Offaly Civil Parishes and Baronies"
-msgstr "Offaly Civil Parishes and Baronies"
-
-msgid "Sligo Civil Parishes and Baronies"
-msgstr "Sligo Civil Parishes and Baronies"
-
-msgid "Tyrone Civil Parishes and Baronies"
-msgstr "Tyrone Civil Parishes and Baronies"
-
-msgid "Westmeath Civil Parishes and Baronies"
-msgstr "Westmeath Civil Parishes and Baronies"
-
-msgid "Wexford Civil Parishes and Baronies"
-msgstr "Wexford Civil Parishes and Baronies"
-
-msgid "Wicklow Civil Parishes and Baronies"
-msgstr "Wicklow Civil Parishes and Baronies"
-
 msgid "Lodi - Italy"
 msgstr "Lodi - Italia"
 
@@ -16179,6 +16382,9 @@ msgstr "50cm ortofoto - Letonia"
 msgid "20cm ortho - Latvia - Coastline"
 msgstr "20cm ortofoto - Línea costera de Letonia"
 
+msgid "1.cikla ortofotokarte - Latvia"
+msgstr "1.cikla ortofotokarte - Latvia"
+
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Lituania)"
 
@@ -16194,6 +16400,9 @@ msgstr "Ferrocarril Inspire Luxemburgo"
 msgid "Luxembourg Inspire Roads"
 msgstr "Rutas Inspire de Luxemburgo"
 
+msgid "Luxembourg Inspire Water"
+msgstr "Inspire Water Luxemburgo"
+
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Delta del Níger Oct 2012"
 
@@ -16209,9 +16418,15 @@ msgstr "Pangasinán/Bulacan (Alta resolución Filipinas)"
 msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr "Geoportal 2: Ortofotomapa (imagen aérea)"
 
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgstr "Geoportal 2: Ortofotomapa (imagen aerea) WMTS"
+
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr "Geoportal 2: PRNG (geo nombres)"
 
+msgid "Geoportal 2: ISOK hillshade"
+msgstr "Geoportal 2: Mapa de sombras ISOK"
+
 msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr "Będzin: Ortofotomapa 2013 (imagen aérea)"
 
@@ -16221,15 +16436,27 @@ msgstr "Będzin: Budynki (edificios)"
 msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr "Bytom: Ortofotomapa 2012 (imagen aérea)"
 
+msgid "Bytom: Fotoplan 2014 (aerial image)"
+msgstr "Bytom: Fotoplan 2014 (imagen aérea)"
+
 msgid "Bytom: Budynki (buildings)"
 msgstr "Bytom: Budynki (edificio)"
 
 msgid "Chorzów: Budynki (buildings)"
 msgstr "Chorzów: Budynki (edificio)"
 
+msgid "Częstochowa: Budynki (buildings)"
+msgstr "Częstochowa: Budynki (edificios)"
+
 msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr "Częstochowa: Ortofotomapa 2011 (imagen aérea)"
 
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgstr "Częstochowa: Ortofotomapa 2013 (imagen aérea)"
+
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgstr "Częstochowa: Ortofotomapa 2014 (imagen aérea)"
+
 msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr "Gliwice: Ortofotomapa 2013 (imagen aérea)"
 
@@ -16239,9 +16466,45 @@ msgstr "Gliwice: Budynki (edificios)"
 msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr "Katowice: Ortofotomapa (imagen aérea)"
 
+msgid "Katowice: Budynki (buildings)"
+msgstr "Katowice: Budynki (edificios)"
+
+msgid "Łódź: Budynki (buildings)"
+msgstr "Łódź: Budynki (edificios)"
+
 msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr "Łódź: Ortofotomapa (imagen aérea)"
 
+msgid "Powiat dębicki: Budynki (buildings)"
+msgstr "Powiat dębicki: Budynki (edificios)"
+
+msgid "Powiat lubaczowski: Budynki (buildings)"
+msgstr "Powiat lubaczowski: Budynki (edificios)"
+
+msgid "Powiat łańcucki: Budynki (buildings)"
+msgstr "Powiat łańcucki: Budynki (edificios)"
+
+msgid "Powiat poznański: Budynki (buildings)"
+msgstr "Powiat poznański: Budynki (edificios)"
+
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgstr "Powiat poznański: Ortofotomapa (imagen aérea)"
+
+msgid "Powiat rzeszowski: Budynki (buildings)"
+msgstr "Powiat rzeszowski: Budynki (edificios)"
+
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgstr "Powiat rzeszowski: Ortofotomapa (Imagen aérea)"
+
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr "Powiat stalowowolski: Budynki (edificios)"
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr "Przemyśl: Budynki (edificios)"
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgstr "Przemyśl: Ortofotomapa (Imagen aérea)"
+
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
 msgstr "Ruda Śląska: Ortofotomapa (imagen aérea)"
 
@@ -16254,9 +16517,18 @@ msgstr "Rzeszów: Budynki (edificios)"
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr "Siemianowice Śląskie: Ortofotomapa (imagen aérea)"
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr "Siemianowice Śląskie: Budynki (edificios)"
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr "Świętochłowice: Ortofotomapa 2008 (imagen aérea)"
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr "Świętochłowice: Ortofotomapa 2009 (imagen aérea)"
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr "Świętochłowice: Ortofotomapa 2012 (imagen aérea)"
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr "Zabrze: Ortofotomapa 2011 (imagen aérea)"
 
@@ -16270,7 +16542,7 @@ msgid "ScanEx SPOT"
 msgstr "ScanEx SPOT"
 
 msgid "Freemap.sk Car"
-msgstr "Freemap.sk Coche"
+msgstr "Freemap.sk vehículo"
 
 msgid "Freemap.sk Hiking"
 msgstr "Freemap.sk Montañismo"
@@ -16386,6 +16658,21 @@ msgstr "Bonvillars Ortofoto 2013"
 msgid "Fiez Orthophoto 2013"
 msgstr "Fiez Ortofoto 2013"
 
+msgid "Taiwan e-Map Open Data"
+msgstr "Datos abiertos Taiwan e-Map"
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr "Datos abiertos Taiwan e-Map (con línea de contorno)"
+
+msgid "Taiwan Village Boundaries"
+msgstr "Límites de Pueblos de Taiwan"
+
+msgid "Taiwan Land-Section Data"
+msgstr "Datos del Departamento de Tierras de Taiwán"
+
+msgid "NLSC Open Data WMTS"
+msgstr "NLSC Open Data WMTS"
+
 msgid "MSR Maps Topo"
 msgstr "MSR Mapas Topográficos"
 
@@ -16401,8 +16688,8 @@ msgstr "Imágenes aéreas grandes USGS"
 msgid "TIGER 2012 Roads Overlay"
 msgstr "TIGER 2012 Superposición de caminos"
 
-msgid "New & Misaligned TIGER Roads (2014)"
-msgstr "TIGER (2014) Nuevos y desalineados caminos"
+msgid "New & Misaligned TIGER Roads (2015)"
+msgstr "Carreteras Nuevas y No alineadas de TIGER (2015)"
 
 msgid "MassGIS L3 Parcels"
 msgstr "MassGIS L3 Parcelas"
@@ -16749,6 +17036,14 @@ msgstr ""
 "Implementa una línea de comandos y permite crear tus comandos. Vea el enlace "
 "para los comandos estándar (arco, círculo, etc)"
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+"Proporciona la biblioteca Commons Imaging. No está destinado para ser "
+"instalado directamente por los usuarios, sino más bien como una dependencia "
+"de otros complementos."
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 "(Peligro: ¡Experimental!) Herramienta para fusión (mezclar) de datos."
@@ -16857,13 +17152,6 @@ msgstr ""
 "Modo de mapa con ajuste de imágenes aéreas mediante el WMSPlugin-style"
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-"Este componente experimental permite a JOSM almacenar el cache de teselas en "
-"archivos de base de datos, no en grandes directorios de caché."
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -16941,9 +17229,8 @@ msgstr ""
 "el sitio web de MapDust. Puede crear, cerrar, invalidar, reabrir y comentar "
 "los informes de errores existentes mediante el uso de este componente."
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
-msgstr ""
-"Habilita al usuario para trabajar con imágenes alojadas en mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
+msgstr "Permite al usuario trabajar con imágenes alojadas en mapillary.com"
 
 msgid ""
 "Provide a measurement dialog and a layer to measure length and angle of "
@@ -16960,9 +17247,6 @@ msgstr "Combinar partes superpuestas de vías."
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr "No añade ningún giro a la izquierda para conjuntos de 4 o 5 vías"
 
-msgid "Simplifies download from different read-only APIs."
-msgstr "Simplifica la descarga desde distintas APIs de sólo lectura."
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 "Permite asignar a la vez etiquetas a todos los objetos de un área "
@@ -17018,6 +17302,9 @@ msgid ""
 "Recommends categories/tags on newly created OSM entities by analysing "
 "spatial entities into training features and using SVM classification"
 msgstr ""
+"Recomienda categorías/etiquetas en entidades OSM recién creadas mediante "
+"análisis espacial de entidades en características de entrenamiento y usando "
+"clasificación SVM"
 
 msgid "Import/export OSM data in PBF format"
 msgstr "Importar/exportar datos de OSM en formato PBF"
@@ -17040,7 +17327,7 @@ msgid ""
 "This plugin allows to display any picture as a background in the editor and "
 "align it with the map."
 msgstr ""
-"Este componente permite mostrar cualquier imagen como fondo en el editor y "
+"Este complemento permite mostrar cualquier imagen como fondo en el editor y "
 "alinearla con el mapa."
 
 msgid "The great JGoodies Plastic Look and Feel."
@@ -17068,6 +17355,17 @@ msgstr ""
 "Este componente simplifica el cartografiado y edición de rutas de "
 "transportes públicos."
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+"Muestra las paradas de rutas de transporte público seleccionadas como gráfico"
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+"El complemento RasterFilters permite seleccionar y aplicar  filtros de "
+"imágenes a algunas capas."
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr "Panel de edición y creación de multipolígonos y relaciones"
 
@@ -17116,6 +17414,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr "Editar características de OpenSeaMap"
 
+msgid "Allows to draw splines"
+msgstr "Permite dibujar splines"
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -17220,9 +17521,6 @@ msgstr ""
 "Habilitar búsqueda para puntos de referencias (waypoints) importados de un "
 "archivo gpx."
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr "Selecciona una secuencia de vías conectadas no ramificadas"
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr "Simplifica la vinculación de objetos OSM con artículos de Wikipedia"
 
@@ -17230,8 +17528,8 @@ msgid ""
 "Drive a race car from point A to point B over aerial imagery, leave cacti "
 "behind."
 msgstr ""
-"Conduce un coche de carreras desde el punto A al B sobre una imagen aérea. "
-"Deja a los cactus atrás..."
+"Conduce un automóvil de carreras desde el punto A al B sobre una imagen "
+"aérea y deja a los cactus atrás..."
 
 msgid "Surface"
 msgstr "Superficie"
@@ -17407,7 +17705,7 @@ msgid "Width (meters)"
 msgstr "Anchura (metros)"
 
 msgid "Sidewalk"
-msgstr "Arcén"
+msgstr "Acera"
 
 msgctxt "sidewalk"
 msgid "both"
@@ -17634,6 +17932,14 @@ msgid "basketball"
 msgstr "baloncesto"
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr "Voleibol de playa"
+
+msgctxt "sport"
+msgid "billiards"
+msgstr "billar"
+
+msgctxt "sport"
 msgid "boules"
 msgstr "Deportes de bolas"
 
@@ -17658,10 +17964,6 @@ msgid "cricket"
 msgstr "críquet"
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr "redes de críquet"
-
-msgctxt "sport"
 msgid "croquet"
 msgstr "cróquet"
 
@@ -17678,6 +17980,10 @@ msgid "equestrian"
 msgstr "hípica"
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr "campo de hockey"
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr "juegos gaélicos"
 
@@ -17694,14 +18000,26 @@ msgid "handball"
 msgstr "balonmano"
 
 msgctxt "sport"
-msgid "hockey"
-msgstr "hockey"
-
-msgctxt "sport"
 msgid "horse_racing"
 msgstr "carreras hípicas"
 
 msgctxt "sport"
+msgid "ice_hockey"
+msgstr "hockey sobre hielo"
+
+msgctxt "sport"
+msgid "karting"
+msgstr "karting"
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr "pista de aeromodelismo"
+
+msgctxt "sport"
+msgid "motocross"
+msgstr "motocross"
+
+msgctxt "sport"
 msgid "motor"
 msgstr "motor"
 
@@ -17714,6 +18032,10 @@ msgid "racquet"
 msgstr "raqueta"
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr "vehículos de radiocontrol"
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr "rugby liga"
 
@@ -17726,6 +18048,10 @@ msgid "running"
 msgstr "correr (running)"
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr "entrenamiento de seguridad"
+
+msgctxt "sport"
 msgid "shooting"
 msgstr "tiro"
 
@@ -17753,6 +18079,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr "tenis"
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr "voleibol"
+
+msgctxt "sport"
+msgid "9pin"
+msgstr "Bolos de a 9"
+
+msgctxt "sport"
+msgid "10pin"
+msgstr "Bolos de a 10"
+
 msgid "Fee"
 msgstr "De pago"
 
@@ -17861,12 +18199,13 @@ msgstr "caducifolio"
 
 msgid "Plants that are leafless for a certain period during the year."
 msgstr ""
+"Plantas que no tienen hojas por un periodo determinado durante el año."
 
 msgid "evergreen"
 msgstr "perennifolio"
 
 msgid "Plants that are never entirely without green foliage."
-msgstr ""
+msgstr "Plantas que nunca están enteramente sin follaje verde."
 
 msgid "semi_deciduous"
 msgstr "semi caducifolio"
@@ -17875,6 +18214,8 @@ msgid ""
 "Plants that lose their foliage for a very short period, when old leaves fall "
 "off and new foliage growth is starting."
 msgstr ""
+"Plantas que pierden su follaje durante un período muy corto, cuando las "
+"hojas viejas se caen y el nuevo follaje está empezando a crecer."
 
 msgid "semi_evergreen"
 msgstr "semi perennifolio"
@@ -17883,9 +18224,11 @@ msgid ""
 "Plants that lose most, but not all, of their foliage for a fraction of the "
 "year."
 msgstr ""
+"Plantas que pierden la mayoría, pero no todo, de su follaje durante una "
+"fracción del año."
 
 msgid "Habitat with evergreen and deciduous vegetation."
-msgstr ""
+msgstr "Hábitat con vegetación siempre verde y hojas secas."
 
 msgid "bahai"
 msgstr "bahaísta"
@@ -18144,6 +18487,9 @@ msgstr "Enlace de carretera local"
 msgid "Unclassified"
 msgstr "Carretera sin clasificación"
 
+msgid "Street has no name"
+msgstr "La calle no tiene nombre"
+
 msgid "Passing Places"
 msgstr "Lugares de cruce frecuente de la vía"
 
@@ -18225,6 +18571,9 @@ msgstr ""
 "y otros vehículos puedan detenerse de forma segura tras un fallo en los "
 "frenos."
 
+msgid "Raceway"
+msgstr "Pista de carreras"
+
 msgid "Road (Unknown Type)"
 msgstr "Carretera (tipología desconocida)"
 
@@ -18778,6 +19127,12 @@ msgstr "Rádar de tráfico"
 msgid "Traffic Mirror"
 msgstr "Espejo para tráfico"
 
+msgid "Highway milestone"
+msgstr "Hito, mojón o punto kilométrico de carretera"
+
+msgid "Distance (kilometers)"
+msgstr "Distancia (kilómetros)"
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr "Intersección vial con nombre"
@@ -18823,7 +19178,7 @@ msgid "rising"
 msgstr "en ascenso"
 
 msgid "removable"
-msgstr "removible"
+msgstr "desinstalable"
 
 msgid "plastic"
 msgstr "plástico"
@@ -18835,7 +19190,7 @@ msgid "Cattle Grid"
 msgstr "Paso canadiense"
 
 msgid "Bus Trap"
-msgstr "Trampa para coches"
+msgstr "Trampa para vehículos"
 
 msgid "Spikes"
 msgstr "Resorte con pinchos (para el control de acceso unidireccional)"
@@ -18970,8 +19325,13 @@ msgstr "Columnata (galería, soportal, pórtico, peristilo, claustro, etc.)"
 msgid "Avalanche Protector"
 msgstr "Falso túnel contra avalanchas"
 
+msgctxt "main group"
 msgid "Water"
-msgstr "Lámina de agua"
+msgstr "Agua"
+
+msgctxt "sub group"
+msgid "Water"
+msgstr "Agua"
 
 msgid "Drain"
 msgstr "Desagüe"
@@ -19025,6 +19385,10 @@ msgstr "Embalse"
 msgid "Covered Reservoir"
 msgstr "Depósito de agua"
 
+msgctxt "natural"
+msgid "Water"
+msgstr "Agua"
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr "Un cuerpo de agua estancada, tal como un lago o un estanque."
 
@@ -19168,11 +19532,125 @@ msgid "Marina"
 msgstr "Puerto deportivo"
 
 msgid "Dump Station"
-msgstr ""
+msgstr "Estación de descarga"
 
 msgid "public"
 msgstr "público"
 
+msgid "Marine Fuel"
+msgstr "Combustible marítimo"
+
+msgid "Agip"
+msgstr "Agip"
+
+msgid "Aral"
+msgstr "Aral"
+
+msgid "Avia"
+msgstr "Avia"
+
+msgid "BP"
+msgstr "BP"
+
+msgid "Chevron"
+msgstr "Chevron"
+
+msgid "Citgo"
+msgstr "Citgo"
+
+msgid "Eni"
+msgstr "Eni"
+
+msgid "Esso"
+msgstr "Esso"
+
+msgid "Exxon"
+msgstr "Exxon"
+
+msgid "Gulf"
+msgstr "Gulf"
+
+msgid "Mobil"
+msgstr "Mobil"
+
+msgid "OMV"
+msgstr "OMV"
+
+msgid "Petro-Canada"
+msgstr "Petro-Canada"
+
+msgid "Pioneer"
+msgstr "Pioneer"
+
+msgid "Q8"
+msgstr "Q8"
+
+msgid "Repsol"
+msgstr "Repsol"
+
+msgid "Shell"
+msgstr "Shell"
+
+msgid "Socar"
+msgstr "Socar"
+
+msgid "Statoil"
+msgstr "Statoil"
+
+msgid "Sunoco"
+msgstr "Sunoco"
+
+msgid "Tamoil"
+msgstr "Tamoil"
+
+msgid "Texaco"
+msgstr "Texaco"
+
+msgid "Total"
+msgstr "Total"
+
+msgid "Independent"
+msgstr "Independiente"
+
+msgid "Fuel types:"
+msgstr "Tipos de combustible:"
+
+msgid "Diesel"
+msgstr "Diesel"
+
+msgid "Bio Diesel"
+msgstr "Bio Diesel"
+
+msgid "Octane 80"
+msgstr "80 octanos"
+
+msgid "Octane 91"
+msgstr "91 octanos"
+
+msgid "Octane 92"
+msgstr "92 octanos"
+
+msgid "Octane 95"
+msgstr "95 octanos"
+
+msgid "Octane 98"
+msgstr "98 octanos"
+
+msgid "Octane 100"
+msgstr "100 octanos"
+
+msgid "E10 (10% Ethanol mix)"
+msgstr "E10 (mezcla al 10% de etanol)"
+
+msgid "E85 (85% Ethanol mix)"
+msgstr "E85 (mezcla al 85% de etanol)"
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr "GLP (Gas licuado de petróleo)"
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr "GNC (Gas Natural Comprimido)"
+
 msgid "Pier"
 msgstr "Embarcadero"
 
@@ -19289,6 +19767,9 @@ msgstr "Tope de vía o topera"
 msgid "Railway Switch"
 msgstr "Interruptor de vías"
 
+msgid "Railway milestone"
+msgstr "Hito, mojón o punto kilométrico de ferrocarril"
+
 msgid "Aerialway"
 msgstr "Remonte"
 
@@ -19299,7 +19780,7 @@ msgid "Number of people per hour"
 msgstr "Número de personas por hora"
 
 msgid "Number of people per car"
-msgstr "Número de personas por coche"
+msgstr "Número de personas por vehículo"
 
 msgid "Typical journey time in minutes"
 msgstr "Tiempo de viaje típico en cuestión de minutos"
@@ -19403,7 +19884,7 @@ msgid "Parking Space"
 msgstr "Área de estacionamiento"
 
 msgid "Capacity"
-msgstr "Capacidad (Coches)"
+msgstr "Capacidad (vehículos)"
 
 msgid "Covered (with roof)"
 msgstr "Cubierto (con tejado)"
@@ -19414,78 +19895,6 @@ msgstr "Entrada al aparcamiento"
 msgid "Fuel"
 msgstr "Gasolinera"
 
-msgid "Agip"
-msgstr "Agip"
-
-msgid "Aral"
-msgstr "Aral"
-
-msgid "Avia"
-msgstr "Avia"
-
-msgid "BP"
-msgstr "BP"
-
-msgid "Chevron"
-msgstr "Chevron"
-
-msgid "Citgo"
-msgstr "Citgo"
-
-msgid "Eni"
-msgstr "Eni"
-
-msgid "Esso"
-msgstr "Esso"
-
-msgid "Exxon"
-msgstr "Exxon"
-
-msgid "Gulf"
-msgstr "Gulf"
-
-msgid "Mobil"
-msgstr "Mobil"
-
-msgid "OMV"
-msgstr "OMV"
-
-msgid "Petro-Canada"
-msgstr "Petro-Canada"
-
-msgid "Pioneer"
-msgstr "Pioneer"
-
-msgid "Q8"
-msgstr "Q8"
-
-msgid "Repsol"
-msgstr "Repsol"
-
-msgid "Shell"
-msgstr "Shell"
-
-msgid "Socar"
-msgstr "Socar"
-
-msgid "Statoil"
-msgstr "Statoil"
-
-msgid "Sunoco"
-msgstr "Sunoco"
-
-msgid "Tamoil"
-msgstr "Tamoil"
-
-msgid "Texaco"
-msgstr "Texaco"
-
-msgid "Total"
-msgstr "Total"
-
-msgid "Independent"
-msgstr "Independiente"
-
 msgid "With shop"
 msgstr "Con tienda"
 
@@ -19495,51 +19904,12 @@ msgstr "tiendita"
 msgid "kiosk"
 msgstr "quiosco"
 
-msgid "Fuel types:"
-msgstr "Tipos de combustible:"
-
-msgid "Diesel"
-msgstr "Diesel"
-
-msgid "Bio Diesel"
-msgstr "Bio Diesel"
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr "Diesel (Gas a Liquido - ultmate diesel)"
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr "Diesel para Vehículos pesados y buenos"
 
-msgid "Octane 80"
-msgstr "80 octanos"
-
-msgid "Octane 91"
-msgstr "91 octanos"
-
-msgid "Octane 92"
-msgstr "92 octanos"
-
-msgid "Octane 95"
-msgstr "95 octanos"
-
-msgid "Octane 98"
-msgstr "98 octanos"
-
-msgid "Octane 100"
-msgstr "100 octanos"
-
-msgid "E10 (10% Ethanol mix)"
-msgstr "E10 (mezcla al 10% de etanol)"
-
-msgid "E85 (85% Ethanol mix)"
-msgstr "E85 (mezcla al 85% de etanol)"
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr "GLP (Gas licuado de petróleo)"
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr "GNC (Gas Natural Comprimido)"
-
 msgid "1/25 mix (mofa/moped)"
 msgstr "mezcla 1/25 (ciclomotor)"
 
@@ -19760,9 +20130,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr "#CD853F"
 
-msgid "route segment"
-msgstr "segmento de la ruta"
-
 msgid "stop position"
 msgstr "punto de detención"
 
@@ -19781,6 +20148,9 @@ msgstr "plataforma (salida)"
 msgid "platform (entry only)"
 msgstr "plataforma (entrada)"
 
+msgid "route segment"
+msgstr "segmento de la ruta"
+
 msgid "Route Master"
 msgstr "Ruta maestra"
 
@@ -19983,6 +20353,12 @@ msgstr "Hotel"
 msgid "Stars"
 msgstr "Estrellas"
 
+msgid "Rooms"
+msgstr "Habitaciones"
+
+msgid "Beds"
+msgstr "Camas"
+
 msgid "Motel"
 msgstr "Motel"
 
@@ -19999,7 +20375,7 @@ msgid "Alpine Hut"
 msgstr "Cabaña alpina"
 
 msgid "Caravan Site/RV Park"
-msgstr "Sitio de pernocte para coches"
+msgstr "Sitio de pernocte para vehículos"
 
 msgid "Number of places"
 msgstr "Número de lugares"
@@ -20073,6 +20449,9 @@ msgstr "sandwich / emparedado"
 msgid "sushi"
 msgstr "sushi"
 
+msgid "steak_house"
+msgstr "Asador"
+
 msgid "Microbrewery"
 msgstr "Cervecería artesanal"
 
@@ -20288,6 +20667,9 @@ msgstr "Sauna"
 msgid "Horse Riding"
 msgstr "Equitación"
 
+msgid "Casino"
+msgstr "Casino"
+
 msgid "Brothel"
 msgstr "Burdel o prostíbulo"
 
@@ -20564,7 +20946,7 @@ msgid "University"
 msgstr "Universidad"
 
 msgid "College"
-msgstr "Instituto de enseñanza secundaria"
+msgstr "Facultad"
 
 msgid "Driving School"
 msgstr "Autoescuela"
@@ -20588,7 +20970,7 @@ msgid "Clinic"
 msgstr "Clínica"
 
 msgid "Doctor''s Office"
-msgstr "Oficina del doctor"
+msgstr "Consultorio médico"
 
 msgid "Dentist"
 msgstr "Dentista"
@@ -20777,8 +21159,8 @@ msgstr "Muestra la presión barométrica"
 msgid "Shows humidity"
 msgstr "Muestra la humedad"
 
-msgid "Recycling"
-msgstr "Reciclaje"
+msgid "Recycling Container"
+msgstr "Contenedor de reciclado"
 
 msgid "Batteries"
 msgstr "Baterías"
@@ -20786,20 +21168,47 @@ msgstr "Baterías"
 msgid "Cans"
 msgstr "Envases"
 
+msgid "Cardboard"
+msgstr "Cartón"
+
+msgid "Electrical Appliances"
+msgstr "Aparatos eléctricos"
+
 msgid "Glass"
 msgstr "Vidrio"
 
+msgid "Glass Bottles"
+msgstr "Botellas de vidrio"
+
+msgid "Green Waste"
+msgstr "Residuos verdes"
+
 msgid "Paper"
 msgstr "Papel"
 
+msgid "Plastic"
+msgstr "Plástico"
+
+msgid "Plastic Bottles"
+msgstr "Botellas De Plástico"
+
+msgid "Plastic Packaging"
+msgstr "Envases de plástico"
+
 msgid "Scrap Metal"
 msgstr "Chatarra"
 
-msgid "container"
-msgstr "contenedor"
+msgid "Shoes"
+msgstr "Zapatería"
+
+msgid "Small Appliances"
+msgstr "Pequeños electrodomésticos"
+
+msgid "Waste"
+msgstr "Residuos"
 
-msgid "centre"
-msgstr "centro"
+msgid "Recycling Centre"
+msgstr "Centro de Reciclaje"
 
 msgid "Waste Basket/Trash Can"
 msgstr "Papelera"
@@ -20808,16 +21217,16 @@ msgid "Waste Disposal/Dumpster"
 msgstr "Contenedor de residuos"
 
 msgid "Sanitary Dump Station"
-msgstr ""
+msgstr "Estación de descarga sanitaria"
 
 msgid "Suction pumpout"
-msgstr ""
+msgstr "Bombeo de succión"
 
 msgid "Gravity drain for hose"
-msgstr ""
+msgstr "Drenaje para la manguera por gravedad"
 
 msgid "Casette or Elsan Disposal"
-msgstr ""
+msgstr "Eliminación de Casete o Elsan"
 
 msgid "Operation times"
 msgstr "Ciclo de funcionamiento"
@@ -21002,6 +21411,9 @@ msgstr "Tiro con arco"
 msgid "Track and Field Athletics"
 msgstr "Competencias de pista y campo (Track&Field)"
 
+msgid "Running"
+msgstr "Corriendo"
+
 msgid "Climbing"
 msgstr "Alpinismo"
 
@@ -21177,12 +21589,18 @@ msgstr "Béisbol"
 msgid "Basketball"
 msgstr "Baloncesto"
 
+msgid "Handball"
+msgstr "Balonmano"
+
 msgid "Volleyball"
 msgstr "Voleibol"
 
 msgid "Beach Volleyball"
 msgstr "Voleyplaya"
 
+msgid "Billiards"
+msgstr "Billar"
+
 msgid "Golf"
 msgstr "Golf"
 
@@ -21198,14 +21616,14 @@ msgstr "Bowls o bolo césped"
 msgid "Cricket"
 msgstr "Cricket"
 
-msgid "Cricket Nets"
-msgstr "Cricket con redes"
-
 msgid "Croquet"
 msgstr "Croquet"
 
-msgid "Hockey"
-msgstr "Hockey"
+msgid "Field Hockey"
+msgstr "Hockey sobre hierba"
+
+msgid "Ice Hockey"
+msgstr "Hockey sobre hielo"
 
 msgid "Pelota"
 msgstr "Frontón"
@@ -21228,9 +21646,6 @@ msgstr "Carreta de karting"
 msgid "Motocross"
 msgstr "Motocross"
 
-msgid "Safety Training"
-msgstr "Capacitación sobre conducción segura"
-
 msgid "Model Aerodrome"
 msgstr "Aeromodelismo"
 
@@ -21249,9 +21664,6 @@ msgstr "pista"
 msgid "RC Car"
 msgstr "Vehículos por control remoto"
 
-msgid "Raceway"
-msgstr "Pista de carreras"
-
 msgid "Man Made"
 msgstr "Hecho por el hombre"
 
@@ -21321,7 +21733,15 @@ msgstr "caseta"
 
 msgctxt "building"
 msgid "storage_tank"
-msgstr ""
+msgstr "Tanque de almacenamiento"
+
+msgctxt "building"
+msgid "supermarket"
+msgstr "supermercado"
+
+msgctxt "building"
+msgid "gasometer"
+msgstr "Contenedor de gas (gasometer)"
 
 msgctxt "building"
 msgid "cowshed"
@@ -21437,39 +21857,39 @@ msgid "Gasometer"
 msgstr "Gasómetro"
 
 msgid "Storage Tank"
-msgstr ""
+msgstr "Tanque de almacenamiento"
 
 msgctxt "content"
 msgid "fuel"
-msgstr ""
+msgstr "gasolina"
 
 msgctxt "content"
 msgid "manure"
-msgstr ""
+msgstr "Abono"
 
 msgctxt "content"
 msgid "oil"
-msgstr ""
+msgstr "petróleo"
 
 msgctxt "content"
 msgid "sewage"
-msgstr ""
+msgstr "aguas residuales"
 
 msgctxt "content"
 msgid "silage"
-msgstr ""
+msgstr "Ensilado"
 
 msgctxt "content"
 msgid "slurry"
-msgstr ""
+msgstr "viscoso"
 
 msgctxt "content"
 msgid "water"
-msgstr ""
+msgstr "agua"
 
 msgctxt "content"
 msgid "wine"
-msgstr ""
+msgstr "vino"
 
 msgid "Bunker Silo"
 msgstr "Silo de búnker"
@@ -22646,9 +23066,6 @@ msgstr "Vino"
 msgid "Boutique"
 msgstr "Boutique"
 
-msgid "Shoes"
-msgstr "Zapatería"
-
 msgid "Outdoor"
 msgstr "Tienda de actividades al aire libre"
 
@@ -23309,7 +23726,7 @@ msgid "Large area covered with sand."
 msgstr "Gran área cubierta con arena."
 
 msgid "Bare Rock"
-msgstr "Roca desnuda."
+msgstr "Roquedo"
 
 msgid ""
 "For areas of solid visible rock that is sparsely vegetated or not vegetated "
@@ -23686,12 +24103,12 @@ msgstr "potencial"
 msgid "Contact (Common Schema)"
 msgstr "Contacto (esquema común)"
 
-msgid "Fax Number"
-msgstr "Número de fax"
-
 msgid "Email Address"
 msgstr "Correo electrónico"
 
+msgid "Fax Number"
+msgstr "Número de fax"
+
 msgid "Image"
 msgstr "Imagen"
 
@@ -24121,6 +24538,9 @@ msgstr "objeto incompleto: sólo {0} y {1}"
 msgid "{0} together with addr:*"
 msgstr "{0} junto con addr:*"
 
+msgid "{0} together with {1} and conflicting values"
+msgstr "{0} junto a {1} y valores en conflicto"
+
 msgid "{0} on suspicious object"
 msgstr "{0} en objeto sospechoso"
 
@@ -24145,6 +24565,18 @@ msgstr "nombre alternativo sin {0}"
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr "uso incompleto de {0} en lugar de {1}"
 
+msgid "Same value of {0} and {1}"
+msgstr "El mismo valor que {0} y {1}"
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr "El mismo valor que {0}, {1} y {2}"
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr "{0} y {1} junto con {2} y valores en conflicto"
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr "Combinación de etiquetas sospechosa: {0} and {1}"
+
 msgid "{0}={1} is deprecated"
 msgstr "{0}={1} está obsoleto"
 
@@ -24218,7 +24650,10 @@ msgid "key with uncommon character"
 msgstr "clave con carácter poco frecuente"
 
 msgid "uncommon short key"
-msgstr ""
+msgstr "clave corta poco frecuente"
+
+msgid "{0} is inaccurate"
+msgstr "{0} no es exacto"
 
 msgid "{0} on a node. Should be used on a way."
 msgstr "{0} sobre un nodo. Debería ser utilizado sobre una vía."
@@ -24314,9 +24749,22 @@ msgstr ""
 "{0}: metros es el valor por omisión; el punto es el separador; para otras "
 "unidades, introduzca un espacio y luego la unidad"
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+"{0}: tonelada es la unidad por defecto; el separador es el punto y coma; si "
+"ingresa la unidad, introduzca un espacio y luego la unidad"
+
 msgid "unusual {0} format"
 msgstr "formato {0} inusual"
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+"{0}: kilómetros es la unidad por defecto; el separador es el punto y coma; "
+"si ingresa la unidad, introduzca un espacio y luego la unidad"
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 "el voltaje debería ser en voltios sin unidades/delimitadores/espacios"
@@ -24705,6 +25153,9 @@ msgstr "Añadir puntos fijos con click"
 msgid "Add fixed points on spacebar"
 msgstr "Añadir puntos fijos con barra espaciadora"
 
+msgid "Allow edit existing ways"
+msgstr "Permite editar caminos existentes"
+
 msgid "Draw closed polygons only"
 msgstr "Dibujar únicamente polígonos cerrados"
 
@@ -24768,9 +25219,6 @@ msgstr "Dibujar la vía con el ratón"
 msgid "min distance={0} px ({1} m)"
 msgstr "distancia mínima={0} px ({1} m)"
 
-msgid "Convert way to FastDraw line"
-msgstr "Convertir la vía a una línea FastDraw"
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr "Eps={0}, {1} puntos, {2} p/km"
 
@@ -25017,7 +25465,7 @@ msgid "Recommend categories to your newly created instances."
 msgstr "Recomendar categorías para las nuevas instancias creadas"
 
 msgid "Training process configuration"
-msgstr ""
+msgstr "Configuración del proceso de entrenamiento"
 
 msgid "Model Settings"
 msgstr "Configuración de Modelo"
@@ -25030,13 +25478,13 @@ msgid "Add Recommendation"
 msgstr "Agregar recomendación"
 
 msgid "Add a recommended key/value pair to your object"
-msgstr ""
+msgstr "Añadir un par de clave/valor recomendado a su objeto"
 
 msgid "Train a Model"
-msgstr ""
+msgstr "Entrenar un modelo"
 
 msgid "Start the training engine!"
-msgstr ""
+msgstr "¡Iniciar el motor de entrenamiento!"
 
 msgid "Edit opening hours"
 msgstr "Horarios de apertura"
@@ -25299,7 +25747,7 @@ msgid "Align Ways control panel"
 msgstr "Panel de control de Alinear Vías"
 
 msgid "This panel activates in Align Ways mode:"
-msgstr "Este panel se activa en el modo Alinear Vías"
+msgstr "Este panel se activa en el modo Alinear Vías:"
 
 msgid "Length preserved"
 msgstr "Se conserva la longitud"
@@ -25417,8 +25865,8 @@ msgstr ""
 "<html>\n"
 "<p style=\"font-family: sans-serif; font-weight: bold;\">AlignWays le\n"
 "ayudará a alinear segmentos de vías.  Puede serle útil cuando por\n"
-"ejemplo traza vías y desea que las laterales estén paralelas al\n"
-"camino o la calle.<br>\n"
+"ejemplo traza las líneas exteriores de un edificio  y desea que las\n"
+"laterales sean paralelas al camino o la calle.<br>\n"
 "<br>\n"
 "Algunos consejos antes de comenzar::\n"
 "</p>\n"
@@ -25525,7 +25973,7 @@ msgstr ""
 "<html>\n"
 "<div style=\"font-family:sans-serif\">\n"
 "<ul>\n"
-"  <li><b>Alinear los objetos.</b> Pulse <b><i><span "
+"  <li><b>Alinear los segmentos.</b> Pulse <b><i><span "
 "style=\"color:green\">{0}</span></i></b>. De forma alternativa encontrará el "
 "comando en el menú <b>Herramientas</b>\n"
 " o también puede añadir el botón a la <b>barra de herramientas</b>.\n"
@@ -25648,53 +26096,68 @@ msgstr ""
 "Cuéntenos qué hizo, qué pasó, y añada el texto al informe de error, de esa "
 "manera podemos encontrar el origen del problema."
 
-msgid "Area detection algorithm settings."
-msgstr "Preferencias del algoritmo de detección de áreas."
+msgid "Area Selector - Preferences"
+msgstr "Selector de área - Preferencias"
+
+msgid "Settings for the area detection algorithm."
+msgstr "Configuración para el algoritmo de detección de área."
+
+msgid "Boofcv - high resolution images"
+msgstr "Boofcv - imágenes de alta resolución"
 
-msgid "Algorithm Settings"
-msgstr "Configuración del Algoritmo"
+msgid "Custom - low resolution images"
+msgstr "Custom - imágenes de baja resolución"
 
 msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
-"El umbral de color define cuán lejos puede estar el color original del color "
-"a seleccionar (por defecto: {0})."
+"Elegir qué algoritmo debe utilizarse. \"Auto\" intenta encontrar una zona "
+"con Boofcv y utiliza el algoritmo personalizado como reserva."
 
-msgid "Color Threshold"
-msgstr "Umbral de color"
+msgid "Algorithm"
+msgstr "Algoritmo"
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
-"Distancia máxima en píxeles que puede haber en la secuencia entre cada punto "
-"desde una línea (por defecto: {0})."
+"Píxeles máximos que un punto puede estar alejado de una línea y todavía ser "
+"considerado como un miembro de esta línea (Por defecto: {0})."
 
-msgid "Tolerance Distance"
+msgid "Distance Tolerance"
 msgstr "Distancia de tolerancia"
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
-"Tolerancia para los ángulos de ajuste, en radiantes (por defecto {0})."
+"Líneas con un pequeño ángulo (grados) que se combinarán a una línea (Por "
+"defecto {0})."
 
-msgid "Tolerance Angle"
+msgid "Angle Tolerance"
 msgstr "Ángulo de tolerancia"
 
-msgid "Plugin Settings"
-msgstr "Ajustes del complemento"
-
-msgid "Show Address Dialog after mapping an area"
-msgstr "Mostrar el Diálogo de Dirección después de mapear un área"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
+msgstr ""
+"El umbral de color define cuánto un color puede variar del color "
+"seleccionado. Los valores rojo, verde y azul deben estar en el rango de "
+"(seleccionado - umbral) a (seleccionado + umbral). (Por defecto: {0})."
 
-msgid "show address dialog"
-msgstr "mostrar el diálogo de dirección"
+msgid "Color Threshold"
+msgstr "Umbral de color"
 
-msgid "Merge nodes with neighbors"
-msgstr "Combinar nodos con sus vecinos"
+msgid "Use HSV based algorithm"
+msgstr "Utilizar el algoritmo basado en HSV"
 
-msgid "merge nodes"
-msgstr "combinar nodos"
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
+msgstr ""
+"Utilizar el tono y la saturación en lugar de la distinción RGB para "
+"seleccionar colores que coinciden."
 
 msgid "How often thinning operation should be applied (Default {0})."
 msgstr "Cuán seguido debería aplicarse la operación (por defecto {0})."
@@ -25702,11 +26165,23 @@ msgstr "Cuán seguido debería aplicarse la operación (por defecto {0})."
 msgid "Thinning Iterations"
 msgstr "Iteraciones de afinamiento"
 
-msgid "Use hue and saturation instead of RGB distinction"
-msgstr "Use hue y saturación en lugar de una distinción por RGB"
+msgid "show address dialog"
+msgstr "mostrar el diálogo de dirección"
+
+msgid "Show Address Dialog after mapping an area"
+msgstr "Mostrar el Diálogo de Dirección después de mapear un área"
+
+msgid "merge nodes"
+msgstr "combinar nodos"
+
+msgid "Merge nodes with existing nodes"
+msgstr "Combinar nodos con nodos existentes"
+
+msgid "Debug"
+msgstr "Depurar"
 
-msgid "use HSV based algorithm"
-msgstr "Use el algoritmo basado en HSV"
+msgid "Debugging mode will write images for each processing step."
+msgstr "El modo de depuración escribirá imágenes para cada paso del proceso."
 
 msgid "Street Name:"
 msgstr "Nombre de Calle:"
@@ -25767,15 +26242,18 @@ msgstr "Combinar puntos de dirección"
 
 msgid "Move tags from address nodes inside buildings to building ways"
 msgstr ""
+"Mover las etiquetas de los nodos de dirección dentro de los edificios a las "
+"vías de edificación"
 
 msgid "Select both address nodes and building ways to merge"
 msgstr ""
+"Seleccione los nodos de dirección y la vía de edificación a fusionarse"
 
 msgid "No address nodes found in the selection"
 msgstr "Sin nodos de dirección encontrados en la selección"
 
 msgid "No building ways found in the selection"
-msgstr ""
+msgstr "No hay vías de edificación encontradas en la selección"
 
 msgid "There is {0} building with multiple address nodes inside"
 msgid_plural "There are {0} buildings with multiple address nodes inside"
@@ -26382,6 +26860,9 @@ msgstr "Reiniciar rectificación"
 msgid "Reset offset (only vector images)"
 msgstr "Reiniciar rectificación (únicamente imágenes vectoriales)"
 
+msgid "Blank Layer"
+msgstr "Capa vacía"
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr "Capa WMS ({0}), {1} tesela(s) cargada"
 
@@ -27948,14 +28429,324 @@ msgstr "Activar el complemento de informes de error de MapDust"
 msgid "Missing input data"
 msgstr "Faltan datos de entrada"
 
+msgid "Mapillary Images"
+msgstr "Imágenes de Mapillary"
+
+msgid "Mapillary layer"
+msgstr "Capa de Mapillary"
+
+msgid "Total images:"
+msgstr "Número total de imágenes:"
+
+msgid "images"
+msgstr "Imágenes"
+
 msgid "Mapillary"
 msgstr "Mapillary"
 
-msgid "Create Mapillary layer."
-msgstr "Crear capa Mapillary"
+msgid "Create Mapillary layer"
+msgstr "Crear capa de Mapillary"
 
-msgid "Export"
-msgstr "Exportar"
+msgid "Start Mapillary layer"
+msgstr "Iniciar capa de Mapillary"
+
+msgid "Download Mapillary images in current view"
+msgstr "Descargar imágenes de Mapillary en la vista actual"
+
+msgid "Export pictures"
+msgstr "Exportar imágenes"
+
+msgid "Export Mapillary pictures"
+msgstr "Exportar imágenes de Mapillary"
+
+msgid "Export images"
+msgstr "Exportar imágenes"
+
+msgid "Import pictures"
+msgstr "Importar imágenes"
+
+msgid "Import local pictures"
+msgstr "Importar imágenes locales"
+
+msgid "Import pictures into Mapillary layer"
+msgstr "Importar imágenes a la capa de Mapillary"
+
+msgid "Select pictures"
+msgstr "Seleccionar imágenes"
+
+msgid "Import pictures into sequence"
+msgstr "Importar imágenes dentro de una secuencia"
+
+msgid "Import pictures into Mapillary layer in a sequence"
+msgstr "Importar imágenes dentro de la capa de Mapillary en una secuencia"
+
+msgid "Join mode"
+msgstr "Modo unión"
+
+msgid "Join/unjoin pictures"
+msgstr "Unir/separar imágenes"
+
+msgid "Join Mapillary pictures"
+msgstr "Unir imágenes de Mapillary"
+
+msgid "Upload pictures"
+msgstr "Subir fotos"
+
+msgid "Upload Mapillary pictures"
+msgstr "Subir fotos Mapillary"
+
+msgid "Upload pictures."
+msgstr "Subir imágenes."
+
+msgid "Walk mode"
+msgstr "Modo caminar"
+
+msgid "Start walk mode"
+msgstr "Iniciar modo caminar"
+
+msgid "Zoom to selected image"
+msgstr "Zoom dentro de la imagen seleccionada"
+
+msgid "Zoom to the currently selected Mapillary image"
+msgstr "Acercar a la imagen seleccionada de Mapillary"
+
+msgid "Uploaded {0} images"
+msgstr "Subidas {0} imágenes"
+
+msgid "Approve upload on the website"
+msgstr "Aprobar subida en página web"
+
+msgid "View in website"
+msgstr "Ver en la página web"
+
+msgid "Copy key"
+msgstr "Copiar llave"
+
+msgid "Copy key tag"
+msgstr "Copiar etiqueta de llave"
+
+msgid "Edit on website"
+msgstr "Editar en página web"
+
+msgid "Export all images"
+msgstr "Exportar todas las imágenes"
+
+msgid "Export selected sequence"
+msgstr "Exportar la secuencia seleccionada"
+
+msgid "Export selected images"
+msgstr "Exportar las imágenes seleccionadas"
+
+msgid "Rewrite imported images"
+msgstr "Reescribir las imágenes importadas"
+
+msgid "Select a folder"
+msgstr "Seleccionar una carpeta"
+
+msgid "Explore"
+msgstr "Explorar"
+
+msgid "Select a directory"
+msgstr "Seleccionar un directorio"
+
+msgid "Speed limit"
+msgstr "Límite de velocidad"
+
+msgid "Give way"
+msgstr "Ceda el paso"
+
+msgid "No entry"
+msgstr "Ninguna entrada"
+
+msgid "Intersection danger"
+msgstr "Peligro por intersección"
+
+msgid "Mandatory direction (any)"
+msgstr "Dirección obligatoria (cualquiera)"
+
+msgid "No turn"
+msgstr "No gire"
+
+msgid "Uneven road"
+msgstr "Camino irregular"
+
+msgid "No parking"
+msgstr "No estacionarse"
+
+msgid "No overtaking"
+msgstr "No rebasar"
+
+msgid "Pedestrian crossing"
+msgstr "Cruce de peatones"
+
+msgid "Years"
+msgstr "Años"
+
+msgid "Months"
+msgstr "Meses"
+
+msgid "Days"
+msgstr "Días"
+
+msgid "Mapillary filter"
+msgstr "Filtro de Mapillary"
+
+msgid "Open Mapillary filter dialog"
+msgstr "Abrir diálogo del filtro de Mapillary"
+
+msgid "Downloaded images"
+msgstr "Imágenes descargadas"
+
+msgid "Only images with signs"
+msgstr "Solo imágenes con señales"
+
+msgid "Choose signs"
+msgstr "Elegir señales"
+
+msgid "Mapillary history"
+msgstr "Historial de Mapillary"
+
+msgid "Open Mapillary history dialog"
+msgstr "Abrir el diálogo del historial de Mapillary"
+
+msgid "Open Mapillary window"
+msgstr "Abrir ventana de Mapillary"
+
+msgid "Mapillary dialog"
+msgstr "Diálogo de Mapillary"
+
+msgid "Open Mapillary main dialog"
+msgstr "Abrir ventana principal de Mapillary"
+
+msgid "Next picture"
+msgstr "Siguiente imagen"
+
+msgid "Shows the next picture in the sequence"
+msgstr "Mostrar la siguiente imagen en una secuencia"
+
+msgid "Previous picture"
+msgstr "Previa imagen"
+
+msgid "Shows the previous picture in the sequence"
+msgstr "Mostrar la imagen previa en una secuencia"
+
+msgid "Jump to red"
+msgstr "Saltar al rojo"
+
+msgid "Jumps to the picture at the other side of the red line"
+msgstr "Saltar a la imagen del otro lado de la línea roja"
+
+msgid "Jump to blue"
+msgstr "Saltar al azul"
+
+msgid "Jumps to the picture at the other side of the blue line"
+msgstr "Saltar a la imagen del otro lado de la línea azul"
+
+msgid "Stops the walk."
+msgstr "Detiene la caminata."
+
+msgid "Play"
+msgstr "Iniciar"
+
+msgid "Continues with the paused walk."
+msgstr "Continúa con la caminata pausada."
+
+msgid "Pause"
+msgstr "Pausar"
+
+msgid "Pauses the walk."
+msgstr "Pausar la caminata."
+
+msgid "Reverse buttons position when displaying images."
+msgstr "Invertir la posición de los botones al mostrar las imágenes."
+
+msgid "Display hour when the picture was taken"
+msgstr "Mostrar la hora de cuando la foto fue tomada"
+
+msgid "Use 24 hour format"
+msgstr "Usar formato de 24 horas"
+
+msgid "Move to picture''s location with next/previous buttons"
+msgstr "Mover a ubicación de imágenes con el botón siguiente/anterior"
+
+msgid "Download mode: "
+msgstr "Modo de descarga: "
+
+msgid "Upload selected sequence"
+msgstr "Subir secuencia seleccionada"
+
+msgid "Delete after upload"
+msgstr "Eliminar después de subir"
+
+msgid "Wait for full quality pictures"
+msgstr "Esperar por imágenes de máxima calidad"
+
+msgid "Follow selected image"
+msgstr "Seguir la imágen seleccionada"
+
+msgid "Go forward"
+msgstr "Avanzar"
+
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] "Eliminada {0} imágen"
+msgstr[1] "Eliminadas {0} imágenes"
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] "Importada {0} imágen"
+msgstr[1] "Importadas {0} imágenes"
+
+msgid "2 images joined"
+msgstr "2 imágenes unidas"
+
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] "{0} imagen movida"
+msgstr[1] "{0} imágenes movidas"
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] "{0} imagen girada"
+msgstr[1] "{0} imágenes giradas"
+
+msgid "2 images unjoined"
+msgstr "2 imágenes  separadas"
+
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
+msgstr ""
+"El área de OSM descargada es demasiado grande. El modo de descarga se ha "
+"cambiado a semiautomática hasta que se reinicie la capa."
+
+msgid "Downloading"
+msgstr "Descargando"
+
+msgid "Select mode"
+msgstr "Modo selección"
+
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
+msgstr ""
+"<html><head><title>Mapillary login</title></head><body>Inicio de sesión "
+"exitoso, regresar a JOSM.</body></html>"
+
+msgid "Downloading Mapillary images"
+msgstr "Descargando imágenes de Mapillary"
+
+msgid "Total Mapillary images: {0}"
+msgstr "Imágenes de Mapillary totales: {0}"
+
+msgid "No images found"
+msgstr "No se encontraron las imágenes"
+
+msgid "Finished upload"
+msgstr "Carga terminada"
+
+msgid "Uploading: {0}"
+msgstr "Cargando: {0}"
 
 msgid "Measured values"
 msgstr "Valores medidos"
@@ -27976,6 +28767,9 @@ msgstr "Longitud de la selección"
 msgid "Selection Area"
 msgstr "Área de la selección"
 
+msgid "Selection Radius"
+msgstr "Radio de selección"
+
 msgid "Angle"
 msgstr "Ángulo"
 
@@ -28041,52 +28835,6 @@ msgstr "Crear restricción de giro a la izquierda Michigan"
 msgid "Unable to find via nodes. Please check your selection"
 msgstr "No se encontraron nodos de vía. Por favor revise su selección"
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-"Consulta XAPI, por ejemplo, '''' (para descargar todos los datos), "
-"''[highway=*]'', o ''[[network=VRR][ref=603|613]''"
-
-msgid "Download from OSM mirror..."
-msgstr "Descargar desde el servidor espejo OSM..."
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-"Esta consulta XAPI pareciera ser incorrecta, por favor realiza una doble "
-"verificación"
-
-msgid "Object type: "
-msgstr "Tipo de objeto: "
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr "Tipo de objeto OSM a descargarse (utilizar ''*'' para cualquiera)"
-
-msgid "XAPI query: "
-msgstr "Consulta XAPI: "
-
-msgid "Download from Overpass API ..."
-msgstr "Descargando desde la API Overpass..."
-
-msgid "Download map data from Overpass API server."
-msgstr "Descargar datos del mapa desde el servidor API Overpass."
-
-msgid "Overpass query: "
-msgstr "Consulat de paso elevado: "
-
-msgid "Select OSM mirror URL"
-msgstr "Seleccionar la URL del servidor espejo de OSM"
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-"Seleccionar la URL del servidor espejo de OSM del cual descargar los datos."
-
-msgid "Base URL"
-msgstr "URL base"
-
-msgid "Enforce meta data"
-msgstr "Forzar meta datos"
-
 msgid "About Plugin"
 msgstr "Acerca del plugin"
 
@@ -28340,6 +29088,9 @@ msgstr ""
 "Visualizar las diferencias entre el conjutno de datos actuales y los datos "
 "existentes en OSM."
 
+msgid "Tools"
+msgstr "Herramientas"
+
 msgid "Open tools menu for this data."
 msgstr "Abrir menú de herramientas para estos datos."
 
@@ -29636,6 +30387,28 @@ msgstr "Transporte público: activar puntos de ruta"
 msgid "Public Transport: Edit waypoint name"
 msgstr "Transporte público: editar nombre del punto de ruta"
 
+msgid "Public transport routes"
+msgstr "Rutas de transporte público"
+
+msgid "Toggle direction arrows"
+msgstr "Cambiar la dirección de las flechas"
+
+msgid "Toggle reference labels"
+msgstr "Cambiar las etiquetas de referencia"
+
+msgid "Visualize public transport routes"
+msgstr "Visualizar las rutas del transporte público"
+
+msgid "Filters"
+msgstr "Filtros"
+
+msgid "Choose Filter"
+msgstr "Elegir filtro"
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+"Error de inicialización de JSlider. Asegúrese que su meta-inf esté correcta."
+
 msgid "Relation Toolbox"
 msgstr "Caja de herramientas de relaciones"
 
@@ -29811,6 +30584,9 @@ msgstr "Conjunto de cambios revertido"
 msgid "It is not allowed to revert changeset from {0}"
 msgstr "No está permitido revertir el conjunto de cambios desde {0}"
 
+msgid "Downloading objects history"
+msgstr "Descargando historial de objetos"
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr "Destino de mezcla ausente para {0} con id {1}"
 
@@ -29820,6 +30596,9 @@ msgstr "Historial de objetos"
 msgid "History reverter"
 msgstr "Revertidor de historial"
 
+msgid "Tool: Display objects history dialog"
+msgstr "Herramienta: Mostrar el diálogo de historial de objetos"
+
 msgid "Preparing history data..."
 msgstr "Preparando datos de historial..."
 
@@ -30008,6 +30787,9 @@ msgstr "Nuevo valor de {0}"
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr "Falta la preferencia ''{0}''. No se puede inicializar SdsApi."
 
+msgid "Proxy Authentication Required"
+msgstr "Autenticación de proxy requerida"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -30212,6 +30994,39 @@ msgstr "Umbral de Combinación de Nodos Cercanos"
 msgid "SeaMap Editor"
 msgstr "Editor SeaMap"
 
+msgid "Spline drawing"
+msgstr "Dibujando spline"
+
+msgid "Draw a spline curve"
+msgstr "Dibujar un curva spline"
+
+msgid "Spline goes outside of the world."
+msgstr "Spline pasa fuera del mundo."
+
+msgid "Add an existing node to spline: {0}"
+msgstr "Añadir un nodo existente a spline: {0}"
+
+msgid "Add a new node to spline: {0}"
+msgstr "Añadir un nuevo nodo a spline: {0}"
+
+msgid "Delete spline node {0}"
+msgstr "Eliminar nodo spline {0}"
+
+msgid "Finish spline"
+msgstr "Finalizar spline"
+
+msgid "Splines"
+msgstr "Splines"
+
+msgid "Spline drawing preferences"
+msgstr "Preferencias de dibujo spline"
+
+msgid "Curve steps"
+msgstr "Pasos de curva"
+
+msgid "Undelete node {0}"
+msgstr "Recuperar nodo {0}"
+
 msgid "OSM Export"
 msgstr "Exportar a OSM"
 
@@ -30221,6 +31036,9 @@ msgstr "Exportar datos de tráfico a archivo de red SUMO."
 msgid "SUMO Export"
 msgstr "Exportar a SUMO"
 
+msgid "Export"
+msgstr "Exportar"
+
 msgid "AutoSave LiveData"
 msgstr "Autograbar LiveData"
 
@@ -30476,9 +31294,6 @@ msgstr "Error de Tracer2"
 msgid "Parameter for server request"
 msgstr "Parámetro para solicitud de servidor"
 
-msgid "Tile size:"
-msgstr "Tamaño de la tesela:"
-
 msgid "Resolution:"
 msgstr "Resolución:"
 
@@ -32183,9 +32998,6 @@ msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 "Buscar un punto de vía. Mueva la vista de mapa para ver el punto de vía."
 
-msgid "Way Select"
-msgstr "Seleccionar vía"
-
 msgid "Add names from Wikipedia"
 msgstr "Añadir nombres desde Wikipedia"
 
@@ -32283,4 +33095,4 @@ msgid "Go driving"
 msgstr "Ir a manejar"
 
 msgid "Drive a race car on this layer"
-msgstr "Conduce un coche de carreras en esta capa"
+msgstr "Conduce un vehículo de carreras en esta capa"
diff --git a/i18n/po/et.po b/i18n/po/et.po
index 35c5e00..7e92da2 100644
--- a/i18n/po/et.po
+++ b/i18n/po/et.po
@@ -7,16 +7,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
-"PO-Revision-Date: 2015-02-28 09:53+0000\n"
-"Last-Translator: Margus Värton <margus at dakar.ee>\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
+"PO-Revision-Date: 2015-08-12 16:11+0000\n"
+"Last-Translator: AivoK <aivo.kuhlberg at hot.ee>\n"
 "Language-Team: Estonian <et at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:39+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:40+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: et\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -97,23 +97,20 @@ msgstr "Laadin aluskaardi eelistused"
 msgid "Updating user interface"
 msgstr "Uuendan kasutajaliidest"
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "Ignoreerin vigast faili URL''i: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "Ignoreerin vigast URL''i: \"{0}\""
 
 msgid "Warning"
 msgstr "Hoiatus"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "Ignoreerin vigast faili URL''i: \"{0}\""
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 "Parameetri \"downloadgps\" väärtuseks ei sobi failinimi või failile viitav "
 "URL"
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "Ignoreerin vigast URL''i: \"{0}\""
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -297,13 +294,13 @@ msgid "Please select at least three nodes."
 msgstr "Palun vali vähemalt kolm sõlme."
 
 msgid "Can not align a polygon. Abort."
-msgstr ""
+msgstr "Ei suuda joondada hulknurka. Katkestan."
 
 msgid "Intersection of three or more ways can not be solved. Abort."
-msgstr ""
+msgstr "Kolme või enama tee lõikumist ei saa lahendada. Katkestan."
 
 msgid "Two parallels ways found. Abort."
-msgstr ""
+msgstr "Leitud kaks paralleelset teed. Katkestan."
 
 msgid "data"
 msgstr "andmed"
@@ -397,8 +394,8 @@ msgstr ""
 
 msgid "Combine {0} way"
 msgid_plural "Combine {0} ways"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Ühenda {0} tee"
+msgstr[1] "Ühenda {0} teed"
 
 msgid "Please select at least two ways to combine."
 msgstr "Palun vali vähemalt kaks teed, mida sobitada."
@@ -453,10 +450,13 @@ msgid "Delete selected objects."
 msgstr "Kustuta valitud objektid."
 
 msgid "Toggle dialogs panel"
-msgstr ""
+msgstr "Lülita dialoogiaken"
 
 msgid "Toggle dialogs panel, maximize mapview"
-msgstr ""
+msgstr "Lülita dialoogiaken, maksimeeri kaardivaade"
+
+msgid "Distribute Nodes"
+msgstr "Jaota sõlmed"
 
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr "Aseta valitud sõlmed võrdsete vahemaade tagant mööda joont."
@@ -677,6 +677,8 @@ msgid ""
 "Some of the ways were part of relations that have been modified.<br>Please "
 "verify no errors have been introduced."
 msgstr ""
+"Mõned teedest osalesid muudetud relatsioonides.<br>Palun kontrolli, et ei "
+"tehtud vigu."
 
 msgid "Fix tag conflicts"
 msgstr "Paranda sildivastuolud"
@@ -1064,6 +1066,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr "Palun vali jooned, mille nurk on umbes 90 või 180 kraadi."
 
+msgid "Download from Overpass API ..."
+msgstr "Laadi alla Overpass API kaudu ..."
+
+msgid "Download map data from Overpass API server."
+msgstr "Laadi alla kaardi andmed Overpass API serverist."
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr "Overpass päring: "
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr "Kleebi"
 
@@ -1222,16 +1248,16 @@ msgid "Save the current data to a new file."
 msgstr "Salvesta need andmed uude faili."
 
 msgid "Search Notes..."
-msgstr ""
+msgstr "Otsi märkustest..."
 
 msgid "Download notes from the note search API"
 msgstr ""
 
 msgid "Search the OSM API for notes containing words:"
-msgstr ""
+msgstr "Otsi OSM API-st märkusi, mis sisaldavad sõnu:"
 
 msgid "Search for notes"
-msgstr ""
+msgstr "Otsi märkusi"
 
 msgid "You must enter a search term"
 msgstr ""
@@ -1508,10 +1534,10 @@ msgid ""
 msgstr ""
 
 msgid "Disconnect Node from Way"
-msgstr ""
+msgstr "Võta sõlm tee küljest lahti"
 
 msgid "Disconnect nodes from a way they currently belong to"
-msgstr ""
+msgstr "Võta sõlm lahti tee küljest, kuhu ta praegu kuulub"
 
 msgid "Select at least one node to be disconnected."
 msgstr ""
@@ -1921,7 +1947,7 @@ msgid "Error during download"
 msgstr "Viga allalaadimisel"
 
 msgid "Add a new Note"
-msgstr ""
+msgstr "Lisa uus märkus"
 
 msgid "Add note mode"
 msgstr ""
@@ -2011,15 +2037,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr "Lõpeta joonistamine."
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -2041,6 +2058,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2160,9 +2186,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2192,7 +2215,13 @@ msgid_plural ""
 "an error.\n"
 "Really move them?"
 msgstr[0] ""
+"Liigutasite rohkem kui  {0} elementi. Paljude elementide liigutamine on "
+"sageli viga.\n"
+"Kas liigutan tõesti?"
 msgstr[1] ""
+"Liigutasite rohkem kui  {0} elementi. Paljude elementide liigutamine on "
+"sageli viga.\n"
+"Kas liigutan tõesti?"
 
 msgid "Release the mouse button to select the objects in the rectangle."
 msgstr ""
@@ -2344,7 +2373,7 @@ msgid "Search..."
 msgstr "Otsi..."
 
 msgid "Search for objects."
-msgstr "Otsi objekte."
+msgstr "Objektide otsimine"
 
 msgid "{0}: "
 msgstr ""
@@ -2379,9 +2408,15 @@ msgstr "kõik objektid"
 msgid "Also include incomplete and deleted objects in search."
 msgstr "Lisaks kaasa otsingusse ka poolikud ja eemaldatud objektid."
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr "regulaaravaldis"
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr "lisa nupuks tööriistareale"
 
@@ -2599,6 +2634,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2641,6 +2680,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3106,6 +3148,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3223,10 +3283,44 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3416,6 +3510,12 @@ msgstr "tekst"
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3443,13 +3543,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -4065,9 +4165,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -4077,12 +4174,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4263,15 +4372,15 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
+msgid "Unconnected nodes without physical tags"
+msgstr "Ühendamata sõlmed ilma füüsiliste siltideta"
+
 msgid "Untagged and unconnected nodes"
 msgstr "Sildistamata ja ühendamata sõlmed"
 
 msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
-msgstr "Ühendamata sõlmed ilma füüsiliste siltideta"
-
 msgid "No tags"
 msgstr "Sildid puuduvad"
 
@@ -4336,13 +4445,13 @@ msgid "Reversed land: land not on left side"
 msgstr ""
 
 msgid "Show this dialog again the next time"
-msgstr ""
+msgstr "Näita seda dialoogi järgmisel korral taas"
 
 msgid "Do not show again (this operation)"
-msgstr ""
+msgstr "Ära seda teadet rohkem näita (sel toimingul)"
 
 msgid "Do not show again (this session)"
-msgstr ""
+msgstr "Ära seda teadet rohkem näita (sel seansil)"
 
 msgid "Do not show again (remembers choice)"
 msgstr "Ära seda teadet rohkem näita (valik jäetakse meelde)"
@@ -4467,8 +4576,9 @@ msgstr "Sulgeb dialoogiakna"
 msgid "Imagery offset"
 msgstr "Aluskaardi nihe"
 
+msgctxt "menu"
 msgid "Imagery"
-msgstr "Aluskaart"
+msgstr ""
 
 msgctxt "layer"
 msgid "Offset"
@@ -4680,45 +4790,56 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
-msgstr "Fail"
+msgstr ""
 
-msgid "Session"
-msgstr "Seanss"
+msgctxt "menu"
+msgid "Edit"
+msgstr ""
 
+msgctxt "menu"
 msgid "View"
-msgstr "Vaade"
+msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
-msgstr "Tööriistad"
+msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
-msgstr "Lisatööriistad"
+msgstr ""
 
+msgctxt "menu"
 msgid "Data"
-msgstr "Andmed"
+msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
-msgstr "Valik"
+msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
-msgstr "Eelseaded"
+msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
-msgstr "Aknad"
+msgstr ""
+
+msgctxt "menu"
+msgid "Help"
+msgstr ""
 
 msgid "Menu: {0}"
 msgstr "Menüü: {0}"
 
-msgid "Save and load the current session (list of layers, etc.)"
-msgstr "Salvesta ja laadi praegune seanss (kihtide loend, jne)"
-
 msgid "Edit toolbar"
 msgstr "Redigeerimisriba"
 
@@ -4740,8 +4861,9 @@ msgstr "Kliki, et avada aluskaardi sätete leht eelistuste dialoogiaknas"
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
-msgstr "Heli"
+msgstr ""
 
 msgid "Do not hide toolbar"
 msgstr "Ära peida tööriistariba"
@@ -4862,60 +4984,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-"Aluskaart võib olla valesti nihutatud. Palun kontrolli selle nihet GPS "
-"jälgede abil."
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr "Peida see sõnum ja ära näita seda uuesti"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
+msgid " ({0})"
 msgstr ""
 
-msgid "Pos."
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "Role"
-msgstr "Roll"
-
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5344,6 +5422,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr "Roll"
+
 msgid "Primitive"
 msgstr ""
 
@@ -5584,6 +5665,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5732,6 +5816,41 @@ msgstr "Lahenda vastuolud"
 msgid "Resolve conflicts for ''{0}''"
 msgstr "Lahenda \"{0}\" vastuolud"
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr "Filtreeri objekte ja peida/näita neid"
 
@@ -5835,7 +5954,7 @@ msgstr "Objekti põhjalikum info"
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5869,7 +5988,7 @@ msgid "has direction keys"
 msgstr ""
 
 msgid "State: "
-msgstr ""
+msgstr "Osariik: "
 
 msgid "Data Set: "
 msgstr "Andmekogum: "
@@ -5963,7 +6082,12 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
-msgid "xml"
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "xml"
 msgstr ""
 
 msgid "mapcss"
@@ -5972,17 +6096,48 @@ msgstr ""
 msgid "unknown"
 msgstr "tundmatu"
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -6028,6 +6183,12 @@ msgstr "Läbipaistvus"
 msgid "Adjust opacity of the layer."
 msgstr "Muuda valitud kihi läbipaistvust"
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr "Aktiveeri"
 
@@ -6157,6 +6318,12 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
+msgid "Mini map"
+msgstr ""
+
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
 msgid "List of notes"
 msgstr ""
 
@@ -6215,10 +6382,15 @@ msgstr "Objekti ID:"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "Sisesta allalaaditava objekti ID"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6247,6 +6419,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr "Relatsioone: {0}"
 
+msgid "Selection"
+msgstr "Valik"
+
 msgid "Open a selection list window."
 msgstr "Ava valitud objektide nimekirja aken"
 
@@ -6338,6 +6513,12 @@ msgstr "Ava järelkontrolli aken."
 msgid "Validation results"
 msgstr "Järelkontrolli tulemused"
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -6946,6 +7127,12 @@ msgstr "Abi siltide kasutamise kohta saab OSMi vikist (F1)"
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -7037,14 +7224,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7219,6 +7405,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7608,7 +7800,7 @@ msgid "Enter a place name to search for:"
 msgstr "Sisesta otsitava koha nimi:"
 
 msgid "Enter a place name to search for"
-msgstr ""
+msgstr "Sisesta otsitava koha nimi"
 
 msgid "Areas around places"
 msgstr "Alad asulate ümber"
@@ -7767,6 +7959,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr "Sõlm {0}"
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8498,10 +8693,10 @@ msgid "Click to return to the Upload Dialog"
 msgstr ""
 
 msgid "Abort"
-msgstr ""
+msgstr "Katkesta"
 
 msgid "Click to abort uploading"
-msgstr ""
+msgstr "Klõpsa, et katkestada üleslaadimine."
 
 msgid ""
 "The server reported that the current changeset was closed.<br>This is most "
@@ -8511,8 +8706,8 @@ msgstr ""
 
 msgid "There is {0} object left to upload."
 msgid_plural "There are {0} objects left to upload."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} objekt tuleb veel üles laadida."
+msgstr[1] "{0} objekti tuleb veel üles laadida."
 
 msgid ""
 "Click ''<strong>{0}</strong>'' to continue uploading to additional new "
@@ -8522,19 +8717,19 @@ msgid ""
 msgstr ""
 
 msgid "Changeset is full"
-msgstr ""
+msgstr "Muutuskogum on täis"
 
 msgid "Node ''{0}'' is already deleted. Skipping object in upload."
-msgstr ""
+msgstr "Sõlm ''{0}'' on juba kustutatud. Seda objekti üles ei laadita."
 
 msgid "Way ''{0}'' is already deleted. Skipping object in upload."
-msgstr ""
+msgstr "Joon ''{0}'' on juba kustutatud. Seda objekti üles ei laadita."
 
 msgid "Relation ''{0}'' is already deleted. Skipping object in upload."
-msgstr ""
+msgstr "Relatsioon ''{0}'' on juba kustutatud. Seda objekti üles ei laadita."
 
 msgid "Object ''{0}'' is already deleted. Skipping object in upload."
-msgstr ""
+msgstr "Objekt ''{0}'' on juba kustutatud. Seda objekti üles ei laadita."
 
 msgid "Uploading {0} object..."
 msgid_plural "Uploading {0} objects..."
@@ -8546,7 +8741,7 @@ msgid ""
 msgstr ""
 
 msgid "Upload successful!"
-msgstr ""
+msgstr "Üleslaadimine õnnestus!"
 
 msgid ""
 "<html>Mark modified objects <strong>from the current selection</strong> to "
@@ -8645,6 +8840,108 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] "{0} objekt kustutada:"
 msgstr[1] "{0} objekti kustutada:"
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr "Muuda resolutsiooni"
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+"Aluskaart võib olla valesti nihutatud. Palun kontrolli selle nihet GPS "
+"jälgede abil."
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr "Peida see sõnum ja ära näita seda uuesti"
+
 msgid "Customize Color"
 msgstr "Kohanda värvi"
 
@@ -8698,6 +8995,9 @@ msgstr "Salvesta GPX fail"
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8718,7 +9018,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8803,193 +9103,92 @@ msgstr ""
 msgid "Save OSM file"
 msgstr "Salvesta OSM fail."
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
+msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
+msgid "Validation errors"
+msgstr "Järelkontrolli vead"
 
-msgid "Auto Zoom"
-msgstr ""
+msgid "No validation errors"
+msgstr "Järelkontrollivigu ei ole"
 
-msgid "Auto load tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
-msgid "Show Errors"
+msgid ""
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Load Tile"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Show Tile Info"
-msgstr ""
+msgid "Invalid timezone"
+msgstr "Vale ajavöönd"
 
-msgid "Load All Tiles"
-msgstr ""
+msgid "Invalid offset"
+msgstr "Vigane nihe"
 
-msgid "Load All Error Tiles"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Increase zoom"
+msgid "Try Again"
 msgstr ""
 
-msgid "Decrease zoom"
+msgid "No images could be matched!"
 msgstr ""
 
-msgid "Snap to tile size"
+msgid "GPX Files (*.gpx *.gpx.gz)"
 msgstr ""
 
-msgid "Flush Tile Cache"
+msgid "File {0} is loaded yet under the name \"{1}\""
 msgstr ""
 
-msgid "zoom in to load any tiles"
-msgstr ""
+msgid "Error while parsing {0}"
+msgstr "Viga {0} parsimisel"
 
-msgid "zoom in to load more tiles"
-msgstr ""
+msgid "Could not read \"{0}\""
+msgstr "Ei suutnud lugeda \"{0}\""
 
-msgid "increase zoom level to see more detail"
+msgid ""
+"<html>Take a photo of your GPS receiver while it displays the "
+"time.<br>Display that photo here.<br>And then, simply capture the time you "
+"read on the photo and select a timezone<hr></html>"
 msgstr ""
+"<html>Tee foto oma GPS-vastuvõtjast kui see kuvab aega.<br>Näita siin seda "
+"fotot.<br>Seejärel pane lihtsalt kirja see aeg, mis fotol näha on ja vali "
+"ajavöönd<hr></html>"
 
-msgid "No tiles at this zoom level"
-msgstr ""
+msgid "Photo time (from exif):"
+msgstr "Foto aeg (exif info põhjal):"
 
-msgid "Current zoom: {0}"
-msgstr ""
+msgid "Gps time (read from the above photo): "
+msgstr "GPS aeg (valitud fotol nähtav): "
 
-msgid "Display zoom: {0}"
-msgstr ""
+msgid "I am in the timezone of: "
+msgstr "Asun ajavööndis: "
 
-msgid "Pixel scale: {0}"
+msgid "No date"
 msgstr ""
 
-msgid "Best zoom: {0}"
+msgid "Open another photo"
+msgstr "Ava veel üks foto"
+
+msgid "Synchronize time from a photo of the GPS receiver"
+msgstr "Aja sünkroniseerimine GPS-vastuvõtjast tehtud fotolt"
+
+msgid ""
+"Error while parsing the date.\n"
+"Please use the requested format"
 msgstr ""
 
-msgid "Cache stats: {0}"
+msgid "Invalid date"
 msgstr ""
 
-msgid "TMS layer ({0}), downloading in zoom {1}"
+msgid "<No GPX track loaded yet>"
 msgstr ""
 
-msgid "EPSG:4326 and Mercator projection are supported"
-msgstr ""
-
-msgid "Validation errors"
-msgstr "Järelkontrolli vead"
-
-msgid "No validation errors"
-msgstr "Järelkontrollivigu ei ole"
-
-msgid "Blank Layer"
-msgstr "Tühi kiht"
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr "WMSi kiht ({0}), allalaadimisel automaatne suum {1}"
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "Download visible tiles"
-msgstr ""
-
-msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-"Nõutav ala on liiga suur. Palun suumi natuke sisse või muuda resolutsiooni"
-
-msgid "Change resolution"
-msgstr "Muuda resolutsiooni"
-
-msgid "Reload erroneous tiles"
-msgstr ""
-
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
-msgstr ""
-
-msgid "Automatic downloading"
-msgstr "Automaatne allalaadimine"
-
-msgid "Zoom to native resolution"
-msgstr ""
-
-msgid "Supported projections are: {0}"
-msgstr ""
-
-msgid "Unsupported WMS file version; found {0}, expected {1}"
-msgstr ""
-
-msgid "Save WMS file"
-msgstr ""
-
-msgid "Correlate to GPX"
-msgstr ""
-
-msgid "GPX Files (*.gpx *.gpx.gz)"
-msgstr ""
-
-msgid "File {0} is loaded yet under the name \"{1}\""
-msgstr ""
-
-msgid "Error while parsing {0}"
-msgstr "Viga {0} parsimisel"
-
-msgid "Could not read \"{0}\""
-msgstr "Ei suutnud lugeda \"{0}\""
-
-msgid ""
-"<html>Take a photo of your GPS receiver while it displays the "
-"time.<br>Display that photo here.<br>And then, simply capture the time you "
-"read on the photo and select a timezone<hr></html>"
-msgstr ""
-"<html>Tee foto oma GPS-vastuvõtjast kui see kuvab aega.<br>Näita siin seda "
-"fotot.<br>Seejärel pane lihtsalt kirja see aeg, mis fotol näha on ja vali "
-"ajavöönd<hr></html>"
-
-msgid "Photo time (from exif):"
-msgstr "Foto aeg (exif info põhjal):"
-
-msgid "Gps time (read from the above photo): "
-msgstr "GPS aeg (valitud fotol nähtav): "
-
-msgid "I am in the timezone of: "
-msgstr "Asun ajavööndis: "
-
-msgid "No date"
-msgstr ""
-
-msgid "Open another photo"
-msgstr "Ava veel üks foto"
-
-msgid "Synchronize time from a photo of the GPS receiver"
-msgstr "Aja sünkroniseerimine GPS-vastuvõtjast tehtud fotolt"
-
-msgid ""
-"Error while parsing the date.\n"
-"Please use the requested format"
-msgstr ""
-
-msgid "Invalid date"
-msgstr ""
-
-msgid "<No GPX track loaded yet>"
-msgstr ""
-
-msgid "GPX track: "
+msgid "GPX track: "
 msgstr ""
 
 msgid "Open another GPX trace"
@@ -9001,13 +9200,13 @@ msgstr ""
 "<html>Kasuta fotot täpsest kellast,<br>nt GPS-vastuvõtja ekraanist</html>"
 
 msgid "Auto-Guess"
-msgstr ""
+msgstr "Automaatsobitus"
 
 msgid "Matches first photo with first gpx point"
-msgstr ""
+msgstr "Seab esimese foto vastavusse esimese gpx-punktiga"
 
 msgid "Manual adjust"
-msgstr ""
+msgstr "Käsitsi sobitamine"
 
 msgid "Override position for: "
 msgstr ""
@@ -9019,7 +9218,7 @@ msgid "Images that are already tagged ({0}/{1})"
 msgstr ""
 
 msgid "Show Thumbnail images on the map"
-msgstr ""
+msgstr "Kaardil näidatakse pisipilte"
 
 msgid "Timezone: "
 msgstr "Ajavöönd: "
@@ -9027,24 +9226,9 @@ msgstr "Ajavöönd: "
 msgid "Offset:"
 msgstr "Nihe:"
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
 msgid "Correlate"
 msgstr ""
 
-msgid "Invalid timezone"
-msgstr "Vale ajavöönd"
-
-msgid "Invalid offset"
-msgstr "Vigane nihe"
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9058,10 +9242,10 @@ msgid "Timezone: {0}"
 msgstr "Ajavöönd: {0}"
 
 msgid "Minutes: {0}"
-msgstr ""
+msgstr "Minutid: {0}"
 
 msgid "Seconds: {0}"
-msgstr ""
+msgstr "Sekundid: {0}"
 
 msgid "(Time difference of {0} day)"
 msgid_plural "Time difference of {0} days"
@@ -9244,14 +9428,11 @@ msgstr ""
 "\n"
 "GPS aeg: {0}"
 
-msgid "JPEG images (*.jpg)"
-msgstr ""
-
 msgid "Show thumbnails"
-msgstr ""
+msgstr "Pisipiltide näitamine"
 
 msgid "Show image thumbnails instead of icons."
-msgstr ""
+msgstr "Pildiikoonide asemel näidatakse pisipilte"
 
 msgid "Choose visible tracks"
 msgstr ""
@@ -9309,9 +9490,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9944,15 +10122,15 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr "Pluginate allalaadimine"
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr "Muudatuste rakendumiseks pead JOSMi taaskäivitama."
 
 msgid "Would you like to restart now?"
 msgstr "Kas soovid kohe taaskäivitada?"
 
+msgid "Download plugins"
+msgstr "Pluginate allalaadimine"
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -10748,6 +10926,21 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
+msgid "1. Enter getCapabilities URL"
+msgstr ""
+
+msgid "2. Enter name for this layer"
+msgstr ""
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr ""
 
@@ -10766,6 +10959,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr "Aluskaardi eelistused"
 
@@ -10787,6 +10992,9 @@ msgstr "Aluskaardi pakkujad"
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr "Taustakaart: Vaikimisi"
 
@@ -10829,9 +11037,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr "Kiht"
 
@@ -10856,36 +11061,21 @@ msgstr "Suurim suurendustase: "
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr "Samaaegseid ühendusi:"
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11842,6 +12032,14 @@ msgstr "Rakenda"
 msgid "New relation"
 msgstr "Uus relatsioon"
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] "Muuda {0} objekt"
@@ -11950,6 +12148,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr "Eelseaded"
+
 msgid "Search for objects by preset"
 msgstr "Otsi objekte eelseadede järgi"
 
@@ -12207,6 +12408,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12748,6 +12952,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -13142,6 +13349,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -14168,6 +14388,9 @@ msgstr "Uuenda"
 msgid "Update directory listing."
 msgstr "Värskenda kataloogide nimekirja."
 
+msgid "View"
+msgstr "Vaade"
+
 msgid "Blue:"
 msgstr "Sinine:"
 
@@ -14207,7 +14430,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -14219,9 +14442,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14330,6 +14550,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14343,12 +14566,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14385,10 +14614,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14415,6 +14650,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14439,7 +14677,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14454,6 +14692,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14466,12 +14707,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14492,6 +14727,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14524,10 +14762,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14557,6 +14792,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14572,154 +14813,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14734,9 +14981,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14866,6 +15122,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14881,7 +15152,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -15207,6 +15478,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15293,11 +15569,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15351,7 +15622,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15366,9 +15637,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15454,6 +15722,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr "See plugin lihtsustab ühistranspordiliinide kaardistamist."
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15492,6 +15768,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15569,9 +15848,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr "Lihtsustab OSM objektide linkimist Wikipedia aktiklitega"
 
@@ -15753,23 +16029,23 @@ msgid "Width (meters)"
 msgstr "Laius (meetrites)"
 
 msgid "Sidewalk"
-msgstr ""
+msgstr "Kõnnitee"
 
 msgctxt "sidewalk"
 msgid "both"
-msgstr ""
+msgstr "mõlemas servas"
 
 msgctxt "sidewalk"
 msgid "left"
-msgstr ""
+msgstr "vasakul"
 
 msgctxt "sidewalk"
 msgid "right"
-msgstr ""
+msgstr "paremal"
 
 msgctxt "sidewalk"
 msgid "no"
-msgstr ""
+msgstr "puudub"
 
 msgid "Service type"
 msgstr ""
@@ -15784,10 +16060,10 @@ msgid "spur"
 msgstr ""
 
 msgid "Electrified"
-msgstr ""
+msgstr "Kasutab elektrit"
 
 msgid "contact_line"
-msgstr ""
+msgstr "kontaktliin"
 
 msgid "no"
 msgstr "ei"
@@ -15805,17 +16081,17 @@ msgid "Frequency in Hertz (Hz)"
 msgstr "Sagedus hertsides (HZ)"
 
 msgid "16.67"
-msgstr "16.67"
+msgstr "16,67"
 
 msgid "16.7"
-msgstr "16.7"
+msgstr "16,7"
 
 msgctxt "railway"
 msgid "Tracks"
-msgstr ""
+msgstr "Radasid"
 
 msgid "Gauge (mm)"
-msgstr ""
+msgstr "Rööpavahe (mm)"
 
 msgid "Allowed traffic:"
 msgstr ""
@@ -15977,6 +16253,14 @@ msgid "basketball"
 msgstr "korvpall"
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -16001,10 +16285,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -16021,6 +16301,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -16037,11 +16321,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -16057,6 +16353,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -16069,6 +16369,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -16096,6 +16400,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr "tennis"
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr "Tasuline"
 
@@ -16487,6 +16803,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr "Möödasõidukohad"
 
@@ -16563,6 +16882,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr ""
 
@@ -16647,7 +16969,7 @@ msgid "jughandle"
 msgstr ""
 
 msgid "Road Restrictions"
-msgstr ""
+msgstr "Tee piirangud"
 
 msgid ""
 "Some road types already imply some access restrictions which should not be "
@@ -16655,7 +16977,7 @@ msgid ""
 msgstr ""
 
 msgid "No exit (cul-de-sac)"
-msgstr ""
+msgstr "Väljapääs puudub (umbtänav)"
 
 msgid "Transport mode restrictions"
 msgstr ""
@@ -16664,16 +16986,16 @@ msgid "official"
 msgstr ""
 
 msgid "Vehicles per type"
-msgstr ""
+msgstr "Sõidukid tüübi järgi"
 
 msgid "All vehicles"
-msgstr ""
+msgstr "Kõik sõidukid"
 
 msgid "use_sidepath"
 msgstr ""
 
 msgid "Motor vehicles"
-msgstr ""
+msgstr "Mootorsõidukid"
 
 msgid "Light Commercial Vehicles (goods)"
 msgstr ""
@@ -16682,13 +17004,13 @@ msgid "Heavy Goods Vehicles (hgv)"
 msgstr "Raskeveokid"
 
 msgid "Vehicles per use"
-msgstr ""
+msgstr "Sõidukid kasutuse järgi"
 
 msgid "Agricultural"
 msgstr ""
 
 msgid "Emergency vehicles"
-msgstr ""
+msgstr "Kiirabisõidukid"
 
 msgid "High-occupancy vehicles (hov)"
 msgstr ""
@@ -16697,7 +17019,7 @@ msgid "Public Service Vehicles (psv)"
 msgstr "Ühistranspordi sõidukid"
 
 msgid "Tourist buses"
-msgstr ""
+msgstr "Turismibussid"
 
 msgid "Min. speed (km/h)"
 msgstr "Vähim kiirus (km/h)"
@@ -16921,19 +17243,19 @@ msgid "Amount of Steps"
 msgstr "Astmeid"
 
 msgid "Ramp"
-msgstr ""
+msgstr "Kaldtee"
 
 msgid "Stroller ramp"
-msgstr ""
+msgstr "Kaldtee lapsevankrile"
 
 msgid "Bicycle ramp"
-msgstr ""
+msgstr "Kaldtee jalgrattale"
 
 msgid "Wheelchair ramp"
-msgstr ""
+msgstr "Kaldtee ratastoolile"
 
 msgid "Luggage ramp"
-msgstr ""
+msgstr "Kaldtee pagasile"
 
 msgid "automatic"
 msgstr ""
@@ -16942,16 +17264,16 @@ msgid "manual"
 msgstr ""
 
 msgid "Handrail"
-msgstr ""
+msgstr "Käsipuu"
 
 msgid "Left handrail"
-msgstr ""
+msgstr "Käsipuu vasakul"
 
 msgid "Center handrail"
-msgstr ""
+msgstr "Käsipuu keskel"
 
 msgid "Right handrail"
-msgstr ""
+msgstr "Käsipuu paremal"
 
 msgid "Waypoints"
 msgstr "Teekonnapunktid"
@@ -17035,7 +17357,7 @@ msgid "Cross on horseback"
 msgstr ""
 
 msgid "Optional values for specific countries"
-msgstr ""
+msgstr "Valikulised väärtused teatud riikides"
 
 msgid "Stop"
 msgstr ""
@@ -17100,6 +17422,12 @@ msgstr "Kiiruskaamera"
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17289,6 +17617,11 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr "Vesi"
+
+msgctxt "sub group"
 msgid "Water"
 msgstr "Vesi"
 
@@ -17328,7 +17661,7 @@ msgid "Groyne"
 msgstr ""
 
 msgid "Breakwater"
-msgstr ""
+msgstr "Kaitsemuul"
 
 msgid "Culvert"
 msgstr ""
@@ -17342,6 +17675,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr "Vesi"
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr "Seisva veega veekogu, nagu järv või tiik."
 
@@ -17475,7 +17812,7 @@ msgid "Ferry Route"
 msgstr "Praamiliin"
 
 msgid "Marina"
-msgstr "Jahisadam"
+msgstr "Väikesadam"
 
 msgid "Dump Station"
 msgstr ""
@@ -17483,85 +17820,199 @@ msgstr ""
 msgid "public"
 msgstr "avalik"
 
-msgid "Pier"
-msgstr "Kai"
-
-msgid "Lock Gate"
+msgid "Marine Fuel"
 msgstr ""
 
-msgid "Turning Point"
-msgstr ""
+msgid "Agip"
+msgstr "Agip"
 
-msgid "Slipway"
-msgstr ""
+msgid "Aral"
+msgstr "Aral"
 
-msgid "Boatyard"
-msgstr ""
+msgid "Avia"
+msgstr "Avia"
 
-msgid "Dock"
-msgstr ""
+msgid "BP"
+msgstr "BP"
 
-msgid "Transport"
-msgstr ""
+msgid "Chevron"
+msgstr "Chevron"
 
-msgid "Railway"
-msgstr "Raudtee"
+msgid "Citgo"
+msgstr "Citgo"
 
-msgid "Rail"
+msgid "Eni"
 msgstr ""
 
-msgid "main"
-msgstr ""
+msgid "Esso"
+msgstr "Esso"
 
-msgid "branch"
-msgstr ""
+msgid "Exxon"
+msgstr "Exxon"
 
-msgid "industrial"
-msgstr "tööstus"
+msgid "Gulf"
+msgstr "Gulf"
 
-msgid "military"
-msgstr "militaarala"
+msgid "Mobil"
+msgstr "Mobil"
 
-msgid "tourism"
-msgstr "turism"
+msgid "OMV"
+msgstr "OMV"
 
-msgid "freight"
-msgstr ""
+msgid "Petro-Canada"
+msgstr "Petro-Canada"
 
-msgid "Narrow Gauge Rail"
-msgstr ""
+msgid "Pioneer"
+msgstr "Pioneer"
 
-msgid "Monorail"
-msgstr ""
+msgid "Q8"
+msgstr "Q8"
 
-msgid "Preserved"
+msgid "Repsol"
+msgstr "Repsol"
+
+msgid "Shell"
+msgstr "Shell"
+
+msgid "Socar"
 msgstr ""
 
-msgid "Light Rail"
-msgstr "Kergraudtee"
+msgid "Statoil"
+msgstr "Statoil"
 
-msgid "Subway"
-msgstr "Metroo"
+msgid "Sunoco"
+msgstr "Sunoco"
 
-msgid "Tram"
-msgstr "Tramm"
+msgid "Tamoil"
+msgstr "Tamoil"
 
-msgid "Bus Guideway"
-msgstr ""
+msgid "Texaco"
+msgstr "Texaco"
 
-msgid "Disused Rail"
-msgstr ""
+msgid "Total"
+msgstr "Total"
 
-msgid "Abandoned Rail"
-msgstr ""
+msgid "Independent"
+msgstr "Independent"
 
-msgid "Level Crossing"
-msgstr ""
+msgid "Fuel types:"
+msgstr "Kütused:"
 
-msgid "Traffic lights"
+msgid "Diesel"
 msgstr ""
 
-msgid "Barrier"
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
+msgid "Pier"
+msgstr "Kai"
+
+msgid "Lock Gate"
+msgstr ""
+
+msgid "Turning Point"
+msgstr ""
+
+msgid "Slipway"
+msgstr "Slipp"
+
+msgid "Boatyard"
+msgstr "Verf"
+
+msgid "Dock"
+msgstr ""
+
+msgid "Transport"
+msgstr ""
+
+msgid "Railway"
+msgstr "Raudtee"
+
+msgid "Rail"
+msgstr ""
+
+msgid "main"
+msgstr ""
+
+msgid "branch"
+msgstr ""
+
+msgid "industrial"
+msgstr "tööstus"
+
+msgid "military"
+msgstr "militaarala"
+
+msgid "tourism"
+msgstr "turism"
+
+msgid "freight"
+msgstr ""
+
+msgid "Narrow Gauge Rail"
+msgstr ""
+
+msgid "Monorail"
+msgstr ""
+
+msgid "Preserved"
+msgstr ""
+
+msgid "Light Rail"
+msgstr "Kergraudtee"
+
+msgid "Subway"
+msgstr "Metroo"
+
+msgid "Tram"
+msgstr "Tramm"
+
+msgid "Bus Guideway"
+msgstr ""
+
+msgid "Disused Rail"
+msgstr ""
+
+msgid "Abandoned Rail"
+msgstr ""
+
+msgid "Level Crossing"
+msgstr ""
+
+msgid "Traffic lights"
+msgstr ""
+
+msgid "Barrier"
 msgstr ""
 
 msgctxt "crossing:barrier"
@@ -17599,6 +18050,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr "Köisraudteed"
 
@@ -17722,78 +18176,6 @@ msgstr ""
 msgid "Fuel"
 msgstr ""
 
-msgid "Agip"
-msgstr "Agip"
-
-msgid "Aral"
-msgstr "Aral"
-
-msgid "Avia"
-msgstr "Avia"
-
-msgid "BP"
-msgstr "BP"
-
-msgid "Chevron"
-msgstr "Chevron"
-
-msgid "Citgo"
-msgstr "Citgo"
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr "Esso"
-
-msgid "Exxon"
-msgstr "Exxon"
-
-msgid "Gulf"
-msgstr "Gulf"
-
-msgid "Mobil"
-msgstr "Mobil"
-
-msgid "OMV"
-msgstr "OMV"
-
-msgid "Petro-Canada"
-msgstr "Petro-Canada"
-
-msgid "Pioneer"
-msgstr "Pioneer"
-
-msgid "Q8"
-msgstr "Q8"
-
-msgid "Repsol"
-msgstr "Repsol"
-
-msgid "Shell"
-msgstr "Shell"
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr "Statoil"
-
-msgid "Sunoco"
-msgstr "Sunoco"
-
-msgid "Tamoil"
-msgstr "Tamoil"
-
-msgid "Texaco"
-msgstr "Texaco"
-
-msgid "Total"
-msgstr "Total"
-
-msgid "Independent"
-msgstr "Independent"
-
 msgid "With shop"
 msgstr "Koos poega"
 
@@ -17803,51 +18185,12 @@ msgstr "nurgakauplus"
 msgid "kiosk"
 msgstr "kiosk"
 
-msgid "Fuel types:"
-msgstr "Kütused:"
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr "Diislikütus raskeveokitele"
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -18066,9 +18409,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr "marsruudi osa"
-
 msgid "stop position"
 msgstr "peatuse asukoht"
 
@@ -18087,6 +18427,9 @@ msgstr "platvorm (ainult väljuv)"
 msgid "platform (entry only)"
 msgstr "platvorm (ainult sisenev)"
 
+msgid "route segment"
+msgstr "marsruudi osa"
+
 msgid "Route Master"
 msgstr ""
 
@@ -18289,6 +18632,12 @@ msgstr "Hotell"
 msgid "Stars"
 msgstr "Tähti"
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr "Motell"
 
@@ -18379,6 +18728,9 @@ msgstr "võileivad"
 msgid "sushi"
 msgstr "sushi"
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr "Pisipruulikoda"
 
@@ -18413,7 +18765,7 @@ msgid "Bar"
 msgstr "Baar"
 
 msgid "Night Club"
-msgstr ""
+msgstr "Ööklubi"
 
 msgid "Strip Club"
 msgstr ""
@@ -18593,6 +18945,9 @@ msgstr "Saun"
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr "Lõbumaja"
 
@@ -19080,8 +19435,8 @@ msgstr "Näitab õhurõhku"
 msgid "Shows humidity"
 msgstr "Näitab niiskust"
 
-msgid "Recycling"
-msgstr "Jäätmekäitlus"
+msgid "Recycling Container"
+msgstr ""
 
 msgid "Batteries"
 msgstr "Battareid"
@@ -19089,22 +19444,49 @@ msgstr "Battareid"
 msgid "Cans"
 msgstr "Purgid"
 
+msgid "Cardboard"
+msgstr ""
+
+msgid "Electrical Appliances"
+msgstr ""
+
 msgid "Glass"
 msgstr "Klaas"
 
+msgid "Glass Bottles"
+msgstr ""
+
+msgid "Green Waste"
+msgstr ""
+
 msgid "Paper"
 msgstr "Paber"
 
+msgid "Plastic"
+msgstr ""
+
+msgid "Plastic Bottles"
+msgstr ""
+
+msgid "Plastic Packaging"
+msgstr ""
+
 msgid "Scrap Metal"
 msgstr "Vanaraud"
 
-msgid "container"
+msgid "Shoes"
+msgstr "Jalatsid"
+
+msgid "Small Appliances"
 msgstr ""
 
-msgid "centre"
+msgid "Waste"
 msgstr ""
 
-msgid "Waste Basket/Trash Can"
+msgid "Recycling Centre"
+msgstr ""
+
+msgid "Waste Basket/Trash Can"
 msgstr ""
 
 msgid "Waste Disposal/Dumpster"
@@ -19305,6 +19687,9 @@ msgstr "Vibusport"
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr "Ronimine"
 
@@ -19480,12 +19865,18 @@ msgstr "Pesapall"
 msgid "Basketball"
 msgstr "Korvpall"
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr "Võrkpall"
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr "Golf"
 
@@ -19501,14 +19892,14 @@ msgstr ""
 msgid "Cricket"
 msgstr "Kriket"
 
-msgid "Cricket Nets"
-msgstr "Kriketivõrgud"
-
 msgid "Croquet"
 msgstr "Kroket"
 
-msgid "Hockey"
-msgstr "Hoki"
+msgid "Field Hockey"
+msgstr ""
+
+msgid "Ice Hockey"
+msgstr ""
 
 msgid "Pelota"
 msgstr ""
@@ -19531,9 +19922,6 @@ msgstr ""
 msgid "Motocross"
 msgstr "Motokross"
 
-msgid "Safety Training"
-msgstr "Turvalise sõidu koolitus"
-
 msgid "Model Aerodrome"
 msgstr "Mudelite lennuväli"
 
@@ -19552,9 +19940,6 @@ msgstr ""
 msgid "RC Car"
 msgstr "Kaugjuhitav auto"
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr "Inimtekkeline"
 
@@ -19627,6 +20012,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19636,7 +20029,7 @@ msgstr ""
 
 msgctxt "building"
 msgid "Levels"
-msgstr ""
+msgstr "Korruseid"
 
 msgid "Residential Building"
 msgstr ""
@@ -20041,7 +20434,7 @@ msgid "Inclination in degrees"
 msgstr ""
 
 msgid "Bridges"
-msgstr ""
+msgstr "Sillad"
 
 msgid "aqueduct"
 msgstr "akvedukt"
@@ -20947,9 +21340,6 @@ msgstr "Alkohol"
 msgid "Boutique"
 msgstr "Butiik"
 
-msgid "Shoes"
-msgstr "Jalatsid"
-
 msgid "Outdoor"
 msgstr "Matkatarbed"
 
@@ -20987,7 +21377,7 @@ msgid "Video"
 msgstr "Video"
 
 msgid "Video Games"
-msgstr ""
+msgstr "Videomängud"
 
 msgid "Music"
 msgstr ""
@@ -21005,7 +21395,7 @@ msgid "Money Exchange"
 msgstr "Rahavahetus"
 
 msgid "Pawnbroker"
-msgstr ""
+msgstr "Pandimaja"
 
 msgid "Home decoration"
 msgstr ""
@@ -21764,7 +22154,7 @@ msgid "District"
 msgstr ""
 
 msgid "Province"
-msgstr ""
+msgstr "Provints"
 
 msgctxt "addr:"
 msgid "State"
@@ -21962,12 +22352,12 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
-msgstr "Faksinumber"
-
 msgid "Email Address"
 msgstr "E-posti aadress"
 
+msgid "Fax Number"
+msgstr "Faksinumber"
+
 msgid "Image"
 msgstr "Pilt"
 
@@ -22392,6 +22782,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22416,6 +22809,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22476,6 +22881,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22566,9 +22974,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22938,6 +23355,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22992,9 +23412,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23748,47 +24165,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
+msgstr ""
+
+msgid "Color Threshold"
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Use HSV based algorithm"
 msgstr ""
 
-msgid "merge nodes"
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23797,10 +24223,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24404,6 +24842,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr "Tühi kiht"
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25518,362 +25959,668 @@ msgstr ""
 msgid "Update IRS adjustment layer"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr "see kiht ei ole osm andmekiht"
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr "Viga vahemälu kataloogi {0} loomisel"
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr "rannik"
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr "Plugin veekogude sisestamiseks Landsati aluskaardilt."
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+"Omista joonele sildid ''vesi'', ''rannik'', ''maa'' või jäta märgistamata. "
+"Vaikimisi väärtus on ''vesi''."
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+"Iga vahemälu kataloogi maksimaalne suurus baitides. Vaikeväärtus 300MB"
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr "Andmeallika tekst. Vaikeväärtus on Landsat."
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
+msgstr ""
+
+msgid "Connecting"
+msgstr ""
+
+msgid "Connected"
+msgstr ""
+
+msgid "no name"
+msgstr ""
+
+msgid "Live GPS"
+msgstr ""
+
+msgid "Show GPS data."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Speed"
 msgstr ""
 
-msgid "this layer is no osm data layer"
-msgstr "see kiht ei ole osm andmekiht"
+msgid "Course"
+msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
-msgstr "Viga vahemälu kataloogi {0} loomisel"
+msgid "Upload pictures."
+msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
-msgstr "rannik"
+msgid "Explore"
+msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
-msgstr "Plugin veekogude sisestamiseks Landsati aluskaardilt."
+msgid "Downloaded images"
+msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
-"Omista joonele sildid ''vesi'', ''rannik'', ''maa'' või jäta märgistamata. "
-"Vaikimisi väärtus on ''vesi''."
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
-"Iga vahemälu kataloogi maksimaalne suurus baitides. Vaikeväärtus 300MB"
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
-msgstr "Andmeallika tekst. Vaikeväärtus on Landsat."
+msgid "Jump to blue"
+msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25894,6 +26641,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -25952,47 +26702,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr "Laadi alla OSM peegelserverist..."
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr "Laadi alla Overpass API kaudu ..."
-
-msgid "Download map data from Overpass API server."
-msgstr "Laadi alla kaardi andmed Overpass API serverist."
-
-msgid "Overpass query: "
-msgstr "Overpass päring: "
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr "Baas-URL"
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -26229,6 +26938,9 @@ msgstr ""
 "Erinevuste võrdlemine praeguse andmekogumi ja olemasolevate OSM andmete "
 "vahel."
 
+msgid "Tools"
+msgstr "Tööriistad"
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27356,7 +28068,7 @@ msgid "Additional tags:"
 msgstr "Lisasildid:"
 
 msgid "Add a new Tag"
-msgstr ""
+msgstr "Lisa uus silt"
 
 msgid "Name/Id"
 msgstr "Nimi/Id"
@@ -27450,6 +28162,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27621,6 +28354,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27630,6 +28366,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr "Ajaloo andmete ettevalmistamine..."
 
@@ -27810,6 +28549,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27988,6 +28730,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27997,6 +28772,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -28233,9 +29011,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29725,9 +30500,6 @@ msgstr ""
 "Otsing teekonnapunkti järgi. Teekonnapunkti vaatamiseks kliki ja liiguta "
 "kaarti."
 
-msgid "Way Select"
-msgstr "Tee valimine"
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/eu.po b/i18n/po/eu.po
index ac36266..a0bb3ba 100644
--- a/i18n/po/eu.po
+++ b/i18n/po/eu.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2015-03-09 16:55+0000\n"
 "Last-Translator: Asier Sarasua Garmendia <Unknown>\n"
 "Language-Team: Basque <eu at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:34+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:35+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: eu\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -97,23 +97,20 @@ msgstr "Irudi-hobespenak kargatzen"
 msgid "Updating user interface"
 msgstr "Erabiltzaile-interfazeak eguneratzen"
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "Gaizki eratutako fitxategiaren URL-a baztertzen: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "Gaizki eratutako URL-a baztertzen: \"{0}\""
 
 msgid "Warning"
 msgstr "Kontuz"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "Gaizki eratutako fitxategiaren URL-a baztertzen: \"{0}\""
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 "\"downloadgps\" parametroak, \"gpsdeskargatu\" parametroak, ez ditu artxibo "
 "izenak onartzen ezta artxiboen URLak ere"
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "Gaizki eratutako URL-a baztertzen: \"{0}\""
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -454,6 +451,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
 "Banatu aukeraturiko nodoak marra batean zehar, distantzia bera mantenduz."
@@ -1064,6 +1064,30 @@ msgstr ""
 "Mesedez, aukeratu 90 edo 180 graduren inguruko angeluak dituzten bideak "
 "bakarrik."
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr "Itsatsi"
 
@@ -2028,15 +2052,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr "Marrazketa amaitu."
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -2058,6 +2073,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2177,9 +2201,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr "Arrastatu erreproduzitu botoia"
 
@@ -2398,9 +2419,15 @@ msgstr "objektu guztiak"
 msgid "Also include incomplete and deleted objects in search."
 msgstr "Sartu bukatugabeko eta ezabatutako objektuak bilaketan."
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr "adierazpen erregularra"
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2617,6 +2644,10 @@ msgid "RX"
 msgstr "RX"
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr "A"
 
@@ -2671,6 +2702,9 @@ msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 "Espero ez zen ezaugarria. Hauxe espero zen: {0}, hauxe aurkitu da: {1}"
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr "Ustegabeko tokena: {0}"
 
@@ -3135,6 +3169,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3260,12 +3312,46 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
-msgid "Not in cache"
-msgstr "Ez dago aurrememorian"
-
 msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr ""
 
+msgid "HTTP error {0} when loading tiles"
+msgstr ""
+
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
+msgstr ""
+
 msgid "ID > 0 expected. Got {0}."
 msgstr "ID > 0 espero zen. {0} daukazu."
 
@@ -3463,6 +3549,12 @@ msgstr "testua"
 msgid "areatext"
 msgstr "areatext"
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3490,13 +3582,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -4116,9 +4208,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -4128,12 +4217,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4322,6 +4423,9 @@ msgstr "Bidearen nodoa beste bide baten ondoan dago"
 msgid "Connected way end node near other way"
 msgstr "Konektatutako bide bukaera-nodoa beste bide baten ondoan dago"
 
+msgid "Unconnected nodes without physical tags"
+msgstr ""
+
 msgid "Untagged and unconnected nodes"
 msgstr ""
 
@@ -4330,9 +4434,6 @@ msgstr ""
 "Test honek inolako bideren parte ez diren etiketa-gabeko nodoak egiaztatzen "
 "du."
 
-msgid "Unconnected nodes without physical tags"
-msgstr ""
-
 msgid "No tags"
 msgstr ""
 
@@ -4531,6 +4632,7 @@ msgstr "Egin klik ixteko"
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4754,45 +4856,56 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
-msgstr "Fitxategia"
+msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
-msgstr "Ikusi"
+msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
-msgstr "Tresnak"
+msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
-msgstr "Aukeraketa"
+msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
-msgstr "Aurrezarpenak"
+msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
+msgctxt "menu"
+msgid "Help"
+msgstr ""
+
 msgid "Menu: {0}"
 msgstr "Menua: {0}"
 
-msgid "Save and load the current session (list of layers, etc.)"
-msgstr ""
-
 msgid "Edit toolbar"
 msgstr ""
 
@@ -4814,8 +4927,9 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
-msgstr "Audioa"
+msgstr ""
 
 msgid "Do not hide toolbar"
 msgstr ""
@@ -4938,65 +5052,17 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
+msgid " ({0})"
 msgstr ""
 
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
+msgid "{0} completed in {1}"
 msgstr ""
-"<html>Mesedez, konfirmatu <strong>objektu 1</strong> ezabatzeko "
-"<strong>erlazio 1etik</strong>.</html>"
 
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
+msgid "Enlarge"
 msgstr ""
-"<html>Mesedez, konfirmatu <strong>objektu 1</strong> ezabatzeko <strong>{0} "
-"erlaziotatik</strong>.</html>"
 
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
+msgid "Shrink"
 msgstr ""
-"<html>Mesedez, konfirmatu <strong>{0} objektu</strong> ezabatzeko "
-"<strong>{1} erlaziotatik</strong>.</html>"
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] "Objektu {0} ezabatzen"
-msgstr[1] "{0} objektu ezabatzen"
-
-msgid "Delete objects"
-msgstr "Ezabatu objektuak"
-
-msgid "To delete"
-msgstr "Ezabatzeko"
-
-msgid "From Relation"
-msgstr "Erlaziotik"
-
-msgid "Pos."
-msgstr "Pos."
-
-msgid "Role"
-msgstr "Rola"
-
-msgid "Click to close the dialog and remove the object from the relations"
-msgstr "Klik egin dialogoa itxi eta objektua erlazioetatik ezabatzeko"
-
-msgid "Click to close the dialog and to abort deleting the objects"
-msgstr "Klik egin dialogoa itxi eta objektuak ezabatzeari uzteko"
 
 msgid ""
 "<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
@@ -5446,6 +5512,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr "Rola"
+
 msgid "Primitive"
 msgstr "Primitiboa"
 
@@ -5687,6 +5756,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr "Pos."
+
 msgid "Orig. Way"
 msgstr "Jatorrizko bidea"
 
@@ -5833,6 +5905,47 @@ msgstr "Gatazkak konpondu"
 msgid "Resolve conflicts for ''{0}''"
 msgstr "Gatazkak konpondu \"{0}\"(r)entzat"
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+"<html>Mesedez, konfirmatu <strong>objektu 1</strong> ezabatzeko "
+"<strong>erlazio 1etik</strong>.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Mesedez, konfirmatu <strong>objektu 1</strong> ezabatzeko <strong>{0} "
+"erlaziotatik</strong>.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Mesedez, konfirmatu <strong>{0} objektu</strong> ezabatzeko "
+"<strong>{1} erlaziotatik</strong>.</html>"
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] "Objektu {0} ezabatzen"
+msgstr[1] "{0} objektu ezabatzen"
+
+msgid "Delete objects"
+msgstr "Ezabatu objektuak"
+
+msgid "To delete"
+msgstr "Ezabatzeko"
+
+msgid "From Relation"
+msgstr "Erlaziotik"
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr "Klik egin dialogoa itxi eta objektua erlazioetatik ezabatzeko"
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr "Klik egin dialogoa itxi eta objektuak ezabatzeari uzteko"
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5938,7 +6051,7 @@ msgstr "Objektuen informazio aurreratua"
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -6066,6 +6179,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -6075,20 +6193,51 @@ msgstr ""
 msgid "unknown"
 msgstr ""
 
-msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+msgid "Enter the coordinates for the new node."
 msgstr ""
 
-msgid "Projected coordinates:"
+msgid ""
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
+msgstr ""
+
+msgid "Projected coordinates:"
 msgstr ""
 
 msgid ""
@@ -6131,6 +6280,12 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr "Aktibatu"
 
@@ -6260,6 +6415,12 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
+msgid "Mini map"
+msgstr ""
+
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
 msgid "List of notes"
 msgstr ""
 
@@ -6318,10 +6479,15 @@ msgstr "Objektuaren ID-a"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "Idatzi deskargatu nahi duzun objektuaren ID-a"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6350,6 +6516,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr "Erlazioak: {0}"
 
+msgid "Selection"
+msgstr "Aukeraketa"
+
 msgid "Open a selection list window."
 msgstr ""
 
@@ -6441,6 +6610,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -7035,6 +7210,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -7126,14 +7307,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7306,6 +7486,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7841,6 +8027,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8686,6 +8875,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr "Bereizmena aldatu"
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr ""
 
@@ -8739,6 +9028,9 @@ msgstr "GPX fitxategia gorde"
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8759,7 +9051,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8844,80 +9136,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr "OSM fitxategia gorde"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-
-msgid "Auto Zoom"
-msgstr ""
-
-msgid "Auto load tiles"
-msgstr ""
-
-msgid "Show Errors"
-msgstr ""
-
-msgid "Load Tile"
-msgstr ""
-
-msgid "Show Tile Info"
-msgstr ""
-
-msgid "Load All Tiles"
-msgstr ""
-
-msgid "Load All Error Tiles"
-msgstr ""
-
-msgid "Increase zoom"
-msgstr ""
-
-msgid "Decrease zoom"
-msgstr ""
-
-msgid "Snap to tile size"
-msgstr ""
-
-msgid "Flush Tile Cache"
-msgstr ""
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
@@ -8927,59 +9145,30 @@ msgstr ""
 msgid "No validation errors"
 msgstr ""
 
-msgid "Blank Layer"
-msgstr "Geruza garbia"
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr "({0}) WMS geruza, automatikoki jaisten {1} zoom mailan"
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr "({0}) WMS geruza, {1} zoom mailan jaisten"
-
-msgid "Download visible tiles"
-msgstr "Jaitsi ikusgai dauden \"tile\"ak"
+msgid "Set WMS Bookmark"
+msgstr "WMS laster-marka ezarri"
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
-"Eskatutako azalera handiegia da. Mesedez, egin zoom pixka bat, edo aldatu "
-"bereizmena"
-
-msgid "Change resolution"
-msgstr "Bereizmena aldatu"
-
-msgid "Reload erroneous tiles"
-msgstr "\"Tile\" okerrak berriz kargatu"
 
-msgid "Alpha channel"
-msgstr "Alpha kanala"
-
-msgid "Automatically change resolution"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Set WMS Bookmark"
-msgstr "WMS laster-marka ezarri"
-
-msgid "Automatic downloading"
-msgstr "Jaitsiera automatikoa"
-
-msgid "Zoom to native resolution"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Supported projections are: {0}"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Correlate images with GPX track"
 msgstr ""
-"Sustengurik gabeko WMS fitxategi-bertsioa; {0} aurkitu da eta {1} espero zen"
 
-msgid "Save WMS file"
+msgid "Try Again"
 msgstr ""
 
-msgid "Correlate to GPX"
+msgid "No images could be matched!"
 msgstr ""
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
@@ -9066,22 +9255,7 @@ msgstr ""
 msgid "Offset:"
 msgstr ""
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
-msgid "Correlate"
-msgstr ""
-
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
+msgid "Correlate"
 msgstr ""
 
 msgid "No gpx selected"
@@ -9277,9 +9451,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr ""
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9342,9 +9513,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9970,15 +10138,15 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr ""
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -10771,6 +10939,21 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
+msgid "1. Enter getCapabilities URL"
+msgstr ""
+
+msgid "2. Enter name for this layer"
+msgstr ""
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr ""
 
@@ -10789,6 +10972,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10810,6 +11005,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10852,9 +11050,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr ""
 
@@ -10879,37 +11074,22 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr "Jaitsiera kudeatzailea:"
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr "\"Tile\"-en gainjartzea"
-
-msgid "% of east:"
-msgstr "ekialdera % :"
-
-msgid "% of north:"
-msgstr "iparraldera %:"
+msgid "Tile size:"
+msgstr ""
 
 msgid "Auto save enabled"
 msgstr ""
@@ -11844,6 +12024,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] "Aldatu {0} objektua"
@@ -11952,6 +12140,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr "Aurrezarpenak"
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12205,6 +12396,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12741,6 +12935,10 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr "WMS Fitxategiak (*.wms)"
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+"Sustengurik gabeko WMS fitxategi-bertsioa; {0} aurkitu da eta {1} espero zen"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -13126,6 +13324,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -14125,6 +14336,9 @@ msgstr "Eguneratu"
 msgid "Update directory listing."
 msgstr "Direktorio zerrenda eguneratu."
 
+msgid "View"
+msgstr "Ikusi"
+
 msgid "Blue:"
 msgstr "Urdina:"
 
@@ -14164,7 +14378,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -14176,9 +14390,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14287,6 +14498,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14300,12 +14514,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14342,10 +14562,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14372,6 +14598,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14396,7 +14625,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14411,6 +14640,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14423,12 +14655,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14449,6 +14675,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14481,10 +14710,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14514,6 +14740,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14529,154 +14761,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
+msgstr ""
+
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
+msgstr ""
+
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Przemyśl: Budynki (buildings)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14691,9 +14929,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14823,6 +15070,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14838,7 +15100,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -15165,6 +15427,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15254,11 +15521,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15315,7 +15577,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15330,9 +15592,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr "Ezkerrera biratzeko debekua gehitzen die 4 edo 5 bide-multzoei"
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15422,6 +15681,14 @@ msgid ""
 msgstr ""
 "Garraio publikoko ibilbideak mapeatu eta editatzea errazagoa egiten du."
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15466,6 +15733,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15559,9 +15829,6 @@ msgstr "Elkar-konektaturiko bide luzeen deskarga erraza"
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr "Aukeratu adarkadura ez dute konektaturiko bideak"
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15969,6 +16236,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15993,10 +16268,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -16013,6 +16284,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -16029,11 +16304,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -16049,6 +16336,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -16061,6 +16352,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -16088,6 +16383,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr "Ordainpekoa"
 
@@ -16479,7 +16786,10 @@ msgstr ""
 msgid "Unclassified"
 msgstr "Sailkatu gabeko errepidea"
 
-msgid "Passing Places"
+msgid "Street has no name"
+msgstr ""
+
+msgid "Passing Places"
 msgstr "Aurreratze-lekua"
 
 msgid "Residential"
@@ -16555,6 +16865,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr "Errepidea (mota ezezaguna)"
 
@@ -17092,6 +17405,12 @@ msgstr "Abiadura radarra"
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17281,8 +17600,13 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
-msgstr "Ura"
+msgstr ""
 
 msgid "Drain"
 msgstr "Isurbidea"
@@ -17334,6 +17658,10 @@ msgstr "Urtegia"
 msgid "Covered Reservoir"
 msgstr "Estalitako urtegia"
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17475,6 +17803,120 @@ msgstr ""
 msgid "public"
 msgstr "publikoa"
 
+msgid "Marine Fuel"
+msgstr ""
+
+msgid "Agip"
+msgstr "Agip"
+
+msgid "Aral"
+msgstr "Aral"
+
+msgid "Avia"
+msgstr "Avia"
+
+msgid "BP"
+msgstr "BP"
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr "Esso"
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr "OMV"
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr "Q8"
+
+msgid "Repsol"
+msgstr "Repsol"
+
+msgid "Shell"
+msgstr "Shel"
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr "Statoil"
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr "Tamoil"
+
+msgid "Texaco"
+msgstr "Texaco"
+
+msgid "Total"
+msgstr "Total"
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr "Erregai motak"
+
+msgid "Diesel"
+msgstr "Diesela"
+
+msgid "Bio Diesel"
+msgstr "Biodiesela"
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr "91 oktano"
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr "95 oktano"
+
+msgid "Octane 98"
+msgstr "98 oktano"
+
+msgid "Octane 100"
+msgstr "100 oktano"
+
+msgid "E10 (10% Ethanol mix)"
+msgstr "E10 (%10eko etanol nahastea)"
+
+msgid "E85 (85% Ethanol mix)"
+msgstr "E85 (%85eko etanol nahastea)"
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr "LPF (Petroliotik likidotutako gasa)"
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr "CNG (Konprimitutako Gas Naturala)"
+
 msgid "Pier"
 msgstr "Ontziralekua"
 
@@ -17591,6 +18033,9 @@ msgstr "Bidearen topea"
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr "Erremonte"
 
@@ -17714,78 +18159,6 @@ msgstr ""
 msgid "Fuel"
 msgstr "Erregaia"
 
-msgid "Agip"
-msgstr "Agip"
-
-msgid "Aral"
-msgstr "Aral"
-
-msgid "Avia"
-msgstr "Avia"
-
-msgid "BP"
-msgstr "BP"
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr "Esso"
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr "OMV"
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr "Q8"
-
-msgid "Repsol"
-msgstr "Repsol"
-
-msgid "Shell"
-msgstr "Shel"
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr "Statoil"
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr "Tamoil"
-
-msgid "Texaco"
-msgstr "Texaco"
-
-msgid "Total"
-msgstr "Total"
-
-msgid "Independent"
-msgstr ""
-
 msgid "With shop"
 msgstr ""
 
@@ -17795,51 +18168,12 @@ msgstr ""
 msgid "kiosk"
 msgstr ""
 
-msgid "Fuel types:"
-msgstr "Erregai motak"
-
-msgid "Diesel"
-msgstr "Diesela"
-
-msgid "Bio Diesel"
-msgstr "Biodiesela"
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr "Kamioi handientzako diesela"
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr "91 oktano"
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr "95 oktano"
-
-msgid "Octane 98"
-msgstr "98 oktano"
-
-msgid "Octane 100"
-msgstr "100 oktano"
-
-msgid "E10 (10% Ethanol mix)"
-msgstr "E10 (%10eko etanol nahastea)"
-
-msgid "E85 (85% Ethanol mix)"
-msgstr "E85 (%85eko etanol nahastea)"
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr "LPF (Petroliotik likidotutako gasa)"
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr "CNG (Konprimitutako Gas Naturala)"
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -18058,9 +18392,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr "ibilbidearen segmentua"
-
 msgid "stop position"
 msgstr ""
 
@@ -18079,6 +18410,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr "ibilbidearen segmentua"
+
 msgid "Route Master"
 msgstr ""
 
@@ -18281,6 +18615,12 @@ msgstr "Hotel"
 msgid "Stars"
 msgstr "Izarrak"
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr "Motela"
 
@@ -18371,6 +18711,9 @@ msgstr "sandwich-a"
 msgid "sushi"
 msgstr "sushi-a"
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18585,6 +18928,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -19072,8 +19418,8 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
-msgstr "Birziklapena"
+msgid "Recycling Container"
+msgstr ""
 
 msgid "Batteries"
 msgstr "Bateria"
@@ -19081,19 +19427,46 @@ msgstr "Bateria"
 msgid "Cans"
 msgstr "Ontziak"
 
+msgid "Cardboard"
+msgstr ""
+
+msgid "Electrical Appliances"
+msgstr ""
+
 msgid "Glass"
 msgstr "Beira"
 
+msgid "Glass Bottles"
+msgstr ""
+
+msgid "Green Waste"
+msgstr ""
+
 msgid "Paper"
 msgstr "Papera"
 
+msgid "Plastic"
+msgstr ""
+
+msgid "Plastic Bottles"
+msgstr ""
+
+msgid "Plastic Packaging"
+msgstr ""
+
 msgid "Scrap Metal"
 msgstr "Txatarra"
 
-msgid "container"
+msgid "Shoes"
+msgstr "Zapatak"
+
+msgid "Small Appliances"
 msgstr ""
 
-msgid "centre"
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
 msgstr ""
 
 msgid "Waste Basket/Trash Can"
@@ -19297,6 +19670,9 @@ msgstr "Arku-tiroa"
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr "Alpinismoa"
 
@@ -19472,12 +19848,18 @@ msgstr "Beisbola"
 msgid "Basketball"
 msgstr "Saskibaloia"
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr "Golfa"
 
@@ -19493,14 +19875,14 @@ msgstr ""
 msgid "Cricket"
 msgstr "Cricket-a"
 
-msgid "Cricket Nets"
-msgstr "Saredun-cricket-a"
-
 msgid "Croquet"
 msgstr "Croquet-a"
 
-msgid "Hockey"
-msgstr "Hockey-a"
+msgid "Field Hockey"
+msgstr ""
+
+msgid "Ice Hockey"
+msgstr ""
 
 msgid "Pelota"
 msgstr "Frontoia (Euskal pilota)"
@@ -19523,9 +19905,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19544,9 +19923,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr "Gizakiak eraikia"
 
@@ -19619,6 +19995,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20939,9 +21323,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr "Zapatak"
-
 msgid "Outdoor"
 msgstr "Kanpoko aktibitateen denda"
 
@@ -21954,10 +22335,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22384,6 +22765,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22408,6 +22792,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22468,6 +22864,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22558,9 +22957,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22930,6 +23338,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22984,9 +23395,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23730,47 +24138,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
+msgstr ""
+
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Plugin Settings"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "show address dialog"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Use HSV based algorithm"
 msgstr ""
 
-msgid "merge nodes"
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23779,10 +24196,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
+msgstr ""
+
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24385,6 +24814,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr "Geruza garbia"
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25477,379 +25909,685 @@ msgstr ""
 msgid "GPX info mode"
 msgstr ""
 
-msgid ""
-"Move the mouse to show trackpoint info for current layer. Hold shift to "
-"highlight tracks"
+msgid ""
+"Move the mouse to show trackpoint info for current layer. Hold shift to "
+"highlight tracks"
+msgstr ""
+
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
 msgstr ""
 
-msgid "Delete this"
+msgid "Connecting"
 msgstr ""
 
-msgid "Delete this&older"
+msgid "Connected"
 msgstr ""
 
-msgid "km/h"
+msgid "no name"
 msgstr ""
 
-msgid "Track name: "
+msgid "Live GPS"
 msgstr ""
 
-msgid "Update IRS adjustment layer"
+msgid "Show GPS data."
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid "Status"
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Speed"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Course"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Open MapDust"
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "junctions"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Missing input data"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Total images:"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "images"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "Mapillary"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Export pictures"
 msgstr ""
 
-msgid "Search "
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export images"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Select pictures"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Join mode"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Walk mode"
 msgstr ""
 
-msgid "Tracing"
+msgid "Start walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "View in website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "Copy key"
 msgstr ""
 
-msgid "east"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "northeast"
+msgid "Edit on website"
 msgstr ""
 
-msgid "north"
+msgid "Export all images"
 msgstr ""
 
-msgid "northwest"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "west"
+msgid "Export selected images"
 msgstr ""
 
-msgid "southwest"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "south"
+msgid "Select a folder"
 msgstr ""
 
-msgid "southeast"
+msgid "Explore"
 msgstr ""
 
-msgid "coastline"
+msgid "Select a directory"
 msgstr ""
 
-msgid "land"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "No entry"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "No turn"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Years"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Days"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Source text"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Downloaded images"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Play"
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Not connected"
+msgid "Pause"
 msgstr ""
 
-msgid "Connecting"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "Connected"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "no name"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Live GPS"
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Status"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Way Info"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Speed"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "Course"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Go forward"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
-msgstr ""
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Center Once"
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25870,6 +26608,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -25933,47 +26674,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -26206,6 +26906,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr "Tresnak"
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27423,6 +28126,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27594,6 +28318,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27603,6 +28330,9 @@ msgstr "Objektuen historia"
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27783,6 +28513,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27961,6 +28694,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27970,6 +28736,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -28206,9 +28975,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29699,9 +30465,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr "Aukeratutako bidea"
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/fa.po b/i18n/po/fa.po
index 929e53c..0978588 100644
--- a/i18n/po/fa.po
+++ b/i18n/po/fa.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2014-03-18 07:32+0000\n"
 "Last-Translator: Saeed Ghazi Joolaee <Unknown>\n"
 "Language-Team: Persian <fa at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:52+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:56+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: fa\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -97,21 +97,18 @@ msgstr "بارگیری ترجیحات تصویری"
 msgid "Updating user interface"
 msgstr "بروز رسانی رابط کاربری"
 
-msgid "{0} completed in {1}"
-msgstr "{0} در  {1} تکمیل شد"
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "نادیده گرفتن فایل URL ناقص: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "نادیده گرفتن آدرس ناقص: \"{0}\""
 
 msgid "Warning"
 msgstr "هشدار"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "نادیده گرفتن فایل URL ناقص: \"{0}\""
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr "پارامتر \"downloadgps\" نام ها یا آدرس های پرونده را نپذیرفت"
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "نادیده گرفتن آدرس ناقص: \"{0}\""
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -450,6 +447,9 @@ msgstr "میخ پرچ پنل گفتگو"
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "میخ پرچ پنل گفتگو، نمای نقشه را حداگثر میکند"
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr "توزیع کردن گره های انتخاب شده با فواصل مساوی در طول یک خط"
 
@@ -1090,6 +1090,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr "لطفا راه هایی با زاویه حدود 90 و 180 درجه را انتخاب کنید."
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr "چسباندن"
 
@@ -2014,15 +2038,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr ""
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -2044,6 +2059,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2162,9 +2186,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2378,9 +2399,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr ""
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2594,6 +2621,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2636,6 +2667,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3086,6 +3120,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3203,10 +3255,44 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3394,6 +3480,12 @@ msgstr ""
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3421,13 +3513,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -4043,9 +4135,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -4055,12 +4144,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4241,13 +4342,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4446,6 +4547,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4659,43 +4761,54 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
-msgstr "پرونده‌"
+msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
 msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
 msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
 msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
-msgid "Menu: {0}"
+msgctxt "menu"
+msgid "Help"
 msgstr ""
 
-msgid "Save and load the current session (list of layers, etc.)"
+msgid "Menu: {0}"
 msgstr ""
 
 msgid "Edit toolbar"
@@ -4719,6 +4832,7 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
 msgstr ""
 
@@ -4841,58 +4955,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr ""
-
-msgid "Pos."
+msgid " ({0})"
 msgstr ""
 
-msgid "Role"
-msgstr ""
+msgid "{0} completed in {1}"
+msgstr "{0} در  {1} تکمیل شد"
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5321,6 +5393,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr ""
+
 msgid "Primitive"
 msgstr ""
 
@@ -5561,6 +5636,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5707,6 +5785,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5810,7 +5923,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5938,6 +6051,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5947,62 +6065,99 @@ msgstr ""
 msgid "unknown"
 msgstr ""
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
 msgstr ""
 
-msgid "Projected coordinates:"
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
 msgstr ""
 
 msgid ""
-"Enter easting and northing (x and y) separated by space, comma or semicolon."
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
 msgstr ""
 
-msgid "Lat/Lon"
+msgid "Coordinate value can be in one of three formats:"
 msgstr ""
 
-msgid "East/North"
+msgid "<i>degrees</i><tt>°</tt>"
 msgstr ""
 
-msgid "Please enter a GPS coordinates"
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
 msgstr ""
 
-msgid "Please enter a Easting and Northing"
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
 msgstr ""
 
-msgid "Toggle visibility of layer: {0}"
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
 msgstr ""
 
-msgid "Open a list of all loaded layers."
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
 msgstr ""
 
-msgid "Delete the selected layers."
+msgid "Some examples:"
 msgstr ""
 
-msgid "Show/hide"
+msgid "Projected coordinates:"
 msgstr ""
 
-msgid "Toggle visible state of the selected layer."
+msgid ""
+"Enter easting and northing (x and y) separated by space, comma or semicolon."
 msgstr ""
 
-msgid "Show/hide layer"
+msgid "Lat/Lon"
 msgstr ""
 
-msgid "Opacity"
+msgid "East/North"
+msgstr ""
+
+msgid "Please enter a GPS coordinates"
+msgstr ""
+
+msgid "Please enter a Easting and Northing"
+msgstr ""
+
+msgid "Toggle visibility of layer: {0}"
+msgstr ""
+
+msgid "Open a list of all loaded layers."
+msgstr ""
+
+msgid "Delete the selected layers."
+msgstr ""
+
+msgid "Show/hide"
+msgstr ""
+
+msgid "Toggle visible state of the selected layer."
+msgstr ""
+
+msgid "Show/hide layer"
+msgstr ""
+
+msgid "Opacity"
 msgstr ""
 
 msgid "Adjust opacity of the layer."
 msgstr ""
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr ""
 
@@ -6132,6 +6287,12 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
+msgid "Mini map"
+msgstr ""
+
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
 msgid "List of notes"
 msgstr ""
 
@@ -6190,10 +6351,15 @@ msgstr "ID شئ:"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "ID شئ مورد بارگذارى را وارد كنيد"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6222,6 +6388,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr ""
 
+msgid "Selection"
+msgstr ""
+
 msgid "Open a selection list window."
 msgstr ""
 
@@ -6312,6 +6481,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -6906,6 +7081,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6997,14 +7178,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7177,6 +7357,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7712,6 +7898,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8562,6 +8751,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr ""
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr ""
 
@@ -8615,6 +8904,9 @@ msgstr ""
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8635,7 +8927,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8718,272 +9010,157 @@ msgstr ""
 msgid "Save OSM file"
 msgstr ""
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
+msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
+msgid "Validation errors"
 msgstr ""
 
-msgid "Auto Zoom"
+msgid "No validation errors"
 msgstr ""
 
-msgid "Auto load tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
-msgid "Show Errors"
+msgid ""
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Load Tile"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Show Tile Info"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Load All Tiles"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Load All Error Tiles"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Increase zoom"
+msgid "Try Again"
 msgstr ""
 
-msgid "Decrease zoom"
+msgid "No images could be matched!"
 msgstr ""
 
-msgid "Snap to tile size"
+msgid "GPX Files (*.gpx *.gpx.gz)"
 msgstr ""
 
-msgid "Flush Tile Cache"
+msgid "File {0} is loaded yet under the name \"{1}\""
 msgstr ""
 
-msgid "zoom in to load any tiles"
+msgid "Error while parsing {0}"
 msgstr ""
 
-msgid "zoom in to load more tiles"
+msgid "Could not read \"{0}\""
 msgstr ""
 
-msgid "increase zoom level to see more detail"
+msgid ""
+"<html>Take a photo of your GPS receiver while it displays the "
+"time.<br>Display that photo here.<br>And then, simply capture the time you "
+"read on the photo and select a timezone<hr></html>"
 msgstr ""
 
-msgid "No tiles at this zoom level"
+msgid "Photo time (from exif):"
 msgstr ""
 
-msgid "Current zoom: {0}"
+msgid "Gps time (read from the above photo): "
 msgstr ""
 
-msgid "Display zoom: {0}"
+msgid "I am in the timezone of: "
 msgstr ""
 
-msgid "Pixel scale: {0}"
+msgid "No date"
 msgstr ""
 
-msgid "Best zoom: {0}"
+msgid "Open another photo"
 msgstr ""
 
-msgid "Cache stats: {0}"
+msgid "Synchronize time from a photo of the GPS receiver"
 msgstr ""
 
-msgid "TMS layer ({0}), downloading in zoom {1}"
+msgid ""
+"Error while parsing the date.\n"
+"Please use the requested format"
 msgstr ""
 
-msgid "EPSG:4326 and Mercator projection are supported"
+msgid "Invalid date"
 msgstr ""
 
-msgid "Validation errors"
+msgid "<No GPX track loaded yet>"
 msgstr ""
 
-msgid "No validation errors"
+msgid "GPX track: "
 msgstr ""
 
-msgid "Blank Layer"
+msgid "Open another GPX trace"
 msgstr ""
 
-msgid "Downloaded {0}/{1} tiles"
+msgid ""
+"<html>Use photo of an accurate clock,<br>e.g. GPS receiver display</html>"
 msgstr ""
 
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
+msgid "Auto-Guess"
 msgstr ""
 
-msgid "WMS layer ({0}), downloading in zoom {1}"
+msgid "Matches first photo with first gpx point"
 msgstr ""
 
-msgid "Download visible tiles"
+msgid "Manual adjust"
 msgstr ""
 
-msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
+msgid "Override position for: "
 msgstr ""
 
-msgid "Change resolution"
+msgid "Images with geo location in exif data ({0}/{1})"
 msgstr ""
 
-msgid "Reload erroneous tiles"
+msgid "Images that are already tagged ({0}/{1})"
 msgstr ""
 
-msgid "Alpha channel"
+msgid "Show Thumbnail images on the map"
 msgstr ""
 
-msgid "Automatically change resolution"
+msgid "Timezone: "
 msgstr ""
 
-msgid "Set WMS Bookmark"
+msgid "Offset:"
 msgstr ""
 
-msgid "Automatic downloading"
+msgid "Correlate"
 msgstr ""
 
-msgid "Zoom to native resolution"
+msgid "No gpx selected"
 msgstr ""
 
-msgid "Supported projections are: {0}"
-msgstr ""
+msgid "<html>Matched <b>{0}</b> of <b>{1}</b> photo to GPX track.</html>"
+msgid_plural ""
+"<html>Matched <b>{0}</b> of <b>{1}</b> photos to GPX track.</html>"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Timezone: {0}"
 msgstr ""
 
-msgid "Save WMS file"
+msgid "Minutes: {0}"
 msgstr ""
 
-msgid "Correlate to GPX"
+msgid "Seconds: {0}"
 msgstr ""
 
-msgid "GPX Files (*.gpx *.gpx.gz)"
-msgstr ""
+msgid "(Time difference of {0} day)"
+msgid_plural "Time difference of {0} days"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "File {0} is loaded yet under the name \"{1}\""
+msgid ""
+"An error occurred while trying to match the photos to the GPX track. You can "
+"adjust the sliders to manually match the photos."
 msgstr ""
 
-msgid "Error while parsing {0}"
-msgstr ""
-
-msgid "Could not read \"{0}\""
-msgstr ""
-
-msgid ""
-"<html>Take a photo of your GPS receiver while it displays the "
-"time.<br>Display that photo here.<br>And then, simply capture the time you "
-"read on the photo and select a timezone<hr></html>"
-msgstr ""
-
-msgid "Photo time (from exif):"
-msgstr ""
-
-msgid "Gps time (read from the above photo): "
-msgstr ""
-
-msgid "I am in the timezone of: "
-msgstr ""
-
-msgid "No date"
-msgstr ""
-
-msgid "Open another photo"
-msgstr ""
-
-msgid "Synchronize time from a photo of the GPS receiver"
-msgstr ""
-
-msgid ""
-"Error while parsing the date.\n"
-"Please use the requested format"
-msgstr ""
-
-msgid "Invalid date"
-msgstr ""
-
-msgid "<No GPX track loaded yet>"
-msgstr ""
-
-msgid "GPX track: "
-msgstr ""
-
-msgid "Open another GPX trace"
-msgstr ""
-
-msgid ""
-"<html>Use photo of an accurate clock,<br>e.g. GPS receiver display</html>"
-msgstr ""
-
-msgid "Auto-Guess"
-msgstr ""
-
-msgid "Matches first photo with first gpx point"
-msgstr ""
-
-msgid "Manual adjust"
-msgstr ""
-
-msgid "Override position for: "
-msgstr ""
-
-msgid "Images with geo location in exif data ({0}/{1})"
-msgstr ""
-
-msgid "Images that are already tagged ({0}/{1})"
-msgstr ""
-
-msgid "Show Thumbnail images on the map"
-msgstr ""
-
-msgid "Timezone: "
-msgstr ""
-
-msgid "Offset:"
-msgstr ""
-
-msgid "Correlate images with GPX track"
-msgstr ""
-
-msgid "Correlate"
-msgstr ""
-
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
-msgid "No gpx selected"
-msgstr ""
-
-msgid "<html>Matched <b>{0}</b> of <b>{1}</b> photo to GPX track.</html>"
-msgid_plural ""
-"<html>Matched <b>{0}</b> of <b>{1}</b> photos to GPX track.</html>"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Timezone: {0}"
-msgstr ""
-
-msgid "Minutes: {0}"
-msgstr ""
-
-msgid "Seconds: {0}"
-msgstr ""
-
-msgid "(Time difference of {0} day)"
-msgid_plural "Time difference of {0} days"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid ""
-"An error occurred while trying to match the photos to the GPX track. You can "
-"adjust the sliders to manually match the photos."
-msgstr ""
-
-msgid "Matching photos to track failed"
+msgid "Matching photos to track failed"
 msgstr ""
 
 msgid "Adjust timezone and offset"
@@ -9148,9 +9325,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr ""
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9213,9 +9387,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9841,15 +10012,15 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr ""
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -10642,6 +10813,21 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
+msgid "1. Enter getCapabilities URL"
+msgstr ""
+
+msgid "2. Enter name for this layer"
+msgstr ""
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr ""
 
@@ -10660,6 +10846,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10681,6 +10879,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10723,9 +10924,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr ""
 
@@ -10750,36 +10948,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11715,6 +11898,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] ""
@@ -11823,6 +12014,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12076,6 +12270,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12612,6 +12809,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12997,6 +13197,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13991,6 +14204,9 @@ msgstr ""
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr ""
+
 msgid "Blue:"
 msgstr ""
 
@@ -14030,7 +14246,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -14042,9 +14258,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14153,6 +14366,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14166,12 +14382,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14208,10 +14430,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
+msgstr ""
+
+msgid "Geodatastyrelsen DTK Kort25"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14238,6 +14466,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14262,7 +14493,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14277,6 +14508,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14289,12 +14523,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14315,6 +14543,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14347,10 +14578,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14380,6 +14608,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14395,154 +14629,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14557,9 +14797,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14689,6 +14938,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14704,7 +14968,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -15030,6 +15294,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15114,11 +15383,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15172,7 +15436,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15187,9 +15451,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15270,6 +15531,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15308,6 +15577,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15383,9 +15655,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15791,6 +16060,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15815,10 +16092,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15835,6 +16108,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15851,11 +16128,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15871,6 +16160,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15883,6 +16176,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15910,6 +16207,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16301,6 +16610,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16377,6 +16689,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr ""
 
@@ -16914,6 +17229,12 @@ msgstr ""
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17103,6 +17424,11 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
 msgstr ""
 
@@ -17156,6 +17482,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17297,6 +17627,120 @@ msgstr ""
 msgid "public"
 msgstr ""
 
+msgid "Marine Fuel"
+msgstr ""
+
+msgid "Agip"
+msgstr ""
+
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
 msgid "Pier"
 msgstr ""
 
@@ -17413,6 +17857,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -17536,136 +17983,25 @@ msgstr ""
 msgid "Fuel"
 msgstr ""
 
-msgid "Agip"
+msgid "With shop"
 msgstr ""
 
-msgid "Aral"
+msgid "convenience"
 msgstr ""
 
-msgid "Avia"
+msgid "kiosk"
 msgstr ""
 
-msgid "BP"
+msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
-msgid "Chevron"
+msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Citgo"
+msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr ""
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
-msgid "With shop"
-msgstr ""
-
-msgid "convenience"
-msgstr ""
-
-msgid "kiosk"
-msgstr ""
-
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
-msgid "Diesel (Gas To Liquid - ultimate diesel)"
-msgstr ""
-
-msgid "Diesel for Heavy Good Vehicles"
-msgstr ""
-
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
-msgid "1/25 mix (mofa/moped)"
-msgstr ""
-
-msgid "1/50 mix (mofa/moped)"
+msgid "1/50 mix (mofa/moped)"
 msgstr ""
 
 msgid "Fuel cards:"
@@ -17880,9 +18216,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17901,6 +18234,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18103,6 +18439,12 @@ msgstr ""
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18193,6 +18535,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18407,6 +18752,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18894,7 +19242,7 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
@@ -18903,19 +19251,46 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
+msgid "Cardboard"
+msgstr ""
+
+msgid "Electrical Appliances"
+msgstr ""
+
 msgid "Glass"
 msgstr ""
 
+msgid "Glass Bottles"
+msgstr ""
+
+msgid "Green Waste"
+msgstr ""
+
 msgid "Paper"
 msgstr ""
 
+msgid "Plastic"
+msgstr ""
+
+msgid "Plastic Bottles"
+msgstr ""
+
+msgid "Plastic Packaging"
+msgstr ""
+
 msgid "Scrap Metal"
 msgstr ""
 
-msgid "container"
+msgid "Shoes"
+msgstr ""
+
+msgid "Small Appliances"
+msgstr ""
+
+msgid "Waste"
 msgstr ""
 
-msgid "centre"
+msgid "Recycling Centre"
 msgstr ""
 
 msgid "Waste Basket/Trash Can"
@@ -19119,6 +19494,9 @@ msgstr ""
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr ""
 
@@ -19294,12 +19672,18 @@ msgstr ""
 msgid "Basketball"
 msgstr ""
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr ""
 
@@ -19315,13 +19699,13 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
@@ -19345,9 +19729,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19366,9 +19747,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -19441,6 +19819,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20761,9 +21147,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -21776,10 +22159,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22206,6 +22589,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22230,6 +22616,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22290,6 +22688,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22380,9 +22781,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22752,6 +23162,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22806,9 +23219,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23552,47 +23962,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23601,10 +24020,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debug"
+msgstr ""
+
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24207,6 +24638,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr ""
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25304,374 +25738,680 @@ msgid ""
 "highlight tracks"
 msgstr ""
 
-msgid "Delete this"
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
 msgstr ""
 
-msgid "Delete this&older"
+msgid "Connecting"
 msgstr ""
 
-msgid "km/h"
+msgid "Connected"
 msgstr ""
 
-msgid "Track name: "
+msgid "no name"
 msgstr ""
 
-msgid "Update IRS adjustment layer"
+msgid "Live GPS"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid "Show GPS data."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Speed"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Course"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
+msgid "Explore"
 msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25692,6 +26432,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -25750,47 +26493,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -26023,6 +26725,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr ""
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27240,6 +27945,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27411,6 +28137,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27420,6 +28149,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27600,6 +28332,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27778,6 +28513,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27787,6 +28555,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -28023,9 +28794,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29508,9 +30276,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/fi.po b/i18n/po/fi.po
index 1da9bca..6289a48 100644
--- a/i18n/po/fi.po
+++ b/i18n/po/fi.po
@@ -7,16 +7,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
-"PO-Revision-Date: 2015-04-15 14:57+0000\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
+"PO-Revision-Date: 2015-10-07 15:47+0000\n"
 "Last-Translator: Lauri Kytömaa <Unknown>\n"
 "Language-Team: Finnish <fi at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:40+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:41+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: fi\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -98,21 +98,18 @@ msgstr "Ladataan kuvatasojen asetukset"
 msgid "Updating user interface"
 msgstr "Valmistellaan käyttöliittymää"
 
-msgid "{0} completed in {1}"
-msgstr "{0} suoritettu ajassa {1}"
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "Ohitetaan virheellinen tiedosto-URL: ”{0}”"
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "Jätetään huomiotta virheellinen URL-osoite: ”{0}”"
 
 msgid "Warning"
 msgstr "Varoitus"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "Ohitetaan virheellinen tiedosto-URL: ”{0}”"
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr "Parametrin ”downloadgps” arvoksi ei kelpaa tiedoston URL eikä nimi."
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "Jätetään huomiotta virheellinen URL-osoite: ”{0}”"
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -464,6 +461,9 @@ msgstr ""
 "Näytä tai piilota oikean reunan muokkauspaneelit karttanäkymän "
 "maksimoimiseksi"
 
+msgid "Distribute Nodes"
+msgstr "Aseta pisteet tasavälein"
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr "Asettaa valitut solmut tasavälein viivan myötäisesti."
 
@@ -1110,6 +1110,30 @@ msgstr ""
 "Suorakulmaistus voidaan tehdä vain poluille, joiden kulmat ovat jo ennestään "
 "lähellä 90 tai 180 astetta."
 
+msgid "Download from Overpass API ..."
+msgstr "Lataa Overpass API -palvelusta..."
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr "Rakentaa Overpass-hakulausekkeen Overpass Turbo -lausekevelholla"
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr "Overpass-hakulauseke: "
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr "Liitä"
 
@@ -1304,7 +1328,7 @@ msgid "Load Session"
 msgstr "Lataa istunto"
 
 msgid "Load a session from file."
-msgstr "Lataa tallennetun istunton tiedostosta."
+msgstr "Lataa tallennetun istunnon tiedostosta."
 
 msgid "Open session"
 msgstr "Avaa istunto tiedostosta"
@@ -2095,15 +2119,6 @@ msgstr "Kulman askellus käytössä."
 msgid "Finish drawing."
 msgstr "Lopeta piirtäminen."
 
-msgid "FIX"
-msgstr "PAKOTA"
-
-msgid "draw angle snap"
-msgstr "Kulman askelluksen apuviiva"
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -2125,6 +2140,15 @@ msgstr "0,45,90,..."
 msgid "0,30,45,60,90,..."
 msgstr "0,30,45,60,90,..."
 
+msgid "FIX"
+msgstr "PAKOTA"
+
+msgid "draw angle snap"
+msgstr "Kulman askelluksen apuviiva"
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr "Piirtokulman askellus"
 
@@ -2258,9 +2282,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr "Valittujen polkujen täytyy olla haaraton, yhtenäinen viiva."
 
-msgid "Make parallel way error"
-msgstr "Rinnakkaispolun teko ei onnistu"
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2495,9 +2516,15 @@ msgstr "kaikki kohteet"
 msgid "Also include incomplete and deleted objects in search."
 msgstr "Etsi myös vaillinaisia ja poistettuja kohteita"
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr "säännöllinen lauseke"
 
+msgid "MapCSS selector"
+msgstr "MapCSS-valitsin"
+
 msgid "add toolbar button"
 msgstr "lisää painike työkaluriville"
 
@@ -2718,6 +2745,10 @@ msgid "RX"
 msgstr "SL"
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr "K"
 
@@ -2768,6 +2799,9 @@ msgstr "Odotettiin lukuväliä"
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr "Odottamaton symboli. Odotettu {0}, löydetty {1}"
 
+msgid "Failed to parse MapCSS selector"
+msgstr "MapCSS-valitsimen tulkinta ei onnistunut"
+
 msgid "Unexpected token: {0}"
 msgstr "Odottamaton symboli: {0}"
 
@@ -3248,6 +3282,24 @@ msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 "<html>Puuttuvan välimuistihakemiston luominen ei onnistunut: {0}</html>"
 
+msgid "Unable to delete temporary file {0}"
+msgstr "Väliaikaistiedoston poistaminen ei onnistunut: {0}"
+
+msgid "Unable to set file non-readable {0}"
+msgstr "Lukuoikeutta ei voitu poistaa tiedostolta {0}"
+
+msgid "Unable to set file non-writable {0}"
+msgstr "Kirjoitusoikeutta ei voitu poistaa tiedostolta {0}"
+
+msgid "Unable to set file non-executable {0}"
+msgstr "Suoritusoikeutta ei voitu poistaa tiedostolta {0}"
+
+msgid "Unable to set file readable {0}"
+msgstr "Lukuoikeutta ei voitu asettaa tiedostolle {0}"
+
+msgid "Unable to set file writable {0}"
+msgstr "Kirjoitusoikeutta ei voitu asettaa tiedostolle {0}"
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3274,10 +3326,11 @@ msgstr ""
 
 msgid "Missing preference file ''{0}''. Creating a default preference file."
 msgstr ""
+"Asetustiedosto ''{0}'' puuttuu. Luodaan uusi asetustiedosto oletusarvoilla."
 
 msgid ""
 "Replacing existing preference file ''{0}'' with default preference file."
-msgstr ""
+msgstr "Korvataan asetustiedosto ''{0}'' oletusarvoilla."
 
 msgid ""
 "<html>Failed to initialize preferences.<br>Failed to reset preference file "
@@ -3338,9 +3391,11 @@ msgstr "TUNTEMATON"
 
 msgid "Unexpected JOSM version number in revision file, value is ''{0}''"
 msgstr ""
+"Revisiotiedostosta luettu JOSM:n versionumero poikkeaa odotetusta, luettiin "
+"arvo ''{0}''"
 
 msgid "The revision file ''/REVISION'' is missing."
-msgstr ""
+msgstr "Revisiotiedosto ''/REVISION'' puuttuu."
 
 msgid "Already registered a conflict for primitive ''{0}''."
 msgstr "Objektille \"{0}\" on jo rekisteröity ristiriita"
@@ -3373,13 +3428,47 @@ msgctxt "compass"
 msgid "E"
 msgstr "I"
 
-msgid "Not in cache"
-msgstr "Ei välimuistissa"
-
 msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr ""
 "Projektiota \"{0}\" ei löytynyt, kirjanmerkki \"{1}\" ei ole käytettävissä"
 
+msgid "HTTP error {0} when loading tiles"
+msgstr ""
+
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr "Valitse WMTS-kuvataso"
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr "Saatu getCapabilities-tiedosto ei määrittele tasoja: {0}"
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
+msgstr ""
+
 msgid "ID > 0 expected. Got {0}."
 msgstr "Tunnisteen oletettiin olevan > 0. Saatiin {0}."
 
@@ -3583,6 +3672,12 @@ msgstr "teksti"
 msgid "areatext"
 msgstr "alueteksti"
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3610,13 +3705,13 @@ msgstr "Ellipsoidia ''{0}'' ei tueta."
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr "Ellipsoidin parametrien yhdistelmää ei tueta."
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -3971,10 +4066,12 @@ msgstr ""
 "polkua vastaan."
 
 msgid "Long segments"
-msgstr ""
+msgstr "Pitkät polunosat"
 
 msgid "This tests for long way segments, which are usually errors."
 msgstr ""
+"Etsii poluissa olevat erityisen pitkät solmuvälit, jotka ovat yleensä "
+"virheitä."
 
 msgid "Very long segment of {0} kilometers"
 msgstr ""
@@ -4261,9 +4358,6 @@ msgstr "Tagin avain on sallittua pidempi"
 msgid "Tags with empty values"
 msgstr "Tyhjät arvot"
 
-msgid "Invalid property key"
-msgstr "Epäkelpo avain"
-
 msgid "Invalid white space in property key"
 msgstr "Virheellinen välilyönti avaimessa"
 
@@ -4273,12 +4367,24 @@ msgstr "Arvossa välilyönti alussa tai lopussa"
 msgid "Property values contain HTML entity"
 msgstr "Avaimen arvossa HTML-entiteettikoodeja"
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr "Avain ''{0}'' hyvin lähellä avainta ''{1}''."
+
+msgid "Misspelled property key"
+msgstr "Kirjoitusvirhe tagin avaimessa"
+
 msgid "Key ''{0}'' not in presets."
 msgstr "Avainta \"{0}\" ei ole esivalinnoissa."
 
 msgid "Presets do not contain property key"
 msgstr "Esivalinnoissa ei ole ominaisuuden avainta."
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr "Arvo ''{0}'' avaimelle ''{1}'' hyvin lähellä arvoa ''{2}''."
+
+msgid "Misspelled property value"
+msgstr "Kirjoitusvirhe tagin arvossa"
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr "Esivalinnoissa ei avaimella \"{1}\" ole arvoa \"{0}\"."
 
@@ -4467,15 +4573,15 @@ msgstr "Polun piste lähellä toista polkua"
 msgid "Connected way end node near other way"
 msgstr "Toiseen polkuun yhteydessä oleva päätepiste lähellä muuta polkua."
 
+msgid "Unconnected nodes without physical tags"
+msgstr "Irralliset pisteet ilman fyysisiä kohteita kuvaavia tageja"
+
 msgid "Untagged and unconnected nodes"
 msgstr "Irralliset pisteet ilman tageja"
 
 msgid "This test checks for untagged nodes that are not part of any way."
 msgstr "Etsii tagittomia pisteitä jotka eivät ole osa mitään polkua."
 
-msgid "Unconnected nodes without physical tags"
-msgstr "Irralliset pisteet ilman fyysisiä kohteita kuvaavia tageja"
-
 msgid "No tags"
 msgstr "Ei tageja"
 
@@ -4673,6 +4779,7 @@ msgstr "Napsauta sulkeaksesi ikkunan"
 msgid "Imagery offset"
 msgstr "Kuvatason paikka"
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr "Kuvatasot"
 
@@ -4897,45 +5004,56 @@ msgstr ""
 "välityspalvelinasetuksista.<br>Haluatko muuttaa välityspalvelimen asetuksia "
 "nyt?"
 
+msgctxt "menu"
 msgid "File"
 msgstr "Tiedosto"
 
-msgid "Session"
-msgstr "Istunto"
+msgctxt "menu"
+msgid "Edit"
+msgstr ""
 
+msgctxt "menu"
 msgid "View"
-msgstr "Näytä"
+msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
 msgstr "Työkalut"
 
+msgctxt "menu"
 msgid "More tools"
 msgstr "Lisää työkaluja"
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
 msgstr "Valinta"
 
+msgctxt "menu"
 msgid "Presets"
 msgstr "Esivalinnat"
 
 msgid "More..."
 msgstr "Lisää vaihtoehtoja..."
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr "Ikkunat"
 
+msgctxt "menu"
+msgid "Help"
+msgstr ""
+
 msgid "Menu: {0}"
 msgstr "Valikko: {0}"
 
-msgid "Save and load the current session (list of layers, etc.)"
-msgstr "Tallenna ja lataa tämänhetkinen istunto (tasolista, jne.)"
-
 msgid "Edit toolbar"
 msgstr "Näytä työkalupalkki"
 
@@ -4957,8 +5075,9 @@ msgstr "Avaa asetusikkunaan suoraan kuvatasojen asetukset -välilehti"
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
-msgstr "Ääni"
+msgstr ""
 
 msgid "Do not hide toolbar"
 msgstr "Työkalupalkki aina näkyvillä"
@@ -5081,65 +5200,17 @@ msgstr "Taustalle"
 msgid "Click to run job in background"
 msgstr "Napsauta suorittaaksesi työ taustalla"
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
+msgid " ({0})"
+msgstr " ({0})"
 
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-"<html>Vahvista <strong>1 objektin</strong> poistaminen <strong>1 "
-"relaatiosta</strong>.</html>"
+msgid "{0} completed in {1}"
+msgstr "{0} suoritettu ajassa {1}"
 
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
+msgid "Enlarge"
 msgstr ""
-"<html>Vahvista <strong>1 objektin</strong> poistaminen <strong>{0} "
-"relaatiosta</strong>.</html>"
 
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
+msgid "Shrink"
 msgstr ""
-"<html>Vahvista <strong>{0} objektin</strong> poistaminen <strong>{1} "
-"relaatiosta</strong>.</html>"
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] "Poistetaan {0} objekti"
-msgstr[1] "Poistetaan {0} objektia"
-
-msgid "Delete objects"
-msgstr "Poista objektit"
-
-msgid "To delete"
-msgstr "Poistettava"
-
-msgid "From Relation"
-msgstr "Relaatiosta"
-
-msgid "Pos."
-msgstr "Paikka"
-
-msgid "Role"
-msgstr "Rooli"
-
-msgid "Click to close the dialog and remove the object from the relations"
-msgstr "Sulkee ikkunan, ja poistaa objektin relaatioista"
-
-msgid "Click to close the dialog and to abort deleting the objects"
-msgstr "Tästä voit sulkea ikkunan ja keskeyttää kohteiden poistamisen"
 
 msgid ""
 "<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
@@ -5595,6 +5666,9 @@ msgstr "Pidä heidän poistettu tilansa"
 msgid "Undecide conflict between deleted state"
 msgstr "Ristiriita ratkaisematta poistettu-tilojen välillä"
 
+msgid "Role"
+msgstr "Rooli"
+
 msgid "Primitive"
 msgstr "Alkeinen"
 
@@ -5841,6 +5915,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr "Toteuta tämä rooli kaikkiin jäseniin"
 
+msgid "Pos."
+msgstr "Paikka"
+
 msgid "Orig. Way"
 msgstr "Alkp. Polk."
 
@@ -6002,6 +6079,47 @@ msgstr "Selvitä ristiriidat"
 msgid "Resolve conflicts for ''{0}''"
 msgstr "Ratkaise ristiriidat kohteelle \"{0}\""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+"<html>Vahvista <strong>1 objektin</strong> poistaminen <strong>1 "
+"relaatiosta</strong>.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Vahvista <strong>1 objektin</strong> poistaminen <strong>{0} "
+"relaatiosta</strong>.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Vahvista <strong>{0} objektin</strong> poistaminen <strong>{1} "
+"relaatiosta</strong>.</html>"
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] "Poistetaan {0} objekti"
+msgstr[1] "Poistetaan {0} objektia"
+
+msgid "Delete objects"
+msgstr "Poista objektit"
+
+msgid "To delete"
+msgstr "Poistettava"
+
+msgid "From Relation"
+msgstr "Relaatiosta"
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr "Sulkee ikkunan, ja poistaa objektin relaatioista"
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr "Tästä voit sulkea ikkunan ja keskeyttää kohteiden poistamisen"
+
 msgid "Filter objects and hide/disable them."
 msgstr "Piilota tai himmennä objekteja suotimilla."
 
@@ -6106,8 +6224,8 @@ msgstr "Kohteen tarkat tiedot"
 msgid "map style"
 msgstr "karttatyyli"
 
-msgid " ({0})"
-msgstr " ({0})"
+msgid "edit counts"
+msgstr ""
 
 msgid "not in data set"
 msgstr "puuttuu ladatusta datasta"
@@ -6249,6 +6367,11 @@ msgstr ""
 "Valittujen 2 kohteen piirtovälimuistiin tallennettu tyyli on samanlainen, "
 "muttei identtinen."
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr "xml"
 
@@ -6258,38 +6381,69 @@ msgstr "mapcss"
 msgid "unknown"
 msgstr "tuntematon"
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
 msgstr ""
 
-msgid "Projected coordinates:"
-msgstr "Projisoidut koordinaatit:"
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
 
 msgid ""
-"Enter easting and northing (x and y) separated by space, comma or semicolon."
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
 msgstr ""
-"Anna itä- ja pohjoiskoordinaatit (x ja y). Erottimeksi kelpaa välilyönti, "
-"pilkku ja puolipiste."
 
-msgid "Lat/Lon"
-msgstr "Leveys-/pituusaste"
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
 
-msgid "East/North"
-msgstr "Itä/Pohjoinen"
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
 
-msgid "Please enter a GPS coordinates"
-msgstr "Syötä GPS-koordinaatit"
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
 
-msgid "Please enter a Easting and Northing"
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
+msgstr ""
+
+msgid "Projected coordinates:"
+msgstr "Projisoidut koordinaatit:"
+
+msgid ""
+"Enter easting and northing (x and y) separated by space, comma or semicolon."
+msgstr ""
+"Anna itä- ja pohjoiskoordinaatit (x ja y). Erottimeksi kelpaa välilyönti, "
+"pilkku ja puolipiste."
+
+msgid "Lat/Lon"
+msgstr "Leveys-/pituusaste"
+
+msgid "East/North"
+msgstr "Itä/Pohjoinen"
+
+msgid "Please enter a GPS coordinates"
+msgstr "Syötä GPS-koordinaatit"
+
+msgid "Please enter a Easting and Northing"
 msgstr "Syötä itä- ja pohjoiskoordinaatit (metriä)"
 
 msgid "Toggle visibility of layer: {0}"
@@ -6316,6 +6470,12 @@ msgstr "Läpinäkyvyys"
 msgid "Adjust opacity of the layer."
 msgstr "Säädä tason läpinäkyvyyttä"
 
+msgid "Gamma"
+msgstr "Kirkkaus"
+
+msgid "Adjust gamma value of the layer."
+msgstr "Säädä tason kirkkautta (gamma-arvoa)."
+
 msgid "Activate"
 msgstr "Aktivoi"
 
@@ -6396,10 +6556,10 @@ msgid "Save a copy of this Style to file and add it to the list"
 msgstr "Tallenna tämä tyyli uuteen tiedostoon ja lisää se tyylilistaan"
 
 msgid "Map paint style file (*.mapcss, *.zip)"
-msgstr ""
+msgstr "Kartanpiirtotyylitiedosto (*.mapcss, *.zip)"
 
 msgid "Map paint style file (*.xml, *.zip)"
-msgstr ""
+msgstr "Kartanpiirtotyylitiedosto (*.xml, *.zip)"
 
 msgid "Reloading style sources"
 msgstr "Ladataan kartanpiirtotyylejä uudelleen"
@@ -6446,6 +6606,12 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
+msgid "Mini map"
+msgstr "Pikkukartta"
+
+msgid "Displays a small map of the current edit location"
+msgstr "Näyttää pienen karttakuvan muokkausalueesta"
+
 msgid "List of notes"
 msgstr ""
 
@@ -6504,10 +6670,15 @@ msgstr "Ohjektitunniste:"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "Anna ladattavan objektin tunniste"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6522,7 +6693,7 @@ msgid "Open a list of all relations."
 msgstr "Näyttää kaikki relaatiot luettelona"
 
 msgid "Relation list filter"
-msgstr ""
+msgstr "Relaatiolistan suodatus tekstillä"
 
 msgid "Create a new relation"
 msgstr "Tee uusi relaatio"
@@ -6536,6 +6707,9 @@ msgstr "Relaatiot: {0}/{1}"
 msgid "Relations: {0}"
 msgstr "Relaatiot: {0} kpl"
 
+msgid "Selection"
+msgstr "Valinta"
+
 msgid "Open a selection list window."
 msgstr "Avaa valintaikkuna."
 
@@ -6628,6 +6802,12 @@ msgstr "Avaa tarkistusikkuna."
 msgid "Validation results"
 msgstr "Tarkistimen tulokset"
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr "Korjaa"
 
@@ -7264,6 +7444,12 @@ msgstr "Avaa tagin tietosivu OSM-wikistä. (F1)"
 msgid "Launch browser with wiki help for selected object"
 msgstr "Avaa selaimeen tagin ohjesivun, sikäli kuin OSM-wikistä löytyy."
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr "Liitä arvo leikepöydältä"
 
@@ -7358,14 +7544,13 @@ msgstr "Valitse muistettavien tagien määrä"
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7556,6 +7741,12 @@ msgstr "Lajittele relaation jäsenet"
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr "Käännä jäsenten järjestys ympäri"
 
@@ -8152,6 +8343,9 @@ msgstr "Ladataan relaation {0} historiaa"
 msgid "Node {0}"
 msgstr "Piste {0}"
 
+msgid "The nodes of this way are in reverse order"
+msgstr "Tämän polun pisteet ovat päinvastaisessa järjestyksessä"
+
 msgid "Zoom to node"
 msgstr "Näytä piste"
 
@@ -8554,6 +8748,8 @@ msgid ""
 "Either edit the path manually in the text field or click the \"...\" button "
 "to open a file chooser."
 msgstr ""
+"Kirjoita tiedostonimi tiedostopolun kera, tai valitse \"...\"-painike "
+"avataksesi tiedostonvalintaikkunan."
 
 msgid "The bold text is the name of the layer."
 msgstr ""
@@ -8568,13 +8764,13 @@ msgid "File ''{0}'' is not writable. Please enter another file name."
 msgstr "Tiedostoon \"{0}\" ei voi kirjoittaa. Anna jokin muu tiedostonimi."
 
 msgid "Click cell to change the file path."
-msgstr ""
+msgstr "Napsauta solua muuttaaksesi tiedostopolkua."
 
 msgid "Launch a file chooser to select a file"
 msgstr "Avaa tiedostonvalintaikkuna"
 
 msgid "Select filename"
-msgstr ""
+msgstr "Valitse tiedostonimi"
 
 msgid "Open Recent"
 msgstr "Viimeksi avatut"
@@ -8637,7 +8833,7 @@ msgstr[1] ""
 "muutokset.<br>Tasot ilman tiedostoa:</html>"
 
 msgid "Unsaved data and missing associated file"
-msgstr ""
+msgstr "Tallennettavalle tasolle ei ole annettu tiedostoa"
 
 msgid ""
 "<html>{0} layer needs saving but has an associated file<br>which cannot be "
@@ -8648,10 +8844,16 @@ msgid_plural ""
 "written.<br>Either select another file for each of them or discard the "
 "changes.<br>Layers with non-writable files:</html>"
 msgstr[0] ""
+"<html>{0} taso piti tallentaa, mutta sille osoitettuun<br>tiedostoon ei voi "
+"kirjoittaa.<br>Valitse toinen kohdetiedosto tälle tasolle tai hylkää "
+"muutokset.<br>Taso jonka tiedostoon ei voi kirjoittaa:</html>"
 msgstr[1] ""
+"<html>{0} tasoa piti tallentaa, mutta niille osoitettuihin<br>tiedostoihin "
+"ei voi kirjoittaa.<br>Valitse toinen kohdetiedosto kullekin tasolle tai "
+"hylkää muutokset.<br>Tasot joiden tiedostoihin ei voi kirjoittaa:</html>"
 
 msgid "Unsaved data non-writable files"
-msgstr ""
+msgstr "Tallentamattomien tietojen kirjoitus ei onnistunut"
 
 msgid "Close this dialog and resume editing in JOSM"
 msgstr "Sulje tämä ja palaa muokkaamaan karttaa JOSMissa."
@@ -9111,6 +9313,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] "{0} kohde poistetaan:"
 msgstr[1] "{0} kohdetta poistetaan:"
 
+msgid "Show Tile Info"
+msgstr "Näytä kuvapalan tiedot"
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr "Lataa kuvapalat automaattisesti"
+
+msgid "Load All Tiles"
+msgstr "Lataa kaikki näkyvät kuvapalat"
+
+msgid "Load All Error Tiles"
+msgstr "Lataa epäonnistuneet kuvapalat"
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr "Vaihda resoluutiota"
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr "Lataa kuvapala"
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr "Täsmäytä mittakaava kuvapalojen resoluutioon"
+
+msgid "Flush Tile Cache"
+msgstr "Tyhjennä kuvapalojen välimuisti"
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr "Tallenna WMS-tiedosto"
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr "Muokkaa väriä"
 
@@ -9164,6 +9466,9 @@ msgstr "Tallenna GPX-tiedosto"
 msgid "Imagery fade"
 msgstr "Kuvatason häivytys"
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -9184,12 +9489,9 @@ msgstr "Taso tukee kaikkia projektioita"
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
-"Taso {0} ei tue uutta projektiota {1}.\n"
-"{2}\n"
-"Vaihda projektiota uudelleen, tai poista taso."
 
 msgid "Save Layer"
 msgstr "Tallenna kerros"
@@ -9272,196 +9574,91 @@ msgstr ""
 msgid "Save OSM file"
 msgstr "Tallenna OSM-tiedosto"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
+msgid "EPSG:4326 and Mercator projection are supported"
+msgstr "Tuetut projektiot ovat EPSG:4326 ja Mercator."
 
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-"TMS-kuvatasojen kanssa ei voi käyttää projektiota {0}.\n"
-"{1}\n"
-"Vaihda karttaprojektiota, tai poista kuvataso."
+msgid "Validation errors"
+msgstr "Tarkistusvirheet"
 
-msgid "Auto Zoom"
-msgstr ""
+msgid "No validation errors"
+msgstr "Ei virheitä"
 
-msgid "Auto load tiles"
-msgstr "Lataa kuvapalat automaattisesti"
+msgid "Set WMS Bookmark"
+msgstr ""
 
-msgid "Show Errors"
+msgid ""
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Load Tile"
-msgstr "Lataa kuvapala"
+msgid "Correlate to GPX"
+msgstr "Sijoittele GPX-tiedoston mukaisesti"
 
-msgid "Show Tile Info"
-msgstr "Näytä kuvapalan tiedot"
+msgid "Invalid timezone"
+msgstr "Virheellinen aikavyöhyke"
 
-msgid "Load All Tiles"
-msgstr "Lataa kaikki näkyvät kuvapalat"
+msgid "Invalid offset"
+msgstr ""
 
-msgid "Load All Error Tiles"
-msgstr "Lataa epäonnistuneet kuvapalat"
+msgid "Correlate images with GPX track"
+msgstr "Kohdista kuvia GPX-jälkeen"
 
-msgid "Increase zoom"
+msgid "Try Again"
 msgstr ""
 
-msgid "Decrease zoom"
+msgid "No images could be matched!"
 msgstr ""
 
-msgid "Snap to tile size"
-msgstr "Täsmäytä mittakaava kuvapalojen resoluutioon"
-
-msgid "Flush Tile Cache"
-msgstr "Tyhjennä kuvapalojen välimuisti"
+msgid "GPX Files (*.gpx *.gpx.gz)"
+msgstr "GPX-tiedostot (*.gpx, *.gpx.gx)"
 
-msgid "zoom in to load any tiles"
+msgid "File {0} is loaded yet under the name \"{1}\""
 msgstr ""
 
-msgid "zoom in to load more tiles"
-msgstr ""
+msgid "Error while parsing {0}"
+msgstr "Virhe tulkittaessa {0}:aa"
 
-msgid "increase zoom level to see more detail"
-msgstr ""
+msgid "Could not read \"{0}\""
+msgstr "Ei voitu lukea \"{0}\":aa"
 
-msgid "No tiles at this zoom level"
+msgid ""
+"<html>Take a photo of your GPS receiver while it displays the "
+"time.<br>Display that photo here.<br>And then, simply capture the time you "
+"read on the photo and select a timezone<hr></html>"
 msgstr ""
+"<html>Ota kuva GPS-vastaanottimesi kellonäytöstä.<br>Valitse tähän ottamasi "
+"kuva.<br>Syötä kuvassa näkyvä kellonaika ja valitse aikavyöhyke.<hr></html>"
 
-msgid "Current zoom: {0}"
-msgstr ""
+msgid "Photo time (from exif):"
+msgstr "Kuvausaika (kuvan EXIF-tiedoista):"
 
-msgid "Display zoom: {0}"
-msgstr ""
+msgid "Gps time (read from the above photo): "
+msgstr "GPS:n aika (lue ylläolevasta kuvasta): "
 
-msgid "Pixel scale: {0}"
+msgid "I am in the timezone of: "
 msgstr ""
 
-msgid "Best zoom: {0}"
-msgstr ""
+msgid "No date"
+msgstr "Ei päivämäärää"
 
-msgid "Cache stats: {0}"
+msgid "Open another photo"
+msgstr "Avaa toinen kuva"
+
+msgid "Synchronize time from a photo of the GPS receiver"
 msgstr ""
 
-msgid "TMS layer ({0}), downloading in zoom {1}"
+msgid ""
+"Error while parsing the date.\n"
+"Please use the requested format"
 msgstr ""
+"Ajan muotoa ei ymmärretty.\n"
+"Ole hyvä ja syötä aika pyydetyssä muodossa"
 
-msgid "EPSG:4326 and Mercator projection are supported"
-msgstr "Tuetut projektiot ovat EPSG:4326 ja Mercator."
+msgid "Invalid date"
+msgstr "Virheellinen päivämäärä"
 
-msgid "Validation errors"
-msgstr "Tarkistusvirheet"
-
-msgid "No validation errors"
-msgstr "Ei virheitä"
-
-msgid "Blank Layer"
-msgstr "Tyhjä taso"
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "Download visible tiles"
-msgstr ""
-
-msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-"Yritit ladata liian suurta aluetta. Lähennä karttaa hiukan, tai vähennä "
-"resoluutiota"
-
-msgid "Change resolution"
-msgstr "Vaihda resoluutiota"
-
-msgid "Reload erroneous tiles"
-msgstr "Päivitä virheelliset kuvapalat"
-
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
-msgstr ""
-
-msgid "Automatic downloading"
-msgstr "Automaattinen lataus"
-
-msgid "Zoom to native resolution"
-msgstr ""
-
-msgid "Supported projections are: {0}"
-msgstr "Tuetut karttaprojektiot ovat: {0}"
-
-msgid "Unsupported WMS file version; found {0}, expected {1}"
-msgstr ""
-
-msgid "Save WMS file"
-msgstr ""
-
-msgid "Correlate to GPX"
-msgstr "Sijoittele GPX-tiedoston mukaisesti"
-
-msgid "GPX Files (*.gpx *.gpx.gz)"
-msgstr "GPX-tiedostot (*.gpx, *.gpx.gx)"
-
-msgid "File {0} is loaded yet under the name \"{1}\""
-msgstr ""
-
-msgid "Error while parsing {0}"
-msgstr "Virhe tulkittaessa {0}:aa"
-
-msgid "Could not read \"{0}\""
-msgstr "Ei voitu lukea \"{0}\":aa"
-
-msgid ""
-"<html>Take a photo of your GPS receiver while it displays the "
-"time.<br>Display that photo here.<br>And then, simply capture the time you "
-"read on the photo and select a timezone<hr></html>"
-msgstr ""
-"<html>Ota kuva GPS-vastaanottimesi kellonäytöstä.<br>Valitse tähän ottamasi "
-"kuva.<br>Syötä kuvassa näkyvä kellonaika ja valitse aikavyöhyke.<hr></html>"
-
-msgid "Photo time (from exif):"
-msgstr "Kuvausaika (kuvan EXIF-tiedoista):"
-
-msgid "Gps time (read from the above photo): "
-msgstr "GPS:n aika (lue ylläolevasta kuvasta): "
-
-msgid "I am in the timezone of: "
-msgstr ""
-
-msgid "No date"
-msgstr "Ei päivämäärää"
-
-msgid "Open another photo"
-msgstr "Avaa toinen kuva"
-
-msgid "Synchronize time from a photo of the GPS receiver"
-msgstr ""
-
-msgid ""
-"Error while parsing the date.\n"
-"Please use the requested format"
-msgstr ""
-"Ajan muotoa ei ymmärretty.\n"
-"Ole hyvä ja syötä aika pyydetyssä muodossa"
-
-msgid "Invalid date"
-msgstr "Virheellinen päivämäärä"
-
-msgid "<No GPX track loaded yet>"
-msgstr "<Ei ladattuja GPS-jälkiä>"
+msgid "<No GPX track loaded yet>"
+msgstr "<Ei ladattuja GPS-jälkiä>"
 
 msgid "GPX track: "
 msgstr "GPX-jälki: "
@@ -9502,24 +9699,9 @@ msgstr "Aikavyöhyke: "
 msgid "Offset:"
 msgstr ""
 
-msgid "Correlate images with GPX track"
-msgstr "Kohdista kuvia GPX-jälkeen"
-
 msgid "Correlate"
 msgstr ""
 
-msgid "Invalid timezone"
-msgstr "Virheellinen aikavyöhyke"
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9604,7 +9786,7 @@ msgid "Scanning directory {0}"
 msgstr "Tutkii hakemistoa {0}"
 
 msgid "Error while getting files from directory {0}\n"
-msgstr ""
+msgstr "Virhe haettaessa tiedostoja kansiosta {0}\n"
 
 msgid "One of the selected files was null"
 msgstr ""
@@ -9628,15 +9810,17 @@ msgstr[0] ""
 msgstr[1] ""
 
 msgid "Delete image file from disk"
-msgstr ""
+msgstr "Poista kuvatiedosto paikalliselta levyltä"
 
 msgid ""
 "<html><h3>Delete the file {0} from disk?<p>The image file will be "
 "permanently lost!</h3></html>"
 msgstr ""
+"<html><h3>Poistetaanko tiedosto {0}?<p>Kuvatiedosto poistetaan "
+"lopullisesti!</h3></html>"
 
 msgid "Image file could not be deleted."
-msgstr ""
+msgstr "Kuvatiedoston poistaminen ei onnistunut."
 
 msgid "No image"
 msgstr "Ei kuvaa"
@@ -9663,7 +9847,7 @@ msgid "Remove photo from layer"
 msgstr "Poista kuva tasosta"
 
 msgid "Delete File from disk"
-msgstr ""
+msgstr "Poista tiedosto levyltä"
 
 msgid "Copy image path"
 msgstr ""
@@ -9716,9 +9900,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr "JPEG-kuvat (*.jpg)"
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9783,9 +9964,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr "Yhden pyynnön enimmäisalue:"
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -10409,7 +10587,7 @@ msgid "Retrieving user info..."
 msgstr "Haetaan käyttäjätietoja..."
 
 msgid "Expert mode"
-msgstr ""
+msgstr "Asiantuntijatila"
 
 msgid "Close the preferences dialog and discard preference updates"
 msgstr "Sulje asetusikkuna ja hylkää asetuksiin tekemäsi muutokset"
@@ -10417,9 +10595,6 @@ msgstr "Sulje asetusikkuna ja hylkää asetuksiin tekemäsi muutokset"
 msgid "Save the preferences and close the dialog"
 msgstr "Tallenna asetukset ja sulje tämä ikkuna"
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 "JOSM on käynnistettävä uudelleen, jotta jotkin asetukset voidaan ottaa "
@@ -10428,6 +10603,9 @@ msgstr ""
 msgid "Would you like to restart now?"
 msgstr "Haluatko käynnistää JOSMin uudelleen nyt?"
 
+msgid "Download plugins"
+msgstr "Lataa liitännäisiä"
+
 msgid "Icon paths:"
 msgstr "Lista karttakohteiden kuvakkeita sisältävistä kansioista:"
 
@@ -10462,10 +10640,10 @@ msgid "active"
 msgstr "aktiivinen"
 
 msgid "Map paint style file (*.xml, *.mapcss, *.zip)"
-msgstr ""
+msgstr "Kartanpiirtotyylitiedosto (*.xml, *.mapcss, *.zip)"
 
 msgid "Preset definition file (*.xml, *.zip)"
-msgstr ""
+msgstr "Esiasetustiedosto (*.xml, *.zip)"
 
 msgid "Tag checker rule (*.validator.mapcss, *.zip)"
 msgstr ""
@@ -10592,6 +10770,7 @@ msgstr ""
 
 msgid "Append preferences from file to existing values"
 msgstr ""
+"Liitä asetustiedoston arvot nykyisten vastaavien asetusarvojen loppuun"
 
 msgid "Replace existing values"
 msgstr ""
@@ -11269,6 +11448,21 @@ msgstr "Näytä kuva-aineiston reunat"
 msgid "No bounding box was found for this layer."
 msgstr "Tasolle ei löytynyt tietoa kuva-aineiston reunoista."
 
+msgid "1. Enter getCapabilities URL"
+msgstr ""
+
+msgid "2. Enter name for this layer"
+msgstr ""
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr "{0} välimuistin koko: {1} tavua"
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr "kuvatason häivytys"
 
@@ -11287,6 +11481,18 @@ msgstr "Voimakas"
 msgid "Sharpen (requires layer re-add): "
 msgstr "Tarkennus (edellyttää tason lisäämistä uudelleen): "
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr "Kuvatasojen asetukset"
 
@@ -11308,6 +11514,9 @@ msgstr "Kuvatasojen tarjoajat"
 msgid "Offset bookmarks"
 msgstr "Tallennetut kuvatasojen siirrokset"
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -11350,9 +11559,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr "Taso"
 
@@ -11377,18 +11583,12 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
@@ -11396,19 +11596,10 @@ msgstr ""
 "Valittu taso ei tue mitään JOSMin karttaprojektiota,\n"
 "joten sitä ei voida käyttää. Tätä viestiä ei näytetä uudelleen."
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11481,7 +11672,7 @@ msgid "Remove the selected styles from the list of active styles"
 msgstr "Poista valitut kartanpiirtotyylit aktiivisten tyylien listasta"
 
 msgid "Edit the filename or URL for the selected active style"
-msgstr ""
+msgstr "Muokkaa valitun kartanpiirtotyylin tiedostopolkua tai URL:ia."
 
 msgid "Add the selected available styles to the list of active styles"
 msgstr ""
@@ -11566,7 +11757,7 @@ msgid "Active presets:"
 msgstr "Aktiiviset esivalintakokoelmat"
 
 msgid "Add a new preset by entering filename or URL"
-msgstr ""
+msgstr "Lisää esivalintatiedosto valitsemalla tiedosto tai URL."
 
 msgid "New preset entry:"
 msgstr ""
@@ -12022,7 +12213,7 @@ msgstr ""
 "käyttäjätunnuksellasi ja salasanallasi"
 
 msgid "Use OAuth"
-msgstr ""
+msgstr "Käytä OAuth-tunnistautumista"
 
 msgid "Select to use OAuth as authentication mechanism"
 msgstr "Valitse käyttääksesi OAuth-tunnistautumista"
@@ -12144,12 +12335,15 @@ msgid "No proxy"
 msgstr "Ei välityspalvelinta"
 
 msgid "Use standard system settings"
-msgstr ""
+msgstr "Käytä järjestelmän oletusasetuksia"
 
 msgid ""
 "Use standard system settings (disabled. Start JOSM with <tt>-"
 "Djava.net.useSystemProxies=true</tt> to enable)"
 msgstr ""
+"Käytä järjestelmän oletusasetuksia (ei käytettävissä. Käynnistä JOSM "
+"komentoriviparametrilla <tt>-Djava.net.useSystemProxies=true</tt> "
+"valitaksesi tämän)"
 
 msgid "Manually configure a HTTP proxy"
 msgstr "Määritä HTTP-välityspalvelimen asetukset itse"
@@ -12215,7 +12409,7 @@ msgid "Active rules:"
 msgstr ""
 
 msgid "Add a new rule by entering filename or URL"
-msgstr ""
+msgstr "Lisää tarkistussääntö valitsemalla tiedosto tai URL."
 
 msgid "New rule entry:"
 msgstr ""
@@ -12224,7 +12418,7 @@ msgid "Remove the selected rules from the list of active rules"
 msgstr ""
 
 msgid "Edit the filename or URL for the selected active rule"
-msgstr ""
+msgstr "Muokkaa valitun tarkistussäännön tiedostopolkua tai URL:ia."
 
 msgid "Add the selected available rules to the list of active rules"
 msgstr ""
@@ -12247,10 +12441,12 @@ msgid "Checks for errors on addresses"
 msgstr ""
 
 msgid "Tag combinations"
-msgstr ""
+msgstr "Tagien yhdistelmät"
 
 msgid "Checks for missing tag or suspicious combinations"
 msgstr ""
+"Etsii kohteista mahdollisesti puuttuvia tageja ja epäilyttäviä "
+"tagiyhdistelmiä."
 
 msgid "Deprecated features"
 msgstr "Vanhentuneet merkintätavat"
@@ -12265,7 +12461,7 @@ msgid "Checks for geometry errors"
 msgstr ""
 
 msgid "Checks for errors on highways"
-msgstr ""
+msgstr "Etsii virheitä kuljettavista teistä ja poluista."
 
 msgid "Multiple values"
 msgstr ""
@@ -12274,10 +12470,10 @@ msgid "Checks for wrong multiple values"
 msgstr ""
 
 msgid "Numeric values"
-msgstr ""
+msgstr "Lukuarvot"
 
 msgid "Checks for wrong numeric values"
-msgstr ""
+msgstr "Etsii virheellisiä lukuarvoja"
 
 msgid "Power"
 msgstr "Sähkön jakelu ja tuotto"
@@ -12289,22 +12485,22 @@ msgid "Religion"
 msgstr "Uskonto"
 
 msgid "Checks for errors on religious objects"
-msgstr ""
+msgstr "Etsii virheitä uskonnollisista karttakohteista"
 
 msgid "Checks for errors on relations"
-msgstr ""
+msgstr "Etsii mahdollisia virheitä relaatioista"
 
 msgid "Unnecessary tags"
-msgstr ""
+msgstr "Tarpeettomat tagit"
 
 msgid "Checks for unnecessary tags"
-msgstr ""
+msgstr "Etsii tarpeettomia tageja, ts. muutoin ilmeneviä tietoja."
 
 msgid "Wikipedia"
 msgstr ""
 
 msgid "Checks for wrong wikipedia tags"
-msgstr ""
+msgstr "Etsii virheellisiä wikipedia-tageja"
 
 msgid "Tag checker rules"
 msgstr ""
@@ -12385,6 +12581,15 @@ msgstr "Aseta esivalinnan tagit"
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+"Mitään ei ole valittuna, joten esivalintaa <i>{0}</i> ei voi asettaa!"
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr "Tämänhetkinen valinta ei sovellu esivalinnalle <i>{0}</i>."
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] "Muuta {0} objekti"
@@ -12406,7 +12611,7 @@ msgid "Unknown requisite: {0}"
 msgstr ""
 
 msgid "Illegal member expression: {0}"
-msgstr ""
+msgstr "Virheellinen jäseniin viittava hakulause: {0}"
 
 msgid "More information about this feature"
 msgstr "Lisää tietoja tästä ominaisuudesta"
@@ -12496,6 +12701,9 @@ msgstr "Etsi sopivaa esivalintaa nimistä ja kuvauksista"
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr "Esivalinnat"
+
 msgid "Search for objects by preset"
 msgstr "Etsi esivalintaa vastaavat kohteet"
 
@@ -12525,7 +12733,7 @@ msgid "Some of the key modifier listeners forgot to remove themselves: {0}"
 msgstr ""
 
 msgid "All files (*.*)"
-msgstr ""
+msgstr "Kaikki tiedostot (*.*)"
 
 msgid "Received error page:"
 msgstr ""
@@ -12652,9 +12860,11 @@ msgid ""
 "Failed to open file with extension ''{2}'' and namepart ''{3}'' in zip file "
 "''{0}''. Exception was: {1}"
 msgstr ""
+"Tiedoston avaaminen ei onnistunut pakatusta tiedostossa ''{0}''. Halutun "
+"tiedoston nimi oli ''{3}'' ja pääte ''{2}''. Poikkeus oli: {1}"
 
 msgid "Failed to rename file {0} to {1}."
-msgstr ""
+msgstr "Tiedoston {0} nimen vaihtaminen ei onnistunut uudelle nimelle {1}."
 
 msgid "Failed to load {0}, use cached file and retry next time: {1}"
 msgstr ""
@@ -12759,16 +12969,21 @@ msgid "Could not import ''{0}''."
 msgstr ""
 
 msgid "Could not import files."
-msgstr ""
+msgstr "Tiedostojen tuominen ei onnistunut."
 
 msgid "<html>Could not read file ''{0}''.<br>Error is:<br>{1}</html>"
 msgstr ""
+"<html>Tiedoston ''{0}'' lukeminen ei onnistunut.<br>Virhetieto:<br>{1}</html>"
 
 msgid "<html>Could not read files.<br>Error is:<br>{0}</html>"
 msgstr ""
+"<html>Tiedostojen lukeminen ei onnistunut.<br>Virhetieto:<br>{0}</html>"
 
 msgid "GeoJSON Files"
-msgstr ""
+msgstr "GeoJSON-tiedostot"
+
+msgid "Projected GeoJSON Files"
+msgstr "Projisoidut GeoJSON -tiedostot"
 
 msgid "Layer ''{0}'' not supported"
 msgstr ""
@@ -12830,11 +13045,15 @@ msgid ""
 "Error occurred while parsing gpx data for layer ''{0}''. Only a part of the "
 "file will be available."
 msgstr ""
+"Tulkittaessa gpx dataa tasolle ''{0}'' tapahtui virhe. Vain osa sisällöstä "
+"on käytössä."
 
 msgid ""
 "Error occurred while parsing gpx file ''{0}''. Only a part of the file will "
 "be available."
 msgstr ""
+"Tulkittaessa gpx-tiedostoa ''{0}'' tapahtui virhe. Vain osa sisällöstä on "
+"käytössä."
 
 msgid "Parse error: invalid document structure for GPX document."
 msgstr "Virhe luettaessa gpx-tiedostoa: tiedoston rakenne virheellinen."
@@ -12846,7 +13065,7 @@ msgid "Unknown mode {0}."
 msgstr ""
 
 msgid "Image Files"
-msgstr ""
+msgstr "Kuvatiedostot"
 
 msgid "folder"
 msgstr ""
@@ -12855,7 +13074,7 @@ msgid "Looking for image files"
 msgstr ""
 
 msgid "No image files found."
-msgstr ""
+msgstr "Kuvatiedostoja ei löytynyt."
 
 msgid "get number of unread messages"
 msgstr ""
@@ -13041,16 +13260,16 @@ msgid "Prolog of OsmChange document not written yet. Please write first."
 msgstr ""
 
 msgid "OsmChange File"
-msgstr ""
+msgstr "OsmChange -tiedostot"
 
 msgid "File ''{0}'' does not exist."
-msgstr ""
+msgstr "Tiedosto ''{0}'' ei ole olemassa."
 
 msgid "No data found in file {0}."
-msgstr ""
+msgstr "Tiedostosta {0} ei löytynyt dataa."
 
 msgid "Open OsmChange file"
-msgstr ""
+msgstr "Avaa OsmChange -tiedosto"
 
 msgid "Unsupported version: {0}"
 msgstr ""
@@ -13104,9 +13323,11 @@ msgid ""
 "<html>An error occurred while restoring backup file.<br>Error "
 "is:<br>{0}</html>"
 msgstr ""
+"<html>Virhe palautettaessa varmuuskopiota "
+"tiedostosta.<br>Virhetiedo:<br>{0}</html>"
 
 msgid "OSM Server Files gzip compressed"
-msgstr ""
+msgstr "OSM-palvelintiedostot gzip-pakattuina"
 
 msgid "Parsing OSM history data ..."
 msgstr ""
@@ -13121,10 +13342,10 @@ msgid "No data found for layer ''{0}''."
 msgstr ""
 
 msgid "No data found in file ''{0}''."
-msgstr ""
+msgstr "Tiedostosta ''{0}'' ei löytynyt dataa."
 
 msgid "Open OSM file"
-msgstr ""
+msgstr "Avaa OSM-tiedosto"
 
 msgid "Reading was canceled"
 msgstr ""
@@ -13315,10 +13536,13 @@ msgid "Unexpected id 0 for osm primitive found"
 msgstr "Havaittiin OSM-objektille odottamaton tunniste \"0\"."
 
 msgid "OSM Server Files zip compressed"
-msgstr ""
+msgstr "OSM-palvelintiedostot zip-pakattuina"
 
 msgid "WMS Files (*.wms)"
-msgstr ""
+msgstr "WMS-tiedostot (*.wms)"
+
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr "WMS tiedoston versiota ei tueta; luettiin arvo: {0}, odotettiin: {1}"
 
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
@@ -13511,7 +13735,7 @@ msgid "include"
 msgstr ""
 
 msgid "Include GPX data in the .joz session file."
-msgstr ""
+msgstr "Sisällytä GPX-tiedot istuntotiedostoon (tiedostopääte .joz)."
 
 msgid "No file association"
 msgstr ""
@@ -13537,7 +13761,7 @@ msgid ""
 msgstr ""
 
 msgid "Layer contains unsaved data - save to file."
-msgstr ""
+msgstr "Tasolla on tallentamattomia tietoja - tallenna tiedostoon."
 
 msgid "Layer does not contain unsaved data."
 msgstr ""
@@ -13546,7 +13770,7 @@ msgid "Link to a OSM data file on your local disk."
 msgstr ""
 
 msgid "Include OSM data in the .joz session file."
-msgstr ""
+msgstr "Sisällytä OSM-karttatiedot .joz -istuntotiedostoon."
 
 msgid "OSM data will be included in the session file."
 msgstr ""
@@ -13569,7 +13793,7 @@ msgid "Unexpected root element ''{0}'' in session file"
 msgstr ""
 
 msgid "Version ''{0}'' of session file is not supported. Expected: 0.1"
-msgstr ""
+msgstr "Istuntotiedoston versiota ''{0}'' ei tueta. Tuettu versio on 0.1"
 
 msgid "missing mandatory attribute ''index'' for element ''layer''"
 msgstr ""
@@ -13653,7 +13877,7 @@ msgid "replaced by new {0} plugin"
 msgstr ""
 
 msgid "no longer required"
-msgstr ""
+msgstr "ei enää tarpeellinen"
 
 msgid "The following plugin is no longer necessary and has been deactivated:"
 msgid_plural ""
@@ -13732,6 +13956,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr "Lataa ja käynnistä uudelleen"
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] "Lataa puuttuva liitännäinen ja käynnistä JOSM uudelleen"
+msgstr[1] "Lataa puuttuvat liitännäiset ja käynnistä JOSM uudelleen"
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] "Jatka ilman tarvittavaa liitännäistä"
+msgstr[1] "Jatka ilman tarvittavia liitännäisiä"
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13797,7 +14034,7 @@ msgid "Failed to find plugin {0}"
 msgstr ""
 
 msgid "Failed to download plugin information list"
-msgstr ""
+msgstr "Liitännäisten lisätietojen lataaminen ei onnistunut"
 
 msgid "Disable plugin"
 msgstr "Poista liitännäinen käytöstä"
@@ -13822,11 +14059,14 @@ msgstr ""
 msgid ""
 "Failed to install plugin ''{0}'' from temporary download file ''{1}''. {2}"
 msgstr ""
+"Liitännäisen ''{0}'' asennus epäonnistui väliaikaistiedostosta ''{1}''. {2}"
 
 msgid ""
 "Failed to install plugin ''{0}'' from temporary download file ''{1}''. "
 "Renaming failed."
 msgstr ""
+"Liitännäisen ''{0}'' asennus epäonnistui väliaikaistiedostosta ''{1}''. "
+"Nimen muuttaminen epäonnistui."
 
 msgid "Update plugin"
 msgstr ""
@@ -13871,10 +14111,10 @@ msgstr ""
 "asetuksista)"
 
 msgid "Invalid jar file ''{0}''"
-msgstr ""
+msgstr "Jar-tiedosto ''{0}'' ei ole kelvollinen."
 
 msgid "The plugin file ''{0}'' does not include a Manifest."
-msgstr ""
+msgstr "Liitännäisen tiedostossa ''{0}'' ei ole ns. manifestia."
 
 msgid "Invalid URL ''{0}'' in plugin {1}"
 msgstr ""
@@ -13911,9 +14151,11 @@ msgstr "Käsitellään tiedostoa \"{0}\""
 
 msgid "Failed to scan file ''{0}'' for plugin information. Skipping."
 msgstr ""
+"Liitännäisen tietojen haku tiedostosta ''{0}'' ei onnistunut. Tiedosto "
+"ohitetaan."
 
 msgid "Processing plugin files..."
-msgstr ""
+msgstr "Käsitellään liitännäisen tiedostoja..."
 
 msgid "Download plugin list..."
 msgstr "Ladataan listaa liitännäisistä..."
@@ -14302,7 +14544,7 @@ msgid "Failed to locate image ''{0}''"
 msgstr ""
 
 msgid "Failed to handle zip file ''{0}''. Exception was: {1}"
-msgstr ""
+msgstr "Pakatun tiedoston ''{0}'' käsittely epäonnistui. Virhetieto oli: {1}"
 
 msgid ""
 "Failed to access directory ''{0}'' for security reasons. Exception was: {1}"
@@ -14335,7 +14577,7 @@ msgid "URL does not contain valid {0}"
 msgstr ""
 
 msgid "reserved"
-msgstr ""
+msgstr "varattu"
 
 msgid "Outdated Java version"
 msgstr ""
@@ -14394,6 +14636,12 @@ msgid ""
 "next dialog.<br><br>If unsure, you can also click No then disable HTTPS "
 "support in Remote Control preferences."
 msgstr ""
+"JOSMin etähallintaan on asetettu HTTPS-tuki päälle.<br>Tämän toteuttamiseksi "
+"JOSMin luoma sertifikaatti pitää asentaa Windowsin "
+"juurivarmenteisiin.<br><br>Windows kysyy seuraavaksi lupaa varmenteen "
+"lisäämiseen.<br>Jos haluat HTTPS-tuen käyttöön, <b>valitse Kyllä</b> "
+"seuraavassa ikkunassa.<br><br>Jos et ole varma, voit valita Ei ja sitten "
+"poistaa HTTPS-tuen etähallinnan asetuksista."
 
 msgid "HTTPS support in Remote Control"
 msgstr ""
@@ -14472,7 +14720,7 @@ msgid ""
 msgstr ""
 
 msgid "Ignoring malformed geometry: {0}"
-msgstr ""
+msgstr "Ohitetaan virheellinen muoto: {0}"
 
 msgid "Failed to load XML schema."
 msgstr ""
@@ -14775,6 +15023,9 @@ msgstr "Päivitä"
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr "Näytä"
+
 msgid "Blue:"
 msgstr ""
 
@@ -14814,7 +15065,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -14826,9 +15077,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14937,6 +15185,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14950,12 +15201,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14992,10 +15249,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -15022,6 +15285,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -15046,7 +15312,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -15061,6 +15327,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -15073,12 +15342,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -15099,6 +15362,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -15131,10 +15397,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -15164,6 +15427,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -15179,154 +15448,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
+msgstr "ORT10LT (Liettua)"
+
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgstr "Geoportal 2: Ortofotomapa (ilmakuva) WMTS"
+
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
-msgstr "ORT10LT (Liettua)"
+msgid "Chorzów: Budynki (buildings)"
+msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Przemyśl: Budynki (buildings)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -15341,9 +15616,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -15473,6 +15757,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr "NLSC Open Data WMTS"
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -15488,7 +15787,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -15810,12 +16109,19 @@ msgid ""
 "Imports proprietary CSV files of the Columbus/Visiontac V-900 GPS logger "
 "into a GPX layer."
 msgstr ""
+"Lataa Columbus/Visiontac V-900 GPS -tallentimien omat CSV -tiedostot GPX-"
+"tasoksi."
 
 msgid ""
 "Implements a command line and enables to create your commands. See link for "
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15852,7 +16158,7 @@ msgid ""
 msgstr ""
 
 msgid "Shows the elevation profile and some statistical data of a GPX track."
-msgstr ""
+msgstr "Näyttää GPX-tiedoston korkeusprofiilin ja joitain tilastotietoja."
 
 msgid "Handling of French EPCIs (boundary=local_authority)"
 msgstr ""
@@ -15907,13 +16213,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-"Liitännäisen avulla JOSM tallentaa välimuistiin kuuluvat kuvatasojen palaset "
-"tietokantaan, eikä erillisinä tiedostoina suuriksi paisuviin kansioihin."
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15970,8 +16269,8 @@ msgstr ""
 "Virheraportteja voi luoda, kommentoida, sulkea ja avata uudelleen tällä "
 "liitännäisellä."
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
-msgstr ""
+msgid "Allows the user to work with pictures hosted at mapillary.com"
+msgstr "Mahdollistaa mapillary.com -palvelun valokuvien käyttämisen."
 
 msgid ""
 "Provide a measurement dialog and a layer to measure length and angle of "
@@ -15988,9 +16287,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -16046,6 +16342,9 @@ msgid ""
 "Write gps position info to the image file header. Run this feature from the "
 "right click menu of the image layer."
 msgstr ""
+"Lisää toiminnon gps-jäljestä johdettujen paikkatietojen tallentamiseen "
+"kuvatiedostojen otsakekenttiin. Toiminto löytyy kuvatason kontekstimenusta "
+"(oikea nappi hiirellä)."
 
 msgid "Make photos movable and position them on the map."
 msgstr ""
@@ -16065,6 +16364,8 @@ msgstr ""
 
 msgid "Read and write osmosis poly filter files"
 msgstr ""
+"Lataa ja tallenna osmosis-ohjelman monikulmiosuodatintiedostoja (osmosis "
+"poly filter)"
 
 msgid "Adds map printing to JOSM"
 msgstr "Lisää JOSMiin kartan tulostustoiminnon"
@@ -16076,6 +16377,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -16093,6 +16402,8 @@ msgid ""
 "Renders routes (bus, hiking trails, bicycle routes, ..). Route types must be "
 "defined in routes.xml file in plugin directory"
 msgstr ""
+"Piirtää reitit muokkaustilaan (bussi-, vaellus-, pyöräilyreitit jne.) "
+"Reittityypit määritellään liitännäisen kansioon routes.xml -tiedostoon."
 
 msgid "Provides routing capabilities."
 msgstr "Reitityksen laskentaan avatulla datatasolla."
@@ -16114,6 +16425,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -16196,10 +16510,7 @@ msgstr ""
 "päästä"
 
 msgid "Enables searching for waypoint imported from gpx file."
-msgstr ""
-
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
+msgstr "Hakutoiminto gpx-tiedostosta tuoduille reittipisteille."
 
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
@@ -16607,6 +16918,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -16631,10 +16950,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -16651,6 +16966,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -16667,11 +16986,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -16687,6 +17018,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -16699,6 +17034,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -16726,6 +17065,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr "Maksu"
 
@@ -17117,6 +17468,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr "Tie (ei asuinkatu)"
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr "Kohtaamispaikkoja"
 
@@ -17195,6 +17549,9 @@ msgstr ""
 "Erillinen turvallinen mekaaninen pysäytysväylä jarruvikaisille ajoneuvoille "
 "pitkien alamäkien rinnalla tai varrella."
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr "Tuntemattoman luokituksen tie"
 
@@ -17732,6 +18089,12 @@ msgstr "Nopeuskamera"
 msgid "Traffic Mirror"
 msgstr "Liikennepeili"
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17921,8 +18284,13 @@ msgstr "Pylväikkö"
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
-msgstr "Vesi"
+msgstr ""
 
 msgid "Drain"
 msgstr ""
@@ -17974,6 +18342,10 @@ msgstr "Tekojärvi"
 msgid "Covered Reservoir"
 msgstr "Katettu raakavesiallas"
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -18115,97 +18487,211 @@ msgstr ""
 msgid "public"
 msgstr ""
 
-msgid "Pier"
-msgstr "Laituri"
-
-msgid "Lock Gate"
-msgstr "Sulkuportti"
+msgid "Marine Fuel"
+msgstr ""
 
-msgid "Turning Point"
-msgstr "Kääntöpaikka"
+msgid "Agip"
+msgstr ""
 
-msgid "Slipway"
-msgstr "Veneenlaskupaikka"
+msgid "Aral"
+msgstr ""
 
-msgid "Boatyard"
+msgid "Avia"
 msgstr ""
 
-msgid "Dock"
-msgstr "Telakka"
+msgid "BP"
+msgstr ""
 
-msgid "Transport"
-msgstr "Liikenne"
+msgid "Chevron"
+msgstr ""
 
-msgid "Railway"
-msgstr "Rata"
+msgid "Citgo"
+msgstr ""
 
-msgid "Rail"
-msgstr "Rata"
+msgid "Eni"
+msgstr ""
 
-msgid "main"
+msgid "Esso"
 msgstr ""
 
-msgid "branch"
+msgid "Exxon"
 msgstr ""
 
-msgid "industrial"
-msgstr "teollisuus"
+msgid "Gulf"
+msgstr ""
 
-msgid "military"
-msgstr "armeija"
+msgid "Mobil"
+msgstr ""
 
-msgid "tourism"
-msgstr "turismi"
+msgid "OMV"
+msgstr ""
 
-msgid "freight"
+msgid "Petro-Canada"
 msgstr ""
 
-msgid "Narrow Gauge Rail"
-msgstr "Kapean raideleveyden rata"
+msgid "Pioneer"
+msgstr ""
 
-msgid "Monorail"
-msgstr "Yksiraiteinen rautatie"
+msgid "Q8"
+msgstr ""
 
-msgid "Preserved"
-msgstr "Säilytetty"
+msgid "Repsol"
+msgstr ""
 
-msgid "Light Rail"
-msgstr "Pikaraitiotie"
+msgid "Shell"
+msgstr ""
 
-msgid "Subway"
-msgstr "Metro"
+msgid "Socar"
+msgstr ""
 
-msgid "Tram"
-msgstr "Raitiotie"
+msgid "Statoil"
+msgstr ""
 
-msgid "Bus Guideway"
+msgid "Sunoco"
 msgstr ""
 
-msgid "Disused Rail"
-msgstr "Käytöstä poistettu rata"
+msgid "Tamoil"
+msgstr ""
 
-msgid "Abandoned Rail"
-msgstr "Purettu rata"
+msgid "Texaco"
+msgstr ""
 
-msgid "Level Crossing"
-msgstr "Tasoristeys"
+msgid "Total"
+msgstr ""
 
-msgid "Traffic lights"
+msgid "Independent"
 msgstr ""
 
-msgid "Barrier"
+msgid "Fuel types:"
 msgstr ""
 
-msgctxt "crossing:barrier"
-msgid "yes"
+msgid "Diesel"
 msgstr ""
 
-msgctxt "crossing:barrier"
-msgid "no"
+msgid "Bio Diesel"
 msgstr ""
 
-msgctxt "crossing:barrier"
-msgid "half"
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
+msgid "Pier"
+msgstr "Laituri"
+
+msgid "Lock Gate"
+msgstr "Sulkuportti"
+
+msgid "Turning Point"
+msgstr "Kääntöpaikka"
+
+msgid "Slipway"
+msgstr "Veneenlaskupaikka"
+
+msgid "Boatyard"
+msgstr ""
+
+msgid "Dock"
+msgstr "Telakka"
+
+msgid "Transport"
+msgstr "Liikenne"
+
+msgid "Railway"
+msgstr "Rata"
+
+msgid "Rail"
+msgstr "Rata"
+
+msgid "main"
+msgstr ""
+
+msgid "branch"
+msgstr ""
+
+msgid "industrial"
+msgstr "teollisuus"
+
+msgid "military"
+msgstr "armeija"
+
+msgid "tourism"
+msgstr "turismi"
+
+msgid "freight"
+msgstr ""
+
+msgid "Narrow Gauge Rail"
+msgstr "Kapean raideleveyden rata"
+
+msgid "Monorail"
+msgstr "Yksiraiteinen rautatie"
+
+msgid "Preserved"
+msgstr "Säilytetty"
+
+msgid "Light Rail"
+msgstr "Pikaraitiotie"
+
+msgid "Subway"
+msgstr "Metro"
+
+msgid "Tram"
+msgstr "Raitiotie"
+
+msgid "Bus Guideway"
+msgstr ""
+
+msgid "Disused Rail"
+msgstr "Käytöstä poistettu rata"
+
+msgid "Abandoned Rail"
+msgstr "Purettu rata"
+
+msgid "Level Crossing"
+msgstr "Tasoristeys"
+
+msgid "Traffic lights"
+msgstr ""
+
+msgid "Barrier"
+msgstr ""
+
+msgctxt "crossing:barrier"
+msgid "yes"
+msgstr ""
+
+msgctxt "crossing:barrier"
+msgid "no"
+msgstr ""
+
+msgctxt "crossing:barrier"
+msgid "half"
 msgstr ""
 
 msgctxt "crossing:barrier"
@@ -18231,6 +18717,9 @@ msgstr "Raidepuskin"
 msgid "Railway Switch"
 msgstr "Vaihde"
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr "Köysiradat"
 
@@ -18354,78 +18843,6 @@ msgstr "Pysäköinnin sisäänajo"
 msgid "Fuel"
 msgstr "Polttoaine"
 
-msgid "Agip"
-msgstr ""
-
-msgid "Aral"
-msgstr ""
-
-msgid "Avia"
-msgstr ""
-
-msgid "BP"
-msgstr ""
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr ""
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
 msgid "With shop"
 msgstr ""
 
@@ -18435,51 +18852,12 @@ msgstr ""
 msgid "kiosk"
 msgstr ""
 
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -18698,9 +19076,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -18719,6 +19094,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18921,6 +19299,12 @@ msgstr "Hotelli"
 msgid "Stars"
 msgstr "Tähdet"
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr "Motelli"
 
@@ -19011,6 +19395,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -19225,6 +19612,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr "Ratsastustoimintaa"
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -19712,8 +20102,8 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
-msgstr "Kierrätys"
+msgid "Recycling Container"
+msgstr "Kierrätyspiste"
 
 msgid "Batteries"
 msgstr "Paristot"
@@ -19721,21 +20111,48 @@ msgstr "Paristot"
 msgid "Cans"
 msgstr "Peltitölkit"
 
+msgid "Cardboard"
+msgstr ""
+
+msgid "Electrical Appliances"
+msgstr ""
+
 msgid "Glass"
 msgstr "Lasi"
 
+msgid "Glass Bottles"
+msgstr ""
+
+msgid "Green Waste"
+msgstr ""
+
 msgid "Paper"
 msgstr "Paperi"
 
+msgid "Plastic"
+msgstr ""
+
+msgid "Plastic Bottles"
+msgstr ""
+
+msgid "Plastic Packaging"
+msgstr ""
+
 msgid "Scrap Metal"
 msgstr "Romumetalli"
 
-msgid "container"
+msgid "Shoes"
+msgstr "Kenkäkauppa"
+
+msgid "Small Appliances"
 msgstr ""
 
-msgid "centre"
+msgid "Waste"
 msgstr ""
 
+msgid "Recycling Centre"
+msgstr "Kierrätysasema"
+
 msgid "Waste Basket/Trash Can"
 msgstr ""
 
@@ -19743,7 +20160,7 @@ msgid "Waste Disposal/Dumpster"
 msgstr ""
 
 msgid "Sanitary Dump Station"
-msgstr ""
+msgstr "Septitankin tyhjennyspiste"
 
 msgid "Suction pumpout"
 msgstr ""
@@ -19937,6 +20354,9 @@ msgstr "Jousiammunta"
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr "Kiipeily"
 
@@ -20112,12 +20532,18 @@ msgstr "Baseball"
 msgid "Basketball"
 msgstr "Koripallo"
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr "Lentopallo"
 
 msgid "Beach Volleyball"
 msgstr "Rantalentopallo"
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr "Golf"
 
@@ -20133,14 +20559,14 @@ msgstr ""
 msgid "Cricket"
 msgstr "Kriketti"
 
-msgid "Cricket Nets"
-msgstr "Krikettiverkko"
-
 msgid "Croquet"
 msgstr "Kroketti"
 
-msgid "Hockey"
-msgstr "Jääkiekko"
+msgid "Field Hockey"
+msgstr ""
+
+msgid "Ice Hockey"
+msgstr ""
 
 msgid "Pelota"
 msgstr "Pelota"
@@ -20163,9 +20589,6 @@ msgstr "Karting"
 msgid "Motocross"
 msgstr "Motocross"
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -20184,9 +20607,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -20259,6 +20679,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -21579,9 +22007,6 @@ msgstr "Viinikauppa"
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr "Kenkäkauppa"
-
 msgid "Outdoor"
 msgstr "Ulkoilu"
 
@@ -22594,12 +23019,12 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
-msgstr "Faksinumero"
-
 msgid "Email Address"
 msgstr "Sähköpostiosoite"
 
+msgid "Fax Number"
+msgstr "Faksinumero"
+
 msgid "Image"
 msgstr "Kuva"
 
@@ -23005,13 +23430,13 @@ msgid "Decreasing house numbers in addresses interpolation"
 msgstr ""
 
 msgid "{0} without {1}"
-msgstr ""
+msgstr "{0} ilman tagia {1}"
 
 msgid "{0} without {1} or {2}"
-msgstr ""
+msgstr "{0} ilman joko tagia {1} tai {2}"
 
 msgid "{0} without {1}, {2} or {3}"
-msgstr ""
+msgstr "{0} ilman jotain tageista {1}, {2} tai {3}"
 
 msgid "{0} together with {1}"
 msgstr "{0} samassa kohteessa {1}:n kanssa"
@@ -23023,7 +23448,10 @@ msgid "incomplete object: only {0} and {1}"
 msgstr ""
 
 msgid "{0} together with addr:*"
-msgstr ""
+msgstr "{0} samassa kohteessa jonkin addr:* -tagin kanssa"
+
+msgid "{0} together with {1} and conflicting values"
+msgstr "{0} samassa kohteessa {1}:n kanssa ja arvot ristiriidassa"
 
 msgid "{0} on suspicious object"
 msgstr "Avain {0} yllättävällä karttakohteella"
@@ -23049,6 +23477,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr "Sama arvo avaimilla {0} ja {1}"
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr "Sama arvo avaimilla {0}, {1} ja {2}"
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr "{0} ja {1} samassa kohteessa {2}:n kanssa ja arvot ristiriidassa"
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr "Epäilyttävä tagiyhdistelmä: {0} and {1}"
+
 msgid "{0}={1} is deprecated"
 msgstr "{0}={1} ei ole enää suositeltu merkintätapa"
 
@@ -23111,7 +23551,7 @@ msgstr ""
 
 msgid ""
 "{0} is not recommended. Use the Reverse Ways function from the Tools menu."
-msgstr ""
+msgstr "{0} käyttöä ei suositella. Käännä polun suunta (Työkalut-valikossa)."
 
 msgid "key with uncommon character"
 msgstr ""
@@ -23119,6 +23559,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -23209,8 +23652,19 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
+msgstr "epätavallinen {0} arvo"
+
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
 msgstr ""
+"{0}: oletusyksikkö kilometrejä; desimaalierotin on piste; jos merkkaat "
+"yksikön, arvon jälkeen väli ennen yksikköä"
 
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
@@ -23220,9 +23674,11 @@ msgstr ""
 
 msgid "unusual train track gauge; use mm with no separator"
 msgstr ""
+"epätavallinen muoto raideleveydelle; syötä millimetreinä ilman erotinmerkkejä"
 
 msgid "unusual incline; use percentages/degrees or up/down"
 msgstr ""
+"epätavallinen jyrkkyysmerkintä; käytä prosentteja, asteita, tai up/down"
 
 msgid "{0} must be a numeric value"
 msgstr ""
@@ -23249,10 +23705,10 @@ msgid "unknown jewish denomination"
 msgstr ""
 
 msgid "{0} is unnecessary"
-msgstr ""
+msgstr "{0} on tarpeeton"
 
 msgid "{0} is unnecessary for {1}"
-msgstr ""
+msgstr "{0} on tarpeeton kun {1}"
 
 msgid "{0}={1} makes no sense"
 msgstr ""
@@ -23286,10 +23742,10 @@ msgid "Use alternative turn restriction icon set"
 msgstr ""
 
 msgid "Columbus V-900 CSV Files"
-msgstr ""
+msgstr "Columbus V-900 CSV -tiedostot"
 
 msgid "Importing CSV file ''%s''..."
-msgstr ""
+msgstr "Tuodaan CSV-tiedostoa ''%s''..."
 
 msgid "Markers of "
 msgstr ""
@@ -23407,6 +23863,8 @@ msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
+"Virhe tulkittaessa gpx -tiedostoa {0}. Vain osa tiedoston sisällöstä tulee "
+"käyttöön."
 
 msgid "Invalid URL {0}"
 msgstr ""
@@ -23508,7 +23966,7 @@ msgid "Shows elevation profile"
 msgstr ""
 
 msgid "Elevation Profile"
-msgstr ""
+msgstr "Korkeusprofiili"
 
 msgid "Elevation Grid Layer (experimental!)"
 msgstr ""
@@ -23544,7 +24002,7 @@ msgid "Tracks"
 msgstr ""
 
 msgid "Elevation profile for track ''{0}''."
-msgstr ""
+msgstr "Reitin ''{0}'' korkeusprofiili."
 
 msgid "Elevation profile"
 msgstr ""
@@ -23588,6 +24046,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -23642,9 +24103,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23768,7 +24226,7 @@ msgstr ""
 "<b>kaikille</b> nykyisen tason kaduille."
 
 msgid "Convert to relation."
-msgstr ""
+msgstr "Muunna relaatioksi."
 
 msgid "Create relation between street and related addresses."
 msgstr "Tee relaatio kadun ja siihen liittyvien osoitteiden välille"
@@ -23872,10 +24330,10 @@ msgid "Open NanoLog panel"
 msgstr ""
 
 msgid "Open NanoLog file..."
-msgstr ""
+msgstr "Avaa NanoLog-tiedosto..."
 
 msgid "Could not read NanoLog file:"
-msgstr ""
+msgstr "NanoLog-tiedoston lukeminen ei onnistu:"
 
 msgid "OSM Recommendation"
 msgstr ""
@@ -24387,54 +24845,63 @@ msgid "Something went wrong!"
 msgstr ""
 
 msgid "Please file a bug report on the github project page under"
-msgstr ""
+msgstr "Ole hyvä ja täytä virheilmoitus projektin github-sivulla osoitteessa"
 
 msgid ""
 "Let us know what you did and what happend add the following text to the bug "
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -24443,10 +24910,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24562,12 +25041,14 @@ msgid ""
 "Error loading file.\n"
 "Probably an old version of the cache file."
 msgstr ""
+"Virhe ladattaessa tiedostoa.\n"
+"Luultavasti välimuistitiedoston versio on vanha."
 
 msgid "Lambert Zone {0} cache file (.{0})"
-msgstr ""
+msgstr "Lambert vyöhyke {0} välimuistitiedosto (.{0})"
 
 msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
-msgstr ""
+msgstr "Lambert CC9 vyöhyke {0} välimuistitiedosto (.{0})"
 
 msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
 msgstr ""
@@ -24830,7 +25311,7 @@ msgid "Enable this to use the tag \"add:street\" on nodes."
 msgstr ""
 
 msgid "Unexpected file extension. {0}"
-msgstr ""
+msgstr "Odottamaton tiedostopääte. {0}"
 
 msgid "Add \"source=...\" to elements?"
 msgstr ""
@@ -24839,7 +25320,7 @@ msgid "Downloading {0}"
 msgstr ""
 
 msgid "Contacting WMS Server..."
-msgstr ""
+msgstr "Yhdistetään WMS-palvelimeen..."
 
 msgid "Create buildings"
 msgstr ""
@@ -24862,7 +25343,7 @@ msgid "Create boundary"
 msgstr ""
 
 msgid "Contacting cadastre WMS ..."
-msgstr ""
+msgstr "Yhdistetään Cadastre WMS-palvelimeen..."
 
 msgid "Image already loaded"
 msgstr ""
@@ -24928,6 +25409,8 @@ msgstr ""
 msgid ""
 "Selected file {0} is not a cache file from this plugin (invalid extension)"
 msgstr ""
+"Valittu tiedosto {0} ei ole tämän liitännäisen välimuistitiedosto (väärä "
+"tiedostopääte)"
 
 msgid "The location {0} is already on screen. Cache not loaded."
 msgstr ""
@@ -24982,10 +25465,10 @@ msgid "Save image as..."
 msgstr ""
 
 msgid "PNG files (*.png)"
-msgstr ""
+msgstr "PNG-tiedostot (*.png)"
 
 msgid "GeoTiff files (*.tif)"
-msgstr ""
+msgstr "GeoTiff-tiedostot (*.tif)"
 
 msgid "Export image (only raster images)"
 msgstr ""
@@ -25054,6 +25537,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr "Tyhjä taso"
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25299,7 +25785,7 @@ msgid "Layer for editing GPX tracks"
 msgstr ""
 
 msgid "Convert to GPX layer with anonymised time"
-msgstr ""
+msgstr "Muuta GPX-tasoksi poistaen alkuperäiset aikatiedot"
 
 msgid "EditGpx"
 msgstr ""
@@ -26384,165 +26870,471 @@ msgstr "Suunta, josta etsitään maata"
 msgid "Tag ways as"
 msgstr "Anna poluille tagi"
 
-msgid "WMS Layer"
-msgstr "WMS-taso"
+msgid "WMS Layer"
+msgstr "WMS-taso"
+
+msgid "Maximum cache size (MB)"
+msgstr "Välimuistin maksimikoko (MB)"
+
+msgid "Maximum cache age (days)"
+msgstr "Välimuistin enimmäisikä (päivää)"
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr "Lakevalker-liitännäisen asetukset"
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr "Liitännäinen vesialueiden rajaamiseen Landsat-kuvista."
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+"Suurin sallittu yhteyksien määrä kussakin luodussa polussa. Oletusarvo on "
+"250."
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+"Luotavien pisteiden enimmäismäärä ennen keskeyttämistä (ennen "
+"yksinkertaistusta). Oletusarvo 50000"
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+"Harmaan enimmäisarvo, joka tulkitaan vetenä (Landsat IR-1 -datassa). Arvo on "
+"väliltä 0-255, oletus 90."
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+"Douglas-Peucker-yksinkertaistamisen tarkkuus asteina.<br>Pienemmät arvot "
+"antavat enemmän pisteitä ja tarkempia jälkiä. Oletus on 0.0003."
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr "Landsat-kuvien tarkkuus, pikselit/aste. Oletus on 4000."
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr "Landsat-kuvan koko pikseleinä. Oletus on 2000."
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr "Mistä suunnasta etsitään maata. Oletus on itä."
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+"Merkitse polut vetenä (water), rantaviivana (coastline) tai ei minään "
+"(nothing). Oletus on vesi (water)."
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr "Käytettävä WMS-taso. Oletus on IR1."
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr "Jokaisen välimuistihakemiston enimmäiskoko. Oletus on 300 MB."
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr "Välimuistin enimmäisikä päivissä. Oletus on 100."
+
+msgid "Data source text. Default is Landsat."
+msgstr "Tietolähteen nimi. Oletus on Landsat."
+
+msgid "Downloading image tile..."
+msgstr "Ladataan kuvaa..."
+
+msgid "Could not acquire image"
+msgstr "Kuvaa ei voitu ladata"
+
+msgid "Connection Failed"
+msgstr "Yhteys epäonnistui"
+
+msgid "Not connected"
+msgstr ""
+
+msgid "Connecting"
+msgstr "Yhdistetään"
+
+msgid "Connected"
+msgstr "Yhdistetty"
+
+msgid "no name"
+msgstr ""
+
+msgid "Live GPS"
+msgstr ""
+
+msgid "Show GPS data."
+msgstr ""
+
+msgid "Status"
+msgstr "Tila"
+
+msgid "Way Info"
+msgstr ""
+
+msgid "Speed"
+msgstr "Nopeus"
+
+msgid "Course"
+msgstr "Kurssi"
+
+msgid "LiveGPS layer"
+msgstr "LiveGPS-taso"
+
+msgid "Capture GPS Track"
+msgstr ""
+
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgstr ""
+"Kytkeydy gpsd-palvelimeen ja näytä nykyinen sijainti LiveGPS-tasossa."
+
+msgid "Center Once"
+msgstr ""
+
+msgid "Center the LiveGPS layer to current position."
+msgstr "Keskitä LiveGPS-taso nykyiseen sijaintiin."
+
+msgid "Auto-Center"
+msgstr ""
+
+msgid "Continuously center the LiveGPS layer to current position."
+msgstr "Keskitä LiveGPS-taso jatkuvasti nykyiseen sijaintiin."
+
+msgid "Open MapDust"
+msgstr ""
+
+msgid "MapDust bug reports"
+msgstr ""
+
+msgid "Activates the MapDust bug reporter plugin"
+msgstr ""
+
+msgid "Missing input data"
+msgstr ""
+
+msgid "Mapillary Images"
+msgstr "Mapillary-kuvat"
+
+msgid "Mapillary layer"
+msgstr "Mapillary-taso"
+
+msgid "Total images:"
+msgstr "Kuvia yhteensä:"
+
+msgid "images"
+msgstr "kuvaa"
+
+msgid "Mapillary"
+msgstr "Mapillary"
+
+msgid "Create Mapillary layer"
+msgstr "Luo Mapillary-taso"
+
+msgid "Start Mapillary layer"
+msgstr ""
+
+msgid "Download Mapillary images in current view"
+msgstr "Lataa kuvat näkymän alueelta Mapillaryn palvelimelta."
+
+msgid "Export pictures"
+msgstr ""
+
+msgid "Export Mapillary pictures"
+msgstr ""
+
+msgid "Export images"
+msgstr ""
+
+msgid "Import pictures"
+msgstr ""
+
+msgid "Import local pictures"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer"
+msgstr ""
+
+msgid "Select pictures"
+msgstr ""
+
+msgid "Import pictures into sequence"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer in a sequence"
+msgstr ""
+
+msgid "Join mode"
+msgstr ""
+
+msgid "Join/unjoin pictures"
+msgstr ""
+
+msgid "Join Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures"
+msgstr ""
+
+msgid "Upload Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures."
+msgstr ""
+
+msgid "Walk mode"
+msgstr ""
+
+msgid "Start walk mode"
+msgstr ""
+
+msgid "Zoom to selected image"
+msgstr ""
+
+msgid "Zoom to the currently selected Mapillary image"
+msgstr ""
+
+msgid "Uploaded {0} images"
+msgstr ""
+
+msgid "Approve upload on the website"
+msgstr ""
+
+msgid "View in website"
+msgstr ""
+
+msgid "Copy key"
+msgstr ""
+
+msgid "Copy key tag"
+msgstr ""
+
+msgid "Edit on website"
+msgstr ""
+
+msgid "Export all images"
+msgstr ""
+
+msgid "Export selected sequence"
+msgstr ""
+
+msgid "Export selected images"
+msgstr ""
+
+msgid "Rewrite imported images"
+msgstr ""
+
+msgid "Select a folder"
+msgstr ""
+
+msgid "Explore"
+msgstr ""
+
+msgid "Select a directory"
+msgstr ""
+
+msgid "Speed limit"
+msgstr ""
+
+msgid "Give way"
+msgstr ""
+
+msgid "No entry"
+msgstr ""
+
+msgid "Intersection danger"
+msgstr ""
+
+msgid "Mandatory direction (any)"
+msgstr ""
+
+msgid "No turn"
+msgstr ""
+
+msgid "Uneven road"
+msgstr ""
+
+msgid "No parking"
+msgstr ""
+
+msgid "No overtaking"
+msgstr ""
+
+msgid "Pedestrian crossing"
+msgstr ""
+
+msgid "Years"
+msgstr ""
 
-msgid "Maximum cache size (MB)"
-msgstr "Välimuistin maksimikoko (MB)"
+msgid "Months"
+msgstr ""
 
-msgid "Maximum cache age (days)"
-msgstr "Välimuistin enimmäisikä (päivää)"
+msgid "Days"
+msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
-msgstr "Lakevalker-liitännäisen asetukset"
+msgid "Open Mapillary filter dialog"
+msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
-msgstr "Liitännäinen vesialueiden rajaamiseen Landsat-kuvista."
+msgid "Downloaded images"
+msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
-"Suurin sallittu yhteyksien määrä kussakin luodussa polussa. Oletusarvo on "
-"250."
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
-"Luotavien pisteiden enimmäismäärä ennen keskeyttämistä (ennen "
-"yksinkertaistusta). Oletusarvo 50000"
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
-"Harmaan enimmäisarvo, joka tulkitaan vetenä (Landsat IR-1 -datassa). Arvo on "
-"väliltä 0-255, oletus 90."
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
-"Douglas-Peucker-yksinkertaistamisen tarkkuus asteina.<br>Pienemmät arvot "
-"antavat enemmän pisteitä ja tarkempia jälkiä. Oletus on 0.0003."
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
-msgstr "Landsat-kuvien tarkkuus, pikselit/aste. Oletus on 4000."
+msgid "Open Mapillary window"
+msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
-msgstr "Landsat-kuvan koko pikseleinä. Oletus on 2000."
+msgid "Mapillary dialog"
+msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
-msgstr "Mistä suunnasta etsitään maata. Oletus on itä."
+msgid "Shows the next picture in the sequence"
+msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
-"Merkitse polut vetenä (water), rantaviivana (coastline) tai ei minään "
-"(nothing). Oletus on vesi (water)."
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
-msgstr "Käytettävä WMS-taso. Oletus on IR1."
+msgid "Shows the previous picture in the sequence"
+msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
-msgstr "Jokaisen välimuistihakemiston enimmäiskoko. Oletus on 300 MB."
+msgid "Jump to red"
+msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
-msgstr "Välimuistin enimmäisikä päivissä. Oletus on 100."
+msgid "Jumps to the picture at the other side of the red line"
+msgstr ""
 
-msgid "Data source text. Default is Landsat."
-msgstr "Tietolähteen nimi. Oletus on Landsat."
+msgid "Jump to blue"
+msgstr ""
 
-msgid "Downloading image tile..."
-msgstr "Ladataan kuvaa..."
+msgid "Jumps to the picture at the other side of the blue line"
+msgstr ""
 
-msgid "Could not acquire image"
-msgstr "Kuvaa ei voitu ladata"
+msgid "Stops the walk."
+msgstr ""
 
-msgid "Connection Failed"
-msgstr "Yhteys epäonnistui"
+msgid "Play"
+msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
-msgstr "Yhdistetään"
+msgid "Pause"
+msgstr ""
 
-msgid "Connected"
-msgstr "Yhdistetty"
+msgid "Pauses the walk."
+msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
-msgstr "Tila"
+msgid "Move to picture''s location with next/previous buttons"
+msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
-msgstr "Nopeus"
+msgid "Upload selected sequence"
+msgstr ""
 
-msgid "Course"
-msgstr "Kurssi"
+msgid "Delete after upload"
+msgstr ""
 
-msgid "LiveGPS layer"
-msgstr "LiveGPS-taso"
+msgid "Wait for full quality pictures"
+msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
-"Kytkeydy gpsd-palvelimeen ja näytä nykyinen sijainti LiveGPS-tasossa."
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
-msgstr "Keskitä LiveGPS-taso nykyiseen sijaintiin."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Auto-Center"
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
-msgstr "Keskitä LiveGPS-taso jatkuvasti nykyiseen sijaintiin."
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
+msgstr ""
 
-msgid "Open MapDust"
+msgid "Downloading"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid "Select mode"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "No images found"
 msgstr ""
 
-msgid "Export"
+msgid "Finished upload"
+msgstr ""
+
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -26563,6 +27355,9 @@ msgstr "Valinnan pituus"
 msgid "Selection Area"
 msgstr "Valinnan alue"
 
+msgid "Selection Radius"
+msgstr "Valinnan säde"
+
 msgid "Angle"
 msgstr "Kulma"
 
@@ -26625,47 +27420,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -26686,10 +27440,10 @@ msgstr ""
 msgid ""
 "Found sensitive data that is still saved in JOSM''s preference file (plain "
 "text)."
-msgstr ""
+msgstr "Arkaluontoista dataa löytyi selkokielisenä JOSM:n asetustiedostosta."
 
 msgid "Transfer to password manager and remove from preference file"
-msgstr ""
+msgstr "Siirrä salasanojen hallintaan ja poista asetustiedostosta"
 
 msgid "No, just keep it"
 msgstr ""
@@ -26758,6 +27512,8 @@ msgid ""
 "<br><strong>Warning:</strong> There may be sensitive data left in your "
 "preference file. ({0})"
 msgstr ""
+"<br><strong>Varoitus:</strong> Asetustiedostossa voi olla arkaluontoisia "
+"tietoja. ({0})"
 
 msgid "Save user and password ({0})"
 msgstr ""
@@ -26898,6 +27654,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr "Työkalut"
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -26959,22 +27718,22 @@ msgid "Downloading data..."
 msgstr ""
 
 msgid "OpenData XML files"
-msgstr ""
+msgstr "OpenData XML -tiedostot"
 
 msgid "File to load"
-msgstr ""
+msgstr "Ladattava tiedosto"
 
 msgid "7Zip Files"
-msgstr ""
+msgstr "7Zip-tiedostot"
 
 msgid "Reading 7Zip file..."
-msgstr ""
+msgstr "Luetaan 7Zip-tiedostoa..."
 
 msgid "Zip Files"
-msgstr ""
+msgstr "Zip-tiedostot"
 
 msgid "Reading Zip file..."
-msgstr ""
+msgstr "Luetaan Zip-tiedosta..."
 
 msgid "Cannot transform to WGS84"
 msgstr ""
@@ -26990,16 +27749,16 @@ msgid "Try lenient method"
 msgstr ""
 
 msgid "GML files"
-msgstr ""
+msgstr "GML-tiedostot"
 
 msgid "KML/KMZ files"
-msgstr ""
+msgstr "KML/KMZ-tiedostot"
 
 msgid "MapInfo files"
-msgstr ""
+msgstr "MapInfo-tiedostot"
 
 msgid "Shapefiles"
-msgstr ""
+msgstr "Shapefile-tiedostot"
 
 msgid ""
 "Unable to detect Coordinate Reference System.\n"
@@ -27013,25 +27772,27 @@ msgid "Unable to detect CRS !"
 msgstr ""
 
 msgid "Unable to find a data store for file {0}"
-msgstr ""
+msgstr "Tiedoston {0} tietovarantoa ei löydy"
 
 msgid "Loading shapefile ({0} features)"
 msgstr ""
 
 msgid "CSV files"
-msgstr ""
+msgstr "CSV-tiedostot"
 
 msgid "ODS files"
-msgstr ""
+msgstr "ODS-tiedostot"
 
 msgid "No valid coordinates have been found."
 msgstr ""
 
 msgid "Invalid file. Bad length on line {0}. Expected {1} columns, got {2}."
 msgstr ""
+"Virheellinen tiedosto. Rivillä {0} on väärä pituus. Odotettiin {1} "
+"saraketta, luettiin {2}."
 
 msgid "XLS files"
-msgstr ""
+msgstr "XLS-tiedostot"
 
 msgid "View OSM Wiki page"
 msgstr ""
@@ -27241,7 +28002,7 @@ msgid "Unknown file extension: {0}"
 msgstr "Tuntematon tiedostopääte: {0}"
 
 msgid "Parsing file \"{0}\" failed"
-msgstr ""
+msgstr "Tiedoston \"{0}\" tulkitseminen epäonnistui"
 
 msgid "Osmarender"
 msgstr ""
@@ -27296,7 +28057,7 @@ msgid "Prefs"
 msgstr ""
 
 msgid "Load file..."
-msgstr ""
+msgstr "Avaa tiedosto..."
 
 msgid "Place"
 msgstr ""
@@ -27377,7 +28138,7 @@ msgid "Loading..."
 msgstr ""
 
 msgid "PDF file preview"
-msgstr ""
+msgstr "PDF esikatselu"
 
 msgid "Loaded"
 msgstr ""
@@ -27389,10 +28150,10 @@ msgid "Please select exactly one node."
 msgstr ""
 
 msgid "PDF files"
-msgstr ""
+msgstr "PDF-tiedostot"
 
 msgid "OSM files"
-msgstr ""
+msgstr "OSM-tiedostot"
 
 msgid "Preparing"
 msgstr ""
@@ -27407,10 +28168,10 @@ msgid "Could not parse max path count"
 msgstr ""
 
 msgid "Parsing file"
-msgstr ""
+msgstr "Tulkitaan tiedostoa"
 
 msgid "File not found."
-msgstr ""
+msgstr "Tiedostoa ei löydy."
 
 msgid "Error while parsing: {0}"
 msgstr ""
@@ -27461,7 +28222,7 @@ msgid " "
 msgstr ""
 
 msgid "Import PDF file"
-msgstr ""
+msgstr "Tuo PDF-tiedosto"
 
 msgid "Import PDF file."
 msgstr ""
@@ -27479,7 +28240,7 @@ msgid "Encrypted documents not supported."
 msgstr ""
 
 msgid "The PDF file must have exactly one page."
-msgstr ""
+msgstr "PDF-tiedostossa saa olla ainoastaan yksi sivu."
 
 msgid "Read error: "
 msgstr ""
@@ -27492,13 +28253,13 @@ msgstr ""
 
 msgid ""
 "Write position information into the exif header of the following files:"
-msgstr ""
+msgstr "Sijaintitieto kirjoitetaan seuraavien tiedostojen EXIF-otsakkeisiin:"
 
 msgid "settings"
 msgstr ""
 
 msgid "keep backup files"
-msgstr ""
+msgstr "säilytä varakopiot tiedostoista"
 
 msgid "change file modification time:"
 msgstr ""
@@ -27522,19 +28283,19 @@ msgid "Could not write mtime."
 msgstr ""
 
 msgid "File could not be deleted!"
-msgstr ""
+msgstr "Tiedostoa ei voitu poistaa!"
 
 msgid "Could not rename file!"
-msgstr ""
+msgstr "Tiedostoa ei voitu nimetä uudelleen!"
 
 msgid "Could not rename file {0} to {1}!"
-msgstr ""
+msgstr "Tiedostonimen {0} vaihtaminen nimeksi {1} ei onnistunut."
 
 msgid "<html><h3>There are old backup files in the image directory!</h3>"
-msgstr ""
+msgstr "<html><h3>Kuvahakemistossa on vanhempia varakopioita!</h3>"
 
 msgid "Override old backup files?"
-msgstr ""
+msgstr "Korvataanko vanhemmat varakopiotiedostot uusilla?"
 
 msgid "Keep old backups and continue"
 msgstr ""
@@ -27543,7 +28304,7 @@ msgid "Override"
 msgstr ""
 
 msgid "Could not delete temporary file!"
-msgstr ""
+msgstr "Väliaikaistiedoston poistaminen ei onnistunut."
 
 msgid "Test failed: Could not read mtime."
 msgstr ""
@@ -27581,7 +28342,7 @@ msgid "Loads calibration data from a file"
 msgstr "Lataa kuvan kalibrointitiedot tiedostosta"
 
 msgid "Loading file failed: {0}"
-msgstr ""
+msgstr "Tiedoston lataaminen epäonnistui: {0}"
 
 msgid "Load World File Calibration..."
 msgstr ""
@@ -27605,13 +28366,13 @@ msgid "Saves calibration data to a file"
 msgstr "Tallentaa kuvatason kalibrointitiedot tiedostoon"
 
 msgid "Saving file failed: {0}"
-msgstr ""
+msgstr "Tiedoston tallentaminen epäonnistui: {0}"
 
 msgid "New picture layer from clipboard"
 msgstr "Uusi kuvataso leikepöydältä"
 
 msgid "Supported image files, *.zip, *.kml"
-msgstr ""
+msgstr "Tuetut kuvatiedostot, *.zip, *.kml"
 
 msgid "New picture layer from file..."
 msgstr "Uusi kuvataso tiedostosta..."
@@ -27723,6 +28484,7 @@ msgstr ""
 
 msgid "Warning: failed to handle zip file ''{0}''. Exception was: {1}"
 msgstr ""
+"Pakatun zip-tiedoston''{0}'' käsittely ei onnistunut. Virhetieto oli: {1}"
 
 msgid "A calibration file associated to the picture file was found: {0}\n"
 msgstr ""
@@ -27777,13 +28539,13 @@ msgid "Download Osmosis poly"
 msgstr ""
 
 msgid "Reading polygon filter file..."
-msgstr ""
+msgstr "Luetaan monikulmiosuodatintiedostoa..."
 
 msgid "Error reading poly file: {0}"
-msgstr ""
+msgstr "Virhe luettaessa tiedostoa: {0}"
 
 msgid "The file must begin with a polygon name"
-msgstr ""
+msgstr "Sisällön pitää alkaa monikulmion nimellä"
 
 msgid "There are less than 2 points in an area"
 msgstr ""
@@ -27801,7 +28563,7 @@ msgid "{0} points were outside world bounds and were moved"
 msgstr ""
 
 msgid "Osmosis polygon filter files"
-msgstr ""
+msgstr "Osmosis monikulmiosuodatin -tiedostot"
 
 msgid "Print..."
 msgstr ""
@@ -27888,10 +28650,10 @@ msgid "Create Stops from a GTFS file"
 msgstr ""
 
 msgid "Select GTFS file (stops.txt)"
-msgstr ""
+msgstr "Valitse GTFS-tiedosto (stops.txt)"
 
 msgid "File \"{0}\" does not exist"
-msgstr ""
+msgstr "Tiedosto \"{0}\" ei ole olemassa"
 
 msgid "IOException \"{0}\" occurred"
 msgstr ""
@@ -27905,7 +28667,7 @@ msgid "No data found"
 msgstr ""
 
 msgid "The GTFS file was empty."
-msgstr ""
+msgstr "GTFS-tiedosto oli tyhjä."
 
 msgid "Create Stops from GTFS"
 msgstr ""
@@ -28061,7 +28823,7 @@ msgid "Create Stops from a GPX file"
 msgstr ""
 
 msgid "Select GPX file"
-msgstr ""
+msgstr "Valitse GPX-tiedosto"
 
 msgid "The GPX file contained no tracks or waypoints."
 msgstr "GPX-tiedostosta ei löytynyt yhtään jälkeä eikä reittipistettä."
@@ -28070,7 +28832,7 @@ msgid "Create Stops from GPX"
 msgstr ""
 
 msgid "Tracks in this GPX file:"
-msgstr ""
+msgstr "GPX-tiedostosta löytyvät jäljet:"
 
 msgid "Detach"
 msgstr ""
@@ -28082,6 +28844,8 @@ msgid ""
 "The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
 "has trackpoints."
 msgstr ""
+"GPX-tiedostossa ei ole kelvollisia jälkipisteitä. Valitse GPX-tiedosto jossa "
+"on jälkipisteitä."
 
 msgid "GPX File Trouble"
 msgstr ""
@@ -28125,6 +28889,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -28296,6 +29081,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -28305,6 +29093,9 @@ msgstr ""
 msgid "History reverter"
 msgstr "Historian palautus ennalleen"
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr "Valmistellaan historiatietoja..."
 
@@ -28486,6 +29277,9 @@ msgstr "Uusi arvo {0}:lle"
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -28664,6 +29458,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -28673,6 +29500,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -28910,9 +29740,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -30456,9 +31283,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr "Valitse tie"
-
 msgid "Add names from Wikipedia"
 msgstr "Lisää nimen puuttuvat kieliversiot Wikipediasta"
 
diff --git a/i18n/po/fil.po b/i18n/po/fil.po
index d816521..2796c00 100644
--- a/i18n/po/fil.po
+++ b/i18n/po/fil.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2011-06-19 14:15+0000\n"
 "Last-Translator: Anthony Balico <Unknown>\n"
 "Language-Team: Filipino <fil at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 05:05+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 05:10+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: fil\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -97,19 +97,16 @@ msgstr ""
 msgid "Updating user interface"
 msgstr ""
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
 msgstr ""
 
 msgid "Warning"
 msgstr "Babala"
 
-msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
+msgid "Ignoring malformed file URL: \"{0}\""
 msgstr ""
 
-msgid "Ignoring malformed URL: \"{0}\""
+msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 
 msgid ""
@@ -444,6 +441,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
 
@@ -1029,6 +1029,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr ""
 
@@ -1945,15 +1969,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr ""
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -1975,6 +1990,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2093,9 +2117,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2309,9 +2330,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr ""
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2525,6 +2552,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2567,6 +2598,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3017,6 +3051,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3134,10 +3186,44 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3327,6 +3413,12 @@ msgstr ""
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3354,13 +3446,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -3976,9 +4068,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -3988,12 +4077,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4174,13 +4275,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4378,6 +4479,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4591,43 +4693,54 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
 msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
 msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
 msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
 msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
-msgid "Menu: {0}"
+msgctxt "menu"
+msgid "Help"
 msgstr ""
 
-msgid "Save and load the current session (list of layers, etc.)"
+msgid "Menu: {0}"
 msgstr ""
 
 msgid "Edit toolbar"
@@ -4651,6 +4764,7 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
 msgstr ""
 
@@ -4773,58 +4887,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr ""
-
-msgid "Pos."
+msgid " ({0})"
 msgstr ""
 
-msgid "Role"
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5253,6 +5325,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr ""
+
 msgid "Primitive"
 msgstr ""
 
@@ -5493,6 +5568,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5639,6 +5717,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5742,7 +5855,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5870,6 +5983,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5879,17 +5997,48 @@ msgstr ""
 msgid "unknown"
 msgstr ""
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -5935,6 +6084,12 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr ""
 
@@ -6064,10 +6219,16 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
-msgid "List of notes"
+msgid "Mini map"
 msgstr ""
 
-msgid "Add comment"
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
+msgid "List of notes"
+msgstr ""
+
+msgid "Add comment"
 msgstr ""
 
 msgid "Comment"
@@ -6122,10 +6283,15 @@ msgstr ""
 msgid "Enter the ID of the object that should be downloaded"
 msgstr ""
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6154,6 +6320,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr ""
 
+msgid "Selection"
+msgstr ""
+
 msgid "Open a selection list window."
 msgstr ""
 
@@ -6244,6 +6413,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -6838,6 +7013,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6929,14 +7110,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7109,6 +7289,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7644,6 +7830,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8489,6 +8678,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr ""
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr ""
 
@@ -8542,6 +8831,9 @@ msgstr ""
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8562,7 +8854,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8645,80 +8937,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr ""
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-
-msgid "Auto Zoom"
-msgstr ""
-
-msgid "Auto load tiles"
-msgstr ""
-
-msgid "Show Errors"
-msgstr ""
-
-msgid "Load Tile"
-msgstr ""
-
-msgid "Show Tile Info"
-msgstr ""
-
-msgid "Load All Tiles"
-msgstr ""
-
-msgid "Load All Error Tiles"
-msgstr ""
-
-msgid "Increase zoom"
-msgstr ""
-
-msgid "Decrease zoom"
-msgstr ""
-
-msgid "Snap to tile size"
-msgstr ""
-
-msgid "Flush Tile Cache"
-msgstr ""
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
@@ -8728,56 +8946,30 @@ msgstr ""
 msgid "No validation errors"
 msgstr ""
 
-msgid "Blank Layer"
-msgstr ""
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "Download visible tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-
-msgid "Change resolution"
-msgstr ""
-
-msgid "Reload erroneous tiles"
-msgstr ""
-
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Automatic downloading"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Zoom to native resolution"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Supported projections are: {0}"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Save WMS file"
+msgid "Try Again"
 msgstr ""
 
-msgid "Correlate to GPX"
+msgid "No images could be matched!"
 msgstr ""
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
@@ -8864,24 +9056,9 @@ msgstr ""
 msgid "Offset:"
 msgstr ""
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
 msgid "Correlate"
 msgstr ""
 
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9075,9 +9252,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr ""
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9140,9 +9314,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9768,15 +9939,15 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr ""
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -10569,13 +10740,28 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
-msgid "imagery fade"
+msgid "1. Enter getCapabilities URL"
 msgstr ""
 
-msgid "Fade Color: "
+msgid "2. Enter name for this layer"
 msgstr ""
 
-msgid "Fade amount: "
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
+msgid "imagery fade"
+msgstr ""
+
+msgid "Fade Color: "
+msgstr ""
+
+msgid "Fade amount: "
 msgstr ""
 
 msgid "Soft"
@@ -10587,6 +10773,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10608,6 +10806,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10650,9 +10851,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr ""
 
@@ -10677,36 +10875,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11642,6 +11825,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] ""
@@ -11750,6 +11941,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12003,6 +12197,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12539,6 +12736,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12924,6 +13124,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13918,6 +14131,9 @@ msgstr ""
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr ""
+
 msgid "Blue:"
 msgstr ""
 
@@ -13957,7 +14173,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -13969,9 +14185,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14080,6 +14293,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14093,12 +14309,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14135,10 +14357,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14165,6 +14393,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14189,7 +14420,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14204,6 +14435,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14216,12 +14450,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14242,6 +14470,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14274,10 +14505,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14307,6 +14535,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14322,154 +14556,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14484,9 +14724,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14616,6 +14865,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14631,7 +14895,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -14957,6 +15221,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15041,11 +15310,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15099,7 +15363,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15114,9 +15378,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15197,6 +15458,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15235,6 +15504,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15310,9 +15582,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15718,6 +15987,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15742,10 +16019,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15762,6 +16035,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15778,11 +16055,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15798,6 +16087,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15810,6 +16103,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15837,6 +16134,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16228,6 +16537,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16304,6 +16616,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr ""
 
@@ -16841,6 +17156,12 @@ msgstr ""
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17030,6 +17351,11 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
 msgstr ""
 
@@ -17083,6 +17409,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17224,13 +17554,127 @@ msgstr ""
 msgid "public"
 msgstr ""
 
-msgid "Pier"
+msgid "Marine Fuel"
 msgstr ""
 
-msgid "Lock Gate"
+msgid "Agip"
 msgstr ""
 
-msgid "Turning Point"
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
+msgid "Pier"
+msgstr ""
+
+msgid "Lock Gate"
+msgstr ""
+
+msgid "Turning Point"
 msgstr ""
 
 msgid "Slipway"
@@ -17340,6 +17784,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -17463,78 +17910,6 @@ msgstr ""
 msgid "Fuel"
 msgstr ""
 
-msgid "Agip"
-msgstr ""
-
-msgid "Aral"
-msgstr ""
-
-msgid "Avia"
-msgstr ""
-
-msgid "BP"
-msgstr ""
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr ""
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
 msgid "With shop"
 msgstr ""
 
@@ -17544,51 +17919,12 @@ msgstr ""
 msgid "kiosk"
 msgstr ""
 
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -17807,9 +18143,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17828,6 +18161,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18030,6 +18366,12 @@ msgstr ""
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18120,6 +18462,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18334,6 +18679,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18821,7 +19169,7 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
@@ -18830,43 +19178,70 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
-msgid "Glass"
+msgid "Cardboard"
 msgstr ""
 
-msgid "Paper"
+msgid "Electrical Appliances"
 msgstr ""
 
-msgid "Scrap Metal"
+msgid "Glass"
 msgstr ""
 
-msgid "container"
+msgid "Glass Bottles"
 msgstr ""
 
-msgid "centre"
+msgid "Green Waste"
 msgstr ""
 
-msgid "Waste Basket/Trash Can"
+msgid "Paper"
 msgstr ""
 
-msgid "Waste Disposal/Dumpster"
+msgid "Plastic"
 msgstr ""
 
-msgid "Sanitary Dump Station"
+msgid "Plastic Bottles"
 msgstr ""
 
-msgid "Suction pumpout"
+msgid "Plastic Packaging"
 msgstr ""
 
-msgid "Gravity drain for hose"
+msgid "Scrap Metal"
 msgstr ""
 
-msgid "Casette or Elsan Disposal"
+msgid "Shoes"
 msgstr ""
 
-msgid "Operation times"
+msgid "Small Appliances"
 msgstr ""
 
-msgid "Backrest"
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
+msgstr ""
+
+msgid "Waste Basket/Trash Can"
+msgstr ""
+
+msgid "Waste Disposal/Dumpster"
+msgstr ""
+
+msgid "Sanitary Dump Station"
+msgstr ""
+
+msgid "Suction pumpout"
+msgstr ""
+
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
+msgstr ""
+
+msgid "Operation times"
+msgstr ""
+
+msgid "Backrest"
 msgstr ""
 
 msgid "Amount of Seats"
@@ -19046,6 +19421,9 @@ msgstr ""
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr ""
 
@@ -19221,12 +19599,18 @@ msgstr ""
 msgid "Basketball"
 msgstr ""
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr ""
 
@@ -19242,13 +19626,13 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
@@ -19272,9 +19656,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19293,9 +19674,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -19368,6 +19746,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20688,9 +21074,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -21703,10 +22086,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22133,6 +22516,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22157,6 +22543,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22217,6 +22615,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22307,9 +22708,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22679,6 +23089,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22733,9 +23146,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23479,47 +23889,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23528,10 +23947,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24134,6 +24565,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr ""
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25231,374 +25665,680 @@ msgid ""
 "highlight tracks"
 msgstr ""
 
-msgid "Delete this"
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
 msgstr ""
 
-msgid "Delete this&older"
+msgid "Connecting"
 msgstr ""
 
-msgid "km/h"
+msgid "Connected"
 msgstr ""
 
-msgid "Track name: "
+msgid "no name"
 msgstr ""
 
-msgid "Update IRS adjustment layer"
+msgid "Live GPS"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid "Show GPS data."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Speed"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Course"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
+msgid "Explore"
 msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25619,6 +26359,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -25677,47 +26420,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -25950,6 +26652,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr ""
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27167,6 +27872,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27338,6 +28064,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27347,6 +28076,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27527,6 +28259,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27705,6 +28440,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27714,6 +28482,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -27950,9 +28721,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29435,9 +30203,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/fo.po b/i18n/po/fo.po
index c49a6ad..482a1da 100644
--- a/i18n/po/fo.po
+++ b/i18n/po/fo.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: FULL NAME <EMAIL at ADDRESS>\n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2015-02-28 16:15+0000\n"
 "Last-Translator: LiFo <Unknown>\n"
 "Language-Team: Faroese <fo at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:39+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:40+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
 msgstr "{0}: valmøguleiki ''{1}'' er tvítýddur"
@@ -96,19 +96,16 @@ msgstr ""
 msgid "Updating user interface"
 msgstr ""
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
 msgstr ""
 
 msgid "Warning"
 msgstr "Ávaring"
 
-msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
+msgid "Ignoring malformed file URL: \"{0}\""
 msgstr ""
 
-msgid "Ignoring malformed URL: \"{0}\""
+msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 
 msgid ""
@@ -443,6 +440,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
 
@@ -1028,6 +1028,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr ""
 
@@ -1944,15 +1968,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr ""
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -1974,6 +1989,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2092,9 +2116,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2308,9 +2329,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr ""
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2524,6 +2551,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2566,6 +2597,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3016,6 +3050,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3133,10 +3185,44 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3326,6 +3412,12 @@ msgstr ""
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3353,13 +3445,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -3975,9 +4067,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -3987,12 +4076,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4173,13 +4274,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4377,6 +4478,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4590,43 +4692,54 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
 msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
 msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
 msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
 msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
-msgid "Menu: {0}"
+msgctxt "menu"
+msgid "Help"
 msgstr ""
 
-msgid "Save and load the current session (list of layers, etc.)"
+msgid "Menu: {0}"
 msgstr ""
 
 msgid "Edit toolbar"
@@ -4650,6 +4763,7 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
 msgstr ""
 
@@ -4772,58 +4886,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr ""
-
-msgid "Pos."
+msgid " ({0})"
 msgstr ""
 
-msgid "Role"
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5252,6 +5324,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr ""
+
 msgid "Primitive"
 msgstr ""
 
@@ -5492,6 +5567,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5638,6 +5716,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5741,7 +5854,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5869,6 +5982,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5878,17 +5996,48 @@ msgstr ""
 msgid "unknown"
 msgstr ""
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -5934,6 +6083,12 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr ""
 
@@ -6063,10 +6218,16 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
-msgid "List of notes"
+msgid "Mini map"
 msgstr ""
 
-msgid "Add comment"
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
+msgid "List of notes"
+msgstr ""
+
+msgid "Add comment"
 msgstr ""
 
 msgid "Comment"
@@ -6121,10 +6282,15 @@ msgstr ""
 msgid "Enter the ID of the object that should be downloaded"
 msgstr ""
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6153,6 +6319,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr ""
 
+msgid "Selection"
+msgstr ""
+
 msgid "Open a selection list window."
 msgstr ""
 
@@ -6243,6 +6412,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -6837,6 +7012,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6928,14 +7109,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7108,6 +7288,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7643,6 +7829,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8488,6 +8677,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr ""
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr ""
 
@@ -8541,6 +8830,9 @@ msgstr ""
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8561,7 +8853,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8644,80 +8936,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr ""
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-
-msgid "Auto Zoom"
-msgstr ""
-
-msgid "Auto load tiles"
-msgstr ""
-
-msgid "Show Errors"
-msgstr ""
-
-msgid "Load Tile"
-msgstr ""
-
-msgid "Show Tile Info"
-msgstr ""
-
-msgid "Load All Tiles"
-msgstr ""
-
-msgid "Load All Error Tiles"
-msgstr ""
-
-msgid "Increase zoom"
-msgstr ""
-
-msgid "Decrease zoom"
-msgstr ""
-
-msgid "Snap to tile size"
-msgstr ""
-
-msgid "Flush Tile Cache"
-msgstr ""
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
@@ -8727,56 +8945,30 @@ msgstr ""
 msgid "No validation errors"
 msgstr ""
 
-msgid "Blank Layer"
-msgstr ""
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "Download visible tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-
-msgid "Change resolution"
-msgstr ""
-
-msgid "Reload erroneous tiles"
-msgstr ""
-
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Automatic downloading"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Zoom to native resolution"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Supported projections are: {0}"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Save WMS file"
+msgid "Try Again"
 msgstr ""
 
-msgid "Correlate to GPX"
+msgid "No images could be matched!"
 msgstr ""
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
@@ -8863,24 +9055,9 @@ msgstr ""
 msgid "Offset:"
 msgstr ""
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
 msgid "Correlate"
 msgstr ""
 
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9074,9 +9251,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr ""
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9139,9 +9313,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9767,15 +9938,15 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr ""
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -10568,13 +10739,28 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
-msgid "imagery fade"
+msgid "1. Enter getCapabilities URL"
 msgstr ""
 
-msgid "Fade Color: "
+msgid "2. Enter name for this layer"
 msgstr ""
 
-msgid "Fade amount: "
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
+msgid "imagery fade"
+msgstr ""
+
+msgid "Fade Color: "
+msgstr ""
+
+msgid "Fade amount: "
 msgstr ""
 
 msgid "Soft"
@@ -10586,6 +10772,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10607,6 +10805,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10649,9 +10850,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr ""
 
@@ -10676,36 +10874,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11641,6 +11824,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] ""
@@ -11749,6 +11940,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12002,6 +12196,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12538,6 +12735,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12923,6 +13123,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13917,6 +14130,9 @@ msgstr ""
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr ""
+
 msgid "Blue:"
 msgstr ""
 
@@ -13956,7 +14172,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -13968,9 +14184,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14079,6 +14292,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14092,12 +14308,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14134,10 +14356,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14164,6 +14392,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14188,7 +14419,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14203,6 +14434,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14215,12 +14449,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14241,6 +14469,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14273,10 +14504,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14306,6 +14534,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14321,154 +14555,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14483,9 +14723,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14615,6 +14864,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14630,7 +14894,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -14956,6 +15220,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15040,11 +15309,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15098,7 +15362,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15113,9 +15377,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15196,6 +15457,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15234,6 +15503,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15309,9 +15581,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15717,6 +15986,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15741,10 +16018,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15761,6 +16034,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15777,11 +16054,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15797,6 +16086,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15809,6 +16102,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15836,6 +16133,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16227,6 +16536,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16303,6 +16615,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr ""
 
@@ -16840,6 +17155,12 @@ msgstr ""
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17029,6 +17350,11 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
 msgstr ""
 
@@ -17082,6 +17408,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17223,13 +17553,127 @@ msgstr ""
 msgid "public"
 msgstr ""
 
-msgid "Pier"
+msgid "Marine Fuel"
 msgstr ""
 
-msgid "Lock Gate"
+msgid "Agip"
 msgstr ""
 
-msgid "Turning Point"
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
+msgid "Pier"
+msgstr ""
+
+msgid "Lock Gate"
+msgstr ""
+
+msgid "Turning Point"
 msgstr ""
 
 msgid "Slipway"
@@ -17339,6 +17783,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -17462,78 +17909,6 @@ msgstr ""
 msgid "Fuel"
 msgstr ""
 
-msgid "Agip"
-msgstr ""
-
-msgid "Aral"
-msgstr ""
-
-msgid "Avia"
-msgstr ""
-
-msgid "BP"
-msgstr ""
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr ""
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
 msgid "With shop"
 msgstr ""
 
@@ -17543,51 +17918,12 @@ msgstr ""
 msgid "kiosk"
 msgstr ""
 
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -17806,9 +18142,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17827,6 +18160,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18029,6 +18365,12 @@ msgstr ""
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18119,6 +18461,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18333,6 +18678,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18820,7 +19168,7 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
@@ -18829,43 +19177,70 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
-msgid "Glass"
+msgid "Cardboard"
 msgstr ""
 
-msgid "Paper"
+msgid "Electrical Appliances"
 msgstr ""
 
-msgid "Scrap Metal"
+msgid "Glass"
 msgstr ""
 
-msgid "container"
+msgid "Glass Bottles"
 msgstr ""
 
-msgid "centre"
+msgid "Green Waste"
 msgstr ""
 
-msgid "Waste Basket/Trash Can"
+msgid "Paper"
 msgstr ""
 
-msgid "Waste Disposal/Dumpster"
+msgid "Plastic"
 msgstr ""
 
-msgid "Sanitary Dump Station"
+msgid "Plastic Bottles"
 msgstr ""
 
-msgid "Suction pumpout"
+msgid "Plastic Packaging"
 msgstr ""
 
-msgid "Gravity drain for hose"
+msgid "Scrap Metal"
 msgstr ""
 
-msgid "Casette or Elsan Disposal"
+msgid "Shoes"
 msgstr ""
 
-msgid "Operation times"
+msgid "Small Appliances"
 msgstr ""
 
-msgid "Backrest"
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
+msgstr ""
+
+msgid "Waste Basket/Trash Can"
+msgstr ""
+
+msgid "Waste Disposal/Dumpster"
+msgstr ""
+
+msgid "Sanitary Dump Station"
+msgstr ""
+
+msgid "Suction pumpout"
+msgstr ""
+
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
+msgstr ""
+
+msgid "Operation times"
+msgstr ""
+
+msgid "Backrest"
 msgstr ""
 
 msgid "Amount of Seats"
@@ -19045,6 +19420,9 @@ msgstr ""
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr ""
 
@@ -19220,12 +19598,18 @@ msgstr ""
 msgid "Basketball"
 msgstr ""
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr ""
 
@@ -19241,13 +19625,13 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
@@ -19271,9 +19655,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19292,9 +19673,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -19367,6 +19745,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20687,9 +21073,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -21702,10 +22085,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22132,6 +22515,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22156,6 +22542,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22216,6 +22614,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22306,9 +22707,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22678,6 +23088,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22732,9 +23145,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23478,47 +23888,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23527,10 +23946,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24133,6 +24564,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr ""
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25230,374 +25664,680 @@ msgid ""
 "highlight tracks"
 msgstr ""
 
-msgid "Delete this"
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
 msgstr ""
 
-msgid "Delete this&older"
+msgid "Connecting"
 msgstr ""
 
-msgid "km/h"
+msgid "Connected"
 msgstr ""
 
-msgid "Track name: "
+msgid "no name"
 msgstr ""
 
-msgid "Update IRS adjustment layer"
+msgid "Live GPS"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid "Show GPS data."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Speed"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Course"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
+msgid "Explore"
 msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25618,6 +26358,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -25676,47 +26419,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -25949,6 +26651,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr ""
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27166,6 +27871,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27337,6 +28063,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27346,6 +28075,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27526,6 +28258,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27704,6 +28439,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27713,6 +28481,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -27949,9 +28720,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29434,9 +30202,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/fr.po b/i18n/po/fr.po
index 414b2fd..7b6e364 100644
--- a/i18n/po/fr.po
+++ b/i18n/po/fr.po
@@ -5,16 +5,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: fr\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
-"PO-Revision-Date: 2015-05-08 22:31+0000\n"
-"Last-Translator: Christian Quest <Unknown>\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
+"PO-Revision-Date: 2015-10-09 02:26+0000\n"
+"Last-Translator: Xapitoun <xapitoun at gmail.com>\n"
 "Language-Team: Fr <>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:40+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:42+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: fr\n"
 "X-Poedit-Bookmarks: 1767,-1,-1,2669,-1,-1,-1,-1,-1,-1\n"
 
@@ -97,24 +97,21 @@ msgstr "Chargement des préférences d’imagerie"
 msgid "Updating user interface"
 msgstr "Mise à jour de l’interface graphique"
 
-msgid "{0} completed in {1}"
-msgstr "{0} terminé(e)s en {1}"
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "L’adresse web n’est pas valide, elle est ignorée : ’’{0}’’"
+
+msgid "Warning"
+msgstr "Avertissement"
 
 msgid "Ignoring malformed file URL: \"{0}\""
 msgstr ""
 "L’adresse web du fichier n’est pas valide, elle est ignorée : ’’{0}’’"
 
-msgid "Warning"
-msgstr "Avertissement"
-
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 "Le paramètre \"downloadgps\" n’accepte ni les noms ni les adresses web de "
 "fichiers."
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "L’adresse web n’est pas valide, elle est ignorée : ’’{0}’’"
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -466,6 +463,9 @@ msgstr "Afficher/Masquer le panneau des fenêtres latérales"
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Affiche/Masque le panneau des fenêtres latérales, maximise la carte"
 
+msgid "Distribute Nodes"
+msgstr "Répartir les noeuds"
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr "Répartir les nœuds sélectionnés à égale distance le long d’une ligne"
 
@@ -1127,6 +1127,32 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr "Sélectionnez des chemins avec des angles proches de 90° ou 180°."
 
+msgid "Download from Overpass API ..."
+msgstr "Téléchargement depuis  Overpass API ..."
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+"Téléchargement des données cartographique depuis un serveur Overpass API ."
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+"Construire une requête Overpass en utilisant l''assistant d''Overpass Turbo"
+
+msgid "Build query"
+msgstr "Construire la requête"
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr "<html>L''assistant Overpass ne peut pas lire la requête suivante :"
+
+msgid "Parse error"
+msgstr "Erreur d''analyse"
+
+msgid "Overpass query: "
+msgstr "Requête Overpass  : "
+
+msgid "Overpass server: "
+msgstr "Serveur Overpass : "
+
 msgid "Paste"
 msgstr "Coller"
 
@@ -2119,15 +2145,6 @@ msgstr "Discrétisation des angles active."
 msgid "Finish drawing."
 msgstr "Terminer le chemin."
 
-msgid "FIX"
-msgstr "Correctif"
-
-msgid "draw angle snap"
-msgstr "tracer des angles discrets"
-
-msgid "draw angle snap highlight"
-msgstr "Surbrillance du tracé des angles discrets"
-
 msgid "Toggle snapping by {0}"
 msgstr "Activer/Désactiver la discrétisation avec {0}"
 
@@ -2149,6 +2166,15 @@ msgstr "0,45,90,..."
 msgid "0,30,45,60,90,..."
 msgstr "0,30,45,60,90,..."
 
+msgid "FIX"
+msgstr "Correctif"
+
+msgid "draw angle snap"
+msgstr "tracer des angles discrets"
+
+msgid "draw angle snap highlight"
+msgstr "Surbrillance du tracé des angles discrets"
+
 msgid "Angle snapping"
 msgstr "Discrétisation des angles"
 
@@ -2284,9 +2310,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr "Le chemin sélectionné doit être simple, direct et sans branche."
 
-msgid "Make parallel way error"
-msgstr "Erreur"
-
 msgid "Drag play head"
 msgstr "Déplacer la tête de lecture"
 
@@ -2519,9 +2542,15 @@ msgstr "Tous les objets"
 msgid "Also include incomplete and deleted objects in search."
 msgstr "Inclure les objects incomplets et effacés dans la recherche."
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr "Expression régulière"
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr "Bouton de la barre d’outils"
 
@@ -2751,6 +2780,10 @@ msgid "RX"
 msgstr "RX"
 
 msgctxt "search"
+msgid "CSS"
+msgstr "CSS"
+
+msgctxt "search"
 msgid "A"
 msgstr "A"
 
@@ -2804,6 +2837,9 @@ msgstr "Série de nombres attendus"
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr "Jeton inattendu. Attendu {0}, trouvé {1}"
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr "Jeton inattendu : {0}"
 
@@ -3304,6 +3340,24 @@ msgstr "Impossible de créer le dossier de cache manquant: {0}"
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr "<html>Échec de création du répertoire cache manquant : {0}</html>"
 
+msgid "Unable to delete temporary file {0}"
+msgstr "Impossible de supprimer le fichier temporaire {0}"
+
+msgid "Unable to set file non-readable {0}"
+msgstr "Impossible d''enlever les droits de lecture au fichier {0}"
+
+msgid "Unable to set file non-writable {0}"
+msgstr "Impossible d''enlever les droits d''écriture au fichier {0}"
+
+msgid "Unable to set file non-executable {0}"
+msgstr "Impossible d''enlever les droits d''exécution au fichier {0}"
+
+msgid "Unable to set file readable {0}"
+msgstr "Impossible d''ajouter les droits de lecture au fichier {0}"
+
+msgid "Unable to set file writable {0}"
+msgstr "Impossible d''ajouter les droits d''écriture au fichier {0}"
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3377,6 +3431,8 @@ msgid ""
 "Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
 "startup)."
 msgstr ""
+"Test d''activation du réseau IPv6, préférant IPv6 par rapport à IPv4 (ne "
+"fonctionne qu''au début du démarrage)."
 
 msgid " (at line {0}, column {1})"
 msgstr " (à la ligne {0}, colonne {1})"
@@ -3441,13 +3497,50 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
-msgid "Not in cache"
-msgstr "Pas en cache"
-
 msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr ""
 "La projection ''{0}'' est introuvable, le signet ''{1}'' n’est pas utilisable"
 
+msgid "HTTP error {0} when loading tiles"
+msgstr "Erreur HTTTP {0} lors du chargement des tuiles"
+
+msgid "Error downloading tiles: {0}"
+msgstr "Erreur lors du téléchargement des tuiles : {0}"
+
+msgid "Could not load image from tile server"
+msgstr "Échec du chargement de l''image depuis le serveur de tuiles"
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+"{0} n''est pas un argument WMS valide. Veuillez vérifier l''adresse : {1}"
+
+msgid "Select WMTS layer"
+msgstr "Sélectionner une couche WMTS"
+
+msgid "Layer name"
+msgstr "Nom du calque"
+
+msgid "Projection"
+msgstr "Projection"
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr "Aucun calque défini par le document getCapabilities : {0}"
+
+msgid "No layer selected"
+msgstr "Aucun calque sélectionné"
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
+msgstr ""
+"Seules les tuiles carrées sont prises en charge. {0}x{1} renvoyé par le "
+"serveur pour TileMatrix identifier {2}"
+
 msgid "ID > 0 expected. Got {0}."
 msgstr "Un identifiant positif est attendu. Actuellement il est {0}."
 
@@ -3663,6 +3756,13 @@ msgstr "texte"
 msgid "areatext"
 msgstr "zone de texte"
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+"Le paramètre \"+zone=...\" est requis pour la projection UTM (''+proj=utm'')."
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr "Le paramètre « +zone=... » attend un entier compris entre 1 et 60"
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr "Le paramètre doit commencer par un caractère ''+'' (trouvé ''{0}'')"
 
@@ -3690,6 +3790,9 @@ msgstr "Ellipsoïde ''{0}'' non supporté."
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr "Combinaison de paramètres d’ellipsoïde non supportée."
 
+msgid "Unknown datum identifier: ''{0}''"
+msgstr "Identifiant de référence inconnu: \"{0}\""
+
 msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr "Ellipsoïde requis (+ellps=* ou +a=*, +b=*)"
 
@@ -3698,9 +3801,6 @@ msgstr ""
 "Fichier de grille de conversion \"{0}\" pour l''option +nadgrids non "
 "supporté."
 
-msgid "Unknown datum identifier: ''{0}''"
-msgstr "Identifiant de référence inconnu: \"{0}\""
-
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
 msgstr "Format de données demandé (+datum=*, +towgs84=* ou +nadgrids=*)"
 
@@ -4062,7 +4162,7 @@ msgid "Long segments"
 msgstr "Longs segments"
 
 msgid "This tests for long way segments, which are usually errors."
-msgstr ""
+msgstr "Ceci teste les longs segments, qui sont habituellement des erreurs."
 
 msgid "Very long segment of {0} kilometers"
 msgstr "Très long segment de {0} kilomètres"
@@ -4286,7 +4386,7 @@ msgid "Role {0} unknown in templates {1}"
 msgstr "Le rôle {0} est inconnu parmi les modèles {1}"
 
 msgid "Empty role type found when expecting one of {0}"
-msgstr ""
+msgstr "Role vide. Une des valeurs suivantes est attendue : {0}"
 
 msgid "Role {0} missing"
 msgstr "Le rôle {0} manque"
@@ -4357,9 +4457,6 @@ msgstr "Clé de l’attribut plus longue qu’autorisée"
 msgid "Tags with empty values"
 msgstr "Attributs avec des valeurs vides"
 
-msgid "Invalid property key"
-msgstr "Clé invalide"
-
 msgid "Invalid white space in property key"
 msgstr "Espace invalide dans la clé"
 
@@ -4369,12 +4466,24 @@ msgstr "Les valeurs commencent ou finissent par un espace blanc"
 msgid "Property values contain HTML entity"
 msgstr "Les valeurs contiennent du code HTML"
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr "La clé ''{0}'' ressemble à ''{1}''."
+
+msgid "Misspelled property key"
+msgstr "Clé d''attribut mal orthographiée"
+
 msgid "Key ''{0}'' not in presets."
 msgstr "La clé « {0} » est absente du modèle des attributs."
 
 msgid "Presets do not contain property key"
 msgstr "Le  modèle des attributs ne contient pas de clé"
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr "La valeur \"{0}\" pour la clé \"{1}\" ressemble à \"{2}\"."
+
+msgid "Misspelled property value"
+msgstr "Valeur de la propriété mal orthographiée"
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 "La valeur « {0} » est absente du modèle des attributs pour la clé ·« {1} »."
@@ -4563,15 +4672,15 @@ msgstr "Nœud d’un chemin proche d’un autre chemin"
 msgid "Connected way end node near other way"
 msgstr "nœud final d’un chemin à côté d’un autre chemin"
 
+msgid "Unconnected nodes without physical tags"
+msgstr "Nœuds non connectés et sans attribut"
+
 msgid "Untagged and unconnected nodes"
 msgstr "nœuds sans attribut et non connectés"
 
 msgid "This test checks for untagged nodes that are not part of any way."
 msgstr "Vérifier les nœuds sans attribut ne faisant partie d’aucun chemin."
 
-msgid "Unconnected nodes without physical tags"
-msgstr "Nœuds non connectés et sans attribut"
-
 msgid "No tags"
 msgstr "Aucun attribut"
 
@@ -4768,6 +4877,7 @@ msgstr "Fermer la fenêtre"
 msgid "Imagery offset"
 msgstr "Décalage de l’imagerie"
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr "Imagerie"
 
@@ -4870,6 +4980,8 @@ msgid ""
 "Relocate all 3 directories to homedir. Cache directory will be in "
 "homedir/cache"
 msgstr ""
+"Déplacer les 3 répertoires dans le répertoire racine de l’utilisateur. Le "
+"répertoire de cache sera répertoire_racine/cache"
 
 msgid ""
 "-Djosm.home has lower precedence, i.e. the specific setting overrides the "
@@ -4952,6 +5064,8 @@ msgstr[1] ""
 msgid ""
 "Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
 msgstr ""
+"Réseau IPv6 utilisable détecté, sera utilisé en préférence à l’IPv4 après le "
+"prochain démarrage."
 
 msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
 msgstr "Un réseau IPv6 a été détecté, il sera utilisé de préférence à IPv4."
@@ -4960,6 +5074,8 @@ msgid ""
 "Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
 "restart."
 msgstr ""
+"Réseau IPv6 inutilisable détecté, IPv4 sera utilisé de préférence après le "
+"prochain démarrage."
 
 msgid "Unsaved osm data"
 msgstr "Données OSM non enregistrées"
@@ -5010,45 +5126,56 @@ msgstr ""
 "configuration manquante du proxy.<br>Voulez-vous changer les paramètres du "
 "proxy maintenant ?"
 
+msgctxt "menu"
 msgid "File"
 msgstr "Fichier"
 
-msgid "Session"
-msgstr "Session"
+msgctxt "menu"
+msgid "Edit"
+msgstr "Éditer"
 
+msgctxt "menu"
 msgid "View"
-msgstr "Affichage"
+msgstr "Afficher"
 
+msgctxt "menu"
 msgid "Tools"
 msgstr "Outils"
 
+msgctxt "menu"
 msgid "More tools"
-msgstr "Plus d’outils"
+msgstr "Plus d''outils"
 
+msgctxt "menu"
 msgid "Data"
 msgstr "Données"
 
+msgctxt "menu"
 msgid "Selection"
 msgstr "Sélection"
 
+msgctxt "menu"
 msgid "Presets"
-msgstr "Attributs"
+msgstr "Préréglages"
 
 msgid "More..."
 msgstr "Plus…"
 
+msgctxt "menu"
 msgid "GPS"
 msgstr "GPS"
 
+msgctxt "menu"
 msgid "Windows"
 msgstr "Fenêtres"
 
+msgctxt "menu"
+msgid "Help"
+msgstr "Aide"
+
 msgid "Menu: {0}"
 msgstr "Menu : {0}"
 
-msgid "Save and load the current session (list of layers, etc.)"
-msgstr "Enregistrer et charger la session courante (liste de calques, etc.)"
-
 msgid "Edit toolbar"
 msgstr "Barre d’outils d’édition"
 
@@ -5072,6 +5199,7 @@ msgstr "Cliquez pour ouvrir l''onglet d''imagerie dans les préférences"
 msgid "Search menu items"
 msgstr "Rechercher dans les éléments du menu"
 
+msgctxt "menu"
 msgid "Audio"
 msgstr "Audio"
 
@@ -5196,68 +5324,17 @@ msgstr "En arrière-plan"
 msgid "Click to run job in background"
 msgstr "Cliquez pour lancer la tâche en arrière-plan"
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-"Les photos aériennes peuvent ne pas être correctement alignées. Merci de "
-"vérifier le décalage à partir de traces GPS!"
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr "http://wiki.openstreetmap.org/wiki/FR:Using_Imagery"
-
-msgid "Details..."
-msgstr "Détails..."
-
-msgid "Hide this message and never show it again"
-msgstr "Masquer ce message et ne plus jamais l’’afficher"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-"<html>Veuillez confirmer la suppression d’<strong>un objet</strong> depuis "
-"<strong>une relation</strong>.</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-"Copy text   \t\r\n"
-"<html>Veuillez confirmer le retrait de <strong>1 objet</strong> de "
-"<strong>{0} relations</strong>.</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>Veuillez confirmer la suppression de<strong>{0} objets</strong> depuis "
-"<strong>{1} relation</strong>.</html>"
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] "Suppression d’{0} objet"
-msgstr[1] "Suppression de {0} objets"
-
-msgid "Delete objects"
-msgstr "Supprimer des objets"
-
-msgid "To delete"
-msgstr "À supprimer"
-
-msgid "From Relation"
-msgstr "De la relation"
-
-msgid "Pos."
-msgstr "Position"
+msgid " ({0})"
+msgstr " ({0})"
 
-msgid "Role"
-msgstr "Rôle"
+msgid "{0} completed in {1}"
+msgstr "{0} terminé(e)s en {1}"
 
-msgid "Click to close the dialog and remove the object from the relations"
-msgstr "Retirer l’objet des relations et fermer la fenêtre"
+msgid "Enlarge"
+msgstr "Agrandir"
 
-msgid "Click to close the dialog and to abort deleting the objects"
-msgstr "Annuler la suppression et fermer la fenêtre"
+msgid "Shrink"
+msgstr "Rétrécir"
 
 msgid ""
 "<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
@@ -5720,6 +5797,9 @@ msgstr "Conserver leur état"
 msgid "Undecide conflict between deleted state"
 msgstr "Ne pas arbitrer le conflit d’état"
 
+msgid "Role"
+msgstr "Rôle"
+
 msgid "Primitive"
 msgstr "Objet"
 
@@ -6011,6 +6091,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr "Appliquer ce rôle à tout les membres."
 
+msgid "Pos."
+msgstr "Position"
+
 msgid "Orig. Way"
 msgstr "Du chemin"
 
@@ -6169,6 +6252,48 @@ msgstr "Résoudre les conflits"
 msgid "Resolve conflicts for ''{0}''"
 msgstr "Résoudre les conflits pour ''{0}''"
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+"<html>Veuillez confirmer la suppression d’<strong>un objet</strong> depuis "
+"<strong>une relation</strong>.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+"Copy text   \t\r\n"
+"<html>Veuillez confirmer le retrait de <strong>1 objet</strong> de "
+"<strong>{0} relations</strong>.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Veuillez confirmer la suppression de<strong>{0} objets</strong> depuis "
+"<strong>{1} relation</strong>.</html>"
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] "Suppression d’{0} objet"
+msgstr[1] "Suppression de {0} objets"
+
+msgid "Delete objects"
+msgstr "Supprimer des objets"
+
+msgid "To delete"
+msgstr "À supprimer"
+
+msgid "From Relation"
+msgstr "De la relation"
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr "Retirer l’objet des relations et fermer la fenêtre"
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr "Annuler la suppression et fermer la fenêtre"
+
 msgid "Filter objects and hide/disable them."
 msgstr "Filtrer les objets et les masquer/désactiver"
 
@@ -6272,8 +6397,8 @@ msgstr "Informations sur l’objet"
 msgid "map style"
 msgstr "Modèle de la carte"
 
-msgid " ({0})"
-msgstr " ({0})"
+msgid "edit counts"
+msgstr "nombre de modifications"
 
 msgid "not in data set"
 msgstr "absent du jeu de données"
@@ -6413,6 +6538,11 @@ msgstr ""
 "Attention: Les 2 objets sélectionnés sont égaux, mais n’’ont pas les mêmes "
 "caches de style."
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] "{0} utilisateur a récemment modifié la sélection :"
+msgstr[1] "{0} utilisateurs ont récemment modifié la sélection :"
+
 msgid "xml"
 msgstr "xml"
 
@@ -6422,29 +6552,61 @@ msgstr "mapcss"
 msgid "unknown"
 msgstr "inconnu"
 
+msgid "Enter the coordinates for the new node."
+msgstr "Saisir les coordonnées géographiques du nouveau nœud."
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
-msgstr ""
-"Entrez les coordonnées du nouveau nœud.<br/>Vous pouvez séparer la longitude "
-"et la latitude par un espace, une virgule ou un point-virgule. <br/>Utilisez "
-"une valeur positive ou les caractères N et E pour indiquer lʼorientation "
-"cardinale Nord ou Est. <br/>Pour les directions cardinales Sud et Ouest vous "
-"pouvez utiliser une valeur négative ou les caractères S et W.<br/>Les "
-"coordonnées doivent être dans lʼun de ces trois "
-"formats:<ul><li><i>degrés</i><tt>°</tt></li><li><i>degrés</i><tt>°</t"
-"t> <i>minutes</i><tt>'</tt></li><li><i>degrés</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>secondes</i><tt>&quot</tt></li></ul>Les "
-"symboles <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> sont optionnels. <br/><br/>Quelques exemples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+"Vous pouvez séparer la longitude et la latitude avec un espace, une virgule "
+"ou un point-virgule."
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+"Utilisez des nombres positifs ou les lettres N et E pour indiquer les "
+"direction cardinales Nord ou Est."
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+"Pour les directions cardinales Sud et Ouest, vous pouvez utiliser soit des "
+"nombres négatifs ou les caractères S et W."
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr "Les coordonnées géographiques peuvent être formatées ainsi:"
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr "<i>degrés</i><tt>°</tt>"
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr "<i>degés</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+"<i>degrés</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>secondes</i><tt>&quot</tt>"
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+"Les symboles <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, "
+"<tt>"</tt>, <tt>″</tt> sont optionnels."
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+"Vous pouvez également utiliser la syntaxe <tt>lat=\"...\" lon=\"...\"</tt> "
+"or <tt>lat=''...'' lon=''...''</tt>."
+
+msgid "Some examples:"
+msgstr "Quelques exemples :"
 
 msgid "Projected coordinates:"
 msgstr "Coordonnées projetées:"
@@ -6491,7 +6653,13 @@ msgstr "Opacité"
 msgid "Adjust opacity of the layer."
 msgstr "Ajuster l’opacité du calque"
 
-msgid "Activate"
+msgid "Gamma"
+msgstr "Gamma"
+
+msgid "Adjust gamma value of the layer."
+msgstr "Réglez la valeur gamma du calque."
+
+msgid "Activate"
 msgstr "Activer"
 
 msgid "Activate the selected layer"
@@ -6620,6 +6788,12 @@ msgstr "Paramètres de style"
 msgid "Customize the style"
 msgstr "Personnaliser le style"
 
+msgid "Mini map"
+msgstr "Mini carte"
+
+msgid "Displays a small map of the current edit location"
+msgstr "Affiche une petite carte de l''emplacement de l''édition en cours"
+
 msgid "List of notes"
 msgstr "Liste de notes"
 
@@ -6678,15 +6852,22 @@ msgstr "Identifiant :"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "Veuillez saisir l’identifiant de l’objet à télécharger"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+"Les identifiants des objets peuvent être séparés par une virgule ou un "
+"espace, par exemple : {0}"
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+"En mode mixte, spécifiez les objets ainsi : {0}<br/>({1} pour <i>node</i>, "
+"{2} pour <i>way</i> et {3} pour <i>relation</i>)"
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
-"Les identifiants dʼobjet peuvent être séparés par une virgule ou un espace. "
-"<br/>Exemples: {0}<br/>En mode mixte, spécifier les objets comme ceci: "
-"{1}<br/>({2} pour <i>nœud</i>, {3} pour <i>chemin</i>, et {4} pour "
-"<i>relation</i>)"
+"Une plage d''identifiants d''objets est spécifiée avec un tiret, par exemple "
+": {0}"
 
 msgid ""
 "Invalid ID list specified\n"
@@ -6716,6 +6897,9 @@ msgstr "Relations : {0}/{1}"
 msgid "Relations: {0}"
 msgstr "Relations : {0}"
 
+msgid "Selection"
+msgstr "Sélection"
+
 msgid "Open a selection list window."
 msgstr "Afficher la fenêtre de sélection"
 
@@ -6810,6 +6994,12 @@ msgstr "Afficher le validateur de données"
 msgid "Validation results"
 msgstr "Validation"
 
+msgid "Lookup"
+msgstr "Consultation"
+
+msgid "Looks up the selected primitives in the error list."
+msgstr "Chercher les primitives sélectionnées dans la liste d''erreur."
+
 msgid "Fix"
 msgstr "Réparer"
 
@@ -7463,6 +7653,14 @@ msgstr "Aller sur la page wiki de description de l’attribut (F1)"
 msgid "Launch browser with wiki help for selected object"
 msgstr "Afficher le wiki d’aide"
 
+msgid "Go to Taginfo"
+msgstr "Aller à Taginfo"
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+"Lancer le navigateur avec les statistiques de Taginfo pour l''objet "
+"sélectionné"
+
 msgid "Paste Value"
 msgstr "Coller la Valeur"
 
@@ -7560,17 +7758,14 @@ msgstr "Fixer le nombre d’attributs récemment ajoutés"
 msgid "Remember last used tags after a restart"
 msgstr "Mémoriser les derniers attributs utilisés après un redémarrage"
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
-msgstr "<code>Ctrl-1</code> pour appliquer la première suggestion"
+msgid "to apply first suggestion"
+msgstr "pour appliquer la première suggestion"
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
-msgstr "<code>Shift-Enter</code> pour ajouter sans fermer la fenêtre"
+msgid "to add without closing the dialog"
+msgstr "pour ajouter sans fermer la fenêtre"
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
-msgstr ""
-"<code>Shift-Ctrl-1</code> pour ajouter la première suggestion sans fermer la "
-"fenêtre"
+msgid "to add first suggestion without closing the dialog"
+msgstr "pour ajouter la première suggestion sans fermer la fenêtre"
 
 msgid "Please enter the number of recently added tags to display"
 msgstr ""
@@ -7760,6 +7955,13 @@ msgstr "Trier les membres"
 msgid "Relation Editor: Sort"
 msgstr "Éditeur de relation: Trier"
 
+msgid "Sort below"
+msgstr "Trier ci-dessous"
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+"Trier les membres de la relation sélectionnée et tous les membres en dessous"
+
 msgid "Reverse the order of the relation members"
 msgstr "Inverser l’ordre des membres"
 
@@ -8357,6 +8559,9 @@ msgstr "Chargement de l’historique pour la relation {0}"
 msgid "Node {0}"
 msgstr "Nœud {0}"
 
+msgid "The nodes of this way are in reverse order"
+msgstr "Les noeuds de ce chemin sont en ordre inverse"
+
 msgid "Zoom to node"
 msgstr "Zoomer sur le nœud"
 
@@ -9374,6 +9579,108 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] "{0} objet supprimé :"
 msgstr[1] "{0} objets supprimés :"
 
+msgid "Show Tile Info"
+msgstr "Afficher l’information de la tuile"
+
+msgid "Tile Info"
+msgstr "Info de la tuile"
+
+msgid "Metadata "
+msgstr "Métadonnées "
+
+msgid "Auto Zoom"
+msgstr "Zoomer automatiquement"
+
+msgid "Auto load tiles"
+msgstr "Charger automatiquement les tuiles"
+
+msgid "Load All Tiles"
+msgstr "Charger toutes les tuiles"
+
+msgid "Load All Error Tiles"
+msgstr "Charger les tuiles avec des erreurs"
+
+msgid "Zoom to native resolution"
+msgstr "Zoomer à la résolution native"
+
+msgid "Change resolution"
+msgstr "Changer la résolution"
+
+msgid "Failed to create tile source"
+msgstr "Impossible de créer la source de la tuile"
+
+msgid "Show Errors"
+msgstr "Afficher les erreurs"
+
+msgid "Load Tile"
+msgstr "Charger la tuile"
+
+msgid "Increase zoom"
+msgstr "Zoomer en avant"
+
+msgid "Decrease zoom"
+msgstr "Zoomer en arrière"
+
+msgid "Snap to tile size"
+msgstr "Revenir à la taille de la tuile"
+
+msgid "Flush Tile Cache"
+msgstr "Réinitialiser le cache"
+
+msgid "zoom in to load any tiles"
+msgstr "zoomer pour charger des tuiles"
+
+msgid "zoom in to load more tiles"
+msgstr "zoomer pour charger davantage de tuiles"
+
+msgid "increase zoom level to see more detail"
+msgstr "Zoomer en avant pour voir les détails"
+
+msgid "No tiles at this zoom level"
+msgstr "Pas de tuiles à ce niveau de zoom."
+
+msgid "Current zoom: {0}"
+msgstr "Zoom actuel: {0}"
+
+msgid "Display zoom: {0}"
+msgstr "Zoom dʼaffichage: {0}"
+
+msgid "Pixel scale: {0}"
+msgstr "Echelle de pixel: {0}"
+
+msgid "Best zoom: {0}"
+msgstr "Meilleur zoom : {0}"
+
+msgid "Cache stats: {0}"
+msgstr "Statistiques du cache : {0}"
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr "{0} ({1}), téléchargement automatique au zoom {2}"
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr "{0} ({1}), téléchargement au zoom {2}"
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr "Téléchargement des tuiles : {0}/{1}"
+
+msgid "Save WMS file"
+msgstr "Enregistrer le fichier WMS"
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+"Les photos aériennes peuvent ne pas être correctement alignées. Merci de "
+"vérifier le décalage à partir de traces GPS!"
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr "http://wiki.openstreetmap.org/wiki/FR:Using_Imagery"
+
+msgid "Details..."
+msgstr "Détails..."
+
+msgid "Hide this message and never show it again"
+msgstr "Masquer ce message et ne plus jamais l’’afficher"
+
 msgid "Customize Color"
 msgstr "Personnaliser la couleur"
 
@@ -9427,6 +9734,9 @@ msgstr "Enregistrer le fichier GPX"
 msgid "Imagery fade"
 msgstr "Effacement de l’imagerie"
 
+msgid "Unsupported imagery type: {0}"
+msgstr "Unsupported imagery type: {0}"
+
 msgid "ERROR"
 msgstr "ERREUR"
 
@@ -9447,12 +9757,12 @@ msgstr "Toutes les projections sont supportées."
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
-"Le calque {0} ne supporte pas la projection {1}.\n"
-"{2}\n"
-"Changez de projection ou retirer le calque."
+"Le calque {0} ne prend pas en charge la projection {1}.\n"
+"Les projections prises en charge sont : {2}\n"
+"Changer à nouveau la projection ou supprimer le calque."
 
 msgid "Save Layer"
 msgstr "Enregistrer le calque"
@@ -9535,86 +9845,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr "Enregistrer le fichier OSM"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-"{0} n’’est pas un argument TMS valide. Veuillez vérifier cette URL de "
-"serveur :\n"
-"{1}"
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-"Les calques TMS ne supportent pas la projection {0}.\n"
-"{1}\n"
-"Changez de projection ou retirer le calque."
-
-msgid "Auto Zoom"
-msgstr "Zoomer automatiquement"
-
-msgid "Auto load tiles"
-msgstr "Charger automatiquement les tuiles"
-
-msgid "Show Errors"
-msgstr "Afficher les erreurs"
-
-msgid "Load Tile"
-msgstr "Charger la tuile"
-
-msgid "Show Tile Info"
-msgstr "Afficher l’information de la tuile"
-
-msgid "Load All Tiles"
-msgstr "Charger toutes les tuiles"
-
-msgid "Load All Error Tiles"
-msgstr "Charger les tuiles avec des erreurs"
-
-msgid "Increase zoom"
-msgstr "Zoomer en avant"
-
-msgid "Decrease zoom"
-msgstr "Zoomer en arrière"
-
-msgid "Snap to tile size"
-msgstr "Revenir à la taille de la tuile"
-
-msgid "Flush Tile Cache"
-msgstr "Réinitialiser le cache"
-
-msgid "zoom in to load any tiles"
-msgstr "zoomer pour charger des tuiles"
-
-msgid "zoom in to load more tiles"
-msgstr "zoomer pour charger davantage de tuiles"
-
-msgid "increase zoom level to see more detail"
-msgstr "Zoomer en avant pour voir les détails"
-
-msgid "No tiles at this zoom level"
-msgstr "Pas de tuiles à ce niveau de zoom."
-
-msgid "Current zoom: {0}"
-msgstr "Zoom actuel: {0}"
-
-msgid "Display zoom: {0}"
-msgstr "Zoom dʼaffichage: {0}"
-
-msgid "Pixel scale: {0}"
-msgstr "Echelle de pixel: {0}"
-
-msgid "Best zoom: {0}"
-msgstr "Meilleur zoom : {0}"
-
-msgid "Cache stats: {0}"
-msgstr "Statistiques du cache : {0}"
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr "Calque TMS ({0}), téléchargement au zoom {1}"
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr "Les projections EPSG:4326 et Mercator sont supportées."
 
@@ -9624,60 +9854,33 @@ msgstr "Erreurs de validation"
 msgid "No validation errors"
 msgstr "Aucune erreur de validation"
 
-msgid "Blank Layer"
-msgstr "Calque vide"
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr "Téléchargement des tuiles : {0}/{1}"
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr "Calque WMS ({0}), téléchargement automatique au zoom {1}"
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr "Calque WMS ({0}), téléchargement au zoom {1}"
-
-msgid "Download visible tiles"
-msgstr "Télécharger les tuiles visibles"
+msgid "Set WMS Bookmark"
+msgstr "Placer un signet WMS"
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
-"La zone demandée est trop grande. Veuillez changer le zoom ou la résolution."
-
-msgid "Change resolution"
-msgstr "Changer la résolution"
-
-msgid "Reload erroneous tiles"
-msgstr "Recharger les tuiles erronées"
-
-msgid "Alpha channel"
-msgstr "Canal alpha"
-
-msgid "Automatically change resolution"
-msgstr "Changer automatiquement la résolution"
-
-msgid "Set WMS Bookmark"
-msgstr "Placer un signet WMS"
+"JOSM utilisera EPSG:4326 pour interroger le serveur, mais les résultats "
+"pourront varier selon le serveur WMS"
 
-msgid "Automatic downloading"
-msgstr "Téléchargement automatique"
+msgid "Correlate to GPX"
+msgstr "Corréler au format GPX"
 
-msgid "Zoom to native resolution"
-msgstr "Zoomer à la résolution native"
+msgid "Invalid timezone"
+msgstr "Le fuseau horaire n’est pas valide"
 
-msgid "Supported projections are: {0}"
-msgstr "Les projections supportées sont : {0}"
+msgid "Invalid offset"
+msgstr "Le décalage n’est pas valide"
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
-msgstr ""
-"La version du fichier WMS n’est pas supportée ; version {0} trouvée, version "
-"{1} attendue"
+msgid "Correlate images with GPX track"
+msgstr "Corréler les images avec la trace GPX"
 
-msgid "Save WMS file"
-msgstr "Enregistrer le fichier WMS"
+msgid "Try Again"
+msgstr "Réessayer"
 
-msgid "Correlate to GPX"
-msgstr "Corréler au format GPX"
+msgid "No images could be matched!"
+msgstr "Aucune image ne correspond !"
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
 msgstr "Fichiers GPX (*.gpx *.gpx.gz)"
@@ -9770,24 +9973,9 @@ msgstr "Fuseau horaire : "
 msgid "Offset:"
 msgstr "Décalage :"
 
-msgid "Correlate images with GPX track"
-msgstr "Corréler les images avec la trace GPX"
-
 msgid "Correlate"
 msgstr "Corréler"
 
-msgid "Invalid timezone"
-msgstr "Le fuseau horaire n’est pas valide"
-
-msgid "Invalid offset"
-msgstr "Le décalage n’est pas valide"
-
-msgid "Try Again"
-msgstr "Réessayer"
-
-msgid "No images could be matched!"
-msgstr "Aucune image ne correspond !"
-
 msgid "No gpx selected"
 msgstr "Aucun GPX sélectionné"
 
@@ -10003,9 +10191,6 @@ msgstr ""
 "\n"
 "heure GPS : {0}"
 
-msgid "JPEG images (*.jpg)"
-msgstr "images JPEG (*.jpg)"
-
 msgid "Show thumbnails"
 msgstr "Afficher les vignettes"
 
@@ -10074,9 +10259,6 @@ msgstr "mètres"
 msgid "Maximum area per request:"
 msgstr "Zone maximale par requête :"
 
-msgid "sq km"
-msgstr "km²"
-
 msgid "Download near:"
 msgstr "Télécharger à proximité :"
 
@@ -10830,15 +11012,15 @@ msgstr "Abandonner les mises à jour et fermer la fenêtre"
 msgid "Save the preferences and close the dialog"
 msgstr "Enregistrer les préférences et fermer la fenêtre"
 
-msgid "Download plugins"
-msgstr "Télécharger les greffons"
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr "Vous devez redémarrer JOSM pour que les réglages prennent effet."
 
 msgid "Would you like to restart now?"
 msgstr "Souhaitez-vous redémarrer maintenant ?"
 
+msgid "Download plugins"
+msgstr "Télécharger les greffons"
+
 msgid "Icon paths:"
 msgstr "Répertoires :"
 
@@ -11703,10 +11885,25 @@ msgstr "Afficher les limites"
 msgid "No bounding box was found for this layer."
 msgstr "Aucune zone délimitée n’a été trouvée pour ce calque."
 
-msgid "imagery fade"
-msgstr "Effacement de l’imagerie"
+msgid "1. Enter getCapabilities URL"
+msgstr "1. Entrez l''URL getCapabilities"
 
-msgid "Fade Color: "
+msgid "2. Enter name for this layer"
+msgstr "2. Entrer un nom pour ce calque"
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr "Nom du cache"
+
+msgid "Object Count"
+msgstr "Nombre d''objets"
+
+msgid "imagery fade"
+msgstr "Effacement de l’imagerie"
+
+msgid "Fade Color: "
 msgstr "Couleur de fond : "
 
 msgid "Fade amount: "
@@ -11721,6 +11918,18 @@ msgstr "Fort"
 msgid "Sharpen (requires layer re-add): "
 msgstr "Contraste : "
 
+msgid "Tile cache directory: "
+msgstr "Répertoire du cache : "
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr "Taille maximale du cache sur le disque (par imagerie) en Mo : "
+
+msgid "Maximum number of objects in memory cache: "
+msgstr "Nombre maximal d''objets en mémoire cache : "
+
+msgid "Tiles zoom offset:"
+msgstr "Décalage du zoom des tuiles :"
+
 msgid "Imagery Preferences"
 msgstr "Paramètres d’imagerie"
 
@@ -11742,6 +11951,9 @@ msgstr "Fournisseurs"
 msgid "Offset bookmarks"
 msgstr "Décalages"
 
+msgid "Cache contents"
+msgstr "Contenu du cache"
+
 msgid "Imagery Background: Default"
 msgstr "Arrière-plan d’’imagerie: défaut"
 
@@ -11784,9 +11996,6 @@ msgstr "L’adresse web du CLUF n’est pas disponible : {0}"
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr "L’adresse web du CLUF n’est pas valide : {0}"
 
-msgid "Projection"
-msgstr "Projection"
-
 msgid "Layer"
 msgstr "Calque"
 
@@ -11811,18 +12020,12 @@ msgstr "Niveau de zoom maximum : "
 msgid "Add to slippymap chooser: "
 msgstr "Ajouter au sélecteur de la carte glissante : "
 
-msgid "Tile cache directory: "
-msgstr "Répertoire du cache : "
-
 msgid "Maximum concurrent downloads: "
 msgstr "Nombre maximum de téléchargements parallèles : "
 
 msgid "Maximum concurrent downloads per host: "
 msgstr "Nombre maximum de téléchargements simultanés par hôte: "
 
-msgid "Maximum elements in disk cache: "
-msgstr "Nombre maximum d’éléments du cache sur le disque : "
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
@@ -11830,20 +12033,11 @@ msgstr ""
 "Le calque ne supporte aucune projection de JOSM, vous ne pouvez pas "
 "l’utiliser."
 
-msgid "Downloader:"
-msgstr "Outil de téléchargement :"
-
 msgid "Simultaneous connections:"
 msgstr "Plusieurs connexions :"
 
-msgid "Overlap tiles"
-msgstr "Tuiles se chevauchant"
-
-msgid "% of east:"
-msgstr "% de l’Est :"
-
-msgid "% of north:"
-msgstr "% du Nord :"
+msgid "Tile size:"
+msgstr "Taille de la tuile:"
 
 msgid "Auto save enabled"
 msgstr "Activer la sauvegarde automatique"
@@ -12869,6 +13063,14 @@ msgstr "Appliquer les attributs"
 msgid "New relation"
 msgstr "Nouvelle relation"
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] "Modifier {0} objet"
@@ -12987,6 +13189,9 @@ msgstr "Afficher la fenêtre de recherche par attribut"
 msgid "Search presets"
 msgstr "Préreglages de recherche"
 
+msgid "Presets"
+msgstr "Attributs"
+
 msgid "Search for objects by preset"
 msgstr "Rechercher des objets par attribut"
 
@@ -13010,7 +13215,7 @@ msgid "Adjustable {0} not registered yet."
 msgstr "Le réglage {0} n’est pas encore enregistré."
 
 msgid "Some of the key listeners forgot to remove themselves: {0}"
-msgstr ""
+msgstr "Certains des auditeurs principaux ont oublié de se retirer : {0}"
 
 msgid "Some of the key modifier listeners forgot to remove themselves: {0}"
 msgstr ""
@@ -13300,6 +13505,9 @@ msgstr "<html>Impossible de lire les fichiers.<br>Erreur :<br>{0}</html>"
 msgid "GeoJSON Files"
 msgstr "Fichiers GeoJSON"
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr "Calque ''{0}'' non supporté"
 
@@ -13918,6 +14126,11 @@ msgstr "Fichiers serveur OSM compressés zip"
 msgid "WMS Files (*.wms)"
 msgstr "Fichiers WMS (*.wms)"
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+"La version du fichier WMS n’est pas supportée ; version {0} trouvée, version "
+"{1} attendue"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -14002,7 +14215,7 @@ msgid "RemoteControl::Accepting remote connections on {0}:{1}"
 msgstr ""
 
 msgid "RemoteControl::Server {0}:{1} stopped."
-msgstr ""
+msgstr "RemoteControl::Server {0}:{1} s''est arrêté."
 
 msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
@@ -14015,7 +14228,7 @@ msgstr ""
 "{1}"
 
 msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
-msgstr ""
+msgstr "RemoteControl::Accepting connexions à distance sécurisé sur {0}:{1}"
 
 msgid "Remote Control has been asked to create a new node."
 msgstr "Il a été demandé au contrôle à distance de créer un nouveau nœud."
@@ -14151,6 +14364,8 @@ msgstr ""
 msgid ""
 "Version ''{0}'' of meta data for marker layer is not supported. Expected: 0.1"
 msgstr ""
+"La version « {0} » des méta-données pour la couche de marqueurs n’est pas "
+"prise en charge. Version attendue : 0.1"
 
 msgid "Layer contains unsaved data - save to file."
 msgstr ""
@@ -14373,6 +14588,20 @@ msgstr[1] ""
 "Le greffon {0} requiert {1} greffons qui n’ont pas été trouvés. Les greffons "
 "manquants sont :"
 
+msgid "Download and restart"
+msgstr "Télécharger et redémarrer"
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] "Cliquer pour télécharger le greffon manquant et redémarrer JOSM."
+msgstr[1] ""
+"Cliquer pour télécharger les greffons manquants et redémarrer JOSM."
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] "Cliquer pour continuer sans ce greffon."
+msgstr[1] "Cliquer pour continuer sans ces greffons."
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -15037,8 +15266,8 @@ msgid ""
 "name ''{1}'' could not be resolved. <br>Please check the API URL in your "
 "preferences and your internet connection."
 msgstr ""
-"<html>?chec lors de l’ouverture d’une connexion avec le serveur distant "
-"<br>''{0}''. <br>Le nom d’hôte ''{1}'' n’a pas p être résolu. <br>Veuillez "
+"Échec lors de l’ouverture d’une connexion avec le serveur distant "
+"<br>''{0}''. <br>Le nom d’hôte ''{1}'' n’a pas pu être résolu. <br>Veuillez "
 "vérifier l’URL de l’API dans vos préférences et votre connexion à Internet."
 
 msgid ""
@@ -15155,10 +15384,11 @@ msgstr ""
 "plaît cliquez sur Oui</ b> dans la fenêtre suivante."
 
 msgid "Removing insecure certificate from {0} keystore: {1}"
-msgstr ""
+msgstr "Certificat non sûr enlever de {0} magazin de cléf: {1}"
 
 msgid "Unable to remove insecure certificate from keystore: {0}"
 msgstr ""
+"Impossible de supprimer le certificat non sûr du magazin de cléf: {0}"
 
 msgid "JOSM localhost certificate found in {0} keystore: {1}"
 msgstr "Certificat local JOSM trouvé dans {0}, magasin {1}"
@@ -15171,6 +15401,13 @@ msgid ""
 "next dialog.<br><br>If unsure, you can also click No then disable HTTPS "
 "support in Remote Control preferences."
 msgstr ""
+"Le contrôle à distance est configuré avec la gestion HTTPS.<br>Cela "
+"nécessite d’ajouter un certificat personnalisé généré par JOSM aux autorités "
+"de certification racine de Windows.<br><br>Windows va vous demander de "
+"confirmer cette opération.<br>Pour activer la gestion correcte de HTTPS, "
+"<b>veuillez sélectionner Oui</b> à la prochaine question.<br><br>Si vous ne "
+"le souhaitez pas, vous pouvez aussi sélectionner Non puis désactiver la "
+"gestion HTTPS dans les préférences de contrôle à distance."
 
 msgid "HTTPS support in Remote Control"
 msgstr "Support du HTTPS dans l’Activation à Distance"
@@ -15577,6 +15814,9 @@ msgstr "Mettre à jour"
 msgid "Update directory listing."
 msgstr "Mettre à jour la liste des fichiers dans ce dossier."
 
+msgid "View"
+msgstr "Affichage"
+
 msgid "Blue:"
 msgstr "Bleu :"
 
@@ -15616,8 +15856,8 @@ msgstr "MapQuest Open Aerial"
 msgid "OpenStreetMap GPS Traces"
 msgstr "Traces GPS OpenStreetMap"
 
-msgid "OpenStreetMap (Mapnik)"
-msgstr "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
+msgstr "OpenStreetMap (Couche standard)"
 
 msgid "skobbler"
 msgstr "skobbler"
@@ -15628,9 +15868,6 @@ msgstr "OpenStreetMap (Mapnik noir et blanc)"
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr "OpenStreetMap (Mapnik, sans étiquettes)"
 
-msgid "skobbler heatmap"
-msgstr "carte de chaleur skobbler"
-
 msgid "OpenCycleMap"
 msgstr "OpenCycleMap"
 
@@ -15650,7 +15887,7 @@ msgid "osmfr"
 msgstr "osmfr"
 
 msgid "OpenPT Map (overlay)"
-msgstr ""
+msgstr "OpenPT Map (revêtement)"
 
 msgid "Strava cycling heatmap"
 msgstr "Carte de chaleur élo de Strava"
@@ -15716,16 +15953,16 @@ msgid "basemap.at"
 msgstr "basemap.at"
 
 msgid "basemap.at Orthofoto"
-msgstr ""
+msgstr "basemap.at Orthophoto"
 
 msgid "Graz: Basiskarte (base map)"
 msgstr "Graz : Basiskarte (carte de base)"
 
 msgid "Tiris: DGM (Terrain model)"
-msgstr ""
+msgstr "Tiris : DGM (modèle de terrain)"
 
 msgid "Tiris: DOM (Surface model)"
-msgstr ""
+msgstr "Tiris : DOM (modèle de surface)"
 
 msgid "Vienna: Mehrzweckkarte (general purpose)"
 msgstr "Vienne : Mehrzweckkarte (cadre général)"
@@ -15737,20 +15974,27 @@ msgid "Vienna: Orthofoto (aerial image)"
 msgstr "Vienne : Orthophoto (image aérienne)"
 
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
-msgstr ""
+msgstr "VoGIS : « Couleurs vraies » 2012 (12 cm)"
+
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr "VoGIS : « Couleurs vraies » Hiver 2015 (20 cm)"
 
 msgid "VoGIS: Flächenwidmungsplan"
-msgstr ""
+msgstr "VoGIS : Plan de zonage"
 
 msgid "VoGIS: DGM (Terrain model)"
-msgstr ""
+msgstr "VoGIS : DGM (modèle de terrain)"
 
 msgid "VoGIS: DOM (Surface model)"
-msgstr ""
+msgstr "VoGIS : DOM (modèle de surface)"
 
 msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
+"Imagerie aérienne AGIV(Landers), couvre aussi la région de Bruxelles (2013)"
+
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
 
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
@@ -15758,6 +16002,9 @@ msgstr ""
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -15777,7 +16024,7 @@ msgid "British Columbia Mosaic"
 msgstr "Mosaïque de la Colombie Britannique"
 
 msgid "Kelowna 2012"
-msgstr ""
+msgstr "Kelowna 2012"
 
 msgid "Kelowna Roads overlay"
 msgstr ""
@@ -15794,12 +16041,18 @@ msgstr "République tchèque RUIAN parcely"
 msgid "Czech pLPIS"
 msgstr "République tchèque pLPIS"
 
-msgid "Fugro (Denmark)"
-msgstr "Fugro (Danemark)"
-
 msgid "Geodatastyrelsen (Denmark)"
 msgstr "Geodatastyrelsen (Danemark)"
 
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
+msgstr ""
+
 msgid "Stevns (Denmark)"
 msgstr "Stevns (Danemark)"
 
@@ -15810,20 +16063,23 @@ msgid "Estonia Basemap (Maaamet)"
 msgstr "Carte de base estonienne (Maaamet)"
 
 msgid "Estonia Ortho (Maaamet)"
-msgstr ""
+msgstr "Ortho estonienne (Maaamet)"
 
 msgid "Estonia Hillshade (Maaamet)"
 msgstr ""
 
 msgid "Estonia Cadastre (Maaamet)"
-msgstr ""
+msgstr "Cadastre estonien (Maaamet)"
 
 msgid "Estonia Forestry (Maaamet)"
-msgstr ""
+msgstr "Sylviculture estonienne (Maaamet)"
 
 msgid "BANO"
 msgstr "BANO"
 
+msgid "BD Carthage"
+msgstr "BD Carthage"
+
 msgid "Bordeaux - 2012"
 msgstr "Bordeaux - 2012"
 
@@ -15848,8 +16104,8 @@ msgstr "Géobretagne - Morbihan 2010"
 msgid "Géolittoral - Orthophotos 2000"
 msgstr "Géolittoral - Orthophotos 2000"
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
-msgstr "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
+msgstr "Géolittoral V2 - Orthophotos 2011-2014"
 
 msgid "Géolittoral - Sentiers"
 msgstr "Géolittoral - Sentiers"
@@ -15861,7 +16117,10 @@ msgid "Loire-Atlantique - Orthophotos 2012 - 20 cm"
 msgstr "Loire-Atlantique - Orthophotos 2012 - 20 cm"
 
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
-msgstr ""
+msgstr "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
+
+msgid "Route 500™©®"
+msgstr "Route 500™©®"
 
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr "Toulouse - Orthophotoplan 2013"
@@ -15875,12 +16134,6 @@ msgstr "Toulouse - Orthophotoplan 2007"
 msgid "Tours - Orthophotos 2013"
 msgstr "Tours - Orthophotos 2013"
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr "Tours - Orthophotos 2008-2010"
-
-msgid "Tours - Orthophotos 2008"
-msgstr "Tours - Orthophotos 2008"
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -15901,7 +16154,10 @@ msgid "Hamburg (20 cm)"
 msgstr "Hambourg (20 cm)"
 
 msgid "Hamburg (DK5)"
-msgstr "Hamburg (DK5)"
+msgstr "Hambourg (DK5)"
+
+msgid "Bavaria (80 cm)"
+msgstr "Bavière (80 cm)"
 
 msgid "Bavaria (2 m)"
 msgstr "Bavière (2 m)"
@@ -15910,7 +16166,7 @@ msgid "Stuttgart (Luftbild)"
 msgstr "Stuttgart (vue aérienne)"
 
 msgid "Erlangen Luftbild (2013 6,25 cm)"
-msgstr ""
+msgstr "Erlangen vue aérienne (2013 6,25 cm)"
 
 msgid "Erlangen 2011 Luftbild (5,0 cm)"
 msgstr "Erlangen 2011  vue aérienne (5,0 cm)"
@@ -15937,17 +16193,14 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr "Maps4BW (LGL-BW, www.lgl-bw.de)"
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
-msgstr ""
+msgid "NRW-Atlas: ALKIS"
+msgstr "NRW-Atlas: ALKIS"
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
-msgstr ""
+msgstr "NRW-Atlas: Digitale GrundKarte 1:5000"
 
 msgid "NRW-Atlas: Luftbilder"
-msgstr ""
+msgstr "NRW-Atlas: Luftbilder"
 
 msgid "NRW-Atlas: Topographische Karte 1:10000"
 msgstr "NRW-Atlas : Carte topographique 1:10000"
@@ -15959,7 +16212,7 @@ msgid "Drone Imagery (Haiti)"
 msgstr "Imagerie drone (Haïti)"
 
 msgid "Drone Imagery 2014 (Haiti)"
-msgstr "Imagerie Drone 2014 (Haïti)"
+msgstr "Imagerie drone 2014 (Haïti)"
 
 msgid "Ireland British War Office 1:25k GSGS 3906"
 msgstr "Irlande Bureau de la guerre britannique 1:25k GSGS 3906"
@@ -15968,7 +16221,13 @@ msgid "Ireland British War Office One-Inch 1941-43 GSGS 4136"
 msgstr "Irlande Bureau de la guerre britannique One-Inch 1941-43 GSGS 4136"
 
 msgid "Ireland Bartholomew Quarter-Inch 1940"
-msgstr ""
+msgstr "Ireland Bartholomew Quarter-Inch 1940"
+
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr "Ireland Civil Parishes and Baronies - Memorial Atlas"
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr "Memorial Atlas of Ireland (1901) L.J. Richards"
 
 msgid "OSMIE Townlands"
 msgstr ""
@@ -15985,60 +16244,6 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
-msgstr "Irlande EEA GMES Atlas urbain"
-
-msgid "Ireland EEA CORINE 2006"
-msgstr "Irlande EEA CORINE 2006"
-
-msgid "Antrim Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
-msgstr ""
-
-msgid "Carlow Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Clare Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Dublin Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Fermanagh Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Galway Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Kildare Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Leitrim Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Longford Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Offaly Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Sligo Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Tyrone Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Westmeath Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Wexford Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Wicklow Civil Parishes and Baronies"
-msgstr ""
-
 msgid "Lodi - Italy"
 msgstr "Lodi - Italie"
 
@@ -16058,10 +16263,10 @@ msgid "PCN 2012 - Italy"
 msgstr "PCN 2012 - Italie"
 
 msgid "South Tyrol Orthofoto 2011"
-msgstr ""
+msgstr "Orthophotographie Sud Tyrol 2011"
 
 msgid "South Tyrol Topomap"
-msgstr ""
+msgstr "Carte topographique Sud Tyrol"
 
 msgid "USSR - Latvia"
 msgstr "USSR - Lettonie"
@@ -16072,6 +16277,9 @@ msgstr "50 cm ortho - Lettonie"
 msgid "20cm ortho - Latvia - Coastline"
 msgstr "20 cm ortho - Lettonie - Ligne de côte"
 
+msgid "1.cikla ortofotokarte - Latvia"
+msgstr ""
+
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Lithuanie)"
 
@@ -16087,11 +16295,14 @@ msgstr "Luxembourg Inspire Chemin de fer"
 msgid "Luxembourg Inspire Roads"
 msgstr "Luxembourg Inspire Routes"
 
+msgid "Luxembourg Inspire Water"
+msgstr ""
+
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Delta du Niger Oct 2012 Landsat"
 
 msgid "Gaza Strip - Pléiades - 2014/07/06"
-msgstr ""
+msgstr "Bande de Gaza - Pléiades - 2014/07/06"
 
 msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
@@ -16102,9 +16313,15 @@ msgstr "Pangasinan/Bulacan (Phillippines HiRes)"
 msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr "Geoportal 2 : Ortofotomapa (image aérienne)"
 
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgstr ""
+
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
+msgid "Geoportal 2: ISOK hillshade"
+msgstr ""
+
 msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr "Będzin : Ortofotomapa 2013 (image aérienne)"
 
@@ -16114,15 +16331,27 @@ msgstr "Będzin: Budynki (bâtiments)"
 msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr "Bytom : Ortofotomapa 2012 (image aérienne)"
 
+msgid "Bytom: Fotoplan 2014 (aerial image)"
+msgstr ""
+
 msgid "Bytom: Budynki (buildings)"
 msgstr "Bytom : Budynki (bâtiments)"
 
 msgid "Chorzów: Budynki (buildings)"
 msgstr "Chorzów : Budynki (bâtiments)"
 
+msgid "Częstochowa: Budynki (buildings)"
+msgstr "Częstochowa: Budynki (bâtiments)"
+
 msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr "Częstochowa : Ortofotomapa 2011 (image aérienne)"
 
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgstr ""
+
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgstr ""
+
 msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr "Gliwice : Ortofotomapa 2013 (image aérienne)"
 
@@ -16130,11 +16359,47 @@ msgid "Gliwice: Budynki (buildings)"
 msgstr "Gliwice: Budynki (bâtiments)"
 
 msgid "Katowice: Ortofotomapa (aerial image)"
-msgstr "Katowice : Ortofotomapa"
+msgstr "Katowice: Ortofotomapa (image aérienne)"
+
+msgid "Katowice: Budynki (buildings)"
+msgstr "Katowice: Budynki (bâtiments)"
+
+msgid "Łódź: Budynki (buildings)"
+msgstr "Łódź: Budynki (bâtiments)"
 
 msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr "Łódź : Ortofotomapa (image aérienne)"
 
+msgid "Powiat dębicki: Budynki (buildings)"
+msgstr "Powiat dębicki: Budynki (bâtiments)"
+
+msgid "Powiat lubaczowski: Budynki (buildings)"
+msgstr "Powiat lubaczowski: Budynki (bâtiments)"
+
+msgid "Powiat łańcucki: Budynki (buildings)"
+msgstr "Powiat łańcucki: Budynki (bâtiments)"
+
+msgid "Powiat poznański: Budynki (buildings)"
+msgstr "Powiat poznański: Budynki (bâtiments)"
+
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgstr ""
+
+msgid "Powiat rzeszowski: Budynki (buildings)"
+msgstr "Powiat rzeszowski: Budynki (bâtiments)"
+
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgstr "Powiat rzeszowski: Ortofotomapa (image aérienne)"
+
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr "Powiat stalowowolski: Budynki (bâtiments)"
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr "Przemyśl: Budynki (bâtiments)"
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgstr "Przemyśl: Ortofotomapa (image aérienne)"
+
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
 msgstr "Ruda Śląska : Ortofotomapa (image aérienne)"
 
@@ -16147,14 +16412,23 @@ msgstr "Rzeszów: Budynki (bâtiments)"
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr "Siemianowice Śląskie: Ortofotomapa (image aérienne)"
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr "Świętochłowice: Ortofotomapa 2009 (image aérienne)"
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr "Zabrze: Ortofotomapa 2011 (image aérienne)"
 
 msgid "trail.pl: Szlaki (paths)"
-msgstr ""
+msgstr "trail.pl: Szlaki (chemins)"
 
 msgid "ScanEx IRS"
 msgstr ""
@@ -16175,10 +16449,10 @@ msgid "Freemap.sk Ski"
 msgstr "Ski Freemap.sk"
 
 msgid "Katastrálna mapa Slovenska (KaPor, 2010-04)"
-msgstr "carte de Katastrálna, Slovénie (KaPor, 04-2010)"
+msgstr "Carte de Katastrálna, Slovénie (KaPor, 04-2010)"
 
 msgid "Katastrálna mapa Slovenska (KaPor, 2011-05)"
-msgstr "carte de Katastrálna, Slovénie (KaPor, 05-2011)"
+msgstr "Carte de Katastrálna, Slovénie (KaPor, 05-2011)"
 
 msgid "Slovakia EEA GMES Urban Atlas"
 msgstr "Slovaquie EEA GMES Atlas urbain"
@@ -16214,10 +16488,10 @@ msgid "ITACyL - Castile and León"
 msgstr "ITACyL - Castille-et-León"
 
 msgid "IDEIB - Balearic Islands"
-msgstr "IDEIB - Îles des Baléares"
+msgstr "IDEIB - Îles Baléares"
 
 msgid "GRAFCAN Express - Canary Islands"
-msgstr "GRAFCAN Express - Îles des Canaries"
+msgstr "GRAFCAN Express - Îles Canaries"
 
 msgid "Kanton Aargau 25cm (AGIS 2011)"
 msgstr ""
@@ -16256,7 +16530,7 @@ msgid "Canton de Fribourg 50cm (2005)"
 msgstr "Canton de Fribourg 50 cm (2005)"
 
 msgid "Stadt Bern 10cm/25cm (2012)"
-msgstr ""
+msgstr "Ville de Berne 10cm/25cm (2012)"
 
 msgid "HEIG-VD / Orthophoto Yverdon-les-Bains 25cm (2007)"
 msgstr "HEIG-VD / Orthophoto Yverdon-les-Bains 25 cm (2007)"
@@ -16265,7 +16539,7 @@ msgid "Ville de Nyon - Orthophoto 2010 HD 5cm/pi"
 msgstr "Ville de Nyon - Orthophoto 2010 HD 5 cm/pi"
 
 msgid "Cartoriviera - Orthophoto 2012"
-msgstr ""
+msgstr "Cartoriviera - Orthophoto 2012"
 
 msgid "SIGIP - Orthophoto 2012"
 msgstr "SIGIP - Orthophoto 2012"
@@ -16279,6 +16553,21 @@ msgstr "Bonvillars Orthophoto 2013"
 msgid "Fiez Orthophoto 2013"
 msgstr "Fiez Orthophoto 2013"
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr "Délimitations des villages taiwanais"
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -16294,7 +16583,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -16304,7 +16593,7 @@ msgid "NC Latest Orthoimagery"
 msgstr ""
 
 msgid "U.S. Forest Service roads"
-msgstr ""
+msgstr "Service forestier des routes (États-Unis)"
 
 msgid "Ukraine - Orthophotomaps 2012"
 msgstr "Ukraine - Orthophoto 2012"
@@ -16346,73 +16635,73 @@ msgid "NLS - Bartholomew Half Inch, 1897-1907"
 msgstr ""
 
 msgid "OS Town Plans, Aberdeen 1866-1867 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Aberdeen 1866-1867 (NLS)"
 
 msgid "OS Town Plans, Airdrie 1858 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Airdrie 1858 (NLS)"
 
 msgid "OS Town Plans, Alexandria 1859 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Alexandria 1859 (NLS)"
 
 msgid "OS Town Plans, Alloa 1861-1862 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Alloa 1861-1862 (NLS)"
 
 msgid "OS Town Plans, Annan 1859 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Annan 1859 (NLS)"
 
 msgid "OS Town Plans, Arbroath 1858 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Arbroath 1858 (NLS)"
 
 msgid "OS Town Plans, Ayr 1855 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Ayr 1855 (NLS)"
 
 msgid "OS Town Plans, Berwick-upon-Tweed 1852 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Berwick-upon-Tweed 1852 (NLS)"
 
 msgid "OS Town Plans, Brechin 1862 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Brechin 1862 (NLS)"
 
 msgid "OS Town Plans, Burntisland 1894 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Burntisland 1894 (NLS)"
 
 msgid "OS Town Plans, Campbelton 1865 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Campbelton 1865 (NLS)"
 
 msgid "OS Town Plans, Coatbridge 1858 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Coatbridge 1858 (NLS)"
 
 msgid "OS Town Plans, Cupar 1854 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Cupar 1854 (NLS)"
 
 msgid "OS Town Plans, Cupar 1893-1894 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Cupar 1893-1894 (NLS)"
 
 msgid "OS Town Plans, Dalkeith 1852 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Dalkeith 1852 (NLS)"
 
 msgid "OS Town Plans, Dalkeith 1893 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Dalkeith 1893 (NLS)"
 
 msgid "OS Town Plans, Dumbarton 1859 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Dumbarton 1859 (NLS)"
 
 msgid "OS Town Plans, Dumfries 1850 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Dumfries 1850 (NLS)"
 
 msgid "OS Town Plans, Dumfries 1893 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Dumfries 1893 (NLS)"
 
 msgid "OS Town Plans, Dundee 1857-1858 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Dundee 1857-1858 (NLS)"
 
 msgid "OS Town Plans, Dundee 1870-1872 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Dundee 1870-1872 (NLS)"
 
 msgid "OS Town Plans, Dunfermline 1854 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Dunfermline 1854 (NLS)"
 
 msgid "OS Town Plans, Dunfermline 1894 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Dunfermline 1894 (NLS)"
 
 msgid "OS Town Plans, Edinburgh 1849-1851 (NLS)"
 msgstr ""
@@ -16427,154 +16716,154 @@ msgstr ""
 "OS Plans de ville, Édimbourg 1893-1894 (Bibliothèque nationale d''Écosse)"
 
 msgid "OS Town Plans, Elgin 1868 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Elgin 1868 (NLS)"
 
 msgid "OS Town Plans, Falkirk 1858-1859 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Falkirk 1858-1859 (NLS)"
 
 msgid "OS Town Plans, Forfar 1860-1861 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Forfar 1860-1861 (NLS)"
 
 msgid "OS Town Plans, Forres 1868 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Forres 1868 (NLS)"
 
 msgid "OS Town Plans, Galashiels 1858 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Galashiels 1858 (NLS)"
 
 msgid "OS Town Plans, Girvan 1857 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Girvan 1857 (NLS)"
 
 msgid "OS Town Plans, Glasgow 1857-1858 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Glasgow 1857-1858 (NLS)"
 
 msgid "OS Town Plans, Glasgow 1892-1894 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Glasgow 1892-1894 (NLS)"
 
 msgid "OS Town Plans, Greenock 1857 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Greenock 1857 (NLS)"
 
 msgid "OS Town Plans, Haddington 1853 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Haddington 1853 (NLS)"
 
 msgid "OS Town Plans, Haddington 1893 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Haddington 1893 (NLS)"
 
 msgid "OS Town Plans, Hamilton 1858 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Hamilton 1858 (NLS)"
 
 msgid "OS Town Plans, Hawick 1857-1858 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Hawick 1857-1858 (NLS)"
 
 msgid "OS Town Plans, Inverness 1867-1868 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Inverness 1867-1868 (NLS)"
 
 msgid "OS Town Plans, Irvine 1859 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Irvine 1859 (NLS)"
 
 msgid "OS Town Plans, Jedburgh 1858 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Jedburgh 1858 (NLS)"
 
 msgid "OS Town Plans, Kelso 1857 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Kelso 1857 (NLS)"
 
 msgid "OS Town Plans, Kilmarnock 1857-1859 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Kilmarnock 1857-1859 (NLS)"
 
 msgid "OS Town Plans, Kirkcaldy 1855 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Kirkcaldy 1855 (NLS)"
 
 msgid "OS Town Plans, Kirkcaldy 1894 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Kirkcaldy 1894 (NLS)"
 
 msgid "OS Town Plans, Kirkcudbright 1850 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Kirkcudbright 1850 (NLS)"
 
 msgid "OS Town Plans, Kirkcudbright 1893 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Kirkcudbright 1893 (NLS)"
 
 msgid "OS Town Plans, Kirkintilloch 1859 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Kirkintilloch 1859 (NLS)"
 
 msgid "OS Town Plans, Kirriemuir 1861 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Kirriemuir 1861 (NLS)"
 
 msgid "OS Town Plans, Lanark 1858 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Lanark 1858 (NLS)"
 
 msgid "OS Town Plans, Linlithgow 1856 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Linlithgow 1856 (NLS)"
 
 msgid "OS Town Plans, Mayole 1856-1857 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Mayole 1856-1857 (NLS)"
 
 msgid "OS Town Plans, Montrose 1861-1862 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Montrose 1861-1862 (NLS)"
 
 msgid "OS Town Plans, Musselburgh 1853 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Musselburgh 1853 (NLS)"
 
 msgid "OS Town Plans, Musselburgh 1893 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Musselburgh 1893 (NLS)"
 
 msgid "OS Town Plans, Nairn 1867-1868 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Nairn 1867-1868 (NLS)"
 
 msgid "OS Town Plans, Oban 1867-1868 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Oban 1867-1868 (NLS)"
 
 msgid "OS Town Plans, Peebles 1856 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Peebles 1856 (NLS)"
 
 msgid "OS Town Plans, Perth 1860 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Perth 1860 (NLS)"
 
 msgid "OS Town Plans, Peterhead 1868 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Peterhead 1868 (NLS)"
 
 msgid "OS Town Plans, Port Glasgow 1856-1857 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Port Glasgow 1856-1857 (NLS)"
 
 msgid "OS Town Plans, Portobello 1893-1894 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Portobello 1893-1894 (NLS)"
 
 msgid "OS Town Plans, Rothesay 1862-1863 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Rothesay 1862-1863 (NLS)"
 
 msgid "OS Town Plans, Selkirk 1865 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Selkirk 1865 (NLS)"
 
 msgid "OS Town Plans, St Andrews 1854 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, St Andrews 1854 (NLS)"
 
 msgid "OS Town Plans, St Andrews 1893 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, St Andrews 1893 (NLS)"
 
 msgid "OS Town Plans, Stirling 1858 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Stirling 1858 (NLS)"
 
 msgid "OS Town Plans, Stonehaven 1864 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Stonehaven 1864 (NLS)"
 
 msgid "OS Town Plans, Stranraer 1847 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Stranraer 1847 (NLS)"
 
 msgid "OS Town Plans, Stranraer 1863-1877 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Stranraer 1863-1877 (NLS)"
 
 msgid "OS Town Plans, Stranraer 1893 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Stranraer 1893 (NLS)"
 
 msgid "OS Town Plans, Strathaven 1858 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Strathaven 1858 (NLS)"
 
 msgid "OS Town Plans, Wick 1872 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Wick 1872 (NLS)"
 
 msgid "OS Town Plans, Wigtown 1848 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Wigtown 1848 (NLS)"
 
 msgid "OS Town Plans, Wigtown 1894 (NLS)"
-msgstr ""
+msgstr "Plans de ville Ordnance Survey, Wigtown 1894 (NLS)"
 
 msgid "Landsat 233055"
 msgstr "Landsat 233055"
@@ -16640,8 +16929,16 @@ msgstr ""
 "Implémente une ligne de commande et permet la création de commandes "
 "personnalisées. Voir le lien pour les commandes standard (arc, circle etc.)"
 
-msgid "(Warning: Experimental!) Tool for conflating (merging) data."
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
 msgstr ""
+"Fournit la bibliothèque de fonctions communes pour la gestion d’images. Ne "
+"devrait pas être installé directement par les utilisateurs, mais comme "
+"dépendances d’autres greffons."
+
+msgid "(Warning: Experimental!) Tool for conflating (merging) data."
+msgstr "(Attention : expérimental !) Outil d’assemblage de données."
 
 msgid "Create a grid of ways."
 msgstr "Crée un réseau de chemins."
@@ -16742,14 +17039,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr "Style WMSPlugin ajustement de lʼimagerie mapmode"
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-"Ce greffon expérimental permet à JOSM de stocker le cache des tuiles dans un "
-"fichier de base de données, et non pas dans un important répertoire de "
-"stockage."
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -16824,9 +17113,9 @@ msgstr ""
 "pouvez créer, fermer, invalider, ré-ouvrir et commenter les signalements en "
 "utilisant ce greffon."
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
-"Donne la possibilité de travailler avec des images hébergées sur "
+"Permet à l’utilisateur de travailler avec des images hébergées par "
 "mapillary.com"
 
 msgid ""
@@ -16846,10 +17135,6 @@ msgstr ""
 "Ajoute une interdiction de tourner sur 4 ou 5 chemins (interdiction de type "
 "\"Michigan\")"
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-"Simplifie le téléchargement depuis différentes APIs en lecture seule."
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 "Permet d’’attribuer en une seule fois des attributs à tous les objets d’’une "
@@ -16950,6 +17235,16 @@ msgid ""
 msgstr ""
 "Facilite la cartographie et l’édition des itinéraires de transport public."
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+"Le greffon RasterFilters permet de choisir et d’appliquer des filtres "
+"d’image à certains calques"
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr "Outil de création et d’édition de relations et de multipolygones."
 
@@ -16962,6 +17257,10 @@ msgid ""
 "properties window. Available country presets: Belgium, Germany, Poland, "
 "Slovakia, Spain."
 msgstr ""
+"Greffon pour étiqueter des objets en fonction d’une sélection de signaux "
+"routiers. La boîte de dialogue s’ouvre en sélectionnant une petite icône "
+"dans le coin supérieur droit de la fenêtre des propriétés. Ensemble de pays "
+"disponibles : Allemagne, Belgique, Espagne, Pologne, Slovaquie."
 
 msgid ""
 "Renders routes (bus, hiking trails, bicycle routes, ..). Route types must be "
@@ -16994,6 +17293,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr "Fonctions d''édition pour OpenSeaMap"
 
+msgid "Allows to draw splines"
+msgstr "Permet de dessiner des splines"
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -17094,9 +17396,6 @@ msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 "Permet la recherche de points de passage importés à partir d’un fichier gpx"
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr "Sélectionne une séquence de chemins connectés non ramifiés"
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 "Facilite la mise en relation des éléments OSM avec leur article Wikipedia"
@@ -17189,7 +17488,7 @@ msgid "very_bad"
 msgstr "Très mauvaise"
 
 msgid "High Clearance: light duty off-road vehicle"
-msgstr ""
+msgstr "Garde haute : véhicules tout terrain standard"
 
 msgid "horrible"
 msgstr "horrible"
@@ -17198,7 +17497,7 @@ msgid "Off-Road: heavy duty off-road vehicle"
 msgstr "Tout terrain : véhicules tout terrain spécialisés"
 
 msgid "very_horrible"
-msgstr ""
+msgstr "Très horrible (!)"
 
 msgid "Specialized off-road: tractor, ATV"
 msgstr ""
@@ -17484,7 +17783,7 @@ msgstr "multi"
 
 msgctxt "sport"
 msgid "archery"
-msgstr "Archerie"
+msgstr "tir à l’arc"
 
 msgctxt "sport"
 msgid "athletics"
@@ -17507,6 +17806,14 @@ msgid "basketball"
 msgstr "basketball"
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr "beach-volley"
+
+msgctxt "sport"
+msgid "billiards"
+msgstr "billard"
+
+msgctxt "sport"
 msgid "boules"
 msgstr "pétanque"
 
@@ -17531,10 +17838,6 @@ msgid "cricket"
 msgstr "cricket"
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr "filets de cricket"
-
-msgctxt "sport"
 msgid "croquet"
 msgstr "croquet"
 
@@ -17551,6 +17854,10 @@ msgid "equestrian"
 msgstr "Equitation"
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr "hockey sur gazon"
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr "sports gaéliques"
 
@@ -17567,12 +17874,24 @@ msgid "handball"
 msgstr "handball"
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
+msgstr "Course hippique"
+
+msgctxt "sport"
+msgid "ice_hockey"
 msgstr "hockey sur glace"
 
 msgctxt "sport"
-msgid "horse_racing"
-msgstr "Course hippique"
+msgid "karting"
+msgstr "karting"
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
+msgstr "motocross"
 
 msgctxt "sport"
 msgid "motor"
@@ -17587,6 +17906,10 @@ msgid "racquet"
 msgstr "raquette"
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr "rugby à XIII"
 
@@ -17599,6 +17922,10 @@ msgid "running"
 msgstr "Course à pied"
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr "Stand de tir / Ball-trap"
 
@@ -17626,6 +17953,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr "tennis"
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr "volley"
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr "Payant"
 
@@ -17739,7 +18078,7 @@ msgid "evergreen"
 msgstr "persistant"
 
 msgid "Plants that are never entirely without green foliage."
-msgstr ""
+msgstr "Plantes à feuillage persistant."
 
 msgid "semi_deciduous"
 msgstr "semi-caduc"
@@ -17748,6 +18087,9 @@ msgid ""
 "Plants that lose their foliage for a very short period, when old leaves fall "
 "off and new foliage growth is starting."
 msgstr ""
+"Plantes qui perdent leur feuillage pendant une très courte période, lorsque "
+"les anciennes feuilles tombent et que le nouveau feuillage commence à "
+"croitre."
 
 msgid "semi_evergreen"
 msgstr "semi-persistant"
@@ -17756,9 +18098,11 @@ msgid ""
 "Plants that lose most, but not all, of their foliage for a fraction of the "
 "year."
 msgstr ""
+"Plantes qui perdent la quasi-totalité, mais pas tout, de leur feuillage "
+"pendant une partie de l’année."
 
 msgid "Habitat with evergreen and deciduous vegetation."
-msgstr ""
+msgstr "Habitat de végétation à feuillage persistant et caduc."
 
 msgid "bahai"
 msgstr "bahaïsme"
@@ -17963,7 +18307,7 @@ msgid "culvert"
 msgstr "buse"
 
 msgid "Water access rules:"
-msgstr ""
+msgstr "Règles d''accès à l''eau :"
 
 msgid "Ship"
 msgstr "Navire"
@@ -18019,6 +18363,9 @@ msgstr "Bretelle d’accès à une route tertiaire"
 msgid "Unclassified"
 msgstr "Route mineure"
 
+msgid "Street has no name"
+msgstr "La rue n’a pas de nom"
+
 msgid "Passing Places"
 msgstr "Aires de croisement"
 
@@ -18097,6 +18444,9 @@ msgstr ""
 "Voie de détresse pour camion et autres véhicules en cas de perte du système "
 "de freinage"
 
+msgid "Raceway"
+msgstr "Circuit"
+
 msgid "Road (Unknown Type)"
 msgstr "Route (type inconnu)"
 
@@ -18257,11 +18607,11 @@ msgstr "dans les deux sens"
 
 msgctxt "overtaking"
 msgid "forward"
-msgstr ""
+msgstr "avancer"
 
 msgctxt "overtaking"
 msgid "backward"
-msgstr ""
+msgstr "reculer"
 
 msgctxt "overtaking"
 msgid "no"
@@ -18649,6 +18999,12 @@ msgstr "Radar fixe"
 msgid "Traffic Mirror"
 msgstr "Miroir de circulation"
 
+msgid "Highway milestone"
+msgstr "Borne kilométrique d’autoroute"
+
+msgid "Distance (kilometers)"
+msgstr "Distance (kilomètres)"
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr "Jonction routière"
@@ -18823,7 +19179,7 @@ msgid "Passageways"
 msgstr "Passages couverts"
 
 msgid "Building Passage"
-msgstr "Passage couvert par bâtit"
+msgstr "Passage couvert par bâti"
 
 msgid "Arcade"
 msgstr "Arcade"
@@ -18840,8 +19196,13 @@ msgstr "Passage sous arcade"
 msgid "Avalanche Protector"
 msgstr "Galerie pare-neige"
 
+msgctxt "main group"
+msgid "Water"
+msgstr "Eau"
+
+msgctxt "sub group"
 msgid "Water"
-msgstr "Étendue d''eau"
+msgstr "Hydrographie"
 
 msgid "Drain"
 msgstr "Canal d’évacuation"
@@ -18895,6 +19256,10 @@ msgstr "Réservoir"
 msgid "Covered Reservoir"
 msgstr "Réservoir couvert"
 
+msgctxt "natural"
+msgid "Water"
+msgstr "Plan d''eau"
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr "De l''eau stagnante, comme un lac ou un étang."
 
@@ -18911,7 +19276,7 @@ msgid "lagoon"
 msgstr "lagune"
 
 msgid "oxbow"
-msgstr "Bras-mort"
+msgstr "bras-mort"
 
 msgid "pond"
 msgstr "étang"
@@ -19000,6 +19365,8 @@ msgid ""
 "A steep rock face exposure, with a significant vertical, or near vertical "
 "(leave the lower face to the right of the way)."
 msgstr ""
+"Une paroi rocheuse abrupte, avec une pente verticale ou quasi-verticale (le "
+"pied de la falaise doit être à droite du tracé)."
 
 msgid "Shipping"
 msgstr "Navigation"
@@ -19024,7 +19391,7 @@ msgstr "vélo/bicyclette"
 
 msgctxt "cargo"
 msgid "hgv"
-msgstr "Poids lourd"
+msgstr "poids lourd"
 
 msgctxt "cargo"
 msgid "passengers;vehicle"
@@ -19037,11 +19404,125 @@ msgid "Marina"
 msgstr "Marina"
 
 msgid "Dump Station"
-msgstr ""
+msgstr "Station de vidange"
 
 msgid "public"
 msgstr "public"
 
+msgid "Marine Fuel"
+msgstr "Essence Marine"
+
+msgid "Agip"
+msgstr "Agip"
+
+msgid "Aral"
+msgstr "Aral"
+
+msgid "Avia"
+msgstr "Avia"
+
+msgid "BP"
+msgstr "BP"
+
+msgid "Chevron"
+msgstr "Chevron"
+
+msgid "Citgo"
+msgstr "Citgo"
+
+msgid "Eni"
+msgstr "Eni"
+
+msgid "Esso"
+msgstr "Esso"
+
+msgid "Exxon"
+msgstr "Exxon"
+
+msgid "Gulf"
+msgstr "Gulf"
+
+msgid "Mobil"
+msgstr "Mobil"
+
+msgid "OMV"
+msgstr "OMV"
+
+msgid "Petro-Canada"
+msgstr "Petro-Canada"
+
+msgid "Pioneer"
+msgstr "Pioneer"
+
+msgid "Q8"
+msgstr "Q8"
+
+msgid "Repsol"
+msgstr "Repsol YPF"
+
+msgid "Shell"
+msgstr "Shell"
+
+msgid "Socar"
+msgstr "Socar"
+
+msgid "Statoil"
+msgstr "Statoil"
+
+msgid "Sunoco"
+msgstr "Sunoco"
+
+msgid "Tamoil"
+msgstr "Tamoil"
+
+msgid "Texaco"
+msgstr "Texaco"
+
+msgid "Total"
+msgstr "Total"
+
+msgid "Independent"
+msgstr "indépendant"
+
+msgid "Fuel types:"
+msgstr "Types de carburants :"
+
+msgid "Diesel"
+msgstr "Gazole"
+
+msgid "Bio Diesel"
+msgstr "Biogazole"
+
+msgid "Octane 80"
+msgstr "Indice d’octane de 80"
+
+msgid "Octane 91"
+msgstr "Indice d’octane de 91"
+
+msgid "Octane 92"
+msgstr "Indice d’octane de 92"
+
+msgid "Octane 95"
+msgstr "Indice d’octane de 95"
+
+msgid "Octane 98"
+msgstr "Indice d’octane de 98"
+
+msgid "Octane 100"
+msgstr "Indice d’octane de 100"
+
+msgid "E10 (10% Ethanol mix)"
+msgstr "E10 (mélange à 10% d’éthanol)"
+
+msgid "E85 (85% Ethanol mix)"
+msgstr "E85 (Superéthanol)"
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr "GPL (Gaz de Pétrole Liquéfié)"
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr "GNV (Gaz Naturel pour Véhicules)"
+
 msgid "Pier"
 msgstr "Jetée, ponton"
 
@@ -19158,6 +19639,9 @@ msgstr "Buttoir"
 msgid "Railway Switch"
 msgstr "Aiguillage"
 
+msgid "Railway milestone"
+msgstr "Borne kilométrique de voie ferrée"
+
 msgid "Aerialway"
 msgstr "Remontées mécaniques"
 
@@ -19247,113 +19731,41 @@ msgstr "train"
 msgid "tram"
 msgstr "tramway"
 
-msgid "metro"
-msgstr "métro"
-
-msgid "ferry"
-msgstr "ferry"
-
-msgid "Capacity (overall)"
-msgstr "Capacité"
-
-msgid "Spaces for Disabled"
-msgstr "Emplacements pour handicapés"
-
-msgid "Spaces for Women"
-msgstr "Emplacements pour femmes"
-
-msgid "Spaces for Parents"
-msgstr "Emplacements pour parents"
-
-msgid "See the Wiki for other capacity:[types]=*."
-msgstr "Voir le Wiki pour les autres types de capacity:[types]=*."
-
-msgid "Parking Space"
-msgstr "Places réservées"
-
-msgid "Capacity"
-msgstr "Capacité"
-
-msgid "Covered (with roof)"
-msgstr "Couvert"
-
-msgid "Parking Entrance"
-msgstr "Entrée de parking"
-
-msgid "Fuel"
-msgstr "Station-service"
-
-msgid "Agip"
-msgstr "Agip"
-
-msgid "Aral"
-msgstr "Aral"
-
-msgid "Avia"
-msgstr "Avia"
-
-msgid "BP"
-msgstr "BP"
-
-msgid "Chevron"
-msgstr "Chevron"
-
-msgid "Citgo"
-msgstr "Citgo"
-
-msgid "Eni"
-msgstr "Eni"
-
-msgid "Esso"
-msgstr "Esso"
-
-msgid "Exxon"
-msgstr "Exxon"
-
-msgid "Gulf"
-msgstr "Gulf"
-
-msgid "Mobil"
-msgstr "Mobil"
-
-msgid "OMV"
-msgstr "OMV"
-
-msgid "Petro-Canada"
-msgstr "Petro-Canada"
+msgid "metro"
+msgstr "métro"
 
-msgid "Pioneer"
-msgstr "Pioneer"
+msgid "ferry"
+msgstr "ferry"
 
-msgid "Q8"
-msgstr "Q8"
+msgid "Capacity (overall)"
+msgstr "Capacité"
 
-msgid "Repsol"
-msgstr "Repsol YPF"
+msgid "Spaces for Disabled"
+msgstr "Emplacements pour handicapés"
 
-msgid "Shell"
-msgstr "Shell"
+msgid "Spaces for Women"
+msgstr "Emplacements pour femmes"
 
-msgid "Socar"
-msgstr "Socar"
+msgid "Spaces for Parents"
+msgstr "Emplacements pour parents"
 
-msgid "Statoil"
-msgstr "Statoil"
+msgid "See the Wiki for other capacity:[types]=*."
+msgstr "Voir le Wiki pour les autres types de capacity:[types]=*."
 
-msgid "Sunoco"
-msgstr "Sunoco"
+msgid "Parking Space"
+msgstr "Places réservées"
 
-msgid "Tamoil"
-msgstr "Tamoil"
+msgid "Capacity"
+msgstr "Capacité"
 
-msgid "Texaco"
-msgstr "Texaco"
+msgid "Covered (with roof)"
+msgstr "Couvert"
 
-msgid "Total"
-msgstr "Total"
+msgid "Parking Entrance"
+msgstr "Entrée de parking"
 
-msgid "Independent"
-msgstr "indépendant"
+msgid "Fuel"
+msgstr "Station-service"
 
 msgid "With shop"
 msgstr "Boutique"
@@ -19364,51 +19776,12 @@ msgstr "toilettes"
 msgid "kiosk"
 msgstr "kiosque"
 
-msgid "Fuel types:"
-msgstr "Types de carburants :"
-
-msgid "Diesel"
-msgstr "Gazole"
-
-msgid "Bio Diesel"
-msgstr "Biogazole"
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr "Gazole de type GTL"
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr "Gazole pour poids lourds"
 
-msgid "Octane 80"
-msgstr "Indice d’octane de 80"
-
-msgid "Octane 91"
-msgstr "Indice d’octane de 91"
-
-msgid "Octane 92"
-msgstr "Indice d’octane de 92"
-
-msgid "Octane 95"
-msgstr "Indice d’octane de 95"
-
-msgid "Octane 98"
-msgstr "Indice d’octane de 98"
-
-msgid "Octane 100"
-msgstr "Indice d’octane de 100"
-
-msgid "E10 (10% Ethanol mix)"
-msgstr "E10 (mélange à 10% d’éthanol)"
-
-msgid "E85 (85% Ethanol mix)"
-msgstr "E85 (Superéthanol)"
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr "GPL (Gaz de Pétrole Liquéfié)"
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr "GNV (Gaz Naturel pour Véhicules)"
-
 msgid "1/25 mix (mofa/moped)"
 msgstr "Mélange 1/25 (cyclomoteur)"
 
@@ -19628,9 +20001,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr "#CD853F"
 
-msgid "route segment"
-msgstr "route (sens aller et retour)"
-
 msgid "stop position"
 msgstr "Arrêt"
 
@@ -19649,6 +20019,9 @@ msgstr "plateforme (sortie seulement)"
 msgid "platform (entry only)"
 msgstr "plateforme (entrée seulement)"
 
+msgid "route segment"
+msgstr "route (sens aller et retour)"
+
 msgid "Route Master"
 msgstr "Itinéraire maître"
 
@@ -19851,6 +20224,12 @@ msgstr "Hôtel"
 msgid "Stars"
 msgstr "Étoiles"
 
+msgid "Rooms"
+msgstr "Chambres"
+
+msgid "Beds"
+msgstr "Lits"
+
 msgid "Motel"
 msgstr "Motel"
 
@@ -19867,7 +20246,7 @@ msgid "Alpine Hut"
 msgstr "Refuge gardé"
 
 msgid "Caravan Site/RV Park"
-msgstr "Aire de service et/ou stationnement pour Camping-car"
+msgstr "Aire de service et/ou stationnement pour camping-car"
 
 msgid "Number of places"
 msgstr "Nombre de places"
@@ -19941,6 +20320,9 @@ msgstr "sandwich"
 msgid "sushi"
 msgstr "sushi"
 
+msgid "steak_house"
+msgstr "rôtisserie"
+
 msgid "Microbrewery"
 msgstr "Microbrasserie"
 
@@ -19948,7 +20330,7 @@ msgid "Outdoor seating"
 msgstr "terrasse"
 
 msgid "Fast Food"
-msgstr "Fast-Food"
+msgstr "Fast-food"
 
 msgid "fish_and_chips"
 msgstr "fish and chips"
@@ -20160,6 +20542,9 @@ msgstr "Sauna"
 msgid "Horse Riding"
 msgstr "Équitation"
 
+msgid "Casino"
+msgstr "Casino"
+
 msgid "Brothel"
 msgstr "Bordel"
 
@@ -20415,7 +20800,7 @@ msgid "Police"
 msgstr "Commissariat de police"
 
 msgid "Ranger Station"
-msgstr ""
+msgstr "Garde forestier"
 
 msgid "Fire Station"
 msgstr "Caserne de pompiers"
@@ -20544,13 +20929,13 @@ msgid "Collection times"
 msgstr "Heures de collecte"
 
 msgid "Mo-Sa 09:00"
-msgstr "Lu-Sa 09:00"
+msgstr "Mo-Sa 09:00"
 
 msgid "Mo-Fr 17:30; Sa 12:00"
-msgstr "Lu-Ve 17:30; Sa 12:00"
+msgstr "Mo-Fr 17:30; Sa 12:00"
 
 msgid "Mo-Fr 15:00,19:00; Sa 15:10; Su 10:30"
-msgstr "Lu-Ve 15:00,19:00; Sa 15:10; Dim 10:30"
+msgstr "Mo-Fr 15:00,19:00; Sa 15:10; Su 10:30"
 
 msgid "Drive through"
 msgstr "Drive"
@@ -20647,8 +21032,8 @@ msgstr "Affiche la pression barométrique"
 msgid "Shows humidity"
 msgstr "Affiche l’humidité"
 
-msgid "Recycling"
-msgstr "Point de recyclage"
+msgid "Recycling Container"
+msgstr "Conteneur pour recyclage"
 
 msgid "Batteries"
 msgstr "Batteries"
@@ -20656,20 +21041,47 @@ msgstr "Batteries"
 msgid "Cans"
 msgstr "Canettes"
 
+msgid "Cardboard"
+msgstr "Carton"
+
+msgid "Electrical Appliances"
+msgstr "Appareils électriques"
+
 msgid "Glass"
 msgstr "Verre"
 
+msgid "Glass Bottles"
+msgstr "Récipients en verre"
+
+msgid "Green Waste"
+msgstr "Déchets verts"
+
 msgid "Paper"
 msgstr "Papier"
 
+msgid "Plastic"
+msgstr "Plastique"
+
+msgid "Plastic Bottles"
+msgstr "Bouteilles en plastique"
+
+msgid "Plastic Packaging"
+msgstr "Emballages en plastique"
+
 msgid "Scrap Metal"
 msgstr "Ferraille"
 
-msgid "container"
-msgstr "conteneur"
+msgid "Shoes"
+msgstr "Chaussures"
+
+msgid "Small Appliances"
+msgstr "Petit électroménager"
 
-msgid "centre"
-msgstr "centre de tri"
+msgid "Waste"
+msgstr "Détritus"
+
+msgid "Recycling Centre"
+msgstr "Déchèterie"
 
 msgid "Waste Basket/Trash Can"
 msgstr "Poubelle"
@@ -20872,6 +21284,9 @@ msgstr "Tir à l’arc"
 msgid "Track and Field Athletics"
 msgstr "Piste d’athlétisme"
 
+msgid "Running"
+msgstr "Course à pied"
+
 msgid "Climbing"
 msgstr "Escalade"
 
@@ -21047,12 +21462,18 @@ msgstr "Baseball"
 msgid "Basketball"
 msgstr "Basketball"
 
+msgid "Handball"
+msgstr "Handball"
+
 msgid "Volleyball"
 msgstr "Volleyball"
 
 msgid "Beach Volleyball"
 msgstr "Volleyball de plage"
 
+msgid "Billiards"
+msgstr "Billiard"
+
 msgid "Golf"
 msgstr "Golf"
 
@@ -21068,14 +21489,14 @@ msgstr "Boulingrin"
 msgid "Cricket"
 msgstr "Cricket"
 
-msgid "Cricket Nets"
-msgstr "Filets de cricket"
-
 msgid "Croquet"
 msgstr "Croquet"
 
-msgid "Hockey"
-msgstr "Hockey"
+msgid "Field Hockey"
+msgstr "Hockey sur gazon"
+
+msgid "Ice Hockey"
+msgstr "Hockey sur glace"
 
 msgid "Pelota"
 msgstr "Pelote"
@@ -21098,9 +21519,6 @@ msgstr "Karting"
 msgid "Motocross"
 msgstr "Moto-cross"
 
-msgid "Safety Training"
-msgstr "Formation en sécurité"
-
 msgid "Model Aerodrome"
 msgstr "Aéromodélisme"
 
@@ -21119,9 +21537,6 @@ msgstr "piste"
 msgid "RC Car"
 msgstr "Automodélisme"
 
-msgid "Raceway"
-msgstr "Circuit"
-
 msgid "Man Made"
 msgstr "Édifices"
 
@@ -21194,6 +21609,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr "supermarché"
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr "étable"
 
@@ -21245,7 +21668,7 @@ msgstr "Annexe de bâtiment"
 
 msgctxt "building"
 msgid "Skipped Levels"
-msgstr ""
+msgstr "Etages non comptabilisés"
 
 msgid "Skipped height (meters)"
 msgstr ""
@@ -21307,7 +21730,7 @@ msgid "Gasometer"
 msgstr "Gazomètre"
 
 msgid "Storage Tank"
-msgstr ""
+msgstr "Réservoir de stockage"
 
 msgctxt "content"
 msgid "fuel"
@@ -21315,11 +21738,11 @@ msgstr "carburant"
 
 msgctxt "content"
 msgid "manure"
-msgstr ""
+msgstr "fumier"
 
 msgctxt "content"
 msgid "oil"
-msgstr ""
+msgstr "hydrocarbure"
 
 msgctxt "content"
 msgid "sewage"
@@ -21327,7 +21750,7 @@ msgstr "eaux usées"
 
 msgctxt "content"
 msgid "silage"
-msgstr ""
+msgstr "ensilage"
 
 msgctxt "content"
 msgid "slurry"
@@ -21342,7 +21765,7 @@ msgid "wine"
 msgstr "vin"
 
 msgid "Bunker Silo"
-msgstr ""
+msgstr "Silo en béton"
 
 msgid "Pipeline"
 msgstr "Canalisation"
@@ -21494,7 +21917,7 @@ msgid "Tide Level"
 msgstr "Niveau de marée"
 
 msgid "Groundwater"
-msgstr ""
+msgstr "Eau souterraine"
 
 msgid "Traffic"
 msgstr "Trafic"
@@ -21548,7 +21971,7 @@ msgid "Survey Point"
 msgstr "Point géodésique"
 
 msgid "Surveillance Camera"
-msgstr "Camera de Surveillance"
+msgstr "Caméra de surveillance"
 
 msgid "indoor"
 msgstr "intérieur"
@@ -21686,7 +22109,7 @@ msgid "pier"
 msgstr "Ponton"
 
 msgid "abutment"
-msgstr ""
+msgstr "culée"
 
 msgid "lift_pier"
 msgstr ""
@@ -21695,7 +22118,7 @@ msgid "pivot_pier"
 msgstr ""
 
 msgid "Bridge outline"
-msgstr ""
+msgstr "Limite du pont"
 
 msgid "Power Plant"
 msgstr "Centrale électrique"
@@ -21743,7 +22166,7 @@ msgid "gasification"
 msgstr "gazéification"
 
 msgid "bioreactor"
-msgstr ""
+msgstr "bioréacteur"
 
 msgid "anaerobic_digestion / combustion"
 msgstr "digestion_anaérobique / combustion"
@@ -21829,10 +22252,10 @@ msgid "Pressurized water reactor (PWR)"
 msgstr "Réacteur à eau pressurisée (REP)"
 
 msgid "Reactor Bolshoy Moshchnosti Kanalniy 1000 (RBMK-1000)"
-msgstr ""
+msgstr "Réacteur de grande puissance à tubes de force 1000 (RBMK-1000)"
 
 msgid "Reactor Bolshoy Moshchnosti Kanalniy 1500 (RBMK-1500)"
-msgstr ""
+msgstr "Réacteur de grande puissance à tubes de force 1500 (RBMK-1500)"
 
 msgid "stellarator"
 msgstr "stellarator"
@@ -21841,7 +22264,7 @@ msgid "tokamak"
 msgstr "tokamak"
 
 msgid "Vodo-Vodyanoi Energetichesky Reactor (VVER)"
-msgstr ""
+msgstr "Réacteur de puissance à caloporteur et modérateur eau (VVER)"
 
 msgid "Solar Power Generator"
 msgstr "Centrale solaire"
@@ -21864,7 +22287,7 @@ msgid "solar_thermal_collector"
 msgstr "collecteur solaire thermique"
 
 msgid "thermal"
-msgstr ""
+msgstr "thermique"
 
 msgid "Waste Power Generator"
 msgstr "Incinérateur de déchets"
@@ -21898,10 +22321,10 @@ msgid "all methods"
 msgstr "toutes méthodes"
 
 msgid "hydrodynamic_screw"
-msgstr ""
+msgstr "vis hydrodynamique"
 
 msgid "run-of-the-river"
-msgstr ""
+msgstr "au fil de lʼeau"
 
 msgid "kaplan_turbine"
 msgstr "turbine Kaplan"
@@ -22072,19 +22495,19 @@ msgid "Amount of poles"
 msgstr "Quantité de pôles"
 
 msgid "monopole"
-msgstr ""
+msgstr "monopole"
 
 msgid "bipole"
-msgstr ""
+msgstr "bipole"
 
 msgid "Power rating (MVA)"
 msgstr "Puissance électrique apparente (MVA)"
 
 msgid "Power Compensator"
-msgstr ""
+msgstr "Puissance compensateur"
 
 msgid "Type of compensator"
-msgstr ""
+msgstr "Type de compensateur"
 
 msgctxt "power"
 msgid "shunt_reactor"
@@ -22092,11 +22515,11 @@ msgstr ""
 
 msgctxt "power"
 msgid "shunt_capacitor"
-msgstr ""
+msgstr "condensateur shunt"
 
 msgctxt "power"
 msgid "static_var"
-msgstr ""
+msgstr "compensateur statique d''énergie réactive"
 
 msgctxt "power"
 msgid "statcom"
@@ -22108,7 +22531,7 @@ msgstr ""
 
 msgctxt "power"
 msgid "filter"
-msgstr ""
+msgstr "filtre"
 
 msgctxt "power"
 msgid "series_reactor"
@@ -22119,7 +22542,7 @@ msgid "series_capacitor"
 msgstr ""
 
 msgid "Power rating (kvar/Mvar)"
-msgstr ""
+msgstr "Puissance (kvar/Mvar)"
 
 msgid "500 kvar"
 msgstr "500 kvar"
@@ -22143,7 +22566,7 @@ msgid "lattice"
 msgstr ""
 
 msgid "tubular"
-msgstr ""
+msgstr "tubulaire"
 
 msgid "solid"
 msgstr ""
@@ -22157,11 +22580,11 @@ msgstr "rouge/blanc"
 
 msgctxt "power"
 msgid "Tower type"
-msgstr ""
+msgstr "Type de pylône"
 
 msgctxt "power"
 msgid "suspension"
-msgstr ""
+msgstr "suspension"
 
 msgctxt "power"
 msgid "anchor"
@@ -22173,7 +22596,7 @@ msgstr ""
 
 msgctxt "power"
 msgid "branch"
-msgstr ""
+msgstr "Embranchement"
 
 msgctxt "power"
 msgid "transposing"
@@ -22200,7 +22623,7 @@ msgstr ""
 
 msgctxt "power"
 msgid "cross"
-msgstr ""
+msgstr "croix"
 
 msgid "Tower design"
 msgstr ""
@@ -22279,7 +22702,7 @@ msgstr ""
 
 msgctxt "power"
 msgid "portal"
-msgstr ""
+msgstr "portail"
 
 msgctxt "power"
 msgid "portal_two-level"
@@ -22295,7 +22718,7 @@ msgstr ""
 
 msgctxt "power"
 msgid "bipole"
-msgstr ""
+msgstr "bipole"
 
 msgctxt "power"
 msgid "monopolar"
@@ -22314,13 +22737,13 @@ msgid "Pole"
 msgstr "Pylône basse-tension"
 
 msgid "Pole with Transformer"
-msgstr ""
+msgstr "Pylône avec transformateur"
 
 msgid "Pole Attributes:"
-msgstr ""
+msgstr "Attributs du pylône"
 
 msgid "Transformer Attributes:"
-msgstr ""
+msgstr "Attributs du transformateur"
 
 msgid "Power Line"
 msgstr "Ligne électrique"
@@ -22335,7 +22758,7 @@ msgid "minor_line"
 msgstr "Ligne basse tension"
 
 msgid "Number of conductors/wires per cable"
-msgstr ""
+msgstr "Nombre de conducteurs/fils par câble"
 
 msgctxt "power"
 msgid "single"
@@ -22521,9 +22944,6 @@ msgstr "Vins"
 msgid "Boutique"
 msgstr "Haute Couture"
 
-msgid "Shoes"
-msgstr "Chaussures"
-
 msgid "Outdoor"
 msgstr "Sports en plein air"
 
@@ -22774,22 +23194,22 @@ msgid "Debit cards"
 msgstr "Cartes de débit"
 
 msgid "BankAxess"
-msgstr ""
+msgstr "BankAxess"
 
 msgid "Bancomat"
-msgstr ""
+msgstr "Bancomat"
 
 msgid "Girocard"
-msgstr ""
+msgstr "Girocard"
 
 msgid "Laser"
-msgstr ""
+msgstr "Laser"
 
 msgid "Maestro"
 msgstr "Maestro"
 
 msgid "Visa Debit"
-msgstr ""
+msgstr "Carte de débit Visa"
 
 msgid "Visa Electron"
 msgstr "Visa Electron"
@@ -22801,13 +23221,13 @@ msgid "American Express"
 msgstr "American Express"
 
 msgid "Diners Club"
-msgstr ""
+msgstr "Diners Club"
 
 msgid "Discover Card"
 msgstr ""
 
 msgid "JCB"
-msgstr ""
+msgstr "JCB"
 
 msgid "Mastercard"
 msgstr "Mastercard"
@@ -22819,31 +23239,31 @@ msgid "Electronic purses and Charge cards"
 msgstr "Porte-monnaie électronique"
 
 msgid "Avant (fi)"
-msgstr ""
+msgstr "Avant (fi)"
 
 msgid "Cash (ch)"
 msgstr "Espèce (ch)"
 
 msgid "Chipknip (nl)"
-msgstr ""
+msgstr "Chipknip (nl)"
 
 msgid "Geldkarte (de)"
-msgstr ""
+msgstr "Geldkarte (de)"
 
 msgid "Mep (pt)"
-msgstr ""
+msgstr "Mep (pt)"
 
 msgid "Minicash (lu)"
-msgstr ""
+msgstr "Minicash (lu)"
 
 msgid "Minipay (it)"
-msgstr ""
+msgstr "Minipay (it)"
 
 msgid "Mondero (ar)"
-msgstr ""
+msgstr "Mondero (ar)"
 
 msgid "Mondero 4b (es)"
-msgstr ""
+msgstr "Mondero 4b (es)"
 
 msgid "Moneo (fr)"
 msgstr "Monéo (fr)"
@@ -22852,10 +23272,10 @@ msgid "Proton (be)"
 msgstr "Proton (be)"
 
 msgid "Quick (au)"
-msgstr ""
+msgstr "Quick (au)"
 
 msgid "Cryptocurrencies"
-msgstr ""
+msgstr "Crypto-monnaies"
 
 msgid "Bitcoin"
 msgstr "Bitcoin"
@@ -22879,7 +23299,7 @@ msgid "Administrative level"
 msgstr "Niveau administrative"
 
 msgid "Maritime"
-msgstr ""
+msgstr "Maritime"
 
 msgid "Political"
 msgstr "Électorale"
@@ -22924,7 +23344,7 @@ msgid "contiguous"
 msgstr "contiguë"
 
 msgid "eez"
-msgstr ""
+msgstr "zee"
 
 msgid "Places"
 msgstr "Lieu"
@@ -22988,7 +23408,7 @@ msgid "Saddle"
 msgstr "Col"
 
 msgid "A saddle point between mountains or hills."
-msgstr ""
+msgstr "Un col entre des montagnes ou des collines."
 
 msgid "Glacier"
 msgstr "Glacier"
@@ -23034,7 +23454,7 @@ msgid "Valley"
 msgstr "Vallée"
 
 msgid "A low area between hills."
-msgstr ""
+msgstr "Une zone basse entre des collines."
 
 msgid "Cave Entrance"
 msgstr "Grotte"
@@ -23076,19 +23496,19 @@ msgid "Forest"
 msgstr "Forêt"
 
 msgid "Cutline"
-msgstr ""
+msgstr "Layon"
 
 msgctxt "cutline"
 msgid "border"
-msgstr ""
+msgstr "limites de propriété"
 
 msgctxt "cutline"
 msgid "firebreak"
-msgstr ""
+msgstr "pare-feu"
 
 msgctxt "cutline"
 msgid "hunting"
-msgstr ""
+msgstr "chasse"
 
 msgctxt "cutline"
 msgid "loggingmachine"
@@ -23100,11 +23520,11 @@ msgstr "pipeline"
 
 msgctxt "cutline"
 msgid "piste"
-msgstr ""
+msgstr "piste"
 
 msgctxt "cutline"
 msgid "section"
-msgstr "section"
+msgstr "limites de parcelle"
 
 msgid "Grassland"
 msgstr "Prairie"
@@ -23127,7 +23547,7 @@ msgid "puszta"
 msgstr "puszta"
 
 msgid "savanna"
-msgstr "Savanne"
+msgstr "savane"
 
 msgid "steppe"
 msgstr "steppe"
@@ -23142,7 +23562,7 @@ msgid "Scree"
 msgstr "Éboulis"
 
 msgid "An accumulation of loose rocks."
-msgstr ""
+msgstr "Une accumulation de roches fragmentées."
 
 msgid "Fell"
 msgstr "Talus"
@@ -23172,7 +23592,7 @@ msgid "Sand"
 msgstr "Sable"
 
 msgid "Large area covered with sand."
-msgstr ""
+msgstr "Grande surface recouverte de sable."
 
 msgid "Bare Rock"
 msgstr "Roche mère"
@@ -23181,14 +23601,17 @@ msgid ""
 "For areas of solid visible rock that is sparsely vegetated or not vegetated "
 "at all."
 msgstr ""
+"Pour les zones de roche solide et visible avec peu ou pas de végétation"
 
 msgid "Rock"
-msgstr "Roche"
+msgstr "Rocher"
 
 msgid ""
 "A notable rock or group of rocks, with at least one of them firmly attached "
 "to the underlying bedrock."
 msgstr ""
+"Un rocher notable ou un groupe de rochers, avec au moins l''un d''entre eux "
+"fermement attaché à la roche sous-jacente."
 
 msgid "Tourism attraction"
 msgstr "Attraction touristique"
@@ -23238,7 +23661,7 @@ msgid "Village Green"
 msgstr "Espace vert"
 
 msgid "Common"
-msgstr "Espace public"
+msgstr "Espace commun (droit anglais)"
 
 msgid "Park"
 msgstr "Parc"
@@ -23541,12 +23964,12 @@ msgstr "regroupé"
 msgid "Contact (Common Schema)"
 msgstr "Contact (Schéma commun)"
 
-msgid "Fax Number"
-msgstr "Numéro de télécopie"
-
 msgid "Email Address"
 msgstr "Adresse électronique"
 
+msgid "Fax Number"
+msgstr "Numéro de télécopie"
+
 msgid "Image"
 msgstr "Image"
 
@@ -23555,13 +23978,15 @@ msgstr "Contact (Schéma avec le préfixe ''contact:*'')"
 
 msgctxt "description=*"
 msgid "A short text with additional information."
-msgstr ""
+msgstr "Un texte court en complément d''information."
 
 msgctxt "description=*"
 msgid ""
 "It might be viewable to the end user (perhaps using a search system or a map "
 "with pop-ups)."
 msgstr ""
+"Il pourrait être visible à l''utilisateur final (peut-être en utilisant un "
+"système de recherche ou une carte avec des pop-ups)."
 
 msgctxt "note=*, fixme=*, description=*"
 msgid "Similar but different tags:"
@@ -23578,7 +24003,7 @@ msgstr ""
 "l’utilisateur final)"
 
 msgid "Fixme"
-msgstr ""
+msgstr "À corriger"
 
 msgctxt "fixme=*"
 msgid ""
@@ -23673,13 +24098,13 @@ msgid "only_straight_on"
 msgstr "obligation d’aller tout droit"
 
 msgid "from way"
-msgstr "Du chemin"
+msgstr "du chemin"
 
 msgid "via node or ways"
 msgstr "via le nœud ou les chemins"
 
 msgid "to way"
-msgstr "Au chemin"
+msgstr "au chemin"
 
 msgid "Enforcement"
 msgstr "Sécurité routière"
@@ -23700,7 +24125,7 @@ msgid "mindistance"
 msgstr "distance minimale"
 
 msgid "check"
-msgstr ""
+msgstr "Vérification d''autorisation"
 
 msgid "Max. height (meters, only if enforcement=maxheight)"
 msgstr "Hauteur maximale (en mètres, seulement avec enforcement=maxheight)"
@@ -23772,10 +24197,10 @@ msgid "link segment"
 msgstr "segment de liaison"
 
 msgid "shortcut segment"
-msgstr ""
+msgstr "raccourci"
 
 msgid "variant segment"
-msgstr ""
+msgstr "variante"
 
 msgid "entry points"
 msgstr ""
@@ -23820,7 +24245,7 @@ msgid "house"
 msgstr "maison"
 
 msgid "Street"
-msgstr "Rue :"
+msgstr "Rue"
 
 msgid "ways being part of street"
 msgstr "chemins appartenant à la rue"
@@ -23964,15 +24389,18 @@ msgid "{0} without {1}, {2} or {3}"
 msgstr "{0} sans {1}, {2} ni {3}"
 
 msgid "{0} together with {1}"
-msgstr ""
+msgstr "{0} combiné à {1}"
 
 msgid "incomplete object: only {0}"
-msgstr ""
+msgstr "élément incomplet : uniquement {0}"
 
 msgid "incomplete object: only {0} and {1}"
-msgstr ""
+msgstr "élément incomplet : uniquement {0} et {1}"
 
 msgid "{0} together with addr:*"
+msgstr "{0} en combinaison avec addr:*"
+
+msgid "{0} together with {1} and conflicting values"
 msgstr ""
 
 msgid "{0} on suspicious object"
@@ -23999,6 +24427,18 @@ msgstr "nom alternatif sans {0}"
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr "Même valeur pour {0} et {1}"
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr "Même valeur pour {0}, {1} et {2}"
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr "{0}={1} est obsolète"
 
@@ -24021,6 +24461,8 @@ msgid ""
 "{0}={1} is unspecific. Instead of ''{1}'' please give more information about "
 "what exactly should be fixed."
 msgstr ""
+"{0}={1} est vague. A la place de ''{1}'' veuillez indiquer précisément ce "
+"qui doit être corrigé ou amélioré."
 
 msgid "{0}={1} is deprecated. Please use instead a multipolygon."
 msgstr ""
@@ -24035,9 +24477,12 @@ msgstr ""
 msgid ""
 "{0} is deprecated. Please delete this object and use a private layer instead"
 msgstr ""
+"{0} est obsolète. Veuillez supprimer cet objet et utiliser un calque privé à "
+"la place"
 
 msgid "{0}={1} is unspecific. Please replace ''{1}'' by a specific value."
 msgstr ""
+"{0}={1} est imprécis. Veuillez remplacer « {1} » par une valeur spécifique."
 
 msgid "{0} should be replaced with {1}"
 msgstr "{0} devrait être remplacé par {1}"
@@ -24049,6 +24494,8 @@ msgid ""
 "{0}={1} is unspecific. Please replace ''{1}'' by ''left'', ''right'' or "
 "''both''."
 msgstr ""
+"{0}={1} n’est pas spécifique. Veuillez remplacer « {1} » par "
+"« left »(gauche), « right » (droite) ou « both » (les deux)."
 
 msgid "Unspecific tag {0}"
 msgstr "Attribut {0} non spécifique"
@@ -24059,6 +24506,7 @@ msgstr "La définition de {0} n’est pas claire"
 msgid ""
 "{0} is not recommended. Use the Reverse Ways function from the Tools menu."
 msgstr ""
+"{0} est déconseillé. Utilisez la fonction Inverser le chemin du menu Outils."
 
 msgid "key with uncommon character"
 msgstr "touche avec un caractère non usuel"
@@ -24066,6 +24514,9 @@ msgstr "touche avec un caractère non usuel"
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr "{0} est imprécis"
+
 msgid "{0} on a node. Should be used on a way."
 msgstr "{0} sur un nœud. Devrait être employé sur un chemin."
 
@@ -24161,9 +24612,22 @@ msgstr ""
 "a des noms  d’unités à ajouter, mettre un espace puis l’abréviation de "
 "l’unité de mesure"
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+"{0} : en tonnes par défaut ; le point est le séparateur décimal ; pour "
+"indiquer une unité, insérez un espace puis l’unité"
+
 msgid "unusual {0} format"
 msgstr "Format {0} non usuel"
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+"{0} : en kilomètres par défaut ; le point est le séparateur décimal ; pour "
+"indiquer une unité, insérez un espace puis l’unité"
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr "la tension doit être en Volts sans unité/delimiter/ espace"
 
@@ -24278,18 +24742,23 @@ msgid ""
 "No command has been found. Would you like to download and install default "
 "commands now?"
 msgstr ""
+"Aucune commande trouvée. Souhaitez vous télécharger et installer les "
+"commandes par défaut maintenant ?"
 
 msgid "No command found"
 msgstr "Aucune commande trouvée"
 
 msgid "Default commands have been successfully installed"
-msgstr ""
+msgstr "Les commandes par défaut ont été installées avec succès"
 
 msgid ""
 "Failed to download and install default commands.\n"
 "\n"
 "Error: {0}"
 msgstr ""
+"Échec du téléchargement et de l’installation des commandes par défaut.\n"
+"\n"
+"Erreur : {0}"
 
 msgid "Processing..."
 msgstr "Traitement…"
@@ -24553,6 +25022,9 @@ msgstr "Ajouter des points fixes avec un clic"
 msgid "Add fixed points on spacebar"
 msgstr "Ajouter des points fixes avec la barre espace"
 
+msgid "Allow edit existing ways"
+msgstr "Permet d’éditer les chemins existants"
+
 msgid "Draw closed polygons only"
 msgstr "Dessiner les polygones fermés seulement"
 
@@ -24618,9 +25090,6 @@ msgstr "Dessin du chemin avec la souris"
 msgid "min distance={0} px ({1} m)"
 msgstr "distance min={0} px ({1} m)"
 
-msgid "Convert way to FastDraw line"
-msgstr "Convertir le chemin en ligne FastDraw"
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr "Eps={0}, {1} points, {2} p/km"
 
@@ -24816,7 +25285,7 @@ msgid "Layer Properties"
 msgstr "Propriétés du calque"
 
 msgid "Error while creating image layer: {0}"
-msgstr ""
+msgstr "Erreur lor de la création du calque image : {0}"
 
 msgid "Import image"
 msgstr "Importer une image"
@@ -24828,7 +25297,7 @@ msgid "Error while creating image layer: "
 msgstr "Une erreur est survenue lors de la création du calque image : "
 
 msgid "NanoLog"
-msgstr ""
+msgstr "NanoLog"
 
 msgid "NanoLog of {0} entries"
 msgstr ""
@@ -24849,19 +25318,19 @@ msgid "Save layer..."
 msgstr "Sauvegarde du calque…"
 
 msgid "Save NanoLog layer"
-msgstr ""
+msgstr "Enregistrer le calque NanoLog"
 
 msgid "Open NanoLog panel"
-msgstr ""
+msgstr "Ouvrir le paneau NanoLog"
 
 msgid "Open NanoLog file..."
-msgstr ""
+msgstr "Ouvrir un fichier NanoLog..."
 
 msgid "Could not read NanoLog file:"
-msgstr ""
+msgstr "Impossible de lire le fichier NanoLog :"
 
 msgid "OSM Recommendation"
-msgstr ""
+msgstr "Recommandation OSM"
 
 msgid "Recommend categories to your newly created instances."
 msgstr ""
@@ -24879,13 +25348,13 @@ msgid "Add Recommendation"
 msgstr ""
 
 msgid "Add a recommended key/value pair to your object"
-msgstr ""
+msgstr "Ajouter un couple clé/valeur recommandé à votre objet"
 
 msgid "Train a Model"
 msgstr ""
 
 msgid "Start the training engine!"
-msgstr ""
+msgstr "Démarrer le moteur de formation !"
 
 msgid "Edit opening hours"
 msgstr "Modifier les horaires d’ouverture"
@@ -24942,10 +25411,10 @@ msgid "Current Selected Bug Info"
 msgstr ""
 
 msgid "Prev OSMI bug"
-msgstr ""
+msgstr "Bug OSMI précédent"
 
 msgid "Next OSMI bug"
-msgstr ""
+msgstr "Bug OSMI suivant"
 
 msgid "Osm Inspector Bugs"
 msgstr ""
@@ -25206,7 +25675,7 @@ msgid "Ctrl-Click: select reference way segment; Alt-click: Clear selection"
 msgstr ""
 
 msgid ": Align segments; Alt-click: Clear selection"
-msgstr ""
+msgstr ": Aligne les segments ; Alt-clic : Désélection"
 
 msgid ""
 "Ctrl-click: select reference way segment; Click: select way segment to be "
@@ -25485,61 +25954,94 @@ msgstr ""
 "Dites-nous ce que vous avez essayé de faire et ce qui s’est passé, pour que "
 "nous puissions trouver l’origine du problème"
 
-msgid "Area detection algorithm settings."
-msgstr "Configuration de l’algorithme de détection d’aire."
+msgid "Area Selector - Preferences"
+msgstr "Sélection de surface – Préférences"
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
+msgstr "Paramètres de l’algorithme de détection de surface"
+
+msgid "Boofcv - high resolution images"
+msgstr "Boofcv – images haute résolution"
+
+msgid "Custom - low resolution images"
+msgstr "Personnalisé – images basse résolution"
+
+msgid ""
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
+"Sélectionner l’algorithme à utiliser. « Auto » essaye de trouver une surface "
+"avec Boofcv et utiliser l’algorithme personnalisé en secours."
+
+msgid "Algorithm"
+msgstr "Algorithme"
 
 msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
+"Éloignement maximum en pixels entre un point et une ligne pour qu’il soit "
+"quand même considéré sur cette ligne (par défault : {0})."
 
-msgid "Color Threshold"
+msgid "Distance Tolerance"
+msgstr "Tolérance de distance"
+
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
+"Les segments ayant un angle (en degrés) plus faible que cette valeur seront "
+"combinés en un seul (par défaut : {0})."
+
+msgid "Angle Tolerance"
+msgstr "Tolérence angulaire"
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
+"Le seuil de couleur définit de combien une couleur peut s’éloigner de la "
+"couleur sélectionnée. Les valeurs de rouge, vert et bleu doivent être dans "
+"l’intervalle (sélectionnée - seuil) à (sélectionnée + seuil) (par défaut : "
+"{0})."
+
+msgid "Color Threshold"
+msgstr "Seuil de couleur"
 
-msgid "Tolerance Distance"
-msgstr "Distance de tolérance"
+msgid "Use HSV based algorithm"
+msgstr "Utiliser l’algorithme basé sur TSV"
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
+"Utiliser la teinte et la saturation au lieu de RVB pour sélectionner les "
+"couleurs correspondantes."
 
-msgid "Tolerance Angle"
-msgstr "Angle de tolérance"
-
-msgid "Plugin Settings"
-msgstr "Paramètres des greffons"
+msgid "How often thinning operation should be applied (Default {0})."
+msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
-msgstr "Afficher la fenêtre des adresses après la cartographie d’une zone"
+msgid "Thinning Iterations"
+msgstr ""
 
 msgid "show address dialog"
 msgstr "Afficher la fenêtre des adresses"
 
-msgid "Merge nodes with neighbors"
-msgstr "Fusionner les nœuds avec ses voisins."
+msgid "Show Address Dialog after mapping an area"
+msgstr "Afficher la fenêtre des adresses après la cartographie d’une zone"
 
 msgid "merge nodes"
 msgstr "fusionner des nœuds"
 
-msgid "How often thinning operation should be applied (Default {0})."
-msgstr ""
+msgid "Merge nodes with existing nodes"
+msgstr "Fusionner les nœuds avec les nœuds existants"
 
-msgid "Thinning Iterations"
+msgid "Debug"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
-msgid "use HSV based algorithm"
-msgstr "utiliser un algorithme basée sur HSV"
-
 msgid "Street Name:"
 msgstr "Nom de la rue :"
 
@@ -25606,20 +26108,20 @@ msgid "Select both address nodes and building ways to merge"
 msgstr ""
 
 msgid "No address nodes found in the selection"
-msgstr ""
+msgstr "Pas de nœud d’adresse trouvé dans la sélection"
 
 msgid "No building ways found in the selection"
 msgstr "Aucun chemin building trouvé dans la sélection"
 
 msgid "There is {0} building with multiple address nodes inside"
 msgid_plural "There are {0} buildings with multiple address nodes inside"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Il y a {0} immeuble avec plusieurs nœuds d’adresse"
+msgstr[1] "Il y a {0} immeubles avec plusieurs nœuds d’adresse"
 
 msgid "There is {0} building with address conflicts"
 msgid_plural "There are {0} buildings with address conflicts"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Il y a {0} immeuble avec des conflits d’adresse"
+msgstr[1] "Il y a {0} immeubles avec des conflits d’adresse"
 
 msgid "No address nodes inside buildings found"
 msgstr "Pas de noeud d’adresses trouvés dans les bâtiments"
@@ -26211,6 +26713,9 @@ msgstr "Réinitialiser le décalage"
 msgid "Reset offset (only vector images)"
 msgstr "Réinitialiser le décalage (seulement les images vecteur)"
 
+msgid "Blank Layer"
+msgstr "Calque vide"
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr "Calque WMS ({0}), {1} tuile(s) chargée(s)"
 
@@ -26280,8 +26785,8 @@ msgstr ""
 
 msgid "Added {0} object to subject layer"
 msgid_plural "Added {0} objects to subject layer"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} objet ajouté au calque sujet"
+msgstr[1] "{0} objets ajoutés au calque sujet"
 
 msgid "Conflation"
 msgstr "Conflation"
@@ -26290,7 +26795,7 @@ msgid "Activates the conflation plugin"
 msgstr "Activer le plugin Conflation"
 
 msgid "Matches"
-msgstr ""
+msgstr "Concorde"
 
 msgid "Reference only"
 msgstr "Seulement la référence"
@@ -26299,7 +26804,7 @@ msgid "Subject only"
 msgstr ""
 
 msgid "Matches ({0})"
-msgstr ""
+msgstr "Correspondances ({0})"
 
 msgid "Reference only ({0})"
 msgstr ""
@@ -26317,19 +26822,19 @@ msgid "Delete {0} conflation matches"
 msgstr ""
 
 msgid "Remove {0} unmatched objects"
-msgstr ""
+msgstr "Supprimer {0} objets sans correspondance"
 
 msgid "Remove selected matches"
-msgstr ""
+msgstr "Supprimer les correspondances sélectionnées"
 
 msgid "Conflate"
-msgstr ""
+msgstr "Assembler"
 
 msgid "Conflate selected objects"
-msgstr ""
+msgstr "Assembler les objets sélectionnés"
 
 msgid "Conflation: {0}"
-msgstr ""
+msgstr "Assemblage : {0}"
 
 msgid "Cannot replace geometry."
 msgstr "Ne peut pas remplacer la géométrie."
@@ -26350,7 +26855,7 @@ msgid "Match finder method"
 msgstr ""
 
 msgid "Threshold distance"
-msgstr ""
+msgstr "Seuil de distance"
 
 msgid "Distances greater than this will result in a score of zero."
 msgstr "Une distance plus grande que cela donnera un score de zéro"
@@ -26362,7 +26867,7 @@ msgid "Hausdorff distance"
 msgstr "Distance de Hausdorff"
 
 msgid "Configure conflation settings"
-msgstr ""
+msgstr "Configurer les paramétres d’assemblage"
 
 msgid "Generate matches"
 msgstr ""
@@ -26386,10 +26891,10 @@ msgid "Freeze subject selection"
 msgstr ""
 
 msgid "No valid OSM data layer present."
-msgstr ""
+msgstr "Pas de calque de données OSM valide"
 
 msgid "Error freezing selection"
-msgstr ""
+msgstr "Erreur lors du gel de la sélection"
 
 msgid "Nothing is selected, please try again."
 msgstr "Rien n’est sélectionné, veuillez essayer une fois de plus."
@@ -27178,11 +27683,20 @@ msgid ""
 "OSM data in the area. Please check that the offset is still valid\n"
 "by downloading GPS tracks and comparing them and OSM data to the imagery."
 msgstr ""
+"Le calque supérieur d’imagerie a été déplacé pour correspondre\n"
+"aux données OSM de la zone. Veuillez vérifier que le décalage est toujours "
+"valide\n"
+"en téléchargeant des pistes GPS et en les comparant ainsi que les données "
+"OSM avec l’imagerie."
 
 msgid ""
 "A layer has been added with a calibration geometry. Hide data layers,\n"
 "find the corresponding feature on the imagery layer and move it accordingly."
 msgstr ""
+"Un calque avec une géométrie de calibration a été ajouté. Masquez les "
+"calques de données,\n"
+"trouvez les correspondances sur le calque d’imagerie et déplacez-le en "
+"fonction."
 
 msgid "Deprecated by {0} on {1}"
 msgstr ""
@@ -27247,11 +27761,15 @@ msgid ""
 "The selected object can be used as a calibration geometry. What do you "
 "intend to do?"
 msgstr ""
+"L’objet sélectionné peut être utilisé pour une calibration. Que souhaitez-"
+"vous faire ?"
 
 msgid ""
 "The topmost imagery layer has no offset. Are you sure you want to upload "
 "this?"
 msgstr ""
+"Le calque supérieur d’imagerie n’a pas de décalage. Êtes-vous sûr de vouloir "
+"télécharger ceci ?"
 
 msgid ""
 "You are registering an imagery offset. Other users in this area will be able "
@@ -27268,7 +27786,7 @@ msgid ""
 msgstr ""
 
 msgid "Uploading a new offset..."
-msgstr ""
+msgstr "Téléchargement d’un nouveau décalage..."
 
 msgid "This string should be 3 to 200 letters long."
 msgstr ""
@@ -27751,14 +28269,325 @@ msgstr "Activation du greffon Rapport d’erreur MapDust"
 msgid "Missing input data"
 msgstr "Données manquantes"
 
+msgid "Mapillary Images"
+msgstr "Images Mapillary"
+
+msgid "Mapillary layer"
+msgstr "Calque Mapillary"
+
+msgid "Total images:"
+msgstr "Images totales :"
+
+msgid "images"
+msgstr "images"
+
 msgid "Mapillary"
 msgstr "Mapillary"
 
-msgid "Create Mapillary layer."
-msgstr "Crée le calque Mapillary"
+msgid "Create Mapillary layer"
+msgstr "Créer un calque Mapillary"
 
-msgid "Export"
-msgstr "Exporter"
+msgid "Start Mapillary layer"
+msgstr "Commencer un calque Mapillary"
+
+msgid "Download Mapillary images in current view"
+msgstr "Télécharger des images Mapillary dans la vue actuelle"
+
+msgid "Export pictures"
+msgstr "Exporter des photos"
+
+msgid "Export Mapillary pictures"
+msgstr "Exporter des photos Mapillary"
+
+msgid "Export images"
+msgstr "Exporter des images"
+
+msgid "Import pictures"
+msgstr "Importer des photos"
+
+msgid "Import local pictures"
+msgstr "Importer des photos locales"
+
+msgid "Import pictures into Mapillary layer"
+msgstr "Importer des photos dans un calque Mapillary"
+
+msgid "Select pictures"
+msgstr "Sélectionner des photos"
+
+msgid "Import pictures into sequence"
+msgstr "Importer une séquence de photos"
+
+msgid "Import pictures into Mapillary layer in a sequence"
+msgstr "Importer une séquence de photos dans un calque Mapillary"
+
+msgid "Join mode"
+msgstr ""
+
+msgid "Join/unjoin pictures"
+msgstr ""
+
+msgid "Join Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures"
+msgstr "Envoi de photographies"
+
+msgid "Upload Mapillary pictures"
+msgstr "Envoi de photographies Mapillary"
+
+msgid "Upload pictures."
+msgstr "Envoi de photographies."
+
+msgid "Walk mode"
+msgstr "Mode piéton"
+
+msgid "Start walk mode"
+msgstr "Commencer le mode piéton"
+
+msgid "Zoom to selected image"
+msgstr "Zoomer sur l’image sélectionnée"
+
+msgid "Zoom to the currently selected Mapillary image"
+msgstr "Zoomer sur l’image Mapillary actuellement sélectionnée"
+
+msgid "Uploaded {0} images"
+msgstr "A envoyé {0} images"
+
+msgid "Approve upload on the website"
+msgstr "Approuver l’envoi sur ce site web"
+
+msgid "View in website"
+msgstr ""
+
+msgid "Copy key"
+msgstr "Copier la clé"
+
+msgid "Copy key tag"
+msgstr "Copier l’attribut de la clé"
+
+msgid "Edit on website"
+msgstr "Éditer sur le site web"
+
+msgid "Export all images"
+msgstr "Exporter toutes les images"
+
+msgid "Export selected sequence"
+msgstr "Exporter la séquence sélectionnée"
+
+msgid "Export selected images"
+msgstr "Exporter les images sélectionnées"
+
+msgid "Rewrite imported images"
+msgstr ""
+
+msgid "Select a folder"
+msgstr "Sélectionner un dossier"
+
+msgid "Explore"
+msgstr "Explorer"
+
+msgid "Select a directory"
+msgstr "Sélectionner un répertoire"
+
+msgid "Speed limit"
+msgstr "Limite de vitesse"
+
+msgid "Give way"
+msgstr "Cédez-le-passage"
+
+msgid "No entry"
+msgstr ""
+
+msgid "Intersection danger"
+msgstr ""
+
+msgid "Mandatory direction (any)"
+msgstr ""
+
+msgid "No turn"
+msgstr ""
+
+msgid "Uneven road"
+msgstr ""
+
+msgid "No parking"
+msgstr "Stationnement interdit"
+
+msgid "No overtaking"
+msgstr "Interdiction de dépasser"
+
+msgid "Pedestrian crossing"
+msgstr "Passage piéton"
+
+msgid "Years"
+msgstr "Années"
+
+msgid "Months"
+msgstr "Mois"
+
+msgid "Days"
+msgstr "Jours"
+
+msgid "Mapillary filter"
+msgstr "filtre Mapillary"
+
+msgid "Open Mapillary filter dialog"
+msgstr "Ouvrir le dialogue du filtre Mapillary"
+
+msgid "Downloaded images"
+msgstr "Photos téléchargées"
+
+msgid "Only images with signs"
+msgstr ""
+
+msgid "Choose signs"
+msgstr ""
+
+msgid "Mapillary history"
+msgstr ""
+
+msgid "Open Mapillary history dialog"
+msgstr ""
+
+msgid "Open Mapillary window"
+msgstr "Ouvrir la fenêtre Mapillary"
+
+msgid "Mapillary dialog"
+msgstr ""
+
+msgid "Open Mapillary main dialog"
+msgstr ""
+
+msgid "Next picture"
+msgstr "Photo suivante"
+
+msgid "Shows the next picture in the sequence"
+msgstr "Voir la photo suivante"
+
+msgid "Previous picture"
+msgstr "Photo précédente"
+
+msgid "Shows the previous picture in the sequence"
+msgstr "Voir la photo précédente"
+
+msgid "Jump to red"
+msgstr ""
+
+msgid "Jumps to the picture at the other side of the red line"
+msgstr "Passer à l’image de l’autre côté de la ligne rouge"
+
+msgid "Jump to blue"
+msgstr ""
+
+msgid "Jumps to the picture at the other side of the blue line"
+msgstr "Passer à l’image de l’autre côté de la ligne bleue"
+
+msgid "Stops the walk."
+msgstr ""
+
+msgid "Play"
+msgstr "Lecture"
+
+msgid "Continues with the paused walk."
+msgstr ""
+
+msgid "Pause"
+msgstr ""
+
+msgid "Pauses the walk."
+msgstr ""
+
+msgid "Reverse buttons position when displaying images."
+msgstr "Inverser la position des boutons lors de l’affichage des photos."
+
+msgid "Display hour when the picture was taken"
+msgstr "Afficher l''heure de la prise de vue"
+
+msgid "Use 24 hour format"
+msgstr "Utiliser le système horaire sur 24 heures"
+
+msgid "Move to picture''s location with next/previous buttons"
+msgstr ""
+"Centrer la vue sur la localisation de la photo avec les boutons "
+"suivante/précédente"
+
+msgid "Download mode: "
+msgstr "Mode de téléchargement : "
+
+msgid "Upload selected sequence"
+msgstr "Envoyer la séquence sélectionnée"
+
+msgid "Delete after upload"
+msgstr "Effacer après l’envoi"
+
+msgid "Wait for full quality pictures"
+msgstr ""
+
+msgid "Follow selected image"
+msgstr ""
+
+msgid "Go forward"
+msgstr "Avancer"
+
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] "{0} photo effacée"
+msgstr[1] "{0} photos effacées"
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] "{0} image importée"
+msgstr[1] "{0} images importées"
+
+msgid "2 images joined"
+msgstr ""
+
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] "{0} image déplacée"
+msgstr[1] "{0} images déplacées"
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] "{0} image tournée"
+msgstr[1] "{0} images tournées"
+
+msgid "2 images unjoined"
+msgstr ""
+
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
+msgstr ""
+
+msgid "Downloading"
+msgstr "Téléchargement en cours"
+
+msgid "Select mode"
+msgstr "Choisir un mode"
+
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
+msgstr ""
+"<html><head><title>Connexion à "
+"Mapillary</title></head><body>Authentification réussie, retour vers "
+"JOSM.</body></html>"
+
+msgid "Downloading Mapillary images"
+msgstr "Téléchargement des photos Mapillary en cours"
+
+msgid "Total Mapillary images: {0}"
+msgstr "Nombre total de photos : {0}"
+
+msgid "No images found"
+msgstr "Aucune image trouvée"
+
+msgid "Finished upload"
+msgstr "Envoi terminé"
+
+msgid "Uploading: {0}"
+msgstr "Envoi en cours : {0}"
 
 msgid "Measured values"
 msgstr "Valeurs mesurées"
@@ -27778,6 +28607,9 @@ msgstr "Longueur de sélection"
 msgid "Selection Area"
 msgstr "Zone de sélection"
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr "Angle"
 
@@ -27845,53 +28677,6 @@ msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 "Impossible de trouver des nœuds \"via\". Veuillez vérifier votre sélection"
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-"requête XAPI, p. ex., '''' (pour télécharger toutes les données), "
-"''[highway=*]'', ou ''[[network=VRR][ref=603|613]''"
-
-msgid "Download from OSM mirror..."
-msgstr "Télécharger depuis un miroir OSM..."
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-"Cette requête XAPI semble être invalide, veuillez effectuer une vérification "
-"supplémentaire"
-
-msgid "Object type: "
-msgstr "Type d’objet "
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr "Type d’objet Osm à télécharger (\"*\" pour tout type)"
-
-msgid "XAPI query: "
-msgstr "Requête XAPI : "
-
-msgid "Download from Overpass API ..."
-msgstr "Téléchargement depuis  Overpass API ..."
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-"Téléchargement des données cartographique depuis un serveur Overpass API ."
-
-msgid "Overpass query: "
-msgstr "Requête Overpass  : "
-
-msgid "Select OSM mirror URL"
-msgstr "Sélectionner l’URL du miroir OSM"
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-"Sélectionner le miroir de l’adresse URL OSM  à partir duquel télécharger."
-
-msgid "Base URL"
-msgstr "URL de base"
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr "À propos du greffon"
 
@@ -28122,22 +28907,28 @@ msgid "Configure the list of sites where modules are downloaded from"
 msgstr "Configurer la liste des sites d’où les modules sont téléchargés"
 
 msgid "Add Open Data Module description URL."
-msgstr ""
+msgstr "Ajouter une adresse de description des modules Open Data"
 
 msgid "Edit Open Data Module description URL."
-msgstr ""
+msgstr "Éditer l’adresse de description des modules Open Data"
 
 msgid "Open Data Module description URL"
-msgstr ""
+msgstr "Adresse de description des modules Open Data"
 
 msgid "Download OSM data corresponding to the current data set."
 msgstr ""
+"Télécharger les données OSM correspondant à l’ensemble de données actuel."
 
 msgid "Diff"
 msgstr "Différences"
 
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
+"Rechercher les différences entre l’ensemble de données actuel et les données "
+"OSM existantes"
+
+msgid "Tools"
+msgstr "Outils"
 
 msgid "Open tools menu for this data."
 msgstr "Ouvrir le menu de gestion de ces données."
@@ -28164,6 +28955,8 @@ msgid ""
 "Import only raw data (i.e. do not add/delete tags or replace them by "
 "standard OSM tags)"
 msgstr ""
+"N’importer que des données brutes (c’est-à-dire  sans ajouter ou supprimer "
+"d’étiquettes ni les remplacer par des étiquettes OSM standards)"
 
 msgid "Overpass API server:"
 msgstr "Serveur de l’API Overpass  :"
@@ -28318,11 +29111,15 @@ msgid ""
 "Warning: Cannot download module ''{0}''. Its download link is not known. "
 "Skipping download."
 msgstr ""
+"Attention : Impossible de télécharger le module « {0} ». Le lien de "
+"téléchargement est cassé. Téléchargement abandonnée."
 
 msgid ""
 "Warning: Cannot download module ''{0}''. Its download link ''{1}'' is not a "
 "valid URL. Skipping download."
 msgstr ""
+"Attention : Impossible de télécharger le module « {0} ». Le lien de "
+"téléchargement « {1} » n’est pas une adresse valide. Téléchargement abanonné."
 
 msgid "Downloading Module {0}..."
 msgstr "Téléchargement du Module {0}..."
@@ -28343,6 +29140,8 @@ msgid ""
 "Skipping module update after elapsed update interval. Automatic update at "
 "startup is disabled."
 msgstr ""
+"Temps de mise à jour écoulé, abandon de la mise à jour des modules. Mise à "
+"jour automatique au démarrage déactivée."
 
 msgid ""
 "Running module update after elapsed update interval. Automatic update at "
@@ -28410,11 +29209,15 @@ msgid ""
 "Warning: failed to install already downloaded module ''{0}''. Skipping "
 "installation. JOSM is still going to load the old module version."
 msgstr ""
+"Attention : Échec de l’installation du module téléchargé « {0} ». Abandon de "
+"l’installation. JOSM continue à utiliser l’ancienne version du module."
 
 msgid ""
 "Warning: failed to install module ''{0}'' from temporary download file "
 "''{1}''. Renaming failed."
 msgstr ""
+"Attention : Échec de l’installation du module « {0} » à partir du fichier "
+"temporaire téléchargé « {1} ». Échec du renommage."
 
 msgid ""
 "Do not ask again and remember my decision (go to Preferences->Modules to "
@@ -28434,12 +29237,14 @@ msgstr "<b>Module fourni par une source externe :</b> {0}"
 
 msgid "Failed to create module information from manifest for module ''{0}''"
 msgstr ""
+"Échec de la création des informations du module à partir du manifeste du "
+"module « {0} »"
 
 msgid "Illegal entry in module list."
-msgstr ""
+msgstr "Entrée illégale dans la liste des modules."
 
 msgid "Reading local module information.."
-msgstr ""
+msgstr "Lecture des informations des modules locaux..."
 
 msgid "Processing module site cache files..."
 msgstr ""
@@ -28469,7 +29274,7 @@ msgid "Writing module list to local cache ''{0}''"
 msgstr ""
 
 msgid "Parsing module list from site ''{0}''"
-msgstr ""
+msgstr "Analyse de la liste des modules du site « {0} »"
 
 msgid ""
 "Failed to parse module list document from site ''{0}''. Skipping site. "
@@ -28477,7 +29282,7 @@ msgid ""
 msgstr ""
 
 msgid "Processing module list from site ''{0}''"
-msgstr ""
+msgstr "Traitement de la liste des modules du site « {0} »"
 
 msgid "Open Visible..."
 msgstr "Ouvrir le visible…"
@@ -28876,6 +29681,9 @@ msgid ""
 "layers!\n"
 "Please use {0} to upload your KMLs that were calibrated incorrectly."
 msgstr ""
+"La calibration KML est à l’état bêta et peut produire des calques mal "
+"calibrés !\n"
+"Veuillez utiliser {0} pour télécharger vos KML mal calibrés."
 
 msgid "PicLayer move"
 msgstr "déplacement PicLayer"
@@ -29007,28 +29815,28 @@ msgstr ""
 "chargés automatiquement."
 
 msgid "Point info"
-msgstr ""
+msgstr "Point info"
 
 msgid "Point info."
-msgstr ""
+msgstr "Point info."
 
 msgid "Connecting server"
 msgstr "En cours de connection au serveur"
 
 msgid "PointInfo"
-msgstr ""
+msgstr "PointInfo"
 
 msgid "Data not available."
 msgstr "Données non disponibles."
 
 msgid "Add new address point"
-msgstr ""
+msgstr "Ajouter un nouveau point d’adresse"
 
 msgid "Tags copied to clipboard."
 msgstr "Attributs copiés dans le presse-papier"
 
 msgid "New address point added."
-msgstr ""
+msgstr "Nouveau point d’adresse ajouté"
 
 msgid "Download Osmosis poly"
 msgstr ""
@@ -29050,13 +29858,13 @@ msgstr ""
 "Une ligne de coordonnée de polygone doit contenir exactement 2 nombres"
 
 msgid "Unable to parse {0} as a number"
-msgstr ""
+msgstr "Impossible d’analyser {0} comme un nombre"
 
 msgid "Invalid coordinates were found: {0}, {1}"
 msgstr "Coordonnées invalides trouvées : {0}, {1}"
 
 msgid "{0} points were outside world bounds and were moved"
-msgstr ""
+msgstr "{0} point étaient hors des frontières et ont été déplacés"
 
 msgid "Osmosis polygon filter files"
 msgstr ""
@@ -29113,7 +29921,7 @@ msgid "Printing has failed."
 msgstr "L’’impression a échoué."
 
 msgid "Proj4J: {0} selected"
-msgstr ""
+msgstr "Proj4J: {0} sélectionné"
 
 msgid "Selected: {0}"
 msgstr "Sélectionné : {0}"
@@ -29387,6 +30195,27 @@ msgstr "Transport public : activer les points de chemins"
 msgid "Public Transport: Edit waypoint name"
 msgstr "Transport public : modifier le nom d’un point de chemin"
 
+msgid "Public transport routes"
+msgstr "Lignes de transport public"
+
+msgid "Toggle direction arrows"
+msgstr "Inverser les flèches de direction"
+
+msgid "Toggle reference labels"
+msgstr "Inverser les étiquettes de référence"
+
+msgid "Visualize public transport routes"
+msgstr "Visualiser les lignes de transport public"
+
+msgid "Filters"
+msgstr "Filtres"
+
+msgid "Choose Filter"
+msgstr "Sélectionner un filtre"
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr "Boîte d’outils de relation"
 
@@ -29564,6 +30393,9 @@ msgstr "Changeset annulé"
 msgid "It is not allowed to revert changeset from {0}"
 msgstr "Il n’est pas permis d’annuler le groupe de modifications depuis {0}"
 
+msgid "Downloading objects history"
+msgstr "Télécharge l''historique des objets"
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr "Cible de fusion manquante pour {0} avec l’identifiant {1}"
 
@@ -29573,6 +30405,9 @@ msgstr "Historique des objets"
 msgid "History reverter"
 msgstr "Réversion de l’historique"
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr "Préparation des données de l’historique…"
 
@@ -29764,7 +30599,10 @@ msgid "New value for {0}"
 msgstr "Nouvelle valeur pour {0}"
 
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
-msgstr ""
+msgstr "Préférence ''{0}'' manquante. Impossible d''initialiser SdsApi."
+
+msgid "Proxy Authentication Required"
+msgstr "Authentification par proxy exigée"
 
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
@@ -29775,7 +30613,7 @@ msgstr ""
 "</p></body></html>"
 
 msgid "Enter credentials for Separate Data Store API"
-msgstr ""
+msgstr "Saisir les identifiants pour l’API Separate Data Store"
 
 msgid "Please enter the user name of your SDS account"
 msgstr "Veuillez entrer le nom d’utilisateur de votre compte SDS"
@@ -29816,7 +30654,7 @@ msgid "Separate Data Store"
 msgstr "Magasin de donnée séparé"
 
 msgid "Configures access to the Separate Data Store."
-msgstr ""
+msgstr "Configurer l’accès à Separate Data Store."
 
 msgid "Server"
 msgstr "Serveur"
@@ -29855,7 +30693,7 @@ msgid "SDS password"
 msgstr "Mot de passe SDS"
 
 msgid "Test credentials now"
-msgstr ""
+msgstr "Tester les identifiants"
 
 msgid "SDS tag prefix"
 msgstr "préfixe de l''attribut SDS"
@@ -29955,6 +30793,39 @@ msgstr "Seuil de fusion des nœuds voisins"
 msgid "SeaMap Editor"
 msgstr "Éditeur de carte maritime"
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr "Tracer une courbe spline"
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr "Splines"
+
+msgid "Spline drawing preferences"
+msgstr "Préférences de tracé des splines"
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr "Restaurer noeud {0}"
+
 msgid "OSM Export"
 msgstr "Export OSM"
 
@@ -29964,6 +30835,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr "Export SUMO"
 
+msgid "Export"
+msgstr "Exporter"
+
 msgid "AutoSave LiveData"
 msgstr "Sauvegarde automatique des données en direct"
 
@@ -30217,9 +31091,6 @@ msgstr "Erreur Tracer2"
 msgid "Parameter for server request"
 msgstr "Paramètre pour la requête  serveur"
 
-msgid "Tile size:"
-msgstr "Taille de la tuile:"
-
 msgid "Resolution:"
 msgstr "Résolution :"
 
@@ -31962,9 +32833,6 @@ msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 "Recherchez le point de passage. Cliquez et bougez la carte sur le point."
 
-msgid "Way Select"
-msgstr "Sélection du chemin"
-
 msgid "Add names from Wikipedia"
 msgstr "Ajout du nom depuis Wikipedia"
 
diff --git a/i18n/po/ga.po b/i18n/po/ga.po
new file mode 100644
index 0000000..87e5d3d
--- /dev/null
+++ b/i18n/po/ga.po
@@ -0,0 +1,30291 @@
+# Irish translation for josm
+# Copyright (c) 2015 Rosetta Contributors and Canonical Ltd 2015
+# This file is distributed under the same license as the josm package.
+# FIRST AUTHOR <EMAIL at ADDRESS>, 2015.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: josm\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL at ADDRESS>\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
+"PO-Revision-Date: 2015-05-17 11:43+0000\n"
+"Last-Translator: Thorsten <Unknown>\n"
+"Language-Team: Irish <ga at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n==2 ? 1 : 2;\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:43+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
+
+msgid "{0}: option ''{1}'' is ambiguous"
+msgstr ""
+
+msgid "{0}: option ''--{1}'' does not allow an argument"
+msgstr ""
+
+msgid "{0}: option ''{1}{2}'' does not allow an argument"
+msgstr ""
+
+msgid "{0}: option ''{1}'' requires an argument"
+msgstr ""
+
+msgid "{0}: unrecognized option ''--{1}''"
+msgstr ""
+
+msgid "{0}: unrecognized option ''{1}{2}''"
+msgstr ""
+
+msgid "{0}: illegal option -- {1}"
+msgstr ""
+
+msgid "{0}: invalid option -- {1}"
+msgstr ""
+
+msgid "{0}: option requires an argument -- {1}"
+msgstr ""
+
+msgid "Invalid value {0} for parameter ''has_arg''"
+msgstr ""
+
+msgid "Background Terms of Use"
+msgstr ""
+
+msgid "Opening link not supported on current platform (''{0}'')"
+msgstr ""
+
+msgid "ERROR: {0}"
+msgstr ""
+
+msgid "WARNING: {0}"
+msgstr ""
+
+msgid "INFO: {0}"
+msgstr ""
+
+msgid "DEBUG: {0}"
+msgstr ""
+
+msgid "Cause: "
+msgstr ""
+
+msgid "Executing platform startup hook"
+msgstr ""
+
+msgid "Building main menu"
+msgstr ""
+
+msgid "Help"
+msgstr "Cabhair"
+
+msgid "Initializing OSM API"
+msgstr ""
+
+msgid "Initializing validator"
+msgstr ""
+
+msgid "Initializing presets"
+msgstr ""
+
+msgid "Initializing map styles"
+msgstr ""
+
+msgid "Loading imagery preferences"
+msgstr ""
+
+msgid "Updating user interface"
+msgstr ""
+
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr ""
+
+msgid "Warning"
+msgstr "Rabhadh"
+
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr ""
+
+msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
+msgstr ""
+
+msgid ""
+"<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
+"can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
+"compatible) version of JOSM.</li></ul>More Info:"
+msgstr ""
+
+msgid "Exit JOSM"
+msgstr "Scoir JOSM"
+
+msgid "Continue, try anyway"
+msgstr ""
+
+msgid "Error"
+msgstr "Earráid"
+
+msgid "About"
+msgstr "Maidir Leis"
+
+msgid "Display the about screen."
+msgstr ""
+
+msgid "Java OpenStreetMap Editor"
+msgstr ""
+
+msgid "Version {0}"
+msgstr ""
+
+msgid "Last change at {0}"
+msgstr ""
+
+msgid "Java Version {0}"
+msgstr "Leagan Java  {0}"
+
+msgid "Homepage"
+msgstr "Leathanach Baile"
+
+msgid "Bug Reports"
+msgstr ""
+
+msgid "Info"
+msgstr "Eolas"
+
+msgid "Readme"
+msgstr ""
+
+msgid "Revision"
+msgstr "Leasú"
+
+msgid "Contribution"
+msgstr ""
+
+msgid "License"
+msgstr "Ceadúnas"
+
+msgid "Plugins"
+msgstr "Breiseáin"
+
+msgid "About JOSM..."
+msgstr ""
+
+msgid ""
+"You are about to launch {0} browser window.<br>This may both clutter your "
+"screen with browser windows<br>and take some time to finish."
+msgid_plural ""
+"You are about to launch {0} browser windows.<br>This may both clutter your "
+"screen with browser windows<br>and take some time to finish."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Continue"
+msgstr "Lean ar aghaidh"
+
+msgid "Click to continue and to open {0} browser"
+msgid_plural "Click to continue and to open {0} browsers"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Cancel"
+msgstr "Cealaigh"
+
+msgid "Click to abort launching external browsers"
+msgstr ""
+
+msgid "Please select at least one already uploaded node, way, or relation."
+msgstr ""
+
+msgid "Please select the target layer."
+msgstr ""
+
+msgid "Select target layer"
+msgstr ""
+
+msgid "Merge"
+msgstr "Cumaisc"
+
+msgid ""
+"<html>There are no layers the source layer<br>''{0}''<br>could be merged "
+"to.</html>"
+msgstr ""
+
+msgid "No target layers"
+msgstr ""
+
+msgid "Select"
+msgstr "Roghnaigh"
+
+msgid ""
+"Set the selected elements on the map to the selected items in the list above."
+msgstr ""
+
+msgid "Add imagery layer {0}"
+msgstr ""
+
+msgid "Select image format for WMS layer"
+msgstr ""
+
+msgid "Select WMS layers"
+msgstr ""
+
+msgid "Add layers"
+msgstr ""
+
+msgid "Invalid service URL."
+msgstr ""
+
+msgid "WMS Error"
+msgstr ""
+
+msgid "Could not retrieve WMS layer list."
+msgstr ""
+
+msgid "Could not parse WMS layer list."
+msgstr ""
+
+msgid "Add Node..."
+msgstr ""
+
+msgid "Add a node by entering latitude / longitude or easting / northing."
+msgstr ""
+
+msgid "Edit: {0}"
+msgstr ""
+
+msgid "Align Nodes in Circle"
+msgstr ""
+
+msgid "Move the selected nodes into a circle."
+msgstr ""
+
+msgid "Tool: {0}"
+msgstr ""
+
+msgid "Not enough nodes in selected ways."
+msgstr ""
+
+msgid "Please select at least four nodes."
+msgstr ""
+
+msgid "Cannot determine center of selected nodes."
+msgstr ""
+
+msgid ""
+"One or more nodes involved in this action is outside of the downloaded area."
+msgstr ""
+
+msgid "Align Nodes in Line"
+msgstr ""
+
+msgid "Move the selected nodes in to a line."
+msgstr ""
+
+msgid "Please select at least three nodes."
+msgstr ""
+
+msgid "Can not align a polygon. Abort."
+msgstr ""
+
+msgid "Intersection of three or more ways can not be solved. Abort."
+msgstr ""
+
+msgid "Two parallels ways found. Abort."
+msgstr ""
+
+msgid "data"
+msgstr ""
+
+msgid "layer"
+msgstr ""
+
+msgid "selection"
+msgstr ""
+
+msgid "conflict"
+msgstr ""
+
+msgid "download"
+msgstr ""
+
+msgid "problem"
+msgstr ""
+
+msgid "previous"
+msgstr ""
+
+msgid "next"
+msgstr ""
+
+msgid "Nothing selected to zoom to."
+msgstr ""
+
+msgid "Information"
+msgstr ""
+
+msgid "Zoom to {0}"
+msgstr ""
+
+msgid "Zoom the view to {0}."
+msgstr ""
+
+msgid "View: {0}"
+msgstr ""
+
+msgid "No conflicts to zoom to"
+msgstr ""
+
+msgid "Changeset Manager"
+msgstr ""
+
+msgid "Toggle visibility of Changeset Manager window"
+msgstr ""
+
+msgid "Close open changesets"
+msgstr ""
+
+msgid "Closes open changesets"
+msgstr ""
+
+msgid "File: {0}"
+msgstr ""
+
+msgid "There are no open changesets"
+msgstr ""
+
+msgid "No open changesets"
+msgstr ""
+
+msgid "Downloading open changesets ..."
+msgstr ""
+
+msgid "Combine Way"
+msgstr ""
+
+msgid "Combine several ways into one."
+msgstr ""
+
+msgid "Change directions?"
+msgstr ""
+
+msgid "Reverse and Combine"
+msgstr ""
+
+msgid ""
+"The ways can not be combined in their current directions.  Do you want to "
+"reverse some of them?"
+msgstr ""
+
+msgid ""
+"Could not combine ways<br>(They could not be merged into a single string of "
+"nodes)"
+msgstr ""
+
+msgid "Combine {0} way"
+msgid_plural "Combine {0} ways"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Please select at least two ways to combine."
+msgstr ""
+
+msgid "Copy"
+msgstr ""
+
+msgid "Copy selected objects to paste buffer."
+msgstr ""
+
+msgid "Please select something to copy."
+msgstr ""
+
+msgid "Copy Coordinates"
+msgstr ""
+
+msgid "Copy coordinates of selected nodes to clipboard."
+msgstr ""
+
+msgid "Create Circle"
+msgstr ""
+
+msgid "Create a circle from three selected nodes."
+msgstr ""
+
+msgid ""
+"Please select exactly two or three nodes or one way with exactly two or "
+"three nodes."
+msgstr ""
+
+msgid "Those nodes are not in a circle. Aborting."
+msgstr ""
+
+msgid "Update multipolygon"
+msgstr ""
+
+msgid "Create multipolygon"
+msgstr ""
+
+msgid "No data loaded."
+msgstr ""
+
+msgid "You must select at least one way."
+msgstr ""
+
+msgid "Delete"
+msgstr ""
+
+msgid "Delete selected objects."
+msgstr ""
+
+msgid "Toggle dialogs panel"
+msgstr ""
+
+msgid "Toggle dialogs panel, maximize mapview"
+msgstr ""
+
+msgid "Distribute Nodes"
+msgstr ""
+
+msgid "Distribute the selected nodes to equal distances along a line."
+msgstr ""
+
+msgid "Ignoring {0} nodes with null coordinates"
+msgstr ""
+
+msgid ""
+"Please select :\n"
+"* One no self-crossing way with at most two of its nodes;\n"
+"* Three nodes."
+msgstr ""
+
+msgid "Download from OSM..."
+msgstr ""
+
+msgid "Download map data from the OSM server."
+msgstr ""
+
+msgid ""
+"<html>This action will require {0} individual<br>download requests. Do you "
+"wish<br>to continue?</html>"
+msgstr ""
+
+msgid "Download data"
+msgstr ""
+
+msgid "Download notes in current view"
+msgstr ""
+
+msgid "Download object..."
+msgstr ""
+
+msgid "Download OSM object by ID."
+msgstr ""
+
+msgid "Download parent ways/relations..."
+msgstr ""
+
+msgid "Download objects referring to one of the selected objects"
+msgstr ""
+
+msgid "Duplicate"
+msgstr ""
+
+msgid "Duplicate selection by copy and immediate paste."
+msgstr ""
+
+msgid "Exit"
+msgstr ""
+
+msgid "Exit the application."
+msgstr ""
+
+msgid "Expert Mode"
+msgstr ""
+
+msgid "Enable/disable expert mode"
+msgstr ""
+
+msgid "Follow line"
+msgstr ""
+
+msgid "Continues drawing a line that shares nodes with another line."
+msgstr ""
+
+msgid "Follow"
+msgstr ""
+
+msgid "Fullscreen view"
+msgstr ""
+
+msgid "Toggle fullscreen view"
+msgstr ""
+
+msgid "Export to GPX..."
+msgstr ""
+
+msgid "Export the data to GPX file."
+msgstr ""
+
+msgid "Nothing to export. Get some data first."
+msgstr ""
+
+msgid "Export GPX file"
+msgstr ""
+
+msgid "History"
+msgstr ""
+
+msgid "Display history information about OSM ways, nodes, or relations."
+msgstr ""
+
+msgid "Show history"
+msgstr ""
+
+msgid "History (web)"
+msgstr ""
+
+msgid ""
+"Display history information about OSM ways, nodes, or relations in web "
+"browser."
+msgstr ""
+
+msgid "New offset"
+msgstr ""
+
+msgid "Adjust the position of this imagery layer"
+msgstr ""
+
+msgid "Adjust imagery offset"
+msgstr ""
+
+msgid "OK"
+msgstr ""
+
+msgid ""
+"Use arrow keys or drag the imagery layer with mouse to adjust the imagery "
+"offset.\n"
+"You can also enter east and north offset in the {0} coordinates.\n"
+"If you want to save the offset as bookmark, enter the bookmark name below"
+msgstr ""
+
+msgid "Offset: "
+msgstr ""
+
+msgid "Bookmark name: "
+msgstr ""
+
+msgid "Overwrite"
+msgstr ""
+
+msgid "Offset bookmark already exists. Overwrite?"
+msgstr ""
+
+msgid "Advanced info"
+msgstr ""
+
+msgid ""
+"Display advanced object information about OSM nodes, ways, or relations."
+msgstr ""
+
+msgid "Advanced info (web)"
+msgstr ""
+
+msgid ""
+"Display object information about OSM nodes, ways, or relations in web "
+"browser."
+msgstr ""
+
+msgid "Join overlapping Areas"
+msgstr ""
+
+msgid "Joins areas that overlap each other"
+msgstr ""
+
+msgid "Please select at least one closed way that should be joined."
+msgstr ""
+
+msgid ""
+"One of the selected ways is not closed and therefore cannot be joined."
+msgstr ""
+
+msgid "Join area confirmation"
+msgstr ""
+
+msgid "The selected way has nodes outside of the downloaded data region."
+msgid_plural ""
+"The selected ways have nodes outside of the downloaded data region."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "This can lead to nodes being deleted accidentally."
+msgstr ""
+
+msgid "Are you really sure to continue?"
+msgstr ""
+
+msgid "Please abort if you are not sure"
+msgstr ""
+
+msgid "The selected area is incomplete. Continue?"
+msgstr ""
+
+msgid "No intersection found. Nothing was changed."
+msgstr ""
+
+msgid "Move tags from ways to relations"
+msgstr ""
+
+msgid "Reverting changes"
+msgstr ""
+
+msgid "Removed duplicate nodes"
+msgstr ""
+
+msgid "Added node on all intersections"
+msgstr ""
+
+msgid "Assemble new polygons"
+msgstr ""
+
+msgid "Delete relations"
+msgstr ""
+
+msgid "Delete Ways that are not part of an inner multipolygon"
+msgstr ""
+
+msgid "Joined overlapping areas"
+msgstr ""
+
+msgid ""
+"Some of the ways were part of relations that have been modified.<br>Please "
+"verify no errors have been introduced."
+msgstr ""
+
+msgid "Fix tag conflicts"
+msgstr ""
+
+msgid "Split ways into fragments"
+msgstr ""
+
+msgid "Sorry. Cannot handle multipolygon relations with multiple outer ways."
+msgstr ""
+
+msgid ""
+"Sorry. Cannot handle way that is outer in multiple multipolygon relations."
+msgstr ""
+
+msgid ""
+"Sorry. Cannot handle way that is both inner and outer in multipolygon "
+"relations."
+msgstr ""
+
+msgid ""
+"Sorry. Cannot handle way that is inner in multiple multipolygon relations."
+msgstr ""
+
+msgid "Removed Element from Relations"
+msgstr ""
+
+msgid "Remove tags from inner ways"
+msgstr ""
+
+msgid "Join Areas Function"
+msgstr ""
+
+msgid "Join Node to Way"
+msgstr ""
+
+msgid "Include a node into the nearest way segments"
+msgstr ""
+
+msgid "Move Node onto Way"
+msgstr ""
+
+msgid "Move the node onto the nearest way segments and include it"
+msgstr ""
+
+msgid "No Shortcut"
+msgstr ""
+
+msgid "Jump To Position"
+msgstr ""
+
+msgid "Opens a dialog that allows to jump to a specific location"
+msgstr ""
+
+msgid "Enter Lat/Lon to jump to position."
+msgstr ""
+
+msgid "You can also paste an URL from www.openstreetmap.org"
+msgstr ""
+
+msgid "Latitude"
+msgstr ""
+
+msgid "Longitude"
+msgstr ""
+
+msgid "Zoom (in metres)"
+msgstr ""
+
+msgid "URL"
+msgstr ""
+
+msgid "Jump there"
+msgstr ""
+
+msgid "Jump to Position"
+msgstr ""
+
+msgid "Could not parse Latitude, Longitude or Zoom. Please check."
+msgstr ""
+
+msgid "Unable to parse Lon/Lat"
+msgstr ""
+
+msgid "Lasso Mode"
+msgstr ""
+
+msgid "Lasso selection mode: select objects within a hand-drawn region"
+msgstr ""
+
+msgid "Rectified Image..."
+msgstr ""
+
+msgid "Download Rectified Images From Various Services"
+msgstr ""
+
+msgid "Imagery: {0}"
+msgstr ""
+
+msgid "Custom WMS Link"
+msgstr ""
+
+msgid "Supported Rectifier Services:"
+msgstr ""
+
+msgid "Visit Homepage"
+msgstr ""
+
+msgid "WMS URL or Image ID:"
+msgstr ""
+
+msgid "Add Rectified Image"
+msgstr ""
+
+msgid ""
+"Couldn''t match the entered link or id to the selected service. Please try "
+"again."
+msgstr ""
+
+msgid "No valid WMS URL or id"
+msgstr ""
+
+msgid "Merge layer"
+msgstr ""
+
+msgid "Merge the current layer into another layer"
+msgstr ""
+
+msgid "Merging layers with different upload policies"
+msgstr ""
+
+msgid ""
+"You are about to merge data between layers ''{0}'' and ''{1}''.<br /><br "
+"/>These layers have different upload policies and should not been merged as "
+"it.<br />Merging them will result to enforce the stricter policy (upload "
+"discouraged) to ''{1}''.<br /><br /><b>This is not the recommended way of "
+"merging such data</b>.<br />You should instead check and merge each object, "
+"one by one, by using ''<i>Merge selection</i>''.<br /><br />Are you sure you "
+"want to continue?"
+msgstr ""
+
+msgid "Ignore this hint and merge anyway"
+msgstr ""
+
+msgid "Merge Nodes"
+msgstr ""
+
+msgid "Merge nodes into the oldest one."
+msgstr ""
+
+msgid ""
+"Please select at least two nodes to merge or one node that is close to "
+"another node."
+msgstr ""
+
+msgid "Abort Merging"
+msgstr ""
+
+msgid "Click to abort merging nodes"
+msgstr ""
+
+msgid ""
+"Cannot merge nodes: Would have to delete way {0} which is still used by {1}"
+msgstr ""
+
+msgid "Merge {0} node"
+msgid_plural "Merge {0} nodes"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Merge selection"
+msgstr ""
+
+msgid "Merge the currently selected objects into another layer"
+msgstr ""
+
+msgid "Merging too many objects with different upload policies"
+msgstr ""
+
+msgid ""
+"You are about to merge more than 1 object between layers ''{0}'' and "
+"''{1}''.<br /><br /><b>This is not the recommended way of merging such "
+"data</b>.<br />You should instead check and merge each object, <b>one by "
+"one</b>.<br /><br />Are you sure you want to continue?"
+msgstr ""
+
+msgid "Mirror"
+msgstr ""
+
+msgid "Mirror selected nodes and ways."
+msgstr ""
+
+msgid "Please select at least one node or way."
+msgstr ""
+
+msgid "up"
+msgstr ""
+
+msgid "down"
+msgstr ""
+
+msgid "left"
+msgstr ""
+
+msgid "right"
+msgstr ""
+
+msgid "Move objects {0}"
+msgstr ""
+
+msgid "Move {0}"
+msgstr ""
+
+msgid "Moves Objects {0}"
+msgstr ""
+
+msgid "Cannot move objects outside of the world."
+msgstr ""
+
+msgid "Move Node..."
+msgstr ""
+
+msgid "Edit latitude and longitude of a node."
+msgstr ""
+
+msgid "New Layer"
+msgstr ""
+
+msgid "Create a new map layer."
+msgstr ""
+
+msgid "URL Files"
+msgstr ""
+
+msgid "Open..."
+msgstr ""
+
+msgid "Open a file."
+msgstr ""
+
+msgid "Opening files"
+msgstr ""
+
+msgid "Cannot open {0} file with the file importer ''{1}''."
+msgid_plural "Cannot open {0} files with the file importer ''{1}''."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"Cannot open {0} file because file does not exist or no suitable file "
+"importer is available."
+msgid_plural ""
+"Cannot open {0} files because files do not exist or no suitable file "
+"importer is available."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "no importer"
+msgstr ""
+
+msgid "does not exist"
+msgstr ""
+
+msgid "<html>Cannot open directory ''{0}''.<br>Please select a file.</html>"
+msgstr ""
+
+msgid "Open file"
+msgstr ""
+
+msgid "Opening {0} file..."
+msgid_plural "Opening {0} files..."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Opening file ''{0}'' ..."
+msgstr ""
+
+msgid "Open Location..."
+msgstr ""
+
+msgid "Open an URL."
+msgstr ""
+
+msgid "Separate Layer"
+msgstr ""
+
+msgid "Select if the data should be downloaded into a new layer"
+msgstr ""
+
+msgid "Enter URL to download:"
+msgstr ""
+
+msgid "Enter an URL from where data should be downloaded"
+msgstr ""
+
+msgid "Download Location"
+msgstr ""
+
+msgid "Download URL"
+msgstr ""
+
+msgid "Start downloading data"
+msgstr ""
+
+msgid "Close dialog and cancel downloading"
+msgstr ""
+
+msgid "Download Data"
+msgstr ""
+
+msgid "Which tasks to perform?"
+msgstr ""
+
+msgid "Ok"
+msgstr ""
+
+msgid ""
+"Cannot open URL ''{0}''<br>The following download tasks accept the URL "
+"patterns shown:<br>{1}"
+msgstr ""
+
+msgid ""
+"<h3>When one or more ways are selected, the shape is adjusted such, that all "
+"angles are 90 or 180 degrees.</h3>You can add two nodes to the selection. "
+"Then, the direction is fixed by these two reference nodes. (Afterwards, you "
+"can undo the movement for certain nodes:<br>Select them and press the "
+"shortcut for Orthogonalize / Undo. The default is Shift-Q.)"
+msgstr ""
+
+msgid "Orthogonalize Shape"
+msgstr ""
+
+msgid "Move nodes so all angles are 90 or 180 degrees"
+msgstr ""
+
+msgid "Orthogonalize Shape / Undo"
+msgstr ""
+
+msgid "Undo orthogonalization for certain nodes"
+msgstr ""
+
+msgid "Orthogonalize / Undo"
+msgstr ""
+
+msgid ""
+"Orthogonalize Shape / Undo<br>Please select nodes that were moved by the "
+"previous Orthogonalize Shape action!"
+msgstr ""
+
+msgid ""
+"<html>You are using the EPSG:4326 projection which might lead<br>to "
+"undesirable results when doing rectangular alignments.<br>Change your "
+"projection to get rid of this warning.<br>Do you want to continue?</html>"
+msgstr ""
+
+msgid "Selection must consist only of ways and nodes."
+msgstr ""
+
+msgid "Orthogonalize"
+msgstr ""
+
+msgid "Usage"
+msgstr ""
+
+msgid ""
+"<html>Please make sure all selected ways head in a similar direction<br>or "
+"orthogonalize them one by one.</html>"
+msgstr ""
+
+msgid "Please select ways with angles of approximately 90 or 180 degrees."
+msgstr ""
+
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Paste"
+msgstr ""
+
+msgid "Paste contents of paste buffer."
+msgstr ""
+
+msgid "Delete incomplete members?"
+msgstr ""
+
+msgid "Paste without incomplete members"
+msgstr ""
+
+msgid ""
+"The copied data contains incomplete objects.  When pasting the incomplete "
+"objects are removed.  Do you want to paste the data without the incomplete "
+"objects?"
+msgstr ""
+
+msgid "Paste Tags"
+msgstr ""
+
+msgid "Apply tags of contents of paste buffer to all selected items."
+msgstr ""
+
+msgid "Pasting {0} tag"
+msgid_plural "Pasting {0} tags"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "to {0} object"
+msgid_plural "to {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Preferences..."
+msgstr ""
+
+msgid "Open a preferences dialog for global settings."
+msgstr ""
+
+msgid "Preferences"
+msgstr ""
+
+msgid "Purge..."
+msgstr ""
+
+msgid "Forget objects but do not delete them on server when uploading."
+msgstr ""
+
+msgid "Purge"
+msgstr ""
+
+msgid "Confirm Purging"
+msgstr ""
+
+msgid ""
+"This operation makes JOSM forget the selected objects.<br> They will be "
+"removed from the layer, but <i>not</i> deleted<br> on the server when "
+"uploading."
+msgstr ""
+
+msgid ""
+"The following dependent objects will be purged<br> in addition to the "
+"selected objects:"
+msgstr ""
+
+msgid "Add to selection"
+msgstr ""
+
+msgid ""
+"Some of the objects are modified.<br> Proceed, if these changes should be "
+"discarded.</html>"
+msgstr ""
+
+msgid "Clear Undo/Redo buffer"
+msgstr ""
+
+msgid "Redo"
+msgstr ""
+
+msgid "Redo the last undone action."
+msgstr ""
+
+msgid "Redo ..."
+msgstr ""
+
+msgid "Redo {0}"
+msgstr ""
+
+msgid "Rename layer"
+msgstr ""
+
+msgid "Also rename the file"
+msgstr ""
+
+msgid "Could not rename file ''{0}''"
+msgstr ""
+
+msgid "Report bug"
+msgstr ""
+
+msgid "Report a ticket to JOSM bugtracker"
+msgstr ""
+
+msgid "Restart"
+msgstr ""
+
+msgid "Restart the application."
+msgstr ""
+
+msgid "Click to restart later."
+msgstr ""
+
+msgid "Reverse way"
+msgstr ""
+
+msgid "Reverse Ways"
+msgstr ""
+
+msgid "Reverse the direction of all selected ways."
+msgstr ""
+
+msgid "Please select at least one way."
+msgstr ""
+
+msgid "Reverse ways"
+msgstr ""
+
+msgid "Save"
+msgstr ""
+
+msgid "Save the current data."
+msgstr ""
+
+msgid "File {0} exists. Overwrite?"
+msgstr ""
+
+msgid "No Exporter found! Nothing saved."
+msgstr ""
+
+msgid "File exists. Overwrite?"
+msgstr ""
+
+msgid "Save As..."
+msgstr ""
+
+msgid "Save the current data to a new file."
+msgstr ""
+
+msgid "Search Notes..."
+msgstr ""
+
+msgid "Download notes from the note search API"
+msgstr ""
+
+msgid "Search the OSM API for notes containing words:"
+msgstr ""
+
+msgid "Search for notes"
+msgstr ""
+
+msgid "You must enter a search term"
+msgstr ""
+
+msgid "Select All"
+msgstr ""
+
+msgid ""
+"Select all undeleted objects in the data layer. This selects incomplete "
+"objects too."
+msgstr ""
+
+msgid "Non-branching way sequences"
+msgstr ""
+
+msgid "Select non-branching sequences of ways"
+msgstr ""
+
+msgid "Load Session"
+msgstr ""
+
+msgid "Load a session from file."
+msgstr ""
+
+msgid "Open session"
+msgstr ""
+
+msgid "Loading session ''{0}''"
+msgstr ""
+
+msgid "Data Error"
+msgstr ""
+
+msgid "IO Error"
+msgstr ""
+
+msgid "<html>Could not load session file ''{0}''.<br>Error is:<br>{1}</html>"
+msgstr ""
+
+msgid "Save Session As..."
+msgstr ""
+
+msgid "Save the current session to a new file."
+msgstr ""
+
+msgid "Session file (archive) (*.joz)"
+msgstr ""
+
+msgid "Session file (*.jos)"
+msgstr ""
+
+msgid "Save session"
+msgstr ""
+
+msgid "<html>Could not save session file ''{0}''.<br>Error is:<br>{1}</html>"
+msgstr ""
+
+msgid "Save Session"
+msgstr ""
+
+msgid "Save As"
+msgstr ""
+
+msgid "Layers"
+msgstr ""
+
+msgid "No exporter for this layer"
+msgstr ""
+
+msgid "Show Status Report"
+msgstr ""
+
+msgid ""
+"Show status report with useful information that can be attached to bugs"
+msgstr ""
+
+msgid "Help: {0}"
+msgstr ""
+
+msgid "Status Report"
+msgstr ""
+
+msgid "Copy to clipboard and close"
+msgstr ""
+
+msgid "Close"
+msgstr ""
+
+msgid "Simplify Way"
+msgstr ""
+
+msgid "Delete unnecessary nodes from a way."
+msgstr ""
+
+msgid "Please select at least one way to simplify."
+msgstr ""
+
+msgid "Yes"
+msgstr ""
+
+msgid "Simplify all selected ways"
+msgstr ""
+
+msgid "Cancel operation"
+msgstr ""
+
+msgid ""
+"The selection contains {0} ways. Are you sure you want to simplify them all?"
+msgstr ""
+
+msgid "Simplify ways?"
+msgstr ""
+
+msgid "Simplify {0} way"
+msgid_plural "Simplify {0} ways"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Simplify Way (remove {0} node)"
+msgid_plural "Simplify Way (remove {0} nodes)"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Split Way"
+msgstr ""
+
+msgid "Split a way at the selected node."
+msgstr ""
+
+msgid ""
+"The current selection cannot be used for splitting - no node is selected."
+msgstr ""
+
+msgid "The selected nodes do not share the same way."
+msgstr ""
+
+msgid "The selected node is not in the middle of any way."
+msgid_plural "The selected nodes are not in the middle of any way."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"There is more than one way using the node you selected. Please select the "
+"way also."
+msgid_plural ""
+"There is more than one way using the nodes you selected. Please select the "
+"way also."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "You must select two or more nodes to split a circular way."
+msgstr ""
+
+msgid ""
+"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
+"middle of the way.)"
+msgstr ""
+
+msgid ""
+"A role based relation membership was copied to all new ways.<br>You should "
+"verify this and correct it when necessary."
+msgstr ""
+
+msgid ""
+"A relation membership was copied to all new ways.<br>You should verify this "
+"and correct it when necessary."
+msgstr ""
+
+msgid "Split way {0} into {1} part"
+msgid_plural "Split way {0} into {1} parts"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Toggle GPX Lines"
+msgstr ""
+
+msgid "Draw lines between raw gps points."
+msgstr ""
+
+msgid "Toggles the global setting ''{0}''."
+msgstr ""
+
+msgid "Encourage/discourage upload"
+msgstr ""
+
+msgid "UnGlue Ways"
+msgstr ""
+
+msgid "Duplicate nodes that are used by multiple ways."
+msgstr ""
+
+msgid "This node is not glued to anything else."
+msgstr ""
+
+msgid "None of these nodes are glued to anything else."
+msgstr ""
+
+msgid "None of this way''s nodes are glued to anything else."
+msgstr ""
+
+msgid "The current selection cannot be used for unglueing."
+msgstr ""
+
+msgid "Select either:"
+msgstr ""
+
+msgid "* One tagged node, or"
+msgstr ""
+
+msgid "* One node that is used by more than one way, or"
+msgstr ""
+
+msgid ""
+"* One node that is used by more than one way and one of those ways, or"
+msgstr ""
+
+msgid ""
+"* One way that has one or more nodes that are used by more than one way, or"
+msgstr ""
+
+msgid ""
+"* One way and one or more of its nodes that are used by more than one way."
+msgstr ""
+
+msgid ""
+"Note: If a way is selected, this way will get fresh copies of the unglued\n"
+"nodes and the new nodes will be selected. Otherwise, all ways will get "
+"their\n"
+"own copy and all nodes will be selected."
+msgstr ""
+
+msgid "Unglued Node"
+msgstr ""
+
+msgid "Dupe into {0} node"
+msgid_plural "Dupe into {0} nodes"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dupe {0} node into {1} nodes"
+msgid_plural "Dupe {0} nodes into {1} nodes"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Unglue confirmation"
+msgstr ""
+
+msgid ""
+"You are about to unglue nodes outside of the area you have "
+"downloaded.<br>This can cause problems because other objects (that you do "
+"not see) might use them.<br>Do you really want to unglue?"
+msgstr ""
+
+msgid ""
+"You are about to unglue incomplete objects.<br>This will cause problems "
+"because you don''t see the real object.<br>Do you really want to unglue?"
+msgstr ""
+
+msgid "Disconnect Node from Way"
+msgstr ""
+
+msgid "Disconnect nodes from a way they currently belong to"
+msgstr ""
+
+msgid "Select at least one node to be disconnected."
+msgstr ""
+
+msgid "Selected node cannot be disconnected from anything."
+msgid_plural "Selected nodes cannot be disconnected from anything."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"The affected way would disappear after disconnecting the selected node."
+msgid_plural ""
+"The affected way would disappear after disconnecting the selected nodes."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
+msgid "Undo"
+msgstr ""
+
+msgid "Undo the last action."
+msgstr ""
+
+msgid "Undo ..."
+msgstr ""
+
+msgid "Undo {0}"
+msgstr ""
+
+msgid "Unselect All"
+msgstr ""
+
+msgid "Unselect all objects."
+msgstr ""
+
+msgid "Update data"
+msgstr ""
+
+msgid "Updates the objects in the active data layer from the server."
+msgstr ""
+
+msgid "Update modified"
+msgstr ""
+
+msgid ""
+"Updates the currently modified objects from the server (re-downloads data)"
+msgstr ""
+
+msgid "No current dataset found"
+msgstr ""
+
+msgid "Did not find an object with id {0} in the current dataset"
+msgstr ""
+
+msgid "Update selection"
+msgstr ""
+
+msgid ""
+"Updates the currently selected objects from the server (re-downloads data)"
+msgstr ""
+
+msgid "There are no selected objects to update."
+msgstr ""
+
+msgid "Selection empty"
+msgstr ""
+
+msgid "Upload data"
+msgstr ""
+
+msgid "Upload all changes in the active data layer to the OSM server"
+msgstr ""
+
+msgid ""
+"<html>The data to be uploaded participates in unresolved conflicts of layer "
+"''{0}''.<br>You have to resolve them first.</html>"
+msgstr ""
+
+msgid "Upload discouraged"
+msgstr ""
+
+msgid ""
+"You are about to upload data from the layer ''{0}''.<br /><br />Sending data "
+"from this layer is <b>strongly discouraged</b>. If you continue,<br />it may "
+"require you subsequently have to revert your changes, or force other "
+"contributors to.<br /><br />Are you sure you want to continue?"
+msgstr ""
+
+msgid "Ignore this hint and upload anyway"
+msgstr ""
+
+msgid "No changes to upload."
+msgstr ""
+
+msgid "Nothing to upload. Get some data first."
+msgstr ""
+
+msgid "Upload note changes to server"
+msgstr ""
+
+msgid "Upload notes"
+msgstr ""
+
+msgid "Uploading notes to server"
+msgstr ""
+
+msgid "Upload selection"
+msgstr ""
+
+msgid "Upload all changes in the current selection to the OSM server."
+msgstr ""
+
+msgid "Checking parents for deleted objects"
+msgstr ""
+
+msgid "Reading parents of ''{0}''"
+msgstr ""
+
+msgid "Checking for deleted parents in the local dataset"
+msgstr ""
+
+msgid "Validation"
+msgstr ""
+
+msgid "Performs the data validation"
+msgstr ""
+
+msgid "Validating"
+msgstr ""
+
+msgid "Test {0}/{1}: Starting {2}"
+msgstr ""
+
+msgid "Updating ignored errors ..."
+msgstr ""
+
+msgid "Viewport Following"
+msgstr ""
+
+msgid "Enable/disable automatic moving of the map view to last placed node"
+msgstr ""
+
+msgid "Toggle Viewport Following"
+msgstr ""
+
+msgid "Wireframe View"
+msgstr ""
+
+msgid "Enable/disable rendering the map as wireframe only"
+msgstr ""
+
+msgid "Toggle Wireframe view"
+msgstr ""
+
+msgid "Zoom In"
+msgstr ""
+
+msgid "Zoom In (Keypad)"
+msgstr ""
+
+msgid "Zoom Out"
+msgstr ""
+
+msgid "Zoom Out (Keypad)"
+msgstr ""
+
+msgid "Zoom to"
+msgstr ""
+
+msgid "Zoom to the object the first selected member refers to"
+msgstr ""
+
+msgid "Zooming disabled because layer of this relation is not active"
+msgstr ""
+
+msgid "Zooming disabled because there is no selected member"
+msgstr ""
+
+msgid "Zoom to the first selected node"
+msgstr ""
+
+msgid "Zooming disabled because layer of this way is not active"
+msgstr ""
+
+msgid "Zooming disabled because there is no selected node"
+msgstr ""
+
+msgctxt "audio"
+msgid "Back"
+msgstr ""
+
+msgctxt "audio"
+msgid "Jump back."
+msgstr ""
+
+msgid "Audio: {0}"
+msgstr ""
+
+msgctxt "audio"
+msgid "Faster"
+msgstr ""
+
+msgctxt "audio"
+msgid "Faster Forward"
+msgstr ""
+
+msgctxt "audio"
+msgid "Forward"
+msgstr ""
+
+msgctxt "audio"
+msgid "Jump forward"
+msgstr ""
+
+msgctxt "audio"
+msgid "Next Marker"
+msgstr ""
+
+msgctxt "audio"
+msgid "Play next marker."
+msgstr ""
+
+msgctxt "audio"
+msgid "Play/Pause"
+msgstr ""
+
+msgid "Play/pause audio."
+msgstr ""
+
+msgctxt "audio"
+msgid "Previous Marker"
+msgstr ""
+
+msgctxt "audio"
+msgid "Play previous marker."
+msgstr ""
+
+msgctxt "audio"
+msgid "Slower"
+msgstr ""
+
+msgctxt "audio"
+msgid "Slower Forward"
+msgstr ""
+
+msgid "Download GPS"
+msgstr ""
+
+msgid "Downloading GPS data"
+msgstr ""
+
+msgid "Downloaded GPX Data"
+msgstr ""
+
+msgid "Markers from {0}"
+msgstr ""
+
+msgid "Download OSM Notes"
+msgstr ""
+
+msgid "Downloading Notes"
+msgstr ""
+
+msgid "Notes"
+msgstr ""
+
+msgid "{0} note has been downloaded."
+msgid_plural "{0} notes have been downloaded."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"Since the download limit was {0}, there might be more notes to download."
+msgstr ""
+
+msgid ""
+"Request a smaller area to make sure that all notes are being downloaded."
+msgstr ""
+
+msgid "More notes to download"
+msgstr ""
+
+msgid "Download OSM Notes within Bounds"
+msgstr ""
+
+msgid "Download OSM Note by ID"
+msgstr ""
+
+msgid "Download Compressed OSM Change"
+msgstr ""
+
+msgid "Download OSM Change"
+msgstr ""
+
+msgid "Download Compressed OSM"
+msgstr ""
+
+msgid "Download OSM object by ID"
+msgstr ""
+
+msgid "Download OSM"
+msgstr ""
+
+msgid "Downloading data"
+msgstr ""
+
+msgid ""
+"Ignoring exception because download has been canceled. Exception was: {0}"
+msgstr ""
+
+msgid "No data found in this area."
+msgstr ""
+
+msgid "OSM Server URL:"
+msgstr ""
+
+msgid "Command"
+msgstr ""
+
+msgid "Request details: {0}"
+msgstr ""
+
+msgid "Download OSM URL"
+msgstr ""
+
+msgid "There was {0} conflict during import."
+msgid_plural "There were {0} conflicts during import."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Conflict during download"
+msgid_plural "Conflicts during download"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "({0}/{1}) Loading parents of node {2}"
+msgstr ""
+
+msgid "({0}/{1}) Loading parents of way {2}"
+msgstr ""
+
+msgid "({0}/{1}) Loading parents of relation {2}"
+msgstr ""
+
+msgid "Download session"
+msgstr ""
+
+msgid "Download {0} of {1} ({2} left)"
+msgstr ""
+
+msgid "Updating data"
+msgstr ""
+
+msgid "Check on the server"
+msgstr ""
+
+msgid ""
+"Click to check whether objects in your local dataset are deleted on the "
+"server"
+msgstr ""
+
+msgid "Ignore"
+msgstr ""
+
+msgid "Click to abort and to resume editing"
+msgstr ""
+
+msgid ""
+"There is {0} object in your local dataset which might be deleted on the "
+"server.<br>If you later try to delete or update this the server is likely to "
+"report a conflict."
+msgid_plural ""
+"There are {0} objects in your local dataset which might be deleted on the "
+"server.<br>If you later try to delete or update them the server is likely to "
+"report a conflict."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"Click <strong>{0}</strong> to check the state of this object on the server."
+msgid_plural ""
+"Click <strong>{0}</strong> to check the state of these objects on the server."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click <strong>{0}</strong> to ignore.</html>"
+msgstr ""
+
+msgid "Deleted or moved objects"
+msgstr ""
+
+msgid "The following errors occurred during mass download: {0}"
+msgstr ""
+
+msgid "Errors during download"
+msgstr ""
+
+msgid "Error during download"
+msgstr ""
+
+msgid "Add a new Note"
+msgstr ""
+
+msgid "Add note mode"
+msgstr ""
+
+msgid "Click the location where you wish to create a new note"
+msgstr ""
+
+msgid "Create new note"
+msgstr ""
+
+msgid "Create note"
+msgstr ""
+
+msgid "Enter a detailed comment to create a note"
+msgstr ""
+
+msgid "You must enter a comment to create a new note"
+msgstr ""
+
+msgid "Delete Mode"
+msgstr ""
+
+msgid "Delete nodes or ways."
+msgstr ""
+
+msgid "Mode: {0}"
+msgstr ""
+
+msgid ""
+"Click to delete. Shift: delete way segment. Alt: do not delete unused nodes "
+"when deleting a way. Ctrl: delete referring objects."
+msgstr ""
+
+msgid "Draw"
+msgstr ""
+
+msgid "Draw nodes"
+msgstr ""
+
+msgid "Mode: Draw Angle snapping"
+msgstr ""
+
+msgid "Backspace in Add mode"
+msgstr ""
+
+msgid "helper line"
+msgstr ""
+
+msgid "Cannot add a node outside of the world."
+msgstr ""
+
+msgid "Add node"
+msgstr ""
+
+msgid "Add node into way"
+msgstr ""
+
+msgid "Connect existing way to node"
+msgstr ""
+
+msgid "Add a new node to an existing way"
+msgstr ""
+
+msgid "Add node into way and connect"
+msgstr ""
+
+msgid "Create new node."
+msgstr ""
+
+msgid "Select node under cursor."
+msgstr ""
+
+msgid "Insert new node into way."
+msgid_plural "Insert new node into {0} ways."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Start new way from last node."
+msgstr ""
+
+msgid "Continue way from last node."
+msgstr ""
+
+msgid "Angle snapping active."
+msgstr ""
+
+msgid "Finish drawing."
+msgstr ""
+
+msgid "Toggle snapping by {0}"
+msgstr ""
+
+msgid "Show helper geometry"
+msgstr ""
+
+msgid "Snap to node projections"
+msgstr ""
+
+msgid "Disable"
+msgstr ""
+
+msgid "0,90,..."
+msgstr ""
+
+msgid "0,45,90,..."
+msgstr ""
+
+msgid "0,30,45,60,90,..."
+msgstr ""
+
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
+msgid "Angle snapping"
+msgstr ""
+
+msgid "Switch angle snapping mode while drawing"
+msgstr ""
+
+msgid "Dual alignment"
+msgstr ""
+
+msgid "Switch dual alignment mode while extruding"
+msgstr ""
+
+msgid "Extrude"
+msgstr ""
+
+msgid "Create areas"
+msgstr ""
+
+msgid "Extrude Dual alignment"
+msgstr ""
+
+msgid ""
+"Drag a way segment to make a rectangle. Ctrl-drag to move a segment along "
+"its normal, Alt-drag to create a new rectangle, double click to add a new "
+"node."
+msgstr ""
+
+msgid "Dual alignment active."
+msgstr ""
+
+msgid "Segment collapsed due to its direction reversing."
+msgstr ""
+
+msgid "Move a segment along its normal, then release the mouse button."
+msgstr ""
+
+msgid ""
+"Move the node along one of the segments, then release the mouse button."
+msgstr ""
+
+msgid "Draw a rectangle of the desired size, then release the mouse button."
+msgstr ""
+
+msgid "Extrude: main line"
+msgstr ""
+
+msgid "Extrude: helper line"
+msgstr ""
+
+msgid "Extrude Way"
+msgstr ""
+
+msgid "Improve Way Accuracy"
+msgstr ""
+
+msgid "Improve Way Accuracy mode"
+msgstr ""
+
+msgid "improve way accuracy helper line"
+msgstr ""
+
+msgid "Click on the way to start improving its shape."
+msgstr ""
+
+msgid "Select a way that you want to make more accurate."
+msgstr ""
+
+msgid ""
+"Click to add a new node. Release Ctrl to move existing nodes or hold Alt to "
+"delete."
+msgstr ""
+
+msgid ""
+"Click to delete the highlighted node. Release Alt to move existing nodes or "
+"hold Ctrl to add new nodes."
+msgstr ""
+
+msgid ""
+"Click to move the highlighted node. Hold Ctrl to add new nodes, or Alt to "
+"delete."
+msgstr ""
+
+msgid "Cannot place a node outside of the world."
+msgstr ""
+
+msgid "Add a new node to way"
+msgid_plural "Add a new node to {0} ways"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Cannot delete node that is referenced by multiple objects"
+msgstr ""
+
+msgid "Cannot delete node that has tags"
+msgstr ""
+
+msgid "Parallel"
+msgstr ""
+
+msgid "Make parallel copies of ways"
+msgstr ""
+
+msgid "make parallel helper line"
+msgstr ""
+
+msgid ""
+"Select ways as in Select mode. Drag selected ways or a single way to create "
+"a parallel copy (Alt toggles tag preservation)"
+msgstr ""
+
+msgid "Hold Ctrl to toggle snapping"
+msgstr ""
+
+msgid ""
+"ParallelWayAction\n"
+"The ways selected must form a simple branchless path"
+msgstr ""
+
+msgid "Drag play head"
+msgstr ""
+
+msgid ""
+"Drag play head and release near track to play audio from there; "
+"SHIFT+release to synchronize audio at that point."
+msgstr ""
+
+msgid "Select, move, scale and rotate objects"
+msgstr ""
+
+msgid "Move elements"
+msgstr ""
+
+msgid "Move them"
+msgstr ""
+
+msgid "Undo move"
+msgstr ""
+
+msgid ""
+"You moved more than {0} element. Moving a large number of elements is often "
+"an error.\n"
+"Really move them?"
+msgid_plural ""
+"You moved more than {0} elements. Moving a large number of elements is often "
+"an error.\n"
+"Really move them?"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Release the mouse button to select the objects in the rectangle."
+msgstr ""
+
+msgid "Ctrl to merge with nearest node."
+msgstr ""
+
+msgid "Release the mouse button to stop moving."
+msgstr ""
+
+msgid "Release the mouse button to stop rotating."
+msgstr ""
+
+msgid "Release the mouse button to stop scaling."
+msgstr ""
+
+msgid ""
+"Move objects by dragging; Shift to add to selection (Ctrl to toggle); Shift-"
+"Ctrl to rotate selected; Alt-Ctrl to scale selected; or change selection"
+msgstr ""
+
+msgid "Add and move a virtual new node to way"
+msgid_plural "Add and move a virtual new node to {0} ways"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Zoom"
+msgstr ""
+
+msgid "Zoom and move map"
+msgstr ""
+
+msgid ""
+"Zoom by dragging or Ctrl+. or Ctrl+,; move with Ctrl+up, left, down, right; "
+"move zoom with right button"
+msgstr ""
+
+msgid "Add all objects selected in the current dataset after the last member"
+msgstr ""
+
+msgid "Add selection to relation"
+msgstr ""
+
+msgid "Add selection to {0} relation"
+msgid_plural "Add selection to {0} relations"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete the selected relation"
+msgstr ""
+
+msgid "Download all members of the selected relations"
+msgstr ""
+
+msgid "Download members"
+msgstr ""
+
+msgid "Download incomplete members of selected relations"
+msgstr ""
+
+msgid "Download incomplete members"
+msgstr ""
+
+msgid "Create a copy of this relation and open it in another editor window"
+msgstr ""
+
+msgid "Edit"
+msgstr ""
+
+msgid "Call relation editor for selected relation"
+msgstr ""
+
+msgid ""
+"You are about to open <b>{0}</b> different relation editor "
+"simultaneously.<br/>Do you want to continue?"
+msgid_plural ""
+"You are about to open <b>{0}</b> different relation editors "
+"simultaneously.<br/>Do you want to continue?"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Confirmation"
+msgstr ""
+
+msgid "Select in relation list"
+msgstr ""
+
+msgid "Select relation in relation list."
+msgstr ""
+
+msgid "Add the members of all selected relations to current selection"
+msgstr ""
+
+msgid "Select the members of all selected relations"
+msgstr ""
+
+msgid "Select members (add)"
+msgstr ""
+
+msgid "Select members"
+msgstr ""
+
+msgid "Add the selected relations to the current selection"
+msgstr ""
+
+msgid "Set the current selection to the list of selected relations"
+msgstr ""
+
+msgid "Select relation (add)"
+msgstr ""
+
+msgid "Select relation"
+msgstr ""
+
+msgid "<not>"
+msgstr ""
+
+msgid "<or>"
+msgstr ""
+
+msgid "<xor>"
+msgstr ""
+
+msgid "<left parent>"
+msgstr ""
+
+msgid "<right parent>"
+msgstr ""
+
+msgid "<colon>"
+msgstr ""
+
+msgid "<equals>"
+msgstr ""
+
+msgid "<key>"
+msgstr ""
+
+msgid "<question mark>"
+msgstr ""
+
+msgid "<end-of-file>"
+msgstr ""
+
+msgid "Search..."
+msgstr ""
+
+msgid "Search for objects."
+msgstr ""
+
+msgid "{0}: "
+msgstr ""
+
+msgid "Filter string:"
+msgstr ""
+
+msgid "Search string:"
+msgstr ""
+
+msgid "Enter the search expression"
+msgstr ""
+
+msgid "replace selection"
+msgstr ""
+
+msgid "add to selection"
+msgstr ""
+
+msgid "remove from selection"
+msgstr ""
+
+msgid "find in selection"
+msgstr ""
+
+msgid "case sensitive"
+msgstr ""
+
+msgid "all objects"
+msgstr ""
+
+msgid "Also include incomplete and deleted objects in search."
+msgstr ""
+
+msgid "standard"
+msgstr ""
+
+msgid "regular expression"
+msgstr ""
+
+msgid "MapCSS selector"
+msgstr ""
+
+msgid "add toolbar button"
+msgstr ""
+
+msgid "Filter"
+msgstr ""
+
+msgid "Search"
+msgstr ""
+
+msgid "Submit filter"
+msgstr ""
+
+msgid "Start Search"
+msgstr ""
+
+msgid ""
+"Search expression is not valid: \n"
+"\n"
+" {0}"
+msgstr ""
+
+msgid "Invalid search expression"
+msgstr ""
+
+msgid "basic examples"
+msgstr ""
+
+msgid "Baker Street"
+msgstr ""
+
+msgid "''Baker'' and ''Street'' in any key"
+msgstr ""
+
+msgid "\"Baker Street\""
+msgstr ""
+
+msgid "''Baker Street'' in any key"
+msgstr ""
+
+msgid "basics"
+msgstr ""
+
+msgid "''valuefragment'' anywhere in ''key''"
+msgstr ""
+
+msgid "''valuefragment'' nowhere in ''key''"
+msgstr ""
+
+msgid "''key'' with exactly ''value''"
+msgstr ""
+
+msgid "''key'' with any value"
+msgstr ""
+
+msgid "''value'' in any key"
+msgstr ""
+
+msgid "matches if ''key'' exists"
+msgstr ""
+
+msgid "matches if ''key'' is greater than ''value'' (analogously, less than)"
+msgstr ""
+
+msgid ""
+"to quote operators.<br>Within quoted strings the <b>\"</b> and <b>\\</b> "
+"characters need to be escaped by a preceding <b>\\</b> (e.g. <b>\\\"</b> and "
+"<b>\\\\</b>)."
+msgstr ""
+
+msgid "combinators"
+msgstr ""
+
+msgid "logical and (both expressions have to be satisfied)"
+msgstr ""
+
+msgid "logical or (at least one expression has to be satisfied)"
+msgstr ""
+
+msgid "logical not"
+msgstr ""
+
+msgid "use parenthesis to group expressions"
+msgstr ""
+
+msgid "objects"
+msgstr ""
+
+msgid "all ways"
+msgstr ""
+
+msgid "all relations"
+msgstr ""
+
+msgid "all closed ways"
+msgstr ""
+
+msgid "object without useful tags"
+msgstr ""
+
+msgid "metadata"
+msgstr ""
+
+msgid "objects changed by user"
+msgstr ""
+
+msgid "objects with given ID"
+msgstr ""
+
+msgid "objects with given version"
+msgstr ""
+
+msgid "objects with given changeset ID"
+msgstr ""
+
+msgid "objects with last modification timestamp within range"
+msgstr ""
+
+msgid "properties"
+msgstr ""
+
+msgid ""
+"ways with at least 20 nodes, or relations containing at least 20 nodes"
+msgstr ""
+
+msgid ""
+"nodes with at least 3 referring ways, or relations containing at least 3 ways"
+msgstr ""
+
+msgid "objects having 5 to 10 tags"
+msgstr ""
+
+msgid "objects with given role in a relation"
+msgstr ""
+
+msgid "closed ways with an area of 100 m²"
+msgstr ""
+
+msgid "ways with a length of 200 m or more"
+msgstr ""
+
+msgid "state"
+msgstr ""
+
+msgid "all modified objects"
+msgstr ""
+
+msgid "all new objects"
+msgstr ""
+
+msgid "all selected objects"
+msgstr ""
+
+msgid "all incomplete objects"
+msgstr ""
+
+msgid "related objects"
+msgstr ""
+
+msgid "all children of objects matching the expression"
+msgstr ""
+
+msgid "all parents of objects matching the expression"
+msgstr ""
+
+msgid "n-th member of relation and/or n-th node of way"
+msgstr ""
+
+msgid "every n-th member of relation and/or every n-th node of way"
+msgstr ""
+
+msgid "view"
+msgstr ""
+
+msgid "objects in current view"
+msgstr ""
+
+msgid "objects (and all its way nodes / relation members) in current view"
+msgstr ""
+
+msgid "objects in downloaded area"
+msgstr ""
+
+msgid "objects (and all its way nodes / relation members) in downloaded area"
+msgstr ""
+
+msgid "No match found for ''{0}''"
+msgstr ""
+
+msgid "Nothing added to selection by searching for ''{0}''"
+msgstr ""
+
+msgid "Nothing removed from selection by searching for ''{0}''"
+msgstr ""
+
+msgid "Nothing found in selection by searching for ''{0}''"
+msgstr ""
+
+msgid "Found {0} matches"
+msgstr ""
+
+msgctxt "search"
+msgid "CS"
+msgstr ""
+
+msgctxt "search"
+msgid "CI"
+msgstr ""
+
+msgctxt "search"
+msgid "RX"
+msgstr ""
+
+msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
+msgid "A"
+msgstr ""
+
+msgid ""
+"The regex \"{0}\" had a parse error at offset {1}, full error:\n"
+"\n"
+"{2}"
+msgstr ""
+
+msgid ""
+"The regex \"{0}\" had a parse error, full error:\n"
+"\n"
+"{1}"
+msgstr ""
+
+msgid "Expecting <i>min</i>/<i>max</i> after ''timestamp''"
+msgstr ""
+
+msgid "Range of primitive ids expected"
+msgstr ""
+
+msgid "Range of changeset ids expected"
+msgstr ""
+
+msgid "Range of versions expected"
+msgstr ""
+
+msgid "Key cannot be empty when tag operator is used. Sample use: key=value"
+msgstr ""
+
+msgid "Unknown primitive type: {0}. Allowed values are node, way or relation"
+msgstr ""
+
+msgid "Positive integer expected"
+msgstr ""
+
+msgid "Range of numbers expected"
+msgstr ""
+
+msgid "Unexpected token. Expected {0}, found {1}"
+msgstr ""
+
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
+msgid "Unexpected token: {0}"
+msgstr ""
+
+msgid "Missing parameter for OR"
+msgstr ""
+
+msgid "Missing parameter for XOR"
+msgstr ""
+
+msgid "Missing operator for NOT"
+msgstr ""
+
+msgid "Automatically truncating value of tag ''{0}'' on deleted object {1}"
+msgstr ""
+
+msgid ""
+"Length of value for tag ''{0}'' on object {1} exceeds the max. allowed "
+"length {2}. Values length is {3}."
+msgstr ""
+
+msgid "Precondition Violation"
+msgstr ""
+
+msgid "{0} nodes in way {1} exceed the max. allowed number of nodes {2}"
+msgstr ""
+
+msgid "API Capabilities Violation"
+msgstr ""
+
+msgid "Cyclic dependency between relations:"
+msgstr ""
+
+msgid "Removed obsolete tags"
+msgstr ""
+
+msgid "Fix deprecated tags"
+msgstr ""
+
+msgid ""
+"<html>{0} relations build a cycle because they refer to each other.<br>JOSM "
+"cannot upload them. Please edit the relations and remove the cyclic "
+"dependency.</html>"
+msgstr ""
+
+msgid "Relation ..."
+msgstr ""
+
+msgid "... refers to relation"
+msgstr ""
+
+msgid "Cycling dependencies"
+msgstr ""
+
+msgid "Uploading modified notes"
+msgstr ""
+
+msgid "Note {0} failed: {1}"
+msgstr ""
+
+msgid "Notes failed to upload"
+msgstr ""
+
+msgid ""
+"The following are results of automatic validation. Try fixing these, but be "
+"careful (don''t destroy valid data). When in doubt ignore them.<br>When you "
+"cancel this dialog, you can find the entries in the validator side panel to "
+"inspect them."
+msgstr ""
+
+msgid "Errors"
+msgstr ""
+
+msgid "Usually this should be fixed."
+msgstr ""
+
+msgid "Warnings"
+msgstr ""
+
+msgid "Fix these when possible."
+msgstr ""
+
+msgid "Other"
+msgstr ""
+
+msgid "Informational warnings, expect many false entries."
+msgstr ""
+
+msgid "Suspicious data found. Upload anyway?"
+msgstr ""
+
+msgid "Continue upload"
+msgstr ""
+
+msgid "Add node {0}"
+msgstr ""
+
+msgid "Add way {0}"
+msgstr ""
+
+msgid "Add relation {0}"
+msgstr ""
+
+msgid "Added {0} object"
+msgid_plural "Added {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "New way {0} has 0 nodes"
+msgstr ""
+
+msgid "Change node {0}"
+msgstr ""
+
+msgid "Change way {0}"
+msgstr ""
+
+msgid "Change relation {0}"
+msgstr ""
+
+msgid "Changed nodes of {0}"
+msgstr ""
+
+msgid "Remove \"{0}\" for node ''{1}''"
+msgstr ""
+
+msgid "Remove \"{0}\" for way ''{1}''"
+msgstr ""
+
+msgid "Remove \"{0}\" for relation ''{1}''"
+msgstr ""
+
+msgid "Set {0}={1} for node ''{2}''"
+msgstr ""
+
+msgid "Set {0}={1} for way ''{2}''"
+msgstr ""
+
+msgid "Set {0}={1} for relation ''{2}''"
+msgstr ""
+
+msgid "Remove \"{0}\" for {1} object"
+msgid_plural "Remove \"{0}\" for {1} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Set {0}={1} for {2} object"
+msgid_plural "Set {0}={1} for {2} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Deleted {0} tags for {1} object"
+msgid_plural "Deleted {0} tags for {1} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Set {0} tags for {1} object"
+msgid_plural "Set {0} tags for {1} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Replace \"{0}\" by \"{1}\" for"
+msgstr ""
+
+msgid "object"
+msgid_plural "objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Change relation member role for {0} {1}"
+msgstr ""
+
+msgid "At least one object to delete required, got empty collection"
+msgstr ""
+
+msgid "Delete node {0}"
+msgstr ""
+
+msgid "Delete way {0}"
+msgstr ""
+
+msgid "Delete relation {0}"
+msgstr ""
+
+msgid "Delete {0} object"
+msgid_plural "Delete {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete {0} node"
+msgid_plural "Delete {0} nodes"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete {0} way"
+msgid_plural "Delete {0} ways"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete {0} relation"
+msgid_plural "Delete {0} relations"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Deleted ''{0}''"
+msgstr ""
+
+msgid "Delete confirmation"
+msgstr ""
+
+msgid ""
+"You are about to delete nodes outside of the area you have "
+"downloaded.<br>This can cause problems because other objects (that you do "
+"not see) might use them.<br>Do you really want to delete?"
+msgstr ""
+
+msgid ""
+"You are about to delete incomplete objects.<br>This will cause problems "
+"because you don''t see the real object.<br>Do you really want to delete?"
+msgstr ""
+
+msgid ""
+"You are about to delete {0} relation: {1}<br/>This step is rarely necessary "
+"and cannot be undone easily after being uploaded to the server.<br/>Do you "
+"really want to delete?"
+msgid_plural ""
+"You are about to delete {0} relations: {1}<br/>This step is rarely necessary "
+"and cannot be undone easily after being uploaded to the server.<br/>Do you "
+"really want to delete?"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete relation?"
+msgstr ""
+
+msgid "Move {0} node"
+msgid_plural "Move {0} nodes"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Purged {0} object"
+msgid_plural "Purged {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Removed nodes from {0}"
+msgstr ""
+
+msgid "Rotate {0} node"
+msgid_plural "Rotate {0} nodes"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Scale {0} node"
+msgid_plural "Scale {0} nodes"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Selected {0} object"
+msgid_plural "Selected {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Sequence: {0}"
+msgstr ""
+
+msgid "Transform {0} node"
+msgid_plural "Transform {0} nodes"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"<html>Layer ''{0}'' already has a conflict for object<br>''{1}''.<br>This "
+"conflict cannot be added.</html>"
+msgstr ""
+
+msgid "Double conflict"
+msgstr ""
+
+msgid ""
+"Layer ''{0}'' does not exist any more. Cannot remove conflict for object "
+"''{1}''."
+msgstr ""
+
+msgid "Add conflict for ''{0}''"
+msgstr ""
+
+msgid ""
+"Cannot undo command ''{0}'' because layer ''{1}'' is not present any more"
+msgstr ""
+
+msgid "Resolve conflicts in coordinates in {0}"
+msgstr ""
+
+msgid "Cannot resolve undecided conflict."
+msgstr ""
+
+msgid "Resolve conflicts in deleted state in {0}"
+msgstr ""
+
+msgid "Set the ''modified'' flag for node {0}"
+msgstr ""
+
+msgid "Set the ''modified'' flag for way {0}"
+msgstr ""
+
+msgid "Set the ''modified'' flag for relation {0}"
+msgstr ""
+
+msgid "Resolve conflicts in member list of relation {0}"
+msgstr ""
+
+msgid "Resolve {0} tag conflict in node {1}"
+msgid_plural "Resolve {0} tag conflicts in node {1}"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Resolve {0} tag conflict in way {1}"
+msgid_plural "Resolve {0} tag conflicts in way {1}"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Resolve {0} tag conflict in relation {1}"
+msgid_plural "Resolve {0} tag conflicts in relation {1}"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Resolve version conflict for node {0}"
+msgstr ""
+
+msgid "Resolve version conflict for way {0}"
+msgstr ""
+
+msgid "Resolve version conflict for relation {0}"
+msgstr ""
+
+msgid "Resolve conflicts in node list of way {0}"
+msgstr ""
+
+msgid "Main dataset does not include node {0}"
+msgstr ""
+
+msgid "Apply?"
+msgstr ""
+
+msgid ""
+"<html>You are going to reverse the way ''{0}'',<br/> whose semantic meaning "
+"of its tag ''{1}'' is defined by its direction.<br/>Do you really want to "
+"change the way direction, thus its semantic meaning?</html>"
+msgid_plural ""
+"<html>You are going to reverse the way ''{0}'',<br/> whose semantic meaning "
+"of these tags are defined by its direction:<br/>{1}Do you really want to "
+"change the way direction, thus its semantic meaning?</html>"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Reverse directional way."
+msgstr ""
+
+msgid ""
+"When reversing this way, the following changes are suggested in order to "
+"maintain data consistency."
+msgstr ""
+
+msgid "Relation"
+msgstr ""
+
+msgid "Old role"
+msgstr ""
+
+msgid "New role"
+msgstr ""
+
+msgid "Old key"
+msgstr ""
+
+msgid "Old value"
+msgstr ""
+
+msgid "New key"
+msgstr ""
+
+msgid "New value"
+msgstr ""
+
+msgid "Apply selected changes"
+msgstr ""
+
+msgid "Do not apply changes"
+msgstr ""
+
+msgid "Please select which changes you want to apply."
+msgstr ""
+
+msgid "Tags of "
+msgstr ""
+
+msgid "Roles in relations referring to"
+msgstr ""
+
+msgid "Automatic tag correction"
+msgstr ""
+
+msgid "Unable to create directory {0}, autosave will be disabled"
+msgstr ""
+
+msgid "Unable to create file {0}, other filename will be used"
+msgstr ""
+
+msgid "IOError while creating file, autosave will be skipped: {0}"
+msgstr ""
+
+msgid "Unable to delete old backup file {0}"
+msgstr ""
+
+msgid "Your work has been saved automatically."
+msgstr ""
+
+msgid "Restoring files"
+msgstr ""
+
+msgid "Illegal latitude value ''{0}''"
+msgstr ""
+
+msgid "Illegal longitude value ''{0}''"
+msgstr ""
+
+msgid "Question"
+msgstr ""
+
+msgid "Message"
+msgstr ""
+
+msgid "Enter text"
+msgstr ""
+
+msgid "Installing plugins"
+msgstr ""
+
+msgid ""
+"<html>Settings file asks to append preferences to <b>{0}</b>,<br/> but its "
+"default value is unknown at this moment.<br/> Please activate corresponding "
+"function manually and retry importing."
+msgstr ""
+
+msgid "Failed to create missing cache directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing cache directory: {0}</html>"
+msgstr ""
+
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
+msgid ""
+"Failed to initialize preferences. Preference directory ''{0}'' is not a "
+"directory."
+msgstr ""
+
+msgid ""
+"<html>Failed to initialize preferences.<br>Preference directory ''{0}'' is "
+"not a directory.</html>"
+msgstr ""
+
+msgid ""
+"Failed to initialize preferences. Failed to create missing preference "
+"directory: {0}"
+msgstr ""
+
+msgid ""
+"<html>Failed to initialize preferences.<br>Failed to create missing "
+"preference directory: {0}</html>"
+msgstr ""
+
+msgid "Missing preference file ''{0}''. Creating a default preference file."
+msgstr ""
+
+msgid ""
+"Replacing existing preference file ''{0}'' with default preference file."
+msgstr ""
+
+msgid ""
+"<html>Failed to initialize preferences.<br>Failed to reset preference file "
+"to default: {0}</html>"
+msgstr ""
+
+msgid ""
+"<html>Preferences file had errors.<br> Making backup of old one to "
+"<br>{0}<br> and creating a new default preference file.</html>"
+msgstr ""
+
+msgid ""
+"Failed to initialize preferences. Failed to reset preference file to "
+"default: {0}"
+msgstr ""
+
+msgid "Paint style {0}: {1}"
+msgstr ""
+
+msgid "Layer: {0}"
+msgstr ""
+
+msgid "Failed to persist preferences to ''{0}''"
+msgstr ""
+
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
+msgid " (at line {0}, column {1})"
+msgstr ""
+
+msgid "Preference setting {0} has been removed since it is no longer used."
+msgstr ""
+
+msgid "Metric"
+msgstr ""
+
+msgid "Chinese"
+msgstr ""
+
+msgid "Imperial"
+msgstr ""
+
+msgid "Nautical Mile"
+msgstr ""
+
+msgid "Failed to load resource ''{0}'', error is {1}."
+msgstr ""
+
+msgid "UNKNOWN"
+msgstr ""
+
+msgid "Unexpected JOSM version number in revision file, value is ''{0}''"
+msgstr ""
+
+msgid "The revision file ''/REVISION'' is missing."
+msgstr ""
+
+msgid "Already registered a conflict for primitive ''{0}''."
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr ""
+
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
+msgctxt "compass"
+msgid "S"
+msgstr ""
+
+msgctxt "compass"
+msgid "N"
+msgstr ""
+
+msgctxt "compass"
+msgid "W"
+msgstr ""
+
+msgctxt "compass"
+msgid "E"
+msgstr ""
+
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
+msgstr ""
+
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
+msgstr ""
+
+msgid "ID > 0 expected. Got {0}."
+msgstr ""
+
+msgid "Version > 0 expected. Got {0}."
+msgstr ""
+
+msgid ""
+"Cannot assign a changesetId > 0 to a new primitive. Value of changesetId is "
+"{0}"
+msgstr ""
+
+msgid "A primitive with ID = 0 cannot be invisible."
+msgstr ""
+
+msgid ""
+"Unable to add primitive {0} to the dataset because it is already included"
+msgstr ""
+
+msgid ""
+"JOSM expected to find primitive [{0} {1}] in dataset but it is not there. "
+"Please report this at {2}. This is not a critical error, it should be safe "
+"to continue in your work."
+msgstr ""
+
+msgid "Missing merge target for way with id {0}"
+msgstr ""
+
+msgid ""
+"Object of type {0} with id {1} was marked to be deleted, but it''s missing "
+"in the source dataset"
+msgstr ""
+
+msgid "Missing merge target for node with id {0}"
+msgstr ""
+
+msgid "Missing merge target for relation with id {0}"
+msgstr ""
+
+msgid "Missing merge target of type {0} with id {1}"
+msgstr ""
+
+msgid "Conflict in ''visible'' attribute for object of type {0} with id {1}"
+msgstr ""
+
+msgid "Merging data..."
+msgstr ""
+
+msgid "Test ''{0}'' completed in {1}"
+msgstr ""
+
+msgid "Cannot add a way with only {0} nodes."
+msgstr ""
+
+msgid "Each node must connect exactly 2 ways"
+msgstr ""
+
+msgid "There is an intersection between ways."
+msgstr ""
+
+msgid ""
+"Cannot merge because either of the participating primitives is new and the "
+"other is not"
+msgstr ""
+
+msgid ""
+"Cannot merge primitives with different ids. This id is {0}, the other is {1}"
+msgstr ""
+
+msgid "node"
+msgid_plural "nodes"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "way"
+msgid_plural "ways"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "relation"
+msgid_plural "relations"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "closedway"
+msgstr ""
+
+msgid "multipolygon"
+msgstr ""
+
+msgid ""
+"Tag collection cannot be applied to a primitive because there are keys with "
+"multiple values."
+msgstr ""
+
+msgid "<anonymous>"
+msgstr ""
+
+msgid "Cannot add node {0} to incomplete way {1}."
+msgstr ""
+
+msgid "Nodes in way must be in the same dataset"
+msgstr ""
+
+msgid "Deleted node referenced by {0}"
+msgstr ""
+
+msgid "Complete node {0} with null coordinates in way {1}"
+msgstr ""
+
+msgid ""
+"Cannot compare primitive with ID ''{0}'' to primitive with ID ''{1}''."
+msgstr ""
+
+msgid "Parameter {0} not in range 0..{1}. Got ''{2}''."
+msgstr ""
+
+msgid "Failed to load map renderer class ''{0}''. The class wasn''t found."
+msgstr ""
+
+msgid ""
+"Can''t activate map renderer class ''{0}'', because the class wasn''t found."
+msgstr ""
+
+msgid "Activating the standard map renderer instead."
+msgstr ""
+
+msgid ""
+"Can''t activate map renderer class ''{0}'', because it isn''t a subclass of "
+"''{1}''."
+msgstr ""
+
+msgid ""
+"Can''t activate map renderer class ''{0}'', because it isn''t registered as "
+"map renderer."
+msgstr ""
+
+msgid "Wireframe Map Renderer"
+msgstr ""
+
+msgid "Renders the map as simple wire frame."
+msgstr ""
+
+msgid "Styled Map Renderer"
+msgstr ""
+
+msgid "Renders the map using style rules in a set of style sheets."
+msgstr ""
+
+msgid "inactive"
+msgstr ""
+
+msgid "selected"
+msgstr ""
+
+msgid "Relation: selected"
+msgstr ""
+
+msgid "Node: standard"
+msgstr ""
+
+msgid "Node: connection"
+msgstr ""
+
+msgid "Node: tagged"
+msgstr ""
+
+msgid "untagged way"
+msgstr ""
+
+msgid "background"
+msgstr ""
+
+msgid "highlight"
+msgstr ""
+
+msgid "highlight wireframe"
+msgstr ""
+
+msgid "untagged"
+msgstr ""
+
+msgid "text"
+msgstr ""
+
+msgid "areatext"
+msgstr ""
+
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
+msgstr ""
+
+msgid "Unknown parameter: ''{0}''."
+msgstr ""
+
+msgid "Value expected for parameter ''{0}''."
+msgstr ""
+
+msgid "No value expected for parameter ''{0}''."
+msgstr ""
+
+msgid "Unexpected parameter format (''{0}'')"
+msgstr ""
+
+msgid "Value ''{0}'' for option +init not supported."
+msgstr ""
+
+msgid ": "
+msgstr ""
+
+msgid "Ellipsoid ''{0}'' not supported."
+msgstr ""
+
+msgid "Combination of ellipsoid parameters is not supported."
+msgstr ""
+
+msgid "Unknown datum identifier: ''{0}''"
+msgstr ""
+
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgstr ""
+
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgstr ""
+
+msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
+msgstr ""
+
+msgid ""
+"Unexpected number of arguments for parameter ''towgs84'' (must be 3 or 7)"
+msgstr ""
+
+msgid "Unable to parse value of parameter ''towgs84'' (''{0}'')"
+msgstr ""
+
+msgid "Projection required (+proj=*)"
+msgstr ""
+
+msgid "Unknown projection identifier: ''{0}''"
+msgstr ""
+
+msgid "Unexpected number of arguments for parameter ''+bounds'' (must be 4)"
+msgstr ""
+
+msgid "Unknown parameter ''{0}''"
+msgstr ""
+
+msgid "Expected number argument for parameter ''{0}''"
+msgstr ""
+
+msgid "Unable to parse value ''{1}'' of parameter ''{0}'' as number."
+msgstr ""
+
+msgid ""
+"Unable to parse value ''{1}'' of parameter ''{0}'' as coordinate value."
+msgstr ""
+
+msgid "Custom Projection"
+msgstr ""
+
+msgid "GRS80"
+msgstr ""
+
+msgid "WGS84"
+msgstr ""
+
+msgid "Parameter ''{0}'' required."
+msgstr ""
+
+msgid "Lambert Conformal Conic"
+msgstr ""
+
+msgid "Lat/lon (Geodetic)"
+msgstr ""
+
+msgid "Mercator"
+msgstr ""
+
+msgid "Swiss Oblique Mercator"
+msgstr ""
+
+msgid "Transverse Mercator"
+msgstr ""
+
+msgid ""
+"Error initializing test {0}:\n"
+" {1}"
+msgstr ""
+
+msgid "validation error"
+msgstr ""
+
+msgid "validation warning"
+msgstr ""
+
+msgid "validation other"
+msgstr ""
+
+msgid "Running test {0}"
+msgstr ""
+
+msgid "E-mail address contains non-ascii characters"
+msgstr ""
+
+msgid "E-mail address is invalid"
+msgstr ""
+
+msgid "E-mail address contains an invalid username: {0}"
+msgstr ""
+
+msgid "E-mail address contains an invalid domain: {0}"
+msgstr ""
+
+msgid "URL contains non-ascii characters"
+msgstr ""
+
+msgid "URL is invalid"
+msgstr ""
+
+msgid "URL contains an invalid protocol: {0}"
+msgstr ""
+
+msgid "URL contains an invalid authority: {0}"
+msgstr ""
+
+msgid "URL contains an invalid path: {0}"
+msgstr ""
+
+msgid "URL contains an invalid query: {0}"
+msgstr ""
+
+msgid "URL contains an invalid fragment: {0}"
+msgstr ""
+
+msgid "Addresses"
+msgstr ""
+
+msgid "Checks for errors in addresses and associatedStreet relations."
+msgstr ""
+
+msgid "Multiple associatedStreet relations"
+msgstr ""
+
+msgid "House number without street"
+msgstr ""
+
+msgid "House number ''{0}'' duplicated"
+msgstr ""
+
+msgid "Duplicate house numbers"
+msgstr ""
+
+msgid "Multiple street names in relation"
+msgstr ""
+
+msgid "House number too far from street"
+msgstr ""
+
+msgid "API Capabilities"
+msgstr ""
+
+msgid "Checks for errors against API capabilities"
+msgstr ""
+
+msgid ""
+"Way contains more than {0} nodes. It should be replaced by a multipolygon"
+msgstr ""
+
+msgid "Way contains more than {0} nodes. It should be split or simplified"
+msgstr ""
+
+msgid "Barriers and entrances"
+msgstr ""
+
+msgid "Checks for errors in barriers and entrances."
+msgstr ""
+
+msgid "Barrier entrance not set on a barrier"
+msgstr ""
+
+msgid "Coastlines"
+msgstr ""
+
+msgid "This test checks that coastlines are correct."
+msgstr ""
+
+msgid "Unconnected coastline"
+msgstr ""
+
+msgid "Unordered coastline"
+msgstr ""
+
+msgid "Reversed coastline"
+msgstr ""
+
+msgid "Conditional Keys"
+msgstr ""
+
+msgid "Tests for the correct usage of ''*:conditional'' tags."
+msgstr ""
+
+msgid "Does not match pattern ''restriction value @ condition''"
+msgstr ""
+
+msgid "{0} is not a valid restriction value"
+msgstr ""
+
+msgid "Wrong syntax in {0} key"
+msgstr ""
+
+msgid "Error in {0} value: {1}"
+msgstr ""
+
+msgid "Crossing ways"
+msgstr ""
+
+msgid "Crossing buildings"
+msgstr ""
+
+msgid "Crossing waterways"
+msgstr ""
+
+msgid "Crossing waterway/highway"
+msgstr ""
+
+msgid "Crossing boundaries"
+msgstr ""
+
+msgid "Crossing barriers"
+msgstr ""
+
+msgid ""
+"This test checks if two roads, railways, waterways or buildings crosses in "
+"the same layer, but are not connected by a node."
+msgstr ""
+
+msgid "Duplicated nodes"
+msgstr ""
+
+msgid "This test checks that there are no nodes at the very same location."
+msgstr ""
+
+msgid "Mixed type duplicated nodes"
+msgstr ""
+
+msgid "Highway duplicated nodes"
+msgstr ""
+
+msgid "Railway duplicated nodes"
+msgstr ""
+
+msgid "Waterway duplicated nodes"
+msgstr ""
+
+msgid "Boundary duplicated nodes"
+msgstr ""
+
+msgid "Power duplicated nodes"
+msgstr ""
+
+msgid "Natural duplicated nodes"
+msgstr ""
+
+msgid "Building duplicated nodes"
+msgstr ""
+
+msgid "Landuse duplicated nodes"
+msgstr ""
+
+msgid "Other duplicated nodes"
+msgstr ""
+
+msgid "Nodes at same position"
+msgstr ""
+
+msgid "Duplicated relations"
+msgstr ""
+
+msgid ""
+"This test checks that there are no relations with same tags and same members "
+"with same roles."
+msgstr ""
+
+msgid "Relations with same members"
+msgstr ""
+
+msgid "Delete duplicate relations"
+msgstr ""
+
+msgid "Duplicated ways"
+msgstr ""
+
+msgid ""
+"This test checks that there are no ways with same node coordinates and "
+"optionally also same tags."
+msgstr ""
+
+msgid "Ways with same position"
+msgstr ""
+
+msgid "Delete duplicate ways"
+msgstr ""
+
+msgid "Duplicated way nodes"
+msgstr ""
+
+msgid "Checks for ways with identical consecutive nodes."
+msgstr ""
+
+msgid "Highways"
+msgstr ""
+
+msgid "Performs semantic checks on highways."
+msgstr ""
+
+msgid "Incorrect roundabout (highway: {0} instead of {1})"
+msgstr ""
+
+msgid "Highway link is not linked to adequate highway/link"
+msgstr ""
+
+msgid "Missing pedestrian crossing information"
+msgstr ""
+
+msgid "Unknown country code: {0}"
+msgstr ""
+
+msgid "Unknown source:maxspeed context: {0}"
+msgstr ""
+
+msgid "Internet tags"
+msgstr ""
+
+msgid "Checks for errors in internet-related tags."
+msgstr ""
+
+msgid " URL cannot be converted to ASCII: {0}"
+msgstr ""
+
+msgid "''{0}'': {1}"
+msgstr ""
+
+msgid "Lane tags"
+msgstr ""
+
+msgid "Test that validates ''lane:'' tags."
+msgstr ""
+
+msgid "Number of {0} greater than {1}"
+msgstr ""
+
+msgid "{0}+{1}"
+msgstr ""
+
+msgid "Number of lane dependent values inconsistent"
+msgstr ""
+
+msgid "Number of lane dependent values inconsistent in forward direction"
+msgstr ""
+
+msgid "Number of lane dependent values inconsistent in backward direction"
+msgstr ""
+
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
+msgid "Tag checker (MapCSS based)"
+msgstr ""
+
+msgid "This test checks for errors in tag keys and values."
+msgstr ""
+
+msgid "Unable to replace argument {0} in {1}: {2}"
+msgstr ""
+
+msgid "Fix of {0}"
+msgstr ""
+
+msgid " or "
+msgstr ""
+
+msgid "{0}, use {1} instead"
+msgstr ""
+
+msgid "Adding {0} to tag checker"
+msgstr ""
+
+msgid "Failed to add {0} to tag checker"
+msgstr ""
+
+msgid "Multipolygon"
+msgstr ""
+
+msgid "This test checks if multipolygons are valid."
+msgstr ""
+
+msgid "Area style way is not closed"
+msgstr ""
+
+msgid "No outer way for multipolygon"
+msgstr ""
+
+msgid "Role for ''{0}'' should be ''{1}''"
+msgstr ""
+
+msgid "No area style for multipolygon"
+msgstr ""
+
+msgid ""
+"Multipolygon relation should be tagged with area tags and not the outer way"
+msgid_plural ""
+"Multipolygon relation should be tagged with area tags and not the outer ways"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"With the currently used mappaint style the style for inner way equals the "
+"multipolygon style"
+msgstr ""
+
+msgid "Style for outer way mismatches"
+msgstr ""
+
+msgid ""
+"With the currently used mappaint style(s) the style for outer way mismatches "
+"polygon"
+msgstr ""
+
+msgid "Area style on outer way"
+msgstr ""
+
+msgid "Multipolygon is not closed"
+msgstr ""
+
+msgid "Multipolygon inner way is outside"
+msgstr ""
+
+msgid "Intersection between multipolygon ways"
+msgstr ""
+
+msgid "No useful role for multipolygon member"
+msgstr ""
+
+msgid "Non-Way in multipolygon"
+msgstr ""
+
+msgid "Missing name:* translation"
+msgstr ""
+
+msgid ""
+"This test finds multilingual objects whose ''name'' attribute is not equal "
+"to some ''name:*'' attribute and not a composition of ''name:*'' attributes, "
+"e.g., Italia - Italien - Italy."
+msgstr ""
+
+msgid "Missing name:*={0}. Add tag with correct language key."
+msgstr ""
+
+msgid "A name is missing, even though name:* exists."
+msgstr ""
+
+msgid "Opening hours syntax"
+msgstr ""
+
+msgid "This test checks the correct usage of the opening hours syntax."
+msgstr ""
+
+msgid "opening_hours value can be prettified"
+msgstr ""
+
+msgid "Unexpected token:"
+msgstr ""
+
+msgid "Unexpected token (school holiday parser):"
+msgstr ""
+
+msgid "Unexpected token in number range:"
+msgstr ""
+
+msgid "Unexpected token in week range:"
+msgstr ""
+
+msgid "Unexpected token in weekday range:"
+msgstr ""
+
+msgid "Unexpected token in month range:"
+msgstr ""
+
+msgid "Unexpected token in year range:"
+msgstr ""
+
+msgid "Invalid/unsupported syntax."
+msgstr ""
+
+msgid "Overlapping ways"
+msgstr ""
+
+msgid ""
+"This test checks that a connection between two nodes is not used by more "
+"than one way."
+msgstr ""
+
+msgid "Areas share segment"
+msgstr ""
+
+msgid "Highways share segment with area"
+msgstr ""
+
+msgid "Railways share segment with area"
+msgstr ""
+
+msgid "Ways share segment with area"
+msgstr ""
+
+msgid "Overlapping highways"
+msgstr ""
+
+msgid "Overlapping railways"
+msgstr ""
+
+msgid "Way contains segment twice"
+msgstr ""
+
+msgid "Power lines"
+msgstr ""
+
+msgid ""
+"Checks for nodes in power lines that do not have a power=tower/pole tag."
+msgstr ""
+
+msgid "Missing power tower/pole within power line"
+msgstr ""
+
+msgid "Role verification problem"
+msgstr ""
+
+msgid "Relation checker"
+msgstr ""
+
+msgid "Checks for errors in relations."
+msgstr ""
+
+msgid ""
+"Route scheme is unspecified. Add {0} ({1}=public_transport; {2}=legacy)"
+msgstr ""
+
+msgid "Relation type is unknown"
+msgstr ""
+
+msgid "Relation is empty"
+msgstr ""
+
+msgid "Role member does not match expression {0} in template {1}"
+msgstr ""
+
+msgid ""
+"Role member type {0} does not match accepted list of {1} in template {2}"
+msgstr ""
+
+msgid "<empty>"
+msgstr ""
+
+msgid "Role {0} unknown in templates {1}"
+msgstr ""
+
+msgid "Empty role type found when expecting one of {0}"
+msgstr ""
+
+msgid "Role {0} missing"
+msgstr ""
+
+msgid "Number of {0} roles too low ({1})"
+msgstr ""
+
+msgid "Number of {0} roles too high ({1})"
+msgstr ""
+
+msgid "Self-intersecting ways"
+msgstr ""
+
+msgid ""
+"This test checks for ways that contain some of their nodes more than once."
+msgstr ""
+
+msgid "Similarly named ways"
+msgstr ""
+
+msgid ""
+"This test checks for ways with similar names that may have been misspelled."
+msgstr ""
+
+msgid "Tag checker"
+msgstr ""
+
+msgid "Adding {0} to ignore tags"
+msgstr ""
+
+msgid "Invalid tagchecker line - {0}: {1}"
+msgstr ""
+
+msgid "Invalid spellcheck line: {0}"
+msgstr ""
+
+msgid "Adding {0} to spellchecker"
+msgstr ""
+
+msgid ""
+"Could not access data file(s):\n"
+"{0}"
+msgstr ""
+
+msgid "Suspicious tag/value combinations"
+msgstr ""
+
+msgid "Key ''{0}'' invalid."
+msgstr ""
+
+msgid "Tag value contains character with code less than 0x20"
+msgstr ""
+
+msgid "Tag key contains character with code less than 0x20"
+msgstr ""
+
+msgid "Tag value longer than allowed"
+msgstr ""
+
+msgid "Tag key longer than allowed"
+msgstr ""
+
+msgid "Tags with empty values"
+msgstr ""
+
+msgid "Invalid white space in property key"
+msgstr ""
+
+msgid "Property values start or end with white space"
+msgstr ""
+
+msgid "Property values contain HTML entity"
+msgstr ""
+
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
+msgid "Key ''{0}'' not in presets."
+msgstr ""
+
+msgid "Presets do not contain property key"
+msgstr ""
+
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
+msgid "Value ''{0}'' for key ''{1}'' not in presets."
+msgstr ""
+
+msgid "Presets do not contain property value"
+msgstr ""
+
+msgid "FIXMES"
+msgstr ""
+
+msgid "Check property keys."
+msgstr ""
+
+msgid "Validate that property keys are valid checking against list of words."
+msgstr ""
+
+msgid "Use complex property checker."
+msgstr ""
+
+msgid "Validate property values and tags using complex rules."
+msgstr ""
+
+msgid "TagChecker source"
+msgstr ""
+
+msgid "Data sources ({0})"
+msgstr ""
+
+msgid "Check property values."
+msgstr ""
+
+msgid "Validate that property values are valid checking against presets."
+msgstr ""
+
+msgid "Check for FIXMES."
+msgstr ""
+
+msgid "Looks for nodes or ways with FIXME in any property value."
+msgstr ""
+
+msgid "Fix tags"
+msgstr ""
+
+msgid "Could not find element type"
+msgstr ""
+
+msgid "Incorrect number of parameters"
+msgstr ""
+
+msgid "Could not find warning level"
+msgstr ""
+
+msgid "Illegal expression ''{0}''"
+msgstr ""
+
+msgid "Illegal regular expression ''{0}''"
+msgstr ""
+
+msgid "Turnrestrictions"
+msgstr ""
+
+msgid "This test checks if turnrestrictions are valid."
+msgstr ""
+
+msgid "Unknown role"
+msgstr ""
+
+msgid "Unknown member type"
+msgstr ""
+
+msgid "More than one \"from\" way found"
+msgstr ""
+
+msgid "More than one \"to\" way found"
+msgstr ""
+
+msgid "More than one \"via\" node found"
+msgstr ""
+
+msgid "Cannot mix node and way for role \"via\""
+msgstr ""
+
+msgid "No \"from\" way found"
+msgstr ""
+
+msgid "No \"to\" way found"
+msgstr ""
+
+msgid "No \"via\" node or way found"
+msgstr ""
+
+msgid "The \"from\" way does not start or end at a \"via\" node."
+msgstr ""
+
+msgid "Superfluous turnrestriction as \"to\" way is oneway"
+msgstr ""
+
+msgid "The \"to\" way does not start or end at a \"via\" node."
+msgstr ""
+
+msgid "The \"from\" and the first \"via\" way are not connected."
+msgstr ""
+
+msgid "The \"via\" ways are not connected."
+msgstr ""
+
+msgid "The last \"via\" and the \"to\" way are not connected."
+msgstr ""
+
+msgid "Unclosed Ways"
+msgstr ""
+
+msgid "This tests if ways which should be circular are closed."
+msgstr ""
+
+msgid "Unclosed way"
+msgstr ""
+
+msgid "natural type {0}"
+msgstr ""
+
+msgid "landuse type {0}"
+msgstr ""
+
+msgid "amenities type {0}"
+msgstr ""
+
+msgid "sport type {0}"
+msgstr ""
+
+msgid "tourism type {0}"
+msgstr ""
+
+msgid "shop type {0}"
+msgstr ""
+
+msgid "leisure type {0}"
+msgstr ""
+
+msgid "waterway type {0}"
+msgstr ""
+
+msgid "boundary type {0}"
+msgstr ""
+
+msgid "building"
+msgstr ""
+
+msgid "area"
+msgstr ""
+
+msgid "Unconnected highways"
+msgstr ""
+
+msgid "Unconnected railways"
+msgstr ""
+
+msgid "Unconnected waterways"
+msgstr ""
+
+msgid "Unconnected natural lands and landuses"
+msgstr ""
+
+msgid "Unconnected power ways"
+msgstr ""
+
+msgid "This test checks if a way has an endpoint very near to another way."
+msgstr ""
+
+msgid "Way end node near other highway"
+msgstr ""
+
+msgid "Way end node near other way"
+msgstr ""
+
+msgid "Way node near other way"
+msgstr ""
+
+msgid "Connected way end node near other way"
+msgstr ""
+
+msgid "Unconnected nodes without physical tags"
+msgstr ""
+
+msgid "Untagged and unconnected nodes"
+msgstr ""
+
+msgid "This test checks for untagged nodes that are not part of any way."
+msgstr ""
+
+msgid "No tags"
+msgstr ""
+
+msgid "Has tag containing ''fixme'' or ''FIXME''"
+msgstr ""
+
+msgid "Has key ''note'' or ''comment'' or ''description''"
+msgstr ""
+
+msgid "Has key ''created_by'' or ''converted_by''"
+msgstr ""
+
+msgid "Has key ''watch''"
+msgstr ""
+
+msgid "Has key ''source''"
+msgstr ""
+
+msgid "Untagged, empty and one node ways"
+msgstr ""
+
+msgid "This test checks for untagged, empty and one node ways."
+msgstr ""
+
+msgid "Unnamed ways"
+msgstr ""
+
+msgid "Unnamed junction"
+msgstr ""
+
+msgid "Untagged ways (commented)"
+msgstr ""
+
+msgid "Untagged ways"
+msgstr ""
+
+msgid "Empty ways"
+msgstr ""
+
+msgid "One node ways"
+msgstr ""
+
+msgid "Way connected to Area"
+msgstr ""
+
+msgid "Checks for ways connected to areas."
+msgstr ""
+
+msgid "Way terminates on Area"
+msgstr ""
+
+msgid "Wrongly Ordered Ways"
+msgstr ""
+
+msgid "This test checks the direction of water, land and coastline ways."
+msgstr ""
+
+msgid "Reversed coastline: land not on left side"
+msgstr ""
+
+msgid "Reversed land: land not on left side"
+msgstr ""
+
+msgid "Show this dialog again the next time"
+msgstr ""
+
+msgid "Do not show again (this operation)"
+msgstr ""
+
+msgid "Do not show again (this session)"
+msgstr ""
+
+msgid "Do not show again (remembers choice)"
+msgstr ""
+
+msgid " [id: {0}]"
+msgstr ""
+
+msgid "incomplete"
+msgstr ""
+
+msgid "House {0}"
+msgstr ""
+
+msgid "House number {0} at {1}"
+msgstr ""
+
+msgid "House number {0}"
+msgstr ""
+
+msgid "highway"
+msgstr ""
+
+msgid "railway"
+msgstr ""
+
+msgid "waterway"
+msgstr ""
+
+msgid "landuse"
+msgstr ""
+
+msgid "{0} node"
+msgid_plural "{0} nodes"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "{0} member"
+msgid_plural "{0} members"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "public transport"
+msgstr ""
+
+msgid "Changeset {0}"
+msgstr ""
+
+msgid "Precondition violation"
+msgstr ""
+
+msgid "Security exception"
+msgstr ""
+
+msgid "Network exception"
+msgstr ""
+
+msgid "IO Exception"
+msgstr ""
+
+msgid "Illegal Data"
+msgstr ""
+
+msgid "Offline mode"
+msgstr ""
+
+msgid "Internal Server Error"
+msgstr ""
+
+msgid "Bad Request"
+msgstr ""
+
+msgid "Not Found"
+msgstr ""
+
+msgid "Conflict"
+msgstr ""
+
+msgid "Authentication Failed"
+msgstr ""
+
+msgid "Access to redacted version ''{0}'' of {1} {2} is forbidden."
+msgstr ""
+
+msgid "Authorisation Failed"
+msgstr ""
+
+msgid "Client Time Out"
+msgstr ""
+
+msgid "Bandwidth Limit Exceeded"
+msgstr ""
+
+msgid "Communication with OSM server failed"
+msgstr ""
+
+msgid "Authentication failed"
+msgstr ""
+
+msgid "Unknown host"
+msgstr ""
+
+msgid "Object deleted"
+msgid_plural "Objects deleted"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Show help information"
+msgstr ""
+
+msgid "Downloading \"Message of the day\""
+msgstr ""
+
+msgid "Failed to read MOTD. Exception was: {0}"
+msgstr ""
+
+msgid "Message of the day not available"
+msgstr ""
+
+msgid "Click to close the dialog"
+msgstr ""
+
+msgid "Imagery offset"
+msgstr ""
+
+msgctxt "menu"
+msgid "Imagery"
+msgstr ""
+
+msgctxt "layer"
+msgid "Offset"
+msgstr ""
+
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
+msgid "usage"
+msgstr ""
+
+msgid "options"
+msgstr ""
+
+msgid "Show this help"
+msgstr ""
+
+msgid "Standard unix geometry argument"
+msgstr ""
+
+msgid "Download the bounding box"
+msgstr ""
+
+msgid "Download the location at the URL (with lat=x&lon=y&zoom=z)"
+msgstr ""
+
+msgid "Open a file (any file type that can be opened with File/Open)"
+msgstr ""
+
+msgid "Download the bounding box as raw GPS"
+msgstr ""
+
+msgid "Download the location at the URL (with lat=x&lon=y&zoom=z) as raw GPS"
+msgstr ""
+
+msgid "Select with the given search"
+msgstr ""
+
+msgid "Launch in maximized mode"
+msgstr ""
+
+msgid "Reset the preferences to default"
+msgstr ""
+
+msgid "Changes preferences according to the XML file"
+msgstr ""
+
+msgid "Set preference key to value"
+msgstr ""
+
+msgid "Set the language"
+msgstr ""
+
+msgid "Displays the JOSM version and exits"
+msgstr ""
+
+msgid "Print debugging messages to console"
+msgstr ""
+
+msgid "Skip loading plugins"
+msgstr ""
+
+msgid "Disable access to the given resource(s), separated by comma"
+msgstr ""
+
+msgid "options provided as Java system properties"
+msgstr ""
+
+msgid "/PATH/TO/JOSM/PREF    "
+msgstr ""
+
+msgid "Set the preferences directory"
+msgstr ""
+
+msgid "/PATH/TO/JOSM/USERDATA"
+msgstr ""
+
+msgid "Set the user data directory"
+msgstr ""
+
+msgid "/PATH/TO/JOSM/CACHE   "
+msgstr ""
+
+msgid "Set the cache directory"
+msgstr ""
+
+msgid "/PATH/TO/JOSM/HOMEDIR "
+msgstr ""
+
+msgid ""
+"Relocate all 3 directories to homedir. Cache directory will be in "
+"homedir/cache"
+msgstr ""
+
+msgid ""
+"-Djosm.home has lower precedence, i.e. the specific setting overrides the "
+"general one"
+msgstr ""
+
+msgid ""
+"note: For some tasks, JOSM needs a lot of memory. It can be necessary to add "
+"the following\n"
+"      Java option to specify the maximum size of allocated memory in "
+"megabytes"
+msgstr ""
+
+msgid "examples"
+msgstr ""
+
+msgid ""
+"Parameters --download, --downloadgps, and --selection are processed in this "
+"order."
+msgstr ""
+
+msgid "Make sure you load some data if you use --selection."
+msgstr ""
+
+msgid "Printing debugging messages to console"
+msgstr ""
+
+msgid "Plugin loading skipped"
+msgstr ""
+
+msgid "Enabled detailed debug level (trace)"
+msgstr ""
+
+msgid "Initializing"
+msgstr ""
+
+msgid "Updating plugins"
+msgstr ""
+
+msgid "Installing updated plugins"
+msgstr ""
+
+msgid "Loading early plugins"
+msgstr ""
+
+msgid "Setting defaults"
+msgstr ""
+
+msgid "Creating main GUI"
+msgstr ""
+
+msgid "Loading plugins"
+msgstr ""
+
+msgid ""
+"''{0}'' is not a valid value for argument ''{1}''. Possible values are {2}, "
+"possibly delimited by commas."
+msgstr ""
+
+msgid ""
+"JOSM is running in offline mode. This resource will not be available: {0}"
+msgid_plural ""
+"JOSM is running in offline mode. These resources will not be available: {0}"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
+msgid "Unsaved osm data"
+msgstr ""
+
+msgid "Restore"
+msgstr ""
+
+msgid "Discard"
+msgstr ""
+
+msgid "JOSM found {0} unsaved osm data layer. "
+msgid_plural "JOSM found {0} unsaved osm data layers. "
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"It looks like JOSM crashed last time. Would you like to restore the data?"
+msgstr ""
+
+msgid "Change proxy settings"
+msgstr ""
+
+msgid "Proxy errors occurred"
+msgstr ""
+
+msgid ""
+"JOSM tried to access the following resources:<br>{0}but <b>failed</b> to do "
+"so, because of the following proxy errors:<br>{1}Would you like to change "
+"your proxy settings now?"
+msgstr ""
+
+msgid "Network errors occurred"
+msgstr ""
+
+msgid ""
+"JOSM tried to access the following resources:<br>{0}but <b>failed</b> to do "
+"so, because of the following network errors:<br>{1}It may be due to a "
+"missing proxy configuration.<br>Would you like to change your proxy settings "
+"now?"
+msgstr ""
+
+msgctxt "menu"
+msgid "File"
+msgstr ""
+
+msgctxt "menu"
+msgid "Edit"
+msgstr ""
+
+msgctxt "menu"
+msgid "View"
+msgstr ""
+
+msgctxt "menu"
+msgid "Tools"
+msgstr ""
+
+msgctxt "menu"
+msgid "More tools"
+msgstr ""
+
+msgctxt "menu"
+msgid "Data"
+msgstr ""
+
+msgctxt "menu"
+msgid "Selection"
+msgstr ""
+
+msgctxt "menu"
+msgid "Presets"
+msgstr ""
+
+msgid "More..."
+msgstr ""
+
+msgctxt "menu"
+msgid "GPS"
+msgstr ""
+
+msgctxt "menu"
+msgid "Windows"
+msgstr ""
+
+msgctxt "menu"
+msgid "Help"
+msgstr ""
+
+msgid "Menu: {0}"
+msgstr ""
+
+msgid "Edit toolbar"
+msgstr ""
+
+msgid "Toggles the visibility of the edit toolbar (i.e., the vertical tool)"
+msgstr ""
+
+msgid "Preset preferences"
+msgstr ""
+
+msgid "Click to open the tagging presets tab in the preferences"
+msgstr ""
+
+msgid "Imagery preferences"
+msgstr ""
+
+msgid "Click to open the imagery tab in the preferences"
+msgstr ""
+
+msgid "Search menu items"
+msgstr ""
+
+msgctxt "menu"
+msgid "Audio"
+msgstr ""
+
+msgid "Do not hide toolbar"
+msgstr ""
+
+msgid "Hide this button"
+msgstr ""
+
+msgid "Click the arrow at the bottom to show it again."
+msgstr ""
+
+msgid "Hide edit toolbar"
+msgstr ""
+
+msgid "Hide or show this toggle button"
+msgstr ""
+
+msgid "Move right"
+msgstr ""
+
+msgid "Map: {0}"
+msgstr ""
+
+msgid "Move left"
+msgstr ""
+
+msgid "Move up"
+msgstr ""
+
+msgid "Move down"
+msgstr ""
+
+msgid "Zoom in"
+msgstr ""
+
+msgid "Zoom out"
+msgstr ""
+
+msgid "scale"
+msgstr ""
+
+msgid "Status bar background"
+msgstr ""
+
+msgid "Status bar background: active"
+msgstr ""
+
+msgid "Status bar foreground"
+msgstr ""
+
+msgid "Status bar foreground: active"
+msgstr ""
+
+msgid "{0} ({1})"
+msgstr ""
+
+msgid "The geographic latitude at the mouse pointer."
+msgstr ""
+
+msgid "The geographic longitude at the mouse pointer."
+msgstr ""
+
+msgid "The (compass) heading of the line segment being drawn."
+msgstr ""
+
+msgid "The angle between the previous and the current way segment."
+msgstr ""
+
+msgid "The length of the new way segment being drawn."
+msgstr ""
+
+msgid "The name of the object at the mouse pointer."
+msgstr ""
+
+msgid ""
+"Middle click again to cycle through.<br>Hold CTRL to select directly from "
+"this list with the mouse.<hr>"
+msgstr ""
+
+msgid "(no object)"
+msgstr ""
+
+msgid "User:"
+msgstr ""
+
+msgid "Do not hide status bar"
+msgstr ""
+
+msgid "System of measurement changed to {0}"
+msgstr ""
+
+msgid "Layer not in list."
+msgstr ""
+
+msgid "Layer ''{0}'' must be in list of layers"
+msgstr ""
+
+msgid "Default (open, closed, new)"
+msgstr ""
+
+msgid "Username"
+msgstr ""
+
+msgid "Created date"
+msgstr ""
+
+msgid "Last change date"
+msgstr ""
+
+msgid "Select note sorting method"
+msgstr ""
+
+msgid "Click to cancel the current operation"
+msgstr ""
+
+msgid "In background"
+msgstr ""
+
+msgid "Click to run job in background"
+msgstr ""
+
+msgid " ({0})"
+msgstr ""
+
+msgid "{0} completed in {1}"
+msgstr ""
+
+msgid "Enlarge"
+msgstr ""
+
+msgid "Shrink"
+msgstr ""
+
+msgid ""
+"<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
+"level.</html>"
+msgstr ""
+
+msgid "Zoom level:"
+msgstr ""
+
+msgid "from tile"
+msgstr ""
+
+msgid "up to tile"
+msgstr ""
+
+msgid ""
+"<html>Alternatively you may enter a <strong>tile address</strong> for a "
+"single tile in the format <i>zoomlevel/x/y</i>, i.e. <i>15/256/223</i>. Tile "
+"addresses in the format <i>zoom,x,y</i> or <i>zoom;x;y</i> are valid "
+"too.</html>"
+msgstr ""
+
+msgid "Tile address:"
+msgstr ""
+
+msgid "Apply the tile address"
+msgstr ""
+
+msgid "Please enter a tile address"
+msgstr ""
+
+msgid "The current value isn''t a valid tile address"
+msgstr ""
+
+msgid "Please enter a tile index"
+msgstr ""
+
+msgid "The current value isn''t a valid tile index for the given zoom level"
+msgstr ""
+
+msgid "Conflict background: no conflict"
+msgstr ""
+
+msgid "Conflict background: decided"
+msgstr ""
+
+msgid "Conflict background: undecided"
+msgstr ""
+
+msgid "Conflict background: drop"
+msgstr ""
+
+msgid "Conflict background: keep"
+msgstr ""
+
+msgid "Conflict background: combined"
+msgstr ""
+
+msgid "Conflict background: selected"
+msgstr ""
+
+msgid "Conflict foreground: undecided"
+msgstr ""
+
+msgid "Conflict foreground: drop"
+msgstr ""
+
+msgid "Conflict foreground: keep"
+msgstr ""
+
+msgid "Conflict background: empty row"
+msgstr ""
+
+msgid "Conflict background: frozen"
+msgstr ""
+
+msgid "Conflict background: in comparison"
+msgstr ""
+
+msgid "Conflict foreground: in comparison"
+msgstr ""
+
+msgid "Conflict background"
+msgstr ""
+
+msgid "Conflict foreground"
+msgstr ""
+
+msgid "Conflict background: not in opposite"
+msgstr ""
+
+msgid "Conflict background: in opposite"
+msgstr ""
+
+msgid "Conflict background: same position in opposite"
+msgstr ""
+
+msgid "Conflict background: keep one tag"
+msgstr ""
+
+msgid "Conflict foreground: keep one tag"
+msgstr ""
+
+msgid "Conflict background: drop tag"
+msgstr ""
+
+msgid "Conflict foreground: drop tag"
+msgstr ""
+
+msgid "Conflict background: keep all tags"
+msgstr ""
+
+msgid "Conflict foreground: keep all tags"
+msgstr ""
+
+msgid "Conflict background: sum all numeric tags"
+msgstr ""
+
+msgid "Conflict foreground: sum all numeric tags"
+msgstr ""
+
+msgid "Conflict background: keep member"
+msgstr ""
+
+msgid "Conflict foreground: keep member"
+msgstr ""
+
+msgid "Conflict background: remove member"
+msgstr ""
+
+msgid "Conflict foreground: remove member"
+msgstr ""
+
+msgid "My with Their"
+msgstr ""
+
+msgid "My with Merged"
+msgstr ""
+
+msgid "Their with Merged"
+msgstr ""
+
+msgid "Role {0} is not participating in compare pair {1}."
+msgstr ""
+
+msgid "Properties"
+msgstr ""
+
+msgid "Tags"
+msgstr ""
+
+msgid "Nodes"
+msgstr ""
+
+msgid "Members"
+msgstr ""
+
+msgid "No pending tag conflicts to be resolved"
+msgstr ""
+
+msgid "Tags({0} conflict)"
+msgid_plural "Tags({0} conflicts)"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "{0} pending tag conflict to be resolved"
+msgid_plural "{0} pending tag conflicts to be resolved"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Nodes(resolved)"
+msgstr ""
+
+msgid ""
+"Merged node list frozen. No pending conflicts in the node list of this way"
+msgstr ""
+
+msgid "Nodes(with conflicts)"
+msgstr ""
+
+msgid "Pending conflicts in the node list of this way"
+msgstr ""
+
+msgid "Members(resolved)"
+msgstr ""
+
+msgid ""
+"Merged member list frozen. No pending conflicts in the member list of this "
+"relation"
+msgstr ""
+
+msgid "Members(with conflicts)"
+msgstr ""
+
+msgid "Pending conflicts in the member list of this relation"
+msgstr ""
+
+msgid "No pending property conflicts"
+msgstr ""
+
+msgid "Properties(with conflicts)"
+msgstr ""
+
+msgid "Pending property conflicts to be resolved"
+msgstr ""
+
+msgid "Conflict Resolution"
+msgstr ""
+
+msgid "{0} more..."
+msgstr ""
+
+msgid ""
+"The following objects could not be copied to the target object<br>because "
+"they are deleted in the target dataset:"
+msgstr ""
+
+msgid "Merging deleted objects failed"
+msgstr ""
+
+msgid "List in role {0} is currently not participating in a compare pair."
+msgstr ""
+
+msgid "Unexpected value of parameter ''index''. Got {0}."
+msgstr ""
+
+msgid "Item {0} not found in list."
+msgstr ""
+
+msgid "lock scrolling"
+msgstr ""
+
+msgid "Compare "
+msgstr ""
+
+msgid "My version"
+msgstr ""
+
+msgid "List of elements in my dataset, i.e. the local dataset"
+msgstr ""
+
+msgid "Merged version"
+msgstr ""
+
+msgid ""
+"List of merged elements. They will replace the list of my elements when the "
+"merge decisions are applied."
+msgstr ""
+
+msgid "Their version"
+msgstr ""
+
+msgid "List of elements in their dataset, i.e. the server dataset"
+msgstr ""
+
+msgid "> top"
+msgstr ""
+
+msgid "Copy my selected nodes to the start of the merged node list"
+msgstr ""
+
+msgid "> bottom"
+msgstr ""
+
+msgid "Copy my selected elements to the end of the list of merged elements."
+msgstr ""
+
+msgid "> before"
+msgstr ""
+
+msgid ""
+"Copy my selected elements before the first selected element in the list of "
+"merged elements."
+msgstr ""
+
+msgid "> after"
+msgstr ""
+
+msgid ""
+"Copy my selected elements after the first selected element in the list of "
+"merged elements."
+msgstr ""
+
+msgid "< top"
+msgstr ""
+
+msgid ""
+"Copy their selected element to the start of the list of merged elements."
+msgstr ""
+
+msgid "< bottom"
+msgstr ""
+
+msgid ""
+"Copy their selected elements to the end of the list of merged elements."
+msgstr ""
+
+msgid "< before"
+msgstr ""
+
+msgid ""
+"Copy their selected elements before the first selected element in the list "
+"of merged elements."
+msgstr ""
+
+msgid "< after"
+msgstr ""
+
+msgid ""
+"Copy their selected element after the first selected element in the list of "
+"merged elements"
+msgstr ""
+
+msgid "Copy all my elements to the target"
+msgstr ""
+
+msgid "Copy all their elements to the target"
+msgstr ""
+
+msgid "Up"
+msgstr ""
+
+msgid "Move up the selected entries by one position."
+msgstr ""
+
+msgid "Down"
+msgstr ""
+
+msgid "Move down the selected entries by one position."
+msgstr ""
+
+msgid "Remove"
+msgstr ""
+
+msgid "Remove the selected entries from the list of merged elements."
+msgstr ""
+
+msgid "Freeze"
+msgstr ""
+
+msgid "Freeze the current list of merged elements."
+msgstr ""
+
+msgid "Unfreeze"
+msgstr ""
+
+msgid "Unfreeze the list of merged elements and start merging."
+msgstr ""
+
+msgid ""
+"<html>Click <strong>{0}</strong> to start merging my and their "
+"entries.</html>"
+msgstr ""
+
+msgid ""
+"<html>Click <strong>{0}</strong> to finish merging my and their "
+"entries.</html>"
+msgstr ""
+
+msgid "My version ({0} entry)"
+msgid_plural "My version ({0} entries)"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Merged version ({0} entry)"
+msgid_plural "Merged version ({0} entries)"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Their version ({0} entry)"
+msgid_plural "Their version ({0} entries)"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Node"
+msgstr ""
+
+msgid "Merged nodes not frozen yet. Cannot build resolution command."
+msgstr ""
+
+msgid "Properties in my dataset, i.e. the local dataset"
+msgstr ""
+
+msgid ""
+"Properties in the merged element. They will replace properties in my "
+"elements when merge decisions are applied."
+msgstr ""
+
+msgid "Properties in their dataset, i.e. the server dataset"
+msgstr ""
+
+msgid "Coordinates:"
+msgstr ""
+
+msgid "Deleted State:"
+msgstr ""
+
+msgid "Referenced by:"
+msgstr ""
+
+msgid "(none)"
+msgstr ""
+
+msgid "deleted"
+msgstr ""
+
+msgid "not deleted"
+msgstr ""
+
+msgid "Keep my coordinates"
+msgstr ""
+
+msgid "Keep their coordinates"
+msgstr ""
+
+msgid "Undecide conflict between different coordinates"
+msgstr ""
+
+msgid "Keep my deleted state"
+msgstr ""
+
+msgid "Keep their deleted state"
+msgstr ""
+
+msgid "Undecide conflict between deleted state"
+msgstr ""
+
+msgid "Role"
+msgstr ""
+
+msgid "Primitive"
+msgstr ""
+
+msgid "Merged nodes not frozen yet. Cannot build resolution command"
+msgstr ""
+
+msgid "<undefined>"
+msgstr ""
+
+msgid "The merged dataset will not include a tag with key {0}"
+msgstr ""
+
+msgid "My dataset does not include a tag with key {0}"
+msgstr ""
+
+msgid "Key"
+msgstr ""
+
+msgid "Value"
+msgstr ""
+
+msgid "Cannot apply undecided tag merge item."
+msgstr ""
+
+msgid "My version (local dataset)"
+msgstr ""
+
+msgid "Their version (server dataset)"
+msgstr ""
+
+msgid "Keep the selected key/value pairs from the local dataset"
+msgstr ""
+
+msgid "Keep the selected key/value pairs from the server dataset"
+msgstr ""
+
+msgid "Undecide"
+msgstr ""
+
+msgid "Mark the selected tags as undecided"
+msgstr ""
+
+msgid "Their dataset does not include a tag with key {0}"
+msgstr ""
+
+msgid "Conflicts when combining primitives"
+msgstr ""
+
+msgid "Conflicts when combining ways - combined way is ''{0}''"
+msgstr ""
+
+msgid "Conflicts when merging nodes - target node is ''{0}''"
+msgstr ""
+
+msgid "No conflicts to resolve"
+msgstr ""
+
+msgid "Cancel conflict resolution"
+msgstr ""
+
+msgid "Apply resolved conflicts"
+msgstr ""
+
+msgid "Apply"
+msgstr ""
+
+msgid ""
+"You are about to combine {1} object, which is part of {0} "
+"relation:<br/>{2}Combining these objects may break this relation. If you are "
+"unsure, please cancel this operation.<br/>If you want to continue, you are "
+"shown a dialog to decide how to adapt the relation.<br/><br/>Do you want to "
+"continue?"
+msgid_plural ""
+"You are about to combine {1} objects, which are part of {0} "
+"relations:<br/>{2}Combining these objects may break these relations. If you "
+"are unsure, please cancel this operation.<br/>If you want to continue, you "
+"are shown a dialog to decide how to adapt the relations.<br/><br/>Do you "
+"want to continue?"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Combine confirmation"
+msgstr ""
+
+msgid ", "
+msgstr ""
+
+msgid "<i>missing</i>"
+msgstr ""
+
+msgid ""
+"You are about to combine {0} objects, but the following tags are used "
+"conflictingly:<br/>{1}If these objects are combined, the resulting object "
+"may have unwanted tags.<br/>If you want to continue, you are shown a dialog "
+"to fix the conflicting tags.<br/><br/>Do you want to continue?"
+msgid_plural ""
+"You are about to combine {0} objects, but the following tags are used "
+"conflictingly:<br/>{1}If these objects are combined, the resulting object "
+"may have unwanted tags.<br/>If you want to continue, you are shown a dialog "
+"to fix the conflicting tags.<br/><br/>Do you want to continue?"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Choose a value"
+msgstr ""
+
+msgid "none"
+msgstr ""
+
+msgid "all"
+msgstr ""
+
+msgid "sum"
+msgstr ""
+
+msgid "Please decide which values to keep"
+msgstr ""
+
+msgid "Value ''{0}'' is going to be applied for key ''{1}''"
+msgstr ""
+
+msgid ""
+"All numeric values sumed as ''{0}'' are going to be applied for key ''{1}''"
+msgstr ""
+
+msgid "The key ''{0}'' and all its values are going to be removed"
+msgstr ""
+
+msgid "All values joined as ''{0}'' are going to be applied for key ''{1}''"
+msgstr ""
+
+msgid "Tag collection does not include the selected value ''{0}''."
+msgstr ""
+
+msgid "Not decided yet."
+msgstr ""
+
+msgid "Tags from nodes"
+msgstr ""
+
+msgid "Tags from ways"
+msgstr ""
+
+msgid "Tags from relations"
+msgstr ""
+
+msgid "Conflicts in pasted tags"
+msgstr ""
+
+msgid "Paste ..."
+msgstr ""
+
+msgid "From ..."
+msgstr ""
+
+msgid "To ..."
+msgstr ""
+
+msgid "{0} tag"
+msgid_plural "{0} tags"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "{0} way"
+msgid_plural "{0} ways"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "{0} relation"
+msgid_plural "{0} relations"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Position {0} is out of range. Current number of members is {1}."
+msgstr ""
+
+msgid "Remove this relation member from the relation"
+msgstr ""
+
+msgid "Keep"
+msgstr ""
+
+msgid "Keep this relation member for the target object"
+msgstr ""
+
+msgid "Undecided"
+msgstr ""
+
+msgid "Not decided yet"
+msgstr ""
+
+msgid "Role:"
+msgstr ""
+
+msgid "Enter a role for all relation memberships"
+msgstr ""
+
+msgid "Tag modified relations with "
+msgstr ""
+
+msgid ""
+"<html>Select to enable entering a tag which will be applied<br>to all "
+"modified relations.</html>"
+msgstr ""
+
+msgctxt "tag"
+msgid "Key:"
+msgstr ""
+
+msgid "<html>Enter a tag key, e.g. <strong><tt>fixme</tt></strong></html>"
+msgstr ""
+
+msgid "Value:"
+msgstr ""
+
+msgid ""
+"<html>Enter a tag value, e.g. <strong><tt>check members</tt></strong></html>"
+msgstr ""
+
+msgid ""
+"<html>The combined ways are members in one or more relations. Please decide "
+"whether you want to <strong>keep</strong> these memberships for the combined "
+"way or whether you want to <strong>remove</strong> them.<br>The default is "
+"to <strong>keep</strong> the first way and <strong>remove</strong> the other "
+"ways that are members of the same relation: the combined way will take the "
+"place of the original way in the relation.</html>"
+msgstr ""
+
+msgid ""
+"<html>The merged nodes are members in one or more relations. Please decide "
+"whether you want to <strong>keep</strong> these memberships for the target "
+"node or whether you want to <strong>remove</strong> them.<br>The default is "
+"to <strong>keep</strong> the first node and <strong>remove</strong> the "
+"other nodes that are members of the same relation: the target node will take "
+"the place of the original node in the relation.</html>"
+msgstr ""
+
+msgid "Apply this role to all members"
+msgstr ""
+
+msgid "Pos."
+msgstr ""
+
+msgid "Orig. Way"
+msgstr ""
+
+msgid "Decision"
+msgstr ""
+
+msgid "<html>Please select the values to keep for the following tags.</html>"
+msgstr ""
+
+msgid "Show tags with conflicts only"
+msgstr ""
+
+msgid "Show tags with multiple values only"
+msgstr ""
+
+msgid "For selected objects only"
+msgstr ""
+
+msgid ""
+"<html>Select to show changesets for the currently selected objects "
+"only.<br>Unselect to show all changesets for objects in the current data "
+"layer.</html>"
+msgstr ""
+
+msgid "Changesets"
+msgstr ""
+
+msgid "Open the list of changesets in the current layer."
+msgstr ""
+
+msgid "Select all objects assigned to the currently selected changesets"
+msgstr ""
+
+msgid "Download"
+msgstr ""
+
+msgid ""
+"Download information about the selected changesets from the OSM server"
+msgstr ""
+
+msgid "Closes the selected open changesets"
+msgstr ""
+
+msgid "Show info"
+msgstr ""
+
+msgid "Open a web page for each selected changeset"
+msgstr ""
+
+msgid "Details"
+msgstr ""
+
+msgid "Opens the Changeset Manager window for the selected changesets"
+msgstr ""
+
+msgid "Command Stack"
+msgstr ""
+
+msgid "Open a list of all commands (undo buffer)."
+msgstr ""
+
+msgid "Toggle: {0}"
+msgstr ""
+
+msgid "Command Stack: Undo: {0} / Redo: {1}"
+msgstr ""
+
+msgid ""
+"Selects the objects that take part in this command (unless currently deleted)"
+msgstr ""
+
+msgid "Select and zoom"
+msgstr ""
+
+msgid ""
+"Selects the objects that take part in this command (unless currently "
+"deleted), then and zooms to it"
+msgstr ""
+
+msgid "Undo the selected and all later commands"
+msgstr ""
+
+msgid "Redo the selected and all earlier commands"
+msgstr ""
+
+msgid "Resolve conflicts."
+msgstr ""
+
+msgid "Conflict: {0} unresolved"
+msgid_plural "Conflicts: {0} unresolved"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Rel.:{0} / Ways:{1} / Nodes:{2}"
+msgstr ""
+
+msgid "Resolve"
+msgstr ""
+
+msgid "Open a merge dialog of all selected items in the list above."
+msgstr ""
+
+msgid "There was {0} conflict detected."
+msgid_plural "There were {0} conflicts detected."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to close this dialog and continue editing"
+msgstr ""
+
+msgid "Conflicts detected"
+msgstr ""
+
+msgid "Cancel conflict resolution and close the dialog"
+msgstr ""
+
+msgid "Apply resolved conflicts and close the dialog"
+msgstr ""
+
+msgid "Apply Resolution"
+msgstr ""
+
+msgid "Close anyway"
+msgstr ""
+
+msgid "Continue resolving"
+msgstr ""
+
+msgid ""
+"<html>You did not finish to merge the differences in this "
+"conflict.<br>Conflict resolutions will not be applied unless all "
+"differences<br>are resolved.<br>Click <strong>{0}</strong> to close "
+"anyway.<strong> Already<br>resolved differences will not be "
+"applied.</strong><br>Click <strong>{1}</strong> to return to resolving "
+"conflicts.</html>"
+msgstr ""
+
+msgid "Conflict not resolved completely"
+msgstr ""
+
+msgid "Resolve conflicts"
+msgstr ""
+
+msgid "Resolve conflicts for ''{0}''"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
+msgid "Filter objects and hide/disable them."
+msgstr ""
+
+msgid "Enable filter"
+msgstr ""
+
+msgid "Multikey: {0}"
+msgstr ""
+
+msgid "Hide filter"
+msgstr ""
+
+msgid "Hiding filter"
+msgstr ""
+
+msgid "Inverse filter"
+msgstr ""
+
+msgid "Filter mode"
+msgstr ""
+
+msgid "Add"
+msgstr ""
+
+msgid "Add filter."
+msgstr ""
+
+msgid "Edit filter."
+msgstr ""
+
+msgid "Delete filter."
+msgstr ""
+
+msgid "Move filter up."
+msgstr ""
+
+msgid "Move filter down."
+msgstr ""
+
+msgid "Filter Hidden:{0} Disabled:{1}"
+msgstr ""
+
+msgid "Error in filter"
+msgstr ""
+
+msgctxt "filter"
+msgid "E"
+msgstr ""
+
+msgctxt "filter"
+msgid "H"
+msgstr ""
+
+msgctxt "filter"
+msgid "Text"
+msgstr ""
+
+msgctxt "filter"
+msgid "I"
+msgstr ""
+
+msgctxt "filter"
+msgid "M"
+msgstr ""
+
+msgctxt "filter"
+msgid "R"
+msgstr ""
+
+msgctxt "filter"
+msgid "A"
+msgstr ""
+
+msgctxt "filter"
+msgid "D"
+msgstr ""
+
+msgctxt "filter"
+msgid "F"
+msgstr ""
+
+msgid "<h2>Filter active</h2>"
+msgstr ""
+
+msgid "<p><b>{0}</b> object hidden"
+msgid_plural "<p><b>{0}</b> objects hidden"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "<b>{0}</b> object disabled"
+msgid_plural "<b>{0}</b> objects disabled"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "</p><p>Close the filter dialog to see all objects.<p></html>"
+msgstr ""
+
+msgid "Advanced object info"
+msgstr ""
+
+msgid "map style"
+msgstr ""
+
+msgid "edit counts"
+msgstr ""
+
+msgid "not in data set"
+msgstr ""
+
+msgid "Node: "
+msgstr ""
+
+msgid "Way: "
+msgstr ""
+
+msgid "Relation: "
+msgstr ""
+
+msgid "deleted-on-server"
+msgstr ""
+
+msgid "modified"
+msgstr ""
+
+msgid "filtered/hidden"
+msgstr ""
+
+msgid "filtered/disabled"
+msgstr ""
+
+msgid "has direction keys (reversed)"
+msgstr ""
+
+msgid "has direction keys"
+msgstr ""
+
+msgid "State: "
+msgstr ""
+
+msgid "Data Set: "
+msgstr ""
+
+msgid "Edited at: "
+msgstr ""
+
+msgid "<new object>"
+msgstr ""
+
+msgid "Edited by: "
+msgstr ""
+
+msgid "Version: "
+msgstr ""
+
+msgid "In changeset: "
+msgstr ""
+
+msgid "Tags: "
+msgstr ""
+
+msgid "Centroid: "
+msgstr ""
+
+msgid "{0} Member: "
+msgid_plural "{0} Members: "
+msgstr[0] ""
+msgstr[1] ""
+
+msgid " as \"{0}\""
+msgstr ""
+
+msgid "{0} Nodes: "
+msgstr ""
+
+msgid "Bounding box: "
+msgstr ""
+
+msgid "Bounding box (projected): "
+msgstr ""
+
+msgid "Center of bounding box: "
+msgstr ""
+
+msgid "Coordinates: "
+msgstr ""
+
+msgid "Coordinates (projected): "
+msgstr ""
+
+msgid "Part of: "
+msgstr ""
+
+msgid "In conflict with: "
+msgstr ""
+
+msgid "Styles Cache for \"{0}\":"
+msgstr ""
+
+msgid ""
+"\n"
+"\n"
+"> applying {0} style \"{1}\"\n"
+msgstr ""
+
+msgid ""
+"\n"
+"Range:{0}"
+msgstr ""
+
+msgid ""
+"\n"
+"\n"
+"> skipping \"{0}\" (not active)"
+msgstr ""
+
+msgid ""
+"\n"
+"\n"
+"List of generated Styles:\n"
+msgstr ""
+
+msgid "The 2 selected objects have identical style caches."
+msgstr ""
+
+msgid "The 2 selected objects have different style caches."
+msgstr ""
+
+msgid ""
+"Warning: The 2 selected objects have equal, but not identical style caches."
+msgstr ""
+
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "xml"
+msgstr ""
+
+msgid "mapcss"
+msgstr ""
+
+msgid "unknown"
+msgstr ""
+
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
+msgid ""
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
+msgstr ""
+
+msgid "Projected coordinates:"
+msgstr ""
+
+msgid ""
+"Enter easting and northing (x and y) separated by space, comma or semicolon."
+msgstr ""
+
+msgid "Lat/Lon"
+msgstr ""
+
+msgid "East/North"
+msgstr ""
+
+msgid "Please enter a GPS coordinates"
+msgstr ""
+
+msgid "Please enter a Easting and Northing"
+msgstr ""
+
+msgid "Toggle visibility of layer: {0}"
+msgstr ""
+
+msgid "Open a list of all loaded layers."
+msgstr ""
+
+msgid "Delete the selected layers."
+msgstr ""
+
+msgid "Show/hide"
+msgstr ""
+
+msgid "Toggle visible state of the selected layer."
+msgstr ""
+
+msgid "Show/hide layer"
+msgstr ""
+
+msgid "Opacity"
+msgstr ""
+
+msgid "Adjust opacity of the layer."
+msgstr ""
+
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
+msgid "Activate"
+msgstr ""
+
+msgid "Activate the selected layer"
+msgstr ""
+
+msgid "Activate layer"
+msgstr ""
+
+msgid "Merge this layer into another layer"
+msgstr ""
+
+msgid "Duplicate this layer"
+msgstr ""
+
+msgid "Copy of {0}"
+msgstr ""
+
+msgid "Copy {1} of {0}"
+msgstr ""
+
+msgid "layer is currently visible (click to hide layer)"
+msgstr ""
+
+msgid "layer is currently hidden (click to show layer)"
+msgstr ""
+
+msgid "this layer is the active layer"
+msgstr ""
+
+msgid "this layer is not currently active (click to activate)"
+msgstr ""
+
+msgid "Move the selected layer one row up."
+msgstr ""
+
+msgid "Move the selected layer one row down."
+msgstr ""
+
+msgid "Information about layer"
+msgstr ""
+
+msgid "Map paint preferences"
+msgstr ""
+
+msgid "Map Paint Styles"
+msgstr ""
+
+msgid "configure the map painting style"
+msgstr ""
+
+msgid "MapPaint"
+msgstr ""
+
+msgid "On/Off"
+msgstr ""
+
+msgid "Turn selected styles on or off"
+msgstr ""
+
+msgid "Move the selected entry one row down."
+msgstr ""
+
+msgid "Move the selected entry one row up."
+msgstr ""
+
+msgid "Reload from file"
+msgstr ""
+
+msgid "reload selected styles from file"
+msgstr ""
+
+msgid "Save as..."
+msgstr ""
+
+msgid "Save a copy of this Style to file and add it to the list"
+msgstr ""
+
+msgid "Map paint style file (*.mapcss, *.zip)"
+msgstr ""
+
+msgid "Map paint style file (*.xml, *.zip)"
+msgstr ""
+
+msgid "Reloading style sources"
+msgstr ""
+
+msgid "Save style ''{0}'' as ''{1}''"
+msgstr ""
+
+msgid "view meta information, error log and source definition"
+msgstr ""
+
+msgid "Map Style info"
+msgstr ""
+
+msgid "Source"
+msgstr ""
+
+msgid "Title:"
+msgstr ""
+
+msgid "URL:"
+msgstr ""
+
+msgid "Built-in Style, internal path:"
+msgstr ""
+
+msgid "Path:"
+msgstr ""
+
+msgid "Icon:"
+msgstr ""
+
+msgid "Background:"
+msgstr ""
+
+msgid "Style is currently active?"
+msgstr ""
+
+msgid "No"
+msgstr ""
+
+msgid "Style settings"
+msgstr ""
+
+msgid "Customize the style"
+msgstr ""
+
+msgid "Mini map"
+msgstr ""
+
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
+msgid "List of notes"
+msgstr ""
+
+msgid "Add comment"
+msgstr ""
+
+msgid "Comment"
+msgstr ""
+
+msgid "Comment on note"
+msgstr ""
+
+msgid "Add comment to note:"
+msgstr ""
+
+msgid "Close note"
+msgstr ""
+
+msgid "Close note with message:"
+msgstr ""
+
+msgid "Create a new note"
+msgstr ""
+
+msgid "Create"
+msgstr ""
+
+msgid "Reopen note"
+msgstr ""
+
+msgid "Reopen"
+msgstr ""
+
+msgid "Reopen note with message:"
+msgstr ""
+
+msgid "Sort notes"
+msgstr ""
+
+msgid "Sort"
+msgstr ""
+
+msgid "Object type:"
+msgstr ""
+
+msgctxt "osm object types"
+msgid "mixed"
+msgstr ""
+
+msgid "Choose the OSM object type"
+msgstr ""
+
+msgid "Object ID:"
+msgstr ""
+
+msgid "Enter the ID of the object that should be downloaded"
+msgstr ""
+
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
+msgid ""
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
+msgstr ""
+
+msgid ""
+"Invalid ID list specified\n"
+"Cannot continue."
+msgstr ""
+
+msgid "Relations"
+msgstr ""
+
+msgid "Open a list of all relations."
+msgstr ""
+
+msgid "Relation list filter"
+msgstr ""
+
+msgid "Create a new relation"
+msgstr ""
+
+msgid "New"
+msgstr ""
+
+msgid "Relations: {0}/{1}"
+msgstr ""
+
+msgid "Relations: {0}"
+msgstr ""
+
+msgid "Selection"
+msgstr ""
+
+msgid "Open a selection list window."
+msgstr ""
+
+msgid "Current Selection"
+msgstr ""
+
+msgid "Search for objects"
+msgstr ""
+
+msgid "Display the history of the selected objects."
+msgstr ""
+
+msgid "Zoom to selection"
+msgstr ""
+
+msgid "Zoom to selected element(s)"
+msgstr ""
+
+msgid "Sel.: Rel.:{0} / Ways:{1} / Nodes:{2}"
+msgstr ""
+
+msgid "Unselectable now"
+msgstr ""
+
+msgid "Selection: {0}"
+msgstr ""
+
+msgid "Always shown"
+msgstr ""
+
+msgid "Dynamic"
+msgstr ""
+
+msgid "Always hidden"
+msgstr ""
+
+msgid "Toggle dynamic buttons"
+msgstr ""
+
+msgid "Open preferences for this panel"
+msgstr ""
+
+msgid "Undock the panel"
+msgstr ""
+
+msgid ""
+"Close this panel. You can reopen it with the buttons in the left toolbar."
+msgstr ""
+
+msgid "Click to minimize/maximize the panel content"
+msgstr ""
+
+msgid "Side buttons"
+msgstr ""
+
+msgid "Authors"
+msgstr ""
+
+msgid "Open a list of people working on the selected objects."
+msgstr ""
+
+msgid "{0} Author"
+msgid_plural "{0} Authors"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Select objects submitted by this user"
+msgstr ""
+
+msgid "Launches a browser with information about the user"
+msgstr ""
+
+msgid "Only launching info browsers for the first {0} of {1} selected users"
+msgstr ""
+
+msgid "Author"
+msgstr ""
+
+msgid "# Objects"
+msgstr ""
+
+msgid "Validation Results"
+msgstr ""
+
+msgid "Open the validation window."
+msgstr ""
+
+msgid "Validation results"
+msgstr ""
+
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
+msgid "Fix"
+msgstr ""
+
+msgid "Fix the selected issue."
+msgstr ""
+
+msgid "Ignore the selected issue next time."
+msgstr ""
+
+msgid "Whole group"
+msgstr ""
+
+msgid "Single elements"
+msgstr ""
+
+msgid "Nothing"
+msgstr ""
+
+msgid "Ignore whole group or individual elements?"
+msgstr ""
+
+msgid "Ignoring elements"
+msgstr ""
+
+msgid "Fixing errors ..."
+msgstr ""
+
+msgid "Fixing ({0}/{1}): ''{2}''"
+msgstr ""
+
+msgid "Updating map ..."
+msgstr ""
+
+msgid "anonymous"
+msgstr ""
+
+msgid "Display the basic properties of the changeset"
+msgstr ""
+
+msgid "Display the tags of the changeset"
+msgstr ""
+
+msgid "Content"
+msgstr ""
+
+msgid "Display the objects created, updated, and deleted by the changeset"
+msgstr ""
+
+msgid "Discussion"
+msgstr ""
+
+msgid "Display the public discussion around this changeset"
+msgstr ""
+
+msgid "Changeset Management Dialog"
+msgstr ""
+
+msgid "Close the dialog"
+msgstr ""
+
+msgid "Query"
+msgstr ""
+
+msgid "Launch the dialog for querying changesets"
+msgstr ""
+
+msgid "Remove from cache"
+msgstr ""
+
+msgid "Remove the selected changesets from the local cache"
+msgstr ""
+
+msgid "Close the selected changesets"
+msgstr ""
+
+msgid "Update changeset"
+msgstr ""
+
+msgid "Updates the selected changesets with current data from the OSM server"
+msgstr ""
+
+msgid "Download changeset content"
+msgstr ""
+
+msgid "Download the content of the selected changesets from the server"
+msgstr ""
+
+msgid "My changesets"
+msgstr ""
+
+msgid "Download my changesets from the OSM server (max. 100 changesets)"
+msgstr ""
+
+msgid ""
+"<html>JOSM is currently running with an anonymous user. It cannot "
+"download<br>your changesets from the OSM server unless you enter your OSM "
+"user name<br>in the JOSM preferences.</html>"
+msgstr ""
+
+msgctxt "changeset.upload-comment"
+msgid "empty"
+msgstr ""
+
+msgctxt "changeset.state"
+msgid "Open"
+msgstr ""
+
+msgctxt "changeset.state"
+msgid "Closed"
+msgstr ""
+
+msgid "ID"
+msgstr ""
+
+msgid "Open"
+msgstr ""
+
+msgid "User"
+msgstr ""
+
+msgid "Created at"
+msgstr ""
+
+msgid "Closed at"
+msgstr ""
+
+msgid "Discussions"
+msgstr ""
+
+msgid "Downloading changeset content"
+msgstr ""
+
+msgid "({0}/{1}) Downloading changeset {2}..."
+msgstr ""
+
+msgid "({0}/{1}) Downloading content for changeset {2}..."
+msgstr ""
+
+msgid ""
+"<html>The selected object is not available in the current<br>edit layer "
+"''{0}''.</html>"
+msgid_plural ""
+"<html>None of the selected objects is available in the current<br>edit layer "
+"''{0}''.</html>"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Download content"
+msgstr ""
+
+msgid "Download the changeset content from the OSM server"
+msgstr ""
+
+msgid "Update content"
+msgstr ""
+
+msgid "Update the changeset content from the OSM server"
+msgstr ""
+
+msgid "Download and show the history of the selected objects"
+msgstr ""
+
+msgid "Select in layer"
+msgstr ""
+
+msgid "Select the corresponding primitives in the current data layer"
+msgstr ""
+
+msgid "Nothing to select"
+msgstr ""
+
+msgid "Zoom to in layer"
+msgstr ""
+
+msgid "Zoom to the corresponding objects in the current data layer"
+msgstr ""
+
+msgid "Nothing to zoom to"
+msgstr ""
+
+msgid "The content of this changeset is not downloaded yet."
+msgstr ""
+
+msgid "Download now"
+msgstr ""
+
+msgid "Download the changeset content"
+msgstr ""
+
+msgid "Created"
+msgstr ""
+
+msgid "Updated"
+msgstr ""
+
+msgid "Deleted"
+msgstr ""
+
+msgid "Name"
+msgstr ""
+
+msgid "ID:"
+msgstr ""
+
+msgid "Comment:"
+msgstr ""
+
+msgid "Open/Closed:"
+msgstr ""
+
+msgid "Created by:"
+msgstr ""
+
+msgid "Created on:"
+msgstr ""
+
+msgid "Closed on:"
+msgstr ""
+
+msgid "Remove the changeset in the detail view panel from the local cache"
+msgstr ""
+
+msgid "Update the changeset from the OSM server"
+msgstr ""
+
+msgid ""
+"Select the primitives in the content of this changeset in the current data "
+"layer"
+msgstr ""
+
+msgid ""
+"<html>None of the objects in the content of changeset {0} is available in "
+"the current<br>edit layer ''{1}''.</html>"
+msgstr ""
+
+msgid ""
+"Zoom to the objects in the content of this changeset in the current data "
+"layer"
+msgstr ""
+
+msgid "Update changeset discussion"
+msgstr ""
+
+msgid "Update the changeset discussion from the OSM server"
+msgstr ""
+
+msgid "Date"
+msgstr ""
+
+msgid "Download changesets"
+msgstr ""
+
+msgid "{0} [incomplete]"
+msgstr ""
+
+msgid "open"
+msgstr ""
+
+msgid "closed"
+msgstr ""
+
+msgid "Changeset ID: "
+msgstr ""
+
+msgid "Enter a changeset id"
+msgstr ""
+
+msgid ""
+"Download the changeset with the specified id, including the changeset content"
+msgstr ""
+
+msgid "Select changesets owned by specific users"
+msgstr ""
+
+msgid "Select changesets depending on whether they are open or closed"
+msgstr ""
+
+msgid ""
+"Select changesets based on the date/time they have been created or closed"
+msgstr ""
+
+msgid "Select only changesets related to a specific bounding box"
+msgstr ""
+
+msgid "Query open changesets only"
+msgstr ""
+
+msgid "Query closed changesets only"
+msgstr ""
+
+msgid "Query both open and closed changesets"
+msgstr ""
+
+msgid "User ID:"
+msgstr ""
+
+msgid "User name:"
+msgstr ""
+
+msgid "Only changesets owned by myself"
+msgstr ""
+
+msgid "Only changesets owned by the user with the following user ID"
+msgstr ""
+
+msgid "Only changesets owned by the user with the following user name"
+msgstr ""
+
+msgid ""
+"Only changesets owned by myself (disabled. JOSM is currently run by an "
+"anonymous user)"
+msgstr ""
+
+msgid ""
+"Cannot restrict changeset query to the current user because the current user "
+"is anonymous"
+msgstr ""
+
+msgid "Current value ''{0}'' for user ID is not valid"
+msgstr ""
+
+msgid "Cannot restrict the changeset query to the user name ''{0}''"
+msgstr ""
+
+msgid "Please enter a valid user ID"
+msgstr ""
+
+msgid "Invalid user ID"
+msgstr ""
+
+msgid "Please enter a non-empty user name"
+msgstr ""
+
+msgid "Invalid user name"
+msgstr ""
+
+msgid "Date: "
+msgstr ""
+
+msgid "Time:"
+msgstr ""
+
+msgid "Closed after - "
+msgstr ""
+
+msgid "Date:"
+msgstr ""
+
+msgid "Created before - "
+msgstr ""
+
+msgid "Only changesets closed after the following date/time"
+msgstr ""
+
+msgid "Only changesets closed after and created before a specific date/time"
+msgstr ""
+
+msgid ""
+"Cannot build changeset query with time based restrictions. Input is not "
+"valid."
+msgstr ""
+
+msgid ""
+"<html>Please enter valid date/time values to restrict<br>the query to a "
+"specific time range.</html>"
+msgstr ""
+
+msgid "Invalid date/time values"
+msgstr ""
+
+msgid ""
+"Cannot restrict the changeset query to a specific bounding box. The input is "
+"invalid."
+msgstr ""
+
+msgid ""
+"<html>Please enter valid longitude/latitude values to restrict<br>the "
+"changeset query to a specific bounding box.</html>"
+msgstr ""
+
+msgid "Invalid bounding box"
+msgstr ""
+
+msgid ""
+"The current value is not a valid user ID. Please enter an integer value > 0"
+msgstr ""
+
+msgid "Please enter an integer value > 0"
+msgstr ""
+
+msgid ""
+"<html>The  current value is not a valid user name.<br>Please enter an non-"
+"empty user name.</html>"
+msgstr ""
+
+msgid "Please enter an non-empty user name"
+msgstr ""
+
+msgid ""
+"Please enter a date in the usual format for your locale.<br>Example: "
+"{0}<br>Example: {1}<br>Example: {2}<br>Example: {3}<br>"
+msgstr ""
+
+msgid ""
+"Please enter a valid time in the usual format for your locale.<br>Example: "
+"{0}<br>Example: {1}<br>Example: {2}<br>Example: {3}<br>"
+msgstr ""
+
+msgid "Download my changesets only"
+msgstr ""
+
+msgid ""
+"<html>Select to restrict the query to your changesets only.<br>Unselect to "
+"include all changesets in the query.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please select one the following <strong>standard "
+"queries</strong>.Select <strong>Download my changesets only</strong> if you "
+"only want to download changesets created by yourself.<br>Note that JOSM will "
+"download max. 100 changesets.</html>"
+msgstr ""
+
+msgid "<html>Download the latest changesets</html>"
+msgstr ""
+
+msgid ""
+"<html>Download my open changesets<br><em>Disabled. Please enter your OSM "
+"user name in the preferences first.</em></html>"
+msgstr ""
+
+msgid "<html>Download my open changesets</html>"
+msgstr ""
+
+msgid ""
+"<html>Download changesets in the current map view.<br><em>Disabled. There is "
+"currently no map view active.</em></html>"
+msgstr ""
+
+msgid "<html>Download changesets in the current map view</html>"
+msgstr ""
+
+msgid ""
+"Unexpected value for preference ''{0}'', got ''{1}''. Resetting to default "
+"query."
+msgstr ""
+
+msgid "Cannot create changeset query for open changesets of anonymous user"
+msgstr ""
+
+msgid "Basic"
+msgstr ""
+
+msgid "Download changesets using predefined queries"
+msgstr ""
+
+msgid "From URL"
+msgstr ""
+
+msgid "Query changesets from a server URL"
+msgstr ""
+
+msgid "Advanced"
+msgstr ""
+
+msgid "Use a custom changeset query"
+msgstr ""
+
+msgid "Query changesets"
+msgstr ""
+
+msgid "Query and download changesets"
+msgstr ""
+
+msgid "Please enter a valid changeset query URL first."
+msgstr ""
+
+msgid "Illegal changeset query URL"
+msgstr ""
+
+msgid "Close the dialog and abort querying of changesets"
+msgstr ""
+
+msgid "Querying and downloading changesets"
+msgstr ""
+
+msgid "Determine user id for current user..."
+msgstr ""
+
+msgid "Query and download changesets ..."
+msgstr ""
+
+msgid "URL: "
+msgstr ""
+
+msgid "Please enter or paste an URL to retrieve changesets from the OSM API."
+msgstr ""
+
+msgid "Examples"
+msgstr ""
+
+msgid ""
+"Note that changeset queries are currently always submitted to ''{0}'', "
+"regardless of the host, port and path of the URL entered below."
+msgstr ""
+
+msgid "This changeset query URL is invalid"
+msgstr ""
+
+msgid "Discardable key: selection Foreground"
+msgstr ""
+
+msgid "Discardable key: selection Background"
+msgstr ""
+
+msgid "Discardable key: foreground"
+msgstr ""
+
+msgid "Discardable key: background"
+msgstr ""
+
+msgid "{0} ''{1}''"
+msgstr ""
+
+msgid "{0} different"
+msgid_plural "{0} different"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ", {0} unset"
+msgid_plural ", {0} unset"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Select objects for which to change tags."
+msgstr ""
+
+msgid "Tags/Memberships"
+msgstr ""
+
+msgid "Tags for selected objects."
+msgstr ""
+
+msgid "Member Of"
+msgstr ""
+
+msgid "Position"
+msgstr ""
+
+msgid "<different>"
+msgstr ""
+
+msgid "Objects: {2} / Tags: {0} / Memberships: {1}"
+msgstr ""
+
+msgid "Tags: {0} / Memberships: {1}"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Delete the selected key in all objects"
+msgstr ""
+
+msgid "Delete Tags"
+msgstr ""
+
+msgid "Change relation"
+msgstr ""
+
+msgid "Delete from relation"
+msgstr ""
+
+msgid "Really delete selection from relation {0}?"
+msgstr ""
+
+msgid "Add a new key/value pair to all objects"
+msgstr ""
+
+msgid "Add Tag"
+msgstr ""
+
+msgid "Edit the value of the selected key for all objects"
+msgstr ""
+
+msgid "Edit Tags"
+msgstr ""
+
+msgid "Go to OSM wiki for tag help (F1)"
+msgstr ""
+
+msgid "Launch browser with wiki help for selected object"
+msgstr ""
+
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
+msgid "Paste Value"
+msgstr ""
+
+msgid "Paste the value of the selected tag from clipboard"
+msgstr ""
+
+msgid "Copy Value"
+msgstr ""
+
+msgid "Copy the value of the selected tag to clipboard"
+msgstr ""
+
+msgid "Copy selected Key(s)/Value(s)"
+msgstr ""
+
+msgid "Copy the key and value of the selected tag(s) to clipboard"
+msgstr ""
+
+msgid "Copy all Keys/Values"
+msgstr ""
+
+msgid "Copy the key and value of all the tags to clipboard"
+msgstr ""
+
+msgid "Search Key/Value/Type"
+msgstr ""
+
+msgid ""
+"Search with the key and value of the selected tag, restrict to type (i.e., "
+"node/way/relation)"
+msgstr ""
+
+msgid "Search Key/Value"
+msgstr ""
+
+msgid "Search with the key and value of the selected tag"
+msgstr ""
+
+msgid "Overwrite key"
+msgstr ""
+
+msgid "Replace"
+msgstr ""
+
+msgid "The new key is already used, overwrite values?"
+msgstr ""
+
+msgid "Change value?"
+msgid_plural "Change values?"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "This will change {0} object."
+msgid_plural "This will change up to {0} objects."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "An empty value deletes the tag."
+msgstr ""
+
+msgid "You changed the key from ''{0}'' to ''{1}''."
+msgstr ""
+
+msgid "Change properties of up to {0} object"
+msgid_plural "Change properties of up to {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Use English language for tag by default"
+msgstr ""
+
+msgid "Add value?"
+msgstr ""
+
+msgid "This will change up to {0} object."
+msgid_plural "This will change up to {0} objects."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Please select a key"
+msgstr ""
+
+msgid "Please select a value"
+msgstr ""
+
+msgid "Set number of recently added tags"
+msgstr ""
+
+msgid "Remember last used tags after a restart"
+msgstr ""
+
+msgid "to apply first suggestion"
+msgstr ""
+
+msgid "to add without closing the dialog"
+msgstr ""
+
+msgid "to add first suggestion without closing the dialog"
+msgstr ""
+
+msgid "Please enter the number of recently added tags to display"
+msgstr ""
+
+msgid "Please enter integer number between 0 and {0}"
+msgstr ""
+
+msgid "Recently added tags"
+msgstr ""
+
+msgid "Choose recent tag {0}"
+msgstr ""
+
+msgid "Use this tag again"
+msgstr ""
+
+msgid "Apply recent tag {0}"
+msgstr ""
+
+msgid "The key ''{0}'' is already used"
+msgstr ""
+
+msgid "You changed the value of ''{0}'' from ''{1}'' to ''{2}''."
+msgstr ""
+
+msgid "Edit the relation the currently selected relation member refers to."
+msgstr ""
+
+msgid "Download all child relations (recursively)"
+msgstr ""
+
+msgid "Download All Children"
+msgstr ""
+
+msgid "Download selected relations"
+msgstr ""
+
+msgid "Download Selected Children"
+msgstr ""
+
+msgid "Conflict in data"
+msgid_plural "Conflicts in data"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Download relation members"
+msgstr ""
+
+msgid ""
+"<html>The child relation<br>{0}<br>is deleted on the server. It cannot be "
+"loaded</html>"
+msgstr ""
+
+msgid "Relation is deleted"
+msgstr ""
+
+msgid "Downloading relation {0}"
+msgstr ""
+
+msgid "Ignoring exception because task was canceled. Exception: {0}"
+msgstr ""
+
+msgid "Downloading {0} incomplete object"
+msgid_plural "Downloading {0} incomplete objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Downloading {0} incomplete child of relation ''{1}''"
+msgid_plural "Downloading {0} incomplete children of relation ''{1}''"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Downloading {0} incomplete child of {1} parent relations"
+msgid_plural "Downloading {0} incomplete children of {1} parent relations"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Download relations"
+msgstr ""
+
+msgid "({0}/{1}): Downloading relation ''{2}''..."
+msgstr ""
+
+msgid "Tags and Members"
+msgstr ""
+
+msgid "Parent Relations"
+msgstr ""
+
+msgid "Child Relations"
+msgstr ""
+
+msgid "Apply Role:"
+msgstr ""
+
+msgid "Enter a role and apply it to the selected relation members"
+msgstr ""
+
+msgid "New Relation"
+msgstr ""
+
+msgid "Focus Relation Editor with relation ''{0}'' in layer ''{1}''"
+msgstr ""
+
+msgid "Relation Editor: {0}"
+msgstr ""
+
+msgid ""
+"<html>There is at least one member in this relation referring<br>to the "
+"relation itself.<br>This creates circular dependencies and is "
+"discouraged.<br>How do you want to proceed with circular dependencies?</html>"
+msgstr ""
+
+msgid "Remove them, clean up relation"
+msgstr ""
+
+msgid "Ignore them, leave relation as is"
+msgstr ""
+
+msgid "Sorry, shortcut \"{0}\" can not be enabled in Relation editor dialog"
+msgstr ""
+
+msgid ""
+"<html>This relation already has one or more members referring to<br>the "
+"object ''{0}''<br><br>Do you really want to add another relation "
+"member?</html>"
+msgstr ""
+
+msgid "Multiple members referring to same object."
+msgstr ""
+
+msgid ""
+"<html>You are trying to add a relation to itself.<br><br>This creates "
+"circular references and is therefore discouraged.<br>Skipping relation "
+"''{0}''.</html>"
+msgstr ""
+
+msgid ""
+"Add all objects selected in the current dataset before the first member"
+msgstr ""
+
+msgid ""
+"Add all objects selected in the current dataset before the first selected "
+"member"
+msgstr ""
+
+msgid ""
+"Add all objects selected in the current dataset after the last selected "
+"member"
+msgstr ""
+
+msgid "Remove all members referring to one of the selected objects"
+msgstr ""
+
+msgid ""
+"Select relation members which refer to objects in the current selection"
+msgstr ""
+
+msgid ""
+"Select relation members which refer to {0} objects in the current selection"
+msgstr ""
+
+msgid "Select objects for selected relation members"
+msgstr ""
+
+msgid "Sort the relation members"
+msgstr ""
+
+msgid "Relation Editor: Sort"
+msgstr ""
+
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
+msgid "Reverse the order of the relation members"
+msgstr ""
+
+msgid "Reverse"
+msgstr ""
+
+msgid "Move the currently selected members up"
+msgstr ""
+
+msgid "Relation Editor: Move Up"
+msgstr ""
+
+msgid "Move the currently selected members down"
+msgstr ""
+
+msgid "Relation Editor: Move Down"
+msgstr ""
+
+msgid "Remove the currently selected members from this relation"
+msgstr ""
+
+msgid "Relation Editor: Remove"
+msgstr ""
+
+msgid "Delete the currently edited relation"
+msgstr ""
+
+msgid ""
+"One or more members of this new relation have been deleted while the "
+"relation editor\n"
+"was open. They have been removed from the relation members list."
+msgstr ""
+
+msgid "Yes, create a conflict and close"
+msgstr ""
+
+msgid "Click to create a conflict and close this relation editor"
+msgstr ""
+
+msgid "No, continue editing"
+msgstr ""
+
+msgid "Click to return to the relation editor and to resume relation editing"
+msgstr ""
+
+msgid ""
+"<html>This relation has been changed outside of the editor.<br>You cannot "
+"apply your changes and continue editing.<br><br>Do you want to create a "
+"conflict and close the editor?</html>"
+msgstr ""
+
+msgid ""
+"<html>Layer ''{0}'' already has a conflict for object<br>''{1}''.<br>Please "
+"resolve this conflict first, then try again.</html>"
+msgstr ""
+
+msgid "Apply the current updates"
+msgstr ""
+
+msgid "Apply the updates and close the dialog"
+msgstr ""
+
+msgid "Cancel the updates and close the dialog"
+msgstr ""
+
+msgid "Yes, save the changes and close"
+msgstr ""
+
+msgid "Click to save the changes and close this relation editor"
+msgstr ""
+
+msgid "No, discard the changes and close"
+msgstr ""
+
+msgid "Click to discard the changes and close this relation editor"
+msgstr ""
+
+msgid "Cancel, continue editing"
+msgstr ""
+
+msgid ""
+"<html>The relation has been changed.<br><br>Do you want to save your "
+"changes?</html>"
+msgstr ""
+
+msgid "Unsaved changes"
+msgstr ""
+
+msgid "Add an empty tag"
+msgstr ""
+
+msgid "Download all incomplete members"
+msgstr ""
+
+msgid "Download Members"
+msgstr ""
+
+msgid "Relation Editor: Download Members"
+msgstr ""
+
+msgid "Download selected incomplete members"
+msgstr ""
+
+msgid "Sets a role for the selected members"
+msgstr ""
+
+msgid "Apply Role"
+msgstr ""
+
+msgid "You are setting an empty role on {0} object."
+msgid_plural "You are setting an empty role on {0} objects."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "This is equal to deleting the roles of these objects."
+msgstr ""
+
+msgid "Do you really want to apply the new role?"
+msgstr ""
+
+msgid "Yes, apply it"
+msgstr ""
+
+msgid "No, do not apply"
+msgstr ""
+
+msgid "Confirm empty role"
+msgstr ""
+
+msgid "Edit the relation the currently selected relation member refers to"
+msgstr ""
+
+msgid ""
+"Members from paste buffer cannot be added because they are not included in "
+"current layer"
+msgstr ""
+
+msgid "Select previous Gap"
+msgstr ""
+
+msgid "Select the previous relation member which gives rise to a gap"
+msgstr ""
+
+msgid "Select next Gap"
+msgstr ""
+
+msgid "Select the next relation member which gives rise to a gap"
+msgstr ""
+
+msgid "Zoom to Gap"
+msgstr ""
+
+msgid "Zoom to the gap in the way sequence"
+msgstr ""
+
+msgid "Refers to"
+msgstr ""
+
+msgid "Download referring relations"
+msgstr ""
+
+msgid "There were {0} conflicts during import."
+msgstr ""
+
+msgid "including immediate children of parent relations"
+msgstr ""
+
+msgid "Load parent relations"
+msgstr ""
+
+msgid "Reload"
+msgstr ""
+
+msgid "Loading parent relations"
+msgstr ""
+
+msgid "Edit the currently selected relation"
+msgstr ""
+
+msgid "Apply Changes"
+msgstr ""
+
+msgid "Create new relation in layer ''{0}''"
+msgstr ""
+
+msgid "Edit new relation in layer ''{0}''"
+msgstr ""
+
+msgid "Edit relation #{0} in layer ''{1}''"
+msgstr ""
+
+msgid "Load relation"
+msgstr ""
+
+msgid "way is connected"
+msgstr ""
+
+msgid "way is connected to previous relation member"
+msgstr ""
+
+msgid "way is connected to next relation member"
+msgstr ""
+
+msgid "way is not connected to previous or next relation member"
+msgstr ""
+
+msgid "{0} - {1} ({2})"
+msgstr ""
+
+msgid "Wrong number of arguments for bookmark"
+msgstr ""
+
+msgid "Error reading bookmark entry: %s"
+msgstr ""
+
+msgid "Bookmarks"
+msgstr ""
+
+msgid "<html>There is currently no download area selected.</html>"
+msgstr ""
+
+msgid ""
+"<html><strong>Current download area</strong> (minlon, minlat, maxlon, "
+"maxlat): </html>"
+msgstr ""
+
+msgid "Create bookmark"
+msgstr ""
+
+msgid "Add a bookmark for the currently selected download area"
+msgstr ""
+
+msgid ""
+"Currently, there is no download area selected. Please select an area first."
+msgstr ""
+
+msgid "Please enter a name for the bookmarked download area."
+msgstr ""
+
+msgid "Name of location"
+msgstr ""
+
+msgid "Remove the currently selected bookmarks"
+msgstr ""
+
+msgid "Rename the currently selected bookmark"
+msgstr ""
+
+msgid "min lat"
+msgstr ""
+
+msgid "min lon"
+msgstr ""
+
+msgid "max lat"
+msgstr ""
+
+msgid "max lon"
+msgstr ""
+
+msgid "Clear textarea"
+msgstr ""
+
+msgid ""
+"URL from www.openstreetmap.org (you can paste an URL here to download the "
+"area)"
+msgstr ""
+
+msgid "Bounding Box"
+msgstr ""
+
+msgid "The string ''{0}'' is not a valid double value."
+msgstr ""
+
+msgid "Value for latitude in range [-90,90] required."
+msgstr ""
+
+msgid "Value for longitude in range [-180,180] required."
+msgstr ""
+
+msgid "Data Sources and Types:"
+msgstr ""
+
+msgid "OpenStreetMap data"
+msgstr ""
+
+msgid "Select to download OSM data in the selected download area."
+msgstr ""
+
+msgid "Raw GPS data"
+msgstr ""
+
+msgid "Select to download GPS traces in the selected download area."
+msgstr ""
+
+msgid "Select to download notes in the selected download area."
+msgstr ""
+
+msgid "Download as new layer"
+msgstr ""
+
+msgid ""
+"<html>Select to download data into a new data layer.<br>Unselect to download "
+"into the currently active data layer.</html>"
+msgstr ""
+
+msgid "Open this dialog on startup"
+msgstr ""
+
+msgid ""
+"<html>Autostart ''Download from OSM'' dialog every time JOSM is "
+"started.<br>You can open it manually from File menu or toolbar.</html>"
+msgstr ""
+
+msgid ""
+"Use left click&drag to select area, arrows or right mouse button to scroll "
+"map, wheel or +/- to zoom."
+msgstr ""
+
+msgid "No area selected yet"
+msgstr ""
+
+msgid "Download area too large; will probably be rejected by server"
+msgstr ""
+
+msgid "Download area ok, size probably acceptable to server"
+msgstr ""
+
+msgid "Click to close the dialog and to abort downloading"
+msgstr ""
+
+msgid "Click to download the currently selected area"
+msgstr ""
+
+msgid "Please select a download area first."
+msgstr ""
+
+msgid ""
+"<html>Neither <strong>{0}</strong> nor <strong>{1}</strong> nor "
+"<strong>{2}</strong> is enabled.<br>Please choose to either download OSM "
+"data, or GPX data, or Notes, or all.</html>"
+msgstr ""
+
+msgid "Download referrers (parent relations)"
+msgstr ""
+
+msgid "Download object"
+msgstr ""
+
+msgid "Start downloading"
+msgstr ""
+
+msgid ""
+"Select if the referrers of the object should be downloaded as well, "
+"i.e.,parent relations and for nodes, additionally, parent ways"
+msgstr ""
+
+msgid "Select if the members of a relation should be downloaded as well"
+msgstr ""
+
+msgid "Download referrers (parent relations and ways)"
+msgstr ""
+
+msgid "Class Type"
+msgstr ""
+
+msgid "Bounds"
+msgstr ""
+
+msgid "Choose the server for searching:"
+msgstr ""
+
+msgid "Enter a place name to search for:"
+msgstr ""
+
+msgid "Enter a place name to search for"
+msgstr ""
+
+msgid "Areas around places"
+msgstr ""
+
+msgid "Null pointer exception, possibly some missing tags."
+msgstr ""
+
+msgid "Search ..."
+msgstr ""
+
+msgid "Click to start searching for places"
+msgstr ""
+
+msgid "Querying name server"
+msgstr ""
+
+msgid "Querying name server ..."
+msgstr ""
+
+msgid "Error occured with query ''{0}'': ''{1}''"
+msgstr ""
+
+msgid "Name server returned invalid data. Please try again."
+msgstr ""
+
+msgid "Bad response"
+msgstr ""
+
+msgid "Type"
+msgstr ""
+
+msgid "Slippy map"
+msgstr ""
+
+msgid "Tile Numbers"
+msgstr ""
+
+msgid "JOSM Help Browser"
+msgstr ""
+
+msgid "Failed to read CSS file ''help-browser.css''. Exception is: {0}"
+msgstr ""
+
+msgid ""
+"<html><p class=\"warning-header\">Help content for help topic missing</p><p "
+"class=\"warning-body\">Help content for the help topic <strong>{0}</strong> "
+"is not available yet. It is missing both in your local language ({1}) and in "
+"English.<br><br>Please help to improve the JOSM help system and fill in the "
+"missing information. You can both edit the <a href=\"{2}\">help topic in "
+"your local language ({1})</a> and the <a href=\"{3}\">help topic in "
+"English</a>.</p></html>"
+msgstr ""
+
+msgid ""
+"<html><p class=\"error-header\">Error when retrieving help information</p><p "
+"class=\"error-body\">The content for the help topic <strong>{0}</strong> "
+"could not be loaded. The error message is "
+"(untranslated):<br><tt>{1}</tt></p></html>"
+msgstr ""
+
+msgid ""
+"<html>Failed to open help page for url {0}.<br>This is most likely due to a "
+"network problem, please check<br>your internet connection</html>"
+msgstr ""
+
+msgid "Failed to open URL"
+msgstr ""
+
+msgid "Open the current help page in an external browser"
+msgstr ""
+
+msgid "Edit the current help page"
+msgstr ""
+
+msgid ""
+"<html>The current URL <tt>{0}</tt><br>is an external URL. Editing is only "
+"possible for help topics<br>on the help server <tt>{1}</tt>.</html>"
+msgstr ""
+
+msgid "Reload the current help page"
+msgstr ""
+
+msgid "Go to the previous page"
+msgstr ""
+
+msgid "Go to the next page"
+msgstr ""
+
+msgid "Go to the JOSM help home page"
+msgstr ""
+
+msgid "Bad location in HTML document. Exception was: {0}"
+msgstr ""
+
+msgid "Failed to open help page. The target URL is empty."
+msgstr ""
+
+msgid "Failed to open help page"
+msgstr ""
+
+msgid "Latitude: "
+msgstr ""
+
+msgid "Longitude: "
+msgstr ""
+
+msgid "Distance: "
+msgstr ""
+
+msgid "Coordinates"
+msgstr ""
+
+msgid "History for node {0}"
+msgstr ""
+
+msgid "History for way {0}"
+msgstr ""
+
+msgid "History for relation {0}"
+msgstr ""
+
+msgid "Reload the history from the server"
+msgstr ""
+
+msgid "History not initialized yet. Failed to set reference primitive."
+msgstr ""
+
+msgid ""
+"Failed to set reference. Reference ID {0} does not match history ID {1}."
+msgstr ""
+
+msgid ""
+"Failed to set reference. Reference version {0} not available in history."
+msgstr ""
+
+msgid "History not initialized yet. Failed to set current primitive."
+msgstr ""
+
+msgid ""
+"Failed to set current primitive. Current version {0} not available in "
+"history."
+msgstr ""
+
+msgid "Load history"
+msgstr ""
+
+msgid "Loading history for node {0}"
+msgstr ""
+
+msgid "Loading history for way {0}"
+msgstr ""
+
+msgid "Loading history for relation {0}"
+msgstr ""
+
+msgid "Node {0}"
+msgstr ""
+
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
+msgid "Zoom to node"
+msgstr ""
+
+msgid "Zoom to this node in the current data layer"
+msgstr ""
+
+msgid "Open a history browser with the history of this node"
+msgstr ""
+
+msgid "Way {0}"
+msgstr ""
+
+msgid "Relation {0}"
+msgstr ""
+
+msgid "Object"
+msgstr ""
+
+msgid "not present"
+msgstr ""
+
+msgid "Changeset comment"
+msgstr ""
+
+msgid "Changeset source"
+msgstr ""
+
+msgid "Imagery used"
+msgstr ""
+
+msgid "<b>Source</b>:"
+msgstr ""
+
+msgid "<b>Imagery</b>:"
+msgstr ""
+
+msgid ""
+"<html>Version <strong>{0}</strong> currently edited in layer ''{1}''</html>"
+msgstr ""
+
+msgid ""
+"<html>Version <strong>{0}</strong> created on <strong>{1}</strong></html>"
+msgstr ""
+
+msgid "Changeset"
+msgstr ""
+
+msgid "Changeset info"
+msgstr ""
+
+msgid "Launch browser with information about the changeset"
+msgstr ""
+
+msgid "Show changeset {0}"
+msgstr ""
+
+msgid "User info"
+msgstr ""
+
+msgid "Launch browser with information about the user"
+msgstr ""
+
+msgid "Show user {0}"
+msgstr ""
+
+msgid "Ver"
+msgstr ""
+
+msgid "A"
+msgstr ""
+
+msgid "B"
+msgstr ""
+
+msgid ""
+"Failed to update primitive with id {0} because current edit layer is null"
+msgstr ""
+
+msgid ""
+"Failed to update primitive with id {0} because current edit layer does not "
+"include such a primitive"
+msgstr ""
+
+msgid "Synchronize node {0} only"
+msgstr ""
+
+msgid "Synchronize way {0} only"
+msgstr ""
+
+msgid "Synchronize relation {0} only"
+msgstr ""
+
+msgid "Synchronize entire dataset"
+msgstr ""
+
+msgid ""
+"<html>Uploading <strong>failed</strong> because the server has a newer "
+"version of one<br>of your nodes, ways, or relations.<br>The conflict is "
+"caused by the <strong>{0}</strong> with id <strong>{1}</strong>,<br>the "
+"server has version {2}, your version is {3}.<br><br>Click "
+"<strong>{4}</strong> to synchronize the conflicting primitive only.<br>Click "
+"<strong>{5}</strong> to synchronize the entire local dataset with the "
+"server.<br>Click <strong>{6}</strong> to abort and continue "
+"editing.<br></html>"
+msgstr ""
+
+msgid ""
+"<html>Uploading <strong>failed</strong> because the server has a newer "
+"version of one<br>of your nodes, ways, or relations.<br><br>Click "
+"<strong>{0}</strong> to synchronize the entire local dataset with the "
+"server.<br>Click <strong>{1}</strong> to abort and continue "
+"editing.<br></html>"
+msgstr ""
+
+msgid ""
+"<html>Uploading <strong>failed</strong> because you have been "
+"using<br>changeset {0} which was already closed at {1}.<br>Please upload "
+"again with a new or an existing open changeset.</html>"
+msgstr ""
+
+msgid "Changeset closed"
+msgstr ""
+
+msgid "Prepare conflict resolution"
+msgstr ""
+
+msgid "Click to download all referring objects for {0}"
+msgstr ""
+
+msgid "Click to cancel and to resume editing the map"
+msgstr ""
+
+msgid ""
+"Click <strong>{0}</strong> to load them now.<br>If necessary JOSM will "
+"create conflicts which you can resolve in the Conflict Resolution Dialog."
+msgstr ""
+
+msgid "Object still in use"
+msgstr ""
+
+msgid "Error header \"{0}\" did not match with an expected pattern"
+msgstr ""
+
+msgid "Upload"
+msgstr ""
+
+msgid ""
+"<html>Select which actions to perform for this layer, if you click the "
+"leftmost button.<br/>Check \"upload\" to upload the changes to the OSM "
+"server.<br/>Check \"Save\" to save the layer to the file specified on the "
+"left.</html>"
+msgstr ""
+
+msgid "Provide a brief comment for the changes you are uploading:"
+msgstr ""
+
+msgid "Enter an upload comment"
+msgstr ""
+
+msgid "Specify the data source for the changes"
+msgstr ""
+
+msgid "obtain from current layers"
+msgstr ""
+
+msgid "Enter a source"
+msgstr ""
+
+msgid "Changeset id:"
+msgstr ""
+
+msgid "Created at:"
+msgstr ""
+
+msgid "Changeset comment:"
+msgstr ""
+
+msgid "No open changeset"
+msgstr ""
+
+msgid ""
+"Please decide what changeset the data is uploaded to and whether to close "
+"the changeset after the next upload."
+msgstr ""
+
+msgid "Upload to a new changeset"
+msgstr ""
+
+msgid "Open a new changeset and use it in the next upload"
+msgstr ""
+
+msgid "Upload to an existing changeset"
+msgstr ""
+
+msgid "Upload data to an already existing and open changeset"
+msgstr ""
+
+msgid "Select an open changeset"
+msgstr ""
+
+msgid "Close changeset after upload"
+msgstr ""
+
+msgid "Select to close the changeset after the next upload"
+msgstr ""
+
+msgid "Load the list of your open changesets from the server"
+msgstr ""
+
+msgid "Close the currently selected open changeset"
+msgstr ""
+
+msgid "<html>Please select the changesets you want to close</html>"
+msgstr ""
+
+msgid "Open changesets"
+msgstr ""
+
+msgid "Close changesets"
+msgstr ""
+
+msgid "Close the selected open changesets"
+msgstr ""
+
+msgid "Cancel closing of changesets"
+msgstr ""
+
+msgid "Closing changeset"
+msgstr ""
+
+msgid "Closing changeset {0}"
+msgstr ""
+
+msgid ""
+"Failed to put Credential Dialog always on top. Caught security exception."
+msgstr ""
+
+msgid "Enter credentials for OSM API"
+msgstr ""
+
+msgid "Enter credentials for host"
+msgstr ""
+
+msgid "Enter credentials for HTTP proxy"
+msgstr ""
+
+msgid "Password"
+msgstr ""
+
+msgid "Warning: The password is transferred unencrypted."
+msgstr ""
+
+msgid "Please enter the user name of your OSM account"
+msgstr ""
+
+msgid "Please enter the password of your OSM account"
+msgstr ""
+
+msgid ""
+"Authenticating at the OSM API ''{0}'' failed. Please enter a valid username "
+"and a valid password."
+msgstr ""
+
+msgid "Please enter the user name of your account"
+msgstr ""
+
+msgid "Please enter the password of your account"
+msgstr ""
+
+msgid ""
+"Authenticating at the host ''{0}'' failed. Please enter a valid username and "
+"a valid password."
+msgstr ""
+
+msgid "Please enter the user name for authenticating at your proxy server"
+msgstr ""
+
+msgid "Please enter the password for authenticating at your proxy server"
+msgstr ""
+
+msgid ""
+"Authenticating at the HTTP proxy ''{0}'' failed. Please enter a valid "
+"username and a valid password."
+msgstr ""
+
+msgid ""
+"Warning: depending on the authentication method the proxy server uses the "
+"password may be transferred unencrypted."
+msgstr ""
+
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with the supplied username and password"
+msgstr ""
+
+msgid "Cancel authentication"
+msgstr ""
+
+msgid "Downloading file"
+msgstr ""
+
+msgid "Downloading File {0}: {1} bytes..."
+msgstr ""
+
+msgid "Download finished"
+msgstr ""
+
+msgid "Unpacking {0} into {1}"
+msgstr ""
+
+msgid ""
+"Cannot download file ''{0}''. Its download link ''{1}'' is not a valid URL. "
+"Skipping download."
+msgstr ""
+
+msgid ""
+"Could not retrieve the list of your open changesets because<br>JOSM does not "
+"know your identity.<br>You have either chosen to work anonymously or you are "
+"not entitled<br>to know the identity of the user on whose behalf you are "
+"working."
+msgstr ""
+
+msgid "Missing user identity"
+msgstr ""
+
+msgid ""
+"Failed to retrieve user infos for the current JOSM user. Exception was: {0}"
+msgstr ""
+
+msgid "Download objects"
+msgstr ""
+
+msgid "Initializing nodes to download ..."
+msgstr ""
+
+msgid "Object could not be downloaded"
+msgid_plural "Some objects could not be downloaded"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "One object could not be downloaded.<br>"
+msgid_plural "{0} objects could not be downloaded.<br>"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"The server replied with response code 404.<br>This usually means, the server "
+"does not know an object with the requested id."
+msgstr ""
+
+msgid "missing objects:"
+msgstr ""
+
+msgid "One downloaded object is deleted."
+msgid_plural "{0} downloaded objects are deleted."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"Either edit the path manually in the text field or click the \"...\" button "
+"to open a file chooser."
+msgstr ""
+
+msgid "The bold text is the name of the layer."
+msgstr ""
+
+msgid "Click here to choose save path"
+msgstr ""
+
+msgid "Layer ''{0}'' is not backed by a file"
+msgstr ""
+
+msgid "File ''{0}'' is not writable. Please enter another file name."
+msgstr ""
+
+msgid "Click cell to change the file path."
+msgstr ""
+
+msgid "Launch a file chooser to select a file"
+msgstr ""
+
+msgid "Select filename"
+msgstr ""
+
+msgid "Open Recent"
+msgstr ""
+
+msgid "List of recently opened files"
+msgstr ""
+
+msgid "Clear"
+msgstr ""
+
+msgid "Clear the list of recently opened files"
+msgstr ""
+
+msgid "Saving layer to ''{0}'' ..."
+msgstr ""
+
+msgid "Unsaved changes - Save/Upload before exiting?"
+msgstr ""
+
+msgid "Unsaved changes - Save/Upload before deleting?"
+msgstr ""
+
+msgid "Uploading and saving modified layers ..."
+msgstr ""
+
+msgid ""
+"<html>{0} layer has unresolved conflicts.<br>Either resolve them first or "
+"discard the modifications.<br>Layer with conflicts:</html>"
+msgid_plural ""
+"<html>{0} layers have unresolved conflicts.<br>Either resolve them first or "
+"discard the modifications.<br>Layers with conflicts:</html>"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Unsaved data and conflicts"
+msgstr ""
+
+msgid ""
+"<html>{0} layer needs saving but has no associated file.<br>Either select a "
+"file for this layer or discard the changes.<br>Layer without a file:</html>"
+msgid_plural ""
+"<html>{0} layers need saving but have no associated file.<br>Either select a "
+"file for each of them or discard the changes.<br>Layers without a "
+"file:</html>"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Unsaved data and missing associated file"
+msgstr ""
+
+msgid ""
+"<html>{0} layer needs saving but has an associated file<br>which cannot be "
+"written.<br>Either select another file for this layer or discard the "
+"changes.<br>Layer with a non-writable file:</html>"
+msgid_plural ""
+"<html>{0} layers need saving but have associated files<br>which cannot be "
+"written.<br>Either select another file for each of them or discard the "
+"changes.<br>Layers with non-writable files:</html>"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Unsaved data non-writable files"
+msgstr ""
+
+msgid "Close this dialog and resume editing in JOSM"
+msgstr ""
+
+msgid "Exit now!"
+msgstr ""
+
+msgid "Exit JOSM without saving. Unsaved changes are lost."
+msgstr ""
+
+msgid "Delete now!"
+msgstr ""
+
+msgid "Delete layers without saving. Unsaved changes are lost."
+msgstr ""
+
+msgid "Perform actions before exiting"
+msgstr ""
+
+msgid "Exit JOSM with saving. Unsaved changes are uploaded and/or saved."
+msgstr ""
+
+msgid "Perform actions before deleting"
+msgstr ""
+
+msgid "Save/Upload layers before deleting. Unsaved changes are not lost."
+msgstr ""
+
+msgid "Preparing layer ''{0}'' for upload ..."
+msgstr ""
+
+msgid ""
+"<html>An upload and/or save operation of one layer with modifications<br>was "
+"canceled or has failed.</html>"
+msgid_plural ""
+"<html>Upload and/or save operations of {0} layers with modifications<br>were "
+"canceled or have failed.</html>"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Incomplete upload and/or save"
+msgstr ""
+
+msgid "should be uploaded"
+msgstr ""
+
+msgid "should be saved"
+msgstr ""
+
+msgid ""
+"Layer ''{0}'' has modifications which should be uploaded to the server."
+msgstr ""
+
+msgid "Layer ''{0}'' has modifications which are discouraged to be uploaded."
+msgstr ""
+
+msgid "Layer ''{0}'' has no modifications to be uploaded."
+msgstr ""
+
+msgid ""
+"Layer ''{0}'' has modifications which should be saved to its associated file "
+"''{1}''."
+msgstr ""
+
+msgid "Layer ''{0}'' has no modifications to be saved."
+msgstr ""
+
+msgid "Layer Name and File Path"
+msgstr ""
+
+msgid "Recommended Actions"
+msgstr ""
+
+msgid "Actions To Take"
+msgstr ""
+
+msgid "Update objects"
+msgstr ""
+
+msgid "Initializing nodes to update ..."
+msgstr ""
+
+msgid "Initializing ways to update ..."
+msgstr ""
+
+msgid "Initializing relations to update ..."
+msgstr ""
+
+msgid "Settings"
+msgstr ""
+
+msgid "Decide how to upload the data and which changeset to use"
+msgstr ""
+
+msgid "Tags of new changeset"
+msgstr ""
+
+msgid "Apply tags to the changeset data is uploaded to"
+msgstr ""
+
+msgid "Manage open changesets and select a changeset to upload to"
+msgstr ""
+
+msgid "Configure advanced settings"
+msgstr ""
+
+msgid "Upload to ''{0}''"
+msgstr ""
+
+msgid "Upload Changes"
+msgstr ""
+
+msgid "Upload the changed primitives"
+msgstr ""
+
+msgid "Please revise upload comment"
+msgstr ""
+
+msgid ""
+"Your upload comment is <i>empty</i>, or <i>very short</i>.<br /><br />This "
+"is technically allowed, but please consider that many users who are<br "
+"/>watching changes in their area depend on meaningful changeset comments<br "
+"/>to understand what is going on!<br /><br />If you spend a minute now to "
+"explain your change, you will make life<br />easier for many other mappers."
+msgstr ""
+
+msgid "Please specify a changeset source"
+msgstr ""
+
+msgid ""
+"You did not specify a source for your changes.<br />It is technically "
+"allowed, but this information helps<br />other users to understand the "
+"origins of the data.<br /><br />If you spend a minute now to explain your "
+"change, you will make life<br />easier for many other mappers."
+msgstr ""
+
+msgid "Revise"
+msgstr ""
+
+msgid "Continue as is"
+msgstr ""
+
+msgid "Return to the previous dialog to enter a more descriptive comment"
+msgstr ""
+
+msgid "Cancel and return to the previous dialog"
+msgstr ""
+
+msgid "Please enter a valid chunk size first"
+msgstr ""
+
+msgid "Illegal chunk size"
+msgstr ""
+
+msgid "{0}={1}"
+msgstr ""
+
+msgid ""
+"<html>The following changeset tag contains an empty "
+"key/value:<br>{0}<br>Continue?</html>"
+msgid_plural ""
+"<html>The following changeset tags contain an empty "
+"key/value:<br>{0}<br>Continue?</html>"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Empty metadata"
+msgstr ""
+
+msgid "Cancel the upload and resume editing"
+msgstr ""
+
+msgid "Tags of changeset {0}"
+msgstr ""
+
+msgid ""
+"Object ''{0}'' is already deleted on the server. Skipping this object and "
+"retrying to upload."
+msgstr ""
+
+msgid "Preparing objects to upload ..."
+msgstr ""
+
+msgid "Objects are uploaded to a <strong>new changeset</strong>."
+msgstr ""
+
+msgid ""
+"Objects are uploaded to the <strong>open changeset</strong> {0} with upload "
+"comment ''{1}''."
+msgstr ""
+
+msgid ""
+"The changeset is going to be <strong>closed</strong> after this upload"
+msgstr ""
+
+msgid "The changeset is <strong>left open</strong> after this upload"
+msgstr ""
+
+msgid "configure changeset"
+msgstr ""
+
+msgid "Uploading <strong>{0} object</strong> to <strong>1 changeset</strong>"
+msgid_plural ""
+"Uploading <strong>{0} objects</strong> to <strong>1 changeset</strong>"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"Uploading <strong>{0} object</strong> to <strong>1 changeset</strong> using "
+"<strong>1 request</strong>"
+msgid_plural ""
+"Uploading <strong>{0} objects</strong> to <strong>1 changeset</strong> using "
+"<strong>1 request</strong>"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"Uploading <strong>{0} objects</strong> to <strong>1 changeset</strong> using "
+"<strong>{1} requests</strong>"
+msgstr ""
+
+msgid "advanced configuration"
+msgstr ""
+
+msgid ""
+"{0} objects exceed the max. allowed {1} objects in a changeset on the server "
+"''{2}''. Please <a href=\"urn:advanced-configuration\">configure</a> how to "
+"proceed with <strong>multiple changesets</strong>"
+msgstr ""
+
+msgid ""
+"Uploading <strong>{0} objects</strong> to <strong>multiple "
+"changesets</strong> using <strong>{1} requests</strong>"
+msgstr ""
+
+msgid "Uploading data for layer ''{0}''"
+msgstr ""
+
+msgid "Continue uploading"
+msgstr ""
+
+msgid "Click to continue uploading to additional new changesets"
+msgstr ""
+
+msgid "Go back to Upload Dialog"
+msgstr ""
+
+msgid "Click to return to the Upload Dialog"
+msgstr ""
+
+msgid "Abort"
+msgstr ""
+
+msgid "Click to abort uploading"
+msgstr ""
+
+msgid ""
+"The server reported that the current changeset was closed.<br>This is most "
+"likely because the changesets size exceeded the max. size<br>of {0} objects "
+"on the server ''{1}''."
+msgstr ""
+
+msgid "There is {0} object left to upload."
+msgid_plural "There are {0} objects left to upload."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"Click ''<strong>{0}</strong>'' to continue uploading to additional new "
+"changesets.<br>Click ''<strong>{1}</strong>'' to return to the upload "
+"dialog.<br>Click ''<strong>{2}</strong>'' to abort uploading and return to "
+"map editing.<br>"
+msgstr ""
+
+msgid "Changeset is full"
+msgstr ""
+
+msgid "Node ''{0}'' is already deleted. Skipping object in upload."
+msgstr ""
+
+msgid "Way ''{0}'' is already deleted. Skipping object in upload."
+msgstr ""
+
+msgid "Relation ''{0}'' is already deleted. Skipping object in upload."
+msgstr ""
+
+msgid "Object ''{0}'' is already deleted. Skipping object in upload."
+msgstr ""
+
+msgid "Uploading {0} object..."
+msgid_plural "Uploading {0} objects..."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"Ignoring caught exception because upload is canceled. Exception is: {0}"
+msgstr ""
+
+msgid "Upload successful!"
+msgstr ""
+
+msgid ""
+"<html>Mark modified objects <strong>from the current selection</strong> to "
+"be uploaded to the server.</html>"
+msgstr ""
+
+msgid ""
+"<html>Mark <strong>locally deleted objects</strong> to be deleted on the "
+"server.</html>"
+msgstr ""
+
+msgid "Select objects to upload"
+msgstr ""
+
+msgid "Cancel uploading"
+msgstr ""
+
+msgid "Unexpected value for key ''{0}'' in preferences, got ''{1}''"
+msgstr ""
+
+msgid "Please select the upload strategy:"
+msgstr ""
+
+msgid "Upload data in one request"
+msgstr ""
+
+msgid "Upload data in chunks of objects. Chunk size: "
+msgstr ""
+
+msgid "Upload each object individually"
+msgstr ""
+
+msgid ""
+"<html>There are <strong>multiple changesets</strong> necessary in order to "
+"upload {0} objects. Which strategy do you want to use?</html>"
+msgstr ""
+
+msgid "Fill up one changeset and return to the Upload Dialog"
+msgstr ""
+
+msgid "Open and use as many new changesets as necessary"
+msgstr ""
+
+msgid "Upload in one request not possible (too many objects to upload)"
+msgstr ""
+
+msgid ""
+"<html>Cannot upload {0} objects in one request because the<br>max. changeset "
+"size {1} on server ''{2}'' is exceeded.</html>"
+msgstr ""
+
+msgid "(1 request)"
+msgstr ""
+
+msgid "(# requests unknown)"
+msgstr ""
+
+msgid "({0} request)"
+msgid_plural "({0} requests)"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Illegal chunk size <= 0. Please enter an integer > 1"
+msgstr ""
+
+msgid "Chunk size {0} exceeds max. changeset size {1} for server ''{2}''"
+msgstr ""
+
+msgid "Please enter an integer > 1"
+msgstr ""
+
+msgid "Value ''{0}'' is not a number. Please enter an integer > 1"
+msgstr ""
+
+msgid "Objects to add:"
+msgstr ""
+
+msgid "Objects to modify:"
+msgstr ""
+
+msgid "Objects to delete:"
+msgstr ""
+
+msgid "{0} object to add:"
+msgid_plural "{0} objects to add:"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "{0} object to modify:"
+msgid_plural "{0} objects to modify:"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "{0} object to delete:"
+msgid_plural "{0} objects to delete:"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr ""
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
+msgid "Customize Color"
+msgstr ""
+
+msgid "Default"
+msgstr ""
+
+msgid "Choose a color"
+msgstr ""
+
+msgid "Name: {0}"
+msgstr ""
+
+msgid "Description: {0}"
+msgstr ""
+
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Description"
+msgstr ""
+
+msgid "Timespan"
+msgstr ""
+
+msgid "Length"
+msgstr ""
+
+msgid "Length: {0}"
+msgstr ""
+
+msgid "{0} route, "
+msgid_plural "{0} routes, "
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "{0} waypoint"
+msgid_plural "{0} waypoints"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "{0} track, "
+msgid_plural "{0} tracks, "
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Save GPX file"
+msgstr ""
+
+msgid "Imagery fade"
+msgstr ""
+
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
+msgid "ERROR"
+msgstr ""
+
+msgid "Next marker"
+msgstr ""
+
+msgid "Jump to next marker"
+msgstr ""
+
+msgid "Previous marker"
+msgstr ""
+
+msgid "Jump to previous marker"
+msgstr ""
+
+msgid "All projections are supported"
+msgstr ""
+
+msgid ""
+"The layer {0} does not support the new projection {1}.\n"
+"Supported projections are: {2}\n"
+"Change the projection again or remove the layer."
+msgstr ""
+
+msgid "Save Layer"
+msgstr ""
+
+msgid "Note"
+msgstr ""
+
+msgid "Notes layer"
+msgstr ""
+
+msgid "Total notes:"
+msgstr ""
+
+msgid "Changes need uploading?"
+msgstr ""
+
+msgid "Data Layer {0}"
+msgstr ""
+
+msgid "outside downloaded area"
+msgstr ""
+
+msgid "Merging layers"
+msgstr ""
+
+msgid "{0} deleted"
+msgid_plural "{0} deleted"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "{0} consists of:"
+msgstr ""
+
+msgid "unset"
+msgstr ""
+
+msgid "API version: {0}"
+msgstr ""
+
+msgid "Upload is discouraged"
+msgstr ""
+
+msgid "Convert to GPX layer"
+msgstr ""
+
+msgid "Converted from: {0}"
+msgstr ""
+
+msgid "Dataset consistency test"
+msgstr ""
+
+msgid "No problems found"
+msgstr ""
+
+msgid "Following problems found:"
+msgstr ""
+
+msgid "Empty document"
+msgstr ""
+
+msgid "Save anyway"
+msgstr ""
+
+msgid "The document contains no data."
+msgstr ""
+
+msgid "Conflicts"
+msgstr ""
+
+msgid "Reject Conflicts and Save"
+msgstr ""
+
+msgid ""
+"There are unresolved conflicts. Conflicts will not be saved and handled as "
+"if you rejected all. Continue?"
+msgstr ""
+
+msgid "Save OSM file"
+msgstr ""
+
+msgid "EPSG:4326 and Mercator projection are supported"
+msgstr ""
+
+msgid "Validation errors"
+msgstr ""
+
+msgid "No validation errors"
+msgstr ""
+
+msgid "Set WMS Bookmark"
+msgstr ""
+
+msgid ""
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
+msgstr ""
+
+msgid "Correlate to GPX"
+msgstr ""
+
+msgid "Invalid timezone"
+msgstr ""
+
+msgid "Invalid offset"
+msgstr ""
+
+msgid "Correlate images with GPX track"
+msgstr ""
+
+msgid "Try Again"
+msgstr ""
+
+msgid "No images could be matched!"
+msgstr ""
+
+msgid "GPX Files (*.gpx *.gpx.gz)"
+msgstr ""
+
+msgid "File {0} is loaded yet under the name \"{1}\""
+msgstr ""
+
+msgid "Error while parsing {0}"
+msgstr ""
+
+msgid "Could not read \"{0}\""
+msgstr ""
+
+msgid ""
+"<html>Take a photo of your GPS receiver while it displays the "
+"time.<br>Display that photo here.<br>And then, simply capture the time you "
+"read on the photo and select a timezone<hr></html>"
+msgstr ""
+
+msgid "Photo time (from exif):"
+msgstr ""
+
+msgid "Gps time (read from the above photo): "
+msgstr ""
+
+msgid "I am in the timezone of: "
+msgstr ""
+
+msgid "No date"
+msgstr ""
+
+msgid "Open another photo"
+msgstr ""
+
+msgid "Synchronize time from a photo of the GPS receiver"
+msgstr ""
+
+msgid ""
+"Error while parsing the date.\n"
+"Please use the requested format"
+msgstr ""
+
+msgid "Invalid date"
+msgstr ""
+
+msgid "<No GPX track loaded yet>"
+msgstr ""
+
+msgid "GPX track: "
+msgstr ""
+
+msgid "Open another GPX trace"
+msgstr ""
+
+msgid ""
+"<html>Use photo of an accurate clock,<br>e.g. GPS receiver display</html>"
+msgstr ""
+
+msgid "Auto-Guess"
+msgstr ""
+
+msgid "Matches first photo with first gpx point"
+msgstr ""
+
+msgid "Manual adjust"
+msgstr ""
+
+msgid "Override position for: "
+msgstr ""
+
+msgid "Images with geo location in exif data ({0}/{1})"
+msgstr ""
+
+msgid "Images that are already tagged ({0}/{1})"
+msgstr ""
+
+msgid "Show Thumbnail images on the map"
+msgstr ""
+
+msgid "Timezone: "
+msgstr ""
+
+msgid "Offset:"
+msgstr ""
+
+msgid "Correlate"
+msgstr ""
+
+msgid "No gpx selected"
+msgstr ""
+
+msgid "<html>Matched <b>{0}</b> of <b>{1}</b> photo to GPX track.</html>"
+msgid_plural ""
+"<html>Matched <b>{0}</b> of <b>{1}</b> photos to GPX track.</html>"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Timezone: {0}"
+msgstr ""
+
+msgid "Minutes: {0}"
+msgstr ""
+
+msgid "Seconds: {0}"
+msgstr ""
+
+msgid "(Time difference of {0} day)"
+msgid_plural "Time difference of {0} days"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"An error occurred while trying to match the photos to the GPX track. You can "
+"adjust the sliders to manually match the photos."
+msgstr ""
+
+msgid "Matching photos to track failed"
+msgstr ""
+
+msgid "Adjust timezone and offset"
+msgstr ""
+
+msgid "The selected photos do not contain time information."
+msgstr ""
+
+msgid "Photos do not contain time information"
+msgstr ""
+
+msgid ""
+"The selected GPX track does not contain timestamps. Please select another "
+"one."
+msgstr ""
+
+msgid "GPX Track has no time information"
+msgstr ""
+
+msgid "You should select a GPX track"
+msgstr ""
+
+msgid "No selected GPX track"
+msgstr ""
+
+msgid ""
+"Error while parsing timezone.\n"
+"Expected format: {0}"
+msgstr ""
+
+msgid ""
+"Error while parsing offset.\n"
+"Expected format: {0}"
+msgstr ""
+
+msgid "Extracting GPS locations from EXIF"
+msgstr ""
+
+msgid "Starting directory scan"
+msgstr ""
+
+msgid "Read photos..."
+msgstr ""
+
+msgid "Reading {0}..."
+msgstr ""
+
+msgid "Unable to get canonical path for directory {0}\n"
+msgstr ""
+
+msgid "Scanning directory {0}"
+msgstr ""
+
+msgid "Error while getting files from directory {0}\n"
+msgstr ""
+
+msgid "One of the selected files was null"
+msgstr ""
+
+msgid "Geotagged Images"
+msgstr ""
+
+msgid "{0} image loaded."
+msgid_plural "{0} images loaded."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "{0} was found to be GPS tagged."
+msgid_plural "{0} were found to be GPS tagged."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "{0} has updated GPS data."
+msgid_plural "{0} have updated GPS data."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete image file from disk"
+msgstr ""
+
+msgid ""
+"<html><h3>Delete the file {0} from disk?<p>The image file will be "
+"permanently lost!</h3></html>"
+msgstr ""
+
+msgid "Image file could not be deleted."
+msgstr ""
+
+msgid "No image"
+msgstr ""
+
+msgid "Loading {0}"
+msgstr ""
+
+msgid "Error on file {0}"
+msgstr ""
+
+msgid "Display geotagged images"
+msgstr ""
+
+msgid "Previous"
+msgstr ""
+
+msgid "Show previous Image"
+msgstr ""
+
+msgid "Geoimage: {0}"
+msgstr ""
+
+msgid "Remove photo from layer"
+msgstr ""
+
+msgid "Delete File from disk"
+msgstr ""
+
+msgid "Copy image path"
+msgstr ""
+
+msgid "Next"
+msgstr ""
+
+msgid "Show next Image"
+msgstr ""
+
+msgid "Show first Image"
+msgstr ""
+
+msgid "Show last Image"
+msgstr ""
+
+msgid "Center view"
+msgstr ""
+
+msgid "Zoom best fit and 1:1"
+msgstr ""
+
+msgid "Move dialog to the side pane"
+msgstr ""
+
+msgid ""
+"\n"
+"Altitude: {0} m"
+msgstr ""
+
+msgid ""
+"\n"
+"Speed: {0} km/h"
+msgstr ""
+
+msgid ""
+"\n"
+"Direction {0}°"
+msgstr ""
+
+msgid ""
+"\n"
+"EXIF time: {0}"
+msgstr ""
+
+msgid ""
+"\n"
+"GPS time: {0}"
+msgstr ""
+
+msgid "Show thumbnails"
+msgstr ""
+
+msgid "Show image thumbnails instead of icons."
+msgstr ""
+
+msgid "Choose visible tracks"
+msgstr ""
+
+msgid "Select by date"
+msgstr ""
+
+msgid ""
+"<html>Select all tracks that you want to be displayed. You can drag select a "
+"range of tracks or use CTRL+Click to select specific ones. The map is "
+"updated live in the background. Open the URLs by double clicking them.</html>"
+msgstr ""
+
+msgid "Set track visibility for {0}"
+msgstr ""
+
+msgid "Show all"
+msgstr ""
+
+msgid "Show selected only"
+msgstr ""
+
+msgid "Convert to data layer"
+msgstr ""
+
+msgid ""
+"<html>Upload of unprocessed GPS data as map data is considered "
+"harmful.<br>If you want to upload traces, look here:</html>"
+msgstr ""
+
+msgid "Customize track drawing"
+msgstr ""
+
+msgid "From"
+msgstr ""
+
+msgid "To"
+msgstr ""
+
+msgid "No timestamp"
+msgstr ""
+
+msgid "Select to download OSM data."
+msgstr ""
+
+msgid "Select to download GPS traces."
+msgstr ""
+
+msgid "Download everything within:"
+msgstr ""
+
+msgid "meters"
+msgstr ""
+
+msgid "Maximum area per request:"
+msgstr ""
+
+msgid "Download near:"
+msgstr ""
+
+msgid "track only"
+msgstr ""
+
+msgid "waypoints only"
+msgstr ""
+
+msgid "track and waypoints"
+msgstr ""
+
+msgid "Click to download"
+msgstr ""
+
+msgid "Click to cancel"
+msgstr ""
+
+msgid "Download from OSM along this track"
+msgstr ""
+
+msgid "Calculating Download Area"
+msgstr ""
+
+msgid "Precache imagery tiles along this track"
+msgstr ""
+
+msgid "Precaching WMS"
+msgstr ""
+
+msgid "Please select the imagery layer."
+msgstr ""
+
+msgid "Select imagery layer"
+msgstr ""
+
+msgid "There are no imagery layers."
+msgstr ""
+
+msgid "No imagery layers"
+msgstr ""
+
+msgid "Velocity, km/h"
+msgstr ""
+
+msgid "HDOP, m"
+msgstr ""
+
+msgid "Time"
+msgstr ""
+
+msgid "Direction"
+msgstr ""
+
+msgid "gps point"
+msgstr ""
+
+msgid "Import Audio"
+msgstr ""
+
+msgid ""
+"<html>The data in the GPX layer ''{0}'' has been downloaded from the "
+"server.<br>Because its way points do not include a timestamp we cannot "
+"correlate them with audio data.</html>"
+msgstr ""
+
+msgid "Import not possible"
+msgstr ""
+
+msgid "Wave Audio files (*.wav)"
+msgstr ""
+
+msgid "Audio markers from {0}"
+msgstr ""
+
+msgid "No GPX track available in layer to associate audio with."
+msgstr ""
+
+msgid ""
+"Some waypoints with timestamps from before the start of the track or after "
+"the end were omitted or moved to the start."
+msgstr ""
+
+msgid ""
+"Some waypoints which were too far from the track to sensibly estimate their "
+"time were omitted."
+msgstr ""
+
+msgid "Import images"
+msgstr ""
+
+msgid ""
+"<html>The data in the GPX layer ''{0}'' has been downloaded from the "
+"server.<br>Because its way points do not include a timestamp we cannot "
+"correlate them with images.</html>"
+msgstr ""
+
+msgid "Markers From Named Points"
+msgstr ""
+
+msgid "Named Trackpoints from {0}"
+msgstr ""
+
+msgid "gps marker"
+msgstr ""
+
+msgid "marker"
+msgid_plural "markers"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "{0} consists of {1} marker"
+msgid_plural "{0} consists of {1} markers"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "No existing audio markers in this layer to offset from."
+msgstr ""
+
+msgid "Show Text/Icons"
+msgstr ""
+
+msgid "Toggle visible state of the marker text and icons."
+msgstr ""
+
+msgid "Synchronize Audio"
+msgstr ""
+
+msgid ""
+"You need to pause audio at the moment when you hear your synchronization cue."
+msgstr ""
+
+msgid "Audio synchronized at point {0}."
+msgstr ""
+
+msgid "Unable to synchronize in layer being played."
+msgstr ""
+
+msgid "Make Audio Marker at Play Head"
+msgstr ""
+
+msgid ""
+"You need to have paused audio at the point on the track where you want the "
+"marker."
+msgstr ""
+
+msgid ""
+"You need to drag the play head near to the GPX track whose associated sound "
+"track you were playing (after the first marker)."
+msgstr ""
+
+msgid ""
+"You need to SHIFT-drag the play head onto an audio marker or onto the track "
+"point where you want to synchronize."
+msgstr ""
+
+msgid "Unable to create new audio marker."
+msgstr ""
+
+msgid "There was an error while trying to display the URL for this marker"
+msgstr ""
+
+msgid "(URL was: "
+msgstr ""
+
+msgid "Select the map painting styles"
+msgstr ""
+
+msgid "Failed to load Mappaint styles from ''{0}''. Exception was: {1}"
+msgstr ""
+
+msgid "loading style ''{0}''..."
+msgstr ""
+
+msgid ""
+"There was an error when loading this style. Select ''Info'' from the right "
+"click menu for details."
+msgid_plural ""
+"There were {0} errors when loading this style. Select ''Info'' from the "
+"right click menu for details."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
+msgstr ""
+
+msgid ""
+"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
+"''{2}'' instead."
+msgstr ""
+
+msgid "Illegal dash pattern, values must be positive"
+msgstr ""
+
+msgid "Illegal dash pattern, at least one value must be > 0"
+msgstr ""
+
+msgid ""
+"Failed to parse Mappaint styles from ''{0}''. Error was: [{1}:{2}] {3}"
+msgstr ""
+
+msgid "Access Token Key:"
+msgstr ""
+
+msgid "Access Token Secret:"
+msgstr ""
+
+msgid "Save Access Token in preferences"
+msgstr ""
+
+msgid ""
+"<html>Select to save the Access Token in the JOSM preferences.<br>Unselect "
+"to use the Access Token in this JOSM session only.</html>"
+msgstr ""
+
+msgid "Use default settings"
+msgstr ""
+
+msgid "Consumer Key:"
+msgstr ""
+
+msgid "Consumer Secret:"
+msgstr ""
+
+msgid "Request Token URL:"
+msgstr ""
+
+msgid "Access Token URL:"
+msgstr ""
+
+msgid "Authorize URL:"
+msgstr ""
+
+msgid "Click to reset the OAuth settings to default values"
+msgstr ""
+
+msgid "Click to abort resetting to the OAuth default values"
+msgstr ""
+
+msgid ""
+"<html>JOSM is about to reset the OAuth settings to default values.<br>The "
+"current custom settings are not saved.</html>"
+msgstr ""
+
+msgid "Overwrite custom OAuth settings?"
+msgstr ""
+
+msgid "Fully automatic"
+msgstr ""
+
+msgid "Semi-automatic"
+msgstr ""
+
+msgid "Manual"
+msgstr ""
+
+msgid ""
+"<html>Run a fully automatic procedure to get an access token from the OSM "
+"website.<br>JOSM accesses the OSM website on behalf of the JOSM user and "
+"fully<br>automatically authorizes the user and retrieves an Access "
+"Token.</html>"
+msgstr ""
+
+msgid ""
+"<html>Run a semi-automatic procedure to get an access token from the OSM "
+"website.<br>JOSM submits the standards OAuth requests to get a Request Token "
+"and an<br>Access Token. It dispatches the user to the OSM website in an "
+"external browser<br>to authenticate itself and to accept the request token "
+"submitted by JOSM.</html>"
+msgstr ""
+
+msgid ""
+"<html>Enter an Access Token manually if it was generated and retrieved "
+"outside<br>of JOSM.</html>"
+msgstr ""
+
+msgid ""
+"Please enter your OSM user name and password. The password will "
+"<strong>not</strong> be saved in clear text in the JOSM preferences and it "
+"will be submitted to the OSM server <strong>only once</strong>. Subsequent "
+"data upload requests don''t use your password any more."
+msgstr ""
+
+msgid "Username: "
+msgstr ""
+
+msgid "Password: "
+msgstr ""
+
+msgid ""
+"<strong>Warning:</strong> JOSM does login <strong>once</strong> using a "
+"secure connection."
+msgstr ""
+
+msgid "Granted rights"
+msgstr ""
+
+msgid "Advanced OAuth properties"
+msgstr ""
+
+msgid "Accept Access Token"
+msgstr ""
+
+msgid ""
+"<html>You have successfully retrieved an OAuth Access Token from the OSM "
+"website. Click on <strong>{0}</strong> to accept the token. JOSM will use it "
+"in subsequent requests to gain access to the OSM API.</html>"
+msgstr ""
+
+msgid "Authorize now"
+msgstr ""
+
+msgid "Click to redirect you to the authorization form on the JOSM web site"
+msgstr ""
+
+msgid "Back"
+msgstr ""
+
+msgid "Run the automatic authorization steps again"
+msgstr ""
+
+msgid "Test Access Token"
+msgstr ""
+
+msgid "Please enter your OSM user name"
+msgstr ""
+
+msgid "The user name cannot be empty. Please enter your OSM user name"
+msgstr ""
+
+msgid "Please enter your OSM password"
+msgstr ""
+
+msgid "The password cannot be empty. Please enter your OSM password"
+msgstr ""
+
+msgid "Authorize JOSM to access the OSM API"
+msgstr ""
+
+msgid ""
+"<html>The automatic process for retrieving an OAuth Access Token<br>from the "
+"OSM server failed.<br><br>Please try again or choose another kind of "
+"authorization process,<br>i.e. semi-automatic or manual authorization.</html>"
+msgstr ""
+
+msgid "OAuth authorization failed"
+msgstr ""
+
+msgid ""
+"<html>The automatic process for retrieving an OAuth Access Token<br>from the "
+"OSM server failed because JOSM was not able to build<br>a valid login URL "
+"from the OAuth Authorize Endpoint URL ''{0}''.<br><br>Please check your "
+"advanced setting and try again.</html>"
+msgstr ""
+
+msgid ""
+"<html>The automatic process for retrieving an OAuth Access Token<br>from the "
+"OSM server failed. JOSM failed to log into {0}<br>for user "
+"{1}.<br><br>Please check username and password and try again.</html>"
+msgstr ""
+
+msgid ""
+"Please enter an OAuth Access Token which is authorized to access the OSM "
+"server ''{0}''."
+msgstr ""
+
+msgid "Access Token"
+msgstr ""
+
+msgid "Advanced OAuth parameters"
+msgstr ""
+
+msgid "Enter the OAuth Access Token"
+msgstr ""
+
+msgid "Enter advanced OAuth properties"
+msgstr ""
+
+msgid ""
+"<html><body>Please enter an OAuth Access Token which is authorized to access "
+"the OSM server ''{0}''.</body></html>"
+msgstr ""
+
+msgid "Please enter an Access Token Key"
+msgstr ""
+
+msgid ""
+"The Access Token Key must not be empty. Please enter an Access Token Key"
+msgstr ""
+
+msgid "Please enter an Access Token Secret"
+msgstr ""
+
+msgid ""
+"The Access Token Secret must not be empty. Please enter an Access Token "
+"Secret"
+msgstr ""
+
+msgid "Click to test the Access Token"
+msgstr ""
+
+msgid ""
+"With OAuth you grant JOSM the right to upload map data and GPS tracks on "
+"your behalf (<a href=\"{0}\">more info...</a>)."
+msgstr ""
+
+msgid "Please select an authorization procedure: "
+msgstr ""
+
+msgid "Get an Access Token for ''{0}''"
+msgstr ""
+
+msgid "Close the dialog and cancel authorization"
+msgstr ""
+
+msgid "Close the dialog and accept the Access Token"
+msgstr ""
+
+msgid "Failed to cancel running OAuth operation"
+msgstr ""
+
+msgid "Retrieving OAuth Request Token from ''{0}''"
+msgstr ""
+
+msgid "Retrieving OAuth Access Token from ''{0}''"
+msgstr ""
+
+msgid "OSM website did not return a session cookie in response to ''{0}'',"
+msgstr ""
+
+msgid ""
+"Failed to authenticate user ''{0}'' with password ''***'' as OAuth user"
+msgstr ""
+
+msgid "Failed to authorize OAuth request  ''{0}''"
+msgstr ""
+
+msgid "Authorizing OAuth Request token ''{0}'' at the OSM website ..."
+msgstr ""
+
+msgid "Initializing a session at the OSM website..."
+msgstr ""
+
+msgid "Authenticating the session for user ''{0}''..."
+msgstr ""
+
+msgid "Authorizing request token ''{0}''..."
+msgstr ""
+
+msgid "Logging out session ''{0}''..."
+msgstr ""
+
+msgid "Allow to upload map data"
+msgstr ""
+
+msgid "Select to grant JOSM the right to upload map data on your behalf"
+msgstr ""
+
+msgid "Allow to upload GPS traces"
+msgstr ""
+
+msgid "Select to grant JOSM the right to upload GPS traces on your behalf"
+msgstr ""
+
+msgid "Allow to download your private GPS traces"
+msgstr ""
+
+msgid ""
+"Select to grant JOSM the right to download your private GPS traces into JOSM "
+"layers"
+msgstr ""
+
+msgid "Allow to read your preferences"
+msgstr ""
+
+msgid "Select to grant JOSM the right to read your server preferences"
+msgstr ""
+
+msgid "Allow to write your preferences"
+msgstr ""
+
+msgid "Select to grant JOSM the right to write your server preferences"
+msgstr ""
+
+msgid "Allow modifications of notes"
+msgstr ""
+
+msgid "Select to grant JOSM the right to modify notes on your behalf"
+msgstr ""
+
+msgid "Retrieving OAuth Access Token..."
+msgstr ""
+
+msgid "<html>Retrieving an OAuth Access Token from ''{0}'' failed.</html>"
+msgstr ""
+
+msgid "Request Failed"
+msgstr ""
+
+msgid "Retrieving OAuth Request Token..."
+msgstr ""
+
+msgid "<html>Retrieving an OAuth Request Token from ''{0}'' failed.</html>"
+msgstr ""
+
+msgid "Display Advanced OAuth Parameters"
+msgstr ""
+
+msgid "Retrieve Request Token"
+msgstr ""
+
+msgid ""
+"<html>Please click on <strong>{0}</strong> to retrieve an OAuth Request "
+"Token from ''{1}''.</html>"
+msgstr ""
+
+msgid "<html>Step 1/3: Retrieve an OAuth Request Token</html>"
+msgstr ""
+
+msgid "<html>Step 2/3: Authorize and retrieve an Access Token</html>"
+msgstr ""
+
+msgid "Request Access Token"
+msgstr ""
+
+msgid ""
+"<html>JOSM successfully retrieved a Request Token. JOSM is now launching an "
+"authorization page in an external browser. Please login with your OSM "
+"username and password and follow the instructions to authorize the Request "
+"Token. Then switch back to this dialog and click on "
+"<strong>{0}</strong><br><br>If launching the external browser fails you can "
+"copy the following authorize URL and paste it into the address field of your "
+"browser.</html>"
+msgstr ""
+
+msgid "Go back to step 1/3"
+msgstr ""
+
+msgid "<html>Step 3/3: Successfully retrieved an Access Token</html>"
+msgstr ""
+
+msgid ""
+"<html>JOSM has successfully retrieved an Access Token. You can now accept "
+"this token. JOSM will use it in the future for authentication and "
+"authorization to the OSM server.<br><br>The access token is: </html>"
+msgstr ""
+
+msgid "Click to retrieve a Request Token"
+msgstr ""
+
+msgid "Retrieve Access Token"
+msgstr ""
+
+msgid "Click to retrieve an Access Token"
+msgstr ""
+
+msgid "Testing OAuth Access Token"
+msgstr ""
+
+msgid "Retrieving user details with Access Token Key ''{0}'' was rejected."
+msgstr ""
+
+msgid "Retrieving user details with Access Token Key ''{0}'' was forbidden."
+msgstr ""
+
+msgid ""
+"<html>Successfully used the Access Token ''{0}'' to<br>access the OSM server "
+"at ''{1}''.<br>You are accessing the OSM server as user ''{2}'' with id "
+"''{3}''.</html>"
+msgstr ""
+
+msgid "Success"
+msgstr ""
+
+msgid ""
+"<html>Failed to access the OSM server ''{0}''<br>with the Access Token "
+"''{1}''.<br>The server rejected the Access Token as unauthorized. You will "
+"not<br>be able to access any protected resource on this server using this "
+"token.</html>"
+msgstr ""
+
+msgid "Test failed"
+msgstr ""
+
+msgid ""
+"<html>The Access Token ''{1}'' is known to the OSM server ''{0}''.<br>The "
+"test to retrieve the user details for this token failed, "
+"though.<br>Depending on what rights are granted to this token you may "
+"nevertheless use it<br>to upload data, upload GPS traces, and/or access "
+"other protected resources.</html>"
+msgstr ""
+
+msgid "Token allows restricted access"
+msgstr ""
+
+msgid ""
+"<html>Failed to retrieve information about the current user from the OSM "
+"server ''{0}''.<br>This is probably not a problem caused by the tested "
+"Access Token, but<br>rather a problem with the server configuration. "
+"Carefully check the server<br>URL and your Internet connection.</html>"
+msgstr ""
+
+msgid ""
+"<html>Failed to sign the request for the OSM server ''{0}'' with the token "
+"''{1}''.<br>The token ist probably invalid.</html>"
+msgstr ""
+
+msgid ""
+"<html>The test failed because the server responded with an internal "
+"error.<br>JOSM could not decide whether the token is valid. Please try again "
+"later.</html>"
+msgstr ""
+
+msgid "Retrieving user info..."
+msgstr ""
+
+msgid "Expert mode"
+msgstr ""
+
+msgid "Close the preferences dialog and discard preference updates"
+msgstr ""
+
+msgid "Save the preferences and close the dialog"
+msgstr ""
+
+msgid "You have to restart JOSM for some settings to take effect."
+msgstr ""
+
+msgid "Would you like to restart now?"
+msgstr ""
+
+msgid "Download plugins"
+msgstr ""
+
+msgid "Icon paths:"
+msgstr ""
+
+msgid "Short Description:"
+msgstr ""
+
+msgid "Author:"
+msgstr ""
+
+msgid "Webpage:"
+msgstr ""
+
+msgid "Description:"
+msgstr ""
+
+msgid "Version:"
+msgstr ""
+
+msgid "Minimum JOSM Version:"
+msgstr ""
+
+msgid "by {0}"
+msgstr ""
+
+msgid "Name (optional):"
+msgstr ""
+
+msgid "URL / File:"
+msgstr ""
+
+msgid "active"
+msgstr ""
+
+msgid "Map paint style file (*.xml, *.mapcss, *.zip)"
+msgstr ""
+
+msgid "Preset definition file (*.xml, *.zip)"
+msgstr ""
+
+msgid "Tag checker rule (*.validator.mapcss, *.zip)"
+msgstr ""
+
+msgid "Edit source entry:"
+msgstr ""
+
+msgid "Entry ''{0}'' requires JOSM Version {1}. (Currently running: {2})"
+msgstr ""
+
+msgid "Continue anyway"
+msgstr ""
+
+msgid "Ignore warning and install style anyway"
+msgstr ""
+
+msgid "Some entries have unmet dependencies:"
+msgstr ""
+
+msgid "Reset"
+msgstr ""
+
+msgid "Reset to default"
+msgstr ""
+
+msgid "Add a new icon path"
+msgstr ""
+
+msgid "Remove the selected icon paths"
+msgstr ""
+
+msgid "Edit the selected icon path"
+msgstr ""
+
+msgid "Tooltip"
+msgstr ""
+
+msgid "Icon"
+msgstr ""
+
+msgid "Remove from toolbar"
+msgstr ""
+
+msgid "Configure toolbar"
+msgstr ""
+
+msgid "Edit shortcut"
+msgstr ""
+
+msgid "Do not hide toolbar and menu"
+msgstr ""
+
+msgid "Actions"
+msgstr ""
+
+msgid "Toolbar customization"
+msgstr ""
+
+msgid "Customize the elements on the toolbar."
+msgstr ""
+
+msgid "Separator"
+msgstr ""
+
+msgid "Toolbar"
+msgstr ""
+
+msgid "Available"
+msgstr ""
+
+msgid "Action parameters"
+msgstr ""
+
+msgid "Parameter name"
+msgstr ""
+
+msgid "Parameter value"
+msgstr ""
+
+msgid "Toolbar action without name: {0}"
+msgstr ""
+
+msgid "Strange toolbar value: {0}"
+msgstr ""
+
+msgid "Toolbar action {0} overwritten: {1} gets {2}"
+msgstr ""
+
+msgid "Registered toolbar action without name: {0}"
+msgstr ""
+
+msgid "Registered toolbar action {0} overwritten: {1} gets {2}"
+msgstr ""
+
+msgid "Toolbar: {0}"
+msgstr ""
+
+msgid "Advanced Preferences"
+msgstr ""
+
+msgid "Setting Preference entries directly. Use with caution!"
+msgstr ""
+
+msgid "Search: "
+msgstr ""
+
+msgid "Read from file"
+msgstr ""
+
+msgid "Export selected items"
+msgstr ""
+
+msgid "JOSM custom settings files (*.xml)"
+msgstr ""
+
+msgid "Please select some preference keys not marked as default"
+msgstr ""
+
+msgid "Export preferences keys to JOSM customization file"
+msgstr ""
+
+msgid "What to do with preference lists when this file is to be imported?"
+msgstr ""
+
+msgid "Append preferences from file to existing values"
+msgstr ""
+
+msgid "Replace existing values"
+msgstr ""
+
+msgid "Open JOSM customization file"
+msgstr ""
+
+msgid "Import log"
+msgstr ""
+
+msgid ""
+"<html>Here is file import summary. <br/>You can reject preferences changes "
+"by pressing \"Cancel\" in preferences dialog <br/>To activate some changes "
+"JOSM restart may be needed.</html>"
+msgstr ""
+
+msgid "shortcut"
+msgstr ""
+
+msgid "color"
+msgstr ""
+
+msgid "toolbar"
+msgstr ""
+
+msgid "imagery"
+msgstr ""
+
+msgid "Reset preferences"
+msgstr ""
+
+msgid ""
+"You are about to clear all preferences to their default values<br />All your "
+"settings will be deleted: plugins, imagery, filters, toolbar buttons, "
+"keyboard, etc. <br />Are you sure you want to continue?"
+msgstr ""
+
+msgid "Load profile"
+msgstr ""
+
+msgid "Save {0} profile"
+msgstr ""
+
+msgid "All the preferences of this group are default, nothing to save"
+msgstr ""
+
+msgid "Choose profile file"
+msgstr ""
+
+msgid "Change list setting"
+msgstr ""
+
+msgid "Key: {0}"
+msgstr ""
+
+msgid "Change list of lists setting"
+msgstr ""
+
+msgid "add entry"
+msgstr ""
+
+msgid "Remove the selected entry"
+msgstr ""
+
+msgid "Change list of maps setting"
+msgstr ""
+
+msgid "Entry {0}"
+msgstr ""
+
+msgid "Please select the row to edit."
+msgstr ""
+
+msgid "Select Setting Type:"
+msgstr ""
+
+msgid "Simple"
+msgstr ""
+
+msgid "List"
+msgstr ""
+
+msgid "List of lists"
+msgstr ""
+
+msgid "List of maps"
+msgstr ""
+
+msgid "Add setting"
+msgstr ""
+
+msgid "Please select the row to delete."
+msgstr ""
+
+msgid "Advanced Background: Changed"
+msgstr ""
+
+msgid "Advanced Background: NonDefault"
+msgstr ""
+
+msgid "Current value is default."
+msgstr ""
+
+msgid "Default value is ''{0}''."
+msgstr ""
+
+msgid "Default value currently unknown (setting has not been used yet)."
+msgstr ""
+
+msgid "Change string setting"
+msgstr ""
+
+msgid "Value: "
+msgstr ""
+
+msgid "Audio Settings"
+msgstr ""
+
+msgid "Settings for the audio player and audio markers."
+msgstr ""
+
+msgid "Display the Audio menu."
+msgstr ""
+
+msgid "Label audio (and image and web) markers."
+msgstr ""
+
+msgid "Display live audio trace."
+msgstr ""
+
+msgid "Explicit waypoints with valid timestamps."
+msgstr ""
+
+msgid "Explicit waypoints with time estimated from track position."
+msgstr ""
+
+msgid "Named trackpoints."
+msgstr ""
+
+msgid "Modified times (time stamps) of audio files."
+msgstr ""
+
+msgid "Start of track (will always do this if no other markers available)."
+msgstr ""
+
+msgid "Show or hide the audio menu entry on the main menu bar."
+msgstr ""
+
+msgid ""
+"Display a moving icon representing the point on the synchronized track where "
+"the audio currently playing was recorded."
+msgstr ""
+
+msgid ""
+"Put text labels against audio (and image and web) markers as well as their "
+"button icons."
+msgstr ""
+
+msgid "When importing audio, make markers from..."
+msgstr ""
+
+msgid "When importing audio, apply it to any waypoints in the GPX layer."
+msgstr ""
+
+msgid ""
+"Automatically create audio markers from trackpoints (rather than explicit "
+"waypoints) with names or descriptions."
+msgstr ""
+
+msgid ""
+"Create audio markers at the position on the track corresponding to the "
+"modified time of each audio WAV file imported."
+msgstr ""
+
+msgid ""
+"The number of seconds to jump forward or back when the relevant button is "
+"pressed"
+msgstr ""
+
+msgid "Forward/back time (seconds)"
+msgstr ""
+
+msgid "The amount by which the speed is multiplied for fast forwarding"
+msgstr ""
+
+msgid "Fast forward multiplier"
+msgstr ""
+
+msgid ""
+"Playback starts this number of seconds before (or after, if negative) the "
+"audio track position requested"
+msgstr ""
+
+msgid "Lead-in time (seconds)"
+msgstr ""
+
+msgid "The ratio of voice recorder elapsed time to true elapsed time"
+msgstr ""
+
+msgid "Voice recorder calibration"
+msgstr ""
+
+msgid "Color"
+msgstr ""
+
+msgid "Choose"
+msgstr ""
+
+msgid "Choose a color for {0}"
+msgstr ""
+
+msgid "Set to default"
+msgstr ""
+
+msgid "Set all to default"
+msgstr ""
+
+msgid "Colors used by different objects in JOSM."
+msgstr ""
+
+msgid "Colors"
+msgstr ""
+
+msgid "Display Settings"
+msgstr ""
+
+msgid ""
+"Various settings that influence the visual representation of the whole "
+"program."
+msgstr ""
+
+msgid "Draw Direction Arrows"
+msgstr ""
+
+msgid "Only on the head of a way."
+msgstr ""
+
+msgid "Draw oneway arrows."
+msgstr ""
+
+msgid "Draw segment order numbers"
+msgstr ""
+
+msgid "Draw boundaries of downloaded data"
+msgstr ""
+
+msgid "Draw virtual nodes in select mode"
+msgstr ""
+
+msgid "Draw inactive layers in other color"
+msgstr ""
+
+msgid "Display discardable keys"
+msgstr ""
+
+msgid "Highlight target ways and nodes"
+msgstr ""
+
+msgid "Draw rubber-band helper line"
+msgstr ""
+
+msgid "Smooth map graphics (antialiasing)"
+msgstr ""
+
+msgid "Smooth map graphics in wireframe mode (antialiasing)"
+msgstr ""
+
+msgid "Draw only outlines of areas"
+msgstr ""
+
+msgid "GPS Points"
+msgstr ""
+
+msgid "Draw direction hints for way segments."
+msgstr ""
+
+msgid "Draw arrows in the direction of oneways and other directed features."
+msgstr ""
+
+msgid "Draw the order numbers of all segments within their way."
+msgstr ""
+
+msgid "Draw the boundaries of data loaded from the server."
+msgstr ""
+
+msgid "Draw virtual nodes in select mode for easy way modification."
+msgstr ""
+
+msgid "Draw the inactive data layers in a different color."
+msgstr ""
+
+msgid ""
+"Apply antialiasing to the map view resulting in a smoother appearance."
+msgstr ""
+
+msgid ""
+"Apply antialiasing to the map view in wireframe mode resulting in a smoother "
+"appearance."
+msgstr ""
+
+msgid "Hightlight target nodes and ways while drawing or selecting"
+msgstr ""
+
+msgid ""
+"This option suppresses the filling of areas, overriding anything specified "
+"in the selected style."
+msgstr ""
+
+msgid ""
+"Display keys which have been deemed uninteresting to the point that they can "
+"be silently removed."
+msgstr ""
+
+msgid "Options that affect drawing performance"
+msgstr ""
+
+msgid "Segment drawing options"
+msgstr ""
+
+msgid "Select and draw mode options"
+msgstr ""
+
+msgid "Other options"
+msgstr ""
+
+msgid "OSM Data"
+msgstr ""
+
+msgid "Auto"
+msgstr ""
+
+msgctxt "gpx_field"
+msgid "Name"
+msgstr ""
+
+msgctxt "gpx_field"
+msgid "Desc(ription)"
+msgstr ""
+
+msgid "Everything"
+msgstr ""
+
+msgid "Name or offset"
+msgstr ""
+
+msgid "None"
+msgstr ""
+
+msgid "Custom"
+msgstr ""
+
+msgid "Use global settings"
+msgstr ""
+
+msgid "All"
+msgstr ""
+
+msgid "Local files"
+msgstr ""
+
+msgid "Force lines if no segments imported"
+msgstr ""
+
+msgid "Draw large GPS points"
+msgstr ""
+
+msgid "Draw a circle from HDOP value"
+msgstr ""
+
+msgid "Velocity (red = slow, green = fast)"
+msgstr ""
+
+msgid "Direction (red = west, yellow = north, green = east, blue = south)"
+msgstr ""
+
+msgid "Dilution of Position (red = high, green = low, if available)"
+msgstr ""
+
+msgid "Track date"
+msgstr ""
+
+msgid "Single Color (can be customized for named layers)"
+msgstr ""
+
+msgid "Car"
+msgstr ""
+
+msgid "Bicycle"
+msgstr ""
+
+msgid "Foot"
+msgstr ""
+
+msgid "Create markers when reading GPX"
+msgstr ""
+
+msgid "Fast drawing (looks uglier)"
+msgstr ""
+
+msgid "Dynamic color range based on data limits"
+msgstr ""
+
+msgid "Smooth GPX graphics (antialiasing)"
+msgstr ""
+
+msgid ""
+"Automatically make a marker layer from any waypoints when opening a GPX "
+"layer."
+msgstr ""
+
+msgid "Draw lines between raw GPS points"
+msgstr ""
+
+msgid ""
+"Maximum length (in meters) to draw lines for local files. Set to ''-1'' to "
+"draw all lines."
+msgstr ""
+
+msgid "Maximum length for local files (meters)"
+msgstr ""
+
+msgid ""
+"Maximum length (in meters) to draw lines. Set to ''-1'' to draw all lines."
+msgstr ""
+
+msgid "Maximum length (meters)"
+msgstr ""
+
+msgid ""
+"Force drawing of lines if the imported data contain no line information."
+msgstr ""
+
+msgid "Draw direction arrows for lines, connecting GPS points."
+msgstr ""
+
+msgid ""
+"Draw the direction arrows using table lookups instead of complex math."
+msgstr ""
+
+msgid ""
+"Do not draw arrows if they are not at least this distance away from the last "
+"one."
+msgstr ""
+
+msgid "Minimum distance (pixels)"
+msgstr ""
+
+msgid "Draw a circle from HDOP value."
+msgstr ""
+
+msgid "Draw larger dots for the GPS points."
+msgstr ""
+
+msgid "Width of drawn GPX line (0 for default)"
+msgstr ""
+
+msgid "Drawing width of GPX lines"
+msgstr ""
+
+msgid ""
+"Apply antialiasing to the GPX lines resulting in a smoother appearance."
+msgstr ""
+
+msgid ""
+"All points and track segments will have the same color. Can be customized in "
+"Layer Manager."
+msgstr ""
+
+msgid "Colors points and track segments by velocity."
+msgstr ""
+
+msgid "Colors points and track segments by direction."
+msgstr ""
+
+msgid ""
+"Colors points and track segments by dilution of position (HDOP). Your "
+"capture device needs to log that information."
+msgstr ""
+
+msgid "Colors points and track segments by its timestamp."
+msgstr ""
+
+msgid "Allows to tune the track coloring for different average speeds."
+msgstr ""
+
+msgid "Track and Point Coloring"
+msgstr ""
+
+msgid "Colors points and track segments by data limits."
+msgstr ""
+
+msgid "Waypoint labelling"
+msgstr ""
+
+msgid "Audio waypoint labelling"
+msgstr ""
+
+msgid "Incorrect waypoint label pattern: {0}"
+msgstr ""
+
+msgid "Incorrect pattern"
+msgstr ""
+
+msgid "Incorrect audio waypoint label pattern: {0}"
+msgstr ""
+
+msgid "Show splash screen at startup"
+msgstr ""
+
+msgid "Show object ID in selection lists"
+msgstr ""
+
+msgid "Show localized name in selection lists"
+msgstr ""
+
+msgid "Modeless working (Potlatch style)"
+msgstr ""
+
+msgid "Dynamic buttons in side menus"
+msgstr ""
+
+msgid "Display ISO dates"
+msgstr ""
+
+msgid "Use native file choosers (nicer, but do not support file filters)"
+msgstr ""
+
+msgid "Show localized name in selection lists, if available"
+msgstr ""
+
+msgid "Do not require to switch modes (potlatch style workflow)"
+msgstr ""
+
+msgid ""
+"Display buttons in right side menus only when mouse is inside the element"
+msgstr ""
+
+msgid "ISO 8601"
+msgstr ""
+
+msgid ""
+"Format dates according to {0}. Today''s date will be displayed as {1} "
+"instead of {2}"
+msgstr ""
+
+msgid ""
+"Use file choosers that behave more like native ones. They look nicer but do "
+"not support some features like file filters"
+msgstr ""
+
+msgid "Look and Feel"
+msgstr ""
+
+msgid "Language"
+msgstr ""
+
+msgid "Default (Auto determined)"
+msgstr ""
+
+msgid "Add Imagery URL"
+msgstr ""
+
+msgid "1. Enter URL"
+msgstr ""
+
+msgid ""
+"{0} is replaced by tile zoom level, also supported:<br>offsets to the zoom "
+"level: {1} or {2}<br>reversed zoom level: {3}"
+msgstr ""
+
+msgid "{0} is replaced by X-coordinate of the tile"
+msgstr ""
+
+msgid "{0} is replaced by Y-coordinate of the tile"
+msgstr ""
+
+msgid "{0} is replaced by {1} (Yahoo style Y coordinate)"
+msgstr ""
+
+msgid ""
+"{0} is replaced by {1} (OSGeo Tile Map Service Specification style Y "
+"coordinate)"
+msgstr ""
+
+msgid ""
+"{0} is replaced by a random selection from the given comma separated list, "
+"e.g. {1}"
+msgstr ""
+
+msgid "2. Enter maximum zoom (optional)"
+msgstr ""
+
+msgid "3. Verify generated TMS URL"
+msgstr ""
+
+msgid "4. Enter name for this layer"
+msgstr ""
+
+msgid "Store WMS endpoint only, select layers at usage"
+msgstr ""
+
+msgid "Show bounds"
+msgstr ""
+
+msgid "1. Enter service URL"
+msgstr ""
+
+msgid "Get layers"
+msgstr ""
+
+msgid "2. Select layers"
+msgstr ""
+
+msgid "3. Select image format"
+msgstr ""
+
+msgid "4. Verify generated WMS URL"
+msgstr ""
+
+msgid "5. Enter name for this layer"
+msgstr ""
+
+msgid "Show Bounds"
+msgstr ""
+
+msgid "No bounding box was found for this layer."
+msgstr ""
+
+msgid "1. Enter getCapabilities URL"
+msgstr ""
+
+msgid "2. Enter name for this layer"
+msgstr ""
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
+msgid "imagery fade"
+msgstr ""
+
+msgid "Fade Color: "
+msgstr ""
+
+msgid "Fade amount: "
+msgstr ""
+
+msgid "Soft"
+msgstr ""
+
+msgid "Strong"
+msgstr ""
+
+msgid "Sharpen (requires layer re-add): "
+msgstr ""
+
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
+msgid "Imagery Preferences"
+msgstr ""
+
+msgid "Modify list of imagery layers displayed in the Imagery menu"
+msgstr ""
+
+msgid "Common Settings"
+msgstr ""
+
+msgid "WMS Settings"
+msgstr ""
+
+msgid "TMS Settings"
+msgstr ""
+
+msgid "Imagery providers"
+msgstr ""
+
+msgid "Offset bookmarks"
+msgstr ""
+
+msgid "Cache contents"
+msgstr ""
+
+msgid "Imagery Background: Default"
+msgstr ""
+
+msgid "Available default entries:"
+msgstr ""
+
+msgid "Selected entries:"
+msgstr ""
+
+msgid "Add a new {0} entry by entering the URL"
+msgstr ""
+
+msgid "Remove entry"
+msgstr ""
+
+msgid "copy selected defaults"
+msgstr ""
+
+msgid "Please select at least one row to copy."
+msgstr ""
+
+msgid "reload defaults"
+msgstr ""
+
+msgid "Menu Name"
+msgstr ""
+
+msgid "Imagery URL"
+msgstr ""
+
+msgid "Menu Name (Default)"
+msgstr ""
+
+msgid "Imagery URL (Default)"
+msgstr ""
+
+msgid "EULA license URL not available: {0}"
+msgstr ""
+
+msgid "Malformed URL for the EULA licence: {0}"
+msgstr ""
+
+msgid "Layer"
+msgstr ""
+
+msgid "Easting"
+msgstr ""
+
+msgid "Northing"
+msgstr ""
+
+msgid "Auto zoom by default: "
+msgstr ""
+
+msgid "Autoload tiles by default: "
+msgstr ""
+
+msgid "Min. zoom level: "
+msgstr ""
+
+msgid "Max. zoom level: "
+msgstr ""
+
+msgid "Add to slippymap chooser: "
+msgstr ""
+
+msgid "Maximum concurrent downloads: "
+msgstr ""
+
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
+msgid ""
+"That layer does not support any of JOSM''s projections,\n"
+"so you can not use it. This message will not show again."
+msgstr ""
+
+msgid "Simultaneous connections:"
+msgstr ""
+
+msgid "Tile size:"
+msgstr ""
+
+msgid "Auto save enabled"
+msgstr ""
+
+msgid "Auto save interval (seconds)"
+msgstr ""
+
+msgid "Default value: {0}"
+msgstr ""
+
+msgid "Auto saved files per layer"
+msgstr ""
+
+msgid ""
+"<i>(Autosave stores the changed data layers in periodic intervals. The "
+"backups are saved in JOSM''s preference folder. In case of a crash, JOSM "
+"tries to recover the unsaved changes on next start.)</i>"
+msgstr ""
+
+msgid "Keep backup files when saving data layers"
+msgstr ""
+
+msgid "When saving, keep backup files ending with a ~"
+msgstr ""
+
+msgid ""
+"<i>(JOSM can keep a backup file when saving data layers. It appends ''~'' to "
+"the file name and saves it in the same folder.)</i>"
+msgstr ""
+
+msgid "Notification at each save"
+msgstr ""
+
+msgid "When saving, display a small notification"
+msgstr ""
+
+msgid "File backup"
+msgstr ""
+
+msgid "Configure whether to create backup files"
+msgstr ""
+
+msgid "Enable built-in icon defaults"
+msgstr ""
+
+msgid "Available styles:"
+msgstr ""
+
+msgid "Active styles:"
+msgstr ""
+
+msgid "Add a new style by entering filename or URL"
+msgstr ""
+
+msgid "New style entry:"
+msgstr ""
+
+msgid "Remove the selected styles from the list of active styles"
+msgstr ""
+
+msgid "Edit the filename or URL for the selected active style"
+msgstr ""
+
+msgid "Add the selected available styles to the list of active styles"
+msgstr ""
+
+msgid "Reloads the list of available styles from ''{0}''"
+msgstr ""
+
+msgid "Loading style sources from ''{0}''"
+msgstr ""
+
+msgid ""
+"<html>Failed to load the list of style sources "
+"from<br>''{0}''.<br><br>Details (untranslated):<br>{1}</html>"
+msgstr ""
+
+msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
+msgstr ""
+
+msgid "JOSM default (MapCSS)"
+msgstr ""
+
+msgid ""
+"Internal style to be used as base for runtime switchable overlay styles"
+msgstr ""
+
+msgid "Potlatch 2"
+msgstr ""
+
+msgid "the main Potlatch 2 style"
+msgstr ""
+
+msgid "Map Settings"
+msgstr ""
+
+msgid "Settings for the map projection and data interpretation."
+msgstr ""
+
+msgid "Could not read tagging preset source: {0}"
+msgstr ""
+
+msgid ""
+"Could not read tagging preset source: {0}\n"
+"Do you want to keep it?"
+msgstr ""
+
+msgid "Could not read tagging preset source {0}"
+msgstr ""
+
+msgid ""
+"<html>Tagging preset source {0} can be loaded but it contains errors. Do you "
+"really want to use it?<br><br><table width=600>Error is: [{1}:{2}] "
+"{3}</table></html>"
+msgstr ""
+
+msgid ""
+"<html>Unable to parse tagging preset source: {0}. Do you really want to use "
+"it?<br><br><table width=400>Error is: [{1}:{2}] {3}</table></html>"
+msgstr ""
+
+msgid ""
+"<html>Tagging preset source {0} can be loaded but it contains errors. Do you "
+"really want to use it?<br><br><table width=600>Error is: {1}</table></html>"
+msgstr ""
+
+msgid ""
+"<html>Unable to parse tagging preset source: {0}. Do you really want to use "
+"it?<br><br><table width=600>Error is: {1}</table></html>"
+msgstr ""
+
+msgid "Sort presets menu"
+msgstr ""
+
+msgid "Tagging Presets"
+msgstr ""
+
+msgid "Available presets:"
+msgstr ""
+
+msgid "Active presets:"
+msgstr ""
+
+msgid "Add a new preset by entering filename or URL"
+msgstr ""
+
+msgid "New preset entry:"
+msgstr ""
+
+msgid "Remove the selected presets from the list of active presets"
+msgstr ""
+
+msgid "Edit the filename or URL for the selected active preset"
+msgstr ""
+
+msgid "Add the selected available presets to the list of active presets"
+msgstr ""
+
+msgid "Reloads the list of available presets from ''{0}''"
+msgstr ""
+
+msgid "Loading preset sources from ''{0}''"
+msgstr ""
+
+msgid ""
+"<html>Failed to load the list of preset sources "
+"from<br>''{0}''.<br><br>Details (untranslated):<br>{1}</html>"
+msgstr ""
+
+msgid "Warning: illegal format of entry in preset list ''{0}''. Got ''{1}''"
+msgstr ""
+
+msgid "Internal Preset"
+msgstr ""
+
+msgid "The default preset for JOSM"
+msgstr ""
+
+msgid "Plugin bundled with JOSM"
+msgstr ""
+
+msgid ""
+"Please click on <strong>Download list</strong> to download and display a "
+"list of available plugins."
+msgstr ""
+
+msgid "Plugin {0} is still required by this plugin:"
+msgid_plural "Plugin {0} is still required by these {1} plugins:"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "{0}: Version {1} (local: {2})"
+msgstr ""
+
+msgid " (requires: {0})"
+msgstr ""
+
+msgid "Configure available plugins."
+msgstr ""
+
+msgid ""
+"The following plugin has been downloaded <strong>successfully</strong>:"
+msgid_plural ""
+"The following {0} plugins have been downloaded <strong>successfully</strong>:"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Downloading the following plugin has <strong>failed</strong>:"
+msgid_plural ""
+"Downloading the following {0} plugins has <strong>failed</strong>:"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Please restart JOSM to activate the downloaded plugins."
+msgstr ""
+
+msgid "Update plugins"
+msgstr ""
+
+msgid "Search:"
+msgstr ""
+
+msgid "Enter a search expression"
+msgstr ""
+
+msgid "Plugin update policy"
+msgstr ""
+
+msgid "Accept the new plugin sites and close the dialog"
+msgstr ""
+
+msgid "Configure Plugin Sites"
+msgstr ""
+
+msgid "Download list"
+msgstr ""
+
+msgid "Download the list of available plugins"
+msgstr ""
+
+msgid "Update the selected plugins"
+msgstr ""
+
+msgid ""
+"All installed plugins are up to date. JOSM does not have to download newer "
+"versions."
+msgstr ""
+
+msgid "Plugins up to date"
+msgstr ""
+
+msgid "Configure sites..."
+msgstr ""
+
+msgid "Configure the list of sites where plugins are downloaded from"
+msgstr ""
+
+msgid "Add JOSM Plugin description URL."
+msgstr ""
+
+msgid "Enter URL"
+msgstr ""
+
+msgid "Please select an entry."
+msgstr ""
+
+msgid "Edit JOSM Plugin description URL."
+msgstr ""
+
+msgid "JOSM Plugin description URL"
+msgstr ""
+
+msgid "Ask before updating"
+msgstr ""
+
+msgid "Always update without asking"
+msgstr ""
+
+msgid "Never update"
+msgstr ""
+
+msgid ""
+"Please decide whether JOSM shall automatically update active plugins at "
+"startup after an update of JOSM itself."
+msgstr ""
+
+msgid "Update interval (in days):"
+msgstr ""
+
+msgid ""
+"Please decide whether JOSM shall automatically update active plugins after a "
+"certain period of time."
+msgstr ""
+
+msgid "By Code (EPSG)"
+msgstr ""
+
+msgid "Invalid projection configuration: {0}"
+msgstr ""
+
+msgid "Projection configuration is valid."
+msgstr ""
+
+msgid "Validate"
+msgstr ""
+
+msgid "Parameter information..."
+msgstr ""
+
+msgid "Parameter information"
+msgstr ""
+
+msgid "Projection name"
+msgstr ""
+
+msgid "Supported values:"
+msgstr ""
+
+msgid "Projection parameters"
+msgstr ""
+
+msgid "False easting and false northing"
+msgstr ""
+
+msgid "Central meridian"
+msgstr ""
+
+msgid "Scaling factor"
+msgstr ""
+
+msgid "Ellipsoid name"
+msgstr ""
+
+msgid "Ellipsoid parameters"
+msgstr ""
+
+msgid "Datum name"
+msgstr ""
+
+msgid "3 or 7 term datum transform parameters"
+msgstr ""
+
+msgid "NTv2 grid file"
+msgstr ""
+
+msgid "Built-in:"
+msgstr ""
+
+msgid "Projection bounds (in degrees)"
+msgstr ""
+
+msgid "Sets the SRS=... parameter in the WMS request"
+msgstr ""
+
+msgid "Gauß-Krüger"
+msgstr ""
+
+msgid "GK Zone"
+msgstr ""
+
+msgid "Gauß-Krüger Zone {0}"
+msgstr ""
+
+msgid "{0} ({1} to {2} degrees)"
+msgstr ""
+
+msgid "Lambert CC9 Zone (France)"
+msgstr ""
+
+msgid "Lambert CC Zone"
+msgstr ""
+
+msgid "{0} (Corsica)"
+msgstr ""
+
+msgid "Lambert 4 Zones (France)"
+msgstr ""
+
+msgid "WGS84 Geographic"
+msgstr ""
+
+msgid "Belgian Lambert 1972"
+msgstr ""
+
+msgid "Belgian Lambert 2008"
+msgstr ""
+
+msgid "Lambert Zone (Estonia)"
+msgstr ""
+
+msgid "Lambert 93 (France)"
+msgstr ""
+
+msgid "LKS-92 (Latvia TM)"
+msgstr ""
+
+msgid "SWEREF99 13 30 / EPSG:3008 (Sweden)"
+msgstr ""
+
+msgid "Projection method"
+msgstr ""
+
+msgid "Projection code"
+msgstr ""
+
+msgid "Display coordinates as"
+msgstr ""
+
+msgid "System of measurement"
+msgstr ""
+
+msgid "Map Projection"
+msgstr ""
+
+msgid "The projection {0} could not be activated. Using Mercator"
+msgstr ""
+
+msgid "PUWG 1992 (Poland)"
+msgstr ""
+
+msgid "PUWG 2000 Zone {0} (Poland)"
+msgstr ""
+
+msgid "PUWG (Poland)"
+msgstr ""
+
+msgid "PUWG Zone"
+msgstr ""
+
+msgid "Swiss Grid (Switzerland)"
+msgstr ""
+
+msgid "<i>CH1903 / LV03 (without local corrections)</i>"
+msgstr ""
+
+msgid "Guadeloupe Fort-Marigot 1949"
+msgstr ""
+
+msgid "Guadeloupe Ste-Anne 1948"
+msgstr ""
+
+msgid "Martinique Fort Desaix 1952"
+msgstr ""
+
+msgid "Reunion RGR92"
+msgstr ""
+
+msgid "Guyane RGFG95"
+msgstr ""
+
+msgid "UTM France (DOM)"
+msgstr ""
+
+msgid "UTM Geodesic system"
+msgstr ""
+
+msgid "UTM"
+msgstr ""
+
+msgid "UTM Zone"
+msgstr ""
+
+msgid "North"
+msgstr ""
+
+msgid "South"
+msgstr ""
+
+msgid "Hemisphere"
+msgstr ""
+
+msgid "Remote Control"
+msgstr ""
+
+msgid "Settings for the remote control feature."
+msgstr ""
+
+msgid "Download objects to new layer"
+msgstr ""
+
+msgid "Confirm all Remote Control actions manually"
+msgstr ""
+
+msgid ""
+"Allows JOSM to be controlled from other applications, e.g. from a web "
+"browser."
+msgstr ""
+
+msgid ""
+"JOSM will always listen at <b>port {0}</b> (http) and <b>port {1}</b> "
+"(https) on localhost.<br>These ports are not configurable because they are "
+"referenced by external applications talking to JOSM."
+msgstr ""
+
+msgid "Enable remote control"
+msgstr ""
+
+msgid "Enable HTTPS support"
+msgstr ""
+
+msgid "Install..."
+msgstr ""
+
+msgid "Uninstall..."
+msgstr ""
+
+msgid "Install JOSM localhost certificate to system/browser root keystores"
+msgstr ""
+
+msgid ""
+"Uninstall JOSM localhost certificate from system/browser root keystores"
+msgstr ""
+
+msgid "Certificate:"
+msgstr ""
+
+msgid "Certificate has been successfully installed."
+msgstr ""
+
+msgid "Certificate is already installed. Nothing to do."
+msgstr ""
+
+msgid "Removing certificate {0} from root keystore."
+msgstr ""
+
+msgid "Certificate has been successfully uninstalled."
+msgstr ""
+
+msgid "Certificate is not installed. Nothing to do."
+msgstr ""
+
+msgid "Permitted actions:"
+msgstr ""
+
+msgid "Testing OSM API URL ''{0}''"
+msgstr ""
+
+msgid ""
+"<html>''{0}'' is not a valid OSM API URL.<br>Please check the spelling and "
+"validate again.</html>"
+msgstr ""
+
+msgid "Invalid API URL"
+msgstr ""
+
+msgid ""
+"<html>Failed to build URL ''{0}'' for validating the OSM API "
+"server.<br>Please check the spelling of ''{1}'' and validate again.</html>"
+msgstr ""
+
+msgid ""
+"<html>Failed to connect to the URL ''{0}''.<br>Please check the spelling of "
+"''{1}'' and your Internet connection and validate again.</html>"
+msgstr ""
+
+msgid "Connection to API failed"
+msgstr ""
+
+msgid ""
+"<html>Failed to retrieve a list of changesets from the OSM API server "
+"at<br>''{1}''. The server responded with the return code {0} instead of "
+"200.<br>Please check the spelling of ''{1}'' and validate again.</html>"
+msgstr ""
+
+msgid ""
+"<html>The OSM API server at ''{0}'' did not return a valid response.<br>It "
+"is likely that ''{0}'' is not an OSM API server.<br>Please check the "
+"spelling of ''{0}'' and validate again.</html>"
+msgstr ""
+
+msgid "Authentication"
+msgstr ""
+
+msgid "Configure your identity and how to authenticate at the OSM server"
+msgstr ""
+
+msgid "Use Basic Authentication"
+msgstr ""
+
+msgid ""
+"Select to use HTTP basic authentication with your OSM username and password"
+msgstr ""
+
+msgid "Use OAuth"
+msgstr ""
+
+msgid "Select to use OAuth as authentication mechanism"
+msgstr ""
+
+msgid ""
+"Unsupported value in preference ''{0}'', got ''{1}''. Using authentication "
+"method ''Basic Authentication''."
+msgstr ""
+
+msgid "OSM username:"
+msgstr ""
+
+msgid "OSM password:"
+msgstr ""
+
+msgid "Failed to retrieve OSM credentials from credential manager."
+msgstr ""
+
+msgid "Current credential manager is of type ''{0}''"
+msgstr ""
+
+msgid "Failed to save OSM credentials to credential manager."
+msgstr ""
+
+msgid "Periodically check for new messages"
+msgstr ""
+
+msgid "Check interval (minutes):"
+msgstr ""
+
+msgid "Max age for closed notes (days):"
+msgstr ""
+
+msgid ""
+"Specifies the number of days a note needs to be closed to no longer be "
+"downloaded"
+msgstr ""
+
+msgid "Failed to retrieve OAuth Access Token from credential manager"
+msgstr ""
+
+msgid "Failed to store OAuth Access Token to credentials manager"
+msgstr ""
+
+msgid ""
+"You do not have an Access Token yet to access the OSM server using OAuth. "
+"Please authorize first."
+msgstr ""
+
+msgid ""
+"You already have an Access Token to access the OSM server using OAuth."
+msgstr ""
+
+msgid "Save to preferences"
+msgstr ""
+
+msgid "Click to step through the OAuth authorization process"
+msgstr ""
+
+msgid "New Access Token"
+msgstr ""
+
+msgid ""
+"Click to step through the OAuth authorization process and generate a new "
+"Access Token"
+msgstr ""
+
+msgid "Click test access to the OSM server with the current access token"
+msgstr ""
+
+msgid "<html>Use the default OSM server URL (<strong>{0}</strong>)</html>"
+msgstr ""
+
+msgid "Test the API URL"
+msgstr ""
+
+msgid "The API URL is valid."
+msgstr ""
+
+msgid "Validation failed. The API URL seems to be invalid."
+msgstr ""
+
+msgid "OSM API URL must not be empty. Please enter the OSM API URL."
+msgstr ""
+
+msgid "The current value is not a valid URL"
+msgstr ""
+
+msgid "Please enter the OSM API URL."
+msgstr ""
+
+msgid "Proxy settings"
+msgstr ""
+
+msgid "Configure whether to use a proxy server"
+msgstr ""
+
+msgid "Host:"
+msgstr ""
+
+msgctxt "server"
+msgid "Port:"
+msgstr ""
+
+msgid ""
+"Please enter a username and a password if your proxy requires authentication."
+msgstr ""
+
+msgid "Password:"
+msgstr ""
+
+msgid "No proxy"
+msgstr ""
+
+msgid "Use standard system settings"
+msgstr ""
+
+msgid ""
+"Use standard system settings (disabled. Start JOSM with <tt>-"
+"Djava.net.useSystemProxies=true</tt> to enable)"
+msgstr ""
+
+msgid "Manually configure a HTTP proxy"
+msgstr ""
+
+msgid "Use a SOCKS proxy"
+msgstr ""
+
+msgid ""
+"JOSM is configured to use proxies from the system setting, but the JVM is "
+"not configured to retrieve them. Resetting preferences to ''No proxy''"
+msgstr ""
+
+msgid "Connection Settings"
+msgstr ""
+
+msgid "Connection Settings for the OSM server."
+msgstr ""
+
+msgid "Action"
+msgstr ""
+
+msgid "Shortcut"
+msgstr ""
+
+msgid "Shortcut Background: User"
+msgstr ""
+
+msgid "Shortcut Background: Modified"
+msgstr ""
+
+msgid "Use default"
+msgstr ""
+
+msgid "Key:"
+msgstr ""
+
+msgid "Attention: Use real keyboard keys only!"
+msgstr ""
+
+msgid "Keyboard Shortcuts"
+msgstr ""
+
+msgid "Changing keyboard shortcuts manually."
+msgstr ""
+
+msgid "Data validator"
+msgstr ""
+
+msgid ""
+"An OSM data validator that checks for common errors made by users and editor "
+"programs."
+msgstr ""
+
+msgid "Available rules:"
+msgstr ""
+
+msgid "Active rules:"
+msgstr ""
+
+msgid "Add a new rule by entering filename or URL"
+msgstr ""
+
+msgid "New rule entry:"
+msgstr ""
+
+msgid "Remove the selected rules from the list of active rules"
+msgstr ""
+
+msgid "Edit the filename or URL for the selected active rule"
+msgstr ""
+
+msgid "Add the selected available rules to the list of active rules"
+msgstr ""
+
+msgid "Reloads the list of available rules from ''{0}''"
+msgstr ""
+
+msgid "Loading rule sources from ''{0}''"
+msgstr ""
+
+msgid ""
+"<html>Failed to load the list of rule sources "
+"from<br>''{0}''.<br><br>Details (untranslated):<br>{1}</html>"
+msgstr ""
+
+msgid "Warning: illegal format of entry in rule list ''{0}''. Got ''{1}''"
+msgstr ""
+
+msgid "Checks for errors on addresses"
+msgstr ""
+
+msgid "Tag combinations"
+msgstr ""
+
+msgid "Checks for missing tag or suspicious combinations"
+msgstr ""
+
+msgid "Deprecated features"
+msgstr ""
+
+msgid "Checks for deprecated features"
+msgstr ""
+
+msgid "Geometry"
+msgstr ""
+
+msgid "Checks for geometry errors"
+msgstr ""
+
+msgid "Checks for errors on highways"
+msgstr ""
+
+msgid "Multiple values"
+msgstr ""
+
+msgid "Checks for wrong multiple values"
+msgstr ""
+
+msgid "Numeric values"
+msgstr ""
+
+msgid "Checks for wrong numeric values"
+msgstr ""
+
+msgid "Power"
+msgstr ""
+
+msgid "Checks for errors on power infrastructures"
+msgstr ""
+
+msgid "Religion"
+msgstr ""
+
+msgid "Checks for errors on religious objects"
+msgstr ""
+
+msgid "Checks for errors on relations"
+msgstr ""
+
+msgid "Unnecessary tags"
+msgstr ""
+
+msgid "Checks for unnecessary tags"
+msgstr ""
+
+msgid "Wikipedia"
+msgstr ""
+
+msgid "Checks for wrong wikipedia tags"
+msgstr ""
+
+msgid "Tag checker rules"
+msgstr ""
+
+msgid "Choose Tag checker rules to enable"
+msgstr ""
+
+msgid "Use ignore list."
+msgstr ""
+
+msgid "Use the ignore list to suppress warnings."
+msgstr ""
+
+msgid "Use error layer."
+msgstr ""
+
+msgid "Use the error layer to display problematic elements."
+msgstr ""
+
+msgid "Show informational level."
+msgstr ""
+
+msgid "Show the informational tests."
+msgstr ""
+
+msgid "Show informational level on upload."
+msgstr ""
+
+msgid "Show the informational tests in the upload check windows."
+msgstr ""
+
+msgid "On demand"
+msgstr ""
+
+msgid "On upload"
+msgstr ""
+
+msgid "Tests"
+msgstr ""
+
+msgid "Choose tests to enable"
+msgstr ""
+
+msgid "multiple"
+msgstr ""
+
+msgid "Remove old keys from up to {0} object"
+msgid_plural "Remove old keys from up to {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete the selection in the tag table"
+msgstr ""
+
+msgid "Add a new tag"
+msgstr ""
+
+msgid "Paste tags from buffer"
+msgstr ""
+
+msgid "Use preset ''{0}'' of group ''{1}''"
+msgstr ""
+
+msgid "Use preset ''{0}''"
+msgstr ""
+
+msgid "Elements of type {0} are supported."
+msgstr ""
+
+msgid "Edit also …"
+msgstr ""
+
+msgid "Apply Preset"
+msgstr ""
+
+msgid "New relation"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
+msgid "Change {0} object"
+msgid_plural "Change {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Nothing selected!"
+msgstr ""
+
+msgid "Selection unsuitable!"
+msgstr ""
+
+msgid "Change Tags"
+msgstr ""
+
+msgid "Add or remove toolbar button"
+msgstr ""
+
+msgid "Unknown requisite: {0}"
+msgstr ""
+
+msgid "Illegal member expression: {0}"
+msgstr ""
+
+msgid "More information about this feature"
+msgstr ""
+
+msgid "Available roles"
+msgstr ""
+
+msgid "role"
+msgstr ""
+
+msgid "count"
+msgstr ""
+
+msgid "elements"
+msgstr ""
+
+msgid "Optional Attributes:"
+msgstr ""
+
+msgid "Select auto-increment of {0} for this field"
+msgstr ""
+
+msgid "Cancel auto-increment for this field"
+msgstr ""
+
+msgid "{0}:"
+msgstr ""
+
+msgid ""
+"Warning in tagging preset \"{0}-{1}\": Ignoring ''{2}'' attribute as ''{3}'' "
+"elements are given."
+msgstr ""
+
+msgid ""
+"Broken tagging preset \"{0}-{1}\" - Java method given in ''values_from'' is "
+"not \"{2}\""
+msgstr ""
+
+msgid ""
+"Broken tagging preset \"{0}-{1}\" - Java method given in ''values_from'' "
+"threw {2} ({3})"
+msgstr ""
+
+msgid ""
+"Broken tagging preset \"{0}-{1}\" - number of items in ''display_values'' "
+"must be the same as in ''values''"
+msgstr ""
+
+msgid ""
+"Broken tagging preset \"{0}-{1}\" - number of items in "
+"''short_descriptions'' must be the same as in ''values''"
+msgstr ""
+
+msgid "Unknown type: {0}"
+msgstr ""
+
+msgid "Preset group {1} / {0}"
+msgstr ""
+
+msgid "Preset group {0}"
+msgstr ""
+
+msgid "Reference {0} is being used before it was defined"
+msgstr ""
+
+msgid "Roles cannot appear more than once"
+msgstr ""
+
+msgid "Preset role element without parent"
+msgstr ""
+
+msgid "Preset sub element without parent"
+msgstr ""
+
+msgid "Error parsing {0}: "
+msgstr ""
+
+msgid "Search preset"
+msgstr ""
+
+msgid "Show preset search dialog"
+msgstr ""
+
+msgid "Search presets"
+msgstr ""
+
+msgid "Presets"
+msgstr ""
+
+msgid "Search for objects by preset"
+msgstr ""
+
+msgid "Show only applicable to selection"
+msgstr ""
+
+msgid "Search in tags"
+msgstr ""
+
+msgid "Add toolbar button"
+msgstr ""
+
+msgid ""
+"Adjustable {0} not registered yet. Cannot set participation in synchronized "
+"adjustment."
+msgstr ""
+
+msgid "Adjustable {0} not registered yet."
+msgstr ""
+
+msgid "Some of the key listeners forgot to remove themselves: {0}"
+msgstr ""
+
+msgid "Some of the key modifier listeners forgot to remove themselves: {0}"
+msgstr ""
+
+msgid "All files (*.*)"
+msgstr ""
+
+msgid "Received error page:"
+msgstr ""
+
+msgid "Min. latitude"
+msgstr ""
+
+msgid "Min. longitude"
+msgstr ""
+
+msgid "Max. latitude"
+msgstr ""
+
+msgid "Max. longitude"
+msgstr ""
+
+msgid ""
+"URL from www.openstreetmap.org (you can paste a download URL here to specify "
+"a bounding box)"
+msgstr ""
+
+msgid ""
+"The current value is not a valid changeset ID. Please enter an integer value "
+"> 0"
+msgstr ""
+
+msgid "Add a new source to the list."
+msgstr ""
+
+msgid "Edit the selected source."
+msgstr ""
+
+msgid "Delete the selected source from the list."
+msgstr ""
+
+msgid ""
+"The current value is not a valid OSM ID. Please enter an integer value > 0"
+msgstr ""
+
+msgid "false: the property is explicitly switched off"
+msgstr ""
+
+msgid "true: the property is explicitly switched on"
+msgstr ""
+
+msgid ""
+"partial: different selected objects have different values, do not change"
+msgstr ""
+
+msgid "unset: do not set this property on the selected objects"
+msgstr ""
+
+msgid "Cut"
+msgstr ""
+
+msgid "Right click = copy to clipboard"
+msgstr ""
+
+msgid "Missing mandatory attribute ''{0}''."
+msgstr ""
+
+msgid ""
+"Illegal value for mandatory attribute ''{0}'' of type long. Got ''{1}''."
+msgstr ""
+
+msgid ""
+"Illegal value for mandatory attribute ''{0}'' of type long (>=0). Got "
+"''{1}''."
+msgstr ""
+
+msgid "Illegal value for attribute ''{0}'' of type double. Got ''{1}''."
+msgstr ""
+
+msgid ""
+"Illegal value for mandatory attribute ''{0}'' of type boolean. Got ''{1}''."
+msgstr ""
+
+msgid ""
+"Illegal value for mandatory attribute ''{0}'' of type OsmPrimitiveType. Got "
+"''{1}''."
+msgstr ""
+
+msgid ""
+"Way with external ID ''{0}'' includes missing node with external ID ''{1}''."
+msgstr ""
+
+msgid "Deleted node {0} is part of way {1}"
+msgstr ""
+
+msgid ""
+"Way {0} with {1} nodes has incomplete nodes because at least one node was "
+"missing in the loaded data."
+msgstr ""
+
+msgid ""
+"Relation with external id ''{0}'' refers to a missing primitive with "
+"external id ''{1}''."
+msgstr ""
+
+msgid "Deleted member {0} is used by relation {1}"
+msgstr ""
+
+msgid "All Formats"
+msgstr ""
+
+msgid "Downloading points {0} to {1}..."
+msgstr ""
+
+msgid "Contacting OSM Server..."
+msgstr ""
+
+msgid "Failed to open input stream for resource ''{0}''"
+msgstr ""
+
+msgid ""
+"Failed to open file with extension ''{2}'' and namepart ''{3}'' in zip file "
+"''{0}''. Exception was: {1}"
+msgstr ""
+
+msgid "Failed to rename file {0} to {1}."
+msgstr ""
+
+msgid "Failed to load {0}, use cached file and retry next time: {1}"
+msgstr ""
+
+msgid ""
+"Unexpected response from HTTP server. Got {0} response without ''Location'' "
+"header. Can''t redirect. Aborting."
+msgstr ""
+
+msgid "Too many redirects to the download URL detected. Aborting."
+msgstr ""
+
+msgid "Download redirected to ''{0}''"
+msgstr ""
+
+msgid "Failed to read from ''{0}''. Server responded with status code {1}."
+msgstr ""
+
+msgid ""
+"Illegal value of attribute ''{0}'' of element ''{1}'' in server "
+"capabilities. Got ''{2}''"
+msgstr ""
+
+msgid "Failed to parse date ''{0}'' replied by server."
+msgstr ""
+
+msgid ""
+"Unexpected format of error header for conflict in changeset update. Got "
+"''{0}''"
+msgstr ""
+
+msgid "Illegal longitude value for parameter ''{0}'', got {1}"
+msgstr ""
+
+msgid "Illegal latitude value for parameter ''{0}'', got {1}"
+msgstr ""
+
+msgid "Unexpected value for ''{0}'' in changeset query url, got {1}"
+msgstr ""
+
+msgid ""
+"Cannot create a changeset query including both the query parameters ''uid'' "
+"and ''display_name''"
+msgstr ""
+
+msgid "Unsupported parameter ''{0}'' in changeset query string"
+msgstr ""
+
+msgid "Unexpected format for port number in preference ''{0}''. Got ''{1}''."
+msgstr ""
+
+msgid "The proxy will not be used."
+msgstr ""
+
+msgid "Illegal port number in preference ''{0}''. Got {1}."
+msgstr ""
+
+msgid ""
+"Unexpected value for preference ''{0}'' found. Got ''{1}''. Will use no "
+"proxy."
+msgstr ""
+
+msgid ""
+"Unexpected parameters for HTTP proxy. Got host ''{0}'' and port ''{1}''."
+msgstr ""
+
+msgid ""
+"Unexpected parameters for SOCKS proxy. Got host ''{0}'' and port ''{1}''."
+msgstr ""
+
+msgid ""
+"Connection to proxy ''{0}'' for URI ''{1}'' failed. Exception was: {2}"
+msgstr ""
+
+msgid ""
+"The JVM is not configured to lookup proxies from the system settings. The "
+"property ''java.net.useSystemProxies'' was missing at startup time.  Will "
+"not use a proxy."
+msgstr ""
+
+msgid "Parsing response from server..."
+msgstr ""
+
+msgid "Unexpected XML element with name ''{0}''"
+msgstr ""
+
+msgid "Could not export ''{0}''."
+msgstr ""
+
+msgid "Could not import ''{0}''."
+msgstr ""
+
+msgid "Could not import files."
+msgstr ""
+
+msgid "<html>Could not read file ''{0}''.<br>Error is:<br>{1}</html>"
+msgstr ""
+
+msgid "<html>Could not read files.<br>Error is:<br>{0}</html>"
+msgstr ""
+
+msgid "GeoJSON Files"
+msgstr ""
+
+msgid "Projected GeoJSON Files"
+msgstr ""
+
+msgid "Layer ''{0}'' not supported"
+msgstr ""
+
+msgid ""
+"Note: GPL is not compatible with the OSM license. Do not upload GPL licensed "
+"tracks."
+msgstr ""
+
+msgid "GPS track description"
+msgstr ""
+
+msgid "Add author information"
+msgstr ""
+
+msgid "Real name"
+msgstr ""
+
+msgid "E-Mail"
+msgstr ""
+
+msgid "Copyright (URL)"
+msgstr ""
+
+msgid "Predefined"
+msgstr ""
+
+msgid "Copyright year"
+msgstr ""
+
+msgid "Keywords"
+msgstr ""
+
+msgid "Export options"
+msgstr ""
+
+msgid "Export and Save"
+msgstr ""
+
+msgid ""
+"Error while exporting {0}:\n"
+"{1}"
+msgstr ""
+
+msgid "Choose a predefined license"
+msgstr ""
+
+msgid "GPX Files"
+msgstr ""
+
+msgid "Parsing data for layer ''{0}'' failed"
+msgstr ""
+
+msgid ""
+"Error occurred while parsing gpx data for layer ''{0}''. Only a part of the "
+"file will be available."
+msgstr ""
+
+msgid ""
+"Error occurred while parsing gpx file ''{0}''. Only a part of the file will "
+"be available."
+msgstr ""
+
+msgid "Parse error: invalid document structure for GPX document."
+msgstr ""
+
+msgid "(at line {0}, column {1})"
+msgstr ""
+
+msgid "Unknown mode {0}."
+msgstr ""
+
+msgid "Image Files"
+msgstr ""
+
+msgid "folder"
+msgstr ""
+
+msgid "Looking for image files"
+msgstr ""
+
+msgid "No image files found."
+msgstr ""
+
+msgid "get number of unread messages"
+msgstr ""
+
+msgid "You have {0} unread message."
+msgid_plural "You have {0} unread messages."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click here to see your inbox."
+msgstr ""
+
+msgid "Message notifier"
+msgstr ""
+
+msgid "{0} not available (offline mode)"
+msgstr ""
+
+msgid ""
+"No primitive with id {0} in local dataset. Cannot infer primitive type."
+msgstr ""
+
+msgid "Fetching a package of nodes from ''{0}''"
+msgstr ""
+
+msgid "Fetching a package of ways from ''{0}''"
+msgstr ""
+
+msgid "Fetching a package of relations from ''{0}''"
+msgstr ""
+
+msgid "Downloading {0} object from ''{1}''"
+msgid_plural "Downloading {0} objects from ''{1}''"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"Server replied with response code 404, retrying with an individual request "
+"for each object."
+msgstr ""
+
+msgid "Downloading OSM data..."
+msgstr ""
+
+msgid "Fetching node with id {0} from ''{1}''"
+msgstr ""
+
+msgid "Fetching way with id {0} from ''{1}''"
+msgstr ""
+
+msgid "Fetching relation with id {0} from ''{1}''"
+msgstr ""
+
+msgid "Server replied with response code 404 for id {0}. Skipping."
+msgstr ""
+
+msgid "NMEA-0183 Files"
+msgstr ""
+
+msgid "Coordinates imported: {0}"
+msgstr ""
+
+msgid "Malformed sentences: {0}"
+msgstr ""
+
+msgid "Checksum errors: {0}"
+msgstr ""
+
+msgid "Unknown sentences: {0}"
+msgstr ""
+
+msgid "Zero coordinates: {0}"
+msgstr ""
+
+msgid "NMEA import success:"
+msgstr ""
+
+msgid "NMEA import failure!"
+msgstr ""
+
+msgid "Note Files"
+msgstr ""
+
+msgid "OSM API"
+msgstr ""
+
+msgid "JOSM website"
+msgstr ""
+
+msgid "Unable to access ''{0}'': {1} not available (offline mode)"
+msgstr ""
+
+msgid "Unable to initialize OSM API."
+msgstr ""
+
+msgid "This version of JOSM is incompatible with the configured server."
+msgstr ""
+
+msgid ""
+"It supports protocol version 0.6, while the server says it supports {0} to "
+"{1}."
+msgstr ""
+
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
+msgid "Unexpected format of ID replied by the server. Got ''{0}''."
+msgstr ""
+
+msgid ""
+"Unexpected format of new version of modified primitive ''{0}''. Got ''{1}''."
+msgstr ""
+
+msgid "Creating changeset..."
+msgstr ""
+
+msgid "Successfully opened changeset {0}"
+msgstr ""
+
+msgid "Changeset ID > 0 expected. Got {0}."
+msgstr ""
+
+msgid "Updating changeset..."
+msgstr ""
+
+msgid "Updating changeset {0}..."
+msgstr ""
+
+msgid "Closing changeset..."
+msgstr ""
+
+msgid "No changeset present for diff upload."
+msgstr ""
+
+msgid "Preparing upload request..."
+msgstr ""
+
+msgid "Waiting 10 seconds ... "
+msgstr ""
+
+msgid "Starting retry {0} of {1} in {2} seconds ..."
+msgstr ""
+
+msgid "OK - trying again."
+msgstr ""
+
+msgid "Starting retry {0} of {1}."
+msgstr ""
+
+msgid "Current changeset is null. Cannot upload data."
+msgstr ""
+
+msgid "ID of current changeset > 0 required. Current ID is {0}."
+msgstr ""
+
+msgid "Open changeset expected. Got closed changeset with id {0}."
+msgstr ""
+
+msgid "Note upload failed"
+msgstr ""
+
+msgid "Error parsing note response from server"
+msgstr ""
+
+msgid "(Code={0})"
+msgstr ""
+
+msgid "The server replied an error with code {0}."
+msgstr ""
+
+msgid "OSM Server Files bzip2 compressed"
+msgstr ""
+
+msgid "Prolog of OsmChange document already written. Please write only once."
+msgstr ""
+
+msgid "Prolog of OsmChange document not written yet. Please write first."
+msgstr ""
+
+msgid "OsmChange File"
+msgstr ""
+
+msgid "File ''{0}'' does not exist."
+msgstr ""
+
+msgid "No data found in file {0}."
+msgstr ""
+
+msgid "Open OsmChange file"
+msgstr ""
+
+msgid "Unsupported version: {0}"
+msgstr ""
+
+msgid ""
+"Unsupported start element ''{0}'' in changeset content at position "
+"({1},{2}). Skipping."
+msgstr ""
+
+msgid ""
+"Illegal document structure. Found node, way, or relation outside of "
+"''create'', ''modify'', or ''delete''."
+msgstr ""
+
+msgid ""
+"Unsupported end element ''{0}'' in changeset content at position ({1},{2}). "
+"Skipping."
+msgstr ""
+
+msgid "Parsing changeset content ..."
+msgstr ""
+
+msgid "Illegal boolean value for attribute ''{0}''. Got ''{1}''."
+msgstr ""
+
+msgid "Illegal value for attribute ''{0}''. Got ''{1}''."
+msgstr ""
+
+msgid "Illegal numeric value for attribute ''{0}''. Got ''{1}''."
+msgstr ""
+
+msgid "Missing mandatory attribute ''{0}'' of XML element {1}."
+msgstr ""
+
+msgid "Undefined element ''{0}'' found in input stream. Aborting."
+msgstr ""
+
+msgid "Parsing list of changesets..."
+msgstr ""
+
+msgid "Failed to sign a HTTP connection with an OAuth Authentication header"
+msgstr ""
+
+msgid "Unexpected value for preference ''{0}''. Got ''{1}''."
+msgstr ""
+
+msgid "<html>An error occurred while saving.<br>Error is:<br>{0}</html>"
+msgstr ""
+
+msgid ""
+"<html>An error occurred while restoring backup file.<br>Error "
+"is:<br>{0}</html>"
+msgstr ""
+
+msgid "OSM Server Files gzip compressed"
+msgstr ""
+
+msgid "Parsing OSM history data ..."
+msgstr ""
+
+msgid "OSM Server Files"
+msgstr ""
+
+msgid "Invalid dataset"
+msgstr ""
+
+msgid "No data found for layer ''{0}''."
+msgstr ""
+
+msgid "No data found in file ''{0}''."
+msgstr ""
+
+msgid "Open OSM file"
+msgstr ""
+
+msgid "Reading was canceled"
+msgstr ""
+
+msgid ""
+"Missing mandatory attributes on element ''bounds''. Got "
+"minlon=''{0}'',minlat=''{1}'',maxlon=''{3}'',maxlat=''{4}'', origin=''{5}''."
+msgstr ""
+
+msgid "Deleted way {0} contains nodes"
+msgstr ""
+
+msgid "Missing mandatory attribute ''{0}'' on <nd> of way {1}."
+msgstr ""
+
+msgid "Illegal value of attribute ''ref'' of element <nd>. Got {0}."
+msgstr ""
+
+msgid "Deleted relation {0} contains members"
+msgstr ""
+
+msgid "Missing attribute ''ref'' on member in relation {0}."
+msgstr ""
+
+msgid ""
+"Illegal value for attribute ''ref'' on member in relation {0}. Got {1}"
+msgstr ""
+
+msgid "Missing attribute ''type'' on member {0} in relation {1}."
+msgstr ""
+
+msgid ""
+"Illegal value for attribute ''type'' on member {0} in relation {1}. Got {2}."
+msgstr ""
+
+msgid "Incomplete <member> specification with ref=0"
+msgstr ""
+
+msgid "Missing key or value attribute in tag."
+msgstr ""
+
+msgid "Undefined element ''{0}'' found in input stream. Skipping."
+msgstr ""
+
+msgid "Illegal object with ID=0."
+msgstr ""
+
+msgid ""
+"Illegal value for attribute ''version'' on OSM primitive with ID {0}. Got "
+"{1}."
+msgstr ""
+
+msgid ""
+"Normalizing value of attribute ''version'' of element {0} to {2}, API "
+"version is ''{3}''. Got {1}."
+msgstr ""
+
+msgid "Unknown or unsupported API version. Got {0}."
+msgstr ""
+
+msgid "Missing attribute ''version'' on OSM primitive with ID {0}."
+msgstr ""
+
+msgid ""
+"Illegal value for attribute ''changeset'' on new object {1}. Got {0}. "
+"Resetting to 0."
+msgstr ""
+
+msgid "Illegal value for attribute ''changeset''. Got {0}."
+msgstr ""
+
+msgid "Missing required attribute ''{0}''."
+msgstr ""
+
+msgid "Illegal long value for attribute ''{0}''. Got ''{1}''."
+msgstr ""
+
+msgid "{0} bytes have been read"
+msgstr ""
+
+msgid "Prepare OSM data..."
+msgstr ""
+
+msgid "Parsing OSM data..."
+msgstr ""
+
+msgid "Preparing data set..."
+msgstr ""
+
+msgid "Line {0} column {1}: "
+msgstr ""
+
+msgid "Downloading referring ways ..."
+msgstr ""
+
+msgid "Downloading referring relations ..."
+msgstr ""
+
+msgid "Reading changesets..."
+msgstr ""
+
+msgid "Downloading changesets ..."
+msgstr ""
+
+msgid "Reading changeset {0} ..."
+msgstr ""
+
+msgid "Downloading changeset {0} ..."
+msgstr ""
+
+msgid "Downloading {0} changeset ..."
+msgid_plural "Downloading {0} changesets ..."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "({0}/{1}) Downloading changeset {2} ..."
+msgstr ""
+
+msgid "Downloading content for changeset {0} ..."
+msgstr ""
+
+msgid "Downloading history..."
+msgstr ""
+
+msgid "Contacting Server..."
+msgstr ""
+
+msgid "Downloading OSM notes..."
+msgstr ""
+
+msgid "Failed to open connection to API {0}."
+msgstr ""
+
+msgid ""
+"Could not connect to the OSM server. Please check your internet connection."
+msgstr ""
+
+msgid "Reading error text failed."
+msgstr ""
+
+msgid "XML tag <user> is missing."
+msgstr ""
+
+msgid "Missing attribute ''{0}'' on XML tag ''{1}''."
+msgstr ""
+
+msgid "Illegal value for attribute ''{0}'' on XML tag ''{1}''. Got {2}."
+msgstr ""
+
+msgid "Reading user info ..."
+msgstr ""
+
+msgid "Starting to upload with one request per primitive ..."
+msgstr ""
+
+msgid "{0}% ({1}/{2}), {3} left. Uploading node ''{4}'' (id: {5})"
+msgstr ""
+
+msgid "{0}% ({1}/{2}), {3} left. Uploading way ''{4}'' (id: {5})"
+msgstr ""
+
+msgid "{0}% ({1}/{2}), {3} left. Uploading relation ''{4}'' (id: {5})"
+msgstr ""
+
+msgid "Starting to upload in one request ..."
+msgstr ""
+
+msgid "Value >0 expected for parameter ''{0}'', got {1}"
+msgstr ""
+
+msgid "Starting to upload in chunks..."
+msgstr ""
+
+msgid "({0}/{1}) Uploading {2} object..."
+msgid_plural "({0}/{1}) Uploading {2} objects..."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Uploading data ..."
+msgstr ""
+
+msgid "Unexpected id 0 for osm primitive found"
+msgstr ""
+
+msgid "OSM Server Files zip compressed"
+msgstr ""
+
+msgid "WMS Files (*.wms)"
+msgstr ""
+
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
+msgid ""
+"<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
+"is stored in plain text in the JOSM preferences file. Furthermore, it is "
+"transferred <strong>unencrypted</strong> in every request sent to the OSM "
+"server. <strong>Do not use a valuable password.</strong></p></body></html>"
+msgstr ""
+
+msgid "Save user and password (unencrypted)"
+msgstr ""
+
+msgid "<delete from {0} objects>"
+msgstr ""
+
+msgid "Old values of"
+msgstr ""
+
+msgid "Add tags to selected objects"
+msgstr ""
+
+msgid "Add selected tags"
+msgstr ""
+
+msgid "Add all tags"
+msgstr ""
+
+msgid "Add checked tags to selected objects"
+msgstr ""
+
+msgid "Shift+Enter: Add all tags to selected objects"
+msgstr ""
+
+msgid "Assume"
+msgstr ""
+
+msgid "Existing values"
+msgstr ""
+
+msgid "Enable the checkbox to accept the value"
+msgstr ""
+
+msgid "Accept all tags from {0} for this session"
+msgstr ""
+
+msgid "Load data from API"
+msgstr ""
+
+msgid "Import data from URL"
+msgstr ""
+
+msgid "Open local files"
+msgstr ""
+
+msgid "Load imagery layers"
+msgstr ""
+
+msgid "Change the selection"
+msgstr ""
+
+msgid "Change the viewport"
+msgstr ""
+
+msgid "Create new objects"
+msgstr ""
+
+msgid "Read protocol version"
+msgstr ""
+
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
+msgstr ""
+
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
+msgstr ""
+
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
+msgstr ""
+
+msgid "RemoteControl::Server {0}:{1} stopped."
+msgstr ""
+
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
+msgstr ""
+
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
+msgstr ""
+
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
+msgstr ""
+
+msgid "Remote Control has been asked to create a new node."
+msgstr ""
+
+msgid "There is no layer opened to add node"
+msgstr ""
+
+msgid "Remote Control has been asked to create a new way."
+msgstr ""
+
+msgid "Invalid coordinates: {0}"
+msgstr ""
+
+msgid "There is no layer opened to add way"
+msgstr ""
+
+msgid "Add way"
+msgstr ""
+
+msgid ""
+"Remote Control has been asked to report its supported features. This enables "
+"web sites to guess a running JOSM version"
+msgstr ""
+
+msgid ""
+"Remote Control has been asked to load an imagery layer from the following "
+"URL:"
+msgstr ""
+
+msgid "Remote imagery"
+msgstr ""
+
+msgid "Remote Control has been asked to import data from the following URL:"
+msgstr ""
+
+msgid "Remote Control has been asked to load data from the API."
+msgstr ""
+
+msgid "The latitudes must be between {0} and {1}"
+msgstr ""
+
+msgid "The longitudes must be between {0} and {1}"
+msgstr ""
+
+msgid "The minima must be less than the maxima"
+msgstr ""
+
+msgid "Remote Control has been asked to load the following data:"
+msgstr ""
+
+msgid "Loading data"
+msgstr ""
+
+msgid ""
+"Remote Control has been asked to load objects (specified by their id) from "
+"the API."
+msgstr ""
+
+msgid "Remote Control has been asked to open a local file."
+msgstr ""
+
+msgid "Do you want to allow this?"
+msgstr ""
+
+msgid "Confirm Remote Control action"
+msgstr ""
+
+msgid ""
+"Remote Control has been asked to report its protocol version. This enables "
+"web sites to detect a running JOSM."
+msgstr ""
+
+msgid ""
+"Version ''{0}'' of meta data for geoimage layer is not supported. Expected: "
+"0.1"
+msgstr ""
+
+msgid "Data:"
+msgstr ""
+
+msgid "local file"
+msgstr ""
+
+msgid "Link to a GPX file on your local disk."
+msgstr ""
+
+msgid "include"
+msgstr ""
+
+msgid "Include GPX data in the .joz session file."
+msgstr ""
+
+msgid "No file association"
+msgstr ""
+
+msgid "GPX data will be included in the session file."
+msgstr ""
+
+msgid ""
+"Version ''{0}'' of meta data for gpx track layer is not supported. Expected: "
+"0.1"
+msgstr ""
+
+msgid "File name expected for layer no. {0}"
+msgstr ""
+
+msgid ""
+"Version ''{0}'' of meta data for imagery layer is not supported. Expected: "
+"0.1"
+msgstr ""
+
+msgid ""
+"Version ''{0}'' of meta data for marker layer is not supported. Expected: 0.1"
+msgstr ""
+
+msgid "Layer contains unsaved data - save to file."
+msgstr ""
+
+msgid "Layer does not contain unsaved data."
+msgstr ""
+
+msgid "Link to a OSM data file on your local disk."
+msgstr ""
+
+msgid "Include OSM data in the .joz session file."
+msgstr ""
+
+msgid "OSM data will be included in the session file."
+msgstr ""
+
+msgid ""
+"Version ''{0}'' of meta data for osm data layer is not supported. Expected: "
+"0.1"
+msgstr ""
+
+msgid "Session file (*.jos, *.joz)"
+msgstr ""
+
+msgid "Unable to locate file  ''{0}''."
+msgstr ""
+
+msgid "Unsupported scheme ''{0}'' in URI ''{1}''."
+msgstr ""
+
+msgid "Unexpected root element ''{0}'' in session file"
+msgstr ""
+
+msgid "Version ''{0}'' of session file is not supported. Expected: 0.1"
+msgstr ""
+
+msgid "missing mandatory attribute ''index'' for element ''layer''"
+msgstr ""
+
+msgid "unexpected format of attribute ''index'' for element ''layer''"
+msgstr ""
+
+msgid "attribute ''index'' ({0}) for element ''layer'' must be unique"
+msgstr ""
+
+msgid "missing layer with index {0}"
+msgstr ""
+
+msgid "missing mandatory attribute ''name'' for element ''layer''"
+msgstr ""
+
+msgid "missing mandatory attribute ''type'' for element ''layer''"
+msgstr ""
+
+msgid "Unable to load layer"
+msgstr ""
+
+msgid ""
+"Cannot load layer of type ''{0}'' because no suitable importer was found."
+msgstr ""
+
+msgid ""
+"Cannot load layer {0} because it depends on layer {1} which has been skipped."
+msgstr ""
+
+msgid "Error loading layer"
+msgstr ""
+
+msgid "<html>Could not load layer {0} ''{1}''.<br>Error is:<br>{2}</html>"
+msgstr ""
+
+msgid "Skip layer and continue"
+msgstr ""
+
+msgid "expected .jos file inside .joz archive"
+msgstr ""
+
+msgid "Skip download"
+msgstr ""
+
+msgid "Download Plugin"
+msgstr ""
+
+msgid "Skip Download"
+msgstr ""
+
+msgid "JOSM version {0} required for plugin {1}."
+msgstr ""
+
+msgid "Download skipped"
+msgstr ""
+
+msgid ""
+"Cannot download plugin ''{0}''. Its download link is not known. Skipping "
+"download."
+msgstr ""
+
+msgid ""
+"Cannot download plugin ''{0}''. Its download link ''{1}'' is not a valid "
+"URL. Skipping download."
+msgstr ""
+
+msgid "Failed to create plugin directory ''{0}''"
+msgstr ""
+
+msgid "Downloading Plugin {0}..."
+msgstr ""
+
+msgid "An error occurred in plugin {0}"
+msgstr ""
+
+msgid "integrated into main program"
+msgstr ""
+
+msgid "replaced by new {0} plugin"
+msgstr ""
+
+msgid "no longer required"
+msgstr ""
+
+msgid "The following plugin is no longer necessary and has been deactivated:"
+msgid_plural ""
+"The following plugins are no longer necessary and have been deactivated:"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"<html>Loading of the plugin \"{0}\" was requested.<br>This plugin is no "
+"longer developed and very likely will produce errors.<br>It should be "
+"disabled.<br>Delete from preferences?</html>"
+msgstr ""
+
+msgid "Plugin update"
+msgstr ""
+
+msgid ""
+"You updated your JOSM software.<br>To prevent problems the plugins should be "
+"updated as well.<br><br>Update plugins now?"
+msgstr ""
+
+msgid "Last plugin update more than {0} days ago."
+msgstr ""
+
+msgid "Click to update the activated plugins"
+msgstr ""
+
+msgid "Skip update"
+msgstr ""
+
+msgid "Click to skip updating the activated plugins"
+msgstr ""
+
+msgid ""
+"Skipping plugin update after JOSM upgrade. Automatic update at startup is "
+"disabled."
+msgstr ""
+
+msgid ""
+"Skipping plugin update after elapsed update interval. Automatic update at "
+"startup is disabled."
+msgstr ""
+
+msgid ""
+"Running plugin update after JOSM upgrade. Automatic update at startup is "
+"enabled."
+msgstr ""
+
+msgid ""
+"Running plugin update after elapsed update interval. Automatic update at "
+"startup is disabled."
+msgstr ""
+
+msgid ""
+"Unexpected value ''{0}'' for preference ''{1}''. Assuming value ''ask''."
+msgstr ""
+
+msgid ""
+"Plugin {0} requires a plugin which was not found. The missing plugin is:"
+msgid_plural ""
+"Plugin {0} requires {1} plugins which were not found. The missing plugins "
+"are:"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
+"{2}.<br>You have to update JOSM in order to use this plugin.</html>"
+msgstr ""
+
+msgid "Could not load plugin {0}. Delete from preferences?"
+msgstr ""
+
+msgid "loading plugin ''{0}'' (version {1})"
+msgstr ""
+
+msgid ""
+"<html>Could not load plugin {0} because the plugin<br>main class ''{1}'' was "
+"not found.<br>Delete from preferences?</html>"
+msgstr ""
+
+msgid "Loading plugins ..."
+msgstr ""
+
+msgid "Checking plugin preconditions..."
+msgstr ""
+
+msgid "Loading plugin ''{0}''..."
+msgstr ""
+
+msgid "JOSM could not find information about the following plugin:"
+msgid_plural "JOSM could not find information about the following plugins:"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "The plugin is not going to be loaded."
+msgid_plural "The plugins are not going to be loaded."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Determine plugins to load..."
+msgstr ""
+
+msgid "Removing deprecated plugins..."
+msgstr ""
+
+msgid "Removing unmaintained plugins..."
+msgstr ""
+
+msgid "Updating the following plugin has failed:"
+msgid_plural "Updating the following plugins has failed:"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"Please open the Preference Dialog after JOSM has started and try to update "
+"it manually."
+msgid_plural ""
+"Please open the Preference Dialog after JOSM has started and try to update "
+"them manually."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Plugin update failed"
+msgstr ""
+
+msgid "Failed to find plugin {0}"
+msgstr ""
+
+msgid "Failed to download plugin information list"
+msgstr ""
+
+msgid "Disable plugin"
+msgstr ""
+
+msgid "Click to delete the plugin ''{0}''"
+msgstr ""
+
+msgid "Keep plugin"
+msgstr ""
+
+msgid "Click to keep the plugin ''{0}''"
+msgstr ""
+
+msgid "Failed to delete outdated plugin ''{0}''."
+msgstr ""
+
+msgid ""
+"Failed to install already downloaded plugin ''{0}''. Skipping installation. "
+"JOSM is still going to load the old plugin version."
+msgstr ""
+
+msgid ""
+"Failed to install plugin ''{0}'' from temporary download file ''{1}''. {2}"
+msgstr ""
+
+msgid ""
+"Failed to install plugin ''{0}'' from temporary download file ''{1}''. "
+"Renaming failed."
+msgstr ""
+
+msgid "Update plugin"
+msgstr ""
+
+msgid "Click to update the plugin ''{0}''"
+msgstr ""
+
+msgid "Click to disable the plugin ''{0}''"
+msgstr ""
+
+msgid ""
+"An unexpected exception occurred that may have come from the ''{0}'' plugin."
+msgstr ""
+
+msgid "According to the information within the plugin, the author is {0}."
+msgstr ""
+
+msgid ""
+"Try updating to the newest version of this plugin before reporting a bug."
+msgstr ""
+
+msgid ""
+"The plugin has been removed from the configuration. Please restart JOSM to "
+"unload the plugin."
+msgstr ""
+
+msgid "Plugin information"
+msgstr ""
+
+msgid "no description available"
+msgstr ""
+
+msgid ""
+"Do not ask again and remember my decision (go to Preferences->Plugins to "
+"change it later)"
+msgstr ""
+
+msgid "Invalid jar file ''{0}''"
+msgstr ""
+
+msgid "The plugin file ''{0}'' does not include a Manifest."
+msgstr ""
+
+msgid "Invalid URL ''{0}'' in plugin {1}"
+msgstr ""
+
+msgid "Invalid plugin description ''{0}'' in plugin {1}"
+msgstr ""
+
+msgid "Invalid plugin main version ''{0}'' in plugin {1}"
+msgstr ""
+
+msgid "Missing plugin main version in plugin {0}"
+msgstr ""
+
+msgid "More info..."
+msgstr ""
+
+msgid "<b>Plugin provided by an external source:</b> {0}"
+msgstr ""
+
+msgid "Failed to create plugin information from manifest for plugin ''{0}''"
+msgstr ""
+
+msgid "Illegal entry in plugin list."
+msgstr ""
+
+msgid "Reading local plugin information.."
+msgstr ""
+
+msgid "Processing plugin site cache files..."
+msgstr ""
+
+msgid "Processing file ''{0}''"
+msgstr ""
+
+msgid "Failed to scan file ''{0}'' for plugin information. Skipping."
+msgstr ""
+
+msgid "Processing plugin files..."
+msgstr ""
+
+msgid "Download plugin list..."
+msgstr ""
+
+msgid "Downloading plugin list from ''{0}''"
+msgstr ""
+
+msgid "Plugin list download error"
+msgstr ""
+
+msgid "JOSM failed to download plugin list:"
+msgstr ""
+
+msgid "Details:"
+msgstr ""
+
+msgid ""
+"Failed to create plugin directory ''{0}''. Cannot cache plugin list from "
+"plugin site ''{1}''."
+msgstr ""
+
+msgid "Writing plugin list to local cache ''{0}''"
+msgstr ""
+
+msgid "Parsing plugin list from site ''{0}''"
+msgstr ""
+
+msgid ""
+"Failed to parse plugin list document from site ''{0}''. Skipping site. "
+"Exception was: {1}"
+msgstr ""
+
+msgid "Processing plugin list from site ''{0}''"
+msgstr ""
+
+msgid "This is after the end of the recording"
+msgstr ""
+
+msgid "unspecified reason"
+msgstr ""
+
+msgid "Error playing sound"
+msgstr ""
+
+msgid "Do nothing"
+msgstr ""
+
+msgid "Report Bug"
+msgstr ""
+
+msgid ""
+"An unexpected exception occurred.<br>This is always a coding error. If you "
+"are running the latest<br>version of JOSM, please consider being kind and "
+"file a bug report."
+msgstr ""
+
+msgid "Update JOSM"
+msgstr ""
+
+msgid ""
+"An unexpected exception occurred. This is always a coding "
+"error.<br><br>However, you are running an old version of JOSM "
+"({0}),<br>instead of using the current tested version "
+"(<b>{1}</b>).<br><br><b>Please update JOSM</b> before considering to file a "
+"bug report."
+msgstr ""
+
+msgid "Unexpected Exception"
+msgstr ""
+
+msgid "Suppress further error dialogs for this session."
+msgstr ""
+
+msgid ""
+"You have encountered an error in JOSM. Before you file a bug report make "
+"sure you have updated to the latest version of JOSM here:"
+msgstr ""
+
+msgid ""
+"You should also update your plugins. If neither of those help please file a "
+"bug report in our bugtracker using this link:"
+msgstr ""
+
+msgid ""
+"There the error information provided below should already be filled in for "
+"you. Please include information on how to reproduce the error and try to "
+"supply as much detail as possible."
+msgstr ""
+
+msgid ""
+"Alternatively, if that does not work you can manually fill in the "
+"information below at this URL:"
+msgstr ""
+
+msgid "(The text has already been copied to your clipboard.)"
+msgstr ""
+
+msgid "You have encountered a bug in JOSM"
+msgstr ""
+
+msgid ""
+"<html>Failed to initialize communication with the OSM server {0}.<br>Check "
+"the server URL in your preferences and your internet connection."
+msgstr ""
+
+msgid ""
+"<html>Failed to authenticate at the OSM server ''{0}''.<br>You are using "
+"OAuth to authenticate but currently there is no<br>OAuth Access Token "
+"configured.<br>Please open the Preferences Dialog and generate or enter an "
+"Access Token.</html>"
+msgstr ""
+
+msgid ""
+"<strong>Failed</strong> to delete <strong>node {0}</strong>. It is still "
+"referred to by node {1}.<br>Please load the node, remove the reference to "
+"the node, and upload again."
+msgid_plural ""
+"<strong>Failed</strong> to delete <strong>node {0}</strong>. It is still "
+"referred to by nodes {1}.<br>Please load the nodes, remove the reference to "
+"the node, and upload again."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"<strong>Failed</strong> to delete <strong>node {0}</strong>. It is still "
+"referred to by way {1}.<br>Please load the way, remove the reference to the "
+"node, and upload again."
+msgid_plural ""
+"<strong>Failed</strong> to delete <strong>node {0}</strong>. It is still "
+"referred to by ways {1}.<br>Please load the ways, remove the reference to "
+"the node, and upload again."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"<strong>Failed</strong> to delete <strong>node {0}</strong>. It is still "
+"referred to by relation {1}.<br>Please load the relation, remove the "
+"reference to the node, and upload again."
+msgid_plural ""
+"<strong>Failed</strong> to delete <strong>node {0}</strong>. It is still "
+"referred to by relations {1}.<br>Please load the relations, remove the "
+"reference to the node, and upload again."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"<strong>Failed</strong> to delete <strong>way {0}</strong>. It is still "
+"referred to by node {1}.<br>Please load the node, remove the reference to "
+"the way, and upload again."
+msgid_plural ""
+"<strong>Failed</strong> to delete <strong>way {0}</strong>. It is still "
+"referred to by nodes {1}.<br>Please load the nodes, remove the reference to "
+"the way, and upload again."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"<strong>Failed</strong> to delete <strong>way {0}</strong>. It is still "
+"referred to by way {1}.<br>Please load the way, remove the reference to the "
+"way, and upload again."
+msgid_plural ""
+"<strong>Failed</strong> to delete <strong>way {0}</strong>. It is still "
+"referred to by ways {1}.<br>Please load the ways, remove the reference to "
+"the way, and upload again."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"<strong>Failed</strong> to delete <strong>way {0}</strong>. It is still "
+"referred to by relation {1}.<br>Please load the relation, remove the "
+"reference to the way, and upload again."
+msgid_plural ""
+"<strong>Failed</strong> to delete <strong>way {0}</strong>. It is still "
+"referred to by relations {1}.<br>Please load the relations, remove the "
+"reference to the way, and upload again."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"<strong>Failed</strong> to delete <strong>relation {0}</strong>. It is still "
+"referred to by node {1}.<br>Please load the node, remove the reference to "
+"the relation, and upload again."
+msgid_plural ""
+"<strong>Failed</strong> to delete <strong>relation {0}</strong>. It is still "
+"referred to by nodes {1}.<br>Please load the nodes, remove the reference to "
+"the relation, and upload again."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"<strong>Failed</strong> to delete <strong>relation {0}</strong>. It is still "
+"referred to by way {1}.<br>Please load the way, remove the reference to the "
+"relation, and upload again."
+msgid_plural ""
+"<strong>Failed</strong> to delete <strong>relation {0}</strong>. It is still "
+"referred to by ways {1}.<br>Please load the ways, remove the reference to "
+"the relation, and upload again."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"<strong>Failed</strong> to delete <strong>relation {0}</strong>. It is still "
+"referred to by relation {1}.<br>Please load the relation, remove the "
+"reference to the relation, and upload again."
+msgid_plural ""
+"<strong>Failed</strong> to delete <strong>relation {0}</strong>. It is still "
+"referred to by relations {1}.<br>Please load the relations, remove the "
+"reference to the relation, and upload again."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"<html>Uploading to the server <strong>failed</strong> because your "
+"current<br>dataset violates a precondition.<br>The error message "
+"is:<br>{0}</html>"
+msgstr ""
+
+msgid ""
+"<html>Authentication at the OSM server with the username ''{0}'' "
+"failed.<br>Please check the username and the password in the JOSM "
+"preferences.</html>"
+msgstr ""
+
+msgid ""
+"<html>Authentication at the OSM server with the OAuth token ''{0}'' "
+"failed.<br>Please launch the preferences dialog and retrieve another OAuth "
+"token.</html>"
+msgstr ""
+
+msgid ""
+"<html>Authorisation at the OSM server failed.<br>The server reported the "
+"following error:<br>''{0}''</html>"
+msgstr ""
+
+msgid "<html>Authorisation at the OSM server failed.<br></html>"
+msgstr ""
+
+msgid ""
+"<html>Authorisation at the OSM server with the OAuth token ''{0}'' "
+"failed.<br>The token is not authorised to access the protected "
+"resource<br>''{1}''.<br>Please launch the preferences dialog and retrieve "
+"another OAuth token.</html>"
+msgstr ""
+
+msgid ""
+"<html>Communication with the OSM server ''{0}'' timed out. Please retry "
+"later.</html>"
+msgstr ""
+
+msgid "no error message available"
+msgstr ""
+
+msgid ""
+"<html>Communication with the OSM server ''{0}''failed. The server "
+"replied<br>the following error code and the following error "
+"message:<br><strong>Error code:<strong> {1}<br><strong>Error message "
+"(untranslated)</strong>: {2}</html>"
+msgstr ""
+
+msgid ""
+"<html>Closing of changeset <strong>{0}</strong> failed <br>because it has "
+"already been closed."
+msgstr ""
+
+msgid ""
+"<html>Closing of changeset <strong>{0}</strong> failed<br> because it has "
+"already been closed on {1}."
+msgstr ""
+
+msgid ""
+"<html>The server reported that it has detected a conflict.<br>Error message "
+"(untranslated):<br>{0}</html>"
+msgstr ""
+
+msgid "<html>The server reported that it has detected a conflict."
+msgstr ""
+
+msgid ""
+"<html>Failed to upload to changeset <strong>{0}</strong><br>because it has "
+"already been closed on {1}."
+msgstr ""
+
+msgid ""
+"<html>Failed to open a connection to the remote server<br>''{0}''<br>for "
+"security reasons. This is most likely because you are running<br>in an "
+"applet and because you did not load your applet from ''{1}''."
+msgstr ""
+
+msgid ""
+"<html>Failed to open a connection to the remote server<br>''{0}''.<br>Please "
+"check your internet connection."
+msgstr ""
+
+msgid ""
+"<html>Failed to upload data to or download data from<br>''{0}''<br>due to a "
+"problem with transferring data.<br>Details (untranslated): {1}</html>"
+msgstr ""
+
+msgid ""
+"<html>Failed to download data. Its format is either unsupported, ill-formed, "
+"and/or inconsistent.<br><br>Details (untranslated): {0}</html>"
+msgstr ""
+
+msgid "<html>Failed to download data.<br><br>Details: {0}</html>"
+msgstr ""
+
+msgid ""
+"<html>The OSM server<br>''{0}''<br>reported an internal server "
+"error.<br>This is most likely a temporary problem. Please try again later."
+msgstr ""
+
+msgid "The OSM server ''{0}'' reported a bad request.<br>"
+msgstr ""
+
+msgid ""
+"The area you tried to download is too big or your request was too "
+"large.<br>Either request a smaller area or use an export file provided by "
+"the OSM community."
+msgstr ""
+
+msgid "<br>Error message(untranslated): {0}"
+msgstr ""
+
+msgid ""
+"The OSM server ''{0}'' does not know about an object<br>you tried to read, "
+"update, or delete. Either the respective object<br>does not exist on the "
+"server or you are using an invalid URL to access<br>it. Please carefully "
+"check the server''s address ''{0}'' for typos."
+msgstr ""
+
+msgid ""
+"<html>Failed to open a connection to the remote server<br>''{0}''.<br>Host "
+"name ''{1}'' could not be resolved. <br>Please check the API URL in your "
+"preferences and your internet connection."
+msgstr ""
+
+msgid ""
+"<html>The server reports that an object is deleted.<br><strong>Uploading "
+"failed</strong> if you tried to update or delete this object.<br> "
+"<strong>Downloading failed</strong> if you tried to download this "
+"object.<br><br>The error message is:<br>{0}</html>"
+msgstr ""
+
+msgid "Unable to find translation for the locale {0}. Reverting to {1}."
+msgstr ""
+
+msgid ""
+"Fatal: failed to locate image ''{0}''. This is a serious configuration "
+"problem. JOSM will stop working."
+msgstr ""
+
+msgid "Failed to locate image ''{0}''"
+msgstr ""
+
+msgid "Failed to handle zip file ''{0}''. Exception was: {1}"
+msgstr ""
+
+msgid ""
+"Failed to access directory ''{0}'' for security reasons. Exception was: {1}"
+msgstr ""
+
+msgid "{0}... [please type its number]"
+msgstr ""
+
+msgid ""
+"Failed to open URL. There is currently no platform set. Please set a "
+"platform first."
+msgstr ""
+
+msgid "Opening URL: {0}"
+msgstr ""
+
+msgid "zoom"
+msgstr ""
+
+msgid "latitude"
+msgstr ""
+
+msgid "longitude"
+msgstr ""
+
+msgid "URL does not contain {0}/{1}/{2}"
+msgstr ""
+
+msgid "URL does not contain valid {0}"
+msgstr ""
+
+msgid "reserved"
+msgstr ""
+
+msgid "Outdated Java version"
+msgstr ""
+
+msgid "Update Java"
+msgstr ""
+
+msgid "You are running version {0} of Java."
+msgstr ""
+
+msgid "April 2015"
+msgstr ""
+
+msgid ""
+"This version is no longer supported by {0} since {1} and is not recommended "
+"for use."
+msgstr ""
+
+msgid ""
+"JOSM will soon stop working with this version; we highly recommend you to "
+"update to Java {0}."
+msgstr ""
+
+msgid "Would you like to update now ?"
+msgstr ""
+
+msgid ""
+"A previous version of JOSM has installed a custom certificate in order to "
+"provide HTTPS support for Remote Control:"
+msgstr ""
+
+msgid ""
+"It appears it could be an important <b>security risk</b>.<br><br>You are now "
+"going to be prompted by Windows to remove this insecure certificate.<br>For "
+"your own safety, <b>please click Yes</b> in next dialog."
+msgstr ""
+
+msgid "Removing insecure certificate from {0} keystore: {1}"
+msgstr ""
+
+msgid "Unable to remove insecure certificate from keystore: {0}"
+msgstr ""
+
+msgid "JOSM localhost certificate found in {0} keystore: {1}"
+msgstr ""
+
+msgid ""
+"Remote Control is configured to provide HTTPS support.<br>This requires to "
+"add a custom certificate generated by JOSM to the Windows Root CA "
+"store.<br><br>You are now going to be prompted by Windows to confirm this "
+"operation.<br>To enable proper HTTPS support, <b>please click Yes</b> in "
+"next dialog.<br><br>If unsure, you can also click No then disable HTTPS "
+"support in Remote Control preferences."
+msgstr ""
+
+msgid "HTTPS support in Remote Control"
+msgstr ""
+
+msgid "Adding JOSM localhost certificate to {0} keystore"
+msgstr ""
+
+msgid "Silent shortcut conflict: ''{0}'' moved by ''{1}'' to ''{2}''."
+msgstr ""
+
+msgid "There was {0} tag found in the buffer, it is suspicious!"
+msgid_plural "There were {0} tags found in the buffer, it is suspicious!"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Key is too long (max {0} characters):"
+msgstr ""
+
+msgid "Suspicious characters in key:"
+msgstr ""
+
+msgid "Value is too long (max {0} characters):"
+msgstr ""
+
+msgid "Do you want to paste these tags?"
+msgstr ""
+
+msgid "Clear buffer"
+msgstr ""
+
+msgid "Ignore warnings"
+msgstr ""
+
+msgid ""
+"<html><p> Sorry, it is impossible to paste tags from buffer. It does not "
+"contain any JOSM object or suitable text. </p></html>"
+msgstr ""
+
+msgid "ms"
+msgstr ""
+
+msgid "s"
+msgstr ""
+
+msgid "min"
+msgstr ""
+
+msgid "h"
+msgstr ""
+
+msgid "day"
+msgid_plural "days"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
+"geometry from preferences."
+msgstr ""
+
+msgid ""
+"Preference with key ''{0}'' does not provide an int value for ''{1}''. Got "
+"{2}. Cannot restore window geometry from preferences."
+msgstr ""
+
+msgid ""
+"Failed to parse field ''{1}'' in preference with key ''{0}''. Exception was: "
+"{2}. Cannot restore window geometry from preferences."
+msgstr ""
+
+msgid ""
+"Preference with key ''{0}'' does not exist. Cannot restore window geometry "
+"from preferences."
+msgstr ""
+
+msgid "Ignoring malformed geometry: {0}"
+msgstr ""
+
+msgid "Failed to load XML schema."
+msgstr ""
+
+msgid ""
+"Error in search expression on position {0} - right side of or(|) expression "
+"must return set of primitives"
+msgstr ""
+
+msgid ""
+"Error in search expression on position {0} - left side of or(|) expression "
+"must return set of primitives"
+msgstr ""
+
+msgid ""
+"Error in search expression on position {0} - not(-) cannot be used in this "
+"context"
+msgstr ""
+
+msgid ""
+"Error in search expression on position {0} - expression must return "
+"different then current primitive"
+msgstr ""
+
+msgid "Unexpected token ({0}) on position {1}"
+msgstr ""
+
+msgid "Unexpected token on position {0}. Expected {1}, found {2}"
+msgstr ""
+
+msgid "Error while parsing search expression on position {0}"
+msgstr ""
+
+msgid "Unexpected char on {0}. Expected {1} found {2}"
+msgstr ""
+
+msgid "Expected search expression"
+msgstr ""
+
+msgid ""
+"You requested too many nodes (limit is 50,000). Either request a smaller "
+"area, or use planet.osm"
+msgstr ""
+
+msgid "Database offline for maintenance"
+msgstr ""
+
+msgid "You have downloaded too much data. Please try again later."
+msgstr ""
+
+msgid ""
+"The maximum bbox size is 0.25, and your request was too large. Either "
+"request a smaller area, or use planet.osm"
+msgstr ""
+
+msgid "JOSM-Trac login at josm.openstreetmap.de"
+msgstr ""
+
+msgid "could not get audio input stream from input URL"
+msgstr ""
+
+msgid "Audio Device Unavailable"
+msgstr ""
+
+msgid "You must make your edits public to upload new data"
+msgstr ""
+
+msgid "town"
+msgstr ""
+
+msgctxt "landuse"
+msgid "forest"
+msgstr ""
+
+msgctxt "landuse"
+msgid "meadow"
+msgstr ""
+
+msgctxt "landuse"
+msgid "farmland"
+msgstr ""
+
+msgctxt "landuse"
+msgid "residential"
+msgstr ""
+
+msgctxt "natural"
+msgid "scrub"
+msgstr ""
+
+msgctxt "Relation type"
+msgid "associatedStreet"
+msgstr ""
+
+msgctxt "Relation type"
+msgid "boundary"
+msgstr ""
+
+msgctxt "Relation type"
+msgid "bridge"
+msgstr ""
+
+msgctxt "Relation type"
+msgid "destination_sign"
+msgstr ""
+
+msgctxt "Relation type"
+msgid "enforcement"
+msgstr ""
+
+msgctxt "Relation type"
+msgid "multipolygon"
+msgstr ""
+
+msgctxt "Relation type"
+msgid "network"
+msgstr ""
+
+msgctxt "Relation type"
+msgid "public_transport"
+msgstr ""
+
+msgctxt "Relation type"
+msgid "restriction"
+msgstr ""
+
+msgctxt "Relation type"
+msgid "route"
+msgstr ""
+
+msgctxt "Relation type"
+msgid "route_master"
+msgstr ""
+
+msgctxt "Relation type"
+msgid "site"
+msgstr ""
+
+msgctxt "Relation type"
+msgid "street"
+msgstr ""
+
+msgctxt "Relation type"
+msgid "tunnel"
+msgstr ""
+
+msgctxt "Relation type"
+msgid "waterway"
+msgstr ""
+
+msgctxt "Place type"
+msgid "city"
+msgstr ""
+
+msgctxt "Place type"
+msgid "locality"
+msgstr ""
+
+msgctxt "Place type"
+msgid "village"
+msgstr ""
+
+msgctxt "Place type"
+msgid "town"
+msgstr ""
+
+msgctxt "Place type"
+msgid "borough"
+msgstr ""
+
+msgctxt "Place type"
+msgid "municipality"
+msgstr ""
+
+msgctxt "Place type"
+msgid "island"
+msgstr ""
+
+msgctxt "Place type"
+msgid "county"
+msgstr ""
+
+msgctxt "Place type"
+msgid "hamlet"
+msgstr ""
+
+msgctxt "Place type"
+msgid "suburb"
+msgstr ""
+
+msgid "All Files"
+msgstr ""
+
+msgid "Attributes"
+msgstr ""
+
+msgid "Abort file chooser dialog"
+msgstr ""
+
+msgid "Abort file chooser dialog."
+msgstr ""
+
+msgid "Create New Folder"
+msgstr ""
+
+msgid "Delete File"
+msgstr ""
+
+msgid "Enter file name:"
+msgstr ""
+
+msgid "Enter path or folder name:"
+msgstr ""
+
+msgid "Error "
+msgstr ""
+
+msgid "Error renaming file \"{0}\" to \"{1}\""
+msgstr ""
+
+msgid "File name:"
+msgstr ""
+
+msgid "File Name:"
+msgstr ""
+
+msgid "FileChooser help."
+msgstr ""
+
+msgid "Files"
+msgstr ""
+
+msgid "Files of type:"
+msgstr ""
+
+msgid "Files of Type:"
+msgstr ""
+
+msgid "Filter:"
+msgstr ""
+
+msgid "Folders"
+msgstr ""
+
+msgid "Home"
+msgstr ""
+
+msgid "Look in:"
+msgstr ""
+
+msgid "Look In:"
+msgstr ""
+
+msgid "Modified"
+msgstr ""
+
+msgid "New Folder"
+msgstr ""
+
+msgid "Open selected file"
+msgstr ""
+
+msgid "Open selected file."
+msgstr ""
+
+msgid "Refresh"
+msgstr ""
+
+msgid "Rename File"
+msgstr ""
+
+msgid "Rename file \"{0}\" to"
+msgstr ""
+
+msgid "Save in:"
+msgstr ""
+
+msgid "Save In:"
+msgstr ""
+
+msgid "Save selected file."
+msgstr ""
+
+msgid "Selection:"
+msgstr ""
+
+msgid "Size"
+msgstr ""
+
+msgid "Up One Level"
+msgstr ""
+
+msgid "Update"
+msgstr ""
+
+msgid "Update directory listing."
+msgstr ""
+
+msgid "View"
+msgstr ""
+
+msgid "Blue:"
+msgstr ""
+
+msgid "Color Name:"
+msgstr ""
+
+msgid "Green:"
+msgstr ""
+
+msgid "Hue:"
+msgstr ""
+
+msgid "GTK Color Chooser"
+msgstr ""
+
+msgid "Red:"
+msgstr ""
+
+msgid "Saturation:"
+msgstr ""
+
+msgid "Landsat"
+msgstr ""
+
+msgid "Bing aerial imagery"
+msgstr ""
+
+msgid "HDM (Humanitarian OpenStreetMap Team)"
+msgstr ""
+
+msgid "Mapbox Satellite"
+msgstr ""
+
+msgid "MapQuest Open Aerial"
+msgstr ""
+
+msgid "OpenStreetMap GPS Traces"
+msgstr ""
+
+msgid "OpenStreetMap (Standard layer)"
+msgstr ""
+
+msgid "skobbler"
+msgstr ""
+
+msgid "OpenStreetMap (Mapnik Black & White)"
+msgstr ""
+
+msgid "OpenStreetMap (Mapnik, no labels)"
+msgstr ""
+
+msgid "OpenCycleMap"
+msgstr ""
+
+msgid "MapQuest OSM"
+msgstr ""
+
+msgid "Public Transport (ÖPNV)"
+msgstr ""
+
+msgid "OpenStreetMap (German Style)"
+msgstr ""
+
+msgid "Cambodia, Laos, Thailand, Vietnam bilingual"
+msgstr ""
+
+msgid "osmfr"
+msgstr ""
+
+msgid "OpenPT Map (overlay)"
+msgstr ""
+
+msgid "Strava cycling heatmap"
+msgstr ""
+
+msgid "Strava running heatmap"
+msgstr ""
+
+msgid "Locator Overlay"
+msgstr ""
+
+msgid "QA No Address"
+msgstr ""
+
+msgid "Waymarked Trails: Hiking"
+msgstr ""
+
+msgid "Waymarked Trails: Cycling"
+msgstr ""
+
+msgid "Waymarked Trails: MTB"
+msgstr ""
+
+msgid "Waymarked Trails: Skating"
+msgstr ""
+
+msgid "Waymarked Trails: Horse Riding"
+msgstr ""
+
+msgid "Waymarked Trails: Winter Sports"
+msgstr ""
+
+msgid "OSM Inspector: Geometry"
+msgstr ""
+
+msgid "OSM Inspector: Tagging"
+msgstr ""
+
+msgid "OSM Inspector: Places"
+msgstr ""
+
+msgid "OSM Inspector: Highways"
+msgstr ""
+
+msgid "OSM Inspector: Multipolygon"
+msgstr ""
+
+msgid "OSM Inspector: Routing"
+msgstr ""
+
+msgid "OSM Inspector: Addresses"
+msgstr ""
+
+msgid "OSM Inspector: Boundaries (EU)"
+msgstr ""
+
+msgid "AGRI black-and-white 2.5m"
+msgstr ""
+
+msgid "Geoimage.at MaxRes"
+msgstr ""
+
+msgid "basemap.at"
+msgstr ""
+
+msgid "basemap.at Orthofoto"
+msgstr ""
+
+msgid "Graz: Basiskarte (base map)"
+msgstr ""
+
+msgid "Tiris: DGM (Terrain model)"
+msgstr ""
+
+msgid "Tiris: DOM (Surface model)"
+msgstr ""
+
+msgid "Vienna: Mehrzweckkarte (general purpose)"
+msgstr ""
+
+msgid "Vienna: Beschriftungen (annotations)"
+msgstr ""
+
+msgid "Vienna: Orthofoto (aerial image)"
+msgstr ""
+
+msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
+msgstr ""
+
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
+msgid "VoGIS: Flächenwidmungsplan"
+msgstr ""
+
+msgid "VoGIS: DGM (Terrain model)"
+msgstr ""
+
+msgid "VoGIS: DOM (Surface model)"
+msgstr ""
+
+msgid ""
+"AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
+msgstr ""
+
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
+msgid "SPW(allonie) 2012 aerial imagery"
+msgstr ""
+
+msgid "SPW(allonie) 2009 aerial imagery"
+msgstr ""
+
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
+msgid "IBGE Mapa de Setores Urbanos"
+msgstr ""
+
+msgid "IBGE Mapa de Setores Rurais"
+msgstr ""
+
+msgid "Geobase Hydrography"
+msgstr ""
+
+msgid "Geobase Roads"
+msgstr ""
+
+msgid "Canvec"
+msgstr ""
+
+msgid "British Columbia Mosaic"
+msgstr ""
+
+msgid "Kelowna 2012"
+msgstr ""
+
+msgid "Kelowna Roads overlay"
+msgstr ""
+
+msgid "Czech CUZK:KM"
+msgstr ""
+
+msgid "Czech RUIAN budovy"
+msgstr ""
+
+msgid "Czech RUIAN parcely"
+msgstr ""
+
+msgid "Czech pLPIS"
+msgstr ""
+
+msgid "Geodatastyrelsen (Denmark)"
+msgstr ""
+
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
+msgstr ""
+
+msgid "Stevns (Denmark)"
+msgstr ""
+
+msgid "Vejmidte (Denmark)"
+msgstr ""
+
+msgid "Estonia Basemap (Maaamet)"
+msgstr ""
+
+msgid "Estonia Ortho (Maaamet)"
+msgstr ""
+
+msgid "Estonia Hillshade (Maaamet)"
+msgstr ""
+
+msgid "Estonia Cadastre (Maaamet)"
+msgstr ""
+
+msgid "Estonia Forestry (Maaamet)"
+msgstr ""
+
+msgid "BANO"
+msgstr ""
+
+msgid "BD Carthage"
+msgstr ""
+
+msgid "Bordeaux - 2012"
+msgstr ""
+
+msgid "Cadastre"
+msgstr ""
+
+msgid "CRAIG - Auvergne 2013 - 25 cm"
+msgstr ""
+
+msgid "CRIGE PACA Alpes-Maritimes 2009 - 40 cm"
+msgstr ""
+
+msgid "GrandNancy Orthophotographie 2012"
+msgstr ""
+
+msgid "Géobretagne - Brest 2010 - 10 cm"
+msgstr ""
+
+msgid "Géobretagne - Morbihan 2010"
+msgstr ""
+
+msgid "Géolittoral - Orthophotos 2000"
+msgstr ""
+
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
+msgstr ""
+
+msgid "Géolittoral - Sentiers"
+msgstr ""
+
+msgid "Grand Lyon - Orthophotographie 2012 - 10cm"
+msgstr ""
+
+msgid "Loire-Atlantique - Orthophotos 2012 - 20 cm"
+msgstr ""
+
+msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
+msgstr ""
+
+msgid "Route 500™©®"
+msgstr ""
+
+msgid "Toulouse - Orthophotoplan 2013"
+msgstr ""
+
+msgid "Toulouse - Orthophotoplan 2011"
+msgstr ""
+
+msgid "Toulouse - Orthophotoplan 2007"
+msgstr ""
+
+msgid "Tours - Orthophotos 2013"
+msgstr ""
+
+msgid ""
+"Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
+"- 1 m"
+msgstr ""
+
+msgid "Hike & Bike"
+msgstr ""
+
+msgid "OpenStreetMap (Sorbian Language)"
+msgstr ""
+
+msgid "Hamburg (40 cm)"
+msgstr ""
+
+msgid "Hamburg (20 cm)"
+msgstr ""
+
+msgid "Hamburg (DK5)"
+msgstr ""
+
+msgid "Bavaria (80 cm)"
+msgstr ""
+
+msgid "Bavaria (2 m)"
+msgstr ""
+
+msgid "Stuttgart (Luftbild)"
+msgstr ""
+
+msgid "Erlangen Luftbild (2013 6,25 cm)"
+msgstr ""
+
+msgid "Erlangen 2011 Luftbild (5,0 cm)"
+msgstr ""
+
+msgid "Old map of Zwenkau - TK25 Messtischblatt (4739; 1906; PROJ.4-rect)"
+msgstr ""
+
+msgid "Old map of Pegau - TK25 Messtischblatt (4839; 1909; PROJ.4-rect)"
+msgstr ""
+
+msgid "Physical DE - Physische Karte (Naturräume)"
+msgstr ""
+
+msgid "Physical DE:Harz - Physische Karte (Naturräume)"
+msgstr ""
+
+msgid ""
+"Physical DE:Harz - Overlay für Bing (z.B. Deckkraft zw. 20 und 50 Prozent "
+"nutzen)"
+msgstr ""
+
+msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
+msgstr ""
+
+msgid "NRW-Atlas: ALKIS"
+msgstr ""
+
+msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
+msgstr ""
+
+msgid "NRW-Atlas: Luftbilder"
+msgstr ""
+
+msgid "NRW-Atlas: Topographische Karte 1:10000"
+msgstr ""
+
+msgid "Metropole Ruhr: Luftbilder (10 cm)"
+msgstr ""
+
+msgid "Drone Imagery (Haiti)"
+msgstr ""
+
+msgid "Drone Imagery 2014 (Haiti)"
+msgstr ""
+
+msgid "Ireland British War Office 1:25k GSGS 3906"
+msgstr ""
+
+msgid "Ireland British War Office One-Inch 1941-43 GSGS 4136"
+msgstr ""
+
+msgid "Ireland Bartholomew Quarter-Inch 1940"
+msgstr ""
+
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
+msgid "OSMIE Townlands"
+msgstr ""
+
+msgid "OSMIE EDs"
+msgstr ""
+
+msgid "OSMIE Civil Parishes"
+msgstr ""
+
+msgid "OSMIE Baronies"
+msgstr ""
+
+msgid "OSMIE Political"
+msgstr ""
+
+msgid "Lodi - Italy"
+msgstr ""
+
+msgid "Lombardia - Italy (CTR)"
+msgstr ""
+
+msgid "Sicily - Italy"
+msgstr ""
+
+msgid "PCN 2006 - Italy"
+msgstr ""
+
+msgid "PCN 2008 - IT Lazio+Umbria"
+msgstr ""
+
+msgid "PCN 2012 - Italy"
+msgstr ""
+
+msgid "South Tyrol Orthofoto 2011"
+msgstr ""
+
+msgid "South Tyrol Topomap"
+msgstr ""
+
+msgid "USSR - Latvia"
+msgstr ""
+
+msgid "50cm ortho - Latvia"
+msgstr ""
+
+msgid "20cm ortho - Latvia - Coastline"
+msgstr ""
+
+msgid "1.cikla ortofotokarte - Latvia"
+msgstr ""
+
+msgid "ORT10LT (Lithuania)"
+msgstr ""
+
+msgid "Luxembourg Inspire Ortho 2010"
+msgstr ""
+
+msgid "Luxembourg Inspire Ortho 2013"
+msgstr ""
+
+msgid "Luxembourg Inspire Railway"
+msgstr ""
+
+msgid "Luxembourg Inspire Roads"
+msgstr ""
+
+msgid "Luxembourg Inspire Water"
+msgstr ""
+
+msgid "Niger Delta Oct 2012 Landsat"
+msgstr ""
+
+msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgstr ""
+
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgstr ""
+
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgstr ""
+
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgstr ""
+
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgstr ""
+
+msgid "Geoportal 2: PRNG (geo names)"
+msgstr ""
+
+msgid "Geoportal 2: ISOK hillshade"
+msgstr ""
+
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgstr ""
+
+msgid "Będzin: Budynki (buildings)"
+msgstr ""
+
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
+msgid "Bytom: Fotoplan 2014 (aerial image)"
+msgstr ""
+
+msgid "Bytom: Budynki (buildings)"
+msgstr ""
+
+msgid "Chorzów: Budynki (buildings)"
+msgstr ""
+
+msgid "Częstochowa: Budynki (buildings)"
+msgstr ""
+
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgstr ""
+
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgstr ""
+
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgstr ""
+
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgstr ""
+
+msgid "Gliwice: Budynki (buildings)"
+msgstr ""
+
+msgid "Katowice: Ortofotomapa (aerial image)"
+msgstr ""
+
+msgid "Katowice: Budynki (buildings)"
+msgstr ""
+
+msgid "Łódź: Budynki (buildings)"
+msgstr ""
+
+msgid "Łódź: Ortofotomapa (aerial image)"
+msgstr ""
+
+msgid "Powiat dębicki: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat lubaczowski: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat łańcucki: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat poznański: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgstr ""
+
+msgid "Powiat rzeszowski: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgstr ""
+
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgstr ""
+
+msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgstr ""
+
+msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgstr ""
+
+msgid "Rzeszów: Budynki (buildings)"
+msgstr ""
+
+msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgstr ""
+
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
+msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgstr ""
+
+msgid "trail.pl: Szlaki (paths)"
+msgstr ""
+
+msgid "ScanEx IRS"
+msgstr ""
+
+msgid "ScanEx SPOT"
+msgstr ""
+
+msgid "Freemap.sk Car"
+msgstr ""
+
+msgid "Freemap.sk Hiking"
+msgstr ""
+
+msgid "Freemap.sk Cyclo"
+msgstr ""
+
+msgid "Freemap.sk Ski"
+msgstr ""
+
+msgid "Katastrálna mapa Slovenska (KaPor, 2010-04)"
+msgstr ""
+
+msgid "Katastrálna mapa Slovenska (KaPor, 2011-05)"
+msgstr ""
+
+msgid "Slovakia EEA GMES Urban Atlas"
+msgstr ""
+
+msgid "Slovakia EEA CORINE 2006"
+msgstr ""
+
+msgid "Slovakia Historic Maps"
+msgstr ""
+
+msgid "RABA-KGZ: Slovenia farmland use"
+msgstr ""
+
+msgid "RABA-KGZ: Slovenia built-up areas"
+msgstr ""
+
+msgid "South Africa CD:NGI Aerial"
+msgstr ""
+
+msgid "Catastro Spain"
+msgstr ""
+
+msgid "PNOA Spain"
+msgstr ""
+
+msgid "SIGPAC Spain"
+msgstr ""
+
+msgid "GRAFCAN - Canary Islands"
+msgstr ""
+
+msgid "ITACyL - Castile and León"
+msgstr ""
+
+msgid "IDEIB - Balearic Islands"
+msgstr ""
+
+msgid "GRAFCAN Express - Canary Islands"
+msgstr ""
+
+msgid "Kanton Aargau 25cm (AGIS 2011)"
+msgstr ""
+
+msgid "Kanton Aargau 25cm (AGIS 2014)"
+msgstr ""
+
+msgid "Stadt Uster Orthophoto 2008 10cm"
+msgstr ""
+
+msgid "Stadtplan Zürich"
+msgstr ""
+
+msgid "Stadt Zürich Übersichtsplan (Strassen, Gebäude, Hausnummer)"
+msgstr ""
+
+msgid "Stadt Zürich Luftbild 2011"
+msgstr ""
+
+msgid "Orthofoto Kanton Solothurn RGB (SOGIS 2011/2012/2013)"
+msgstr ""
+
+msgid "Orthofoto Kanton Solothurn Infrarot (SOGIS 2011/2012/2013)"
+msgstr ""
+
+msgid "Canton de Génève 5cm (SITG 2011)"
+msgstr ""
+
+msgid "Canton de Neuchâtel 50cm (SITN 2006)"
+msgstr ""
+
+msgid "Canton du Jura 50cm (RCJU 1998)"
+msgstr ""
+
+msgid "Canton de Fribourg 50cm (2005)"
+msgstr ""
+
+msgid "Stadt Bern 10cm/25cm (2012)"
+msgstr ""
+
+msgid "HEIG-VD / Orthophoto Yverdon-les-Bains 25cm (2007)"
+msgstr ""
+
+msgid "Ville de Nyon - Orthophoto 2010 HD 5cm/pi"
+msgstr ""
+
+msgid "Cartoriviera - Orthophoto 2012"
+msgstr ""
+
+msgid "SIGIP - Orthophoto 2012"
+msgstr ""
+
+msgid "Lausanne - Orthophoto technique 2012"
+msgstr ""
+
+msgid "Bonvillars Orthophoto 2013"
+msgstr ""
+
+msgid "Fiez Orthophoto 2013"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
+msgid "MSR Maps Topo"
+msgstr ""
+
+msgid "MSR Maps Urban"
+msgstr ""
+
+msgid "USGS Topographic Maps"
+msgstr ""
+
+msgid "USGS Large Scale Imagery"
+msgstr ""
+
+msgid "TIGER 2012 Roads Overlay"
+msgstr ""
+
+msgid "New & Misaligned TIGER Roads (2015)"
+msgstr ""
+
+msgid "MassGIS L3 Parcels"
+msgstr ""
+
+msgid "NC Latest Orthoimagery"
+msgstr ""
+
+msgid "U.S. Forest Service roads"
+msgstr ""
+
+msgid "Ukraine - Orthophotomaps 2012"
+msgstr ""
+
+msgid "7th Series (OS7)"
+msgstr ""
+
+msgid "OS New Popular Edition historic"
+msgstr ""
+
+msgid "OS OpenData StreetView"
+msgstr ""
+
+msgid "OS OpenData Locator"
+msgstr ""
+
+msgid "Surrey Air Survey"
+msgstr ""
+
+msgid "NLS - OS 6-inch Scotland 1842-82"
+msgstr ""
+
+msgid "NLS - OS 1:25k 1st Series 1937-61"
+msgstr ""
+
+msgid "NLS - OS 1-inch 7th Series 1955-61"
+msgstr ""
+
+msgid "OS 1:25k historic (OSM-Best)"
+msgstr ""
+
+msgid "OS 1:25k historic (OSM-Limited)"
+msgstr ""
+
+msgid "OS Scottish Popular historic"
+msgstr ""
+
+msgid "NLS - Bartholomew Half Inch, 1897-1907"
+msgstr ""
+
+msgid "OS Town Plans, Aberdeen 1866-1867 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Airdrie 1858 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Alexandria 1859 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Alloa 1861-1862 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Annan 1859 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Arbroath 1858 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Ayr 1855 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Berwick-upon-Tweed 1852 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Brechin 1862 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Burntisland 1894 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Campbelton 1865 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Coatbridge 1858 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Cupar 1854 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Cupar 1893-1894 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Dalkeith 1852 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Dalkeith 1893 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Dumbarton 1859 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Dumfries 1850 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Dumfries 1893 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Dundee 1857-1858 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Dundee 1870-1872 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Dunfermline 1854 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Dunfermline 1894 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Edinburgh 1849-1851 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Edinburgh 1876-1877 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Edinburgh 1893-1894 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Elgin 1868 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Falkirk 1858-1859 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Forfar 1860-1861 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Forres 1868 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Galashiels 1858 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Girvan 1857 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Glasgow 1857-1858 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Glasgow 1892-1894 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Greenock 1857 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Haddington 1853 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Haddington 1893 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Hamilton 1858 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Hawick 1857-1858 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Inverness 1867-1868 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Irvine 1859 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Jedburgh 1858 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Kelso 1857 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Kilmarnock 1857-1859 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Kirkcaldy 1855 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Kirkcaldy 1894 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Kirkcudbright 1850 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Kirkcudbright 1893 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Kirkintilloch 1859 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Kirriemuir 1861 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Lanark 1858 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Linlithgow 1856 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Mayole 1856-1857 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Montrose 1861-1862 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Musselburgh 1853 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Musselburgh 1893 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Nairn 1867-1868 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Oban 1867-1868 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Peebles 1856 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Perth 1860 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Peterhead 1868 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Port Glasgow 1856-1857 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Portobello 1893-1894 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Rothesay 1862-1863 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Selkirk 1865 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, St Andrews 1854 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, St Andrews 1893 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Stirling 1858 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Stonehaven 1864 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Stranraer 1847 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Stranraer 1863-1877 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Stranraer 1893 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Strathaven 1858 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Wick 1872 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Wigtown 1848 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Wigtown 1894 (NLS)"
+msgstr ""
+
+msgid "Landsat 233055"
+msgstr ""
+
+msgid ""
+"Group common Address Interpolation inputs in a single dialog, as well as an "
+"option to automatically generate individual house number nodes from a Way."
+msgstr ""
+
+msgid ""
+"Makes a pair of selected way segments parallel by rotating one of them "
+"around a chosen pivot."
+msgstr ""
+
+msgid ""
+"Allows selection of areas in an layer and automatic creation of a way as "
+"polygon. Built to ease mapping of building from background layers. Optimized "
+"for basemap.at."
+msgstr ""
+
+msgid "Tools for drawing buildings."
+msgstr ""
+
+msgid "A special handler for the French land registry WMS server."
+msgstr ""
+
+msgid ""
+"Overlays the canvec tile grid on the map and prints URL''s to the .zip "
+"files. Future goals: allow auto-downloading and loading of canvec .osm files"
+msgstr ""
+
+msgid ""
+"Allows the user to create different color schemes and to switch between "
+"them. Just change the colors and create a new scheme. Used to switch to a "
+"white background with matching colors for better visibility in bright "
+"sunlight. See dialog in display preferences."
+msgstr ""
+
+msgid ""
+"Imports proprietary CSV files of the Columbus/Visiontac V-900 GPS logger "
+"into a GPX layer."
+msgstr ""
+
+msgid ""
+"Implements a command line and enables to create your commands. See link for "
+"standard commands (arc, circle etc.)"
+msgstr ""
+
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
+msgid "(Warning: Experimental!) Tool for conflating (merging) data."
+msgstr ""
+
+msgid "Create a grid of ways."
+msgstr ""
+
+msgid ""
+"Creating and handling address nodes and buildings within Czech Republic."
+msgstr ""
+
+msgid ""
+"Allows to import various file formats into JOSM directly. Currently "
+"supported: TangoGPS, Garmin Trainings Center TCX."
+msgstr ""
+
+msgid "Download your GPX tracks from openstreetmap.org"
+msgstr ""
+
+msgid ""
+"This plugin directly upload GPS Traces from current active layer in JOSM to "
+"openstreetmap.org."
+msgstr ""
+
+msgid "Downloads OSM data along a way"
+msgstr ""
+
+msgid ""
+"Allows the user to anonymize timestamps and delete parts of huge GPX tracks "
+"very fast."
+msgstr ""
+
+msgid "Shows the elevation profile and some statistical data of a GPX track."
+msgstr ""
+
+msgid "Handling of French EPCIs (boundary=local_authority)"
+msgstr ""
+
+msgid "Use external scripts in JOSM"
+msgstr ""
+
+msgid "Fast drawing ways by mouse"
+msgstr ""
+
+msgid "Finds and fixes invalid street addresses in a comfortable way."
+msgstr ""
+
+msgid ""
+"Talk with users editing the map nearby, be notified when someone comes close."
+msgstr ""
+
+msgid ""
+"Provides parts of the GeoTools library for other JOSM plugins. Not meant to "
+"be installed directly by users, but rather as a dependency for other plugins."
+msgstr ""
+
+msgid ""
+"Download GPS points from Globalsat dg100 data logger directly in JOSM."
+msgstr ""
+
+msgid ""
+"Analyse a set of GPS points to obtain its centre and direction of spread."
+msgstr ""
+
+msgid "Allows to filter out unnecessary GPS tracks"
+msgstr ""
+
+msgid "Visualizes routing information as a routing graph."
+msgstr ""
+
+msgid "Simple tool to tag house numbers."
+msgstr ""
+
+msgid "Generate Imagery XML bounds from a multipolygon"
+msgstr ""
+
+msgid ""
+"Database of imagery offsets: share and aquire imagery offsets with one "
+"button."
+msgstr ""
+
+msgid "WMSPlugin-style imagery adjustment mapmode"
+msgstr ""
+
+msgid ""
+"Another plugin to match images to the waypoints in a GPX file. A match is "
+"made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
+"matches the filename of an image."
+msgstr ""
+
+msgid "Plugin for importing spatial referenced images"
+msgstr ""
+
+msgid "Import vector graphics (SVG)"
+msgstr ""
+
+msgid ""
+"Extra information about current layer objects pop ups - currently GPX "
+"trackpoint info"
+msgstr ""
+
+msgid "A helper for IRS satellite adjustment."
+msgstr ""
+
+msgid ""
+"Provides Java Native Access (JNA) library. Not meant to be installed "
+"directly by users, but rather as a dependency for other plugins."
+msgstr ""
+
+msgid ""
+"Provides Java Topology Suite (JTS) library and related utilities. Not meant "
+"to be installed directly by users, but rather as a dependency for other "
+"plugins."
+msgstr ""
+
+msgid ""
+"creates a channel digraph and checks a subset of channels if it is a "
+"junction or searches in a subset of channels for junctions"
+msgstr ""
+
+msgid "Helps vectorizing WMS images."
+msgstr ""
+
+msgid ""
+"Support live GPS input (moving dot) through a connection to gpsd server."
+msgstr ""
+
+msgid ""
+"Provides the Log4j library for other JOSM plugins. Not meant to be installed "
+"directly by users, but rather as a dependency for other plugins."
+msgstr ""
+
+msgid ""
+"The MapDust Plug-In shows the MapDust bug reports on the map. You can "
+"create, close,invalidate, re-open and comment bug reports by using this "
+"plugin."
+msgstr ""
+
+msgid "Allows the user to work with pictures hosted at mapillary.com"
+msgstr ""
+
+msgid ""
+"Provide a measurement dialog and a layer to measure length and angle of "
+"segments, area surrounded by a (simple) closed way and create measurement "
+"paths (which also can be imported from a gps layer)."
+msgstr ""
+
+msgid "Merge overlapping part of ways."
+msgstr ""
+
+msgid "Adds no left turn for sets of 4 or 5 ways"
+msgstr ""
+
+msgid "Allows to attribute tags to all objects in any selected area at once"
+msgstr ""
+
+msgid "NanoLog adjustment and browsing layer"
+msgstr ""
+
+msgid ""
+"Use your system''s password manager to store the API username and password. "
+"(KWallet and gnome-keyring are supported.)"
+msgstr ""
+
+msgid ""
+"Disallow using JOSM forever (WARNING: this plugin prevents JOSM from loading "
+"and is hard to rid of)"
+msgstr ""
+
+msgid "Convert data from Open Data portals to OSM layer"
+msgstr ""
+
+msgid "extended options for editing opening_hours"
+msgstr ""
+
+msgid ""
+"Allows opening gpx/osm files that intersect the currently visible screen area"
+msgstr ""
+
+msgid ""
+"Launches FireFox to display the current visible screen as a nice SVG image."
+msgstr ""
+
+msgid ""
+"Bring in errors from Osm Inspector and display it on the current JOSM "
+"bounding box"
+msgstr ""
+
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
+msgid "Import/export OSM data in PBF format"
+msgstr ""
+
+msgid "Import PDF file and convert to ways."
+msgstr ""
+
+msgid ""
+"Write gps position info to the image file header. Run this feature from the "
+"right click menu of the image layer."
+msgstr ""
+
+msgid "Make photos movable and position them on the map."
+msgstr ""
+
+msgid ""
+"This plugin allows to display any picture as a background in the editor and "
+"align it with the map."
+msgstr ""
+
+msgid "The great JGoodies Plastic Look and Feel."
+msgstr ""
+
+msgid ""
+"Shows an additional information about point on map. There is only a Czech "
+"RUIAN module available at this moment."
+msgstr ""
+
+msgid "Read and write osmosis poly filter files"
+msgstr ""
+
+msgid "Adds map printing to JOSM"
+msgstr ""
+
+msgid "adds projections from Proj4J"
+msgstr ""
+
+msgid ""
+"This plugin simplifies the mapping and editing of public transport routes."
+msgstr ""
+
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
+msgid "Relation and multipolygon creating and editing panel."
+msgstr ""
+
+msgid "Plugin for reverting changesets"
+msgstr ""
+
+msgid ""
+"Plugin for tagging of objects based on a selection of road signs. The dialog "
+"can be opened by clicking a small icon in the upper right corner of the "
+"properties window. Available country presets: Belgium, Germany, Poland, "
+"Slovakia, Spain."
+msgstr ""
+
+msgid ""
+"Renders routes (bus, hiking trails, bicycle routes, ..). Route types must be "
+"defined in routes.xml file in plugin directory"
+msgstr ""
+
+msgid "Provides routing capabilities."
+msgstr ""
+
+msgid "Loads data from SDS"
+msgstr ""
+
+msgid "Imagery Layer for Sea Charts"
+msgstr ""
+
+msgid "Edit features for Sea Charts"
+msgstr ""
+
+msgid ""
+"Simplify area by removing nodes on very obtuse angles. This can be "
+"constrained by maximum removed area size. Also average nearby nodes."
+msgstr ""
+
+msgid "Edit features for OpenSeaMap"
+msgstr ""
+
+msgid "Allows to draw splines"
+msgstr ""
+
+msgid ""
+"Allows to edit traffic information and export it to the urban mobility "
+"simulator SUMO"
+msgstr ""
+
+msgid "Allow adding markers/nodes on current gps positions."
+msgstr ""
+
+msgid ""
+"Launch browser to a Web resource about a selected object having known tags, "
+"such as Wikipedia"
+msgstr ""
+
+msgid "Provides a dialog for editing tags in a tabular grid."
+msgstr ""
+
+msgid ""
+"Adds a tagging preset tester to the help menu, which helps you developing of "
+"tagging presets (quick preview of the dialog that will popup). You can start "
+"the jar-file as standalone as well."
+msgstr ""
+
+msgid "Make terraced houses out of single blocks."
+msgstr ""
+
+msgid ""
+"Provides helper buttons to allow working with single button mouse (stylus). "
+"Activate by holding T and slip map with left mouse button"
+msgstr ""
+
+msgid ""
+"Traces buildings from Czech cadastral map. Needs TracerServer (.NET or Mono) "
+"to be running."
+msgstr ""
+
+msgid ""
+"Traces buildings and other shapes from a map. Needs Tracer2Server to be "
+"running."
+msgstr ""
+
+msgid "Plugin to digital sign OSM-Data"
+msgstr ""
+
+msgid ""
+"Provides a straightforward GUI for adding, editing and deleting turn lanes."
+msgstr ""
+
+msgid ""
+"The turnrestrictions plugin allows to enter maintain information about turn "
+"restrictions in the OpenStreetMap database."
+msgstr ""
+
+msgid "Allows undeleting object from OSM database"
+msgstr ""
+
+msgid "Several utilities that make your life easier."
+msgstr ""
+
+msgid ""
+"(This Plugin is currently work in progress!!!) Links and syncs a "
+"georeferenced video against a GPS track, to use it for identify visible "
+"objects."
+msgstr ""
+
+msgid ""
+"Supports downloading tiled, scanned maps from walking-papers.org. This "
+"plugin is still under early development and may be buggy."
+msgstr ""
+
+msgid "Easy downloading along a long set of interconnected ways"
+msgstr ""
+
+msgid "Enables searching for waypoint imported from gpx file."
+msgstr ""
+
+msgid "Simplifies linking OSM objects to Wikipedia articles"
+msgstr ""
+
+msgid ""
+"Drive a race car from point A to point B over aerial imagery, leave cacti "
+"behind."
+msgstr ""
+
+msgid "Surface"
+msgstr ""
+
+msgid "paved"
+msgstr ""
+
+msgid "unpaved"
+msgstr ""
+
+msgid "asphalt"
+msgstr ""
+
+msgid "concrete"
+msgstr ""
+
+msgid "metal"
+msgstr ""
+
+msgid "wood"
+msgstr ""
+
+msgid "paving_stones"
+msgstr ""
+
+msgid "cobblestone"
+msgstr ""
+
+msgid "gravel"
+msgstr ""
+
+msgid "pebblestone"
+msgstr ""
+
+msgid "compacted"
+msgstr ""
+
+msgid "grass_paver"
+msgstr ""
+
+msgid "grass"
+msgstr ""
+
+msgid "sand"
+msgstr ""
+
+msgid "ground"
+msgstr ""
+
+msgid "sett"
+msgstr ""
+
+msgid "Smoothness"
+msgstr ""
+
+msgid "excellent"
+msgstr ""
+
+msgid "Thin Rollers: rollerblade, skateboard"
+msgstr ""
+
+msgid "good"
+msgstr ""
+
+msgid "Thin Wheels: racing bike"
+msgstr ""
+
+msgid "intermediate"
+msgstr ""
+
+msgid "Wheels: city bike, wheelchair, scooter"
+msgstr ""
+
+msgid "bad"
+msgstr ""
+
+msgid "Robust Wheels: trekking bike, car, rickshaw"
+msgstr ""
+
+msgid "very_bad"
+msgstr ""
+
+msgid "High Clearance: light duty off-road vehicle"
+msgstr ""
+
+msgid "horrible"
+msgstr ""
+
+msgid "Off-Road: heavy duty off-road vehicle"
+msgstr ""
+
+msgid "very_horrible"
+msgstr ""
+
+msgid "Specialized off-road: tractor, ATV"
+msgstr ""
+
+msgid "impassable"
+msgstr ""
+
+msgid "No wheeled vehicle"
+msgstr ""
+
+msgctxt "riding"
+msgid "pitch"
+msgstr ""
+
+msgctxt "riding"
+msgid "sports_centre"
+msgstr ""
+
+msgctxt "riding"
+msgid "stadium"
+msgstr ""
+
+msgctxt "riding"
+msgid "track"
+msgstr ""
+
+msgid "clay"
+msgstr ""
+
+msgid "dirt"
+msgstr ""
+
+msgid "fine_gravel"
+msgstr ""
+
+msgid "mud"
+msgstr ""
+
+msgid "Lanes"
+msgstr ""
+
+msgid "Max. speed (km/h)"
+msgstr ""
+
+msgid "Bridge"
+msgstr ""
+
+msgid "Tunnel"
+msgstr ""
+
+msgid "Cutting"
+msgstr ""
+
+msgid "Embankment"
+msgstr ""
+
+msgid "Incline"
+msgstr ""
+
+msgid "10%"
+msgstr ""
+
+msgid "-10%"
+msgstr ""
+
+msgid "10°"
+msgstr ""
+
+msgid "-10°"
+msgstr ""
+
+msgid "Oneway"
+msgstr ""
+
+msgid "Lit"
+msgstr ""
+
+msgid "Width (meters)"
+msgstr ""
+
+msgid "Sidewalk"
+msgstr ""
+
+msgctxt "sidewalk"
+msgid "both"
+msgstr ""
+
+msgctxt "sidewalk"
+msgid "left"
+msgstr ""
+
+msgctxt "sidewalk"
+msgid "right"
+msgstr ""
+
+msgctxt "sidewalk"
+msgid "no"
+msgstr ""
+
+msgid "Service type"
+msgstr ""
+
+msgid "yard"
+msgstr ""
+
+msgid "siding"
+msgstr ""
+
+msgid "spur"
+msgstr ""
+
+msgid "Electrified"
+msgstr ""
+
+msgid "contact_line"
+msgstr ""
+
+msgid "no"
+msgstr ""
+
+msgid "yes"
+msgstr ""
+
+msgid "rail"
+msgstr ""
+
+msgid "Voltage in Volts (V)"
+msgstr ""
+
+msgid "Frequency in Hertz (Hz)"
+msgstr ""
+
+msgid "16.67"
+msgstr ""
+
+msgid "16.7"
+msgstr ""
+
+msgctxt "railway"
+msgid "Tracks"
+msgstr ""
+
+msgid "Gauge (mm)"
+msgstr ""
+
+msgid "Allowed traffic:"
+msgstr ""
+
+msgid "Horse"
+msgstr ""
+
+msgid "Motorcycle"
+msgstr ""
+
+msgid "Motorcar"
+msgstr ""
+
+msgid "Reference"
+msgstr ""
+
+msgid "Operator"
+msgstr ""
+
+msgid "Service Times"
+msgstr ""
+
+msgid "18:00"
+msgstr ""
+
+msgid "sunset,sunrise"
+msgstr ""
+
+msgid "Su 09:30,11:00"
+msgstr ""
+
+msgid "Sa,Su,PH 09:00"
+msgstr ""
+
+msgid "Sa 18:00; Su 10:45"
+msgstr ""
+
+msgid ""
+"Fr 08:00-18:00; Apr 10-15 off; Jun 07:00-20:00; Aug off; Dec 24 08:00-24:00"
+msgstr ""
+
+msgid "Sa 10:00+"
+msgstr ""
+
+msgid "week 1-53/2 Fr 09:00-12:00; week 2-52/2 We 09:00-12:00"
+msgstr ""
+
+msgid "Opening Hours"
+msgstr ""
+
+msgid "24/7"
+msgstr ""
+
+msgid "08:30-12:30,15:30-20:00"
+msgstr ""
+
+msgid "Sa-Su 00:00-24:00"
+msgstr ""
+
+msgid "Mo-Fr 08:30-20:00; Sa,Su 08:00-15:00; PH off"
+msgstr ""
+
+msgid "Mo-Fr 08:30-20:00, Tu-Su 08:00-15:00; Sa 08:00-12:00"
+msgstr ""
+
+msgid ""
+"Mo-Su 08:00-18:00; Apr 10-15 off; Jun 08:00-14:00; Aug off; Dec 25 off"
+msgstr ""
+
+msgid "sunrise-sunset"
+msgstr ""
+
+msgid "Su 10:00+"
+msgstr ""
+
+msgid "Wheelchairs"
+msgstr ""
+
+msgid "limited"
+msgstr ""
+
+msgid "Brand"
+msgstr ""
+
+msgid "Internet access"
+msgstr ""
+
+msgid "wlan"
+msgstr ""
+
+msgid "wired"
+msgstr ""
+
+msgid "terminal"
+msgstr ""
+
+msgid "Internet access fee"
+msgstr ""
+
+msgid "Smoking"
+msgstr ""
+
+msgid "dedicated"
+msgstr ""
+
+msgid "separated"
+msgstr ""
+
+msgid "isolated"
+msgstr ""
+
+msgid "Height (meters)"
+msgstr ""
+
+msgid "Max. width (meters)"
+msgstr ""
+
+msgid "Max. height (meters)"
+msgstr ""
+
+msgid "pitch"
+msgstr ""
+
+msgid "sports_centre"
+msgstr ""
+
+msgid "stadium"
+msgstr ""
+
+msgid "Sport"
+msgstr ""
+
+msgctxt "sport"
+msgid "multi"
+msgstr ""
+
+msgctxt "sport"
+msgid "archery"
+msgstr ""
+
+msgctxt "sport"
+msgid "athletics"
+msgstr ""
+
+msgctxt "sport"
+msgid "american_football"
+msgstr ""
+
+msgctxt "sport"
+msgid "australian_football"
+msgstr ""
+
+msgctxt "sport"
+msgid "baseball"
+msgstr ""
+
+msgctxt "sport"
+msgid "basketball"
+msgstr ""
+
+msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
+msgid "boules"
+msgstr ""
+
+msgctxt "sport"
+msgid "bowls"
+msgstr ""
+
+msgctxt "sport"
+msgid "canadian_football"
+msgstr ""
+
+msgctxt "sport"
+msgid "canoe"
+msgstr ""
+
+msgctxt "sport"
+msgid "climbing"
+msgstr ""
+
+msgctxt "sport"
+msgid "cricket"
+msgstr ""
+
+msgctxt "sport"
+msgid "croquet"
+msgstr ""
+
+msgctxt "sport"
+msgid "cycling"
+msgstr ""
+
+msgctxt "sport"
+msgid "dog_racing"
+msgstr ""
+
+msgctxt "sport"
+msgid "equestrian"
+msgstr ""
+
+msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "gaelic_games"
+msgstr ""
+
+msgctxt "sport"
+msgid "golf"
+msgstr ""
+
+msgctxt "sport"
+msgid "gymnastics"
+msgstr ""
+
+msgctxt "sport"
+msgid "handball"
+msgstr ""
+
+msgctxt "sport"
+msgid "horse_racing"
+msgstr ""
+
+msgctxt "sport"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
+msgstr ""
+
+msgctxt "sport"
+msgid "motor"
+msgstr ""
+
+msgctxt "sport"
+msgid "pelota"
+msgstr ""
+
+msgctxt "sport"
+msgid "racquet"
+msgstr ""
+
+msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
+msgid "rugby_league"
+msgstr ""
+
+msgctxt "sport"
+msgid "rugby_union"
+msgstr ""
+
+msgctxt "sport"
+msgid "running"
+msgstr ""
+
+msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
+msgid "shooting"
+msgstr ""
+
+msgctxt "sport"
+msgid "skateboard"
+msgstr ""
+
+msgctxt "sport"
+msgid "skating"
+msgstr ""
+
+msgctxt "sport"
+msgid "soccer"
+msgstr ""
+
+msgctxt "sport"
+msgid "swimming"
+msgstr ""
+
+msgctxt "sport"
+msgid "table_tennis"
+msgstr ""
+
+msgctxt "sport"
+msgid "tennis"
+msgstr ""
+
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
+msgid "Fee"
+msgstr ""
+
+msgid "06:00-20:00"
+msgstr ""
+
+msgid "Mo-Fr 09:00-18:00,Sa 08:00-14:00"
+msgstr ""
+
+msgid "May-Sep 09:30-12:30,14:15-19:30"
+msgstr ""
+
+msgctxt "parking"
+msgid "multi-storey"
+msgstr ""
+
+msgctxt "parking"
+msgid "surface"
+msgstr ""
+
+msgctxt "parking"
+msgid "underground"
+msgstr ""
+
+msgctxt "parking"
+msgid "rooftop"
+msgstr ""
+
+msgid "Reference number"
+msgstr ""
+
+msgid "Access"
+msgstr ""
+
+msgid "private"
+msgstr ""
+
+msgid "customers"
+msgstr ""
+
+msgid "permissive"
+msgstr ""
+
+msgid "Time Limit (minutes)"
+msgstr ""
+
+msgid "Supervised"
+msgstr ""
+
+msgid "General Access"
+msgstr ""
+
+msgid "destination"
+msgstr ""
+
+msgid "delivery"
+msgstr ""
+
+msgid "agricultural"
+msgstr ""
+
+msgid "forestry"
+msgstr ""
+
+msgid "Population"
+msgstr ""
+
+msgid "Post code"
+msgstr ""
+
+msgid "Website"
+msgstr ""
+
+msgid "Distance (km)"
+msgstr ""
+
+msgid "Ascent (m)"
+msgstr ""
+
+msgid "Descent (m)"
+msgstr ""
+
+msgid "Roundtrip"
+msgstr ""
+
+msgid "Symbol description"
+msgstr ""
+
+msgid "broadleaved"
+msgstr ""
+
+msgid "needleleaved"
+msgstr ""
+
+msgid "mixed"
+msgstr ""
+
+msgid "leafless"
+msgstr ""
+
+msgid "Cycle"
+msgstr ""
+
+msgid "deciduous"
+msgstr ""
+
+msgid "Plants that are leafless for a certain period during the year."
+msgstr ""
+
+msgid "evergreen"
+msgstr ""
+
+msgid "Plants that are never entirely without green foliage."
+msgstr ""
+
+msgid "semi_deciduous"
+msgstr ""
+
+msgid ""
+"Plants that lose their foliage for a very short period, when old leaves fall "
+"off and new foliage growth is starting."
+msgstr ""
+
+msgid "semi_evergreen"
+msgstr ""
+
+msgid ""
+"Plants that lose most, but not all, of their foliage for a fraction of the "
+"year."
+msgstr ""
+
+msgid "Habitat with evergreen and deciduous vegetation."
+msgstr ""
+
+msgid "bahai"
+msgstr ""
+
+msgid "buddhist"
+msgstr ""
+
+msgid "christian"
+msgstr ""
+
+msgid "hindu"
+msgstr ""
+
+msgid "jain"
+msgstr ""
+
+msgid "jewish"
+msgstr ""
+
+msgid "muslim"
+msgstr ""
+
+msgid "shinto"
+msgstr ""
+
+msgid "sikh"
+msgstr ""
+
+msgid "spiritualist"
+msgstr ""
+
+msgid "taoist"
+msgstr ""
+
+msgid "unitarian"
+msgstr ""
+
+msgid "zoroastrian"
+msgstr ""
+
+msgid "Denomination"
+msgstr ""
+
+msgid "anglican"
+msgstr ""
+
+msgid "baptist"
+msgstr ""
+
+msgid "catholic"
+msgstr ""
+
+msgid "evangelical"
+msgstr ""
+
+msgid "greek_catholic"
+msgstr ""
+
+msgid "jehovahs_witness"
+msgstr ""
+
+msgid "lutheran"
+msgstr ""
+
+msgid "methodist"
+msgstr ""
+
+msgid "mormon"
+msgstr ""
+
+msgid "old_catholic"
+msgstr ""
+
+msgid "orthodox"
+msgstr ""
+
+msgid "pentecostal"
+msgstr ""
+
+msgid "presbyterian"
+msgstr ""
+
+msgid "protestant"
+msgstr ""
+
+msgid "quaker"
+msgstr ""
+
+msgid "roman_catholic"
+msgstr ""
+
+msgid "shia"
+msgstr ""
+
+msgid "sunni"
+msgstr ""
+
+msgid "high"
+msgstr ""
+
+msgid "medium"
+msgstr ""
+
+msgid "low"
+msgstr ""
+
+msgid "750000;200000"
+msgstr ""
+
+msgid "110000;20000"
+msgstr ""
+
+msgid "Branch operator"
+msgstr ""
+
+msgid "Amount of Cables"
+msgstr ""
+
+msgid "Amount of circuits"
+msgstr ""
+
+msgid "Location"
+msgstr ""
+
+msgctxt "power"
+msgid "outdoor"
+msgstr ""
+
+msgctxt "power"
+msgid "indoor"
+msgstr ""
+
+msgctxt "power"
+msgid "underground"
+msgstr ""
+
+msgctxt "power"
+msgid "platform"
+msgstr ""
+
+msgctxt "power"
+msgid "kiosk"
+msgstr ""
+
+msgid "Start date"
+msgstr ""
+
+msgid "Output forms of energy:"
+msgstr ""
+
+msgid "biogas"
+msgstr ""
+
+msgid "2 W"
+msgstr ""
+
+msgid "3 kW"
+msgstr ""
+
+msgid "5 MW"
+msgstr ""
+
+msgid "7 GW"
+msgstr ""
+
+msgid "electricity"
+msgstr ""
+
+msgid "hot water"
+msgstr ""
+
+msgid "hot air"
+msgstr ""
+
+msgid "cold water"
+msgstr ""
+
+msgid "cold air"
+msgstr ""
+
+msgid "compressed air"
+msgstr ""
+
+msgid "steam"
+msgstr ""
+
+msgid "vacuum"
+msgstr ""
+
+msgid "Max. weight (tonnes)"
+msgstr ""
+
+msgid "Toll"
+msgstr ""
+
+msgid "Is the water body intermittent (disappears seasonally)?"
+msgstr ""
+
+msgid "culvert"
+msgstr ""
+
+msgid "Water access rules:"
+msgstr ""
+
+msgid "Ship"
+msgstr ""
+
+msgid "designated"
+msgstr ""
+
+msgid "Boat"
+msgstr ""
+
+msgid "Motorboat"
+msgstr ""
+
+msgid "Canoe"
+msgstr ""
+
+msgid "Streets"
+msgstr ""
+
+msgid "Motorway"
+msgstr ""
+
+msgid "Motorway Link"
+msgstr ""
+
+msgid "Trunk"
+msgstr ""
+
+msgid "Motorroad"
+msgstr ""
+
+msgid "Trunk Link"
+msgstr ""
+
+msgid "Primary"
+msgstr ""
+
+msgid "Primary Link"
+msgstr ""
+
+msgid "Secondary"
+msgstr ""
+
+msgid "Secondary Link"
+msgstr ""
+
+msgid "Tertiary"
+msgstr ""
+
+msgid "Tertiary Link"
+msgstr ""
+
+msgid "Unclassified"
+msgstr ""
+
+msgid "Street has no name"
+msgstr ""
+
+msgid "Passing Places"
+msgstr ""
+
+msgid "Residential"
+msgstr ""
+
+msgid "Bicycle Road"
+msgstr ""
+
+msgid "Highway type"
+msgstr ""
+
+msgctxt "Highway"
+msgid "residential"
+msgstr ""
+
+msgctxt "Highway"
+msgid "service"
+msgstr ""
+
+msgctxt "Highway"
+msgid "unclassified"
+msgstr ""
+
+msgctxt "Highway"
+msgid "path"
+msgstr ""
+
+msgctxt "Highway"
+msgid "cycleway"
+msgstr ""
+
+msgid "Vehicle access"
+msgstr ""
+
+msgid "Oneway for bicycle"
+msgstr ""
+
+msgid "Living Street"
+msgstr ""
+
+msgid "Pedestrian"
+msgstr ""
+
+msgid "Area"
+msgstr ""
+
+msgid "Service"
+msgstr ""
+
+msgid "Service way type"
+msgstr ""
+
+msgid "alley"
+msgstr ""
+
+msgid "driveway"
+msgstr ""
+
+msgid "parking_aisle"
+msgstr ""
+
+msgid "drive-through"
+msgstr ""
+
+msgid "Parking Aisle"
+msgstr ""
+
+msgid "Escape"
+msgstr ""
+
+msgid ""
+"Emergency lane beside long descending slopes for trucks and other vehicles "
+"to stop safely after brake failure."
+msgstr ""
+
+msgid "Raceway"
+msgstr ""
+
+msgid "Road (Unknown Type)"
+msgstr ""
+
+msgid "Construction"
+msgstr ""
+
+msgctxt "Highway"
+msgid "motorway"
+msgstr ""
+
+msgctxt "Highway"
+msgid "motorway_link"
+msgstr ""
+
+msgctxt "Highway"
+msgid "trunk"
+msgstr ""
+
+msgctxt "Highway"
+msgid "trunk_link"
+msgstr ""
+
+msgctxt "Highway"
+msgid "primary"
+msgstr ""
+
+msgctxt "Highway"
+msgid "primary_link"
+msgstr ""
+
+msgctxt "Highway"
+msgid "secondary"
+msgstr ""
+
+msgctxt "Highway"
+msgid "secondary_link"
+msgstr ""
+
+msgctxt "Highway"
+msgid "tertiary"
+msgstr ""
+
+msgctxt "Highway"
+msgid "tertiary_link"
+msgstr ""
+
+msgctxt "Highway"
+msgid "bus_guideway"
+msgstr ""
+
+msgctxt "Highway"
+msgid "bridleway"
+msgstr ""
+
+msgctxt "Highway"
+msgid "living_street"
+msgstr ""
+
+msgctxt "Highway"
+msgid "pedestrian"
+msgstr ""
+
+msgctxt "Highway"
+msgid "track"
+msgstr ""
+
+msgctxt "Highway"
+msgid "footway"
+msgstr ""
+
+msgctxt "Highway"
+msgid "steps"
+msgstr ""
+
+msgid "Junction"
+msgstr ""
+
+msgid "roundabout"
+msgstr ""
+
+msgid "jughandle"
+msgstr ""
+
+msgid "Road Restrictions"
+msgstr ""
+
+msgid ""
+"Some road types already imply some access restrictions which should not be "
+"set again."
+msgstr ""
+
+msgid "No exit (cul-de-sac)"
+msgstr ""
+
+msgid "Transport mode restrictions"
+msgstr ""
+
+msgid "official"
+msgstr ""
+
+msgid "Vehicles per type"
+msgstr ""
+
+msgid "All vehicles"
+msgstr ""
+
+msgid "use_sidepath"
+msgstr ""
+
+msgid "Motor vehicles"
+msgstr ""
+
+msgid "Light Commercial Vehicles (goods)"
+msgstr ""
+
+msgid "Heavy Goods Vehicles (hgv)"
+msgstr ""
+
+msgid "Vehicles per use"
+msgstr ""
+
+msgid "Agricultural"
+msgstr ""
+
+msgid "Emergency vehicles"
+msgstr ""
+
+msgid "High-occupancy vehicles (hov)"
+msgstr ""
+
+msgid "Public Service Vehicles (psv)"
+msgstr ""
+
+msgid "Tourist buses"
+msgstr ""
+
+msgid "Min. speed (km/h)"
+msgstr ""
+
+msgid "Max. axleload (tonnes)"
+msgstr ""
+
+msgid "Max. length (meters)"
+msgstr ""
+
+msgid "Overtaking"
+msgstr ""
+
+msgctxt "overtaking"
+msgid "yes"
+msgstr ""
+
+msgctxt "overtaking"
+msgid "both"
+msgstr ""
+
+msgctxt "overtaking"
+msgid "forward"
+msgstr ""
+
+msgctxt "overtaking"
+msgid "backward"
+msgstr ""
+
+msgctxt "overtaking"
+msgid "no"
+msgstr ""
+
+msgid "Roundabout"
+msgstr ""
+
+msgctxt "Highway"
+msgid "construction"
+msgstr ""
+
+msgid "Ford"
+msgstr ""
+
+msgid "Ways"
+msgstr ""
+
+msgid "Track"
+msgstr ""
+
+msgid "Tracktype"
+msgstr ""
+
+msgid "grade1"
+msgstr ""
+
+msgid "grade2"
+msgstr ""
+
+msgid "grade3"
+msgstr ""
+
+msgid "grade4"
+msgstr ""
+
+msgid "grade5"
+msgstr ""
+
+msgid "MTB Scale"
+msgstr ""
+
+msgid "Path"
+msgstr ""
+
+msgid "SAC Scale"
+msgstr ""
+
+msgid "T1 - hiking trail"
+msgstr ""
+
+msgid "Trail well cleared. Area flat or slightly sloped, no fall hazard"
+msgstr ""
+
+msgid "T2 - mountain hiking trail"
+msgstr ""
+
+msgid ""
+"Trail with continuous line and balanced ascent. Terrain partially steep, "
+"fall hazard possible"
+msgstr ""
+
+msgid "T3 - difficult, exposed hiking trail"
+msgstr ""
+
+msgid ""
+"exposed sites may be secured with ropes or chains, possible need to use "
+"hands for balance. Partly exposed sites with fall hazard, scree, pathless "
+"jagged rocks"
+msgstr ""
+
+msgid "T4 - difficult, exposed, steep alpine trail"
+msgstr ""
+
+msgid ""
+"sometimes need for hand use to get ahead. Terrain quite exposed, precarious "
+"grassy acclivities, jagged rocks, facile snow-free glaciers"
+msgstr ""
+
+msgid "T5 - difficult alpine trail with climbing"
+msgstr ""
+
+msgid ""
+"single plainly climbing up to second grade. Exposed, demanding terrain, "
+"jagged rocks, few dangerous glacier and snow"
+msgstr ""
+
+msgid "T6 - hazardous alpine trail with climbing"
+msgstr ""
+
+msgid ""
+"climbing up to second grade. Often very exposed, precarious jagged rocks, "
+"glacier with danger to slip and fall"
+msgstr ""
+
+msgid "Visibility"
+msgstr ""
+
+msgctxt "trail_visibility"
+msgid "excellent"
+msgstr ""
+
+msgctxt "trail_visibility"
+msgid "good"
+msgstr ""
+
+msgctxt "trail_visibility"
+msgid "intermediate"
+msgstr ""
+
+msgctxt "trail_visibility"
+msgid "bad"
+msgstr ""
+
+msgctxt "trail_visibility"
+msgid "horrible"
+msgstr ""
+
+msgctxt "trail_visibility"
+msgid "no"
+msgstr ""
+
+msgid "Ski"
+msgstr ""
+
+msgid "Snowmobile"
+msgstr ""
+
+msgid "Dedicated Bridleway"
+msgstr ""
+
+msgid "Cycle Lane/Track"
+msgstr ""
+
+msgid "Cycleway"
+msgstr ""
+
+msgid "lane"
+msgstr ""
+
+msgid "track"
+msgstr ""
+
+msgid "opposite_lane"
+msgstr ""
+
+msgid "opposite_track"
+msgstr ""
+
+msgid "opposite"
+msgstr ""
+
+msgid "share_busway"
+msgstr ""
+
+msgid "shared_lane"
+msgstr ""
+
+msgid "Cycleway left"
+msgstr ""
+
+msgid "Cycleway right"
+msgstr ""
+
+msgid "Oneway (bicycle)"
+msgstr ""
+
+msgid "Edit Highway Attributes:"
+msgstr ""
+
+msgid "Highway"
+msgstr ""
+
+msgid "Dedicated Cycleway"
+msgstr ""
+
+msgid "Pedestrians"
+msgstr ""
+
+msgid "Segregated Foot- and Cycleway"
+msgstr ""
+
+msgid "Combined Foot- and Cycleway"
+msgstr ""
+
+msgid "Dedicated Footway"
+msgstr ""
+
+msgid "Steps"
+msgstr ""
+
+msgid "Amount of Steps"
+msgstr ""
+
+msgid "Ramp"
+msgstr ""
+
+msgid "Stroller ramp"
+msgstr ""
+
+msgid "Bicycle ramp"
+msgstr ""
+
+msgid "Wheelchair ramp"
+msgstr ""
+
+msgid "Luggage ramp"
+msgstr ""
+
+msgid "automatic"
+msgstr ""
+
+msgid "manual"
+msgstr ""
+
+msgid "Handrail"
+msgstr ""
+
+msgid "Left handrail"
+msgstr ""
+
+msgid "Center handrail"
+msgstr ""
+
+msgid "Right handrail"
+msgstr ""
+
+msgid "Waypoints"
+msgstr ""
+
+msgid "Motorway Junction"
+msgstr ""
+
+msgid "Number"
+msgstr ""
+
+msgid "Exit to"
+msgstr ""
+
+msgid "Services"
+msgstr ""
+
+msgid "Toilets"
+msgstr ""
+
+msgid "Rest Area"
+msgstr ""
+
+msgid "Drinking Water"
+msgstr ""
+
+msgid "Traffic Signal"
+msgstr ""
+
+msgid "Optional crossing attributes:"
+msgstr ""
+
+msgid "Pedestrian crossing type"
+msgstr ""
+
+msgid "uncontrolled"
+msgstr ""
+
+msgid "traffic_signals"
+msgstr ""
+
+msgid "island"
+msgstr ""
+
+msgid "unmarked"
+msgstr ""
+
+msgid "Crossing type name (UK)"
+msgstr ""
+
+msgid "zebra"
+msgstr ""
+
+msgid "pelican"
+msgstr ""
+
+msgid "toucan"
+msgstr ""
+
+msgid "puffin"
+msgstr ""
+
+msgid "pegasus"
+msgstr ""
+
+msgid "tiger"
+msgstr ""
+
+msgid "Button operated"
+msgstr ""
+
+msgid "Sound signals"
+msgstr ""
+
+msgid "Crossing attendant"
+msgstr ""
+
+msgid "Cross by bicycle"
+msgstr ""
+
+msgid "Cross on horseback"
+msgstr ""
+
+msgid "Optional values for specific countries"
+msgstr ""
+
+msgid "Stop"
+msgstr ""
+
+msgid "Give Way"
+msgstr ""
+
+msgid "Mini-Roundabout"
+msgstr ""
+
+msgid "clockwise"
+msgstr ""
+
+msgid "Pedestrian Crossing"
+msgstr ""
+
+msgid "In case of traffic signals:"
+msgstr ""
+
+msgid "Traffic Calming"
+msgstr ""
+
+msgid "bump"
+msgstr ""
+
+msgid "chicane"
+msgstr ""
+
+msgid "choker"
+msgstr ""
+
+msgid "cushion"
+msgstr ""
+
+msgid "hump"
+msgstr ""
+
+msgid "rumble_strip"
+msgstr ""
+
+msgid "table"
+msgstr ""
+
+msgid "Passing Place"
+msgstr ""
+
+msgid "Turning Circle"
+msgstr ""
+
+msgid "Turning Loop"
+msgstr ""
+
+msgid "City Limit"
+msgstr ""
+
+msgid "Second Name"
+msgstr ""
+
+msgid "Speed Camera"
+msgstr ""
+
+msgid "Traffic Mirror"
+msgstr ""
+
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
+msgctxt "junction=yes"
+msgid "Named Junction"
+msgstr ""
+
+msgid ""
+"Used in some countries for a named road junction who’s name serves for local "
+"orientation."
+msgstr ""
+
+msgid "Elevator"
+msgstr ""
+
+msgid "Grit Bin"
+msgstr ""
+
+msgid "Mountain Pass"
+msgstr ""
+
+msgid "Elevation"
+msgstr ""
+
+msgid "Barriers"
+msgstr ""
+
+msgid "Block"
+msgstr ""
+
+msgid "Material"
+msgstr ""
+
+msgid "stone"
+msgstr ""
+
+msgid "Bollard"
+msgstr ""
+
+msgid "Bollard type"
+msgstr ""
+
+msgid "rising"
+msgstr ""
+
+msgid "removable"
+msgstr ""
+
+msgid "plastic"
+msgstr ""
+
+msgid "Cycle Barrier"
+msgstr ""
+
+msgid "Cattle Grid"
+msgstr ""
+
+msgid "Bus Trap"
+msgstr ""
+
+msgid "Spikes"
+msgstr ""
+
+msgid "Toll Booth"
+msgstr ""
+
+msgid "Border Control"
+msgstr ""
+
+msgid "Hedge"
+msgstr ""
+
+msgid "Genus"
+msgstr ""
+
+msgid "Species"
+msgstr ""
+
+msgid "Taxon"
+msgstr ""
+
+msgid "Fence"
+msgstr ""
+
+msgid "barbed_wire"
+msgstr ""
+
+msgid "chain_link"
+msgstr ""
+
+msgid "electric"
+msgstr ""
+
+msgid "pole"
+msgstr ""
+
+msgid "split_rail"
+msgstr ""
+
+msgid "wire"
+msgstr ""
+
+msgid "Guard Rail"
+msgstr ""
+
+msgid "Wall"
+msgstr ""
+
+msgid "City Wall"
+msgstr ""
+
+msgid "Retaining Wall"
+msgstr ""
+
+msgctxt "Barrier"
+msgid "Ditch"
+msgstr ""
+
+msgid "Kerb"
+msgstr ""
+
+msgid "Entrance (Barrier Opening)"
+msgstr ""
+
+msgid "Gate"
+msgstr ""
+
+msgid "Lift Gate"
+msgstr ""
+
+msgid "Swing Gate"
+msgstr ""
+
+msgctxt "swing_gate"
+msgid "single"
+msgstr ""
+
+msgctxt "swing_gate"
+msgid "double"
+msgstr ""
+
+msgid "Hampshire Gate"
+msgstr ""
+
+msgid "Bump Gate"
+msgstr ""
+
+msgid "Kissing Gate"
+msgstr ""
+
+msgid "Chain"
+msgstr ""
+
+msgid "Stile"
+msgstr ""
+
+msgid "ladder"
+msgstr ""
+
+msgid "squeezer"
+msgstr ""
+
+msgid "stepover"
+msgstr ""
+
+msgid "Turnstile"
+msgstr ""
+
+msgid "Sally Port"
+msgstr ""
+
+msgid "Passageways"
+msgstr ""
+
+msgid "Building Passage"
+msgstr ""
+
+msgid "Arcade"
+msgstr ""
+
+msgid "Open on left side"
+msgstr ""
+
+msgid "Open on right side"
+msgstr ""
+
+msgid "Colonnade"
+msgstr ""
+
+msgid "Avalanche Protector"
+msgstr ""
+
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
+msgid "Water"
+msgstr ""
+
+msgid "Drain"
+msgstr ""
+
+msgid "Ditch"
+msgstr ""
+
+msgid "Stream"
+msgstr ""
+
+msgid "River"
+msgstr ""
+
+msgid "Canal"
+msgstr ""
+
+msgid "Spring"
+msgstr ""
+
+msgid ""
+"A point where groundwater naturally flows to the surface of the earth from "
+"underground."
+msgstr ""
+
+msgid "Waterfall"
+msgstr ""
+
+msgid "Weir"
+msgstr ""
+
+msgid "Dam"
+msgstr ""
+
+msgid "Groyne"
+msgstr ""
+
+msgid "Breakwater"
+msgstr ""
+
+msgid "Culvert"
+msgstr ""
+
+msgid "Basin"
+msgstr ""
+
+msgid "Reservoir"
+msgstr ""
+
+msgid "Covered Reservoir"
+msgstr ""
+
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
+msgid "A body of standing water, such as a lake or pond."
+msgstr ""
+
+msgid "Water Body"
+msgstr ""
+
+msgid "canal"
+msgstr ""
+
+msgid "lake"
+msgstr ""
+
+msgid "lagoon"
+msgstr ""
+
+msgid "oxbow"
+msgstr ""
+
+msgid "pond"
+msgstr ""
+
+msgid "reservoir"
+msgstr ""
+
+msgid "river"
+msgstr ""
+
+msgid "Salt Water"
+msgstr ""
+
+msgid "Coastline"
+msgstr ""
+
+msgid ""
+"Line between the sea and land (with the water on the right side of the way)."
+msgstr ""
+
+msgid "Riverbank"
+msgstr ""
+
+msgid "Wetland"
+msgstr ""
+
+msgid "Waterlogged area, either permanently or seasonally with vegetation."
+msgstr ""
+
+msgid "swamp"
+msgstr ""
+
+msgid "bog"
+msgstr ""
+
+msgid "marsh"
+msgstr ""
+
+msgid "reedbed"
+msgstr ""
+
+msgid "saltmarsh"
+msgstr ""
+
+msgid "tidalflat"
+msgstr ""
+
+msgid "mangrove"
+msgstr ""
+
+msgid "Mud"
+msgstr ""
+
+msgid "Large area covered with mud."
+msgstr ""
+
+msgid "Beach"
+msgstr ""
+
+msgid "A flat area of sand, gravel or pebble next to water."
+msgstr ""
+
+msgid "swimming"
+msgstr ""
+
+msgid "surfing"
+msgstr ""
+
+msgid "Bay"
+msgstr ""
+
+msgid ""
+"A large body of water partially enclosed by land but with a wide mouth."
+msgstr ""
+
+msgid "Cliff"
+msgstr ""
+
+msgid ""
+"A steep rock face exposure, with a significant vertical, or near vertical "
+"(leave the lower face to the right of the way)."
+msgstr ""
+
+msgid "Shipping"
+msgstr ""
+
+msgid "Ferry Terminal"
+msgstr ""
+
+msgid "Cargo"
+msgstr ""
+
+msgctxt "cargo"
+msgid "passengers"
+msgstr ""
+
+msgctxt "cargo"
+msgid "vehicle"
+msgstr ""
+
+msgctxt "cargo"
+msgid "bicycle"
+msgstr ""
+
+msgctxt "cargo"
+msgid "hgv"
+msgstr ""
+
+msgctxt "cargo"
+msgid "passengers;vehicle"
+msgstr ""
+
+msgid "Ferry Route"
+msgstr ""
+
+msgid "Marina"
+msgstr ""
+
+msgid "Dump Station"
+msgstr ""
+
+msgid "public"
+msgstr ""
+
+msgid "Marine Fuel"
+msgstr ""
+
+msgid "Agip"
+msgstr ""
+
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
+msgid "Pier"
+msgstr ""
+
+msgid "Lock Gate"
+msgstr ""
+
+msgid "Turning Point"
+msgstr ""
+
+msgid "Slipway"
+msgstr ""
+
+msgid "Boatyard"
+msgstr ""
+
+msgid "Dock"
+msgstr ""
+
+msgid "Transport"
+msgstr ""
+
+msgid "Railway"
+msgstr ""
+
+msgid "Rail"
+msgstr ""
+
+msgid "main"
+msgstr ""
+
+msgid "branch"
+msgstr ""
+
+msgid "industrial"
+msgstr ""
+
+msgid "military"
+msgstr ""
+
+msgid "tourism"
+msgstr ""
+
+msgid "freight"
+msgstr ""
+
+msgid "Narrow Gauge Rail"
+msgstr ""
+
+msgid "Monorail"
+msgstr ""
+
+msgid "Preserved"
+msgstr ""
+
+msgid "Light Rail"
+msgstr ""
+
+msgid "Subway"
+msgstr ""
+
+msgid "Tram"
+msgstr ""
+
+msgid "Bus Guideway"
+msgstr ""
+
+msgid "Disused Rail"
+msgstr ""
+
+msgid "Abandoned Rail"
+msgstr ""
+
+msgid "Level Crossing"
+msgstr ""
+
+msgid "Traffic lights"
+msgstr ""
+
+msgid "Barrier"
+msgstr ""
+
+msgctxt "crossing:barrier"
+msgid "yes"
+msgstr ""
+
+msgctxt "crossing:barrier"
+msgid "no"
+msgstr ""
+
+msgctxt "crossing:barrier"
+msgid "half"
+msgstr ""
+
+msgctxt "crossing:barrier"
+msgid "full"
+msgstr ""
+
+msgctxt "crossing:barrier"
+msgid "double_half"
+msgstr ""
+
+msgid "Crossing"
+msgstr ""
+
+msgid "Crossing type"
+msgstr ""
+
+msgid "Turntable"
+msgstr ""
+
+msgid "Buffer Stop"
+msgstr ""
+
+msgid "Railway Switch"
+msgstr ""
+
+msgid "Railway milestone"
+msgstr ""
+
+msgid "Aerialway"
+msgstr ""
+
+msgid "Cable Car"
+msgstr ""
+
+msgid "Number of people per hour"
+msgstr ""
+
+msgid "Number of people per car"
+msgstr ""
+
+msgid "Typical journey time in minutes"
+msgstr ""
+
+msgid "Has heating?"
+msgstr ""
+
+msgid "Chair Lift"
+msgstr ""
+
+msgid "Number of people per chair"
+msgstr ""
+
+msgid "Has bubble?"
+msgstr ""
+
+msgid "Gondola"
+msgstr ""
+
+msgid "Number of people per gondola"
+msgstr ""
+
+msgid "Mixed Lift"
+msgstr ""
+
+msgid "Number of people per gondola/chair"
+msgstr ""
+
+msgid "Drag Lift"
+msgstr ""
+
+msgid ""
+"drag_lift (general type - use only if exact type (see values below) is "
+"unknown)"
+msgstr ""
+
+msgid "t-bar"
+msgstr ""
+
+msgid "j-bar"
+msgstr ""
+
+msgid "platter"
+msgstr ""
+
+msgid "rope_tow"
+msgstr ""
+
+msgid "Magic Carpet"
+msgstr ""
+
+msgid "Goods"
+msgstr ""
+
+msgctxt "aerialway"
+msgid "Station"
+msgstr ""
+
+msgid "Pylon"
+msgstr ""
+
+msgid "Parking"
+msgstr ""
+
+msgid "Park and Ride"
+msgstr ""
+
+msgid "bus"
+msgstr ""
+
+msgid "train"
+msgstr ""
+
+msgid "tram"
+msgstr ""
+
+msgid "metro"
+msgstr ""
+
+msgid "ferry"
+msgstr ""
+
+msgid "Capacity (overall)"
+msgstr ""
+
+msgid "Spaces for Disabled"
+msgstr ""
+
+msgid "Spaces for Women"
+msgstr ""
+
+msgid "Spaces for Parents"
+msgstr ""
+
+msgid "See the Wiki for other capacity:[types]=*."
+msgstr ""
+
+msgid "Parking Space"
+msgstr ""
+
+msgid "Capacity"
+msgstr ""
+
+msgid "Covered (with roof)"
+msgstr ""
+
+msgid "Parking Entrance"
+msgstr ""
+
+msgid "Fuel"
+msgstr ""
+
+msgid "With shop"
+msgstr ""
+
+msgid "convenience"
+msgstr ""
+
+msgid "kiosk"
+msgstr ""
+
+msgid "Diesel (Gas To Liquid - ultimate diesel)"
+msgstr ""
+
+msgid "Diesel for Heavy Good Vehicles"
+msgstr ""
+
+msgid "1/25 mix (mofa/moped)"
+msgstr ""
+
+msgid "1/50 mix (mofa/moped)"
+msgstr ""
+
+msgid "Fuel cards:"
+msgstr ""
+
+msgid "DKV"
+msgstr ""
+
+msgid "Routex"
+msgstr ""
+
+msgid "UTA"
+msgstr ""
+
+msgid "Charging Station"
+msgstr ""
+
+msgid "Voltage"
+msgstr ""
+
+msgid "Amperage"
+msgstr ""
+
+msgid "Wash"
+msgstr ""
+
+msgid "Car Dealer"
+msgstr ""
+
+msgid "Second hand"
+msgstr ""
+
+msgid "only"
+msgstr ""
+
+msgid "Repair"
+msgstr ""
+
+msgid "Parts"
+msgstr ""
+
+msgid "Tires"
+msgstr ""
+
+msgid "Rental"
+msgstr ""
+
+msgid "Sharing"
+msgstr ""
+
+msgid "Motorcycle Dealer"
+msgstr ""
+
+msgid "independent"
+msgstr ""
+
+msgid "Services:"
+msgstr ""
+
+msgid "Sale"
+msgstr ""
+
+msgid "brand"
+msgstr ""
+
+msgid "oldtimer"
+msgstr ""
+
+msgid "Safety inspection"
+msgstr ""
+
+msgid "DEKRA"
+msgstr ""
+
+msgid "GTÜ"
+msgstr ""
+
+msgid "MOT"
+msgstr ""
+
+msgid "TÜV"
+msgstr ""
+
+msgid "Clothes"
+msgstr ""
+
+msgid "anchors"
+msgstr ""
+
+msgid "ground_slots"
+msgstr ""
+
+msgid "informal"
+msgstr ""
+
+msgid "lockers"
+msgstr ""
+
+msgid "rack"
+msgstr ""
+
+msgid "shed"
+msgstr ""
+
+msgid "stands"
+msgstr ""
+
+msgid "wall_loops"
+msgstr ""
+
+msgid "Covered"
+msgstr ""
+
+msgid "Bike Dealer"
+msgstr ""
+
+msgid "Bicycles are sold"
+msgstr ""
+
+msgid "Second-hand bicycles are sold"
+msgstr ""
+
+msgid "Bicycles are repaired"
+msgstr ""
+
+msgid "Bicycles are rented"
+msgstr ""
+
+msgid "Free bicycle pump"
+msgstr ""
+
+msgid "Tools for do-it-yourself repair (may be a bike co-operative)"
+msgstr ""
+
+msgid "Bicycles are washed (for a fee)"
+msgstr ""
+
+msgid "Public Bicycle Repair Station"
+msgstr ""
+
+msgid "Chain tool"
+msgstr ""
+
+msgid "Public Transport"
+msgstr ""
+
+msgid "Public Transport Route"
+msgstr ""
+
+msgid "Route type"
+msgstr ""
+
+msgid "subway"
+msgstr ""
+
+msgid "monorail"
+msgstr ""
+
+msgid "light_rail"
+msgstr ""
+
+msgid "trolleybus"
+msgstr ""
+
+msgid "aerialway"
+msgstr ""
+
+msgid "From (initial stop)"
+msgstr ""
+
+msgid "To (terminal stop)"
+msgstr ""
+
+msgid "Via (intermediate stops)"
+msgstr ""
+
+msgid "Network"
+msgstr ""
+
+msgid "Color (HTML name or hexadecimal code)"
+msgstr ""
+
+msgctxt "color"
+msgid "black"
+msgstr ""
+
+msgctxt "color"
+msgid "brown"
+msgstr ""
+
+msgctxt "color"
+msgid "green"
+msgstr ""
+
+msgctxt "color"
+msgid "red"
+msgstr ""
+
+msgctxt "color"
+msgid "blue"
+msgstr ""
+
+msgctxt "color"
+msgid "gray"
+msgstr ""
+
+msgctxt "color"
+msgid "white"
+msgstr ""
+
+msgctxt "color"
+msgid "#CD853F"
+msgstr ""
+
+msgid "stop position"
+msgstr ""
+
+msgid "stop position (exit only)"
+msgstr ""
+
+msgid "stop position (entry only)"
+msgstr ""
+
+msgid "platform"
+msgstr ""
+
+msgid "platform (exit only)"
+msgstr ""
+
+msgid "platform (entry only)"
+msgstr ""
+
+msgid "route segment"
+msgstr ""
+
+msgid "Route Master"
+msgstr ""
+
+msgid "route variant/direction (at least 2)"
+msgstr ""
+
+msgid "Stop Area"
+msgstr ""
+
+msgid "UIC reference"
+msgstr ""
+
+msgid "UIC name"
+msgstr ""
+
+msgid "Stop Position"
+msgstr ""
+
+msgid "Platform"
+msgstr ""
+
+msgid "Subway Entrance"
+msgstr ""
+
+msgid "Station or amenities"
+msgstr ""
+
+msgid "Bus"
+msgstr ""
+
+msgid "Bus stop (legacy)"
+msgstr ""
+
+msgid "Tram stop (legacy)"
+msgstr ""
+
+msgid "Train"
+msgstr ""
+
+msgid "Railway station (legacy)"
+msgstr ""
+
+msgid "Railway halt (legacy)"
+msgstr ""
+
+msgid "Trolleybus"
+msgstr ""
+
+msgid "Share taxi"
+msgstr ""
+
+msgid "Funicular"
+msgstr ""
+
+msgid "Ferry"
+msgstr ""
+
+msgid "Bench"
+msgstr ""
+
+msgid "Shelter"
+msgstr ""
+
+msgid "Highway platform (legacy)"
+msgstr ""
+
+msgid "Railway platform (legacy)"
+msgstr ""
+
+msgid "funicular"
+msgstr ""
+
+msgctxt "railway"
+msgid "Station"
+msgstr ""
+
+msgid "Building"
+msgstr ""
+
+msgid "Ticket Machine"
+msgstr ""
+
+msgid "Reference Number"
+msgstr ""
+
+msgid "Public Transport (Legacy)"
+msgstr ""
+
+msgid "Public transport route (Legacy)"
+msgstr ""
+
+msgid "forward segment"
+msgstr ""
+
+msgid "backward segment"
+msgstr ""
+
+msgid "halt point"
+msgstr ""
+
+msgid "forward halt point"
+msgstr ""
+
+msgid "backward halt point"
+msgstr ""
+
+msgid "UIC-Reference"
+msgstr ""
+
+msgid "Railway Halt"
+msgstr ""
+
+msgid "Tram Stop"
+msgstr ""
+
+msgid "Railway Platform"
+msgstr ""
+
+msgid "Reference (track number)"
+msgstr ""
+
+msgid "Bus Station"
+msgstr ""
+
+msgid "Bus Stop"
+msgstr ""
+
+msgid "Tactile Paving"
+msgstr ""
+
+msgid "incorrect"
+msgstr ""
+
+msgid "Bus Platform"
+msgstr ""
+
+msgid "Taxi"
+msgstr ""
+
+msgid "Airport"
+msgstr ""
+
+msgid "Airport Ground"
+msgstr ""
+
+msgid "IATA"
+msgstr ""
+
+msgid "ICAO"
+msgstr ""
+
+msgid "Runway"
+msgstr ""
+
+msgid "Taxiway"
+msgstr ""
+
+msgid "Helipad"
+msgstr ""
+
+msgid "Apron"
+msgstr ""
+
+msgid "Plane Parking Position"
+msgstr ""
+
+msgid "Hangar"
+msgstr ""
+
+msgctxt "building"
+msgid "hangar"
+msgstr ""
+
+msgctxt "building"
+msgid "yes"
+msgstr ""
+
+msgid "Beacon"
+msgstr ""
+
+msgid "Windsock"
+msgstr ""
+
+msgid "Terminal"
+msgstr ""
+
+msgctxt "airport"
+msgid "Gate"
+msgstr ""
+
+msgid "Facilities"
+msgstr ""
+
+msgid "Accommodation"
+msgstr ""
+
+msgid "Hotel"
+msgstr ""
+
+msgid "Stars"
+msgstr ""
+
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
+msgid "Motel"
+msgstr ""
+
+msgid "Guest House/Bed & Breakfast"
+msgstr ""
+
+msgid "Chalet"
+msgstr ""
+
+msgid "Hostel"
+msgstr ""
+
+msgid "Alpine Hut"
+msgstr ""
+
+msgid "Caravan Site/RV Park"
+msgstr ""
+
+msgid "Number of places"
+msgstr ""
+
+msgid "Power supply"
+msgstr ""
+
+msgid "Tents allowed"
+msgstr ""
+
+msgid "Camping Site"
+msgstr ""
+
+msgid "Food+Drinks"
+msgstr ""
+
+msgid "Restaurant"
+msgstr ""
+
+msgid "Cuisine"
+msgstr ""
+
+msgid "italian"
+msgstr ""
+
+msgid "chinese"
+msgstr ""
+
+msgid "pizza"
+msgstr ""
+
+msgid "burger"
+msgstr ""
+
+msgid "greek"
+msgstr ""
+
+msgid "german"
+msgstr ""
+
+msgid "indian"
+msgstr ""
+
+msgid "regional"
+msgstr ""
+
+msgid "kebab"
+msgstr ""
+
+msgid "turkish"
+msgstr ""
+
+msgid "asian"
+msgstr ""
+
+msgid "thai"
+msgstr ""
+
+msgid "mexican"
+msgstr ""
+
+msgid "japanese"
+msgstr ""
+
+msgid "french"
+msgstr ""
+
+msgid "sandwich"
+msgstr ""
+
+msgid "sushi"
+msgstr ""
+
+msgid "steak_house"
+msgstr ""
+
+msgid "Microbrewery"
+msgstr ""
+
+msgid "Outdoor seating"
+msgstr ""
+
+msgid "Fast Food"
+msgstr ""
+
+msgid "fish_and_chips"
+msgstr ""
+
+msgid "chicken"
+msgstr ""
+
+msgid "Food Court"
+msgstr ""
+
+msgid "Cafe"
+msgstr ""
+
+msgid "ice_cream"
+msgstr ""
+
+msgid "Pub"
+msgstr ""
+
+msgid "Beer Garden"
+msgstr ""
+
+msgid "Bar"
+msgstr ""
+
+msgid "Night Club"
+msgstr ""
+
+msgid "Strip Club"
+msgstr ""
+
+msgid "Tourism"
+msgstr ""
+
+msgid "Attraction"
+msgstr ""
+
+msgid "Viewpoint"
+msgstr ""
+
+msgid "Look-Out Tower"
+msgstr ""
+
+msgid "Information Office"
+msgstr ""
+
+msgid "An office where you can get information about a town or region."
+msgstr ""
+
+msgid "Map"
+msgstr ""
+
+msgid "A board with a map."
+msgstr ""
+
+msgid "Detail Grade"
+msgstr ""
+
+msgid "topo"
+msgstr ""
+
+msgid "street"
+msgstr ""
+
+msgid "scheme"
+msgstr ""
+
+msgid "toposcope"
+msgstr ""
+
+msgid "Shown Area"
+msgstr ""
+
+msgid "site"
+msgstr ""
+
+msgid "city"
+msgstr ""
+
+msgid "region"
+msgstr ""
+
+msgid "Closer Description"
+msgstr ""
+
+msgid "Routes shown for:"
+msgstr ""
+
+msgid "Hiking"
+msgstr ""
+
+msgid "Cycling"
+msgstr ""
+
+msgid "Mountainbiking"
+msgstr ""
+
+msgid "Skiing"
+msgstr ""
+
+msgid "Riding"
+msgstr ""
+
+msgid "... other transportation modes possible"
+msgstr ""
+
+msgid "Information Board"
+msgstr ""
+
+msgid "A board with information."
+msgstr ""
+
+msgid "Board Content"
+msgstr ""
+
+msgid "notice"
+msgstr ""
+
+msgid "history"
+msgstr ""
+
+msgid "nature"
+msgstr ""
+
+msgid "wildlife"
+msgstr ""
+
+msgid "plants"
+msgstr ""
+
+msgid "geology"
+msgstr ""
+
+msgid "Guidepost"
+msgstr ""
+
+msgid ""
+"A Signpost/Guidepost to indicate the directions to different destinations."
+msgstr ""
+
+msgid "Information Terminal"
+msgstr ""
+
+msgid "Information access via electronic methods."
+msgstr ""
+
+msgid "Closer description"
+msgstr ""
+
+msgid "Audio Guide"
+msgstr ""
+
+msgid "Information using headphones or a mobile phone."
+msgstr ""
+
+msgid "Audioguide via mobile phone?"
+msgstr ""
+
+msgid "Phone number"
+msgstr ""
+
+msgid "Other Information Point"
+msgstr ""
+
+msgid "Leisure"
+msgstr ""
+
+msgid "Movie Theater/Cinema"
+msgstr ""
+
+msgid "Drive-in theater"
+msgstr ""
+
+msgid "3D"
+msgstr ""
+
+msgid "Number of screens"
+msgstr ""
+
+msgid "Minimum age"
+msgstr ""
+
+msgid "Zoo"
+msgstr ""
+
+msgid "Dog Park"
+msgstr ""
+
+msgid "fence"
+msgstr ""
+
+msgid "wall"
+msgstr ""
+
+msgid "Amusement/Theme Park"
+msgstr ""
+
+msgid "Water Park"
+msgstr ""
+
+msgid "Sauna"
+msgstr ""
+
+msgid "Horse Riding"
+msgstr ""
+
+msgid "Casino"
+msgstr ""
+
+msgid "Brothel"
+msgstr ""
+
+msgid "Playground"
+msgstr ""
+
+msgid "Picnic Site"
+msgstr ""
+
+msgid "Fireplace"
+msgstr ""
+
+msgid "Picnic Table"
+msgstr ""
+
+msgid "Public Grill"
+msgstr ""
+
+msgctxt "grill"
+msgid "Fuel"
+msgstr ""
+
+msgid "charcoal"
+msgstr ""
+
+msgid "Firepit"
+msgstr ""
+
+msgid "Fishing"
+msgstr ""
+
+msgid "Private Swimming Pool"
+msgstr ""
+
+msgid "Culture"
+msgstr ""
+
+msgid "Museum"
+msgstr ""
+
+msgid "Theatre"
+msgstr ""
+
+msgid "Library"
+msgstr ""
+
+msgid "Arts Centre"
+msgstr ""
+
+msgid "Artwork"
+msgstr ""
+
+msgid "mural"
+msgstr ""
+
+msgid "sculpture"
+msgstr ""
+
+msgid "statue"
+msgstr ""
+
+msgid "Artist Name"
+msgstr ""
+
+msgid "Recording Studio"
+msgstr ""
+
+msgid "audio"
+msgstr ""
+
+msgid "video"
+msgstr ""
+
+msgid "Place of Worship"
+msgstr ""
+
+msgid "Church"
+msgstr ""
+
+msgid "Building type"
+msgstr ""
+
+msgid "basilica"
+msgstr ""
+
+msgid "cathedral"
+msgstr ""
+
+msgid "chapel"
+msgstr ""
+
+msgid "church"
+msgstr ""
+
+msgid "temple"
+msgstr ""
+
+msgctxt "christian"
+msgid "anglican"
+msgstr ""
+
+msgctxt "christian"
+msgid "baptist"
+msgstr ""
+
+msgctxt "christian"
+msgid "catholic"
+msgstr ""
+
+msgctxt "christian"
+msgid "evangelical"
+msgstr ""
+
+msgctxt "christian"
+msgid "greek_catholic"
+msgstr ""
+
+msgctxt "christian"
+msgid "greek_orthodox"
+msgstr ""
+
+msgctxt "christian"
+msgid "jehovahs_witness"
+msgstr ""
+
+msgctxt "christian"
+msgid "lutheran"
+msgstr ""
+
+msgctxt "christian"
+msgid "methodist"
+msgstr ""
+
+msgctxt "christian"
+msgid "mormon"
+msgstr ""
+
+msgctxt "christian"
+msgid "new_apostolic"
+msgstr ""
+
+msgctxt "christian"
+msgid "orthodox"
+msgstr ""
+
+msgctxt "christian"
+msgid "pentecostal"
+msgstr ""
+
+msgctxt "christian"
+msgid "presbyterian"
+msgstr ""
+
+msgctxt "christian"
+msgid "protestant"
+msgstr ""
+
+msgctxt "christian"
+msgid "quaker"
+msgstr ""
+
+msgctxt "christian"
+msgid "roman_catholic"
+msgstr ""
+
+msgctxt "christian"
+msgid "russian_orthodox"
+msgstr ""
+
+msgctxt "christian"
+msgid "seventh_day_adventist"
+msgstr ""
+
+msgid "Mosque"
+msgstr ""
+
+msgid "mosque"
+msgstr ""
+
+msgid "ibadi"
+msgstr ""
+
+msgid "Synagogue"
+msgstr ""
+
+msgid "synagogue"
+msgstr ""
+
+msgctxt "jewish"
+msgid "orthodox"
+msgstr ""
+
+msgctxt "jewish"
+msgid "conservative"
+msgstr ""
+
+msgctxt "jewish"
+msgid "reform"
+msgstr ""
+
+msgid "Buddhist Temple"
+msgstr ""
+
+msgid "theravada"
+msgstr ""
+
+msgid "mahayana"
+msgstr ""
+
+msgid "vajrayana"
+msgstr ""
+
+msgid "Hindu Temple"
+msgstr ""
+
+msgid "vaishnavism"
+msgstr ""
+
+msgid "shaivism"
+msgstr ""
+
+msgid "shaktism"
+msgstr ""
+
+msgid "smartism"
+msgstr ""
+
+msgid "Shinto Shrine"
+msgstr ""
+
+msgid "Other Place of Worship"
+msgstr ""
+
+msgid "Public Building"
+msgstr ""
+
+msgid "Town Hall"
+msgstr ""
+
+msgid "Community Centre"
+msgstr ""
+
+msgid "Embassy"
+msgstr ""
+
+msgid "Courthouse"
+msgstr ""
+
+msgid "Prison"
+msgstr ""
+
+msgid "Police"
+msgstr ""
+
+msgid "Ranger Station"
+msgstr ""
+
+msgid "Fire Station"
+msgstr ""
+
+msgid "Post Office"
+msgstr ""
+
+msgid "Education"
+msgstr ""
+
+msgid "Kindergarten"
+msgstr ""
+
+msgid "School"
+msgstr ""
+
+msgid "University"
+msgstr ""
+
+msgid "College"
+msgstr ""
+
+msgid "Driving School"
+msgstr ""
+
+msgid "License Classes"
+msgstr ""
+
+msgid "A;A1;B;BE;C"
+msgstr ""
+
+msgid "A;A1;B;B1;C;C1;D;D1;BE;CE;C1E;DE;D1E"
+msgstr ""
+
+msgid "Health"
+msgstr ""
+
+msgid "Hospital"
+msgstr ""
+
+msgid "Clinic"
+msgstr ""
+
+msgid "Doctor''s Office"
+msgstr ""
+
+msgid "Dentist"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Retirement Home"
+msgstr ""
+
+msgid "Pharmacy"
+msgstr ""
+
+msgid "Dispensing"
+msgstr ""
+
+msgid "Baby Hatch/Safe Haven"
+msgstr ""
+
+msgid "Emergency Access Point"
+msgstr ""
+
+msgid "Point Number"
+msgstr ""
+
+msgid "Point Name"
+msgstr ""
+
+msgid "Phone Number"
+msgstr ""
+
+msgid "(Use international code, like +12-345-67890)"
+msgstr ""
+
+msgid "Veterinary"
+msgstr ""
+
+msgid "Toilets/Restrooms"
+msgstr ""
+
+msgid "Access rights"
+msgstr ""
+
+msgid "seasonal"
+msgstr ""
+
+msgid "flush"
+msgstr ""
+
+msgid "pitlatrine"
+msgstr ""
+
+msgid "chemical"
+msgstr ""
+
+msgid "bucket"
+msgstr ""
+
+msgid "Usage Position"
+msgstr ""
+
+msgid "seated"
+msgstr ""
+
+msgid "seated;urinal"
+msgstr ""
+
+msgid "squat"
+msgstr ""
+
+msgid "urinal"
+msgstr ""
+
+msgid "Shower"
+msgstr ""
+
+msgid "Post Box"
+msgstr ""
+
+msgid "Collection times"
+msgstr ""
+
+msgid "Mo-Sa 09:00"
+msgstr ""
+
+msgid "Mo-Fr 17:30; Sa 12:00"
+msgstr ""
+
+msgid "Mo-Fr 15:00,19:00; Sa 15:10; Su 10:30"
+msgstr ""
+
+msgid "Drive through"
+msgstr ""
+
+msgid "Telephone"
+msgstr ""
+
+msgid "Coins"
+msgstr ""
+
+msgctxt "payment"
+msgid "Notes"
+msgstr ""
+
+msgid "Telephone cards"
+msgstr ""
+
+msgid "Emergency Phone"
+msgstr ""
+
+msgid "Internet Access"
+msgstr ""
+
+msgid "Automated Defibrillator"
+msgstr ""
+
+msgid "Located inside a building?"
+msgstr ""
+
+msgid "Last check date (YYYY-MM-DD)"
+msgstr ""
+
+msgid "Last check note"
+msgstr ""
+
+msgid "Clock"
+msgstr ""
+
+msgid "Display"
+msgstr ""
+
+msgid "analog"
+msgstr ""
+
+msgid "digital"
+msgstr ""
+
+msgid "sundial"
+msgstr ""
+
+msgid "unorthodox"
+msgstr ""
+
+msgid "Support"
+msgstr ""
+
+msgctxt "mounting/support"
+msgid "pole"
+msgstr ""
+
+msgctxt "mounting/support"
+msgid "wall_mounted"
+msgstr ""
+
+msgctxt "mounting/support"
+msgid "billboard"
+msgstr ""
+
+msgctxt "mounting/support"
+msgid "ground"
+msgstr ""
+
+msgid "Visibility/readability"
+msgstr ""
+
+msgid "house (up to 5m)"
+msgstr ""
+
+msgid "street (up to 20m)"
+msgstr ""
+
+msgid "area (more than 20m)"
+msgstr ""
+
+msgid "Shows current date"
+msgstr ""
+
+msgid "Shows temperature"
+msgstr ""
+
+msgid "Shows barometric pressure"
+msgstr ""
+
+msgid "Shows humidity"
+msgstr ""
+
+msgid "Recycling Container"
+msgstr ""
+
+msgid "Batteries"
+msgstr ""
+
+msgid "Cans"
+msgstr ""
+
+msgid "Cardboard"
+msgstr ""
+
+msgid "Electrical Appliances"
+msgstr ""
+
+msgid "Glass"
+msgstr ""
+
+msgid "Glass Bottles"
+msgstr ""
+
+msgid "Green Waste"
+msgstr ""
+
+msgid "Paper"
+msgstr ""
+
+msgid "Plastic"
+msgstr ""
+
+msgid "Plastic Bottles"
+msgstr ""
+
+msgid "Plastic Packaging"
+msgstr ""
+
+msgid "Scrap Metal"
+msgstr ""
+
+msgid "Shoes"
+msgstr ""
+
+msgid "Small Appliances"
+msgstr ""
+
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
+msgstr ""
+
+msgid "Waste Basket/Trash Can"
+msgstr ""
+
+msgid "Waste Disposal/Dumpster"
+msgstr ""
+
+msgid "Sanitary Dump Station"
+msgstr ""
+
+msgid "Suction pumpout"
+msgstr ""
+
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
+msgstr ""
+
+msgid "Operation times"
+msgstr ""
+
+msgid "Backrest"
+msgstr ""
+
+msgid "Amount of Seats"
+msgstr ""
+
+msgid "Type of shelter"
+msgstr ""
+
+msgctxt "shelter"
+msgid "basic_hut"
+msgstr ""
+
+msgctxt "shelter"
+msgid "lean_to"
+msgstr ""
+
+msgctxt "shelter"
+msgid "picnic_shelter"
+msgstr ""
+
+msgctxt "shelter"
+msgid "public_transport"
+msgstr ""
+
+msgctxt "shelter"
+msgid "weather_shelter"
+msgstr ""
+
+msgctxt "shelter"
+msgid "wildlife_hide"
+msgstr ""
+
+msgid "Hunting Stand"
+msgstr ""
+
+msgid "Height"
+msgstr ""
+
+msgctxt "height"
+msgid "low"
+msgstr ""
+
+msgctxt "height"
+msgid "half"
+msgstr ""
+
+msgctxt "height"
+msgid "full"
+msgstr ""
+
+msgid "Hide"
+msgstr ""
+
+msgid "Lock"
+msgstr ""
+
+msgid "Indoor"
+msgstr ""
+
+msgid "Fire Hydrant"
+msgstr ""
+
+msgctxt "pipeline"
+msgid "underground"
+msgstr ""
+
+msgctxt "pipeline"
+msgid "pillar"
+msgstr ""
+
+msgctxt "pipeline"
+msgid "wall"
+msgstr ""
+
+msgctxt "pipeline"
+msgid "pond"
+msgstr ""
+
+msgid "Diameter (in mm)"
+msgstr ""
+
+msgid "Hydrant Position"
+msgstr ""
+
+msgctxt "hydrant position"
+msgid "lane"
+msgstr ""
+
+msgctxt "hydrant position"
+msgid "parking_lot"
+msgstr ""
+
+msgctxt "hydrant position"
+msgid "sidewalk"
+msgstr ""
+
+msgctxt "hydrant position"
+msgid "green"
+msgstr ""
+
+msgid "Pressure (in bar)"
+msgstr ""
+
+msgid "suction"
+msgstr ""
+
+msgid "Count"
+msgstr ""
+
+msgid "Advertising Column"
+msgstr ""
+
+msgid "Billboard"
+msgstr ""
+
+msgid "Sports"
+msgstr ""
+
+msgid "Sport Facilities"
+msgstr ""
+
+msgid "Stadium"
+msgstr ""
+
+msgid "Sports Centre"
+msgstr ""
+
+msgid "Pitch"
+msgstr ""
+
+msgid "artificial_turf"
+msgstr ""
+
+msgid "decoturf"
+msgstr ""
+
+msgid "tartan"
+msgstr ""
+
+msgid "Racetrack"
+msgstr ""
+
+msgid "Golf Course"
+msgstr ""
+
+msgid "Miniature Golf"
+msgstr ""
+
+msgid "Multi"
+msgstr ""
+
+msgctxt "running"
+msgid "pitch"
+msgstr ""
+
+msgctxt "running"
+msgid "sports_centre"
+msgstr ""
+
+msgctxt "running"
+msgid "stadium"
+msgstr ""
+
+msgctxt "running"
+msgid "track"
+msgstr ""
+
+msgid "Nine-pin Bowling"
+msgstr ""
+
+msgid "Ten-pin Bowling"
+msgstr ""
+
+msgid "Archery"
+msgstr ""
+
+msgid "Track and Field Athletics"
+msgstr ""
+
+msgid "Running"
+msgstr ""
+
+msgid "Climbing"
+msgstr ""
+
+msgid "Canoeing/Kayaking"
+msgstr ""
+
+msgctxt "racing"
+msgid "pitch"
+msgstr ""
+
+msgctxt "racing"
+msgid "sports_centre"
+msgstr ""
+
+msgctxt "racing"
+msgid "stadium"
+msgstr ""
+
+msgctxt "racing"
+msgid "track"
+msgstr ""
+
+msgid "Dog Racing"
+msgstr ""
+
+msgid "Equestrian"
+msgstr ""
+
+msgid "Horse Racing"
+msgstr ""
+
+msgid "Gymnastics"
+msgstr ""
+
+msgid "Skating"
+msgstr ""
+
+msgid "ice_rink"
+msgstr ""
+
+msgid "Skateboard"
+msgstr ""
+
+msgid "Swimming"
+msgstr ""
+
+msgid "swimming_pool"
+msgstr ""
+
+msgid "water_park"
+msgstr ""
+
+msgid "Scuba Diving"
+msgstr ""
+
+msgid "Piste type"
+msgstr ""
+
+msgid "downhill"
+msgstr ""
+
+msgid "nordic"
+msgstr ""
+
+msgid "skitour"
+msgstr ""
+
+msgid "sled"
+msgstr ""
+
+msgid "sleigh"
+msgstr ""
+
+msgid "snow_park"
+msgstr ""
+
+msgid "Difficulty"
+msgstr ""
+
+msgctxt "piste:difficulty"
+msgid "novice"
+msgstr ""
+
+msgctxt "piste:difficulty"
+msgid "easy"
+msgstr ""
+
+msgctxt "piste:difficulty"
+msgid "intermediate"
+msgstr ""
+
+msgctxt "piste:difficulty"
+msgid "advanced"
+msgstr ""
+
+msgctxt "piste:difficulty"
+msgid "expert"
+msgstr ""
+
+msgctxt "piste:difficulty"
+msgid "freeride"
+msgstr ""
+
+msgid "Grooming"
+msgstr ""
+
+msgctxt "piste:grooming"
+msgid "classic"
+msgstr ""
+
+msgctxt "piste:grooming"
+msgid "mogul"
+msgstr ""
+
+msgctxt "piste:grooming"
+msgid "skating"
+msgstr ""
+
+msgctxt "piste:grooming"
+msgid "classic;skating"
+msgstr ""
+
+msgctxt "piste:grooming"
+msgid "scooter"
+msgstr ""
+
+msgctxt "piste:grooming"
+msgid "backcountry"
+msgstr ""
+
+msgid "Shooting"
+msgstr ""
+
+msgid "Sport (Ball)"
+msgstr ""
+
+msgid "Soccer"
+msgstr ""
+
+msgid "Australian Football"
+msgstr ""
+
+msgid "American Football"
+msgstr ""
+
+msgid "Canadian Football"
+msgstr ""
+
+msgid "Gaelic Games"
+msgstr ""
+
+msgid "Hurling"
+msgstr ""
+
+msgid "Football"
+msgstr ""
+
+msgid "Camogie"
+msgstr ""
+
+msgid "Rounders"
+msgstr ""
+
+msgid "Rugby League"
+msgstr ""
+
+msgid "Rugby Union"
+msgstr ""
+
+msgid "Baseball"
+msgstr ""
+
+msgid "Basketball"
+msgstr ""
+
+msgid "Handball"
+msgstr ""
+
+msgid "Volleyball"
+msgstr ""
+
+msgid "Beach Volleyball"
+msgstr ""
+
+msgid "Billiards"
+msgstr ""
+
+msgid "Golf"
+msgstr ""
+
+msgid "golf_course"
+msgstr ""
+
+msgid "Boule"
+msgstr ""
+
+msgid "Lawn Bowling"
+msgstr ""
+
+msgid "Cricket"
+msgstr ""
+
+msgid "Croquet"
+msgstr ""
+
+msgid "Field Hockey"
+msgstr ""
+
+msgid "Ice Hockey"
+msgstr ""
+
+msgid "Pelota"
+msgstr ""
+
+msgid "Racquetball"
+msgstr ""
+
+msgid "Table Tennis/Ping-Pong"
+msgstr ""
+
+msgid "Tennis"
+msgstr ""
+
+msgid "Motorsport"
+msgstr ""
+
+msgid "Kart Racing"
+msgstr ""
+
+msgid "Motocross"
+msgstr ""
+
+msgid "Model Aerodrome"
+msgstr ""
+
+msgctxt "aerialway"
+msgid "pitch"
+msgstr ""
+
+msgctxt "aerialway"
+msgid "sports_centre"
+msgstr ""
+
+msgctxt "aerialway"
+msgid "track"
+msgstr ""
+
+msgid "RC Car"
+msgstr ""
+
+msgid "Man Made"
+msgstr ""
+
+msgctxt "building"
+msgid "roof"
+msgstr ""
+
+msgctxt "building"
+msgid "garage"
+msgstr ""
+
+msgctxt "building"
+msgid "garages"
+msgstr ""
+
+msgctxt "building"
+msgid "industrial"
+msgstr ""
+
+msgctxt "building"
+msgid "school"
+msgstr ""
+
+msgctxt "building"
+msgid "commercial"
+msgstr ""
+
+msgctxt "building"
+msgid "barn"
+msgstr ""
+
+msgctxt "building"
+msgid "farm_auxiliary"
+msgstr ""
+
+msgctxt "building"
+msgid "transportation"
+msgstr ""
+
+msgctxt "building"
+msgid "greenhouse"
+msgstr ""
+
+msgctxt "building"
+msgid "office"
+msgstr ""
+
+msgctxt "building"
+msgid "university"
+msgstr ""
+
+msgctxt "building"
+msgid "hospital"
+msgstr ""
+
+msgctxt "building"
+msgid "warehouse"
+msgstr ""
+
+msgctxt "building"
+msgid "retail"
+msgstr ""
+
+msgctxt "building"
+msgid "shed"
+msgstr ""
+
+msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
+msgid "cowshed"
+msgstr ""
+
+msgctxt "building"
+msgid "construction"
+msgstr ""
+
+msgctxt "building"
+msgid "Levels"
+msgstr ""
+
+msgid "Residential Building"
+msgstr ""
+
+msgctxt "building"
+msgid "residential"
+msgstr ""
+
+msgctxt "building"
+msgid "apartments"
+msgstr ""
+
+msgctxt "building"
+msgid "house"
+msgstr ""
+
+msgctxt "building"
+msgid "hut"
+msgstr ""
+
+msgctxt "building"
+msgid "dormitory"
+msgstr ""
+
+msgctxt "building"
+msgid "terrace"
+msgstr ""
+
+msgctxt "building"
+msgid "detached"
+msgstr ""
+
+msgctxt "building"
+msgid "farm"
+msgstr ""
+
+msgid "Building part"
+msgstr ""
+
+msgctxt "building"
+msgid "Skipped Levels"
+msgstr ""
+
+msgid "Skipped height (meters)"
+msgstr ""
+
+msgid "Entrance"
+msgstr ""
+
+msgctxt "entrance"
+msgid "yes"
+msgstr ""
+
+msgctxt "entrance"
+msgid "main"
+msgstr ""
+
+msgctxt "entrance"
+msgid "service"
+msgstr ""
+
+msgctxt "entrance"
+msgid "exit"
+msgstr ""
+
+msgctxt "entrance"
+msgid "emergency"
+msgstr ""
+
+msgid "Entrance number"
+msgstr ""
+
+msgid "Flat numbers"
+msgstr ""
+
+msgid "Tower"
+msgstr ""
+
+msgid "Tower type"
+msgstr ""
+
+msgid "communication"
+msgstr ""
+
+msgid "observation"
+msgstr ""
+
+msgid "Flagpole"
+msgstr ""
+
+msgid "Works"
+msgstr ""
+
+msgid "Chimney"
+msgstr ""
+
+msgid "Windmill"
+msgstr ""
+
+msgid "Gasometer"
+msgstr ""
+
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
+msgid "Bunker Silo"
+msgstr ""
+
+msgid "Pipeline"
+msgstr ""
+
+msgid "water"
+msgstr ""
+
+msgid "gas"
+msgstr ""
+
+msgid "heat"
+msgstr ""
+
+msgid "oil"
+msgstr ""
+
+msgid "sewage"
+msgstr ""
+
+msgctxt "pipeline"
+msgid "underwater"
+msgstr ""
+
+msgctxt "pipeline"
+msgid "overground"
+msgstr ""
+
+msgid "Crane"
+msgstr ""
+
+msgid "Mineshaft"
+msgstr ""
+
+msgid "Function"
+msgstr ""
+
+msgid "winding"
+msgstr ""
+
+msgid "air"
+msgstr ""
+
+msgid "Depth in meters"
+msgstr ""
+
+msgid "Resource"
+msgstr ""
+
+msgid "aggregate"
+msgstr ""
+
+msgid "bauxite"
+msgstr ""
+
+msgid "coal"
+msgstr ""
+
+msgid "copper"
+msgstr ""
+
+msgid "dimension_stone"
+msgstr ""
+
+msgid "gold"
+msgstr ""
+
+msgid "ilmenite"
+msgstr ""
+
+msgid "iron_ore"
+msgstr ""
+
+msgid "lead"
+msgstr ""
+
+msgid "limestone"
+msgstr ""
+
+msgid "nickel"
+msgstr ""
+
+msgid "rutile"
+msgstr ""
+
+msgid "salt"
+msgstr ""
+
+msgid "silver"
+msgstr ""
+
+msgid "tin"
+msgstr ""
+
+msgid "zinc"
+msgstr ""
+
+msgid "zircon"
+msgstr ""
+
+msgid "Visible Headframe"
+msgstr ""
+
+msgid "Disused"
+msgstr ""
+
+msgid "Adit"
+msgstr ""
+
+msgid "Length in meters"
+msgstr ""
+
+msgid "Water Tower"
+msgstr ""
+
+msgid "Water Works"
+msgstr ""
+
+msgid "Wastewater Treatment Plant"
+msgstr ""
+
+msgid "Watermill"
+msgstr ""
+
+msgid "Fountain"
+msgstr ""
+
+msgid "Water Well"
+msgstr ""
+
+msgid "Lighthouse"
+msgstr ""
+
+msgid "Street Lamp"
+msgstr ""
+
+msgid "Mo-Fr 22:00-05:00"
+msgstr ""
+
+msgid "Monitoring Station"
+msgstr ""
+
+msgid "Monitoring:"
+msgstr ""
+
+msgid "Water level"
+msgstr ""
+
+msgid "Tide Level"
+msgstr ""
+
+msgid "Groundwater"
+msgstr ""
+
+msgid "Traffic"
+msgstr ""
+
+msgid "Air Quality"
+msgstr ""
+
+msgid "Noise"
+msgstr ""
+
+msgid "GPS Signals"
+msgstr ""
+
+msgid "GLONASS Signals"
+msgstr ""
+
+msgid "Galileo Signals"
+msgstr ""
+
+msgid "Weather"
+msgstr ""
+
+msgid "Radiation"
+msgstr ""
+
+msgid "Seismic Activity"
+msgstr ""
+
+msgid "Recording:"
+msgstr ""
+
+msgid "Automated"
+msgstr ""
+
+msgid "Manually"
+msgstr ""
+
+msgid "Remote"
+msgstr ""
+
+msgid "Display:"
+msgstr ""
+
+msgid "Analog"
+msgstr ""
+
+msgid "Digital"
+msgstr ""
+
+msgid "Survey Point"
+msgstr ""
+
+msgid "Surveillance Camera"
+msgstr ""
+
+msgid "indoor"
+msgstr ""
+
+msgid "outdoor"
+msgstr ""
+
+msgid "Zone"
+msgstr ""
+
+msgid "parking"
+msgstr ""
+
+msgid "traffic"
+msgstr ""
+
+msgid "shop"
+msgstr ""
+
+msgid "bank"
+msgstr ""
+
+msgid "Camera"
+msgstr ""
+
+msgctxt "camera:type"
+msgid "fixed"
+msgstr ""
+
+msgctxt "camera:type"
+msgid "panning"
+msgstr ""
+
+msgctxt "camera:type"
+msgid "dome"
+msgstr ""
+
+msgid "Mounted on"
+msgstr ""
+
+msgctxt "camera:mount"
+msgid "wall"
+msgstr ""
+
+msgctxt "camera:mount"
+msgid "pole"
+msgstr ""
+
+msgctxt "camera:mount"
+msgid "ceiling"
+msgstr ""
+
+msgid "Direction in degrees"
+msgstr ""
+
+msgid "Inclination in degrees"
+msgstr ""
+
+msgid "Bridges"
+msgstr ""
+
+msgid "aqueduct"
+msgstr ""
+
+msgid "boardwalk"
+msgstr ""
+
+msgid "cantilever"
+msgstr ""
+
+msgid "covered"
+msgstr ""
+
+msgid "low_water_crossing"
+msgstr ""
+
+msgid "trestle"
+msgstr ""
+
+msgid "viaduct"
+msgstr ""
+
+msgid "Structure"
+msgstr ""
+
+msgid "arch"
+msgstr ""
+
+msgid "beam"
+msgstr ""
+
+msgid "truss"
+msgstr ""
+
+msgid "floating"
+msgstr ""
+
+msgid "suspension"
+msgstr ""
+
+msgid "cable-stayed"
+msgstr ""
+
+msgid "simple-suspension"
+msgstr ""
+
+msgid "humpback"
+msgstr ""
+
+msgid "Movable Bridge"
+msgstr ""
+
+msgid "bascule"
+msgstr ""
+
+msgid "drawbridge"
+msgstr ""
+
+msgid "lift"
+msgstr ""
+
+msgid "submersible"
+msgstr ""
+
+msgid "swing"
+msgstr ""
+
+msgid "transporter"
+msgstr ""
+
+msgid "Bridge Support"
+msgstr ""
+
+msgid "pier"
+msgstr ""
+
+msgid "abutment"
+msgstr ""
+
+msgid "lift_pier"
+msgstr ""
+
+msgid "pivot_pier"
+msgstr ""
+
+msgid "Bridge outline"
+msgstr ""
+
+msgid "Power Plant"
+msgstr ""
+
+msgid "Output forms of energy (optional):"
+msgstr ""
+
+msgid "Power Generator"
+msgstr ""
+
+msgid "Biofuel Power Generator"
+msgstr ""
+
+msgid "Generator Type"
+msgstr ""
+
+msgid "gas_turbine"
+msgstr ""
+
+msgid "reciprocating_engine"
+msgstr ""
+
+msgid "steam_generator"
+msgstr ""
+
+msgid "Biogas Power Generator"
+msgstr ""
+
+msgid "Biomass Power Generator"
+msgstr ""
+
+msgid "Method"
+msgstr ""
+
+msgctxt "generator method"
+msgid "anaerobic_digestion"
+msgstr ""
+
+msgctxt "generator method"
+msgid "combustion"
+msgstr ""
+
+msgctxt "generator method"
+msgid "gasification"
+msgstr ""
+
+msgid "bioreactor"
+msgstr ""
+
+msgid "anaerobic_digestion / combustion"
+msgstr ""
+
+msgid "pyrolysis"
+msgstr ""
+
+msgid "combustion"
+msgstr ""
+
+msgid "steam_turbine"
+msgstr ""
+
+msgid "Coal Power Generator"
+msgstr ""
+
+msgid "Gas Power Generator"
+msgstr ""
+
+msgid "combined_cycle"
+msgstr ""
+
+msgid "Oil Power Generator"
+msgstr ""
+
+msgid "Diesel Power Generator"
+msgstr ""
+
+msgid "Gasoline Power Generator"
+msgstr ""
+
+msgid "Nuclear Reactor"
+msgstr ""
+
+msgctxt "generator method"
+msgid "fission"
+msgstr ""
+
+msgctxt "generator method"
+msgid "fusion"
+msgstr ""
+
+msgid "Boiling Water Reactor 1 (BWR-1)"
+msgstr ""
+
+msgid "fission"
+msgstr ""
+
+msgid "Boiling Water Reactor 2 (BWR-2)"
+msgstr ""
+
+msgid "Boiling Water Reactor 3 (BWR-3)"
+msgstr ""
+
+msgid "Boiling Water Reactor 4 (BWR-4)"
+msgstr ""
+
+msgid "Boiling Water Reactor 5 (BWR-5)"
+msgstr ""
+
+msgid "Boiling Water Reactor 6 (BWR-6)"
+msgstr ""
+
+msgid "CANada Deuterium Uranium reactor (CANDU)"
+msgstr ""
+
+msgid "cold-fusion"
+msgstr ""
+
+msgid "fusion"
+msgstr ""
+
+msgid "China Pressurized Reactor (CPR-1000)"
+msgstr ""
+
+msgid "European Pressurized Reactor (EPR)"
+msgstr ""
+
+msgid "Inertial Confinement Fusion (ICF)"
+msgstr ""
+
+msgid "Pressurized water reactor (PWR)"
+msgstr ""
+
+msgid "Reactor Bolshoy Moshchnosti Kanalniy 1000 (RBMK-1000)"
+msgstr ""
+
+msgid "Reactor Bolshoy Moshchnosti Kanalniy 1500 (RBMK-1500)"
+msgstr ""
+
+msgid "stellarator"
+msgstr ""
+
+msgid "tokamak"
+msgstr ""
+
+msgid "Vodo-Vodyanoi Energetichesky Reactor (VVER)"
+msgstr ""
+
+msgid "Solar Power Generator"
+msgstr ""
+
+msgctxt "generator method"
+msgid "photovoltaic"
+msgstr ""
+
+msgctxt "generator method"
+msgid "thermal"
+msgstr ""
+
+msgid "solar_photovoltaic_panel"
+msgstr ""
+
+msgid "photovoltaic"
+msgstr ""
+
+msgid "solar_thermal_collector"
+msgstr ""
+
+msgid "thermal"
+msgstr ""
+
+msgid "Waste Power Generator"
+msgstr ""
+
+msgctxt "generator method"
+msgid "pyrolysis"
+msgstr ""
+
+msgid "gasification"
+msgstr ""
+
+msgid "Water Turbine"
+msgstr ""
+
+msgctxt "generator method"
+msgid "run-of-the-river"
+msgstr ""
+
+msgctxt "generator method"
+msgid "water-pumped-storage"
+msgstr ""
+
+msgctxt "generator method"
+msgid "water-storage"
+msgstr ""
+
+msgid "francis_turbine"
+msgstr ""
+
+msgid "all methods"
+msgstr ""
+
+msgid "hydrodynamic_screw"
+msgstr ""
+
+msgid "run-of-the-river"
+msgstr ""
+
+msgid "kaplan_turbine"
+msgstr ""
+
+msgid "run-of-the-river / water-storage"
+msgstr ""
+
+msgid "pelton_turbine"
+msgstr ""
+
+msgid "Tidal Water Turbine"
+msgstr ""
+
+msgctxt "generator method"
+msgid "barrage"
+msgstr ""
+
+msgctxt "generator method"
+msgid "stream"
+msgstr ""
+
+msgid "horizontal_axis"
+msgstr ""
+
+msgid "barrage"
+msgstr ""
+
+msgid "vertical_axis"
+msgstr ""
+
+msgid "Wave Energy Converter"
+msgstr ""
+
+msgid "Osmotic Power Generator"
+msgstr ""
+
+msgid "Geothermal Power Generator"
+msgstr ""
+
+msgid "heat_pump"
+msgstr ""
+
+msgid "Wind Turbine"
+msgstr ""
+
+msgid "Power Substation"
+msgstr ""
+
+msgid "Type of substation"
+msgstr ""
+
+msgctxt "power"
+msgid "transmission"
+msgstr ""
+
+msgctxt "power"
+msgid "distribution"
+msgstr ""
+
+msgctxt "power"
+msgid "minor_distribution"
+msgstr ""
+
+msgctxt "power"
+msgid "converter"
+msgstr ""
+
+msgctxt "power"
+msgid "compensation"
+msgstr ""
+
+msgctxt "power"
+msgid "transition"
+msgstr ""
+
+msgctxt "power"
+msgid "traction"
+msgstr ""
+
+msgctxt "power"
+msgid "industrial"
+msgstr ""
+
+msgid "Power rating (kVA/MVA)"
+msgstr ""
+
+msgid "2700 kVA"
+msgstr ""
+
+msgid "12500 kVA"
+msgstr ""
+
+msgid "15 MVA"
+msgstr ""
+
+msgid "50 MVA"
+msgstr ""
+
+msgid "100 MVA"
+msgstr ""
+
+msgid "Gas insulated"
+msgstr ""
+
+msgid "Power Transformer"
+msgstr ""
+
+msgid "Type of transformer"
+msgstr ""
+
+msgctxt "power"
+msgid "generator"
+msgstr ""
+
+msgctxt "power"
+msgid "auto"
+msgstr ""
+
+msgctxt "power"
+msgid "phase_angle_regulator"
+msgstr ""
+
+msgctxt "power"
+msgid "yes"
+msgstr ""
+
+msgid "Phases"
+msgstr ""
+
+msgid "Power Switchgear"
+msgstr ""
+
+msgid ""
+"(Please only use this tag if more detailed mapping using busbars and bays is "
+"impossible!)"
+msgstr ""
+
+msgid "Power Busbar"
+msgstr ""
+
+msgid "Power Bay"
+msgstr ""
+
+msgid "Power Switch"
+msgstr ""
+
+msgid "Power Converter"
+msgstr ""
+
+msgid "Type of converter"
+msgstr ""
+
+msgctxt "power"
+msgid "lcc"
+msgstr ""
+
+msgctxt "power"
+msgid "vsc"
+msgstr ""
+
+msgctxt "power"
+msgid "back-to-back"
+msgstr ""
+
+msgid "Amount of poles"
+msgstr ""
+
+msgid "monopole"
+msgstr ""
+
+msgid "bipole"
+msgstr ""
+
+msgid "Power rating (MVA)"
+msgstr ""
+
+msgid "Power Compensator"
+msgstr ""
+
+msgid "Type of compensator"
+msgstr ""
+
+msgctxt "power"
+msgid "shunt_reactor"
+msgstr ""
+
+msgctxt "power"
+msgid "shunt_capacitor"
+msgstr ""
+
+msgctxt "power"
+msgid "static_var"
+msgstr ""
+
+msgctxt "power"
+msgid "statcom"
+msgstr ""
+
+msgctxt "power"
+msgid "synchronous_condenser"
+msgstr ""
+
+msgctxt "power"
+msgid "filter"
+msgstr ""
+
+msgctxt "power"
+msgid "series_reactor"
+msgstr ""
+
+msgctxt "power"
+msgid "series_capacitor"
+msgstr ""
+
+msgid "Power rating (kvar/Mvar)"
+msgstr ""
+
+msgid "500 kvar"
+msgstr ""
+
+msgid "1 Mvar"
+msgstr ""
+
+msgid "5 Mvar"
+msgstr ""
+
+msgid "Cable Distribution Cabinet"
+msgstr ""
+
+msgid "Power Tower"
+msgstr ""
+
+msgid "Type of construction"
+msgstr ""
+
+msgid "lattice"
+msgstr ""
+
+msgid "tubular"
+msgstr ""
+
+msgid "solid"
+msgstr ""
+
+msgid "steel"
+msgstr ""
+
+msgctxt "color"
+msgid "red/white"
+msgstr ""
+
+msgctxt "power"
+msgid "Tower type"
+msgstr ""
+
+msgctxt "power"
+msgid "suspension"
+msgstr ""
+
+msgctxt "power"
+msgid "anchor"
+msgstr ""
+
+msgctxt "power"
+msgid "termination"
+msgstr ""
+
+msgctxt "power"
+msgid "branch"
+msgstr ""
+
+msgctxt "power"
+msgid "transposing"
+msgstr ""
+
+msgctxt "power"
+msgid "crossing"
+msgstr ""
+
+msgid "Branch tower type"
+msgstr ""
+
+msgctxt "power"
+msgid "tap"
+msgstr ""
+
+msgctxt "power"
+msgid "split"
+msgstr ""
+
+msgctxt "power"
+msgid "loop"
+msgstr ""
+
+msgctxt "power"
+msgid "cross"
+msgstr ""
+
+msgid "Tower design"
+msgstr ""
+
+msgctxt "power"
+msgid "one-level"
+msgstr ""
+
+msgctxt "power"
+msgid "two-level"
+msgstr ""
+
+msgctxt "power"
+msgid "donau"
+msgstr ""
+
+msgctxt "power"
+msgid "three-level"
+msgstr ""
+
+msgctxt "power"
+msgid "barrel"
+msgstr ""
+
+msgctxt "power"
+msgid "asymmetric"
+msgstr ""
+
+msgctxt "power"
+msgid "triangle"
+msgstr ""
+
+msgctxt "power"
+msgid "flag"
+msgstr ""
+
+msgctxt "power"
+msgid "donau;one-level"
+msgstr ""
+
+msgctxt "power"
+msgid "four-level"
+msgstr ""
+
+msgctxt "power"
+msgid "six-level"
+msgstr ""
+
+msgctxt "power"
+msgid "nine-level"
+msgstr ""
+
+msgctxt "power"
+msgid "delta"
+msgstr ""
+
+msgctxt "power"
+msgid "delta_two-level"
+msgstr ""
+
+msgctxt "power"
+msgid "y-frame"
+msgstr ""
+
+msgctxt "power"
+msgid "x-frame"
+msgstr ""
+
+msgctxt "power"
+msgid "h-frame"
+msgstr ""
+
+msgctxt "power"
+msgid "guyed_h-frame"
+msgstr ""
+
+msgctxt "power"
+msgid "portal"
+msgstr ""
+
+msgctxt "power"
+msgid "portal_two-level"
+msgstr ""
+
+msgctxt "power"
+msgid "portal_three-level"
+msgstr ""
+
+msgctxt "power"
+msgid "guyed_v-frame"
+msgstr ""
+
+msgctxt "power"
+msgid "bipole"
+msgstr ""
+
+msgctxt "power"
+msgid "monopolar"
+msgstr ""
+
+msgid "Triple tower"
+msgstr ""
+
+msgid "Incomplete tower"
+msgstr ""
+
+msgid "Location transition"
+msgstr ""
+
+msgid "Pole"
+msgstr ""
+
+msgid "Pole with Transformer"
+msgstr ""
+
+msgid "Pole Attributes:"
+msgstr ""
+
+msgid "Transformer Attributes:"
+msgstr ""
+
+msgid "Power Line"
+msgstr ""
+
+msgid "Line type"
+msgstr ""
+
+msgid "line"
+msgstr ""
+
+msgid "minor_line"
+msgstr ""
+
+msgid "Number of conductors/wires per cable"
+msgstr ""
+
+msgctxt "power"
+msgid "single"
+msgstr ""
+
+msgctxt "power"
+msgid "double"
+msgstr ""
+
+msgctxt "power"
+msgid "triple"
+msgstr ""
+
+msgctxt "power"
+msgid "quad"
+msgstr ""
+
+msgctxt "power"
+msgid "fivefold"
+msgstr ""
+
+msgctxt "power"
+msgid "sixfold"
+msgstr ""
+
+msgctxt "power"
+msgid "eightfold"
+msgstr ""
+
+msgid "Used for data communications"
+msgstr ""
+
+msgid "Power Cable"
+msgstr ""
+
+msgctxt "power cable"
+msgid "underground"
+msgstr ""
+
+msgctxt "power cable"
+msgid "underwater"
+msgstr ""
+
+msgctxt "power cable"
+msgid "overground"
+msgstr ""
+
+msgid "Historic Places"
+msgstr ""
+
+msgid "Castle"
+msgstr ""
+
+msgid "Ruins"
+msgstr ""
+
+msgid "Archaeological Site"
+msgstr ""
+
+msgid "Battlefield"
+msgstr ""
+
+msgid "Palaeontological Site"
+msgstr ""
+
+msgid "Monument"
+msgstr ""
+
+msgid "Memorial"
+msgstr ""
+
+msgctxt "memorial"
+msgid "statue"
+msgstr ""
+
+msgctxt "memorial"
+msgid "bust"
+msgstr ""
+
+msgctxt "memorial"
+msgid "plaque"
+msgstr ""
+
+msgctxt "memorial"
+msgid "stele"
+msgstr ""
+
+msgctxt "memorial"
+msgid "stone"
+msgstr ""
+
+msgctxt "memorial"
+msgid "war_memorial"
+msgstr ""
+
+msgid "Inscription"
+msgstr ""
+
+msgid "Wayside Cross"
+msgstr ""
+
+msgid "Wayside Shrine"
+msgstr ""
+
+msgid "Place of worship"
+msgstr ""
+
+msgctxt "building"
+msgid "wayside_shrine"
+msgstr ""
+
+msgid "Boundary Stone"
+msgstr ""
+
+msgid "Shops"
+msgstr ""
+
+msgid "Food"
+msgstr ""
+
+msgid "Supermarket"
+msgstr ""
+
+msgid "Convenience Store"
+msgstr ""
+
+msgid "Kiosk"
+msgstr ""
+
+msgid "Bakery"
+msgstr ""
+
+msgid "Butcher"
+msgstr ""
+
+msgid "Seafood"
+msgstr ""
+
+msgid "Deli (Fine Food)"
+msgstr ""
+
+msgid "Candy Store"
+msgstr ""
+
+msgid "Tea"
+msgstr ""
+
+msgid "Coffee"
+msgstr ""
+
+msgid "Public Market"
+msgstr ""
+
+msgid "Organic"
+msgstr ""
+
+msgid "Greengrocer"
+msgstr ""
+
+msgid "Farm Stand"
+msgstr ""
+
+msgid "Organic/Bio"
+msgstr ""
+
+msgid "Fair Trade"
+msgstr ""
+
+msgid "Alcohol"
+msgstr ""
+
+msgid "Beverages"
+msgstr ""
+
+msgid "Wine"
+msgstr ""
+
+msgid "Boutique"
+msgstr ""
+
+msgid "Outdoor"
+msgstr ""
+
+msgid "Dry Cleaning"
+msgstr ""
+
+msgid "Laundry"
+msgstr ""
+
+msgid "Tailor"
+msgstr ""
+
+msgid "Fabric"
+msgstr ""
+
+msgid "Electronic"
+msgstr ""
+
+msgid "Computer"
+msgstr ""
+
+msgid "Electronics"
+msgstr ""
+
+msgid "Mobile Phone"
+msgstr ""
+
+msgid "Vacuum Cleaner"
+msgstr ""
+
+msgid "Hifi"
+msgstr ""
+
+msgid "Video"
+msgstr ""
+
+msgid "Video Games"
+msgstr ""
+
+msgid "Music"
+msgstr ""
+
+msgid "Cash"
+msgstr ""
+
+msgid "Bank"
+msgstr ""
+
+msgid "Automated Teller Machine"
+msgstr ""
+
+msgid "Money Exchange"
+msgstr ""
+
+msgid "Pawnbroker"
+msgstr ""
+
+msgid "Home decoration"
+msgstr ""
+
+msgid "Furniture"
+msgstr ""
+
+msgid "Kitchen"
+msgstr ""
+
+msgid "Curtain"
+msgstr ""
+
+msgid "Art"
+msgstr ""
+
+msgid "Frame"
+msgstr ""
+
+msgid "Bed"
+msgstr ""
+
+msgid "Interior Decoration"
+msgstr ""
+
+msgid "Antiques"
+msgstr ""
+
+msgid "Printed Material"
+msgstr ""
+
+msgid "Stationery"
+msgstr ""
+
+msgid "Copy Shop"
+msgstr ""
+
+msgid "Book Store"
+msgstr ""
+
+msgid "Newspaper Stand"
+msgstr ""
+
+msgid "Ticket"
+msgstr ""
+
+msgid "Department Store"
+msgstr ""
+
+msgid "Mall"
+msgstr ""
+
+msgid "Chemist"
+msgstr ""
+
+msgid "Hairdresser/Barber"
+msgstr ""
+
+msgid "Beauty"
+msgstr ""
+
+msgid "Tattoo"
+msgstr ""
+
+msgid "Optician"
+msgstr ""
+
+msgid "Hearing Aids"
+msgstr ""
+
+msgid "Medical Supply"
+msgstr ""
+
+msgid "Jewellery"
+msgstr ""
+
+msgid "Gift/Souvenir"
+msgstr ""
+
+msgid "Erotic"
+msgstr ""
+
+msgid "Florist"
+msgstr ""
+
+msgid "Garden Centre"
+msgstr ""
+
+msgid "Do-It-Yourself Store"
+msgstr ""
+
+msgid "Hardware"
+msgstr ""
+
+msgid "Paint"
+msgstr ""
+
+msgid "Travel Agency"
+msgstr ""
+
+msgid "Musical Instrument"
+msgstr ""
+
+msgid "Toys"
+msgstr ""
+
+msgid "Variety Store"
+msgstr ""
+
+msgid "Bookmaker"
+msgstr ""
+
+msgid "Lottery"
+msgstr ""
+
+msgid "Bag"
+msgstr ""
+
+msgid "Pet"
+msgstr ""
+
+msgid "Funeral Directors"
+msgstr ""
+
+msgid "Vending Machine"
+msgstr ""
+
+msgid "Vending products"
+msgstr ""
+
+msgid "animal_food"
+msgstr ""
+
+msgid "bicycle_tube"
+msgstr ""
+
+msgid "cigarettes"
+msgstr ""
+
+msgid "condoms"
+msgstr ""
+
+msgid "drinks"
+msgstr ""
+
+msgid "excrement_bags"
+msgstr ""
+
+msgid "food"
+msgstr ""
+
+msgid "news_papers"
+msgstr ""
+
+msgid "parking_tickets"
+msgstr ""
+
+msgid "photos"
+msgstr ""
+
+msgid "public_transport_plans"
+msgstr ""
+
+msgid "public_transport_tickets"
+msgstr ""
+
+msgid "SIM-cards"
+msgstr ""
+
+msgid "stamps"
+msgstr ""
+
+msgid "sweets"
+msgstr ""
+
+msgid "tampons"
+msgstr ""
+
+msgid "telephone_vouchers"
+msgstr ""
+
+msgid "toys"
+msgstr ""
+
+msgid "vouchers"
+msgstr ""
+
+msgid "Payment Methods"
+msgstr ""
+
+msgid "Debit cards"
+msgstr ""
+
+msgid "BankAxess"
+msgstr ""
+
+msgid "Bancomat"
+msgstr ""
+
+msgid "Girocard"
+msgstr ""
+
+msgid "Laser"
+msgstr ""
+
+msgid "Maestro"
+msgstr ""
+
+msgid "Visa Debit"
+msgstr ""
+
+msgid "Visa Electron"
+msgstr ""
+
+msgid "Credit cards"
+msgstr ""
+
+msgid "American Express"
+msgstr ""
+
+msgid "Diners Club"
+msgstr ""
+
+msgid "Discover Card"
+msgstr ""
+
+msgid "JCB"
+msgstr ""
+
+msgid "Mastercard"
+msgstr ""
+
+msgid "Visa"
+msgstr ""
+
+msgid "Electronic purses and Charge cards"
+msgstr ""
+
+msgid "Avant (fi)"
+msgstr ""
+
+msgid "Cash (ch)"
+msgstr ""
+
+msgid "Chipknip (nl)"
+msgstr ""
+
+msgid "Geldkarte (de)"
+msgstr ""
+
+msgid "Mep (pt)"
+msgstr ""
+
+msgid "Minicash (lu)"
+msgstr ""
+
+msgid "Minipay (it)"
+msgstr ""
+
+msgid "Mondero (ar)"
+msgstr ""
+
+msgid "Mondero 4b (es)"
+msgstr ""
+
+msgid "Moneo (fr)"
+msgstr ""
+
+msgid "Proton (be)"
+msgstr ""
+
+msgid "Quick (au)"
+msgstr ""
+
+msgid "Cryptocurrencies"
+msgstr ""
+
+msgid "Bitcoin"
+msgstr ""
+
+msgid "Dogecoin"
+msgstr ""
+
+msgid "Litecoin"
+msgstr ""
+
+msgid "Geography"
+msgstr ""
+
+msgid "Boundaries"
+msgstr ""
+
+msgid "Administrative"
+msgstr ""
+
+msgid "Administrative level"
+msgstr ""
+
+msgid "Maritime"
+msgstr ""
+
+msgid "Political"
+msgstr ""
+
+msgid "Division"
+msgstr ""
+
+msgid "canton"
+msgstr ""
+
+msgid "linguistic_community"
+msgstr ""
+
+msgid "ward"
+msgstr ""
+
+msgid "Postal Code"
+msgstr ""
+
+msgid "National Park"
+msgstr ""
+
+msgid "Protected Area"
+msgstr ""
+
+msgid "Protect Class"
+msgstr ""
+
+msgid "Title or type of protection"
+msgstr ""
+
+msgid "Border type"
+msgstr ""
+
+msgid "baseline"
+msgstr ""
+
+msgid "territorial"
+msgstr ""
+
+msgid "contiguous"
+msgstr ""
+
+msgid "eez"
+msgstr ""
+
+msgid "Places"
+msgstr ""
+
+msgid "Continent"
+msgstr ""
+
+msgid "Country"
+msgstr ""
+
+msgctxt "place"
+msgid "State"
+msgstr ""
+
+msgid "Region"
+msgstr ""
+
+msgid "County"
+msgstr ""
+
+msgid "City"
+msgstr ""
+
+msgid "Town"
+msgstr ""
+
+msgid "Village"
+msgstr ""
+
+msgid "Hamlet"
+msgstr ""
+
+msgid "Isolated Dwelling"
+msgstr ""
+
+msgid "Suburb"
+msgstr ""
+
+msgid "Neighbourhood"
+msgstr ""
+
+msgid "Farm"
+msgstr ""
+
+msgid "A farm within a bigger settlement"
+msgstr ""
+
+msgid "(please use isolated_dwelling for an isolated farm)"
+msgstr ""
+
+msgid "Locality"
+msgstr ""
+
+msgid "Peak"
+msgstr ""
+
+msgid "The top (summit) of a mountain or hill."
+msgstr ""
+
+msgid "Saddle"
+msgstr ""
+
+msgid "A saddle point between mountains or hills."
+msgstr ""
+
+msgid "Glacier"
+msgstr ""
+
+msgid ""
+"A persistent body of dense ice that is constantly moving under its own "
+"weight."
+msgstr ""
+
+msgid "Volcano"
+msgstr ""
+
+msgid "A volcano, either dormant, extinct or active."
+msgstr ""
+
+msgid "Current Status"
+msgstr ""
+
+msgid "dormant"
+msgstr ""
+
+msgid "extinct"
+msgstr ""
+
+msgid "stratovolcano"
+msgstr ""
+
+msgid "shield"
+msgstr ""
+
+msgid "scoria"
+msgstr ""
+
+msgid "Ridge"
+msgstr ""
+
+msgid "A mountain or hill ridge."
+msgstr ""
+
+msgid "Valley"
+msgstr ""
+
+msgid "A low area between hills."
+msgstr ""
+
+msgid "Cave Entrance"
+msgstr ""
+
+msgid "The entrance to a cave."
+msgstr ""
+
+msgid "Island"
+msgstr ""
+
+msgid "Islet"
+msgstr ""
+
+msgid "Nature"
+msgstr ""
+
+msgid "Tree"
+msgstr ""
+
+msgid "A single tree."
+msgstr ""
+
+msgid "Botanical Name"
+msgstr ""
+
+msgid "Tree Row"
+msgstr ""
+
+msgid "A line of trees."
+msgstr ""
+
+msgid "Wood"
+msgstr ""
+
+msgid "Woodland where timber production does not dominate use."
+msgstr ""
+
+msgid "Forest"
+msgstr ""
+
+msgid "Cutline"
+msgstr ""
+
+msgctxt "cutline"
+msgid "border"
+msgstr ""
+
+msgctxt "cutline"
+msgid "firebreak"
+msgstr ""
+
+msgctxt "cutline"
+msgid "hunting"
+msgstr ""
+
+msgctxt "cutline"
+msgid "loggingmachine"
+msgstr ""
+
+msgctxt "cutline"
+msgid "pipeline"
+msgstr ""
+
+msgctxt "cutline"
+msgid "piste"
+msgstr ""
+
+msgctxt "cutline"
+msgid "section"
+msgstr ""
+
+msgid "Grassland"
+msgstr ""
+
+msgid ""
+"Where vegetation is dominated by grasses (Poaceae) and other herbaceous (non-"
+"woody) plants. Excludes cultivated areas and wetlands."
+msgstr ""
+
+msgid "pampas"
+msgstr ""
+
+msgid "prairie"
+msgstr ""
+
+msgid "puszta"
+msgstr ""
+
+msgid "savanna"
+msgstr ""
+
+msgid "steppe"
+msgstr ""
+
+msgid "veld"
+msgstr ""
+
+msgid "Nature Reserve"
+msgstr ""
+
+msgid "Scree"
+msgstr ""
+
+msgid "An accumulation of loose rocks."
+msgstr ""
+
+msgid "Fell"
+msgstr ""
+
+msgid ""
+"Bare upper lying uncultivated land principally covered with grass and often "
+"grazed."
+msgstr ""
+
+msgid "Scrub"
+msgstr ""
+
+msgid ""
+"Bare lower lying uncultivated land with bushes but little or no tree cover."
+msgstr ""
+
+msgid "Heath"
+msgstr ""
+
+msgid ""
+"Bare lower lying uncultivated land with a shrubland habitat found mainly on "
+"free-draining infertile, acidic soils, and is characterised by open, low-"
+"growing woody vegetation."
+msgstr ""
+
+msgid "Sand"
+msgstr ""
+
+msgid "Large area covered with sand."
+msgstr ""
+
+msgid "Bare Rock"
+msgstr ""
+
+msgid ""
+"For areas of solid visible rock that is sparsely vegetated or not vegetated "
+"at all."
+msgstr ""
+
+msgid "Rock"
+msgstr ""
+
+msgid ""
+"A notable rock or group of rocks, with at least one of them firmly attached "
+"to the underlying bedrock."
+msgstr ""
+
+msgid "Tourism attraction"
+msgstr ""
+
+msgid "Stone"
+msgstr ""
+
+msgid ""
+"A single notable free-standing rock, which may differ from the composition "
+"of the terrain it lies in."
+msgstr ""
+
+msgid "Land use"
+msgstr ""
+
+msgid "Farmyard"
+msgstr ""
+
+msgid "Farmland"
+msgstr ""
+
+msgid "Meadow"
+msgstr ""
+
+msgid "Orchard"
+msgstr ""
+
+msgid "Vineyard"
+msgstr ""
+
+msgid "Greenhouse Horticulture"
+msgstr ""
+
+msgid "Plant Nursery"
+msgstr ""
+
+msgid "Allotments"
+msgstr ""
+
+msgid "Garden"
+msgstr ""
+
+msgid "Grass"
+msgstr ""
+
+msgid "Village Green"
+msgstr ""
+
+msgid "Common"
+msgstr ""
+
+msgid "Park"
+msgstr ""
+
+msgid "Recreation Ground"
+msgstr ""
+
+msgid "Residential Area"
+msgstr ""
+
+msgid "Graveyard"
+msgstr ""
+
+msgid "Cemetery"
+msgstr ""
+
+msgid "Religious"
+msgstr ""
+
+msgid "Retail"
+msgstr ""
+
+msgid "Commercial"
+msgstr ""
+
+msgid "Industrial"
+msgstr ""
+
+msgid "Garages"
+msgstr ""
+
+msgid "Railway Land"
+msgstr ""
+
+msgid "Military"
+msgstr ""
+
+msgid "Construction Area"
+msgstr ""
+
+msgid "Brownfield"
+msgstr ""
+
+msgid "Greenfield"
+msgstr ""
+
+msgid "Landfill"
+msgstr ""
+
+msgid "Quarry"
+msgstr ""
+
+msgid "Annotation"
+msgstr ""
+
+msgid "Alternative name"
+msgstr ""
+
+msgid "Historical name"
+msgstr ""
+
+msgid "Local name"
+msgstr ""
+
+msgid "Regional name"
+msgstr ""
+
+msgid "National name"
+msgstr ""
+
+msgid "International name"
+msgstr ""
+
+msgid "Official name"
+msgstr ""
+
+msgid "Common name abbreviation"
+msgstr ""
+
+msgid "House number"
+msgstr ""
+
+msgid "Street name"
+msgstr ""
+
+msgid "Place name"
+msgstr ""
+
+msgid "City name"
+msgstr ""
+
+msgid "Country code"
+msgstr ""
+
+msgid "House name"
+msgstr ""
+
+msgid "Subdistrict"
+msgstr ""
+
+msgid "District"
+msgstr ""
+
+msgid "Province"
+msgstr ""
+
+msgctxt "addr:"
+msgid "State"
+msgstr ""
+
+msgid "AL"
+msgstr ""
+
+msgid "AK"
+msgstr ""
+
+msgid "AZ"
+msgstr ""
+
+msgid "AR"
+msgstr ""
+
+msgid "CA"
+msgstr ""
+
+msgid "CO"
+msgstr ""
+
+msgid "CT"
+msgstr ""
+
+msgid "DE"
+msgstr ""
+
+msgid "FL"
+msgstr ""
+
+msgid "GA"
+msgstr ""
+
+msgid "HI"
+msgstr ""
+
+msgid "IL"
+msgstr ""
+
+msgid "IN"
+msgstr ""
+
+msgid "IA"
+msgstr ""
+
+msgid "KS"
+msgstr ""
+
+msgid "KY"
+msgstr ""
+
+msgid "LA"
+msgstr ""
+
+msgid "ME"
+msgstr ""
+
+msgid "MD"
+msgstr ""
+
+msgid "MA"
+msgstr ""
+
+msgid "MI"
+msgstr ""
+
+msgid "MN"
+msgstr ""
+
+msgid "MS"
+msgstr ""
+
+msgid "MO"
+msgstr ""
+
+msgid "MT"
+msgstr ""
+
+msgid "NE"
+msgstr ""
+
+msgid "NV"
+msgstr ""
+
+msgid "NH"
+msgstr ""
+
+msgid "NJ"
+msgstr ""
+
+msgid "NM"
+msgstr ""
+
+msgid "NY"
+msgstr ""
+
+msgid "NC"
+msgstr ""
+
+msgid "ND"
+msgstr ""
+
+msgid "OH"
+msgstr ""
+
+msgid "OR"
+msgstr ""
+
+msgid "PA"
+msgstr ""
+
+msgid "RI"
+msgstr ""
+
+msgid "SC"
+msgstr ""
+
+msgid "SD"
+msgstr ""
+
+msgid "TN"
+msgstr ""
+
+msgid "TX"
+msgstr ""
+
+msgid "UT"
+msgstr ""
+
+msgid "VT"
+msgstr ""
+
+msgid "VA"
+msgstr ""
+
+msgid "WA"
+msgstr ""
+
+msgid "WV"
+msgstr ""
+
+msgid "WI"
+msgstr ""
+
+msgid "DC"
+msgstr ""
+
+msgid "AS"
+msgstr ""
+
+msgid "GU"
+msgstr ""
+
+msgid "MP"
+msgstr ""
+
+msgid "PR"
+msgstr ""
+
+msgid "UM"
+msgstr ""
+
+msgid "VI"
+msgstr ""
+
+msgid "Address Interpolation"
+msgstr ""
+
+msgid "Numbering scheme"
+msgstr ""
+
+msgid "odd"
+msgstr ""
+
+msgid "even"
+msgstr ""
+
+msgid "alphabetic"
+msgstr ""
+
+msgid "Accuracy"
+msgstr ""
+
+msgid "actual"
+msgstr ""
+
+msgid "estimate"
+msgstr ""
+
+msgid "potential"
+msgstr ""
+
+msgid "Contact (Common Schema)"
+msgstr ""
+
+msgid "Email Address"
+msgstr ""
+
+msgid "Fax Number"
+msgstr ""
+
+msgid "Image"
+msgstr ""
+
+msgid "Contact (Schema with ''contact:*'' Prefix)"
+msgstr ""
+
+msgctxt "description=*"
+msgid "A short text with additional information."
+msgstr ""
+
+msgctxt "description=*"
+msgid ""
+"It might be viewable to the end user (perhaps using a search system or a map "
+"with pop-ups)."
+msgstr ""
+
+msgctxt "note=*, fixme=*, description=*"
+msgid "Similar but different tags:"
+msgstr ""
+
+msgctxt "the tag note=*"
+msgid "Note"
+msgstr ""
+
+msgctxt "note=*"
+msgid "An important hint for other mappers (not for the end user)."
+msgstr ""
+
+msgid "Fixme"
+msgstr ""
+
+msgctxt "fixme=*"
+msgid ""
+"A hint for other mappers (not for the end user), that an object needs an "
+"improvement."
+msgstr ""
+
+msgid "outer segment"
+msgstr ""
+
+msgid "inner segment"
+msgstr ""
+
+msgid "Boundary"
+msgstr ""
+
+msgid "Boundary type"
+msgstr ""
+
+msgid "administrative"
+msgstr ""
+
+msgid "maritime"
+msgstr ""
+
+msgid "national_park"
+msgstr ""
+
+msgid "political"
+msgstr ""
+
+msgid "postal_code"
+msgstr ""
+
+msgid "protected_area"
+msgstr ""
+
+msgid "Sub area"
+msgstr ""
+
+msgid "Administration centre"
+msgstr ""
+
+msgid "Label point"
+msgstr ""
+
+msgid "Site"
+msgstr ""
+
+msgid "Site name"
+msgstr ""
+
+msgid "where to place the label"
+msgstr ""
+
+msgid "perimeter of the site"
+msgstr ""
+
+msgid "entrances to the site, on the perimeter"
+msgstr ""
+
+msgid "members of site"
+msgstr ""
+
+msgid "Turn Restriction"
+msgstr ""
+
+msgid "Restriction"
+msgstr ""
+
+msgid "no_left_turn"
+msgstr ""
+
+msgid "no_right_turn"
+msgstr ""
+
+msgid "no_straight_on"
+msgstr ""
+
+msgid "no_u_turn"
+msgstr ""
+
+msgid "only_right_turn"
+msgstr ""
+
+msgid "only_left_turn"
+msgstr ""
+
+msgid "only_straight_on"
+msgstr ""
+
+msgid "from way"
+msgstr ""
+
+msgid "via node or ways"
+msgstr ""
+
+msgid "to way"
+msgstr ""
+
+msgid "Enforcement"
+msgstr ""
+
+msgid "Type of enforcement"
+msgstr ""
+
+msgid "maxheight"
+msgstr ""
+
+msgid "maxweight"
+msgstr ""
+
+msgid "maxspeed"
+msgstr ""
+
+msgid "mindistance"
+msgstr ""
+
+msgid "check"
+msgstr ""
+
+msgid "Max. height (meters, only if enforcement=maxheight)"
+msgstr ""
+
+msgid "Max. weight (tonnes, only if enforcement=maxweight)"
+msgstr ""
+
+msgid "Max. speed (km/h, only if enforcement=maxspeed)"
+msgstr ""
+
+msgid "location of enforcement device"
+msgstr ""
+
+msgid "node on way where enforcement starts"
+msgstr ""
+
+msgid "where enforcement ends"
+msgstr ""
+
+msgid "traffic light or barrier that stops you"
+msgstr ""
+
+msgid "Routes"
+msgstr ""
+
+msgid "Bicycle Route"
+msgstr ""
+
+msgid "icn"
+msgstr ""
+
+msgid "ncn"
+msgstr ""
+
+msgid "rcn"
+msgstr ""
+
+msgid "lcn"
+msgstr ""
+
+msgid "Mountain Biking Route"
+msgstr ""
+
+msgid "Hiking Route"
+msgstr ""
+
+msgid "iwn"
+msgstr ""
+
+msgid "nwn"
+msgstr ""
+
+msgid "rwn"
+msgstr ""
+
+msgid "lwn"
+msgstr ""
+
+msgid "infrastructure"
+msgstr ""
+
+msgid "natural"
+msgstr ""
+
+msgid "Piste Route"
+msgstr ""
+
+msgid "link segment"
+msgstr ""
+
+msgid "shortcut segment"
+msgstr ""
+
+msgid "variant segment"
+msgstr ""
+
+msgid "entry points"
+msgstr ""
+
+msgid "Ski Route"
+msgstr ""
+
+msgid "alpine"
+msgstr ""
+
+msgid "Detour Route"
+msgstr ""
+
+msgid "Destination"
+msgstr ""
+
+msgid "Ref of the way this is a detour to"
+msgstr ""
+
+msgid "fork node for alternative routes"
+msgstr ""
+
+msgid "Power Route"
+msgstr ""
+
+msgid "Railway Route"
+msgstr ""
+
+msgid "Road Route"
+msgstr ""
+
+msgid "Route Network"
+msgstr ""
+
+msgid "member"
+msgstr ""
+
+msgid "Associated Street"
+msgstr ""
+
+msgid "house"
+msgstr ""
+
+msgid "Street"
+msgstr ""
+
+msgid "ways being part of street"
+msgstr ""
+
+msgid "addresses belonging to the street"
+msgstr ""
+
+msgid "houses belonging to the street"
+msgstr ""
+
+msgid "anything related to the street"
+msgstr ""
+
+msgid "Destination Sign"
+msgstr ""
+
+msgid "Destination written on sign (w/o distance)"
+msgstr ""
+
+msgid "Time (hh:mm, for trekking)"
+msgstr ""
+
+msgid "Colour of background"
+msgstr ""
+
+msgid "Colour of text"
+msgstr ""
+
+msgid "Colour of border/arrow"
+msgstr ""
+
+msgid "last way before junction"
+msgstr ""
+
+msgid "node of the intersection"
+msgstr ""
+
+msgid "first way after junction"
+msgstr ""
+
+msgid "position of sign"
+msgstr ""
+
+msgid "Waterway"
+msgstr ""
+
+msgid "Subtype of waterway (largest one of members)"
+msgstr ""
+
+msgid "stream"
+msgstr ""
+
+msgid "drain"
+msgstr ""
+
+msgid "ditch"
+msgstr ""
+
+msgid "Name of river/lake/sea/ocean it runs into"
+msgstr ""
+
+msgid "Reference Sandre (FR)"
+msgstr ""
+
+msgid "Reference FGKZ (DE)"
+msgstr ""
+
+msgid "Reference REGINE (NO)"
+msgstr ""
+
+msgid "Reference GNIS (USA)"
+msgstr ""
+
+msgid "Reference GNBC (CA)"
+msgstr ""
+
+msgid "waterways (no riverbank)"
+msgstr ""
+
+msgid "branch waterways (no riverbank)"
+msgstr ""
+
+msgid "spring of waterway"
+msgstr ""
+
+msgid "Length (meters)"
+msgstr ""
+
+msgid "ways supported by (on top of) the bridge"
+msgstr ""
+
+msgid "ways passing under the bridge"
+msgstr ""
+
+msgid "way forming the outline footprint"
+msgstr ""
+
+msgid "edge ways parallel to ''across''"
+msgstr ""
+
+msgid "ways passing through the tunnel"
+msgstr ""
+
+msgid "edge ways parallel to ''through''"
+msgstr ""
+
+msgid "Tunnel Start"
+msgstr ""
+
+msgid "Village/City"
+msgstr ""
+
+msgid "One Way"
+msgstr ""
+
+msgid "Fuel Station"
+msgstr ""
+
+msgid "Shopping"
+msgstr ""
+
+msgid "WC"
+msgstr ""
+
+msgid "Camping"
+msgstr ""
+
+msgid "Test"
+msgstr ""
+
+msgid "Decreasing house numbers in addresses interpolation"
+msgstr ""
+
+msgid "{0} without {1}"
+msgstr ""
+
+msgid "{0} without {1} or {2}"
+msgstr ""
+
+msgid "{0} without {1}, {2} or {3}"
+msgstr ""
+
+msgid "{0} together with {1}"
+msgstr ""
+
+msgid "incomplete object: only {0}"
+msgstr ""
+
+msgid "incomplete object: only {0} and {1}"
+msgstr ""
+
+msgid "{0} together with addr:*"
+msgstr ""
+
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
+msgid "{0} on suspicious object"
+msgstr ""
+
+msgid "restaurant without name"
+msgstr ""
+
+msgid "{0} used with {1}"
+msgstr ""
+
+msgid "natural water used for swimming pool"
+msgstr ""
+
+msgid "sport without physical feature"
+msgstr ""
+
+msgid "{0} should be on the node where {1} and {2} intersect"
+msgstr ""
+
+msgid "alternative name without {0}"
+msgstr ""
+
+msgid "incomplete usage of {0} on a way without {1}"
+msgstr ""
+
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
+msgid "{0}={1} is deprecated"
+msgstr ""
+
+msgid "{0} is deprecated"
+msgstr ""
+
+msgid "''{0}'' is meaningless, use more specific tags, e.g. ''{1}''"
+msgstr ""
+
+msgid ""
+"''{0}'' does not specify the official mode of transportation, use ''{1}'' "
+"for example"
+msgstr ""
+
+msgid ""
+"{0}={1} is unspecific. Instead of ''{1}'' please give more information about "
+"what exactly should be fixed."
+msgstr ""
+
+msgid "{0}={1} is deprecated. Please use instead a multipolygon."
+msgstr ""
+
+msgid ""
+"{0} is deprecated. Please specify interval by using opening_hours syntax"
+msgstr ""
+
+msgid ""
+"{0} is deprecated. Please delete this object and use a private layer instead"
+msgstr ""
+
+msgid "{0}={1} is unspecific. Please replace ''{1}'' by a specific value."
+msgstr ""
+
+msgid "{0} should be replaced with {1}"
+msgstr ""
+
+msgid "{0} = {1}; remove {0}"
+msgstr ""
+
+msgid ""
+"{0}={1} is unspecific. Please replace ''{1}'' by ''left'', ''right'' or "
+"''both''."
+msgstr ""
+
+msgid "Unspecific tag {0}"
+msgstr ""
+
+msgid "Definition of {0} is unclear"
+msgstr ""
+
+msgid ""
+"{0} is not recommended. Use the Reverse Ways function from the Tools menu."
+msgstr ""
+
+msgid "key with uncommon character"
+msgstr ""
+
+msgid "uncommon short key"
+msgstr ""
+
+msgid "{0} is inaccurate"
+msgstr ""
+
+msgid "{0} on a node. Should be used on a way."
+msgstr ""
+
+msgid "{0} on a node. Should be drawn as an area."
+msgstr ""
+
+msgid "{0}=* on a node. Should be used in a relation"
+msgstr ""
+
+msgid "{0} on a way. Should be used on a node."
+msgstr ""
+
+msgid "{0} on a way. Should be used in a relation"
+msgstr ""
+
+msgid "{0} on a node"
+msgstr ""
+
+msgid "Building inside building"
+msgstr ""
+
+msgid "Overlapping Water Areas"
+msgstr ""
+
+msgid "Overlapping Areas"
+msgstr ""
+
+msgid "{0} inside {1}"
+msgstr ""
+
+msgid "Overlapping Identical Natural Areas"
+msgstr ""
+
+msgid "Overlapping Identical Landuses"
+msgstr ""
+
+msgid "{0} must be connected to a way"
+msgstr ""
+
+msgid "node connects waterway and bridge"
+msgstr ""
+
+msgid "abbreviated street name"
+msgstr ""
+
+msgid "wrong highway tag on a node"
+msgstr ""
+
+msgid "wrong crossing tag on a way"
+msgstr ""
+
+msgid "Unnamed unclassified highway"
+msgstr ""
+
+msgid "highway without a reference"
+msgstr ""
+
+msgid "temporary highway type"
+msgstr ""
+
+msgid "street name contains ss"
+msgstr ""
+
+msgid ""
+"Value of ''{0}'' should either be ''{1}'' or ''{2}''. For sidewalks use "
+"''{3}'' instead."
+msgstr ""
+
+msgid "{0} with multiple values"
+msgstr ""
+
+msgid "empty value in semicolon-separated ''{0}''"
+msgstr ""
+
+msgid "numerical key"
+msgstr ""
+
+msgid "layer tag with + sign"
+msgstr ""
+
+msgid "layer should be between -5 and 5"
+msgstr ""
+
+msgid "level should be numbers with optional .5 increments"
+msgstr ""
+
+msgid ""
+"{0}: meters is default; period is separator; if units, put space then unit"
+msgstr ""
+
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
+msgid "unusual {0} format"
+msgstr ""
+
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
+msgid "voltage should be in volts with no units/delimiter/spaces"
+msgstr ""
+
+msgid "unusual {0} specification"
+msgstr ""
+
+msgid "unusual train track gauge; use mm with no separator"
+msgstr ""
+
+msgid "unusual incline; use percentages/degrees or up/down"
+msgstr ""
+
+msgid "{0} must be a numeric value"
+msgstr ""
+
+msgid "{0} must be a positive integer number"
+msgstr ""
+
+msgid "relation without type"
+msgstr ""
+
+msgid "{0} relation without {0} tag"
+msgstr ""
+
+msgid "religion without denomination"
+msgstr ""
+
+msgid "unknown christian denomination"
+msgstr ""
+
+msgid "unknown muslim denomination"
+msgstr ""
+
+msgid "unknown jewish denomination"
+msgstr ""
+
+msgid "{0} is unnecessary"
+msgstr ""
+
+msgid "{0} is unnecessary for {1}"
+msgstr ""
+
+msgid "{0}={1} makes no sense"
+msgstr ""
+
+msgid "Nodes duplicating parent way tags"
+msgstr ""
+
+msgid ""
+"no wikipedia-language given, use ''wikipedia''=''language:page title''"
+msgstr ""
+
+msgid "unknown language prefix in wikipedia tag"
+msgstr ""
+
+msgid "deprecated format for wikipedia tag"
+msgstr ""
+
+msgid "''wikipedia''=''language:page title''"
+msgstr ""
+
+msgid "Hide icons at low zoom"
+msgstr ""
+
+msgid "Less obtrusive node symbols at low zoom"
+msgstr ""
+
+msgid "Display street labels (at high zoom)"
+msgstr ""
+
+msgid "Use alternative turn restriction icon set"
+msgstr ""
+
+msgid "Columbus V-900 CSV Files"
+msgstr ""
+
+msgid "Importing CSV file ''%s''..."
+msgstr ""
+
+msgid "Markers of "
+msgstr ""
+
+msgid "Show summary after import"
+msgstr ""
+
+msgid "Do not zoom after import"
+msgstr ""
+
+msgid "Ignore hdop/vdop/pdop entries"
+msgstr ""
+
+msgid "Warn on missing audio files"
+msgstr ""
+
+msgid "Warn on conversion errors"
+msgstr ""
+
+msgid "Error in line "
+msgstr ""
+
+msgid "Missing audio file"
+msgstr ""
+
+msgid "Commands"
+msgstr ""
+
+msgid ""
+"No command has been found. Would you like to download and install default "
+"commands now?"
+msgstr ""
+
+msgid "No command found"
+msgstr ""
+
+msgid "Default commands have been successfully installed"
+msgstr ""
+
+msgid ""
+"Failed to download and install default commands.\n"
+"\n"
+"Error: {0}"
+msgstr ""
+
+msgid "Processing..."
+msgstr ""
+
+msgid "Aborted"
+msgstr ""
+
+msgid "Error executing the script: "
+msgstr ""
+
+msgid "Command line"
+msgstr ""
+
+msgid "Set input focus to the command line."
+msgstr ""
+
+msgid "Point on the start"
+msgstr ""
+
+msgid "Point on the end"
+msgstr ""
+
+msgid "Missing definition of new object with id {0}."
+msgstr ""
+
+msgid "Missing mandatory attribute ''{0}'' on <member> of relation {1}."
+msgstr ""
+
+msgid "Illegal value for attribute ''uid''. Got ''{0}''."
+msgstr ""
+
+msgid "nodes"
+msgstr ""
+
+msgid "ways"
+msgstr ""
+
+msgid "relations"
+msgstr ""
+
+msgid "OSM objects"
+msgstr ""
+
+msgid "Can not draw outside of the world."
+msgstr ""
+
+msgid "Create grid of ways"
+msgstr ""
+
+msgid ""
+"Forms a grid of ways in base to two existing that have various nodes and one "
+"in common"
+msgstr ""
+
+msgid "Select two ways with a node in common"
+msgstr ""
+
+msgid "Select two ways with alone a node in common"
+msgstr ""
+
+msgid "Create a grid of ways"
+msgstr ""
+
+msgid "Download Track ..."
+msgstr ""
+
+msgid "Download GPX track from openstreetmap.org"
+msgstr ""
+
+msgid ""
+"Error occurred while parsing gpx file {0}. Only a part of the file will be "
+"available."
+msgstr ""
+
+msgid "Invalid URL {0}"
+msgstr ""
+
+msgid "Error fetching URL {0}"
+msgstr ""
+
+msgid "Error parsing data from URL {0}"
+msgstr ""
+
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
+msgid "Private (only shared as anonymous, unordered points)"
+msgstr ""
+
+msgid "Public (shown in trace list and as anonymous, unordered points)"
+msgstr ""
+
+msgid "Trackable (only shared as anonymous, ordered points with timestamps)"
+msgstr ""
+
+msgid ""
+"Identifiable (shown in trace list and as identifiable, ordered points with "
+"timestamps)"
+msgstr ""
+
+msgid "Upload Trace"
+msgstr ""
+
+msgid "Upload Traces"
+msgstr ""
+
+msgid "Defines the visibility of your trace for other OSM users."
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Visibility_of_GPS_traces"
+msgstr ""
+
+msgid "(What does that mean?)"
+msgstr ""
+
+msgid "Please enter Description about your trace."
+msgstr ""
+
+msgid "Tags (comma delimited)"
+msgstr ""
+
+msgid "Please enter tags about your trace."
+msgstr ""
+
+msgid "Selected track: {0}"
+msgstr ""
+
+msgid "No GPX layer selected. Cannot upload a trace."
+msgstr ""
+
+msgid "Uploading trace ..."
+msgstr ""
+
+msgid "Connecting..."
+msgstr ""
+
+msgid "Upload canceled"
+msgstr ""
+
+msgid "Error while uploading"
+msgstr ""
+
+msgid "GPX upload was successful"
+msgstr ""
+
+msgid "Upload failed. Server returned the following message: "
+msgstr ""
+
+msgid "Uploading GPX track: {0}% ({1} of {2})"
+msgstr ""
+
+msgid "No description provided. Please provide some description."
+msgstr ""
+
+msgid "Uploading GPX Track"
+msgstr ""
+
+msgid "Uploads traces to openstreetmap.org"
+msgstr ""
+
+msgid "Shows elevation profile"
+msgstr ""
+
+msgid "Elevation Profile"
+msgstr ""
+
+msgid "Elevation Grid Layer (experimental!)"
+msgstr ""
+
+msgid "Shows elevation grid layer"
+msgstr ""
+
+msgid "Elevation Grid"
+msgstr ""
+
+msgid "No SRTM data"
+msgstr ""
+
+msgid "Open the elevation profile window."
+msgstr ""
+
+msgid "Min"
+msgstr ""
+
+msgid "Avrg"
+msgstr ""
+
+msgid "Max"
+msgstr ""
+
+msgid "Dist"
+msgstr ""
+
+msgid "Gain"
+msgstr ""
+
+msgid "Tracks"
+msgstr ""
+
+msgid "Elevation profile for track ''{0}''."
+msgstr ""
+
+msgid "Elevation profile"
+msgstr ""
+
+msgid "(No elevation data)"
+msgstr ""
+
+msgid "Can not save preferences"
+msgstr ""
+
+msgid "Epsilon multiplier"
+msgstr ""
+
+msgid "Starting Epsilon"
+msgstr ""
+
+msgid "Max points count per 1 km"
+msgstr ""
+
+msgid "Enter key mode"
+msgstr ""
+
+msgid "Auto add tags"
+msgstr ""
+
+msgid "Autosimplify"
+msgstr ""
+
+msgid "Simplify with initial epsilon"
+msgstr ""
+
+msgid "Save as is"
+msgstr ""
+
+msgid "Snap to nodes"
+msgstr ""
+
+msgid "Add fixed points on click"
+msgstr ""
+
+msgid "Add fixed points on spacebar"
+msgstr ""
+
+msgid "Allow edit existing ways"
+msgstr ""
+
+msgid "Draw closed polygons only"
+msgstr ""
+
+msgid "FastDraw configuration"
+msgstr ""
+
+msgid "Try copying tags from properties table"
+msgstr ""
+
+msgid "Save settings"
+msgstr ""
+
+msgid "Can not read settings"
+msgstr ""
+
+msgid "Q=Options, Enter=save, Ctrl-Enter=save with tags, Up/Down=tune"
+msgstr ""
+
+msgid ""
+"Click or Click&drag to continue, Ctrl-Click to add fixed node, Shift-Click "
+"to delete, Enter to simplify or save, Ctrl-Shift-Click to start new line"
+msgstr ""
+
+msgid "FastDrawing"
+msgstr ""
+
+msgid "Fast drawing mode"
+msgstr ""
+
+msgid "Please move the mouse to draw new way"
+msgstr ""
+
+msgid "Are you sure you do not want to save the line containing {0} points?"
+msgstr ""
+
+msgid ""
+"{0} m - length of the line\n"
+"{1} nodes\n"
+"{2} points per km (maximum)\n"
+"{3} points per km (average)"
+msgstr ""
+
+msgid "Line information"
+msgstr ""
+
+msgid "Cannot place node outside of the world."
+msgstr ""
+
+msgid "Draw the way by mouse"
+msgstr ""
+
+msgid "min distance={0} px ({1} m)"
+msgstr ""
+
+msgid "Eps={0}, {1} points, {2} p/km"
+msgstr ""
+
+msgid "Fix addresses"
+msgstr ""
+
+msgid "Show dialog with incomplete addresses"
+msgstr ""
+
+msgid "Include objects used for guesses"
+msgstr ""
+
+msgid "Fix street addresses"
+msgstr ""
+
+msgid "Find and fix addresses without (valid) streets."
+msgstr ""
+
+msgid "Address Edit"
+msgstr ""
+
+msgid "Searching"
+msgstr ""
+
+msgid "Guess values for "
+msgstr ""
+
+msgid "Address has no street"
+msgstr ""
+
+msgid "Address has no valid street"
+msgstr ""
+
+msgid "Address has no post code"
+msgstr ""
+
+msgid "Address has no city"
+msgstr ""
+
+msgid "Address has no country"
+msgstr ""
+
+msgid "Assign to"
+msgstr ""
+
+msgid "Remove all address tags"
+msgstr ""
+
+msgid "No name"
+msgstr ""
+
+msgid "Unresolved Addresses"
+msgstr ""
+
+msgid "Select and close"
+msgstr ""
+
+msgid "Fix unresolved addresses"
+msgstr ""
+
+msgid "Complete Addresses"
+msgstr ""
+
+msgid "Incomplete Addresses"
+msgstr ""
+
+msgid "Selected Addresses"
+msgstr ""
+
+msgid "Selected Street"
+msgstr ""
+
+msgid "(No data)"
+msgstr ""
+
+msgid "Segments"
+msgstr ""
+
+msgid "Show incomplete addresses"
+msgstr ""
+
+msgid "items"
+msgstr ""
+
+msgid "no items"
+msgstr ""
+
+msgctxt "address"
+msgid "City"
+msgstr ""
+
+msgid "Postcode"
+msgstr ""
+
+msgid "Turns all guesses into the corresponding tag values."
+msgstr ""
+
+msgid "Applied guessed values"
+msgstr ""
+
+msgid "Applied guessed values for "
+msgstr ""
+
+msgid "Assign address to street"
+msgstr ""
+
+msgid "Assign the selected address(es) to the selected street."
+msgstr ""
+
+msgid "Set street name"
+msgstr ""
+
+msgid "Convert ALL streets."
+msgstr ""
+
+msgid ""
+"Create relation between street and related addresses for ALL streets in the "
+"current layer."
+msgstr ""
+
+msgid "Convert to relation."
+msgstr ""
+
+msgid "Create relation between street and related addresses."
+msgstr ""
+
+msgid "Create address relation for "
+msgstr ""
+
+msgid "Guess"
+msgstr ""
+
+msgid ""
+"Tries to guess address data by picking the name of the closest object with "
+"according tag."
+msgstr ""
+
+msgid "Guessing address values"
+msgstr ""
+
+msgid "Removes address related tags from the object."
+msgstr ""
+
+msgid "Remove address tags"
+msgstr ""
+
+msgid "Marks selected addresses in the map"
+msgstr ""
+
+msgid "Select incomplete addresses"
+msgstr ""
+
+msgid "Selects all addresses with incomplete data."
+msgstr ""
+
+msgid "Use tag ''addr:street'' or ''addr:place''"
+msgstr ""
+
+msgid "House Number Editor"
+msgstr ""
+
+msgid "House number increment:"
+msgstr ""
+
+msgid "Updating properties of up to {0} object"
+msgid_plural "Updating properties of up to {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Default image projection"
+msgstr ""
+
+msgid "JOSM''s current projection"
+msgstr ""
+
+msgid ""
+"No projection file (.prj) found.<br>You can choose the default image "
+"projection ({0}) or JOSM''s current editor projection ({1}) as original "
+"image projection.<br>(It can be changed later from the right click menu of "
+"the image layer.)"
+msgstr ""
+
+msgid "Layer Properties"
+msgstr ""
+
+msgid "Error while creating image layer: {0}"
+msgstr ""
+
+msgid "Import image"
+msgstr ""
+
+msgid "Import georeferenced image"
+msgstr ""
+
+msgid "Error while creating image layer: "
+msgstr ""
+
+msgid "NanoLog"
+msgstr ""
+
+msgid "NanoLog of {0} entries"
+msgstr ""
+
+msgid "NanoLog of {0} lines, {1} of them with coordinates."
+msgstr ""
+
+msgid "Correlate with GPX..."
+msgstr ""
+
+msgid "Put on GPX..."
+msgstr ""
+
+msgid "Correlate entries with GPS trace"
+msgstr ""
+
+msgid "Save layer..."
+msgstr ""
+
+msgid "Save NanoLog layer"
+msgstr ""
+
+msgid "Open NanoLog panel"
+msgstr ""
+
+msgid "Open NanoLog file..."
+msgstr ""
+
+msgid "Could not read NanoLog file:"
+msgstr ""
+
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
+msgid "Edit opening hours"
+msgstr ""
+
+msgid "Edit time-tag of selected element in a graphical interface"
+msgstr ""
+
+msgid "edit existing tag"
+msgstr ""
+
+msgid "edit new tag"
+msgstr ""
+
+msgid "Display clock in 12h mode."
+msgstr ""
+
+msgid "Choose key"
+msgstr ""
+
+msgid "apply {0}"
+msgstr ""
+
+msgid "There is something wrong in the value near:"
+msgstr ""
+
+msgid "Info: {0}"
+msgstr ""
+
+msgid "Correct the value manually and than press Enter."
+msgstr ""
+
+msgid "Error in timeformat"
+msgstr ""
+
+msgid "open end"
+msgstr ""
+
+msgid "Import Osm Inspector Bugs..."
+msgstr ""
+
+msgid "OsmInspector"
+msgstr ""
+
+msgid "Open OsmInspector"
+msgstr ""
+
+msgid "OsmBugInfo"
+msgstr ""
+
+msgid "Open a OSM Inspector selection list window."
+msgstr ""
+
+msgid "Current Selected Bug Info"
+msgstr ""
+
+msgid "Prev OSMI bug"
+msgstr ""
+
+msgid "Next OSMI bug"
+msgstr ""
+
+msgid "Osm Inspector Bugs"
+msgstr ""
+
+msgid "OSM Inspector Bugs"
+msgstr ""
+
+msgid "Selected Bug Info"
+msgstr ""
+
+msgid "Handy Address Interpolation Functions"
+msgstr ""
+
+msgid "Define Address Interpolation"
+msgstr ""
+
+msgid "Odd"
+msgstr ""
+
+msgid "Even"
+msgstr ""
+
+msgid "Alphabetic"
+msgstr ""
+
+msgid "Numeric"
+msgstr ""
+
+msgid "Actual"
+msgstr ""
+
+msgid "Estimate"
+msgstr ""
+
+msgid "Potential"
+msgstr ""
+
+msgid "Relation: {0}"
+msgstr ""
+
+msgid "Associate with street using:"
+msgstr ""
+
+msgid "Numbering Scheme:"
+msgstr ""
+
+msgid "Increment:"
+msgstr ""
+
+msgid "Starting #:"
+msgstr ""
+
+msgid "Ending #:"
+msgstr ""
+
+msgid "Accuracy:"
+msgstr ""
+
+msgid "Convert way to individual house numbers."
+msgstr ""
+
+msgid "Will associate {0} additional house number nodes"
+msgstr ""
+
+msgid "City:"
+msgstr ""
+
+msgid "State:"
+msgstr ""
+
+msgid "Post Code:"
+msgstr ""
+
+msgid "Country:"
+msgstr ""
+
+msgid "Full Address:"
+msgstr ""
+
+msgid "Optional Information:"
+msgstr ""
+
+msgid "Please select a street to associate with address interpolation way"
+msgstr ""
+
+msgid "Please select address interpolation way for this street"
+msgstr ""
+
+msgid "Expected odd numbers for addresses"
+msgstr ""
+
+msgid "Expected even numbers for addresses"
+msgstr ""
+
+msgid "Expected valid number for increment"
+msgstr ""
+
+msgid "Country code must be 2 letters"
+msgstr ""
+
+msgid "Please enter valid number for starting and ending address"
+msgstr ""
+
+msgid "Alphabetic address must end with a letter"
+msgstr ""
+
+msgid "Starting and ending numbers must be the same for alphabetic addresses"
+msgstr ""
+
+msgid "Starting address letter must be less than ending address letter"
+msgstr ""
+
+msgid "Please enter valid number for starting address"
+msgstr ""
+
+msgid "Please enter valid number for ending address"
+msgstr ""
+
+msgid "Starting address number must be less than ending address number"
+msgstr ""
+
+msgid "Align Way Segments"
+msgstr ""
+
+msgid "Align Ways"
+msgstr ""
+
+msgid ""
+"Please select two segments that don''t share any nodes.\n"
+"Alternatively put the pivot on their common node.\n"
+msgstr ""
+
+msgid ""
+"Aligning would result nodes ''outside the world''.\n"
+"Alignment not possible.\n"
+msgstr ""
+
+msgid ""
+"There is at least a non-pivot endpoint of the alignee that joins more than "
+"two way segments.\n"
+"Preserved angles type alignment is not possible.\n"
+msgstr ""
+
+msgid ""
+"The alignment is not possible with maintaining the angles of the joint "
+"segments.\n"
+"Either choose the ''keep length'' aligning method or select other segments.\n"
+msgstr ""
+
+msgid ""
+"An intersection point would fall outside its adjacent nodes.\n"
+"This is an unsupported scenario.\n"
+msgstr ""
+
+msgid "Undocumented problem occured.\n"
+msgstr ""
+
+msgid "AlignWayS: Alignment not possible"
+msgstr ""
+
+msgid "Align way segment"
+msgstr ""
+
+msgid ""
+"Please select two segments that don''t share any nodes\n"
+" or put the pivot on their common node.\n"
+msgstr ""
+
+msgid "Align Way Segments: Modes"
+msgstr ""
+
+msgid "Align Ways control panel"
+msgstr ""
+
+msgid "This panel activates in Align Ways mode:"
+msgstr ""
+
+msgid "Length preserved"
+msgstr ""
+
+msgid "Angle preserved"
+msgstr ""
+
+msgid "Align with:"
+msgstr ""
+
+msgid ""
+"<html>Aligns the way segment to the reference so that its length is "
+"preserved.</html>"
+msgstr ""
+
+msgid ""
+"<html>Aligns the way segment to the reference so that the angles of its "
+"adjacent segments are preserved.<br/>The length of the aligned segment is "
+"likely to change as result.</html>"
+msgstr ""
+
+msgid "I''m ready!"
+msgstr ""
+
+msgid "AlignWays Tips"
+msgstr ""
+
+msgid "AlignWays: What''s New..."
+msgstr ""
+
+msgid "Align Ways mode"
+msgstr ""
+
+msgid "Parameter ''{0}'' must not be null"
+msgstr ""
+
+msgid ""
+"Segment to be aligned cannot be the same with the reference segment.\n"
+"Please choose a different segment to be aligned."
+msgstr ""
+
+msgid "AlignWayS message"
+msgstr ""
+
+msgid ""
+"Reference segment cannot be the same with the segment to be aligned.\n"
+"Please choose a different reference segment."
+msgstr ""
+
+msgid "Ctrl-Click: select reference way segment; Alt-click: Clear selection"
+msgstr ""
+
+msgid ": Align segments; Alt-click: Clear selection"
+msgstr ""
+
+msgid ""
+"Ctrl-click: select reference way segment; Click: select way segment to be "
+"aligned"
+msgstr ""
+
+msgid "Click: select way segment to be aligned; Alt-click: Clear selection"
+msgstr ""
+
+msgid ""
+"Ctrl-Click: select reference way segment; Click: select way segment to be "
+"aligned"
+msgstr ""
+
+msgid ""
+"Welcome to the</span><br>\n"
+"<span style=\"font-size: xx-large;\">AlignWay<span style=\"color: rgb(204, "
+"85, 0);\">S</span> Plugin<br>\n"
+"</span><span style=\"font-size: medium;\"><br>\n"
+"...or it rather should be called <br>\n"
+"<span style=\"font-size: large;\">AlignWayS(egments)</span> Plugin..."
+msgstr ""
+
+msgid ""
+"<html>\n"
+"<p style=\"font-family: sans-serif; font-weight: bold;\">AlignWays will\n"
+"help you to align two way segments. This can be handy when for instance\n"
+"you sketch the outlines of a building and want its side to be parallel\n"
+"with a street or road.<br>\n"
+"<br>\n"
+"Some tips may help before you start:\n"
+"</p>\n"
+"</html>\n"
+"\n"
+msgstr ""
+
+msgid ""
+"<html>\n"
+"<div style=\"font-family: sans-serif;\">\n"
+"<ul>\n"
+"<li><b>Select a reference segment.</b> You can do this by <b><i><span "
+"style=\"color:green\">Ctrl-click</span></i></b>ing\n"
+"on a segment. The other, to be aligned segment will become parallel to\n"
+"this one. </li>\n"
+"</ul>\n"
+"</div>\n"
+"</html>\n"
+"\n"
+msgstr ""
+
+msgid ""
+"<html>\n"
+"<div style=\"font-family:sans-serif\">\n"
+"<ul>\n"
+"  <li><b>Select the to be aligned segment.</b> You can do this by simply "
+"<b><i><span style=\"color:green\">click</span></i></b>ing on a different "
+"segment. \n"
+"The rotation pivot will be highlighted by default in the centre of the "
+"segment.\n"
+"  </li>\n"
+"</ul>\n"
+"</div>\n"
+"</html>\n"
+"\n"
+msgstr ""
+
+msgid ""
+"<html>\n"
+"<div style=\"font-family:sans-serif\">\n"
+"<ul>\n"
+"  <li>Optionally <b>change the rotation pivot point</b>. In order to get "
+"parallel with the reference segment, the to be aligned segment will rotate "
+"around this point. You can choose the two extremities or the centre of the "
+"segment by <b><i><span style=\"color:green\">click</span></i></b>ing nearby. "
+"\n"
+"  </li>\n"
+"</ul>\n"
+"</div>\n"
+"</html>\n"
+"\n"
+msgstr ""
+
+msgid ""
+"<html>\n"
+"<div style=\"font-family:sans-serif\">\n"
+"<ul>\n"
+"  <li><b>Align the segments.</b> Press <b><i><span "
+"style=\"color:green\">{0}</span></i></b>. Alternatively you''ll find the "
+"command in the <b>Tools</b>\n"
+" menu or may want to place the action on the <b>toolbar</b>.\n"
+"  </li>\n"
+"</ul>\n"
+"</div>\n"
+"</html>\n"
+"\n"
+msgstr ""
+
+msgid ""
+"<html>\n"
+"<div style=\"font-family:sans-serif\">\n"
+"<b>Last hint:</b> There is an easy way to start over your selections if you "
+"want: <b><i><span style=\"color:green\">Alt-Click</span></i></b> somewhere "
+"on the map.\n"
+"</div>\n"
+"</html>\n"
+"\n"
+msgstr ""
+
+msgid "Don''t show this again"
+msgstr ""
+
+msgid "What''s new..."
+msgstr ""
+
+msgid "Added <b>angle preserving</b> aligning mode"
+msgstr ""
+
+msgid "Various improvements and bugfixes"
+msgstr ""
+
+msgid "Errr..."
+msgstr ""
+
+msgid "Browser not supported."
+msgstr ""
+
+msgid "Building address"
+msgstr ""
+
+msgid "empty"
+msgstr ""
+
+msgid "skip"
+msgstr ""
+
+msgid "House number:"
+msgstr ""
+
+msgid "Street:"
+msgstr ""
+
+msgid "Post code:"
+msgstr ""
+
+msgid "Building:"
+msgstr ""
+
+msgid "Tags:"
+msgstr ""
+
+msgid "Name:"
+msgstr ""
+
+msgid "updated building info"
+msgstr ""
+
+msgid "Tag Element"
+msgstr ""
+
+msgid "Select an item to tag."
+msgstr ""
+
+msgid "Tag Building"
+msgstr ""
+
+msgid "Tools: {0}"
+msgstr ""
+
+msgid "Area Selection"
+msgstr ""
+
+msgid "Select an area (e.g. building) from an underlying image."
+msgstr ""
+
+msgid "Area Selector"
+msgstr ""
+
+msgid "Created area"
+msgstr ""
+
+msgid "Unable to detect a polygon where you clicked."
+msgstr ""
+
+msgid "Error Report"
+msgstr ""
+
+msgid "Something went wrong!"
+msgstr ""
+
+msgid "Please file a bug report on the github project page under"
+msgstr ""
+
+msgid ""
+"Let us know what you did and what happend add the following text to the bug "
+"report, so we can find the source of the issue."
+msgstr ""
+
+msgid "Area Selector - Preferences"
+msgstr ""
+
+msgid "Settings for the area detection algorithm."
+msgstr ""
+
+msgid "Boofcv - high resolution images"
+msgstr ""
+
+msgid "Custom - low resolution images"
+msgstr ""
+
+msgid ""
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
+msgstr ""
+
+msgid "Algorithm"
+msgstr ""
+
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
+msgstr ""
+
+msgid "Distance Tolerance"
+msgstr ""
+
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
+msgstr ""
+
+msgid "Angle Tolerance"
+msgstr ""
+
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
+msgstr ""
+
+msgid "Color Threshold"
+msgstr ""
+
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
+msgstr ""
+
+msgid "How often thinning operation should be applied (Default {0})."
+msgstr ""
+
+msgid "Thinning Iterations"
+msgstr ""
+
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
+msgstr ""
+
+msgid "Debugging mode will write images for each processing step."
+msgstr ""
+
+msgid "Street Name:"
+msgstr ""
+
+msgid "Big buildings mode"
+msgstr ""
+
+msgid "Rotate crosshair"
+msgstr ""
+
+msgid "Advanced settings"
+msgstr ""
+
+msgid "Buildings tags:"
+msgstr ""
+
+msgid "Cannot place building outside of the world."
+msgstr ""
+
+msgid "Create building"
+msgstr ""
+
+msgid "Set buildings size"
+msgstr ""
+
+msgid "Use Address dialog"
+msgstr ""
+
+msgid "Auto-select building"
+msgstr ""
+
+msgid "Use address nodes under buildings"
+msgstr ""
+
+msgid "Buildings width:"
+msgstr ""
+
+msgid "Length step:"
+msgstr ""
+
+msgid "Advanced..."
+msgstr ""
+
+msgid "Draw buildings"
+msgstr ""
+
+msgid "Point on the corner of the building to start drawing"
+msgstr ""
+
+msgid "Point on opposite end of the building"
+msgstr ""
+
+msgid "Set width of the building"
+msgstr ""
+
+msgid "Merge address points"
+msgstr ""
+
+msgid "Move tags from address nodes inside buildings to building ways"
+msgstr ""
+
+msgid "Select both address nodes and building ways to merge"
+msgstr ""
+
+msgid "No address nodes found in the selection"
+msgstr ""
+
+msgid "No building ways found in the selection"
+msgstr ""
+
+msgid "There is {0} building with multiple address nodes inside"
+msgid_plural "There are {0} buildings with multiple address nodes inside"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "There is {0} building with address conflicts"
+msgid_plural "There are {0} buildings with address conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "No address nodes inside buildings found"
+msgstr ""
+
+msgid "on polygon"
+msgstr ""
+
+msgid "Add address"
+msgstr ""
+
+msgid "Helping tool for tag address"
+msgstr ""
+
+msgid "CadastreFR - Buildings"
+msgstr ""
+
+msgid "Next no"
+msgstr ""
+
+msgid "Enter addresses"
+msgstr ""
+
+msgid ""
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
+msgstr ""
+
+msgid "Select Feuille"
+msgstr ""
+
+msgid ""
+"Error loading file.\n"
+"Probably an old version of the cache file."
+msgstr ""
+
+msgid "Lambert Zone {0} cache file (.{0})"
+msgstr ""
+
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgstr ""
+
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgstr ""
+
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgstr ""
+
+msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgstr ""
+
+msgid "Reunion RGR92 cache file (.UTM4)"
+msgstr ""
+
+msgid "CadastreGrabber: Illegal url."
+msgstr ""
+
+msgid ""
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
+msgstr ""
+
+msgid ""
+"Town/city {0} not found or not available\n"
+"or action canceled"
+msgstr ""
+
+msgid "Choose from..."
+msgstr ""
+
+msgid "Select commune"
+msgstr ""
+
+msgid "Auto sourcing"
+msgstr ""
+
+msgid ""
+"Plugin cadastre-fr used the key shortcut F11 for grabbing,\n"
+"which is now allocated for full-screen switch.\n"
+"The new grabbing key is F10, but you can change the key\n"
+"in the shortcut settings if you want."
+msgstr ""
+
+msgid ""
+"Please enable at least two WMS layers in the cadastre-fr plugin "
+"configuration.\n"
+"Layers ''Building'' and ''Parcel'' added by default."
+msgstr ""
+
+msgid ""
+"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+msgstr ""
+
+msgid ""
+"To enable the cadastre WMS plugin, change\n"
+"the current projection to one of the cadastre\n"
+"projections and retry"
+msgstr ""
+
+msgid "Change the current projection"
+msgstr ""
+
+msgid "Replace original background by JOSM background color."
+msgstr ""
+
+msgid "Reverse grey colors (for black backgrounds)."
+msgstr ""
+
+msgid "Set background transparent."
+msgstr ""
+
+msgid "Draw boundaries of downloaded data."
+msgstr ""
+
+msgid "Disable image cropping during georeferencing."
+msgstr ""
+
+msgid "Use \"Tableau d''assemblage\""
+msgstr ""
+
+msgid "Replace grey shades by white color only"
+msgstr ""
+
+msgid "Select first WMS layer in list."
+msgstr ""
+
+msgid "Don''t use relation for addresses (but \"addr:street\" on elements)."
+msgstr ""
+
+msgid "off"
+msgstr ""
+
+msgid "25 m"
+msgstr ""
+
+msgid "50 m"
+msgstr ""
+
+msgid "100 m"
+msgstr ""
+
+msgid "symbol"
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "parcel number"
+msgstr ""
+
+msgid "address"
+msgstr ""
+
+msgid "locality"
+msgstr ""
+
+msgid "section"
+msgstr ""
+
+msgid "commune"
+msgstr ""
+
+msgid "Enable automatic caching."
+msgstr ""
+
+msgid "Max. cache size (in MB)"
+msgstr ""
+
+msgid "French cadastre WMS"
+msgstr ""
+
+msgid ""
+"A special handler of the French cadastre wms at "
+"www.cadastre.gouv.fr<BR><BR>Please read the Terms and Conditions of Use here "
+"(in French): <br><a "
+"href=\"http://www.cadastre.gouv.fr/scpc/html/CU_01_ConditionsGenerales_fr.htm"
+"l\"> "
+"http://www.cadastre.gouv.fr/scpc/html/CU_01_ConditionsGenerales_fr.html</a> "
+"<BR>before any upload of data created by this plugin."
+msgstr ""
+
+msgid "<html>Value of key \"source\" when autosourcing is enabled</html>"
+msgstr ""
+
+msgid ""
+"Replace the original white background by the background color defined in "
+"JOSM preferences."
+msgstr ""
+
+msgid ""
+"Invert the original black and white colors (and all intermediate greys). "
+"Useful for texts on dark backgrounds."
+msgstr ""
+
+msgid "Allows multiple layers stacking"
+msgstr ""
+
+msgid "Set WMS layers transparency. Right is opaque, left is transparent."
+msgstr ""
+
+msgid "Draw a rectangle around downloaded data from WMS server."
+msgstr ""
+
+msgid "Image resolution:"
+msgstr ""
+
+msgid "High resolution (1000x800)"
+msgstr ""
+
+msgid "Medium resolution (800x600)"
+msgstr ""
+
+msgid "Low resolution (600x400)"
+msgstr ""
+
+msgid "Image filter interpolation:"
+msgstr ""
+
+msgid "Nearest-Neighbor (fastest) [ Default ]"
+msgstr ""
+
+msgid "Bilinear (fast)"
+msgstr ""
+
+msgid "Bicubic (slow)"
+msgstr ""
+
+msgid "Vector images grab multiplier:"
+msgstr ""
+
+msgid "Grab one image full screen"
+msgstr ""
+
+msgid "Grab smaller images (higher quality but use more memory)"
+msgstr ""
+
+msgid "Fixed size square (default is 100m)"
+msgstr ""
+
+msgid "Fixed size (from 25 to 1000 meters)"
+msgstr ""
+
+msgid "Layers:"
+msgstr ""
+
+msgid "Sea, rivers, swimming pools."
+msgstr ""
+
+msgid "Buildings, covers, underground constructions."
+msgstr ""
+
+msgid "Symbols like cristian cross."
+msgstr ""
+
+msgid "Parcels."
+msgstr ""
+
+msgid "Parcels numbers, street names."
+msgstr ""
+
+msgid "Address, houses numbers."
+msgstr ""
+
+msgid "Locality, hamlet, place."
+msgstr ""
+
+msgid "Cadastral sections and subsections."
+msgstr ""
+
+msgid "Municipality administrative borders."
+msgstr ""
+
+msgid "Raster images grab multiplier:"
+msgstr ""
+
+msgid ""
+"Add the \"Tableau(x) d''assemblage\" in the list of cadastre sheets to grab."
+msgstr ""
+
+msgid "Replace greyscale by white color (smaller files and memory usage)."
+msgstr ""
+
+msgid "Display crosspieces:"
+msgstr ""
+
+msgid "Allows an automatic caching"
+msgstr ""
+
+msgid "Oldest files are automatically deleted when this size is exceeded"
+msgstr ""
+
+msgid ""
+"Automatically selects the first WMS layer if multiple layers exist when "
+"grabbing."
+msgstr ""
+
+msgid "Enable this to use the tag \"add:street\" on nodes."
+msgstr ""
+
+msgid "Unexpected file extension. {0}"
+msgstr ""
+
+msgid "Add \"source=...\" to elements?"
+msgstr ""
+
+msgid "Downloading {0}"
+msgstr ""
+
+msgid "Contacting WMS Server..."
+msgstr ""
+
+msgid "Create buildings"
+msgstr ""
+
+msgid ""
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
+msgstr ""
+
+msgid "Please, enable auto-sourcing and check cadastre millesime."
+msgstr ""
+
+msgid "Extract SVG ViewBox..."
+msgstr ""
+
+msgid "Extract best fitting boundary..."
+msgstr ""
+
+msgid "Create boundary"
+msgstr ""
+
+msgid "Contacting cadastre WMS ..."
+msgstr ""
+
+msgid "Image already loaded"
+msgstr ""
+
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
+msgstr ""
+
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
+msgstr ""
+
+msgid "Extract commune boundary"
+msgstr ""
+
+msgid "Only on vectorized layers"
+msgstr ""
+
+msgid "Cancel current grab"
+msgstr ""
+
+msgid "Cancel current grab (only vector images)"
+msgstr ""
+
+msgid "Cadastre grab"
+msgstr ""
+
+msgid "Download Image from French Cadastre WMS"
+msgstr ""
+
+msgid "Cadastre: {0}"
+msgstr ""
+
+msgid "Georeference an image"
+msgstr ""
+
+msgid "Grab non-georeferenced image"
+msgstr ""
+
+msgid "Georeferencing interrupted"
+msgstr ""
+
+msgid ""
+"This image contains georeference data.\n"
+"Do you want to use them ?"
+msgstr ""
+
+msgid "Load layer from cache"
+msgstr ""
+
+msgid "Load location from cache (only if cache is enabled)"
+msgstr ""
+
+msgid "{0} not allowed with the current projection"
+msgstr ""
+
+msgid ""
+"Cannot load cache {0} which is not compatible with current projection zone"
+msgstr ""
+
+msgid ""
+"Selected file {0} is not a cache file from this plugin (invalid extension)"
+msgstr ""
+
+msgid "The location {0} is already on screen. Cache not loaded."
+msgstr ""
+
+msgid "(optional)"
+msgstr ""
+
+msgid "Change location"
+msgstr ""
+
+msgid "Set a new location for the next request"
+msgstr ""
+
+msgid "Add a new municipality layer"
+msgstr ""
+
+msgid "Commune"
+msgstr ""
+
+msgid ""
+"<html>Enter the town,village or city name.<br>Use the syntax and punctuation "
+"known by www.cadastre.gouv.fr .</html>"
+msgstr ""
+
+msgid "Departement"
+msgstr ""
+
+msgid "<html>Departement number (optional)</html>"
+msgstr ""
+
+msgid "Add new layer"
+msgstr ""
+
+msgid "Open Cadastre Preferences"
+msgstr ""
+
+msgid "Refine georeferencing"
+msgstr ""
+
+msgid "Improve georeferencing (only raster images)"
+msgstr ""
+
+msgid "Reset cookie"
+msgstr ""
+
+msgid "Get a new cookie (session timeout)"
+msgstr ""
+
+msgid "Save image as..."
+msgstr ""
+
+msgid "PNG files (*.png)"
+msgstr ""
+
+msgid "GeoTiff files (*.tif)"
+msgstr ""
+
+msgid "Export image (only raster images)"
+msgstr ""
+
+msgid ""
+"Click first corner for image cropping\n"
+"(two points required)"
+msgstr ""
+
+msgid "Image cropping"
+msgstr ""
+
+msgid ""
+"Click first Lambert crosspiece for georeferencing\n"
+"(two points required)"
+msgstr ""
+
+msgid "Image georeferencing"
+msgstr ""
+
+msgid ""
+"Do you want to cancel completely\n"
+"or just retry "
+msgstr ""
+
+msgid ""
+"Ooops. I failed to catch all coordinates\n"
+"correctly. Retry please."
+msgstr ""
+
+msgid "Enter cadastre east,north position"
+msgstr ""
+
+msgid "(Warning: verify north with arrow !!)"
+msgstr ""
+
+msgid "East"
+msgstr ""
+
+msgid "I use the mouse"
+msgstr ""
+
+msgid "Set {0} Lambert coordinates"
+msgstr ""
+
+msgid "Click second corner for image cropping"
+msgstr ""
+
+msgid "Click second Lambert crosspiece for georeferencing"
+msgstr ""
+
+msgid "Adjust WMS"
+msgstr ""
+
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
+msgstr ""
+
+msgid ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
+msgid "Reset offset"
+msgstr ""
+
+msgid "Reset offset (only vector images)"
+msgstr ""
+
+msgid "Blank Layer"
+msgstr ""
+
+msgid "WMS layer ({0}), {1} tile(s) loaded"
+msgstr ""
+
+msgid "Is not vectorized."
+msgstr ""
+
+msgid "Bounding box: {0}"
+msgstr ""
+
+msgid "Image size (px): {0}/{1}"
+msgstr ""
+
+msgid "Is vectorized."
+msgstr ""
+
+msgid "Commune bbox: {0}"
+msgstr ""
+
+msgid ""
+"Unsupported cache file version; found {0}, expected {1}\n"
+"Create a new one."
+msgstr ""
+
+msgid "Cache Format Error"
+msgstr ""
+
+msgid "Lambert zone {0} in cache incompatible with current Lambert zone {1}"
+msgstr ""
+
+msgid "Cache Lambert Zone Error"
+msgstr ""
+
+msgid "canvec tile helper"
+msgstr ""
+
+msgid "Use"
+msgstr ""
+
+msgid "Please select a scheme to use."
+msgstr ""
+
+msgid "Color Scheme"
+msgstr ""
+
+msgid "Please select the scheme to delete."
+msgstr ""
+
+msgid "Use the selected scheme from the list."
+msgstr ""
+
+msgid "Use the current colors as a new color scheme."
+msgstr ""
+
+msgid "Delete the selected scheme from the list."
+msgstr ""
+
+msgid "Color Schemes"
+msgstr ""
+
+msgid "Conflate object pair"
+msgstr ""
+
+msgid "Added {0} object to subject layer"
+msgid_plural "Added {0} objects to subject layer"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Conflation"
+msgstr ""
+
+msgid "Activates the conflation plugin"
+msgstr ""
+
+msgid "Matches"
+msgstr ""
+
+msgid "Reference only"
+msgstr ""
+
+msgid "Subject only"
+msgstr ""
+
+msgid "Matches ({0})"
+msgstr ""
+
+msgid "Reference only ({0})"
+msgstr ""
+
+msgid "Subject only ({0})"
+msgstr ""
+
+msgid "Configure"
+msgstr ""
+
+msgid "Configure conflation options"
+msgstr ""
+
+msgid "Delete {0} conflation matches"
+msgstr ""
+
+msgid "Remove {0} unmatched objects"
+msgstr ""
+
+msgid "Remove selected matches"
+msgstr ""
+
+msgid "Conflate"
+msgstr ""
+
+msgid "Conflate selected objects"
+msgstr ""
+
+msgid "Conflation: {0}"
+msgstr ""
+
+msgid "Cannot replace geometry."
+msgstr ""
+
+msgid "Zoom to selected primitive(s)"
+msgstr ""
+
+msgid "Select selected primitive(s)"
+msgstr ""
+
+msgid "Select the primitives currently selected in the list"
+msgstr ""
+
+msgid "Match finder settings"
+msgstr ""
+
+msgid "Match finder method"
+msgstr ""
+
+msgid "Threshold distance"
+msgstr ""
+
+msgid "Distances greater than this will result in a score of zero."
+msgstr ""
+
+msgid "Centroid distance"
+msgstr ""
+
+msgid "Hausdorff distance"
+msgstr ""
+
+msgid "Configure conflation settings"
+msgstr ""
+
+msgid "Generate matches"
+msgstr ""
+
+msgid "Subject"
+msgstr ""
+
+msgid "Selections must be made for both reference and subject."
+msgstr ""
+
+msgid "Incomplete selections"
+msgstr ""
+
+msgid "Restore subject selection"
+msgstr ""
+
+msgid "Restore reference selection"
+msgstr ""
+
+msgid "Freeze subject selection"
+msgstr ""
+
+msgid "No valid OSM data layer present."
+msgstr ""
+
+msgid "Error freezing selection"
+msgstr ""
+
+msgid "Nothing is selected, please try again."
+msgstr ""
+
+msgid "Empty selection"
+msgstr ""
+
+msgid "Invalid reference or subject"
+msgstr ""
+
+msgid "Address"
+msgstr ""
+
+msgid "Split area"
+msgstr ""
+
+msgid "Splits an area by an untagged way."
+msgstr ""
+
+msgid ""
+"The selected area cannot be splitted, because it is a member of some "
+"relation.\n"
+"Remove the area from the relation before splitting it."
+msgstr ""
+
+msgid "TangoGPS Files (*.log)"
+msgstr ""
+
+msgid "Coordinates imported: "
+msgstr ""
+
+msgid "Format errors: "
+msgstr ""
+
+msgid "TangoGPS import success"
+msgstr ""
+
+msgid "TangoGPS import failure!"
+msgstr ""
+
+msgid "TCX Files (*.tcx)"
+msgstr ""
+
+msgid "Download along..."
+msgstr ""
+
+msgid "Download OSM data along the selected ways."
+msgstr ""
+
+msgid "Download Along"
+msgstr ""
+
+msgid "Please select 1 or more ways to download along"
+msgstr ""
+
+msgid "Download from OSM along selected ways"
+msgstr ""
+
+msgid "{0} intermediate nodes to download."
+msgstr ""
+
+msgid "between {0} {1} and {2} {3}"
+msgstr ""
+
+msgid "  adding {0} {1}"
+msgstr ""
+
+msgid "Layer for editing GPX tracks"
+msgstr ""
+
+msgid "Convert to GPX layer with anonymised time"
+msgstr ""
+
+msgid "EditGpx"
+msgstr ""
+
+msgid "edit gpx tracks"
+msgstr ""
+
+msgid "Import path from GPX layer"
+msgstr ""
+
+msgid "Drop existing path"
+msgstr ""
+
+msgid "No GPX data layer found."
+msgstr ""
+
+msgid "External tool error"
+msgstr ""
+
+msgid "Error executing the script:"
+msgstr ""
+
+msgid ""
+"Child script have returned invalid data.\n"
+"\n"
+"stderr contents:"
+msgstr ""
+
+msgid "exttool:{0}"
+msgstr ""
+
+msgid "External Tool: {0}"
+msgstr ""
+
+msgid "Edit tool"
+msgstr ""
+
+msgid "CmdLine:"
+msgstr ""
+
+msgid "External tools"
+msgstr ""
+
+msgid "Delete tool \"{0}\"?"
+msgstr ""
+
+msgid "Are you sure?"
+msgstr ""
+
+msgid "New tool..."
+msgstr ""
+
+msgid "Install"
+msgstr ""
+
+msgid "Public"
+msgstr ""
+
+msgid "Could not get server response, check logs"
+msgstr ""
+
+msgid "Failed to login as {0}:"
+msgstr ""
+
+msgid "The server did not return user ID"
+msgstr ""
+
+msgid "Failed to get messages as {0}:"
+msgstr ""
+
+msgid "GeoChat"
+msgstr ""
+
+msgid "Open GeoChat panel"
+msgstr ""
+
+msgid "Zoom in to see messages"
+msgstr ""
+
+msgid "Login"
+msgstr ""
+
+msgid "Enable autologin"
+msgstr ""
+
+msgid "{0} user"
+msgid_plural "{0} users"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "not logged in"
+msgstr ""
+
+msgid "Failed to log in to GeoChat:"
+msgstr ""
+
+msgid "Failed to send message:"
+msgstr ""
+
+msgid "User {0} has left"
+msgstr ""
+
+msgid "User {0} is mapping nearby"
+msgstr ""
+
+msgid "Users mapping nearby:"
+msgstr ""
+
+msgid "Private chat"
+msgstr ""
+
+msgid "Close tab"
+msgstr ""
+
+msgid "Logout"
+msgstr ""
+
+msgid "Clear log"
+msgstr ""
+
+msgid "Show users on map"
+msgstr ""
+
+msgid "Position only"
+msgstr ""
+
+msgid "Position, Time, Date, Speed"
+msgstr ""
+
+msgid "Position, Time, Date, Speed, Altitude"
+msgstr ""
+
+msgid "A By Time"
+msgstr ""
+
+msgid "A By Distance"
+msgstr ""
+
+msgid "B By Time"
+msgstr ""
+
+msgid "B By Distance"
+msgstr ""
+
+msgid "C By Time"
+msgstr ""
+
+msgid "C By Distance"
+msgstr ""
+
+msgid "Data Logging Format"
+msgstr ""
+
+msgid "Disable data logging if speed falls below"
+msgstr ""
+
+msgid "Disable data logging if distance falls below"
+msgstr ""
+
+msgid "Unknown logFormat"
+msgstr ""
+
+msgid "Port:"
+msgstr ""
+
+msgid "refresh the port list"
+msgstr ""
+
+msgid "Configure Device"
+msgstr ""
+
+msgid "Connection Error."
+msgstr ""
+
+msgid "configure the connected DG100"
+msgstr ""
+
+msgid "delete data after import"
+msgstr ""
+
+msgid "Importing data from device."
+msgstr ""
+
+msgid "Importing data from DG100..."
+msgstr ""
+
+msgid "Error deleting data."
+msgstr ""
+
+msgid "imported data from {0}"
+msgstr ""
+
+msgid "No data found on device."
+msgstr ""
+
+msgid "Connection failed."
+msgstr ""
+
+msgid ""
+"Cannot load library rxtxSerial. If you need support to install it try "
+"Globalsat homepage at http://www.raphael-mack.de/josm-globalsat-gpx-import-"
+"plugin/"
+msgstr ""
+
+msgid "Globalsat Import"
+msgstr ""
+
+msgid "Import Data from Globalsat Datalogger DG100 into GPX layer."
+msgstr ""
+
+msgid "Import"
+msgstr ""
+
+msgid "GPS Blams"
+msgstr ""
+
+msgid "GPSBlam"
+msgstr ""
+
+msgid "select gpx points and \"blam!\", find centre and direction of spread"
+msgstr ""
+
+msgid "Add EGPX layer"
+msgstr ""
+
+msgid "GPX Data"
+msgstr ""
+
+msgid "Classes element below root child level"
+msgstr ""
+
+msgid "Class element ({0}) outside classes element"
+msgstr ""
+
+msgid "Class element without name"
+msgstr ""
+
+msgid "Tag element outside basetag and implication elements"
+msgstr ""
+
+msgid "Implications element below root child level"
+msgstr ""
+
+msgid "Tag without key"
+msgstr ""
+
+msgid "Tag without value (key is {0})"
+msgstr ""
+
+msgid "Closed classes while it was not open"
+msgstr ""
+
+msgid "Closed classes element before all class elements were closed"
+msgstr ""
+
+msgid "Closed class element while none was open"
+msgstr ""
+
+msgid "Closed basetags while it was not open"
+msgstr ""
+
+msgid "Closed implications while it was not open"
+msgstr ""
+
+msgid "Tag element inside other tag element"
+msgstr ""
+
+msgid "Invalid opening xml tag <{0}> in state {1}"
+msgstr ""
+
+msgid "Condition isn''t finished at </condition> tag"
+msgstr ""
+
+msgid "Closing tag element that was not open"
+msgstr ""
+
+msgid "Invalid closing xml tag </{0}> in state {1}"
+msgstr ""
+
+msgid "Some tags have not been closed; now in state {0}"
+msgstr ""
+
+msgid "Key element without attribute k"
+msgstr ""
+
+msgid "Condition is already finished at <{0}>"
+msgstr ""
+
+msgid "Unknown tag for condition: {0}"
+msgstr ""
+
+msgid "Element must not have children: {0}"
+msgstr ""
+
+msgid "Condition is already finished at </{0}>"
+msgstr ""
+
+msgid "<and> needs at least one child"
+msgstr ""
+
+msgid "<or> needs at least one child"
+msgstr ""
+
+msgid "<not> needs at least one child"
+msgstr ""
+
+msgid "Wrong closing tag {0} (</{1}> expected)"
+msgstr ""
+
+msgid "Condition {0} not yet finished"
+msgstr ""
+
+msgid "Group not yet evaluated"
+msgstr ""
+
+msgid "Collection must contain at least one condition"
+msgstr ""
+
+msgid "No ruleset has been selected!"
+msgstr ""
+
+msgid "No ruleset"
+msgstr ""
+
+msgid ""
+"Syntax exception in access ruleset:\n"
+"{0}"
+msgstr ""
+
+msgid ""
+"File not found:\n"
+"{0}"
+msgstr ""
+
+msgid ""
+"Problem when accessing a file:\n"
+"{0}"
+msgstr ""
+
+msgid "File not found:\n"
+msgstr ""
+
+msgid "Couldn''t find built-in ruleset {0}"
+msgstr ""
+
+msgid "height (m)"
+msgstr ""
+
+msgid "width (m)"
+msgstr ""
+
+msgid "length (m)"
+msgstr ""
+
+msgid "speed (km/h)"
+msgstr ""
+
+msgid "weight (t)"
+msgstr ""
+
+msgid "axleload (t)"
+msgstr ""
+
+msgid "Bookmark name"
+msgstr ""
+
+msgid "Bookmark name already exists!"
+msgstr ""
+
+msgid "Bookmark name must not contain ''{0}''!"
+msgstr ""
+
+msgid "Access class"
+msgstr ""
+
+msgid "Access class must not contain ''{0}''!"
+msgstr ""
+
+msgid "Access types"
+msgstr ""
+
+msgid "Vehicle properties"
+msgstr ""
+
+msgid "Road requirements"
+msgstr ""
+
+msgid "Max. incline up (%, pos.)"
+msgstr ""
+
+msgid "Maximum incline the vehicle can go up"
+msgstr ""
+
+msgid "Max. incline down (%, pos.)"
+msgstr ""
+
+msgid "Maximum incline the vehicle can go down"
+msgstr ""
+
+msgid "Surface blacklist"
+msgstr ""
+
+msgid ""
+"List of surfaces the vehicle cannot use, values are separated by semicolons "
+"(;)"
+msgstr ""
+
+msgid "max. tracktype grade"
+msgstr ""
+
+msgid "Worst tracktype (1-5) the vehicle can still use, 0 for none"
+msgstr ""
+
+msgid "Change bookmark"
+msgstr ""
+
+msgid "Edit access parameters"
+msgstr ""
+
+msgid "Graph View Dialog"
+msgstr ""
+
+msgid "Open the dialog for graph view configuration."
+msgstr ""
+
+msgid "default"
+msgstr ""
+
+msgid "end nodes"
+msgstr ""
+
+msgid "incline"
+msgstr ""
+
+msgid "Ruleset:"
+msgstr ""
+
+msgid "Parameters:"
+msgstr ""
+
+msgid "Coloring:"
+msgstr ""
+
+msgid "Create/update graph"
+msgstr ""
+
+msgid "Graphview"
+msgstr ""
+
+msgid "Settings for the Graphview plugin that visualizes routing graphs."
+msgstr ""
+
+msgid "Ruleset"
+msgstr ""
+
+msgid "Use built-in rulesets"
+msgstr ""
+
+msgid "External ruleset directory:"
+msgstr ""
+
+msgid "Select directory"
+msgstr ""
+
+msgid "Vehicle"
+msgstr ""
+
+msgid "Restore defaults"
+msgstr ""
+
+msgid "Visualization"
+msgstr ""
+
+msgid "Draw directions separately"
+msgstr ""
+
+msgid "Node color"
+msgstr ""
+
+msgid "Arrow color"
+msgstr ""
+
+msgid "Arrowhead fill color"
+msgstr ""
+
+msgid "Arrowhead placement"
+msgstr ""
+
+msgid "New bookmark"
+msgstr ""
+
+msgid "Really delete \"{0}\"?"
+msgstr ""
+
+msgid "Bookmark deletion"
+msgstr ""
+
+msgid ""
+"Really restore default bookmarks?\n"
+"All manually added or edited bookmarks will be lost!"
+msgstr ""
+
+msgid "Bookmark reset"
+msgstr ""
+
+msgid "Choose node color"
+msgstr ""
+
+msgid "Choose arrow color"
+msgstr ""
+
+msgid "Choose arrowhead fill color"
+msgstr ""
+
+msgid "Routing graph calculated by the GraphView plugin"
+msgstr ""
+
+msgid "GraphView layer is not mergable"
+msgstr ""
+
+msgid "graphview default node"
+msgstr ""
+
+msgid "graphview default segment"
+msgstr ""
+
+msgid "graphview arrowhead core"
+msgstr ""
+
+msgid ""
+"Weights must be given as positive decimal numbers with unit \"t\" or without "
+"unit."
+msgstr ""
+
+msgid ""
+"Lengths must be given as positive decimal numbers with unit \"m\", \"km\", "
+"\"mi\" or without unit.\n"
+"Alternatively, the format FEET'' INCHES\" can be used."
+msgstr ""
+
+msgid ""
+"Speeds should be given as numbers without unit or as numbers followed by "
+"\"mph\"."
+msgstr ""
+
+msgid ""
+"Inclines must be given as positive decimal numbers with followed by \"%\"."
+msgstr ""
+
+msgid "Tracktype grades must be given as integers between 0 and 5."
+msgstr ""
+
+msgid ""
+"Surface values must not contain any of the following characters: '','', '' "
+"'{' '',  '' '}' '', ''='', ''|''"
+msgstr ""
+
+msgid "Imagery XML Files"
+msgstr ""
+
+msgid "Save Imagery XML file"
+msgstr ""
+
+msgid "XML Imagery Bounds"
+msgstr ""
+
+msgid "Generate Imagery XML bounds for the selection"
+msgstr ""
+
+msgid "edit bounds for selected defaults"
+msgstr ""
+
+msgid "Download imagery XML bounds"
+msgstr ""
+
+msgid ""
+"Validating error in file {0}:\n"
+"{1}\n"
+"Do you want to continue without validating the file ?"
+msgstr ""
+
+msgid "Open Imagery XML file"
+msgstr ""
+
+msgid "Calibration Layer"
+msgstr ""
+
+msgid "A deprecated calibration geometry of {0} nodes by {1}"
+msgstr ""
+
+msgid "A calibration geometry of {0} nodes by {1}"
+msgstr ""
+
+msgid "Change Color"
+msgstr ""
+
+msgid "Deprecate Offset"
+msgstr ""
+
+msgid "Are you sure this imagery offset is wrong?"
+msgstr ""
+
+msgid "Are you sure this calibration geometry is aligned badly?"
+msgstr ""
+
+msgid "Warning: deprecation is basically irreversible!"
+msgstr ""
+
+msgid "To store imagery offsets you must be a registered OSM user."
+msgstr ""
+
+msgid ""
+"Please enter the reason why you mark this imagery offset as deprecated"
+msgstr ""
+
+msgid ""
+"Please enter the reason why you mark this calibration geometry as deprecated"
+msgstr ""
+
+msgid "Notifying the server of the deprecation..."
+msgstr ""
+
+msgid "Get Imagery Offset..."
+msgstr ""
+
+msgid "Download offsets for current imagery from a server"
+msgstr ""
+
+msgid ""
+"No data for this region. Please adjust imagery layer and upload an offset."
+msgstr ""
+
+msgid "Loading imagery offsets..."
+msgstr ""
+
+msgid "Error processing XML response: {0}"
+msgstr ""
+
+msgid "Offset"
+msgstr ""
+
+msgid "Imagery Offset Database"
+msgstr ""
+
+msgid "mm"
+msgstr ""
+
+msgid "cm"
+msgstr ""
+
+msgid "m"
+msgstr ""
+
+msgid "km"
+msgstr ""
+
+msgid "Calibration geometries"
+msgstr ""
+
+msgid "Deprecated offsets"
+msgstr ""
+
+msgid ""
+"The topmost imagery layer has been shifted to presumably match\n"
+"OSM data in the area. Please check that the offset is still valid\n"
+"by downloading GPS tracks and comparing them and OSM data to the imagery."
+msgstr ""
+
+msgid ""
+"A layer has been added with a calibration geometry. Hide data layers,\n"
+"find the corresponding feature on the imagery layer and move it accordingly."
+msgstr ""
+
+msgid "Deprecated by {0} on {1}"
+msgstr ""
+
+msgid "Created by {0} on {1}"
+msgstr ""
+
+msgid "Offset Information"
+msgstr ""
+
+msgid "Report this offset"
+msgstr ""
+
+msgid "You are to notify moderators of this offset. Why?"
+msgstr ""
+
+msgid "Reporting the offset..."
+msgstr ""
+
+msgid "An imagery offset of {0}"
+msgstr ""
+
+msgid "Imagery ID"
+msgstr ""
+
+msgid "A calibration geometry of {0} nodes"
+msgstr ""
+
+msgid "Determined right here"
+msgstr ""
+
+msgid "Determined {0} away"
+msgstr ""
+
+msgid "Reason"
+msgstr ""
+
+msgid "This entry has been reported."
+msgstr ""
+
+msgid "Server has rejected the request"
+msgstr ""
+
+msgid "Unable to connect to the server"
+msgstr ""
+
+msgid "Store Imagery Offset..."
+msgstr ""
+
+msgid ""
+"Upload an offset for current imagery (or calibration object geometry) to a "
+"server"
+msgstr ""
+
+msgid "Store calibration geometry"
+msgstr ""
+
+msgid "Store imagery offset"
+msgstr ""
+
+msgid ""
+"The selected object can be used as a calibration geometry. What do you "
+"intend to do?"
+msgstr ""
+
+msgid ""
+"The topmost imagery layer has no offset. Are you sure you want to upload "
+"this?"
+msgstr ""
+
+msgid ""
+"You are registering an imagery offset. Other users in this area will be able "
+"to use it for mapping.\n"
+"Please make sure it is as precise as possible, and describe a region this "
+"offset is applicable to."
+msgstr ""
+
+msgid ""
+"You are registering a calibration geometry. It should be the most precisely "
+"positioned object, with\n"
+"clearly visible boundaries on various satellite imagery. Please describe "
+"this object and its whereabouts."
+msgstr ""
+
+msgid "Uploading a new offset..."
+msgstr ""
+
+msgid "This string should be 3 to 200 letters long."
+msgstr ""
+
+msgid "Adjust imagery"
+msgstr ""
+
+msgid "Adjust the position of the selected imagery layer"
+msgstr ""
+
+msgid "Please select the imagery layer to adjust."
+msgstr ""
+
+msgid "Start adjusting"
+msgstr ""
+
+msgid "There are currently no imagery layer to adjust."
+msgstr ""
+
+msgid "No layers to adjust"
+msgstr ""
+
+msgid "Normal"
+msgstr ""
+
+msgid "Rotate 90"
+msgstr ""
+
+msgid "Rotate 180"
+msgstr ""
+
+msgid "Rotate 270"
+msgstr ""
+
+msgid "Previous image"
+msgstr ""
+
+msgid "Next image"
+msgstr ""
+
+msgid "Rotate left"
+msgstr ""
+
+msgid "Rotate image left"
+msgstr ""
+
+msgid "Rotate right"
+msgstr ""
+
+msgid "Rotate image right"
+msgstr ""
+
+msgid "WayPoint Image"
+msgstr ""
+
+msgid "Display non-geotagged photos"
+msgstr ""
+
+msgid "Imported Images"
+msgstr ""
+
+msgid "Image files (*.jpg, *.jpeg, *.png, *.gif)"
+msgstr ""
+
+msgid "Import vector graphics"
+msgstr ""
+
+msgid "Scale:"
+msgstr ""
+
+msgid "unit(s) = "
+msgstr ""
+
+msgid "Importing..."
+msgstr ""
+
+msgid "SVG files [ImportVec plugin] (*.svg)"
+msgstr ""
+
+msgid "Please open or create data layer before importing"
+msgstr ""
+
+msgid "InfoMode"
+msgstr ""
+
+msgid "GPX info mode"
+msgstr ""
+
+msgid ""
+"Move the mouse to show trackpoint info for current layer. Hold shift to "
+"highlight tracks"
+msgstr ""
+
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
+msgstr ""
+
+msgid "Connecting"
+msgstr ""
+
+msgid "Connected"
+msgstr ""
+
+msgid "no name"
+msgstr ""
+
+msgid "Live GPS"
+msgstr ""
+
+msgid "Show GPS data."
+msgstr ""
+
+msgid "Status"
+msgstr ""
+
+msgid "Way Info"
+msgstr ""
+
+msgid "Speed"
+msgstr ""
+
+msgid "Course"
+msgstr ""
+
+msgid "LiveGPS layer"
+msgstr ""
+
+msgid "Capture GPS Track"
+msgstr ""
+
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgstr ""
+
+msgid "Center Once"
+msgstr ""
+
+msgid "Center the LiveGPS layer to current position."
+msgstr ""
+
+msgid "Auto-Center"
+msgstr ""
+
+msgid "Continuously center the LiveGPS layer to current position."
+msgstr ""
+
+msgid "Open MapDust"
+msgstr ""
+
+msgid "MapDust bug reports"
+msgstr ""
+
+msgid "Activates the MapDust bug reporter plugin"
+msgstr ""
+
+msgid "Missing input data"
+msgstr ""
+
+msgid "Mapillary Images"
+msgstr ""
+
+msgid "Mapillary layer"
+msgstr ""
+
+msgid "Total images:"
+msgstr ""
+
+msgid "images"
+msgstr ""
+
+msgid "Mapillary"
+msgstr ""
+
+msgid "Create Mapillary layer"
+msgstr ""
+
+msgid "Start Mapillary layer"
+msgstr ""
+
+msgid "Download Mapillary images in current view"
+msgstr ""
+
+msgid "Export pictures"
+msgstr ""
+
+msgid "Export Mapillary pictures"
+msgstr ""
+
+msgid "Export images"
+msgstr ""
+
+msgid "Import pictures"
+msgstr ""
+
+msgid "Import local pictures"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer"
+msgstr ""
+
+msgid "Select pictures"
+msgstr ""
+
+msgid "Import pictures into sequence"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer in a sequence"
+msgstr ""
+
+msgid "Join mode"
+msgstr ""
+
+msgid "Join/unjoin pictures"
+msgstr ""
+
+msgid "Join Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures"
+msgstr ""
+
+msgid "Upload Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures."
+msgstr ""
+
+msgid "Walk mode"
+msgstr ""
+
+msgid "Start walk mode"
+msgstr ""
+
+msgid "Zoom to selected image"
+msgstr ""
+
+msgid "Zoom to the currently selected Mapillary image"
+msgstr ""
+
+msgid "Uploaded {0} images"
+msgstr ""
+
+msgid "Approve upload on the website"
+msgstr ""
+
+msgid "View in website"
+msgstr ""
+
+msgid "Copy key"
+msgstr ""
+
+msgid "Copy key tag"
+msgstr ""
+
+msgid "Edit on website"
+msgstr ""
+
+msgid "Export all images"
+msgstr ""
+
+msgid "Export selected sequence"
+msgstr ""
+
+msgid "Export selected images"
+msgstr ""
+
+msgid "Rewrite imported images"
+msgstr ""
+
+msgid "Select a folder"
+msgstr ""
+
+msgid "Explore"
+msgstr ""
+
+msgid "Select a directory"
+msgstr ""
+
+msgid "Speed limit"
+msgstr ""
+
+msgid "Give way"
+msgstr ""
+
+msgid "No entry"
+msgstr ""
+
+msgid "Intersection danger"
+msgstr ""
+
+msgid "Mandatory direction (any)"
+msgstr ""
+
+msgid "No turn"
+msgstr ""
+
+msgid "Uneven road"
+msgstr ""
+
+msgid "No parking"
+msgstr ""
+
+msgid "No overtaking"
+msgstr ""
+
+msgid "Pedestrian crossing"
+msgstr ""
+
+msgid "Years"
+msgstr ""
+
+msgid "Months"
+msgstr ""
+
+msgid "Days"
+msgstr ""
+
+msgid "Mapillary filter"
+msgstr ""
+
+msgid "Open Mapillary filter dialog"
+msgstr ""
+
+msgid "Downloaded images"
+msgstr ""
+
+msgid "Only images with signs"
+msgstr ""
+
+msgid "Choose signs"
+msgstr ""
+
+msgid "Mapillary history"
+msgstr ""
+
+msgid "Open Mapillary history dialog"
+msgstr ""
+
+msgid "Open Mapillary window"
+msgstr ""
+
+msgid "Mapillary dialog"
+msgstr ""
+
+msgid "Open Mapillary main dialog"
+msgstr ""
+
+msgid "Next picture"
+msgstr ""
+
+msgid "Shows the next picture in the sequence"
+msgstr ""
+
+msgid "Previous picture"
+msgstr ""
+
+msgid "Shows the previous picture in the sequence"
+msgstr ""
+
+msgid "Jump to red"
+msgstr ""
+
+msgid "Jumps to the picture at the other side of the red line"
+msgstr ""
+
+msgid "Jump to blue"
+msgstr ""
+
+msgid "Jumps to the picture at the other side of the blue line"
+msgstr ""
+
+msgid "Stops the walk."
+msgstr ""
+
+msgid "Play"
+msgstr ""
+
+msgid "Continues with the paused walk."
+msgstr ""
+
+msgid "Pause"
+msgstr ""
+
+msgid "Pauses the walk."
+msgstr ""
+
+msgid "Reverse buttons position when displaying images."
+msgstr ""
+
+msgid "Display hour when the picture was taken"
+msgstr ""
+
+msgid "Use 24 hour format"
+msgstr ""
+
+msgid "Move to picture''s location with next/previous buttons"
+msgstr ""
+
+msgid "Download mode: "
+msgstr ""
+
+msgid "Upload selected sequence"
+msgstr ""
+
+msgid "Delete after upload"
+msgstr ""
+
+msgid "Wait for full quality pictures"
+msgstr ""
+
+msgid "Follow selected image"
+msgstr ""
+
+msgid "Go forward"
+msgstr ""
+
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
+msgstr ""
+
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
+msgstr ""
+
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
+msgstr ""
+
+msgid "Downloading"
+msgstr ""
+
+msgid "Select mode"
+msgstr ""
+
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
+msgstr ""
+
+msgid "Downloading Mapillary images"
+msgstr ""
+
+msgid "Total Mapillary images: {0}"
+msgstr ""
+
+msgid "No images found"
+msgstr ""
+
+msgid "Finished upload"
+msgstr ""
+
+msgid "Uploading: {0}"
+msgstr ""
+
+msgid "Measured values"
+msgstr ""
+
+msgid "Open the measurement window."
+msgstr ""
+
+msgid "Reset current measurement results and delete measurement path."
+msgstr ""
+
+msgid "Path Length"
+msgstr ""
+
+msgid "Selection Length"
+msgstr ""
+
+msgid "Selection Area"
+msgstr ""
+
+msgid "Selection Radius"
+msgstr ""
+
+msgid "Angle"
+msgstr ""
+
+msgid "Angle between two selected Nodes"
+msgstr ""
+
+msgid "Layer to make measurements"
+msgstr ""
+
+msgid "measurement mode"
+msgstr ""
+
+msgid "Measurements"
+msgstr ""
+
+msgid "Merge overlap"
+msgstr ""
+
+msgid "Merge overlap of ways."
+msgstr ""
+
+msgid "Merge Overlap (combine)"
+msgstr ""
+
+msgid ""
+"<html>A role based relation membership was copied to all new ways.<br>You "
+"should verify this and correct it when necessary.</html>"
+msgstr ""
+
+msgid ""
+"<html>A relation membership was copied to all new ways.<br>You should verify "
+"this and correct it when necessary.</html>"
+msgstr ""
+
+msgid "Split way"
+msgstr ""
+
+msgid "Michigan Left"
+msgstr ""
+
+msgid "Adds no left turn for sets of 4 or 5 ways."
+msgstr ""
+
+msgid "Please select 4 or 5 ways to assign no left turns."
+msgstr ""
+
+msgid "Please select 4 ways that form a closed relation."
+msgstr ""
+
+msgid "Unable to order the ways. Please verify their directions"
+msgstr ""
+
+msgid "Create Michigan left turn restriction"
+msgstr ""
+
+msgid "Unable to find via nodes. Please check your selection"
+msgstr ""
+
+msgid "About Plugin"
+msgstr ""
+
+msgid "Native password manager plugin"
+msgstr ""
+
+msgid "No native password manager could be found!"
+msgstr ""
+
+msgid ""
+"Depending on your Operating System / Distribution, you may have to create a "
+"default keyring / wallet first."
+msgstr ""
+
+msgid "No thanks, use JOSM''s plain text preferences storage"
+msgstr ""
+
+msgid ""
+"Found sensitive data that is still saved in JOSM''s preference file (plain "
+"text)."
+msgstr ""
+
+msgid "Transfer to password manager and remove from preference file"
+msgstr ""
+
+msgid "No, just keep it"
+msgstr ""
+
+msgid "Close the dialog and discard all changes"
+msgstr ""
+
+msgid "Proceed and go to the next page"
+msgstr ""
+
+msgid "Finish"
+msgstr ""
+
+msgid "Confirm the setup and close this dialog"
+msgstr ""
+
+msgid "JOSM/OSM API/Username"
+msgstr ""
+
+msgid "JOSM/OSM API/Password"
+msgstr ""
+
+msgid "{0}/Username"
+msgstr ""
+
+msgid "{0}/Password"
+msgstr ""
+
+msgid "JOSM/Proxy/Username"
+msgstr ""
+
+msgid "JOSM/Proxy/Password"
+msgstr ""
+
+msgid "JOSM/OAuth/OSM API/Key"
+msgstr ""
+
+msgid "JOSM/OAuth/OSM API/Secret"
+msgstr ""
+
+msgid "Native Password Manager Plugin"
+msgstr ""
+
+msgid "The username and password is protected by {0}."
+msgstr ""
+
+msgid "username"
+msgstr ""
+
+msgid "password"
+msgstr ""
+
+msgid "proxy username"
+msgstr ""
+
+msgid "proxy password"
+msgstr ""
+
+msgid "oauth key"
+msgstr ""
+
+msgid "oauth secret"
+msgstr ""
+
+msgid ""
+"<br><strong>Warning:</strong> There may be sensitive data left in your "
+"preference file. ({0})"
+msgstr ""
+
+msgid "Save user and password ({0})"
+msgstr ""
+
+msgid "Plain text, JOSM default"
+msgstr ""
+
+msgid "Use {0}"
+msgstr ""
+
+msgid "Encrypt data with Windows logon credentials"
+msgstr ""
+
+msgid "The native password manager plugin detected {0} on your system."
+msgstr ""
+
+msgid "Days without mapping: {0}."
+msgstr ""
+
+msgid ""
+"(To miserably continue mapping, edit out no_more_mapping\n"
+"from {0})"
+msgstr ""
+
+msgid "Split by municipality"
+msgstr ""
+
+msgid "Split this data by municipality (admin_level=8)."
+msgstr ""
+
+msgid "Split by sector"
+msgstr ""
+
+msgid "Split this data by sector (admin_level=10)."
+msgstr ""
+
+msgid "Split by neighbourhood"
+msgstr ""
+
+msgid "Split this data by neighbourhood (admin_level=11)."
+msgstr ""
+
+msgid "Download open data"
+msgstr ""
+
+msgid "License URL not available: {0}"
+msgstr ""
+
+msgid "OpenData preferences"
+msgstr ""
+
+msgid "License Agreement"
+msgstr ""
+
+msgid "Accept"
+msgstr ""
+
+msgid "Refuse"
+msgstr ""
+
+msgid "I understand and accept these terms and conditions"
+msgstr ""
+
+msgid "View the full text of this license"
+msgstr ""
+
+msgid "I refuse these terms and conditions. Cancel download."
+msgstr ""
+
+msgid "Module bundled with opendata plugin"
+msgstr ""
+
+msgid ""
+"Please click on <strong>Download list</strong> to download and display a "
+"list of available modules."
+msgstr ""
+
+msgid ""
+"The following module has been downloaded <strong>successfully</strong>:"
+msgid_plural ""
+"The following {0} modules have been downloaded <strong>successfully</strong>:"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Downloading the following module has <strong>failed</strong>:"
+msgid_plural ""
+"Downloading the following {0} modules has <strong>failed</strong>:"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Modules"
+msgstr ""
+
+msgid "Accept the new module sites and close the dialog"
+msgstr ""
+
+msgid "Configure Module Sites"
+msgstr ""
+
+msgid "Download the list of available modules"
+msgstr ""
+
+msgid "Update modules"
+msgstr ""
+
+msgid "Update the selected modules"
+msgstr ""
+
+msgid "Please restart JOSM to activate the downloaded modules."
+msgstr ""
+
+msgid ""
+"All installed modules are up to date. JOSM does not have to download newer "
+"versions."
+msgstr ""
+
+msgid "Modules up to date"
+msgstr ""
+
+msgid "Configure the list of sites where modules are downloaded from"
+msgstr ""
+
+msgid "Add Open Data Module description URL."
+msgstr ""
+
+msgid "Edit Open Data Module description URL."
+msgstr ""
+
+msgid "Open Data Module description URL"
+msgstr ""
+
+msgid "Download OSM data corresponding to the current data set."
+msgstr ""
+
+msgid "Diff"
+msgstr ""
+
+msgid "Perform diff between current data set and existing OSM data."
+msgstr ""
+
+msgid "Tools"
+msgstr ""
+
+msgid "Open tools menu for this data."
+msgstr ""
+
+msgid "Open the OpenData window."
+msgstr ""
+
+msgid "Raw data"
+msgstr ""
+
+msgid "OpenData Preferences"
+msgstr ""
+
+msgid ""
+"A special handler for various Open Data portals<br/><br/>Please read the "
+"Terms and Conditions of Use of each portal<br/>before any upload of data "
+"loaded by this plugin."
+msgstr ""
+
+msgid "General settings"
+msgstr ""
+
+msgid ""
+"Import only raw data (i.e. do not add/delete tags or replace them by "
+"standard OSM tags)"
+msgstr ""
+
+msgid "Overpass API server:"
+msgstr ""
+
+msgid "Overpass API server used to download OSM data"
+msgstr ""
+
+msgid "XAPI server:"
+msgstr ""
+
+msgid ""
+"XAPI server used to download OSM data when Overpass API is not available"
+msgstr ""
+
+msgid "Download modules"
+msgstr ""
+
+msgid "View summary"
+msgstr ""
+
+msgid "View full text"
+msgstr ""
+
+msgid ""
+"''Lambert CC 9 zones'' coordinates found with different zone codes for X and "
+"Y: "
+msgstr ""
+
+msgid "Downloading data..."
+msgstr ""
+
+msgid "OpenData XML files"
+msgstr ""
+
+msgid "File to load"
+msgstr ""
+
+msgid "7Zip Files"
+msgstr ""
+
+msgid "Reading 7Zip file..."
+msgstr ""
+
+msgid "Zip Files"
+msgstr ""
+
+msgid "Reading Zip file..."
+msgstr ""
+
+msgid "Cannot transform to WGS84"
+msgstr ""
+
+msgid ""
+"JOSM was unable to find a strict mathematical transformation between ''{0}'' "
+"and WGS84.<br /><br />Do you want to try a <i>lenient</i> method, which will "
+"perform a non-precise transformation (<b>with location errors up to 1 "
+"km</b>) ?<br/><br/>If so, <b>do NOT upload</b> such data to OSM !"
+msgstr ""
+
+msgid "Try lenient method"
+msgstr ""
+
+msgid "GML files"
+msgstr ""
+
+msgid "KML/KMZ files"
+msgstr ""
+
+msgid "MapInfo files"
+msgstr ""
+
+msgid "Shapefiles"
+msgstr ""
+
+msgid ""
+"Unable to detect Coordinate Reference System.\n"
+"Would you like to fallback to ESPG:4326 (WGS 84) ?"
+msgstr ""
+
+msgid "Warning: CRS not found"
+msgstr ""
+
+msgid "Unable to detect CRS !"
+msgstr ""
+
+msgid "Unable to find a data store for file {0}"
+msgstr ""
+
+msgid "Loading shapefile ({0} features)"
+msgstr ""
+
+msgid "CSV files"
+msgstr ""
+
+msgid "ODS files"
+msgstr ""
+
+msgid "No valid coordinates have been found."
+msgstr ""
+
+msgid "Invalid file. Bad length on line {0}. Expected {1} columns, got {2}."
+msgstr ""
+
+msgid "XLS files"
+msgstr ""
+
+msgid "View OSM Wiki page"
+msgstr ""
+
+msgid "Launch browser to the OSM Wiki page of the selected data set"
+msgstr ""
+
+msgid "View Local Portal page"
+msgstr ""
+
+msgid "Launch browser to the local portal page of the selected data set"
+msgstr ""
+
+msgid "View National Portal page"
+msgstr ""
+
+msgid "Launch browser to the national portal page of the selected data set"
+msgstr ""
+
+msgid "View License"
+msgstr ""
+
+msgid "Launch browser to the license page of the selected data set"
+msgstr ""
+
+msgid "View License (summary)"
+msgstr ""
+
+msgid "Launch browser to the summary license page of the selected data set"
+msgstr ""
+
+msgid "View the license of the selected data set"
+msgstr ""
+
+msgid ""
+"Warning: Cannot download module ''{0}''. Its download link is not known. "
+"Skipping download."
+msgstr ""
+
+msgid ""
+"Warning: Cannot download module ''{0}''. Its download link ''{1}'' is not a "
+"valid URL. Skipping download."
+msgstr ""
+
+msgid "Downloading Module {0}..."
+msgstr ""
+
+msgid "An error occurred in module {0}"
+msgstr ""
+
+msgid "Last module update more than {0} days ago."
+msgstr ""
+
+msgid "Click to update the activated modules"
+msgstr ""
+
+msgid "Click to skip updating the activated modules"
+msgstr ""
+
+msgid ""
+"Skipping module update after elapsed update interval. Automatic update at "
+"startup is disabled."
+msgstr ""
+
+msgid ""
+"Running module update after elapsed update interval. Automatic update at "
+"startup is disabled."
+msgstr ""
+
+msgid "Could not load module {0}. Delete from preferences?"
+msgstr ""
+
+msgid "loading module ''{0}'' (version {1})"
+msgstr ""
+
+msgid ""
+"<html>Could not load module {0} because the module<br>main class ''{1}'' was "
+"not found.<br>Delete from preferences?</html>"
+msgstr ""
+
+msgid "Loading modules ..."
+msgstr ""
+
+msgid "Checking module preconditions..."
+msgstr ""
+
+msgid "Loading module ''{0}''..."
+msgstr ""
+
+msgid "JOSM could not find information about the following module:"
+msgid_plural "JOSM could not find information about the following modules:"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "The module is not going to be loaded."
+msgid_plural "The modules are not going to be loaded."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Updating the following module has failed:"
+msgid_plural "Updating the following modules has failed:"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Module update failed"
+msgstr ""
+
+msgid "Warning: failed to download module information list"
+msgstr ""
+
+msgid "Disable module"
+msgstr ""
+
+msgid "Click to delete the module ''{0}''"
+msgstr ""
+
+msgid "Keep module"
+msgstr ""
+
+msgid "Click to keep the module ''{0}''"
+msgstr ""
+
+msgid "Warning: failed to delete outdated module ''{0}''."
+msgstr ""
+
+msgid ""
+"Warning: failed to install already downloaded module ''{0}''. Skipping "
+"installation. JOSM is still going to load the old module version."
+msgstr ""
+
+msgid ""
+"Warning: failed to install module ''{0}'' from temporary download file "
+"''{1}''. Renaming failed."
+msgstr ""
+
+msgid ""
+"Do not ask again and remember my decision (go to Preferences->Modules to "
+"change it later)"
+msgstr ""
+
+msgid "The module file ''{0}'' does not include a Manifest."
+msgstr ""
+
+msgid "Invalid URL ''{0}'' in module {1}"
+msgstr ""
+
+msgid "<b>Module provided by an external source:</b> {0}"
+msgstr ""
+
+msgid "Failed to create module information from manifest for module ''{0}''"
+msgstr ""
+
+msgid "Illegal entry in module list."
+msgstr ""
+
+msgid "Reading local module information.."
+msgstr ""
+
+msgid "Processing module site cache files..."
+msgstr ""
+
+msgid ""
+"Warning: Failed to scan file ''{0}'' for module information. Skipping."
+msgstr ""
+
+msgid "Processing module site cache icon files..."
+msgstr ""
+
+msgid "Processing module files..."
+msgstr ""
+
+msgid "Download module list..."
+msgstr ""
+
+msgid "Downloading module list from ''{0}''"
+msgstr ""
+
+msgid ""
+"Warning: failed to create module directory ''{0}''. Cannot cache module list "
+"from module site ''{1}''."
+msgstr ""
+
+msgid "Writing module list to local cache ''{0}''"
+msgstr ""
+
+msgid "Parsing module list from site ''{0}''"
+msgstr ""
+
+msgid ""
+"Failed to parse module list document from site ''{0}''. Skipping site. "
+"Exception was: {1}"
+msgstr ""
+
+msgid "Processing module list from site ''{0}''"
+msgstr ""
+
+msgid "Open Visible..."
+msgstr ""
+
+msgid "Open only files that are visible in current view."
+msgstr ""
+
+msgid "No view open - cannot determine boundaries!"
+msgstr ""
+
+msgid "Unknown file extension: {0}"
+msgstr ""
+
+msgid "Parsing file \"{0}\" failed"
+msgstr ""
+
+msgid "Osmarender"
+msgstr ""
+
+msgid ""
+"Firefox not found. Please set firefox executable in the Map Settings page of "
+"the preferences."
+msgstr ""
+
+msgid "Firefox executable"
+msgstr ""
+
+msgid "OSM Server Files pbf compressed"
+msgstr ""
+
+msgid "Download PBF"
+msgstr ""
+
+msgid "Invalid changeset id: {0}"
+msgstr ""
+
+msgid "Invalid timestamp: {0}"
+msgstr ""
+
+msgid "Invalid DenseNodes key/values table"
+msgstr ""
+
+msgid "Reading OSM data..."
+msgstr ""
+
+msgid "Transform error: Min X must be smaller than max"
+msgstr ""
+
+msgid "Transform error: Min Y must be smaller than max"
+msgstr ""
+
+msgid "Transform error: Points too close"
+msgstr ""
+
+msgid "Transform error: Unsupported variant."
+msgstr ""
+
+msgid "Transform error: Unsupported orientation"
+msgstr ""
+
+msgid "Finished"
+msgstr ""
+
+msgid "Prefs"
+msgstr ""
+
+msgid "Load file..."
+msgstr ""
+
+msgid "Place"
+msgstr ""
+
+msgid "Show target"
+msgstr ""
+
+msgid "Take X and Y from selected node"
+msgstr ""
+
+msgid "Debug info"
+msgstr ""
+
+msgid "Merge close nodes"
+msgstr ""
+
+msgid "Remove objects smaller than"
+msgstr ""
+
+msgid "Remove objects larger than"
+msgstr ""
+
+msgid "Only this color"
+msgstr ""
+
+msgid "Remove parallel lines"
+msgstr ""
+
+msgid "Take only first X paths"
+msgstr ""
+
+msgid "Color/width change"
+msgstr ""
+
+msgid "Shape closed"
+msgstr ""
+
+msgid "Single segments"
+msgstr ""
+
+msgid "Orthogonal shapes"
+msgstr ""
+
+msgid "Import settings"
+msgstr ""
+
+msgid "Introduce separate layers for:"
+msgstr ""
+
+msgid "Bind to coordinates"
+msgstr ""
+
+msgid "Projection:"
+msgstr ""
+
+msgid "Bottom left (min) corner:"
+msgstr ""
+
+msgid "PDF X and Y"
+msgstr ""
+
+msgid "East and North"
+msgstr ""
+
+msgid "Top right (max) corner:"
+msgstr ""
+
+msgid "Projection Preferences"
+msgstr ""
+
+msgid "Close the dialog and apply projection preferences"
+msgstr ""
+
+msgid "Close the dialog, discard projection preference changes"
+msgstr ""
+
+msgid "Loading..."
+msgstr ""
+
+msgid "PDF file preview"
+msgstr ""
+
+msgid "Loaded"
+msgstr ""
+
+msgid "Imported PDF: "
+msgstr ""
+
+msgid "Please select exactly one node."
+msgstr ""
+
+msgid "PDF files"
+msgstr ""
+
+msgid "OSM files"
+msgstr ""
+
+msgid "Preparing"
+msgstr ""
+
+msgid "Tolerance is not a number"
+msgstr ""
+
+msgid "Could not parse color"
+msgstr ""
+
+msgid "Could not parse max path count"
+msgstr ""
+
+msgid "Parsing file"
+msgstr ""
+
+msgid "File not found."
+msgstr ""
+
+msgid "Error while parsing: {0}"
+msgstr ""
+
+msgid "Removing parallel segments"
+msgstr ""
+
+msgid "Max distance is not a number"
+msgstr ""
+
+msgid "Joining nodes"
+msgstr ""
+
+msgid "Joining adjacent segments"
+msgstr ""
+
+msgid "Removing small objects"
+msgstr ""
+
+msgid "Removing large objects"
+msgstr ""
+
+msgid "Finalizing layers"
+msgstr ""
+
+msgid "Please set a projection."
+msgstr ""
+
+msgid "Could not parse numbers. Please check."
+msgstr ""
+
+msgid "Building JOSM layer"
+msgstr ""
+
+msgid "Postprocessing layer"
+msgstr ""
+
+msgid "Saving to file."
+msgstr ""
+
+msgid " Writing to file"
+msgstr ""
+
+msgid "Building JOSM layer."
+msgstr ""
+
+msgid " "
+msgstr ""
+
+msgid "Import PDF file"
+msgstr ""
+
+msgid "Import PDF file."
+msgstr ""
+
+msgid "Import PDF"
+msgstr ""
+
+msgid " {0} objects so far"
+msgstr ""
+
+msgid "Parsing PDF"
+msgstr ""
+
+msgid "Encrypted documents not supported."
+msgstr ""
+
+msgid "The PDF file must have exactly one page."
+msgstr ""
+
+msgid "Read error: "
+msgstr ""
+
+msgid "Write error: "
+msgstr ""
+
+msgid "Write coordinates to image header"
+msgstr ""
+
+msgid ""
+"Write position information into the exif header of the following files:"
+msgstr ""
+
+msgid "settings"
+msgstr ""
+
+msgid "keep backup files"
+msgstr ""
+
+msgid "change file modification time:"
+msgstr ""
+
+msgid "to gps time"
+msgstr ""
+
+msgid "to previous value (unchanged mtime)"
+msgstr ""
+
+msgid "Photo Geotagging Plugin"
+msgstr ""
+
+msgid "Writing position information to image files..."
+msgstr ""
+
+msgid "Could not read mtime."
+msgstr ""
+
+msgid "Could not write mtime."
+msgstr ""
+
+msgid "File could not be deleted!"
+msgstr ""
+
+msgid "Could not rename file!"
+msgstr ""
+
+msgid "Could not rename file {0} to {1}!"
+msgstr ""
+
+msgid "<html><h3>There are old backup files in the image directory!</h3>"
+msgstr ""
+
+msgid "Override old backup files?"
+msgstr ""
+
+msgid "Keep old backups and continue"
+msgstr ""
+
+msgid "Override"
+msgstr ""
+
+msgid "Could not delete temporary file!"
+msgstr ""
+
+msgid "Test failed: Could not read mtime."
+msgstr ""
+
+msgid "Test failed: Could not write mtime."
+msgstr ""
+
+msgid "Adjust photos"
+msgstr ""
+
+msgid "Move and position photos"
+msgstr ""
+
+msgid ""
+"Click+drag photo, shift+click to position photo, control+click to set "
+"direction."
+msgstr ""
+
+msgid "Please load some photos."
+msgstr ""
+
+msgid "New layer for untagged images"
+msgstr ""
+
+msgid "Untagged Images"
+msgstr ""
+
+msgid "Do you want to save current calibration of layer {0}?"
+msgstr ""
+
+msgid "Load Picture Calibration..."
+msgstr ""
+
+msgid "Loads calibration data from a file"
+msgstr ""
+
+msgid "Loading file failed: {0}"
+msgstr ""
+
+msgid "Load World File Calibration..."
+msgstr ""
+
+msgid "Loads calibration data from a world file"
+msgstr ""
+
+msgid "Reset Calibration"
+msgstr ""
+
+msgid "Reset calibration"
+msgstr ""
+
+msgid "Calibration reset"
+msgstr ""
+
+msgid "Save Picture Calibration..."
+msgstr ""
+
+msgid "Saves calibration data to a file"
+msgstr ""
+
+msgid "Saving file failed: {0}"
+msgstr ""
+
+msgid "New picture layer from clipboard"
+msgstr ""
+
+msgid "Supported image files, *.zip, *.kml"
+msgstr ""
+
+msgid "New picture layer from file..."
+msgstr ""
+
+msgid ""
+"KML calibration is in beta stage and may produce incorrectly calibrated "
+"layers!\n"
+"Please use {0} to upload your KMLs that were calibrated incorrectly."
+msgstr ""
+
+msgid "PicLayer move"
+msgstr ""
+
+msgid "Moved"
+msgstr ""
+
+msgid "Drag to move the picture"
+msgstr ""
+
+msgid "PicLayer rotate"
+msgstr ""
+
+msgid "Rotated"
+msgstr ""
+
+msgid "Drag to rotate the picture"
+msgstr ""
+
+msgid "PicLayer scale X"
+msgstr ""
+
+msgid "Scaled by X"
+msgstr ""
+
+msgid "Drag to scale the picture in the X Axis"
+msgstr ""
+
+msgid "PicLayer scale"
+msgstr ""
+
+msgid "Scaled"
+msgstr ""
+
+msgid "Drag to scale the picture in the X and Y Axis"
+msgstr ""
+
+msgid "PicLayer scale Y"
+msgstr ""
+
+msgid "Scaled by Y"
+msgstr ""
+
+msgid "Drag to scale the picture in the Y Axis"
+msgstr ""
+
+msgid "PicLayer shear"
+msgstr ""
+
+msgid "Sheared"
+msgstr ""
+
+msgid "Drag to shear the picture"
+msgstr ""
+
+msgid "PicLayer Move point"
+msgstr ""
+
+msgid "Point added/moved"
+msgstr ""
+
+msgid "Drag or create point on the picture"
+msgstr ""
+
+msgid "PicLayer Remove point"
+msgstr ""
+
+msgid "Point removed"
+msgstr ""
+
+msgid "Remove point on the picture"
+msgstr ""
+
+msgid "PicLayer Transform point"
+msgstr ""
+
+msgid "Point transformed"
+msgstr ""
+
+msgid "Transform point on the picture"
+msgstr ""
+
+msgid "PicLayer: {0}"
+msgstr ""
+
+msgid "Calibration Files"
+msgstr ""
+
+msgid "Could not find the map object."
+msgstr ""
+
+msgid "PicLayer failed to load or import the image."
+msgstr ""
+
+msgid "Nothing in clipboard"
+msgstr ""
+
+msgid "The clipboard data is not an image"
+msgstr ""
+
+msgid "Warning: failed to handle zip file ''{0}''. Exception was: {1}"
+msgstr ""
+
+msgid "A calibration file associated to the picture file was found: {0}\n"
+msgstr ""
+
+msgid ""
+"Set \"{0}\" to yes/no/ask in the preferences\n"
+"to control the autoloading of calibration files."
+msgstr ""
+
+msgid "Do you want to apply it ?"
+msgstr ""
+
+msgid "Load calibration file ?"
+msgstr ""
+
+msgid "It will be applied automatically."
+msgstr ""
+
+msgid ""
+"Also, from now on, calibration files will always be loaded automatically."
+msgstr ""
+
+msgid "Point info"
+msgstr ""
+
+msgid "Point info."
+msgstr ""
+
+msgid "Connecting server"
+msgstr ""
+
+msgid "PointInfo"
+msgstr ""
+
+msgid "Data not available."
+msgstr ""
+
+msgid "Add new address point"
+msgstr ""
+
+msgid "Tags copied to clipboard."
+msgstr ""
+
+msgid "New address point added."
+msgstr ""
+
+msgid "Download Osmosis poly"
+msgstr ""
+
+msgid "Reading polygon filter file..."
+msgstr ""
+
+msgid "Error reading poly file: {0}"
+msgstr ""
+
+msgid "The file must begin with a polygon name"
+msgstr ""
+
+msgid "There are less than 2 points in an area"
+msgstr ""
+
+msgid "A polygon coordinate line must contain exactly 2 numbers"
+msgstr ""
+
+msgid "Unable to parse {0} as a number"
+msgstr ""
+
+msgid "Invalid coordinates were found: {0}, {1}"
+msgstr ""
+
+msgid "{0} points were outside world bounds and were moved"
+msgstr ""
+
+msgid "Osmosis polygon filter files"
+msgstr ""
+
+msgid "Print..."
+msgstr ""
+
+msgid "Print the map"
+msgstr ""
+
+msgid "Print the Map"
+msgstr ""
+
+msgid "Printer"
+msgstr ""
+
+msgid "Media"
+msgstr ""
+
+msgid "Orientation"
+msgstr ""
+
+msgid "Printer settings"
+msgstr ""
+
+msgid "Scale"
+msgstr ""
+
+msgid "Resolution"
+msgstr ""
+
+msgid "Map information"
+msgstr ""
+
+msgid "Map Preview"
+msgstr ""
+
+msgid "Zoom To Page"
+msgstr ""
+
+msgid "Zoom To Actual Size"
+msgstr ""
+
+msgid "Print"
+msgstr ""
+
+msgid "Printing has been cancelled."
+msgstr ""
+
+msgid "Printing stopped"
+msgstr ""
+
+msgid "Printing has failed."
+msgstr ""
+
+msgid "Proj4J: {0} selected"
+msgstr ""
+
+msgid "Selected: {0}"
+msgstr ""
+
+msgid "Proj4J Plugin"
+msgstr ""
+
+msgid "Code"
+msgstr ""
+
+msgid "added"
+msgstr ""
+
+msgid "Public Transport: Enable GTFSStops"
+msgstr ""
+
+msgid "Public Transport: Catch GTFS stops"
+msgstr ""
+
+msgid "skipped"
+msgstr ""
+
+msgid "Public Transport: Disable GTFS"
+msgstr ""
+
+msgid "Create Stops from GTFS ..."
+msgstr ""
+
+msgid "Create Stops from a GTFS file"
+msgstr ""
+
+msgid "Select GTFS file (stops.txt)"
+msgstr ""
+
+msgid "File \"{0}\" does not exist"
+msgstr ""
+
+msgid "IOException \"{0}\" occurred"
+msgstr ""
+
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
+msgstr ""
+
+msgid "No data found"
+msgstr ""
+
+msgid "The GTFS file was empty."
+msgstr ""
+
+msgid "Create Stops from GTFS"
+msgstr ""
+
+msgid "GTFS-Stops"
+msgstr ""
+
+msgid "Type of stops to add"
+msgstr ""
+
+msgid "Time on your GPS device"
+msgstr ""
+
+msgid "HH:MM:SS.sss"
+msgstr ""
+
+msgid "Time on your stopwatch"
+msgstr ""
+
+msgid "Time window"
+msgstr ""
+
+msgid "seconds"
+msgstr ""
+
+msgid "Move Threshold"
+msgstr ""
+
+msgid "Suggest Stops"
+msgstr ""
+
+msgid "Find"
+msgstr ""
+
+msgid "Show"
+msgstr ""
+
+msgid "Mark"
+msgstr ""
+
+msgid "Catch"
+msgstr ""
+
+msgid "Join"
+msgstr ""
+
+msgid "Enable"
+msgstr ""
+
+msgid "Can''t parse a time from this string."
+msgstr ""
+
+msgid "Invalid value"
+msgstr ""
+
+msgid "moved"
+msgstr ""
+
+msgid "Public Transport: Join GTFS stops"
+msgstr ""
+
+msgid "Id"
+msgstr ""
+
+msgid "State"
+msgstr ""
+
+msgid "pending"
+msgstr ""
+
+msgid "outside"
+msgstr ""
+
+msgid "[incomplete]"
+msgstr ""
+
+msgid "[empty way]"
+msgstr ""
+
+msgid "[ID] {0}"
+msgstr ""
+
+msgid "[gap]"
+msgstr ""
+
+msgid " [ID] {0}"
+msgstr ""
+
+msgid "Route patterns ..."
+msgstr ""
+
+msgid "Edit Route patterns for public transport"
+msgstr ""
+
+msgid "Route Patterns"
+msgstr ""
+
+msgid "Overview"
+msgstr ""
+
+msgid "Itinerary"
+msgstr ""
+
+msgid "Stops"
+msgstr ""
+
+msgid "Meta"
+msgstr ""
+
+msgid "Existing route patterns:"
+msgstr ""
+
+msgid "Reflect"
+msgstr ""
+
+msgid "Required tags:"
+msgstr ""
+
+msgid "Common tags:"
+msgstr ""
+
+msgid "Additional tags:"
+msgstr ""
+
+msgid "Add a new Tag"
+msgstr ""
+
+msgid "Name/Id"
+msgstr ""
+
+msgid "Ref"
+msgstr ""
+
+msgid "Stops are possible on the"
+msgstr ""
+
+msgid "right hand side"
+msgstr ""
+
+msgid "left hand side"
+msgstr ""
+
+msgid "Maximum distance from route"
+msgstr ""
+
+msgid "Public Transport: Change stop type"
+msgstr ""
+
+msgid "Create Stops from GPX ..."
+msgstr ""
+
+msgid "Create Stops from a GPX file"
+msgstr ""
+
+msgid "Select GPX file"
+msgstr ""
+
+msgid "The GPX file contained no tracks or waypoints."
+msgstr ""
+
+msgid "Create Stops from GPX"
+msgstr ""
+
+msgid "Tracks in this GPX file:"
+msgstr ""
+
+msgid "Detach"
+msgstr ""
+
+msgid "implicit"
+msgstr ""
+
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
+msgstr ""
+
+msgid "GPX File Trouble"
+msgstr ""
+
+msgid "unnamed"
+msgstr ""
+
+msgid "Public Transport: Add track stop"
+msgstr ""
+
+msgid "Public Transport: Delete track stop"
+msgstr ""
+
+msgid "Public Transport: Detach track stop list"
+msgstr ""
+
+msgid "Public Transport: Edit track stop list"
+msgstr ""
+
+msgid "Public Transport: Relocate nodes in track stoplist"
+msgstr ""
+
+msgid "Public Transport: sort track stop list"
+msgstr ""
+
+msgid "Public Transport: Suggest stops"
+msgstr ""
+
+msgid "Stopname"
+msgstr ""
+
+msgid "Public Transport: Detach waypoints"
+msgstr ""
+
+msgid "Public Transport: Disable waypoints"
+msgstr ""
+
+msgid "Public Transport: Enable waypoints"
+msgstr ""
+
+msgid "Public Transport: Edit waypoint name"
+msgstr ""
+
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
+msgid "Relation Toolbox"
+msgstr ""
+
+msgid "Open relation/multipolygon editor panel"
+msgstr ""
+
+msgid "Specify role"
+msgstr ""
+
+msgid "Change relation member roles to {0}"
+msgstr ""
+
+msgid "Create administrative boundary relations"
+msgstr ""
+
+msgid "Add tags boundary and admin_level to boundary relation ways"
+msgstr ""
+
+msgid "Move area tags from contour to relation"
+msgstr ""
+
+msgid "When moving tags, consider even non-repeating ones"
+msgstr ""
+
+msgid "Always split ways of neighbouring multipolygons"
+msgstr ""
+
+msgid "Change role"
+msgstr ""
+
+msgid "Enter role for selected members"
+msgstr ""
+
+msgid "Relation Toolbox: {0}"
+msgstr ""
+
+msgid "another..."
+msgstr ""
+
+msgid "Add/remove members from the chosen relation"
+msgstr ""
+
+msgid "Clear the chosen relation"
+msgstr ""
+
+msgid "Create a multipolygon from selected objects"
+msgstr ""
+
+msgid "Create multipolygons from rings"
+msgstr ""
+
+msgid "Move tags from ways to relation"
+msgstr ""
+
+msgid "Enter admin level and name for the border relation:"
+msgstr ""
+
+msgid "Admin level"
+msgstr ""
+
+msgid "Create a relation from selected objects"
+msgstr ""
+
+msgid "Choose a type for the relation:"
+msgstr ""
+
+msgid "Delete relation"
+msgstr ""
+
+msgid "Download incomplete members for the chosen relation"
+msgstr ""
+
+msgid "Download referrers"
+msgstr ""
+
+msgid "Download referrers for the chosen relation and its members."
+msgstr ""
+
+msgid "Duplicate relation"
+msgstr ""
+
+msgid "Open relation editor for the chosen relation"
+msgstr ""
+
+msgid "Find a relation"
+msgstr ""
+
+msgid "Reconstruct polygon"
+msgstr ""
+
+msgid "Multipolygon must consist only of ways"
+msgstr ""
+
+msgid "Reconstruction of polygons can be done only from outer ways"
+msgstr ""
+
+msgid "Reconstruct polygons from relation {0}"
+msgstr ""
+
+msgid "Reconstruct route"
+msgstr ""
+
+msgid "Open relation wiki page"
+msgstr ""
+
+msgid "Select relation in main selection."
+msgstr ""
+
+msgid "Fix roles of the chosen relation members"
+msgstr ""
+
+msgid "Complete multipolygon for way {0}"
+msgstr ""
+
+msgid "Node without ''house'' role found"
+msgstr ""
+
+msgid "Way without ''house'' or ''street'' role found"
+msgstr ""
+
+msgid "Relation without ''house'' role found"
+msgstr ""
+
+msgid "Relation does not have name"
+msgstr ""
+
+msgid "Relation has streets with different names"
+msgstr ""
+
+msgid "fix associatedStreet relation"
+msgstr ""
+
+msgid "Relation without ''subarea'' role found"
+msgstr ""
+
+msgid "Node without ''label'' or ''admin_centre'' role found"
+msgstr ""
+
+msgid "Way without ''inner'' or ''outer'' role found"
+msgstr ""
+
+msgid "Node without ''stop'' or ''platform'' role found"
+msgstr ""
+
+msgid "Way platform without ''platform'' role found"
+msgstr ""
+
+msgid "Revert changeset fully"
+msgstr ""
+
+msgid "Revert selection only"
+msgstr ""
+
+msgid "Revert selection and restore deleted objects"
+msgstr ""
+
+msgid "Revert changeset"
+msgstr ""
+
+msgid "Revert"
+msgstr ""
+
+msgid "Enter the ID of the changeset that should be reverted"
+msgstr ""
+
+msgid "Reverted changeset"
+msgstr ""
+
+msgid "It is not allowed to revert changeset from {0}"
+msgstr ""
+
+msgid "Downloading objects history"
+msgstr ""
+
+msgid "Missing merge target for {0} with id {1}"
+msgstr ""
+
+msgid "Objects history"
+msgstr ""
+
+msgid "History reverter"
+msgstr ""
+
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
+msgid "Preparing history data..."
+msgstr ""
+
+msgid "Remote Control has been asked to revert a changeset."
+msgstr ""
+
+msgid "Reverting..."
+msgstr ""
+
+msgid ""
+"This changeset has objects that are not present in current dataset.\n"
+"It is needed to download them before reverting. Do you want to continue?"
+msgstr ""
+
+msgid "Confirm"
+msgstr ""
+
+msgid "Fetching missing primitives"
+msgstr ""
+
+msgid "Downloading changeset"
+msgstr ""
+
+msgid "See {0}"
+msgstr ""
+
+msgid "Revert changeset #{0}"
+msgstr ""
+
+msgid ""
+"Warning: unsupported start element ''{0}'' in changeset content at position "
+"({1},{2}). Skipping."
+msgstr ""
+
+msgid ""
+"Warning: unsupported end element ''{0}'' in changeset content at position "
+"({1},{2}). Skipping."
+msgstr ""
+
+msgid "Road Sign Plugin"
+msgstr ""
+
+msgid "signs"
+msgstr ""
+
+msgid "Change Properties"
+msgstr ""
+
+msgid "Country preset:"
+msgstr ""
+
+msgid "Show all signs"
+msgstr ""
+
+msgid "Show a selection of the most useful signs"
+msgstr ""
+
+msgid "Belgium"
+msgstr ""
+
+msgid "Spain"
+msgstr ""
+
+msgid "Germany"
+msgstr ""
+
+msgid "Poland"
+msgstr ""
+
+msgid "Slovakia"
+msgstr ""
+
+msgid "Roadsign tagging"
+msgstr ""
+
+msgid "Add tags by clicking on road signs"
+msgstr ""
+
+msgid "Roadsigns plugin: open dialog"
+msgstr ""
+
+msgid "custom"
+msgstr ""
+
+msgid "Could not read tagging preset source: ''{0}''"
+msgstr ""
+
+msgid "Error parsing tagging preset from ''{0}'':\n"
+msgstr ""
+
+msgid "Sign {0}"
+msgstr ""
+
+msgid "Additional sign {0}"
+msgstr ""
+
+msgid "Edit relation"
+msgstr ""
+
+msgid "Edit relations"
+msgstr ""
+
+msgid "No relation is selected"
+msgstr ""
+
+msgid "Remove node ''{0}'' at position {1} from relation ''{2}''"
+msgstr ""
+
+msgid "Remove way ''{0}'' at position {1} from relation ''{2}''"
+msgstr ""
+
+msgid "Remove relation ''{0}'' at position {1} from relation ''{2}''"
+msgstr ""
+
+msgid "routing active route"
+msgstr ""
+
+msgid "routing inactive route"
+msgstr ""
+
+msgid "Routing"
+msgstr ""
+
+msgid "Click to add destination."
+msgstr ""
+
+msgid "Click and drag to move destination"
+msgstr ""
+
+msgid "Click to remove destination"
+msgstr ""
+
+msgid "Open a list of routing nodes"
+msgstr ""
+
+msgid "Add routing layer"
+msgstr ""
+
+msgid "Criteria"
+msgstr ""
+
+msgid "Shortest"
+msgstr ""
+
+msgid "Fastest"
+msgstr ""
+
+msgid "Ignore oneways"
+msgstr ""
+
+msgid "Reverse route"
+msgstr ""
+
+msgid "Clear route"
+msgstr ""
+
+msgid "Reconstruct Graph"
+msgstr ""
+
+msgid "Routing Plugin Preferences"
+msgstr ""
+
+msgid "Configure routing preferences."
+msgstr ""
+
+msgid "Speed (Km/h)"
+msgstr ""
+
+msgid "Weight"
+msgstr ""
+
+msgid "Enter weight values"
+msgstr ""
+
+msgid "New value for {0}"
+msgstr ""
+
+msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
+msgstr ""
+
+msgid "Proxy Authentication Required"
+msgstr ""
+
+msgid ""
+"<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
+"is stored in plain text in the JOSM preferences file. </p></body></html>"
+msgstr ""
+
+msgid "Enter credentials for Separate Data Store API"
+msgstr ""
+
+msgid "Please enter the user name of your SDS account"
+msgstr ""
+
+msgid "Please enter the password of your SDS account"
+msgstr ""
+
+msgid ""
+"Authenticating at the SDS API ''{0}'' failed. Please enter a valid username "
+"and a valid password."
+msgstr ""
+
+msgid "SDS data file"
+msgstr ""
+
+msgid "Load..."
+msgstr ""
+
+msgid "Load separate data store data from a file."
+msgstr ""
+
+msgid "Loading files"
+msgstr ""
+
+msgid "SDS"
+msgstr ""
+
+msgid "Information about SDS."
+msgstr ""
+
+msgid "About SDS..."
+msgstr ""
+
+msgid "Open a preferences dialog for SDS."
+msgstr ""
+
+msgid "Separate Data Store"
+msgstr ""
+
+msgid "Configures access to the Separate Data Store."
+msgstr ""
+
+msgid "Server"
+msgstr ""
+
+msgid "The URL under which the SDS server can be contacted."
+msgstr ""
+
+msgid ""
+"The user name at the SDS server. You need to create an account with the SDS "
+"admin first."
+msgstr ""
+
+msgid ""
+"The password at the SDS server. You need to create an account with the SDS "
+"admin first."
+msgstr ""
+
+msgid ""
+"Tags beginning with this prefix are never saved to OSM, but to the SDS "
+"server only."
+msgstr ""
+
+msgid "SDS server URL"
+msgstr ""
+
+msgid "SDS username"
+msgstr ""
+
+msgid "SDS password"
+msgstr ""
+
+msgid "Test credentials now"
+msgstr ""
+
+msgid "SDS tag prefix"
+msgstr ""
+
+msgid "Connection successful."
+msgstr ""
+
+msgid "Cannot connect to SDS server: "
+msgstr ""
+
+msgid "Save..."
+msgstr ""
+
+msgid "Save the current separate data store information to a file."
+msgstr ""
+
+msgid "Save SDS file"
+msgstr ""
+
+msgid "No object selected"
+msgstr ""
+
+msgid "SeaChart Editor"
+msgstr ""
+
+msgid "Seamark Inspector"
+msgstr ""
+
+msgid "Select only one object"
+msgstr ""
+
+msgid "Select a map object"
+msgstr ""
+
+msgid "Simplify Area"
+msgstr ""
+
+msgid "Delete unnecessary nodes from an area."
+msgstr ""
+
+msgid "Yes, delete nodes"
+msgstr ""
+
+msgid "Delete nodes outside of downloaded data regions"
+msgstr ""
+
+msgid "No, abort"
+msgstr ""
+
+msgid "Do you want to delete them anyway?"
+msgstr ""
+
+msgid "Delete nodes outside of data regions?"
+msgstr ""
+
+msgid "average nearby nodes"
+msgstr ""
+
+msgid ""
+"Node of the way (area) is removed if all of <u>Angle Weight</u>, <u>Area "
+"Weight</u> and <u>Distance Weight</u> are greater than 1. <u>Weight</u> is "
+"computed as <u>Value</u> / <u>Threshold</u>, where <u>Value</u> is one of "
+"<u>Angle</u>, <u>Area</u> and <u>Distance</u> computed from every three "
+"adjanced points of the way.<ul><li><u>Value</u> of <u>Angle</u> is angle in "
+"degrees on the second node</li><li><u>Value</u> of <u>Area</u> is area "
+"formed by triangle</li><li><u>Value</u> of the <u>Distance</u> is Cross "
+"Track Error Distance</li></ul>All three <u>Weight</u>s multiplied by its "
+"<u>Factor</u>s are summed and node of the lowest sum is removed first. "
+"Removal continues until there is no node to remove.Merge Nearby Nodes is "
+"another step of the simplification that merges adjanced nodes that are "
+"closer than <u>Threshold</u> meters."
+msgstr ""
+
+msgid "Angle Threshold"
+msgstr ""
+
+msgid "Angle Factor"
+msgstr ""
+
+msgid "Area Threshold"
+msgstr ""
+
+msgid "Area Factor"
+msgstr ""
+
+msgid "Distance Threshold"
+msgstr ""
+
+msgid "Distance Factor"
+msgstr ""
+
+msgid "Merge Nearby Nodes Threshold"
+msgstr ""
+
+msgid "SeaMap Editor"
+msgstr ""
+
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
+msgid "OSM Export"
+msgstr ""
+
+msgid "Export traffic data to SUMO network file."
+msgstr ""
+
+msgid "SUMO Export"
+msgstr ""
+
+msgid "Export"
+msgstr ""
+
+msgid "AutoSave LiveData"
+msgstr ""
+
+msgid "Save captured data to file every minute."
+msgstr ""
+
+msgid "Error while exporting {0}: {1}"
+msgstr ""
+
+msgid "Duplicate hotkey for button ''{0}'' - button will be ignored!"
+msgstr ""
+
+msgid "SurveyorPlugin needs LiveGpsPlugin, but could not find it!"
+msgstr ""
+
+msgid "Surveyor..."
+msgstr ""
+
+msgid "Open surveyor tool."
+msgstr ""
+
+msgid "Surveyor"
+msgstr ""
+
+msgid "Could not read surveyor definition: {0}"
+msgstr ""
+
+msgid "Error parsing {0}: {1}"
+msgstr ""
+
+msgid "Surveyor waypoint layer"
+msgstr ""
+
+msgid "{0} start"
+msgstr ""
+
+msgid "{0} end"
+msgstr ""
+
+msgid "Waypoint Description"
+msgstr ""
+
+msgid "Tag2Link Preferences"
+msgstr ""
+
+msgid "Launch browser with information about the selected object"
+msgstr ""
+
+msgid ""
+"Launch your default software for sending an email to the selected contact "
+"address"
+msgstr ""
+
+msgid "Edit tags"
+msgstr ""
+
+msgid "Launches the tag editor dialog"
+msgstr ""
+
+msgid "JOSM Tag Editor Plugin"
+msgstr ""
+
+msgid "Abort tag editing and close dialog"
+msgstr ""
+
+msgid "Apply edited tags and close dialog"
+msgstr ""
+
+msgid "Highlight"
+msgstr ""
+
+msgid "Group"
+msgstr ""
+
+msgid "Item"
+msgstr ""
+
+msgid "unexpected column number {0}"
+msgstr ""
+
+msgid "Tagging Preset Tester"
+msgstr ""
+
+msgid ""
+"Open the tagging preset test tool for previewing tagging preset dialogs."
+msgstr ""
+
+msgid "You have to specify tagging preset sources in the preferences first."
+msgstr ""
+
+msgid "Enter housenumbers or amount of segments"
+msgstr ""
+
+msgid "Terrace a house"
+msgstr ""
+
+msgid "Interpolation"
+msgstr ""
+
+msgid "Lowest Number"
+msgstr ""
+
+msgid "Lowest housenumber of the terraced house"
+msgstr ""
+
+msgid "Highest Number"
+msgstr ""
+
+msgid "List of Numbers"
+msgstr ""
+
+msgid "add to existing associatedStreet relation"
+msgstr ""
+
+msgid "create an associatedStreet relation"
+msgstr ""
+
+msgid "keep outline way"
+msgstr ""
+
+msgid "Street name: "
+msgstr ""
+
+msgid "Even/Odd"
+msgstr ""
+
+msgid "Lowest number"
+msgstr ""
+
+msgid "Highest number"
+msgstr ""
+
+msgid "Lowest housenumber cannot be higher than highest housenumber"
+msgstr ""
+
+msgid "Housenumbers do not match odd/even setting"
+msgstr ""
+
+msgid "Segment must be a number greater 1"
+msgstr ""
+
+msgid "{0} must be greater than 0"
+msgstr ""
+
+msgid "{0} is not a number"
+msgstr ""
+
+msgid "Reverse a terrace"
+msgstr ""
+
+msgid "Reverses house numbers on a terrace."
+msgstr ""
+
+msgid "Reverse a Terrace"
+msgstr ""
+
+msgid "Cannot reverse!"
+msgstr ""
+
+msgid "Reverse Terrace"
+msgstr ""
+
+msgid "Terrace a building"
+msgstr ""
+
+msgid "Creates individual buildings from a long building."
+msgstr ""
+
+msgid "Invalid selection"
+msgstr ""
+
+msgid ""
+"Select a single, closed way of at least four nodes. (Optionally you can also "
+"select a street for the addr:street tag and a node to mark the start of "
+"numbering.)"
+msgstr ""
+
+msgid "Terrace"
+msgstr ""
+
+msgid "Browse"
+msgstr ""
+
+msgid "Browse map with left button"
+msgstr ""
+
+msgid "Merge objects nodes"
+msgstr ""
+
+msgid "Tracer"
+msgstr ""
+
+msgid "Tracer."
+msgstr ""
+
+msgid "Tracer building"
+msgstr ""
+
+msgid "Tracer2"
+msgstr ""
+
+msgid "Tracer2."
+msgstr ""
+
+msgid "Change tag {0} to {1}"
+msgstr ""
+
+msgid ""
+"The Tracer2Server version isn''t compatible with this plugin. Please "
+"download version {0} from\n"
+"{1}."
+msgstr ""
+
+msgid ""
+"New version of Tracer2Server is available. For best results please upgrade "
+"to version {0}."
+msgstr ""
+
+msgid "No set of parameter is active!"
+msgstr ""
+
+msgid "Select parameter"
+msgstr ""
+
+msgid "Tracer2: add a way with {0} points"
+msgstr ""
+
+msgid "Tracer2: modify way to {0} points"
+msgstr ""
+
+msgid "Tracer2 error"
+msgstr ""
+
+msgid "Parameter for server request"
+msgstr ""
+
+msgid "Resolution:"
+msgstr ""
+
+msgid "Mode:"
+msgstr ""
+
+msgid "Threshold:"
+msgstr ""
+
+msgid "Points per circle:"
+msgstr ""
+
+msgid "Tag:"
+msgstr ""
+
+msgid "Preferred values:"
+msgstr ""
+
+msgid "Delete parameter \"{0}\"?"
+msgstr ""
+
+msgid "Add new"
+msgstr ""
+
+msgid "Add predefined"
+msgstr ""
+
+msgid "Select predefined parameter"
+msgstr ""
+
+msgid "Modify list of parameter for server request."
+msgstr ""
+
+msgid "Parameter:"
+msgstr ""
+
+msgid ""
+"Tracer2Server isn''t running. Please start the Server.\n"
+"If you don''t have the server, please download it from\n"
+"{0}."
+msgstr ""
+
+msgid "Tracer2Server hasn''t found anything."
+msgstr ""
+
+msgid "Tracer2Server has detected an error."
+msgstr ""
+
+msgid "GPG"
+msgstr ""
+
+msgid "Export sigs..."
+msgstr ""
+
+msgid "Export all signatures to XML file."
+msgstr ""
+
+msgid "Export sigs to XML..."
+msgstr ""
+
+msgid "Save Signatures file"
+msgstr ""
+
+msgid ""
+"Get all referenced but not actually present OSM objects from OSM server."
+msgstr ""
+
+msgid "Download referenced osm objects..."
+msgstr ""
+
+msgid "{0} Signatures loaded. All referenced OSM objects found."
+msgstr ""
+
+msgid ""
+"{0} of {1} OSM objects are referenced but not there.\n"
+"Do you want to load them from OSM-Server?"
+msgstr ""
+
+msgid "Load objects from server"
+msgstr ""
+
+msgid "Download signed data"
+msgstr ""
+
+msgid "Warning: Ignoring exception because task was canceled. Exception: {0}"
+msgstr ""
+
+msgid ""
+"Generating new Keypair.\n"
+"Collecting randomness..."
+msgstr ""
+
+msgid "UID"
+msgstr ""
+
+msgid "KeyID"
+msgstr ""
+
+msgid "OSM-Info"
+msgstr ""
+
+msgid "Signed"
+msgstr ""
+
+msgid "Unknown"
+msgstr ""
+
+msgid "Object signatures"
+msgstr ""
+
+msgid "Open object signing window."
+msgstr ""
+
+msgid "Check"
+msgstr ""
+
+msgid "Check all available signatures for selected object."
+msgstr ""
+
+msgid "Sign"
+msgstr ""
+
+msgid "Digital sign selected Tags, if you believe they are correct."
+msgstr ""
+
+msgid "Show all available signatures for selected attribute."
+msgstr ""
+
+msgid "Show deleted tags and notes if they were signed before"
+msgstr ""
+
+msgid ""
+"Use default (and maybe existing) GnuPG directory ({0}) to store new keys and "
+"configs."
+msgstr ""
+
+msgid "Use separate GnuPG directory ({0}) to store new keys and configs."
+msgstr ""
+
+msgid "Trust OSM Settings"
+msgstr ""
+
+msgid "Change GPG and privacy settings of the trustosm plugin."
+msgstr ""
+
+msgid "Use separate GnuPG configuration directory?"
+msgstr ""
+
+msgid "GnuPG"
+msgstr ""
+
+msgid "Dialog"
+msgstr ""
+
+msgid "Signed key value pair was: {0}={1}"
+msgstr ""
+
+msgid "{0} Signatures found."
+msgstr ""
+
+msgid "Signature Info"
+msgstr ""
+
+msgid "Sorry, there are no Signatures for the selected Node."
+msgstr ""
+
+msgid "No Signature found"
+msgstr ""
+
+msgid ""
+"Selected node was:\n"
+"{0}"
+msgstr ""
+
+msgid "Sorry, there are no Signatures for the selected Attribute."
+msgstr ""
+
+msgid ""
+"Selected key value pair was:\n"
+"{0}={1}"
+msgstr ""
+
+msgid "Sorry, there are no Signatures for the selected Segment."
+msgstr ""
+
+msgid "Selected WaySegment was:"
+msgstr ""
+
+msgid "Signature Files"
+msgstr ""
+
+msgid "OSM Signature Files"
+msgstr ""
+
+msgid "Only digits allowed in osmid: ''{0}''."
+msgstr ""
+
+msgid "Could not parse OpenPGP message."
+msgstr ""
+
+msgid "Prepare stuff..."
+msgstr ""
+
+msgid "Parsing Signature data..."
+msgstr ""
+
+msgid "The Signature is broken!"
+msgstr ""
+
+msgid "Manipulation Warning"
+msgstr ""
+
+msgid "Select a signing key from your keyring-file:"
+msgstr ""
+
+msgid "Don''t ask again for the key"
+msgstr ""
+
+msgid "Use a random key from this list"
+msgstr ""
+
+msgid "Create new Key"
+msgstr ""
+
+msgid "Select a Key to sign"
+msgstr ""
+
+msgid ""
+"The object with the ID \"{0}\" ({1}) is newly created.\n"
+"You can not sign it, because the signature would lose the ID-Reference after "
+"uploading it to the OSM-server."
+msgstr ""
+
+msgid "Signing canceled!"
+msgstr ""
+
+msgid "Please give a tolerance in meters"
+msgstr ""
+
+msgid "Select as much as you like:"
+msgstr ""
+
+msgid "Survey"
+msgstr ""
+
+msgid "Aerial Photography"
+msgstr ""
+
+msgid "Web Recherche"
+msgstr ""
+
+msgid "Trusted persons told me"
+msgstr ""
+
+msgid "Which source did you use?"
+msgstr ""
+
+msgid "never"
+msgstr ""
+
+msgid "Primary user-ID: "
+msgstr ""
+
+msgid "Key-ID: "
+msgstr ""
+
+msgid "Fingerprint: "
+msgstr ""
+
+msgid "Algorithm: "
+msgstr ""
+
+msgid "Strength in bit: "
+msgstr ""
+
+msgid "Creation date: "
+msgstr ""
+
+msgid "Expiration date: "
+msgstr ""
+
+msgid "PGP-Key details"
+msgstr ""
+
+msgid "User-ID:"
+msgstr ""
+
+msgid "Select algorithm:"
+msgstr ""
+
+msgid "Choose Bitlength (Strength):"
+msgstr ""
+
+msgid "Encryption algorithm to protect private key:"
+msgstr ""
+
+msgid "Choose an expiry date for the key:"
+msgstr ""
+
+msgid "Create a new signing key"
+msgstr ""
+
+msgid "No such lane."
+msgstr ""
+
+msgid ""
+"<html>The number of lanes is not specified for one or more roads; please add "
+"missing lanes tags.</html>"
+msgstr ""
+
+msgid ""
+"<html>An error occurred while constructing the model. Please run the "
+"validator to make sure the data is consistent.<br><br>Error: {0}</html>"
+msgstr ""
+
+msgid "Edit turn relations and lane lengths for selected node."
+msgstr ""
+
+msgid "Validate turn- and lane-length-relations for consistency."
+msgstr ""
+
+msgid "Turn Lanes"
+msgstr ""
+
+msgid "Edit turn lanes"
+msgstr ""
+
+msgid "Quick-Fix"
+msgstr ""
+
+msgid "Revalidate all turnlanes-relations."
+msgstr ""
+
+msgid "Automatically fixes the issue."
+msgstr ""
+
+msgid "Selects the offending relation."
+msgstr ""
+
+msgid "Add turn"
+msgstr ""
+
+msgid "Delete lane."
+msgstr ""
+
+msgid "Delete turn."
+msgstr ""
+
+msgid "{0} lanes are not referenced in any turn-relation."
+msgstr ""
+
+msgid "Put the ways in order."
+msgstr ""
+
+msgid "Relation references non-existent (regular) lane {0}"
+msgstr ""
+
+msgid "Relation references non-existent extra lane {0}"
+msgstr ""
+
+msgid "Integer list \"{0}\" contains unexpected values."
+msgstr ""
+
+msgid "Create/Edit turn restriction..."
+msgstr ""
+
+msgid "Create or edit a turn restriction."
+msgstr ""
+
+msgid ""
+"In the following table you can edit the <strong>raw tags</strong> of the OSM "
+"relation representing this turn restriction."
+msgstr ""
+
+msgid ""
+"In the following table you can edit the <strong>raw members</strong> of the "
+"OSM relation representing this turn restriction."
+msgstr ""
+
+msgid "Type:"
+msgstr ""
+
+msgid "From:"
+msgstr ""
+
+msgid "To:"
+msgstr ""
+
+msgid "Vias:"
+msgstr ""
+
+msgid "Copy to the clipboard"
+msgstr ""
+
+msgid "Cannot find object with id ''{0}'' in layer ''{1}''"
+msgstr ""
+
+msgid ""
+"Cannot add object ''{0}'' as relation member because it is deleted or "
+"invisible in layer ''{1}''"
+msgstr ""
+
+msgid "Clear the selected roles or delete the selected members"
+msgstr ""
+
+msgid "Insert new relation members from object in the clipboard"
+msgstr ""
+
+msgid "Move the selected relation members down by one position"
+msgstr ""
+
+msgid "Move the selected relation members up by one position"
+msgstr ""
+
+msgid "Edit basic attributes of a turn restriction"
+msgstr ""
+
+msgid "Edit the raw tags and members of this turn restriction"
+msgstr ""
+
+msgid "Errors/Warnings"
+msgstr ""
+
+msgid "Show errors and warnings related to this turn restriction"
+msgstr ""
+
+msgid "Create a new turn restriction in layer ''{0}''"
+msgstr ""
+
+msgid "Edit a new turn restriction in layer ''{0}''"
+msgstr ""
+
+msgid "Edit turn restriction ''{0}'' in layer ''{1}''"
+msgstr ""
+
+msgid ""
+"There is still an unresolved error or warning identified for this turn "
+"restriction. You are recommended to resolve this issue first."
+msgid_plural ""
+"There are still {0} errors and/or warnings identified for this turn "
+"restriction. You are recommended to resolve these issues first."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Do you want to save anyway?"
+msgstr ""
+
+msgid "Yes, save anyway"
+msgstr ""
+
+msgid "Save the turn restriction despite of errors and/or warnings"
+msgstr ""
+
+msgid "No, resolve issues first"
+msgstr ""
+
+msgid "Cancel saving and start resolving pending issues first"
+msgstr ""
+
+msgid "Pending errors and warnings"
+msgstr ""
+
+msgid ""
+"This turn restriction refers to an object which was deleted outside of this "
+"turn restriction editor:"
+msgid_plural ""
+"This turn restriction refers to {0} objects which were deleted outside of "
+"this turn restriction editor:"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"Updates to this turn restriction can''t be saved unless deleted members are "
+"removed.<br>How to you want to proceed?"
+msgstr ""
+
+msgid "Remove deleted members and save"
+msgstr ""
+
+msgid "Cancel and return to editor"
+msgstr ""
+
+msgid "Deleted members in turn restriction"
+msgstr ""
+
+msgid "Create a conflict and close this turn restriction editor"
+msgstr ""
+
+msgid "Return to the turn restriction editor and resume editing"
+msgstr ""
+
+msgid ""
+"<html>This turn restriction has been changed outside of the editor.<br>You "
+"cannot apply your changes and continue editing.<br><br>Do you want to create "
+"a conflict and close the editor?</html>"
+msgstr ""
+
+msgid "Already participating in a conflict"
+msgstr ""
+
+msgid "Delete this turn restriction"
+msgstr ""
+
+msgid "Select this turn restriction"
+msgstr ""
+
+msgid "Activate the layer this turn restriction belongs to and zoom to it"
+msgstr ""
+
+msgid "{0} warning"
+msgid_plural "{0} warnings"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "{0} error"
+msgid_plural "{0} errors"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "no issues"
+msgstr ""
+
+msgid "please select a way"
+msgstr ""
+
+msgid "multiple objects with role ''{0}''"
+msgstr ""
+
+msgid "Delete from turn restriction"
+msgstr ""
+
+msgid "Accept the currently selected way"
+msgstr ""
+
+msgid "Paste from the clipboard"
+msgstr ""
+
+msgid "Create new turn restriction"
+msgstr ""
+
+msgid "Launch the turn restriction editor to create a new turn restriction"
+msgstr ""
+
+msgid "No Right Turn"
+msgstr ""
+
+msgid "No Left Turn"
+msgstr ""
+
+msgid "No U-Turn"
+msgstr ""
+
+msgid "No Straight On"
+msgstr ""
+
+msgid "Only Right Turn"
+msgstr ""
+
+msgid "Only Left Turn"
+msgstr ""
+
+msgid "Only Straight On"
+msgstr ""
+
+msgid "Warning: failed to load icon for turn restriction type ''{0}''"
+msgstr ""
+
+msgid "please select a turn restriction type"
+msgstr ""
+
+msgid ""
+"Select the vehicle types this turn restriction is <strong>not</strong> "
+"applicable for."
+msgstr ""
+
+msgid "Public Service Vehicles"
+msgstr ""
+
+msgid "Public service vehicles like buses, tramways, etc."
+msgstr ""
+
+msgid "Heavy Goods Vehicles"
+msgstr ""
+
+msgid "Motorcars"
+msgstr ""
+
+msgid "Bicycles"
+msgstr ""
+
+msgid "Mopeds"
+msgstr ""
+
+msgid "Use standard exceptions"
+msgstr ""
+
+msgid "Use non-standard exceptions"
+msgstr ""
+
+msgid "Remove the currently selected vias"
+msgstr ""
+
+msgid "Move the selected vias down by one position"
+msgstr ""
+
+msgid "Move the selected vias up by one position"
+msgstr ""
+
+msgid "Copy the selected vias to the clipboard"
+msgstr ""
+
+msgid "Insert ''via'' objects from the clipboard"
+msgstr ""
+
+msgid ""
+"Failed to retrieve OSM object with id {0} from dataset {1}. Cannot add it as "
+"''via''."
+msgstr ""
+
+msgctxt "turnrestrictions"
+msgid "From:"
+msgstr ""
+
+msgctxt "turnrestriction"
+msgid "To:"
+msgstr ""
+
+msgid "no participating way with role ''from''"
+msgstr ""
+
+msgid "no participating way with role ''to''"
+msgstr ""
+
+msgid "Only participating in selection"
+msgstr ""
+
+msgid ""
+"<html>Select to display turn restrictions related to object in the current "
+"selection only.<br>Deselect to display all turn restrictions in the current "
+"data set.</html>"
+msgstr ""
+
+msgid "Turn Restrictions"
+msgstr ""
+
+msgid "Display and manage turn restrictions in the current data set"
+msgstr ""
+
+msgid "Open an editor for the selected turn restriction"
+msgstr ""
+
+msgid "Delete the selected turn restriction"
+msgstr ""
+
+msgid "Create a new turn restriction"
+msgstr ""
+
+msgid "Set the current JOSM selection to the selected turn restrictions"
+msgstr ""
+
+msgid "Select in current data layer"
+msgstr ""
+
+msgid "Zoom to the currently selected turn restrictions"
+msgstr ""
+
+msgid "An OSM plugin for editing turn restrictions."
+msgstr ""
+
+msgid ""
+"Development of the turn restriction plugin was sponsored by <a "
+"href=\"http://www.skobbler.de\">skobbler GmbH</a>."
+msgstr ""
+
+msgid "Configure the preferences for the turnrestrictions plugin"
+msgstr ""
+
+msgid "Sponsor"
+msgstr ""
+
+msgid ""
+"The Basic Editor can optionally display the list of via-objects of a turn "
+"restriction. If enabled, one can edit them in the Basic editor too. If "
+"disabled, editing of via-objects is possible in the Advanced Editor only."
+msgstr ""
+
+msgid "Display and edit list of via-objects in the Basic Editor"
+msgstr ""
+
+msgid "Road signs - Set A"
+msgstr ""
+
+msgid "Road signs - Set B"
+msgstr ""
+
+msgid "Please select the set of road sign icons to be used in the plugin."
+msgstr ""
+
+msgid ""
+"Warning: the preference with key ''{0}'' has an unsupported value ''{1}''. "
+"Assuming the default value ''set-a''."
+msgstr ""
+
+msgid ""
+"This turn restriction uses the way <span class=\"object-name\">{0}</span> "
+"with role <tt>from</tt> <strong>and</strong> with role <tt>to</tt>. In a "
+"turn restriction, the way with role <tt>from</tt> should be different from "
+"the way with role <tt>to</tt>, though."
+msgstr ""
+
+msgid "Delete ''from''"
+msgstr ""
+
+msgid "Removes the member with role ''from''"
+msgstr ""
+
+msgid "Delete ''to''"
+msgstr ""
+
+msgid "Removes the member with role ''to''"
+msgstr ""
+
+msgid "Fix in editor"
+msgstr ""
+
+msgid ""
+"Go to Basic Editor and manually choose members with roles ''from'' and ''to''"
+msgstr ""
+
+msgid ""
+"This turn restriction uses a non-standard restriction type <tt>{0}</tt> for "
+"the tag key <tt>restriction</tt>. It is recommended to use standard values "
+"only. Please select one in the Basic editor."
+msgstr ""
+
+msgid "Go to Basic Editor and manually choose a turn restriction type"
+msgstr ""
+
+msgid ""
+"The <strong>from</strong>-way <span class=\"object-name\">{0}</span> and the "
+"<strong>to</strong>-way <span class=\"object-name\">{1}</span> intersect at "
+"node <span class=\"object-name\">{2}</span> but this node isn''t a "
+"<strong>via</strong>-object.<br> It is recommended to set it as unique "
+"<strong>via</strong>-object."
+msgstr ""
+
+msgid "Set via-Object"
+msgstr ""
+
+msgid ""
+"Replaces the currently configured via-objects with the node at the "
+"intersection"
+msgstr ""
+
+msgid "Go to Basic Editor and manually fix the list of via-objects"
+msgstr ""
+
+msgid ""
+"A turn restriction must declare the type of restriction. Please select a "
+"type in the Basic Editor."
+msgstr ""
+
+msgid "A way with role <tt>from</tt> is required in a turn restriction."
+msgstr ""
+
+msgid "A way with role <tt>to</tt> is required in a turn restriction."
+msgstr ""
+
+msgid "Please go to the Basic editor and manually choose a way."
+msgstr ""
+
+msgid "Add in editor"
+msgstr ""
+
+msgid "Add a way with role ''from''"
+msgstr ""
+
+msgid "Add a way with role ''to''"
+msgstr ""
+
+msgid ""
+"The two ways participating in the turn restriction <strong>aren''t "
+"connected.</strong>"
+msgstr ""
+
+msgid ""
+"Make sure you add one or more via objects (nodes or ways) to the turn "
+"restriction."
+msgstr ""
+
+msgid "Go to the Advanced Editor and add via objects"
+msgstr ""
+
+msgid ""
+"A turn restriction requires exactly one way with role <tt>from</tt>. This "
+"turn restriction has {0} ways in this role. Please remove {1} of them."
+msgstr ""
+
+msgid ""
+"A turn restriction requires exactly one way with role <tt>to</tt>. This turn "
+"restriction has {0} ways in this role. Please remove {1} of them."
+msgstr ""
+
+msgid "Go to the Advanced Editor and remove the members"
+msgstr ""
+
+msgid ""
+"The tag <tt>except</tt> has the non-standard value <tt>{0}</tt>. It is "
+"recommended to use standard values for <tt>except</tt> only."
+msgstr ""
+
+msgid "Go to Basic Editor and select standard vehicle type based exceptions"
+msgstr ""
+
+msgid "The required tag <tt>{0}={1}</tt> is missing."
+msgstr ""
+
+msgid "Add missing tag"
+msgstr ""
+
+msgid "Add the missing tag {0}={1}"
+msgstr ""
+
+msgid ""
+"The way <span class=\"object-name\">{0}</span> with role <tt>from</tt> and "
+"the way <span class=\"object-name\">{1}</span> with role <tt>to</tt> "
+"intersect at node <span class=\"object-name\">{2}</span>. <p> Both ways "
+"should be split at the intersecting node."
+msgstr ""
+
+msgid ""
+"The way <span class=\"object-name\">{0}</span> with role <tt>{1}</tt> should "
+"be split at node <span class=\"object-name\">{2}</span> where it connects to "
+"way <span class=\"object-name\">{3}</span>."
+msgstr ""
+
+msgid "Split now"
+msgstr ""
+
+msgid "Split the ways"
+msgstr ""
+
+msgid ""
+"This turn restriction uses the node <span class=\"object-name\">{0}</span> "
+"as member with role <tt>{1}</tt>."
+msgstr ""
+
+msgid ""
+"This turn restriction uses the relation <span class=\"object-"
+"name\">{0}</span> as member with role <tt>{1}</tt>."
+msgstr ""
+
+msgid "A way is required instead."
+msgstr ""
+
+msgid "Delete the member from the turn restriction"
+msgstr ""
+
+msgid "Change to the Basic Editor and select a way"
+msgstr ""
+
+msgid "Undelete object..."
+msgstr ""
+
+msgid "Undelete object by id"
+msgstr ""
+
+msgid "Unable to undelete node {0}. Object has likely been redacted"
+msgstr ""
+
+msgid "Unable to undelete way {0}. Object has likely been redacted"
+msgstr ""
+
+msgid "Unable to undelete relation {0}. Object has likely been redacted"
+msgstr ""
+
+msgid "Undelete Object"
+msgstr ""
+
+msgid "Undelete object"
+msgstr ""
+
+msgid ""
+"Enter the type and ID of the objects that should be undeleted, e.g., ''n1 "
+"w2''"
+msgstr ""
+
+msgid "Select if the data should be added into a new layer"
+msgstr ""
+
+msgid "Start undeleting"
+msgstr ""
+
+msgid "Close dialog and cancel"
+msgstr ""
+
+msgid "Add nodes at intersections"
+msgstr ""
+
+msgid "Add missing nodes at intersections of selected ways."
+msgstr ""
+
+msgid "Please select one or more ways with intersections of segments."
+msgstr ""
+
+msgid "Align Way Nodes"
+msgstr ""
+
+msgid "Align nodes in a way"
+msgstr ""
+
+msgid "The way with selected nodes can not be straightened."
+msgstr ""
+
+msgid "Internal error: number of nodes is {0}."
+msgstr ""
+
+msgid "Extract node"
+msgstr ""
+
+msgid "Extracts node from a way"
+msgstr ""
+
+msgid ""
+"This tool extracts node from its ways and requires single node to be "
+"selected."
+msgstr ""
+
+msgid "Extract node from line"
+msgstr ""
+
+msgid "Paste Relations"
+msgstr ""
+
+msgid ""
+"Paste relation membership from objects in the buffer onto selected object(s)"
+msgstr ""
+
+msgid "Split Object"
+msgstr ""
+
+msgid "Split an object at the selected nodes."
+msgstr ""
+
+msgid "The current selection cannot be used for splitting."
+msgstr ""
+
+msgid "The selected way is not closed."
+msgstr ""
+
+msgid "The selected way does not contain the selected node."
+msgid_plural "The selected way does not contain all the selected nodes."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"The selected way is not a split way, please select split points or split way "
+"too."
+msgstr ""
+
+msgid "The selected nodes can not be consecutive nodes in the object."
+msgstr ""
+
+msgid "Split adjacent ways"
+msgstr ""
+
+msgid "Split adjacent ways on T-intersections"
+msgstr ""
+
+msgid ""
+"There are several ways containing one of the splitting nodes. Select ways "
+"participating in this operation."
+msgstr ""
+
+msgid "Symmetry"
+msgstr ""
+
+msgid ""
+"Please select at least two nodes for symmetry axis and something else to "
+"mirror."
+msgstr ""
+
+msgid "Copy tags from previous selection"
+msgstr ""
+
+msgid "Pastes tags of previously selected object(s)"
+msgstr ""
+
+msgid "Add Source Tag"
+msgstr ""
+
+msgid "Add remembered source tag"
+msgstr ""
+
+msgid "UnGlue Relation"
+msgstr ""
+
+msgid ""
+"Duplicate nodes, ways and relations that are used by multiple relations."
+msgstr ""
+
+msgid "UnGlue Relations"
+msgstr ""
+
+msgid "Unglued Relations"
+msgstr ""
+
+msgid "Change relation member for {0} {1}"
+msgstr ""
+
+msgid "Circle arc"
+msgstr ""
+
+msgid "Create a circle arc"
+msgstr ""
+
+msgid "Select custom URL"
+msgstr ""
+
+msgid "Please select one of custom URLs (configured in Preferences)"
+msgstr ""
+
+msgid "Ask every time"
+msgstr ""
+
+msgid "Configure custom URL"
+msgstr ""
+
+msgid "Open custom URL"
+msgstr ""
+
+msgid "Opens specified URL browser"
+msgstr ""
+
+msgid "Utilsplugin2 settings"
+msgstr ""
+
+msgid "Here you can change some preferences of Utilsplugin2 functions"
+msgstr ""
+
+msgid "Save to file"
+msgstr ""
+
+msgid "Load from file"
+msgstr ""
+
+msgid ""
+"Please edit custom URLs and select one row to use with the tool<br/> "
+"<b>{key}</b> is replaced with the tag value<br/> "
+"<b>{#id}</b> is replaced with the element ID<br/> "
+"<b>{#type}</b> is replaced with \"node\",\"way\" or \"relation\" "
+"<br/> <b>{#lat} , {#lon}</b> is replaced with map center "
+"latitude/longitude <br/> Your can manually load settings from file "
+"<b>customurl.txt</b> in JOSM folder"
+msgstr ""
+
+msgid "Custom URL configuration"
+msgstr ""
+
+msgid "Lat Lon tool"
+msgstr ""
+
+msgid "Create geometry by entering lat lon coordinates for it."
+msgstr ""
+
+msgid ""
+"Enter the coordinates for the new nodes, one for each line.<br/>If you enter "
+"two lines with the same coordinates there will be generated duplicate "
+"nodes.<br/>You can separate longitude and latitude with space, comma or "
+"semicolon.<br/>Use positive numbers or N, E characters to indicate North or "
+"East cardinal direction.<br/>For South and West cardinal directions you can "
+"use either negative numbers or S, W characters.<br/>Coordinate value can be "
+"in one of three "
+"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
+"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
+"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
+"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional.<br/><br/>Some examples:<ul><li>49.29918° "
+"19.24788°</li><li>N 49.29918 E 19.24788</li><li>W 49°29.918' S "
+"19°24.788'</li><li>N 49°29'04" E "
+"19°24'43"</li><li>49.29918 N, 19.24788 "
+"E</li><li>49°29'21" N 19°24'38" E</li><li>49 29 "
+"51, 19 24 18</li><li>49 29, 19 24</li><li>E 49 29, N 19 24</li><li>49° "
+"29; 19° 24</li><li>N 49° 29, W 19° 24</li><li>49° 29.5 S, "
+"19° 24.6 E</li><li>N 49 29.918 E 19 15.88</li><li>49 29.4 19 "
+"24.5</li><li>-49 29.4 N -19 24.5 W</li></ul><li>48 deg 42' 52.13\" N, 21 "
+"deg 11' 47.60\" E</li></ul>"
+msgstr ""
+
+msgid "Tag multiple objects [alpha]"
+msgstr ""
+
+msgid "Edit tags of object list in table"
+msgstr ""
+
+msgid "Tag multiple objects"
+msgstr ""
+
+msgid "Sync with JOSM selection"
+msgstr ""
+
+msgid "Zoom to objects"
+msgstr ""
+
+msgid "Remove tag"
+msgstr ""
+
+msgid "Delete tags from multiple objects"
+msgstr ""
+
+msgid "Duplicate tags from the first"
+msgstr ""
+
+msgid "Set tags for multiple objects"
+msgstr ""
+
+msgid "Delete from history"
+msgstr ""
+
+msgid "Find primitives with these tags"
+msgstr ""
+
+msgid "Multitag Background: highlight"
+msgstr ""
+
+msgid "Replace Geometry"
+msgstr ""
+
+msgid "Replace geometry of selected object with a new one"
+msgstr ""
+
+msgid ""
+"This tool replaces geometry of one object with another, and so requires "
+"exactly two objects to be selected."
+msgstr ""
+
+msgid ""
+"This tool can only replace a node, upgrade a node to a way or a "
+"multipolygon, or replace a way with a way."
+msgstr ""
+
+msgid "Node belongs to way(s), cannot replace."
+msgstr ""
+
+msgid "Replace geometry for node {0}"
+msgstr ""
+
+msgid "Relation is not a multipolygon, cannot be used as a replacement."
+msgstr ""
+
+msgid ""
+"Please select one way that exists in the database and one new way with "
+"correct geometry."
+msgstr ""
+
+msgid "The ways must be entirely within the downloaded area."
+msgstr ""
+
+msgid ""
+"The way to be replaced cannot have any nodes with properties or relation "
+"memberships unless they belong to both ways."
+msgstr ""
+
+msgid "Exceeded iteration limit for robust method, using simpler method."
+msgstr ""
+
+msgid "Replace geometry for way {0}"
+msgstr ""
+
+msgid "Range of child primitives count"
+msgstr ""
+
+msgid "Range of parent primitives count"
+msgstr ""
+
+msgid "Range of referencing relation count"
+msgstr ""
+
+msgid "Range of attached ways count"
+msgstr ""
+
+msgid "Adjacent nodes"
+msgstr ""
+
+msgid "Select adjacent nodes"
+msgstr ""
+
+msgid "Adjacent ways"
+msgstr ""
+
+msgid "Adjacent ways will be selected. Nodes will be deselected."
+msgstr ""
+
+msgid "All connected ways"
+msgstr ""
+
+msgid "Select all connected ways"
+msgstr ""
+
+msgid "Intersecting ways"
+msgstr ""
+
+msgid "Select intersecting ways"
+msgstr ""
+
+msgid "Please select some ways to find connected and intersecting ways!"
+msgstr ""
+
+msgid "All intersecting ways"
+msgstr ""
+
+msgid "Select all intersecting ways"
+msgstr ""
+
+msgid "Please select some ways to find all connected and intersecting ways!"
+msgstr ""
+
+msgid "Middle nodes"
+msgstr ""
+
+msgid "Select middle nodes"
+msgstr ""
+
+msgid "Please select two nodes connected by way!"
+msgstr ""
+
+msgid "Too many ways are added: {0}!"
+msgstr ""
+
+msgid "All inside [testing]"
+msgstr ""
+
+msgid "Select all inside selected polygons"
+msgstr ""
+
+msgid ""
+"Nothing found. Please select some closed ways or multipolygons to find all "
+"primitives inside them!"
+msgstr ""
+
+msgid "Area boundary [testing]"
+msgstr ""
+
+msgid "Select relation or all ways that forms area boundary"
+msgstr ""
+
+msgid ""
+"Nothing found. Please select way that is a part of some polygon formed by "
+"connected ways"
+msgstr ""
+
+msgid "Select Highway"
+msgstr ""
+
+msgid "Select highway for the name/ref given"
+msgstr ""
+
+msgid "Please select one or two ways for this action"
+msgstr ""
+
+msgid "Select last modified nodes"
+msgstr ""
+
+msgid "Select last modified ways"
+msgstr ""
+
+msgid "Select Way Nodes"
+msgstr ""
+
+msgid "Select all nodes of a selected way."
+msgstr ""
+
+msgid "Undo selection"
+msgstr ""
+
+msgid "Reselect last added object or selection form history"
+msgstr ""
+
+msgid "Unselect nodes"
+msgstr ""
+
+msgid "Removes all nodes from selection"
+msgstr ""
+
+msgid "Import Video"
+msgstr ""
+
+msgid "Sync a video against this GPS track"
+msgstr ""
+
+msgid "Remove Video"
+msgstr ""
+
+msgid "removes current video from layer"
+msgstr ""
+
+msgid "Play/Pause"
+msgstr ""
+
+msgid "starts/pauses video playback"
+msgstr ""
+
+msgid "Video: {0}"
+msgstr ""
+
+msgid "Backward"
+msgstr ""
+
+msgid "jumps n sec back"
+msgstr ""
+
+msgid "Forward"
+msgstr ""
+
+msgid "jumps n sec forward"
+msgstr ""
+
+msgid "Faster"
+msgstr ""
+
+msgid "faster playback"
+msgstr ""
+
+msgid "Slower"
+msgstr ""
+
+msgid "slower playback"
+msgstr ""
+
+msgid "Jump To"
+msgstr ""
+
+msgid "jumps to the entered gps time"
+msgstr ""
+
+msgid "Loop"
+msgstr ""
+
+msgid "loops n sec around current position"
+msgstr ""
+
+msgid "Keep centered"
+msgstr ""
+
+msgid "follows the video icon automatically"
+msgstr ""
+
+msgid "Subtitles"
+msgstr ""
+
+msgid "Show subtitles in video"
+msgstr ""
+
+msgid "Jump length"
+msgstr ""
+
+msgid "Set the length of a jump"
+msgstr ""
+
+msgid "Jump in video for x ms"
+msgstr ""
+
+msgid "Loop length"
+msgstr ""
+
+msgid "Set the length around a looppoint"
+msgstr ""
+
+msgid "no deinterlacing"
+msgstr ""
+
+msgid "deinterlacing using line doubling"
+msgstr ""
+
+msgid "deinterlacing using linear interpolation"
+msgstr ""
+
+msgid ""
+"VLC library is not correctly initialized. Please check that VLC {0} is "
+"correctly installed on your system. Its architecture (32/64 bits) must also "
+"be the same as the JRE that runs JOSM."
+msgstr ""
+
+msgid "Jump to"
+msgstr ""
+
+msgid "Jump to GPS time"
+msgstr ""
+
+msgid "Shows current position in the video"
+msgstr ""
+
+msgid "Sync"
+msgstr ""
+
+msgid "Unable to find JNA Java library!"
+msgstr ""
+
+msgid "Unable to find native libvlc library!"
+msgstr ""
+
+msgid "play"
+msgstr ""
+
+msgid "loop"
+msgstr ""
+
+msgid "mute"
+msgstr ""
+
+msgid "Walking Papers Scanned Map"
+msgstr ""
+
+msgid ""
+"Display a map that was previously scanned and uploaded to walking-papers.org"
+msgstr ""
+
+msgid ""
+"Enter a walking-papers.org URL or ID (the bit after the ?id= in the URL)"
+msgstr ""
+
+msgid "Could not read information from walking-papers.org the id \"{0}\""
+msgstr ""
+
+msgid "Walking Papers: {0}"
+msgstr ""
+
+msgid "Walking Papers layer ({0}) in zoom {1}"
+msgstr ""
+
+msgid "Way Download"
+msgstr ""
+
+msgid "Download map data on the end of selected way"
+msgstr ""
+
+msgid ""
+"<html>Neither a node nor a way with an endpoint outside of the<br>current "
+"download areas is selected.<br>Select a node on the start or end of a way or "
+"an entire way first.</html>"
+msgstr ""
+
+msgid "<html>Could not find a unique node to start downloading from.</html>"
+msgstr ""
+
+msgid "<html>There are no ways connected to node ''{0}''. Aborting.</html>"
+msgstr ""
+
+msgid ""
+"Way downloader data inconsistency. Prior connected way ''{0}'' wasn''t "
+"discovered after download"
+msgstr ""
+
+msgid ""
+"<html>There aren''t further connected ways to download.<br>A potential "
+"duplicate node of the currently selected node was found, though.<br><br>The "
+"currently selected node is ''{0}''<br>The potential duplicate node is "
+"''{1}''<br>Merge the duplicate node onto the currently selected node and "
+"continue way downloading?</html>"
+msgstr ""
+
+msgid "Merge duplicate node?"
+msgstr ""
+
+msgid "<html>No more connected ways to download.</html>"
+msgstr ""
+
+msgid "Node ''{0}'' is a junction with more than 2 connected ways."
+msgstr ""
+
+msgid "Enter search expression here.."
+msgstr ""
+
+msgid "Select waypoint to move map"
+msgstr ""
+
+msgid "Waypoint search"
+msgstr ""
+
+msgid "Search after waypoint. Click and move the map view to the waypoint."
+msgstr ""
+
+msgid "Add names from Wikipedia"
+msgstr ""
+
+msgid ""
+"Fetches interwiki links from Wikipedia in order to add several name tags"
+msgstr ""
+
+msgid ""
+"Copies the {0} template to the system clipboard instantiated with the "
+"coordinates of the first selected node"
+msgstr ""
+
+msgid "Copy {0} template"
+msgstr ""
+
+msgid "Fetch Wikipedia articles with coordinates"
+msgstr ""
+
+msgid ""
+"Double click on item to search for object with article name (and center "
+"coordinate)"
+msgstr ""
+
+msgid "Available via WIWOSM server"
+msgstr ""
+
+msgid "Available in local dataset"
+msgstr ""
+
+msgid "Not linked yet"
+msgstr ""
+
+msgid "{0}.Wikipedia.org"
+msgstr ""
+
+msgid "{0}.Wikipedia.org: {1}"
+msgstr ""
+
+msgid "Fetches all coordinates from Wikipedia in the current view"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Category"
+msgstr ""
+
+msgid "Fetches a list of all Wikipedia articles of a category"
+msgstr ""
+
+msgid "Enter the Wikipedia category"
+msgstr ""
+
+msgid "Clipboard"
+msgstr ""
+
+msgid "Pastes Wikipedia articles from the system clipboard"
+msgstr ""
+
+msgid "clipboard"
+msgstr ""
+
+msgid "Open Article"
+msgstr ""
+
+msgid "Opens the Wikipedia article of the selected item in a browser"
+msgstr ""
+
+msgid "Sets the default language for the Wikipedia articles"
+msgstr ""
+
+msgid "Enter the Wikipedia language"
+msgstr ""
+
+msgid ""
+"Adds a ''wikipedia'' tag corresponding to this article to the selected "
+"objects"
+msgstr ""
+
+msgid "The Ultimate WMS Super-speed Turbo Challenge II"
+msgstr ""
+
+msgid "Go driving"
+msgstr ""
+
+msgid "Drive a race car on this layer"
+msgstr ""
diff --git a/i18n/po/gl.po b/i18n/po/gl.po
index 2c29942..ccebc86 100644
--- a/i18n/po/gl.po
+++ b/i18n/po/gl.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2015-02-02 23:45+0000\n"
 "Last-Translator: Adrián Chaves Fernández <adriyetichaves at gmail.com>\n"
 "Language-Team: Galician <proxecto at trasno.net>\n"
@@ -16,8 +16,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:41+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:44+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: gl\n"
 "X-Poedit-Language: Galician\n"
 
@@ -100,22 +100,19 @@ msgstr "Cargando a configuración de imaxes…"
 msgid "Updating user interface"
 msgstr "Actualizando a interface de usuario"
 
-msgid "{0} completed in {1}"
-msgstr "{0} completado en {1}"
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "Ignorando URL de ficheiro mal construído: «{0}»"
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "Ignorando URL mal construído: «{0}»"
 
 msgid "Warning"
 msgstr "Aviso"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "Ignorando URL de ficheiro mal construído: «{0}»"
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 "O parámetro «downloadgps» non acepta nomes de ficheiros ou URL de ficheiro"
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "Ignorando URL mal construído: «{0}»"
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -467,6 +464,9 @@ msgstr "Alternar o panel de diálogos."
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Alternar o panel de diálogos, maximizar a vista do mapa."
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
 "Distribuír os nodos seleccionados de xeito equidistante ao longo dunha liña."
@@ -1130,6 +1130,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr "Escolla vías con ángulos de aproximadamente 90 ou 180 grados."
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr "Pegar"
 
@@ -2099,15 +2123,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr "Rematar debuxo."
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -2129,6 +2144,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2249,9 +2273,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2469,9 +2490,15 @@ msgstr "todos os obxectos"
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr "expresión regular"
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2688,6 +2715,10 @@ msgid "RX"
 msgstr "RX"
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr "A"
 
@@ -2738,6 +2769,9 @@ msgstr "Rango de numeros esperado"
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr "Elemento non esperado. Esperábase {0} mais atopouse {1}"
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr "Mostra non esperada: {0}"
 
@@ -3202,6 +3236,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3328,10 +3380,44 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3537,6 +3623,12 @@ msgstr "texto"
 msgid "areatext"
 msgstr "área de texto"
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3564,13 +3656,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -4192,9 +4284,6 @@ msgstr "Chave da etiqueta máis logo do permitido"
 msgid "Tags with empty values"
 msgstr "Etiquetas con valores baleiros"
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -4204,12 +4293,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4390,13 +4491,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4594,6 +4695,7 @@ msgstr "Premer para pechar o diálogo"
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4816,45 +4918,56 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
-msgstr "Ficheiro"
+msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
-msgstr "Ver"
+msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
-msgstr "Ferramentas"
+msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
-msgstr "Selección"
+msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
-msgstr "Axustes prestablecidos"
+msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
+msgctxt "menu"
+msgid "Help"
+msgstr ""
+
 msgid "Menu: {0}"
 msgstr "Menú: {0}"
 
-msgid "Save and load the current session (list of layers, etc.)"
-msgstr ""
-
 msgid "Edit toolbar"
 msgstr ""
 
@@ -4876,8 +4989,9 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
-msgstr "Son"
+msgstr ""
 
 msgid "Do not hide toolbar"
 msgstr ""
@@ -5000,65 +5114,17 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
+msgid " ({0})"
 msgstr ""
 
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-"<html>Confirme a retirada de <strong>1 obxecto</strong> de <strong>1 "
-"relación</strong>.</html>"
+msgid "{0} completed in {1}"
+msgstr "{0} completado en {1}"
 
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
+msgid "Enlarge"
 msgstr ""
-"<html>Confirme a retirada de <strong>1 obxecto</strong> de <strong>{0} "
-"relacións</strong>.</html>"
 
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
+msgid "Shrink"
 msgstr ""
-"<html>Confirme a retirada<strong>{0} obxectos</strong> de <strong>{1} "
-"relacións</strong>.</html>"
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] "Eliminando {0} obxecto"
-msgstr[1] "Eliminando {0} obxectos"
-
-msgid "Delete objects"
-msgstr "Eliminar o obxecto"
-
-msgid "To delete"
-msgstr "Para eliminar"
-
-msgid "From Relation"
-msgstr "Da relación"
-
-msgid "Pos."
-msgstr "Pos."
-
-msgid "Role"
-msgstr "Rol"
-
-msgid "Click to close the dialog and remove the object from the relations"
-msgstr "Prema para pechar o diálogo e retirar o obxecto das relacións"
-
-msgid "Click to close the dialog and to abort deleting the objects"
-msgstr "Prema para pechar o dialogo e interromper a eliminación de obxectos"
 
 msgid ""
 "<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
@@ -5520,6 +5586,9 @@ msgstr "Manter o seu estado de eliminado"
 msgid "Undecide conflict between deleted state"
 msgstr "Conflito indeciso entre estados de eliminado"
 
+msgid "Role"
+msgstr "Rol"
+
 msgid "Primitive"
 msgstr "Primitiva"
 
@@ -5768,6 +5837,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr "Aplicar este rol a todos os membros"
 
+msgid "Pos."
+msgstr "Pos."
+
 msgid "Orig. Way"
 msgstr "Vía orixinal"
 
@@ -5933,6 +6005,47 @@ msgstr "Resolver conflitos"
 msgid "Resolve conflicts for ''{0}''"
 msgstr "Resolver os conflitos de ''{0}''"
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+"<html>Confirme a retirada de <strong>1 obxecto</strong> de <strong>1 "
+"relación</strong>.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Confirme a retirada de <strong>1 obxecto</strong> de <strong>{0} "
+"relacións</strong>.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Confirme a retirada<strong>{0} obxectos</strong> de <strong>{1} "
+"relacións</strong>.</html>"
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] "Eliminando {0} obxecto"
+msgstr[1] "Eliminando {0} obxectos"
+
+msgid "Delete objects"
+msgstr "Eliminar o obxecto"
+
+msgid "To delete"
+msgstr "Para eliminar"
+
+msgid "From Relation"
+msgstr "Da relación"
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr "Prema para pechar o diálogo e retirar o obxecto das relacións"
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr "Prema para pechar o dialogo e interromper a eliminación de obxectos"
+
 msgid "Filter objects and hide/disable them."
 msgstr "Filtrar obxectos e agochaos/desactivaos."
 
@@ -6037,7 +6150,7 @@ msgstr "Información do obxecto avanzada"
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -6165,6 +6278,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -6174,17 +6292,48 @@ msgstr ""
 msgid "unknown"
 msgstr "descoñecido"
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -6230,6 +6379,12 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr "Activar"
 
@@ -6359,6 +6514,12 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
+msgid "Mini map"
+msgstr ""
+
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
 msgid "List of notes"
 msgstr ""
 
@@ -6417,10 +6578,15 @@ msgstr "ID do Obxecto"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "Introduza o ID do obxecto que debería ser descargado"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6449,6 +6615,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr "Relacións: {0}"
 
+msgid "Selection"
+msgstr "Selección"
+
 msgid "Open a selection list window."
 msgstr "Abrir unha ventá de lista de selección."
 
@@ -6542,6 +6711,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr "Arranxar"
 
@@ -7170,6 +7345,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -7261,14 +7442,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7444,6 +7624,12 @@ msgstr "Ordenar os membros da relación"
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr "Invertir a orde dos membros da relación"
 
@@ -8006,6 +8192,9 @@ msgstr "Cargando o historial para a relación {0}"
 msgid "Node {0}"
 msgstr "Nodo {0}"
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr "Zoom ao nodo"
 
@@ -8873,6 +9062,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] "{0} obxecto para eliminar:"
 msgstr[1] "{0} obxectos para eliminar:"
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr "Ampliación automática"
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr "Cambiar a resolución"
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr "Personalizar as cores"
 
@@ -8926,6 +9215,9 @@ msgstr "Gardar ficheiro GPX"
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8946,7 +9238,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -9031,80 +9323,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr "Gardar ficheiro OSM"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-
-msgid "Auto Zoom"
-msgstr "Ampliación automática"
-
-msgid "Auto load tiles"
-msgstr ""
-
-msgid "Show Errors"
-msgstr ""
-
-msgid "Load Tile"
-msgstr ""
-
-msgid "Show Tile Info"
-msgstr ""
-
-msgid "Load All Tiles"
-msgstr ""
-
-msgid "Load All Error Tiles"
-msgstr ""
-
-msgid "Increase zoom"
-msgstr ""
-
-msgid "Decrease zoom"
-msgstr ""
-
-msgid "Snap to tile size"
-msgstr ""
-
-msgid "Flush Tile Cache"
-msgstr ""
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
@@ -9114,56 +9332,30 @@ msgstr "Erros de validación"
 msgid "No validation errors"
 msgstr "Sen erros de validación"
 
-msgid "Blank Layer"
-msgstr "Capa en branco"
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "Download visible tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Change resolution"
-msgstr "Cambiar a resolución"
-
-msgid "Reload erroneous tiles"
-msgstr ""
-
-msgid "Alpha channel"
-msgstr "Canle alfa:"
-
-msgid "Automatically change resolution"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Set WMS Bookmark"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Automatic downloading"
-msgstr "Descargar automaticamente"
-
-msgid "Zoom to native resolution"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Supported projections are: {0}"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
-msgstr "Versión de ficheiro WMS non admitido; atopouse {0}, esperabase {1}"
-
-msgid "Save WMS file"
-msgstr ""
+msgid "Try Again"
+msgstr "Tentar de novo"
 
-msgid "Correlate to GPX"
+msgid "No images could be matched!"
 msgstr ""
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
@@ -9250,24 +9442,9 @@ msgstr "Zona horaria: "
 msgid "Offset:"
 msgstr "Desprazamento:"
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
 msgid "Correlate"
 msgstr "Correlacionar"
 
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr "Tentar de novo"
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9463,9 +9640,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr "imaxes JPEG (*.jpg)"
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9528,9 +9702,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr "Área máxima por petición:"
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -10174,15 +10345,15 @@ msgstr "Pechar o diálogo de configuración e descartar as modificacións."
 msgid "Save the preferences and close the dialog"
 msgstr "Gardar a configuración e pechar o diálogo."
 
-msgid "Download plugins"
-msgstr "Descargar complementos"
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr "Debes reiniciar JOSM para que algúns parámetros se fagan efectivos."
 
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr "Descargar complementos"
+
 msgid "Icon paths:"
 msgstr "Rutas de iconas:"
 
@@ -11016,6 +11187,21 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
+msgid "1. Enter getCapabilities URL"
+msgstr ""
+
+msgid "2. Enter name for this layer"
+msgstr ""
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr ""
 
@@ -11034,6 +11220,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -11055,6 +11253,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -11097,9 +11298,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr "Capa"
 
@@ -11124,37 +11322,22 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr "Xestor de descarga:"
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr "Superposición de teselas"
-
-msgid "% of east:"
-msgstr "% cara o Leste"
-
-msgid "% of north:"
-msgstr "% cara o Norte"
+msgid "Tile size:"
+msgstr ""
 
 msgid "Auto save enabled"
 msgstr ""
@@ -12097,6 +12280,14 @@ msgstr "Aplicar axuste preestablecido"
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] "Cambiar {0} obxecto"
@@ -12205,6 +12396,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr "Axustes prestablecidos"
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12475,6 +12669,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -13032,6 +13229,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr "ficheiros WMS (*.wms)"
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr "Versión de ficheiro WMS non admitido; atopouse {0}, esperabase {1}"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -13439,6 +13639,19 @@ msgstr[1] ""
 "O complemento {0} precisa {1} complementos que non foron atopados. Os "
 "complementos faltantes son:"
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -14456,6 +14669,9 @@ msgstr "Actualizar"
 msgid "Update directory listing."
 msgstr "Actualizar listado de directorios."
 
+msgid "View"
+msgstr "Ver"
+
 msgid "Blue:"
 msgstr "Azul:"
 
@@ -14495,7 +14711,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -14507,9 +14723,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14618,6 +14831,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14631,12 +14847,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14673,10 +14895,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14703,6 +14931,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14727,7 +14958,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14742,6 +14973,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14754,12 +14988,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14780,6 +15008,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14812,10 +15043,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14845,6 +15073,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14860,154 +15094,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
+msgstr ""
+
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
+msgstr ""
+
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Przemyśl: Budynki (buildings)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -15022,9 +15262,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -15154,6 +15403,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -15169,7 +15433,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -15495,6 +15759,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15582,11 +15851,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15642,7 +15906,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15657,9 +15921,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr "Non engade ningún xiro á esquerda para conxuntos de 4 ou 5 vías"
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15751,6 +16012,14 @@ msgstr ""
 "Este complemento simplifica o cartografiado e edición de rutas de transporte "
 "públicos."
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15795,6 +16064,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15881,9 +16153,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr "Escolla unha secuencia non ramificada de vías conectadas."
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -16291,6 +16560,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -16315,10 +16592,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -16335,6 +16608,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -16351,11 +16628,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -16371,6 +16660,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -16383,6 +16676,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -16410,6 +16707,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr "De pago"
 
@@ -16801,6 +17110,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr "Sen clasificar"
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr "Lugar de paso"
 
@@ -16877,6 +17189,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr "Rúa (Tipo descoñecido)"
 
@@ -17414,6 +17729,12 @@ msgstr "Rádar de tráfico"
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17604,8 +17925,13 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
 msgid "Water"
-msgstr "Auga"
+msgstr ""
+
+msgctxt "sub group"
+msgid "Water"
+msgstr ""
 
 msgid "Drain"
 msgstr "Desaugue"
@@ -17657,6 +17983,10 @@ msgstr "Reservorio"
 msgid "Covered Reservoir"
 msgstr "Depósito de auga"
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17798,6 +18128,120 @@ msgstr ""
 msgid "public"
 msgstr "público"
 
+msgid "Marine Fuel"
+msgstr ""
+
+msgid "Agip"
+msgstr "Agip"
+
+msgid "Aral"
+msgstr "Aral"
+
+msgid "Avia"
+msgstr "Avia"
+
+msgid "BP"
+msgstr "BP"
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr "Esso"
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr "OMV"
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr "Q8"
+
+msgid "Repsol"
+msgstr "Repsol"
+
+msgid "Shell"
+msgstr "Shell"
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr "Statoil"
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr "Tamoil"
+
+msgid "Texaco"
+msgstr "Texaco"
+
+msgid "Total"
+msgstr "Total"
+
+msgid "Independent"
+msgstr "Independente"
+
+msgid "Fuel types:"
+msgstr "Tipos de combustíbel:"
+
+msgid "Diesel"
+msgstr "Diesel"
+
+msgid "Bio Diesel"
+msgstr "Bio Diesel"
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr "91 octanos"
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr "95 octanos"
+
+msgid "Octane 98"
+msgstr "98 octanos"
+
+msgid "Octane 100"
+msgstr "100 octanos"
+
+msgid "E10 (10% Ethanol mix)"
+msgstr "E10 (mezcla ao 10% de etanol)"
+
+msgid "E85 (85% Ethanol mix)"
+msgstr "E85 (mezcla ao 85% de etanol)"
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr "GLP (Gas licuado do petróleo)"
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr "GCN(Gas Natural Comprimido)"
+
 msgid "Pier"
 msgstr "Embarcadoiro"
 
@@ -17914,6 +18358,9 @@ msgstr "Tope de vía"
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr "Remonte"
 
@@ -18037,78 +18484,6 @@ msgstr ""
 msgid "Fuel"
 msgstr "Gasolineira"
 
-msgid "Agip"
-msgstr "Agip"
-
-msgid "Aral"
-msgstr "Aral"
-
-msgid "Avia"
-msgstr "Avia"
-
-msgid "BP"
-msgstr "BP"
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr "Esso"
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr "OMV"
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr "Q8"
-
-msgid "Repsol"
-msgstr "Repsol"
-
-msgid "Shell"
-msgstr "Shell"
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr "Statoil"
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr "Tamoil"
-
-msgid "Texaco"
-msgstr "Texaco"
-
-msgid "Total"
-msgstr "Total"
-
-msgid "Independent"
-msgstr "Independente"
-
 msgid "With shop"
 msgstr "Con tenda"
 
@@ -18118,51 +18493,12 @@ msgstr "conveniencia"
 msgid "kiosk"
 msgstr "quiosco"
 
-msgid "Fuel types:"
-msgstr "Tipos de combustíbel:"
-
-msgid "Diesel"
-msgstr "Diesel"
-
-msgid "Bio Diesel"
-msgstr "Bio Diesel"
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr "Diesel (Gas a líquido - diesel ultimate)"
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr "Diesel para Vehiculos pesados"
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr "91 octanos"
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr "95 octanos"
-
-msgid "Octane 98"
-msgstr "98 octanos"
-
-msgid "Octane 100"
-msgstr "100 octanos"
-
-msgid "E10 (10% Ethanol mix)"
-msgstr "E10 (mezcla ao 10% de etanol)"
-
-msgid "E85 (85% Ethanol mix)"
-msgstr "E85 (mezcla ao 85% de etanol)"
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr "GLP (Gas licuado do petróleo)"
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr "GCN(Gas Natural Comprimido)"
-
 msgid "1/25 mix (mofa/moped)"
 msgstr "Mestura 1/25 (mofa/moped)"
 
@@ -18381,9 +18717,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr "segmento da ruta"
-
 msgid "stop position"
 msgstr ""
 
@@ -18402,6 +18735,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr "segmento da ruta"
+
 msgid "Route Master"
 msgstr ""
 
@@ -18604,6 +18940,12 @@ msgstr "Hotel"
 msgid "Stars"
 msgstr "Estrelas"
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr "Motel"
 
@@ -18694,6 +19036,9 @@ msgstr "sandwich"
 msgid "sushi"
 msgstr "sushi"
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18908,6 +19253,9 @@ msgstr "sauna"
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -19395,8 +19743,8 @@ msgstr "Amosar a presión atmosférica"
 msgid "Shows humidity"
 msgstr "Amosar humidade"
 
-msgid "Recycling"
-msgstr "Reciclaxe"
+msgid "Recycling Container"
+msgstr ""
 
 msgid "Batteries"
 msgstr "Baterías"
@@ -19404,19 +19752,46 @@ msgstr "Baterías"
 msgid "Cans"
 msgstr "Latas"
 
-msgid "Glass"
-msgstr "Vidro"
+msgid "Cardboard"
+msgstr ""
+
+msgid "Electrical Appliances"
+msgstr ""
+
+msgid "Glass"
+msgstr "Vidro"
+
+msgid "Glass Bottles"
+msgstr ""
+
+msgid "Green Waste"
+msgstr ""
 
 msgid "Paper"
 msgstr "Papel"
 
+msgid "Plastic"
+msgstr ""
+
+msgid "Plastic Bottles"
+msgstr ""
+
+msgid "Plastic Packaging"
+msgstr ""
+
 msgid "Scrap Metal"
 msgstr "Chatarra"
 
-msgid "container"
+msgid "Shoes"
+msgstr "Zapatos"
+
+msgid "Small Appliances"
 msgstr ""
 
-msgid "centre"
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
 msgstr ""
 
 msgid "Waste Basket/Trash Can"
@@ -19620,6 +19995,9 @@ msgstr "Tiro con arco"
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr "Alpinismo"
 
@@ -19795,12 +20173,18 @@ msgstr "Béisbol"
 msgid "Basketball"
 msgstr "Baloncesto"
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr "Voleibol"
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr "Golf"
 
@@ -19816,14 +20200,14 @@ msgstr ""
 msgid "Cricket"
 msgstr "Críket"
 
-msgid "Cricket Nets"
-msgstr "Críket con redes"
-
 msgid "Croquet"
 msgstr "Croquet"
 
-msgid "Hockey"
-msgstr "Hockey"
+msgid "Field Hockey"
+msgstr ""
+
+msgid "Ice Hockey"
+msgstr ""
 
 msgid "Pelota"
 msgstr "Pelota vasca"
@@ -19846,9 +20230,6 @@ msgstr ""
 msgid "Motocross"
 msgstr "Motocross"
 
-msgid "Safety Training"
-msgstr "Entrenamento Seguro"
-
 msgid "Model Aerodrome"
 msgstr "Aeródromo de Aeromodelismo"
 
@@ -19867,9 +20248,6 @@ msgstr ""
 msgid "RC Car"
 msgstr "Coches RC"
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr "Feito polo home"
 
@@ -19942,6 +20320,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -21262,9 +21648,6 @@ msgstr ""
 msgid "Boutique"
 msgstr "Boutique"
 
-msgid "Shoes"
-msgstr "Zapatos"
-
 msgid "Outdoor"
 msgstr "Exteriores"
 
@@ -22277,12 +22660,12 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
-msgstr "Número do fax"
-
 msgid "Email Address"
 msgstr "Enderezo de correo electrónico"
 
+msgid "Fax Number"
+msgstr "Número do fax"
+
 msgid "Image"
 msgstr "Imaxe"
 
@@ -22707,6 +23090,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22731,6 +23117,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22791,6 +23189,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22881,9 +23282,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -23253,6 +23663,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -23307,9 +23720,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -24054,47 +24464,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -24103,10 +24522,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debug"
+msgstr ""
+
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24721,6 +25152,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr "Capa en branco"
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25978,222 +26412,528 @@ msgstr "Executando a aproximación Douglas-Peucker…"
 msgid "Removing duplicate nodes..."
 msgstr "Retirando nodos duplicados…"
 
-msgid "Lakewalker trace"
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr "Un erro descoñecido aconteceu"
+
+msgid "east"
+msgstr "leste"
+
+msgid "northeast"
+msgstr "nordeste"
+
+msgid "north"
+msgstr "norte"
+
+msgid "northwest"
+msgstr "noroeste"
+
+msgid "west"
+msgstr "oeste"
+
+msgid "southwest"
+msgstr "sudoeste"
+
+msgid "south"
+msgstr "sur"
+
+msgid "southeast"
+msgstr "sudeste"
+
+msgid "coastline"
+msgstr "liña de costa"
+
+msgid "land"
+msgstr "terra"
+
+msgid "Maximum number of segments per way"
+msgstr "Máximo numero de segmentos por vía"
+
+msgid "Maximum number of nodes in initial trace"
+msgstr "Máximo numero de nodos na traza inicial"
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr "Cambiar todas as trazas ao leste (grados)"
+
+msgid "Shift all traces to north (degrees)"
+msgstr "Cambiar todas as trazas ao norte (grados)"
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr "Marcar vía como"
+
+msgid "WMS Layer"
+msgstr "Capa WMS"
+
+msgid "Maximum cache size (MB)"
+msgstr "Máximo tamaño da caché (MB)"
+
+msgid "Maximum cache age (days)"
+msgstr "Máxima idade da caché (dias)"
+
+msgid "Source text"
+msgstr "Fonte de texto"
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr "Mover todos os punto na dirección este (grados). Predeterminado 0."
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr "Mover todos os punto na dirección norte (grados). Predeterminado 0."
+
+msgid "Direction to search for land. Default east."
+msgstr "Dirección para buscar por terra. Predeterminado este."
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr "Tamaño máximo de cada directorio da caché. Predeterminado 300MB"
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+"Idade máxima de cada ficheiro de caché en días. Predeterminado son 100"
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr "Non se puido obter a imaxe"
+
+msgid "Connection Failed"
+msgstr "Fallou a conexión"
+
+msgid "Not connected"
+msgstr "Desconectado"
+
+msgid "Connecting"
+msgstr "Conectando"
+
+msgid "Connected"
+msgstr "Conectado"
+
+msgid "no name"
+msgstr "sen nome"
+
+msgid "Live GPS"
+msgstr "GPX Vivo"
+
+msgid "Show GPS data."
+msgstr "Amosar datos do GPS"
+
+msgid "Status"
+msgstr "Estado"
+
+msgid "Way Info"
+msgstr "Información da vía"
+
+msgid "Speed"
+msgstr "Velocidade"
+
+msgid "Course"
+msgstr "Campo"
+
+msgid "LiveGPS layer"
+msgstr "Capa de GPSVivo"
+
+msgid "Capture GPS Track"
+msgstr "Capturar camiñoCamiños GPS"
+
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgstr ""
+"Conectar ao servidor gpsd e amosr a posición actual nunha capa LiveGPS"
+
+msgid "Center Once"
+msgstr "Centrar unha vez"
+
+msgid "Center the LiveGPS layer to current position."
+msgstr "Centrar a capa LiveGPS á posición actual."
+
+msgid "Auto-Center"
+msgstr "Auto-Centrar"
+
+msgid "Continuously center the LiveGPS layer to current position."
+msgstr ""
+
+msgid "Open MapDust"
+msgstr ""
+
+msgid "MapDust bug reports"
+msgstr ""
+
+msgid "Activates the MapDust bug reporter plugin"
+msgstr ""
+
+msgid "Missing input data"
+msgstr ""
+
+msgid "Mapillary Images"
+msgstr ""
+
+msgid "Mapillary layer"
+msgstr ""
+
+msgid "Total images:"
+msgstr ""
+
+msgid "images"
+msgstr ""
+
+msgid "Mapillary"
+msgstr ""
+
+msgid "Create Mapillary layer"
+msgstr ""
+
+msgid "Start Mapillary layer"
+msgstr ""
+
+msgid "Download Mapillary images in current view"
+msgstr ""
+
+msgid "Export pictures"
+msgstr ""
+
+msgid "Export Mapillary pictures"
+msgstr ""
+
+msgid "Export images"
+msgstr ""
+
+msgid "Import pictures"
+msgstr ""
+
+msgid "Import local pictures"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer"
+msgstr ""
+
+msgid "Select pictures"
+msgstr ""
+
+msgid "Import pictures into sequence"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer in a sequence"
+msgstr ""
+
+msgid "Join mode"
+msgstr ""
+
+msgid "Join/unjoin pictures"
+msgstr ""
+
+msgid "Join Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures"
+msgstr ""
+
+msgid "Upload Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures."
+msgstr ""
+
+msgid "Walk mode"
+msgstr ""
+
+msgid "Start walk mode"
+msgstr ""
+
+msgid "Zoom to selected image"
+msgstr ""
+
+msgid "Zoom to the currently selected Mapillary image"
+msgstr ""
+
+msgid "Uploaded {0} images"
+msgstr ""
+
+msgid "Approve upload on the website"
+msgstr ""
+
+msgid "View in website"
+msgstr ""
+
+msgid "Copy key"
 msgstr ""
 
-msgid "An unknown error has occurred"
-msgstr "Un erro descoñecido aconteceu"
+msgid "Copy key tag"
+msgstr ""
 
-msgid "east"
-msgstr "leste"
+msgid "Edit on website"
+msgstr ""
 
-msgid "northeast"
-msgstr "nordeste"
+msgid "Export all images"
+msgstr ""
 
-msgid "north"
-msgstr "norte"
+msgid "Export selected sequence"
+msgstr ""
 
-msgid "northwest"
-msgstr "noroeste"
+msgid "Export selected images"
+msgstr ""
 
-msgid "west"
-msgstr "oeste"
+msgid "Rewrite imported images"
+msgstr ""
 
-msgid "southwest"
-msgstr "sudoeste"
+msgid "Select a folder"
+msgstr ""
 
-msgid "south"
-msgstr "sur"
+msgid "Explore"
+msgstr ""
 
-msgid "southeast"
-msgstr "sudeste"
+msgid "Select a directory"
+msgstr ""
 
-msgid "coastline"
-msgstr "liña de costa"
+msgid "Speed limit"
+msgstr ""
 
-msgid "land"
-msgstr "terra"
+msgid "Give way"
+msgstr ""
 
-msgid "Maximum number of segments per way"
-msgstr "Máximo numero de segmentos por vía"
+msgid "No entry"
+msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
-msgstr "Máximo numero de nodos na traza inicial"
+msgid "Intersection danger"
+msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "No turn"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No parking"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
-msgstr "Cambiar todas as trazas ao leste (grados)"
+msgid "No overtaking"
+msgstr ""
 
-msgid "Shift all traces to north (degrees)"
-msgstr "Cambiar todas as trazas ao norte (grados)"
+msgid "Pedestrian crossing"
+msgstr ""
 
-msgid "Direction to search for land"
+msgid "Years"
 msgstr ""
 
-msgid "Tag ways as"
-msgstr "Marcar vía como"
+msgid "Months"
+msgstr ""
 
-msgid "WMS Layer"
-msgstr "Capa WMS"
+msgid "Days"
+msgstr ""
 
-msgid "Maximum cache size (MB)"
-msgstr "Máximo tamaño da caché (MB)"
+msgid "Mapillary filter"
+msgstr ""
 
-msgid "Maximum cache age (days)"
-msgstr "Máxima idade da caché (dias)"
+msgid "Open Mapillary filter dialog"
+msgstr ""
 
-msgid "Source text"
-msgstr "Fonte de texto"
+msgid "Downloaded images"
+msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Only images with signs"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Next picture"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
-msgstr "Mover todos os punto na dirección este (grados). Predeterminado 0."
+msgid "Shows the next picture in the sequence"
+msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
-msgstr "Mover todos os punto na dirección norte (grados). Predeterminado 0."
+msgid "Previous picture"
+msgstr ""
 
-msgid "Direction to search for land. Default east."
-msgstr "Dirección para buscar por terra. Predeterminado este."
+msgid "Shows the previous picture in the sequence"
+msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Jump to red"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
-msgstr "Tamaño máximo de cada directorio da caché. Predeterminado 300MB"
+msgid "Jump to blue"
+msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
-"Idade máxima de cada ficheiro de caché en días. Predeterminado son 100"
 
-msgid "Data source text. Default is Landsat."
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Play"
 msgstr ""
 
-msgid "Could not acquire image"
-msgstr "Non se puido obter a imaxe"
+msgid "Continues with the paused walk."
+msgstr ""
 
-msgid "Connection Failed"
-msgstr "Fallou a conexión"
+msgid "Pause"
+msgstr ""
 
-msgid "Not connected"
-msgstr "Desconectado"
+msgid "Pauses the walk."
+msgstr ""
 
-msgid "Connecting"
-msgstr "Conectando"
+msgid "Reverse buttons position when displaying images."
+msgstr ""
 
-msgid "Connected"
-msgstr "Conectado"
+msgid "Display hour when the picture was taken"
+msgstr ""
 
-msgid "no name"
-msgstr "sen nome"
+msgid "Use 24 hour format"
+msgstr ""
 
-msgid "Live GPS"
-msgstr "GPX Vivo"
+msgid "Move to picture''s location with next/previous buttons"
+msgstr ""
 
-msgid "Show GPS data."
-msgstr "Amosar datos do GPS"
+msgid "Download mode: "
+msgstr ""
 
-msgid "Status"
-msgstr "Estado"
+msgid "Upload selected sequence"
+msgstr ""
 
-msgid "Way Info"
-msgstr "Información da vía"
+msgid "Delete after upload"
+msgstr ""
 
-msgid "Speed"
-msgstr "Velocidade"
+msgid "Wait for full quality pictures"
+msgstr ""
 
-msgid "Course"
-msgstr "Campo"
+msgid "Follow selected image"
+msgstr ""
 
-msgid "LiveGPS layer"
-msgstr "Capa de GPSVivo"
+msgid "Go forward"
+msgstr ""
 
-msgid "Capture GPS Track"
-msgstr "Capturar camiñoCamiños GPS"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
-"Conectar ao servidor gpsd e amosr a posición actual nunha capa LiveGPS"
 
-msgid "Center Once"
-msgstr "Centrar unha vez"
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Center the LiveGPS layer to current position."
-msgstr "Centrar a capa LiveGPS á posición actual."
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Auto-Center"
-msgstr "Auto-Centrar"
+msgid "2 images unjoined"
+msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Downloading"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid "Select mode"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "No images found"
 msgstr ""
 
-msgid "Export"
+msgid "Finished upload"
+msgstr ""
+
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -26214,6 +26954,9 @@ msgstr "Camiño escollido"
 msgid "Selection Area"
 msgstr "Area seleccionada"
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr "Ángulo"
 
@@ -26276,47 +27019,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr "Non foi posíbel atopar nodos de vías. Comprobe a súa selección."
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr "Sobre o complemento"
 
@@ -26549,6 +27251,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr "Ferramentas"
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27768,6 +28473,27 @@ msgstr "Transporte público: activar puntos de referencia"
 msgid "Public Transport: Edit waypoint name"
 msgstr "Transporte público: editar o nome do punto de referencia"
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27939,6 +28665,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27948,6 +28677,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -28130,6 +28862,9 @@ msgstr "Novo valor para {0}"
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -28308,6 +29043,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr "Editor Seamap"
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -28317,6 +29085,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -28553,9 +29324,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -30053,9 +30821,6 @@ msgstr "Busca de punto de referencia"
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/he.po b/i18n/po/he.po
index 779d4bc..afe9b69 100644
--- a/i18n/po/he.po
+++ b/i18n/po/he.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2013-03-30 13:38+0000\n"
 "Last-Translator: Dirk Stöcker <launchpad at dstoecker.de>\n"
 "Language-Team: Hebrew <he at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:43+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:45+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: he\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -97,21 +97,18 @@ msgstr ""
 msgid "Updating user interface"
 msgstr ""
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "מתעלם מ-URL לא תקין לקובץ: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "מתעלם מ-URL לא תקין: \"{0}\""
 
 msgid "Warning"
 msgstr "אזהרה"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "מתעלם מ-URL לא תקין לקובץ: \"{0}\""
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr "הפרמטר \"downloadgps\" אינו מקבל שמות קובץ או כתובות URL של קבצים"
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "מתעלם מ-URL לא תקין: \"{0}\""
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -445,6 +442,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr "פזר את הצמתים הנבחרים במרחקים  שווים לאורך קו"
 
@@ -1032,6 +1032,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr "הדבק"
 
@@ -1951,15 +1975,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr "הפסק לצייר."
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -1981,6 +1996,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2099,9 +2123,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2317,9 +2338,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr "ביטוי רגולרי"
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2533,6 +2560,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2578,6 +2609,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3030,6 +3064,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3147,10 +3199,44 @@ msgctxt "compass"
 msgid "E"
 msgstr "מזרח"
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3340,6 +3426,12 @@ msgstr "טקסט"
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3367,13 +3459,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -3993,9 +4085,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr "תוויות עם ערכים ריקים"
 
-msgid "Invalid property key"
-msgstr "מפתח תכונה לא תקין"
-
 msgid "Invalid white space in property key"
 msgstr "רווח לא תקין במפתח תכונה"
 
@@ -4005,12 +4094,24 @@ msgstr "ערכי תכונות מתחילים או מסתיימים ברווח"
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4191,15 +4292,15 @@ msgstr "נקודת דרך נמצאת ליד דרך אחרת"
 msgid "Connected way end node near other way"
 msgstr "נקודת קצה מחוברת של דרך נמצאת ליד דרך אחרת"
 
+msgid "Unconnected nodes without physical tags"
+msgstr ""
+
 msgid "Untagged and unconnected nodes"
 msgstr ""
 
 msgid "This test checks for untagged nodes that are not part of any way."
 msgstr "מבחן זה מחפש נקודות ללא תוויות שאינן חלק מדרך."
 
-msgid "Unconnected nodes without physical tags"
-msgstr ""
-
 msgid "No tags"
 msgstr ""
 
@@ -4395,6 +4496,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4608,45 +4710,56 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
-msgstr "קובץ"
+msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
-msgstr "תצוגה"
+msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
-msgstr "כלים"
+msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
-msgstr "בחירה"
+msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
 msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
+msgctxt "menu"
+msgid "Help"
+msgstr ""
+
 msgid "Menu: {0}"
 msgstr "תפריט: {0}"
 
-msgid "Save and load the current session (list of layers, etc.)"
-msgstr ""
-
 msgid "Edit toolbar"
 msgstr ""
 
@@ -4668,8 +4781,9 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
-msgstr "שמע"
+msgstr ""
 
 msgid "Do not hide toolbar"
 msgstr ""
@@ -4790,58 +4904,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
+msgid " ({0})"
 msgstr ""
 
-msgid "Pos."
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "Role"
-msgstr "תפקיד"
-
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5278,6 +5350,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr "תפקיד"
+
 msgid "Primitive"
 msgstr ""
 
@@ -5518,6 +5593,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5664,6 +5742,41 @@ msgstr "פתור התנגשויות"
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5767,7 +5880,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5895,6 +6008,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5904,48 +6022,79 @@ msgstr ""
 msgid "unknown"
 msgstr "לא ידוע"
 
-msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+msgid "Enter the coordinates for the new node."
 msgstr ""
 
-msgid "Projected coordinates:"
+msgid ""
+"You can separate longitude and latitude with space, comma or semicolon."
 msgstr ""
 
 msgid ""
-"Enter easting and northing (x and y) separated by space, comma or semicolon."
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
 msgstr ""
 
-msgid "Lat/Lon"
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
 msgstr ""
 
-msgid "East/North"
+msgid "Coordinate value can be in one of three formats:"
 msgstr ""
 
-msgid "Please enter a GPS coordinates"
+msgid "<i>degrees</i><tt>°</tt>"
 msgstr ""
 
-msgid "Please enter a Easting and Northing"
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
 msgstr ""
 
-msgid "Toggle visibility of layer: {0}"
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
 msgstr ""
 
-msgid "Open a list of all loaded layers."
-msgstr "פתח רשימה המכילה את כל השכבות שנטענו."
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
 
-msgid "Delete the selected layers."
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
 msgstr ""
 
-msgid "Show/hide"
+msgid "Some examples:"
+msgstr ""
+
+msgid "Projected coordinates:"
+msgstr ""
+
+msgid ""
+"Enter easting and northing (x and y) separated by space, comma or semicolon."
+msgstr ""
+
+msgid "Lat/Lon"
+msgstr ""
+
+msgid "East/North"
+msgstr ""
+
+msgid "Please enter a GPS coordinates"
+msgstr ""
+
+msgid "Please enter a Easting and Northing"
+msgstr ""
+
+msgid "Toggle visibility of layer: {0}"
+msgstr ""
+
+msgid "Open a list of all loaded layers."
+msgstr "פתח רשימה המכילה את כל השכבות שנטענו."
+
+msgid "Delete the selected layers."
+msgstr ""
+
+msgid "Show/hide"
 msgstr ""
 
 msgid "Toggle visible state of the selected layer."
@@ -5960,6 +6109,12 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr ""
 
@@ -6089,6 +6244,12 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
+msgid "Mini map"
+msgstr ""
+
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
 msgid "List of notes"
 msgstr ""
 
@@ -6147,10 +6308,15 @@ msgstr ""
 msgid "Enter the ID of the object that should be downloaded"
 msgstr ""
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6179,6 +6345,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr "יחסים: {0}"
 
+msgid "Selection"
+msgstr "בחירה"
+
 msgid "Open a selection list window."
 msgstr "פתח חלון רשימת בחירה."
 
@@ -6270,6 +6439,12 @@ msgstr "פתח חלון תקינות נתונים."
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr "תקן"
 
@@ -6864,6 +7039,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6955,14 +7136,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7135,6 +7315,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7671,6 +7857,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8516,6 +8705,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr "טען את כל המשטחים"
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr "שנה רזולוציה"
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr "טען משטח"
+
+msgid "Increase zoom"
+msgstr "הגדל"
+
+msgid "Decrease zoom"
+msgstr "הקטן"
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr "התאם צבעים"
 
@@ -8569,6 +8858,9 @@ msgstr "שמור קובץ GPX"
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8589,7 +8881,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8674,217 +8966,117 @@ msgstr ""
 msgid "Save OSM file"
 msgstr "שמור קובץ OSM"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
+msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
+msgid "Validation errors"
+msgstr "שגיאת תקינות"
+
+msgid "No validation errors"
+msgstr "אין שגיאות תקינות"
+
+msgid "Set WMS Bookmark"
 msgstr ""
 
-msgid "Auto Zoom"
+msgid ""
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Auto load tiles"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Show Errors"
+msgid "Invalid timezone"
+msgstr "אזור זמן שגוי"
+
+msgid "Invalid offset"
+msgstr "היסט שגוי"
+
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Load Tile"
-msgstr "טען משטח"
+msgid "Try Again"
+msgstr ""
 
-msgid "Show Tile Info"
+msgid "No images could be matched!"
 msgstr ""
 
-msgid "Load All Tiles"
-msgstr "טען את כל המשטחים"
+msgid "GPX Files (*.gpx *.gpx.gz)"
+msgstr "קבצי GPX‏ (*.gpx *.gpx.gz)"
 
-msgid "Load All Error Tiles"
+msgid "File {0} is loaded yet under the name \"{1}\""
 msgstr ""
 
-msgid "Increase zoom"
-msgstr "הגדל"
+msgid "Error while parsing {0}"
+msgstr "שגיאה בעת ניתוח {0}"
 
-msgid "Decrease zoom"
-msgstr "הקטן"
+msgid "Could not read \"{0}\""
+msgstr "לא ניתן לקרוא את \"{0}\""
 
-msgid "Snap to tile size"
+msgid ""
+"<html>Take a photo of your GPS receiver while it displays the "
+"time.<br>Display that photo here.<br>And then, simply capture the time you "
+"read on the photo and select a timezone<hr></html>"
 msgstr ""
 
-msgid "Flush Tile Cache"
+msgid "Photo time (from exif):"
+msgstr "זמן צילום (מ-EXIF)"
+
+msgid "Gps time (read from the above photo): "
+msgstr "זמן GPS (נקרא מהצילום למעלה): "
+
+msgid "I am in the timezone of: "
+msgstr "אני באזור זמן: "
+
+msgid "No date"
+msgstr "אין תאריך"
+
+msgid "Open another photo"
+msgstr "פתח תמונה אחרת"
+
+msgid "Synchronize time from a photo of the GPS receiver"
 msgstr ""
 
-msgid "zoom in to load any tiles"
+msgid ""
+"Error while parsing the date.\n"
+"Please use the requested format"
+msgstr "שגיאה בזמן ניתוח התאריך:"
+
+msgid "Invalid date"
+msgstr "תאריך שגוי"
+
+msgid "<No GPX track loaded yet>"
 msgstr ""
 
-msgid "zoom in to load more tiles"
+msgid "GPX track: "
 msgstr ""
 
-msgid "increase zoom level to see more detail"
+msgid "Open another GPX trace"
 msgstr ""
 
-msgid "No tiles at this zoom level"
+msgid ""
+"<html>Use photo of an accurate clock,<br>e.g. GPS receiver display</html>"
 msgstr ""
 
-msgid "Current zoom: {0}"
+msgid "Auto-Guess"
 msgstr ""
 
-msgid "Display zoom: {0}"
+msgid "Matches first photo with first gpx point"
 msgstr ""
 
-msgid "Pixel scale: {0}"
+msgid "Manual adjust"
 msgstr ""
 
-msgid "Best zoom: {0}"
+msgid "Override position for: "
 msgstr ""
 
-msgid "Cache stats: {0}"
+msgid "Images with geo location in exif data ({0}/{1})"
 msgstr ""
 
-msgid "TMS layer ({0}), downloading in zoom {1}"
+msgid "Images that are already tagged ({0}/{1})"
 msgstr ""
 
-msgid "EPSG:4326 and Mercator projection are supported"
-msgstr ""
-
-msgid "Validation errors"
-msgstr "שגיאת תקינות"
-
-msgid "No validation errors"
-msgstr "אין שגיאות תקינות"
-
-msgid "Blank Layer"
-msgstr "שכבה ריקה"
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "Download visible tiles"
-msgstr "הורד משטחים גלויים"
-
-msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-
-msgid "Change resolution"
-msgstr "שנה רזולוציה"
-
-msgid "Reload erroneous tiles"
-msgstr "טען מחדש משטחים פגומים"
-
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
-msgstr ""
-
-msgid "Automatic downloading"
-msgstr "הורדה אוטומטית"
-
-msgid "Zoom to native resolution"
-msgstr ""
-
-msgid "Supported projections are: {0}"
-msgstr ""
-
-msgid "Unsupported WMS file version; found {0}, expected {1}"
-msgstr "גירסת קובץ WMS לא נתמכת; נמצא {0}, צפי {1}"
-
-msgid "Save WMS file"
-msgstr ""
-
-msgid "Correlate to GPX"
-msgstr ""
-
-msgid "GPX Files (*.gpx *.gpx.gz)"
-msgstr "קבצי GPX‏ (*.gpx *.gpx.gz)"
-
-msgid "File {0} is loaded yet under the name \"{1}\""
-msgstr ""
-
-msgid "Error while parsing {0}"
-msgstr "שגיאה בעת ניתוח {0}"
-
-msgid "Could not read \"{0}\""
-msgstr "לא ניתן לקרוא את \"{0}\""
-
-msgid ""
-"<html>Take a photo of your GPS receiver while it displays the "
-"time.<br>Display that photo here.<br>And then, simply capture the time you "
-"read on the photo and select a timezone<hr></html>"
-msgstr ""
-
-msgid "Photo time (from exif):"
-msgstr "זמן צילום (מ-EXIF)"
-
-msgid "Gps time (read from the above photo): "
-msgstr "זמן GPS (נקרא מהצילום למעלה): "
-
-msgid "I am in the timezone of: "
-msgstr "אני באזור זמן: "
-
-msgid "No date"
-msgstr "אין תאריך"
-
-msgid "Open another photo"
-msgstr "פתח תמונה אחרת"
-
-msgid "Synchronize time from a photo of the GPS receiver"
-msgstr ""
-
-msgid ""
-"Error while parsing the date.\n"
-"Please use the requested format"
-msgstr "שגיאה בזמן ניתוח התאריך:"
-
-msgid "Invalid date"
-msgstr "תאריך שגוי"
-
-msgid "<No GPX track loaded yet>"
-msgstr ""
-
-msgid "GPX track: "
-msgstr ""
-
-msgid "Open another GPX trace"
-msgstr ""
-
-msgid ""
-"<html>Use photo of an accurate clock,<br>e.g. GPS receiver display</html>"
-msgstr ""
-
-msgid "Auto-Guess"
-msgstr ""
-
-msgid "Matches first photo with first gpx point"
-msgstr ""
-
-msgid "Manual adjust"
-msgstr ""
-
-msgid "Override position for: "
-msgstr ""
-
-msgid "Images with geo location in exif data ({0}/{1})"
-msgstr ""
-
-msgid "Images that are already tagged ({0}/{1})"
-msgstr ""
-
-msgid "Show Thumbnail images on the map"
+msgid "Show Thumbnail images on the map"
 msgstr ""
 
 msgid "Timezone: "
@@ -8893,24 +9085,9 @@ msgstr "אזור זמן: "
 msgid "Offset:"
 msgstr "היסט:"
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
 msgid "Correlate"
 msgstr ""
 
-msgid "Invalid timezone"
-msgstr "אזור זמן שגוי"
-
-msgid "Invalid offset"
-msgstr "היסט שגוי"
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9110,9 +9287,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr "תמונות JPEG (*.jpg)"
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9175,9 +9349,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr "שטח מירבי לבקשה"
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9805,15 +9976,15 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr "יהיה עליך להפעיל את JOSM מחדש כדי שכמה מההגדרות יכנסו לתוקף."
 
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr ""
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -10606,6 +10777,21 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
+msgid "1. Enter getCapabilities URL"
+msgstr ""
+
+msgid "2. Enter name for this layer"
+msgstr ""
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr ""
 
@@ -10624,6 +10810,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10645,6 +10843,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10687,9 +10888,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr "שכבה"
 
@@ -10714,36 +10912,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11679,6 +11862,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] "שנה עצם {0}"
@@ -11787,6 +11978,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12040,6 +12234,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12578,6 +12775,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr "גירסת קובץ WMS לא נתמכת; נמצא {0}, צפי {1}"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12963,6 +13163,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13959,6 +14172,9 @@ msgstr "עדכן"
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr "תצוגה"
+
 msgid "Blue:"
 msgstr ""
 
@@ -13998,7 +14214,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -14010,9 +14226,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14121,6 +14334,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14134,12 +14350,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14176,10 +14398,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
+msgstr ""
+
+msgid "Geodatastyrelsen DTK Kort25"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14206,6 +14434,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14230,7 +14461,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14245,6 +14476,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14257,12 +14491,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14283,6 +14511,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14315,10 +14546,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14348,6 +14576,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14363,154 +14597,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14525,9 +14765,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14657,6 +14906,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14672,7 +14936,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -14998,6 +15262,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15082,11 +15351,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15140,7 +15404,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15155,9 +15419,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15238,6 +15499,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15276,6 +15545,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15351,9 +15623,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15759,6 +16028,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15783,10 +16060,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15803,6 +16076,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15819,11 +16096,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15839,6 +16128,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15851,6 +16144,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15878,6 +16175,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16269,6 +16578,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr "לא מסווג"
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16345,6 +16657,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr "כביש (סוג לא ידוע)"
 
@@ -16882,6 +17197,12 @@ msgstr "מצלמת מהירות"
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17071,8 +17392,13 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
 msgid "Water"
-msgstr "מים"
+msgstr ""
+
+msgctxt "sub group"
+msgid "Water"
+msgstr ""
 
 msgid "Drain"
 msgstr ""
@@ -17124,6 +17450,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17265,6 +17595,120 @@ msgstr ""
 msgid "public"
 msgstr ""
 
+msgid "Marine Fuel"
+msgstr ""
+
+msgid "Agip"
+msgstr ""
+
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
 msgid "Pier"
 msgstr ""
 
@@ -17381,6 +17825,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -17504,78 +17951,6 @@ msgstr ""
 msgid "Fuel"
 msgstr "דלק"
 
-msgid "Agip"
-msgstr ""
-
-msgid "Aral"
-msgstr ""
-
-msgid "Avia"
-msgstr ""
-
-msgid "BP"
-msgstr ""
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr ""
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
 msgid "With shop"
 msgstr ""
 
@@ -17585,51 +17960,12 @@ msgstr ""
 msgid "kiosk"
 msgstr ""
 
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -17848,9 +18184,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17869,6 +18202,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18071,6 +18407,12 @@ msgstr "מלון"
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18161,6 +18503,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18375,6 +18720,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18862,7 +19210,7 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
@@ -18871,19 +19219,46 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
+msgid "Cardboard"
+msgstr ""
+
+msgid "Electrical Appliances"
+msgstr ""
+
 msgid "Glass"
 msgstr ""
 
+msgid "Glass Bottles"
+msgstr ""
+
+msgid "Green Waste"
+msgstr ""
+
 msgid "Paper"
 msgstr ""
 
+msgid "Plastic"
+msgstr ""
+
+msgid "Plastic Bottles"
+msgstr ""
+
+msgid "Plastic Packaging"
+msgstr ""
+
 msgid "Scrap Metal"
 msgstr ""
 
-msgid "container"
+msgid "Shoes"
 msgstr ""
 
-msgid "centre"
+msgid "Small Appliances"
+msgstr ""
+
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
 msgstr ""
 
 msgid "Waste Basket/Trash Can"
@@ -19087,6 +19462,9 @@ msgstr "קשתות"
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr "טיפוס"
 
@@ -19262,12 +19640,18 @@ msgstr "כדור בסיס"
 msgid "Basketball"
 msgstr "כדורסל"
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr "גולף"
 
@@ -19283,14 +19667,14 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
-msgstr "הוקי"
+msgid "Ice Hockey"
+msgstr ""
 
 msgid "Pelota"
 msgstr ""
@@ -19313,9 +19697,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19334,9 +19715,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr "מעשה אדם"
 
@@ -19409,6 +19787,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20729,9 +21115,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -21744,10 +22127,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22174,6 +22557,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22198,6 +22584,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22258,6 +22656,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22348,9 +22749,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22720,6 +23130,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22774,9 +23187,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23520,47 +23930,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23569,10 +23988,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
+msgstr ""
+
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24175,6 +24606,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr "שכבה ריקה"
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25429,220 +25863,526 @@ msgstr "מוריד נקודות כפולות..."
 msgid "Lakewalker trace"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr "מזרח"
+
+msgid "northeast"
+msgstr "צפון-מזרח"
+
+msgid "north"
+msgstr "צפון"
+
+msgid "northwest"
+msgstr "צפון-מערב"
+
+msgid "west"
+msgstr "מערב"
+
+msgid "southwest"
+msgstr "דרום-מערב"
+
+msgid "south"
+msgstr "דרום"
+
+msgid "southeast"
+msgstr "דרום-מזרח"
+
+msgid "coastline"
+msgstr "קו חוף"
+
+msgid "land"
+msgstr "אדמה"
+
+msgid "Maximum number of segments per way"
+msgstr "מספר מירבי של קטעים בדרך"
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr "ערך אפור מירבי שנחשב כ\"מים\" (0-255)"
+
+msgid "Line simplification accuracy (degrees)"
+msgstr "דיוק הפשטת קו (מעלות)"
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr "כיוון לחיפוש אדמה"
+
+msgid "Tag ways as"
+msgstr "תייג אדמה כ"
+
+msgid "WMS Layer"
+msgstr "שכבת WMS"
+
+msgid "Maximum cache size (MB)"
+msgstr "גודל מטמון מירבי (MB)"
+
+msgid "Maximum cache age (days)"
+msgstr "גיל מטמון מירבי (ימים)"
+
+msgid "Source text"
+msgstr "טקסט מקור"
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+"מספר מירבי של נקודות לייצור לפני חילוץ (לפני פישוט קווים). ברירת מחדל 50000."
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+"הדיוק של פישוט קו דאגלס-פאוקר, נמדד במעלות. <br>ערכים נמוכים נותנים יותר "
+"נקודות, וקווים מדוייקים יותר. ברירת מחדל 0.0003."
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr "הסט כל הנקודות בכיוון מזרח (מעלות). ברירת מחדל 0."
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr "הסט כל הנקודות בכיוון צפון (מעלות). ברירת מחדל 0."
+
+msgid "Direction to search for land. Default east."
+msgstr "כיוון לחיפוש אדמה. ברירת המחדל היא מזרח."
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr "תייג דרכים כמים, קו חוף, אדמה או כלום. ברירת המחדל היא מים."
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr "הגודל המירבי לכל ספריית מטמון בבייטים. ברירת המחדל היא 300MB"
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr "הגיל המירבי לכל ספריית מטמון בימים. ברירת המחדל היא 100"
+
+msgid "Data source text. Default is Landsat."
+msgstr "הגודל המירבי לכל ספריית מטמון בבייטים. ברירת המחדל היא 300MB"
+
+msgid "Downloading image tile..."
+msgstr "מוריד משטח תמונה..."
+
+msgid "Could not acquire image"
+msgstr "לא יכול להשיג תמונה"
+
+msgid "Connection Failed"
+msgstr "ההתחברות נכשלה"
+
+msgid "Not connected"
+msgstr "לא מחובר"
+
+msgid "Connecting"
+msgstr "מתחבר"
+
+msgid "Connected"
+msgstr "מחובר"
+
+msgid "no name"
+msgstr ""
+
+msgid "Live GPS"
+msgstr ""
+
+msgid "Show GPS data."
+msgstr "הצג נתוני GPS."
+
+msgid "Status"
+msgstr "סטטוס"
+
+msgid "Way Info"
+msgstr "מידע דרך"
+
+msgid "Speed"
+msgstr "מהירות"
+
+msgid "Course"
+msgstr "כיוון"
+
+msgid "LiveGPS layer"
+msgstr "שכבת LiveGPS"
+
+msgid "Capture GPS Track"
+msgstr ""
+
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgstr ""
+
+msgid "Center Once"
+msgstr "מרכז פעם אחת"
+
+msgid "Center the LiveGPS layer to current position."
+msgstr "מרכז את שכבת LiveGPS למיקום הנוכחי"
+
+msgid "Auto-Center"
+msgstr "מירכוז אוטומטי"
+
+msgid "Continuously center the LiveGPS layer to current position."
+msgstr "מרכז את שכבת LiveGPS למיקום הנוכחי באופן רצוף"
+
+msgid "Open MapDust"
+msgstr ""
+
+msgid "MapDust bug reports"
+msgstr ""
+
+msgid "Activates the MapDust bug reporter plugin"
+msgstr ""
+
+msgid "Missing input data"
+msgstr ""
+
+msgid "Mapillary Images"
+msgstr ""
+
+msgid "Mapillary layer"
+msgstr ""
+
+msgid "Total images:"
+msgstr ""
+
+msgid "images"
+msgstr ""
+
+msgid "Mapillary"
+msgstr ""
+
+msgid "Create Mapillary layer"
+msgstr ""
+
+msgid "Start Mapillary layer"
+msgstr ""
+
+msgid "Download Mapillary images in current view"
+msgstr ""
+
+msgid "Export pictures"
+msgstr ""
+
+msgid "Export Mapillary pictures"
+msgstr ""
+
+msgid "Export images"
+msgstr ""
+
+msgid "Import pictures"
+msgstr ""
+
+msgid "Import local pictures"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer"
+msgstr ""
+
+msgid "Select pictures"
+msgstr ""
+
+msgid "Import pictures into sequence"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer in a sequence"
+msgstr ""
+
+msgid "Join mode"
+msgstr ""
+
+msgid "Join/unjoin pictures"
+msgstr ""
+
+msgid "Join Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures"
+msgstr ""
+
+msgid "Upload Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures."
+msgstr ""
+
+msgid "Walk mode"
+msgstr ""
+
+msgid "Start walk mode"
+msgstr ""
+
+msgid "Zoom to selected image"
+msgstr ""
+
+msgid "Zoom to the currently selected Mapillary image"
+msgstr ""
+
+msgid "Uploaded {0} images"
+msgstr ""
+
+msgid "Approve upload on the website"
+msgstr ""
+
+msgid "View in website"
+msgstr ""
+
+msgid "Copy key"
+msgstr ""
+
+msgid "Copy key tag"
+msgstr ""
+
+msgid "Edit on website"
+msgstr ""
+
+msgid "Export all images"
 msgstr ""
 
-msgid "east"
-msgstr "מזרח"
+msgid "Export selected sequence"
+msgstr ""
 
-msgid "northeast"
-msgstr "צפון-מזרח"
+msgid "Export selected images"
+msgstr ""
 
-msgid "north"
-msgstr "צפון"
+msgid "Rewrite imported images"
+msgstr ""
 
-msgid "northwest"
-msgstr "צפון-מערב"
+msgid "Select a folder"
+msgstr ""
 
-msgid "west"
-msgstr "מערב"
+msgid "Explore"
+msgstr ""
 
-msgid "southwest"
-msgstr "דרום-מערב"
+msgid "Select a directory"
+msgstr ""
 
-msgid "south"
-msgstr "דרום"
+msgid "Speed limit"
+msgstr ""
 
-msgid "southeast"
-msgstr "דרום-מזרח"
+msgid "Give way"
+msgstr ""
 
-msgid "coastline"
-msgstr "קו חוף"
+msgid "No entry"
+msgstr ""
 
-msgid "land"
-msgstr "אדמה"
+msgid "Intersection danger"
+msgstr ""
 
-msgid "Maximum number of segments per way"
-msgstr "מספר מירבי של קטעים בדרך"
+msgid "Mandatory direction (any)"
+msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "No turn"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
-msgstr "ערך אפור מירבי שנחשב כ\"מים\" (0-255)"
+msgid "Uneven road"
+msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
-msgstr "דיוק הפשטת קו (מעלות)"
+msgid "No parking"
+msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Years"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "Months"
 msgstr ""
 
-msgid "Direction to search for land"
-msgstr "כיוון לחיפוש אדמה"
+msgid "Days"
+msgstr ""
 
-msgid "Tag ways as"
-msgstr "תייג אדמה כ"
+msgid "Mapillary filter"
+msgstr ""
 
-msgid "WMS Layer"
-msgstr "שכבת WMS"
+msgid "Open Mapillary filter dialog"
+msgstr ""
 
-msgid "Maximum cache size (MB)"
-msgstr "גודל מטמון מירבי (MB)"
+msgid "Downloaded images"
+msgstr ""
 
-msgid "Maximum cache age (days)"
-msgstr "גיל מטמון מירבי (ימים)"
+msgid "Only images with signs"
+msgstr ""
 
-msgid "Source text"
-msgstr "טקסט מקור"
+msgid "Choose signs"
+msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Mapillary history"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Mapillary dialog"
 msgstr ""
-"מספר מירבי של נקודות לייצור לפני חילוץ (לפני פישוט קווים). ברירת מחדל 50000."
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Next picture"
 msgstr ""
-"הדיוק של פישוט קו דאגלס-פאוקר, נמדד במעלות. <br>ערכים נמוכים נותנים יותר "
-"נקודות, וקווים מדוייקים יותר. ברירת מחדל 0.0003."
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
-msgstr "הסט כל הנקודות בכיוון מזרח (מעלות). ברירת מחדל 0."
+msgid "Shows the previous picture in the sequence"
+msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
-msgstr "הסט כל הנקודות בכיוון צפון (מעלות). ברירת מחדל 0."
+msgid "Jump to red"
+msgstr ""
 
-msgid "Direction to search for land. Default east."
-msgstr "כיוון לחיפוש אדמה. ברירת המחדל היא מזרח."
+msgid "Jumps to the picture at the other side of the red line"
+msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
-msgstr "תייג דרכים כמים, קו חוף, אדמה או כלום. ברירת המחדל היא מים."
+msgid "Jump to blue"
+msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
-msgstr "הגודל המירבי לכל ספריית מטמון בבייטים. ברירת המחדל היא 300MB"
+msgid "Stops the walk."
+msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
-msgstr "הגיל המירבי לכל ספריית מטמון בימים. ברירת המחדל היא 100"
+msgid "Play"
+msgstr ""
 
-msgid "Data source text. Default is Landsat."
-msgstr "הגודל המירבי לכל ספריית מטמון בבייטים. ברירת המחדל היא 300MB"
+msgid "Continues with the paused walk."
+msgstr ""
 
-msgid "Downloading image tile..."
-msgstr "מוריד משטח תמונה..."
+msgid "Pause"
+msgstr ""
 
-msgid "Could not acquire image"
-msgstr "לא יכול להשיג תמונה"
+msgid "Pauses the walk."
+msgstr ""
 
-msgid "Connection Failed"
-msgstr "ההתחברות נכשלה"
+msgid "Reverse buttons position when displaying images."
+msgstr ""
 
-msgid "Not connected"
-msgstr "לא מחובר"
+msgid "Display hour when the picture was taken"
+msgstr ""
 
-msgid "Connecting"
-msgstr "מתחבר"
+msgid "Use 24 hour format"
+msgstr ""
 
-msgid "Connected"
-msgstr "מחובר"
+msgid "Move to picture''s location with next/previous buttons"
+msgstr ""
 
-msgid "no name"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Live GPS"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Show GPS data."
-msgstr "הצג נתוני GPS."
+msgid "Delete after upload"
+msgstr ""
 
-msgid "Status"
-msgstr "סטטוס"
+msgid "Wait for full quality pictures"
+msgstr ""
 
-msgid "Way Info"
-msgstr "מידע דרך"
+msgid "Follow selected image"
+msgstr ""
 
-msgid "Speed"
-msgstr "מהירות"
+msgid "Go forward"
+msgstr ""
 
-msgid "Course"
-msgstr "כיוון"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "LiveGPS layer"
-msgstr "שכבת LiveGPS"
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Capture GPS Track"
+msgid "2 images joined"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
-msgstr ""
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Center Once"
-msgstr "מרכז פעם אחת"
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Center the LiveGPS layer to current position."
-msgstr "מרכז את שכבת LiveGPS למיקום הנוכחי"
+msgid "2 images unjoined"
+msgstr ""
 
-msgid "Auto-Center"
-msgstr "מירכוז אוטומטי"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
+msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
-msgstr "מרכז את שכבת LiveGPS למיקום הנוכחי באופן רצוף"
+msgid "Downloading"
+msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25663,6 +26403,9 @@ msgstr "אורך הבחירה"
 msgid "Selection Area"
 msgstr "שטח הבחירה"
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr "זווית"
 
@@ -25721,47 +26464,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -25994,6 +26696,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr "כלים"
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27212,6 +27917,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27383,6 +28109,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27392,6 +28121,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27572,6 +28304,9 @@ msgstr "ערך חדש עבור {0}"
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27750,6 +28485,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27759,6 +28527,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -27995,9 +28766,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29480,9 +30248,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/hi.po b/i18n/po/hi.po
index 2737994..dcafc3b 100644
--- a/i18n/po/hi.po
+++ b/i18n/po/hi.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2009-11-14 16:28+0000\n"
 "Last-Translator: nipunreddevil <nipunreddevil at gmail.com>\n"
 "Language-Team: Hindi <hi at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:43+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:45+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: hi\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -97,19 +97,16 @@ msgstr ""
 msgid "Updating user interface"
 msgstr ""
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
 msgstr ""
 
 msgid "Warning"
 msgstr "चेतावनी"
 
-msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
+msgid "Ignoring malformed file URL: \"{0}\""
 msgstr ""
 
-msgid "Ignoring malformed URL: \"{0}\""
+msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 
 msgid ""
@@ -444,6 +441,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
 
@@ -1029,6 +1029,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr ""
 
@@ -1945,15 +1969,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr ""
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -1975,6 +1990,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2093,9 +2117,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2309,9 +2330,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr ""
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2525,6 +2552,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2567,6 +2598,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3017,6 +3051,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3134,10 +3186,44 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3327,6 +3413,12 @@ msgstr ""
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3354,13 +3446,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -3976,9 +4068,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -3988,12 +4077,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4174,13 +4275,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4378,6 +4479,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4591,43 +4693,54 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
 msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
 msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
 msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
 msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
-msgid "Menu: {0}"
+msgctxt "menu"
+msgid "Help"
 msgstr ""
 
-msgid "Save and load the current session (list of layers, etc.)"
+msgid "Menu: {0}"
 msgstr ""
 
 msgid "Edit toolbar"
@@ -4651,6 +4764,7 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
 msgstr ""
 
@@ -4773,58 +4887,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr ""
-
-msgid "Pos."
+msgid " ({0})"
 msgstr ""
 
-msgid "Role"
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5253,6 +5325,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr ""
+
 msgid "Primitive"
 msgstr ""
 
@@ -5493,6 +5568,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5639,6 +5717,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5742,7 +5855,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5870,6 +5983,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5879,17 +5997,48 @@ msgstr ""
 msgid "unknown"
 msgstr ""
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -5935,6 +6084,12 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr ""
 
@@ -6064,10 +6219,16 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
-msgid "List of notes"
+msgid "Mini map"
 msgstr ""
 
-msgid "Add comment"
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
+msgid "List of notes"
+msgstr ""
+
+msgid "Add comment"
 msgstr ""
 
 msgid "Comment"
@@ -6122,10 +6283,15 @@ msgstr ""
 msgid "Enter the ID of the object that should be downloaded"
 msgstr ""
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6154,6 +6320,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr ""
 
+msgid "Selection"
+msgstr ""
+
 msgid "Open a selection list window."
 msgstr ""
 
@@ -6244,6 +6413,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -6838,6 +7013,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6929,14 +7110,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7109,6 +7289,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7644,6 +7830,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8489,6 +8678,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr ""
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr ""
 
@@ -8542,6 +8831,9 @@ msgstr ""
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8562,7 +8854,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8645,80 +8937,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr ""
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-
-msgid "Auto Zoom"
-msgstr ""
-
-msgid "Auto load tiles"
-msgstr ""
-
-msgid "Show Errors"
-msgstr ""
-
-msgid "Load Tile"
-msgstr ""
-
-msgid "Show Tile Info"
-msgstr ""
-
-msgid "Load All Tiles"
-msgstr ""
-
-msgid "Load All Error Tiles"
-msgstr ""
-
-msgid "Increase zoom"
-msgstr ""
-
-msgid "Decrease zoom"
-msgstr ""
-
-msgid "Snap to tile size"
-msgstr ""
-
-msgid "Flush Tile Cache"
-msgstr ""
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
@@ -8728,56 +8946,30 @@ msgstr ""
 msgid "No validation errors"
 msgstr ""
 
-msgid "Blank Layer"
-msgstr ""
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "Download visible tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-
-msgid "Change resolution"
-msgstr ""
-
-msgid "Reload erroneous tiles"
-msgstr ""
-
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Automatic downloading"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Zoom to native resolution"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Supported projections are: {0}"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Save WMS file"
+msgid "Try Again"
 msgstr ""
 
-msgid "Correlate to GPX"
+msgid "No images could be matched!"
 msgstr ""
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
@@ -8864,24 +9056,9 @@ msgstr ""
 msgid "Offset:"
 msgstr ""
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
 msgid "Correlate"
 msgstr ""
 
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9075,9 +9252,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr ""
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9140,9 +9314,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9768,15 +9939,15 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr ""
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -10569,13 +10740,28 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
-msgid "imagery fade"
+msgid "1. Enter getCapabilities URL"
 msgstr ""
 
-msgid "Fade Color: "
+msgid "2. Enter name for this layer"
 msgstr ""
 
-msgid "Fade amount: "
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
+msgid "imagery fade"
+msgstr ""
+
+msgid "Fade Color: "
+msgstr ""
+
+msgid "Fade amount: "
 msgstr ""
 
 msgid "Soft"
@@ -10587,6 +10773,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10608,6 +10806,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10650,9 +10851,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr ""
 
@@ -10677,36 +10875,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11642,6 +11825,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] ""
@@ -11750,6 +11941,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12003,6 +12197,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12539,6 +12736,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12924,6 +13124,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13918,6 +14131,9 @@ msgstr ""
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr ""
+
 msgid "Blue:"
 msgstr ""
 
@@ -13957,7 +14173,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -13969,9 +14185,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14080,6 +14293,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14093,12 +14309,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14135,10 +14357,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14165,6 +14393,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14189,7 +14420,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14204,6 +14435,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14216,12 +14450,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14242,6 +14470,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14274,10 +14505,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14307,6 +14535,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14322,154 +14556,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14484,9 +14724,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14616,6 +14865,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14631,7 +14895,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -14957,6 +15221,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15041,11 +15310,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15099,7 +15363,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15114,9 +15378,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15197,6 +15458,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15235,6 +15504,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15310,9 +15582,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15718,6 +15987,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15742,10 +16019,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15762,6 +16035,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15778,11 +16055,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15798,6 +16087,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15810,6 +16103,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15837,6 +16134,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16228,6 +16537,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16304,6 +16616,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr ""
 
@@ -16841,6 +17156,12 @@ msgstr ""
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17030,6 +17351,11 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
 msgstr ""
 
@@ -17083,6 +17409,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17224,13 +17554,127 @@ msgstr ""
 msgid "public"
 msgstr ""
 
-msgid "Pier"
+msgid "Marine Fuel"
 msgstr ""
 
-msgid "Lock Gate"
+msgid "Agip"
 msgstr ""
 
-msgid "Turning Point"
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
+msgid "Pier"
+msgstr ""
+
+msgid "Lock Gate"
+msgstr ""
+
+msgid "Turning Point"
 msgstr ""
 
 msgid "Slipway"
@@ -17340,6 +17784,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -17463,78 +17910,6 @@ msgstr ""
 msgid "Fuel"
 msgstr ""
 
-msgid "Agip"
-msgstr ""
-
-msgid "Aral"
-msgstr ""
-
-msgid "Avia"
-msgstr ""
-
-msgid "BP"
-msgstr ""
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr ""
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
 msgid "With shop"
 msgstr ""
 
@@ -17544,51 +17919,12 @@ msgstr ""
 msgid "kiosk"
 msgstr ""
 
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -17807,9 +18143,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17828,6 +18161,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18030,6 +18366,12 @@ msgstr ""
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18120,6 +18462,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18334,6 +18679,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18821,7 +19169,7 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
@@ -18830,43 +19178,70 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
-msgid "Glass"
+msgid "Cardboard"
 msgstr ""
 
-msgid "Paper"
+msgid "Electrical Appliances"
 msgstr ""
 
-msgid "Scrap Metal"
+msgid "Glass"
 msgstr ""
 
-msgid "container"
+msgid "Glass Bottles"
 msgstr ""
 
-msgid "centre"
+msgid "Green Waste"
 msgstr ""
 
-msgid "Waste Basket/Trash Can"
+msgid "Paper"
 msgstr ""
 
-msgid "Waste Disposal/Dumpster"
+msgid "Plastic"
 msgstr ""
 
-msgid "Sanitary Dump Station"
+msgid "Plastic Bottles"
 msgstr ""
 
-msgid "Suction pumpout"
+msgid "Plastic Packaging"
 msgstr ""
 
-msgid "Gravity drain for hose"
+msgid "Scrap Metal"
 msgstr ""
 
-msgid "Casette or Elsan Disposal"
+msgid "Shoes"
 msgstr ""
 
-msgid "Operation times"
+msgid "Small Appliances"
 msgstr ""
 
-msgid "Backrest"
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
+msgstr ""
+
+msgid "Waste Basket/Trash Can"
+msgstr ""
+
+msgid "Waste Disposal/Dumpster"
+msgstr ""
+
+msgid "Sanitary Dump Station"
+msgstr ""
+
+msgid "Suction pumpout"
+msgstr ""
+
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
+msgstr ""
+
+msgid "Operation times"
+msgstr ""
+
+msgid "Backrest"
 msgstr ""
 
 msgid "Amount of Seats"
@@ -19046,6 +19421,9 @@ msgstr ""
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr ""
 
@@ -19221,12 +19599,18 @@ msgstr ""
 msgid "Basketball"
 msgstr ""
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr ""
 
@@ -19242,13 +19626,13 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
@@ -19272,9 +19656,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19293,9 +19674,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -19368,6 +19746,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20688,9 +21074,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -21703,10 +22086,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22133,6 +22516,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22157,6 +22543,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22217,6 +22615,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22307,9 +22708,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22679,6 +23089,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22733,9 +23146,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23479,47 +23889,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23528,10 +23947,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24134,6 +24565,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr ""
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25231,374 +25665,680 @@ msgid ""
 "highlight tracks"
 msgstr ""
 
-msgid "Delete this"
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
 msgstr ""
 
-msgid "Delete this&older"
+msgid "Connecting"
 msgstr ""
 
-msgid "km/h"
+msgid "Connected"
 msgstr ""
 
-msgid "Track name: "
+msgid "no name"
 msgstr ""
 
-msgid "Update IRS adjustment layer"
+msgid "Live GPS"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid "Show GPS data."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Speed"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Course"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
+msgid "Explore"
 msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25619,6 +26359,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -25677,47 +26420,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -25950,6 +26652,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr ""
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27167,6 +27872,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27338,6 +28064,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27347,6 +28076,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27527,6 +28259,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27705,6 +28440,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27714,6 +28482,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -27950,9 +28721,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29435,9 +30203,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/hr.po b/i18n/po/hr.po
index d565a06..b2c8d89 100644
--- a/i18n/po/hr.po
+++ b/i18n/po/hr.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2015-02-25 14:38+0000\n"
 "Last-Translator: gogo <trebelnik2 at gmail.com>\n"
 "Language-Team: Croatian <hr at li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
 "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:55+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:59+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: hr\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -98,22 +98,19 @@ msgstr "Učitavnje postavka slika"
 msgid "Updating user interface"
 msgstr "Nadograđujem korisničko sučelje"
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "Ignoriram loše formiranu datoteku URL: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "Ignoriram loše formirani URL: \"{0}\""
 
 msgid "Warning"
 msgstr "Upozorenje"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "Ignoriram loše formiranu datoteku URL: \"{0}\""
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 "Parametar \"downloadgps\" ne prihvaća nazive datoteka ili URL-ove datoteka"
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "Ignoriram loše formirani URL: \"{0}\""
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -452,6 +449,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr "Distribuiraj izabrane točke na jednake udaljenosti uz liniju."
 
@@ -1072,6 +1072,30 @@ msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 "Molim, selektirajte puteve s kutevima približno 90 ili 180 stupnjeva."
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr "Zalijepi"
 
@@ -2032,15 +2056,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr "Završi crtanje."
 
-msgid "FIX"
-msgstr "FIX"
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -2062,6 +2077,15 @@ msgstr "0,45,90,..."
 msgid "0,30,45,60,90,..."
 msgstr "0,30,45,60,90,..."
 
+msgid "FIX"
+msgstr "FIX"
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2184,9 +2208,6 @@ msgstr ""
 "ParallelWayAction\n"
 "Označeni put mora tvoriti jednostavnu nerazgranatu stazu"
 
-msgid "Make parallel way error"
-msgstr "Stvaranje paralelnog puta nije uspijelo"
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2401,9 +2422,15 @@ msgstr "svi objekti"
 msgid "Also include incomplete and deleted objects in search."
 msgstr "Također uključi nedovršene i izbrisane objekte u pretrazi."
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr ""
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2617,6 +2644,10 @@ msgid "RX"
 msgstr "RX"
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr "A"
 
@@ -2659,6 +2690,9 @@ msgstr "Očekivani raspon brojeva"
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr "Neočekivani simbol. Očekivani {0}, pronađeni {1}"
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr "Neočekivani simbol: {0}"
 
@@ -3127,6 +3161,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3244,12 +3296,46 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
-msgid "Not in cache"
-msgstr "E"
-
 msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr ""
 
+msgid "HTTP error {0} when loading tiles"
+msgstr ""
+
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
+msgstr ""
+
 msgid "ID > 0 expected. Got {0}."
 msgstr ""
 
@@ -3440,6 +3526,12 @@ msgstr ""
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3467,13 +3559,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -4089,9 +4181,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -4101,12 +4190,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4287,13 +4388,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4492,6 +4593,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4705,43 +4807,54 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
 msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
 msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
-msgstr "Alati"
+msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
-msgstr "Više alata"
+msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
-msgstr "Odabir"
+msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
 msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
-msgid "Menu: {0}"
+msgctxt "menu"
+msgid "Help"
 msgstr ""
 
-msgid "Save and load the current session (list of layers, etc.)"
+msgid "Menu: {0}"
 msgstr ""
 
 msgid "Edit toolbar"
@@ -4765,6 +4878,7 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
 msgstr ""
 
@@ -4887,58 +5001,16 @@ msgstr "U pozadini"
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr "Detalji..."
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr "Iz relacije"
-
-msgid "Pos."
-msgstr ""
+msgid " ({0})"
+msgstr " ({0})"
 
-msgid "Role"
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5367,6 +5439,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr ""
+
 msgid "Primitive"
 msgstr ""
 
@@ -5610,6 +5685,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5756,6 +5834,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr "Iz relacije"
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5859,8 +5972,8 @@ msgstr "Napredne informacije o objektu"
 msgid "map style"
 msgstr "stil karte"
 
-msgid " ({0})"
-msgstr " ({0})"
+msgid "edit counts"
+msgstr ""
 
 msgid "not in data set"
 msgstr ""
@@ -5988,6 +6101,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr "xml"
 
@@ -5997,48 +6115,79 @@ msgstr ""
 msgid "unknown"
 msgstr "nepoznat"
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
 msgstr ""
 
-msgid "Projected coordinates:"
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
 msgstr ""
 
 msgid ""
-"Enter easting and northing (x and y) separated by space, comma or semicolon."
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
 msgstr ""
 
-msgid "Lat/Lon"
+msgid "Coordinate value can be in one of three formats:"
 msgstr ""
 
-msgid "East/North"
+msgid "<i>degrees</i><tt>°</tt>"
 msgstr ""
 
-msgid "Please enter a GPS coordinates"
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
 msgstr ""
 
-msgid "Please enter a Easting and Northing"
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
 msgstr ""
 
-msgid "Toggle visibility of layer: {0}"
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
 msgstr ""
 
-msgid "Open a list of all loaded layers."
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
 msgstr ""
 
-msgid "Delete the selected layers."
+msgid "Some examples:"
 msgstr ""
 
-msgid "Show/hide"
+msgid "Projected coordinates:"
+msgstr ""
+
+msgid ""
+"Enter easting and northing (x and y) separated by space, comma or semicolon."
+msgstr ""
+
+msgid "Lat/Lon"
+msgstr ""
+
+msgid "East/North"
+msgstr ""
+
+msgid "Please enter a GPS coordinates"
+msgstr ""
+
+msgid "Please enter a Easting and Northing"
+msgstr ""
+
+msgid "Toggle visibility of layer: {0}"
+msgstr ""
+
+msgid "Open a list of all loaded layers."
+msgstr ""
+
+msgid "Delete the selected layers."
+msgstr ""
+
+msgid "Show/hide"
 msgstr ""
 
 msgid "Toggle visible state of the selected layer."
@@ -6053,6 +6202,12 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr ""
 
@@ -6182,6 +6337,12 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
+msgid "Mini map"
+msgstr ""
+
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
 msgid "List of notes"
 msgstr ""
 
@@ -6240,10 +6401,15 @@ msgstr "ID objekta:"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "Unesi ID objekta koji se treba preuzeti"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6272,6 +6438,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr "Relacije: {0}"
 
+msgid "Selection"
+msgstr "Odabir"
+
 msgid "Open a selection list window."
 msgstr ""
 
@@ -6363,6 +6532,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -6957,6 +7132,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -7049,14 +7230,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7231,6 +7411,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7766,6 +7952,9 @@ msgstr "Učitavam povijest relacije {0}"
 msgid "Node {0}"
 msgstr "Točka {0}"
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr "Zumiraj na točku"
 
@@ -8634,6 +8823,106 @@ msgstr[0] "{0} objekt za izbrisati:"
 msgstr[1] "{0} objekta za izbrisati:"
 msgstr[2] "{0} objekta za izbrisati:"
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr "Automatski zum"
+
+msgid "Auto load tiles"
+msgstr "Automatski učitaj naslove"
+
+msgid "Load All Tiles"
+msgstr "Učitaj sve naslove"
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr "Promijeni rezoluciju"
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr "Pokaži pogreške"
+
+msgid "Load Tile"
+msgstr "Učitaj naslov"
+
+msgid "Increase zoom"
+msgstr "Povećaj zim"
+
+msgid "Decrease zoom"
+msgstr "Smanji zum"
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr "Detalji..."
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr ""
 
@@ -8688,6 +8977,9 @@ msgstr "Spremi GPX datoteku"
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr "GREŠKA"
 
@@ -8708,7 +9000,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8794,217 +9086,117 @@ msgstr ""
 msgid "Save OSM file"
 msgstr "Spremi OSM datoteku"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
+msgid "EPSG:4326 and Mercator projection are supported"
+msgstr "EPSG:4326 i Mercator projekcije su podržane"
 
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
+msgid "Validation errors"
 msgstr ""
 
-msgid "Auto Zoom"
-msgstr "Automatski zum"
-
-msgid "Auto load tiles"
-msgstr "Automatski učitaj naslove"
-
-msgid "Show Errors"
-msgstr "Pokaži pogreške"
-
-msgid "Load Tile"
-msgstr "Učitaj naslov"
+msgid "No validation errors"
+msgstr ""
 
-msgid "Show Tile Info"
+msgid "Set WMS Bookmark"
 msgstr ""
 
-msgid "Load All Tiles"
-msgstr "Učitaj sve naslove"
+msgid ""
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
+msgstr ""
 
-msgid "Load All Error Tiles"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Increase zoom"
-msgstr "Povećaj zim"
+msgid "Invalid timezone"
+msgstr "Pogrešna vremenska zona:"
 
-msgid "Decrease zoom"
-msgstr "Smanji zum"
+msgid "Invalid offset"
+msgstr "Pogrešan offset"
 
-msgid "Snap to tile size"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Flush Tile Cache"
-msgstr ""
+msgid "Try Again"
+msgstr "Pokušaj ponovo"
 
-msgid "zoom in to load any tiles"
+msgid "No images could be matched!"
 msgstr ""
 
-msgid "zoom in to load more tiles"
+msgid "GPX Files (*.gpx *.gpx.gz)"
 msgstr ""
 
-msgid "increase zoom level to see more detail"
+msgid "File {0} is loaded yet under the name \"{1}\""
 msgstr ""
 
-msgid "No tiles at this zoom level"
+msgid "Error while parsing {0}"
 msgstr ""
 
-msgid "Current zoom: {0}"
+msgid "Could not read \"{0}\""
 msgstr ""
 
-msgid "Display zoom: {0}"
+msgid ""
+"<html>Take a photo of your GPS receiver while it displays the "
+"time.<br>Display that photo here.<br>And then, simply capture the time you "
+"read on the photo and select a timezone<hr></html>"
 msgstr ""
 
-msgid "Pixel scale: {0}"
+msgid "Photo time (from exif):"
 msgstr ""
 
-msgid "Best zoom: {0}"
+msgid "Gps time (read from the above photo): "
 msgstr ""
 
-msgid "Cache stats: {0}"
+msgid "I am in the timezone of: "
 msgstr ""
 
-msgid "TMS layer ({0}), downloading in zoom {1}"
+msgid "No date"
 msgstr ""
 
-msgid "EPSG:4326 and Mercator projection are supported"
-msgstr "EPSG:4326 i Mercator projekcije su podržane"
-
-msgid "Validation errors"
+msgid "Open another photo"
 msgstr ""
 
-msgid "No validation errors"
+msgid "Synchronize time from a photo of the GPS receiver"
 msgstr ""
 
-msgid "Blank Layer"
-msgstr "Prazan sloj"
-
-msgid "Downloaded {0}/{1} tiles"
+msgid ""
+"Error while parsing the date.\n"
+"Please use the requested format"
 msgstr ""
 
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
+msgid "Invalid date"
 msgstr ""
 
-msgid "WMS layer ({0}), downloading in zoom {1}"
+msgid "<No GPX track loaded yet>"
 msgstr ""
 
-msgid "Download visible tiles"
+msgid "GPX track: "
 msgstr ""
 
-msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
+msgid "Open another GPX trace"
 msgstr ""
 
-msgid "Change resolution"
-msgstr "Promijeni rezoluciju"
-
-msgid "Reload erroneous tiles"
+msgid ""
+"<html>Use photo of an accurate clock,<br>e.g. GPS receiver display</html>"
 msgstr ""
 
-msgid "Alpha channel"
+msgid "Auto-Guess"
 msgstr ""
 
-msgid "Automatically change resolution"
+msgid "Matches first photo with first gpx point"
 msgstr ""
 
-msgid "Set WMS Bookmark"
+msgid "Manual adjust"
 msgstr ""
 
-msgid "Automatic downloading"
-msgstr "Automatsko preuzimanje"
-
-msgid "Zoom to native resolution"
+msgid "Override position for: "
 msgstr ""
 
-msgid "Supported projections are: {0}"
+msgid "Images with geo location in exif data ({0}/{1})"
 msgstr ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Images that are already tagged ({0}/{1})"
 msgstr ""
 
-msgid "Save WMS file"
-msgstr ""
-
-msgid "Correlate to GPX"
-msgstr ""
-
-msgid "GPX Files (*.gpx *.gpx.gz)"
-msgstr ""
-
-msgid "File {0} is loaded yet under the name \"{1}\""
-msgstr ""
-
-msgid "Error while parsing {0}"
-msgstr ""
-
-msgid "Could not read \"{0}\""
-msgstr ""
-
-msgid ""
-"<html>Take a photo of your GPS receiver while it displays the "
-"time.<br>Display that photo here.<br>And then, simply capture the time you "
-"read on the photo and select a timezone<hr></html>"
-msgstr ""
-
-msgid "Photo time (from exif):"
-msgstr ""
-
-msgid "Gps time (read from the above photo): "
-msgstr ""
-
-msgid "I am in the timezone of: "
-msgstr ""
-
-msgid "No date"
-msgstr ""
-
-msgid "Open another photo"
-msgstr ""
-
-msgid "Synchronize time from a photo of the GPS receiver"
-msgstr ""
-
-msgid ""
-"Error while parsing the date.\n"
-"Please use the requested format"
-msgstr ""
-
-msgid "Invalid date"
-msgstr ""
-
-msgid "<No GPX track loaded yet>"
-msgstr ""
-
-msgid "GPX track: "
-msgstr ""
-
-msgid "Open another GPX trace"
-msgstr ""
-
-msgid ""
-"<html>Use photo of an accurate clock,<br>e.g. GPS receiver display</html>"
-msgstr ""
-
-msgid "Auto-Guess"
-msgstr ""
-
-msgid "Matches first photo with first gpx point"
-msgstr ""
-
-msgid "Manual adjust"
-msgstr ""
-
-msgid "Override position for: "
-msgstr ""
-
-msgid "Images with geo location in exif data ({0}/{1})"
-msgstr ""
-
-msgid "Images that are already tagged ({0}/{1})"
-msgstr ""
-
-msgid "Show Thumbnail images on the map"
+msgid "Show Thumbnail images on the map"
 msgstr ""
 
 msgid "Timezone: "
@@ -9013,24 +9205,9 @@ msgstr "Vremenska zona: "
 msgid "Offset:"
 msgstr "Offset:"
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
 msgid "Correlate"
 msgstr ""
 
-msgid "Invalid timezone"
-msgstr "Pogrešna vremenska zona:"
-
-msgid "Invalid offset"
-msgstr "Pogrešan offset"
-
-msgid "Try Again"
-msgstr "Pokušaj ponovo"
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9225,9 +9402,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr ""
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9290,9 +9464,6 @@ msgstr "metri"
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr "Preunmi pored:"
 
@@ -9918,15 +10089,15 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr ""
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -10719,6 +10890,21 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
+msgid "1. Enter getCapabilities URL"
+msgstr ""
+
+msgid "2. Enter name for this layer"
+msgstr ""
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr ""
 
@@ -10737,6 +10923,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10758,6 +10956,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10800,9 +11001,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr ""
 
@@ -10827,36 +11025,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11792,6 +11975,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] ""
@@ -11900,6 +12091,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12153,6 +12347,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12689,6 +12886,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -13074,6 +13274,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -14068,6 +14281,9 @@ msgstr ""
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr ""
+
 msgid "Blue:"
 msgstr ""
 
@@ -14107,7 +14323,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -14119,9 +14335,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14230,6 +14443,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14243,12 +14459,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14285,10 +14507,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
+msgstr ""
+
+msgid "Geodatastyrelsen DTK Kort25"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14315,6 +14543,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14339,7 +14570,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14354,6 +14585,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14366,12 +14600,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14392,6 +14620,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14424,10 +14655,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14457,73 +14685,25 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
-msgid "OSMIE Townlands"
-msgstr ""
-
-msgid "OSMIE EDs"
-msgstr ""
-
-msgid "OSMIE Civil Parishes"
-msgstr ""
-
-msgid "OSMIE Baronies"
-msgstr ""
-
-msgid "OSMIE Political"
-msgstr ""
-
-msgid "Ireland EEA GMES Urban Atlas"
-msgstr ""
-
-msgid "Ireland EEA CORINE 2006"
-msgstr ""
-
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
 msgstr ""
 
 msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Clare Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Dublin Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Fermanagh Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Galway Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Kildare Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Leitrim Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Longford Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Offaly Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Sligo Civil Parishes and Baronies"
+msgid "OSMIE Townlands"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "OSMIE EDs"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "OSMIE Civil Parishes"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "OSMIE Baronies"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "OSMIE Political"
 msgstr ""
 
 msgid "Lodi - Italy"
@@ -14559,6 +14739,9 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
+msgid "1.cikla ortofotokarte - Latvia"
+msgstr ""
+
 msgid "ORT10LT (Lithuania)"
 msgstr ""
 
@@ -14574,6 +14757,9 @@ msgstr ""
 msgid "Luxembourg Inspire Roads"
 msgstr ""
 
+msgid "Luxembourg Inspire Water"
+msgstr ""
+
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -14589,9 +14775,15 @@ msgstr ""
 msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgstr ""
+
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
+msgid "Geoportal 2: ISOK hillshade"
+msgstr ""
+
 msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
@@ -14601,15 +14793,27 @@ msgstr ""
 msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
+msgid "Bytom: Fotoplan 2014 (aerial image)"
+msgstr ""
+
 msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
 msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
+msgid "Częstochowa: Budynki (buildings)"
+msgstr ""
+
 msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgstr ""
+
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgstr ""
+
 msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
@@ -14619,24 +14823,69 @@ msgstr ""
 msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Powiat dębicki: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat lubaczowski: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat łańcucki: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat poznański: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgstr ""
+
+msgid "Powiat rzeszowski: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgstr ""
+
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgstr ""
+
+msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgstr ""
+
+msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgstr ""
+
+msgid "Rzeszów: Budynki (buildings)"
 msgstr ""
 
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14766,6 +15015,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14781,7 +15045,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -15107,6 +15371,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15191,11 +15460,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15249,7 +15513,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15264,9 +15528,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15347,6 +15608,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15385,6 +15654,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15460,9 +15732,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15868,6 +16137,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15892,10 +16169,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15912,6 +16185,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15928,11 +16205,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15948,6 +16237,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15960,6 +16253,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15987,6 +16284,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16378,6 +16687,9 @@ msgstr "Spojna cesta cesti 3. reda"
 msgid "Unclassified"
 msgstr "Neklasificirano"
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16454,6 +16766,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr "Cesta ( nepoznata vrsta)"
 
@@ -16991,6 +17306,12 @@ msgstr "Kamera za mjerenje brzine"
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17180,6 +17501,11 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
 msgstr ""
 
@@ -17233,6 +17559,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17374,6 +17704,120 @@ msgstr ""
 msgid "public"
 msgstr ""
 
+msgid "Marine Fuel"
+msgstr ""
+
+msgid "Agip"
+msgstr ""
+
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
 msgid "Pier"
 msgstr ""
 
@@ -17490,6 +17934,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -17613,154 +18060,43 @@ msgstr ""
 msgid "Fuel"
 msgstr ""
 
-msgid "Agip"
+msgid "With shop"
 msgstr ""
 
-msgid "Aral"
+msgid "convenience"
 msgstr ""
 
-msgid "Avia"
+msgid "kiosk"
 msgstr ""
 
-msgid "BP"
+msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
-msgid "Chevron"
+msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Citgo"
+msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
-msgid "Eni"
+msgid "1/50 mix (mofa/moped)"
 msgstr ""
 
-msgid "Esso"
+msgid "Fuel cards:"
 msgstr ""
 
-msgid "Exxon"
+msgid "DKV"
 msgstr ""
 
-msgid "Gulf"
+msgid "Routex"
 msgstr ""
 
-msgid "Mobil"
+msgid "UTA"
 msgstr ""
 
-msgid "OMV"
+msgid "Charging Station"
 msgstr ""
 
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
-msgid "With shop"
-msgstr ""
-
-msgid "convenience"
-msgstr ""
-
-msgid "kiosk"
-msgstr ""
-
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
-msgid "Diesel (Gas To Liquid - ultimate diesel)"
-msgstr ""
-
-msgid "Diesel for Heavy Good Vehicles"
-msgstr ""
-
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
-msgid "1/25 mix (mofa/moped)"
-msgstr ""
-
-msgid "1/50 mix (mofa/moped)"
-msgstr ""
-
-msgid "Fuel cards:"
-msgstr ""
-
-msgid "DKV"
-msgstr ""
-
-msgid "Routex"
-msgstr ""
-
-msgid "UTA"
-msgstr ""
-
-msgid "Charging Station"
-msgstr ""
-
-msgid "Voltage"
+msgid "Voltage"
 msgstr ""
 
 msgid "Amperage"
@@ -17957,9 +18293,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17978,6 +18311,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18180,6 +18516,12 @@ msgstr ""
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18270,6 +18612,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18484,6 +18829,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18971,7 +19319,7 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
@@ -18980,19 +19328,46 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
+msgid "Cardboard"
+msgstr ""
+
+msgid "Electrical Appliances"
+msgstr ""
+
 msgid "Glass"
 msgstr ""
 
+msgid "Glass Bottles"
+msgstr ""
+
+msgid "Green Waste"
+msgstr ""
+
 msgid "Paper"
 msgstr ""
 
+msgid "Plastic"
+msgstr ""
+
+msgid "Plastic Bottles"
+msgstr ""
+
+msgid "Plastic Packaging"
+msgstr ""
+
 msgid "Scrap Metal"
 msgstr ""
 
-msgid "container"
+msgid "Shoes"
+msgstr ""
+
+msgid "Small Appliances"
+msgstr ""
+
+msgid "Waste"
 msgstr ""
 
-msgid "centre"
+msgid "Recycling Centre"
 msgstr ""
 
 msgid "Waste Basket/Trash Can"
@@ -19196,6 +19571,9 @@ msgstr ""
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr ""
 
@@ -19371,12 +19749,18 @@ msgstr ""
 msgid "Basketball"
 msgstr ""
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr ""
 
@@ -19392,13 +19776,13 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
@@ -19422,9 +19806,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19443,9 +19824,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -19518,6 +19896,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20838,9 +21224,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -21853,10 +22236,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22283,6 +22666,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22307,6 +22693,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22367,6 +22765,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22457,9 +22858,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22829,6 +23239,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22883,9 +23296,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23629,47 +24039,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23678,10 +24097,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debug"
+msgstr ""
+
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24284,6 +24715,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr "Prazan sloj"
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25381,374 +25815,680 @@ msgid ""
 "highlight tracks"
 msgstr ""
 
-msgid "Delete this"
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
 msgstr ""
 
-msgid "Delete this&older"
+msgid "Connecting"
 msgstr ""
 
-msgid "km/h"
+msgid "Connected"
 msgstr ""
 
-msgid "Track name: "
+msgid "no name"
 msgstr ""
 
-msgid "Update IRS adjustment layer"
+msgid "Live GPS"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid "Show GPS data."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Speed"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Course"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
+msgid "Explore"
 msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25769,6 +26509,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -25831,47 +26574,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -26104,6 +26806,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr "Alati"
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27321,6 +28026,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27492,6 +28218,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27501,6 +28230,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27681,6 +28413,9 @@ msgstr "Nova vrijednost za {0}"
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27859,6 +28594,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27868,6 +28636,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -28104,9 +28875,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29591,9 +30359,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/ht.po b/i18n/po/ht.po
index 98f5096..77409d1 100644
--- a/i18n/po/ht.po
+++ b/i18n/po/ht.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2010-03-11 21:17+0000\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: Haitian; Haitian Creole <ht at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:42+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:44+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -97,19 +97,16 @@ msgstr ""
 msgid "Updating user interface"
 msgstr ""
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
 msgstr ""
 
 msgid "Warning"
 msgstr ""
 
-msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
+msgid "Ignoring malformed file URL: \"{0}\""
 msgstr ""
 
-msgid "Ignoring malformed URL: \"{0}\""
+msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 
 msgid ""
@@ -444,6 +441,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
 
@@ -1029,6 +1029,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr ""
 
@@ -1945,15 +1969,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr ""
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -1975,6 +1990,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2093,9 +2117,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2309,9 +2330,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr ""
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2525,6 +2552,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2567,6 +2598,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3017,6 +3051,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3134,10 +3186,44 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3327,6 +3413,12 @@ msgstr ""
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3354,13 +3446,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -3976,9 +4068,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -3988,12 +4077,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4174,13 +4275,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4378,6 +4479,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4591,43 +4693,54 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
 msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
 msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
 msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
 msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
-msgid "Menu: {0}"
+msgctxt "menu"
+msgid "Help"
 msgstr ""
 
-msgid "Save and load the current session (list of layers, etc.)"
+msgid "Menu: {0}"
 msgstr ""
 
 msgid "Edit toolbar"
@@ -4651,6 +4764,7 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
 msgstr ""
 
@@ -4773,58 +4887,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr ""
-
-msgid "Pos."
+msgid " ({0})"
 msgstr ""
 
-msgid "Role"
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5253,6 +5325,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr ""
+
 msgid "Primitive"
 msgstr ""
 
@@ -5493,6 +5568,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5639,6 +5717,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5742,7 +5855,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5870,6 +5983,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5879,17 +5997,48 @@ msgstr ""
 msgid "unknown"
 msgstr ""
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -5935,6 +6084,12 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr ""
 
@@ -6064,10 +6219,16 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
-msgid "List of notes"
+msgid "Mini map"
 msgstr ""
 
-msgid "Add comment"
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
+msgid "List of notes"
+msgstr ""
+
+msgid "Add comment"
 msgstr ""
 
 msgid "Comment"
@@ -6122,10 +6283,15 @@ msgstr ""
 msgid "Enter the ID of the object that should be downloaded"
 msgstr ""
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6154,6 +6320,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr ""
 
+msgid "Selection"
+msgstr ""
+
 msgid "Open a selection list window."
 msgstr ""
 
@@ -6244,6 +6413,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -6838,6 +7013,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6929,14 +7110,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7109,6 +7289,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7644,6 +7830,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8489,6 +8678,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr ""
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr ""
 
@@ -8542,6 +8831,9 @@ msgstr ""
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8562,7 +8854,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8645,80 +8937,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr ""
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-
-msgid "Auto Zoom"
-msgstr ""
-
-msgid "Auto load tiles"
-msgstr ""
-
-msgid "Show Errors"
-msgstr ""
-
-msgid "Load Tile"
-msgstr ""
-
-msgid "Show Tile Info"
-msgstr ""
-
-msgid "Load All Tiles"
-msgstr ""
-
-msgid "Load All Error Tiles"
-msgstr ""
-
-msgid "Increase zoom"
-msgstr ""
-
-msgid "Decrease zoom"
-msgstr ""
-
-msgid "Snap to tile size"
-msgstr ""
-
-msgid "Flush Tile Cache"
-msgstr ""
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
@@ -8728,56 +8946,30 @@ msgstr ""
 msgid "No validation errors"
 msgstr ""
 
-msgid "Blank Layer"
-msgstr ""
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "Download visible tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-
-msgid "Change resolution"
-msgstr ""
-
-msgid "Reload erroneous tiles"
-msgstr ""
-
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Automatic downloading"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Zoom to native resolution"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Supported projections are: {0}"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Save WMS file"
+msgid "Try Again"
 msgstr ""
 
-msgid "Correlate to GPX"
+msgid "No images could be matched!"
 msgstr ""
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
@@ -8864,24 +9056,9 @@ msgstr ""
 msgid "Offset:"
 msgstr ""
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
 msgid "Correlate"
 msgstr ""
 
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9075,9 +9252,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr ""
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9140,9 +9314,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9768,15 +9939,15 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr ""
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -10569,13 +10740,28 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
-msgid "imagery fade"
+msgid "1. Enter getCapabilities URL"
 msgstr ""
 
-msgid "Fade Color: "
+msgid "2. Enter name for this layer"
 msgstr ""
 
-msgid "Fade amount: "
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
+msgid "imagery fade"
+msgstr ""
+
+msgid "Fade Color: "
+msgstr ""
+
+msgid "Fade amount: "
 msgstr ""
 
 msgid "Soft"
@@ -10587,6 +10773,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10608,6 +10806,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10650,9 +10851,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr ""
 
@@ -10677,36 +10875,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11642,6 +11825,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] ""
@@ -11750,6 +11941,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12003,6 +12197,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12539,6 +12736,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12924,6 +13124,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13918,6 +14131,9 @@ msgstr ""
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr ""
+
 msgid "Blue:"
 msgstr ""
 
@@ -13957,7 +14173,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -13969,9 +14185,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14080,6 +14293,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14093,12 +14309,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14135,10 +14357,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14165,6 +14393,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14189,7 +14420,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14204,6 +14435,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14216,12 +14450,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14242,6 +14470,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14274,10 +14505,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14307,6 +14535,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14322,154 +14556,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14484,9 +14724,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14616,6 +14865,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14631,7 +14895,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -14957,6 +15221,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15041,11 +15310,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15099,7 +15363,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15114,9 +15378,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15197,6 +15458,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15235,6 +15504,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15310,9 +15582,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15718,6 +15987,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15742,10 +16019,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15762,6 +16035,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15778,11 +16055,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15798,6 +16087,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15810,6 +16103,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15837,6 +16134,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16228,6 +16537,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16304,6 +16616,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr ""
 
@@ -16841,6 +17156,12 @@ msgstr ""
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17030,6 +17351,11 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
 msgstr ""
 
@@ -17083,6 +17409,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17224,13 +17554,127 @@ msgstr ""
 msgid "public"
 msgstr ""
 
-msgid "Pier"
+msgid "Marine Fuel"
 msgstr ""
 
-msgid "Lock Gate"
+msgid "Agip"
 msgstr ""
 
-msgid "Turning Point"
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
+msgid "Pier"
+msgstr ""
+
+msgid "Lock Gate"
+msgstr ""
+
+msgid "Turning Point"
 msgstr ""
 
 msgid "Slipway"
@@ -17340,6 +17784,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -17463,78 +17910,6 @@ msgstr ""
 msgid "Fuel"
 msgstr ""
 
-msgid "Agip"
-msgstr ""
-
-msgid "Aral"
-msgstr ""
-
-msgid "Avia"
-msgstr ""
-
-msgid "BP"
-msgstr ""
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr ""
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
 msgid "With shop"
 msgstr ""
 
@@ -17544,51 +17919,12 @@ msgstr ""
 msgid "kiosk"
 msgstr ""
 
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -17807,9 +18143,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17828,6 +18161,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18030,6 +18366,12 @@ msgstr ""
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18120,6 +18462,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18334,6 +18679,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18821,7 +19169,7 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
@@ -18830,43 +19178,70 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
-msgid "Glass"
+msgid "Cardboard"
 msgstr ""
 
-msgid "Paper"
+msgid "Electrical Appliances"
 msgstr ""
 
-msgid "Scrap Metal"
+msgid "Glass"
 msgstr ""
 
-msgid "container"
+msgid "Glass Bottles"
 msgstr ""
 
-msgid "centre"
+msgid "Green Waste"
 msgstr ""
 
-msgid "Waste Basket/Trash Can"
+msgid "Paper"
 msgstr ""
 
-msgid "Waste Disposal/Dumpster"
+msgid "Plastic"
 msgstr ""
 
-msgid "Sanitary Dump Station"
+msgid "Plastic Bottles"
 msgstr ""
 
-msgid "Suction pumpout"
+msgid "Plastic Packaging"
 msgstr ""
 
-msgid "Gravity drain for hose"
+msgid "Scrap Metal"
 msgstr ""
 
-msgid "Casette or Elsan Disposal"
+msgid "Shoes"
 msgstr ""
 
-msgid "Operation times"
+msgid "Small Appliances"
 msgstr ""
 
-msgid "Backrest"
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
+msgstr ""
+
+msgid "Waste Basket/Trash Can"
+msgstr ""
+
+msgid "Waste Disposal/Dumpster"
+msgstr ""
+
+msgid "Sanitary Dump Station"
+msgstr ""
+
+msgid "Suction pumpout"
+msgstr ""
+
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
+msgstr ""
+
+msgid "Operation times"
+msgstr ""
+
+msgid "Backrest"
 msgstr ""
 
 msgid "Amount of Seats"
@@ -19046,6 +19421,9 @@ msgstr ""
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr ""
 
@@ -19221,12 +19599,18 @@ msgstr ""
 msgid "Basketball"
 msgstr ""
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr ""
 
@@ -19242,13 +19626,13 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
@@ -19272,9 +19656,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19293,9 +19674,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -19368,6 +19746,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20688,9 +21074,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -21703,10 +22086,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22133,6 +22516,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22157,6 +22543,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22217,6 +22615,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22307,9 +22708,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22679,6 +23089,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22733,9 +23146,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23479,47 +23889,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23528,10 +23947,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24134,6 +24565,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr ""
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25231,374 +25665,680 @@ msgid ""
 "highlight tracks"
 msgstr ""
 
-msgid "Delete this"
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
 msgstr ""
 
-msgid "Delete this&older"
+msgid "Connecting"
 msgstr ""
 
-msgid "km/h"
+msgid "Connected"
 msgstr ""
 
-msgid "Track name: "
+msgid "no name"
 msgstr ""
 
-msgid "Update IRS adjustment layer"
+msgid "Live GPS"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid "Show GPS data."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Speed"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Course"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
+msgid "Explore"
 msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25619,6 +26359,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -25677,47 +26420,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -25950,6 +26652,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr ""
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27167,6 +27872,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27338,6 +28064,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27347,6 +28076,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27527,6 +28259,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27705,6 +28440,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27714,6 +28482,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -27950,9 +28721,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29435,9 +30203,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/hu.po b/i18n/po/hu.po
index 5bcd7f5..d1a9945 100644
--- a/i18n/po/hu.po
+++ b/i18n/po/hu.po
@@ -8,16 +8,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
-"PO-Revision-Date: 2015-05-09 11:41+0000\n"
-"Last-Translator: Marta Homann <marta.homann at gmail.com>\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
+"PO-Revision-Date: 2015-09-09 20:24+0000\n"
+"Last-Translator: Orbán Péter <orban.peter at hotmail.com>\n"
 "Language-Team: Hungarian <kde-l10n-hu at kde.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:44+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:46+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: hu\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -99,22 +99,19 @@ msgstr "Légifelvétel-beállítások betöltése"
 msgid "Updating user interface"
 msgstr "Felhasználói felület frissítése"
 
-msgid "{0} completed in {1}"
-msgstr "{0} elkészült {1} alatt"
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "Rosszul formázott fájl-URL kihagyása: „{0}”"
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "Rosszul formázott URL mellőzése: „{0}”"
 
 msgid "Warning"
 msgstr "Figyelmeztetés"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "Rosszul formázott fájl-URL kihagyása: „{0}”"
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 "A „downloadgps” paraméter nem fogad el fájlneveket vagy fájl URL-eket"
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "Rosszul formázott URL mellőzése: „{0}”"
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -168,7 +165,7 @@ msgid "Revision"
 msgstr "Változat"
 
 msgid "Contribution"
-msgstr "Közreműködés"
+msgstr "Közreműködők"
 
 msgid "License"
 msgstr "Licenc"
@@ -313,28 +310,28 @@ msgid "Two parallels ways found. Abort."
 msgstr "Két párhuzamos vonal található. Megszakítva."
 
 msgid "data"
-msgstr "adatokra"
+msgstr "az adatokra"
 
 msgid "layer"
-msgstr "rétegre"
+msgstr "a rétegre"
 
 msgid "selection"
-msgstr "kijelölésre"
+msgstr "a kijelölésre"
 
 msgid "conflict"
-msgstr "ütközésre"
+msgstr "az ütközésre"
 
 msgid "download"
-msgstr "letöltésre"
+msgstr "a letöltésre"
 
 msgid "problem"
-msgstr "probléma"
+msgstr "a problémára"
 
 msgid "previous"
-msgstr "előző"
+msgstr "az előzőre"
 
 msgid "next"
-msgstr "következő"
+msgstr "a következőre"
 
 msgid "Nothing selected to zoom to."
 msgstr "Nincs kijelölve semmi, amire rá lehetne közelíteni."
@@ -461,10 +458,13 @@ msgid "Delete selected objects."
 msgstr "Kijelölt objektumok törlése."
 
 msgid "Toggle dialogs panel"
-msgstr "Párbeszédpanelek váltása"
+msgstr "Párbeszédpanelek megjelenítése"
 
 msgid "Toggle dialogs panel, maximize mapview"
-msgstr "Párbeszédpanelek váltása, térképnézet maximalizálása"
+msgstr "Párbeszédpanelek megjelenítése, vagy térképnézet maximalizálása"
+
+msgid "Distribute Nodes"
+msgstr "Pontok egyenletes elosztása"
 
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr "A kijelölt pontok elhelyezése egyenlő távolságokra egy vonal mentén."
@@ -477,6 +477,9 @@ msgid ""
 "* One no self-crossing way with at most two of its nodes;\n"
 "* Three nodes."
 msgstr ""
+"Jelölj ki :\n"
+"* egy önmagát nem keresztező szakaszt, vagy a szakasz két pontját\n"
+"* legalább 3 pontot"
 
 msgid "Download from OSM..."
 msgstr "Letöltés OSM-ről..."
@@ -495,7 +498,7 @@ msgid "Download data"
 msgstr "Adatok letöltése"
 
 msgid "Download notes in current view"
-msgstr ""
+msgstr "Aktuális nézethez tartozó jegyzetek letöltése"
 
 msgid "Download object..."
 msgstr "Objektumok letöltése…"
@@ -584,7 +587,7 @@ msgid "Adjust the position of this imagery layer"
 msgstr "A légifelvétel réteg pozíciójának igazítása"
 
 msgid "Adjust imagery offset"
-msgstr "Légifelvétel eltolás beállítása"
+msgstr "Légifelvétel-eltolás beállítása"
 
 msgid "OK"
 msgstr "OK"
@@ -1044,7 +1047,7 @@ msgid "Download Data"
 msgstr "Adatok letöltése"
 
 msgid "Which tasks to perform?"
-msgstr ""
+msgstr "Melyik feladatokat kívánod végrehajtani?"
 
 msgid "Ok"
 msgstr "OK"
@@ -1122,6 +1125,32 @@ msgstr ""
 "Olyan vonalakat válassz ki, amelyek nagyjából 90 vagy 180 fokos szöget "
 "zárnak be."
 
+msgid "Download from Overpass API ..."
+msgstr "Letöltés Overpass API-ról ..."
+
+msgid "Download map data from Overpass API server."
+msgstr "Térképadatok letöltése az Overpass API szerverről."
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+"Készít egy Overpass lekérdezést az Overpass Turbo varázsló segítségével"
+
+msgid "Build query"
+msgstr "Lekérdezés készítése"
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+"<html>Az Overpass varázsló nem tudja feldolgozni a következő lekérdezést:"
+
+msgid "Parse error"
+msgstr "Adatfeldolgozási hiba"
+
+msgid "Overpass query: "
+msgstr "Overpass lekérdezés: "
+
+msgid "Overpass server: "
+msgstr "Overpass szerver: "
+
 msgid "Paste"
 msgstr "Beillesztés"
 
@@ -1609,7 +1638,7 @@ msgstr[1] ""
 "Az érintett vonal eltűnne, ha leválasztanád a kiválasztott pontokat."
 
 msgid "Some irrelevant nodes have been removed from the selection"
-msgstr ""
+msgstr "Néhány lényegtelen pont el lett távolítva a kijelölésből"
 
 msgid "Undo"
 msgstr "Visszavonás"
@@ -1872,22 +1901,23 @@ msgstr "Jegyzetek"
 
 msgid "{0} note has been downloaded."
 msgid_plural "{0} notes have been downloaded."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} jegyzet letöltve."
+msgstr[1] "{0} jegyzet letöltve."
 
 msgid ""
 "Since the download limit was {0}, there might be more notes to download."
 msgstr ""
+"Mivel a letöltési limit {0} volt, még lehetnek letöltetlen jegyzetek."
 
 msgid ""
 "Request a smaller area to make sure that all notes are being downloaded."
-msgstr ""
+msgstr "Adj meg kisebb területet, hogy biztosan letöltődjön minden jegyzet."
 
 msgid "More notes to download"
 msgstr "További letöltendő jegyzetek"
 
 msgid "Download OSM Notes within Bounds"
-msgstr ""
+msgstr "OSM jegyzetek letöltése a határokon belül"
 
 msgid "Download OSM Note by ID"
 msgstr "OSM Note letöltése ID alapján"
@@ -2112,15 +2142,6 @@ msgstr "Igazított szög aktív"
 msgid "Finish drawing."
 msgstr "Rajzolás befejezése."
 
-msgid "FIX"
-msgstr "FIX"
-
-msgid "draw angle snap"
-msgstr "rajzolási szög igazítás"
-
-msgid "draw angle snap highlight"
-msgstr "rajzolási szög igazítás kiemelés"
-
 msgid "Toggle snapping by {0}"
 msgstr "Illesztés váltása ezzel: {0}"
 
@@ -2142,6 +2163,15 @@ msgstr "0,45,90,..."
 msgid "0,30,45,60,90,..."
 msgstr "0,30,45,60,90,..."
 
+msgid "FIX"
+msgstr "FIX"
+
+msgid "draw angle snap"
+msgstr "rajzolási szög igazítás"
+
+msgid "draw angle snap highlight"
+msgstr "rajzolási szög igazítás kiemelés"
+
 msgid "Angle snapping"
 msgstr "Igazított szög"
 
@@ -2274,9 +2304,6 @@ msgstr ""
 "Párhuzamos készítési hiba\n"
 "A kiválasztott vonalaknak egy elágazás nélküli vonalat kell alkotniuk"
 
-msgid "Make parallel way error"
-msgstr "Párhuzamoskészítési hiba"
-
 msgid "Drag play head"
 msgstr "Lejátszófej mozgatása"
 
@@ -2508,9 +2535,15 @@ msgstr "összes objektum"
 msgid "Also include incomplete and deleted objects in search."
 msgstr "Félkész és törölt objektumok belevétele a keresésbe"
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr "reguláris kifejezés"
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr "eszköztár gomb készítése"
 
@@ -2639,11 +2672,12 @@ msgstr "tulajdonságok"
 
 msgid ""
 "ways with at least 20 nodes, or relations containing at least 20 nodes"
-msgstr ""
+msgstr "vonalak vagy kapcsolatok legalább 20 ponttal"
 
 msgid ""
 "nodes with at least 3 referring ways, or relations containing at least 3 ways"
 msgstr ""
+"pontok legalább 3 csatlakozó vonallal, vagy kapocsolatok legalább 3 vonalból"
 
 msgid "objects having 5 to 10 tags"
 msgstr "5 - 10 címkével rendelkező objektumok"
@@ -2655,7 +2689,7 @@ msgid "closed ways with an area of 100 m²"
 msgstr "100 m² területű zárt vonal"
 
 msgid "ways with a length of 200 m or more"
-msgstr ""
+msgstr "200 méteres vagy hosszabb vonalak"
 
 msgid "state"
 msgstr "állapot"
@@ -2738,6 +2772,10 @@ msgid "RX"
 msgstr "RK"
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr "Ö"
 
@@ -2790,6 +2828,9 @@ msgstr "Várt számtartomány"
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr "Nem várt jel. Várt {0}, kapott {1}"
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr "Nem várt utalvány: {0}"
 
@@ -3276,6 +3317,24 @@ msgstr "Nem sikerült létrehozni a hiányző cache könyvtárat: {0}"
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr "<html>Nem sikerült létrehozni a hiányzó cache könyvtárat: {0}</html>"
 
+msgid "Unable to delete temporary file {0}"
+msgstr "Nem lehetséges a(z) {0} ideiglenes fájl törlése"
+
+msgid "Unable to set file non-readable {0}"
+msgstr "Nem lehetséges a(z) {0} fájl nem olvashatóvá tétele"
+
+msgid "Unable to set file non-writable {0}"
+msgstr "Nem lehetséges a(z) {0} fájl írásvédetté tétele"
+
+msgid "Unable to set file non-executable {0}"
+msgstr "Nem lehetséges a(z) {0} fájl nem futtathatóvá tétele"
+
+msgid "Unable to set file readable {0}"
+msgstr "Nem lehetséges a(z) {0} fájl olvashatóvá tétele"
+
+msgid "Unable to set file writable {0}"
+msgstr "Nem lehetséges a(z) {0} fájl írhatóvá tétele"
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3411,12 +3470,48 @@ msgctxt "compass"
 msgid "E"
 msgstr "K"
 
-msgid "Not in cache"
-msgstr "Nincs a cache-ben"
-
 msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr "''{0}'' vetület nem található, ''{1}'' könyvjelző nem használható"
 
+msgid "HTTP error {0} when loading tiles"
+msgstr "HTTP hiba {0} a csempék letöltése közben"
+
+msgid "Error downloading tiles: {0}"
+msgstr "Hiba a csempe letöltése közben: {0}"
+
+msgid "Could not load image from tile server"
+msgstr "A csempék letöltése sikertelen a szerverről"
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+"{0} nem egy érvényes WMS argumentum. Ellenőrizd a szerver URL-t:\n"
+"{1}"
+
+msgid "Select WMTS layer"
+msgstr "Válaszd ki a WMTS réteget"
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr "Vetület"
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr "A getCapabilities dokumentum nem definiált rétegeket: {0}"
+
+msgid "No layer selected"
+msgstr "Nincs réteg kiválasztva"
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
+msgstr ""
+
 msgid "ID > 0 expected. Got {0}."
 msgstr "Várt ID > 0, kapott: {0}"
 
@@ -3623,6 +3718,15 @@ msgstr "szöveg"
 msgid "areatext"
 msgstr "területszöveg"
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+"Az UTM vetülethez (''+proj=utm'') szükséges a ''+zone=...'' paraméter "
+"megadása."
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+"A ''+zone=...'' paraméternek 1 és 60 közé eső egész számnak kell lennie."
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr "A paraméter ''+'' karakterrel kell kezdődjön (talált: ''{0}'')"
 
@@ -3650,15 +3754,15 @@ msgstr "''{0}'' ellipszoid nem támogatott."
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr "Ellipszoid paraméterek kombinációja nem támogatott."
 
+msgid "Unknown datum identifier: ''{0}''"
+msgstr "Ismeretlen dátum azonosító: ''{0}''"
+
 msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr "Ellipszoid kötelező (+ellps=* vagy +a=*, +b=*)"
 
 msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr "+nadgrids paraméter ''{0}'' rácseltolás fájlhoz nem támogatott"
 
-msgid "Unknown datum identifier: ''{0}''"
-msgstr "Ismeretlen dátum azonosító: ''{0}''"
-
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
 msgstr "Dátum szükséges (+datum=*, +towgs84=* or +nadgrids=*)"
 
@@ -4075,6 +4179,8 @@ msgid ""
 "With the currently used mappaint style the style for inner way equals the "
 "multipolygon style"
 msgstr ""
+"A jelenlegi térképstílussal a belső vonal megjelenése megegyezik a "
+"multipoligon megjelenésével"
 
 msgid "Style for outer way mismatches"
 msgstr "A külső vonal stílusa nem megfelelő"
@@ -4083,6 +4189,8 @@ msgid ""
 "With the currently used mappaint style(s) the style for outer way mismatches "
 "polygon"
 msgstr ""
+"A jelenlegi térképstílussal a külső vonal megjelenése eltér a multipoligon "
+"megjelenésétől"
 
 msgid "Area style on outer way"
 msgstr "Terület típus van a külső vonalon"
@@ -4115,7 +4223,7 @@ msgstr ""
 "összetétele, mint Italia - Italien - Italy"
 
 msgid "Missing name:*={0}. Add tag with correct language key."
-msgstr ""
+msgstr "Hiányzó név:*={0}. Adj hozzá címkét helyes nyelvi kóddal."
 
 msgid "A name is missing, even though name:* exists."
 msgstr "name hiányzik, viszont van megadott name:*"
@@ -4302,9 +4410,6 @@ msgstr "Címke kulcs a megengedettnél hosszabb"
 msgid "Tags with empty values"
 msgstr "Címkék üres értékkel"
 
-msgid "Invalid property key"
-msgstr "Érvénytelen tulajdonság kulcs"
-
 msgid "Invalid white space in property key"
 msgstr "Érvénytelen szóköz a tulajdonságkulcsban"
 
@@ -4314,12 +4419,24 @@ msgstr "Tulajdonságérték szóközzel kezdődik vagy végződik"
 msgid "Property values contain HTML entity"
 msgstr "Tulajdonságérték HTML kódot tartalmaz"
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr "''{0}'' kulcs nincs az alapbeállításokban."
 
 msgid "Presets do not contain property key"
 msgstr "Az alapbeállítások nem tartalmazzák a tulajdonságkulcsot"
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr "''{0}'' érték ''{1}'' kulccsal nincs az alapbeállításokban."
 
@@ -4505,6 +4622,9 @@ msgstr "Vonal pontja másik vonalhoz közel"
 msgid "Connected way end node near other way"
 msgstr "Csatlakozó vonal végpontja másik vonalhoz közel"
 
+msgid "Unconnected nodes without physical tags"
+msgstr "Nem csatlakozó pontok fizikai címke nélkül"
+
 msgid "Untagged and unconnected nodes"
 msgstr "Címkézetlen és nem csatlakozó pontok"
 
@@ -4513,9 +4633,6 @@ msgstr ""
 "Ez a teszt olyan címkézetlen pontokat keres, amik nem részei egyetlen "
 "vonalnak sem."
 
-msgid "Unconnected nodes without physical tags"
-msgstr "Nem csatlakozó pontok fizikai címke nélkül"
-
 msgid "No tags"
 msgstr "Címkézetlen"
 
@@ -4711,6 +4828,7 @@ msgstr "Kattints a dialógus bezárásához"
 msgid "Imagery offset"
 msgstr "Légifelvétel-eltolás"
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr "Légifelvétel"
 
@@ -4890,6 +5008,8 @@ msgstr[1] ""
 msgid ""
 "Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
 msgstr ""
+"Használható IPV6 hálózat elérhető, következő indításnál az IPV6 lesz "
+"előnyben részesítve az IPV4 felett."
 
 msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
 msgstr "IPv6 hálózat észlelve, az IPv6 előnyben részesítése az IPv4 helyett."
@@ -4898,6 +5018,8 @@ msgid ""
 "Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
 "restart."
 msgstr ""
+"Nincs használható IPV6 hálózat, következő indításnál az IPV4 lesz előnyben "
+"részesítve az IPV6 felett."
 
 msgid "Unsaved osm data"
 msgstr "Elmentetlen osm adat"
@@ -4946,45 +5068,56 @@ msgstr ""
 "sikerült</b> a következő hálózati hiba miatt:<br>{1}Ezt okozhatja egy "
 "hiányzó proxy beállítás.<br>Szeretnéd most módosítani a proxy beállításokat?"
 
+msgctxt "menu"
 msgid "File"
 msgstr "Fájl"
 
-msgid "Session"
-msgstr "Munkamenet"
+msgctxt "menu"
+msgid "Edit"
+msgstr "Szerkesztés"
 
+msgctxt "menu"
 msgid "View"
 msgstr "Nézet"
 
+msgctxt "menu"
 msgid "Tools"
 msgstr "Eszközök"
 
+msgctxt "menu"
 msgid "More tools"
 msgstr "További eszközök"
 
+msgctxt "menu"
 msgid "Data"
 msgstr "Adatok"
 
+msgctxt "menu"
 msgid "Selection"
 msgstr "Kiválasztás"
 
+msgctxt "menu"
 msgid "Presets"
 msgstr "Címkék"
 
 msgid "More..."
 msgstr "Továbbiak..."
 
+msgctxt "menu"
 msgid "GPS"
 msgstr "GPS"
 
+msgctxt "menu"
 msgid "Windows"
 msgstr "Ablakok"
 
+msgctxt "menu"
+msgid "Help"
+msgstr "Súgó"
+
 msgid "Menu: {0}"
 msgstr "Menü: {0}"
 
-msgid "Save and load the current session (list of layers, etc.)"
-msgstr "Aktuális munkamenet elementése, betöltése (rétegek listája, stb.)"
-
 msgid "Edit toolbar"
 msgstr "Szerkesztő eszköztár"
 
@@ -5008,8 +5141,9 @@ msgstr "Kattintásra megnyílik a légifelvételek fül a beállításokból"
 msgid "Search menu items"
 msgstr "Menüelemek keresése"
 
+msgctxt "menu"
 msgid "Audio"
-msgstr "Hang"
+msgstr ""
 
 msgid "Do not hide toolbar"
 msgstr "Ne rejtse el az eszköztárat"
@@ -5132,67 +5266,17 @@ msgstr "Háttérben"
 msgid "Click to run job in background"
 msgstr "Kattints a művelet háttérben futtatásához"
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-"A légifelvétel eltolása hibás lehet, ellenőrizd GPS nyomvonalak alapján!"
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-
-msgid "Details..."
-msgstr "Részletek…"
-
-msgid "Hide this message and never show it again"
-msgstr "Üzenet végleges elrejtése"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-"<html>Kérlek erősítsd meg <strong>1 objektum eltávolítását</strong> "
-"<strong>1 kapcsolatból</strong>.</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>Kérlek erősítsd meg <strong>1 objektum eltávolítását</strong> "
-"<strong>{0} kapcsolatból</strong>.</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>Kérlek erősítsd meg <strong>{0}objektum eltávolítását</strong> "
-"<strong>{1} kapcsolatból</strong>.</html>"
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] "{0} objektum törlése"
-msgstr[1] "{0} objektum törlése"
-
-msgid "Delete objects"
-msgstr "Objektumok törlése"
-
-msgid "To delete"
-msgstr "Törlendő"
-
-msgid "From Relation"
-msgstr "Kapcsolatból"
-
-msgid "Pos."
-msgstr "Poz."
+msgid " ({0})"
+msgstr " ({0})"
 
-msgid "Role"
-msgstr "Szerep"
+msgid "{0} completed in {1}"
+msgstr "{0} elkészült {1} alatt"
 
-msgid "Click to close the dialog and remove the object from the relations"
-msgstr ""
-"Kattints a dialógus bezárásához és az objektum törléséhez a kapcsolatból"
+msgid "Enlarge"
+msgstr "Nagyít"
 
-msgid "Click to close the dialog and to abort deleting the objects"
-msgstr "Kattints a dialógus bezárásához és a törlés megszakításához"
+msgid "Shrink"
+msgstr "Kicsinyít"
 
 msgid ""
 "<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
@@ -5651,6 +5735,9 @@ msgstr "Törölt állapota megtartása"
 msgid "Undecide conflict between deleted state"
 msgstr "A törölt állapot miatti ütközés eldöntetlenné tétele"
 
+msgid "Role"
+msgstr "Szerep"
+
 msgid "Primitive"
 msgstr "Elem"
 
@@ -5930,6 +6017,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr "A szerep alkalmazása az összes tagra"
 
+msgid "Pos."
+msgstr "Poz."
+
 msgid "Orig. Way"
 msgstr "Ered. vonal"
 
@@ -6089,6 +6179,48 @@ msgstr "Ütközések megoldása"
 msgid "Resolve conflicts for ''{0}''"
 msgstr "''{0}'' ütközésének megoldása"
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+"<html>Kérlek erősítsd meg <strong>1 objektum eltávolítását</strong> "
+"<strong>1 kapcsolatból</strong>.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Kérlek erősítsd meg <strong>1 objektum eltávolítását</strong> "
+"<strong>{0} kapcsolatból</strong>.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Kérlek erősítsd meg <strong>{0}objektum eltávolítását</strong> "
+"<strong>{1} kapcsolatból</strong>.</html>"
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] "{0} objektum törlése"
+msgstr[1] "{0} objektum törlése"
+
+msgid "Delete objects"
+msgstr "Objektumok törlése"
+
+msgid "To delete"
+msgstr "Törlendő"
+
+msgid "From Relation"
+msgstr "Kapcsolatból"
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+"Kattints a dialógus bezárásához és az objektum törléséhez a kapcsolatból"
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr "Kattints a dialógus bezárásához és a törlés megszakításához"
+
 msgid "Filter objects and hide/disable them."
 msgstr "Objektumok szűrése és elrejtése/letiltása"
 
@@ -6192,8 +6324,8 @@ msgstr "Fejlett objektum infó"
 msgid "map style"
 msgstr "térképsítlus"
 
-msgid " ({0})"
-msgstr " ({0})"
+msgid "edit counts"
+msgstr ""
 
 msgid "not in data set"
 msgstr "nincs az adathalmazban"
@@ -6333,6 +6465,11 @@ msgstr ""
 "Figyelmeztetés: A 2 kiválasztott objektum egyenlő, de nem megegyező stílus "
 "cache-t használ."
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr "xml"
 
@@ -6342,37 +6479,70 @@ msgstr "mapcss"
 msgid "unknown"
 msgstr "ismeretlen"
 
-msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
-msgstr ""
-"Add meg az új pont koordinátáit.<br/>A szélességet és hosszúságot "
-"elválaszthatod szóközzel, vesszővel vagy pontosvesszővel.<br/>Használj "
-"pozitív számokat vagy N, E karaktereket az északi és keleti irány "
-"jelöléséhez..<br/>A déli és nyugati irányhoz negatív számokat, vagy S és W "
-"karaktereket tudsz használni.<br/>A koortináták at három formátumban tudod "
-"megadni:<ul><li><i>fok</i><tt>°</tt></li><li><i>fok</i><tt>°</tt> "
-"<i>perc</i><tt>'</tt></li><li><i>fok</i><tt>°</tt> "
-"<i>perc</i><tt>'</tt> <i>másodperc</i><tt>&quot</tt></li></ul>A "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> szimbólumok opcionálisak.<br/><br/>Néhány példa:<ul>{0}</ul>"
-
-msgid "Projected coordinates:"
-msgstr "Vetített koordináták:"
+msgid "Enter the coordinates for the new node."
+msgstr "Add meg az új pont koordinátáit!"
 
 msgid ""
-"Enter easting and northing (x and y) separated by space, comma or semicolon."
+"You can separate longitude and latitude with space, comma or semicolon."
 msgstr ""
-"Írd be a keleti és északi (x és y) koordinátákat, szóközzel, vesszővel vagy "
-"pontosvesszővel elválasztva."
+"A szélességi és hosszúsági fokokat szóközzel, vesszővel, vagy "
+"pontosvesszővel lehet elválasztani."
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+"Pozitív előjellel, vagy N és E betűkkel jelölhető az északi és a keleti "
+"félteke."
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+"A déli és a nyugati féltekékhez negatív számok, vagy az S és W betűk "
+"használhatók."
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr "Koordináták az alábbi 3 formátum valamelyikében adhatók meg:"
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr "<i>fok.tizedes</i><tt>°</tt>"
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr "<i>fok</i><tt>°</tt> <i>perc.tizedes</i><tt>'</tt>"
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+"<i>fok</i><tt>°</tt> <i>perc</i><tt>'</tt> "
+"<i>másodperc</i><tt>&quot</tt>"
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+"A <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> szimbólumok nem kötelezőek."
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+"a következő szintaxis is használható: <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+
+msgid "Some examples:"
+msgstr "Néhány példa:"
+
+msgid "Projected coordinates:"
+msgstr "Vetített koordináták:"
+
+msgid ""
+"Enter easting and northing (x and y) separated by space, comma or semicolon."
+msgstr ""
+"Írd be a keleti és északi (x és y) koordinátákat, szóközzel, vesszővel vagy "
+"pontosvesszővel elválasztva."
 
 msgid "Lat/Lon"
 msgstr "Szélesség/Hosszúság"
@@ -6390,7 +6560,7 @@ msgid "Toggle visibility of layer: {0}"
 msgstr "{0} réteg láthatóságának átkapcsolása"
 
 msgid "Open a list of all loaded layers."
-msgstr "Az összes betöltött réteg listájának megnyitása"
+msgstr "A betöltött rétegek listájának megjelenítése"
 
 msgid "Delete the selected layers."
 msgstr "Kiválasztott rétegek törlése."
@@ -6410,6 +6580,12 @@ msgstr "Átlátszóság"
 msgid "Adjust opacity of the layer."
 msgstr "A réteg átlátszóságának szabályozása"
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr "Aktiválás"
 
@@ -6539,6 +6715,12 @@ msgstr "Stílusbeállítások"
 msgid "Customize the style"
 msgstr "Stílus testreszabása"
 
+msgid "Mini map"
+msgstr ""
+
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
 msgid "List of notes"
 msgstr "Jegyzetek listája"
 
@@ -6597,15 +6779,18 @@ msgstr "Objektum ID:"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "Add meg a letöltendő objektum azonosítóját"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+"Az objektum azonosítókat vesszővel, vagy szóközzel lehet elválasztani, mint "
+"például: {0}"
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
-"Az objektum azonosítók vesszővel vagy szóközzel lehetnek "
-"elválasztva.<br/>Példák: {0}<br/>Vegyes módban így add meg az objektumokat: "
-"{1}<br/>({2} jelenti a <i>pontot</i>, {3} a <i>vonalat</i> és {4} a "
-"<i>kapcsolatot</i>)"
 
 msgid ""
 "Invalid ID list specified\n"
@@ -6635,6 +6820,9 @@ msgstr "Kapcsolatok: {0}/{1}"
 msgid "Relations: {0}"
 msgstr "Kapcsolatok: {0}"
 
+msgid "Selection"
+msgstr "Kiválasztás"
+
 msgid "Open a selection list window."
 msgstr "A kiválsztott objektumok listájának megnyitása"
 
@@ -6727,6 +6915,12 @@ msgstr "Hibakereső eszköz ablakának megnyitása"
 msgid "Validation results"
 msgstr "Hibakeresési eredmények"
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr "Javítás"
 
@@ -7381,6 +7575,12 @@ msgstr "OSM wiki súgó oldala a címkéhez (F1)"
 msgid "Launch browser with wiki help for selected object"
 msgstr "Böngésző indítása a kijelölt objektum wiki-leírásával"
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr "Érték beillesztése"
 
@@ -7474,14 +7674,13 @@ msgstr "Nemrég használt címkék száma"
 msgid "Remember last used tags after a restart"
 msgstr "Emlékezzen a legutóbb használt cimkékre újraindítás után is"
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7679,6 +7878,12 @@ msgstr "Kapcsolattagok rendezése"
 msgid "Relation Editor: Sort"
 msgstr "Kapcsolatszerkesztő: rendezés"
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr "Kapcsolattagok sorrendjének megfordítása"
 
@@ -8276,6 +8481,9 @@ msgstr "{0} kapcsolat előzményének betöltése"
 msgid "Node {0}"
 msgstr "{0} pont"
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr "Közelítés a pontra"
 
@@ -9264,6 +9472,107 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] "{0} törlendő objektum:"
 msgstr[1] "{0} törlendő objektum:"
 
+msgid "Show Tile Info"
+msgstr "Csempe infó megjelenítése"
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr "Automatikus nagyítás"
+
+msgid "Auto load tiles"
+msgstr "Csempék automatikus betöltése"
+
+msgid "Load All Tiles"
+msgstr "Összes csempe betöltése"
+
+msgid "Load All Error Tiles"
+msgstr "Összes hibás csempe betöltése"
+
+msgid "Zoom to native resolution"
+msgstr "Nagyítás eredeti felbontásra"
+
+msgid "Change resolution"
+msgstr "Felbontás váltása"
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr "Hibák mutatása"
+
+msgid "Load Tile"
+msgstr "Csempe betöltése"
+
+msgid "Increase zoom"
+msgstr "Nagyítás növelése"
+
+msgid "Decrease zoom"
+msgstr "Nagyítás csökkentése"
+
+msgid "Snap to tile size"
+msgstr "Csempemérethez illesztés"
+
+msgid "Flush Tile Cache"
+msgstr "Csempe cache ürítése"
+
+msgid "zoom in to load any tiles"
+msgstr "csempék megjelenítéséhez közelíts"
+
+msgid "zoom in to load more tiles"
+msgstr "több csempe megjelenítéséhez közelíts"
+
+msgid "increase zoom level to see more detail"
+msgstr "több részlet megjelenítéséhez növeld a nagyítást"
+
+msgid "No tiles at this zoom level"
+msgstr "Nincs csempe ezen a nagyítási szinten"
+
+msgid "Current zoom: {0}"
+msgstr "Jelenlegi nagyítás: {0}"
+
+msgid "Display zoom: {0}"
+msgstr "Megjelenített nagyítás: {0}"
+
+msgid "Pixel scale: {0}"
+msgstr "Képpont méretarány: {0}"
+
+msgid "Best zoom: {0}"
+msgstr "Legjobb nagyítás: {0}"
+
+msgid "Cache stats: {0}"
+msgstr "Gyorsítótár adatok: {0}"
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr "{0}/{1} csempe letöltve"
+
+msgid "Save WMS file"
+msgstr "WMS fájl mentése"
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+"A légifelvétel eltolása hibás lehet, ellenőrizd GPS nyomvonalak alapján!"
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+
+msgid "Details..."
+msgstr "Részletek…"
+
+msgid "Hide this message and never show it again"
+msgstr "Üzenet végleges elrejtése"
+
 msgid "Customize Color"
 msgstr "Szín testreszabása"
 
@@ -9317,6 +9626,9 @@ msgstr "GPX fájl mentése"
 msgid "Imagery fade"
 msgstr "Légifelvétel áttetszősége"
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr "HIBA"
 
@@ -9337,12 +9649,9 @@ msgstr "Az összes vetület támogatott"
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
-"A {0} réteg nem támogatja az új {1} vetületet.\n"
-"{2}\n"
-"Változtasd meg a vetületet vagy távolítsd el a réteget."
 
 msgid "Save Layer"
 msgstr "Réteg mentése"
@@ -9425,185 +9734,79 @@ msgstr ""
 msgid "Save OSM file"
 msgstr "OSM fájl mentése"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-"{0} nem érvényes TMS argumentum. Kérlek ellenőrizd ezt az szerver URL-t:\n"
-"{1}"
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-"A TMS réteg nem támogatja a {0} vetületet.\n"
-"{1}\n"
-"Változtasd meg a vetületet, vagy távolítsd el a réteget."
+msgid "EPSG:4326 and Mercator projection are supported"
+msgstr "EPSG:4326 és Mercator vetület támogatott"
 
-msgid "Auto Zoom"
-msgstr "Automatikus nagyítás"
+msgid "Validation errors"
+msgstr "Ellenőrzési hibák"
 
-msgid "Auto load tiles"
-msgstr "Csempék automatikus betöltése"
+msgid "No validation errors"
+msgstr "Nincs ellenőrzési hiba"
 
-msgid "Show Errors"
-msgstr "Hibák mutatása"
+msgid "Set WMS Bookmark"
+msgstr "WMS könyvjelző beállítása"
 
-msgid "Load Tile"
-msgstr "Csempe betöltése"
+msgid ""
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
+msgstr ""
 
-msgid "Show Tile Info"
-msgstr "Csempe infó megjelenítése"
+msgid "Correlate to GPX"
+msgstr "Korrelálás GPX-hez"
 
-msgid "Load All Tiles"
-msgstr "Összes csempe betöltése"
+msgid "Invalid timezone"
+msgstr "Érvénytelen időzóna"
 
-msgid "Load All Error Tiles"
-msgstr "Összes hibás csempe betöltése"
+msgid "Invalid offset"
+msgstr "Érvénytelen eltolás"
 
-msgid "Increase zoom"
-msgstr "Nagyítás növelése"
+msgid "Correlate images with GPX track"
+msgstr "Képek korrelálása GPX nyomvonalhoz"
 
-msgid "Decrease zoom"
-msgstr "Nagyítás csökkentése"
+msgid "Try Again"
+msgstr "Újrapróbálás"
 
-msgid "Snap to tile size"
-msgstr "Csempemérethez illesztés"
+msgid "No images could be matched!"
+msgstr "Nincsenek párosítható képek!"
 
-msgid "Flush Tile Cache"
-msgstr "Csempe cache ürítése"
+msgid "GPX Files (*.gpx *.gpx.gz)"
+msgstr "GPX Fájlok (*.gpx *.gpx.gz)"
 
-msgid "zoom in to load any tiles"
-msgstr "csempék megjelenítéséhez közelíts"
+msgid "File {0} is loaded yet under the name \"{1}\""
+msgstr "{0} fájl már be van töltve ''{1}'' néven"
 
-msgid "zoom in to load more tiles"
-msgstr "több csempe megjelenítéséhez közelíts"
+msgid "Error while parsing {0}"
+msgstr "Hiba {0} elemzése közben"
 
-msgid "increase zoom level to see more detail"
-msgstr "több részlet megjelenítéséhez növeld a nagyítást"
+msgid "Could not read \"{0}\""
+msgstr "\"{0}\" nem olvasható"
 
-msgid "No tiles at this zoom level"
-msgstr "Nincs csempe ezen a nagyítási szinten"
+msgid ""
+"<html>Take a photo of your GPS receiver while it displays the "
+"time.<br>Display that photo here.<br>And then, simply capture the time you "
+"read on the photo and select a timezone<hr></html>"
+msgstr ""
+"<html>Készíts egy fényképet a GPS vevődről, miközben a pontos időt jeleníti "
+"meg.<br>Jelenítsd meg a képet itt.<br>Ezután olvasd le a  pontos időt a "
+"fényképről, írd be, és válaszd ki az időzónát.<hr></html>"
 
-msgid "Current zoom: {0}"
-msgstr "Jelenlegi nagyítás: {0}"
+msgid "Photo time (from exif):"
+msgstr "Fénykép ideje (exif adatokból):"
 
-msgid "Display zoom: {0}"
-msgstr "Megjelenített nagyítás: {0}"
+msgid "Gps time (read from the above photo): "
+msgstr "GPS idő (a fenti fényképről): "
 
-msgid "Pixel scale: {0}"
-msgstr "Képpont méretarány: {0}"
+msgid "I am in the timezone of: "
+msgstr "Ebben az időzónában vagyok: "
 
-msgid "Best zoom: {0}"
-msgstr "Legjobb nagyítás: {0}"
+msgid "No date"
+msgstr "Nincs dátum"
 
-msgid "Cache stats: {0}"
-msgstr "Gyorsítótár adatok: {0}"
+msgid "Open another photo"
+msgstr "Másik fotó megnyitása"
 
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr "TMS réteg ({0}), letöltés {1} zoomszinten"
-
-msgid "EPSG:4326 and Mercator projection are supported"
-msgstr "EPSG:4326 és Mercator vetület támogatott"
-
-msgid "Validation errors"
-msgstr "Ellenőrzési hibák"
-
-msgid "No validation errors"
-msgstr "Nincs ellenőrzési hiba"
-
-msgid "Blank Layer"
-msgstr "Üres réteg"
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr "{0}/{1} csempe letöltve"
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr "{0} WMS réteg, automatikus letöltés {1}-es nagyítással"
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr "{0} WMS réteg, letöltés {1}-es nagyítással"
-
-msgid "Download visible tiles"
-msgstr "Látható csempék letöltése"
-
-msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-"A kért terület túl nagy. Kérlek, nagyíts rá egy kicsit, vagy válts felbontást"
-
-msgid "Change resolution"
-msgstr "Felbontás váltása"
-
-msgid "Reload erroneous tiles"
-msgstr "Hibás csempék újratöltése"
-
-msgid "Alpha channel"
-msgstr "Alfa csatorna"
-
-msgid "Automatically change resolution"
-msgstr "Automatikus felbontás váltás"
-
-msgid "Set WMS Bookmark"
-msgstr "WMS könyvjelző beállítása"
-
-msgid "Automatic downloading"
-msgstr "Automata letöltés"
-
-msgid "Zoom to native resolution"
-msgstr "Nagyítás eredeti felbontásra"
-
-msgid "Supported projections are: {0}"
-msgstr "Támogatott vetületek: {0}"
-
-msgid "Unsupported WMS file version; found {0}, expected {1}"
-msgstr "Nemtámogatott WMS fájl verzió; talált {0}, várt {1}"
-
-msgid "Save WMS file"
-msgstr "WMS fájl mentése"
-
-msgid "Correlate to GPX"
-msgstr "Korrelálás GPX-hez"
-
-msgid "GPX Files (*.gpx *.gpx.gz)"
-msgstr "GPX Fájlok (*.gpx *.gpx.gz)"
-
-msgid "File {0} is loaded yet under the name \"{1}\""
-msgstr "{0} fájl már be van töltve ''{1}'' néven"
-
-msgid "Error while parsing {0}"
-msgstr "Hiba {0} elemzése közben"
-
-msgid "Could not read \"{0}\""
-msgstr "\"{0}\" nem olvasható"
-
-msgid ""
-"<html>Take a photo of your GPS receiver while it displays the "
-"time.<br>Display that photo here.<br>And then, simply capture the time you "
-"read on the photo and select a timezone<hr></html>"
-msgstr ""
-"<html>Készíts egy fényképet a GPS vevődről, miközben a pontos időt jeleníti "
-"meg.<br>Jelenítsd meg a képet itt.<br>Ezután olvasd le a  pontos időt a "
-"fényképről, írd be, és válaszd ki az időzónát.<hr></html>"
-
-msgid "Photo time (from exif):"
-msgstr "Fénykép ideje (exif adatokból):"
-
-msgid "Gps time (read from the above photo): "
-msgstr "GPS idő (a fenti fényképről): "
-
-msgid "I am in the timezone of: "
-msgstr "Ebben az időzónában vagyok: "
-
-msgid "No date"
-msgstr "Nincs dátum"
-
-msgid "Open another photo"
-msgstr "Másik fotó megnyitása"
-
-msgid "Synchronize time from a photo of the GPS receiver"
-msgstr "GPS vevő idejének szinkronizálása egy fénykép segítségével"
+msgid "Synchronize time from a photo of the GPS receiver"
+msgstr "GPS vevő idejének szinkronizálása egy fénykép segítségével"
 
 msgid ""
 "Error while parsing the date.\n"
@@ -9656,24 +9859,9 @@ msgstr "Időzóna: "
 msgid "Offset:"
 msgstr "Eltolás:"
 
-msgid "Correlate images with GPX track"
-msgstr "Képek korrelálása GPX nyomvonalhoz"
-
 msgid "Correlate"
 msgstr "Korrelálás"
 
-msgid "Invalid timezone"
-msgstr "Érvénytelen időzóna"
-
-msgid "Invalid offset"
-msgstr "Érvénytelen eltolás"
-
-msgid "Try Again"
-msgstr "Újrapróbálás"
-
-msgid "No images could be matched!"
-msgstr "Nincsenek párosítható képek!"
-
 msgid "No gpx selected"
 msgstr "Nincs kiválasztott GPX"
 
@@ -9889,9 +10077,6 @@ msgstr ""
 "\n"
 "GPS idő: {0}"
 
-msgid "JPEG images (*.jpg)"
-msgstr "JPEG képek (*.jpg)"
-
 msgid "Show thumbnails"
 msgstr "Bélyegképek megjelenítése"
 
@@ -9960,9 +10145,6 @@ msgstr "méter"
 msgid "Maximum area per request:"
 msgstr "Maximális terület lekérdezésenként:"
 
-msgid "sq km"
-msgstr "km²"
-
 msgid "Download near:"
 msgstr "Letöltés a közelében:"
 
@@ -10704,15 +10886,15 @@ msgstr "Beállítóablak bezárása és a beállításfrissítések eldobása"
 msgid "Save the preferences and close the dialog"
 msgstr "Beállítások mentése és a dialógusablak bezárása"
 
-msgid "Download plugins"
-msgstr "Bővítmények letöltése"
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr "Egyes beállítások érvénybe lépéséhez újra kell indítanod a JOSM-ot."
 
 msgid "Would you like to restart now?"
 msgstr "Most újraindítod?"
 
+msgid "Download plugins"
+msgstr "Bővítmények letöltése"
+
 msgid "Icon paths:"
 msgstr "Ikon könyvtár:"
 
@@ -11570,6 +11752,21 @@ msgstr "Határok megjelenítése"
 msgid "No bounding box was found for this layer."
 msgstr "A réteghez nem található befoglalónégyzet."
 
+msgid "1. Enter getCapabilities URL"
+msgstr ""
+
+msgid "2. Enter name for this layer"
+msgstr ""
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr "légifelvétel áttetszősége"
 
@@ -11588,6 +11785,18 @@ msgstr "Erős"
 msgid "Sharpen (requires layer re-add): "
 msgstr "Élesítés (réteg újra hozzáadását igényli): "
 
+msgid "Tile cache directory: "
+msgstr "Csempegyorsítótár könyvtár: "
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr "Légifelvétel beállítások"
 
@@ -11609,6 +11818,9 @@ msgstr "Légifelvétel források"
 msgid "Offset bookmarks"
 msgstr "Eltolás könyvjelzők"
 
+msgid "Cache contents"
+msgstr "Gyorsítótár tartalma"
+
 msgid "Imagery Background: Default"
 msgstr "Légifelvétel háttérkép: Alapértelmezett"
 
@@ -11651,9 +11863,6 @@ msgstr "Érvénytelen EULA licenc URL: {0}"
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr "Hibásan formázott EULA licenc URL: {0}"
 
-msgid "Projection"
-msgstr "Vetület"
-
 msgid "Layer"
 msgstr "Réteg"
 
@@ -11678,18 +11887,12 @@ msgstr "Max. zoom szint: "
 msgid "Add to slippymap chooser: "
 msgstr "Hozzáadás a slippymap választóba: "
 
-msgid "Tile cache directory: "
-msgstr "Csempegyorsítótár könyvtár: "
-
 msgid "Maximum concurrent downloads: "
 msgstr "Maximális egy időben történő letöltés: "
 
 msgid "Maximum concurrent downloads per host: "
 msgstr "Maximális egy időben történő letöltés csomópontonként: "
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
@@ -11697,20 +11900,11 @@ msgstr ""
 "Ez a réteg nem támogatja egyik JOSM vetületet sem,\n"
 "ezért nem használhatod. Az üzenet nem jelenik meg többször."
 
-msgid "Downloader:"
-msgstr "Letöltő:"
-
 msgid "Simultaneous connections:"
 msgstr "Szimultán kapcsolatok:"
 
-msgid "Overlap tiles"
-msgstr "Csempék átfedése"
-
-msgid "% of east:"
-msgstr "% keleten"
-
-msgid "% of north:"
-msgstr "% északon"
+msgid "Tile size:"
+msgstr ""
 
 msgid "Auto save enabled"
 msgstr "Automatikus mentés engedélyezése"
@@ -12734,6 +12928,14 @@ msgstr "Címkék alkalmazása"
 msgid "New relation"
 msgstr "Új kapcsolat"
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] "{0} objektum módosítása"
@@ -12853,6 +13055,9 @@ msgstr "Készletkereső ablak megnyitása"
 msgid "Search presets"
 msgstr "Készlet keresése"
 
+msgid "Presets"
+msgstr "Címkék"
+
 msgid "Search for objects by preset"
 msgstr "Objektumok keresése címkekészlet alapján"
 
@@ -13166,6 +13371,9 @@ msgstr "<html>A fájlok olvasása nem lehetséges.<br>A hiba:<br>{0}</html>"
 msgid "GeoJSON Files"
 msgstr "GeoJSON fájlok"
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr "A ''{0}'' réteg nem támogatott"
 
@@ -13748,6 +13956,9 @@ msgstr "Az OSM szerver fájlok ZIP tömörítettek"
 msgid "WMS Files (*.wms)"
 msgstr "WMS fájlok (*.wms)"
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr "Nemtámogatott WMS fájl verzió; talált {0}, várt {1}"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -14183,6 +14394,19 @@ msgstr[1] ""
 "{0} bővítménynek szüksége van {1} másik bővítményre, amik nem találhatók. Az "
 "igényelt bővítmények:"
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -15394,6 +15618,9 @@ msgstr "Frissítés"
 msgid "Update directory listing."
 msgstr "Könyvtár lista frissítés."
 
+msgid "View"
+msgstr "Nézet"
+
 msgid "Blue:"
 msgstr "Kék:"
 
@@ -15433,8 +15660,8 @@ msgstr "MapQuest Nyílt Légifelvétel"
 msgid "OpenStreetMap GPS Traces"
 msgstr "OpenStreetMap GPS Nyomvonalak"
 
-msgid "OpenStreetMap (Mapnik)"
-msgstr "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
+msgstr ""
 
 msgid "skobbler"
 msgstr "skobbler"
@@ -15445,9 +15672,6 @@ msgstr "OpenStreetMap Mapnik (fekete-fehér)"
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr "OpenStreetMap (Mapnik, felirat nélkül)"
 
-msgid "skobbler heatmap"
-msgstr "skobbler hőtérkép"
-
 msgid "OpenCycleMap"
 msgstr "OpenCycleMap"
 
@@ -15556,6 +15780,9 @@ msgstr "Vienna: Orthofoto (légifelvétel)"
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr "VoGIS: Echtfarbenbild 2012 (12cm)"
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr "VoGIS: Flächenwidmungsplan"
 
@@ -15569,12 +15796,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr "AGIV(laanderen) légifotó (Brusseli régió) (2013)"
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr "SPW(allonie) 2012 légi képek"
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr "SPW(allonie) 2009 légi felvételek"
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr "IBGE Mapa de Setores Urbanos"
 
@@ -15611,12 +15844,18 @@ msgstr "Czech RUIAN parcellák"
 msgid "Czech pLPIS"
 msgstr "Czech pLPIS"
 
-msgid "Fugro (Denmark)"
-msgstr "Fugro (Denmark)"
-
 msgid "Geodatastyrelsen (Denmark)"
 msgstr "Geodatastyrelsen (Denmark)"
 
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
+msgstr ""
+
 msgid "Stevns (Denmark)"
 msgstr "Stevns (Denmark)"
 
@@ -15641,6 +15880,9 @@ msgstr "Estonia Forestry (Maaamet)"
 msgid "BANO"
 msgstr "BANO"
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr "Bordeaux - 2012"
 
@@ -15665,8 +15907,8 @@ msgstr "Géobretagne - Morbihan 2010"
 msgid "Géolittoral - Orthophotos 2000"
 msgstr "Géolittoral - Ortofotók 2000"
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
-msgstr "Géolittoral V2 - Ortofotók 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
+msgstr ""
 
 msgid "Géolittoral - Sentiers"
 msgstr "Géolittoral - Gyalogutak"
@@ -15680,6 +15922,9 @@ msgstr "Loire-Atlantique - Ortofotók 2012 - 20 cm"
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr "Toulouse - Ortofotó tervek 2013"
 
@@ -15692,12 +15937,6 @@ msgstr "Toulouse - Ortofotó tervek 2007"
 msgid "Tours - Orthophotos 2013"
 msgstr "Tours - Ortofotók 2013"
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr "Tours - Ortofotók 2008-2010"
-
-msgid "Tours - Orthophotos 2008"
-msgstr "Tours - Ortofotók 2008"
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -15720,6 +15959,9 @@ msgstr "Hamburg (20 cm)"
 msgid "Hamburg (DK5)"
 msgstr "Hamburg (DK5)"
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr "Bavaria (2 m)"
 
@@ -15754,11 +15996,8 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr "Maps4BW (LGL-BW, www.lgl-bw.de)"
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektoros)"
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
-msgstr "NRW-Atlas: Automatisierte Liegenschaftskarte (Raszteres)"
+msgid "NRW-Atlas: ALKIS"
+msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
 msgstr "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -15787,73 +16026,25 @@ msgstr "Ireland British War Office One-Inch 1941-43 GSGS 4136"
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr "Ireland Bartholomew Quarter-Inch 1940"
 
-msgid "OSMIE Townlands"
-msgstr ""
-
-msgid "OSMIE EDs"
-msgstr ""
-
-msgid "OSMIE Civil Parishes"
-msgstr ""
-
-msgid "OSMIE Baronies"
-msgstr ""
-
-msgid "OSMIE Political"
-msgstr ""
-
-msgid "Ireland EEA GMES Urban Atlas"
-msgstr "Ireland EEA GMES Városi Atlasz"
-
-msgid "Ireland EEA CORINE 2006"
-msgstr "Ireland EEA CORINE 2006"
-
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
 msgstr ""
 
 msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Clare Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Dublin Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Fermanagh Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Galway Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Kildare Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Leitrim Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Longford Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Offaly Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Sligo Civil Parishes and Baronies"
+msgid "OSMIE Townlands"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "OSMIE EDs"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "OSMIE Civil Parishes"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "OSMIE Baronies"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "OSMIE Political"
 msgstr ""
 
 msgid "Lodi - Italy"
@@ -15889,6 +16080,9 @@ msgstr "50cm ortofotó - Latvia"
 msgid "20cm ortho - Latvia - Coastline"
 msgstr "20cm ortofotó - Latvia - Coastline"
 
+msgid "1.cikla ortofotokarte - Latvia"
+msgstr ""
+
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Lithuania)"
 
@@ -15904,6 +16098,9 @@ msgstr "Luxembourg Inspire Vasúti"
 msgid "Luxembourg Inspire Roads"
 msgstr "Luxembourg Inspire Utak"
 
+msgid "Luxembourg Inspire Water"
+msgstr ""
+
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Niger Delta Oct 2012 Landsat"
 
@@ -15919,9 +16116,15 @@ msgstr "Pangasinán/Bulacan (Phillipines HiRes)"
 msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr "Geoportal 2: Ortofotomapa (légifelvétel)"
 
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgstr ""
+
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr "Geoportal 2: PRNG (földrajzi nevek)"
 
+msgid "Geoportal 2: ISOK hillshade"
+msgstr ""
+
 msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr "Będzin: Ortofotomapa 2013 (légifelvétel)"
 
@@ -15931,15 +16134,27 @@ msgstr "Będzin: Budynki (épületek)"
 msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr "Bytom: Ortofotomapa 2012 (légifelvétel)"
 
+msgid "Bytom: Fotoplan 2014 (aerial image)"
+msgstr ""
+
 msgid "Bytom: Budynki (buildings)"
 msgstr "Bytom: Budynki (épületek)"
 
 msgid "Chorzów: Budynki (buildings)"
 msgstr "Chorzów: Budynki (épületek)"
 
+msgid "Częstochowa: Budynki (buildings)"
+msgstr ""
+
 msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr "Częstochowa: Ortofotomapa 2011 (légifelvétel)"
 
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgstr ""
+
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgstr ""
+
 msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr "Gliwice: Ortofotomapa 2013 (légifelvétel)"
 
@@ -15949,14 +16164,50 @@ msgstr "Gliwice: Budynki (épületek)"
 msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr "Katowice: Ortofotomapa (légifelvétel)"
 
+msgid "Katowice: Budynki (buildings)"
+msgstr ""
+
+msgid "Łódź: Budynki (buildings)"
+msgstr ""
+
 msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr "Łódź: Ortofotomapa (légifelvétel)"
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
-msgstr "Ruda Śląska: Ortofotomapa (légifelvétel)"
+msgid "Powiat dębicki: Budynki (buildings)"
+msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
-msgstr "Rzeszów: Ortofotomapa (légifelvétel)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat łańcucki: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat poznański: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgstr ""
+
+msgid "Powiat rzeszowski: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgstr ""
+
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgstr ""
+
+msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgstr "Ruda Śląska: Ortofotomapa (légifelvétel)"
+
+msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgstr "Rzeszów: Ortofotomapa (légifelvétel)"
 
 msgid "Rzeszów: Budynki (buildings)"
 msgstr "Rzeszów: Budynki (épületek)"
@@ -15964,9 +16215,18 @@ msgstr "Rzeszów: Budynki (épületek)"
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr "Siemianowice Śląskie: Ortofotomapa (légifelvétel)"
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr "Świętochłowice: Ortofotomapa 2009 (légifelvétel)"
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr "Zabrze: Ortofotomapa 2011 (légifelvétel)"
 
@@ -16096,6 +16356,21 @@ msgstr "Bonvillars Ortofotó 2013"
 msgid "Fiez Orthophoto 2013"
 msgstr "Fiez Ortofotó 2013"
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr "MSR Topográfiai Térképek"
 
@@ -16111,7 +16386,7 @@ msgstr "USGS Large Scale Imagery"
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -16457,6 +16732,11 @@ msgstr ""
 "Egy parancssort valósít meg és lehetővé teszi a saját parancsok létrehozását "
 "is. Nézd meg a hivatkozást a szabvány parancsokhoz (arc, circle stb.)"
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 "(Figyelem! Kísérleti!) Eszöz az adatok egyesítésére (összefésülésére)."
@@ -16558,21 +16838,13 @@ msgid ""
 "Database of imagery offsets: share and aquire imagery offsets with one "
 "button."
 msgstr ""
-"Az ábra eltolások adatbázisa: egy gombnyomásra gyűjti és megosztja az ábra "
-"eltolásokat."
+"Légifelvétel-eltolás adatbázis: eltolás értékeket lehet egyszerűen letölteni "
+"vele, vagy megosztani másokkal."
 
 msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr "WMSPlugin stílusú ábra beállító térképmód"
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-"Ez a kísérleti bővítmény lehetővé teszi a JOSM számára, hogy a csempe "
-"gyorsítótárat adatbázis fájlokba tegye, ne hatalmas gyorsítótár "
-"könyvtárakba/mappákba"
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -16649,8 +16921,8 @@ msgstr ""
 "Létrehozhatja, lezárhatja, érvénytelenítheti, újranyithatja ezeket és hozzá "
 "is szólhat a hibajelentésekhez ennek a bővítménynek a használatával."
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
-msgstr "Engedélyezi a mapillary.com-on tárolt képek használatát"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
+msgstr ""
 
 msgid ""
 "Provide a measurement dialog and a layer to measure length and angle of "
@@ -16668,9 +16940,6 @@ msgstr "Utak átfedő szakaszait fésüli össze."
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr "Balra kanyarodási korlátozást ad hozzá 4 vagy 5 út halmazához."
 
-msgid "Simplifies download from different read-only APIs."
-msgstr "A különféle csak olvasható API-kból való letöltéseket egyszerűsíti."
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 "Lehetővé teszi bármely kiválasztott terület összes objektumának címkézését, "
@@ -16771,6 +17040,14 @@ msgstr ""
 "Ez a bővítmény egyszerűsíti a tömegközlekedési útvonalak térképezését és "
 "szerkesztését."
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr "Kapcsolat és multipoligon készítő, szerkesztő panel."
 
@@ -16815,6 +17092,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr "OpenSeaMap tulajdonságok szerkesztése"
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -16916,9 +17196,6 @@ msgstr "Nagy halom, hosszában kapcsolódó vonal könnyített letöltése."
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr "Lehetővé teszi GPX fájlból betöltött útpontok keresését."
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr "Kijelöl egy szekvenciális, elágazás nélküli vonalsorozatot"
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr "Egyszerűsíti a Wikipedia cikkek behivatkozását az OSM objektumokba"
 
@@ -17328,6 +17605,14 @@ msgid "basketball"
 msgstr "kosárlabda"
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr "petang"
 
@@ -17352,10 +17637,6 @@ msgid "cricket"
 msgstr "krikett"
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr "krikett gyakorló"
-
-msgctxt "sport"
 msgid "croquet"
 msgstr "gyeplabda"
 
@@ -17372,6 +17653,10 @@ msgid "equestrian"
 msgstr "díjugratás"
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr "kelta játékok"
 
@@ -17388,14 +17673,26 @@ msgid "handball"
 msgstr "kézilabda"
 
 msgctxt "sport"
-msgid "hockey"
-msgstr "jégkorong"
-
-msgctxt "sport"
 msgid "horse_racing"
 msgstr "lóverseny"
 
 msgctxt "sport"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
+msgstr ""
+
+msgctxt "sport"
 msgid "motor"
 msgstr "motorozás"
 
@@ -17408,6 +17705,10 @@ msgid "racquet"
 msgstr "teniszütő"
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr "ligarögbi"
 
@@ -17420,6 +17721,10 @@ msgid "running"
 msgstr "futás"
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr "lövészet"
 
@@ -17447,6 +17752,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr "tenisz"
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr "Fizetős"
 
@@ -17838,6 +18155,9 @@ msgstr "Bekötőút lehajtó"
 msgid "Unclassified"
 msgstr "Egyéb közút"
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr "Félreálló hely"
 
@@ -17914,6 +18234,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr "Versenypálya"
+
 msgid "Road (Unknown Type)"
 msgstr "út (ismeretlen típusú)"
 
@@ -18464,6 +18787,12 @@ msgstr "Traffipax"
 msgid "Traffic Mirror"
 msgstr "Közlekedési tükör"
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr "Elnevezett útelágazás"
@@ -18655,9 +18984,14 @@ msgstr "Oszlopsor"
 msgid "Avalanche Protector"
 msgstr "Lavina védelem"
 
+msgctxt "main group"
 msgid "Water"
 msgstr "Víz"
 
+msgctxt "sub group"
+msgid "Water"
+msgstr "Vizek"
+
 msgid "Drain"
 msgstr "Dréncső"
 
@@ -18679,9 +19013,7 @@ msgstr "Forrás"
 msgid ""
 "A point where groundwater naturally flows to the surface of the earth from "
 "underground."
-msgstr ""
-"A pont ahol a talajvíz magától előbukkan a föld alól, hogy a föld felszínén "
-"folyjon tovább."
+msgstr "A pont, ahol a talajvíz természetes úton a felszínre tör."
 
 msgid "Waterfall"
 msgstr "Vízesés"
@@ -18710,6 +19042,10 @@ msgstr "Víztározó"
 msgid "Covered Reservoir"
 msgstr "Fedett víztározó"
 
+msgctxt "natural"
+msgid "Water"
+msgstr "Víz"
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr "Álló víztömeg, mint egy tó vagy tavacska."
 
@@ -18857,6 +19193,120 @@ msgstr ""
 msgid "public"
 msgstr "nyilvános"
 
+msgid "Marine Fuel"
+msgstr ""
+
+msgid "Agip"
+msgstr "Agip"
+
+msgid "Aral"
+msgstr "Aral"
+
+msgid "Avia"
+msgstr "Avia"
+
+msgid "BP"
+msgstr "BP"
+
+msgid "Chevron"
+msgstr "Chevron"
+
+msgid "Citgo"
+msgstr "Citgo"
+
+msgid "Eni"
+msgstr "Eni"
+
+msgid "Esso"
+msgstr "Esso"
+
+msgid "Exxon"
+msgstr "Exxon"
+
+msgid "Gulf"
+msgstr "Gulf"
+
+msgid "Mobil"
+msgstr "Mobil"
+
+msgid "OMV"
+msgstr "OMV"
+
+msgid "Petro-Canada"
+msgstr "Petro-Canada"
+
+msgid "Pioneer"
+msgstr "Pioneer"
+
+msgid "Q8"
+msgstr "Q8"
+
+msgid "Repsol"
+msgstr "Repsol"
+
+msgid "Shell"
+msgstr "Shell"
+
+msgid "Socar"
+msgstr "Socar"
+
+msgid "Statoil"
+msgstr "Statoil"
+
+msgid "Sunoco"
+msgstr "Sunoco"
+
+msgid "Tamoil"
+msgstr "Tamoil"
+
+msgid "Texaco"
+msgstr "Texaco"
+
+msgid "Total"
+msgstr "Total"
+
+msgid "Independent"
+msgstr "független"
+
+msgid "Fuel types:"
+msgstr "Üzemanyagtípusok:"
+
+msgid "Diesel"
+msgstr "Dízel"
+
+msgid "Bio Diesel"
+msgstr "Biodízel"
+
+msgid "Octane 80"
+msgstr "80 oktános benzin"
+
+msgid "Octane 91"
+msgstr "91 oktános benzin"
+
+msgid "Octane 92"
+msgstr "92 oktános benzin"
+
+msgid "Octane 95"
+msgstr "95 oktános benzin"
+
+msgid "Octane 98"
+msgstr "98 oktános benzin"
+
+msgid "Octane 100"
+msgstr "100 oktános benzin"
+
+msgid "E10 (10% Ethanol mix)"
+msgstr "E10 (10%-os etanolkeverék)"
+
+msgid "E85 (85% Ethanol mix)"
+msgstr "E85 (85%-os etanolkeverék)"
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr "LPG (autógáz)"
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr "CNG (sűrített földgáz)"
+
 msgid "Pier"
 msgstr "Móló"
 
@@ -18973,6 +19423,9 @@ msgstr "Ütközőbak"
 msgid "Railway Switch"
 msgstr "Vasúti váltó"
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr "Felvonó"
 
@@ -19096,137 +19549,26 @@ msgstr "Parkoló bejárat"
 msgid "Fuel"
 msgstr "Benzinkút"
 
-msgid "Agip"
-msgstr "Agip"
-
-msgid "Aral"
-msgstr "Aral"
+msgid "With shop"
+msgstr "Üzlettel"
 
-msgid "Avia"
-msgstr "Avia"
+msgid "convenience"
+msgstr "élelmiszer bolt"
 
-msgid "BP"
-msgstr "BP"
+msgid "kiosk"
+msgstr "kioszk"
 
-msgid "Chevron"
-msgstr "Chevron"
+msgid "Diesel (Gas To Liquid - ultimate diesel)"
+msgstr "Dízel (szintetikus GTL)"
 
-msgid "Citgo"
-msgstr "Citgo"
+msgid "Diesel for Heavy Good Vehicles"
+msgstr "Dízel tehergépjárművek számára"
 
-msgid "Eni"
-msgstr "Eni"
+msgid "1/25 mix (mofa/moped)"
+msgstr "1:25 keverék (moped)"
 
-msgid "Esso"
-msgstr "Esso"
-
-msgid "Exxon"
-msgstr "Exxon"
-
-msgid "Gulf"
-msgstr "Gulf"
-
-msgid "Mobil"
-msgstr "Mobil"
-
-msgid "OMV"
-msgstr "OMV"
-
-msgid "Petro-Canada"
-msgstr "Petro-Canada"
-
-msgid "Pioneer"
-msgstr "Pioneer"
-
-msgid "Q8"
-msgstr "Q8"
-
-msgid "Repsol"
-msgstr "Repsol"
-
-msgid "Shell"
-msgstr "Shell"
-
-msgid "Socar"
-msgstr "Socar"
-
-msgid "Statoil"
-msgstr "Statoil"
-
-msgid "Sunoco"
-msgstr "Sunoco"
-
-msgid "Tamoil"
-msgstr "Tamoil"
-
-msgid "Texaco"
-msgstr "Texaco"
-
-msgid "Total"
-msgstr "Total"
-
-msgid "Independent"
-msgstr "független"
-
-msgid "With shop"
-msgstr "Üzlettel"
-
-msgid "convenience"
-msgstr "élelmiszer bolt"
-
-msgid "kiosk"
-msgstr "kioszk"
-
-msgid "Fuel types:"
-msgstr "Üzemanyagtípusok:"
-
-msgid "Diesel"
-msgstr "Dízel"
-
-msgid "Bio Diesel"
-msgstr "Biodízel"
-
-msgid "Diesel (Gas To Liquid - ultimate diesel)"
-msgstr "Dízel (szintetikus GTL)"
-
-msgid "Diesel for Heavy Good Vehicles"
-msgstr "Dízel tehergépjárművek számára"
-
-msgid "Octane 80"
-msgstr "80 oktános benzin"
-
-msgid "Octane 91"
-msgstr "91 oktános benzin"
-
-msgid "Octane 92"
-msgstr "92 oktános benzin"
-
-msgid "Octane 95"
-msgstr "95 oktános benzin"
-
-msgid "Octane 98"
-msgstr "98 oktános benzin"
-
-msgid "Octane 100"
-msgstr "100 oktános benzin"
-
-msgid "E10 (10% Ethanol mix)"
-msgstr "E10 (10%-os etanolkeverék)"
-
-msgid "E85 (85% Ethanol mix)"
-msgstr "E85 (85%-os etanolkeverék)"
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr "LPG (autógáz)"
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr "CNG (sűrített földgáz)"
-
-msgid "1/25 mix (mofa/moped)"
-msgstr "1:25 keverék (moped)"
-
-msgid "1/50 mix (mofa/moped)"
-msgstr "1:50 keverék (moped)"
+msgid "1/50 mix (mofa/moped)"
+msgstr "1:50 keverék (moped)"
 
 msgid "Fuel cards:"
 msgstr "Üzemanyag kártyák:"
@@ -19440,9 +19782,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr "#CD853F"
 
-msgid "route segment"
-msgstr "útszakasz"
-
 msgid "stop position"
 msgstr "állóhely"
 
@@ -19461,6 +19800,9 @@ msgstr "peron (csak kijárat)"
 msgid "platform (entry only)"
 msgstr "peron (csak bejárat)"
 
+msgid "route segment"
+msgstr "útszakasz"
+
 msgid "Route Master"
 msgstr "Mester útvonal"
 
@@ -19663,6 +20005,12 @@ msgstr "Hotel"
 msgid "Stars"
 msgstr "Csillagok"
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr "Motel"
 
@@ -19754,6 +20102,9 @@ msgstr "szendvics"
 msgid "sushi"
 msgstr "szusi"
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr "Házi sörfőzde"
 
@@ -19971,6 +20322,9 @@ msgstr "Szauna"
 msgid "Horse Riding"
 msgstr "Lovaglás"
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr "Bordélyház"
 
@@ -20460,8 +20814,8 @@ msgstr "Kijelzi a légnyomást"
 msgid "Shows humidity"
 msgstr "Kijelzi a páratartalmat"
 
-msgid "Recycling"
-msgstr "Szelektív hulladékgyűjtő"
+msgid "Recycling Container"
+msgstr ""
 
 msgid "Batteries"
 msgstr "Akkumulátorok"
@@ -20469,20 +20823,47 @@ msgstr "Akkumulátorok"
 msgid "Cans"
 msgstr "Konzerv"
 
+msgid "Cardboard"
+msgstr ""
+
+msgid "Electrical Appliances"
+msgstr ""
+
 msgid "Glass"
 msgstr "Üveg"
 
+msgid "Glass Bottles"
+msgstr ""
+
+msgid "Green Waste"
+msgstr ""
+
 msgid "Paper"
 msgstr "Papír"
 
+msgid "Plastic"
+msgstr ""
+
+msgid "Plastic Bottles"
+msgstr ""
+
+msgid "Plastic Packaging"
+msgstr ""
+
 msgid "Scrap Metal"
 msgstr "Fémhulladék"
 
-msgid "container"
-msgstr "konténer"
+msgid "Shoes"
+msgstr "Cipőbolt"
+
+msgid "Small Appliances"
+msgstr ""
+
+msgid "Waste"
+msgstr ""
 
-msgid "centre"
-msgstr "hulladékudvar"
+msgid "Recycling Centre"
+msgstr ""
 
 msgid "Waste Basket/Trash Can"
 msgstr "Szemétkosár/Szemetes"
@@ -20685,6 +21066,9 @@ msgstr "Íjászat"
 msgid "Track and Field Athletics"
 msgstr "Klasszikus atlétika"
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr "Falmászás"
 
@@ -20861,12 +21245,18 @@ msgstr "Baseball"
 msgid "Basketball"
 msgstr "Kosárlabda"
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr "Röplabda"
 
 msgid "Beach Volleyball"
 msgstr "Strand röplabda"
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr "Golf"
 
@@ -20882,14 +21272,14 @@ msgstr "Gyepteke"
 msgid "Cricket"
 msgstr "Krikett"
 
-msgid "Cricket Nets"
-msgstr "Krikett gyakorló"
-
 msgid "Croquet"
 msgstr "Croquet"
 
-msgid "Hockey"
-msgstr "Jégkorong"
+msgid "Field Hockey"
+msgstr ""
+
+msgid "Ice Hockey"
+msgstr ""
 
 msgid "Pelota"
 msgstr "Pelota"
@@ -20912,9 +21302,6 @@ msgstr "Gokart versenyzés"
 msgid "Motocross"
 msgstr "Motokrossz"
 
-msgid "Safety Training"
-msgstr "Biztonsági edzés"
-
 msgid "Model Aerodrome"
 msgstr "Modelrepülőtér"
 
@@ -20933,9 +21320,6 @@ msgstr "pálya"
 msgid "RC Car"
 msgstr "Távirányítós autó"
 
-msgid "Raceway"
-msgstr "Versenypálya"
-
 msgid "Man Made"
 msgstr "Építmények"
 
@@ -21008,6 +21392,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr "tehénistálló"
 
@@ -22333,9 +22725,6 @@ msgstr "Bor"
 msgid "Boutique"
 msgstr "Butik"
 
-msgid "Shoes"
-msgstr "Cipőbolt"
-
 msgid "Outdoor"
 msgstr "Túrabolt"
 
@@ -23001,7 +23390,7 @@ msgstr ""
 "növényzettel vagy egyáltalán nem is."
 
 msgid "Rock"
-msgstr "Kő"
+msgstr "Szikla"
 
 msgid ""
 "A notable rock or group of rocks, with at least one of them firmly attached "
@@ -23361,12 +23750,12 @@ msgstr "lehetséges"
 msgid "Contact (Common Schema)"
 msgstr "Kapcsolat (Általános séma)"
 
-msgid "Fax Number"
-msgstr "Faxszám"
-
 msgid "Email Address"
 msgstr "Emailcím"
 
+msgid "Fax Number"
+msgstr "Faxszám"
+
 msgid "Image"
 msgstr "Kép"
 
@@ -23791,6 +24180,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr "{0} gyanús objektumon"
 
@@ -23815,6 +24207,18 @@ msgstr "alternatív név, {0} nélkül"
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr "a(z) {0} bejezetlen használata egy vonalon {1} nélkül"
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr "{0}={1} elavult"
 
@@ -23888,6 +24292,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr "{0} egy ponton. Vonalon kellene használni."
 
@@ -23983,9 +24390,18 @@ msgstr ""
 "{0}: a méter az alapértelmezett; a pont az elválasztó; ha egységek vannak, "
 "szóköz kell a mértékegység után"
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr "furcsa {0} formátum"
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 "a feszültségnek voltban kellene lennie, mértékenység, határoló vagy szóköz "
@@ -24372,6 +24788,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -24430,9 +24849,6 @@ msgstr "Vonal rajzolása egérrel"
 msgid "min distance={0} px ({1} m)"
 msgstr "minimum távolság={0} px ({1} m)"
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr "Eps={0}, {1} pont, {2} p/km"
 
@@ -25189,48 +25605,57 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
-msgstr "Algoritmus beállítások"
+msgid "Settings for the area detection algorithm."
+msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
-msgstr "pontok egyesítése"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
+msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
 msgstr ""
@@ -25238,10 +25663,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr "pontok egyesítése"
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -25849,6 +26286,9 @@ msgstr "Eltolás nullázás"
 msgid "Reset offset (only vector images)"
 msgstr "Eltolás nullázás (csak vektor képek)"
 
+msgid "Blank Layer"
+msgstr "Üres réteg"
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr "WMS réteg ({0}), {1} csempe/csempék betöltve"
 
@@ -26696,10 +27136,10 @@ msgid "Change Color"
 msgstr ""
 
 msgid "Deprecate Offset"
-msgstr ""
+msgstr "Eltolás érvénytelenítése"
 
 msgid "Are you sure this imagery offset is wrong?"
-msgstr ""
+msgstr "Biztos vagy benne, hogy ez a légifelvétel-eltolás nem helyes?"
 
 msgid "Are you sure this calibration geometry is aligned badly?"
 msgstr ""
@@ -26709,10 +27149,14 @@ msgstr ""
 
 msgid "To store imagery offsets you must be a registered OSM user."
 msgstr ""
+"Légifelvétel-eltolás eltárolásához regisztrált OSM felhasználónak kell "
+"lenned."
 
 msgid ""
 "Please enter the reason why you mark this imagery offset as deprecated"
 msgstr ""
+"Kérlek jelöld meg az okot, amiért érvényteleníteni szeretnéd ezt a "
+"légifelvétel-eltolást"
 
 msgid ""
 "Please enter the reason why you mark this calibration geometry as deprecated"
@@ -26722,17 +27166,19 @@ msgid "Notifying the server of the deprecation..."
 msgstr ""
 
 msgid "Get Imagery Offset..."
-msgstr ""
+msgstr "Légifelvétel-eltolás letöltése..."
 
 msgid "Download offsets for current imagery from a server"
-msgstr ""
+msgstr "Eltolás értékek letöltése a szerverről az aktuális légifelvételhez"
 
 msgid ""
 "No data for this region. Please adjust imagery layer and upload an offset."
 msgstr ""
+"Nincs adat ehhez a régióhoz. Kérlek állítsd be a légifelvétel réteget, majd "
+"töltsd fel az eltolást."
 
 msgid "Loading imagery offsets..."
-msgstr "Kép"
+msgstr "Légifelvétel-eltolás betöltése..."
 
 msgid "Error processing XML response: {0}"
 msgstr ""
@@ -26741,7 +27187,7 @@ msgid "Offset"
 msgstr "Eltolás"
 
 msgid "Imagery Offset Database"
-msgstr "Ábra-eltolások Adatbázisa"
+msgstr "Légifelvétel-eltolás adatbázis"
 
 msgid "mm"
 msgstr "mm"
@@ -26756,16 +27202,20 @@ msgid "km"
 msgstr "km"
 
 msgid "Calibration geometries"
-msgstr ""
+msgstr "Kalibrációs geometriák"
 
 msgid "Deprecated offsets"
-msgstr ""
+msgstr "Érvénytelenített eltolások"
 
 msgid ""
 "The topmost imagery layer has been shifted to presumably match\n"
 "OSM data in the area. Please check that the offset is still valid\n"
 "by downloading GPS tracks and comparing them and OSM data to the imagery."
 msgstr ""
+"Az aktuális légifelvétel réteg el lett mozgatva, hogy hozzávetőleg "
+"illeszkedjen\n"
+"az OSM adatokhoz a területen. Kérlek ellenőrizd letöltött GPS nyomvonalak\n"
+"és az OSM adatok összehasonlításával, hogy még mindig pontos-e."
 
 msgid ""
 "A layer has been added with a calibration geometry. Hide data layers,\n"
@@ -26776,22 +27226,22 @@ msgid "Deprecated by {0} on {1}"
 msgstr ""
 
 msgid "Created by {0} on {1}"
-msgstr ""
+msgstr "Készítette {0} ekkor: {1}"
 
 msgid "Offset Information"
-msgstr ""
+msgstr "Eltolás információ"
 
 msgid "Report this offset"
-msgstr ""
+msgstr "Eltolás jelentése"
 
 msgid "You are to notify moderators of this offset. Why?"
-msgstr ""
+msgstr "A moderátorokat készült tájékoztatni erről az eltolásról. Miért?"
 
 msgid "Reporting the offset..."
-msgstr ""
+msgstr "Eltolás jelentése..."
 
 msgid "An imagery offset of {0}"
-msgstr ""
+msgstr "A légifelvétel-eltolás mértéke {0}"
 
 msgid "Imagery ID"
 msgstr ""
@@ -26818,18 +27268,20 @@ msgid "Unable to connect to the server"
 msgstr ""
 
 msgid "Store Imagery Offset..."
-msgstr ""
+msgstr "Légifelvétel-eltolás feltöltése..."
 
 msgid ""
 "Upload an offset for current imagery (or calibration object geometry) to a "
 "server"
 msgstr ""
+"Aktuális légifelvétel-eltolás (vagy kalibrációs geometria) feltöltése a "
+"szerverre"
 
 msgid "Store calibration geometry"
 msgstr ""
 
 msgid "Store imagery offset"
-msgstr ""
+msgstr "Légifelvétel-eltolás feltöltése"
 
 msgid ""
 "The selected object can be used as a calibration geometry. What do you "
@@ -26840,6 +27292,7 @@ msgid ""
 "The topmost imagery layer has no offset. Are you sure you want to upload "
 "this?"
 msgstr ""
+"Az aktuális légifelvétel-rétegnek nincs eltolás beállítva. Valóban feltöltöd?"
 
 msgid ""
 "You are registering an imagery offset. Other users in this area will be able "
@@ -26847,6 +27300,10 @@ msgid ""
 "Please make sure it is as precise as possible, and describe a region this "
 "offset is applicable to."
 msgstr ""
+"Légifelvétel-eltolás közzétételére készülsz. Az ezen a területen dolgozó "
+"felhasználók használhatják ezt.\n"
+"Kérelek győződj meg róla, hogy pontos, amennyire csak lehet, majd add meg a "
+"régiót, amelyikre érvényes."
 
 msgid ""
 "You are registering a calibration geometry. It should be the most precisely "
@@ -26856,7 +27313,7 @@ msgid ""
 msgstr ""
 
 msgid "Uploading a new offset..."
-msgstr ""
+msgstr "Új eltolás feltöltése..."
 
 msgid "This string should be 3 to 200 letters long."
 msgstr ""
@@ -27002,323 +27459,629 @@ msgstr ""
 msgid "creating DigraphLayer"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr "Ellenőrzés "
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr "Keresés "
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr "kelet"
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr "észak"
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr "nyugat"
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr "dél"
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr "partvonal"
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr "WMS Réteg"
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr "A bővítmény a vízfelületek felrajzolásához Landsat műholdképről"
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
+msgstr ""
+
+msgid "Connecting"
+msgstr "Kapcsolódás"
+
+msgid "Connected"
+msgstr ""
+
+msgid "no name"
+msgstr "nincs név"
+
+msgid "Live GPS"
+msgstr ""
+
+msgid "Show GPS data."
+msgstr ""
+
+msgid "Status"
+msgstr ""
+
+msgid "Way Info"
+msgstr ""
+
+msgid "Speed"
+msgstr ""
+
+msgid "Course"
+msgstr ""
+
+msgid "LiveGPS layer"
+msgstr ""
+
+msgid "Capture GPS Track"
+msgstr ""
+
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgstr ""
+
+msgid "Center Once"
+msgstr ""
+
+msgid "Center the LiveGPS layer to current position."
+msgstr ""
+
+msgid "Auto-Center"
+msgstr ""
+
+msgid "Continuously center the LiveGPS layer to current position."
+msgstr ""
+
+msgid "Open MapDust"
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "junctions"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Missing input data"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Total images:"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "images"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "Mapillary"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "Check "
-msgstr "Ellenőrzés "
-
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
-msgstr "Keresés "
+msgid "Export pictures"
+msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
-msgstr "kelet"
+msgid "Copy key"
+msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
-msgstr "észak"
+msgid "Edit on website"
+msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
-msgstr "nyugat"
+msgid "Export selected sequence"
+msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
-msgstr "dél"
+msgid "Rewrite imported images"
+msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
-msgstr "partvonal"
+msgid "Explore"
+msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
-msgstr "WMS Réteg"
+msgid "Years"
+msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
-msgstr "A bővítmény a vízfelületek felrajzolásához Landsat műholdképről"
+msgid "Downloaded images"
+msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
-msgstr "Kapcsolódás"
+msgid "Pause"
+msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
-msgstr "nincs név"
+msgid "Reverse buttons position when displaying images."
+msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
-msgstr "Kiöntés"
+msgid "Uploading: {0}"
+msgstr ""
 
 msgid "Measured values"
 msgstr ""
@@ -27338,6 +28101,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -27400,47 +28166,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr "Letöltés OSM tükörről..."
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr "Objektum típus: "
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr "Letöltés Overpass API-ról ..."
-
-msgid "Download map data from Overpass API server."
-msgstr "Térképadatok letöltése az Overpass API szerverről."
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -27681,6 +28406,9 @@ msgstr "Különbség"
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr "Eszközök"
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -28906,6 +29634,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -29077,6 +29826,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -29086,6 +29838,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -29266,6 +30021,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -29451,6 +30209,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr "OSM kiöntés"
 
@@ -29460,6 +30251,9 @@ msgstr "Forgalmi adatok kiöntése SUMO hálózati fájlba."
 msgid "SUMO Export"
 msgstr "SUMO kiöntés"
 
+msgid "Export"
+msgstr "Kiöntés"
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -29698,9 +30492,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr "Felbontás:"
 
@@ -30722,15 +31513,17 @@ msgid "Internal error: number of nodes is {0}."
 msgstr ""
 
 msgid "Extract node"
-msgstr ""
+msgstr "Pont kiterjesztése"
 
 msgid "Extracts node from a way"
-msgstr ""
+msgstr "Leválasztja a pontot, majd pótolja egy újjal"
 
 msgid ""
 "This tool extracts node from its ways and requires single node to be "
 "selected."
 msgstr ""
+"Ez az eszköz pontot választ le a jelenlegi helyéről, ezért csak egy pontot "
+"kell kiválasztani."
 
 msgid "Extract node from line"
 msgstr ""
@@ -30740,7 +31533,7 @@ msgstr "Kapcsolatok beillesztése"
 
 msgid ""
 "Paste relation membership from objects in the buffer onto selected object(s)"
-msgstr ""
+msgstr "Hozzáadja a vágólapon lévő objektum kapcsolatához, mint tagot"
 
 msgid "Split Object"
 msgstr "Objektum kettévágása"
@@ -30768,10 +31561,10 @@ msgid "The selected nodes can not be consecutive nodes in the object."
 msgstr ""
 
 msgid "Split adjacent ways"
-msgstr ""
+msgstr "Kapcsolódó vonalak kettévágása"
 
 msgid "Split adjacent ways on T-intersections"
-msgstr ""
+msgstr "A kapcsolódó vonalak kettévágása a T elágazásnál"
 
 msgid ""
 "There are several ways containing one of the splitting nodes. Select ways "
@@ -30793,10 +31586,10 @@ msgid "Pastes tags of previously selected object(s)"
 msgstr "Beilleszti az előzőleg kijelölt elem(ek) címkéit."
 
 msgid "Add Source Tag"
-msgstr ""
+msgstr "Forrás megjelölése"
 
 msgid "Add remembered source tag"
-msgstr ""
+msgstr "Hozzáadja a legutoljára használt forrás (source=*) címkét"
 
 msgid "UnGlue Relation"
 msgstr "Kapcsolat szétválasztása"
@@ -30817,10 +31610,10 @@ msgid "Change relation member for {0} {1}"
 msgstr ""
 
 msgid "Circle arc"
-msgstr ""
+msgstr "Körív"
 
 msgid "Create a circle arc"
-msgstr ""
+msgstr "Körívet készít a meglévő vonalból"
 
 msgid "Select custom URL"
 msgstr ""
@@ -30866,10 +31659,11 @@ msgid "Custom URL configuration"
 msgstr ""
 
 msgid "Lat Lon tool"
-msgstr ""
+msgstr "Koordináta eszköz"
 
 msgid "Create geometry by entering lat lon coordinates for it."
 msgstr ""
+"A hosszúsági és szélességi fokok megadásával hozhatunk létre objektumot."
 
 msgid ""
 "Enter the coordinates for the new nodes, one for each line.<br/>If you enter "
@@ -30894,6 +31688,27 @@ msgid ""
 "24.5</li><li>-49 29.4 N -19 24.5 W</li></ul><li>48 deg 42' 52.13\" N, 21 "
 "deg 11' 47.60\" E</li></ul>"
 msgstr ""
+"Add meg az új pontok koordinátáit, egy sorba egyét.<br/>Ha két sorba azonos "
+"koordinátákat adsz meg, kettőzött pont generálódik.<br/>A szélességi és "
+"hosszúsági fokot szóközzel, vesszővel, vagy pontosvesszővel lehet "
+"elválasztani egymástól.<br/>Pozitív számokkal, vagy N és E betűvel lehet "
+"jelölni az északi és keleti féltekét.<br/>A déli és nyugati féltekékhez "
+"negatív szám, vagy az S és W betűk használhatók.<br/>Koordinátát az alábbi 3 "
+"formátum valamelyikében adhatunk "
+"meg:<ul><li><i>fok.tizedes</i><tt>°</tt></li><li><i>fok</i><tt>°</tt>"
+" <i>perc</i><tt>'</tt></li><li><i>fok</i><tt>°</tt> "
+"<i>perc</i><tt>'</tt> <i>másodperc</i><tt>&quot</tt></li></ul>A "
+"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> jelek beírása nem kötelező.<br/><br/>Néhány "
+"példa:<ul><li>49.29918° 19.24788°</li><li>N 49.29918 E "
+"19.24788</li><li>W 49°29.918' S 19°24.788'</li><li>N "
+"49°29'04" E 19°24'43"</li><li>49.29918 N, 19.24788 "
+"E</li><li>49°29'21" N 19°24'38" E</li><li>49 29 "
+"51, 19 24 18</li><li>49 29, 19 24</li><li>E 49 29, N 19 24</li><li>49° "
+"29; 19° 24</li><li>N 49° 29, W 19° 24</li><li>49° 29.5 S, "
+"19° 24.6 E</li><li>N 49 29.918 E 19 15.88</li><li>49 29.4 19 "
+"24.5</li><li>-49 29.4 N -19 24.5 W</li></ul><li>48 deg 42' 52.13\" N, 21 "
+"deg 11' 47.60\" E</li></ul>"
 
 msgid "Tag multiple objects [alpha]"
 msgstr "Több objektum címkézése (alfa)"
@@ -31313,9 +32128,6 @@ msgstr "Útpontok keresése"
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr "Út kiválasztás"
-
 msgid "Add names from Wikipedia"
 msgstr "Nevek hozzáadása a Wikipedia-ról"
 
diff --git a/i18n/po/hy.po b/i18n/po/hy.po
index 85348a3..9719107 100644
--- a/i18n/po/hy.po
+++ b/i18n/po/hy.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2011-04-13 21:51+0000\n"
 "Last-Translator: Gev777 <Unknown>\n"
 "Language-Team: Armenian <hy at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:32+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:33+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: hy\n"
 
 msgid "Cancel"
@@ -100,19 +100,16 @@ msgstr ""
 msgid "Updating user interface"
 msgstr ""
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
 msgstr ""
 
 msgid "Warning"
 msgstr ""
 
-msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
+msgid "Ignoring malformed file URL: \"{0}\""
 msgstr ""
 
-msgid "Ignoring malformed URL: \"{0}\""
+msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 
 msgid ""
@@ -444,6 +441,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
 
@@ -1029,6 +1029,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr ""
 
@@ -1945,15 +1969,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr ""
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -1975,6 +1990,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2093,9 +2117,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2309,9 +2330,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr ""
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2525,6 +2552,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2567,6 +2598,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3017,6 +3051,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3134,10 +3186,44 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3327,6 +3413,12 @@ msgstr ""
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3354,13 +3446,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -3976,9 +4068,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -3988,12 +4077,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4174,13 +4275,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4378,6 +4479,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4591,43 +4693,54 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
 msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
 msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
 msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
 msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
-msgid "Menu: {0}"
+msgctxt "menu"
+msgid "Help"
 msgstr ""
 
-msgid "Save and load the current session (list of layers, etc.)"
+msgid "Menu: {0}"
 msgstr ""
 
 msgid "Edit toolbar"
@@ -4651,6 +4764,7 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
 msgstr ""
 
@@ -4773,58 +4887,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr ""
-
-msgid "Pos."
+msgid " ({0})"
 msgstr ""
 
-msgid "Role"
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5253,6 +5325,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr ""
+
 msgid "Primitive"
 msgstr ""
 
@@ -5493,6 +5568,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5639,6 +5717,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5742,7 +5855,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5870,6 +5983,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5879,17 +5997,48 @@ msgstr ""
 msgid "unknown"
 msgstr ""
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -5935,6 +6084,12 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr ""
 
@@ -6064,10 +6219,16 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
-msgid "List of notes"
+msgid "Mini map"
 msgstr ""
 
-msgid "Add comment"
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
+msgid "List of notes"
+msgstr ""
+
+msgid "Add comment"
 msgstr ""
 
 msgid "Comment"
@@ -6122,10 +6283,15 @@ msgstr ""
 msgid "Enter the ID of the object that should be downloaded"
 msgstr ""
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6154,6 +6320,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr ""
 
+msgid "Selection"
+msgstr ""
+
 msgid "Open a selection list window."
 msgstr ""
 
@@ -6244,6 +6413,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -6838,6 +7013,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6929,14 +7110,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7109,6 +7289,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7644,6 +7830,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8489,6 +8678,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr ""
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr ""
 
@@ -8542,6 +8831,9 @@ msgstr ""
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8562,7 +8854,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8645,80 +8937,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr ""
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-
-msgid "Auto Zoom"
-msgstr ""
-
-msgid "Auto load tiles"
-msgstr ""
-
-msgid "Show Errors"
-msgstr ""
-
-msgid "Load Tile"
-msgstr ""
-
-msgid "Show Tile Info"
-msgstr ""
-
-msgid "Load All Tiles"
-msgstr ""
-
-msgid "Load All Error Tiles"
-msgstr ""
-
-msgid "Increase zoom"
-msgstr ""
-
-msgid "Decrease zoom"
-msgstr ""
-
-msgid "Snap to tile size"
-msgstr ""
-
-msgid "Flush Tile Cache"
-msgstr ""
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
@@ -8728,56 +8946,30 @@ msgstr ""
 msgid "No validation errors"
 msgstr ""
 
-msgid "Blank Layer"
-msgstr ""
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "Download visible tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-
-msgid "Change resolution"
-msgstr ""
-
-msgid "Reload erroneous tiles"
-msgstr ""
-
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Automatic downloading"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Zoom to native resolution"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Supported projections are: {0}"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Save WMS file"
+msgid "Try Again"
 msgstr ""
 
-msgid "Correlate to GPX"
+msgid "No images could be matched!"
 msgstr ""
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
@@ -8864,24 +9056,9 @@ msgstr ""
 msgid "Offset:"
 msgstr ""
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
 msgid "Correlate"
 msgstr ""
 
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9075,9 +9252,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr ""
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9140,9 +9314,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9768,15 +9939,15 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr ""
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -10569,13 +10740,28 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
-msgid "imagery fade"
+msgid "1. Enter getCapabilities URL"
 msgstr ""
 
-msgid "Fade Color: "
+msgid "2. Enter name for this layer"
 msgstr ""
 
-msgid "Fade amount: "
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
+msgid "imagery fade"
+msgstr ""
+
+msgid "Fade Color: "
+msgstr ""
+
+msgid "Fade amount: "
 msgstr ""
 
 msgid "Soft"
@@ -10587,6 +10773,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10608,6 +10806,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10650,9 +10851,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr ""
 
@@ -10677,36 +10875,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11642,6 +11825,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] ""
@@ -11750,6 +11941,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12003,6 +12197,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12539,6 +12736,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12924,6 +13124,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13918,6 +14131,9 @@ msgstr ""
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr ""
+
 msgid "Blue:"
 msgstr ""
 
@@ -13957,7 +14173,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -13969,9 +14185,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14080,6 +14293,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14093,12 +14309,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14135,10 +14357,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14165,6 +14393,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14189,7 +14420,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14204,6 +14435,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14216,12 +14450,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14242,6 +14470,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14274,10 +14505,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14307,6 +14535,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14322,154 +14556,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14484,9 +14724,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14616,6 +14865,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14631,7 +14895,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -14957,6 +15221,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15041,11 +15310,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15099,7 +15363,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15114,9 +15378,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15197,6 +15458,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15235,6 +15504,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15310,9 +15582,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15718,6 +15987,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15742,10 +16019,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15762,6 +16035,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15778,11 +16055,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15798,6 +16087,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15810,6 +16103,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15837,6 +16134,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16228,6 +16537,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16304,6 +16616,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr ""
 
@@ -16841,6 +17156,12 @@ msgstr ""
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17030,6 +17351,11 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
 msgstr ""
 
@@ -17083,6 +17409,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17224,13 +17554,127 @@ msgstr ""
 msgid "public"
 msgstr ""
 
-msgid "Pier"
+msgid "Marine Fuel"
 msgstr ""
 
-msgid "Lock Gate"
+msgid "Agip"
 msgstr ""
 
-msgid "Turning Point"
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
+msgid "Pier"
+msgstr ""
+
+msgid "Lock Gate"
+msgstr ""
+
+msgid "Turning Point"
 msgstr ""
 
 msgid "Slipway"
@@ -17340,6 +17784,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -17463,78 +17910,6 @@ msgstr ""
 msgid "Fuel"
 msgstr ""
 
-msgid "Agip"
-msgstr ""
-
-msgid "Aral"
-msgstr ""
-
-msgid "Avia"
-msgstr ""
-
-msgid "BP"
-msgstr ""
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr ""
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
 msgid "With shop"
 msgstr ""
 
@@ -17544,51 +17919,12 @@ msgstr ""
 msgid "kiosk"
 msgstr ""
 
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -17807,9 +18143,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17828,6 +18161,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18030,6 +18366,12 @@ msgstr ""
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18120,6 +18462,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18334,6 +18679,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18821,7 +19169,7 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
@@ -18830,43 +19178,70 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
-msgid "Glass"
+msgid "Cardboard"
 msgstr ""
 
-msgid "Paper"
+msgid "Electrical Appliances"
 msgstr ""
 
-msgid "Scrap Metal"
+msgid "Glass"
 msgstr ""
 
-msgid "container"
+msgid "Glass Bottles"
 msgstr ""
 
-msgid "centre"
+msgid "Green Waste"
 msgstr ""
 
-msgid "Waste Basket/Trash Can"
+msgid "Paper"
 msgstr ""
 
-msgid "Waste Disposal/Dumpster"
+msgid "Plastic"
 msgstr ""
 
-msgid "Sanitary Dump Station"
+msgid "Plastic Bottles"
 msgstr ""
 
-msgid "Suction pumpout"
+msgid "Plastic Packaging"
 msgstr ""
 
-msgid "Gravity drain for hose"
+msgid "Scrap Metal"
 msgstr ""
 
-msgid "Casette or Elsan Disposal"
+msgid "Shoes"
 msgstr ""
 
-msgid "Operation times"
+msgid "Small Appliances"
 msgstr ""
 
-msgid "Backrest"
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
+msgstr ""
+
+msgid "Waste Basket/Trash Can"
+msgstr ""
+
+msgid "Waste Disposal/Dumpster"
+msgstr ""
+
+msgid "Sanitary Dump Station"
+msgstr ""
+
+msgid "Suction pumpout"
+msgstr ""
+
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
+msgstr ""
+
+msgid "Operation times"
+msgstr ""
+
+msgid "Backrest"
 msgstr ""
 
 msgid "Amount of Seats"
@@ -19046,6 +19421,9 @@ msgstr ""
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr ""
 
@@ -19221,12 +19599,18 @@ msgstr ""
 msgid "Basketball"
 msgstr ""
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr ""
 
@@ -19242,13 +19626,13 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
@@ -19272,9 +19656,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19293,9 +19674,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -19368,6 +19746,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20688,9 +21074,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -21703,10 +22086,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22133,6 +22516,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22157,6 +22543,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22217,6 +22615,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22307,9 +22708,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22679,6 +23089,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22733,9 +23146,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23479,47 +23889,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23528,10 +23947,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24134,6 +24565,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr ""
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25231,374 +25665,680 @@ msgid ""
 "highlight tracks"
 msgstr ""
 
-msgid "Delete this"
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
 msgstr ""
 
-msgid "Delete this&older"
+msgid "Connecting"
 msgstr ""
 
-msgid "km/h"
+msgid "Connected"
 msgstr ""
 
-msgid "Track name: "
+msgid "no name"
 msgstr ""
 
-msgid "Update IRS adjustment layer"
+msgid "Live GPS"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid "Show GPS data."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Speed"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Course"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
+msgid "Explore"
 msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25619,6 +26359,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -25677,47 +26420,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -25950,6 +26652,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr ""
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27167,6 +27872,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27338,6 +28064,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27347,6 +28076,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27527,6 +28259,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27705,6 +28440,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27714,6 +28482,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -27950,9 +28721,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29435,9 +30203,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/ia.po b/i18n/po/ia.po
index 79c84a3..328c775 100644
--- a/i18n/po/ia.po
+++ b/i18n/po/ia.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2011-08-29 01:02+0000\n"
 "Last-Translator: Emilio Sepulveda <Unknown>\n"
 "Language-Team: Interlingua <ia at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:45+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:47+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: ia\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -97,19 +97,16 @@ msgstr ""
 msgid "Updating user interface"
 msgstr ""
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
 msgstr ""
 
 msgid "Warning"
 msgstr "Attention"
 
-msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
+msgid "Ignoring malformed file URL: \"{0}\""
 msgstr ""
 
-msgid "Ignoring malformed URL: \"{0}\""
+msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 
 msgid ""
@@ -444,6 +441,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
 
@@ -1029,6 +1029,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr ""
 
@@ -1945,15 +1969,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr ""
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -1975,6 +1990,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2093,9 +2117,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2309,9 +2330,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr ""
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2525,6 +2552,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2567,6 +2598,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3017,6 +3051,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3134,10 +3186,44 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3327,6 +3413,12 @@ msgstr ""
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3354,13 +3446,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -3976,9 +4068,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -3988,12 +4077,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4174,13 +4275,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4378,6 +4479,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4591,43 +4693,54 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
 msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
 msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
 msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
 msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
-msgid "Menu: {0}"
+msgctxt "menu"
+msgid "Help"
 msgstr ""
 
-msgid "Save and load the current session (list of layers, etc.)"
+msgid "Menu: {0}"
 msgstr ""
 
 msgid "Edit toolbar"
@@ -4651,6 +4764,7 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
 msgstr ""
 
@@ -4773,58 +4887,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr ""
-
-msgid "Pos."
+msgid " ({0})"
 msgstr ""
 
-msgid "Role"
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5253,6 +5325,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr ""
+
 msgid "Primitive"
 msgstr ""
 
@@ -5493,6 +5568,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5639,6 +5717,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5742,7 +5855,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5870,6 +5983,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5879,17 +5997,48 @@ msgstr ""
 msgid "unknown"
 msgstr ""
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -5935,6 +6084,12 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr ""
 
@@ -6064,10 +6219,16 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
-msgid "List of notes"
+msgid "Mini map"
 msgstr ""
 
-msgid "Add comment"
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
+msgid "List of notes"
+msgstr ""
+
+msgid "Add comment"
 msgstr ""
 
 msgid "Comment"
@@ -6122,10 +6283,15 @@ msgstr ""
 msgid "Enter the ID of the object that should be downloaded"
 msgstr ""
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6154,6 +6320,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr ""
 
+msgid "Selection"
+msgstr ""
+
 msgid "Open a selection list window."
 msgstr ""
 
@@ -6244,6 +6413,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -6838,6 +7013,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6929,14 +7110,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7109,6 +7289,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7644,6 +7830,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8489,6 +8678,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr ""
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr ""
 
@@ -8542,6 +8831,9 @@ msgstr ""
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8562,7 +8854,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8645,80 +8937,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr ""
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-
-msgid "Auto Zoom"
-msgstr ""
-
-msgid "Auto load tiles"
-msgstr ""
-
-msgid "Show Errors"
-msgstr ""
-
-msgid "Load Tile"
-msgstr ""
-
-msgid "Show Tile Info"
-msgstr ""
-
-msgid "Load All Tiles"
-msgstr ""
-
-msgid "Load All Error Tiles"
-msgstr ""
-
-msgid "Increase zoom"
-msgstr ""
-
-msgid "Decrease zoom"
-msgstr ""
-
-msgid "Snap to tile size"
-msgstr ""
-
-msgid "Flush Tile Cache"
-msgstr ""
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
@@ -8728,56 +8946,30 @@ msgstr ""
 msgid "No validation errors"
 msgstr ""
 
-msgid "Blank Layer"
-msgstr ""
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "Download visible tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-
-msgid "Change resolution"
-msgstr ""
-
-msgid "Reload erroneous tiles"
-msgstr ""
-
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Automatic downloading"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Zoom to native resolution"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Supported projections are: {0}"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Save WMS file"
+msgid "Try Again"
 msgstr ""
 
-msgid "Correlate to GPX"
+msgid "No images could be matched!"
 msgstr ""
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
@@ -8864,24 +9056,9 @@ msgstr ""
 msgid "Offset:"
 msgstr ""
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
 msgid "Correlate"
 msgstr ""
 
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9075,9 +9252,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr ""
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9140,9 +9314,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9768,15 +9939,15 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr ""
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -10569,13 +10740,28 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
-msgid "imagery fade"
+msgid "1. Enter getCapabilities URL"
 msgstr ""
 
-msgid "Fade Color: "
+msgid "2. Enter name for this layer"
 msgstr ""
 
-msgid "Fade amount: "
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
+msgid "imagery fade"
+msgstr ""
+
+msgid "Fade Color: "
+msgstr ""
+
+msgid "Fade amount: "
 msgstr ""
 
 msgid "Soft"
@@ -10587,6 +10773,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10608,6 +10806,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10650,9 +10851,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr ""
 
@@ -10677,36 +10875,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11642,6 +11825,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] ""
@@ -11750,6 +11941,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12003,6 +12197,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12539,6 +12736,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12924,6 +13124,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13918,6 +14131,9 @@ msgstr ""
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr ""
+
 msgid "Blue:"
 msgstr ""
 
@@ -13957,7 +14173,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -13969,9 +14185,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14080,6 +14293,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14093,12 +14309,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14135,10 +14357,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14165,6 +14393,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14189,7 +14420,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14204,6 +14435,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14216,12 +14450,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14242,6 +14470,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14274,10 +14505,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14307,6 +14535,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14322,154 +14556,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14484,9 +14724,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14616,6 +14865,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14631,7 +14895,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -14957,6 +15221,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15041,11 +15310,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15099,7 +15363,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15114,9 +15378,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15197,6 +15458,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15235,6 +15504,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15310,9 +15582,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15718,6 +15987,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15742,10 +16019,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15762,6 +16035,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15778,11 +16055,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15798,6 +16087,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15810,6 +16103,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15837,6 +16134,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16228,6 +16537,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16304,6 +16616,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr ""
 
@@ -16841,6 +17156,12 @@ msgstr ""
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17030,6 +17351,11 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
 msgstr ""
 
@@ -17083,6 +17409,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17224,13 +17554,127 @@ msgstr ""
 msgid "public"
 msgstr ""
 
-msgid "Pier"
+msgid "Marine Fuel"
 msgstr ""
 
-msgid "Lock Gate"
+msgid "Agip"
 msgstr ""
 
-msgid "Turning Point"
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
+msgid "Pier"
+msgstr ""
+
+msgid "Lock Gate"
+msgstr ""
+
+msgid "Turning Point"
 msgstr ""
 
 msgid "Slipway"
@@ -17340,6 +17784,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -17463,78 +17910,6 @@ msgstr ""
 msgid "Fuel"
 msgstr ""
 
-msgid "Agip"
-msgstr ""
-
-msgid "Aral"
-msgstr ""
-
-msgid "Avia"
-msgstr ""
-
-msgid "BP"
-msgstr ""
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr ""
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
 msgid "With shop"
 msgstr ""
 
@@ -17544,51 +17919,12 @@ msgstr ""
 msgid "kiosk"
 msgstr ""
 
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -17807,9 +18143,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17828,6 +18161,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18030,6 +18366,12 @@ msgstr ""
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18120,6 +18462,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18334,6 +18679,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18821,7 +19169,7 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
@@ -18830,43 +19178,70 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
-msgid "Glass"
+msgid "Cardboard"
 msgstr ""
 
-msgid "Paper"
+msgid "Electrical Appliances"
 msgstr ""
 
-msgid "Scrap Metal"
+msgid "Glass"
 msgstr ""
 
-msgid "container"
+msgid "Glass Bottles"
 msgstr ""
 
-msgid "centre"
+msgid "Green Waste"
 msgstr ""
 
-msgid "Waste Basket/Trash Can"
+msgid "Paper"
 msgstr ""
 
-msgid "Waste Disposal/Dumpster"
+msgid "Plastic"
 msgstr ""
 
-msgid "Sanitary Dump Station"
+msgid "Plastic Bottles"
 msgstr ""
 
-msgid "Suction pumpout"
+msgid "Plastic Packaging"
 msgstr ""
 
-msgid "Gravity drain for hose"
+msgid "Scrap Metal"
 msgstr ""
 
-msgid "Casette or Elsan Disposal"
+msgid "Shoes"
 msgstr ""
 
-msgid "Operation times"
+msgid "Small Appliances"
 msgstr ""
 
-msgid "Backrest"
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
+msgstr ""
+
+msgid "Waste Basket/Trash Can"
+msgstr ""
+
+msgid "Waste Disposal/Dumpster"
+msgstr ""
+
+msgid "Sanitary Dump Station"
+msgstr ""
+
+msgid "Suction pumpout"
+msgstr ""
+
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
+msgstr ""
+
+msgid "Operation times"
+msgstr ""
+
+msgid "Backrest"
 msgstr ""
 
 msgid "Amount of Seats"
@@ -19046,6 +19421,9 @@ msgstr ""
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr ""
 
@@ -19221,12 +19599,18 @@ msgstr ""
 msgid "Basketball"
 msgstr ""
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr ""
 
@@ -19242,13 +19626,13 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
@@ -19272,9 +19656,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19293,9 +19674,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -19368,6 +19746,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20688,9 +21074,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -21703,10 +22086,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22133,6 +22516,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22157,6 +22543,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22217,6 +22615,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22307,9 +22708,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22679,6 +23089,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22733,9 +23146,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23479,47 +23889,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23528,10 +23947,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24134,6 +24565,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr ""
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25231,374 +25665,680 @@ msgid ""
 "highlight tracks"
 msgstr ""
 
-msgid "Delete this"
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
 msgstr ""
 
-msgid "Delete this&older"
+msgid "Connecting"
 msgstr ""
 
-msgid "km/h"
+msgid "Connected"
 msgstr ""
 
-msgid "Track name: "
+msgid "no name"
 msgstr ""
 
-msgid "Update IRS adjustment layer"
+msgid "Live GPS"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid "Show GPS data."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Speed"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Course"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
+msgid "Explore"
 msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25619,6 +26359,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -25677,47 +26420,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -25950,6 +26652,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr ""
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27167,6 +27872,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27338,6 +28064,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27347,6 +28076,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27527,6 +28259,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27705,6 +28440,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27714,6 +28482,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -27950,9 +28721,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29435,9 +30203,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/id.po b/i18n/po/id.po
index a42e70f..6ed82b8 100644
--- a/i18n/po/id.po
+++ b/i18n/po/id.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2015-04-10 09:39+0000\n"
 "Last-Translator: Trisno Pamuji <tri.snowman at gmail.com>\n"
 "Language-Team: Indonesian <id at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:45+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:47+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: id\n"
 "X-Language: id_ID\n"
 
@@ -98,21 +98,18 @@ msgstr "Memuat Preferensi citra"
 msgid "Updating user interface"
 msgstr "Memperbaharui tampilan pengguna"
 
-msgid "{0} completed in {1}"
-msgstr "{0} dirampungkan dalam {1}"
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "Mengabaikan file URL yang rusak: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "Mengabaikan dokumen URL yang cacat: \"{0}\""
 
 msgid "Warning"
 msgstr "Peringatan"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "Mengabaikan file URL yang rusak: \"{0}\""
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr "Parameter \"downloadgps\" tidak menerima nama file atau URL file"
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "Mengabaikan dokumen URL yang cacat: \"{0}\""
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -457,6 +454,9 @@ msgstr "Mengatur panel dialog"
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Mengatur panel dialog, memaksimalkan tampilan peta"
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
 "Mendistribusikan node terpilih untuk menyamakan jarak sepanjang garis"
@@ -1101,6 +1101,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr "Silahkan pilih jalur dengan sudut maksimum 90 atau 180 derajat."
 
+msgid "Download from Overpass API ..."
+msgstr "Download dari Overpass API ..."
+
+msgid "Download map data from Overpass API server."
+msgstr "Download data peta dari server API Overpass."
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr "Tempel"
 
@@ -2073,16 +2097,6 @@ msgstr "Angle snapping aktif"
 msgid "Finish drawing."
 msgstr "Selesai menggambar."
 
-msgid "FIX"
-msgstr ""
-"Perbaiki (pe,pn) - arah garis snapping (e0,n0) - garis snapping yang asli"
-
-msgid "draw angle snap"
-msgstr "gambar angle snap"
-
-msgid "draw angle snap highlight"
-msgstr "gambar angel snap yang disorot"
-
 msgid "Toggle snapping by {0}"
 msgstr "Alihkan snapping dengan {0}"
 
@@ -2104,6 +2118,16 @@ msgstr "0,45,90,..."
 msgid "0,30,45,60,90,..."
 msgstr "0,30,45,60,90,..."
 
+msgid "FIX"
+msgstr ""
+"Perbaiki (pe,pn) - arah garis snapping (e0,n0) - garis snapping yang asli"
+
+msgid "draw angle snap"
+msgstr "gambar angle snap"
+
+msgid "draw angle snap highlight"
+msgstr "gambar angel snap yang disorot"
+
 msgid "Angle snapping"
 msgstr "Menempelkan sudut"
 
@@ -2239,9 +2263,6 @@ msgstr ""
 "ParallelWayAction\n"
 "Jalur yang terpilih harus membentuk jalan sederhana tanpa memiliki cabang."
 
-msgid "Make parallel way error"
-msgstr "Kesalahan membuat jalur paralel"
-
 msgid "Drag play head"
 msgstr "Geser play head"
 
@@ -2465,9 +2486,15 @@ msgstr ""
 "juga termasuk objek yang belum lengkap dan objek yang telah dihapus dalam "
 "pencarian"
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr "ekspresi reguler"
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr "Tambah tombol toolbar"
 
@@ -2691,6 +2718,10 @@ msgid "RX"
 msgstr "RX"
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr "A"
 
@@ -2743,6 +2774,9 @@ msgstr "Jarak pada angka diharapkan"
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr "Token tidak diharapkan. Diharapkan {0}, ditemukan {1}"
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr "Token tidak diharapkan: {0}"
 
@@ -3212,6 +3246,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr "<html>Gagal untuk membuat direktori cache yang hilang: {0}</html>"
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3337,13 +3389,47 @@ msgctxt "compass"
 msgid "E"
 msgstr "T"
 
-msgid "Not in cache"
-msgstr "Tidak terdapatdi cache"
-
 msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr ""
 "Proyeksi ''{0}'' tidak ditemukan, penanda ''{1}'' tidak dapat digunakan"
 
+msgid "HTTP error {0} when loading tiles"
+msgstr ""
+
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr "Proyeksi"
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
+msgstr ""
+
 msgid "ID > 0 expected. Got {0}."
 msgstr "ID > 0 diharapkan. Mendapat {0}."
 
@@ -3549,6 +3635,12 @@ msgstr "teks"
 msgid "areatext"
 msgstr "teks area"
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr "Parameter harus dimulai dengan a \"+\" karakter  (found ''{0}'')"
 
@@ -3576,15 +3668,15 @@ msgstr "Ellipsoid ''{0}'' tidak didukung."
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr "Kombinasi parameter ellipsoid tidak didukung"
 
+msgid "Unknown datum identifier: ''{0}''"
+msgstr ""
+
 msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr "Ellipsoid meminta (+ellps=* or +a=*, +b=*)"
 
 msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr "File pergeseran grid ''{0}'' untuk pilihan +nadgrids tidak didukung."
 
-msgid "Unknown datum identifier: ''{0}''"
-msgstr ""
-
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
 msgstr ""
 
@@ -4225,9 +4317,6 @@ msgstr "Tag key lebih panjang dari yang diperbolehkan"
 msgid "Tags with empty values"
 msgstr "Tag/label dengan nilai kosong"
 
-msgid "Invalid property key"
-msgstr "Properti key tidak valid"
-
 msgid "Invalid white space in property key"
 msgstr "spasi tidak valid pada kunci properti"
 
@@ -4237,12 +4326,24 @@ msgstr "Nilai properti mulai atau akhir dengan spasi"
 msgid "Property values contain HTML entity"
 msgstr "Nilai properti mengandung  HTML"
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr "Key \"{0}\" tidak ada  pada preset"
 
 msgid "Presets do not contain property key"
 msgstr "Preset tidak mengandung kunci properti"
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr "Value ''{0}'' untuk key ''{1}'' tidak ada di preset"
 
@@ -4428,6 +4529,9 @@ msgstr "Garis titik dekat dengan garis lain"
 msgid "Connected way end node near other way"
 msgstr "Titik akhir garis terkoneksi dekat dengan garis lainnya"
 
+msgid "Unconnected nodes without physical tags"
+msgstr "Titik yang tidak terkoneksi tanpa tag fisik"
+
 msgid "Untagged and unconnected nodes"
 msgstr "Titik-titik yang tidak berlabel dan tidak terkoneksi"
 
@@ -4435,9 +4539,6 @@ msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 "Tes ini memeriksa untuk titik tidak berlabel bukan bagian dari beberapa jalan"
 
-msgid "Unconnected nodes without physical tags"
-msgstr "Titik yang tidak terkoneksi tanpa tag fisik"
-
 msgid "No tags"
 msgstr "Tidak ada tag"
 
@@ -4630,8 +4731,9 @@ msgstr "Klik untuk menutup dialog"
 msgid "Imagery offset"
 msgstr "Pergeseran citra"
 
+msgctxt "menu"
 msgid "Imagery"
-msgstr "Citra Satelit"
+msgstr ""
 
 msgctxt "layer"
 msgid "Offset"
@@ -4854,45 +4956,56 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
-msgstr "Berkas"
+msgstr ""
 
-msgid "Session"
-msgstr "Sesi"
+msgctxt "menu"
+msgid "Edit"
+msgstr ""
 
+msgctxt "menu"
 msgid "View"
-msgstr "Tampilan"
+msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
-msgstr "Alat"
+msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
-msgstr "Alat tambahan"
+msgstr ""
 
+msgctxt "menu"
 msgid "Data"
-msgstr "Data"
+msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
-msgstr "Pilihan"
+msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
-msgstr "Presets"
+msgstr ""
 
 msgid "More..."
 msgstr "Selebihnya..."
 
+msgctxt "menu"
 msgid "GPS"
-msgstr "GPS"
+msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
-msgstr "Jendela"
+msgstr ""
+
+msgctxt "menu"
+msgid "Help"
+msgstr ""
 
 msgid "Menu: {0}"
 msgstr "Menu: {0}"
 
-msgid "Save and load the current session (list of layers, etc.)"
-msgstr "Simpan dan muat sesi saat ini (daftar layer, dll)"
-
 msgid "Edit toolbar"
 msgstr "Edit toolbar"
 
@@ -4914,8 +5027,9 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
-msgstr "Audio"
+msgstr ""
 
 msgid "Do not hide toolbar"
 msgstr "Jangan menyembunyikan toolbar"
@@ -5038,66 +5152,17 @@ msgstr "Di latar belakang"
 msgid "Click to run job in background"
 msgstr "Klik untuk menjalankan pekerjaan di latar belakang"
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-"Citra satelit mungkin tidak sejajar. Tolong periksa offset satelit tersebut "
-"menggunakan trek GPS!"
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-
-msgid "Details..."
-msgstr "Perincian..."
-
-msgid "Hide this message and never show it again"
-msgstr "Sembunyikan pesan ini dan jangan pernah munculkan lagi"
+msgid " ({0})"
+msgstr " ({0})"
 
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-"<html>Tolong konfirmasi untuk menghapus <strong>1 objek</strong> dari "
-"<strong>1 relasi</strong>.</html>"
+msgid "{0} completed in {1}"
+msgstr "{0} dirampungkan dalam {1}"
 
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
+msgid "Enlarge"
 msgstr ""
-"<html>Tolong konfirmasi untuk menghapus <strong>1 objek</strong> dar "
-"<strong>{0} relasi</strong>.</html>"
 
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
+msgid "Shrink"
 msgstr ""
-"<html>Tolong konfirmasi untuk menghapus <strong>{0} objek</strong> dari "
-"<strong>{1} relasi</strong>.</html>"
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] "Menghapus {0} objek"
-
-msgid "Delete objects"
-msgstr "Hapus objek"
-
-msgid "To delete"
-msgstr "Untuh hapus"
-
-msgid "From Relation"
-msgstr "Dari hubungan"
-
-msgid "Pos."
-msgstr "Pos."
-
-msgid "Role"
-msgstr "Peran"
-
-msgid "Click to close the dialog and remove the object from the relations"
-msgstr "Klik untuk menutup dialog dan hapus objek dari relasi"
-
-msgid "Click to close the dialog and to abort deleting the objects"
-msgstr "Klik untuk menutup dialog dan untuk membatalkan menghapus objek"
 
 msgid ""
 "<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
@@ -5555,6 +5620,9 @@ msgstr "Simpan state yang mereka hapus"
 msgid "Undecide conflict between deleted state"
 msgstr "konflik yang meragukan antara state yang dihapus"
 
+msgid "Role"
+msgstr "Peran"
+
 msgid "Primitive"
 msgstr "Primitif"
 
@@ -5799,6 +5867,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr "Peran ini berlaku untuk semua member"
 
+msgid "Pos."
+msgstr "Pos."
+
 msgid "Orig. Way"
 msgstr "Orig. Way/garis"
 
@@ -5956,6 +6027,46 @@ msgstr "Menyelesaikan konflik"
 msgid "Resolve conflicts for ''{0}''"
 msgstr "Menyelesaikan konflik untuk ''{0}''"
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+"<html>Tolong konfirmasi untuk menghapus <strong>1 objek</strong> dari "
+"<strong>1 relasi</strong>.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Tolong konfirmasi untuk menghapus <strong>1 objek</strong> dar "
+"<strong>{0} relasi</strong>.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Tolong konfirmasi untuk menghapus <strong>{0} objek</strong> dari "
+"<strong>{1} relasi</strong>.</html>"
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] "Menghapus {0} objek"
+
+msgid "Delete objects"
+msgstr "Hapus objek"
+
+msgid "To delete"
+msgstr "Untuh hapus"
+
+msgid "From Relation"
+msgstr "Dari hubungan"
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr "Klik untuk menutup dialog dan hapus objek dari relasi"
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr "Klik untuk menutup dialog dan untuk membatalkan menghapus objek"
+
 msgid "Filter objects and hide/disable them."
 msgstr "Menyaring objek dan sembunyikan/non-aktifkan objek tersebut."
 
@@ -6059,8 +6170,8 @@ msgstr "Lanjutan info objek"
 msgid "map style"
 msgstr "Model peta"
 
-msgid " ({0})"
-msgstr " ({0})"
+msgid "edit counts"
+msgstr ""
 
 msgid "not in data set"
 msgstr "Bukan set data"
@@ -6199,6 +6310,11 @@ msgstr ""
 "Peringatan: 2 objek yang dipilih sama akan tetapi bukan gaya cache yang "
 "identik"
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr "xml"
 
@@ -6208,17 +6324,48 @@ msgstr "mapcss"
 msgid "unknown"
 msgstr "tidak diketahui"
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -6265,6 +6412,12 @@ msgstr "Tingkat transparan"
 msgid "Adjust opacity of the layer."
 msgstr "mengatur tingkat transparan dari layer"
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr "Aktifkan"
 
@@ -6394,6 +6547,12 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
+msgid "Mini map"
+msgstr ""
+
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
 msgid "List of notes"
 msgstr ""
 
@@ -6452,10 +6611,15 @@ msgstr "ID Objek:"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "Masukan objek ID yang akan didownload"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6484,6 +6648,9 @@ msgstr "Relasi: {0}/{1}"
 msgid "Relations: {0}"
 msgstr "Relasi: {0}"
 
+msgid "Selection"
+msgstr "Pilihan"
+
 msgid "Open a selection list window."
 msgstr "Buka jendela daftar pilihan"
 
@@ -6575,6 +6742,12 @@ msgstr "Buka jendela validasi"
 msgid "Validation results"
 msgstr "Hasil validasi"
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr "Perbaiki"
 
@@ -7219,6 +7392,12 @@ msgstr "Pergi ke wiki OSm untuk tag bantuan (F1)"
 msgid "Launch browser with wiki help for selected object"
 msgstr "Luncurkan browser dengan bantuan wiki untuk objek yang dipilih"
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr "Tempel Value"
 
@@ -7308,14 +7487,13 @@ msgstr "Mengatur jumlah tag/label yang baru ditambahkan"
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7503,6 +7681,12 @@ msgstr "sortir relasi member"
 msgid "Relation Editor: Sort"
 msgstr "Menyusun relasi:sortir"
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr "membalik urutan relasi member"
 
@@ -8094,6 +8278,9 @@ msgstr "memuat riwayat untuk relasi {0}"
 msgid "Node {0}"
 msgstr "Node {0}"
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr "Perbesar ke node"
 
@@ -9031,6 +9218,108 @@ msgid "{0} object to delete:"
 msgid_plural "{0} objects to delete:"
 msgstr[0] "{0} objek untuk dihapus:"
 
+msgid "Show Tile Info"
+msgstr "Tampilkan infomasi indeks"
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr "Perbesar otomatis"
+
+msgid "Auto load tiles"
+msgstr "Memuat indeks otomatis"
+
+msgid "Load All Tiles"
+msgstr "Memuat semua indeks"
+
+msgid "Load All Error Tiles"
+msgstr "Memuat semua kesalahan indeks"
+
+msgid "Zoom to native resolution"
+msgstr "Memperbesar resolusi asal"
+
+msgid "Change resolution"
+msgstr "Mengubah resolusi"
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr "Tampilkan kesalahan"
+
+msgid "Load Tile"
+msgstr "Memuat indeks"
+
+msgid "Increase zoom"
+msgstr "Meningkatkan perbesaran"
+
+msgid "Decrease zoom"
+msgstr "Menurunkan perbesaran"
+
+msgid "Snap to tile size"
+msgstr "Mengambil ukuran indeks"
+
+msgid "Flush Tile Cache"
+msgstr "Menghapus cache indeks"
+
+msgid "zoom in to load any tiles"
+msgstr "Perbesar untuk memuat indeks peta"
+
+msgid "zoom in to load more tiles"
+msgstr "Perbesar untuk memuat indeks lebih banyak"
+
+msgid "increase zoom level to see more detail"
+msgstr "meningkatkan tingkat zoom untuk melihat lebih detail"
+
+msgid "No tiles at this zoom level"
+msgstr "Tidak ada indeks pada tingkat perbesaran ini"
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr "Download indeks {0}/{1}"
+
+msgid "Save WMS file"
+msgstr "Simpan file WMS"
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+"Citra satelit mungkin tidak sejajar. Tolong periksa offset satelit tersebut "
+"menggunakan trek GPS!"
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+
+msgid "Details..."
+msgstr "Perincian..."
+
+msgid "Hide this message and never show it again"
+msgstr "Sembunyikan pesan ini dan jangan pernah munculkan lagi"
+
 msgid "Customize Color"
 msgstr "Penyesuaian warna"
 
@@ -9080,6 +9369,9 @@ msgstr "Simpan file GPX"
 msgid "Imagery fade"
 msgstr "Citra satelit pudar"
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr "KESALAHAN"
 
@@ -9100,12 +9392,9 @@ msgstr "Semua proyeksi didukung"
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
-"Layer {0} tidak dapat menggunakan proyeksi yang baru {1}.\n"
-"{2}\n"
-"Ubah kembali proyeksi atau hapus layer."
 
 msgid "Save Layer"
 msgstr "Simpan Layer"
@@ -9187,185 +9476,79 @@ msgstr ""
 msgid "Save OSM file"
 msgstr "Simpan file OSM"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-"{0} bukan merupakan argumen TMS yang sah. Harap periksa server URL ini:\n"
-"{1}"
+msgid "EPSG:4326 and Mercator projection are supported"
+msgstr "EPSG:4326 dan proyeksi Mercator mendukung"
+
+msgid "Validation errors"
+msgstr "Kesalahan validasi"
+
+msgid "No validation errors"
+msgstr "Tidak ada kesalahan validasi"
+
+msgid "Set WMS Bookmark"
+msgstr "Pengaturan bookmark WMS"
 
 msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
-"Layer TMS tidak mendukung proyeksi ini {0}.\n"
-"{1}\n"
-"Ubah proyeksi atau hapus layer."
 
-msgid "Auto Zoom"
-msgstr "Perbesar otomatis"
+msgid "Correlate to GPX"
+msgstr "menghubungkan GPX"
 
-msgid "Auto load tiles"
-msgstr "Memuat indeks otomatis"
+msgid "Invalid timezone"
+msgstr "zona waktu tidak valid"
 
-msgid "Show Errors"
-msgstr "Tampilkan kesalahan"
+msgid "Invalid offset"
+msgstr "pergeseran tidak valid"
 
-msgid "Load Tile"
-msgstr "Memuat indeks"
+msgid "Correlate images with GPX track"
+msgstr "menghubungkan gambar dengan GPX track/jalur"
 
-msgid "Show Tile Info"
-msgstr "Tampilkan infomasi indeks"
+msgid "Try Again"
+msgstr "Coba lagi"
 
-msgid "Load All Tiles"
-msgstr "Memuat semua indeks"
+msgid "No images could be matched!"
+msgstr "Tidak ada gambar yang bisa dicocokan!"
 
-msgid "Load All Error Tiles"
-msgstr "Memuat semua kesalahan indeks"
+msgid "GPX Files (*.gpx *.gpx.gz)"
+msgstr "File GPX (*.gpx *.gpx.gz)"
 
-msgid "Increase zoom"
-msgstr "Meningkatkan perbesaran"
+msgid "File {0} is loaded yet under the name \"{1}\""
+msgstr "File {0} memuat belum dengan nama \"{1}\""
 
-msgid "Decrease zoom"
-msgstr "Menurunkan perbesaran"
+msgid "Error while parsing {0}"
+msgstr "kesalahan saat mengurai {0}"
 
-msgid "Snap to tile size"
-msgstr "Mengambil ukuran indeks"
+msgid "Could not read \"{0}\""
+msgstr "Tidak dapat membaca \"{0}\""
 
-msgid "Flush Tile Cache"
-msgstr "Menghapus cache indeks"
+msgid ""
+"<html>Take a photo of your GPS receiver while it displays the "
+"time.<br>Display that photo here.<br>And then, simply capture the time you "
+"read on the photo and select a timezone<hr></html>"
+msgstr ""
+"<html>Mengambil foto dari penerima GPS Anda dengan menampilkan "
+"waktu.<br>Tampilkan foto tersebut disini.<br>Dan kemudian, hanya menangkap "
+"sewaktu Anda membaca foto dan memilih zona waktu<hr></html>"
 
-msgid "zoom in to load any tiles"
-msgstr "Perbesar untuk memuat indeks peta"
+msgid "Photo time (from exif):"
+msgstr "foto waktu (dari exif)"
 
-msgid "zoom in to load more tiles"
-msgstr "Perbesar untuk memuat indeks lebih banyak"
+msgid "Gps time (read from the above photo): "
+msgstr "GPS waktu (baca dari depan foto) "
 
-msgid "increase zoom level to see more detail"
-msgstr "meningkatkan tingkat zoom untuk melihat lebih detail"
+msgid "I am in the timezone of: "
+msgstr "Saya berada di zona waktu: "
 
-msgid "No tiles at this zoom level"
-msgstr "Tidak ada indeks pada tingkat perbesaran ini"
+msgid "No date"
+msgstr "Tanpa tanggal"
 
-msgid "Current zoom: {0}"
-msgstr ""
+msgid "Open another photo"
+msgstr "Buka foto lainnya"
 
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr "Layer TMS ({0}), mendownload dengan perbesaran {1}"
-
-msgid "EPSG:4326 and Mercator projection are supported"
-msgstr "EPSG:4326 dan proyeksi Mercator mendukung"
-
-msgid "Validation errors"
-msgstr "Kesalahan validasi"
-
-msgid "No validation errors"
-msgstr "Tidak ada kesalahan validasi"
-
-msgid "Blank Layer"
-msgstr "Layer Kosong"
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr "Download indeks {0}/{1}"
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr "layer WMS ({0}), otomatis men-download di zoom {1}"
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr "layer WMS ({0}), men-download di zoom {1}"
-
-msgid "Download visible tiles"
-msgstr "Download indeks yang terlihat"
-
-msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-"Area yang diminta terlalu besar. Harap perbesar sedikit, atau ubah resolusi"
-
-msgid "Change resolution"
-msgstr "Mengubah resolusi"
-
-msgid "Reload erroneous tiles"
-msgstr "Memuat ulang indeks yang salah"
-
-msgid "Alpha channel"
-msgstr "Saluran Alpha"
-
-msgid "Automatically change resolution"
-msgstr "Ubah resolusi secara otomatis"
-
-msgid "Set WMS Bookmark"
-msgstr "Pengaturan bookmark WMS"
-
-msgid "Automatic downloading"
-msgstr "Download otomatis"
-
-msgid "Zoom to native resolution"
-msgstr "Memperbesar resolusi asal"
-
-msgid "Supported projections are: {0}"
-msgstr "mendukung proyeksi: {0}"
-
-msgid "Unsupported WMS file version; found {0}, expected {1}"
-msgstr "tidak mendukung file WMS versi; ditemukan {0}, diharapkan {1}"
-
-msgid "Save WMS file"
-msgstr "Simpan file WMS"
-
-msgid "Correlate to GPX"
-msgstr "menghubungkan GPX"
-
-msgid "GPX Files (*.gpx *.gpx.gz)"
-msgstr "File GPX (*.gpx *.gpx.gz)"
-
-msgid "File {0} is loaded yet under the name \"{1}\""
-msgstr "File {0} memuat belum dengan nama \"{1}\""
-
-msgid "Error while parsing {0}"
-msgstr "kesalahan saat mengurai {0}"
-
-msgid "Could not read \"{0}\""
-msgstr "Tidak dapat membaca \"{0}\""
-
-msgid ""
-"<html>Take a photo of your GPS receiver while it displays the "
-"time.<br>Display that photo here.<br>And then, simply capture the time you "
-"read on the photo and select a timezone<hr></html>"
-msgstr ""
-"<html>Mengambil foto dari penerima GPS Anda dengan menampilkan "
-"waktu.<br>Tampilkan foto tersebut disini.<br>Dan kemudian, hanya menangkap "
-"sewaktu Anda membaca foto dan memilih zona waktu<hr></html>"
-
-msgid "Photo time (from exif):"
-msgstr "foto waktu (dari exif)"
-
-msgid "Gps time (read from the above photo): "
-msgstr "GPS waktu (baca dari depan foto) "
-
-msgid "I am in the timezone of: "
-msgstr "Saya berada di zona waktu: "
-
-msgid "No date"
-msgstr "Tanpa tanggal"
-
-msgid "Open another photo"
-msgstr "Buka foto lainnya"
-
-msgid "Synchronize time from a photo of the GPS receiver"
-msgstr "sinkronisasi waktu dari foto GPS penerima"
+msgid "Synchronize time from a photo of the GPS receiver"
+msgstr "sinkronisasi waktu dari foto GPS penerima"
 
 msgid ""
 "Error while parsing the date.\n"
@@ -9418,24 +9601,9 @@ msgstr "Zona Waktu: "
 msgid "Offset:"
 msgstr "pergeseran"
 
-msgid "Correlate images with GPX track"
-msgstr "menghubungkan gambar dengan GPX track/jalur"
-
 msgid "Correlate"
 msgstr "menghubungkan"
 
-msgid "Invalid timezone"
-msgstr "zona waktu tidak valid"
-
-msgid "Invalid offset"
-msgstr "pergeseran tidak valid"
-
-msgid "Try Again"
-msgstr "Coba lagi"
-
-msgid "No images could be matched!"
-msgstr "Tidak ada gambar yang bisa dicocokan!"
-
 msgid "No gpx selected"
 msgstr "Tidak gpx yang dipilih"
 
@@ -9644,9 +9812,6 @@ msgstr ""
 "\n"
 "Waktu GPS: {0}"
 
-msgid "JPEG images (*.jpg)"
-msgstr "JPEG images (*.jpg)"
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9715,9 +9880,6 @@ msgstr "meter"
 msgid "Maximum area per request:"
 msgstr "Area maksimum per permintaan"
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr "Download yang terdekat:"
 
@@ -10449,9 +10611,6 @@ msgstr "Keluar dari dialog preferensi dan abaikan update preferensi"
 msgid "Save the preferences and close the dialog"
 msgstr "simpan preferensi dan keluar dari kotak dialog"
 
-msgid "Download plugins"
-msgstr "Download plugin"
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 "Anda restart JOSM untuk beberapa efek dari pengaturan yang telah dimuat"
@@ -10459,6 +10618,9 @@ msgstr ""
 msgid "Would you like to restart now?"
 msgstr "Apakah Anda ingin memulai ulang sekarang?"
 
+msgid "Download plugins"
+msgstr "Download plugin"
+
 msgid "Icon paths:"
 msgstr "ikon jalur:"
 
@@ -11309,6 +11471,21 @@ msgstr "Tunjukkan batas"
 msgid "No bounding box was found for this layer."
 msgstr "Tidak ada kotak batas yang ditemukan pada layer"
 
+msgid "1. Enter getCapabilities URL"
+msgstr ""
+
+msgid "2. Enter name for this layer"
+msgstr ""
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr "citra satelit pudar"
 
@@ -11327,6 +11504,18 @@ msgstr "Kuat"
 msgid "Sharpen (requires layer re-add): "
 msgstr "Mempertajam (permintaan layer tambahan kembali): "
 
+msgid "Tile cache directory: "
+msgstr "Direktori indeks cache: "
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr "Pengaturan citra satelit"
 
@@ -11349,6 +11538,9 @@ msgstr "Penyedia citra satelit"
 msgid "Offset bookmarks"
 msgstr "Bookmark offset"
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr "Tampilan belakang citra satelit: Standar"
 
@@ -11391,9 +11583,6 @@ msgstr "EULA tidak tersedia lisensi URL: {0}"
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr "URL cacat untuk lisensi EULA: {0}"
 
-msgid "Projection"
-msgstr "Proyeksi"
-
 msgid "Layer"
 msgstr "Layer"
 
@@ -11418,18 +11607,12 @@ msgstr "Tingkat perbesaran maksimal: "
 msgid "Add to slippymap chooser: "
 msgstr "Tambhakan ke slippymap pemilih: "
 
-msgid "Tile cache directory: "
-msgstr "Direktori indeks cache: "
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
@@ -11437,20 +11620,11 @@ msgstr ""
 "Layer itu tidak mendukung setiap proyeksi pada JOSM, \n"
 "jadi Anda tidak bisa menggunakannya. Pesan ini tidak akan ditampilkan lagi."
 
-msgid "Downloader:"
-msgstr "Alat untuk mendownload"
-
 msgid "Simultaneous connections:"
 msgstr "koneksi yang simultan"
 
-msgid "Overlap tiles"
-msgstr "Indeks bertampalan"
-
-msgid "% of east:"
-msgstr "% dari timur:"
-
-msgid "% of north:"
-msgstr "% dari utara:"
+msgid "Tile size:"
+msgstr ""
 
 msgid "Auto save enabled"
 msgstr "Menyimpan otomatis diaktifkan"
@@ -12451,6 +12625,14 @@ msgstr "Tambahkan Preset"
 msgid "New relation"
 msgstr "Relasi baru"
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] "Ubah {0} objek"
@@ -12568,6 +12750,9 @@ msgstr "Tampilkan dialog pencarian preset"
 msgid "Search presets"
 msgstr "Cari preset"
 
+msgid "Presets"
+msgstr "Presets"
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12853,6 +13038,9 @@ msgstr "<html>Tidak bisa membaca berkas.<br>Kesalahan:<br>{0}</html>"
 msgid "GeoJSON Files"
 msgstr "Berkas GeoJSON"
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr "Layer \"{0}\" tidak mendukung"
 
@@ -13424,6 +13612,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr "Berkas WMS  (*.wms)"
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr "tidak mendukung file WMS versi; ditemukan {0}, diharapkan {1}"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -13843,6 +14034,19 @@ msgid_plural ""
 msgstr[0] ""
 "Plugin {0} membutuhkan {1} plugin tidak ditemukan. Plugin yang hilang adalah:"
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -14963,6 +15167,9 @@ msgstr "Perbaharui"
 msgid "Update directory listing."
 msgstr "Perbarui daftar direktori"
 
+msgid "View"
+msgstr "Tampilan"
+
 msgid "Blue:"
 msgstr "Biru:"
 
@@ -15002,7 +15209,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -15014,9 +15221,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -15125,6 +15329,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -15138,12 +15345,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -15180,10 +15393,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
+msgstr ""
+
+msgid "Geodatastyrelsen DTK Kort25"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -15210,6 +15429,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -15234,7 +15456,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -15249,6 +15471,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -15261,12 +15486,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -15287,6 +15506,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -15319,10 +15541,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -15352,73 +15571,25 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
-msgid "OSMIE Townlands"
-msgstr ""
-
-msgid "OSMIE EDs"
-msgstr ""
-
-msgid "OSMIE Civil Parishes"
-msgstr ""
-
-msgid "OSMIE Baronies"
-msgstr ""
-
-msgid "OSMIE Political"
-msgstr ""
-
-msgid "Ireland EEA GMES Urban Atlas"
-msgstr ""
-
-msgid "Ireland EEA CORINE 2006"
-msgstr ""
-
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
 msgstr ""
 
 msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Clare Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Dublin Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Fermanagh Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Galway Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Kildare Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Leitrim Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Longford Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Offaly Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Sligo Civil Parishes and Baronies"
+msgid "OSMIE Townlands"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "OSMIE EDs"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "OSMIE Civil Parishes"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "OSMIE Baronies"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "OSMIE Political"
 msgstr ""
 
 msgid "Lodi - Italy"
@@ -15454,6 +15625,9 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
+msgid "1.cikla ortofotokarte - Latvia"
+msgstr ""
+
 msgid "ORT10LT (Lithuania)"
 msgstr ""
 
@@ -15469,6 +15643,9 @@ msgstr ""
 msgid "Luxembourg Inspire Roads"
 msgstr ""
 
+msgid "Luxembourg Inspire Water"
+msgstr ""
+
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -15484,9 +15661,15 @@ msgstr ""
 msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgstr ""
+
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
+msgid "Geoportal 2: ISOK hillshade"
+msgstr ""
+
 msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
@@ -15496,16 +15679,28 @@ msgstr ""
 msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
+msgid "Bytom: Fotoplan 2014 (aerial image)"
+msgstr ""
+
 msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
 msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
+msgid "Częstochowa: Budynki (buildings)"
+msgstr ""
+
 msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgstr ""
+
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgstr ""
+
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
 msgid "Gliwice: Budynki (buildings)"
@@ -15514,9 +15709,45 @@ msgstr ""
 msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Katowice: Budynki (buildings)"
+msgstr ""
+
+msgid "Łódź: Budynki (buildings)"
+msgstr ""
+
 msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Powiat dębicki: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat lubaczowski: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat łańcucki: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat poznański: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgstr ""
+
+msgid "Powiat rzeszowski: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgstr ""
+
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgstr ""
+
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
 msgstr ""
 
@@ -15529,9 +15760,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -15661,6 +15901,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -15676,7 +15931,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -16014,6 +16269,11 @@ msgstr ""
 "Menerapkan baris perintah dan memungkinkan untuk membuat perintah Anda. "
 "Lihat link untuk perintah standar (busur, lingkaran dll.)"
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -16112,13 +16372,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-"Plugin percobaan ini memungkinkan JOSM untuk menyimpan tile cache dalam file "
-"basis data, tidak dalam direktori cache besar"
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -16189,7 +16442,7 @@ msgstr ""
 "membuat, menutup, membatalkan, membuka kembali dan komentar laporan bug "
 "dengan menggunakan plugin ini."
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -16207,9 +16460,6 @@ msgstr "Gabungkan bagian garis yang bertampalan."
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr "Tidak menambahkan tikungan kiri untuk pengaturan 4 atau 5 garis"
 
-msgid "Simplifies download from different read-only APIs."
-msgstr "Menyederhanakan unduhan dari read-only API yang berbeda."
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 "Memungkinkan untuk atribut tag ke semua objek dalam setiap area yang dipilih "
@@ -16304,6 +16554,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr "Plugin menyederhanakan peta dan mengedit dari rute transportasi umum"
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr "membuat relasi dan multipoligon dan mengedit panel."
 
@@ -16347,6 +16605,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr "mengedit fitur dari OpenSeaMap"
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -16442,9 +16703,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr "Memungkinkan mencari untuk mengimport titik dari berkas gpx."
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr "Pilih urutan bukan percabangan yang terhubung dengan garis"
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -16852,6 +17110,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -16876,10 +17142,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -16896,6 +17158,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -16912,11 +17178,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -16932,6 +17210,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -16944,6 +17226,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -16971,6 +17257,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr "Biaya"
 
@@ -17362,6 +17660,9 @@ msgstr "penyambung jalan tersier"
 msgid "Unclassified"
 msgstr "Tidak dapat dikenal"
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr "Lewati Tempat"
 
@@ -17438,6 +17739,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr "Jalan (Tipe tidak dikenal)"
 
@@ -17984,6 +18288,12 @@ msgstr "Kecepatan Kamera"
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -18173,8 +18483,13 @@ msgstr "Barisan Tiang"
 msgid "Avalanche Protector"
 msgstr "Pelindung longsor"
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
-msgstr "Air"
+msgstr ""
 
 msgid "Drain"
 msgstr "Saluran"
@@ -18226,6 +18541,10 @@ msgstr "Reservoir"
 msgid "Covered Reservoir"
 msgstr "Ditutupi Waduk"
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -18367,6 +18686,120 @@ msgstr ""
 msgid "public"
 msgstr "publik"
 
+msgid "Marine Fuel"
+msgstr ""
+
+msgid "Agip"
+msgstr "Agip"
+
+msgid "Aral"
+msgstr "Aral"
+
+msgid "Avia"
+msgstr "Avia"
+
+msgid "BP"
+msgstr "BP"
+
+msgid "Chevron"
+msgstr "Chevron"
+
+msgid "Citgo"
+msgstr "Citgo"
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr "Esso"
+
+msgid "Exxon"
+msgstr "Exxon"
+
+msgid "Gulf"
+msgstr "Gulf"
+
+msgid "Mobil"
+msgstr "Mobil"
+
+msgid "OMV"
+msgstr "OMV"
+
+msgid "Petro-Canada"
+msgstr "Petro-Canada"
+
+msgid "Pioneer"
+msgstr "Pioneer"
+
+msgid "Q8"
+msgstr "Q8"
+
+msgid "Repsol"
+msgstr "Repsol"
+
+msgid "Shell"
+msgstr "Shell"
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr "Statoil"
+
+msgid "Sunoco"
+msgstr "Sunoco"
+
+msgid "Tamoil"
+msgstr "Tamoil"
+
+msgid "Texaco"
+msgstr "Texaco"
+
+msgid "Total"
+msgstr "Total"
+
+msgid "Independent"
+msgstr "Mandiri"
+
+msgid "Fuel types:"
+msgstr "Tipe bahan bakar"
+
+msgid "Diesel"
+msgstr "Diesel"
+
+msgid "Bio Diesel"
+msgstr "Bio Diesel"
+
+msgid "Octane 80"
+msgstr "80 Oktan"
+
+msgid "Octane 91"
+msgstr "Octane 91"
+
+msgid "Octane 92"
+msgstr "92 Oktan"
+
+msgid "Octane 95"
+msgstr "Octane 95"
+
+msgid "Octane 98"
+msgstr "Octane 98"
+
+msgid "Octane 100"
+msgstr "Octane 100"
+
+msgid "E10 (10% Ethanol mix)"
+msgstr "E10 (10% campuran Ethanol)"
+
+msgid "E85 (85% Ethanol mix)"
+msgstr "E85 (85% campuran Ethanol)"
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr "LPG (Liquefied petroleum gas)"
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr "CNG (Compressed Natural Gas)"
+
 msgid "Pier"
 msgstr "Tembok Laut"
 
@@ -18483,6 +18916,9 @@ msgstr "Penyangga Berhenti"
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr "Jalur Aerial"
 
@@ -18606,134 +19042,23 @@ msgstr ""
 msgid "Fuel"
 msgstr "Bahan Bakar"
 
-msgid "Agip"
-msgstr "Agip"
+msgid "With shop"
+msgstr "Dengan berhenti"
 
-msgid "Aral"
-msgstr "Aral"
+msgid "convenience"
+msgstr "kemudahan"
 
-msgid "Avia"
-msgstr "Avia"
+msgid "kiosk"
+msgstr "kios"
 
-msgid "BP"
-msgstr "BP"
+msgid "Diesel (Gas To Liquid - ultimate diesel)"
+msgstr "Diesel (Gas To Liquid - ultimate diesel)"
 
-msgid "Chevron"
-msgstr "Chevron"
+msgid "Diesel for Heavy Good Vehicles"
+msgstr "Diesel untuk Kendaraan Berat"
 
-msgid "Citgo"
-msgstr "Citgo"
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr "Esso"
-
-msgid "Exxon"
-msgstr "Exxon"
-
-msgid "Gulf"
-msgstr "Gulf"
-
-msgid "Mobil"
-msgstr "Mobil"
-
-msgid "OMV"
-msgstr "OMV"
-
-msgid "Petro-Canada"
-msgstr "Petro-Canada"
-
-msgid "Pioneer"
-msgstr "Pioneer"
-
-msgid "Q8"
-msgstr "Q8"
-
-msgid "Repsol"
-msgstr "Repsol"
-
-msgid "Shell"
-msgstr "Shell"
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr "Statoil"
-
-msgid "Sunoco"
-msgstr "Sunoco"
-
-msgid "Tamoil"
-msgstr "Tamoil"
-
-msgid "Texaco"
-msgstr "Texaco"
-
-msgid "Total"
-msgstr "Total"
-
-msgid "Independent"
-msgstr "Mandiri"
-
-msgid "With shop"
-msgstr "Dengan berhenti"
-
-msgid "convenience"
-msgstr "kemudahan"
-
-msgid "kiosk"
-msgstr "kios"
-
-msgid "Fuel types:"
-msgstr "Tipe bahan bakar"
-
-msgid "Diesel"
-msgstr "Diesel"
-
-msgid "Bio Diesel"
-msgstr "Bio Diesel"
-
-msgid "Diesel (Gas To Liquid - ultimate diesel)"
-msgstr "Diesel (Gas To Liquid - ultimate diesel)"
-
-msgid "Diesel for Heavy Good Vehicles"
-msgstr "Diesel untuk Kendaraan Berat"
-
-msgid "Octane 80"
-msgstr "80 Oktan"
-
-msgid "Octane 91"
-msgstr "Octane 91"
-
-msgid "Octane 92"
-msgstr "92 Oktan"
-
-msgid "Octane 95"
-msgstr "Octane 95"
-
-msgid "Octane 98"
-msgstr "Octane 98"
-
-msgid "Octane 100"
-msgstr "Octane 100"
-
-msgid "E10 (10% Ethanol mix)"
-msgstr "E10 (10% campuran Ethanol)"
-
-msgid "E85 (85% Ethanol mix)"
-msgstr "E85 (85% campuran Ethanol)"
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr "LPG (Liquefied petroleum gas)"
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr "CNG (Compressed Natural Gas)"
-
-msgid "1/25 mix (mofa/moped)"
-msgstr "Campuran 1/25 (mofa/mofed)"
+msgid "1/25 mix (mofa/moped)"
+msgstr "Campuran 1/25 (mofa/mofed)"
 
 msgid "1/50 mix (mofa/moped)"
 msgstr "Campuran 1/50 (mofa/mofed)"
@@ -18950,9 +19275,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr "#CD853F"
 
-msgid "route segment"
-msgstr "segmen rute"
-
 msgid "stop position"
 msgstr "Hentikan posisi"
 
@@ -18971,6 +19293,9 @@ msgstr "platform (keluar)"
 msgid "platform (entry only)"
 msgstr "platform (masuk)"
 
+msgid "route segment"
+msgstr "segmen rute"
+
 msgid "Route Master"
 msgstr ""
 
@@ -19173,6 +19498,12 @@ msgstr "Hotel"
 msgid "Stars"
 msgstr "Bintang"
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr "Motel"
 
@@ -19263,6 +19594,9 @@ msgstr "sandwich"
 msgid "sushi"
 msgstr "sushi"
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr "Microbrewery"
 
@@ -19477,6 +19811,9 @@ msgstr "Sauna"
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr "Rumah Bordil"
 
@@ -19964,8 +20301,8 @@ msgstr "Tunjukkan tekanan barometer"
 msgid "Shows humidity"
 msgstr "Tunjukkan kelembaban"
 
-msgid "Recycling"
-msgstr "Daur Ulang"
+msgid "Recycling Container"
+msgstr ""
 
 msgid "Batteries"
 msgstr "Baterai"
@@ -19973,20 +20310,47 @@ msgstr "Baterai"
 msgid "Cans"
 msgstr "Kaleng"
 
+msgid "Cardboard"
+msgstr ""
+
+msgid "Electrical Appliances"
+msgstr ""
+
 msgid "Glass"
 msgstr "Kaca"
 
+msgid "Glass Bottles"
+msgstr ""
+
+msgid "Green Waste"
+msgstr ""
+
 msgid "Paper"
 msgstr "Kertas"
 
+msgid "Plastic"
+msgstr ""
+
+msgid "Plastic Bottles"
+msgstr ""
+
+msgid "Plastic Packaging"
+msgstr ""
+
 msgid "Scrap Metal"
 msgstr "Besi Tua"
 
-msgid "container"
-msgstr "wadah"
+msgid "Shoes"
+msgstr "Sepatu"
+
+msgid "Small Appliances"
+msgstr ""
+
+msgid "Waste"
+msgstr ""
 
-msgid "centre"
-msgstr "pusat"
+msgid "Recycling Centre"
+msgstr ""
 
 msgid "Waste Basket/Trash Can"
 msgstr ""
@@ -20189,6 +20553,9 @@ msgstr "Panah"
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr "Panjat Tebing"
 
@@ -20364,12 +20731,18 @@ msgstr "Baseball"
 msgid "Basketball"
 msgstr "Bola Basket"
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr "Bola Voli"
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr "Golf"
 
@@ -20385,14 +20758,14 @@ msgstr ""
 msgid "Cricket"
 msgstr "Kriket"
 
-msgid "Cricket Nets"
-msgstr "Jaring Kriket"
-
 msgid "Croquet"
 msgstr "Croquet"
 
-msgid "Hockey"
-msgstr "Hoki"
+msgid "Field Hockey"
+msgstr ""
+
+msgid "Ice Hockey"
+msgstr ""
 
 msgid "Pelota"
 msgstr "Pelota"
@@ -20415,9 +20788,6 @@ msgstr ""
 msgid "Motocross"
 msgstr "Motocross"
 
-msgid "Safety Training"
-msgstr "Pelatihan keamanan"
-
 msgid "Model Aerodrome"
 msgstr "Model lapangan terbang"
 
@@ -20436,9 +20806,6 @@ msgstr ""
 msgid "RC Car"
 msgstr "mobil RC"
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr "Buatan Manusia"
 
@@ -20511,6 +20878,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -21831,9 +22206,6 @@ msgstr ""
 msgid "Boutique"
 msgstr "Butik"
 
-msgid "Shoes"
-msgstr "Sepatu"
-
 msgid "Outdoor"
 msgstr "Outdoor"
 
@@ -22846,12 +23218,12 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
-msgstr "Nomor Fax"
-
 msgid "Email Address"
 msgstr "Alamat Email"
 
+msgid "Fax Number"
+msgstr "Nomor Fax"
+
 msgid "Image"
 msgstr "Gambar"
 
@@ -23278,6 +23650,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -23302,6 +23677,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -23362,6 +23749,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -23452,9 +23842,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -23834,6 +24233,9 @@ msgstr "Menambahkan titik yang tetap dengan klik"
 msgid "Add fixed points on spacebar"
 msgstr "menambah titik yang telah diperbaiki pada spacebar"
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr "Menggambar hanya poligon yang tertutup"
 
@@ -23895,9 +24297,6 @@ msgstr "Menggambar garis dengan mouse"
 msgid "min distance={0} px ({1} m)"
 msgstr "jarak min={0} px ({1} m)"
 
-msgid "Convert way to FastDraw line"
-msgstr "Konversi garis ke garis FastDraw"
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr "Eps={0}, {1} titik, {2} p/km"
 
@@ -24734,47 +25133,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -24783,10 +25191,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
+msgstr ""
+
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -25436,6 +25856,9 @@ msgstr "Atur ulang offset"
 msgid "Reset offset (only vector images)"
 msgstr "Atur ulang offset (hanya gambar vektor)"
 
+msgid "Blank Layer"
+msgstr "Layer Kosong"
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr "layer WMS ({0}), {1} indeks(s) dimuat"
 
@@ -26801,206 +27224,512 @@ msgstr "lahan"
 msgid "Maximum number of segments per way"
 msgstr "Nomor maksimal dari segmen per garis"
 
-msgid "Maximum number of nodes in initial trace"
-msgstr "Maksimul angka dari titik/node di penggambaran awal"
+msgid "Maximum number of nodes in initial trace"
+msgstr "Maksimul angka dari titik/node di penggambaran awal"
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr "Maksimum nilai abu-abu yang dihitung sebagai air (0-255)"
+
+msgid "Line simplification accuracy (degrees)"
+msgstr "Akurasi simplifikasi garis (derajat)"
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr "Resolusi dari kotak gambar Landsat (pixel per derajat)"
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr "Ukuran dari kotak gambar Landsat (pixel)"
+
+msgid "Shift all traces to east (degrees)"
+msgstr "Memindahkan semua penggambaran ke timur (derajat)"
+
+msgid "Shift all traces to north (degrees)"
+msgstr "Memindahkan semua penggambaran ke Utara (derajat)"
+
+msgid "Direction to search for land"
+msgstr "Arah pencarian untuk lahan"
+
+msgid "Tag ways as"
+msgstr "Tag way/garis sebagai"
+
+msgid "WMS Layer"
+msgstr "WMS Layer"
+
+msgid "Maximum cache size (MB)"
+msgstr "Maksimum ukuran cache (MB)"
+
+msgid "Maximum cache age (days)"
+msgstr "Maksimum umur cache (hari)"
+
+msgid "Source text"
+msgstr "sumber teks"
+
+msgid "Lakewalker Plugin Preferences"
+msgstr "Pengaturan plugin Lakewalker"
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr "Sebuah plugin untuk menggambar badan sungai pada citra Landsat"
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+"Angka maksimum dari segmen yang diperbolehkan di setiap garis/way yang "
+"dibuat. Pengaturan awal adalah 250."
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+"Angka maksimum dari titik yang dibuat sebelum diselesaikan (sebelum "
+"menyederhanakan garis). Pengaturan awal adalah 50000."
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+"Nilai abu-abu maksimum yang bisa diterima sebagai air (sesuai dengan data "
+"Landsat IR-1). Bisa dalam kisaran 0-255. Pengaturan awal adalah 90."
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+"Akurasi dari simplifikasi garis Douglas-Peucker, diukur didalam derajat. "
+"<br>Nilai kecil memberikan node/titik yang lebih dan garis yang lebih "
+"akurat. Pengaturan awal adalah 0.0003."
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+"Resolusi dari gambar Landsat, diukur dalam pixel per derajat. Pengaturan "
+"awal adalah 4000."
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+"Ukuran dari satu indeks landsat, diukur dalam pixel. Pengaturan awal 2000"
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+"Pergeseran (offset) semua titik di arah Timur (derajat). Pengaturan awal "
+"adalah 0."
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+"Pergeseran (offset) semua titik di arah Utara (derajat). Pengaturan awal "
+"adalah 0."
+
+msgid "Direction to search for land. Default east."
+msgstr "Arah pencarian untuk lahan. Pengaturan awal adalah Timur."
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+"Tag garis/way sebagai air, garis pantai, tanah atau tidak ada. Pengaturan "
+"awal adalah air."
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+"Layer WMS digunakan untuk melacak lawan. Pengaturan standar adalah IR1."
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+"Ukuran maksimal dari setiap direktori memori sementara dalam byte. Standar "
+"adalah 300MB"
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+"Umur maksimal dari setiap file memori sementara dalam hari. Standar adalah "
+"100"
+
+msgid "Data source text. Default is Landsat."
+msgstr "Sumber data teks. Standar adalah Landsat."
+
+msgid "Downloading image tile..."
+msgstr "Mendownload grid gambar..."
+
+msgid "Could not acquire image"
+msgstr "Tidak bisa mendapatkan gambar"
+
+msgid "Connection Failed"
+msgstr "Koneksi gagal"
+
+msgid "Not connected"
+msgstr "Tidak terhubung"
+
+msgid "Connecting"
+msgstr "Menghubungkan"
+
+msgid "Connected"
+msgstr "Terhubung"
+
+msgid "no name"
+msgstr "tanpa nama"
+
+msgid "Live GPS"
+msgstr "GPS hidup"
+
+msgid "Show GPS data."
+msgstr "Tunjukkan data GPS"
+
+msgid "Status"
+msgstr "Status"
+
+msgid "Way Info"
+msgstr "Info Way/Garis"
+
+msgid "Speed"
+msgstr "Kecepatan"
+
+msgid "Course"
+msgstr "Kursus"
+
+msgid "LiveGPS layer"
+msgstr "Layer LiveGPS"
+
+msgid "Capture GPS Track"
+msgstr "Mengambil trek GPS"
+
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgstr ""
+"Terhubung ke server gpsd dan tampilkan posisi saat ini di layer LiveGPS"
+
+msgid "Center Once"
+msgstr "satu pusat"
+
+msgid "Center the LiveGPS layer to current position."
+msgstr "Memusatkan layer LiveGPS ke posisi saat ini."
+
+msgid "Auto-Center"
+msgstr "Pemusatan secara otomatis"
+
+msgid "Continuously center the LiveGPS layer to current position."
+msgstr "Secara berkelanjutan memusatkan layer LiveGPS ke posisi saat ini"
+
+msgid "Open MapDust"
+msgstr "Membuka MapDust"
+
+msgid "MapDust bug reports"
+msgstr "MapDust bug reports"
+
+msgid "Activates the MapDust bug reporter plugin"
+msgstr "Mengaktifkan plugin MapDust bug reporter"
+
+msgid "Missing input data"
+msgstr "Input data hilang"
+
+msgid "Mapillary Images"
+msgstr ""
+
+msgid "Mapillary layer"
+msgstr ""
+
+msgid "Total images:"
+msgstr ""
+
+msgid "images"
+msgstr ""
+
+msgid "Mapillary"
+msgstr ""
+
+msgid "Create Mapillary layer"
+msgstr ""
+
+msgid "Start Mapillary layer"
+msgstr ""
+
+msgid "Download Mapillary images in current view"
+msgstr ""
+
+msgid "Export pictures"
+msgstr ""
+
+msgid "Export Mapillary pictures"
+msgstr ""
+
+msgid "Export images"
+msgstr ""
+
+msgid "Import pictures"
+msgstr ""
+
+msgid "Import local pictures"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer"
+msgstr ""
+
+msgid "Select pictures"
+msgstr ""
+
+msgid "Import pictures into sequence"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer in a sequence"
+msgstr ""
+
+msgid "Join mode"
+msgstr ""
+
+msgid "Join/unjoin pictures"
+msgstr ""
+
+msgid "Join Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures"
+msgstr ""
+
+msgid "Upload Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures."
+msgstr ""
+
+msgid "Walk mode"
+msgstr ""
+
+msgid "Start walk mode"
+msgstr ""
+
+msgid "Zoom to selected image"
+msgstr ""
+
+msgid "Zoom to the currently selected Mapillary image"
+msgstr ""
+
+msgid "Uploaded {0} images"
+msgstr ""
+
+msgid "Approve upload on the website"
+msgstr ""
+
+msgid "View in website"
+msgstr ""
+
+msgid "Copy key"
+msgstr ""
+
+msgid "Copy key tag"
+msgstr ""
+
+msgid "Edit on website"
+msgstr ""
+
+msgid "Export all images"
+msgstr ""
+
+msgid "Export selected sequence"
+msgstr ""
+
+msgid "Export selected images"
+msgstr ""
+
+msgid "Rewrite imported images"
+msgstr ""
+
+msgid "Select a folder"
+msgstr ""
+
+msgid "Explore"
+msgstr ""
+
+msgid "Select a directory"
+msgstr ""
+
+msgid "Speed limit"
+msgstr ""
+
+msgid "Give way"
+msgstr ""
+
+msgid "No entry"
+msgstr ""
+
+msgid "Intersection danger"
+msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
-msgstr "Maksimum nilai abu-abu yang dihitung sebagai air (0-255)"
+msgid "Mandatory direction (any)"
+msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
-msgstr "Akurasi simplifikasi garis (derajat)"
+msgid "No turn"
+msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
-msgstr "Resolusi dari kotak gambar Landsat (pixel per derajat)"
+msgid "Uneven road"
+msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
-msgstr "Ukuran dari kotak gambar Landsat (pixel)"
+msgid "No parking"
+msgstr ""
 
-msgid "Shift all traces to east (degrees)"
-msgstr "Memindahkan semua penggambaran ke timur (derajat)"
+msgid "No overtaking"
+msgstr ""
 
-msgid "Shift all traces to north (degrees)"
-msgstr "Memindahkan semua penggambaran ke Utara (derajat)"
+msgid "Pedestrian crossing"
+msgstr ""
 
-msgid "Direction to search for land"
-msgstr "Arah pencarian untuk lahan"
+msgid "Years"
+msgstr ""
 
-msgid "Tag ways as"
-msgstr "Tag way/garis sebagai"
+msgid "Months"
+msgstr ""
 
-msgid "WMS Layer"
-msgstr "WMS Layer"
+msgid "Days"
+msgstr ""
 
-msgid "Maximum cache size (MB)"
-msgstr "Maksimum ukuran cache (MB)"
+msgid "Mapillary filter"
+msgstr ""
 
-msgid "Maximum cache age (days)"
-msgstr "Maksimum umur cache (hari)"
+msgid "Open Mapillary filter dialog"
+msgstr ""
 
-msgid "Source text"
-msgstr "sumber teks"
+msgid "Downloaded images"
+msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
-msgstr "Pengaturan plugin Lakewalker"
+msgid "Only images with signs"
+msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
-msgstr "Sebuah plugin untuk menggambar badan sungai pada citra Landsat"
+msgid "Choose signs"
+msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Mapillary history"
 msgstr ""
-"Angka maksimum dari segmen yang diperbolehkan di setiap garis/way yang "
-"dibuat. Pengaturan awal adalah 250."
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Open Mapillary history dialog"
 msgstr ""
-"Angka maksimum dari titik yang dibuat sebelum diselesaikan (sebelum "
-"menyederhanakan garis). Pengaturan awal adalah 50000."
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Open Mapillary window"
 msgstr ""
-"Nilai abu-abu maksimum yang bisa diterima sebagai air (sesuai dengan data "
-"Landsat IR-1). Bisa dalam kisaran 0-255. Pengaturan awal adalah 90."
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Mapillary dialog"
 msgstr ""
-"Akurasi dari simplifikasi garis Douglas-Peucker, diukur didalam derajat. "
-"<br>Nilai kecil memberikan node/titik yang lebih dan garis yang lebih "
-"akurat. Pengaturan awal adalah 0.0003."
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary main dialog"
 msgstr ""
-"Resolusi dari gambar Landsat, diukur dalam pixel per derajat. Pengaturan "
-"awal adalah 4000."
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Next picture"
 msgstr ""
-"Ukuran dari satu indeks landsat, diukur dalam pixel. Pengaturan awal 2000"
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Shows the next picture in the sequence"
 msgstr ""
-"Pergeseran (offset) semua titik di arah Timur (derajat). Pengaturan awal "
-"adalah 0."
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Previous picture"
 msgstr ""
-"Pergeseran (offset) semua titik di arah Utara (derajat). Pengaturan awal "
-"adalah 0."
 
-msgid "Direction to search for land. Default east."
-msgstr "Arah pencarian untuk lahan. Pengaturan awal adalah Timur."
+msgid "Shows the previous picture in the sequence"
+msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Jump to red"
 msgstr ""
-"Tag garis/way sebagai air, garis pantai, tanah atau tidak ada. Pengaturan "
-"awal adalah air."
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
-"Layer WMS digunakan untuk melacak lawan. Pengaturan standar adalah IR1."
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to blue"
 msgstr ""
-"Ukuran maksimal dari setiap direktori memori sementara dalam byte. Standar "
-"adalah 300MB"
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
-"Umur maksimal dari setiap file memori sementara dalam hari. Standar adalah "
-"100"
 
-msgid "Data source text. Default is Landsat."
-msgstr "Sumber data teks. Standar adalah Landsat."
+msgid "Stops the walk."
+msgstr ""
 
-msgid "Downloading image tile..."
-msgstr "Mendownload grid gambar..."
+msgid "Play"
+msgstr ""
 
-msgid "Could not acquire image"
-msgstr "Tidak bisa mendapatkan gambar"
+msgid "Continues with the paused walk."
+msgstr ""
 
-msgid "Connection Failed"
-msgstr "Koneksi gagal"
+msgid "Pause"
+msgstr ""
 
-msgid "Not connected"
-msgstr "Tidak terhubung"
+msgid "Pauses the walk."
+msgstr ""
 
-msgid "Connecting"
-msgstr "Menghubungkan"
+msgid "Reverse buttons position when displaying images."
+msgstr ""
 
-msgid "Connected"
-msgstr "Terhubung"
+msgid "Display hour when the picture was taken"
+msgstr ""
 
-msgid "no name"
-msgstr "tanpa nama"
+msgid "Use 24 hour format"
+msgstr ""
 
-msgid "Live GPS"
-msgstr "GPS hidup"
+msgid "Move to picture''s location with next/previous buttons"
+msgstr ""
 
-msgid "Show GPS data."
-msgstr "Tunjukkan data GPS"
+msgid "Download mode: "
+msgstr ""
 
-msgid "Status"
-msgstr "Status"
+msgid "Upload selected sequence"
+msgstr ""
 
-msgid "Way Info"
-msgstr "Info Way/Garis"
+msgid "Delete after upload"
+msgstr ""
 
-msgid "Speed"
-msgstr "Kecepatan"
+msgid "Wait for full quality pictures"
+msgstr ""
 
-msgid "Course"
-msgstr "Kursus"
+msgid "Follow selected image"
+msgstr ""
 
-msgid "LiveGPS layer"
-msgstr "Layer LiveGPS"
+msgid "Go forward"
+msgstr ""
 
-msgid "Capture GPS Track"
-msgstr "Mengambil trek GPS"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
-"Terhubung ke server gpsd dan tampilkan posisi saat ini di layer LiveGPS"
 
-msgid "Center Once"
-msgstr "satu pusat"
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Center the LiveGPS layer to current position."
-msgstr "Memusatkan layer LiveGPS ke posisi saat ini."
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Auto-Center"
-msgstr "Pemusatan secara otomatis"
+msgid "2 images unjoined"
+msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
-msgstr "Secara berkelanjutan memusatkan layer LiveGPS ke posisi saat ini"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
+msgstr ""
 
-msgid "Open MapDust"
-msgstr "Membuka MapDust"
+msgid "Downloading"
+msgstr ""
 
-msgid "MapDust bug reports"
-msgstr "MapDust bug reports"
+msgid "Select mode"
+msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
-msgstr "Mengaktifkan plugin MapDust bug reporter"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
+msgstr ""
 
-msgid "Missing input data"
-msgstr "Input data hilang"
+msgid "Downloading Mapillary images"
+msgstr ""
 
-msgid "Mapillary"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "No images found"
 msgstr ""
 
-msgid "Export"
-msgstr "Export"
+msgid "Finished upload"
+msgstr ""
+
+msgid "Uploading: {0}"
+msgstr ""
 
 msgid "Measured values"
 msgstr "Nilai ukuran"
@@ -27021,6 +27750,9 @@ msgstr "Pemilihan panjang"
 msgid "Selection Area"
 msgstr "Pilih area"
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr "Sudut"
 
@@ -27086,49 +27818,6 @@ msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 "Tidak dapat menemukan melalui nodes/titik-titik. Harap periksa pilihan anda"
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-"Query XAPI, e.g., '''' (untuk mengunduh semua data), ''[highway=*]'', atau "
-"''[[network=VRR][ref=603|613]''"
-
-msgid "Download from OSM mirror..."
-msgstr "Download dari mirror OSM"
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr "Query XAPI ini sepertinya tidak valid. harap diperiksa dua kali"
-
-msgid "Object type: "
-msgstr "Tipe objek: "
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr "Query XAPI: "
-
-msgid "Download from Overpass API ..."
-msgstr "Download dari Overpass API ..."
-
-msgid "Download map data from Overpass API server."
-msgstr "Download data peta dari server API Overpass."
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr "Pilih URL OSM mirror"
-
-msgid "Select OSM mirror URL to download from."
-msgstr "Pilih URL OSM mirror untuk mengunduh dari"
-
-msgid "Base URL"
-msgstr "URL dasar"
-
-msgid "Enforce meta data"
-msgstr "Memunculkan secara paksa meta data"
-
 msgid "About Plugin"
 msgstr "Tentang plugin"
 
@@ -27373,6 +28062,9 @@ msgstr "Diff"
 msgid "Perform diff between current data set and existing OSM data."
 msgstr "Lakukan perbedaan antara set data saat ini dan data OSM yang ada."
 
+msgid "Tools"
+msgstr "Alat"
+
 msgid "Open tools menu for this data."
 msgstr "Buka menu tools untuk data ini."
 
@@ -28637,6 +29329,27 @@ msgstr "Transportasi Umum: mengaktifkan waypoint"
 msgid "Public Transport: Edit waypoint name"
 msgstr "Transportasi Umum: Edit nama waypoint"
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr "Toolbox relasi"
 
@@ -28809,6 +29522,9 @@ msgstr "Perubahan yang telah dikembalikan"
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr "Hilang target penggabungan untuk {0} dengan id {1}"
 
@@ -28818,6 +29534,9 @@ msgstr "Sejarah objek"
 msgid "History reverter"
 msgstr "Sejarah kembali"
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr "menyiapkan sejarah data"
 
@@ -29007,6 +29726,9 @@ msgstr ""
 "Pengaturan \"{0}\" hilang/tidak ditemukan. Tidak dapat menginisialisasi "
 "SdsApi"
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -29208,6 +29930,39 @@ msgstr "Menggabungkan ambang batas Node/titik terdekat"
 msgid "SeaMap Editor"
 msgstr "Editor SeaMap"
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -29217,6 +29972,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr "Export"
+
 msgid "AutoSave LiveData"
 msgstr "AutoSave LiveData"
 
@@ -29463,9 +30221,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -31139,9 +31894,6 @@ msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 "Pencarian setelah waypoint. Klik dan gerakkan tampilan peta ke waypoint"
 
-msgid "Way Select"
-msgstr "Way/garis dipilih"
-
 msgid "Add names from Wikipedia"
 msgstr "Menambahkan nama dari Wikipedia"
 
diff --git a/i18n/po/is.po b/i18n/po/is.po
index 2d5b7f5..10e446e 100644
--- a/i18n/po/is.po
+++ b/i18n/po/is.po
@@ -7,16 +7,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
-"PO-Revision-Date: 2013-03-30 13:49+0000\n"
-"Last-Translator: Pjetur G. Hjaltason <pjetur at pjetur.net>\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
+"PO-Revision-Date: 2015-10-08 05:22+0000\n"
+"Last-Translator: Stefán Örvar Sigmundsson <stefan.orvar.sigmundsson at emi.is>\n"
 "Language-Team: Icelandic <is at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:44+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:46+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: is\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -97,21 +97,18 @@ msgstr ""
 msgid "Updating user interface"
 msgstr ""
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "Hunsa gallaða skráarslóð: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "Hunsa gallaða vefslóð: \"{0}\""
 
 msgid "Warning"
 msgstr "Aðvörun"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "Hunsa gallaða skráarslóð: \"{0}\""
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "Hunsa gallaða vefslóð: \"{0}\""
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -217,7 +214,7 @@ msgid "No target layers"
 msgstr ""
 
 msgid "Select"
-msgstr "Val"
+msgstr "Velja"
 
 msgid ""
 "Set the selected elements on the map to the selected items in the list above."
@@ -436,7 +433,7 @@ msgid "You must select at least one way."
 msgstr ""
 
 msgid "Delete"
-msgstr "Fjarlægja"
+msgstr "Eyða"
 
 msgid "Delete selected objects."
 msgstr "Eyða völdum hlutum."
@@ -447,6 +444,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr "Dreifa völdum hnútum á jöfnu millibili á línu."
 
@@ -1032,6 +1032,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr "Líma"
 
@@ -1959,15 +1983,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr ""
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -1989,6 +2004,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2107,9 +2131,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2323,9 +2344,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr "regluleg segð"
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2539,6 +2566,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2583,6 +2614,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3036,6 +3070,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3153,10 +3205,44 @@ msgctxt "compass"
 msgid "E"
 msgstr "A"
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "HTTP error {0} when loading tiles"
+msgstr ""
+
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3346,6 +3432,12 @@ msgstr ""
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3373,13 +3465,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -3995,9 +4087,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -4007,12 +4096,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4193,13 +4294,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4397,6 +4498,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4612,43 +4714,54 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
-msgstr "Skrá"
+msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
-msgstr "Sýn"
+msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
-msgstr "Tól"
+msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
-msgstr "Val"
+msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
-msgstr "Forstillingar"
+msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
-msgid "Menu: {0}"
+msgctxt "menu"
+msgid "Help"
 msgstr ""
 
-msgid "Save and load the current session (list of layers, etc.)"
+msgid "Menu: {0}"
 msgstr ""
 
 msgid "Edit toolbar"
@@ -4672,8 +4785,9 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
-msgstr "Hljóð"
+msgstr ""
 
 msgid "Do not hide toolbar"
 msgstr ""
@@ -4794,58 +4908,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
+msgid " ({0})"
 msgstr ""
 
-msgid "Pos."
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "Role"
-msgstr "Hlutverk"
-
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5274,6 +5346,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr "Hlutverk"
+
 msgid "Primitive"
 msgstr ""
 
@@ -5514,6 +5589,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5660,6 +5738,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5763,7 +5876,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5891,6 +6004,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5900,43 +6018,74 @@ msgstr ""
 msgid "unknown"
 msgstr "óskilgreint"
 
-msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+msgid "Enter the coordinates for the new node."
 msgstr ""
 
-msgid "Projected coordinates:"
+msgid ""
+"You can separate longitude and latitude with space, comma or semicolon."
 msgstr ""
 
 msgid ""
-"Enter easting and northing (x and y) separated by space, comma or semicolon."
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
 msgstr ""
 
-msgid "Lat/Lon"
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
 msgstr ""
 
-msgid "East/North"
+msgid "Coordinate value can be in one of three formats:"
 msgstr ""
 
-msgid "Please enter a GPS coordinates"
+msgid "<i>degrees</i><tt>°</tt>"
 msgstr ""
 
-msgid "Please enter a Easting and Northing"
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
 msgstr ""
 
-msgid "Toggle visibility of layer: {0}"
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
 msgstr ""
 
-msgid "Open a list of all loaded layers."
-msgstr "Sýna lista yfir öll lög."
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
+msgstr ""
+
+msgid "Projected coordinates:"
+msgstr ""
+
+msgid ""
+"Enter easting and northing (x and y) separated by space, comma or semicolon."
+msgstr ""
+
+msgid "Lat/Lon"
+msgstr ""
+
+msgid "East/North"
+msgstr ""
+
+msgid "Please enter a GPS coordinates"
+msgstr ""
+
+msgid "Please enter a Easting and Northing"
+msgstr ""
+
+msgid "Toggle visibility of layer: {0}"
+msgstr ""
+
+msgid "Open a list of all loaded layers."
+msgstr "Sýna lista yfir öll lög."
 
 msgid "Delete the selected layers."
 msgstr ""
@@ -5956,6 +6105,12 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr ""
 
@@ -6085,6 +6240,12 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
+msgid "Mini map"
+msgstr ""
+
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
 msgid "List of notes"
 msgstr ""
 
@@ -6143,10 +6304,15 @@ msgstr ""
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "Sláið inn auðkenni hlutarins sem á að sækja"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6175,6 +6341,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr "Vensl: {0}"
 
+msgid "Selection"
+msgstr "Val"
+
 msgid "Open a selection list window."
 msgstr "Opna vallistann."
 
@@ -6267,6 +6436,12 @@ msgstr "Opna athugunarglugga."
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr "Laga"
 
@@ -6863,6 +7038,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6954,14 +7135,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7134,6 +7314,12 @@ msgstr "Raða stöknum"
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7672,6 +7858,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr "Hnútur {0}"
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8524,6 +8713,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] "{0} hlut verður eytt:"
 msgstr[1] "{0} hlutum verður eytt:"
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr "Breyta upplausn"
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr "Sérsníða liti"
 
@@ -8577,6 +8866,9 @@ msgstr "Vista GPX skrá"
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8597,7 +8889,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8680,241 +8972,126 @@ msgstr ""
 msgid "Save OSM file"
 msgstr "Vista OSM skrá"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
+msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
+msgid "Validation errors"
+msgstr "Villur sem fundust við athugun"
 
-msgid "Auto Zoom"
-msgstr ""
+msgid "No validation errors"
+msgstr "Engar villur fundust við athugun"
 
-msgid "Auto load tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
-msgid "Show Errors"
+msgid ""
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Load Tile"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Show Tile Info"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Load All Tiles"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Load All Error Tiles"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Increase zoom"
+msgid "Try Again"
 msgstr ""
 
-msgid "Decrease zoom"
+msgid "No images could be matched!"
 msgstr ""
 
-msgid "Snap to tile size"
-msgstr ""
+msgid "GPX Files (*.gpx *.gpx.gz)"
+msgstr "GPX skrár (*.gpx *.gpx.gz)"
 
-msgid "Flush Tile Cache"
+msgid "File {0} is loaded yet under the name \"{1}\""
 msgstr ""
 
-msgid "zoom in to load any tiles"
+msgid "Error while parsing {0}"
 msgstr ""
 
-msgid "zoom in to load more tiles"
+msgid "Could not read \"{0}\""
 msgstr ""
 
-msgid "increase zoom level to see more detail"
+msgid ""
+"<html>Take a photo of your GPS receiver while it displays the "
+"time.<br>Display that photo here.<br>And then, simply capture the time you "
+"read on the photo and select a timezone<hr></html>"
 msgstr ""
 
-msgid "No tiles at this zoom level"
+msgid "Photo time (from exif):"
 msgstr ""
 
-msgid "Current zoom: {0}"
+msgid "Gps time (read from the above photo): "
 msgstr ""
 
-msgid "Display zoom: {0}"
+msgid "I am in the timezone of: "
 msgstr ""
 
-msgid "Pixel scale: {0}"
+msgid "No date"
 msgstr ""
 
-msgid "Best zoom: {0}"
+msgid "Open another photo"
 msgstr ""
 
-msgid "Cache stats: {0}"
+msgid "Synchronize time from a photo of the GPS receiver"
 msgstr ""
 
-msgid "TMS layer ({0}), downloading in zoom {1}"
+msgid ""
+"Error while parsing the date.\n"
+"Please use the requested format"
 msgstr ""
 
-msgid "EPSG:4326 and Mercator projection are supported"
+msgid "Invalid date"
 msgstr ""
 
-msgid "Validation errors"
-msgstr "Villur sem fundust við athugun"
-
-msgid "No validation errors"
-msgstr "Engar villur fundust við athugun"
-
-msgid "Blank Layer"
-msgstr "Tómt lag"
-
-msgid "Downloaded {0}/{1} tiles"
+msgid "<No GPX track loaded yet>"
 msgstr ""
 
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
+msgid "GPX track: "
 msgstr ""
 
-msgid "WMS layer ({0}), downloading in zoom {1}"
+msgid "Open another GPX trace"
 msgstr ""
 
-msgid "Download visible tiles"
-msgstr "Sækja sýnilega reiti"
-
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
+"<html>Use photo of an accurate clock,<br>e.g. GPS receiver display</html>"
 msgstr ""
 
-msgid "Change resolution"
-msgstr "Breyta upplausn"
-
-msgid "Reload erroneous tiles"
-msgstr "Hlaða reiti sem innihalda villur"
-
-msgid "Alpha channel"
+msgid "Auto-Guess"
 msgstr ""
 
-msgid "Automatically change resolution"
+msgid "Matches first photo with first gpx point"
 msgstr ""
 
-msgid "Set WMS Bookmark"
+msgid "Manual adjust"
 msgstr ""
 
-msgid "Automatic downloading"
-msgstr "Sækja sjálfvirkt gögn"
-
-msgid "Zoom to native resolution"
+msgid "Override position for: "
 msgstr ""
 
-msgid "Supported projections are: {0}"
+msgid "Images with geo location in exif data ({0}/{1})"
 msgstr ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Images that are already tagged ({0}/{1})"
 msgstr ""
 
-msgid "Save WMS file"
+msgid "Show Thumbnail images on the map"
 msgstr ""
 
-msgid "Correlate to GPX"
+msgid "Timezone: "
 msgstr ""
 
-msgid "GPX Files (*.gpx *.gpx.gz)"
-msgstr "GPX skrár (*.gpx *.gpx.gz)"
+msgid "Offset:"
+msgstr ""
 
-msgid "File {0} is loaded yet under the name \"{1}\""
-msgstr ""
-
-msgid "Error while parsing {0}"
-msgstr ""
-
-msgid "Could not read \"{0}\""
-msgstr ""
-
-msgid ""
-"<html>Take a photo of your GPS receiver while it displays the "
-"time.<br>Display that photo here.<br>And then, simply capture the time you "
-"read on the photo and select a timezone<hr></html>"
-msgstr ""
-
-msgid "Photo time (from exif):"
-msgstr ""
-
-msgid "Gps time (read from the above photo): "
-msgstr ""
-
-msgid "I am in the timezone of: "
-msgstr ""
-
-msgid "No date"
-msgstr ""
-
-msgid "Open another photo"
-msgstr ""
-
-msgid "Synchronize time from a photo of the GPS receiver"
-msgstr ""
-
-msgid ""
-"Error while parsing the date.\n"
-"Please use the requested format"
-msgstr ""
-
-msgid "Invalid date"
-msgstr ""
-
-msgid "<No GPX track loaded yet>"
-msgstr ""
-
-msgid "GPX track: "
-msgstr ""
-
-msgid "Open another GPX trace"
-msgstr ""
-
-msgid ""
-"<html>Use photo of an accurate clock,<br>e.g. GPS receiver display</html>"
-msgstr ""
-
-msgid "Auto-Guess"
-msgstr ""
-
-msgid "Matches first photo with first gpx point"
-msgstr ""
-
-msgid "Manual adjust"
-msgstr ""
-
-msgid "Override position for: "
-msgstr ""
-
-msgid "Images with geo location in exif data ({0}/{1})"
-msgstr ""
-
-msgid "Images that are already tagged ({0}/{1})"
-msgstr ""
-
-msgid "Show Thumbnail images on the map"
-msgstr ""
-
-msgid "Timezone: "
-msgstr ""
-
-msgid "Offset:"
-msgstr ""
-
-msgid "Correlate images with GPX track"
-msgstr ""
-
-msgid "Correlate"
-msgstr ""
-
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
+msgid "Correlate"
 msgstr ""
 
 msgid "No gpx selected"
@@ -9110,9 +9287,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr "JPEG myndir (*.jpg)"
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9175,9 +9349,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr "Sækja nálægt:"
 
@@ -9803,9 +9974,6 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr "Sækja íforrit"
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 "Athugið að stundum þarf að endurræsa JOSM til að stillingar taki gildi."
@@ -9813,6 +9981,9 @@ msgstr ""
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr "Sækja íforrit"
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -10610,6 +10781,21 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
+msgid "1. Enter getCapabilities URL"
+msgstr ""
+
+msgid "2. Enter name for this layer"
+msgstr ""
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr ""
 
@@ -10628,6 +10814,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10649,6 +10847,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10691,9 +10892,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr "Lag"
 
@@ -10718,36 +10916,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr "Forrit sem sækir gögn"
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11687,6 +11870,14 @@ msgstr "Vista forstillingu"
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] "Breyta {0} hlut"
@@ -11795,6 +11986,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr "Forstillingar"
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12050,6 +12244,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12587,6 +12784,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12972,6 +13172,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13969,6 +14182,9 @@ msgstr "Uppfæra"
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr "Sýn"
+
 msgid "Blue:"
 msgstr ""
 
@@ -14008,7 +14224,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -14020,9 +14236,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14131,6 +14344,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14144,12 +14360,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14186,10 +14408,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14216,6 +14444,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14240,7 +14471,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14255,6 +14486,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14267,12 +14501,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14293,6 +14521,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14325,10 +14556,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14358,73 +14586,25 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
-msgid "OSMIE Townlands"
-msgstr ""
-
-msgid "OSMIE EDs"
-msgstr ""
-
-msgid "OSMIE Civil Parishes"
-msgstr ""
-
-msgid "OSMIE Baronies"
-msgstr ""
-
-msgid "OSMIE Political"
-msgstr ""
-
-msgid "Ireland EEA GMES Urban Atlas"
-msgstr ""
-
-msgid "Ireland EEA CORINE 2006"
-msgstr ""
-
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
 msgstr ""
 
 msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Clare Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Dublin Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Fermanagh Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Galway Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Kildare Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Leitrim Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Longford Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Offaly Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Sligo Civil Parishes and Baronies"
+msgid "OSMIE Townlands"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "OSMIE EDs"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "OSMIE Civil Parishes"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "OSMIE Baronies"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "OSMIE Political"
 msgstr ""
 
 msgid "Lodi - Italy"
@@ -14460,6 +14640,9 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
+msgid "1.cikla ortofotokarte - Latvia"
+msgstr ""
+
 msgid "ORT10LT (Lithuania)"
 msgstr ""
 
@@ -14475,6 +14658,9 @@ msgstr ""
 msgid "Luxembourg Inspire Roads"
 msgstr ""
 
+msgid "Luxembourg Inspire Water"
+msgstr ""
+
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -14490,9 +14676,15 @@ msgstr ""
 msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgstr ""
+
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
+msgid "Geoportal 2: ISOK hillshade"
+msgstr ""
+
 msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
@@ -14502,15 +14694,27 @@ msgstr ""
 msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
+msgid "Bytom: Fotoplan 2014 (aerial image)"
+msgstr ""
+
 msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
 msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
+msgid "Częstochowa: Budynki (buildings)"
+msgstr ""
+
 msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgstr ""
+
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgstr ""
+
 msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
@@ -14520,22 +14724,67 @@ msgstr ""
 msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Powiat łańcucki: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat poznański: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgstr ""
+
+msgid "Powiat rzeszowski: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgstr ""
+
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgstr ""
+
+msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgstr ""
+
+msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgstr ""
+
+msgid "Rzeszów: Budynki (buildings)"
+msgstr ""
+
+msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgstr ""
+
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
@@ -14667,6 +14916,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14682,7 +14946,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -15008,6 +15272,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15093,11 +15362,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15151,7 +15415,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15166,9 +15430,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15249,6 +15510,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15287,6 +15556,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15362,9 +15634,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15770,6 +16039,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15794,10 +16071,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15814,6 +16087,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15830,11 +16107,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15850,6 +16139,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15862,6 +16155,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15889,6 +16186,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16280,6 +16589,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr "Óflokkaður"
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16356,6 +16668,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr "Vegur (óþekkt flokkun)"
 
@@ -16893,6 +17208,12 @@ msgstr "Hraðamyndavél"
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17082,8 +17403,13 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
-msgstr "Vatn"
+msgstr ""
 
 msgid "Drain"
 msgstr "Frárennsli"
@@ -17135,6 +17461,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17276,6 +17606,120 @@ msgstr ""
 msgid "public"
 msgstr ""
 
+msgid "Marine Fuel"
+msgstr ""
+
+msgid "Agip"
+msgstr ""
+
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
 msgid "Pier"
 msgstr "Bryggja"
 
@@ -17392,6 +17836,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr "Skíðalyfta"
 
@@ -17515,151 +17962,40 @@ msgstr ""
 msgid "Fuel"
 msgstr "Bensínstöð"
 
-msgid "Agip"
+msgid "With shop"
 msgstr ""
 
-msgid "Aral"
+msgid "convenience"
 msgstr ""
 
-msgid "Avia"
+msgid "kiosk"
 msgstr ""
 
-msgid "BP"
+msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
-msgid "Chevron"
+msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Citgo"
+msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
-msgid "Eni"
+msgid "1/50 mix (mofa/moped)"
 msgstr ""
 
-msgid "Esso"
+msgid "Fuel cards:"
 msgstr ""
 
-msgid "Exxon"
+msgid "DKV"
 msgstr ""
 
-msgid "Gulf"
+msgid "Routex"
 msgstr ""
 
-msgid "Mobil"
+msgid "UTA"
 msgstr ""
 
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
-msgid "With shop"
-msgstr ""
-
-msgid "convenience"
-msgstr ""
-
-msgid "kiosk"
-msgstr ""
-
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
-msgid "Diesel (Gas To Liquid - ultimate diesel)"
-msgstr ""
-
-msgid "Diesel for Heavy Good Vehicles"
-msgstr ""
-
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
-msgid "1/25 mix (mofa/moped)"
-msgstr ""
-
-msgid "1/50 mix (mofa/moped)"
-msgstr ""
-
-msgid "Fuel cards:"
-msgstr ""
-
-msgid "DKV"
-msgstr ""
-
-msgid "Routex"
-msgstr ""
-
-msgid "UTA"
-msgstr ""
-
-msgid "Charging Station"
+msgid "Charging Station"
 msgstr ""
 
 msgid "Voltage"
@@ -17859,9 +18195,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17880,6 +18213,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18082,6 +18418,12 @@ msgstr "Hótel"
 msgid "Stars"
 msgstr "Stjörnur"
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr "Vegahótel"
 
@@ -18172,6 +18514,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18386,6 +18731,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18873,8 +19221,8 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
-msgstr "Endurvinnsla"
+msgid "Recycling Container"
+msgstr ""
 
 msgid "Batteries"
 msgstr "Rafhlöður"
@@ -18882,19 +19230,46 @@ msgstr "Rafhlöður"
 msgid "Cans"
 msgstr "Dósir"
 
+msgid "Cardboard"
+msgstr ""
+
+msgid "Electrical Appliances"
+msgstr ""
+
 msgid "Glass"
 msgstr "Gler"
 
+msgid "Glass Bottles"
+msgstr ""
+
+msgid "Green Waste"
+msgstr ""
+
 msgid "Paper"
 msgstr "Pappír"
 
+msgid "Plastic"
+msgstr ""
+
+msgid "Plastic Bottles"
+msgstr ""
+
+msgid "Plastic Packaging"
+msgstr ""
+
 msgid "Scrap Metal"
 msgstr "Brotajárn"
 
-msgid "container"
+msgid "Shoes"
+msgstr "Skóbúð"
+
+msgid "Small Appliances"
+msgstr ""
+
+msgid "Waste"
 msgstr ""
 
-msgid "centre"
+msgid "Recycling Centre"
 msgstr ""
 
 msgid "Waste Basket/Trash Can"
@@ -19098,6 +19473,9 @@ msgstr "Bogfimi"
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr "Klifur"
 
@@ -19273,12 +19651,18 @@ msgstr "Hafnabolti"
 msgid "Basketball"
 msgstr "Körfubolti"
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr ""
 
@@ -19294,14 +19678,14 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
-msgstr "Hokkí"
+msgid "Ice Hockey"
+msgstr ""
 
 msgid "Pelota"
 msgstr ""
@@ -19324,9 +19708,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19345,9 +19726,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr "Mannvirki"
 
@@ -19420,6 +19798,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20740,9 +21126,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr "Skóbúð"
-
 msgid "Outdoor"
 msgstr "Útivistarbúð"
 
@@ -21755,10 +22138,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22185,6 +22568,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22209,6 +22595,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22269,6 +22667,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22359,9 +22760,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22731,6 +23141,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22785,9 +23198,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23531,47 +23941,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23580,10 +23999,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24186,6 +24617,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr "Tómt lag"
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25305,352 +25739,658 @@ msgid ""
 "with [irs rectify] in subject."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr "Rekja vatn."
+
+msgid "Lake Walker"
+msgstr "Rekja vatn"
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr "Óþekkt villa kom upp"
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr "strandlengja"
+
+msgid "land"
+msgstr "land"
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr "WMS lag"
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr "Sæki mynda-reit..."
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
+msgstr ""
+
+msgid "Connecting"
+msgstr ""
+
+msgid "Connected"
+msgstr ""
+
+msgid "no name"
+msgstr ""
+
+msgid "Live GPS"
+msgstr ""
+
+msgid "Show GPS data."
+msgstr ""
+
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
-msgstr ""
+msgid "Speed"
+msgstr "Hraði"
 
-msgid "this layer is no osm data layer"
+msgid "Course"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
-msgstr "Rekja vatn."
+msgid "Upload pictures"
+msgstr ""
 
-msgid "Lake Walker"
-msgstr "Rekja vatn"
+msgid "Upload Mapillary pictures"
+msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
-msgstr "Óþekkt villa kom upp"
+msgid "View in website"
+msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
-msgstr "strandlengja"
+msgid "Explore"
+msgstr ""
 
-msgid "land"
-msgstr "land"
+msgid "Select a directory"
+msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
-msgstr "WMS lag"
+msgid "Years"
+msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
-msgstr "Sæki mynda-reit..."
+msgid "Jumps to the picture at the other side of the blue line"
+msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
-msgstr "Hraði"
+msgid "Upload selected sequence"
+msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25671,6 +26411,9 @@ msgstr "Lengd vals"
 msgid "Selection Area"
 msgstr "Flatarmál vals"
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr "Horn"
 
@@ -25729,47 +26472,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -26002,6 +26704,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr "Tól"
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27219,6 +27924,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27390,6 +28116,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27399,6 +28128,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27579,6 +28311,9 @@ msgstr "Nýtt gildi fyrir {0}"
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27757,6 +28492,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27766,6 +28534,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -28002,9 +28773,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29487,9 +30255,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/it.po b/i18n/po/it.po
index 0f209dd..1a7f45c 100644
--- a/i18n/po/it.po
+++ b/i18n/po/it.po
@@ -4,16 +4,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm 20081003\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
-"PO-Revision-Date: 2015-03-30 13:27+0000\n"
-"Last-Translator: Sbiribizio <ftambussa at gmail.com>\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
+"PO-Revision-Date: 2015-09-21 07:50+0000\n"
+"Last-Translator: Don-vip <Unknown>\n"
 "Language-Team: Italian <talk-it at lists.openstreetmap.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:46+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:48+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: it\n"
 "X-Language: it_IT\n"
 "X-Source-Language: en\n"
@@ -97,22 +97,19 @@ msgstr "Caricamento delle preferenze delle immagini aeree"
 msgid "Updating user interface"
 msgstr "Aggiornamento dell''interfaccia utente"
 
-msgid "{0} completed in {1}"
-msgstr "{0} completato in {1}"
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "Ignorato un indirizzo URL di file malformato: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "Ignorato un indirizzo URL malformato: \"{0}\""
 
 msgid "Warning"
 msgstr "Attenzione"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "Ignorato un indirizzo URL di file malformato: \"{0}\""
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 "Il parametro \"downloadgps\" non accetta nomi di file o indirizzi URL di file"
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "Ignorato un indirizzo URL malformato: \"{0}\""
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -468,6 +465,9 @@ msgstr "Commuta pannello finestre"
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Commuta pannello finestre, massimizza visualizzazione mappa"
 
+msgid "Distribute Nodes"
+msgstr "Distribuisci i nodi"
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr "Disponi i nodi a distanze regolari lungo una linea"
 
@@ -479,6 +479,9 @@ msgid ""
 "* One no self-crossing way with at most two of its nodes;\n"
 "* Three nodes."
 msgstr ""
+"Per favore fai una selezione :\n"
+"* Uno, nessun modo di auto-incrocio con al massimo due dei suoi nodi;\n"
+"* Tree nodi."
 
 msgid "Download from OSM..."
 msgstr "Scarica da OSM..."
@@ -497,7 +500,7 @@ msgid "Download data"
 msgstr "Scarica dati"
 
 msgid "Download notes in current view"
-msgstr ""
+msgstr "Scarica le note nella visualizzazione corrente"
 
 msgid "Download object..."
 msgstr "Scarica oggetto..."
@@ -1053,7 +1056,7 @@ msgid "Download Data"
 msgstr "Scarica dati"
 
 msgid "Which tasks to perform?"
-msgstr ""
+msgstr "Quale attività da svolgere?"
 
 msgid "Ok"
 msgstr "Ok"
@@ -1130,6 +1133,31 @@ msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 "Si prega di selezionare dei percorsi con angoli di 90 o 180 gradi circa."
 
+msgid "Download from Overpass API ..."
+msgstr "Scarica dalle API di Overpass ..."
+
+msgid "Download map data from Overpass API server."
+msgstr "Scarica i dati della mappa dal server delle API di Overpass."
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr "Creare una query Overpass usando l''assistente Overpass Turbo query"
+
+msgid "Build query"
+msgstr "Crea una query"
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+"<html>L''assistente di Overpass non può analizzare la seguente query:"
+
+msgid "Parse error"
+msgstr "Errore di analisi"
+
+msgid "Overpass query: "
+msgstr "Interrogazione Overpass: "
+
+msgid "Overpass server: "
+msgstr "Server Overpass: "
+
 msgid "Paste"
 msgstr "Incolla"
 
@@ -1621,7 +1649,7 @@ msgstr[1] ""
 "selezionati."
 
 msgid "Some irrelevant nodes have been removed from the selection"
-msgstr ""
+msgstr "Alcuni nodi irrilevanti sono stati rimossi dalla lista"
 
 msgid "Undo"
 msgstr "Annulla"
@@ -1902,25 +1930,29 @@ msgstr "Annotazioni"
 
 msgid "{0} note has been downloaded."
 msgid_plural "{0} notes have been downloaded."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} nota è stata scaricata."
+msgstr[1] "{0} note sono state scaricate."
 
 msgid ""
 "Since the download limit was {0}, there might be more notes to download."
 msgstr ""
+"Dal momento che il limite del download era {0}, ci potrebbero essere più "
+"note da scaricare."
 
 msgid ""
 "Request a smaller area to make sure that all notes are being downloaded."
 msgstr ""
+"Richiedi una zona più piccola per fare in modo che tutte le note vengono "
+"scaricati."
 
 msgid "More notes to download"
-msgstr ""
+msgstr "Più note da scaricare"
 
 msgid "Download OSM Notes within Bounds"
-msgstr ""
+msgstr "Scarica le note di OSM entro i limiti"
 
 msgid "Download OSM Note by ID"
-msgstr ""
+msgstr "Scarica la note di OSM tramite ID"
 
 msgid "Download Compressed OSM Change"
 msgstr "Scarica modifica OSM compressa"
@@ -1932,7 +1964,7 @@ msgid "Download Compressed OSM"
 msgstr "Scarica OSM compresso"
 
 msgid "Download OSM object by ID"
-msgstr ""
+msgstr "Scarica oggetto di OSM tramite ID"
 
 msgid "Download OSM"
 msgstr "Scarica OSM"
@@ -2142,15 +2174,6 @@ msgstr "Scatto angolo attivo."
 msgid "Finish drawing."
 msgstr "Termina tracciamento."
 
-msgid "FIX"
-msgstr "CORREZIONE"
-
-msgid "draw angle snap"
-msgstr "disegna angolo con scatto"
-
-msgid "draw angle snap highlight"
-msgstr "evidenzia disegno angolo con scatto"
-
 msgid "Toggle snapping by {0}"
 msgstr "Commuta scatto da {0}"
 
@@ -2172,6 +2195,15 @@ msgstr "0,45,90,..."
 msgid "0,30,45,60,90,..."
 msgstr "0,30,45,60,90,..."
 
+msgid "FIX"
+msgstr "CORREZIONE"
+
+msgid "draw angle snap"
+msgstr "disegna angolo con scatto"
+
+msgid "draw angle snap highlight"
+msgstr "evidenzia disegno angolo con scatto"
+
 msgid "Angle snapping"
 msgstr "Scatto angolo"
 
@@ -2310,9 +2342,6 @@ msgstr ""
 "ParallelWayAction\n"
 "I percorsi selezionati devono essere semplici e senza diramazioni"
 
-msgid "Make parallel way error"
-msgstr "Errore nella creazione di percorsi paralleli"
-
 msgid "Drag play head"
 msgstr "Trascina testina di riproduzione"
 
@@ -2554,9 +2583,15 @@ msgstr "tutti gli oggetti"
 msgid "Also include incomplete and deleted objects in search."
 msgstr "Include nella ricerca anche gli oggetti incompleti ed eliminati."
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr "espressione regolare"
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr "aggiungi pulsante"
 
@@ -2686,11 +2721,12 @@ msgstr "proprietà"
 
 msgid ""
 "ways with at least 20 nodes, or relations containing at least 20 nodes"
-msgstr ""
+msgstr "ways con almeno 20 nodi, o relazioni con almeno 20 nodi"
 
 msgid ""
 "nodes with at least 3 referring ways, or relations containing at least 3 ways"
 msgstr ""
+"nodi con almeno 3 ways di riferimento, o relazioni contenenti almeno 3 ways"
 
 msgid "objects having 5 to 10 tags"
 msgstr "oggetti aventi dalle 5 alle 10 etichette"
@@ -2702,7 +2738,7 @@ msgid "closed ways with an area of 100 m²"
 msgstr "percorsi chiusi con un''area di 100 m²"
 
 msgid "ways with a length of 200 m or more"
-msgstr ""
+msgstr "ways con una lunghezza di 200 metri o più"
 
 msgid "state"
 msgstr "stato"
@@ -2783,6 +2819,10 @@ msgid "RX"
 msgstr "RX"
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr "A"
 
@@ -2837,6 +2877,9 @@ msgstr "Atteso intervallo di numeri"
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr "Token inaspettato. Era atteso {0}, trovato {1}"
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr "Token inaspettato: {0}"
 
@@ -3338,6 +3381,24 @@ msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 "<html>Fallita la creazione della cartella mancante della cache: {0}</html>"
 
+msgid "Unable to delete temporary file {0}"
+msgstr "Impossibile cancellare il file temporaneo {0}"
+
+msgid "Unable to set file non-readable {0}"
+msgstr "Impossibile impostare il file non leggibile {0}"
+
+msgid "Unable to set file non-writable {0}"
+msgstr "Impossibile impostare il file non scrivibile {0}"
+
+msgid "Unable to set file non-executable {0}"
+msgstr "Impossibile impostare il file non eseguibile {0}"
+
+msgid "Unable to set file readable {0}"
+msgstr "Impossibile impostare il file leggibile {0}"
+
+msgid "Unable to set file writable {0}"
+msgstr "Impossibile impostare il file scrivibile {0}"
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3412,6 +3473,8 @@ msgid ""
 "Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
 "startup)."
 msgstr ""
+"Prova ad abilitare IPv6 network, preferire IPv6 su IPv4 (funziona solo sulla "
+"prima messa in servizio)."
 
 msgid " (at line {0}, column {1})"
 msgstr " (alla linea {0}, colonna {1})"
@@ -3477,14 +3540,52 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
-msgid "Not in cache"
-msgstr "Non in cache"
-
 msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr ""
 "La proiezione ''{0}'' non è stata trovata, il segnalibro ''{1}'' non è "
 "utilizzabile"
 
+msgid "HTTP error {0} when loading tiles"
+msgstr "Errore HTTP {0} durante il caricamento dei tasselli"
+
+msgid "Error downloading tiles: {0}"
+msgstr "Errore di scaricamento die tasselli: {0}"
+
+msgid "Could not load image from tile server"
+msgstr "Non posso caricare le immagini dal server dei tasselli (tile server)"
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+"{0} non è un argomento WMS valido. Per favore controlla la URL del server:\n"
+"{1}"
+
+msgid "Select WMTS layer"
+msgstr "Seleziona il livello WMTS"
+
+msgid "Layer name"
+msgstr "Nome del livello"
+
+msgid "Projection"
+msgstr "Proiezione"
+
+msgid "Matrix set identifier"
+msgstr "Identificatore Matrix set"
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr "Nessun livello selezionato da getCapabilities document: {0}"
+
+msgid "No layer selected"
+msgstr "Nessun livello selezionato"
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
+msgstr ""
+"Sono ammessi solo tasselli quadrati. {0}x{1} restituito dal server per "
+"identificativo TileMatrix {2}"
+
 msgid "ID > 0 expected. Got {0}."
 msgstr "Era atteso un ID > 0 . Ottenuto {0}."
 
@@ -3699,6 +3800,13 @@ msgstr "testo"
 msgid "areatext"
 msgstr "testo dell''area"
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr "proiezione UTM (''+proj=utm'') richiede ''+zone=...'' parametro."
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+"Richiesto valore intero compreso tra 1-60 per parametro ''+zone=...''"
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr "Il parametro deve iniziare con un carattere ''+'' (trovato ''{0}'')"
 
@@ -3726,6 +3834,9 @@ msgstr "Ellissoide ''{0}'' non supportato."
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr "La combinazione di parametri dell''ellissoide non è supportata."
 
+msgid "Unknown datum identifier: ''{0}''"
+msgstr "Identificatore datum sconosciuto: ''{0}''"
+
 msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr "Ellissoide richiesto (+ellps=* oppore +a=*, +b=*)"
 
@@ -3734,9 +3845,6 @@ msgstr ""
 "File di scostamento della griglia ''{0}'' per l''opzione +nadgrids non "
 "supportato."
 
-msgid "Unknown datum identifier: ''{0}''"
-msgstr "Identificatore datum sconosciuto: ''{0}''"
-
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
 msgstr "Datum richiesto (+datum=*, +towgs84=* o +nadgrids=*)"
 
@@ -4100,13 +4208,13 @@ msgstr ""
 "marcia"
 
 msgid "Long segments"
-msgstr ""
+msgstr "Segmenti lunghi"
 
 msgid "This tests for long way segments, which are usually errors."
-msgstr ""
+msgstr "Questo test per i segmenti lunga strada, che di solito sono errori."
 
 msgid "Very long segment of {0} kilometers"
-msgstr ""
+msgstr "Segmento molto lungo di {0} chilometri"
 
 msgid "Tag checker (MapCSS based)"
 msgstr "Controllo etichette (basato su MapCSS)"
@@ -4167,6 +4275,8 @@ msgid ""
 "With the currently used mappaint style the style for inner way equals the "
 "multipolygon style"
 msgstr ""
+"Con lo stile mappaint attualmente utilizzato lo stile per la via interiore è "
+"uguale allo stile multipoligono"
 
 msgid "Style for outer way mismatches"
 msgstr "Lo stile del percorso esterno non è coerente"
@@ -4175,6 +4285,8 @@ msgid ""
 "With the currently used mappaint style(s) the style for outer way mismatches "
 "polygon"
 msgstr ""
+"Con lo stile(i) mappaint attualmente utilizzato, lo stile per la via "
+"esteriore non combacia con lo stile poligono"
 
 msgid "Area style on outer way"
 msgstr "Stile di area in un percorso esterno (multipoligono)"
@@ -4208,6 +4320,7 @@ msgstr ""
 
 msgid "Missing name:*={0}. Add tag with correct language key."
 msgstr ""
+"Nome mancante:*={0}. Aggiungi una etichetta con chiave lingua corretta."
 
 msgid "A name is missing, even though name:* exists."
 msgstr "Manca un nome, nonostante esista name:*."
@@ -4400,9 +4513,6 @@ msgstr "Chiave più lunga del consentito"
 msgid "Tags with empty values"
 msgstr "Tag con valori vuoti"
 
-msgid "Invalid property key"
-msgstr "chiave della proprietà non valida"
-
 msgid "Invalid white space in property key"
 msgstr "spazio non valido nella chiave della proprietà"
 
@@ -4412,12 +4522,24 @@ msgstr "Il valore della proprietà inizia o finisce con uno spazio"
 msgid "Property values contain HTML entity"
 msgstr "Il valore della proprietà contiene una entità HTML"
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr "La chiave ''{0}'' assomiglia a ''{1}''."
+
+msgid "Misspelled property key"
+msgstr "proprietà della chiava errata"
+
 msgid "Key ''{0}'' not in presets."
 msgstr "Chiave ''''{0}'''' non presente nelle preimpostazioni."
 
 msgid "Presets do not contain property key"
 msgstr "Le preimpostazioni non contengono la chiave della proprietà"
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr "Valore ''{0}'' per chiave ''{1}'' sembra ''{2}''."
+
+msgid "Misspelled property value"
+msgstr "Valore della proprietà errata"
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 "Valore ''''{0}'''' per la chiave ''''{1}'''' non presente nelle "
@@ -4610,6 +4732,9 @@ msgstr "Nodo del percorso vicino ad altro percorso"
 msgid "Connected way end node near other way"
 msgstr "Nodo finale della strada collegata vicino ad un''altra strada"
 
+msgid "Unconnected nodes without physical tags"
+msgstr "Nodi non connessi senza etichette fisiche"
+
 msgid "Untagged and unconnected nodes"
 msgstr "Nodi senza etichette e non connessi"
 
@@ -4618,9 +4743,6 @@ msgstr ""
 "Questo controllo cerca i nodi senza etichetta che non fanno parte di alcun "
 "percorso."
 
-msgid "Unconnected nodes without physical tags"
-msgstr "Nodi non connessi senza etichette fisiche"
-
 msgid "No tags"
 msgstr "Nessun tag"
 
@@ -4820,6 +4942,7 @@ msgstr "Clicca per chiudere la finestra"
 msgid "Imagery offset"
 msgstr "Scostamento delle immagini aeree"
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr "Immagini aeree"
 
@@ -4887,7 +5010,7 @@ msgid "Print debugging messages to console"
 msgstr "Visualizza i messaggi di debug sulla console"
 
 msgid "Skip loading plugins"
-msgstr ""
+msgstr "Salta il carimento dei pluging"
 
 msgid "Disable access to the given resource(s), separated by comma"
 msgstr "Disabilita accesso alle risorse specificate, separate da virgola"
@@ -4959,7 +5082,7 @@ msgid "Printing debugging messages to console"
 msgstr "Visualizzazione dei messaggi di debug su console"
 
 msgid "Plugin loading skipped"
-msgstr ""
+msgstr "Caricamento pluging saltato"
 
 msgid "Enabled detailed debug level (trace)"
 msgstr "Livello di debug di dettaglio abilitato (traccia)"
@@ -5006,14 +5129,18 @@ msgstr[1] ""
 msgid ""
 "Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
 msgstr ""
+"Rilevata rete IPv6 utilizzabile, preferire IPv6 su IPv4 dopo il successivo "
+"riavvio."
 
 msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
-msgstr ""
+msgstr "Rilevata rete IPv6 utilizzabile, preferire IPv6 su IPv4."
 
 msgid ""
 "Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
 "restart."
 msgstr ""
+"Rilevata rete IPv6 non utilizzabile, preferire IPv6 su IPv4 dopo il "
+"successivo riavvio."
 
 msgid "Unsaved osm data"
 msgstr "Dati OSM non salvati"
@@ -5064,45 +5191,56 @@ msgstr ""
 "potrebbe essere dovuto alla mancata configurazione del proxy.<br>Si desidera "
 "modificare ora le proprie impostazioni del proxy?"
 
+msgctxt "menu"
 msgid "File"
 msgstr "File"
 
-msgid "Session"
-msgstr "Sessione"
+msgctxt "menu"
+msgid "Edit"
+msgstr "Modifica"
 
+msgctxt "menu"
 msgid "View"
-msgstr "Visualizza"
+msgstr "Vista"
 
+msgctxt "menu"
 msgid "Tools"
 msgstr "Strumenti"
 
+msgctxt "menu"
 msgid "More tools"
-msgstr "Ulteriori strumenti"
+msgstr "Altri strumenti"
 
+msgctxt "menu"
 msgid "Data"
 msgstr "Dati"
 
+msgctxt "menu"
 msgid "Selection"
 msgstr "Selezione"
 
+msgctxt "menu"
 msgid "Presets"
 msgstr "Preimpostazioni"
 
 msgid "More..."
 msgstr "Altro..."
 
+msgctxt "menu"
 msgid "GPS"
 msgstr "GPS"
 
+msgctxt "menu"
 msgid "Windows"
 msgstr "Finestre"
 
+msgctxt "menu"
+msgid "Help"
+msgstr "Aiuto"
+
 msgid "Menu: {0}"
 msgstr "Menu: {0}"
 
-msgid "Save and load the current session (list of layers, etc.)"
-msgstr "Salva e carica la sessione corrente (lista dei livelli, ecc.)"
-
 msgid "Edit toolbar"
 msgstr "Barra degli strumenti di modifica"
 
@@ -5127,6 +5265,7 @@ msgstr "Cliccare per aprire la scheda delle immagini aeree nelle preferenze"
 msgid "Search menu items"
 msgstr "Cerca elementi nel menu"
 
+msgctxt "menu"
 msgid "Audio"
 msgstr "Audio"
 
@@ -5251,69 +5390,17 @@ msgstr "In secondo piano"
 msgid "Click to run job in background"
 msgstr "Clicca per eseguire il processo in secondo piano"
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-"Le immagini aeree potrebbero non essere allineate. Si prega di controllare "
-"il loro scostamento utilizzando i tracciati GPS!"
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-
-msgid "Details..."
-msgstr "Dettagli..."
-
-msgid "Hide this message and never show it again"
-msgstr "Nascondi questo messaggio e non visualizzarlo più"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-"<html>Confermare per eliminare <strong>1 oggetto</strong> da <strong>1 "
-"relazione</strong>.</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>Confermare per eliminare <strong>1 oggetto</strong> da <strong>{0} "
-"relazioni</strong>.</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>Confermare per eliminare <strong>{0} oggetti</strong> da <strong>{1} "
-"relazioni</strong>.</html>"
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] "Rimozione di {0} oggetto"
-msgstr[1] "Rimozione di {0} oggetti"
-
-msgid "Delete objects"
-msgstr "Elimina oggetti"
-
-msgid "To delete"
-msgstr "Da eliminare"
-
-msgid "From Relation"
-msgstr "Dalla relazione"
-
-msgid "Pos."
-msgstr "Pos."
+msgid " ({0})"
+msgstr " ({0})"
 
-msgid "Role"
-msgstr "Ruolo"
+msgid "{0} completed in {1}"
+msgstr "{0} completato in {1}"
 
-msgid "Click to close the dialog and remove the object from the relations"
-msgstr ""
-"Clicca per chiudere la finestra ed eliminare l''oggetto dalle relazioni"
+msgid "Enlarge"
+msgstr "Allarga"
 
-msgid "Click to close the dialog and to abort deleting the objects"
-msgstr ""
-"Clicca per chiudere la finestra ed annullare l''eliminazione degli oggetti"
+msgid "Shrink"
+msgstr "Restringi"
 
 msgid ""
 "<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
@@ -5438,10 +5525,10 @@ msgid "Conflict foreground: keep all tags"
 msgstr "Primo piano conflitto: mantieni tutte le etichette"
 
 msgid "Conflict background: sum all numeric tags"
-msgstr "Conglitto background: somma tutti i tag numerici"
+msgstr "Conflitto sfondo: somma tutti i tag numerici"
 
 msgid "Conflict foreground: sum all numeric tags"
-msgstr "Conglitto in primo piano: somma tutti i tag numerici"
+msgstr "Conflitto in primo piano: somma tutti i tag numerici"
 
 msgid "Conflict background: keep member"
 msgstr "Sfondo conflitto: mantieni membro"
@@ -5786,6 +5873,9 @@ msgstr "Mantieni il loro stato eliminato"
 msgid "Undecide conflict between deleted state"
 msgstr "Marca come irrisolto il conflitto tra stati eliminati"
 
+msgid "Role"
+msgstr "Ruolo"
+
 msgid "Primitive"
 msgstr "Primitiva"
 
@@ -6082,6 +6172,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr "Applica questo ruolo a tutti i membri"
 
+msgid "Pos."
+msgstr "Pos."
+
 msgid "Orig. Way"
 msgstr "Percorso Orig."
 
@@ -6252,6 +6345,49 @@ msgstr "Risolvi conflitti"
 msgid "Resolve conflicts for ''{0}''"
 msgstr "Risolvi i conflitti per ''{0}''"
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+"<html>Confermare per eliminare <strong>1 oggetto</strong> da <strong>1 "
+"relazione</strong>.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Confermare per eliminare <strong>1 oggetto</strong> da <strong>{0} "
+"relazioni</strong>.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Confermare per eliminare <strong>{0} oggetti</strong> da <strong>{1} "
+"relazioni</strong>.</html>"
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] "Rimozione di {0} oggetto"
+msgstr[1] "Rimozione di {0} oggetti"
+
+msgid "Delete objects"
+msgstr "Elimina oggetti"
+
+msgid "To delete"
+msgstr "Da eliminare"
+
+msgid "From Relation"
+msgstr "Dalla relazione"
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+"Clicca per chiudere la finestra ed eliminare l''oggetto dalle relazioni"
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+"Clicca per chiudere la finestra ed annullare l''eliminazione degli oggetti"
+
 msgid "Filter objects and hide/disable them."
 msgstr "Filtra oggetti e nascondili/disabilitali."
 
@@ -6356,8 +6492,8 @@ msgstr "Informazioni avanzate sull''oggetto"
 msgid "map style"
 msgstr "stile della mappa"
 
-msgid " ({0})"
-msgstr " ({0})"
+msgid "edit counts"
+msgstr "modifica i conteggi"
 
 msgid "not in data set"
 msgstr "non presente nell''insieme dei dati"
@@ -6497,6 +6633,11 @@ msgstr ""
 "Attenzione: i 2 oggetti selezionati hanno le cache dello stile equivalenti "
 "ma non identiche."
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] "{0} utente ha modificato la selezione"
+msgstr[1] "{0} utenti hanno modificato la selezione"
+
 msgid "xml"
 msgstr "xml"
 
@@ -6506,35 +6647,67 @@ msgstr "mapcss"
 msgid "unknown"
 msgstr "sconosciuto"
 
-msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
-msgstr ""
-"Inserire le coordinate per il nuovo nodo.<br/>Si possono separare "
-"longitudine e latitudine con uno spazio, una virgola o un punto e "
-"virgola.<br/>Utilizzare numeri positivi oppure i caratteri N ed E per "
-"indicare le direzioni cardinali Nord o Est.<br/>Per le direzioni cardinali "
-"Sud e Ovest si possono utilizzare numeri negativi o i caratteri S e "
-"W.<br/>Il valore di coordinata può essere espresso in uno dei seguenti tre "
-"formati:<ul><li><i>gradi</i><tt>°</tt></li><li><i>gradi</i><tt>°</tt>"
-" <i>minuti</i><tt>'</tt></li><li><i>gradi</i><tt>°</tt> "
-"<i>minuti</i><tt>'</tt> <i>secondi</i><tt>&quot</tt></li></ul>I simboli "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> sono opzionali.<br/><br/>Alcuni esempi:<ul>{0}</ul>"
-
-msgid "Projected coordinates:"
-msgstr "Coordinate proiettate:"
+msgid "Enter the coordinates for the new node."
+msgstr "Inserire le coordinate del nuovo nodo"
 
 msgid ""
-"Enter easting and northing (x and y) separated by space, comma or semicolon."
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+"È possibile separare longitudine e latitudine con spazio, virgola o il punto "
+"e virgola."
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+"Usare numeri positivi oppure i caratteri N, E indicano i punti cardinali "
+"Nord o Est."
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+"Per i punti cardinali Sud e Ovest si possono utilizzare i numeri negativi "
+"oppure i caratteri S o W."
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr "Le coordinate possono avere uno di questi tre formati:"
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr "<i>gradi</i><tt>°</tt>"
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr "<i>gradi</i><tt>°</tt> <i>minuti</i><tt>'</tt>"
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+"<i>gradi</i><tt>°</tt> <i>minuti</i><tt>'</tt> "
+"<i>secondi</i><tt>&quot</tt>"
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+"I simboli <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> sono opzionali."
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+"È possibile utilizzare anche la sintassi <tt>lat=\"...\" lon=\"...\"</tt> "
+"oppure <tt>lat=''...'' lon=''...''</tt>."
+
+msgid "Some examples:"
+msgstr "Alcuni esempi"
+
+msgid "Projected coordinates:"
+msgstr "Coordinate proiettate:"
+
+msgid ""
+"Enter easting and northing (x and y) separated by space, comma or semicolon."
 msgstr ""
 "Inserire le coordinate est e nord (x e y) separate da uno spazio, virgola o "
 "punto e virgola."
@@ -6575,6 +6748,12 @@ msgstr "Opacità"
 msgid "Adjust opacity of the layer."
 msgstr "Regola opacità del livello."
 
+msgid "Gamma"
+msgstr "Gamma"
+
+msgid "Adjust gamma value of the layer."
+msgstr "Aggiunsta il volare gamma del livello."
+
 msgid "Activate"
 msgstr "Attiva"
 
@@ -6707,6 +6886,12 @@ msgstr "Impostazioni stile"
 msgid "Customize the style"
 msgstr "Personalizza lo stile"
 
+msgid "Mini map"
+msgstr "Mini mappa"
+
+msgid "Displays a small map of the current edit location"
+msgstr "Mostra una mini mappa della posizione corrente"
+
 msgid "List of notes"
 msgstr "Lista di note"
 
@@ -6765,15 +6950,19 @@ msgstr "ID oggetto:"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "Inserire l''ID dell''oggetto che deve essere scaricato"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr "IDs Oggett può essere separato da virgola o spazio, per esempio: {0}"
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
 msgstr ""
-"Gli ID degli oggetti possono essere separati da una virgola o da uno "
-"spazio.<br/>Esempi: {0}<br/>In modalità mista, specificare gli oggetti nel "
-"seguente modo: {1}<br/>({2} sta per <i>nodo</i>, {3} per <i>percorso</i>, e "
-"{4} per <i>relazione</i>)"
+"In modalità mista specificare gli oggetti così: {0}<br/>({1} sta per "
+"<i>nodo</i>, {2} per <i>via</i>, e {3} per <i>relazione</i>)"
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
+msgstr ""
+"Intervalli di ID oggetto sono specificati con un trattino, ad esempio: {0}"
 
 msgid ""
 "Invalid ID list specified\n"
@@ -6803,6 +6992,9 @@ msgstr "Relazioni: {0}/{1}"
 msgid "Relations: {0}"
 msgstr "Relazioni: {0}"
 
+msgid "Selection"
+msgstr "Selezione"
+
 msgid "Open a selection list window."
 msgstr "Apri una finestra con la lista delle selezioni."
 
@@ -6899,6 +7091,12 @@ msgstr "Apre la finestra di verifica."
 msgid "Validation results"
 msgstr "Risultati della validazione"
 
+msgid "Lookup"
+msgstr "Ricerca"
+
+msgid "Looks up the selected primitives in the error list."
+msgstr "Controlla le primitive selezionate, nelle lista degli errori."
+
 msgid "Fix"
 msgstr "Correggi"
 
@@ -7504,17 +7702,17 @@ msgid "Discardable key: background"
 msgstr "Chiave scartabile: sfondo"
 
 msgid "{0} ''{1}''"
-msgstr ""
+msgstr "{0} ''{1}''"
 
 msgid "{0} different"
 msgid_plural "{0} different"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} diverso"
+msgstr[1] "{0} diversi"
 
 msgid ", {0} unset"
 msgid_plural ", {0} unset"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] ", {0} non impostato"
+msgstr[1] ", {0} non impostati"
 
 msgid "Select objects for which to change tags."
 msgstr "Selezionare gli oggetti per i quali modificare le etichette."
@@ -7535,7 +7733,7 @@ msgid "<different>"
 msgstr "<diverso>"
 
 msgid "Objects: {2} / Tags: {0} / Memberships: {1}"
-msgstr ""
+msgstr "Oggetti: {2} / Etichette: {0} / Appartenenze: {1}"
 
 msgid "Tags: {0} / Memberships: {1}"
 msgstr "Etichette: {0} / Appartenenze: {1}"
@@ -7577,6 +7775,13 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr "Avvia il browser con la documentazione sull''oggetto selezionato"
 
+msgid "Go to Taginfo"
+msgstr "Vai a Taginfo"
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+"Apre il browser con le statistiche Taginfo per gli oggetti selezionati"
+
 msgid "Paste Value"
 msgstr "Incolla valore"
 
@@ -7671,15 +7876,14 @@ msgstr "Imposta il numero delle etichette aggiunte di recente"
 msgid "Remember last used tags after a restart"
 msgstr "Ricorda le ultime etichette usati, dopo il riavvio"
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
-msgstr ""
+msgid "to apply first suggestion"
+msgstr "applicare il primo suggerimento"
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
-msgstr ""
+msgid "to add without closing the dialog"
+msgstr "aggiungere senza chiudere il pannello"
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
-msgstr ""
+msgid "to add first suggestion without closing the dialog"
+msgstr "aggiungere primo suggerimento senza chiudere il pannello"
 
 msgid "Please enter the number of recently added tags to display"
 msgstr ""
@@ -7883,6 +8087,13 @@ msgstr "Ordina i membri della relazione"
 msgid "Relation Editor: Sort"
 msgstr "Editor delle relazioni: Ordina"
 
+msgid "Sort below"
+msgstr "Ordina dal basso"
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+"Ordina le relazioni dei membri selezionati e tutti i membri sottostanti"
+
 msgid "Reverse the order of the relation members"
 msgstr "Inverti l''ordine dei membri della relazione"
 
@@ -8271,6 +8482,9 @@ msgid ""
 "<strong>{2}</strong> is enabled.<br>Please choose to either download OSM "
 "data, or GPX data, or Notes, or all.</html>"
 msgstr ""
+"<html>Né <strong>{0}</strong> né <strong>{1}</strong> e né "
+"<strong>{2}</strong> è abilitato.<br>Si prega di scegliere di scaricare i "
+"dati OSM, o dati GPX, o Notes, o tutti.</html>"
 
 msgid "Download referrers (parent relations)"
 msgstr "Scarica oggetti collegati (relazioni padre)"
@@ -8496,6 +8710,9 @@ msgstr "Caricamento della cronologia per la relazione {0}"
 msgid "Node {0}"
 msgstr "Nodo {0}"
 
+msgid "The nodes of this way are in reverse order"
+msgstr "I nodi di questo tracciato sono in ordine inverso"
+
 msgid "Zoom to node"
 msgstr "Ingrandisci la visuale sul nodo"
 
@@ -8524,13 +8741,13 @@ msgid "Changeset source"
 msgstr "Sorgente gruppo di modifiche"
 
 msgid "Imagery used"
-msgstr ""
+msgstr "Immagini usate"
 
 msgid "<b>Source</b>:"
 msgstr "<b>Sorgente</b>:"
 
 msgid "<b>Imagery</b>:"
-msgstr ""
+msgstr "<b>Immagini</b>:"
 
 msgid ""
 "<html>Version <strong>{0}</strong> currently edited in layer ''{1}''</html>"
@@ -8544,7 +8761,7 @@ msgstr ""
 "<html>Versione <strong>{0}</strong> creata il <strong>{1}</strong></html>"
 
 msgid "Changeset"
-msgstr ""
+msgstr "Gruppo di modifiche"
 
 msgid "Changeset info"
 msgstr "Informazioni sul gruppo di modifiche"
@@ -9516,6 +9733,108 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] "{0} oggetto da eliminare:"
 msgstr[1] "{0} oggetti da eliminare:"
 
+msgid "Show Tile Info"
+msgstr "Mostra informazioni sul tassello"
+
+msgid "Tile Info"
+msgstr "Info Tasselli"
+
+msgid "Metadata "
+msgstr "Metadata "
+
+msgid "Auto Zoom"
+msgstr "Ingrandimento automatico"
+
+msgid "Auto load tiles"
+msgstr "Carica automaticamente i tasselli"
+
+msgid "Load All Tiles"
+msgstr "Carica tutti i tasselli"
+
+msgid "Load All Error Tiles"
+msgstr "Carica tutti i tasselli con errori"
+
+msgid "Zoom to native resolution"
+msgstr "Ingrandisci la visuale alla risoluzione originale"
+
+msgid "Change resolution"
+msgstr "Cambia risoluzione"
+
+msgid "Failed to create tile source"
+msgstr "Impossibile creare la fonte dei tasselli"
+
+msgid "Show Errors"
+msgstr "Visualizza errori"
+
+msgid "Load Tile"
+msgstr "Carica il tassello"
+
+msgid "Increase zoom"
+msgstr "Aumenta l''ingrandimento"
+
+msgid "Decrease zoom"
+msgstr "Diminuisci l''ingrandimento"
+
+msgid "Snap to tile size"
+msgstr "Scatta alla dimensione del tassello"
+
+msgid "Flush Tile Cache"
+msgstr "Svuota la cache dei tasselli"
+
+msgid "zoom in to load any tiles"
+msgstr "ingrandire per caricare dei tasselli"
+
+msgid "zoom in to load more tiles"
+msgstr "ingrandire per caricare più tasselli"
+
+msgid "increase zoom level to see more detail"
+msgstr "aumenta il livello di ingrandimento per vedere più dettagli"
+
+msgid "No tiles at this zoom level"
+msgstr "Nessun tassello in questo livello di ingrandimento"
+
+msgid "Current zoom: {0}"
+msgstr "Ingrandimento corrente: {0}"
+
+msgid "Display zoom: {0}"
+msgstr "Ingrandimento visualizzato: {0}"
+
+msgid "Pixel scale: {0}"
+msgstr "Scala pixel: {0}"
+
+msgid "Best zoom: {0}"
+msgstr "Migliore ingrandimento: {0}"
+
+msgid "Cache stats: {0}"
+msgstr "Statistiche cache: {0}"
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr "{0} ({1}), scarica automaticamente con zoom {2}"
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr "{0} ({1}), scarica con zoom {2}"
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr "Scaricati {0}/{1} tasselli"
+
+msgid "Save WMS file"
+msgstr "Salva file WMS"
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+"Le immagini aeree potrebbero non essere allineate. Si prega di controllare "
+"il loro scostamento utilizzando i tracciati GPS!"
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+
+msgid "Details..."
+msgstr "Dettagli..."
+
+msgid "Hide this message and never show it again"
+msgstr "Nascondi questo messaggio e non visualizzarlo più"
+
 msgid "Customize Color"
 msgstr "Personalizza colori"
 
@@ -9569,6 +9888,9 @@ msgstr "Salva in un file GPX"
 msgid "Imagery fade"
 msgstr "Dissolvenza delle immagini aeree"
 
+msgid "Unsupported imagery type: {0}"
+msgstr "Tipo di immagini non supportato: {0}"
+
 msgid "ERROR"
 msgstr "ERRORE"
 
@@ -9589,12 +9911,12 @@ msgstr "Sono supportate tutte le proiezioni"
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 "Il livello {0} non supporta la nuova proiezione {1}.\n"
-"{2}\n"
-"Modificare nuovamente la proiezione o rimuovere il livello."
+"Le proiezioni supportate sono: {2}\n"
+"Cambia nuovamente la proiezione o cancella il livello."
 
 msgid "Save Layer"
 msgstr "Salva livello"
@@ -9677,198 +9999,91 @@ msgstr ""
 msgid "Save OSM file"
 msgstr "Salva file OSM"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-"{0} non è un argomento TMS valido. Controllare il seguente indirizzo URL del "
-"server:\n"
-"{1}"
+msgid "EPSG:4326 and Mercator projection are supported"
+msgstr "Sono supportate le proiezioni EPSG:4326 e di Mercatore"
 
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-"I livello TMS non supportano la proiezione {0}.\n"
-"{1}\n"
-"Modificare la proiezione o rimuovere il livello."
+msgid "Validation errors"
+msgstr "Errori di verifica"
 
-msgid "Auto Zoom"
-msgstr "Ingrandimento automatico"
+msgid "No validation errors"
+msgstr "Nessun errore individuato"
 
-msgid "Auto load tiles"
-msgstr "Carica automaticamente i tasselli"
+msgid "Set WMS Bookmark"
+msgstr "Imposta segnalibro WMS"
 
-msgid "Show Errors"
-msgstr "Visualizza errori"
+msgid ""
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
+msgstr ""
+"JOSM userà EPSG:4326 per interrogare il server, ma il risultato può variare "
+"in base al server WMS"
 
-msgid "Load Tile"
-msgstr "Carica il tassello"
+msgid "Correlate to GPX"
+msgstr "Correlazione ai dati GPX"
 
-msgid "Show Tile Info"
-msgstr "Mostra informazioni sul tassello"
+msgid "Invalid timezone"
+msgstr "Fuso orario non valido"
 
-msgid "Load All Tiles"
-msgstr "Carica tutti i tasselli"
+msgid "Invalid offset"
+msgstr "Scostamento non valido"
 
-msgid "Load All Error Tiles"
-msgstr "Carica tutti i tasselli con errori"
+msgid "Correlate images with GPX track"
+msgstr "Correla le immagini al tracciato GPX"
 
-msgid "Increase zoom"
-msgstr "Aumenta l''ingrandimento"
+msgid "Try Again"
+msgstr "Riprova"
 
-msgid "Decrease zoom"
-msgstr "Diminuisci l''ingrandimento"
+msgid "No images could be matched!"
+msgstr "Non è stato possibile correlare alcuna immagine!"
 
-msgid "Snap to tile size"
-msgstr "Scatta alla dimensione del tassello"
+msgid "GPX Files (*.gpx *.gpx.gz)"
+msgstr "File GPX (*.gpx *.gpx.gz)"
 
-msgid "Flush Tile Cache"
-msgstr "Svuota la cache dei tasselli"
+msgid "File {0} is loaded yet under the name \"{1}\""
+msgstr "Il file {0} è stato caricato già sotto il nome \"{1}\""
 
-msgid "zoom in to load any tiles"
-msgstr "ingrandire per caricare dei tasselli"
+msgid "Error while parsing {0}"
+msgstr "Impossibile interpretare {0}"
 
-msgid "zoom in to load more tiles"
-msgstr "ingrandire per caricare più tasselli"
+msgid "Could not read \"{0}\""
+msgstr "Impossibile leggere \"{0}\""
 
-msgid "increase zoom level to see more detail"
-msgstr "aumenta il livello di ingrandimento per vedere più dettagli"
+msgid ""
+"<html>Take a photo of your GPS receiver while it displays the "
+"time.<br>Display that photo here.<br>And then, simply capture the time you "
+"read on the photo and select a timezone<hr></html>"
+msgstr ""
+"<html>Fotografa il tuo ricevitore GPS mentre indica l''ora.<br>Visualizza "
+"qui la foto.<br>Copia l''ora dalla foto e seleziona la fascia "
+"oraria<hr></html>"
 
-msgid "No tiles at this zoom level"
-msgstr "Nessun tassello in questo livello di ingrandimento"
+msgid "Photo time (from exif):"
+msgstr "Ora di scatto della fotografia (dai dati exif):"
 
-msgid "Current zoom: {0}"
-msgstr "Ingrandimento corrente: {0}"
+msgid "Gps time (read from the above photo): "
+msgstr "Ora GPS (letto dalla fotografia precedente): "
 
-msgid "Display zoom: {0}"
-msgstr "Ingrandimento visualizzato: {0}"
+msgid "I am in the timezone of: "
+msgstr "Mi trovo nel fuso orario di: "
 
-msgid "Pixel scale: {0}"
-msgstr "Scala pixel: {0}"
+msgid "No date"
+msgstr "Nessuna data"
 
-msgid "Best zoom: {0}"
-msgstr "Migliore ingrandimento: {0}"
+msgid "Open another photo"
+msgstr "Apri un''altra fotografia"
 
-msgid "Cache stats: {0}"
+msgid "Synchronize time from a photo of the GPS receiver"
+msgstr "Sincronizza l''ora da una fotografia del ricevitore GPS"
+
+msgid ""
+"Error while parsing the date.\n"
+"Please use the requested format"
 msgstr ""
+"Errore nell''interpretazione della data.\n"
+"Si prega di usare il formato richiesto"
 
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr "Livello TMS ({0}), scaricamento nell''ingrandimento {1}"
-
-msgid "EPSG:4326 and Mercator projection are supported"
-msgstr "Sono supportate le proiezioni EPSG:4326 e di Mercatore"
-
-msgid "Validation errors"
-msgstr "Errori di verifica"
-
-msgid "No validation errors"
-msgstr "Nessun errore individuato"
-
-msgid "Blank Layer"
-msgstr "Livello vuoto"
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr "Scaricati {0}/{1} tasselli"
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-"Livello WMS ({0}), scaricamento automatico al livello di ingrandimento {1}"
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr "Livello WMS ({0}), scaricamento per il livello di ingrandimento {1}"
-
-msgid "Download visible tiles"
-msgstr "Scarica i tasselli visibili"
-
-msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-"L''area richiesta è troppo grande. Si prega di ingrandire un poco la "
-"visuale, oppure di cambiare la risoluzione"
-
-msgid "Change resolution"
-msgstr "Cambia risoluzione"
-
-msgid "Reload erroneous tiles"
-msgstr "Ricarica i tasselli non corretti"
-
-msgid "Alpha channel"
-msgstr "Alpha channel"
-
-msgid "Automatically change resolution"
-msgstr "Cambia automaticamente risoluzione"
-
-msgid "Set WMS Bookmark"
-msgstr "Imposta segnalibro WMS"
-
-msgid "Automatic downloading"
-msgstr "Scaricamento automatico"
-
-msgid "Zoom to native resolution"
-msgstr "Ingrandisci la visuale alla risoluzione originale"
-
-msgid "Supported projections are: {0}"
-msgstr "Le proiezioni supportate sono: {0}"
-
-msgid "Unsupported WMS file version; found {0}, expected {1}"
-msgstr "Versione del file WMS non supportata; trovata {0}, attesa {1}"
-
-msgid "Save WMS file"
-msgstr "Salva file WMS"
-
-msgid "Correlate to GPX"
-msgstr "Correlazione ai dati GPX"
-
-msgid "GPX Files (*.gpx *.gpx.gz)"
-msgstr "File GPX (*.gpx *.gpx.gz)"
-
-msgid "File {0} is loaded yet under the name \"{1}\""
-msgstr "Il file {0} è stato caricato già sotto il nome \"{1}\""
-
-msgid "Error while parsing {0}"
-msgstr "Impossibile interpretare {0}"
-
-msgid "Could not read \"{0}\""
-msgstr "Impossibile leggere \"{0}\""
-
-msgid ""
-"<html>Take a photo of your GPS receiver while it displays the "
-"time.<br>Display that photo here.<br>And then, simply capture the time you "
-"read on the photo and select a timezone<hr></html>"
-msgstr ""
-"<html>Fotografa il tuo ricevitore GPS mentre indica l''ora.<br>Visualizza "
-"qui la foto.<br>Copia l''ora dalla foto e seleziona la fascia "
-"oraria<hr></html>"
-
-msgid "Photo time (from exif):"
-msgstr "Ora di scatto della fotografia (dai dati exif):"
-
-msgid "Gps time (read from the above photo): "
-msgstr "Ora GPS (letto dalla fotografia precedente): "
-
-msgid "I am in the timezone of: "
-msgstr "Mi trovo nel fuso orario di: "
-
-msgid "No date"
-msgstr "Nessuna data"
-
-msgid "Open another photo"
-msgstr "Apri un''altra fotografia"
-
-msgid "Synchronize time from a photo of the GPS receiver"
-msgstr "Sincronizza l''ora da una fotografia del ricevitore GPS"
-
-msgid ""
-"Error while parsing the date.\n"
-"Please use the requested format"
-msgstr ""
-"Errore nell''interpretazione della data.\n"
-"Si prega di usare il formato richiesto"
-
-msgid "Invalid date"
-msgstr "Data non valida"
+msgid "Invalid date"
+msgstr "Data non valida"
 
 msgid "<No GPX track loaded yet>"
 msgstr "<Nessun tracciato GPX ancora caricato>"
@@ -9912,24 +10127,9 @@ msgstr "Fuso orario: "
 msgid "Offset:"
 msgstr "Scostamento:"
 
-msgid "Correlate images with GPX track"
-msgstr "Correla le immagini al tracciato GPX"
-
 msgid "Correlate"
 msgstr "Correla"
 
-msgid "Invalid timezone"
-msgstr "Fuso orario non valido"
-
-msgid "Invalid offset"
-msgstr "Scostamento non valido"
-
-msgid "Try Again"
-msgstr "Riprova"
-
-msgid "No images could be matched!"
-msgstr "Non è stato possibile correlare alcuna immagine!"
-
 msgid "No gpx selected"
 msgstr "Nessun tracciato gpx selezionato"
 
@@ -10146,9 +10346,6 @@ msgstr ""
 "\n"
 "temo GPS: {0}"
 
-msgid "JPEG images (*.jpg)"
-msgstr "Immagini JPEG (*.jpeg)"
-
 msgid "Show thumbnails"
 msgstr "Mostra le miniature"
 
@@ -10219,9 +10416,6 @@ msgstr "metri"
 msgid "Maximum area per request:"
 msgstr "Area massima per richiesta:"
 
-msgid "sq km"
-msgstr "km quadrati"
-
 msgid "Download near:"
 msgstr "Scarica vicino:"
 
@@ -10992,9 +11186,6 @@ msgstr "Chiudi la finestra delle preferenze e scarta le modifiche"
 msgid "Save the preferences and close the dialog"
 msgstr "Salva le preferenze e chiudi la finestra"
 
-msgid "Download plugins"
-msgstr "Scarica estensioni"
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 "È necessario riavviare JOSM perché alcune impostazioni abbiano effetto."
@@ -11002,6 +11193,9 @@ msgstr ""
 msgid "Would you like to restart now?"
 msgstr "Si desidera riavviare adesso?"
 
+msgid "Download plugins"
+msgstr "Scarica estensioni"
+
 msgid "Icon paths:"
 msgstr "Percorsi delle icone:"
 
@@ -11893,6 +12087,21 @@ msgstr "Visualizza confini"
 msgid "No bounding box was found for this layer."
 msgstr "Non è stato trovato alcun riquadro di selezione per questo livello."
 
+msgid "1. Enter getCapabilities URL"
+msgstr "1. Immetti la URL getCapabilities"
+
+msgid "2. Enter name for this layer"
+msgstr "2. Inserisci il nome per questo livello"
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr "{0} cache, dimensione totale cache : {1} bytes"
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr "dissolvenza delle immagini aeree"
 
@@ -11911,6 +12120,18 @@ msgstr "Forte"
 msgid "Sharpen (requires layer re-add): "
 msgstr "Contrasto (è necessario aggiungere nuovamente il livello): "
 
+msgid "Tile cache directory: "
+msgstr "Cartella di cache per i tasselli: "
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr "Dimensione massima della cache sul disco (per le immagini) in MB: "
+
+msgid "Maximum number of objects in memory cache: "
+msgstr "Massimo numero di oggetti nella memoria cache: "
+
+msgid "Tiles zoom offset:"
+msgstr "Offset di zoom delle tile:"
+
 msgid "Imagery Preferences"
 msgstr "Impostazioni delle immagini aeree"
 
@@ -11934,6 +12155,9 @@ msgstr "Fornitori di immagini aeree"
 msgid "Offset bookmarks"
 msgstr "Segnalibri degli scostamenti"
 
+msgid "Cache contents"
+msgstr "Contenuti cache"
+
 msgid "Imagery Background: Default"
 msgstr "Sfondo delle immagini aeree: predefinito"
 
@@ -11980,9 +12204,6 @@ msgstr ""
 "L''indirizzo URL dell''accordo di licenza con l''utente finale è mal "
 "formato: {0}"
 
-msgid "Projection"
-msgstr "Proiezione"
-
 msgid "Layer"
 msgstr "Livello"
 
@@ -12007,17 +12228,11 @@ msgstr "Livello max. di ingrandimento: "
 msgid "Add to slippymap chooser: "
 msgstr "Aggiungi al selezionatore slippymap: "
 
-msgid "Tile cache directory: "
-msgstr "Cartella di cache per i tasselli: "
-
 msgid "Maximum concurrent downloads: "
-msgstr ""
+msgstr "Scaricamenti simultanei massimi: "
 
 msgid "Maximum concurrent downloads per host: "
-msgstr ""
-
-msgid "Maximum elements in disk cache: "
-msgstr ""
+msgstr "Scaricamenti simultanei massimi per host: "
 
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
@@ -12026,20 +12241,11 @@ msgstr ""
 "Questo livello non supporta alcuna proiezione di JOSM,\n"
 "quindi non lo si può utilizzare. Questo messaggio non sarà più visualizzato."
 
-msgid "Downloader:"
-msgstr "Downloader:"
-
 msgid "Simultaneous connections:"
 msgstr "Connessioni simultanee:"
 
-msgid "Overlap tiles"
-msgstr "Sovrapponi i tasselli"
-
-msgid "% of east:"
-msgstr "% est:"
-
-msgid "% of north:"
-msgstr "% nord:"
+msgid "Tile size:"
+msgstr "Dimensioni tassello:"
 
 msgid "Auto save enabled"
 msgstr "salvataggio automatico abilitato"
@@ -12748,12 +12954,14 @@ msgid "Check interval (minutes):"
 msgstr "Intervallo di controllo (minuti):"
 
 msgid "Max age for closed notes (days):"
-msgstr ""
+msgstr "Età massima per le note chiuse (giorni)"
 
 msgid ""
 "Specifies the number of days a note needs to be closed to no longer be "
 "downloaded"
 msgstr ""
+"Specifica il numero dei giorni prima che una nota debba esser chiusa e non "
+"più scaricabile"
 
 msgid "Failed to retrieve OAuth Access Token from credential manager"
 msgstr ""
@@ -13099,6 +13307,14 @@ msgstr "Applica preimpostazione"
 msgid "New relation"
 msgstr "Nuova relazione"
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] "Modifica {0} oggetto"
@@ -13217,6 +13433,9 @@ msgstr "Visualizza la finestra di ricerca delle preimpostazioni"
 msgid "Search presets"
 msgstr "Ricerca preimpostazioni"
 
+msgid "Presets"
+msgstr "Preimpostazioni"
+
 msgid "Search for objects by preset"
 msgstr "Ricerca oggetti da preimpostazioni"
 
@@ -13534,6 +13753,9 @@ msgstr "<html>Impossibile leggere i file.<br>L''errore è:<br>{0}</html>"
 msgid "GeoJSON Files"
 msgstr "File GeoJSON"
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr "Livello ''{0}'' non supportato"
 
@@ -14142,6 +14364,9 @@ msgstr "File zip compressi OSM Server"
 msgid "WMS Files (*.wms)"
 msgstr "File WMS (*.wms)"
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr "Versione del file WMS non supportata; trovata {0}, attesa {1}"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -14216,24 +14441,28 @@ msgstr "Leggi la versione del protocollo"
 
 msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
+"Impossibile avviare controllo remoto del server IPv4 sulla porta  {0}: {1}"
 
 msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
+"Impossibile avviare controllo remoto del server IPv6 sulla porta  {0}: {1}"
 
 msgid "RemoteControl::Accepting remote connections on {0}:{1}"
-msgstr ""
+msgstr "RemoteControl::Accepting connessioni remote su {0}:{1}"
 
 msgid "RemoteControl::Server {0}:{1} stopped."
-msgstr ""
+msgstr "RemoteControl::Server {0}:{1} arrestato.."
 
 msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
+"Impossibile avviare IPv4 remotecontrol https server sulla porta {0}: {1}"
 
 msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
+"Impossibile avviare IPv6 remotecontrol https server sulla porta {0}: {1}"
 
 msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
-msgstr ""
+msgstr "RemoteControl::Accepting connessioni remote sicure su {0}:{1}"
 
 msgid "Remote Control has been asked to create a new node."
 msgstr "È stata richiesta al controllo remoto la creazione di un nuovo nodo."
@@ -14594,6 +14823,19 @@ msgstr[1] ""
 "L''estensione {0} richiede {1} altre estensioni che non sono state trovate. "
 "Le estensioni mancanti sono:"
 
+msgid "Download and restart"
+msgstr "Scarica e riavvia"
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] "Cliacca per scaricare il plugin mancante e riavviare JOSM"
+msgstr[1] "Cliacca per scaricare i plugin mancanti e riavviare JOSM"
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] "Clicca per continuare senza questo plugin"
+msgstr[1] "Clicca per continuare senza questi plugin"
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -15828,6 +16070,9 @@ msgstr "Aggiorna"
 msgid "Update directory listing."
 msgstr "Aggiorna contenuto della cartella."
 
+msgid "View"
+msgstr "Visualizza"
+
 msgid "Blue:"
 msgstr "Blu:"
 
@@ -15859,7 +16104,7 @@ msgid "HDM (Humanitarian OpenStreetMap Team)"
 msgstr "HDM (gruppo OSM a scopo umanitario)"
 
 msgid "Mapbox Satellite"
-msgstr ""
+msgstr "Mapbox Satellite"
 
 msgid "MapQuest Open Aerial"
 msgstr "MapQuest Open Aerial"
@@ -15867,8 +16112,8 @@ msgstr "MapQuest Open Aerial"
 msgid "OpenStreetMap GPS Traces"
 msgstr "Tracce GPS OpenStreetMap"
 
-msgid "OpenStreetMap (Mapnik)"
-msgstr "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
+msgstr "OpenStreetMap (Livello standard)"
 
 msgid "skobbler"
 msgstr "skobbler"
@@ -15879,9 +16124,6 @@ msgstr "OpenStreetMap (Mapnik Bianco & Nero)"
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr "OpenStreetMap (Mapnik, senza etichette)"
 
-msgid "skobbler heatmap"
-msgstr "Heatmap di Skobbler(c)"
-
 msgid "OpenCycleMap"
 msgstr "OpenCycleMap"
 
@@ -15910,52 +16152,52 @@ msgid "Strava running heatmap"
 msgstr "Mappa per la corsa di Strava (c)"
 
 msgid "Locator Overlay"
-msgstr ""
+msgstr "Locator Overlay"
 
 msgid "QA No Address"
-msgstr ""
+msgstr "QA Nessun Indirizzo"
 
 msgid "Waymarked Trails: Hiking"
-msgstr ""
+msgstr "Itinerari Segnalati: Escursioni"
 
 msgid "Waymarked Trails: Cycling"
-msgstr ""
+msgstr "Itinerari Segnalati: Ciclismo"
 
 msgid "Waymarked Trails: MTB"
-msgstr ""
+msgstr "Itinerari Segnalati: MTB"
 
 msgid "Waymarked Trails: Skating"
-msgstr ""
+msgstr "Itinerari Segnalati: Pattinaggio"
 
 msgid "Waymarked Trails: Horse Riding"
-msgstr ""
+msgstr "Itinerari Segnalati: Equitazione"
 
 msgid "Waymarked Trails: Winter Sports"
-msgstr ""
+msgstr "Itinerari Segnalati: Sport Invernali"
 
 msgid "OSM Inspector: Geometry"
-msgstr ""
+msgstr "OSM Inspector: Geometria"
 
 msgid "OSM Inspector: Tagging"
-msgstr ""
+msgstr "OSM Inspector: Tagging"
 
 msgid "OSM Inspector: Places"
 msgstr "OSM Inspector: Luoghi"
 
 msgid "OSM Inspector: Highways"
-msgstr ""
+msgstr "OSM Inspector: Highways"
 
 msgid "OSM Inspector: Multipolygon"
 msgstr "OSM Inspector: Multipoligono"
 
 msgid "OSM Inspector: Routing"
-msgstr ""
+msgstr "OSM Inspector: Routing"
 
 msgid "OSM Inspector: Addresses"
 msgstr "OSM Inspector: Indirizzi"
 
 msgid "OSM Inspector: Boundaries (EU)"
-msgstr ""
+msgstr "OSM Inspector: Boundaries (EU)"
 
 msgid "AGRI black-and-white 2.5m"
 msgstr "AGRI bianco-nero 2.5m"
@@ -15967,7 +16209,7 @@ msgid "basemap.at"
 msgstr "basemap.at"
 
 msgid "basemap.at Orthofoto"
-msgstr ""
+msgstr "basemap.at Orthofoto"
 
 msgid "Graz: Basiskarte (base map)"
 msgstr "Graz: Basiskarte (mappa base)"
@@ -15990,6 +16232,9 @@ msgstr "Vienna: Orthofoto (immagini aeree)"
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr "VoGIS: Immagine a colori veri 2012 (12cm)"
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr "VoGIS: Piano di destinazione del terreno"
 
@@ -16004,12 +16249,18 @@ msgid ""
 msgstr ""
 "Immagini aeree AGIV(laanderen) (copre la regione di Bruxelles) (2013)"
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr "SPW(allonie) PICC immagini numeriche"
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr "Immagini aeree SPW(allonie) 2012"
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr "Immagini aeree SPW(allonie) 2009"
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr "IBGE Mappa dei Settori Urbani"
 
@@ -16046,12 +16297,18 @@ msgstr "Rep.Ceca RUIAN terreni"
 msgid "Czech pLPIS"
 msgstr "Rep. Ceca pLPIS"
 
-msgid "Fugro (Denmark)"
-msgstr "Fugro (Danimarca)"
-
 msgid "Geodatastyrelsen (Denmark)"
 msgstr "Geodatastyrelsen (Danimarca)"
 
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr "Geodatastyrelsen DTK Kort25"
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr "Geodatastyrelsen Skyggekort 1.6m"
+
+msgid "Geodatastyrelsen Skærmkort"
+msgstr "Geodatastyrelsen Skærmkort"
+
 msgid "Stevns (Denmark)"
 msgstr "Stevns (Danimarca)"
 
@@ -16074,7 +16331,10 @@ msgid "Estonia Forestry (Maaamet)"
 msgstr "Estonia Forestry (Maaamet)"
 
 msgid "BANO"
-msgstr ""
+msgstr "BANO"
+
+msgid "BD Carthage"
+msgstr "BD Carthage"
 
 msgid "Bordeaux - 2012"
 msgstr "Bordeaux - 2012"
@@ -16083,7 +16343,7 @@ msgid "Cadastre"
 msgstr "Catasto"
 
 msgid "CRAIG - Auvergne 2013 - 25 cm"
-msgstr ""
+msgstr "CRAIG - Auvergne 2013 - 25 cm"
 
 msgid "CRIGE PACA Alpes-Maritimes 2009 - 40 cm"
 msgstr "CRIGE PACA Alpei-Marittime 2009 - 40 cm"
@@ -16100,8 +16360,8 @@ msgstr "Géobretagne - Morbihan 2010"
 msgid "Géolittoral - Orthophotos 2000"
 msgstr "Géolittoral - Ortofoto 2000"
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
-msgstr "Géolittoral V2 - Ortofoto 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
+msgstr "Géolittoral V2 - Orthofoto 2011-2014"
 
 msgid "Géolittoral - Sentiers"
 msgstr "Géolittoral - Sentieri"
@@ -16113,7 +16373,10 @@ msgid "Loire-Atlantique - Orthophotos 2012 - 20 cm"
 msgstr "Loire-Atlantique - Ortofoto 2012 - 20 cm"
 
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
-msgstr ""
+msgstr "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
+
+msgid "Route 500™©®"
+msgstr "Route 500™©®"
 
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr "Toulouse - Ortofoto 2013"
@@ -16127,12 +16390,6 @@ msgstr "Toulouse - Ortofoto 2007"
 msgid "Tours - Orthophotos 2013"
 msgstr "Tours - Ortofoto 2013"
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr "Tours - Ortofoto 2008-2010"
-
-msgid "Tours - Orthophotos 2008"
-msgstr "Tours - Ortofoto 2008"
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -16154,6 +16411,9 @@ msgstr "Amburgo (20 cm)"
 msgid "Hamburg (DK5)"
 msgstr "Amburgo (DK5)"
 
+msgid "Bavaria (80 cm)"
+msgstr "Bavaria (80 cm)"
+
 msgid "Bavaria (2 m)"
 msgstr "Bavaria (2 m)"
 
@@ -16161,7 +16421,7 @@ msgid "Stuttgart (Luftbild)"
 msgstr "Stuttgart (Luftbild)"
 
 msgid "Erlangen Luftbild (2013 6,25 cm)"
-msgstr ""
+msgstr "Erlangen Luftbild (2013 6,25 cm)"
 
 msgid "Erlangen 2011 Luftbild (5,0 cm)"
 msgstr "Erlangen 2011 Luftbild (5,0 cm)"
@@ -16188,11 +16448,8 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr "Maps4BW (LGL-BW, www.lgl-bw.de)"
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
-msgstr "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
+msgstr "NRW-Atlas: ALKIS"
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
 msgstr "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -16221,74 +16478,26 @@ msgstr "Ireland British War Office One-Inch 1941-43 GSGS 4136"
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr "Ireland Bartholomew Quarter-Inch 1940"
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr "Ireland Civil Parishes and Baronies - Memorial Atlas"
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr "Memorial Atlas of Ireland (1901) L.J. Richards"
+
 msgid "OSMIE Townlands"
-msgstr ""
+msgstr "OSMIE Townlands"
 
 msgid "OSMIE EDs"
-msgstr ""
+msgstr "OSMIE EDs"
 
 msgid "OSMIE Civil Parishes"
-msgstr ""
+msgstr "OSMIE Civil Parishes"
 
 msgid "OSMIE Baronies"
-msgstr ""
+msgstr "OSMIE Baronies"
 
 msgid "OSMIE Political"
-msgstr ""
-
-msgid "Ireland EEA GMES Urban Atlas"
-msgstr "Ireland EEA GMES Urban Atlas"
-
-msgid "Ireland EEA CORINE 2006"
-msgstr "Ireland EEA CORINE 2006"
-
-msgid "Antrim Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
-msgstr ""
-
-msgid "Carlow Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Clare Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Dublin Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Fermanagh Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Galway Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Kildare Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Leitrim Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Longford Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Offaly Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Sligo Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Tyrone Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Westmeath Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Wexford Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Wicklow Civil Parishes and Baronies"
-msgstr ""
+msgstr "OSMIE Political"
 
 msgid "Lodi - Italy"
 msgstr "Lodi - Italia"
@@ -16323,6 +16532,9 @@ msgstr "50cm ortofoto - Lettonia"
 msgid "20cm ortho - Latvia - Coastline"
 msgstr "20cm ortofoto - Lettonia - Linea costiera"
 
+msgid "1.cikla ortofotokarte - Latvia"
+msgstr "1.cikla ortofotokarte - Latvia"
+
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Lituania)"
 
@@ -16338,6 +16550,9 @@ msgstr "Lussemburgo Inspire Ferrovia"
 msgid "Luxembourg Inspire Roads"
 msgstr "Lussemburgo Inspire Strade"
 
+msgid "Luxembourg Inspire Water"
+msgstr "Lussemburgo Inspire Water"
+
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Delta del Niger Ott 2012 Landsat"
 
@@ -16353,9 +16568,15 @@ msgstr "Pangasinán/Bulacan (Phillipines HiRes)"
 msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr "Geoportal 2: Ortofotomapa (aerial image)"
 
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgstr "Geoportal 2: Ortofotomapa (immagini aeree) WMTS"
+
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr "Geoportal 2: PRNG (geo names)"
 
+msgid "Geoportal 2: ISOK hillshade"
+msgstr "Geoportal 2: ISOK hillshade"
+
 msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr "Będzin: Ortofotomapa 2013 (aerial image)"
 
@@ -16365,15 +16586,27 @@ msgstr "Będzin: Budynki (buildings)"
 msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr "Bytom: Ortofotomapa 2012 (aerial image)"
 
+msgid "Bytom: Fotoplan 2014 (aerial image)"
+msgstr "Bytom: Fotoplan 2014 (immagini aeree)"
+
 msgid "Bytom: Budynki (buildings)"
 msgstr "Bytom: Budynki (buildings)"
 
 msgid "Chorzów: Budynki (buildings)"
 msgstr "Chorzów: Budynki (buildings)"
 
+msgid "Częstochowa: Budynki (buildings)"
+msgstr "Częstochowa: Budynki (edifici)"
+
 msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr "Częstochowa: Ortofotomapa 2011 (aerial image)"
 
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgstr "Częstochowa: Ortofotomapa 2013 (immagini aeree)"
+
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgstr "Częstochowa: Ortofotomapa 2014 (immagini aeree)"
+
 msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr "Gliwice: Ortofotomapa 2013 (aerial image)"
 
@@ -16383,9 +16616,45 @@ msgstr "Gliwice: Budynki (buildings)"
 msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr "Katowice: Ortofotomapa (aerial image)"
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Katowice: Budynki (buildings)"
+msgstr "Katowice: Budynki (edifici)"
+
+msgid "Łódź: Budynki (buildings)"
+msgstr "Łódź: Budynki (edifici)"
+
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr "Łódź: Ortofotomapa (aerial image)"
 
+msgid "Powiat dębicki: Budynki (buildings)"
+msgstr "Powiat dębicki: Budynki (edifici)"
+
+msgid "Powiat lubaczowski: Budynki (buildings)"
+msgstr "Powiat lubaczowski: Budynki (edifici)"
+
+msgid "Powiat łańcucki: Budynki (buildings)"
+msgstr "Powiat łańcucki: Budynki (edifici)"
+
+msgid "Powiat poznański: Budynki (buildings)"
+msgstr "Powiat poznański: Budynki (edifici)"
+
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgstr "Powiat poznański: Ortofotomapa (Immagine Aerea)"
+
+msgid "Powiat rzeszowski: Budynki (buildings)"
+msgstr "Powiat rzeszowski: Budynki (edifici)"
+
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgstr "Powiat rzeszowski: Ortofotomapa (Immagine Aerea)"
+
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr "Powiat stalowowolski: Budynki (edifici)"
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr "Przemyśl: Budynki (edifici)"
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgstr "Przemyśl: Ortofotomapa (Immagine Aerea)"
+
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
 msgstr "Ruda Śląska: Ortofotomapa (aerial image)"
 
@@ -16398,9 +16667,18 @@ msgstr "Rzeszów: Budynki (buildings)"
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr "Siemianowice Śląskie: Budynki (edifici)"
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr "Świętochłowice: Ortofotomapa 2008 (Immagine Aerea)"
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr "Świętochłowice: Ortofotomapa 2012 (Immagine Aerea)"
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr "Zabrze: Ortofotomapa 2011 (aerial image)"
 
@@ -16441,10 +16719,10 @@ msgid "Slovakia Historic Maps"
 msgstr "Slovakia Historic Maps"
 
 msgid "RABA-KGZ: Slovenia farmland use"
-msgstr ""
+msgstr "RABA-KGZ: Slovenia uso terreno agricolo"
 
 msgid "RABA-KGZ: Slovenia built-up areas"
-msgstr ""
+msgstr "RABA-KGZ: Slovenia aree edificate"
 
 msgid "South Africa CD:NGI Aerial"
 msgstr "South Africa CD:NGI Aerial"
@@ -16530,6 +16808,21 @@ msgstr "Bonvillars Orthophoto 2013"
 msgid "Fiez Orthophoto 2013"
 msgstr "Fiez Orthophoto 2013"
 
+msgid "Taiwan e-Map Open Data"
+msgstr "Taiwan e-Map Open Data"
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr "Taiwan e-Map Open Data (con Contour Line)"
+
+msgid "Taiwan Village Boundaries"
+msgstr "Taiwan Confini di villaggio"
+
+msgid "Taiwan Land-Section Data"
+msgstr "Taiwan Land-Section Data"
+
+msgid "NLSC Open Data WMTS"
+msgstr "NLSC Open Data WMTS"
+
 msgid "MSR Maps Topo"
 msgstr "MSR Maps Topo"
 
@@ -16537,16 +16830,16 @@ msgid "MSR Maps Urban"
 msgstr "MSR Maps Urban"
 
 msgid "USGS Topographic Maps"
-msgstr ""
+msgstr "USGS Mappe topografiche"
 
 msgid "USGS Large Scale Imagery"
 msgstr "USGS Large Scale Imagery"
 
 msgid "TIGER 2012 Roads Overlay"
-msgstr ""
+msgstr "TIGER 2012 Roads Overlay"
 
-msgid "New & Misaligned TIGER Roads (2014)"
-msgstr ""
+msgid "New & Misaligned TIGER Roads (2015)"
+msgstr "TIGER Roads nuova o disallineata (2015)"
 
 msgid "MassGIS L3 Parcels"
 msgstr "MassGIS L3 Parcels"
@@ -16893,6 +17186,13 @@ msgstr ""
 "personalizzati. Consulta il collegamento per i comandi standard (arc, circle "
 "etc.)"
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+"Fornisce la biblioteca Commons Imaging. Non prevista per essere installata "
+"direttamente dagli utenti, ma piuttosto come una dipendenza per altri plugin."
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr "(Attenzione: Sperimentale!) Strumento per fondere (unire) i dati."
 
@@ -17000,13 +17300,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr "Modalità mappa regolazione mmagini aeree in stile WMSPlugin"
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-"Questo plugin sperimentale consente a JOSM di memorizzare la cache dei "
-"tasselli in file di database, non in cartelle di cache enormi"
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -17082,8 +17375,8 @@ msgstr ""
 "possibile creare, chiudere, invalidare, riaprire e commentare i bug report "
 "utilizzando questo plugin."
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
-msgstr ""
+msgid "Allows the user to work with pictures hosted at mapillary.com"
+msgstr "Abilita l''utente a lavorare con immagini caricate su mapillary.com"
 
 msgid ""
 "Provide a measurement dialog and a layer to measure length and angle of "
@@ -17101,9 +17394,6 @@ msgstr "Unisci le parti sovrapposte dei percorsi."
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr "Aggiunge divieti di svolta a sinistra per insiemi di 4 o 5 percorsi"
 
-msgid "Simplifies download from different read-only APIs."
-msgstr "Semplifica lo scaricamento da API in sola lettura differenti."
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 "Permette di attribuire in una sola volta le etichette a tutti gli oggetti "
@@ -17155,6 +17445,9 @@ msgid ""
 "Recommends categories/tags on newly created OSM entities by analysing "
 "spatial entities into training features and using SVM classification"
 msgstr ""
+"Categorie/Etichette consigliate per le nuove entità OSM create da entità di "
+"analisi spaziale con caratteristiche di addestramento e usando la "
+"classificazione SVM"
 
 msgid "Import/export OSM data in PBF format"
 msgstr "Importa/esporta dati OSM in formato PBF"
@@ -17204,6 +17497,17 @@ msgstr ""
 "Questa estensione semplifica la mappatura e la modifica degli itinerari dei "
 "trasporti pubblici"
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+"Mostra le fermate dei percorsi di trasporto pubblico selezionati come grafico"
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+"RasterFiltersPlugin permette di scegliere a applicare immagini per filtrare "
+"alcuni livelli"
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 "Pannello di creazione e modifica della relazione e del multi-poligono."
@@ -17254,6 +17558,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr "Modifica caratteristiche per OpenSeaMap"
 
+msgid "Allows to draw splines"
+msgstr "Abilita a disegnare curve"
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -17357,9 +17664,6 @@ msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 "Abilita la ricerca di un punto del percorso importato da un file gpx."
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr "Seleziona una sequenza di percorsi connessi non ramificati"
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr "Semplifica il collegamento degli oggetti OSM agli articoli Wikipedia"
 
@@ -17428,7 +17732,7 @@ msgid "excellent"
 msgstr "eccellente"
 
 msgid "Thin Rollers: rollerblade, skateboard"
-msgstr ""
+msgstr "Thin Rollers: rollerblade, skateboard"
 
 msgid "good"
 msgstr "buona"
@@ -17440,37 +17744,37 @@ msgid "intermediate"
 msgstr "intermedia"
 
 msgid "Wheels: city bike, wheelchair, scooter"
-msgstr ""
+msgstr "Ruote: bici da città, sedia a rotelle, scooter"
 
 msgid "bad"
-msgstr ""
+msgstr "cattivo"
 
 msgid "Robust Wheels: trekking bike, car, rickshaw"
-msgstr ""
+msgstr "Ruote Pesanti: bici da trekking, auto, rickshaw"
 
 msgid "very_bad"
-msgstr ""
+msgstr "molto_cattivo"
 
 msgid "High Clearance: light duty off-road vehicle"
-msgstr ""
+msgstr "Assetto Elevato: fuoristrada leggeri"
 
 msgid "horrible"
-msgstr ""
+msgstr "pessimo"
 
 msgid "Off-Road: heavy duty off-road vehicle"
-msgstr ""
+msgstr "Fuoristrada: fuoristrada pesanti"
 
 msgid "very_horrible"
-msgstr ""
+msgstr "very_horrible"
 
 msgid "Specialized off-road: tractor, ATV"
-msgstr ""
+msgstr "Fuoristrada Speciali: trattori, ATV"
 
 msgid "impassable"
-msgstr ""
+msgstr "impraticabile"
 
 msgid "No wheeled vehicle"
-msgstr ""
+msgstr "Nessun veicolo a ruote"
 
 msgctxt "riding"
 msgid "pitch"
@@ -17771,6 +18075,14 @@ msgid "basketball"
 msgstr "pallacanestro"
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr "beachvolleyball"
+
+msgctxt "sport"
+msgid "billiards"
+msgstr "Biliardo"
+
+msgctxt "sport"
 msgid "boules"
 msgstr "bocce"
 
@@ -17795,10 +18107,6 @@ msgid "cricket"
 msgstr "cricket"
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr "reti da cricket"
-
-msgctxt "sport"
 msgid "croquet"
 msgstr "croquet"
 
@@ -17815,6 +18123,10 @@ msgid "equestrian"
 msgstr "equitazione"
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr "pattinaggio su prato"
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr "sport gaelici"
 
@@ -17831,14 +18143,26 @@ msgid "handball"
 msgstr "pallamano"
 
 msgctxt "sport"
-msgid "hockey"
-msgstr "hockey"
-
-msgctxt "sport"
 msgid "horse_racing"
 msgstr "ippodromo"
 
 msgctxt "sport"
+msgid "ice_hockey"
+msgstr "pattinaggio sul ghiaccio"
+
+msgctxt "sport"
+msgid "karting"
+msgstr "kart"
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr "model_aerodrome"
+
+msgctxt "sport"
+msgid "motocross"
+msgstr "motocross"
+
+msgctxt "sport"
 msgid "motor"
 msgstr "autodromo"
 
@@ -17851,6 +18175,10 @@ msgid "racquet"
 msgstr "racquet"
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr "rc_car"
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr "rugby a 13 (rugby league)"
 
@@ -17860,7 +18188,11 @@ msgstr "rugby a 15 (rugby union)"
 
 msgctxt "sport"
 msgid "running"
-msgstr ""
+msgstr "running"
+
+msgctxt "sport"
+msgid "safety_training"
+msgstr "safety_training"
 
 msgctxt "sport"
 msgid "shooting"
@@ -17890,6 +18222,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr "tennis"
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr "Pallavolo"
+
+msgctxt "sport"
+msgid "9pin"
+msgstr "9pin"
+
+msgctxt "sport"
+msgid "10pin"
+msgstr "10pin"
+
 msgid "Fee"
 msgstr "Tariffa"
 
@@ -17997,13 +18341,13 @@ msgid "deciduous"
 msgstr "deciduo (caducifoglie)"
 
 msgid "Plants that are leafless for a certain period during the year."
-msgstr ""
+msgstr "Piante che non hanno foglie per un periodo dell''anno"
 
 msgid "evergreen"
 msgstr "sempreverde"
 
 msgid "Plants that are never entirely without green foliage."
-msgstr ""
+msgstr "Piante che non sono mai completamente senza foglie verdi"
 
 msgid "semi_deciduous"
 msgstr "semi deciduo"
@@ -18012,6 +18356,8 @@ msgid ""
 "Plants that lose their foliage for a very short period, when old leaves fall "
 "off and new foliage growth is starting."
 msgstr ""
+"Piante che perdono il fogliame per un brevissimo periodo, quando le foglie "
+"vecchie cadono stanno già germogliando le nuove."
 
 msgid "semi_evergreen"
 msgstr "semi sempreverde"
@@ -18020,9 +18366,11 @@ msgid ""
 "Plants that lose most, but not all, of their foliage for a fraction of the "
 "year."
 msgstr ""
+"Piante che perdono la maggior parte del fogliame, ma non tutto, per un "
+"brevissimo periodo dell''anno."
 
 msgid "Habitat with evergreen and deciduous vegetation."
-msgstr ""
+msgstr "Ambiente di sempreverdi e vegetazione decidua."
 
 msgid "bahai"
 msgstr "bahaista"
@@ -18079,7 +18427,7 @@ msgid "evangelical"
 msgstr "evangelica"
 
 msgid "greek_catholic"
-msgstr ""
+msgstr "greek_catholic"
 
 msgid "jehovahs_witness"
 msgstr "Testimoni di Geova"
@@ -18094,7 +18442,7 @@ msgid "mormon"
 msgstr "mormone"
 
 msgid "old_catholic"
-msgstr ""
+msgstr "old_catholic"
 
 msgid "orthodox"
 msgstr "ortodossa"
@@ -18112,7 +18460,7 @@ msgid "quaker"
 msgstr "quacchera"
 
 msgid "roman_catholic"
-msgstr ""
+msgstr "roman_catholic"
 
 msgid "shia"
 msgstr "sciita"
@@ -18222,25 +18570,25 @@ msgid "Is the water body intermittent (disappears seasonally)?"
 msgstr "E'' il corpo d''acqua intermittente (scompare stagionalmente)?"
 
 msgid "culvert"
-msgstr ""
+msgstr "canale sotterraneo"
 
 msgid "Water access rules:"
-msgstr ""
+msgstr "Regole di accesso dell''acqua:"
 
 msgid "Ship"
-msgstr ""
+msgstr "Nave"
 
 msgid "designated"
 msgstr "specifico"
 
 msgid "Boat"
-msgstr ""
+msgstr "Barca"
 
 msgid "Motorboat"
-msgstr ""
+msgstr "Barca a motore"
 
 msgid "Canoe"
-msgstr ""
+msgstr "Canoa"
 
 msgid "Streets"
 msgstr "Strade"
@@ -18281,6 +18629,9 @@ msgstr "Svincolo terziario"
 msgid "Unclassified"
 msgstr "Non classificata"
 
+msgid "Street has no name"
+msgstr "Strada senza nome"
+
 msgid "Passing Places"
 msgstr "Slarghi per l''incrocio di veicoli"
 
@@ -18359,6 +18710,9 @@ msgstr ""
 "Corsia di emergenza accanto ad una lunga discesa, per camion e altri veicoli "
 "per fermarsi in modo sicuro in seguito ad un guasto ai freni."
 
+msgid "Raceway"
+msgstr "Circuito"
+
 msgid "Road (Unknown Type)"
 msgstr "Strada (tipo sconosciuto)"
 
@@ -18449,6 +18803,8 @@ msgid ""
 "Some road types already imply some access restrictions which should not be "
 "set again."
 msgstr ""
+"Alcuni tipi di strade implicano già alcune restrizioni di accesso che non "
+"dovrebbero essere impostate di nuovo."
 
 msgid "No exit (cul-de-sac)"
 msgstr "Senza uscita (cul-de-sac)"
@@ -18733,19 +19089,19 @@ msgid "Amount of Steps"
 msgstr "Numero di gradini"
 
 msgid "Ramp"
-msgstr ""
+msgstr "Rampa"
 
 msgid "Stroller ramp"
-msgstr ""
+msgstr "Rampa passeggino"
 
 msgid "Bicycle ramp"
-msgstr ""
+msgstr "Rampa biciclette"
 
 msgid "Wheelchair ramp"
-msgstr ""
+msgstr "Rampa sedie a rotelle"
 
 msgid "Luggage ramp"
-msgstr ""
+msgstr "Rampa bagagli"
 
 msgid "automatic"
 msgstr "automatica"
@@ -18754,16 +19110,16 @@ msgid "manual"
 msgstr "manuale"
 
 msgid "Handrail"
-msgstr ""
+msgstr "Corrimano"
 
 msgid "Left handrail"
-msgstr ""
+msgstr "Corrimano Sinistro"
 
 msgid "Center handrail"
-msgstr ""
+msgstr "Corrimano centrale"
 
 msgid "Right handrail"
-msgstr ""
+msgstr "Corrimano destro"
 
 msgid "Waypoints"
 msgstr "Punti del percorso"
@@ -18865,7 +19221,7 @@ msgid "Pedestrian Crossing"
 msgstr "Attraversamento pedonale"
 
 msgid "In case of traffic signals:"
-msgstr ""
+msgstr "In caso di segnali stradali:"
 
 msgid "Traffic Calming"
 msgstr "Dissuasore di velocità"
@@ -18912,6 +19268,12 @@ msgstr "Autovelox"
 msgid "Traffic Mirror"
 msgstr "specchio per il traffico"
 
+msgid "Highway milestone"
+msgstr "Pietra miliare (strade)"
+
+msgid "Distance (kilometers)"
+msgstr "Distanza (chilometri)"
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr "Incrocio con nome"
@@ -19103,6 +19465,11 @@ msgstr "Colonnato"
 msgid "Avalanche Protector"
 msgstr "Paravalanghe"
 
+msgctxt "main group"
+msgid "Water"
+msgstr "Acqua"
+
+msgctxt "sub group"
 msgid "Water"
 msgstr "Acqua"
 
@@ -19158,6 +19525,10 @@ msgstr "Serbatoio"
 msgid "Covered Reservoir"
 msgstr "Bacino coperto"
 
+msgctxt "natural"
+msgid "Water"
+msgstr "Acqua"
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr "Un corpo d''acqua stagnante, come un lago o un stagno."
 
@@ -19301,11 +19672,125 @@ msgid "Marina"
 msgstr "Porto turistico"
 
 msgid "Dump Station"
-msgstr ""
+msgstr "Stazione di Smaltimento"
 
 msgid "public"
 msgstr "pubblico"
 
+msgid "Marine Fuel"
+msgstr "Marine Fuel"
+
+msgid "Agip"
+msgstr "Agip"
+
+msgid "Aral"
+msgstr "Aral"
+
+msgid "Avia"
+msgstr "Avia"
+
+msgid "BP"
+msgstr "BP"
+
+msgid "Chevron"
+msgstr "Chevron"
+
+msgid "Citgo"
+msgstr "Citgo"
+
+msgid "Eni"
+msgstr "Eni"
+
+msgid "Esso"
+msgstr "Esso"
+
+msgid "Exxon"
+msgstr "Exxon"
+
+msgid "Gulf"
+msgstr "Gulf"
+
+msgid "Mobil"
+msgstr "Mobil"
+
+msgid "OMV"
+msgstr "OMV"
+
+msgid "Petro-Canada"
+msgstr "Petro-Canada"
+
+msgid "Pioneer"
+msgstr "Pioneer"
+
+msgid "Q8"
+msgstr "Q8"
+
+msgid "Repsol"
+msgstr "Repsol"
+
+msgid "Shell"
+msgstr "Shell"
+
+msgid "Socar"
+msgstr "Socar"
+
+msgid "Statoil"
+msgstr "Statoil"
+
+msgid "Sunoco"
+msgstr "Sunoco"
+
+msgid "Tamoil"
+msgstr "Tamoil"
+
+msgid "Texaco"
+msgstr "Texaco"
+
+msgid "Total"
+msgstr "Total"
+
+msgid "Independent"
+msgstr "Indipendente"
+
+msgid "Fuel types:"
+msgstr "Tipi di carburante:"
+
+msgid "Diesel"
+msgstr "Diesel"
+
+msgid "Bio Diesel"
+msgstr "Bio Diesel"
+
+msgid "Octane 80"
+msgstr "80 ottani"
+
+msgid "Octane 91"
+msgstr "91 ottani"
+
+msgid "Octane 92"
+msgstr "92 ottani"
+
+msgid "Octane 95"
+msgstr "95 ottani"
+
+msgid "Octane 98"
+msgstr "98 ottani"
+
+msgid "Octane 100"
+msgstr "100 ottani"
+
+msgid "E10 (10% Ethanol mix)"
+msgstr "E10 (miscela 10% etanolo)"
+
+msgid "E85 (85% Ethanol mix)"
+msgstr "E85 (miscela 85% etanolo)"
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr "GPL (gas di petrolio liquefatto)"
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr "GNC (gas naturale compresso)"
+
 msgid "Pier"
 msgstr "Passerella"
 
@@ -19422,6 +19907,9 @@ msgstr "Respingente"
 msgid "Railway Switch"
 msgstr "Scambio ferroviario"
 
+msgid "Railway milestone"
+msgstr "Pietra miliare (ferrovie)"
+
 msgid "Aerialway"
 msgstr "Impianto di risalita"
 
@@ -19532,146 +20020,35 @@ msgstr "Spazi per famiglie"
 msgid "See the Wiki for other capacity:[types]=*."
 msgstr "Vedere il Wiki per un''altra capacità:[tipi]=*."
 
-msgid "Parking Space"
-msgstr "Spazio parcheggio"
-
-msgid "Capacity"
-msgstr "Capacità"
-
-msgid "Covered (with roof)"
-msgstr "Coperto (con tetto)"
-
-msgid "Parking Entrance"
-msgstr "Ingresso parcheggio"
-
-msgid "Fuel"
-msgstr "Stazione di rifornimento"
-
-msgid "Agip"
-msgstr "Agip"
-
-msgid "Aral"
-msgstr "Aral"
-
-msgid "Avia"
-msgstr "Avia"
-
-msgid "BP"
-msgstr "BP"
-
-msgid "Chevron"
-msgstr "Chevron"
-
-msgid "Citgo"
-msgstr "Citgo"
-
-msgid "Eni"
-msgstr "Eni"
-
-msgid "Esso"
-msgstr "Esso"
-
-msgid "Exxon"
-msgstr "Exxon"
-
-msgid "Gulf"
-msgstr "Gulf"
-
-msgid "Mobil"
-msgstr "Mobil"
-
-msgid "OMV"
-msgstr "OMV"
-
-msgid "Petro-Canada"
-msgstr "Petro-Canada"
-
-msgid "Pioneer"
-msgstr "Pioneer"
-
-msgid "Q8"
-msgstr "Q8"
-
-msgid "Repsol"
-msgstr "Repsol"
-
-msgid "Shell"
-msgstr "Shell"
-
-msgid "Socar"
-msgstr "Socar"
-
-msgid "Statoil"
-msgstr "Statoil"
-
-msgid "Sunoco"
-msgstr "Sunoco"
-
-msgid "Tamoil"
-msgstr "Tamoil"
-
-msgid "Texaco"
-msgstr "Texaco"
-
-msgid "Total"
-msgstr "Total"
-
-msgid "Independent"
-msgstr "Indipendente"
-
-msgid "With shop"
-msgstr "Con negozio"
-
-msgid "convenience"
-msgstr "drogheria"
-
-msgid "kiosk"
-msgstr "chiosco"
-
-msgid "Fuel types:"
-msgstr "Tipi di carburante:"
-
-msgid "Diesel"
-msgstr "Diesel"
-
-msgid "Bio Diesel"
-msgstr "Bio Diesel"
-
-msgid "Diesel (Gas To Liquid - ultimate diesel)"
-msgstr "Diesel (Gas To Liquid - ultimate diesel)"
-
-msgid "Diesel for Heavy Good Vehicles"
-msgstr "Diesel per veicoli di trasporto merci pesanti"
-
-msgid "Octane 80"
-msgstr "80 ottani"
+msgid "Parking Space"
+msgstr "Spazio parcheggio"
 
-msgid "Octane 91"
-msgstr "91 ottani"
+msgid "Capacity"
+msgstr "Capacità"
 
-msgid "Octane 92"
-msgstr "92 ottani"
+msgid "Covered (with roof)"
+msgstr "Coperto (con tetto)"
 
-msgid "Octane 95"
-msgstr "95 ottani"
+msgid "Parking Entrance"
+msgstr "Ingresso parcheggio"
 
-msgid "Octane 98"
-msgstr "98 ottani"
+msgid "Fuel"
+msgstr "Stazione di rifornimento"
 
-msgid "Octane 100"
-msgstr "100 ottani"
+msgid "With shop"
+msgstr "Con negozio"
 
-msgid "E10 (10% Ethanol mix)"
-msgstr "E10 (miscela 10% etanolo)"
+msgid "convenience"
+msgstr "drogheria"
 
-msgid "E85 (85% Ethanol mix)"
-msgstr "E85 (miscela 85% etanolo)"
+msgid "kiosk"
+msgstr "chiosco"
 
-msgid "LPG (Liquefied petroleum gas)"
-msgstr "GPL (gas di petrolio liquefatto)"
+msgid "Diesel (Gas To Liquid - ultimate diesel)"
+msgstr "Diesel (Gas To Liquid - ultimate diesel)"
 
-msgid "CNG (Compressed Natural Gas)"
-msgstr "GNC (gas naturale compresso)"
+msgid "Diesel for Heavy Good Vehicles"
+msgstr "Diesel per veicoli di trasporto merci pesanti"
 
 msgid "1/25 mix (mofa/moped)"
 msgstr "Miscela 1/25 (mofa/moped)"
@@ -19680,13 +20057,13 @@ msgid "1/50 mix (mofa/moped)"
 msgstr "Miscela 1/50 (mofa/moped)"
 
 msgid "Fuel cards:"
-msgstr ""
+msgstr "Fuel cards:"
 
 msgid "DKV"
 msgstr "DKV"
 
 msgid "Routex"
-msgstr ""
+msgstr "Routex"
 
 msgid "UTA"
 msgstr "UTA"
@@ -19818,7 +20195,7 @@ msgid "Public Bicycle Repair Station"
 msgstr "Stazione pubbblica di riparazione biciclette"
 
 msgid "Chain tool"
-msgstr ""
+msgstr "Smagliacatena"
 
 msgid "Public Transport"
 msgstr "Trasporto pubblico"
@@ -19891,9 +20268,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr "#CD853F"
 
-msgid "route segment"
-msgstr "segmento di itinerario"
-
 msgid "stop position"
 msgstr "punto di fermata"
 
@@ -19912,6 +20286,9 @@ msgstr "banchina (solo uscita)"
 msgid "platform (entry only)"
 msgstr "banchina (solo entrata)"
 
+msgid "route segment"
+msgstr "segmento di itinerario"
+
 msgid "Route Master"
 msgstr "Route master"
 
@@ -20043,7 +20420,7 @@ msgid "Tactile Paving"
 msgstr "Pavimentazione tattile"
 
 msgid "incorrect"
-msgstr ""
+msgstr "non corretto"
 
 msgid "Bus Platform"
 msgstr "Banchina autobus"
@@ -20076,7 +20453,7 @@ msgid "Apron"
 msgstr "Parcheggio aeromobili"
 
 msgid "Plane Parking Position"
-msgstr ""
+msgstr "Posizione Parcheggio Aereo"
 
 msgid "Hangar"
 msgstr "Hangar"
@@ -20114,11 +20491,17 @@ msgstr "Hotel"
 msgid "Stars"
 msgstr "Stelle"
 
+msgid "Rooms"
+msgstr "Stanze"
+
+msgid "Beds"
+msgstr "Letti"
+
 msgid "Motel"
 msgstr "Motel"
 
 msgid "Guest House/Bed & Breakfast"
-msgstr ""
+msgstr "Pensione/Bed & Breakfast"
 
 msgid "Chalet"
 msgstr "Casetta (chalet)"
@@ -20204,11 +20587,14 @@ msgstr "tramezzino"
 msgid "sushi"
 msgstr "sushi"
 
+msgid "steak_house"
+msgstr "Griglieria"
+
 msgid "Microbrewery"
 msgstr "Microbirrificio"
 
 msgid "Outdoor seating"
-msgstr ""
+msgstr "Outdoor seating"
 
 msgid "Fast Food"
 msgstr "Fast food"
@@ -20384,10 +20770,10 @@ msgid "Movie Theater/Cinema"
 msgstr "Cinematografo"
 
 msgid "Drive-in theater"
-msgstr ""
+msgstr "Teatro drive-in"
 
 msgid "3D"
-msgstr ""
+msgstr "3D"
 
 msgid "Number of screens"
 msgstr "Numero di schermi"
@@ -20419,6 +20805,9 @@ msgstr "Sauna"
 msgid "Horse Riding"
 msgstr "Corse di cavalli"
 
+msgid "Casino"
+msgstr "Casinò"
+
 msgid "Brothel"
 msgstr "Bordello"
 
@@ -20674,7 +21063,7 @@ msgid "Police"
 msgstr "Polizia"
 
 msgid "Ranger Station"
-msgstr ""
+msgstr "Stazione dei ranger"
 
 msgid "Fire Station"
 msgstr "Vigili del fuoco"
@@ -20803,13 +21192,13 @@ msgid "Collection times"
 msgstr "Orari di raccolta"
 
 msgid "Mo-Sa 09:00"
-msgstr ""
+msgstr "Lun-Sab 09:00"
 
 msgid "Mo-Fr 17:30; Sa 12:00"
-msgstr ""
+msgstr "Lun-Ven 17:30; Sab 12:00"
 
 msgid "Mo-Fr 15:00,19:00; Sa 15:10; Su 10:30"
-msgstr ""
+msgstr "Lun-Ven 15:00,19:00; Sab 15:10; Dom 10:30"
 
 msgid "Drive through"
 msgstr "Attraversamento in auto (drive-through)"
@@ -20906,8 +21295,8 @@ msgstr "Visualizza la pressione atmosferica"
 msgid "Shows humidity"
 msgstr "Visualizza l''umidità"
 
-msgid "Recycling"
-msgstr "Riciclaggio"
+msgid "Recycling Container"
+msgstr "Contenitore Riciclaggio"
 
 msgid "Batteries"
 msgstr "Batterie"
@@ -20915,20 +21304,47 @@ msgstr "Batterie"
 msgid "Cans"
 msgstr "Lattine"
 
+msgid "Cardboard"
+msgstr "Cartoncino"
+
+msgid "Electrical Appliances"
+msgstr "Apparecchi Elettrici"
+
 msgid "Glass"
 msgstr "Vetro"
 
+msgid "Glass Bottles"
+msgstr "Bottiglie Vetro"
+
+msgid "Green Waste"
+msgstr "Rifiuti Verdi"
+
 msgid "Paper"
 msgstr "Carta"
 
+msgid "Plastic"
+msgstr "Plastica"
+
+msgid "Plastic Bottles"
+msgstr "Bottiglie di plastiaca"
+
+msgid "Plastic Packaging"
+msgstr "Imballi di plastica"
+
 msgid "Scrap Metal"
 msgstr "Rottami metallici"
 
-msgid "container"
-msgstr "contenitore"
+msgid "Shoes"
+msgstr "Calzature"
+
+msgid "Small Appliances"
+msgstr "Piccoli Apparecchi"
+
+msgid "Waste"
+msgstr "Rifiuti"
 
-msgid "centre"
-msgstr "centro"
+msgid "Recycling Centre"
+msgstr "Centro di riciclaggio"
 
 msgid "Waste Basket/Trash Can"
 msgstr "Cestino"
@@ -20937,16 +21353,16 @@ msgid "Waste Disposal/Dumpster"
 msgstr "Cassonetto"
 
 msgid "Sanitary Dump Station"
-msgstr ""
+msgstr "Discarica Liquami sanitari"
 
 msgid "Suction pumpout"
-msgstr ""
+msgstr "Suction pumpout"
 
 msgid "Gravity drain for hose"
-msgstr ""
+msgstr "Gravity drain for hose"
 
 msgid "Casette or Elsan Disposal"
-msgstr ""
+msgstr "Casette o Smaltimento Elsan"
 
 msgid "Operation times"
 msgstr "Orario di accensione"
@@ -21083,13 +21499,13 @@ msgid "Pitch"
 msgstr "Campo sportivo"
 
 msgid "artificial_turf"
-msgstr ""
+msgstr "erba_artificiale"
 
 msgid "decoturf"
-msgstr ""
+msgstr "decoturf"
 
 msgid "tartan"
-msgstr ""
+msgstr "tartan"
 
 msgid "Racetrack"
 msgstr "Circuito (pista)"
@@ -21131,6 +21547,9 @@ msgstr "Tiro con l''arco"
 msgid "Track and Field Athletics"
 msgstr "Stadio di atletica"
 
+msgid "Running"
+msgstr "Running"
+
 msgid "Climbing"
 msgstr "Arrampicata"
 
@@ -21199,10 +21618,10 @@ msgid "skitour"
 msgstr "sci alpinismo"
 
 msgid "sled"
-msgstr ""
+msgstr "slitta"
 
 msgid "sleigh"
-msgstr ""
+msgstr "slitta"
 
 msgid "snow_park"
 msgstr "snow_park"
@@ -21306,12 +21725,18 @@ msgstr "Baseball"
 msgid "Basketball"
 msgstr "Pallacanestro"
 
+msgid "Handball"
+msgstr "Pallamano"
+
 msgid "Volleyball"
 msgstr "Pallavolo"
 
 msgid "Beach Volleyball"
 msgstr "Beach Volley"
 
+msgid "Billiards"
+msgstr "Biliardi"
+
 msgid "Golf"
 msgstr "Golf"
 
@@ -21327,14 +21752,14 @@ msgstr "Bocce su erba"
 msgid "Cricket"
 msgstr "Cricket"
 
-msgid "Cricket Nets"
-msgstr "Reti da cricket"
-
 msgid "Croquet"
 msgstr "Croquet"
 
-msgid "Hockey"
-msgstr "Hockey"
+msgid "Field Hockey"
+msgstr "Pattinaggio su prato"
+
+msgid "Ice Hockey"
+msgstr "Hockey sul ghiaccio"
 
 msgid "Pelota"
 msgstr "Pelota"
@@ -21357,9 +21782,6 @@ msgstr "Karting (Go kart)"
 msgid "Motocross"
 msgstr "Motocross"
 
-msgid "Safety Training"
-msgstr "Corso di guida sicura"
-
 msgid "Model Aerodrome"
 msgstr "Aerodromo per modellini"
 
@@ -21378,9 +21800,6 @@ msgstr "tracciato"
 msgid "RC Car"
 msgstr "Automobili radiocomandate"
 
-msgid "Raceway"
-msgstr "Circuito"
-
 msgid "Man Made"
 msgstr "Artificiale"
 
@@ -21414,7 +21833,7 @@ msgstr "bambini"
 
 msgctxt "building"
 msgid "farm_auxiliary"
-msgstr ""
+msgstr "farm_auxiliary"
 
 msgctxt "building"
 msgid "transportation"
@@ -21450,7 +21869,15 @@ msgstr "rimessa"
 
 msgctxt "building"
 msgid "storage_tank"
-msgstr ""
+msgstr "serbatoio di stoccaggio"
+
+msgctxt "building"
+msgid "supermarket"
+msgstr "supermercato"
+
+msgctxt "building"
+msgid "gasometer"
+msgstr "gasometro"
 
 msgctxt "building"
 msgid "cowshed"
@@ -21462,7 +21889,7 @@ msgstr "in costruzione"
 
 msgctxt "building"
 msgid "Levels"
-msgstr ""
+msgstr "Livelli"
 
 msgid "Residential Building"
 msgstr "Edificio residenziale"
@@ -21500,14 +21927,14 @@ msgid "farm"
 msgstr "agricolo"
 
 msgid "Building part"
-msgstr ""
+msgstr "Edificio parte"
 
 msgctxt "building"
 msgid "Skipped Levels"
-msgstr ""
+msgstr "Skipped Levels"
 
 msgid "Skipped height (meters)"
-msgstr ""
+msgstr "Skipped height (meters)"
 
 msgid "Entrance"
 msgstr "Ingresso"
@@ -21566,39 +21993,39 @@ msgid "Gasometer"
 msgstr "Gasometro"
 
 msgid "Storage Tank"
-msgstr ""
+msgstr "Serbatoio di Stoccaggio"
 
 msgctxt "content"
 msgid "fuel"
-msgstr ""
+msgstr "carburante"
 
 msgctxt "content"
 msgid "manure"
-msgstr ""
+msgstr "concime"
 
 msgctxt "content"
 msgid "oil"
-msgstr ""
+msgstr "petrolio"
 
 msgctxt "content"
 msgid "sewage"
-msgstr ""
+msgstr "liquami"
 
 msgctxt "content"
 msgid "silage"
-msgstr ""
+msgstr "silaggio"
 
 msgctxt "content"
 msgid "slurry"
-msgstr ""
+msgstr "liquami"
 
 msgctxt "content"
 msgid "water"
-msgstr ""
+msgstr "acqua"
 
 msgctxt "content"
 msgid "wine"
-msgstr ""
+msgstr "vino"
 
 msgid "Bunker Silo"
 msgstr "Silos a bunker"
@@ -22406,7 +22833,7 @@ msgid "tubular"
 msgstr "tubolare"
 
 msgid "solid"
-msgstr ""
+msgstr "solido"
 
 msgid "steel"
 msgstr "acciaio"
@@ -22417,7 +22844,7 @@ msgstr "rosso/bianco"
 
 msgctxt "power"
 msgid "Tower type"
-msgstr ""
+msgstr "Tipo di torre"
 
 msgctxt "power"
 msgid "suspension"
@@ -22568,7 +22995,7 @@ msgid "Incomplete tower"
 msgstr "Torre incompleta"
 
 msgid "Location transition"
-msgstr ""
+msgstr "Location transition"
 
 msgid "Pole"
 msgstr "Palo"
@@ -22701,11 +23128,11 @@ msgid "Wayside Shrine"
 msgstr "Edicola votiva"
 
 msgid "Place of worship"
-msgstr ""
+msgstr "Luogo di culto"
 
 msgctxt "building"
 msgid "wayside_shrine"
-msgstr ""
+msgstr "edicola votiva"
 
 msgid "Boundary Stone"
 msgstr "Perimetro di pietra"
@@ -22776,9 +23203,6 @@ msgstr "Vino"
 msgid "Boutique"
 msgstr "Boutique"
 
-msgid "Shoes"
-msgstr "Calzature"
-
 msgid "Outdoor"
 msgstr "Sport all''aperto"
 
@@ -22906,7 +23330,7 @@ msgid "Hearing Aids"
 msgstr "Centro per l''udito"
 
 msgid "Medical Supply"
-msgstr ""
+msgstr "Forniture Mediche"
 
 msgid "Jewellery"
 msgstr "Gioielleria"
@@ -23023,103 +23447,103 @@ msgid "vouchers"
 msgstr "buoni"
 
 msgid "Payment Methods"
-msgstr ""
+msgstr "Tipi di pagamento"
 
 msgid "Debit cards"
 msgstr "Carte di debito"
 
 msgid "BankAxess"
-msgstr ""
+msgstr "BankAxess"
 
 msgid "Bancomat"
-msgstr ""
+msgstr "Bancomat"
 
 msgid "Girocard"
-msgstr ""
+msgstr "Girocard"
 
 msgid "Laser"
-msgstr ""
+msgstr "Laser"
 
 msgid "Maestro"
-msgstr ""
+msgstr "Maestro"
 
 msgid "Visa Debit"
-msgstr ""
+msgstr "Visa Debit"
 
 msgid "Visa Electron"
-msgstr ""
+msgstr "Visa Electron"
 
 msgid "Credit cards"
 msgstr "Carte di credito"
 
 msgid "American Express"
-msgstr ""
+msgstr "American Express"
 
 msgid "Diners Club"
-msgstr ""
+msgstr "Diners Club"
 
 msgid "Discover Card"
-msgstr ""
+msgstr "Discover Card"
 
 msgid "JCB"
-msgstr ""
+msgstr "JCB"
 
 msgid "Mastercard"
-msgstr ""
+msgstr "Mastercard"
 
 msgid "Visa"
-msgstr ""
+msgstr "Visa"
 
 msgid "Electronic purses and Charge cards"
 msgstr "Portafogli elettronici e carte di debito"
 
 msgid "Avant (fi)"
-msgstr ""
+msgstr "Avant (fi)"
 
 msgid "Cash (ch)"
-msgstr ""
+msgstr "Cash (ch)"
 
 msgid "Chipknip (nl)"
-msgstr ""
+msgstr "Chipknip (nl)"
 
 msgid "Geldkarte (de)"
-msgstr ""
+msgstr "Geldkarte (de)"
 
 msgid "Mep (pt)"
-msgstr ""
+msgstr "Mep (pt)"
 
 msgid "Minicash (lu)"
-msgstr ""
+msgstr "Minicash (lu)"
 
 msgid "Minipay (it)"
-msgstr ""
+msgstr "Minipay (it)"
 
 msgid "Mondero (ar)"
-msgstr ""
+msgstr "Mondero (ar)"
 
 msgid "Mondero 4b (es)"
-msgstr ""
+msgstr "Mondero 4b (es)"
 
 msgid "Moneo (fr)"
-msgstr ""
+msgstr "Moneo (fr)"
 
 msgid "Proton (be)"
-msgstr ""
+msgstr "Proton (be)"
 
 msgid "Quick (au)"
-msgstr ""
+msgstr "Quick (au)"
 
 msgid "Cryptocurrencies"
-msgstr ""
+msgstr "Criptovalute"
 
 msgid "Bitcoin"
-msgstr ""
+msgstr "Bitcoin"
 
 msgid "Dogecoin"
-msgstr ""
+msgstr "Dogecoin"
 
 msgid "Litecoin"
-msgstr ""
+msgstr "Litecoin"
 
 msgid "Geography"
 msgstr "Geografia"
@@ -23134,7 +23558,7 @@ msgid "Administrative level"
 msgstr "Livello amministrativo"
 
 msgid "Maritime"
-msgstr ""
+msgstr "Maritime"
 
 msgid "Political"
 msgstr "Politico"
@@ -23167,19 +23591,19 @@ msgid "Title or type of protection"
 msgstr "Titolo o tipo di protezione"
 
 msgid "Border type"
-msgstr ""
+msgstr "Border type"
 
 msgid "baseline"
-msgstr ""
+msgstr "linea di base"
 
 msgid "territorial"
-msgstr ""
+msgstr "territoriale"
 
 msgid "contiguous"
-msgstr ""
+msgstr "contiguo"
 
 msgid "eez"
-msgstr ""
+msgstr "eez"
 
 msgid "Places"
 msgstr "Luoghi"
@@ -23286,10 +23710,10 @@ msgid "A mountain or hill ridge."
 msgstr "Il crinale di un monte o collina."
 
 msgid "Valley"
-msgstr ""
+msgstr "Valle"
 
 msgid "A low area between hills."
-msgstr ""
+msgstr "Bassa area tra colline."
 
 msgid "Cave Entrance"
 msgstr "Ingresso di una grotta"
@@ -23331,35 +23755,35 @@ msgid "Forest"
 msgstr "Foresta"
 
 msgid "Cutline"
-msgstr ""
+msgstr "Cutline"
 
 msgctxt "cutline"
 msgid "border"
-msgstr ""
+msgstr "confine"
 
 msgctxt "cutline"
 msgid "firebreak"
-msgstr ""
+msgstr "tagliafuoco"
 
 msgctxt "cutline"
 msgid "hunting"
-msgstr ""
+msgstr "caccia"
 
 msgctxt "cutline"
 msgid "loggingmachine"
-msgstr ""
+msgstr "macchina disboscamento"
 
 msgctxt "cutline"
 msgid "pipeline"
-msgstr ""
+msgstr "conduttura"
 
 msgctxt "cutline"
 msgid "piste"
-msgstr ""
+msgstr "pista"
 
 msgctxt "cutline"
 msgid "section"
-msgstr ""
+msgstr "sezione"
 
 msgid "Grassland"
 msgstr "Prateria naurale"
@@ -23806,12 +24230,12 @@ msgstr "potenziale"
 msgid "Contact (Common Schema)"
 msgstr "Contatto (schema comune)"
 
-msgid "Fax Number"
-msgstr "Numero di fax"
-
 msgid "Email Address"
 msgstr "Indirizzo email"
 
+msgid "Fax Number"
+msgstr "Numero di fax"
+
 msgid "Image"
 msgstr "Immagine"
 
@@ -23870,7 +24294,7 @@ msgid "administrative"
 msgstr "amministrativo"
 
 msgid "maritime"
-msgstr ""
+msgstr "marittima"
 
 msgid "national_park"
 msgstr "Parco nazionale"
@@ -23882,7 +24306,7 @@ msgid "postal_code"
 msgstr "Codice di avviamento postale"
 
 msgid "protected_area"
-msgstr ""
+msgstr "area protetta"
 
 msgid "Sub area"
 msgstr "Sotto-area"
@@ -23966,7 +24390,7 @@ msgid "mindistance"
 msgstr "distanza minima"
 
 msgid "check"
-msgstr ""
+msgstr "controllo"
 
 msgid "Max. height (meters, only if enforcement=maxheight)"
 msgstr "Altezza massima (metri, solo se enforcement=maxheight)"
@@ -24233,13 +24657,16 @@ msgid "{0} together with {1}"
 msgstr "{0} insieme a {1}"
 
 msgid "incomplete object: only {0}"
-msgstr ""
+msgstr "oggetto incompleto: solo {0}"
 
 msgid "incomplete object: only {0} and {1}"
-msgstr ""
+msgstr "oggetto incompleto: solo {0} e {1}"
 
 msgid "{0} together with addr:*"
-msgstr ""
+msgstr "{0} insieme con addr:*"
+
+msgid "{0} together with {1} and conflicting values"
+msgstr "{0} insieme a {1} e valori in conflitto"
 
 msgid "{0} on suspicious object"
 msgstr "{0} su oggetto sospetto"
@@ -24265,6 +24692,18 @@ msgstr "nome alternativo senza {0}"
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr "uso di {0} incompleto con un tracciato senza {1}"
 
+msgid "Same value of {0} and {1}"
+msgstr "Stesso valore per {0} e {1}"
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr "Stesso valore per {0}, {1} e {2}"
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr "{0} e {1} insieme a {2} e valori in conflitto"
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr "Sospetta combinazione di etichette: {0} e {1}"
+
 msgid "{0}={1} is deprecated"
 msgstr "{0}={1} è deprecato"
 
@@ -24321,20 +24760,24 @@ msgstr ""
 "''entrambi''."
 
 msgid "Unspecific tag {0}"
-msgstr ""
+msgstr "Etichetta non specificata {0}"
 
 msgid "Definition of {0} is unclear"
-msgstr ""
+msgstr "La definizione di {0} non è chiara."
 
 msgid ""
 "{0} is not recommended. Use the Reverse Ways function from the Tools menu."
 msgstr ""
+"{0} non è consigliato. Usare la funzione Reverse Ways dal menu Strumenti."
 
 msgid "key with uncommon character"
-msgstr ""
+msgstr "chiave con carattere non comune"
 
 msgid "uncommon short key"
-msgstr ""
+msgstr "tasto scorciatoia non comune"
+
+msgid "{0} is inaccurate"
+msgstr "{0} è impreciso"
 
 msgid "{0} on a node. Should be used on a way."
 msgstr "{0} in un nodo. Dovrebbe essere usato in un tracciato."
@@ -24346,7 +24789,7 @@ msgid "{0}=* on a node. Should be used in a relation"
 msgstr "{0}=* in un nodo. Dovrebbe essere utilizzato in una relazione"
 
 msgid "{0} on a way. Should be used on a node."
-msgstr ""
+msgstr "{0} per una via. Si dovrebbe usare per un nodo."
 
 msgid "{0} on a way. Should be used in a relation"
 msgstr "{0} su un percorso. Dovrebbe essere usato in una relazione"
@@ -24376,7 +24819,7 @@ msgid "{0} must be connected to a way"
 msgstr "{0} dovrebbe essere collegato ad un tracciato"
 
 msgid "node connects waterway and bridge"
-msgstr ""
+msgstr "nodo connette via navigabile e ponte"
 
 msgid "abbreviated street name"
 msgstr "nome abbreviato della strada"
@@ -24432,9 +24875,18 @@ msgstr ""
 "{0}: predefinito in metri; separatore punto; se unità, inserire spazio e "
 "dopo unità"
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr "formato {0} inusuale"
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 "la tensione dovrebbe essere espressa in volt senza unità/delimitatori/spazi"
@@ -24509,7 +24961,7 @@ msgid "Display street labels (at high zoom)"
 msgstr "Mostra etichette delle strade (ad alta livello di zoom)"
 
 msgid "Use alternative turn restriction icon set"
-msgstr ""
+msgstr "Usa insieme di icone alternative per restrizioni di svolta"
 
 msgid "Columbus V-900 CSV Files"
 msgstr "File CSV Columbus V-900"
@@ -24826,6 +25278,9 @@ msgstr "Aggiungi punti fissi con il click"
 msgid "Add fixed points on spacebar"
 msgstr "Aggiungi punti fissi con la barra spaziatrice"
 
+msgid "Allow edit existing ways"
+msgstr "Consente la modifica di vie esistenti"
+
 msgid "Draw closed polygons only"
 msgstr "Disegna solo i poligoni chiusi"
 
@@ -24888,9 +25343,6 @@ msgstr "Disegna il percorso mediante il mouse"
 msgid "min distance={0} px ({1} m)"
 msgstr "distanza min={0} pixel ({1} m)"
 
-msgid "Convert way to FastDraw line"
-msgstr "Converti il percorso in una linea di disegno veloce"
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr "Eps={0}, {1} punti, {2} p/km"
 
@@ -25132,31 +25584,32 @@ msgid "Could not read NanoLog file:"
 msgstr "Impossibile leggere il file NanoLog:"
 
 msgid "OSM Recommendation"
-msgstr ""
+msgstr "Raccomandazione OSM"
 
 msgid "Recommend categories to your newly created instances."
-msgstr ""
+msgstr "Categorie raccomandate per le tue nuove istanze di creazioni."
 
 msgid "Training process configuration"
-msgstr ""
+msgstr "Configurazione processo di formazione"
 
 msgid "Model Settings"
-msgstr ""
+msgstr "Impostazioni del modello"
 
 msgid "Select objects or create new objects and get recommendation."
 msgstr ""
+"Selezionare gli oggetti o creare nuovi oggetti e ottenere raccomandazione."
 
 msgid "Add Recommendation"
-msgstr ""
+msgstr "Aggiungi Raccomandazione"
 
 msgid "Add a recommended key/value pair to your object"
-msgstr ""
+msgstr "Aggiungi una coppia raccomandata al tuo oggetto"
 
 msgid "Train a Model"
-msgstr ""
+msgstr "Addestrare un modello"
 
 msgid "Start the training engine!"
-msgstr ""
+msgstr "Avviare il motore formazione!"
 
 msgid "Edit opening hours"
 msgstr "Modifica orari di apertura"
@@ -25769,52 +26222,68 @@ msgstr ""
 "testo al rapporto di errore, in modo che possiamo trovare la fonte del "
 "problema."
 
-msgid "Area detection algorithm settings."
-msgstr "Impostazioni algoritmo per le rilevazione dell''area."
+msgid "Area Selector - Preferences"
+msgstr "Selettore Area - Preferenze"
+
+msgid "Settings for the area detection algorithm."
+msgstr "Impostazioni per l''algoritmo di rilevamento dell''area."
+
+msgid "Boofcv - high resolution images"
+msgstr "Boofcv - immagini alta risoluzione"
 
-msgid "Algorithm Settings"
-msgstr "Impostazioni dell''algoritmo"
+msgid "Custom - low resolution images"
+msgstr "Personalizzata - mmagini bassa risoluzione"
 
 msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
-"La soglia del colore stabilisce di quanto il colore da selezionare può "
-"essere diverso dall''originale (Default: {0})."
+"Scegli quale algoritmo debba essere usato. \"Auto\" cercherà di trovare "
+"un''area con Boofcv e userà l''agoritmo personalizzato come ripiego."
 
-msgid "Color Threshold"
-msgstr "Soglia colore"
+msgid "Algorithm"
+msgstr "Algoritmo"
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
-"Distanza massima che ogni punto della sequenza può avere da una linea, in "
-"pixel (default: {0})."
+"Numero massimo di pixel un punto può essere lontano da una linea e ancora "
+"considerato come un membro di questa linea (Predefinito: {0})."
 
-msgid "Tolerance Distance"
-msgstr "Distanza di tolleranza"
+msgid "Distance Tolerance"
+msgstr "Tolleranza Distanza"
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
-msgstr "Tolleranza per il raccordo degli angoli, in radianti (Default {0})."
-
-msgid "Tolerance Angle"
-msgstr "Angolo di tolleranza"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
+msgstr ""
+"Linee con un angolo minore (gradi) rispetto a questo saranno combinate in "
+"una sola linea (Predefinito {0})."
 
-msgid "Plugin Settings"
-msgstr "Impostazione Plugin"
+msgid "Angle Tolerance"
+msgstr "Angolo di Tolleranza"
 
-msgid "Show Address Dialog after mapping an area"
-msgstr "Mostra una finestra di dialogo Indirizzo dopo aver mappato un''area"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
+msgstr ""
+"La soglia di colore definisce quanto un colore può differire dal colore "
+"selezionato. I valori di rosso, verde e blu devono essere nell''intervallo "
+"tra (selected - threshold) e (selected + threshold). (Default: {0})."
 
-msgid "show address dialog"
-msgstr "mostra dialogo indirizzo"
+msgid "Color Threshold"
+msgstr "Soglia colore"
 
-msgid "Merge nodes with neighbors"
-msgstr "Unione dei nodi con quelli vicini"
+msgid "Use HSV based algorithm"
+msgstr "utilizzare algoritmo basato su HSV"
 
-msgid "merge nodes"
-msgstr "unione nodi"
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
+msgstr ""
+"Utilizzare tinta e saturazione invece della sitinzione RGB per selezionare i "
+"colori corrispondenti."
 
 msgid "How often thinning operation should be applied (Default {0})."
 msgstr ""
@@ -25824,11 +26293,23 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr "Iterazioni di assottigliamento"
 
-msgid "Use hue and saturation instead of RGB distinction"
-msgstr ""
+msgid "show address dialog"
+msgstr "mostra dialogo indirizzo"
 
-msgid "use HSV based algorithm"
-msgstr ""
+msgid "Show Address Dialog after mapping an area"
+msgstr "Mostra una finestra di dialogo Indirizzo dopo aver mappato un''area"
+
+msgid "merge nodes"
+msgstr "unione nodi"
+
+msgid "Merge nodes with existing nodes"
+msgstr "Fondere i nodi con i nodi esistenti"
+
+msgid "Debug"
+msgstr "Debug"
+
+msgid "Debugging mode will write images for each processing step."
+msgstr "la modalità debugging scriverà immagini per ogni fase del processo."
 
 msgid "Street Name:"
 msgstr "Nome della strada:"
@@ -25886,32 +26367,36 @@ msgid "Set width of the building"
 msgstr "Imposta la larghezza dell’edificio"
 
 msgid "Merge address points"
-msgstr ""
+msgstr "Merge i punti di indirizzo"
 
 msgid "Move tags from address nodes inside buildings to building ways"
 msgstr ""
+"Sposta le etichette dai nodi degli indirizzi all''interno degli edifici alle "
+"vie degli edifici"
 
 msgid "Select both address nodes and building ways to merge"
 msgstr ""
+"Selezionare entrambi i nodi degli indirizzi e le strade delle costruzioni da "
+"fondere"
 
 msgid "No address nodes found in the selection"
-msgstr ""
+msgstr "Nessun nodo indirizzo trovato nella selezione"
 
 msgid "No building ways found in the selection"
-msgstr ""
+msgstr "Nessun tracciato ''building'' trovato nella selezione"
 
 msgid "There is {0} building with multiple address nodes inside"
 msgid_plural "There are {0} buildings with multiple address nodes inside"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "C''è {0} edificio con nodi indirizzo multipli all''interno"
+msgstr[1] "Ci sono {0} edifici con nodi indirizzo multipli all''interno"
 
 msgid "There is {0} building with address conflicts"
 msgid_plural "There are {0} buildings with address conflicts"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "C''è {0} edificio con indirizzi in conflitto"
+msgstr[1] "Ci sono {0} edifici con indirizzi in conflitto"
 
 msgid "No address nodes inside buildings found"
-msgstr ""
+msgstr "Nessun nodo indirizzo trovato all''interno dell''edificio"
 
 msgid "on polygon"
 msgstr "sul poligono"
@@ -26511,6 +26996,9 @@ msgstr "Reimposta scostamento"
 msgid "Reset offset (only vector images)"
 msgstr "Reimposta scostamento (solo per immagini vettoriali)"
 
+msgid "Blank Layer"
+msgstr "Livello vuoto"
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr "Livello WMS ({0}), {1} tasselli caricati"
 
@@ -28081,14 +28569,320 @@ msgstr "Attiva l''estensione MapDust di resoconto bug"
 msgid "Missing input data"
 msgstr "Dati di ingresso mancanti"
 
+msgid "Mapillary Images"
+msgstr "Immagini Mapillary"
+
+msgid "Mapillary layer"
+msgstr "Livelli Mapillary"
+
+msgid "Total images:"
+msgstr "Immagini totali:"
+
+msgid "images"
+msgstr "immagini"
+
 msgid "Mapillary"
+msgstr "Mapillary"
+
+msgid "Create Mapillary layer"
+msgstr "Crea livello Mapillary"
+
+msgid "Start Mapillary layer"
+msgstr "Avvia livello Mapillary"
+
+msgid "Download Mapillary images in current view"
+msgstr "Scarica immagini Mapillary nella vista corrente"
+
+msgid "Export pictures"
+msgstr "Esporta foto"
+
+msgid "Export Mapillary pictures"
+msgstr "Esporta foto Mapillary"
+
+msgid "Export images"
+msgstr "Esporta immagni"
+
+msgid "Import pictures"
+msgstr "Importa immagini"
+
+msgid "Import local pictures"
+msgstr "Importa foto locali"
+
+msgid "Import pictures into Mapillary layer"
+msgstr "Importa foto nel livello Mapillary"
+
+msgid "Select pictures"
+msgstr "Seleziona foto"
+
+msgid "Import pictures into sequence"
+msgstr "Importa foto in sequenza"
+
+msgid "Import pictures into Mapillary layer in a sequence"
+msgstr "Importa foto in un livello Mapillary con una sequenza"
+
+msgid "Join mode"
+msgstr "modalità unisci"
+
+msgid "Join/unjoin pictures"
+msgstr "unisci/dividi foto"
+
+msgid "Join Mapillary pictures"
+msgstr "unisci foto Mapillary"
+
+msgid "Upload pictures"
+msgstr "Carica foto"
+
+msgid "Upload Mapillary pictures"
+msgstr "Carica foto Mapillary"
+
+msgid "Upload pictures."
+msgstr "Carica foto."
+
+msgid "Walk mode"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Export"
-msgstr "Esporta"
+msgid "Zoom to selected image"
+msgstr ""
+
+msgid "Zoom to the currently selected Mapillary image"
+msgstr ""
+
+msgid "Uploaded {0} images"
+msgstr ""
+
+msgid "Approve upload on the website"
+msgstr ""
+
+msgid "View in website"
+msgstr ""
+
+msgid "Copy key"
+msgstr ""
+
+msgid "Copy key tag"
+msgstr ""
+
+msgid "Edit on website"
+msgstr ""
+
+msgid "Export all images"
+msgstr ""
+
+msgid "Export selected sequence"
+msgstr ""
+
+msgid "Export selected images"
+msgstr ""
+
+msgid "Rewrite imported images"
+msgstr ""
+
+msgid "Select a folder"
+msgstr ""
+
+msgid "Explore"
+msgstr ""
+
+msgid "Select a directory"
+msgstr ""
+
+msgid "Speed limit"
+msgstr ""
+
+msgid "Give way"
+msgstr ""
+
+msgid "No entry"
+msgstr ""
+
+msgid "Intersection danger"
+msgstr ""
+
+msgid "Mandatory direction (any)"
+msgstr ""
+
+msgid "No turn"
+msgstr ""
+
+msgid "Uneven road"
+msgstr ""
+
+msgid "No parking"
+msgstr ""
+
+msgid "No overtaking"
+msgstr ""
+
+msgid "Pedestrian crossing"
+msgstr ""
+
+msgid "Years"
+msgstr ""
+
+msgid "Months"
+msgstr ""
+
+msgid "Days"
+msgstr ""
+
+msgid "Mapillary filter"
+msgstr ""
+
+msgid "Open Mapillary filter dialog"
+msgstr ""
+
+msgid "Downloaded images"
+msgstr ""
+
+msgid "Only images with signs"
+msgstr ""
+
+msgid "Choose signs"
+msgstr ""
+
+msgid "Mapillary history"
+msgstr ""
+
+msgid "Open Mapillary history dialog"
+msgstr ""
+
+msgid "Open Mapillary window"
+msgstr ""
+
+msgid "Mapillary dialog"
+msgstr ""
+
+msgid "Open Mapillary main dialog"
+msgstr ""
+
+msgid "Next picture"
+msgstr ""
+
+msgid "Shows the next picture in the sequence"
+msgstr ""
+
+msgid "Previous picture"
+msgstr ""
+
+msgid "Shows the previous picture in the sequence"
+msgstr ""
+
+msgid "Jump to red"
+msgstr ""
+
+msgid "Jumps to the picture at the other side of the red line"
+msgstr ""
+
+msgid "Jump to blue"
+msgstr ""
+
+msgid "Jumps to the picture at the other side of the blue line"
+msgstr ""
+
+msgid "Stops the walk."
+msgstr ""
+
+msgid "Play"
+msgstr ""
+
+msgid "Continues with the paused walk."
+msgstr ""
+
+msgid "Pause"
+msgstr ""
+
+msgid "Pauses the walk."
+msgstr ""
+
+msgid "Reverse buttons position when displaying images."
+msgstr ""
+
+msgid "Display hour when the picture was taken"
+msgstr ""
+
+msgid "Use 24 hour format"
+msgstr ""
+
+msgid "Move to picture''s location with next/previous buttons"
+msgstr ""
+
+msgid "Download mode: "
+msgstr ""
+
+msgid "Upload selected sequence"
+msgstr ""
+
+msgid "Delete after upload"
+msgstr ""
+
+msgid "Wait for full quality pictures"
+msgstr ""
+
+msgid "Follow selected image"
+msgstr ""
+
+msgid "Go forward"
+msgstr ""
+
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
+msgstr ""
+
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
+msgstr ""
+
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
+msgstr ""
+
+msgid "Downloading"
+msgstr ""
+
+msgid "Select mode"
+msgstr ""
+
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
+msgstr ""
+
+msgid "Downloading Mapillary images"
+msgstr ""
+
+msgid "Total Mapillary images: {0}"
+msgstr ""
+
+msgid "No images found"
+msgstr ""
+
+msgid "Finished upload"
+msgstr ""
+
+msgid "Uploading: {0}"
+msgstr ""
 
 msgid "Measured values"
 msgstr "Valori misurati"
@@ -28110,6 +28904,9 @@ msgstr "Lunghezza della selezione"
 msgid "Selection Area"
 msgstr "Area della selezione"
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr "Angolo"
 
@@ -28176,50 +28973,6 @@ msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 "Impossibile trovare dei nodi intermedi. Controllare la propria selezione"
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-"Interrogazione XAPI, es., '''' (per scaricare tutti i dati), "
-"''[highway=*]'', oppure ''[[network=VRR][ref=603|613]''"
-
-msgid "Download from OSM mirror..."
-msgstr "Scarica da copia OSM..."
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-"Quest''interrogazione XAPI sembra non essere valida, si prega di verificarla"
-
-msgid "Object type: "
-msgstr "Tipo di oggetto: "
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr "Tipo di oggetto OSM da scaricare (''*'' significa qualsiasi)"
-
-msgid "XAPI query: "
-msgstr "Interrogazione XAPI: "
-
-msgid "Download from Overpass API ..."
-msgstr "Scarica dalle API di Overpass ..."
-
-msgid "Download map data from Overpass API server."
-msgstr "Scarica i dati della mappa dal server delle API di Overpass."
-
-msgid "Overpass query: "
-msgstr "Interrogazione Overpass: "
-
-msgid "Select OSM mirror URL"
-msgstr "Selezionare l''indirizzo URL della copia di OSM"
-
-msgid "Select OSM mirror URL to download from."
-msgstr "Selezionare l''indirizzo URL della copia di OSM dal quale scaricare."
-
-msgid "Base URL"
-msgstr "URL di base"
-
-msgid "Enforce meta data"
-msgstr "Rafforza metadati"
-
 msgid "About Plugin"
 msgstr "Informazioni sull''estensione"
 
@@ -28471,6 +29224,9 @@ msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 "Esegue il confronto tra l''insieme di dati corrente e i dati OSM esistenti."
 
+msgid "Tools"
+msgstr "Strumenti"
+
 msgid "Open tools menu for this data."
 msgstr "Apri il menu strumenti per questi dati."
 
@@ -29767,6 +30523,27 @@ msgstr "Trasporto pubblico: Abilita punti del percorso"
 msgid "Public Transport: Edit waypoint name"
 msgstr "Trasporto pubblico: Modifica il nome del punto del percorso"
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr "Strumenti per le relazioni"
 
@@ -29945,6 +30722,9 @@ msgstr "Gruppo di modifiche ripristinato"
 msgid "It is not allowed to revert changeset from {0}"
 msgstr "Non è permesso il ripristino del gruppo di modifiche da {0}"
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr "Destinazione dell''unione mancante per {0} con id {1}"
 
@@ -29954,6 +30734,9 @@ msgstr "Cronologia degli oggetti"
 msgid "History reverter"
 msgstr "Ripristina cronologia modifiche"
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr "Preparazione dei dati della cronologia..."
 
@@ -30146,6 +30929,9 @@ msgstr "Nuovo valore per {0}"
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr "Preferenza ''{0}'' mancante. Impossibile inizializzare SdsApi."
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -30352,6 +31138,39 @@ msgstr "Limite di unione di nodi limitrofi"
 msgid "SeaMap Editor"
 msgstr "Editor SeaMap"
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr "Curve"
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr "Scale curve"
+
+msgid "Undelete node {0}"
+msgstr "{0} Nodi non cancellati"
+
 msgid "OSM Export"
 msgstr "Esportazione OSM"
 
@@ -30361,6 +31180,9 @@ msgstr "Esporta i dati del traffico su un file di rete SUMO"
 msgid "SUMO Export"
 msgstr "Esportazione SUMO"
 
+msgid "Export"
+msgstr "Esporta"
+
 msgid "AutoSave LiveData"
 msgstr "Salvataggio automatico LiveData"
 
@@ -30616,9 +31438,6 @@ msgstr "Errore Tracer2"
 msgid "Parameter for server request"
 msgstr "Parametro per richiesta server"
 
-msgid "Tile size:"
-msgstr "Dimensioni tassello:"
-
 msgid "Resolution:"
 msgstr "Risoluzione:"
 
@@ -32345,9 +33164,6 @@ msgstr ""
 "Ricerca punto del percorso successivo. Clicca e muovi la mappa in "
 "corrispondenza del punto del percorso."
 
-msgid "Way Select"
-msgstr "Selezione percorso"
-
 msgid "Add names from Wikipedia"
 msgstr "Aggiungi nomi da Wikipedia"
 
diff --git a/i18n/po/ja.po b/i18n/po/ja.po
index ca8cab6..6e9fbf6 100644
--- a/i18n/po/ja.po
+++ b/i18n/po/ja.po
@@ -7,16 +7,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
-"PO-Revision-Date: 2015-05-09 15:41+0000\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
+"PO-Revision-Date: 2015-09-27 14:09+0000\n"
 "Last-Translator: fujimoto <fujimoto at internet.ne.jp>\n"
 "Language-Team: Japanese <tr at openstreetmap.jp>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:46+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:48+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "X-Poedit-Country: JAPAN\n"
 "Language: ja\n"
 "X-Poedit-Language: Japanese\n"
@@ -53,7 +53,7 @@ msgid "{0}: option requires an argument -- {1}"
 msgstr "{0}: オプションは引数を必要とします -- {1}"
 
 msgid "Invalid value {0} for parameter ''has_arg''"
-msgstr "パラメーター''has_arg''に{0}の値は無効です"
+msgstr "パラメーター ''has_arg'' に {0} の値は無効です"
 
 msgid "Background Terms of Use"
 msgstr "背景利用規約"
@@ -103,21 +103,18 @@ msgstr "画像設定を読み込み中"
 msgid "Updating user interface"
 msgstr "ユーザーインターフェースを更新中"
 
-msgid "{0} completed in {1}"
-msgstr "{0}が{1}で完了しました"
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "不正な形式のファイルURL \"{0}\" を無視します。"
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "不正な形式のURL \"{0}\" を無視します。"
 
 msgid "Warning"
 msgstr "警告"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "不正な形式のファイルURL \"{0}\" を無視します。"
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr "パラメーター \"downloadgps\" がファイル名もしくはURLとして有効ではありません"
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "不正な形式のURL \"{0}\" を無視します。"
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -450,6 +447,9 @@ msgstr "ダイアログパネルの表示/非表示"
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "ダイアログパネルの表示/非表示を切り替え、地図ビューを最大化"
 
+msgid "Distribute Nodes"
+msgstr "ノードを等間隔に並べる"
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr "直線に沿って、選択したノードを等間隔に配置します。"
 
@@ -461,6 +461,9 @@ msgid ""
 "* One no self-crossing way with at most two of its nodes;\n"
 "* Three nodes."
 msgstr ""
+"* 2つ以上のノードを持った自ら交差していないウェイ\n"
+"* 3つのノード\n"
+"のいずれかを選択してください。"
 
 msgid "Download from OSM..."
 msgstr "OSMからダウンロード..."
@@ -979,7 +982,7 @@ msgid "Download Data"
 msgstr "データをダウンロード"
 
 msgid "Which tasks to perform?"
-msgstr ""
+msgstr "どちらのタスクを実行しますか?"
 
 msgid "Ok"
 msgstr "OK"
@@ -1045,6 +1048,30 @@ msgstr "<html>すべての選択されたウェイが同じ方向にそろえら
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr "角度が約90度または180度のウェイを選択してください。"
 
+msgid "Download from Overpass API ..."
+msgstr "Overpass APIからダウンロード..."
+
+msgid "Download map data from Overpass API server."
+msgstr "Overpass API サーバーから地図データをダウンロードします。"
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr "Overpass Turbo query wizard を使って Overpass クエリーを作成"
+
+msgid "Build query"
+msgstr "クエリーを作成"
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr "<html>Overpass ウィザードは以下のクエリを解釈できませんでした:"
+
+msgid "Parse error"
+msgstr "解釈エラー"
+
+msgid "Overpass query: "
+msgstr "Overpassのクエリー: "
+
+msgid "Overpass server: "
+msgstr "Overpass サーバー: "
+
 msgid "Paste"
 msgstr "貼り付け"
 
@@ -1485,7 +1512,7 @@ msgid_plural ""
 msgstr[0] "影響を受けるウェイは選択されたノードが切り離された後に非表示になります。"
 
 msgid "Some irrelevant nodes have been removed from the selection"
-msgstr ""
+msgstr "一部の関係ないノードは選択から除外されました"
 
 msgid "Undo"
 msgstr "元に戻す"
@@ -1746,20 +1773,20 @@ msgstr[0] "ノート{0}件をダウンロードしました。"
 
 msgid ""
 "Since the download limit was {0}, there might be more notes to download."
-msgstr ""
+msgstr "ダウンロード制限が{0}件だったので、ダウンロードするメモがもっと残っています。"
 
 msgid ""
 "Request a smaller area to make sure that all notes are being downloaded."
-msgstr ""
+msgstr "すべてのメモが確実にダウンロードできるようより小さいエリアをリクエストしてください。"
 
 msgid "More notes to download"
-msgstr ""
+msgstr "ダウンロードできるその他のメモ"
 
 msgid "Download OSM Notes within Bounds"
-msgstr ""
+msgstr "範囲内にあるOSMのメモをダウンロード"
 
 msgid "Download OSM Note by ID"
-msgstr ""
+msgstr "OSMのメモをIDでダウンロード"
 
 msgid "Download Compressed OSM Change"
 msgstr "OSMの変更を圧縮形式でダウンロード"
@@ -1962,15 +1989,6 @@ msgstr "角度合わせが有効です。"
 msgid "Finish drawing."
 msgstr "描画の完了"
 
-msgid "FIX"
-msgstr "FIX"
-
-msgid "draw angle snap"
-msgstr "角度を合わせて描画"
-
-msgid "draw angle snap highlight"
-msgstr "合わせる角度を強調表示"
-
 msgid "Toggle snapping by {0}"
 msgstr "{0}への位置合わせを有効化/無効化"
 
@@ -1992,6 +2010,15 @@ msgstr "0,45,90,..."
 msgid "0,30,45,60,90,..."
 msgstr "0,30,45,60,90,..."
 
+msgid "FIX"
+msgstr "FIX"
+
+msgid "draw angle snap"
+msgstr "角度を合わせて描画"
+
+msgid "draw angle snap highlight"
+msgstr "合わせる角度を強調表示"
+
 msgid "Angle snapping"
 msgstr "角度合わせ"
 
@@ -2112,9 +2139,6 @@ msgstr ""
 "並行するウェイの操作\n"
 "選択されたウェイは単純な分岐のない経路の形でなければなりません"
 
-msgid "Make parallel way error"
-msgstr "平行線作成エラー"
-
 msgid "Drag play head"
 msgstr "再生の最初をドラッグ"
 
@@ -2330,9 +2354,15 @@ msgstr "全オブジェクト"
 msgid "Also include incomplete and deleted objects in search."
 msgstr "検索に不完全および削除済みオブジェクトも含める。"
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr "正規表現検索"
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr "ツールバーボタンを追加"
 
@@ -2551,6 +2581,10 @@ msgid "RX"
 msgstr "RX"
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr "A"
 
@@ -2599,6 +2633,9 @@ msgstr "数値の範囲が必要です"
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr "予期しないトークンです。{0}が必要な場所に{1}がありました。"
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr "予想外のトークン: {0}"
 
@@ -3045,6 +3082,24 @@ msgstr "キャッシュディレクトリ{0}の作成に失敗しました"
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr "<html>存在しないキャッシュディレクトリ: {0} の作成に失敗</html>"
 
+msgid "Unable to delete temporary file {0}"
+msgstr "一時ファイル {0} を削除できません"
+
+msgid "Unable to set file non-readable {0}"
+msgstr "ファイル {0} を読み取り不可に設定できません"
+
+msgid "Unable to set file non-writable {0}"
+msgstr "ファイル {0} を書きこみ不可に設定できません"
+
+msgid "Unable to set file non-executable {0}"
+msgstr "ファイル {0} を実行不可に設定できません"
+
+msgid "Unable to set file readable {0}"
+msgstr "ファイル {0} を読み取り可能に設定できません"
+
+msgid "Unable to set file writable {0}"
+msgstr "ファイル {0} を書き込み可能に設定できません"
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3101,7 +3156,7 @@ msgstr "設定を''{0}''に保存できませんでした"
 msgid ""
 "Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
 "startup)."
-msgstr ""
+msgstr "IPv6 ネットワークを有効にし、 IPv4 よりも IPv6 を優先してみます(最初のスタートアップ時のみ)。"
 
 msgid " (at line {0}, column {1})"
 msgstr " (行{0}、コラム{1}で)"
@@ -3164,12 +3219,48 @@ msgctxt "compass"
 msgid "E"
 msgstr "東"
 
-msgid "Not in cache"
-msgstr "キャッシュにありません"
-
 msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr "投影法 ''{0}'' が見つかりません。ブックマーク ''{1}'' は利用できません。"
 
+msgid "HTTP error {0} when loading tiles"
+msgstr "タイルの読み込み中にHTTPエラー{0}が発生しました"
+
+msgid "Error downloading tiles: {0}"
+msgstr "タイル {0} のダウンロード中のエラー"
+
+msgid "Could not load image from tile server"
+msgstr "タイルサーバーから画像を読み込めませんでした"
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+"{0} は有効な WMS 引数ではありません。このサーバーの URL をチェックしてください。\n"
+"{1}"
+
+msgid "Select WMTS layer"
+msgstr "WMTSレイヤーを選択"
+
+msgid "Layer name"
+msgstr "レイヤー名"
+
+msgid "Projection"
+msgstr "投影法"
+
+msgid "Matrix set identifier"
+msgstr "マトリックス設定識別子"
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr "getCapabilities ドキュメントで定義されたレイヤーがありません: {0}"
+
+msgid "No layer selected"
+msgstr "レイヤーが選択されていません"
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
+msgstr "正方形のタイルのみをサポートしています。 TileMatrix identifier {2} のサーバが{0}x{1}を返しました。"
+
 msgid "ID > 0 expected. Got {0}."
 msgstr "IDは0より大きくなければなりませんが、{0}でした。"
 
@@ -3356,17 +3447,23 @@ msgstr "テキスト"
 msgid "areatext"
 msgstr "エリアテキスト"
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr "UTM 投影法 (''+proj=utm'') には ''+zone=...'' パラメーターが必要です。"
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr "''+zone=...'' パラメーターには 1-60 の範囲の整数値が求められます。"
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr "パラメーターは ''+'' の文字で始まる必要があります(現在は''{0}'')"
 
 msgid "Unknown parameter: ''{0}''."
-msgstr "パラメーター''{0}''が不明です。"
+msgstr "パラメーター ''{0}'' が不明です。"
 
 msgid "Value expected for parameter ''{0}''."
-msgstr "パラメーター''{0}''には値が必要です。"
+msgstr "パラメーター ''{0}'' には値が必要です。"
 
 msgid "No value expected for parameter ''{0}''."
-msgstr "パラメーター''{0}''には値を付けるべきではありません。"
+msgstr "パラメーター ''{0}'' には値を付けるべきではありません。"
 
 msgid "Unexpected parameter format (''{0}'')"
 msgstr "パラメーターの書式が違います(''{0}'')"
@@ -3383,21 +3480,21 @@ msgstr "楕円 ''{0}'' は使用できません。"
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr "楕円のパラメーターの組み合わせは使用できません。"
 
+msgid "Unknown datum identifier: ''{0}''"
+msgstr "データ識別子''{0}''が不明です"
+
 msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr "楕円には +ellps=* または+a=*, +b=* が必要です"
 
 msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr "+nadgrids オプションに指定されたグリッドシフトファイル ''{0}'' はサポートされていません。"
 
-msgid "Unknown datum identifier: ''{0}''"
-msgstr "データ識別子''{0}''が不明です"
-
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
 msgstr "測地法を指定してください(+datum=*、+towgs84=*、+nadgrids=*など)"
 
 msgid ""
 "Unexpected number of arguments for parameter ''towgs84'' (must be 3 or 7)"
-msgstr "''towgs84''パラメーターの引数の個数が正しくありません(3か7でなければなりません)"
+msgstr "''towgs84'' パラメーターの引数の個数が正しくありません(3か7でなければなりません)"
 
 msgid "Unable to parse value of parameter ''towgs84'' (''{0}'')"
 msgstr "パラメーター ''towgs84'' の値 ''{0}'' が解釈できません"
@@ -3409,7 +3506,7 @@ msgid "Unknown projection identifier: ''{0}''"
 msgstr "投影法識別子''{0}''が不明です"
 
 msgid "Unexpected number of arguments for parameter ''+bounds'' (must be 4)"
-msgstr "''+bounds''パラメーターの引数の個数が正しくありません(4でなければなりません)"
+msgstr "''+bounds'' パラメーターの引数の個数が正しくありません(4でなければなりません)"
 
 msgid "Unknown parameter ''{0}''"
 msgstr "''{0}'' は不明なパラメーターです"
@@ -3736,10 +3833,10 @@ msgid "Long segments"
 msgstr "長い区間"
 
 msgid "This tests for long way segments, which are usually errors."
-msgstr ""
+msgstr "ふつうエラーになるような長いウェイの区間を検査します。"
 
 msgid "Very long segment of {0} kilometers"
-msgstr ""
+msgstr "{0}キロメートルに及ぶ長い区間"
 
 msgid "Tag checker (MapCSS based)"
 msgstr "タグチェッカー(MapCSSベース)"
@@ -3832,7 +3929,7 @@ msgstr ""
 "を構成するものではない多言語のオブジェクトを探します。例: Italia - Italien - Italy"
 
 msgid "Missing name:*={0}. Add tag with correct language key."
-msgstr ""
+msgstr "name:*={0}がありません。正しい言語キーが付いたタグを追加してください。"
 
 msgid "A name is missing, even though name:* exists."
 msgstr "name:*があるにも関わらずnameがありません。"
@@ -4010,9 +4107,6 @@ msgstr "規定より長いタグキー"
 msgid "Tags with empty values"
 msgstr "値のないタグ"
 
-msgid "Invalid property key"
-msgstr "プロパティキーが無効です"
-
 msgid "Invalid white space in property key"
 msgstr "プロパティキーの空白は無効です"
 
@@ -4022,12 +4116,24 @@ msgstr "値で、空白文字を最初か最後にあるプロパティ"
 msgid "Property values contain HTML entity"
 msgstr "HTML書式の値を持つプロパティ"
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr "''{0}'' キーは ''{1}'' ではないでしょうか。"
+
+msgid "Misspelled property key"
+msgstr "プロパティキーの綴り間違い"
+
 msgid "Key ''{0}'' not in presets."
 msgstr "キー ''{0}'' はプリセットにはありません。"
 
 msgid "Presets do not contain property key"
 msgstr "プリセットに含まれていないプロパティキー"
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr "''{1}''キーの値''{0}''は''{2}''のようです。"
+
+msgid "Misspelled property value"
+msgstr "プロパティ値のスペルミス"
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr "キー ''{1}'' の値 ''{0}'' はプリセットにはありません。"
 
@@ -4208,15 +4314,15 @@ msgstr "ほかのウェイに近いウェイのノード"
 msgid "Connected way end node near other way"
 msgstr "他のウェイの近くに結合されたウェイ"
 
+msgid "Unconnected nodes without physical tags"
+msgstr "物理的なタグの無い未接続ノード"
+
 msgid "Untagged and unconnected nodes"
 msgstr "タグ付けも接続もされていないノード"
 
 msgid "This test checks for untagged nodes that are not part of any way."
 msgstr "このテストはどのウェイにも属さないタグ無しのノードをチェックしています。"
 
-msgid "Unconnected nodes without physical tags"
-msgstr "物理的なタグの無い未接続ノード"
-
 msgid "No tags"
 msgstr "タグ無し"
 
@@ -4409,6 +4515,7 @@ msgstr "クリックしてダイアログを閉じる"
 msgid "Imagery offset"
 msgstr "画像オフセット"
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr "画像"
 
@@ -4471,7 +4578,7 @@ msgid "Print debugging messages to console"
 msgstr "デバッグメッセージをコンソールに表示"
 
 msgid "Skip loading plugins"
-msgstr ""
+msgstr "プラグインの読み込みをスキップ"
 
 msgid "Disable access to the given resource(s), separated by comma"
 msgstr "指定されたリソースへのアクセスを無効化、コンマ区切り"
@@ -4534,7 +4641,7 @@ msgid "Printing debugging messages to console"
 msgstr "コンソールにデバッグメッセージを出力しています"
 
 msgid "Plugin loading skipped"
-msgstr ""
+msgstr "プラグインの読み込みをスキップしました"
 
 msgid "Enabled detailed debug level (trace)"
 msgstr "詳細デバッグレベル(トレース)を有効にしました"
@@ -4573,15 +4680,15 @@ msgstr[0] "JOSMはオフラインモードで実行しています。{0}のリ
 
 msgid ""
 "Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
-msgstr ""
+msgstr "利用できる IPv6 ネットワークが検出されたので、次回の再起動から IPv4 よりも IPv6 を優先します。"
 
 msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
-msgstr ""
+msgstr "利用できる IPv6 ネットワークが検出されたので、 IPv4 よりも IPv6 を優先します。"
 
 msgid ""
 "Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
 "restart."
-msgstr ""
+msgstr "利用可能な IPv6 ネットワークが検出されなかったので、次回の再起動では IPv6 よりも IPv4 を優先します。"
 
 msgid "Unsaved osm data"
 msgstr "未保存のOSMデータ"
@@ -4626,45 +4733,56 @@ msgstr ""
 "JOSMは次のリソースにアクセスしようとしました。<br>{0}しかし、次のネットワークエラーで<b>失敗</b>しました。<br>{1}プロキシ設定が行"
 "われていない可能性があります。<br>プロキシ設定を変更しますか?"
 
+msgctxt "menu"
 msgid "File"
 msgstr "ファイル"
 
-msgid "Session"
-msgstr "セッション名"
+msgctxt "menu"
+msgid "Edit"
+msgstr "編集"
 
+msgctxt "menu"
 msgid "View"
 msgstr "表示"
 
+msgctxt "menu"
 msgid "Tools"
 msgstr "ツール"
 
+msgctxt "menu"
 msgid "More tools"
-msgstr "その他のツール"
+msgstr "他のツール"
 
+msgctxt "menu"
 msgid "Data"
 msgstr "データ"
 
+msgctxt "menu"
 msgid "Selection"
 msgstr "選択"
 
+msgctxt "menu"
 msgid "Presets"
 msgstr "プリセット"
 
 msgid "More..."
 msgstr "その他..."
 
+msgctxt "menu"
 msgid "GPS"
 msgstr "GPS"
 
+msgctxt "menu"
 msgid "Windows"
 msgstr "ウィンドウ"
 
+msgctxt "menu"
+msgid "Help"
+msgstr "ヘルプ"
+
 msgid "Menu: {0}"
 msgstr "メニュー: {0}"
 
-msgid "Save and load the current session (list of layers, etc.)"
-msgstr "現在のセッションをセーブしてロード(レイヤーのリストなど)"
-
 msgid "Edit toolbar"
 msgstr "編集ツールバー"
 
@@ -4686,6 +4804,7 @@ msgstr "クリックすると設定の画像タブを開きます"
 msgid "Search menu items"
 msgstr "メニュー項目を検索"
 
+msgctxt "menu"
 msgid "Audio"
 msgstr "音声"
 
@@ -4808,64 +4927,17 @@ msgstr "バックグラウンドで処理"
 msgid "Click to run job in background"
 msgstr "バックグラウンドでジョブを動かすためにクリック"
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr "航空写真は位置がずれていることがあります。GPSトラックを使って補正を確認してください!"
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr "http://wiki.openstreetmap.org/wiki/JA:Using_Imagery"
-
-msgid "Details..."
-msgstr "詳細..."
-
-msgid "Hide this message and never show it again"
-msgstr "このメッセージを非表示にし、再度表示されないようにします"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-"<html><strong>1件のオブジェクト</strong>を<strong>1件のリレーション</strong> "
-"から削除して良いか確認してください。</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-"<html><strong>1件のオブジェクト</strong>を<strong>{0}件のリレーション</strong> "
-"から削除して良いか確認してください。</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-"<html><strong>{0}件のオブジェクト</strong>を<strong>{1}件のリレーション</strong> "
-"から削除して良いか確認してください。</html>"
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] "{0}件のオブジェクトを削除中"
-
-msgid "Delete objects"
-msgstr "オブジェクトを削除"
-
-msgid "To delete"
-msgstr "削除対象"
-
-msgid "From Relation"
-msgstr "リレーションから"
-
-msgid "Pos."
-msgstr "位置"
+msgid " ({0})"
+msgstr " ({0})"
 
-msgid "Role"
-msgstr "役割"
+msgid "{0} completed in {1}"
+msgstr "{0}が{1}で完了しました"
 
-msgid "Click to close the dialog and remove the object from the relations"
-msgstr "クリックしてダイアログを閉じ、オブジェクトをリレーションから削除"
+msgid "Enlarge"
+msgstr "拡大"
 
-msgid "Click to close the dialog and to abort deleting the objects"
-msgstr "クリックしてダイアログを閉じ、オブジェクト削除を中断"
+msgid "Shrink"
+msgstr "縮小"
 
 msgid ""
 "<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
@@ -5291,6 +5363,9 @@ msgstr "相手の削除済み状態を残す"
 msgid "Undecide conflict between deleted state"
 msgstr "削除済み状態間の競合を未決にする"
 
+msgid "Role"
+msgstr "役割"
+
 msgid "Primitive"
 msgstr "プリミティブ"
 
@@ -5539,6 +5614,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr "全てのメンバーにこのロールを適用"
 
+msgid "Pos."
+msgstr "位置"
+
 msgid "Orig. Way"
 msgstr "元ウェイ"
 
@@ -5688,6 +5766,46 @@ msgstr "競合を解決"
 msgid "Resolve conflicts for ''{0}''"
 msgstr "''{0}'' の競合を解決する"
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+"<html><strong>1件のオブジェクト</strong>を<strong>1件のリレーション</strong> "
+"から削除して良いか確認してください。</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+"<html><strong>1件のオブジェクト</strong>を<strong>{0}件のリレーション</strong> "
+"から削除して良いか確認してください。</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+"<html><strong>{0}件のオブジェクト</strong>を<strong>{1}件のリレーション</strong> "
+"から削除して良いか確認してください。</html>"
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] "{0}件のオブジェクトを削除中"
+
+msgid "Delete objects"
+msgstr "オブジェクトを削除"
+
+msgid "To delete"
+msgstr "削除対象"
+
+msgid "From Relation"
+msgstr "リレーションから"
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr "クリックしてダイアログを閉じ、オブジェクトをリレーションから削除"
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr "クリックしてダイアログを閉じ、オブジェクト削除を中断"
+
 msgid "Filter objects and hide/disable them."
 msgstr "オブジェクトにフィルターをかけ、非表示/無効にします。"
 
@@ -5789,8 +5907,8 @@ msgstr "詳細なオブジェクト情報"
 msgid "map style"
 msgstr "マップ形式"
 
-msgid " ({0})"
-msgstr " ({0})"
+msgid "edit counts"
+msgstr "編集回数"
 
 msgid "not in data set"
 msgstr "データセット内にない"
@@ -5927,6 +6045,10 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr "警告: 2つのオブジェクトは同じものですが、スタイルキャッシュが異なります。"
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] "選択範囲内は{0}人が最終編集しました。"
+
 msgid "xml"
 msgstr "xml"
 
@@ -5936,25 +6058,53 @@ msgstr "mapcss"
 msgid "unknown"
 msgstr "不明"
 
+msgid "Enter the coordinates for the new node."
+msgstr "新しいノードの座標を入力してください。"
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr "緯度と経度は空白かカンマかセミコロンで区切ってください。"
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr "正の数または N, E の文字は北緯または東経を表します。"
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr "南緯や西経は負の数または S, W の文字を使ってください。"
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr "座標の値は3つの形式のいずれかを選んでください:"
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr "<i>度</i><tt>°</tt>"
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr "<i>度</i><tt>°</tt> <i>分</i><tt>'</tt>"
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr "<i>度</i><tt>°</tt> <i>分</i><tt>'</tt> <i>秒</i><tt>&quot</tt>"
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
 "<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"<tt>″</tt> の記号は任意です。"
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
 msgstr ""
-"新しいノードの座標を入力して下さい。<br/>緯度と経度を空白、コンマ、セミコロンで区切ってください。<br/>正の数やN、Eの文字は北緯や東経を示します"
-"。<br/>南緯や西経を表すには、負の数またはS、Wの文字を使用してください。<br/>座標の値は次の3つの形式のうち1つで指定します。<ul><li><"
-"i>度</i><tt>°</tt></li><li><i>度</i><tt>°</tt> "
-"<i>分</i><tt>'</tt></li><li><i>度</i><tt>°</tt> <i>分</i><tt>'</tt> "
-"<i>秒</i><tt>&quot</tt></li></ul><tt>°</tt>、<tt>'</tt>、<tt>′</tt"
-">、<tt>"</tt>、<tt>″</tt> "
-"の記号は省略可能です。<br/><br/>いくつかの例を示します。<ul>{0}</ul>"
+"<tt>lat=\"...\" lon=\"...\"</tt> または <tt>lat=''...'' lon=''...''</tt> "
+"の文法も使えます。"
+
+msgid "Some examples:"
+msgstr "例"
 
 msgid "Projected coordinates:"
 msgstr "投影後の座標:"
@@ -5999,6 +6149,12 @@ msgstr "透明度"
 msgid "Adjust opacity of the layer."
 msgstr "レイヤーの透明度を調整"
 
+msgid "Gamma"
+msgstr "ガンマ"
+
+msgid "Adjust gamma value of the layer."
+msgstr "レイヤのガンマ値を調整します。"
+
 msgid "Activate"
 msgstr "有効化"
 
@@ -6128,6 +6284,12 @@ msgstr "スタイル設定"
 msgid "Customize the style"
 msgstr "スタイルをカスタマイズ"
 
+msgid "Mini map"
+msgstr "小地図"
+
+msgid "Displays a small map of the current edit location"
+msgstr "現在の編集位置の小地図を表示します"
+
 msgid "List of notes"
 msgstr "メモの一覧"
 
@@ -6186,14 +6348,16 @@ msgstr "オブジェクトID:"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "ダウンロードするオブジェクトのIDを入力"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr "オブジェクトIDはカンマか空白で区切ることができます。例: {0}"
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
-"オブジェクトIDはカンマまたはスペースで区切ることができます。<br/>例: "
-"{0}<br/>ミックスモード時は次のようにオブジェクトを指定します。{1}<br/>({2}は<i>ノード</i>を、{3}は<i>ウェイ</i>を、{"
-"4}は<i>リレーション</i>を表します)"
 
 msgid ""
 "Invalid ID list specified\n"
@@ -6223,6 +6387,9 @@ msgstr "リレーション: {0}/{1}"
 msgid "Relations: {0}"
 msgstr "リレーション: {0}"
 
+msgid "Selection"
+msgstr "選択"
+
 msgid "Open a selection list window."
 msgstr "選択リストウィンドウを開きます。"
 
@@ -6312,6 +6479,12 @@ msgstr "妥当性検査ウィンドウを開きます。"
 msgid "Validation results"
 msgstr "検証結果"
 
+msgid "Lookup"
+msgstr "検索"
+
+msgid "Looks up the selected primitives in the error list."
+msgstr "エラー一覧で選択中の要素を検索します。"
+
 msgid "Fix"
 msgstr "修正"
 
@@ -6843,17 +7016,15 @@ msgid "Discardable key: background"
 msgstr "削除可能なキー: 背景色"
 
 msgid "{0} ''{1}''"
-msgstr ""
+msgstr "''{1}'' {0}件"
 
 msgid "{0} different"
 msgid_plural "{0} different"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "異なる{0}件の値"
 
 msgid ", {0} unset"
 msgid_plural ", {0} unset"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "、未設定{0}件"
 
 msgid "Select objects for which to change tags."
 msgstr "タグを変更するオブジェクトを選択してください。"
@@ -6874,7 +7045,7 @@ msgid "<different>"
 msgstr "<差異あり>"
 
 msgid "Objects: {2} / Tags: {0} / Memberships: {1}"
-msgstr ""
+msgstr "オブジェクト: {2}件/タグ: {0}件/メンバーシップ: {1}件"
 
 msgid "Tags: {0} / Memberships: {1}"
 msgstr "タグ: {0}件/所属: {1}件"
@@ -6915,6 +7086,12 @@ msgstr "タグのヘルプのためにOSM wikiを表示(F1)"
 msgid "Launch browser with wiki help for selected object"
 msgstr "選択されたオブジェクトのためのwikiヘルプのためにブラウザーを起動"
 
+msgid "Go to Taginfo"
+msgstr "Taginfo で開く"
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr "選択されたオブジェクトの Taginfo 統計をブラウザで開く"
+
 msgid "Paste Value"
 msgstr "値を貼り付け"
 
@@ -7002,15 +7179,14 @@ msgstr "最近追加されたタグの数を設定"
 msgid "Remember last used tags after a restart"
 msgstr "再起動時に最後に使用したタグを記憶"
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
-msgstr ""
+msgid "to apply first suggestion"
+msgstr "最初の提案を適用"
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
-msgstr ""
+msgid "to add without closing the dialog"
+msgstr "ダイアログを閉じずに追加"
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
-msgstr ""
+msgid "to add first suggestion without closing the dialog"
+msgstr "ダイアログを閉じずに最初の提案を追加"
 
 msgid "Please enter the number of recently added tags to display"
 msgstr "最近追加されたタグの表示数を入力してください"
@@ -7184,6 +7360,12 @@ msgstr "リレーションメンバーをソート"
 msgid "Relation Editor: Sort"
 msgstr "リレーション編集画面: 並べ替え"
 
+msgid "Sort below"
+msgstr "以下を並べ替え"
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr "リレーションメンバーの表示順序を反転する"
 
@@ -7743,6 +7925,9 @@ msgstr "リレーション {0} の履歴をロード中"
 msgid "Node {0}"
 msgstr "ノード {0}"
 
+msgid "The nodes of this way are in reverse order"
+msgstr "このウェイのノードは逆順です"
+
 msgid "Zoom to node"
 msgstr "ノードにズーム"
 
@@ -7777,7 +7962,7 @@ msgid "<b>Source</b>:"
 msgstr "<b>ソース</b>:"
 
 msgid "<b>Imagery</b>:"
-msgstr ""
+msgstr "<b>画像</b>:"
 
 msgid ""
 "<html>Version <strong>{0}</strong> currently edited in layer ''{1}''</html>"
@@ -7788,7 +7973,7 @@ msgid ""
 msgstr "<html>バージョン <strong>{0}</strong> 作成日 <strong>{1}</strong></html>"
 
 msgid "Changeset"
-msgstr ""
+msgstr "変更セット"
 
 msgid "Changeset info"
 msgstr "変更セット情報"
@@ -8625,6 +8810,106 @@ msgid "{0} object to delete:"
 msgid_plural "{0} objects to delete:"
 msgstr[0] "削除するオブジェクト{0}件:"
 
+msgid "Show Tile Info"
+msgstr "タイル情報を表示"
+
+msgid "Tile Info"
+msgstr "タイル情報"
+
+msgid "Metadata "
+msgstr "メタデータ "
+
+msgid "Auto Zoom"
+msgstr "自動ズーム"
+
+msgid "Auto load tiles"
+msgstr "タイルの自動読み込み"
+
+msgid "Load All Tiles"
+msgstr "全てのタイルをロード"
+
+msgid "Load All Error Tiles"
+msgstr "エラーになったすべてのタイルをロード"
+
+msgid "Zoom to native resolution"
+msgstr "本来の解像度にズーム"
+
+msgid "Change resolution"
+msgstr "解像度の変更"
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr "エラーを表示"
+
+msgid "Load Tile"
+msgstr "タイルの読み込み"
+
+msgid "Increase zoom"
+msgstr "ズームアップ"
+
+msgid "Decrease zoom"
+msgstr "ズームダウン"
+
+msgid "Snap to tile size"
+msgstr "タイルサイズに合わせる"
+
+msgid "Flush Tile Cache"
+msgstr "タイルのキャッシュをフラッシュ"
+
+msgid "zoom in to load any tiles"
+msgstr "タイルを読み込むには拡大してください"
+
+msgid "zoom in to load more tiles"
+msgstr "もっとタイルを読み込むには拡大してください"
+
+msgid "increase zoom level to see more detail"
+msgstr "ズームレベルを上げて詳細を見る"
+
+msgid "No tiles at this zoom level"
+msgstr "このズームレベルではタイルがありません"
+
+msgid "Current zoom: {0}"
+msgstr "現在の倍率: {0}"
+
+msgid "Display zoom: {0}"
+msgstr "表示倍率: {0}"
+
+msgid "Pixel scale: {0}"
+msgstr "ピクセルの倍率: {0}"
+
+msgid "Best zoom: {0}"
+msgstr "最適倍率: {0}"
+
+msgid "Cache stats: {0}"
+msgstr "キャッシュ状況: {0}"
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr "{0}/{1}タイルをダウンロード"
+
+msgid "Save WMS file"
+msgstr "WMSファイルを保存"
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr "航空写真は位置がずれていることがあります。GPSトラックを使って補正を確認してください!"
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr "http://wiki.openstreetmap.org/wiki/JA:Using_Imagery"
+
+msgid "Details..."
+msgstr "詳細..."
+
+msgid "Hide this message and never show it again"
+msgstr "このメッセージを非表示にし、再度表示されないようにします"
+
 msgid "Customize Color"
 msgstr "配色のカスタマイズ"
 
@@ -8674,6 +8959,9 @@ msgstr "GPXファイルの保存"
 msgid "Imagery fade"
 msgstr "画像の混合色"
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr "ERROR"
 
@@ -8694,12 +8982,12 @@ msgstr "投影法はすべてサポートされています"
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
-"このレイヤー{0}は新しい{1}投映法をサポートしていません。\n"
-"{2}\n"
-"投映法を変更するか、レイヤーを削除するかしてください。"
+"{0} レイヤーは新しい投影法 {1} に対応していません。\n"
+"対応している投影法は {2} です。\n"
+"投影法を変更するか、レイヤーを削除してください。"
 
 msgid "Save Layer"
 msgstr "レイヤーを保存"
@@ -8776,85 +9064,6 @@ msgstr "未解決の競合があります。競合箇所は保存されず、あ
 msgid "Save OSM file"
 msgstr "ファイルの保存"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-"{0}はTMSの有効な引数ではありません。次のURLをチェックしてください。\n"
-"{1}"
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-"TMSレイヤーは{0}投映法をサポートしていません。\n"
-"{1}\n"
-"投映法を変更するか、レイヤーを削除するかしてください。"
-
-msgid "Auto Zoom"
-msgstr "自動ズーム"
-
-msgid "Auto load tiles"
-msgstr "タイルの自動読み込み"
-
-msgid "Show Errors"
-msgstr "エラーを表示"
-
-msgid "Load Tile"
-msgstr "タイルの読み込み"
-
-msgid "Show Tile Info"
-msgstr "タイル情報を表示"
-
-msgid "Load All Tiles"
-msgstr "全てのタイルをロード"
-
-msgid "Load All Error Tiles"
-msgstr "エラーになったすべてのタイルをロード"
-
-msgid "Increase zoom"
-msgstr "ズームアップ"
-
-msgid "Decrease zoom"
-msgstr "ズームダウン"
-
-msgid "Snap to tile size"
-msgstr "タイルサイズに合わせる"
-
-msgid "Flush Tile Cache"
-msgstr "タイルのキャッシュをフラッシュ"
-
-msgid "zoom in to load any tiles"
-msgstr "タイルを読み込むには拡大してください"
-
-msgid "zoom in to load more tiles"
-msgstr "もっとタイルを読み込むには拡大してください"
-
-msgid "increase zoom level to see more detail"
-msgstr "ズームレベルを上げて詳細を見る"
-
-msgid "No tiles at this zoom level"
-msgstr "このズームレベルではタイルがありません"
-
-msgid "Current zoom: {0}"
-msgstr "現在の倍率: {0}"
-
-msgid "Display zoom: {0}"
-msgstr "表示倍率: {0}"
-
-msgid "Pixel scale: {0}"
-msgstr "ピクセルの倍率: {0}"
-
-msgid "Best zoom: {0}"
-msgstr "最適倍率: {0}"
-
-msgid "Cache stats: {0}"
-msgstr "キャッシュ状況: {0}"
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr "TMSレイヤー({0})、ズーム{1}をダウンロード中"
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr "EPSG:4326とメルカトル図法がサポートされています"
 
@@ -8864,57 +9073,31 @@ msgstr "妥当性検査エラー"
 msgid "No validation errors"
 msgstr "妥当性検査エラーなし"
 
-msgid "Blank Layer"
-msgstr "空のレイヤー"
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr "{0}/{1}タイルをダウンロード"
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr "WMS レイヤー({0}), 自動的に倍率 {1} でダウンロード"
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr "WMS レイヤー({0}), 倍率 {1} でダウンロード"
-
-msgid "Download visible tiles"
-msgstr "見えるタイルのダウンロード"
-
-msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr "リクエストされた範囲は大きすぎます。もう少し倍率を拡大するか、解像度を変更してください。"
-
-msgid "Change resolution"
-msgstr "解像度の変更"
-
-msgid "Reload erroneous tiles"
-msgstr "誤ったタイルのリロード"
-
-msgid "Alpha channel"
-msgstr "アルファチャンネル"
-
-msgid "Automatically change resolution"
-msgstr "自動的に解像度を変更"
-
 msgid "Set WMS Bookmark"
 msgstr "WMSブックマークをセット"
 
-msgid "Automatic downloading"
-msgstr "自動ダウンロード"
+msgid ""
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
+msgstr "JOSM はサーバーへのクエリに EPSG:4326 を使いますが、結果は WMS サーバーによって様々です"
 
-msgid "Zoom to native resolution"
-msgstr "本来の解像度にズーム"
+msgid "Correlate to GPX"
+msgstr "GPXに関連づける"
 
-msgid "Supported projections are: {0}"
-msgstr "サポートしている投影法は {0} です。"
+msgid "Invalid timezone"
+msgstr "タイムゾーンが無効です"
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
-msgstr "WMSファイルのバージョンが未サポートです。{1}でなければなりませんが、{0}でした。"
+msgid "Invalid offset"
+msgstr "不正なオフセット"
 
-msgid "Save WMS file"
-msgstr "WMSファイルを保存"
+msgid "Correlate images with GPX track"
+msgstr "GPXトラックに画像を関連づけます。"
 
-msgid "Correlate to GPX"
-msgstr "GPXに関連づける"
+msgid "Try Again"
+msgstr "再試行"
+
+msgid "No images could be matched!"
+msgstr "イメージがマッチしません!"
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
 msgstr "GPXファイル(*.gpx *.gpx.gz)"
@@ -9004,24 +9187,9 @@ msgstr "タイムゾーン: "
 msgid "Offset:"
 msgstr "オフセット:"
 
-msgid "Correlate images with GPX track"
-msgstr "GPXトラックに画像を関連づけます。"
-
 msgid "Correlate"
 msgstr "関連付け"
 
-msgid "Invalid timezone"
-msgstr "タイムゾーンが無効です"
-
-msgid "Invalid offset"
-msgstr "不正なオフセット"
-
-msgid "Try Again"
-msgstr "再試行"
-
-msgid "No images could be matched!"
-msgstr "イメージがマッチしません!"
-
 msgid "No gpx selected"
 msgstr "gpx が選択されていません"
 
@@ -9224,9 +9392,6 @@ msgstr ""
 "\n"
 "GPSの時刻: {0}"
 
-msgid "JPEG images (*.jpg)"
-msgstr "JPEGイメージ(*.jpg)"
-
 msgid "Show thumbnails"
 msgstr "サムネイルを表示"
 
@@ -9293,9 +9458,6 @@ msgstr "m"
 msgid "Maximum area per request:"
 msgstr "リクエストあたりの最大面積:"
 
-msgid "sq km"
-msgstr "平方キロ"
-
 msgid "Download near:"
 msgstr "近隣をダウンロード:"
 
@@ -9962,16 +10124,16 @@ msgstr "プリファレンスダイアログを閉じてプリファレンスの
 msgid "Save the preferences and close the dialog"
 msgstr "プリファレンスを保存してダイアログを閉じる"
 
-msgid "Download plugins"
-msgstr "プラグインをダウンロード"
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr "設定を有効にするにはJOSMを再起動する必要があります。"
 
 msgid "Would you like to restart now?"
 msgstr "すぐに再起動しますか?"
 
-msgid "Icon paths:"
+msgid "Download plugins"
+msgstr "プラグインをダウンロード"
+
+msgid "Icon paths:"
 msgstr "アイコンのパス:"
 
 msgid "Short Description:"
@@ -10770,6 +10932,21 @@ msgstr "境界を表示"
 msgid "No bounding box was found for this layer."
 msgstr "このレイヤーに囲み枠が見つかりませんでした。"
 
+msgid "1. Enter getCapabilities URL"
+msgstr "1. getCapabilities の URL を入力してください"
+
+msgid "2. Enter name for this layer"
+msgstr "2. このレイヤーの名称を入力してください"
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr "画像の混合色"
 
@@ -10788,6 +10965,18 @@ msgstr "強"
 msgid "Sharpen (requires layer re-add): "
 msgstr "鮮鋭化(レイヤーの再追加が必要): "
 
+msgid "Tile cache directory: "
+msgstr "タイルキャッシュの保存フォルダ: "
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr "ディスクキャッシュの最大サイズ(画像あたり、MB): "
+
+msgid "Maximum number of objects in memory cache: "
+msgstr "メモリキャッシュの最大オブジェクト数 "
+
+msgid "Tiles zoom offset:"
+msgstr "タイルズームオフセット:"
+
 msgid "Imagery Preferences"
 msgstr "画像の設定"
 
@@ -10809,6 +10998,9 @@ msgstr "画像プロバイダー"
 msgid "Offset bookmarks"
 msgstr "オフセットのブックマーク"
 
+msgid "Cache contents"
+msgstr "キャッシュの内容"
+
 msgid "Imagery Background: Default"
 msgstr "画像の背景: デフォルト"
 
@@ -10851,9 +11043,6 @@ msgstr "EULAライセンスURLが使えません:{0}"
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr "EULAライセンスに対する不正なURL: {0}"
 
-msgid "Projection"
-msgstr "投影法"
-
 msgid "Layer"
 msgstr "レイヤー"
 
@@ -10878,17 +11067,11 @@ msgstr "最大のズームレベル: "
 msgid "Add to slippymap chooser: "
 msgstr "スリッピーマップに追加: "
 
-msgid "Tile cache directory: "
-msgstr "タイルキャッシュの保存フォルダ: "
-
 msgid "Maximum concurrent downloads: "
 msgstr "最大同時ダウンロード数: "
 
 msgid "Maximum concurrent downloads per host: "
-msgstr ""
-
-msgid "Maximum elements in disk cache: "
-msgstr "最大ディスクキャッシュ項目数: "
+msgstr "ホストあたりの最大ダウンロード数: "
 
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
@@ -10897,20 +11080,11 @@ msgstr ""
 "このレイヤーはJOSMのどの投影法もサポートしていないため、\n"
 "使用することができません。このメッセージは再表示されません。"
 
-msgid "Downloader:"
-msgstr "ダウンローダー:"
-
 msgid "Simultaneous connections:"
 msgstr "同時接続数:"
 
-msgid "Overlap tiles"
-msgstr "タイルを重ねて表示"
-
-msgid "% of east:"
-msgstr "東の %:"
-
-msgid "% of north:"
-msgstr "北の %:"
+msgid "Tile size:"
+msgstr "タイルサイズ:"
 
 msgid "Auto save enabled"
 msgstr "自動保存を有効にする"
@@ -11550,12 +11724,12 @@ msgid "Check interval (minutes):"
 msgstr "確認間隔(分):"
 
 msgid "Max age for closed notes (days):"
-msgstr ""
+msgstr "メモを閉じる最大日数:"
 
 msgid ""
 "Specifies the number of days a note needs to be closed to no longer be "
 "downloaded"
-msgstr ""
+msgstr "メモが終了してからダウンロードされなくなるまでの日数を指定します。"
 
 msgid "Failed to retrieve OAuth Access Token from credential manager"
 msgstr "認証マネージャーからOAuthアクセストークンの取得に失敗しました"
@@ -11872,6 +12046,14 @@ msgstr "プリセットの適用"
 msgid "New relation"
 msgstr "新しいリレーション"
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] "{0}件のオブジェクトを変更"
@@ -11987,6 +12169,9 @@ msgstr "プリセット検索ダイアログを表示"
 msgid "Search presets"
 msgstr "プリセットを検索"
 
+msgid "Presets"
+msgstr "プリセット"
+
 msgid "Search for objects by preset"
 msgstr "プリセットでオブジェクトを検索"
 
@@ -12244,6 +12429,9 @@ msgstr "<html>ファイルを読み込めません。<br>エラー:<br>{0}</html
 msgid "GeoJSON Files"
 msgstr "GeoJSONファイル"
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr "レイヤー ''{0}'' はサポートされていません。"
 
@@ -12783,6 +12971,9 @@ msgstr "OSMサーバーファイル(ZIP圧縮)"
 msgid "WMS Files (*.wms)"
 msgstr "WMSファイル(*.wms)"
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr "WMSファイルのバージョンが未サポートです。{1}でなければなりませんが、{0}でした。"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12855,22 +13046,22 @@ msgid "Read protocol version"
 msgstr "プロトコルバージョンの読み取り"
 
 msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
-msgstr ""
+msgstr "{0}番ポートで IPv4 のリモート制御サーバを起動できませんでした: {1}"
 
 msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
-msgstr ""
+msgstr "{0}番ポートで IPv6 のリモート制御サーバを起動できませんでした: {1}"
 
 msgid "RemoteControl::Accepting remote connections on {0}:{1}"
-msgstr ""
+msgstr "リモート制御::接続を {0}:{1}で受け付けています。"
 
 msgid "RemoteControl::Server {0}:{1} stopped."
-msgstr ""
+msgstr "リモート制御::{0}:{1}のサーバが停止しました。"
 
 msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
-msgstr ""
+msgstr "IPv4 のリモート制御 https サーバーが{0}番ポートで起動できません: {1}"
 
 msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
-msgstr ""
+msgstr "IPv6 のリモート制御 https サーバーが{0}番ポートで起動できません: {1}"
 
 msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
@@ -13176,6 +13367,17 @@ msgid_plural ""
 "are:"
 msgstr[0] "プラグイン{0}が要求する{1}件のプラグインが見つかりません。見つからないプラグインは:"
 
+msgid "Download and restart"
+msgstr "ダウンロードして再起動"
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] "クリックで不足しているプラグインをダウンロードして JOSM を再起動"
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] "クリックでこのプラグインなしで継続"
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -14227,6 +14429,9 @@ msgstr "アップデート"
 msgid "Update directory listing."
 msgstr "ディレクトリ表示を更新。"
 
+msgid "View"
+msgstr "表示"
+
 msgid "Blue:"
 msgstr "青:"
 
@@ -14266,8 +14471,8 @@ msgstr "MapQuest Open Aerial"
 msgid "OpenStreetMap GPS Traces"
 msgstr "OpenStreetMap GPS トレース"
 
-msgid "OpenStreetMap (Mapnik)"
-msgstr "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
+msgstr "OpenStreetMap (標準レイヤー)"
 
 msgid "skobbler"
 msgstr "skobbler"
@@ -14278,9 +14483,6 @@ msgstr "OpenStreetMap (Mapnik Black & White)"
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr "OpenStreetMap (Mapnik, no labels)"
 
-msgid "skobbler heatmap"
-msgstr "skobbler heatmap"
-
 msgid "OpenCycleMap"
 msgstr "OpenCycleMap"
 
@@ -14366,7 +14568,7 @@ msgid "basemap.at"
 msgstr "basemap.at"
 
 msgid "basemap.at Orthofoto"
-msgstr ""
+msgstr "basemap.at Orthofoto"
 
 msgid "Graz: Basiskarte (base map)"
 msgstr "Graz: Basiskarte (base map)"
@@ -14389,6 +14591,9 @@ msgstr "Vienna: Orthofoto (aerial image)"
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr "VoGIS: Echtfarbenbild 2012 (12cm)"
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr "VoGIS: Flächenwidmungsplan"
 
@@ -14403,12 +14608,18 @@ msgid ""
 msgstr ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr "SPW(allonie) PICC numerical imagery"
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr "SPW(allonie) 2012 aerial imagery"
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr "SPW(allonie) 2009 aerial imagery"
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr "IBGE Mapa de Setores Urbanos"
 
@@ -14445,12 +14656,18 @@ msgstr "Czech RUIAN parcely"
 msgid "Czech pLPIS"
 msgstr "Czech pLPIS"
 
-msgid "Fugro (Denmark)"
-msgstr "Fugro (Denmark)"
-
 msgid "Geodatastyrelsen (Denmark)"
 msgstr "Geodatastyrelsen (Denmark)"
 
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr "Geodatastyrelsen DTK Kort25"
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr "Geodatastyrelsen Skyggekort 1.6m"
+
+msgid "Geodatastyrelsen Skærmkort"
+msgstr "Geodatastyrelsen Skærmkort"
+
 msgid "Stevns (Denmark)"
 msgstr "Stevns (Denmark)"
 
@@ -14473,7 +14690,10 @@ msgid "Estonia Forestry (Maaamet)"
 msgstr "Estonia Forestry (Maaamet)"
 
 msgid "BANO"
-msgstr ""
+msgstr "BANO"
+
+msgid "BD Carthage"
+msgstr "BD Carthage"
 
 msgid "Bordeaux - 2012"
 msgstr "Bordeaux - 2012"
@@ -14499,8 +14719,8 @@ msgstr "Géobretagne - Morbihan 2010"
 msgid "Géolittoral - Orthophotos 2000"
 msgstr "Géolittoral - Orthophotos 2000"
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
-msgstr "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
+msgstr "Géolittoral V2 - Orthophotos 2011-2014"
 
 msgid "Géolittoral - Sentiers"
 msgstr "Géolittoral - Sentiers"
@@ -14514,6 +14734,9 @@ msgstr "Loire-Atlantique - Orthophotos 2012 - 20 cm"
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 
+msgid "Route 500™©®"
+msgstr "Route 500™©®"
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr "Toulouse - Orthophotoplan 2013"
 
@@ -14526,12 +14749,6 @@ msgstr "Toulouse - Orthophotoplan 2007"
 msgid "Tours - Orthophotos 2013"
 msgstr "Tours - Orthophotos 2013"
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr "Tours - Orthophotos 2008-2010"
-
-msgid "Tours - Orthophotos 2008"
-msgstr "Tours - Orthophotos 2008"
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14554,6 +14771,9 @@ msgstr "Hamburg (20 cm)"
 msgid "Hamburg (DK5)"
 msgstr "Hamburg (DK5)"
 
+msgid "Bavaria (80 cm)"
+msgstr "Bavaria (80 cm)"
+
 msgid "Bavaria (2 m)"
 msgstr "Bavaria (2 m)"
 
@@ -14588,11 +14808,8 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr "Maps4BW (LGL-BW, www.lgl-bw.de)"
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
-msgstr "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
+msgstr "NRW-Atlas: ALKIS"
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
 msgstr "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14621,6 +14838,12 @@ msgstr "Ireland British War Office One-Inch 1941-43 GSGS 4136"
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr "Ireland Bartholomew Quarter-Inch 1940"
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr "Ireland Civil Parishes and Baronies - Memorial Atlas"
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr "Memorial Atlas of Ireland (1901) L.J. Richards"
+
 msgid "OSMIE Townlands"
 msgstr "OSMIE Townlands"
 
@@ -14636,60 +14859,6 @@ msgstr "OSMIE Baronies"
 msgid "OSMIE Political"
 msgstr "OSMIE Political"
 
-msgid "Ireland EEA GMES Urban Atlas"
-msgstr "Ireland EEA GMES Urban Atlas"
-
-msgid "Ireland EEA CORINE 2006"
-msgstr "Ireland EEA CORINE 2006"
-
-msgid "Antrim Civil Parishes and Baronies"
-msgstr "Antrim Civil Parishes and Baronies"
-
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
-msgstr "Memorial Atlas of Ireland (1901) L.J. Richards"
-
-msgid "Carlow Civil Parishes and Baronies"
-msgstr "Carlow Civil Parishes and Baronies"
-
-msgid "Clare Civil Parishes and Baronies"
-msgstr "Clare Civil Parishes and Baronies"
-
-msgid "Dublin Civil Parishes and Baronies"
-msgstr "Dublin Civil Parishes and Baronies"
-
-msgid "Fermanagh Civil Parishes and Baronies"
-msgstr "Fermanagh Civil Parishes and Baronies"
-
-msgid "Galway Civil Parishes and Baronies"
-msgstr "Galway Civil Parishes and Baronies"
-
-msgid "Kildare Civil Parishes and Baronies"
-msgstr "Kildare Civil Parishes and Baronies"
-
-msgid "Leitrim Civil Parishes and Baronies"
-msgstr "Leitrim Civil Parishes and Baronies"
-
-msgid "Longford Civil Parishes and Baronies"
-msgstr "Longford Civil Parishes and Baronies"
-
-msgid "Offaly Civil Parishes and Baronies"
-msgstr "Offaly Civil Parishes and Baronies"
-
-msgid "Sligo Civil Parishes and Baronies"
-msgstr "Sligo Civil Parishes and Baronies"
-
-msgid "Tyrone Civil Parishes and Baronies"
-msgstr "Tyrone Civil Parishes and Baronies"
-
-msgid "Westmeath Civil Parishes and Baronies"
-msgstr "Westmeath Civil Parishes and Baronies"
-
-msgid "Wexford Civil Parishes and Baronies"
-msgstr "Wexford Civil Parishes and Baronies"
-
-msgid "Wicklow Civil Parishes and Baronies"
-msgstr "Wicklow Civil Parishes and Baronies"
-
 msgid "Lodi - Italy"
 msgstr "Lodi - Italy"
 
@@ -14723,6 +14892,9 @@ msgstr "50cm ortho - Latvia"
 msgid "20cm ortho - Latvia - Coastline"
 msgstr "20cm ortho - Latvia - Coastline"
 
+msgid "1.cikla ortofotokarte - Latvia"
+msgstr "1.cikla ortofotokarte - Latvia"
+
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Lithuania)"
 
@@ -14738,6 +14910,9 @@ msgstr "Luxembourg Inspire Railway"
 msgid "Luxembourg Inspire Roads"
 msgstr "Luxembourg Inspire Roads"
 
+msgid "Luxembourg Inspire Water"
+msgstr "Luxembourg Inspire Water"
+
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Niger Delta Oct 2012 Landsat"
 
@@ -14753,9 +14928,15 @@ msgstr "Pangasinán/Bulacan (Phillipines HiRes)"
 msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr "Geoportal 2: Ortofotomapa (aerial image)"
 
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgstr "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr "Geoportal 2: PRNG (geo names)"
 
+msgid "Geoportal 2: ISOK hillshade"
+msgstr "Geoportal 2: ISOK hillshade"
+
 msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr "Będzin: Ortofotomapa 2013 (aerial image)"
 
@@ -14765,15 +14946,27 @@ msgstr "Będzin: Budynki (buildings)"
 msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr "Bytom: Ortofotomapa 2012 (aerial image)"
 
+msgid "Bytom: Fotoplan 2014 (aerial image)"
+msgstr "Bytom: Fotoplan 2014 (aerial image)"
+
 msgid "Bytom: Budynki (buildings)"
 msgstr "Bytom: Budynki (buildings)"
 
 msgid "Chorzów: Budynki (buildings)"
 msgstr "Chorzów: Budynki (buildings)"
 
+msgid "Częstochowa: Budynki (buildings)"
+msgstr "Częstochowa: Budynki (buildings)"
+
 msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr "Częstochowa: Ortofotomapa 2011 (aerial image)"
 
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgstr "Częstochowa: Ortofotomapa 2013 (aerial image)"
+
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgstr "Częstochowa: Ortofotomapa 2014 (aerial image)"
+
 msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr "Gliwice: Ortofotomapa 2013 (aerial image)"
 
@@ -14783,9 +14976,45 @@ msgstr "Gliwice: Budynki (buildings)"
 msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr "Katowice: Ortofotomapa (aerial image)"
 
+msgid "Katowice: Budynki (buildings)"
+msgstr "Katowice: Budynki (buildings)"
+
+msgid "Łódź: Budynki (buildings)"
+msgstr "Łódź: Budynki (buildings)"
+
 msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr "Łódź: Ortofotomapa (aerial image)"
 
+msgid "Powiat dębicki: Budynki (buildings)"
+msgstr "Powiat dębicki: Budynki (buildings)"
+
+msgid "Powiat lubaczowski: Budynki (buildings)"
+msgstr "Powiat lubaczowski: Budynki (buildings)"
+
+msgid "Powiat łańcucki: Budynki (buildings)"
+msgstr "Powiat łańcucki: Budynki (buildings)"
+
+msgid "Powiat poznański: Budynki (buildings)"
+msgstr "Powiat poznański: Budynki (buildings)"
+
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgstr "Powiat poznański: Ortofotomapa (Aerial image)"
+
+msgid "Powiat rzeszowski: Budynki (buildings)"
+msgstr "Powiat rzeszowski: Budynki (buildings)"
+
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgstr "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr "Powiat stalowowolski: Budynki (buildings)"
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr "Przemyśl: Budynki (buildings)"
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgstr "Przemyśl: Ortofotomapa (aerial image)"
+
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
 msgstr "Ruda Śląska: Ortofotomapa (aerial image)"
 
@@ -14798,9 +15027,18 @@ msgstr "Rzeszów: Budynki (buildings)"
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr "Siemianowice Śląskie: Budynki (buildings)"
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr "Zabrze: Ortofotomapa 2011 (aerial image)"
 
@@ -14930,6 +15168,21 @@ msgstr "Bonvillars Orthophoto 2013"
 msgid "Fiez Orthophoto 2013"
 msgstr "Fiez Orthophoto 2013"
 
+msgid "Taiwan e-Map Open Data"
+msgstr "Taiwan e-Map Open Data"
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr "Taiwan e-Map Open Data (with Contour Line)"
+
+msgid "Taiwan Village Boundaries"
+msgstr "Taiwan Village Boundaries"
+
+msgid "Taiwan Land-Section Data"
+msgstr "Taiwan Land-Section Data"
+
+msgid "NLSC Open Data WMTS"
+msgstr "NLSC Open Data WMTS"
+
 msgid "MSR Maps Topo"
 msgstr "MSR Maps Topo"
 
@@ -14945,8 +15198,8 @@ msgstr "USGS Large Scale Imagery"
 msgid "TIGER 2012 Roads Overlay"
 msgstr "TIGER 2012 Roads Overlay"
 
-msgid "New & Misaligned TIGER Roads (2014)"
-msgstr "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
+msgstr "New & Misaligned TIGER Roads (2015)"
 
 msgid "MassGIS L3 Parcels"
 msgstr "MassGIS L3 Parcels"
@@ -15277,6 +15530,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr "コマンドラインを実装しており、自分のコマンドを作成することができます。標準コマンド(arc, circle,他)はリンクを参照。"
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr "(警告: 試験中!)データの合成(マージ)用のツールです。"
 
@@ -15364,11 +15622,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr "WMSプラグイン形式画像調整地図モード"
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr "JOSMがタイルキャッシュを巨大なキャッシュディレクトリではなく、データベースファイルに格納できるようにするための試験的なプラグインです"
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15432,8 +15685,8 @@ msgstr ""
 "MapDustプラグインは、MapDustのバグレポートを地図上に表示します。このプラグインを使用して、バグレポートを作成したり、完了させたり、無効化した"
 "り、再オープンしたり、コメントしたりすることができます。"
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
-msgstr "ユーザーがmapillary.comからの画像で作業できるようにする"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
+msgstr ""
 
 msgid ""
 "Provide a measurement dialog and a layer to measure length and angle of "
@@ -15447,9 +15700,6 @@ msgstr "ウェイの重複部分をマージします。"
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr "4 または5のウェイのセットに左折禁止を追加"
 
-msgid "Simplifies download from different read-only APIs."
-msgstr "異なる読込専用APIからの簡素化されたダウンロード"
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr "選択された領域のすべてのオブジェクトに、一度に属性タグを設定できるようにします"
 
@@ -15531,6 +15781,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr "このプラグインは公共交通ルートのマッピングと編集を簡素化します。"
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr "リレーションとマルチポリゴンを作成し編集するパネル。"
 
@@ -15573,6 +15831,9 @@ msgstr "極端な鈍角上のノードを取り除いてエリアを簡素化し
 msgid "Edit features for OpenSeaMap"
 msgstr "OpenSeaMapの編集機能"
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15657,9 +15918,6 @@ msgstr "長い相互接続されたウェイのセットに沿って簡単にダ
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr "gpxファイルからのインポートされたウェイポイントを検索対象にします。"
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr "分岐せずに接続された一覧のウェイを選択します"
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr "OSMオブジェクトからWikipedia記事へのリンクを容易にします"
 
@@ -16067,6 +16325,14 @@ msgid "basketball"
 msgstr "バスケットボール"
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr "ビーチバレー"
+
+msgctxt "sport"
+msgid "billiards"
+msgstr "ビリヤード"
+
+msgctxt "sport"
 msgid "boules"
 msgstr "ブールズ"
 
@@ -16091,10 +16357,6 @@ msgid "cricket"
 msgstr "クリケット"
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr "クリケットネッツ"
-
-msgctxt "sport"
 msgid "croquet"
 msgstr "ゲートボール"
 
@@ -16111,6 +16373,10 @@ msgid "equestrian"
 msgstr "馬術"
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr "フィールドホッケー"
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr "ゲーリックゲーム"
 
@@ -16127,14 +16393,26 @@ msgid "handball"
 msgstr "ハンドボール"
 
 msgctxt "sport"
-msgid "hockey"
-msgstr "ホッケー"
-
-msgctxt "sport"
 msgid "horse_racing"
 msgstr "競馬"
 
 msgctxt "sport"
+msgid "ice_hockey"
+msgstr "アイスホッケー"
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr "模型飛行機"
+
+msgctxt "sport"
+msgid "motocross"
+msgstr "モトクロス"
+
+msgctxt "sport"
 msgid "motor"
 msgstr "モータースポーツ"
 
@@ -16147,6 +16425,10 @@ msgid "racquet"
 msgstr "ラケット"
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr "ラジコンカー"
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr "リーグラグビー"
 
@@ -16159,6 +16441,10 @@ msgid "running"
 msgstr "ランニング"
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr "射撃"
 
@@ -16186,6 +16472,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr "テニス"
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr "バレーボール"
+
+msgctxt "sport"
+msgid "9pin"
+msgstr "9ピンボウリング"
+
+msgctxt "sport"
+msgid "10pin"
+msgstr "ボウリング"
+
 msgid "Fee"
 msgstr "料金"
 
@@ -16577,6 +16875,9 @@ msgstr "一般道の連絡路"
 msgid "Unclassified"
 msgstr "一般道(2車線未満)"
 
+msgid "Street has no name"
+msgstr "道路に名称がない"
+
 msgid "Passing Places"
 msgstr "対向車待機所"
 
@@ -16653,6 +16954,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr "長い下り坂の横にある緊急車線で、ブレーキが故障したとき、トラックやその他の車が安全に停止するためのものです。"
 
+msgid "Raceway"
+msgstr "レース用道路"
+
 msgid "Road (Unknown Type)"
 msgstr "道路(区分不明)"
 
@@ -17143,7 +17447,7 @@ msgid "Pedestrian Crossing"
 msgstr "横断歩道"
 
 msgid "In case of traffic signals:"
-msgstr ""
+msgstr "信号機の場合:"
 
 msgid "Traffic Calming"
 msgstr "交通静穏化"
@@ -17190,6 +17494,12 @@ msgstr "スピードカメラ(オービス)"
 msgid "Traffic Mirror"
 msgstr "交通ミラー"
 
+msgid "Highway milestone"
+msgstr "幹線道路の距離標"
+
+msgid "Distance (kilometers)"
+msgstr "距離 (km)"
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr "名前付き交差点"
@@ -17334,7 +17644,7 @@ msgid "Hampshire Gate"
 msgstr "ワイヤゲート"
 
 msgid "Bump Gate"
-msgstr "竹のゲート"
+msgstr "バンプ・ゲート"
 
 msgid "Kissing Gate"
 msgstr "キッシングゲート"
@@ -17381,8 +17691,13 @@ msgstr "コロネード"
 msgid "Avalanche Protector"
 msgstr "覆道"
 
+msgctxt "main group"
 msgid "Water"
-msgstr "水域(湖沼)"
+msgstr "水域"
+
+msgctxt "sub group"
+msgid "Water"
+msgstr "水域"
 
 msgid "Drain"
 msgstr "放水路"
@@ -17434,6 +17749,10 @@ msgstr "貯水池"
 msgid "Covered Reservoir"
 msgstr "蓋付き貯水池"
 
+msgctxt "natural"
+msgid "Water"
+msgstr "湖沼"
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr "湖や池のような水域の本体です。"
 
@@ -17575,56 +17894,170 @@ msgstr ""
 msgid "public"
 msgstr "公開"
 
-msgid "Pier"
-msgstr "桟橋"
-
-msgid "Lock Gate"
-msgstr "ロックゲート"
+msgid "Marine Fuel"
+msgstr ""
 
-msgid "Turning Point"
-msgstr "転回場所"
+msgid "Agip"
+msgstr "Agip"
 
-msgid "Slipway"
-msgstr "進水路"
+msgid "Aral"
+msgstr "Aral"
 
-msgid "Boatyard"
-msgstr "ボートヤード(陸上の船置き場)"
+msgid "Avia"
+msgstr "Avia"
 
-msgid "Dock"
-msgstr "ドック"
+msgid "BP"
+msgstr "BP"
 
-msgid "Transport"
-msgstr "輸送"
+msgid "Chevron"
+msgstr "シェブロン"
 
-msgid "Railway"
-msgstr "鉄道"
+msgid "Citgo"
+msgstr "Citgo"
 
-msgid "Rail"
-msgstr "線路"
+msgid "Eni"
+msgstr "Eni"
 
-msgid "main"
-msgstr "幹線"
+msgid "Esso"
+msgstr "エッソ"
 
-msgid "branch"
-msgstr "枝線"
+msgid "Exxon"
+msgstr "エクソン"
 
-msgid "industrial"
-msgstr "工業用"
+msgid "Gulf"
+msgstr "Gulf"
 
-msgid "military"
-msgstr "軍用"
+msgid "Mobil"
+msgstr "モービル"
 
-msgid "tourism"
-msgstr "観光"
+msgid "OMV"
+msgstr "OMV"
 
-msgid "freight"
-msgstr "貨物"
+msgid "Petro-Canada"
+msgstr "Petro-Canada"
 
-msgid "Narrow Gauge Rail"
-msgstr "軽便鉄道"
+msgid "Pioneer"
+msgstr "Pioneer"
 
-msgid "Monorail"
-msgstr "モノレール"
+msgid "Q8"
+msgstr "Q8"
+
+msgid "Repsol"
+msgstr "Repsol"
+
+msgid "Shell"
+msgstr "シェル石油"
+
+msgid "Socar"
+msgstr "Socar"
+
+msgid "Statoil"
+msgstr "Statoil"
+
+msgid "Sunoco"
+msgstr "Sunoco"
+
+msgid "Tamoil"
+msgstr "Tamoil"
+
+msgid "Texaco"
+msgstr "Texaco"
+
+msgid "Total"
+msgstr "Total"
+
+msgid "Independent"
+msgstr "独立系"
+
+msgid "Fuel types:"
+msgstr "燃料の種類:"
+
+msgid "Diesel"
+msgstr "ディーゼル"
+
+msgid "Bio Diesel"
+msgstr "バイオディーゼル"
+
+msgid "Octane 80"
+msgstr "オクタン価80"
+
+msgid "Octane 91"
+msgstr "オクタン価91[レギュラー]"
+
+msgid "Octane 92"
+msgstr "オクタン価92"
+
+msgid "Octane 95"
+msgstr "オクタン価95"
+
+msgid "Octane 98"
+msgstr "オクタン価98"
+
+msgid "Octane 100"
+msgstr "オクタン価100[ハイオク]"
+
+msgid "E10 (10% Ethanol mix)"
+msgstr "E10 (10%エタノール混合)"
+
+msgid "E85 (85% Ethanol mix)"
+msgstr "E85(85%エタノール混合)"
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr "LPガス"
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr "天然ガス"
+
+msgid "Pier"
+msgstr "桟橋"
+
+msgid "Lock Gate"
+msgstr "ロックゲート"
+
+msgid "Turning Point"
+msgstr "転回場所"
+
+msgid "Slipway"
+msgstr "進水路"
+
+msgid "Boatyard"
+msgstr "ボートヤード(陸上の船置き場)"
+
+msgid "Dock"
+msgstr "ドック"
+
+msgid "Transport"
+msgstr "輸送"
+
+msgid "Railway"
+msgstr "鉄道"
+
+msgid "Rail"
+msgstr "線路"
+
+msgid "main"
+msgstr "幹線"
+
+msgid "branch"
+msgstr "枝線"
+
+msgid "industrial"
+msgstr "工業用"
+
+msgid "military"
+msgstr "軍用"
+
+msgid "tourism"
+msgstr "観光"
+
+msgid "freight"
+msgstr "貨物"
+
+msgid "Narrow Gauge Rail"
+msgstr "軽便鉄道"
+
+msgid "Monorail"
+msgstr "モノレール"
 
 msgid "Preserved"
 msgstr "保存鉄道"
@@ -17691,6 +18124,9 @@ msgstr "車止め"
 msgid "Railway Switch"
 msgstr "分岐器"
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr "索道"
 
@@ -17736,7 +18172,7 @@ msgstr "牽引リフト"
 msgid ""
 "drag_lift (general type - use only if exact type (see values below) is "
 "unknown)"
-msgstr ""
+msgstr "牽引リフト (一般型 - 適切な種別 (以下参照) が不明な場合にのみ使用してください)"
 
 msgid "t-bar"
 msgstr "Tバー"
@@ -17814,78 +18250,6 @@ msgstr "駐車場の入口"
 msgid "Fuel"
 msgstr "ガソリンスタンド"
 
-msgid "Agip"
-msgstr "Agip"
-
-msgid "Aral"
-msgstr "Aral"
-
-msgid "Avia"
-msgstr "Avia"
-
-msgid "BP"
-msgstr "BP"
-
-msgid "Chevron"
-msgstr "シェブロン"
-
-msgid "Citgo"
-msgstr "Citgo"
-
-msgid "Eni"
-msgstr "Eni"
-
-msgid "Esso"
-msgstr "エッソ"
-
-msgid "Exxon"
-msgstr "エクソン"
-
-msgid "Gulf"
-msgstr "Gulf"
-
-msgid "Mobil"
-msgstr "モービル"
-
-msgid "OMV"
-msgstr "OMV"
-
-msgid "Petro-Canada"
-msgstr "Petro-Canada"
-
-msgid "Pioneer"
-msgstr "Pioneer"
-
-msgid "Q8"
-msgstr "Q8"
-
-msgid "Repsol"
-msgstr "Repsol"
-
-msgid "Shell"
-msgstr "シェル石油"
-
-msgid "Socar"
-msgstr "Socar"
-
-msgid "Statoil"
-msgstr "Statoil"
-
-msgid "Sunoco"
-msgstr "Sunoco"
-
-msgid "Tamoil"
-msgstr "Tamoil"
-
-msgid "Texaco"
-msgstr "Texaco"
-
-msgid "Total"
-msgstr "Total"
-
-msgid "Independent"
-msgstr "独立系"
-
 msgid "With shop"
 msgstr "店舗あり"
 
@@ -17895,51 +18259,12 @@ msgstr "コンビニ"
 msgid "kiosk"
 msgstr "キオスク"
 
-msgid "Fuel types:"
-msgstr "燃料の種類:"
-
-msgid "Diesel"
-msgstr "ディーゼル"
-
-msgid "Bio Diesel"
-msgstr "バイオディーゼル"
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr "軽油(液化ディーゼル燃料)"
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr "大型トラック用軽油"
 
-msgid "Octane 80"
-msgstr "オクタン価80"
-
-msgid "Octane 91"
-msgstr "オクタン価91[レギュラー]"
-
-msgid "Octane 92"
-msgstr "オクタン価92"
-
-msgid "Octane 95"
-msgstr "オクタン価95"
-
-msgid "Octane 98"
-msgstr "オクタン価98"
-
-msgid "Octane 100"
-msgstr "オクタン価100[ハイオク]"
-
-msgid "E10 (10% Ethanol mix)"
-msgstr "E10 (10%エタノール混合)"
-
-msgid "E85 (85% Ethanol mix)"
-msgstr "E85(85%エタノール混合)"
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr "LPガス"
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr "天然ガス"
-
 msgid "1/25 mix (mofa/moped)"
 msgstr "25:1混合油(モペッド等)"
 
@@ -18158,9 +18483,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr "#CD853F"
 
-msgid "route segment"
-msgstr "ルート区間"
-
 msgid "stop position"
 msgstr "停車位置"
 
@@ -18179,6 +18501,9 @@ msgstr "プラットホーム(降車のみ)"
 msgid "platform (entry only)"
 msgstr "プラットホーム(乗車のみ)"
 
+msgid "route segment"
+msgstr "ルート区間"
+
 msgid "Route Master"
 msgstr "運行系統"
 
@@ -18310,7 +18635,7 @@ msgid "Tactile Paving"
 msgstr "点字ブロック"
 
 msgid "incorrect"
-msgstr ""
+msgstr "不正"
 
 msgid "Bus Platform"
 msgstr "バス乗り場"
@@ -18381,11 +18706,17 @@ msgstr "ホテル"
 msgid "Stars"
 msgstr "星の数"
 
+msgid "Rooms"
+msgstr "部屋数"
+
+msgid "Beds"
+msgstr "ベッド数"
+
 msgid "Motel"
 msgstr "モーテル"
 
 msgid "Guest House/Bed & Breakfast"
-msgstr ""
+msgstr "ゲストハウス/B&B"
 
 msgid "Chalet"
 msgstr "貸別荘"
@@ -18471,11 +18802,14 @@ msgstr "サンドイッチ"
 msgid "sushi"
 msgstr "寿司"
 
+msgid "steak_house"
+msgstr "ステーキハウス"
+
 msgid "Microbrewery"
 msgstr "地酒醸造所"
 
 msgid "Outdoor seating"
-msgstr ""
+msgstr "屋外席"
 
 msgid "Fast Food"
 msgstr "ファストフード"
@@ -18659,7 +18993,7 @@ msgid "Number of screens"
 msgstr "スクリーン数"
 
 msgid "Minimum age"
-msgstr ""
+msgstr "最低年齢制限"
 
 msgid "Zoo"
 msgstr "動物園"
@@ -18685,6 +19019,9 @@ msgstr "サウナ"
 msgid "Horse Riding"
 msgstr "乗馬場"
 
+msgid "Casino"
+msgstr "火事の"
+
 msgid "Brothel"
 msgstr "売春宿"
 
@@ -18940,7 +19277,7 @@ msgid "Police"
 msgstr "警察署・交番"
 
 msgid "Ranger Station"
-msgstr ""
+msgstr "森林警備隊の基地"
 
 msgid "Fire Station"
 msgstr "消防署"
@@ -19069,13 +19406,13 @@ msgid "Collection times"
 msgstr "収集時刻"
 
 msgid "Mo-Sa 09:00"
-msgstr ""
+msgstr "Mo-Sa 09:00"
 
 msgid "Mo-Fr 17:30; Sa 12:00"
-msgstr ""
+msgstr "Mo-Fr 17:30; Sa 12:00"
 
 msgid "Mo-Fr 15:00,19:00; Sa 15:10; Su 10:30"
-msgstr ""
+msgstr "Mo-Fr 15:00,19:00; Sa 15:10; Su 10:30"
 
 msgid "Drive through"
 msgstr "ドライブスルー"
@@ -19088,7 +19425,7 @@ msgstr "硬貨"
 
 msgctxt "payment"
 msgid "Notes"
-msgstr "メモ"
+msgstr "紙幣"
 
 msgid "Telephone cards"
 msgstr "テレフォンカード"
@@ -19172,8 +19509,8 @@ msgstr "気圧の表示"
 msgid "Shows humidity"
 msgstr "湿度の表示"
 
-msgid "Recycling"
-msgstr "資源回収場所"
+msgid "Recycling Container"
+msgstr "リサイクルコンテナ"
 
 msgid "Batteries"
 msgstr "バッテリー"
@@ -19181,20 +19518,47 @@ msgstr "バッテリー"
 msgid "Cans"
 msgstr "カン"
 
+msgid "Cardboard"
+msgstr "ボール紙"
+
+msgid "Electrical Appliances"
+msgstr "家電製品"
+
 msgid "Glass"
 msgstr "ガラス"
 
+msgid "Glass Bottles"
+msgstr "ガラス瓶"
+
+msgid "Green Waste"
+msgstr ""
+
 msgid "Paper"
 msgstr "紙"
 
-msgid "Scrap Metal"
+msgid "Plastic"
+msgstr "プラスチック"
+
+msgid "Plastic Bottles"
+msgstr "プラスチック瓶"
+
+msgid "Plastic Packaging"
+msgstr "プラスチック包装"
+
+msgid "Scrap Metal"
 msgstr "スクラップ金属"
 
-msgid "container"
-msgstr "集積場"
+msgid "Shoes"
+msgstr "靴店"
+
+msgid "Small Appliances"
+msgstr "小型家電"
+
+msgid "Waste"
+msgstr ""
 
-msgid "centre"
-msgstr "処理場"
+msgid "Recycling Centre"
+msgstr ""
 
 msgid "Waste Basket/Trash Can"
 msgstr "ゴミ箱"
@@ -19240,7 +19604,7 @@ msgstr "東屋"
 
 msgctxt "shelter"
 msgid "public_transport"
-msgstr "公共交通"
+msgstr "公共交通の待合室"
 
 msgctxt "shelter"
 msgid "weather_shelter"
@@ -19328,7 +19692,7 @@ msgid "Count"
 msgstr "本数"
 
 msgid "Advertising Column"
-msgstr ""
+msgstr "広告枠"
 
 msgid "Billboard"
 msgstr "ビルボード"
@@ -19349,7 +19713,7 @@ msgid "Pitch"
 msgstr "競技場"
 
 msgid "artificial_turf"
-msgstr ""
+msgstr "人工芝"
 
 msgid "decoturf"
 msgstr ""
@@ -19397,6 +19761,9 @@ msgstr "アーチェリー"
 msgid "Track and Field Athletics"
 msgstr "陸上競技"
 
+msgid "Running"
+msgstr "ランニング"
+
 msgid "Climbing"
 msgstr "登山"
 
@@ -19572,12 +19939,18 @@ msgstr "野球場"
 msgid "Basketball"
 msgstr "バスケットボール場"
 
+msgid "Handball"
+msgstr "ハンドボール"
+
 msgid "Volleyball"
 msgstr "バレーボールコート"
 
 msgid "Beach Volleyball"
 msgstr "ビーチバレー"
 
+msgid "Billiards"
+msgstr "ビリヤード"
+
 msgid "Golf"
 msgstr "ゴルフ"
 
@@ -19593,14 +19966,14 @@ msgstr "ローンボウルズ"
 msgid "Cricket"
 msgstr "クリケット"
 
-msgid "Cricket Nets"
-msgstr "クリケットネット"
-
 msgid "Croquet"
 msgstr "クロッケー"
 
-msgid "Hockey"
-msgstr "ホッケー"
+msgid "Field Hockey"
+msgstr "フィールドホッケー"
+
+msgid "Ice Hockey"
+msgstr "アイスホッケー"
 
 msgid "Pelota"
 msgstr "ペロタ"
@@ -19623,9 +19996,6 @@ msgstr "ゴーカート"
 msgid "Motocross"
 msgstr "モトクロス"
 
-msgid "Safety Training"
-msgstr "安全指導"
-
 msgid "Model Aerodrome"
 msgstr "模型飛行機場"
 
@@ -19644,9 +20014,6 @@ msgstr "トラック"
 msgid "RC Car"
 msgstr "ラジコンカー"
 
-msgid "Raceway"
-msgstr "レース用道路"
-
 msgid "Man Made"
 msgstr "人工物"
 
@@ -19676,7 +20043,7 @@ msgstr "オフィスビル"
 
 msgctxt "building"
 msgid "barn"
-msgstr ""
+msgstr "納屋"
 
 msgctxt "building"
 msgid "farm_auxiliary"
@@ -19716,7 +20083,15 @@ msgstr "格納庫"
 
 msgctxt "building"
 msgid "storage_tank"
-msgstr ""
+msgstr "貯蔵タンク"
+
+msgctxt "building"
+msgid "supermarket"
+msgstr "スーパーマーケット"
+
+msgctxt "building"
+msgid "gasometer"
+msgstr "ガスタンク"
 
 msgctxt "building"
 msgid "cowshed"
@@ -19728,7 +20103,7 @@ msgstr "建設中"
 
 msgctxt "building"
 msgid "Levels"
-msgstr ""
+msgstr "階数"
 
 msgid "Residential Building"
 msgstr "住宅"
@@ -19766,14 +20141,14 @@ msgid "farm"
 msgstr "農業用"
 
 msgid "Building part"
-msgstr ""
+msgstr "建物の一部"
 
 msgctxt "building"
 msgid "Skipped Levels"
-msgstr ""
+msgstr "抜けている階"
 
 msgid "Skipped height (meters)"
-msgstr ""
+msgstr "抜けている高さ (m)"
 
 msgid "Entrance"
 msgstr "出入口"
@@ -19832,11 +20207,11 @@ msgid "Gasometer"
 msgstr "ガスタンク"
 
 msgid "Storage Tank"
-msgstr ""
+msgstr "貯蔵タンク"
 
 msgctxt "content"
 msgid "fuel"
-msgstr ""
+msgstr "燃料"
 
 msgctxt "content"
 msgid "manure"
@@ -19844,7 +20219,7 @@ msgstr ""
 
 msgctxt "content"
 msgid "oil"
-msgstr ""
+msgstr "石油"
 
 msgctxt "content"
 msgid "sewage"
@@ -19864,7 +20239,7 @@ msgstr ""
 
 msgctxt "content"
 msgid "wine"
-msgstr ""
+msgstr "ワイン"
 
 msgid "Bunker Silo"
 msgstr "バンカーサイロ"
@@ -21039,9 +21414,6 @@ msgstr "ワイン店"
 msgid "Boutique"
 msgstr "ブティック"
 
-msgid "Shoes"
-msgstr "靴店"
-
 msgid "Outdoor"
 msgstr "アウトドア用品店"
 
@@ -21286,7 +21658,7 @@ msgid "vouchers"
 msgstr "商品券"
 
 msgid "Payment Methods"
-msgstr ""
+msgstr "支払方法"
 
 msgid "Debit cards"
 msgstr "デビットカード"
@@ -21295,94 +21667,94 @@ msgid "BankAxess"
 msgstr ""
 
 msgid "Bancomat"
-msgstr ""
+msgstr "Bancomat"
 
 msgid "Girocard"
-msgstr ""
+msgstr "Girocard"
 
 msgid "Laser"
-msgstr ""
+msgstr "Laser"
 
 msgid "Maestro"
-msgstr ""
+msgstr "Maestro"
 
 msgid "Visa Debit"
-msgstr ""
+msgstr "Visa Debit"
 
 msgid "Visa Electron"
-msgstr ""
+msgstr "Visa Electron"
 
 msgid "Credit cards"
 msgstr "クレジットカード"
 
 msgid "American Express"
-msgstr ""
+msgstr "American Express"
 
 msgid "Diners Club"
-msgstr ""
+msgstr "Diners Club"
 
 msgid "Discover Card"
-msgstr ""
+msgstr "Discover Card"
 
 msgid "JCB"
-msgstr ""
+msgstr "JCB"
 
 msgid "Mastercard"
-msgstr ""
+msgstr "Mastercard"
 
 msgid "Visa"
-msgstr ""
+msgstr "Visa"
 
 msgid "Electronic purses and Charge cards"
 msgstr "電子マネー"
 
 msgid "Avant (fi)"
-msgstr ""
+msgstr "Avant (fi)"
 
 msgid "Cash (ch)"
-msgstr ""
+msgstr "Cash (ch)"
 
 msgid "Chipknip (nl)"
-msgstr ""
+msgstr "Chipknip (nl)"
 
 msgid "Geldkarte (de)"
-msgstr ""
+msgstr "Geldkarte (de)"
 
 msgid "Mep (pt)"
-msgstr ""
+msgstr "Mep (pt)"
 
 msgid "Minicash (lu)"
-msgstr ""
+msgstr "Minicash (lu)"
 
 msgid "Minipay (it)"
 msgstr ""
 
 msgid "Mondero (ar)"
-msgstr ""
+msgstr "Mondero (ar)"
 
 msgid "Mondero 4b (es)"
-msgstr ""
+msgstr "Mondero 4b (es)"
 
 msgid "Moneo (fr)"
-msgstr ""
+msgstr "Moneo (fr)"
 
 msgid "Proton (be)"
-msgstr ""
+msgstr "Proton (be)"
 
 msgid "Quick (au)"
-msgstr ""
+msgstr "Quick (au)"
 
 msgid "Cryptocurrencies"
-msgstr ""
+msgstr "Cryptocurrencies"
 
 msgid "Bitcoin"
-msgstr ""
+msgstr "Bitcoin"
 
 msgid "Dogecoin"
-msgstr ""
+msgstr "Dogecoin"
 
 msgid "Litecoin"
-msgstr ""
+msgstr "Litecoin"
 
 msgid "Geography"
 msgstr "地理"
@@ -21436,13 +21808,13 @@ msgid "baseline"
 msgstr ""
 
 msgid "territorial"
-msgstr ""
+msgstr "領海"
 
 msgid "contiguous"
 msgstr ""
 
 msgid "eez"
-msgstr ""
+msgstr "排他的経済水域"
 
 msgid "Places"
 msgstr "地名"
@@ -21455,7 +21827,7 @@ msgstr "国(country)"
 
 msgctxt "place"
 msgid "State"
-msgstr ""
+msgstr "州"
 
 msgid "Region"
 msgstr "地方"
@@ -21547,10 +21919,10 @@ msgid "A mountain or hill ridge."
 msgstr "山や丘の尾根です。"
 
 msgid "Valley"
-msgstr ""
+msgstr "谷"
 
 msgid "A low area between hills."
-msgstr ""
+msgstr "山の間の低いところです。"
 
 msgid "Cave Entrance"
 msgstr "洞窟の出入口"
@@ -21612,11 +21984,11 @@ msgstr ""
 
 msgctxt "cutline"
 msgid "pipeline"
-msgstr ""
+msgstr "パイプライン"
 
 msgctxt "cutline"
 msgid "piste"
-msgstr ""
+msgstr "雪道"
 
 msgctxt "cutline"
 msgid "section"
@@ -21697,7 +22069,7 @@ msgid ""
 msgstr "密集した岩で覆われている領域で、植物はまばらか全く生えていません。"
 
 msgid "Rock"
-msgstr ""
+msgstr "岩"
 
 msgid ""
 "A notable rock or group of rocks, with at least one of them firmly attached "
@@ -21705,7 +22077,7 @@ msgid ""
 msgstr ""
 
 msgid "Tourism attraction"
-msgstr ""
+msgstr "観光名所"
 
 msgid "Stone"
 msgstr "石"
@@ -21861,7 +22233,7 @@ msgstr "都道府県"
 
 msgctxt "addr:"
 msgid "State"
-msgstr ""
+msgstr "州"
 
 msgid "AL"
 msgstr "AL"
@@ -22055,12 +22427,12 @@ msgstr "恐らく"
 msgid "Contact (Common Schema)"
 msgstr "連絡先(共通スキーマ)"
 
-msgid "Fax Number"
-msgstr "FAX番号"
-
 msgid "Email Address"
 msgstr "メールアドレス"
 
+msgid "Fax Number"
+msgstr "FAX番号"
+
 msgid "Image"
 msgstr "画像"
 
@@ -22083,20 +22455,20 @@ msgstr ""
 
 msgctxt "the tag note=*"
 msgid "Note"
-msgstr ""
+msgstr "メモ"
 
 msgctxt "note=*"
 msgid "An important hint for other mappers (not for the end user)."
-msgstr ""
+msgstr "他のマッパー向けの重要なヒント(エンドユーザー向けではない)"
 
 msgid "Fixme"
-msgstr ""
+msgstr "要修正"
 
 msgctxt "fixme=*"
 msgid ""
 "A hint for other mappers (not for the end user), that an object needs an "
 "improvement."
-msgstr ""
+msgstr "対象物を改善する必要があるという他のマッパー向けのヒント(エンドユーザー向けではない)"
 
 msgid "outer segment"
 msgstr "外側の区間"
@@ -22123,7 +22495,7 @@ msgid "political"
 msgstr "選挙区・自治区"
 
 msgid "postal_code"
-msgstr ""
+msgstr "郵便番号"
 
 msgid "protected_area"
 msgstr ""
@@ -22210,7 +22582,7 @@ msgid "mindistance"
 msgstr "車間距離"
 
 msgid "check"
-msgstr ""
+msgstr "検問"
 
 msgid "Max. height (meters, only if enforcement=maxheight)"
 msgstr "最大高(m、取締り対象の場合)"
@@ -22485,6 +22857,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr "{0}が疑わしいオブジェクト上にある"
 
@@ -22509,6 +22884,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr "{0}={1}は非推奨です"
 
@@ -22569,6 +22956,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr "{0}がノードに設定されています。ウェイに設定するべきです。"
 
@@ -22606,7 +22996,7 @@ msgid "Overlapping Identical Landuses"
 msgstr "同じ土地利用が重複している"
 
 msgid "{0} must be connected to a way"
-msgstr ""
+msgstr "{0} はウェイに接続している必要があります"
 
 msgid "node connects waterway and bridge"
 msgstr ""
@@ -22659,9 +23049,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr "{0}: デフォルトはメートル; 区切り文字はピリオド; 単位は空白を置いて表記"
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr "異常な{0}の書式"
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr "電圧はボルトで単位・区切り文字・空白を入れないでください"
 
@@ -23034,6 +23433,9 @@ msgstr "クリックで修正点を追加"
 msgid "Add fixed points on spacebar"
 msgstr "スペースキーで修正点を追加"
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr "閉じられた多角形のみを描画する"
 
@@ -23094,9 +23496,6 @@ msgstr "マウスを使用してウェイを描画"
 msgid "min distance={0} px ({1} m)"
 msgstr "最小距離={0}px({1}m)"
 
-msgid "Convert way to FastDraw line"
-msgstr "ウェイをFastDrawの線に変換"
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr "Eps={0}, {1} 個の点, {2} p/km"
 
@@ -23922,61 +24321,80 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr "あなたが何をして、何が起きたのかを、バグレポートに以下のテキストを追加してお知らせください。そうすれば、問題の原因を探ることができます。"
 
-msgid "Area detection algorithm settings."
-msgstr "エリア検出アルゴリズムの設定です。"
+msgid "Area Selector - Preferences"
+msgstr ""
+
+msgid "Settings for the area detection algorithm."
+msgstr ""
 
-msgid "Algorithm Settings"
-msgstr "アルゴリズム設定"
+msgid "Boofcv - high resolution images"
+msgstr ""
+
+msgid "Custom - low resolution images"
+msgstr ""
 
 msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
-msgstr "選択するのに元の色からどれだけの違いが許容されるのかを表す色のしきい値です(既定値: {0})。"
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
+msgstr ""
 
-msgid "Color Threshold"
-msgstr "色のしきい値"
+msgid "Algorithm"
+msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
 
-msgid "Tolerance Distance"
-msgstr "距離の許容度"
+msgid "Distance Tolerance"
+msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
-msgstr "角度合わせの許容度、ラジアン単位です(既定値は{0})。"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
+msgstr ""
 
-msgid "Tolerance Angle"
-msgstr "角度の許容度"
+msgid "Angle Tolerance"
+msgstr ""
 
-msgid "Plugin Settings"
-msgstr "プラグイン設定"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
+msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
-msgstr "エリアを描いた後で住所ダイアログを表示"
+msgid "Color Threshold"
+msgstr "色のしきい値"
+
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
+msgstr ""
+
+msgid "How often thinning operation should be applied (Default {0})."
+msgstr ""
+
+msgid "Thinning Iterations"
+msgstr ""
 
 msgid "show address dialog"
 msgstr "住所ダイアログを表示"
 
-msgid "Merge nodes with neighbors"
-msgstr "近隣のノードをマージ"
+msgid "Show Address Dialog after mapping an area"
+msgstr "エリアを描いた後で住所ダイアログを表示"
 
 msgid "merge nodes"
 msgstr "ノードをマージ"
 
-msgid "How often thinning operation should be applied (Default {0})."
-msgstr ""
-
-msgid "Thinning Iterations"
+msgid "Merge nodes with existing nodes"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24621,6 +25039,9 @@ msgstr "オフセットを初期化"
 msgid "Reset offset (only vector images)"
 msgstr "オフセットを初期化(ベクトルイメージのみ)"
 
+msgid "Blank Layer"
+msgstr "空のレイヤー"
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr "WMSレイヤー({0}), {1}枚のタイルを読み込みました"
 
@@ -25940,185 +26361,491 @@ msgstr "海岸線"
 msgid "land"
 msgstr "陸地"
 
-msgid "Maximum number of segments per way"
-msgstr "ウェイあたりの最大区間数"
+msgid "Maximum number of segments per way"
+msgstr "ウェイあたりの最大区間数"
+
+msgid "Maximum number of nodes in initial trace"
+msgstr "初期トレースの最大ノード数"
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr "水域として判断する灰色の最大明度(0~255)"
+
+msgid "Line simplification accuracy (degrees)"
+msgstr "線を簡略化するぶれ幅(度)"
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr "ランドサットタイルの解像度(度あたりのピクセル)"
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr "ランドサットタイルのサイズ(ピクセル)"
+
+msgid "Shift all traces to east (degrees)"
+msgstr "全てのトレースを東にシフト(度)"
+
+msgid "Shift all traces to north (degrees)"
+msgstr "全てのトレースを北にシフト(度)"
+
+msgid "Direction to search for land"
+msgstr "陸地の検索方向"
+
+msgid "Tag ways as"
+msgstr "ウェイにタグ付け"
+
+msgid "WMS Layer"
+msgstr "WMSレイヤー"
+
+msgid "Maximum cache size (MB)"
+msgstr "最大キャッシュサイズ(MB)"
+
+msgid "Maximum cache age (days)"
+msgstr "最大キャッシュ期間(日)"
+
+msgid "Source text"
+msgstr "ソーステキスト"
+
+msgid "Lakewalker Plugin Preferences"
+msgstr "Lakewalkerプラグインの設定"
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr "ランドサット画像上での水域トレース用プラグイン"
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr "各生成されたウェイで許される区間の最大数。既定値は250。"
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr "データを間引く前(ラインを単純化する前)に生成するノードの最大数。既定値は5000。"
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr "水域として判断するグレーの最大メイド(Landsat IR-1 データに基づく)。0~255の範囲が指定可。既定値は90。"
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr "ダグラス・ポイカーフィルタ(ライン簡素化)の精度。<br>小さいほど細かく描画を行います。 既定値 0.0003。"
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr "ピクセル/度 単位のランドサットタイルの解像度。既定値は4000。"
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr "ランドサットの一タイルのサイズをピクセル単位で。既定値は2000。"
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr "東方向(°)にすべての点をオフセット。既定値は0。"
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr "北方向(度)にあるすべてのポイントのオフセット。既定値は0。"
+
+msgid "Direction to search for land. Default east."
+msgstr "陸地を検索する方向。既定は東。"
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr "ウェイに対するタグ付けを水域、海岸線、陸地、あるいはタグ付けなしの中から選択。既定値は水域。"
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr "軌跡をたどるのにどのWMSレイヤーを使用しますか。既定値は IR1。"
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr "各キャッシュディレクトリの最大サイズを指定します。既定値は300MB。"
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr "キャッシュされたファイルの保持日数を指定します。既定値は100日。"
+
+msgid "Data source text. Default is Landsat."
+msgstr "データ源。既定はLandsatです。"
+
+msgid "Downloading image tile..."
+msgstr "イメージタイルのダウンロード..."
+
+msgid "Could not acquire image"
+msgstr "イメージを取得できませんでした"
+
+msgid "Connection Failed"
+msgstr "接続失敗"
+
+msgid "Not connected"
+msgstr "接続していません"
+
+msgid "Connecting"
+msgstr "接続中です"
+
+msgid "Connected"
+msgstr "接続しました"
+
+msgid "no name"
+msgstr "名前なし"
+
+msgid "Live GPS"
+msgstr "Live GPS"
+
+msgid "Show GPS data."
+msgstr "GPSデータの表示"
+
+msgid "Status"
+msgstr "状態"
+
+msgid "Way Info"
+msgstr "ウェイの情報"
+
+msgid "Speed"
+msgstr "速度"
+
+msgid "Course"
+msgstr "コース"
+
+msgid "LiveGPS layer"
+msgstr "LiveGPSレイヤー"
+
+msgid "Capture GPS Track"
+msgstr "GPSトラックの取り込み"
+
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgstr "gpsdサーバーに接続し、LiveGPSレイヤーに現在位置を表示します。"
+
+msgid "Center Once"
+msgstr "一回中央寄せ"
+
+msgid "Center the LiveGPS layer to current position."
+msgstr "現在の位置をLiveGPSのレイヤーの中心にする。"
+
+msgid "Auto-Center"
+msgstr "自動中心設定"
+
+msgid "Continuously center the LiveGPS layer to current position."
+msgstr "現在の位置にLiveGPSレイヤーを引き続き中央寄せする。"
+
+msgid "Open MapDust"
+msgstr "MapDustを開く"
+
+msgid "MapDust bug reports"
+msgstr "MapDustバグ報告"
+
+msgid "Activates the MapDust bug reporter plugin"
+msgstr "MapDustバグ報告プラグインを有効化"
+
+msgid "Missing input data"
+msgstr "入力データがありません"
+
+msgid "Mapillary Images"
+msgstr ""
+
+msgid "Mapillary layer"
+msgstr ""
+
+msgid "Total images:"
+msgstr ""
+
+msgid "images"
+msgstr ""
+
+msgid "Mapillary"
+msgstr ""
+
+msgid "Create Mapillary layer"
+msgstr ""
+
+msgid "Start Mapillary layer"
+msgstr ""
+
+msgid "Download Mapillary images in current view"
+msgstr ""
+
+msgid "Export pictures"
+msgstr ""
+
+msgid "Export Mapillary pictures"
+msgstr ""
+
+msgid "Export images"
+msgstr ""
+
+msgid "Import pictures"
+msgstr ""
+
+msgid "Import local pictures"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer"
+msgstr ""
+
+msgid "Select pictures"
+msgstr ""
+
+msgid "Import pictures into sequence"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer in a sequence"
+msgstr ""
+
+msgid "Join mode"
+msgstr ""
+
+msgid "Join/unjoin pictures"
+msgstr ""
+
+msgid "Join Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures"
+msgstr ""
+
+msgid "Upload Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures."
+msgstr ""
+
+msgid "Walk mode"
+msgstr ""
+
+msgid "Start walk mode"
+msgstr ""
+
+msgid "Zoom to selected image"
+msgstr ""
+
+msgid "Zoom to the currently selected Mapillary image"
+msgstr ""
+
+msgid "Uploaded {0} images"
+msgstr ""
+
+msgid "Approve upload on the website"
+msgstr ""
+
+msgid "View in website"
+msgstr ""
+
+msgid "Copy key"
+msgstr ""
+
+msgid "Copy key tag"
+msgstr ""
+
+msgid "Edit on website"
+msgstr ""
+
+msgid "Export all images"
+msgstr ""
+
+msgid "Export selected sequence"
+msgstr ""
+
+msgid "Export selected images"
+msgstr ""
+
+msgid "Rewrite imported images"
+msgstr ""
+
+msgid "Select a folder"
+msgstr ""
+
+msgid "Explore"
+msgstr ""
+
+msgid "Select a directory"
+msgstr ""
+
+msgid "Speed limit"
+msgstr ""
+
+msgid "Give way"
+msgstr ""
+
+msgid "No entry"
+msgstr ""
+
+msgid "Intersection danger"
+msgstr ""
+
+msgid "Mandatory direction (any)"
+msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
-msgstr "初期トレースの最大ノード数"
+msgid "No turn"
+msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
-msgstr "水域として判断する灰色の最大明度(0~255)"
+msgid "Uneven road"
+msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
-msgstr "線を簡略化するぶれ幅(度)"
+msgid "No parking"
+msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
-msgstr "ランドサットタイルの解像度(度あたりのピクセル)"
+msgid "No overtaking"
+msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
-msgstr "ランドサットタイルのサイズ(ピクセル)"
+msgid "Pedestrian crossing"
+msgstr ""
 
-msgid "Shift all traces to east (degrees)"
-msgstr "全てのトレースを東にシフト(度)"
+msgid "Years"
+msgstr ""
 
-msgid "Shift all traces to north (degrees)"
-msgstr "全てのトレースを北にシフト(度)"
+msgid "Months"
+msgstr ""
 
-msgid "Direction to search for land"
-msgstr "陸地の検索方向"
+msgid "Days"
+msgstr ""
 
-msgid "Tag ways as"
-msgstr "ウェイにタグ付け"
+msgid "Mapillary filter"
+msgstr ""
 
-msgid "WMS Layer"
-msgstr "WMSレイヤー"
+msgid "Open Mapillary filter dialog"
+msgstr ""
 
-msgid "Maximum cache size (MB)"
-msgstr "最大キャッシュサイズ(MB)"
+msgid "Downloaded images"
+msgstr ""
 
-msgid "Maximum cache age (days)"
-msgstr "最大キャッシュ期間(日)"
+msgid "Only images with signs"
+msgstr ""
 
-msgid "Source text"
-msgstr "ソーステキスト"
+msgid "Choose signs"
+msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
-msgstr "Lakewalkerプラグインの設定"
+msgid "Mapillary history"
+msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
-msgstr "ランドサット画像上での水域トレース用プラグイン"
+msgid "Open Mapillary history dialog"
+msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
-msgstr "各生成されたウェイで許される区間の最大数。既定値は250。"
+msgid "Open Mapillary window"
+msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
-msgstr "データを間引く前(ラインを単純化する前)に生成するノードの最大数。既定値は5000。"
+msgid "Mapillary dialog"
+msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
-msgstr "水域として判断するグレーの最大メイド(Landsat IR-1 データに基づく)。0~255の範囲が指定可。既定値は90。"
+msgid "Open Mapillary main dialog"
+msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
-msgstr "ダグラス・ポイカーフィルタ(ライン簡素化)の精度。<br>小さいほど細かく描画を行います。 既定値 0.0003。"
+msgid "Next picture"
+msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
-msgstr "ピクセル/度 単位のランドサットタイルの解像度。既定値は4000。"
+msgid "Shows the next picture in the sequence"
+msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
-msgstr "ランドサットの一タイルのサイズをピクセル単位で。既定値は2000。"
+msgid "Previous picture"
+msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
-msgstr "東方向(°)にすべての点をオフセット。既定値は0。"
+msgid "Shows the previous picture in the sequence"
+msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
-msgstr "北方向(度)にあるすべてのポイントのオフセット。既定値は0。"
+msgid "Jump to red"
+msgstr ""
 
-msgid "Direction to search for land. Default east."
-msgstr "陸地を検索する方向。既定は東。"
+msgid "Jumps to the picture at the other side of the red line"
+msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
-msgstr "ウェイに対するタグ付けを水域、海岸線、陸地、あるいはタグ付けなしの中から選択。既定値は水域。"
+msgid "Jump to blue"
+msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
-msgstr "軌跡をたどるのにどのWMSレイヤーを使用しますか。既定値は IR1。"
+msgid "Jumps to the picture at the other side of the blue line"
+msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
-msgstr "各キャッシュディレクトリの最大サイズを指定します。既定値は300MB。"
+msgid "Stops the walk."
+msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
-msgstr "キャッシュされたファイルの保持日数を指定します。既定値は100日。"
+msgid "Play"
+msgstr ""
 
-msgid "Data source text. Default is Landsat."
-msgstr "データ源。既定はLandsatです。"
+msgid "Continues with the paused walk."
+msgstr ""
 
-msgid "Downloading image tile..."
-msgstr "イメージタイルのダウンロード..."
+msgid "Pause"
+msgstr ""
 
-msgid "Could not acquire image"
-msgstr "イメージを取得できませんでした"
+msgid "Pauses the walk."
+msgstr ""
 
-msgid "Connection Failed"
-msgstr "接続失敗"
+msgid "Reverse buttons position when displaying images."
+msgstr ""
 
-msgid "Not connected"
-msgstr "接続していません"
+msgid "Display hour when the picture was taken"
+msgstr ""
 
-msgid "Connecting"
-msgstr "接続中です"
+msgid "Use 24 hour format"
+msgstr ""
 
-msgid "Connected"
-msgstr "接続しました"
+msgid "Move to picture''s location with next/previous buttons"
+msgstr ""
 
-msgid "no name"
-msgstr "名前なし"
+msgid "Download mode: "
+msgstr ""
 
-msgid "Live GPS"
-msgstr "Live GPS"
+msgid "Upload selected sequence"
+msgstr ""
 
-msgid "Show GPS data."
-msgstr "GPSデータの表示"
+msgid "Delete after upload"
+msgstr ""
 
-msgid "Status"
-msgstr "状態"
+msgid "Wait for full quality pictures"
+msgstr ""
 
-msgid "Way Info"
-msgstr "ウェイの情報"
+msgid "Follow selected image"
+msgstr ""
 
-msgid "Speed"
-msgstr "速度"
+msgid "Go forward"
+msgstr ""
 
-msgid "Course"
-msgstr "コース"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "LiveGPS layer"
-msgstr "LiveGPSレイヤー"
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Capture GPS Track"
-msgstr "GPSトラックの取り込み"
+msgid "2 images joined"
+msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
-msgstr "gpsdサーバーに接続し、LiveGPSレイヤーに現在位置を表示します。"
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Center Once"
-msgstr "一回中央寄せ"
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Center the LiveGPS layer to current position."
-msgstr "現在の位置をLiveGPSのレイヤーの中心にする。"
+msgid "2 images unjoined"
+msgstr ""
 
-msgid "Auto-Center"
-msgstr "自動中心設定"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
+msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
-msgstr "現在の位置にLiveGPSレイヤーを引き続き中央寄せする。"
+msgid "Downloading"
+msgstr ""
 
-msgid "Open MapDust"
-msgstr "MapDustを開く"
+msgid "Select mode"
+msgstr ""
 
-msgid "MapDust bug reports"
-msgstr "MapDustバグ報告"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
+msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
-msgstr "MapDustバグ報告プラグインを有効化"
+msgid "Downloading Mapillary images"
+msgstr ""
 
-msgid "Missing input data"
-msgstr "入力データがありません"
+msgid "Total Mapillary images: {0}"
+msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
-msgstr "エクスポート"
+msgid "Uploading: {0}"
+msgstr ""
 
 msgid "Measured values"
 msgstr "測定した値"
@@ -26138,6 +26865,9 @@ msgstr "選択した長さ"
 msgid "Selection Area"
 msgstr "選択面積"
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr "角度"
 
@@ -26197,49 +26927,6 @@ msgstr "ミシガン左折制限を作成"
 msgid "Unable to find via nodes. Please check your selection"
 msgstr "経由ノードが見つかりません。選択をチェックしてください"
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-"XAPIクエリ。例:''''(すべてのデータをダウンロード)や、''[highway=*]''、''[[network=VRR][ref=603|613]"
-"''"
-
-msgid "Download from OSM mirror..."
-msgstr "OSMミラーからダウンロード..."
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr "このXAPIクエリは無効のようです。再度ご確認ください"
-
-msgid "Object type: "
-msgstr "オブジェクト種別: "
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr "ダウンロードするオブジェクト種別(''*'' ですべて)"
-
-msgid "XAPI query: "
-msgstr "XAPIクエリ: "
-
-msgid "Download from Overpass API ..."
-msgstr "Overpass APIからダウンロード..."
-
-msgid "Download map data from Overpass API server."
-msgstr "Overpass API サーバーから地図データをダウンロードします。"
-
-msgid "Overpass query: "
-msgstr "Overpassのクエリー: "
-
-msgid "Select OSM mirror URL"
-msgstr "OSMミラーURLを選択"
-
-msgid "Select OSM mirror URL to download from."
-msgstr "ダウンロード先のOSMミラーURLを選択"
-
-msgid "Base URL"
-msgstr "ベース URL"
-
-msgid "Enforce meta data"
-msgstr "メタデータにする"
-
 msgid "About Plugin"
 msgstr "プラグイン情報"
 
@@ -26472,6 +27159,9 @@ msgstr "差分"
 msgid "Perform diff between current data set and existing OSM data."
 msgstr "現在のデータセットと既存のOSMデータの間の差分を取ります。"
 
+msgid "Tools"
+msgstr "ツール"
+
 msgid "Open tools menu for this data."
 msgstr "このデータのためのオープンツールメニュー"
 
@@ -27705,6 +28395,27 @@ msgstr "公共交通: ウェイポイントを有効化"
 msgid "Public Transport: Edit waypoint name"
 msgstr "公共交通: ウェイポイント名を編集"
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr "リレーションツールボックス"
 
@@ -27876,6 +28587,9 @@ msgstr "変更セットを元に戻しました"
 msgid "It is not allowed to revert changeset from {0}"
 msgstr "{0}からの変更セットの取消が許可されていません"
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr "ID {1} のマージ先 {0} が見つかりません"
 
@@ -27885,6 +28599,9 @@ msgstr "オブジェクト履歴"
 msgid "History reverter"
 msgstr "History reverter"
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr "履歴データを準備中..."
 
@@ -28067,6 +28784,9 @@ msgstr "新しい値は{0}"
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr "プリファレンス ''{0}'' がありません。SdsApi を初期化できません。"
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -28253,6 +28973,39 @@ msgstr "近接するノードを結合する閾値"
 msgid "SeaMap Editor"
 msgstr "SeaMapエディタ"
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr "OSMエクスポート"
 
@@ -28262,6 +29015,9 @@ msgstr "交通データをSUMOネットワークファイルにエクスポー
 msgid "SUMO Export"
 msgstr "SUMOエクスポート"
 
+msgid "Export"
+msgstr "エクスポート"
+
 msgid "AutoSave LiveData"
 msgstr "LiveDataの自動保存"
 
@@ -28502,9 +29258,6 @@ msgstr "Tracer2エラー"
 msgid "Parameter for server request"
 msgstr "サーバーリクエストのパラメーター"
 
-msgid "Tile size:"
-msgstr "タイルサイズ:"
-
 msgid "Resolution:"
 msgstr "解像度:"
 
@@ -30064,9 +30817,6 @@ msgstr "ウェイポイントの検索"
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr "後のウェイポイントを検索します。地図をクリックしてウェイポイントに移動してください。"
 
-msgid "Way Select"
-msgstr "ウェイの選択"
-
 msgid "Add names from Wikipedia"
 msgstr "Wikipediaから名前を追加"
 
diff --git a/i18n/po/ka.po b/i18n/po/ka.po
index 39eed22..5caa901 100644
--- a/i18n/po/ka.po
+++ b/i18n/po/ka.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2011-12-16 00:14+0000\n"
 "Last-Translator: datogogishvili <Unknown>\n"
 "Language-Team: Georgian <ka at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:41+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:42+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: ka\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -97,21 +97,18 @@ msgstr ""
 msgid "Updating user interface"
 msgstr ""
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
 msgstr ""
 
 msgid "Warning"
 msgstr "გაფრთხილება"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr ""
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr "პარამეტრი \"გადმოწერეgps\" არ იღებს ფაილის სახელსა და ლინკს"
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr ""
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -449,6 +446,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr "გაანაწილე მონიშნული წერტილები თანაბარ დაშორებაზე ხაზის გასწვრივ."
 
@@ -1034,6 +1034,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr ""
 
@@ -1950,15 +1974,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr ""
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -1980,6 +1995,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2098,9 +2122,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2314,9 +2335,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr ""
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2530,6 +2557,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2572,6 +2603,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3022,6 +3056,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3139,10 +3191,44 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "HTTP error {0} when loading tiles"
+msgstr ""
+
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3332,6 +3418,12 @@ msgstr ""
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3359,13 +3451,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -3981,9 +4073,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -3993,12 +4082,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4179,13 +4280,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4383,6 +4484,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4596,43 +4698,54 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
 msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
 msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
 msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
 msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
-msgid "Menu: {0}"
+msgctxt "menu"
+msgid "Help"
 msgstr ""
 
-msgid "Save and load the current session (list of layers, etc.)"
+msgid "Menu: {0}"
 msgstr ""
 
 msgid "Edit toolbar"
@@ -4656,6 +4769,7 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
 msgstr ""
 
@@ -4778,58 +4892,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr ""
-
-msgid "Pos."
+msgid " ({0})"
 msgstr ""
 
-msgid "Role"
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5258,6 +5330,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr ""
+
 msgid "Primitive"
 msgstr ""
 
@@ -5498,6 +5573,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5644,6 +5722,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5747,7 +5860,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5875,6 +5988,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5884,17 +6002,48 @@ msgstr ""
 msgid "unknown"
 msgstr ""
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -5940,6 +6089,12 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr ""
 
@@ -6069,6 +6224,12 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
+msgid "Mini map"
+msgstr ""
+
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
 msgid "List of notes"
 msgstr ""
 
@@ -6127,10 +6288,15 @@ msgstr "ობიექტის საიდენტიფიკაციო 
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "შეიყვანე ობიექტის ნომერი, რომელიც უნდა იქნას გადმოქაჩული"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6159,6 +6325,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr ""
 
+msgid "Selection"
+msgstr ""
+
 msgid "Open a selection list window."
 msgstr ""
 
@@ -6249,6 +6418,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -6843,6 +7018,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6934,14 +7115,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7114,6 +7294,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7649,6 +7835,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8494,6 +8683,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr ""
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr ""
 
@@ -8547,6 +8836,9 @@ msgstr ""
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8567,7 +8859,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8650,80 +8942,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr ""
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-
-msgid "Auto Zoom"
-msgstr ""
-
-msgid "Auto load tiles"
-msgstr ""
-
-msgid "Show Errors"
-msgstr ""
-
-msgid "Load Tile"
-msgstr ""
-
-msgid "Show Tile Info"
-msgstr ""
-
-msgid "Load All Tiles"
-msgstr ""
-
-msgid "Load All Error Tiles"
-msgstr ""
-
-msgid "Increase zoom"
-msgstr ""
-
-msgid "Decrease zoom"
-msgstr ""
-
-msgid "Snap to tile size"
-msgstr ""
-
-msgid "Flush Tile Cache"
-msgstr ""
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
@@ -8733,56 +8951,30 @@ msgstr ""
 msgid "No validation errors"
 msgstr ""
 
-msgid "Blank Layer"
-msgstr ""
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "Download visible tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-
-msgid "Change resolution"
-msgstr ""
-
-msgid "Reload erroneous tiles"
-msgstr ""
-
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Automatic downloading"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Zoom to native resolution"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Supported projections are: {0}"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Save WMS file"
+msgid "Try Again"
 msgstr ""
 
-msgid "Correlate to GPX"
+msgid "No images could be matched!"
 msgstr ""
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
@@ -8869,24 +9061,9 @@ msgstr ""
 msgid "Offset:"
 msgstr ""
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
 msgid "Correlate"
 msgstr ""
 
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9080,9 +9257,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr ""
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9145,9 +9319,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9773,15 +9944,15 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr ""
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -10574,24 +10745,51 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
-msgid "imagery fade"
+msgid "1. Enter getCapabilities URL"
 msgstr ""
 
-msgid "Fade Color: "
+msgid "2. Enter name for this layer"
 msgstr ""
 
-msgid "Fade amount: "
+msgid "{0} cache, total cache size: {1} bytes"
 msgstr ""
 
-msgid "Soft"
+msgid "Cache name"
 msgstr ""
 
-msgid "Strong"
+msgid "Object Count"
+msgstr ""
+
+msgid "imagery fade"
+msgstr ""
+
+msgid "Fade Color: "
+msgstr ""
+
+msgid "Fade amount: "
+msgstr ""
+
+msgid "Soft"
+msgstr ""
+
+msgid "Strong"
 msgstr ""
 
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10613,6 +10811,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10655,9 +10856,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr ""
 
@@ -10682,36 +10880,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11647,6 +11830,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] ""
@@ -11755,6 +11946,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12008,6 +12202,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12544,6 +12741,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12929,6 +13129,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13923,6 +14136,9 @@ msgstr ""
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr ""
+
 msgid "Blue:"
 msgstr ""
 
@@ -13962,7 +14178,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -13974,9 +14190,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14085,6 +14298,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14098,12 +14314,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14140,10 +14362,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14170,6 +14398,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14194,7 +14425,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14209,6 +14440,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14221,12 +14455,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14247,6 +14475,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14279,10 +14510,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14312,6 +14540,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14327,154 +14561,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14489,9 +14729,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14621,6 +14870,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14636,7 +14900,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -14962,6 +15226,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15046,11 +15315,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15104,7 +15368,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15119,9 +15383,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15202,6 +15463,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15240,6 +15509,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15315,9 +15587,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15723,6 +15992,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15747,10 +16024,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15767,6 +16040,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15783,11 +16060,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
+msgstr ""
+
+msgctxt "sport"
+msgid "ice_hockey"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15803,6 +16092,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15815,6 +16108,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15842,6 +16139,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16233,6 +16542,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16309,6 +16621,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr ""
 
@@ -16846,6 +17161,12 @@ msgstr ""
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17035,6 +17356,11 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
 msgstr ""
 
@@ -17088,6 +17414,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17229,10 +17559,124 @@ msgstr ""
 msgid "public"
 msgstr ""
 
-msgid "Pier"
+msgid "Marine Fuel"
 msgstr ""
 
-msgid "Lock Gate"
+msgid "Agip"
+msgstr ""
+
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
+msgid "Pier"
+msgstr ""
+
+msgid "Lock Gate"
 msgstr ""
 
 msgid "Turning Point"
@@ -17345,6 +17789,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -17468,78 +17915,6 @@ msgstr ""
 msgid "Fuel"
 msgstr ""
 
-msgid "Agip"
-msgstr ""
-
-msgid "Aral"
-msgstr ""
-
-msgid "Avia"
-msgstr ""
-
-msgid "BP"
-msgstr ""
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr ""
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
 msgid "With shop"
 msgstr ""
 
@@ -17549,51 +17924,12 @@ msgstr ""
 msgid "kiosk"
 msgstr ""
 
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -17812,9 +18148,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17833,6 +18166,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18035,6 +18371,12 @@ msgstr ""
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18125,6 +18467,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18339,6 +18684,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18826,7 +19174,7 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
@@ -18835,43 +19183,70 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
-msgid "Glass"
+msgid "Cardboard"
 msgstr ""
 
-msgid "Paper"
+msgid "Electrical Appliances"
 msgstr ""
 
-msgid "Scrap Metal"
+msgid "Glass"
 msgstr ""
 
-msgid "container"
+msgid "Glass Bottles"
 msgstr ""
 
-msgid "centre"
+msgid "Green Waste"
 msgstr ""
 
-msgid "Waste Basket/Trash Can"
+msgid "Paper"
 msgstr ""
 
-msgid "Waste Disposal/Dumpster"
+msgid "Plastic"
 msgstr ""
 
-msgid "Sanitary Dump Station"
+msgid "Plastic Bottles"
 msgstr ""
 
-msgid "Suction pumpout"
+msgid "Plastic Packaging"
 msgstr ""
 
-msgid "Gravity drain for hose"
+msgid "Scrap Metal"
 msgstr ""
 
-msgid "Casette or Elsan Disposal"
+msgid "Shoes"
 msgstr ""
 
-msgid "Operation times"
+msgid "Small Appliances"
 msgstr ""
 
-msgid "Backrest"
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
+msgstr ""
+
+msgid "Waste Basket/Trash Can"
+msgstr ""
+
+msgid "Waste Disposal/Dumpster"
+msgstr ""
+
+msgid "Sanitary Dump Station"
+msgstr ""
+
+msgid "Suction pumpout"
+msgstr ""
+
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
+msgstr ""
+
+msgid "Operation times"
+msgstr ""
+
+msgid "Backrest"
 msgstr ""
 
 msgid "Amount of Seats"
@@ -19051,6 +19426,9 @@ msgstr ""
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr ""
 
@@ -19226,12 +19604,18 @@ msgstr ""
 msgid "Basketball"
 msgstr ""
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr ""
 
@@ -19247,13 +19631,13 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
@@ -19277,9 +19661,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19298,9 +19679,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -19373,6 +19751,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20693,9 +21079,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -21708,10 +22091,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22138,6 +22521,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22162,6 +22548,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22222,6 +22620,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22312,9 +22713,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22684,6 +23094,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22738,9 +23151,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23484,47 +23894,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23533,10 +23952,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24139,6 +24570,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr ""
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25236,374 +25670,680 @@ msgid ""
 "highlight tracks"
 msgstr ""
 
-msgid "Delete this"
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
 msgstr ""
 
-msgid "Delete this&older"
+msgid "Connecting"
 msgstr ""
 
-msgid "km/h"
+msgid "Connected"
 msgstr ""
 
-msgid "Track name: "
+msgid "no name"
 msgstr ""
 
-msgid "Update IRS adjustment layer"
+msgid "Live GPS"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid "Show GPS data."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Speed"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Course"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
+msgid "Explore"
 msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25624,6 +26364,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -25682,47 +26425,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -25955,6 +26657,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr ""
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27172,6 +27877,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27343,6 +28069,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27352,6 +28081,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27532,6 +28264,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27710,6 +28445,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27719,6 +28487,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -27955,9 +28726,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29440,9 +30208,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/km.po b/i18n/po/km.po
index 306c9c8..00f5cf3 100644
--- a/i18n/po/km.po
+++ b/i18n/po/km.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2015-01-27 10:25+0000\n"
 "Last-Translator: Sophea Sok <sksophea at gmail.com>\n"
 "Language-Team: Khmer <km at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:46+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:49+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -97,21 +97,18 @@ msgstr "កំពុង​ផ្ទុក​រូបភាព​ចំណូល
 msgid "Updating user interface"
 msgstr "កំពុង​ធ្វើ​បច្ចុប្បន្នភាព​ចំណុចប្រទាក់​អ្នកប្រើ"
 
-msgid "{0} completed in {1}"
-msgstr "បាន​បញ្ចប់ {0} នៃ {1}"
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "មិន​អើពើ URL ឯកសារ​មិន​ត្រឹមត្រូវ៖ \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "មិន​អើពើ URL មិន​ត្រឹមត្រូវ៖ \"{0}\""
 
 msgid "Warning"
 msgstr "ការ​ព្រមាន"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "មិន​អើពើ URL ឯកសារ​មិន​ត្រឹមត្រូវ៖ \"{0}\""
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr "ប៉ារ៉ាម៉ែត្រ \"downloadgps\" មិន​ព្រម​ទទួល​ឈ្មោះ​ឯកសារ ឬ​ឯកសារ URLs"
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "មិន​អើពើ URL មិន​ត្រឹមត្រូវ៖ \"{0}\""
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -457,6 +454,9 @@ msgstr "បិទ/បើក​ផ្ទាំង​ប្រអប់​បញ
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "បិទ/បើក​ផ្ទាំង​ប្រអប់​បញ្ចូល បង្រួម​អតិបរមា​ទិដ្ឋភាព​ផែនទី"
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr "ចែកចាយ​តំណ​ដែល​បាន​ជ្រើស​ឲ្យ​មាន​ចម្ងាយ​ស្មើគ្នា​តាម​បន្ទាត់។"
 
@@ -1095,6 +1095,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr "សូម​ជ្រើស​ផ្លូវ​ដែល​មាន​មុំ​ប្រហែល៩០ ឬ១៨០ដឺក្រេ។"
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr "បិទ​ភ្ជាប់"
 
@@ -2067,15 +2091,6 @@ msgstr "មុំ​ឆក់​សកម្ម។"
 msgid "Finish drawing."
 msgstr "បញ្ចប់​ការ​គូរ។"
 
-msgid "FIX"
-msgstr "FIX"
-
-msgid "draw angle snap"
-msgstr "គូរ​មុំ​ឆក់"
-
-msgid "draw angle snap highlight"
-msgstr "គូរ​មុំ​ឆក់​រំលេច"
-
 msgid "Toggle snapping by {0}"
 msgstr "បិទ/បើក​ការ​ឆក់​ដោយ {0}"
 
@@ -2097,6 +2112,15 @@ msgstr "0,45,90,..."
 msgid "0,30,45,60,90,..."
 msgstr "0,30,45,60,90,..."
 
+msgid "FIX"
+msgstr "FIX"
+
+msgid "draw angle snap"
+msgstr "គូរ​មុំ​ឆក់"
+
+msgid "draw angle snap highlight"
+msgstr "គូរ​មុំ​ឆក់​រំលេច"
+
 msgid "Angle snapping"
 msgstr "មុំ​ឆក់"
 
@@ -2228,9 +2252,6 @@ msgstr ""
 "ParallelWayAction\n"
 "ផ្លូវ​ដែល​បាន​ជ្រើស​ត្រូវតែ​បង្កើត​ទម្រង់​ផ្លូវ​គ្មាន​ខ្នែង​ធម្មតា"
 
-msgid "Make parallel way error"
-msgstr "កំហុស​ក្នុង​ការ​បង្កើត​ផ្លូវ​ប៉ារ៉ាឡែល"
-
 msgid "Drag play head"
 msgstr "អូស​ក្បាល​ចាក់"
 
@@ -2457,9 +2478,15 @@ msgstr "វត្ថុ​ទាំងអស់"
 msgid "Also include incomplete and deleted objects in search."
 msgstr "រួមបញ្ចូល​វត្ថុ​ដែល​បាន​លុប ឬ​មិន​បញ្ចប់​នៅ​ក្នុង​ការ​ស្វែងរក។"
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr "កន្សោម​ធម្មតា"
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr "បន្ថែម​ប៊ូតុង​របារ​ឧបករណ៍"
 
@@ -2682,6 +2709,10 @@ msgid "RX"
 msgstr "RX"
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr "A"
 
@@ -2735,6 +2766,9 @@ msgstr "ជួរ​លេខ​ដែល​បាន​រំពឹង​ទុ
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr "ថូខឹន​ដែល​មិន​បាន​រំពឹង​ទុក។ បាន​រំពឹង​ទុក {0}, រក​ឃើញ {1}"
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr "ថូខឹន​ដែល​មិន​បាន​រំពឹង​ទុក៖ {0}"
 
@@ -3201,6 +3235,24 @@ msgstr "បាន​បរាជ័យ​ក្នុង​ការ​បង្
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr "<html>បាន​បរាជ័យ​ក្នុង​ការ​បង្កើត​ថត​ឃ្លាំង​សម្ងាត់៖ {0}</html>"
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3336,12 +3388,46 @@ msgctxt "compass"
 msgid "E"
 msgstr "កើត"
 
-msgid "Not in cache"
-msgstr "មិន​នៅ​ក្នុង​ឃ្លាំង"
-
 msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr "រក​មិន​ឃើញ​ចំណោល ''{0}'' ចំណាំ ''{1}'' មិន​អាច​ប្រើ​បាន"
 
+msgid "HTTP error {0} when loading tiles"
+msgstr ""
+
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr "ចំណោល"
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
+msgstr ""
+
 msgid "ID > 0 expected. Got {0}."
 msgstr "ID > 0 expected. Got {0}."
 
@@ -3554,6 +3640,12 @@ msgstr "អត្ថបទ"
 msgid "areatext"
 msgstr "ផ្ទៃ​អត្ថបទ"
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr "ប៉ារ៉ាម៉ែត្រ​ត្រូវតែ​ចាប់ផ្ដើម​ដោយ​តួអក្សរ ''+'' (រក​ឃើញ ''{0}'')"
 
@@ -3581,6 +3673,9 @@ msgstr "អេលីប ''{0}'' មិន​ត្រូវ​បាន​គា
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr "បន្សំ​ប៉ារ៉ាម៉ែត្រ​អេលីប​មិន​ត្រូវ​បាន​គាំទ្រ។"
 
+msgid "Unknown datum identifier: ''{0}''"
+msgstr "មិន​ស្គាល់​គ្រឿង​សម្គាល់ datum ៖ ''{0}''"
+
 msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr "រាង​អេលីប​បាន​ទាមទារ (+ellps=* or +a=*, +b=*)"
 
@@ -3588,9 +3683,6 @@ msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 "ឯកសារ Grid shift ''{0}'' សម្រាប់​ជម្រើស +nadgrids មិន​ត្រូវ​បាន​គាំទ្រ។"
 
-msgid "Unknown datum identifier: ''{0}''"
-msgstr "មិន​ស្គាល់​គ្រឿង​សម្គាល់ datum ៖ ''{0}''"
-
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
 msgstr "Datum បាន​ទាមទារ (+datum=*, +towgs84=* ឬ +nadgrids=*)"
 
@@ -4235,9 +4327,6 @@ msgstr "ពាក្យគន្លឹះ​ស្លាក​វែង​ជា
 msgid "Tags with empty values"
 msgstr "ស្លាក​ដែល​មាន​តម្លៃ​ទទេ"
 
-msgid "Invalid property key"
-msgstr "ពាក្យ​គន្លឹះ​លក្ខណសម្បត្តិ​មិន​ត្រឹមត្រូវ"
-
 msgid "Invalid white space in property key"
 msgstr "ចន្លោះ​ដកឃ្លា​មិន​ត្រឹមត្រូវ​នៅ​ក្នុង​ពាក្យ​គន្លឹះ​លក្ខណសម្បត្តិ"
 
@@ -4247,12 +4336,24 @@ msgstr "តម្លៃ​លក្ខណសម្បត្តិ​បាន​
 msgid "Property values contain HTML entity"
 msgstr "តម្លៃ​លក្ខណសម្បត្តិ​មាន​ធាត HTML"
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr "ពាក្យ​គន្លឹះ ''{0}'' គឺ​មិន​នៅ​ក្នុង​ការ​កំណត់​ស្រេច"
 
 msgid "Presets do not contain property key"
 msgstr "ការ​កំណត់​ស្រេច​មិន​មាន​ពាក្យ​គន្លឹះ​លក្ខណសម្បត្តិ"
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 "តម្លៃ ''{0}'' សម្រាប់​ពាក្យ​គន្លឹះ ''{1}'' មិន​នៅ​ក្នុង​ការ​កំណត់​ស្រេច។"
@@ -4443,6 +4544,9 @@ msgstr "តំណ​ផ្លូវ​នៅ​ជិត​ផ្លូវ​ផ
 msgid "Connected way end node near other way"
 msgstr "តំណ​ចុង​ផ្លូវ​ដែល​បាន​តភ្ជាប់​នៅ​ជិត​ផ្លូវ​ផ្សេងទៀត"
 
+msgid "Unconnected nodes without physical tags"
+msgstr "តំណ​មិន​តភ្ជាប់​ដែល​គ្មាន​ស្លាក"
+
 msgid "Untagged and unconnected nodes"
 msgstr "តំណ​ដែល​មិន​បាន​ដាក់​ស្លាក និង​មិន​បាន​តភ្ជាប់"
 
@@ -4450,9 +4554,6 @@ msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 "វា​នឹង​ពិនិត្យមើល​សម្រាប់​តំណ​គ្មាន​ស្លាក​ដែល​មិនមែន​ជា​ផ្នែក​នៃ​ផ្លូវ​ណាមួយ។"
 
-msgid "Unconnected nodes without physical tags"
-msgstr "តំណ​មិន​តភ្ជាប់​ដែល​គ្មាន​ស្លាក"
-
 msgid "No tags"
 msgstr "គ្មាន​ស្លាក"
 
@@ -4647,8 +4748,9 @@ msgstr "ចុច​ដើម្បី​បិទ​ប្រអប់"
 msgid "Imagery offset"
 msgstr "អុហ្វសិត​រូបភាព"
 
+msgctxt "menu"
 msgid "Imagery"
-msgstr "រូបភាព"
+msgstr ""
 
 msgctxt "layer"
 msgid "Offset"
@@ -4882,45 +4984,56 @@ msgstr ""
 "ដោយសារ​កំហុស​បណ្ដាញ​ដូច​ខាងក្រោម៖<br>{1}វា​អាច​ដោយ​សារ​កំហុស​ការ​កំណត់​រចនាសម"
 "្ព័ន្ធ​ប្រូកស៊ី។<br>តើ​អ្នក​ចង់​ប្ដូរ​ការ​កំណត់​ប្រូកស៊ី​ឥឡូវ​ឬ?"
 
+msgctxt "menu"
 msgid "File"
-msgstr "ឯកសារ"
+msgstr ""
 
-msgid "Session"
-msgstr "សម័យ"
+msgctxt "menu"
+msgid "Edit"
+msgstr ""
 
+msgctxt "menu"
 msgid "View"
-msgstr "មើល"
+msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
-msgstr "ឧបករណ៍"
+msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
-msgstr "ឧបករណ៍​ច្រើន​ទៀត"
+msgstr ""
 
+msgctxt "menu"
 msgid "Data"
-msgstr "ទិន្នន័យ"
+msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
-msgstr "ជម្រើស"
+msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
-msgstr "ការ​កំណត់​ជាមុន"
+msgstr ""
 
 msgid "More..."
 msgstr "ច្រើនទៀត..."
 
+msgctxt "menu"
 msgid "GPS"
-msgstr "ជីភីអេស"
+msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
-msgstr "វីនដូ"
+msgstr ""
+
+msgctxt "menu"
+msgid "Help"
+msgstr ""
 
 msgid "Menu: {0}"
 msgstr "ម៉ឺនុយ៖ {0}"
 
-msgid "Save and load the current session (list of layers, etc.)"
-msgstr "រក្សាទុក រួច​ផ្ទុក​សម័យ​បច្ចុប្បន្ន (បញ្ជី​ស្រទាប់។ល។)"
-
 msgid "Edit toolbar"
 msgstr "របារ​ឧបករណ៍​កែសម្រួល"
 
@@ -4942,8 +5055,9 @@ msgstr "ចុច​ដើម្បី​បើក​ផ្ទាំង​រូ
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
-msgstr "អូឌីយ៉ូ"
+msgstr ""
 
 msgid "Do not hide toolbar"
 msgstr "កុំ​លាក់​របារ​ឧបករណ៍"
@@ -5066,66 +5180,17 @@ msgstr "នៅ​ផ្ទៃ​ខាងក្រោយ"
 msgid "Click to run job in background"
 msgstr "ចុច​ដើម្បី​ដំណើរការ​នៅ​ផ្ទៃ​ខាងក្រោយ"
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-"រូបភាព Aerial អាច​មាន​កំហុស​ប្រកប។ "
-"សូម​ពិនិត្យ​អុហ្វសិត​របស់​វា​ដោយ​ប្រើ​ការ​តាមដាន​ជីភីអេស!"
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-
-msgid "Details..."
-msgstr "សេចក្តីលម្អិត​..."
-
-msgid "Hide this message and never show it again"
-msgstr "លាក់​សារ​នេះ ហើយ​កុំ​បង្ហាញ​វា​ម្ដងទៀត"
+msgid " ({0})"
+msgstr " ({0})"
 
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-"<html>សូម​បញ្ជាក់​ដើម្បី​លុប <strong>វត្ថុ 1</strong> ចេញពី "
-"<strong>ទំនាក់ទំនង 1</strong> ។</html>"
+msgid "{0} completed in {1}"
+msgstr "បាន​បញ្ចប់ {0} នៃ {1}"
 
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
+msgid "Enlarge"
 msgstr ""
-"<html>សូម​បញ្ជាក់​ដើម្បី​លុប <strong>វត្ថុ 1</strong> ចេញពី "
-"<strong>ទំនាក់ទំនង {0}</strong> ។</html>"
 
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
+msgid "Shrink"
 msgstr ""
-"<html>សូម​បញ្ជាក់​ដើម្បី​លុប <strong>វត្ថុ {0}</strong> ចេញពី "
-"<strong>ទំនាក់ទំនង {1}</strong> ។</html>"
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] "កំពុង​លុប​វត្ថុ {0}"
-
-msgid "Delete objects"
-msgstr "លុប​វត្ថុ"
-
-msgid "To delete"
-msgstr "ដើម្បី​លុប"
-
-msgid "From Relation"
-msgstr "ចេញពី​ទំនាក់ទំនង"
-
-msgid "Pos."
-msgstr "Pos."
-
-msgid "Role"
-msgstr "តួនាទី"
-
-msgid "Click to close the dialog and remove the object from the relations"
-msgstr "ចុច​ដើម្បី​បិទ​ប្រអប់ និង​លុប​វត្ថុ​ចេញពី​ទំនាក់ទំនង"
-
-msgid "Click to close the dialog and to abort deleting the objects"
-msgstr "ចុច​ដើម្បី​បិទ​ប្រអប់ និង​បោះបង់​ការ​លុប​វត្ថុ"
 
 msgid ""
 "<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
@@ -5595,6 +5660,9 @@ msgstr "រក្សា​ស្ថានភាព​លុប​របស់​
 msgid "Undecide conflict between deleted state"
 msgstr "ការ​ប៉ះទង្គិច​មិន​ទាន់​សម្រេច​រវាង​ស្ថានភាព​ដែល​បាន​លុប"
 
+msgid "Role"
+msgstr "តួនាទី"
+
 msgid "Primitive"
 msgstr "ព្រីមីទីវ"
 
@@ -5871,6 +5939,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr "អនុវត្ត​តួនាទី​នេះ​ទៅ​សមាជិក​ទាំងអស់"
 
+msgid "Pos."
+msgstr "Pos."
+
 msgid "Orig. Way"
 msgstr "Orig. Way"
 
@@ -6035,6 +6106,46 @@ msgstr "ដោះស្រាយ​ការ​ប៉ះទង្គិច"
 msgid "Resolve conflicts for ''{0}''"
 msgstr "ដោះស្រាយ​ការ​ប៉ះទង្គិច​សម្រាប់ ''{0}''"
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+"<html>សូម​បញ្ជាក់​ដើម្បី​លុប <strong>វត្ថុ 1</strong> ចេញពី "
+"<strong>ទំនាក់ទំនង 1</strong> ។</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>សូម​បញ្ជាក់​ដើម្បី​លុប <strong>វត្ថុ 1</strong> ចេញពី "
+"<strong>ទំនាក់ទំនង {0}</strong> ។</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>សូម​បញ្ជាក់​ដើម្បី​លុប <strong>វត្ថុ {0}</strong> ចេញពី "
+"<strong>ទំនាក់ទំនង {1}</strong> ។</html>"
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] "កំពុង​លុប​វត្ថុ {0}"
+
+msgid "Delete objects"
+msgstr "លុប​វត្ថុ"
+
+msgid "To delete"
+msgstr "ដើម្បី​លុប"
+
+msgid "From Relation"
+msgstr "ចេញពី​ទំនាក់ទំនង"
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr "ចុច​ដើម្បី​បិទ​ប្រអប់ និង​លុប​វត្ថុ​ចេញពី​ទំនាក់ទំនង"
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr "ចុច​ដើម្បី​បិទ​ប្រអប់ និង​បោះបង់​ការ​លុប​វត្ថុ"
+
 msgid "Filter objects and hide/disable them."
 msgstr "ត្រង​វត្ថុ រួច​លាក់/បិទ​ពួកវា។"
 
@@ -6136,8 +6247,8 @@ msgstr "ព័ត៌មាន​វត្ថុ​កម្រិត​ខ្ព
 msgid "map style"
 msgstr "រចនាប័ទ្ម​ផែនទី"
 
-msgid " ({0})"
-msgstr " ({0})"
+msgid "edit counts"
+msgstr ""
 
 msgid "not in data set"
 msgstr "មិន​នៅ​ក្នុង​សំណុំ​ទិន្នន័យ"
@@ -6276,6 +6387,11 @@ msgstr ""
 "ព្រមាន៖ វត្ថុ២ដែល​បាន​ជ្រើស​មាន​ភាព​ស្មើគ្នា "
 "ប៉ុន្តែ​មិន​មាន​ឃ្លាំង​រចនាប័ទ្ម​ដូចគ្នា។"
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr "xml"
 
@@ -6285,29 +6401,49 @@ msgstr "mapcss"
 msgid "unknown"
 msgstr "មិន​ស្គាល់"
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
-msgstr ""
-"បញ្ចូល​កូអរដោណេ​សម្រាប់​តំណ​ថ្មី។<br/>អ្នក​អាច​ញែក​រយៈបណ្ដោយ "
-"និង​រយៈទទឹង​ដោយ​ប្រើ​សញ្ញា​ដកឃ្លា សញ្ញា​ក្បៀស ឬ​សញ្ញា​ចុច​ក្បៀស "
-"(;)។<br/>ប្រើ​លេខ​វិជ្ជមាន ឬ​អក្សរ N, E ដើម្បី​បញ្ជាក់​ទិស​ខាងជើង "
-"ឬ​ខាងត្បូង។<br/>សម្រាប់​ទិស​ខាងត្បូង និង​ខាងកើត អ្នក​អាច​ប្រើ​លេខ​អវិជ្ជមាន "
-"ឬ​អក្សរ S, W "
-"បាន។<br/>តម្លៃ​កូអរដោណេ​អាច​ជា​ទ្រង់ទ្រាយ​មួយ​ដូច​ខាងក្រោម៖<ul><li><i>អង្សា</"
-"i><tt>°</tt></li><li><i>អង្សា</i><tt>°</tt> "
-"<i>នាទី</i><tt>'</tt></li><li><i>អង្សា</i><tt>°</tt> "
-"<i>នាទី</i><tt>'</tt> <i>វិនាទី</i><tt>&quot</tt></li></ul>សញ្ញា "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> គឺជា​ជម្រើស។<br/><br/>ឧទាហរណ៍៖<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
+msgstr ""
 
 msgid "Projected coordinates:"
 msgstr "កូអរដោណេ​ដែល​បាន​ធ្វើ​ចំណោល៖"
@@ -6354,6 +6490,12 @@ msgstr "ភាព​ស្រអាប់"
 msgid "Adjust opacity of the layer."
 msgstr "លៃ​តម្រូវ​ភាព​ស្រអាប់​នៃ​ស្រទាប់។"
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr "ធ្វើឲ្យ​សកម្ម"
 
@@ -6483,6 +6625,12 @@ msgstr "ការ​កំណត់​រចនាប័ទ្ម"
 msgid "Customize the style"
 msgstr "ប្ដូរ​រចនាប័ទ្ម​តាម​បំណង"
 
+msgid "Mini map"
+msgstr ""
+
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
 msgid "List of notes"
 msgstr ""
 
@@ -6541,15 +6689,16 @@ msgstr "លេខ​សម្គាល់​វត្ថុ៖"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "បញ្ចូល​លេខ​សម្គាល់​វត្ថុ​ដែល​គួរ​ត្រូវ​បាន​ទាញ​យក"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
-"លេខ​សម្គាល់​វត្ថុ​អាច​ត្រូវ​បាន​ញែក​ដោយ​សញ្ញា​ក្បៀស "
-"ឬ​សញ្ញា​ដកឃ្លា។<br/>ឧទាហរណ៍៖ {0}<br/>នៅ​ក្នុង​របៀប​ចម្រុះ "
-"អ្នក​ត្រូវ​បញ្ជាក់​ដូចនេះ៖ {1}<br/>({2} តំណាង​ឲ្យ <i>តំណ</i>, {3} សម្រាប់ "
-"<i>ផ្លូវ</i>, និង {4} សម្រាប់ <i>ទំនាក់ទំនង</i>)"
 
 msgid ""
 "Invalid ID list specified\n"
@@ -6579,6 +6728,9 @@ msgstr "ទំនាក់ទំនង៖ {0}/{1}"
 msgid "Relations: {0}"
 msgstr "ទំនាក់ទំនង៖ {0}"
 
+msgid "Selection"
+msgstr "ជម្រើស"
+
 msgid "Open a selection list window."
 msgstr "បើក​បង្អួច​បញ្ជី​ជម្រើស។"
 
@@ -6672,6 +6824,12 @@ msgstr "បើក​បង្អួច​សុពលកម្ម។"
 msgid "Validation results"
 msgstr "លទ្ធផល​សុពលកម្ម"
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr "កែ"
 
@@ -7339,6 +7497,12 @@ msgid "Launch browser with wiki help for selected object"
 msgstr ""
 "ចាប់ផ្ដើម​កម្មវិធី​អ៊ីនធឺណិត​ជាមួយ​ជំនួយ​វីគី​សម្រាប់​វត្ថុ​ដែល​បាន​ជ្រើស"
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr "បិទភ្ជាប់​តម្លៃ"
 
@@ -7429,14 +7593,13 @@ msgstr "កំណត់​ចំនួន​ស្លាក​ដែល​បា
 msgid "Remember last used tags after a restart"
 msgstr "ចងចាំ​ស្លាក​ដែល​បាន​ប្រើ​ចុងក្រោយ​បន្ទាប់ពី​ចាប់ផ្ដើម​ឡើងវិញ"
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7627,6 +7790,12 @@ msgstr "តម្រៀប​សមាជិក​ទំនាក់ទំនង
 msgid "Relation Editor: Sort"
 msgstr "កម្មវិធី​កែសម្រួល​ទំនាក់ទំនង៖ តម្រៀប"
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr "បញ្ច្រាស​លំដាប់​នៃ​សមាជិក​ទំនាក់ទំនង"
 
@@ -8223,6 +8392,9 @@ msgstr "ការ​ផ្ទុក​ប្រវត្តិ​សម្រា
 msgid "Node {0}"
 msgstr "តំណ {0}"
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr "ពង្រីក​ទៅ​តំណ"
 
@@ -9204,6 +9376,108 @@ msgid "{0} object to delete:"
 msgid_plural "{0} objects to delete:"
 msgstr[0] "វត្ថុ {0} ដែល​ត្រូវ​លុប៖"
 
+msgid "Show Tile Info"
+msgstr "បង្ហាញ​ព័ត៌មាន​ក្រឡា"
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr "ពង្រីក​បង្រួម​ស្វ័យប្រវត្តិ"
+
+msgid "Auto load tiles"
+msgstr "ផ្ទុក​ក្រឡា​ស្វ័យប្រវត្តិ"
+
+msgid "Load All Tiles"
+msgstr "ផ្ទុក​ក្រឡា​ទាំងអស់"
+
+msgid "Load All Error Tiles"
+msgstr "ផ្ទុក​ក្រឡា​មាន​កំហុស​ទាំងអស់"
+
+msgid "Zoom to native resolution"
+msgstr "ពង្រីក​ទៅ​គុណភាព​បង្ហាញ​ដើម"
+
+msgid "Change resolution"
+msgstr "ប្ដូរ​គុណភាព​បង្ហាញ"
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr "បង្ហាញ​កំហុស"
+
+msgid "Load Tile"
+msgstr "ផ្ទុក​ក្រឡា"
+
+msgid "Increase zoom"
+msgstr "បង្កើន​ការ​ពង្រីក"
+
+msgid "Decrease zoom"
+msgstr "បន្ថយ​ការ​ពង្រីក"
+
+msgid "Snap to tile size"
+msgstr "ខ្ទាស់​ទៅ​ទំហំ​ក្រឡា"
+
+msgid "Flush Tile Cache"
+msgstr "ឃ្លាំង​ក្រឡា​រាបស្មើ"
+
+msgid "zoom in to load any tiles"
+msgstr "ពង្រីក​ដើម្បី​ផ្ទុក​ក្រឡា"
+
+msgid "zoom in to load more tiles"
+msgstr "ពង្រីក​ដើម្បី​ផ្ទុក​ក្រឡា​ច្រើន​ទៀត"
+
+msgid "increase zoom level to see more detail"
+msgstr "បង្កើន​កម្រិត​ពង្រីក​ដើម្បី​មើល​ព័ត៌មាន​លម្អិត​បន្ថែម"
+
+msgid "No tiles at this zoom level"
+msgstr "មិន​មាន​ក្រឡា​នៅ​កម្រិត​ពង្រីក​នេះ​ទេ"
+
+msgid "Current zoom: {0}"
+msgstr "ការ​ពង្រីក​បច្ចុប្បន្ន៖ {0}"
+
+msgid "Display zoom: {0}"
+msgstr "ការ​ពង្រីក​បង្ហាញ៖ {0}"
+
+msgid "Pixel scale: {0}"
+msgstr "មាត្រដ្ឋាន​ភីកសែល៖ {0}"
+
+msgid "Best zoom: {0}"
+msgstr "ការ​ពង្រីក​ល្អ​បំផុត៖ {0}"
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr "បាន​ទាញ​យក {0}/{1} ក្រឡា"
+
+msgid "Save WMS file"
+msgstr "រក្សាទុក​ឯកសារ WMS"
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+"រូបភាព Aerial អាច​មាន​កំហុស​ប្រកប។ "
+"សូម​ពិនិត្យ​អុហ្វសិត​របស់​វា​ដោយ​ប្រើ​ការ​តាមដាន​ជីភីអេស!"
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+
+msgid "Details..."
+msgstr "សេចក្តីលម្អិត​..."
+
+msgid "Hide this message and never show it again"
+msgstr "លាក់​សារ​នេះ ហើយ​កុំ​បង្ហាញ​វា​ម្ដងទៀត"
+
 msgid "Customize Color"
 msgstr "ប្ដូរ​ពណ៌​តាម​តម្រូវការ"
 
@@ -9253,6 +9527,9 @@ msgstr "រក្សាទុក​ឯកសារ GPX"
 msgid "Imagery fade"
 msgstr "រូបភាព​ថយ​ពណ៌"
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr "កំហុស"
 
@@ -9273,12 +9550,9 @@ msgstr "បាន​គាំទ្រ​ចំណោល​ទាំងអស់
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
-"ស្រទាប់ {0} មិន​គាំទ្រ​ចំណោល {1} ។\n"
-"{2}\n"
-"ប្ដូរ​ចំណោល​ម្ដងទៀត ឬ​លុប​ស្រទាប់​ចេញ។"
 
 msgid "Save Layer"
 msgstr "រក្សាទុក​ស្រទាប់"
@@ -9361,179 +9635,73 @@ msgstr ""
 msgid "Save OSM file"
 msgstr "រក្សាទុក​ឯកសារ OSM"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-"{0} មិនមែន​ជា​អាគុយម៉ង់ TMS ត្រឹមត្រូវ។ សូម​ពិនិត្យ URL ម៉ាស៊ីន​មេ៖\n"
-"{1}"
+msgid "EPSG:4326 and Mercator projection are supported"
+msgstr "បាន​គាំទ្រ​ចំណោល EPSG:4326 និង Mercator"
 
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-"ស្រទាប់ TMS មិន​គាំទ្រ​ចំណោល {0} ។\n"
-"{1}\n"
-"ប្ដូរ​ចំណោល ឬ​លុប​ស្រទាប់​ចេញ។"
+msgid "Validation errors"
+msgstr "កំហុស​សុពលកម្ម"
 
-msgid "Auto Zoom"
-msgstr "ពង្រីក​បង្រួម​ស្វ័យប្រវត្តិ"
+msgid "No validation errors"
+msgstr "មិន​មាន​កំហុស​សុពលកម្ម"
 
-msgid "Auto load tiles"
-msgstr "ផ្ទុក​ក្រឡា​ស្វ័យប្រវត្តិ"
+msgid "Set WMS Bookmark"
+msgstr "កំណត់​ចំណាំ WMS"
 
-msgid "Show Errors"
-msgstr "បង្ហាញ​កំហុស"
+msgid ""
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
+msgstr ""
 
-msgid "Load Tile"
-msgstr "ផ្ទុក​ក្រឡា"
+msgid "Correlate to GPX"
+msgstr "ទាក់ទង​នឹង GPX"
 
-msgid "Show Tile Info"
-msgstr "បង្ហាញ​ព័ត៌មាន​ក្រឡា"
+msgid "Invalid timezone"
+msgstr "តំបន់​ពេលវេលា​មិន​ត្រឹមត្រូវ"
 
-msgid "Load All Tiles"
-msgstr "ផ្ទុក​ក្រឡា​ទាំងអស់"
+msgid "Invalid offset"
+msgstr "អុហ្វសិត​មិន​ត្រឹមត្រូវ"
 
-msgid "Load All Error Tiles"
-msgstr "ផ្ទុក​ក្រឡា​មាន​កំហុស​ទាំងអស់"
+msgid "Correlate images with GPX track"
+msgstr "រូបភាព​ទាក់ទង​ជាមួយ​ដាន GPX"
 
-msgid "Increase zoom"
-msgstr "បង្កើន​ការ​ពង្រីក"
+msgid "Try Again"
+msgstr "ព្យាយាម​ម្តងទៀត"
 
-msgid "Decrease zoom"
-msgstr "បន្ថយ​ការ​ពង្រីក"
+msgid "No images could be matched!"
+msgstr "មិន​មាន​រូបភាព​ដែល​អាច​ផ្គូផ្គង!"
 
-msgid "Snap to tile size"
-msgstr "ខ្ទាស់​ទៅ​ទំហំ​ក្រឡា"
+msgid "GPX Files (*.gpx *.gpx.gz)"
+msgstr "ឯកសារ GPX (*.gpx *.gpx.gz)"
 
-msgid "Flush Tile Cache"
-msgstr "ឃ្លាំង​ក្រឡា​រាបស្មើ"
+msgid "File {0} is loaded yet under the name \"{1}\""
+msgstr "ឯកសារ {0} ត្រូវ​បាន​ផ្ទុក​នៅ​ក្រោម​ឈ្មោះ \"{1}\""
 
-msgid "zoom in to load any tiles"
-msgstr "ពង្រីក​ដើម្បី​ផ្ទុក​ក្រឡា"
+msgid "Error while parsing {0}"
+msgstr "មាន​កំហុស​ពេល​ញែក {0}"
 
-msgid "zoom in to load more tiles"
-msgstr "ពង្រីក​ដើម្បី​ផ្ទុក​ក្រឡា​ច្រើន​ទៀត"
+msgid "Could not read \"{0}\""
+msgstr "មិនអាចអាន \"{0}\""
 
-msgid "increase zoom level to see more detail"
-msgstr "បង្កើន​កម្រិត​ពង្រីក​ដើម្បី​មើល​ព័ត៌មាន​លម្អិត​បន្ថែម"
+msgid ""
+"<html>Take a photo of your GPS receiver while it displays the "
+"time.<br>Display that photo here.<br>And then, simply capture the time you "
+"read on the photo and select a timezone<hr></html>"
+msgstr ""
+"<html>ថតរូប​ឧបករណ៍​ទទួល​ជីភីអេស​របស់​អ្នក "
+"ពេល​វា​បង្ហាញ​ពេលវេលា។<br>បង្ហាញ​រូបថត​នៅ​ទីនេះ។<br>បន្ទាប់មក​ចាប់​យក​ពេលវេលា"
+"​ដែល​អ្នក​បាន​អាន​នៅ​លើ​រូបថត រួច​ជ្រើស​តំបន់​ពេលវេលា<hr></html>"
 
-msgid "No tiles at this zoom level"
-msgstr "មិន​មាន​ក្រឡា​នៅ​កម្រិត​ពង្រីក​នេះ​ទេ"
+msgid "Photo time (from exif):"
+msgstr "ពេលវេលា​រូបថត (ពី exif)៖"
 
-msgid "Current zoom: {0}"
-msgstr "ការ​ពង្រីក​បច្ចុប្បន្ន៖ {0}"
+msgid "Gps time (read from the above photo): "
+msgstr "ពេលវេលា​ជីភីអេស (អាន​ពី​រូបថត​ខាងលើ)៖ "
 
-msgid "Display zoom: {0}"
-msgstr "ការ​ពង្រីក​បង្ហាញ៖ {0}"
+msgid "I am in the timezone of: "
+msgstr "ខ្ញុំ​នៅ​ក្នុង​តំបន់​ពេលវេលា​នៃ៖ "
 
-msgid "Pixel scale: {0}"
-msgstr "មាត្រដ្ឋាន​ភីកសែល៖ {0}"
-
-msgid "Best zoom: {0}"
-msgstr "ការ​ពង្រីក​ល្អ​បំផុត៖ {0}"
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr "TMS ស្រទាប់ ({0}), ទាញ​យក​ការ​ពង្រីក {1}"
-
-msgid "EPSG:4326 and Mercator projection are supported"
-msgstr "បាន​គាំទ្រ​ចំណោល EPSG:4326 និង Mercator"
-
-msgid "Validation errors"
-msgstr "កំហុស​សុពលកម្ម"
-
-msgid "No validation errors"
-msgstr "មិន​មាន​កំហុស​សុពលកម្ម"
-
-msgid "Blank Layer"
-msgstr "ស្រទាប់​ទទេ"
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr "បាន​ទាញ​យក {0}/{1} ក្រឡា"
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr "ស្រទាប់ WMS ({0}), ការ​ទាញ​យក​ស្វ័យប្រវត្តិ​នៅ​ក្នុង​ការ​ពង្រីក {1}"
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr "ស្រទាប់ WMS ({0}), ទាញ​យក​នៅ​ក្នុង​ការ​ពង្រីក {1}"
-
-msgid "Download visible tiles"
-msgstr "ទាញ​យក​ក្រឡា​មើល​ឃើញ"
-
-msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-"តំបន់​ស្នើ​សុំ​គឺ​ធំ​ពេក។ សូម​ពង្រីក​នៅ​ក្នុង​ចំណងជើង ឬ​ប្ដូរ​គុណភាព​បង្ហាញ"
-
-msgid "Change resolution"
-msgstr "ប្ដូរ​គុណភាព​បង្ហាញ"
-
-msgid "Reload erroneous tiles"
-msgstr "ផ្ទុក​ក្រឡា​ដែល​ច្រឡំ​ឡើងវិញ"
-
-msgid "Alpha channel"
-msgstr "ឆានែល​អាល់ហ្វា"
-
-msgid "Automatically change resolution"
-msgstr "ប្ដូរ​គុណភាព​បង្ហាញ​ដោយ​ស្វ័យប្រវត្តិ"
-
-msgid "Set WMS Bookmark"
-msgstr "កំណត់​ចំណាំ WMS"
-
-msgid "Automatic downloading"
-msgstr "ទាញ​យក​ស្វ័យប្រវត្តិ"
-
-msgid "Zoom to native resolution"
-msgstr "ពង្រីក​ទៅ​គុណភាព​បង្ហាញ​ដើម"
-
-msgid "Supported projections are: {0}"
-msgstr "ចំណោល​ដែល​គាំទ្រ​គឺ៖ {0}"
-
-msgid "Unsupported WMS file version; found {0}, expected {1}"
-msgstr "មិន​គាំទ្រ​កំណែ​ឯកសារ WMS; បាន​រកឃើញ {0}, រំពឹង​ទុក {1}"
-
-msgid "Save WMS file"
-msgstr "រក្សាទុក​ឯកសារ WMS"
-
-msgid "Correlate to GPX"
-msgstr "ទាក់ទង​នឹង GPX"
-
-msgid "GPX Files (*.gpx *.gpx.gz)"
-msgstr "ឯកសារ GPX (*.gpx *.gpx.gz)"
-
-msgid "File {0} is loaded yet under the name \"{1}\""
-msgstr "ឯកសារ {0} ត្រូវ​បាន​ផ្ទុក​នៅ​ក្រោម​ឈ្មោះ \"{1}\""
-
-msgid "Error while parsing {0}"
-msgstr "មាន​កំហុស​ពេល​ញែក {0}"
-
-msgid "Could not read \"{0}\""
-msgstr "មិនអាចអាន \"{0}\""
-
-msgid ""
-"<html>Take a photo of your GPS receiver while it displays the "
-"time.<br>Display that photo here.<br>And then, simply capture the time you "
-"read on the photo and select a timezone<hr></html>"
-msgstr ""
-"<html>ថតរូប​ឧបករណ៍​ទទួល​ជីភីអេស​របស់​អ្នក "
-"ពេល​វា​បង្ហាញ​ពេលវេលា។<br>បង្ហាញ​រូបថត​នៅ​ទីនេះ។<br>បន្ទាប់មក​ចាប់​យក​ពេលវេលា"
-"​ដែល​អ្នក​បាន​អាន​នៅ​លើ​រូបថត រួច​ជ្រើស​តំបន់​ពេលវេលា<hr></html>"
-
-msgid "Photo time (from exif):"
-msgstr "ពេលវេលា​រូបថត (ពី exif)៖"
-
-msgid "Gps time (read from the above photo): "
-msgstr "ពេលវេលា​ជីភីអេស (អាន​ពី​រូបថត​ខាងលើ)៖ "
-
-msgid "I am in the timezone of: "
-msgstr "ខ្ញុំ​នៅ​ក្នុង​តំបន់​ពេលវេលា​នៃ៖ "
-
-msgid "No date"
-msgstr "គ្មាន​កាលបរិច្ឆេទ"
+msgid "No date"
+msgstr "គ្មាន​កាលបរិច្ឆេទ"
 
 msgid "Open another photo"
 msgstr "បើក​រូបថត​ផ្សេងទៀត"
@@ -9593,24 +9761,9 @@ msgstr "តំបន់​ពេលវេលា៖ "
 msgid "Offset:"
 msgstr "​អុហ្វសិត៖"
 
-msgid "Correlate images with GPX track"
-msgstr "រូបភាព​ទាក់ទង​ជាមួយ​ដាន GPX"
-
 msgid "Correlate"
 msgstr "ទាក់ទង"
 
-msgid "Invalid timezone"
-msgstr "តំបន់​ពេលវេលា​មិន​ត្រឹមត្រូវ"
-
-msgid "Invalid offset"
-msgstr "អុហ្វសិត​មិន​ត្រឹមត្រូវ"
-
-msgid "Try Again"
-msgstr "ព្យាយាម​ម្តងទៀត"
-
-msgid "No images could be matched!"
-msgstr "មិន​មាន​រូបភាព​ដែល​អាច​ផ្គូផ្គង!"
-
 msgid "No gpx selected"
 msgstr "មិន​បាន​ជ្រើស gpx"
 
@@ -9819,9 +9972,6 @@ msgstr ""
 "\n"
 "ពេលវេលា​ជីភីអេស៖ {0}"
 
-msgid "JPEG images (*.jpg)"
-msgstr "រូបភាព JPEG (*.jpg)"
-
 msgid "Show thumbnails"
 msgstr "បង្ហាញ​រូបភាព​តូចៗ"
 
@@ -9891,9 +10041,6 @@ msgstr "ម៉ែត្រ"
 msgid "Maximum area per request:"
 msgstr "ក្រឡាផ្ទៃ​អតិបរមា​ក្នុង​មួយ​សំណើ៖"
 
-msgid "sq km"
-msgstr "គីឡូម៉ែត្រ​ការ៉េ"
-
 msgid "Download near:"
 msgstr "ទាញ​យក​ក្បែរ៖"
 
@@ -10652,9 +10799,6 @@ msgstr "បិទ​ប្រអប់​ចំណូលចិត្ត រួ
 msgid "Save the preferences and close the dialog"
 msgstr "រក្សាទុក​ចំណូលចិត្ត រួច​បិទ​ប្រអប់"
 
-msgid "Download plugins"
-msgstr "ទាញ​យក​កម្មវិធី​ជំនួយ"
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 "អ្នក​ត្រូវ​ចាប់ផ្ដើម JOSM "
@@ -10663,6 +10807,9 @@ msgstr ""
 msgid "Would you like to restart now?"
 msgstr "តើ​អ្នក​ចង់​ចាប់ផ្ដើម​ឥឡូវ​ឬ?"
 
+msgid "Download plugins"
+msgstr "ទាញ​យក​កម្មវិធី​ជំនួយ"
+
 msgid "Icon paths:"
 msgstr "ផ្លូវ​រូបតំណាង៖"
 
@@ -11522,6 +11669,21 @@ msgstr "បង្ហាញ​ព្រំដែន"
 msgid "No bounding box was found for this layer."
 msgstr "រក​មិន​ឃើញ​ប្រអប់​ព្រំដែន​សម្រាប់​ស្រទាប់​នេះ។"
 
+msgid "1. Enter getCapabilities URL"
+msgstr ""
+
+msgid "2. Enter name for this layer"
+msgstr ""
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr "រូបភាព​បន្ថយ"
 
@@ -11540,6 +11702,18 @@ msgstr "ខ្លាំង"
 msgid "Sharpen (requires layer re-add): "
 msgstr "ធ្វើឲ្យ​ច្បាស់ (ទាមទារ​បន្ថែម​ស្រទាប់​ឡើងវិញ)៖ "
 
+msgid "Tile cache directory: "
+msgstr "ថត​ឃ្លាំង​ក្រឡា៖ "
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr "ចំណូលចិត្ត​រូបភាព"
 
@@ -11561,6 +11735,9 @@ msgstr "កម្មវិធី​ផ្ដល់​រូបភាព"
 msgid "Offset bookmarks"
 msgstr "ចំណាំ​អុហ្វសិត"
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr "ផ្ទៃ​ខាងក្រោយ​រូបភាព៖ លំនាំដើម"
 
@@ -11603,9 +11780,6 @@ msgstr "មិន​មាន URL អាជ្ញាប័ណ្ណ EULA ៖ {0}
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr "URL មិន​ត្រឹមត្រូវ​សម្រាប់​អាជ្ញាប័ណ្ណ EULA ៖ {0}"
 
-msgid "Projection"
-msgstr "ចំណោល"
-
 msgid "Layer"
 msgstr "ស្រទាប់"
 
@@ -11630,18 +11804,12 @@ msgstr "កម្រិត​ពង្រីក​អតិបរមា៖ "
 msgid "Add to slippymap chooser: "
 msgstr "បន្ថែម​ទៅ​កម្មវិធី​ជ្រើស​ផែនទី​រហ័ស៖ "
 
-msgid "Tile cache directory: "
-msgstr "ថត​ឃ្លាំង​ក្រឡា៖ "
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
@@ -11649,20 +11817,11 @@ msgstr ""
 "ស្រទាប់​មិន​គាំទ្រ​ចំណោល JOSM, ដូច្នេះ​អ្នក​មិន​អាច\n"
 "ប្រើ​វា​បាន​ទេ។ សារ​នេះ​នឹង​មិន​បង្ហាញ​ម្ដងទៀត​ទេ។"
 
-msgid "Downloader:"
-msgstr "កម្មវិធី​ទាញ​យក៖"
-
 msgid "Simultaneous connections:"
 msgstr "ការ​តភ្ជាប់​ដំណាលគ្នា៖"
 
-msgid "Overlap tiles"
-msgstr "ក្រឡា​ជាន់គ្នា"
-
-msgid "% of east:"
-msgstr "% នៃ​ខាងកើត៖"
-
-msgid "% of north:"
-msgstr "% ខាងជើង៖"
+msgid "Tile size:"
+msgstr ""
 
 msgid "Auto save enabled"
 msgstr "បាប​បើក​ការ​រក្សាទុក​ស្វ័យប្រវត្តិ"
@@ -12693,6 +12852,14 @@ msgstr "អនុវត្ត​ការ​កំណត់​ស្រេច"
 msgid "New relation"
 msgstr "ទំនាក់ទំនង​ថ្មី"
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] "ប្ដូរ​វត្ថុ {0}"
@@ -12810,6 +12977,9 @@ msgstr "បង្ហាញ​ប្រអប់​ស្វែងរក​កា
 msgid "Search presets"
 msgstr "ស្វែងរក​ការ​កំណត់​ស្រេច"
 
+msgid "Presets"
+msgstr "ការ​កំណត់​ជាមុន"
+
 msgid "Search for objects by preset"
 msgstr "ស្វែងរក​វត្ថុ​តាម​ការ​កំណត់​ស្រេច"
 
@@ -13124,6 +13294,9 @@ msgstr "<html>មិន​អាច​អាន​ឯកសារ។<br>កំ
 msgid "GeoJSON Files"
 msgstr "ឯកសារ GeoJSON"
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr "មិន​គាំទ្រ​ស្រទាប់ ''{0}''"
 
@@ -13715,6 +13888,9 @@ msgstr "បាន​បង្ហាប់​ឯកសារ​ម៉ាស៊ី
 msgid "WMS Files (*.wms)"
 msgstr "ឯកសារ WMS (*.wms)"
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr "មិន​គាំទ្រ​កំណែ​ឯកសារ WMS; បាន​រកឃើញ {0}, រំពឹង​ទុក {1}"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -14156,6 +14332,19 @@ msgstr[0] ""
 "កម្មវិធី​ជំនួយ {0} ទាមទារ​កម្មវិធី​ជំនួយ {1} ដែល​រក​មិន​ឃើញ។ "
 "កម្មវិធី​ជំនួយ​ដែល​បាត់​គឺ៖"
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -15329,6 +15518,9 @@ msgstr "ធ្វើ​បច្ចុប្បន្នភាព"
 msgid "Update directory listing."
 msgstr "ធ្វើ​បច្ចុប្បន្នភាព​បញ្ជី​ថត។"
 
+msgid "View"
+msgstr "មើល"
+
 msgid "Blue:"
 msgstr "ខៀវ៖"
 
@@ -15368,7 +15560,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -15380,9 +15572,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -15491,6 +15680,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -15504,12 +15696,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -15546,10 +15744,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -15576,6 +15780,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -15600,7 +15807,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -15615,6 +15822,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -15627,12 +15837,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -15653,6 +15857,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -15685,10 +15892,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -15718,73 +15922,25 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
-msgid "OSMIE Townlands"
-msgstr ""
-
-msgid "OSMIE EDs"
-msgstr ""
-
-msgid "OSMIE Civil Parishes"
-msgstr ""
-
-msgid "OSMIE Baronies"
-msgstr ""
-
-msgid "OSMIE Political"
-msgstr ""
-
-msgid "Ireland EEA GMES Urban Atlas"
-msgstr ""
-
-msgid "Ireland EEA CORINE 2006"
-msgstr ""
-
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
 msgstr ""
 
 msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Clare Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Dublin Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Fermanagh Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Galway Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Kildare Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Leitrim Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Longford Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Offaly Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Sligo Civil Parishes and Baronies"
+msgid "OSMIE Townlands"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "OSMIE EDs"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "OSMIE Civil Parishes"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "OSMIE Baronies"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "OSMIE Political"
 msgstr ""
 
 msgid "Lodi - Italy"
@@ -15820,6 +15976,9 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
+msgid "1.cikla ortofotokarte - Latvia"
+msgstr ""
+
 msgid "ORT10LT (Lithuania)"
 msgstr ""
 
@@ -15835,6 +15994,9 @@ msgstr ""
 msgid "Luxembourg Inspire Roads"
 msgstr ""
 
+msgid "Luxembourg Inspire Water"
+msgstr ""
+
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -15850,9 +16012,15 @@ msgstr ""
 msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgstr ""
+
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
+msgid "Geoportal 2: ISOK hillshade"
+msgstr ""
+
 msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
@@ -15862,15 +16030,27 @@ msgstr ""
 msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
+msgid "Bytom: Fotoplan 2014 (aerial image)"
+msgstr ""
+
 msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
 msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
+msgid "Częstochowa: Budynki (buildings)"
+msgstr ""
+
 msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgstr ""
+
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgstr ""
+
 msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
@@ -15880,24 +16060,69 @@ msgstr ""
 msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat łańcucki: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat poznański: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgstr ""
+
+msgid "Powiat rzeszowski: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgstr ""
+
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgstr ""
+
+msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgstr ""
+
+msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgstr ""
+
+msgid "Rzeszów: Budynki (buildings)"
+msgstr ""
+
+msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgstr ""
+
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
 msgstr ""
 
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -16027,6 +16252,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -16042,7 +16282,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -16390,6 +16630,11 @@ msgstr ""
 "អនុវត្ត​បន្ទាត់​ពាក្យ​បញ្ជា រួច​បើក​វា​ដើម្បី​បង្កើត​ពាក្យ​បញ្ជា​របស់​អ្នក។ "
 "មើល​តំណ​សម្រាប់​ពាក្យ​បញ្ជា​ស្តង់ដារ (អ័ក្ស រង្វង់។ល។)"
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 "(ព្រមាន៖ សម្រាប់​ពិសោធន៍!) ឧបករណ៍​សម្រាប់​ភ្ជាប់ (បញ្ចូល) ទិន្នន័យ​ចូលគ្នា។"
@@ -16493,14 +16738,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr "WMSPlugin-style របៀប​ផែនទី​ការ​លៃ​តម្រូវ​រូបភាព"
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-"កម្មវិធី​ជំនួយ​ពិសោធន៍​នេះ​អនុញ្ញាត​ឲ្យ JOSM "
-"ស្ដារ​ឃ្លាំង​សម្ងាត់​ក្រឡា​នៅ​ក្នុង​មូលដ្ឋាន​ទិន្នន័យ "
-"មិនមែន​នៅ​ក្នុង​ថត​ឃ្លាំង​សម្ងាត់​ធំ​ទេ"
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -16577,7 +16814,7 @@ msgstr ""
 "អ្នក​អាច​បង្កើត បិទ ដក​សុពលភាព បើក​ឡើងវិញ "
 "និង​ផ្ដល់​របាយការណ៍​បំបាត់​កំហុស​ដោយ​ប្រើ​កម្មវិធី​ជំនួយ​នេះ។"
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -16595,9 +16832,6 @@ msgstr "បញ្ចូល​គ្នា​នូវ​ផ្នែក​ត្
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr "បន្ថែម​ការ​មិន​បត់​ឆ្វេង​សម្រាប់​ផ្លូវ ៤ ឬ ៥"
 
-msgid "Simplifies download from different read-only APIs."
-msgstr "ទាញ​យក​ធម្មតា​ពី APIs បានតែ​អាន​ផ្សេងគ្នា។"
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 "អនុញ្ញាត​ឲ្យ​កំណត់​គុណ​លក្ខណៈ​ស្លាក​ចំពោះ​វត្ថុ​ទាំងអស់​នៅ​ក្នុង​ផ្ទៃ​ដែល​បាន"
@@ -16695,6 +16929,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr "កម្មវិធី​ជំនួយ​នេះ​កំណត់​ផែនទី និង​កែសម្រួល​ផ្លូវ​ដឹកជញ្ជូន​សាធារណៈ។"
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr "ទំនាក់ទំនង និង​ការ​បង្កើត​ពហុកោណ​ចម្រុះ និង​ការ​កែសម្រួល​ផ្ទាំង។"
 
@@ -16735,6 +16977,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -16812,9 +17057,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -17220,6 +17462,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -17244,10 +17494,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -17264,6 +17510,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -17280,11 +17530,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -17300,6 +17562,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -17312,6 +17578,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -17339,6 +17609,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -17730,6 +18012,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -17806,6 +18091,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr ""
 
@@ -18343,6 +18631,12 @@ msgstr ""
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -18532,6 +18826,11 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
 msgstr ""
 
@@ -18585,6 +18884,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -18726,6 +19029,120 @@ msgstr ""
 msgid "public"
 msgstr ""
 
+msgid "Marine Fuel"
+msgstr ""
+
+msgid "Agip"
+msgstr ""
+
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
 msgid "Pier"
 msgstr ""
 
@@ -18842,6 +19259,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -18965,154 +19385,43 @@ msgstr ""
 msgid "Fuel"
 msgstr ""
 
-msgid "Agip"
+msgid "With shop"
 msgstr ""
 
-msgid "Aral"
+msgid "convenience"
 msgstr ""
 
-msgid "Avia"
+msgid "kiosk"
 msgstr ""
 
-msgid "BP"
+msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
-msgid "Chevron"
+msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Citgo"
+msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
-msgid "Eni"
+msgid "1/50 mix (mofa/moped)"
 msgstr ""
 
-msgid "Esso"
+msgid "Fuel cards:"
 msgstr ""
 
-msgid "Exxon"
+msgid "DKV"
 msgstr ""
 
-msgid "Gulf"
+msgid "Routex"
 msgstr ""
 
-msgid "Mobil"
+msgid "UTA"
 msgstr ""
 
-msgid "OMV"
+msgid "Charging Station"
 msgstr ""
 
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
-msgid "With shop"
-msgstr ""
-
-msgid "convenience"
-msgstr ""
-
-msgid "kiosk"
-msgstr ""
-
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
-msgid "Diesel (Gas To Liquid - ultimate diesel)"
-msgstr ""
-
-msgid "Diesel for Heavy Good Vehicles"
-msgstr ""
-
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
-msgid "1/25 mix (mofa/moped)"
-msgstr ""
-
-msgid "1/50 mix (mofa/moped)"
-msgstr ""
-
-msgid "Fuel cards:"
-msgstr ""
-
-msgid "DKV"
-msgstr ""
-
-msgid "Routex"
-msgstr ""
-
-msgid "UTA"
-msgstr ""
-
-msgid "Charging Station"
-msgstr ""
-
-msgid "Voltage"
+msgid "Voltage"
 msgstr ""
 
 msgid "Amperage"
@@ -19309,9 +19618,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -19330,6 +19636,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -19532,6 +19841,12 @@ msgstr ""
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -19622,6 +19937,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -19836,6 +20154,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -20323,7 +20644,7 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
@@ -20332,19 +20653,46 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
+msgid "Cardboard"
+msgstr ""
+
+msgid "Electrical Appliances"
+msgstr ""
+
 msgid "Glass"
 msgstr ""
 
+msgid "Glass Bottles"
+msgstr ""
+
+msgid "Green Waste"
+msgstr ""
+
 msgid "Paper"
 msgstr ""
 
+msgid "Plastic"
+msgstr ""
+
+msgid "Plastic Bottles"
+msgstr ""
+
+msgid "Plastic Packaging"
+msgstr ""
+
 msgid "Scrap Metal"
 msgstr ""
 
-msgid "container"
+msgid "Shoes"
+msgstr ""
+
+msgid "Small Appliances"
+msgstr ""
+
+msgid "Waste"
 msgstr ""
 
-msgid "centre"
+msgid "Recycling Centre"
 msgstr ""
 
 msgid "Waste Basket/Trash Can"
@@ -20548,6 +20896,9 @@ msgstr ""
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr ""
 
@@ -20723,12 +21074,18 @@ msgstr ""
 msgid "Basketball"
 msgstr ""
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr ""
 
@@ -20744,13 +21101,13 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
@@ -20774,9 +21131,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -20795,9 +21149,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -20870,6 +21221,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -22190,9 +22549,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -23205,10 +23561,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -23635,6 +23991,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -23659,6 +24018,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -23719,6 +24090,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -23809,9 +24183,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -24181,6 +24564,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -24235,9 +24621,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -24981,47 +25364,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -25030,10 +25422,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debug"
+msgstr ""
+
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -25636,6 +26040,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr "ស្រទាប់​ទទេ"
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -26733,374 +27140,680 @@ msgid ""
 "highlight tracks"
 msgstr ""
 
-msgid "Delete this"
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
 msgstr ""
 
-msgid "Delete this&older"
+msgid "Connecting"
 msgstr ""
 
-msgid "km/h"
+msgid "Connected"
 msgstr ""
 
-msgid "Track name: "
+msgid "no name"
 msgstr ""
 
-msgid "Update IRS adjustment layer"
+msgid "Live GPS"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid "Show GPS data."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Speed"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Course"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
+msgid "Explore"
 msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -27121,6 +27834,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -27179,47 +27895,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -27452,6 +28127,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr "ឧបករណ៍"
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -28669,6 +29347,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -28840,6 +29539,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -28849,6 +29551,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -29029,6 +29734,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -29207,6 +29915,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -29216,6 +29957,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -29452,9 +30196,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -30937,9 +31678,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/ko.po b/i18n/po/ko.po
index 57fa345..7f47df8 100644
--- a/i18n/po/ko.po
+++ b/i18n/po/ko.po
@@ -7,16 +7,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
-"PO-Revision-Date: 2015-02-27 14:53+0000\n"
-"Last-Translator: Yongmin Hong <revi at fastlizard4.org>\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
+"PO-Revision-Date: 2015-10-04 14:18+0000\n"
+"Last-Translator: Myeongjin <aranet100 at gmail.com>\n"
 "Language-Team: Korean <ko at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:47+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:50+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: ko\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -97,21 +97,18 @@ msgstr "영상 환경 설정을 불러오는 중"
 msgid "Updating user interface"
 msgstr "사용자 인터페이스 업데이트 중"
 
-msgid "{0} completed in {1}"
-msgstr "{0}은 {1}에서 완료되었습니다"
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "잘못된 파일 URL 무시: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "잘못된 URL 무시: \"{0}\""
 
 msgid "Warning"
 msgstr "경고"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "잘못된 파일 URL 무시: \"{0}\""
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr "\"downloadgps\" 변수를 파일 이름이나 파일 URL에서 받아올 수 없습니다"
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "잘못된 URL 무시: \"{0}\""
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -444,6 +441,9 @@ msgstr "토글 대화 패널"
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr "선택된 Node를 일직선상의 동일 거리에 분산 배치합니다"
 
@@ -472,7 +472,7 @@ msgid "Download data"
 msgstr "데이터 다운로드"
 
 msgid "Download notes in current view"
-msgstr ""
+msgstr "현재 보기에서 참고 다운로드"
 
 msgid "Download object..."
 msgstr "오브젝트 다운로드..."
@@ -484,7 +484,7 @@ msgid "Download parent ways/relations..."
 msgstr "상위 길/관계 다운로드..."
 
 msgid "Download objects referring to one of the selected objects"
-msgstr ""
+msgstr "선택된 개체의 하나를 참조하는 개체 다운로드"
 
 msgid "Duplicate"
 msgstr "복제"
@@ -682,10 +682,10 @@ msgid ""
 msgstr ""
 
 msgid "Removed Element from Relations"
-msgstr ""
+msgstr "관계에서 제거된 요소"
 
 msgid "Remove tags from inner ways"
-msgstr ""
+msgstr "안쪽 길에서의 태그 제거"
 
 msgid "Join Areas Function"
 msgstr ""
@@ -715,7 +715,7 @@ msgid "Enter Lat/Lon to jump to position."
 msgstr "위도/경도를 입력하여 위치로 이동합니다."
 
 msgid "You can also paste an URL from www.openstreetmap.org"
-msgstr ""
+msgstr "www.openstreetmap.org에서 URL을 붙여넣을 수도 있습니다"
 
 msgid "Latitude"
 msgstr "위도"
@@ -736,7 +736,7 @@ msgid "Jump to Position"
 msgstr "위치로 가기"
 
 msgid "Could not parse Latitude, Longitude or Zoom. Please check."
-msgstr ""
+msgstr "위도, 경도 또는 확대를 구문 분석할 수 없습니다. 확인해주세요."
 
 msgid "Unable to parse Lon/Lat"
 msgstr "위도/경도를 파싱할 수 없었습니다."
@@ -757,7 +757,7 @@ msgid "Imagery: {0}"
 msgstr ""
 
 msgid "Custom WMS Link"
-msgstr ""
+msgstr "사용자 지정  WMS 링크"
 
 msgid "Supported Rectifier Services:"
 msgstr ""
@@ -766,7 +766,7 @@ msgid "Visit Homepage"
 msgstr "홈페이지 방문"
 
 msgid "WMS URL or Image ID:"
-msgstr ""
+msgstr "WMS URL 또는 그림 ID:"
 
 msgid "Add Rectified Image"
 msgstr ""
@@ -777,7 +777,7 @@ msgid ""
 msgstr ""
 
 msgid "No valid WMS URL or id"
-msgstr ""
+msgstr "유효한 WMS URL 또는 id가 아닙니다"
 
 msgid "Merge layer"
 msgstr "layer 합치기"
@@ -909,17 +909,16 @@ msgid ""
 msgid_plural ""
 "Cannot open {0} files because files do not exist or no suitable file "
 "importer is available."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "파일이 존재하지 않거나 적합한 파일 가져오기 도구를 사용할 수 없으므로 파일 {0}개를 열 수 없습니다."
 
 msgid "no importer"
-msgstr ""
+msgstr "가져오기 도구 없음"
 
 msgid "does not exist"
 msgstr "존재하지 않음"
 
 msgid "<html>Cannot open directory ''{0}''.<br>Please select a file.</html>"
-msgstr ""
+msgstr "<html>''{0}'' 디렉터리를 열 수 없습니다.<br>파일을 선택하세요.</html>"
 
 msgid "Open file"
 msgstr "파일 열기"
@@ -1026,6 +1025,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr "쿼리 빌드"
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr "구문 분석 오류"
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr "붙여넣기"
 
@@ -1062,7 +1085,7 @@ msgid "Preferences..."
 msgstr "설정..."
 
 msgid "Open a preferences dialog for global settings."
-msgstr ""
+msgstr "전역 설정을 위한 사용자 환경 설정 대화 상자를 엽니다."
 
 msgid "Preferences"
 msgstr "기본 설정"
@@ -1091,7 +1114,7 @@ msgid ""
 msgstr ""
 
 msgid "Add to selection"
-msgstr ""
+msgstr "선택에 추가"
 
 msgid ""
 "Some of the objects are modified.<br> Proceed, if these changes should be "
@@ -1099,7 +1122,7 @@ msgid ""
 msgstr ""
 
 msgid "Clear Undo/Redo buffer"
-msgstr ""
+msgstr "실행 취소/다시 실행 버퍼 지우기"
 
 msgid "Redo"
 msgstr "재실행"
@@ -1108,10 +1131,10 @@ msgid "Redo the last undone action."
 msgstr "앞단계로 재실행"
 
 msgid "Redo ..."
-msgstr ""
+msgstr "다시 실행 ..."
 
 msgid "Redo {0}"
-msgstr ""
+msgstr "{0} 다시 실행"
 
 msgid "Rename layer"
 msgstr "Layer 이름 변경"
@@ -1123,19 +1146,19 @@ msgid "Could not rename file ''{0}''"
 msgstr "''{0}'' 파일 이름을 바꿀 수 없습니다"
 
 msgid "Report bug"
-msgstr ""
+msgstr "버그 보고"
 
 msgid "Report a ticket to JOSM bugtracker"
-msgstr ""
+msgstr "JOSM 버그트래커에 티켓 보고"
 
 msgid "Restart"
-msgstr ""
+msgstr "다시 시작"
 
 msgid "Restart the application."
-msgstr ""
+msgstr "애플리케이션을 다시 시작합니다."
 
 msgid "Click to restart later."
-msgstr ""
+msgstr "나중에 다시 시작하려면 클릭하세요."
 
 msgid "Reverse way"
 msgstr ""
@@ -1174,19 +1197,19 @@ msgid "Save the current data to a new file."
 msgstr "현재 데이터를 새 파일로 저장"
 
 msgid "Search Notes..."
-msgstr ""
+msgstr "참고 검색..."
 
 msgid "Download notes from the note search API"
-msgstr ""
+msgstr "참고 검색 API에서 참고를 다운로드"
 
 msgid "Search the OSM API for notes containing words:"
 msgstr ""
 
 msgid "Search for notes"
-msgstr ""
+msgstr "참고를 위한 검색"
 
 msgid "You must enter a search term"
-msgstr ""
+msgstr "검색어를 입력해야 합니다"
 
 msgid "Select All"
 msgstr "전체 선택"
@@ -1937,15 +1960,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr "그리기 끝내기"
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -1967,6 +1981,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2085,9 +2108,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2301,9 +2321,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr "정규식"
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2517,6 +2543,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2561,6 +2591,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr "기대하지 않은 토큰: {0}"
 
@@ -3004,6 +3037,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3121,10 +3172,44 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "HTTP error {0} when loading tiles"
+msgstr ""
+
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3312,6 +3397,12 @@ msgstr ""
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3339,13 +3430,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -3961,9 +4052,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -3973,12 +4061,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4159,13 +4259,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4362,6 +4462,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4575,43 +4676,54 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
 msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
 msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
-msgstr "선택"
+msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
 msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
-msgid "Menu: {0}"
+msgctxt "menu"
+msgid "Help"
 msgstr ""
 
-msgid "Save and load the current session (list of layers, etc.)"
+msgid "Menu: {0}"
 msgstr ""
 
 msgid "Edit toolbar"
@@ -4635,6 +4747,7 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
 msgstr ""
 
@@ -4757,58 +4870,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr ""
-
-msgid "Pos."
+msgid " ({0})"
 msgstr ""
 
-msgid "Role"
-msgstr ""
+msgid "{0} completed in {1}"
+msgstr "{0}은 {1}에서 완료되었습니다"
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5237,6 +5308,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr ""
+
 msgid "Primitive"
 msgstr ""
 
@@ -5477,6 +5551,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5623,6 +5700,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5726,7 +5838,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5854,6 +5966,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5863,17 +5980,48 @@ msgstr ""
 msgid "unknown"
 msgstr "알 수 없는"
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -5919,6 +6067,12 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr ""
 
@@ -6048,6 +6202,12 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
+msgid "Mini map"
+msgstr ""
+
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
 msgid "List of notes"
 msgstr ""
 
@@ -6106,10 +6266,15 @@ msgstr "오브젝트 ID:"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "다운로드 해야 할 오브젝트 ID를 입력하세요"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6138,6 +6303,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr ""
 
+msgid "Selection"
+msgstr "선택"
+
 msgid "Open a selection list window."
 msgstr ""
 
@@ -6228,6 +6396,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -6822,6 +6996,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6913,14 +7093,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7093,6 +7272,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7628,6 +7813,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8478,6 +8666,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr ""
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr "사용자 지정 색상"
 
@@ -8531,6 +8819,9 @@ msgstr "GPX 파일 저정"
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8551,7 +8842,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8634,265 +8925,150 @@ msgstr "해결되지 않은 충돌이 있습니다. 충돌은 저장되지 않
 msgid "Save OSM file"
 msgstr "OSM 파일 저정"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
+msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
+msgid "Validation errors"
 msgstr ""
 
-msgid "Auto Zoom"
+msgid "No validation errors"
 msgstr ""
 
-msgid "Auto load tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
-msgid "Show Errors"
+msgid ""
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Load Tile"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Show Tile Info"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Load All Tiles"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Load All Error Tiles"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Increase zoom"
+msgid "Try Again"
 msgstr ""
 
-msgid "Decrease zoom"
+msgid "No images could be matched!"
 msgstr ""
 
-msgid "Snap to tile size"
+msgid "GPX Files (*.gpx *.gpx.gz)"
 msgstr ""
 
-msgid "Flush Tile Cache"
+msgid "File {0} is loaded yet under the name \"{1}\""
 msgstr ""
 
-msgid "zoom in to load any tiles"
-msgstr ""
+msgid "Error while parsing {0}"
+msgstr "분석 도중에 에러가 발생했습니다. {0}"
 
-msgid "zoom in to load more tiles"
-msgstr ""
+msgid "Could not read \"{0}\""
+msgstr "\\\"{0}\\\"을 읽을 수가 없습니다."
 
-msgid "increase zoom level to see more detail"
+msgid ""
+"<html>Take a photo of your GPS receiver while it displays the "
+"time.<br>Display that photo here.<br>And then, simply capture the time you "
+"read on the photo and select a timezone<hr></html>"
 msgstr ""
 
-msgid "No tiles at this zoom level"
+msgid "Photo time (from exif):"
 msgstr ""
 
-msgid "Current zoom: {0}"
+msgid "Gps time (read from the above photo): "
 msgstr ""
 
-msgid "Display zoom: {0}"
+msgid "I am in the timezone of: "
 msgstr ""
 
-msgid "Pixel scale: {0}"
+msgid "No date"
 msgstr ""
 
-msgid "Best zoom: {0}"
+msgid "Open another photo"
 msgstr ""
 
-msgid "Cache stats: {0}"
+msgid "Synchronize time from a photo of the GPS receiver"
 msgstr ""
 
-msgid "TMS layer ({0}), downloading in zoom {1}"
+msgid ""
+"Error while parsing the date.\n"
+"Please use the requested format"
 msgstr ""
 
-msgid "EPSG:4326 and Mercator projection are supported"
+msgid "Invalid date"
 msgstr ""
 
-msgid "Validation errors"
+msgid "<No GPX track loaded yet>"
 msgstr ""
 
-msgid "No validation errors"
+msgid "GPX track: "
 msgstr ""
 
-msgid "Blank Layer"
+msgid "Open another GPX trace"
 msgstr ""
 
-msgid "Downloaded {0}/{1} tiles"
+msgid ""
+"<html>Use photo of an accurate clock,<br>e.g. GPS receiver display</html>"
 msgstr ""
 
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
+msgid "Auto-Guess"
 msgstr ""
 
-msgid "WMS layer ({0}), downloading in zoom {1}"
+msgid "Matches first photo with first gpx point"
 msgstr ""
 
-msgid "Download visible tiles"
+msgid "Manual adjust"
 msgstr ""
 
-msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
+msgid "Override position for: "
 msgstr ""
 
-msgid "Change resolution"
+msgid "Images with geo location in exif data ({0}/{1})"
 msgstr ""
 
-msgid "Reload erroneous tiles"
+msgid "Images that are already tagged ({0}/{1})"
 msgstr ""
 
-msgid "Alpha channel"
+msgid "Show Thumbnail images on the map"
 msgstr ""
 
-msgid "Automatically change resolution"
+msgid "Timezone: "
 msgstr ""
 
-msgid "Set WMS Bookmark"
+msgid "Offset:"
 msgstr ""
 
-msgid "Automatic downloading"
+msgid "Correlate"
 msgstr ""
 
-msgid "Zoom to native resolution"
+msgid "No gpx selected"
 msgstr ""
 
-msgid "Supported projections are: {0}"
-msgstr ""
+msgid "<html>Matched <b>{0}</b> of <b>{1}</b> photo to GPX track.</html>"
+msgid_plural ""
+"<html>Matched <b>{0}</b> of <b>{1}</b> photos to GPX track.</html>"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Timezone: {0}"
 msgstr ""
 
-msgid "Save WMS file"
+msgid "Minutes: {0}"
 msgstr ""
 
-msgid "Correlate to GPX"
+msgid "Seconds: {0}"
 msgstr ""
 
-msgid "GPX Files (*.gpx *.gpx.gz)"
-msgstr ""
-
-msgid "File {0} is loaded yet under the name \"{1}\""
-msgstr ""
-
-msgid "Error while parsing {0}"
-msgstr "분석 도중에 에러가 발생했습니다. {0}"
-
-msgid "Could not read \"{0}\""
-msgstr "\\\"{0}\\\"을 읽을 수가 없습니다."
-
-msgid ""
-"<html>Take a photo of your GPS receiver while it displays the "
-"time.<br>Display that photo here.<br>And then, simply capture the time you "
-"read on the photo and select a timezone<hr></html>"
-msgstr ""
-
-msgid "Photo time (from exif):"
-msgstr ""
-
-msgid "Gps time (read from the above photo): "
-msgstr ""
-
-msgid "I am in the timezone of: "
-msgstr ""
-
-msgid "No date"
-msgstr ""
-
-msgid "Open another photo"
-msgstr ""
-
-msgid "Synchronize time from a photo of the GPS receiver"
-msgstr ""
-
-msgid ""
-"Error while parsing the date.\n"
-"Please use the requested format"
-msgstr ""
-
-msgid "Invalid date"
-msgstr ""
-
-msgid "<No GPX track loaded yet>"
-msgstr ""
-
-msgid "GPX track: "
-msgstr ""
-
-msgid "Open another GPX trace"
-msgstr ""
-
-msgid ""
-"<html>Use photo of an accurate clock,<br>e.g. GPS receiver display</html>"
-msgstr ""
-
-msgid "Auto-Guess"
-msgstr ""
-
-msgid "Matches first photo with first gpx point"
-msgstr ""
-
-msgid "Manual adjust"
-msgstr ""
-
-msgid "Override position for: "
-msgstr ""
-
-msgid "Images with geo location in exif data ({0}/{1})"
-msgstr ""
-
-msgid "Images that are already tagged ({0}/{1})"
-msgstr ""
-
-msgid "Show Thumbnail images on the map"
-msgstr ""
-
-msgid "Timezone: "
-msgstr ""
-
-msgid "Offset:"
-msgstr ""
-
-msgid "Correlate images with GPX track"
-msgstr ""
-
-msgid "Correlate"
-msgstr ""
-
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
-msgid "No gpx selected"
-msgstr ""
-
-msgid "<html>Matched <b>{0}</b> of <b>{1}</b> photo to GPX track.</html>"
-msgid_plural ""
-"<html>Matched <b>{0}</b> of <b>{1}</b> photos to GPX track.</html>"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Timezone: {0}"
-msgstr ""
-
-msgid "Minutes: {0}"
-msgstr ""
-
-msgid "Seconds: {0}"
-msgstr ""
-
-msgid "(Time difference of {0} day)"
-msgid_plural "Time difference of {0} days"
-msgstr[0] ""
-msgstr[1] ""
+msgid "(Time difference of {0} day)"
+msgid_plural "Time difference of {0} days"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid ""
 "An error occurred while trying to match the photos to the GPX track. You can "
@@ -9064,9 +9240,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr "JPEG이미지 (*.jpg)"
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9129,9 +9302,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9757,15 +9927,15 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr ""
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -10558,6 +10728,21 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
+msgid "1. Enter getCapabilities URL"
+msgstr ""
+
+msgid "2. Enter name for this layer"
+msgstr ""
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr ""
 
@@ -10576,6 +10761,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10597,6 +10794,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10639,9 +10839,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr "레이어"
 
@@ -10666,36 +10863,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11631,6 +11813,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] ""
@@ -11739,6 +11929,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -11992,6 +12185,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12528,6 +12724,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12913,6 +13112,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13907,6 +14119,9 @@ msgstr ""
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr ""
+
 msgid "Blue:"
 msgstr ""
 
@@ -13946,7 +14161,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -13958,9 +14173,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14069,6 +14281,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14082,12 +14297,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14124,10 +14345,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
+msgstr ""
+
+msgid "Geodatastyrelsen DTK Kort25"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14154,6 +14381,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14178,7 +14408,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14193,6 +14423,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14205,12 +14438,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14231,6 +14458,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14263,10 +14493,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14296,6 +14523,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14311,154 +14544,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14473,9 +14712,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14605,6 +14853,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14620,7 +14883,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -14946,6 +15209,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15030,11 +15298,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15088,7 +15351,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15103,9 +15366,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15186,6 +15446,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15224,6 +15492,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15299,9 +15570,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15707,6 +15975,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15731,10 +16007,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15751,6 +16023,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15767,11 +16043,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15787,6 +16075,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15799,6 +16091,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15826,6 +16122,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16217,6 +16525,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16293,6 +16604,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr ""
 
@@ -16830,6 +17144,12 @@ msgstr ""
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17019,6 +17339,11 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
 msgstr ""
 
@@ -17072,6 +17397,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17213,6 +17542,120 @@ msgstr ""
 msgid "public"
 msgstr ""
 
+msgid "Marine Fuel"
+msgstr ""
+
+msgid "Agip"
+msgstr ""
+
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
 msgid "Pier"
 msgstr ""
 
@@ -17329,6 +17772,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -17452,142 +17898,31 @@ msgstr ""
 msgid "Fuel"
 msgstr ""
 
-msgid "Agip"
+msgid "With shop"
 msgstr ""
 
-msgid "Aral"
+msgid "convenience"
 msgstr ""
 
-msgid "Avia"
+msgid "kiosk"
 msgstr ""
 
-msgid "BP"
+msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
-msgid "Chevron"
+msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Citgo"
+msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
-msgid "Eni"
+msgid "1/50 mix (mofa/moped)"
 msgstr ""
 
-msgid "Esso"
+msgid "Fuel cards:"
 msgstr ""
 
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
-msgid "With shop"
-msgstr ""
-
-msgid "convenience"
-msgstr ""
-
-msgid "kiosk"
-msgstr ""
-
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
-msgid "Diesel (Gas To Liquid - ultimate diesel)"
-msgstr ""
-
-msgid "Diesel for Heavy Good Vehicles"
-msgstr ""
-
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
-msgid "1/25 mix (mofa/moped)"
-msgstr ""
-
-msgid "1/50 mix (mofa/moped)"
-msgstr ""
-
-msgid "Fuel cards:"
-msgstr ""
-
-msgid "DKV"
+msgid "DKV"
 msgstr ""
 
 msgid "Routex"
@@ -17796,9 +18131,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17817,6 +18149,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18019,6 +18354,12 @@ msgstr ""
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18109,6 +18450,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18323,6 +18667,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18810,7 +19157,7 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
@@ -18819,19 +19166,46 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
+msgid "Cardboard"
+msgstr ""
+
+msgid "Electrical Appliances"
+msgstr ""
+
 msgid "Glass"
 msgstr ""
 
+msgid "Glass Bottles"
+msgstr ""
+
+msgid "Green Waste"
+msgstr ""
+
 msgid "Paper"
 msgstr ""
 
+msgid "Plastic"
+msgstr ""
+
+msgid "Plastic Bottles"
+msgstr ""
+
+msgid "Plastic Packaging"
+msgstr ""
+
 msgid "Scrap Metal"
 msgstr ""
 
-msgid "container"
+msgid "Shoes"
+msgstr ""
+
+msgid "Small Appliances"
+msgstr ""
+
+msgid "Waste"
 msgstr ""
 
-msgid "centre"
+msgid "Recycling Centre"
 msgstr ""
 
 msgid "Waste Basket/Trash Can"
@@ -19035,6 +19409,9 @@ msgstr ""
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr ""
 
@@ -19210,12 +19587,18 @@ msgstr ""
 msgid "Basketball"
 msgstr ""
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr ""
 
@@ -19231,13 +19614,13 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
@@ -19261,9 +19644,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19282,9 +19662,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -19357,6 +19734,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20677,9 +21062,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -21692,10 +22074,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22122,6 +22504,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22146,6 +22531,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22206,6 +22603,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22296,9 +22696,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22668,6 +23077,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22722,9 +23134,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23468,47 +23877,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23517,10 +23935,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debug"
+msgstr ""
+
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24123,6 +24553,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr ""
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25220,374 +25653,680 @@ msgid ""
 "highlight tracks"
 msgstr ""
 
-msgid "Delete this"
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
 msgstr ""
 
-msgid "Delete this&older"
+msgid "Connecting"
 msgstr ""
 
-msgid "km/h"
+msgid "Connected"
 msgstr ""
 
-msgid "Track name: "
+msgid "no name"
 msgstr ""
 
-msgid "Update IRS adjustment layer"
+msgid "Live GPS"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid "Show GPS data."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Speed"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Course"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
+msgid "Explore"
 msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25608,6 +26347,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -25666,47 +26408,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -25939,6 +26640,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr ""
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27156,6 +27860,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27327,6 +28052,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27336,6 +28064,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27516,6 +28247,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27694,6 +28428,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27703,6 +28470,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -27939,9 +28709,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29423,9 +30190,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/ky.po b/i18n/po/ky.po
index 37c119f..9170397 100644
--- a/i18n/po/ky.po
+++ b/i18n/po/ky.po
@@ -7,16 +7,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: FULL NAME <EMAIL at ADDRESS>\n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2012-12-18 02:36+0000\n"
-"Last-Translator: chyngyz <Unknown>\n"
+"Last-Translator: SimpleLeon <Unknown>\n"
 "Language-Team: Kirghiz <ky at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:47+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:50+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
 msgstr ""
@@ -96,19 +96,16 @@ msgstr ""
 msgid "Updating user interface"
 msgstr ""
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
 msgstr ""
 
 msgid "Warning"
 msgstr "Көңүл буруңуз"
 
-msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
+msgid "Ignoring malformed file URL: \"{0}\""
 msgstr ""
 
-msgid "Ignoring malformed URL: \"{0}\""
+msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 
 msgid ""
@@ -443,6 +440,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
 
@@ -1028,6 +1028,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr ""
 
@@ -1944,15 +1968,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr ""
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -1974,6 +1989,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2092,9 +2116,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2308,9 +2329,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr ""
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2524,6 +2551,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2566,6 +2597,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3016,6 +3050,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3133,10 +3185,44 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3326,6 +3412,12 @@ msgstr ""
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3353,13 +3445,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -3975,9 +4067,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -3987,12 +4076,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4173,13 +4274,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4377,6 +4478,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4590,43 +4692,54 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
 msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
 msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
 msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
 msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
-msgid "Menu: {0}"
+msgctxt "menu"
+msgid "Help"
 msgstr ""
 
-msgid "Save and load the current session (list of layers, etc.)"
+msgid "Menu: {0}"
 msgstr ""
 
 msgid "Edit toolbar"
@@ -4650,6 +4763,7 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
 msgstr ""
 
@@ -4772,58 +4886,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr ""
-
-msgid "Pos."
+msgid " ({0})"
 msgstr ""
 
-msgid "Role"
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5252,6 +5324,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr ""
+
 msgid "Primitive"
 msgstr ""
 
@@ -5492,6 +5567,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5638,6 +5716,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5741,7 +5854,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5869,6 +5982,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5878,17 +5996,48 @@ msgstr ""
 msgid "unknown"
 msgstr ""
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -5934,6 +6083,12 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr ""
 
@@ -6063,10 +6218,16 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
-msgid "List of notes"
+msgid "Mini map"
 msgstr ""
 
-msgid "Add comment"
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
+msgid "List of notes"
+msgstr ""
+
+msgid "Add comment"
 msgstr ""
 
 msgid "Comment"
@@ -6121,10 +6282,15 @@ msgstr ""
 msgid "Enter the ID of the object that should be downloaded"
 msgstr ""
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6153,6 +6319,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr ""
 
+msgid "Selection"
+msgstr ""
+
 msgid "Open a selection list window."
 msgstr ""
 
@@ -6243,6 +6412,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -6837,6 +7012,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6928,14 +7109,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7108,6 +7288,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7643,6 +7829,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8488,6 +8677,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr ""
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr ""
 
@@ -8541,6 +8830,9 @@ msgstr ""
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8561,7 +8853,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8644,80 +8936,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr ""
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-
-msgid "Auto Zoom"
-msgstr ""
-
-msgid "Auto load tiles"
-msgstr ""
-
-msgid "Show Errors"
-msgstr ""
-
-msgid "Load Tile"
-msgstr ""
-
-msgid "Show Tile Info"
-msgstr ""
-
-msgid "Load All Tiles"
-msgstr ""
-
-msgid "Load All Error Tiles"
-msgstr ""
-
-msgid "Increase zoom"
-msgstr ""
-
-msgid "Decrease zoom"
-msgstr ""
-
-msgid "Snap to tile size"
-msgstr ""
-
-msgid "Flush Tile Cache"
-msgstr ""
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
@@ -8727,56 +8945,30 @@ msgstr ""
 msgid "No validation errors"
 msgstr ""
 
-msgid "Blank Layer"
-msgstr ""
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "Download visible tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-
-msgid "Change resolution"
-msgstr ""
-
-msgid "Reload erroneous tiles"
-msgstr ""
-
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Automatic downloading"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Zoom to native resolution"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Supported projections are: {0}"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Save WMS file"
+msgid "Try Again"
 msgstr ""
 
-msgid "Correlate to GPX"
+msgid "No images could be matched!"
 msgstr ""
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
@@ -8863,24 +9055,9 @@ msgstr ""
 msgid "Offset:"
 msgstr ""
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
 msgid "Correlate"
 msgstr ""
 
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9074,9 +9251,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr ""
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9139,9 +9313,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9767,15 +9938,15 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr ""
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -10568,13 +10739,28 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
-msgid "imagery fade"
+msgid "1. Enter getCapabilities URL"
 msgstr ""
 
-msgid "Fade Color: "
+msgid "2. Enter name for this layer"
 msgstr ""
 
-msgid "Fade amount: "
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
+msgid "imagery fade"
+msgstr ""
+
+msgid "Fade Color: "
+msgstr ""
+
+msgid "Fade amount: "
 msgstr ""
 
 msgid "Soft"
@@ -10586,6 +10772,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10607,6 +10805,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10649,9 +10850,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr ""
 
@@ -10676,36 +10874,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11641,6 +11824,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] ""
@@ -11749,6 +11940,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12002,6 +12196,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12538,6 +12735,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12923,6 +13123,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13917,6 +14130,9 @@ msgstr ""
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr ""
+
 msgid "Blue:"
 msgstr ""
 
@@ -13956,7 +14172,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -13968,9 +14184,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14079,6 +14292,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14092,12 +14308,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14134,10 +14356,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14164,6 +14392,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14188,7 +14419,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14203,6 +14434,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14215,12 +14449,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14241,6 +14469,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14273,10 +14504,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14306,6 +14534,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14321,154 +14555,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14483,9 +14723,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14615,6 +14864,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14630,7 +14894,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -14956,6 +15220,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15040,11 +15309,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15098,7 +15362,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15113,9 +15377,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15196,6 +15457,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15234,6 +15503,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15309,9 +15581,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15717,6 +15986,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15741,10 +16018,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15761,6 +16034,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15777,11 +16054,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15797,6 +16086,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15809,6 +16102,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15836,6 +16133,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16227,6 +16536,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16303,6 +16615,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr ""
 
@@ -16840,6 +17155,12 @@ msgstr ""
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17029,6 +17350,11 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
 msgstr ""
 
@@ -17082,6 +17408,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17223,13 +17553,127 @@ msgstr ""
 msgid "public"
 msgstr ""
 
-msgid "Pier"
+msgid "Marine Fuel"
 msgstr ""
 
-msgid "Lock Gate"
+msgid "Agip"
 msgstr ""
 
-msgid "Turning Point"
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
+msgid "Pier"
+msgstr ""
+
+msgid "Lock Gate"
+msgstr ""
+
+msgid "Turning Point"
 msgstr ""
 
 msgid "Slipway"
@@ -17339,6 +17783,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -17462,78 +17909,6 @@ msgstr ""
 msgid "Fuel"
 msgstr ""
 
-msgid "Agip"
-msgstr ""
-
-msgid "Aral"
-msgstr ""
-
-msgid "Avia"
-msgstr ""
-
-msgid "BP"
-msgstr ""
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr ""
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
 msgid "With shop"
 msgstr ""
 
@@ -17543,51 +17918,12 @@ msgstr ""
 msgid "kiosk"
 msgstr ""
 
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -17806,9 +18142,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17827,6 +18160,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18029,6 +18365,12 @@ msgstr ""
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18119,6 +18461,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18333,6 +18678,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18820,7 +19168,7 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
@@ -18829,43 +19177,70 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
-msgid "Glass"
+msgid "Cardboard"
 msgstr ""
 
-msgid "Paper"
+msgid "Electrical Appliances"
 msgstr ""
 
-msgid "Scrap Metal"
+msgid "Glass"
 msgstr ""
 
-msgid "container"
+msgid "Glass Bottles"
 msgstr ""
 
-msgid "centre"
+msgid "Green Waste"
 msgstr ""
 
-msgid "Waste Basket/Trash Can"
+msgid "Paper"
 msgstr ""
 
-msgid "Waste Disposal/Dumpster"
+msgid "Plastic"
 msgstr ""
 
-msgid "Sanitary Dump Station"
+msgid "Plastic Bottles"
 msgstr ""
 
-msgid "Suction pumpout"
+msgid "Plastic Packaging"
 msgstr ""
 
-msgid "Gravity drain for hose"
+msgid "Scrap Metal"
 msgstr ""
 
-msgid "Casette or Elsan Disposal"
+msgid "Shoes"
 msgstr ""
 
-msgid "Operation times"
+msgid "Small Appliances"
 msgstr ""
 
-msgid "Backrest"
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
+msgstr ""
+
+msgid "Waste Basket/Trash Can"
+msgstr ""
+
+msgid "Waste Disposal/Dumpster"
+msgstr ""
+
+msgid "Sanitary Dump Station"
+msgstr ""
+
+msgid "Suction pumpout"
+msgstr ""
+
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
+msgstr ""
+
+msgid "Operation times"
+msgstr ""
+
+msgid "Backrest"
 msgstr ""
 
 msgid "Amount of Seats"
@@ -19045,6 +19420,9 @@ msgstr ""
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr ""
 
@@ -19220,12 +19598,18 @@ msgstr ""
 msgid "Basketball"
 msgstr ""
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr ""
 
@@ -19241,13 +19625,13 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
@@ -19271,9 +19655,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19292,9 +19673,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -19367,6 +19745,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20687,9 +21073,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -21702,10 +22085,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22132,6 +22515,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22156,6 +22542,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22216,6 +22614,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22306,9 +22707,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22678,6 +23088,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22732,9 +23145,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23478,47 +23888,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23527,10 +23946,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24133,6 +24564,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr ""
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25230,374 +25664,680 @@ msgid ""
 "highlight tracks"
 msgstr ""
 
-msgid "Delete this"
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
 msgstr ""
 
-msgid "Delete this&older"
+msgid "Connecting"
 msgstr ""
 
-msgid "km/h"
+msgid "Connected"
 msgstr ""
 
-msgid "Track name: "
+msgid "no name"
 msgstr ""
 
-msgid "Update IRS adjustment layer"
+msgid "Live GPS"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid "Show GPS data."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Speed"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Course"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
+msgid "Explore"
 msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25618,6 +26358,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -25676,47 +26419,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -25949,6 +26651,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr ""
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27166,6 +27871,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27337,6 +28063,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27346,6 +28075,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27526,6 +28258,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27704,6 +28439,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27713,6 +28481,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -27949,9 +28720,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29434,9 +30202,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/lo.po b/i18n/po/lo.po
index b791846..fa2b6bd 100644
--- a/i18n/po/lo.po
+++ b/i18n/po/lo.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2009-09-15 10:06+0000\n"
 "Last-Translator: Anousone <Unknown>\n"
 "Language-Team: Lao <lo at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:48+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:51+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -97,21 +97,18 @@ msgstr ""
 msgid "Updating user interface"
 msgstr ""
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "ຂ້າມຮູບແບບເອກະສານທີ່ບໍ່ຖືກຕ້ອງ ຕາມ URL:\"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "ຂ້າມຮູບແບບທີ່ບໍ່ຖືກຕ້ອງ URL:\"{0}\""
 
 msgid "Warning"
 msgstr "ລະວັງ"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "ຂ້າມຮູບແບບເອກະສານທີ່ບໍ່ຖືກຕ້ອງ ຕາມ URL:\"{0}\""
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "ຂ້າມຮູບແບບທີ່ບໍ່ຖືກຕ້ອງ URL:\"{0}\""
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -444,6 +441,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
 
@@ -1029,6 +1029,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr ""
 
@@ -1945,15 +1969,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr ""
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -1975,6 +1990,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2093,9 +2117,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2309,9 +2330,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr ""
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2525,6 +2552,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2567,6 +2598,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3017,6 +3051,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3134,10 +3186,44 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3327,6 +3413,12 @@ msgstr ""
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3354,13 +3446,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -3976,9 +4068,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -3988,12 +4077,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4174,13 +4275,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4378,6 +4479,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4591,43 +4693,54 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
 msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
 msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
 msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
 msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
-msgid "Menu: {0}"
+msgctxt "menu"
+msgid "Help"
 msgstr ""
 
-msgid "Save and load the current session (list of layers, etc.)"
+msgid "Menu: {0}"
 msgstr ""
 
 msgid "Edit toolbar"
@@ -4651,6 +4764,7 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
 msgstr ""
 
@@ -4773,58 +4887,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr ""
-
-msgid "Pos."
+msgid " ({0})"
 msgstr ""
 
-msgid "Role"
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5253,6 +5325,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr ""
+
 msgid "Primitive"
 msgstr ""
 
@@ -5493,6 +5568,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5639,6 +5717,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5742,7 +5855,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5870,6 +5983,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5879,17 +5997,48 @@ msgstr ""
 msgid "unknown"
 msgstr ""
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -5935,10 +6084,16 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
-msgid "Activate"
+msgid "Gamma"
 msgstr ""
 
-msgid "Activate the selected layer"
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
+msgid "Activate"
+msgstr ""
+
+msgid "Activate the selected layer"
 msgstr ""
 
 msgid "Activate layer"
@@ -6064,6 +6219,12 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
+msgid "Mini map"
+msgstr ""
+
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
 msgid "List of notes"
 msgstr ""
 
@@ -6122,10 +6283,15 @@ msgstr ""
 msgid "Enter the ID of the object that should be downloaded"
 msgstr ""
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6154,6 +6320,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr ""
 
+msgid "Selection"
+msgstr ""
+
 msgid "Open a selection list window."
 msgstr ""
 
@@ -6244,6 +6413,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -6838,6 +7013,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6929,14 +7110,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7109,6 +7289,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7644,6 +7830,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8489,6 +8678,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr ""
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr ""
 
@@ -8542,6 +8831,9 @@ msgstr ""
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8562,7 +8854,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8645,80 +8937,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr ""
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-
-msgid "Auto Zoom"
-msgstr ""
-
-msgid "Auto load tiles"
-msgstr ""
-
-msgid "Show Errors"
-msgstr ""
-
-msgid "Load Tile"
-msgstr ""
-
-msgid "Show Tile Info"
-msgstr ""
-
-msgid "Load All Tiles"
-msgstr ""
-
-msgid "Load All Error Tiles"
-msgstr ""
-
-msgid "Increase zoom"
-msgstr ""
-
-msgid "Decrease zoom"
-msgstr ""
-
-msgid "Snap to tile size"
-msgstr ""
-
-msgid "Flush Tile Cache"
-msgstr ""
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
@@ -8728,56 +8946,30 @@ msgstr ""
 msgid "No validation errors"
 msgstr ""
 
-msgid "Blank Layer"
-msgstr ""
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "Download visible tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-
-msgid "Change resolution"
-msgstr ""
-
-msgid "Reload erroneous tiles"
-msgstr ""
-
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Automatic downloading"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Zoom to native resolution"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Supported projections are: {0}"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Save WMS file"
+msgid "Try Again"
 msgstr ""
 
-msgid "Correlate to GPX"
+msgid "No images could be matched!"
 msgstr ""
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
@@ -8864,24 +9056,9 @@ msgstr ""
 msgid "Offset:"
 msgstr ""
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
 msgid "Correlate"
 msgstr ""
 
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9075,9 +9252,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr ""
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9140,9 +9314,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9768,16 +9939,16 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 
 msgid "Would you like to restart now?"
 msgstr ""
 
-msgid "Icon paths:"
+msgid "Download plugins"
+msgstr ""
+
+msgid "Icon paths:"
 msgstr ""
 
 msgid "Short Description:"
@@ -10569,6 +10740,21 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
+msgid "1. Enter getCapabilities URL"
+msgstr ""
+
+msgid "2. Enter name for this layer"
+msgstr ""
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr ""
 
@@ -10587,6 +10773,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10608,6 +10806,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10650,9 +10851,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr ""
 
@@ -10677,36 +10875,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11642,6 +11825,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] ""
@@ -11750,6 +11941,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12003,6 +12197,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12539,6 +12736,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12924,6 +13124,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13918,6 +14131,9 @@ msgstr ""
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr ""
+
 msgid "Blue:"
 msgstr ""
 
@@ -13957,7 +14173,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -13969,9 +14185,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14080,6 +14293,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14093,12 +14309,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14135,10 +14357,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14165,6 +14393,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14189,7 +14420,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14204,6 +14435,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14216,12 +14450,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14242,6 +14470,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14274,10 +14505,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14307,6 +14535,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14322,154 +14556,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14484,9 +14724,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14616,6 +14865,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14631,7 +14895,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -14957,6 +15221,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15041,11 +15310,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15099,7 +15363,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15114,9 +15378,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15197,6 +15458,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15235,6 +15504,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15310,9 +15582,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15718,6 +15987,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15742,10 +16019,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15762,6 +16035,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15778,11 +16055,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15798,6 +16087,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15810,6 +16103,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15837,6 +16134,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16228,6 +16537,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16304,6 +16616,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr ""
 
@@ -16841,6 +17156,12 @@ msgstr ""
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17030,6 +17351,11 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
 msgstr ""
 
@@ -17083,6 +17409,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17224,13 +17554,127 @@ msgstr ""
 msgid "public"
 msgstr ""
 
-msgid "Pier"
+msgid "Marine Fuel"
 msgstr ""
 
-msgid "Lock Gate"
+msgid "Agip"
 msgstr ""
 
-msgid "Turning Point"
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
+msgid "Pier"
+msgstr ""
+
+msgid "Lock Gate"
+msgstr ""
+
+msgid "Turning Point"
 msgstr ""
 
 msgid "Slipway"
@@ -17340,6 +17784,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -17463,78 +17910,6 @@ msgstr ""
 msgid "Fuel"
 msgstr ""
 
-msgid "Agip"
-msgstr ""
-
-msgid "Aral"
-msgstr ""
-
-msgid "Avia"
-msgstr ""
-
-msgid "BP"
-msgstr ""
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr ""
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
 msgid "With shop"
 msgstr ""
 
@@ -17544,51 +17919,12 @@ msgstr ""
 msgid "kiosk"
 msgstr ""
 
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -17807,9 +18143,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17828,6 +18161,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18030,6 +18366,12 @@ msgstr ""
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18120,6 +18462,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18334,6 +18679,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18821,7 +19169,7 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
@@ -18830,43 +19178,70 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
-msgid "Glass"
+msgid "Cardboard"
 msgstr ""
 
-msgid "Paper"
+msgid "Electrical Appliances"
 msgstr ""
 
-msgid "Scrap Metal"
+msgid "Glass"
 msgstr ""
 
-msgid "container"
+msgid "Glass Bottles"
 msgstr ""
 
-msgid "centre"
+msgid "Green Waste"
 msgstr ""
 
-msgid "Waste Basket/Trash Can"
+msgid "Paper"
 msgstr ""
 
-msgid "Waste Disposal/Dumpster"
+msgid "Plastic"
 msgstr ""
 
-msgid "Sanitary Dump Station"
+msgid "Plastic Bottles"
 msgstr ""
 
-msgid "Suction pumpout"
+msgid "Plastic Packaging"
 msgstr ""
 
-msgid "Gravity drain for hose"
+msgid "Scrap Metal"
 msgstr ""
 
-msgid "Casette or Elsan Disposal"
+msgid "Shoes"
 msgstr ""
 
-msgid "Operation times"
+msgid "Small Appliances"
 msgstr ""
 
-msgid "Backrest"
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
+msgstr ""
+
+msgid "Waste Basket/Trash Can"
+msgstr ""
+
+msgid "Waste Disposal/Dumpster"
+msgstr ""
+
+msgid "Sanitary Dump Station"
+msgstr ""
+
+msgid "Suction pumpout"
+msgstr ""
+
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
+msgstr ""
+
+msgid "Operation times"
+msgstr ""
+
+msgid "Backrest"
 msgstr ""
 
 msgid "Amount of Seats"
@@ -19046,6 +19421,9 @@ msgstr ""
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr ""
 
@@ -19221,12 +19599,18 @@ msgstr ""
 msgid "Basketball"
 msgstr ""
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr ""
 
@@ -19242,13 +19626,13 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
@@ -19272,9 +19656,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19293,9 +19674,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -19368,6 +19746,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20688,9 +21074,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -21703,10 +22086,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22133,6 +22516,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22157,6 +22543,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22217,6 +22615,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22307,9 +22708,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22679,6 +23089,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22733,9 +23146,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23479,47 +23889,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23528,10 +23947,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24134,6 +24565,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr ""
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25231,374 +25665,680 @@ msgid ""
 "highlight tracks"
 msgstr ""
 
-msgid "Delete this"
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
 msgstr ""
 
-msgid "Delete this&older"
+msgid "Connecting"
 msgstr ""
 
-msgid "km/h"
+msgid "Connected"
 msgstr ""
 
-msgid "Track name: "
+msgid "no name"
 msgstr ""
 
-msgid "Update IRS adjustment layer"
+msgid "Live GPS"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid "Show GPS data."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Speed"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Course"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
+msgid "Explore"
 msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25619,6 +26359,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -25677,47 +26420,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -25950,6 +26652,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr ""
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27167,6 +27872,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27338,6 +28064,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27347,6 +28076,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27527,6 +28259,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27705,6 +28440,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27714,6 +28482,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -27950,9 +28721,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29435,9 +30203,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/lt.po b/i18n/po/lt.po
index c14ce2b..51f85b1 100644
--- a/i18n/po/lt.po
+++ b/i18n/po/lt.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
-"PO-Revision-Date: 2015-05-09 06:50+0000\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
+"PO-Revision-Date: 2015-10-06 18:43+0000\n"
 "Last-Translator: Aurimas Fišeras <Unknown>\n"
 "Language-Team: Lithuanian <lt at li.org>\n"
 "MIME-Version: 1.0\n"
@@ -16,30 +16,30 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
 "(n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:49+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:52+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: lt\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
-msgstr "{0}: parinktis ''{1}'' dviprasmiška"
+msgstr "{0}: parinktis „{1}“ dviprasmiška"
 
 msgid "{0}: option ''--{1}'' does not allow an argument"
-msgstr "{0}: parinktis ''--{1}'' neleidžia kintamojo dydžio"
+msgstr "{0}: parinktis „--{1}“ neleidžia argumento"
 
 msgid "{0}: option ''{1}{2}'' does not allow an argument"
-msgstr "{0}: parinktis ''{1}{2}'' neleidžia kintamojo dydžio"
+msgstr "{0}: parinktis „{1}{2}“ neleidžia argumento"
 
 msgid "{0}: option ''{1}'' requires an argument"
-msgstr "{0}: parinkčiai ''{1}'' reikalingas kintamasis dydis"
+msgstr "{0}: parinkčiai „{1}“ argumentas"
 
 msgid "{0}: unrecognized option ''--{1}''"
-msgstr "{0}: neatpažinta parinktis ''--{1}''"
+msgstr "{0}: neatpažinta parinktis „--{1}“"
 
 msgid "{0}: unrecognized option ''{1}{2}''"
-msgstr "{0}: neatpažinta parinktis ''{1}{2}''"
+msgstr "{0}: neatpažinta parinktis „{1}{2}“"
 
 msgid "{0}: illegal option -- {1}"
-msgstr "{0}: draudžiama parinktis -- {1}"
+msgstr "{0}: neleistina parinktis -- {1}"
 
 msgid "{0}: invalid option -- {1}"
 msgstr "{0}: klaidinga parinktis -- {1}"
@@ -98,21 +98,18 @@ msgstr "Įkeliamos vaizdų nuostatos"
 msgid "Updating user interface"
 msgstr "Atnaujinama naudotojo sąsaja"
 
-msgid "{0} completed in {1}"
-msgstr "{0} baigta per {1}"
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "Ignoruojama neteisingas failo URL: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "Ignoruojamas blogai suformuotas URL: „{0}“"
 
 msgid "Warning"
 msgstr "Įspėjimas"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "Ignoruojamas blogai suformuotas failo URL: „{0}“"
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr "Parametras \"downloadgps\" nepriima failo vardo arba failo URLs"
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "Ignoruojamas neteisingas URL: \"{0}\""
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -153,10 +150,10 @@ msgid "Homepage"
 msgstr "Interneto svetainė"
 
 msgid "Bug Reports"
-msgstr "Pranešti klaidas"
+msgstr "Klaidų pranešimai"
 
 msgid "Info"
-msgstr "Info"
+msgstr "Informacija"
 
 msgid "Readme"
 msgstr "Perskaityk"
@@ -183,23 +180,23 @@ msgid_plural ""
 "You are about to launch {0} browser windows.<br>This may both clutter your "
 "screen with browser windows<br>and take some time to finish."
 msgstr[0] ""
-"Jūs tuoj atidarysite {0} naršyklės langą.<br>Tai ir užterš jūsų monitorių "
-"naršyklių langais<br>ir užtruks kažkiek laiko."
+"Ruošiatės atverti {0} naršyklės langą.<br>Tai gali užgriozdinti ekraną "
+"naršyklių langais<br>ir užtrukti kažkiek laiko."
 msgstr[1] ""
-"Jūs tuoj atidarysite {0} naršyklės langus.<br>Tai ir užterš jūsų monitorių "
-"naršyklių langais<br>ir užtruks kažkiek laiko."
+"Ruošiatės atverti {0} naršyklės langus.<br>Tai gali užgriozdinti ekraną "
+"naršyklių langais<br>ir užtrukti kažkiek laiko."
 msgstr[2] ""
-"Jūs tuoj atidarysite {0} naršyklės langų.<br>Tai ir užterš jūsų monitorių "
-"naršyklių langais<br>ir užtruks kažkiek laiko."
+"Ruošiatės atverti {0} naršyklės langų.<br>Tai gali užgriozdinti ekraną "
+"naršyklių langais<br>ir užtrukti kažkiek laiko."
 
 msgid "Continue"
 msgstr "Tęsti"
 
 msgid "Click to continue and to open {0} browser"
 msgid_plural "Click to continue and to open {0} browsers"
-msgstr[0] "Spauskite, kad tęstumėte atidarinėti {0} naršyklę"
-msgstr[1] "Spauskite, kad tęstumėte atidarinėti {0} naršykles"
-msgstr[2] "Spauskite, kad tęstumėte atidarinėti {0} naršyklių"
+msgstr[0] "Spauskite, norėdami tęsti ir atverti {0} naršyklę"
+msgstr[1] "Spauskite, norėdami tęsti ir atverti {0} naršykles"
+msgstr[2] "Spauskite, norėdami tęsti ir atverti {0} naršyklių"
 
 msgid "Cancel"
 msgstr "Atsisakyti"
@@ -467,6 +464,9 @@ msgstr "Perjungti dialogų skiltį"
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Perjungti dialogų skiltį, didinti žemėlapio vaizdą"
 
+msgid "Distribute Nodes"
+msgstr "Paskirstyti taškus"
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr "Paskirstyti pažymėtus taškus vienodais atstumais tiesėje."
 
@@ -628,7 +628,7 @@ msgstr ""
 "Objekto informaciją apie OSM taškus, kelius arba ryšius rodyti naršyklėje."
 
 msgid "Join overlapping Areas"
-msgstr "Sujungti persidengiančias sritis"
+msgstr "Sujungti persidengiančius plotus"
 
 msgid "Joins areas that overlap each other"
 msgstr "Sujungia vienas kitą dengiančius plotus"
@@ -1113,6 +1113,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr "Prašome pažymėti kelius, kurių kampai daugmaž 90 ar 180 laipsnių."
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr "Įdėti"
 
@@ -1814,11 +1838,11 @@ msgstr "Šokti į pradžią"
 
 msgctxt "audio"
 msgid "Next Marker"
-msgstr "Kita žymeklis"
+msgstr "Kitas žymeklis"
 
 msgctxt "audio"
 msgid "Play next marker."
-msgstr "Groti kitą žymą."
+msgstr "Groti kitą žymeklį."
 
 msgctxt "audio"
 msgid "Play/Pause"
@@ -1829,11 +1853,11 @@ msgstr "Groti/Pristabdyti įrašą"
 
 msgctxt "audio"
 msgid "Previous Marker"
-msgstr "Ankstesnė žyma"
+msgstr "Ankstesnis žymeklis"
 
 msgctxt "audio"
 msgid "Play previous marker."
-msgstr "Groti ankstesnę žymą."
+msgstr "Groti ankstesnį žymeklį."
 
 msgctxt "audio"
 msgid "Slower"
@@ -2089,7 +2113,7 @@ msgid "Add a new node to an existing way"
 msgstr "Pridėti naują tašką prie esamo kelio"
 
 msgid "Add node into way and connect"
-msgstr "Pridėti tašką prie kelio ir prijungti."
+msgstr "Pridėti tašką prie kelio ir prijungti"
 
 msgid "Create new node."
 msgstr "Sukurti naują taką."
@@ -2115,15 +2139,6 @@ msgstr "Kampų pritraukimas įjungtas."
 msgid "Finish drawing."
 msgstr "Baigti braižyti."
 
-msgid "FIX"
-msgstr "PATAISYTI"
-
-msgid "draw angle snap"
-msgstr "paišymo kampų pritraukimas"
-
-msgid "draw angle snap highlight"
-msgstr "paišymo kampų pritraukimo paryškinimas"
-
 msgid "Toggle snapping by {0}"
 msgstr "Perjungti pritraukimą prie {0}"
 
@@ -2145,6 +2160,15 @@ msgstr "0,45,90,..."
 msgid "0,30,45,60,90,..."
 msgstr "0,30,45,60,90,..."
 
+msgid "FIX"
+msgstr "PATAISYTI"
+
+msgid "draw angle snap"
+msgstr "paišymo kampų pritraukimas"
+
+msgid "draw angle snap highlight"
+msgstr "paišymo kampų pritraukimo paryškinimas"
+
 msgid "Angle snapping"
 msgstr "Kampų pritraukimas"
 
@@ -2278,9 +2302,6 @@ msgstr ""
 "LygiagrečiųKeliųVeiksmas\n"
 "Pažymėti keliai turi formuoti paprastą kelią be atsišakojimų"
 
-msgid "Make parallel way error"
-msgstr "Lygiagretaus kelio kūrimo klaida"
-
 msgid "Drag play head"
 msgstr "Tempto grojimo galvutę"
 
@@ -2523,9 +2544,15 @@ msgstr "visi objektai"
 msgid "Also include incomplete and deleted objects in search."
 msgstr "Taipogi įtraukti į paiešką nepilnus ir ištrintus objektus."
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr "reguliarusis reiškinys"
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr "pridėti įrankių juostos mygtuką"
 
@@ -2598,7 +2625,7 @@ msgid ""
 "<b>\\\\</b>)."
 msgstr ""
 "veiksmų išskyrimas kabutėmis.<br>Kabutėmis išskirtame tekste prieš <b>\"</b> "
-"ir <b>\\<\\b> simbolius reikia rašyti <b>\\</b> (pvz. <b>\\\"</b> ir <b>\\\\"
+"ir <b>\\</b> simbolius reikia rašyti <b>\\</b> (pvz., <b>\\\"</b> ir <b>\\\\"
 "</b>)."
 
 msgid "combinators"
@@ -2748,6 +2775,10 @@ msgid "RX"
 msgstr "RX"
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr "A"
 
@@ -2800,6 +2831,9 @@ msgstr "Tikimasi skaičių intervalo"
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr "Netikėta leksema. Tikėtasi {0}, rasta {1}"
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr "Netikėta leksema: {0}"
 
@@ -2819,14 +2853,14 @@ msgid ""
 "Length of value for tag ''{0}'' on object {1} exceeds the max. allowed "
 "length {2}. Values length is {3}."
 msgstr ""
-"Žymos „{0}“ objekte {1} reikšmės ilgis didesnis už maksimalų. Leidžiamas "
-"ilgis {2}. Reikšmės ilgis {3}."
+"Žymos „{0}“ objekte {1} reikšmės ilgis vir6ija maksimalų. Leidžiamas ilgis "
+"{2}. Reikšmės ilgis {3}."
 
 msgid "Precondition Violation"
 msgstr "Sąlygos pažeidimas"
 
 msgid "{0} nodes in way {1} exceed the max. allowed number of nodes {2}"
-msgstr "{0} taškas kelyje {1} viršija maksimalų leidžiamų taškų skaičių {2}"
+msgstr "{0} taškai kelyje {1} viršija maksimalų leidžiamų taškų skaičių {2}"
 
 msgid "API Capabilities Violation"
 msgstr "API galimybių pažeidimas"
@@ -3313,6 +3347,24 @@ msgstr "Nepavyko sukurti trūkstamą podėlio aplanką: {0}"
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr "<html>Nepavyko sukurti trūkstamo podėlio aplanko: {0}</html>"
 
+msgid "Unable to delete temporary file {0}"
+msgstr "Nepavyko pašalinti laikino failo {0}"
+
+msgid "Unable to set file non-readable {0}"
+msgstr "Nepavyko nustatyti failo neskaitomu {0}"
+
+msgid "Unable to set file non-writable {0}"
+msgstr "Nepavyko nustatyti failo nerašomu {0}"
+
+msgid "Unable to set file non-executable {0}"
+msgstr "Nepavyko nustatyti failo nevykdomu {0}"
+
+msgid "Unable to set file readable {0}"
+msgstr "Nepavyko nustatyti failo skaitomu {0}"
+
+msgid "Unable to set file writable {0}"
+msgstr "Nepavyko nustatyti failo rašomu {0}"
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3447,12 +3499,50 @@ msgctxt "compass"
 msgid "E"
 msgstr "R"
 
-msgid "Not in cache"
-msgstr "Ne podėlyje"
-
 msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr "Projekcija „{0}“ nerasta, žymelė „{1}“ nepanaudojama"
 
+msgid "HTTP error {0} when loading tiles"
+msgstr "HTTP klaida {0} įkeliant kaladėles"
+
+msgid "Error downloading tiles: {0}"
+msgstr "Klaida įkeliant kaladėles: {0}"
+
+msgid "Could not load image from tile server"
+msgstr "Nepavyko įkelti vaizdo iš kaladėlių serverio"
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+"{0} nėra teisingas WMS argumentas. Prašome patikrinti šio serverio URL:\n"
+"{1}"
+
+msgid "Select WMTS layer"
+msgstr "Pasirinkti WMTS sluoksnį"
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr "Projekcija"
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr "Jokie sluoksniai nebuvo apibrėžti getCapabilities dokumento: {0}"
+
+msgid "No layer selected"
+msgstr "Neparinktas joks sluoksnis"
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
+msgstr ""
+"Tik kvadratinės kaladėlės yra palaikomos. Serverio buvo grąžinta {0}x{1}, "
+"TileMatrix identifikatoriui {2}"
+
 msgid "ID > 0 expected. Got {0}."
 msgstr "Tikėtasi ID > 0. Gauta {0}."
 
@@ -3560,7 +3650,7 @@ msgid ""
 "Tag collection cannot be applied to a primitive because there are keys with "
 "multiple values."
 msgstr ""
-"Žymų rinkinio negalima pritaikyti primityvui, nes yra raktų su keliomis "
+"Žymų rinkinio negalima pritaikyti primityvui, nes yra raktų su sudėtinėmis "
 "reikšmėmis."
 
 msgid "<anonymous>"
@@ -3661,6 +3751,12 @@ msgstr "tekstas"
 msgid "areatext"
 msgstr "ploto tekstas"
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr "UTM projekcija (''+proj=utm'') reikalauja ''+zona=...'' parametro."
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr "Parametrui „+zone=...“ tikėtasi sveiko skaičiaus intervale 1-60"
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr "Parametras turi prasidėti „+“ simboliu (rasta „{0}“)"
 
@@ -3688,15 +3784,15 @@ msgstr "Elipsoidas „{0}“ nepalaikomas."
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr "Elipsoido parametrų rinkinys nepalaikomas."
 
+msgid "Unknown datum identifier: ''{0}''"
+msgstr "Nežinomas datum identifikatorius: „{0}“"
+
 msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr "Reikia elipsoido (+ellps=* arba +a=*, +b=*)"
 
 msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr "Tinklelio poslinkio failas „{0}“ parinkčiai +nadgrids nepalaikomas."
 
-msgid "Unknown datum identifier: ''{0}''"
-msgstr "Nežinomas datum identifikatorius: „{0}“"
-
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
 msgstr "Reikalingas datum (+datum=*, +towgs84=* or +nadgrids=*)"
 
@@ -3815,7 +3911,7 @@ msgid "Addresses"
 msgstr "Adresai"
 
 msgid "Checks for errors in addresses and associatedStreet relations."
-msgstr "Tikrina klaidas adresuose ir associatedStreet ryšiuose."
+msgstr "Ieško klaidų adresuose ir associatedStreet ryšiuose."
 
 msgid "Multiple associatedStreet relations"
 msgstr "Keli associatedStreet ryšiai"
@@ -3839,7 +3935,7 @@ msgid "API Capabilities"
 msgstr "API galimybės"
 
 msgid "Checks for errors against API capabilities"
-msgstr "Tikrina klaidas pagal API galimybes"
+msgstr "Ieško klaidų pagal API galimybes"
 
 msgid ""
 "Way contains more than {0} nodes. It should be replaced by a multipolygon"
@@ -3853,7 +3949,7 @@ msgid "Barriers and entrances"
 msgstr "Barjerai ir įėjimai"
 
 msgid "Checks for errors in barriers and entrances."
-msgstr "Tikrina klaidas barjeruose ir įėjimuose."
+msgstr "Ieško klaidų barjeruose ir įėjimuose."
 
 msgid "Barrier entrance not set on a barrier"
 msgstr "Barjerui nenurodytas barjero įėjimas"
@@ -3901,7 +3997,7 @@ msgid "Crossing waterways"
 msgstr "Susikertantys vandens keliai"
 
 msgid "Crossing waterway/highway"
-msgstr "Susikertantis vanduo ir kelias"
+msgstr "Susikertantis vandens kelias ir kelias"
 
 msgid "Crossing boundaries"
 msgstr "Susikertančios ribos"
@@ -3935,7 +4031,7 @@ msgid "Waterway duplicated nodes"
 msgstr "Vandens kelių taškų dubliai"
 
 msgid "Boundary duplicated nodes"
-msgstr ""
+msgstr "Ribos taškų dubliai"
 
 msgid "Power duplicated nodes"
 msgstr "Elektros linijų taškų dubliai"
@@ -3991,7 +4087,7 @@ msgid "Duplicated way nodes"
 msgstr "Kelių taškų dubliai"
 
 msgid "Checks for ways with identical consecutive nodes."
-msgstr "Tikrina kelius su identiška taškų seka."
+msgstr "Ieško kelių su identiška taškų seka."
 
 msgid "Highways"
 msgstr "Keliai"
@@ -4075,10 +4171,10 @@ msgid "{0}, use {1} instead"
 msgstr "{0}, vietoje jo naudokite {1}"
 
 msgid "Adding {0} to tag checker"
-msgstr "Prie žymų tikrintojo pridedamas {0}"
+msgstr "Prie žymų tikrinimo pridedamas {0}"
 
 msgid "Failed to add {0} to tag checker"
-msgstr "Nepavyko pridėti {0} į žymų tikrintoją"
+msgstr "Nepavyko pridėti {0} į žymų tikrintuvę"
 
 msgid "Multipolygon"
 msgstr "Multipoligonas"
@@ -4231,8 +4327,7 @@ msgstr "Elektros linijos"
 
 msgid ""
 "Checks for nodes in power lines that do not have a power=tower/pole tag."
-msgstr ""
-"Tikrina taškus elektros linijose, kurie neturi power=tower/pole žymos."
+msgstr "Ieško taškų elektros linijose, kurie neturi power=tower/pole žymos."
 
 msgid "Missing power tower/pole within power line"
 msgstr "Elektros linijoje trūksta bokšto/stulpo"
@@ -4241,7 +4336,7 @@ msgid "Role verification problem"
 msgstr "Rolės tikrinimo problema"
 
 msgid "Relation checker"
-msgstr "Ryšių kontrolė"
+msgstr "Ryšių tikrintuvė"
 
 msgid "Checks for errors in relations."
 msgstr "Ieško klaidų ryšiuose."
@@ -4301,13 +4396,13 @@ msgstr ""
 "su klaida."
 
 msgid "Tag checker"
-msgstr "Žymų tikrintojas"
+msgstr "Žymų tikrintuvė"
 
 msgid "Adding {0} to ignore tags"
 msgstr "{0} pridedama prie ignoruojamų žymų"
 
 msgid "Invalid tagchecker line - {0}: {1}"
-msgstr "Netinkama žymų tikrintojo eilutė - {0}: {1}"
+msgstr "Netinkama žymų tikrintuvės eilutė - {0}: {1}"
 
 msgid "Invalid spellcheck line: {0}"
 msgstr "Netinkama rašybos tikrinimo eilutė: {0}"
@@ -4343,9 +4438,6 @@ msgstr "Žyma ilgesnė nei leistina"
 msgid "Tags with empty values"
 msgstr "Žymos su tuščiomis reikšmėmis"
 
-msgid "Invalid property key"
-msgstr "Netinkamas savybės raktas"
-
 msgid "Invalid white space in property key"
 msgstr "Netinkamas tarpas savybės rakte"
 
@@ -4355,12 +4447,24 @@ msgstr "Savybės reikšmė prasideda ar baigiasi tarpu"
 msgid "Property values contain HTML entity"
 msgstr "Savybės reikšmėje yra HTML esybė"
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr "Rakto „{0}“ nėra ruošiniuose."
 
 msgid "Presets do not contain property key"
 msgstr "Išankstiniuose rinkiniuose nėra savybės rakto"
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr "Vertė ''{0}'' raktui ''{1}'' atrodo kaip ''{2}''."
+
+msgid "Misspelled property value"
+msgstr "Klaidingai užrašyta nuosavybės reikšme"
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr "Rakto „{1}“ reikšmės „{0}“ nėra ruošiniuose."
 
@@ -4377,7 +4481,7 @@ msgid "Validate that property keys are valid checking against list of words."
 msgstr "Tikrinta, kad savybių raktai tinkami pagal žodžių sąrašą."
 
 msgid "Use complex property checker."
-msgstr "Naudoti sudėtingą savybių tikrintoją."
+msgstr "Naudoti sudėtingą savybių tikrintuvę."
 
 msgid "Validate property values and tags using complex rules."
 msgstr "Tikrinti savybių reikšmes ir žymas naudojant sudėtingas taisykles."
@@ -4470,7 +4574,7 @@ msgid "The last \"via\" and the \"to\" way are not connected."
 msgstr "Paskutinis „via“ (per) ir „to“ (į) keliai nesusijungia."
 
 msgid "Unclosed Ways"
-msgstr "Atviri Keliai"
+msgstr "Atviri keliai"
 
 msgid "This tests if ways which should be circular are closed."
 msgstr "Šis testas tikrina, kad keliai, kurie turi būti apvalūs yra uždari."
@@ -4500,7 +4604,7 @@ msgid "leisure type {0}"
 msgstr "laisvalaikio tipas {0}"
 
 msgid "waterway type {0}"
-msgstr "vandens kelių tipas {0}"
+msgstr "vandens kelio tipas {0}"
 
 msgid "boundary type {0}"
 msgstr "ribos tipas {0}"
@@ -4541,17 +4645,17 @@ msgstr "Kelio taškas šalia kito kelio"
 msgid "Connected way end node near other way"
 msgstr "Prijungto kelio paskutinis taškas šalia kito kelio"
 
+msgid "Unconnected nodes without physical tags"
+msgstr "Neprijungti taškai be fizinių žymų"
+
 msgid "Untagged and unconnected nodes"
 msgstr "Neprijungti taškai be žymų"
 
 msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
-"Šis testas ieško tašku, kurie neturi jokių žymų ir nepriklauso kitiems "
+"Šis testas ieško taškų, kurie neturi jokių žymų ir nepriklauso jokiems "
 "keliams."
 
-msgid "Unconnected nodes without physical tags"
-msgstr "Neprijungti taškai be fizinių žymų"
-
 msgid "No tags"
 msgstr "Be žymių"
 
@@ -4595,7 +4699,7 @@ msgid "One node ways"
 msgstr "Vieno taško keliai"
 
 msgid "Way connected to Area"
-msgstr "Kelias prijunktas prie Srities"
+msgstr "Kelias prijungtas prie ploto"
 
 msgid "Checks for ways connected to areas."
 msgstr "Ieško kelių, prijungtų prie plotų."
@@ -4646,10 +4750,10 @@ msgid "highway"
 msgstr "greitkelis"
 
 msgid "railway"
-msgstr "geležinkeliai"
+msgstr "geležinkelis"
 
 msgid "waterway"
-msgstr "vandens keliai"
+msgstr "vandens kelias"
 
 msgid "landuse"
 msgstr "žemėnauda"
@@ -4715,7 +4819,7 @@ msgid "Client Time Out"
 msgstr "Klientui baigėsi laikas"
 
 msgid "Bandwidth Limit Exceeded"
-msgstr "Išnaudotas pralaidumo apribojimas"
+msgstr "Viršytas pralaidumo limitas"
 
 msgid "Communication with OSM server failed"
 msgstr "Ryšys su OSM serveriu nepavyko"
@@ -4750,8 +4854,9 @@ msgstr "Spauskite, kad uždarytumėte dialogą"
 msgid "Imagery offset"
 msgstr "Vaizdų poslinkis"
 
+msgctxt "menu"
 msgid "Imagery"
-msgstr "Vaizdai"
+msgstr ""
 
 msgctxt "layer"
 msgid "Offset"
@@ -4956,14 +5061,14 @@ msgstr "Atmesti"
 
 msgid "JOSM found {0} unsaved osm data layer. "
 msgid_plural "JOSM found {0} unsaved osm data layers. "
-msgstr[0] "JOSM rado {0} neįrašyta osm duomenų sluoksnį. "
+msgstr[0] "JOSM rado {0} neįrašytą osm duomenų sluoksnį. "
 msgstr[1] "JOSM rado {0} neįrašytus osm duomenų sluoksnius. "
 msgstr[2] "JOSM rado {0} neįrašytų osm duomenų sluoksnių. "
 
 msgid ""
 "It looks like JOSM crashed last time. Would you like to restore the data?"
 msgstr ""
-"Panašu, kad paskutinį kartą JOSM nulūžo. Ar norėtumėte atstatyti duomenis?"
+"Panašu, kad paskutinį kartą JOSM nulūžo. Ar norėtumėte atkurti duomenis?"
 
 msgid "Change proxy settings"
 msgstr "Keisti šliuzo nustatymus"
@@ -4993,45 +5098,56 @@ msgstr ""
 "padaryti dėl šių tinklo klaidų:<br>{1}Šito priežastis galėjo būti trūkstama "
 "šliuzo konfigūracija.<br>Ar norėtumėte dabar pakeisti šliuzo nustatymus?"
 
+msgctxt "menu"
 msgid "File"
-msgstr "Failas"
+msgstr ""
 
-msgid "Session"
-msgstr "Seansas"
+msgctxt "menu"
+msgid "Edit"
+msgstr ""
 
+msgctxt "menu"
 msgid "View"
-msgstr "Rodyti"
+msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
-msgstr "Įrankiai"
+msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
-msgstr "Daugiau įrankių"
+msgstr ""
 
+msgctxt "menu"
 msgid "Data"
-msgstr "Duomenys"
+msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
-msgstr "Pažymėti objektai"
+msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
-msgstr "Ruošiniai"
+msgstr ""
 
 msgid "More..."
 msgstr "Daugiau..."
 
+msgctxt "menu"
 msgid "GPS"
-msgstr "GPS"
+msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
-msgstr "Langai"
+msgstr ""
+
+msgctxt "menu"
+msgid "Help"
+msgstr ""
 
 msgid "Menu: {0}"
 msgstr "Meniu: {0}"
 
-msgid "Save and load the current session (list of layers, etc.)"
-msgstr "Įrašyti ir įkelti dabartinį seansą (sluoksnių sąrašą ir t. t.)"
-
 msgid "Edit toolbar"
 msgstr "Keitimo įrankių juosta"
 
@@ -5039,7 +5155,7 @@ msgid "Toggles the visibility of the edit toolbar (i.e., the vertical tool)"
 msgstr "Keičia keitimo įrankių juostos (vertikalios) matomumą"
 
 msgid "Preset preferences"
-msgstr "Išankstinių nuostatų savybės"
+msgstr "Ruošinių nuostatos"
 
 msgid "Click to open the tagging presets tab in the preferences"
 msgstr "Spauskite, kad atvertumėte žymėjimo ruošinių kortelę nustatymuose"
@@ -5053,8 +5169,9 @@ msgstr "Spauskite vaizdų kortelei nuostatose atverti"
 msgid "Search menu items"
 msgstr "Ieškoti meniu elementų"
 
+msgctxt "menu"
 msgid "Audio"
-msgstr "Audio"
+msgstr ""
 
 msgid "Do not hide toolbar"
 msgstr "Neslėpti įrankių juostos"
@@ -5178,68 +5295,17 @@ msgstr "Fone"
 msgid "Click to run job in background"
 msgstr "Spauskite, kad vykdytumėte darbą fone"
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-"Oro nuotraukos gali būti neteisingai pozicionuotos. Prašome patikrinti "
-"poslinkį naudojant GPS pėdsakus!"
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-
-msgid "Details..."
-msgstr "Išsamiau..."
-
-msgid "Hide this message and never show it again"
-msgstr "Slėpti šį pranešimą ir niekada jo daugiau nerodyti"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-"<html>Prašome patvirtinkite <strong>1 objekto</strong> išėmimą iš <strong>1 "
-"ryšio</strong>.</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>Prašome patvirtinti <strong>1 objekto</strong> išėmimą iš <strong>{0} "
-"ryšių</strong>.</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>Prašome patvirtinti <strong>{0} objektų</strong> išėmimą iš "
-"<strong>{1} ryšių</strong>.</html>"
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] "Trinamas {0} objektas"
-msgstr[1] "Trinami {0} objektai"
-msgstr[2] "Trinama {0} objektų"
-
-msgid "Delete objects"
-msgstr "Šalinti objektus"
-
-msgid "To delete"
-msgstr "Bus pašalinti"
-
-msgid "From Relation"
-msgstr "Iš ryšio"
-
-msgid "Pos."
-msgstr "Poz."
+msgid " ({0})"
+msgstr " ({0})"
 
-msgid "Role"
-msgstr "Rolė"
+msgid "{0} completed in {1}"
+msgstr "{0} baigta per {1}"
 
-msgid "Click to close the dialog and remove the object from the relations"
-msgstr "Spauskite, kad uždarytumėte dialogą ir ištrintumėte objektą iš ryšių"
+msgid "Enlarge"
+msgstr "Išplėsti"
 
-msgid "Click to close the dialog and to abort deleting the objects"
-msgstr "Spauskite, kad uždarytumėte dialogą ir netrintumėte objektų"
+msgid "Shrink"
+msgstr "Sutraukti"
 
 msgid ""
 "<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
@@ -5669,7 +5735,7 @@ msgid "Coordinates:"
 msgstr "Koordinatės:"
 
 msgid "Deleted State:"
-msgstr "Ištrinta būsena:"
+msgstr "Pašalinta būsena:"
 
 msgid "Referenced by:"
 msgstr "Priklauso:"
@@ -5693,13 +5759,16 @@ msgid "Undecide conflict between different coordinates"
 msgstr "Nenuspręsti konflikto dėl skirtingų koordinačių"
 
 msgid "Keep my deleted state"
-msgstr "Palikti mano ištrintą būseną"
+msgstr "Palikti mano pašalintą būseną"
 
 msgid "Keep their deleted state"
-msgstr "Palikti jų ištrintą būseną"
+msgstr "Palikti jų pašalintą būseną"
 
 msgid "Undecide conflict between deleted state"
-msgstr "Nenuspręsti konflikto dėl ištrintos būsenos"
+msgstr "Neišspręsti konflikto dėl pašalintos būsenos"
+
+msgid "Role"
+msgstr "Rolė"
 
 msgid "Primitive"
 msgstr "Primityvas"
@@ -5988,6 +6057,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr "Pritaikyti šią rolę visiems nariams"
 
+msgid "Pos."
+msgstr "Poz."
+
 msgid "Orig. Way"
 msgstr "Prad. kelias"
 
@@ -6001,7 +6073,7 @@ msgid "Show tags with conflicts only"
 msgstr "Rodyti tik žymas su konfliktais"
 
 msgid "Show tags with multiple values only"
-msgstr "Rodyti žymas tik su keliomis reikšmėmis"
+msgstr "Rodyti žymas tik su sudėtinėmis reikšmėmis"
 
 msgid "For selected objects only"
 msgstr "Tik pažymėtiems objektams"
@@ -6147,6 +6219,48 @@ msgstr "Išspręsti konfliktus"
 msgid "Resolve conflicts for ''{0}''"
 msgstr "Išspręsti „{0}“ konfliktus"
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+"<html>Prašome patvirtinkite <strong>1 objekto</strong> išėmimą iš <strong>1 "
+"ryšio</strong>.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Prašome patvirtinti <strong>1 objekto</strong> išėmimą iš <strong>{0} "
+"ryšių</strong>.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Prašome patvirtinti <strong>{0} objektų</strong> išėmimą iš "
+"<strong>{1} ryšių</strong>.</html>"
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] "Trinamas {0} objektas"
+msgstr[1] "Trinami {0} objektai"
+msgstr[2] "Trinama {0} objektų"
+
+msgid "Delete objects"
+msgstr "Šalinti objektus"
+
+msgid "To delete"
+msgstr "Bus pašalinti"
+
+msgid "From Relation"
+msgstr "Iš ryšio"
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr "Spauskite, kad uždarytumėte dialogą ir ištrintumėte objektą iš ryšių"
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr "Spauskite, kad uždarytumėte dialogą ir netrintumėte objektų"
+
 msgid "Filter objects and hide/disable them."
 msgstr "Filtruoti objektus ir slėpti/išjungti juos."
 
@@ -6253,8 +6367,8 @@ msgstr "Sudėtingesnė objekto info"
 msgid "map style"
 msgstr "žemėlapio stilius"
 
-msgid " ({0})"
-msgstr " ({0})"
+msgid "edit counts"
+msgstr "redaguoti skaičius"
 
 msgid "not in data set"
 msgstr "ne duomenų aibėje"
@@ -6395,6 +6509,12 @@ msgstr ""
 "Įspėjimas: 2 pažymėti objektai turi lygius, bet ne identiškus stilių "
 "podėlius."
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] "{0} vartotojas paskutinis keitė pažymėjimą:"
+msgstr[1] "{0} vartotojai (-ų) paskutiniai keitė pažymėjimą:"
+msgstr[2] "{0} vartotojai (-ų) paskutiniai keitė pažymėjimą:"
+
 msgid "xml"
 msgstr "xml"
 
@@ -6404,32 +6524,52 @@ msgstr "mapcss"
 msgid "unknown"
 msgstr "nežinoma"
 
-msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
-msgstr ""
-"Įveskite naujo taško koordinates.<br/>Ilgumą ir platumą galite atskirti "
-"tarpu, kableliu ar kabliataškiu.<br/>Teigiami skaičiai arba N, E simboliai "
-"reiškia Šiaurę (N) arba Rytus (E).<br/>Pietums naudokite arba neigiamus "
-"skaičius, arba S (Pietūs) ar W (Vakarai) raides.<br/>Koordinačių reikšmes "
-"galima rašyti vienu iš trijų "
-"formatų:<ul><li><i>laipsniai</i><tt>°</tt></li><li><i>laipsniai</i><tt>&d"
-"eg;</tt> <i>minutės</i><tt>'</tt></li><li><i>laipsniai</i><tt>°</tt> "
-"<i>minutės</i><tt>'</tt> "
-"<i>sekundės</i><tt>&quot</tt></li></ul>Simboliai <tt>°</tt>, "
-"<tt>'</tt>, <tt>′</tt>, <tt>"</tt>, <tt>″</tt> "
-"neprivalomi.<br/><br/>Keli pavyzdžiai:<ul>{0}</ul>"
-
-msgid "Projected coordinates:"
-msgstr "Projektuotos koordinatės:"
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
+msgid ""
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
+msgstr ""
+
+msgid "Projected coordinates:"
+msgstr "Projektuotos koordinatės:"
 
 msgid ""
 "Enter easting and northing (x and y) separated by space, comma or semicolon."
@@ -6472,6 +6612,12 @@ msgstr "Permatomumas"
 msgid "Adjust opacity of the layer."
 msgstr "Keisti sluoksnio permatomumą."
 
+msgid "Gamma"
+msgstr "Gama"
+
+msgid "Adjust gamma value of the layer."
+msgstr "Keisti sluoksnio gamos reikšmę."
+
 msgid "Activate"
 msgstr "Aktyvinti"
 
@@ -6602,6 +6748,12 @@ msgstr "Stiliaus nustatymai"
 msgid "Customize the style"
 msgstr "Tinkinti stilių"
 
+msgid "Mini map"
+msgstr "Mini žemėlapis"
+
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
 msgid "List of notes"
 msgstr "Pastabų sąrašas"
 
@@ -6618,10 +6770,10 @@ msgid "Add comment to note:"
 msgstr "Pridėti komentarą prie pastabos:"
 
 msgid "Close note"
-msgstr "Uždaryti pastabą"
+msgstr "Užverti pastabą"
 
 msgid "Close note with message:"
-msgstr "Uždaryti pastabą su pranešimu:"
+msgstr "Užverti pastabą su pranešimu:"
 
 msgid "Create a new note"
 msgstr "Sukurti naują pastabą"
@@ -6630,13 +6782,13 @@ msgid "Create"
 msgstr "Sukurti"
 
 msgid "Reopen note"
-msgstr "Iš naujo atidaryti pastabą"
+msgstr "Iš naujo atverti pastabą"
 
 msgid "Reopen"
 msgstr "Iš naujo atidaryti"
 
 msgid "Reopen note with message:"
-msgstr "Iš naujo atidaryti pastabą su pranešimu:"
+msgstr "Iš naujo atverti pastabą su pranešimu:"
 
 msgid "Sort notes"
 msgstr "Rikiuoti pastabas"
@@ -6660,14 +6812,18 @@ msgstr "Objekto ID:"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "Įveskite objekto ID, kuris bus parsiųstas"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr "Objektų ID gali būti atskirti kableliais ar tarpais, pavyzdžiui: {0}"
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
 msgstr ""
-"Objektų ID galima atskirti kableliais arba tarpais.<br/>Pavyzdžiui: "
-"{0}<br/>Mišriam režime, objektus nurodykite taip: {1}<br/>({2} nurodo "
-"<i>tašką</i>, {3} - <i>kelią</i>, o {4} - <i>ryšį</i>)"
+"Mišriojoje veiksenoje, nurodykite tokius objektus kaip šiuos: {0}<br/>({1} "
+"galioja <i>taškui</i>, {2} <i>keliui</i>, ir {3} <i>ryšiui</i>)"
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
+msgstr "Objektų rėžių ID gali būti nurodyti su brūkšniu, pavyzdžiui: {0}"
 
 msgid ""
 "Invalid ID list specified\n"
@@ -6697,6 +6853,9 @@ msgstr "Ryšiai: {0}/{1}"
 msgid "Relations: {0}"
 msgstr "Ryšiai: {0}"
 
+msgid "Selection"
+msgstr "Pažymėti objektai"
+
 msgid "Open a selection list window."
 msgstr "Atverti pažymėjimo sąrašo langą."
 
@@ -6791,6 +6950,12 @@ msgstr "Atverti tikrinimo langą."
 msgid "Validation results"
 msgstr "Tikrinimo rezultatai"
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr "Pataisyti"
 
@@ -7438,6 +7603,12 @@ msgstr "OSM wiki žymos pagalba (F1)"
 msgid "Launch browser with wiki help for selected object"
 msgstr "Paleisti naršyklę su pažymėto objekto wiki pagalba"
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr "Įdėti reikšmę"
 
@@ -7535,16 +7706,14 @@ msgstr "Nustatyti paskiausiai pridėtų žymų skaičių"
 msgid "Remember last used tags after a restart"
 msgstr "Atsiminti paskutines naudotas žymas paleidus iš naujo"
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
-msgstr "<code>Ctrl-1</code> pirmam pasiūlymui pritaikyti"
+msgid "to apply first suggestion"
+msgstr "pirmam pasiūlymui pritaikyti"
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
-msgstr "<code>Shift-Enter</code> pridėjimui neužveriant dialogo lango"
+msgid "to add without closing the dialog"
+msgstr "pridėti neužveriant dialogo lango"
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
-msgstr ""
-"<code>Shift-Ctrl-1</code> pirmam pasiūlymui pridėti neužveriant dialogo lango"
+msgid "to add first suggestion without closing the dialog"
+msgstr "pridėti pirmą pasiūlymą neužveriant dialogo lango"
 
 msgid "Please enter the number of recently added tags to display"
 msgstr "Įveskite skaičių, kiek rodyti paskiausiai įvestų žymų"
@@ -7738,6 +7907,12 @@ msgstr "Rikiuoti ryšio narius"
 msgid "Relation Editor: Sort"
 msgstr "Ryšių redaktorius: rikiuoti"
 
+msgid "Sort below"
+msgstr "Rūšiuoti žemiau"
+
+msgid "Sort the selected relation members and all members below"
+msgstr "Rūšiuoti pasirinktus ryšių naius ir visus narius žemiau"
+
 msgid "Reverse the order of the relation members"
 msgstr "Atvirkščia ryšio narių tvarka"
 
@@ -8328,6 +8503,9 @@ msgstr "Įkeliama istorija ryšiui {0}"
 msgid "Node {0}"
 msgstr "Taškas {0}"
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr "Padidinti tašką"
 
@@ -8874,14 +9052,14 @@ msgid "Delete layers without saving. Unsaved changes are lost."
 msgstr "Pašalinti sluoksnius neįrašant. Neįrašyti pakeitimai bus prarasti."
 
 msgid "Perform actions before exiting"
-msgstr "Atlikti veiksmų prieš išeinant"
+msgstr "Atlikti veiksmus prieš išeinant"
 
 msgid "Exit JOSM with saving. Unsaved changes are uploaded and/or saved."
 msgstr ""
 "Išeiti iš JOSM įrašant. Neįrašyti pakeitimai įkeliami ir/arba įrašomi."
 
 msgid "Perform actions before deleting"
-msgstr "Atlikti veiksmų prieš šalinant"
+msgstr "Atlikti veiksmus prieš šalinant"
 
 msgid "Save/Upload layers before deleting. Unsaved changes are not lost."
 msgstr ""
@@ -9329,6 +9507,108 @@ msgstr[0] "{0} objektas šalinimui:"
 msgstr[1] "{0} objektai šalinimui:"
 msgstr[2] "{0} objektų šalinimui:"
 
+msgid "Show Tile Info"
+msgstr "Rodyti kaladėlės info"
+
+msgid "Tile Info"
+msgstr "Kaladėlės info"
+
+msgid "Metadata "
+msgstr "Metaduomenys "
+
+msgid "Auto Zoom"
+msgstr "Automatinis mastelis"
+
+msgid "Auto load tiles"
+msgstr "Automatiškai įkelti kaladėles"
+
+msgid "Load All Tiles"
+msgstr "Įkelti visas kaladėles"
+
+msgid "Load All Error Tiles"
+msgstr "Įkelti visas klaidingas kaladėles"
+
+msgid "Zoom to native resolution"
+msgstr "Keisti mastelį iki savosios skiriamosios gebos"
+
+msgid "Change resolution"
+msgstr "Keisti skiriamąją gebą"
+
+msgid "Failed to create tile source"
+msgstr "Nepavyko sukurti kaladėlių šaltinio"
+
+msgid "Show Errors"
+msgstr "Rodyti klaidas"
+
+msgid "Load Tile"
+msgstr "Įkelti kaladėlę"
+
+msgid "Increase zoom"
+msgstr "Didinti"
+
+msgid "Decrease zoom"
+msgstr "Mažinti"
+
+msgid "Snap to tile size"
+msgstr "Pritraukti prie kaladėlės dydžio"
+
+msgid "Flush Tile Cache"
+msgstr "Valyti kaladėlių podėlį"
+
+msgid "zoom in to load any tiles"
+msgstr "padidinkite, kad įkeltumėte kaladėles"
+
+msgid "zoom in to load more tiles"
+msgstr "padidinkite, kad įkeltumėte daugiau kaladėlių"
+
+msgid "increase zoom level to see more detail"
+msgstr "padidinkite, kad matytumėte daugiau detalių"
+
+msgid "No tiles at this zoom level"
+msgstr "Šiame mastelyje nėra kaladėlių"
+
+msgid "Current zoom: {0}"
+msgstr "Dabartinis mastelis: {0}"
+
+msgid "Display zoom: {0}"
+msgstr "Rodyti mastelį: {0}"
+
+msgid "Pixel scale: {0}"
+msgstr "Taško mastelis: {0}"
+
+msgid "Best zoom: {0}"
+msgstr "Geriausias mastelis: {0}"
+
+msgid "Cache stats: {0}"
+msgstr "Podėlio būsena: {0}"
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr "{0} ({1}), automatiškai atsiunčiama priartinus {2}"
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr "{0} ({1}), atsiunčiama priartinus {2}"
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr "Atsiųsta {0}/{1} kaladėlių"
+
+msgid "Save WMS file"
+msgstr "Išsaugoti WMS failą"
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+"Oro nuotraukos gali būti neteisingai pozicionuotos. Prašome patikrinti "
+"poslinkį naudojant GPS pėdsakus!"
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+
+msgid "Details..."
+msgstr "Išsamiau..."
+
+msgid "Hide this message and never show it again"
+msgstr "Slėpti šį pranešimą ir niekada jo daugiau nerodyti"
+
 msgid "Customize Color"
 msgstr "Keisti spalvą"
 
@@ -9386,6 +9666,9 @@ msgstr "Išsaugoti GPX failą"
 msgid "Imagery fade"
 msgstr "Vaizdų stelbimas"
 
+msgid "Unsupported imagery type: {0}"
+msgstr "Nepalaikomas vaizdo tipas: {0}"
+
 msgid "ERROR"
 msgstr "KLAIDA"
 
@@ -9406,12 +9689,12 @@ msgstr "Palaikomos visos projekcijos"
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 "Sluoksnis {0} nepalaiko naujos projekcijos {1}.\n"
-"{2}\n"
-"Dar kartą pakeiskite projekciją arba išimkite sluoksnį."
+"Palaikomos projekcijos yra: {2}\n"
+"Pakeiskite projekciją dar kartą arba pašalinkite sluoksnį."
 
 msgid "Save Layer"
 msgstr "Išsaugoti sluoksnį"
@@ -9495,202 +9778,97 @@ msgstr ""
 msgid "Save OSM file"
 msgstr "Išsaugoti OSM failą"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-"{0} yra netinkamas TMS argumentas. Prašome patikrinti šį serverio URL:\n"
-"{1}"
+msgid "EPSG:4326 and Mercator projection are supported"
+msgstr "Palaikomos EPSG:4326 ir Merkatoriaus projekcijos"
+
+msgid "Validation errors"
+msgstr "Tikrinimo klaidos"
+
+msgid "No validation errors"
+msgstr "Nėra tikrinimo klaidų"
+
+msgid "Set WMS Bookmark"
+msgstr "Nustatyti WMS žymelę"
 
 msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
-"TMS sluoksnis nepalaiko projekcijos {0}.\n"
-"{1}\n"
-"Pakeiskite projekciją arba išimkite sluoksnį."
+"JOSM naudos EPSG:4326, kad duoti užklausą serveriui, bet rezultatai gali "
+"skirtis priklausomai nuo WMS serverio"
 
-msgid "Auto Zoom"
-msgstr "Automatinis mastelis"
+msgid "Correlate to GPX"
+msgstr "Koreliuoti su GPX"
 
-msgid "Auto load tiles"
-msgstr "Automatiškai įkelti kaladėles"
+msgid "Invalid timezone"
+msgstr "Netinkama laiko juosta"
 
-msgid "Show Errors"
-msgstr "Rodyti klaidas"
+msgid "Invalid offset"
+msgstr "Netinkamas poslinkis"
 
-msgid "Load Tile"
-msgstr "Įkelti kaladėlę"
+msgid "Correlate images with GPX track"
+msgstr "Koreliuoti nuotraukas su GPX pėdsaku"
 
-msgid "Show Tile Info"
-msgstr "Rodyti kaladėlės info"
+msgid "Try Again"
+msgstr "Bandyti dar kartą"
 
-msgid "Load All Tiles"
-msgstr "Įkelti visas kaladėles"
+msgid "No images could be matched!"
+msgstr "Nepavyko sutapatinti jokių nuotraukų!"
 
-msgid "Load All Error Tiles"
-msgstr "Įkelti visas klaidingas kaladėles"
+msgid "GPX Files (*.gpx *.gpx.gz)"
+msgstr "GPX failai (*.gpx *.gpx.gz)"
 
-msgid "Increase zoom"
-msgstr "Didinti"
+msgid "File {0} is loaded yet under the name \"{1}\""
+msgstr "Failas {0} vis dar įkeltas pavadinimu „{1}“"
 
-msgid "Decrease zoom"
-msgstr "Mažinti"
+msgid "Error while parsing {0}"
+msgstr "Klaida nagrinėjant {0}"
 
-msgid "Snap to tile size"
-msgstr "Pritraukti prie kaladėlės dydžio"
+msgid "Could not read \"{0}\""
+msgstr "Neperskaitoma \"{0}\""
 
-msgid "Flush Tile Cache"
-msgstr "Valyti kaladėlių podėlį"
+msgid ""
+"<html>Take a photo of your GPS receiver while it displays the "
+"time.<br>Display that photo here.<br>And then, simply capture the time you "
+"read on the photo and select a timezone<hr></html>"
+msgstr ""
+"<html>Nufotografuokite savo GPS imtuvą kai jis rodo laiką.<br>Parodykite "
+"nuotrauką čia.<br>Tada tiesiog įveskite laiką, kurį matote nuotraukoje ir "
+"parinkite laiko zoną<hr></html>"
 
-msgid "zoom in to load any tiles"
-msgstr "padidinkite, kad įkeltumėte kaladėles"
+msgid "Photo time (from exif):"
+msgstr "Nuotraukos laikas (iš exif):"
 
-msgid "zoom in to load more tiles"
-msgstr "padidinkite, kad įkeltumėte daugiau kaladėlių"
+msgid "Gps time (read from the above photo): "
+msgstr "Gps laikas (perskaitytas iš nuotraukos aukščiau): "
 
-msgid "increase zoom level to see more detail"
-msgstr "padidinkite, kad matytumėte daugiau detalių"
+msgid "I am in the timezone of: "
+msgstr "Aš esu laiko juostoje: "
 
-msgid "No tiles at this zoom level"
-msgstr "Šiame mastelyje nėra kaladėlių"
+msgid "No date"
+msgstr "Be datos"
 
-msgid "Current zoom: {0}"
-msgstr "Dabartinis mastelis: {0}"
+msgid "Open another photo"
+msgstr "Atverti kitą nuotrauką"
 
-msgid "Display zoom: {0}"
-msgstr "Rodyti mastelį: {0}"
+msgid "Synchronize time from a photo of the GPS receiver"
+msgstr "Sinchronizuoti nuotraukos laiką su GPS imtuvo"
 
-msgid "Pixel scale: {0}"
-msgstr "Taško mastelis: {0}"
+msgid ""
+"Error while parsing the date.\n"
+"Please use the requested format"
+msgstr ""
+"Klaida nagrinėjant datą.\n"
+"Naudokite prašomą formatą"
 
-msgid "Best zoom: {0}"
-msgstr "Geriausias mastelis: {0}"
+msgid "Invalid date"
+msgstr "Netinkama data"
 
-msgid "Cache stats: {0}"
-msgstr "Podėlio būsena: {0}"
+msgid "<No GPX track loaded yet>"
+msgstr "<Neįkeltas joks GPS pėdsakas>"
 
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr "TMS sluoksnis ({0}), atsiunčiamas mastelyje {1}"
-
-msgid "EPSG:4326 and Mercator projection are supported"
-msgstr "Palaikomos EPSG:4326 ir Merkatoriaus projekcijos"
-
-msgid "Validation errors"
-msgstr "Tikrinimo klaidos"
-
-msgid "No validation errors"
-msgstr "Nėra tikrinimo klaidų"
-
-msgid "Blank Layer"
-msgstr "Tuščias sluoksnis"
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr "Atsiųsta {0}/{1} kaladėlių"
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr "WMS sluoksnis ({0}), automatiškai atsiunčiamas mastelyje {1}"
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr "WMS sluoksnis ({0}), atsiunčiamas mastelyje {1}"
-
-msgid "Download visible tiles"
-msgstr "Atsiųsti matomas kaladėles"
-
-msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-"Užklaustas plotas per didelis. Truputi padidinkite arba pakeiskite "
-"skiriamąją gebą"
-
-msgid "Change resolution"
-msgstr "Keisti skiriamąją gebą"
-
-msgid "Reload erroneous tiles"
-msgstr "Iš nauo atsiųsti klaidingas kaladėles"
-
-msgid "Alpha channel"
-msgstr "Alfa kanalas"
-
-msgid "Automatically change resolution"
-msgstr "Automatiškai keisti skiriamąją gebą"
-
-msgid "Set WMS Bookmark"
-msgstr "Nustatyti WMS žymelę"
-
-msgid "Automatic downloading"
-msgstr "Automatinis atsiuntimas"
-
-msgid "Zoom to native resolution"
-msgstr "Keisti mastelį iki savosios skiriamosios gebos"
-
-msgid "Supported projections are: {0}"
-msgstr "Palaikomos projekcijos: {0}"
-
-msgid "Unsupported WMS file version; found {0}, expected {1}"
-msgstr "Nepalaikoma WMS failo versija; rasta {0}, tikėtasi {1}"
-
-msgid "Save WMS file"
-msgstr "Išsaugoti WMS failą"
-
-msgid "Correlate to GPX"
-msgstr "Koreliuoti su GPX"
-
-msgid "GPX Files (*.gpx *.gpx.gz)"
-msgstr "GPX failai (*.gpx *.gpx.gz)"
-
-msgid "File {0} is loaded yet under the name \"{1}\""
-msgstr "Failas {0} vis dar įkeltas pavadinimu „{1}“"
-
-msgid "Error while parsing {0}"
-msgstr "Klaida nagrinėjant {0}"
-
-msgid "Could not read \"{0}\""
-msgstr "Neperskaitoma \"{0}\""
-
-msgid ""
-"<html>Take a photo of your GPS receiver while it displays the "
-"time.<br>Display that photo here.<br>And then, simply capture the time you "
-"read on the photo and select a timezone<hr></html>"
-msgstr ""
-"<html>Nufotografuokite savo GPS imtuvą kai jis rodo laiką.<br>Parodykite "
-"nuotrauką čia.<br>Tada tiesiog įveskite laiką, kurį matote nuotraukoje ir "
-"parinkite laiko zoną<hr></html>"
-
-msgid "Photo time (from exif):"
-msgstr "Nuotraukos laikas (iš exif):"
-
-msgid "Gps time (read from the above photo): "
-msgstr "Gps laikas (perskaitytas iš nuotraukos aukščiau): "
-
-msgid "I am in the timezone of: "
-msgstr "Aš esu laiko juostoje: "
-
-msgid "No date"
-msgstr "Be datos"
-
-msgid "Open another photo"
-msgstr "Atverti kitą nuotrauką"
-
-msgid "Synchronize time from a photo of the GPS receiver"
-msgstr "Sinchronizuoti nuotraukos laiką su GPS imtuvo"
-
-msgid ""
-"Error while parsing the date.\n"
-"Please use the requested format"
-msgstr ""
-"Klaida nagrinėjant datą.\n"
-"Naudokite prašomą formatą"
-
-msgid "Invalid date"
-msgstr "Netinkama data"
-
-msgid "<No GPX track loaded yet>"
-msgstr "<Neįkeltas joks GPS pėdsakas>"
-
-msgid "GPX track: "
-msgstr "GPX pėdsakas: "
+msgid "GPX track: "
+msgstr "GPX pėdsakas: "
 
 msgid "Open another GPX trace"
 msgstr "Įkelti kitą GPX pėdsaką"
@@ -9728,24 +9906,9 @@ msgstr "Laiko juosta: "
 msgid "Offset:"
 msgstr "Poslinkis:"
 
-msgid "Correlate images with GPX track"
-msgstr "Koreliuoti nuotraukas su GPX pėdsaku"
-
 msgid "Correlate"
 msgstr "Koreliuoti"
 
-msgid "Invalid timezone"
-msgstr "Netinkama laiko juosta"
-
-msgid "Invalid offset"
-msgstr "Netinkamas poslinkis"
-
-msgid "Try Again"
-msgstr "Bandyti dar kartą"
-
-msgid "No images could be matched!"
-msgstr "Nepavyko sutapatinti jokių nuotraukų!"
-
 msgid "No gpx selected"
 msgstr "Neparinkti jokie gpx"
 
@@ -9965,9 +10128,6 @@ msgstr ""
 "\n"
 "GPS laikas: {0}"
 
-msgid "JPEG images (*.jpg)"
-msgstr "JPEG atvaizdžiai (*.jpg)"
-
 msgid "Show thumbnails"
 msgstr "Rodyti miniatiūras"
 
@@ -10036,9 +10196,6 @@ msgstr "metrai"
 msgid "Maximum area per request:"
 msgstr "Maksimalus plotas per užklausą:"
 
-msgid "sq km"
-msgstr "kv km"
-
 msgid "Download near:"
 msgstr "Atsiųsti greta:"
 
@@ -10114,7 +10271,7 @@ msgid "Wave Audio files (*.wav)"
 msgstr "Wave Audio failas (*.wav)"
 
 msgid "Audio markers from {0}"
-msgstr "Garso žymos iš {0}"
+msgstr "Garso žymekliai iš {0}"
 
 msgid "No GPX track available in layer to associate audio with."
 msgstr "Sluoksnyje nėra GPX pėdsakų, su kuriais būtų galima susieti garsą."
@@ -10254,8 +10411,8 @@ msgid ""
 "Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
 "''{2}'' instead."
 msgstr ""
-"Nustatytas pasenęs \"{0}\", kuris yra \"{1}\". Greitai jis bus pašalintas. "
-"Naudokite \"{2}\"."
+"Nustatytas pasenęs „{0}“, kuris yra „{1}“. Greitai bus pašalintas. Naudokite "
+"„{2}“."
 
 msgid "Illegal dash pattern, values must be positive"
 msgstr "Neteisingas punktyro šablonas, reikšmės turi būti teigiamos"
@@ -10290,10 +10447,10 @@ msgid "Use default settings"
 msgstr "Naudoti numatytuosius nustatymus"
 
 msgid "Consumer Key:"
-msgstr "Vartotojo raktas:"
+msgstr "Naudotojo raktas:"
 
 msgid "Consumer Secret:"
-msgstr "Vartotojo slaptažodis"
+msgstr "Naudotojo paslaptis:"
 
 msgid "Request Token URL:"
 msgstr "Prieigos rakto užklausos URL:"
@@ -10407,7 +10564,7 @@ msgid "Authorize now"
 msgstr "Autorizuotis dabar"
 
 msgid "Click to redirect you to the authorization form on the JOSM web site"
-msgstr ""
+msgstr "Spauskite persikėlimui į į autorizacijos formą JOSM svetainėje"
 
 msgid "Back"
 msgstr "Atgal"
@@ -10419,18 +10576,17 @@ msgid "Test Access Token"
 msgstr "Tikrinti prieigos raktą"
 
 msgid "Please enter your OSM user name"
-msgstr "Įveskite savo OSM vartotojo vardą"
+msgstr "Įveskite savo OSM naudotojo vardą"
 
 msgid "The user name cannot be empty. Please enter your OSM user name"
 msgstr ""
-"Vartotojo vardas negali būti tuščias. Įveskite savo OSM vartotojo vardą"
+"Naudotojo vardas negali būti tuščias. Įveskite savo OSM naudotojo vardą"
 
 msgid "Please enter your OSM password"
-msgstr "Įveskite savo OSM vartotojo slaptažodį"
+msgstr "Įveskite savo OSM slaptažodį"
 
 msgid "The password cannot be empty. Please enter your OSM password"
-msgstr ""
-"Slaptažodis negali būti tuščias. Įveskite savo OSM vartotojo slaptažodį"
+msgstr "Slaptažodis negali būti tuščias. Įveskite savo OSM slaptažodį"
 
 msgid "Authorize JOSM to access the OSM API"
 msgstr "Autorizuoti JOSM prieigai prie OSM API"
@@ -10769,7 +10925,7 @@ msgstr ""
 "vėliau.</html>"
 
 msgid "Retrieving user info..."
-msgstr "Gaunama vartotojo informacija..."
+msgstr "Gaunama naudotojo informacija..."
 
 msgid "Expert mode"
 msgstr "Eksperto režimas"
@@ -10780,15 +10936,15 @@ msgstr "Uždaryti nustatymų dialogą ir panaikinti visus pakeitimus"
 msgid "Save the preferences and close the dialog"
 msgstr "Išsaugoti nustatymus ir uždaryti langą"
 
-msgid "Download plugins"
-msgstr "Atsiųsti papildinius"
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr "Turite paleisti JOSM iš naujo, kad įsigaliotų kai kurie nustatymai."
 
 msgid "Would you like to restart now?"
 msgstr "Ar norite paleisti iš naujo dabar?"
 
+msgid "Download plugins"
+msgstr "Atsiųsti papildinius"
+
 msgid "Icon paths:"
 msgstr "Piktogramų keliai:"
 
@@ -10969,6 +11125,9 @@ msgid ""
 "by pressing \"Cancel\" in preferences dialog <br/>To activate some changes "
 "JOSM restart may be needed.</html>"
 msgstr ""
+"<html>Čia yra failo importo suvestinė.<br/>Jūs galite atmesti nustatymų "
+"pakeitimus nustatymų dialoge paspaudę „Nutraukti“.<br/>Kai kurių pakeitimų "
+"įgalinimui gali prireikti iš naujo paleisti JOSM.</html>"
 
 msgid "shortcut"
 msgstr "nuoroda"
@@ -10983,7 +11142,7 @@ msgid "imagery"
 msgstr "vaizdai"
 
 msgid "Reset preferences"
-msgstr ""
+msgstr "Atstatyti nustatymus"
 
 msgid ""
 "You are about to clear all preferences to their default values<br />All your "
@@ -11001,19 +11160,19 @@ msgid "Save {0} profile"
 msgstr "Išsaugoti profilį {0}"
 
 msgid "All the preferences of this group are default, nothing to save"
-msgstr ""
+msgstr "Visi šios grupės nustatymai yra numatytieji, nėra ko įrašyti"
 
 msgid "Choose profile file"
 msgstr "Pasirinkite profilio failą"
 
 msgid "Change list setting"
-msgstr ""
+msgstr "Keisti sąrašo nustatymus"
 
 msgid "Key: {0}"
 msgstr "Raktas: {0}"
 
 msgid "Change list of lists setting"
-msgstr ""
+msgstr "Keisti sąrašų sąrašo nustatymus"
 
 msgid "add entry"
 msgstr "pridėti įrašą"
@@ -11117,50 +11276,61 @@ msgid ""
 "Put text labels against audio (and image and web) markers as well as their "
 "button icons."
 msgstr ""
+"Dėti teksto etiketes ties garso (ir vaizdo ir tinklo) žymekliais kartu su jų "
+"mygtuku piktogramomis."
 
 msgid "When importing audio, make markers from..."
-msgstr ""
+msgstr "Importuojant garsą, kurti žymeklius iš..."
 
 msgid "When importing audio, apply it to any waypoints in the GPX layer."
 msgstr ""
+"Importuojant garsą, pritaikyti jį bet kuriems taškams GPX sluoksnyje."
 
 msgid ""
 "Automatically create audio markers from trackpoints (rather than explicit "
 "waypoints) with names or descriptions."
 msgstr ""
+"Automatiškai kurti garso žymeklius iš pėdsako taškų (o ne iš atskirai "
+"pažymėtų taškų) su vardais arba aprašymais."
 
 msgid ""
 "Create audio markers at the position on the track corresponding to the "
 "modified time of each audio WAV file imported."
 msgstr ""
+"Kurti garso žymeklius pėdsako pozicijoje, atitinkančioje kiekvieno "
+"importuoto WAV failo laiką."
 
 msgid ""
 "The number of seconds to jump forward or back when the relevant button is "
 "pressed"
 msgstr ""
+"Skaičius sekundžių, persukamų pirmyn arba atgal paspaudus atitinkamą mygtuką"
 
 msgid "Forward/back time (seconds)"
-msgstr ""
+msgstr "Pirmyn/atgal laikas (sekundės)"
 
 msgid "The amount by which the speed is multiplied for fast forwarding"
 msgstr ""
+"Kiekis. dėl kurio greitis  yra padidinamas, kad būtų greitai prasukta pirmyn"
 
 msgid "Fast forward multiplier"
-msgstr ""
+msgstr "Greito prasukimo daugiklis"
 
 msgid ""
 "Playback starts this number of seconds before (or after, if negative) the "
 "audio track position requested"
 msgstr ""
+"Grojimas prasideda tiek sekundžių prieš (arba po, jei neigiamas) prašytą "
+"garso takelio poziciją"
 
 msgid "Lead-in time (seconds)"
-msgstr ""
+msgstr "Įvedimo laikas (sekundėmis)"
 
 msgid "The ratio of voice recorder elapsed time to true elapsed time"
-msgstr ""
+msgstr "Garso įrašymo praleisto laiko ir tikro praleisto laiko santykis"
 
 msgid "Voice recorder calibration"
-msgstr ""
+msgstr "Garso įrašymo kalibravimas"
 
 msgid "Color"
 msgstr "Spalva"
@@ -11243,7 +11413,7 @@ msgid "Draw the order numbers of all segments within their way."
 msgstr "Piešti visų segmentų tvarkos numerius jų kelyje."
 
 msgid "Draw the boundaries of data loaded from the server."
-msgstr ""
+msgstr "Paišyti iš serverio atsiųstų duomenųn ribas"
 
 msgid "Draw virtual nodes in select mode for easy way modification."
 msgstr ""
@@ -11277,6 +11447,8 @@ msgid ""
 "Display keys which have been deemed uninteresting to the point that they can "
 "be silently removed."
 msgstr ""
+"Rodyti raktus, kurie laikomi tokiais neįdomiais, kad gali būti tyliai "
+"panaikinti."
 
 msgid "Options that affect drawing performance"
 msgstr "Parinktys įtakojančios piešimo našumą"
@@ -11294,60 +11466,62 @@ msgid "OSM Data"
 msgstr "OSM duomenys"
 
 msgid "Auto"
-msgstr ""
+msgstr "Auto"
 
 msgctxt "gpx_field"
 msgid "Name"
-msgstr ""
+msgstr "Pavadinimas"
 
 msgctxt "gpx_field"
 msgid "Desc(ription)"
-msgstr ""
+msgstr "Aprašymas"
 
 msgid "Everything"
-msgstr ""
+msgstr "Viskas"
 
 msgid "Name or offset"
-msgstr ""
+msgstr "Pavadinimas arba lygiavimas"
 
 msgid "None"
-msgstr ""
+msgstr "Nėra"
 
 msgid "Custom"
-msgstr ""
+msgstr "Bendras"
 
 msgid "Use global settings"
 msgstr "Naudoti visuotinius parametrus"
 
 msgid "All"
-msgstr ""
+msgstr "Visi"
 
 msgid "Local files"
 msgstr "Vietiniai failai"
 
 msgid "Force lines if no segments imported"
-msgstr ""
+msgstr "Būtinai kurti linijas, jei neimportuoti segmentai"
 
 msgid "Draw large GPS points"
 msgstr "Piešti didelius GPS taškus"
 
 msgid "Draw a circle from HDOP value"
-msgstr ""
+msgstr "Piešti apskritimą iš HDOP reikšmės"
 
 msgid "Velocity (red = slow, green = fast)"
-msgstr ""
+msgstr "Greitis (raudona = lėtai, žalia = greitai)"
 
 msgid "Direction (red = west, yellow = north, green = east, blue = south)"
 msgstr ""
+"Kryptis (raudona = vakarai, geltona = šiaurė, žalia = rytai, mėlyna = pietūs)"
 
 msgid "Dilution of Position (red = high, green = low, if available)"
 msgstr ""
+"Pozicijos silpnumas (raudona = didelis, žalia = mažas, jei prieinama)"
 
 msgid "Track date"
 msgstr "Pėdsako data"
 
 msgid "Single Color (can be customized for named layers)"
-msgstr ""
+msgstr "Viena spalva (gali būti adaptuota vardiniams sluoksniams)"
 
 msgid "Car"
 msgstr "Automobilis"
@@ -11359,13 +11533,13 @@ msgid "Foot"
 msgstr "Pėstieji"
 
 msgid "Create markers when reading GPX"
-msgstr ""
+msgstr "Sukurti žymeklius skaitant GPX"
 
 msgid "Fast drawing (looks uglier)"
 msgstr "Greitas braižymas (atrodo prasčiau)"
 
 msgid "Dynamic color range based on data limits"
-msgstr ""
+msgstr "Dinaminis spalvų rėžis pagal duomenų limitus"
 
 msgid "Smooth GPX graphics (antialiasing)"
 msgstr "Lyginti GPX grafiką (glodinimas)"
@@ -11374,28 +11548,36 @@ msgid ""
 "Automatically make a marker layer from any waypoints when opening a GPX "
 "layer."
 msgstr ""
+"Automatiškai sukurti žymelės sluoksnį iš bet kokių kelio taškų, kai "
+"atidaromas GPX sluoksnis."
 
 msgid "Draw lines between raw GPS points"
-msgstr ""
+msgstr "Nupiešti linijas tarp naujų GPS taškų"
 
 msgid ""
 "Maximum length (in meters) to draw lines for local files. Set to ''-1'' to "
 "draw all lines."
 msgstr ""
+"Didžiausias ilgis (metrais), kad nupiešti linijas vietiniams failams. "
+"Nustatyti ''-1'', kad brėžti visas linijas."
 
 msgid "Maximum length for local files (meters)"
-msgstr ""
+msgstr "Didžiausias ilgis vietiniams failams (metrais)"
 
 msgid ""
 "Maximum length (in meters) to draw lines. Set to ''-1'' to draw all lines."
 msgstr ""
+"Didžiausias ilgis (metrais), kad piešti linijas. Nustatyti ''-1'', kad "
+"piešti visas linijas."
 
 msgid "Maximum length (meters)"
-msgstr ""
+msgstr "Didžiausias ilgis (metrais)"
 
 msgid ""
 "Force drawing of lines if the imported data contain no line information."
 msgstr ""
+"Priverstinai piešti linijas, jei importuoti duomenys neturi informacijos "
+"apie linijas."
 
 msgid "Draw direction arrows for lines, connecting GPS points."
 msgstr "Piešti krypties rodykles linijoms, jungiančioms GPS taškus."
@@ -11403,26 +11585,30 @@ msgstr "Piešti krypties rodykles linijoms, jungiančioms GPS taškus."
 msgid ""
 "Draw the direction arrows using table lookups instead of complex math."
 msgstr ""
+"Piešti krypties rodykles, naudojantis lentelės peržiūra vietoje kompleksinės "
+"matematikos."
 
 msgid ""
 "Do not draw arrows if they are not at least this distance away from the last "
 "one."
 msgstr ""
+"Nepieškite rodyklės, jei jie nėra bent jau tokiu atstumu toliau nuo "
+"ankstesniojo."
 
 msgid "Minimum distance (pixels)"
 msgstr "Minimalus atstumas (pikseliais)"
 
 msgid "Draw a circle from HDOP value."
-msgstr ""
+msgstr "Piešti apskritimą iš HDOP reikšmės."
 
 msgid "Draw larger dots for the GPS points."
-msgstr ""
+msgstr "Piešti didesnius taškus GPS taškams."
 
 msgid "Width of drawn GPX line (0 for default)"
-msgstr ""
+msgstr "Nupieštos GPX linijos storis (numatyta 0)"
 
 msgid "Drawing width of GPX lines"
-msgstr ""
+msgstr "GPX linijų piešimo storis"
 
 msgid ""
 "Apply antialiasing to the GPX lines resulting in a smoother appearance."
@@ -11432,6 +11618,8 @@ msgid ""
 "All points and track segments will have the same color. Can be customized in "
 "Layer Manager."
 msgstr ""
+"Visi taškai ir pėdsakų segmentai turės tą pačią spalvą. Tai gali būti "
+"subendrinta sluoksnių tvarkytuvėje"
 
 msgid "Colors points and track segments by velocity."
 msgstr "Spalvina taškus ir pėdsako segmentus pagal greitį."
@@ -11448,28 +11636,28 @@ msgid "Colors points and track segments by its timestamp."
 msgstr "Spalvina taškus ir pėdsako segmentus pagal laiko žymą."
 
 msgid "Allows to tune the track coloring for different average speeds."
-msgstr ""
+msgstr "Leidžia derinti pėdsakų spalvą skirtingiems vidutiniams greičiams."
 
 msgid "Track and Point Coloring"
-msgstr ""
+msgstr "Pėdsako ir taško spalvos"
 
 msgid "Colors points and track segments by data limits."
 msgstr "Spalvina taškus ir pėdsako segmentus pagal duomenų limitus."
 
 msgid "Waypoint labelling"
-msgstr ""
+msgstr "Kelio taško žymėjimas"
 
 msgid "Audio waypoint labelling"
-msgstr ""
+msgstr "Garso kelio taško žymėjimas"
 
 msgid "Incorrect waypoint label pattern: {0}"
-msgstr ""
+msgstr "Neteisingas kelio taško etiketės šablonas: {0}"
 
 msgid "Incorrect pattern"
-msgstr ""
+msgstr "Neteisingas šablonas"
 
 msgid "Incorrect audio waypoint label pattern: {0}"
-msgstr ""
+msgstr "Neteisingas garso kelio taško etiketės šablonas: {0}"
 
 msgid "Show splash screen at startup"
 msgstr "Rodyti prisistatymo langą paleidžiant programą"
@@ -11497,7 +11685,7 @@ msgid "Show localized name in selection lists, if available"
 msgstr "Jei yra, rodyti lokalizuotą vardą pažymėjimo sąrašuose"
 
 msgid "Do not require to switch modes (potlatch style workflow)"
-msgstr ""
+msgstr "Nereikalaukite perjungti veiksnų (potlatch stiliaus darbo eiga)"
 
 msgid ""
 "Display buttons in right side menus only when mouse is inside the element"
@@ -11533,7 +11721,7 @@ msgid "Add Imagery URL"
 msgstr "Pridėti vaizdų URL"
 
 msgid "1. Enter URL"
-msgstr ""
+msgstr "1. Įveskite URL"
 
 msgid ""
 "{0} is replaced by tile zoom level, also supported:<br>offsets to the zoom "
@@ -11541,41 +11729,45 @@ msgid ""
 msgstr ""
 
 msgid "{0} is replaced by X-coordinate of the tile"
-msgstr ""
+msgstr "{0} pakeičiama kaladėlės X koordinate"
 
 msgid "{0} is replaced by Y-coordinate of the tile"
-msgstr ""
+msgstr "{0} pakeičiama kaladėlės Y koordinate"
 
 msgid "{0} is replaced by {1} (Yahoo style Y coordinate)"
-msgstr ""
+msgstr "{0} pakeičiama {1} (Yahoo stiliaus Y koordinate)"
 
 msgid ""
 "{0} is replaced by {1} (OSGeo Tile Map Service Specification style Y "
 "coordinate)"
 msgstr ""
+"{0} pakeičiama {1} (OSGeo žemėlapių kaladėlių paslaugų specifikacijos "
+"stiliaus Y koordinate)"
 
 msgid ""
 "{0} is replaced by a random selection from the given comma separated list, "
 "e.g. {1}"
 msgstr ""
+"{0} pakeičiama atsitiktine atranka iš duoto kableliais atskirto sąrašo, "
+"pavyzdžiui, {1}"
 
 msgid "2. Enter maximum zoom (optional)"
-msgstr ""
+msgstr "2. Įveskite didžiausią mastelį (neprivaloma)"
 
 msgid "3. Verify generated TMS URL"
-msgstr ""
+msgstr "3. Patikrinkite sugeneruotą TMS URL"
 
 msgid "4. Enter name for this layer"
-msgstr ""
+msgstr "4. Įveskite šio sluoksnio vardą"
 
 msgid "Store WMS endpoint only, select layers at usage"
 msgstr ""
 
 msgid "Show bounds"
-msgstr ""
+msgstr "Rodyti ribas"
 
 msgid "1. Enter service URL"
-msgstr ""
+msgstr "1. Įveskite paslaugos URL"
 
 msgid "Get layers"
 msgstr "Gauti sluoksnius"
@@ -11593,27 +11785,54 @@ msgid "5. Enter name for this layer"
 msgstr "5. Įveskite šio sluoksnio pavadinimą"
 
 msgid "Show Bounds"
-msgstr ""
+msgstr "Rodyti ribas"
 
 msgid "No bounding box was found for this layer."
+msgstr "Jokio apibrėžto stačiakampio nerasta šiam sluoksniui."
+
+msgid "1. Enter getCapabilities URL"
+msgstr "1. Įvesti getCapabilities URL"
+
+msgid "2. Enter name for this layer"
+msgstr "2. Įvesti pavadinimą šiam sluoksniui"
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
 msgstr ""
 
 msgid "imagery fade"
 msgstr "vaizdų stelbimas"
 
 msgid "Fade Color: "
-msgstr ""
+msgstr "Stelbimo spalva: "
 
 msgid "Fade amount: "
-msgstr ""
+msgstr "Stelbimo dydis: "
 
 msgid "Soft"
-msgstr ""
+msgstr "Švelnus"
 
 msgid "Strong"
-msgstr ""
+msgstr "Stiprus"
 
 msgid "Sharpen (requires layer re-add): "
+msgstr "Aštrinimas (reikalauja pridėti sluoksnį iš naujo): "
+
+msgid "Tile cache directory: "
+msgstr "Kaladėlių podėlio aplankas: "
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr "Disko podėlio didžiausias leidžiamas dydis (vaizdui) megabaitais: "
+
+msgid "Maximum number of objects in memory cache: "
+msgstr "Didžiausias leidžiamas skaičius objektų , atminties podėlyje: "
+
+msgid "Tiles zoom offset:"
 msgstr ""
 
 msgid "Imagery Preferences"
@@ -11635,31 +11854,34 @@ msgid "Imagery providers"
 msgstr "Vaizdų tiekėjai"
 
 msgid "Offset bookmarks"
-msgstr ""
+msgstr "Lygiavimo žymelės"
+
+msgid "Cache contents"
+msgstr "Podėlio turinys"
 
 msgid "Imagery Background: Default"
 msgstr "Vaizdų fonas: numatytasis"
 
 msgid "Available default entries:"
-msgstr ""
+msgstr "Prieinami numatytieji įrašai:"
 
 msgid "Selected entries:"
-msgstr ""
+msgstr "Pasirinkti įrašai:"
 
 msgid "Add a new {0} entry by entering the URL"
-msgstr ""
+msgstr "Pridėti naują {0} įrašą įvedant URL"
 
 msgid "Remove entry"
-msgstr ""
+msgstr "Pašalinti įrašą"
 
 msgid "copy selected defaults"
-msgstr ""
+msgstr "Kopijuoti pasirinktas reikšmes"
 
 msgid "Please select at least one row to copy."
-msgstr ""
+msgstr "Pažymėkite bent vieną eilutę kopijavimui."
 
 msgid "reload defaults"
-msgstr ""
+msgstr "įkelti numatytąsias reikšmes iš naujo"
 
 msgid "Menu Name"
 msgstr "Meniu pavadinimas"
@@ -11674,69 +11896,53 @@ msgid "Imagery URL (Default)"
 msgstr "Vaizdų URL (numatytasis)"
 
 msgid "EULA license URL not available: {0}"
-msgstr ""
+msgstr "EULA licencijos URL yra negalimas: {0}"
 
 msgid "Malformed URL for the EULA licence: {0}"
-msgstr ""
-
-msgid "Projection"
-msgstr "Projekcija"
+msgstr "Blogai suformuotas GNLS licencijos URL: „{0}“"
 
 msgid "Layer"
 msgstr "Sluoksnis"
 
 msgid "Easting"
-msgstr ""
+msgstr "Į rytus"
 
 msgid "Northing"
-msgstr ""
+msgstr "Į šiaurę"
 
 msgid "Auto zoom by default: "
-msgstr ""
+msgstr "Numatytas auto didinimas: "
 
 msgid "Autoload tiles by default: "
-msgstr ""
+msgstr "Numatytas automatinis kaladėlių įkėlimas: "
 
 msgid "Min. zoom level: "
-msgstr ""
+msgstr "Min. didinimo lygis: "
 
 msgid "Max. zoom level: "
-msgstr ""
+msgstr "Maks. didinimo lygis: "
 
 msgid "Add to slippymap chooser: "
-msgstr ""
-
-msgid "Tile cache directory: "
-msgstr ""
+msgstr "Pridėti į žemėlapio rūšies pasirinkimus: "
 
 msgid "Maximum concurrent downloads: "
-msgstr ""
+msgstr "Daugiausiai lygiagrečių atsiuntimų: "
 
 msgid "Maximum concurrent downloads per host: "
-msgstr ""
-
-msgid "Maximum elements in disk cache: "
-msgstr ""
+msgstr "Daugiausiai lygiagrečių atsiuntimų serveriui: "
 
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
-
-msgid "Downloader:"
-msgstr ""
+"Šis sluoksnis nepalaiko nė vienos JOSM projekcijos,\n"
+"todėl negalite jo naudoti. Šis pranešimas daugiau nebus rodomas."
 
 msgid "Simultaneous connections:"
-msgstr ""
-
-msgid "Overlap tiles"
-msgstr ""
+msgstr "Vienalaikės jungtys:"
 
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
-msgstr ""
+msgid "Tile size:"
+msgstr "Kaladėlės dydis"
 
 msgid "Auto save enabled"
 msgstr "Automatinis įrašymas įjungtas"
@@ -11798,7 +12004,7 @@ msgid "Add a new style by entering filename or URL"
 msgstr "Pridėti naują stilių įvedant failą ar URL"
 
 msgid "New style entry:"
-msgstr ""
+msgstr "Naujo stiliaus įvestis:"
 
 msgid "Remove the selected styles from the list of active styles"
 msgstr "Išimti pažymėtus stilius iš aktyvių stilių sąrašo"
@@ -11813,22 +12019,27 @@ msgid "Reloads the list of available styles from ''{0}''"
 msgstr "Iš naujo įkelia prieinamų stilių sąrašą iš „{0}“"
 
 msgid "Loading style sources from ''{0}''"
-msgstr ""
+msgstr "Įkeliami stilių šaltiniai iš „{0}“"
 
 msgid ""
 "<html>Failed to load the list of style sources "
 "from<br>''{0}''.<br><br>Details (untranslated):<br>{1}</html>"
 msgstr ""
+"<html>Nepavyko įkelti stilių šaltinio sąrašo iš<br>''{0}''.<br><br>Detalės "
+"(neišverstos):<br>{1}</html>"
 
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
+"Dėmesio: nelegalus įvesties stilių sąraše, formatas ''{0}''. Gauta ''{1}''"
 
 msgid "JOSM default (MapCSS)"
-msgstr ""
+msgstr "JOSM numatytasis (MapCSS)"
 
 msgid ""
 "Internal style to be used as base for runtime switchable overlay styles"
 msgstr ""
+"Vidinis stilius, naudojamas kaip pagrindas perjungiamiems veikiantiems "
+"padengčių stiliams"
 
 msgid "Potlatch 2"
 msgstr "Potlatch 2"
@@ -12028,7 +12239,7 @@ msgid "Enter URL"
 msgstr "Įveskite URL"
 
 msgid "Please select an entry."
-msgstr ""
+msgstr "Prašome pasirinkti įrašą."
 
 msgid "Edit JOSM Plugin description URL."
 msgstr "Taisykite JOSM papildinių aprašo URL."
@@ -12063,13 +12274,13 @@ msgstr ""
 "tikro laiko."
 
 msgid "By Code (EPSG)"
-msgstr ""
+msgstr "Pagal kodą (EPSG)"
 
 msgid "Invalid projection configuration: {0}"
-msgstr ""
+msgstr "Neteisinga projekcijos konfigūracija: {0}"
 
 msgid "Projection configuration is valid."
-msgstr ""
+msgstr "Projekcijos konfigūracija yra teisinga."
 
 msgid "Validate"
 msgstr "Tikrinti"
@@ -12081,7 +12292,7 @@ msgid "Parameter information"
 msgstr "Parametrų informacija"
 
 msgid "Projection name"
-msgstr ""
+msgstr "Projekcijos pavadinimas"
 
 msgid "Supported values:"
 msgstr "Palaikomos reikšmės:"
@@ -12090,58 +12301,58 @@ msgid "Projection parameters"
 msgstr "Projekcijos parametrai"
 
 msgid "False easting and false northing"
-msgstr ""
+msgstr "Neteisingas rytų pasirinkimas ir neteisingas šiaurės pasirinkimas"
 
 msgid "Central meridian"
-msgstr ""
+msgstr "Centrinis meridianas"
 
 msgid "Scaling factor"
-msgstr ""
+msgstr "Skaliavimo faktorius"
 
 msgid "Ellipsoid name"
-msgstr ""
+msgstr "Epsiloido pavadinimas"
 
 msgid "Ellipsoid parameters"
-msgstr ""
+msgstr "Epsiloido parametrai"
 
 msgid "Datum name"
-msgstr ""
+msgstr "Datum pavadinimas"
 
 msgid "3 or 7 term datum transform parameters"
-msgstr ""
+msgstr "3 arba 7 termino datum transformuoti parametrai"
 
 msgid "NTv2 grid file"
-msgstr ""
+msgstr "NTv2 tinklelio failas"
 
 msgid "Built-in:"
 msgstr "Įtaisytoji:"
 
 msgid "Projection bounds (in degrees)"
-msgstr ""
+msgstr "Projekcijos kraštai (laipsniais)"
 
 msgid "Sets the SRS=... parameter in the WMS request"
-msgstr ""
+msgstr "Nustato SRS=... parametrą WMS užklausos metu"
 
 msgid "Gauß-Krüger"
 msgstr "Gauß-Krüger"
 
 msgid "GK Zone"
-msgstr ""
+msgstr "GK Zona"
 
 msgid "Gauß-Krüger Zone {0}"
 msgstr "Gauß-Krüger Zone {0}"
 
 msgid "{0} ({1} to {2} degrees)"
-msgstr ""
+msgstr "{0} ({1} iki {2} laipsniai)"
 
 msgid "Lambert CC9 Zone (France)"
 msgstr "Lambert CC9 Zone (Prancūzija)"
 
 msgid "Lambert CC Zone"
-msgstr ""
+msgstr "Lambert CC Zona"
 
 msgid "{0} (Corsica)"
-msgstr ""
+msgstr "{0} (Korsika)"
 
 msgid "Lambert 4 Zones (France)"
 msgstr "Lambert 4 Zones (Prancūzija)"
@@ -12150,10 +12361,10 @@ msgid "WGS84 Geographic"
 msgstr "WGS84 Geographic"
 
 msgid "Belgian Lambert 1972"
-msgstr ""
+msgstr "Belgijos Lambert 1972"
 
 msgid "Belgian Lambert 2008"
-msgstr ""
+msgstr "Belgijos Lambert 2008"
 
 msgid "Lambert Zone (Estonia)"
 msgstr "Lambert Zone (Estija)"
@@ -12195,40 +12406,40 @@ msgid "PUWG (Poland)"
 msgstr "PUWG (Lenkija)"
 
 msgid "PUWG Zone"
-msgstr ""
+msgstr "PUWG Zona"
 
 msgid "Swiss Grid (Switzerland)"
 msgstr "Swiss Grid (Šveicarija)"
 
 msgid "<i>CH1903 / LV03 (without local corrections)</i>"
-msgstr ""
+msgstr "<i>CH1903 / LV03 (be vietinių patikslinimų)</i>"
 
 msgid "Guadeloupe Fort-Marigot 1949"
-msgstr ""
+msgstr "Gvadelupės Fort-Marigot 1949"
 
 msgid "Guadeloupe Ste-Anne 1948"
-msgstr ""
+msgstr "Gvadelupės Ste-Anne 1948"
 
 msgid "Martinique Fort Desaix 1952"
-msgstr ""
+msgstr "Martinikos Fort Desaix 1952"
 
 msgid "Reunion RGR92"
-msgstr ""
+msgstr "Reunjono RGR92"
 
 msgid "Guyane RGFG95"
-msgstr ""
+msgstr "Gajanos RGFG95"
 
 msgid "UTM France (DOM)"
 msgstr "UTM Prancūzija (DOM)"
 
 msgid "UTM Geodesic system"
-msgstr ""
+msgstr "UTM Geodezinė sistema"
 
 msgid "UTM"
 msgstr "UTM"
 
 msgid "UTM Zone"
-msgstr ""
+msgstr "UTM Zona"
 
 msgid "North"
 msgstr "Šiaurė"
@@ -12237,67 +12448,75 @@ msgid "South"
 msgstr "Pietūs"
 
 msgid "Hemisphere"
-msgstr ""
+msgstr "Hemisfera"
 
 msgid "Remote Control"
 msgstr "Nuotolinis valdymas"
 
 msgid "Settings for the remote control feature."
-msgstr ""
+msgstr "Nuotolinio valdymo nustatymai."
 
 msgid "Download objects to new layer"
 msgstr "Atsiųsti objektus į naują sluoksnį"
 
 msgid "Confirm all Remote Control actions manually"
-msgstr ""
+msgstr "Patvirtinti visus nuotolinio valdymo veiksmus rankiniu būdu"
 
 msgid ""
 "Allows JOSM to be controlled from other applications, e.g. from a web "
 "browser."
 msgstr ""
+"Leidžia kontroliuoti JOSM iš kitų programų, pavyzdžiui, saityno naršyklės."
 
 msgid ""
 "JOSM will always listen at <b>port {0}</b> (http) and <b>port {1}</b> "
 "(https) on localhost.<br>These ports are not configurable because they are "
 "referenced by external applications talking to JOSM."
 msgstr ""
+"JOSM visuomet klausysis <b>{0} prievado</b> (http) ir <b>{1} prievado</b> "
+"(https) lokaliai (localhost).<br>Šie prievadai nekonfigūruojami, nes jie "
+"naudojami išorinėse programose bendraujančiose su JOSM."
 
 msgid "Enable remote control"
 msgstr "Įjungti nuotolinį valdymą"
 
 msgid "Enable HTTPS support"
-msgstr ""
+msgstr "Įjungti HTTPS palaikymą"
 
 msgid "Install..."
-msgstr ""
+msgstr "Įdiegti..."
 
 msgid "Uninstall..."
-msgstr ""
+msgstr "Išdiegti..."
 
 msgid "Install JOSM localhost certificate to system/browser root keystores"
 msgstr ""
+"Įdiekite JOSM lokalųjį sertifikatą, kad naršyti/sisteminti pagrindines "
+"saugyklas"
 
 msgid ""
 "Uninstall JOSM localhost certificate from system/browser root keystores"
 msgstr ""
+"Išdiekite JOSM lokalųjį sertifikatą iš sisteminių/naršyklinių pagrindinių "
+"saugyklų"
 
 msgid "Certificate:"
-msgstr ""
+msgstr "Sertifikatas:"
 
 msgid "Certificate has been successfully installed."
-msgstr ""
+msgstr "Sertifikatas sėkmingai įdiegtas."
 
 msgid "Certificate is already installed. Nothing to do."
-msgstr ""
+msgstr "Sertifikatas jau yra įdiegtas. Nieko nebereikia daryti."
 
 msgid "Removing certificate {0} from root keystore."
-msgstr ""
+msgstr "Šalinamas sertifikatas {0} iš pagrindinės saugyklos."
 
 msgid "Certificate has been successfully uninstalled."
-msgstr ""
+msgstr "Sertifikatas sėkmingai pašalintas."
 
 msgid "Certificate is not installed. Nothing to do."
-msgstr ""
+msgstr "Sertifikatas nėra įdiegtas. Nieko nebereikia daryti."
 
 msgid "Permitted actions:"
 msgstr "Leidžiami veiksmai:"
@@ -12354,7 +12573,7 @@ msgid "Authentication"
 msgstr "Tapatumo nustatymas"
 
 msgid "Configure your identity and how to authenticate at the OSM server"
-msgstr ""
+msgstr "Keisti savo tapatybę ir kaip būti autentifikuojamam OSM serveryje."
 
 msgid "Use Basic Authentication"
 msgstr "Naudoti bazinį tapatumo nustatymą"
@@ -12388,10 +12607,10 @@ msgid "Failed to retrieve OSM credentials from credential manager."
 msgstr ""
 
 msgid "Current credential manager is of type ''{0}''"
-msgstr ""
+msgstr "Dabartinis kvalifikuotas valdytojas yra tipo ''{0}''"
 
 msgid "Failed to save OSM credentials to credential manager."
-msgstr ""
+msgstr "Nepavyko išsaugoti OSM kvalifikacijų kvalifikuotam valdytojui."
 
 msgid "Periodically check for new messages"
 msgstr "Periodiškai tikrinti, ar nėra naujų pranešimų"
@@ -12463,19 +12682,19 @@ msgid "Validation failed. The API URL seems to be invalid."
 msgstr "Tikrinimas nepavyko. Panašu, kad API URL neteisingas."
 
 msgid "OSM API URL must not be empty. Please enter the OSM API URL."
-msgstr ""
+msgstr "OSM API URL negali būti tuščias. Prašome įvesti OSM API URL."
 
 msgid "The current value is not a valid URL"
-msgstr ""
+msgstr "Dabartinė vertė nėra teisinga URL"
 
 msgid "Please enter the OSM API URL."
-msgstr ""
+msgstr "Prašome įvesti OSM API URL."
 
 msgid "Proxy settings"
 msgstr "Įgaliotojo serverio nuostatos"
 
 msgid "Configure whether to use a proxy server"
-msgstr ""
+msgstr "Konfigūruoti, kai reikia naudoti proxy serverį"
 
 msgid "Host:"
 msgstr "Serveris:"
@@ -12516,6 +12735,8 @@ msgid ""
 "JOSM is configured to use proxies from the system setting, but the JVM is "
 "not configured to retrieve them. Resetting preferences to ''No proxy''"
 msgstr ""
+"JOSM yra konfigūruotas naudoti šliuzus iš sistemos nustatymo, bet JVM nėra "
+"konfigūruotas, kad gauti juos. Nustatymai nustatomi į ''Jokio šliuzo''"
 
 msgid "Connection Settings"
 msgstr "Ryšio nustatymai"
@@ -12551,12 +12772,14 @@ msgid "Changing keyboard shortcuts manually."
 msgstr "Sparčiųjų klavišų keitimas."
 
 msgid "Data validator"
-msgstr ""
+msgstr "Duomenų tikrintuvė"
 
 msgid ""
 "An OSM data validator that checks for common errors made by users and editor "
 "programs."
 msgstr ""
+"OSM duomenų tikrintuvė, kuri ieško naudotojų ar redagavimo programų padarytų "
+"dažnai pasitaikančių klaidų."
 
 msgid "Available rules:"
 msgstr "Prieinamos taisyklės:"
@@ -12565,108 +12788,111 @@ msgid "Active rules:"
 msgstr "Aktyvios taisyklės:"
 
 msgid "Add a new rule by entering filename or URL"
-msgstr ""
+msgstr "Įvesti naują taisyklę keičiant failo pavadinimą arba URL"
 
 msgid "New rule entry:"
-msgstr ""
+msgstr "Naujos taisyklės įvestis:"
 
 msgid "Remove the selected rules from the list of active rules"
-msgstr ""
+msgstr "Pašalinti pasirinktas taisykles iš aktyvių taisyklių sąrašo"
 
 msgid "Edit the filename or URL for the selected active rule"
-msgstr ""
+msgstr "Keisti failo pavadinimą arba URL, pasirinktai aktyviai taisyklei"
 
 msgid "Add the selected available rules to the list of active rules"
-msgstr ""
+msgstr "Pridėti pasirinktas galimas taisykles į aktyvių taisyklių sąrašą"
 
 msgid "Reloads the list of available rules from ''{0}''"
-msgstr ""
+msgstr "Perkrauna galimų taisyklių sąrašą iš ''{0}''"
 
 msgid "Loading rule sources from ''{0}''"
-msgstr ""
+msgstr "Kraunami taisyklės šaltiniai iš ''{0}''"
 
 msgid ""
 "<html>Failed to load the list of rule sources "
 "from<br>''{0}''.<br><br>Details (untranslated):<br>{1}</html>"
 msgstr ""
+"<html>Nepavyko įkrauti taisyklės šaltinių sąrašo "
+"iš<br>''{0}''.<br><br>Detalės (neišversta):<br>{1}</html>"
 
 msgid "Warning: illegal format of entry in rule list ''{0}''. Got ''{1}''"
 msgstr ""
+"Dėmesio: negalimas įvesties formatas taisyklių sąraše ''{0}''. Gauta ''{1}''"
 
 msgid "Checks for errors on addresses"
-msgstr ""
+msgstr "Ieško klaidų adresuose"
 
 msgid "Tag combinations"
-msgstr ""
+msgstr "Žymų kombinacijos"
 
 msgid "Checks for missing tag or suspicious combinations"
-msgstr ""
+msgstr "Ieško trūkstamų žymų ar įtartinų kombinacijų"
 
 msgid "Deprecated features"
-msgstr ""
+msgstr "Pasenusios ypatybės"
 
 msgid "Checks for deprecated features"
-msgstr ""
+msgstr "Ieško pasenusių ypatybių"
 
 msgid "Geometry"
 msgstr "Geometrija"
 
 msgid "Checks for geometry errors"
-msgstr "Tikrina, ar nėra geometrijos klaidų"
+msgstr "Ieško geometrijos klaidų"
 
 msgid "Checks for errors on highways"
-msgstr ""
+msgstr "Ieško klaidų keliuose"
 
 msgid "Multiple values"
-msgstr ""
+msgstr "Sudėtinės reikšmės"
 
 msgid "Checks for wrong multiple values"
-msgstr ""
+msgstr "Ieško neteisingų sudėtinių reikšmių"
 
 msgid "Numeric values"
-msgstr ""
+msgstr "Skaitinės reikšmės"
 
 msgid "Checks for wrong numeric values"
-msgstr ""
+msgstr "Ieško neteisingų skaitinių reikšmių"
 
 msgid "Power"
-msgstr ""
+msgstr "Elektra"
 
 msgid "Checks for errors on power infrastructures"
-msgstr ""
+msgstr "Ieško klaidų energijos infrastruktūroje"
 
 msgid "Religion"
 msgstr "Religija"
 
 msgid "Checks for errors on religious objects"
-msgstr ""
+msgstr "Ieško klaidų religiniuose objektuose"
 
 msgid "Checks for errors on relations"
-msgstr ""
+msgstr "Ieško klaidų ryšiuose"
 
 msgid "Unnecessary tags"
-msgstr ""
+msgstr "Nereikalingos žymos"
 
 msgid "Checks for unnecessary tags"
-msgstr ""
+msgstr "Ieško nereikalingų žymų"
 
 msgid "Wikipedia"
 msgstr "Vikipedija"
 
 msgid "Checks for wrong wikipedia tags"
-msgstr ""
+msgstr "Ieško neteisingų Vikipedijos žymų"
 
 msgid "Tag checker rules"
-msgstr ""
+msgstr "Žymų tikrintuvės taisyklės"
 
 msgid "Choose Tag checker rules to enable"
-msgstr ""
+msgstr "Pasirinkite žymų tikrintuvės taisykles įjungimui"
 
 msgid "Use ignore list."
 msgstr "Naudoti ignoravimų sąrašą."
 
 msgid "Use the ignore list to suppress warnings."
-msgstr ""
+msgstr "Naudoti ignoravimų sąrašą įspėjimų nerodymui."
 
 msgid "Use error layer."
 msgstr "Naudoti klaidų sluoksnį."
@@ -12675,16 +12901,16 @@ msgid "Use the error layer to display problematic elements."
 msgstr "Naudoti klaidų sluoksnį probleminiams elementams parodyti."
 
 msgid "Show informational level."
-msgstr "Rodyti informacinį sluoksnį."
+msgstr "Rodyti informacinį lygį."
 
 msgid "Show the informational tests."
-msgstr ""
+msgstr "Rodyti informacinius testus."
 
 msgid "Show informational level on upload."
-msgstr ""
+msgstr "Rodyti informacinį lygį išsiunčiant."
 
 msgid "Show the informational tests in the upload check windows."
-msgstr ""
+msgstr "Rodyti informacinius testus išsiuntimo patikrinimo languose."
 
 msgid "On demand"
 msgstr "Tik prireikus"
@@ -12699,21 +12925,22 @@ msgid "Choose tests to enable"
 msgstr "Pasirinkite testus įjungimui"
 
 msgid "multiple"
-msgstr ""
+msgstr "daugianaris"
 
 msgid "Remove old keys from up to {0} object"
 msgid_plural "Remove old keys from up to {0} objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Pašalinti senus raktus iš {0} objekto"
+msgstr[1] "Pašalinti senus raktus iš {0} objektų"
+msgstr[2] "Pašalinti senus raktus iš {0} objektų"
 
 msgid "Delete the selection in the tag table"
-msgstr ""
+msgstr "Ištrinti pasirinkimą žymų lentelėje"
 
 msgid "Add a new tag"
-msgstr ""
+msgstr "Pridėti naują žymą"
 
 msgid "Paste tags from buffer"
-msgstr ""
+msgstr "Įdėti žymas iš iškarpinės"
 
 msgid "Use preset ''{0}'' of group ''{1}''"
 msgstr "Naudoti ruošinį „{0}“ grupėje „{1}“"
@@ -12722,7 +12949,7 @@ msgid "Use preset ''{0}''"
 msgstr "Naudoti ruošinį „{0}“"
 
 msgid "Elements of type {0} are supported."
-msgstr ""
+msgstr "Palaikomi „{0}“ tipo elementai."
 
 msgid "Edit also …"
 msgstr "Taip pat redaguoti …"
@@ -12731,33 +12958,42 @@ msgid "Apply Preset"
 msgstr "Taikyti ruošinį"
 
 msgid "New relation"
+msgstr "Naujas ryšys"
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
 msgstr ""
 
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Pakeisti {0} objektą"
+msgstr[1] "Pakeisti {0} objektus"
+msgstr[2] "Pakeisti {0} objektų"
 
 msgid "Nothing selected!"
-msgstr ""
+msgstr "Niekas nepasirinkta!"
 
 msgid "Selection unsuitable!"
-msgstr ""
+msgstr "Pažymėjimas netinkamas!"
 
 msgid "Change Tags"
-msgstr ""
+msgstr "Pakeisti žymas"
 
 msgid "Add or remove toolbar button"
 msgstr "Pridėti ar pašalinti įrankių juostos mygtuką"
 
 msgid "Unknown requisite: {0}"
-msgstr ""
+msgstr "Nežinomas rekvizitas: {0}"
 
 msgid "Illegal member expression: {0}"
-msgstr ""
+msgstr "Negalimas nario išreiškimas: {0}"
 
 msgid "More information about this feature"
-msgstr ""
+msgstr "Daugiau informacijos apie šią priemonę"
 
 msgid "Available roles"
 msgstr "Prieinamos rolės"
@@ -12766,19 +13002,19 @@ msgid "role"
 msgstr "rolė"
 
 msgid "count"
-msgstr ""
+msgstr "skaičius"
 
 msgid "elements"
-msgstr ""
+msgstr "elementai"
 
 msgid "Optional Attributes:"
-msgstr ""
+msgstr "Pasirenkami atributai"
 
 msgid "Select auto-increment of {0} for this field"
-msgstr ""
+msgstr "Pasirinkti {0} auto-prieaugį šiam laukui"
 
 msgid "Cancel auto-increment for this field"
-msgstr ""
+msgstr "Atšaukti auto-prieaugį šiam laukui"
 
 msgid "{0}:"
 msgstr "{0}:"
@@ -12819,31 +13055,31 @@ msgstr ""
 "skaičius privalo būti toks pat kaip „values“"
 
 msgid "Unknown type: {0}"
-msgstr ""
+msgstr "Nežinomas tipas: {0}"
 
 msgid "Preset group {1} / {0}"
-msgstr ""
+msgstr "Ruošinių grupė {1} / {0}"
 
 msgid "Preset group {0}"
-msgstr ""
+msgstr "Ruošinių grupė {0}"
 
 msgid "Reference {0} is being used before it was defined"
-msgstr ""
+msgstr "Nuoroda {0} jau buvo naudojama prieš tai, kai ji buvo apibrėžta"
 
 msgid "Roles cannot appear more than once"
-msgstr ""
+msgstr "Rolės negali pasirodyti daugiau nei kartą"
 
 msgid "Preset role element without parent"
-msgstr ""
+msgstr "Paruošti rolės elementą be tėvo"
 
 msgid "Preset sub element without parent"
-msgstr ""
+msgstr "Paruošti paelementį be tevo"
 
 msgid "Error parsing {0}: "
-msgstr ""
+msgstr "Nagrinėjimo klaida {0}: "
 
 msgid "Search preset"
-msgstr "Paieškos ruošinys"
+msgstr "Ieškoti ruošinių"
 
 msgid "Show preset search dialog"
 msgstr "Rodyti ruošinių paieškos dialogo langą"
@@ -12851,14 +13087,17 @@ msgstr "Rodyti ruošinių paieškos dialogo langą"
 msgid "Search presets"
 msgstr "Paieškos ruošiniai"
 
+msgid "Presets"
+msgstr "Ruošiniai"
+
 msgid "Search for objects by preset"
 msgstr "Ieškoti objektų pagal ruošinį"
 
 msgid "Show only applicable to selection"
-msgstr ""
+msgstr "Rodyti tik tinkamus pažymėjimui"
 
 msgid "Search in tags"
-msgstr ""
+msgstr "Ieškoti žymose"
 
 msgid "Add toolbar button"
 msgstr "Pridėti įrankių juostos mygtuką"
@@ -12867,38 +13106,44 @@ msgid ""
 "Adjustable {0} not registered yet. Cannot set participation in synchronized "
 "adjustment."
 msgstr ""
+"Reguliuojamas {0} dar nėra registruotas. Negalima nustatyti dalyvavimo "
+"sinchronizuotame reguliavime."
 
 msgid "Adjustable {0} not registered yet."
-msgstr ""
+msgstr "Reguliuojamas {0} dar neprisiregistravęs."
 
 msgid "Some of the key listeners forgot to remove themselves: {0}"
-msgstr ""
+msgstr "Kai kurie pagrindiniai klausytojai pasimiršo save pašalinti: {0}"
 
 msgid "Some of the key modifier listeners forgot to remove themselves: {0}"
 msgstr ""
+"Kai kurie pagrindiniai modifikuojantys klausytojai pasimiršo save pašalinti: "
+"{0}"
 
 msgid "All files (*.*)"
 msgstr "Visi failai (*.*)"
 
 msgid "Received error page:"
-msgstr ""
+msgstr "Gautas klaidos puslapis:"
 
 msgid "Min. latitude"
-msgstr ""
+msgstr "Min. platuma"
 
 msgid "Min. longitude"
-msgstr ""
+msgstr "Min. ilguma"
 
 msgid "Max. latitude"
-msgstr ""
+msgstr "Maks. platuma"
 
 msgid "Max. longitude"
-msgstr ""
+msgstr "Maks. ilguma"
 
 msgid ""
 "URL from www.openstreetmap.org (you can paste a download URL here to specify "
 "a bounding box)"
 msgstr ""
+"URL iš www.openstreetmap.org (galite įdėti atsiųstą URL čia tam, kad "
+"nurodytumėte apibrėžtą stačiakampį)"
 
 msgid ""
 "The current value is not a valid changeset ID. Please enter an integer value "
@@ -12910,27 +13155,28 @@ msgid "Add a new source to the list."
 msgstr "Pridėti naują šaltinį į sąrašą."
 
 msgid "Edit the selected source."
-msgstr ""
+msgstr "Redaguoti pasirinktą šaltinį."
 
 msgid "Delete the selected source from the list."
-msgstr ""
+msgstr "Ištrinti pasirinktą šaltinį iš sąrašo."
 
 msgid ""
 "The current value is not a valid OSM ID. Please enter an integer value > 0"
-msgstr ""
+msgstr "Dabartinė vertė nėra galima OSM ID. Prašome įvesti sveiką vertę > 0"
 
 msgid "false: the property is explicitly switched off"
-msgstr ""
+msgstr "neteisingai: nuosavybė yra aiškiai išjungta"
 
 msgid "true: the property is explicitly switched on"
-msgstr ""
+msgstr "teisingai: nuosavybė yra aiškiai įjungta"
 
 msgid ""
 "partial: different selected objects have different values, do not change"
 msgstr ""
+"dalinai: skirtingi pasirinkti objectai turi skirtingas vertes, nekeiskite"
 
 msgid "unset: do not set this property on the selected objects"
-msgstr ""
+msgstr "nenustatyta: nenustatyti šios savybės pažymėtiems objektams"
 
 msgid "Cut"
 msgstr "Iškirpti"
@@ -12939,7 +13185,7 @@ msgid "Right click = copy to clipboard"
 msgstr "Dešinys paspaudimas = kopijuoti į iškarpinę"
 
 msgid "Missing mandatory attribute ''{0}''."
-msgstr ""
+msgstr "Trūkstamas pirminis atributas ''{0}''."
 
 msgid ""
 "Illegal value for mandatory attribute ''{0}'' of type long. Got ''{1}''."
@@ -12974,12 +13220,14 @@ msgid ""
 msgstr ""
 
 msgid "Deleted node {0} is part of way {1}"
-msgstr ""
+msgstr "Ištrintas taškas {0} yra dalis kelio {1}"
 
 msgid ""
 "Way {0} with {1} nodes has incomplete nodes because at least one node was "
 "missing in the loaded data."
 msgstr ""
+"Kelias {0} su {1} taškais turi nebaigtų taškų, nes trūko bent vieno taško "
+"įkeltuose duomenyse."
 
 msgid ""
 "Relation with external id ''{0}'' refers to a missing primitive with "
@@ -12987,13 +13235,13 @@ msgid ""
 msgstr ""
 
 msgid "Deleted member {0} is used by relation {1}"
-msgstr ""
+msgstr "Ištrintas narys {0} yra naudojamas ryšio {1}"
 
 msgid "All Formats"
 msgstr "Visi formatai"
 
 msgid "Downloading points {0} to {1}..."
-msgstr ""
+msgstr "Atsiunčiami taškai {0} į {1}..."
 
 msgid "Contacting OSM Server..."
 msgstr "Susisiekiama su  OSM serveriu..."
@@ -13018,13 +13266,14 @@ msgid ""
 msgstr ""
 
 msgid "Too many redirects to the download URL detected. Aborting."
-msgstr ""
+msgstr "Per daug aptikta nukreipimų į atsiųstą URL. Atmetama."
 
 msgid "Download redirected to ''{0}''"
-msgstr ""
+msgstr "Atsisiuntimas perkeltas į ''{0}''"
 
 msgid "Failed to read from ''{0}''. Server responded with status code {1}."
 msgstr ""
+"Nepavyko perskaityti iš ''{0}''. Serveris atsakė su statuso kodu {1}."
 
 msgid ""
 "Illegal value of attribute ''{0}'' of element ''{1}'' in server "
@@ -13044,10 +13293,10 @@ msgstr ""
 "„{0}“"
 
 msgid "Illegal longitude value for parameter ''{0}'', got {1}"
-msgstr ""
+msgstr "Negalima ilgumos vertė parametrui ''{0}'', gauta {1}"
 
 msgid "Illegal latitude value for parameter ''{0}'', got {1}"
-msgstr ""
+msgstr "Negalima platumos vertė parametrui ''{0}'', gauta {1}"
 
 msgid "Unexpected value for ''{0}'' in changeset query url, got {1}"
 msgstr "Netikėta „{0}“ reikšmė pakeitimų užklausos URL, gauta {1}"
@@ -13066,7 +13315,7 @@ msgid "Unexpected format for port number in preference ''{0}''. Got ''{1}''."
 msgstr ""
 
 msgid "The proxy will not be used."
-msgstr ""
+msgstr "Šliuzas nebus naudojamas."
 
 msgid "Illegal port number in preference ''{0}''. Got {1}."
 msgstr ""
@@ -13101,26 +13350,30 @@ msgid "Unexpected XML element with name ''{0}''"
 msgstr ""
 
 msgid "Could not export ''{0}''."
-msgstr ""
+msgstr "Negalima eksportuoti ''{0}''."
 
 msgid "Could not import ''{0}''."
-msgstr ""
+msgstr "Negalima importuoti ''{0}''."
 
 msgid "Could not import files."
-msgstr ""
+msgstr "Negalima importuoti failų."
 
 msgid "<html>Could not read file ''{0}''.<br>Error is:<br>{1}</html>"
 msgstr ""
+"<html>Neišeina perskaityti failo ''{0}''.<br>Klaida yra:<br>{1}</html>"
 
 msgid "<html>Could not read files.<br>Error is:<br>{0}</html>"
-msgstr ""
+msgstr "<html>Neišeina perskaityti failų.<br>Klaida yra:<br>{0}</html>"
 
 msgid "GeoJSON Files"
 msgstr "GeoJSON failai"
 
-msgid "Layer ''{0}'' not supported"
+msgid "Projected GeoJSON Files"
 msgstr ""
 
+msgid "Layer ''{0}'' not supported"
+msgstr "Sluoksnis ''{0}'' nėra palaikomas"
+
 msgid ""
 "Note: GPL is not compatible with the OSM license. Do not upload GPL licensed "
 "tracks."
@@ -13129,7 +13382,7 @@ msgstr ""
 "kelių."
 
 msgid "GPS track description"
-msgstr ""
+msgstr "GPS pėdsako aprašas"
 
 msgid "Add author information"
 msgstr "Pridėti informacija apie autorių"
@@ -13198,13 +13451,13 @@ msgid "folder"
 msgstr "aplankas"
 
 msgid "Looking for image files"
-msgstr ""
+msgstr "Žiūrima vaizdo failų"
 
 msgid "No image files found."
-msgstr ""
+msgstr "Vaizdo failai nerasti."
 
 msgid "get number of unread messages"
-msgstr ""
+msgstr "gauti neskaitytų pranešimų skaičių"
 
 msgid "You have {0} unread message."
 msgid_plural "You have {0} unread messages."
@@ -13216,23 +13469,23 @@ msgid "Click here to see your inbox."
 msgstr "Spauskite čia gautiems pranešimams peržiūrėti"
 
 msgid "Message notifier"
-msgstr ""
+msgstr "Pranešimų pranešiklis"
 
 msgid "{0} not available (offline mode)"
-msgstr ""
+msgstr "{0} neprieinama (režimas neprisijungus)"
 
 msgid ""
 "No primitive with id {0} in local dataset. Cannot infer primitive type."
 msgstr ""
 
 msgid "Fetching a package of nodes from ''{0}''"
-msgstr "Ištraukiamas taškų rinkinys iš „{0}“"
+msgstr "Gaunamas taškų rinkinys iš „{0}“"
 
 msgid "Fetching a package of ways from ''{0}''"
-msgstr "Ištraukiamas kelių rinkinys iš „{0}“"
+msgstr "Gaunamas kelių rinkinys iš „{0}“"
 
 msgid "Fetching a package of relations from ''{0}''"
-msgstr "Ištraukiamas ryšių rinkinys iš „{0}“"
+msgstr "Gaunamas ryšių rinkinys iš „{0}“"
 
 msgid "Downloading {0} object from ''{1}''"
 msgid_plural "Downloading {0} objects from ''{1}''"
@@ -13249,13 +13502,13 @@ msgid "Downloading OSM data..."
 msgstr "Atsiunčiami OSM duomenys..."
 
 msgid "Fetching node with id {0} from ''{1}''"
-msgstr "Ištraukiamas taškas su id {0} iš „{1}“"
+msgstr "Gaunamas taškas su id {0} iš „{1}“"
 
 msgid "Fetching way with id {0} from ''{1}''"
-msgstr "Ištraukiamas kelias su id {0} iš „{1}“"
+msgstr "Gaunamas kelias su id {0} iš „{1}“"
 
 msgid "Fetching relation with id {0} from ''{1}''"
-msgstr "Ištraukiamas ryšys su id {0} iš „{1}“"
+msgstr "Gaunamas ryšys su id {0} iš „{1}“"
 
 msgid "Server replied with response code 404 for id {0}. Skipping."
 msgstr ""
@@ -13264,40 +13517,41 @@ msgid "NMEA-0183 Files"
 msgstr "NMEA-0183 failai"
 
 msgid "Coordinates imported: {0}"
-msgstr ""
+msgstr "Importuota koordinačių: {0}"
 
 msgid "Malformed sentences: {0}"
-msgstr ""
+msgstr "Blogai suformuoti sakiniai: {0}"
 
 msgid "Checksum errors: {0}"
-msgstr ""
+msgstr "Kontrolinių sumų klaidos: {0}"
 
 msgid "Unknown sentences: {0}"
-msgstr ""
+msgstr "Nežinomi sakiniai: {0}"
 
 msgid "Zero coordinates: {0}"
-msgstr ""
+msgstr "Nulinės koordinatės: {0}"
 
 msgid "NMEA import success:"
-msgstr ""
+msgstr "NMEA importo sėkmė:"
 
 msgid "NMEA import failure!"
-msgstr ""
+msgstr "NMEA importo nesėkmė!"
 
 msgid "Note Files"
-msgstr ""
+msgstr "Pastabų failai"
 
 msgid "OSM API"
-msgstr ""
+msgstr "OSM API"
 
 msgid "JOSM website"
-msgstr ""
+msgstr "JOSM svetainė"
 
 msgid "Unable to access ''{0}'': {1} not available (offline mode)"
 msgstr ""
+"Negalima prisijungti prie ''{0}'': {1} neprieinama (režimas neprisijungus)"
 
 msgid "Unable to initialize OSM API."
-msgstr ""
+msgstr "Negalima inicializuoti OSM API."
 
 msgid "This version of JOSM is incompatible with the configured server."
 msgstr "Ši JOSM versija yra nesuderinama su sukonfigūruotu serveriu."
@@ -13309,7 +13563,7 @@ msgstr ""
 "Ji palaiko protokolo 0.6 versiją, o serveris palaiko nuo {0} iki {1}."
 
 msgid "Removed layer {0} because it is not allowed by the configured API."
-msgstr ""
+msgstr "Pašalintas sluoksnis {0} nes jo neleidžia konfiguruotas API."
 
 msgid "Unexpected format of ID replied by the server. Got ''{0}''."
 msgstr ""
@@ -13349,7 +13603,7 @@ msgid "Starting retry {0} of {1} in {2} seconds ..."
 msgstr ""
 
 msgid "OK - trying again."
-msgstr ""
+msgstr "Gerai - bandoma vėl."
 
 msgid "Starting retry {0} of {1}."
 msgstr ""
@@ -13364,10 +13618,10 @@ msgid "Open changeset expected. Got closed changeset with id {0}."
 msgstr "Tikėtasi atviro pakeitimo. Gautas užvertas pakeitimas su id {0}."
 
 msgid "Note upload failed"
-msgstr ""
+msgstr "Pastabų išsiuntimas nepavyko"
 
 msgid "Error parsing note response from server"
-msgstr ""
+msgstr "Klaida nagrinėjant pastabos atsakymą iš serverio"
 
 msgid "(Code={0})"
 msgstr "(Kodas={0})"
@@ -13391,7 +13645,7 @@ msgid "File ''{0}'' does not exist."
 msgstr "Failas „{0}“ neegzistuoja."
 
 msgid "No data found in file {0}."
-msgstr ""
+msgstr "Nerasta duomenų faile {0}."
 
 msgid "Open OsmChange file"
 msgstr "Atverti OsmChange failą"
@@ -13428,7 +13682,7 @@ msgid "Illegal value for attribute ''{0}''. Got ''{1}''."
 msgstr "Neleistina atributo „{0}“ reikšmė. Gauta „{1}“."
 
 msgid "Illegal numeric value for attribute ''{0}''. Got ''{1}''."
-msgstr ""
+msgstr "Neteisinga atributo „{0}“skaitinė reikšmė. Gauta „{1}“."
 
 msgid "Missing mandatory attribute ''{0}'' of XML element {1}."
 msgstr ""
@@ -13447,6 +13701,7 @@ msgstr ""
 
 msgid "<html>An error occurred while saving.<br>Error is:<br>{0}</html>"
 msgstr ""
+"<html>Pasirodė klaida, kai buvo saugoma.<br>Klaida yra:<br>{0}</html>"
 
 msgid ""
 "<html>An error occurred while restoring backup file.<br>Error "
@@ -13456,7 +13711,7 @@ msgstr ""
 "failą.<br>Klaida:<br>{0}</html>"
 
 msgid "OSM Server Files gzip compressed"
-msgstr ""
+msgstr "OSM Server Files gzip suspaustas"
 
 msgid "Parsing OSM history data ..."
 msgstr "Nagrinėjami OSM istorijos duomenys ..."
@@ -13468,10 +13723,10 @@ msgid "Invalid dataset"
 msgstr ""
 
 msgid "No data found for layer ''{0}''."
-msgstr ""
+msgstr "Nerasta duomenų sluoksniui ''{0}''."
 
 msgid "No data found in file ''{0}''."
-msgstr ""
+msgstr "Nerasta duomenų faile ''{0}''."
 
 msgid "Open OSM file"
 msgstr "Atverti OSM failą"
@@ -13485,7 +13740,7 @@ msgid ""
 msgstr ""
 
 msgid "Deleted way {0} contains nodes"
-msgstr ""
+msgstr "Pašalintas kelias {0} turėjo taškų"
 
 msgid "Missing mandatory attribute ''{0}'' on <nd> of way {1}."
 msgstr ""
@@ -13494,7 +13749,7 @@ msgid "Illegal value of attribute ''ref'' of element <nd>. Got {0}."
 msgstr "Neleistina elemento <nd> atributo „ref“ reikšmė. Gauta „{0}“."
 
 msgid "Deleted relation {0} contains members"
-msgstr ""
+msgstr "Ištrintas ryšys {0} turėjo narių"
 
 msgid "Missing attribute ''ref'' on member in relation {0}."
 msgstr ""
@@ -13515,7 +13770,7 @@ msgid "Incomplete <member> specification with ref=0"
 msgstr ""
 
 msgid "Missing key or value attribute in tag."
-msgstr ""
+msgstr "Trūkstamas rakto arba vertės atributas žymoje."
 
 msgid "Undefined element ''{0}'' found in input stream. Skipping."
 msgstr ""
@@ -13535,7 +13790,7 @@ msgid ""
 msgstr ""
 
 msgid "Unknown or unsupported API version. Got {0}."
-msgstr ""
+msgstr "Nežinoma arba nepalaikoma API versija. Gauta {0}."
 
 msgid "Missing attribute ''version'' on OSM primitive with ID {0}."
 msgstr ""
@@ -13557,7 +13812,7 @@ msgid "Illegal long value for attribute ''{0}''. Got ''{1}''."
 msgstr ""
 
 msgid "{0} bytes have been read"
-msgstr ""
+msgstr "{0} baitai (-ų/as) buvo perskaityti (-as)"
 
 msgid "Prepare OSM data..."
 msgstr "Paruošti OSM duomenis..."
@@ -13608,7 +13863,7 @@ msgid "Contacting Server..."
 msgstr "Jungiamasi prie serverio..."
 
 msgid "Downloading OSM notes..."
-msgstr ""
+msgstr "Atsiunčiamos OSM pastabos..."
 
 msgid "Failed to open connection to API {0}."
 msgstr ""
@@ -13616,15 +13871,17 @@ msgstr ""
 msgid ""
 "Could not connect to the OSM server. Please check your internet connection."
 msgstr ""
+"Nepavyko prisijungti prie OSM serverio. Prašome patikrinti savo ryšį su "
+"internetu."
 
 msgid "Reading error text failed."
 msgstr ""
 
 msgid "XML tag <user> is missing."
-msgstr ""
+msgstr "XML žyma <vartotojas> yra trūkstama."
 
 msgid "Missing attribute ''{0}'' on XML tag ''{1}''."
-msgstr ""
+msgstr "Trūkstamas atributas ''{0}'' XML žymoje ''{1}''."
 
 msgid "Illegal value for attribute ''{0}'' on XML tag ''{1}''. Got {2}."
 msgstr "Neleistina XML žymos „{1}“ atributo „{0}“ reikšmė. Gauta „{2}“."
@@ -13645,10 +13902,10 @@ msgid "{0}% ({1}/{2}), {3} left. Uploading relation ''{4}'' (id: {5})"
 msgstr "{0} % ({1}/{2}), {3} liko. Išsiunčiamas ryšys „{4}“ (id: {5})"
 
 msgid "Starting to upload in one request ..."
-msgstr ""
+msgstr "Pradedama įkelti vienu prašymu ..."
 
 msgid "Value >0 expected for parameter ''{0}'', got {1}"
-msgstr ""
+msgstr "Buvo tikimasi vertės >0 parametrui ''{0}'', gauta {1}"
 
 msgid "Starting to upload in chunks..."
 msgstr ""
@@ -13671,6 +13928,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr "WMS failai (*.wms)"
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr "Nepalaikoma WMS failo versija; rasta {0}, tikėtasi {1}"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -13679,13 +13939,13 @@ msgid ""
 msgstr ""
 
 msgid "Save user and password (unencrypted)"
-msgstr ""
+msgstr "Išsaugoti vartotoją ir slaptažodį (nešifruotą)"
 
 msgid "<delete from {0} objects>"
-msgstr ""
+msgstr "<ištrinti iš {0} objectų (-o)>"
 
 msgid "Old values of"
-msgstr ""
+msgstr "Senos reikšmės žymoje"
 
 msgid "Add tags to selected objects"
 msgstr "Pridėti žymas pažymėtiems objektams"
@@ -13697,16 +13957,16 @@ msgid "Add all tags"
 msgstr "Pridėti visas žymas"
 
 msgid "Add checked tags to selected objects"
-msgstr ""
+msgstr "Pridėti patikrintas žymas į pasirinktus objektus"
 
 msgid "Shift+Enter: Add all tags to selected objects"
 msgstr "Shift+Enter: Pridėti visas žymas pažymėtiems objektams"
 
 msgid "Assume"
-msgstr ""
+msgstr "Prisiminti"
 
 msgid "Existing values"
-msgstr ""
+msgstr "Egzistuojančios vertės"
 
 msgid "Enable the checkbox to accept the value"
 msgstr ""
@@ -13727,7 +13987,7 @@ msgid "Load imagery layers"
 msgstr "Įkelti vaizdų sluoksnius"
 
 msgid "Change the selection"
-msgstr ""
+msgstr "Pakeisti pažymėjimą"
 
 msgid "Change the viewport"
 msgstr "Keisti matomą plotą"
@@ -13736,7 +13996,7 @@ msgid "Create new objects"
 msgstr "Sukurti naujus objektus"
 
 msgid "Read protocol version"
-msgstr ""
+msgstr "Nuskaityti protokolo versiją"
 
 msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
@@ -13745,10 +14005,10 @@ msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
 
 msgid "RemoteControl::Accepting remote connections on {0}:{1}"
-msgstr ""
+msgstr "RemoteControl::Priimami nuotoliniai prisijungimai per {0}:{1}"
 
 msgid "RemoteControl::Server {0}:{1} stopped."
-msgstr ""
+msgstr "RemoteControl::Serveris {0}:{1} sustabdytas."
 
 msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
@@ -13757,7 +14017,7 @@ msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
 msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
-msgstr ""
+msgstr "RemoteControl::Priimami saugūs nuotoliniai prisijungimai per {0}:{1}"
 
 msgid "Remote Control has been asked to create a new node."
 msgstr ""
@@ -13775,7 +14035,7 @@ msgid "There is no layer opened to add way"
 msgstr ""
 
 msgid "Add way"
-msgstr ""
+msgstr "Pridėti kelią"
 
 msgid ""
 "Remote Control has been asked to report its supported features. This enables "
@@ -13797,19 +14057,19 @@ msgid "Remote Control has been asked to load data from the API."
 msgstr ""
 
 msgid "The latitudes must be between {0} and {1}"
-msgstr ""
+msgstr "Platumos turi būti tarp {0} ir {1}"
 
 msgid "The longitudes must be between {0} and {1}"
-msgstr ""
+msgstr "Ilgumos turi būti tarp {0} ir {1}"
 
 msgid "The minima must be less than the maxima"
-msgstr ""
+msgstr "Minima turi būti mažesnė nei maksima"
 
 msgid "Remote Control has been asked to load the following data:"
 msgstr ""
 
 msgid "Loading data"
-msgstr ""
+msgstr "Įkeliami duomenys"
 
 msgid ""
 "Remote Control has been asked to load objects (specified by their id) from "
@@ -13820,10 +14080,10 @@ msgid "Remote Control has been asked to open a local file."
 msgstr ""
 
 msgid "Do you want to allow this?"
-msgstr ""
+msgstr "Ar norite tai leisti?"
 
 msgid "Confirm Remote Control action"
-msgstr ""
+msgstr "Patvirtinti nuotolinio valdymo veiksmą"
 
 msgid ""
 "Remote Control has been asked to report its protocol version. This enables "
@@ -13845,7 +14105,7 @@ msgid "Link to a GPX file on your local disk."
 msgstr "Nuoroda į GPX failą vietiniame diske."
 
 msgid "include"
-msgstr ""
+msgstr "įtraukti"
 
 msgid "Include GPX data in the .joz session file."
 msgstr "Įtraukti GPX duomenis į .joz seanso failą."
@@ -13878,7 +14138,7 @@ msgid "Layer contains unsaved data - save to file."
 msgstr ""
 
 msgid "Layer does not contain unsaved data."
-msgstr ""
+msgstr "Sluoksnis neturi neišsaugotų duomenų."
 
 msgid "Link to a OSM data file on your local disk."
 msgstr "Nuoroda į GPX failą vietiniame diske."
@@ -13901,7 +14161,7 @@ msgid "Unable to locate file  ''{0}''."
 msgstr "Nepavyko rasti failo „{0}“."
 
 msgid "Unsupported scheme ''{0}'' in URI ''{1}''."
-msgstr ""
+msgstr "Nepalaikoma schema ''{0}'' elemente URI ''{1}''."
 
 msgid "Unexpected root element ''{0}'' in session file"
 msgstr "Netikėtas pagrindinis elementas „{0}“ seanso faile"
@@ -13942,16 +14202,16 @@ msgid "Error loading layer"
 msgstr "Klaida įkeliant sluoksnį"
 
 msgid "<html>Could not load layer {0} ''{1}''.<br>Error is:<br>{2}</html>"
-msgstr ""
+msgstr "<html>Nepavyko įkelti sluoksnio {0} „{1}“.<br>Klaida:<br>{2}</html>"
 
 msgid "Skip layer and continue"
 msgstr "Praleisti sluoksnį ir tęsti"
 
 msgid "expected .jos file inside .joz archive"
-msgstr ""
+msgstr "tikėtasi .jos failo, .joz archyvo viduje"
 
 msgid "Skip download"
-msgstr ""
+msgstr "Praleisti atsisiuntimą"
 
 msgid "Download Plugin"
 msgstr "Atsiųsti papildinį"
@@ -13989,7 +14249,7 @@ msgid "An error occurred in plugin {0}"
 msgstr "Papildinyje „{0}“ įvyko klaida"
 
 msgid "integrated into main program"
-msgstr ""
+msgstr "integruota į pagrindinę programą"
 
 msgid "replaced by new {0} plugin"
 msgstr "pakeista nauju {0} papildiniu"
@@ -14079,6 +14339,24 @@ msgstr[1] ""
 msgstr[2] ""
 "Papildiniui {0} reikalingi {1} nerastų papildinių. Trūkstami papildiniai:"
 
+msgid "Download and restart"
+msgstr "Atsisiųsti ir perkrauti"
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+"Spauskite trūkstamam papildiniui atsiųsti ir paleisti JOSM iš naujo"
+msgstr[1] ""
+"Spauskite trūkstamiems papildiniams atsiųsti ir paleisti JOSM iš naujo"
+msgstr[2] ""
+"Spauskite trūkstamiems papildiniams atsiųsti ir paleisti JOSM iš naujo"
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] "Spauskite, norėdami tęsti be šio papildinio"
+msgstr[1] "Spauskite, norėdami tęsti be šių papildinių"
+msgstr[2] "Spauskite, norėdami tęsti be šių papildinių"
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -14096,7 +14374,7 @@ msgid ""
 "<html>Could not load plugin {0} because the plugin<br>main class ''{1}'' was "
 "not found.<br>Delete from preferences?</html>"
 msgstr ""
-"<html>Nepavyko įkelti papildinio {0}m nes papildinio<br>pagrindinė klasė "
+"<html>Nepavyko įkelti papildinio {0}, nes papildinio<br>pagrindinė klasė "
 "„{1}“ nerasta.<br>Pašalinti iš nuostatų?</html>"
 
 msgid "Loading plugins ..."
@@ -14124,7 +14402,7 @@ msgid "Determine plugins to load..."
 msgstr "Nustatyti papildinius įkėlimui..."
 
 msgid "Removing deprecated plugins..."
-msgstr "Šalinami nebenaudojami papildiniai..."
+msgstr "Šalinami pasenę papildiniai..."
 
 msgid "Removing unmaintained plugins..."
 msgstr "Šalinami neprižiūrimi papildiniai..."
@@ -14381,7 +14659,7 @@ msgid ""
 msgstr ""
 
 msgid "(The text has already been copied to your clipboard.)"
-msgstr ""
+msgstr "(Tekstas jau buvo nukopijuotas į jūsų iškarpinę.)"
 
 msgid "You have encountered a bug in JOSM"
 msgstr "Susidūrėte su JOSM klaida"
@@ -14531,7 +14809,7 @@ msgid ""
 msgstr ""
 
 msgid "<html>Authorisation at the OSM server failed.<br></html>"
-msgstr ""
+msgstr "<html>Autorizacija OSM serveryje nepavyko.<br></html>"
 
 msgid ""
 "<html>Authorisation at the OSM server with the OAuth token ''{0}'' "
@@ -14579,7 +14857,7 @@ msgid ""
 msgstr ""
 
 msgid "<html>The server reported that it has detected a conflict."
-msgstr ""
+msgstr "<html>Serveris pranešė,  kad užfiksavo konfliktą."
 
 msgid ""
 "<html>Failed to upload to changeset <strong>{0}</strong><br>because it has "
@@ -14603,6 +14881,8 @@ msgid ""
 "<html>Failed to upload data to or download data from<br>''{0}''<br>due to a "
 "problem with transferring data.<br>Details (untranslated): {1}</html>"
 msgstr ""
+"<html>Nepavyko išsiųsti ar atsiųsti duomenų iš<br>„{0}“<br>dėl problemos "
+"siunčiant duomenis.<br>Išsamiau (neišversta): {1}</html>"
 
 msgid ""
 "<html>Failed to download data. Its format is either unsupported, ill-formed, "
@@ -14610,7 +14890,7 @@ msgid ""
 msgstr ""
 
 msgid "<html>Failed to download data.<br><br>Details: {0}</html>"
-msgstr ""
+msgstr "<html>Nepavyko atsisiųsti duomenų.<br><br>Detalės: {0}</html>"
 
 msgid ""
 "<html>The OSM server<br>''{0}''<br>reported an internal server "
@@ -14618,7 +14898,7 @@ msgid ""
 msgstr ""
 
 msgid "The OSM server ''{0}'' reported a bad request.<br>"
-msgstr ""
+msgstr "The OSM serveris ''{0}'' pranešė apie blogą užklausą.<br>"
 
 msgid ""
 "The area you tried to download is too big or your request was too "
@@ -14630,7 +14910,7 @@ msgstr ""
 "pateiktą OSM bendruomenės."
 
 msgid "<br>Error message(untranslated): {0}"
-msgstr ""
+msgstr "<br>Klaidos pranešimas(neišverstas): {0}"
 
 msgid ""
 "The OSM server ''{0}'' does not know about an object<br>you tried to read, "
@@ -14659,9 +14939,11 @@ msgid ""
 "Fatal: failed to locate image ''{0}''. This is a serious configuration "
 "problem. JOSM will stop working."
 msgstr ""
+"Fatalu: nepavyko lokalizuoti paveikslėlio ''{0}''. Tai yra rimta "
+"konfigūracijos problema. JOSM nustos veikti."
 
 msgid "Failed to locate image ''{0}''"
-msgstr ""
+msgstr "Nepavyko lokalizuoti piešinio ''{0}''"
 
 msgid "Failed to handle zip file ''{0}''. Exception was: {1}"
 msgstr ""
@@ -14677,12 +14959,14 @@ msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
 msgstr ""
+"Nepavyko atidaryti URL. Šiuo metu nėra jokios platformos įvesties. "
+"Pirmiausia įveskite platformą"
 
 msgid "Opening URL: {0}"
-msgstr ""
+msgstr "Atidaromas URL: {0}"
 
 msgid "zoom"
-msgstr ""
+msgstr "artinti"
 
 msgid "latitude"
 msgstr "platuma"
@@ -14691,10 +14975,10 @@ msgid "longitude"
 msgstr "ilguma"
 
 msgid "URL does not contain {0}/{1}/{2}"
-msgstr ""
+msgstr "URL neturi {0}/{1}/{2}"
 
 msgid "URL does not contain valid {0}"
-msgstr ""
+msgstr "URL neturi galimo {0}"
 
 msgid "reserved"
 msgstr "rezervuota"
@@ -14706,20 +14990,23 @@ msgid "Update Java"
 msgstr "Atnaujinkite Java"
 
 msgid "You are running version {0} of Java."
-msgstr ""
+msgstr "Jūsų veikianti Java versija {0}."
 
 msgid "April 2015"
-msgstr ""
+msgstr "2015 m. balandis"
 
 msgid ""
 "This version is no longer supported by {0} since {1} and is not recommended "
 "for use."
 msgstr ""
+"Ši versija jau nebepalaikoma {0} nuo {1} ir nėra rekomenduojama naudoti."
 
 msgid ""
 "JOSM will soon stop working with this version; we highly recommend you to "
 "update to Java {0}."
 msgstr ""
+"JOSM greitai nustos veikti su šia Java versija; mes labai rekomenduojame "
+"atnaujinti į Java {0}."
 
 msgid "Would you like to update now ?"
 msgstr "Ar norite atnaujinti dabar?"
@@ -14765,17 +15052,18 @@ msgstr ""
 
 msgid "There was {0} tag found in the buffer, it is suspicious!"
 msgid_plural "There were {0} tags found in the buffer, it is suspicious!"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Rasta {0} žyma buferyje, įtartina!"
+msgstr[1] "Rastos {0} žymos buferyje, įtartina!"
+msgstr[2] "Rasta {0} žymų buferyje, įtartina!"
 
 msgid "Key is too long (max {0} characters):"
-msgstr ""
+msgstr "Raktas per ilgas (maks. {0} simboliai):"
 
 msgid "Suspicious characters in key:"
 msgstr "Įtartini simboliai rakte:"
 
 msgid "Value is too long (max {0} characters):"
-msgstr ""
+msgstr "Vertė per ilga (maks. {0} simboliai):"
 
 msgid "Do you want to paste these tags?"
 msgstr "Ar norite įdėti šias žymas?"
@@ -14790,6 +15078,8 @@ msgid ""
 "<html><p> Sorry, it is impossible to paste tags from buffer. It does not "
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
+"<html><p> Atsiprašome, neįmanoma įkelti žymų iš buferio. Jame nėra jokių "
+"JOSM objektų ar tinkamo teksto. </p></html>"
 
 msgid "ms"
 msgstr "ms"
@@ -14813,27 +15103,35 @@ msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
 msgstr ""
+"Nuostata su raktu „{0}“ neapima „{1}“. Neįmanoma atkurti langų geometrijos "
+"iš nuostatų."
 
 msgid ""
 "Preference with key ''{0}'' does not provide an int value for ''{1}''. Got "
 "{2}. Cannot restore window geometry from preferences."
 msgstr ""
+"Nuostata su raktu „{0}“ nepateikia „{1}“ sveikojo skaičiaus reikšmės. Gauta "
+"{2}. Neįmanoma atkurti langų geometrijos iš nuostatų."
 
 msgid ""
 "Failed to parse field ''{1}'' in preference with key ''{0}''. Exception was: "
 "{2}. Cannot restore window geometry from preferences."
 msgstr ""
+"Nepavyko išnagrinėti lauko „{1}“ nuostatoje su raktu „{0}“. Išimtinė "
+"situacija: {2}. Neįmanoma atkurti langų geometrijos iš nuostatų."
 
 msgid ""
 "Preference with key ''{0}'' does not exist. Cannot restore window geometry "
 "from preferences."
 msgstr ""
+"Nuostata su raktu „{0}“ neegzistuoja. Neįmanoma atkurti langų geometrijos iš "
+"nuostatų."
 
 msgid "Ignoring malformed geometry: {0}"
-msgstr ""
+msgstr "Ignoruojama blogai suformuota geometrija: {0}"
 
 msgid "Failed to load XML schema."
-msgstr ""
+msgstr "Nepavyko įkelti XML schemos."
 
 msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
@@ -14876,7 +15174,7 @@ msgid ""
 msgstr ""
 
 msgid "Database offline for maintenance"
-msgstr ""
+msgstr "Duomenų bazė nepasiekiama dėl priežiūros darbų"
 
 msgid "You have downloaded too much data. Please try again later."
 msgstr "Atsisiuntėte per daug duomenų. Bandykite vėliau."
@@ -14919,11 +15217,11 @@ msgstr "gyvenamasis"
 
 msgctxt "natural"
 msgid "scrub"
-msgstr "krūmynai"
+msgstr "krūmai"
 
 msgctxt "Relation type"
 msgid "associatedStreet"
-msgstr ""
+msgstr "asocijuotaGatvė"
 
 msgctxt "Relation type"
 msgid "boundary"
@@ -14935,11 +15233,11 @@ msgstr "tiltas"
 
 msgctxt "Relation type"
 msgid "destination_sign"
-msgstr ""
+msgstr "tikslo_ženklas"
 
 msgctxt "Relation type"
 msgid "enforcement"
-msgstr ""
+msgstr "vykdymas"
 
 msgctxt "Relation type"
 msgid "multipolygon"
@@ -14963,7 +15261,7 @@ msgstr "maršrutas"
 
 msgctxt "Relation type"
 msgid "route_master"
-msgstr ""
+msgstr "maršruto_meistras"
 
 msgctxt "Relation type"
 msgid "site"
@@ -15011,11 +15309,11 @@ msgstr "sala"
 
 msgctxt "Place type"
 msgid "county"
-msgstr "šalis"
+msgstr "apygarda"
 
 msgctxt "Place type"
 msgid "hamlet"
-msgstr "gyvenvietė"
+msgstr "viensėdis"
 
 msgctxt "Place type"
 msgid "suburb"
@@ -15028,10 +15326,10 @@ msgid "Attributes"
 msgstr "Atributai"
 
 msgid "Abort file chooser dialog"
-msgstr ""
+msgstr "Atmesti failo pasirinkimo dialogą"
 
 msgid "Abort file chooser dialog."
-msgstr ""
+msgstr "Atmesti failo pasirinkimo dialogą."
 
 msgid "Create New Folder"
 msgstr "Sukurti naują aplanką"
@@ -15043,7 +15341,7 @@ msgid "Enter file name:"
 msgstr "Įveskite failo pavadinimą:"
 
 msgid "Enter path or folder name:"
-msgstr ""
+msgstr "Įvesti kelią arba aplanko vardą:"
 
 msgid "Error "
 msgstr "Klaida "
@@ -15058,16 +15356,16 @@ msgid "File Name:"
 msgstr "Failo pavadinimas:"
 
 msgid "FileChooser help."
-msgstr ""
+msgstr "FailoPasirinkimo pagalba."
 
 msgid "Files"
 msgstr "Failai"
 
 msgid "Files of type:"
-msgstr ""
+msgstr "Failų tipai:"
 
 msgid "Files of Type:"
-msgstr ""
+msgstr "Failų tipai:"
 
 msgid "Filter:"
 msgstr "Filtras:"
@@ -15079,10 +15377,10 @@ msgid "Home"
 msgstr "Pradžia"
 
 msgid "Look in:"
-msgstr ""
+msgstr "Kur žiūrėti:"
 
 msgid "Look In:"
-msgstr ""
+msgstr "Kur žiūrėti:"
 
 msgid "Modified"
 msgstr "Pakeistas"
@@ -15121,13 +15419,16 @@ msgid "Size"
 msgstr "Dydis"
 
 msgid "Up One Level"
-msgstr ""
+msgstr "Aukščiau vienu lygiu"
 
 msgid "Update"
 msgstr "Atnaujinti"
 
 msgid "Update directory listing."
-msgstr ""
+msgstr "Atnaujinti aplanko sąrašyną."
+
+msgid "View"
+msgstr "Rodyti"
 
 msgid "Blue:"
 msgstr "Mėlyna:"
@@ -15151,58 +15452,55 @@ msgid "Saturation:"
 msgstr "Grynis:"
 
 msgid "Landsat"
-msgstr ""
+msgstr "Landsat"
 
 msgid "Bing aerial imagery"
-msgstr ""
+msgstr "Bing oro nuotraukos"
 
 msgid "HDM (Humanitarian OpenStreetMap Team)"
-msgstr ""
+msgstr "HDM (Humanitarinė OpenStreetMap komanda)"
 
 msgid "Mapbox Satellite"
-msgstr ""
+msgstr "Mapbox palydovinis"
 
 msgid "MapQuest Open Aerial"
-msgstr ""
+msgstr "MapQuest atviros aeronuotraukos"
 
 msgid "OpenStreetMap GPS Traces"
-msgstr ""
+msgstr "OpenStreetMap GPS trasos"
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
 msgstr ""
 
 msgid "OpenStreetMap (Mapnik Black & White)"
-msgstr ""
+msgstr "OpenStreetMap (Mapnik nespalvinis)"
 
 msgid "OpenStreetMap (Mapnik, no labels)"
-msgstr ""
-
-msgid "skobbler heatmap"
-msgstr ""
+msgstr "OpenStreetMap (Mapnik, be žymių)"
 
 msgid "OpenCycleMap"
-msgstr ""
+msgstr "OpenCycleMap (pritaikyta dviračiams)"
 
 msgid "MapQuest OSM"
-msgstr ""
+msgstr "MapQuest OSM"
 
 msgid "Public Transport (ÖPNV)"
-msgstr ""
+msgstr "Viešasis transportas (ÖPNV)"
 
 msgid "OpenStreetMap (German Style)"
-msgstr ""
+msgstr "OpenStreetMap (Vokiško stiliaus)"
 
 msgid "Cambodia, Laos, Thailand, Vietnam bilingual"
-msgstr ""
+msgstr "Kambodžos, Laoso, Tailando, Vietnamo daugiakalbinė"
 
 msgid "osmfr"
-msgstr ""
+msgstr "osmfr"
 
 msgid "OpenPT Map (overlay)"
-msgstr ""
+msgstr "OpenPT žemėlapis (padengtis)"
 
 msgid "Strava cycling heatmap"
 msgstr ""
@@ -15211,28 +15509,28 @@ msgid "Strava running heatmap"
 msgstr ""
 
 msgid "Locator Overlay"
-msgstr ""
+msgstr "Locator padengtis"
 
 msgid "QA No Address"
 msgstr ""
 
 msgid "Waymarked Trails: Hiking"
-msgstr ""
+msgstr "Pažymėtos trasos:  žygiams"
 
 msgid "Waymarked Trails: Cycling"
-msgstr ""
+msgstr "Pažymėtos trasos:  dviračiams"
 
 msgid "Waymarked Trails: MTB"
-msgstr ""
+msgstr "Pažymėtos trasos:  kalnų dviračiams"
 
 msgid "Waymarked Trails: Skating"
-msgstr ""
+msgstr "Pažymėtos trasos: čiuožinėjimams"
 
 msgid "Waymarked Trails: Horse Riding"
-msgstr ""
+msgstr "Pažymėtos trasos: jodinėjimams"
 
 msgid "Waymarked Trails: Winter Sports"
-msgstr ""
+msgstr "Pažymėtos trasos: žiemos sportui"
 
 msgid "OSM Inspector: Geometry"
 msgstr "OSM tikrintuvė: geometrija"
@@ -15259,255 +15557,276 @@ msgid "OSM Inspector: Boundaries (EU)"
 msgstr "OSM tikrintuvė: ribos (ES)"
 
 msgid "AGRI black-and-white 2.5m"
-msgstr ""
+msgstr "AGRI juodai balta 2.5m"
 
 msgid "Geoimage.at MaxRes"
-msgstr ""
+msgstr "Geoimage.at MaxRes"
 
 msgid "basemap.at"
-msgstr ""
+msgstr "basemap.at"
 
 msgid "basemap.at Orthofoto"
-msgstr ""
+msgstr "basemap.at Orthofoto"
 
 msgid "Graz: Basiskarte (base map)"
-msgstr ""
+msgstr "Gracas: Basiskarte (bazinis žemėlapis)"
 
 msgid "Tiris: DGM (Terrain model)"
-msgstr ""
+msgstr "Tiris: DGM (Reljefo modelis)"
 
 msgid "Tiris: DOM (Surface model)"
-msgstr ""
+msgstr "Tiris: DOM (Paviršiaus modelis)"
 
 msgid "Vienna: Mehrzweckkarte (general purpose)"
-msgstr ""
+msgstr "Viena: Mehrzweckkarte (pagrindinės paskirties)"
 
 msgid "Vienna: Beschriftungen (annotations)"
-msgstr ""
+msgstr "Viena: Beschriftungen (anotacijos)"
 
 msgid "Vienna: Orthofoto (aerial image)"
-msgstr ""
+msgstr "Viena: Orthofoto (oro nuotraukos)"
 
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
+msgstr "VoGIS: Echtfarbenbild 2012 (12cm)"
+
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
 msgstr ""
 
 msgid "VoGIS: Flächenwidmungsplan"
-msgstr ""
+msgstr "VoGIS: Flächenwidmungsplan"
 
 msgid "VoGIS: DGM (Terrain model)"
-msgstr ""
+msgstr "VoGIS: DGM (reljefo modelis)"
 
 msgid "VoGIS: DOM (Surface model)"
-msgstr ""
+msgstr "VoGIS: DOM (paviršiaus modelis)"
 
 msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
-msgstr ""
+msgstr "AGIV(laanderen) oro nuotraukos (apima ir Briuselio regioną) (2013)"
+
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr "SPW(allonie) PICC numerinės nuotraukos"
 
 msgid "SPW(allonie) 2012 aerial imagery"
-msgstr ""
+msgstr "SPW(allonie) 2012 oro nuotraukos"
 
 msgid "SPW(allonie) 2009 aerial imagery"
+msgstr "SPW(allonie) 2009 oro nuotraukos"
+
+msgid "cadastre: for names and house numbers only, bad geometry"
 msgstr ""
 
 msgid "IBGE Mapa de Setores Urbanos"
-msgstr ""
+msgstr "IBGE Mapa de Setores Urbanos"
 
 msgid "IBGE Mapa de Setores Rurais"
-msgstr ""
+msgstr "IBGE Mapa de Setores Rurais"
 
 msgid "Geobase Hydrography"
-msgstr ""
+msgstr "Geobase hidrografija"
 
 msgid "Geobase Roads"
-msgstr ""
+msgstr "Geobase keliai"
 
 msgid "Canvec"
-msgstr ""
+msgstr "Canvec"
 
 msgid "British Columbia Mosaic"
-msgstr ""
+msgstr "British Columbia Mosaic (Britų Kolumbija)"
 
 msgid "Kelowna 2012"
-msgstr ""
+msgstr "Kelowna 2012"
 
 msgid "Kelowna Roads overlay"
-msgstr ""
+msgstr "Kelowna kelių padengtis"
 
 msgid "Czech CUZK:KM"
-msgstr ""
+msgstr "Čekų CUZK:KM"
 
 msgid "Czech RUIAN budovy"
-msgstr ""
+msgstr "Čekų RUIAN budovy"
 
 msgid "Czech RUIAN parcely"
-msgstr ""
+msgstr "Čekų RUIAN parcely"
 
 msgid "Czech pLPIS"
+msgstr "Čekų pLPIS"
+
+msgid "Geodatastyrelsen (Denmark)"
+msgstr "Geodatastyrelsen (Danija)"
+
+msgid "Geodatastyrelsen DTK Kort25"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen Skyggekort 1.6m"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
-msgstr ""
+msgstr "Stevns (Danija)"
 
 msgid "Vejmidte (Denmark)"
-msgstr ""
+msgstr "Vejmidte (Danija)"
 
 msgid "Estonia Basemap (Maaamet)"
-msgstr ""
+msgstr "Estijos bazinis žemėlapis (Maaamet)"
 
 msgid "Estonia Ortho (Maaamet)"
-msgstr ""
+msgstr "Estijos ortofoto (Maaamet)"
 
 msgid "Estonia Hillshade (Maaamet)"
-msgstr ""
+msgstr "Estijos reljefo šešėliai (Maaamet)"
 
 msgid "Estonia Cadastre (Maaamet)"
-msgstr ""
+msgstr "Estijos kadastras (Maaamet)"
 
 msgid "Estonia Forestry (Maaamet)"
-msgstr ""
+msgstr "Estijos miškai (Maaamet)"
 
 msgid "BANO"
+msgstr "BANO"
+
+msgid "BD Carthage"
 msgstr ""
 
 msgid "Bordeaux - 2012"
-msgstr ""
+msgstr "Bordo, Prancūzija - 2012"
 
 msgid "Cadastre"
-msgstr ""
+msgstr "Cadastre"
 
 msgid "CRAIG - Auvergne 2013 - 25 cm"
-msgstr ""
+msgstr "CRAIG - Auvergne 2013 - 25 cm"
 
 msgid "CRIGE PACA Alpes-Maritimes 2009 - 40 cm"
-msgstr ""
+msgstr "CRIGE PACA Alpes-Maritimes 2009 - 40 cm"
 
 msgid "GrandNancy Orthophotographie 2012"
-msgstr ""
+msgstr "GrandNancy Orthophotographie 2012"
 
 msgid "Géobretagne - Brest 2010 - 10 cm"
-msgstr ""
+msgstr "Géobretagne - Brestas 2010 - 10 cm"
 
 msgid "Géobretagne - Morbihan 2010"
-msgstr ""
+msgstr "Géobretagne - Morbihan 2010"
 
 msgid "Géolittoral - Orthophotos 2000"
-msgstr ""
+msgstr "Géolittoral - Orthophotos 2000"
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
-msgstr ""
+msgstr "Géolittoral - Sentiers"
 
 msgid "Grand Lyon - Orthophotographie 2012 - 10cm"
-msgstr ""
+msgstr "Grand Lyon - Orthophotographie 2012 - 10cm (Lionas, Prancūzija)"
 
 msgid "Loire-Atlantique - Orthophotos 2012 - 20 cm"
-msgstr ""
+msgstr "Loire-Atlantique - Orthophotos 2012 - 20 cm"
 
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
+msgstr "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
+
+msgid "Route 500™©®"
 msgstr ""
 
 msgid "Toulouse - Orthophotoplan 2013"
-msgstr ""
+msgstr "Toulouse - Orthophotoplan 2013 (Tulūza, Prancūzija)"
 
 msgid "Toulouse - Orthophotoplan 2011"
-msgstr ""
+msgstr "Toulouse - Orthophotoplan 2011 (Tulūza, Prancūzija)"
 
 msgid "Toulouse - Orthophotoplan 2007"
-msgstr ""
+msgstr "Toulouse - Orthophotoplan 2007 (Tulūza, Prancūzija)"
 
 msgid "Tours - Orthophotos 2013"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
+msgstr "Tours - Orthophotos 2013"
 
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
 msgstr ""
+"Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
+"- 1 m"
 
 msgid "Hike & Bike"
-msgstr ""
+msgstr "Žygiams ir dviračiams"
 
 msgid "OpenStreetMap (Sorbian Language)"
-msgstr ""
+msgstr "OpenStreetMap (Sorbų kalba)"
 
 msgid "Hamburg (40 cm)"
-msgstr ""
+msgstr "Hamburgas (40 cm)"
 
 msgid "Hamburg (20 cm)"
-msgstr ""
+msgstr "Hamburgas (20 cm)"
 
 msgid "Hamburg (DK5)"
+msgstr "Hamburgas (DK5)"
+
+msgid "Bavaria (80 cm)"
 msgstr ""
 
 msgid "Bavaria (2 m)"
-msgstr ""
+msgstr "Bavarija (2 m)"
 
 msgid "Stuttgart (Luftbild)"
-msgstr ""
+msgstr "Štutgartas (Luftbild)"
 
 msgid "Erlangen Luftbild (2013 6,25 cm)"
-msgstr ""
+msgstr "Erlangen Luftbild (2013 6,25 cm)"
 
 msgid "Erlangen 2011 Luftbild (5,0 cm)"
-msgstr ""
+msgstr "Erlangen 2011 Luftbild (5,0 cm)"
 
 msgid "Old map of Zwenkau - TK25 Messtischblatt (4739; 1906; PROJ.4-rect)"
 msgstr ""
+"Senasis Zwenkau žemėlapis - TK25 Messtischblatt (4739; 1906; PROJ.4-rect)"
 
 msgid "Old map of Pegau - TK25 Messtischblatt (4839; 1909; PROJ.4-rect)"
 msgstr ""
+"Senasis Pegau žemėlapis - TK25 Messtischblatt (4839; 1909; PROJ.4-rect)"
 
 msgid "Physical DE - Physische Karte (Naturräume)"
-msgstr ""
+msgstr "Vokietinis fizinis žemėlapis - Physische Karte (Naturräume)"
 
 msgid "Physical DE:Harz - Physische Karte (Naturräume)"
-msgstr ""
+msgstr "Vokietijos fizinis žemėlapis: Harcas - Physische Karte (Naturräume)"
 
 msgid ""
 "Physical DE:Harz - Overlay für Bing (z.B. Deckkraft zw. 20 und 50 Prozent "
 "nutzen)"
 msgstr ""
+"Vokietijos fizinis žemėlapis: Harcas - Overlay für Bing (z.B. Deckkraft zw. "
+"20 und 50 Prozent nutzen)"
 
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
-msgstr ""
+msgstr "Maps4BW (LGL-BW, www.lgl-bw.de)"
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
-msgstr ""
+msgid "NRW-Atlas: ALKIS"
+msgstr "NRW-Atlas: ALKIS"
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
-msgstr ""
+msgstr "NRW-Atlas: Digitale GrundKarte 1:5000"
 
 msgid "NRW-Atlas: Luftbilder"
-msgstr ""
+msgstr "NRW-Atlas: Luftbilder"
 
 msgid "NRW-Atlas: Topographische Karte 1:10000"
-msgstr ""
+msgstr "NRW-Atlas: Topographische Karte 1:10000"
 
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
-msgstr ""
+msgstr "Rūro metropolis: Luftbilder (10 cm)"
 
 msgid "Drone Imagery (Haiti)"
-msgstr ""
+msgstr "Dronų nuotraukos (Haitis)"
 
 msgid "Drone Imagery 2014 (Haiti)"
-msgstr ""
+msgstr "Dronų nuotraukos 2014 (Haitis)"
 
 msgid "Ireland British War Office 1:25k GSGS 3906"
 msgstr ""
@@ -15518,611 +15837,647 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
-msgid "OSMIE Townlands"
-msgstr ""
-
-msgid "OSMIE EDs"
-msgstr ""
-
-msgid "OSMIE Civil Parishes"
-msgstr ""
-
-msgid "OSMIE Baronies"
-msgstr ""
-
-msgid "OSMIE Political"
-msgstr ""
-
-msgid "Ireland EEA GMES Urban Atlas"
-msgstr ""
-
-msgid "Ireland EEA CORINE 2006"
-msgstr ""
-
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
 msgstr ""
 
 msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Clare Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Dublin Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Fermanagh Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Galway Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Kildare Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Leitrim Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Longford Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Offaly Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Sligo Civil Parishes and Baronies"
-msgstr ""
+msgid "OSMIE Townlands"
+msgstr "OSMIE Townlands"
 
-msgid "Tyrone Civil Parishes and Baronies"
-msgstr ""
+msgid "OSMIE EDs"
+msgstr "OSMIE EDs"
 
-msgid "Westmeath Civil Parishes and Baronies"
-msgstr ""
+msgid "OSMIE Civil Parishes"
+msgstr "OSMIE parapijos"
 
-msgid "Wexford Civil Parishes and Baronies"
-msgstr ""
+msgid "OSMIE Baronies"
+msgstr "OSMIE baronijos"
 
-msgid "Wicklow Civil Parishes and Baronies"
-msgstr ""
+msgid "OSMIE Political"
+msgstr "OSMIE politinis"
 
 msgid "Lodi - Italy"
-msgstr ""
+msgstr "Lodis - Italija"
 
 msgid "Lombardia - Italy (CTR)"
-msgstr ""
+msgstr "Lombardija - Italija (CTR)"
 
 msgid "Sicily - Italy"
-msgstr ""
+msgstr "Sicilija - Italija"
 
 msgid "PCN 2006 - Italy"
-msgstr ""
+msgstr "PCN 2006 - Italija"
 
 msgid "PCN 2008 - IT Lazio+Umbria"
-msgstr ""
+msgstr "PCN 2008 - IT Lacijus+Umbrija"
 
 msgid "PCN 2012 - Italy"
-msgstr ""
+msgstr "PCN 2012 - Italija"
 
 msgid "South Tyrol Orthofoto 2011"
-msgstr ""
+msgstr "Pietų Tirolio ortoforo 2011"
 
 msgid "South Tyrol Topomap"
-msgstr ""
+msgstr "Pietų Tirolio topožemėlapis"
 
 msgid "USSR - Latvia"
 msgstr ""
 
 msgid "50cm ortho - Latvia"
-msgstr ""
+msgstr "50cm ortho - Latvija"
 
 msgid "20cm ortho - Latvia - Coastline"
-msgstr ""
+msgstr "20cm ortho - Latvija - pakrantė"
+
+msgid "1.cikla ortofotokarte - Latvia"
+msgstr "1.cikla ortofotokarte - Latvija"
 
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Lietuva)"
 
 msgid "Luxembourg Inspire Ortho 2010"
-msgstr ""
+msgstr "Liuksemburgo Inspire Ortho 2010"
 
 msgid "Luxembourg Inspire Ortho 2013"
-msgstr ""
+msgstr "Liuksemburgo inspiruota - Ortho 2013"
 
 msgid "Luxembourg Inspire Railway"
-msgstr ""
+msgstr "Liuksemburgo Inspiruota - geležinkeliai"
 
 msgid "Luxembourg Inspire Roads"
+msgstr "Liuksemburgo inspiruota - keliai"
+
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
 msgid "Niger Delta Oct 2012 Landsat"
-msgstr ""
+msgstr "Nigerio delta - 2012 m. spalis - Landsat"
 
 msgid "Gaza Strip - Pléiades - 2014/07/06"
-msgstr ""
+msgstr "Gazos ruožas - Pléiades - 2014/07/06"
 
 msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
-msgstr ""
+msgstr "Gazos ruožas - Pléiades - 2014/07/06 (NIR)"
 
 msgid "Pangasinán/Bulacan (Phillipines HiRes)"
-msgstr ""
+msgstr "Pangasinán/Bulacan (Filipinų HiRes)"
 
 msgid "Geoportal 2: Ortofotomapa (aerial image)"
-msgstr ""
+msgstr "Geoportal 2: Ortofotomapa (oro nuotrauka)"
+
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgstr "Geoportal 2: Ortofotomapa (oro nuotrauka) WMTS"
 
 msgid "Geoportal 2: PRNG (geo names)"
-msgstr ""
+msgstr "Geoportal 2: PRNG (geo pavadinimai)"
+
+msgid "Geoportal 2: ISOK hillshade"
+msgstr "Geoportal 2: ISOK reljefo šešėliai"
 
 msgid "Będzin: Ortofotomapa 2013 (aerial image)"
-msgstr ""
+msgstr "Bendzinas (Będzin), Lenkija: Ortofotomapa 2013 (oro nuotrauka)"
 
 msgid "Będzin: Budynki (buildings)"
-msgstr ""
+msgstr "Bendzinas (Będzin), Lenkija: Budynki (pastatai)"
 
 msgid "Bytom: Ortofotomapa 2012 (aerial image)"
-msgstr ""
+msgstr "Bytom: Ortofotomapa 2012 (aerial image)"
+
+msgid "Bytom: Fotoplan 2014 (aerial image)"
+msgstr "Bytomas (Bytom): Fotoplan 2014 (oro nuotrauka)"
 
 msgid "Bytom: Budynki (buildings)"
-msgstr ""
+msgstr "Bytomas (Bytom): Budynki (pastatai)"
 
 msgid "Chorzów: Budynki (buildings)"
-msgstr ""
+msgstr "Chožuvas (Chorzów): Budynki (pastatai)"
+
+msgid "Częstochowa: Budynki (buildings)"
+msgstr "Čenstakava (Częstochowa): Budynki (pastatai)"
 
 msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
-msgstr ""
+msgstr "Čenstakava (Częstochowa): Ortofotomapa 2011 (oro nuotrauka)"
+
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgstr "Čenstakava (Częstochowa): Ortofotomapa 2013 (oro nuotrauka)"
+
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgstr "Čenstakava (Częstochowa): Ortofotomapa 2014 (oro nuotrauka)"
 
 msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
-msgstr ""
+msgstr "Glivicė (Gliwice): Ortofotomapa 2013 (oro nuotrauka)"
 
 msgid "Gliwice: Budynki (buildings)"
-msgstr ""
+msgstr "Glivicė (Gliwice): Budynki (pastatai)"
 
 msgid "Katowice: Ortofotomapa (aerial image)"
-msgstr ""
+msgstr "Katovicai (Katowice): Ortofotomapa (oro nuotrauka)"
+
+msgid "Katowice: Budynki (buildings)"
+msgstr "Katovicai: Budynki (pastatai)"
+
+msgid "Łódź: Budynki (buildings)"
+msgstr "Lodzė (Łódź): Budynki (pastatai)"
 
 msgid "Łódź: Ortofotomapa (aerial image)"
-msgstr ""
+msgstr "Lodzė: Ortofotomapa (oro nuotrauka)"
+
+msgid "Powiat dębicki: Budynki (buildings)"
+msgstr "Denbickų pavietas: Budynki (pastatai)"
+
+msgid "Powiat lubaczowski: Budynki (buildings)"
+msgstr "Liubačiovskų pavietas: Budynki (pastatai)"
+
+msgid "Powiat łańcucki: Budynki (buildings)"
+msgstr "Lancuckų pavietas: Budynki (pastatai)"
+
+msgid "Powiat poznański: Budynki (buildings)"
+msgstr "Poznanės pavietas: Budynki (pastatai)"
+
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgstr "Poznanės pavietas: Ortofotomapa (oro nuotrauka)"
+
+msgid "Powiat rzeszowski: Budynki (buildings)"
+msgstr "Žešuvo pavietas: Budynki (pastatai)"
+
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgstr "Žešuvo pavietas: Ortofotomapa (Oro nuotrauka)"
+
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr "Stalovovolskio pavietas: Budynki (pastatai)"
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr "Pžemišlis (Peremislis): Budynki (pastatai)"
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgstr "Pžemišlis (Peremislis): Ortofotomapa (oro nuotrauka)"
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
-msgstr ""
+msgstr "Šlionsko Rūda: Ortofotomapa (oro nuotrauka)"
 
 msgid "Rzeszów: Ortofotomapa (aerial image)"
-msgstr ""
+msgstr "Žešuvas: Ortofotomapa (oro nuotrauka)"
 
 msgid "Rzeszów: Budynki (buildings)"
-msgstr ""
+msgstr "Žešuvas: Budynki (pastatai)"
 
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
-msgstr ""
+msgstr "Šlionsko Siemianovicai: Ortofotomapa (oro nuotrauka)"
+
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr "Šlionsko Siemianovicai: Budynki (pastatai)"
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr "Šventochlovicai: Ortofotomapa 2008 (oro nuotrauka)"
 
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
-msgstr ""
+msgstr "Šventochlovicai: Ortofotomapa 2009 (oro nuotrauka)"
+
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr "Šventochlovicai: Ortofotomapa 2012 (oro nuotrauka)"
 
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
-msgstr ""
+msgstr "Zabžė: Ortofotomapa 2011 (oro nuotrauka)"
 
 msgid "trail.pl: Szlaki (paths)"
-msgstr ""
+msgstr "trail.pl: Szlaki (takai)"
 
 msgid "ScanEx IRS"
-msgstr ""
+msgstr "ScanEx IRS"
 
 msgid "ScanEx SPOT"
-msgstr ""
+msgstr "ScanEx SPOT"
 
 msgid "Freemap.sk Car"
-msgstr ""
+msgstr "Freemap.sk automobiliams"
 
 msgid "Freemap.sk Hiking"
-msgstr ""
+msgstr "Freemap.sk žygiams"
 
 msgid "Freemap.sk Cyclo"
-msgstr ""
+msgstr "Freemap.sk dviračiams"
 
 msgid "Freemap.sk Ski"
-msgstr ""
+msgstr "Freemap.sk slidinėjimams"
 
 msgid "Katastrálna mapa Slovenska (KaPor, 2010-04)"
-msgstr ""
+msgstr "Katastrálna mapa Slovenska (KaPor, 2010-04)"
 
 msgid "Katastrálna mapa Slovenska (KaPor, 2011-05)"
-msgstr ""
+msgstr "Katastrálna mapa Slovenska (KaPor, 2011-05)"
 
 msgid "Slovakia EEA GMES Urban Atlas"
-msgstr ""
+msgstr "Slovakijos EEA GMES Urban Atlas"
 
 msgid "Slovakia EEA CORINE 2006"
-msgstr ""
+msgstr "Slovakijos EEA CORINE 2006"
 
 msgid "Slovakia Historic Maps"
-msgstr ""
+msgstr "Slovakijos istoriniai žemėlapiai"
 
 msgid "RABA-KGZ: Slovenia farmland use"
 msgstr "RABA-KGZ: Slovėnijos dirbamos žemės naudojimas"
 
 msgid "RABA-KGZ: Slovenia built-up areas"
-msgstr ""
+msgstr "RABA-KGZ: Slovėnijos užstatytos teritorijos"
 
 msgid "South Africa CD:NGI Aerial"
-msgstr ""
+msgstr "Pietų Afrika CD:NGI oro nuotraukos"
 
 msgid "Catastro Spain"
-msgstr ""
+msgstr "Catastro Ispanija"
 
 msgid "PNOA Spain"
-msgstr ""
+msgstr "PNOA Ispanija"
 
 msgid "SIGPAC Spain"
-msgstr ""
+msgstr "SIGPAC Ispanija"
 
 msgid "GRAFCAN - Canary Islands"
-msgstr ""
+msgstr "GRAFCAN - Kanarų salos"
 
 msgid "ITACyL - Castile and León"
-msgstr ""
+msgstr "ITACyL - Kastilija ir Leonas"
 
 msgid "IDEIB - Balearic Islands"
-msgstr ""
+msgstr "IDEIB - Balearų salos"
 
 msgid "GRAFCAN Express - Canary Islands"
-msgstr ""
+msgstr "GRAFCAN Express - Kanarų salos"
 
 msgid "Kanton Aargau 25cm (AGIS 2011)"
-msgstr ""
+msgstr "Argau kantonas 25cm (AGIS 2011)"
 
 msgid "Kanton Aargau 25cm (AGIS 2014)"
-msgstr ""
+msgstr "Argau kantonas 25cm (AGIS 2014)"
 
 msgid "Stadt Uster Orthophoto 2008 10cm"
-msgstr ""
+msgstr "Stadt Uster Orthophoto 2008 10cm"
 
 msgid "Stadtplan Zürich"
-msgstr ""
+msgstr "Ciuricho miesto planas"
 
 msgid "Stadt Zürich Übersichtsplan (Strassen, Gebäude, Hausnummer)"
-msgstr ""
+msgstr "Stadt Zürich Übersichtsplan (Strassen, Gebäude, Hausnummer)"
 
 msgid "Stadt Zürich Luftbild 2011"
-msgstr ""
+msgstr "Stadt Zürich Luftbild 2011"
 
 msgid "Orthofoto Kanton Solothurn RGB (SOGIS 2011/2012/2013)"
-msgstr ""
+msgstr "Orthofoto Kanton Solothurn RGB (SOGIS 2011/2012/2013)"
 
 msgid "Orthofoto Kanton Solothurn Infrarot (SOGIS 2011/2012/2013)"
-msgstr ""
+msgstr "Orthofoto Kanton Solothurn Infrarot (SOGIS 2011/2012/2013)"
 
 msgid "Canton de Génève 5cm (SITG 2011)"
-msgstr ""
+msgstr "Ženevos kantonas 5cm (SITG 2011)"
 
 msgid "Canton de Neuchâtel 50cm (SITN 2006)"
-msgstr ""
+msgstr "Nešatelio kantonas 50cm (SITN 2006)"
 
 msgid "Canton du Jura 50cm (RCJU 1998)"
-msgstr ""
+msgstr "Juros kantonas 50cm (RCJU 1998)"
 
 msgid "Canton de Fribourg 50cm (2005)"
-msgstr ""
+msgstr "Friburgo kantonas 50cm (2005)"
 
 msgid "Stadt Bern 10cm/25cm (2012)"
-msgstr ""
+msgstr "Berno miestas 10cm/25cm (2012)"
 
 msgid "HEIG-VD / Orthophoto Yverdon-les-Bains 25cm (2007)"
-msgstr ""
+msgstr "HEIG-VD / Orthophoto Yverdon-les-Bains 25cm (2007)"
 
 msgid "Ville de Nyon - Orthophoto 2010 HD 5cm/pi"
-msgstr ""
+msgstr "Nijono miestas - Orthophoto 2010 HD 5cm/pi"
 
 msgid "Cartoriviera - Orthophoto 2012"
-msgstr ""
+msgstr "Cartoriviera - Orthophoto 2012"
 
 msgid "SIGIP - Orthophoto 2012"
-msgstr ""
+msgstr "SIGIP - Orthophoto 2012"
 
 msgid "Lausanne - Orthophoto technique 2012"
-msgstr ""
+msgstr "Lozana - Orthophoto technique 2012"
 
 msgid "Bonvillars Orthophoto 2013"
-msgstr ""
+msgstr "Bonvillars Orthophoto 2013"
 
 msgid "Fiez Orthophoto 2013"
+msgstr "Fyzo Orthophoto 2013"
+
+msgid "Taiwan e-Map Open Data"
 msgstr ""
 
-msgid "MSR Maps Topo"
+msgid "Taiwan e-Map Open Data (with Contour Line)"
 msgstr ""
 
-msgid "MSR Maps Urban"
+msgid "Taiwan Village Boundaries"
 msgstr ""
 
-msgid "USGS Topographic Maps"
+msgid "Taiwan Land-Section Data"
 msgstr ""
 
-msgid "USGS Large Scale Imagery"
+msgid "NLSC Open Data WMTS"
 msgstr ""
 
+msgid "MSR Maps Topo"
+msgstr "MSR Maps Topo"
+
+msgid "MSR Maps Urban"
+msgstr "MSR Maps Urban"
+
+msgid "USGS Topographic Maps"
+msgstr "USGS Topographic Maps"
+
+msgid "USGS Large Scale Imagery"
+msgstr "USGS Large Scale Imagery"
+
 msgid "TIGER 2012 Roads Overlay"
-msgstr ""
+msgstr "TIGER 2012 kelių padengtis"
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
-msgstr ""
+msgstr "MassGIS L3 parceliai"
 
 msgid "NC Latest Orthoimagery"
-msgstr ""
+msgstr "NC Latest Orthoimagery"
 
 msgid "U.S. Forest Service roads"
-msgstr ""
+msgstr "JAV miškų aptarnaujamieji keliai"
 
 msgid "Ukraine - Orthophotomaps 2012"
-msgstr ""
+msgstr "Ukraina - Ortofotožemėlapiai 2012"
 
 msgid "7th Series (OS7)"
-msgstr ""
+msgstr "Septintos serijos (OS7)"
 
 msgid "OS New Popular Edition historic"
-msgstr ""
+msgstr "OS Naujas Populiarus Leidinys - istorinis"
 
 msgid "OS OpenData StreetView"
-msgstr ""
+msgstr "OS AtviriDuomenys GatvėsVaizdas"
 
 msgid "OS OpenData Locator"
-msgstr ""
+msgstr "OS AtviriDuomenys Lokatorius"
 
 msgid "Surrey Air Survey"
 msgstr ""
 
 msgid "NLS - OS 6-inch Scotland 1842-82"
-msgstr ""
+msgstr "NLS - OS 6 colių Škotija 1842-82"
 
 msgid "NLS - OS 1:25k 1st Series 1937-61"
-msgstr ""
+msgstr "NLS - OS 1:25k I serijos 1937-61"
 
 msgid "NLS - OS 1-inch 7th Series 1955-61"
-msgstr ""
+msgstr "NLS - OS 1 colio VII serijos 1955-61"
 
 msgid "OS 1:25k historic (OSM-Best)"
-msgstr ""
+msgstr "OS 1:25k istorinis (OSM-Best)"
 
 msgid "OS 1:25k historic (OSM-Limited)"
-msgstr ""
+msgstr "OS 1:25k istorinis (OSM-ribotas)"
 
 msgid "OS Scottish Popular historic"
-msgstr ""
+msgstr "OS Škotijos Popularius istorinis"
 
 msgid "NLS - Bartholomew Half Inch, 1897-1907"
-msgstr ""
+msgstr "NLS - Bartolomėjaus pusė coliaus, 1897-1907"
 
 msgid "OS Town Plans, Aberdeen 1866-1867 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Aberdynas 1866-1867 (NLS)"
 
 msgid "OS Town Plans, Airdrie 1858 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Airdrie 1858 (NLS)"
 
 msgid "OS Town Plans, Alexandria 1859 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Aleksandrija 1859 (NLS)"
 
 msgid "OS Town Plans, Alloa 1861-1862 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Alloa 1861-1862 (NLS)"
 
 msgid "OS Town Plans, Annan 1859 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Ananas 1859 (NLS)"
 
 msgid "OS Town Plans, Arbroath 1858 (NLS)"
-msgstr ""
+msgstr "OS mieto planai, Arbroath 1858 (NLS)"
 
 msgid "OS Town Plans, Ayr 1855 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Ayr 1855 (NLS)"
 
 msgid "OS Town Plans, Berwick-upon-Tweed 1852 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Bervikas prie Tvydo 1852 (NLS)"
 
 msgid "OS Town Plans, Brechin 1862 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Brečinas 1862 (NLS)"
 
 msgid "OS Town Plans, Burntisland 1894 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Burntislandas 1894 (NLS)"
 
 msgid "OS Town Plans, Campbelton 1865 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Kampbeltonas 1865 (NLS)"
 
 msgid "OS Town Plans, Coatbridge 1858 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Kotbridžas 1858 (NLS)"
 
 msgid "OS Town Plans, Cupar 1854 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Kuparas 1854 (NLS)"
 
 msgid "OS Town Plans, Cupar 1893-1894 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Kuparas 1893-1894 (NLS)"
 
 msgid "OS Town Plans, Dalkeith 1852 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Dalkeitas 1852 (NLS)"
 
 msgid "OS Town Plans, Dalkeith 1893 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Dalkeitas 1893 (NLS)"
 
 msgid "OS Town Plans, Dumbarton 1859 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Dumbartonas 1859 (NLS)"
 
 msgid "OS Town Plans, Dumfries 1850 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Dumfries 1850 (NLS)"
 
 msgid "OS Town Plans, Dumfries 1893 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Dumfries 1893 (NLS)"
 
 msgid "OS Town Plans, Dundee 1857-1858 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Dundis 1857-1858 (NLS)"
 
 msgid "OS Town Plans, Dundee 1870-1872 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Dundis 1870-1872 (NLS)"
 
 msgid "OS Town Plans, Dunfermline 1854 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Dunfermlainas 1854 (NLS)"
 
 msgid "OS Town Plans, Dunfermline 1894 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Dunfermlainas 1894 (NLS)"
 
 msgid "OS Town Plans, Edinburgh 1849-1851 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Edinburgas 1849-1851 (NLS)"
 
 msgid "OS Town Plans, Edinburgh 1876-1877 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Edinburgas 1876-1877 (NLS)"
 
 msgid "OS Town Plans, Edinburgh 1893-1894 (NLS)"
-msgstr ""
+msgstr "OS miesto planai,  Edinburgas 1893-1894 (NLS)"
 
 msgid "OS Town Plans, Elgin 1868 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Elginas 1868 (NLS)"
 
 msgid "OS Town Plans, Falkirk 1858-1859 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Falkirkas 1858-1859 (NLS)"
 
 msgid "OS Town Plans, Forfar 1860-1861 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Forfaras 1860-1861 (NLS)"
 
 msgid "OS Town Plans, Forres 1868 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Foresas 1868 (NLS)"
 
 msgid "OS Town Plans, Galashiels 1858 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Galashiels 1858 (NLS)"
 
 msgid "OS Town Plans, Girvan 1857 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Girvanas 1857 (NLS)"
 
 msgid "OS Town Plans, Glasgow 1857-1858 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Glazgas 1857-1858 (NLS)"
 
 msgid "OS Town Plans, Glasgow 1892-1894 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Glazgas 1892-1894 (NLS)"
 
 msgid "OS Town Plans, Greenock 1857 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Grynokas 1857 (NLS)"
 
 msgid "OS Town Plans, Haddington 1853 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Hadingtonas 1853 (NLS)"
 
 msgid "OS Town Plans, Haddington 1893 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Hadingtonas 1893 (NLS)"
 
 msgid "OS Town Plans, Hamilton 1858 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Hamiltonas 1858 (NLS)"
 
 msgid "OS Town Plans, Hawick 1857-1858 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Havikas 1857-1858 (NLS)"
 
 msgid "OS Town Plans, Inverness 1867-1868 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Invernesas 1867-1868 (NLS)"
 
 msgid "OS Town Plans, Irvine 1859 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Irvinas 1859 (NLS)"
 
 msgid "OS Town Plans, Jedburgh 1858 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Jedburgas 1858 (NLS)"
 
 msgid "OS Town Plans, Kelso 1857 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Kelso 1857 (NLS)"
 
 msgid "OS Town Plans, Kilmarnock 1857-1859 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Kilmarnokas 1857-1859 (NLS)"
 
 msgid "OS Town Plans, Kirkcaldy 1855 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Kirkkaldis 1855 (NLS)"
 
 msgid "OS Town Plans, Kirkcaldy 1894 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Kirkkaldis 1894 (NLS)"
 
 msgid "OS Town Plans, Kirkcudbright 1850 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Kirkkudbraitas 1850 (NLS)"
 
 msgid "OS Town Plans, Kirkcudbright 1893 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Kirkkudbraitas 1893 (NLS)"
 
 msgid "OS Town Plans, Kirkintilloch 1859 (NLS)"
-msgstr ""
+msgstr "OS miesto planai,, Kirkintillochas 1859 (NLS)"
 
 msgid "OS Town Plans, Kirriemuir 1861 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Kirriemuiras 1861 (NLS)"
 
 msgid "OS Town Plans, Lanark 1858 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Lanarkas 1858 (NLS)"
 
 msgid "OS Town Plans, Linlithgow 1856 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Linlithgavas 1856 (NLS)"
 
 msgid "OS Town Plans, Mayole 1856-1857 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Mayole 1856-1857 (NLS)"
 
 msgid "OS Town Plans, Montrose 1861-1862 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Montrose 1861-1862 (NLS)"
 
 msgid "OS Town Plans, Musselburgh 1853 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Muselburgas 1853 (NLS)"
 
 msgid "OS Town Plans, Musselburgh 1893 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Muselburgas 1893 (NLS)"
 
 msgid "OS Town Plans, Nairn 1867-1868 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Nairnas 1867-1868 (NLS)"
 
 msgid "OS Town Plans, Oban 1867-1868 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Obanas 1867-1868 (NLS)"
 
 msgid "OS Town Plans, Peebles 1856 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Peebles 1856 (NLS)"
 
 msgid "OS Town Plans, Perth 1860 (NLS)"
-msgstr ""
+msgstr "OS miesto planai,  Pertas 1860 (NLS)"
 
 msgid "OS Town Plans, Peterhead 1868 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Peterhedas 1868 (NLS)"
 
 msgid "OS Town Plans, Port Glasgow 1856-1857 (NLS)"
-msgstr ""
+msgstr "OS miesto planai,  Glazgo uostas 1856-1857 (NLS)"
 
 msgid "OS Town Plans, Portobello 1893-1894 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Portabelas 1893-1894 (NLS)"
 
 msgid "OS Town Plans, Rothesay 1862-1863 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Rothesay 1862-1863 (NLS)"
 
 msgid "OS Town Plans, Selkirk 1865 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Selkirkas 1865 (NLS)"
 
 msgid "OS Town Plans, St Andrews 1854 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Šv. Andriaus 1854 (NLS)"
 
 msgid "OS Town Plans, St Andrews 1893 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Šv. Andriaus 1893 (NLS)"
 
 msgid "OS Town Plans, Stirling 1858 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Stirlingas 1858 (NLS)"
 
 msgid "OS Town Plans, Stonehaven 1864 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Stonehavenas 1864 (NLS)"
 
 msgid "OS Town Plans, Stranraer 1847 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Stranraeras 1847 (NLS)"
 
 msgid "OS Town Plans, Stranraer 1863-1877 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Stranraeras 1863-1877 (NLS)"
 
 msgid "OS Town Plans, Stranraer 1893 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Stranraeras 1893 (NLS)"
 
 msgid "OS Town Plans, Strathaven 1858 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Strathavenas 1858 (NLS)"
 
 msgid "OS Town Plans, Wick 1872 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Vikas 1872 (NLS)"
 
 msgid "OS Town Plans, Wigtown 1848 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Vigtaunas 1848 (NLS)"
 
 msgid "OS Town Plans, Wigtown 1894 (NLS)"
-msgstr ""
+msgstr "OS miesto planai, Vigtaunas 1894 (NLS)"
 
 msgid "Landsat 233055"
-msgstr ""
+msgstr "Landsat 233055"
 
 msgid ""
 "Group common Address Interpolation inputs in a single dialog, as well as an "
@@ -16168,15 +16523,20 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
 msgid "Create a grid of ways."
-msgstr ""
+msgstr "Sukurti kelių tinklelį."
 
 msgid ""
 "Creating and handling address nodes and buildings within Czech Republic."
-msgstr ""
+msgstr "Kuriami ir tvarkomi adresų taškai ir pastatai Čekijos teritorijoje."
 
 msgid ""
 "Allows to import various file formats into JOSM directly. Currently "
@@ -16184,7 +16544,7 @@ msgid ""
 msgstr ""
 
 msgid "Download your GPX tracks from openstreetmap.org"
-msgstr ""
+msgstr "Atsisiųskite savo GPX pėdsaką iš openstreetmap.org"
 
 msgid ""
 "This plugin directly upload GPS Traces from current active layer in JOSM to "
@@ -16201,6 +16561,7 @@ msgstr ""
 
 msgid "Shows the elevation profile and some statistical data of a GPX track."
 msgstr ""
+"Rodo aukščio profilį ir šiek tiek statistinių duomenų iš GPX pėdsako."
 
 msgid "Handling of French EPCIs (boundary=local_authority)"
 msgstr "Prancūzų EPCI (boundary=local_authority) apdorojimas"
@@ -16209,14 +16570,16 @@ msgid "Use external scripts in JOSM"
 msgstr ""
 
 msgid "Fast drawing ways by mouse"
-msgstr ""
+msgstr "Greitas kelių piešimas pele"
 
 msgid "Finds and fixes invalid street addresses in a comfortable way."
-msgstr ""
+msgstr "Randa ir sutaiso neteisingai pažymėtus adresus patogiu būdu."
 
 msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
+"Kalbėkite su vartotojais, redaguojančiais žemėlapį šalia jūsų, būkite "
+"informuotas, jeigu kažkas prie jūsų artėja."
 
 msgid ""
 "Provides parts of the GeoTools library for other JOSM plugins. Not meant to "
@@ -16239,7 +16602,7 @@ msgstr ""
 "Vizualizuoja maršruto parinkimo informaciją kaip maršruto parinkimo grafą."
 
 msgid "Simple tool to tag house numbers."
-msgstr ""
+msgstr "Paprastas įrankis pažymėti namų numerius."
 
 msgid "Generate Imagery XML bounds from a multipolygon"
 msgstr ""
@@ -16255,13 +16618,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-"Šis eksperimentinis papildinys leidžia JOSM saugoti podėlį duomenų bazės "
-"failuose, o ne dideliuose podėlio aplankuose"
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -16315,7 +16671,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -16325,13 +16681,11 @@ msgid ""
 msgstr ""
 
 msgid "Merge overlapping part of ways."
-msgstr ""
+msgstr "Sujungti persidengiančias kelių vietas."
 
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
-
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
+"Prideda draudžiamojo posūkio į kairę ženklų rinkiniams iš 4 arba 5 kelių."
 
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
@@ -16379,7 +16733,7 @@ msgid "Import/export OSM data in PBF format"
 msgstr ""
 
 msgid "Import PDF file and convert to ways."
-msgstr ""
+msgstr "Importuoti PDF failą ir konvertuoti į kelius."
 
 msgid ""
 "Write gps position info to the image file header. Run this feature from the "
@@ -16387,12 +16741,14 @@ msgid ""
 msgstr ""
 
 msgid "Make photos movable and position them on the map."
-msgstr ""
+msgstr "Padaryti, kad fotografijos judėtų ir pozicionuoti jas ant žemėlapio."
 
 msgid ""
 "This plugin allows to display any picture as a background in the editor and "
 "align it with the map."
 msgstr ""
+"Šis papildinys leidžia parodyti bet kokį paveikslėlį kaip foną rengyklėje ir "
+"sulygiuoti jį su žemėlapiu."
 
 msgid "The great JGoodies Plastic Look and Feel."
 msgstr ""
@@ -16414,6 +16770,16 @@ msgstr ""
 msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
+"Šis papildinys supaprastina viešojo transporto maršrutų žymėjimą ir "
+"redagavimą."
+
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
 
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
@@ -16453,6 +16819,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -16499,6 +16868,8 @@ msgstr ""
 msgid ""
 "Provides a straightforward GUI for adding, editing and deleting turn lanes."
 msgstr ""
+"Teikia nesudėtingą grafinę sąsają pridedant, keičiant ar naikinant eismo "
+"kryptis sankryžose."
 
 msgid ""
 "The turnrestrictions plugin allows to enter maintain information about turn "
@@ -16528,11 +16899,8 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
-msgstr ""
+msgstr "Supaprastina OSM objektų susiejimą su Vikipedijos straipsniais"
 
 msgid ""
 "Drive a race car from point A to point B over aerial imagery, leave cacti "
@@ -16664,13 +17032,13 @@ msgid "dirt"
 msgstr ""
 
 msgid "fine_gravel"
-msgstr ""
+msgstr "smulkus_žvyras"
 
 msgid "mud"
 msgstr ""
 
 msgid "Lanes"
-msgstr "Linijos"
+msgstr "Juostos"
 
 msgid "Max. speed (km/h)"
 msgstr "Greičio riba (km/h)"
@@ -16852,7 +17220,7 @@ msgid "Su 10:00+"
 msgstr "Sk 10:00+"
 
 msgid "Wheelchairs"
-msgstr "Vežimėlis"
+msgstr "Neįgaliųjų vežimėliai"
 
 msgid "limited"
 msgstr ""
@@ -16922,18 +17290,26 @@ msgstr ""
 
 msgctxt "sport"
 msgid "american_football"
-msgstr ""
+msgstr "amerikietiškas_futbolas"
 
 msgctxt "sport"
 msgid "australian_football"
-msgstr ""
+msgstr "australietiškas_futbolas"
 
 msgctxt "sport"
 msgid "baseball"
-msgstr ""
+msgstr "beisbolas"
 
 msgctxt "sport"
 msgid "basketball"
+msgstr "krepšinis"
+
+msgctxt "sport"
+msgid "beachvolleyball"
+msgstr "paplūdimio tinklinis"
+
+msgctxt "sport"
+msgid "billiards"
 msgstr ""
 
 msgctxt "sport"
@@ -16946,7 +17322,7 @@ msgstr ""
 
 msgctxt "sport"
 msgid "canadian_football"
-msgstr ""
+msgstr "kanadietiškas_futbolas"
 
 msgctxt "sport"
 msgid "canoe"
@@ -16961,10 +17337,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -16981,6 +17353,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -16994,14 +17370,26 @@ msgstr ""
 
 msgctxt "sport"
 msgid "handball"
+msgstr "rankinis"
+
+msgctxt "sport"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "ice_hockey"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -17017,18 +17405,26 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
-msgid "rugby_league"
+msgid "rc_car"
 msgstr ""
 
 msgctxt "sport"
+msgid "rugby_league"
+msgstr "regbio_lyga"
+
+msgctxt "sport"
 msgid "rugby_union"
-msgstr ""
+msgstr "regbio_sąjunga"
 
 msgctxt "sport"
 msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr "šaudymas"
 
@@ -17056,6 +17452,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr "tinklinis"
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr "Mokestis"
 
@@ -17169,7 +17577,7 @@ msgid "evergreen"
 msgstr ""
 
 msgid "Plants that are never entirely without green foliage."
-msgstr ""
+msgstr "Augalai, kurie niekada nebūna be žalios lapijos"
 
 msgid "semi_deciduous"
 msgstr ""
@@ -17230,7 +17638,7 @@ msgid "zoroastrian"
 msgstr ""
 
 msgid "Denomination"
-msgstr ""
+msgstr "Denominacija"
 
 msgid "anglican"
 msgstr ""
@@ -17355,7 +17763,7 @@ msgid "7 GW"
 msgstr "7 GW"
 
 msgid "electricity"
-msgstr ""
+msgstr "elektra"
 
 msgid "hot water"
 msgstr "karštas vanduo"
@@ -17415,7 +17823,7 @@ msgid "Motorway"
 msgstr "Automagistralė/Greitkelis"
 
 msgid "Motorway Link"
-msgstr "Automagistralė/Greitkelio Rampa"
+msgstr "Automagistralės/Greitkelio jungtis"
 
 msgid "Trunk"
 msgstr "Magistralinis kelias"
@@ -17424,48 +17832,51 @@ msgid "Motorroad"
 msgstr ""
 
 msgid "Trunk Link"
-msgstr "Magistralinio kelio Rampa"
+msgstr "Magistralinio kelio jungtis"
 
 msgid "Primary"
 msgstr "Krašto kelias/Pagrindinė gatvė"
 
 msgid "Primary Link"
-msgstr "Krašto kelio/Pagrindinės gatvės Rampa"
+msgstr "Krašto kelio/Pagrindinės gatvės jungtis"
 
 msgid "Secondary"
-msgstr "Rajoninis grįstas kelias"
+msgstr "Rajoninis grįstas kelias/Aptarnaujančioji (C1) gatvė"
 
 msgid "Secondary Link"
-msgstr "Rajoninio grįsto kelio Rampa"
+msgstr "Rajoninio grįsto kelio/Aptarnaujančios (C1) gatvės jungtis"
 
 msgid "Tertiary"
-msgstr "Rajoninis negrįstas kelias"
+msgstr "Rajoninis negrįstas kelias/Aptarnaujančioji (C2) gatvė"
 
 msgid "Tertiary Link"
-msgstr "Rajoninio negrįsto kelio Rampa"
+msgstr "Rajoninio grįsto kelio/Aptarnaujančios (C2) gatvės jungtis"
 
 msgid "Unclassified"
 msgstr "Neklasifikuotas kelias"
 
-msgid "Passing Places"
+msgid "Street has no name"
 msgstr ""
 
+msgid "Passing Places"
+msgstr "Apsilenkimo vietos"
+
 msgid "Residential"
-msgstr "Gyvenamasis"
+msgstr "Gyvenamoji gatvė"
 
 msgid "Bicycle Road"
-msgstr "Dviračių takas"
+msgstr "Dviračių eismo kelias"
 
 msgid "Highway type"
 msgstr "Greitkelio tipas"
 
 msgctxt "Highway"
 msgid "residential"
-msgstr "gyvenamasis"
+msgstr ""
 
 msgctxt "Highway"
 msgid "service"
-msgstr ""
+msgstr "privažiavimas"
 
 msgctxt "Highway"
 msgid "unclassified"
@@ -17477,7 +17888,7 @@ msgstr ""
 
 msgctxt "Highway"
 msgid "cycleway"
-msgstr ""
+msgstr "dviračių_takas"
 
 msgid "Vehicle access"
 msgstr ""
@@ -17486,7 +17897,7 @@ msgid "Oneway for bicycle"
 msgstr "Vienpusis dviračiams"
 
 msgid "Living Street"
-msgstr ""
+msgstr "Gyvenamoji zona"
 
 msgid "Pedestrian"
 msgstr "Pėsčiųjų gatvė"
@@ -17495,10 +17906,10 @@ msgid "Area"
 msgstr "Sritis"
 
 msgid "Service"
-msgstr ""
+msgstr "Privažiavimas"
 
 msgid "Service way type"
-msgstr ""
+msgstr "Privažiavimo tipas"
 
 msgid "alley"
 msgstr "skersgatvis"
@@ -17507,27 +17918,30 @@ msgid "driveway"
 msgstr "įvažiavimas"
 
 msgid "parking_aisle"
-msgstr ""
+msgstr "privažiavimas_prie_stovėjimo_vietų"
 
 msgid "drive-through"
 msgstr ""
 
 msgid "Parking Aisle"
-msgstr ""
+msgstr "Privažiavimas prie stovėjimo vietų aikštelėje"
 
 msgid "Escape"
-msgstr ""
+msgstr "Priverstinio sustojimo nuovaža"
 
 msgid ""
 "Emergency lane beside long descending slopes for trucks and other vehicles "
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr "Kelias (nežinomo tipo)"
 
 msgid "Construction"
-msgstr "Statoma"
+msgstr "Statoma gatvė/kelias"
 
 msgctxt "Highway"
 msgid "motorway"
@@ -17575,11 +17989,11 @@ msgstr ""
 
 msgctxt "Highway"
 msgid "bridleway"
-msgstr ""
+msgstr "jodinėjimo_takas"
 
 msgctxt "Highway"
 msgid "living_street"
-msgstr ""
+msgstr "gyvenamoji_zona"
 
 msgctxt "Highway"
 msgid "pedestrian"
@@ -17591,7 +18005,7 @@ msgstr ""
 
 msgctxt "Highway"
 msgid "footway"
-msgstr ""
+msgstr "pėsčiųjų_takas"
 
 msgctxt "Highway"
 msgid "steps"
@@ -17615,7 +18029,7 @@ msgid ""
 msgstr ""
 
 msgid "No exit (cul-de-sac)"
-msgstr ""
+msgstr "Aklagatvis (cul-de-sac)"
 
 msgid "Transport mode restrictions"
 msgstr ""
@@ -17654,7 +18068,7 @@ msgid "High-occupancy vehicles (hov)"
 msgstr ""
 
 msgid "Public Service Vehicles (psv)"
-msgstr ""
+msgstr "Viešų paslaugų transportas (psv)"
 
 msgid "Tourist buses"
 msgstr ""
@@ -17708,7 +18122,7 @@ msgid "Track"
 msgstr ""
 
 msgid "Tracktype"
-msgstr ""
+msgstr "Vėžės būklė"
 
 msgid "grade1"
 msgstr "būklė1"
@@ -17815,10 +18229,10 @@ msgid "Snowmobile"
 msgstr "Sniego motociklas"
 
 msgid "Dedicated Bridleway"
-msgstr ""
+msgstr "Jodinėjimui skirtas takas"
 
 msgid "Cycle Lane/Track"
-msgstr ""
+msgstr "Dviračių juosta/takas"
 
 msgid "Cycleway"
 msgstr "Dviračių takas"
@@ -17845,10 +18259,10 @@ msgid "shared_lane"
 msgstr ""
 
 msgid "Cycleway left"
-msgstr ""
+msgstr "Dviračių takas kairėje"
 
 msgid "Cycleway right"
-msgstr ""
+msgstr "Dviračių takas dešinėje"
 
 msgid "Oneway (bicycle)"
 msgstr "Vienpusis (dviratis)"
@@ -17860,19 +18274,19 @@ msgid "Highway"
 msgstr "Plentas"
 
 msgid "Dedicated Cycleway"
-msgstr ""
+msgstr "Takas skirtas dviračiams"
 
 msgid "Pedestrians"
 msgstr "Pėstieji"
 
 msgid "Segregated Foot- and Cycleway"
-msgstr ""
+msgstr "Segreguotas dviračių/pėsčiųjų takas"
 
 msgid "Combined Foot- and Cycleway"
-msgstr ""
+msgstr "Takas skirtas tiek pėstiesiems tiek dviračiams"
 
 msgid "Dedicated Footway"
-msgstr ""
+msgstr "Takas skirtas pėstiesiems"
 
 msgid "Steps"
 msgstr "Laiptai"
@@ -17890,7 +18304,7 @@ msgid "Bicycle ramp"
 msgstr ""
 
 msgid "Wheelchair ramp"
-msgstr ""
+msgstr "Neįgaliųjų vežimėlio rampa"
 
 msgid "Luggage ramp"
 msgstr ""
@@ -17917,16 +18331,16 @@ msgid "Waypoints"
 msgstr ""
 
 msgid "Motorway Junction"
-msgstr ""
+msgstr "Greitkelio sankryža"
 
 msgid "Number"
 msgstr "Skaičius"
 
 msgid "Exit to"
-msgstr ""
+msgstr "Išvažiavimas į"
 
 msgid "Services"
-msgstr ""
+msgstr "Paslaugos"
 
 msgid "Toilets"
 msgstr "Tualetai"
@@ -17935,7 +18349,7 @@ msgid "Rest Area"
 msgstr "Poilsio vieta"
 
 msgid "Drinking Water"
-msgstr "Geriamas Vanduo"
+msgstr "Geriamasis vanduo"
 
 msgid "Traffic Signal"
 msgstr "Šviesoforas"
@@ -17947,7 +18361,7 @@ msgid "Pedestrian crossing type"
 msgstr ""
 
 msgid "uncontrolled"
-msgstr ""
+msgstr "nekontroliuojama"
 
 msgid "traffic_signals"
 msgstr ""
@@ -17995,16 +18409,16 @@ msgid "Cross on horseback"
 msgstr ""
 
 msgid "Optional values for specific countries"
-msgstr ""
+msgstr "Pasirenkamos reikšmės konkrečiai šaliai"
 
 msgid "Stop"
 msgstr "Stop"
 
 msgid "Give Way"
-msgstr ""
+msgstr "Duoti kelią"
 
 msgid "Mini-Roundabout"
-msgstr ""
+msgstr "Mini-žiedinė sankryža"
 
 msgid "clockwise"
 msgstr "pagal laikrodžio rodyklę"
@@ -18016,7 +18430,7 @@ msgid "In case of traffic signals:"
 msgstr ""
 
 msgid "Traffic Calming"
-msgstr ""
+msgstr "Greičio mažinimo priemonė"
 
 msgid "bump"
 msgstr ""
@@ -18040,16 +18454,16 @@ msgid "table"
 msgstr ""
 
 msgid "Passing Place"
-msgstr ""
+msgstr "Apsilenkimo vieta"
 
 msgid "Turning Circle"
-msgstr ""
+msgstr "Apsisukimo ratas"
 
 msgid "Turning Loop"
-msgstr ""
+msgstr "Apsisukimo kilpa"
 
 msgid "City Limit"
-msgstr "Mieto Riba"
+msgstr "Miesto riba"
 
 msgid "Second Name"
 msgstr ""
@@ -18058,11 +18472,17 @@ msgid "Speed Camera"
 msgstr "Greičio matuoklis"
 
 msgid "Traffic Mirror"
+msgstr "Kelio/gatvės sferinis veidrodis"
+
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
 msgstr ""
 
 msgctxt "junction=yes"
 msgid "Named Junction"
-msgstr ""
+msgstr "Sankryža su pavadinimu"
 
 msgid ""
 "Used in some countries for a named road junction who’s name serves for local "
@@ -18070,10 +18490,10 @@ msgid ""
 msgstr ""
 
 msgid "Elevator"
-msgstr ""
+msgstr "Liftas"
 
 msgid "Grit Bin"
-msgstr ""
+msgstr "Dėžės žvyrui/druskai"
 
 msgid "Mountain Pass"
 msgstr "Kalnų perėja"
@@ -18109,13 +18529,13 @@ msgid "plastic"
 msgstr "plastmasė"
 
 msgid "Cycle Barrier"
-msgstr ""
+msgstr "Dviračių barjeras"
 
 msgid "Cattle Grid"
-msgstr ""
+msgstr "Grotelės nuo žvėrių"
 
 msgid "Bus Trap"
-msgstr ""
+msgstr "Autobusų šliuzas"
 
 msgid "Spikes"
 msgstr "Smaigaliai"
@@ -18160,16 +18580,16 @@ msgid "wire"
 msgstr "viela"
 
 msgid "Guard Rail"
-msgstr ""
+msgstr "Atitvarai"
 
 msgid "Wall"
 msgstr "Siena"
 
 msgid "City Wall"
-msgstr "Miesto Siena"
+msgstr "Miesto siena"
 
 msgid "Retaining Wall"
-msgstr ""
+msgstr "Atraminė siena"
 
 msgctxt "Barrier"
 msgid "Ditch"
@@ -18179,7 +18599,7 @@ msgid "Kerb"
 msgstr "Bordiūras"
 
 msgid "Entrance (Barrier Opening)"
-msgstr ""
+msgstr "Įėjimas (barjero atidarymas)"
 
 msgid "Gate"
 msgstr "Vartai"
@@ -18188,7 +18608,7 @@ msgid "Lift Gate"
 msgstr "Pakeliami Vartai"
 
 msgid "Swing Gate"
-msgstr ""
+msgstr "Sukamieji vartai"
 
 msgctxt "swing_gate"
 msgid "single"
@@ -18202,16 +18622,16 @@ msgid "Hampshire Gate"
 msgstr "Hampšyro vartai"
 
 msgid "Bump Gate"
-msgstr ""
+msgstr "Smūginiai vartai"
 
 msgid "Kissing Gate"
-msgstr ""
+msgstr "Ūkininkų praėjimas"
 
 msgid "Chain"
-msgstr ""
+msgstr "Grandinė"
 
 msgid "Stile"
-msgstr ""
+msgstr "Kopynė"
 
 msgid "ladder"
 msgstr ""
@@ -18223,10 +18643,10 @@ msgid "stepover"
 msgstr ""
 
 msgid "Turnstile"
-msgstr ""
+msgstr "Turniketas"
 
 msgid "Sally Port"
-msgstr ""
+msgstr "Įėjimas į fortifikuotą vietą"
 
 msgid "Passageways"
 msgstr ""
@@ -18249,8 +18669,13 @@ msgstr "Kolonada"
 msgid "Avalanche Protector"
 msgstr "Lavinos apsauga"
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
-msgstr "Vanduo"
+msgstr ""
 
 msgid "Drain"
 msgstr "Drenažas"
@@ -18294,7 +18719,7 @@ msgid "Culvert"
 msgstr "Pralaida"
 
 msgid "Basin"
-msgstr "Prūdas"
+msgstr "Kūdra"
 
 msgid "Reservoir"
 msgstr "Tvenkinys"
@@ -18302,6 +18727,10 @@ msgstr "Tvenkinys"
 msgid "Covered Reservoir"
 msgstr "Uždengtas rezervuaras"
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -18360,88 +18789,202 @@ msgstr "raistas"
 msgid "reedbed"
 msgstr "nendrynas"
 
-msgid "saltmarsh"
-msgstr "druskožemis"
+msgid "saltmarsh"
+msgstr "druskožemis"
+
+msgid "tidalflat"
+msgstr "jūros užliejama dumblėta sekluma"
+
+msgid "mangrove"
+msgstr "mangrovė"
+
+msgid "Mud"
+msgstr "Purvynė"
+
+msgid "Large area covered with mud."
+msgstr ""
+
+msgid "Beach"
+msgstr "Paplūdimys"
+
+msgid "A flat area of sand, gravel or pebble next to water."
+msgstr "Plokščias smėlio, žvyro ar žvirgždo plotas šalia vandens."
+
+msgid "swimming"
+msgstr "plaukimas"
+
+msgid "surfing"
+msgstr ""
+
+msgid "Bay"
+msgstr "Įlanka"
+
+msgid ""
+"A large body of water partially enclosed by land but with a wide mouth."
+msgstr ""
+
+msgid "Cliff"
+msgstr "Uolos"
+
+msgid ""
+"A steep rock face exposure, with a significant vertical, or near vertical "
+"(leave the lower face to the right of the way)."
+msgstr ""
+
+msgid "Shipping"
+msgstr ""
+
+msgid "Ferry Terminal"
+msgstr "Kelto terminalas"
+
+msgid "Cargo"
+msgstr ""
+
+msgctxt "cargo"
+msgid "passengers"
+msgstr ""
+
+msgctxt "cargo"
+msgid "vehicle"
+msgstr ""
+
+msgctxt "cargo"
+msgid "bicycle"
+msgstr ""
+
+msgctxt "cargo"
+msgid "hgv"
+msgstr ""
+
+msgctxt "cargo"
+msgid "passengers;vehicle"
+msgstr ""
+
+msgid "Ferry Route"
+msgstr "Kelto maršrutas"
+
+msgid "Marina"
+msgstr "Valčių prieplauka"
+
+msgid "Dump Station"
+msgstr ""
+
+msgid "public"
+msgstr ""
+
+msgid "Marine Fuel"
+msgstr ""
+
+msgid "Agip"
+msgstr "Agip"
+
+msgid "Aral"
+msgstr "Aral"
+
+msgid "Avia"
+msgstr "Avia"
+
+msgid "BP"
+msgstr "BP"
+
+msgid "Chevron"
+msgstr "Chevron"
+
+msgid "Citgo"
+msgstr "Citgo"
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr "Esso"
+
+msgid "Exxon"
+msgstr "Exxon"
+
+msgid "Gulf"
+msgstr "Gulf"
+
+msgid "Mobil"
+msgstr "Mobil"
 
-msgid "tidalflat"
-msgstr "jūros užliejama dumblėta sekluma"
+msgid "OMV"
+msgstr "OMV"
 
-msgid "mangrove"
-msgstr "mangrovė"
+msgid "Petro-Canada"
+msgstr "Petro-Canada"
 
-msgid "Mud"
-msgstr "Purvynė"
+msgid "Pioneer"
+msgstr "Pioneer"
 
-msgid "Large area covered with mud."
-msgstr ""
+msgid "Q8"
+msgstr "Q8"
 
-msgid "Beach"
-msgstr "Paplūdimys"
+msgid "Repsol"
+msgstr "Repsol"
 
-msgid "A flat area of sand, gravel or pebble next to water."
+msgid "Shell"
+msgstr "Shell"
+
+msgid "Socar"
 msgstr ""
 
-msgid "swimming"
-msgstr "plaukimas"
+msgid "Statoil"
+msgstr "Statoil"
 
-msgid "surfing"
-msgstr ""
+msgid "Sunoco"
+msgstr "Sunoco"
 
-msgid "Bay"
-msgstr "Įlanka"
+msgid "Tamoil"
+msgstr "Tamoil"
 
-msgid ""
-"A large body of water partially enclosed by land but with a wide mouth."
-msgstr ""
+msgid "Texaco"
+msgstr "Texaco"
 
-msgid "Cliff"
-msgstr "Uolos"
+msgid "Total"
+msgstr "Total"
 
-msgid ""
-"A steep rock face exposure, with a significant vertical, or near vertical "
-"(leave the lower face to the right of the way)."
-msgstr ""
+msgid "Independent"
+msgstr "Nepriklausoma"
 
-msgid "Shipping"
-msgstr ""
+msgid "Fuel types:"
+msgstr "Kuro tipas:"
 
-msgid "Ferry Terminal"
-msgstr "Kelto terminalas"
+msgid "Diesel"
+msgstr "Dyzelis"
 
-msgid "Cargo"
-msgstr ""
+msgid "Bio Diesel"
+msgstr "Biodyzelis"
 
-msgctxt "cargo"
-msgid "passengers"
-msgstr ""
+msgid "Octane 80"
+msgstr "80 oktanas"
 
-msgctxt "cargo"
-msgid "vehicle"
-msgstr ""
+msgid "Octane 91"
+msgstr "91 oktanas"
 
-msgctxt "cargo"
-msgid "bicycle"
-msgstr ""
+msgid "Octane 92"
+msgstr "92 oktanas"
 
-msgctxt "cargo"
-msgid "hgv"
-msgstr ""
+msgid "Octane 95"
+msgstr "95 oktanas"
 
-msgctxt "cargo"
-msgid "passengers;vehicle"
-msgstr ""
+msgid "Octane 98"
+msgstr "98 oktanas"
 
-msgid "Ferry Route"
-msgstr "Kelto maršrutas"
+msgid "Octane 100"
+msgstr "100 oktanas"
 
-msgid "Marina"
-msgstr "Valčių prieplauka"
+msgid "E10 (10% Ethanol mix)"
+msgstr "E10 (10 % etanolio mišinys)"
 
-msgid "Dump Station"
-msgstr ""
+msgid "E85 (85% Ethanol mix)"
+msgstr "E85 (85 % etanolio mišinys)"
 
-msgid "public"
-msgstr ""
+msgid "LPG (Liquefied petroleum gas)"
+msgstr "LPG (suskystintos naftos dujos)"
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr "CNG (suspaustos gamtinės dujos)"
 
 msgid "Pier"
 msgstr "Molas"
@@ -18450,7 +18993,7 @@ msgid "Lock Gate"
 msgstr ""
 
 msgid "Turning Point"
-msgstr ""
+msgstr "Posūkio vieta"
 
 msgid "Slipway"
 msgstr "Slipas"
@@ -18559,6 +19102,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr "Geležinkelio iešmas"
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -18668,7 +19214,7 @@ msgid "See the Wiki for other capacity:[types]=*."
 msgstr ""
 
 msgid "Parking Space"
-msgstr ""
+msgstr "Stovėjimo vieta"
 
 msgid "Capacity"
 msgstr "Vietų skaičius"
@@ -18677,83 +19223,11 @@ msgid "Covered (with roof)"
 msgstr "Dengta (po stogu)"
 
 msgid "Parking Entrance"
-msgstr ""
+msgstr "Įvažiavimas į stovėjimo vietas"
 
 msgid "Fuel"
 msgstr "Degalinė"
 
-msgid "Agip"
-msgstr "Agip"
-
-msgid "Aral"
-msgstr "Aral"
-
-msgid "Avia"
-msgstr "Avia"
-
-msgid "BP"
-msgstr "BP"
-
-msgid "Chevron"
-msgstr "Chevron"
-
-msgid "Citgo"
-msgstr "Citgo"
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr "Esso"
-
-msgid "Exxon"
-msgstr "Exxon"
-
-msgid "Gulf"
-msgstr "Gulf"
-
-msgid "Mobil"
-msgstr "Mobil"
-
-msgid "OMV"
-msgstr "OMV"
-
-msgid "Petro-Canada"
-msgstr "Petro-Canada"
-
-msgid "Pioneer"
-msgstr "Pioneer"
-
-msgid "Q8"
-msgstr "Q8"
-
-msgid "Repsol"
-msgstr "Repsol"
-
-msgid "Shell"
-msgstr "Shell"
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr "Statoil"
-
-msgid "Sunoco"
-msgstr "Sunoco"
-
-msgid "Tamoil"
-msgstr "Tamoil"
-
-msgid "Texaco"
-msgstr "Texaco"
-
-msgid "Total"
-msgstr "Total"
-
-msgid "Independent"
-msgstr "Nepriklausoma"
-
 msgid "With shop"
 msgstr "Su parduotuve"
 
@@ -18763,51 +19237,12 @@ msgstr "parduotuvė"
 msgid "kiosk"
 msgstr "kioskas"
 
-msgid "Fuel types:"
-msgstr "Kuro tipas:"
-
-msgid "Diesel"
-msgstr "Dyzelis"
-
-msgid "Bio Diesel"
-msgstr "Biodyzelis"
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Octane 80"
-msgstr "80 oktanas"
-
-msgid "Octane 91"
-msgstr "91 oktanas"
-
-msgid "Octane 92"
-msgstr "92 oktanas"
-
-msgid "Octane 95"
-msgstr "95 oktanas"
-
-msgid "Octane 98"
-msgstr "98 oktanas"
-
-msgid "Octane 100"
-msgstr "100 oktanas"
-
-msgid "E10 (10% Ethanol mix)"
-msgstr "E10 (10 % etanolio mišinys)"
-
-msgid "E85 (85% Ethanol mix)"
-msgstr "E85 (85 % etanolio mišinys)"
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr "LPG (suskystintos naftos dujos)"
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr "CNG (suspaustos gamtinės dujos)"
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -18854,13 +19289,13 @@ msgid "Parts"
 msgstr "Dalys"
 
 msgid "Tires"
-msgstr ""
+msgstr "Padangos"
 
 msgid "Rental"
 msgstr "Nuoma"
 
 msgid "Sharing"
-msgstr ""
+msgstr "Dalinimasis"
 
 msgid "Motorcycle Dealer"
 msgstr "Motociklų prekiautojas"
@@ -19026,9 +19461,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr "#CD853F"
 
-msgid "route segment"
-msgstr "maršruto segmentas"
-
 msgid "stop position"
 msgstr ""
 
@@ -19047,6 +19479,9 @@ msgstr "platforma (tik išėjimui)"
 msgid "platform (entry only)"
 msgstr "platforma (tik įėjimui)"
 
+msgid "route segment"
+msgstr "maršruto segmentas"
+
 msgid "Route Master"
 msgstr ""
 
@@ -19108,7 +19543,7 @@ msgid "Bench"
 msgstr "Suolelis"
 
 msgid "Shelter"
-msgstr ""
+msgstr "Pastogė"
 
 msgid "Highway platform (legacy)"
 msgstr ""
@@ -19249,17 +19684,23 @@ msgstr "Viešbutis"
 msgid "Stars"
 msgstr "Žvaigždės"
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr "Motelis"
 
 msgid "Guest House/Bed & Breakfast"
-msgstr ""
+msgstr "Svečių namai/Nakvynė ir pusryčiai"
 
 msgid "Chalet"
 msgstr "Vasarnamis"
 
 msgid "Hostel"
-msgstr ""
+msgstr "Bendrabutis"
 
 msgid "Alpine Hut"
 msgstr "Alpių namelis"
@@ -19277,7 +19718,7 @@ msgid "Tents allowed"
 msgstr ""
 
 msgid "Camping Site"
-msgstr ""
+msgstr "Stovyklavietė"
 
 msgid "Food+Drinks"
 msgstr "Maistas+Gėrimai"
@@ -19339,6 +19780,9 @@ msgstr "sumuštiniai"
 msgid "sushi"
 msgstr "suši"
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -19367,7 +19811,7 @@ msgid "Pub"
 msgstr "Aludė"
 
 msgid "Beer Garden"
-msgstr ""
+msgstr "Aludė lauke (Biergarten)"
 
 msgid "Bar"
 msgstr "Baras"
@@ -19394,7 +19838,7 @@ msgid "Information Office"
 msgstr "Informacijos biuras"
 
 msgid "An office where you can get information about a town or region."
-msgstr ""
+msgstr "Biuras, kuriame galima gauti informacijos apie miestą ar regioną."
 
 msgid "Map"
 msgstr "Žemėlapis"
@@ -19524,7 +19968,7 @@ msgid "3D"
 msgstr ""
 
 msgid "Number of screens"
-msgstr ""
+msgstr "Ekranų skaičius"
 
 msgid "Minimum age"
 msgstr ""
@@ -19553,6 +19997,9 @@ msgstr "Sauna"
 msgid "Horse Riding"
 msgstr "Jodinėjimas"
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr "Viešnamis"
 
@@ -19563,7 +20010,7 @@ msgid "Picnic Site"
 msgstr "Pikniko vieta"
 
 msgid "Fireplace"
-msgstr "Ugniavietė"
+msgstr "Ugniakuras"
 
 msgid "Picnic Table"
 msgstr "Pikniko stalas"
@@ -19579,7 +20026,7 @@ msgid "charcoal"
 msgstr ""
 
 msgid "Firepit"
-msgstr ""
+msgstr "Ugniavietė"
 
 msgid "Fishing"
 msgstr "Žvejyba"
@@ -19600,10 +20047,10 @@ msgid "Library"
 msgstr "Biblioteka"
 
 msgid "Arts Centre"
-msgstr ""
+msgstr "Menų centras"
 
 msgid "Artwork"
-msgstr ""
+msgstr "Meno kūrinys"
 
 msgid "mural"
 msgstr ""
@@ -19892,7 +20339,7 @@ msgid "Veterinary"
 msgstr "Veterinarija"
 
 msgid "Toilets/Restrooms"
-msgstr ""
+msgstr "Tualetai/Tualeto kambariai"
 
 msgid "Access rights"
 msgstr ""
@@ -19931,7 +20378,7 @@ msgid "Shower"
 msgstr ""
 
 msgid "Post Box"
-msgstr ""
+msgstr "Pašto dėžutė"
 
 msgid "Collection times"
 msgstr ""
@@ -19956,19 +20403,19 @@ msgstr "Monetos"
 
 msgctxt "payment"
 msgid "Notes"
-msgstr ""
+msgstr "Pastabos"
 
 msgid "Telephone cards"
 msgstr ""
 
 msgid "Emergency Phone"
-msgstr ""
+msgstr "Pagalbos telefonas"
 
 msgid "Internet Access"
-msgstr ""
+msgstr "Interneto prieiga"
 
 msgid "Automated Defibrillator"
-msgstr ""
+msgstr "Automatinis defibriliatorius"
 
 msgid "Located inside a building?"
 msgstr ""
@@ -19977,7 +20424,7 @@ msgid "Last check date (YYYY-MM-DD)"
 msgstr ""
 
 msgid "Last check note"
-msgstr ""
+msgstr "Paskutinio patikrinimo pastaba"
 
 msgid "Clock"
 msgstr "Laikrodis"
@@ -20040,35 +20487,62 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
-msgstr "Rūšiavimas"
+msgid "Recycling Container"
+msgstr "Perdirbimo konteineris"
 
 msgid "Batteries"
 msgstr "Baterijos"
 
 msgid "Cans"
-msgstr "Skardinė"
+msgstr "Skardinės"
+
+msgid "Cardboard"
+msgstr "Kartonas"
+
+msgid "Electrical Appliances"
+msgstr "Elektros prietaisai"
 
 msgid "Glass"
 msgstr "Stiklas"
 
+msgid "Glass Bottles"
+msgstr "Stikliniai buteliai"
+
+msgid "Green Waste"
+msgstr "Žaliosios atliekos"
+
 msgid "Paper"
 msgstr "Popierius"
 
+msgid "Plastic"
+msgstr "Plastmasė"
+
+msgid "Plastic Bottles"
+msgstr "Plastikiniai buteliai"
+
+msgid "Plastic Packaging"
+msgstr "Plastikinė pakuotė"
+
 msgid "Scrap Metal"
 msgstr "Metalo laužas"
 
-msgid "container"
-msgstr ""
+msgid "Shoes"
+msgstr "Batai"
 
-msgid "centre"
-msgstr ""
+msgid "Small Appliances"
+msgstr "Maži prietaisai"
+
+msgid "Waste"
+msgstr "Atliekos"
+
+msgid "Recycling Centre"
+msgstr "Perdirbimo centras"
 
 msgid "Waste Basket/Trash Can"
-msgstr ""
+msgstr "Šiukšlių dėžė"
 
 msgid "Waste Disposal/Dumpster"
-msgstr ""
+msgstr "Atliekų tvarkymas/Konteineris"
 
 msgid "Sanitary Dump Station"
 msgstr ""
@@ -20092,7 +20566,7 @@ msgid "Amount of Seats"
 msgstr ""
 
 msgid "Type of shelter"
-msgstr ""
+msgstr "Pastogės tipas"
 
 msgctxt "shelter"
 msgid "basic_hut"
@@ -20104,7 +20578,7 @@ msgstr ""
 
 msgctxt "shelter"
 msgid "picnic_shelter"
-msgstr ""
+msgstr "pikniko_pastogė"
 
 msgctxt "shelter"
 msgid "public_transport"
@@ -20112,7 +20586,7 @@ msgstr ""
 
 msgctxt "shelter"
 msgid "weather_shelter"
-msgstr ""
+msgstr "orų_pastogė"
 
 msgctxt "shelter"
 msgid "wildlife_hide"
@@ -20196,10 +20670,10 @@ msgid "Count"
 msgstr ""
 
 msgid "Advertising Column"
-msgstr ""
+msgstr "Reklamos stulpas"
 
 msgid "Billboard"
-msgstr ""
+msgstr "Skelbimų lenta"
 
 msgid "Sports"
 msgstr "Sportas"
@@ -20265,6 +20739,9 @@ msgstr "Šaudymas iš Lanko"
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr ""
 
@@ -20405,13 +20882,13 @@ msgid "Soccer"
 msgstr "Futbolas"
 
 msgid "Australian Football"
-msgstr ""
+msgstr "Australietiškas futbolas"
 
 msgid "American Football"
-msgstr ""
+msgstr "Amerikietiškas futbolas"
 
 msgid "Canadian Football"
-msgstr ""
+msgstr "Kanadietiškas futbolas"
 
 msgid "Gaelic Games"
 msgstr ""
@@ -20420,7 +20897,7 @@ msgid "Hurling"
 msgstr ""
 
 msgid "Football"
-msgstr ""
+msgstr "Futbolas"
 
 msgid "Camogie"
 msgstr ""
@@ -20429,21 +20906,27 @@ msgid "Rounders"
 msgstr ""
 
 msgid "Rugby League"
-msgstr ""
+msgstr "Regbio lyga"
 
 msgid "Rugby Union"
-msgstr ""
+msgstr "Regbio sąjunga"
 
 msgid "Baseball"
-msgstr ""
+msgstr "Beisbolas"
 
 msgid "Basketball"
-msgstr ""
+msgstr "Krepšinis"
+
+msgid "Handball"
+msgstr "Rankinis"
 
 msgid "Volleyball"
-msgstr ""
+msgstr "Tinklinis"
 
 msgid "Beach Volleyball"
+msgstr "Paplūdimio tinklinis"
+
+msgid "Billiards"
 msgstr ""
 
 msgid "Golf"
@@ -20461,20 +20944,20 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
 msgstr ""
 
 msgid "Racquetball"
-msgstr ""
+msgstr "Raketbolas"
 
 msgid "Table Tennis/Ping-Pong"
 msgstr ""
@@ -20491,9 +20974,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -20512,11 +20992,8 @@ msgstr ""
 msgid "RC Car"
 msgstr "RC Mašina"
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
-msgstr ""
+msgstr "Žmogaus sukurta"
 
 msgctxt "building"
 msgid "roof"
@@ -20532,7 +21009,7 @@ msgstr "garažai"
 
 msgctxt "building"
 msgid "industrial"
-msgstr ""
+msgstr "industrinis"
 
 msgctxt "building"
 msgid "school"
@@ -20540,7 +21017,7 @@ msgstr "mokykla"
 
 msgctxt "building"
 msgid "commercial"
-msgstr ""
+msgstr "komercinis"
 
 msgctxt "building"
 msgid "barn"
@@ -20576,7 +21053,7 @@ msgstr "sandėlis"
 
 msgctxt "building"
 msgid "retail"
-msgstr ""
+msgstr "prekyba"
 
 msgctxt "building"
 msgid "shed"
@@ -20587,6 +21064,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr "tvartas"
 
@@ -20854,7 +21339,7 @@ msgid "Water Works"
 msgstr ""
 
 msgid "Wastewater Treatment Plant"
-msgstr ""
+msgstr "Nuotekų valymo įrenginiai"
 
 msgid "Watermill"
 msgstr ""
@@ -20869,7 +21354,7 @@ msgid "Lighthouse"
 msgstr "Švyturys"
 
 msgid "Street Lamp"
-msgstr ""
+msgstr "Gatvės žibintas"
 
 msgid "Mo-Fr 22:00-05:00"
 msgstr ""
@@ -20941,7 +21426,7 @@ msgid "Survey Point"
 msgstr ""
 
 msgid "Surveillance Camera"
-msgstr ""
+msgstr "Vaizdo stebėjimo kamera"
 
 msgid "indoor"
 msgstr ""
@@ -20965,7 +21450,7 @@ msgid "bank"
 msgstr "bankas"
 
 msgid "Camera"
-msgstr ""
+msgstr "Kamera"
 
 msgctxt "camera:type"
 msgid "fixed"
@@ -21058,7 +21543,7 @@ msgid "bascule"
 msgstr ""
 
 msgid "drawbridge"
-msgstr ""
+msgstr "pakeliamas_tiltas"
 
 msgid "lift"
 msgstr ""
@@ -21073,7 +21558,7 @@ msgid "transporter"
 msgstr ""
 
 msgid "Bridge Support"
-msgstr ""
+msgstr "Tilto atrama"
 
 msgid "pier"
 msgstr ""
@@ -21088,7 +21573,7 @@ msgid "pivot_pier"
 msgstr ""
 
 msgid "Bridge outline"
-msgstr ""
+msgstr "Tilto kontūras"
 
 msgid "Power Plant"
 msgstr "Elektrinė"
@@ -21100,7 +21585,7 @@ msgid "Power Generator"
 msgstr "Elektros generatorius"
 
 msgid "Biofuel Power Generator"
-msgstr ""
+msgstr "Biokuro elektros generatorius"
 
 msgid "Generator Type"
 msgstr ""
@@ -21115,10 +21600,10 @@ msgid "steam_generator"
 msgstr ""
 
 msgid "Biogas Power Generator"
-msgstr ""
+msgstr "Biodujų elektros generatorius"
 
 msgid "Biomass Power Generator"
-msgstr ""
+msgstr "Biomasės elektros generatorius"
 
 msgid "Method"
 msgstr ""
@@ -21151,22 +21636,22 @@ msgid "steam_turbine"
 msgstr ""
 
 msgid "Coal Power Generator"
-msgstr ""
+msgstr "Anglies elektros generatorius"
 
 msgid "Gas Power Generator"
-msgstr ""
+msgstr "Dujų elektros generatorius"
 
 msgid "combined_cycle"
 msgstr ""
 
 msgid "Oil Power Generator"
-msgstr ""
+msgstr "Mazuto elektros generatorius"
 
 msgid "Diesel Power Generator"
-msgstr ""
+msgstr "Dyzelino elektros generatorius"
 
 msgid "Gasoline Power Generator"
-msgstr ""
+msgstr "Benzino elektros generatorius"
 
 msgid "Nuclear Reactor"
 msgstr ""
@@ -21237,7 +21722,7 @@ msgid "Vodo-Vodyanoi Energetichesky Reactor (VVER)"
 msgstr ""
 
 msgid "Solar Power Generator"
-msgstr ""
+msgstr "Saulės elektros generatorius"
 
 msgctxt "generator method"
 msgid "photovoltaic"
@@ -21260,7 +21745,7 @@ msgid "thermal"
 msgstr ""
 
 msgid "Waste Power Generator"
-msgstr ""
+msgstr "Atliekų elektros generatorius"
 
 msgctxt "generator method"
 msgid "pyrolysis"
@@ -21329,10 +21814,10 @@ msgid "Wave Energy Converter"
 msgstr ""
 
 msgid "Osmotic Power Generator"
-msgstr ""
+msgstr "Osmosinis elektros generatorius"
 
 msgid "Geothermal Power Generator"
-msgstr ""
+msgstr "Geoterminis elektros generatorius"
 
 msgid "heat_pump"
 msgstr ""
@@ -21344,7 +21829,7 @@ msgid "Power Substation"
 msgstr "Elektros pastotė"
 
 msgid "Type of substation"
-msgstr ""
+msgstr "Pastotės tipas"
 
 msgctxt "power"
 msgid "transmission"
@@ -21376,10 +21861,10 @@ msgstr ""
 
 msgctxt "power"
 msgid "industrial"
-msgstr ""
+msgstr "industrinė"
 
 msgid "Power rating (kVA/MVA)"
-msgstr ""
+msgstr "Elektros galia (kVA/MVA)"
 
 msgid "2700 kVA"
 msgstr ""
@@ -21400,10 +21885,10 @@ msgid "Gas insulated"
 msgstr ""
 
 msgid "Power Transformer"
-msgstr ""
+msgstr "Elektros transformatorius"
 
 msgid "Type of transformer"
-msgstr ""
+msgstr "Transformatoriaus tipas"
 
 msgctxt "power"
 msgid "generator"
@@ -21469,7 +21954,7 @@ msgid "bipole"
 msgstr ""
 
 msgid "Power rating (MVA)"
-msgstr ""
+msgstr "Elektros galia (MVA)"
 
 msgid "Power Compensator"
 msgstr ""
@@ -21528,7 +22013,7 @@ msgid "Power Tower"
 msgstr ""
 
 msgid "Type of construction"
-msgstr ""
+msgstr "Konstrukcijos tipas"
 
 msgid "lattice"
 msgstr ""
@@ -21784,13 +22269,13 @@ msgid "Ruins"
 msgstr "Griuvėsiai"
 
 msgid "Archaeological Site"
-msgstr ""
+msgstr "Archeologinė vieta"
 
 msgid "Battlefield"
 msgstr "Mūšio laukas"
 
 msgid "Palaeontological Site"
-msgstr ""
+msgstr "Paleontologijos vieta"
 
 msgid "Monument"
 msgstr ""
@@ -21816,7 +22301,7 @@ msgstr ""
 
 msgctxt "memorial"
 msgid "stone"
-msgstr ""
+msgstr "akmuo"
 
 msgctxt "memorial"
 msgid "war_memorial"
@@ -21907,9 +22392,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -22259,16 +22741,16 @@ msgid "Boundaries"
 msgstr "Ribos"
 
 msgid "Administrative"
-msgstr ""
+msgstr "Administracinės"
 
 msgid "Administrative level"
-msgstr ""
+msgstr "Administracinis lygis"
 
 msgid "Maritime"
-msgstr ""
+msgstr "Jūrinės"
 
 msgid "Political"
-msgstr ""
+msgstr "Politinės"
 
 msgid "Division"
 msgstr ""
@@ -22283,13 +22765,13 @@ msgid "ward"
 msgstr ""
 
 msgid "Postal Code"
-msgstr ""
+msgstr "Pašto kodai"
 
 msgid "National Park"
-msgstr ""
+msgstr "Nacionalinis parkas"
 
 msgid "Protected Area"
-msgstr ""
+msgstr "Saugomos teritorijos"
 
 msgid "Protect Class"
 msgstr ""
@@ -22316,41 +22798,41 @@ msgid "Places"
 msgstr "Vietovės"
 
 msgid "Continent"
-msgstr ""
+msgstr "Žemynas"
 
 msgid "Country"
-msgstr ""
+msgstr "Šalis"
 
 msgctxt "place"
 msgid "State"
-msgstr ""
+msgstr "Valstija"
 
 msgid "Region"
-msgstr ""
+msgstr "Regionas"
 
 msgid "County"
-msgstr ""
+msgstr "Apygarda"
 
 msgid "City"
-msgstr ""
+msgstr "Miestas"
 
 msgid "Town"
-msgstr ""
+msgstr "Miestelis"
 
 msgid "Village"
-msgstr ""
+msgstr "Kaimas"
 
 msgid "Hamlet"
-msgstr ""
+msgstr "Viensėdis"
 
 msgid "Isolated Dwelling"
 msgstr "Vienkiemis"
 
 msgid "Suburb"
-msgstr ""
+msgstr "Priemiestis"
 
 msgid "Neighbourhood"
-msgstr ""
+msgstr "Mikrorajonas"
 
 msgid "Farm"
 msgstr "Ferma"
@@ -22362,22 +22844,22 @@ msgid "(please use isolated_dwelling for an isolated farm)"
 msgstr "(naudokite isolated_dwelling izoliuotai fermai)"
 
 msgid "Locality"
-msgstr ""
+msgstr "Vietovė"
 
 msgid "Peak"
-msgstr ""
+msgstr "Viršukalnė"
 
 msgid "The top (summit) of a mountain or hill."
 msgstr ""
 
 msgid "Saddle"
-msgstr ""
+msgstr "Balnakalnis"
 
 msgid "A saddle point between mountains or hills."
-msgstr ""
+msgstr "Balnakalnio taškas tarp dviejų kalnų ar kalvų."
 
 msgid "Glacier"
-msgstr ""
+msgstr "Ledynas"
 
 msgid ""
 "A persistent body of dense ice that is constantly moving under its own "
@@ -22385,10 +22867,10 @@ msgid ""
 msgstr ""
 
 msgid "Volcano"
-msgstr ""
+msgstr "Ugnikalnis"
 
 msgid "A volcano, either dormant, extinct or active."
-msgstr ""
+msgstr "Ugnikalnis – neveikiantis, užgesęs arba aktyvus."
 
 msgid "Current Status"
 msgstr ""
@@ -22409,46 +22891,46 @@ msgid "scoria"
 msgstr ""
 
 msgid "Ridge"
-msgstr ""
+msgstr "Kalvagūbris"
 
 msgid "A mountain or hill ridge."
-msgstr ""
+msgstr "Kalno ar kalvos kalvagūbris"
 
 msgid "Valley"
-msgstr ""
+msgstr "Slėnis"
 
 msgid "A low area between hills."
 msgstr ""
 
 msgid "Cave Entrance"
-msgstr ""
+msgstr "Urvo įėjimas"
 
 msgid "The entrance to a cave."
-msgstr ""
+msgstr "Įėjimas į urvą."
 
 msgid "Island"
-msgstr ""
+msgstr "Sala"
 
 msgid "Islet"
-msgstr ""
+msgstr "Salelė"
 
 msgid "Nature"
 msgstr "Gamta"
 
 msgid "Tree"
-msgstr ""
+msgstr "Medis"
 
 msgid "A single tree."
-msgstr ""
+msgstr "Vienas medis."
 
 msgid "Botanical Name"
 msgstr ""
 
 msgid "Tree Row"
-msgstr ""
+msgstr "Medžių eilė"
 
 msgid "A line of trees."
-msgstr ""
+msgstr "Medžių eilė."
 
 msgid "Wood"
 msgstr "Medžiai"
@@ -22460,7 +22942,7 @@ msgid "Forest"
 msgstr "Miškas"
 
 msgid "Cutline"
-msgstr ""
+msgstr "Proskyna"
 
 msgctxt "cutline"
 msgid "border"
@@ -22491,7 +22973,7 @@ msgid "section"
 msgstr ""
 
 msgid "Grassland"
-msgstr ""
+msgstr "Pieva"
 
 msgid ""
 "Where vegetation is dominated by grasses (Poaceae) and other herbaceous (non-"
@@ -22520,10 +23002,10 @@ msgid "Nature Reserve"
 msgstr "Gamtos draustinis"
 
 msgid "Scree"
-msgstr ""
+msgstr "Nuobirynas"
 
 msgid "An accumulation of loose rocks."
-msgstr ""
+msgstr "Palaidų uolienų sankaupa."
 
 msgid "Fell"
 msgstr ""
@@ -22534,14 +23016,15 @@ msgid ""
 msgstr ""
 
 msgid "Scrub"
-msgstr ""
+msgstr "Krūmai"
 
 msgid ""
 "Bare lower lying uncultivated land with bushes but little or no tree cover."
 msgstr ""
+"Plika, žemiau esanti, nekultivuojama žemė su krūmais, bet mažai medžių."
 
 msgid "Heath"
-msgstr ""
+msgstr "Dykynė"
 
 msgid ""
 "Bare lower lying uncultivated land with a shrubland habitat found mainly on "
@@ -22550,37 +23033,43 @@ msgid ""
 msgstr ""
 
 msgid "Sand"
-msgstr ""
+msgstr "Smėlis"
 
 msgid "Large area covered with sand."
-msgstr ""
+msgstr "Didelis smėliu dengtas plotas"
 
 msgid "Bare Rock"
-msgstr ""
+msgstr "Plika uoliena"
 
 msgid ""
 "For areas of solid visible rock that is sparsely vegetated or not vegetated "
 "at all."
 msgstr ""
+"Plotams su ištisine matoma uoliena, kuri retai apaugusi arba neapaugusi iš "
+"viso."
 
 msgid "Rock"
-msgstr ""
+msgstr "Uola"
 
 msgid ""
 "A notable rock or group of rocks, with at least one of them firmly attached "
 "to the underlying bedrock."
 msgstr ""
+"Žymi uola ar uolų grupė, kur bent viena iš jų yra tvirtai prijungta prie "
+"pamatinės uolienos."
 
 msgid "Tourism attraction"
 msgstr "Turistų lankoma vieta"
 
 msgid "Stone"
-msgstr ""
+msgstr "Akmuo"
 
 msgid ""
 "A single notable free-standing rock, which may differ from the composition "
 "of the terrain it lies in."
 msgstr ""
+"Vienas žymus, laisvai stovintis akmuo, kuris gali skirtis nuo vietovės, "
+"kurioje guli, struktūros."
 
 msgid "Land use"
 msgstr "Žemėnauda"
@@ -22604,10 +23093,10 @@ msgid "Greenhouse Horticulture"
 msgstr "Sodininkystės šiltnamis"
 
 msgid "Plant Nursery"
-msgstr ""
+msgstr "Augalų daigynas"
 
 msgid "Allotments"
-msgstr ""
+msgstr "Sklypai"
 
 msgid "Garden"
 msgstr "Sodelis"
@@ -22616,64 +23105,64 @@ msgid "Grass"
 msgstr "Žolė"
 
 msgid "Village Green"
-msgstr ""
+msgstr "Gyvenvietės žalioji erdvė"
 
 msgid "Common"
-msgstr ""
+msgstr "Bendra"
 
 msgid "Park"
 msgstr "Parkas"
 
 msgid "Recreation Ground"
-msgstr ""
+msgstr "Rekreacinė erdvė"
 
 msgid "Residential Area"
 msgstr "Gyvenamasis plotas"
 
 msgid "Graveyard"
-msgstr "Kapinės"
+msgstr "Kapinės šventoriuje"
 
 msgid "Cemetery"
-msgstr ""
+msgstr "Kapinės"
 
 msgid "Religious"
-msgstr ""
+msgstr "Religinė"
 
 msgid "Retail"
-msgstr ""
+msgstr "Mažmeninė prekyba"
 
 msgid "Commercial"
-msgstr ""
+msgstr "Komercinė"
 
 msgid "Industrial"
-msgstr ""
+msgstr "Industrinė"
 
 msgid "Garages"
 msgstr "Garažai"
 
 msgid "Railway Land"
-msgstr ""
+msgstr "Geležinkelio teritorija"
 
 msgid "Military"
-msgstr ""
+msgstr "Karinė"
 
 msgid "Construction Area"
-msgstr ""
+msgstr "Statybos"
 
 msgid "Brownfield"
-msgstr ""
+msgstr "Apleisti plotai"
 
 msgid "Greenfield"
-msgstr ""
+msgstr "Vystoma teritorija"
 
 msgid "Landfill"
 msgstr "Sąvartynas"
 
 msgid "Quarry"
-msgstr ""
+msgstr "Karjeras"
 
 msgid "Annotation"
-msgstr ""
+msgstr "Anotacija"
 
 msgid "Alternative name"
 msgstr ""
@@ -22685,7 +23174,7 @@ msgid "Local name"
 msgstr ""
 
 msgid "Regional name"
-msgstr ""
+msgstr "Vietinis pavadinimas"
 
 msgid "National name"
 msgstr ""
@@ -22703,32 +23192,32 @@ msgid "House number"
 msgstr "Namo numeris"
 
 msgid "Street name"
-msgstr ""
+msgstr "Gatvės pavadinimas"
 
 msgid "Place name"
-msgstr ""
+msgstr "Vietovės pavadinimas"
 
 msgid "City name"
-msgstr ""
+msgstr "Miesto pavadinimas"
 
 msgid "Country code"
-msgstr ""
+msgstr "Šalies kodas"
 
 msgid "House name"
 msgstr "Namo pavadinimas"
 
 msgid "Subdistrict"
-msgstr ""
+msgstr "Seniūnija/Mikrorajonas/Parajonis"
 
 msgid "District"
-msgstr ""
+msgstr "Savivaldybė/Apygarda/Rajonas"
 
 msgid "Province"
-msgstr ""
+msgstr "Provincija"
 
 msgctxt "addr:"
 msgid "State"
-msgstr ""
+msgstr "Valstija"
 
 msgid "AL"
 msgstr ""
@@ -22893,7 +23382,7 @@ msgid "VI"
 msgstr ""
 
 msgid "Address Interpolation"
-msgstr ""
+msgstr "Adresų interpoliacija"
 
 msgid "Numbering scheme"
 msgstr ""
@@ -22920,19 +23409,19 @@ msgid "potential"
 msgstr ""
 
 msgid "Contact (Common Schema)"
-msgstr ""
-
-msgid "Fax Number"
-msgstr "Fakso Numeris"
+msgstr "Kontaktai (bendra schema)"
 
 msgid "Email Address"
 msgstr "El. Pašto Adresas"
 
+msgid "Fax Number"
+msgstr "Fakso Numeris"
+
 msgid "Image"
 msgstr ""
 
 msgid "Contact (Schema with ''contact:*'' Prefix)"
-msgstr ""
+msgstr "Kontaktai (schema su „contact:*“ prefiksu)"
 
 msgctxt "description=*"
 msgid "A short text with additional information."
@@ -22950,7 +23439,7 @@ msgstr ""
 
 msgctxt "the tag note=*"
 msgid "Note"
-msgstr ""
+msgstr "Pastaba"
 
 msgctxt "note=*"
 msgid "An important hint for other mappers (not for the end user)."
@@ -22978,22 +23467,22 @@ msgid "Boundary type"
 msgstr "Ribos tipas"
 
 msgid "administrative"
-msgstr ""
+msgstr "administracinė"
 
 msgid "maritime"
-msgstr ""
+msgstr "jūrinė"
 
 msgid "national_park"
 msgstr ""
 
 msgid "political"
-msgstr ""
+msgstr "politinė"
 
 msgid "postal_code"
-msgstr ""
+msgstr "pašto_kodas"
 
 msgid "protected_area"
-msgstr ""
+msgstr "saugoma_teritorija"
 
 msgid "Sub area"
 msgstr ""
@@ -23197,13 +23686,13 @@ msgid "house"
 msgstr "namas"
 
 msgid "Street"
-msgstr ""
+msgstr "Gatvė"
 
 msgid "ways being part of street"
 msgstr ""
 
 msgid "addresses belonging to the street"
-msgstr ""
+msgstr "gatvei priklausantys adresai"
 
 msgid "houses belonging to the street"
 msgstr "gatvei priklausantys namai"
@@ -23242,10 +23731,10 @@ msgid "position of sign"
 msgstr ""
 
 msgid "Waterway"
-msgstr ""
+msgstr "Vandens kelias"
 
 msgid "Subtype of waterway (largest one of members)"
-msgstr ""
+msgstr "Vandens kelio potipis (didžiausias iš narių)"
 
 msgid "stream"
 msgstr "upelis"
@@ -23305,10 +23794,10 @@ msgid "edge ways parallel to ''through''"
 msgstr ""
 
 msgid "Tunnel Start"
-msgstr ""
+msgstr "Tunelio pradžia"
 
 msgid "Village/City"
-msgstr ""
+msgstr "Kaimas/Miestas"
 
 msgid "One Way"
 msgstr ""
@@ -23341,7 +23830,7 @@ msgid "{0} without {1}, {2} or {3}"
 msgstr ""
 
 msgid "{0} together with {1}"
-msgstr ""
+msgstr "{0} kartu su {1}"
 
 msgid "incomplete object: only {0}"
 msgstr ""
@@ -23350,10 +23839,13 @@ msgid "incomplete object: only {0} and {1}"
 msgstr ""
 
 msgid "{0} together with addr:*"
+msgstr "{0} kartu su addr:*"
+
+msgid "{0} together with {1} and conflicting values"
 msgstr ""
 
 msgid "{0} on suspicious object"
-msgstr ""
+msgstr "{0} ant įtartino objekto"
 
 msgid "restaurant without name"
 msgstr ""
@@ -23376,12 +23868,24 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
-msgid "{0}={1} is deprecated"
+msgid "Same value of {0} and {1}"
 msgstr ""
 
-msgid "{0} is deprecated"
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
 msgstr ""
 
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr "Įtartina žymų kombinacija: {0} ir {1}"
+
+msgid "{0}={1} is deprecated"
+msgstr "{0}={1} pasenusi"
+
+msgid "{0} is deprecated"
+msgstr "{0} pasenusi"
+
 msgid "''{0}'' is meaningless, use more specific tags, e.g. ''{1}''"
 msgstr ""
 
@@ -23394,17 +23898,21 @@ msgid ""
 "{0}={1} is unspecific. Instead of ''{1}'' please give more information about "
 "what exactly should be fixed."
 msgstr ""
+"{0}={1} netikslu. Vietoje „{1}“ pateikite daugiau informacijos apie tai, kas "
+"tiksliai turi būti sutvarkyta."
 
 msgid "{0}={1} is deprecated. Please use instead a multipolygon."
-msgstr ""
+msgstr "{0}={1} pasenusi. Vietoje jos naudokite multipoligoną."
 
 msgid ""
 "{0} is deprecated. Please specify interval by using opening_hours syntax"
 msgstr ""
+"{0} pasenusi. Nurodykite intervalą naudodami „opening_hours“ sintaksę"
 
 msgid ""
 "{0} is deprecated. Please delete this object and use a private layer instead"
 msgstr ""
+"{0} pasenusi. Pašalinkite šį objektą ir vietoje jo naudokite privatų sluoksnį"
 
 msgid "{0}={1} is unspecific. Please replace ''{1}'' by a specific value."
 msgstr ""
@@ -23431,9 +23939,12 @@ msgid ""
 msgstr ""
 
 msgid "key with uncommon character"
-msgstr ""
+msgstr "raktas su nedažnu simboliu"
 
 msgid "uncommon short key"
+msgstr "nedažnas trumpas raktas"
+
+msgid "{0} is inaccurate"
 msgstr ""
 
 msgid "{0} on a node. Should be used on a way."
@@ -23473,13 +23984,13 @@ msgid "Overlapping Identical Landuses"
 msgstr "Persidengiančios vienodos žemėnaudos"
 
 msgid "{0} must be connected to a way"
-msgstr ""
+msgstr "{0} privalo būti prijungta prie kelio"
 
 msgid "node connects waterway and bridge"
-msgstr ""
+msgstr "taškas jungia vandens kelią ir tiltą"
 
 msgid "abbreviated street name"
-msgstr ""
+msgstr "sutrumpintas gatvės pavadinimas"
 
 msgid "wrong highway tag on a node"
 msgstr ""
@@ -23505,7 +24016,7 @@ msgid ""
 msgstr ""
 
 msgid "{0} with multiple values"
-msgstr ""
+msgstr "{0} su sudėtinėmis reikšmėmis"
 
 msgid "empty value in semicolon-separated ''{0}''"
 msgstr ""
@@ -23526,9 +24037,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -23542,7 +24062,7 @@ msgid "unusual incline; use percentages/degrees or up/down"
 msgstr ""
 
 msgid "{0} must be a numeric value"
-msgstr ""
+msgstr "{0} privalo būti skaitinė reikšmė"
 
 msgid "{0} must be a positive integer number"
 msgstr ""
@@ -23554,22 +24074,22 @@ msgid "{0} relation without {0} tag"
 msgstr ""
 
 msgid "religion without denomination"
-msgstr ""
+msgstr "religija be denominacijos"
 
 msgid "unknown christian denomination"
-msgstr ""
+msgstr "nežinoma krikščioniška denominacija"
 
 msgid "unknown muslim denomination"
-msgstr ""
+msgstr "nežinoma musulmoniška denominacija"
 
 msgid "unknown jewish denomination"
-msgstr ""
+msgstr "nežinoma žydiška denominacija"
 
 msgid "{0} is unnecessary"
-msgstr ""
+msgstr "{0} yra nereikalinga"
 
 msgid "{0} is unnecessary for {1}"
-msgstr ""
+msgstr "{0} yra nereikalinga {1}"
 
 msgid "{0}={1} makes no sense"
 msgstr ""
@@ -23585,7 +24105,7 @@ msgid "unknown language prefix in wikipedia tag"
 msgstr ""
 
 msgid "deprecated format for wikipedia tag"
-msgstr ""
+msgstr "pasenęs Vikipedijos žymos formatas"
 
 msgid "''wikipedia''=''language:page title''"
 msgstr ""
@@ -23708,7 +24228,7 @@ msgid ""
 msgstr ""
 
 msgid "Select two ways with a node in common"
-msgstr ""
+msgstr "Pažymėkite du kelius su bendru tašku"
 
 msgid "Select two ways with alone a node in common"
 msgstr ""
@@ -23900,6 +24420,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -23956,9 +24479,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23996,7 +24516,7 @@ msgid "Address has no post code"
 msgstr "Adresas be pašto kodo"
 
 msgid "Address has no city"
-msgstr "Adresas be mieto"
+msgstr "Adresas be miesto"
 
 msgid "Address has no country"
 msgstr "Adresas be šalies"
@@ -24029,7 +24549,7 @@ msgid "Selected Addresses"
 msgstr ""
 
 msgid "Selected Street"
-msgstr ""
+msgstr "Pažymėta gatvė"
 
 msgid "(No data)"
 msgstr "(Nėra duomenų)"
@@ -24048,7 +24568,7 @@ msgstr ""
 
 msgctxt "address"
 msgid "City"
-msgstr ""
+msgstr "Miestas"
 
 msgid "Postcode"
 msgstr "Pašto kodas"
@@ -24193,7 +24713,7 @@ msgid "OSM Recommendation"
 msgstr ""
 
 msgid "Recommend categories to your newly created instances."
-msgstr ""
+msgstr "Rekomenduojamos kategorijos naujai sukurtiems objektams."
 
 msgid "Training process configuration"
 msgstr ""
@@ -24286,10 +24806,10 @@ msgid "Selected Bug Info"
 msgstr ""
 
 msgid "Handy Address Interpolation Functions"
-msgstr ""
+msgstr "Patogios adresų interpoliacijos funkcijos"
 
 msgid "Define Address Interpolation"
-msgstr ""
+msgstr "Apibrėžkite adresų interpoliaciją"
 
 msgid "Odd"
 msgstr "Nelyginis"
@@ -24349,7 +24869,7 @@ msgid "Post Code:"
 msgstr "Pašto Kodas:"
 
 msgid "Country:"
-msgstr "Valstybė:"
+msgstr "Šalis:"
 
 msgid "Full Address:"
 msgstr "Pilnas Adresas:"
@@ -24358,10 +24878,10 @@ msgid "Optional Information:"
 msgstr "Neprivaloma Informacija:"
 
 msgid "Please select a street to associate with address interpolation way"
-msgstr ""
+msgstr "Pasirinkite gatvę susiejimui su adresų interpoliacijos keliu"
 
 msgid "Please select address interpolation way for this street"
-msgstr ""
+msgstr "Pasirinkite adresų interpoliacijos kelią šiai gatvei"
 
 msgid "Expected odd numbers for addresses"
 msgstr ""
@@ -24373,7 +24893,7 @@ msgid "Expected valid number for increment"
 msgstr ""
 
 msgid "Country code must be 2 letters"
-msgstr ""
+msgstr "Šalies kodas privalo būti iš 2 raidžių"
 
 msgid "Please enter valid number for starting and ending address"
 msgstr ""
@@ -24397,10 +24917,10 @@ msgid "Starting address number must be less than ending address number"
 msgstr ""
 
 msgid "Align Way Segments"
-msgstr "Lygiuoti Kelio Atkarpas"
+msgstr "Lygiuoti kelio segmentus"
 
 msgid "Align Ways"
-msgstr "Lygiuoti Kelius"
+msgstr "Lygiuoti kelius"
 
 msgid ""
 "Please select two segments that don''t share any nodes.\n"
@@ -24436,7 +24956,7 @@ msgid "AlignWayS: Alignment not possible"
 msgstr ""
 
 msgid "Align way segment"
-msgstr "Lygiuotu kelio segmentą"
+msgstr "Lygiuoti kelio segmentą"
 
 msgid ""
 "Please select two segments that don''t share any nodes\n"
@@ -24444,10 +24964,10 @@ msgid ""
 msgstr ""
 
 msgid "Align Way Segments: Modes"
-msgstr ""
+msgstr "Lygiuoti kelio segmentus: veiksenos"
 
 msgid "Align Ways control panel"
-msgstr ""
+msgstr "Kelių lygiavimo valdymo pultas"
 
 msgid "This panel activates in Align Ways mode:"
 msgstr ""
@@ -24482,7 +25002,7 @@ msgid "AlignWays: What''s New..."
 msgstr ""
 
 msgid "Align Ways mode"
-msgstr ""
+msgstr "Kelių lygiavimo veiksena"
 
 msgid "Parameter ''{0}'' must not be null"
 msgstr "Parametras „{0}“ privalo būti ne nulis"
@@ -24706,67 +25226,88 @@ msgstr "Pranešimas apie klaidą"
 msgid "Something went wrong!"
 msgstr "Įvyko kažkas ne taip!"
 
-msgid "Please file a bug report on the github project page under"
+msgid "Please file a bug report on the github project page under"
+msgstr ""
+
+msgid ""
+"Let us know what you did and what happend add the following text to the bug "
+"report, so we can find the source of the issue."
+msgstr ""
+
+msgid "Area Selector - Preferences"
+msgstr ""
+
+msgid "Settings for the area detection algorithm."
+msgstr "Ploto aptikimo algoritmo nustatymai."
+
+msgid "Boofcv - high resolution images"
+msgstr ""
+
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Let us know what you did and what happend add the following text to the bug "
-"report, so we can find the source of the issue."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
+msgstr ""
+
+msgid "Algorithm"
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Algorithm Settings"
-msgstr "Algoritmo nustatymai"
+msgid "Distance Tolerance"
+msgstr ""
 
 msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Angle Tolerance"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid "Use HSV based algorithm"
 msgstr ""
 
-msgid "Tolerance Angle"
-msgstr "Tolerancijos kampas"
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
+msgstr ""
 
-msgid "Plugin Settings"
-msgstr "Papildinių nustatymai"
+msgid "How often thinning operation should be applied (Default {0})."
+msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Thinning Iterations"
 msgstr ""
 
 msgid "show address dialog"
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Show Address Dialog after mapping an area"
 msgstr ""
 
 msgid "merge nodes"
 msgstr "sulieti taškus"
 
-msgid "How often thinning operation should be applied (Default {0})."
-msgstr ""
-
-msgid "Thinning Iterations"
+msgid "Merge nodes with existing nodes"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24800,13 +25341,13 @@ msgid "Auto-select building"
 msgstr "Automatiškai pažymėti pastatus"
 
 msgid "Use address nodes under buildings"
-msgstr ""
+msgstr "Naudoti adresų taškus po pastatais"
 
 msgid "Buildings width:"
 msgstr "Pastatų plotis:"
 
 msgid "Length step:"
-msgstr ""
+msgstr "Ilgio žingsnis:"
 
 msgid "Advanced..."
 msgstr "S"
@@ -24827,21 +25368,22 @@ msgid "Merge address points"
 msgstr ""
 
 msgid "Move tags from address nodes inside buildings to building ways"
-msgstr ""
+msgstr "Perkelti žymas iš adresų taškų pastatų viduje į pastatų kelius"
 
 msgid "Select both address nodes and building ways to merge"
-msgstr ""
+msgstr "Pažymėkite ir adresų taškus, ir pastatų kelius suliejimui"
 
 msgid "No address nodes found in the selection"
-msgstr ""
+msgstr "Nerasta adresų taškų pažymėjime"
 
 msgid "No building ways found in the selection"
 msgstr ""
 
 msgid "There is {0} building with multiple address nodes inside"
 msgid_plural "There are {0} buildings with multiple address nodes inside"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Yra {0} pastatas su keliais adresų taškais viduje"
+msgstr[1] "Yra {0} pastatai su keliais adresų taškais viduje"
+msgstr[2] "Yra {0} pastatų su keliais adresų taškais viduje"
 
 msgid "There is {0} building with address conflicts"
 msgid_plural "There are {0} buildings with address conflicts"
@@ -24849,7 +25391,7 @@ msgstr[0] ""
 msgstr[1] ""
 
 msgid "No address nodes inside buildings found"
-msgstr ""
+msgstr "Nerasta adresų taškų pastatų viduje"
 
 msgid "on polygon"
 msgstr ""
@@ -24915,6 +25457,8 @@ msgid ""
 "Town/city {0} not found or not available\n"
 "or action canceled"
 msgstr ""
+"Miestelis/miestas {0} nerastas ar neprieinamas\n"
+"arba atsisakyta veiksmo"
 
 msgid "Choose from..."
 msgstr "Pasirinkite iš..."
@@ -25003,7 +25547,7 @@ msgid "address"
 msgstr "adresas"
 
 msgid "locality"
-msgstr ""
+msgstr "vietovė"
 
 msgid "section"
 msgstr ""
@@ -25113,13 +25657,13 @@ msgid "Address, houses numbers."
 msgstr "Adresas, namų numeriai."
 
 msgid "Locality, hamlet, place."
-msgstr ""
+msgstr "Vietovė, viensėdis, vieta."
 
 msgid "Cadastral sections and subsections."
 msgstr ""
 
 msgid "Municipality administrative borders."
-msgstr ""
+msgstr "Savivaldybės administracinės ribos."
 
 msgid "Raster images grab multiplier:"
 msgstr ""
@@ -25138,7 +25682,7 @@ msgid "Allows an automatic caching"
 msgstr ""
 
 msgid "Oldest files are automatically deleted when this size is exceeded"
-msgstr ""
+msgstr "Seniausi failai automatiškai pašalinami kai viršijamas šis dydis"
 
 msgid ""
 "Automatically selects the first WMS layer if multiple layers exist when "
@@ -25212,7 +25756,7 @@ msgid "Cadastre grab"
 msgstr ""
 
 msgid "Download Image from French Cadastre WMS"
-msgstr ""
+msgstr "Atsiųsti vaizdus iš Prancūzų kadastro WMS"
 
 msgid "Cadastre: {0}"
 msgstr ""
@@ -25249,7 +25793,7 @@ msgid ""
 msgstr ""
 
 msgid "The location {0} is already on screen. Cache not loaded."
-msgstr ""
+msgstr "Vieta {0} jau ekrane. Podėlis neįkeltas."
 
 msgid "(optional)"
 msgstr ""
@@ -25270,6 +25814,8 @@ msgid ""
 "<html>Enter the town,village or city name.<br>Use the syntax and punctuation "
 "known by www.cadastre.gouv.fr .</html>"
 msgstr ""
+"<html>Įveskite miestelio, kaimo ar miesto pavadinimą.<br>Naudokite sintaksę "
+"ir skyrybą žinomą www.cadastre.gouv.fr .</html>"
 
 msgid "Departement"
 msgstr ""
@@ -25305,7 +25851,7 @@ msgid "GeoTiff files (*.tif)"
 msgstr ""
 
 msgid "Export image (only raster images)"
-msgstr ""
+msgstr "Eksportuoti vaizdą (tik taškiniams vaizdams)"
 
 msgid ""
 "Click first corner for image cropping\n"
@@ -25371,6 +25917,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr "Tuščias sluoksnis"
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25487,7 +26036,7 @@ msgid "Conflation: {0}"
 msgstr ""
 
 msgid "Cannot replace geometry."
-msgstr ""
+msgstr "Nepavyko pakeiti geometrijos."
 
 msgid "Zoom to selected primitive(s)"
 msgstr ""
@@ -25574,7 +26123,7 @@ msgid "TangoGPS Files (*.log)"
 msgstr ""
 
 msgid "Coordinates imported: "
-msgstr "Koordinatės įkeltos: "
+msgstr "Importuota koordinačių: "
 
 msgid "Format errors: "
 msgstr ""
@@ -25885,7 +26434,7 @@ msgid "Tag element inside other tag element"
 msgstr ""
 
 msgid "Invalid opening xml tag <{0}> in state {1}"
-msgstr ""
+msgstr "Neteisinga atverianti xml žyma <{0}> būsenoje {1}"
 
 msgid "Condition isn''t finished at </condition> tag"
 msgstr ""
@@ -25894,10 +26443,10 @@ msgid "Closing tag element that was not open"
 msgstr ""
 
 msgid "Invalid closing xml tag </{0}> in state {1}"
-msgstr ""
+msgstr "Neteisinga užverianti xml žyma </{0}> būsenoje {1}"
 
 msgid "Some tags have not been closed; now in state {0}"
-msgstr ""
+msgstr "Kai kurios žymos nebuvo užvertos; dabar būsenoje {0}"
 
 msgid "Key element without attribute k"
 msgstr ""
@@ -26002,7 +26551,7 @@ msgid "Vehicle properties"
 msgstr ""
 
 msgid "Road requirements"
-msgstr ""
+msgstr "Kelio reikalavimai"
 
 msgid "Max. incline up (%, pos.)"
 msgstr ""
@@ -26087,7 +26636,7 @@ msgid "Vehicle"
 msgstr ""
 
 msgid "Restore defaults"
-msgstr ""
+msgstr "Atkurti numatytuosius"
 
 msgid "Visualization"
 msgstr ""
@@ -26120,6 +26669,8 @@ msgid ""
 "Really restore default bookmarks?\n"
 "All manually added or edited bookmarks will be lost!"
 msgstr ""
+"Tikrai atkurti numatytuosius adresyno įrašus?\n"
+"Visi rankiniu būdu pridėti ar redaguoti įrašai bus prarasti!"
 
 msgid "Bookmark reset"
 msgstr ""
@@ -26192,7 +26743,7 @@ msgid "edit bounds for selected defaults"
 msgstr ""
 
 msgid "Download imagery XML bounds"
-msgstr ""
+msgstr "Atsiųsti vaizdų XML ribas"
 
 msgid ""
 "Validating error in file {0}:\n"
@@ -26233,6 +26784,7 @@ msgstr "Vaizdų poslinkiams įrašyti turite būti registruotas OSM naudotojas."
 msgid ""
 "Please enter the reason why you mark this imagery offset as deprecated"
 msgstr ""
+"Įveskite priežastį, kodėl pažymėjote šį vaizdų poslinkį kaip pasenusį"
 
 msgid ""
 "Please enter the reason why you mark this calibration geometry as deprecated"
@@ -26281,7 +26833,7 @@ msgid "Calibration geometries"
 msgstr ""
 
 msgid "Deprecated offsets"
-msgstr ""
+msgstr "Pasenę poslinkiai"
 
 msgid ""
 "The topmost imagery layer has been shifted to presumably match\n"
@@ -26371,6 +26923,10 @@ msgid ""
 "Please make sure it is as precise as possible, and describe a region this "
 "offset is applicable to."
 msgstr ""
+"Registruojate vaizdų poslinkį. Kiti naudotojai šioje vietovėje galės jį "
+"naudoti žymėjimui.\n"
+"Užtikrinkite, kad jis yra kiek įmanoma tikslus ir aprašykite regioną, kuriam "
+"šis poslinkis tinkamas."
 
 msgid ""
 "You are registering a calibration geometry. It should be the most precisely "
@@ -26649,211 +27205,519 @@ msgstr "šiaurės vakarai"
 msgid "west"
 msgstr "vakarai"
 
-msgid "southwest"
-msgstr "pietvakariai"
+msgid "southwest"
+msgstr "pietvakariai"
+
+msgid "south"
+msgstr "pietūs"
+
+msgid "southeast"
+msgstr "pietryčiai"
+
+msgid "coastline"
+msgstr "kranto linija"
+
+msgid "land"
+msgstr "sausuma"
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr "Landsat kaladėlių skiriamoji geba (pikselių laipsniui)"
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr "WMS Sluoksnis"
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+"Landsat kaladėlių skiriamoji geba, matuojama pikseliais laipsniui. "
+"Numatytoji – 4000."
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+"Vienos Landsat kaladėlės dydis, matuojamas pikseliais. Numatytoji – 2000."
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
+msgstr ""
+
+msgid "Connecting"
+msgstr ""
+
+msgid "Connected"
+msgstr ""
+
+msgid "no name"
+msgstr ""
+
+msgid "Live GPS"
+msgstr ""
+
+msgid "Show GPS data."
+msgstr ""
+
+msgid "Status"
+msgstr ""
+
+msgid "Way Info"
+msgstr ""
+
+msgid "Speed"
+msgstr ""
+
+msgid "Course"
+msgstr ""
+
+msgid "LiveGPS layer"
+msgstr ""
+
+msgid "Capture GPS Track"
+msgstr ""
+
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgstr ""
+
+msgid "Center Once"
+msgstr ""
+
+msgid "Center the LiveGPS layer to current position."
+msgstr ""
+
+msgid "Auto-Center"
+msgstr ""
+
+msgid "Continuously center the LiveGPS layer to current position."
+msgstr ""
+
+msgid "Open MapDust"
+msgstr ""
+
+msgid "MapDust bug reports"
+msgstr ""
+
+msgid "Activates the MapDust bug reporter plugin"
+msgstr ""
+
+msgid "Missing input data"
+msgstr ""
+
+msgid "Mapillary Images"
+msgstr "Mapillary vaizdai"
+
+msgid "Mapillary layer"
+msgstr "Mapillary sluoksnis"
+
+msgid "Total images:"
+msgstr ""
+
+msgid "images"
+msgstr ""
+
+msgid "Mapillary"
+msgstr "Mapillary"
+
+msgid "Create Mapillary layer"
+msgstr "Sukurti Mapillary sluoksnį"
+
+msgid "Start Mapillary layer"
+msgstr "Pradėti Mapillary sluoksnį"
+
+msgid "Download Mapillary images in current view"
+msgstr "Atsiųsti Mapillary vaizdus dabartiniame rodinyje"
+
+msgid "Export pictures"
+msgstr "Eksportuoti nuotraukas"
+
+msgid "Export Mapillary pictures"
+msgstr "Eksportuoti Mapillary nuotraukas"
+
+msgid "Export images"
+msgstr ""
+
+msgid "Import pictures"
+msgstr "Importuoti nuotraukas"
+
+msgid "Import local pictures"
+msgstr "Importuoti vietines nuotraukas"
+
+msgid "Import pictures into Mapillary layer"
+msgstr "Importuoti nuotraukas į Mapillary sluoksnį"
+
+msgid "Select pictures"
+msgstr "Pažymėkite nuotraukas"
+
+msgid "Import pictures into sequence"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer in a sequence"
+msgstr ""
 
-msgid "south"
-msgstr "pietūs"
+msgid "Join mode"
+msgstr ""
 
-msgid "southeast"
-msgstr "pietryčiai"
+msgid "Join/unjoin pictures"
+msgstr ""
 
-msgid "coastline"
-msgstr "kranto linija"
+msgid "Join Mapillary pictures"
+msgstr ""
 
-msgid "land"
-msgstr "sausuma"
+msgid "Upload pictures"
+msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "Walk mode"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
-msgstr "Landsat kaladėlių skiriamoji geba (pikselių laipsniui)"
+msgid "Zoom to selected image"
+msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "Zoom to the currently selected Mapillary image"
+msgstr "Priartinti pažymėtą Mapillary vaizdą"
+
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "View in website"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "Copy key"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "WMS Layer"
-msgstr "WMS Sluoksnis"
+msgid "Edit on website"
+msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Export all images"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "Source text"
+msgid "Export selected images"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Select a folder"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Explore"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Select a directory"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Speed limit"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Give way"
+msgstr "Duoti kelią"
+
+msgid "No entry"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Intersection danger"
 msgstr ""
-"Landsat kaladėlių skiriamoji geba, matuojama pikseliais laipsniui. "
-"Numatytoji – 4000."
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "No turn"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Uneven road"
+msgstr "Nelygus kelias"
+
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Years"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Days"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Mapillary filter"
+msgstr "Mapillary filtras"
+
+msgid "Open Mapillary filter dialog"
+msgstr "Atverti Mapillary filtro dialogo langą"
+
+msgid "Downloaded images"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Only images with signs"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Choose signs"
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Mapillary history"
+msgstr "Mapillary istorija"
+
+msgid "Open Mapillary history dialog"
+msgstr "Atverti Mapillary istorijos dialogo langą"
+
+msgid "Open Mapillary window"
+msgstr "Atverti Mapillary langą"
+
+msgid "Mapillary dialog"
+msgstr "Mapillary dialogo langas"
+
+msgid "Open Mapillary main dialog"
+msgstr "Atverti Mapillary pagrindinį dialogo langą"
+
+msgid "Next picture"
+msgstr "Kita nuotrauka"
+
+msgid "Shows the next picture in the sequence"
+msgstr "Parodo kitą nuotrauką sekoje"
+
+msgid "Previous picture"
+msgstr "Ankstesnė nuotrauka"
+
+msgid "Shows the previous picture in the sequence"
+msgstr "Parodo ankstesnę nuotrauką sekoje"
+
+msgid "Jump to red"
+msgstr "Eiti į raudoną"
+
+msgid "Jumps to the picture at the other side of the red line"
+msgstr "Peršoka į nuotrauką kitoje raudonos linijos pusėje"
+
+msgid "Jump to blue"
+msgstr "Eiti į mėlyną"
+
+msgid "Jumps to the picture at the other side of the blue line"
+msgstr "Peršoka į nuotrauką kitoje mėlynos linijos pusėje"
+
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Not connected"
+msgid "Play"
 msgstr ""
 
-msgid "Connecting"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connected"
+msgid "Pause"
 msgstr ""
 
-msgid "no name"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Display hour when the picture was taken"
+msgstr "Rodyti valandą kada nuotrauka padaryta"
+
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
 msgstr "Išmatuotos reikšmės"
 
 msgid "Open the measurement window."
-msgstr ""
+msgstr "Atverti matavimo langą."
 
 msgid "Reset current measurement results and delete measurement path."
 msgstr ""
+"Atstatyti dabartinio matavimo rezultatus ir pašalinti matavimo kelią."
 
 msgid "Path Length"
 msgstr "Kelio ilgis"
@@ -26864,6 +27728,9 @@ msgstr "Pažymėjimo ilgis"
 msgid "Selection Area"
 msgstr "Pažymėjimo plotas"
 
+msgid "Selection Radius"
+msgstr "Pažymėjimo spindulys"
+
 msgid "Angle"
 msgstr "Kampas"
 
@@ -26871,13 +27738,13 @@ msgid "Angle between two selected Nodes"
 msgstr "Kampas tarp dviejų pažymėtų taškų"
 
 msgid "Layer to make measurements"
-msgstr ""
+msgstr "Sluoksnis matavimams"
 
 msgid "measurement mode"
-msgstr ""
+msgstr "Matavimo veiksena"
 
 msgid "Measurements"
-msgstr ""
+msgstr "Matavimai"
 
 msgid "Merge overlap"
 msgstr ""
@@ -26922,47 +27789,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr "Apie papildinį"
 
@@ -27031,7 +27857,7 @@ msgid "Native Password Manager Plugin"
 msgstr ""
 
 msgid "The username and password is protected by {0}."
-msgstr ""
+msgstr "Naudotojo vardas ir slaptažodis apsaugoti {0}."
 
 msgid "username"
 msgstr "naudotojas"
@@ -27060,7 +27886,7 @@ msgid "Save user and password ({0})"
 msgstr ""
 
 msgid "Plain text, JOSM default"
-msgstr ""
+msgstr "Grynasis tekstas, JOSM numatytasis"
 
 msgid "Use {0}"
 msgstr ""
@@ -27092,10 +27918,10 @@ msgid "Split this data by sector (admin_level=10)."
 msgstr ""
 
 msgid "Split by neighbourhood"
-msgstr ""
+msgstr "Skaidyti pagal mikrorajoną"
 
 msgid "Split this data by neighbourhood (admin_level=11)."
-msgstr ""
+msgstr "Skaidyti šiuos duomenis pagal mikrorajoną (admin_level=11)."
 
 msgid "Download open data"
 msgstr ""
@@ -27197,6 +28023,9 @@ msgstr ""
 "Atlikti skirtumų palyginimą tarp dabartinės duomenų aibės ir egzistuojančių "
 "OSM duomenų."
 
+msgid "Tools"
+msgstr "Įrankiai"
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27399,7 +28228,7 @@ msgid ""
 msgstr ""
 
 msgid "Could not load module {0}. Delete from preferences?"
-msgstr ""
+msgstr "Nepavyko įkelti modulio {0}. Pašalinti iš nuostatų?"
 
 msgid "loading module ''{0}'' (version {1})"
 msgstr ""
@@ -27408,6 +28237,8 @@ msgid ""
 "<html>Could not load module {0} because the module<br>main class ''{1}'' was "
 "not found.<br>Delete from preferences?</html>"
 msgstr ""
+"<html>Nepavyko įkelti modulio {0}, nes modulio<br>pagrindinė klasė „{1}“ "
+"nerasta.<br>Pašalinti iš nuostatų?</html>"
 
 msgid "Loading modules ..."
 msgstr ""
@@ -27873,7 +28704,7 @@ msgid "Do you want to save current calibration of layer {0}?"
 msgstr ""
 
 msgid "Load Picture Calibration..."
-msgstr ""
+msgstr "Įkelti paveikslėlių kalibraciją..."
 
 msgid "Loads calibration data from a file"
 msgstr ""
@@ -27897,7 +28728,7 @@ msgid "Calibration reset"
 msgstr ""
 
 msgid "Save Picture Calibration..."
-msgstr ""
+msgstr "Įrašyti paveikslėlių kalibraciją..."
 
 msgid "Saves calibration data to a file"
 msgstr ""
@@ -27906,13 +28737,13 @@ msgid "Saving file failed: {0}"
 msgstr ""
 
 msgid "New picture layer from clipboard"
-msgstr ""
+msgstr "Naujas paveikslėlių sluoksnis iš iškarpinės"
 
 msgid "Supported image files, *.zip, *.kml"
 msgstr ""
 
 msgid "New picture layer from file..."
-msgstr ""
+msgstr "Naujas paveikslėlių sluoksnis iš failo..."
 
 msgid ""
 "KML calibration is in beta stage and may produce incorrectly calibrated "
@@ -28319,7 +29150,7 @@ msgid "Required tags:"
 msgstr ""
 
 msgid "Common tags:"
-msgstr ""
+msgstr "Dažnos žymos:"
 
 msgid "Additional tags:"
 msgstr ""
@@ -28419,6 +29250,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -28573,7 +29425,7 @@ msgid "Revert selection only"
 msgstr ""
 
 msgid "Revert selection and restore deleted objects"
-msgstr ""
+msgstr "Grąžinti pažymėjimą ir atkurti pašalintus objektus"
 
 msgid "Revert changeset"
 msgstr "Grąžinti pakeitimą"
@@ -28590,6 +29442,9 @@ msgstr "Pakeitimas grąžintas"
 msgid "It is not allowed to revert changeset from {0}"
 msgstr "Negalima grąžinti pakeitimo iš {0}"
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -28599,6 +29454,9 @@ msgstr "Objektų istorija"
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr "Ruošiami istorijos duomenys..."
 
@@ -28785,6 +29643,9 @@ msgstr "Nauja reikšmė {0}"
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -28904,7 +29765,7 @@ msgid "Simplify Area"
 msgstr "Supaprastinti Sritį"
 
 msgid "Delete unnecessary nodes from an area."
-msgstr "Šalinti nebūtinus srities taškus."
+msgstr "Šalinti nereikalingus ploto taškus."
 
 msgid "Yes, delete nodes"
 msgstr "Taip, šalinti taškus"
@@ -28963,6 +29824,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -28972,6 +29866,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr "Automatiškai įrašyti LiveData"
 
@@ -29026,7 +29923,7 @@ msgid ""
 msgstr ""
 
 msgid "Edit tags"
-msgstr ""
+msgstr "Keisti žymas"
 
 msgid "Launches the tag editor dialog"
 msgstr ""
@@ -29069,7 +29966,7 @@ msgid "Terrace a house"
 msgstr ""
 
 msgid "Interpolation"
-msgstr ""
+msgstr "Interpoliacija"
 
 msgid "Lowest Number"
 msgstr ""
@@ -29208,9 +30105,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr "Skiriamoji geba:"
 
@@ -29341,6 +30235,7 @@ msgstr "Rodyti visus prieinamus pažymėto atributo parašus."
 
 msgid "Show deleted tags and notes if they were signed before"
 msgstr ""
+"Rodyti pašalintas žymas ir pastabas, jei jos buvo prieš tai pasirašytos"
 
 msgid ""
 "Use default (and maybe existing) GnuPG directory ({0}) to store new keys and "
@@ -29377,7 +30272,7 @@ msgid "Signature Info"
 msgstr ""
 
 msgid "Sorry, there are no Signatures for the selected Node."
-msgstr ""
+msgstr "Atsiprašome, nėra parašų pažymėtam taškui."
 
 msgid "No Signature found"
 msgstr ""
@@ -29388,7 +30283,7 @@ msgid ""
 msgstr ""
 
 msgid "Sorry, there are no Signatures for the selected Attribute."
-msgstr ""
+msgstr "Atsiprašome, nėra parašų pažymėtam atributui."
 
 msgid ""
 "Selected key value pair was:\n"
@@ -29396,7 +30291,7 @@ msgid ""
 msgstr ""
 
 msgid "Sorry, there are no Signatures for the selected Segment."
-msgstr ""
+msgstr "Atsiprašome, nėra parašų pažymėtam segmentui."
 
 msgid "Selected WaySegment was:"
 msgstr ""
@@ -29522,6 +30417,8 @@ msgid ""
 "<html>The number of lanes is not specified for one or more roads; please add "
 "missing lanes tags.</html>"
 msgstr ""
+"<html>Eismo juostų skaičius nėra apibrėžtas vienam ar daugiau kelių; prašome "
+"pridėti trūkstamus juostų žymes.</html>"
 
 msgid ""
 "<html>An error occurred while constructing the model. Please run the "
@@ -29535,16 +30432,16 @@ msgid "Validate turn- and lane-length-relations for consistency."
 msgstr ""
 
 msgid "Turn Lanes"
-msgstr ""
+msgstr "Eismo kryptys"
 
 msgid "Edit turn lanes"
-msgstr ""
+msgstr "Keisti eismo kryptis"
 
 msgid "Quick-Fix"
 msgstr "Greitas Pataisymas"
 
 msgid "Revalidate all turnlanes-relations."
-msgstr ""
+msgstr "Pertikrinti visas eismo kryptis-ryšius"
 
 msgid "Automatically fixes the issue."
 msgstr ""
@@ -29619,7 +30516,7 @@ msgid "Clear the selected roles or delete the selected members"
 msgstr ""
 
 msgid "Insert new relation members from object in the clipboard"
-msgstr ""
+msgstr "Įterpti naujus ryšio narius iš objekto iškarpinėje"
 
 msgid "Move the selected relation members down by one position"
 msgstr ""
@@ -29906,13 +30803,14 @@ msgid "Display and edit list of via-objects in the Basic Editor"
 msgstr ""
 
 msgid "Road signs - Set A"
-msgstr ""
+msgstr "Kelio ženklai - rinkinys A"
 
 msgid "Road signs - Set B"
-msgstr ""
+msgstr "Kelio ženklai - rinkinys B"
 
 msgid "Please select the set of road sign icons to be used in the plugin."
 msgstr ""
+"Prašome pasirinkti kelio ženklų simbolių rinkinį naudojimui papildinyje."
 
 msgid ""
 "Warning: the preference with key ''{0}'' has an unsupported value ''{1}''. "
@@ -30127,7 +31025,7 @@ msgid "Please select one or more ways with intersections of segments."
 msgstr ""
 
 msgid "Align Way Nodes"
-msgstr ""
+msgstr "Lygiuoti kelio taškus"
 
 msgid "Align nodes in a way"
 msgstr ""
@@ -30139,18 +31037,20 @@ msgid "Internal error: number of nodes is {0}."
 msgstr ""
 
 msgid "Extract node"
-msgstr ""
+msgstr "Išimti tašką"
 
 msgid "Extracts node from a way"
-msgstr ""
+msgstr "Išima tašką iš kelio"
 
 msgid ""
 "This tool extracts node from its ways and requires single node to be "
 "selected."
 msgstr ""
+"Šis įrankis išima tašką iš jo kelio ir reikalauja, kad būtų pažymėtas vienas "
+"taškas."
 
 msgid "Extract node from line"
-msgstr ""
+msgstr "Išimti tašką iš linijos"
 
 msgid "Paste Relations"
 msgstr "Įdėti ryšius"
@@ -30160,7 +31060,7 @@ msgid ""
 msgstr ""
 
 msgid "Split Object"
-msgstr "Perskirti Objektą"
+msgstr "Perskirti objektą"
 
 msgid "Split an object at the selected nodes."
 msgstr ""
@@ -30205,16 +31105,16 @@ msgid ""
 msgstr ""
 
 msgid "Copy tags from previous selection"
-msgstr ""
+msgstr "Kopijuoti žymas iš ankstesnio pažymėjimo"
 
 msgid "Pastes tags of previously selected object(s)"
 msgstr "Įdėti anksčiau pažymėtų objektų žymas"
 
 msgid "Add Source Tag"
-msgstr ""
+msgstr "Pridėti šaltinio žymą"
 
 msgid "Add remembered source tag"
-msgstr ""
+msgstr "Pridėti prisimintą šaltinio žymą"
 
 msgid "UnGlue Relation"
 msgstr "Atjungti ryšį"
@@ -30233,25 +31133,25 @@ msgid "Change relation member for {0} {1}"
 msgstr ""
 
 msgid "Circle arc"
-msgstr ""
+msgstr "Apskritimo lankas"
 
 msgid "Create a circle arc"
-msgstr ""
+msgstr "Sukurti apskritimo lanką"
 
 msgid "Select custom URL"
-msgstr ""
+msgstr "Pasirinkite pritaikytą URL"
 
 msgid "Please select one of custom URLs (configured in Preferences)"
-msgstr ""
+msgstr "Pasirinkite vieną iš pritaikytų URL (sukonfigūruotą nuostatose)"
 
 msgid "Ask every time"
 msgstr "Visą laiką klausti"
 
 msgid "Configure custom URL"
-msgstr ""
+msgstr "Konfigūruoti pritaikytą URL"
 
 msgid "Open custom URL"
-msgstr ""
+msgstr "Atverti pritaikytą URL"
 
 msgid "Opens specified URL browser"
 msgstr ""
@@ -30277,15 +31177,21 @@ msgid ""
 "latitude/longitude <br/> Your can manually load settings from file "
 "<b>customurl.txt</b> in JOSM folder"
 msgstr ""
+"Redaguokite pritaikytus URL ir pasirinkite vieną eilutę naudojimui su "
+"įrankiu<br/> <b>{key}</b> pakeičiama žymos reikšme<br/> "
+"<b>{#id}</b> pakeičiama elemento ID<br/> <b>{#type}</b> "
+"pakeičiama į „node“, „way“ ar „relation“ <br/> <b>{#lat} , "
+"{#lon}</b> pakeičiama žemėlapio centro platuma/ilguma<br/> Galite "
+"rankiniu būdu įkelti nustatymus iš failo <b>customurl.txt</b> JOSM aplanke"
 
 msgid "Custom URL configuration"
-msgstr ""
+msgstr "Pritaikyto URL konfigūracija"
 
 msgid "Lat Lon tool"
-msgstr ""
+msgstr "Plat Ilg įrankis"
 
 msgid "Create geometry by entering lat lon coordinates for it."
-msgstr ""
+msgstr "Sukurti geometriją įvedant jos platumos, ilgumos koordinates."
 
 msgid ""
 "Enter the coordinates for the new nodes, one for each line.<br/>If you enter "
@@ -30315,7 +31221,7 @@ msgid "Tag multiple objects [alpha]"
 msgstr ""
 
 msgid "Edit tags of object list in table"
-msgstr ""
+msgstr "Keisti objektų sąrašo lentelėje žymas"
 
 msgid "Tag multiple objects"
 msgstr ""
@@ -30348,10 +31254,10 @@ msgid "Multitag Background: highlight"
 msgstr ""
 
 msgid "Replace Geometry"
-msgstr ""
+msgstr "Pakeisti geometriją"
 
 msgid "Replace geometry of selected object with a new one"
-msgstr ""
+msgstr "Pakeisti pažymėto objekto geometriją nauja"
 
 msgid ""
 "This tool replaces geometry of one object with another, and so requires "
@@ -30367,7 +31273,7 @@ msgid "Node belongs to way(s), cannot replace."
 msgstr ""
 
 msgid "Replace geometry for node {0}"
-msgstr ""
+msgstr "Pakeisti geometriją taškui {0}"
 
 msgid "Relation is not a multipolygon, cannot be used as a replacement."
 msgstr ""
@@ -30387,9 +31293,11 @@ msgstr ""
 
 msgid "Exceeded iteration limit for robust method, using simpler method."
 msgstr ""
+"Viršytas veiksmingo metodo iteracijų limitas, naudojamas paprastesnis "
+"metodas."
 
 msgid "Replace geometry for way {0}"
-msgstr ""
+msgstr "Pakeisti geometriją keliui {0}"
 
 msgid "Range of child primitives count"
 msgstr ""
@@ -30528,7 +31436,7 @@ msgid "Video: {0}"
 msgstr "Video: {0}"
 
 msgid "Backward"
-msgstr ""
+msgstr "Atgal"
 
 msgid "jumps n sec back"
 msgstr ""
@@ -30558,7 +31466,7 @@ msgid "jumps to the entered gps time"
 msgstr ""
 
 msgid "Loop"
-msgstr ""
+msgstr "Kartoti"
 
 msgid "loops n sec around current position"
 msgstr ""
@@ -30570,7 +31478,7 @@ msgid "follows the video icon automatically"
 msgstr ""
 
 msgid "Subtitles"
-msgstr ""
+msgstr "Subtitrai"
 
 msgid "Show subtitles in video"
 msgstr ""
@@ -30704,9 +31612,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr "Pažymėti kelią"
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
@@ -30748,7 +31653,7 @@ msgid "{0}.Wikipedia.org: {1}"
 msgstr "{0}.Wikipedia.org: {1}"
 
 msgid "Fetches all coordinates from Wikipedia in the current view"
-msgstr ""
+msgstr "Gauna visas koordinates iš Vikipedijos dabartiniame rodinyje"
 
 msgid "coordinates"
 msgstr "koordinatės"
@@ -30757,7 +31662,7 @@ msgid "Category"
 msgstr "Kategorija"
 
 msgid "Fetches a list of all Wikipedia articles of a category"
-msgstr ""
+msgstr "Gauna sąrašą visų Vikipedijos straipsnių kategorijoje"
 
 msgid "Enter the Wikipedia category"
 msgstr "Įveskite Vikipedijos kategoriją"
@@ -30787,6 +31692,7 @@ msgid ""
 "Adds a ''wikipedia'' tag corresponding to this article to the selected "
 "objects"
 msgstr ""
+"Prideda „wikipedia“ žymą atitinkančią šį straipsnį pažymėtiems objektams"
 
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
 msgstr ""
diff --git a/i18n/po/lv.po b/i18n/po/lv.po
index 46474c6..3be0972 100644
--- a/i18n/po/lv.po
+++ b/i18n/po/lv.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2012-10-03 22:16+0000\n"
 "Last-Translator: Dirk Stöcker <launchpad at dstoecker.de>\n"
 "Language-Team: Latvian <lv at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:48+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:51+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: lv\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -97,21 +97,18 @@ msgstr ""
 msgid "Updating user interface"
 msgstr "Atjaunina lietotāja saskarni"
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "Ignorēju sliktformētu faila URL: \"{0}"
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "Ignorēju sliktformētu URL: \"{0}\""
 
 msgid "Warning"
 msgstr "Uzmanību"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "Ignorēju sliktformētu faila URL: \"{0}"
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr "Parametrs \"downloadgps\" nepieņem failu vārdus vai failu URL"
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "Ignorēju sliktformētu URL: \"{0}\""
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -449,6 +446,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr "Sadalīt iezīmētos mezglus vienmērīgos attālumos gar līniju."
 
@@ -1040,6 +1040,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr "Ielīmēt"
 
@@ -1956,15 +1980,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr ""
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -1986,6 +2001,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2104,9 +2128,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2320,9 +2341,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr ""
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2536,6 +2563,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2578,6 +2609,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3028,6 +3062,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3145,10 +3197,44 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3338,6 +3424,12 @@ msgstr ""
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3365,13 +3457,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -3987,9 +4079,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -3999,12 +4088,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4185,13 +4286,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4388,6 +4489,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4601,43 +4703,54 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
 msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
 msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
 msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
 msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
-msgid "Menu: {0}"
+msgctxt "menu"
+msgid "Help"
 msgstr ""
 
-msgid "Save and load the current session (list of layers, etc.)"
+msgid "Menu: {0}"
 msgstr ""
 
 msgid "Edit toolbar"
@@ -4661,6 +4774,7 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
 msgstr ""
 
@@ -4783,58 +4897,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr ""
-
-msgid "Pos."
+msgid " ({0})"
 msgstr ""
 
-msgid "Role"
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5263,6 +5335,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr ""
+
 msgid "Primitive"
 msgstr ""
 
@@ -5503,6 +5578,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5649,6 +5727,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5752,7 +5865,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5880,6 +5993,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5889,17 +6007,48 @@ msgstr ""
 msgid "unknown"
 msgstr ""
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -5945,10 +6094,16 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
-msgid "Activate"
+msgid "Gamma"
 msgstr ""
 
-msgid "Activate the selected layer"
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
+msgid "Activate"
+msgstr ""
+
+msgid "Activate the selected layer"
 msgstr ""
 
 msgid "Activate layer"
@@ -6074,6 +6229,12 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
+msgid "Mini map"
+msgstr ""
+
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
 msgid "List of notes"
 msgstr ""
 
@@ -6132,10 +6293,15 @@ msgstr "Objekta ID:"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "Ievadiet lejupielādējamā objekta ID"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6164,6 +6330,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr ""
 
+msgid "Selection"
+msgstr ""
+
 msgid "Open a selection list window."
 msgstr ""
 
@@ -6254,6 +6423,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -6848,6 +7023,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6939,14 +7120,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7119,6 +7299,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7654,6 +7840,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8499,6 +8688,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr ""
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr ""
 
@@ -8552,6 +8841,9 @@ msgstr "Saglabāt GPX failu"
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8572,7 +8864,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8655,80 +8947,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr "Saglabāt OSM failu"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-
-msgid "Auto Zoom"
-msgstr ""
-
-msgid "Auto load tiles"
-msgstr ""
-
-msgid "Show Errors"
-msgstr ""
-
-msgid "Load Tile"
-msgstr ""
-
-msgid "Show Tile Info"
-msgstr ""
-
-msgid "Load All Tiles"
-msgstr ""
-
-msgid "Load All Error Tiles"
-msgstr ""
-
-msgid "Increase zoom"
-msgstr ""
-
-msgid "Decrease zoom"
-msgstr ""
-
-msgid "Snap to tile size"
-msgstr ""
-
-msgid "Flush Tile Cache"
-msgstr ""
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
@@ -8738,56 +8956,30 @@ msgstr ""
 msgid "No validation errors"
 msgstr ""
 
-msgid "Blank Layer"
-msgstr ""
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "Download visible tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-
-msgid "Change resolution"
-msgstr ""
-
-msgid "Reload erroneous tiles"
-msgstr ""
-
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Automatic downloading"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Zoom to native resolution"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Supported projections are: {0}"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Save WMS file"
+msgid "Try Again"
 msgstr ""
 
-msgid "Correlate to GPX"
+msgid "No images could be matched!"
 msgstr ""
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
@@ -8874,24 +9066,9 @@ msgstr ""
 msgid "Offset:"
 msgstr ""
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
 msgid "Correlate"
 msgstr ""
 
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9085,9 +9262,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr ""
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9150,9 +9324,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9778,16 +9949,16 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 
 msgid "Would you like to restart now?"
 msgstr ""
 
-msgid "Icon paths:"
+msgid "Download plugins"
+msgstr ""
+
+msgid "Icon paths:"
 msgstr ""
 
 msgid "Short Description:"
@@ -10579,6 +10750,21 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
+msgid "1. Enter getCapabilities URL"
+msgstr ""
+
+msgid "2. Enter name for this layer"
+msgstr ""
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr ""
 
@@ -10597,6 +10783,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10618,6 +10816,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10660,9 +10861,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr ""
 
@@ -10687,36 +10885,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11652,6 +11835,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] ""
@@ -11760,6 +11951,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12013,6 +12207,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12553,6 +12750,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12938,6 +13138,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13932,6 +14145,9 @@ msgstr ""
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr ""
+
 msgid "Blue:"
 msgstr ""
 
@@ -13971,7 +14187,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -13983,9 +14199,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14094,6 +14307,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14107,12 +14323,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14149,10 +14371,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14179,6 +14407,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14203,7 +14434,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14218,6 +14449,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14230,12 +14464,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14256,6 +14484,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14288,10 +14519,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14321,6 +14549,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14336,154 +14570,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14498,9 +14738,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14630,6 +14879,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14645,7 +14909,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -14971,6 +15235,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15055,11 +15324,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15113,7 +15377,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15128,9 +15392,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15211,6 +15472,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15249,6 +15518,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15324,9 +15596,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15732,6 +16001,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15756,10 +16033,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15776,6 +16049,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15792,11 +16069,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15812,6 +16101,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15824,6 +16117,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15851,6 +16148,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16242,6 +16551,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16318,6 +16630,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr ""
 
@@ -16855,6 +17170,12 @@ msgstr ""
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17044,6 +17365,11 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
 msgstr ""
 
@@ -17097,6 +17423,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17238,13 +17568,127 @@ msgstr ""
 msgid "public"
 msgstr ""
 
-msgid "Pier"
+msgid "Marine Fuel"
 msgstr ""
 
-msgid "Lock Gate"
+msgid "Agip"
 msgstr ""
 
-msgid "Turning Point"
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
+msgid "Pier"
+msgstr ""
+
+msgid "Lock Gate"
+msgstr ""
+
+msgid "Turning Point"
 msgstr ""
 
 msgid "Slipway"
@@ -17354,6 +17798,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -17477,78 +17924,6 @@ msgstr ""
 msgid "Fuel"
 msgstr ""
 
-msgid "Agip"
-msgstr ""
-
-msgid "Aral"
-msgstr ""
-
-msgid "Avia"
-msgstr ""
-
-msgid "BP"
-msgstr ""
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr ""
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
 msgid "With shop"
 msgstr ""
 
@@ -17558,51 +17933,12 @@ msgstr ""
 msgid "kiosk"
 msgstr ""
 
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -17821,9 +18157,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17842,6 +18175,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18044,6 +18380,12 @@ msgstr ""
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18134,6 +18476,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18348,6 +18693,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18835,7 +19183,7 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
@@ -18844,43 +19192,70 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
-msgid "Glass"
+msgid "Cardboard"
 msgstr ""
 
-msgid "Paper"
+msgid "Electrical Appliances"
 msgstr ""
 
-msgid "Scrap Metal"
+msgid "Glass"
 msgstr ""
 
-msgid "container"
+msgid "Glass Bottles"
 msgstr ""
 
-msgid "centre"
+msgid "Green Waste"
 msgstr ""
 
-msgid "Waste Basket/Trash Can"
+msgid "Paper"
 msgstr ""
 
-msgid "Waste Disposal/Dumpster"
+msgid "Plastic"
 msgstr ""
 
-msgid "Sanitary Dump Station"
+msgid "Plastic Bottles"
 msgstr ""
 
-msgid "Suction pumpout"
+msgid "Plastic Packaging"
 msgstr ""
 
-msgid "Gravity drain for hose"
+msgid "Scrap Metal"
 msgstr ""
 
-msgid "Casette or Elsan Disposal"
+msgid "Shoes"
 msgstr ""
 
-msgid "Operation times"
+msgid "Small Appliances"
 msgstr ""
 
-msgid "Backrest"
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
+msgstr ""
+
+msgid "Waste Basket/Trash Can"
+msgstr ""
+
+msgid "Waste Disposal/Dumpster"
+msgstr ""
+
+msgid "Sanitary Dump Station"
+msgstr ""
+
+msgid "Suction pumpout"
+msgstr ""
+
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
+msgstr ""
+
+msgid "Operation times"
+msgstr ""
+
+msgid "Backrest"
 msgstr ""
 
 msgid "Amount of Seats"
@@ -19060,6 +19435,9 @@ msgstr ""
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr ""
 
@@ -19235,12 +19613,18 @@ msgstr ""
 msgid "Basketball"
 msgstr ""
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr ""
 
@@ -19256,13 +19640,13 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
@@ -19286,9 +19670,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19307,9 +19688,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -19382,6 +19760,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20702,9 +21088,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -21717,10 +22100,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22147,6 +22530,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22171,6 +22557,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22231,6 +22629,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22321,9 +22722,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22693,6 +23103,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22747,9 +23160,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23493,47 +23903,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23542,10 +23961,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24148,6 +24579,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr ""
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25245,374 +25679,680 @@ msgid ""
 "highlight tracks"
 msgstr ""
 
-msgid "Delete this"
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
 msgstr ""
 
-msgid "Delete this&older"
+msgid "Connecting"
 msgstr ""
 
-msgid "km/h"
+msgid "Connected"
 msgstr ""
 
-msgid "Track name: "
+msgid "no name"
 msgstr ""
 
-msgid "Update IRS adjustment layer"
+msgid "Live GPS"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid "Show GPS data."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Speed"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Course"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
+msgid "Explore"
 msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25633,6 +26373,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -25691,47 +26434,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -25964,6 +26666,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr ""
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27181,6 +27886,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27352,6 +28078,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27361,6 +28090,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27541,6 +28273,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27719,6 +28454,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27728,6 +28496,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -27964,9 +28735,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29449,9 +30217,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/mk.po b/i18n/po/mk.po
index c037638..bdb6f22 100644
--- a/i18n/po/mk.po
+++ b/i18n/po/mk.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2013-05-11 04:37+0000\n"
 "Last-Translator: Bojan Jankuloski <bojan.jankuloski at gmail.com>\n"
 "Language-Team: Macedonian <mk at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:49+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:52+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: mk\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -97,22 +97,19 @@ msgstr "Ги покревам нагодувањата за подлогата"
 msgid "Updating user interface"
 msgstr "Го подновувам корисничкиот посредник"
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "Ја занемарувам неправилната податотечна URL-адреса : „{0}“"
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "Ја занемарувам неправилната URL-адреса: „{0}“"
 
 msgid "Warning"
 msgstr "Предупредување"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "Ја занемарувам неправилната податотечна URL-адреса : „{0}“"
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 "Параметарот „downloadgps“ не прифаќа имиња и URL-адреси на податотеки"
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "Ја занемарувам неправилната URL-адреса: „{0}“"
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -447,6 +444,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
 
@@ -1032,6 +1032,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr ""
 
@@ -1948,15 +1972,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr ""
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -1978,6 +1993,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2096,9 +2120,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2312,9 +2333,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr ""
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2528,6 +2555,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2570,6 +2601,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3020,6 +3054,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3137,10 +3189,44 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3330,6 +3416,12 @@ msgstr ""
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3357,13 +3449,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -3979,9 +4071,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -3991,12 +4080,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4177,13 +4278,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4381,6 +4482,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4594,43 +4696,54 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
 msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
 msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
 msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
 msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
-msgid "Menu: {0}"
+msgctxt "menu"
+msgid "Help"
 msgstr ""
 
-msgid "Save and load the current session (list of layers, etc.)"
+msgid "Menu: {0}"
 msgstr ""
 
 msgid "Edit toolbar"
@@ -4654,6 +4767,7 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
 msgstr ""
 
@@ -4776,58 +4890,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr ""
-
-msgid "Pos."
+msgid " ({0})"
 msgstr ""
 
-msgid "Role"
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5256,6 +5328,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr ""
+
 msgid "Primitive"
 msgstr ""
 
@@ -5496,6 +5571,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5642,6 +5720,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5745,7 +5858,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5873,6 +5986,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5882,17 +6000,48 @@ msgstr ""
 msgid "unknown"
 msgstr ""
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -5938,10 +6087,16 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
-msgid "Activate"
+msgid "Gamma"
 msgstr ""
 
-msgid "Activate the selected layer"
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
+msgid "Activate"
+msgstr ""
+
+msgid "Activate the selected layer"
 msgstr ""
 
 msgid "Activate layer"
@@ -6067,6 +6222,12 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
+msgid "Mini map"
+msgstr ""
+
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
 msgid "List of notes"
 msgstr ""
 
@@ -6125,10 +6286,15 @@ msgstr ""
 msgid "Enter the ID of the object that should be downloaded"
 msgstr ""
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6157,6 +6323,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr ""
 
+msgid "Selection"
+msgstr ""
+
 msgid "Open a selection list window."
 msgstr ""
 
@@ -6247,6 +6416,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -6841,6 +7016,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6932,14 +7113,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7112,6 +7292,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7647,6 +7833,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8492,6 +8681,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr ""
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr ""
 
@@ -8545,6 +8834,9 @@ msgstr ""
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8565,7 +8857,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8648,80 +8940,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr ""
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-
-msgid "Auto Zoom"
-msgstr ""
-
-msgid "Auto load tiles"
-msgstr ""
-
-msgid "Show Errors"
-msgstr ""
-
-msgid "Load Tile"
-msgstr ""
-
-msgid "Show Tile Info"
-msgstr ""
-
-msgid "Load All Tiles"
-msgstr ""
-
-msgid "Load All Error Tiles"
-msgstr ""
-
-msgid "Increase zoom"
-msgstr ""
-
-msgid "Decrease zoom"
-msgstr ""
-
-msgid "Snap to tile size"
-msgstr ""
-
-msgid "Flush Tile Cache"
-msgstr ""
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
@@ -8731,56 +8949,30 @@ msgstr ""
 msgid "No validation errors"
 msgstr ""
 
-msgid "Blank Layer"
-msgstr ""
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "Download visible tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-
-msgid "Change resolution"
-msgstr ""
-
-msgid "Reload erroneous tiles"
-msgstr ""
-
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Automatic downloading"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Zoom to native resolution"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Supported projections are: {0}"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Save WMS file"
+msgid "Try Again"
 msgstr ""
 
-msgid "Correlate to GPX"
+msgid "No images could be matched!"
 msgstr ""
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
@@ -8867,24 +9059,9 @@ msgstr ""
 msgid "Offset:"
 msgstr ""
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
 msgid "Correlate"
 msgstr ""
 
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9078,9 +9255,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr ""
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9143,9 +9317,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9771,16 +9942,16 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 
 msgid "Would you like to restart now?"
 msgstr ""
 
-msgid "Icon paths:"
+msgid "Download plugins"
+msgstr ""
+
+msgid "Icon paths:"
 msgstr ""
 
 msgid "Short Description:"
@@ -10572,6 +10743,21 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
+msgid "1. Enter getCapabilities URL"
+msgstr ""
+
+msgid "2. Enter name for this layer"
+msgstr ""
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr ""
 
@@ -10590,6 +10776,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10611,6 +10809,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10653,9 +10854,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr ""
 
@@ -10680,36 +10878,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11646,6 +11829,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] ""
@@ -11754,6 +11945,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12007,6 +12201,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12543,6 +12740,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12928,6 +13128,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13922,6 +14135,9 @@ msgstr ""
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr ""
+
 msgid "Blue:"
 msgstr ""
 
@@ -13961,7 +14177,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -13973,9 +14189,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14084,6 +14297,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14097,12 +14313,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14139,10 +14361,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14169,6 +14397,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14193,7 +14424,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14208,6 +14439,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14220,12 +14454,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14246,6 +14474,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14278,10 +14509,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14311,6 +14539,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14326,154 +14560,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14488,9 +14728,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14620,6 +14869,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14635,7 +14899,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -14961,6 +15225,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15045,11 +15314,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15103,7 +15367,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15118,9 +15382,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15201,6 +15462,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15239,6 +15508,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15314,9 +15586,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15722,6 +15991,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15746,10 +16023,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15766,6 +16039,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15782,11 +16059,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15802,6 +16091,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15814,6 +16107,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15841,6 +16138,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16232,6 +16541,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16308,6 +16620,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr ""
 
@@ -16845,6 +17160,12 @@ msgstr ""
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17034,6 +17355,11 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
 msgstr ""
 
@@ -17087,6 +17413,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17228,13 +17558,127 @@ msgstr ""
 msgid "public"
 msgstr ""
 
-msgid "Pier"
+msgid "Marine Fuel"
 msgstr ""
 
-msgid "Lock Gate"
+msgid "Agip"
 msgstr ""
 
-msgid "Turning Point"
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
+msgid "Pier"
+msgstr ""
+
+msgid "Lock Gate"
+msgstr ""
+
+msgid "Turning Point"
 msgstr ""
 
 msgid "Slipway"
@@ -17344,6 +17788,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -17467,78 +17914,6 @@ msgstr ""
 msgid "Fuel"
 msgstr ""
 
-msgid "Agip"
-msgstr ""
-
-msgid "Aral"
-msgstr ""
-
-msgid "Avia"
-msgstr ""
-
-msgid "BP"
-msgstr ""
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr ""
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
 msgid "With shop"
 msgstr ""
 
@@ -17548,51 +17923,12 @@ msgstr ""
 msgid "kiosk"
 msgstr ""
 
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -17811,9 +18147,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17832,6 +18165,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18034,6 +18370,12 @@ msgstr ""
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18124,6 +18466,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18338,6 +18683,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18825,7 +19173,7 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
@@ -18834,43 +19182,70 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
-msgid "Glass"
+msgid "Cardboard"
 msgstr ""
 
-msgid "Paper"
+msgid "Electrical Appliances"
 msgstr ""
 
-msgid "Scrap Metal"
+msgid "Glass"
 msgstr ""
 
-msgid "container"
+msgid "Glass Bottles"
 msgstr ""
 
-msgid "centre"
+msgid "Green Waste"
 msgstr ""
 
-msgid "Waste Basket/Trash Can"
+msgid "Paper"
 msgstr ""
 
-msgid "Waste Disposal/Dumpster"
+msgid "Plastic"
 msgstr ""
 
-msgid "Sanitary Dump Station"
+msgid "Plastic Bottles"
 msgstr ""
 
-msgid "Suction pumpout"
+msgid "Plastic Packaging"
 msgstr ""
 
-msgid "Gravity drain for hose"
+msgid "Scrap Metal"
 msgstr ""
 
-msgid "Casette or Elsan Disposal"
+msgid "Shoes"
 msgstr ""
 
-msgid "Operation times"
+msgid "Small Appliances"
 msgstr ""
 
-msgid "Backrest"
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
+msgstr ""
+
+msgid "Waste Basket/Trash Can"
+msgstr ""
+
+msgid "Waste Disposal/Dumpster"
+msgstr ""
+
+msgid "Sanitary Dump Station"
+msgstr ""
+
+msgid "Suction pumpout"
+msgstr ""
+
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
+msgstr ""
+
+msgid "Operation times"
+msgstr ""
+
+msgid "Backrest"
 msgstr ""
 
 msgid "Amount of Seats"
@@ -19050,6 +19425,9 @@ msgstr ""
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr ""
 
@@ -19225,12 +19603,18 @@ msgstr ""
 msgid "Basketball"
 msgstr ""
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr ""
 
@@ -19246,13 +19630,13 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
@@ -19276,9 +19660,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19297,9 +19678,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -19372,6 +19750,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20692,9 +21078,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -21707,10 +22090,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22137,6 +22520,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22161,6 +22547,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22221,6 +22619,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22311,9 +22712,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22683,6 +23093,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22737,9 +23150,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23483,47 +23893,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23532,10 +23951,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24138,6 +24569,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr ""
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25235,374 +25669,680 @@ msgid ""
 "highlight tracks"
 msgstr ""
 
-msgid "Delete this"
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
 msgstr ""
 
-msgid "Delete this&older"
+msgid "Connecting"
 msgstr ""
 
-msgid "km/h"
+msgid "Connected"
 msgstr ""
 
-msgid "Track name: "
+msgid "no name"
 msgstr ""
 
-msgid "Update IRS adjustment layer"
+msgid "Live GPS"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid "Show GPS data."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Speed"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Course"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
+msgid "Explore"
 msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25623,6 +26363,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -25681,47 +26424,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -25954,6 +26656,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr ""
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27171,6 +27876,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27342,6 +28068,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27351,6 +28080,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27531,6 +28263,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27709,6 +28444,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27718,6 +28486,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -27954,9 +28725,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29439,9 +30207,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/mr.po b/i18n/po/mr.po
new file mode 100644
index 0000000..f2607eb
--- /dev/null
+++ b/i18n/po/mr.po
@@ -0,0 +1,30334 @@
+# Marathi translation for josm
+# Copyright (c) 2015 Rosetta Contributors and Canonical Ltd 2015
+# This file is distributed under the same license as the josm package.
+# FIRST AUTHOR <EMAIL at ADDRESS>, 2015.
+# Singleton <singleton47+ubuntuone at live.com>, 2015.
+msgid ""
+msgstr ""
+"Project-Id-Version: josm\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL at ADDRESS>\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
+"PO-Revision-Date: 2015-05-24 23:45+0000\n"
+"Last-Translator: Singleton <singleton47+ubuntuone at live.com>\n"
+"Language-Team: Marathi <mr at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:53+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
+"Language: mr\n"
+
+msgid "{0}: option ''{1}'' is ambiguous"
+msgstr "{0}: पर्याय ''{1}'' अनेकार्थी आहे"
+
+msgid "{0}: option ''--{1}'' does not allow an argument"
+msgstr ""
+
+msgid "{0}: option ''{1}{2}'' does not allow an argument"
+msgstr ""
+
+msgid "{0}: option ''{1}'' requires an argument"
+msgstr ""
+
+msgid "{0}: unrecognized option ''--{1}''"
+msgstr "{0}: अपरिचित पर्याय ''--{1}''"
+
+msgid "{0}: unrecognized option ''{1}{2}''"
+msgstr "{0}: अपरिचित पर्याय ''{1}{2}''"
+
+msgid "{0}: illegal option -- {1}"
+msgstr "{0}: अवैध पर्याय -- {1}"
+
+msgid "{0}: invalid option -- {1}"
+msgstr ""
+
+msgid "{0}: option requires an argument -- {1}"
+msgstr ""
+
+msgid "Invalid value {0} for parameter ''has_arg''"
+msgstr ""
+
+msgid "Background Terms of Use"
+msgstr "पार्श्वभूमि वापरावयाच्या अटी"
+
+msgid "Opening link not supported on current platform (''{0}'')"
+msgstr ""
+
+msgid "ERROR: {0}"
+msgstr ""
+
+msgid "WARNING: {0}"
+msgstr "ताकीद: {0}"
+
+msgid "INFO: {0}"
+msgstr "सूचना: {0}"
+
+msgid "DEBUG: {0}"
+msgstr ""
+
+msgid "Cause: "
+msgstr "कारण: "
+
+msgid "Executing platform startup hook"
+msgstr ""
+
+msgid "Building main menu"
+msgstr ""
+
+msgid "Help"
+msgstr "मदत"
+
+msgid "Initializing OSM API"
+msgstr "OSM API प्रारंभत आहे"
+
+msgid "Initializing validator"
+msgstr ""
+
+msgid "Initializing presets"
+msgstr ""
+
+msgid "Initializing map styles"
+msgstr "नकाशा शैली प्रारंभत आहे"
+
+msgid "Loading imagery preferences"
+msgstr ""
+
+msgid "Updating user interface"
+msgstr ""
+
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr ""
+
+msgid "Warning"
+msgstr "ताकीद"
+
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr ""
+
+msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
+msgstr "प्रमाणक \"downloadgps\" संचिका नावे किंवा संचिका URLs स्वीकारत नाही"
+
+msgid ""
+"<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
+"can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
+"compatible) version of JOSM.</li></ul>More Info:"
+msgstr ""
+"<h2>JOSM साठी जावा आवृत्ती {0} असणे आवश्यक आहे.</h2>आढळलेली जावा आवृत्ती: "
+"{1}.<br>आपण <ul><li>आपले जावा (JRE) अद्ययावत करू शकता अथवा</li><li>JOSM ची "
+"आधीची (जावा {2} शी सुसंगत) आवृत्ती वापरू शकता.</li></ul>अधिक माहिती:"
+
+msgid "Exit JOSM"
+msgstr "JOSM मधून बाहेर पडा"
+
+msgid "Continue, try anyway"
+msgstr ""
+
+msgid "Error"
+msgstr ""
+
+msgid "About"
+msgstr "परिचय"
+
+msgid "Display the about screen."
+msgstr "परिचय पटल दाखवा"
+
+msgid "Java OpenStreetMap Editor"
+msgstr "जावा ओपनस्ट्रीटमॅप संपादक"
+
+msgid "Version {0}"
+msgstr "आवृत्ती {0}"
+
+msgid "Last change at {0}"
+msgstr "शेवटचा बदल {0} ला"
+
+msgid "Java Version {0}"
+msgstr "जावा आवृत्ती {0}"
+
+msgid "Homepage"
+msgstr "मुखपृष्ठ"
+
+msgid "Bug Reports"
+msgstr ""
+
+msgid "Info"
+msgstr "माहिती"
+
+msgid "Readme"
+msgstr "मला वाचा"
+
+msgid "Revision"
+msgstr "पुनरावलोकन"
+
+msgid "Contribution"
+msgstr "योगदान"
+
+msgid "License"
+msgstr "परवाना"
+
+msgid "Plugins"
+msgstr ""
+
+msgid "About JOSM..."
+msgstr "JOSM बद्दल..."
+
+msgid ""
+"You are about to launch {0} browser window.<br>This may both clutter your "
+"screen with browser windows<br>and take some time to finish."
+msgid_plural ""
+"You are about to launch {0} browser windows.<br>This may both clutter your "
+"screen with browser windows<br>and take some time to finish."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Continue"
+msgstr "चालू ठेवा"
+
+msgid "Click to continue and to open {0} browser"
+msgid_plural "Click to continue and to open {0} browsers"
+msgstr[0] "पुढे जाऊन {0} न्याहाळक उघडण्यासाठी टिचकी द्या"
+msgstr[1] "पुढे जाऊन {0} न्याहाळक उघडण्यासाठी टिचकी द्या"
+
+msgid "Cancel"
+msgstr "रद्द करा"
+
+msgid "Click to abort launching external browsers"
+msgstr ""
+
+msgid "Please select at least one already uploaded node, way, or relation."
+msgstr ""
+
+msgid "Please select the target layer."
+msgstr "कृपया लक्ष्य थर निवडा"
+
+msgid "Select target layer"
+msgstr "लक्ष्य थर निवडा"
+
+msgid "Merge"
+msgstr "विलीन करा"
+
+msgid ""
+"<html>There are no layers the source layer<br>''{0}''<br>could be merged "
+"to.</html>"
+msgstr ""
+"<html>असे थर नाहीत की ज्यांत स्रोत थर<br>''{0}''<br>विलीन केला जाऊ "
+"शकेल.</html>"
+
+msgid "No target layers"
+msgstr "लक्ष्य थर नाहीत"
+
+msgid "Select"
+msgstr "निवडा"
+
+msgid ""
+"Set the selected elements on the map to the selected items in the list above."
+msgstr ""
+
+msgid "Add imagery layer {0}"
+msgstr ""
+
+msgid "Select image format for WMS layer"
+msgstr "WMS थरासाठी प्रतिमा प्रारूप निवडा"
+
+msgid "Select WMS layers"
+msgstr "WMS थर निवडा"
+
+msgid "Add layers"
+msgstr ""
+
+msgid "Invalid service URL."
+msgstr ""
+
+msgid "WMS Error"
+msgstr ""
+
+msgid "Could not retrieve WMS layer list."
+msgstr ""
+
+msgid "Could not parse WMS layer list."
+msgstr ""
+
+msgid "Add Node..."
+msgstr ""
+
+msgid "Add a node by entering latitude / longitude or easting / northing."
+msgstr ""
+
+msgid "Edit: {0}"
+msgstr "संपादन: {0}"
+
+msgid "Align Nodes in Circle"
+msgstr "गाठी वर्तुळात मांडा"
+
+msgid "Move the selected nodes into a circle."
+msgstr "निवडलेल्या गाठी वर्तुळात हलवा."
+
+msgid "Tool: {0}"
+msgstr "साधन: {0}"
+
+msgid "Not enough nodes in selected ways."
+msgstr "निवडलेल्या मार्गांत पुरेशा गाठी नाहीत."
+
+msgid "Please select at least four nodes."
+msgstr "कृपया किमान चार गाठी निवडा."
+
+msgid "Cannot determine center of selected nodes."
+msgstr "निवडलेल्या गाठींचा मध्य निश्चित करू शकत नाही."
+
+msgid ""
+"One or more nodes involved in this action is outside of the downloaded area."
+msgstr ""
+
+msgid "Align Nodes in Line"
+msgstr "गाठी रेषेत मांडा"
+
+msgid "Move the selected nodes in to a line."
+msgstr "निवडलेल्या गाठी रेषेत हलवा."
+
+msgid "Please select at least three nodes."
+msgstr "कृपया किमान तीन गाठी निवडा."
+
+msgid "Can not align a polygon. Abort."
+msgstr ""
+
+msgid "Intersection of three or more ways can not be solved. Abort."
+msgstr ""
+
+msgid "Two parallels ways found. Abort."
+msgstr ""
+
+msgid "data"
+msgstr ""
+
+msgid "layer"
+msgstr "थर"
+
+msgid "selection"
+msgstr "निवड"
+
+msgid "conflict"
+msgstr ""
+
+msgid "download"
+msgstr ""
+
+msgid "problem"
+msgstr ""
+
+msgid "previous"
+msgstr "मागील"
+
+msgid "next"
+msgstr "पुढील"
+
+msgid "Nothing selected to zoom to."
+msgstr ""
+
+msgid "Information"
+msgstr "माहिती"
+
+msgid "Zoom to {0}"
+msgstr ""
+
+msgid "Zoom the view to {0}."
+msgstr ""
+
+msgid "View: {0}"
+msgstr ""
+
+msgid "No conflicts to zoom to"
+msgstr ""
+
+msgid "Changeset Manager"
+msgstr "बदलसंच व्यवस्थापक"
+
+msgid "Toggle visibility of Changeset Manager window"
+msgstr ""
+
+msgid "Close open changesets"
+msgstr "खुले बदलसंच बंद करा"
+
+msgid "Closes open changesets"
+msgstr "खुले बदलसंच बंद केले जातात"
+
+msgid "File: {0}"
+msgstr "संचिका: {0}"
+
+msgid "There are no open changesets"
+msgstr "खुले बदलसंच नाहीत"
+
+msgid "No open changesets"
+msgstr "खुले बदलसंच नाहीत"
+
+msgid "Downloading open changesets ..."
+msgstr ""
+
+msgid "Combine Way"
+msgstr "मार्ग एकवटवा"
+
+msgid "Combine several ways into one."
+msgstr "अनेक मार्ग एकात एकवटवा."
+
+msgid "Change directions?"
+msgstr "दिशा बदला?"
+
+msgid "Reverse and Combine"
+msgstr "उलटवा आणि एकवटवा"
+
+msgid ""
+"The ways can not be combined in their current directions.  Do you want to "
+"reverse some of them?"
+msgstr ""
+"मार्ग त्यांच्या सध्याचा दिशांमध्ये एकवटवले जाऊ शकत नाहीत. आपणांस त्यातील "
+"काही मार्ग उलटवावयाचे आहेत का?"
+
+msgid ""
+"Could not combine ways<br>(They could not be merged into a single string of "
+"nodes)"
+msgstr ""
+"मार्ग एकवटवू शकत नाही<br>(ते गाठींच्या एका साखळीत एकत्र केले जाऊ शकत नाहीत)"
+
+msgid "Combine {0} way"
+msgid_plural "Combine {0} ways"
+msgstr[0] "{0} मार्ग एकवटवा"
+msgstr[1] "{0} मार्ग एकवटवा"
+
+msgid "Please select at least two ways to combine."
+msgstr "कृपया एकवटवण्यासाठी किमान दोन मार्ग निवडा."
+
+msgid "Copy"
+msgstr ""
+
+msgid "Copy selected objects to paste buffer."
+msgstr ""
+
+msgid "Please select something to copy."
+msgstr ""
+
+msgid "Copy Coordinates"
+msgstr ""
+
+msgid "Copy coordinates of selected nodes to clipboard."
+msgstr ""
+
+msgid "Create Circle"
+msgstr "वर्तुळ बनवा"
+
+msgid "Create a circle from three selected nodes."
+msgstr "निवडलेल्या तीन गाठींपासून वर्तुळ बनवा."
+
+msgid ""
+"Please select exactly two or three nodes or one way with exactly two or "
+"three nodes."
+msgstr ""
+"कृपया दोन किंवा तीनच गाठी निवडा किंवा दोन किंवा तीनच गाठी असलेला एक मार्ग "
+"निवडा."
+
+msgid "Those nodes are not in a circle. Aborting."
+msgstr ""
+
+msgid "Update multipolygon"
+msgstr "बहुबहुभुज अद्ययावत करा"
+
+msgid "Create multipolygon"
+msgstr "बहुबहुभुज बनवा"
+
+msgid "No data loaded."
+msgstr ""
+
+msgid "You must select at least one way."
+msgstr "आपण किमान एक मार्ग निवडलाच पाहिजे."
+
+msgid "Delete"
+msgstr ""
+
+msgid "Delete selected objects."
+msgstr ""
+
+msgid "Toggle dialogs panel"
+msgstr ""
+
+msgid "Toggle dialogs panel, maximize mapview"
+msgstr ""
+
+msgid "Distribute Nodes"
+msgstr ""
+
+msgid "Distribute the selected nodes to equal distances along a line."
+msgstr ""
+
+msgid "Ignoring {0} nodes with null coordinates"
+msgstr ""
+
+msgid ""
+"Please select :\n"
+"* One no self-crossing way with at most two of its nodes;\n"
+"* Three nodes."
+msgstr ""
+
+msgid "Download from OSM..."
+msgstr ""
+
+msgid "Download map data from the OSM server."
+msgstr ""
+
+msgid ""
+"<html>This action will require {0} individual<br>download requests. Do you "
+"wish<br>to continue?</html>"
+msgstr ""
+
+msgid "Download data"
+msgstr ""
+
+msgid "Download notes in current view"
+msgstr ""
+
+msgid "Download object..."
+msgstr ""
+
+msgid "Download OSM object by ID."
+msgstr ""
+
+msgid "Download parent ways/relations..."
+msgstr ""
+
+msgid "Download objects referring to one of the selected objects"
+msgstr ""
+
+msgid "Duplicate"
+msgstr ""
+
+msgid "Duplicate selection by copy and immediate paste."
+msgstr ""
+
+msgid "Exit"
+msgstr "बाहेर पडा"
+
+msgid "Exit the application."
+msgstr "अनुप्रयोगातून बाहेर पडा."
+
+msgid "Expert Mode"
+msgstr ""
+
+msgid "Enable/disable expert mode"
+msgstr ""
+
+msgid "Follow line"
+msgstr ""
+
+msgid "Continues drawing a line that shares nodes with another line."
+msgstr ""
+
+msgid "Follow"
+msgstr ""
+
+msgid "Fullscreen view"
+msgstr ""
+
+msgid "Toggle fullscreen view"
+msgstr ""
+
+msgid "Export to GPX..."
+msgstr "GPXमध्ये निर्यात करा..."
+
+msgid "Export the data to GPX file."
+msgstr ""
+
+msgid "Nothing to export. Get some data first."
+msgstr ""
+
+msgid "Export GPX file"
+msgstr "GPX संचिका निर्यात करा"
+
+msgid "History"
+msgstr "इतिहास"
+
+msgid "Display history information about OSM ways, nodes, or relations."
+msgstr ""
+
+msgid "Show history"
+msgstr "इतिहास दाखवा"
+
+msgid "History (web)"
+msgstr ""
+
+msgid ""
+"Display history information about OSM ways, nodes, or relations in web "
+"browser."
+msgstr ""
+
+msgid "New offset"
+msgstr ""
+
+msgid "Adjust the position of this imagery layer"
+msgstr ""
+
+msgid "Adjust imagery offset"
+msgstr ""
+
+msgid "OK"
+msgstr "ठीक"
+
+msgid ""
+"Use arrow keys or drag the imagery layer with mouse to adjust the imagery "
+"offset.\n"
+"You can also enter east and north offset in the {0} coordinates.\n"
+"If you want to save the offset as bookmark, enter the bookmark name below"
+msgstr ""
+
+msgid "Offset: "
+msgstr ""
+
+msgid "Bookmark name: "
+msgstr ""
+
+msgid "Overwrite"
+msgstr ""
+
+msgid "Offset bookmark already exists. Overwrite?"
+msgstr ""
+
+msgid "Advanced info"
+msgstr ""
+
+msgid ""
+"Display advanced object information about OSM nodes, ways, or relations."
+msgstr ""
+
+msgid "Advanced info (web)"
+msgstr ""
+
+msgid ""
+"Display object information about OSM nodes, ways, or relations in web "
+"browser."
+msgstr ""
+
+msgid "Join overlapping Areas"
+msgstr ""
+
+msgid "Joins areas that overlap each other"
+msgstr ""
+
+msgid "Please select at least one closed way that should be joined."
+msgstr ""
+
+msgid ""
+"One of the selected ways is not closed and therefore cannot be joined."
+msgstr ""
+
+msgid "Join area confirmation"
+msgstr ""
+
+msgid "The selected way has nodes outside of the downloaded data region."
+msgid_plural ""
+"The selected ways have nodes outside of the downloaded data region."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "This can lead to nodes being deleted accidentally."
+msgstr ""
+
+msgid "Are you really sure to continue?"
+msgstr ""
+
+msgid "Please abort if you are not sure"
+msgstr ""
+
+msgid "The selected area is incomplete. Continue?"
+msgstr "निवडलेले क्षेत्र अपूर्ण आहे. पुढे चला?"
+
+msgid "No intersection found. Nothing was changed."
+msgstr "छेदन सापडले नाही. काहीही बदलले नाही."
+
+msgid "Move tags from ways to relations"
+msgstr ""
+
+msgid "Reverting changes"
+msgstr "बदल उलटवत आहे"
+
+msgid "Removed duplicate nodes"
+msgstr ""
+
+msgid "Added node on all intersections"
+msgstr ""
+
+msgid "Assemble new polygons"
+msgstr "नवे बहुभुज जमवा"
+
+msgid "Delete relations"
+msgstr ""
+
+msgid "Delete Ways that are not part of an inner multipolygon"
+msgstr ""
+
+msgid "Joined overlapping areas"
+msgstr ""
+
+msgid ""
+"Some of the ways were part of relations that have been modified.<br>Please "
+"verify no errors have been introduced."
+msgstr ""
+
+msgid "Fix tag conflicts"
+msgstr ""
+
+msgid "Split ways into fragments"
+msgstr "मार्ग तुकड्यांत विभागा"
+
+msgid "Sorry. Cannot handle multipolygon relations with multiple outer ways."
+msgstr ""
+"क्षमा असावी. अनेक बाहेरील मार्ग असलेले बहुबहुभुज संबंध हाताळू शकत नाही."
+
+msgid ""
+"Sorry. Cannot handle way that is outer in multiple multipolygon relations."
+msgstr ""
+"क्षमा असावी. असा मार्ग, जो अनेक बहुबहुभुज संबंधांमध्ये बाहेरील मार्ग आहे, "
+"हाताळू शकत नाही."
+
+msgid ""
+"Sorry. Cannot handle way that is both inner and outer in multipolygon "
+"relations."
+msgstr ""
+"क्षमा असावी. असा मार्ग, जो बहुबहुभुज संबंधांमध्ये दोन्ही बाहेरील व आतील "
+"मार्ग आहे, हाताळू शकत नाही."
+
+msgid ""
+"Sorry. Cannot handle way that is inner in multiple multipolygon relations."
+msgstr ""
+"क्षमा असावी. असा मार्ग, जो अनेक बहुबहुभुज संबंधांमध्ये आतील मार्ग आहे, "
+"हाताळू शकत नाही."
+
+msgid "Removed Element from Relations"
+msgstr ""
+
+msgid "Remove tags from inner ways"
+msgstr ""
+
+msgid "Join Areas Function"
+msgstr ""
+
+msgid "Join Node to Way"
+msgstr "गाठ मार्गास जोडा"
+
+msgid "Include a node into the nearest way segments"
+msgstr ""
+
+msgid "Move Node onto Way"
+msgstr "गाठ मार्गावर हलवा"
+
+msgid "Move the node onto the nearest way segments and include it"
+msgstr ""
+
+msgid "No Shortcut"
+msgstr ""
+
+msgid "Jump To Position"
+msgstr ""
+
+msgid "Opens a dialog that allows to jump to a specific location"
+msgstr ""
+
+msgid "Enter Lat/Lon to jump to position."
+msgstr ""
+
+msgid "You can also paste an URL from www.openstreetmap.org"
+msgstr "आपण www.openstreetmap.org वरून URLही चिकटवू शकता"
+
+msgid "Latitude"
+msgstr "अक्षांश"
+
+msgid "Longitude"
+msgstr "रेखांश"
+
+msgid "Zoom (in metres)"
+msgstr ""
+
+msgid "URL"
+msgstr "URL"
+
+msgid "Jump there"
+msgstr ""
+
+msgid "Jump to Position"
+msgstr ""
+
+msgid "Could not parse Latitude, Longitude or Zoom. Please check."
+msgstr ""
+
+msgid "Unable to parse Lon/Lat"
+msgstr ""
+
+msgid "Lasso Mode"
+msgstr ""
+
+msgid "Lasso selection mode: select objects within a hand-drawn region"
+msgstr ""
+
+msgid "Rectified Image..."
+msgstr ""
+
+msgid "Download Rectified Images From Various Services"
+msgstr ""
+
+msgid "Imagery: {0}"
+msgstr ""
+
+msgid "Custom WMS Link"
+msgstr ""
+
+msgid "Supported Rectifier Services:"
+msgstr ""
+
+msgid "Visit Homepage"
+msgstr ""
+
+msgid "WMS URL or Image ID:"
+msgstr "WMS URL किंवा प्रतिमा ID:"
+
+msgid "Add Rectified Image"
+msgstr ""
+
+msgid ""
+"Couldn''t match the entered link or id to the selected service. Please try "
+"again."
+msgstr ""
+
+msgid "No valid WMS URL or id"
+msgstr ""
+
+msgid "Merge layer"
+msgstr "थर विलीन करा"
+
+msgid "Merge the current layer into another layer"
+msgstr "सध्याचा थर दुसऱ्या थरात विलीन करा"
+
+msgid "Merging layers with different upload policies"
+msgstr ""
+
+msgid ""
+"You are about to merge data between layers ''{0}'' and ''{1}''.<br /><br "
+"/>These layers have different upload policies and should not been merged as "
+"it.<br />Merging them will result to enforce the stricter policy (upload "
+"discouraged) to ''{1}''.<br /><br /><b>This is not the recommended way of "
+"merging such data</b>.<br />You should instead check and merge each object, "
+"one by one, by using ''<i>Merge selection</i>''.<br /><br />Are you sure you "
+"want to continue?"
+msgstr ""
+
+msgid "Ignore this hint and merge anyway"
+msgstr ""
+
+msgid "Merge Nodes"
+msgstr ""
+
+msgid "Merge nodes into the oldest one."
+msgstr ""
+
+msgid ""
+"Please select at least two nodes to merge or one node that is close to "
+"another node."
+msgstr ""
+
+msgid "Abort Merging"
+msgstr ""
+
+msgid "Click to abort merging nodes"
+msgstr ""
+
+msgid ""
+"Cannot merge nodes: Would have to delete way {0} which is still used by {1}"
+msgstr ""
+
+msgid "Merge {0} node"
+msgid_plural "Merge {0} nodes"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Merge selection"
+msgstr ""
+
+msgid "Merge the currently selected objects into another layer"
+msgstr ""
+
+msgid "Merging too many objects with different upload policies"
+msgstr ""
+
+msgid ""
+"You are about to merge more than 1 object between layers ''{0}'' and "
+"''{1}''.<br /><br /><b>This is not the recommended way of merging such "
+"data</b>.<br />You should instead check and merge each object, <b>one by "
+"one</b>.<br /><br />Are you sure you want to continue?"
+msgstr ""
+
+msgid "Mirror"
+msgstr "आरसा"
+
+msgid "Mirror selected nodes and ways."
+msgstr "निवडलेल्या गाठी व मार्ग प्रतिबिंबित करा."
+
+msgid "Please select at least one node or way."
+msgstr "कृपया किमान एक गाठ किंवा मार्ग निवडा."
+
+msgid "up"
+msgstr "वर"
+
+msgid "down"
+msgstr "खाली"
+
+msgid "left"
+msgstr ""
+
+msgid "right"
+msgstr ""
+
+msgid "Move objects {0}"
+msgstr ""
+
+msgid "Move {0}"
+msgstr ""
+
+msgid "Moves Objects {0}"
+msgstr ""
+
+msgid "Cannot move objects outside of the world."
+msgstr ""
+
+msgid "Move Node..."
+msgstr "गाठ हलवा..."
+
+msgid "Edit latitude and longitude of a node."
+msgstr "गाठीचे अक्षांश व रेखांश संपादा."
+
+msgid "New Layer"
+msgstr "नवा थर"
+
+msgid "Create a new map layer."
+msgstr "नवा नकाशा थर तयार करा."
+
+msgid "URL Files"
+msgstr "URL संचिका"
+
+msgid "Open..."
+msgstr "उघडा..."
+
+msgid "Open a file."
+msgstr "संचिका उघडा."
+
+msgid "Opening files"
+msgstr "संचिका उघडित आहे"
+
+msgid "Cannot open {0} file with the file importer ''{1}''."
+msgid_plural "Cannot open {0} files with the file importer ''{1}''."
+msgstr[0] "संचिका आयातकर्ता ''{1}'' वापरून {0} संचिका उघडू शकत नाही."
+msgstr[1] "संचिका आयातकर्ता ''{1}'' वापरून {0} संचिका उघडू शकत नाही."
+
+msgid ""
+"Cannot open {0} file because file does not exist or no suitable file "
+"importer is available."
+msgid_plural ""
+"Cannot open {0} files because files do not exist or no suitable file "
+"importer is available."
+msgstr[0] ""
+"{0} संचिका उघडू शकत नाही कारण संचिका अस्तित्वात नाही किंवा योग्य संचिका "
+"आयातकर्ता उपलब्ध नाही."
+msgstr[1] ""
+"{0} संचिका उघडू शकत नाही कारण संचिका अस्तित्वात नाहीत किंवा योग्य संचिका "
+"आयातकर्ता उपलब्ध नाही."
+
+msgid "no importer"
+msgstr "आयातकर्ता नाही"
+
+msgid "does not exist"
+msgstr "अस्तित्वात नाही"
+
+msgid "<html>Cannot open directory ''{0}''.<br>Please select a file.</html>"
+msgstr ""
+
+msgid "Open file"
+msgstr "संचिका उघडा"
+
+msgid "Opening {0} file..."
+msgid_plural "Opening {0} files..."
+msgstr[0] "{0} संचिका उघडत आहे..."
+msgstr[1] "{0} संचिका उघडत आहे..."
+
+msgid "Opening file ''{0}'' ..."
+msgstr "संचिका ''{0}'' उघडत आहे ..."
+
+msgid "Open Location..."
+msgstr "ठिकाण उघडा..."
+
+msgid "Open an URL."
+msgstr "URL उघडा."
+
+msgid "Separate Layer"
+msgstr "वेगळा थर"
+
+msgid "Select if the data should be downloaded into a new layer"
+msgstr ""
+
+msgid "Enter URL to download:"
+msgstr ""
+
+msgid "Enter an URL from where data should be downloaded"
+msgstr ""
+
+msgid "Download Location"
+msgstr ""
+
+msgid "Download URL"
+msgstr ""
+
+msgid "Start downloading data"
+msgstr ""
+
+msgid "Close dialog and cancel downloading"
+msgstr ""
+
+msgid "Download Data"
+msgstr ""
+
+msgid "Which tasks to perform?"
+msgstr ""
+
+msgid "Ok"
+msgstr "ठीक"
+
+msgid ""
+"Cannot open URL ''{0}''<br>The following download tasks accept the URL "
+"patterns shown:<br>{1}"
+msgstr ""
+
+msgid ""
+"<h3>When one or more ways are selected, the shape is adjusted such, that all "
+"angles are 90 or 180 degrees.</h3>You can add two nodes to the selection. "
+"Then, the direction is fixed by these two reference nodes. (Afterwards, you "
+"can undo the movement for certain nodes:<br>Select them and press the "
+"shortcut for Orthogonalize / Undo. The default is Shift-Q.)"
+msgstr ""
+
+msgid "Orthogonalize Shape"
+msgstr ""
+
+msgid "Move nodes so all angles are 90 or 180 degrees"
+msgstr "गाठी हलवा जेणेकरून सर्व कोन ९० किंवा १८० अंशांचे असतील"
+
+msgid "Orthogonalize Shape / Undo"
+msgstr ""
+
+msgid "Undo orthogonalization for certain nodes"
+msgstr ""
+
+msgid "Orthogonalize / Undo"
+msgstr ""
+
+msgid ""
+"Orthogonalize Shape / Undo<br>Please select nodes that were moved by the "
+"previous Orthogonalize Shape action!"
+msgstr ""
+
+msgid ""
+"<html>You are using the EPSG:4326 projection which might lead<br>to "
+"undesirable results when doing rectangular alignments.<br>Change your "
+"projection to get rid of this warning.<br>Do you want to continue?</html>"
+msgstr ""
+
+msgid "Selection must consist only of ways and nodes."
+msgstr ""
+
+msgid "Orthogonalize"
+msgstr ""
+
+msgid "Usage"
+msgstr "वापर"
+
+msgid ""
+"<html>Please make sure all selected ways head in a similar direction<br>or "
+"orthogonalize them one by one.</html>"
+msgstr ""
+
+msgid "Please select ways with angles of approximately 90 or 180 degrees."
+msgstr "कृपया सुमारे ९० किंवा १८० अंशांचे कोन असलेले मार्ग निवडा."
+
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
+msgid "Paste"
+msgstr "चिकटवा"
+
+msgid "Paste contents of paste buffer."
+msgstr ""
+
+msgid "Delete incomplete members?"
+msgstr ""
+
+msgid "Paste without incomplete members"
+msgstr ""
+
+msgid ""
+"The copied data contains incomplete objects.  When pasting the incomplete "
+"objects are removed.  Do you want to paste the data without the incomplete "
+"objects?"
+msgstr ""
+
+msgid "Paste Tags"
+msgstr ""
+
+msgid "Apply tags of contents of paste buffer to all selected items."
+msgstr ""
+
+msgid "Pasting {0} tag"
+msgid_plural "Pasting {0} tags"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "to {0} object"
+msgid_plural "to {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Preferences..."
+msgstr ""
+
+msgid "Open a preferences dialog for global settings."
+msgstr ""
+
+msgid "Preferences"
+msgstr ""
+
+msgid "Purge..."
+msgstr ""
+
+msgid "Forget objects but do not delete them on server when uploading."
+msgstr ""
+
+msgid "Purge"
+msgstr ""
+
+msgid "Confirm Purging"
+msgstr ""
+
+msgid ""
+"This operation makes JOSM forget the selected objects.<br> They will be "
+"removed from the layer, but <i>not</i> deleted<br> on the server when "
+"uploading."
+msgstr ""
+
+msgid ""
+"The following dependent objects will be purged<br> in addition to the "
+"selected objects:"
+msgstr ""
+
+msgid "Add to selection"
+msgstr "निवडीत भर घाला"
+
+msgid ""
+"Some of the objects are modified.<br> Proceed, if these changes should be "
+"discarded.</html>"
+msgstr ""
+
+msgid "Clear Undo/Redo buffer"
+msgstr ""
+
+msgid "Redo"
+msgstr ""
+
+msgid "Redo the last undone action."
+msgstr ""
+
+msgid "Redo ..."
+msgstr ""
+
+msgid "Redo {0}"
+msgstr ""
+
+msgid "Rename layer"
+msgstr ""
+
+msgid "Also rename the file"
+msgstr ""
+
+msgid "Could not rename file ''{0}''"
+msgstr ""
+
+msgid "Report bug"
+msgstr ""
+
+msgid "Report a ticket to JOSM bugtracker"
+msgstr ""
+
+msgid "Restart"
+msgstr ""
+
+msgid "Restart the application."
+msgstr ""
+
+msgid "Click to restart later."
+msgstr ""
+
+msgid "Reverse way"
+msgstr ""
+
+msgid "Reverse Ways"
+msgstr ""
+
+msgid "Reverse the direction of all selected ways."
+msgstr ""
+
+msgid "Please select at least one way."
+msgstr ""
+
+msgid "Reverse ways"
+msgstr ""
+
+msgid "Save"
+msgstr "साठवा"
+
+msgid "Save the current data."
+msgstr ""
+
+msgid "File {0} exists. Overwrite?"
+msgstr ""
+
+msgid "No Exporter found! Nothing saved."
+msgstr "निर्यातकर्ता सापडला नाही! काहीही साठवले नाही."
+
+msgid "File exists. Overwrite?"
+msgstr ""
+
+msgid "Save As..."
+msgstr ""
+
+msgid "Save the current data to a new file."
+msgstr ""
+
+msgid "Search Notes..."
+msgstr "टीपा शोधा..."
+
+msgid "Download notes from the note search API"
+msgstr ""
+
+msgid "Search the OSM API for notes containing words:"
+msgstr ""
+
+msgid "Search for notes"
+msgstr ""
+
+msgid "You must enter a search term"
+msgstr ""
+
+msgid "Select All"
+msgstr "सर्व निवडा"
+
+msgid ""
+"Select all undeleted objects in the data layer. This selects incomplete "
+"objects too."
+msgstr ""
+
+msgid "Non-branching way sequences"
+msgstr "फाटे नसणारे मार्ग अनुक्रम"
+
+msgid "Select non-branching sequences of ways"
+msgstr "मार्गांचे फाटे नसणारे अनुक्रम निवडा"
+
+msgid "Load Session"
+msgstr "सत्र लादा"
+
+msgid "Load a session from file."
+msgstr "संचिकेतून सत्र लादा."
+
+msgid "Open session"
+msgstr "सत्र उघडा"
+
+msgid "Loading session ''{0}''"
+msgstr "सत्र ''{0}'' लादत आहे"
+
+msgid "Data Error"
+msgstr ""
+
+msgid "IO Error"
+msgstr ""
+
+msgid "<html>Could not load session file ''{0}''.<br>Error is:<br>{1}</html>"
+msgstr ""
+
+msgid "Save Session As..."
+msgstr ""
+
+msgid "Save the current session to a new file."
+msgstr ""
+
+msgid "Session file (archive) (*.joz)"
+msgstr ""
+
+msgid "Session file (*.jos)"
+msgstr "सत्र संचिका (*.jos)"
+
+msgid "Save session"
+msgstr "सत्र साठवा"
+
+msgid "<html>Could not save session file ''{0}''.<br>Error is:<br>{1}</html>"
+msgstr ""
+
+msgid "Save Session"
+msgstr "सत्र साठवा"
+
+msgid "Save As"
+msgstr ""
+
+msgid "Layers"
+msgstr "थर"
+
+msgid "No exporter for this layer"
+msgstr "ह्या थरासाठी निर्यातकर्ता नाही"
+
+msgid "Show Status Report"
+msgstr "सद्यस्थितीचा अहवाल दाखवा"
+
+msgid ""
+"Show status report with useful information that can be attached to bugs"
+msgstr ""
+
+msgid "Help: {0}"
+msgstr "मदत: {0}"
+
+msgid "Status Report"
+msgstr "सद्यस्थितीचा अहवाल"
+
+msgid "Copy to clipboard and close"
+msgstr ""
+
+msgid "Close"
+msgstr "बंद करा"
+
+msgid "Simplify Way"
+msgstr ""
+
+msgid "Delete unnecessary nodes from a way."
+msgstr ""
+
+msgid "Please select at least one way to simplify."
+msgstr ""
+
+msgid "Yes"
+msgstr "हो"
+
+msgid "Simplify all selected ways"
+msgstr ""
+
+msgid "Cancel operation"
+msgstr "कृति रद्द करा"
+
+msgid ""
+"The selection contains {0} ways. Are you sure you want to simplify them all?"
+msgstr ""
+
+msgid "Simplify ways?"
+msgstr ""
+
+msgid "Simplify {0} way"
+msgid_plural "Simplify {0} ways"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Simplify Way (remove {0} node)"
+msgid_plural "Simplify Way (remove {0} nodes)"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Split Way"
+msgstr "मार्ग विभागा"
+
+msgid "Split a way at the selected node."
+msgstr "निवडलेल्या गाठीपाशी मार्ग विभागा."
+
+msgid ""
+"The current selection cannot be used for splitting - no node is selected."
+msgstr ""
+"सध्याची निवड विभाजनासाठी वापरली जाऊ शकत नाही - कुठलीही गाठ निवडलेली नाही."
+
+msgid "The selected nodes do not share the same way."
+msgstr ""
+
+msgid "The selected node is not in the middle of any way."
+msgid_plural "The selected nodes are not in the middle of any way."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"There is more than one way using the node you selected. Please select the "
+"way also."
+msgid_plural ""
+"There is more than one way using the nodes you selected. Please select the "
+"way also."
+msgstr[0] ""
+"एकाहून अधिक मार्ग आपण निवडलेली गाठ वापरत आहेत. कृपया मार्गही निवडा."
+msgstr[1] ""
+"एकाहून अधिक मार्ग आपण निवडलेल्या गाठी वापरत आहेत. कृपया मार्गही निवडा."
+
+msgid "You must select two or more nodes to split a circular way."
+msgstr ""
+"वर्तुळाकार मार्ग विभागण्यासाठी आपण दोन किंवा अधिक गाठी निवडणे आवश्यक आहे."
+
+msgid ""
+"The way cannot be split at the selected nodes. (Hint: Select nodes in the "
+"middle of the way.)"
+msgstr ""
+
+msgid ""
+"A role based relation membership was copied to all new ways.<br>You should "
+"verify this and correct it when necessary."
+msgstr ""
+
+msgid ""
+"A relation membership was copied to all new ways.<br>You should verify this "
+"and correct it when necessary."
+msgstr ""
+
+msgid "Split way {0} into {1} part"
+msgid_plural "Split way {0} into {1} parts"
+msgstr[0] "मार्ग {0} {1} भागात विभागा"
+msgstr[1] "मार्ग {0} {1} भागांत विभागा"
+
+msgid "Toggle GPX Lines"
+msgstr ""
+
+msgid "Draw lines between raw gps points."
+msgstr ""
+
+msgid "Toggles the global setting ''{0}''."
+msgstr ""
+
+msgid "Encourage/discourage upload"
+msgstr ""
+
+msgid "UnGlue Ways"
+msgstr ""
+
+msgid "Duplicate nodes that are used by multiple ways."
+msgstr ""
+
+msgid "This node is not glued to anything else."
+msgstr "ही गाठ इतर कशालाही चिकटलेली नाही."
+
+msgid "None of these nodes are glued to anything else."
+msgstr "ह्यापैकी कुठल्याच गाठी इतर कशालाही चिकटलेल्या नाहीत."
+
+msgid "None of this way''s nodes are glued to anything else."
+msgstr "ह्या मार्गाच्या कुठल्याच गाठी इतर कशालाही चिकटलेल्या नाहीत."
+
+msgid "The current selection cannot be used for unglueing."
+msgstr ""
+
+msgid "Select either:"
+msgstr "निवडा:"
+
+msgid "* One tagged node, or"
+msgstr ""
+
+msgid "* One node that is used by more than one way, or"
+msgstr "* एक गाठ जी एकाहून अधिक मार्गांत वापरात आहे, किंवा"
+
+msgid ""
+"* One node that is used by more than one way and one of those ways, or"
+msgstr ""
+"* एक गाठ जी एकाहून अधिक मार्गांत वापरात आहे आणि त्यापैकी एक मार्ग, किंवा"
+
+msgid ""
+"* One way that has one or more nodes that are used by more than one way, or"
+msgstr ""
+"* एक मार्ग ज्यात एक किंवा अधिक गाठी, ज्या एकाहून अधिक मार्गांत वापरात आहेत, "
+"आहेत, किंवा"
+
+msgid ""
+"* One way and one or more of its nodes that are used by more than one way."
+msgstr ""
+"* एक मार्ग आणि त्यातील एक किंवा अधिक गाठी, ज्या एकाहून अधिक मार्गांत वापरात "
+"आहेत."
+
+msgid ""
+"Note: If a way is selected, this way will get fresh copies of the unglued\n"
+"nodes and the new nodes will be selected. Otherwise, all ways will get "
+"their\n"
+"own copy and all nodes will be selected."
+msgstr ""
+
+msgid "Unglued Node"
+msgstr ""
+
+msgid "Dupe into {0} node"
+msgid_plural "Dupe into {0} nodes"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Dupe {0} node into {1} nodes"
+msgid_plural "Dupe {0} nodes into {1} nodes"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Unglue confirmation"
+msgstr ""
+
+msgid ""
+"You are about to unglue nodes outside of the area you have "
+"downloaded.<br>This can cause problems because other objects (that you do "
+"not see) might use them.<br>Do you really want to unglue?"
+msgstr ""
+
+msgid ""
+"You are about to unglue incomplete objects.<br>This will cause problems "
+"because you don''t see the real object.<br>Do you really want to unglue?"
+msgstr ""
+
+msgid "Disconnect Node from Way"
+msgstr "गाठ मार्गापासून वेगळी करा"
+
+msgid "Disconnect nodes from a way they currently belong to"
+msgstr ""
+
+msgid "Select at least one node to be disconnected."
+msgstr "वेगळी करण्यासाठी किमान एक गाठ निवडा."
+
+msgid "Selected node cannot be disconnected from anything."
+msgid_plural "Selected nodes cannot be disconnected from anything."
+msgstr[0] "निवडलेली गाठ कशापासूनही वेगळी केली जाऊ शकत नाही."
+msgstr[1] "निवडलेल्या गाठी कशापासूनही वेगळ्या केल्या जाऊ शकत नाहीत."
+
+msgid ""
+"The affected way would disappear after disconnecting the selected node."
+msgid_plural ""
+"The affected way would disappear after disconnecting the selected nodes."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Some irrelevant nodes have been removed from the selection"
+msgstr ""
+
+msgid "Undo"
+msgstr ""
+
+msgid "Undo the last action."
+msgstr ""
+
+msgid "Undo ..."
+msgstr ""
+
+msgid "Undo {0}"
+msgstr ""
+
+msgid "Unselect All"
+msgstr ""
+
+msgid "Unselect all objects."
+msgstr ""
+
+msgid "Update data"
+msgstr ""
+
+msgid "Updates the objects in the active data layer from the server."
+msgstr ""
+
+msgid "Update modified"
+msgstr ""
+
+msgid ""
+"Updates the currently modified objects from the server (re-downloads data)"
+msgstr ""
+
+msgid "No current dataset found"
+msgstr ""
+
+msgid "Did not find an object with id {0} in the current dataset"
+msgstr ""
+
+msgid "Update selection"
+msgstr ""
+
+msgid ""
+"Updates the currently selected objects from the server (re-downloads data)"
+msgstr ""
+
+msgid "There are no selected objects to update."
+msgstr ""
+
+msgid "Selection empty"
+msgstr ""
+
+msgid "Upload data"
+msgstr ""
+
+msgid "Upload all changes in the active data layer to the OSM server"
+msgstr ""
+
+msgid ""
+"<html>The data to be uploaded participates in unresolved conflicts of layer "
+"''{0}''.<br>You have to resolve them first.</html>"
+msgstr ""
+
+msgid "Upload discouraged"
+msgstr ""
+
+msgid ""
+"You are about to upload data from the layer ''{0}''.<br /><br />Sending data "
+"from this layer is <b>strongly discouraged</b>. If you continue,<br />it may "
+"require you subsequently have to revert your changes, or force other "
+"contributors to.<br /><br />Are you sure you want to continue?"
+msgstr ""
+
+msgid "Ignore this hint and upload anyway"
+msgstr ""
+
+msgid "No changes to upload."
+msgstr ""
+
+msgid "Nothing to upload. Get some data first."
+msgstr ""
+
+msgid "Upload note changes to server"
+msgstr ""
+
+msgid "Upload notes"
+msgstr ""
+
+msgid "Uploading notes to server"
+msgstr ""
+
+msgid "Upload selection"
+msgstr ""
+
+msgid "Upload all changes in the current selection to the OSM server."
+msgstr ""
+
+msgid "Checking parents for deleted objects"
+msgstr ""
+
+msgid "Reading parents of ''{0}''"
+msgstr ""
+
+msgid "Checking for deleted parents in the local dataset"
+msgstr ""
+
+msgid "Validation"
+msgstr ""
+
+msgid "Performs the data validation"
+msgstr ""
+
+msgid "Validating"
+msgstr ""
+
+msgid "Test {0}/{1}: Starting {2}"
+msgstr "चाचणी {0}/{1}: {2} सुरु करत आहे"
+
+msgid "Updating ignored errors ..."
+msgstr ""
+
+msgid "Viewport Following"
+msgstr ""
+
+msgid "Enable/disable automatic moving of the map view to last placed node"
+msgstr ""
+
+msgid "Toggle Viewport Following"
+msgstr ""
+
+msgid "Wireframe View"
+msgstr ""
+
+msgid "Enable/disable rendering the map as wireframe only"
+msgstr ""
+
+msgid "Toggle Wireframe view"
+msgstr ""
+
+msgid "Zoom In"
+msgstr ""
+
+msgid "Zoom In (Keypad)"
+msgstr ""
+
+msgid "Zoom Out"
+msgstr ""
+
+msgid "Zoom Out (Keypad)"
+msgstr ""
+
+msgid "Zoom to"
+msgstr ""
+
+msgid "Zoom to the object the first selected member refers to"
+msgstr ""
+
+msgid "Zooming disabled because layer of this relation is not active"
+msgstr ""
+
+msgid "Zooming disabled because there is no selected member"
+msgstr ""
+
+msgid "Zoom to the first selected node"
+msgstr ""
+
+msgid "Zooming disabled because layer of this way is not active"
+msgstr ""
+
+msgid "Zooming disabled because there is no selected node"
+msgstr ""
+
+msgctxt "audio"
+msgid "Back"
+msgstr "मागे"
+
+msgctxt "audio"
+msgid "Jump back."
+msgstr ""
+
+msgid "Audio: {0}"
+msgstr ""
+
+msgctxt "audio"
+msgid "Faster"
+msgstr ""
+
+msgctxt "audio"
+msgid "Faster Forward"
+msgstr ""
+
+msgctxt "audio"
+msgid "Forward"
+msgstr "पुढे"
+
+msgctxt "audio"
+msgid "Jump forward"
+msgstr ""
+
+msgctxt "audio"
+msgid "Next Marker"
+msgstr ""
+
+msgctxt "audio"
+msgid "Play next marker."
+msgstr ""
+
+msgctxt "audio"
+msgid "Play/Pause"
+msgstr ""
+
+msgid "Play/pause audio."
+msgstr ""
+
+msgctxt "audio"
+msgid "Previous Marker"
+msgstr ""
+
+msgctxt "audio"
+msgid "Play previous marker."
+msgstr ""
+
+msgctxt "audio"
+msgid "Slower"
+msgstr ""
+
+msgctxt "audio"
+msgid "Slower Forward"
+msgstr ""
+
+msgid "Download GPS"
+msgstr ""
+
+msgid "Downloading GPS data"
+msgstr ""
+
+msgid "Downloaded GPX Data"
+msgstr ""
+
+msgid "Markers from {0}"
+msgstr ""
+
+msgid "Download OSM Notes"
+msgstr ""
+
+msgid "Downloading Notes"
+msgstr ""
+
+msgid "Notes"
+msgstr "टीपा"
+
+msgid "{0} note has been downloaded."
+msgid_plural "{0} notes have been downloaded."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"Since the download limit was {0}, there might be more notes to download."
+msgstr ""
+
+msgid ""
+"Request a smaller area to make sure that all notes are being downloaded."
+msgstr ""
+
+msgid "More notes to download"
+msgstr ""
+
+msgid "Download OSM Notes within Bounds"
+msgstr ""
+
+msgid "Download OSM Note by ID"
+msgstr ""
+
+msgid "Download Compressed OSM Change"
+msgstr ""
+
+msgid "Download OSM Change"
+msgstr ""
+
+msgid "Download Compressed OSM"
+msgstr ""
+
+msgid "Download OSM object by ID"
+msgstr ""
+
+msgid "Download OSM"
+msgstr ""
+
+msgid "Downloading data"
+msgstr ""
+
+msgid ""
+"Ignoring exception because download has been canceled. Exception was: {0}"
+msgstr ""
+
+msgid "No data found in this area."
+msgstr ""
+
+msgid "OSM Server URL:"
+msgstr ""
+
+msgid "Command"
+msgstr "आज्ञा"
+
+msgid "Request details: {0}"
+msgstr "विनंतीचा तपशील: {0}"
+
+msgid "Download OSM URL"
+msgstr ""
+
+msgid "There was {0} conflict during import."
+msgid_plural "There were {0} conflicts during import."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Conflict during download"
+msgid_plural "Conflicts during download"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "({0}/{1}) Loading parents of node {2}"
+msgstr ""
+
+msgid "({0}/{1}) Loading parents of way {2}"
+msgstr ""
+
+msgid "({0}/{1}) Loading parents of relation {2}"
+msgstr ""
+
+msgid "Download session"
+msgstr ""
+
+msgid "Download {0} of {1} ({2} left)"
+msgstr ""
+
+msgid "Updating data"
+msgstr ""
+
+msgid "Check on the server"
+msgstr ""
+
+msgid ""
+"Click to check whether objects in your local dataset are deleted on the "
+"server"
+msgstr ""
+
+msgid "Ignore"
+msgstr "दुर्लक्षा"
+
+msgid "Click to abort and to resume editing"
+msgstr ""
+
+msgid ""
+"There is {0} object in your local dataset which might be deleted on the "
+"server.<br>If you later try to delete or update this the server is likely to "
+"report a conflict."
+msgid_plural ""
+"There are {0} objects in your local dataset which might be deleted on the "
+"server.<br>If you later try to delete or update them the server is likely to "
+"report a conflict."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"Click <strong>{0}</strong> to check the state of this object on the server."
+msgid_plural ""
+"Click <strong>{0}</strong> to check the state of these objects on the server."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click <strong>{0}</strong> to ignore.</html>"
+msgstr ""
+
+msgid "Deleted or moved objects"
+msgstr ""
+
+msgid "The following errors occurred during mass download: {0}"
+msgstr ""
+
+msgid "Errors during download"
+msgstr ""
+
+msgid "Error during download"
+msgstr ""
+
+msgid "Add a new Note"
+msgstr ""
+
+msgid "Add note mode"
+msgstr ""
+
+msgid "Click the location where you wish to create a new note"
+msgstr ""
+
+msgid "Create new note"
+msgstr ""
+
+msgid "Create note"
+msgstr ""
+
+msgid "Enter a detailed comment to create a note"
+msgstr ""
+
+msgid "You must enter a comment to create a new note"
+msgstr ""
+
+msgid "Delete Mode"
+msgstr ""
+
+msgid "Delete nodes or ways."
+msgstr ""
+
+msgid "Mode: {0}"
+msgstr ""
+
+msgid ""
+"Click to delete. Shift: delete way segment. Alt: do not delete unused nodes "
+"when deleting a way. Ctrl: delete referring objects."
+msgstr ""
+
+msgid "Draw"
+msgstr "रेखाटा"
+
+msgid "Draw nodes"
+msgstr "गाठी रेखाटा"
+
+msgid "Mode: Draw Angle snapping"
+msgstr ""
+
+msgid "Backspace in Add mode"
+msgstr ""
+
+msgid "helper line"
+msgstr "मदतनीस रेष"
+
+msgid "Cannot add a node outside of the world."
+msgstr ""
+
+msgid "Add node"
+msgstr ""
+
+msgid "Add node into way"
+msgstr ""
+
+msgid "Connect existing way to node"
+msgstr ""
+
+msgid "Add a new node to an existing way"
+msgstr ""
+
+msgid "Add node into way and connect"
+msgstr ""
+
+msgid "Create new node."
+msgstr "नवीन गाठ बनवा."
+
+msgid "Select node under cursor."
+msgstr ""
+
+msgid "Insert new node into way."
+msgid_plural "Insert new node into {0} ways."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Start new way from last node."
+msgstr ""
+
+msgid "Continue way from last node."
+msgstr ""
+
+msgid "Angle snapping active."
+msgstr ""
+
+msgid "Finish drawing."
+msgstr "रेखाटन संपवा."
+
+msgid "Toggle snapping by {0}"
+msgstr ""
+
+msgid "Show helper geometry"
+msgstr ""
+
+msgid "Snap to node projections"
+msgstr ""
+
+msgid "Disable"
+msgstr ""
+
+msgid "0,90,..."
+msgstr "०,९०,..."
+
+msgid "0,45,90,..."
+msgstr "०,४५,९०,..."
+
+msgid "0,30,45,60,90,..."
+msgstr "०,३०,४५,६०,९०,..."
+
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
+msgid "Angle snapping"
+msgstr ""
+
+msgid "Switch angle snapping mode while drawing"
+msgstr ""
+
+msgid "Dual alignment"
+msgstr ""
+
+msgid "Switch dual alignment mode while extruding"
+msgstr ""
+
+msgid "Extrude"
+msgstr ""
+
+msgid "Create areas"
+msgstr "क्षेत्र बनवा"
+
+msgid "Extrude Dual alignment"
+msgstr ""
+
+msgid ""
+"Drag a way segment to make a rectangle. Ctrl-drag to move a segment along "
+"its normal, Alt-drag to create a new rectangle, double click to add a new "
+"node."
+msgstr ""
+
+msgid "Dual alignment active."
+msgstr ""
+
+msgid "Segment collapsed due to its direction reversing."
+msgstr ""
+
+msgid "Move a segment along its normal, then release the mouse button."
+msgstr ""
+
+msgid ""
+"Move the node along one of the segments, then release the mouse button."
+msgstr ""
+
+msgid "Draw a rectangle of the desired size, then release the mouse button."
+msgstr ""
+
+msgid "Extrude: main line"
+msgstr ""
+
+msgid "Extrude: helper line"
+msgstr ""
+
+msgid "Extrude Way"
+msgstr ""
+
+msgid "Improve Way Accuracy"
+msgstr ""
+
+msgid "Improve Way Accuracy mode"
+msgstr ""
+
+msgid "improve way accuracy helper line"
+msgstr ""
+
+msgid "Click on the way to start improving its shape."
+msgstr ""
+
+msgid "Select a way that you want to make more accurate."
+msgstr ""
+
+msgid ""
+"Click to add a new node. Release Ctrl to move existing nodes or hold Alt to "
+"delete."
+msgstr ""
+
+msgid ""
+"Click to delete the highlighted node. Release Alt to move existing nodes or "
+"hold Ctrl to add new nodes."
+msgstr ""
+
+msgid ""
+"Click to move the highlighted node. Hold Ctrl to add new nodes, or Alt to "
+"delete."
+msgstr ""
+
+msgid "Cannot place a node outside of the world."
+msgstr ""
+
+msgid "Add a new node to way"
+msgid_plural "Add a new node to {0} ways"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Cannot delete node that is referenced by multiple objects"
+msgstr ""
+
+msgid "Cannot delete node that has tags"
+msgstr ""
+
+msgid "Parallel"
+msgstr "समांतर"
+
+msgid "Make parallel copies of ways"
+msgstr "मार्गांच्या समांतर प्रती बनवा"
+
+msgid "make parallel helper line"
+msgstr "समांतर मदतनीस रेष बनवा"
+
+msgid ""
+"Select ways as in Select mode. Drag selected ways or a single way to create "
+"a parallel copy (Alt toggles tag preservation)"
+msgstr ""
+
+msgid "Hold Ctrl to toggle snapping"
+msgstr ""
+
+msgid ""
+"ParallelWayAction\n"
+"The ways selected must form a simple branchless path"
+msgstr ""
+
+msgid "Drag play head"
+msgstr ""
+
+msgid ""
+"Drag play head and release near track to play audio from there; "
+"SHIFT+release to synchronize audio at that point."
+msgstr ""
+
+msgid "Select, move, scale and rotate objects"
+msgstr ""
+
+msgid "Move elements"
+msgstr ""
+
+msgid "Move them"
+msgstr "ते हलवा"
+
+msgid "Undo move"
+msgstr ""
+
+msgid ""
+"You moved more than {0} element. Moving a large number of elements is often "
+"an error.\n"
+"Really move them?"
+msgid_plural ""
+"You moved more than {0} elements. Moving a large number of elements is often "
+"an error.\n"
+"Really move them?"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Release the mouse button to select the objects in the rectangle."
+msgstr ""
+
+msgid "Ctrl to merge with nearest node."
+msgstr ""
+
+msgid "Release the mouse button to stop moving."
+msgstr ""
+
+msgid "Release the mouse button to stop rotating."
+msgstr ""
+
+msgid "Release the mouse button to stop scaling."
+msgstr ""
+
+msgid ""
+"Move objects by dragging; Shift to add to selection (Ctrl to toggle); Shift-"
+"Ctrl to rotate selected; Alt-Ctrl to scale selected; or change selection"
+msgstr ""
+
+msgid "Add and move a virtual new node to way"
+msgid_plural "Add and move a virtual new node to {0} ways"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Zoom"
+msgstr ""
+
+msgid "Zoom and move map"
+msgstr ""
+
+msgid ""
+"Zoom by dragging or Ctrl+. or Ctrl+,; move with Ctrl+up, left, down, right; "
+"move zoom with right button"
+msgstr ""
+
+msgid "Add all objects selected in the current dataset after the last member"
+msgstr ""
+
+msgid "Add selection to relation"
+msgstr ""
+
+msgid "Add selection to {0} relation"
+msgid_plural "Add selection to {0} relations"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete the selected relation"
+msgstr ""
+
+msgid "Download all members of the selected relations"
+msgstr ""
+
+msgid "Download members"
+msgstr ""
+
+msgid "Download incomplete members of selected relations"
+msgstr ""
+
+msgid "Download incomplete members"
+msgstr ""
+
+msgid "Create a copy of this relation and open it in another editor window"
+msgstr ""
+
+msgid "Edit"
+msgstr "संपादन"
+
+msgid "Call relation editor for selected relation"
+msgstr ""
+
+msgid ""
+"You are about to open <b>{0}</b> different relation editor "
+"simultaneously.<br/>Do you want to continue?"
+msgid_plural ""
+"You are about to open <b>{0}</b> different relation editors "
+"simultaneously.<br/>Do you want to continue?"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Confirmation"
+msgstr ""
+
+msgid "Select in relation list"
+msgstr ""
+
+msgid "Select relation in relation list."
+msgstr "संबंध यादीतील संबंध निवडा."
+
+msgid "Add the members of all selected relations to current selection"
+msgstr ""
+
+msgid "Select the members of all selected relations"
+msgstr "निवडलेल्या सर्व संबंधांचे सदस्य निवडा"
+
+msgid "Select members (add)"
+msgstr ""
+
+msgid "Select members"
+msgstr "सदस्य निवडा"
+
+msgid "Add the selected relations to the current selection"
+msgstr ""
+
+msgid "Set the current selection to the list of selected relations"
+msgstr ""
+
+msgid "Select relation (add)"
+msgstr ""
+
+msgid "Select relation"
+msgstr "संबंध निवडा"
+
+msgid "<not>"
+msgstr "<not>"
+
+msgid "<or>"
+msgstr "<or>"
+
+msgid "<xor>"
+msgstr "<xor>"
+
+msgid "<left parent>"
+msgstr "<left parent>"
+
+msgid "<right parent>"
+msgstr "<right parent>"
+
+msgid "<colon>"
+msgstr "<colon>"
+
+msgid "<equals>"
+msgstr "<equals>"
+
+msgid "<key>"
+msgstr "<key>"
+
+msgid "<question mark>"
+msgstr "<question mark>"
+
+msgid "<end-of-file>"
+msgstr "<end-of-file>"
+
+msgid "Search..."
+msgstr "शोधा..."
+
+msgid "Search for objects."
+msgstr "वस्तू शोधा."
+
+msgid "{0}: "
+msgstr "{0}: "
+
+msgid "Filter string:"
+msgstr ""
+
+msgid "Search string:"
+msgstr ""
+
+msgid "Enter the search expression"
+msgstr ""
+
+msgid "replace selection"
+msgstr ""
+
+msgid "add to selection"
+msgstr ""
+
+msgid "remove from selection"
+msgstr ""
+
+msgid "find in selection"
+msgstr "निवडीत शोधा"
+
+msgid "case sensitive"
+msgstr ""
+
+msgid "all objects"
+msgstr ""
+
+msgid "Also include incomplete and deleted objects in search."
+msgstr ""
+
+msgid "standard"
+msgstr ""
+
+msgid "regular expression"
+msgstr ""
+
+msgid "MapCSS selector"
+msgstr ""
+
+msgid "add toolbar button"
+msgstr ""
+
+msgid "Filter"
+msgstr "गाळा"
+
+msgid "Search"
+msgstr "शोध"
+
+msgid "Submit filter"
+msgstr ""
+
+msgid "Start Search"
+msgstr "शोध सुरु करा"
+
+msgid ""
+"Search expression is not valid: \n"
+"\n"
+" {0}"
+msgstr ""
+
+msgid "Invalid search expression"
+msgstr ""
+
+msgid "basic examples"
+msgstr ""
+
+msgid "Baker Street"
+msgstr ""
+
+msgid "''Baker'' and ''Street'' in any key"
+msgstr ""
+
+msgid "\"Baker Street\""
+msgstr ""
+
+msgid "''Baker Street'' in any key"
+msgstr ""
+
+msgid "basics"
+msgstr ""
+
+msgid "''valuefragment'' anywhere in ''key''"
+msgstr ""
+
+msgid "''valuefragment'' nowhere in ''key''"
+msgstr ""
+
+msgid "''key'' with exactly ''value''"
+msgstr ""
+
+msgid "''key'' with any value"
+msgstr ""
+
+msgid "''value'' in any key"
+msgstr ""
+
+msgid "matches if ''key'' exists"
+msgstr ""
+
+msgid "matches if ''key'' is greater than ''value'' (analogously, less than)"
+msgstr ""
+
+msgid ""
+"to quote operators.<br>Within quoted strings the <b>\"</b> and <b>\\</b> "
+"characters need to be escaped by a preceding <b>\\</b> (e.g. <b>\\\"</b> and "
+"<b>\\\\</b>)."
+msgstr ""
+
+msgid "combinators"
+msgstr ""
+
+msgid "logical and (both expressions have to be satisfied)"
+msgstr ""
+
+msgid "logical or (at least one expression has to be satisfied)"
+msgstr ""
+
+msgid "logical not"
+msgstr ""
+
+msgid "use parenthesis to group expressions"
+msgstr ""
+
+msgid "objects"
+msgstr "वस्तू"
+
+msgid "all ways"
+msgstr "सर्व मार्ग"
+
+msgid "all relations"
+msgstr "सर्व संबंध"
+
+msgid "all closed ways"
+msgstr ""
+
+msgid "object without useful tags"
+msgstr ""
+
+msgid "metadata"
+msgstr ""
+
+msgid "objects changed by user"
+msgstr ""
+
+msgid "objects with given ID"
+msgstr ""
+
+msgid "objects with given version"
+msgstr ""
+
+msgid "objects with given changeset ID"
+msgstr ""
+
+msgid "objects with last modification timestamp within range"
+msgstr ""
+
+msgid "properties"
+msgstr "गुणधर्म"
+
+msgid ""
+"ways with at least 20 nodes, or relations containing at least 20 nodes"
+msgstr ""
+
+msgid ""
+"nodes with at least 3 referring ways, or relations containing at least 3 ways"
+msgstr ""
+
+msgid "objects having 5 to 10 tags"
+msgstr ""
+
+msgid "objects with given role in a relation"
+msgstr ""
+
+msgid "closed ways with an area of 100 m²"
+msgstr ""
+
+msgid "ways with a length of 200 m or more"
+msgstr "२०० मी किंवा अधिक लांबीचे मार्ग"
+
+msgid "state"
+msgstr "स्थिती"
+
+msgid "all modified objects"
+msgstr ""
+
+msgid "all new objects"
+msgstr "सर्व नवीन वस्तू"
+
+msgid "all selected objects"
+msgstr "सर्व निवडलेल्या वस्तू"
+
+msgid "all incomplete objects"
+msgstr "सर्व अपूर्ण वस्तू"
+
+msgid "related objects"
+msgstr "संबंधित वस्तू"
+
+msgid "all children of objects matching the expression"
+msgstr ""
+
+msgid "all parents of objects matching the expression"
+msgstr ""
+
+msgid "n-th member of relation and/or n-th node of way"
+msgstr ""
+
+msgid "every n-th member of relation and/or every n-th node of way"
+msgstr ""
+
+msgid "view"
+msgstr "दृश्य"
+
+msgid "objects in current view"
+msgstr "सध्या दृश्य वस्तू"
+
+msgid "objects (and all its way nodes / relation members) in current view"
+msgstr ""
+"सध्या दृश्य वस्तू (आणि त्यांच्या सर्व मार्गाच्या गाठी / संबंधांचे सदस्य)"
+
+msgid "objects in downloaded area"
+msgstr ""
+
+msgid "objects (and all its way nodes / relation members) in downloaded area"
+msgstr ""
+
+msgid "No match found for ''{0}''"
+msgstr ""
+
+msgid "Nothing added to selection by searching for ''{0}''"
+msgstr ""
+
+msgid "Nothing removed from selection by searching for ''{0}''"
+msgstr ""
+
+msgid "Nothing found in selection by searching for ''{0}''"
+msgstr ""
+
+msgid "Found {0} matches"
+msgstr ""
+
+msgctxt "search"
+msgid "CS"
+msgstr ""
+
+msgctxt "search"
+msgid "CI"
+msgstr ""
+
+msgctxt "search"
+msgid "RX"
+msgstr ""
+
+msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
+msgid "A"
+msgstr ""
+
+msgid ""
+"The regex \"{0}\" had a parse error at offset {1}, full error:\n"
+"\n"
+"{2}"
+msgstr ""
+
+msgid ""
+"The regex \"{0}\" had a parse error, full error:\n"
+"\n"
+"{1}"
+msgstr ""
+
+msgid "Expecting <i>min</i>/<i>max</i> after ''timestamp''"
+msgstr ""
+
+msgid "Range of primitive ids expected"
+msgstr ""
+
+msgid "Range of changeset ids expected"
+msgstr ""
+
+msgid "Range of versions expected"
+msgstr ""
+
+msgid "Key cannot be empty when tag operator is used. Sample use: key=value"
+msgstr ""
+
+msgid "Unknown primitive type: {0}. Allowed values are node, way or relation"
+msgstr ""
+
+msgid "Positive integer expected"
+msgstr ""
+
+msgid "Range of numbers expected"
+msgstr ""
+
+msgid "Unexpected token. Expected {0}, found {1}"
+msgstr ""
+
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
+msgid "Unexpected token: {0}"
+msgstr ""
+
+msgid "Missing parameter for OR"
+msgstr ""
+
+msgid "Missing parameter for XOR"
+msgstr ""
+
+msgid "Missing operator for NOT"
+msgstr ""
+
+msgid "Automatically truncating value of tag ''{0}'' on deleted object {1}"
+msgstr ""
+
+msgid ""
+"Length of value for tag ''{0}'' on object {1} exceeds the max. allowed "
+"length {2}. Values length is {3}."
+msgstr ""
+
+msgid "Precondition Violation"
+msgstr "पूर्वअट भंग"
+
+msgid "{0} nodes in way {1} exceed the max. allowed number of nodes {2}"
+msgstr ""
+
+msgid "API Capabilities Violation"
+msgstr "API क्षमता भंग"
+
+msgid "Cyclic dependency between relations:"
+msgstr "संबंधांमध्ये चक्राकार अवलंब:"
+
+msgid "Removed obsolete tags"
+msgstr ""
+
+msgid "Fix deprecated tags"
+msgstr ""
+
+msgid ""
+"<html>{0} relations build a cycle because they refer to each other.<br>JOSM "
+"cannot upload them. Please edit the relations and remove the cyclic "
+"dependency.</html>"
+msgstr ""
+
+msgid "Relation ..."
+msgstr "संबंध ..."
+
+msgid "... refers to relation"
+msgstr ""
+
+msgid "Cycling dependencies"
+msgstr "चक्राकार अवलंब"
+
+msgid "Uploading modified notes"
+msgstr ""
+
+msgid "Note {0} failed: {1}"
+msgstr ""
+
+msgid "Notes failed to upload"
+msgstr ""
+
+msgid ""
+"The following are results of automatic validation. Try fixing these, but be "
+"careful (don''t destroy valid data). When in doubt ignore them.<br>When you "
+"cancel this dialog, you can find the entries in the validator side panel to "
+"inspect them."
+msgstr ""
+
+msgid "Errors"
+msgstr ""
+
+msgid "Usually this should be fixed."
+msgstr ""
+
+msgid "Warnings"
+msgstr "ताकिदी"
+
+msgid "Fix these when possible."
+msgstr ""
+
+msgid "Other"
+msgstr "इतर"
+
+msgid "Informational warnings, expect many false entries."
+msgstr ""
+
+msgid "Suspicious data found. Upload anyway?"
+msgstr ""
+
+msgid "Continue upload"
+msgstr ""
+
+msgid "Add node {0}"
+msgstr ""
+
+msgid "Add way {0}"
+msgstr ""
+
+msgid "Add relation {0}"
+msgstr ""
+
+msgid "Added {0} object"
+msgid_plural "Added {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "New way {0} has 0 nodes"
+msgstr ""
+
+msgid "Change node {0}"
+msgstr "गाठ {0} बदला"
+
+msgid "Change way {0}"
+msgstr "मार्ग {0} बदला"
+
+msgid "Change relation {0}"
+msgstr "संबंध {0} बदला"
+
+msgid "Changed nodes of {0}"
+msgstr "{0}च्या गाठी बदलल्या"
+
+msgid "Remove \"{0}\" for node ''{1}''"
+msgstr ""
+
+msgid "Remove \"{0}\" for way ''{1}''"
+msgstr ""
+
+msgid "Remove \"{0}\" for relation ''{1}''"
+msgstr ""
+
+msgid "Set {0}={1} for node ''{2}''"
+msgstr ""
+
+msgid "Set {0}={1} for way ''{2}''"
+msgstr ""
+
+msgid "Set {0}={1} for relation ''{2}''"
+msgstr ""
+
+msgid "Remove \"{0}\" for {1} object"
+msgid_plural "Remove \"{0}\" for {1} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Set {0}={1} for {2} object"
+msgid_plural "Set {0}={1} for {2} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Deleted {0} tags for {1} object"
+msgid_plural "Deleted {0} tags for {1} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Set {0} tags for {1} object"
+msgid_plural "Set {0} tags for {1} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Replace \"{0}\" by \"{1}\" for"
+msgstr ""
+
+msgid "object"
+msgid_plural "objects"
+msgstr[0] "वस्तू"
+msgstr[1] "वस्तू"
+
+msgid "Change relation member role for {0} {1}"
+msgstr ""
+
+msgid "At least one object to delete required, got empty collection"
+msgstr ""
+
+msgid "Delete node {0}"
+msgstr ""
+
+msgid "Delete way {0}"
+msgstr ""
+
+msgid "Delete relation {0}"
+msgstr ""
+
+msgid "Delete {0} object"
+msgid_plural "Delete {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete {0} node"
+msgid_plural "Delete {0} nodes"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete {0} way"
+msgid_plural "Delete {0} ways"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete {0} relation"
+msgid_plural "Delete {0} relations"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Deleted ''{0}''"
+msgstr ""
+
+msgid "Delete confirmation"
+msgstr ""
+
+msgid ""
+"You are about to delete nodes outside of the area you have "
+"downloaded.<br>This can cause problems because other objects (that you do "
+"not see) might use them.<br>Do you really want to delete?"
+msgstr ""
+
+msgid ""
+"You are about to delete incomplete objects.<br>This will cause problems "
+"because you don''t see the real object.<br>Do you really want to delete?"
+msgstr ""
+
+msgid ""
+"You are about to delete {0} relation: {1}<br/>This step is rarely necessary "
+"and cannot be undone easily after being uploaded to the server.<br/>Do you "
+"really want to delete?"
+msgid_plural ""
+"You are about to delete {0} relations: {1}<br/>This step is rarely necessary "
+"and cannot be undone easily after being uploaded to the server.<br/>Do you "
+"really want to delete?"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete relation?"
+msgstr ""
+
+msgid "Move {0} node"
+msgid_plural "Move {0} nodes"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Purged {0} object"
+msgid_plural "Purged {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Removed nodes from {0}"
+msgstr ""
+
+msgid "Rotate {0} node"
+msgid_plural "Rotate {0} nodes"
+msgstr[0] "{0} गाठ फिरवा"
+msgstr[1] "{0} गाठी फिरवा"
+
+msgid "Scale {0} node"
+msgid_plural "Scale {0} nodes"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Selected {0} object"
+msgid_plural "Selected {0} objects"
+msgstr[0] "{0} वस्तू निवडली"
+msgstr[1] "{0} वस्तू निवडल्या"
+
+msgid "Sequence: {0}"
+msgstr "अनुक्रम: {0}"
+
+msgid "Transform {0} node"
+msgid_plural "Transform {0} nodes"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"<html>Layer ''{0}'' already has a conflict for object<br>''{1}''.<br>This "
+"conflict cannot be added.</html>"
+msgstr ""
+
+msgid "Double conflict"
+msgstr ""
+
+msgid ""
+"Layer ''{0}'' does not exist any more. Cannot remove conflict for object "
+"''{1}''."
+msgstr ""
+
+msgid "Add conflict for ''{0}''"
+msgstr ""
+
+msgid ""
+"Cannot undo command ''{0}'' because layer ''{1}'' is not present any more"
+msgstr ""
+
+msgid "Resolve conflicts in coordinates in {0}"
+msgstr ""
+
+msgid "Cannot resolve undecided conflict."
+msgstr ""
+
+msgid "Resolve conflicts in deleted state in {0}"
+msgstr ""
+
+msgid "Set the ''modified'' flag for node {0}"
+msgstr ""
+
+msgid "Set the ''modified'' flag for way {0}"
+msgstr ""
+
+msgid "Set the ''modified'' flag for relation {0}"
+msgstr ""
+
+msgid "Resolve conflicts in member list of relation {0}"
+msgstr ""
+
+msgid "Resolve {0} tag conflict in node {1}"
+msgid_plural "Resolve {0} tag conflicts in node {1}"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Resolve {0} tag conflict in way {1}"
+msgid_plural "Resolve {0} tag conflicts in way {1}"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Resolve {0} tag conflict in relation {1}"
+msgid_plural "Resolve {0} tag conflicts in relation {1}"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Resolve version conflict for node {0}"
+msgstr ""
+
+msgid "Resolve version conflict for way {0}"
+msgstr ""
+
+msgid "Resolve version conflict for relation {0}"
+msgstr ""
+
+msgid "Resolve conflicts in node list of way {0}"
+msgstr ""
+
+msgid "Main dataset does not include node {0}"
+msgstr ""
+
+msgid "Apply?"
+msgstr ""
+
+msgid ""
+"<html>You are going to reverse the way ''{0}'',<br/> whose semantic meaning "
+"of its tag ''{1}'' is defined by its direction.<br/>Do you really want to "
+"change the way direction, thus its semantic meaning?</html>"
+msgid_plural ""
+"<html>You are going to reverse the way ''{0}'',<br/> whose semantic meaning "
+"of these tags are defined by its direction:<br/>{1}Do you really want to "
+"change the way direction, thus its semantic meaning?</html>"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Reverse directional way."
+msgstr ""
+
+msgid ""
+"When reversing this way, the following changes are suggested in order to "
+"maintain data consistency."
+msgstr ""
+
+msgid "Relation"
+msgstr "संबंध"
+
+msgid "Old role"
+msgstr "जुनी भूमिका"
+
+msgid "New role"
+msgstr "नवी भूमिका"
+
+msgid "Old key"
+msgstr ""
+
+msgid "Old value"
+msgstr ""
+
+msgid "New key"
+msgstr ""
+
+msgid "New value"
+msgstr ""
+
+msgid "Apply selected changes"
+msgstr ""
+
+msgid "Do not apply changes"
+msgstr ""
+
+msgid "Please select which changes you want to apply."
+msgstr ""
+
+msgid "Tags of "
+msgstr ""
+
+msgid "Roles in relations referring to"
+msgstr ""
+
+msgid "Automatic tag correction"
+msgstr ""
+
+msgid "Unable to create directory {0}, autosave will be disabled"
+msgstr ""
+
+msgid "Unable to create file {0}, other filename will be used"
+msgstr ""
+
+msgid "IOError while creating file, autosave will be skipped: {0}"
+msgstr ""
+
+msgid "Unable to delete old backup file {0}"
+msgstr ""
+
+msgid "Your work has been saved automatically."
+msgstr ""
+
+msgid "Restoring files"
+msgstr ""
+
+msgid "Illegal latitude value ''{0}''"
+msgstr ""
+
+msgid "Illegal longitude value ''{0}''"
+msgstr ""
+
+msgid "Question"
+msgstr "प्रश्न"
+
+msgid "Message"
+msgstr "संदेश"
+
+msgid "Enter text"
+msgstr ""
+
+msgid "Installing plugins"
+msgstr ""
+
+msgid ""
+"<html>Settings file asks to append preferences to <b>{0}</b>,<br/> but its "
+"default value is unknown at this moment.<br/> Please activate corresponding "
+"function manually and retry importing."
+msgstr ""
+
+msgid "Failed to create missing cache directory: {0}"
+msgstr ""
+
+msgid "<html>Failed to create missing cache directory: {0}</html>"
+msgstr ""
+
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
+msgid ""
+"Failed to initialize preferences. Preference directory ''{0}'' is not a "
+"directory."
+msgstr ""
+
+msgid ""
+"<html>Failed to initialize preferences.<br>Preference directory ''{0}'' is "
+"not a directory.</html>"
+msgstr ""
+
+msgid ""
+"Failed to initialize preferences. Failed to create missing preference "
+"directory: {0}"
+msgstr ""
+
+msgid ""
+"<html>Failed to initialize preferences.<br>Failed to create missing "
+"preference directory: {0}</html>"
+msgstr ""
+
+msgid "Missing preference file ''{0}''. Creating a default preference file."
+msgstr ""
+
+msgid ""
+"Replacing existing preference file ''{0}'' with default preference file."
+msgstr ""
+
+msgid ""
+"<html>Failed to initialize preferences.<br>Failed to reset preference file "
+"to default: {0}</html>"
+msgstr ""
+
+msgid ""
+"<html>Preferences file had errors.<br> Making backup of old one to "
+"<br>{0}<br> and creating a new default preference file.</html>"
+msgstr ""
+
+msgid ""
+"Failed to initialize preferences. Failed to reset preference file to "
+"default: {0}"
+msgstr ""
+
+msgid "Paint style {0}: {1}"
+msgstr "रंगशैली {0}: {1}"
+
+msgid "Layer: {0}"
+msgstr "थर: {0}"
+
+msgid "Failed to persist preferences to ''{0}''"
+msgstr ""
+
+msgid ""
+"Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
+"startup)."
+msgstr ""
+
+msgid " (at line {0}, column {1})"
+msgstr ""
+
+msgid "Preference setting {0} has been removed since it is no longer used."
+msgstr ""
+
+msgid "Metric"
+msgstr "मीटरमान"
+
+msgid "Chinese"
+msgstr "चीनी"
+
+msgid "Imperial"
+msgstr ""
+
+msgid "Nautical Mile"
+msgstr "सागरी मैल"
+
+msgid "Failed to load resource ''{0}'', error is {1}."
+msgstr ""
+
+msgid "UNKNOWN"
+msgstr "अज्ञात"
+
+msgid "Unexpected JOSM version number in revision file, value is ''{0}''"
+msgstr ""
+
+msgid "The revision file ''/REVISION'' is missing."
+msgstr ""
+
+msgid "Already registered a conflict for primitive ''{0}''."
+msgstr ""
+
+msgid "Decimal Degrees"
+msgstr "दशमान अंश"
+
+msgid "deg° min'' sec\""
+msgstr ""
+
+msgid "deg° min'' (Nautical)"
+msgstr ""
+
+msgid "Projected Coordinates"
+msgstr ""
+
+msgctxt "compass"
+msgid "S"
+msgstr "द"
+
+msgctxt "compass"
+msgid "N"
+msgstr "उ"
+
+msgctxt "compass"
+msgid "W"
+msgstr "प"
+
+msgctxt "compass"
+msgid "E"
+msgstr "पू"
+
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
+msgstr ""
+
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
+msgstr ""
+
+msgid "ID > 0 expected. Got {0}."
+msgstr ""
+
+msgid "Version > 0 expected. Got {0}."
+msgstr ""
+
+msgid ""
+"Cannot assign a changesetId > 0 to a new primitive. Value of changesetId is "
+"{0}"
+msgstr ""
+
+msgid "A primitive with ID = 0 cannot be invisible."
+msgstr ""
+
+msgid ""
+"Unable to add primitive {0} to the dataset because it is already included"
+msgstr ""
+
+msgid ""
+"JOSM expected to find primitive [{0} {1}] in dataset but it is not there. "
+"Please report this at {2}. This is not a critical error, it should be safe "
+"to continue in your work."
+msgstr ""
+
+msgid "Missing merge target for way with id {0}"
+msgstr ""
+
+msgid ""
+"Object of type {0} with id {1} was marked to be deleted, but it''s missing "
+"in the source dataset"
+msgstr ""
+
+msgid "Missing merge target for node with id {0}"
+msgstr ""
+
+msgid "Missing merge target for relation with id {0}"
+msgstr ""
+
+msgid "Missing merge target of type {0} with id {1}"
+msgstr ""
+
+msgid "Conflict in ''visible'' attribute for object of type {0} with id {1}"
+msgstr ""
+
+msgid "Merging data..."
+msgstr ""
+
+msgid "Test ''{0}'' completed in {1}"
+msgstr "चाचणी ''{0}'' {1} मध्ये पूर्ण"
+
+msgid "Cannot add a way with only {0} nodes."
+msgstr ""
+
+msgid "Each node must connect exactly 2 ways"
+msgstr ""
+
+msgid "There is an intersection between ways."
+msgstr "मार्गांमध्ये छेदन आहे."
+
+msgid ""
+"Cannot merge because either of the participating primitives is new and the "
+"other is not"
+msgstr ""
+
+msgid ""
+"Cannot merge primitives with different ids. This id is {0}, the other is {1}"
+msgstr ""
+
+msgid "node"
+msgid_plural "nodes"
+msgstr[0] "गाठ"
+msgstr[1] "गाठी"
+
+msgid "way"
+msgid_plural "ways"
+msgstr[0] "मार्ग"
+msgstr[1] "मार्ग"
+
+msgid "relation"
+msgid_plural "relations"
+msgstr[0] "संबंध"
+msgstr[1] "संबंध"
+
+msgid "closedway"
+msgstr ""
+
+msgid "multipolygon"
+msgstr "बहुबहुभुज"
+
+msgid ""
+"Tag collection cannot be applied to a primitive because there are keys with "
+"multiple values."
+msgstr ""
+
+msgid "<anonymous>"
+msgstr "<निनावी>"
+
+msgid "Cannot add node {0} to incomplete way {1}."
+msgstr ""
+
+msgid "Nodes in way must be in the same dataset"
+msgstr ""
+
+msgid "Deleted node referenced by {0}"
+msgstr ""
+
+msgid "Complete node {0} with null coordinates in way {1}"
+msgstr ""
+
+msgid ""
+"Cannot compare primitive with ID ''{0}'' to primitive with ID ''{1}''."
+msgstr ""
+
+msgid "Parameter {0} not in range 0..{1}. Got ''{2}''."
+msgstr ""
+
+msgid "Failed to load map renderer class ''{0}''. The class wasn''t found."
+msgstr ""
+
+msgid ""
+"Can''t activate map renderer class ''{0}'', because the class wasn''t found."
+msgstr ""
+
+msgid "Activating the standard map renderer instead."
+msgstr ""
+
+msgid ""
+"Can''t activate map renderer class ''{0}'', because it isn''t a subclass of "
+"''{1}''."
+msgstr ""
+
+msgid ""
+"Can''t activate map renderer class ''{0}'', because it isn''t registered as "
+"map renderer."
+msgstr ""
+
+msgid "Wireframe Map Renderer"
+msgstr ""
+
+msgid "Renders the map as simple wire frame."
+msgstr ""
+
+msgid "Styled Map Renderer"
+msgstr ""
+
+msgid "Renders the map using style rules in a set of style sheets."
+msgstr ""
+
+msgid "inactive"
+msgstr ""
+
+msgid "selected"
+msgstr ""
+
+msgid "Relation: selected"
+msgstr ""
+
+msgid "Node: standard"
+msgstr ""
+
+msgid "Node: connection"
+msgstr ""
+
+msgid "Node: tagged"
+msgstr ""
+
+msgid "untagged way"
+msgstr ""
+
+msgid "background"
+msgstr "पार्श्वभूमि"
+
+msgid "highlight"
+msgstr ""
+
+msgid "highlight wireframe"
+msgstr ""
+
+msgid "untagged"
+msgstr ""
+
+msgid "text"
+msgstr ""
+
+msgid "areatext"
+msgstr ""
+
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
+msgstr ""
+
+msgid "Unknown parameter: ''{0}''."
+msgstr "अज्ञात प्रमाणक: ''{0}''."
+
+msgid "Value expected for parameter ''{0}''."
+msgstr "प्रमाणक ''{0}'' साठी मूल्य अपेक्षित."
+
+msgid "No value expected for parameter ''{0}''."
+msgstr "प्रमाणक ''{0}'' साठी मूल्य अनपेक्षित."
+
+msgid "Unexpected parameter format (''{0}'')"
+msgstr "अनपेक्षित प्रमाणक प्रारूप (''{0}'')"
+
+msgid "Value ''{0}'' for option +init not supported."
+msgstr ""
+
+msgid ": "
+msgstr ": "
+
+msgid "Ellipsoid ''{0}'' not supported."
+msgstr ""
+
+msgid "Combination of ellipsoid parameters is not supported."
+msgstr ""
+
+msgid "Unknown datum identifier: ''{0}''"
+msgstr ""
+
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgstr ""
+
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgstr ""
+
+msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
+msgstr ""
+
+msgid ""
+"Unexpected number of arguments for parameter ''towgs84'' (must be 3 or 7)"
+msgstr ""
+
+msgid "Unable to parse value of parameter ''towgs84'' (''{0}'')"
+msgstr ""
+
+msgid "Projection required (+proj=*)"
+msgstr ""
+
+msgid "Unknown projection identifier: ''{0}''"
+msgstr ""
+
+msgid "Unexpected number of arguments for parameter ''+bounds'' (must be 4)"
+msgstr ""
+
+msgid "Unknown parameter ''{0}''"
+msgstr ""
+
+msgid "Expected number argument for parameter ''{0}''"
+msgstr ""
+
+msgid "Unable to parse value ''{1}'' of parameter ''{0}'' as number."
+msgstr ""
+
+msgid ""
+"Unable to parse value ''{1}'' of parameter ''{0}'' as coordinate value."
+msgstr ""
+
+msgid "Custom Projection"
+msgstr ""
+
+msgid "GRS80"
+msgstr ""
+
+msgid "WGS84"
+msgstr ""
+
+msgid "Parameter ''{0}'' required."
+msgstr "प्रमाणक ''{0}'' आवश्यक."
+
+msgid "Lambert Conformal Conic"
+msgstr ""
+
+msgid "Lat/lon (Geodetic)"
+msgstr ""
+
+msgid "Mercator"
+msgstr ""
+
+msgid "Swiss Oblique Mercator"
+msgstr ""
+
+msgid "Transverse Mercator"
+msgstr ""
+
+msgid ""
+"Error initializing test {0}:\n"
+" {1}"
+msgstr ""
+
+msgid "validation error"
+msgstr ""
+
+msgid "validation warning"
+msgstr ""
+
+msgid "validation other"
+msgstr ""
+
+msgid "Running test {0}"
+msgstr "चाचणी {0} घेत आहे"
+
+msgid "E-mail address contains non-ascii characters"
+msgstr ""
+
+msgid "E-mail address is invalid"
+msgstr ""
+
+msgid "E-mail address contains an invalid username: {0}"
+msgstr ""
+
+msgid "E-mail address contains an invalid domain: {0}"
+msgstr ""
+
+msgid "URL contains non-ascii characters"
+msgstr ""
+
+msgid "URL is invalid"
+msgstr ""
+
+msgid "URL contains an invalid protocol: {0}"
+msgstr ""
+
+msgid "URL contains an invalid authority: {0}"
+msgstr ""
+
+msgid "URL contains an invalid path: {0}"
+msgstr ""
+
+msgid "URL contains an invalid query: {0}"
+msgstr ""
+
+msgid "URL contains an invalid fragment: {0}"
+msgstr ""
+
+msgid "Addresses"
+msgstr "पत्ते"
+
+msgid "Checks for errors in addresses and associatedStreet relations."
+msgstr ""
+
+msgid "Multiple associatedStreet relations"
+msgstr ""
+
+msgid "House number without street"
+msgstr ""
+
+msgid "House number ''{0}'' duplicated"
+msgstr ""
+
+msgid "Duplicate house numbers"
+msgstr ""
+
+msgid "Multiple street names in relation"
+msgstr ""
+
+msgid "House number too far from street"
+msgstr ""
+
+msgid "API Capabilities"
+msgstr "API क्षमता"
+
+msgid "Checks for errors against API capabilities"
+msgstr ""
+
+msgid ""
+"Way contains more than {0} nodes. It should be replaced by a multipolygon"
+msgstr ""
+
+msgid "Way contains more than {0} nodes. It should be split or simplified"
+msgstr ""
+
+msgid "Barriers and entrances"
+msgstr ""
+
+msgid "Checks for errors in barriers and entrances."
+msgstr ""
+
+msgid "Barrier entrance not set on a barrier"
+msgstr ""
+
+msgid "Coastlines"
+msgstr ""
+
+msgid "This test checks that coastlines are correct."
+msgstr ""
+
+msgid "Unconnected coastline"
+msgstr ""
+
+msgid "Unordered coastline"
+msgstr ""
+
+msgid "Reversed coastline"
+msgstr ""
+
+msgid "Conditional Keys"
+msgstr ""
+
+msgid "Tests for the correct usage of ''*:conditional'' tags."
+msgstr ""
+
+msgid "Does not match pattern ''restriction value @ condition''"
+msgstr ""
+
+msgid "{0} is not a valid restriction value"
+msgstr ""
+
+msgid "Wrong syntax in {0} key"
+msgstr ""
+
+msgid "Error in {0} value: {1}"
+msgstr ""
+
+msgid "Crossing ways"
+msgstr ""
+
+msgid "Crossing buildings"
+msgstr ""
+
+msgid "Crossing waterways"
+msgstr ""
+
+msgid "Crossing waterway/highway"
+msgstr ""
+
+msgid "Crossing boundaries"
+msgstr ""
+
+msgid "Crossing barriers"
+msgstr ""
+
+msgid ""
+"This test checks if two roads, railways, waterways or buildings crosses in "
+"the same layer, but are not connected by a node."
+msgstr ""
+
+msgid "Duplicated nodes"
+msgstr ""
+
+msgid "This test checks that there are no nodes at the very same location."
+msgstr ""
+
+msgid "Mixed type duplicated nodes"
+msgstr ""
+
+msgid "Highway duplicated nodes"
+msgstr ""
+
+msgid "Railway duplicated nodes"
+msgstr ""
+
+msgid "Waterway duplicated nodes"
+msgstr ""
+
+msgid "Boundary duplicated nodes"
+msgstr ""
+
+msgid "Power duplicated nodes"
+msgstr ""
+
+msgid "Natural duplicated nodes"
+msgstr ""
+
+msgid "Building duplicated nodes"
+msgstr ""
+
+msgid "Landuse duplicated nodes"
+msgstr ""
+
+msgid "Other duplicated nodes"
+msgstr ""
+
+msgid "Nodes at same position"
+msgstr ""
+
+msgid "Duplicated relations"
+msgstr ""
+
+msgid ""
+"This test checks that there are no relations with same tags and same members "
+"with same roles."
+msgstr ""
+
+msgid "Relations with same members"
+msgstr ""
+
+msgid "Delete duplicate relations"
+msgstr ""
+
+msgid "Duplicated ways"
+msgstr ""
+
+msgid ""
+"This test checks that there are no ways with same node coordinates and "
+"optionally also same tags."
+msgstr ""
+
+msgid "Ways with same position"
+msgstr ""
+
+msgid "Delete duplicate ways"
+msgstr ""
+
+msgid "Duplicated way nodes"
+msgstr ""
+
+msgid "Checks for ways with identical consecutive nodes."
+msgstr ""
+
+msgid "Highways"
+msgstr ""
+
+msgid "Performs semantic checks on highways."
+msgstr ""
+
+msgid "Incorrect roundabout (highway: {0} instead of {1})"
+msgstr ""
+
+msgid "Highway link is not linked to adequate highway/link"
+msgstr ""
+
+msgid "Missing pedestrian crossing information"
+msgstr ""
+
+msgid "Unknown country code: {0}"
+msgstr ""
+
+msgid "Unknown source:maxspeed context: {0}"
+msgstr ""
+
+msgid "Internet tags"
+msgstr ""
+
+msgid "Checks for errors in internet-related tags."
+msgstr ""
+
+msgid " URL cannot be converted to ASCII: {0}"
+msgstr ""
+
+msgid "''{0}'': {1}"
+msgstr "''{0}'': {1}"
+
+msgid "Lane tags"
+msgstr ""
+
+msgid "Test that validates ''lane:'' tags."
+msgstr ""
+
+msgid "Number of {0} greater than {1}"
+msgstr "{0}ची संख्या {1}पेक्षा अधिक"
+
+msgid "{0}+{1}"
+msgstr "{0}+{1}"
+
+msgid "Number of lane dependent values inconsistent"
+msgstr ""
+
+msgid "Number of lane dependent values inconsistent in forward direction"
+msgstr ""
+
+msgid "Number of lane dependent values inconsistent in backward direction"
+msgstr ""
+
+msgid "Long segments"
+msgstr ""
+
+msgid "This tests for long way segments, which are usually errors."
+msgstr ""
+
+msgid "Very long segment of {0} kilometers"
+msgstr ""
+
+msgid "Tag checker (MapCSS based)"
+msgstr ""
+
+msgid "This test checks for errors in tag keys and values."
+msgstr ""
+
+msgid "Unable to replace argument {0} in {1}: {2}"
+msgstr ""
+
+msgid "Fix of {0}"
+msgstr ""
+
+msgid " or "
+msgstr " किंवा "
+
+msgid "{0}, use {1} instead"
+msgstr "{0}, त्याऐवजी {1} वापरा"
+
+msgid "Adding {0} to tag checker"
+msgstr ""
+
+msgid "Failed to add {0} to tag checker"
+msgstr ""
+
+msgid "Multipolygon"
+msgstr "बहुबहुभुज"
+
+msgid "This test checks if multipolygons are valid."
+msgstr ""
+
+msgid "Area style way is not closed"
+msgstr ""
+
+msgid "No outer way for multipolygon"
+msgstr ""
+
+msgid "Role for ''{0}'' should be ''{1}''"
+msgstr ""
+
+msgid "No area style for multipolygon"
+msgstr ""
+
+msgid ""
+"Multipolygon relation should be tagged with area tags and not the outer way"
+msgid_plural ""
+"Multipolygon relation should be tagged with area tags and not the outer ways"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"With the currently used mappaint style the style for inner way equals the "
+"multipolygon style"
+msgstr ""
+
+msgid "Style for outer way mismatches"
+msgstr ""
+
+msgid ""
+"With the currently used mappaint style(s) the style for outer way mismatches "
+"polygon"
+msgstr ""
+
+msgid "Area style on outer way"
+msgstr ""
+
+msgid "Multipolygon is not closed"
+msgstr ""
+
+msgid "Multipolygon inner way is outside"
+msgstr ""
+
+msgid "Intersection between multipolygon ways"
+msgstr ""
+
+msgid "No useful role for multipolygon member"
+msgstr ""
+
+msgid "Non-Way in multipolygon"
+msgstr ""
+
+msgid "Missing name:* translation"
+msgstr ""
+
+msgid ""
+"This test finds multilingual objects whose ''name'' attribute is not equal "
+"to some ''name:*'' attribute and not a composition of ''name:*'' attributes, "
+"e.g., Italia - Italien - Italy."
+msgstr ""
+
+msgid "Missing name:*={0}. Add tag with correct language key."
+msgstr ""
+
+msgid "A name is missing, even though name:* exists."
+msgstr ""
+
+msgid "Opening hours syntax"
+msgstr ""
+
+msgid "This test checks the correct usage of the opening hours syntax."
+msgstr ""
+
+msgid "opening_hours value can be prettified"
+msgstr ""
+
+msgid "Unexpected token:"
+msgstr ""
+
+msgid "Unexpected token (school holiday parser):"
+msgstr ""
+
+msgid "Unexpected token in number range:"
+msgstr ""
+
+msgid "Unexpected token in week range:"
+msgstr ""
+
+msgid "Unexpected token in weekday range:"
+msgstr ""
+
+msgid "Unexpected token in month range:"
+msgstr ""
+
+msgid "Unexpected token in year range:"
+msgstr ""
+
+msgid "Invalid/unsupported syntax."
+msgstr ""
+
+msgid "Overlapping ways"
+msgstr ""
+
+msgid ""
+"This test checks that a connection between two nodes is not used by more "
+"than one way."
+msgstr ""
+
+msgid "Areas share segment"
+msgstr ""
+
+msgid "Highways share segment with area"
+msgstr ""
+
+msgid "Railways share segment with area"
+msgstr ""
+
+msgid "Ways share segment with area"
+msgstr ""
+
+msgid "Overlapping highways"
+msgstr ""
+
+msgid "Overlapping railways"
+msgstr ""
+
+msgid "Way contains segment twice"
+msgstr ""
+
+msgid "Power lines"
+msgstr ""
+
+msgid ""
+"Checks for nodes in power lines that do not have a power=tower/pole tag."
+msgstr ""
+
+msgid "Missing power tower/pole within power line"
+msgstr ""
+
+msgid "Role verification problem"
+msgstr ""
+
+msgid "Relation checker"
+msgstr ""
+
+msgid "Checks for errors in relations."
+msgstr ""
+
+msgid ""
+"Route scheme is unspecified. Add {0} ({1}=public_transport; {2}=legacy)"
+msgstr ""
+
+msgid "Relation type is unknown"
+msgstr "संबंध प्रकार अज्ञात आहे"
+
+msgid "Relation is empty"
+msgstr ""
+
+msgid "Role member does not match expression {0} in template {1}"
+msgstr ""
+
+msgid ""
+"Role member type {0} does not match accepted list of {1} in template {2}"
+msgstr ""
+
+msgid "<empty>"
+msgstr ""
+
+msgid "Role {0} unknown in templates {1}"
+msgstr ""
+
+msgid "Empty role type found when expecting one of {0}"
+msgstr ""
+
+msgid "Role {0} missing"
+msgstr ""
+
+msgid "Number of {0} roles too low ({1})"
+msgstr ""
+
+msgid "Number of {0} roles too high ({1})"
+msgstr ""
+
+msgid "Self-intersecting ways"
+msgstr ""
+
+msgid ""
+"This test checks for ways that contain some of their nodes more than once."
+msgstr ""
+
+msgid "Similarly named ways"
+msgstr ""
+
+msgid ""
+"This test checks for ways with similar names that may have been misspelled."
+msgstr ""
+
+msgid "Tag checker"
+msgstr ""
+
+msgid "Adding {0} to ignore tags"
+msgstr ""
+
+msgid "Invalid tagchecker line - {0}: {1}"
+msgstr ""
+
+msgid "Invalid spellcheck line: {0}"
+msgstr ""
+
+msgid "Adding {0} to spellchecker"
+msgstr ""
+
+msgid ""
+"Could not access data file(s):\n"
+"{0}"
+msgstr ""
+
+msgid "Suspicious tag/value combinations"
+msgstr ""
+
+msgid "Key ''{0}'' invalid."
+msgstr ""
+
+msgid "Tag value contains character with code less than 0x20"
+msgstr ""
+
+msgid "Tag key contains character with code less than 0x20"
+msgstr ""
+
+msgid "Tag value longer than allowed"
+msgstr ""
+
+msgid "Tag key longer than allowed"
+msgstr ""
+
+msgid "Tags with empty values"
+msgstr ""
+
+msgid "Invalid white space in property key"
+msgstr ""
+
+msgid "Property values start or end with white space"
+msgstr ""
+
+msgid "Property values contain HTML entity"
+msgstr ""
+
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
+msgid "Key ''{0}'' not in presets."
+msgstr ""
+
+msgid "Presets do not contain property key"
+msgstr ""
+
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
+msgid "Value ''{0}'' for key ''{1}'' not in presets."
+msgstr ""
+
+msgid "Presets do not contain property value"
+msgstr ""
+
+msgid "FIXMES"
+msgstr ""
+
+msgid "Check property keys."
+msgstr ""
+
+msgid "Validate that property keys are valid checking against list of words."
+msgstr ""
+
+msgid "Use complex property checker."
+msgstr ""
+
+msgid "Validate property values and tags using complex rules."
+msgstr ""
+
+msgid "TagChecker source"
+msgstr ""
+
+msgid "Data sources ({0})"
+msgstr ""
+
+msgid "Check property values."
+msgstr ""
+
+msgid "Validate that property values are valid checking against presets."
+msgstr ""
+
+msgid "Check for FIXMES."
+msgstr ""
+
+msgid "Looks for nodes or ways with FIXME in any property value."
+msgstr ""
+
+msgid "Fix tags"
+msgstr ""
+
+msgid "Could not find element type"
+msgstr ""
+
+msgid "Incorrect number of parameters"
+msgstr ""
+
+msgid "Could not find warning level"
+msgstr ""
+
+msgid "Illegal expression ''{0}''"
+msgstr ""
+
+msgid "Illegal regular expression ''{0}''"
+msgstr ""
+
+msgid "Turnrestrictions"
+msgstr ""
+
+msgid "This test checks if turnrestrictions are valid."
+msgstr ""
+
+msgid "Unknown role"
+msgstr "अज्ञात भूमिका"
+
+msgid "Unknown member type"
+msgstr "अज्ञात सदस्य प्रकार"
+
+msgid "More than one \"from\" way found"
+msgstr ""
+
+msgid "More than one \"to\" way found"
+msgstr ""
+
+msgid "More than one \"via\" node found"
+msgstr ""
+
+msgid "Cannot mix node and way for role \"via\""
+msgstr ""
+
+msgid "No \"from\" way found"
+msgstr ""
+
+msgid "No \"to\" way found"
+msgstr ""
+
+msgid "No \"via\" node or way found"
+msgstr ""
+
+msgid "The \"from\" way does not start or end at a \"via\" node."
+msgstr ""
+
+msgid "Superfluous turnrestriction as \"to\" way is oneway"
+msgstr ""
+
+msgid "The \"to\" way does not start or end at a \"via\" node."
+msgstr ""
+
+msgid "The \"from\" and the first \"via\" way are not connected."
+msgstr ""
+
+msgid "The \"via\" ways are not connected."
+msgstr ""
+
+msgid "The last \"via\" and the \"to\" way are not connected."
+msgstr ""
+
+msgid "Unclosed Ways"
+msgstr ""
+
+msgid "This tests if ways which should be circular are closed."
+msgstr ""
+
+msgid "Unclosed way"
+msgstr ""
+
+msgid "natural type {0}"
+msgstr "नैसर्गिक प्रकार {0}"
+
+msgid "landuse type {0}"
+msgstr "भूवापर प्रकार {0}"
+
+msgid "amenities type {0}"
+msgstr ""
+
+msgid "sport type {0}"
+msgstr "क्रीडा प्रकार {0}"
+
+msgid "tourism type {0}"
+msgstr "पर्यटन प्रकार {0}"
+
+msgid "shop type {0}"
+msgstr "दुकान प्रकार {0}"
+
+msgid "leisure type {0}"
+msgstr ""
+
+msgid "waterway type {0}"
+msgstr "जलमार्ग प्रकार {0}"
+
+msgid "boundary type {0}"
+msgstr "सीमा प्रकार {0}"
+
+msgid "building"
+msgstr "इमारत"
+
+msgid "area"
+msgstr "क्षेत्र"
+
+msgid "Unconnected highways"
+msgstr ""
+
+msgid "Unconnected railways"
+msgstr "न जोडलेले लोहमार्ग"
+
+msgid "Unconnected waterways"
+msgstr "न जोडलेले जलमार्ग"
+
+msgid "Unconnected natural lands and landuses"
+msgstr "न जोडलेल्या नैसर्गिक जमिनी आणि भूवापर"
+
+msgid "Unconnected power ways"
+msgstr ""
+
+msgid "This test checks if a way has an endpoint very near to another way."
+msgstr ""
+
+msgid "Way end node near other highway"
+msgstr ""
+
+msgid "Way end node near other way"
+msgstr "मार्गाची अंत्य गाठ दुसऱ्या मार्गाजवळ"
+
+msgid "Way node near other way"
+msgstr "मार्गाची गाठ दुसऱ्या मार्गाजवळ"
+
+msgid "Connected way end node near other way"
+msgstr ""
+
+msgid "Unconnected nodes without physical tags"
+msgstr ""
+
+msgid "Untagged and unconnected nodes"
+msgstr ""
+
+msgid "This test checks for untagged nodes that are not part of any way."
+msgstr ""
+
+msgid "No tags"
+msgstr ""
+
+msgid "Has tag containing ''fixme'' or ''FIXME''"
+msgstr ""
+
+msgid "Has key ''note'' or ''comment'' or ''description''"
+msgstr ""
+
+msgid "Has key ''created_by'' or ''converted_by''"
+msgstr ""
+
+msgid "Has key ''watch''"
+msgstr ""
+
+msgid "Has key ''source''"
+msgstr ""
+
+msgid "Untagged, empty and one node ways"
+msgstr ""
+
+msgid "This test checks for untagged, empty and one node ways."
+msgstr ""
+
+msgid "Unnamed ways"
+msgstr ""
+
+msgid "Unnamed junction"
+msgstr ""
+
+msgid "Untagged ways (commented)"
+msgstr ""
+
+msgid "Untagged ways"
+msgstr ""
+
+msgid "Empty ways"
+msgstr ""
+
+msgid "One node ways"
+msgstr "एका गाठीचे मार्ग"
+
+msgid "Way connected to Area"
+msgstr "क्षेत्रास जोडलेला मार्ग"
+
+msgid "Checks for ways connected to areas."
+msgstr ""
+
+msgid "Way terminates on Area"
+msgstr "मार्ग क्षेत्रावर संपतो"
+
+msgid "Wrongly Ordered Ways"
+msgstr ""
+
+msgid "This test checks the direction of water, land and coastline ways."
+msgstr ""
+
+msgid "Reversed coastline: land not on left side"
+msgstr ""
+
+msgid "Reversed land: land not on left side"
+msgstr ""
+
+msgid "Show this dialog again the next time"
+msgstr ""
+
+msgid "Do not show again (this operation)"
+msgstr "पुन्हा दाखवू नका (ही कृती)"
+
+msgid "Do not show again (this session)"
+msgstr "पुन्हा दाखवू नका (हे सत्र)"
+
+msgid "Do not show again (remembers choice)"
+msgstr "पुन्हा दाखवू नका (निवड लक्षात ठेवली जाईल)"
+
+msgid " [id: {0}]"
+msgstr " [id: {0}]"
+
+msgid "incomplete"
+msgstr "अपूर्ण"
+
+msgid "House {0}"
+msgstr "घर {0}"
+
+msgid "House number {0} at {1}"
+msgstr "घरक्रमांक {0} {1} वर"
+
+msgid "House number {0}"
+msgstr "घरक्रमांक {0}"
+
+msgid "highway"
+msgstr ""
+
+msgid "railway"
+msgstr "लोहमार्ग"
+
+msgid "waterway"
+msgstr "जलमार्ग"
+
+msgid "landuse"
+msgstr "भूवापर"
+
+msgid "{0} node"
+msgid_plural "{0} nodes"
+msgstr[0] "{0} गाठ"
+msgstr[1] "{0} गाठी"
+
+msgid "{0} member"
+msgid_plural "{0} members"
+msgstr[0] "{0} सदस्य"
+msgstr[1] "{0} सदस्य"
+
+msgid "public transport"
+msgstr "सार्वजनिक परिवहन"
+
+msgid "Changeset {0}"
+msgstr "बदलसंच {0}"
+
+msgid "Precondition violation"
+msgstr "पूर्वअट भंग"
+
+msgid "Security exception"
+msgstr "सुरक्षा अपवाद"
+
+msgid "Network exception"
+msgstr ""
+
+msgid "IO Exception"
+msgstr ""
+
+msgid "Illegal Data"
+msgstr ""
+
+msgid "Offline mode"
+msgstr ""
+
+msgid "Internal Server Error"
+msgstr ""
+
+msgid "Bad Request"
+msgstr ""
+
+msgid "Not Found"
+msgstr "सापडले नाही"
+
+msgid "Conflict"
+msgstr ""
+
+msgid "Authentication Failed"
+msgstr ""
+
+msgid "Access to redacted version ''{0}'' of {1} {2} is forbidden."
+msgstr ""
+
+msgid "Authorisation Failed"
+msgstr ""
+
+msgid "Client Time Out"
+msgstr ""
+
+msgid "Bandwidth Limit Exceeded"
+msgstr ""
+
+msgid "Communication with OSM server failed"
+msgstr ""
+
+msgid "Authentication failed"
+msgstr ""
+
+msgid "Unknown host"
+msgstr ""
+
+msgid "Object deleted"
+msgid_plural "Objects deleted"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Show help information"
+msgstr "मदतीची माहिती दाखवा"
+
+msgid "Downloading \"Message of the day\""
+msgstr ""
+
+msgid "Failed to read MOTD. Exception was: {0}"
+msgstr ""
+
+msgid "Message of the day not available"
+msgstr ""
+
+msgid "Click to close the dialog"
+msgstr ""
+
+msgid "Imagery offset"
+msgstr ""
+
+msgctxt "menu"
+msgid "Imagery"
+msgstr ""
+
+msgctxt "layer"
+msgid "Offset"
+msgstr ""
+
+msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
+msgstr ""
+
+msgid "usage"
+msgstr "वापर"
+
+msgid "options"
+msgstr "पर्याय"
+
+msgid "Show this help"
+msgstr "ही मदत दाखवा"
+
+msgid "Standard unix geometry argument"
+msgstr ""
+
+msgid "Download the bounding box"
+msgstr ""
+
+msgid "Download the location at the URL (with lat=x&lon=y&zoom=z)"
+msgstr ""
+
+msgid "Open a file (any file type that can be opened with File/Open)"
+msgstr ""
+
+msgid "Download the bounding box as raw GPS"
+msgstr ""
+
+msgid "Download the location at the URL (with lat=x&lon=y&zoom=z) as raw GPS"
+msgstr ""
+
+msgid "Select with the given search"
+msgstr ""
+
+msgid "Launch in maximized mode"
+msgstr ""
+
+msgid "Reset the preferences to default"
+msgstr ""
+
+msgid "Changes preferences according to the XML file"
+msgstr ""
+
+msgid "Set preference key to value"
+msgstr ""
+
+msgid "Set the language"
+msgstr ""
+
+msgid "Displays the JOSM version and exits"
+msgstr ""
+
+msgid "Print debugging messages to console"
+msgstr ""
+
+msgid "Skip loading plugins"
+msgstr ""
+
+msgid "Disable access to the given resource(s), separated by comma"
+msgstr ""
+
+msgid "options provided as Java system properties"
+msgstr ""
+
+msgid "/PATH/TO/JOSM/PREF    "
+msgstr ""
+
+msgid "Set the preferences directory"
+msgstr ""
+
+msgid "/PATH/TO/JOSM/USERDATA"
+msgstr ""
+
+msgid "Set the user data directory"
+msgstr ""
+
+msgid "/PATH/TO/JOSM/CACHE   "
+msgstr ""
+
+msgid "Set the cache directory"
+msgstr ""
+
+msgid "/PATH/TO/JOSM/HOMEDIR "
+msgstr ""
+
+msgid ""
+"Relocate all 3 directories to homedir. Cache directory will be in "
+"homedir/cache"
+msgstr ""
+
+msgid ""
+"-Djosm.home has lower precedence, i.e. the specific setting overrides the "
+"general one"
+msgstr ""
+
+msgid ""
+"note: For some tasks, JOSM needs a lot of memory. It can be necessary to add "
+"the following\n"
+"      Java option to specify the maximum size of allocated memory in "
+"megabytes"
+msgstr ""
+
+msgid "examples"
+msgstr "उदाहरणे"
+
+msgid ""
+"Parameters --download, --downloadgps, and --selection are processed in this "
+"order."
+msgstr ""
+
+msgid "Make sure you load some data if you use --selection."
+msgstr ""
+
+msgid "Printing debugging messages to console"
+msgstr ""
+
+msgid "Plugin loading skipped"
+msgstr ""
+
+msgid "Enabled detailed debug level (trace)"
+msgstr ""
+
+msgid "Initializing"
+msgstr "प्रारंभत आहे"
+
+msgid "Updating plugins"
+msgstr ""
+
+msgid "Installing updated plugins"
+msgstr ""
+
+msgid "Loading early plugins"
+msgstr ""
+
+msgid "Setting defaults"
+msgstr ""
+
+msgid "Creating main GUI"
+msgstr ""
+
+msgid "Loading plugins"
+msgstr ""
+
+msgid ""
+"''{0}'' is not a valid value for argument ''{1}''. Possible values are {2}, "
+"possibly delimited by commas."
+msgstr ""
+
+msgid ""
+"JOSM is running in offline mode. This resource will not be available: {0}"
+msgid_plural ""
+"JOSM is running in offline mode. These resources will not be available: {0}"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
+msgstr ""
+
+msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
+msgstr ""
+
+msgid ""
+"Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
+"restart."
+msgstr ""
+
+msgid "Unsaved osm data"
+msgstr ""
+
+msgid "Restore"
+msgstr ""
+
+msgid "Discard"
+msgstr ""
+
+msgid "JOSM found {0} unsaved osm data layer. "
+msgid_plural "JOSM found {0} unsaved osm data layers. "
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"It looks like JOSM crashed last time. Would you like to restore the data?"
+msgstr ""
+
+msgid "Change proxy settings"
+msgstr ""
+
+msgid "Proxy errors occurred"
+msgstr ""
+
+msgid ""
+"JOSM tried to access the following resources:<br>{0}but <b>failed</b> to do "
+"so, because of the following proxy errors:<br>{1}Would you like to change "
+"your proxy settings now?"
+msgstr ""
+
+msgid "Network errors occurred"
+msgstr ""
+
+msgid ""
+"JOSM tried to access the following resources:<br>{0}but <b>failed</b> to do "
+"so, because of the following network errors:<br>{1}It may be due to a "
+"missing proxy configuration.<br>Would you like to change your proxy settings "
+"now?"
+msgstr ""
+
+msgctxt "menu"
+msgid "File"
+msgstr ""
+
+msgctxt "menu"
+msgid "Edit"
+msgstr ""
+
+msgctxt "menu"
+msgid "View"
+msgstr ""
+
+msgctxt "menu"
+msgid "Tools"
+msgstr ""
+
+msgctxt "menu"
+msgid "More tools"
+msgstr ""
+
+msgctxt "menu"
+msgid "Data"
+msgstr ""
+
+msgctxt "menu"
+msgid "Selection"
+msgstr ""
+
+msgctxt "menu"
+msgid "Presets"
+msgstr ""
+
+msgid "More..."
+msgstr "अधिक..."
+
+msgctxt "menu"
+msgid "GPS"
+msgstr ""
+
+msgctxt "menu"
+msgid "Windows"
+msgstr ""
+
+msgctxt "menu"
+msgid "Help"
+msgstr ""
+
+msgid "Menu: {0}"
+msgstr ""
+
+msgid "Edit toolbar"
+msgstr ""
+
+msgid "Toggles the visibility of the edit toolbar (i.e., the vertical tool)"
+msgstr ""
+
+msgid "Preset preferences"
+msgstr ""
+
+msgid "Click to open the tagging presets tab in the preferences"
+msgstr ""
+
+msgid "Imagery preferences"
+msgstr ""
+
+msgid "Click to open the imagery tab in the preferences"
+msgstr ""
+
+msgid "Search menu items"
+msgstr ""
+
+msgctxt "menu"
+msgid "Audio"
+msgstr ""
+
+msgid "Do not hide toolbar"
+msgstr ""
+
+msgid "Hide this button"
+msgstr ""
+
+msgid "Click the arrow at the bottom to show it again."
+msgstr ""
+
+msgid "Hide edit toolbar"
+msgstr ""
+
+msgid "Hide or show this toggle button"
+msgstr ""
+
+msgid "Move right"
+msgstr "उजवीकडे सरकवा"
+
+msgid "Map: {0}"
+msgstr "नकाशा: {0}"
+
+msgid "Move left"
+msgstr "डावीकडे सरकवा"
+
+msgid "Move up"
+msgstr "वर सरकवा"
+
+msgid "Move down"
+msgstr "खाली सरकवा"
+
+msgid "Zoom in"
+msgstr ""
+
+msgid "Zoom out"
+msgstr ""
+
+msgid "scale"
+msgstr ""
+
+msgid "Status bar background"
+msgstr ""
+
+msgid "Status bar background: active"
+msgstr ""
+
+msgid "Status bar foreground"
+msgstr ""
+
+msgid "Status bar foreground: active"
+msgstr ""
+
+msgid "{0} ({1})"
+msgstr "{0} ({1})"
+
+msgid "The geographic latitude at the mouse pointer."
+msgstr ""
+
+msgid "The geographic longitude at the mouse pointer."
+msgstr ""
+
+msgid "The (compass) heading of the line segment being drawn."
+msgstr ""
+
+msgid "The angle between the previous and the current way segment."
+msgstr ""
+
+msgid "The length of the new way segment being drawn."
+msgstr ""
+
+msgid "The name of the object at the mouse pointer."
+msgstr ""
+
+msgid ""
+"Middle click again to cycle through.<br>Hold CTRL to select directly from "
+"this list with the mouse.<hr>"
+msgstr ""
+
+msgid "(no object)"
+msgstr ""
+
+msgid "User:"
+msgstr ""
+
+msgid "Do not hide status bar"
+msgstr ""
+
+msgid "System of measurement changed to {0}"
+msgstr ""
+
+msgid "Layer not in list."
+msgstr "थर यादीत नाही."
+
+msgid "Layer ''{0}'' must be in list of layers"
+msgstr "थर ''{0}'' थरांच्या यादीत असला पाहिजे"
+
+msgid "Default (open, closed, new)"
+msgstr ""
+
+msgid "Username"
+msgstr ""
+
+msgid "Created date"
+msgstr ""
+
+msgid "Last change date"
+msgstr ""
+
+msgid "Select note sorting method"
+msgstr ""
+
+msgid "Click to cancel the current operation"
+msgstr ""
+
+msgid "In background"
+msgstr ""
+
+msgid "Click to run job in background"
+msgstr ""
+
+msgid " ({0})"
+msgstr " ({0})"
+
+msgid "{0} completed in {1}"
+msgstr "{0} {1} मध्ये पूर्ण"
+
+msgid "Enlarge"
+msgstr ""
+
+msgid "Shrink"
+msgstr ""
+
+msgid ""
+"<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
+"level.</html>"
+msgstr ""
+
+msgid "Zoom level:"
+msgstr ""
+
+msgid "from tile"
+msgstr ""
+
+msgid "up to tile"
+msgstr ""
+
+msgid ""
+"<html>Alternatively you may enter a <strong>tile address</strong> for a "
+"single tile in the format <i>zoomlevel/x/y</i>, i.e. <i>15/256/223</i>. Tile "
+"addresses in the format <i>zoom,x,y</i> or <i>zoom;x;y</i> are valid "
+"too.</html>"
+msgstr ""
+
+msgid "Tile address:"
+msgstr ""
+
+msgid "Apply the tile address"
+msgstr ""
+
+msgid "Please enter a tile address"
+msgstr ""
+
+msgid "The current value isn''t a valid tile address"
+msgstr ""
+
+msgid "Please enter a tile index"
+msgstr ""
+
+msgid "The current value isn''t a valid tile index for the given zoom level"
+msgstr ""
+
+msgid "Conflict background: no conflict"
+msgstr ""
+
+msgid "Conflict background: decided"
+msgstr ""
+
+msgid "Conflict background: undecided"
+msgstr ""
+
+msgid "Conflict background: drop"
+msgstr ""
+
+msgid "Conflict background: keep"
+msgstr ""
+
+msgid "Conflict background: combined"
+msgstr ""
+
+msgid "Conflict background: selected"
+msgstr ""
+
+msgid "Conflict foreground: undecided"
+msgstr ""
+
+msgid "Conflict foreground: drop"
+msgstr ""
+
+msgid "Conflict foreground: keep"
+msgstr ""
+
+msgid "Conflict background: empty row"
+msgstr ""
+
+msgid "Conflict background: frozen"
+msgstr ""
+
+msgid "Conflict background: in comparison"
+msgstr ""
+
+msgid "Conflict foreground: in comparison"
+msgstr ""
+
+msgid "Conflict background"
+msgstr ""
+
+msgid "Conflict foreground"
+msgstr ""
+
+msgid "Conflict background: not in opposite"
+msgstr ""
+
+msgid "Conflict background: in opposite"
+msgstr ""
+
+msgid "Conflict background: same position in opposite"
+msgstr ""
+
+msgid "Conflict background: keep one tag"
+msgstr ""
+
+msgid "Conflict foreground: keep one tag"
+msgstr ""
+
+msgid "Conflict background: drop tag"
+msgstr ""
+
+msgid "Conflict foreground: drop tag"
+msgstr ""
+
+msgid "Conflict background: keep all tags"
+msgstr ""
+
+msgid "Conflict foreground: keep all tags"
+msgstr ""
+
+msgid "Conflict background: sum all numeric tags"
+msgstr ""
+
+msgid "Conflict foreground: sum all numeric tags"
+msgstr ""
+
+msgid "Conflict background: keep member"
+msgstr ""
+
+msgid "Conflict foreground: keep member"
+msgstr ""
+
+msgid "Conflict background: remove member"
+msgstr ""
+
+msgid "Conflict foreground: remove member"
+msgstr ""
+
+msgid "My with Their"
+msgstr "माझी त्यांच्याबरोबर"
+
+msgid "My with Merged"
+msgstr ""
+
+msgid "Their with Merged"
+msgstr ""
+
+msgid "Role {0} is not participating in compare pair {1}."
+msgstr ""
+
+msgid "Properties"
+msgstr "गुणधर्म"
+
+msgid "Tags"
+msgstr ""
+
+msgid "Nodes"
+msgstr "गाठी"
+
+msgid "Members"
+msgstr "सदस्य"
+
+msgid "No pending tag conflicts to be resolved"
+msgstr ""
+
+msgid "Tags({0} conflict)"
+msgid_plural "Tags({0} conflicts)"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "{0} pending tag conflict to be resolved"
+msgid_plural "{0} pending tag conflicts to be resolved"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Nodes(resolved)"
+msgstr ""
+
+msgid ""
+"Merged node list frozen. No pending conflicts in the node list of this way"
+msgstr ""
+
+msgid "Nodes(with conflicts)"
+msgstr ""
+
+msgid "Pending conflicts in the node list of this way"
+msgstr ""
+
+msgid "Members(resolved)"
+msgstr ""
+
+msgid ""
+"Merged member list frozen. No pending conflicts in the member list of this "
+"relation"
+msgstr ""
+
+msgid "Members(with conflicts)"
+msgstr ""
+
+msgid "Pending conflicts in the member list of this relation"
+msgstr ""
+
+msgid "No pending property conflicts"
+msgstr ""
+
+msgid "Properties(with conflicts)"
+msgstr ""
+
+msgid "Pending property conflicts to be resolved"
+msgstr ""
+
+msgid "Conflict Resolution"
+msgstr ""
+
+msgid "{0} more..."
+msgstr ""
+
+msgid ""
+"The following objects could not be copied to the target object<br>because "
+"they are deleted in the target dataset:"
+msgstr ""
+
+msgid "Merging deleted objects failed"
+msgstr ""
+
+msgid "List in role {0} is currently not participating in a compare pair."
+msgstr ""
+
+msgid "Unexpected value of parameter ''index''. Got {0}."
+msgstr ""
+
+msgid "Item {0} not found in list."
+msgstr ""
+
+msgid "lock scrolling"
+msgstr ""
+
+msgid "Compare "
+msgstr "तुलना करा "
+
+msgid "My version"
+msgstr "माझी आवृत्ती"
+
+msgid "List of elements in my dataset, i.e. the local dataset"
+msgstr ""
+
+msgid "Merged version"
+msgstr ""
+
+msgid ""
+"List of merged elements. They will replace the list of my elements when the "
+"merge decisions are applied."
+msgstr ""
+
+msgid "Their version"
+msgstr "त्यांची आवृत्ती"
+
+msgid "List of elements in their dataset, i.e. the server dataset"
+msgstr ""
+
+msgid "> top"
+msgstr ""
+
+msgid "Copy my selected nodes to the start of the merged node list"
+msgstr ""
+
+msgid "> bottom"
+msgstr ""
+
+msgid "Copy my selected elements to the end of the list of merged elements."
+msgstr ""
+
+msgid "> before"
+msgstr ""
+
+msgid ""
+"Copy my selected elements before the first selected element in the list of "
+"merged elements."
+msgstr ""
+
+msgid "> after"
+msgstr ""
+
+msgid ""
+"Copy my selected elements after the first selected element in the list of "
+"merged elements."
+msgstr ""
+
+msgid "< top"
+msgstr ""
+
+msgid ""
+"Copy their selected element to the start of the list of merged elements."
+msgstr ""
+
+msgid "< bottom"
+msgstr ""
+
+msgid ""
+"Copy their selected elements to the end of the list of merged elements."
+msgstr ""
+
+msgid "< before"
+msgstr ""
+
+msgid ""
+"Copy their selected elements before the first selected element in the list "
+"of merged elements."
+msgstr ""
+
+msgid "< after"
+msgstr ""
+
+msgid ""
+"Copy their selected element after the first selected element in the list of "
+"merged elements"
+msgstr ""
+
+msgid "Copy all my elements to the target"
+msgstr ""
+
+msgid "Copy all their elements to the target"
+msgstr ""
+
+msgid "Up"
+msgstr "वर"
+
+msgid "Move up the selected entries by one position."
+msgstr "निवडलेल्या नोंदी एक स्थान वर सरकवा."
+
+msgid "Down"
+msgstr "खाली"
+
+msgid "Move down the selected entries by one position."
+msgstr "निवडलेल्या नोंदी एक स्थान खाली सरकवा."
+
+msgid "Remove"
+msgstr ""
+
+msgid "Remove the selected entries from the list of merged elements."
+msgstr ""
+
+msgid "Freeze"
+msgstr "गोठवा"
+
+msgid "Freeze the current list of merged elements."
+msgstr ""
+
+msgid "Unfreeze"
+msgstr ""
+
+msgid "Unfreeze the list of merged elements and start merging."
+msgstr ""
+
+msgid ""
+"<html>Click <strong>{0}</strong> to start merging my and their "
+"entries.</html>"
+msgstr ""
+
+msgid ""
+"<html>Click <strong>{0}</strong> to finish merging my and their "
+"entries.</html>"
+msgstr ""
+
+msgid "My version ({0} entry)"
+msgid_plural "My version ({0} entries)"
+msgstr[0] "माझी आवृत्ती ({0} नोंद)"
+msgstr[1] "माझी आवृत्ती ({0} नोंदी)"
+
+msgid "Merged version ({0} entry)"
+msgid_plural "Merged version ({0} entries)"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Their version ({0} entry)"
+msgid_plural "Their version ({0} entries)"
+msgstr[0] "त्यांची आवृत्ती ({0} नोंद)"
+msgstr[1] "त्यांची आवृत्ती ({0} नोंदी)"
+
+msgid "Node"
+msgstr "गाठ"
+
+msgid "Merged nodes not frozen yet. Cannot build resolution command."
+msgstr ""
+
+msgid "Properties in my dataset, i.e. the local dataset"
+msgstr ""
+
+msgid ""
+"Properties in the merged element. They will replace properties in my "
+"elements when merge decisions are applied."
+msgstr ""
+
+msgid "Properties in their dataset, i.e. the server dataset"
+msgstr ""
+
+msgid "Coordinates:"
+msgstr "सहनिर्देशक:"
+
+msgid "Deleted State:"
+msgstr ""
+
+msgid "Referenced by:"
+msgstr ""
+
+msgid "(none)"
+msgstr ""
+
+msgid "deleted"
+msgstr ""
+
+msgid "not deleted"
+msgstr ""
+
+msgid "Keep my coordinates"
+msgstr "माझे सहनिर्देशक ठेवा"
+
+msgid "Keep their coordinates"
+msgstr "त्यांचे सहनिर्देशक ठेवा"
+
+msgid "Undecide conflict between different coordinates"
+msgstr ""
+
+msgid "Keep my deleted state"
+msgstr ""
+
+msgid "Keep their deleted state"
+msgstr ""
+
+msgid "Undecide conflict between deleted state"
+msgstr ""
+
+msgid "Role"
+msgstr "भूमिका"
+
+msgid "Primitive"
+msgstr ""
+
+msgid "Merged nodes not frozen yet. Cannot build resolution command"
+msgstr ""
+
+msgid "<undefined>"
+msgstr ""
+
+msgid "The merged dataset will not include a tag with key {0}"
+msgstr ""
+
+msgid "My dataset does not include a tag with key {0}"
+msgstr ""
+
+msgid "Key"
+msgstr ""
+
+msgid "Value"
+msgstr ""
+
+msgid "Cannot apply undecided tag merge item."
+msgstr ""
+
+msgid "My version (local dataset)"
+msgstr ""
+
+msgid "Their version (server dataset)"
+msgstr ""
+
+msgid "Keep the selected key/value pairs from the local dataset"
+msgstr ""
+
+msgid "Keep the selected key/value pairs from the server dataset"
+msgstr ""
+
+msgid "Undecide"
+msgstr ""
+
+msgid "Mark the selected tags as undecided"
+msgstr ""
+
+msgid "Their dataset does not include a tag with key {0}"
+msgstr ""
+
+msgid "Conflicts when combining primitives"
+msgstr ""
+
+msgid "Conflicts when combining ways - combined way is ''{0}''"
+msgstr ""
+
+msgid "Conflicts when merging nodes - target node is ''{0}''"
+msgstr ""
+
+msgid "No conflicts to resolve"
+msgstr ""
+
+msgid "Cancel conflict resolution"
+msgstr ""
+
+msgid "Apply resolved conflicts"
+msgstr ""
+
+msgid "Apply"
+msgstr ""
+
+msgid ""
+"You are about to combine {1} object, which is part of {0} "
+"relation:<br/>{2}Combining these objects may break this relation. If you are "
+"unsure, please cancel this operation.<br/>If you want to continue, you are "
+"shown a dialog to decide how to adapt the relation.<br/><br/>Do you want to "
+"continue?"
+msgid_plural ""
+"You are about to combine {1} objects, which are part of {0} "
+"relations:<br/>{2}Combining these objects may break these relations. If you "
+"are unsure, please cancel this operation.<br/>If you want to continue, you "
+"are shown a dialog to decide how to adapt the relations.<br/><br/>Do you "
+"want to continue?"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Combine confirmation"
+msgstr ""
+
+msgid ", "
+msgstr ", "
+
+msgid "<i>missing</i>"
+msgstr ""
+
+msgid ""
+"You are about to combine {0} objects, but the following tags are used "
+"conflictingly:<br/>{1}If these objects are combined, the resulting object "
+"may have unwanted tags.<br/>If you want to continue, you are shown a dialog "
+"to fix the conflicting tags.<br/><br/>Do you want to continue?"
+msgid_plural ""
+"You are about to combine {0} objects, but the following tags are used "
+"conflictingly:<br/>{1}If these objects are combined, the resulting object "
+"may have unwanted tags.<br/>If you want to continue, you are shown a dialog "
+"to fix the conflicting tags.<br/><br/>Do you want to continue?"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Choose a value"
+msgstr ""
+
+msgid "none"
+msgstr "काहीच नाही"
+
+msgid "all"
+msgstr "सर्व"
+
+msgid "sum"
+msgstr "बेरीज"
+
+msgid "Please decide which values to keep"
+msgstr ""
+
+msgid "Value ''{0}'' is going to be applied for key ''{1}''"
+msgstr ""
+
+msgid ""
+"All numeric values sumed as ''{0}'' are going to be applied for key ''{1}''"
+msgstr ""
+
+msgid "The key ''{0}'' and all its values are going to be removed"
+msgstr ""
+
+msgid "All values joined as ''{0}'' are going to be applied for key ''{1}''"
+msgstr ""
+
+msgid "Tag collection does not include the selected value ''{0}''."
+msgstr ""
+
+msgid "Not decided yet."
+msgstr "अद्याप ठरवलेले नाही."
+
+msgid "Tags from nodes"
+msgstr ""
+
+msgid "Tags from ways"
+msgstr ""
+
+msgid "Tags from relations"
+msgstr ""
+
+msgid "Conflicts in pasted tags"
+msgstr ""
+
+msgid "Paste ..."
+msgstr "चिकटवा ..."
+
+msgid "From ..."
+msgstr ""
+
+msgid "To ..."
+msgstr ""
+
+msgid "{0} tag"
+msgid_plural "{0} tags"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "{0} way"
+msgid_plural "{0} ways"
+msgstr[0] "{0} मार्ग"
+msgstr[1] "{0} मार्ग"
+
+msgid "{0} relation"
+msgid_plural "{0} relations"
+msgstr[0] "{0} संबंध"
+msgstr[1] "{0} संबंध"
+
+msgid "Position {0} is out of range. Current number of members is {1}."
+msgstr ""
+
+msgid "Remove this relation member from the relation"
+msgstr ""
+
+msgid "Keep"
+msgstr "असू द्या"
+
+msgid "Keep this relation member for the target object"
+msgstr "लक्ष्य वस्तूसाठी हा संबंध सदस्य असू द्या"
+
+msgid "Undecided"
+msgstr "न ठरवलेले"
+
+msgid "Not decided yet"
+msgstr "अद्याप ठरवलेले नाही"
+
+msgid "Role:"
+msgstr "भूमिका:"
+
+msgid "Enter a role for all relation memberships"
+msgstr ""
+
+msgid "Tag modified relations with "
+msgstr ""
+
+msgid ""
+"<html>Select to enable entering a tag which will be applied<br>to all "
+"modified relations.</html>"
+msgstr ""
+
+msgctxt "tag"
+msgid "Key:"
+msgstr ""
+
+msgid "<html>Enter a tag key, e.g. <strong><tt>fixme</tt></strong></html>"
+msgstr ""
+
+msgid "Value:"
+msgstr ""
+
+msgid ""
+"<html>Enter a tag value, e.g. <strong><tt>check members</tt></strong></html>"
+msgstr ""
+
+msgid ""
+"<html>The combined ways are members in one or more relations. Please decide "
+"whether you want to <strong>keep</strong> these memberships for the combined "
+"way or whether you want to <strong>remove</strong> them.<br>The default is "
+"to <strong>keep</strong> the first way and <strong>remove</strong> the other "
+"ways that are members of the same relation: the combined way will take the "
+"place of the original way in the relation.</html>"
+msgstr ""
+
+msgid ""
+"<html>The merged nodes are members in one or more relations. Please decide "
+"whether you want to <strong>keep</strong> these memberships for the target "
+"node or whether you want to <strong>remove</strong> them.<br>The default is "
+"to <strong>keep</strong> the first node and <strong>remove</strong> the "
+"other nodes that are members of the same relation: the target node will take "
+"the place of the original node in the relation.</html>"
+msgstr ""
+
+msgid "Apply this role to all members"
+msgstr ""
+
+msgid "Pos."
+msgstr "स्थान"
+
+msgid "Orig. Way"
+msgstr "मूळ मार्ग"
+
+msgid "Decision"
+msgstr "निर्णय"
+
+msgid "<html>Please select the values to keep for the following tags.</html>"
+msgstr ""
+
+msgid "Show tags with conflicts only"
+msgstr ""
+
+msgid "Show tags with multiple values only"
+msgstr ""
+
+msgid "For selected objects only"
+msgstr ""
+
+msgid ""
+"<html>Select to show changesets for the currently selected objects "
+"only.<br>Unselect to show all changesets for objects in the current data "
+"layer.</html>"
+msgstr ""
+
+msgid "Changesets"
+msgstr "बदलसंच"
+
+msgid "Open the list of changesets in the current layer."
+msgstr "सध्याच्या थरातील बदलसंचांची यादी उघडा."
+
+msgid "Select all objects assigned to the currently selected changesets"
+msgstr ""
+
+msgid "Download"
+msgstr ""
+
+msgid ""
+"Download information about the selected changesets from the OSM server"
+msgstr ""
+
+msgid "Closes the selected open changesets"
+msgstr "निवडलेले खुले बदलसंच बंद केले जातात"
+
+msgid "Show info"
+msgstr "माहिती दाखवा"
+
+msgid "Open a web page for each selected changeset"
+msgstr ""
+
+msgid "Details"
+msgstr "तपशील"
+
+msgid "Opens the Changeset Manager window for the selected changesets"
+msgstr ""
+
+msgid "Command Stack"
+msgstr ""
+
+msgid "Open a list of all commands (undo buffer)."
+msgstr ""
+
+msgid "Toggle: {0}"
+msgstr ""
+
+msgid "Command Stack: Undo: {0} / Redo: {1}"
+msgstr ""
+
+msgid ""
+"Selects the objects that take part in this command (unless currently deleted)"
+msgstr ""
+
+msgid "Select and zoom"
+msgstr ""
+
+msgid ""
+"Selects the objects that take part in this command (unless currently "
+"deleted), then and zooms to it"
+msgstr ""
+
+msgid "Undo the selected and all later commands"
+msgstr ""
+
+msgid "Redo the selected and all earlier commands"
+msgstr ""
+
+msgid "Resolve conflicts."
+msgstr ""
+
+msgid "Conflict: {0} unresolved"
+msgid_plural "Conflicts: {0} unresolved"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Rel.:{0} / Ways:{1} / Nodes:{2}"
+msgstr "संबंध:{0} / मार्ग:{1} / गाठी:{2}"
+
+msgid "Resolve"
+msgstr ""
+
+msgid "Open a merge dialog of all selected items in the list above."
+msgstr ""
+
+msgid "There was {0} conflict detected."
+msgid_plural "There were {0} conflicts detected."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to close this dialog and continue editing"
+msgstr ""
+
+msgid "Conflicts detected"
+msgstr ""
+
+msgid "Cancel conflict resolution and close the dialog"
+msgstr ""
+
+msgid "Apply resolved conflicts and close the dialog"
+msgstr ""
+
+msgid "Apply Resolution"
+msgstr ""
+
+msgid "Close anyway"
+msgstr ""
+
+msgid "Continue resolving"
+msgstr ""
+
+msgid ""
+"<html>You did not finish to merge the differences in this "
+"conflict.<br>Conflict resolutions will not be applied unless all "
+"differences<br>are resolved.<br>Click <strong>{0}</strong> to close "
+"anyway.<strong> Already<br>resolved differences will not be "
+"applied.</strong><br>Click <strong>{1}</strong> to return to resolving "
+"conflicts.</html>"
+msgstr ""
+
+msgid "Conflict not resolved completely"
+msgstr ""
+
+msgid "Resolve conflicts"
+msgstr ""
+
+msgid "Resolve conflicts for ''{0}''"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr "संबंधामधून"
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
+msgid "Filter objects and hide/disable them."
+msgstr ""
+
+msgid "Enable filter"
+msgstr ""
+
+msgid "Multikey: {0}"
+msgstr ""
+
+msgid "Hide filter"
+msgstr "गाळणी लपवा"
+
+msgid "Hiding filter"
+msgstr "गाळणी लपवत आहे"
+
+msgid "Inverse filter"
+msgstr ""
+
+msgid "Filter mode"
+msgstr ""
+
+msgid "Add"
+msgstr ""
+
+msgid "Add filter."
+msgstr ""
+
+msgid "Edit filter."
+msgstr "गाळणी संपादा."
+
+msgid "Delete filter."
+msgstr ""
+
+msgid "Move filter up."
+msgstr "गाळणी वर सरकवा."
+
+msgid "Move filter down."
+msgstr "गाळणी खाली सरकवा."
+
+msgid "Filter Hidden:{0} Disabled:{1}"
+msgstr ""
+
+msgid "Error in filter"
+msgstr ""
+
+msgctxt "filter"
+msgid "E"
+msgstr ""
+
+msgctxt "filter"
+msgid "H"
+msgstr ""
+
+msgctxt "filter"
+msgid "Text"
+msgstr ""
+
+msgctxt "filter"
+msgid "I"
+msgstr ""
+
+msgctxt "filter"
+msgid "M"
+msgstr ""
+
+msgctxt "filter"
+msgid "R"
+msgstr ""
+
+msgctxt "filter"
+msgid "A"
+msgstr ""
+
+msgctxt "filter"
+msgid "D"
+msgstr ""
+
+msgctxt "filter"
+msgid "F"
+msgstr ""
+
+msgid "<h2>Filter active</h2>"
+msgstr ""
+
+msgid "<p><b>{0}</b> object hidden"
+msgid_plural "<p><b>{0}</b> objects hidden"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "<b>{0}</b> object disabled"
+msgid_plural "<b>{0}</b> objects disabled"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "</p><p>Close the filter dialog to see all objects.<p></html>"
+msgstr ""
+
+msgid "Advanced object info"
+msgstr ""
+
+msgid "map style"
+msgstr "नकाशा शैली"
+
+msgid "edit counts"
+msgstr ""
+
+msgid "not in data set"
+msgstr ""
+
+msgid "Node: "
+msgstr "गाठ: "
+
+msgid "Way: "
+msgstr "मार्ग: "
+
+msgid "Relation: "
+msgstr "संबंध: "
+
+msgid "deleted-on-server"
+msgstr ""
+
+msgid "modified"
+msgstr ""
+
+msgid "filtered/hidden"
+msgstr "गाळलेले/लपवलेले"
+
+msgid "filtered/disabled"
+msgstr ""
+
+msgid "has direction keys (reversed)"
+msgstr ""
+
+msgid "has direction keys"
+msgstr ""
+
+msgid "State: "
+msgstr "स्थिती: "
+
+msgid "Data Set: "
+msgstr ""
+
+msgid "Edited at: "
+msgstr ""
+
+msgid "<new object>"
+msgstr ""
+
+msgid "Edited by: "
+msgstr ""
+
+msgid "Version: "
+msgstr "आवृत्ती: "
+
+msgid "In changeset: "
+msgstr ""
+
+msgid "Tags: "
+msgstr ""
+
+msgid "Centroid: "
+msgstr ""
+
+msgid "{0} Member: "
+msgid_plural "{0} Members: "
+msgstr[0] "{0} सदस्य: "
+msgstr[1] "{0} सदस्य: "
+
+msgid " as \"{0}\""
+msgstr " \"{0}\" म्हणून"
+
+msgid "{0} Nodes: "
+msgstr "{0} गाठी: "
+
+msgid "Bounding box: "
+msgstr ""
+
+msgid "Bounding box (projected): "
+msgstr ""
+
+msgid "Center of bounding box: "
+msgstr ""
+
+msgid "Coordinates: "
+msgstr "सहनिर्देशक: "
+
+msgid "Coordinates (projected): "
+msgstr "सहनिर्देशक (प्रक्षेपित): "
+
+msgid "Part of: "
+msgstr ""
+
+msgid "In conflict with: "
+msgstr ""
+
+msgid "Styles Cache for \"{0}\":"
+msgstr "\"{0}\"साठी शैली सय:"
+
+msgid ""
+"\n"
+"\n"
+"> applying {0} style \"{1}\"\n"
+msgstr ""
+
+msgid ""
+"\n"
+"Range:{0}"
+msgstr ""
+
+msgid ""
+"\n"
+"\n"
+"> skipping \"{0}\" (not active)"
+msgstr ""
+
+msgid ""
+"\n"
+"\n"
+"List of generated Styles:\n"
+msgstr ""
+
+msgid "The 2 selected objects have identical style caches."
+msgstr ""
+
+msgid "The 2 selected objects have different style caches."
+msgstr ""
+
+msgid ""
+"Warning: The 2 selected objects have equal, but not identical style caches."
+msgstr ""
+
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "xml"
+msgstr "xml"
+
+msgid "mapcss"
+msgstr "mapcss"
+
+msgid "unknown"
+msgstr "अज्ञात"
+
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
+msgid ""
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
+msgstr ""
+
+msgid "Projected coordinates:"
+msgstr "प्रक्षेपित सहनिर्देशक:"
+
+msgid ""
+"Enter easting and northing (x and y) separated by space, comma or semicolon."
+msgstr ""
+
+msgid "Lat/Lon"
+msgstr "अक्षांश/रेखांश"
+
+msgid "East/North"
+msgstr ""
+
+msgid "Please enter a GPS coordinates"
+msgstr ""
+
+msgid "Please enter a Easting and Northing"
+msgstr ""
+
+msgid "Toggle visibility of layer: {0}"
+msgstr ""
+
+msgid "Open a list of all loaded layers."
+msgstr ""
+
+msgid "Delete the selected layers."
+msgstr ""
+
+msgid "Show/hide"
+msgstr "दाखवा/लपवा"
+
+msgid "Toggle visible state of the selected layer."
+msgstr ""
+
+msgid "Show/hide layer"
+msgstr "थर दाखवा/लपवा"
+
+msgid "Opacity"
+msgstr "अपारदर्शकता"
+
+msgid "Adjust opacity of the layer."
+msgstr ""
+
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
+msgid "Activate"
+msgstr ""
+
+msgid "Activate the selected layer"
+msgstr ""
+
+msgid "Activate layer"
+msgstr ""
+
+msgid "Merge this layer into another layer"
+msgstr ""
+
+msgid "Duplicate this layer"
+msgstr ""
+
+msgid "Copy of {0}"
+msgstr "{0}ची प्रत"
+
+msgid "Copy {1} of {0}"
+msgstr "{0}ची प्रत {1}"
+
+msgid "layer is currently visible (click to hide layer)"
+msgstr ""
+
+msgid "layer is currently hidden (click to show layer)"
+msgstr "थर सध्या लपवलेला आहे (दाखविण्यासाठी टिचकी द्या)"
+
+msgid "this layer is the active layer"
+msgstr ""
+
+msgid "this layer is not currently active (click to activate)"
+msgstr ""
+
+msgid "Move the selected layer one row up."
+msgstr ""
+
+msgid "Move the selected layer one row down."
+msgstr ""
+
+msgid "Information about layer"
+msgstr ""
+
+msgid "Map paint preferences"
+msgstr ""
+
+msgid "Map Paint Styles"
+msgstr ""
+
+msgid "configure the map painting style"
+msgstr ""
+
+msgid "MapPaint"
+msgstr ""
+
+msgid "On/Off"
+msgstr "चालू/बंद"
+
+msgid "Turn selected styles on or off"
+msgstr ""
+
+msgid "Move the selected entry one row down."
+msgstr ""
+
+msgid "Move the selected entry one row up."
+msgstr ""
+
+msgid "Reload from file"
+msgstr ""
+
+msgid "reload selected styles from file"
+msgstr ""
+
+msgid "Save as..."
+msgstr ""
+
+msgid "Save a copy of this Style to file and add it to the list"
+msgstr ""
+
+msgid "Map paint style file (*.mapcss, *.zip)"
+msgstr ""
+
+msgid "Map paint style file (*.xml, *.zip)"
+msgstr ""
+
+msgid "Reloading style sources"
+msgstr ""
+
+msgid "Save style ''{0}'' as ''{1}''"
+msgstr ""
+
+msgid "view meta information, error log and source definition"
+msgstr ""
+
+msgid "Map Style info"
+msgstr ""
+
+msgid "Source"
+msgstr "स्रोत"
+
+msgid "Title:"
+msgstr "शीर्षक:"
+
+msgid "URL:"
+msgstr "URL:"
+
+msgid "Built-in Style, internal path:"
+msgstr ""
+
+msgid "Path:"
+msgstr ""
+
+msgid "Icon:"
+msgstr ""
+
+msgid "Background:"
+msgstr "पार्श्वभूमि:"
+
+msgid "Style is currently active?"
+msgstr ""
+
+msgid "No"
+msgstr "नाही"
+
+msgid "Style settings"
+msgstr ""
+
+msgid "Customize the style"
+msgstr ""
+
+msgid "Mini map"
+msgstr ""
+
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
+msgid "List of notes"
+msgstr ""
+
+msgid "Add comment"
+msgstr ""
+
+msgid "Comment"
+msgstr ""
+
+msgid "Comment on note"
+msgstr ""
+
+msgid "Add comment to note:"
+msgstr ""
+
+msgid "Close note"
+msgstr ""
+
+msgid "Close note with message:"
+msgstr ""
+
+msgid "Create a new note"
+msgstr ""
+
+msgid "Create"
+msgstr ""
+
+msgid "Reopen note"
+msgstr ""
+
+msgid "Reopen"
+msgstr ""
+
+msgid "Reopen note with message:"
+msgstr ""
+
+msgid "Sort notes"
+msgstr ""
+
+msgid "Sort"
+msgstr ""
+
+msgid "Object type:"
+msgstr "वस्तू प्रकार:"
+
+msgctxt "osm object types"
+msgid "mixed"
+msgstr ""
+
+msgid "Choose the OSM object type"
+msgstr ""
+
+msgid "Object ID:"
+msgstr "वस्तू ID:"
+
+msgid "Enter the ID of the object that should be downloaded"
+msgstr ""
+
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
+msgid ""
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
+msgstr ""
+
+msgid ""
+"Invalid ID list specified\n"
+"Cannot continue."
+msgstr ""
+
+msgid "Relations"
+msgstr "संबंध"
+
+msgid "Open a list of all relations."
+msgstr "सर्व संबंधांची यादी उघडा"
+
+msgid "Relation list filter"
+msgstr "संबंधांच्या यादीची गाळणी"
+
+msgid "Create a new relation"
+msgstr "नवीन संबंध बनवा"
+
+msgid "New"
+msgstr "नवीन"
+
+msgid "Relations: {0}/{1}"
+msgstr "संबंध: {0}/{1}"
+
+msgid "Relations: {0}"
+msgstr "संबंध: {0}"
+
+msgid "Selection"
+msgstr "निवड"
+
+msgid "Open a selection list window."
+msgstr "निवड यादीची खिडकी उघडा."
+
+msgid "Current Selection"
+msgstr "सध्याची निवड"
+
+msgid "Search for objects"
+msgstr ""
+
+msgid "Display the history of the selected objects."
+msgstr "निवडलेल्या वस्तूंचा इतिहास दाखवा."
+
+msgid "Zoom to selection"
+msgstr ""
+
+msgid "Zoom to selected element(s)"
+msgstr ""
+
+msgid "Sel.: Rel.:{0} / Ways:{1} / Nodes:{2}"
+msgstr "निवड: संबंध:{0} / मार्ग:{1} / गाठी:{2}"
+
+msgid "Unselectable now"
+msgstr ""
+
+msgid "Selection: {0}"
+msgstr "निवड: {0}"
+
+msgid "Always shown"
+msgstr ""
+
+msgid "Dynamic"
+msgstr ""
+
+msgid "Always hidden"
+msgstr ""
+
+msgid "Toggle dynamic buttons"
+msgstr ""
+
+msgid "Open preferences for this panel"
+msgstr ""
+
+msgid "Undock the panel"
+msgstr ""
+
+msgid ""
+"Close this panel. You can reopen it with the buttons in the left toolbar."
+msgstr ""
+
+msgid "Click to minimize/maximize the panel content"
+msgstr ""
+
+msgid "Side buttons"
+msgstr ""
+
+msgid "Authors"
+msgstr ""
+
+msgid "Open a list of people working on the selected objects."
+msgstr ""
+
+msgid "{0} Author"
+msgid_plural "{0} Authors"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Select objects submitted by this user"
+msgstr ""
+
+msgid "Launches a browser with information about the user"
+msgstr ""
+
+msgid "Only launching info browsers for the first {0} of {1} selected users"
+msgstr ""
+
+msgid "Author"
+msgstr ""
+
+msgid "# Objects"
+msgstr ""
+
+msgid "Validation Results"
+msgstr ""
+
+msgid "Open the validation window."
+msgstr ""
+
+msgid "Validation results"
+msgstr ""
+
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
+msgid "Fix"
+msgstr ""
+
+msgid "Fix the selected issue."
+msgstr ""
+
+msgid "Ignore the selected issue next time."
+msgstr ""
+
+msgid "Whole group"
+msgstr "संपूर्ण गट"
+
+msgid "Single elements"
+msgstr ""
+
+msgid "Nothing"
+msgstr ""
+
+msgid "Ignore whole group or individual elements?"
+msgstr ""
+
+msgid "Ignoring elements"
+msgstr ""
+
+msgid "Fixing errors ..."
+msgstr ""
+
+msgid "Fixing ({0}/{1}): ''{2}''"
+msgstr ""
+
+msgid "Updating map ..."
+msgstr ""
+
+msgid "anonymous"
+msgstr "निनावी"
+
+msgid "Display the basic properties of the changeset"
+msgstr ""
+
+msgid "Display the tags of the changeset"
+msgstr ""
+
+msgid "Content"
+msgstr ""
+
+msgid "Display the objects created, updated, and deleted by the changeset"
+msgstr ""
+
+msgid "Discussion"
+msgstr "चर्चा"
+
+msgid "Display the public discussion around this changeset"
+msgstr ""
+
+msgid "Changeset Management Dialog"
+msgstr ""
+
+msgid "Close the dialog"
+msgstr ""
+
+msgid "Query"
+msgstr ""
+
+msgid "Launch the dialog for querying changesets"
+msgstr ""
+
+msgid "Remove from cache"
+msgstr ""
+
+msgid "Remove the selected changesets from the local cache"
+msgstr ""
+
+msgid "Close the selected changesets"
+msgstr "निवडलेले बदलसंच बंद करा"
+
+msgid "Update changeset"
+msgstr ""
+
+msgid "Updates the selected changesets with current data from the OSM server"
+msgstr ""
+
+msgid "Download changeset content"
+msgstr ""
+
+msgid "Download the content of the selected changesets from the server"
+msgstr ""
+
+msgid "My changesets"
+msgstr "माझे बदलसंच"
+
+msgid "Download my changesets from the OSM server (max. 100 changesets)"
+msgstr ""
+
+msgid ""
+"<html>JOSM is currently running with an anonymous user. It cannot "
+"download<br>your changesets from the OSM server unless you enter your OSM "
+"user name<br>in the JOSM preferences.</html>"
+msgstr ""
+
+msgctxt "changeset.upload-comment"
+msgid "empty"
+msgstr ""
+
+msgctxt "changeset.state"
+msgid "Open"
+msgstr "खुला"
+
+msgctxt "changeset.state"
+msgid "Closed"
+msgstr "बंद"
+
+msgid "ID"
+msgstr ""
+
+msgid "Open"
+msgstr "उघडा"
+
+msgid "User"
+msgstr ""
+
+msgid "Created at"
+msgstr ""
+
+msgid "Closed at"
+msgstr ""
+
+msgid "Discussions"
+msgstr "चर्चा"
+
+msgid "Downloading changeset content"
+msgstr ""
+
+msgid "({0}/{1}) Downloading changeset {2}..."
+msgstr ""
+
+msgid "({0}/{1}) Downloading content for changeset {2}..."
+msgstr ""
+
+msgid ""
+"<html>The selected object is not available in the current<br>edit layer "
+"''{0}''.</html>"
+msgid_plural ""
+"<html>None of the selected objects is available in the current<br>edit layer "
+"''{0}''.</html>"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Download content"
+msgstr ""
+
+msgid "Download the changeset content from the OSM server"
+msgstr ""
+
+msgid "Update content"
+msgstr ""
+
+msgid "Update the changeset content from the OSM server"
+msgstr ""
+
+msgid "Download and show the history of the selected objects"
+msgstr ""
+
+msgid "Select in layer"
+msgstr "थरात निवडा"
+
+msgid "Select the corresponding primitives in the current data layer"
+msgstr ""
+
+msgid "Nothing to select"
+msgstr ""
+
+msgid "Zoom to in layer"
+msgstr ""
+
+msgid "Zoom to the corresponding objects in the current data layer"
+msgstr ""
+
+msgid "Nothing to zoom to"
+msgstr ""
+
+msgid "The content of this changeset is not downloaded yet."
+msgstr ""
+
+msgid "Download now"
+msgstr ""
+
+msgid "Download the changeset content"
+msgstr ""
+
+msgid "Created"
+msgstr ""
+
+msgid "Updated"
+msgstr ""
+
+msgid "Deleted"
+msgstr ""
+
+msgid "Name"
+msgstr "नाव"
+
+msgid "ID:"
+msgstr ""
+
+msgid "Comment:"
+msgstr ""
+
+msgid "Open/Closed:"
+msgstr "खुला/बंद:"
+
+msgid "Created by:"
+msgstr ""
+
+msgid "Created on:"
+msgstr ""
+
+msgid "Closed on:"
+msgstr ""
+
+msgid "Remove the changeset in the detail view panel from the local cache"
+msgstr ""
+
+msgid "Update the changeset from the OSM server"
+msgstr ""
+
+msgid ""
+"Select the primitives in the content of this changeset in the current data "
+"layer"
+msgstr ""
+
+msgid ""
+"<html>None of the objects in the content of changeset {0} is available in "
+"the current<br>edit layer ''{1}''.</html>"
+msgstr ""
+
+msgid ""
+"Zoom to the objects in the content of this changeset in the current data "
+"layer"
+msgstr ""
+
+msgid "Update changeset discussion"
+msgstr ""
+
+msgid "Update the changeset discussion from the OSM server"
+msgstr ""
+
+msgid "Date"
+msgstr "दिनांक"
+
+msgid "Download changesets"
+msgstr ""
+
+msgid "{0} [incomplete]"
+msgstr "{0} [अपूर्ण]"
+
+msgid "open"
+msgstr "खुला"
+
+msgid "closed"
+msgstr "बंद"
+
+msgid "Changeset ID: "
+msgstr ""
+
+msgid "Enter a changeset id"
+msgstr ""
+
+msgid ""
+"Download the changeset with the specified id, including the changeset content"
+msgstr ""
+
+msgid "Select changesets owned by specific users"
+msgstr ""
+
+msgid "Select changesets depending on whether they are open or closed"
+msgstr ""
+
+msgid ""
+"Select changesets based on the date/time they have been created or closed"
+msgstr ""
+
+msgid "Select only changesets related to a specific bounding box"
+msgstr ""
+
+msgid "Query open changesets only"
+msgstr ""
+
+msgid "Query closed changesets only"
+msgstr ""
+
+msgid "Query both open and closed changesets"
+msgstr ""
+
+msgid "User ID:"
+msgstr ""
+
+msgid "User name:"
+msgstr ""
+
+msgid "Only changesets owned by myself"
+msgstr "केवळ माझ्या मालकीचे बदलसंच"
+
+msgid "Only changesets owned by the user with the following user ID"
+msgstr ""
+
+msgid "Only changesets owned by the user with the following user name"
+msgstr ""
+
+msgid ""
+"Only changesets owned by myself (disabled. JOSM is currently run by an "
+"anonymous user)"
+msgstr ""
+
+msgid ""
+"Cannot restrict changeset query to the current user because the current user "
+"is anonymous"
+msgstr ""
+
+msgid "Current value ''{0}'' for user ID is not valid"
+msgstr ""
+
+msgid "Cannot restrict the changeset query to the user name ''{0}''"
+msgstr ""
+
+msgid "Please enter a valid user ID"
+msgstr ""
+
+msgid "Invalid user ID"
+msgstr ""
+
+msgid "Please enter a non-empty user name"
+msgstr ""
+
+msgid "Invalid user name"
+msgstr ""
+
+msgid "Date: "
+msgstr "दिनांक: "
+
+msgid "Time:"
+msgstr "वेळ:"
+
+msgid "Closed after - "
+msgstr ""
+
+msgid "Date:"
+msgstr "दिनांक:"
+
+msgid "Created before - "
+msgstr ""
+
+msgid "Only changesets closed after the following date/time"
+msgstr ""
+
+msgid "Only changesets closed after and created before a specific date/time"
+msgstr ""
+
+msgid ""
+"Cannot build changeset query with time based restrictions. Input is not "
+"valid."
+msgstr ""
+
+msgid ""
+"<html>Please enter valid date/time values to restrict<br>the query to a "
+"specific time range.</html>"
+msgstr ""
+
+msgid "Invalid date/time values"
+msgstr ""
+
+msgid ""
+"Cannot restrict the changeset query to a specific bounding box. The input is "
+"invalid."
+msgstr ""
+
+msgid ""
+"<html>Please enter valid longitude/latitude values to restrict<br>the "
+"changeset query to a specific bounding box.</html>"
+msgstr ""
+
+msgid "Invalid bounding box"
+msgstr ""
+
+msgid ""
+"The current value is not a valid user ID. Please enter an integer value > 0"
+msgstr ""
+
+msgid "Please enter an integer value > 0"
+msgstr ""
+
+msgid ""
+"<html>The  current value is not a valid user name.<br>Please enter an non-"
+"empty user name.</html>"
+msgstr ""
+
+msgid "Please enter an non-empty user name"
+msgstr ""
+
+msgid ""
+"Please enter a date in the usual format for your locale.<br>Example: "
+"{0}<br>Example: {1}<br>Example: {2}<br>Example: {3}<br>"
+msgstr ""
+
+msgid ""
+"Please enter a valid time in the usual format for your locale.<br>Example: "
+"{0}<br>Example: {1}<br>Example: {2}<br>Example: {3}<br>"
+msgstr ""
+
+msgid "Download my changesets only"
+msgstr ""
+
+msgid ""
+"<html>Select to restrict the query to your changesets only.<br>Unselect to "
+"include all changesets in the query.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please select one the following <strong>standard "
+"queries</strong>.Select <strong>Download my changesets only</strong> if you "
+"only want to download changesets created by yourself.<br>Note that JOSM will "
+"download max. 100 changesets.</html>"
+msgstr ""
+
+msgid "<html>Download the latest changesets</html>"
+msgstr ""
+
+msgid ""
+"<html>Download my open changesets<br><em>Disabled. Please enter your OSM "
+"user name in the preferences first.</em></html>"
+msgstr ""
+
+msgid "<html>Download my open changesets</html>"
+msgstr ""
+
+msgid ""
+"<html>Download changesets in the current map view.<br><em>Disabled. There is "
+"currently no map view active.</em></html>"
+msgstr ""
+
+msgid "<html>Download changesets in the current map view</html>"
+msgstr ""
+
+msgid ""
+"Unexpected value for preference ''{0}'', got ''{1}''. Resetting to default "
+"query."
+msgstr ""
+
+msgid "Cannot create changeset query for open changesets of anonymous user"
+msgstr ""
+
+msgid "Basic"
+msgstr ""
+
+msgid "Download changesets using predefined queries"
+msgstr ""
+
+msgid "From URL"
+msgstr "URLवरून"
+
+msgid "Query changesets from a server URL"
+msgstr ""
+
+msgid "Advanced"
+msgstr ""
+
+msgid "Use a custom changeset query"
+msgstr ""
+
+msgid "Query changesets"
+msgstr ""
+
+msgid "Query and download changesets"
+msgstr ""
+
+msgid "Please enter a valid changeset query URL first."
+msgstr ""
+
+msgid "Illegal changeset query URL"
+msgstr ""
+
+msgid "Close the dialog and abort querying of changesets"
+msgstr ""
+
+msgid "Querying and downloading changesets"
+msgstr ""
+
+msgid "Determine user id for current user..."
+msgstr ""
+
+msgid "Query and download changesets ..."
+msgstr ""
+
+msgid "URL: "
+msgstr "URL: "
+
+msgid "Please enter or paste an URL to retrieve changesets from the OSM API."
+msgstr "OSM APIवरून बदलसंच मिळवण्यासाठी कृपया URL लिहा किंवा चिकटवा."
+
+msgid "Examples"
+msgstr "उदाहरणे"
+
+msgid ""
+"Note that changeset queries are currently always submitted to ''{0}'', "
+"regardless of the host, port and path of the URL entered below."
+msgstr ""
+
+msgid "This changeset query URL is invalid"
+msgstr ""
+
+msgid "Discardable key: selection Foreground"
+msgstr ""
+
+msgid "Discardable key: selection Background"
+msgstr ""
+
+msgid "Discardable key: foreground"
+msgstr ""
+
+msgid "Discardable key: background"
+msgstr ""
+
+msgid "{0} ''{1}''"
+msgstr "{0} ''{1}''"
+
+msgid "{0} different"
+msgid_plural "{0} different"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ", {0} unset"
+msgid_plural ", {0} unset"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Select objects for which to change tags."
+msgstr ""
+
+msgid "Tags/Memberships"
+msgstr ""
+
+msgid "Tags for selected objects."
+msgstr ""
+
+msgid "Member Of"
+msgstr ""
+
+msgid "Position"
+msgstr "स्थान"
+
+msgid "<different>"
+msgstr ""
+
+msgid "Objects: {2} / Tags: {0} / Memberships: {1}"
+msgstr ""
+
+msgid "Tags: {0} / Memberships: {1}"
+msgstr ""
+
+msgid "Tags / Memberships"
+msgstr ""
+
+msgid "Delete the selected key in all objects"
+msgstr ""
+
+msgid "Delete Tags"
+msgstr ""
+
+msgid "Change relation"
+msgstr "संबंध बदला"
+
+msgid "Delete from relation"
+msgstr ""
+
+msgid "Really delete selection from relation {0}?"
+msgstr ""
+
+msgid "Add a new key/value pair to all objects"
+msgstr ""
+
+msgid "Add Tag"
+msgstr ""
+
+msgid "Edit the value of the selected key for all objects"
+msgstr ""
+
+msgid "Edit Tags"
+msgstr ""
+
+msgid "Go to OSM wiki for tag help (F1)"
+msgstr ""
+
+msgid "Launch browser with wiki help for selected object"
+msgstr ""
+
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
+msgid "Paste Value"
+msgstr ""
+
+msgid "Paste the value of the selected tag from clipboard"
+msgstr ""
+
+msgid "Copy Value"
+msgstr ""
+
+msgid "Copy the value of the selected tag to clipboard"
+msgstr ""
+
+msgid "Copy selected Key(s)/Value(s)"
+msgstr ""
+
+msgid "Copy the key and value of the selected tag(s) to clipboard"
+msgstr ""
+
+msgid "Copy all Keys/Values"
+msgstr ""
+
+msgid "Copy the key and value of all the tags to clipboard"
+msgstr ""
+
+msgid "Search Key/Value/Type"
+msgstr ""
+
+msgid ""
+"Search with the key and value of the selected tag, restrict to type (i.e., "
+"node/way/relation)"
+msgstr ""
+
+msgid "Search Key/Value"
+msgstr ""
+
+msgid "Search with the key and value of the selected tag"
+msgstr ""
+
+msgid "Overwrite key"
+msgstr ""
+
+msgid "Replace"
+msgstr ""
+
+msgid "The new key is already used, overwrite values?"
+msgstr ""
+
+msgid "Change value?"
+msgid_plural "Change values?"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "This will change {0} object."
+msgid_plural "This will change up to {0} objects."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "An empty value deletes the tag."
+msgstr ""
+
+msgid "You changed the key from ''{0}'' to ''{1}''."
+msgstr ""
+
+msgid "Change properties of up to {0} object"
+msgid_plural "Change properties of up to {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Use English language for tag by default"
+msgstr ""
+
+msgid "Add value?"
+msgstr ""
+
+msgid "This will change up to {0} object."
+msgid_plural "This will change up to {0} objects."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Please select a key"
+msgstr ""
+
+msgid "Please select a value"
+msgstr ""
+
+msgid "Set number of recently added tags"
+msgstr ""
+
+msgid "Remember last used tags after a restart"
+msgstr ""
+
+msgid "to apply first suggestion"
+msgstr ""
+
+msgid "to add without closing the dialog"
+msgstr ""
+
+msgid "to add first suggestion without closing the dialog"
+msgstr ""
+
+msgid "Please enter the number of recently added tags to display"
+msgstr ""
+
+msgid "Please enter integer number between 0 and {0}"
+msgstr ""
+
+msgid "Recently added tags"
+msgstr ""
+
+msgid "Choose recent tag {0}"
+msgstr ""
+
+msgid "Use this tag again"
+msgstr ""
+
+msgid "Apply recent tag {0}"
+msgstr ""
+
+msgid "The key ''{0}'' is already used"
+msgstr ""
+
+msgid "You changed the value of ''{0}'' from ''{1}'' to ''{2}''."
+msgstr ""
+
+msgid "Edit the relation the currently selected relation member refers to."
+msgstr ""
+
+msgid "Download all child relations (recursively)"
+msgstr ""
+
+msgid "Download All Children"
+msgstr ""
+
+msgid "Download selected relations"
+msgstr ""
+
+msgid "Download Selected Children"
+msgstr ""
+
+msgid "Conflict in data"
+msgid_plural "Conflicts in data"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Download relation members"
+msgstr ""
+
+msgid ""
+"<html>The child relation<br>{0}<br>is deleted on the server. It cannot be "
+"loaded</html>"
+msgstr ""
+
+msgid "Relation is deleted"
+msgstr ""
+
+msgid "Downloading relation {0}"
+msgstr ""
+
+msgid "Ignoring exception because task was canceled. Exception: {0}"
+msgstr ""
+
+msgid "Downloading {0} incomplete object"
+msgid_plural "Downloading {0} incomplete objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Downloading {0} incomplete child of relation ''{1}''"
+msgid_plural "Downloading {0} incomplete children of relation ''{1}''"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Downloading {0} incomplete child of {1} parent relations"
+msgid_plural "Downloading {0} incomplete children of {1} parent relations"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Download relations"
+msgstr ""
+
+msgid "({0}/{1}): Downloading relation ''{2}''..."
+msgstr ""
+
+msgid "Tags and Members"
+msgstr ""
+
+msgid "Parent Relations"
+msgstr ""
+
+msgid "Child Relations"
+msgstr ""
+
+msgid "Apply Role:"
+msgstr ""
+
+msgid "Enter a role and apply it to the selected relation members"
+msgstr ""
+
+msgid "New Relation"
+msgstr "नवा संबंध"
+
+msgid "Focus Relation Editor with relation ''{0}'' in layer ''{1}''"
+msgstr ""
+
+msgid "Relation Editor: {0}"
+msgstr "संबंध संपादक: {0}"
+
+msgid ""
+"<html>There is at least one member in this relation referring<br>to the "
+"relation itself.<br>This creates circular dependencies and is "
+"discouraged.<br>How do you want to proceed with circular dependencies?</html>"
+msgstr ""
+
+msgid "Remove them, clean up relation"
+msgstr ""
+
+msgid "Ignore them, leave relation as is"
+msgstr ""
+
+msgid "Sorry, shortcut \"{0}\" can not be enabled in Relation editor dialog"
+msgstr ""
+
+msgid ""
+"<html>This relation already has one or more members referring to<br>the "
+"object ''{0}''<br><br>Do you really want to add another relation "
+"member?</html>"
+msgstr ""
+
+msgid "Multiple members referring to same object."
+msgstr ""
+
+msgid ""
+"<html>You are trying to add a relation to itself.<br><br>This creates "
+"circular references and is therefore discouraged.<br>Skipping relation "
+"''{0}''.</html>"
+msgstr ""
+
+msgid ""
+"Add all objects selected in the current dataset before the first member"
+msgstr ""
+
+msgid ""
+"Add all objects selected in the current dataset before the first selected "
+"member"
+msgstr ""
+
+msgid ""
+"Add all objects selected in the current dataset after the last selected "
+"member"
+msgstr ""
+
+msgid "Remove all members referring to one of the selected objects"
+msgstr ""
+
+msgid ""
+"Select relation members which refer to objects in the current selection"
+msgstr ""
+
+msgid ""
+"Select relation members which refer to {0} objects in the current selection"
+msgstr ""
+
+msgid "Select objects for selected relation members"
+msgstr ""
+
+msgid "Sort the relation members"
+msgstr ""
+
+msgid "Relation Editor: Sort"
+msgstr ""
+
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
+msgid "Reverse the order of the relation members"
+msgstr ""
+
+msgid "Reverse"
+msgstr ""
+
+msgid "Move the currently selected members up"
+msgstr "सध्या निवडलेले सदस्य वर सरकवा"
+
+msgid "Relation Editor: Move Up"
+msgstr "संबंध संपादक: वर सरकवा"
+
+msgid "Move the currently selected members down"
+msgstr "सध्या निवडलेले सदस्य खाली सरकवा"
+
+msgid "Relation Editor: Move Down"
+msgstr "संबंध संपादक: खाली सरकवा"
+
+msgid "Remove the currently selected members from this relation"
+msgstr ""
+
+msgid "Relation Editor: Remove"
+msgstr ""
+
+msgid "Delete the currently edited relation"
+msgstr ""
+
+msgid ""
+"One or more members of this new relation have been deleted while the "
+"relation editor\n"
+"was open. They have been removed from the relation members list."
+msgstr ""
+
+msgid "Yes, create a conflict and close"
+msgstr ""
+
+msgid "Click to create a conflict and close this relation editor"
+msgstr ""
+
+msgid "No, continue editing"
+msgstr ""
+
+msgid "Click to return to the relation editor and to resume relation editing"
+msgstr ""
+
+msgid ""
+"<html>This relation has been changed outside of the editor.<br>You cannot "
+"apply your changes and continue editing.<br><br>Do you want to create a "
+"conflict and close the editor?</html>"
+msgstr ""
+
+msgid ""
+"<html>Layer ''{0}'' already has a conflict for object<br>''{1}''.<br>Please "
+"resolve this conflict first, then try again.</html>"
+msgstr ""
+
+msgid "Apply the current updates"
+msgstr ""
+
+msgid "Apply the updates and close the dialog"
+msgstr ""
+
+msgid "Cancel the updates and close the dialog"
+msgstr ""
+
+msgid "Yes, save the changes and close"
+msgstr ""
+
+msgid "Click to save the changes and close this relation editor"
+msgstr ""
+
+msgid "No, discard the changes and close"
+msgstr ""
+
+msgid "Click to discard the changes and close this relation editor"
+msgstr ""
+
+msgid "Cancel, continue editing"
+msgstr ""
+
+msgid ""
+"<html>The relation has been changed.<br><br>Do you want to save your "
+"changes?</html>"
+msgstr ""
+
+msgid "Unsaved changes"
+msgstr ""
+
+msgid "Add an empty tag"
+msgstr ""
+
+msgid "Download all incomplete members"
+msgstr ""
+
+msgid "Download Members"
+msgstr ""
+
+msgid "Relation Editor: Download Members"
+msgstr ""
+
+msgid "Download selected incomplete members"
+msgstr ""
+
+msgid "Sets a role for the selected members"
+msgstr ""
+
+msgid "Apply Role"
+msgstr ""
+
+msgid "You are setting an empty role on {0} object."
+msgid_plural "You are setting an empty role on {0} objects."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "This is equal to deleting the roles of these objects."
+msgstr ""
+
+msgid "Do you really want to apply the new role?"
+msgstr ""
+
+msgid "Yes, apply it"
+msgstr ""
+
+msgid "No, do not apply"
+msgstr ""
+
+msgid "Confirm empty role"
+msgstr ""
+
+msgid "Edit the relation the currently selected relation member refers to"
+msgstr ""
+
+msgid ""
+"Members from paste buffer cannot be added because they are not included in "
+"current layer"
+msgstr ""
+
+msgid "Select previous Gap"
+msgstr ""
+
+msgid "Select the previous relation member which gives rise to a gap"
+msgstr ""
+
+msgid "Select next Gap"
+msgstr ""
+
+msgid "Select the next relation member which gives rise to a gap"
+msgstr ""
+
+msgid "Zoom to Gap"
+msgstr ""
+
+msgid "Zoom to the gap in the way sequence"
+msgstr ""
+
+msgid "Refers to"
+msgstr ""
+
+msgid "Download referring relations"
+msgstr ""
+
+msgid "There were {0} conflicts during import."
+msgstr ""
+
+msgid "including immediate children of parent relations"
+msgstr ""
+
+msgid "Load parent relations"
+msgstr ""
+
+msgid "Reload"
+msgstr ""
+
+msgid "Loading parent relations"
+msgstr ""
+
+msgid "Edit the currently selected relation"
+msgstr ""
+
+msgid "Apply Changes"
+msgstr ""
+
+msgid "Create new relation in layer ''{0}''"
+msgstr ""
+
+msgid "Edit new relation in layer ''{0}''"
+msgstr ""
+
+msgid "Edit relation #{0} in layer ''{1}''"
+msgstr ""
+
+msgid "Load relation"
+msgstr ""
+
+msgid "way is connected"
+msgstr "मार्ग जोडलेला आहे"
+
+msgid "way is connected to previous relation member"
+msgstr ""
+
+msgid "way is connected to next relation member"
+msgstr ""
+
+msgid "way is not connected to previous or next relation member"
+msgstr ""
+
+msgid "{0} - {1} ({2})"
+msgstr "{0} - {1} ({2})"
+
+msgid "Wrong number of arguments for bookmark"
+msgstr ""
+
+msgid "Error reading bookmark entry: %s"
+msgstr ""
+
+msgid "Bookmarks"
+msgstr ""
+
+msgid "<html>There is currently no download area selected.</html>"
+msgstr ""
+
+msgid ""
+"<html><strong>Current download area</strong> (minlon, minlat, maxlon, "
+"maxlat): </html>"
+msgstr ""
+
+msgid "Create bookmark"
+msgstr ""
+
+msgid "Add a bookmark for the currently selected download area"
+msgstr ""
+
+msgid ""
+"Currently, there is no download area selected. Please select an area first."
+msgstr ""
+
+msgid "Please enter a name for the bookmarked download area."
+msgstr ""
+
+msgid "Name of location"
+msgstr ""
+
+msgid "Remove the currently selected bookmarks"
+msgstr ""
+
+msgid "Rename the currently selected bookmark"
+msgstr ""
+
+msgid "min lat"
+msgstr "किमान अक्षांश"
+
+msgid "min lon"
+msgstr "किमान रेखांश"
+
+msgid "max lat"
+msgstr "कमाल अक्षांश"
+
+msgid "max lon"
+msgstr "कमाल रेखांश"
+
+msgid "Clear textarea"
+msgstr ""
+
+msgid ""
+"URL from www.openstreetmap.org (you can paste an URL here to download the "
+"area)"
+msgstr ""
+
+msgid "Bounding Box"
+msgstr ""
+
+msgid "The string ''{0}'' is not a valid double value."
+msgstr ""
+
+msgid "Value for latitude in range [-90,90] required."
+msgstr ""
+
+msgid "Value for longitude in range [-180,180] required."
+msgstr ""
+
+msgid "Data Sources and Types:"
+msgstr ""
+
+msgid "OpenStreetMap data"
+msgstr ""
+
+msgid "Select to download OSM data in the selected download area."
+msgstr ""
+
+msgid "Raw GPS data"
+msgstr ""
+
+msgid "Select to download GPS traces in the selected download area."
+msgstr ""
+
+msgid "Select to download notes in the selected download area."
+msgstr ""
+
+msgid "Download as new layer"
+msgstr ""
+
+msgid ""
+"<html>Select to download data into a new data layer.<br>Unselect to download "
+"into the currently active data layer.</html>"
+msgstr ""
+
+msgid "Open this dialog on startup"
+msgstr ""
+
+msgid ""
+"<html>Autostart ''Download from OSM'' dialog every time JOSM is "
+"started.<br>You can open it manually from File menu or toolbar.</html>"
+msgstr ""
+
+msgid ""
+"Use left click&drag to select area, arrows or right mouse button to scroll "
+"map, wheel or +/- to zoom."
+msgstr ""
+
+msgid "No area selected yet"
+msgstr "अद्याप क्षेत्र निवडलेले नाही"
+
+msgid "Download area too large; will probably be rejected by server"
+msgstr ""
+
+msgid "Download area ok, size probably acceptable to server"
+msgstr ""
+
+msgid "Click to close the dialog and to abort downloading"
+msgstr ""
+
+msgid "Click to download the currently selected area"
+msgstr ""
+
+msgid "Please select a download area first."
+msgstr ""
+
+msgid ""
+"<html>Neither <strong>{0}</strong> nor <strong>{1}</strong> nor "
+"<strong>{2}</strong> is enabled.<br>Please choose to either download OSM "
+"data, or GPX data, or Notes, or all.</html>"
+msgstr ""
+
+msgid "Download referrers (parent relations)"
+msgstr ""
+
+msgid "Download object"
+msgstr ""
+
+msgid "Start downloading"
+msgstr ""
+
+msgid ""
+"Select if the referrers of the object should be downloaded as well, "
+"i.e.,parent relations and for nodes, additionally, parent ways"
+msgstr ""
+
+msgid "Select if the members of a relation should be downloaded as well"
+msgstr ""
+
+msgid "Download referrers (parent relations and ways)"
+msgstr ""
+
+msgid "Class Type"
+msgstr ""
+
+msgid "Bounds"
+msgstr ""
+
+msgid "Choose the server for searching:"
+msgstr ""
+
+msgid "Enter a place name to search for:"
+msgstr ""
+
+msgid "Enter a place name to search for"
+msgstr ""
+
+msgid "Areas around places"
+msgstr ""
+
+msgid "Null pointer exception, possibly some missing tags."
+msgstr ""
+
+msgid "Search ..."
+msgstr ""
+
+msgid "Click to start searching for places"
+msgstr ""
+
+msgid "Querying name server"
+msgstr ""
+
+msgid "Querying name server ..."
+msgstr ""
+
+msgid "Error occured with query ''{0}'': ''{1}''"
+msgstr ""
+
+msgid "Name server returned invalid data. Please try again."
+msgstr ""
+
+msgid "Bad response"
+msgstr ""
+
+msgid "Type"
+msgstr "प्रकार"
+
+msgid "Slippy map"
+msgstr ""
+
+msgid "Tile Numbers"
+msgstr ""
+
+msgid "JOSM Help Browser"
+msgstr ""
+
+msgid "Failed to read CSS file ''help-browser.css''. Exception is: {0}"
+msgstr ""
+
+msgid ""
+"<html><p class=\"warning-header\">Help content for help topic missing</p><p "
+"class=\"warning-body\">Help content for the help topic <strong>{0}</strong> "
+"is not available yet. It is missing both in your local language ({1}) and in "
+"English.<br><br>Please help to improve the JOSM help system and fill in the "
+"missing information. You can both edit the <a href=\"{2}\">help topic in "
+"your local language ({1})</a> and the <a href=\"{3}\">help topic in "
+"English</a>.</p></html>"
+msgstr ""
+
+msgid ""
+"<html><p class=\"error-header\">Error when retrieving help information</p><p "
+"class=\"error-body\">The content for the help topic <strong>{0}</strong> "
+"could not be loaded. The error message is "
+"(untranslated):<br><tt>{1}</tt></p></html>"
+msgstr ""
+
+msgid ""
+"<html>Failed to open help page for url {0}.<br>This is most likely due to a "
+"network problem, please check<br>your internet connection</html>"
+msgstr ""
+
+msgid "Failed to open URL"
+msgstr "URL उघडण्यात अपयशी"
+
+msgid "Open the current help page in an external browser"
+msgstr ""
+
+msgid "Edit the current help page"
+msgstr ""
+
+msgid ""
+"<html>The current URL <tt>{0}</tt><br>is an external URL. Editing is only "
+"possible for help topics<br>on the help server <tt>{1}</tt>.</html>"
+msgstr ""
+
+msgid "Reload the current help page"
+msgstr ""
+
+msgid "Go to the previous page"
+msgstr "मागील पानावर जा"
+
+msgid "Go to the next page"
+msgstr "पुढील पानावर जा"
+
+msgid "Go to the JOSM help home page"
+msgstr ""
+
+msgid "Bad location in HTML document. Exception was: {0}"
+msgstr ""
+
+msgid "Failed to open help page. The target URL is empty."
+msgstr ""
+
+msgid "Failed to open help page"
+msgstr ""
+
+msgid "Latitude: "
+msgstr "अक्षांश: "
+
+msgid "Longitude: "
+msgstr "रेखांश: "
+
+msgid "Distance: "
+msgstr "अंतर: "
+
+msgid "Coordinates"
+msgstr "सहनिर्देशक"
+
+msgid "History for node {0}"
+msgstr ""
+
+msgid "History for way {0}"
+msgstr ""
+
+msgid "History for relation {0}"
+msgstr ""
+
+msgid "Reload the history from the server"
+msgstr ""
+
+msgid "History not initialized yet. Failed to set reference primitive."
+msgstr ""
+
+msgid ""
+"Failed to set reference. Reference ID {0} does not match history ID {1}."
+msgstr ""
+
+msgid ""
+"Failed to set reference. Reference version {0} not available in history."
+msgstr ""
+
+msgid "History not initialized yet. Failed to set current primitive."
+msgstr ""
+
+msgid ""
+"Failed to set current primitive. Current version {0} not available in "
+"history."
+msgstr ""
+
+msgid "Load history"
+msgstr "इतिहास लादा"
+
+msgid "Loading history for node {0}"
+msgstr ""
+
+msgid "Loading history for way {0}"
+msgstr ""
+
+msgid "Loading history for relation {0}"
+msgstr ""
+
+msgid "Node {0}"
+msgstr "गाठ {0}"
+
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
+msgid "Zoom to node"
+msgstr ""
+
+msgid "Zoom to this node in the current data layer"
+msgstr ""
+
+msgid "Open a history browser with the history of this node"
+msgstr ""
+
+msgid "Way {0}"
+msgstr "मार्ग {0}"
+
+msgid "Relation {0}"
+msgstr "संबंध {0}"
+
+msgid "Object"
+msgstr "वस्तू"
+
+msgid "not present"
+msgstr ""
+
+msgid "Changeset comment"
+msgstr ""
+
+msgid "Changeset source"
+msgstr "बदलसंच स्रोत"
+
+msgid "Imagery used"
+msgstr ""
+
+msgid "<b>Source</b>:"
+msgstr ""
+
+msgid "<b>Imagery</b>:"
+msgstr ""
+
+msgid ""
+"<html>Version <strong>{0}</strong> currently edited in layer ''{1}''</html>"
+msgstr ""
+
+msgid ""
+"<html>Version <strong>{0}</strong> created on <strong>{1}</strong></html>"
+msgstr ""
+
+msgid "Changeset"
+msgstr "बदलसंच"
+
+msgid "Changeset info"
+msgstr ""
+
+msgid "Launch browser with information about the changeset"
+msgstr ""
+
+msgid "Show changeset {0}"
+msgstr "बदलसंच {0} दाखवा"
+
+msgid "User info"
+msgstr ""
+
+msgid "Launch browser with information about the user"
+msgstr ""
+
+msgid "Show user {0}"
+msgstr ""
+
+msgid "Ver"
+msgstr "आवृत्ती"
+
+msgid "A"
+msgstr ""
+
+msgid "B"
+msgstr ""
+
+msgid ""
+"Failed to update primitive with id {0} because current edit layer is null"
+msgstr ""
+
+msgid ""
+"Failed to update primitive with id {0} because current edit layer does not "
+"include such a primitive"
+msgstr ""
+
+msgid "Synchronize node {0} only"
+msgstr ""
+
+msgid "Synchronize way {0} only"
+msgstr ""
+
+msgid "Synchronize relation {0} only"
+msgstr ""
+
+msgid "Synchronize entire dataset"
+msgstr ""
+
+msgid ""
+"<html>Uploading <strong>failed</strong> because the server has a newer "
+"version of one<br>of your nodes, ways, or relations.<br>The conflict is "
+"caused by the <strong>{0}</strong> with id <strong>{1}</strong>,<br>the "
+"server has version {2}, your version is {3}.<br><br>Click "
+"<strong>{4}</strong> to synchronize the conflicting primitive only.<br>Click "
+"<strong>{5}</strong> to synchronize the entire local dataset with the "
+"server.<br>Click <strong>{6}</strong> to abort and continue "
+"editing.<br></html>"
+msgstr ""
+
+msgid ""
+"<html>Uploading <strong>failed</strong> because the server has a newer "
+"version of one<br>of your nodes, ways, or relations.<br><br>Click "
+"<strong>{0}</strong> to synchronize the entire local dataset with the "
+"server.<br>Click <strong>{1}</strong> to abort and continue "
+"editing.<br></html>"
+msgstr ""
+
+msgid ""
+"<html>Uploading <strong>failed</strong> because you have been "
+"using<br>changeset {0} which was already closed at {1}.<br>Please upload "
+"again with a new or an existing open changeset.</html>"
+msgstr ""
+
+msgid "Changeset closed"
+msgstr "बदलसंच बंद केला"
+
+msgid "Prepare conflict resolution"
+msgstr ""
+
+msgid "Click to download all referring objects for {0}"
+msgstr ""
+
+msgid "Click to cancel and to resume editing the map"
+msgstr ""
+
+msgid ""
+"Click <strong>{0}</strong> to load them now.<br>If necessary JOSM will "
+"create conflicts which you can resolve in the Conflict Resolution Dialog."
+msgstr ""
+
+msgid "Object still in use"
+msgstr ""
+
+msgid "Error header \"{0}\" did not match with an expected pattern"
+msgstr ""
+
+msgid "Upload"
+msgstr ""
+
+msgid ""
+"<html>Select which actions to perform for this layer, if you click the "
+"leftmost button.<br/>Check \"upload\" to upload the changes to the OSM "
+"server.<br/>Check \"Save\" to save the layer to the file specified on the "
+"left.</html>"
+msgstr ""
+
+msgid "Provide a brief comment for the changes you are uploading:"
+msgstr ""
+
+msgid "Enter an upload comment"
+msgstr ""
+
+msgid "Specify the data source for the changes"
+msgstr ""
+
+msgid "obtain from current layers"
+msgstr ""
+
+msgid "Enter a source"
+msgstr ""
+
+msgid "Changeset id:"
+msgstr ""
+
+msgid "Created at:"
+msgstr ""
+
+msgid "Changeset comment:"
+msgstr ""
+
+msgid "No open changeset"
+msgstr ""
+
+msgid ""
+"Please decide what changeset the data is uploaded to and whether to close "
+"the changeset after the next upload."
+msgstr ""
+
+msgid "Upload to a new changeset"
+msgstr ""
+
+msgid "Open a new changeset and use it in the next upload"
+msgstr ""
+
+msgid "Upload to an existing changeset"
+msgstr ""
+
+msgid "Upload data to an already existing and open changeset"
+msgstr ""
+
+msgid "Select an open changeset"
+msgstr ""
+
+msgid "Close changeset after upload"
+msgstr ""
+
+msgid "Select to close the changeset after the next upload"
+msgstr ""
+
+msgid "Load the list of your open changesets from the server"
+msgstr ""
+
+msgid "Close the currently selected open changeset"
+msgstr ""
+
+msgid "<html>Please select the changesets you want to close</html>"
+msgstr ""
+
+msgid "Open changesets"
+msgstr "खुले बदलसंच"
+
+msgid "Close changesets"
+msgstr "बंद बदलसंच"
+
+msgid "Close the selected open changesets"
+msgstr "निवडलेले खुले बदलसंच बंद करा"
+
+msgid "Cancel closing of changesets"
+msgstr "बदलसंच बंद करणे रद्द करा"
+
+msgid "Closing changeset"
+msgstr "बदलसंच बंद करत आहे"
+
+msgid "Closing changeset {0}"
+msgstr "बदलसंच {0} बंद करत आहे"
+
+msgid ""
+"Failed to put Credential Dialog always on top. Caught security exception."
+msgstr ""
+
+msgid "Enter credentials for OSM API"
+msgstr ""
+
+msgid "Enter credentials for host"
+msgstr ""
+
+msgid "Enter credentials for HTTP proxy"
+msgstr ""
+
+msgid "Password"
+msgstr "परवलीचा शब्द"
+
+msgid "Warning: The password is transferred unencrypted."
+msgstr ""
+
+msgid "Please enter the user name of your OSM account"
+msgstr ""
+
+msgid "Please enter the password of your OSM account"
+msgstr ""
+
+msgid ""
+"Authenticating at the OSM API ''{0}'' failed. Please enter a valid username "
+"and a valid password."
+msgstr ""
+
+msgid "Please enter the user name of your account"
+msgstr ""
+
+msgid "Please enter the password of your account"
+msgstr ""
+
+msgid ""
+"Authenticating at the host ''{0}'' failed. Please enter a valid username and "
+"a valid password."
+msgstr ""
+
+msgid "Please enter the user name for authenticating at your proxy server"
+msgstr ""
+
+msgid "Please enter the password for authenticating at your proxy server"
+msgstr ""
+
+msgid ""
+"Authenticating at the HTTP proxy ''{0}'' failed. Please enter a valid "
+"username and a valid password."
+msgstr ""
+
+msgid ""
+"Warning: depending on the authentication method the proxy server uses the "
+"password may be transferred unencrypted."
+msgstr ""
+
+msgid "Authenticate"
+msgstr ""
+
+msgid "Authenticate with the supplied username and password"
+msgstr ""
+
+msgid "Cancel authentication"
+msgstr ""
+
+msgid "Downloading file"
+msgstr ""
+
+msgid "Downloading File {0}: {1} bytes..."
+msgstr ""
+
+msgid "Download finished"
+msgstr ""
+
+msgid "Unpacking {0} into {1}"
+msgstr ""
+
+msgid ""
+"Cannot download file ''{0}''. Its download link ''{1}'' is not a valid URL. "
+"Skipping download."
+msgstr ""
+
+msgid ""
+"Could not retrieve the list of your open changesets because<br>JOSM does not "
+"know your identity.<br>You have either chosen to work anonymously or you are "
+"not entitled<br>to know the identity of the user on whose behalf you are "
+"working."
+msgstr ""
+
+msgid "Missing user identity"
+msgstr ""
+
+msgid ""
+"Failed to retrieve user infos for the current JOSM user. Exception was: {0}"
+msgstr ""
+
+msgid "Download objects"
+msgstr ""
+
+msgid "Initializing nodes to download ..."
+msgstr ""
+
+msgid "Object could not be downloaded"
+msgid_plural "Some objects could not be downloaded"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "One object could not be downloaded.<br>"
+msgid_plural "{0} objects could not be downloaded.<br>"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"The server replied with response code 404.<br>This usually means, the server "
+"does not know an object with the requested id."
+msgstr ""
+
+msgid "missing objects:"
+msgstr ""
+
+msgid "One downloaded object is deleted."
+msgid_plural "{0} downloaded objects are deleted."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"Either edit the path manually in the text field or click the \"...\" button "
+"to open a file chooser."
+msgstr ""
+
+msgid "The bold text is the name of the layer."
+msgstr ""
+
+msgid "Click here to choose save path"
+msgstr ""
+
+msgid "Layer ''{0}'' is not backed by a file"
+msgstr ""
+
+msgid "File ''{0}'' is not writable. Please enter another file name."
+msgstr ""
+
+msgid "Click cell to change the file path."
+msgstr ""
+
+msgid "Launch a file chooser to select a file"
+msgstr ""
+
+msgid "Select filename"
+msgstr "संचिकानाम निवडा"
+
+msgid "Open Recent"
+msgstr ""
+
+msgid "List of recently opened files"
+msgstr ""
+
+msgid "Clear"
+msgstr "पुसा"
+
+msgid "Clear the list of recently opened files"
+msgstr ""
+
+msgid "Saving layer to ''{0}'' ..."
+msgstr "थर ''{0}'' मध्ये साठवत आहे ..."
+
+msgid "Unsaved changes - Save/Upload before exiting?"
+msgstr ""
+
+msgid "Unsaved changes - Save/Upload before deleting?"
+msgstr ""
+
+msgid "Uploading and saving modified layers ..."
+msgstr ""
+
+msgid ""
+"<html>{0} layer has unresolved conflicts.<br>Either resolve them first or "
+"discard the modifications.<br>Layer with conflicts:</html>"
+msgid_plural ""
+"<html>{0} layers have unresolved conflicts.<br>Either resolve them first or "
+"discard the modifications.<br>Layers with conflicts:</html>"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Unsaved data and conflicts"
+msgstr ""
+
+msgid ""
+"<html>{0} layer needs saving but has no associated file.<br>Either select a "
+"file for this layer or discard the changes.<br>Layer without a file:</html>"
+msgid_plural ""
+"<html>{0} layers need saving but have no associated file.<br>Either select a "
+"file for each of them or discard the changes.<br>Layers without a "
+"file:</html>"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Unsaved data and missing associated file"
+msgstr ""
+
+msgid ""
+"<html>{0} layer needs saving but has an associated file<br>which cannot be "
+"written.<br>Either select another file for this layer or discard the "
+"changes.<br>Layer with a non-writable file:</html>"
+msgid_plural ""
+"<html>{0} layers need saving but have associated files<br>which cannot be "
+"written.<br>Either select another file for each of them or discard the "
+"changes.<br>Layers with non-writable files:</html>"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Unsaved data non-writable files"
+msgstr ""
+
+msgid "Close this dialog and resume editing in JOSM"
+msgstr ""
+
+msgid "Exit now!"
+msgstr ""
+
+msgid "Exit JOSM without saving. Unsaved changes are lost."
+msgstr ""
+
+msgid "Delete now!"
+msgstr ""
+
+msgid "Delete layers without saving. Unsaved changes are lost."
+msgstr ""
+
+msgid "Perform actions before exiting"
+msgstr ""
+
+msgid "Exit JOSM with saving. Unsaved changes are uploaded and/or saved."
+msgstr ""
+
+msgid "Perform actions before deleting"
+msgstr ""
+
+msgid "Save/Upload layers before deleting. Unsaved changes are not lost."
+msgstr ""
+
+msgid "Preparing layer ''{0}'' for upload ..."
+msgstr ""
+
+msgid ""
+"<html>An upload and/or save operation of one layer with modifications<br>was "
+"canceled or has failed.</html>"
+msgid_plural ""
+"<html>Upload and/or save operations of {0} layers with modifications<br>were "
+"canceled or have failed.</html>"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Incomplete upload and/or save"
+msgstr ""
+
+msgid "should be uploaded"
+msgstr ""
+
+msgid "should be saved"
+msgstr ""
+
+msgid ""
+"Layer ''{0}'' has modifications which should be uploaded to the server."
+msgstr ""
+
+msgid "Layer ''{0}'' has modifications which are discouraged to be uploaded."
+msgstr ""
+
+msgid "Layer ''{0}'' has no modifications to be uploaded."
+msgstr ""
+
+msgid ""
+"Layer ''{0}'' has modifications which should be saved to its associated file "
+"''{1}''."
+msgstr ""
+
+msgid "Layer ''{0}'' has no modifications to be saved."
+msgstr ""
+
+msgid "Layer Name and File Path"
+msgstr ""
+
+msgid "Recommended Actions"
+msgstr ""
+
+msgid "Actions To Take"
+msgstr ""
+
+msgid "Update objects"
+msgstr ""
+
+msgid "Initializing nodes to update ..."
+msgstr ""
+
+msgid "Initializing ways to update ..."
+msgstr ""
+
+msgid "Initializing relations to update ..."
+msgstr ""
+
+msgid "Settings"
+msgstr ""
+
+msgid "Decide how to upload the data and which changeset to use"
+msgstr ""
+
+msgid "Tags of new changeset"
+msgstr ""
+
+msgid "Apply tags to the changeset data is uploaded to"
+msgstr ""
+
+msgid "Manage open changesets and select a changeset to upload to"
+msgstr ""
+
+msgid "Configure advanced settings"
+msgstr ""
+
+msgid "Upload to ''{0}''"
+msgstr ""
+
+msgid "Upload Changes"
+msgstr ""
+
+msgid "Upload the changed primitives"
+msgstr ""
+
+msgid "Please revise upload comment"
+msgstr ""
+
+msgid ""
+"Your upload comment is <i>empty</i>, or <i>very short</i>.<br /><br />This "
+"is technically allowed, but please consider that many users who are<br "
+"/>watching changes in their area depend on meaningful changeset comments<br "
+"/>to understand what is going on!<br /><br />If you spend a minute now to "
+"explain your change, you will make life<br />easier for many other mappers."
+msgstr ""
+
+msgid "Please specify a changeset source"
+msgstr ""
+
+msgid ""
+"You did not specify a source for your changes.<br />It is technically "
+"allowed, but this information helps<br />other users to understand the "
+"origins of the data.<br /><br />If you spend a minute now to explain your "
+"change, you will make life<br />easier for many other mappers."
+msgstr ""
+
+msgid "Revise"
+msgstr ""
+
+msgid "Continue as is"
+msgstr ""
+
+msgid "Return to the previous dialog to enter a more descriptive comment"
+msgstr ""
+
+msgid "Cancel and return to the previous dialog"
+msgstr ""
+
+msgid "Please enter a valid chunk size first"
+msgstr ""
+
+msgid "Illegal chunk size"
+msgstr ""
+
+msgid "{0}={1}"
+msgstr "{0}={1}"
+
+msgid ""
+"<html>The following changeset tag contains an empty "
+"key/value:<br>{0}<br>Continue?</html>"
+msgid_plural ""
+"<html>The following changeset tags contain an empty "
+"key/value:<br>{0}<br>Continue?</html>"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Empty metadata"
+msgstr ""
+
+msgid "Cancel the upload and resume editing"
+msgstr ""
+
+msgid "Tags of changeset {0}"
+msgstr ""
+
+msgid ""
+"Object ''{0}'' is already deleted on the server. Skipping this object and "
+"retrying to upload."
+msgstr ""
+
+msgid "Preparing objects to upload ..."
+msgstr ""
+
+msgid "Objects are uploaded to a <strong>new changeset</strong>."
+msgstr ""
+
+msgid ""
+"Objects are uploaded to the <strong>open changeset</strong> {0} with upload "
+"comment ''{1}''."
+msgstr ""
+
+msgid ""
+"The changeset is going to be <strong>closed</strong> after this upload"
+msgstr ""
+
+msgid "The changeset is <strong>left open</strong> after this upload"
+msgstr ""
+
+msgid "configure changeset"
+msgstr ""
+
+msgid "Uploading <strong>{0} object</strong> to <strong>1 changeset</strong>"
+msgid_plural ""
+"Uploading <strong>{0} objects</strong> to <strong>1 changeset</strong>"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"Uploading <strong>{0} object</strong> to <strong>1 changeset</strong> using "
+"<strong>1 request</strong>"
+msgid_plural ""
+"Uploading <strong>{0} objects</strong> to <strong>1 changeset</strong> using "
+"<strong>1 request</strong>"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"Uploading <strong>{0} objects</strong> to <strong>1 changeset</strong> using "
+"<strong>{1} requests</strong>"
+msgstr ""
+
+msgid "advanced configuration"
+msgstr ""
+
+msgid ""
+"{0} objects exceed the max. allowed {1} objects in a changeset on the server "
+"''{2}''. Please <a href=\"urn:advanced-configuration\">configure</a> how to "
+"proceed with <strong>multiple changesets</strong>"
+msgstr ""
+
+msgid ""
+"Uploading <strong>{0} objects</strong> to <strong>multiple "
+"changesets</strong> using <strong>{1} requests</strong>"
+msgstr ""
+
+msgid "Uploading data for layer ''{0}''"
+msgstr ""
+
+msgid "Continue uploading"
+msgstr ""
+
+msgid "Click to continue uploading to additional new changesets"
+msgstr ""
+
+msgid "Go back to Upload Dialog"
+msgstr ""
+
+msgid "Click to return to the Upload Dialog"
+msgstr ""
+
+msgid "Abort"
+msgstr ""
+
+msgid "Click to abort uploading"
+msgstr ""
+
+msgid ""
+"The server reported that the current changeset was closed.<br>This is most "
+"likely because the changesets size exceeded the max. size<br>of {0} objects "
+"on the server ''{1}''."
+msgstr ""
+
+msgid "There is {0} object left to upload."
+msgid_plural "There are {0} objects left to upload."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"Click ''<strong>{0}</strong>'' to continue uploading to additional new "
+"changesets.<br>Click ''<strong>{1}</strong>'' to return to the upload "
+"dialog.<br>Click ''<strong>{2}</strong>'' to abort uploading and return to "
+"map editing.<br>"
+msgstr ""
+
+msgid "Changeset is full"
+msgstr ""
+
+msgid "Node ''{0}'' is already deleted. Skipping object in upload."
+msgstr ""
+
+msgid "Way ''{0}'' is already deleted. Skipping object in upload."
+msgstr ""
+
+msgid "Relation ''{0}'' is already deleted. Skipping object in upload."
+msgstr ""
+
+msgid "Object ''{0}'' is already deleted. Skipping object in upload."
+msgstr ""
+
+msgid "Uploading {0} object..."
+msgid_plural "Uploading {0} objects..."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"Ignoring caught exception because upload is canceled. Exception is: {0}"
+msgstr ""
+
+msgid "Upload successful!"
+msgstr ""
+
+msgid ""
+"<html>Mark modified objects <strong>from the current selection</strong> to "
+"be uploaded to the server.</html>"
+msgstr ""
+
+msgid ""
+"<html>Mark <strong>locally deleted objects</strong> to be deleted on the "
+"server.</html>"
+msgstr ""
+
+msgid "Select objects to upload"
+msgstr ""
+
+msgid "Cancel uploading"
+msgstr ""
+
+msgid "Unexpected value for key ''{0}'' in preferences, got ''{1}''"
+msgstr ""
+
+msgid "Please select the upload strategy:"
+msgstr ""
+
+msgid "Upload data in one request"
+msgstr ""
+
+msgid "Upload data in chunks of objects. Chunk size: "
+msgstr ""
+
+msgid "Upload each object individually"
+msgstr ""
+
+msgid ""
+"<html>There are <strong>multiple changesets</strong> necessary in order to "
+"upload {0} objects. Which strategy do you want to use?</html>"
+msgstr ""
+
+msgid "Fill up one changeset and return to the Upload Dialog"
+msgstr ""
+
+msgid "Open and use as many new changesets as necessary"
+msgstr ""
+
+msgid "Upload in one request not possible (too many objects to upload)"
+msgstr ""
+
+msgid ""
+"<html>Cannot upload {0} objects in one request because the<br>max. changeset "
+"size {1} on server ''{2}'' is exceeded.</html>"
+msgstr ""
+
+msgid "(1 request)"
+msgstr ""
+
+msgid "(# requests unknown)"
+msgstr ""
+
+msgid "({0} request)"
+msgid_plural "({0} requests)"
+msgstr[0] "({0} विनंती)"
+msgstr[1] "({0} विनंत्या)"
+
+msgid "Illegal chunk size <= 0. Please enter an integer > 1"
+msgstr ""
+
+msgid "Chunk size {0} exceeds max. changeset size {1} for server ''{2}''"
+msgstr ""
+
+msgid "Please enter an integer > 1"
+msgstr ""
+
+msgid "Value ''{0}'' is not a number. Please enter an integer > 1"
+msgstr ""
+
+msgid "Objects to add:"
+msgstr ""
+
+msgid "Objects to modify:"
+msgstr ""
+
+msgid "Objects to delete:"
+msgstr ""
+
+msgid "{0} object to add:"
+msgid_plural "{0} objects to add:"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "{0} object to modify:"
+msgid_plural "{0} objects to modify:"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "{0} object to delete:"
+msgid_plural "{0} objects to delete:"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr ""
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr "WMS संचिका साठवा"
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr "तपशील..."
+
+msgid "Hide this message and never show it again"
+msgstr "हा संदेश लपवा आणि तो पुन्हा दाखवू नका"
+
+msgid "Customize Color"
+msgstr ""
+
+msgid "Default"
+msgstr ""
+
+msgid "Choose a color"
+msgstr ""
+
+msgid "Name: {0}"
+msgstr "नाव: {0}"
+
+msgid "Description: {0}"
+msgstr "वर्णन: {0}"
+
+msgid "{0} track"
+msgid_plural "{0} tracks"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Description"
+msgstr "वर्णन"
+
+msgid "Timespan"
+msgstr ""
+
+msgid "Length"
+msgstr "लांबी"
+
+msgid "Length: {0}"
+msgstr "लांबी: {0}"
+
+msgid "{0} route, "
+msgid_plural "{0} routes, "
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "{0} waypoint"
+msgid_plural "{0} waypoints"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "{0} track, "
+msgid_plural "{0} tracks, "
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Save GPX file"
+msgstr "GPX संचिका साठवा"
+
+msgid "Imagery fade"
+msgstr ""
+
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
+msgid "ERROR"
+msgstr ""
+
+msgid "Next marker"
+msgstr ""
+
+msgid "Jump to next marker"
+msgstr ""
+
+msgid "Previous marker"
+msgstr ""
+
+msgid "Jump to previous marker"
+msgstr ""
+
+msgid "All projections are supported"
+msgstr ""
+
+msgid ""
+"The layer {0} does not support the new projection {1}.\n"
+"Supported projections are: {2}\n"
+"Change the projection again or remove the layer."
+msgstr ""
+
+msgid "Save Layer"
+msgstr "थर साठवा"
+
+msgid "Note"
+msgstr ""
+
+msgid "Notes layer"
+msgstr ""
+
+msgid "Total notes:"
+msgstr ""
+
+msgid "Changes need uploading?"
+msgstr ""
+
+msgid "Data Layer {0}"
+msgstr ""
+
+msgid "outside downloaded area"
+msgstr ""
+
+msgid "Merging layers"
+msgstr ""
+
+msgid "{0} deleted"
+msgid_plural "{0} deleted"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "{0} consists of:"
+msgstr ""
+
+msgid "unset"
+msgstr ""
+
+msgid "API version: {0}"
+msgstr "API आवृत्ती: {0}"
+
+msgid "Upload is discouraged"
+msgstr ""
+
+msgid "Convert to GPX layer"
+msgstr ""
+
+msgid "Converted from: {0}"
+msgstr ""
+
+msgid "Dataset consistency test"
+msgstr ""
+
+msgid "No problems found"
+msgstr ""
+
+msgid "Following problems found:"
+msgstr ""
+
+msgid "Empty document"
+msgstr ""
+
+msgid "Save anyway"
+msgstr ""
+
+msgid "The document contains no data."
+msgstr ""
+
+msgid "Conflicts"
+msgstr ""
+
+msgid "Reject Conflicts and Save"
+msgstr ""
+
+msgid ""
+"There are unresolved conflicts. Conflicts will not be saved and handled as "
+"if you rejected all. Continue?"
+msgstr ""
+
+msgid "Save OSM file"
+msgstr "OSM संचिका साठवा"
+
+msgid "EPSG:4326 and Mercator projection are supported"
+msgstr ""
+
+msgid "Validation errors"
+msgstr ""
+
+msgid "No validation errors"
+msgstr ""
+
+msgid "Set WMS Bookmark"
+msgstr ""
+
+msgid ""
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
+msgstr ""
+
+msgid "Correlate to GPX"
+msgstr ""
+
+msgid "Invalid timezone"
+msgstr ""
+
+msgid "Invalid offset"
+msgstr ""
+
+msgid "Correlate images with GPX track"
+msgstr ""
+
+msgid "Try Again"
+msgstr "पुन्हा प्रयत्न करा"
+
+msgid "No images could be matched!"
+msgstr ""
+
+msgid "GPX Files (*.gpx *.gpx.gz)"
+msgstr "GPX संचिका (*.gpx *.gpx.gz)"
+
+msgid "File {0} is loaded yet under the name \"{1}\""
+msgstr ""
+
+msgid "Error while parsing {0}"
+msgstr ""
+
+msgid "Could not read \"{0}\""
+msgstr ""
+
+msgid ""
+"<html>Take a photo of your GPS receiver while it displays the "
+"time.<br>Display that photo here.<br>And then, simply capture the time you "
+"read on the photo and select a timezone<hr></html>"
+msgstr ""
+
+msgid "Photo time (from exif):"
+msgstr ""
+
+msgid "Gps time (read from the above photo): "
+msgstr ""
+
+msgid "I am in the timezone of: "
+msgstr ""
+
+msgid "No date"
+msgstr ""
+
+msgid "Open another photo"
+msgstr ""
+
+msgid "Synchronize time from a photo of the GPS receiver"
+msgstr ""
+
+msgid ""
+"Error while parsing the date.\n"
+"Please use the requested format"
+msgstr ""
+
+msgid "Invalid date"
+msgstr ""
+
+msgid "<No GPX track loaded yet>"
+msgstr ""
+
+msgid "GPX track: "
+msgstr ""
+
+msgid "Open another GPX trace"
+msgstr ""
+
+msgid ""
+"<html>Use photo of an accurate clock,<br>e.g. GPS receiver display</html>"
+msgstr ""
+
+msgid "Auto-Guess"
+msgstr ""
+
+msgid "Matches first photo with first gpx point"
+msgstr ""
+
+msgid "Manual adjust"
+msgstr ""
+
+msgid "Override position for: "
+msgstr ""
+
+msgid "Images with geo location in exif data ({0}/{1})"
+msgstr ""
+
+msgid "Images that are already tagged ({0}/{1})"
+msgstr ""
+
+msgid "Show Thumbnail images on the map"
+msgstr ""
+
+msgid "Timezone: "
+msgstr ""
+
+msgid "Offset:"
+msgstr ""
+
+msgid "Correlate"
+msgstr ""
+
+msgid "No gpx selected"
+msgstr ""
+
+msgid "<html>Matched <b>{0}</b> of <b>{1}</b> photo to GPX track.</html>"
+msgid_plural ""
+"<html>Matched <b>{0}</b> of <b>{1}</b> photos to GPX track.</html>"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Timezone: {0}"
+msgstr ""
+
+msgid "Minutes: {0}"
+msgstr "मिनिटे: {0}"
+
+msgid "Seconds: {0}"
+msgstr "सेकंद: {0}"
+
+msgid "(Time difference of {0} day)"
+msgid_plural "Time difference of {0} days"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"An error occurred while trying to match the photos to the GPX track. You can "
+"adjust the sliders to manually match the photos."
+msgstr ""
+
+msgid "Matching photos to track failed"
+msgstr ""
+
+msgid "Adjust timezone and offset"
+msgstr ""
+
+msgid "The selected photos do not contain time information."
+msgstr ""
+
+msgid "Photos do not contain time information"
+msgstr ""
+
+msgid ""
+"The selected GPX track does not contain timestamps. Please select another "
+"one."
+msgstr ""
+
+msgid "GPX Track has no time information"
+msgstr ""
+
+msgid "You should select a GPX track"
+msgstr ""
+
+msgid "No selected GPX track"
+msgstr ""
+
+msgid ""
+"Error while parsing timezone.\n"
+"Expected format: {0}"
+msgstr ""
+
+msgid ""
+"Error while parsing offset.\n"
+"Expected format: {0}"
+msgstr ""
+
+msgid "Extracting GPS locations from EXIF"
+msgstr ""
+
+msgid "Starting directory scan"
+msgstr ""
+
+msgid "Read photos..."
+msgstr ""
+
+msgid "Reading {0}..."
+msgstr ""
+
+msgid "Unable to get canonical path for directory {0}\n"
+msgstr ""
+
+msgid "Scanning directory {0}"
+msgstr ""
+
+msgid "Error while getting files from directory {0}\n"
+msgstr ""
+
+msgid "One of the selected files was null"
+msgstr ""
+
+msgid "Geotagged Images"
+msgstr ""
+
+msgid "{0} image loaded."
+msgid_plural "{0} images loaded."
+msgstr[0] "{0} प्रतिमा लादली."
+msgstr[1] "{0} प्रतिमा लादल्या."
+
+msgid "{0} was found to be GPS tagged."
+msgid_plural "{0} were found to be GPS tagged."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "{0} has updated GPS data."
+msgid_plural "{0} have updated GPS data."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete image file from disk"
+msgstr ""
+
+msgid ""
+"<html><h3>Delete the file {0} from disk?<p>The image file will be "
+"permanently lost!</h3></html>"
+msgstr ""
+
+msgid "Image file could not be deleted."
+msgstr ""
+
+msgid "No image"
+msgstr ""
+
+msgid "Loading {0}"
+msgstr ""
+
+msgid "Error on file {0}"
+msgstr ""
+
+msgid "Display geotagged images"
+msgstr ""
+
+msgid "Previous"
+msgstr "मागील"
+
+msgid "Show previous Image"
+msgstr "मागील प्रतिमा दाखवा"
+
+msgid "Geoimage: {0}"
+msgstr ""
+
+msgid "Remove photo from layer"
+msgstr ""
+
+msgid "Delete File from disk"
+msgstr ""
+
+msgid "Copy image path"
+msgstr ""
+
+msgid "Next"
+msgstr "पुढील"
+
+msgid "Show next Image"
+msgstr "पुढील प्रतिमा दाखवा"
+
+msgid "Show first Image"
+msgstr "प्रथम प्रतिमा दाखवा"
+
+msgid "Show last Image"
+msgstr "अंतिम प्रतिमा दाखवा"
+
+msgid "Center view"
+msgstr ""
+
+msgid "Zoom best fit and 1:1"
+msgstr ""
+
+msgid "Move dialog to the side pane"
+msgstr ""
+
+msgid ""
+"\n"
+"Altitude: {0} m"
+msgstr ""
+"\n"
+"उंची: {0} मी"
+
+msgid ""
+"\n"
+"Speed: {0} km/h"
+msgstr ""
+"\n"
+"वेग: {0} किमी ताशी"
+
+msgid ""
+"\n"
+"Direction {0}°"
+msgstr ""
+"\n"
+"दिशा {0}°"
+
+msgid ""
+"\n"
+"EXIF time: {0}"
+msgstr ""
+"\n"
+"EXIF वेळ: {0}"
+
+msgid ""
+"\n"
+"GPS time: {0}"
+msgstr ""
+"\n"
+"GPS वेळ: {0}"
+
+msgid "Show thumbnails"
+msgstr ""
+
+msgid "Show image thumbnails instead of icons."
+msgstr ""
+
+msgid "Choose visible tracks"
+msgstr ""
+
+msgid "Select by date"
+msgstr "दिनांकानुसार निवडा"
+
+msgid ""
+"<html>Select all tracks that you want to be displayed. You can drag select a "
+"range of tracks or use CTRL+Click to select specific ones. The map is "
+"updated live in the background. Open the URLs by double clicking them.</html>"
+msgstr ""
+
+msgid "Set track visibility for {0}"
+msgstr ""
+
+msgid "Show all"
+msgstr "सर्व दाखवा"
+
+msgid "Show selected only"
+msgstr "केवळ निवडलेले दाखवा"
+
+msgid "Convert to data layer"
+msgstr ""
+
+msgid ""
+"<html>Upload of unprocessed GPS data as map data is considered "
+"harmful.<br>If you want to upload traces, look here:</html>"
+msgstr ""
+
+msgid "Customize track drawing"
+msgstr ""
+
+msgid "From"
+msgstr "पासून"
+
+msgid "To"
+msgstr "पर्यंत"
+
+msgid "No timestamp"
+msgstr ""
+
+msgid "Select to download OSM data."
+msgstr ""
+
+msgid "Select to download GPS traces."
+msgstr ""
+
+msgid "Download everything within:"
+msgstr ""
+
+msgid "meters"
+msgstr "मीटर"
+
+msgid "Maximum area per request:"
+msgstr "दर विनंतीसाठी कमाल क्षेत्रफळ:"
+
+msgid "Download near:"
+msgstr ""
+
+msgid "track only"
+msgstr ""
+
+msgid "waypoints only"
+msgstr ""
+
+msgid "track and waypoints"
+msgstr ""
+
+msgid "Click to download"
+msgstr ""
+
+msgid "Click to cancel"
+msgstr ""
+
+msgid "Download from OSM along this track"
+msgstr ""
+
+msgid "Calculating Download Area"
+msgstr ""
+
+msgid "Precache imagery tiles along this track"
+msgstr ""
+
+msgid "Precaching WMS"
+msgstr ""
+
+msgid "Please select the imagery layer."
+msgstr ""
+
+msgid "Select imagery layer"
+msgstr ""
+
+msgid "There are no imagery layers."
+msgstr ""
+
+msgid "No imagery layers"
+msgstr ""
+
+msgid "Velocity, km/h"
+msgstr ""
+
+msgid "HDOP, m"
+msgstr ""
+
+msgid "Time"
+msgstr "वेळ"
+
+msgid "Direction"
+msgstr "दिशा"
+
+msgid "gps point"
+msgstr ""
+
+msgid "Import Audio"
+msgstr ""
+
+msgid ""
+"<html>The data in the GPX layer ''{0}'' has been downloaded from the "
+"server.<br>Because its way points do not include a timestamp we cannot "
+"correlate them with audio data.</html>"
+msgstr ""
+
+msgid "Import not possible"
+msgstr "आयात अशक्य"
+
+msgid "Wave Audio files (*.wav)"
+msgstr ""
+
+msgid "Audio markers from {0}"
+msgstr ""
+
+msgid "No GPX track available in layer to associate audio with."
+msgstr ""
+
+msgid ""
+"Some waypoints with timestamps from before the start of the track or after "
+"the end were omitted or moved to the start."
+msgstr ""
+
+msgid ""
+"Some waypoints which were too far from the track to sensibly estimate their "
+"time were omitted."
+msgstr ""
+
+msgid "Import images"
+msgstr ""
+
+msgid ""
+"<html>The data in the GPX layer ''{0}'' has been downloaded from the "
+"server.<br>Because its way points do not include a timestamp we cannot "
+"correlate them with images.</html>"
+msgstr ""
+
+msgid "Markers From Named Points"
+msgstr ""
+
+msgid "Named Trackpoints from {0}"
+msgstr ""
+
+msgid "gps marker"
+msgstr ""
+
+msgid "marker"
+msgid_plural "markers"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "{0} consists of {1} marker"
+msgid_plural "{0} consists of {1} markers"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "No existing audio markers in this layer to offset from."
+msgstr ""
+
+msgid "Show Text/Icons"
+msgstr ""
+
+msgid "Toggle visible state of the marker text and icons."
+msgstr ""
+
+msgid "Synchronize Audio"
+msgstr ""
+
+msgid ""
+"You need to pause audio at the moment when you hear your synchronization cue."
+msgstr ""
+
+msgid "Audio synchronized at point {0}."
+msgstr ""
+
+msgid "Unable to synchronize in layer being played."
+msgstr ""
+
+msgid "Make Audio Marker at Play Head"
+msgstr ""
+
+msgid ""
+"You need to have paused audio at the point on the track where you want the "
+"marker."
+msgstr ""
+
+msgid ""
+"You need to drag the play head near to the GPX track whose associated sound "
+"track you were playing (after the first marker)."
+msgstr ""
+
+msgid ""
+"You need to SHIFT-drag the play head onto an audio marker or onto the track "
+"point where you want to synchronize."
+msgstr ""
+
+msgid "Unable to create new audio marker."
+msgstr ""
+
+msgid "There was an error while trying to display the URL for this marker"
+msgstr ""
+
+msgid "(URL was: "
+msgstr "(URL होती: "
+
+msgid "Select the map painting styles"
+msgstr "नकाशासाठी रंगशैली निवडा"
+
+msgid "Failed to load Mappaint styles from ''{0}''. Exception was: {1}"
+msgstr ""
+
+msgid "loading style ''{0}''..."
+msgstr "शैली ''{0}'' लादत आहे..."
+
+msgid ""
+"There was an error when loading this style. Select ''Info'' from the right "
+"click menu for details."
+msgid_plural ""
+"There were {0} errors when loading this style. Select ''Info'' from the "
+"right click menu for details."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
+msgstr ""
+
+msgid ""
+"Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
+"''{2}'' instead."
+msgstr ""
+
+msgid "Illegal dash pattern, values must be positive"
+msgstr ""
+
+msgid "Illegal dash pattern, at least one value must be > 0"
+msgstr ""
+
+msgid ""
+"Failed to parse Mappaint styles from ''{0}''. Error was: [{1}:{2}] {3}"
+msgstr ""
+
+msgid "Access Token Key:"
+msgstr ""
+
+msgid "Access Token Secret:"
+msgstr ""
+
+msgid "Save Access Token in preferences"
+msgstr ""
+
+msgid ""
+"<html>Select to save the Access Token in the JOSM preferences.<br>Unselect "
+"to use the Access Token in this JOSM session only.</html>"
+msgstr ""
+
+msgid "Use default settings"
+msgstr ""
+
+msgid "Consumer Key:"
+msgstr ""
+
+msgid "Consumer Secret:"
+msgstr ""
+
+msgid "Request Token URL:"
+msgstr ""
+
+msgid "Access Token URL:"
+msgstr ""
+
+msgid "Authorize URL:"
+msgstr ""
+
+msgid "Click to reset the OAuth settings to default values"
+msgstr ""
+
+msgid "Click to abort resetting to the OAuth default values"
+msgstr ""
+
+msgid ""
+"<html>JOSM is about to reset the OAuth settings to default values.<br>The "
+"current custom settings are not saved.</html>"
+msgstr ""
+
+msgid "Overwrite custom OAuth settings?"
+msgstr ""
+
+msgid "Fully automatic"
+msgstr "पूर्णस्वयंचलित"
+
+msgid "Semi-automatic"
+msgstr "अर्धस्वयंचलित"
+
+msgid "Manual"
+msgstr ""
+
+msgid ""
+"<html>Run a fully automatic procedure to get an access token from the OSM "
+"website.<br>JOSM accesses the OSM website on behalf of the JOSM user and "
+"fully<br>automatically authorizes the user and retrieves an Access "
+"Token.</html>"
+msgstr ""
+
+msgid ""
+"<html>Run a semi-automatic procedure to get an access token from the OSM "
+"website.<br>JOSM submits the standards OAuth requests to get a Request Token "
+"and an<br>Access Token. It dispatches the user to the OSM website in an "
+"external browser<br>to authenticate itself and to accept the request token "
+"submitted by JOSM.</html>"
+msgstr ""
+
+msgid ""
+"<html>Enter an Access Token manually if it was generated and retrieved "
+"outside<br>of JOSM.</html>"
+msgstr ""
+
+msgid ""
+"Please enter your OSM user name and password. The password will "
+"<strong>not</strong> be saved in clear text in the JOSM preferences and it "
+"will be submitted to the OSM server <strong>only once</strong>. Subsequent "
+"data upload requests don''t use your password any more."
+msgstr ""
+
+msgid "Username: "
+msgstr ""
+
+msgid "Password: "
+msgstr "परवलीचा शब्द: "
+
+msgid ""
+"<strong>Warning:</strong> JOSM does login <strong>once</strong> using a "
+"secure connection."
+msgstr ""
+
+msgid "Granted rights"
+msgstr ""
+
+msgid "Advanced OAuth properties"
+msgstr ""
+
+msgid "Accept Access Token"
+msgstr ""
+
+msgid ""
+"<html>You have successfully retrieved an OAuth Access Token from the OSM "
+"website. Click on <strong>{0}</strong> to accept the token. JOSM will use it "
+"in subsequent requests to gain access to the OSM API.</html>"
+msgstr ""
+
+msgid "Authorize now"
+msgstr ""
+
+msgid "Click to redirect you to the authorization form on the JOSM web site"
+msgstr ""
+
+msgid "Back"
+msgstr "मागे"
+
+msgid "Run the automatic authorization steps again"
+msgstr ""
+
+msgid "Test Access Token"
+msgstr ""
+
+msgid "Please enter your OSM user name"
+msgstr ""
+
+msgid "The user name cannot be empty. Please enter your OSM user name"
+msgstr ""
+
+msgid "Please enter your OSM password"
+msgstr ""
+
+msgid "The password cannot be empty. Please enter your OSM password"
+msgstr ""
+
+msgid "Authorize JOSM to access the OSM API"
+msgstr ""
+
+msgid ""
+"<html>The automatic process for retrieving an OAuth Access Token<br>from the "
+"OSM server failed.<br><br>Please try again or choose another kind of "
+"authorization process,<br>i.e. semi-automatic or manual authorization.</html>"
+msgstr ""
+
+msgid "OAuth authorization failed"
+msgstr ""
+
+msgid ""
+"<html>The automatic process for retrieving an OAuth Access Token<br>from the "
+"OSM server failed because JOSM was not able to build<br>a valid login URL "
+"from the OAuth Authorize Endpoint URL ''{0}''.<br><br>Please check your "
+"advanced setting and try again.</html>"
+msgstr ""
+
+msgid ""
+"<html>The automatic process for retrieving an OAuth Access Token<br>from the "
+"OSM server failed. JOSM failed to log into {0}<br>for user "
+"{1}.<br><br>Please check username and password and try again.</html>"
+msgstr ""
+
+msgid ""
+"Please enter an OAuth Access Token which is authorized to access the OSM "
+"server ''{0}''."
+msgstr ""
+
+msgid "Access Token"
+msgstr ""
+
+msgid "Advanced OAuth parameters"
+msgstr ""
+
+msgid "Enter the OAuth Access Token"
+msgstr ""
+
+msgid "Enter advanced OAuth properties"
+msgstr ""
+
+msgid ""
+"<html><body>Please enter an OAuth Access Token which is authorized to access "
+"the OSM server ''{0}''.</body></html>"
+msgstr ""
+
+msgid "Please enter an Access Token Key"
+msgstr ""
+
+msgid ""
+"The Access Token Key must not be empty. Please enter an Access Token Key"
+msgstr ""
+
+msgid "Please enter an Access Token Secret"
+msgstr ""
+
+msgid ""
+"The Access Token Secret must not be empty. Please enter an Access Token "
+"Secret"
+msgstr ""
+
+msgid "Click to test the Access Token"
+msgstr ""
+
+msgid ""
+"With OAuth you grant JOSM the right to upload map data and GPS tracks on "
+"your behalf (<a href=\"{0}\">more info...</a>)."
+msgstr ""
+
+msgid "Please select an authorization procedure: "
+msgstr ""
+
+msgid "Get an Access Token for ''{0}''"
+msgstr ""
+
+msgid "Close the dialog and cancel authorization"
+msgstr ""
+
+msgid "Close the dialog and accept the Access Token"
+msgstr ""
+
+msgid "Failed to cancel running OAuth operation"
+msgstr ""
+
+msgid "Retrieving OAuth Request Token from ''{0}''"
+msgstr ""
+
+msgid "Retrieving OAuth Access Token from ''{0}''"
+msgstr ""
+
+msgid "OSM website did not return a session cookie in response to ''{0}'',"
+msgstr ""
+
+msgid ""
+"Failed to authenticate user ''{0}'' with password ''***'' as OAuth user"
+msgstr ""
+
+msgid "Failed to authorize OAuth request  ''{0}''"
+msgstr ""
+
+msgid "Authorizing OAuth Request token ''{0}'' at the OSM website ..."
+msgstr ""
+
+msgid "Initializing a session at the OSM website..."
+msgstr ""
+
+msgid "Authenticating the session for user ''{0}''..."
+msgstr ""
+
+msgid "Authorizing request token ''{0}''..."
+msgstr ""
+
+msgid "Logging out session ''{0}''..."
+msgstr ""
+
+msgid "Allow to upload map data"
+msgstr ""
+
+msgid "Select to grant JOSM the right to upload map data on your behalf"
+msgstr ""
+
+msgid "Allow to upload GPS traces"
+msgstr ""
+
+msgid "Select to grant JOSM the right to upload GPS traces on your behalf"
+msgstr ""
+
+msgid "Allow to download your private GPS traces"
+msgstr ""
+
+msgid ""
+"Select to grant JOSM the right to download your private GPS traces into JOSM "
+"layers"
+msgstr ""
+
+msgid "Allow to read your preferences"
+msgstr ""
+
+msgid "Select to grant JOSM the right to read your server preferences"
+msgstr ""
+
+msgid "Allow to write your preferences"
+msgstr ""
+
+msgid "Select to grant JOSM the right to write your server preferences"
+msgstr ""
+
+msgid "Allow modifications of notes"
+msgstr ""
+
+msgid "Select to grant JOSM the right to modify notes on your behalf"
+msgstr ""
+
+msgid "Retrieving OAuth Access Token..."
+msgstr ""
+
+msgid "<html>Retrieving an OAuth Access Token from ''{0}'' failed.</html>"
+msgstr ""
+
+msgid "Request Failed"
+msgstr "विनंती अपयशी"
+
+msgid "Retrieving OAuth Request Token..."
+msgstr ""
+
+msgid "<html>Retrieving an OAuth Request Token from ''{0}'' failed.</html>"
+msgstr ""
+
+msgid "Display Advanced OAuth Parameters"
+msgstr ""
+
+msgid "Retrieve Request Token"
+msgstr ""
+
+msgid ""
+"<html>Please click on <strong>{0}</strong> to retrieve an OAuth Request "
+"Token from ''{1}''.</html>"
+msgstr ""
+
+msgid "<html>Step 1/3: Retrieve an OAuth Request Token</html>"
+msgstr ""
+
+msgid "<html>Step 2/3: Authorize and retrieve an Access Token</html>"
+msgstr ""
+
+msgid "Request Access Token"
+msgstr ""
+
+msgid ""
+"<html>JOSM successfully retrieved a Request Token. JOSM is now launching an "
+"authorization page in an external browser. Please login with your OSM "
+"username and password and follow the instructions to authorize the Request "
+"Token. Then switch back to this dialog and click on "
+"<strong>{0}</strong><br><br>If launching the external browser fails you can "
+"copy the following authorize URL and paste it into the address field of your "
+"browser.</html>"
+msgstr ""
+
+msgid "Go back to step 1/3"
+msgstr ""
+
+msgid "<html>Step 3/3: Successfully retrieved an Access Token</html>"
+msgstr ""
+
+msgid ""
+"<html>JOSM has successfully retrieved an Access Token. You can now accept "
+"this token. JOSM will use it in the future for authentication and "
+"authorization to the OSM server.<br><br>The access token is: </html>"
+msgstr ""
+
+msgid "Click to retrieve a Request Token"
+msgstr ""
+
+msgid "Retrieve Access Token"
+msgstr ""
+
+msgid "Click to retrieve an Access Token"
+msgstr ""
+
+msgid "Testing OAuth Access Token"
+msgstr ""
+
+msgid "Retrieving user details with Access Token Key ''{0}'' was rejected."
+msgstr ""
+
+msgid "Retrieving user details with Access Token Key ''{0}'' was forbidden."
+msgstr ""
+
+msgid ""
+"<html>Successfully used the Access Token ''{0}'' to<br>access the OSM server "
+"at ''{1}''.<br>You are accessing the OSM server as user ''{2}'' with id "
+"''{3}''.</html>"
+msgstr ""
+
+msgid "Success"
+msgstr "यशस्वी"
+
+msgid ""
+"<html>Failed to access the OSM server ''{0}''<br>with the Access Token "
+"''{1}''.<br>The server rejected the Access Token as unauthorized. You will "
+"not<br>be able to access any protected resource on this server using this "
+"token.</html>"
+msgstr ""
+
+msgid "Test failed"
+msgstr ""
+
+msgid ""
+"<html>The Access Token ''{1}'' is known to the OSM server ''{0}''.<br>The "
+"test to retrieve the user details for this token failed, "
+"though.<br>Depending on what rights are granted to this token you may "
+"nevertheless use it<br>to upload data, upload GPS traces, and/or access "
+"other protected resources.</html>"
+msgstr ""
+
+msgid "Token allows restricted access"
+msgstr ""
+
+msgid ""
+"<html>Failed to retrieve information about the current user from the OSM "
+"server ''{0}''.<br>This is probably not a problem caused by the tested "
+"Access Token, but<br>rather a problem with the server configuration. "
+"Carefully check the server<br>URL and your Internet connection.</html>"
+msgstr ""
+
+msgid ""
+"<html>Failed to sign the request for the OSM server ''{0}'' with the token "
+"''{1}''.<br>The token ist probably invalid.</html>"
+msgstr ""
+
+msgid ""
+"<html>The test failed because the server responded with an internal "
+"error.<br>JOSM could not decide whether the token is valid. Please try again "
+"later.</html>"
+msgstr ""
+
+msgid "Retrieving user info..."
+msgstr ""
+
+msgid "Expert mode"
+msgstr ""
+
+msgid "Close the preferences dialog and discard preference updates"
+msgstr ""
+
+msgid "Save the preferences and close the dialog"
+msgstr ""
+
+msgid "You have to restart JOSM for some settings to take effect."
+msgstr ""
+
+msgid "Would you like to restart now?"
+msgstr ""
+
+msgid "Download plugins"
+msgstr ""
+
+msgid "Icon paths:"
+msgstr ""
+
+msgid "Short Description:"
+msgstr ""
+
+msgid "Author:"
+msgstr ""
+
+msgid "Webpage:"
+msgstr ""
+
+msgid "Description:"
+msgstr "वर्णन:"
+
+msgid "Version:"
+msgstr "आवृत्ती:"
+
+msgid "Minimum JOSM Version:"
+msgstr "किमान JOSM आवृत्ती:"
+
+msgid "by {0}"
+msgstr ""
+
+msgid "Name (optional):"
+msgstr ""
+
+msgid "URL / File:"
+msgstr "URL / संचिका:"
+
+msgid "active"
+msgstr ""
+
+msgid "Map paint style file (*.xml, *.mapcss, *.zip)"
+msgstr ""
+
+msgid "Preset definition file (*.xml, *.zip)"
+msgstr ""
+
+msgid "Tag checker rule (*.validator.mapcss, *.zip)"
+msgstr ""
+
+msgid "Edit source entry:"
+msgstr "स्रोत नोंद संपादा:"
+
+msgid "Entry ''{0}'' requires JOSM Version {1}. (Currently running: {2})"
+msgstr ""
+"''{0}'' ह्या नोंदीसाठी JOSM आवृत्ती {1} आवश्यक आहे. (सध्याची आवृत्ती: {2})"
+
+msgid "Continue anyway"
+msgstr ""
+
+msgid "Ignore warning and install style anyway"
+msgstr ""
+
+msgid "Some entries have unmet dependencies:"
+msgstr ""
+
+msgid "Reset"
+msgstr ""
+
+msgid "Reset to default"
+msgstr ""
+
+msgid "Add a new icon path"
+msgstr ""
+
+msgid "Remove the selected icon paths"
+msgstr ""
+
+msgid "Edit the selected icon path"
+msgstr ""
+
+msgid "Tooltip"
+msgstr ""
+
+msgid "Icon"
+msgstr ""
+
+msgid "Remove from toolbar"
+msgstr ""
+
+msgid "Configure toolbar"
+msgstr ""
+
+msgid "Edit shortcut"
+msgstr ""
+
+msgid "Do not hide toolbar and menu"
+msgstr ""
+
+msgid "Actions"
+msgstr ""
+
+msgid "Toolbar customization"
+msgstr ""
+
+msgid "Customize the elements on the toolbar."
+msgstr ""
+
+msgid "Separator"
+msgstr ""
+
+msgid "Toolbar"
+msgstr ""
+
+msgid "Available"
+msgstr "उपलब्ध"
+
+msgid "Action parameters"
+msgstr ""
+
+msgid "Parameter name"
+msgstr ""
+
+msgid "Parameter value"
+msgstr ""
+
+msgid "Toolbar action without name: {0}"
+msgstr ""
+
+msgid "Strange toolbar value: {0}"
+msgstr ""
+
+msgid "Toolbar action {0} overwritten: {1} gets {2}"
+msgstr ""
+
+msgid "Registered toolbar action without name: {0}"
+msgstr ""
+
+msgid "Registered toolbar action {0} overwritten: {1} gets {2}"
+msgstr ""
+
+msgid "Toolbar: {0}"
+msgstr ""
+
+msgid "Advanced Preferences"
+msgstr ""
+
+msgid "Setting Preference entries directly. Use with caution!"
+msgstr ""
+
+msgid "Search: "
+msgstr "शोध: "
+
+msgid "Read from file"
+msgstr "संचिकेतून वाचा"
+
+msgid "Export selected items"
+msgstr ""
+
+msgid "JOSM custom settings files (*.xml)"
+msgstr ""
+
+msgid "Please select some preference keys not marked as default"
+msgstr ""
+
+msgid "Export preferences keys to JOSM customization file"
+msgstr ""
+
+msgid "What to do with preference lists when this file is to be imported?"
+msgstr ""
+
+msgid "Append preferences from file to existing values"
+msgstr ""
+
+msgid "Replace existing values"
+msgstr ""
+
+msgid "Open JOSM customization file"
+msgstr ""
+
+msgid "Import log"
+msgstr ""
+
+msgid ""
+"<html>Here is file import summary. <br/>You can reject preferences changes "
+"by pressing \"Cancel\" in preferences dialog <br/>To activate some changes "
+"JOSM restart may be needed.</html>"
+msgstr ""
+
+msgid "shortcut"
+msgstr ""
+
+msgid "color"
+msgstr "रंग"
+
+msgid "toolbar"
+msgstr ""
+
+msgid "imagery"
+msgstr ""
+
+msgid "Reset preferences"
+msgstr ""
+
+msgid ""
+"You are about to clear all preferences to their default values<br />All your "
+"settings will be deleted: plugins, imagery, filters, toolbar buttons, "
+"keyboard, etc. <br />Are you sure you want to continue?"
+msgstr ""
+
+msgid "Load profile"
+msgstr ""
+
+msgid "Save {0} profile"
+msgstr ""
+
+msgid "All the preferences of this group are default, nothing to save"
+msgstr ""
+
+msgid "Choose profile file"
+msgstr ""
+
+msgid "Change list setting"
+msgstr ""
+
+msgid "Key: {0}"
+msgstr ""
+
+msgid "Change list of lists setting"
+msgstr ""
+
+msgid "add entry"
+msgstr ""
+
+msgid "Remove the selected entry"
+msgstr ""
+
+msgid "Change list of maps setting"
+msgstr ""
+
+msgid "Entry {0}"
+msgstr "नोंद {0}"
+
+msgid "Please select the row to edit."
+msgstr ""
+
+msgid "Select Setting Type:"
+msgstr ""
+
+msgid "Simple"
+msgstr ""
+
+msgid "List"
+msgstr "यादी"
+
+msgid "List of lists"
+msgstr "याद्यांची यादी"
+
+msgid "List of maps"
+msgstr "नकाशांची यादी"
+
+msgid "Add setting"
+msgstr ""
+
+msgid "Please select the row to delete."
+msgstr ""
+
+msgid "Advanced Background: Changed"
+msgstr ""
+
+msgid "Advanced Background: NonDefault"
+msgstr ""
+
+msgid "Current value is default."
+msgstr ""
+
+msgid "Default value is ''{0}''."
+msgstr ""
+
+msgid "Default value currently unknown (setting has not been used yet)."
+msgstr ""
+
+msgid "Change string setting"
+msgstr ""
+
+msgid "Value: "
+msgstr ""
+
+msgid "Audio Settings"
+msgstr ""
+
+msgid "Settings for the audio player and audio markers."
+msgstr ""
+
+msgid "Display the Audio menu."
+msgstr ""
+
+msgid "Label audio (and image and web) markers."
+msgstr ""
+
+msgid "Display live audio trace."
+msgstr ""
+
+msgid "Explicit waypoints with valid timestamps."
+msgstr ""
+
+msgid "Explicit waypoints with time estimated from track position."
+msgstr ""
+
+msgid "Named trackpoints."
+msgstr ""
+
+msgid "Modified times (time stamps) of audio files."
+msgstr ""
+
+msgid "Start of track (will always do this if no other markers available)."
+msgstr ""
+
+msgid "Show or hide the audio menu entry on the main menu bar."
+msgstr ""
+
+msgid ""
+"Display a moving icon representing the point on the synchronized track where "
+"the audio currently playing was recorded."
+msgstr ""
+
+msgid ""
+"Put text labels against audio (and image and web) markers as well as their "
+"button icons."
+msgstr ""
+
+msgid "When importing audio, make markers from..."
+msgstr ""
+
+msgid "When importing audio, apply it to any waypoints in the GPX layer."
+msgstr ""
+
+msgid ""
+"Automatically create audio markers from trackpoints (rather than explicit "
+"waypoints) with names or descriptions."
+msgstr ""
+
+msgid ""
+"Create audio markers at the position on the track corresponding to the "
+"modified time of each audio WAV file imported."
+msgstr ""
+
+msgid ""
+"The number of seconds to jump forward or back when the relevant button is "
+"pressed"
+msgstr ""
+
+msgid "Forward/back time (seconds)"
+msgstr ""
+
+msgid "The amount by which the speed is multiplied for fast forwarding"
+msgstr ""
+
+msgid "Fast forward multiplier"
+msgstr ""
+
+msgid ""
+"Playback starts this number of seconds before (or after, if negative) the "
+"audio track position requested"
+msgstr ""
+
+msgid "Lead-in time (seconds)"
+msgstr ""
+
+msgid "The ratio of voice recorder elapsed time to true elapsed time"
+msgstr ""
+
+msgid "Voice recorder calibration"
+msgstr ""
+
+msgid "Color"
+msgstr "रंग"
+
+msgid "Choose"
+msgstr "निवडा"
+
+msgid "Choose a color for {0}"
+msgstr "{0}साठी रंग निवडा"
+
+msgid "Set to default"
+msgstr ""
+
+msgid "Set all to default"
+msgstr ""
+
+msgid "Colors used by different objects in JOSM."
+msgstr "JOSMमध्ये विभिन्न वस्तूंद्वारे वापरले जाणारे रंग."
+
+msgid "Colors"
+msgstr "रंग"
+
+msgid "Display Settings"
+msgstr ""
+
+msgid ""
+"Various settings that influence the visual representation of the whole "
+"program."
+msgstr ""
+
+msgid "Draw Direction Arrows"
+msgstr "दिशादर्शक बाण रेखाटा"
+
+msgid "Only on the head of a way."
+msgstr ""
+
+msgid "Draw oneway arrows."
+msgstr ""
+
+msgid "Draw segment order numbers"
+msgstr ""
+
+msgid "Draw boundaries of downloaded data"
+msgstr ""
+
+msgid "Draw virtual nodes in select mode"
+msgstr ""
+
+msgid "Draw inactive layers in other color"
+msgstr ""
+
+msgid "Display discardable keys"
+msgstr ""
+
+msgid "Highlight target ways and nodes"
+msgstr ""
+
+msgid "Draw rubber-band helper line"
+msgstr ""
+
+msgid "Smooth map graphics (antialiasing)"
+msgstr ""
+
+msgid "Smooth map graphics in wireframe mode (antialiasing)"
+msgstr ""
+
+msgid "Draw only outlines of areas"
+msgstr ""
+
+msgid "GPS Points"
+msgstr "GPS बिंदू"
+
+msgid "Draw direction hints for way segments."
+msgstr ""
+
+msgid "Draw arrows in the direction of oneways and other directed features."
+msgstr ""
+
+msgid "Draw the order numbers of all segments within their way."
+msgstr ""
+
+msgid "Draw the boundaries of data loaded from the server."
+msgstr ""
+
+msgid "Draw virtual nodes in select mode for easy way modification."
+msgstr ""
+
+msgid "Draw the inactive data layers in a different color."
+msgstr ""
+
+msgid ""
+"Apply antialiasing to the map view resulting in a smoother appearance."
+msgstr ""
+
+msgid ""
+"Apply antialiasing to the map view in wireframe mode resulting in a smoother "
+"appearance."
+msgstr ""
+
+msgid "Hightlight target nodes and ways while drawing or selecting"
+msgstr ""
+
+msgid ""
+"This option suppresses the filling of areas, overriding anything specified "
+"in the selected style."
+msgstr ""
+
+msgid ""
+"Display keys which have been deemed uninteresting to the point that they can "
+"be silently removed."
+msgstr ""
+
+msgid "Options that affect drawing performance"
+msgstr ""
+
+msgid "Segment drawing options"
+msgstr ""
+
+msgid "Select and draw mode options"
+msgstr ""
+
+msgid "Other options"
+msgstr "इतर पर्याय"
+
+msgid "OSM Data"
+msgstr ""
+
+msgid "Auto"
+msgstr ""
+
+msgctxt "gpx_field"
+msgid "Name"
+msgstr ""
+
+msgctxt "gpx_field"
+msgid "Desc(ription)"
+msgstr ""
+
+msgid "Everything"
+msgstr "सर्वकाही"
+
+msgid "Name or offset"
+msgstr ""
+
+msgid "None"
+msgstr ""
+
+msgid "Custom"
+msgstr ""
+
+msgid "Use global settings"
+msgstr ""
+
+msgid "All"
+msgstr "सर्व"
+
+msgid "Local files"
+msgstr ""
+
+msgid "Force lines if no segments imported"
+msgstr ""
+
+msgid "Draw large GPS points"
+msgstr ""
+
+msgid "Draw a circle from HDOP value"
+msgstr ""
+
+msgid "Velocity (red = slow, green = fast)"
+msgstr ""
+
+msgid "Direction (red = west, yellow = north, green = east, blue = south)"
+msgstr ""
+
+msgid "Dilution of Position (red = high, green = low, if available)"
+msgstr ""
+
+msgid "Track date"
+msgstr ""
+
+msgid "Single Color (can be customized for named layers)"
+msgstr ""
+
+msgid "Car"
+msgstr ""
+
+msgid "Bicycle"
+msgstr ""
+
+msgid "Foot"
+msgstr ""
+
+msgid "Create markers when reading GPX"
+msgstr ""
+
+msgid "Fast drawing (looks uglier)"
+msgstr ""
+
+msgid "Dynamic color range based on data limits"
+msgstr ""
+
+msgid "Smooth GPX graphics (antialiasing)"
+msgstr ""
+
+msgid ""
+"Automatically make a marker layer from any waypoints when opening a GPX "
+"layer."
+msgstr ""
+
+msgid "Draw lines between raw GPS points"
+msgstr ""
+
+msgid ""
+"Maximum length (in meters) to draw lines for local files. Set to ''-1'' to "
+"draw all lines."
+msgstr ""
+
+msgid "Maximum length for local files (meters)"
+msgstr ""
+
+msgid ""
+"Maximum length (in meters) to draw lines. Set to ''-1'' to draw all lines."
+msgstr ""
+
+msgid "Maximum length (meters)"
+msgstr ""
+
+msgid ""
+"Force drawing of lines if the imported data contain no line information."
+msgstr ""
+
+msgid "Draw direction arrows for lines, connecting GPS points."
+msgstr ""
+
+msgid ""
+"Draw the direction arrows using table lookups instead of complex math."
+msgstr ""
+
+msgid ""
+"Do not draw arrows if they are not at least this distance away from the last "
+"one."
+msgstr ""
+
+msgid "Minimum distance (pixels)"
+msgstr ""
+
+msgid "Draw a circle from HDOP value."
+msgstr ""
+
+msgid "Draw larger dots for the GPS points."
+msgstr ""
+
+msgid "Width of drawn GPX line (0 for default)"
+msgstr ""
+
+msgid "Drawing width of GPX lines"
+msgstr ""
+
+msgid ""
+"Apply antialiasing to the GPX lines resulting in a smoother appearance."
+msgstr ""
+
+msgid ""
+"All points and track segments will have the same color. Can be customized in "
+"Layer Manager."
+msgstr ""
+
+msgid "Colors points and track segments by velocity."
+msgstr ""
+
+msgid "Colors points and track segments by direction."
+msgstr ""
+
+msgid ""
+"Colors points and track segments by dilution of position (HDOP). Your "
+"capture device needs to log that information."
+msgstr ""
+
+msgid "Colors points and track segments by its timestamp."
+msgstr ""
+
+msgid "Allows to tune the track coloring for different average speeds."
+msgstr ""
+
+msgid "Track and Point Coloring"
+msgstr ""
+
+msgid "Colors points and track segments by data limits."
+msgstr ""
+
+msgid "Waypoint labelling"
+msgstr ""
+
+msgid "Audio waypoint labelling"
+msgstr ""
+
+msgid "Incorrect waypoint label pattern: {0}"
+msgstr ""
+
+msgid "Incorrect pattern"
+msgstr ""
+
+msgid "Incorrect audio waypoint label pattern: {0}"
+msgstr ""
+
+msgid "Show splash screen at startup"
+msgstr ""
+
+msgid "Show object ID in selection lists"
+msgstr ""
+
+msgid "Show localized name in selection lists"
+msgstr ""
+
+msgid "Modeless working (Potlatch style)"
+msgstr ""
+
+msgid "Dynamic buttons in side menus"
+msgstr ""
+
+msgid "Display ISO dates"
+msgstr ""
+
+msgid "Use native file choosers (nicer, but do not support file filters)"
+msgstr ""
+
+msgid "Show localized name in selection lists, if available"
+msgstr ""
+
+msgid "Do not require to switch modes (potlatch style workflow)"
+msgstr ""
+
+msgid ""
+"Display buttons in right side menus only when mouse is inside the element"
+msgstr ""
+
+msgid "ISO 8601"
+msgstr ""
+
+msgid ""
+"Format dates according to {0}. Today''s date will be displayed as {1} "
+"instead of {2}"
+msgstr ""
+
+msgid ""
+"Use file choosers that behave more like native ones. They look nicer but do "
+"not support some features like file filters"
+msgstr ""
+
+msgid "Look and Feel"
+msgstr ""
+
+msgid "Language"
+msgstr "भाषा"
+
+msgid "Default (Auto determined)"
+msgstr ""
+
+msgid "Add Imagery URL"
+msgstr ""
+
+msgid "1. Enter URL"
+msgstr ""
+
+msgid ""
+"{0} is replaced by tile zoom level, also supported:<br>offsets to the zoom "
+"level: {1} or {2}<br>reversed zoom level: {3}"
+msgstr ""
+
+msgid "{0} is replaced by X-coordinate of the tile"
+msgstr ""
+
+msgid "{0} is replaced by Y-coordinate of the tile"
+msgstr ""
+
+msgid "{0} is replaced by {1} (Yahoo style Y coordinate)"
+msgstr ""
+
+msgid ""
+"{0} is replaced by {1} (OSGeo Tile Map Service Specification style Y "
+"coordinate)"
+msgstr ""
+
+msgid ""
+"{0} is replaced by a random selection from the given comma separated list, "
+"e.g. {1}"
+msgstr ""
+
+msgid "2. Enter maximum zoom (optional)"
+msgstr ""
+
+msgid "3. Verify generated TMS URL"
+msgstr ""
+
+msgid "4. Enter name for this layer"
+msgstr ""
+
+msgid "Store WMS endpoint only, select layers at usage"
+msgstr ""
+
+msgid "Show bounds"
+msgstr ""
+
+msgid "1. Enter service URL"
+msgstr ""
+
+msgid "Get layers"
+msgstr ""
+
+msgid "2. Select layers"
+msgstr ""
+
+msgid "3. Select image format"
+msgstr ""
+
+msgid "4. Verify generated WMS URL"
+msgstr ""
+
+msgid "5. Enter name for this layer"
+msgstr ""
+
+msgid "Show Bounds"
+msgstr ""
+
+msgid "No bounding box was found for this layer."
+msgstr ""
+
+msgid "1. Enter getCapabilities URL"
+msgstr ""
+
+msgid "2. Enter name for this layer"
+msgstr ""
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
+msgid "imagery fade"
+msgstr ""
+
+msgid "Fade Color: "
+msgstr ""
+
+msgid "Fade amount: "
+msgstr ""
+
+msgid "Soft"
+msgstr ""
+
+msgid "Strong"
+msgstr ""
+
+msgid "Sharpen (requires layer re-add): "
+msgstr ""
+
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
+msgid "Imagery Preferences"
+msgstr ""
+
+msgid "Modify list of imagery layers displayed in the Imagery menu"
+msgstr ""
+
+msgid "Common Settings"
+msgstr ""
+
+msgid "WMS Settings"
+msgstr ""
+
+msgid "TMS Settings"
+msgstr ""
+
+msgid "Imagery providers"
+msgstr ""
+
+msgid "Offset bookmarks"
+msgstr ""
+
+msgid "Cache contents"
+msgstr ""
+
+msgid "Imagery Background: Default"
+msgstr ""
+
+msgid "Available default entries:"
+msgstr ""
+
+msgid "Selected entries:"
+msgstr ""
+
+msgid "Add a new {0} entry by entering the URL"
+msgstr ""
+
+msgid "Remove entry"
+msgstr ""
+
+msgid "copy selected defaults"
+msgstr ""
+
+msgid "Please select at least one row to copy."
+msgstr ""
+
+msgid "reload defaults"
+msgstr ""
+
+msgid "Menu Name"
+msgstr ""
+
+msgid "Imagery URL"
+msgstr ""
+
+msgid "Menu Name (Default)"
+msgstr ""
+
+msgid "Imagery URL (Default)"
+msgstr ""
+
+msgid "EULA license URL not available: {0}"
+msgstr ""
+
+msgid "Malformed URL for the EULA licence: {0}"
+msgstr ""
+
+msgid "Layer"
+msgstr "थर"
+
+msgid "Easting"
+msgstr ""
+
+msgid "Northing"
+msgstr ""
+
+msgid "Auto zoom by default: "
+msgstr ""
+
+msgid "Autoload tiles by default: "
+msgstr ""
+
+msgid "Min. zoom level: "
+msgstr ""
+
+msgid "Max. zoom level: "
+msgstr ""
+
+msgid "Add to slippymap chooser: "
+msgstr ""
+
+msgid "Maximum concurrent downloads: "
+msgstr ""
+
+msgid "Maximum concurrent downloads per host: "
+msgstr ""
+
+msgid ""
+"That layer does not support any of JOSM''s projections,\n"
+"so you can not use it. This message will not show again."
+msgstr ""
+
+msgid "Simultaneous connections:"
+msgstr ""
+
+msgid "Tile size:"
+msgstr ""
+
+msgid "Auto save enabled"
+msgstr ""
+
+msgid "Auto save interval (seconds)"
+msgstr ""
+
+msgid "Default value: {0}"
+msgstr ""
+
+msgid "Auto saved files per layer"
+msgstr ""
+
+msgid ""
+"<i>(Autosave stores the changed data layers in periodic intervals. The "
+"backups are saved in JOSM''s preference folder. In case of a crash, JOSM "
+"tries to recover the unsaved changes on next start.)</i>"
+msgstr ""
+
+msgid "Keep backup files when saving data layers"
+msgstr ""
+
+msgid "When saving, keep backup files ending with a ~"
+msgstr ""
+
+msgid ""
+"<i>(JOSM can keep a backup file when saving data layers. It appends ''~'' to "
+"the file name and saves it in the same folder.)</i>"
+msgstr ""
+
+msgid "Notification at each save"
+msgstr ""
+
+msgid "When saving, display a small notification"
+msgstr ""
+
+msgid "File backup"
+msgstr ""
+
+msgid "Configure whether to create backup files"
+msgstr ""
+
+msgid "Enable built-in icon defaults"
+msgstr ""
+
+msgid "Available styles:"
+msgstr ""
+
+msgid "Active styles:"
+msgstr ""
+
+msgid "Add a new style by entering filename or URL"
+msgstr ""
+
+msgid "New style entry:"
+msgstr ""
+
+msgid "Remove the selected styles from the list of active styles"
+msgstr ""
+
+msgid "Edit the filename or URL for the selected active style"
+msgstr ""
+
+msgid "Add the selected available styles to the list of active styles"
+msgstr ""
+
+msgid "Reloads the list of available styles from ''{0}''"
+msgstr ""
+
+msgid "Loading style sources from ''{0}''"
+msgstr ""
+
+msgid ""
+"<html>Failed to load the list of style sources "
+"from<br>''{0}''.<br><br>Details (untranslated):<br>{1}</html>"
+msgstr ""
+
+msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
+msgstr ""
+
+msgid "JOSM default (MapCSS)"
+msgstr ""
+
+msgid ""
+"Internal style to be used as base for runtime switchable overlay styles"
+msgstr ""
+
+msgid "Potlatch 2"
+msgstr ""
+
+msgid "the main Potlatch 2 style"
+msgstr ""
+
+msgid "Map Settings"
+msgstr ""
+
+msgid "Settings for the map projection and data interpretation."
+msgstr ""
+
+msgid "Could not read tagging preset source: {0}"
+msgstr ""
+
+msgid ""
+"Could not read tagging preset source: {0}\n"
+"Do you want to keep it?"
+msgstr ""
+
+msgid "Could not read tagging preset source {0}"
+msgstr ""
+
+msgid ""
+"<html>Tagging preset source {0} can be loaded but it contains errors. Do you "
+"really want to use it?<br><br><table width=600>Error is: [{1}:{2}] "
+"{3}</table></html>"
+msgstr ""
+
+msgid ""
+"<html>Unable to parse tagging preset source: {0}. Do you really want to use "
+"it?<br><br><table width=400>Error is: [{1}:{2}] {3}</table></html>"
+msgstr ""
+
+msgid ""
+"<html>Tagging preset source {0} can be loaded but it contains errors. Do you "
+"really want to use it?<br><br><table width=600>Error is: {1}</table></html>"
+msgstr ""
+
+msgid ""
+"<html>Unable to parse tagging preset source: {0}. Do you really want to use "
+"it?<br><br><table width=600>Error is: {1}</table></html>"
+msgstr ""
+
+msgid "Sort presets menu"
+msgstr ""
+
+msgid "Tagging Presets"
+msgstr ""
+
+msgid "Available presets:"
+msgstr ""
+
+msgid "Active presets:"
+msgstr ""
+
+msgid "Add a new preset by entering filename or URL"
+msgstr ""
+
+msgid "New preset entry:"
+msgstr ""
+
+msgid "Remove the selected presets from the list of active presets"
+msgstr ""
+
+msgid "Edit the filename or URL for the selected active preset"
+msgstr ""
+
+msgid "Add the selected available presets to the list of active presets"
+msgstr ""
+
+msgid "Reloads the list of available presets from ''{0}''"
+msgstr ""
+
+msgid "Loading preset sources from ''{0}''"
+msgstr ""
+
+msgid ""
+"<html>Failed to load the list of preset sources "
+"from<br>''{0}''.<br><br>Details (untranslated):<br>{1}</html>"
+msgstr ""
+
+msgid "Warning: illegal format of entry in preset list ''{0}''. Got ''{1}''"
+msgstr ""
+
+msgid "Internal Preset"
+msgstr ""
+
+msgid "The default preset for JOSM"
+msgstr ""
+
+msgid "Plugin bundled with JOSM"
+msgstr ""
+
+msgid ""
+"Please click on <strong>Download list</strong> to download and display a "
+"list of available plugins."
+msgstr ""
+
+msgid "Plugin {0} is still required by this plugin:"
+msgid_plural "Plugin {0} is still required by these {1} plugins:"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "{0}: Version {1} (local: {2})"
+msgstr ""
+
+msgid " (requires: {0})"
+msgstr ""
+
+msgid "Configure available plugins."
+msgstr ""
+
+msgid ""
+"The following plugin has been downloaded <strong>successfully</strong>:"
+msgid_plural ""
+"The following {0} plugins have been downloaded <strong>successfully</strong>:"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Downloading the following plugin has <strong>failed</strong>:"
+msgid_plural ""
+"Downloading the following {0} plugins has <strong>failed</strong>:"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Please restart JOSM to activate the downloaded plugins."
+msgstr ""
+
+msgid "Update plugins"
+msgstr ""
+
+msgid "Search:"
+msgstr ""
+
+msgid "Enter a search expression"
+msgstr ""
+
+msgid "Plugin update policy"
+msgstr ""
+
+msgid "Accept the new plugin sites and close the dialog"
+msgstr ""
+
+msgid "Configure Plugin Sites"
+msgstr ""
+
+msgid "Download list"
+msgstr ""
+
+msgid "Download the list of available plugins"
+msgstr ""
+
+msgid "Update the selected plugins"
+msgstr ""
+
+msgid ""
+"All installed plugins are up to date. JOSM does not have to download newer "
+"versions."
+msgstr ""
+
+msgid "Plugins up to date"
+msgstr ""
+
+msgid "Configure sites..."
+msgstr ""
+
+msgid "Configure the list of sites where plugins are downloaded from"
+msgstr ""
+
+msgid "Add JOSM Plugin description URL."
+msgstr ""
+
+msgid "Enter URL"
+msgstr ""
+
+msgid "Please select an entry."
+msgstr ""
+
+msgid "Edit JOSM Plugin description URL."
+msgstr ""
+
+msgid "JOSM Plugin description URL"
+msgstr ""
+
+msgid "Ask before updating"
+msgstr ""
+
+msgid "Always update without asking"
+msgstr ""
+
+msgid "Never update"
+msgstr ""
+
+msgid ""
+"Please decide whether JOSM shall automatically update active plugins at "
+"startup after an update of JOSM itself."
+msgstr ""
+
+msgid "Update interval (in days):"
+msgstr ""
+
+msgid ""
+"Please decide whether JOSM shall automatically update active plugins after a "
+"certain period of time."
+msgstr ""
+
+msgid "By Code (EPSG)"
+msgstr ""
+
+msgid "Invalid projection configuration: {0}"
+msgstr ""
+
+msgid "Projection configuration is valid."
+msgstr ""
+
+msgid "Validate"
+msgstr ""
+
+msgid "Parameter information..."
+msgstr ""
+
+msgid "Parameter information"
+msgstr ""
+
+msgid "Projection name"
+msgstr ""
+
+msgid "Supported values:"
+msgstr ""
+
+msgid "Projection parameters"
+msgstr ""
+
+msgid "False easting and false northing"
+msgstr ""
+
+msgid "Central meridian"
+msgstr ""
+
+msgid "Scaling factor"
+msgstr ""
+
+msgid "Ellipsoid name"
+msgstr ""
+
+msgid "Ellipsoid parameters"
+msgstr ""
+
+msgid "Datum name"
+msgstr ""
+
+msgid "3 or 7 term datum transform parameters"
+msgstr ""
+
+msgid "NTv2 grid file"
+msgstr ""
+
+msgid "Built-in:"
+msgstr ""
+
+msgid "Projection bounds (in degrees)"
+msgstr ""
+
+msgid "Sets the SRS=... parameter in the WMS request"
+msgstr ""
+
+msgid "Gauß-Krüger"
+msgstr ""
+
+msgid "GK Zone"
+msgstr ""
+
+msgid "Gauß-Krüger Zone {0}"
+msgstr ""
+
+msgid "{0} ({1} to {2} degrees)"
+msgstr ""
+
+msgid "Lambert CC9 Zone (France)"
+msgstr ""
+
+msgid "Lambert CC Zone"
+msgstr ""
+
+msgid "{0} (Corsica)"
+msgstr ""
+
+msgid "Lambert 4 Zones (France)"
+msgstr ""
+
+msgid "WGS84 Geographic"
+msgstr ""
+
+msgid "Belgian Lambert 1972"
+msgstr ""
+
+msgid "Belgian Lambert 2008"
+msgstr ""
+
+msgid "Lambert Zone (Estonia)"
+msgstr ""
+
+msgid "Lambert 93 (France)"
+msgstr ""
+
+msgid "LKS-92 (Latvia TM)"
+msgstr ""
+
+msgid "SWEREF99 13 30 / EPSG:3008 (Sweden)"
+msgstr ""
+
+msgid "Projection method"
+msgstr ""
+
+msgid "Projection code"
+msgstr ""
+
+msgid "Display coordinates as"
+msgstr ""
+
+msgid "System of measurement"
+msgstr ""
+
+msgid "Map Projection"
+msgstr ""
+
+msgid "The projection {0} could not be activated. Using Mercator"
+msgstr ""
+
+msgid "PUWG 1992 (Poland)"
+msgstr ""
+
+msgid "PUWG 2000 Zone {0} (Poland)"
+msgstr ""
+
+msgid "PUWG (Poland)"
+msgstr ""
+
+msgid "PUWG Zone"
+msgstr ""
+
+msgid "Swiss Grid (Switzerland)"
+msgstr ""
+
+msgid "<i>CH1903 / LV03 (without local corrections)</i>"
+msgstr ""
+
+msgid "Guadeloupe Fort-Marigot 1949"
+msgstr ""
+
+msgid "Guadeloupe Ste-Anne 1948"
+msgstr ""
+
+msgid "Martinique Fort Desaix 1952"
+msgstr ""
+
+msgid "Reunion RGR92"
+msgstr ""
+
+msgid "Guyane RGFG95"
+msgstr ""
+
+msgid "UTM France (DOM)"
+msgstr ""
+
+msgid "UTM Geodesic system"
+msgstr ""
+
+msgid "UTM"
+msgstr ""
+
+msgid "UTM Zone"
+msgstr ""
+
+msgid "North"
+msgstr ""
+
+msgid "South"
+msgstr ""
+
+msgid "Hemisphere"
+msgstr ""
+
+msgid "Remote Control"
+msgstr ""
+
+msgid "Settings for the remote control feature."
+msgstr ""
+
+msgid "Download objects to new layer"
+msgstr ""
+
+msgid "Confirm all Remote Control actions manually"
+msgstr ""
+
+msgid ""
+"Allows JOSM to be controlled from other applications, e.g. from a web "
+"browser."
+msgstr ""
+
+msgid ""
+"JOSM will always listen at <b>port {0}</b> (http) and <b>port {1}</b> "
+"(https) on localhost.<br>These ports are not configurable because they are "
+"referenced by external applications talking to JOSM."
+msgstr ""
+
+msgid "Enable remote control"
+msgstr ""
+
+msgid "Enable HTTPS support"
+msgstr ""
+
+msgid "Install..."
+msgstr ""
+
+msgid "Uninstall..."
+msgstr ""
+
+msgid "Install JOSM localhost certificate to system/browser root keystores"
+msgstr ""
+
+msgid ""
+"Uninstall JOSM localhost certificate from system/browser root keystores"
+msgstr ""
+
+msgid "Certificate:"
+msgstr ""
+
+msgid "Certificate has been successfully installed."
+msgstr ""
+
+msgid "Certificate is already installed. Nothing to do."
+msgstr ""
+
+msgid "Removing certificate {0} from root keystore."
+msgstr ""
+
+msgid "Certificate has been successfully uninstalled."
+msgstr ""
+
+msgid "Certificate is not installed. Nothing to do."
+msgstr ""
+
+msgid "Permitted actions:"
+msgstr ""
+
+msgid "Testing OSM API URL ''{0}''"
+msgstr ""
+
+msgid ""
+"<html>''{0}'' is not a valid OSM API URL.<br>Please check the spelling and "
+"validate again.</html>"
+msgstr ""
+
+msgid "Invalid API URL"
+msgstr ""
+
+msgid ""
+"<html>Failed to build URL ''{0}'' for validating the OSM API "
+"server.<br>Please check the spelling of ''{1}'' and validate again.</html>"
+msgstr ""
+
+msgid ""
+"<html>Failed to connect to the URL ''{0}''.<br>Please check the spelling of "
+"''{1}'' and your Internet connection and validate again.</html>"
+msgstr ""
+
+msgid "Connection to API failed"
+msgstr ""
+
+msgid ""
+"<html>Failed to retrieve a list of changesets from the OSM API server "
+"at<br>''{1}''. The server responded with the return code {0} instead of "
+"200.<br>Please check the spelling of ''{1}'' and validate again.</html>"
+msgstr ""
+
+msgid ""
+"<html>The OSM API server at ''{0}'' did not return a valid response.<br>It "
+"is likely that ''{0}'' is not an OSM API server.<br>Please check the "
+"spelling of ''{0}'' and validate again.</html>"
+msgstr ""
+
+msgid "Authentication"
+msgstr ""
+
+msgid "Configure your identity and how to authenticate at the OSM server"
+msgstr ""
+
+msgid "Use Basic Authentication"
+msgstr ""
+
+msgid ""
+"Select to use HTTP basic authentication with your OSM username and password"
+msgstr ""
+
+msgid "Use OAuth"
+msgstr ""
+
+msgid "Select to use OAuth as authentication mechanism"
+msgstr ""
+
+msgid ""
+"Unsupported value in preference ''{0}'', got ''{1}''. Using authentication "
+"method ''Basic Authentication''."
+msgstr ""
+
+msgid "OSM username:"
+msgstr ""
+
+msgid "OSM password:"
+msgstr ""
+
+msgid "Failed to retrieve OSM credentials from credential manager."
+msgstr ""
+
+msgid "Current credential manager is of type ''{0}''"
+msgstr ""
+
+msgid "Failed to save OSM credentials to credential manager."
+msgstr ""
+
+msgid "Periodically check for new messages"
+msgstr ""
+
+msgid "Check interval (minutes):"
+msgstr ""
+
+msgid "Max age for closed notes (days):"
+msgstr ""
+
+msgid ""
+"Specifies the number of days a note needs to be closed to no longer be "
+"downloaded"
+msgstr ""
+
+msgid "Failed to retrieve OAuth Access Token from credential manager"
+msgstr ""
+
+msgid "Failed to store OAuth Access Token to credentials manager"
+msgstr ""
+
+msgid ""
+"You do not have an Access Token yet to access the OSM server using OAuth. "
+"Please authorize first."
+msgstr ""
+
+msgid ""
+"You already have an Access Token to access the OSM server using OAuth."
+msgstr ""
+
+msgid "Save to preferences"
+msgstr ""
+
+msgid "Click to step through the OAuth authorization process"
+msgstr ""
+
+msgid "New Access Token"
+msgstr ""
+
+msgid ""
+"Click to step through the OAuth authorization process and generate a new "
+"Access Token"
+msgstr ""
+
+msgid "Click test access to the OSM server with the current access token"
+msgstr ""
+
+msgid "<html>Use the default OSM server URL (<strong>{0}</strong>)</html>"
+msgstr ""
+
+msgid "Test the API URL"
+msgstr ""
+
+msgid "The API URL is valid."
+msgstr ""
+
+msgid "Validation failed. The API URL seems to be invalid."
+msgstr ""
+
+msgid "OSM API URL must not be empty. Please enter the OSM API URL."
+msgstr ""
+
+msgid "The current value is not a valid URL"
+msgstr ""
+
+msgid "Please enter the OSM API URL."
+msgstr ""
+
+msgid "Proxy settings"
+msgstr ""
+
+msgid "Configure whether to use a proxy server"
+msgstr ""
+
+msgid "Host:"
+msgstr ""
+
+msgctxt "server"
+msgid "Port:"
+msgstr ""
+
+msgid ""
+"Please enter a username and a password if your proxy requires authentication."
+msgstr ""
+
+msgid "Password:"
+msgstr ""
+
+msgid "No proxy"
+msgstr ""
+
+msgid "Use standard system settings"
+msgstr ""
+
+msgid ""
+"Use standard system settings (disabled. Start JOSM with <tt>-"
+"Djava.net.useSystemProxies=true</tt> to enable)"
+msgstr ""
+
+msgid "Manually configure a HTTP proxy"
+msgstr ""
+
+msgid "Use a SOCKS proxy"
+msgstr ""
+
+msgid ""
+"JOSM is configured to use proxies from the system setting, but the JVM is "
+"not configured to retrieve them. Resetting preferences to ''No proxy''"
+msgstr ""
+
+msgid "Connection Settings"
+msgstr ""
+
+msgid "Connection Settings for the OSM server."
+msgstr ""
+
+msgid "Action"
+msgstr ""
+
+msgid "Shortcut"
+msgstr ""
+
+msgid "Shortcut Background: User"
+msgstr ""
+
+msgid "Shortcut Background: Modified"
+msgstr ""
+
+msgid "Use default"
+msgstr ""
+
+msgid "Key:"
+msgstr ""
+
+msgid "Attention: Use real keyboard keys only!"
+msgstr ""
+
+msgid "Keyboard Shortcuts"
+msgstr ""
+
+msgid "Changing keyboard shortcuts manually."
+msgstr ""
+
+msgid "Data validator"
+msgstr ""
+
+msgid ""
+"An OSM data validator that checks for common errors made by users and editor "
+"programs."
+msgstr ""
+
+msgid "Available rules:"
+msgstr ""
+
+msgid "Active rules:"
+msgstr ""
+
+msgid "Add a new rule by entering filename or URL"
+msgstr ""
+
+msgid "New rule entry:"
+msgstr ""
+
+msgid "Remove the selected rules from the list of active rules"
+msgstr ""
+
+msgid "Edit the filename or URL for the selected active rule"
+msgstr ""
+
+msgid "Add the selected available rules to the list of active rules"
+msgstr ""
+
+msgid "Reloads the list of available rules from ''{0}''"
+msgstr ""
+
+msgid "Loading rule sources from ''{0}''"
+msgstr ""
+
+msgid ""
+"<html>Failed to load the list of rule sources "
+"from<br>''{0}''.<br><br>Details (untranslated):<br>{1}</html>"
+msgstr ""
+
+msgid "Warning: illegal format of entry in rule list ''{0}''. Got ''{1}''"
+msgstr ""
+
+msgid "Checks for errors on addresses"
+msgstr ""
+
+msgid "Tag combinations"
+msgstr ""
+
+msgid "Checks for missing tag or suspicious combinations"
+msgstr ""
+
+msgid "Deprecated features"
+msgstr ""
+
+msgid "Checks for deprecated features"
+msgstr ""
+
+msgid "Geometry"
+msgstr ""
+
+msgid "Checks for geometry errors"
+msgstr ""
+
+msgid "Checks for errors on highways"
+msgstr ""
+
+msgid "Multiple values"
+msgstr ""
+
+msgid "Checks for wrong multiple values"
+msgstr ""
+
+msgid "Numeric values"
+msgstr ""
+
+msgid "Checks for wrong numeric values"
+msgstr ""
+
+msgid "Power"
+msgstr ""
+
+msgid "Checks for errors on power infrastructures"
+msgstr ""
+
+msgid "Religion"
+msgstr ""
+
+msgid "Checks for errors on religious objects"
+msgstr ""
+
+msgid "Checks for errors on relations"
+msgstr ""
+
+msgid "Unnecessary tags"
+msgstr ""
+
+msgid "Checks for unnecessary tags"
+msgstr ""
+
+msgid "Wikipedia"
+msgstr ""
+
+msgid "Checks for wrong wikipedia tags"
+msgstr ""
+
+msgid "Tag checker rules"
+msgstr ""
+
+msgid "Choose Tag checker rules to enable"
+msgstr ""
+
+msgid "Use ignore list."
+msgstr ""
+
+msgid "Use the ignore list to suppress warnings."
+msgstr ""
+
+msgid "Use error layer."
+msgstr ""
+
+msgid "Use the error layer to display problematic elements."
+msgstr ""
+
+msgid "Show informational level."
+msgstr ""
+
+msgid "Show the informational tests."
+msgstr ""
+
+msgid "Show informational level on upload."
+msgstr ""
+
+msgid "Show the informational tests in the upload check windows."
+msgstr ""
+
+msgid "On demand"
+msgstr ""
+
+msgid "On upload"
+msgstr ""
+
+msgid "Tests"
+msgstr ""
+
+msgid "Choose tests to enable"
+msgstr ""
+
+msgid "multiple"
+msgstr ""
+
+msgid "Remove old keys from up to {0} object"
+msgid_plural "Remove old keys from up to {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete the selection in the tag table"
+msgstr ""
+
+msgid "Add a new tag"
+msgstr ""
+
+msgid "Paste tags from buffer"
+msgstr ""
+
+msgid "Use preset ''{0}'' of group ''{1}''"
+msgstr ""
+
+msgid "Use preset ''{0}''"
+msgstr ""
+
+msgid "Elements of type {0} are supported."
+msgstr ""
+
+msgid "Edit also …"
+msgstr ""
+
+msgid "Apply Preset"
+msgstr ""
+
+msgid "New relation"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
+msgid "Change {0} object"
+msgid_plural "Change {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Nothing selected!"
+msgstr ""
+
+msgid "Selection unsuitable!"
+msgstr ""
+
+msgid "Change Tags"
+msgstr ""
+
+msgid "Add or remove toolbar button"
+msgstr ""
+
+msgid "Unknown requisite: {0}"
+msgstr ""
+
+msgid "Illegal member expression: {0}"
+msgstr ""
+
+msgid "More information about this feature"
+msgstr ""
+
+msgid "Available roles"
+msgstr ""
+
+msgid "role"
+msgstr ""
+
+msgid "count"
+msgstr ""
+
+msgid "elements"
+msgstr ""
+
+msgid "Optional Attributes:"
+msgstr ""
+
+msgid "Select auto-increment of {0} for this field"
+msgstr ""
+
+msgid "Cancel auto-increment for this field"
+msgstr ""
+
+msgid "{0}:"
+msgstr ""
+
+msgid ""
+"Warning in tagging preset \"{0}-{1}\": Ignoring ''{2}'' attribute as ''{3}'' "
+"elements are given."
+msgstr ""
+
+msgid ""
+"Broken tagging preset \"{0}-{1}\" - Java method given in ''values_from'' is "
+"not \"{2}\""
+msgstr ""
+
+msgid ""
+"Broken tagging preset \"{0}-{1}\" - Java method given in ''values_from'' "
+"threw {2} ({3})"
+msgstr ""
+
+msgid ""
+"Broken tagging preset \"{0}-{1}\" - number of items in ''display_values'' "
+"must be the same as in ''values''"
+msgstr ""
+
+msgid ""
+"Broken tagging preset \"{0}-{1}\" - number of items in "
+"''short_descriptions'' must be the same as in ''values''"
+msgstr ""
+
+msgid "Unknown type: {0}"
+msgstr ""
+
+msgid "Preset group {1} / {0}"
+msgstr ""
+
+msgid "Preset group {0}"
+msgstr ""
+
+msgid "Reference {0} is being used before it was defined"
+msgstr ""
+
+msgid "Roles cannot appear more than once"
+msgstr ""
+
+msgid "Preset role element without parent"
+msgstr ""
+
+msgid "Preset sub element without parent"
+msgstr ""
+
+msgid "Error parsing {0}: "
+msgstr ""
+
+msgid "Search preset"
+msgstr ""
+
+msgid "Show preset search dialog"
+msgstr ""
+
+msgid "Search presets"
+msgstr ""
+
+msgid "Presets"
+msgstr ""
+
+msgid "Search for objects by preset"
+msgstr ""
+
+msgid "Show only applicable to selection"
+msgstr ""
+
+msgid "Search in tags"
+msgstr ""
+
+msgid "Add toolbar button"
+msgstr ""
+
+msgid ""
+"Adjustable {0} not registered yet. Cannot set participation in synchronized "
+"adjustment."
+msgstr ""
+
+msgid "Adjustable {0} not registered yet."
+msgstr ""
+
+msgid "Some of the key listeners forgot to remove themselves: {0}"
+msgstr ""
+
+msgid "Some of the key modifier listeners forgot to remove themselves: {0}"
+msgstr ""
+
+msgid "All files (*.*)"
+msgstr ""
+
+msgid "Received error page:"
+msgstr ""
+
+msgid "Min. latitude"
+msgstr ""
+
+msgid "Min. longitude"
+msgstr ""
+
+msgid "Max. latitude"
+msgstr ""
+
+msgid "Max. longitude"
+msgstr ""
+
+msgid ""
+"URL from www.openstreetmap.org (you can paste a download URL here to specify "
+"a bounding box)"
+msgstr ""
+
+msgid ""
+"The current value is not a valid changeset ID. Please enter an integer value "
+"> 0"
+msgstr ""
+
+msgid "Add a new source to the list."
+msgstr ""
+
+msgid "Edit the selected source."
+msgstr ""
+
+msgid "Delete the selected source from the list."
+msgstr ""
+
+msgid ""
+"The current value is not a valid OSM ID. Please enter an integer value > 0"
+msgstr ""
+
+msgid "false: the property is explicitly switched off"
+msgstr ""
+
+msgid "true: the property is explicitly switched on"
+msgstr ""
+
+msgid ""
+"partial: different selected objects have different values, do not change"
+msgstr ""
+
+msgid "unset: do not set this property on the selected objects"
+msgstr ""
+
+msgid "Cut"
+msgstr ""
+
+msgid "Right click = copy to clipboard"
+msgstr ""
+
+msgid "Missing mandatory attribute ''{0}''."
+msgstr ""
+
+msgid ""
+"Illegal value for mandatory attribute ''{0}'' of type long. Got ''{1}''."
+msgstr ""
+
+msgid ""
+"Illegal value for mandatory attribute ''{0}'' of type long (>=0). Got "
+"''{1}''."
+msgstr ""
+
+msgid "Illegal value for attribute ''{0}'' of type double. Got ''{1}''."
+msgstr ""
+
+msgid ""
+"Illegal value for mandatory attribute ''{0}'' of type boolean. Got ''{1}''."
+msgstr ""
+
+msgid ""
+"Illegal value for mandatory attribute ''{0}'' of type OsmPrimitiveType. Got "
+"''{1}''."
+msgstr ""
+
+msgid ""
+"Way with external ID ''{0}'' includes missing node with external ID ''{1}''."
+msgstr ""
+
+msgid "Deleted node {0} is part of way {1}"
+msgstr ""
+
+msgid ""
+"Way {0} with {1} nodes has incomplete nodes because at least one node was "
+"missing in the loaded data."
+msgstr ""
+
+msgid ""
+"Relation with external id ''{0}'' refers to a missing primitive with "
+"external id ''{1}''."
+msgstr ""
+
+msgid "Deleted member {0} is used by relation {1}"
+msgstr ""
+
+msgid "All Formats"
+msgstr ""
+
+msgid "Downloading points {0} to {1}..."
+msgstr ""
+
+msgid "Contacting OSM Server..."
+msgstr ""
+
+msgid "Failed to open input stream for resource ''{0}''"
+msgstr ""
+
+msgid ""
+"Failed to open file with extension ''{2}'' and namepart ''{3}'' in zip file "
+"''{0}''. Exception was: {1}"
+msgstr ""
+
+msgid "Failed to rename file {0} to {1}."
+msgstr ""
+
+msgid "Failed to load {0}, use cached file and retry next time: {1}"
+msgstr ""
+
+msgid ""
+"Unexpected response from HTTP server. Got {0} response without ''Location'' "
+"header. Can''t redirect. Aborting."
+msgstr ""
+
+msgid "Too many redirects to the download URL detected. Aborting."
+msgstr ""
+
+msgid "Download redirected to ''{0}''"
+msgstr ""
+
+msgid "Failed to read from ''{0}''. Server responded with status code {1}."
+msgstr ""
+
+msgid ""
+"Illegal value of attribute ''{0}'' of element ''{1}'' in server "
+"capabilities. Got ''{2}''"
+msgstr ""
+
+msgid "Failed to parse date ''{0}'' replied by server."
+msgstr ""
+
+msgid ""
+"Unexpected format of error header for conflict in changeset update. Got "
+"''{0}''"
+msgstr ""
+
+msgid "Illegal longitude value for parameter ''{0}'', got {1}"
+msgstr ""
+
+msgid "Illegal latitude value for parameter ''{0}'', got {1}"
+msgstr ""
+
+msgid "Unexpected value for ''{0}'' in changeset query url, got {1}"
+msgstr ""
+
+msgid ""
+"Cannot create a changeset query including both the query parameters ''uid'' "
+"and ''display_name''"
+msgstr ""
+
+msgid "Unsupported parameter ''{0}'' in changeset query string"
+msgstr ""
+
+msgid "Unexpected format for port number in preference ''{0}''. Got ''{1}''."
+msgstr ""
+
+msgid "The proxy will not be used."
+msgstr ""
+
+msgid "Illegal port number in preference ''{0}''. Got {1}."
+msgstr ""
+
+msgid ""
+"Unexpected value for preference ''{0}'' found. Got ''{1}''. Will use no "
+"proxy."
+msgstr ""
+
+msgid ""
+"Unexpected parameters for HTTP proxy. Got host ''{0}'' and port ''{1}''."
+msgstr ""
+
+msgid ""
+"Unexpected parameters for SOCKS proxy. Got host ''{0}'' and port ''{1}''."
+msgstr ""
+
+msgid ""
+"Connection to proxy ''{0}'' for URI ''{1}'' failed. Exception was: {2}"
+msgstr ""
+
+msgid ""
+"The JVM is not configured to lookup proxies from the system settings. The "
+"property ''java.net.useSystemProxies'' was missing at startup time.  Will "
+"not use a proxy."
+msgstr ""
+
+msgid "Parsing response from server..."
+msgstr ""
+
+msgid "Unexpected XML element with name ''{0}''"
+msgstr ""
+
+msgid "Could not export ''{0}''."
+msgstr ""
+
+msgid "Could not import ''{0}''."
+msgstr ""
+
+msgid "Could not import files."
+msgstr ""
+
+msgid "<html>Could not read file ''{0}''.<br>Error is:<br>{1}</html>"
+msgstr ""
+
+msgid "<html>Could not read files.<br>Error is:<br>{0}</html>"
+msgstr ""
+
+msgid "GeoJSON Files"
+msgstr ""
+
+msgid "Projected GeoJSON Files"
+msgstr ""
+
+msgid "Layer ''{0}'' not supported"
+msgstr ""
+
+msgid ""
+"Note: GPL is not compatible with the OSM license. Do not upload GPL licensed "
+"tracks."
+msgstr ""
+
+msgid "GPS track description"
+msgstr ""
+
+msgid "Add author information"
+msgstr ""
+
+msgid "Real name"
+msgstr ""
+
+msgid "E-Mail"
+msgstr ""
+
+msgid "Copyright (URL)"
+msgstr ""
+
+msgid "Predefined"
+msgstr ""
+
+msgid "Copyright year"
+msgstr ""
+
+msgid "Keywords"
+msgstr ""
+
+msgid "Export options"
+msgstr ""
+
+msgid "Export and Save"
+msgstr ""
+
+msgid ""
+"Error while exporting {0}:\n"
+"{1}"
+msgstr ""
+
+msgid "Choose a predefined license"
+msgstr ""
+
+msgid "GPX Files"
+msgstr ""
+
+msgid "Parsing data for layer ''{0}'' failed"
+msgstr ""
+
+msgid ""
+"Error occurred while parsing gpx data for layer ''{0}''. Only a part of the "
+"file will be available."
+msgstr ""
+
+msgid ""
+"Error occurred while parsing gpx file ''{0}''. Only a part of the file will "
+"be available."
+msgstr ""
+
+msgid "Parse error: invalid document structure for GPX document."
+msgstr ""
+
+msgid "(at line {0}, column {1})"
+msgstr ""
+
+msgid "Unknown mode {0}."
+msgstr ""
+
+msgid "Image Files"
+msgstr ""
+
+msgid "folder"
+msgstr ""
+
+msgid "Looking for image files"
+msgstr ""
+
+msgid "No image files found."
+msgstr ""
+
+msgid "get number of unread messages"
+msgstr ""
+
+msgid "You have {0} unread message."
+msgid_plural "You have {0} unread messages."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click here to see your inbox."
+msgstr ""
+
+msgid "Message notifier"
+msgstr ""
+
+msgid "{0} not available (offline mode)"
+msgstr ""
+
+msgid ""
+"No primitive with id {0} in local dataset. Cannot infer primitive type."
+msgstr ""
+
+msgid "Fetching a package of nodes from ''{0}''"
+msgstr ""
+
+msgid "Fetching a package of ways from ''{0}''"
+msgstr ""
+
+msgid "Fetching a package of relations from ''{0}''"
+msgstr ""
+
+msgid "Downloading {0} object from ''{1}''"
+msgid_plural "Downloading {0} objects from ''{1}''"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"Server replied with response code 404, retrying with an individual request "
+"for each object."
+msgstr ""
+
+msgid "Downloading OSM data..."
+msgstr ""
+
+msgid "Fetching node with id {0} from ''{1}''"
+msgstr ""
+
+msgid "Fetching way with id {0} from ''{1}''"
+msgstr ""
+
+msgid "Fetching relation with id {0} from ''{1}''"
+msgstr ""
+
+msgid "Server replied with response code 404 for id {0}. Skipping."
+msgstr ""
+
+msgid "NMEA-0183 Files"
+msgstr ""
+
+msgid "Coordinates imported: {0}"
+msgstr ""
+
+msgid "Malformed sentences: {0}"
+msgstr ""
+
+msgid "Checksum errors: {0}"
+msgstr ""
+
+msgid "Unknown sentences: {0}"
+msgstr ""
+
+msgid "Zero coordinates: {0}"
+msgstr ""
+
+msgid "NMEA import success:"
+msgstr ""
+
+msgid "NMEA import failure!"
+msgstr ""
+
+msgid "Note Files"
+msgstr ""
+
+msgid "OSM API"
+msgstr ""
+
+msgid "JOSM website"
+msgstr ""
+
+msgid "Unable to access ''{0}'': {1} not available (offline mode)"
+msgstr ""
+
+msgid "Unable to initialize OSM API."
+msgstr ""
+
+msgid "This version of JOSM is incompatible with the configured server."
+msgstr ""
+
+msgid ""
+"It supports protocol version 0.6, while the server says it supports {0} to "
+"{1}."
+msgstr ""
+
+msgid "Removed layer {0} because it is not allowed by the configured API."
+msgstr ""
+
+msgid "Unexpected format of ID replied by the server. Got ''{0}''."
+msgstr ""
+
+msgid ""
+"Unexpected format of new version of modified primitive ''{0}''. Got ''{1}''."
+msgstr ""
+
+msgid "Creating changeset..."
+msgstr ""
+
+msgid "Successfully opened changeset {0}"
+msgstr ""
+
+msgid "Changeset ID > 0 expected. Got {0}."
+msgstr ""
+
+msgid "Updating changeset..."
+msgstr ""
+
+msgid "Updating changeset {0}..."
+msgstr ""
+
+msgid "Closing changeset..."
+msgstr ""
+
+msgid "No changeset present for diff upload."
+msgstr ""
+
+msgid "Preparing upload request..."
+msgstr ""
+
+msgid "Waiting 10 seconds ... "
+msgstr ""
+
+msgid "Starting retry {0} of {1} in {2} seconds ..."
+msgstr ""
+
+msgid "OK - trying again."
+msgstr ""
+
+msgid "Starting retry {0} of {1}."
+msgstr ""
+
+msgid "Current changeset is null. Cannot upload data."
+msgstr ""
+
+msgid "ID of current changeset > 0 required. Current ID is {0}."
+msgstr ""
+
+msgid "Open changeset expected. Got closed changeset with id {0}."
+msgstr ""
+
+msgid "Note upload failed"
+msgstr ""
+
+msgid "Error parsing note response from server"
+msgstr ""
+
+msgid "(Code={0})"
+msgstr ""
+
+msgid "The server replied an error with code {0}."
+msgstr ""
+
+msgid "OSM Server Files bzip2 compressed"
+msgstr ""
+
+msgid "Prolog of OsmChange document already written. Please write only once."
+msgstr ""
+
+msgid "Prolog of OsmChange document not written yet. Please write first."
+msgstr ""
+
+msgid "OsmChange File"
+msgstr ""
+
+msgid "File ''{0}'' does not exist."
+msgstr ""
+
+msgid "No data found in file {0}."
+msgstr ""
+
+msgid "Open OsmChange file"
+msgstr ""
+
+msgid "Unsupported version: {0}"
+msgstr ""
+
+msgid ""
+"Unsupported start element ''{0}'' in changeset content at position "
+"({1},{2}). Skipping."
+msgstr ""
+
+msgid ""
+"Illegal document structure. Found node, way, or relation outside of "
+"''create'', ''modify'', or ''delete''."
+msgstr ""
+
+msgid ""
+"Unsupported end element ''{0}'' in changeset content at position ({1},{2}). "
+"Skipping."
+msgstr ""
+
+msgid "Parsing changeset content ..."
+msgstr ""
+
+msgid "Illegal boolean value for attribute ''{0}''. Got ''{1}''."
+msgstr ""
+
+msgid "Illegal value for attribute ''{0}''. Got ''{1}''."
+msgstr ""
+
+msgid "Illegal numeric value for attribute ''{0}''. Got ''{1}''."
+msgstr ""
+
+msgid "Missing mandatory attribute ''{0}'' of XML element {1}."
+msgstr ""
+
+msgid "Undefined element ''{0}'' found in input stream. Aborting."
+msgstr ""
+
+msgid "Parsing list of changesets..."
+msgstr ""
+
+msgid "Failed to sign a HTTP connection with an OAuth Authentication header"
+msgstr ""
+
+msgid "Unexpected value for preference ''{0}''. Got ''{1}''."
+msgstr ""
+
+msgid "<html>An error occurred while saving.<br>Error is:<br>{0}</html>"
+msgstr ""
+
+msgid ""
+"<html>An error occurred while restoring backup file.<br>Error "
+"is:<br>{0}</html>"
+msgstr ""
+
+msgid "OSM Server Files gzip compressed"
+msgstr ""
+
+msgid "Parsing OSM history data ..."
+msgstr ""
+
+msgid "OSM Server Files"
+msgstr ""
+
+msgid "Invalid dataset"
+msgstr ""
+
+msgid "No data found for layer ''{0}''."
+msgstr ""
+
+msgid "No data found in file ''{0}''."
+msgstr ""
+
+msgid "Open OSM file"
+msgstr ""
+
+msgid "Reading was canceled"
+msgstr ""
+
+msgid ""
+"Missing mandatory attributes on element ''bounds''. Got "
+"minlon=''{0}'',minlat=''{1}'',maxlon=''{3}'',maxlat=''{4}'', origin=''{5}''."
+msgstr ""
+
+msgid "Deleted way {0} contains nodes"
+msgstr ""
+
+msgid "Missing mandatory attribute ''{0}'' on <nd> of way {1}."
+msgstr ""
+
+msgid "Illegal value of attribute ''ref'' of element <nd>. Got {0}."
+msgstr ""
+
+msgid "Deleted relation {0} contains members"
+msgstr ""
+
+msgid "Missing attribute ''ref'' on member in relation {0}."
+msgstr ""
+
+msgid ""
+"Illegal value for attribute ''ref'' on member in relation {0}. Got {1}"
+msgstr ""
+
+msgid "Missing attribute ''type'' on member {0} in relation {1}."
+msgstr ""
+
+msgid ""
+"Illegal value for attribute ''type'' on member {0} in relation {1}. Got {2}."
+msgstr ""
+
+msgid "Incomplete <member> specification with ref=0"
+msgstr ""
+
+msgid "Missing key or value attribute in tag."
+msgstr ""
+
+msgid "Undefined element ''{0}'' found in input stream. Skipping."
+msgstr ""
+
+msgid "Illegal object with ID=0."
+msgstr ""
+
+msgid ""
+"Illegal value for attribute ''version'' on OSM primitive with ID {0}. Got "
+"{1}."
+msgstr ""
+
+msgid ""
+"Normalizing value of attribute ''version'' of element {0} to {2}, API "
+"version is ''{3}''. Got {1}."
+msgstr ""
+
+msgid "Unknown or unsupported API version. Got {0}."
+msgstr ""
+
+msgid "Missing attribute ''version'' on OSM primitive with ID {0}."
+msgstr ""
+
+msgid ""
+"Illegal value for attribute ''changeset'' on new object {1}. Got {0}. "
+"Resetting to 0."
+msgstr ""
+
+msgid "Illegal value for attribute ''changeset''. Got {0}."
+msgstr ""
+
+msgid "Missing required attribute ''{0}''."
+msgstr ""
+
+msgid "Illegal long value for attribute ''{0}''. Got ''{1}''."
+msgstr ""
+
+msgid "{0} bytes have been read"
+msgstr ""
+
+msgid "Prepare OSM data..."
+msgstr ""
+
+msgid "Parsing OSM data..."
+msgstr ""
+
+msgid "Preparing data set..."
+msgstr ""
+
+msgid "Line {0} column {1}: "
+msgstr ""
+
+msgid "Downloading referring ways ..."
+msgstr ""
+
+msgid "Downloading referring relations ..."
+msgstr ""
+
+msgid "Reading changesets..."
+msgstr ""
+
+msgid "Downloading changesets ..."
+msgstr ""
+
+msgid "Reading changeset {0} ..."
+msgstr ""
+
+msgid "Downloading changeset {0} ..."
+msgstr ""
+
+msgid "Downloading {0} changeset ..."
+msgid_plural "Downloading {0} changesets ..."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "({0}/{1}) Downloading changeset {2} ..."
+msgstr ""
+
+msgid "Downloading content for changeset {0} ..."
+msgstr ""
+
+msgid "Downloading history..."
+msgstr ""
+
+msgid "Contacting Server..."
+msgstr ""
+
+msgid "Downloading OSM notes..."
+msgstr ""
+
+msgid "Failed to open connection to API {0}."
+msgstr ""
+
+msgid ""
+"Could not connect to the OSM server. Please check your internet connection."
+msgstr ""
+
+msgid "Reading error text failed."
+msgstr ""
+
+msgid "XML tag <user> is missing."
+msgstr ""
+
+msgid "Missing attribute ''{0}'' on XML tag ''{1}''."
+msgstr ""
+
+msgid "Illegal value for attribute ''{0}'' on XML tag ''{1}''. Got {2}."
+msgstr ""
+
+msgid "Reading user info ..."
+msgstr ""
+
+msgid "Starting to upload with one request per primitive ..."
+msgstr ""
+
+msgid "{0}% ({1}/{2}), {3} left. Uploading node ''{4}'' (id: {5})"
+msgstr ""
+
+msgid "{0}% ({1}/{2}), {3} left. Uploading way ''{4}'' (id: {5})"
+msgstr ""
+
+msgid "{0}% ({1}/{2}), {3} left. Uploading relation ''{4}'' (id: {5})"
+msgstr ""
+
+msgid "Starting to upload in one request ..."
+msgstr ""
+
+msgid "Value >0 expected for parameter ''{0}'', got {1}"
+msgstr ""
+
+msgid "Starting to upload in chunks..."
+msgstr ""
+
+msgid "({0}/{1}) Uploading {2} object..."
+msgid_plural "({0}/{1}) Uploading {2} objects..."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Uploading data ..."
+msgstr ""
+
+msgid "Unexpected id 0 for osm primitive found"
+msgstr ""
+
+msgid "OSM Server Files zip compressed"
+msgstr ""
+
+msgid "WMS Files (*.wms)"
+msgstr ""
+
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
+msgid ""
+"<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
+"is stored in plain text in the JOSM preferences file. Furthermore, it is "
+"transferred <strong>unencrypted</strong> in every request sent to the OSM "
+"server. <strong>Do not use a valuable password.</strong></p></body></html>"
+msgstr ""
+
+msgid "Save user and password (unencrypted)"
+msgstr ""
+
+msgid "<delete from {0} objects>"
+msgstr ""
+
+msgid "Old values of"
+msgstr ""
+
+msgid "Add tags to selected objects"
+msgstr ""
+
+msgid "Add selected tags"
+msgstr ""
+
+msgid "Add all tags"
+msgstr ""
+
+msgid "Add checked tags to selected objects"
+msgstr ""
+
+msgid "Shift+Enter: Add all tags to selected objects"
+msgstr ""
+
+msgid "Assume"
+msgstr ""
+
+msgid "Existing values"
+msgstr ""
+
+msgid "Enable the checkbox to accept the value"
+msgstr ""
+
+msgid "Accept all tags from {0} for this session"
+msgstr ""
+
+msgid "Load data from API"
+msgstr ""
+
+msgid "Import data from URL"
+msgstr ""
+
+msgid "Open local files"
+msgstr ""
+
+msgid "Load imagery layers"
+msgstr ""
+
+msgid "Change the selection"
+msgstr ""
+
+msgid "Change the viewport"
+msgstr ""
+
+msgid "Create new objects"
+msgstr ""
+
+msgid "Read protocol version"
+msgstr ""
+
+msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
+msgstr ""
+
+msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
+msgstr ""
+
+msgid "RemoteControl::Accepting remote connections on {0}:{1}"
+msgstr ""
+
+msgid "RemoteControl::Server {0}:{1} stopped."
+msgstr ""
+
+msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
+msgstr ""
+
+msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
+msgstr ""
+
+msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
+msgstr ""
+
+msgid "Remote Control has been asked to create a new node."
+msgstr ""
+
+msgid "There is no layer opened to add node"
+msgstr ""
+
+msgid "Remote Control has been asked to create a new way."
+msgstr ""
+
+msgid "Invalid coordinates: {0}"
+msgstr ""
+
+msgid "There is no layer opened to add way"
+msgstr ""
+
+msgid "Add way"
+msgstr ""
+
+msgid ""
+"Remote Control has been asked to report its supported features. This enables "
+"web sites to guess a running JOSM version"
+msgstr ""
+
+msgid ""
+"Remote Control has been asked to load an imagery layer from the following "
+"URL:"
+msgstr ""
+
+msgid "Remote imagery"
+msgstr ""
+
+msgid "Remote Control has been asked to import data from the following URL:"
+msgstr ""
+
+msgid "Remote Control has been asked to load data from the API."
+msgstr ""
+
+msgid "The latitudes must be between {0} and {1}"
+msgstr ""
+
+msgid "The longitudes must be between {0} and {1}"
+msgstr ""
+
+msgid "The minima must be less than the maxima"
+msgstr ""
+
+msgid "Remote Control has been asked to load the following data:"
+msgstr ""
+
+msgid "Loading data"
+msgstr ""
+
+msgid ""
+"Remote Control has been asked to load objects (specified by their id) from "
+"the API."
+msgstr ""
+
+msgid "Remote Control has been asked to open a local file."
+msgstr ""
+
+msgid "Do you want to allow this?"
+msgstr ""
+
+msgid "Confirm Remote Control action"
+msgstr ""
+
+msgid ""
+"Remote Control has been asked to report its protocol version. This enables "
+"web sites to detect a running JOSM."
+msgstr ""
+
+msgid ""
+"Version ''{0}'' of meta data for geoimage layer is not supported. Expected: "
+"0.1"
+msgstr ""
+
+msgid "Data:"
+msgstr ""
+
+msgid "local file"
+msgstr ""
+
+msgid "Link to a GPX file on your local disk."
+msgstr ""
+
+msgid "include"
+msgstr ""
+
+msgid "Include GPX data in the .joz session file."
+msgstr ""
+
+msgid "No file association"
+msgstr ""
+
+msgid "GPX data will be included in the session file."
+msgstr ""
+
+msgid ""
+"Version ''{0}'' of meta data for gpx track layer is not supported. Expected: "
+"0.1"
+msgstr ""
+
+msgid "File name expected for layer no. {0}"
+msgstr ""
+
+msgid ""
+"Version ''{0}'' of meta data for imagery layer is not supported. Expected: "
+"0.1"
+msgstr ""
+
+msgid ""
+"Version ''{0}'' of meta data for marker layer is not supported. Expected: 0.1"
+msgstr ""
+
+msgid "Layer contains unsaved data - save to file."
+msgstr ""
+
+msgid "Layer does not contain unsaved data."
+msgstr ""
+
+msgid "Link to a OSM data file on your local disk."
+msgstr ""
+
+msgid "Include OSM data in the .joz session file."
+msgstr ""
+
+msgid "OSM data will be included in the session file."
+msgstr ""
+
+msgid ""
+"Version ''{0}'' of meta data for osm data layer is not supported. Expected: "
+"0.1"
+msgstr ""
+
+msgid "Session file (*.jos, *.joz)"
+msgstr ""
+
+msgid "Unable to locate file  ''{0}''."
+msgstr ""
+
+msgid "Unsupported scheme ''{0}'' in URI ''{1}''."
+msgstr ""
+
+msgid "Unexpected root element ''{0}'' in session file"
+msgstr ""
+
+msgid "Version ''{0}'' of session file is not supported. Expected: 0.1"
+msgstr ""
+
+msgid "missing mandatory attribute ''index'' for element ''layer''"
+msgstr ""
+
+msgid "unexpected format of attribute ''index'' for element ''layer''"
+msgstr ""
+
+msgid "attribute ''index'' ({0}) for element ''layer'' must be unique"
+msgstr ""
+
+msgid "missing layer with index {0}"
+msgstr ""
+
+msgid "missing mandatory attribute ''name'' for element ''layer''"
+msgstr ""
+
+msgid "missing mandatory attribute ''type'' for element ''layer''"
+msgstr ""
+
+msgid "Unable to load layer"
+msgstr ""
+
+msgid ""
+"Cannot load layer of type ''{0}'' because no suitable importer was found."
+msgstr ""
+
+msgid ""
+"Cannot load layer {0} because it depends on layer {1} which has been skipped."
+msgstr ""
+
+msgid "Error loading layer"
+msgstr ""
+
+msgid "<html>Could not load layer {0} ''{1}''.<br>Error is:<br>{2}</html>"
+msgstr ""
+
+msgid "Skip layer and continue"
+msgstr ""
+
+msgid "expected .jos file inside .joz archive"
+msgstr ""
+
+msgid "Skip download"
+msgstr ""
+
+msgid "Download Plugin"
+msgstr ""
+
+msgid "Skip Download"
+msgstr ""
+
+msgid "JOSM version {0} required for plugin {1}."
+msgstr ""
+
+msgid "Download skipped"
+msgstr ""
+
+msgid ""
+"Cannot download plugin ''{0}''. Its download link is not known. Skipping "
+"download."
+msgstr ""
+
+msgid ""
+"Cannot download plugin ''{0}''. Its download link ''{1}'' is not a valid "
+"URL. Skipping download."
+msgstr ""
+
+msgid "Failed to create plugin directory ''{0}''"
+msgstr ""
+
+msgid "Downloading Plugin {0}..."
+msgstr ""
+
+msgid "An error occurred in plugin {0}"
+msgstr ""
+
+msgid "integrated into main program"
+msgstr ""
+
+msgid "replaced by new {0} plugin"
+msgstr ""
+
+msgid "no longer required"
+msgstr ""
+
+msgid "The following plugin is no longer necessary and has been deactivated:"
+msgid_plural ""
+"The following plugins are no longer necessary and have been deactivated:"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"<html>Loading of the plugin \"{0}\" was requested.<br>This plugin is no "
+"longer developed and very likely will produce errors.<br>It should be "
+"disabled.<br>Delete from preferences?</html>"
+msgstr ""
+
+msgid "Plugin update"
+msgstr ""
+
+msgid ""
+"You updated your JOSM software.<br>To prevent problems the plugins should be "
+"updated as well.<br><br>Update plugins now?"
+msgstr ""
+
+msgid "Last plugin update more than {0} days ago."
+msgstr ""
+
+msgid "Click to update the activated plugins"
+msgstr ""
+
+msgid "Skip update"
+msgstr ""
+
+msgid "Click to skip updating the activated plugins"
+msgstr ""
+
+msgid ""
+"Skipping plugin update after JOSM upgrade. Automatic update at startup is "
+"disabled."
+msgstr ""
+
+msgid ""
+"Skipping plugin update after elapsed update interval. Automatic update at "
+"startup is disabled."
+msgstr ""
+
+msgid ""
+"Running plugin update after JOSM upgrade. Automatic update at startup is "
+"enabled."
+msgstr ""
+
+msgid ""
+"Running plugin update after elapsed update interval. Automatic update at "
+"startup is disabled."
+msgstr ""
+
+msgid ""
+"Unexpected value ''{0}'' for preference ''{1}''. Assuming value ''ask''."
+msgstr ""
+
+msgid ""
+"Plugin {0} requires a plugin which was not found. The missing plugin is:"
+msgid_plural ""
+"Plugin {0} requires {1} plugins which were not found. The missing plugins "
+"are:"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
+"{2}.<br>You have to update JOSM in order to use this plugin.</html>"
+msgstr ""
+
+msgid "Could not load plugin {0}. Delete from preferences?"
+msgstr ""
+
+msgid "loading plugin ''{0}'' (version {1})"
+msgstr ""
+
+msgid ""
+"<html>Could not load plugin {0} because the plugin<br>main class ''{1}'' was "
+"not found.<br>Delete from preferences?</html>"
+msgstr ""
+
+msgid "Loading plugins ..."
+msgstr ""
+
+msgid "Checking plugin preconditions..."
+msgstr ""
+
+msgid "Loading plugin ''{0}''..."
+msgstr ""
+
+msgid "JOSM could not find information about the following plugin:"
+msgid_plural "JOSM could not find information about the following plugins:"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "The plugin is not going to be loaded."
+msgid_plural "The plugins are not going to be loaded."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Determine plugins to load..."
+msgstr ""
+
+msgid "Removing deprecated plugins..."
+msgstr ""
+
+msgid "Removing unmaintained plugins..."
+msgstr ""
+
+msgid "Updating the following plugin has failed:"
+msgid_plural "Updating the following plugins has failed:"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"Please open the Preference Dialog after JOSM has started and try to update "
+"it manually."
+msgid_plural ""
+"Please open the Preference Dialog after JOSM has started and try to update "
+"them manually."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Plugin update failed"
+msgstr ""
+
+msgid "Failed to find plugin {0}"
+msgstr ""
+
+msgid "Failed to download plugin information list"
+msgstr ""
+
+msgid "Disable plugin"
+msgstr ""
+
+msgid "Click to delete the plugin ''{0}''"
+msgstr ""
+
+msgid "Keep plugin"
+msgstr ""
+
+msgid "Click to keep the plugin ''{0}''"
+msgstr ""
+
+msgid "Failed to delete outdated plugin ''{0}''."
+msgstr ""
+
+msgid ""
+"Failed to install already downloaded plugin ''{0}''. Skipping installation. "
+"JOSM is still going to load the old plugin version."
+msgstr ""
+
+msgid ""
+"Failed to install plugin ''{0}'' from temporary download file ''{1}''. {2}"
+msgstr ""
+
+msgid ""
+"Failed to install plugin ''{0}'' from temporary download file ''{1}''. "
+"Renaming failed."
+msgstr ""
+
+msgid "Update plugin"
+msgstr ""
+
+msgid "Click to update the plugin ''{0}''"
+msgstr ""
+
+msgid "Click to disable the plugin ''{0}''"
+msgstr ""
+
+msgid ""
+"An unexpected exception occurred that may have come from the ''{0}'' plugin."
+msgstr ""
+
+msgid "According to the information within the plugin, the author is {0}."
+msgstr ""
+
+msgid ""
+"Try updating to the newest version of this plugin before reporting a bug."
+msgstr ""
+
+msgid ""
+"The plugin has been removed from the configuration. Please restart JOSM to "
+"unload the plugin."
+msgstr ""
+
+msgid "Plugin information"
+msgstr ""
+
+msgid "no description available"
+msgstr ""
+
+msgid ""
+"Do not ask again and remember my decision (go to Preferences->Plugins to "
+"change it later)"
+msgstr ""
+
+msgid "Invalid jar file ''{0}''"
+msgstr ""
+
+msgid "The plugin file ''{0}'' does not include a Manifest."
+msgstr ""
+
+msgid "Invalid URL ''{0}'' in plugin {1}"
+msgstr ""
+
+msgid "Invalid plugin description ''{0}'' in plugin {1}"
+msgstr ""
+
+msgid "Invalid plugin main version ''{0}'' in plugin {1}"
+msgstr ""
+
+msgid "Missing plugin main version in plugin {0}"
+msgstr ""
+
+msgid "More info..."
+msgstr ""
+
+msgid "<b>Plugin provided by an external source:</b> {0}"
+msgstr ""
+
+msgid "Failed to create plugin information from manifest for plugin ''{0}''"
+msgstr ""
+
+msgid "Illegal entry in plugin list."
+msgstr ""
+
+msgid "Reading local plugin information.."
+msgstr ""
+
+msgid "Processing plugin site cache files..."
+msgstr ""
+
+msgid "Processing file ''{0}''"
+msgstr ""
+
+msgid "Failed to scan file ''{0}'' for plugin information. Skipping."
+msgstr ""
+
+msgid "Processing plugin files..."
+msgstr ""
+
+msgid "Download plugin list..."
+msgstr ""
+
+msgid "Downloading plugin list from ''{0}''"
+msgstr ""
+
+msgid "Plugin list download error"
+msgstr ""
+
+msgid "JOSM failed to download plugin list:"
+msgstr ""
+
+msgid "Details:"
+msgstr ""
+
+msgid ""
+"Failed to create plugin directory ''{0}''. Cannot cache plugin list from "
+"plugin site ''{1}''."
+msgstr ""
+
+msgid "Writing plugin list to local cache ''{0}''"
+msgstr ""
+
+msgid "Parsing plugin list from site ''{0}''"
+msgstr ""
+
+msgid ""
+"Failed to parse plugin list document from site ''{0}''. Skipping site. "
+"Exception was: {1}"
+msgstr ""
+
+msgid "Processing plugin list from site ''{0}''"
+msgstr ""
+
+msgid "This is after the end of the recording"
+msgstr ""
+
+msgid "unspecified reason"
+msgstr ""
+
+msgid "Error playing sound"
+msgstr ""
+
+msgid "Do nothing"
+msgstr ""
+
+msgid "Report Bug"
+msgstr ""
+
+msgid ""
+"An unexpected exception occurred.<br>This is always a coding error. If you "
+"are running the latest<br>version of JOSM, please consider being kind and "
+"file a bug report."
+msgstr ""
+
+msgid "Update JOSM"
+msgstr ""
+
+msgid ""
+"An unexpected exception occurred. This is always a coding "
+"error.<br><br>However, you are running an old version of JOSM "
+"({0}),<br>instead of using the current tested version "
+"(<b>{1}</b>).<br><br><b>Please update JOSM</b> before considering to file a "
+"bug report."
+msgstr ""
+
+msgid "Unexpected Exception"
+msgstr ""
+
+msgid "Suppress further error dialogs for this session."
+msgstr ""
+
+msgid ""
+"You have encountered an error in JOSM. Before you file a bug report make "
+"sure you have updated to the latest version of JOSM here:"
+msgstr ""
+
+msgid ""
+"You should also update your plugins. If neither of those help please file a "
+"bug report in our bugtracker using this link:"
+msgstr ""
+
+msgid ""
+"There the error information provided below should already be filled in for "
+"you. Please include information on how to reproduce the error and try to "
+"supply as much detail as possible."
+msgstr ""
+
+msgid ""
+"Alternatively, if that does not work you can manually fill in the "
+"information below at this URL:"
+msgstr ""
+
+msgid "(The text has already been copied to your clipboard.)"
+msgstr ""
+
+msgid "You have encountered a bug in JOSM"
+msgstr ""
+
+msgid ""
+"<html>Failed to initialize communication with the OSM server {0}.<br>Check "
+"the server URL in your preferences and your internet connection."
+msgstr ""
+
+msgid ""
+"<html>Failed to authenticate at the OSM server ''{0}''.<br>You are using "
+"OAuth to authenticate but currently there is no<br>OAuth Access Token "
+"configured.<br>Please open the Preferences Dialog and generate or enter an "
+"Access Token.</html>"
+msgstr ""
+
+msgid ""
+"<strong>Failed</strong> to delete <strong>node {0}</strong>. It is still "
+"referred to by node {1}.<br>Please load the node, remove the reference to "
+"the node, and upload again."
+msgid_plural ""
+"<strong>Failed</strong> to delete <strong>node {0}</strong>. It is still "
+"referred to by nodes {1}.<br>Please load the nodes, remove the reference to "
+"the node, and upload again."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"<strong>Failed</strong> to delete <strong>node {0}</strong>. It is still "
+"referred to by way {1}.<br>Please load the way, remove the reference to the "
+"node, and upload again."
+msgid_plural ""
+"<strong>Failed</strong> to delete <strong>node {0}</strong>. It is still "
+"referred to by ways {1}.<br>Please load the ways, remove the reference to "
+"the node, and upload again."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"<strong>Failed</strong> to delete <strong>node {0}</strong>. It is still "
+"referred to by relation {1}.<br>Please load the relation, remove the "
+"reference to the node, and upload again."
+msgid_plural ""
+"<strong>Failed</strong> to delete <strong>node {0}</strong>. It is still "
+"referred to by relations {1}.<br>Please load the relations, remove the "
+"reference to the node, and upload again."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"<strong>Failed</strong> to delete <strong>way {0}</strong>. It is still "
+"referred to by node {1}.<br>Please load the node, remove the reference to "
+"the way, and upload again."
+msgid_plural ""
+"<strong>Failed</strong> to delete <strong>way {0}</strong>. It is still "
+"referred to by nodes {1}.<br>Please load the nodes, remove the reference to "
+"the way, and upload again."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"<strong>Failed</strong> to delete <strong>way {0}</strong>. It is still "
+"referred to by way {1}.<br>Please load the way, remove the reference to the "
+"way, and upload again."
+msgid_plural ""
+"<strong>Failed</strong> to delete <strong>way {0}</strong>. It is still "
+"referred to by ways {1}.<br>Please load the ways, remove the reference to "
+"the way, and upload again."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"<strong>Failed</strong> to delete <strong>way {0}</strong>. It is still "
+"referred to by relation {1}.<br>Please load the relation, remove the "
+"reference to the way, and upload again."
+msgid_plural ""
+"<strong>Failed</strong> to delete <strong>way {0}</strong>. It is still "
+"referred to by relations {1}.<br>Please load the relations, remove the "
+"reference to the way, and upload again."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"<strong>Failed</strong> to delete <strong>relation {0}</strong>. It is still "
+"referred to by node {1}.<br>Please load the node, remove the reference to "
+"the relation, and upload again."
+msgid_plural ""
+"<strong>Failed</strong> to delete <strong>relation {0}</strong>. It is still "
+"referred to by nodes {1}.<br>Please load the nodes, remove the reference to "
+"the relation, and upload again."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"<strong>Failed</strong> to delete <strong>relation {0}</strong>. It is still "
+"referred to by way {1}.<br>Please load the way, remove the reference to the "
+"relation, and upload again."
+msgid_plural ""
+"<strong>Failed</strong> to delete <strong>relation {0}</strong>. It is still "
+"referred to by ways {1}.<br>Please load the ways, remove the reference to "
+"the relation, and upload again."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"<strong>Failed</strong> to delete <strong>relation {0}</strong>. It is still "
+"referred to by relation {1}.<br>Please load the relation, remove the "
+"reference to the relation, and upload again."
+msgid_plural ""
+"<strong>Failed</strong> to delete <strong>relation {0}</strong>. It is still "
+"referred to by relations {1}.<br>Please load the relations, remove the "
+"reference to the relation, and upload again."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"<html>Uploading to the server <strong>failed</strong> because your "
+"current<br>dataset violates a precondition.<br>The error message "
+"is:<br>{0}</html>"
+msgstr ""
+
+msgid ""
+"<html>Authentication at the OSM server with the username ''{0}'' "
+"failed.<br>Please check the username and the password in the JOSM "
+"preferences.</html>"
+msgstr ""
+
+msgid ""
+"<html>Authentication at the OSM server with the OAuth token ''{0}'' "
+"failed.<br>Please launch the preferences dialog and retrieve another OAuth "
+"token.</html>"
+msgstr ""
+
+msgid ""
+"<html>Authorisation at the OSM server failed.<br>The server reported the "
+"following error:<br>''{0}''</html>"
+msgstr ""
+
+msgid "<html>Authorisation at the OSM server failed.<br></html>"
+msgstr ""
+
+msgid ""
+"<html>Authorisation at the OSM server with the OAuth token ''{0}'' "
+"failed.<br>The token is not authorised to access the protected "
+"resource<br>''{1}''.<br>Please launch the preferences dialog and retrieve "
+"another OAuth token.</html>"
+msgstr ""
+
+msgid ""
+"<html>Communication with the OSM server ''{0}'' timed out. Please retry "
+"later.</html>"
+msgstr ""
+
+msgid "no error message available"
+msgstr ""
+
+msgid ""
+"<html>Communication with the OSM server ''{0}''failed. The server "
+"replied<br>the following error code and the following error "
+"message:<br><strong>Error code:<strong> {1}<br><strong>Error message "
+"(untranslated)</strong>: {2}</html>"
+msgstr ""
+
+msgid ""
+"<html>Closing of changeset <strong>{0}</strong> failed <br>because it has "
+"already been closed."
+msgstr ""
+
+msgid ""
+"<html>Closing of changeset <strong>{0}</strong> failed<br> because it has "
+"already been closed on {1}."
+msgstr ""
+
+msgid ""
+"<html>The server reported that it has detected a conflict.<br>Error message "
+"(untranslated):<br>{0}</html>"
+msgstr ""
+
+msgid "<html>The server reported that it has detected a conflict."
+msgstr ""
+
+msgid ""
+"<html>Failed to upload to changeset <strong>{0}</strong><br>because it has "
+"already been closed on {1}."
+msgstr ""
+
+msgid ""
+"<html>Failed to open a connection to the remote server<br>''{0}''<br>for "
+"security reasons. This is most likely because you are running<br>in an "
+"applet and because you did not load your applet from ''{1}''."
+msgstr ""
+
+msgid ""
+"<html>Failed to open a connection to the remote server<br>''{0}''.<br>Please "
+"check your internet connection."
+msgstr ""
+
+msgid ""
+"<html>Failed to upload data to or download data from<br>''{0}''<br>due to a "
+"problem with transferring data.<br>Details (untranslated): {1}</html>"
+msgstr ""
+
+msgid ""
+"<html>Failed to download data. Its format is either unsupported, ill-formed, "
+"and/or inconsistent.<br><br>Details (untranslated): {0}</html>"
+msgstr ""
+
+msgid "<html>Failed to download data.<br><br>Details: {0}</html>"
+msgstr ""
+
+msgid ""
+"<html>The OSM server<br>''{0}''<br>reported an internal server "
+"error.<br>This is most likely a temporary problem. Please try again later."
+msgstr ""
+
+msgid "The OSM server ''{0}'' reported a bad request.<br>"
+msgstr ""
+
+msgid ""
+"The area you tried to download is too big or your request was too "
+"large.<br>Either request a smaller area or use an export file provided by "
+"the OSM community."
+msgstr ""
+
+msgid "<br>Error message(untranslated): {0}"
+msgstr ""
+
+msgid ""
+"The OSM server ''{0}'' does not know about an object<br>you tried to read, "
+"update, or delete. Either the respective object<br>does not exist on the "
+"server or you are using an invalid URL to access<br>it. Please carefully "
+"check the server''s address ''{0}'' for typos."
+msgstr ""
+
+msgid ""
+"<html>Failed to open a connection to the remote server<br>''{0}''.<br>Host "
+"name ''{1}'' could not be resolved. <br>Please check the API URL in your "
+"preferences and your internet connection."
+msgstr ""
+
+msgid ""
+"<html>The server reports that an object is deleted.<br><strong>Uploading "
+"failed</strong> if you tried to update or delete this object.<br> "
+"<strong>Downloading failed</strong> if you tried to download this "
+"object.<br><br>The error message is:<br>{0}</html>"
+msgstr ""
+
+msgid "Unable to find translation for the locale {0}. Reverting to {1}."
+msgstr ""
+
+msgid ""
+"Fatal: failed to locate image ''{0}''. This is a serious configuration "
+"problem. JOSM will stop working."
+msgstr ""
+
+msgid "Failed to locate image ''{0}''"
+msgstr ""
+
+msgid "Failed to handle zip file ''{0}''. Exception was: {1}"
+msgstr ""
+
+msgid ""
+"Failed to access directory ''{0}'' for security reasons. Exception was: {1}"
+msgstr ""
+
+msgid "{0}... [please type its number]"
+msgstr ""
+
+msgid ""
+"Failed to open URL. There is currently no platform set. Please set a "
+"platform first."
+msgstr ""
+
+msgid "Opening URL: {0}"
+msgstr ""
+
+msgid "zoom"
+msgstr ""
+
+msgid "latitude"
+msgstr ""
+
+msgid "longitude"
+msgstr ""
+
+msgid "URL does not contain {0}/{1}/{2}"
+msgstr ""
+
+msgid "URL does not contain valid {0}"
+msgstr ""
+
+msgid "reserved"
+msgstr ""
+
+msgid "Outdated Java version"
+msgstr ""
+
+msgid "Update Java"
+msgstr ""
+
+msgid "You are running version {0} of Java."
+msgstr ""
+
+msgid "April 2015"
+msgstr ""
+
+msgid ""
+"This version is no longer supported by {0} since {1} and is not recommended "
+"for use."
+msgstr ""
+
+msgid ""
+"JOSM will soon stop working with this version; we highly recommend you to "
+"update to Java {0}."
+msgstr ""
+
+msgid "Would you like to update now ?"
+msgstr ""
+
+msgid ""
+"A previous version of JOSM has installed a custom certificate in order to "
+"provide HTTPS support for Remote Control:"
+msgstr ""
+
+msgid ""
+"It appears it could be an important <b>security risk</b>.<br><br>You are now "
+"going to be prompted by Windows to remove this insecure certificate.<br>For "
+"your own safety, <b>please click Yes</b> in next dialog."
+msgstr ""
+
+msgid "Removing insecure certificate from {0} keystore: {1}"
+msgstr ""
+
+msgid "Unable to remove insecure certificate from keystore: {0}"
+msgstr ""
+
+msgid "JOSM localhost certificate found in {0} keystore: {1}"
+msgstr ""
+
+msgid ""
+"Remote Control is configured to provide HTTPS support.<br>This requires to "
+"add a custom certificate generated by JOSM to the Windows Root CA "
+"store.<br><br>You are now going to be prompted by Windows to confirm this "
+"operation.<br>To enable proper HTTPS support, <b>please click Yes</b> in "
+"next dialog.<br><br>If unsure, you can also click No then disable HTTPS "
+"support in Remote Control preferences."
+msgstr ""
+
+msgid "HTTPS support in Remote Control"
+msgstr ""
+
+msgid "Adding JOSM localhost certificate to {0} keystore"
+msgstr ""
+
+msgid "Silent shortcut conflict: ''{0}'' moved by ''{1}'' to ''{2}''."
+msgstr ""
+
+msgid "There was {0} tag found in the buffer, it is suspicious!"
+msgid_plural "There were {0} tags found in the buffer, it is suspicious!"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Key is too long (max {0} characters):"
+msgstr ""
+
+msgid "Suspicious characters in key:"
+msgstr ""
+
+msgid "Value is too long (max {0} characters):"
+msgstr ""
+
+msgid "Do you want to paste these tags?"
+msgstr ""
+
+msgid "Clear buffer"
+msgstr ""
+
+msgid "Ignore warnings"
+msgstr ""
+
+msgid ""
+"<html><p> Sorry, it is impossible to paste tags from buffer. It does not "
+"contain any JOSM object or suitable text. </p></html>"
+msgstr ""
+
+msgid "ms"
+msgstr ""
+
+msgid "s"
+msgstr ""
+
+msgid "min"
+msgstr ""
+
+msgid "h"
+msgstr ""
+
+msgid "day"
+msgid_plural "days"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
+"geometry from preferences."
+msgstr ""
+
+msgid ""
+"Preference with key ''{0}'' does not provide an int value for ''{1}''. Got "
+"{2}. Cannot restore window geometry from preferences."
+msgstr ""
+
+msgid ""
+"Failed to parse field ''{1}'' in preference with key ''{0}''. Exception was: "
+"{2}. Cannot restore window geometry from preferences."
+msgstr ""
+
+msgid ""
+"Preference with key ''{0}'' does not exist. Cannot restore window geometry "
+"from preferences."
+msgstr ""
+
+msgid "Ignoring malformed geometry: {0}"
+msgstr ""
+
+msgid "Failed to load XML schema."
+msgstr ""
+
+msgid ""
+"Error in search expression on position {0} - right side of or(|) expression "
+"must return set of primitives"
+msgstr ""
+
+msgid ""
+"Error in search expression on position {0} - left side of or(|) expression "
+"must return set of primitives"
+msgstr ""
+
+msgid ""
+"Error in search expression on position {0} - not(-) cannot be used in this "
+"context"
+msgstr ""
+
+msgid ""
+"Error in search expression on position {0} - expression must return "
+"different then current primitive"
+msgstr ""
+
+msgid "Unexpected token ({0}) on position {1}"
+msgstr ""
+
+msgid "Unexpected token on position {0}. Expected {1}, found {2}"
+msgstr ""
+
+msgid "Error while parsing search expression on position {0}"
+msgstr ""
+
+msgid "Unexpected char on {0}. Expected {1} found {2}"
+msgstr ""
+
+msgid "Expected search expression"
+msgstr ""
+
+msgid ""
+"You requested too many nodes (limit is 50,000). Either request a smaller "
+"area, or use planet.osm"
+msgstr ""
+
+msgid "Database offline for maintenance"
+msgstr ""
+
+msgid "You have downloaded too much data. Please try again later."
+msgstr ""
+
+msgid ""
+"The maximum bbox size is 0.25, and your request was too large. Either "
+"request a smaller area, or use planet.osm"
+msgstr ""
+
+msgid "JOSM-Trac login at josm.openstreetmap.de"
+msgstr ""
+
+msgid "could not get audio input stream from input URL"
+msgstr ""
+
+msgid "Audio Device Unavailable"
+msgstr ""
+
+msgid "You must make your edits public to upload new data"
+msgstr ""
+
+msgid "town"
+msgstr ""
+
+msgctxt "landuse"
+msgid "forest"
+msgstr ""
+
+msgctxt "landuse"
+msgid "meadow"
+msgstr ""
+
+msgctxt "landuse"
+msgid "farmland"
+msgstr ""
+
+msgctxt "landuse"
+msgid "residential"
+msgstr ""
+
+msgctxt "natural"
+msgid "scrub"
+msgstr ""
+
+msgctxt "Relation type"
+msgid "associatedStreet"
+msgstr ""
+
+msgctxt "Relation type"
+msgid "boundary"
+msgstr ""
+
+msgctxt "Relation type"
+msgid "bridge"
+msgstr ""
+
+msgctxt "Relation type"
+msgid "destination_sign"
+msgstr ""
+
+msgctxt "Relation type"
+msgid "enforcement"
+msgstr ""
+
+msgctxt "Relation type"
+msgid "multipolygon"
+msgstr ""
+
+msgctxt "Relation type"
+msgid "network"
+msgstr ""
+
+msgctxt "Relation type"
+msgid "public_transport"
+msgstr ""
+
+msgctxt "Relation type"
+msgid "restriction"
+msgstr ""
+
+msgctxt "Relation type"
+msgid "route"
+msgstr ""
+
+msgctxt "Relation type"
+msgid "route_master"
+msgstr ""
+
+msgctxt "Relation type"
+msgid "site"
+msgstr ""
+
+msgctxt "Relation type"
+msgid "street"
+msgstr ""
+
+msgctxt "Relation type"
+msgid "tunnel"
+msgstr ""
+
+msgctxt "Relation type"
+msgid "waterway"
+msgstr ""
+
+msgctxt "Place type"
+msgid "city"
+msgstr ""
+
+msgctxt "Place type"
+msgid "locality"
+msgstr ""
+
+msgctxt "Place type"
+msgid "village"
+msgstr ""
+
+msgctxt "Place type"
+msgid "town"
+msgstr ""
+
+msgctxt "Place type"
+msgid "borough"
+msgstr ""
+
+msgctxt "Place type"
+msgid "municipality"
+msgstr ""
+
+msgctxt "Place type"
+msgid "island"
+msgstr ""
+
+msgctxt "Place type"
+msgid "county"
+msgstr ""
+
+msgctxt "Place type"
+msgid "hamlet"
+msgstr ""
+
+msgctxt "Place type"
+msgid "suburb"
+msgstr ""
+
+msgid "All Files"
+msgstr ""
+
+msgid "Attributes"
+msgstr ""
+
+msgid "Abort file chooser dialog"
+msgstr ""
+
+msgid "Abort file chooser dialog."
+msgstr ""
+
+msgid "Create New Folder"
+msgstr ""
+
+msgid "Delete File"
+msgstr ""
+
+msgid "Enter file name:"
+msgstr ""
+
+msgid "Enter path or folder name:"
+msgstr ""
+
+msgid "Error "
+msgstr ""
+
+msgid "Error renaming file \"{0}\" to \"{1}\""
+msgstr ""
+
+msgid "File name:"
+msgstr ""
+
+msgid "File Name:"
+msgstr ""
+
+msgid "FileChooser help."
+msgstr ""
+
+msgid "Files"
+msgstr ""
+
+msgid "Files of type:"
+msgstr ""
+
+msgid "Files of Type:"
+msgstr ""
+
+msgid "Filter:"
+msgstr ""
+
+msgid "Folders"
+msgstr ""
+
+msgid "Home"
+msgstr ""
+
+msgid "Look in:"
+msgstr ""
+
+msgid "Look In:"
+msgstr ""
+
+msgid "Modified"
+msgstr ""
+
+msgid "New Folder"
+msgstr ""
+
+msgid "Open selected file"
+msgstr ""
+
+msgid "Open selected file."
+msgstr ""
+
+msgid "Refresh"
+msgstr ""
+
+msgid "Rename File"
+msgstr ""
+
+msgid "Rename file \"{0}\" to"
+msgstr ""
+
+msgid "Save in:"
+msgstr ""
+
+msgid "Save In:"
+msgstr ""
+
+msgid "Save selected file."
+msgstr ""
+
+msgid "Selection:"
+msgstr ""
+
+msgid "Size"
+msgstr ""
+
+msgid "Up One Level"
+msgstr ""
+
+msgid "Update"
+msgstr ""
+
+msgid "Update directory listing."
+msgstr ""
+
+msgid "View"
+msgstr ""
+
+msgid "Blue:"
+msgstr ""
+
+msgid "Color Name:"
+msgstr ""
+
+msgid "Green:"
+msgstr ""
+
+msgid "Hue:"
+msgstr ""
+
+msgid "GTK Color Chooser"
+msgstr ""
+
+msgid "Red:"
+msgstr ""
+
+msgid "Saturation:"
+msgstr ""
+
+msgid "Landsat"
+msgstr ""
+
+msgid "Bing aerial imagery"
+msgstr ""
+
+msgid "HDM (Humanitarian OpenStreetMap Team)"
+msgstr ""
+
+msgid "Mapbox Satellite"
+msgstr ""
+
+msgid "MapQuest Open Aerial"
+msgstr ""
+
+msgid "OpenStreetMap GPS Traces"
+msgstr ""
+
+msgid "OpenStreetMap (Standard layer)"
+msgstr ""
+
+msgid "skobbler"
+msgstr ""
+
+msgid "OpenStreetMap (Mapnik Black & White)"
+msgstr ""
+
+msgid "OpenStreetMap (Mapnik, no labels)"
+msgstr ""
+
+msgid "OpenCycleMap"
+msgstr ""
+
+msgid "MapQuest OSM"
+msgstr ""
+
+msgid "Public Transport (ÖPNV)"
+msgstr ""
+
+msgid "OpenStreetMap (German Style)"
+msgstr ""
+
+msgid "Cambodia, Laos, Thailand, Vietnam bilingual"
+msgstr ""
+
+msgid "osmfr"
+msgstr ""
+
+msgid "OpenPT Map (overlay)"
+msgstr ""
+
+msgid "Strava cycling heatmap"
+msgstr ""
+
+msgid "Strava running heatmap"
+msgstr ""
+
+msgid "Locator Overlay"
+msgstr ""
+
+msgid "QA No Address"
+msgstr ""
+
+msgid "Waymarked Trails: Hiking"
+msgstr ""
+
+msgid "Waymarked Trails: Cycling"
+msgstr ""
+
+msgid "Waymarked Trails: MTB"
+msgstr ""
+
+msgid "Waymarked Trails: Skating"
+msgstr ""
+
+msgid "Waymarked Trails: Horse Riding"
+msgstr ""
+
+msgid "Waymarked Trails: Winter Sports"
+msgstr ""
+
+msgid "OSM Inspector: Geometry"
+msgstr ""
+
+msgid "OSM Inspector: Tagging"
+msgstr ""
+
+msgid "OSM Inspector: Places"
+msgstr ""
+
+msgid "OSM Inspector: Highways"
+msgstr ""
+
+msgid "OSM Inspector: Multipolygon"
+msgstr ""
+
+msgid "OSM Inspector: Routing"
+msgstr ""
+
+msgid "OSM Inspector: Addresses"
+msgstr ""
+
+msgid "OSM Inspector: Boundaries (EU)"
+msgstr ""
+
+msgid "AGRI black-and-white 2.5m"
+msgstr ""
+
+msgid "Geoimage.at MaxRes"
+msgstr ""
+
+msgid "basemap.at"
+msgstr ""
+
+msgid "basemap.at Orthofoto"
+msgstr ""
+
+msgid "Graz: Basiskarte (base map)"
+msgstr ""
+
+msgid "Tiris: DGM (Terrain model)"
+msgstr ""
+
+msgid "Tiris: DOM (Surface model)"
+msgstr ""
+
+msgid "Vienna: Mehrzweckkarte (general purpose)"
+msgstr ""
+
+msgid "Vienna: Beschriftungen (annotations)"
+msgstr ""
+
+msgid "Vienna: Orthofoto (aerial image)"
+msgstr ""
+
+msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
+msgstr ""
+
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
+msgid "VoGIS: Flächenwidmungsplan"
+msgstr ""
+
+msgid "VoGIS: DGM (Terrain model)"
+msgstr ""
+
+msgid "VoGIS: DOM (Surface model)"
+msgstr ""
+
+msgid ""
+"AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
+msgstr ""
+
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
+msgid "SPW(allonie) 2012 aerial imagery"
+msgstr ""
+
+msgid "SPW(allonie) 2009 aerial imagery"
+msgstr ""
+
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
+msgid "IBGE Mapa de Setores Urbanos"
+msgstr ""
+
+msgid "IBGE Mapa de Setores Rurais"
+msgstr ""
+
+msgid "Geobase Hydrography"
+msgstr ""
+
+msgid "Geobase Roads"
+msgstr ""
+
+msgid "Canvec"
+msgstr ""
+
+msgid "British Columbia Mosaic"
+msgstr ""
+
+msgid "Kelowna 2012"
+msgstr ""
+
+msgid "Kelowna Roads overlay"
+msgstr ""
+
+msgid "Czech CUZK:KM"
+msgstr ""
+
+msgid "Czech RUIAN budovy"
+msgstr ""
+
+msgid "Czech RUIAN parcely"
+msgstr ""
+
+msgid "Czech pLPIS"
+msgstr ""
+
+msgid "Geodatastyrelsen (Denmark)"
+msgstr ""
+
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
+msgstr ""
+
+msgid "Stevns (Denmark)"
+msgstr ""
+
+msgid "Vejmidte (Denmark)"
+msgstr ""
+
+msgid "Estonia Basemap (Maaamet)"
+msgstr ""
+
+msgid "Estonia Ortho (Maaamet)"
+msgstr ""
+
+msgid "Estonia Hillshade (Maaamet)"
+msgstr ""
+
+msgid "Estonia Cadastre (Maaamet)"
+msgstr ""
+
+msgid "Estonia Forestry (Maaamet)"
+msgstr ""
+
+msgid "BANO"
+msgstr ""
+
+msgid "BD Carthage"
+msgstr ""
+
+msgid "Bordeaux - 2012"
+msgstr ""
+
+msgid "Cadastre"
+msgstr ""
+
+msgid "CRAIG - Auvergne 2013 - 25 cm"
+msgstr ""
+
+msgid "CRIGE PACA Alpes-Maritimes 2009 - 40 cm"
+msgstr ""
+
+msgid "GrandNancy Orthophotographie 2012"
+msgstr ""
+
+msgid "Géobretagne - Brest 2010 - 10 cm"
+msgstr ""
+
+msgid "Géobretagne - Morbihan 2010"
+msgstr ""
+
+msgid "Géolittoral - Orthophotos 2000"
+msgstr ""
+
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
+msgstr ""
+
+msgid "Géolittoral - Sentiers"
+msgstr ""
+
+msgid "Grand Lyon - Orthophotographie 2012 - 10cm"
+msgstr ""
+
+msgid "Loire-Atlantique - Orthophotos 2012 - 20 cm"
+msgstr ""
+
+msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
+msgstr ""
+
+msgid "Route 500™©®"
+msgstr ""
+
+msgid "Toulouse - Orthophotoplan 2013"
+msgstr ""
+
+msgid "Toulouse - Orthophotoplan 2011"
+msgstr ""
+
+msgid "Toulouse - Orthophotoplan 2007"
+msgstr ""
+
+msgid "Tours - Orthophotos 2013"
+msgstr ""
+
+msgid ""
+"Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
+"- 1 m"
+msgstr ""
+
+msgid "Hike & Bike"
+msgstr ""
+
+msgid "OpenStreetMap (Sorbian Language)"
+msgstr ""
+
+msgid "Hamburg (40 cm)"
+msgstr ""
+
+msgid "Hamburg (20 cm)"
+msgstr ""
+
+msgid "Hamburg (DK5)"
+msgstr ""
+
+msgid "Bavaria (80 cm)"
+msgstr ""
+
+msgid "Bavaria (2 m)"
+msgstr ""
+
+msgid "Stuttgart (Luftbild)"
+msgstr ""
+
+msgid "Erlangen Luftbild (2013 6,25 cm)"
+msgstr ""
+
+msgid "Erlangen 2011 Luftbild (5,0 cm)"
+msgstr ""
+
+msgid "Old map of Zwenkau - TK25 Messtischblatt (4739; 1906; PROJ.4-rect)"
+msgstr ""
+
+msgid "Old map of Pegau - TK25 Messtischblatt (4839; 1909; PROJ.4-rect)"
+msgstr ""
+
+msgid "Physical DE - Physische Karte (Naturräume)"
+msgstr ""
+
+msgid "Physical DE:Harz - Physische Karte (Naturräume)"
+msgstr ""
+
+msgid ""
+"Physical DE:Harz - Overlay für Bing (z.B. Deckkraft zw. 20 und 50 Prozent "
+"nutzen)"
+msgstr ""
+
+msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
+msgstr ""
+
+msgid "NRW-Atlas: ALKIS"
+msgstr ""
+
+msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
+msgstr ""
+
+msgid "NRW-Atlas: Luftbilder"
+msgstr ""
+
+msgid "NRW-Atlas: Topographische Karte 1:10000"
+msgstr ""
+
+msgid "Metropole Ruhr: Luftbilder (10 cm)"
+msgstr ""
+
+msgid "Drone Imagery (Haiti)"
+msgstr ""
+
+msgid "Drone Imagery 2014 (Haiti)"
+msgstr ""
+
+msgid "Ireland British War Office 1:25k GSGS 3906"
+msgstr ""
+
+msgid "Ireland British War Office One-Inch 1941-43 GSGS 4136"
+msgstr ""
+
+msgid "Ireland Bartholomew Quarter-Inch 1940"
+msgstr ""
+
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
+msgid "OSMIE Townlands"
+msgstr ""
+
+msgid "OSMIE EDs"
+msgstr ""
+
+msgid "OSMIE Civil Parishes"
+msgstr ""
+
+msgid "OSMIE Baronies"
+msgstr ""
+
+msgid "OSMIE Political"
+msgstr ""
+
+msgid "Lodi - Italy"
+msgstr ""
+
+msgid "Lombardia - Italy (CTR)"
+msgstr ""
+
+msgid "Sicily - Italy"
+msgstr ""
+
+msgid "PCN 2006 - Italy"
+msgstr ""
+
+msgid "PCN 2008 - IT Lazio+Umbria"
+msgstr ""
+
+msgid "PCN 2012 - Italy"
+msgstr ""
+
+msgid "South Tyrol Orthofoto 2011"
+msgstr ""
+
+msgid "South Tyrol Topomap"
+msgstr ""
+
+msgid "USSR - Latvia"
+msgstr ""
+
+msgid "50cm ortho - Latvia"
+msgstr ""
+
+msgid "20cm ortho - Latvia - Coastline"
+msgstr ""
+
+msgid "1.cikla ortofotokarte - Latvia"
+msgstr ""
+
+msgid "ORT10LT (Lithuania)"
+msgstr ""
+
+msgid "Luxembourg Inspire Ortho 2010"
+msgstr ""
+
+msgid "Luxembourg Inspire Ortho 2013"
+msgstr ""
+
+msgid "Luxembourg Inspire Railway"
+msgstr ""
+
+msgid "Luxembourg Inspire Roads"
+msgstr ""
+
+msgid "Luxembourg Inspire Water"
+msgstr ""
+
+msgid "Niger Delta Oct 2012 Landsat"
+msgstr ""
+
+msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgstr ""
+
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgstr ""
+
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgstr ""
+
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgstr ""
+
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgstr ""
+
+msgid "Geoportal 2: PRNG (geo names)"
+msgstr ""
+
+msgid "Geoportal 2: ISOK hillshade"
+msgstr ""
+
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgstr ""
+
+msgid "Będzin: Budynki (buildings)"
+msgstr ""
+
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
+msgid "Bytom: Fotoplan 2014 (aerial image)"
+msgstr ""
+
+msgid "Bytom: Budynki (buildings)"
+msgstr ""
+
+msgid "Chorzów: Budynki (buildings)"
+msgstr ""
+
+msgid "Częstochowa: Budynki (buildings)"
+msgstr ""
+
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgstr ""
+
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgstr ""
+
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgstr ""
+
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgstr ""
+
+msgid "Gliwice: Budynki (buildings)"
+msgstr ""
+
+msgid "Katowice: Ortofotomapa (aerial image)"
+msgstr ""
+
+msgid "Katowice: Budynki (buildings)"
+msgstr ""
+
+msgid "Łódź: Budynki (buildings)"
+msgstr ""
+
+msgid "Łódź: Ortofotomapa (aerial image)"
+msgstr ""
+
+msgid "Powiat dębicki: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat lubaczowski: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat łańcucki: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat poznański: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgstr ""
+
+msgid "Powiat rzeszowski: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgstr ""
+
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgstr ""
+
+msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgstr ""
+
+msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgstr ""
+
+msgid "Rzeszów: Budynki (buildings)"
+msgstr ""
+
+msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgstr ""
+
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
+msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgstr ""
+
+msgid "trail.pl: Szlaki (paths)"
+msgstr ""
+
+msgid "ScanEx IRS"
+msgstr ""
+
+msgid "ScanEx SPOT"
+msgstr ""
+
+msgid "Freemap.sk Car"
+msgstr ""
+
+msgid "Freemap.sk Hiking"
+msgstr ""
+
+msgid "Freemap.sk Cyclo"
+msgstr ""
+
+msgid "Freemap.sk Ski"
+msgstr ""
+
+msgid "Katastrálna mapa Slovenska (KaPor, 2010-04)"
+msgstr ""
+
+msgid "Katastrálna mapa Slovenska (KaPor, 2011-05)"
+msgstr ""
+
+msgid "Slovakia EEA GMES Urban Atlas"
+msgstr ""
+
+msgid "Slovakia EEA CORINE 2006"
+msgstr ""
+
+msgid "Slovakia Historic Maps"
+msgstr ""
+
+msgid "RABA-KGZ: Slovenia farmland use"
+msgstr ""
+
+msgid "RABA-KGZ: Slovenia built-up areas"
+msgstr ""
+
+msgid "South Africa CD:NGI Aerial"
+msgstr ""
+
+msgid "Catastro Spain"
+msgstr ""
+
+msgid "PNOA Spain"
+msgstr ""
+
+msgid "SIGPAC Spain"
+msgstr ""
+
+msgid "GRAFCAN - Canary Islands"
+msgstr ""
+
+msgid "ITACyL - Castile and León"
+msgstr ""
+
+msgid "IDEIB - Balearic Islands"
+msgstr ""
+
+msgid "GRAFCAN Express - Canary Islands"
+msgstr ""
+
+msgid "Kanton Aargau 25cm (AGIS 2011)"
+msgstr ""
+
+msgid "Kanton Aargau 25cm (AGIS 2014)"
+msgstr ""
+
+msgid "Stadt Uster Orthophoto 2008 10cm"
+msgstr ""
+
+msgid "Stadtplan Zürich"
+msgstr ""
+
+msgid "Stadt Zürich Übersichtsplan (Strassen, Gebäude, Hausnummer)"
+msgstr ""
+
+msgid "Stadt Zürich Luftbild 2011"
+msgstr ""
+
+msgid "Orthofoto Kanton Solothurn RGB (SOGIS 2011/2012/2013)"
+msgstr ""
+
+msgid "Orthofoto Kanton Solothurn Infrarot (SOGIS 2011/2012/2013)"
+msgstr ""
+
+msgid "Canton de Génève 5cm (SITG 2011)"
+msgstr ""
+
+msgid "Canton de Neuchâtel 50cm (SITN 2006)"
+msgstr ""
+
+msgid "Canton du Jura 50cm (RCJU 1998)"
+msgstr ""
+
+msgid "Canton de Fribourg 50cm (2005)"
+msgstr ""
+
+msgid "Stadt Bern 10cm/25cm (2012)"
+msgstr ""
+
+msgid "HEIG-VD / Orthophoto Yverdon-les-Bains 25cm (2007)"
+msgstr ""
+
+msgid "Ville de Nyon - Orthophoto 2010 HD 5cm/pi"
+msgstr ""
+
+msgid "Cartoriviera - Orthophoto 2012"
+msgstr ""
+
+msgid "SIGIP - Orthophoto 2012"
+msgstr ""
+
+msgid "Lausanne - Orthophoto technique 2012"
+msgstr ""
+
+msgid "Bonvillars Orthophoto 2013"
+msgstr ""
+
+msgid "Fiez Orthophoto 2013"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
+msgid "MSR Maps Topo"
+msgstr ""
+
+msgid "MSR Maps Urban"
+msgstr ""
+
+msgid "USGS Topographic Maps"
+msgstr ""
+
+msgid "USGS Large Scale Imagery"
+msgstr ""
+
+msgid "TIGER 2012 Roads Overlay"
+msgstr ""
+
+msgid "New & Misaligned TIGER Roads (2015)"
+msgstr ""
+
+msgid "MassGIS L3 Parcels"
+msgstr ""
+
+msgid "NC Latest Orthoimagery"
+msgstr ""
+
+msgid "U.S. Forest Service roads"
+msgstr ""
+
+msgid "Ukraine - Orthophotomaps 2012"
+msgstr ""
+
+msgid "7th Series (OS7)"
+msgstr ""
+
+msgid "OS New Popular Edition historic"
+msgstr ""
+
+msgid "OS OpenData StreetView"
+msgstr ""
+
+msgid "OS OpenData Locator"
+msgstr ""
+
+msgid "Surrey Air Survey"
+msgstr ""
+
+msgid "NLS - OS 6-inch Scotland 1842-82"
+msgstr ""
+
+msgid "NLS - OS 1:25k 1st Series 1937-61"
+msgstr ""
+
+msgid "NLS - OS 1-inch 7th Series 1955-61"
+msgstr ""
+
+msgid "OS 1:25k historic (OSM-Best)"
+msgstr ""
+
+msgid "OS 1:25k historic (OSM-Limited)"
+msgstr ""
+
+msgid "OS Scottish Popular historic"
+msgstr ""
+
+msgid "NLS - Bartholomew Half Inch, 1897-1907"
+msgstr ""
+
+msgid "OS Town Plans, Aberdeen 1866-1867 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Airdrie 1858 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Alexandria 1859 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Alloa 1861-1862 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Annan 1859 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Arbroath 1858 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Ayr 1855 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Berwick-upon-Tweed 1852 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Brechin 1862 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Burntisland 1894 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Campbelton 1865 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Coatbridge 1858 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Cupar 1854 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Cupar 1893-1894 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Dalkeith 1852 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Dalkeith 1893 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Dumbarton 1859 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Dumfries 1850 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Dumfries 1893 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Dundee 1857-1858 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Dundee 1870-1872 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Dunfermline 1854 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Dunfermline 1894 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Edinburgh 1849-1851 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Edinburgh 1876-1877 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Edinburgh 1893-1894 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Elgin 1868 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Falkirk 1858-1859 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Forfar 1860-1861 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Forres 1868 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Galashiels 1858 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Girvan 1857 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Glasgow 1857-1858 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Glasgow 1892-1894 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Greenock 1857 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Haddington 1853 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Haddington 1893 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Hamilton 1858 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Hawick 1857-1858 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Inverness 1867-1868 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Irvine 1859 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Jedburgh 1858 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Kelso 1857 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Kilmarnock 1857-1859 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Kirkcaldy 1855 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Kirkcaldy 1894 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Kirkcudbright 1850 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Kirkcudbright 1893 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Kirkintilloch 1859 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Kirriemuir 1861 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Lanark 1858 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Linlithgow 1856 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Mayole 1856-1857 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Montrose 1861-1862 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Musselburgh 1853 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Musselburgh 1893 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Nairn 1867-1868 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Oban 1867-1868 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Peebles 1856 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Perth 1860 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Peterhead 1868 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Port Glasgow 1856-1857 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Portobello 1893-1894 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Rothesay 1862-1863 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Selkirk 1865 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, St Andrews 1854 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, St Andrews 1893 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Stirling 1858 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Stonehaven 1864 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Stranraer 1847 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Stranraer 1863-1877 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Stranraer 1893 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Strathaven 1858 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Wick 1872 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Wigtown 1848 (NLS)"
+msgstr ""
+
+msgid "OS Town Plans, Wigtown 1894 (NLS)"
+msgstr ""
+
+msgid "Landsat 233055"
+msgstr ""
+
+msgid ""
+"Group common Address Interpolation inputs in a single dialog, as well as an "
+"option to automatically generate individual house number nodes from a Way."
+msgstr ""
+
+msgid ""
+"Makes a pair of selected way segments parallel by rotating one of them "
+"around a chosen pivot."
+msgstr ""
+
+msgid ""
+"Allows selection of areas in an layer and automatic creation of a way as "
+"polygon. Built to ease mapping of building from background layers. Optimized "
+"for basemap.at."
+msgstr ""
+
+msgid "Tools for drawing buildings."
+msgstr ""
+
+msgid "A special handler for the French land registry WMS server."
+msgstr ""
+
+msgid ""
+"Overlays the canvec tile grid on the map and prints URL''s to the .zip "
+"files. Future goals: allow auto-downloading and loading of canvec .osm files"
+msgstr ""
+
+msgid ""
+"Allows the user to create different color schemes and to switch between "
+"them. Just change the colors and create a new scheme. Used to switch to a "
+"white background with matching colors for better visibility in bright "
+"sunlight. See dialog in display preferences."
+msgstr ""
+
+msgid ""
+"Imports proprietary CSV files of the Columbus/Visiontac V-900 GPS logger "
+"into a GPX layer."
+msgstr ""
+
+msgid ""
+"Implements a command line and enables to create your commands. See link for "
+"standard commands (arc, circle etc.)"
+msgstr ""
+
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
+msgid "(Warning: Experimental!) Tool for conflating (merging) data."
+msgstr ""
+
+msgid "Create a grid of ways."
+msgstr ""
+
+msgid ""
+"Creating and handling address nodes and buildings within Czech Republic."
+msgstr ""
+
+msgid ""
+"Allows to import various file formats into JOSM directly. Currently "
+"supported: TangoGPS, Garmin Trainings Center TCX."
+msgstr ""
+
+msgid "Download your GPX tracks from openstreetmap.org"
+msgstr ""
+
+msgid ""
+"This plugin directly upload GPS Traces from current active layer in JOSM to "
+"openstreetmap.org."
+msgstr ""
+
+msgid "Downloads OSM data along a way"
+msgstr ""
+
+msgid ""
+"Allows the user to anonymize timestamps and delete parts of huge GPX tracks "
+"very fast."
+msgstr ""
+
+msgid "Shows the elevation profile and some statistical data of a GPX track."
+msgstr ""
+
+msgid "Handling of French EPCIs (boundary=local_authority)"
+msgstr ""
+
+msgid "Use external scripts in JOSM"
+msgstr ""
+
+msgid "Fast drawing ways by mouse"
+msgstr ""
+
+msgid "Finds and fixes invalid street addresses in a comfortable way."
+msgstr ""
+
+msgid ""
+"Talk with users editing the map nearby, be notified when someone comes close."
+msgstr ""
+
+msgid ""
+"Provides parts of the GeoTools library for other JOSM plugins. Not meant to "
+"be installed directly by users, but rather as a dependency for other plugins."
+msgstr ""
+
+msgid ""
+"Download GPS points from Globalsat dg100 data logger directly in JOSM."
+msgstr ""
+
+msgid ""
+"Analyse a set of GPS points to obtain its centre and direction of spread."
+msgstr ""
+
+msgid "Allows to filter out unnecessary GPS tracks"
+msgstr ""
+
+msgid "Visualizes routing information as a routing graph."
+msgstr ""
+
+msgid "Simple tool to tag house numbers."
+msgstr ""
+
+msgid "Generate Imagery XML bounds from a multipolygon"
+msgstr ""
+
+msgid ""
+"Database of imagery offsets: share and aquire imagery offsets with one "
+"button."
+msgstr ""
+
+msgid "WMSPlugin-style imagery adjustment mapmode"
+msgstr ""
+
+msgid ""
+"Another plugin to match images to the waypoints in a GPX file. A match is "
+"made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
+"matches the filename of an image."
+msgstr ""
+
+msgid "Plugin for importing spatial referenced images"
+msgstr ""
+
+msgid "Import vector graphics (SVG)"
+msgstr ""
+
+msgid ""
+"Extra information about current layer objects pop ups - currently GPX "
+"trackpoint info"
+msgstr ""
+
+msgid "A helper for IRS satellite adjustment."
+msgstr ""
+
+msgid ""
+"Provides Java Native Access (JNA) library. Not meant to be installed "
+"directly by users, but rather as a dependency for other plugins."
+msgstr ""
+
+msgid ""
+"Provides Java Topology Suite (JTS) library and related utilities. Not meant "
+"to be installed directly by users, but rather as a dependency for other "
+"plugins."
+msgstr ""
+
+msgid ""
+"creates a channel digraph and checks a subset of channels if it is a "
+"junction or searches in a subset of channels for junctions"
+msgstr ""
+
+msgid "Helps vectorizing WMS images."
+msgstr ""
+
+msgid ""
+"Support live GPS input (moving dot) through a connection to gpsd server."
+msgstr ""
+
+msgid ""
+"Provides the Log4j library for other JOSM plugins. Not meant to be installed "
+"directly by users, but rather as a dependency for other plugins."
+msgstr ""
+
+msgid ""
+"The MapDust Plug-In shows the MapDust bug reports on the map. You can "
+"create, close,invalidate, re-open and comment bug reports by using this "
+"plugin."
+msgstr ""
+
+msgid "Allows the user to work with pictures hosted at mapillary.com"
+msgstr ""
+
+msgid ""
+"Provide a measurement dialog and a layer to measure length and angle of "
+"segments, area surrounded by a (simple) closed way and create measurement "
+"paths (which also can be imported from a gps layer)."
+msgstr ""
+
+msgid "Merge overlapping part of ways."
+msgstr ""
+
+msgid "Adds no left turn for sets of 4 or 5 ways"
+msgstr ""
+
+msgid "Allows to attribute tags to all objects in any selected area at once"
+msgstr ""
+
+msgid "NanoLog adjustment and browsing layer"
+msgstr ""
+
+msgid ""
+"Use your system''s password manager to store the API username and password. "
+"(KWallet and gnome-keyring are supported.)"
+msgstr ""
+
+msgid ""
+"Disallow using JOSM forever (WARNING: this plugin prevents JOSM from loading "
+"and is hard to rid of)"
+msgstr ""
+
+msgid "Convert data from Open Data portals to OSM layer"
+msgstr ""
+
+msgid "extended options for editing opening_hours"
+msgstr ""
+
+msgid ""
+"Allows opening gpx/osm files that intersect the currently visible screen area"
+msgstr ""
+
+msgid ""
+"Launches FireFox to display the current visible screen as a nice SVG image."
+msgstr ""
+
+msgid ""
+"Bring in errors from Osm Inspector and display it on the current JOSM "
+"bounding box"
+msgstr ""
+
+msgid ""
+"Recommends categories/tags on newly created OSM entities by analysing "
+"spatial entities into training features and using SVM classification"
+msgstr ""
+
+msgid "Import/export OSM data in PBF format"
+msgstr ""
+
+msgid "Import PDF file and convert to ways."
+msgstr ""
+
+msgid ""
+"Write gps position info to the image file header. Run this feature from the "
+"right click menu of the image layer."
+msgstr ""
+
+msgid "Make photos movable and position them on the map."
+msgstr ""
+
+msgid ""
+"This plugin allows to display any picture as a background in the editor and "
+"align it with the map."
+msgstr ""
+
+msgid "The great JGoodies Plastic Look and Feel."
+msgstr ""
+
+msgid ""
+"Shows an additional information about point on map. There is only a Czech "
+"RUIAN module available at this moment."
+msgstr ""
+
+msgid "Read and write osmosis poly filter files"
+msgstr ""
+
+msgid "Adds map printing to JOSM"
+msgstr ""
+
+msgid "adds projections from Proj4J"
+msgstr ""
+
+msgid ""
+"This plugin simplifies the mapping and editing of public transport routes."
+msgstr ""
+
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
+msgid "Relation and multipolygon creating and editing panel."
+msgstr ""
+
+msgid "Plugin for reverting changesets"
+msgstr ""
+
+msgid ""
+"Plugin for tagging of objects based on a selection of road signs. The dialog "
+"can be opened by clicking a small icon in the upper right corner of the "
+"properties window. Available country presets: Belgium, Germany, Poland, "
+"Slovakia, Spain."
+msgstr ""
+
+msgid ""
+"Renders routes (bus, hiking trails, bicycle routes, ..). Route types must be "
+"defined in routes.xml file in plugin directory"
+msgstr ""
+
+msgid "Provides routing capabilities."
+msgstr ""
+
+msgid "Loads data from SDS"
+msgstr ""
+
+msgid "Imagery Layer for Sea Charts"
+msgstr ""
+
+msgid "Edit features for Sea Charts"
+msgstr ""
+
+msgid ""
+"Simplify area by removing nodes on very obtuse angles. This can be "
+"constrained by maximum removed area size. Also average nearby nodes."
+msgstr ""
+
+msgid "Edit features for OpenSeaMap"
+msgstr ""
+
+msgid "Allows to draw splines"
+msgstr ""
+
+msgid ""
+"Allows to edit traffic information and export it to the urban mobility "
+"simulator SUMO"
+msgstr ""
+
+msgid "Allow adding markers/nodes on current gps positions."
+msgstr ""
+
+msgid ""
+"Launch browser to a Web resource about a selected object having known tags, "
+"such as Wikipedia"
+msgstr ""
+
+msgid "Provides a dialog for editing tags in a tabular grid."
+msgstr ""
+
+msgid ""
+"Adds a tagging preset tester to the help menu, which helps you developing of "
+"tagging presets (quick preview of the dialog that will popup). You can start "
+"the jar-file as standalone as well."
+msgstr ""
+
+msgid "Make terraced houses out of single blocks."
+msgstr ""
+
+msgid ""
+"Provides helper buttons to allow working with single button mouse (stylus). "
+"Activate by holding T and slip map with left mouse button"
+msgstr ""
+
+msgid ""
+"Traces buildings from Czech cadastral map. Needs TracerServer (.NET or Mono) "
+"to be running."
+msgstr ""
+
+msgid ""
+"Traces buildings and other shapes from a map. Needs Tracer2Server to be "
+"running."
+msgstr ""
+
+msgid "Plugin to digital sign OSM-Data"
+msgstr ""
+
+msgid ""
+"Provides a straightforward GUI for adding, editing and deleting turn lanes."
+msgstr ""
+
+msgid ""
+"The turnrestrictions plugin allows to enter maintain information about turn "
+"restrictions in the OpenStreetMap database."
+msgstr ""
+
+msgid "Allows undeleting object from OSM database"
+msgstr ""
+
+msgid "Several utilities that make your life easier."
+msgstr ""
+
+msgid ""
+"(This Plugin is currently work in progress!!!) Links and syncs a "
+"georeferenced video against a GPS track, to use it for identify visible "
+"objects."
+msgstr ""
+
+msgid ""
+"Supports downloading tiled, scanned maps from walking-papers.org. This "
+"plugin is still under early development and may be buggy."
+msgstr ""
+
+msgid "Easy downloading along a long set of interconnected ways"
+msgstr ""
+
+msgid "Enables searching for waypoint imported from gpx file."
+msgstr ""
+
+msgid "Simplifies linking OSM objects to Wikipedia articles"
+msgstr ""
+
+msgid ""
+"Drive a race car from point A to point B over aerial imagery, leave cacti "
+"behind."
+msgstr ""
+
+msgid "Surface"
+msgstr ""
+
+msgid "paved"
+msgstr ""
+
+msgid "unpaved"
+msgstr ""
+
+msgid "asphalt"
+msgstr ""
+
+msgid "concrete"
+msgstr ""
+
+msgid "metal"
+msgstr ""
+
+msgid "wood"
+msgstr ""
+
+msgid "paving_stones"
+msgstr ""
+
+msgid "cobblestone"
+msgstr ""
+
+msgid "gravel"
+msgstr ""
+
+msgid "pebblestone"
+msgstr ""
+
+msgid "compacted"
+msgstr ""
+
+msgid "grass_paver"
+msgstr ""
+
+msgid "grass"
+msgstr ""
+
+msgid "sand"
+msgstr ""
+
+msgid "ground"
+msgstr ""
+
+msgid "sett"
+msgstr ""
+
+msgid "Smoothness"
+msgstr ""
+
+msgid "excellent"
+msgstr ""
+
+msgid "Thin Rollers: rollerblade, skateboard"
+msgstr ""
+
+msgid "good"
+msgstr ""
+
+msgid "Thin Wheels: racing bike"
+msgstr ""
+
+msgid "intermediate"
+msgstr ""
+
+msgid "Wheels: city bike, wheelchair, scooter"
+msgstr ""
+
+msgid "bad"
+msgstr ""
+
+msgid "Robust Wheels: trekking bike, car, rickshaw"
+msgstr ""
+
+msgid "very_bad"
+msgstr ""
+
+msgid "High Clearance: light duty off-road vehicle"
+msgstr ""
+
+msgid "horrible"
+msgstr ""
+
+msgid "Off-Road: heavy duty off-road vehicle"
+msgstr ""
+
+msgid "very_horrible"
+msgstr ""
+
+msgid "Specialized off-road: tractor, ATV"
+msgstr ""
+
+msgid "impassable"
+msgstr ""
+
+msgid "No wheeled vehicle"
+msgstr ""
+
+msgctxt "riding"
+msgid "pitch"
+msgstr ""
+
+msgctxt "riding"
+msgid "sports_centre"
+msgstr ""
+
+msgctxt "riding"
+msgid "stadium"
+msgstr ""
+
+msgctxt "riding"
+msgid "track"
+msgstr ""
+
+msgid "clay"
+msgstr ""
+
+msgid "dirt"
+msgstr ""
+
+msgid "fine_gravel"
+msgstr ""
+
+msgid "mud"
+msgstr ""
+
+msgid "Lanes"
+msgstr ""
+
+msgid "Max. speed (km/h)"
+msgstr ""
+
+msgid "Bridge"
+msgstr ""
+
+msgid "Tunnel"
+msgstr ""
+
+msgid "Cutting"
+msgstr ""
+
+msgid "Embankment"
+msgstr ""
+
+msgid "Incline"
+msgstr ""
+
+msgid "10%"
+msgstr ""
+
+msgid "-10%"
+msgstr ""
+
+msgid "10°"
+msgstr ""
+
+msgid "-10°"
+msgstr ""
+
+msgid "Oneway"
+msgstr ""
+
+msgid "Lit"
+msgstr ""
+
+msgid "Width (meters)"
+msgstr ""
+
+msgid "Sidewalk"
+msgstr ""
+
+msgctxt "sidewalk"
+msgid "both"
+msgstr ""
+
+msgctxt "sidewalk"
+msgid "left"
+msgstr ""
+
+msgctxt "sidewalk"
+msgid "right"
+msgstr ""
+
+msgctxt "sidewalk"
+msgid "no"
+msgstr ""
+
+msgid "Service type"
+msgstr ""
+
+msgid "yard"
+msgstr ""
+
+msgid "siding"
+msgstr ""
+
+msgid "spur"
+msgstr ""
+
+msgid "Electrified"
+msgstr ""
+
+msgid "contact_line"
+msgstr ""
+
+msgid "no"
+msgstr ""
+
+msgid "yes"
+msgstr ""
+
+msgid "rail"
+msgstr ""
+
+msgid "Voltage in Volts (V)"
+msgstr ""
+
+msgid "Frequency in Hertz (Hz)"
+msgstr ""
+
+msgid "16.67"
+msgstr ""
+
+msgid "16.7"
+msgstr ""
+
+msgctxt "railway"
+msgid "Tracks"
+msgstr ""
+
+msgid "Gauge (mm)"
+msgstr ""
+
+msgid "Allowed traffic:"
+msgstr ""
+
+msgid "Horse"
+msgstr ""
+
+msgid "Motorcycle"
+msgstr ""
+
+msgid "Motorcar"
+msgstr ""
+
+msgid "Reference"
+msgstr ""
+
+msgid "Operator"
+msgstr ""
+
+msgid "Service Times"
+msgstr ""
+
+msgid "18:00"
+msgstr ""
+
+msgid "sunset,sunrise"
+msgstr ""
+
+msgid "Su 09:30,11:00"
+msgstr ""
+
+msgid "Sa,Su,PH 09:00"
+msgstr ""
+
+msgid "Sa 18:00; Su 10:45"
+msgstr ""
+
+msgid ""
+"Fr 08:00-18:00; Apr 10-15 off; Jun 07:00-20:00; Aug off; Dec 24 08:00-24:00"
+msgstr ""
+
+msgid "Sa 10:00+"
+msgstr ""
+
+msgid "week 1-53/2 Fr 09:00-12:00; week 2-52/2 We 09:00-12:00"
+msgstr ""
+
+msgid "Opening Hours"
+msgstr ""
+
+msgid "24/7"
+msgstr ""
+
+msgid "08:30-12:30,15:30-20:00"
+msgstr ""
+
+msgid "Sa-Su 00:00-24:00"
+msgstr ""
+
+msgid "Mo-Fr 08:30-20:00; Sa,Su 08:00-15:00; PH off"
+msgstr ""
+
+msgid "Mo-Fr 08:30-20:00, Tu-Su 08:00-15:00; Sa 08:00-12:00"
+msgstr ""
+
+msgid ""
+"Mo-Su 08:00-18:00; Apr 10-15 off; Jun 08:00-14:00; Aug off; Dec 25 off"
+msgstr ""
+
+msgid "sunrise-sunset"
+msgstr ""
+
+msgid "Su 10:00+"
+msgstr ""
+
+msgid "Wheelchairs"
+msgstr ""
+
+msgid "limited"
+msgstr ""
+
+msgid "Brand"
+msgstr ""
+
+msgid "Internet access"
+msgstr ""
+
+msgid "wlan"
+msgstr ""
+
+msgid "wired"
+msgstr ""
+
+msgid "terminal"
+msgstr ""
+
+msgid "Internet access fee"
+msgstr ""
+
+msgid "Smoking"
+msgstr ""
+
+msgid "dedicated"
+msgstr ""
+
+msgid "separated"
+msgstr ""
+
+msgid "isolated"
+msgstr ""
+
+msgid "Height (meters)"
+msgstr ""
+
+msgid "Max. width (meters)"
+msgstr ""
+
+msgid "Max. height (meters)"
+msgstr ""
+
+msgid "pitch"
+msgstr ""
+
+msgid "sports_centre"
+msgstr ""
+
+msgid "stadium"
+msgstr ""
+
+msgid "Sport"
+msgstr ""
+
+msgctxt "sport"
+msgid "multi"
+msgstr ""
+
+msgctxt "sport"
+msgid "archery"
+msgstr ""
+
+msgctxt "sport"
+msgid "athletics"
+msgstr ""
+
+msgctxt "sport"
+msgid "american_football"
+msgstr ""
+
+msgctxt "sport"
+msgid "australian_football"
+msgstr ""
+
+msgctxt "sport"
+msgid "baseball"
+msgstr ""
+
+msgctxt "sport"
+msgid "basketball"
+msgstr ""
+
+msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
+msgid "boules"
+msgstr ""
+
+msgctxt "sport"
+msgid "bowls"
+msgstr ""
+
+msgctxt "sport"
+msgid "canadian_football"
+msgstr ""
+
+msgctxt "sport"
+msgid "canoe"
+msgstr ""
+
+msgctxt "sport"
+msgid "climbing"
+msgstr ""
+
+msgctxt "sport"
+msgid "cricket"
+msgstr ""
+
+msgctxt "sport"
+msgid "croquet"
+msgstr ""
+
+msgctxt "sport"
+msgid "cycling"
+msgstr ""
+
+msgctxt "sport"
+msgid "dog_racing"
+msgstr ""
+
+msgctxt "sport"
+msgid "equestrian"
+msgstr ""
+
+msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "gaelic_games"
+msgstr ""
+
+msgctxt "sport"
+msgid "golf"
+msgstr ""
+
+msgctxt "sport"
+msgid "gymnastics"
+msgstr ""
+
+msgctxt "sport"
+msgid "handball"
+msgstr ""
+
+msgctxt "sport"
+msgid "horse_racing"
+msgstr ""
+
+msgctxt "sport"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
+msgstr ""
+
+msgctxt "sport"
+msgid "motor"
+msgstr ""
+
+msgctxt "sport"
+msgid "pelota"
+msgstr ""
+
+msgctxt "sport"
+msgid "racquet"
+msgstr ""
+
+msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
+msgid "rugby_league"
+msgstr ""
+
+msgctxt "sport"
+msgid "rugby_union"
+msgstr ""
+
+msgctxt "sport"
+msgid "running"
+msgstr ""
+
+msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
+msgid "shooting"
+msgstr ""
+
+msgctxt "sport"
+msgid "skateboard"
+msgstr ""
+
+msgctxt "sport"
+msgid "skating"
+msgstr ""
+
+msgctxt "sport"
+msgid "soccer"
+msgstr ""
+
+msgctxt "sport"
+msgid "swimming"
+msgstr ""
+
+msgctxt "sport"
+msgid "table_tennis"
+msgstr ""
+
+msgctxt "sport"
+msgid "tennis"
+msgstr ""
+
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
+msgid "Fee"
+msgstr ""
+
+msgid "06:00-20:00"
+msgstr ""
+
+msgid "Mo-Fr 09:00-18:00,Sa 08:00-14:00"
+msgstr ""
+
+msgid "May-Sep 09:30-12:30,14:15-19:30"
+msgstr ""
+
+msgctxt "parking"
+msgid "multi-storey"
+msgstr ""
+
+msgctxt "parking"
+msgid "surface"
+msgstr ""
+
+msgctxt "parking"
+msgid "underground"
+msgstr ""
+
+msgctxt "parking"
+msgid "rooftop"
+msgstr ""
+
+msgid "Reference number"
+msgstr ""
+
+msgid "Access"
+msgstr ""
+
+msgid "private"
+msgstr ""
+
+msgid "customers"
+msgstr ""
+
+msgid "permissive"
+msgstr ""
+
+msgid "Time Limit (minutes)"
+msgstr ""
+
+msgid "Supervised"
+msgstr ""
+
+msgid "General Access"
+msgstr ""
+
+msgid "destination"
+msgstr ""
+
+msgid "delivery"
+msgstr ""
+
+msgid "agricultural"
+msgstr ""
+
+msgid "forestry"
+msgstr ""
+
+msgid "Population"
+msgstr ""
+
+msgid "Post code"
+msgstr ""
+
+msgid "Website"
+msgstr ""
+
+msgid "Distance (km)"
+msgstr ""
+
+msgid "Ascent (m)"
+msgstr ""
+
+msgid "Descent (m)"
+msgstr ""
+
+msgid "Roundtrip"
+msgstr ""
+
+msgid "Symbol description"
+msgstr ""
+
+msgid "broadleaved"
+msgstr ""
+
+msgid "needleleaved"
+msgstr ""
+
+msgid "mixed"
+msgstr ""
+
+msgid "leafless"
+msgstr ""
+
+msgid "Cycle"
+msgstr ""
+
+msgid "deciduous"
+msgstr ""
+
+msgid "Plants that are leafless for a certain period during the year."
+msgstr ""
+
+msgid "evergreen"
+msgstr ""
+
+msgid "Plants that are never entirely without green foliage."
+msgstr ""
+
+msgid "semi_deciduous"
+msgstr ""
+
+msgid ""
+"Plants that lose their foliage for a very short period, when old leaves fall "
+"off and new foliage growth is starting."
+msgstr ""
+
+msgid "semi_evergreen"
+msgstr ""
+
+msgid ""
+"Plants that lose most, but not all, of their foliage for a fraction of the "
+"year."
+msgstr ""
+
+msgid "Habitat with evergreen and deciduous vegetation."
+msgstr ""
+
+msgid "bahai"
+msgstr ""
+
+msgid "buddhist"
+msgstr ""
+
+msgid "christian"
+msgstr ""
+
+msgid "hindu"
+msgstr ""
+
+msgid "jain"
+msgstr ""
+
+msgid "jewish"
+msgstr ""
+
+msgid "muslim"
+msgstr ""
+
+msgid "shinto"
+msgstr ""
+
+msgid "sikh"
+msgstr ""
+
+msgid "spiritualist"
+msgstr ""
+
+msgid "taoist"
+msgstr ""
+
+msgid "unitarian"
+msgstr ""
+
+msgid "zoroastrian"
+msgstr ""
+
+msgid "Denomination"
+msgstr ""
+
+msgid "anglican"
+msgstr ""
+
+msgid "baptist"
+msgstr ""
+
+msgid "catholic"
+msgstr ""
+
+msgid "evangelical"
+msgstr ""
+
+msgid "greek_catholic"
+msgstr ""
+
+msgid "jehovahs_witness"
+msgstr ""
+
+msgid "lutheran"
+msgstr ""
+
+msgid "methodist"
+msgstr ""
+
+msgid "mormon"
+msgstr ""
+
+msgid "old_catholic"
+msgstr ""
+
+msgid "orthodox"
+msgstr ""
+
+msgid "pentecostal"
+msgstr ""
+
+msgid "presbyterian"
+msgstr ""
+
+msgid "protestant"
+msgstr ""
+
+msgid "quaker"
+msgstr ""
+
+msgid "roman_catholic"
+msgstr ""
+
+msgid "shia"
+msgstr ""
+
+msgid "sunni"
+msgstr ""
+
+msgid "high"
+msgstr ""
+
+msgid "medium"
+msgstr ""
+
+msgid "low"
+msgstr ""
+
+msgid "750000;200000"
+msgstr ""
+
+msgid "110000;20000"
+msgstr ""
+
+msgid "Branch operator"
+msgstr ""
+
+msgid "Amount of Cables"
+msgstr ""
+
+msgid "Amount of circuits"
+msgstr ""
+
+msgid "Location"
+msgstr ""
+
+msgctxt "power"
+msgid "outdoor"
+msgstr ""
+
+msgctxt "power"
+msgid "indoor"
+msgstr ""
+
+msgctxt "power"
+msgid "underground"
+msgstr ""
+
+msgctxt "power"
+msgid "platform"
+msgstr ""
+
+msgctxt "power"
+msgid "kiosk"
+msgstr ""
+
+msgid "Start date"
+msgstr ""
+
+msgid "Output forms of energy:"
+msgstr ""
+
+msgid "biogas"
+msgstr ""
+
+msgid "2 W"
+msgstr ""
+
+msgid "3 kW"
+msgstr ""
+
+msgid "5 MW"
+msgstr ""
+
+msgid "7 GW"
+msgstr ""
+
+msgid "electricity"
+msgstr ""
+
+msgid "hot water"
+msgstr ""
+
+msgid "hot air"
+msgstr ""
+
+msgid "cold water"
+msgstr ""
+
+msgid "cold air"
+msgstr ""
+
+msgid "compressed air"
+msgstr ""
+
+msgid "steam"
+msgstr ""
+
+msgid "vacuum"
+msgstr ""
+
+msgid "Max. weight (tonnes)"
+msgstr ""
+
+msgid "Toll"
+msgstr ""
+
+msgid "Is the water body intermittent (disappears seasonally)?"
+msgstr ""
+
+msgid "culvert"
+msgstr ""
+
+msgid "Water access rules:"
+msgstr ""
+
+msgid "Ship"
+msgstr ""
+
+msgid "designated"
+msgstr ""
+
+msgid "Boat"
+msgstr ""
+
+msgid "Motorboat"
+msgstr ""
+
+msgid "Canoe"
+msgstr ""
+
+msgid "Streets"
+msgstr ""
+
+msgid "Motorway"
+msgstr ""
+
+msgid "Motorway Link"
+msgstr ""
+
+msgid "Trunk"
+msgstr ""
+
+msgid "Motorroad"
+msgstr ""
+
+msgid "Trunk Link"
+msgstr ""
+
+msgid "Primary"
+msgstr ""
+
+msgid "Primary Link"
+msgstr ""
+
+msgid "Secondary"
+msgstr ""
+
+msgid "Secondary Link"
+msgstr ""
+
+msgid "Tertiary"
+msgstr ""
+
+msgid "Tertiary Link"
+msgstr ""
+
+msgid "Unclassified"
+msgstr ""
+
+msgid "Street has no name"
+msgstr ""
+
+msgid "Passing Places"
+msgstr ""
+
+msgid "Residential"
+msgstr ""
+
+msgid "Bicycle Road"
+msgstr ""
+
+msgid "Highway type"
+msgstr ""
+
+msgctxt "Highway"
+msgid "residential"
+msgstr ""
+
+msgctxt "Highway"
+msgid "service"
+msgstr ""
+
+msgctxt "Highway"
+msgid "unclassified"
+msgstr ""
+
+msgctxt "Highway"
+msgid "path"
+msgstr ""
+
+msgctxt "Highway"
+msgid "cycleway"
+msgstr ""
+
+msgid "Vehicle access"
+msgstr ""
+
+msgid "Oneway for bicycle"
+msgstr ""
+
+msgid "Living Street"
+msgstr ""
+
+msgid "Pedestrian"
+msgstr ""
+
+msgid "Area"
+msgstr ""
+
+msgid "Service"
+msgstr ""
+
+msgid "Service way type"
+msgstr ""
+
+msgid "alley"
+msgstr ""
+
+msgid "driveway"
+msgstr ""
+
+msgid "parking_aisle"
+msgstr ""
+
+msgid "drive-through"
+msgstr ""
+
+msgid "Parking Aisle"
+msgstr ""
+
+msgid "Escape"
+msgstr ""
+
+msgid ""
+"Emergency lane beside long descending slopes for trucks and other vehicles "
+"to stop safely after brake failure."
+msgstr ""
+
+msgid "Raceway"
+msgstr ""
+
+msgid "Road (Unknown Type)"
+msgstr ""
+
+msgid "Construction"
+msgstr ""
+
+msgctxt "Highway"
+msgid "motorway"
+msgstr ""
+
+msgctxt "Highway"
+msgid "motorway_link"
+msgstr ""
+
+msgctxt "Highway"
+msgid "trunk"
+msgstr ""
+
+msgctxt "Highway"
+msgid "trunk_link"
+msgstr ""
+
+msgctxt "Highway"
+msgid "primary"
+msgstr ""
+
+msgctxt "Highway"
+msgid "primary_link"
+msgstr ""
+
+msgctxt "Highway"
+msgid "secondary"
+msgstr ""
+
+msgctxt "Highway"
+msgid "secondary_link"
+msgstr ""
+
+msgctxt "Highway"
+msgid "tertiary"
+msgstr ""
+
+msgctxt "Highway"
+msgid "tertiary_link"
+msgstr ""
+
+msgctxt "Highway"
+msgid "bus_guideway"
+msgstr ""
+
+msgctxt "Highway"
+msgid "bridleway"
+msgstr ""
+
+msgctxt "Highway"
+msgid "living_street"
+msgstr ""
+
+msgctxt "Highway"
+msgid "pedestrian"
+msgstr ""
+
+msgctxt "Highway"
+msgid "track"
+msgstr ""
+
+msgctxt "Highway"
+msgid "footway"
+msgstr ""
+
+msgctxt "Highway"
+msgid "steps"
+msgstr ""
+
+msgid "Junction"
+msgstr ""
+
+msgid "roundabout"
+msgstr ""
+
+msgid "jughandle"
+msgstr ""
+
+msgid "Road Restrictions"
+msgstr ""
+
+msgid ""
+"Some road types already imply some access restrictions which should not be "
+"set again."
+msgstr ""
+
+msgid "No exit (cul-de-sac)"
+msgstr ""
+
+msgid "Transport mode restrictions"
+msgstr ""
+
+msgid "official"
+msgstr ""
+
+msgid "Vehicles per type"
+msgstr ""
+
+msgid "All vehicles"
+msgstr ""
+
+msgid "use_sidepath"
+msgstr ""
+
+msgid "Motor vehicles"
+msgstr ""
+
+msgid "Light Commercial Vehicles (goods)"
+msgstr ""
+
+msgid "Heavy Goods Vehicles (hgv)"
+msgstr ""
+
+msgid "Vehicles per use"
+msgstr ""
+
+msgid "Agricultural"
+msgstr ""
+
+msgid "Emergency vehicles"
+msgstr ""
+
+msgid "High-occupancy vehicles (hov)"
+msgstr ""
+
+msgid "Public Service Vehicles (psv)"
+msgstr ""
+
+msgid "Tourist buses"
+msgstr ""
+
+msgid "Min. speed (km/h)"
+msgstr ""
+
+msgid "Max. axleload (tonnes)"
+msgstr ""
+
+msgid "Max. length (meters)"
+msgstr ""
+
+msgid "Overtaking"
+msgstr ""
+
+msgctxt "overtaking"
+msgid "yes"
+msgstr ""
+
+msgctxt "overtaking"
+msgid "both"
+msgstr ""
+
+msgctxt "overtaking"
+msgid "forward"
+msgstr ""
+
+msgctxt "overtaking"
+msgid "backward"
+msgstr ""
+
+msgctxt "overtaking"
+msgid "no"
+msgstr ""
+
+msgid "Roundabout"
+msgstr ""
+
+msgctxt "Highway"
+msgid "construction"
+msgstr ""
+
+msgid "Ford"
+msgstr ""
+
+msgid "Ways"
+msgstr ""
+
+msgid "Track"
+msgstr ""
+
+msgid "Tracktype"
+msgstr ""
+
+msgid "grade1"
+msgstr ""
+
+msgid "grade2"
+msgstr ""
+
+msgid "grade3"
+msgstr ""
+
+msgid "grade4"
+msgstr ""
+
+msgid "grade5"
+msgstr ""
+
+msgid "MTB Scale"
+msgstr ""
+
+msgid "Path"
+msgstr ""
+
+msgid "SAC Scale"
+msgstr ""
+
+msgid "T1 - hiking trail"
+msgstr ""
+
+msgid "Trail well cleared. Area flat or slightly sloped, no fall hazard"
+msgstr ""
+
+msgid "T2 - mountain hiking trail"
+msgstr ""
+
+msgid ""
+"Trail with continuous line and balanced ascent. Terrain partially steep, "
+"fall hazard possible"
+msgstr ""
+
+msgid "T3 - difficult, exposed hiking trail"
+msgstr ""
+
+msgid ""
+"exposed sites may be secured with ropes or chains, possible need to use "
+"hands for balance. Partly exposed sites with fall hazard, scree, pathless "
+"jagged rocks"
+msgstr ""
+
+msgid "T4 - difficult, exposed, steep alpine trail"
+msgstr ""
+
+msgid ""
+"sometimes need for hand use to get ahead. Terrain quite exposed, precarious "
+"grassy acclivities, jagged rocks, facile snow-free glaciers"
+msgstr ""
+
+msgid "T5 - difficult alpine trail with climbing"
+msgstr ""
+
+msgid ""
+"single plainly climbing up to second grade. Exposed, demanding terrain, "
+"jagged rocks, few dangerous glacier and snow"
+msgstr ""
+
+msgid "T6 - hazardous alpine trail with climbing"
+msgstr ""
+
+msgid ""
+"climbing up to second grade. Often very exposed, precarious jagged rocks, "
+"glacier with danger to slip and fall"
+msgstr ""
+
+msgid "Visibility"
+msgstr ""
+
+msgctxt "trail_visibility"
+msgid "excellent"
+msgstr ""
+
+msgctxt "trail_visibility"
+msgid "good"
+msgstr ""
+
+msgctxt "trail_visibility"
+msgid "intermediate"
+msgstr ""
+
+msgctxt "trail_visibility"
+msgid "bad"
+msgstr ""
+
+msgctxt "trail_visibility"
+msgid "horrible"
+msgstr ""
+
+msgctxt "trail_visibility"
+msgid "no"
+msgstr ""
+
+msgid "Ski"
+msgstr ""
+
+msgid "Snowmobile"
+msgstr ""
+
+msgid "Dedicated Bridleway"
+msgstr ""
+
+msgid "Cycle Lane/Track"
+msgstr ""
+
+msgid "Cycleway"
+msgstr ""
+
+msgid "lane"
+msgstr ""
+
+msgid "track"
+msgstr ""
+
+msgid "opposite_lane"
+msgstr ""
+
+msgid "opposite_track"
+msgstr ""
+
+msgid "opposite"
+msgstr ""
+
+msgid "share_busway"
+msgstr ""
+
+msgid "shared_lane"
+msgstr ""
+
+msgid "Cycleway left"
+msgstr ""
+
+msgid "Cycleway right"
+msgstr ""
+
+msgid "Oneway (bicycle)"
+msgstr ""
+
+msgid "Edit Highway Attributes:"
+msgstr ""
+
+msgid "Highway"
+msgstr ""
+
+msgid "Dedicated Cycleway"
+msgstr ""
+
+msgid "Pedestrians"
+msgstr ""
+
+msgid "Segregated Foot- and Cycleway"
+msgstr ""
+
+msgid "Combined Foot- and Cycleway"
+msgstr ""
+
+msgid "Dedicated Footway"
+msgstr ""
+
+msgid "Steps"
+msgstr ""
+
+msgid "Amount of Steps"
+msgstr ""
+
+msgid "Ramp"
+msgstr ""
+
+msgid "Stroller ramp"
+msgstr ""
+
+msgid "Bicycle ramp"
+msgstr ""
+
+msgid "Wheelchair ramp"
+msgstr ""
+
+msgid "Luggage ramp"
+msgstr ""
+
+msgid "automatic"
+msgstr ""
+
+msgid "manual"
+msgstr ""
+
+msgid "Handrail"
+msgstr ""
+
+msgid "Left handrail"
+msgstr ""
+
+msgid "Center handrail"
+msgstr ""
+
+msgid "Right handrail"
+msgstr ""
+
+msgid "Waypoints"
+msgstr ""
+
+msgid "Motorway Junction"
+msgstr ""
+
+msgid "Number"
+msgstr ""
+
+msgid "Exit to"
+msgstr ""
+
+msgid "Services"
+msgstr ""
+
+msgid "Toilets"
+msgstr ""
+
+msgid "Rest Area"
+msgstr ""
+
+msgid "Drinking Water"
+msgstr ""
+
+msgid "Traffic Signal"
+msgstr ""
+
+msgid "Optional crossing attributes:"
+msgstr ""
+
+msgid "Pedestrian crossing type"
+msgstr ""
+
+msgid "uncontrolled"
+msgstr ""
+
+msgid "traffic_signals"
+msgstr ""
+
+msgid "island"
+msgstr ""
+
+msgid "unmarked"
+msgstr ""
+
+msgid "Crossing type name (UK)"
+msgstr ""
+
+msgid "zebra"
+msgstr ""
+
+msgid "pelican"
+msgstr ""
+
+msgid "toucan"
+msgstr ""
+
+msgid "puffin"
+msgstr ""
+
+msgid "pegasus"
+msgstr ""
+
+msgid "tiger"
+msgstr ""
+
+msgid "Button operated"
+msgstr ""
+
+msgid "Sound signals"
+msgstr ""
+
+msgid "Crossing attendant"
+msgstr ""
+
+msgid "Cross by bicycle"
+msgstr ""
+
+msgid "Cross on horseback"
+msgstr ""
+
+msgid "Optional values for specific countries"
+msgstr ""
+
+msgid "Stop"
+msgstr ""
+
+msgid "Give Way"
+msgstr ""
+
+msgid "Mini-Roundabout"
+msgstr ""
+
+msgid "clockwise"
+msgstr ""
+
+msgid "Pedestrian Crossing"
+msgstr ""
+
+msgid "In case of traffic signals:"
+msgstr ""
+
+msgid "Traffic Calming"
+msgstr ""
+
+msgid "bump"
+msgstr ""
+
+msgid "chicane"
+msgstr ""
+
+msgid "choker"
+msgstr ""
+
+msgid "cushion"
+msgstr ""
+
+msgid "hump"
+msgstr ""
+
+msgid "rumble_strip"
+msgstr ""
+
+msgid "table"
+msgstr ""
+
+msgid "Passing Place"
+msgstr ""
+
+msgid "Turning Circle"
+msgstr ""
+
+msgid "Turning Loop"
+msgstr ""
+
+msgid "City Limit"
+msgstr ""
+
+msgid "Second Name"
+msgstr ""
+
+msgid "Speed Camera"
+msgstr ""
+
+msgid "Traffic Mirror"
+msgstr ""
+
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
+msgctxt "junction=yes"
+msgid "Named Junction"
+msgstr ""
+
+msgid ""
+"Used in some countries for a named road junction who’s name serves for local "
+"orientation."
+msgstr ""
+
+msgid "Elevator"
+msgstr ""
+
+msgid "Grit Bin"
+msgstr ""
+
+msgid "Mountain Pass"
+msgstr ""
+
+msgid "Elevation"
+msgstr ""
+
+msgid "Barriers"
+msgstr ""
+
+msgid "Block"
+msgstr ""
+
+msgid "Material"
+msgstr ""
+
+msgid "stone"
+msgstr ""
+
+msgid "Bollard"
+msgstr ""
+
+msgid "Bollard type"
+msgstr ""
+
+msgid "rising"
+msgstr ""
+
+msgid "removable"
+msgstr ""
+
+msgid "plastic"
+msgstr ""
+
+msgid "Cycle Barrier"
+msgstr ""
+
+msgid "Cattle Grid"
+msgstr ""
+
+msgid "Bus Trap"
+msgstr ""
+
+msgid "Spikes"
+msgstr ""
+
+msgid "Toll Booth"
+msgstr ""
+
+msgid "Border Control"
+msgstr ""
+
+msgid "Hedge"
+msgstr ""
+
+msgid "Genus"
+msgstr ""
+
+msgid "Species"
+msgstr ""
+
+msgid "Taxon"
+msgstr ""
+
+msgid "Fence"
+msgstr ""
+
+msgid "barbed_wire"
+msgstr ""
+
+msgid "chain_link"
+msgstr ""
+
+msgid "electric"
+msgstr ""
+
+msgid "pole"
+msgstr ""
+
+msgid "split_rail"
+msgstr ""
+
+msgid "wire"
+msgstr ""
+
+msgid "Guard Rail"
+msgstr ""
+
+msgid "Wall"
+msgstr ""
+
+msgid "City Wall"
+msgstr ""
+
+msgid "Retaining Wall"
+msgstr ""
+
+msgctxt "Barrier"
+msgid "Ditch"
+msgstr ""
+
+msgid "Kerb"
+msgstr ""
+
+msgid "Entrance (Barrier Opening)"
+msgstr ""
+
+msgid "Gate"
+msgstr ""
+
+msgid "Lift Gate"
+msgstr ""
+
+msgid "Swing Gate"
+msgstr ""
+
+msgctxt "swing_gate"
+msgid "single"
+msgstr ""
+
+msgctxt "swing_gate"
+msgid "double"
+msgstr ""
+
+msgid "Hampshire Gate"
+msgstr ""
+
+msgid "Bump Gate"
+msgstr ""
+
+msgid "Kissing Gate"
+msgstr ""
+
+msgid "Chain"
+msgstr ""
+
+msgid "Stile"
+msgstr ""
+
+msgid "ladder"
+msgstr ""
+
+msgid "squeezer"
+msgstr ""
+
+msgid "stepover"
+msgstr ""
+
+msgid "Turnstile"
+msgstr ""
+
+msgid "Sally Port"
+msgstr ""
+
+msgid "Passageways"
+msgstr ""
+
+msgid "Building Passage"
+msgstr ""
+
+msgid "Arcade"
+msgstr ""
+
+msgid "Open on left side"
+msgstr ""
+
+msgid "Open on right side"
+msgstr ""
+
+msgid "Colonnade"
+msgstr ""
+
+msgid "Avalanche Protector"
+msgstr ""
+
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
+msgid "Water"
+msgstr ""
+
+msgid "Drain"
+msgstr ""
+
+msgid "Ditch"
+msgstr ""
+
+msgid "Stream"
+msgstr ""
+
+msgid "River"
+msgstr ""
+
+msgid "Canal"
+msgstr ""
+
+msgid "Spring"
+msgstr ""
+
+msgid ""
+"A point where groundwater naturally flows to the surface of the earth from "
+"underground."
+msgstr ""
+
+msgid "Waterfall"
+msgstr ""
+
+msgid "Weir"
+msgstr ""
+
+msgid "Dam"
+msgstr ""
+
+msgid "Groyne"
+msgstr ""
+
+msgid "Breakwater"
+msgstr ""
+
+msgid "Culvert"
+msgstr ""
+
+msgid "Basin"
+msgstr ""
+
+msgid "Reservoir"
+msgstr ""
+
+msgid "Covered Reservoir"
+msgstr ""
+
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
+msgid "A body of standing water, such as a lake or pond."
+msgstr ""
+
+msgid "Water Body"
+msgstr ""
+
+msgid "canal"
+msgstr ""
+
+msgid "lake"
+msgstr ""
+
+msgid "lagoon"
+msgstr ""
+
+msgid "oxbow"
+msgstr ""
+
+msgid "pond"
+msgstr ""
+
+msgid "reservoir"
+msgstr ""
+
+msgid "river"
+msgstr ""
+
+msgid "Salt Water"
+msgstr ""
+
+msgid "Coastline"
+msgstr ""
+
+msgid ""
+"Line between the sea and land (with the water on the right side of the way)."
+msgstr ""
+
+msgid "Riverbank"
+msgstr ""
+
+msgid "Wetland"
+msgstr ""
+
+msgid "Waterlogged area, either permanently or seasonally with vegetation."
+msgstr ""
+
+msgid "swamp"
+msgstr ""
+
+msgid "bog"
+msgstr ""
+
+msgid "marsh"
+msgstr ""
+
+msgid "reedbed"
+msgstr ""
+
+msgid "saltmarsh"
+msgstr ""
+
+msgid "tidalflat"
+msgstr ""
+
+msgid "mangrove"
+msgstr ""
+
+msgid "Mud"
+msgstr ""
+
+msgid "Large area covered with mud."
+msgstr ""
+
+msgid "Beach"
+msgstr ""
+
+msgid "A flat area of sand, gravel or pebble next to water."
+msgstr ""
+
+msgid "swimming"
+msgstr ""
+
+msgid "surfing"
+msgstr ""
+
+msgid "Bay"
+msgstr ""
+
+msgid ""
+"A large body of water partially enclosed by land but with a wide mouth."
+msgstr ""
+
+msgid "Cliff"
+msgstr ""
+
+msgid ""
+"A steep rock face exposure, with a significant vertical, or near vertical "
+"(leave the lower face to the right of the way)."
+msgstr ""
+
+msgid "Shipping"
+msgstr ""
+
+msgid "Ferry Terminal"
+msgstr ""
+
+msgid "Cargo"
+msgstr ""
+
+msgctxt "cargo"
+msgid "passengers"
+msgstr ""
+
+msgctxt "cargo"
+msgid "vehicle"
+msgstr ""
+
+msgctxt "cargo"
+msgid "bicycle"
+msgstr ""
+
+msgctxt "cargo"
+msgid "hgv"
+msgstr ""
+
+msgctxt "cargo"
+msgid "passengers;vehicle"
+msgstr ""
+
+msgid "Ferry Route"
+msgstr ""
+
+msgid "Marina"
+msgstr ""
+
+msgid "Dump Station"
+msgstr ""
+
+msgid "public"
+msgstr ""
+
+msgid "Marine Fuel"
+msgstr ""
+
+msgid "Agip"
+msgstr ""
+
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
+msgid "Pier"
+msgstr ""
+
+msgid "Lock Gate"
+msgstr ""
+
+msgid "Turning Point"
+msgstr ""
+
+msgid "Slipway"
+msgstr ""
+
+msgid "Boatyard"
+msgstr ""
+
+msgid "Dock"
+msgstr ""
+
+msgid "Transport"
+msgstr ""
+
+msgid "Railway"
+msgstr ""
+
+msgid "Rail"
+msgstr ""
+
+msgid "main"
+msgstr ""
+
+msgid "branch"
+msgstr ""
+
+msgid "industrial"
+msgstr ""
+
+msgid "military"
+msgstr ""
+
+msgid "tourism"
+msgstr ""
+
+msgid "freight"
+msgstr ""
+
+msgid "Narrow Gauge Rail"
+msgstr ""
+
+msgid "Monorail"
+msgstr ""
+
+msgid "Preserved"
+msgstr ""
+
+msgid "Light Rail"
+msgstr ""
+
+msgid "Subway"
+msgstr ""
+
+msgid "Tram"
+msgstr ""
+
+msgid "Bus Guideway"
+msgstr ""
+
+msgid "Disused Rail"
+msgstr ""
+
+msgid "Abandoned Rail"
+msgstr ""
+
+msgid "Level Crossing"
+msgstr ""
+
+msgid "Traffic lights"
+msgstr ""
+
+msgid "Barrier"
+msgstr ""
+
+msgctxt "crossing:barrier"
+msgid "yes"
+msgstr ""
+
+msgctxt "crossing:barrier"
+msgid "no"
+msgstr ""
+
+msgctxt "crossing:barrier"
+msgid "half"
+msgstr ""
+
+msgctxt "crossing:barrier"
+msgid "full"
+msgstr ""
+
+msgctxt "crossing:barrier"
+msgid "double_half"
+msgstr ""
+
+msgid "Crossing"
+msgstr ""
+
+msgid "Crossing type"
+msgstr ""
+
+msgid "Turntable"
+msgstr ""
+
+msgid "Buffer Stop"
+msgstr ""
+
+msgid "Railway Switch"
+msgstr ""
+
+msgid "Railway milestone"
+msgstr ""
+
+msgid "Aerialway"
+msgstr ""
+
+msgid "Cable Car"
+msgstr ""
+
+msgid "Number of people per hour"
+msgstr ""
+
+msgid "Number of people per car"
+msgstr ""
+
+msgid "Typical journey time in minutes"
+msgstr ""
+
+msgid "Has heating?"
+msgstr ""
+
+msgid "Chair Lift"
+msgstr ""
+
+msgid "Number of people per chair"
+msgstr ""
+
+msgid "Has bubble?"
+msgstr ""
+
+msgid "Gondola"
+msgstr ""
+
+msgid "Number of people per gondola"
+msgstr ""
+
+msgid "Mixed Lift"
+msgstr ""
+
+msgid "Number of people per gondola/chair"
+msgstr ""
+
+msgid "Drag Lift"
+msgstr ""
+
+msgid ""
+"drag_lift (general type - use only if exact type (see values below) is "
+"unknown)"
+msgstr ""
+
+msgid "t-bar"
+msgstr ""
+
+msgid "j-bar"
+msgstr ""
+
+msgid "platter"
+msgstr ""
+
+msgid "rope_tow"
+msgstr ""
+
+msgid "Magic Carpet"
+msgstr ""
+
+msgid "Goods"
+msgstr ""
+
+msgctxt "aerialway"
+msgid "Station"
+msgstr ""
+
+msgid "Pylon"
+msgstr ""
+
+msgid "Parking"
+msgstr ""
+
+msgid "Park and Ride"
+msgstr ""
+
+msgid "bus"
+msgstr ""
+
+msgid "train"
+msgstr ""
+
+msgid "tram"
+msgstr ""
+
+msgid "metro"
+msgstr ""
+
+msgid "ferry"
+msgstr ""
+
+msgid "Capacity (overall)"
+msgstr ""
+
+msgid "Spaces for Disabled"
+msgstr ""
+
+msgid "Spaces for Women"
+msgstr ""
+
+msgid "Spaces for Parents"
+msgstr ""
+
+msgid "See the Wiki for other capacity:[types]=*."
+msgstr ""
+
+msgid "Parking Space"
+msgstr ""
+
+msgid "Capacity"
+msgstr ""
+
+msgid "Covered (with roof)"
+msgstr ""
+
+msgid "Parking Entrance"
+msgstr ""
+
+msgid "Fuel"
+msgstr ""
+
+msgid "With shop"
+msgstr ""
+
+msgid "convenience"
+msgstr ""
+
+msgid "kiosk"
+msgstr ""
+
+msgid "Diesel (Gas To Liquid - ultimate diesel)"
+msgstr ""
+
+msgid "Diesel for Heavy Good Vehicles"
+msgstr ""
+
+msgid "1/25 mix (mofa/moped)"
+msgstr ""
+
+msgid "1/50 mix (mofa/moped)"
+msgstr ""
+
+msgid "Fuel cards:"
+msgstr ""
+
+msgid "DKV"
+msgstr ""
+
+msgid "Routex"
+msgstr ""
+
+msgid "UTA"
+msgstr ""
+
+msgid "Charging Station"
+msgstr ""
+
+msgid "Voltage"
+msgstr ""
+
+msgid "Amperage"
+msgstr ""
+
+msgid "Wash"
+msgstr ""
+
+msgid "Car Dealer"
+msgstr ""
+
+msgid "Second hand"
+msgstr ""
+
+msgid "only"
+msgstr ""
+
+msgid "Repair"
+msgstr ""
+
+msgid "Parts"
+msgstr ""
+
+msgid "Tires"
+msgstr ""
+
+msgid "Rental"
+msgstr ""
+
+msgid "Sharing"
+msgstr ""
+
+msgid "Motorcycle Dealer"
+msgstr ""
+
+msgid "independent"
+msgstr ""
+
+msgid "Services:"
+msgstr ""
+
+msgid "Sale"
+msgstr ""
+
+msgid "brand"
+msgstr ""
+
+msgid "oldtimer"
+msgstr ""
+
+msgid "Safety inspection"
+msgstr ""
+
+msgid "DEKRA"
+msgstr ""
+
+msgid "GTÜ"
+msgstr ""
+
+msgid "MOT"
+msgstr ""
+
+msgid "TÜV"
+msgstr ""
+
+msgid "Clothes"
+msgstr ""
+
+msgid "anchors"
+msgstr ""
+
+msgid "ground_slots"
+msgstr ""
+
+msgid "informal"
+msgstr ""
+
+msgid "lockers"
+msgstr ""
+
+msgid "rack"
+msgstr ""
+
+msgid "shed"
+msgstr ""
+
+msgid "stands"
+msgstr ""
+
+msgid "wall_loops"
+msgstr ""
+
+msgid "Covered"
+msgstr ""
+
+msgid "Bike Dealer"
+msgstr ""
+
+msgid "Bicycles are sold"
+msgstr ""
+
+msgid "Second-hand bicycles are sold"
+msgstr ""
+
+msgid "Bicycles are repaired"
+msgstr ""
+
+msgid "Bicycles are rented"
+msgstr ""
+
+msgid "Free bicycle pump"
+msgstr ""
+
+msgid "Tools for do-it-yourself repair (may be a bike co-operative)"
+msgstr ""
+
+msgid "Bicycles are washed (for a fee)"
+msgstr ""
+
+msgid "Public Bicycle Repair Station"
+msgstr ""
+
+msgid "Chain tool"
+msgstr ""
+
+msgid "Public Transport"
+msgstr ""
+
+msgid "Public Transport Route"
+msgstr ""
+
+msgid "Route type"
+msgstr ""
+
+msgid "subway"
+msgstr ""
+
+msgid "monorail"
+msgstr ""
+
+msgid "light_rail"
+msgstr ""
+
+msgid "trolleybus"
+msgstr ""
+
+msgid "aerialway"
+msgstr ""
+
+msgid "From (initial stop)"
+msgstr ""
+
+msgid "To (terminal stop)"
+msgstr ""
+
+msgid "Via (intermediate stops)"
+msgstr ""
+
+msgid "Network"
+msgstr ""
+
+msgid "Color (HTML name or hexadecimal code)"
+msgstr ""
+
+msgctxt "color"
+msgid "black"
+msgstr ""
+
+msgctxt "color"
+msgid "brown"
+msgstr ""
+
+msgctxt "color"
+msgid "green"
+msgstr ""
+
+msgctxt "color"
+msgid "red"
+msgstr ""
+
+msgctxt "color"
+msgid "blue"
+msgstr ""
+
+msgctxt "color"
+msgid "gray"
+msgstr ""
+
+msgctxt "color"
+msgid "white"
+msgstr ""
+
+msgctxt "color"
+msgid "#CD853F"
+msgstr ""
+
+msgid "stop position"
+msgstr ""
+
+msgid "stop position (exit only)"
+msgstr ""
+
+msgid "stop position (entry only)"
+msgstr ""
+
+msgid "platform"
+msgstr ""
+
+msgid "platform (exit only)"
+msgstr ""
+
+msgid "platform (entry only)"
+msgstr ""
+
+msgid "route segment"
+msgstr ""
+
+msgid "Route Master"
+msgstr ""
+
+msgid "route variant/direction (at least 2)"
+msgstr ""
+
+msgid "Stop Area"
+msgstr ""
+
+msgid "UIC reference"
+msgstr ""
+
+msgid "UIC name"
+msgstr ""
+
+msgid "Stop Position"
+msgstr ""
+
+msgid "Platform"
+msgstr ""
+
+msgid "Subway Entrance"
+msgstr ""
+
+msgid "Station or amenities"
+msgstr ""
+
+msgid "Bus"
+msgstr ""
+
+msgid "Bus stop (legacy)"
+msgstr ""
+
+msgid "Tram stop (legacy)"
+msgstr ""
+
+msgid "Train"
+msgstr ""
+
+msgid "Railway station (legacy)"
+msgstr ""
+
+msgid "Railway halt (legacy)"
+msgstr ""
+
+msgid "Trolleybus"
+msgstr ""
+
+msgid "Share taxi"
+msgstr ""
+
+msgid "Funicular"
+msgstr ""
+
+msgid "Ferry"
+msgstr ""
+
+msgid "Bench"
+msgstr ""
+
+msgid "Shelter"
+msgstr ""
+
+msgid "Highway platform (legacy)"
+msgstr ""
+
+msgid "Railway platform (legacy)"
+msgstr ""
+
+msgid "funicular"
+msgstr ""
+
+msgctxt "railway"
+msgid "Station"
+msgstr ""
+
+msgid "Building"
+msgstr ""
+
+msgid "Ticket Machine"
+msgstr ""
+
+msgid "Reference Number"
+msgstr ""
+
+msgid "Public Transport (Legacy)"
+msgstr ""
+
+msgid "Public transport route (Legacy)"
+msgstr ""
+
+msgid "forward segment"
+msgstr ""
+
+msgid "backward segment"
+msgstr ""
+
+msgid "halt point"
+msgstr ""
+
+msgid "forward halt point"
+msgstr ""
+
+msgid "backward halt point"
+msgstr ""
+
+msgid "UIC-Reference"
+msgstr ""
+
+msgid "Railway Halt"
+msgstr ""
+
+msgid "Tram Stop"
+msgstr ""
+
+msgid "Railway Platform"
+msgstr ""
+
+msgid "Reference (track number)"
+msgstr ""
+
+msgid "Bus Station"
+msgstr ""
+
+msgid "Bus Stop"
+msgstr ""
+
+msgid "Tactile Paving"
+msgstr ""
+
+msgid "incorrect"
+msgstr ""
+
+msgid "Bus Platform"
+msgstr ""
+
+msgid "Taxi"
+msgstr ""
+
+msgid "Airport"
+msgstr ""
+
+msgid "Airport Ground"
+msgstr ""
+
+msgid "IATA"
+msgstr ""
+
+msgid "ICAO"
+msgstr ""
+
+msgid "Runway"
+msgstr ""
+
+msgid "Taxiway"
+msgstr ""
+
+msgid "Helipad"
+msgstr ""
+
+msgid "Apron"
+msgstr ""
+
+msgid "Plane Parking Position"
+msgstr ""
+
+msgid "Hangar"
+msgstr ""
+
+msgctxt "building"
+msgid "hangar"
+msgstr ""
+
+msgctxt "building"
+msgid "yes"
+msgstr ""
+
+msgid "Beacon"
+msgstr ""
+
+msgid "Windsock"
+msgstr ""
+
+msgid "Terminal"
+msgstr ""
+
+msgctxt "airport"
+msgid "Gate"
+msgstr ""
+
+msgid "Facilities"
+msgstr ""
+
+msgid "Accommodation"
+msgstr ""
+
+msgid "Hotel"
+msgstr ""
+
+msgid "Stars"
+msgstr ""
+
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
+msgid "Motel"
+msgstr ""
+
+msgid "Guest House/Bed & Breakfast"
+msgstr ""
+
+msgid "Chalet"
+msgstr ""
+
+msgid "Hostel"
+msgstr ""
+
+msgid "Alpine Hut"
+msgstr ""
+
+msgid "Caravan Site/RV Park"
+msgstr ""
+
+msgid "Number of places"
+msgstr ""
+
+msgid "Power supply"
+msgstr ""
+
+msgid "Tents allowed"
+msgstr ""
+
+msgid "Camping Site"
+msgstr ""
+
+msgid "Food+Drinks"
+msgstr ""
+
+msgid "Restaurant"
+msgstr ""
+
+msgid "Cuisine"
+msgstr ""
+
+msgid "italian"
+msgstr ""
+
+msgid "chinese"
+msgstr ""
+
+msgid "pizza"
+msgstr ""
+
+msgid "burger"
+msgstr ""
+
+msgid "greek"
+msgstr ""
+
+msgid "german"
+msgstr ""
+
+msgid "indian"
+msgstr ""
+
+msgid "regional"
+msgstr ""
+
+msgid "kebab"
+msgstr ""
+
+msgid "turkish"
+msgstr ""
+
+msgid "asian"
+msgstr ""
+
+msgid "thai"
+msgstr ""
+
+msgid "mexican"
+msgstr ""
+
+msgid "japanese"
+msgstr ""
+
+msgid "french"
+msgstr ""
+
+msgid "sandwich"
+msgstr ""
+
+msgid "sushi"
+msgstr ""
+
+msgid "steak_house"
+msgstr ""
+
+msgid "Microbrewery"
+msgstr ""
+
+msgid "Outdoor seating"
+msgstr ""
+
+msgid "Fast Food"
+msgstr ""
+
+msgid "fish_and_chips"
+msgstr ""
+
+msgid "chicken"
+msgstr ""
+
+msgid "Food Court"
+msgstr ""
+
+msgid "Cafe"
+msgstr ""
+
+msgid "ice_cream"
+msgstr ""
+
+msgid "Pub"
+msgstr ""
+
+msgid "Beer Garden"
+msgstr ""
+
+msgid "Bar"
+msgstr ""
+
+msgid "Night Club"
+msgstr ""
+
+msgid "Strip Club"
+msgstr ""
+
+msgid "Tourism"
+msgstr ""
+
+msgid "Attraction"
+msgstr ""
+
+msgid "Viewpoint"
+msgstr ""
+
+msgid "Look-Out Tower"
+msgstr ""
+
+msgid "Information Office"
+msgstr ""
+
+msgid "An office where you can get information about a town or region."
+msgstr ""
+
+msgid "Map"
+msgstr ""
+
+msgid "A board with a map."
+msgstr ""
+
+msgid "Detail Grade"
+msgstr ""
+
+msgid "topo"
+msgstr ""
+
+msgid "street"
+msgstr ""
+
+msgid "scheme"
+msgstr ""
+
+msgid "toposcope"
+msgstr ""
+
+msgid "Shown Area"
+msgstr ""
+
+msgid "site"
+msgstr ""
+
+msgid "city"
+msgstr ""
+
+msgid "region"
+msgstr ""
+
+msgid "Closer Description"
+msgstr ""
+
+msgid "Routes shown for:"
+msgstr ""
+
+msgid "Hiking"
+msgstr ""
+
+msgid "Cycling"
+msgstr ""
+
+msgid "Mountainbiking"
+msgstr ""
+
+msgid "Skiing"
+msgstr ""
+
+msgid "Riding"
+msgstr ""
+
+msgid "... other transportation modes possible"
+msgstr ""
+
+msgid "Information Board"
+msgstr ""
+
+msgid "A board with information."
+msgstr ""
+
+msgid "Board Content"
+msgstr ""
+
+msgid "notice"
+msgstr ""
+
+msgid "history"
+msgstr ""
+
+msgid "nature"
+msgstr ""
+
+msgid "wildlife"
+msgstr ""
+
+msgid "plants"
+msgstr ""
+
+msgid "geology"
+msgstr ""
+
+msgid "Guidepost"
+msgstr ""
+
+msgid ""
+"A Signpost/Guidepost to indicate the directions to different destinations."
+msgstr ""
+
+msgid "Information Terminal"
+msgstr ""
+
+msgid "Information access via electronic methods."
+msgstr ""
+
+msgid "Closer description"
+msgstr ""
+
+msgid "Audio Guide"
+msgstr ""
+
+msgid "Information using headphones or a mobile phone."
+msgstr ""
+
+msgid "Audioguide via mobile phone?"
+msgstr ""
+
+msgid "Phone number"
+msgstr ""
+
+msgid "Other Information Point"
+msgstr ""
+
+msgid "Leisure"
+msgstr ""
+
+msgid "Movie Theater/Cinema"
+msgstr ""
+
+msgid "Drive-in theater"
+msgstr ""
+
+msgid "3D"
+msgstr ""
+
+msgid "Number of screens"
+msgstr ""
+
+msgid "Minimum age"
+msgstr ""
+
+msgid "Zoo"
+msgstr ""
+
+msgid "Dog Park"
+msgstr ""
+
+msgid "fence"
+msgstr ""
+
+msgid "wall"
+msgstr ""
+
+msgid "Amusement/Theme Park"
+msgstr ""
+
+msgid "Water Park"
+msgstr ""
+
+msgid "Sauna"
+msgstr ""
+
+msgid "Horse Riding"
+msgstr ""
+
+msgid "Casino"
+msgstr ""
+
+msgid "Brothel"
+msgstr ""
+
+msgid "Playground"
+msgstr ""
+
+msgid "Picnic Site"
+msgstr ""
+
+msgid "Fireplace"
+msgstr ""
+
+msgid "Picnic Table"
+msgstr ""
+
+msgid "Public Grill"
+msgstr ""
+
+msgctxt "grill"
+msgid "Fuel"
+msgstr ""
+
+msgid "charcoal"
+msgstr ""
+
+msgid "Firepit"
+msgstr ""
+
+msgid "Fishing"
+msgstr ""
+
+msgid "Private Swimming Pool"
+msgstr ""
+
+msgid "Culture"
+msgstr ""
+
+msgid "Museum"
+msgstr ""
+
+msgid "Theatre"
+msgstr ""
+
+msgid "Library"
+msgstr ""
+
+msgid "Arts Centre"
+msgstr ""
+
+msgid "Artwork"
+msgstr ""
+
+msgid "mural"
+msgstr ""
+
+msgid "sculpture"
+msgstr ""
+
+msgid "statue"
+msgstr ""
+
+msgid "Artist Name"
+msgstr ""
+
+msgid "Recording Studio"
+msgstr ""
+
+msgid "audio"
+msgstr ""
+
+msgid "video"
+msgstr ""
+
+msgid "Place of Worship"
+msgstr ""
+
+msgid "Church"
+msgstr ""
+
+msgid "Building type"
+msgstr ""
+
+msgid "basilica"
+msgstr ""
+
+msgid "cathedral"
+msgstr ""
+
+msgid "chapel"
+msgstr ""
+
+msgid "church"
+msgstr ""
+
+msgid "temple"
+msgstr ""
+
+msgctxt "christian"
+msgid "anglican"
+msgstr ""
+
+msgctxt "christian"
+msgid "baptist"
+msgstr ""
+
+msgctxt "christian"
+msgid "catholic"
+msgstr ""
+
+msgctxt "christian"
+msgid "evangelical"
+msgstr ""
+
+msgctxt "christian"
+msgid "greek_catholic"
+msgstr ""
+
+msgctxt "christian"
+msgid "greek_orthodox"
+msgstr ""
+
+msgctxt "christian"
+msgid "jehovahs_witness"
+msgstr ""
+
+msgctxt "christian"
+msgid "lutheran"
+msgstr ""
+
+msgctxt "christian"
+msgid "methodist"
+msgstr ""
+
+msgctxt "christian"
+msgid "mormon"
+msgstr ""
+
+msgctxt "christian"
+msgid "new_apostolic"
+msgstr ""
+
+msgctxt "christian"
+msgid "orthodox"
+msgstr ""
+
+msgctxt "christian"
+msgid "pentecostal"
+msgstr ""
+
+msgctxt "christian"
+msgid "presbyterian"
+msgstr ""
+
+msgctxt "christian"
+msgid "protestant"
+msgstr ""
+
+msgctxt "christian"
+msgid "quaker"
+msgstr ""
+
+msgctxt "christian"
+msgid "roman_catholic"
+msgstr ""
+
+msgctxt "christian"
+msgid "russian_orthodox"
+msgstr ""
+
+msgctxt "christian"
+msgid "seventh_day_adventist"
+msgstr ""
+
+msgid "Mosque"
+msgstr ""
+
+msgid "mosque"
+msgstr ""
+
+msgid "ibadi"
+msgstr ""
+
+msgid "Synagogue"
+msgstr ""
+
+msgid "synagogue"
+msgstr ""
+
+msgctxt "jewish"
+msgid "orthodox"
+msgstr ""
+
+msgctxt "jewish"
+msgid "conservative"
+msgstr ""
+
+msgctxt "jewish"
+msgid "reform"
+msgstr ""
+
+msgid "Buddhist Temple"
+msgstr ""
+
+msgid "theravada"
+msgstr ""
+
+msgid "mahayana"
+msgstr ""
+
+msgid "vajrayana"
+msgstr ""
+
+msgid "Hindu Temple"
+msgstr ""
+
+msgid "vaishnavism"
+msgstr ""
+
+msgid "shaivism"
+msgstr ""
+
+msgid "shaktism"
+msgstr ""
+
+msgid "smartism"
+msgstr ""
+
+msgid "Shinto Shrine"
+msgstr ""
+
+msgid "Other Place of Worship"
+msgstr ""
+
+msgid "Public Building"
+msgstr ""
+
+msgid "Town Hall"
+msgstr ""
+
+msgid "Community Centre"
+msgstr ""
+
+msgid "Embassy"
+msgstr ""
+
+msgid "Courthouse"
+msgstr ""
+
+msgid "Prison"
+msgstr ""
+
+msgid "Police"
+msgstr ""
+
+msgid "Ranger Station"
+msgstr ""
+
+msgid "Fire Station"
+msgstr ""
+
+msgid "Post Office"
+msgstr ""
+
+msgid "Education"
+msgstr ""
+
+msgid "Kindergarten"
+msgstr ""
+
+msgid "School"
+msgstr ""
+
+msgid "University"
+msgstr ""
+
+msgid "College"
+msgstr ""
+
+msgid "Driving School"
+msgstr ""
+
+msgid "License Classes"
+msgstr ""
+
+msgid "A;A1;B;BE;C"
+msgstr ""
+
+msgid "A;A1;B;B1;C;C1;D;D1;BE;CE;C1E;DE;D1E"
+msgstr ""
+
+msgid "Health"
+msgstr ""
+
+msgid "Hospital"
+msgstr ""
+
+msgid "Clinic"
+msgstr ""
+
+msgid "Doctor''s Office"
+msgstr ""
+
+msgid "Dentist"
+msgstr ""
+
+msgid "Nursing Home"
+msgstr ""
+
+msgid "Retirement Home"
+msgstr ""
+
+msgid "Pharmacy"
+msgstr ""
+
+msgid "Dispensing"
+msgstr ""
+
+msgid "Baby Hatch/Safe Haven"
+msgstr ""
+
+msgid "Emergency Access Point"
+msgstr ""
+
+msgid "Point Number"
+msgstr ""
+
+msgid "Point Name"
+msgstr ""
+
+msgid "Phone Number"
+msgstr ""
+
+msgid "(Use international code, like +12-345-67890)"
+msgstr ""
+
+msgid "Veterinary"
+msgstr ""
+
+msgid "Toilets/Restrooms"
+msgstr ""
+
+msgid "Access rights"
+msgstr ""
+
+msgid "seasonal"
+msgstr ""
+
+msgid "flush"
+msgstr ""
+
+msgid "pitlatrine"
+msgstr ""
+
+msgid "chemical"
+msgstr ""
+
+msgid "bucket"
+msgstr ""
+
+msgid "Usage Position"
+msgstr ""
+
+msgid "seated"
+msgstr ""
+
+msgid "seated;urinal"
+msgstr ""
+
+msgid "squat"
+msgstr ""
+
+msgid "urinal"
+msgstr ""
+
+msgid "Shower"
+msgstr ""
+
+msgid "Post Box"
+msgstr ""
+
+msgid "Collection times"
+msgstr ""
+
+msgid "Mo-Sa 09:00"
+msgstr ""
+
+msgid "Mo-Fr 17:30; Sa 12:00"
+msgstr ""
+
+msgid "Mo-Fr 15:00,19:00; Sa 15:10; Su 10:30"
+msgstr ""
+
+msgid "Drive through"
+msgstr ""
+
+msgid "Telephone"
+msgstr ""
+
+msgid "Coins"
+msgstr ""
+
+msgctxt "payment"
+msgid "Notes"
+msgstr ""
+
+msgid "Telephone cards"
+msgstr ""
+
+msgid "Emergency Phone"
+msgstr ""
+
+msgid "Internet Access"
+msgstr ""
+
+msgid "Automated Defibrillator"
+msgstr ""
+
+msgid "Located inside a building?"
+msgstr ""
+
+msgid "Last check date (YYYY-MM-DD)"
+msgstr ""
+
+msgid "Last check note"
+msgstr ""
+
+msgid "Clock"
+msgstr ""
+
+msgid "Display"
+msgstr ""
+
+msgid "analog"
+msgstr ""
+
+msgid "digital"
+msgstr ""
+
+msgid "sundial"
+msgstr ""
+
+msgid "unorthodox"
+msgstr ""
+
+msgid "Support"
+msgstr ""
+
+msgctxt "mounting/support"
+msgid "pole"
+msgstr ""
+
+msgctxt "mounting/support"
+msgid "wall_mounted"
+msgstr ""
+
+msgctxt "mounting/support"
+msgid "billboard"
+msgstr ""
+
+msgctxt "mounting/support"
+msgid "ground"
+msgstr ""
+
+msgid "Visibility/readability"
+msgstr ""
+
+msgid "house (up to 5m)"
+msgstr ""
+
+msgid "street (up to 20m)"
+msgstr ""
+
+msgid "area (more than 20m)"
+msgstr ""
+
+msgid "Shows current date"
+msgstr ""
+
+msgid "Shows temperature"
+msgstr ""
+
+msgid "Shows barometric pressure"
+msgstr ""
+
+msgid "Shows humidity"
+msgstr ""
+
+msgid "Recycling Container"
+msgstr ""
+
+msgid "Batteries"
+msgstr ""
+
+msgid "Cans"
+msgstr ""
+
+msgid "Cardboard"
+msgstr ""
+
+msgid "Electrical Appliances"
+msgstr ""
+
+msgid "Glass"
+msgstr ""
+
+msgid "Glass Bottles"
+msgstr ""
+
+msgid "Green Waste"
+msgstr ""
+
+msgid "Paper"
+msgstr ""
+
+msgid "Plastic"
+msgstr ""
+
+msgid "Plastic Bottles"
+msgstr ""
+
+msgid "Plastic Packaging"
+msgstr ""
+
+msgid "Scrap Metal"
+msgstr ""
+
+msgid "Shoes"
+msgstr ""
+
+msgid "Small Appliances"
+msgstr ""
+
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
+msgstr ""
+
+msgid "Waste Basket/Trash Can"
+msgstr ""
+
+msgid "Waste Disposal/Dumpster"
+msgstr ""
+
+msgid "Sanitary Dump Station"
+msgstr ""
+
+msgid "Suction pumpout"
+msgstr ""
+
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
+msgstr ""
+
+msgid "Operation times"
+msgstr ""
+
+msgid "Backrest"
+msgstr ""
+
+msgid "Amount of Seats"
+msgstr ""
+
+msgid "Type of shelter"
+msgstr ""
+
+msgctxt "shelter"
+msgid "basic_hut"
+msgstr ""
+
+msgctxt "shelter"
+msgid "lean_to"
+msgstr ""
+
+msgctxt "shelter"
+msgid "picnic_shelter"
+msgstr ""
+
+msgctxt "shelter"
+msgid "public_transport"
+msgstr ""
+
+msgctxt "shelter"
+msgid "weather_shelter"
+msgstr ""
+
+msgctxt "shelter"
+msgid "wildlife_hide"
+msgstr ""
+
+msgid "Hunting Stand"
+msgstr ""
+
+msgid "Height"
+msgstr ""
+
+msgctxt "height"
+msgid "low"
+msgstr ""
+
+msgctxt "height"
+msgid "half"
+msgstr ""
+
+msgctxt "height"
+msgid "full"
+msgstr ""
+
+msgid "Hide"
+msgstr ""
+
+msgid "Lock"
+msgstr ""
+
+msgid "Indoor"
+msgstr ""
+
+msgid "Fire Hydrant"
+msgstr ""
+
+msgctxt "pipeline"
+msgid "underground"
+msgstr ""
+
+msgctxt "pipeline"
+msgid "pillar"
+msgstr ""
+
+msgctxt "pipeline"
+msgid "wall"
+msgstr ""
+
+msgctxt "pipeline"
+msgid "pond"
+msgstr ""
+
+msgid "Diameter (in mm)"
+msgstr ""
+
+msgid "Hydrant Position"
+msgstr ""
+
+msgctxt "hydrant position"
+msgid "lane"
+msgstr ""
+
+msgctxt "hydrant position"
+msgid "parking_lot"
+msgstr ""
+
+msgctxt "hydrant position"
+msgid "sidewalk"
+msgstr ""
+
+msgctxt "hydrant position"
+msgid "green"
+msgstr ""
+
+msgid "Pressure (in bar)"
+msgstr ""
+
+msgid "suction"
+msgstr ""
+
+msgid "Count"
+msgstr ""
+
+msgid "Advertising Column"
+msgstr ""
+
+msgid "Billboard"
+msgstr ""
+
+msgid "Sports"
+msgstr ""
+
+msgid "Sport Facilities"
+msgstr ""
+
+msgid "Stadium"
+msgstr ""
+
+msgid "Sports Centre"
+msgstr ""
+
+msgid "Pitch"
+msgstr ""
+
+msgid "artificial_turf"
+msgstr ""
+
+msgid "decoturf"
+msgstr ""
+
+msgid "tartan"
+msgstr ""
+
+msgid "Racetrack"
+msgstr ""
+
+msgid "Golf Course"
+msgstr ""
+
+msgid "Miniature Golf"
+msgstr ""
+
+msgid "Multi"
+msgstr ""
+
+msgctxt "running"
+msgid "pitch"
+msgstr ""
+
+msgctxt "running"
+msgid "sports_centre"
+msgstr ""
+
+msgctxt "running"
+msgid "stadium"
+msgstr ""
+
+msgctxt "running"
+msgid "track"
+msgstr ""
+
+msgid "Nine-pin Bowling"
+msgstr ""
+
+msgid "Ten-pin Bowling"
+msgstr ""
+
+msgid "Archery"
+msgstr ""
+
+msgid "Track and Field Athletics"
+msgstr ""
+
+msgid "Running"
+msgstr ""
+
+msgid "Climbing"
+msgstr ""
+
+msgid "Canoeing/Kayaking"
+msgstr ""
+
+msgctxt "racing"
+msgid "pitch"
+msgstr ""
+
+msgctxt "racing"
+msgid "sports_centre"
+msgstr ""
+
+msgctxt "racing"
+msgid "stadium"
+msgstr ""
+
+msgctxt "racing"
+msgid "track"
+msgstr ""
+
+msgid "Dog Racing"
+msgstr ""
+
+msgid "Equestrian"
+msgstr ""
+
+msgid "Horse Racing"
+msgstr ""
+
+msgid "Gymnastics"
+msgstr ""
+
+msgid "Skating"
+msgstr ""
+
+msgid "ice_rink"
+msgstr ""
+
+msgid "Skateboard"
+msgstr ""
+
+msgid "Swimming"
+msgstr ""
+
+msgid "swimming_pool"
+msgstr ""
+
+msgid "water_park"
+msgstr ""
+
+msgid "Scuba Diving"
+msgstr ""
+
+msgid "Piste type"
+msgstr ""
+
+msgid "downhill"
+msgstr ""
+
+msgid "nordic"
+msgstr ""
+
+msgid "skitour"
+msgstr ""
+
+msgid "sled"
+msgstr ""
+
+msgid "sleigh"
+msgstr ""
+
+msgid "snow_park"
+msgstr ""
+
+msgid "Difficulty"
+msgstr ""
+
+msgctxt "piste:difficulty"
+msgid "novice"
+msgstr ""
+
+msgctxt "piste:difficulty"
+msgid "easy"
+msgstr ""
+
+msgctxt "piste:difficulty"
+msgid "intermediate"
+msgstr ""
+
+msgctxt "piste:difficulty"
+msgid "advanced"
+msgstr ""
+
+msgctxt "piste:difficulty"
+msgid "expert"
+msgstr ""
+
+msgctxt "piste:difficulty"
+msgid "freeride"
+msgstr ""
+
+msgid "Grooming"
+msgstr ""
+
+msgctxt "piste:grooming"
+msgid "classic"
+msgstr ""
+
+msgctxt "piste:grooming"
+msgid "mogul"
+msgstr ""
+
+msgctxt "piste:grooming"
+msgid "skating"
+msgstr ""
+
+msgctxt "piste:grooming"
+msgid "classic;skating"
+msgstr ""
+
+msgctxt "piste:grooming"
+msgid "scooter"
+msgstr ""
+
+msgctxt "piste:grooming"
+msgid "backcountry"
+msgstr ""
+
+msgid "Shooting"
+msgstr ""
+
+msgid "Sport (Ball)"
+msgstr ""
+
+msgid "Soccer"
+msgstr ""
+
+msgid "Australian Football"
+msgstr ""
+
+msgid "American Football"
+msgstr ""
+
+msgid "Canadian Football"
+msgstr ""
+
+msgid "Gaelic Games"
+msgstr ""
+
+msgid "Hurling"
+msgstr ""
+
+msgid "Football"
+msgstr ""
+
+msgid "Camogie"
+msgstr ""
+
+msgid "Rounders"
+msgstr ""
+
+msgid "Rugby League"
+msgstr ""
+
+msgid "Rugby Union"
+msgstr ""
+
+msgid "Baseball"
+msgstr ""
+
+msgid "Basketball"
+msgstr ""
+
+msgid "Handball"
+msgstr ""
+
+msgid "Volleyball"
+msgstr ""
+
+msgid "Beach Volleyball"
+msgstr ""
+
+msgid "Billiards"
+msgstr ""
+
+msgid "Golf"
+msgstr ""
+
+msgid "golf_course"
+msgstr ""
+
+msgid "Boule"
+msgstr ""
+
+msgid "Lawn Bowling"
+msgstr ""
+
+msgid "Cricket"
+msgstr ""
+
+msgid "Croquet"
+msgstr ""
+
+msgid "Field Hockey"
+msgstr ""
+
+msgid "Ice Hockey"
+msgstr ""
+
+msgid "Pelota"
+msgstr ""
+
+msgid "Racquetball"
+msgstr ""
+
+msgid "Table Tennis/Ping-Pong"
+msgstr ""
+
+msgid "Tennis"
+msgstr ""
+
+msgid "Motorsport"
+msgstr ""
+
+msgid "Kart Racing"
+msgstr ""
+
+msgid "Motocross"
+msgstr ""
+
+msgid "Model Aerodrome"
+msgstr ""
+
+msgctxt "aerialway"
+msgid "pitch"
+msgstr ""
+
+msgctxt "aerialway"
+msgid "sports_centre"
+msgstr ""
+
+msgctxt "aerialway"
+msgid "track"
+msgstr ""
+
+msgid "RC Car"
+msgstr ""
+
+msgid "Man Made"
+msgstr ""
+
+msgctxt "building"
+msgid "roof"
+msgstr ""
+
+msgctxt "building"
+msgid "garage"
+msgstr ""
+
+msgctxt "building"
+msgid "garages"
+msgstr ""
+
+msgctxt "building"
+msgid "industrial"
+msgstr ""
+
+msgctxt "building"
+msgid "school"
+msgstr ""
+
+msgctxt "building"
+msgid "commercial"
+msgstr ""
+
+msgctxt "building"
+msgid "barn"
+msgstr ""
+
+msgctxt "building"
+msgid "farm_auxiliary"
+msgstr ""
+
+msgctxt "building"
+msgid "transportation"
+msgstr ""
+
+msgctxt "building"
+msgid "greenhouse"
+msgstr ""
+
+msgctxt "building"
+msgid "office"
+msgstr ""
+
+msgctxt "building"
+msgid "university"
+msgstr ""
+
+msgctxt "building"
+msgid "hospital"
+msgstr ""
+
+msgctxt "building"
+msgid "warehouse"
+msgstr ""
+
+msgctxt "building"
+msgid "retail"
+msgstr ""
+
+msgctxt "building"
+msgid "shed"
+msgstr ""
+
+msgctxt "building"
+msgid "storage_tank"
+msgstr ""
+
+msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
+msgid "cowshed"
+msgstr ""
+
+msgctxt "building"
+msgid "construction"
+msgstr ""
+
+msgctxt "building"
+msgid "Levels"
+msgstr ""
+
+msgid "Residential Building"
+msgstr ""
+
+msgctxt "building"
+msgid "residential"
+msgstr ""
+
+msgctxt "building"
+msgid "apartments"
+msgstr ""
+
+msgctxt "building"
+msgid "house"
+msgstr ""
+
+msgctxt "building"
+msgid "hut"
+msgstr ""
+
+msgctxt "building"
+msgid "dormitory"
+msgstr ""
+
+msgctxt "building"
+msgid "terrace"
+msgstr ""
+
+msgctxt "building"
+msgid "detached"
+msgstr ""
+
+msgctxt "building"
+msgid "farm"
+msgstr ""
+
+msgid "Building part"
+msgstr ""
+
+msgctxt "building"
+msgid "Skipped Levels"
+msgstr ""
+
+msgid "Skipped height (meters)"
+msgstr ""
+
+msgid "Entrance"
+msgstr ""
+
+msgctxt "entrance"
+msgid "yes"
+msgstr ""
+
+msgctxt "entrance"
+msgid "main"
+msgstr ""
+
+msgctxt "entrance"
+msgid "service"
+msgstr ""
+
+msgctxt "entrance"
+msgid "exit"
+msgstr ""
+
+msgctxt "entrance"
+msgid "emergency"
+msgstr ""
+
+msgid "Entrance number"
+msgstr ""
+
+msgid "Flat numbers"
+msgstr ""
+
+msgid "Tower"
+msgstr ""
+
+msgid "Tower type"
+msgstr ""
+
+msgid "communication"
+msgstr ""
+
+msgid "observation"
+msgstr ""
+
+msgid "Flagpole"
+msgstr ""
+
+msgid "Works"
+msgstr ""
+
+msgid "Chimney"
+msgstr ""
+
+msgid "Windmill"
+msgstr ""
+
+msgid "Gasometer"
+msgstr ""
+
+msgid "Storage Tank"
+msgstr ""
+
+msgctxt "content"
+msgid "fuel"
+msgstr ""
+
+msgctxt "content"
+msgid "manure"
+msgstr ""
+
+msgctxt "content"
+msgid "oil"
+msgstr ""
+
+msgctxt "content"
+msgid "sewage"
+msgstr ""
+
+msgctxt "content"
+msgid "silage"
+msgstr ""
+
+msgctxt "content"
+msgid "slurry"
+msgstr ""
+
+msgctxt "content"
+msgid "water"
+msgstr ""
+
+msgctxt "content"
+msgid "wine"
+msgstr ""
+
+msgid "Bunker Silo"
+msgstr ""
+
+msgid "Pipeline"
+msgstr ""
+
+msgid "water"
+msgstr ""
+
+msgid "gas"
+msgstr ""
+
+msgid "heat"
+msgstr ""
+
+msgid "oil"
+msgstr ""
+
+msgid "sewage"
+msgstr ""
+
+msgctxt "pipeline"
+msgid "underwater"
+msgstr ""
+
+msgctxt "pipeline"
+msgid "overground"
+msgstr ""
+
+msgid "Crane"
+msgstr ""
+
+msgid "Mineshaft"
+msgstr ""
+
+msgid "Function"
+msgstr ""
+
+msgid "winding"
+msgstr ""
+
+msgid "air"
+msgstr ""
+
+msgid "Depth in meters"
+msgstr ""
+
+msgid "Resource"
+msgstr ""
+
+msgid "aggregate"
+msgstr ""
+
+msgid "bauxite"
+msgstr ""
+
+msgid "coal"
+msgstr ""
+
+msgid "copper"
+msgstr ""
+
+msgid "dimension_stone"
+msgstr ""
+
+msgid "gold"
+msgstr ""
+
+msgid "ilmenite"
+msgstr ""
+
+msgid "iron_ore"
+msgstr ""
+
+msgid "lead"
+msgstr ""
+
+msgid "limestone"
+msgstr ""
+
+msgid "nickel"
+msgstr ""
+
+msgid "rutile"
+msgstr ""
+
+msgid "salt"
+msgstr ""
+
+msgid "silver"
+msgstr ""
+
+msgid "tin"
+msgstr ""
+
+msgid "zinc"
+msgstr ""
+
+msgid "zircon"
+msgstr ""
+
+msgid "Visible Headframe"
+msgstr ""
+
+msgid "Disused"
+msgstr ""
+
+msgid "Adit"
+msgstr ""
+
+msgid "Length in meters"
+msgstr ""
+
+msgid "Water Tower"
+msgstr ""
+
+msgid "Water Works"
+msgstr ""
+
+msgid "Wastewater Treatment Plant"
+msgstr ""
+
+msgid "Watermill"
+msgstr ""
+
+msgid "Fountain"
+msgstr ""
+
+msgid "Water Well"
+msgstr ""
+
+msgid "Lighthouse"
+msgstr ""
+
+msgid "Street Lamp"
+msgstr ""
+
+msgid "Mo-Fr 22:00-05:00"
+msgstr ""
+
+msgid "Monitoring Station"
+msgstr ""
+
+msgid "Monitoring:"
+msgstr ""
+
+msgid "Water level"
+msgstr ""
+
+msgid "Tide Level"
+msgstr ""
+
+msgid "Groundwater"
+msgstr ""
+
+msgid "Traffic"
+msgstr ""
+
+msgid "Air Quality"
+msgstr ""
+
+msgid "Noise"
+msgstr ""
+
+msgid "GPS Signals"
+msgstr ""
+
+msgid "GLONASS Signals"
+msgstr ""
+
+msgid "Galileo Signals"
+msgstr ""
+
+msgid "Weather"
+msgstr ""
+
+msgid "Radiation"
+msgstr ""
+
+msgid "Seismic Activity"
+msgstr ""
+
+msgid "Recording:"
+msgstr ""
+
+msgid "Automated"
+msgstr ""
+
+msgid "Manually"
+msgstr ""
+
+msgid "Remote"
+msgstr ""
+
+msgid "Display:"
+msgstr ""
+
+msgid "Analog"
+msgstr ""
+
+msgid "Digital"
+msgstr ""
+
+msgid "Survey Point"
+msgstr ""
+
+msgid "Surveillance Camera"
+msgstr ""
+
+msgid "indoor"
+msgstr ""
+
+msgid "outdoor"
+msgstr ""
+
+msgid "Zone"
+msgstr ""
+
+msgid "parking"
+msgstr ""
+
+msgid "traffic"
+msgstr ""
+
+msgid "shop"
+msgstr ""
+
+msgid "bank"
+msgstr ""
+
+msgid "Camera"
+msgstr ""
+
+msgctxt "camera:type"
+msgid "fixed"
+msgstr ""
+
+msgctxt "camera:type"
+msgid "panning"
+msgstr ""
+
+msgctxt "camera:type"
+msgid "dome"
+msgstr ""
+
+msgid "Mounted on"
+msgstr ""
+
+msgctxt "camera:mount"
+msgid "wall"
+msgstr ""
+
+msgctxt "camera:mount"
+msgid "pole"
+msgstr ""
+
+msgctxt "camera:mount"
+msgid "ceiling"
+msgstr ""
+
+msgid "Direction in degrees"
+msgstr ""
+
+msgid "Inclination in degrees"
+msgstr ""
+
+msgid "Bridges"
+msgstr ""
+
+msgid "aqueduct"
+msgstr ""
+
+msgid "boardwalk"
+msgstr ""
+
+msgid "cantilever"
+msgstr ""
+
+msgid "covered"
+msgstr ""
+
+msgid "low_water_crossing"
+msgstr ""
+
+msgid "trestle"
+msgstr ""
+
+msgid "viaduct"
+msgstr ""
+
+msgid "Structure"
+msgstr ""
+
+msgid "arch"
+msgstr ""
+
+msgid "beam"
+msgstr ""
+
+msgid "truss"
+msgstr ""
+
+msgid "floating"
+msgstr ""
+
+msgid "suspension"
+msgstr ""
+
+msgid "cable-stayed"
+msgstr ""
+
+msgid "simple-suspension"
+msgstr ""
+
+msgid "humpback"
+msgstr ""
+
+msgid "Movable Bridge"
+msgstr ""
+
+msgid "bascule"
+msgstr ""
+
+msgid "drawbridge"
+msgstr ""
+
+msgid "lift"
+msgstr ""
+
+msgid "submersible"
+msgstr ""
+
+msgid "swing"
+msgstr ""
+
+msgid "transporter"
+msgstr ""
+
+msgid "Bridge Support"
+msgstr ""
+
+msgid "pier"
+msgstr ""
+
+msgid "abutment"
+msgstr ""
+
+msgid "lift_pier"
+msgstr ""
+
+msgid "pivot_pier"
+msgstr ""
+
+msgid "Bridge outline"
+msgstr ""
+
+msgid "Power Plant"
+msgstr ""
+
+msgid "Output forms of energy (optional):"
+msgstr ""
+
+msgid "Power Generator"
+msgstr ""
+
+msgid "Biofuel Power Generator"
+msgstr ""
+
+msgid "Generator Type"
+msgstr ""
+
+msgid "gas_turbine"
+msgstr ""
+
+msgid "reciprocating_engine"
+msgstr ""
+
+msgid "steam_generator"
+msgstr ""
+
+msgid "Biogas Power Generator"
+msgstr ""
+
+msgid "Biomass Power Generator"
+msgstr ""
+
+msgid "Method"
+msgstr ""
+
+msgctxt "generator method"
+msgid "anaerobic_digestion"
+msgstr ""
+
+msgctxt "generator method"
+msgid "combustion"
+msgstr ""
+
+msgctxt "generator method"
+msgid "gasification"
+msgstr ""
+
+msgid "bioreactor"
+msgstr ""
+
+msgid "anaerobic_digestion / combustion"
+msgstr ""
+
+msgid "pyrolysis"
+msgstr ""
+
+msgid "combustion"
+msgstr ""
+
+msgid "steam_turbine"
+msgstr ""
+
+msgid "Coal Power Generator"
+msgstr ""
+
+msgid "Gas Power Generator"
+msgstr ""
+
+msgid "combined_cycle"
+msgstr ""
+
+msgid "Oil Power Generator"
+msgstr ""
+
+msgid "Diesel Power Generator"
+msgstr ""
+
+msgid "Gasoline Power Generator"
+msgstr ""
+
+msgid "Nuclear Reactor"
+msgstr ""
+
+msgctxt "generator method"
+msgid "fission"
+msgstr ""
+
+msgctxt "generator method"
+msgid "fusion"
+msgstr ""
+
+msgid "Boiling Water Reactor 1 (BWR-1)"
+msgstr ""
+
+msgid "fission"
+msgstr ""
+
+msgid "Boiling Water Reactor 2 (BWR-2)"
+msgstr ""
+
+msgid "Boiling Water Reactor 3 (BWR-3)"
+msgstr ""
+
+msgid "Boiling Water Reactor 4 (BWR-4)"
+msgstr ""
+
+msgid "Boiling Water Reactor 5 (BWR-5)"
+msgstr ""
+
+msgid "Boiling Water Reactor 6 (BWR-6)"
+msgstr ""
+
+msgid "CANada Deuterium Uranium reactor (CANDU)"
+msgstr ""
+
+msgid "cold-fusion"
+msgstr ""
+
+msgid "fusion"
+msgstr ""
+
+msgid "China Pressurized Reactor (CPR-1000)"
+msgstr ""
+
+msgid "European Pressurized Reactor (EPR)"
+msgstr ""
+
+msgid "Inertial Confinement Fusion (ICF)"
+msgstr ""
+
+msgid "Pressurized water reactor (PWR)"
+msgstr ""
+
+msgid "Reactor Bolshoy Moshchnosti Kanalniy 1000 (RBMK-1000)"
+msgstr ""
+
+msgid "Reactor Bolshoy Moshchnosti Kanalniy 1500 (RBMK-1500)"
+msgstr ""
+
+msgid "stellarator"
+msgstr ""
+
+msgid "tokamak"
+msgstr ""
+
+msgid "Vodo-Vodyanoi Energetichesky Reactor (VVER)"
+msgstr ""
+
+msgid "Solar Power Generator"
+msgstr ""
+
+msgctxt "generator method"
+msgid "photovoltaic"
+msgstr ""
+
+msgctxt "generator method"
+msgid "thermal"
+msgstr ""
+
+msgid "solar_photovoltaic_panel"
+msgstr ""
+
+msgid "photovoltaic"
+msgstr ""
+
+msgid "solar_thermal_collector"
+msgstr ""
+
+msgid "thermal"
+msgstr ""
+
+msgid "Waste Power Generator"
+msgstr ""
+
+msgctxt "generator method"
+msgid "pyrolysis"
+msgstr ""
+
+msgid "gasification"
+msgstr ""
+
+msgid "Water Turbine"
+msgstr ""
+
+msgctxt "generator method"
+msgid "run-of-the-river"
+msgstr ""
+
+msgctxt "generator method"
+msgid "water-pumped-storage"
+msgstr ""
+
+msgctxt "generator method"
+msgid "water-storage"
+msgstr ""
+
+msgid "francis_turbine"
+msgstr ""
+
+msgid "all methods"
+msgstr ""
+
+msgid "hydrodynamic_screw"
+msgstr ""
+
+msgid "run-of-the-river"
+msgstr ""
+
+msgid "kaplan_turbine"
+msgstr ""
+
+msgid "run-of-the-river / water-storage"
+msgstr ""
+
+msgid "pelton_turbine"
+msgstr ""
+
+msgid "Tidal Water Turbine"
+msgstr ""
+
+msgctxt "generator method"
+msgid "barrage"
+msgstr ""
+
+msgctxt "generator method"
+msgid "stream"
+msgstr ""
+
+msgid "horizontal_axis"
+msgstr ""
+
+msgid "barrage"
+msgstr ""
+
+msgid "vertical_axis"
+msgstr ""
+
+msgid "Wave Energy Converter"
+msgstr ""
+
+msgid "Osmotic Power Generator"
+msgstr ""
+
+msgid "Geothermal Power Generator"
+msgstr ""
+
+msgid "heat_pump"
+msgstr ""
+
+msgid "Wind Turbine"
+msgstr ""
+
+msgid "Power Substation"
+msgstr ""
+
+msgid "Type of substation"
+msgstr ""
+
+msgctxt "power"
+msgid "transmission"
+msgstr ""
+
+msgctxt "power"
+msgid "distribution"
+msgstr ""
+
+msgctxt "power"
+msgid "minor_distribution"
+msgstr ""
+
+msgctxt "power"
+msgid "converter"
+msgstr ""
+
+msgctxt "power"
+msgid "compensation"
+msgstr ""
+
+msgctxt "power"
+msgid "transition"
+msgstr ""
+
+msgctxt "power"
+msgid "traction"
+msgstr ""
+
+msgctxt "power"
+msgid "industrial"
+msgstr ""
+
+msgid "Power rating (kVA/MVA)"
+msgstr ""
+
+msgid "2700 kVA"
+msgstr ""
+
+msgid "12500 kVA"
+msgstr ""
+
+msgid "15 MVA"
+msgstr ""
+
+msgid "50 MVA"
+msgstr ""
+
+msgid "100 MVA"
+msgstr ""
+
+msgid "Gas insulated"
+msgstr ""
+
+msgid "Power Transformer"
+msgstr ""
+
+msgid "Type of transformer"
+msgstr ""
+
+msgctxt "power"
+msgid "generator"
+msgstr ""
+
+msgctxt "power"
+msgid "auto"
+msgstr ""
+
+msgctxt "power"
+msgid "phase_angle_regulator"
+msgstr ""
+
+msgctxt "power"
+msgid "yes"
+msgstr ""
+
+msgid "Phases"
+msgstr ""
+
+msgid "Power Switchgear"
+msgstr ""
+
+msgid ""
+"(Please only use this tag if more detailed mapping using busbars and bays is "
+"impossible!)"
+msgstr ""
+
+msgid "Power Busbar"
+msgstr ""
+
+msgid "Power Bay"
+msgstr ""
+
+msgid "Power Switch"
+msgstr ""
+
+msgid "Power Converter"
+msgstr ""
+
+msgid "Type of converter"
+msgstr ""
+
+msgctxt "power"
+msgid "lcc"
+msgstr ""
+
+msgctxt "power"
+msgid "vsc"
+msgstr ""
+
+msgctxt "power"
+msgid "back-to-back"
+msgstr ""
+
+msgid "Amount of poles"
+msgstr ""
+
+msgid "monopole"
+msgstr ""
+
+msgid "bipole"
+msgstr ""
+
+msgid "Power rating (MVA)"
+msgstr ""
+
+msgid "Power Compensator"
+msgstr ""
+
+msgid "Type of compensator"
+msgstr ""
+
+msgctxt "power"
+msgid "shunt_reactor"
+msgstr ""
+
+msgctxt "power"
+msgid "shunt_capacitor"
+msgstr ""
+
+msgctxt "power"
+msgid "static_var"
+msgstr ""
+
+msgctxt "power"
+msgid "statcom"
+msgstr ""
+
+msgctxt "power"
+msgid "synchronous_condenser"
+msgstr ""
+
+msgctxt "power"
+msgid "filter"
+msgstr ""
+
+msgctxt "power"
+msgid "series_reactor"
+msgstr ""
+
+msgctxt "power"
+msgid "series_capacitor"
+msgstr ""
+
+msgid "Power rating (kvar/Mvar)"
+msgstr ""
+
+msgid "500 kvar"
+msgstr ""
+
+msgid "1 Mvar"
+msgstr ""
+
+msgid "5 Mvar"
+msgstr ""
+
+msgid "Cable Distribution Cabinet"
+msgstr ""
+
+msgid "Power Tower"
+msgstr ""
+
+msgid "Type of construction"
+msgstr ""
+
+msgid "lattice"
+msgstr ""
+
+msgid "tubular"
+msgstr ""
+
+msgid "solid"
+msgstr ""
+
+msgid "steel"
+msgstr ""
+
+msgctxt "color"
+msgid "red/white"
+msgstr ""
+
+msgctxt "power"
+msgid "Tower type"
+msgstr ""
+
+msgctxt "power"
+msgid "suspension"
+msgstr ""
+
+msgctxt "power"
+msgid "anchor"
+msgstr ""
+
+msgctxt "power"
+msgid "termination"
+msgstr ""
+
+msgctxt "power"
+msgid "branch"
+msgstr ""
+
+msgctxt "power"
+msgid "transposing"
+msgstr ""
+
+msgctxt "power"
+msgid "crossing"
+msgstr ""
+
+msgid "Branch tower type"
+msgstr ""
+
+msgctxt "power"
+msgid "tap"
+msgstr ""
+
+msgctxt "power"
+msgid "split"
+msgstr ""
+
+msgctxt "power"
+msgid "loop"
+msgstr ""
+
+msgctxt "power"
+msgid "cross"
+msgstr ""
+
+msgid "Tower design"
+msgstr ""
+
+msgctxt "power"
+msgid "one-level"
+msgstr ""
+
+msgctxt "power"
+msgid "two-level"
+msgstr ""
+
+msgctxt "power"
+msgid "donau"
+msgstr ""
+
+msgctxt "power"
+msgid "three-level"
+msgstr ""
+
+msgctxt "power"
+msgid "barrel"
+msgstr ""
+
+msgctxt "power"
+msgid "asymmetric"
+msgstr ""
+
+msgctxt "power"
+msgid "triangle"
+msgstr ""
+
+msgctxt "power"
+msgid "flag"
+msgstr ""
+
+msgctxt "power"
+msgid "donau;one-level"
+msgstr ""
+
+msgctxt "power"
+msgid "four-level"
+msgstr ""
+
+msgctxt "power"
+msgid "six-level"
+msgstr ""
+
+msgctxt "power"
+msgid "nine-level"
+msgstr ""
+
+msgctxt "power"
+msgid "delta"
+msgstr ""
+
+msgctxt "power"
+msgid "delta_two-level"
+msgstr ""
+
+msgctxt "power"
+msgid "y-frame"
+msgstr ""
+
+msgctxt "power"
+msgid "x-frame"
+msgstr ""
+
+msgctxt "power"
+msgid "h-frame"
+msgstr ""
+
+msgctxt "power"
+msgid "guyed_h-frame"
+msgstr ""
+
+msgctxt "power"
+msgid "portal"
+msgstr ""
+
+msgctxt "power"
+msgid "portal_two-level"
+msgstr ""
+
+msgctxt "power"
+msgid "portal_three-level"
+msgstr ""
+
+msgctxt "power"
+msgid "guyed_v-frame"
+msgstr ""
+
+msgctxt "power"
+msgid "bipole"
+msgstr ""
+
+msgctxt "power"
+msgid "monopolar"
+msgstr ""
+
+msgid "Triple tower"
+msgstr ""
+
+msgid "Incomplete tower"
+msgstr ""
+
+msgid "Location transition"
+msgstr ""
+
+msgid "Pole"
+msgstr ""
+
+msgid "Pole with Transformer"
+msgstr ""
+
+msgid "Pole Attributes:"
+msgstr ""
+
+msgid "Transformer Attributes:"
+msgstr ""
+
+msgid "Power Line"
+msgstr ""
+
+msgid "Line type"
+msgstr ""
+
+msgid "line"
+msgstr ""
+
+msgid "minor_line"
+msgstr ""
+
+msgid "Number of conductors/wires per cable"
+msgstr ""
+
+msgctxt "power"
+msgid "single"
+msgstr ""
+
+msgctxt "power"
+msgid "double"
+msgstr ""
+
+msgctxt "power"
+msgid "triple"
+msgstr ""
+
+msgctxt "power"
+msgid "quad"
+msgstr ""
+
+msgctxt "power"
+msgid "fivefold"
+msgstr ""
+
+msgctxt "power"
+msgid "sixfold"
+msgstr ""
+
+msgctxt "power"
+msgid "eightfold"
+msgstr ""
+
+msgid "Used for data communications"
+msgstr ""
+
+msgid "Power Cable"
+msgstr ""
+
+msgctxt "power cable"
+msgid "underground"
+msgstr ""
+
+msgctxt "power cable"
+msgid "underwater"
+msgstr ""
+
+msgctxt "power cable"
+msgid "overground"
+msgstr ""
+
+msgid "Historic Places"
+msgstr ""
+
+msgid "Castle"
+msgstr ""
+
+msgid "Ruins"
+msgstr ""
+
+msgid "Archaeological Site"
+msgstr ""
+
+msgid "Battlefield"
+msgstr ""
+
+msgid "Palaeontological Site"
+msgstr ""
+
+msgid "Monument"
+msgstr ""
+
+msgid "Memorial"
+msgstr ""
+
+msgctxt "memorial"
+msgid "statue"
+msgstr ""
+
+msgctxt "memorial"
+msgid "bust"
+msgstr ""
+
+msgctxt "memorial"
+msgid "plaque"
+msgstr ""
+
+msgctxt "memorial"
+msgid "stele"
+msgstr ""
+
+msgctxt "memorial"
+msgid "stone"
+msgstr ""
+
+msgctxt "memorial"
+msgid "war_memorial"
+msgstr ""
+
+msgid "Inscription"
+msgstr ""
+
+msgid "Wayside Cross"
+msgstr ""
+
+msgid "Wayside Shrine"
+msgstr ""
+
+msgid "Place of worship"
+msgstr ""
+
+msgctxt "building"
+msgid "wayside_shrine"
+msgstr ""
+
+msgid "Boundary Stone"
+msgstr ""
+
+msgid "Shops"
+msgstr ""
+
+msgid "Food"
+msgstr ""
+
+msgid "Supermarket"
+msgstr ""
+
+msgid "Convenience Store"
+msgstr ""
+
+msgid "Kiosk"
+msgstr ""
+
+msgid "Bakery"
+msgstr ""
+
+msgid "Butcher"
+msgstr ""
+
+msgid "Seafood"
+msgstr ""
+
+msgid "Deli (Fine Food)"
+msgstr ""
+
+msgid "Candy Store"
+msgstr ""
+
+msgid "Tea"
+msgstr ""
+
+msgid "Coffee"
+msgstr ""
+
+msgid "Public Market"
+msgstr ""
+
+msgid "Organic"
+msgstr ""
+
+msgid "Greengrocer"
+msgstr ""
+
+msgid "Farm Stand"
+msgstr ""
+
+msgid "Organic/Bio"
+msgstr ""
+
+msgid "Fair Trade"
+msgstr ""
+
+msgid "Alcohol"
+msgstr ""
+
+msgid "Beverages"
+msgstr ""
+
+msgid "Wine"
+msgstr ""
+
+msgid "Boutique"
+msgstr ""
+
+msgid "Outdoor"
+msgstr ""
+
+msgid "Dry Cleaning"
+msgstr ""
+
+msgid "Laundry"
+msgstr ""
+
+msgid "Tailor"
+msgstr ""
+
+msgid "Fabric"
+msgstr ""
+
+msgid "Electronic"
+msgstr ""
+
+msgid "Computer"
+msgstr ""
+
+msgid "Electronics"
+msgstr ""
+
+msgid "Mobile Phone"
+msgstr ""
+
+msgid "Vacuum Cleaner"
+msgstr ""
+
+msgid "Hifi"
+msgstr ""
+
+msgid "Video"
+msgstr ""
+
+msgid "Video Games"
+msgstr ""
+
+msgid "Music"
+msgstr ""
+
+msgid "Cash"
+msgstr ""
+
+msgid "Bank"
+msgstr ""
+
+msgid "Automated Teller Machine"
+msgstr ""
+
+msgid "Money Exchange"
+msgstr ""
+
+msgid "Pawnbroker"
+msgstr ""
+
+msgid "Home decoration"
+msgstr ""
+
+msgid "Furniture"
+msgstr ""
+
+msgid "Kitchen"
+msgstr ""
+
+msgid "Curtain"
+msgstr ""
+
+msgid "Art"
+msgstr ""
+
+msgid "Frame"
+msgstr ""
+
+msgid "Bed"
+msgstr ""
+
+msgid "Interior Decoration"
+msgstr ""
+
+msgid "Antiques"
+msgstr ""
+
+msgid "Printed Material"
+msgstr ""
+
+msgid "Stationery"
+msgstr ""
+
+msgid "Copy Shop"
+msgstr ""
+
+msgid "Book Store"
+msgstr ""
+
+msgid "Newspaper Stand"
+msgstr ""
+
+msgid "Ticket"
+msgstr ""
+
+msgid "Department Store"
+msgstr ""
+
+msgid "Mall"
+msgstr ""
+
+msgid "Chemist"
+msgstr ""
+
+msgid "Hairdresser/Barber"
+msgstr ""
+
+msgid "Beauty"
+msgstr ""
+
+msgid "Tattoo"
+msgstr ""
+
+msgid "Optician"
+msgstr ""
+
+msgid "Hearing Aids"
+msgstr ""
+
+msgid "Medical Supply"
+msgstr ""
+
+msgid "Jewellery"
+msgstr ""
+
+msgid "Gift/Souvenir"
+msgstr ""
+
+msgid "Erotic"
+msgstr ""
+
+msgid "Florist"
+msgstr ""
+
+msgid "Garden Centre"
+msgstr ""
+
+msgid "Do-It-Yourself Store"
+msgstr ""
+
+msgid "Hardware"
+msgstr ""
+
+msgid "Paint"
+msgstr ""
+
+msgid "Travel Agency"
+msgstr ""
+
+msgid "Musical Instrument"
+msgstr ""
+
+msgid "Toys"
+msgstr ""
+
+msgid "Variety Store"
+msgstr ""
+
+msgid "Bookmaker"
+msgstr ""
+
+msgid "Lottery"
+msgstr ""
+
+msgid "Bag"
+msgstr ""
+
+msgid "Pet"
+msgstr ""
+
+msgid "Funeral Directors"
+msgstr ""
+
+msgid "Vending Machine"
+msgstr ""
+
+msgid "Vending products"
+msgstr ""
+
+msgid "animal_food"
+msgstr ""
+
+msgid "bicycle_tube"
+msgstr ""
+
+msgid "cigarettes"
+msgstr ""
+
+msgid "condoms"
+msgstr ""
+
+msgid "drinks"
+msgstr ""
+
+msgid "excrement_bags"
+msgstr ""
+
+msgid "food"
+msgstr ""
+
+msgid "news_papers"
+msgstr ""
+
+msgid "parking_tickets"
+msgstr ""
+
+msgid "photos"
+msgstr ""
+
+msgid "public_transport_plans"
+msgstr ""
+
+msgid "public_transport_tickets"
+msgstr ""
+
+msgid "SIM-cards"
+msgstr ""
+
+msgid "stamps"
+msgstr ""
+
+msgid "sweets"
+msgstr ""
+
+msgid "tampons"
+msgstr ""
+
+msgid "telephone_vouchers"
+msgstr ""
+
+msgid "toys"
+msgstr ""
+
+msgid "vouchers"
+msgstr ""
+
+msgid "Payment Methods"
+msgstr ""
+
+msgid "Debit cards"
+msgstr ""
+
+msgid "BankAxess"
+msgstr ""
+
+msgid "Bancomat"
+msgstr ""
+
+msgid "Girocard"
+msgstr ""
+
+msgid "Laser"
+msgstr ""
+
+msgid "Maestro"
+msgstr ""
+
+msgid "Visa Debit"
+msgstr ""
+
+msgid "Visa Electron"
+msgstr ""
+
+msgid "Credit cards"
+msgstr ""
+
+msgid "American Express"
+msgstr ""
+
+msgid "Diners Club"
+msgstr ""
+
+msgid "Discover Card"
+msgstr ""
+
+msgid "JCB"
+msgstr ""
+
+msgid "Mastercard"
+msgstr ""
+
+msgid "Visa"
+msgstr ""
+
+msgid "Electronic purses and Charge cards"
+msgstr ""
+
+msgid "Avant (fi)"
+msgstr ""
+
+msgid "Cash (ch)"
+msgstr ""
+
+msgid "Chipknip (nl)"
+msgstr ""
+
+msgid "Geldkarte (de)"
+msgstr ""
+
+msgid "Mep (pt)"
+msgstr ""
+
+msgid "Minicash (lu)"
+msgstr ""
+
+msgid "Minipay (it)"
+msgstr ""
+
+msgid "Mondero (ar)"
+msgstr ""
+
+msgid "Mondero 4b (es)"
+msgstr ""
+
+msgid "Moneo (fr)"
+msgstr ""
+
+msgid "Proton (be)"
+msgstr ""
+
+msgid "Quick (au)"
+msgstr ""
+
+msgid "Cryptocurrencies"
+msgstr ""
+
+msgid "Bitcoin"
+msgstr ""
+
+msgid "Dogecoin"
+msgstr ""
+
+msgid "Litecoin"
+msgstr ""
+
+msgid "Geography"
+msgstr ""
+
+msgid "Boundaries"
+msgstr ""
+
+msgid "Administrative"
+msgstr ""
+
+msgid "Administrative level"
+msgstr ""
+
+msgid "Maritime"
+msgstr ""
+
+msgid "Political"
+msgstr ""
+
+msgid "Division"
+msgstr ""
+
+msgid "canton"
+msgstr ""
+
+msgid "linguistic_community"
+msgstr ""
+
+msgid "ward"
+msgstr ""
+
+msgid "Postal Code"
+msgstr ""
+
+msgid "National Park"
+msgstr ""
+
+msgid "Protected Area"
+msgstr ""
+
+msgid "Protect Class"
+msgstr ""
+
+msgid "Title or type of protection"
+msgstr ""
+
+msgid "Border type"
+msgstr ""
+
+msgid "baseline"
+msgstr ""
+
+msgid "territorial"
+msgstr ""
+
+msgid "contiguous"
+msgstr ""
+
+msgid "eez"
+msgstr ""
+
+msgid "Places"
+msgstr ""
+
+msgid "Continent"
+msgstr ""
+
+msgid "Country"
+msgstr ""
+
+msgctxt "place"
+msgid "State"
+msgstr ""
+
+msgid "Region"
+msgstr ""
+
+msgid "County"
+msgstr ""
+
+msgid "City"
+msgstr ""
+
+msgid "Town"
+msgstr ""
+
+msgid "Village"
+msgstr ""
+
+msgid "Hamlet"
+msgstr ""
+
+msgid "Isolated Dwelling"
+msgstr ""
+
+msgid "Suburb"
+msgstr ""
+
+msgid "Neighbourhood"
+msgstr ""
+
+msgid "Farm"
+msgstr ""
+
+msgid "A farm within a bigger settlement"
+msgstr ""
+
+msgid "(please use isolated_dwelling for an isolated farm)"
+msgstr ""
+
+msgid "Locality"
+msgstr ""
+
+msgid "Peak"
+msgstr ""
+
+msgid "The top (summit) of a mountain or hill."
+msgstr ""
+
+msgid "Saddle"
+msgstr ""
+
+msgid "A saddle point between mountains or hills."
+msgstr ""
+
+msgid "Glacier"
+msgstr ""
+
+msgid ""
+"A persistent body of dense ice that is constantly moving under its own "
+"weight."
+msgstr ""
+
+msgid "Volcano"
+msgstr ""
+
+msgid "A volcano, either dormant, extinct or active."
+msgstr ""
+
+msgid "Current Status"
+msgstr ""
+
+msgid "dormant"
+msgstr ""
+
+msgid "extinct"
+msgstr ""
+
+msgid "stratovolcano"
+msgstr ""
+
+msgid "shield"
+msgstr ""
+
+msgid "scoria"
+msgstr ""
+
+msgid "Ridge"
+msgstr ""
+
+msgid "A mountain or hill ridge."
+msgstr ""
+
+msgid "Valley"
+msgstr ""
+
+msgid "A low area between hills."
+msgstr ""
+
+msgid "Cave Entrance"
+msgstr ""
+
+msgid "The entrance to a cave."
+msgstr ""
+
+msgid "Island"
+msgstr ""
+
+msgid "Islet"
+msgstr ""
+
+msgid "Nature"
+msgstr ""
+
+msgid "Tree"
+msgstr ""
+
+msgid "A single tree."
+msgstr ""
+
+msgid "Botanical Name"
+msgstr ""
+
+msgid "Tree Row"
+msgstr ""
+
+msgid "A line of trees."
+msgstr ""
+
+msgid "Wood"
+msgstr ""
+
+msgid "Woodland where timber production does not dominate use."
+msgstr ""
+
+msgid "Forest"
+msgstr ""
+
+msgid "Cutline"
+msgstr ""
+
+msgctxt "cutline"
+msgid "border"
+msgstr ""
+
+msgctxt "cutline"
+msgid "firebreak"
+msgstr ""
+
+msgctxt "cutline"
+msgid "hunting"
+msgstr ""
+
+msgctxt "cutline"
+msgid "loggingmachine"
+msgstr ""
+
+msgctxt "cutline"
+msgid "pipeline"
+msgstr ""
+
+msgctxt "cutline"
+msgid "piste"
+msgstr ""
+
+msgctxt "cutline"
+msgid "section"
+msgstr ""
+
+msgid "Grassland"
+msgstr ""
+
+msgid ""
+"Where vegetation is dominated by grasses (Poaceae) and other herbaceous (non-"
+"woody) plants. Excludes cultivated areas and wetlands."
+msgstr ""
+
+msgid "pampas"
+msgstr ""
+
+msgid "prairie"
+msgstr ""
+
+msgid "puszta"
+msgstr ""
+
+msgid "savanna"
+msgstr ""
+
+msgid "steppe"
+msgstr ""
+
+msgid "veld"
+msgstr ""
+
+msgid "Nature Reserve"
+msgstr ""
+
+msgid "Scree"
+msgstr ""
+
+msgid "An accumulation of loose rocks."
+msgstr ""
+
+msgid "Fell"
+msgstr ""
+
+msgid ""
+"Bare upper lying uncultivated land principally covered with grass and often "
+"grazed."
+msgstr ""
+
+msgid "Scrub"
+msgstr ""
+
+msgid ""
+"Bare lower lying uncultivated land with bushes but little or no tree cover."
+msgstr ""
+
+msgid "Heath"
+msgstr ""
+
+msgid ""
+"Bare lower lying uncultivated land with a shrubland habitat found mainly on "
+"free-draining infertile, acidic soils, and is characterised by open, low-"
+"growing woody vegetation."
+msgstr ""
+
+msgid "Sand"
+msgstr ""
+
+msgid "Large area covered with sand."
+msgstr ""
+
+msgid "Bare Rock"
+msgstr ""
+
+msgid ""
+"For areas of solid visible rock that is sparsely vegetated or not vegetated "
+"at all."
+msgstr ""
+
+msgid "Rock"
+msgstr ""
+
+msgid ""
+"A notable rock or group of rocks, with at least one of them firmly attached "
+"to the underlying bedrock."
+msgstr ""
+
+msgid "Tourism attraction"
+msgstr ""
+
+msgid "Stone"
+msgstr ""
+
+msgid ""
+"A single notable free-standing rock, which may differ from the composition "
+"of the terrain it lies in."
+msgstr ""
+
+msgid "Land use"
+msgstr ""
+
+msgid "Farmyard"
+msgstr ""
+
+msgid "Farmland"
+msgstr ""
+
+msgid "Meadow"
+msgstr ""
+
+msgid "Orchard"
+msgstr ""
+
+msgid "Vineyard"
+msgstr ""
+
+msgid "Greenhouse Horticulture"
+msgstr ""
+
+msgid "Plant Nursery"
+msgstr ""
+
+msgid "Allotments"
+msgstr ""
+
+msgid "Garden"
+msgstr ""
+
+msgid "Grass"
+msgstr ""
+
+msgid "Village Green"
+msgstr ""
+
+msgid "Common"
+msgstr ""
+
+msgid "Park"
+msgstr ""
+
+msgid "Recreation Ground"
+msgstr ""
+
+msgid "Residential Area"
+msgstr ""
+
+msgid "Graveyard"
+msgstr ""
+
+msgid "Cemetery"
+msgstr ""
+
+msgid "Religious"
+msgstr ""
+
+msgid "Retail"
+msgstr ""
+
+msgid "Commercial"
+msgstr ""
+
+msgid "Industrial"
+msgstr ""
+
+msgid "Garages"
+msgstr ""
+
+msgid "Railway Land"
+msgstr ""
+
+msgid "Military"
+msgstr ""
+
+msgid "Construction Area"
+msgstr ""
+
+msgid "Brownfield"
+msgstr ""
+
+msgid "Greenfield"
+msgstr ""
+
+msgid "Landfill"
+msgstr ""
+
+msgid "Quarry"
+msgstr ""
+
+msgid "Annotation"
+msgstr ""
+
+msgid "Alternative name"
+msgstr ""
+
+msgid "Historical name"
+msgstr ""
+
+msgid "Local name"
+msgstr ""
+
+msgid "Regional name"
+msgstr ""
+
+msgid "National name"
+msgstr ""
+
+msgid "International name"
+msgstr ""
+
+msgid "Official name"
+msgstr ""
+
+msgid "Common name abbreviation"
+msgstr ""
+
+msgid "House number"
+msgstr ""
+
+msgid "Street name"
+msgstr ""
+
+msgid "Place name"
+msgstr ""
+
+msgid "City name"
+msgstr ""
+
+msgid "Country code"
+msgstr ""
+
+msgid "House name"
+msgstr ""
+
+msgid "Subdistrict"
+msgstr ""
+
+msgid "District"
+msgstr ""
+
+msgid "Province"
+msgstr ""
+
+msgctxt "addr:"
+msgid "State"
+msgstr ""
+
+msgid "AL"
+msgstr ""
+
+msgid "AK"
+msgstr ""
+
+msgid "AZ"
+msgstr ""
+
+msgid "AR"
+msgstr ""
+
+msgid "CA"
+msgstr ""
+
+msgid "CO"
+msgstr ""
+
+msgid "CT"
+msgstr ""
+
+msgid "DE"
+msgstr ""
+
+msgid "FL"
+msgstr ""
+
+msgid "GA"
+msgstr ""
+
+msgid "HI"
+msgstr ""
+
+msgid "IL"
+msgstr ""
+
+msgid "IN"
+msgstr ""
+
+msgid "IA"
+msgstr ""
+
+msgid "KS"
+msgstr ""
+
+msgid "KY"
+msgstr ""
+
+msgid "LA"
+msgstr ""
+
+msgid "ME"
+msgstr ""
+
+msgid "MD"
+msgstr ""
+
+msgid "MA"
+msgstr ""
+
+msgid "MI"
+msgstr ""
+
+msgid "MN"
+msgstr ""
+
+msgid "MS"
+msgstr ""
+
+msgid "MO"
+msgstr ""
+
+msgid "MT"
+msgstr ""
+
+msgid "NE"
+msgstr ""
+
+msgid "NV"
+msgstr ""
+
+msgid "NH"
+msgstr ""
+
+msgid "NJ"
+msgstr ""
+
+msgid "NM"
+msgstr ""
+
+msgid "NY"
+msgstr ""
+
+msgid "NC"
+msgstr ""
+
+msgid "ND"
+msgstr ""
+
+msgid "OH"
+msgstr ""
+
+msgid "OR"
+msgstr ""
+
+msgid "PA"
+msgstr ""
+
+msgid "RI"
+msgstr ""
+
+msgid "SC"
+msgstr ""
+
+msgid "SD"
+msgstr ""
+
+msgid "TN"
+msgstr ""
+
+msgid "TX"
+msgstr ""
+
+msgid "UT"
+msgstr ""
+
+msgid "VT"
+msgstr ""
+
+msgid "VA"
+msgstr ""
+
+msgid "WA"
+msgstr ""
+
+msgid "WV"
+msgstr ""
+
+msgid "WI"
+msgstr ""
+
+msgid "DC"
+msgstr ""
+
+msgid "AS"
+msgstr ""
+
+msgid "GU"
+msgstr ""
+
+msgid "MP"
+msgstr ""
+
+msgid "PR"
+msgstr ""
+
+msgid "UM"
+msgstr ""
+
+msgid "VI"
+msgstr ""
+
+msgid "Address Interpolation"
+msgstr ""
+
+msgid "Numbering scheme"
+msgstr ""
+
+msgid "odd"
+msgstr ""
+
+msgid "even"
+msgstr ""
+
+msgid "alphabetic"
+msgstr ""
+
+msgid "Accuracy"
+msgstr ""
+
+msgid "actual"
+msgstr ""
+
+msgid "estimate"
+msgstr ""
+
+msgid "potential"
+msgstr ""
+
+msgid "Contact (Common Schema)"
+msgstr ""
+
+msgid "Email Address"
+msgstr ""
+
+msgid "Fax Number"
+msgstr ""
+
+msgid "Image"
+msgstr ""
+
+msgid "Contact (Schema with ''contact:*'' Prefix)"
+msgstr ""
+
+msgctxt "description=*"
+msgid "A short text with additional information."
+msgstr ""
+
+msgctxt "description=*"
+msgid ""
+"It might be viewable to the end user (perhaps using a search system or a map "
+"with pop-ups)."
+msgstr ""
+
+msgctxt "note=*, fixme=*, description=*"
+msgid "Similar but different tags:"
+msgstr ""
+
+msgctxt "the tag note=*"
+msgid "Note"
+msgstr ""
+
+msgctxt "note=*"
+msgid "An important hint for other mappers (not for the end user)."
+msgstr ""
+
+msgid "Fixme"
+msgstr ""
+
+msgctxt "fixme=*"
+msgid ""
+"A hint for other mappers (not for the end user), that an object needs an "
+"improvement."
+msgstr ""
+
+msgid "outer segment"
+msgstr ""
+
+msgid "inner segment"
+msgstr ""
+
+msgid "Boundary"
+msgstr ""
+
+msgid "Boundary type"
+msgstr ""
+
+msgid "administrative"
+msgstr ""
+
+msgid "maritime"
+msgstr ""
+
+msgid "national_park"
+msgstr ""
+
+msgid "political"
+msgstr ""
+
+msgid "postal_code"
+msgstr ""
+
+msgid "protected_area"
+msgstr ""
+
+msgid "Sub area"
+msgstr ""
+
+msgid "Administration centre"
+msgstr ""
+
+msgid "Label point"
+msgstr ""
+
+msgid "Site"
+msgstr ""
+
+msgid "Site name"
+msgstr ""
+
+msgid "where to place the label"
+msgstr ""
+
+msgid "perimeter of the site"
+msgstr ""
+
+msgid "entrances to the site, on the perimeter"
+msgstr ""
+
+msgid "members of site"
+msgstr ""
+
+msgid "Turn Restriction"
+msgstr ""
+
+msgid "Restriction"
+msgstr ""
+
+msgid "no_left_turn"
+msgstr ""
+
+msgid "no_right_turn"
+msgstr ""
+
+msgid "no_straight_on"
+msgstr ""
+
+msgid "no_u_turn"
+msgstr ""
+
+msgid "only_right_turn"
+msgstr ""
+
+msgid "only_left_turn"
+msgstr ""
+
+msgid "only_straight_on"
+msgstr ""
+
+msgid "from way"
+msgstr ""
+
+msgid "via node or ways"
+msgstr ""
+
+msgid "to way"
+msgstr ""
+
+msgid "Enforcement"
+msgstr ""
+
+msgid "Type of enforcement"
+msgstr ""
+
+msgid "maxheight"
+msgstr ""
+
+msgid "maxweight"
+msgstr ""
+
+msgid "maxspeed"
+msgstr ""
+
+msgid "mindistance"
+msgstr ""
+
+msgid "check"
+msgstr ""
+
+msgid "Max. height (meters, only if enforcement=maxheight)"
+msgstr ""
+
+msgid "Max. weight (tonnes, only if enforcement=maxweight)"
+msgstr ""
+
+msgid "Max. speed (km/h, only if enforcement=maxspeed)"
+msgstr ""
+
+msgid "location of enforcement device"
+msgstr ""
+
+msgid "node on way where enforcement starts"
+msgstr ""
+
+msgid "where enforcement ends"
+msgstr ""
+
+msgid "traffic light or barrier that stops you"
+msgstr ""
+
+msgid "Routes"
+msgstr ""
+
+msgid "Bicycle Route"
+msgstr ""
+
+msgid "icn"
+msgstr ""
+
+msgid "ncn"
+msgstr ""
+
+msgid "rcn"
+msgstr ""
+
+msgid "lcn"
+msgstr ""
+
+msgid "Mountain Biking Route"
+msgstr ""
+
+msgid "Hiking Route"
+msgstr ""
+
+msgid "iwn"
+msgstr ""
+
+msgid "nwn"
+msgstr ""
+
+msgid "rwn"
+msgstr ""
+
+msgid "lwn"
+msgstr ""
+
+msgid "infrastructure"
+msgstr ""
+
+msgid "natural"
+msgstr ""
+
+msgid "Piste Route"
+msgstr ""
+
+msgid "link segment"
+msgstr ""
+
+msgid "shortcut segment"
+msgstr ""
+
+msgid "variant segment"
+msgstr ""
+
+msgid "entry points"
+msgstr ""
+
+msgid "Ski Route"
+msgstr ""
+
+msgid "alpine"
+msgstr ""
+
+msgid "Detour Route"
+msgstr ""
+
+msgid "Destination"
+msgstr ""
+
+msgid "Ref of the way this is a detour to"
+msgstr ""
+
+msgid "fork node for alternative routes"
+msgstr ""
+
+msgid "Power Route"
+msgstr ""
+
+msgid "Railway Route"
+msgstr ""
+
+msgid "Road Route"
+msgstr ""
+
+msgid "Route Network"
+msgstr ""
+
+msgid "member"
+msgstr ""
+
+msgid "Associated Street"
+msgstr ""
+
+msgid "house"
+msgstr ""
+
+msgid "Street"
+msgstr ""
+
+msgid "ways being part of street"
+msgstr ""
+
+msgid "addresses belonging to the street"
+msgstr ""
+
+msgid "houses belonging to the street"
+msgstr ""
+
+msgid "anything related to the street"
+msgstr ""
+
+msgid "Destination Sign"
+msgstr ""
+
+msgid "Destination written on sign (w/o distance)"
+msgstr ""
+
+msgid "Time (hh:mm, for trekking)"
+msgstr ""
+
+msgid "Colour of background"
+msgstr ""
+
+msgid "Colour of text"
+msgstr ""
+
+msgid "Colour of border/arrow"
+msgstr ""
+
+msgid "last way before junction"
+msgstr ""
+
+msgid "node of the intersection"
+msgstr ""
+
+msgid "first way after junction"
+msgstr ""
+
+msgid "position of sign"
+msgstr ""
+
+msgid "Waterway"
+msgstr ""
+
+msgid "Subtype of waterway (largest one of members)"
+msgstr ""
+
+msgid "stream"
+msgstr ""
+
+msgid "drain"
+msgstr ""
+
+msgid "ditch"
+msgstr ""
+
+msgid "Name of river/lake/sea/ocean it runs into"
+msgstr ""
+
+msgid "Reference Sandre (FR)"
+msgstr ""
+
+msgid "Reference FGKZ (DE)"
+msgstr ""
+
+msgid "Reference REGINE (NO)"
+msgstr ""
+
+msgid "Reference GNIS (USA)"
+msgstr ""
+
+msgid "Reference GNBC (CA)"
+msgstr ""
+
+msgid "waterways (no riverbank)"
+msgstr ""
+
+msgid "branch waterways (no riverbank)"
+msgstr ""
+
+msgid "spring of waterway"
+msgstr ""
+
+msgid "Length (meters)"
+msgstr ""
+
+msgid "ways supported by (on top of) the bridge"
+msgstr ""
+
+msgid "ways passing under the bridge"
+msgstr ""
+
+msgid "way forming the outline footprint"
+msgstr ""
+
+msgid "edge ways parallel to ''across''"
+msgstr ""
+
+msgid "ways passing through the tunnel"
+msgstr ""
+
+msgid "edge ways parallel to ''through''"
+msgstr ""
+
+msgid "Tunnel Start"
+msgstr ""
+
+msgid "Village/City"
+msgstr ""
+
+msgid "One Way"
+msgstr ""
+
+msgid "Fuel Station"
+msgstr ""
+
+msgid "Shopping"
+msgstr ""
+
+msgid "WC"
+msgstr ""
+
+msgid "Camping"
+msgstr ""
+
+msgid "Test"
+msgstr ""
+
+msgid "Decreasing house numbers in addresses interpolation"
+msgstr ""
+
+msgid "{0} without {1}"
+msgstr ""
+
+msgid "{0} without {1} or {2}"
+msgstr ""
+
+msgid "{0} without {1}, {2} or {3}"
+msgstr ""
+
+msgid "{0} together with {1}"
+msgstr ""
+
+msgid "incomplete object: only {0}"
+msgstr ""
+
+msgid "incomplete object: only {0} and {1}"
+msgstr ""
+
+msgid "{0} together with addr:*"
+msgstr ""
+
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
+msgid "{0} on suspicious object"
+msgstr ""
+
+msgid "restaurant without name"
+msgstr ""
+
+msgid "{0} used with {1}"
+msgstr ""
+
+msgid "natural water used for swimming pool"
+msgstr ""
+
+msgid "sport without physical feature"
+msgstr ""
+
+msgid "{0} should be on the node where {1} and {2} intersect"
+msgstr ""
+
+msgid "alternative name without {0}"
+msgstr ""
+
+msgid "incomplete usage of {0} on a way without {1}"
+msgstr ""
+
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
+msgid "{0}={1} is deprecated"
+msgstr ""
+
+msgid "{0} is deprecated"
+msgstr ""
+
+msgid "''{0}'' is meaningless, use more specific tags, e.g. ''{1}''"
+msgstr ""
+
+msgid ""
+"''{0}'' does not specify the official mode of transportation, use ''{1}'' "
+"for example"
+msgstr ""
+
+msgid ""
+"{0}={1} is unspecific. Instead of ''{1}'' please give more information about "
+"what exactly should be fixed."
+msgstr ""
+
+msgid "{0}={1} is deprecated. Please use instead a multipolygon."
+msgstr ""
+
+msgid ""
+"{0} is deprecated. Please specify interval by using opening_hours syntax"
+msgstr ""
+
+msgid ""
+"{0} is deprecated. Please delete this object and use a private layer instead"
+msgstr ""
+
+msgid "{0}={1} is unspecific. Please replace ''{1}'' by a specific value."
+msgstr ""
+
+msgid "{0} should be replaced with {1}"
+msgstr ""
+
+msgid "{0} = {1}; remove {0}"
+msgstr ""
+
+msgid ""
+"{0}={1} is unspecific. Please replace ''{1}'' by ''left'', ''right'' or "
+"''both''."
+msgstr ""
+
+msgid "Unspecific tag {0}"
+msgstr ""
+
+msgid "Definition of {0} is unclear"
+msgstr ""
+
+msgid ""
+"{0} is not recommended. Use the Reverse Ways function from the Tools menu."
+msgstr ""
+
+msgid "key with uncommon character"
+msgstr ""
+
+msgid "uncommon short key"
+msgstr ""
+
+msgid "{0} is inaccurate"
+msgstr ""
+
+msgid "{0} on a node. Should be used on a way."
+msgstr ""
+
+msgid "{0} on a node. Should be drawn as an area."
+msgstr ""
+
+msgid "{0}=* on a node. Should be used in a relation"
+msgstr ""
+
+msgid "{0} on a way. Should be used on a node."
+msgstr ""
+
+msgid "{0} on a way. Should be used in a relation"
+msgstr ""
+
+msgid "{0} on a node"
+msgstr ""
+
+msgid "Building inside building"
+msgstr ""
+
+msgid "Overlapping Water Areas"
+msgstr ""
+
+msgid "Overlapping Areas"
+msgstr ""
+
+msgid "{0} inside {1}"
+msgstr ""
+
+msgid "Overlapping Identical Natural Areas"
+msgstr ""
+
+msgid "Overlapping Identical Landuses"
+msgstr ""
+
+msgid "{0} must be connected to a way"
+msgstr ""
+
+msgid "node connects waterway and bridge"
+msgstr ""
+
+msgid "abbreviated street name"
+msgstr ""
+
+msgid "wrong highway tag on a node"
+msgstr ""
+
+msgid "wrong crossing tag on a way"
+msgstr ""
+
+msgid "Unnamed unclassified highway"
+msgstr ""
+
+msgid "highway without a reference"
+msgstr ""
+
+msgid "temporary highway type"
+msgstr ""
+
+msgid "street name contains ss"
+msgstr ""
+
+msgid ""
+"Value of ''{0}'' should either be ''{1}'' or ''{2}''. For sidewalks use "
+"''{3}'' instead."
+msgstr ""
+
+msgid "{0} with multiple values"
+msgstr ""
+
+msgid "empty value in semicolon-separated ''{0}''"
+msgstr ""
+
+msgid "numerical key"
+msgstr ""
+
+msgid "layer tag with + sign"
+msgstr ""
+
+msgid "layer should be between -5 and 5"
+msgstr ""
+
+msgid "level should be numbers with optional .5 increments"
+msgstr ""
+
+msgid ""
+"{0}: meters is default; period is separator; if units, put space then unit"
+msgstr ""
+
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
+msgid "unusual {0} format"
+msgstr ""
+
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
+msgid "voltage should be in volts with no units/delimiter/spaces"
+msgstr ""
+
+msgid "unusual {0} specification"
+msgstr ""
+
+msgid "unusual train track gauge; use mm with no separator"
+msgstr ""
+
+msgid "unusual incline; use percentages/degrees or up/down"
+msgstr ""
+
+msgid "{0} must be a numeric value"
+msgstr ""
+
+msgid "{0} must be a positive integer number"
+msgstr ""
+
+msgid "relation without type"
+msgstr ""
+
+msgid "{0} relation without {0} tag"
+msgstr ""
+
+msgid "religion without denomination"
+msgstr ""
+
+msgid "unknown christian denomination"
+msgstr ""
+
+msgid "unknown muslim denomination"
+msgstr ""
+
+msgid "unknown jewish denomination"
+msgstr ""
+
+msgid "{0} is unnecessary"
+msgstr ""
+
+msgid "{0} is unnecessary for {1}"
+msgstr ""
+
+msgid "{0}={1} makes no sense"
+msgstr ""
+
+msgid "Nodes duplicating parent way tags"
+msgstr ""
+
+msgid ""
+"no wikipedia-language given, use ''wikipedia''=''language:page title''"
+msgstr ""
+
+msgid "unknown language prefix in wikipedia tag"
+msgstr ""
+
+msgid "deprecated format for wikipedia tag"
+msgstr ""
+
+msgid "''wikipedia''=''language:page title''"
+msgstr ""
+
+msgid "Hide icons at low zoom"
+msgstr ""
+
+msgid "Less obtrusive node symbols at low zoom"
+msgstr ""
+
+msgid "Display street labels (at high zoom)"
+msgstr ""
+
+msgid "Use alternative turn restriction icon set"
+msgstr ""
+
+msgid "Columbus V-900 CSV Files"
+msgstr ""
+
+msgid "Importing CSV file ''%s''..."
+msgstr ""
+
+msgid "Markers of "
+msgstr ""
+
+msgid "Show summary after import"
+msgstr ""
+
+msgid "Do not zoom after import"
+msgstr ""
+
+msgid "Ignore hdop/vdop/pdop entries"
+msgstr ""
+
+msgid "Warn on missing audio files"
+msgstr ""
+
+msgid "Warn on conversion errors"
+msgstr ""
+
+msgid "Error in line "
+msgstr ""
+
+msgid "Missing audio file"
+msgstr ""
+
+msgid "Commands"
+msgstr ""
+
+msgid ""
+"No command has been found. Would you like to download and install default "
+"commands now?"
+msgstr ""
+
+msgid "No command found"
+msgstr ""
+
+msgid "Default commands have been successfully installed"
+msgstr ""
+
+msgid ""
+"Failed to download and install default commands.\n"
+"\n"
+"Error: {0}"
+msgstr ""
+
+msgid "Processing..."
+msgstr ""
+
+msgid "Aborted"
+msgstr ""
+
+msgid "Error executing the script: "
+msgstr ""
+
+msgid "Command line"
+msgstr ""
+
+msgid "Set input focus to the command line."
+msgstr ""
+
+msgid "Point on the start"
+msgstr ""
+
+msgid "Point on the end"
+msgstr ""
+
+msgid "Missing definition of new object with id {0}."
+msgstr ""
+
+msgid "Missing mandatory attribute ''{0}'' on <member> of relation {1}."
+msgstr ""
+
+msgid "Illegal value for attribute ''uid''. Got ''{0}''."
+msgstr ""
+
+msgid "nodes"
+msgstr ""
+
+msgid "ways"
+msgstr ""
+
+msgid "relations"
+msgstr ""
+
+msgid "OSM objects"
+msgstr ""
+
+msgid "Can not draw outside of the world."
+msgstr ""
+
+msgid "Create grid of ways"
+msgstr ""
+
+msgid ""
+"Forms a grid of ways in base to two existing that have various nodes and one "
+"in common"
+msgstr ""
+
+msgid "Select two ways with a node in common"
+msgstr ""
+
+msgid "Select two ways with alone a node in common"
+msgstr ""
+
+msgid "Create a grid of ways"
+msgstr ""
+
+msgid "Download Track ..."
+msgstr ""
+
+msgid "Download GPX track from openstreetmap.org"
+msgstr ""
+
+msgid ""
+"Error occurred while parsing gpx file {0}. Only a part of the file will be "
+"available."
+msgstr ""
+
+msgid "Invalid URL {0}"
+msgstr ""
+
+msgid "Error fetching URL {0}"
+msgstr ""
+
+msgid "Error parsing data from URL {0}"
+msgstr ""
+
+msgid "Download Track"
+msgstr ""
+
+msgid "Filename"
+msgstr ""
+
+msgid "Private (only shared as anonymous, unordered points)"
+msgstr ""
+
+msgid "Public (shown in trace list and as anonymous, unordered points)"
+msgstr ""
+
+msgid "Trackable (only shared as anonymous, ordered points with timestamps)"
+msgstr ""
+
+msgid ""
+"Identifiable (shown in trace list and as identifiable, ordered points with "
+"timestamps)"
+msgstr ""
+
+msgid "Upload Trace"
+msgstr ""
+
+msgid "Upload Traces"
+msgstr ""
+
+msgid "Defines the visibility of your trace for other OSM users."
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Visibility_of_GPS_traces"
+msgstr ""
+
+msgid "(What does that mean?)"
+msgstr ""
+
+msgid "Please enter Description about your trace."
+msgstr ""
+
+msgid "Tags (comma delimited)"
+msgstr ""
+
+msgid "Please enter tags about your trace."
+msgstr ""
+
+msgid "Selected track: {0}"
+msgstr ""
+
+msgid "No GPX layer selected. Cannot upload a trace."
+msgstr ""
+
+msgid "Uploading trace ..."
+msgstr ""
+
+msgid "Connecting..."
+msgstr ""
+
+msgid "Upload canceled"
+msgstr ""
+
+msgid "Error while uploading"
+msgstr ""
+
+msgid "GPX upload was successful"
+msgstr ""
+
+msgid "Upload failed. Server returned the following message: "
+msgstr ""
+
+msgid "Uploading GPX track: {0}% ({1} of {2})"
+msgstr ""
+
+msgid "No description provided. Please provide some description."
+msgstr ""
+
+msgid "Uploading GPX Track"
+msgstr ""
+
+msgid "Uploads traces to openstreetmap.org"
+msgstr ""
+
+msgid "Shows elevation profile"
+msgstr ""
+
+msgid "Elevation Profile"
+msgstr ""
+
+msgid "Elevation Grid Layer (experimental!)"
+msgstr ""
+
+msgid "Shows elevation grid layer"
+msgstr ""
+
+msgid "Elevation Grid"
+msgstr ""
+
+msgid "No SRTM data"
+msgstr ""
+
+msgid "Open the elevation profile window."
+msgstr ""
+
+msgid "Min"
+msgstr ""
+
+msgid "Avrg"
+msgstr ""
+
+msgid "Max"
+msgstr ""
+
+msgid "Dist"
+msgstr ""
+
+msgid "Gain"
+msgstr ""
+
+msgid "Tracks"
+msgstr ""
+
+msgid "Elevation profile for track ''{0}''."
+msgstr ""
+
+msgid "Elevation profile"
+msgstr ""
+
+msgid "(No elevation data)"
+msgstr ""
+
+msgid "Can not save preferences"
+msgstr ""
+
+msgid "Epsilon multiplier"
+msgstr ""
+
+msgid "Starting Epsilon"
+msgstr ""
+
+msgid "Max points count per 1 km"
+msgstr ""
+
+msgid "Enter key mode"
+msgstr ""
+
+msgid "Auto add tags"
+msgstr ""
+
+msgid "Autosimplify"
+msgstr ""
+
+msgid "Simplify with initial epsilon"
+msgstr ""
+
+msgid "Save as is"
+msgstr ""
+
+msgid "Snap to nodes"
+msgstr ""
+
+msgid "Add fixed points on click"
+msgstr ""
+
+msgid "Add fixed points on spacebar"
+msgstr ""
+
+msgid "Allow edit existing ways"
+msgstr ""
+
+msgid "Draw closed polygons only"
+msgstr ""
+
+msgid "FastDraw configuration"
+msgstr ""
+
+msgid "Try copying tags from properties table"
+msgstr ""
+
+msgid "Save settings"
+msgstr ""
+
+msgid "Can not read settings"
+msgstr ""
+
+msgid "Q=Options, Enter=save, Ctrl-Enter=save with tags, Up/Down=tune"
+msgstr ""
+
+msgid ""
+"Click or Click&drag to continue, Ctrl-Click to add fixed node, Shift-Click "
+"to delete, Enter to simplify or save, Ctrl-Shift-Click to start new line"
+msgstr ""
+
+msgid "FastDrawing"
+msgstr ""
+
+msgid "Fast drawing mode"
+msgstr ""
+
+msgid "Please move the mouse to draw new way"
+msgstr ""
+
+msgid "Are you sure you do not want to save the line containing {0} points?"
+msgstr ""
+
+msgid ""
+"{0} m - length of the line\n"
+"{1} nodes\n"
+"{2} points per km (maximum)\n"
+"{3} points per km (average)"
+msgstr ""
+
+msgid "Line information"
+msgstr ""
+
+msgid "Cannot place node outside of the world."
+msgstr ""
+
+msgid "Draw the way by mouse"
+msgstr ""
+
+msgid "min distance={0} px ({1} m)"
+msgstr ""
+
+msgid "Eps={0}, {1} points, {2} p/km"
+msgstr ""
+
+msgid "Fix addresses"
+msgstr ""
+
+msgid "Show dialog with incomplete addresses"
+msgstr ""
+
+msgid "Include objects used for guesses"
+msgstr ""
+
+msgid "Fix street addresses"
+msgstr ""
+
+msgid "Find and fix addresses without (valid) streets."
+msgstr ""
+
+msgid "Address Edit"
+msgstr ""
+
+msgid "Searching"
+msgstr ""
+
+msgid "Guess values for "
+msgstr ""
+
+msgid "Address has no street"
+msgstr ""
+
+msgid "Address has no valid street"
+msgstr ""
+
+msgid "Address has no post code"
+msgstr ""
+
+msgid "Address has no city"
+msgstr ""
+
+msgid "Address has no country"
+msgstr ""
+
+msgid "Assign to"
+msgstr ""
+
+msgid "Remove all address tags"
+msgstr ""
+
+msgid "No name"
+msgstr ""
+
+msgid "Unresolved Addresses"
+msgstr ""
+
+msgid "Select and close"
+msgstr ""
+
+msgid "Fix unresolved addresses"
+msgstr ""
+
+msgid "Complete Addresses"
+msgstr ""
+
+msgid "Incomplete Addresses"
+msgstr ""
+
+msgid "Selected Addresses"
+msgstr ""
+
+msgid "Selected Street"
+msgstr ""
+
+msgid "(No data)"
+msgstr ""
+
+msgid "Segments"
+msgstr ""
+
+msgid "Show incomplete addresses"
+msgstr ""
+
+msgid "items"
+msgstr ""
+
+msgid "no items"
+msgstr ""
+
+msgctxt "address"
+msgid "City"
+msgstr ""
+
+msgid "Postcode"
+msgstr ""
+
+msgid "Turns all guesses into the corresponding tag values."
+msgstr ""
+
+msgid "Applied guessed values"
+msgstr ""
+
+msgid "Applied guessed values for "
+msgstr ""
+
+msgid "Assign address to street"
+msgstr ""
+
+msgid "Assign the selected address(es) to the selected street."
+msgstr ""
+
+msgid "Set street name"
+msgstr ""
+
+msgid "Convert ALL streets."
+msgstr ""
+
+msgid ""
+"Create relation between street and related addresses for ALL streets in the "
+"current layer."
+msgstr ""
+
+msgid "Convert to relation."
+msgstr ""
+
+msgid "Create relation between street and related addresses."
+msgstr ""
+
+msgid "Create address relation for "
+msgstr ""
+
+msgid "Guess"
+msgstr ""
+
+msgid ""
+"Tries to guess address data by picking the name of the closest object with "
+"according tag."
+msgstr ""
+
+msgid "Guessing address values"
+msgstr ""
+
+msgid "Removes address related tags from the object."
+msgstr ""
+
+msgid "Remove address tags"
+msgstr ""
+
+msgid "Marks selected addresses in the map"
+msgstr ""
+
+msgid "Select incomplete addresses"
+msgstr ""
+
+msgid "Selects all addresses with incomplete data."
+msgstr ""
+
+msgid "Use tag ''addr:street'' or ''addr:place''"
+msgstr ""
+
+msgid "House Number Editor"
+msgstr ""
+
+msgid "House number increment:"
+msgstr ""
+
+msgid "Updating properties of up to {0} object"
+msgid_plural "Updating properties of up to {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Default image projection"
+msgstr ""
+
+msgid "JOSM''s current projection"
+msgstr ""
+
+msgid ""
+"No projection file (.prj) found.<br>You can choose the default image "
+"projection ({0}) or JOSM''s current editor projection ({1}) as original "
+"image projection.<br>(It can be changed later from the right click menu of "
+"the image layer.)"
+msgstr ""
+
+msgid "Layer Properties"
+msgstr ""
+
+msgid "Error while creating image layer: {0}"
+msgstr ""
+
+msgid "Import image"
+msgstr ""
+
+msgid "Import georeferenced image"
+msgstr ""
+
+msgid "Error while creating image layer: "
+msgstr ""
+
+msgid "NanoLog"
+msgstr ""
+
+msgid "NanoLog of {0} entries"
+msgstr ""
+
+msgid "NanoLog of {0} lines, {1} of them with coordinates."
+msgstr ""
+
+msgid "Correlate with GPX..."
+msgstr ""
+
+msgid "Put on GPX..."
+msgstr ""
+
+msgid "Correlate entries with GPS trace"
+msgstr ""
+
+msgid "Save layer..."
+msgstr ""
+
+msgid "Save NanoLog layer"
+msgstr ""
+
+msgid "Open NanoLog panel"
+msgstr ""
+
+msgid "Open NanoLog file..."
+msgstr ""
+
+msgid "Could not read NanoLog file:"
+msgstr ""
+
+msgid "OSM Recommendation"
+msgstr ""
+
+msgid "Recommend categories to your newly created instances."
+msgstr ""
+
+msgid "Training process configuration"
+msgstr ""
+
+msgid "Model Settings"
+msgstr ""
+
+msgid "Select objects or create new objects and get recommendation."
+msgstr ""
+
+msgid "Add Recommendation"
+msgstr ""
+
+msgid "Add a recommended key/value pair to your object"
+msgstr ""
+
+msgid "Train a Model"
+msgstr ""
+
+msgid "Start the training engine!"
+msgstr ""
+
+msgid "Edit opening hours"
+msgstr ""
+
+msgid "Edit time-tag of selected element in a graphical interface"
+msgstr ""
+
+msgid "edit existing tag"
+msgstr ""
+
+msgid "edit new tag"
+msgstr ""
+
+msgid "Display clock in 12h mode."
+msgstr ""
+
+msgid "Choose key"
+msgstr ""
+
+msgid "apply {0}"
+msgstr ""
+
+msgid "There is something wrong in the value near:"
+msgstr ""
+
+msgid "Info: {0}"
+msgstr ""
+
+msgid "Correct the value manually and than press Enter."
+msgstr ""
+
+msgid "Error in timeformat"
+msgstr ""
+
+msgid "open end"
+msgstr ""
+
+msgid "Import Osm Inspector Bugs..."
+msgstr ""
+
+msgid "OsmInspector"
+msgstr ""
+
+msgid "Open OsmInspector"
+msgstr ""
+
+msgid "OsmBugInfo"
+msgstr ""
+
+msgid "Open a OSM Inspector selection list window."
+msgstr ""
+
+msgid "Current Selected Bug Info"
+msgstr ""
+
+msgid "Prev OSMI bug"
+msgstr ""
+
+msgid "Next OSMI bug"
+msgstr ""
+
+msgid "Osm Inspector Bugs"
+msgstr ""
+
+msgid "OSM Inspector Bugs"
+msgstr ""
+
+msgid "Selected Bug Info"
+msgstr ""
+
+msgid "Handy Address Interpolation Functions"
+msgstr ""
+
+msgid "Define Address Interpolation"
+msgstr ""
+
+msgid "Odd"
+msgstr ""
+
+msgid "Even"
+msgstr ""
+
+msgid "Alphabetic"
+msgstr ""
+
+msgid "Numeric"
+msgstr ""
+
+msgid "Actual"
+msgstr ""
+
+msgid "Estimate"
+msgstr ""
+
+msgid "Potential"
+msgstr ""
+
+msgid "Relation: {0}"
+msgstr ""
+
+msgid "Associate with street using:"
+msgstr ""
+
+msgid "Numbering Scheme:"
+msgstr ""
+
+msgid "Increment:"
+msgstr ""
+
+msgid "Starting #:"
+msgstr ""
+
+msgid "Ending #:"
+msgstr ""
+
+msgid "Accuracy:"
+msgstr ""
+
+msgid "Convert way to individual house numbers."
+msgstr ""
+
+msgid "Will associate {0} additional house number nodes"
+msgstr ""
+
+msgid "City:"
+msgstr ""
+
+msgid "State:"
+msgstr ""
+
+msgid "Post Code:"
+msgstr ""
+
+msgid "Country:"
+msgstr ""
+
+msgid "Full Address:"
+msgstr ""
+
+msgid "Optional Information:"
+msgstr ""
+
+msgid "Please select a street to associate with address interpolation way"
+msgstr ""
+
+msgid "Please select address interpolation way for this street"
+msgstr ""
+
+msgid "Expected odd numbers for addresses"
+msgstr ""
+
+msgid "Expected even numbers for addresses"
+msgstr ""
+
+msgid "Expected valid number for increment"
+msgstr ""
+
+msgid "Country code must be 2 letters"
+msgstr ""
+
+msgid "Please enter valid number for starting and ending address"
+msgstr ""
+
+msgid "Alphabetic address must end with a letter"
+msgstr ""
+
+msgid "Starting and ending numbers must be the same for alphabetic addresses"
+msgstr ""
+
+msgid "Starting address letter must be less than ending address letter"
+msgstr ""
+
+msgid "Please enter valid number for starting address"
+msgstr ""
+
+msgid "Please enter valid number for ending address"
+msgstr ""
+
+msgid "Starting address number must be less than ending address number"
+msgstr ""
+
+msgid "Align Way Segments"
+msgstr ""
+
+msgid "Align Ways"
+msgstr ""
+
+msgid ""
+"Please select two segments that don''t share any nodes.\n"
+"Alternatively put the pivot on their common node.\n"
+msgstr ""
+
+msgid ""
+"Aligning would result nodes ''outside the world''.\n"
+"Alignment not possible.\n"
+msgstr ""
+
+msgid ""
+"There is at least a non-pivot endpoint of the alignee that joins more than "
+"two way segments.\n"
+"Preserved angles type alignment is not possible.\n"
+msgstr ""
+
+msgid ""
+"The alignment is not possible with maintaining the angles of the joint "
+"segments.\n"
+"Either choose the ''keep length'' aligning method or select other segments.\n"
+msgstr ""
+
+msgid ""
+"An intersection point would fall outside its adjacent nodes.\n"
+"This is an unsupported scenario.\n"
+msgstr ""
+
+msgid "Undocumented problem occured.\n"
+msgstr ""
+
+msgid "AlignWayS: Alignment not possible"
+msgstr ""
+
+msgid "Align way segment"
+msgstr ""
+
+msgid ""
+"Please select two segments that don''t share any nodes\n"
+" or put the pivot on their common node.\n"
+msgstr ""
+
+msgid "Align Way Segments: Modes"
+msgstr ""
+
+msgid "Align Ways control panel"
+msgstr ""
+
+msgid "This panel activates in Align Ways mode:"
+msgstr ""
+
+msgid "Length preserved"
+msgstr ""
+
+msgid "Angle preserved"
+msgstr ""
+
+msgid "Align with:"
+msgstr ""
+
+msgid ""
+"<html>Aligns the way segment to the reference so that its length is "
+"preserved.</html>"
+msgstr ""
+
+msgid ""
+"<html>Aligns the way segment to the reference so that the angles of its "
+"adjacent segments are preserved.<br/>The length of the aligned segment is "
+"likely to change as result.</html>"
+msgstr ""
+
+msgid "I''m ready!"
+msgstr ""
+
+msgid "AlignWays Tips"
+msgstr ""
+
+msgid "AlignWays: What''s New..."
+msgstr ""
+
+msgid "Align Ways mode"
+msgstr ""
+
+msgid "Parameter ''{0}'' must not be null"
+msgstr ""
+
+msgid ""
+"Segment to be aligned cannot be the same with the reference segment.\n"
+"Please choose a different segment to be aligned."
+msgstr ""
+
+msgid "AlignWayS message"
+msgstr ""
+
+msgid ""
+"Reference segment cannot be the same with the segment to be aligned.\n"
+"Please choose a different reference segment."
+msgstr ""
+
+msgid "Ctrl-Click: select reference way segment; Alt-click: Clear selection"
+msgstr ""
+
+msgid ": Align segments; Alt-click: Clear selection"
+msgstr ""
+
+msgid ""
+"Ctrl-click: select reference way segment; Click: select way segment to be "
+"aligned"
+msgstr ""
+
+msgid "Click: select way segment to be aligned; Alt-click: Clear selection"
+msgstr ""
+
+msgid ""
+"Ctrl-Click: select reference way segment; Click: select way segment to be "
+"aligned"
+msgstr ""
+
+msgid ""
+"Welcome to the</span><br>\n"
+"<span style=\"font-size: xx-large;\">AlignWay<span style=\"color: rgb(204, "
+"85, 0);\">S</span> Plugin<br>\n"
+"</span><span style=\"font-size: medium;\"><br>\n"
+"...or it rather should be called <br>\n"
+"<span style=\"font-size: large;\">AlignWayS(egments)</span> Plugin..."
+msgstr ""
+
+msgid ""
+"<html>\n"
+"<p style=\"font-family: sans-serif; font-weight: bold;\">AlignWays will\n"
+"help you to align two way segments. This can be handy when for instance\n"
+"you sketch the outlines of a building and want its side to be parallel\n"
+"with a street or road.<br>\n"
+"<br>\n"
+"Some tips may help before you start:\n"
+"</p>\n"
+"</html>\n"
+"\n"
+msgstr ""
+
+msgid ""
+"<html>\n"
+"<div style=\"font-family: sans-serif;\">\n"
+"<ul>\n"
+"<li><b>Select a reference segment.</b> You can do this by <b><i><span "
+"style=\"color:green\">Ctrl-click</span></i></b>ing\n"
+"on a segment. The other, to be aligned segment will become parallel to\n"
+"this one. </li>\n"
+"</ul>\n"
+"</div>\n"
+"</html>\n"
+"\n"
+msgstr ""
+
+msgid ""
+"<html>\n"
+"<div style=\"font-family:sans-serif\">\n"
+"<ul>\n"
+"  <li><b>Select the to be aligned segment.</b> You can do this by simply "
+"<b><i><span style=\"color:green\">click</span></i></b>ing on a different "
+"segment. \n"
+"The rotation pivot will be highlighted by default in the centre of the "
+"segment.\n"
+"  </li>\n"
+"</ul>\n"
+"</div>\n"
+"</html>\n"
+"\n"
+msgstr ""
+
+msgid ""
+"<html>\n"
+"<div style=\"font-family:sans-serif\">\n"
+"<ul>\n"
+"  <li>Optionally <b>change the rotation pivot point</b>. In order to get "
+"parallel with the reference segment, the to be aligned segment will rotate "
+"around this point. You can choose the two extremities or the centre of the "
+"segment by <b><i><span style=\"color:green\">click</span></i></b>ing nearby. "
+"\n"
+"  </li>\n"
+"</ul>\n"
+"</div>\n"
+"</html>\n"
+"\n"
+msgstr ""
+
+msgid ""
+"<html>\n"
+"<div style=\"font-family:sans-serif\">\n"
+"<ul>\n"
+"  <li><b>Align the segments.</b> Press <b><i><span "
+"style=\"color:green\">{0}</span></i></b>. Alternatively you''ll find the "
+"command in the <b>Tools</b>\n"
+" menu or may want to place the action on the <b>toolbar</b>.\n"
+"  </li>\n"
+"</ul>\n"
+"</div>\n"
+"</html>\n"
+"\n"
+msgstr ""
+
+msgid ""
+"<html>\n"
+"<div style=\"font-family:sans-serif\">\n"
+"<b>Last hint:</b> There is an easy way to start over your selections if you "
+"want: <b><i><span style=\"color:green\">Alt-Click</span></i></b> somewhere "
+"on the map.\n"
+"</div>\n"
+"</html>\n"
+"\n"
+msgstr ""
+
+msgid "Don''t show this again"
+msgstr ""
+
+msgid "What''s new..."
+msgstr ""
+
+msgid "Added <b>angle preserving</b> aligning mode"
+msgstr ""
+
+msgid "Various improvements and bugfixes"
+msgstr ""
+
+msgid "Errr..."
+msgstr ""
+
+msgid "Browser not supported."
+msgstr ""
+
+msgid "Building address"
+msgstr ""
+
+msgid "empty"
+msgstr ""
+
+msgid "skip"
+msgstr ""
+
+msgid "House number:"
+msgstr ""
+
+msgid "Street:"
+msgstr ""
+
+msgid "Post code:"
+msgstr ""
+
+msgid "Building:"
+msgstr ""
+
+msgid "Tags:"
+msgstr ""
+
+msgid "Name:"
+msgstr ""
+
+msgid "updated building info"
+msgstr ""
+
+msgid "Tag Element"
+msgstr ""
+
+msgid "Select an item to tag."
+msgstr ""
+
+msgid "Tag Building"
+msgstr ""
+
+msgid "Tools: {0}"
+msgstr ""
+
+msgid "Area Selection"
+msgstr ""
+
+msgid "Select an area (e.g. building) from an underlying image."
+msgstr ""
+
+msgid "Area Selector"
+msgstr ""
+
+msgid "Created area"
+msgstr ""
+
+msgid "Unable to detect a polygon where you clicked."
+msgstr ""
+
+msgid "Error Report"
+msgstr ""
+
+msgid "Something went wrong!"
+msgstr ""
+
+msgid "Please file a bug report on the github project page under"
+msgstr ""
+
+msgid ""
+"Let us know what you did and what happend add the following text to the bug "
+"report, so we can find the source of the issue."
+msgstr ""
+
+msgid "Area Selector - Preferences"
+msgstr ""
+
+msgid "Settings for the area detection algorithm."
+msgstr ""
+
+msgid "Boofcv - high resolution images"
+msgstr ""
+
+msgid "Custom - low resolution images"
+msgstr ""
+
+msgid ""
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
+msgstr ""
+
+msgid "Algorithm"
+msgstr ""
+
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
+msgstr ""
+
+msgid "Distance Tolerance"
+msgstr ""
+
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
+msgstr ""
+
+msgid "Angle Tolerance"
+msgstr ""
+
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
+msgstr ""
+
+msgid "Color Threshold"
+msgstr ""
+
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
+msgstr ""
+
+msgid "How often thinning operation should be applied (Default {0})."
+msgstr ""
+
+msgid "Thinning Iterations"
+msgstr ""
+
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
+msgstr ""
+
+msgid "Debugging mode will write images for each processing step."
+msgstr ""
+
+msgid "Street Name:"
+msgstr ""
+
+msgid "Big buildings mode"
+msgstr ""
+
+msgid "Rotate crosshair"
+msgstr ""
+
+msgid "Advanced settings"
+msgstr ""
+
+msgid "Buildings tags:"
+msgstr ""
+
+msgid "Cannot place building outside of the world."
+msgstr ""
+
+msgid "Create building"
+msgstr ""
+
+msgid "Set buildings size"
+msgstr ""
+
+msgid "Use Address dialog"
+msgstr ""
+
+msgid "Auto-select building"
+msgstr ""
+
+msgid "Use address nodes under buildings"
+msgstr ""
+
+msgid "Buildings width:"
+msgstr ""
+
+msgid "Length step:"
+msgstr ""
+
+msgid "Advanced..."
+msgstr ""
+
+msgid "Draw buildings"
+msgstr ""
+
+msgid "Point on the corner of the building to start drawing"
+msgstr ""
+
+msgid "Point on opposite end of the building"
+msgstr ""
+
+msgid "Set width of the building"
+msgstr ""
+
+msgid "Merge address points"
+msgstr ""
+
+msgid "Move tags from address nodes inside buildings to building ways"
+msgstr ""
+
+msgid "Select both address nodes and building ways to merge"
+msgstr ""
+
+msgid "No address nodes found in the selection"
+msgstr ""
+
+msgid "No building ways found in the selection"
+msgstr ""
+
+msgid "There is {0} building with multiple address nodes inside"
+msgid_plural "There are {0} buildings with multiple address nodes inside"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "There is {0} building with address conflicts"
+msgid_plural "There are {0} buildings with address conflicts"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "No address nodes inside buildings found"
+msgstr ""
+
+msgid "on polygon"
+msgstr ""
+
+msgid "Add address"
+msgstr ""
+
+msgid "Helping tool for tag address"
+msgstr ""
+
+msgid "CadastreFR - Buildings"
+msgstr ""
+
+msgid "Next no"
+msgstr ""
+
+msgid "Enter addresses"
+msgstr ""
+
+msgid ""
+"Location \"{0}\" found in cache.\n"
+"Load cache first ?\n"
+"(No = new cache)"
+msgstr ""
+
+msgid "Select Feuille"
+msgstr ""
+
+msgid ""
+"Error loading file.\n"
+"Probably an old version of the cache file."
+msgstr ""
+
+msgid "Lambert Zone {0} cache file (.{0})"
+msgstr ""
+
+msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
+msgstr ""
+
+msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
+msgstr ""
+
+msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
+msgstr ""
+
+msgid "Martinique Fort Desaix cache file (.UTM3)"
+msgstr ""
+
+msgid "Reunion RGR92 cache file (.UTM4)"
+msgstr ""
+
+msgid "CadastreGrabber: Illegal url."
+msgstr ""
+
+msgid ""
+"Cannot open a new client session.\n"
+"Server in maintenance or temporary overloaded."
+msgstr ""
+
+msgid ""
+"Town/city {0} not found or not available\n"
+"or action canceled"
+msgstr ""
+
+msgid "Choose from..."
+msgstr ""
+
+msgid "Select commune"
+msgstr ""
+
+msgid "Auto sourcing"
+msgstr ""
+
+msgid ""
+"Plugin cadastre-fr used the key shortcut F11 for grabbing,\n"
+"which is now allocated for full-screen switch.\n"
+"The new grabbing key is F10, but you can change the key\n"
+"in the shortcut settings if you want."
+msgstr ""
+
+msgid ""
+"Please enable at least two WMS layers in the cadastre-fr plugin "
+"configuration.\n"
+"Layers ''Building'' and ''Parcel'' added by default."
+msgstr ""
+
+msgid ""
+"Warning: failed to put option pane dialog always on top. Exception was: {0}"
+msgstr ""
+
+msgid ""
+"To enable the cadastre WMS plugin, change\n"
+"the current projection to one of the cadastre\n"
+"projections and retry"
+msgstr ""
+
+msgid "Change the current projection"
+msgstr ""
+
+msgid "Replace original background by JOSM background color."
+msgstr ""
+
+msgid "Reverse grey colors (for black backgrounds)."
+msgstr ""
+
+msgid "Set background transparent."
+msgstr ""
+
+msgid "Draw boundaries of downloaded data."
+msgstr ""
+
+msgid "Disable image cropping during georeferencing."
+msgstr ""
+
+msgid "Use \"Tableau d''assemblage\""
+msgstr ""
+
+msgid "Replace grey shades by white color only"
+msgstr ""
+
+msgid "Select first WMS layer in list."
+msgstr ""
+
+msgid "Don''t use relation for addresses (but \"addr:street\" on elements)."
+msgstr ""
+
+msgid "off"
+msgstr ""
+
+msgid "25 m"
+msgstr ""
+
+msgid "50 m"
+msgstr ""
+
+msgid "100 m"
+msgstr ""
+
+msgid "symbol"
+msgstr ""
+
+msgid "parcel"
+msgstr ""
+
+msgid "parcel number"
+msgstr ""
+
+msgid "address"
+msgstr ""
+
+msgid "locality"
+msgstr ""
+
+msgid "section"
+msgstr ""
+
+msgid "commune"
+msgstr ""
+
+msgid "Enable automatic caching."
+msgstr ""
+
+msgid "Max. cache size (in MB)"
+msgstr ""
+
+msgid "French cadastre WMS"
+msgstr ""
+
+msgid ""
+"A special handler of the French cadastre wms at "
+"www.cadastre.gouv.fr<BR><BR>Please read the Terms and Conditions of Use here "
+"(in French): <br><a "
+"href=\"http://www.cadastre.gouv.fr/scpc/html/CU_01_ConditionsGenerales_fr.htm"
+"l\"> "
+"http://www.cadastre.gouv.fr/scpc/html/CU_01_ConditionsGenerales_fr.html</a> "
+"<BR>before any upload of data created by this plugin."
+msgstr ""
+
+msgid "<html>Value of key \"source\" when autosourcing is enabled</html>"
+msgstr ""
+
+msgid ""
+"Replace the original white background by the background color defined in "
+"JOSM preferences."
+msgstr ""
+
+msgid ""
+"Invert the original black and white colors (and all intermediate greys). "
+"Useful for texts on dark backgrounds."
+msgstr ""
+
+msgid "Allows multiple layers stacking"
+msgstr ""
+
+msgid "Set WMS layers transparency. Right is opaque, left is transparent."
+msgstr ""
+
+msgid "Draw a rectangle around downloaded data from WMS server."
+msgstr ""
+
+msgid "Image resolution:"
+msgstr ""
+
+msgid "High resolution (1000x800)"
+msgstr ""
+
+msgid "Medium resolution (800x600)"
+msgstr ""
+
+msgid "Low resolution (600x400)"
+msgstr ""
+
+msgid "Image filter interpolation:"
+msgstr ""
+
+msgid "Nearest-Neighbor (fastest) [ Default ]"
+msgstr ""
+
+msgid "Bilinear (fast)"
+msgstr ""
+
+msgid "Bicubic (slow)"
+msgstr ""
+
+msgid "Vector images grab multiplier:"
+msgstr ""
+
+msgid "Grab one image full screen"
+msgstr ""
+
+msgid "Grab smaller images (higher quality but use more memory)"
+msgstr ""
+
+msgid "Fixed size square (default is 100m)"
+msgstr ""
+
+msgid "Fixed size (from 25 to 1000 meters)"
+msgstr ""
+
+msgid "Layers:"
+msgstr ""
+
+msgid "Sea, rivers, swimming pools."
+msgstr ""
+
+msgid "Buildings, covers, underground constructions."
+msgstr ""
+
+msgid "Symbols like cristian cross."
+msgstr ""
+
+msgid "Parcels."
+msgstr ""
+
+msgid "Parcels numbers, street names."
+msgstr ""
+
+msgid "Address, houses numbers."
+msgstr ""
+
+msgid "Locality, hamlet, place."
+msgstr ""
+
+msgid "Cadastral sections and subsections."
+msgstr ""
+
+msgid "Municipality administrative borders."
+msgstr ""
+
+msgid "Raster images grab multiplier:"
+msgstr ""
+
+msgid ""
+"Add the \"Tableau(x) d''assemblage\" in the list of cadastre sheets to grab."
+msgstr ""
+
+msgid "Replace greyscale by white color (smaller files and memory usage)."
+msgstr ""
+
+msgid "Display crosspieces:"
+msgstr ""
+
+msgid "Allows an automatic caching"
+msgstr ""
+
+msgid "Oldest files are automatically deleted when this size is exceeded"
+msgstr ""
+
+msgid ""
+"Automatically selects the first WMS layer if multiple layers exist when "
+"grabbing."
+msgstr ""
+
+msgid "Enable this to use the tag \"add:street\" on nodes."
+msgstr ""
+
+msgid "Unexpected file extension. {0}"
+msgstr ""
+
+msgid "Add \"source=...\" to elements?"
+msgstr ""
+
+msgid "Downloading {0}"
+msgstr ""
+
+msgid "Contacting WMS Server..."
+msgstr ""
+
+msgid "Create buildings"
+msgstr ""
+
+msgid ""
+"To avoid cadastre WMS overload,\n"
+"building import size is limited to 1 km2 max."
+msgstr ""
+
+msgid "Please, enable auto-sourcing and check cadastre millesime."
+msgstr ""
+
+msgid "Extract SVG ViewBox..."
+msgstr ""
+
+msgid "Extract best fitting boundary..."
+msgstr ""
+
+msgid "Create boundary"
+msgstr ""
+
+msgid "Contacting cadastre WMS ..."
+msgstr ""
+
+msgid "Image already loaded"
+msgstr ""
+
+msgid ""
+"Municipality vectorized !\n"
+"Use the normal Cadastre Grab menu."
+msgstr ""
+
+msgid ""
+"This commune is not vectorized.\n"
+"Please use the other menu entry to georeference a \"Plan image\""
+msgstr ""
+
+msgid "Extract commune boundary"
+msgstr ""
+
+msgid "Only on vectorized layers"
+msgstr ""
+
+msgid "Cancel current grab"
+msgstr ""
+
+msgid "Cancel current grab (only vector images)"
+msgstr ""
+
+msgid "Cadastre grab"
+msgstr ""
+
+msgid "Download Image from French Cadastre WMS"
+msgstr ""
+
+msgid "Cadastre: {0}"
+msgstr ""
+
+msgid "Georeference an image"
+msgstr ""
+
+msgid "Grab non-georeferenced image"
+msgstr ""
+
+msgid "Georeferencing interrupted"
+msgstr ""
+
+msgid ""
+"This image contains georeference data.\n"
+"Do you want to use them ?"
+msgstr ""
+
+msgid "Load layer from cache"
+msgstr ""
+
+msgid "Load location from cache (only if cache is enabled)"
+msgstr ""
+
+msgid "{0} not allowed with the current projection"
+msgstr ""
+
+msgid ""
+"Cannot load cache {0} which is not compatible with current projection zone"
+msgstr ""
+
+msgid ""
+"Selected file {0} is not a cache file from this plugin (invalid extension)"
+msgstr ""
+
+msgid "The location {0} is already on screen. Cache not loaded."
+msgstr ""
+
+msgid "(optional)"
+msgstr ""
+
+msgid "Change location"
+msgstr ""
+
+msgid "Set a new location for the next request"
+msgstr ""
+
+msgid "Add a new municipality layer"
+msgstr ""
+
+msgid "Commune"
+msgstr ""
+
+msgid ""
+"<html>Enter the town,village or city name.<br>Use the syntax and punctuation "
+"known by www.cadastre.gouv.fr .</html>"
+msgstr ""
+
+msgid "Departement"
+msgstr ""
+
+msgid "<html>Departement number (optional)</html>"
+msgstr ""
+
+msgid "Add new layer"
+msgstr ""
+
+msgid "Open Cadastre Preferences"
+msgstr ""
+
+msgid "Refine georeferencing"
+msgstr ""
+
+msgid "Improve georeferencing (only raster images)"
+msgstr ""
+
+msgid "Reset cookie"
+msgstr ""
+
+msgid "Get a new cookie (session timeout)"
+msgstr ""
+
+msgid "Save image as..."
+msgstr ""
+
+msgid "PNG files (*.png)"
+msgstr ""
+
+msgid "GeoTiff files (*.tif)"
+msgstr ""
+
+msgid "Export image (only raster images)"
+msgstr ""
+
+msgid ""
+"Click first corner for image cropping\n"
+"(two points required)"
+msgstr ""
+
+msgid "Image cropping"
+msgstr ""
+
+msgid ""
+"Click first Lambert crosspiece for georeferencing\n"
+"(two points required)"
+msgstr ""
+
+msgid "Image georeferencing"
+msgstr ""
+
+msgid ""
+"Do you want to cancel completely\n"
+"or just retry "
+msgstr ""
+
+msgid ""
+"Ooops. I failed to catch all coordinates\n"
+"correctly. Retry please."
+msgstr ""
+
+msgid "Enter cadastre east,north position"
+msgstr ""
+
+msgid "(Warning: verify north with arrow !!)"
+msgstr ""
+
+msgid "East"
+msgstr ""
+
+msgid "I use the mouse"
+msgstr ""
+
+msgid "Set {0} Lambert coordinates"
+msgstr ""
+
+msgid "Click second corner for image cropping"
+msgstr ""
+
+msgid "Click second Lambert crosspiece for georeferencing"
+msgstr ""
+
+msgid "Adjust WMS"
+msgstr ""
+
+msgid "Adjust the position of the WMS layer (saved for raster images only)"
+msgstr ""
+
+msgid ""
+"More than one WMS layer present\n"
+"Select one of them first, then retry"
+msgstr ""
+
+msgid "Reset offset"
+msgstr ""
+
+msgid "Reset offset (only vector images)"
+msgstr ""
+
+msgid "Blank Layer"
+msgstr ""
+
+msgid "WMS layer ({0}), {1} tile(s) loaded"
+msgstr ""
+
+msgid "Is not vectorized."
+msgstr ""
+
+msgid "Bounding box: {0}"
+msgstr ""
+
+msgid "Image size (px): {0}/{1}"
+msgstr ""
+
+msgid "Is vectorized."
+msgstr ""
+
+msgid "Commune bbox: {0}"
+msgstr ""
+
+msgid ""
+"Unsupported cache file version; found {0}, expected {1}\n"
+"Create a new one."
+msgstr ""
+
+msgid "Cache Format Error"
+msgstr ""
+
+msgid "Lambert zone {0} in cache incompatible with current Lambert zone {1}"
+msgstr ""
+
+msgid "Cache Lambert Zone Error"
+msgstr ""
+
+msgid "canvec tile helper"
+msgstr ""
+
+msgid "Use"
+msgstr ""
+
+msgid "Please select a scheme to use."
+msgstr ""
+
+msgid "Color Scheme"
+msgstr ""
+
+msgid "Please select the scheme to delete."
+msgstr ""
+
+msgid "Use the selected scheme from the list."
+msgstr ""
+
+msgid "Use the current colors as a new color scheme."
+msgstr ""
+
+msgid "Delete the selected scheme from the list."
+msgstr ""
+
+msgid "Color Schemes"
+msgstr ""
+
+msgid "Conflate object pair"
+msgstr ""
+
+msgid "Added {0} object to subject layer"
+msgid_plural "Added {0} objects to subject layer"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Conflation"
+msgstr ""
+
+msgid "Activates the conflation plugin"
+msgstr ""
+
+msgid "Matches"
+msgstr ""
+
+msgid "Reference only"
+msgstr ""
+
+msgid "Subject only"
+msgstr ""
+
+msgid "Matches ({0})"
+msgstr ""
+
+msgid "Reference only ({0})"
+msgstr ""
+
+msgid "Subject only ({0})"
+msgstr ""
+
+msgid "Configure"
+msgstr ""
+
+msgid "Configure conflation options"
+msgstr ""
+
+msgid "Delete {0} conflation matches"
+msgstr ""
+
+msgid "Remove {0} unmatched objects"
+msgstr ""
+
+msgid "Remove selected matches"
+msgstr ""
+
+msgid "Conflate"
+msgstr ""
+
+msgid "Conflate selected objects"
+msgstr ""
+
+msgid "Conflation: {0}"
+msgstr ""
+
+msgid "Cannot replace geometry."
+msgstr ""
+
+msgid "Zoom to selected primitive(s)"
+msgstr ""
+
+msgid "Select selected primitive(s)"
+msgstr ""
+
+msgid "Select the primitives currently selected in the list"
+msgstr ""
+
+msgid "Match finder settings"
+msgstr ""
+
+msgid "Match finder method"
+msgstr ""
+
+msgid "Threshold distance"
+msgstr ""
+
+msgid "Distances greater than this will result in a score of zero."
+msgstr ""
+
+msgid "Centroid distance"
+msgstr ""
+
+msgid "Hausdorff distance"
+msgstr ""
+
+msgid "Configure conflation settings"
+msgstr ""
+
+msgid "Generate matches"
+msgstr ""
+
+msgid "Subject"
+msgstr ""
+
+msgid "Selections must be made for both reference and subject."
+msgstr ""
+
+msgid "Incomplete selections"
+msgstr ""
+
+msgid "Restore subject selection"
+msgstr ""
+
+msgid "Restore reference selection"
+msgstr ""
+
+msgid "Freeze subject selection"
+msgstr ""
+
+msgid "No valid OSM data layer present."
+msgstr ""
+
+msgid "Error freezing selection"
+msgstr ""
+
+msgid "Nothing is selected, please try again."
+msgstr ""
+
+msgid "Empty selection"
+msgstr ""
+
+msgid "Invalid reference or subject"
+msgstr ""
+
+msgid "Address"
+msgstr ""
+
+msgid "Split area"
+msgstr ""
+
+msgid "Splits an area by an untagged way."
+msgstr ""
+
+msgid ""
+"The selected area cannot be splitted, because it is a member of some "
+"relation.\n"
+"Remove the area from the relation before splitting it."
+msgstr ""
+
+msgid "TangoGPS Files (*.log)"
+msgstr ""
+
+msgid "Coordinates imported: "
+msgstr ""
+
+msgid "Format errors: "
+msgstr ""
+
+msgid "TangoGPS import success"
+msgstr ""
+
+msgid "TangoGPS import failure!"
+msgstr ""
+
+msgid "TCX Files (*.tcx)"
+msgstr ""
+
+msgid "Download along..."
+msgstr ""
+
+msgid "Download OSM data along the selected ways."
+msgstr ""
+
+msgid "Download Along"
+msgstr ""
+
+msgid "Please select 1 or more ways to download along"
+msgstr ""
+
+msgid "Download from OSM along selected ways"
+msgstr ""
+
+msgid "{0} intermediate nodes to download."
+msgstr ""
+
+msgid "between {0} {1} and {2} {3}"
+msgstr ""
+
+msgid "  adding {0} {1}"
+msgstr ""
+
+msgid "Layer for editing GPX tracks"
+msgstr ""
+
+msgid "Convert to GPX layer with anonymised time"
+msgstr ""
+
+msgid "EditGpx"
+msgstr ""
+
+msgid "edit gpx tracks"
+msgstr ""
+
+msgid "Import path from GPX layer"
+msgstr ""
+
+msgid "Drop existing path"
+msgstr ""
+
+msgid "No GPX data layer found."
+msgstr ""
+
+msgid "External tool error"
+msgstr ""
+
+msgid "Error executing the script:"
+msgstr ""
+
+msgid ""
+"Child script have returned invalid data.\n"
+"\n"
+"stderr contents:"
+msgstr ""
+
+msgid "exttool:{0}"
+msgstr ""
+
+msgid "External Tool: {0}"
+msgstr ""
+
+msgid "Edit tool"
+msgstr ""
+
+msgid "CmdLine:"
+msgstr ""
+
+msgid "External tools"
+msgstr ""
+
+msgid "Delete tool \"{0}\"?"
+msgstr ""
+
+msgid "Are you sure?"
+msgstr ""
+
+msgid "New tool..."
+msgstr ""
+
+msgid "Install"
+msgstr ""
+
+msgid "Public"
+msgstr ""
+
+msgid "Could not get server response, check logs"
+msgstr ""
+
+msgid "Failed to login as {0}:"
+msgstr ""
+
+msgid "The server did not return user ID"
+msgstr ""
+
+msgid "Failed to get messages as {0}:"
+msgstr ""
+
+msgid "GeoChat"
+msgstr ""
+
+msgid "Open GeoChat panel"
+msgstr ""
+
+msgid "Zoom in to see messages"
+msgstr ""
+
+msgid "Login"
+msgstr ""
+
+msgid "Enable autologin"
+msgstr ""
+
+msgid "{0} user"
+msgid_plural "{0} users"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "not logged in"
+msgstr ""
+
+msgid "Failed to log in to GeoChat:"
+msgstr ""
+
+msgid "Failed to send message:"
+msgstr ""
+
+msgid "User {0} has left"
+msgstr ""
+
+msgid "User {0} is mapping nearby"
+msgstr ""
+
+msgid "Users mapping nearby:"
+msgstr ""
+
+msgid "Private chat"
+msgstr ""
+
+msgid "Close tab"
+msgstr ""
+
+msgid "Logout"
+msgstr ""
+
+msgid "Clear log"
+msgstr ""
+
+msgid "Show users on map"
+msgstr ""
+
+msgid "Position only"
+msgstr ""
+
+msgid "Position, Time, Date, Speed"
+msgstr ""
+
+msgid "Position, Time, Date, Speed, Altitude"
+msgstr ""
+
+msgid "A By Time"
+msgstr ""
+
+msgid "A By Distance"
+msgstr ""
+
+msgid "B By Time"
+msgstr ""
+
+msgid "B By Distance"
+msgstr ""
+
+msgid "C By Time"
+msgstr ""
+
+msgid "C By Distance"
+msgstr ""
+
+msgid "Data Logging Format"
+msgstr ""
+
+msgid "Disable data logging if speed falls below"
+msgstr ""
+
+msgid "Disable data logging if distance falls below"
+msgstr ""
+
+msgid "Unknown logFormat"
+msgstr ""
+
+msgid "Port:"
+msgstr ""
+
+msgid "refresh the port list"
+msgstr ""
+
+msgid "Configure Device"
+msgstr ""
+
+msgid "Connection Error."
+msgstr ""
+
+msgid "configure the connected DG100"
+msgstr ""
+
+msgid "delete data after import"
+msgstr ""
+
+msgid "Importing data from device."
+msgstr ""
+
+msgid "Importing data from DG100..."
+msgstr ""
+
+msgid "Error deleting data."
+msgstr ""
+
+msgid "imported data from {0}"
+msgstr ""
+
+msgid "No data found on device."
+msgstr ""
+
+msgid "Connection failed."
+msgstr ""
+
+msgid ""
+"Cannot load library rxtxSerial. If you need support to install it try "
+"Globalsat homepage at http://www.raphael-mack.de/josm-globalsat-gpx-import-"
+"plugin/"
+msgstr ""
+
+msgid "Globalsat Import"
+msgstr ""
+
+msgid "Import Data from Globalsat Datalogger DG100 into GPX layer."
+msgstr ""
+
+msgid "Import"
+msgstr ""
+
+msgid "GPS Blams"
+msgstr ""
+
+msgid "GPSBlam"
+msgstr ""
+
+msgid "select gpx points and \"blam!\", find centre and direction of spread"
+msgstr ""
+
+msgid "Add EGPX layer"
+msgstr ""
+
+msgid "GPX Data"
+msgstr ""
+
+msgid "Classes element below root child level"
+msgstr ""
+
+msgid "Class element ({0}) outside classes element"
+msgstr ""
+
+msgid "Class element without name"
+msgstr ""
+
+msgid "Tag element outside basetag and implication elements"
+msgstr ""
+
+msgid "Implications element below root child level"
+msgstr ""
+
+msgid "Tag without key"
+msgstr ""
+
+msgid "Tag without value (key is {0})"
+msgstr ""
+
+msgid "Closed classes while it was not open"
+msgstr ""
+
+msgid "Closed classes element before all class elements were closed"
+msgstr ""
+
+msgid "Closed class element while none was open"
+msgstr ""
+
+msgid "Closed basetags while it was not open"
+msgstr ""
+
+msgid "Closed implications while it was not open"
+msgstr ""
+
+msgid "Tag element inside other tag element"
+msgstr ""
+
+msgid "Invalid opening xml tag <{0}> in state {1}"
+msgstr ""
+
+msgid "Condition isn''t finished at </condition> tag"
+msgstr ""
+
+msgid "Closing tag element that was not open"
+msgstr ""
+
+msgid "Invalid closing xml tag </{0}> in state {1}"
+msgstr ""
+
+msgid "Some tags have not been closed; now in state {0}"
+msgstr ""
+
+msgid "Key element without attribute k"
+msgstr ""
+
+msgid "Condition is already finished at <{0}>"
+msgstr ""
+
+msgid "Unknown tag for condition: {0}"
+msgstr ""
+
+msgid "Element must not have children: {0}"
+msgstr ""
+
+msgid "Condition is already finished at </{0}>"
+msgstr ""
+
+msgid "<and> needs at least one child"
+msgstr ""
+
+msgid "<or> needs at least one child"
+msgstr ""
+
+msgid "<not> needs at least one child"
+msgstr ""
+
+msgid "Wrong closing tag {0} (</{1}> expected)"
+msgstr ""
+
+msgid "Condition {0} not yet finished"
+msgstr ""
+
+msgid "Group not yet evaluated"
+msgstr ""
+
+msgid "Collection must contain at least one condition"
+msgstr ""
+
+msgid "No ruleset has been selected!"
+msgstr ""
+
+msgid "No ruleset"
+msgstr ""
+
+msgid ""
+"Syntax exception in access ruleset:\n"
+"{0}"
+msgstr ""
+
+msgid ""
+"File not found:\n"
+"{0}"
+msgstr ""
+
+msgid ""
+"Problem when accessing a file:\n"
+"{0}"
+msgstr ""
+
+msgid "File not found:\n"
+msgstr ""
+
+msgid "Couldn''t find built-in ruleset {0}"
+msgstr ""
+
+msgid "height (m)"
+msgstr ""
+
+msgid "width (m)"
+msgstr ""
+
+msgid "length (m)"
+msgstr ""
+
+msgid "speed (km/h)"
+msgstr ""
+
+msgid "weight (t)"
+msgstr ""
+
+msgid "axleload (t)"
+msgstr ""
+
+msgid "Bookmark name"
+msgstr ""
+
+msgid "Bookmark name already exists!"
+msgstr ""
+
+msgid "Bookmark name must not contain ''{0}''!"
+msgstr ""
+
+msgid "Access class"
+msgstr ""
+
+msgid "Access class must not contain ''{0}''!"
+msgstr ""
+
+msgid "Access types"
+msgstr ""
+
+msgid "Vehicle properties"
+msgstr ""
+
+msgid "Road requirements"
+msgstr ""
+
+msgid "Max. incline up (%, pos.)"
+msgstr ""
+
+msgid "Maximum incline the vehicle can go up"
+msgstr ""
+
+msgid "Max. incline down (%, pos.)"
+msgstr ""
+
+msgid "Maximum incline the vehicle can go down"
+msgstr ""
+
+msgid "Surface blacklist"
+msgstr ""
+
+msgid ""
+"List of surfaces the vehicle cannot use, values are separated by semicolons "
+"(;)"
+msgstr ""
+
+msgid "max. tracktype grade"
+msgstr ""
+
+msgid "Worst tracktype (1-5) the vehicle can still use, 0 for none"
+msgstr ""
+
+msgid "Change bookmark"
+msgstr ""
+
+msgid "Edit access parameters"
+msgstr ""
+
+msgid "Graph View Dialog"
+msgstr ""
+
+msgid "Open the dialog for graph view configuration."
+msgstr ""
+
+msgid "default"
+msgstr ""
+
+msgid "end nodes"
+msgstr ""
+
+msgid "incline"
+msgstr ""
+
+msgid "Ruleset:"
+msgstr ""
+
+msgid "Parameters:"
+msgstr ""
+
+msgid "Coloring:"
+msgstr ""
+
+msgid "Create/update graph"
+msgstr ""
+
+msgid "Graphview"
+msgstr ""
+
+msgid "Settings for the Graphview plugin that visualizes routing graphs."
+msgstr ""
+
+msgid "Ruleset"
+msgstr ""
+
+msgid "Use built-in rulesets"
+msgstr ""
+
+msgid "External ruleset directory:"
+msgstr ""
+
+msgid "Select directory"
+msgstr ""
+
+msgid "Vehicle"
+msgstr ""
+
+msgid "Restore defaults"
+msgstr ""
+
+msgid "Visualization"
+msgstr ""
+
+msgid "Draw directions separately"
+msgstr ""
+
+msgid "Node color"
+msgstr ""
+
+msgid "Arrow color"
+msgstr ""
+
+msgid "Arrowhead fill color"
+msgstr ""
+
+msgid "Arrowhead placement"
+msgstr ""
+
+msgid "New bookmark"
+msgstr ""
+
+msgid "Really delete \"{0}\"?"
+msgstr ""
+
+msgid "Bookmark deletion"
+msgstr ""
+
+msgid ""
+"Really restore default bookmarks?\n"
+"All manually added or edited bookmarks will be lost!"
+msgstr ""
+
+msgid "Bookmark reset"
+msgstr ""
+
+msgid "Choose node color"
+msgstr ""
+
+msgid "Choose arrow color"
+msgstr ""
+
+msgid "Choose arrowhead fill color"
+msgstr ""
+
+msgid "Routing graph calculated by the GraphView plugin"
+msgstr ""
+
+msgid "GraphView layer is not mergable"
+msgstr ""
+
+msgid "graphview default node"
+msgstr ""
+
+msgid "graphview default segment"
+msgstr ""
+
+msgid "graphview arrowhead core"
+msgstr ""
+
+msgid ""
+"Weights must be given as positive decimal numbers with unit \"t\" or without "
+"unit."
+msgstr ""
+
+msgid ""
+"Lengths must be given as positive decimal numbers with unit \"m\", \"km\", "
+"\"mi\" or without unit.\n"
+"Alternatively, the format FEET'' INCHES\" can be used."
+msgstr ""
+
+msgid ""
+"Speeds should be given as numbers without unit or as numbers followed by "
+"\"mph\"."
+msgstr ""
+
+msgid ""
+"Inclines must be given as positive decimal numbers with followed by \"%\"."
+msgstr ""
+
+msgid "Tracktype grades must be given as integers between 0 and 5."
+msgstr ""
+
+msgid ""
+"Surface values must not contain any of the following characters: '','', '' "
+"'{' '',  '' '}' '', ''='', ''|''"
+msgstr ""
+
+msgid "Imagery XML Files"
+msgstr ""
+
+msgid "Save Imagery XML file"
+msgstr ""
+
+msgid "XML Imagery Bounds"
+msgstr ""
+
+msgid "Generate Imagery XML bounds for the selection"
+msgstr ""
+
+msgid "edit bounds for selected defaults"
+msgstr ""
+
+msgid "Download imagery XML bounds"
+msgstr ""
+
+msgid ""
+"Validating error in file {0}:\n"
+"{1}\n"
+"Do you want to continue without validating the file ?"
+msgstr ""
+
+msgid "Open Imagery XML file"
+msgstr ""
+
+msgid "Calibration Layer"
+msgstr ""
+
+msgid "A deprecated calibration geometry of {0} nodes by {1}"
+msgstr ""
+
+msgid "A calibration geometry of {0} nodes by {1}"
+msgstr ""
+
+msgid "Change Color"
+msgstr ""
+
+msgid "Deprecate Offset"
+msgstr ""
+
+msgid "Are you sure this imagery offset is wrong?"
+msgstr ""
+
+msgid "Are you sure this calibration geometry is aligned badly?"
+msgstr ""
+
+msgid "Warning: deprecation is basically irreversible!"
+msgstr ""
+
+msgid "To store imagery offsets you must be a registered OSM user."
+msgstr ""
+
+msgid ""
+"Please enter the reason why you mark this imagery offset as deprecated"
+msgstr ""
+
+msgid ""
+"Please enter the reason why you mark this calibration geometry as deprecated"
+msgstr ""
+
+msgid "Notifying the server of the deprecation..."
+msgstr ""
+
+msgid "Get Imagery Offset..."
+msgstr ""
+
+msgid "Download offsets for current imagery from a server"
+msgstr ""
+
+msgid ""
+"No data for this region. Please adjust imagery layer and upload an offset."
+msgstr ""
+
+msgid "Loading imagery offsets..."
+msgstr ""
+
+msgid "Error processing XML response: {0}"
+msgstr ""
+
+msgid "Offset"
+msgstr ""
+
+msgid "Imagery Offset Database"
+msgstr ""
+
+msgid "mm"
+msgstr ""
+
+msgid "cm"
+msgstr ""
+
+msgid "m"
+msgstr ""
+
+msgid "km"
+msgstr ""
+
+msgid "Calibration geometries"
+msgstr ""
+
+msgid "Deprecated offsets"
+msgstr ""
+
+msgid ""
+"The topmost imagery layer has been shifted to presumably match\n"
+"OSM data in the area. Please check that the offset is still valid\n"
+"by downloading GPS tracks and comparing them and OSM data to the imagery."
+msgstr ""
+
+msgid ""
+"A layer has been added with a calibration geometry. Hide data layers,\n"
+"find the corresponding feature on the imagery layer and move it accordingly."
+msgstr ""
+
+msgid "Deprecated by {0} on {1}"
+msgstr ""
+
+msgid "Created by {0} on {1}"
+msgstr ""
+
+msgid "Offset Information"
+msgstr ""
+
+msgid "Report this offset"
+msgstr ""
+
+msgid "You are to notify moderators of this offset. Why?"
+msgstr ""
+
+msgid "Reporting the offset..."
+msgstr ""
+
+msgid "An imagery offset of {0}"
+msgstr ""
+
+msgid "Imagery ID"
+msgstr ""
+
+msgid "A calibration geometry of {0} nodes"
+msgstr ""
+
+msgid "Determined right here"
+msgstr ""
+
+msgid "Determined {0} away"
+msgstr ""
+
+msgid "Reason"
+msgstr ""
+
+msgid "This entry has been reported."
+msgstr ""
+
+msgid "Server has rejected the request"
+msgstr ""
+
+msgid "Unable to connect to the server"
+msgstr ""
+
+msgid "Store Imagery Offset..."
+msgstr ""
+
+msgid ""
+"Upload an offset for current imagery (or calibration object geometry) to a "
+"server"
+msgstr ""
+
+msgid "Store calibration geometry"
+msgstr ""
+
+msgid "Store imagery offset"
+msgstr ""
+
+msgid ""
+"The selected object can be used as a calibration geometry. What do you "
+"intend to do?"
+msgstr ""
+
+msgid ""
+"The topmost imagery layer has no offset. Are you sure you want to upload "
+"this?"
+msgstr ""
+
+msgid ""
+"You are registering an imagery offset. Other users in this area will be able "
+"to use it for mapping.\n"
+"Please make sure it is as precise as possible, and describe a region this "
+"offset is applicable to."
+msgstr ""
+
+msgid ""
+"You are registering a calibration geometry. It should be the most precisely "
+"positioned object, with\n"
+"clearly visible boundaries on various satellite imagery. Please describe "
+"this object and its whereabouts."
+msgstr ""
+
+msgid "Uploading a new offset..."
+msgstr ""
+
+msgid "This string should be 3 to 200 letters long."
+msgstr ""
+
+msgid "Adjust imagery"
+msgstr ""
+
+msgid "Adjust the position of the selected imagery layer"
+msgstr ""
+
+msgid "Please select the imagery layer to adjust."
+msgstr ""
+
+msgid "Start adjusting"
+msgstr ""
+
+msgid "There are currently no imagery layer to adjust."
+msgstr ""
+
+msgid "No layers to adjust"
+msgstr ""
+
+msgid "Normal"
+msgstr ""
+
+msgid "Rotate 90"
+msgstr ""
+
+msgid "Rotate 180"
+msgstr ""
+
+msgid "Rotate 270"
+msgstr ""
+
+msgid "Previous image"
+msgstr ""
+
+msgid "Next image"
+msgstr ""
+
+msgid "Rotate left"
+msgstr ""
+
+msgid "Rotate image left"
+msgstr ""
+
+msgid "Rotate right"
+msgstr ""
+
+msgid "Rotate image right"
+msgstr ""
+
+msgid "WayPoint Image"
+msgstr ""
+
+msgid "Display non-geotagged photos"
+msgstr ""
+
+msgid "Imported Images"
+msgstr ""
+
+msgid "Image files (*.jpg, *.jpeg, *.png, *.gif)"
+msgstr ""
+
+msgid "Import vector graphics"
+msgstr ""
+
+msgid "Scale:"
+msgstr ""
+
+msgid "unit(s) = "
+msgstr ""
+
+msgid "Importing..."
+msgstr ""
+
+msgid "SVG files [ImportVec plugin] (*.svg)"
+msgstr ""
+
+msgid "Please open or create data layer before importing"
+msgstr ""
+
+msgid "InfoMode"
+msgstr ""
+
+msgid "GPX info mode"
+msgstr ""
+
+msgid ""
+"Move the mouse to show trackpoint info for current layer. Hold shift to "
+"highlight tracks"
+msgstr ""
+
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
+msgstr ""
+
+msgid "Connecting"
+msgstr ""
+
+msgid "Connected"
+msgstr ""
+
+msgid "no name"
+msgstr ""
+
+msgid "Live GPS"
+msgstr ""
+
+msgid "Show GPS data."
+msgstr ""
+
+msgid "Status"
+msgstr ""
+
+msgid "Way Info"
+msgstr ""
+
+msgid "Speed"
+msgstr ""
+
+msgid "Course"
+msgstr ""
+
+msgid "LiveGPS layer"
+msgstr ""
+
+msgid "Capture GPS Track"
+msgstr ""
+
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgstr ""
+
+msgid "Center Once"
+msgstr ""
+
+msgid "Center the LiveGPS layer to current position."
+msgstr ""
+
+msgid "Auto-Center"
+msgstr ""
+
+msgid "Continuously center the LiveGPS layer to current position."
+msgstr ""
+
+msgid "Open MapDust"
+msgstr ""
+
+msgid "MapDust bug reports"
+msgstr ""
+
+msgid "Activates the MapDust bug reporter plugin"
+msgstr ""
+
+msgid "Missing input data"
+msgstr ""
+
+msgid "Mapillary Images"
+msgstr ""
+
+msgid "Mapillary layer"
+msgstr ""
+
+msgid "Total images:"
+msgstr ""
+
+msgid "images"
+msgstr ""
+
+msgid "Mapillary"
+msgstr ""
+
+msgid "Create Mapillary layer"
+msgstr ""
+
+msgid "Start Mapillary layer"
+msgstr ""
+
+msgid "Download Mapillary images in current view"
+msgstr ""
+
+msgid "Export pictures"
+msgstr ""
+
+msgid "Export Mapillary pictures"
+msgstr ""
+
+msgid "Export images"
+msgstr ""
+
+msgid "Import pictures"
+msgstr ""
+
+msgid "Import local pictures"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer"
+msgstr ""
+
+msgid "Select pictures"
+msgstr ""
+
+msgid "Import pictures into sequence"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer in a sequence"
+msgstr ""
+
+msgid "Join mode"
+msgstr ""
+
+msgid "Join/unjoin pictures"
+msgstr ""
+
+msgid "Join Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures"
+msgstr ""
+
+msgid "Upload Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures."
+msgstr ""
+
+msgid "Walk mode"
+msgstr ""
+
+msgid "Start walk mode"
+msgstr ""
+
+msgid "Zoom to selected image"
+msgstr ""
+
+msgid "Zoom to the currently selected Mapillary image"
+msgstr ""
+
+msgid "Uploaded {0} images"
+msgstr ""
+
+msgid "Approve upload on the website"
+msgstr ""
+
+msgid "View in website"
+msgstr ""
+
+msgid "Copy key"
+msgstr ""
+
+msgid "Copy key tag"
+msgstr ""
+
+msgid "Edit on website"
+msgstr ""
+
+msgid "Export all images"
+msgstr ""
+
+msgid "Export selected sequence"
+msgstr ""
+
+msgid "Export selected images"
+msgstr ""
+
+msgid "Rewrite imported images"
+msgstr ""
+
+msgid "Select a folder"
+msgstr ""
+
+msgid "Explore"
+msgstr ""
+
+msgid "Select a directory"
+msgstr ""
+
+msgid "Speed limit"
+msgstr ""
+
+msgid "Give way"
+msgstr ""
+
+msgid "No entry"
+msgstr ""
+
+msgid "Intersection danger"
+msgstr ""
+
+msgid "Mandatory direction (any)"
+msgstr ""
+
+msgid "No turn"
+msgstr ""
+
+msgid "Uneven road"
+msgstr ""
+
+msgid "No parking"
+msgstr ""
+
+msgid "No overtaking"
+msgstr ""
+
+msgid "Pedestrian crossing"
+msgstr ""
+
+msgid "Years"
+msgstr ""
+
+msgid "Months"
+msgstr ""
+
+msgid "Days"
+msgstr ""
+
+msgid "Mapillary filter"
+msgstr ""
+
+msgid "Open Mapillary filter dialog"
+msgstr ""
+
+msgid "Downloaded images"
+msgstr ""
+
+msgid "Only images with signs"
+msgstr ""
+
+msgid "Choose signs"
+msgstr ""
+
+msgid "Mapillary history"
+msgstr ""
+
+msgid "Open Mapillary history dialog"
+msgstr ""
+
+msgid "Open Mapillary window"
+msgstr ""
+
+msgid "Mapillary dialog"
+msgstr ""
+
+msgid "Open Mapillary main dialog"
+msgstr ""
+
+msgid "Next picture"
+msgstr ""
+
+msgid "Shows the next picture in the sequence"
+msgstr ""
+
+msgid "Previous picture"
+msgstr ""
+
+msgid "Shows the previous picture in the sequence"
+msgstr ""
+
+msgid "Jump to red"
+msgstr ""
+
+msgid "Jumps to the picture at the other side of the red line"
+msgstr ""
+
+msgid "Jump to blue"
+msgstr ""
+
+msgid "Jumps to the picture at the other side of the blue line"
+msgstr ""
+
+msgid "Stops the walk."
+msgstr ""
+
+msgid "Play"
+msgstr ""
+
+msgid "Continues with the paused walk."
+msgstr ""
+
+msgid "Pause"
+msgstr ""
+
+msgid "Pauses the walk."
+msgstr ""
+
+msgid "Reverse buttons position when displaying images."
+msgstr ""
+
+msgid "Display hour when the picture was taken"
+msgstr ""
+
+msgid "Use 24 hour format"
+msgstr ""
+
+msgid "Move to picture''s location with next/previous buttons"
+msgstr ""
+
+msgid "Download mode: "
+msgstr ""
+
+msgid "Upload selected sequence"
+msgstr ""
+
+msgid "Delete after upload"
+msgstr ""
+
+msgid "Wait for full quality pictures"
+msgstr ""
+
+msgid "Follow selected image"
+msgstr ""
+
+msgid "Go forward"
+msgstr ""
+
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
+msgstr ""
+
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
+msgstr ""
+
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
+msgstr ""
+
+msgid "Downloading"
+msgstr ""
+
+msgid "Select mode"
+msgstr ""
+
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
+msgstr ""
+
+msgid "Downloading Mapillary images"
+msgstr ""
+
+msgid "Total Mapillary images: {0}"
+msgstr ""
+
+msgid "No images found"
+msgstr ""
+
+msgid "Finished upload"
+msgstr ""
+
+msgid "Uploading: {0}"
+msgstr ""
+
+msgid "Measured values"
+msgstr ""
+
+msgid "Open the measurement window."
+msgstr ""
+
+msgid "Reset current measurement results and delete measurement path."
+msgstr ""
+
+msgid "Path Length"
+msgstr ""
+
+msgid "Selection Length"
+msgstr ""
+
+msgid "Selection Area"
+msgstr ""
+
+msgid "Selection Radius"
+msgstr ""
+
+msgid "Angle"
+msgstr ""
+
+msgid "Angle between two selected Nodes"
+msgstr ""
+
+msgid "Layer to make measurements"
+msgstr ""
+
+msgid "measurement mode"
+msgstr ""
+
+msgid "Measurements"
+msgstr ""
+
+msgid "Merge overlap"
+msgstr ""
+
+msgid "Merge overlap of ways."
+msgstr ""
+
+msgid "Merge Overlap (combine)"
+msgstr ""
+
+msgid ""
+"<html>A role based relation membership was copied to all new ways.<br>You "
+"should verify this and correct it when necessary.</html>"
+msgstr ""
+
+msgid ""
+"<html>A relation membership was copied to all new ways.<br>You should verify "
+"this and correct it when necessary.</html>"
+msgstr ""
+
+msgid "Split way"
+msgstr ""
+
+msgid "Michigan Left"
+msgstr ""
+
+msgid "Adds no left turn for sets of 4 or 5 ways."
+msgstr ""
+
+msgid "Please select 4 or 5 ways to assign no left turns."
+msgstr ""
+
+msgid "Please select 4 ways that form a closed relation."
+msgstr ""
+
+msgid "Unable to order the ways. Please verify their directions"
+msgstr ""
+
+msgid "Create Michigan left turn restriction"
+msgstr ""
+
+msgid "Unable to find via nodes. Please check your selection"
+msgstr ""
+
+msgid "About Plugin"
+msgstr ""
+
+msgid "Native password manager plugin"
+msgstr ""
+
+msgid "No native password manager could be found!"
+msgstr ""
+
+msgid ""
+"Depending on your Operating System / Distribution, you may have to create a "
+"default keyring / wallet first."
+msgstr ""
+
+msgid "No thanks, use JOSM''s plain text preferences storage"
+msgstr ""
+
+msgid ""
+"Found sensitive data that is still saved in JOSM''s preference file (plain "
+"text)."
+msgstr ""
+
+msgid "Transfer to password manager and remove from preference file"
+msgstr ""
+
+msgid "No, just keep it"
+msgstr ""
+
+msgid "Close the dialog and discard all changes"
+msgstr ""
+
+msgid "Proceed and go to the next page"
+msgstr ""
+
+msgid "Finish"
+msgstr ""
+
+msgid "Confirm the setup and close this dialog"
+msgstr ""
+
+msgid "JOSM/OSM API/Username"
+msgstr ""
+
+msgid "JOSM/OSM API/Password"
+msgstr ""
+
+msgid "{0}/Username"
+msgstr ""
+
+msgid "{0}/Password"
+msgstr ""
+
+msgid "JOSM/Proxy/Username"
+msgstr ""
+
+msgid "JOSM/Proxy/Password"
+msgstr ""
+
+msgid "JOSM/OAuth/OSM API/Key"
+msgstr ""
+
+msgid "JOSM/OAuth/OSM API/Secret"
+msgstr ""
+
+msgid "Native Password Manager Plugin"
+msgstr ""
+
+msgid "The username and password is protected by {0}."
+msgstr ""
+
+msgid "username"
+msgstr ""
+
+msgid "password"
+msgstr ""
+
+msgid "proxy username"
+msgstr ""
+
+msgid "proxy password"
+msgstr ""
+
+msgid "oauth key"
+msgstr ""
+
+msgid "oauth secret"
+msgstr ""
+
+msgid ""
+"<br><strong>Warning:</strong> There may be sensitive data left in your "
+"preference file. ({0})"
+msgstr ""
+
+msgid "Save user and password ({0})"
+msgstr ""
+
+msgid "Plain text, JOSM default"
+msgstr ""
+
+msgid "Use {0}"
+msgstr ""
+
+msgid "Encrypt data with Windows logon credentials"
+msgstr ""
+
+msgid "The native password manager plugin detected {0} on your system."
+msgstr ""
+
+msgid "Days without mapping: {0}."
+msgstr ""
+
+msgid ""
+"(To miserably continue mapping, edit out no_more_mapping\n"
+"from {0})"
+msgstr ""
+
+msgid "Split by municipality"
+msgstr ""
+
+msgid "Split this data by municipality (admin_level=8)."
+msgstr ""
+
+msgid "Split by sector"
+msgstr ""
+
+msgid "Split this data by sector (admin_level=10)."
+msgstr ""
+
+msgid "Split by neighbourhood"
+msgstr ""
+
+msgid "Split this data by neighbourhood (admin_level=11)."
+msgstr ""
+
+msgid "Download open data"
+msgstr ""
+
+msgid "License URL not available: {0}"
+msgstr ""
+
+msgid "OpenData preferences"
+msgstr ""
+
+msgid "License Agreement"
+msgstr ""
+
+msgid "Accept"
+msgstr ""
+
+msgid "Refuse"
+msgstr ""
+
+msgid "I understand and accept these terms and conditions"
+msgstr ""
+
+msgid "View the full text of this license"
+msgstr ""
+
+msgid "I refuse these terms and conditions. Cancel download."
+msgstr ""
+
+msgid "Module bundled with opendata plugin"
+msgstr ""
+
+msgid ""
+"Please click on <strong>Download list</strong> to download and display a "
+"list of available modules."
+msgstr ""
+
+msgid ""
+"The following module has been downloaded <strong>successfully</strong>:"
+msgid_plural ""
+"The following {0} modules have been downloaded <strong>successfully</strong>:"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Downloading the following module has <strong>failed</strong>:"
+msgid_plural ""
+"Downloading the following {0} modules has <strong>failed</strong>:"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Modules"
+msgstr ""
+
+msgid "Accept the new module sites and close the dialog"
+msgstr ""
+
+msgid "Configure Module Sites"
+msgstr ""
+
+msgid "Download the list of available modules"
+msgstr ""
+
+msgid "Update modules"
+msgstr ""
+
+msgid "Update the selected modules"
+msgstr ""
+
+msgid "Please restart JOSM to activate the downloaded modules."
+msgstr ""
+
+msgid ""
+"All installed modules are up to date. JOSM does not have to download newer "
+"versions."
+msgstr ""
+
+msgid "Modules up to date"
+msgstr ""
+
+msgid "Configure the list of sites where modules are downloaded from"
+msgstr ""
+
+msgid "Add Open Data Module description URL."
+msgstr ""
+
+msgid "Edit Open Data Module description URL."
+msgstr ""
+
+msgid "Open Data Module description URL"
+msgstr ""
+
+msgid "Download OSM data corresponding to the current data set."
+msgstr ""
+
+msgid "Diff"
+msgstr ""
+
+msgid "Perform diff between current data set and existing OSM data."
+msgstr ""
+
+msgid "Tools"
+msgstr "साधने"
+
+msgid "Open tools menu for this data."
+msgstr ""
+
+msgid "Open the OpenData window."
+msgstr ""
+
+msgid "Raw data"
+msgstr ""
+
+msgid "OpenData Preferences"
+msgstr ""
+
+msgid ""
+"A special handler for various Open Data portals<br/><br/>Please read the "
+"Terms and Conditions of Use of each portal<br/>before any upload of data "
+"loaded by this plugin."
+msgstr ""
+
+msgid "General settings"
+msgstr ""
+
+msgid ""
+"Import only raw data (i.e. do not add/delete tags or replace them by "
+"standard OSM tags)"
+msgstr ""
+
+msgid "Overpass API server:"
+msgstr ""
+
+msgid "Overpass API server used to download OSM data"
+msgstr ""
+
+msgid "XAPI server:"
+msgstr ""
+
+msgid ""
+"XAPI server used to download OSM data when Overpass API is not available"
+msgstr ""
+
+msgid "Download modules"
+msgstr ""
+
+msgid "View summary"
+msgstr ""
+
+msgid "View full text"
+msgstr ""
+
+msgid ""
+"''Lambert CC 9 zones'' coordinates found with different zone codes for X and "
+"Y: "
+msgstr ""
+
+msgid "Downloading data..."
+msgstr ""
+
+msgid "OpenData XML files"
+msgstr ""
+
+msgid "File to load"
+msgstr ""
+
+msgid "7Zip Files"
+msgstr ""
+
+msgid "Reading 7Zip file..."
+msgstr ""
+
+msgid "Zip Files"
+msgstr ""
+
+msgid "Reading Zip file..."
+msgstr ""
+
+msgid "Cannot transform to WGS84"
+msgstr ""
+
+msgid ""
+"JOSM was unable to find a strict mathematical transformation between ''{0}'' "
+"and WGS84.<br /><br />Do you want to try a <i>lenient</i> method, which will "
+"perform a non-precise transformation (<b>with location errors up to 1 "
+"km</b>) ?<br/><br/>If so, <b>do NOT upload</b> such data to OSM !"
+msgstr ""
+
+msgid "Try lenient method"
+msgstr ""
+
+msgid "GML files"
+msgstr ""
+
+msgid "KML/KMZ files"
+msgstr ""
+
+msgid "MapInfo files"
+msgstr ""
+
+msgid "Shapefiles"
+msgstr ""
+
+msgid ""
+"Unable to detect Coordinate Reference System.\n"
+"Would you like to fallback to ESPG:4326 (WGS 84) ?"
+msgstr ""
+
+msgid "Warning: CRS not found"
+msgstr ""
+
+msgid "Unable to detect CRS !"
+msgstr ""
+
+msgid "Unable to find a data store for file {0}"
+msgstr ""
+
+msgid "Loading shapefile ({0} features)"
+msgstr ""
+
+msgid "CSV files"
+msgstr ""
+
+msgid "ODS files"
+msgstr ""
+
+msgid "No valid coordinates have been found."
+msgstr ""
+
+msgid "Invalid file. Bad length on line {0}. Expected {1} columns, got {2}."
+msgstr ""
+
+msgid "XLS files"
+msgstr ""
+
+msgid "View OSM Wiki page"
+msgstr ""
+
+msgid "Launch browser to the OSM Wiki page of the selected data set"
+msgstr ""
+
+msgid "View Local Portal page"
+msgstr ""
+
+msgid "Launch browser to the local portal page of the selected data set"
+msgstr ""
+
+msgid "View National Portal page"
+msgstr ""
+
+msgid "Launch browser to the national portal page of the selected data set"
+msgstr ""
+
+msgid "View License"
+msgstr ""
+
+msgid "Launch browser to the license page of the selected data set"
+msgstr ""
+
+msgid "View License (summary)"
+msgstr ""
+
+msgid "Launch browser to the summary license page of the selected data set"
+msgstr ""
+
+msgid "View the license of the selected data set"
+msgstr ""
+
+msgid ""
+"Warning: Cannot download module ''{0}''. Its download link is not known. "
+"Skipping download."
+msgstr ""
+
+msgid ""
+"Warning: Cannot download module ''{0}''. Its download link ''{1}'' is not a "
+"valid URL. Skipping download."
+msgstr ""
+
+msgid "Downloading Module {0}..."
+msgstr ""
+
+msgid "An error occurred in module {0}"
+msgstr ""
+
+msgid "Last module update more than {0} days ago."
+msgstr ""
+
+msgid "Click to update the activated modules"
+msgstr ""
+
+msgid "Click to skip updating the activated modules"
+msgstr ""
+
+msgid ""
+"Skipping module update after elapsed update interval. Automatic update at "
+"startup is disabled."
+msgstr ""
+
+msgid ""
+"Running module update after elapsed update interval. Automatic update at "
+"startup is disabled."
+msgstr ""
+
+msgid "Could not load module {0}. Delete from preferences?"
+msgstr ""
+
+msgid "loading module ''{0}'' (version {1})"
+msgstr ""
+
+msgid ""
+"<html>Could not load module {0} because the module<br>main class ''{1}'' was "
+"not found.<br>Delete from preferences?</html>"
+msgstr ""
+
+msgid "Loading modules ..."
+msgstr ""
+
+msgid "Checking module preconditions..."
+msgstr ""
+
+msgid "Loading module ''{0}''..."
+msgstr ""
+
+msgid "JOSM could not find information about the following module:"
+msgid_plural "JOSM could not find information about the following modules:"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "The module is not going to be loaded."
+msgid_plural "The modules are not going to be loaded."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Updating the following module has failed:"
+msgid_plural "Updating the following modules has failed:"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Module update failed"
+msgstr ""
+
+msgid "Warning: failed to download module information list"
+msgstr ""
+
+msgid "Disable module"
+msgstr ""
+
+msgid "Click to delete the module ''{0}''"
+msgstr ""
+
+msgid "Keep module"
+msgstr ""
+
+msgid "Click to keep the module ''{0}''"
+msgstr ""
+
+msgid "Warning: failed to delete outdated module ''{0}''."
+msgstr ""
+
+msgid ""
+"Warning: failed to install already downloaded module ''{0}''. Skipping "
+"installation. JOSM is still going to load the old module version."
+msgstr ""
+
+msgid ""
+"Warning: failed to install module ''{0}'' from temporary download file "
+"''{1}''. Renaming failed."
+msgstr ""
+
+msgid ""
+"Do not ask again and remember my decision (go to Preferences->Modules to "
+"change it later)"
+msgstr ""
+
+msgid "The module file ''{0}'' does not include a Manifest."
+msgstr ""
+
+msgid "Invalid URL ''{0}'' in module {1}"
+msgstr ""
+
+msgid "<b>Module provided by an external source:</b> {0}"
+msgstr ""
+
+msgid "Failed to create module information from manifest for module ''{0}''"
+msgstr ""
+
+msgid "Illegal entry in module list."
+msgstr ""
+
+msgid "Reading local module information.."
+msgstr ""
+
+msgid "Processing module site cache files..."
+msgstr ""
+
+msgid ""
+"Warning: Failed to scan file ''{0}'' for module information. Skipping."
+msgstr ""
+
+msgid "Processing module site cache icon files..."
+msgstr ""
+
+msgid "Processing module files..."
+msgstr ""
+
+msgid "Download module list..."
+msgstr ""
+
+msgid "Downloading module list from ''{0}''"
+msgstr ""
+
+msgid ""
+"Warning: failed to create module directory ''{0}''. Cannot cache module list "
+"from module site ''{1}''."
+msgstr ""
+
+msgid "Writing module list to local cache ''{0}''"
+msgstr ""
+
+msgid "Parsing module list from site ''{0}''"
+msgstr ""
+
+msgid ""
+"Failed to parse module list document from site ''{0}''. Skipping site. "
+"Exception was: {1}"
+msgstr ""
+
+msgid "Processing module list from site ''{0}''"
+msgstr ""
+
+msgid "Open Visible..."
+msgstr ""
+
+msgid "Open only files that are visible in current view."
+msgstr ""
+
+msgid "No view open - cannot determine boundaries!"
+msgstr ""
+
+msgid "Unknown file extension: {0}"
+msgstr ""
+
+msgid "Parsing file \"{0}\" failed"
+msgstr ""
+
+msgid "Osmarender"
+msgstr ""
+
+msgid ""
+"Firefox not found. Please set firefox executable in the Map Settings page of "
+"the preferences."
+msgstr ""
+
+msgid "Firefox executable"
+msgstr ""
+
+msgid "OSM Server Files pbf compressed"
+msgstr ""
+
+msgid "Download PBF"
+msgstr ""
+
+msgid "Invalid changeset id: {0}"
+msgstr ""
+
+msgid "Invalid timestamp: {0}"
+msgstr ""
+
+msgid "Invalid DenseNodes key/values table"
+msgstr ""
+
+msgid "Reading OSM data..."
+msgstr ""
+
+msgid "Transform error: Min X must be smaller than max"
+msgstr ""
+
+msgid "Transform error: Min Y must be smaller than max"
+msgstr ""
+
+msgid "Transform error: Points too close"
+msgstr ""
+
+msgid "Transform error: Unsupported variant."
+msgstr ""
+
+msgid "Transform error: Unsupported orientation"
+msgstr ""
+
+msgid "Finished"
+msgstr ""
+
+msgid "Prefs"
+msgstr ""
+
+msgid "Load file..."
+msgstr ""
+
+msgid "Place"
+msgstr ""
+
+msgid "Show target"
+msgstr ""
+
+msgid "Take X and Y from selected node"
+msgstr ""
+
+msgid "Debug info"
+msgstr ""
+
+msgid "Merge close nodes"
+msgstr ""
+
+msgid "Remove objects smaller than"
+msgstr ""
+
+msgid "Remove objects larger than"
+msgstr ""
+
+msgid "Only this color"
+msgstr ""
+
+msgid "Remove parallel lines"
+msgstr ""
+
+msgid "Take only first X paths"
+msgstr ""
+
+msgid "Color/width change"
+msgstr ""
+
+msgid "Shape closed"
+msgstr ""
+
+msgid "Single segments"
+msgstr ""
+
+msgid "Orthogonal shapes"
+msgstr ""
+
+msgid "Import settings"
+msgstr ""
+
+msgid "Introduce separate layers for:"
+msgstr ""
+
+msgid "Bind to coordinates"
+msgstr ""
+
+msgid "Projection:"
+msgstr ""
+
+msgid "Bottom left (min) corner:"
+msgstr ""
+
+msgid "PDF X and Y"
+msgstr ""
+
+msgid "East and North"
+msgstr ""
+
+msgid "Top right (max) corner:"
+msgstr ""
+
+msgid "Projection Preferences"
+msgstr ""
+
+msgid "Close the dialog and apply projection preferences"
+msgstr ""
+
+msgid "Close the dialog, discard projection preference changes"
+msgstr ""
+
+msgid "Loading..."
+msgstr ""
+
+msgid "PDF file preview"
+msgstr ""
+
+msgid "Loaded"
+msgstr ""
+
+msgid "Imported PDF: "
+msgstr ""
+
+msgid "Please select exactly one node."
+msgstr ""
+
+msgid "PDF files"
+msgstr ""
+
+msgid "OSM files"
+msgstr ""
+
+msgid "Preparing"
+msgstr ""
+
+msgid "Tolerance is not a number"
+msgstr ""
+
+msgid "Could not parse color"
+msgstr ""
+
+msgid "Could not parse max path count"
+msgstr ""
+
+msgid "Parsing file"
+msgstr ""
+
+msgid "File not found."
+msgstr ""
+
+msgid "Error while parsing: {0}"
+msgstr ""
+
+msgid "Removing parallel segments"
+msgstr ""
+
+msgid "Max distance is not a number"
+msgstr ""
+
+msgid "Joining nodes"
+msgstr ""
+
+msgid "Joining adjacent segments"
+msgstr ""
+
+msgid "Removing small objects"
+msgstr ""
+
+msgid "Removing large objects"
+msgstr ""
+
+msgid "Finalizing layers"
+msgstr ""
+
+msgid "Please set a projection."
+msgstr ""
+
+msgid "Could not parse numbers. Please check."
+msgstr ""
+
+msgid "Building JOSM layer"
+msgstr ""
+
+msgid "Postprocessing layer"
+msgstr ""
+
+msgid "Saving to file."
+msgstr ""
+
+msgid " Writing to file"
+msgstr ""
+
+msgid "Building JOSM layer."
+msgstr ""
+
+msgid " "
+msgstr ""
+
+msgid "Import PDF file"
+msgstr ""
+
+msgid "Import PDF file."
+msgstr ""
+
+msgid "Import PDF"
+msgstr ""
+
+msgid " {0} objects so far"
+msgstr ""
+
+msgid "Parsing PDF"
+msgstr ""
+
+msgid "Encrypted documents not supported."
+msgstr ""
+
+msgid "The PDF file must have exactly one page."
+msgstr ""
+
+msgid "Read error: "
+msgstr ""
+
+msgid "Write error: "
+msgstr ""
+
+msgid "Write coordinates to image header"
+msgstr ""
+
+msgid ""
+"Write position information into the exif header of the following files:"
+msgstr ""
+
+msgid "settings"
+msgstr ""
+
+msgid "keep backup files"
+msgstr ""
+
+msgid "change file modification time:"
+msgstr ""
+
+msgid "to gps time"
+msgstr ""
+
+msgid "to previous value (unchanged mtime)"
+msgstr ""
+
+msgid "Photo Geotagging Plugin"
+msgstr ""
+
+msgid "Writing position information to image files..."
+msgstr ""
+
+msgid "Could not read mtime."
+msgstr ""
+
+msgid "Could not write mtime."
+msgstr ""
+
+msgid "File could not be deleted!"
+msgstr ""
+
+msgid "Could not rename file!"
+msgstr ""
+
+msgid "Could not rename file {0} to {1}!"
+msgstr ""
+
+msgid "<html><h3>There are old backup files in the image directory!</h3>"
+msgstr ""
+
+msgid "Override old backup files?"
+msgstr ""
+
+msgid "Keep old backups and continue"
+msgstr ""
+
+msgid "Override"
+msgstr ""
+
+msgid "Could not delete temporary file!"
+msgstr ""
+
+msgid "Test failed: Could not read mtime."
+msgstr ""
+
+msgid "Test failed: Could not write mtime."
+msgstr ""
+
+msgid "Adjust photos"
+msgstr ""
+
+msgid "Move and position photos"
+msgstr ""
+
+msgid ""
+"Click+drag photo, shift+click to position photo, control+click to set "
+"direction."
+msgstr ""
+
+msgid "Please load some photos."
+msgstr ""
+
+msgid "New layer for untagged images"
+msgstr ""
+
+msgid "Untagged Images"
+msgstr ""
+
+msgid "Do you want to save current calibration of layer {0}?"
+msgstr ""
+
+msgid "Load Picture Calibration..."
+msgstr ""
+
+msgid "Loads calibration data from a file"
+msgstr ""
+
+msgid "Loading file failed: {0}"
+msgstr ""
+
+msgid "Load World File Calibration..."
+msgstr ""
+
+msgid "Loads calibration data from a world file"
+msgstr ""
+
+msgid "Reset Calibration"
+msgstr ""
+
+msgid "Reset calibration"
+msgstr ""
+
+msgid "Calibration reset"
+msgstr ""
+
+msgid "Save Picture Calibration..."
+msgstr ""
+
+msgid "Saves calibration data to a file"
+msgstr ""
+
+msgid "Saving file failed: {0}"
+msgstr ""
+
+msgid "New picture layer from clipboard"
+msgstr ""
+
+msgid "Supported image files, *.zip, *.kml"
+msgstr ""
+
+msgid "New picture layer from file..."
+msgstr ""
+
+msgid ""
+"KML calibration is in beta stage and may produce incorrectly calibrated "
+"layers!\n"
+"Please use {0} to upload your KMLs that were calibrated incorrectly."
+msgstr ""
+
+msgid "PicLayer move"
+msgstr ""
+
+msgid "Moved"
+msgstr ""
+
+msgid "Drag to move the picture"
+msgstr ""
+
+msgid "PicLayer rotate"
+msgstr ""
+
+msgid "Rotated"
+msgstr ""
+
+msgid "Drag to rotate the picture"
+msgstr ""
+
+msgid "PicLayer scale X"
+msgstr ""
+
+msgid "Scaled by X"
+msgstr ""
+
+msgid "Drag to scale the picture in the X Axis"
+msgstr ""
+
+msgid "PicLayer scale"
+msgstr ""
+
+msgid "Scaled"
+msgstr ""
+
+msgid "Drag to scale the picture in the X and Y Axis"
+msgstr ""
+
+msgid "PicLayer scale Y"
+msgstr ""
+
+msgid "Scaled by Y"
+msgstr ""
+
+msgid "Drag to scale the picture in the Y Axis"
+msgstr ""
+
+msgid "PicLayer shear"
+msgstr ""
+
+msgid "Sheared"
+msgstr ""
+
+msgid "Drag to shear the picture"
+msgstr ""
+
+msgid "PicLayer Move point"
+msgstr ""
+
+msgid "Point added/moved"
+msgstr ""
+
+msgid "Drag or create point on the picture"
+msgstr ""
+
+msgid "PicLayer Remove point"
+msgstr ""
+
+msgid "Point removed"
+msgstr ""
+
+msgid "Remove point on the picture"
+msgstr ""
+
+msgid "PicLayer Transform point"
+msgstr ""
+
+msgid "Point transformed"
+msgstr ""
+
+msgid "Transform point on the picture"
+msgstr ""
+
+msgid "PicLayer: {0}"
+msgstr ""
+
+msgid "Calibration Files"
+msgstr ""
+
+msgid "Could not find the map object."
+msgstr ""
+
+msgid "PicLayer failed to load or import the image."
+msgstr ""
+
+msgid "Nothing in clipboard"
+msgstr ""
+
+msgid "The clipboard data is not an image"
+msgstr ""
+
+msgid "Warning: failed to handle zip file ''{0}''. Exception was: {1}"
+msgstr ""
+
+msgid "A calibration file associated to the picture file was found: {0}\n"
+msgstr ""
+
+msgid ""
+"Set \"{0}\" to yes/no/ask in the preferences\n"
+"to control the autoloading of calibration files."
+msgstr ""
+
+msgid "Do you want to apply it ?"
+msgstr ""
+
+msgid "Load calibration file ?"
+msgstr ""
+
+msgid "It will be applied automatically."
+msgstr ""
+
+msgid ""
+"Also, from now on, calibration files will always be loaded automatically."
+msgstr ""
+
+msgid "Point info"
+msgstr ""
+
+msgid "Point info."
+msgstr ""
+
+msgid "Connecting server"
+msgstr ""
+
+msgid "PointInfo"
+msgstr ""
+
+msgid "Data not available."
+msgstr ""
+
+msgid "Add new address point"
+msgstr ""
+
+msgid "Tags copied to clipboard."
+msgstr ""
+
+msgid "New address point added."
+msgstr ""
+
+msgid "Download Osmosis poly"
+msgstr ""
+
+msgid "Reading polygon filter file..."
+msgstr ""
+
+msgid "Error reading poly file: {0}"
+msgstr ""
+
+msgid "The file must begin with a polygon name"
+msgstr ""
+
+msgid "There are less than 2 points in an area"
+msgstr ""
+
+msgid "A polygon coordinate line must contain exactly 2 numbers"
+msgstr ""
+
+msgid "Unable to parse {0} as a number"
+msgstr ""
+
+msgid "Invalid coordinates were found: {0}, {1}"
+msgstr ""
+
+msgid "{0} points were outside world bounds and were moved"
+msgstr ""
+
+msgid "Osmosis polygon filter files"
+msgstr ""
+
+msgid "Print..."
+msgstr ""
+
+msgid "Print the map"
+msgstr ""
+
+msgid "Print the Map"
+msgstr ""
+
+msgid "Printer"
+msgstr ""
+
+msgid "Media"
+msgstr ""
+
+msgid "Orientation"
+msgstr ""
+
+msgid "Printer settings"
+msgstr ""
+
+msgid "Scale"
+msgstr ""
+
+msgid "Resolution"
+msgstr ""
+
+msgid "Map information"
+msgstr ""
+
+msgid "Map Preview"
+msgstr ""
+
+msgid "Zoom To Page"
+msgstr ""
+
+msgid "Zoom To Actual Size"
+msgstr ""
+
+msgid "Print"
+msgstr ""
+
+msgid "Printing has been cancelled."
+msgstr ""
+
+msgid "Printing stopped"
+msgstr ""
+
+msgid "Printing has failed."
+msgstr ""
+
+msgid "Proj4J: {0} selected"
+msgstr ""
+
+msgid "Selected: {0}"
+msgstr ""
+
+msgid "Proj4J Plugin"
+msgstr ""
+
+msgid "Code"
+msgstr ""
+
+msgid "added"
+msgstr ""
+
+msgid "Public Transport: Enable GTFSStops"
+msgstr ""
+
+msgid "Public Transport: Catch GTFS stops"
+msgstr ""
+
+msgid "skipped"
+msgstr ""
+
+msgid "Public Transport: Disable GTFS"
+msgstr ""
+
+msgid "Create Stops from GTFS ..."
+msgstr ""
+
+msgid "Create Stops from a GTFS file"
+msgstr ""
+
+msgid "Select GTFS file (stops.txt)"
+msgstr ""
+
+msgid "File \"{0}\" does not exist"
+msgstr ""
+
+msgid "IOException \"{0}\" occurred"
+msgstr ""
+
+msgid ""
+"There exists no dataset. Try to download data from the server or open an OSM "
+"file."
+msgstr ""
+
+msgid "No data found"
+msgstr ""
+
+msgid "The GTFS file was empty."
+msgstr ""
+
+msgid "Create Stops from GTFS"
+msgstr ""
+
+msgid "GTFS-Stops"
+msgstr ""
+
+msgid "Type of stops to add"
+msgstr ""
+
+msgid "Time on your GPS device"
+msgstr ""
+
+msgid "HH:MM:SS.sss"
+msgstr ""
+
+msgid "Time on your stopwatch"
+msgstr ""
+
+msgid "Time window"
+msgstr ""
+
+msgid "seconds"
+msgstr ""
+
+msgid "Move Threshold"
+msgstr ""
+
+msgid "Suggest Stops"
+msgstr ""
+
+msgid "Find"
+msgstr ""
+
+msgid "Show"
+msgstr ""
+
+msgid "Mark"
+msgstr ""
+
+msgid "Catch"
+msgstr ""
+
+msgid "Join"
+msgstr ""
+
+msgid "Enable"
+msgstr ""
+
+msgid "Can''t parse a time from this string."
+msgstr ""
+
+msgid "Invalid value"
+msgstr ""
+
+msgid "moved"
+msgstr ""
+
+msgid "Public Transport: Join GTFS stops"
+msgstr ""
+
+msgid "Id"
+msgstr ""
+
+msgid "State"
+msgstr ""
+
+msgid "pending"
+msgstr ""
+
+msgid "outside"
+msgstr ""
+
+msgid "[incomplete]"
+msgstr ""
+
+msgid "[empty way]"
+msgstr ""
+
+msgid "[ID] {0}"
+msgstr ""
+
+msgid "[gap]"
+msgstr ""
+
+msgid " [ID] {0}"
+msgstr ""
+
+msgid "Route patterns ..."
+msgstr ""
+
+msgid "Edit Route patterns for public transport"
+msgstr ""
+
+msgid "Route Patterns"
+msgstr ""
+
+msgid "Overview"
+msgstr ""
+
+msgid "Itinerary"
+msgstr ""
+
+msgid "Stops"
+msgstr ""
+
+msgid "Meta"
+msgstr ""
+
+msgid "Existing route patterns:"
+msgstr ""
+
+msgid "Reflect"
+msgstr ""
+
+msgid "Required tags:"
+msgstr ""
+
+msgid "Common tags:"
+msgstr ""
+
+msgid "Additional tags:"
+msgstr ""
+
+msgid "Add a new Tag"
+msgstr ""
+
+msgid "Name/Id"
+msgstr ""
+
+msgid "Ref"
+msgstr ""
+
+msgid "Stops are possible on the"
+msgstr ""
+
+msgid "right hand side"
+msgstr ""
+
+msgid "left hand side"
+msgstr ""
+
+msgid "Maximum distance from route"
+msgstr ""
+
+msgid "Public Transport: Change stop type"
+msgstr ""
+
+msgid "Create Stops from GPX ..."
+msgstr ""
+
+msgid "Create Stops from a GPX file"
+msgstr ""
+
+msgid "Select GPX file"
+msgstr ""
+
+msgid "The GPX file contained no tracks or waypoints."
+msgstr ""
+
+msgid "Create Stops from GPX"
+msgstr ""
+
+msgid "Tracks in this GPX file:"
+msgstr ""
+
+msgid "Detach"
+msgstr ""
+
+msgid "implicit"
+msgstr ""
+
+msgid ""
+"The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
+"has trackpoints."
+msgstr ""
+
+msgid "GPX File Trouble"
+msgstr ""
+
+msgid "unnamed"
+msgstr ""
+
+msgid "Public Transport: Add track stop"
+msgstr ""
+
+msgid "Public Transport: Delete track stop"
+msgstr ""
+
+msgid "Public Transport: Detach track stop list"
+msgstr ""
+
+msgid "Public Transport: Edit track stop list"
+msgstr ""
+
+msgid "Public Transport: Relocate nodes in track stoplist"
+msgstr ""
+
+msgid "Public Transport: sort track stop list"
+msgstr ""
+
+msgid "Public Transport: Suggest stops"
+msgstr ""
+
+msgid "Stopname"
+msgstr ""
+
+msgid "Public Transport: Detach waypoints"
+msgstr ""
+
+msgid "Public Transport: Disable waypoints"
+msgstr ""
+
+msgid "Public Transport: Enable waypoints"
+msgstr ""
+
+msgid "Public Transport: Edit waypoint name"
+msgstr ""
+
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
+msgid "Relation Toolbox"
+msgstr ""
+
+msgid "Open relation/multipolygon editor panel"
+msgstr ""
+
+msgid "Specify role"
+msgstr ""
+
+msgid "Change relation member roles to {0}"
+msgstr ""
+
+msgid "Create administrative boundary relations"
+msgstr ""
+
+msgid "Add tags boundary and admin_level to boundary relation ways"
+msgstr ""
+
+msgid "Move area tags from contour to relation"
+msgstr ""
+
+msgid "When moving tags, consider even non-repeating ones"
+msgstr ""
+
+msgid "Always split ways of neighbouring multipolygons"
+msgstr ""
+
+msgid "Change role"
+msgstr ""
+
+msgid "Enter role for selected members"
+msgstr ""
+
+msgid "Relation Toolbox: {0}"
+msgstr ""
+
+msgid "another..."
+msgstr ""
+
+msgid "Add/remove members from the chosen relation"
+msgstr ""
+
+msgid "Clear the chosen relation"
+msgstr ""
+
+msgid "Create a multipolygon from selected objects"
+msgstr ""
+
+msgid "Create multipolygons from rings"
+msgstr ""
+
+msgid "Move tags from ways to relation"
+msgstr ""
+
+msgid "Enter admin level and name for the border relation:"
+msgstr ""
+
+msgid "Admin level"
+msgstr ""
+
+msgid "Create a relation from selected objects"
+msgstr ""
+
+msgid "Choose a type for the relation:"
+msgstr ""
+
+msgid "Delete relation"
+msgstr ""
+
+msgid "Download incomplete members for the chosen relation"
+msgstr ""
+
+msgid "Download referrers"
+msgstr ""
+
+msgid "Download referrers for the chosen relation and its members."
+msgstr ""
+
+msgid "Duplicate relation"
+msgstr ""
+
+msgid "Open relation editor for the chosen relation"
+msgstr ""
+
+msgid "Find a relation"
+msgstr ""
+
+msgid "Reconstruct polygon"
+msgstr ""
+
+msgid "Multipolygon must consist only of ways"
+msgstr ""
+
+msgid "Reconstruction of polygons can be done only from outer ways"
+msgstr ""
+
+msgid "Reconstruct polygons from relation {0}"
+msgstr ""
+
+msgid "Reconstruct route"
+msgstr ""
+
+msgid "Open relation wiki page"
+msgstr ""
+
+msgid "Select relation in main selection."
+msgstr ""
+
+msgid "Fix roles of the chosen relation members"
+msgstr ""
+
+msgid "Complete multipolygon for way {0}"
+msgstr ""
+
+msgid "Node without ''house'' role found"
+msgstr ""
+
+msgid "Way without ''house'' or ''street'' role found"
+msgstr ""
+
+msgid "Relation without ''house'' role found"
+msgstr ""
+
+msgid "Relation does not have name"
+msgstr ""
+
+msgid "Relation has streets with different names"
+msgstr ""
+
+msgid "fix associatedStreet relation"
+msgstr ""
+
+msgid "Relation without ''subarea'' role found"
+msgstr ""
+
+msgid "Node without ''label'' or ''admin_centre'' role found"
+msgstr ""
+
+msgid "Way without ''inner'' or ''outer'' role found"
+msgstr ""
+
+msgid "Node without ''stop'' or ''platform'' role found"
+msgstr ""
+
+msgid "Way platform without ''platform'' role found"
+msgstr ""
+
+msgid "Revert changeset fully"
+msgstr ""
+
+msgid "Revert selection only"
+msgstr ""
+
+msgid "Revert selection and restore deleted objects"
+msgstr ""
+
+msgid "Revert changeset"
+msgstr ""
+
+msgid "Revert"
+msgstr ""
+
+msgid "Enter the ID of the changeset that should be reverted"
+msgstr ""
+
+msgid "Reverted changeset"
+msgstr ""
+
+msgid "It is not allowed to revert changeset from {0}"
+msgstr ""
+
+msgid "Downloading objects history"
+msgstr ""
+
+msgid "Missing merge target for {0} with id {1}"
+msgstr ""
+
+msgid "Objects history"
+msgstr ""
+
+msgid "History reverter"
+msgstr ""
+
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
+msgid "Preparing history data..."
+msgstr ""
+
+msgid "Remote Control has been asked to revert a changeset."
+msgstr ""
+
+msgid "Reverting..."
+msgstr ""
+
+msgid ""
+"This changeset has objects that are not present in current dataset.\n"
+"It is needed to download them before reverting. Do you want to continue?"
+msgstr ""
+
+msgid "Confirm"
+msgstr ""
+
+msgid "Fetching missing primitives"
+msgstr ""
+
+msgid "Downloading changeset"
+msgstr ""
+
+msgid "See {0}"
+msgstr ""
+
+msgid "Revert changeset #{0}"
+msgstr ""
+
+msgid ""
+"Warning: unsupported start element ''{0}'' in changeset content at position "
+"({1},{2}). Skipping."
+msgstr ""
+
+msgid ""
+"Warning: unsupported end element ''{0}'' in changeset content at position "
+"({1},{2}). Skipping."
+msgstr ""
+
+msgid "Road Sign Plugin"
+msgstr ""
+
+msgid "signs"
+msgstr ""
+
+msgid "Change Properties"
+msgstr ""
+
+msgid "Country preset:"
+msgstr ""
+
+msgid "Show all signs"
+msgstr ""
+
+msgid "Show a selection of the most useful signs"
+msgstr ""
+
+msgid "Belgium"
+msgstr ""
+
+msgid "Spain"
+msgstr ""
+
+msgid "Germany"
+msgstr ""
+
+msgid "Poland"
+msgstr ""
+
+msgid "Slovakia"
+msgstr ""
+
+msgid "Roadsign tagging"
+msgstr ""
+
+msgid "Add tags by clicking on road signs"
+msgstr ""
+
+msgid "Roadsigns plugin: open dialog"
+msgstr ""
+
+msgid "custom"
+msgstr ""
+
+msgid "Could not read tagging preset source: ''{0}''"
+msgstr ""
+
+msgid "Error parsing tagging preset from ''{0}'':\n"
+msgstr ""
+
+msgid "Sign {0}"
+msgstr ""
+
+msgid "Additional sign {0}"
+msgstr ""
+
+msgid "Edit relation"
+msgstr ""
+
+msgid "Edit relations"
+msgstr ""
+
+msgid "No relation is selected"
+msgstr ""
+
+msgid "Remove node ''{0}'' at position {1} from relation ''{2}''"
+msgstr ""
+
+msgid "Remove way ''{0}'' at position {1} from relation ''{2}''"
+msgstr ""
+
+msgid "Remove relation ''{0}'' at position {1} from relation ''{2}''"
+msgstr ""
+
+msgid "routing active route"
+msgstr ""
+
+msgid "routing inactive route"
+msgstr ""
+
+msgid "Routing"
+msgstr ""
+
+msgid "Click to add destination."
+msgstr ""
+
+msgid "Click and drag to move destination"
+msgstr ""
+
+msgid "Click to remove destination"
+msgstr ""
+
+msgid "Open a list of routing nodes"
+msgstr ""
+
+msgid "Add routing layer"
+msgstr ""
+
+msgid "Criteria"
+msgstr ""
+
+msgid "Shortest"
+msgstr ""
+
+msgid "Fastest"
+msgstr ""
+
+msgid "Ignore oneways"
+msgstr ""
+
+msgid "Reverse route"
+msgstr ""
+
+msgid "Clear route"
+msgstr ""
+
+msgid "Reconstruct Graph"
+msgstr ""
+
+msgid "Routing Plugin Preferences"
+msgstr ""
+
+msgid "Configure routing preferences."
+msgstr ""
+
+msgid "Speed (Km/h)"
+msgstr ""
+
+msgid "Weight"
+msgstr ""
+
+msgid "Enter weight values"
+msgstr ""
+
+msgid "New value for {0}"
+msgstr ""
+
+msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
+msgstr ""
+
+msgid "Proxy Authentication Required"
+msgstr ""
+
+msgid ""
+"<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
+"is stored in plain text in the JOSM preferences file. </p></body></html>"
+msgstr ""
+
+msgid "Enter credentials for Separate Data Store API"
+msgstr ""
+
+msgid "Please enter the user name of your SDS account"
+msgstr ""
+
+msgid "Please enter the password of your SDS account"
+msgstr ""
+
+msgid ""
+"Authenticating at the SDS API ''{0}'' failed. Please enter a valid username "
+"and a valid password."
+msgstr ""
+
+msgid "SDS data file"
+msgstr ""
+
+msgid "Load..."
+msgstr ""
+
+msgid "Load separate data store data from a file."
+msgstr ""
+
+msgid "Loading files"
+msgstr ""
+
+msgid "SDS"
+msgstr ""
+
+msgid "Information about SDS."
+msgstr ""
+
+msgid "About SDS..."
+msgstr ""
+
+msgid "Open a preferences dialog for SDS."
+msgstr ""
+
+msgid "Separate Data Store"
+msgstr ""
+
+msgid "Configures access to the Separate Data Store."
+msgstr ""
+
+msgid "Server"
+msgstr ""
+
+msgid "The URL under which the SDS server can be contacted."
+msgstr ""
+
+msgid ""
+"The user name at the SDS server. You need to create an account with the SDS "
+"admin first."
+msgstr ""
+
+msgid ""
+"The password at the SDS server. You need to create an account with the SDS "
+"admin first."
+msgstr ""
+
+msgid ""
+"Tags beginning with this prefix are never saved to OSM, but to the SDS "
+"server only."
+msgstr ""
+
+msgid "SDS server URL"
+msgstr ""
+
+msgid "SDS username"
+msgstr ""
+
+msgid "SDS password"
+msgstr ""
+
+msgid "Test credentials now"
+msgstr ""
+
+msgid "SDS tag prefix"
+msgstr ""
+
+msgid "Connection successful."
+msgstr ""
+
+msgid "Cannot connect to SDS server: "
+msgstr ""
+
+msgid "Save..."
+msgstr ""
+
+msgid "Save the current separate data store information to a file."
+msgstr ""
+
+msgid "Save SDS file"
+msgstr ""
+
+msgid "No object selected"
+msgstr ""
+
+msgid "SeaChart Editor"
+msgstr ""
+
+msgid "Seamark Inspector"
+msgstr ""
+
+msgid "Select only one object"
+msgstr ""
+
+msgid "Select a map object"
+msgstr ""
+
+msgid "Simplify Area"
+msgstr ""
+
+msgid "Delete unnecessary nodes from an area."
+msgstr ""
+
+msgid "Yes, delete nodes"
+msgstr ""
+
+msgid "Delete nodes outside of downloaded data regions"
+msgstr ""
+
+msgid "No, abort"
+msgstr ""
+
+msgid "Do you want to delete them anyway?"
+msgstr ""
+
+msgid "Delete nodes outside of data regions?"
+msgstr ""
+
+msgid "average nearby nodes"
+msgstr ""
+
+msgid ""
+"Node of the way (area) is removed if all of <u>Angle Weight</u>, <u>Area "
+"Weight</u> and <u>Distance Weight</u> are greater than 1. <u>Weight</u> is "
+"computed as <u>Value</u> / <u>Threshold</u>, where <u>Value</u> is one of "
+"<u>Angle</u>, <u>Area</u> and <u>Distance</u> computed from every three "
+"adjanced points of the way.<ul><li><u>Value</u> of <u>Angle</u> is angle in "
+"degrees on the second node</li><li><u>Value</u> of <u>Area</u> is area "
+"formed by triangle</li><li><u>Value</u> of the <u>Distance</u> is Cross "
+"Track Error Distance</li></ul>All three <u>Weight</u>s multiplied by its "
+"<u>Factor</u>s are summed and node of the lowest sum is removed first. "
+"Removal continues until there is no node to remove.Merge Nearby Nodes is "
+"another step of the simplification that merges adjanced nodes that are "
+"closer than <u>Threshold</u> meters."
+msgstr ""
+
+msgid "Angle Threshold"
+msgstr ""
+
+msgid "Angle Factor"
+msgstr ""
+
+msgid "Area Threshold"
+msgstr ""
+
+msgid "Area Factor"
+msgstr ""
+
+msgid "Distance Threshold"
+msgstr ""
+
+msgid "Distance Factor"
+msgstr ""
+
+msgid "Merge Nearby Nodes Threshold"
+msgstr ""
+
+msgid "SeaMap Editor"
+msgstr ""
+
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
+msgid "OSM Export"
+msgstr ""
+
+msgid "Export traffic data to SUMO network file."
+msgstr ""
+
+msgid "SUMO Export"
+msgstr ""
+
+msgid "Export"
+msgstr ""
+
+msgid "AutoSave LiveData"
+msgstr ""
+
+msgid "Save captured data to file every minute."
+msgstr ""
+
+msgid "Error while exporting {0}: {1}"
+msgstr ""
+
+msgid "Duplicate hotkey for button ''{0}'' - button will be ignored!"
+msgstr ""
+
+msgid "SurveyorPlugin needs LiveGpsPlugin, but could not find it!"
+msgstr ""
+
+msgid "Surveyor..."
+msgstr ""
+
+msgid "Open surveyor tool."
+msgstr ""
+
+msgid "Surveyor"
+msgstr ""
+
+msgid "Could not read surveyor definition: {0}"
+msgstr ""
+
+msgid "Error parsing {0}: {1}"
+msgstr ""
+
+msgid "Surveyor waypoint layer"
+msgstr ""
+
+msgid "{0} start"
+msgstr ""
+
+msgid "{0} end"
+msgstr ""
+
+msgid "Waypoint Description"
+msgstr ""
+
+msgid "Tag2Link Preferences"
+msgstr ""
+
+msgid "Launch browser with information about the selected object"
+msgstr ""
+
+msgid ""
+"Launch your default software for sending an email to the selected contact "
+"address"
+msgstr ""
+
+msgid "Edit tags"
+msgstr ""
+
+msgid "Launches the tag editor dialog"
+msgstr ""
+
+msgid "JOSM Tag Editor Plugin"
+msgstr ""
+
+msgid "Abort tag editing and close dialog"
+msgstr ""
+
+msgid "Apply edited tags and close dialog"
+msgstr ""
+
+msgid "Highlight"
+msgstr ""
+
+msgid "Group"
+msgstr ""
+
+msgid "Item"
+msgstr ""
+
+msgid "unexpected column number {0}"
+msgstr ""
+
+msgid "Tagging Preset Tester"
+msgstr ""
+
+msgid ""
+"Open the tagging preset test tool for previewing tagging preset dialogs."
+msgstr ""
+
+msgid "You have to specify tagging preset sources in the preferences first."
+msgstr ""
+
+msgid "Enter housenumbers or amount of segments"
+msgstr ""
+
+msgid "Terrace a house"
+msgstr ""
+
+msgid "Interpolation"
+msgstr ""
+
+msgid "Lowest Number"
+msgstr ""
+
+msgid "Lowest housenumber of the terraced house"
+msgstr ""
+
+msgid "Highest Number"
+msgstr ""
+
+msgid "List of Numbers"
+msgstr ""
+
+msgid "add to existing associatedStreet relation"
+msgstr ""
+
+msgid "create an associatedStreet relation"
+msgstr ""
+
+msgid "keep outline way"
+msgstr ""
+
+msgid "Street name: "
+msgstr ""
+
+msgid "Even/Odd"
+msgstr ""
+
+msgid "Lowest number"
+msgstr ""
+
+msgid "Highest number"
+msgstr ""
+
+msgid "Lowest housenumber cannot be higher than highest housenumber"
+msgstr ""
+
+msgid "Housenumbers do not match odd/even setting"
+msgstr ""
+
+msgid "Segment must be a number greater 1"
+msgstr ""
+
+msgid "{0} must be greater than 0"
+msgstr ""
+
+msgid "{0} is not a number"
+msgstr ""
+
+msgid "Reverse a terrace"
+msgstr ""
+
+msgid "Reverses house numbers on a terrace."
+msgstr ""
+
+msgid "Reverse a Terrace"
+msgstr ""
+
+msgid "Cannot reverse!"
+msgstr ""
+
+msgid "Reverse Terrace"
+msgstr ""
+
+msgid "Terrace a building"
+msgstr ""
+
+msgid "Creates individual buildings from a long building."
+msgstr ""
+
+msgid "Invalid selection"
+msgstr ""
+
+msgid ""
+"Select a single, closed way of at least four nodes. (Optionally you can also "
+"select a street for the addr:street tag and a node to mark the start of "
+"numbering.)"
+msgstr ""
+
+msgid "Terrace"
+msgstr ""
+
+msgid "Browse"
+msgstr ""
+
+msgid "Browse map with left button"
+msgstr ""
+
+msgid "Merge objects nodes"
+msgstr ""
+
+msgid "Tracer"
+msgstr ""
+
+msgid "Tracer."
+msgstr ""
+
+msgid "Tracer building"
+msgstr ""
+
+msgid "Tracer2"
+msgstr ""
+
+msgid "Tracer2."
+msgstr ""
+
+msgid "Change tag {0} to {1}"
+msgstr ""
+
+msgid ""
+"The Tracer2Server version isn''t compatible with this plugin. Please "
+"download version {0} from\n"
+"{1}."
+msgstr ""
+
+msgid ""
+"New version of Tracer2Server is available. For best results please upgrade "
+"to version {0}."
+msgstr ""
+
+msgid "No set of parameter is active!"
+msgstr ""
+
+msgid "Select parameter"
+msgstr ""
+
+msgid "Tracer2: add a way with {0} points"
+msgstr ""
+
+msgid "Tracer2: modify way to {0} points"
+msgstr ""
+
+msgid "Tracer2 error"
+msgstr ""
+
+msgid "Parameter for server request"
+msgstr ""
+
+msgid "Resolution:"
+msgstr ""
+
+msgid "Mode:"
+msgstr ""
+
+msgid "Threshold:"
+msgstr ""
+
+msgid "Points per circle:"
+msgstr ""
+
+msgid "Tag:"
+msgstr ""
+
+msgid "Preferred values:"
+msgstr ""
+
+msgid "Delete parameter \"{0}\"?"
+msgstr ""
+
+msgid "Add new"
+msgstr ""
+
+msgid "Add predefined"
+msgstr ""
+
+msgid "Select predefined parameter"
+msgstr ""
+
+msgid "Modify list of parameter for server request."
+msgstr ""
+
+msgid "Parameter:"
+msgstr ""
+
+msgid ""
+"Tracer2Server isn''t running. Please start the Server.\n"
+"If you don''t have the server, please download it from\n"
+"{0}."
+msgstr ""
+
+msgid "Tracer2Server hasn''t found anything."
+msgstr ""
+
+msgid "Tracer2Server has detected an error."
+msgstr ""
+
+msgid "GPG"
+msgstr ""
+
+msgid "Export sigs..."
+msgstr ""
+
+msgid "Export all signatures to XML file."
+msgstr ""
+
+msgid "Export sigs to XML..."
+msgstr ""
+
+msgid "Save Signatures file"
+msgstr ""
+
+msgid ""
+"Get all referenced but not actually present OSM objects from OSM server."
+msgstr ""
+
+msgid "Download referenced osm objects..."
+msgstr ""
+
+msgid "{0} Signatures loaded. All referenced OSM objects found."
+msgstr ""
+
+msgid ""
+"{0} of {1} OSM objects are referenced but not there.\n"
+"Do you want to load them from OSM-Server?"
+msgstr ""
+
+msgid "Load objects from server"
+msgstr ""
+
+msgid "Download signed data"
+msgstr ""
+
+msgid "Warning: Ignoring exception because task was canceled. Exception: {0}"
+msgstr ""
+
+msgid ""
+"Generating new Keypair.\n"
+"Collecting randomness..."
+msgstr ""
+
+msgid "UID"
+msgstr ""
+
+msgid "KeyID"
+msgstr ""
+
+msgid "OSM-Info"
+msgstr ""
+
+msgid "Signed"
+msgstr ""
+
+msgid "Unknown"
+msgstr ""
+
+msgid "Object signatures"
+msgstr ""
+
+msgid "Open object signing window."
+msgstr ""
+
+msgid "Check"
+msgstr ""
+
+msgid "Check all available signatures for selected object."
+msgstr ""
+
+msgid "Sign"
+msgstr ""
+
+msgid "Digital sign selected Tags, if you believe they are correct."
+msgstr ""
+
+msgid "Show all available signatures for selected attribute."
+msgstr ""
+
+msgid "Show deleted tags and notes if they were signed before"
+msgstr ""
+
+msgid ""
+"Use default (and maybe existing) GnuPG directory ({0}) to store new keys and "
+"configs."
+msgstr ""
+
+msgid "Use separate GnuPG directory ({0}) to store new keys and configs."
+msgstr ""
+
+msgid "Trust OSM Settings"
+msgstr ""
+
+msgid "Change GPG and privacy settings of the trustosm plugin."
+msgstr ""
+
+msgid "Use separate GnuPG configuration directory?"
+msgstr ""
+
+msgid "GnuPG"
+msgstr ""
+
+msgid "Dialog"
+msgstr ""
+
+msgid "Signed key value pair was: {0}={1}"
+msgstr ""
+
+msgid "{0} Signatures found."
+msgstr ""
+
+msgid "Signature Info"
+msgstr ""
+
+msgid "Sorry, there are no Signatures for the selected Node."
+msgstr ""
+
+msgid "No Signature found"
+msgstr ""
+
+msgid ""
+"Selected node was:\n"
+"{0}"
+msgstr ""
+
+msgid "Sorry, there are no Signatures for the selected Attribute."
+msgstr ""
+
+msgid ""
+"Selected key value pair was:\n"
+"{0}={1}"
+msgstr ""
+
+msgid "Sorry, there are no Signatures for the selected Segment."
+msgstr ""
+
+msgid "Selected WaySegment was:"
+msgstr ""
+
+msgid "Signature Files"
+msgstr ""
+
+msgid "OSM Signature Files"
+msgstr ""
+
+msgid "Only digits allowed in osmid: ''{0}''."
+msgstr ""
+
+msgid "Could not parse OpenPGP message."
+msgstr ""
+
+msgid "Prepare stuff..."
+msgstr ""
+
+msgid "Parsing Signature data..."
+msgstr ""
+
+msgid "The Signature is broken!"
+msgstr ""
+
+msgid "Manipulation Warning"
+msgstr ""
+
+msgid "Select a signing key from your keyring-file:"
+msgstr ""
+
+msgid "Don''t ask again for the key"
+msgstr ""
+
+msgid "Use a random key from this list"
+msgstr ""
+
+msgid "Create new Key"
+msgstr ""
+
+msgid "Select a Key to sign"
+msgstr ""
+
+msgid ""
+"The object with the ID \"{0}\" ({1}) is newly created.\n"
+"You can not sign it, because the signature would lose the ID-Reference after "
+"uploading it to the OSM-server."
+msgstr ""
+
+msgid "Signing canceled!"
+msgstr ""
+
+msgid "Please give a tolerance in meters"
+msgstr ""
+
+msgid "Select as much as you like:"
+msgstr ""
+
+msgid "Survey"
+msgstr ""
+
+msgid "Aerial Photography"
+msgstr ""
+
+msgid "Web Recherche"
+msgstr ""
+
+msgid "Trusted persons told me"
+msgstr ""
+
+msgid "Which source did you use?"
+msgstr ""
+
+msgid "never"
+msgstr ""
+
+msgid "Primary user-ID: "
+msgstr ""
+
+msgid "Key-ID: "
+msgstr ""
+
+msgid "Fingerprint: "
+msgstr ""
+
+msgid "Algorithm: "
+msgstr ""
+
+msgid "Strength in bit: "
+msgstr ""
+
+msgid "Creation date: "
+msgstr ""
+
+msgid "Expiration date: "
+msgstr ""
+
+msgid "PGP-Key details"
+msgstr ""
+
+msgid "User-ID:"
+msgstr ""
+
+msgid "Select algorithm:"
+msgstr ""
+
+msgid "Choose Bitlength (Strength):"
+msgstr ""
+
+msgid "Encryption algorithm to protect private key:"
+msgstr ""
+
+msgid "Choose an expiry date for the key:"
+msgstr ""
+
+msgid "Create a new signing key"
+msgstr ""
+
+msgid "No such lane."
+msgstr ""
+
+msgid ""
+"<html>The number of lanes is not specified for one or more roads; please add "
+"missing lanes tags.</html>"
+msgstr ""
+
+msgid ""
+"<html>An error occurred while constructing the model. Please run the "
+"validator to make sure the data is consistent.<br><br>Error: {0}</html>"
+msgstr ""
+
+msgid "Edit turn relations and lane lengths for selected node."
+msgstr ""
+
+msgid "Validate turn- and lane-length-relations for consistency."
+msgstr ""
+
+msgid "Turn Lanes"
+msgstr ""
+
+msgid "Edit turn lanes"
+msgstr ""
+
+msgid "Quick-Fix"
+msgstr ""
+
+msgid "Revalidate all turnlanes-relations."
+msgstr ""
+
+msgid "Automatically fixes the issue."
+msgstr ""
+
+msgid "Selects the offending relation."
+msgstr ""
+
+msgid "Add turn"
+msgstr ""
+
+msgid "Delete lane."
+msgstr ""
+
+msgid "Delete turn."
+msgstr ""
+
+msgid "{0} lanes are not referenced in any turn-relation."
+msgstr ""
+
+msgid "Put the ways in order."
+msgstr ""
+
+msgid "Relation references non-existent (regular) lane {0}"
+msgstr ""
+
+msgid "Relation references non-existent extra lane {0}"
+msgstr ""
+
+msgid "Integer list \"{0}\" contains unexpected values."
+msgstr ""
+
+msgid "Create/Edit turn restriction..."
+msgstr ""
+
+msgid "Create or edit a turn restriction."
+msgstr ""
+
+msgid ""
+"In the following table you can edit the <strong>raw tags</strong> of the OSM "
+"relation representing this turn restriction."
+msgstr ""
+
+msgid ""
+"In the following table you can edit the <strong>raw members</strong> of the "
+"OSM relation representing this turn restriction."
+msgstr ""
+
+msgid "Type:"
+msgstr ""
+
+msgid "From:"
+msgstr ""
+
+msgid "To:"
+msgstr ""
+
+msgid "Vias:"
+msgstr ""
+
+msgid "Copy to the clipboard"
+msgstr ""
+
+msgid "Cannot find object with id ''{0}'' in layer ''{1}''"
+msgstr ""
+
+msgid ""
+"Cannot add object ''{0}'' as relation member because it is deleted or "
+"invisible in layer ''{1}''"
+msgstr ""
+
+msgid "Clear the selected roles or delete the selected members"
+msgstr ""
+
+msgid "Insert new relation members from object in the clipboard"
+msgstr ""
+
+msgid "Move the selected relation members down by one position"
+msgstr ""
+
+msgid "Move the selected relation members up by one position"
+msgstr ""
+
+msgid "Edit basic attributes of a turn restriction"
+msgstr ""
+
+msgid "Edit the raw tags and members of this turn restriction"
+msgstr ""
+
+msgid "Errors/Warnings"
+msgstr ""
+
+msgid "Show errors and warnings related to this turn restriction"
+msgstr ""
+
+msgid "Create a new turn restriction in layer ''{0}''"
+msgstr ""
+
+msgid "Edit a new turn restriction in layer ''{0}''"
+msgstr ""
+
+msgid "Edit turn restriction ''{0}'' in layer ''{1}''"
+msgstr ""
+
+msgid ""
+"There is still an unresolved error or warning identified for this turn "
+"restriction. You are recommended to resolve this issue first."
+msgid_plural ""
+"There are still {0} errors and/or warnings identified for this turn "
+"restriction. You are recommended to resolve these issues first."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Do you want to save anyway?"
+msgstr ""
+
+msgid "Yes, save anyway"
+msgstr ""
+
+msgid "Save the turn restriction despite of errors and/or warnings"
+msgstr ""
+
+msgid "No, resolve issues first"
+msgstr ""
+
+msgid "Cancel saving and start resolving pending issues first"
+msgstr ""
+
+msgid "Pending errors and warnings"
+msgstr ""
+
+msgid ""
+"This turn restriction refers to an object which was deleted outside of this "
+"turn restriction editor:"
+msgid_plural ""
+"This turn restriction refers to {0} objects which were deleted outside of "
+"this turn restriction editor:"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"Updates to this turn restriction can''t be saved unless deleted members are "
+"removed.<br>How to you want to proceed?"
+msgstr ""
+
+msgid "Remove deleted members and save"
+msgstr ""
+
+msgid "Cancel and return to editor"
+msgstr ""
+
+msgid "Deleted members in turn restriction"
+msgstr ""
+
+msgid "Create a conflict and close this turn restriction editor"
+msgstr ""
+
+msgid "Return to the turn restriction editor and resume editing"
+msgstr ""
+
+msgid ""
+"<html>This turn restriction has been changed outside of the editor.<br>You "
+"cannot apply your changes and continue editing.<br><br>Do you want to create "
+"a conflict and close the editor?</html>"
+msgstr ""
+
+msgid "Already participating in a conflict"
+msgstr ""
+
+msgid "Delete this turn restriction"
+msgstr ""
+
+msgid "Select this turn restriction"
+msgstr ""
+
+msgid "Activate the layer this turn restriction belongs to and zoom to it"
+msgstr ""
+
+msgid "{0} warning"
+msgid_plural "{0} warnings"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "{0} error"
+msgid_plural "{0} errors"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "no issues"
+msgstr ""
+
+msgid "please select a way"
+msgstr ""
+
+msgid "multiple objects with role ''{0}''"
+msgstr ""
+
+msgid "Delete from turn restriction"
+msgstr ""
+
+msgid "Accept the currently selected way"
+msgstr ""
+
+msgid "Paste from the clipboard"
+msgstr ""
+
+msgid "Create new turn restriction"
+msgstr ""
+
+msgid "Launch the turn restriction editor to create a new turn restriction"
+msgstr ""
+
+msgid "No Right Turn"
+msgstr ""
+
+msgid "No Left Turn"
+msgstr ""
+
+msgid "No U-Turn"
+msgstr ""
+
+msgid "No Straight On"
+msgstr ""
+
+msgid "Only Right Turn"
+msgstr ""
+
+msgid "Only Left Turn"
+msgstr ""
+
+msgid "Only Straight On"
+msgstr ""
+
+msgid "Warning: failed to load icon for turn restriction type ''{0}''"
+msgstr ""
+
+msgid "please select a turn restriction type"
+msgstr ""
+
+msgid ""
+"Select the vehicle types this turn restriction is <strong>not</strong> "
+"applicable for."
+msgstr ""
+
+msgid "Public Service Vehicles"
+msgstr ""
+
+msgid "Public service vehicles like buses, tramways, etc."
+msgstr ""
+
+msgid "Heavy Goods Vehicles"
+msgstr ""
+
+msgid "Motorcars"
+msgstr ""
+
+msgid "Bicycles"
+msgstr ""
+
+msgid "Mopeds"
+msgstr ""
+
+msgid "Use standard exceptions"
+msgstr ""
+
+msgid "Use non-standard exceptions"
+msgstr ""
+
+msgid "Remove the currently selected vias"
+msgstr ""
+
+msgid "Move the selected vias down by one position"
+msgstr ""
+
+msgid "Move the selected vias up by one position"
+msgstr ""
+
+msgid "Copy the selected vias to the clipboard"
+msgstr ""
+
+msgid "Insert ''via'' objects from the clipboard"
+msgstr ""
+
+msgid ""
+"Failed to retrieve OSM object with id {0} from dataset {1}. Cannot add it as "
+"''via''."
+msgstr ""
+
+msgctxt "turnrestrictions"
+msgid "From:"
+msgstr ""
+
+msgctxt "turnrestriction"
+msgid "To:"
+msgstr ""
+
+msgid "no participating way with role ''from''"
+msgstr ""
+
+msgid "no participating way with role ''to''"
+msgstr ""
+
+msgid "Only participating in selection"
+msgstr ""
+
+msgid ""
+"<html>Select to display turn restrictions related to object in the current "
+"selection only.<br>Deselect to display all turn restrictions in the current "
+"data set.</html>"
+msgstr ""
+
+msgid "Turn Restrictions"
+msgstr ""
+
+msgid "Display and manage turn restrictions in the current data set"
+msgstr ""
+
+msgid "Open an editor for the selected turn restriction"
+msgstr ""
+
+msgid "Delete the selected turn restriction"
+msgstr ""
+
+msgid "Create a new turn restriction"
+msgstr ""
+
+msgid "Set the current JOSM selection to the selected turn restrictions"
+msgstr ""
+
+msgid "Select in current data layer"
+msgstr ""
+
+msgid "Zoom to the currently selected turn restrictions"
+msgstr ""
+
+msgid "An OSM plugin for editing turn restrictions."
+msgstr ""
+
+msgid ""
+"Development of the turn restriction plugin was sponsored by <a "
+"href=\"http://www.skobbler.de\">skobbler GmbH</a>."
+msgstr ""
+
+msgid "Configure the preferences for the turnrestrictions plugin"
+msgstr ""
+
+msgid "Sponsor"
+msgstr ""
+
+msgid ""
+"The Basic Editor can optionally display the list of via-objects of a turn "
+"restriction. If enabled, one can edit them in the Basic editor too. If "
+"disabled, editing of via-objects is possible in the Advanced Editor only."
+msgstr ""
+
+msgid "Display and edit list of via-objects in the Basic Editor"
+msgstr ""
+
+msgid "Road signs - Set A"
+msgstr ""
+
+msgid "Road signs - Set B"
+msgstr ""
+
+msgid "Please select the set of road sign icons to be used in the plugin."
+msgstr ""
+
+msgid ""
+"Warning: the preference with key ''{0}'' has an unsupported value ''{1}''. "
+"Assuming the default value ''set-a''."
+msgstr ""
+
+msgid ""
+"This turn restriction uses the way <span class=\"object-name\">{0}</span> "
+"with role <tt>from</tt> <strong>and</strong> with role <tt>to</tt>. In a "
+"turn restriction, the way with role <tt>from</tt> should be different from "
+"the way with role <tt>to</tt>, though."
+msgstr ""
+
+msgid "Delete ''from''"
+msgstr ""
+
+msgid "Removes the member with role ''from''"
+msgstr ""
+
+msgid "Delete ''to''"
+msgstr ""
+
+msgid "Removes the member with role ''to''"
+msgstr ""
+
+msgid "Fix in editor"
+msgstr ""
+
+msgid ""
+"Go to Basic Editor and manually choose members with roles ''from'' and ''to''"
+msgstr ""
+
+msgid ""
+"This turn restriction uses a non-standard restriction type <tt>{0}</tt> for "
+"the tag key <tt>restriction</tt>. It is recommended to use standard values "
+"only. Please select one in the Basic editor."
+msgstr ""
+
+msgid "Go to Basic Editor and manually choose a turn restriction type"
+msgstr ""
+
+msgid ""
+"The <strong>from</strong>-way <span class=\"object-name\">{0}</span> and the "
+"<strong>to</strong>-way <span class=\"object-name\">{1}</span> intersect at "
+"node <span class=\"object-name\">{2}</span> but this node isn''t a "
+"<strong>via</strong>-object.<br> It is recommended to set it as unique "
+"<strong>via</strong>-object."
+msgstr ""
+
+msgid "Set via-Object"
+msgstr ""
+
+msgid ""
+"Replaces the currently configured via-objects with the node at the "
+"intersection"
+msgstr ""
+
+msgid "Go to Basic Editor and manually fix the list of via-objects"
+msgstr ""
+
+msgid ""
+"A turn restriction must declare the type of restriction. Please select a "
+"type in the Basic Editor."
+msgstr ""
+
+msgid "A way with role <tt>from</tt> is required in a turn restriction."
+msgstr ""
+
+msgid "A way with role <tt>to</tt> is required in a turn restriction."
+msgstr ""
+
+msgid "Please go to the Basic editor and manually choose a way."
+msgstr ""
+
+msgid "Add in editor"
+msgstr ""
+
+msgid "Add a way with role ''from''"
+msgstr ""
+
+msgid "Add a way with role ''to''"
+msgstr ""
+
+msgid ""
+"The two ways participating in the turn restriction <strong>aren''t "
+"connected.</strong>"
+msgstr ""
+
+msgid ""
+"Make sure you add one or more via objects (nodes or ways) to the turn "
+"restriction."
+msgstr ""
+
+msgid "Go to the Advanced Editor and add via objects"
+msgstr ""
+
+msgid ""
+"A turn restriction requires exactly one way with role <tt>from</tt>. This "
+"turn restriction has {0} ways in this role. Please remove {1} of them."
+msgstr ""
+
+msgid ""
+"A turn restriction requires exactly one way with role <tt>to</tt>. This turn "
+"restriction has {0} ways in this role. Please remove {1} of them."
+msgstr ""
+
+msgid "Go to the Advanced Editor and remove the members"
+msgstr ""
+
+msgid ""
+"The tag <tt>except</tt> has the non-standard value <tt>{0}</tt>. It is "
+"recommended to use standard values for <tt>except</tt> only."
+msgstr ""
+
+msgid "Go to Basic Editor and select standard vehicle type based exceptions"
+msgstr ""
+
+msgid "The required tag <tt>{0}={1}</tt> is missing."
+msgstr ""
+
+msgid "Add missing tag"
+msgstr ""
+
+msgid "Add the missing tag {0}={1}"
+msgstr ""
+
+msgid ""
+"The way <span class=\"object-name\">{0}</span> with role <tt>from</tt> and "
+"the way <span class=\"object-name\">{1}</span> with role <tt>to</tt> "
+"intersect at node <span class=\"object-name\">{2}</span>. <p> Both ways "
+"should be split at the intersecting node."
+msgstr ""
+
+msgid ""
+"The way <span class=\"object-name\">{0}</span> with role <tt>{1}</tt> should "
+"be split at node <span class=\"object-name\">{2}</span> where it connects to "
+"way <span class=\"object-name\">{3}</span>."
+msgstr ""
+
+msgid "Split now"
+msgstr ""
+
+msgid "Split the ways"
+msgstr ""
+
+msgid ""
+"This turn restriction uses the node <span class=\"object-name\">{0}</span> "
+"as member with role <tt>{1}</tt>."
+msgstr ""
+
+msgid ""
+"This turn restriction uses the relation <span class=\"object-"
+"name\">{0}</span> as member with role <tt>{1}</tt>."
+msgstr ""
+
+msgid "A way is required instead."
+msgstr ""
+
+msgid "Delete the member from the turn restriction"
+msgstr ""
+
+msgid "Change to the Basic Editor and select a way"
+msgstr ""
+
+msgid "Undelete object..."
+msgstr ""
+
+msgid "Undelete object by id"
+msgstr ""
+
+msgid "Unable to undelete node {0}. Object has likely been redacted"
+msgstr ""
+
+msgid "Unable to undelete way {0}. Object has likely been redacted"
+msgstr ""
+
+msgid "Unable to undelete relation {0}. Object has likely been redacted"
+msgstr ""
+
+msgid "Undelete Object"
+msgstr ""
+
+msgid "Undelete object"
+msgstr ""
+
+msgid ""
+"Enter the type and ID of the objects that should be undeleted, e.g., ''n1 "
+"w2''"
+msgstr ""
+
+msgid "Select if the data should be added into a new layer"
+msgstr ""
+
+msgid "Start undeleting"
+msgstr ""
+
+msgid "Close dialog and cancel"
+msgstr ""
+
+msgid "Add nodes at intersections"
+msgstr ""
+
+msgid "Add missing nodes at intersections of selected ways."
+msgstr ""
+
+msgid "Please select one or more ways with intersections of segments."
+msgstr ""
+
+msgid "Align Way Nodes"
+msgstr ""
+
+msgid "Align nodes in a way"
+msgstr ""
+
+msgid "The way with selected nodes can not be straightened."
+msgstr ""
+
+msgid "Internal error: number of nodes is {0}."
+msgstr ""
+
+msgid "Extract node"
+msgstr ""
+
+msgid "Extracts node from a way"
+msgstr ""
+
+msgid ""
+"This tool extracts node from its ways and requires single node to be "
+"selected."
+msgstr ""
+
+msgid "Extract node from line"
+msgstr ""
+
+msgid "Paste Relations"
+msgstr ""
+
+msgid ""
+"Paste relation membership from objects in the buffer onto selected object(s)"
+msgstr ""
+
+msgid "Split Object"
+msgstr ""
+
+msgid "Split an object at the selected nodes."
+msgstr ""
+
+msgid "The current selection cannot be used for splitting."
+msgstr ""
+
+msgid "The selected way is not closed."
+msgstr ""
+
+msgid "The selected way does not contain the selected node."
+msgid_plural "The selected way does not contain all the selected nodes."
+msgstr[0] ""
+msgstr[1] ""
+
+msgid ""
+"The selected way is not a split way, please select split points or split way "
+"too."
+msgstr ""
+
+msgid "The selected nodes can not be consecutive nodes in the object."
+msgstr ""
+
+msgid "Split adjacent ways"
+msgstr ""
+
+msgid "Split adjacent ways on T-intersections"
+msgstr ""
+
+msgid ""
+"There are several ways containing one of the splitting nodes. Select ways "
+"participating in this operation."
+msgstr ""
+
+msgid "Symmetry"
+msgstr ""
+
+msgid ""
+"Please select at least two nodes for symmetry axis and something else to "
+"mirror."
+msgstr ""
+
+msgid "Copy tags from previous selection"
+msgstr ""
+
+msgid "Pastes tags of previously selected object(s)"
+msgstr ""
+
+msgid "Add Source Tag"
+msgstr ""
+
+msgid "Add remembered source tag"
+msgstr ""
+
+msgid "UnGlue Relation"
+msgstr ""
+
+msgid ""
+"Duplicate nodes, ways and relations that are used by multiple relations."
+msgstr ""
+
+msgid "UnGlue Relations"
+msgstr ""
+
+msgid "Unglued Relations"
+msgstr ""
+
+msgid "Change relation member for {0} {1}"
+msgstr ""
+
+msgid "Circle arc"
+msgstr ""
+
+msgid "Create a circle arc"
+msgstr ""
+
+msgid "Select custom URL"
+msgstr ""
+
+msgid "Please select one of custom URLs (configured in Preferences)"
+msgstr ""
+
+msgid "Ask every time"
+msgstr ""
+
+msgid "Configure custom URL"
+msgstr ""
+
+msgid "Open custom URL"
+msgstr ""
+
+msgid "Opens specified URL browser"
+msgstr ""
+
+msgid "Utilsplugin2 settings"
+msgstr ""
+
+msgid "Here you can change some preferences of Utilsplugin2 functions"
+msgstr ""
+
+msgid "Save to file"
+msgstr ""
+
+msgid "Load from file"
+msgstr ""
+
+msgid ""
+"Please edit custom URLs and select one row to use with the tool<br/> "
+"<b>{key}</b> is replaced with the tag value<br/> "
+"<b>{#id}</b> is replaced with the element ID<br/> "
+"<b>{#type}</b> is replaced with \"node\",\"way\" or \"relation\" "
+"<br/> <b>{#lat} , {#lon}</b> is replaced with map center "
+"latitude/longitude <br/> Your can manually load settings from file "
+"<b>customurl.txt</b> in JOSM folder"
+msgstr ""
+
+msgid "Custom URL configuration"
+msgstr ""
+
+msgid "Lat Lon tool"
+msgstr ""
+
+msgid "Create geometry by entering lat lon coordinates for it."
+msgstr ""
+
+msgid ""
+"Enter the coordinates for the new nodes, one for each line.<br/>If you enter "
+"two lines with the same coordinates there will be generated duplicate "
+"nodes.<br/>You can separate longitude and latitude with space, comma or "
+"semicolon.<br/>Use positive numbers or N, E characters to indicate North or "
+"East cardinal direction.<br/>For South and West cardinal directions you can "
+"use either negative numbers or S, W characters.<br/>Coordinate value can be "
+"in one of three "
+"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
+"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
+"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
+"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional.<br/><br/>Some examples:<ul><li>49.29918° "
+"19.24788°</li><li>N 49.29918 E 19.24788</li><li>W 49°29.918' S "
+"19°24.788'</li><li>N 49°29'04" E "
+"19°24'43"</li><li>49.29918 N, 19.24788 "
+"E</li><li>49°29'21" N 19°24'38" E</li><li>49 29 "
+"51, 19 24 18</li><li>49 29, 19 24</li><li>E 49 29, N 19 24</li><li>49° "
+"29; 19° 24</li><li>N 49° 29, W 19° 24</li><li>49° 29.5 S, "
+"19° 24.6 E</li><li>N 49 29.918 E 19 15.88</li><li>49 29.4 19 "
+"24.5</li><li>-49 29.4 N -19 24.5 W</li></ul><li>48 deg 42' 52.13\" N, 21 "
+"deg 11' 47.60\" E</li></ul>"
+msgstr ""
+
+msgid "Tag multiple objects [alpha]"
+msgstr ""
+
+msgid "Edit tags of object list in table"
+msgstr ""
+
+msgid "Tag multiple objects"
+msgstr ""
+
+msgid "Sync with JOSM selection"
+msgstr ""
+
+msgid "Zoom to objects"
+msgstr ""
+
+msgid "Remove tag"
+msgstr ""
+
+msgid "Delete tags from multiple objects"
+msgstr ""
+
+msgid "Duplicate tags from the first"
+msgstr ""
+
+msgid "Set tags for multiple objects"
+msgstr ""
+
+msgid "Delete from history"
+msgstr ""
+
+msgid "Find primitives with these tags"
+msgstr ""
+
+msgid "Multitag Background: highlight"
+msgstr ""
+
+msgid "Replace Geometry"
+msgstr ""
+
+msgid "Replace geometry of selected object with a new one"
+msgstr ""
+
+msgid ""
+"This tool replaces geometry of one object with another, and so requires "
+"exactly two objects to be selected."
+msgstr ""
+
+msgid ""
+"This tool can only replace a node, upgrade a node to a way or a "
+"multipolygon, or replace a way with a way."
+msgstr ""
+
+msgid "Node belongs to way(s), cannot replace."
+msgstr ""
+
+msgid "Replace geometry for node {0}"
+msgstr ""
+
+msgid "Relation is not a multipolygon, cannot be used as a replacement."
+msgstr ""
+
+msgid ""
+"Please select one way that exists in the database and one new way with "
+"correct geometry."
+msgstr ""
+
+msgid "The ways must be entirely within the downloaded area."
+msgstr ""
+
+msgid ""
+"The way to be replaced cannot have any nodes with properties or relation "
+"memberships unless they belong to both ways."
+msgstr ""
+
+msgid "Exceeded iteration limit for robust method, using simpler method."
+msgstr ""
+
+msgid "Replace geometry for way {0}"
+msgstr ""
+
+msgid "Range of child primitives count"
+msgstr ""
+
+msgid "Range of parent primitives count"
+msgstr ""
+
+msgid "Range of referencing relation count"
+msgstr ""
+
+msgid "Range of attached ways count"
+msgstr ""
+
+msgid "Adjacent nodes"
+msgstr ""
+
+msgid "Select adjacent nodes"
+msgstr ""
+
+msgid "Adjacent ways"
+msgstr ""
+
+msgid "Adjacent ways will be selected. Nodes will be deselected."
+msgstr ""
+
+msgid "All connected ways"
+msgstr ""
+
+msgid "Select all connected ways"
+msgstr ""
+
+msgid "Intersecting ways"
+msgstr ""
+
+msgid "Select intersecting ways"
+msgstr ""
+
+msgid "Please select some ways to find connected and intersecting ways!"
+msgstr ""
+
+msgid "All intersecting ways"
+msgstr ""
+
+msgid "Select all intersecting ways"
+msgstr ""
+
+msgid "Please select some ways to find all connected and intersecting ways!"
+msgstr ""
+
+msgid "Middle nodes"
+msgstr ""
+
+msgid "Select middle nodes"
+msgstr ""
+
+msgid "Please select two nodes connected by way!"
+msgstr ""
+
+msgid "Too many ways are added: {0}!"
+msgstr ""
+
+msgid "All inside [testing]"
+msgstr ""
+
+msgid "Select all inside selected polygons"
+msgstr ""
+
+msgid ""
+"Nothing found. Please select some closed ways or multipolygons to find all "
+"primitives inside them!"
+msgstr ""
+
+msgid "Area boundary [testing]"
+msgstr ""
+
+msgid "Select relation or all ways that forms area boundary"
+msgstr ""
+
+msgid ""
+"Nothing found. Please select way that is a part of some polygon formed by "
+"connected ways"
+msgstr ""
+
+msgid "Select Highway"
+msgstr ""
+
+msgid "Select highway for the name/ref given"
+msgstr ""
+
+msgid "Please select one or two ways for this action"
+msgstr ""
+
+msgid "Select last modified nodes"
+msgstr ""
+
+msgid "Select last modified ways"
+msgstr ""
+
+msgid "Select Way Nodes"
+msgstr ""
+
+msgid "Select all nodes of a selected way."
+msgstr ""
+
+msgid "Undo selection"
+msgstr ""
+
+msgid "Reselect last added object or selection form history"
+msgstr ""
+
+msgid "Unselect nodes"
+msgstr ""
+
+msgid "Removes all nodes from selection"
+msgstr ""
+
+msgid "Import Video"
+msgstr ""
+
+msgid "Sync a video against this GPS track"
+msgstr ""
+
+msgid "Remove Video"
+msgstr ""
+
+msgid "removes current video from layer"
+msgstr ""
+
+msgid "Play/Pause"
+msgstr ""
+
+msgid "starts/pauses video playback"
+msgstr ""
+
+msgid "Video: {0}"
+msgstr ""
+
+msgid "Backward"
+msgstr ""
+
+msgid "jumps n sec back"
+msgstr ""
+
+msgid "Forward"
+msgstr ""
+
+msgid "jumps n sec forward"
+msgstr ""
+
+msgid "Faster"
+msgstr ""
+
+msgid "faster playback"
+msgstr ""
+
+msgid "Slower"
+msgstr ""
+
+msgid "slower playback"
+msgstr ""
+
+msgid "Jump To"
+msgstr ""
+
+msgid "jumps to the entered gps time"
+msgstr ""
+
+msgid "Loop"
+msgstr ""
+
+msgid "loops n sec around current position"
+msgstr ""
+
+msgid "Keep centered"
+msgstr ""
+
+msgid "follows the video icon automatically"
+msgstr ""
+
+msgid "Subtitles"
+msgstr ""
+
+msgid "Show subtitles in video"
+msgstr ""
+
+msgid "Jump length"
+msgstr ""
+
+msgid "Set the length of a jump"
+msgstr ""
+
+msgid "Jump in video for x ms"
+msgstr ""
+
+msgid "Loop length"
+msgstr ""
+
+msgid "Set the length around a looppoint"
+msgstr ""
+
+msgid "no deinterlacing"
+msgstr ""
+
+msgid "deinterlacing using line doubling"
+msgstr ""
+
+msgid "deinterlacing using linear interpolation"
+msgstr ""
+
+msgid ""
+"VLC library is not correctly initialized. Please check that VLC {0} is "
+"correctly installed on your system. Its architecture (32/64 bits) must also "
+"be the same as the JRE that runs JOSM."
+msgstr ""
+
+msgid "Jump to"
+msgstr ""
+
+msgid "Jump to GPS time"
+msgstr ""
+
+msgid "Shows current position in the video"
+msgstr ""
+
+msgid "Sync"
+msgstr ""
+
+msgid "Unable to find JNA Java library!"
+msgstr ""
+
+msgid "Unable to find native libvlc library!"
+msgstr ""
+
+msgid "play"
+msgstr ""
+
+msgid "loop"
+msgstr ""
+
+msgid "mute"
+msgstr ""
+
+msgid "Walking Papers Scanned Map"
+msgstr ""
+
+msgid ""
+"Display a map that was previously scanned and uploaded to walking-papers.org"
+msgstr ""
+
+msgid ""
+"Enter a walking-papers.org URL or ID (the bit after the ?id= in the URL)"
+msgstr ""
+
+msgid "Could not read information from walking-papers.org the id \"{0}\""
+msgstr ""
+
+msgid "Walking Papers: {0}"
+msgstr ""
+
+msgid "Walking Papers layer ({0}) in zoom {1}"
+msgstr ""
+
+msgid "Way Download"
+msgstr ""
+
+msgid "Download map data on the end of selected way"
+msgstr ""
+
+msgid ""
+"<html>Neither a node nor a way with an endpoint outside of the<br>current "
+"download areas is selected.<br>Select a node on the start or end of a way or "
+"an entire way first.</html>"
+msgstr ""
+
+msgid "<html>Could not find a unique node to start downloading from.</html>"
+msgstr ""
+
+msgid "<html>There are no ways connected to node ''{0}''. Aborting.</html>"
+msgstr ""
+
+msgid ""
+"Way downloader data inconsistency. Prior connected way ''{0}'' wasn''t "
+"discovered after download"
+msgstr ""
+
+msgid ""
+"<html>There aren''t further connected ways to download.<br>A potential "
+"duplicate node of the currently selected node was found, though.<br><br>The "
+"currently selected node is ''{0}''<br>The potential duplicate node is "
+"''{1}''<br>Merge the duplicate node onto the currently selected node and "
+"continue way downloading?</html>"
+msgstr ""
+
+msgid "Merge duplicate node?"
+msgstr ""
+
+msgid "<html>No more connected ways to download.</html>"
+msgstr ""
+
+msgid "Node ''{0}'' is a junction with more than 2 connected ways."
+msgstr ""
+
+msgid "Enter search expression here.."
+msgstr ""
+
+msgid "Select waypoint to move map"
+msgstr ""
+
+msgid "Waypoint search"
+msgstr ""
+
+msgid "Search after waypoint. Click and move the map view to the waypoint."
+msgstr ""
+
+msgid "Add names from Wikipedia"
+msgstr ""
+
+msgid ""
+"Fetches interwiki links from Wikipedia in order to add several name tags"
+msgstr ""
+
+msgid ""
+"Copies the {0} template to the system clipboard instantiated with the "
+"coordinates of the first selected node"
+msgstr ""
+
+msgid "Copy {0} template"
+msgstr ""
+
+msgid "Fetch Wikipedia articles with coordinates"
+msgstr ""
+
+msgid ""
+"Double click on item to search for object with article name (and center "
+"coordinate)"
+msgstr ""
+
+msgid "Available via WIWOSM server"
+msgstr ""
+
+msgid "Available in local dataset"
+msgstr ""
+
+msgid "Not linked yet"
+msgstr ""
+
+msgid "{0}.Wikipedia.org"
+msgstr ""
+
+msgid "{0}.Wikipedia.org: {1}"
+msgstr ""
+
+msgid "Fetches all coordinates from Wikipedia in the current view"
+msgstr ""
+
+msgid "coordinates"
+msgstr ""
+
+msgid "Category"
+msgstr ""
+
+msgid "Fetches a list of all Wikipedia articles of a category"
+msgstr ""
+
+msgid "Enter the Wikipedia category"
+msgstr ""
+
+msgid "Clipboard"
+msgstr ""
+
+msgid "Pastes Wikipedia articles from the system clipboard"
+msgstr ""
+
+msgid "clipboard"
+msgstr ""
+
+msgid "Open Article"
+msgstr "लेख उघडा"
+
+msgid "Opens the Wikipedia article of the selected item in a browser"
+msgstr ""
+
+msgid "Sets the default language for the Wikipedia articles"
+msgstr ""
+
+msgid "Enter the Wikipedia language"
+msgstr ""
+
+msgid ""
+"Adds a ''wikipedia'' tag corresponding to this article to the selected "
+"objects"
+msgstr ""
+
+msgid "The Ultimate WMS Super-speed Turbo Challenge II"
+msgstr ""
+
+msgid "Go driving"
+msgstr ""
+
+msgid "Drive a race car on this layer"
+msgstr "ह्या थरावर शर्यतीची गाडी चालवा"
diff --git a/i18n/po/ms.po b/i18n/po/ms.po
index eb41a96..67bd4dc 100644
--- a/i18n/po/ms.po
+++ b/i18n/po/ms.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2011-12-11 22:14+0000\n"
 "Last-Translator: abuyop <Unknown>\n"
 "Language-Team: Malay <ms at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:50+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:53+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: ms\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -97,19 +97,16 @@ msgstr ""
 msgid "Updating user interface"
 msgstr ""
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
 msgstr ""
 
 msgid "Warning"
 msgstr ""
 
-msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
+msgid "Ignoring malformed file URL: \"{0}\""
 msgstr ""
 
-msgid "Ignoring malformed URL: \"{0}\""
+msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 
 msgid ""
@@ -444,6 +441,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
 
@@ -1029,6 +1029,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr ""
 
@@ -1945,15 +1969,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr ""
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -1975,6 +1990,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2093,9 +2117,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2309,9 +2330,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr ""
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2525,6 +2552,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2567,6 +2598,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3017,6 +3051,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3134,10 +3186,44 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3327,6 +3413,12 @@ msgstr ""
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3354,13 +3446,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -3976,9 +4068,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -3988,12 +4077,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4174,13 +4275,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4378,6 +4479,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4591,43 +4693,54 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
 msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
 msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
 msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
 msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
-msgid "Menu: {0}"
+msgctxt "menu"
+msgid "Help"
 msgstr ""
 
-msgid "Save and load the current session (list of layers, etc.)"
+msgid "Menu: {0}"
 msgstr ""
 
 msgid "Edit toolbar"
@@ -4651,6 +4764,7 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
 msgstr ""
 
@@ -4773,58 +4887,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr ""
-
-msgid "Pos."
+msgid " ({0})"
 msgstr ""
 
-msgid "Role"
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5253,6 +5325,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr ""
+
 msgid "Primitive"
 msgstr ""
 
@@ -5493,6 +5568,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5639,6 +5717,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5742,7 +5855,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5870,6 +5983,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5879,17 +5997,48 @@ msgstr ""
 msgid "unknown"
 msgstr ""
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -5935,6 +6084,12 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr ""
 
@@ -6064,10 +6219,16 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
-msgid "List of notes"
+msgid "Mini map"
 msgstr ""
 
-msgid "Add comment"
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
+msgid "List of notes"
+msgstr ""
+
+msgid "Add comment"
 msgstr ""
 
 msgid "Comment"
@@ -6122,10 +6283,15 @@ msgstr ""
 msgid "Enter the ID of the object that should be downloaded"
 msgstr ""
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6154,6 +6320,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr ""
 
+msgid "Selection"
+msgstr ""
+
 msgid "Open a selection list window."
 msgstr ""
 
@@ -6244,6 +6413,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -6838,6 +7013,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6929,14 +7110,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7109,6 +7289,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7644,6 +7830,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8489,6 +8678,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr ""
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr ""
 
@@ -8542,6 +8831,9 @@ msgstr ""
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8562,7 +8854,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8645,80 +8937,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr ""
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-
-msgid "Auto Zoom"
-msgstr ""
-
-msgid "Auto load tiles"
-msgstr ""
-
-msgid "Show Errors"
-msgstr ""
-
-msgid "Load Tile"
-msgstr ""
-
-msgid "Show Tile Info"
-msgstr ""
-
-msgid "Load All Tiles"
-msgstr ""
-
-msgid "Load All Error Tiles"
-msgstr ""
-
-msgid "Increase zoom"
-msgstr ""
-
-msgid "Decrease zoom"
-msgstr ""
-
-msgid "Snap to tile size"
-msgstr ""
-
-msgid "Flush Tile Cache"
-msgstr ""
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
@@ -8728,56 +8946,30 @@ msgstr ""
 msgid "No validation errors"
 msgstr ""
 
-msgid "Blank Layer"
-msgstr ""
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "Download visible tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-
-msgid "Change resolution"
-msgstr ""
-
-msgid "Reload erroneous tiles"
-msgstr ""
-
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Automatic downloading"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Zoom to native resolution"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Supported projections are: {0}"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Save WMS file"
+msgid "Try Again"
 msgstr ""
 
-msgid "Correlate to GPX"
+msgid "No images could be matched!"
 msgstr ""
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
@@ -8864,24 +9056,9 @@ msgstr ""
 msgid "Offset:"
 msgstr ""
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
 msgid "Correlate"
 msgstr ""
 
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9075,9 +9252,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr ""
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9140,9 +9314,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9768,15 +9939,15 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr ""
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -10569,13 +10740,28 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
-msgid "imagery fade"
+msgid "1. Enter getCapabilities URL"
 msgstr ""
 
-msgid "Fade Color: "
+msgid "2. Enter name for this layer"
 msgstr ""
 
-msgid "Fade amount: "
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
+msgid "imagery fade"
+msgstr ""
+
+msgid "Fade Color: "
+msgstr ""
+
+msgid "Fade amount: "
 msgstr ""
 
 msgid "Soft"
@@ -10587,6 +10773,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10608,6 +10806,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10650,9 +10851,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr ""
 
@@ -10677,36 +10875,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11642,6 +11825,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] ""
@@ -11750,6 +11941,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12003,6 +12197,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12539,6 +12736,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12924,6 +13124,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13918,6 +14131,9 @@ msgstr ""
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr ""
+
 msgid "Blue:"
 msgstr ""
 
@@ -13957,7 +14173,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -13969,9 +14185,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14080,6 +14293,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14093,12 +14309,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14135,10 +14357,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14165,6 +14393,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14189,7 +14420,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14204,6 +14435,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14216,12 +14450,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14242,6 +14470,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14274,10 +14505,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14307,6 +14535,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14322,154 +14556,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14484,9 +14724,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14616,6 +14865,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14631,7 +14895,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -14957,6 +15221,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15041,11 +15310,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15099,7 +15363,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15114,9 +15378,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15197,6 +15458,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15235,6 +15504,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15310,9 +15582,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15718,6 +15987,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15742,10 +16019,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15762,6 +16035,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15778,11 +16055,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15798,6 +16087,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15810,6 +16103,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15837,6 +16134,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16228,6 +16537,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16304,6 +16616,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr ""
 
@@ -16841,6 +17156,12 @@ msgstr ""
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17030,6 +17351,11 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
 msgstr ""
 
@@ -17083,6 +17409,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17224,13 +17554,127 @@ msgstr ""
 msgid "public"
 msgstr ""
 
-msgid "Pier"
+msgid "Marine Fuel"
 msgstr ""
 
-msgid "Lock Gate"
+msgid "Agip"
 msgstr ""
 
-msgid "Turning Point"
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
+msgid "Pier"
+msgstr ""
+
+msgid "Lock Gate"
+msgstr ""
+
+msgid "Turning Point"
 msgstr ""
 
 msgid "Slipway"
@@ -17340,6 +17784,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -17463,78 +17910,6 @@ msgstr ""
 msgid "Fuel"
 msgstr ""
 
-msgid "Agip"
-msgstr ""
-
-msgid "Aral"
-msgstr ""
-
-msgid "Avia"
-msgstr ""
-
-msgid "BP"
-msgstr ""
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr ""
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
 msgid "With shop"
 msgstr ""
 
@@ -17544,51 +17919,12 @@ msgstr ""
 msgid "kiosk"
 msgstr ""
 
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -17807,9 +18143,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17828,6 +18161,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18030,6 +18366,12 @@ msgstr ""
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18120,6 +18462,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18334,6 +18679,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18821,7 +19169,7 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
@@ -18830,43 +19178,70 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
-msgid "Glass"
+msgid "Cardboard"
 msgstr ""
 
-msgid "Paper"
+msgid "Electrical Appliances"
 msgstr ""
 
-msgid "Scrap Metal"
+msgid "Glass"
 msgstr ""
 
-msgid "container"
+msgid "Glass Bottles"
 msgstr ""
 
-msgid "centre"
+msgid "Green Waste"
 msgstr ""
 
-msgid "Waste Basket/Trash Can"
+msgid "Paper"
 msgstr ""
 
-msgid "Waste Disposal/Dumpster"
+msgid "Plastic"
 msgstr ""
 
-msgid "Sanitary Dump Station"
+msgid "Plastic Bottles"
 msgstr ""
 
-msgid "Suction pumpout"
+msgid "Plastic Packaging"
 msgstr ""
 
-msgid "Gravity drain for hose"
+msgid "Scrap Metal"
 msgstr ""
 
-msgid "Casette or Elsan Disposal"
+msgid "Shoes"
 msgstr ""
 
-msgid "Operation times"
+msgid "Small Appliances"
 msgstr ""
 
-msgid "Backrest"
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
+msgstr ""
+
+msgid "Waste Basket/Trash Can"
+msgstr ""
+
+msgid "Waste Disposal/Dumpster"
+msgstr ""
+
+msgid "Sanitary Dump Station"
+msgstr ""
+
+msgid "Suction pumpout"
+msgstr ""
+
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
+msgstr ""
+
+msgid "Operation times"
+msgstr ""
+
+msgid "Backrest"
 msgstr ""
 
 msgid "Amount of Seats"
@@ -19046,6 +19421,9 @@ msgstr ""
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr ""
 
@@ -19221,12 +19599,18 @@ msgstr ""
 msgid "Basketball"
 msgstr ""
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr ""
 
@@ -19242,13 +19626,13 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
@@ -19272,9 +19656,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19293,9 +19674,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -19368,6 +19746,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20688,9 +21074,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -21703,10 +22086,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22133,6 +22516,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22157,6 +22543,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22217,6 +22615,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22307,9 +22708,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22679,6 +23089,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22733,9 +23146,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23479,47 +23889,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23528,10 +23947,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24134,6 +24565,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr ""
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25231,374 +25665,680 @@ msgid ""
 "highlight tracks"
 msgstr ""
 
-msgid "Delete this"
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
 msgstr ""
 
-msgid "Delete this&older"
+msgid "Connecting"
 msgstr ""
 
-msgid "km/h"
+msgid "Connected"
 msgstr ""
 
-msgid "Track name: "
+msgid "no name"
 msgstr ""
 
-msgid "Update IRS adjustment layer"
+msgid "Live GPS"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid "Show GPS data."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Speed"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Course"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
+msgid "Explore"
 msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25619,6 +26359,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -25677,47 +26420,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -25950,6 +26652,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr ""
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27167,6 +27872,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27338,6 +28064,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27347,6 +28076,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27527,6 +28259,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27705,6 +28440,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27714,6 +28482,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -27950,9 +28721,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29435,9 +30203,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/nb.po b/i18n/po/nb.po
index d623ee3..c991828 100644
--- a/i18n/po/nb.po
+++ b/i18n/po/nb.po
@@ -7,16 +7,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
-"PO-Revision-Date: 2014-03-19 14:25+0000\n"
-"Last-Translator: Magnus Meyer Hustveit <Unknown>\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
+"PO-Revision-Date: 2015-07-22 20:56+0000\n"
+"Last-Translator: Andreas Bertheussen <andreas at elektronisk.org>\n"
 "Language-Team: Norwegian Bokmal <nb at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:51+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:54+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: nb\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -71,7 +71,7 @@ msgid "Cause: "
 msgstr "Grunn: "
 
 msgid "Executing platform startup hook"
-msgstr ""
+msgstr "Kjører plattformavhengig oppstartskode"
 
 msgid "Building main menu"
 msgstr "Bygger hovedmeny"
@@ -95,34 +95,34 @@ msgid "Loading imagery preferences"
 msgstr ""
 
 msgid "Updating user interface"
-msgstr ""
-
-msgid "{0} completed in {1}"
-msgstr ""
+msgstr "Oppdaterer brukergrensesnitt"
 
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "Overser feilutformet fil-URL: «{0}»"
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "Overser feilutformet URL: «{0}»"
 
 msgid "Warning"
 msgstr "Advarsel"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "Overser feilutformet fil-URL: «{0}»"
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr "Parameter \"downloadgps\" støtter ikke filnavn eller fil baner"
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "Overser feilutformet URL: «{0}»"
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
 "compatible) version of JOSM.</li></ul>More Info:"
 msgstr ""
+"<h2>JOSM trenger Java versjon {0}.</h2>Funnet versjon: {1}.<br>Du kan "
+"<ul><li>oppdatere din Java (JRE), eller</li><li>bruke en tidligere (Java {2}-"
+"kompatibel) versjon av JOSM.</li></ul>Mer informasjon:"
 
 msgid "Exit JOSM"
-msgstr ""
+msgstr "Avslutt JOSM"
 
 msgid "Continue, try anyway"
-msgstr ""
+msgstr "Fortsett, prøv allikevel"
 
 msgid "Error"
 msgstr "Feil"
@@ -225,28 +225,28 @@ msgid ""
 msgstr "Sett valgte kartobjekt til det som er valgt i lista ovenfor."
 
 msgid "Add imagery layer {0}"
-msgstr ""
+msgstr "Legg til bildelag {0}"
 
 msgid "Select image format for WMS layer"
-msgstr ""
+msgstr "Velg bildeformat for WMS-lag"
 
 msgid "Select WMS layers"
-msgstr ""
+msgstr "Velg WMS-lag"
 
 msgid "Add layers"
-msgstr ""
+msgstr "Legg til lag"
 
 msgid "Invalid service URL."
-msgstr ""
+msgstr "Ugyldig URL for tjeneste."
 
 msgid "WMS Error"
-msgstr ""
+msgstr "WMS-feil"
 
 msgid "Could not retrieve WMS layer list."
-msgstr ""
+msgstr "Kunne ikke hente liste med WMS-lag"
 
 msgid "Could not parse WMS layer list."
-msgstr ""
+msgstr "Kunne ikke tolke liste med WMS-lag"
 
 msgid "Add Node..."
 msgstr "Legg til node …"
@@ -273,11 +273,13 @@ msgid "Please select at least four nodes."
 msgstr "Velg minst fire noder."
 
 msgid "Cannot determine center of selected nodes."
-msgstr ""
+msgstr "Kan ikke finne midtpunktet til de valgte nodene."
 
 msgid ""
 "One or more nodes involved in this action is outside of the downloaded area."
 msgstr ""
+"Én eller flere noder som inngår i denne handlingen ligger utenfor det "
+"nedlastede området."
 
 msgid "Align Nodes in Line"
 msgstr "Juster nodene til en linje"
@@ -386,11 +388,13 @@ msgid ""
 "Could not combine ways<br>(They could not be merged into a single string of "
 "nodes)"
 msgstr ""
+"Kunne ikke kombinere linjer<br>(de kunne ikke slås sammen til én enkelt "
+"rekke med noder)"
 
 msgid "Combine {0} way"
 msgid_plural "Combine {0} ways"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Kombiner {0} linje"
+msgstr[1] "Kombiner {0} linjer"
 
 msgid "Please select at least two ways to combine."
 msgstr "Velg minst to linjer å sammenføye."
@@ -405,10 +409,10 @@ msgid "Please select something to copy."
 msgstr "Velg noe å kopiere."
 
 msgid "Copy Coordinates"
-msgstr ""
+msgstr "Kopier Koordinater"
 
 msgid "Copy coordinates of selected nodes to clipboard."
-msgstr ""
+msgstr "Kopier de valgte nodene sine koordinater til utklippstavla"
 
 msgid "Create Circle"
 msgstr "Lag en sirkel"
@@ -450,6 +454,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr "Fordel Noder"
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr "Fordel valgte noder med lik avstand etter en linje."
 
@@ -506,10 +513,10 @@ msgid "Exit the application."
 msgstr "Avslutt programmet."
 
 msgid "Expert Mode"
-msgstr ""
+msgstr "Ekspertmodus"
 
 msgid "Enable/disable expert mode"
-msgstr ""
+msgstr "Slå på/av ekspertmodus"
 
 msgid "Follow line"
 msgstr ""
@@ -521,7 +528,7 @@ msgid "Follow"
 msgstr ""
 
 msgid "Fullscreen view"
-msgstr ""
+msgstr "Fullskjermsvisning"
 
 msgid "Toggle fullscreen view"
 msgstr "Slå på og av fullskjermvisning"
@@ -545,24 +552,24 @@ msgid "Display history information about OSM ways, nodes, or relations."
 msgstr "Vis historikk for OSMs noder, linjer eller relasjoner."
 
 msgid "Show history"
-msgstr ""
+msgstr "Vis historikk"
 
 msgid "History (web)"
-msgstr ""
+msgstr "Historikk (nettleser)"
 
 msgid ""
 "Display history information about OSM ways, nodes, or relations in web "
 "browser."
-msgstr ""
+msgstr "Vis historikk for linjer, noder eller relasjoner i nettleser."
 
 msgid "New offset"
 msgstr ""
 
 msgid "Adjust the position of this imagery layer"
-msgstr ""
+msgstr "Juster posisjonen til dette bildelaget"
 
 msgid "Adjust imagery offset"
-msgstr ""
+msgstr "Juster forskyvning av bildelag"
 
 msgid "OK"
 msgstr "OK"
@@ -573,33 +580,38 @@ msgid ""
 "You can also enter east and north offset in the {0} coordinates.\n"
 "If you want to save the offset as bookmark, enter the bookmark name below"
 msgstr ""
+"Bruk piltastene eller dra bildelaget med musa for å forskyve bildelaget.\n"
+"Du kan også fylle inn øst- og nordforskyvning i {0}-koordinater.\n"
+"Hvis du vil lagre forskyvingen, kan du gi den et navn under."
 
 msgid "Offset: "
-msgstr ""
+msgstr "Forskyvning: "
 
 msgid "Bookmark name: "
-msgstr ""
+msgstr "Navn: "
 
 msgid "Overwrite"
 msgstr "Skriv over"
 
 msgid "Offset bookmark already exists. Overwrite?"
-msgstr ""
+msgstr "En forskyvning ved dette navn finnes allerede. Vil du overskrive?"
 
 msgid "Advanced info"
-msgstr ""
+msgstr "Avansert informasjon"
 
 msgid ""
 "Display advanced object information about OSM nodes, ways, or relations."
-msgstr ""
+msgstr "Vis avansert objektinformasjon for noder, linjer eller relasjoner."
 
 msgid "Advanced info (web)"
-msgstr ""
+msgstr "Avansert informasjon (nettleser)"
 
 msgid ""
 "Display object information about OSM nodes, ways, or relations in web "
 "browser."
 msgstr ""
+"Vis avansert objektinformasjon for noder, linjer eller relasjoner i "
+"nettleseren."
 
 msgid "Join overlapping Areas"
 msgstr "Slå sammen områder med overlapp"
@@ -639,7 +651,7 @@ msgid "No intersection found. Nothing was changed."
 msgstr "Fant ingen skjæring. Ingen endringer ble gjort."
 
 msgid "Move tags from ways to relations"
-msgstr ""
+msgstr "Flytt egenskaper fra linjer til relasjoner"
 
 msgid "Reverting changes"
 msgstr ""
@@ -654,7 +666,7 @@ msgid "Assemble new polygons"
 msgstr ""
 
 msgid "Delete relations"
-msgstr ""
+msgstr "Slett relasjoner"
 
 msgid "Delete Ways that are not part of an inner multipolygon"
 msgstr "Slett linjer som ikke er del av en indre multipolygon."
@@ -885,16 +897,16 @@ msgid "Cannot move objects outside of the world."
 msgstr "Kan ikke flytte objekter utenfor kartet."
 
 msgid "Move Node..."
-msgstr ""
+msgstr "Flytt Node..."
 
 msgid "Edit latitude and longitude of a node."
-msgstr ""
+msgstr "Endre koordinatene til en node."
 
 msgid "New Layer"
 msgstr "Nytt lag"
 
 msgid "Create a new map layer."
-msgstr ""
+msgstr "Opprett et nytt kartlag."
 
 msgid "URL Files"
 msgstr ""
@@ -926,10 +938,10 @@ msgid "no importer"
 msgstr ""
 
 msgid "does not exist"
-msgstr ""
+msgstr "finnes ikke"
 
 msgid "<html>Cannot open directory ''{0}''.<br>Please select a file.</html>"
-msgstr ""
+msgstr "<html>Kan ikke åpne mappe ''{0}''.<br>Vennligst velg en fil.</html>"
 
 msgid "Open file"
 msgstr "Åpne fil"
@@ -952,13 +964,13 @@ msgid "Separate Layer"
 msgstr "Separat lag"
 
 msgid "Select if the data should be downloaded into a new layer"
-msgstr ""
+msgstr "Velg hvis innholdet skal lastes ned i et eget lag"
 
 msgid "Enter URL to download:"
 msgstr "Oppgi URL for nedlasting:"
 
 msgid "Enter an URL from where data should be downloaded"
-msgstr ""
+msgstr "Oppgi link til innholdet som skal lastes ned"
 
 msgid "Download Location"
 msgstr "Last ned sted"
@@ -1035,6 +1047,30 @@ msgid ""
 msgstr ""
 
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
+msgstr "Vennligst velg linjer med vinkler på omtrent 90 eller 180 grader."
+
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
 msgstr ""
 
 msgid "Paste"
@@ -1081,27 +1117,31 @@ msgid "Preferences"
 msgstr "Innstillinger"
 
 msgid "Purge..."
-msgstr ""
+msgstr "Glem..."
 
 msgid "Forget objects but do not delete them on server when uploading."
-msgstr ""
+msgstr "Glem objektene, men ikke slett dem fra tjeneren ved opplasting."
 
 msgid "Purge"
-msgstr ""
+msgstr "Glem"
 
 msgid "Confirm Purging"
-msgstr ""
+msgstr "Bekreft glemming"
 
 msgid ""
 "This operation makes JOSM forget the selected objects.<br> They will be "
 "removed from the layer, but <i>not</i> deleted<br> on the server when "
 "uploading."
 msgstr ""
+"Denne operasjonen gjør at JOSM glemmer de valgte objektene.<br>De fjernes "
+"fra laget, men blir <i>ikke</i> slettet fra serveren ved opplasting."
 
 msgid ""
 "The following dependent objects will be purged<br> in addition to the "
 "selected objects:"
 msgstr ""
+"Følgende avhengige objekter vil bli<br>glemt i tillegg til de valgte "
+"objektene:"
 
 msgid "Add to selection"
 msgstr ""
@@ -1110,6 +1150,8 @@ msgid ""
 "Some of the objects are modified.<br> Proceed, if these changes should be "
 "discarded.</html>"
 msgstr ""
+"Noen av objektene er endret.<br>Endringene vil forkastes ved å "
+"fortsette.</html>"
 
 msgid "Clear Undo/Redo buffer"
 msgstr ""
@@ -1136,22 +1178,22 @@ msgid "Could not rename file ''{0}''"
 msgstr "Kunne ikke endre filnavn \"{0}\""
 
 msgid "Report bug"
-msgstr ""
+msgstr "Raporter feil"
 
 msgid "Report a ticket to JOSM bugtracker"
 msgstr ""
 
 msgid "Restart"
-msgstr ""
+msgstr "Start JOSM på nytt"
 
 msgid "Restart the application."
-msgstr ""
+msgstr "Start JOSM på nytt."
 
 msgid "Click to restart later."
-msgstr ""
+msgstr "Velg for å starte på nytt senere."
 
 msgid "Reverse way"
-msgstr ""
+msgstr "Reverser linje"
 
 msgid "Reverse Ways"
 msgstr "Snu retning på linjer"
@@ -1217,49 +1259,49 @@ msgid "Select non-branching sequences of ways"
 msgstr ""
 
 msgid "Load Session"
-msgstr ""
+msgstr "Åpne Økt"
 
 msgid "Load a session from file."
-msgstr ""
+msgstr "Åpne en økt fra fil."
 
 msgid "Open session"
-msgstr ""
+msgstr "Åpne økt"
 
 msgid "Loading session ''{0}''"
-msgstr ""
+msgstr "Åpner økt \"{0}\""
 
 msgid "Data Error"
 msgstr ""
 
 msgid "IO Error"
-msgstr ""
+msgstr "I/U-feil"
 
 msgid "<html>Could not load session file ''{0}''.<br>Error is:<br>{1}</html>"
-msgstr ""
+msgstr "<html>Kunne ikke laste øktfil \"{0}\".<br>Feilmelding:<br>{1}</html>"
 
 msgid "Save Session As..."
-msgstr ""
+msgstr "Lagre Økt Som..."
 
 msgid "Save the current session to a new file."
-msgstr ""
+msgstr "Lagre gjeldende økt til en ny fil."
 
 msgid "Session file (archive) (*.joz)"
-msgstr ""
+msgstr "Øktfil (komprimert) (*.joz)"
 
 msgid "Session file (*.jos)"
-msgstr ""
+msgstr "Øktfil (*.jos)"
 
 msgid "Save session"
-msgstr ""
+msgstr "Lagre økt"
 
 msgid "<html>Could not save session file ''{0}''.<br>Error is:<br>{1}</html>"
-msgstr ""
+msgstr "<html>Kunne ikke lagre øktfil \"{0}\".<br>Feilmelding:<br>{1}</html>"
 
 msgid "Save Session"
-msgstr ""
+msgstr "Lagre Økt"
 
 msgid "Save As"
-msgstr ""
+msgstr "Lagre Som"
 
 msgid "Layers"
 msgstr "Lag"
@@ -1964,15 +2006,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr "Avslutt tegning."
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -1994,6 +2027,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2088,10 +2130,10 @@ msgid "Cannot delete node that is referenced by multiple objects"
 msgstr ""
 
 msgid "Cannot delete node that has tags"
-msgstr ""
+msgstr "Kan ikke slette node som har egenskaper"
 
 msgid "Parallel"
-msgstr ""
+msgstr "Parallell"
 
 msgid "Make parallel copies of ways"
 msgstr ""
@@ -2112,9 +2154,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2332,9 +2371,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr "regulært uttrykk"
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2548,6 +2593,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2594,6 +2643,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr "Uventet symbol: {0}"
 
@@ -3050,6 +3102,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3167,10 +3237,44 @@ msgctxt "compass"
 msgid "E"
 msgstr "Ø"
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "HTTP error {0} when loading tiles"
+msgstr ""
+
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3360,6 +3464,12 @@ msgstr "tekst"
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3387,13 +3497,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -4016,9 +4126,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr "Egenskaper uten verdier"
 
-msgid "Invalid property key"
-msgstr "Ulovlig egenskapsnøkkel"
-
 msgid "Invalid white space in property key"
 msgstr "Ulovlig mellomrom i Nøkkel"
 
@@ -4028,12 +4135,24 @@ msgstr "Egenskap Verdi starter eller slutter med mellomrom"
 msgid "Property values contain HTML entity"
 msgstr "Egenskap Verdi inneholder HTML koding"
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr "Nøkkel «{0}» finnes ikke i objektmalene"
 
 msgid "Presets do not contain property key"
 msgstr "Objektmalene inneholder ikke Nøkkelen"
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr "Verdi «{0}» for nøkkel «{1}» finnes ikke i objektmalene"
 
@@ -4214,6 +4333,9 @@ msgstr "Linjenode nær annen linje"
 msgid "Connected way end node near other way"
 msgstr "Knyttet endenode nær annen linje"
 
+msgid "Unconnected nodes without physical tags"
+msgstr ""
+
 msgid "Untagged and unconnected nodes"
 msgstr ""
 
@@ -4221,9 +4343,6 @@ msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 "Sjekker for noder uten egenskaper som heller ikke tilhører noen linje."
 
-msgid "Unconnected nodes without physical tags"
-msgstr ""
-
 msgid "No tags"
 msgstr ""
 
@@ -4420,6 +4539,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4633,45 +4753,56 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
-msgstr "Fil"
+msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
-msgstr "Vis"
+msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
-msgstr "Verktøy"
+msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
-msgstr "Utvalg"
+msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
-msgstr "Objektmaler"
+msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
+msgctxt "menu"
+msgid "Help"
+msgstr ""
+
 msgid "Menu: {0}"
 msgstr "Meny: {0}"
 
-msgid "Save and load the current session (list of layers, etc.)"
-msgstr ""
-
 msgid "Edit toolbar"
 msgstr ""
 
@@ -4693,8 +4824,9 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
-msgstr "Audio"
+msgstr ""
 
 msgid "Do not hide toolbar"
 msgstr ""
@@ -4815,58 +4947,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
+msgid " ({0})"
 msgstr ""
 
-msgid "Pos."
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "Role"
-msgstr "Rolle"
-
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5322,6 +5412,9 @@ msgstr "Behold tjenerens slettestatus"
 msgid "Undecide conflict between deleted state"
 msgstr "Fjern avgjørelse fra slettekonflikt"
 
+msgid "Role"
+msgstr "Rolle"
+
 msgid "Primitive"
 msgstr "Objekt"
 
@@ -5563,6 +5656,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr "Orig. linje"
 
@@ -5709,6 +5805,41 @@ msgstr "Løs konflikter"
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5812,7 +5943,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5940,6 +6071,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5949,17 +6085,48 @@ msgstr ""
 msgid "unknown"
 msgstr "ukjent"
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -6005,6 +6172,12 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr ""
 
@@ -6134,6 +6307,12 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
+msgid "Mini map"
+msgstr ""
+
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
 msgid "List of notes"
 msgstr ""
 
@@ -6192,10 +6371,15 @@ msgstr "Objekt ID:"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr ""
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6224,6 +6408,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr "Relasjoner: {0}"
 
+msgid "Selection"
+msgstr "Utvalg"
+
 msgid "Open a selection list window."
 msgstr "Åpne vindu med en utvalgsliste"
 
@@ -6314,6 +6501,12 @@ msgstr "Åpne valideringsvindu"
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr "Korriger"
 
@@ -6813,7 +7006,7 @@ msgid "Please enter or paste an URL to retrieve changesets from the OSM API."
 msgstr ""
 
 msgid "Examples"
-msgstr ""
+msgstr "Eksempler"
 
 msgid ""
 "Note that changeset queries are currently always submitted to ''{0}'', "
@@ -6861,7 +7054,7 @@ msgid "Member Of"
 msgstr "Medlem av"
 
 msgid "Position"
-msgstr ""
+msgstr "Posisjon"
 
 msgid "<different>"
 msgstr "<different>"
@@ -6908,6 +7101,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6950,7 +7149,7 @@ msgid "Overwrite key"
 msgstr ""
 
 msgid "Replace"
-msgstr ""
+msgstr "Erstatt"
 
 msgid "The new key is already used, overwrite values?"
 msgstr ""
@@ -6999,14 +7198,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7179,6 +7377,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7723,6 +7927,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr "Node {0}"
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8035,21 +8242,23 @@ msgid "Cancel authentication"
 msgstr ""
 
 msgid "Downloading file"
-msgstr ""
+msgstr "Laster ned fil"
 
 msgid "Downloading File {0}: {1} bytes..."
-msgstr ""
+msgstr "Laster ned fil {0}: {1} byte..."
 
 msgid "Download finished"
-msgstr ""
+msgstr "Nedlasting ferdig"
 
 msgid "Unpacking {0} into {1}"
-msgstr ""
+msgstr "Pakker ut {0} til {1}"
 
 msgid ""
 "Cannot download file ''{0}''. Its download link ''{1}'' is not a valid URL. "
 "Skipping download."
 msgstr ""
+"Kan ikke laste ned fil \"{0}\". nedlastingslenken \"{1}\" er ikke en gyldig. "
+"Hopper over."
 
 msgid ""
 "Could not retrieve the list of your open changesets because<br>JOSM does not "
@@ -8057,42 +8266,47 @@ msgid ""
 "not entitled<br>to know the identity of the user on whose behalf you are "
 "working."
 msgstr ""
+"Kunne ikke hente listen over åpne endringssett fordi JOSM<br>ikke kjenner "
+"din identitet.<br>Du har enten valgt å arbeide anonymt, eller har ikke "
+"rettigheter<br>til å se identiteten til brukeren du jobber på vegne av."
 
 msgid "Missing user identity"
-msgstr ""
+msgstr "Manglende brukeridentitet"
 
 msgid ""
 "Failed to retrieve user infos for the current JOSM user. Exception was: {0}"
 msgstr ""
 
 msgid "Download objects"
-msgstr ""
+msgstr "Last ned objekter"
 
 msgid "Initializing nodes to download ..."
 msgstr ""
 
 msgid "Object could not be downloaded"
 msgid_plural "Some objects could not be downloaded"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Objektet kunne ikke lastes ned"
+msgstr[1] "Noen objekter kunne ikke lastes ned"
 
 msgid "One object could not be downloaded.<br>"
 msgid_plural "{0} objects could not be downloaded.<br>"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Ett objekt kunne ikke lastes ned.<br>"
+msgstr[1] "{0} objekter kunne ikke lastes ned.<br>"
 
 msgid ""
 "The server replied with response code 404.<br>This usually means, the server "
 "does not know an object with the requested id."
 msgstr ""
+"Tjeneren svarte med feilkode 404.<br>Dette betyr vanligvis at tjeneren ikke "
+"kjenner til et objekt med angitt id."
 
 msgid "missing objects:"
-msgstr ""
+msgstr "manglende objekter:"
 
 msgid "One downloaded object is deleted."
 msgid_plural "{0} downloaded objects are deleted."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Ett nedlasted objekt er slettet."
+msgstr[1] "{0} nedlastede objekter er slettet."
 
 msgid ""
 "Either edit the path manually in the text field or click the \"...\" button "
@@ -8100,7 +8314,7 @@ msgid ""
 msgstr ""
 
 msgid "The bold text is the name of the layer."
-msgstr ""
+msgstr "Fet skrift angir lagets navn."
 
 msgid "Click here to choose save path"
 msgstr ""
@@ -8109,7 +8323,7 @@ msgid "Layer ''{0}'' is not backed by a file"
 msgstr ""
 
 msgid "File ''{0}'' is not writable. Please enter another file name."
-msgstr ""
+msgstr "Fil \"{0}\" kan ikke skrives til. Vennligst angi et annet filnavn."
 
 msgid "Click cell to change the file path."
 msgstr ""
@@ -8580,6 +8794,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr "Hent alle kartbilder"
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr "Bytt oppløsning"
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr "Last Kartbilde"
+
+msgid "Increase zoom"
+msgstr "Zoom inn"
+
+msgid "Decrease zoom"
+msgstr "Zoom ut"
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr "Tøm bildehurtiglager"
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr "Tilpass farge"
 
@@ -8633,6 +8947,9 @@ msgstr "Lagre GPX-fil"
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8653,7 +8970,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8738,140 +9055,40 @@ msgstr ""
 msgid "Save OSM file"
 msgstr "Lagre OSM-fil"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
+msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
+msgid "Validation errors"
+msgstr "Valideringsfeil"
 
-msgid "Auto Zoom"
-msgstr ""
+msgid "No validation errors"
+msgstr "Ingen valideringsfeil"
 
-msgid "Auto load tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
-msgid "Show Errors"
+msgid ""
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Load Tile"
-msgstr "Last Kartbilde"
+msgid "Correlate to GPX"
+msgstr "Juster til GPX"
 
-msgid "Show Tile Info"
-msgstr ""
+msgid "Invalid timezone"
+msgstr "Ugyldig tidssone"
 
-msgid "Load All Tiles"
-msgstr "Hent alle kartbilder"
+msgid "Invalid offset"
+msgstr "Ugyldig forskyvning"
 
-msgid "Load All Error Tiles"
+msgid "Correlate images with GPX track"
+msgstr "Jevnfør bilder med GPX spor"
+
+msgid "Try Again"
 msgstr ""
 
-msgid "Increase zoom"
-msgstr "Zoom inn"
-
-msgid "Decrease zoom"
-msgstr "Zoom ut"
-
-msgid "Snap to tile size"
-msgstr ""
-
-msgid "Flush Tile Cache"
-msgstr "Tøm bildehurtiglager"
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "EPSG:4326 and Mercator projection are supported"
-msgstr ""
-
-msgid "Validation errors"
-msgstr "Valideringsfeil"
-
-msgid "No validation errors"
-msgstr "Ingen valideringsfeil"
-
-msgid "Blank Layer"
-msgstr "Blankt lag"
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr "WMS lag ({0}) laster automatisk ned i zoom {1}"
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr "WMS lag ({0})  laster ned i zoom {1}"
-
-msgid "Download visible tiles"
-msgstr "Last ned synlige kartbilder"
-
-msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr "Du har bestilt for stort område. Zoom inn eller bytt oppløsning"
-
-msgid "Change resolution"
-msgstr "Bytt oppløsning"
-
-msgid "Reload erroneous tiles"
-msgstr "Last ned kartbilder med feil på nytt"
-
-msgid "Alpha channel"
-msgstr "Alpha channel"
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
-msgstr ""
-
-msgid "Automatic downloading"
-msgstr "Automatisk nedlasting"
-
-msgid "Zoom to native resolution"
-msgstr ""
-
-msgid "Supported projections are: {0}"
-msgstr ""
-
-msgid "Unsupported WMS file version; found {0}, expected {1}"
-msgstr "Støtter ikke WMS fil versjon;fant {0}, ønsker {1}"
-
-msgid "Save WMS file"
-msgstr ""
-
-msgid "Correlate to GPX"
-msgstr "Juster til GPX"
+msgid "No images could be matched!"
+msgstr ""
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
 msgstr "GPX Filer (*.gpx *.gpx.gz)"
@@ -8961,24 +9178,9 @@ msgstr "Tidssone: "
 msgid "Offset:"
 msgstr "Forskyvning:"
 
-msgid "Correlate images with GPX track"
-msgstr "Jevnfør bilder med GPX spor"
-
 msgid "Correlate"
 msgstr "Jevnfør"
 
-msgid "Invalid timezone"
-msgstr "Ugyldig tidssone"
-
-msgid "Invalid offset"
-msgstr "Ugyldig forskyvning"
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9180,9 +9382,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr "JPEG-bilder (*.jpg)"
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9245,9 +9444,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr "Max areal per forespørsel:"
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9881,15 +10077,15 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr "Du må starte JOSM for at enkelte innstillingene skal tre i kraft."
 
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr ""
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -10704,6 +10900,21 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
+msgid "1. Enter getCapabilities URL"
+msgstr ""
+
+msgid "2. Enter name for this layer"
+msgstr ""
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr ""
 
@@ -10722,6 +10933,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10743,6 +10966,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10785,9 +11011,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr "Lag"
 
@@ -10812,36 +11035,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr "Nedlaster:"
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr "Overlapp kartbilder"
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11063,7 +11271,7 @@ msgid "Update plugins"
 msgstr ""
 
 msgid "Search:"
-msgstr ""
+msgstr "Søk:"
 
 msgid "Enter a search expression"
 msgstr ""
@@ -11605,36 +11813,37 @@ msgstr ""
 "programmer."
 
 msgid "Available rules:"
-msgstr ""
+msgstr "Tilgjengelige regler:"
 
 msgid "Active rules:"
-msgstr ""
+msgstr "Aktive regler:"
 
 msgid "Add a new rule by entering filename or URL"
-msgstr ""
+msgstr "Legg til ny regel ved å angi filnavn eller lenke"
 
 msgid "New rule entry:"
-msgstr ""
+msgstr "Ny regel:"
 
 msgid "Remove the selected rules from the list of active rules"
-msgstr ""
+msgstr "Fjern valgt regel fra lista over aktive regler"
 
 msgid "Edit the filename or URL for the selected active rule"
-msgstr ""
+msgstr "Rediger filnavnet eller lenka for den valgte aktive regelen"
 
 msgid "Add the selected available rules to the list of active rules"
-msgstr ""
+msgstr "Legg valgte tilgjengelige regler til i lista over aktive regler"
 
 msgid "Reloads the list of available rules from ''{0}''"
-msgstr ""
+msgstr "Oppdaterer lista over tilgjengelige regler fra \"{0}\""
 
 msgid "Loading rule sources from ''{0}''"
-msgstr ""
+msgstr "Henter regler fra \"{0}\""
 
 msgid ""
 "<html>Failed to load the list of rule sources "
 "from<br>''{0}''.<br><br>Details (untranslated):<br>{1}</html>"
 msgstr ""
+"<html>Kunne ikke hente regler fra<br>''{0}''.<br><br>Detaljer:<br>{1}</html>"
 
 msgid "Warning: illegal format of entry in rule list ''{0}''. Got ''{1}''"
 msgstr ""
@@ -11779,6 +11988,14 @@ msgstr "Bruk Objektmal"
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] "Endre {0} objekt"
@@ -11887,6 +12104,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr "Objektmaler"
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12149,6 +12369,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12692,6 +12915,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr "Støtter ikke WMS fil versjon;fant {0}, ønsker {1}"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -13077,6 +13303,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13986,82 +14225,82 @@ msgid "Abort file chooser dialog."
 msgstr ""
 
 msgid "Create New Folder"
-msgstr ""
+msgstr "Opprett ny mappe"
 
 msgid "Delete File"
-msgstr ""
+msgstr "Slett fil"
 
 msgid "Enter file name:"
-msgstr ""
+msgstr "Angi filnavn"
 
 msgid "Enter path or folder name:"
-msgstr ""
+msgstr "Angi bane eller mappenavn"
 
 msgid "Error "
-msgstr ""
+msgstr "Feil "
 
 msgid "Error renaming file \"{0}\" to \"{1}\""
-msgstr ""
+msgstr "Feil i omdøping av fil \"{0}\" til \"{1}\""
 
 msgid "File name:"
-msgstr ""
+msgstr "Filnavn:"
 
 msgid "File Name:"
-msgstr ""
+msgstr "Filnavn:"
 
 msgid "FileChooser help."
 msgstr ""
 
 msgid "Files"
-msgstr ""
+msgstr "Filer"
 
 msgid "Files of type:"
-msgstr ""
+msgstr "Filer av type:"
 
 msgid "Files of Type:"
-msgstr ""
+msgstr "Filer av type:"
 
 msgid "Filter:"
-msgstr ""
+msgstr "Filter:"
 
 msgid "Folders"
-msgstr ""
+msgstr "Mapper"
 
 msgid "Home"
-msgstr ""
+msgstr "Hjem"
 
 msgid "Look in:"
-msgstr ""
+msgstr "Se i:"
 
 msgid "Look In:"
-msgstr ""
+msgstr "Se i:"
 
 msgid "Modified"
-msgstr ""
+msgstr "Endret"
 
 msgid "New Folder"
-msgstr ""
+msgstr "Ny mappe"
 
 msgid "Open selected file"
-msgstr ""
+msgstr "Åpne valgt fil"
 
 msgid "Open selected file."
-msgstr ""
+msgstr "Åpne valgt fil"
 
 msgid "Refresh"
 msgstr "Oppdater"
 
 msgid "Rename File"
-msgstr ""
+msgstr "Endre filnavn"
 
 msgid "Rename file \"{0}\" to"
 msgstr ""
 
 msgid "Save in:"
-msgstr ""
+msgstr "Lagre i:"
 
 msgid "Save In:"
-msgstr ""
+msgstr "Lagre i:"
 
 msgid "Save selected file."
 msgstr ""
@@ -14070,10 +14309,10 @@ msgid "Selection:"
 msgstr ""
 
 msgid "Size"
-msgstr ""
+msgstr "Størrelse"
 
 msgid "Up One Level"
-msgstr ""
+msgstr "Opp et nivå"
 
 msgid "Update"
 msgstr "Oppdater"
@@ -14081,26 +14320,29 @@ msgstr "Oppdater"
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr "Vis"
+
 msgid "Blue:"
-msgstr ""
+msgstr "Blå:"
 
 msgid "Color Name:"
-msgstr ""
+msgstr "Fargenavn:"
 
 msgid "Green:"
-msgstr ""
+msgstr "Grønn:"
 
 msgid "Hue:"
-msgstr ""
+msgstr "Fargetone:"
 
 msgid "GTK Color Chooser"
 msgstr ""
 
 msgid "Red:"
-msgstr ""
+msgstr "Rød:"
 
 msgid "Saturation:"
-msgstr ""
+msgstr "Metning:"
 
 msgid "Landsat"
 msgstr ""
@@ -14120,7 +14362,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -14132,9 +14374,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14243,6 +14482,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14256,12 +14498,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14298,10 +14546,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14328,6 +14582,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14352,7 +14609,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14367,6 +14624,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14379,12 +14639,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14405,6 +14659,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14437,10 +14694,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14470,6 +14724,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14485,154 +14745,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14647,9 +14913,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14779,6 +15054,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14794,7 +15084,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -15120,6 +15410,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15207,11 +15502,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15270,7 +15560,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15288,9 +15578,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15373,6 +15660,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15413,6 +15708,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15491,9 +15789,6 @@ msgstr "Last enkelt ned data langs strekninger av sammenknyttede veier."
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15899,6 +16194,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15923,10 +16226,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15943,6 +16242,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15959,11 +16262,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15979,6 +16294,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15991,6 +16310,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -16018,6 +16341,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr "Gebyr"
 
@@ -16409,6 +16744,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr "Småvei"
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr "Passeringspunkter"
 
@@ -16485,6 +16823,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr "Vei (ukjent type)"
 
@@ -17022,6 +17363,12 @@ msgstr "Fotoboks"
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17211,8 +17558,13 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
-msgstr "Vann"
+msgstr ""
 
 msgid "Drain"
 msgstr "Drenering"
@@ -17264,6 +17616,10 @@ msgstr "Drikkevannskilde"
 msgid "Covered Reservoir"
 msgstr "Tildekt drikkevannskilde"
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17405,6 +17761,120 @@ msgstr ""
 msgid "public"
 msgstr ""
 
+msgid "Marine Fuel"
+msgstr ""
+
+msgid "Agip"
+msgstr ""
+
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
 msgid "Pier"
 msgstr "Brygge"
 
@@ -17521,6 +17991,9 @@ msgstr "Støtdemper"
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr "Taubaner og -heiser"
 
@@ -17644,132 +18117,21 @@ msgstr ""
 msgid "Fuel"
 msgstr "Bensinstasjon"
 
-msgid "Agip"
+msgid "With shop"
 msgstr ""
 
-msgid "Aral"
-msgstr ""
-
-msgid "Avia"
-msgstr ""
-
-msgid "BP"
-msgstr ""
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr ""
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
-msgid "With shop"
-msgstr ""
-
-msgid "convenience"
+msgid "convenience"
 msgstr ""
 
 msgid "kiosk"
 msgstr ""
 
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -17988,9 +18350,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr "rutesegment"
-
 msgid "stop position"
 msgstr ""
 
@@ -18009,6 +18368,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr "rutesegment"
+
 msgid "Route Master"
 msgstr ""
 
@@ -18211,6 +18573,12 @@ msgstr "Hotell"
 msgid "Stars"
 msgstr "Stjerner"
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr "Motell"
 
@@ -18301,6 +18669,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18515,6 +18886,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -19002,8 +19376,8 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
-msgstr "Returstasjon"
+msgid "Recycling Container"
+msgstr ""
 
 msgid "Batteries"
 msgstr "Batterier"
@@ -19011,19 +19385,46 @@ msgstr "Batterier"
 msgid "Cans"
 msgstr "Bokser"
 
+msgid "Cardboard"
+msgstr ""
+
+msgid "Electrical Appliances"
+msgstr ""
+
 msgid "Glass"
 msgstr "Glass"
 
+msgid "Glass Bottles"
+msgstr ""
+
+msgid "Green Waste"
+msgstr ""
+
 msgid "Paper"
 msgstr "Papir"
 
+msgid "Plastic"
+msgstr ""
+
+msgid "Plastic Bottles"
+msgstr ""
+
+msgid "Plastic Packaging"
+msgstr ""
+
 msgid "Scrap Metal"
 msgstr "Metall"
 
-msgid "container"
+msgid "Shoes"
+msgstr "Sko"
+
+msgid "Small Appliances"
+msgstr ""
+
+msgid "Waste"
 msgstr ""
 
-msgid "centre"
+msgid "Recycling Centre"
 msgstr ""
 
 msgid "Waste Basket/Trash Can"
@@ -19227,6 +19628,9 @@ msgstr "Bueskyting"
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr "Klatring"
 
@@ -19402,11 +19806,17 @@ msgstr "Baseball"
 msgid "Basketball"
 msgstr "Basketball"
 
+msgid "Handball"
+msgstr "Håndball"
+
 msgid "Volleyball"
-msgstr ""
+msgstr "Volleyball"
 
 msgid "Beach Volleyball"
-msgstr ""
+msgstr "Sandvolleyball"
+
+msgid "Billiards"
+msgstr "Billiard"
 
 msgid "Golf"
 msgstr "Golf"
@@ -19423,13 +19833,13 @@ msgstr ""
 msgid "Cricket"
 msgstr "Cricket"
 
-msgid "Cricket Nets"
-msgstr "Cricketnett"
-
 msgid "Croquet"
 msgstr "Krocket"
 
-msgid "Hockey"
+msgid "Field Hockey"
+msgstr ""
+
+msgid "Ice Hockey"
 msgstr "Ishockey"
 
 msgid "Pelota"
@@ -19439,7 +19849,7 @@ msgid "Racquetball"
 msgstr ""
 
 msgid "Table Tennis/Ping-Pong"
-msgstr ""
+msgstr "Bordtennis"
 
 msgid "Tennis"
 msgstr "Tennis"
@@ -19453,9 +19863,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19472,10 +19879,7 @@ msgid "track"
 msgstr ""
 
 msgid "RC Car"
-msgstr ""
-
-msgid "Raceway"
-msgstr ""
+msgstr "Fjernstyrt bil"
 
 msgid "Man Made"
 msgstr "Menneskeskapt"
@@ -19549,6 +19953,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -19629,16 +20041,16 @@ msgid "emergency"
 msgstr ""
 
 msgid "Entrance number"
-msgstr ""
+msgstr "Inngangsnummer"
 
 msgid "Flat numbers"
-msgstr ""
+msgstr "Leilighetsnumre"
 
 msgid "Tower"
 msgstr "Tårn"
 
 msgid "Tower type"
-msgstr ""
+msgstr "Type tårn"
 
 msgid "communication"
 msgstr "kommunikasjon"
@@ -19647,13 +20059,13 @@ msgid "observation"
 msgstr "observasjon"
 
 msgid "Flagpole"
-msgstr ""
+msgstr "Flaggstang"
 
 msgid "Works"
 msgstr "Fabrikk"
 
 msgid "Chimney"
-msgstr ""
+msgstr "Skorsteinspipe"
 
 msgid "Windmill"
 msgstr "Vindmølle"
@@ -19729,7 +20141,7 @@ msgid "Crane"
 msgstr "Kran"
 
 msgid "Mineshaft"
-msgstr ""
+msgstr "Gruvesjakt"
 
 msgid "Function"
 msgstr ""
@@ -19741,10 +20153,10 @@ msgid "air"
 msgstr ""
 
 msgid "Depth in meters"
-msgstr ""
+msgstr "Dybde i meter"
 
 msgid "Resource"
-msgstr ""
+msgstr "Ressurs"
 
 msgid "aggregate"
 msgstr ""
@@ -19801,13 +20213,13 @@ msgid "Visible Headframe"
 msgstr ""
 
 msgid "Disused"
-msgstr ""
+msgstr "Ikke i bruk"
 
 msgid "Adit"
-msgstr ""
+msgstr "Gruvestoll"
 
 msgid "Length in meters"
-msgstr ""
+msgstr "Lengde i meter"
 
 msgid "Water Tower"
 msgstr "Vanntårn"
@@ -19816,94 +20228,94 @@ msgid "Water Works"
 msgstr ""
 
 msgid "Wastewater Treatment Plant"
-msgstr ""
+msgstr "Vannrenseanlegg"
 
 msgid "Watermill"
-msgstr ""
+msgstr "Vannmølle"
 
 msgid "Fountain"
 msgstr "Fontene"
 
 msgid "Water Well"
-msgstr ""
+msgstr "Brønn"
 
 msgid "Lighthouse"
 msgstr "Fyrtårn"
 
 msgid "Street Lamp"
-msgstr ""
+msgstr "Gatelykt"
 
 msgid "Mo-Fr 22:00-05:00"
 msgstr ""
 
 msgid "Monitoring Station"
-msgstr ""
+msgstr "Målestasjon"
 
 msgid "Monitoring:"
-msgstr ""
+msgstr "Måler:"
 
 msgid "Water level"
-msgstr ""
+msgstr "Vannstand"
 
 msgid "Tide Level"
-msgstr ""
+msgstr "Tidevann"
 
 msgid "Groundwater"
-msgstr ""
+msgstr "Grunnvann"
 
 msgid "Traffic"
-msgstr ""
+msgstr "Trafikk"
 
 msgid "Air Quality"
-msgstr ""
+msgstr "Luftkvalitet"
 
 msgid "Noise"
-msgstr ""
+msgstr "Støy"
 
 msgid "GPS Signals"
-msgstr ""
+msgstr "GPS-signaler"
 
 msgid "GLONASS Signals"
-msgstr ""
+msgstr "GLONASS-signaler"
 
 msgid "Galileo Signals"
-msgstr ""
+msgstr "Galileo-signaler"
 
 msgid "Weather"
-msgstr ""
+msgstr "Vær"
 
 msgid "Radiation"
-msgstr ""
+msgstr "Stråling"
 
 msgid "Seismic Activity"
-msgstr ""
+msgstr "Seismisk aktivitet"
 
 msgid "Recording:"
-msgstr ""
+msgstr "Styring:"
 
 msgid "Automated"
-msgstr ""
+msgstr "Atomatisk"
 
 msgid "Manually"
-msgstr ""
+msgstr "Manuell"
 
 msgid "Remote"
-msgstr ""
+msgstr "Fjernstyrt"
 
 msgid "Display:"
-msgstr ""
+msgstr "Visning:"
 
 msgid "Analog"
-msgstr ""
+msgstr "Analog"
 
 msgid "Digital"
-msgstr ""
+msgstr "Digital"
 
 msgid "Survey Point"
 msgstr "Trigonometrisk punkt"
 
 msgid "Surveillance Camera"
-msgstr ""
+msgstr "Overvåkningskamera"
 
 msgid "indoor"
 msgstr ""
@@ -19963,7 +20375,7 @@ msgid "Inclination in degrees"
 msgstr ""
 
 msgid "Bridges"
-msgstr ""
+msgstr "Broer"
 
 msgid "aqueduct"
 msgstr "akvadukt"
@@ -20807,7 +21219,7 @@ msgid "Shops"
 msgstr "Butikker"
 
 msgid "Food"
-msgstr ""
+msgstr "Mat"
 
 msgid "Supermarket"
 msgstr "Supermarked"
@@ -20819,34 +21231,34 @@ msgid "Kiosk"
 msgstr "Kiosk"
 
 msgid "Bakery"
-msgstr ""
+msgstr "Bakeri"
 
 msgid "Butcher"
 msgstr "Slakter"
 
 msgid "Seafood"
-msgstr ""
+msgstr "Sjømat"
 
 msgid "Deli (Fine Food)"
-msgstr ""
+msgstr "Delkatesser"
 
 msgid "Candy Store"
-msgstr ""
+msgstr "Godteri"
 
 msgid "Tea"
-msgstr ""
+msgstr "Te"
 
 msgid "Coffee"
-msgstr ""
+msgstr "Kaffe"
 
 msgid "Public Market"
-msgstr ""
+msgstr "Markedsplass"
 
 msgid "Organic"
 msgstr "Økologisk"
 
 msgid "Greengrocer"
-msgstr ""
+msgstr "Grønnsakshandel"
 
 msgid "Farm Stand"
 msgstr ""
@@ -20864,14 +21276,11 @@ msgid "Beverages"
 msgstr "Drikke"
 
 msgid "Wine"
-msgstr ""
+msgstr "Vin"
 
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr "Sko"
-
 msgid "Outdoor"
 msgstr "Friluftsutstyr"
 
@@ -20882,13 +21291,13 @@ msgid "Laundry"
 msgstr "Vaskeri"
 
 msgid "Tailor"
-msgstr ""
+msgstr "Skredder"
 
 msgid "Fabric"
-msgstr ""
+msgstr "Stoff"
 
 msgid "Electronic"
-msgstr ""
+msgstr "Elektronisk"
 
 msgid "Computer"
 msgstr "Dataelektronikk"
@@ -20897,10 +21306,10 @@ msgid "Electronics"
 msgstr "Elektronikk"
 
 msgid "Mobile Phone"
-msgstr ""
+msgstr "Mobiltelefon"
 
 msgid "Vacuum Cleaner"
-msgstr ""
+msgstr "Støvsuger"
 
 msgid "Hifi"
 msgstr "Hifi"
@@ -20909,10 +21318,10 @@ msgid "Video"
 msgstr "Video"
 
 msgid "Video Games"
-msgstr ""
+msgstr "Videospill"
 
 msgid "Music"
-msgstr ""
+msgstr "Musikk"
 
 msgid "Cash"
 msgstr "Valuta"
@@ -20927,34 +21336,34 @@ msgid "Money Exchange"
 msgstr "Vekslingssted"
 
 msgid "Pawnbroker"
-msgstr ""
+msgstr "Pantelåner"
 
 msgid "Home decoration"
-msgstr ""
+msgstr "Interiørvarer"
 
 msgid "Furniture"
 msgstr "Møbler"
 
 msgid "Kitchen"
-msgstr ""
+msgstr "Kjøkken"
 
 msgid "Curtain"
 msgstr ""
 
 msgid "Art"
-msgstr ""
+msgstr "Kunst"
 
 msgid "Frame"
 msgstr ""
 
 msgid "Bed"
-msgstr ""
+msgstr "Seng"
 
 msgid "Interior Decoration"
 msgstr ""
 
 msgid "Antiques"
-msgstr ""
+msgstr "Antikviteter"
 
 msgid "Printed Material"
 msgstr ""
@@ -20978,19 +21387,19 @@ msgid "Department Store"
 msgstr ""
 
 msgid "Mall"
-msgstr ""
+msgstr "Kjøpesenter"
 
 msgid "Chemist"
 msgstr "Hygiene"
 
 msgid "Hairdresser/Barber"
-msgstr ""
+msgstr "Frisør/barbersalong"
 
 msgid "Beauty"
-msgstr ""
+msgstr "Skjønnhet"
 
 msgid "Tattoo"
-msgstr ""
+msgstr "Tatovering"
 
 msgid "Optician"
 msgstr "Optiker"
@@ -21002,7 +21411,7 @@ msgid "Medical Supply"
 msgstr ""
 
 msgid "Jewellery"
-msgstr ""
+msgstr "Gullsmed"
 
 msgid "Gift/Souvenir"
 msgstr ""
@@ -21023,7 +21432,7 @@ msgid "Hardware"
 msgstr "Jernvarehandel"
 
 msgid "Paint"
-msgstr ""
+msgstr "Maling"
 
 msgid "Travel Agency"
 msgstr "Reisebyrå"
@@ -21047,10 +21456,10 @@ msgid "Bag"
 msgstr ""
 
 msgid "Pet"
-msgstr ""
+msgstr "Dyrebutikk"
 
 msgid "Funeral Directors"
-msgstr ""
+msgstr "Begravelsesbyrå"
 
 msgid "Vending Machine"
 msgstr ""
@@ -21137,16 +21546,16 @@ msgid "Maestro"
 msgstr ""
 
 msgid "Visa Debit"
-msgstr ""
+msgstr "Visa Debet"
 
 msgid "Visa Electron"
-msgstr ""
+msgstr "Visa Electron"
 
 msgid "Credit cards"
 msgstr "Kredittkort"
 
 msgid "American Express"
-msgstr ""
+msgstr "American Express"
 
 msgid "Diners Club"
 msgstr ""
@@ -21158,10 +21567,10 @@ msgid "JCB"
 msgstr ""
 
 msgid "Mastercard"
-msgstr ""
+msgstr "Mastercard"
 
 msgid "Visa"
-msgstr ""
+msgstr "Visa"
 
 msgid "Electronic purses and Charge cards"
 msgstr "Elektronisk lommebok eller betalingskort"
@@ -21248,7 +21657,7 @@ msgid "Postal Code"
 msgstr ""
 
 msgid "National Park"
-msgstr ""
+msgstr "Nasjonalpark"
 
 msgid "Protected Area"
 msgstr ""
@@ -21285,7 +21694,7 @@ msgstr "Land"
 
 msgctxt "place"
 msgid "State"
-msgstr ""
+msgstr "Stat"
 
 msgid "Region"
 msgstr "Region"
@@ -21312,10 +21721,10 @@ msgid "Suburb"
 msgstr "Forstad/bydel"
 
 msgid "Neighbourhood"
-msgstr ""
+msgstr "Nabolag"
 
 msgid "Farm"
-msgstr ""
+msgstr "Gård"
 
 msgid "A farm within a bigger settlement"
 msgstr ""
@@ -21377,10 +21786,10 @@ msgid "A mountain or hill ridge."
 msgstr ""
 
 msgid "Valley"
-msgstr ""
+msgstr "Dal"
 
 msgid "A low area between hills."
-msgstr ""
+msgstr "Et lavt område mellom fjell."
 
 msgid "Cave Entrance"
 msgstr "Huleinngang"
@@ -21395,22 +21804,22 @@ msgid "Islet"
 msgstr "Holme"
 
 msgid "Nature"
-msgstr ""
+msgstr "Natur"
 
 msgid "Tree"
 msgstr "Tre"
 
 msgid "A single tree."
-msgstr ""
+msgstr "Et enkelt tre."
 
 msgid "Botanical Name"
 msgstr "Botanisk navn"
 
 msgid "Tree Row"
-msgstr ""
+msgstr "Trerekke"
 
 msgid "A line of trees."
-msgstr ""
+msgstr "En rekke med trær."
 
 msgid "Wood"
 msgstr "Skogsområde"
@@ -21534,10 +21943,10 @@ msgid ""
 msgstr ""
 
 msgid "Tourism attraction"
-msgstr ""
+msgstr "Severdighet"
 
 msgid "Stone"
-msgstr ""
+msgstr "Stein"
 
 msgid ""
 "A single notable free-standing rock, which may differ from the composition "
@@ -21557,7 +21966,7 @@ msgid "Meadow"
 msgstr "Eng"
 
 msgid "Orchard"
-msgstr ""
+msgstr "Frukthage"
 
 msgid "Vineyard"
 msgstr "Vingård"
@@ -21590,7 +21999,7 @@ msgid "Recreation Ground"
 msgstr "Friluftsområde"
 
 msgid "Residential Area"
-msgstr ""
+msgstr "Boligområde"
 
 msgid "Graveyard"
 msgstr "Gravlund"
@@ -21599,7 +22008,7 @@ msgid "Cemetery"
 msgstr "Kirkegård"
 
 msgid "Religious"
-msgstr ""
+msgstr "Religiøs"
 
 msgid "Retail"
 msgstr "Forretninger"
@@ -21611,10 +22020,10 @@ msgid "Industrial"
 msgstr "Industriområde"
 
 msgid "Garages"
-msgstr ""
+msgstr "Garasje"
 
 msgid "Railway Land"
-msgstr ""
+msgstr "Jernbane"
 
 msgid "Military"
 msgstr "Militært"
@@ -21635,28 +22044,28 @@ msgid "Quarry"
 msgstr "Steinbrudd"
 
 msgid "Annotation"
-msgstr ""
+msgstr "Merknad"
 
 msgid "Alternative name"
-msgstr ""
+msgstr "Alternativt navn"
 
 msgid "Historical name"
-msgstr ""
+msgstr "Historisk navn"
 
 msgid "Local name"
-msgstr ""
+msgstr "Lokalt navn"
 
 msgid "Regional name"
-msgstr ""
+msgstr "Regionalt navn"
 
 msgid "National name"
-msgstr ""
+msgstr "Nasjonalt navn"
 
 msgid "International name"
-msgstr ""
+msgstr "Internasjonalt navn"
 
 msgid "Official name"
-msgstr ""
+msgstr "Offisielt navn"
 
 msgid "Common name abbreviation"
 msgstr ""
@@ -21690,7 +22099,7 @@ msgstr ""
 
 msgctxt "addr:"
 msgid "State"
-msgstr ""
+msgstr "Stat"
 
 msgid "AL"
 msgstr ""
@@ -21884,10 +22293,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22294,48 +22703,63 @@ msgid "Decreasing house numbers in addresses interpolation"
 msgstr ""
 
 msgid "{0} without {1}"
-msgstr ""
+msgstr "{0} uten {1}"
 
 msgid "{0} without {1} or {2}"
-msgstr ""
+msgstr "{0} uten {1} eller {2}"
 
 msgid "{0} without {1}, {2} or {3}"
-msgstr ""
+msgstr "{0} uten {1}, {2} eller {3}"
 
 msgid "{0} together with {1}"
-msgstr ""
+msgstr "{0} sammen med {1}"
 
 msgid "incomplete object: only {0}"
-msgstr ""
+msgstr "ufullstendig objekt: kun {0}"
 
 msgid "incomplete object: only {0} and {1}"
-msgstr ""
+msgstr "ufullstendig objekt: kun {0} og {1}"
 
 msgid "{0} together with addr:*"
+msgstr "{0} sammen med addr:*"
+
+msgid "{0} together with {1} and conflicting values"
 msgstr ""
 
 msgid "{0} on suspicious object"
-msgstr ""
+msgstr "{0} på mistenksomt objekt"
 
 msgid "restaurant without name"
-msgstr ""
+msgstr "restaurant uten navn"
 
 msgid "{0} used with {1}"
-msgstr ""
+msgstr "{0} brukt med {1}"
 
 msgid "natural water used for swimming pool"
-msgstr ""
+msgstr "naturlig vann angitt for svømmebasseng"
 
 msgid "sport without physical feature"
 msgstr ""
 
 msgid "{0} should be on the node where {1} and {2} intersect"
-msgstr ""
+msgstr "{0} bør være på noden der {1} og {2} krysser"
 
 msgid "alternative name without {0}"
-msgstr ""
+msgstr "alternativt navn uten {0}"
 
 msgid "incomplete usage of {0} on a way without {1}"
+msgstr "ufullstendig bruk av {0} på linje uten {1}"
+
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
 msgstr ""
 
 msgid "{0}={1} is deprecated"
@@ -22346,6 +22770,7 @@ msgstr ""
 
 msgid "''{0}'' is meaningless, use more specific tags, e.g. ''{1}''"
 msgstr ""
+"''{0}'' er meningsløst, bruk mer spesifike egenskaper, f.eks. \"{1}\""
 
 msgid ""
 "''{0}'' does not specify the official mode of transportation, use ''{1}'' "
@@ -22356,6 +22781,8 @@ msgid ""
 "{0}={1} is unspecific. Instead of ''{1}'' please give more information about "
 "what exactly should be fixed."
 msgstr ""
+"{0}={1} er uspesifikt. I stedet for \"{1}\" bør det oppgis mer informasjon "
+"om nøyaktig hva som bør rettes."
 
 msgid "{0}={1} is deprecated. Please use instead a multipolygon."
 msgstr ""
@@ -22370,23 +22797,26 @@ msgstr ""
 
 msgid "{0}={1} is unspecific. Please replace ''{1}'' by a specific value."
 msgstr ""
+"{0}={1} er uspesifikt. Vennligst erstatt \"{1}\" med en bestemt verdi."
 
 msgid "{0} should be replaced with {1}"
-msgstr ""
+msgstr "{0} bør erstattes med {1}"
 
 msgid "{0} = {1}; remove {0}"
-msgstr ""
+msgstr "{0} = {1}; fjern {0}"
 
 msgid ""
 "{0}={1} is unspecific. Please replace ''{1}'' by ''left'', ''right'' or "
 "''both''."
 msgstr ""
+"{0}={1} er uspesifikt. Vennligst erstatt \"{1}\" med \"left\", \"right\" "
+"eller \"both\"."
 
 msgid "Unspecific tag {0}"
-msgstr ""
+msgstr "Uspesifik egenskap {0}"
 
 msgid "Definition of {0} is unclear"
-msgstr ""
+msgstr "Definisjonen til {0} er uklar"
 
 msgid ""
 "{0} is not recommended. Use the Reverse Ways function from the Tools menu."
@@ -22398,26 +22828,29 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr "{0} er upresis"
+
 msgid "{0} on a node. Should be used on a way."
-msgstr ""
+msgstr "{0} på en node. Bør brukes på linje."
 
 msgid "{0} on a node. Should be drawn as an area."
 msgstr ""
 
 msgid "{0}=* on a node. Should be used in a relation"
-msgstr ""
+msgstr "{0}=* på en node. Bør brukes i en relasjon."
 
 msgid "{0} on a way. Should be used on a node."
-msgstr ""
+msgstr "{0} på en linje. Bør brukes på en node."
 
 msgid "{0} on a way. Should be used in a relation"
-msgstr ""
+msgstr "{0} på en linje. Bør brukes på en relasjon."
 
 msgid "{0} on a node"
-msgstr ""
+msgstr "{0} på en node"
 
 msgid "Building inside building"
-msgstr ""
+msgstr "Bygning inne i en bygning"
 
 msgid "Overlapping Water Areas"
 msgstr ""
@@ -22426,7 +22859,7 @@ msgid "Overlapping Areas"
 msgstr ""
 
 msgid "{0} inside {1}"
-msgstr ""
+msgstr "{0} inne i {1}"
 
 msgid "Overlapping Identical Natural Areas"
 msgstr ""
@@ -22488,9 +22921,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22862,6 +23304,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22916,9 +23361,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23662,47 +24104,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23711,10 +24162,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debug"
+msgstr ""
+
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24335,6 +24798,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr "Blankt lag"
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr "WMS lag ({0}), {1} kartutsnitt er lastet"
 
@@ -25625,197 +26091,503 @@ msgstr "sørøst"
 msgid "coastline"
 msgstr "kystlinje"
 
-msgid "land"
-msgstr "land"
+msgid "land"
+msgstr "land"
+
+msgid "Maximum number of segments per way"
+msgstr "Maksimalt antall segmenter per linje"
+
+msgid "Maximum number of nodes in initial trace"
+msgstr "Maksimalt antall noder i første opptegning"
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr "Max gråverdi for tolking som vann (0-255)"
+
+msgid "Line simplification accuracy (degrees)"
+msgstr "Nøyaktighetsgrense for forenkling av linje (grader)"
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr "Oppløsning på Landsat kartbilder (pixler pr grad)"
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr "Størrelsen på Landsat kartbilder (pixels)"
+
+msgid "Shift all traces to east (degrees)"
+msgstr "Flytt alle spor mot øst (grader)"
+
+msgid "Shift all traces to north (degrees)"
+msgstr "Flytt alle spor mot nord (grader)"
+
+msgid "Direction to search for land"
+msgstr "Retning for søk etter land"
+
+msgid "Tag ways as"
+msgstr "Egenskap for linjer"
+
+msgid "WMS Layer"
+msgstr "WMS Lag"
+
+msgid "Maximum cache size (MB)"
+msgstr "Max størrelse på mellomlager (MB)"
+
+msgid "Maximum cache age (days)"
+msgstr "Max alder på mellomlager (dager)"
+
+msgid "Source text"
+msgstr "Beskrivelse av kilde"
+
+msgid "Lakewalker Plugin Preferences"
+msgstr "Innstillinger for Lakewalker tilleggsprogram"
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr "Et tilleggsprogram for å vektorisere vannkant på Landsat bilder."
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+"Maksimalt antall segmenter tillatt i hver opptegnede linje. Standard er 250."
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+"Max antall Noder som genereres (før linjer forenkles).Standard er 50000."
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+"Max gråskala verdi som tolkes som vannflate (basert på Landsat IR-1 data). "
+"Kan være 0-255. Standard 90."
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+"Nøyaktighet på Douglas-Peucker linjeforenkling, målt i grader.<br>Lave "
+"verdier gir flere noder og mer nøyaktige linjer. Standard er 0.0003."
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+"Oppløsningen på Landsat kartbilder, oppgitt i pixler per grad. Standard: "
+"4000."
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr "Størrelsen på Landsat bilder i pixler. Standard: 2000"
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr "Parallellflytt alle punkt mot øst (Grader).  Standard: 0."
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr "Parallellflytt alle punkt mot nord (Grader).  Standard: 0."
+
+msgid "Direction to search for land. Default east."
+msgstr "Retning for søk etter land. Standard: øst."
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+"Linjer gis egenskapen   water, coastline, land eller nothing. Standard: "
+"water."
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr "Hvilket WMS lag danner bakgrunn for vektorisering. Standard: IR1."
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr "Max størrelse på hver mappe for mellomlager i bytes. Standard: 300MB"
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr "Max alder for hver fil i mellomlager i dager. Standard: 100"
+
+msgid "Data source text. Default is Landsat."
+msgstr "Beskrivelse av datakilde. Standard: Landsat."
+
+msgid "Downloading image tile..."
+msgstr "Laster ned bildefil …"
+
+msgid "Could not acquire image"
+msgstr "Kunne ikke hente bilde"
+
+msgid "Connection Failed"
+msgstr "Tilkobling mislykkes"
+
+msgid "Not connected"
+msgstr "Ikke Tilkoblet"
+
+msgid "Connecting"
+msgstr "Kobler opp"
+
+msgid "Connected"
+msgstr "Tilkoblet"
+
+msgid "no name"
+msgstr ""
+
+msgid "Live GPS"
+msgstr "Live GPS"
+
+msgid "Show GPS data."
+msgstr "Vis GPS-data"
+
+msgid "Status"
+msgstr "Status"
+
+msgid "Way Info"
+msgstr "Linjeinformasjon"
+
+msgid "Speed"
+msgstr "Fart"
+
+msgid "Course"
+msgstr "Kurs"
+
+msgid "LiveGPS layer"
+msgstr "LiveGPS-lag"
+
+msgid "Capture GPS Track"
+msgstr "Lagre GPS spor"
+
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgstr "Koble til gpsd-tjener og vis nåværende posisjon i LiveGPS-lag"
+
+msgid "Center Once"
+msgstr "Sentrer GPS nå"
+
+msgid "Center the LiveGPS layer to current position."
+msgstr "Sentrer LiveGPS-laget til nåværende position."
+
+msgid "Auto-Center"
+msgstr "Auto-sentrer"
+
+msgid "Continuously center the LiveGPS layer to current position."
+msgstr "Sentrer LiveGPS-laget løpende til den nåværende posisjon."
+
+msgid "Open MapDust"
+msgstr ""
+
+msgid "MapDust bug reports"
+msgstr ""
+
+msgid "Activates the MapDust bug reporter plugin"
+msgstr ""
+
+msgid "Missing input data"
+msgstr ""
+
+msgid "Mapillary Images"
+msgstr ""
+
+msgid "Mapillary layer"
+msgstr ""
+
+msgid "Total images:"
+msgstr ""
+
+msgid "images"
+msgstr ""
+
+msgid "Mapillary"
+msgstr ""
+
+msgid "Create Mapillary layer"
+msgstr ""
+
+msgid "Start Mapillary layer"
+msgstr ""
+
+msgid "Download Mapillary images in current view"
+msgstr ""
+
+msgid "Export pictures"
+msgstr ""
+
+msgid "Export Mapillary pictures"
+msgstr ""
+
+msgid "Export images"
+msgstr ""
+
+msgid "Import pictures"
+msgstr ""
+
+msgid "Import local pictures"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer"
+msgstr ""
+
+msgid "Select pictures"
+msgstr ""
+
+msgid "Import pictures into sequence"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer in a sequence"
+msgstr ""
+
+msgid "Join mode"
+msgstr ""
+
+msgid "Join/unjoin pictures"
+msgstr ""
+
+msgid "Join Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures"
+msgstr ""
+
+msgid "Upload Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures."
+msgstr ""
+
+msgid "Walk mode"
+msgstr ""
+
+msgid "Start walk mode"
+msgstr ""
+
+msgid "Zoom to selected image"
+msgstr ""
+
+msgid "Zoom to the currently selected Mapillary image"
+msgstr ""
+
+msgid "Uploaded {0} images"
+msgstr ""
+
+msgid "Approve upload on the website"
+msgstr ""
+
+msgid "View in website"
+msgstr ""
+
+msgid "Copy key"
+msgstr ""
+
+msgid "Copy key tag"
+msgstr ""
+
+msgid "Edit on website"
+msgstr ""
+
+msgid "Export all images"
+msgstr ""
+
+msgid "Export selected sequence"
+msgstr ""
+
+msgid "Export selected images"
+msgstr ""
+
+msgid "Rewrite imported images"
+msgstr ""
+
+msgid "Select a folder"
+msgstr ""
+
+msgid "Explore"
+msgstr ""
+
+msgid "Select a directory"
+msgstr ""
+
+msgid "Speed limit"
+msgstr ""
+
+msgid "Give way"
+msgstr ""
+
+msgid "No entry"
+msgstr ""
+
+msgid "Intersection danger"
+msgstr ""
 
-msgid "Maximum number of segments per way"
-msgstr "Maksimalt antall segmenter per linje"
+msgid "Mandatory direction (any)"
+msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
-msgstr "Maksimalt antall noder i første opptegning"
+msgid "No turn"
+msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
-msgstr "Max gråverdi for tolking som vann (0-255)"
+msgid "Uneven road"
+msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
-msgstr "Nøyaktighetsgrense for forenkling av linje (grader)"
+msgid "No parking"
+msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
-msgstr "Oppløsning på Landsat kartbilder (pixler pr grad)"
+msgid "No overtaking"
+msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
-msgstr "Størrelsen på Landsat kartbilder (pixels)"
+msgid "Pedestrian crossing"
+msgstr ""
 
-msgid "Shift all traces to east (degrees)"
-msgstr "Flytt alle spor mot øst (grader)"
+msgid "Years"
+msgstr ""
 
-msgid "Shift all traces to north (degrees)"
-msgstr "Flytt alle spor mot nord (grader)"
+msgid "Months"
+msgstr ""
 
-msgid "Direction to search for land"
-msgstr "Retning for søk etter land"
+msgid "Days"
+msgstr ""
 
-msgid "Tag ways as"
-msgstr "Egenskap for linjer"
+msgid "Mapillary filter"
+msgstr ""
 
-msgid "WMS Layer"
-msgstr "WMS Lag"
+msgid "Open Mapillary filter dialog"
+msgstr ""
 
-msgid "Maximum cache size (MB)"
-msgstr "Max størrelse på mellomlager (MB)"
+msgid "Downloaded images"
+msgstr ""
 
-msgid "Maximum cache age (days)"
-msgstr "Max alder på mellomlager (dager)"
+msgid "Only images with signs"
+msgstr ""
 
-msgid "Source text"
-msgstr "Beskrivelse av kilde"
+msgid "Choose signs"
+msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
-msgstr "Innstillinger for Lakewalker tilleggsprogram"
+msgid "Mapillary history"
+msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
-msgstr "Et tilleggsprogram for å vektorisere vannkant på Landsat bilder."
+msgid "Open Mapillary history dialog"
+msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Open Mapillary window"
 msgstr ""
-"Maksimalt antall segmenter tillatt i hver opptegnede linje. Standard er 250."
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Mapillary dialog"
 msgstr ""
-"Max antall Noder som genereres (før linjer forenkles).Standard er 50000."
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Open Mapillary main dialog"
 msgstr ""
-"Max gråskala verdi som tolkes som vannflate (basert på Landsat IR-1 data). "
-"Kan være 0-255. Standard 90."
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Next picture"
 msgstr ""
-"Nøyaktighet på Douglas-Peucker linjeforenkling, målt i grader.<br>Lave "
-"verdier gir flere noder og mer nøyaktige linjer. Standard er 0.0003."
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Shows the next picture in the sequence"
 msgstr ""
-"Oppløsningen på Landsat kartbilder, oppgitt i pixler per grad. Standard: "
-"4000."
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
-msgstr "Størrelsen på Landsat bilder i pixler. Standard: 2000"
+msgid "Previous picture"
+msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
-msgstr "Parallellflytt alle punkt mot øst (Grader).  Standard: 0."
+msgid "Shows the previous picture in the sequence"
+msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
-msgstr "Parallellflytt alle punkt mot nord (Grader).  Standard: 0."
+msgid "Jump to red"
+msgstr ""
 
-msgid "Direction to search for land. Default east."
-msgstr "Retning for søk etter land. Standard: øst."
+msgid "Jumps to the picture at the other side of the red line"
+msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Jump to blue"
 msgstr ""
-"Linjer gis egenskapen   water, coastline, land eller nothing. Standard: "
-"water."
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
-msgstr "Hvilket WMS lag danner bakgrunn for vektorisering. Standard: IR1."
+msgid "Jumps to the picture at the other side of the blue line"
+msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
-msgstr "Max størrelse på hver mappe for mellomlager i bytes. Standard: 300MB"
+msgid "Stops the walk."
+msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
-msgstr "Max alder for hver fil i mellomlager i dager. Standard: 100"
+msgid "Play"
+msgstr ""
 
-msgid "Data source text. Default is Landsat."
-msgstr "Beskrivelse av datakilde. Standard: Landsat."
+msgid "Continues with the paused walk."
+msgstr ""
 
-msgid "Downloading image tile..."
-msgstr "Laster ned bildefil …"
+msgid "Pause"
+msgstr ""
 
-msgid "Could not acquire image"
-msgstr "Kunne ikke hente bilde"
+msgid "Pauses the walk."
+msgstr ""
 
-msgid "Connection Failed"
-msgstr "Tilkobling mislykkes"
+msgid "Reverse buttons position when displaying images."
+msgstr ""
 
-msgid "Not connected"
-msgstr "Ikke Tilkoblet"
+msgid "Display hour when the picture was taken"
+msgstr ""
 
-msgid "Connecting"
-msgstr "Kobler opp"
+msgid "Use 24 hour format"
+msgstr ""
 
-msgid "Connected"
-msgstr "Tilkoblet"
+msgid "Move to picture''s location with next/previous buttons"
+msgstr ""
 
-msgid "no name"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Live GPS"
-msgstr "Live GPS"
+msgid "Upload selected sequence"
+msgstr ""
 
-msgid "Show GPS data."
-msgstr "Vis GPS-data"
+msgid "Delete after upload"
+msgstr ""
 
-msgid "Status"
-msgstr "Status"
+msgid "Wait for full quality pictures"
+msgstr ""
 
-msgid "Way Info"
-msgstr "Linjeinformasjon"
+msgid "Follow selected image"
+msgstr ""
 
-msgid "Speed"
-msgstr "Fart"
+msgid "Go forward"
+msgstr ""
 
-msgid "Course"
-msgstr "Kurs"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "LiveGPS layer"
-msgstr "LiveGPS-lag"
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Capture GPS Track"
-msgstr "Lagre GPS spor"
+msgid "2 images joined"
+msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
-msgstr "Koble til gpsd-tjener og vis nåværende posisjon i LiveGPS-lag"
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Center Once"
-msgstr "Sentrer GPS nå"
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Center the LiveGPS layer to current position."
-msgstr "Sentrer LiveGPS-laget til nåværende position."
+msgid "2 images unjoined"
+msgstr ""
 
-msgid "Auto-Center"
-msgstr "Auto-sentrer"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
+msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
-msgstr "Sentrer LiveGPS-laget løpende til den nåværende posisjon."
+msgid "Downloading"
+msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25836,6 +26608,9 @@ msgstr "Utvalg Lengde"
 msgid "Selection Area"
 msgstr "Utvalg Areal"
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr "Vinkel"
 
@@ -25894,47 +26669,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -26167,6 +26901,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr "Verktøy"
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27385,6 +28122,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27556,6 +28314,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27565,6 +28326,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27745,6 +28509,9 @@ msgstr "Ny verdi for {0}"
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27923,6 +28690,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27932,6 +28732,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr "Lagre LiveData automatisk"
 
@@ -28172,9 +28975,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29659,9 +30459,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/nds.po b/i18n/po/nds.po
index c5f4436..d0f6722 100644
--- a/i18n/po/nds.po
+++ b/i18n/po/nds.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2009-11-29 09:01+0000\n"
 "Last-Translator: Dirk Stöcker <launchpad at dstoecker.de>\n"
 "Language-Team: German, Low <nds at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:50+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:54+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -97,19 +97,16 @@ msgstr ""
 msgid "Updating user interface"
 msgstr ""
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
 msgstr ""
 
 msgid "Warning"
 msgstr ""
 
-msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
+msgid "Ignoring malformed file URL: \"{0}\""
 msgstr ""
 
-msgid "Ignoring malformed URL: \"{0}\""
+msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 
 msgid ""
@@ -444,6 +441,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
 
@@ -1029,6 +1029,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr ""
 
@@ -1945,15 +1969,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr ""
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -1975,6 +1990,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2093,9 +2117,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2309,9 +2330,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr ""
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2525,6 +2552,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2567,6 +2598,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3016,6 +3050,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3133,10 +3185,44 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3326,6 +3412,12 @@ msgstr "Text"
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3353,13 +3445,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -3975,9 +4067,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -3987,12 +4076,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4173,13 +4274,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4377,6 +4478,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4590,43 +4692,54 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
 msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
 msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
 msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
 msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
-msgid "Menu: {0}"
+msgctxt "menu"
+msgid "Help"
 msgstr ""
 
-msgid "Save and load the current session (list of layers, etc.)"
+msgid "Menu: {0}"
 msgstr ""
 
 msgid "Edit toolbar"
@@ -4650,6 +4763,7 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
 msgstr ""
 
@@ -4772,58 +4886,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr ""
-
-msgid "Pos."
+msgid " ({0})"
 msgstr ""
 
-msgid "Role"
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5252,6 +5324,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr ""
+
 msgid "Primitive"
 msgstr ""
 
@@ -5492,6 +5567,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5638,6 +5716,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5741,7 +5854,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5869,6 +5982,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5878,17 +5996,48 @@ msgstr ""
 msgid "unknown"
 msgstr ""
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -5934,6 +6083,12 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr ""
 
@@ -6063,10 +6218,16 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
-msgid "List of notes"
+msgid "Mini map"
 msgstr ""
 
-msgid "Add comment"
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
+msgid "List of notes"
+msgstr ""
+
+msgid "Add comment"
 msgstr ""
 
 msgid "Comment"
@@ -6121,10 +6282,15 @@ msgstr ""
 msgid "Enter the ID of the object that should be downloaded"
 msgstr ""
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6153,6 +6319,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr ""
 
+msgid "Selection"
+msgstr ""
+
 msgid "Open a selection list window."
 msgstr ""
 
@@ -6243,6 +6412,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -6837,6 +7012,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6928,14 +7109,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7108,6 +7288,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7643,6 +7829,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8488,6 +8677,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr ""
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr ""
 
@@ -8541,6 +8830,9 @@ msgstr ""
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8561,7 +8853,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8644,80 +8936,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr ""
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-
-msgid "Auto Zoom"
-msgstr ""
-
-msgid "Auto load tiles"
-msgstr ""
-
-msgid "Show Errors"
-msgstr ""
-
-msgid "Load Tile"
-msgstr ""
-
-msgid "Show Tile Info"
-msgstr ""
-
-msgid "Load All Tiles"
-msgstr ""
-
-msgid "Load All Error Tiles"
-msgstr ""
-
-msgid "Increase zoom"
-msgstr ""
-
-msgid "Decrease zoom"
-msgstr ""
-
-msgid "Snap to tile size"
-msgstr ""
-
-msgid "Flush Tile Cache"
-msgstr ""
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
@@ -8727,56 +8945,30 @@ msgstr ""
 msgid "No validation errors"
 msgstr ""
 
-msgid "Blank Layer"
-msgstr ""
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "Download visible tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-
-msgid "Change resolution"
-msgstr ""
-
-msgid "Reload erroneous tiles"
-msgstr ""
-
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Automatic downloading"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Zoom to native resolution"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Supported projections are: {0}"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Save WMS file"
+msgid "Try Again"
 msgstr ""
 
-msgid "Correlate to GPX"
+msgid "No images could be matched!"
 msgstr ""
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
@@ -8863,24 +9055,9 @@ msgstr ""
 msgid "Offset:"
 msgstr ""
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
 msgid "Correlate"
 msgstr ""
 
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9074,9 +9251,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr ""
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9139,9 +9313,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9767,15 +9938,15 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr ""
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -10568,13 +10739,28 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
-msgid "imagery fade"
+msgid "1. Enter getCapabilities URL"
 msgstr ""
 
-msgid "Fade Color: "
+msgid "2. Enter name for this layer"
 msgstr ""
 
-msgid "Fade amount: "
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
+msgid "imagery fade"
+msgstr ""
+
+msgid "Fade Color: "
+msgstr ""
+
+msgid "Fade amount: "
 msgstr ""
 
 msgid "Soft"
@@ -10586,6 +10772,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10607,6 +10805,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10649,9 +10850,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr ""
 
@@ -10676,36 +10874,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11641,6 +11824,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] ""
@@ -11749,6 +11940,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12002,6 +12196,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12538,6 +12735,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12923,6 +13123,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13917,6 +14130,9 @@ msgstr ""
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr ""
+
 msgid "Blue:"
 msgstr ""
 
@@ -13956,7 +14172,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -13968,9 +14184,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14079,6 +14292,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14092,12 +14308,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14134,10 +14356,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14164,6 +14392,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14188,7 +14419,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14203,6 +14434,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14215,12 +14449,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14241,6 +14469,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14273,10 +14504,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14306,6 +14534,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14321,154 +14555,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14483,9 +14723,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14615,6 +14864,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14630,7 +14894,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -14956,6 +15220,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15040,11 +15309,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15098,7 +15362,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15113,9 +15377,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15196,6 +15457,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15234,6 +15503,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15309,9 +15581,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15717,6 +15986,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15741,10 +16018,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15761,6 +16034,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15777,11 +16054,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15797,6 +16086,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15809,6 +16102,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15836,6 +16133,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16227,6 +16536,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16303,6 +16615,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr ""
 
@@ -16840,6 +17155,12 @@ msgstr ""
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17029,8 +17350,13 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
 msgid "Water"
-msgstr "Water"
+msgstr ""
+
+msgctxt "sub group"
+msgid "Water"
+msgstr ""
 
 msgid "Drain"
 msgstr ""
@@ -17082,6 +17408,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17223,13 +17553,127 @@ msgstr ""
 msgid "public"
 msgstr ""
 
-msgid "Pier"
+msgid "Marine Fuel"
 msgstr ""
 
-msgid "Lock Gate"
+msgid "Agip"
 msgstr ""
 
-msgid "Turning Point"
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
+msgid "Pier"
+msgstr ""
+
+msgid "Lock Gate"
+msgstr ""
+
+msgid "Turning Point"
 msgstr ""
 
 msgid "Slipway"
@@ -17339,6 +17783,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -17462,78 +17909,6 @@ msgstr ""
 msgid "Fuel"
 msgstr ""
 
-msgid "Agip"
-msgstr ""
-
-msgid "Aral"
-msgstr ""
-
-msgid "Avia"
-msgstr ""
-
-msgid "BP"
-msgstr ""
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr ""
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
 msgid "With shop"
 msgstr ""
 
@@ -17543,51 +17918,12 @@ msgstr ""
 msgid "kiosk"
 msgstr ""
 
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -17806,9 +18142,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17827,6 +18160,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18029,6 +18365,12 @@ msgstr ""
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18119,6 +18461,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18333,6 +18678,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18820,7 +19168,7 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
@@ -18829,40 +19177,67 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
-msgid "Glass"
+msgid "Cardboard"
 msgstr ""
 
-msgid "Paper"
+msgid "Electrical Appliances"
 msgstr ""
 
-msgid "Scrap Metal"
+msgid "Glass"
 msgstr ""
 
-msgid "container"
+msgid "Glass Bottles"
 msgstr ""
 
-msgid "centre"
+msgid "Green Waste"
 msgstr ""
 
-msgid "Waste Basket/Trash Can"
+msgid "Paper"
 msgstr ""
 
-msgid "Waste Disposal/Dumpster"
+msgid "Plastic"
 msgstr ""
 
-msgid "Sanitary Dump Station"
+msgid "Plastic Bottles"
 msgstr ""
 
-msgid "Suction pumpout"
+msgid "Plastic Packaging"
 msgstr ""
 
-msgid "Gravity drain for hose"
+msgid "Scrap Metal"
 msgstr ""
 
-msgid "Casette or Elsan Disposal"
+msgid "Shoes"
 msgstr ""
 
-msgid "Operation times"
+msgid "Small Appliances"
+msgstr ""
+
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
+msgstr ""
+
+msgid "Waste Basket/Trash Can"
+msgstr ""
+
+msgid "Waste Disposal/Dumpster"
+msgstr ""
+
+msgid "Sanitary Dump Station"
+msgstr ""
+
+msgid "Suction pumpout"
+msgstr ""
+
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
+msgstr ""
+
+msgid "Operation times"
 msgstr ""
 
 msgid "Backrest"
@@ -19045,6 +19420,9 @@ msgstr ""
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr ""
 
@@ -19220,12 +19598,18 @@ msgstr ""
 msgid "Basketball"
 msgstr ""
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr ""
 
@@ -19241,13 +19625,13 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
@@ -19271,9 +19655,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19292,9 +19673,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -19367,6 +19745,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20687,9 +21073,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -21702,10 +22085,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22132,6 +22515,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22156,6 +22542,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22216,6 +22614,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22306,9 +22707,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22678,6 +23088,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22732,9 +23145,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23478,47 +23888,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
+msgstr ""
+
+msgid "Color Threshold"
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Use HSV based algorithm"
 msgstr ""
 
-msgid "merge nodes"
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23527,10 +23946,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24133,6 +24564,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr ""
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25230,374 +25664,680 @@ msgid ""
 "highlight tracks"
 msgstr ""
 
-msgid "Delete this"
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
 msgstr ""
 
-msgid "Delete this&older"
+msgid "Connecting"
 msgstr ""
 
-msgid "km/h"
+msgid "Connected"
 msgstr ""
 
-msgid "Track name: "
+msgid "no name"
 msgstr ""
 
-msgid "Update IRS adjustment layer"
+msgid "Live GPS"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid "Show GPS data."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Speed"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Course"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
+msgid "Explore"
 msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25618,6 +26358,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -25676,47 +26419,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -25949,6 +26651,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr ""
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27166,6 +27871,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27337,6 +28063,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27346,6 +28075,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27526,6 +28258,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27704,6 +28439,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27713,6 +28481,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -27949,9 +28720,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29434,9 +30202,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/nl.po b/i18n/po/nl.po
index 3a0a563..2b43f47 100644
--- a/i18n/po/nl.po
+++ b/i18n/po/nl.po
@@ -7,16 +7,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
-"PO-Revision-Date: 2015-05-11 17:09+0000\n"
-"Last-Translator: DiGro <Unknown>\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
+"PO-Revision-Date: 2015-10-07 09:47+0000\n"
+"Last-Translator: Martien <Unknown>\n"
 "Language-Team: Dutch\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:38+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:39+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: nl\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -98,23 +98,20 @@ msgstr "Afbeeldingsvoorkeuren laden"
 msgid "Updating user interface"
 msgstr "Interface bijwerken"
 
-msgid "{0} completed in {1}"
-msgstr "{0} voltooid in {1}"
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "Ongeldige URL voor bestand negeren: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "Ongeldige URL \"{0}\" wordt genegeerd"
 
 msgid "Warning"
 msgstr "Waarschuwing"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "Ongeldige URL voor bestand negeren: \"{0}\""
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 "Parameter \"downloadgps\" accepteert geen bestandsnamen of URL''s voor "
 "bestanden"
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "Ongeldige URL \"{0}\" wordt genegeerd"
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -470,6 +467,9 @@ msgstr "paneel Schakelvensters"
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "paneel Schakelvensters , kaartweergave maximaliseren"
 
+msgid "Distribute Nodes"
+msgstr "Knopen verdelen"
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr "Verdeel de geselecteerde knopen op gelijke afstanden langs een lijn."
 
@@ -1141,6 +1141,31 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr "Selecteer wegen met hoeken van ongeveer 90 of 180 graden."
 
+msgid "Download from Overpass API ..."
+msgstr "Downloaden vanaf Overpass API ..."
+
+msgid "Download map data from Overpass API server."
+msgstr "Download kaartgegevens vanaf server van Overpass API."
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+"Bouwt een query in Overpass met behulp van de query-assistent Overpass Turbo"
+
+msgid "Build query"
+msgstr "Query nouwen"
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr "<html>De assistent van Overpass kon de volgende query niet parsen:"
+
+msgid "Parse error"
+msgstr "Fout bij parsen"
+
+msgid "Overpass query: "
+msgstr "Overpass query: "
+
+msgid "Overpass server: "
+msgstr "Overpass-server: "
+
 msgid "Paste"
 msgstr "Plakken"
 
@@ -2150,15 +2175,6 @@ msgstr "Hoeken vastsetten actief."
 msgid "Finish drawing."
 msgstr "Tekenen beëindigen"
 
-msgid "FIX"
-msgstr "HERSTELLEN"
-
-msgid "draw angle snap"
-msgstr "tekenhoek vastklikken"
-
-msgid "draw angle snap highlight"
-msgstr "tekenhoek vastklikken geaccentueerd"
-
 msgid "Toggle snapping by {0}"
 msgstr "Schakelen vastklikken met {0}"
 
@@ -2180,6 +2196,15 @@ msgstr "0,45,90,..."
 msgid "0,30,45,60,90,..."
 msgstr "0,30,45,60,90,..."
 
+msgid "FIX"
+msgstr "HERSTELLEN"
+
+msgid "draw angle snap"
+msgstr "tekenhoek vastklikken"
+
+msgid "draw angle snap highlight"
+msgstr "tekenhoek vastklikken geaccentueerd"
+
 msgid "Angle snapping"
 msgstr "Hoek vastklikken"
 
@@ -2316,9 +2341,6 @@ msgstr ""
 "ParallelWayAction\n"
 "De geselecteerde wegen moeten een eenvoudig pad vormen zonder aftakkingen"
 
-msgid "Make parallel way error"
-msgstr "Maak fout in parallelle weg"
-
 msgid "Drag play head"
 msgstr "Afspeelkop verslepen"
 
@@ -2554,9 +2576,15 @@ msgstr "Alle objecten"
 msgid "Also include incomplete and deleted objects in search."
 msgstr "Onvolledige en verwijderde objecten ook doorzoeken."
 
+msgid "standard"
+msgstr "standaard"
+
 msgid "regular expression"
 msgstr "Reguliere expressie"
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr "Voeg knop voor werkbalk toe"
 
@@ -2784,6 +2812,10 @@ msgid "RX"
 msgstr "Regex (reguliere expressie)"
 
 msgctxt "search"
+msgid "CSS"
+msgstr "CSS"
+
+msgctxt "search"
 msgid "A"
 msgstr "T"
 
@@ -2836,6 +2868,9 @@ msgstr "Een bereik van getallen werd verwacht"
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr "Onverwacht teken. {0} werd verwacht, {1} werd gevonden"
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr "Onverwacht teken: {0}"
 
@@ -3333,6 +3368,24 @@ msgstr "Maken van ontbrekende cache-map: {0} mislukt"
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr "<html>Maken van ontbrekende cachemap: {0} mislukt</html>"
 
+msgid "Unable to delete temporary file {0}"
+msgstr "Onmogelijk tijdelijk bestand te verwijderen {0}"
+
+msgid "Unable to set file non-readable {0}"
+msgstr "Onmogelijk bestand in te stellen op niet-lezen {0}"
+
+msgid "Unable to set file non-writable {0}"
+msgstr "Onmogelijk bestand in te stellen op niet-schrijven {0}"
+
+msgid "Unable to set file non-executable {0}"
+msgstr "Onmogelijk bestand in te stellen op niet-uitvoerbaar {0}"
+
+msgid "Unable to set file readable {0}"
+msgstr "Onmogelijk bestand in te stellen op te lezen {0}"
+
+msgid "Unable to set file writable {0}"
+msgstr "Onmogelijk bestand in te stellen op te beschrijven {0}"
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3474,13 +3527,51 @@ msgctxt "compass"
 msgid "E"
 msgstr "O"
 
-msgid "Not in cache"
-msgstr "Niet aanwezig in de cache"
-
 msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr ""
 "Projectie ''{0}'' werd niet gevonden, bladwijzer ''{1}'' is niet bruikbaar"
 
+msgid "HTTP error {0} when loading tiles"
+msgstr "HTTP-fout {0} bij laden van tegels"
+
+msgid "Error downloading tiles: {0}"
+msgstr "Fout bij downlaoden van tegels: {0}"
+
+msgid "Could not load image from tile server"
+msgstr "Kon geen afbeelding van de tegel-server laden"
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+"{0} is geen geldig argument voor WMS. Controleer deze URL voor de server:\n"
+"{1}"
+
+msgid "Select WMTS layer"
+msgstr "WMTS-laag selecteren"
+
+msgid "Layer name"
+msgstr "Laagnaam"
+
+msgid "Projection"
+msgstr "Projectie"
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr "Geen lagen gedefinieerd door document getCapabalities: {0}"
+
+msgid "No layer selected"
+msgstr "Geen laag geselecteerd"
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
+msgstr ""
+"Alleen vierkante tegels worden ondersteund. {0}x{1} teruggegeven door server "
+"voor identificatie TileMatrix {2}"
+
 msgid "ID > 0 expected. Got {0}."
 msgstr "ID > 0 verwacht. Kreeg {0}."
 
@@ -3694,6 +3785,12 @@ msgstr "tekst"
 msgid "areatext"
 msgstr "tekst voor gebied"
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr "Projectie UTM (''+proj=utm'') vereist parameter ''+zone=...''."
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr "Integere waarde in bereik 1-60 verwacht voor parameter ''+zone=...''"
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr "Parameter moet beginnen met een ''+''-teken (gevonden ''{0}'')"
 
@@ -3721,15 +3818,15 @@ msgstr "Ellipsoïde ''{0}'' niet ondersteund."
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr "Combinatie van ellipsoïde parameters wordt niet ondersteund."
 
+msgid "Unknown datum identifier: ''{0}''"
+msgstr "Onbekende naam datum: ''{0}''"
+
 msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr "Ellipsoïde vereist (+ellps=* of +a=*, +b=*)"
 
 msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr "Grid shift file ''{0}'' voor optie +nadgrids niet ondersteund."
 
-msgid "Unknown datum identifier: ''{0}''"
-msgstr "Onbekende naam datum: ''{0}''"
-
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
 msgstr "Datum vereist (+datum=*, +towgs84=* of +nadgrids=*)"
 
@@ -4389,9 +4486,6 @@ msgstr "Tagwaarde is langer dan toegestaan"
 msgid "Tags with empty values"
 msgstr "Tags met lege waarden"
 
-msgid "Invalid property key"
-msgstr "Ongeldige sleutel voor eigenschap"
-
 msgid "Invalid white space in property key"
 msgstr "Ongeldige spatie in sleutel voor eigenschap"
 
@@ -4401,12 +4495,24 @@ msgstr "Waarde voor eigenschap begint of eindigt met een spatie"
 msgid "Property values contain HTML entity"
 msgstr "Waarden voor eigenschap bevatten HTML-codes"
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr "Sleutel ''{0}'' lijkt op ''{1}''."
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr "Sleutel \"{0}\" ontbreekt in voorkeuzen."
 
 msgid "Presets do not contain property key"
 msgstr "Voorkeuzen bevatten geen sleutel voor eigenschap"
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr "Waarde ''{0}'' voor sleutel ''{1}'' ziet er uit als ''{2}''."
+
+msgid "Misspelled property value"
+msgstr "Verkeerd gespelde waarde voor eigenschap"
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr "Waarde \"{0}\" voor sleutel \"{1}\" niet in voorkeuzen."
 
@@ -4593,6 +4699,9 @@ msgstr "Wegknoop dicht bij andere weg"
 msgid "Connected way end node near other way"
 msgstr "Verbonden eindknoop van weg dicht bij andere weg"
 
+msgid "Unconnected nodes without physical tags"
+msgstr "Niet-verbonden knopen zonder fysieke tags"
+
 msgid "Untagged and unconnected nodes"
 msgstr "Niet getagde en niet-verbonden knopen"
 
@@ -4601,9 +4710,6 @@ msgstr ""
 "De test controleert op knopen zonder tag die geen deel uitmaken van enige "
 "weg."
 
-msgid "Unconnected nodes without physical tags"
-msgstr "Niet-verbonden knopen zonder fysieke tags"
-
 msgid "No tags"
 msgstr "Geen tags"
 
@@ -4799,6 +4905,7 @@ msgstr "Klik om het dialoogvenster te sluiten"
 msgid "Imagery offset"
 msgstr "Verschuiving van afbeeldingslaag"
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr "Afbeeldingen"
 
@@ -4867,7 +4974,7 @@ msgstr "Plug-ins laden overslaan"
 
 msgid "Disable access to the given resource(s), separated by comma"
 msgstr ""
-"Toegang uitschakelen naar de opgegeven bron(nen), gescheiden door komma's"
+"Toegang uitschakelen naar de opgegeven bron(nen), gescheiden door komma’s"
 
 msgid "options provided as Java system properties"
 msgstr "opties ter beschikking gesteld als systeemeigenschappen"
@@ -4965,7 +5072,7 @@ msgid ""
 "possibly delimited by commas."
 msgstr ""
 "''{0}'' is geen geldige waarde voor argument ''{1}''. Mogelijke waarden zijn "
-"{2}, mogelijk gescheiden door komma's."
+"{2}, mogelijk gescheiden door komma’s."
 
 msgid ""
 "JOSM is running in offline mode. This resource will not be available: {0}"
@@ -5043,45 +5150,56 @@ msgstr ""
 "ontbrekende configuratie voor de proxy kunnen liggen.<br>Wilt u nu uw "
 "instellingen voor de proxy wijzigen?"
 
+msgctxt "menu"
 msgid "File"
 msgstr "Bestand"
 
-msgid "Session"
-msgstr "Sessie"
+msgctxt "menu"
+msgid "Edit"
+msgstr "Bewerken"
 
+msgctxt "menu"
 msgid "View"
-msgstr "Beeld"
+msgstr "Weergave"
 
+msgctxt "menu"
 msgid "Tools"
 msgstr "Gereedschappen"
 
+msgctxt "menu"
 msgid "More tools"
-msgstr "Meer programma''s"
+msgstr "Meer gereedschappen"
 
+msgctxt "menu"
 msgid "Data"
 msgstr "Gegevens"
 
+msgctxt "menu"
 msgid "Selection"
 msgstr "Selectie"
 
+msgctxt "menu"
 msgid "Presets"
-msgstr "Voorkeuze"
+msgstr "Voorkeuzen"
 
 msgid "More..."
 msgstr "Meer ..."
 
+msgctxt "menu"
 msgid "GPS"
 msgstr "GPS"
 
+msgctxt "menu"
 msgid "Windows"
 msgstr "Vensters"
 
+msgctxt "menu"
+msgid "Help"
+msgstr "Help"
+
 msgid "Menu: {0}"
 msgstr "Menu: {0}"
 
-msgid "Save and load the current session (list of layers, etc.)"
-msgstr "Sla op en laad de huidige sessie (lijst met lagen, etc.)"
-
 msgid "Edit toolbar"
 msgstr "werkbalk Bewerken"
 
@@ -5105,8 +5223,9 @@ msgstr "Klik om de tab Afbeeldingen te openen in de voorkeuren"
 msgid "Search menu items"
 msgstr "Items Zoekmenu"
 
+msgctxt "menu"
 msgid "Audio"
-msgstr "Geluid"
+msgstr ""
 
 msgid "Do not hide toolbar"
 msgstr "Werkbalk niet verbergen"
@@ -5212,7 +5331,7 @@ msgid "Username"
 msgstr "Gebruikersnaam"
 
 msgid "Created date"
-msgstr ""
+msgstr "Datum maken"
 
 msgid "Last change date"
 msgstr "Datum laatste wijziging"
@@ -5229,71 +5348,17 @@ msgstr "Op achtergrond"
 msgid "Click to run job in background"
 msgstr "Klikken om de taak op de achtergrond uit te voeren"
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-"Luchtfoto''s kunnen verschoven zijn. Controleer de verschuiving met behulp "
-"van GPS-sporen!"
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-
-msgid "Details..."
-msgstr "Details..."
-
-msgid "Hide this message and never show it again"
-msgstr "Verberg dit bericht en laat het nooit meer zien"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-"<html>Gelieve de verwijdering van <strong>1 object</strong> uit <strong>1 "
-"relatie</strong> te bevestigen.</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>Gelieve de verwijdering van <strong>1 object</strong> uit <strong>{0} "
-"relaties</strong> te bevestigen.</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>Gelieve de verwijdering van <strong>{0} objecten</strong> uit "
-"<strong>{1} relaties</strong> te bevestigen.</html>"
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] "{0} object wordt verwijderd"
-msgstr[1] "{0} objecten worden verwijderd"
-
-msgid "Delete objects"
-msgstr "Objecten verwijderen"
-
-msgid "To delete"
-msgstr "Te verwijderen"
-
-msgid "From Relation"
-msgstr "Van relatie"
-
-msgid "Pos."
-msgstr "Positie"
+msgid " ({0})"
+msgstr " ({0})"
 
-msgid "Role"
-msgstr "Rol"
+msgid "{0} completed in {1}"
+msgstr "{0} voltooid in {1}"
 
-msgid "Click to close the dialog and remove the object from the relations"
-msgstr ""
-"Klik om het dialoogvenster af te sluiten en om het object uit de relaties te "
-"verwijderen"
+msgid "Enlarge"
+msgstr "Vergroten"
 
-msgid "Click to close the dialog and to abort deleting the objects"
-msgstr ""
-"Klik om het dialoogvenster af te sluiten en om het verwijderen van de "
-"objecten af te breken"
+msgid "Shrink"
+msgstr "Verkleinen"
 
 msgid ""
 "<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
@@ -5765,6 +5830,9 @@ msgstr "Behoud hun status van verwijdering"
 msgid "Undecide conflict between deleted state"
 msgstr "Onbeslist conflict tussen status van verwijdering"
 
+msgid "Role"
+msgstr "Rol"
+
 msgid "Primitive"
 msgstr "Primitief"
 
@@ -6054,6 +6122,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr "Pas deze rol toe op alle leden"
 
+msgid "Pos."
+msgstr "Positie"
+
 msgid "Orig. Way"
 msgstr "Orig. weg"
 
@@ -6223,6 +6294,51 @@ msgstr "Conflicten oplossen"
 msgid "Resolve conflicts for ''{0}''"
 msgstr "Conflicten oplossen voor ''{0}''"
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+"<html>Gelieve de verwijdering van <strong>1 object</strong> uit <strong>1 "
+"relatie</strong> te bevestigen.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Gelieve de verwijdering van <strong>1 object</strong> uit <strong>{0} "
+"relaties</strong> te bevestigen.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Gelieve de verwijdering van <strong>{0} objecten</strong> uit "
+"<strong>{1} relaties</strong> te bevestigen.</html>"
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] "{0} object wordt verwijderd"
+msgstr[1] "{0} objecten worden verwijderd"
+
+msgid "Delete objects"
+msgstr "Objecten verwijderen"
+
+msgid "To delete"
+msgstr "Te verwijderen"
+
+msgid "From Relation"
+msgstr "Van relatie"
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+"Klik om het dialoogvenster af te sluiten en om het object uit de relaties te "
+"verwijderen"
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+"Klik om het dialoogvenster af te sluiten en om het verwijderen van de "
+"objecten af te breken"
+
 msgid "Filter objects and hide/disable them."
 msgstr "Filter objecten en ze verbergen of uitschakelen"
 
@@ -6327,8 +6443,8 @@ msgstr "Geavanceerde objectinformatie"
 msgid "map style"
 msgstr "kaartstijl"
 
-msgid " ({0})"
-msgstr " ({0})"
+msgid "edit counts"
+msgstr "tellingen bewerken"
 
 msgid "not in data set"
 msgstr "niet in gegevensset"
@@ -6468,6 +6584,11 @@ msgstr ""
 "Waarschuwing: De 2 geselecteerde objecten hebben gelijke, maar niet "
 "identieke caches voor stijl."
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] "{0} gebruiker bewerkte als laatste de selectie:"
+msgstr[1] "{0} gebruikers bewerkten als laatste de selectie:"
+
 msgid "xml"
 msgstr "xml"
 
@@ -6477,49 +6598,81 @@ msgstr "mapcss"
 msgid "unknown"
 msgstr "onbekend"
 
+msgid "Enter the coordinates for the new node."
+msgstr "Voer de coördinaten voor de nieuwe knoop in."
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
-msgstr ""
-"Voer de coördinaten voor de nieuwe knoop in.<br/>U kunt longitude en "
-"latitude scheiden met spayie, komma of puntkomma.<br/>Gebruik positieve "
-"getallen of de tekens N, E om de cardinale richting North of East aan te "
-"geven.<br/>Voor de cardinale richtingen South en West kunt u ofwel negatieve "
-"getallen gebruiken of de tekens S, W.<br/>De waarde voor coördinaten kan in "
-"één van de drie "
-"indelingen:<ul><li><i>graden</i><tt>°</tt></li><li><i>graden</i><tt>°"
-"</tt> <i>minuten</i><tt>'</tt></li><li><i>graden</i><tt>°</tt> "
-"<i>minuten</i><tt>'</tt> <i>seconden</i><tt>&quot</tt></li></ul>De "
-"symbolen <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> zijn optioneel.<br/><br/>Enkele voorbeelden:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+"U mag longitude en latitude scheiden door een spatie, komma of puntkomma."
 
-msgid "Projected coordinates:"
-msgstr "Geprojecteerde coördinaten:"
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+"Gebruik positieve getallen of de tekens N, E om de kardinale richting Noord "
+"of Oost aan te geven."
 
 msgid ""
-"Enter easting and northing (x and y) separated by space, comma or semicolon."
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
 msgstr ""
-"Voer easting en northing (x en y) in, gescheiden door een spatie, komma of "
-"punt-komma."
+"Voor de kardinale richtingen Zuid en West kunt u negatieve getallen "
+"gebruiken of de tekens S en W."
 
-msgid "Lat/Lon"
-msgstr "Lat/Lon"
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+"De waarde van de coördinaat mag in één van de volgende indelingen zijn:"
 
-msgid "East/North"
-msgstr "Oost/Noord"
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr "<i>graden</i><tt>°</tt>"
 
-msgid "Please enter a GPS coordinates"
-msgstr "Voer GPS-coördinaten in"
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr "<i>graden</i><tt>°</tt> <i>minuten</i><tt>'</tt>"
 
-msgid "Please enter a Easting and Northing"
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+"<i>graden</i><tt>°</tt> <i>minuten</i><tt>'</tt> "
+"<i>seconden</i><tt>&quot</tt>"
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+"De symbolen <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, "
+"<tt>"</tt>, <tt>″</tt> zijn optioneel."
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+"U mag ook de syntaxis <tt>lat=\"...\" lon=\"...\"</tt> of <tt>lat=''...'' "
+"lon=''...''</tt> gebruiken."
+
+msgid "Some examples:"
+msgstr "Enkele voorbeelden:"
+
+msgid "Projected coordinates:"
+msgstr "Geprojecteerde coördinaten:"
+
+msgid ""
+"Enter easting and northing (x and y) separated by space, comma or semicolon."
+msgstr ""
+"Voer easting en northing (x en y) in, gescheiden door een spatie, komma of "
+"punt-komma."
+
+msgid "Lat/Lon"
+msgstr "Lat/Lon"
+
+msgid "East/North"
+msgstr "Oost/Noord"
+
+msgid "Please enter a GPS coordinates"
+msgstr "Voer GPS-coördinaten in"
+
+msgid "Please enter a Easting and Northing"
 msgstr "Voer een Easting en Northing in"
 
 msgid "Toggle visibility of layer: {0}"
@@ -6546,6 +6699,12 @@ msgstr "Dekking"
 msgid "Adjust opacity of the layer."
 msgstr "Dekkingsgraad van de laag aanpassen"
 
+msgid "Gamma"
+msgstr "Gamma"
+
+msgid "Adjust gamma value of the layer."
+msgstr "Gammawaarde voor de laag aanpassen"
+
 msgid "Activate"
 msgstr "Activeren"
 
@@ -6676,6 +6835,12 @@ msgstr "Instellingen Stijl"
 msgid "Customize the style"
 msgstr "De stijl aanpasen"
 
+msgid "Mini map"
+msgstr "Miniatuurkaart"
+
+msgid "Displays a small map of the current edit location"
+msgstr "Geeft een verkleinde kaart van de huidige bewerkingslocatie weer"
+
 msgid "List of notes"
 msgstr "Lijst van opmerkingen"
 
@@ -6734,15 +6899,20 @@ msgstr "Object-ID:"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "Voer het ID van het te downloaden object in"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+"Object-ID''s mogen worden gescheiden door komma''s of spaties, bijvoorbeeld: "
+"{0}"
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+"In gemixte modus, specificeer objecten zoals dit: {0}<br/>({1} staat voor "
+"<i>knoop</i>, {2} voor <i>weg</i>, en {3} voor <i>relatie</i>)"
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
-"Object-ID's kunnen gescheiden worden door komma's of spaties.<br/> "
-"Voorbeelden: {0}<br/>In gemengde modus worden objecten als volgt "
-"gespecificeerd: {1}<br/>({2} betekent <i>knoop</i>, {3} <i>weg</i>, en {4} "
-"<i>relatie</i>)"
 
 msgid ""
 "Invalid ID list specified\n"
@@ -6772,6 +6942,9 @@ msgstr "Relaties: {0}/{1}"
 msgid "Relations: {0}"
 msgstr "Relaties: {0}"
 
+msgid "Selection"
+msgstr "Selectie"
+
 msgid "Open a selection list window."
 msgstr "Open een venster voor een selectielijst."
 
@@ -6866,6 +7039,12 @@ msgstr "Open het scherm voor valideren."
 msgid "Validation results"
 msgstr "Resultaten van valideren"
 
+msgid "Lookup"
+msgstr "Opzoeken"
+
+msgid "Looks up the selected primitives in the error list."
+msgstr "Zoekt de geselecteerde primitieven op in de lijst met fouten."
+
 msgid "Fix"
 msgstr "Herstellen"
 
@@ -7504,7 +7683,7 @@ msgid "<different>"
 msgstr "<verschillend>"
 
 msgid "Objects: {2} / Tags: {0} / Memberships: {1}"
-msgstr ""
+msgstr "Objecten: {2} / Tags: {0} / Leden: {1}"
 
 msgid "Tags: {0} / Memberships: {1}"
 msgstr "Tags: {0} / Leden: {1}"
@@ -7545,6 +7724,13 @@ msgstr "Ga naar de wiki van OSM voor hulp over tags (F1)"
 msgid "Launch browser with wiki help for selected object"
 msgstr "Browser starten met wiki-hulp voor het geselecteerde object"
 
+msgid "Go to Taginfo"
+msgstr "Ga naar TagInfo"
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+"Browser straten met statistieken voor Taginfo van het geselecteerde object"
+
 msgid "Paste Value"
 msgstr "Waarde plakken"
 
@@ -7558,16 +7744,16 @@ msgid "Copy the value of the selected tag to clipboard"
 msgstr "Kopieer de waarde van de geselecteerde tag naar het klembord"
 
 msgid "Copy selected Key(s)/Value(s)"
-msgstr ""
+msgstr "Geselecteerde sleutel(s)/waarde(n) kopiëren"
 
 msgid "Copy the key and value of the selected tag(s) to clipboard"
-msgstr ""
+msgstr "Sleutel en waarde van de geselecteerde tag(s) naar klembord kopiëren"
 
 msgid "Copy all Keys/Values"
 msgstr "Kopieer alle Sleutels/Waardes"
 
 msgid "Copy the key and value of all the tags to clipboard"
-msgstr ""
+msgstr "Sleutel en waarde van alle tags naar het klembord kopiëren"
 
 msgid "Search Key/Value/Type"
 msgstr "Zoek naar een sleutel/waarde/type"
@@ -7636,17 +7822,16 @@ msgid "Set number of recently added tags"
 msgstr "Stel aantal recent toegevoegde tags in"
 
 msgid "Remember last used tags after a restart"
-msgstr ""
+msgstr "Laatst gebruikte tags na opnieuw opstarten onthouden"
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
-msgstr ""
+msgid "to apply first suggestion"
+msgstr "eerste suggestie toepassen"
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
-msgstr ""
+msgid "to add without closing the dialog"
+msgstr "zonder dialoogvenster te sluiten toevoegen"
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
-msgstr ""
+msgid "to add first suggestion without closing the dialog"
+msgstr "eerste suggestie, zonder dialoogvenster te sluiten, toevoegen"
 
 msgid "Please enter the number of recently added tags to display"
 msgstr ""
@@ -7847,6 +8032,13 @@ msgstr "De leden van de relatie sorteren"
 msgid "Relation Editor: Sort"
 msgstr "Relatie bewerken: Sorteren"
 
+msgid "Sort below"
+msgstr "Beneden sorteren"
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+"De geselecteerde leden van de relatie en alle leden daaronder sorteren"
+
 msgid "Reverse the order of the relation members"
 msgstr "Volgorde van leden van de relatie omkeren"
 
@@ -8230,6 +8422,9 @@ msgid ""
 "<strong>{2}</strong> is enabled.<br>Please choose to either download OSM "
 "data, or GPX data, or Notes, or all.</html>"
 msgstr ""
+"<html>Noch <strong>{0}</strong> noch <strong>{1}</strong> noch "
+"<strong>{2}</strong> zijn ingeschakeld.<br>Kies ofwel OSM-gegevens, of GPX-"
+"gegevens, of Opmerkingen, of alles om te downloaden.</html>"
 
 msgid "Download referrers (parent relations)"
 msgstr "Download verwijzers (ouderrelaties)"
@@ -8288,13 +8483,13 @@ msgid "Querying name server ..."
 msgstr "Naamserver bevragen ..."
 
 msgid "Error occured with query ''{0}'': ''{1}''"
-msgstr ""
+msgstr "Fout opgetreden met query ''{0}'': ''{1}''"
 
 msgid "Name server returned invalid data. Please try again."
-msgstr ""
+msgstr "Naamserver gaf ongeldige gegevens terug. Probeer opnieuw."
 
 msgid "Bad response"
-msgstr ""
+msgstr "Slecht antwoord"
 
 msgid "Type"
 msgstr "Soort"
@@ -8452,6 +8647,9 @@ msgstr "Historie voor relatie {0} wordt geladen"
 msgid "Node {0}"
 msgstr "Knoop {0}"
 
+msgid "The nodes of this way are in reverse order"
+msgstr "De knopen van deze weg staan in tegenovergestelde volgorde"
+
 msgid "Zoom to node"
 msgstr "Inzoomen op knoop"
 
@@ -8480,13 +8678,13 @@ msgid "Changeset source"
 msgstr "Bron wijzigingenset"
 
 msgid "Imagery used"
-msgstr ""
+msgstr "Gebruikte afbeeldingen"
 
 msgid "<b>Source</b>:"
 msgstr "<b>Bron</b>:"
 
 msgid "<b>Imagery</b>:"
-msgstr ""
+msgstr "<b>Afbeeldingen</b>:"
 
 msgid ""
 "<html>Version <strong>{0}</strong> currently edited in layer ''{1}''</html>"
@@ -8499,7 +8697,7 @@ msgstr ""
 "<html>Versie <strong>{0}</strong> gemaakt op <strong>{1}</strong></html>"
 
 msgid "Changeset"
-msgstr ""
+msgstr "Wijzigingenset"
 
 msgid "Changeset info"
 msgstr "Wijzigingenset info"
@@ -9451,6 +9649,108 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] "{0} object te verwijderen:"
 msgstr[1] "{0} objecten te verwijderen:"
 
+msgid "Show Tile Info"
+msgstr "Tegelinfo weergeven"
+
+msgid "Tile Info"
+msgstr "Tegelinfo"
+
+msgid "Metadata "
+msgstr "Metadata "
+
+msgid "Auto Zoom"
+msgstr "Automatisch in-/uitzoomen"
+
+msgid "Auto load tiles"
+msgstr "Automatisch tegels laden"
+
+msgid "Load All Tiles"
+msgstr "Alle tegels laden"
+
+msgid "Load All Error Tiles"
+msgstr "Alle fouten voor tegels laden"
+
+msgid "Zoom to native resolution"
+msgstr "Zoom naar eigen resolutie"
+
+msgid "Change resolution"
+msgstr "Resolutie veranderen"
+
+msgid "Failed to create tile source"
+msgstr "Maken van bron voor tegels mislukt"
+
+msgid "Show Errors"
+msgstr "Fouten weergeven"
+
+msgid "Load Tile"
+msgstr "Tegel laden"
+
+msgid "Increase zoom"
+msgstr "Zoom vergroten"
+
+msgid "Decrease zoom"
+msgstr "Zoom verkleinen"
+
+msgid "Snap to tile size"
+msgstr "Vastklikken aan grootte van tegel"
+
+msgid "Flush Tile Cache"
+msgstr "Cache voor tegels leegmaken"
+
+msgid "zoom in to load any tiles"
+msgstr "inzoomen om tegels te laden"
+
+msgid "zoom in to load more tiles"
+msgstr "inzoomen om meer tegels te laden"
+
+msgid "increase zoom level to see more detail"
+msgstr "vergoot het zoomniveau om meer detail te zien"
+
+msgid "No tiles at this zoom level"
+msgstr "Geen tegels op dit zoomniveau"
+
+msgid "Current zoom: {0}"
+msgstr "Huidig zoomniveau: {0}"
+
+msgid "Display zoom: {0}"
+msgstr "Weergave zoom: {0}"
+
+msgid "Pixel scale: {0}"
+msgstr "Pixelschaal: {0}"
+
+msgid "Best zoom: {0}"
+msgstr "Beste zoomniveau: {0}"
+
+msgid "Cache stats: {0}"
+msgstr "Statistieken voor cache: {0}"
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr "{0} ({1}), automatisch downloaden in zoom {2}"
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr "{0} ({1}), downloaden in zoom {2}"
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr "Gedownload {0}/{1} tegels"
+
+msgid "Save WMS file"
+msgstr "Sla WMS-bestand op"
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+"Luchtfoto''s kunnen verschoven zijn. Controleer de verschuiving met behulp "
+"van GPS-sporen!"
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+
+msgid "Details..."
+msgstr "Details..."
+
+msgid "Hide this message and never show it again"
+msgstr "Verberg dit bericht en laat het nooit meer zien"
+
 msgid "Customize Color"
 msgstr "Kleur aanpassen"
 
@@ -9504,6 +9804,9 @@ msgstr "GPX-bestand opslaan"
 msgid "Imagery fade"
 msgstr "Afbeelding vervagen"
 
+msgid "Unsupported imagery type: {0}"
+msgstr "Niet ondersteund type afbeelding: {0}"
+
 msgid "ERROR"
 msgstr "FOUT"
 
@@ -9524,11 +9827,11 @@ msgstr "Alle projecties worden ondersteund"
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
-"De laag {0} ondersteunt niet de nieuwe projectie {1}.\n"
-"{2}\n"
+"De laag {0} ondersteund niet de nieuwe projectie {1}.\n"
+"Ondersteunde projecties zijn: {2}\n"
 "Wijzig de projectie opnieuw of verwijder de laag."
 
 msgid "Save Layer"
@@ -9544,7 +9847,7 @@ msgid "Total notes:"
 msgstr "Totaal aantal notities"
 
 msgid "Changes need uploading?"
-msgstr ""
+msgstr "Moeten de wijzigingen worden geüpload?"
 
 msgid "Data Layer {0}"
 msgstr "Gegevenslaag {0}"
@@ -9612,183 +9915,78 @@ msgstr ""
 msgid "Save OSM file"
 msgstr "OSM-bestand opslaan"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-"{0} is not a valid TMS argument. Controleer alstublieft deze URL voor "
-"server:\n"
-"{1}"
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-"TMS-lagen ondersteunen niet de projectie {0}.\n"
-"{1}\n"
-"Wijzig de projectie of verwijder de laag."
-
-msgid "Auto Zoom"
-msgstr "Automatisch in-/uitzoomen"
-
-msgid "Auto load tiles"
-msgstr "Automatisch tegels laden"
+msgid "EPSG:4326 and Mercator projection are supported"
+msgstr "EPSG:4326- en Mercator-projectie worden ondersteund"
 
-msgid "Show Errors"
-msgstr "Fouten weergeven"
+msgid "Validation errors"
+msgstr "Fouten bij valideren"
 
-msgid "Load Tile"
-msgstr "Tegel laden"
+msgid "No validation errors"
+msgstr "Geen fouten bij valideren"
 
-msgid "Show Tile Info"
-msgstr "Tegelinfo weergeven"
+msgid "Set WMS Bookmark"
+msgstr "Stel WMS-bladwijzer in"
 
-msgid "Load All Tiles"
-msgstr "Alle tegels laden"
+msgid ""
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
+msgstr ""
+"JOSM zal EPSG:4326 gebruiken om de server te bevragen, maar resultaten "
+"kunnen variëren, afhankelijk van de WMSserver"
 
-msgid "Load All Error Tiles"
-msgstr "Alle fouten voor tegels laden"
+msgid "Correlate to GPX"
+msgstr "Met GPX relateren"
 
-msgid "Increase zoom"
-msgstr "Zoom vergroten"
+msgid "Invalid timezone"
+msgstr "Ongeldige tijdzone"
 
-msgid "Decrease zoom"
-msgstr "Zoom verkleinen"
+msgid "Invalid offset"
+msgstr "Ongeldige verschuiving"
 
-msgid "Snap to tile size"
-msgstr "Vastklikken aan grootte van tegel"
+msgid "Correlate images with GPX track"
+msgstr "Verband tussen afbeeldingen en GPX-sporen leggen"
 
-msgid "Flush Tile Cache"
-msgstr "Cache voor tegels leegmaken"
+msgid "Try Again"
+msgstr "Opnieuw proberen"
 
-msgid "zoom in to load any tiles"
-msgstr "inzoomen om tegels te laden"
+msgid "No images could be matched!"
+msgstr "Geen afbeeldingen konden worden gekoppeld"
 
-msgid "zoom in to load more tiles"
-msgstr "inzoomen om meer tegels te laden"
+msgid "GPX Files (*.gpx *.gpx.gz)"
+msgstr "GPX-bestanden (*.gpx, *.gpx.gz)"
 
-msgid "increase zoom level to see more detail"
-msgstr "vergoot het zoomniveau om meer detail te zien"
+msgid "File {0} is loaded yet under the name \"{1}\""
+msgstr "Bestand {0} is geladen met de naam \"{1}\""
 
-msgid "No tiles at this zoom level"
-msgstr "Geen tegels op dit zoomniveau"
+msgid "Error while parsing {0}"
+msgstr "Fout tijdens parsen {0}"
 
-msgid "Current zoom: {0}"
-msgstr "Huidig zoomniveau: {0}"
+msgid "Could not read \"{0}\""
+msgstr "Kon \"{0}\" niet lezen"
 
-msgid "Display zoom: {0}"
+msgid ""
+"<html>Take a photo of your GPS receiver while it displays the "
+"time.<br>Display that photo here.<br>And then, simply capture the time you "
+"read on the photo and select a timezone<hr></html>"
 msgstr ""
+"<html>Maak een opname van je GPS-ontvanger terwijl die de tijd "
+"weergeeft.<br>Toon die foto hier.<br>Voer vervolgens de afgebeelde tijd hier "
+"in en selecteer een tijdzone<hr></html>"
 
-msgid "Pixel scale: {0}"
-msgstr "Pixelschaal: {0}"
+msgid "Photo time (from exif):"
+msgstr "Tijd op foto (uit exif):"
 
-msgid "Best zoom: {0}"
-msgstr "Beste zoomniveau: {0}"
+msgid "Gps time (read from the above photo): "
+msgstr "GPS-tijd (lees uit de bovenstaande foto): "
 
-msgid "Cache stats: {0}"
-msgstr ""
+msgid "I am in the timezone of: "
+msgstr "Ik bevind mij in de tijdzone: "
 
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr "TMS-laag ({0}), downloaden met zoom {1}"
+msgid "No date"
+msgstr "Geen datum"
 
-msgid "EPSG:4326 and Mercator projection are supported"
-msgstr "EPSG:4326- en Mercator-projectie worden ondersteund"
-
-msgid "Validation errors"
-msgstr "Fouten bij valideren"
-
-msgid "No validation errors"
-msgstr "Geen fouten bij valideren"
-
-msgid "Blank Layer"
-msgstr "Lege laag"
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr "Gedownload {0}/{1} tegels"
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr "WMS-laag ({0}), automatisch in zoom {1} downloaden"
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr "WMS-laag ({0}), in zoom {1} downloaden"
-
-msgid "Download visible tiles"
-msgstr "Zichtbare tegels downloaden"
-
-msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-"Het gevraagde gebied is te groot. Zoom een beetje in, of wijzig de resolutie"
-
-msgid "Change resolution"
-msgstr "Resolutie veranderen"
-
-msgid "Reload erroneous tiles"
-msgstr "Foutieve tegels herladen"
-
-msgid "Alpha channel"
-msgstr "Alfa-kanaal"
-
-msgid "Automatically change resolution"
-msgstr "Automatisch resolutie wijzigen"
-
-msgid "Set WMS Bookmark"
-msgstr "Stel WMS-bladwijzer in"
-
-msgid "Automatic downloading"
-msgstr "Automatisch downloaden"
-
-msgid "Zoom to native resolution"
-msgstr "Zoom naar eigen resolutie"
-
-msgid "Supported projections are: {0}"
-msgstr "Ondersteunde projecties zijn: {0}"
-
-msgid "Unsupported WMS file version; found {0}, expected {1}"
-msgstr "Niet-ondersteunde versie WMS-bestand; gevonden {0}, verwachtte {1}"
-
-msgid "Save WMS file"
-msgstr "Sla WMS-bestand op"
-
-msgid "Correlate to GPX"
-msgstr "Met GPX relateren"
-
-msgid "GPX Files (*.gpx *.gpx.gz)"
-msgstr "GPX-bestanden (*.gpx, *.gpx.gz)"
-
-msgid "File {0} is loaded yet under the name \"{1}\""
-msgstr "Bestand {0} is geladen met de naam \"{1}\""
-
-msgid "Error while parsing {0}"
-msgstr "Fout tijdens parsen {0}"
-
-msgid "Could not read \"{0}\""
-msgstr "Kon \"{0}\" niet lezen"
-
-msgid ""
-"<html>Take a photo of your GPS receiver while it displays the "
-"time.<br>Display that photo here.<br>And then, simply capture the time you "
-"read on the photo and select a timezone<hr></html>"
-msgstr ""
-"<html>Maak een opname van je GPS-ontvanger terwijl die de tijd "
-"weergeeft.<br>Toon die foto hier.<br>Voer vervolgens de afgebeelde tijd hier "
-"in en selecteer een tijdzone<hr></html>"
-
-msgid "Photo time (from exif):"
-msgstr "Tijd op foto (uit exif):"
-
-msgid "Gps time (read from the above photo): "
-msgstr "GPS-tijd (lees uit de bovenstaande foto): "
-
-msgid "I am in the timezone of: "
-msgstr "Ik bevind mij in de tijdzone: "
-
-msgid "No date"
-msgstr "Geen datum"
-
-msgid "Open another photo"
-msgstr "Open een andere foto"
+msgid "Open another photo"
+msgstr "Open een andere foto"
 
 msgid "Synchronize time from a photo of the GPS receiver"
 msgstr "De tijd met een foto van de GPS-ontvanger synchroniseren"
@@ -9845,24 +10043,9 @@ msgstr "Tijdzone: "
 msgid "Offset:"
 msgstr "Verschuiving:"
 
-msgid "Correlate images with GPX track"
-msgstr "Verband tussen afbeeldingen en GPX-sporen leggen"
-
 msgid "Correlate"
 msgstr "Correleer"
 
-msgid "Invalid timezone"
-msgstr "Ongeldige tijdzone"
-
-msgid "Invalid offset"
-msgstr "Ongeldige verschuiving"
-
-msgid "Try Again"
-msgstr "Opnieuw proberen"
-
-msgid "No images could be matched!"
-msgstr "Geen afbeeldingen konden worden gekoppeld"
-
 msgid "No gpx selected"
 msgstr "Geen GPX geselecteerd"
 
@@ -9975,8 +10158,8 @@ msgstr[1] "{0} werden aangetroffen met GPS-tag."
 
 msgid "{0} has updated GPS data."
 msgid_plural "{0} have updated GPS data."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} heeft bijgewerkt GPSgegevens."
+msgstr[1] "{0} hebben bijgewerkte GPSgegevens."
 
 msgid "Delete image file from disk"
 msgstr "Wis afbeeldingsbestand van de schijf"
@@ -10019,7 +10202,7 @@ msgid "Delete File from disk"
 msgstr "Wis bestand van de schijf"
 
 msgid "Copy image path"
-msgstr ""
+msgstr "Pad voor afbeelding kopiëren"
 
 msgid "Next"
 msgstr "Volgende"
@@ -10053,6 +10236,8 @@ msgid ""
 "\n"
 "Speed: {0} km/h"
 msgstr ""
+"\n"
+"Snelheid: {0} km/u"
 
 msgid ""
 "\n"
@@ -10075,14 +10260,11 @@ msgstr ""
 "\n"
 "GPS-tijd: {0}"
 
-msgid "JPEG images (*.jpg)"
-msgstr "JPEG-afbeeldingen (*.jpg)"
-
 msgid "Show thumbnails"
-msgstr ""
+msgstr "Miniaturen weergeven"
 
 msgid "Show image thumbnails instead of icons."
-msgstr ""
+msgstr "Miniaturen van afbeeldingen weergeven in plaats van pictogrammen"
 
 msgid "Choose visible tracks"
 msgstr "Kies zichtbare sporen"
@@ -10147,9 +10329,6 @@ msgstr "meters"
 msgid "Maximum area per request:"
 msgstr "Maximale oppervlakte per verzoek:"
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr "Download nabij:"
 
@@ -10193,10 +10372,10 @@ msgid "No imagery layers"
 msgstr "Geen lagen met afbeeldingen"
 
 msgid "Velocity, km/h"
-msgstr ""
+msgstr "Snelheid, km/u"
 
 msgid "HDOP, m"
-msgstr ""
+msgstr "HDOP, m"
 
 msgid "Time"
 msgstr "Tijd"
@@ -10365,6 +10544,8 @@ msgid ""
 "Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
 "''{2}'' instead."
 msgstr ""
+"Vervallen ''{0}'' gedetecteerd in ''{1}'' wat op korte termijn zal worden "
+"verwijderd. gebruik in plaats daarvan ''{2}''."
 
 msgid "Illegal dash pattern, values must be positive"
 msgstr "Ongeldig patroon van streepjes, waarden moeten positief zijn"
@@ -10917,15 +11098,15 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr "Sla de voorkeuren op en sluit het dialoogvenster"
 
-msgid "Download plugins"
-msgstr "Download plug-ins"
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr "U moet JOSM opnieuw starten om sommige instellingen te activeren."
 
 msgid "Would you like to restart now?"
 msgstr "Wilt u nu opnieuw opstarten?"
 
+msgid "Download plugins"
+msgstr "Download plug-ins"
+
 msgid "Icon paths:"
 msgstr "Paden voor pictogrammen:"
 
@@ -11677,10 +11858,12 @@ msgid "Dynamic buttons in side menus"
 msgstr "Dynamische knoppen in de zijmenu''s"
 
 msgid "Display ISO dates"
-msgstr ""
+msgstr "ISO-datums weergeven"
 
 msgid "Use native file choosers (nicer, but do not support file filters)"
 msgstr ""
+"Eigen bestandskeuzevensters gebruiken (netter, maar ondersteunen geen "
+"filters voor bestanden)"
 
 msgid "Show localized name in selection lists, if available"
 msgstr ""
@@ -11696,17 +11879,22 @@ msgstr ""
 "binnen het element is"
 
 msgid "ISO 8601"
-msgstr ""
+msgstr "ISO 8601"
 
 msgid ""
 "Format dates according to {0}. Today''s date will be displayed as {1} "
 "instead of {2}"
 msgstr ""
+"Datums opmaken overeenkomstig {0}. De datum van vandaag zal worden "
+"weergegeven als {1} in plaats van als {2}"
 
 msgid ""
 "Use file choosers that behave more like native ones. They look nicer but do "
 "not support some features like file filters"
 msgstr ""
+"Bestandskeuzevensters gebruiken die zich meer gedragen als de eigen. Zij "
+"zien er netter uit maar ondersteunen enkele mogelijkheden niet, zoals "
+"filters voor bestanden"
 
 msgid "Look and Feel"
 msgstr "Weergave en vormgeving"
@@ -11793,6 +11981,21 @@ msgstr "Grenzen weergeven"
 msgid "No bounding box was found for this layer."
 msgstr "Er werd geen omvattend gebied gevonden voor deze laag."
 
+msgid "1. Enter getCapabilities URL"
+msgstr "1. Voer URL voor getCapabilities in"
+
+msgid "2. Enter name for this layer"
+msgstr "2. Voer de naam voor deze laag in"
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr "Cache-naam"
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr "Afbeelding vervagen"
 
@@ -11811,6 +12014,18 @@ msgstr "Sterk"
 msgid "Sharpen (requires layer re-add): "
 msgstr "Verscherpen (vereist opnieuw toevoegen laag): "
 
+msgid "Tile cache directory: "
+msgstr "Map voor cache van tegels: "
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr "Maximale grootte van schijfcache (per afbeelding) in MB: "
+
+msgid "Maximum number of objects in memory cache: "
+msgstr "Maximale aantal objecten in geheugencache: "
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr "Voorkeuren voor afbeeldingslaag"
 
@@ -11834,6 +12049,9 @@ msgstr "Aanbieders van afbeeldingen"
 msgid "Offset bookmarks"
 msgstr "Bladwijzers voor verschuivingen"
 
+msgid "Cache contents"
+msgstr "Inhoud cache"
+
 msgid "Imagery Background: Default"
 msgstr "Achtergrondafbeelding: standaard"
 
@@ -11876,9 +12094,6 @@ msgstr "EULA-licentie URL niet beschikbaar: {0}"
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr "Misvormde URL voor de EULA-licentie: {0}"
 
-msgid "Projection"
-msgstr "Projectie"
-
 msgid "Layer"
 msgstr "Laag"
 
@@ -11903,17 +12118,11 @@ msgstr "Max. zoomniveau: "
 msgid "Add to slippymap chooser: "
 msgstr "Toevoegen aan kiezer voor slippykaart: "
 
-msgid "Tile cache directory: "
-msgstr "Map voor cache van tegels: "
-
 msgid "Maximum concurrent downloads: "
-msgstr ""
+msgstr "Maximum aantal gelijktijdige downloads: "
 
 msgid "Maximum concurrent downloads per host: "
-msgstr ""
-
-msgid "Maximum elements in disk cache: "
-msgstr ""
+msgstr "Maximum aantal gelijktijdige downloads per host: "
 
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
@@ -11922,20 +12131,11 @@ msgstr ""
 "Die laag ondersteunt geen projecties van JOSM,\n"
 "dus u kunt het niet gebruiken. Dit bericht zal niet meer worden weergegeven."
 
-msgid "Downloader:"
-msgstr "Downloader:"
-
 msgid "Simultaneous connections:"
 msgstr "Gelijktijdige verbindingen:"
 
-msgid "Overlap tiles"
-msgstr "Tegels overlappen"
-
-msgid "% of east:"
-msgstr "% oostelijk:"
-
-msgid "% of north:"
-msgstr "% noordelijk:"
+msgid "Tile size:"
+msgstr "Tegelgrootte:"
 
 msgid "Auto save enabled"
 msgstr "Automatisch opslaan ingeschakeld"
@@ -12029,7 +12229,7 @@ msgstr ""
 "Kreeg ''{1}''"
 
 msgid "JOSM default (MapCSS)"
-msgstr ""
+msgstr "JOSM standaard (MapCSS)"
 
 msgid ""
 "Internal style to be used as base for runtime switchable overlay styles"
@@ -12337,7 +12537,7 @@ msgid "Projection bounds (in degrees)"
 msgstr "Grenzen projectie (in graden)"
 
 msgid "Sets the SRS=... parameter in the WMS request"
-msgstr ""
+msgstr "Stelt de parameter SRS=... in in het verzoek voor WMS"
 
 msgid "Gauß-Krüger"
 msgstr "Gauß-Krüger"
@@ -12480,43 +12680,50 @@ msgid ""
 "(https) on localhost.<br>These ports are not configurable because they are "
 "referenced by external applications talking to JOSM."
 msgstr ""
+"JOSM zal altijd luisteren naar <b>poort {0}</b> (http) en <b>poort {1}</b> "
+"(https) op localhost.<br>Deze poorten zijn niet te configureren omdat er "
+"naar wordt verwezen door externe toepassingen die spreken met JOSM."
 
 msgid "Enable remote control"
 msgstr "Afstandsbediening inschakelen"
 
 msgid "Enable HTTPS support"
-msgstr ""
+msgstr "Ondersteuning voor HTTPS inschakelen"
 
 msgid "Install..."
-msgstr ""
+msgstr "Installeren…"
 
 msgid "Uninstall..."
-msgstr ""
+msgstr "Deïnstalleren..."
 
 msgid "Install JOSM localhost certificate to system/browser root keystores"
 msgstr ""
+"Certificaat voor JOSM localhost installeren in systeem/browser bronopslag "
+"voor sleutels"
 
 msgid ""
 "Uninstall JOSM localhost certificate from system/browser root keystores"
 msgstr ""
+"Certificaat voor JOSM localhost deïnstalleren in systeem/browser bronopslag "
+"voor sleutels"
 
 msgid "Certificate:"
-msgstr ""
+msgstr "Certificaat:"
 
 msgid "Certificate has been successfully installed."
-msgstr ""
+msgstr "Certificaat is met succes geïnstalleerd."
 
 msgid "Certificate is already installed. Nothing to do."
-msgstr ""
+msgstr "Certificaat is al geïnstalleerd. Niets te doen."
 
 msgid "Removing certificate {0} from root keystore."
-msgstr ""
+msgstr "Certificaat {0} verwijderen uit bronopslag voor sleutels"
 
 msgid "Certificate has been successfully uninstalled."
-msgstr ""
+msgstr "Certificaat is met succes gedeïnstalleerd."
 
 msgid "Certificate is not installed. Nothing to do."
-msgstr ""
+msgstr "Certificaat is niet geïnstalleerd. Niets te doen."
 
 msgid "Permitted actions:"
 msgstr "Toegestane acties:"
@@ -12623,12 +12830,14 @@ msgid "Check interval (minutes):"
 msgstr "Interval voor controle (minuten):"
 
 msgid "Max age for closed notes (days):"
-msgstr ""
+msgstr "Maximale leeftijd voor gesloten opmerkingen (dagen):"
 
 msgid ""
 "Specifies the number of days a note needs to be closed to no longer be "
 "downloaded"
 msgstr ""
+"Specificeert het aantal dagen dat een opmerking moet zijn gesloten om niet "
+"langer te worden gedownload"
 
 msgid "Failed to retrieve OAuth Access Token from credential manager"
 msgstr ""
@@ -12827,7 +13036,7 @@ msgstr ""
 "Kreeg ''{1}''"
 
 msgid "Checks for errors on addresses"
-msgstr ""
+msgstr "Controleren op fouten in adressen"
 
 msgid "Tag combinations"
 msgstr "Tagcombinaties"
@@ -12967,6 +13176,18 @@ msgstr "Voorkeuze toepassen"
 msgid "New relation"
 msgstr "Nieuwe relatie"
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+"The instelling <i>{0}</i> kan niet toegepast worden, omdat niets "
+"geselecteerd is."
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+"The instelling <i>{0}</i> kan niet toegepast worden, omdat de selectie niet "
+"geschikt is."
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] "Wijzig {0} object"
@@ -12982,7 +13203,7 @@ msgid "Change Tags"
 msgstr "Tags wijzigen"
 
 msgid "Add or remove toolbar button"
-msgstr ""
+msgstr "Knop op werkbalk toeovegen of verwijderen"
 
 msgid "Unknown requisite: {0}"
 msgstr "Onbekend vereiste: {0}"
@@ -13085,6 +13306,9 @@ msgstr "Dialoogvenster Voorkeuze zoeken weergeven"
 msgid "Search presets"
 msgstr "Voorkeuzen zoeken"
 
+msgid "Presets"
+msgstr "Voorkeuze"
+
 msgid "Search for objects by preset"
 msgstr "Zoeken naar objecten met voorkeuze"
 
@@ -13095,7 +13319,7 @@ msgid "Search in tags"
 msgstr "In tags zoeken"
 
 msgid "Add toolbar button"
-msgstr ""
+msgstr "Knop op werkbalk toevoegen"
 
 msgid ""
 "Adjustable {0} not registered yet. Cannot set participation in synchronized "
@@ -13109,15 +13333,18 @@ msgstr "Veranderlijke {0} is nog niet geregistreerd."
 
 msgid "Some of the key listeners forgot to remove themselves: {0}"
 msgstr ""
+"Enkele van de luisteraars naar sleutels vergaten zichzelf te verwijderen: {0}"
 
 msgid "Some of the key modifier listeners forgot to remove themselves: {0}"
 msgstr ""
+"Enkele van de luisteraars naar aanpassingen vergaten zichzelf te "
+"verwijderen: {0}"
 
 msgid "All files (*.*)"
 msgstr "Alle bestanden (*.*)"
 
 msgid "Received error page:"
-msgstr ""
+msgstr "Ontvangen pagina met fouten:"
 
 msgid "Min. latitude"
 msgstr "Min. breedtegraad"
@@ -13324,6 +13551,7 @@ msgstr ""
 
 msgid "Unexpected format for port number in preference ''{0}''. Got ''{1}''."
 msgstr ""
+"Onverwachte indeling voor poortnummer in voorkeur ''{0}''. Kreeg ''{1}''."
 
 msgid "The proxy will not be used."
 msgstr "De proxy zal niet worden gebruikt."
@@ -13386,6 +13614,9 @@ msgstr "<html>Kon bestanden niet lezen.<br>Fout is:<br>{0}</html>"
 msgid "GeoJSON Files"
 msgstr "GeoJSON-bestanden"
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr "Laag ''{0}'' niet ondersteund"
 
@@ -13489,10 +13720,10 @@ msgid "Click here to see your inbox."
 msgstr "Klik hier om uw postvak IN te bekijken."
 
 msgid "Message notifier"
-msgstr ""
+msgstr "Aanduiding voor berichten"
 
 msgid "{0} not available (offline mode)"
-msgstr ""
+msgstr "{0} niet beschikbaar (modus Offline)"
 
 msgid ""
 "No primitive with id {0} in local dataset. Cannot infer primitive type."
@@ -13561,19 +13792,19 @@ msgid "NMEA import failure!"
 msgstr "Importeren van NMEA mislukt!"
 
 msgid "Note Files"
-msgstr ""
+msgstr "Bestanden voor Opmerkingen"
 
 msgid "OSM API"
-msgstr ""
+msgstr "OSM API"
 
 msgid "JOSM website"
-msgstr ""
+msgstr "JOSM website"
 
 msgid "Unable to access ''{0}'': {1} not available (offline mode)"
-msgstr ""
+msgstr "Geen toegang tot ''{0}'': {1} niet beschikbaar (modus Offline)"
 
 msgid "Unable to initialize OSM API."
-msgstr ""
+msgstr "Niet mogelijk om de OSM API te initialiseren."
 
 msgid "This version of JOSM is incompatible with the configured server."
 msgstr ""
@@ -13647,10 +13878,10 @@ msgstr ""
 "Geopende wijzigingenset verwacht. Kreeg gesloten wijzigingenset met ID {0}."
 
 msgid "Note upload failed"
-msgstr ""
+msgstr "Uploaden van opmerking mislukt"
 
 msgid "Error parsing note response from server"
-msgstr ""
+msgstr "Fout bij parsen van antwoord voor opmerking vanaf server"
 
 msgid "(Code={0})"
 msgstr "(Code={0})"
@@ -13855,7 +14086,7 @@ msgid "Illegal long value for attribute ''{0}''. Got ''{1}''."
 msgstr "Ongeldige long-waarde voor attribuut ''{0}''. Kreeg ''{1}''."
 
 msgid "{0} bytes have been read"
-msgstr ""
+msgstr "{0} bytes zijn gelezen"
 
 msgid "Prepare OSM data..."
 msgstr "Gegevens van OSM voorbereiden..."
@@ -13965,11 +14196,14 @@ msgid "Unexpected id 0 for osm primitive found"
 msgstr "Onverwachte ID voor primitief van OSM gevonden"
 
 msgid "OSM Server Files zip compressed"
-msgstr ""
+msgstr "OSM Server Bestanden zip-gecomprimeerd"
 
 msgid "WMS Files (*.wms)"
 msgstr "WMS-bestanden (*.wms)"
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr "Niet-ondersteunde versie WMS-bestand; gevonden {0}, verwachtte {1}"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -14043,25 +14277,28 @@ msgid "Read protocol version"
 msgstr "Lees protocolversie"
 
 msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
-msgstr ""
+msgstr "Kan geen IPv4 afstandsbedieningserver starten op poort {0}: {1}"
 
 msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
-msgstr ""
+msgstr "Kan geen IPv6 afstandsbedieningserver starten op poort {0}: {1}"
 
 msgid "RemoteControl::Accepting remote connections on {0}:{1}"
-msgstr ""
+msgstr "Afstandsbediening::Verbindingen op afstand accepteren op {0}:{1}"
 
 msgid "RemoteControl::Server {0}:{1} stopped."
-msgstr ""
+msgstr "Afstandsbediening::Server {0}:{1} gestopt."
 
 msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
+"Kan geen IPv4 afstandsbediening https-server starten op poort {0}: {1}"
 
 msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
+"Kan geen IPv6 afstandsbediening https-server starten op poort {0}: {1}"
 
 msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
+"Afstandsbediening::Beveiligde verbindingen op afstand accepteren op {0}:{1}"
 
 msgid "Remote Control has been asked to create a new node."
 msgstr "Afstandsbediening is gevraagd om een nieuwe knoop te maken."
@@ -14116,10 +14353,10 @@ msgid "The minima must be less than the maxima"
 msgstr "De minima moeten kleiner zijn dan de maxima"
 
 msgid "Remote Control has been asked to load the following data:"
-msgstr ""
+msgstr "Afstandsbediening is gevraagd de volgende gegevens te laden:"
 
 msgid "Loading data"
-msgstr ""
+msgstr "Gegevens laden"
 
 msgid ""
 "Remote Control has been asked to load objects (specified by their id) from "
@@ -14192,6 +14429,8 @@ msgstr ""
 msgid ""
 "Version ''{0}'' of meta data for marker layer is not supported. Expected: 0.1"
 msgstr ""
+"Versie ''{0}'' van metadata voor markeringslaag wordt niet ondersteund. "
+"Verwacht: 0.1"
 
 msgid "Layer contains unsaved data - save to file."
 msgstr "Laag bevat niet-opgeslagen gegevens - sla in bestand op."
@@ -14340,7 +14579,7 @@ msgstr ""
 "moeten worden uitgeschakeld.<br>Verwijderen uit de instellingen?</html>"
 
 msgid "Plugin update"
-msgstr ""
+msgstr "Plug-in update"
 
 msgid ""
 "You updated your JOSM software.<br>To prevent problems the plugins should be "
@@ -14408,6 +14647,21 @@ msgstr[1] ""
 "Plug-in {0} vereist {1} plug-ins die niet werden gevonden. De ontbrekende "
 "plug-ins zijn:"
 
+msgid "Download and restart"
+msgstr "Downloaden en opnieuw straten"
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+"Klikken om de ontbrekende plug-in te downloaden en JOSM opnieuw te starten"
+msgstr[1] ""
+"Klikken om de ontbrekende plug-ins te downloaden en JOSM opnieuw te starten"
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] "Klikken om door te gaan zonder deze plug-in"
+msgstr[1] "Klikken om door te gaan zonder deze plug-ins"
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -14575,10 +14829,10 @@ msgid "Invalid plugin description ''{0}'' in plugin {1}"
 msgstr "Plugin-beschrijving \"{0}\" in plugin {1} is ongeldig"
 
 msgid "Invalid plugin main version ''{0}'' in plugin {1}"
-msgstr ""
+msgstr "Ongeldige hoofdversie plug-in ''{0}'' in plug-in {1}"
 
 msgid "Missing plugin main version in plugin {0}"
-msgstr ""
+msgstr "Ontbrekende hoofdversie plug-in in plug-in {0}"
 
 msgid "More info..."
 msgstr "Meer info..."
@@ -14674,7 +14928,7 @@ msgstr ""
 "aardig te zijn en een foutenrapport in te dienen."
 
 msgid "Update JOSM"
-msgstr ""
+msgstr "JOSM bijwerken"
 
 msgid ""
 "An unexpected exception occurred. This is always a coding "
@@ -14683,6 +14937,11 @@ msgid ""
 "(<b>{1}</b>).<br><br><b>Please update JOSM</b> before considering to file a "
 "bug report."
 msgstr ""
+"Er trad een onverwachte fout op. Dit als altijd een fout in de "
+"codering.<br><br>Echter, u voert een oude versie van JOSM ({0}) uit,<br>in "
+"plaats van de huidige geteste versie te gebruiken "
+"(<b>{1}</b>).<br><br><b>Werk JOSM bij</b> vóórdat u overweegt een "
+"probleemrapport in te dienen."
 
 msgid "Unexpected Exception"
 msgstr "Er is een onverwachte fout opgetreden"
@@ -15034,7 +15293,7 @@ msgstr ""
 "vertaald): {0}</html>"
 
 msgid "<html>Failed to download data.<br><br>Details: {0}</html>"
-msgstr ""
+msgstr "<html>Gegevens downloaden mislukt.<br><br>Details: {0}</html>"
 
 msgid ""
 "<html>The OSM server<br>''{0}''<br>reported an internal server "
@@ -15178,21 +15437,28 @@ msgid ""
 "A previous version of JOSM has installed a custom certificate in order to "
 "provide HTTPS support for Remote Control:"
 msgstr ""
+"Een eerdere versie van JOSM heeft een aangepast certificaat geïnstalleerd om "
+"ondersteuning te verschaffen voor HTTPS voor Afstandsbediening:"
 
 msgid ""
 "It appears it could be an important <b>security risk</b>.<br><br>You are now "
 "going to be prompted by Windows to remove this insecure certificate.<br>For "
 "your own safety, <b>please click Yes</b> in next dialog."
 msgstr ""
+"Het lijkt erop dat dit een belangrijk <b>veiligheidsrisico</b>.zou kunnen "
+"zijn<br><br>U zult nu door Windows worden gevraagd om dit onveilige "
+"certificaat te verwijderen.<br>Voor uw eigen veiligheid, <b>klik op Yes</b> "
+"in het volgende dialoogvenster."
 
 msgid "Removing insecure certificate from {0} keystore: {1}"
-msgstr ""
+msgstr "Verwijderen van onveilig certificaat vanuit {0} sleutelopslag: {1}"
 
 msgid "Unable to remove insecure certificate from keystore: {0}"
 msgstr ""
+"Niet mogelijk om onveilig certficaat te verwijderen uit sleutelopslag: {0}"
 
 msgid "JOSM localhost certificate found in {0} keystore: {1}"
-msgstr ""
+msgstr "JOSM localhost certificaat gevonden in {0} sleutelopslag: {1}"
 
 msgid ""
 "Remote Control is configured to provide HTTPS support.<br>This requires to "
@@ -15202,12 +15468,20 @@ msgid ""
 "next dialog.<br><br>If unsure, you can also click No then disable HTTPS "
 "support in Remote Control preferences."
 msgstr ""
+"Afstandsbediening is geconfigureerd voor ondersteuning voor HTTPS.<br>Dit "
+"vereist dat een aangepast certificaat, gegenereerd door JOSM, wordt "
+"toegevoegd aan de Windows Root CA-opslag.<br><br>U zult nu door Windows "
+"worden gevraagd om deze bewerking te bevestigen.<br>Om de juiste "
+"ondersteuning voor HTTPS in te schakelen, <b>klik op Yes</b> in het volgende "
+"dialoogvenster.<br><br>Indien u twijfelt kunt u ook No klikken en dan "
+"ondersteuning voor HTTPS uitschakelen in de voorkeuren voor "
+"Afstandsbediening."
 
 msgid "HTTPS support in Remote Control"
-msgstr ""
+msgstr "Ondersteuning voor HTTPS in Afstandsbediening"
 
 msgid "Adding JOSM localhost certificate to {0} keystore"
-msgstr ""
+msgstr "JOSM localhost certificaat toevoegen aan {0} sleutelopslag"
 
 msgid "Silent shortcut conflict: ''{0}'' moved by ''{1}'' to ''{2}''."
 msgstr ""
@@ -15380,7 +15654,7 @@ msgstr "bosbouw"
 
 msgctxt "landuse"
 msgid "meadow"
-msgstr ""
+msgstr "weiland"
 
 msgctxt "landuse"
 msgid "farmland"
@@ -15602,6 +15876,9 @@ msgstr "Bijwerken"
 msgid "Update directory listing."
 msgstr "Lijst van map bijwerken."
 
+msgid "View"
+msgstr "Beeld"
+
 msgid "Blue:"
 msgstr "Blauw:"
 
@@ -15624,978 +15901,1031 @@ msgid "Saturation:"
 msgstr "Verzadiging:"
 
 msgid "Landsat"
-msgstr ""
+msgstr "Landsat"
 
 msgid "Bing aerial imagery"
-msgstr ""
+msgstr "Bing luchtfotografie"
 
 msgid "HDM (Humanitarian OpenStreetMap Team)"
-msgstr ""
+msgstr "HDM (Humanitarian OpenStreetMap Team)"
 
 msgid "Mapbox Satellite"
-msgstr ""
+msgstr "Mapbox Satellite"
 
 msgid "MapQuest Open Aerial"
-msgstr ""
+msgstr "MapQuest Open Aerial"
 
 msgid "OpenStreetMap GPS Traces"
-msgstr ""
+msgstr "OpenStreetMap GPS-sporen"
 
-msgid "OpenStreetMap (Mapnik)"
-msgstr ""
+msgid "OpenStreetMap (Standard layer)"
+msgstr "OpenStreetMap (Standaard laag)"
 
 msgid "skobbler"
-msgstr ""
+msgstr "skobbler"
 
 msgid "OpenStreetMap (Mapnik Black & White)"
-msgstr ""
+msgstr "OpenStreetMap (Mapnik zwart-wit)"
 
 msgid "OpenStreetMap (Mapnik, no labels)"
-msgstr ""
-
-msgid "skobbler heatmap"
-msgstr ""
+msgstr "OpenStreetMap (Mapnik, geen labels)"
 
 msgid "OpenCycleMap"
-msgstr ""
+msgstr "OpenCycleMap"
 
 msgid "MapQuest OSM"
-msgstr ""
+msgstr "MapQuest OSM"
 
 msgid "Public Transport (ÖPNV)"
-msgstr ""
+msgstr "Public Transport (ÖPNV)"
 
 msgid "OpenStreetMap (German Style)"
-msgstr ""
+msgstr "OpenStreetMap (Duitse stijl)"
 
 msgid "Cambodia, Laos, Thailand, Vietnam bilingual"
-msgstr ""
+msgstr "Cambodia, Laos, Thailand, Vietnam tweetalig"
 
 msgid "osmfr"
-msgstr ""
+msgstr "osmfr"
 
 msgid "OpenPT Map (overlay)"
-msgstr ""
+msgstr "OpenPT Map (overlay)"
 
 msgid "Strava cycling heatmap"
-msgstr ""
+msgstr "Strava fietsen heatmap"
 
 msgid "Strava running heatmap"
-msgstr ""
+msgstr "Strava hardlopen heatmap"
 
 msgid "Locator Overlay"
-msgstr ""
+msgstr "Locator Overlay"
 
 msgid "QA No Address"
-msgstr ""
+msgstr "QA Geen adres"
 
 msgid "Waymarked Trails: Hiking"
-msgstr ""
+msgstr "Weggemarkeerde paden: Wandelen"
 
 msgid "Waymarked Trails: Cycling"
-msgstr ""
+msgstr "Weggemarkeerde paden: Fietsen"
 
 msgid "Waymarked Trails: MTB"
-msgstr ""
+msgstr "Weggemarkeerde paden: MTB"
 
 msgid "Waymarked Trails: Skating"
-msgstr ""
+msgstr "Weggemarkeerde paden: Schaatsen"
 
 msgid "Waymarked Trails: Horse Riding"
-msgstr ""
+msgstr "Weggemarkeerde paden: Paardrijden"
 
 msgid "Waymarked Trails: Winter Sports"
-msgstr ""
+msgstr "Weggemarkeerde paden: Wintersport"
 
 msgid "OSM Inspector: Geometry"
-msgstr ""
+msgstr "OSM Inspector: Geometrie"
 
 msgid "OSM Inspector: Tagging"
-msgstr ""
+msgstr "OSM Inspector: Taggen"
 
 msgid "OSM Inspector: Places"
-msgstr ""
+msgstr "OSM Inspector: Plaatsen"
 
 msgid "OSM Inspector: Highways"
-msgstr ""
+msgstr "OSM Inspector: Wegen"
 
 msgid "OSM Inspector: Multipolygon"
-msgstr ""
+msgstr "OSM Inspector: Multipolygonen"
 
 msgid "OSM Inspector: Routing"
-msgstr ""
+msgstr "OSM Inspector: Routeren"
 
 msgid "OSM Inspector: Addresses"
-msgstr ""
+msgstr "OSM Inspector: Adressen"
 
 msgid "OSM Inspector: Boundaries (EU)"
-msgstr ""
+msgstr "OSM Inspector: Grenzen (EU)"
 
 msgid "AGRI black-and-white 2.5m"
-msgstr ""
+msgstr "AGRI zwart-wit 2.5m"
 
 msgid "Geoimage.at MaxRes"
-msgstr ""
+msgstr "Geoimage.at MaxRes"
 
 msgid "basemap.at"
-msgstr ""
+msgstr "basemap.at"
 
 msgid "basemap.at Orthofoto"
-msgstr ""
+msgstr "basemap.at Orthofoto"
 
 msgid "Graz: Basiskarte (base map)"
-msgstr ""
+msgstr "Graz: Basiskarte (basiskaart)"
 
 msgid "Tiris: DGM (Terrain model)"
-msgstr ""
+msgstr "Tiris: DGM (Terreinmodel)"
 
 msgid "Tiris: DOM (Surface model)"
-msgstr ""
+msgstr "Tiris: DOM (Oppervlaktemodel)"
 
 msgid "Vienna: Mehrzweckkarte (general purpose)"
-msgstr ""
+msgstr "Wenen: Mehrzweckkarte (algemene doeleinden)"
 
 msgid "Vienna: Beschriftungen (annotations)"
-msgstr ""
+msgstr "Wenen: Beschriftungen (annotaties)"
 
 msgid "Vienna: Orthofoto (aerial image)"
-msgstr ""
+msgstr "Wenen: Orthofoto (luchtfoto)"
 
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
-msgstr ""
+msgstr "VoGIS: Echtfarbenbild 2012 (12cm)"
+
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
 
 msgid "VoGIS: Flächenwidmungsplan"
-msgstr ""
+msgstr "VoGIS: Flächenwidmungsplan"
 
 msgid "VoGIS: DGM (Terrain model)"
-msgstr ""
+msgstr "VoGIS: DGM (Terreinmodel)"
 
 msgid "VoGIS: DOM (Surface model)"
-msgstr ""
+msgstr "VoGIS: DOM (Oppervlaktemodel)"
 
 msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
-msgstr ""
+msgstr "AGIV(laanderen) luchtfoto (bedekt ook de regio Brussel) (2013)"
+
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr "SPW(allonie) PICC numerieke afbeeldingen"
 
 msgid "SPW(allonie) 2012 aerial imagery"
-msgstr ""
+msgstr "SPW(allonie) 2012 luchtfoto"
 
 msgid "SPW(allonie) 2009 aerial imagery"
+msgstr "SPW(allonie) 2009 luchtfoto"
+
+msgid "cadastre: for names and house numbers only, bad geometry"
 msgstr ""
 
 msgid "IBGE Mapa de Setores Urbanos"
-msgstr ""
+msgstr "IBGE Mapa de Setores Urbanos"
 
 msgid "IBGE Mapa de Setores Rurais"
-msgstr ""
+msgstr "IBGE Mapa de Setores Rurais"
 
 msgid "Geobase Hydrography"
-msgstr ""
+msgstr "Geobase Hydrografie"
 
 msgid "Geobase Roads"
-msgstr ""
+msgstr "Geobase Wegen"
 
 msgid "Canvec"
-msgstr ""
+msgstr "Canvec"
 
 msgid "British Columbia Mosaic"
-msgstr ""
+msgstr "British Columbia Mozaïek"
 
 msgid "Kelowna 2012"
-msgstr ""
+msgstr "Kelowna 2012"
 
 msgid "Kelowna Roads overlay"
-msgstr ""
+msgstr "Kelowna Wegen overlay"
 
 msgid "Czech CUZK:KM"
-msgstr ""
+msgstr "Czech CUZK:KM"
 
 msgid "Czech RUIAN budovy"
-msgstr ""
+msgstr "Czech RUIAN budovy"
 
 msgid "Czech RUIAN parcely"
-msgstr ""
+msgstr "Czech RUIAN parcely"
 
 msgid "Czech pLPIS"
-msgstr ""
-
-msgid "Fugro (Denmark)"
-msgstr ""
+msgstr "Czech pLPIS"
 
 msgid "Geodatastyrelsen (Denmark)"
-msgstr ""
+msgstr "Geodatastyrelsen (Denemarken)"
+
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr "Geodatastyrelsen DTK Kort25"
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr "Geodatastyrelsen Skyggekort 1.6m"
+
+msgid "Geodatastyrelsen Skærmkort"
+msgstr "Geodatastyrelsen Skærmkort"
 
 msgid "Stevns (Denmark)"
-msgstr ""
+msgstr "Stevns (Denemarken)"
 
 msgid "Vejmidte (Denmark)"
-msgstr ""
+msgstr "Vejmidte (Denemarken)"
 
 msgid "Estonia Basemap (Maaamet)"
-msgstr ""
+msgstr "Estonia Basemap (Maaamet)"
 
 msgid "Estonia Ortho (Maaamet)"
-msgstr ""
+msgstr "Estonia Ortho (Maaamet)"
 
 msgid "Estonia Hillshade (Maaamet)"
-msgstr ""
+msgstr "Estonia Hillshade (Maaamet)"
 
 msgid "Estonia Cadastre (Maaamet)"
-msgstr ""
+msgstr "Estonia Cadastre (Maaamet)"
 
 msgid "Estonia Forestry (Maaamet)"
-msgstr ""
+msgstr "Estonia Forestry (Maaamet)"
 
 msgid "BANO"
-msgstr ""
+msgstr "BANO"
+
+msgid "BD Carthage"
+msgstr "BD Carthage"
 
 msgid "Bordeaux - 2012"
-msgstr ""
+msgstr "Bordeaux - 2012"
 
 msgid "Cadastre"
 msgstr "Kadaster"
 
 msgid "CRAIG - Auvergne 2013 - 25 cm"
-msgstr ""
+msgstr "CRAIG - Auvergne 2013 - 25 cm"
 
 msgid "CRIGE PACA Alpes-Maritimes 2009 - 40 cm"
-msgstr ""
+msgstr "CRIGE PACA Alpen-Maritiem 2009 - 40 cm"
 
 msgid "GrandNancy Orthophotographie 2012"
-msgstr ""
+msgstr "GrandNancy luchtfoto 2012"
 
 msgid "Géobretagne - Brest 2010 - 10 cm"
-msgstr ""
+msgstr "Géobretagne - Brest 2010 - 10 cm"
 
 msgid "Géobretagne - Morbihan 2010"
-msgstr ""
+msgstr "Géobretagne - Morbihan 2010"
 
 msgid "Géolittoral - Orthophotos 2000"
-msgstr ""
+msgstr "Géolittoral - luchtfoto''s 2000"
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
-msgstr ""
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
+msgstr "Géolittoral V2 - Orthophotos 2011-2014"
 
 msgid "Géolittoral - Sentiers"
-msgstr ""
+msgstr "Géolittoral - Sentiers"
 
 msgid "Grand Lyon - Orthophotographie 2012 - 10cm"
-msgstr ""
+msgstr "Grand Lyon -  luchtfoto 2012 - 10cm"
 
 msgid "Loire-Atlantique - Orthophotos 2012 - 20 cm"
-msgstr ""
+msgstr "Loire-Atlantique -  luchtfoto''s 2012 - 20 cm"
 
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
-msgstr ""
+msgstr "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
+
+msgid "Route 500™©®"
+msgstr "Route 500™©®"
 
 msgid "Toulouse - Orthophotoplan 2013"
-msgstr ""
+msgstr "Toulouse - Orthophotoplan 2013"
 
 msgid "Toulouse - Orthophotoplan 2011"
-msgstr ""
+msgstr "Toulouse - Orthophotoplan 2011"
 
 msgid "Toulouse - Orthophotoplan 2007"
-msgstr ""
+msgstr "Toulouse - Orthophotoplan 2007"
 
 msgid "Tours - Orthophotos 2013"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
+msgstr "Tours -  luchtfoto''s 2013"
 
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
 msgstr ""
+"Vercors - Réserve naturelle des Hauts-Plateaux du Vercors -  luchtfoto''s "
+"1999 - 1 m"
 
 msgid "Hike & Bike"
-msgstr ""
+msgstr "Wandelen & Fietsen"
 
 msgid "OpenStreetMap (Sorbian Language)"
-msgstr ""
+msgstr "OpenStreetMap (taal: Servisch)"
 
 msgid "Hamburg (40 cm)"
-msgstr ""
+msgstr "Hamburg (40 cm)"
 
 msgid "Hamburg (20 cm)"
-msgstr ""
+msgstr "Hamburg (20 cm)"
 
 msgid "Hamburg (DK5)"
+msgstr "Hamburg (DK5)"
+
+msgid "Bavaria (80 cm)"
 msgstr ""
 
 msgid "Bavaria (2 m)"
-msgstr ""
+msgstr "Beieren (2 m)"
 
 msgid "Stuttgart (Luftbild)"
-msgstr ""
+msgstr "Stuttgart (luchtfoto)"
 
 msgid "Erlangen Luftbild (2013 6,25 cm)"
-msgstr ""
+msgstr "Erlangen luchtfoto (2013 6,25 cm)"
 
 msgid "Erlangen 2011 Luftbild (5,0 cm)"
-msgstr ""
+msgstr "Erlangen 2011 luchtfoto (5,0 cm)"
 
 msgid "Old map of Zwenkau - TK25 Messtischblatt (4739; 1906; PROJ.4-rect)"
 msgstr ""
+"Oude kaart van Zwenkau - TK25 Messtischblatt (4739; 1906; PROJ.4-rect)"
 
 msgid "Old map of Pegau - TK25 Messtischblatt (4839; 1909; PROJ.4-rect)"
-msgstr ""
+msgstr "Oude kaart van Pegau - TK25 Messtischblatt (4839; 1909; PROJ.4-rect)"
 
 msgid "Physical DE - Physische Karte (Naturräume)"
-msgstr ""
+msgstr "Physical DE - Physische Karte (Naturräume)"
 
 msgid "Physical DE:Harz - Physische Karte (Naturräume)"
-msgstr ""
+msgstr "Physical DE:Harz - Physische Karte (Naturräume)"
 
 msgid ""
 "Physical DE:Harz - Overlay für Bing (z.B. Deckkraft zw. 20 und 50 Prozent "
 "nutzen)"
 msgstr ""
+"Physical DE:Harz - Overlay voor Bing (bijv. dekking tussen 20 en 50 procent "
+"gebruiken)"
 
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
+msgstr "Maps4BW (LGL-BW, www.lgl-bw.de)"
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
-msgstr ""
+msgid "NRW-Atlas: ALKIS"
+msgstr "NRW-Atlas: ALKIS"
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
-msgstr ""
+msgstr "NRW-Atlas: Digitale grondkaart 1:5000"
 
 msgid "NRW-Atlas: Luftbilder"
-msgstr ""
+msgstr "NRW-Atlas: Luchtfoto"
 
 msgid "NRW-Atlas: Topographische Karte 1:10000"
-msgstr ""
+msgstr "NRW-Atlas: Topografische kaart 1:10000"
 
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
-msgstr ""
+msgstr "Metropool Ruhr: Luchtfoto (10 cm)"
 
 msgid "Drone Imagery (Haiti)"
-msgstr ""
+msgstr "Drone afbeeldingen (Haiti)"
 
 msgid "Drone Imagery 2014 (Haiti)"
-msgstr ""
+msgstr "Drone afbeeldingen 2014 (Haiti)"
 
 msgid "Ireland British War Office 1:25k GSGS 3906"
-msgstr ""
+msgstr "Ireland British War Office 1:25k GSGS 3906"
 
 msgid "Ireland British War Office One-Inch 1941-43 GSGS 4136"
-msgstr ""
+msgstr "Ireland British War Office One-Inch 1941-43 GSGS 4136"
 
 msgid "Ireland Bartholomew Quarter-Inch 1940"
-msgstr ""
+msgstr "Ireland Bartholomew Quarter-Inch 1940"
+
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr "Ireland Civil Parishes and Baronies - Memorial Atlas"
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr "Memorial Atlas of Ireland (1901) L.J. Richards"
 
 msgid "OSMIE Townlands"
-msgstr ""
+msgstr "OSMIE Townlands"
 
 msgid "OSMIE EDs"
-msgstr ""
+msgstr "OSMIE EDs"
 
 msgid "OSMIE Civil Parishes"
-msgstr ""
+msgstr "OSMIE Civil Parishes"
 
 msgid "OSMIE Baronies"
-msgstr ""
+msgstr "OSMIE Baronies"
 
 msgid "OSMIE Political"
-msgstr ""
-
-msgid "Ireland EEA GMES Urban Atlas"
-msgstr ""
-
-msgid "Ireland EEA CORINE 2006"
-msgstr ""
-
-msgid "Antrim Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
-msgstr ""
-
-msgid "Carlow Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Clare Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Dublin Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Fermanagh Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Galway Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Kildare Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Leitrim Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Longford Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Offaly Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Sligo Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Tyrone Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Westmeath Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Wexford Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Wicklow Civil Parishes and Baronies"
-msgstr ""
+msgstr "OSMIE Political"
 
 msgid "Lodi - Italy"
-msgstr ""
+msgstr "Lodi - Italië"
 
 msgid "Lombardia - Italy (CTR)"
-msgstr ""
+msgstr "Lombardije - Italië (CTR)"
 
 msgid "Sicily - Italy"
-msgstr ""
+msgstr "Sicilië - Italië"
 
 msgid "PCN 2006 - Italy"
-msgstr ""
+msgstr "PCN 2006 - Italië"
 
 msgid "PCN 2008 - IT Lazio+Umbria"
-msgstr ""
+msgstr "PCN 2008 - IT Lazio+Umbria"
 
 msgid "PCN 2012 - Italy"
-msgstr ""
+msgstr "PCN 2012 - Italië"
 
 msgid "South Tyrol Orthofoto 2011"
-msgstr ""
+msgstr "Zuid  Tirol luchtofoto 2011"
 
 msgid "South Tyrol Topomap"
-msgstr ""
+msgstr "Zuid Tirol Topomap"
 
 msgid "USSR - Latvia"
-msgstr ""
+msgstr "USSR - Letland"
 
 msgid "50cm ortho - Latvia"
-msgstr ""
+msgstr "50cm ortho - Letland"
 
 msgid "20cm ortho - Latvia - Coastline"
-msgstr ""
+msgstr "20cm ortho - Letland - kustlijn"
+
+msgid "1.cikla ortofotokarte - Latvia"
+msgstr "1.cikla ortofotokarte - Letland"
 
 msgid "ORT10LT (Lithuania)"
-msgstr ""
+msgstr "ORT10LT (Litouwen)"
 
 msgid "Luxembourg Inspire Ortho 2010"
-msgstr ""
+msgstr "Luxemburg Inspire Ortho 2010"
 
 msgid "Luxembourg Inspire Ortho 2013"
-msgstr ""
+msgstr "Luxemburg Inspire Ortho 2013"
 
 msgid "Luxembourg Inspire Railway"
-msgstr ""
+msgstr "Luxemburg Inspire spoorwegen"
 
 msgid "Luxembourg Inspire Roads"
-msgstr ""
+msgstr "Luxemburg Inspire wegen"
+
+msgid "Luxembourg Inspire Water"
+msgstr "Luxemburg Inspire Water"
 
 msgid "Niger Delta Oct 2012 Landsat"
-msgstr ""
+msgstr "Niger Delta Oct 2012 Landsat"
 
 msgid "Gaza Strip - Pléiades - 2014/07/06"
-msgstr ""
+msgstr "Gaza Strip - Pléiades - 2014/07/06"
 
 msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
-msgstr ""
+msgstr "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 
 msgid "Pangasinán/Bulacan (Phillipines HiRes)"
-msgstr ""
+msgstr "Pangasinán/Bulacan (Filipijnen HiRes)"
 
 msgid "Geoportal 2: Ortofotomapa (aerial image)"
-msgstr ""
+msgstr "Geoportal 2: Ortofotomapa (luchtfoto)"
+
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgstr "Geoportal 2: Ortofotomapa (luchtfoto) WMTS"
 
 msgid "Geoportal 2: PRNG (geo names)"
-msgstr ""
+msgstr "Geoportal 2: PRNG (geo namen)"
+
+msgid "Geoportal 2: ISOK hillshade"
+msgstr "Geoportal 2: ISOK hillshade"
 
 msgid "Będzin: Ortofotomapa 2013 (aerial image)"
-msgstr ""
+msgstr "Będzin: Ortofotomapa 2013 (luchtfoto)"
 
 msgid "Będzin: Budynki (buildings)"
-msgstr ""
+msgstr "Będzin: Budynki (gebouwen)"
 
 msgid "Bytom: Ortofotomapa 2012 (aerial image)"
-msgstr ""
+msgstr "Bytom: Ortofotomapa 2012 (luchtfoto)"
+
+msgid "Bytom: Fotoplan 2014 (aerial image)"
+msgstr "Bytom: Fotoplan 2014 (luchtfoto)"
 
 msgid "Bytom: Budynki (buildings)"
-msgstr ""
+msgstr "Bytom: Budynki (gebouwen)"
 
 msgid "Chorzów: Budynki (buildings)"
-msgstr ""
+msgstr "Chorzów: Budynki (gebouwen)"
+
+msgid "Częstochowa: Budynki (buildings)"
+msgstr "Częstochowa: Budynki (gebouwen)"
 
 msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
-msgstr ""
+msgstr "Częstochowa: Ortofotomapa 2011 (luchtfoto)"
+
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgstr "Częstochowa: Ortofotomapa 2013 (luchtfoto)"
+
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgstr "Częstochowa: Ortofotomapa 2014 (luchtfoto)"
 
 msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
-msgstr ""
+msgstr "Gliwice: Ortofotomapa 2013 (luchtfoto)"
 
 msgid "Gliwice: Budynki (buildings)"
-msgstr ""
+msgstr "Gliwice: Budynki (gebouwen)"
 
 msgid "Katowice: Ortofotomapa (aerial image)"
-msgstr ""
+msgstr "Katowice: Ortofotomapa (luchtfoto)"
+
+msgid "Katowice: Budynki (buildings)"
+msgstr "Katowice: Budynki (gebouwen)"
+
+msgid "Łódź: Budynki (buildings)"
+msgstr "Łódź: Budynki (gebouwen)"
 
 msgid "Łódź: Ortofotomapa (aerial image)"
-msgstr ""
+msgstr "Łódź: Ortofotomapa (luchtfoto)"
+
+msgid "Powiat dębicki: Budynki (buildings)"
+msgstr "Powiat dębicki: Budynki (gebouwen)"
+
+msgid "Powiat lubaczowski: Budynki (buildings)"
+msgstr "Powiat lubaczowski: Budynki (gebouwen)"
+
+msgid "Powiat łańcucki: Budynki (buildings)"
+msgstr "Powiat łańcucki: Budynki (gebouwen)"
+
+msgid "Powiat poznański: Budynki (buildings)"
+msgstr "Powiat poznański: Budynki (gebouwen)"
+
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgstr "Powiat poznański: Ortofotomapa (luchtfoto)"
+
+msgid "Powiat rzeszowski: Budynki (buildings)"
+msgstr "Powiat rzeszowski: Budynki (gebouwen)"
+
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgstr "Powiat rzeszowski: Ortofotomapa (luchtfoto)"
+
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr "Powiat stalowowolski: Budynki (gebouwen)"
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr "Przemyśl: Budynki (gebouwen)"
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgstr "Przemyśl: Ortofotomapa (luchtfoto)"
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
-msgstr ""
+msgstr "Ruda Śląska: Ortofotomapa (luchtfoto)"
 
 msgid "Rzeszów: Ortofotomapa (aerial image)"
-msgstr ""
+msgstr "Rzeszów: Ortofotomapa (luchtfoto)"
 
 msgid "Rzeszów: Budynki (buildings)"
-msgstr ""
+msgstr "Rzeszów: Budynki (gebouwen)"
 
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
-msgstr ""
+msgstr "Siemianowice Śląskie: Ortofotomapa (luchtfoto)"
+
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr "Siemianowice Śląskie: Budynki (gebouwen)"
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr "Świętochłowice: Ortofotomapa 2008 (luchtfoto)"
 
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
-msgstr ""
+msgstr "Świętochłowice: Ortofotomapa 2009 (luchtfoto)"
+
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr "Świętochłowice: Ortofotomapa 2012 (luchtfoto)"
 
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
-msgstr ""
+msgstr "Zabrze: Ortofotomapa 2011 (luchtfoto)"
 
 msgid "trail.pl: Szlaki (paths)"
-msgstr ""
+msgstr "trail.pl: Szlaki (paden)"
 
 msgid "ScanEx IRS"
-msgstr ""
+msgstr "ScanEx IRS"
 
 msgid "ScanEx SPOT"
-msgstr ""
+msgstr "ScanEx SPOT"
 
 msgid "Freemap.sk Car"
-msgstr ""
+msgstr "Freemap.sk Car"
 
 msgid "Freemap.sk Hiking"
-msgstr ""
+msgstr "Freemap.sk Wandelen"
 
 msgid "Freemap.sk Cyclo"
-msgstr ""
+msgstr "Freemap.sk Fietsen"
 
 msgid "Freemap.sk Ski"
-msgstr ""
+msgstr "Freemap.sk Skiën"
 
 msgid "Katastrálna mapa Slovenska (KaPor, 2010-04)"
-msgstr ""
+msgstr "Katastrálna mapa Slovenska (KaPor, 2010-04)"
 
 msgid "Katastrálna mapa Slovenska (KaPor, 2011-05)"
-msgstr ""
+msgstr "Katastrálna mapa Slovenska (KaPor, 2011-05)"
 
 msgid "Slovakia EEA GMES Urban Atlas"
-msgstr ""
+msgstr "Slovakia EEA GMES Stedelijke atlas"
 
 msgid "Slovakia EEA CORINE 2006"
-msgstr ""
+msgstr "Slowakije EEA CORINE 2006"
 
 msgid "Slovakia Historic Maps"
-msgstr ""
+msgstr "Slowakije Historische kaarten"
 
 msgid "RABA-KGZ: Slovenia farmland use"
-msgstr ""
+msgstr "RABA-KGZ: Sloveens gebruik landerijen"
 
 msgid "RABA-KGZ: Slovenia built-up areas"
-msgstr ""
+msgstr "RABA-KGZ: Slovenië bebouwde gebieden"
 
 msgid "South Africa CD:NGI Aerial"
-msgstr ""
+msgstr "Zuid-Afrika CD:NGI Luchtfoto"
 
 msgid "Catastro Spain"
-msgstr ""
+msgstr "Catastro Spanje"
 
 msgid "PNOA Spain"
-msgstr ""
+msgstr "PNOA Spanje"
 
 msgid "SIGPAC Spain"
-msgstr ""
+msgstr "SIGPAC Spanje"
 
 msgid "GRAFCAN - Canary Islands"
-msgstr ""
+msgstr "GRAFCAN - Canarische eilanden"
 
 msgid "ITACyL - Castile and León"
-msgstr ""
+msgstr "ITACyL - Castile en León"
 
 msgid "IDEIB - Balearic Islands"
-msgstr ""
+msgstr "IDEIB - Balearen"
 
 msgid "GRAFCAN Express - Canary Islands"
-msgstr ""
+msgstr "GRAFCAN Express - Canarische eilanden"
 
 msgid "Kanton Aargau 25cm (AGIS 2011)"
-msgstr ""
+msgstr "Kanton Aargau 25cm (AGIS 2011)"
 
 msgid "Kanton Aargau 25cm (AGIS 2014)"
-msgstr ""
+msgstr "Kanton Aargau 25cm (AGIS 2014)"
 
 msgid "Stadt Uster Orthophoto 2008 10cm"
-msgstr ""
+msgstr "Stad Uster Orthophoto 2008 10cm"
 
 msgid "Stadtplan Zürich"
-msgstr ""
+msgstr "Stadskaart Zürich"
 
 msgid "Stadt Zürich Übersichtsplan (Strassen, Gebäude, Hausnummer)"
-msgstr ""
+msgstr "Stad Zürich Overzichtskaart (Straten, gebouwen, huisnummer)"
 
 msgid "Stadt Zürich Luftbild 2011"
-msgstr ""
+msgstr "Stad Zürich Luchtfoto 2011"
 
 msgid "Orthofoto Kanton Solothurn RGB (SOGIS 2011/2012/2013)"
-msgstr ""
+msgstr "Orthofoto Kanton Solothurn RGB (SOGIS 2011/2012/2013)"
 
 msgid "Orthofoto Kanton Solothurn Infrarot (SOGIS 2011/2012/2013)"
-msgstr ""
+msgstr "Orthofoto Kanton Solothurn Infrarood (SOGIS 2011/2012/2013)"
 
 msgid "Canton de Génève 5cm (SITG 2011)"
-msgstr ""
+msgstr "Kanton Génève 5cm (SITG 2011)"
 
 msgid "Canton de Neuchâtel 50cm (SITN 2006)"
-msgstr ""
+msgstr "Kanton Neuchâtel 50cm (SITN 2006)"
 
 msgid "Canton du Jura 50cm (RCJU 1998)"
-msgstr ""
+msgstr "Kanton Jura 50cm (RCJU 1998)"
 
 msgid "Canton de Fribourg 50cm (2005)"
-msgstr ""
+msgstr "Kanton Freiburg 50cm (2005)"
 
 msgid "Stadt Bern 10cm/25cm (2012)"
-msgstr ""
+msgstr "Stad Bern 10cm/25cm (2012)"
 
 msgid "HEIG-VD / Orthophoto Yverdon-les-Bains 25cm (2007)"
-msgstr ""
+msgstr "HEIG-VD / Orthophoto Yverdon-les-Bains 25cm (2007)"
 
 msgid "Ville de Nyon - Orthophoto 2010 HD 5cm/pi"
-msgstr ""
+msgstr "Ville de Nyon - Orthophoto 2010 HD 5cm/pi"
 
 msgid "Cartoriviera - Orthophoto 2012"
-msgstr ""
+msgstr "Cartoriviera - Orthophoto 2012"
 
 msgid "SIGIP - Orthophoto 2012"
-msgstr ""
+msgstr "SIGIP - Orthophoto 2012"
 
 msgid "Lausanne - Orthophoto technique 2012"
-msgstr ""
+msgstr "Lausanne - Orthophoto technique 2012"
 
 msgid "Bonvillars Orthophoto 2013"
-msgstr ""
+msgstr "Bonvillars Orthophoto 2013"
 
 msgid "Fiez Orthophoto 2013"
-msgstr ""
+msgstr "Fiez Orthophoto 2013"
+
+msgid "Taiwan e-Map Open Data"
+msgstr "Taiwan e-Map Open Data"
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr "Taiwan e-Map Open Data (met contourlijnen)"
+
+msgid "Taiwan Village Boundaries"
+msgstr "Taiwan stadsgrenzen"
+
+msgid "Taiwan Land-Section Data"
+msgstr "Taiwan Land-Section Data"
+
+msgid "NLSC Open Data WMTS"
+msgstr "NLSC Open Data WMTS"
 
 msgid "MSR Maps Topo"
-msgstr ""
+msgstr "MSR Maps Topo"
 
 msgid "MSR Maps Urban"
-msgstr ""
+msgstr "MSR Maps Urban"
 
 msgid "USGS Topographic Maps"
-msgstr ""
+msgstr "USGS Topographic Maps"
 
 msgid "USGS Large Scale Imagery"
-msgstr ""
+msgstr "USGS Large Scale Imagery"
 
 msgid "TIGER 2012 Roads Overlay"
-msgstr ""
+msgstr "TIGER 2012 Roads Overlay"
 
-msgid "New & Misaligned TIGER Roads (2014)"
-msgstr ""
+msgid "New & Misaligned TIGER Roads (2015)"
+msgstr "New & Misaligned TIGER Roads (2015)"
 
 msgid "MassGIS L3 Parcels"
-msgstr ""
+msgstr "MassGIS L3 Parcels"
 
 msgid "NC Latest Orthoimagery"
-msgstr ""
+msgstr "NC Laatste luchtfoto''s"
 
 msgid "U.S. Forest Service roads"
-msgstr ""
+msgstr "U.S. Forest Service roads"
 
 msgid "Ukraine - Orthophotomaps 2012"
-msgstr ""
+msgstr "Oekraïne - Orthophotomaps 2012"
 
 msgid "7th Series (OS7)"
-msgstr ""
+msgstr "7th Series (OS7)"
 
 msgid "OS New Popular Edition historic"
-msgstr ""
+msgstr "OS New Popular Edition historic"
 
 msgid "OS OpenData StreetView"
-msgstr ""
+msgstr "OS OpenData StreetView"
 
 msgid "OS OpenData Locator"
-msgstr ""
+msgstr "OS OpenData Locator"
 
 msgid "Surrey Air Survey"
-msgstr ""
+msgstr "Surrey Air Survey"
 
 msgid "NLS - OS 6-inch Scotland 1842-82"
-msgstr ""
+msgstr "NLS - OS 6-inch Scotland 1842-82"
 
 msgid "NLS - OS 1:25k 1st Series 1937-61"
-msgstr ""
+msgstr "NLS - OS 1:25k 1st Series 1937-61"
 
 msgid "NLS - OS 1-inch 7th Series 1955-61"
-msgstr ""
+msgstr "NLS - OS 1-inch 7th Series 1955-61"
 
 msgid "OS 1:25k historic (OSM-Best)"
-msgstr ""
+msgstr "OS 1:25k historisch (OSM-Best)"
 
 msgid "OS 1:25k historic (OSM-Limited)"
-msgstr ""
+msgstr "OS 1:25k historisch (OSM-Limited)"
 
 msgid "OS Scottish Popular historic"
-msgstr ""
+msgstr "OS Schots Populair historisch"
 
 msgid "NLS - Bartholomew Half Inch, 1897-1907"
-msgstr ""
+msgstr "NLS - Bartholomew Half Inch, 1897-1907"
 
 msgid "OS Town Plans, Aberdeen 1866-1867 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Aberdeen 1866-1867 (NLS)"
 
 msgid "OS Town Plans, Airdrie 1858 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Airdrie 1858 (NLS)"
 
 msgid "OS Town Plans, Alexandria 1859 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Alexandria 1859 (NLS)"
 
 msgid "OS Town Plans, Alloa 1861-1862 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Alloa 1861-1862 (NLS)"
 
 msgid "OS Town Plans, Annan 1859 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Annan 1859 (NLS)"
 
 msgid "OS Town Plans, Arbroath 1858 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Arbroath 1858 (NLS)"
 
 msgid "OS Town Plans, Ayr 1855 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Ayr 1855 (NLS)"
 
 msgid "OS Town Plans, Berwick-upon-Tweed 1852 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Berwick-upon-Tweed 1852 (NLS)"
 
 msgid "OS Town Plans, Brechin 1862 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Brechin 1862 (NLS)"
 
 msgid "OS Town Plans, Burntisland 1894 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Burntisland 1894 (NLS)"
 
 msgid "OS Town Plans, Campbelton 1865 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Campbelton 1865 (NLS)"
 
 msgid "OS Town Plans, Coatbridge 1858 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Coatbridge 1858 (NLS)"
 
 msgid "OS Town Plans, Cupar 1854 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Cupar 1854 (NLS)"
 
 msgid "OS Town Plans, Cupar 1893-1894 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Cupar 1893-1894 (NLS)"
 
 msgid "OS Town Plans, Dalkeith 1852 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Dalkeith 1852 (NLS)"
 
 msgid "OS Town Plans, Dalkeith 1893 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Dalkeith 1893 (NLS)"
 
 msgid "OS Town Plans, Dumbarton 1859 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Dumbarton 1859 (NLS)"
 
 msgid "OS Town Plans, Dumfries 1850 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Dumfries 1850 (NLS)"
 
 msgid "OS Town Plans, Dumfries 1893 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Dumfries 1893 (NLS)"
 
 msgid "OS Town Plans, Dundee 1857-1858 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Dundee 1857-1858 (NLS)"
 
 msgid "OS Town Plans, Dundee 1870-1872 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Dundee 1870-1872 (NLS)"
 
 msgid "OS Town Plans, Dunfermline 1854 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Dunfermline 1854 (NLS)"
 
 msgid "OS Town Plans, Dunfermline 1894 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Dunfermline 1894 (NLS)"
 
 msgid "OS Town Plans, Edinburgh 1849-1851 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Edinburgh 1849-1851 (NLS)"
 
 msgid "OS Town Plans, Edinburgh 1876-1877 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Edinburgh 1876-1877 (NLS)"
 
 msgid "OS Town Plans, Edinburgh 1893-1894 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Edinburgh 1893-1894 (NLS)"
 
 msgid "OS Town Plans, Elgin 1868 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Elgin 1868 (NLS)"
 
 msgid "OS Town Plans, Falkirk 1858-1859 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Falkirk 1858-1859 (NLS)"
 
 msgid "OS Town Plans, Forfar 1860-1861 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Forfar 1860-1861 (NLS)"
 
 msgid "OS Town Plans, Forres 1868 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Forres 1868 (NLS)"
 
 msgid "OS Town Plans, Galashiels 1858 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Galashiels 1858 (NLS)"
 
 msgid "OS Town Plans, Girvan 1857 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Girvan 1857 (NLS)"
 
 msgid "OS Town Plans, Glasgow 1857-1858 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Glasgow 1857-1858 (NLS)"
 
 msgid "OS Town Plans, Glasgow 1892-1894 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Glasgow 1892-1894 (NLS)"
 
 msgid "OS Town Plans, Greenock 1857 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Greenock 1857 (NLS)"
 
 msgid "OS Town Plans, Haddington 1853 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Haddington 1853 (NLS)"
 
 msgid "OS Town Plans, Haddington 1893 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Haddington 1893 (NLS)"
 
 msgid "OS Town Plans, Hamilton 1858 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Hamilton 1858 (NLS)"
 
 msgid "OS Town Plans, Hawick 1857-1858 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Hawick 1857-1858 (NLS)"
 
 msgid "OS Town Plans, Inverness 1867-1868 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Inverness 1867-1868 (NLS)"
 
 msgid "OS Town Plans, Irvine 1859 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Irvine 1859 (NLS)"
 
 msgid "OS Town Plans, Jedburgh 1858 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Jedburgh 1858 (NLS)"
 
 msgid "OS Town Plans, Kelso 1857 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Kelso 1857 (NLS)"
 
 msgid "OS Town Plans, Kilmarnock 1857-1859 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Kilmarnock 1857-1859 (NLS)"
 
 msgid "OS Town Plans, Kirkcaldy 1855 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Kirkcaldy 1855 (NLS)"
 
 msgid "OS Town Plans, Kirkcaldy 1894 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Kirkcaldy 1894 (NLS)"
 
 msgid "OS Town Plans, Kirkcudbright 1850 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Kirkcudbright 1850 (NLS)"
 
 msgid "OS Town Plans, Kirkcudbright 1893 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Kirkcudbright 1893 (NLS)"
 
 msgid "OS Town Plans, Kirkintilloch 1859 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Kirkintilloch 1859 (NLS)"
 
 msgid "OS Town Plans, Kirriemuir 1861 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Kirriemuir 1861 (NLS)"
 
 msgid "OS Town Plans, Lanark 1858 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Lanark 1858 (NLS)"
 
 msgid "OS Town Plans, Linlithgow 1856 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Linlithgow 1856 (NLS)"
 
 msgid "OS Town Plans, Mayole 1856-1857 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Mayole 1856-1857 (NLS)"
 
 msgid "OS Town Plans, Montrose 1861-1862 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Montrose 1861-1862 (NLS)"
 
 msgid "OS Town Plans, Musselburgh 1853 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Musselburgh 1853 (NLS)"
 
 msgid "OS Town Plans, Musselburgh 1893 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Musselburgh 1893 (NLS)"
 
 msgid "OS Town Plans, Nairn 1867-1868 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Nairn 1867-1868 (NLS)"
 
 msgid "OS Town Plans, Oban 1867-1868 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Oban 1867-1868 (NLS)"
 
 msgid "OS Town Plans, Peebles 1856 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Peebles 1856 (NLS)"
 
 msgid "OS Town Plans, Perth 1860 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Perth 1860 (NLS)"
 
 msgid "OS Town Plans, Peterhead 1868 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Peterhead 1868 (NLS)"
 
 msgid "OS Town Plans, Port Glasgow 1856-1857 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Port Glasgow 1856-1857 (NLS)"
 
 msgid "OS Town Plans, Portobello 1893-1894 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Portobello 1893-1894 (NLS)"
 
 msgid "OS Town Plans, Rothesay 1862-1863 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Rothesay 1862-1863 (NLS)"
 
 msgid "OS Town Plans, Selkirk 1865 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Selkirk 1865 (NLS)"
 
 msgid "OS Town Plans, St Andrews 1854 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, St Andrews 1854 (NLS)"
 
 msgid "OS Town Plans, St Andrews 1893 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, St Andrews 1893 (NLS)"
 
 msgid "OS Town Plans, Stirling 1858 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Stirling 1858 (NLS)"
 
 msgid "OS Town Plans, Stonehaven 1864 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Stonehaven 1864 (NLS)"
 
 msgid "OS Town Plans, Stranraer 1847 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Stranraer 1847 (NLS)"
 
 msgid "OS Town Plans, Stranraer 1863-1877 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Stranraer 1863-1877 (NLS)"
 
 msgid "OS Town Plans, Stranraer 1893 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Stranraer 1893 (NLS)"
 
 msgid "OS Town Plans, Strathaven 1858 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Strathaven 1858 (NLS)"
 
 msgid "OS Town Plans, Wick 1872 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Wick 1872 (NLS)"
 
 msgid "OS Town Plans, Wigtown 1848 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Wigtown 1848 (NLS)"
 
 msgid "OS Town Plans, Wigtown 1894 (NLS)"
-msgstr ""
+msgstr "OS Town Plans, Wigtown 1894 (NLS)"
 
 msgid "Landsat 233055"
-msgstr ""
+msgstr "Landsat 233055"
 
 msgid ""
 "Group common Address Interpolation inputs in a single dialog, as well as an "
@@ -16617,6 +16947,9 @@ msgid ""
 "polygon. Built to ease mapping of building from background layers. Optimized "
 "for basemap.at."
 msgstr ""
+"Maakt selectie van gebieden in een laag mogelijk en het automatisch maken "
+"van een weg als polygoon. Gebouwd om het in kaart brengen vanuit "
+"achtergrondlagen te vereenvoudigen. Geoptimaliseerd voor basemap.at."
 
 msgid "Tools for drawing buildings."
 msgstr "Programma''s voor het tekenen van gebouwen."
@@ -16659,8 +16992,18 @@ msgstr ""
 "Implementeert een opdrachtregel end maakt het u mogelijk uw opdrachten te "
 "maken. Zie koppeling voor standaard opdrachten (boog, cirkel etc.)"
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+"Verschaft de bibliotheek Commons Imaging. Niet bedoeld om direct door "
+"gebruikers te worden geïnstalleerd, maar meer als afhankelijkheid voor "
+"andere plug-ins."
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
+"(Waarschuwing: Experimenteel!) Gebreedschap voor samenvoegen (samensmelten) "
+"van gegevens."
 
 msgid "Create a grid of ways."
 msgstr "Maak een raster van wegen."
@@ -16675,6 +17018,8 @@ msgid ""
 "Allows to import various file formats into JOSM directly. Currently "
 "supported: TangoGPS, Garmin Trainings Center TCX."
 msgstr ""
+"Maakt het mogelijk verscheidene bestandsindelingen rechtstreeks in JOSM te "
+"importeren. Momenteel ondersteund: TangoGPS, Garmin Trainings Center TCX."
 
 msgid "Download your GPX tracks from openstreetmap.org"
 msgstr "Downloaden van uw GPX-sporen vanaf openstreetmap.org"
@@ -16762,13 +17107,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr "WMSPlugin-stijl afbeeldingen aanpassen van kaartmodus"
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-"Deze experimentele plug-in maakt het voor JOSM mogelijk om cache van tegels "
-"op te slaan in databasebestanden, niet in gigantische cachemappen"
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -16799,6 +17137,9 @@ msgid ""
 "Provides Java Native Access (JNA) library. Not meant to be installed "
 "directly by users, but rather as a dependency for other plugins."
 msgstr ""
+"Verschaft de bibliotheek Java Native Access (JNA). Niet bedoeld om direct "
+"door gebruikers te worden geïnstalleerd, maar meer als afhankelijkheid voor "
+"andere plug-ins."
 
 msgid ""
 "Provides Java Topology Suite (JTS) library and related utilities. Not meant "
@@ -16843,8 +17184,10 @@ msgstr ""
 "kunt foutenrapporten maken, sluiten, ongeldig verklaren, opnieuw openen en "
 "opmerkingen plaatsen door deze plug-in te gebruiken."
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
+"Maakt het voor de gebruiker mogelijk te werken met afbeeldingen die worden "
+"gehost op mapillary.com"
 
 msgid ""
 "Provide a measurement dialog and a layer to measure length and angle of "
@@ -16862,9 +17205,6 @@ msgstr "Overlappende delen van wegen samenvoegen."
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr "Voegt Niet linksaf slaan toe voor sets van 4 of 5 wegen"
 
-msgid "Simplifies download from different read-only APIs."
-msgstr "Vereenvoudigt downloaden vanaf verschillende alleen-lezen API''s."
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 "Maakt het mogelijk om in één keer tags voor attributen toe te wijzen aan "
@@ -16917,9 +17257,12 @@ msgid ""
 "Recommends categories/tags on newly created OSM entities by analysing "
 "spatial entities into training features and using SVM classification"
 msgstr ""
+"Beveelt categorieën/tags aan voor nieuw gemaakte entiteiten voor OSM door "
+"het analyseren van ruimtelijke entiteiten in trainingsobjecten en met behulp "
+"van classificatie van SVM"
 
 msgid "Import/export OSM data in PBF format"
-msgstr ""
+msgstr "Importeren/exporteren van gegevens van OSM in de indeling PBF"
 
 msgid "Import PDF file and convert to ways."
 msgstr "Importeert PDF-bestand en converteert naar wegen."
@@ -16949,6 +17292,8 @@ msgid ""
 "Shows an additional information about point on map. There is only a Czech "
 "RUIAN module available at this moment."
 msgstr ""
+"Geeft aanvullende informatie over een punt op de kaart. Er is op dit moment "
+"slechts een Tsjechische module RUIAN beschikbaar."
 
 msgid "Read and write osmosis poly filter files"
 msgstr "Lees en schrijf osmosis poly filterbestanden"
@@ -16965,6 +17310,17 @@ msgstr ""
 "Deze plug-in vereenvoudigt het mappen en bewerking van routes van het "
 "openbaar vervoer."
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+"Geeft haltes van geselecteerde routes van openbaar vervoer weer als grafiek"
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+"De RasterFiltersPlugin maakt het mogelijk enkele afbeeldingsfilters te "
+"kiezen en toe te passen op enkele lagen"
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr "Venster voor bewerken en maken van relatie en multipolygoon."
 
@@ -16977,6 +17333,11 @@ msgid ""
 "properties window. Available country presets: Belgium, Germany, Poland, "
 "Slovakia, Spain."
 msgstr ""
+"Plug-in voor het taggen van objecten, gebaseerd op een selectie van "
+"verkeersborden. Het dialoogvenster kan worden geopend door te klikken op een "
+"klein pictogram in de rechter bovenhoek of het venster Eigenschappen. "
+"Beschikbare voorkeuzen voor landen: België, Duitsland, Polen, Slowakije, "
+"Spanje."
 
 msgid ""
 "Renders routes (bus, hiking trails, bicycle routes, ..). Route types must be "
@@ -16992,10 +17353,10 @@ msgid "Loads data from SDS"
 msgstr "Laadt gegevens van SDS"
 
 msgid "Imagery Layer for Sea Charts"
-msgstr ""
+msgstr "Afbeeldingslaag voor zeekaarten"
 
 msgid "Edit features for Sea Charts"
-msgstr ""
+msgstr "Objecten bewerken voor zeekaarten"
 
 msgid ""
 "Simplify area by removing nodes on very obtuse angles. This can be "
@@ -17008,6 +17369,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr "Mogelijkheden om te bewerken voor OpenSeaMap"
 
+msgid "Allows to draw splines"
+msgstr "Maakt tekenen van splines mogelijk"
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -17115,11 +17479,9 @@ msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 "Schakelt zoeken in naar wegpunten die zijn geïmporteerd uit een GPX-bestand."
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr "Selecteer een reeks niet-afgetakte verbonden wegen"
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
+"Vereenvoudigt het koppelen van objecten van OSM aan artikelen van Wikipedia"
 
 msgid ""
 "Drive a race car from point A to point B over aerial imagery, leave cacti "
@@ -17180,55 +17542,55 @@ msgid "sett"
 msgstr "sett"
 
 msgid "Smoothness"
-msgstr ""
+msgstr "Gladheid"
 
 msgid "excellent"
-msgstr ""
+msgstr "excellent"
 
 msgid "Thin Rollers: rollerblade, skateboard"
-msgstr ""
+msgstr "Dunne rollers: rolschaatsen, skateboard"
 
 msgid "good"
-msgstr ""
+msgstr "goed"
 
 msgid "Thin Wheels: racing bike"
-msgstr ""
+msgstr "Dunne wielen: racefiets"
 
 msgid "intermediate"
-msgstr ""
+msgstr "gemiddeld"
 
 msgid "Wheels: city bike, wheelchair, scooter"
-msgstr ""
+msgstr "Wielen: stadsfiets, rolstoel, scooter"
 
 msgid "bad"
-msgstr ""
+msgstr "slecht"
 
 msgid "Robust Wheels: trekking bike, car, rickshaw"
-msgstr ""
+msgstr "Robuuste wielen: trekking-fiets, auto, riksja"
 
 msgid "very_bad"
-msgstr ""
+msgstr "zeer_slecht"
 
 msgid "High Clearance: light duty off-road vehicle"
-msgstr ""
+msgstr "Veel vrijheid: liichtgrwicht off-road voertuig"
 
 msgid "horrible"
-msgstr ""
+msgstr "slecht"
 
 msgid "Off-Road: heavy duty off-road vehicle"
-msgstr ""
+msgstr "Off-Road: zwaar off-road voertuig"
 
 msgid "very_horrible"
-msgstr ""
+msgstr "zeer_slecht"
 
 msgid "Specialized off-road: tractor, ATV"
-msgstr ""
+msgstr "Gespecialiseerd off-road: tractor, ATV"
 
 msgid "impassable"
-msgstr ""
+msgstr "geblokkeerd"
 
 msgid "No wheeled vehicle"
-msgstr ""
+msgstr "Geen voertuigen met wielen"
 
 msgctxt "riding"
 msgid "pitch"
@@ -17301,23 +17663,23 @@ msgid "Width (meters)"
 msgstr "Breedte (meters)"
 
 msgid "Sidewalk"
-msgstr ""
+msgstr "Trottoir"
 
 msgctxt "sidewalk"
 msgid "both"
-msgstr ""
+msgstr "beide"
 
 msgctxt "sidewalk"
 msgid "left"
-msgstr ""
+msgstr "links"
 
 msgctxt "sidewalk"
 msgid "right"
-msgstr ""
+msgstr "rechts"
 
 msgctxt "sidewalk"
 msgid "no"
-msgstr ""
+msgstr "geen"
 
 msgid "Service type"
 msgstr "Type Service"
@@ -17529,6 +17891,14 @@ msgid "basketball"
 msgstr "basketbal"
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr "beachvolleybal"
+
+msgctxt "sport"
+msgid "billiards"
+msgstr "biljarten"
+
+msgctxt "sport"
 msgid "boules"
 msgstr "jeu de boules"
 
@@ -17553,10 +17923,6 @@ msgid "cricket"
 msgstr "cricket"
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr "cricket netten"
-
-msgctxt "sport"
 msgid "croquet"
 msgstr "croquet"
 
@@ -17573,6 +17939,10 @@ msgid "equestrian"
 msgstr "paardensport"
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr "veld_hockey"
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr "Schotse spelen"
 
@@ -17586,17 +17956,29 @@ msgstr "gymnastiek"
 
 msgctxt "sport"
 msgid "handball"
-msgstr ""
-
-msgctxt "sport"
-msgid "hockey"
-msgstr "hockey"
+msgstr "handbal"
 
 msgctxt "sport"
 msgid "horse_racing"
 msgstr "paardenrennen"
 
 msgctxt "sport"
+msgid "ice_hockey"
+msgstr "ijs_hockey"
+
+msgctxt "sport"
+msgid "karting"
+msgstr "karten"
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr "model_vliegtuigen"
+
+msgctxt "sport"
+msgid "motocross"
+msgstr "motorcross"
+
+msgctxt "sport"
 msgid "motor"
 msgstr "motorsport"
 
@@ -17609,6 +17991,10 @@ msgid "racquet"
 msgstr "racquetbal"
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr "op afstand bestuurbare_auto''s"
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr "rugby (league)"
 
@@ -17618,7 +18004,11 @@ msgstr "rugby (union)"
 
 msgctxt "sport"
 msgid "running"
-msgstr ""
+msgstr "hardlopen"
+
+msgctxt "sport"
+msgid "safety_training"
+msgstr "veiligheids_training"
 
 msgctxt "sport"
 msgid "shooting"
@@ -17648,33 +18038,45 @@ msgctxt "sport"
 msgid "tennis"
 msgstr "tennis"
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr "volleybal"
+
+msgctxt "sport"
+msgid "9pin"
+msgstr "9pin bowlen"
+
+msgctxt "sport"
+msgid "10pin"
+msgstr "10pin bowlen"
+
 msgid "Fee"
 msgstr "Parkeergeld"
 
 msgid "06:00-20:00"
-msgstr ""
+msgstr "06:00-20:00"
 
 msgid "Mo-Fr 09:00-18:00,Sa 08:00-14:00"
-msgstr ""
+msgstr "Ma-Vr 09:00-18:00,Za 08:00-14:00"
 
 msgid "May-Sep 09:30-12:30,14:15-19:30"
-msgstr ""
+msgstr "Mei-Sept 09:30-12:30,14:15-19:30"
 
 msgctxt "parking"
 msgid "multi-storey"
-msgstr ""
+msgstr "meerdere-verdiepingen"
 
 msgctxt "parking"
 msgid "surface"
-msgstr ""
+msgstr "oppervlakte"
 
 msgctxt "parking"
 msgid "underground"
-msgstr ""
+msgstr "ondergronds"
 
 msgctxt "parking"
 msgid "rooftop"
-msgstr ""
+msgstr "dak"
 
 msgid "Reference number"
 msgstr "Referentienummer"
@@ -17725,62 +18127,68 @@ msgid "Distance (km)"
 msgstr "Afstand (km)"
 
 msgid "Ascent (m)"
-msgstr ""
+msgstr "Stijging (m)"
 
 msgid "Descent (m)"
-msgstr ""
+msgstr "Daling (m)"
 
 msgid "Roundtrip"
-msgstr ""
+msgstr "Heen en terug"
 
 msgid "Symbol description"
 msgstr "Beschrijving symbool"
 
 msgid "broadleaved"
-msgstr ""
+msgstr "breedbladerig"
 
 msgid "needleleaved"
-msgstr ""
+msgstr "naalden"
 
 msgid "mixed"
 msgstr "gemengd"
 
 msgid "leafless"
-msgstr ""
+msgstr "geen bladeren"
 
 msgid "Cycle"
-msgstr ""
+msgstr "Cyclus"
 
 msgid "deciduous"
 msgstr "loofbomen"
 
 msgid "Plants that are leafless for a certain period during the year."
 msgstr ""
+"Planten die zonder bladeren zijn tijdens een bepaalde periode gedurende het "
+"jaar."
 
 msgid "evergreen"
-msgstr ""
+msgstr "groenblijvend"
 
 msgid "Plants that are never entirely without green foliage."
-msgstr ""
+msgstr "Planten die nooit geheel zonder groene bedekking zijn."
 
 msgid "semi_deciduous"
-msgstr ""
+msgstr "semi_bladdragend"
 
 msgid ""
 "Plants that lose their foliage for a very short period, when old leaves fall "
 "off and new foliage growth is starting."
 msgstr ""
+"Planten die hun bladeren verliezen tijdens een zeer korte periode, wanneer "
+"oude bladeren afvallen en nieuwe bladgroei begint."
 
 msgid "semi_evergreen"
-msgstr ""
+msgstr "semi_groenblijvend"
 
 msgid ""
 "Plants that lose most, but not all, of their foliage for a fraction of the "
 "year."
 msgstr ""
+"Planten die veel, maar niet alle, van hun bladeren verliezen gedurende een "
+"deel van het jaar."
 
 msgid "Habitat with evergreen and deciduous vegetation."
-msgstr ""
+msgstr "Habitat met groenblijvende en bladdragende vegetatie."
 
 msgid "bahai"
 msgstr "Bahai"
@@ -17837,7 +18245,7 @@ msgid "evangelical"
 msgstr "Evangelist"
 
 msgid "greek_catholic"
-msgstr ""
+msgstr "Grieks_katholiek"
 
 msgid "jehovahs_witness"
 msgstr "Jehova''s getuigen"
@@ -17852,7 +18260,7 @@ msgid "mormon"
 msgstr "Mormoon"
 
 msgid "old_catholic"
-msgstr ""
+msgstr "Oud_katholiek"
 
 msgid "orthodox"
 msgstr "Orthodox"
@@ -17870,7 +18278,7 @@ msgid "quaker"
 msgstr "Quaker"
 
 msgid "roman_catholic"
-msgstr ""
+msgstr "Rooms-katholiek"
 
 msgid "shia"
 msgstr "Sjiiet"
@@ -17900,7 +18308,7 @@ msgid "Amount of Cables"
 msgstr "Aantal kabels"
 
 msgid "Amount of circuits"
-msgstr ""
+msgstr "Aantal circuits"
 
 msgid "Location"
 msgstr "Locatie"
@@ -17977,28 +18385,28 @@ msgid "Toll"
 msgstr "Tol"
 
 msgid "Is the water body intermittent (disappears seasonally)?"
-msgstr ""
+msgstr "Is het water getijdegevoelig (verdwijnt regelmatig)?"
 
 msgid "culvert"
-msgstr ""
+msgstr "duiker"
 
 msgid "Water access rules:"
-msgstr ""
+msgstr "Regels voor toegang water:"
 
 msgid "Ship"
-msgstr ""
+msgstr "Schip"
 
 msgid "designated"
-msgstr "bestemmingsverkeer"
+msgstr "bestemd voor"
 
 msgid "Boat"
-msgstr ""
+msgstr "Boot"
 
 msgid "Motorboat"
-msgstr ""
+msgstr "Motorboot"
 
 msgid "Canoe"
-msgstr ""
+msgstr "Kano"
 
 msgid "Streets"
 msgstr "Straten"
@@ -18039,6 +18447,9 @@ msgstr "Tertiaire koppeling"
 msgid "Unclassified"
 msgstr "Niet geclassificeerd"
 
+msgid "Street has no name"
+msgstr "Straat is zonder naam"
+
 msgid "Passing Places"
 msgstr "Passeerstroken"
 
@@ -18108,12 +18519,17 @@ msgid "Parking Aisle"
 msgstr "Weg op parkeerplaats"
 
 msgid "Escape"
-msgstr ""
+msgstr "Vluchthaven"
 
 msgid ""
 "Emergency lane beside long descending slopes for trucks and other vehicles "
 "to stop safely after brake failure."
 msgstr ""
+"Noodbaan langs lange afdalingen voor trucks en andere voertuigen om veilig "
+"te stoppen in geval van weigeren van remmen."
+
+msgid "Raceway"
+msgstr "Racecircuit"
 
 msgid "Road (Unknown Type)"
 msgstr "Weg (onbekend type)"
@@ -18123,7 +18539,7 @@ msgstr "Weg in aanleg"
 
 msgctxt "Highway"
 msgid "motorway"
-msgstr ""
+msgstr "autoweg"
 
 msgctxt "Highway"
 msgid "motorway_link"
@@ -18139,7 +18555,7 @@ msgstr ""
 
 msgctxt "Highway"
 msgid "primary"
-msgstr ""
+msgstr "primair"
 
 msgctxt "Highway"
 msgid "primary_link"
@@ -18147,47 +18563,47 @@ msgstr ""
 
 msgctxt "Highway"
 msgid "secondary"
-msgstr ""
+msgstr "secundair"
 
 msgctxt "Highway"
 msgid "secondary_link"
-msgstr ""
+msgstr "secundair_aansluiting"
 
 msgctxt "Highway"
 msgid "tertiary"
-msgstr ""
+msgstr "tertiair"
 
 msgctxt "Highway"
 msgid "tertiary_link"
-msgstr ""
+msgstr "tertiair_aansluiting"
 
 msgctxt "Highway"
 msgid "bus_guideway"
-msgstr ""
+msgstr "busstrook"
 
 msgctxt "Highway"
 msgid "bridleway"
-msgstr ""
+msgstr "Ruiterpad"
 
 msgctxt "Highway"
 msgid "living_street"
-msgstr ""
+msgstr "woon_straat"
 
 msgctxt "Highway"
 msgid "pedestrian"
-msgstr ""
+msgstr "voetganger"
 
 msgctxt "Highway"
 msgid "track"
-msgstr ""
+msgstr "spoor"
 
 msgctxt "Highway"
 msgid "footway"
-msgstr ""
+msgstr "voetpad"
 
 msgctxt "Highway"
 msgid "steps"
-msgstr ""
+msgstr "trap"
 
 msgid "Junction"
 msgstr "Afrit"
@@ -18205,6 +18621,8 @@ msgid ""
 "Some road types already imply some access restrictions which should not be "
 "set again."
 msgstr ""
+"Enkele typen wegen impliceren al enkele toegangsbeperkingen die niet opnieuw "
+"zouden moeten worden ingesteld."
 
 msgid "No exit (cul-de-sac)"
 msgstr "Doodlopende weg"
@@ -18222,7 +18640,7 @@ msgid "All vehicles"
 msgstr "Alle voertuigen"
 
 msgid "use_sidepath"
-msgstr ""
+msgstr "rijwielstrook_gebruiken"
 
 msgid "Motor vehicles"
 msgstr "Motorvoertuigen"
@@ -18265,30 +18683,30 @@ msgstr "Inhalen"
 
 msgctxt "overtaking"
 msgid "yes"
-msgstr ""
+msgstr "ja"
 
 msgctxt "overtaking"
 msgid "both"
-msgstr ""
+msgstr "beide"
 
 msgctxt "overtaking"
 msgid "forward"
-msgstr ""
+msgstr "vooruit"
 
 msgctxt "overtaking"
 msgid "backward"
-msgstr ""
+msgstr "achteruit"
 
 msgctxt "overtaking"
 msgid "no"
-msgstr ""
+msgstr "nee"
 
 msgid "Roundabout"
 msgstr "Rotonde"
 
 msgctxt "Highway"
 msgid "construction"
-msgstr ""
+msgstr "constructie"
 
 msgid "Ford"
 msgstr "Doorwaadplek"
@@ -18486,37 +18904,37 @@ msgid "Amount of Steps"
 msgstr "Aantal treden"
 
 msgid "Ramp"
-msgstr ""
+msgstr "Hellingbaan"
 
 msgid "Stroller ramp"
-msgstr ""
+msgstr "Opgang wandelwagen"
 
 msgid "Bicycle ramp"
-msgstr ""
+msgstr "Opgang fiets"
 
 msgid "Wheelchair ramp"
-msgstr ""
+msgstr "Opgang rolstoel"
 
 msgid "Luggage ramp"
-msgstr ""
+msgstr "Opgang bagage"
 
 msgid "automatic"
-msgstr ""
+msgstr "automatisch"
 
 msgid "manual"
-msgstr ""
+msgstr "handmatig"
 
 msgid "Handrail"
-msgstr ""
+msgstr "Leuning"
 
 msgid "Left handrail"
-msgstr ""
+msgstr "Leuning links"
 
 msgid "Center handrail"
-msgstr ""
+msgstr "Leuning midden"
 
 msgid "Right handrail"
-msgstr ""
+msgstr "Leuning rechts"
 
 msgid "Waypoints"
 msgstr "Wegpunten"
@@ -18585,7 +19003,7 @@ msgid "tiger"
 msgstr "tiger"
 
 msgid "Button operated"
-msgstr ""
+msgstr "Bediening met knop"
 
 msgid "Sound signals"
 msgstr "Signalering (acoustisch)"
@@ -18600,16 +19018,16 @@ msgid "Cross on horseback"
 msgstr "Als ruiter oversteken"
 
 msgid "Optional values for specific countries"
-msgstr ""
+msgstr "Optionele waarden voor specifieke landen"
 
 msgid "Stop"
 msgstr "Stop"
 
 msgid "Give Way"
-msgstr ""
+msgstr "Voorrang verlenen"
 
 msgid "Mini-Roundabout"
-msgstr ""
+msgstr "Mini-rotonde"
 
 msgid "clockwise"
 msgstr "met de klok mee"
@@ -18618,7 +19036,7 @@ msgid "Pedestrian Crossing"
 msgstr "Voetgangersoversteekplaats"
 
 msgid "In case of traffic signals:"
-msgstr ""
+msgstr "In het geval van verkeerstekens:"
 
 msgid "Traffic Calming"
 msgstr "Verkeersremmers"
@@ -18651,7 +19069,7 @@ msgid "Turning Circle"
 msgstr "Draaicirkel"
 
 msgid "Turning Loop"
-msgstr ""
+msgstr "Keercirkel"
 
 msgid "City Limit"
 msgstr "Stadsgrens"
@@ -18663,19 +19081,27 @@ msgid "Speed Camera"
 msgstr "Snelheidscamera"
 
 msgid "Traffic Mirror"
-msgstr ""
+msgstr "Verkeersspiegel"
+
+msgid "Highway milestone"
+msgstr "Hectometerpaal"
+
+msgid "Distance (kilometers)"
+msgstr "Afstand (kilometers)"
 
 msgctxt "junction=yes"
 msgid "Named Junction"
-msgstr ""
+msgstr "Benoemde kruising"
 
 msgid ""
 "Used in some countries for a named road junction who’s name serves for local "
 "orientation."
 msgstr ""
+"Gebruikt in bepaalde landen voor een benoemde kruising van wegen waarvan de "
+"naam dient als lokale oriëntatie."
 
 msgid "Elevator"
-msgstr ""
+msgstr "Lift"
 
 msgid "Grit Bin"
 msgstr "Strooibak"
@@ -18784,7 +19210,7 @@ msgid "Kerb"
 msgstr "Berm"
 
 msgid "Entrance (Barrier Opening)"
-msgstr ""
+msgstr "Ingang (opening met barrière)"
 
 msgid "Gate"
 msgstr "Gate"
@@ -18793,15 +19219,15 @@ msgid "Lift Gate"
 msgstr "Slagboom"
 
 msgid "Swing Gate"
-msgstr ""
+msgstr "Klaphek"
 
 msgctxt "swing_gate"
 msgid "single"
-msgstr ""
+msgstr "enkel"
 
 msgctxt "swing_gate"
 msgid "double"
-msgstr ""
+msgstr "dubbel"
 
 msgid "Hampshire Gate"
 msgstr "Draadhek"
@@ -18854,6 +19280,11 @@ msgstr "Zuilengang"
 msgid "Avalanche Protector"
 msgstr "Lawinebescherming"
 
+msgctxt "main group"
+msgid "Water"
+msgstr "Water"
+
+msgctxt "sub group"
 msgid "Water"
 msgstr "Water"
 
@@ -18879,6 +19310,8 @@ msgid ""
 "A point where groundwater naturally flows to the surface of the earth from "
 "underground."
 msgstr ""
+"Een punt waar grondwater natuurlijk naar de oppervlakte stroomt vanuit de "
+"ondergrond."
 
 msgid "Waterfall"
 msgstr "Waterval"
@@ -18907,8 +19340,12 @@ msgstr "Reservoir"
 msgid "Covered Reservoir"
 msgstr "Ondergronds reservoir"
 
+msgctxt "natural"
+msgid "Water"
+msgstr "Water"
+
 msgid "A body of standing water, such as a lake or pond."
-msgstr ""
+msgstr "Een stilstaand water, zoals een meer of een vijver."
 
 msgid "Water Body"
 msgstr "Water"
@@ -18923,7 +19360,7 @@ msgid "lagoon"
 msgstr "lagune"
 
 msgid "oxbow"
-msgstr ""
+msgstr "hoefijzervormig"
 
 msgid "pond"
 msgstr "vijver"
@@ -18935,7 +19372,7 @@ msgid "river"
 msgstr "rivier"
 
 msgid "Salt Water"
-msgstr ""
+msgstr "Zout water"
 
 msgid "Coastline"
 msgstr "Kustlijn"
@@ -18943,6 +19380,7 @@ msgstr "Kustlijn"
 msgid ""
 "Line between the sea and land (with the water on the right side of the way)."
 msgstr ""
+"Lijn tussen de zee en het land (met het water aan de rechterkant van de weg)."
 
 msgid "Riverbank"
 msgstr "Rivieroever"
@@ -18951,7 +19389,7 @@ msgid "Wetland"
 msgstr "Waterrijk land"
 
 msgid "Waterlogged area, either permanently or seasonally with vegetation."
-msgstr ""
+msgstr "Ondergelopen gebied, ofwel permanent of tijdelijk met vegetatie."
 
 msgid "swamp"
 msgstr "Moeras"
@@ -18978,19 +19416,19 @@ msgid "Mud"
 msgstr "Modder"
 
 msgid "Large area covered with mud."
-msgstr ""
+msgstr "Groot gebied gevuld met modder."
 
 msgid "Beach"
 msgstr "Strand"
 
 msgid "A flat area of sand, gravel or pebble next to water."
-msgstr ""
+msgstr "Een vlak gebied van zand, gravel of kiezels langs water."
 
 msgid "swimming"
-msgstr ""
+msgstr "zwemmen"
 
 msgid "surfing"
-msgstr ""
+msgstr "surfen"
 
 msgid "Bay"
 msgstr "Baai"
@@ -18998,6 +19436,7 @@ msgstr "Baai"
 msgid ""
 "A large body of water partially enclosed by land but with a wide mouth."
 msgstr ""
+"Een groot water, gedeeltelijk omsloten door land maar met een brede monding."
 
 msgid "Cliff"
 msgstr "Klif"
@@ -19006,6 +19445,8 @@ msgid ""
 "A steep rock face exposure, with a significant vertical, or near vertical "
 "(leave the lower face to the right of the way)."
 msgstr ""
+"Een steile rotsformatie, significant verticaal, of bijna verticaal (laat de "
+"lage zijde aan de rechterkant van de weg)."
 
 msgid "Shipping"
 msgstr "Scheepvaart"
@@ -19043,11 +19484,125 @@ msgid "Marina"
 msgstr "Jachthaven"
 
 msgid "Dump Station"
-msgstr ""
+msgstr "Afvalstation"
 
 msgid "public"
 msgstr "openbaar"
 
+msgid "Marine Fuel"
+msgstr "Brandstof voor vaartuigen"
+
+msgid "Agip"
+msgstr "Agip"
+
+msgid "Aral"
+msgstr "Aral"
+
+msgid "Avia"
+msgstr "Avia"
+
+msgid "BP"
+msgstr "BP"
+
+msgid "Chevron"
+msgstr "Chevron"
+
+msgid "Citgo"
+msgstr "Citgo"
+
+msgid "Eni"
+msgstr "Eni"
+
+msgid "Esso"
+msgstr "Esso"
+
+msgid "Exxon"
+msgstr "Exxon"
+
+msgid "Gulf"
+msgstr "Gulf"
+
+msgid "Mobil"
+msgstr "Mobil"
+
+msgid "OMV"
+msgstr "OMV"
+
+msgid "Petro-Canada"
+msgstr "Petro-Canada"
+
+msgid "Pioneer"
+msgstr "Pioneer"
+
+msgid "Q8"
+msgstr "Q8"
+
+msgid "Repsol"
+msgstr "Repsol"
+
+msgid "Shell"
+msgstr "Shell"
+
+msgid "Socar"
+msgstr "Socar"
+
+msgid "Statoil"
+msgstr "Statoil"
+
+msgid "Sunoco"
+msgstr "Sunoco"
+
+msgid "Tamoil"
+msgstr "Tamoil"
+
+msgid "Texaco"
+msgstr "Texaco"
+
+msgid "Total"
+msgstr "Total"
+
+msgid "Independent"
+msgstr "Onafhankelijk"
+
+msgid "Fuel types:"
+msgstr "Brandstoffen"
+
+msgid "Diesel"
+msgstr "Diesel"
+
+msgid "Bio Diesel"
+msgstr "Biodiesel"
+
+msgid "Octane 80"
+msgstr "Octaan 80"
+
+msgid "Octane 91"
+msgstr "91 Octaan"
+
+msgid "Octane 92"
+msgstr "Octaan 92"
+
+msgid "Octane 95"
+msgstr "95 Octaan"
+
+msgid "Octane 98"
+msgstr "98 Octaan"
+
+msgid "Octane 100"
+msgstr "100 Octaan"
+
+msgid "E10 (10% Ethanol mix)"
+msgstr "E10 (10% Ethanol mix)"
+
+msgid "E85 (85% Ethanol mix)"
+msgstr "E85 (85% Ethanol mix)"
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr "LPG (Vloeibaar petroleumgas)"
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr "CNG (Samengedrukt aardgas)"
+
 msgid "Pier"
 msgstr "Pier"
 
@@ -19164,6 +19719,9 @@ msgstr "Stootblok"
 msgid "Railway Switch"
 msgstr "wissel spoorweg"
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr "Kabelbaan"
 
@@ -19210,18 +19768,20 @@ msgid ""
 "drag_lift (general type - use only if exact type (see values below) is "
 "unknown)"
 msgstr ""
+"sleep_lift (algemeen type - alleen gebruiken indien exacte type (zie waarden "
+"hieronder) onbekend is)"
 
 msgid "t-bar"
-msgstr ""
+msgstr "T-balk"
 
 msgid "j-bar"
-msgstr ""
+msgstr "J-balk"
 
 msgid "platter"
-msgstr ""
+msgstr "schotel"
 
 msgid "rope_tow"
-msgstr ""
+msgstr "touw"
 
 msgid "Magic Carpet"
 msgstr "Vliegend tapijt"
@@ -19273,7 +19833,7 @@ msgid "See the Wiki for other capacity:[types]=*."
 msgstr "Zie de Wiki voor andere capacity:[types]=*."
 
 msgid "Parking Space"
-msgstr ""
+msgstr "Parkeerplaats"
 
 msgid "Capacity"
 msgstr "Capaciteit"
@@ -19282,83 +19842,11 @@ msgid "Covered (with roof)"
 msgstr "Overdekt (met dak)"
 
 msgid "Parking Entrance"
-msgstr ""
+msgstr "Ingang parkeren"
 
 msgid "Fuel"
 msgstr "Brandstof"
 
-msgid "Agip"
-msgstr "Agip"
-
-msgid "Aral"
-msgstr "Aral"
-
-msgid "Avia"
-msgstr "Avia"
-
-msgid "BP"
-msgstr "BP"
-
-msgid "Chevron"
-msgstr "Chevron"
-
-msgid "Citgo"
-msgstr "Citgo"
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr "Esso"
-
-msgid "Exxon"
-msgstr "Exxon"
-
-msgid "Gulf"
-msgstr "Gulf"
-
-msgid "Mobil"
-msgstr "Mobil"
-
-msgid "OMV"
-msgstr "OMV"
-
-msgid "Petro-Canada"
-msgstr "Petro-Canada"
-
-msgid "Pioneer"
-msgstr "Pioneer"
-
-msgid "Q8"
-msgstr "Q8"
-
-msgid "Repsol"
-msgstr "Repsol"
-
-msgid "Shell"
-msgstr "Shell"
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr "Statoil"
-
-msgid "Sunoco"
-msgstr "Sunoco"
-
-msgid "Tamoil"
-msgstr "Tamoil"
-
-msgid "Texaco"
-msgstr "Texaco"
-
-msgid "Total"
-msgstr "Total"
-
-msgid "Independent"
-msgstr "Onafhankelijk"
-
 msgid "With shop"
 msgstr "Met winkel"
 
@@ -19368,51 +19856,12 @@ msgstr "voeding"
 msgid "kiosk"
 msgstr "tijdschriften"
 
-msgid "Fuel types:"
-msgstr "Brandstoffen"
-
-msgid "Diesel"
-msgstr "Diesel"
-
-msgid "Bio Diesel"
-msgstr "Biodiesel"
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr "Diesel (Gas naar vloeibaar - ultimate diesel)"
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr "Diesel (rode, voor landbouw en machines)"
 
-msgid "Octane 80"
-msgstr "Octaan 80"
-
-msgid "Octane 91"
-msgstr "91 Octaan"
-
-msgid "Octane 92"
-msgstr "Octaan 92"
-
-msgid "Octane 95"
-msgstr "95 Octaan"
-
-msgid "Octane 98"
-msgstr "98 Octaan"
-
-msgid "Octane 100"
-msgstr "100 Octaan"
-
-msgid "E10 (10% Ethanol mix)"
-msgstr "E10 (10% Ethanol mix)"
-
-msgid "E85 (85% Ethanol mix)"
-msgstr "E85 (85% Ethanol mix)"
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr "LPG (Vloeibaar petroleumgas)"
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr "CNG (Samengedrukt aardgas)"
-
 msgid "1/25 mix (mofa/moped)"
 msgstr "1/25 mix (tweetakt)"
 
@@ -19420,16 +19869,16 @@ msgid "1/50 mix (mofa/moped)"
 msgstr "1/50 mix (tweetakt)"
 
 msgid "Fuel cards:"
-msgstr ""
+msgstr "Brandstofkaarten:"
 
 msgid "DKV"
-msgstr ""
+msgstr "DKV"
 
 msgid "Routex"
-msgstr ""
+msgstr "Routex"
 
 msgid "UTA"
-msgstr ""
+msgstr "UTA"
 
 msgid "Charging Station"
 msgstr "Oplaadstation"
@@ -19459,7 +19908,7 @@ msgid "Parts"
 msgstr "Onderdelen"
 
 msgid "Tires"
-msgstr ""
+msgstr "Banden"
 
 msgid "Rental"
 msgstr "Verhuur"
@@ -19556,16 +20005,16 @@ msgid "Bicycles are washed (for a fee)"
 msgstr "Wassen van fietsen (tegen vergoeding)"
 
 msgid "Public Bicycle Repair Station"
-msgstr ""
+msgstr "Openbare reparatie fietsen"
 
 msgid "Chain tool"
-msgstr ""
+msgstr "Gereedchap voor ketting"
 
 msgid "Public Transport"
 msgstr "Openbaar vervoer"
 
 msgid "Public Transport Route"
-msgstr ""
+msgstr "Route openbaar vervoer"
 
 msgid "Route type"
 msgstr "Type route"
@@ -19632,9 +20081,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr "#CD853F"
 
-msgid "route segment"
-msgstr "segment route"
-
 msgid "stop position"
 msgstr "halte"
 
@@ -19653,8 +20099,11 @@ msgstr "perron (alleen uitstappen)"
 msgid "platform (entry only)"
 msgstr "perron (alleen instappen)"
 
+msgid "route segment"
+msgstr "segment route"
+
 msgid "Route Master"
-msgstr ""
+msgstr "Hoofdroute"
 
 msgid "route variant/direction (at least 2)"
 msgstr "route variant/richting (ten minste 2)"
@@ -19739,10 +20188,10 @@ msgid "Reference Number"
 msgstr "Referentienummer"
 
 msgid "Public Transport (Legacy)"
-msgstr ""
+msgstr "Openbaar vervoer (oud)"
 
 msgid "Public transport route (Legacy)"
-msgstr ""
+msgstr "Route openbaar vervoer (oud)"
 
 msgid "forward segment"
 msgstr "segment voorwaarts"
@@ -19784,7 +20233,7 @@ msgid "Tactile Paving"
 msgstr "Tactiele tegels"
 
 msgid "incorrect"
-msgstr ""
+msgstr "onjuist"
 
 msgid "Bus Platform"
 msgstr "Busperron"
@@ -19817,7 +20266,7 @@ msgid "Apron"
 msgstr "Parkeerplaats luchtvaartuig"
 
 msgid "Plane Parking Position"
-msgstr ""
+msgstr "Parkeerpositie vliegtuig"
 
 msgid "Hangar"
 msgstr "Hangar"
@@ -19855,11 +20304,17 @@ msgstr "Hotel"
 msgid "Stars"
 msgstr "Sterren"
 
+msgid "Rooms"
+msgstr "Kamers"
+
+msgid "Beds"
+msgstr "Bedden"
+
 msgid "Motel"
 msgstr "Motel"
 
 msgid "Guest House/Bed & Breakfast"
-msgstr ""
+msgstr "Pension/Bed & Breakfast"
 
 msgid "Chalet"
 msgstr "Bungalowpark"
@@ -19871,7 +20326,7 @@ msgid "Alpine Hut"
 msgstr "Berghut"
 
 msgid "Caravan Site/RV Park"
-msgstr ""
+msgstr "Caravanpark/Camperpark"
 
 msgid "Number of places"
 msgstr "Aantal plaatsen"
@@ -19945,11 +20400,14 @@ msgstr "sandwich"
 msgid "sushi"
 msgstr "sushi"
 
+msgid "steak_house"
+msgstr "steak_house"
+
 msgid "Microbrewery"
 msgstr "Microbrouwerij"
 
 msgid "Outdoor seating"
-msgstr ""
+msgstr "Terras buiten"
 
 msgid "Fast Food"
 msgstr "Fastfood"
@@ -19973,16 +20431,16 @@ msgid "Pub"
 msgstr "Café/Kroeg"
 
 msgid "Beer Garden"
-msgstr ""
+msgstr "Biertuin"
 
 msgid "Bar"
 msgstr "Bar"
 
 msgid "Night Club"
-msgstr ""
+msgstr "Nachtclub"
 
 msgid "Strip Club"
-msgstr ""
+msgstr "Stripclub"
 
 msgid "Tourism"
 msgstr "Toerisme"
@@ -20000,13 +20458,13 @@ msgid "Information Office"
 msgstr "Informatiekantoor"
 
 msgid "An office where you can get information about a town or region."
-msgstr ""
+msgstr "Een kantoor waar u informatie over een stad of regio kunt krijgen."
 
 msgid "Map"
 msgstr "Kaart"
 
 msgid "A board with a map."
-msgstr ""
+msgstr "Een bord met een kaart."
 
 msgid "Detail Grade"
 msgstr "Detailniveau"
@@ -20063,7 +20521,7 @@ msgid "Information Board"
 msgstr "Informatiebord"
 
 msgid "A board with information."
-msgstr ""
+msgstr "Een bord met informatie."
 
 msgid "Board Content"
 msgstr "Inhoud bord"
@@ -20084,7 +20542,7 @@ msgid "plants"
 msgstr "beplanting"
 
 msgid "geology"
-msgstr ""
+msgstr "geologie"
 
 msgid "Guidepost"
 msgstr "Wegwijzer"
@@ -20092,21 +20550,23 @@ msgstr "Wegwijzer"
 msgid ""
 "A Signpost/Guidepost to indicate the directions to different destinations."
 msgstr ""
+"Een wegwijzer om de richtingen naar de verschillende bestemmingen aan te "
+"geven."
 
 msgid "Information Terminal"
 msgstr "Informatiekiosk"
 
 msgid "Information access via electronic methods."
-msgstr ""
+msgstr "Toegang tot informatie via electronische methoden."
 
 msgid "Closer description"
 msgstr "Uitgebreide beschrijving"
 
 msgid "Audio Guide"
-msgstr ""
+msgstr "Audiogids"
 
 msgid "Information using headphones or a mobile phone."
-msgstr ""
+msgstr "Informatie met behulp van koptelefoon of een mobiele telefoon."
 
 msgid "Audioguide via mobile phone?"
 msgstr "Audiogids via mobiele telefoon?"
@@ -20121,19 +20581,19 @@ msgid "Leisure"
 msgstr "Vrije tijd"
 
 msgid "Movie Theater/Cinema"
-msgstr ""
+msgstr "Bioscoop"
 
 msgid "Drive-in theater"
-msgstr ""
+msgstr "Drive-in bioscoop"
 
 msgid "3D"
-msgstr ""
+msgstr "3D"
 
 msgid "Number of screens"
-msgstr ""
+msgstr "Aantal schermen"
 
 msgid "Minimum age"
-msgstr ""
+msgstr "Minimumleeftijd"
 
 msgid "Zoo"
 msgstr "Dierentuin"
@@ -20148,7 +20608,7 @@ msgid "wall"
 msgstr "muur"
 
 msgid "Amusement/Theme Park"
-msgstr ""
+msgstr "Amusements-/Themapark"
 
 msgid "Water Park"
 msgstr "Zwembad"
@@ -20157,7 +20617,10 @@ msgid "Sauna"
 msgstr "Sauna"
 
 msgid "Horse Riding"
-msgstr ""
+msgstr "Paardrijden"
+
+msgid "Casino"
+msgstr "Casino"
 
 msgid "Brothel"
 msgstr "Bordeel"
@@ -20172,7 +20635,7 @@ msgid "Fireplace"
 msgstr "Vuurplaats"
 
 msgid "Picnic Table"
-msgstr ""
+msgstr "picknicktafel"
 
 msgid "Public Grill"
 msgstr "Openbare barbecue"
@@ -20185,7 +20648,7 @@ msgid "charcoal"
 msgstr "houtskool"
 
 msgid "Firepit"
-msgstr ""
+msgstr "Vuurplaats"
 
 msgid "Fishing"
 msgstr "Visstek"
@@ -20396,7 +20859,7 @@ msgid "Public Building"
 msgstr "Openbaar gebouw"
 
 msgid "Town Hall"
-msgstr ""
+msgstr "Stadhuis"
 
 msgid "Community Centre"
 msgstr "Gemeenschapscentrum"
@@ -20414,7 +20877,7 @@ msgid "Police"
 msgstr "Politiebureau"
 
 msgid "Ranger Station"
-msgstr ""
+msgstr "Boswachterkantoor"
 
 msgid "Fire Station"
 msgstr "Brandweerkazerne"
@@ -20459,7 +20922,7 @@ msgid "Clinic"
 msgstr "Kliniek"
 
 msgid "Doctor''s Office"
-msgstr ""
+msgstr "Dokterspraktijk"
 
 msgid "Dentist"
 msgstr "Tandarts"
@@ -20477,7 +20940,7 @@ msgid "Dispensing"
 msgstr "Afleveren"
 
 msgid "Baby Hatch/Safe Haven"
-msgstr ""
+msgstr "Babyluik/Safe haven"
 
 msgid "Emergency Access Point"
 msgstr "EHBO-post"
@@ -20498,7 +20961,7 @@ msgid "Veterinary"
 msgstr "Dierenarts"
 
 msgid "Toilets/Restrooms"
-msgstr ""
+msgstr "Toiletten/Wasruimten"
 
 msgid "Access rights"
 msgstr "Toegangsrechten"
@@ -20534,7 +20997,7 @@ msgid "urinal"
 msgstr "urinoir"
 
 msgid "Shower"
-msgstr ""
+msgstr "Douche"
 
 msgid "Post Box"
 msgstr "Brievenbus"
@@ -20543,13 +21006,13 @@ msgid "Collection times"
 msgstr "Tijden legen"
 
 msgid "Mo-Sa 09:00"
-msgstr ""
+msgstr "Ma-Za 09:00"
 
 msgid "Mo-Fr 17:30; Sa 12:00"
-msgstr ""
+msgstr "Ma-Vr 17:30; Sa 12:00"
 
 msgid "Mo-Fr 15:00,19:00; Sa 15:10; Su 10:30"
-msgstr ""
+msgstr "Ma-Vr 15:00,19:00; Za 15:10; Zo 10:30"
 
 msgid "Drive through"
 msgstr "Overdekt"
@@ -20646,8 +21109,8 @@ msgstr "Toont luchtdruk"
 msgid "Shows humidity"
 msgstr "Toont luchtvochtigheid"
 
-msgid "Recycling"
-msgstr "Inzamelpunt recyclen"
+msgid "Recycling Container"
+msgstr "Recyclecontainer"
 
 msgid "Batteries"
 msgstr "Batterijen"
@@ -20655,38 +21118,65 @@ msgstr "Batterijen"
 msgid "Cans"
 msgstr "Flessen"
 
+msgid "Cardboard"
+msgstr "Karton"
+
+msgid "Electrical Appliances"
+msgstr "Elektrische apparaten"
+
 msgid "Glass"
 msgstr "Glas"
 
+msgid "Glass Bottles"
+msgstr "Glas"
+
+msgid "Green Waste"
+msgstr "Groen afval"
+
 msgid "Paper"
 msgstr "Papier"
 
+msgid "Plastic"
+msgstr "Plastic"
+
+msgid "Plastic Bottles"
+msgstr "Plastic flessen"
+
+msgid "Plastic Packaging"
+msgstr "Plastic verpakking"
+
 msgid "Scrap Metal"
 msgstr "Schroot"
 
-msgid "container"
-msgstr "container"
+msgid "Shoes"
+msgstr "Schoenen"
+
+msgid "Small Appliances"
+msgstr "Kleine apparaten"
 
-msgid "centre"
-msgstr "centraal"
+msgid "Waste"
+msgstr "Afval"
+
+msgid "Recycling Centre"
+msgstr "Recyclestation"
 
 msgid "Waste Basket/Trash Can"
-msgstr ""
+msgstr "Afvalemmer/Afvalbak"
 
 msgid "Waste Disposal/Dumpster"
-msgstr ""
+msgstr "Afvalcontainer"
 
 msgid "Sanitary Dump Station"
-msgstr ""
+msgstr "Sanitair afval"
 
 msgid "Suction pumpout"
-msgstr ""
+msgstr "Afvalpomp"
 
 msgid "Gravity drain for hose"
-msgstr ""
+msgstr "Zwaartekrachtafvoer voor slang"
 
 msgid "Casette or Elsan Disposal"
-msgstr ""
+msgstr "Casette of Elsan-verwijdering"
 
 msgid "Operation times"
 msgstr "Brandtijden"
@@ -20702,11 +21192,11 @@ msgstr "Type schuilplaats"
 
 msgctxt "shelter"
 msgid "basic_hut"
-msgstr ""
+msgstr "basis_hut"
 
 msgctxt "shelter"
 msgid "lean_to"
-msgstr ""
+msgstr "overhangend"
 
 msgctxt "shelter"
 msgid "picnic_shelter"
@@ -20802,10 +21292,10 @@ msgid "Count"
 msgstr "Aantal"
 
 msgid "Advertising Column"
-msgstr ""
+msgstr "Advertentiekolom"
 
 msgid "Billboard"
-msgstr ""
+msgstr "Reclamebord"
 
 msgid "Sports"
 msgstr "Sporten"
@@ -20823,13 +21313,13 @@ msgid "Pitch"
 msgstr "Sportveld"
 
 msgid "artificial_turf"
-msgstr ""
+msgstr "kunst_gras"
 
 msgid "decoturf"
-msgstr ""
+msgstr "decorgras"
 
 msgid "tartan"
-msgstr ""
+msgstr "tartan"
 
 msgid "Racetrack"
 msgstr "Wedstrijdbaan"
@@ -20860,22 +21350,25 @@ msgid "track"
 msgstr "baan"
 
 msgid "Nine-pin Bowling"
-msgstr ""
+msgstr "Negen-pins bowlen"
 
 msgid "Ten-pin Bowling"
-msgstr ""
+msgstr "Tien-pins bowlen"
 
 msgid "Archery"
 msgstr "Boogschieten"
 
 msgid "Track and Field Athletics"
-msgstr ""
+msgstr "Baan- en veldatletiek"
+
+msgid "Running"
+msgstr "Hardlopen"
 
 msgid "Climbing"
 msgstr "Klimmen"
 
 msgid "Canoeing/Kayaking"
-msgstr ""
+msgstr "Kanoën/Kajakken"
 
 msgctxt "racing"
 msgid "pitch"
@@ -20924,7 +21417,7 @@ msgid "water_park"
 msgstr "water_park"
 
 msgid "Scuba Diving"
-msgstr ""
+msgstr "Duiken"
 
 msgid "Piste type"
 msgstr "Soort piste"
@@ -20939,10 +21432,10 @@ msgid "skitour"
 msgstr "skitour"
 
 msgid "sled"
-msgstr ""
+msgstr "slee"
 
 msgid "sleigh"
-msgstr ""
+msgstr "slee"
 
 msgid "snow_park"
 msgstr "sneeuw_park"
@@ -21046,11 +21539,17 @@ msgstr "Honkbal"
 msgid "Basketball"
 msgstr "Basketbal"
 
+msgid "Handball"
+msgstr "Handbal"
+
 msgid "Volleyball"
 msgstr "Volleybal"
 
 msgid "Beach Volleyball"
-msgstr ""
+msgstr "Beach-volleybal"
+
+msgid "Billiards"
+msgstr "Biljarten"
 
 msgid "Golf"
 msgstr "Golf"
@@ -21062,28 +21561,28 @@ msgid "Boule"
 msgstr "Jeu de boules"
 
 msgid "Lawn Bowling"
-msgstr ""
+msgstr "Bowlen (buiten)"
 
 msgid "Cricket"
 msgstr "Cricket"
 
-msgid "Cricket Nets"
-msgstr "Cricket oefenbaan"
-
 msgid "Croquet"
 msgstr "Croquet"
 
-msgid "Hockey"
-msgstr "Hockey"
+msgid "Field Hockey"
+msgstr "Veldhockey"
+
+msgid "Ice Hockey"
+msgstr "IJshockey"
 
 msgid "Pelota"
 msgstr "Pelota"
 
 msgid "Racquetball"
-msgstr ""
+msgstr "Squash"
 
 msgid "Table Tennis/Ping-Pong"
-msgstr ""
+msgstr "Tafeltennis"
 
 msgid "Tennis"
 msgstr "Tennis"
@@ -21092,14 +21591,11 @@ msgid "Motorsport"
 msgstr "Motorsport"
 
 msgid "Kart Racing"
-msgstr ""
+msgstr "Karten"
 
 msgid "Motocross"
 msgstr "Motorcross"
 
-msgid "Safety Training"
-msgstr "Veiligheidstraining"
-
 msgid "Model Aerodrome"
 msgstr "Modelvliegtuigen"
 
@@ -21118,9 +21614,6 @@ msgstr "baan"
 msgid "RC Car"
 msgstr "Op afstand bestuurbare auto''s"
 
-msgid "Raceway"
-msgstr "Racecircuit"
-
 msgid "Man Made"
 msgstr "Bouwwerken"
 
@@ -21150,11 +21643,11 @@ msgstr "zakelijk"
 
 msgctxt "building"
 msgid "barn"
-msgstr ""
+msgstr "schuur"
 
 msgctxt "building"
 msgid "farm_auxiliary"
-msgstr ""
+msgstr "gebouw_bij_boerderij"
 
 msgctxt "building"
 msgid "transportation"
@@ -21190,11 +21683,19 @@ msgstr "schuur"
 
 msgctxt "building"
 msgid "storage_tank"
-msgstr ""
+msgstr "opslagtank"
+
+msgctxt "building"
+msgid "supermarket"
+msgstr "supermarkt"
+
+msgctxt "building"
+msgid "gasometer"
+msgstr "gashouder"
 
 msgctxt "building"
 msgid "cowshed"
-msgstr ""
+msgstr "koeienschuur"
 
 msgctxt "building"
 msgid "construction"
@@ -21202,7 +21703,7 @@ msgstr "constructie"
 
 msgctxt "building"
 msgid "Levels"
-msgstr ""
+msgstr "Niveaus"
 
 msgid "Residential Building"
 msgstr "Woongebouw"
@@ -21240,14 +21741,14 @@ msgid "farm"
 msgstr "land-/tuinbouw"
 
 msgid "Building part"
-msgstr ""
+msgstr "Deel gebouw"
 
 msgctxt "building"
 msgid "Skipped Levels"
-msgstr ""
+msgstr "Gescheiden niveaus"
 
 msgid "Skipped height (meters)"
-msgstr ""
+msgstr "Gescheiden hoogten (meters)"
 
 msgid "Entrance"
 msgstr "Doorgang"
@@ -21306,42 +21807,42 @@ msgid "Gasometer"
 msgstr "Olieopslag"
 
 msgid "Storage Tank"
-msgstr ""
+msgstr "Opslagtank"
 
 msgctxt "content"
 msgid "fuel"
-msgstr ""
+msgstr "Brandstof"
 
 msgctxt "content"
 msgid "manure"
-msgstr ""
+msgstr "Mest"
 
 msgctxt "content"
 msgid "oil"
-msgstr ""
+msgstr "Olie"
 
 msgctxt "content"
 msgid "sewage"
-msgstr ""
+msgstr "afvalwater"
 
 msgctxt "content"
 msgid "silage"
-msgstr ""
+msgstr "kuilvoer"
 
 msgctxt "content"
 msgid "slurry"
-msgstr ""
+msgstr "slurrie"
 
 msgctxt "content"
 msgid "water"
-msgstr ""
+msgstr "water"
 
 msgctxt "content"
 msgid "wine"
-msgstr ""
+msgstr "wijn"
 
 msgid "Bunker Silo"
-msgstr ""
+msgstr "Bunkersilo"
 
 msgid "Pipeline"
 msgstr "Pijpleiding"
@@ -21460,7 +21961,7 @@ msgid "Water Works"
 msgstr "Waterwerken"
 
 msgid "Wastewater Treatment Plant"
-msgstr ""
+msgstr "Afvalwaterzuivering"
 
 msgid "Watermill"
 msgstr "Watermolen"
@@ -21493,7 +21994,7 @@ msgid "Tide Level"
 msgstr "Getijdennniveau"
 
 msgid "Groundwater"
-msgstr ""
+msgstr "Grondwater"
 
 msgid "Traffic"
 msgstr "Verkeer"
@@ -21575,30 +22076,30 @@ msgstr "Camera"
 
 msgctxt "camera:type"
 msgid "fixed"
-msgstr ""
+msgstr "vast"
 
 msgctxt "camera:type"
 msgid "panning"
-msgstr ""
+msgstr "draaibaar"
 
 msgctxt "camera:type"
 msgid "dome"
-msgstr ""
+msgstr "koepel"
 
 msgid "Mounted on"
 msgstr "Gemonteerd op"
 
 msgctxt "camera:mount"
 msgid "wall"
-msgstr ""
+msgstr "muur"
 
 msgctxt "camera:mount"
 msgid "pole"
-msgstr ""
+msgstr "paal"
 
 msgctxt "camera:mount"
 msgid "ceiling"
-msgstr ""
+msgstr "plafond"
 
 msgid "Direction in degrees"
 msgstr "Richting in graden"
@@ -21607,85 +22108,85 @@ msgid "Inclination in degrees"
 msgstr "Helling in braden"
 
 msgid "Bridges"
-msgstr ""
+msgstr "Bruggen"
 
 msgid "aqueduct"
 msgstr "aquaduct"
 
 msgid "boardwalk"
-msgstr ""
+msgstr "promenade"
 
 msgid "cantilever"
-msgstr ""
+msgstr "ophaalbrug"
 
 msgid "covered"
-msgstr ""
+msgstr "bedekt"
 
 msgid "low_water_crossing"
-msgstr ""
+msgstr "laag_water_kruising"
 
 msgid "trestle"
-msgstr ""
+msgstr "schraag"
 
 msgid "viaduct"
 msgstr "viaduct"
 
 msgid "Structure"
-msgstr ""
+msgstr "Structuur"
 
 msgid "arch"
-msgstr ""
+msgstr "boog"
 
 msgid "beam"
-msgstr ""
+msgstr "boom"
 
 msgid "truss"
-msgstr ""
+msgstr "steun"
 
 msgid "floating"
-msgstr ""
+msgstr "zwevend"
 
 msgid "suspension"
 msgstr "overspanning"
 
 msgid "cable-stayed"
-msgstr ""
+msgstr "kabel gezekerd"
 
 msgid "simple-suspension"
-msgstr ""
+msgstr "enkele overspanning"
 
 msgid "humpback"
-msgstr ""
+msgstr "ophaalbrug"
 
 msgid "Movable Bridge"
-msgstr ""
+msgstr "Beweegbare brug"
 
 msgid "bascule"
-msgstr ""
+msgstr "baskuul"
 
 msgid "drawbridge"
-msgstr ""
+msgstr "ophaalbrug"
 
 msgid "lift"
-msgstr ""
+msgstr "lift"
 
 msgid "submersible"
-msgstr ""
+msgstr "verzinkbaar"
 
 msgid "swing"
 msgstr "hangbrug"
 
 msgid "transporter"
-msgstr ""
+msgstr "verplaatsbaar"
 
 msgid "Bridge Support"
-msgstr ""
+msgstr "Ondersteuning brug"
 
 msgid "pier"
-msgstr ""
+msgstr "pier"
 
 msgid "abutment"
-msgstr ""
+msgstr "bruggenhoofd"
 
 msgid "lift_pier"
 msgstr ""
@@ -21694,13 +22195,13 @@ msgid "pivot_pier"
 msgstr ""
 
 msgid "Bridge outline"
-msgstr ""
+msgstr "Omtrek brug"
 
 msgid "Power Plant"
 msgstr "Electriciteitscentrale"
 
 msgid "Output forms of energy (optional):"
-msgstr ""
+msgstr "Uitgevoerde vormen van energie (optioneel):"
 
 msgid "Power Generator"
 msgstr "Energievoorziening"
@@ -21721,10 +22222,10 @@ msgid "steam_generator"
 msgstr "stoomgenerator"
 
 msgid "Biogas Power Generator"
-msgstr ""
+msgstr "Biogas-generator"
 
 msgid "Biomass Power Generator"
-msgstr ""
+msgstr "Biomassa-generator"
 
 msgid "Method"
 msgstr "Methode"
@@ -21742,40 +22243,40 @@ msgid "gasification"
 msgstr "vergassing"
 
 msgid "bioreactor"
-msgstr ""
+msgstr "bioreactor"
 
 msgid "anaerobic_digestion / combustion"
-msgstr ""
+msgstr "anaerobische_verzadiging / verbranding"
 
 msgid "pyrolysis"
-msgstr ""
+msgstr "pyrolyse"
 
 msgid "combustion"
-msgstr ""
+msgstr "verbranding"
 
 msgid "steam_turbine"
 msgstr "stoomturbine"
 
 msgid "Coal Power Generator"
-msgstr ""
+msgstr "Kolencentrale"
 
 msgid "Gas Power Generator"
-msgstr ""
+msgstr "Gascentrale"
 
 msgid "combined_cycle"
 msgstr "gecombineerde cyclus"
 
 msgid "Oil Power Generator"
-msgstr ""
+msgstr "Oliecentrale"
 
 msgid "Diesel Power Generator"
-msgstr ""
+msgstr "Dieselcentrale"
 
 msgid "Gasoline Power Generator"
-msgstr ""
+msgstr "Gasoliecentrale"
 
 msgid "Nuclear Reactor"
-msgstr ""
+msgstr "Nucleaire reactor"
 
 msgctxt "generator method"
 msgid "fission"
@@ -21789,7 +22290,7 @@ msgid "Boiling Water Reactor 1 (BWR-1)"
 msgstr "Boiling Water Reactor 1 (BWR-1)"
 
 msgid "fission"
-msgstr ""
+msgstr "splitsing"
 
 msgid "Boiling Water Reactor 2 (BWR-2)"
 msgstr "Boiling Water Reactor 2 (BWR-2)"
@@ -21810,10 +22311,10 @@ msgid "CANada Deuterium Uranium reactor (CANDU)"
 msgstr "CANada Deuterium Uranium reactor (CANDU)"
 
 msgid "cold-fusion"
-msgstr ""
+msgstr "koude fusie"
 
 msgid "fusion"
-msgstr ""
+msgstr "fusie"
 
 msgid "China Pressurized Reactor (CPR-1000)"
 msgstr "China Pressurized Reactor (CPR-1000)"
@@ -21843,7 +22344,7 @@ msgid "Vodo-Vodyanoi Energetichesky Reactor (VVER)"
 msgstr "Vodo-Vodyanoi Energetichesky Reactor (VVER)"
 
 msgid "Solar Power Generator"
-msgstr ""
+msgstr "Zonnekrachtcentrale"
 
 msgctxt "generator method"
 msgid "photovoltaic"
@@ -21857,26 +22358,26 @@ msgid "solar_photovoltaic_panel"
 msgstr "zonnepaneel"
 
 msgid "photovoltaic"
-msgstr ""
+msgstr "fotovoltaïsch"
 
 msgid "solar_thermal_collector"
 msgstr "thermocollector"
 
 msgid "thermal"
-msgstr ""
+msgstr "thermisch"
 
 msgid "Waste Power Generator"
-msgstr ""
+msgstr "Afvalstoffencentrale"
 
 msgctxt "generator method"
 msgid "pyrolysis"
 msgstr "pyrolyse"
 
 msgid "gasification"
-msgstr ""
+msgstr "vergassing"
 
 msgid "Water Turbine"
-msgstr ""
+msgstr "Waterturbine"
 
 msgctxt "generator method"
 msgid "run-of-the-river"
@@ -21894,25 +22395,25 @@ msgid "francis_turbine"
 msgstr "Francisturbine"
 
 msgid "all methods"
-msgstr ""
+msgstr "alle methoden"
 
 msgid "hydrodynamic_screw"
-msgstr ""
+msgstr "hydrodynamische_schroef"
 
 msgid "run-of-the-river"
-msgstr ""
+msgstr "waterkracht"
 
 msgid "kaplan_turbine"
 msgstr "Kaplanturbine"
 
 msgid "run-of-the-river / water-storage"
-msgstr ""
+msgstr "waterkracht/wateropslag"
 
 msgid "pelton_turbine"
 msgstr "Peltonturbine"
 
 msgid "Tidal Water Turbine"
-msgstr ""
+msgstr "Getijdenturbine"
 
 msgctxt "generator method"
 msgid "barrage"
@@ -21926,25 +22427,25 @@ msgid "horizontal_axis"
 msgstr "horizontale as"
 
 msgid "barrage"
-msgstr ""
+msgstr "getijden"
 
 msgid "vertical_axis"
 msgstr "verticale as"
 
 msgid "Wave Energy Converter"
-msgstr ""
+msgstr "Golfenergie converter"
 
 msgid "Osmotic Power Generator"
-msgstr ""
+msgstr "Osmotische centrale"
 
 msgid "Geothermal Power Generator"
-msgstr ""
+msgstr "Geothermische centrale"
 
 msgid "heat_pump"
 msgstr "warmtepomp"
 
 msgid "Wind Turbine"
-msgstr ""
+msgstr "Windturbine"
 
 msgid "Power Substation"
 msgstr "Electriciteit substation"
@@ -21962,7 +22463,7 @@ msgstr "distributie"
 
 msgctxt "power"
 msgid "minor_distribution"
-msgstr ""
+msgstr "kleine_verdeling"
 
 msgctxt "power"
 msgid "converter"
@@ -21985,22 +22486,22 @@ msgid "industrial"
 msgstr "industrieel"
 
 msgid "Power rating (kVA/MVA)"
-msgstr ""
+msgstr "Stroomkracht (kVA/MVA)"
 
 msgid "2700 kVA"
-msgstr ""
+msgstr "2700 kVA"
 
 msgid "12500 kVA"
-msgstr ""
+msgstr "12500 kVA"
 
 msgid "15 MVA"
-msgstr ""
+msgstr "15 MVA"
 
 msgid "50 MVA"
-msgstr ""
+msgstr "50 MVA"
 
 msgid "100 MVA"
-msgstr ""
+msgstr "100 MVA"
 
 msgid "Gas insulated"
 msgstr "Gas geïsoleerd"
@@ -22050,40 +22551,40 @@ msgid "Power Switch"
 msgstr "Electriciteit schakelstation"
 
 msgid "Power Converter"
-msgstr ""
+msgstr "Energie converter"
 
 msgid "Type of converter"
-msgstr ""
+msgstr "Type converter"
 
 msgctxt "power"
 msgid "lcc"
-msgstr ""
+msgstr "lcc"
 
 msgctxt "power"
 msgid "vsc"
-msgstr ""
+msgstr "vsc"
 
 msgctxt "power"
 msgid "back-to-back"
-msgstr ""
+msgstr "back-to-back"
 
 msgid "Amount of poles"
-msgstr ""
+msgstr "Aantal polen"
 
 msgid "monopole"
-msgstr ""
+msgstr "enkelpolig"
 
 msgid "bipole"
-msgstr ""
+msgstr "tweepolig"
 
 msgid "Power rating (MVA)"
-msgstr ""
+msgstr "Stroomsterkte (MVA)"
 
 msgid "Power Compensator"
-msgstr ""
+msgstr "Verdeelstation"
 
 msgid "Type of compensator"
-msgstr ""
+msgstr "Type verdeelstation"
 
 msgctxt "power"
 msgid "shunt_reactor"
@@ -22107,27 +22608,27 @@ msgstr ""
 
 msgctxt "power"
 msgid "filter"
-msgstr ""
+msgstr "filter"
 
 msgctxt "power"
 msgid "series_reactor"
-msgstr ""
+msgstr "serie_reactor"
 
 msgctxt "power"
 msgid "series_capacitor"
-msgstr ""
+msgstr "serie_capacitor"
 
 msgid "Power rating (kvar/Mvar)"
-msgstr ""
+msgstr "Stroomsterkte"
 
 msgid "500 kvar"
-msgstr ""
+msgstr "500 kvar"
 
 msgid "1 Mvar"
-msgstr ""
+msgstr "1 Mvar"
 
 msgid "5 Mvar"
-msgstr ""
+msgstr "5 Mvar"
 
 msgid "Cable Distribution Cabinet"
 msgstr "Verdeelkast"
@@ -22136,35 +22637,35 @@ msgid "Power Tower"
 msgstr "Hoogspanningsmast"
 
 msgid "Type of construction"
-msgstr ""
+msgstr "Type constructie"
 
 msgid "lattice"
-msgstr ""
+msgstr "traliewerk"
 
 msgid "tubular"
-msgstr ""
+msgstr "buisvormig"
 
 msgid "solid"
-msgstr ""
+msgstr "vast"
 
 msgid "steel"
 msgstr "staal"
 
 msgctxt "color"
 msgid "red/white"
-msgstr ""
+msgstr "rood/wit"
 
 msgctxt "power"
 msgid "Tower type"
-msgstr ""
+msgstr "Type mast"
 
 msgctxt "power"
 msgid "suspension"
-msgstr ""
+msgstr "overspanning"
 
 msgctxt "power"
 msgid "anchor"
-msgstr ""
+msgstr "anker"
 
 msgctxt "power"
 msgid "termination"
@@ -22172,7 +22673,7 @@ msgstr ""
 
 msgctxt "power"
 msgid "branch"
-msgstr ""
+msgstr "zijtak"
 
 msgctxt "power"
 msgid "transposing"
@@ -22202,124 +22703,124 @@ msgid "cross"
 msgstr ""
 
 msgid "Tower design"
-msgstr ""
+msgstr "Ontwerp mast"
 
 msgctxt "power"
 msgid "one-level"
-msgstr ""
+msgstr "één niveau"
 
 msgctxt "power"
 msgid "two-level"
-msgstr ""
+msgstr "twee niveaus"
 
 msgctxt "power"
 msgid "donau"
-msgstr ""
+msgstr "donau"
 
 msgctxt "power"
 msgid "three-level"
-msgstr ""
+msgstr "drie niveaus"
 
 msgctxt "power"
 msgid "barrel"
-msgstr ""
+msgstr "tonvormig"
 
 msgctxt "power"
 msgid "asymmetric"
-msgstr ""
+msgstr "asymmetrisch"
 
 msgctxt "power"
 msgid "triangle"
-msgstr ""
+msgstr "driehoekig"
 
 msgctxt "power"
 msgid "flag"
-msgstr ""
+msgstr "vlag"
 
 msgctxt "power"
 msgid "donau;one-level"
-msgstr ""
+msgstr "donau;één niveau"
 
 msgctxt "power"
 msgid "four-level"
-msgstr ""
+msgstr "vier niveaus"
 
 msgctxt "power"
 msgid "six-level"
-msgstr ""
+msgstr "zes niveaus"
 
 msgctxt "power"
 msgid "nine-level"
-msgstr ""
+msgstr "negen niveaus"
 
 msgctxt "power"
 msgid "delta"
-msgstr ""
+msgstr "delta"
 
 msgctxt "power"
 msgid "delta_two-level"
-msgstr ""
+msgstr "delta_twee niveaus"
 
 msgctxt "power"
 msgid "y-frame"
-msgstr ""
+msgstr "Y-frame"
 
 msgctxt "power"
 msgid "x-frame"
-msgstr ""
+msgstr "X-frame"
 
 msgctxt "power"
 msgid "h-frame"
-msgstr ""
+msgstr "H-frame"
 
 msgctxt "power"
 msgid "guyed_h-frame"
-msgstr ""
+msgstr "gekabeld_H-frame"
 
 msgctxt "power"
 msgid "portal"
-msgstr ""
+msgstr "portaal"
 
 msgctxt "power"
 msgid "portal_two-level"
-msgstr ""
+msgstr "portaal_twee niveaus"
 
 msgctxt "power"
 msgid "portal_three-level"
-msgstr ""
+msgstr "portaal_drie niveaus"
 
 msgctxt "power"
 msgid "guyed_v-frame"
-msgstr ""
+msgstr "gekabeld_V-frame"
 
 msgctxt "power"
 msgid "bipole"
-msgstr ""
+msgstr "tweepolig"
 
 msgctxt "power"
 msgid "monopolar"
-msgstr ""
+msgstr "enkelvoudig"
 
 msgid "Triple tower"
-msgstr ""
+msgstr "Driedelige mast"
 
 msgid "Incomplete tower"
-msgstr ""
+msgstr "Onvolledige mast"
 
 msgid "Location transition"
-msgstr ""
+msgstr "Locatie transitie"
 
 msgid "Pole"
 msgstr "Electriciteitsmast"
 
 msgid "Pole with Transformer"
-msgstr ""
+msgstr "Mast met transformator"
 
 msgid "Pole Attributes:"
-msgstr ""
+msgstr "Attributen voor masten:"
 
 msgid "Transformer Attributes:"
-msgstr ""
+msgstr "Attributen voor transformator:"
 
 msgid "Power Line"
 msgstr "Hoogspanningskabel"
@@ -22338,49 +22839,49 @@ msgstr "Aantal geleiders/draden per kabel"
 
 msgctxt "power"
 msgid "single"
-msgstr ""
+msgstr "enkelvoudig"
 
 msgctxt "power"
 msgid "double"
-msgstr ""
+msgstr "dubbel"
 
 msgctxt "power"
 msgid "triple"
-msgstr ""
+msgstr "drievoudig"
 
 msgctxt "power"
 msgid "quad"
-msgstr ""
+msgstr "viervoudig"
 
 msgctxt "power"
 msgid "fivefold"
-msgstr ""
+msgstr "vijfvoudig"
 
 msgctxt "power"
 msgid "sixfold"
-msgstr ""
+msgstr "zesvoudig"
 
 msgctxt "power"
 msgid "eightfold"
-msgstr ""
+msgstr "achtvoudig"
 
 msgid "Used for data communications"
-msgstr ""
+msgstr "Gebruikt voor gegevensoverdracht"
 
 msgid "Power Cable"
-msgstr ""
+msgstr "Stroomkabel"
 
 msgctxt "power cable"
 msgid "underground"
-msgstr ""
+msgstr "ondergronds"
 
 msgctxt "power cable"
 msgid "underwater"
-msgstr ""
+msgstr "onder water"
 
 msgctxt "power cable"
 msgid "overground"
-msgstr ""
+msgstr "bovengronds"
 
 msgid "Historic Places"
 msgstr "Historische locaties"
@@ -22408,30 +22909,30 @@ msgstr "Gedenkplaats"
 
 msgctxt "memorial"
 msgid "statue"
-msgstr ""
+msgstr "standbeeld"
 
 msgctxt "memorial"
 msgid "bust"
-msgstr ""
+msgstr "borstbeeld"
 
 msgctxt "memorial"
 msgid "plaque"
-msgstr ""
+msgstr "plaquette"
 
 msgctxt "memorial"
 msgid "stele"
-msgstr ""
+msgstr "stenen monument"
 
 msgctxt "memorial"
 msgid "stone"
-msgstr ""
+msgstr "gedenksteen"
 
 msgctxt "memorial"
 msgid "war_memorial"
-msgstr ""
+msgstr "oorlogs_monument"
 
 msgid "Inscription"
-msgstr ""
+msgstr "Inscriptie"
 
 msgid "Wayside Cross"
 msgstr "Wegkruis"
@@ -22440,11 +22941,11 @@ msgid "Wayside Shrine"
 msgstr "Kruisbeeld"
 
 msgid "Place of worship"
-msgstr ""
+msgstr "Gebedshuis"
 
 msgctxt "building"
 msgid "wayside_shrine"
-msgstr ""
+msgstr "altaar_langs de weg"
 
 msgid "Boundary Stone"
 msgstr "Historische grenspaal"
@@ -22477,16 +22978,16 @@ msgid "Deli (Fine Food)"
 msgstr "Delicatessen (fijne kost)"
 
 msgid "Candy Store"
-msgstr ""
+msgstr "Snoepwinkel"
 
 msgid "Tea"
-msgstr ""
+msgstr "Thee"
 
 msgid "Coffee"
-msgstr ""
+msgstr "Koffie"
 
 msgid "Public Market"
-msgstr ""
+msgstr "Markt"
 
 msgid "Organic"
 msgstr "Biologische winkel"
@@ -22510,14 +23011,11 @@ msgid "Beverages"
 msgstr "Drankwinkel"
 
 msgid "Wine"
-msgstr ""
+msgstr "Wijn"
 
 msgid "Boutique"
 msgstr "Boetiek"
 
-msgid "Shoes"
-msgstr "Schoenen"
-
 msgid "Outdoor"
 msgstr "Buitensport"
 
@@ -22555,10 +23053,10 @@ msgid "Video"
 msgstr "Videotheek"
 
 msgid "Video Games"
-msgstr ""
+msgstr "Videospelletjes"
 
 msgid "Music"
-msgstr ""
+msgstr "Muziek"
 
 msgid "Cash"
 msgstr "Geldzaken"
@@ -22576,7 +23074,7 @@ msgid "Pawnbroker"
 msgstr "Belening"
 
 msgid "Home decoration"
-msgstr ""
+msgstr "Interieurdecoraties"
 
 msgid "Furniture"
 msgstr "Woonwarenhuis"
@@ -22588,37 +23086,37 @@ msgid "Curtain"
 msgstr "Gordijnenwinkel"
 
 msgid "Art"
-msgstr ""
+msgstr "Kunst"
 
 msgid "Frame"
 msgstr "Lijstenwinkel"
 
 msgid "Bed"
-msgstr ""
+msgstr "Bed"
 
 msgid "Interior Decoration"
-msgstr ""
+msgstr "Interieurdecoratie"
 
 msgid "Antiques"
-msgstr ""
+msgstr "Antiek"
 
 msgid "Printed Material"
-msgstr ""
+msgstr "Drukwerk"
 
 msgid "Stationery"
 msgstr "Kantoorboekhandel"
 
 msgid "Copy Shop"
-msgstr ""
+msgstr "Kopieerwinkel"
 
 msgid "Book Store"
 msgstr "Boekhandel"
 
 msgid "Newspaper Stand"
-msgstr ""
+msgstr "Krantenkiosk"
 
 msgid "Ticket"
-msgstr ""
+msgstr "Kaarten"
 
 msgid "Department Store"
 msgstr "Warenhuis"
@@ -22630,13 +23128,13 @@ msgid "Chemist"
 msgstr "Drogisterij"
 
 msgid "Hairdresser/Barber"
-msgstr ""
+msgstr "Kapper/Barbier"
 
 msgid "Beauty"
-msgstr ""
+msgstr "Schoonheidssalon"
 
 msgid "Tattoo"
-msgstr ""
+msgstr "Tattooshop"
 
 msgid "Optician"
 msgstr "Opticien"
@@ -22645,13 +23143,13 @@ msgid "Hearing Aids"
 msgstr "Hoorapparaten"
 
 msgid "Medical Supply"
-msgstr ""
+msgstr "Medische hulpmiddelen"
 
 msgid "Jewellery"
-msgstr ""
+msgstr "Juwelier"
 
 msgid "Gift/Souvenir"
-msgstr ""
+msgstr "Kadoshop/Souveniers"
 
 msgid "Erotic"
 msgstr "Seksshop"
@@ -22663,7 +23161,7 @@ msgid "Garden Centre"
 msgstr "Tuincentrum"
 
 msgid "Do-It-Yourself Store"
-msgstr ""
+msgstr "Doe-het-zelf winkel"
 
 msgid "Hardware"
 msgstr "Bouwmarkt"
@@ -22684,22 +23182,22 @@ msgid "Variety Store"
 msgstr "Euroshop"
 
 msgid "Bookmaker"
-msgstr ""
+msgstr "Wedkantoor"
 
 msgid "Lottery"
-msgstr ""
+msgstr "Loterijwinkel"
 
 msgid "Bag"
-msgstr ""
+msgstr "Tassen"
 
 msgid "Pet"
-msgstr ""
+msgstr "Dierenwinkel"
 
 msgid "Funeral Directors"
-msgstr ""
+msgstr "Uitvaartverzorgers"
 
 msgid "Vending Machine"
-msgstr ""
+msgstr "Verkoopautomaten"
 
 msgid "Vending products"
 msgstr "Producten"
@@ -22762,103 +23260,103 @@ msgid "vouchers"
 msgstr "tegoedbonnen"
 
 msgid "Payment Methods"
-msgstr ""
+msgstr "Betaalwijzen"
 
 msgid "Debit cards"
 msgstr "Pinpas"
 
 msgid "BankAxess"
-msgstr ""
+msgstr "BankAxess"
 
 msgid "Bancomat"
-msgstr ""
+msgstr "Bancomat"
 
 msgid "Girocard"
-msgstr ""
+msgstr "Girocard"
 
 msgid "Laser"
-msgstr ""
+msgstr "Laser"
 
 msgid "Maestro"
-msgstr ""
+msgstr "Maestro"
 
 msgid "Visa Debit"
-msgstr ""
+msgstr "Visa Debit"
 
 msgid "Visa Electron"
-msgstr ""
+msgstr "Visa Electron"
 
 msgid "Credit cards"
 msgstr "Creditkaart"
 
 msgid "American Express"
-msgstr ""
+msgstr "American Express"
 
 msgid "Diners Club"
-msgstr ""
+msgstr "Diners Club"
 
 msgid "Discover Card"
-msgstr ""
+msgstr "Discover Card"
 
 msgid "JCB"
-msgstr ""
+msgstr "JCB"
 
 msgid "Mastercard"
-msgstr ""
+msgstr "Mastercard"
 
 msgid "Visa"
-msgstr ""
+msgstr "Visa"
 
 msgid "Electronic purses and Charge cards"
 msgstr "Chipknip"
 
 msgid "Avant (fi)"
-msgstr ""
+msgstr "Avant (fi)"
 
 msgid "Cash (ch)"
-msgstr ""
+msgstr "Cash (ch)"
 
 msgid "Chipknip (nl)"
-msgstr ""
+msgstr "Chipknip (nl)"
 
 msgid "Geldkarte (de)"
-msgstr ""
+msgstr "Geldkarte (de)"
 
 msgid "Mep (pt)"
-msgstr ""
+msgstr "Mep (pt)"
 
 msgid "Minicash (lu)"
-msgstr ""
+msgstr "Minicash (lu)"
 
 msgid "Minipay (it)"
-msgstr ""
+msgstr "Minipay (it)"
 
 msgid "Mondero (ar)"
-msgstr ""
+msgstr "Mondero (ar)"
 
 msgid "Mondero 4b (es)"
-msgstr ""
+msgstr "Mondero 4b (es)"
 
 msgid "Moneo (fr)"
-msgstr ""
+msgstr "Moneo (fr)"
 
 msgid "Proton (be)"
-msgstr ""
+msgstr "Proton (be)"
 
 msgid "Quick (au)"
-msgstr ""
+msgstr "Quick (au)"
 
 msgid "Cryptocurrencies"
-msgstr ""
+msgstr "Digitale valuta"
 
 msgid "Bitcoin"
-msgstr ""
+msgstr "Bitcoin"
 
 msgid "Dogecoin"
-msgstr ""
+msgstr "Dogecoin"
 
 msgid "Litecoin"
-msgstr ""
+msgstr "Litecoin"
 
 msgid "Geography"
 msgstr "Geografie"
@@ -22873,7 +23371,7 @@ msgid "Administrative level"
 msgstr "Administratief niveau"
 
 msgid "Maritime"
-msgstr ""
+msgstr "Maritiem"
 
 msgid "Political"
 msgstr "Politiek"
@@ -22885,37 +23383,37 @@ msgid "canton"
 msgstr "kanton"
 
 msgid "linguistic_community"
-msgstr ""
+msgstr "taal_gemeenschap"
 
 msgid "ward"
-msgstr ""
+msgstr "zaal"
 
 msgid "Postal Code"
 msgstr "Postcode"
 
 msgid "National Park"
-msgstr ""
+msgstr "nationaal park"
 
 msgid "Protected Area"
-msgstr ""
+msgstr "natuurreservaat"
 
 msgid "Protect Class"
-msgstr ""
+msgstr "beschermde soort"
 
 msgid "Title or type of protection"
-msgstr ""
+msgstr "Soort of type bescherming"
 
 msgid "Border type"
-msgstr ""
+msgstr "Type grens"
 
 msgid "baseline"
-msgstr ""
+msgstr "grondlijn"
 
 msgid "territorial"
-msgstr ""
+msgstr "territoriaal"
 
 msgid "contiguous"
-msgstr ""
+msgstr "doorlopend"
 
 msgid "eez"
 msgstr ""
@@ -22931,7 +23429,7 @@ msgstr "Land"
 
 msgctxt "place"
 msgid "State"
-msgstr ""
+msgstr "Provincie"
 
 msgid "Region"
 msgstr "Regio"
@@ -22961,13 +23459,13 @@ msgid "Neighbourhood"
 msgstr "Buurt"
 
 msgid "Farm"
-msgstr ""
+msgstr "Boerderij"
 
 msgid "A farm within a bigger settlement"
-msgstr ""
+msgstr "Een boerderij binnen een grotere nederzetting"
 
 msgid "(please use isolated_dwelling for an isolated farm)"
-msgstr ""
+msgstr "gebruik geïsoleerd_woning voor een geísoleerd gelegen boerderij)"
 
 msgid "Locality"
 msgstr "Onbewoond gebied"
@@ -22976,13 +23474,13 @@ msgid "Peak"
 msgstr "Bergtop"
 
 msgid "The top (summit) of a mountain or hill."
-msgstr ""
+msgstr "De top (spits) van een berg of heuvel."
 
 msgid "Saddle"
 msgstr "Zadel"
 
 msgid "A saddle point between mountains or hills."
-msgstr ""
+msgstr "Een zadelpunt tussen bergen of heuvels."
 
 msgid "Glacier"
 msgstr "Gletsjer"
@@ -22991,48 +23489,50 @@ msgid ""
 "A persistent body of dense ice that is constantly moving under its own "
 "weight."
 msgstr ""
+"Een permanente hoeveelheid dicht ijs dat constant beweegt onder zijn eigen "
+"gewicht."
 
 msgid "Volcano"
 msgstr "Vulkaan"
 
 msgid "A volcano, either dormant, extinct or active."
-msgstr ""
+msgstr "Een vulkaan, slapend, gedoofd of actief."
 
 msgid "Current Status"
-msgstr ""
+msgstr "Huidige status"
 
 msgid "dormant"
-msgstr ""
+msgstr "slapend"
 
 msgid "extinct"
-msgstr ""
+msgstr "gedoofd"
 
 msgid "stratovolcano"
-msgstr ""
+msgstr "stratovulkaan"
 
 msgid "shield"
-msgstr ""
+msgstr "schild"
 
 msgid "scoria"
-msgstr ""
+msgstr "slakken"
 
 msgid "Ridge"
-msgstr ""
+msgstr "Bergrug"
 
 msgid "A mountain or hill ridge."
-msgstr ""
+msgstr "Een berg- of heuvelrug."
 
 msgid "Valley"
-msgstr ""
+msgstr "Vallei"
 
 msgid "A low area between hills."
-msgstr ""
+msgstr "Een laag gebied tussen heuvels."
 
 msgid "Cave Entrance"
 msgstr "Grotingang"
 
 msgid "The entrance to a cave."
-msgstr ""
+msgstr "De ingang naar een grot."
 
 msgid "Island"
 msgstr "Eiland"
@@ -23047,7 +23547,7 @@ msgid "Tree"
 msgstr "Boom"
 
 msgid "A single tree."
-msgstr ""
+msgstr "Eén enkele boom"
 
 msgid "Botanical Name"
 msgstr "Botanische naam"
@@ -23056,19 +23556,19 @@ msgid "Tree Row"
 msgstr "Bomenrij"
 
 msgid "A line of trees."
-msgstr ""
+msgstr "Een bomenrij"
 
 msgid "Wood"
 msgstr "Oerbos"
 
 msgid "Woodland where timber production does not dominate use."
-msgstr ""
+msgstr "Een bosgebied waar houtproductie niet het gebruik domineert."
 
 msgid "Forest"
 msgstr "Bosbouw"
 
 msgid "Cutline"
-msgstr ""
+msgstr "Boomgrens"
 
 msgctxt "cutline"
 msgid "border"
@@ -23131,7 +23631,7 @@ msgid "Scree"
 msgstr "Steenvlakte"
 
 msgid "An accumulation of loose rocks."
-msgstr ""
+msgstr "Een helling die bestaat uit losse stenen en puin."
 
 msgid "Fell"
 msgstr "Hoog grasland"
@@ -23147,6 +23647,7 @@ msgstr "Ruig land"
 msgid ""
 "Bare lower lying uncultivated land with bushes but little or no tree cover."
 msgstr ""
+"Open, laagliggend en onbebouwd land met struikgewas en weinig tot geen bomen."
 
 msgid "Heath"
 msgstr "Heide"
@@ -23314,7 +23815,7 @@ msgid "Street name"
 msgstr "Straatnaam"
 
 msgid "Place name"
-msgstr ""
+msgstr "Woonplaatsnaam"
 
 msgid "City name"
 msgstr "Naam stad"
@@ -23332,173 +23833,173 @@ msgid "District"
 msgstr ""
 
 msgid "Province"
-msgstr ""
+msgstr "Provincie"
 
 msgctxt "addr:"
 msgid "State"
-msgstr ""
+msgstr "Staat"
 
 msgid "AL"
-msgstr ""
+msgstr "AL"
 
 msgid "AK"
-msgstr ""
+msgstr "AK"
 
 msgid "AZ"
-msgstr ""
+msgstr "AZ"
 
 msgid "AR"
-msgstr ""
+msgstr "AR"
 
 msgid "CA"
-msgstr ""
+msgstr "CA"
 
 msgid "CO"
-msgstr ""
+msgstr "CO"
 
 msgid "CT"
-msgstr ""
+msgstr "CT"
 
 msgid "DE"
-msgstr ""
+msgstr "DE"
 
 msgid "FL"
-msgstr ""
+msgstr "FL"
 
 msgid "GA"
-msgstr ""
+msgstr "GA"
 
 msgid "HI"
-msgstr ""
+msgstr "HI"
 
 msgid "IL"
-msgstr ""
+msgstr "IL"
 
 msgid "IN"
-msgstr ""
+msgstr "IN"
 
 msgid "IA"
-msgstr ""
+msgstr "IA"
 
 msgid "KS"
-msgstr ""
+msgstr "KS"
 
 msgid "KY"
-msgstr ""
+msgstr "KY"
 
 msgid "LA"
-msgstr ""
+msgstr "LA"
 
 msgid "ME"
-msgstr ""
+msgstr "ME"
 
 msgid "MD"
-msgstr ""
+msgstr "MD"
 
 msgid "MA"
-msgstr ""
+msgstr "MA"
 
 msgid "MI"
-msgstr ""
+msgstr "MI"
 
 msgid "MN"
-msgstr ""
+msgstr "MN"
 
 msgid "MS"
-msgstr ""
+msgstr "MS"
 
 msgid "MO"
-msgstr ""
+msgstr "MO"
 
 msgid "MT"
-msgstr ""
+msgstr "MT"
 
 msgid "NE"
-msgstr ""
+msgstr "NE"
 
 msgid "NV"
-msgstr ""
+msgstr "NV"
 
 msgid "NH"
-msgstr ""
+msgstr "NH"
 
 msgid "NJ"
-msgstr ""
+msgstr "NJ"
 
 msgid "NM"
-msgstr ""
+msgstr "NM"
 
 msgid "NY"
-msgstr ""
+msgstr "NY"
 
 msgid "NC"
-msgstr ""
+msgstr "NC"
 
 msgid "ND"
-msgstr ""
+msgstr "ND"
 
 msgid "OH"
-msgstr ""
+msgstr "OH"
 
 msgid "OR"
-msgstr ""
+msgstr "OR"
 
 msgid "PA"
-msgstr ""
+msgstr "PA"
 
 msgid "RI"
-msgstr ""
+msgstr "RI"
 
 msgid "SC"
-msgstr ""
+msgstr "SC"
 
 msgid "SD"
-msgstr ""
+msgstr "SD"
 
 msgid "TN"
-msgstr ""
+msgstr "TN"
 
 msgid "TX"
-msgstr ""
+msgstr "TX"
 
 msgid "UT"
-msgstr ""
+msgstr "UT"
 
 msgid "VT"
-msgstr ""
+msgstr "VT"
 
 msgid "VA"
-msgstr ""
+msgstr "VA"
 
 msgid "WA"
-msgstr ""
+msgstr "WA"
 
 msgid "WV"
-msgstr ""
+msgstr "WV"
 
 msgid "WI"
-msgstr ""
+msgstr "WI"
 
 msgid "DC"
-msgstr ""
+msgstr "DC"
 
 msgid "AS"
-msgstr ""
+msgstr "AS"
 
 msgid "GU"
-msgstr ""
+msgstr "GU"
 
 msgid "MP"
-msgstr ""
+msgstr "MP"
 
 msgid "PR"
-msgstr ""
+msgstr "PR"
 
 msgid "UM"
-msgstr ""
+msgstr "UM"
 
 msgid "VI"
-msgstr ""
+msgstr "VI"
 
 msgid "Address Interpolation"
 msgstr "Adresinterpolatie"
@@ -23530,12 +24031,12 @@ msgstr "potentieel"
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
-msgstr "Faxnummer"
-
 msgid "Email Address"
 msgstr "E-mailadres"
 
+msgid "Fax Number"
+msgstr "Faxnummer"
+
 msgid "Image"
 msgstr "Afbeelding"
 
@@ -23631,7 +24132,7 @@ msgid "members of site"
 msgstr "leden van de locatie"
 
 msgid "Turn Restriction"
-msgstr ""
+msgstr "Afslagbeperking"
 
 msgid "Restriction"
 msgstr "Beperking"
@@ -23712,7 +24213,7 @@ msgid "Routes"
 msgstr ""
 
 msgid "Bicycle Route"
-msgstr ""
+msgstr "Fietsroute"
 
 msgid "icn"
 msgstr ""
@@ -23960,6 +24461,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr "{0} op verdacht object"
 
@@ -23984,6 +24488,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr "{0}={1} is vervallen"
 
@@ -24044,6 +24560,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -24136,9 +24655,18 @@ msgstr ""
 "{0}: meters is standaard; punt is scheidingsteken; indien eenheden, plaats "
 "een spatie dan de eenheid"
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr "ongebruikelijke indeling {0}"
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 "voltage zou in volts moeten zijn zonder eenheden/scheidingsteken/spaties"
@@ -24524,6 +25052,9 @@ msgstr "Vaste punten met klikken toevoegen"
 msgid "Add fixed points on spacebar"
 msgstr "Vaste punten met spatiebalk toevoegen"
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr "Teken alleen gesloten polygonen"
 
@@ -24586,9 +25117,6 @@ msgstr "Teken de weg met de muis"
 msgid "min distance={0} px ({1} m)"
 msgstr "min. afstand={0} px ({1} m)"
 
-msgid "Convert way to FastDraw line"
-msgstr "Converteer weg naar lijn van FastDraw"
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr "Eps={0}, {1} punten, {2} p/km"
 
@@ -25454,47 +25982,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -25503,10 +26040,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debug"
+msgstr ""
+
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -26178,6 +26727,9 @@ msgstr "Positie terugzetten"
 msgid "Reset offset (only vector images)"
 msgstr "Positie terugzetten (alleen voor vectorafbeeldingen)"
 
+msgid "Blank Layer"
+msgstr "Lege laag"
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr "WMS-laag ({0}), {1} tegel(s) geladen"
 
@@ -26852,7 +27404,7 @@ msgid ""
 "(;)"
 msgstr ""
 "Lijst van oppervlakten die het voertuig niet kan gebruiken, waarden worden "
-"gescheiden door punt-komma''s (;)"
+"gescheiden door punt-komma’s (;)"
 
 msgid "max. tracktype grade"
 msgstr "max. graad type weg"
@@ -27556,198 +28108,504 @@ msgstr "kustlijn"
 msgid "land"
 msgstr "land"
 
-msgid "Maximum number of segments per way"
-msgstr "Maximum aantal segmenten per weg"
+msgid "Maximum number of segments per way"
+msgstr "Maximum aantal segmenten per weg"
+
+msgid "Maximum number of nodes in initial trace"
+msgstr "Maximum aantal knopen in oorspronkelijke spoor"
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr "Maximale grijswaarde die als water geldt (0-255)"
+
+msgid "Line simplification accuracy (degrees)"
+msgstr "Nauwkeurigheid vereenvoudiging van lijn (graden)"
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr "Resolutie van Landsat-tegels (pixels per graad)"
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr "Grootte van Landsat-tegels (pixels)"
+
+msgid "Shift all traces to east (degrees)"
+msgstr "Alle sporen oostwaarts verschuiven (graden)"
+
+msgid "Shift all traces to north (degrees)"
+msgstr "Alle sporen noordwaarts verschuiven (graden)"
+
+msgid "Direction to search for land"
+msgstr "Richting om naar land te zoeken"
+
+msgid "Tag ways as"
+msgstr "Wegen taggen als"
+
+msgid "WMS Layer"
+msgstr "WMS-laag"
+
+msgid "Maximum cache size (MB)"
+msgstr "Maximale cachegrootte (MB)"
+
+msgid "Maximum cache age (days)"
+msgstr "Maximale leeftijd cache (dagen)"
+
+msgid "Source text"
+msgstr "Brontekst"
+
+msgid "Lakewalker Plugin Preferences"
+msgstr "Voorkeuren plug-in Lakewalker"
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+"Een plug-in om water-eenheden op beeldmateriaal van Landsat te traceren."
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+"Maximale aantal segmenten dat is toegestaan in elke gegenereerde weg. "
+"Standaard 250"
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+"Maximale aantal te genereren knopen vóór het stoppen (vóór vereenvoudiging "
+"van de lijnen). Standaard 50000."
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+"Maximale grijswaarde die als water wordt geaccepteerd (gebaseerd op gegevens "
+"Landsat IR-1). In het bereik 0-255. Standaard 90."
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+"Nauwkeurigheid van de vereenvoudiging van de lijn volgens Douglas-Peucker, "
+"gemeten in graden.<br>Lagere waarden resulteren in meer knopen en "
+"nauwkeurigere lijnen. Standaard 0,0003."
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+"Resolutie van Landsat-tegels, gemeten in pixels per graad. Standaard 4000."
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr "Grootte van één Landsat-tegel, gemeten in pixels. Standaard 2000."
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr "Alle punten oostwaarts verschuiven (graden). Standaard 0."
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr "Alle punten noordwaarts verschuiven (graden). Standaard 0."
+
+msgid "Direction to search for land. Default east."
+msgstr "Richting om naar land te zoeken. Standaard Oost."
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr "Wegen als water, kustlijn, land of niets taggen. Standaard is water."
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+"Welke WMS-laag als achtergrond gebruiken voor traceren? Standaard is IR1."
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr "Maximale grootte van elke cachemap in bytes. Standaard is 300 MB."
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr "Maximale leeftijd voor een cachebestand in dagen. Standaard is 100."
+
+msgid "Data source text. Default is Landsat."
+msgstr "Brontekst gegevens. Standaard is Landsat."
+
+msgid "Downloading image tile..."
+msgstr "Afbeeldingstegel downloaden..."
+
+msgid "Could not acquire image"
+msgstr "Kan afbeelding niet ophalen"
+
+msgid "Connection Failed"
+msgstr "Verbinding is mislukt"
+
+msgid "Not connected"
+msgstr "Niet verbonden"
+
+msgid "Connecting"
+msgstr "Verbinden"
+
+msgid "Connected"
+msgstr "Verbonden"
+
+msgid "no name"
+msgstr "geen naam"
+
+msgid "Live GPS"
+msgstr "Werkende GPS"
+
+msgid "Show GPS data."
+msgstr "GPS-gegevens weergeven."
+
+msgid "Status"
+msgstr "Status"
+
+msgid "Way Info"
+msgstr "Informatie over weg"
+
+msgid "Speed"
+msgstr "Snelheid"
+
+msgid "Course"
+msgstr "Baan"
+
+msgid "LiveGPS layer"
+msgstr "LiveGPS-laag"
+
+msgid "Capture GPS Track"
+msgstr "GPS-spoor vastleggen"
+
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgstr ""
+"Verbinden met gpsd-server en de huidige locatie in LiveGPS-laag weergeven."
+
+msgid "Center Once"
+msgstr "Eenmalig centreren"
+
+msgid "Center the LiveGPS layer to current position."
+msgstr "De LiveGPS-laag op de huidige locatie centreren."
+
+msgid "Auto-Center"
+msgstr "Automatisch centeren"
+
+msgid "Continuously center the LiveGPS layer to current position."
+msgstr "De LiveGPS-laag continu op de huidige locatie centeren."
+
+msgid "Open MapDust"
+msgstr "MapDust openen"
+
+msgid "MapDust bug reports"
+msgstr "MapDust probleemmeldingen"
+
+msgid "Activates the MapDust bug reporter plugin"
+msgstr "Activeert de plug-in voor melden van problemen van MapDust"
+
+msgid "Missing input data"
+msgstr "Ontbrekende gegevens invoer"
+
+msgid "Mapillary Images"
+msgstr ""
+
+msgid "Mapillary layer"
+msgstr ""
+
+msgid "Total images:"
+msgstr ""
+
+msgid "images"
+msgstr ""
+
+msgid "Mapillary"
+msgstr ""
+
+msgid "Create Mapillary layer"
+msgstr ""
+
+msgid "Start Mapillary layer"
+msgstr ""
+
+msgid "Download Mapillary images in current view"
+msgstr ""
+
+msgid "Export pictures"
+msgstr ""
+
+msgid "Export Mapillary pictures"
+msgstr ""
+
+msgid "Export images"
+msgstr ""
+
+msgid "Import pictures"
+msgstr ""
+
+msgid "Import local pictures"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer"
+msgstr ""
+
+msgid "Select pictures"
+msgstr ""
+
+msgid "Import pictures into sequence"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer in a sequence"
+msgstr ""
+
+msgid "Join mode"
+msgstr ""
+
+msgid "Join/unjoin pictures"
+msgstr ""
+
+msgid "Join Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures"
+msgstr ""
+
+msgid "Upload Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures."
+msgstr ""
+
+msgid "Walk mode"
+msgstr ""
+
+msgid "Start walk mode"
+msgstr ""
+
+msgid "Zoom to selected image"
+msgstr ""
+
+msgid "Zoom to the currently selected Mapillary image"
+msgstr ""
+
+msgid "Uploaded {0} images"
+msgstr ""
+
+msgid "Approve upload on the website"
+msgstr ""
+
+msgid "View in website"
+msgstr ""
+
+msgid "Copy key"
+msgstr ""
+
+msgid "Copy key tag"
+msgstr ""
+
+msgid "Edit on website"
+msgstr ""
+
+msgid "Export all images"
+msgstr ""
+
+msgid "Export selected sequence"
+msgstr ""
+
+msgid "Export selected images"
+msgstr ""
+
+msgid "Rewrite imported images"
+msgstr ""
+
+msgid "Select a folder"
+msgstr ""
+
+msgid "Explore"
+msgstr ""
+
+msgid "Select a directory"
+msgstr ""
+
+msgid "Speed limit"
+msgstr ""
+
+msgid "Give way"
+msgstr ""
+
+msgid "No entry"
+msgstr ""
+
+msgid "Intersection danger"
+msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
-msgstr "Maximum aantal knopen in oorspronkelijke spoor"
+msgid "Mandatory direction (any)"
+msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
-msgstr "Maximale grijswaarde die als water geldt (0-255)"
+msgid "No turn"
+msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
-msgstr "Nauwkeurigheid vereenvoudiging van lijn (graden)"
+msgid "Uneven road"
+msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
-msgstr "Resolutie van Landsat-tegels (pixels per graad)"
+msgid "No parking"
+msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
-msgstr "Grootte van Landsat-tegels (pixels)"
+msgid "No overtaking"
+msgstr ""
 
-msgid "Shift all traces to east (degrees)"
-msgstr "Alle sporen oostwaarts verschuiven (graden)"
+msgid "Pedestrian crossing"
+msgstr ""
 
-msgid "Shift all traces to north (degrees)"
-msgstr "Alle sporen noordwaarts verschuiven (graden)"
+msgid "Years"
+msgstr ""
 
-msgid "Direction to search for land"
-msgstr "Richting om naar land te zoeken"
+msgid "Months"
+msgstr ""
 
-msgid "Tag ways as"
-msgstr "Wegen taggen als"
+msgid "Days"
+msgstr ""
 
-msgid "WMS Layer"
-msgstr "WMS-laag"
+msgid "Mapillary filter"
+msgstr ""
 
-msgid "Maximum cache size (MB)"
-msgstr "Maximale cachegrootte (MB)"
+msgid "Open Mapillary filter dialog"
+msgstr ""
 
-msgid "Maximum cache age (days)"
-msgstr "Maximale leeftijd cache (dagen)"
+msgid "Downloaded images"
+msgstr ""
 
-msgid "Source text"
-msgstr "Brontekst"
+msgid "Only images with signs"
+msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
-msgstr "Voorkeuren plug-in Lakewalker"
+msgid "Choose signs"
+msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Mapillary history"
 msgstr ""
-"Een plug-in om water-eenheden op beeldmateriaal van Landsat te traceren."
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Open Mapillary history dialog"
 msgstr ""
-"Maximale aantal segmenten dat is toegestaan in elke gegenereerde weg. "
-"Standaard 250"
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Open Mapillary window"
 msgstr ""
-"Maximale aantal te genereren knopen vóór het stoppen (vóór vereenvoudiging "
-"van de lijnen). Standaard 50000."
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary dialog"
 msgstr ""
-"Maximale grijswaarde die als water wordt geaccepteerd (gebaseerd op gegevens "
-"Landsat IR-1). In het bereik 0-255. Standaard 90."
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary main dialog"
 msgstr ""
-"Nauwkeurigheid van de vereenvoudiging van de lijn volgens Douglas-Peucker, "
-"gemeten in graden.<br>Lagere waarden resulteren in meer knopen en "
-"nauwkeurigere lijnen. Standaard 0,0003."
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Next picture"
 msgstr ""
-"Resolutie van Landsat-tegels, gemeten in pixels per graad. Standaard 4000."
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
-msgstr "Grootte van één Landsat-tegel, gemeten in pixels. Standaard 2000."
+msgid "Shows the next picture in the sequence"
+msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
-msgstr "Alle punten oostwaarts verschuiven (graden). Standaard 0."
+msgid "Previous picture"
+msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
-msgstr "Alle punten noordwaarts verschuiven (graden). Standaard 0."
+msgid "Shows the previous picture in the sequence"
+msgstr ""
 
-msgid "Direction to search for land. Default east."
-msgstr "Richting om naar land te zoeken. Standaard Oost."
+msgid "Jump to red"
+msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
-msgstr "Wegen als water, kustlijn, land of niets taggen. Standaard is water."
+msgid "Jumps to the picture at the other side of the red line"
+msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Jump to blue"
 msgstr ""
-"Welke WMS-laag als achtergrond gebruiken voor traceren? Standaard is IR1."
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
-msgstr "Maximale grootte van elke cachemap in bytes. Standaard is 300 MB."
+msgid "Jumps to the picture at the other side of the blue line"
+msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
-msgstr "Maximale leeftijd voor een cachebestand in dagen. Standaard is 100."
+msgid "Stops the walk."
+msgstr ""
 
-msgid "Data source text. Default is Landsat."
-msgstr "Brontekst gegevens. Standaard is Landsat."
+msgid "Play"
+msgstr ""
 
-msgid "Downloading image tile..."
-msgstr "Afbeeldingstegel downloaden..."
+msgid "Continues with the paused walk."
+msgstr ""
 
-msgid "Could not acquire image"
-msgstr "Kan afbeelding niet ophalen"
+msgid "Pause"
+msgstr ""
 
-msgid "Connection Failed"
-msgstr "Verbinding is mislukt"
+msgid "Pauses the walk."
+msgstr ""
 
-msgid "Not connected"
-msgstr "Niet verbonden"
+msgid "Reverse buttons position when displaying images."
+msgstr ""
 
-msgid "Connecting"
-msgstr "Verbinden"
+msgid "Display hour when the picture was taken"
+msgstr ""
 
-msgid "Connected"
-msgstr "Verbonden"
+msgid "Use 24 hour format"
+msgstr ""
 
-msgid "no name"
-msgstr "geen naam"
+msgid "Move to picture''s location with next/previous buttons"
+msgstr ""
 
-msgid "Live GPS"
-msgstr "Werkende GPS"
+msgid "Download mode: "
+msgstr ""
 
-msgid "Show GPS data."
-msgstr "GPS-gegevens weergeven."
+msgid "Upload selected sequence"
+msgstr ""
 
-msgid "Status"
-msgstr "Status"
+msgid "Delete after upload"
+msgstr ""
 
-msgid "Way Info"
-msgstr "Informatie over weg"
+msgid "Wait for full quality pictures"
+msgstr ""
 
-msgid "Speed"
-msgstr "Snelheid"
+msgid "Follow selected image"
+msgstr ""
 
-msgid "Course"
-msgstr "Baan"
+msgid "Go forward"
+msgstr ""
 
-msgid "LiveGPS layer"
-msgstr "LiveGPS-laag"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Capture GPS Track"
-msgstr "GPS-spoor vastleggen"
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "2 images joined"
 msgstr ""
-"Verbinden met gpsd-server en de huidige locatie in LiveGPS-laag weergeven."
 
-msgid "Center Once"
-msgstr "Eenmalig centreren"
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Center the LiveGPS layer to current position."
-msgstr "De LiveGPS-laag op de huidige locatie centreren."
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Auto-Center"
-msgstr "Automatisch centeren"
+msgid "2 images unjoined"
+msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
-msgstr "De LiveGPS-laag continu op de huidige locatie centeren."
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
+msgstr ""
 
-msgid "Open MapDust"
-msgstr "MapDust openen"
+msgid "Downloading"
+msgstr ""
 
-msgid "MapDust bug reports"
-msgstr "MapDust probleemmeldingen"
+msgid "Select mode"
+msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
-msgstr "Activeert de plug-in voor melden van problemen van MapDust"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
+msgstr ""
 
-msgid "Missing input data"
-msgstr "Ontbrekende gegevens invoer"
+msgid "Downloading Mapillary images"
+msgstr ""
 
-msgid "Mapillary"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "No images found"
 msgstr ""
 
-msgid "Export"
-msgstr "Exporteren"
+msgid "Finished upload"
+msgstr ""
+
+msgid "Uploading: {0}"
+msgstr ""
 
 msgid "Measured values"
 msgstr "Gemeten waarden"
@@ -27767,6 +28625,9 @@ msgstr "Lengte van selectie"
 msgid "Selection Area"
 msgstr "Geselecteerd gebied"
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr "Hoek"
 
@@ -27829,49 +28690,6 @@ msgstr "Maak een beperking Niet linksaf slaan"
 msgid "Unable to find via nodes. Please check your selection"
 msgstr "Niet in staat om ze via knopen te vinden. Controleer uw selectie"
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-"XAPI-query, bijv., '''' (om alle gegevens te downloaden), ''[highway=*]'', "
-"of ''[[network=VRR][ref=603|613]''"
-
-msgid "Download from OSM mirror..."
-msgstr "Downloaden vanaf mirror van OSM..."
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr "Deze XAPI-query schijnt ongeldig te zijn, controleer hem alstublieft"
-
-msgid "Object type: "
-msgstr "Objecttype: "
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr "OSM-objecttype om te downloaden (''*'' staat voor elke)"
-
-msgid "XAPI query: "
-msgstr "XAPI-query: "
-
-msgid "Download from Overpass API ..."
-msgstr "Downloaden vanaf Overpass API ..."
-
-msgid "Download map data from Overpass API server."
-msgstr "Download kaartgegevens vanaf server van Overpass API."
-
-msgid "Overpass query: "
-msgstr "Overpass query: "
-
-msgid "Select OSM mirror URL"
-msgstr "Selecteer URL van mirror van OSM"
-
-msgid "Select OSM mirror URL to download from."
-msgstr "Selecteer URL van mirror van OSM om van te downloaden."
-
-msgid "Base URL"
-msgstr "Basis URL"
-
-msgid "Enforce meta data"
-msgstr "Metadata forceren"
-
 msgid "About Plugin"
 msgstr "Over Plug-in"
 
@@ -28124,6 +28942,9 @@ msgstr ""
 "Voer vergelijking uit tussen de huidige gegevensset en bestaande OSM-"
 "gegevens."
 
+msgid "Tools"
+msgstr "Gereedschappen"
+
 msgid "Open tools menu for this data."
 msgstr "Open menu Gereedschappen voor deze gegevens."
 
@@ -29413,6 +30234,27 @@ msgstr "Openbaar vervoer: Wegpunten inschakelen"
 msgid "Public Transport: Edit waypoint name"
 msgstr "Openbaar vervoer: Naam wegpunt bewerken"
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr "Gereedschapskist Relatie"
 
@@ -29589,6 +30431,9 @@ msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 "Het is niet toegestaan om de wijzigingenset terug te draaien vanaf {0}"
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr "Ontbrekend doel om samen te voegen voor {0} met ID {1}"
 
@@ -29598,6 +30443,9 @@ msgstr "Geschiedenis van objecten"
 msgid "History reverter"
 msgstr "Geschiedenis terugdraaien"
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr "Gegevens voor geschiedenis voorbereiden..."
 
@@ -29786,6 +30634,9 @@ msgstr "Nieuwe waarde voor {0}"
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr "Voorkeur ''{0}'' ontbreekt. Kan SdsApi niet initialiseren."
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -29992,6 +30843,39 @@ msgstr "Drempel voor samenvoegen dicht bij elkaar gelegen knopen"
 msgid "SeaMap Editor"
 msgstr "Bewerken SeaMap"
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr "OSM exporteren"
 
@@ -30001,6 +30885,9 @@ msgstr "Exporteer verkeersgegevens naar SUMO netwerkbestand."
 msgid "SUMO Export"
 msgstr "SUMO exporteren"
 
+msgid "Export"
+msgstr "Exporteren"
+
 msgid "AutoSave LiveData"
 msgstr "LiveData automatisch opslaan"
 
@@ -30251,9 +31138,6 @@ msgstr "Tracer2-fout"
 msgid "Parameter for server request"
 msgstr "Verzoekt parameter voor server"
 
-msgid "Tile size:"
-msgstr "Tegelgrootte:"
-
 msgid "Resolution:"
 msgstr "Resolutie:"
 
@@ -31958,9 +32842,6 @@ msgstr ""
 "Zoeken na wegpunt. Klik en verplaats de weergave van de kaart naar het "
 "wegpunt."
 
-msgid "Way Select"
-msgstr "Selecteer weg"
-
 msgid "Add names from Wikipedia"
 msgstr "Voeg namen vanaf Wikipedia toe"
 
diff --git a/i18n/po/nn.po b/i18n/po/nn.po
index fb06a41..8398bf4 100644
--- a/i18n/po/nn.po
+++ b/i18n/po/nn.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2009-07-15 12:49+0000\n"
 "Last-Translator: Skippern <Unknown>\n"
 "Language-Team: Norwegian Nynorsk <nn at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:51+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:54+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: nn\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -97,19 +97,16 @@ msgstr ""
 msgid "Updating user interface"
 msgstr ""
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
 msgstr ""
 
 msgid "Warning"
 msgstr "Åtvaring"
 
-msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
+msgid "Ignoring malformed file URL: \"{0}\""
 msgstr ""
 
-msgid "Ignoring malformed URL: \"{0}\""
+msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 
 msgid ""
@@ -444,6 +441,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
 
@@ -1029,6 +1029,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr ""
 
@@ -1945,15 +1969,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr ""
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -1975,6 +1990,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2093,9 +2117,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2309,9 +2330,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr ""
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2525,6 +2552,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2567,6 +2598,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3017,6 +3051,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3134,10 +3186,44 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3327,6 +3413,12 @@ msgstr ""
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3354,13 +3446,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -3976,9 +4068,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -3988,12 +4077,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4174,13 +4275,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4378,6 +4479,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4591,43 +4693,54 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
 msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
 msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
 msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
 msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
-msgid "Menu: {0}"
+msgctxt "menu"
+msgid "Help"
 msgstr ""
 
-msgid "Save and load the current session (list of layers, etc.)"
+msgid "Menu: {0}"
 msgstr ""
 
 msgid "Edit toolbar"
@@ -4651,6 +4764,7 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
 msgstr ""
 
@@ -4773,58 +4887,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr ""
-
-msgid "Pos."
+msgid " ({0})"
 msgstr ""
 
-msgid "Role"
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5253,6 +5325,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr ""
+
 msgid "Primitive"
 msgstr ""
 
@@ -5493,6 +5568,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5639,6 +5717,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5742,7 +5855,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5870,6 +5983,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5879,17 +5997,48 @@ msgstr ""
 msgid "unknown"
 msgstr ""
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -5935,6 +6084,12 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr ""
 
@@ -6064,10 +6219,16 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
-msgid "List of notes"
+msgid "Mini map"
 msgstr ""
 
-msgid "Add comment"
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
+msgid "List of notes"
+msgstr ""
+
+msgid "Add comment"
 msgstr ""
 
 msgid "Comment"
@@ -6122,10 +6283,15 @@ msgstr ""
 msgid "Enter the ID of the object that should be downloaded"
 msgstr ""
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6154,6 +6320,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr ""
 
+msgid "Selection"
+msgstr ""
+
 msgid "Open a selection list window."
 msgstr ""
 
@@ -6244,6 +6413,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -6838,6 +7013,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6929,14 +7110,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7109,6 +7289,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7644,6 +7830,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8489,6 +8678,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr ""
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr ""
 
@@ -8542,6 +8831,9 @@ msgstr ""
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8562,7 +8854,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8645,80 +8937,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr ""
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-
-msgid "Auto Zoom"
-msgstr ""
-
-msgid "Auto load tiles"
-msgstr ""
-
-msgid "Show Errors"
-msgstr ""
-
-msgid "Load Tile"
-msgstr ""
-
-msgid "Show Tile Info"
-msgstr ""
-
-msgid "Load All Tiles"
-msgstr ""
-
-msgid "Load All Error Tiles"
-msgstr ""
-
-msgid "Increase zoom"
-msgstr ""
-
-msgid "Decrease zoom"
-msgstr ""
-
-msgid "Snap to tile size"
-msgstr ""
-
-msgid "Flush Tile Cache"
-msgstr ""
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
@@ -8728,56 +8946,30 @@ msgstr ""
 msgid "No validation errors"
 msgstr ""
 
-msgid "Blank Layer"
-msgstr ""
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "Download visible tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-
-msgid "Change resolution"
-msgstr ""
-
-msgid "Reload erroneous tiles"
-msgstr ""
-
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Automatic downloading"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Zoom to native resolution"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Supported projections are: {0}"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Save WMS file"
+msgid "Try Again"
 msgstr ""
 
-msgid "Correlate to GPX"
+msgid "No images could be matched!"
 msgstr ""
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
@@ -8864,24 +9056,9 @@ msgstr ""
 msgid "Offset:"
 msgstr ""
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
 msgid "Correlate"
 msgstr ""
 
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9075,9 +9252,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr ""
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9140,9 +9314,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9768,15 +9939,15 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr ""
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -10569,13 +10740,28 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
-msgid "imagery fade"
+msgid "1. Enter getCapabilities URL"
 msgstr ""
 
-msgid "Fade Color: "
+msgid "2. Enter name for this layer"
 msgstr ""
 
-msgid "Fade amount: "
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
+msgid "imagery fade"
+msgstr ""
+
+msgid "Fade Color: "
+msgstr ""
+
+msgid "Fade amount: "
 msgstr ""
 
 msgid "Soft"
@@ -10587,6 +10773,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10608,6 +10806,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10650,9 +10851,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr ""
 
@@ -10677,36 +10875,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11642,6 +11825,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] ""
@@ -11750,6 +11941,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12003,6 +12197,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12539,6 +12736,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12924,6 +13124,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13918,6 +14131,9 @@ msgstr ""
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr ""
+
 msgid "Blue:"
 msgstr ""
 
@@ -13957,7 +14173,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -13969,9 +14185,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14080,6 +14293,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14093,12 +14309,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14135,10 +14357,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14165,6 +14393,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14189,7 +14420,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14204,6 +14435,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14216,12 +14450,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14242,6 +14470,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14274,10 +14505,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14307,6 +14535,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14322,154 +14556,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14484,9 +14724,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14616,6 +14865,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14631,7 +14895,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -14957,6 +15221,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15041,11 +15310,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15099,7 +15363,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15114,9 +15378,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15197,6 +15458,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15235,6 +15504,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15310,9 +15582,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15718,6 +15987,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15742,10 +16019,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15762,6 +16035,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15778,11 +16055,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15798,6 +16087,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15810,6 +16103,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15837,6 +16134,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16228,6 +16537,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16304,6 +16616,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr ""
 
@@ -16841,6 +17156,12 @@ msgstr ""
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17030,6 +17351,11 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
 msgstr ""
 
@@ -17083,6 +17409,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17224,13 +17554,127 @@ msgstr ""
 msgid "public"
 msgstr ""
 
-msgid "Pier"
+msgid "Marine Fuel"
 msgstr ""
 
-msgid "Lock Gate"
+msgid "Agip"
 msgstr ""
 
-msgid "Turning Point"
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
+msgid "Pier"
+msgstr ""
+
+msgid "Lock Gate"
+msgstr ""
+
+msgid "Turning Point"
 msgstr ""
 
 msgid "Slipway"
@@ -17340,6 +17784,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -17463,78 +17910,6 @@ msgstr ""
 msgid "Fuel"
 msgstr ""
 
-msgid "Agip"
-msgstr ""
-
-msgid "Aral"
-msgstr ""
-
-msgid "Avia"
-msgstr ""
-
-msgid "BP"
-msgstr ""
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr ""
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
 msgid "With shop"
 msgstr ""
 
@@ -17544,51 +17919,12 @@ msgstr ""
 msgid "kiosk"
 msgstr ""
 
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -17807,9 +18143,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17828,6 +18161,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18030,6 +18366,12 @@ msgstr ""
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18120,6 +18462,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18334,6 +18679,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18821,7 +19169,7 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
@@ -18830,43 +19178,70 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
-msgid "Glass"
+msgid "Cardboard"
 msgstr ""
 
-msgid "Paper"
+msgid "Electrical Appliances"
 msgstr ""
 
-msgid "Scrap Metal"
+msgid "Glass"
 msgstr ""
 
-msgid "container"
+msgid "Glass Bottles"
 msgstr ""
 
-msgid "centre"
+msgid "Green Waste"
 msgstr ""
 
-msgid "Waste Basket/Trash Can"
+msgid "Paper"
 msgstr ""
 
-msgid "Waste Disposal/Dumpster"
+msgid "Plastic"
 msgstr ""
 
-msgid "Sanitary Dump Station"
+msgid "Plastic Bottles"
 msgstr ""
 
-msgid "Suction pumpout"
+msgid "Plastic Packaging"
 msgstr ""
 
-msgid "Gravity drain for hose"
+msgid "Scrap Metal"
 msgstr ""
 
-msgid "Casette or Elsan Disposal"
+msgid "Shoes"
 msgstr ""
 
-msgid "Operation times"
+msgid "Small Appliances"
 msgstr ""
 
-msgid "Backrest"
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
+msgstr ""
+
+msgid "Waste Basket/Trash Can"
+msgstr ""
+
+msgid "Waste Disposal/Dumpster"
+msgstr ""
+
+msgid "Sanitary Dump Station"
+msgstr ""
+
+msgid "Suction pumpout"
+msgstr ""
+
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
+msgstr ""
+
+msgid "Operation times"
+msgstr ""
+
+msgid "Backrest"
 msgstr ""
 
 msgid "Amount of Seats"
@@ -19046,6 +19421,9 @@ msgstr ""
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr ""
 
@@ -19221,12 +19599,18 @@ msgstr ""
 msgid "Basketball"
 msgstr ""
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr ""
 
@@ -19242,13 +19626,13 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
@@ -19272,9 +19656,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19293,9 +19674,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -19368,6 +19746,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20688,9 +21074,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -21703,10 +22086,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22133,6 +22516,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22157,6 +22543,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22217,6 +22615,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22307,9 +22708,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22679,6 +23089,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22733,9 +23146,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23479,47 +23889,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23528,10 +23947,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24134,6 +24565,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr ""
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25231,374 +25665,680 @@ msgid ""
 "highlight tracks"
 msgstr ""
 
-msgid "Delete this"
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
 msgstr ""
 
-msgid "Delete this&older"
+msgid "Connecting"
 msgstr ""
 
-msgid "km/h"
+msgid "Connected"
 msgstr ""
 
-msgid "Track name: "
+msgid "no name"
 msgstr ""
 
-msgid "Update IRS adjustment layer"
+msgid "Live GPS"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid "Show GPS data."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Speed"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Course"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
+msgid "Explore"
 msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25619,6 +26359,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -25677,47 +26420,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -25950,6 +26652,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr ""
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27167,6 +27872,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27338,6 +28064,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27347,6 +28076,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27527,6 +28259,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27705,6 +28440,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27714,6 +28482,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -27950,9 +28721,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29435,9 +30203,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/oc.po b/i18n/po/oc.po
index f050aaf..bff660e 100644
--- a/i18n/po/oc.po
+++ b/i18n/po/oc.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2012-10-03 22:14+0000\n"
 "Last-Translator: Cédric VALMARY (Tot en òc) <cvalmary at yahoo.fr>\n"
 "Language-Team: Occitan (post 1500) <oc at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:51+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:55+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -97,22 +97,19 @@ msgstr ""
 msgid "Updating user interface"
 msgstr ""
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "URL de fichièr mal formada ignorat : \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "IURL mal formada ignorada : \"{0}\""
 
 msgid "Warning"
 msgstr "Avertiment"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "URL de fichièr mal formada ignorat : \"{0}\""
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 "Lo paramètre \"downloadgps\" accèpta pas de noms de fichièr o d'URLs."
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "IURL mal formada ignorada : \"{0}\""
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -451,6 +448,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
 
@@ -1036,6 +1036,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr "Empegar"
 
@@ -1952,15 +1976,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr ""
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -1982,6 +1997,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2100,9 +2124,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2316,9 +2337,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr "expression regulara"
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2532,6 +2559,10 @@ msgid "RX"
 msgstr "RX"
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2574,6 +2605,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3024,6 +3058,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3141,10 +3193,44 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3334,6 +3420,12 @@ msgstr "tèxte"
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3361,13 +3453,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -3983,9 +4075,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -3995,12 +4084,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4181,13 +4282,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4385,6 +4486,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4598,45 +4700,56 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
-msgstr "Fichièr"
+msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
-msgstr "Afichar"
+msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
-msgstr "Espleches"
+msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
-msgstr "Seleccion"
+msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
-msgstr "Prereglatges"
+msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
+msgctxt "menu"
+msgid "Help"
+msgstr ""
+
 msgid "Menu: {0}"
 msgstr "Menut : {0}"
 
-msgid "Save and load the current session (list of layers, etc.)"
-msgstr ""
-
 msgid "Edit toolbar"
 msgstr ""
 
@@ -4658,8 +4771,9 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
-msgstr "Àudio"
+msgstr ""
 
 msgid "Do not hide toolbar"
 msgstr ""
@@ -4780,58 +4894,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
+msgid " ({0})"
 msgstr ""
 
-msgid "To delete"
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "From Relation"
-msgstr "De la relacion"
-
-msgid "Pos."
-msgstr "Posicion"
-
-msgid "Role"
-msgstr "Ròtle"
-
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5260,6 +5332,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr "Ròtle"
+
 msgid "Primitive"
 msgstr "Primitiva"
 
@@ -5500,6 +5575,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr "Posicion"
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5646,6 +5724,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr "De la relacion"
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5749,7 +5862,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5877,6 +5990,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5886,45 +6004,76 @@ msgstr ""
 msgid "unknown"
 msgstr "desconegut"
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
 msgstr ""
 
-msgid "Projected coordinates:"
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
 msgstr ""
 
 msgid ""
-"Enter easting and northing (x and y) separated by space, comma or semicolon."
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
 msgstr ""
 
-msgid "Lat/Lon"
+msgid "Coordinate value can be in one of three formats:"
 msgstr ""
 
-msgid "East/North"
+msgid "<i>degrees</i><tt>°</tt>"
 msgstr ""
 
-msgid "Please enter a GPS coordinates"
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
 msgstr ""
 
-msgid "Please enter a Easting and Northing"
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
 msgstr ""
 
-msgid "Toggle visibility of layer: {0}"
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
 msgstr ""
 
-msgid "Open a list of all loaded layers."
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
 msgstr ""
 
-msgid "Delete the selected layers."
+msgid "Some examples:"
+msgstr ""
+
+msgid "Projected coordinates:"
+msgstr ""
+
+msgid ""
+"Enter easting and northing (x and y) separated by space, comma or semicolon."
+msgstr ""
+
+msgid "Lat/Lon"
+msgstr ""
+
+msgid "East/North"
+msgstr ""
+
+msgid "Please enter a GPS coordinates"
+msgstr ""
+
+msgid "Please enter a Easting and Northing"
+msgstr ""
+
+msgid "Toggle visibility of layer: {0}"
+msgstr ""
+
+msgid "Open a list of all loaded layers."
+msgstr ""
+
+msgid "Delete the selected layers."
 msgstr ""
 
 msgid "Show/hide"
@@ -5942,6 +6091,12 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr "Activar"
 
@@ -6071,6 +6226,12 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
+msgid "Mini map"
+msgstr ""
+
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
 msgid "List of notes"
 msgstr ""
 
@@ -6129,10 +6290,15 @@ msgstr "ID de l'objècte :"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr ""
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6161,6 +6327,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr "Relacions : {0}"
 
+msgid "Selection"
+msgstr "Seleccion"
+
 msgid "Open a selection list window."
 msgstr ""
 
@@ -6251,6 +6420,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -6845,6 +7020,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6936,14 +7117,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7116,6 +7296,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7651,6 +7837,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8496,6 +8685,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr ""
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr ""
 
@@ -8549,6 +8838,9 @@ msgstr "Salvar lo fichièr GPX"
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8569,7 +8861,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8652,259 +8944,144 @@ msgstr ""
 msgid "Save OSM file"
 msgstr "Salvar lo fichièr OSM"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
+msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
-msgid "Auto Zoom"
+msgid "Validation errors"
 msgstr ""
 
-msgid "Auto load tiles"
+msgid "No validation errors"
 msgstr ""
 
-msgid "Show Errors"
+msgid "Set WMS Bookmark"
 msgstr ""
 
-msgid "Load Tile"
+msgid ""
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Show Tile Info"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Load All Tiles"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Load All Error Tiles"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Increase zoom"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Decrease zoom"
+msgid "Try Again"
 msgstr ""
 
-msgid "Snap to tile size"
+msgid "No images could be matched!"
 msgstr ""
 
-msgid "Flush Tile Cache"
+msgid "GPX Files (*.gpx *.gpx.gz)"
 msgstr ""
 
-msgid "zoom in to load any tiles"
+msgid "File {0} is loaded yet under the name \"{1}\""
 msgstr ""
 
-msgid "zoom in to load more tiles"
+msgid "Error while parsing {0}"
 msgstr ""
 
-msgid "increase zoom level to see more detail"
+msgid "Could not read \"{0}\""
 msgstr ""
 
-msgid "No tiles at this zoom level"
+msgid ""
+"<html>Take a photo of your GPS receiver while it displays the "
+"time.<br>Display that photo here.<br>And then, simply capture the time you "
+"read on the photo and select a timezone<hr></html>"
 msgstr ""
 
-msgid "Current zoom: {0}"
+msgid "Photo time (from exif):"
 msgstr ""
 
-msgid "Display zoom: {0}"
+msgid "Gps time (read from the above photo): "
 msgstr ""
 
-msgid "Pixel scale: {0}"
+msgid "I am in the timezone of: "
 msgstr ""
 
-msgid "Best zoom: {0}"
-msgstr ""
+msgid "No date"
+msgstr "Pas cap de data"
 
-msgid "Cache stats: {0}"
+msgid "Open another photo"
 msgstr ""
 
-msgid "TMS layer ({0}), downloading in zoom {1}"
+msgid "Synchronize time from a photo of the GPS receiver"
 msgstr ""
 
-msgid "EPSG:4326 and Mercator projection are supported"
+msgid ""
+"Error while parsing the date.\n"
+"Please use the requested format"
 msgstr ""
 
-msgid "Validation errors"
+msgid "Invalid date"
 msgstr ""
 
-msgid "No validation errors"
+msgid "<No GPX track loaded yet>"
 msgstr ""
 
-msgid "Blank Layer"
+msgid "GPX track: "
 msgstr ""
 
-msgid "Downloaded {0}/{1} tiles"
+msgid "Open another GPX trace"
 msgstr ""
 
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
+msgid ""
+"<html>Use photo of an accurate clock,<br>e.g. GPS receiver display</html>"
 msgstr ""
 
-msgid "WMS layer ({0}), downloading in zoom {1}"
+msgid "Auto-Guess"
 msgstr ""
 
-msgid "Download visible tiles"
+msgid "Matches first photo with first gpx point"
 msgstr ""
 
-msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
+msgid "Manual adjust"
 msgstr ""
 
-msgid "Change resolution"
+msgid "Override position for: "
 msgstr ""
 
-msgid "Reload erroneous tiles"
+msgid "Images with geo location in exif data ({0}/{1})"
 msgstr ""
 
-msgid "Alpha channel"
+msgid "Images that are already tagged ({0}/{1})"
 msgstr ""
 
-msgid "Automatically change resolution"
+msgid "Show Thumbnail images on the map"
 msgstr ""
 
-msgid "Set WMS Bookmark"
+msgid "Timezone: "
 msgstr ""
 
-msgid "Automatic downloading"
-msgstr ""
+msgid "Offset:"
+msgstr "Decalatge :"
 
-msgid "Zoom to native resolution"
+msgid "Correlate"
 msgstr ""
 
-msgid "Supported projections are: {0}"
+msgid "No gpx selected"
 msgstr ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
-msgstr ""
+msgid "<html>Matched <b>{0}</b> of <b>{1}</b> photo to GPX track.</html>"
+msgid_plural ""
+"<html>Matched <b>{0}</b> of <b>{1}</b> photos to GPX track.</html>"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Save WMS file"
+msgid "Timezone: {0}"
 msgstr ""
 
-msgid "Correlate to GPX"
-msgstr ""
+msgid "Minutes: {0}"
+msgstr "Minutas : {0}"
 
-msgid "GPX Files (*.gpx *.gpx.gz)"
-msgstr ""
-
-msgid "File {0} is loaded yet under the name \"{1}\""
-msgstr ""
-
-msgid "Error while parsing {0}"
-msgstr ""
-
-msgid "Could not read \"{0}\""
-msgstr ""
-
-msgid ""
-"<html>Take a photo of your GPS receiver while it displays the "
-"time.<br>Display that photo here.<br>And then, simply capture the time you "
-"read on the photo and select a timezone<hr></html>"
-msgstr ""
-
-msgid "Photo time (from exif):"
-msgstr ""
-
-msgid "Gps time (read from the above photo): "
-msgstr ""
-
-msgid "I am in the timezone of: "
-msgstr ""
-
-msgid "No date"
-msgstr "Pas cap de data"
-
-msgid "Open another photo"
-msgstr ""
-
-msgid "Synchronize time from a photo of the GPS receiver"
-msgstr ""
-
-msgid ""
-"Error while parsing the date.\n"
-"Please use the requested format"
-msgstr ""
-
-msgid "Invalid date"
-msgstr ""
-
-msgid "<No GPX track loaded yet>"
-msgstr ""
-
-msgid "GPX track: "
-msgstr ""
-
-msgid "Open another GPX trace"
-msgstr ""
-
-msgid ""
-"<html>Use photo of an accurate clock,<br>e.g. GPS receiver display</html>"
-msgstr ""
-
-msgid "Auto-Guess"
-msgstr ""
-
-msgid "Matches first photo with first gpx point"
-msgstr ""
-
-msgid "Manual adjust"
-msgstr ""
-
-msgid "Override position for: "
-msgstr ""
-
-msgid "Images with geo location in exif data ({0}/{1})"
-msgstr ""
-
-msgid "Images that are already tagged ({0}/{1})"
-msgstr ""
-
-msgid "Show Thumbnail images on the map"
-msgstr ""
-
-msgid "Timezone: "
-msgstr ""
-
-msgid "Offset:"
-msgstr "Decalatge :"
-
-msgid "Correlate images with GPX track"
-msgstr ""
-
-msgid "Correlate"
-msgstr ""
-
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
-msgid "No gpx selected"
-msgstr ""
-
-msgid "<html>Matched <b>{0}</b> of <b>{1}</b> photo to GPX track.</html>"
-msgid_plural ""
-"<html>Matched <b>{0}</b> of <b>{1}</b> photos to GPX track.</html>"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Timezone: {0}"
-msgstr ""
-
-msgid "Minutes: {0}"
-msgstr "Minutas : {0}"
-
-msgid "Seconds: {0}"
+msgid "Seconds: {0}"
 msgstr ""
 
 msgid "(Time difference of {0} day)"
@@ -9084,9 +9261,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr "imatges JPEG (*.jpg)"
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9149,9 +9323,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9777,15 +9948,15 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr ""
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -10578,6 +10749,21 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
+msgid "1. Enter getCapabilities URL"
+msgstr ""
+
+msgid "2. Enter name for this layer"
+msgstr ""
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr ""
 
@@ -10596,6 +10782,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10617,6 +10815,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10659,9 +10860,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr "Calc"
 
@@ -10686,36 +10884,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11651,6 +11834,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] ""
@@ -11759,6 +11950,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr "Prereglatges"
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12012,6 +12206,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12548,6 +12745,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12933,6 +13133,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13927,6 +14140,9 @@ msgstr ""
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr "Afichar"
+
 msgid "Blue:"
 msgstr ""
 
@@ -13966,7 +14182,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -13978,9 +14194,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14089,6 +14302,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14102,12 +14318,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14144,10 +14366,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14174,6 +14402,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14198,7 +14429,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14213,6 +14444,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14225,12 +14459,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14251,6 +14479,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14283,10 +14514,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14316,6 +14544,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14331,154 +14565,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14493,9 +14733,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14625,6 +14874,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14640,7 +14904,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -14966,6 +15230,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15050,11 +15319,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15108,7 +15372,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15123,9 +15387,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15206,6 +15467,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15244,6 +15513,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15319,9 +15591,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15727,6 +15996,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15751,10 +16028,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15771,6 +16044,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15787,11 +16064,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15807,6 +16096,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15819,6 +16112,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15846,6 +16143,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16237,6 +16546,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16313,6 +16625,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr ""
 
@@ -16850,6 +17165,12 @@ msgstr ""
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17039,6 +17360,11 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
 msgstr ""
 
@@ -17092,6 +17418,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17233,6 +17563,120 @@ msgstr ""
 msgid "public"
 msgstr ""
 
+msgid "Marine Fuel"
+msgstr ""
+
+msgid "Agip"
+msgstr ""
+
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
 msgid "Pier"
 msgstr ""
 
@@ -17349,6 +17793,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -17472,151 +17919,40 @@ msgstr ""
 msgid "Fuel"
 msgstr ""
 
-msgid "Agip"
+msgid "With shop"
 msgstr ""
 
-msgid "Aral"
+msgid "convenience"
 msgstr ""
 
-msgid "Avia"
+msgid "kiosk"
 msgstr ""
 
-msgid "BP"
+msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
-msgid "Chevron"
+msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Citgo"
+msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
-msgid "Eni"
+msgid "1/50 mix (mofa/moped)"
 msgstr ""
 
-msgid "Esso"
+msgid "Fuel cards:"
 msgstr ""
 
-msgid "Exxon"
+msgid "DKV"
 msgstr ""
 
-msgid "Gulf"
+msgid "Routex"
 msgstr ""
 
-msgid "Mobil"
+msgid "UTA"
 msgstr ""
 
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
-msgid "With shop"
-msgstr ""
-
-msgid "convenience"
-msgstr ""
-
-msgid "kiosk"
-msgstr ""
-
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
-msgid "Diesel (Gas To Liquid - ultimate diesel)"
-msgstr ""
-
-msgid "Diesel for Heavy Good Vehicles"
-msgstr ""
-
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
-msgid "1/25 mix (mofa/moped)"
-msgstr ""
-
-msgid "1/50 mix (mofa/moped)"
-msgstr ""
-
-msgid "Fuel cards:"
-msgstr ""
-
-msgid "DKV"
-msgstr ""
-
-msgid "Routex"
-msgstr ""
-
-msgid "UTA"
-msgstr ""
-
-msgid "Charging Station"
+msgid "Charging Station"
 msgstr ""
 
 msgid "Voltage"
@@ -17816,9 +18152,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17837,6 +18170,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18039,6 +18375,12 @@ msgstr ""
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18129,6 +18471,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18343,6 +18688,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18830,7 +19178,7 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
@@ -18839,19 +19187,46 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
+msgid "Cardboard"
+msgstr ""
+
+msgid "Electrical Appliances"
+msgstr ""
+
 msgid "Glass"
 msgstr ""
 
+msgid "Glass Bottles"
+msgstr ""
+
+msgid "Green Waste"
+msgstr ""
+
 msgid "Paper"
 msgstr ""
 
+msgid "Plastic"
+msgstr ""
+
+msgid "Plastic Bottles"
+msgstr ""
+
+msgid "Plastic Packaging"
+msgstr ""
+
 msgid "Scrap Metal"
 msgstr ""
 
-msgid "container"
+msgid "Shoes"
+msgstr ""
+
+msgid "Small Appliances"
+msgstr ""
+
+msgid "Waste"
 msgstr ""
 
-msgid "centre"
+msgid "Recycling Centre"
 msgstr ""
 
 msgid "Waste Basket/Trash Can"
@@ -19055,6 +19430,9 @@ msgstr ""
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr ""
 
@@ -19230,12 +19608,18 @@ msgstr ""
 msgid "Basketball"
 msgstr ""
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr ""
 
@@ -19251,13 +19635,13 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
@@ -19281,9 +19665,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19302,9 +19683,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -19377,6 +19755,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20697,9 +21083,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -21712,10 +22095,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22142,6 +22525,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22166,6 +22552,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22226,6 +22624,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22316,9 +22717,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22688,6 +23098,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22742,9 +23155,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23488,47 +23898,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23537,10 +23956,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debug"
+msgstr ""
+
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24143,6 +24574,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr ""
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25240,374 +25674,680 @@ msgid ""
 "highlight tracks"
 msgstr ""
 
-msgid "Delete this"
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
 msgstr ""
 
-msgid "Delete this&older"
+msgid "Connecting"
 msgstr ""
 
-msgid "km/h"
+msgid "Connected"
 msgstr ""
 
-msgid "Track name: "
+msgid "no name"
 msgstr ""
 
-msgid "Update IRS adjustment layer"
+msgid "Live GPS"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid "Show GPS data."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Speed"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Course"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
+msgid "Explore"
 msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25628,6 +26368,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -25686,47 +26429,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -25959,6 +26661,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr "Espleches"
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27176,6 +27881,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27347,6 +28073,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27356,6 +28085,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27536,6 +28268,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27714,6 +28449,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27723,6 +28491,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -27959,9 +28730,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29444,9 +30212,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/pa.po b/i18n/po/pa.po
index 7dab5ec..894c2d8 100644
--- a/i18n/po/pa.po
+++ b/i18n/po/pa.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2011-05-06 15:52+0000\n"
 "Last-Translator: A S Alam <aalam at users.sf.net>\n"
 "Language-Team: Punjabi <pa at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:52+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:55+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: pa\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -97,19 +97,16 @@ msgstr ""
 msgid "Updating user interface"
 msgstr ""
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
 msgstr ""
 
 msgid "Warning"
 msgstr ""
 
-msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
+msgid "Ignoring malformed file URL: \"{0}\""
 msgstr ""
 
-msgid "Ignoring malformed URL: \"{0}\""
+msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 
 msgid ""
@@ -444,6 +441,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
 
@@ -1029,6 +1029,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr ""
 
@@ -1945,15 +1969,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr ""
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -1975,6 +1990,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2093,9 +2117,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2309,9 +2330,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr ""
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2525,6 +2552,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2567,6 +2598,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3017,6 +3051,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3134,10 +3186,44 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3327,6 +3413,12 @@ msgstr ""
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3354,13 +3446,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -3976,9 +4068,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -3988,12 +4077,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4174,13 +4275,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4378,6 +4479,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4591,43 +4693,54 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
 msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
 msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
 msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
 msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
-msgid "Menu: {0}"
+msgctxt "menu"
+msgid "Help"
 msgstr ""
 
-msgid "Save and load the current session (list of layers, etc.)"
+msgid "Menu: {0}"
 msgstr ""
 
 msgid "Edit toolbar"
@@ -4651,6 +4764,7 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
 msgstr ""
 
@@ -4773,58 +4887,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr ""
-
-msgid "Pos."
+msgid " ({0})"
 msgstr ""
 
-msgid "Role"
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5253,6 +5325,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr ""
+
 msgid "Primitive"
 msgstr ""
 
@@ -5493,6 +5568,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5639,6 +5717,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5742,7 +5855,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5870,6 +5983,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5879,17 +5997,48 @@ msgstr ""
 msgid "unknown"
 msgstr ""
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -5935,6 +6084,12 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr ""
 
@@ -6064,10 +6219,16 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
-msgid "List of notes"
+msgid "Mini map"
 msgstr ""
 
-msgid "Add comment"
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
+msgid "List of notes"
+msgstr ""
+
+msgid "Add comment"
 msgstr ""
 
 msgid "Comment"
@@ -6122,10 +6283,15 @@ msgstr ""
 msgid "Enter the ID of the object that should be downloaded"
 msgstr ""
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6154,6 +6320,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr ""
 
+msgid "Selection"
+msgstr ""
+
 msgid "Open a selection list window."
 msgstr ""
 
@@ -6244,6 +6413,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -6838,6 +7013,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6929,14 +7110,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7109,6 +7289,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7644,6 +7830,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8489,6 +8678,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr ""
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr ""
 
@@ -8542,6 +8831,9 @@ msgstr ""
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8562,7 +8854,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8645,80 +8937,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr ""
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-
-msgid "Auto Zoom"
-msgstr ""
-
-msgid "Auto load tiles"
-msgstr ""
-
-msgid "Show Errors"
-msgstr ""
-
-msgid "Load Tile"
-msgstr ""
-
-msgid "Show Tile Info"
-msgstr ""
-
-msgid "Load All Tiles"
-msgstr ""
-
-msgid "Load All Error Tiles"
-msgstr ""
-
-msgid "Increase zoom"
-msgstr ""
-
-msgid "Decrease zoom"
-msgstr ""
-
-msgid "Snap to tile size"
-msgstr ""
-
-msgid "Flush Tile Cache"
-msgstr ""
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
@@ -8728,56 +8946,30 @@ msgstr ""
 msgid "No validation errors"
 msgstr ""
 
-msgid "Blank Layer"
-msgstr ""
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "Download visible tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-
-msgid "Change resolution"
-msgstr ""
-
-msgid "Reload erroneous tiles"
-msgstr ""
-
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Automatic downloading"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Zoom to native resolution"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Supported projections are: {0}"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Save WMS file"
+msgid "Try Again"
 msgstr ""
 
-msgid "Correlate to GPX"
+msgid "No images could be matched!"
 msgstr ""
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
@@ -8864,24 +9056,9 @@ msgstr ""
 msgid "Offset:"
 msgstr ""
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
 msgid "Correlate"
 msgstr ""
 
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9075,9 +9252,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr ""
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9140,9 +9314,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9768,15 +9939,15 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr ""
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -10569,13 +10740,28 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
-msgid "imagery fade"
+msgid "1. Enter getCapabilities URL"
 msgstr ""
 
-msgid "Fade Color: "
+msgid "2. Enter name for this layer"
 msgstr ""
 
-msgid "Fade amount: "
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
+msgid "imagery fade"
+msgstr ""
+
+msgid "Fade Color: "
+msgstr ""
+
+msgid "Fade amount: "
 msgstr ""
 
 msgid "Soft"
@@ -10587,6 +10773,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10608,6 +10806,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10650,9 +10851,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr ""
 
@@ -10677,36 +10875,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11642,6 +11825,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] ""
@@ -11750,6 +11941,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12003,6 +12197,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12539,6 +12736,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12924,6 +13124,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13918,6 +14131,9 @@ msgstr ""
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr ""
+
 msgid "Blue:"
 msgstr ""
 
@@ -13957,7 +14173,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -13969,9 +14185,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14080,6 +14293,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14093,12 +14309,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14135,10 +14357,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14165,6 +14393,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14189,7 +14420,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14204,6 +14435,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14216,12 +14450,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14242,6 +14470,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14274,10 +14505,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14307,6 +14535,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14322,154 +14556,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14484,9 +14724,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14616,6 +14865,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14631,7 +14895,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -14957,6 +15221,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15041,11 +15310,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15099,7 +15363,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15114,9 +15378,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15197,6 +15458,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15235,6 +15504,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15310,9 +15582,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15718,6 +15987,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15742,10 +16019,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15762,6 +16035,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15778,11 +16055,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15798,6 +16087,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15810,6 +16103,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15837,6 +16134,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16228,6 +16537,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16304,6 +16616,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr ""
 
@@ -16841,6 +17156,12 @@ msgstr ""
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17030,6 +17351,11 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
 msgstr ""
 
@@ -17083,6 +17409,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17224,13 +17554,127 @@ msgstr ""
 msgid "public"
 msgstr ""
 
-msgid "Pier"
+msgid "Marine Fuel"
 msgstr ""
 
-msgid "Lock Gate"
+msgid "Agip"
 msgstr ""
 
-msgid "Turning Point"
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
+msgid "Pier"
+msgstr ""
+
+msgid "Lock Gate"
+msgstr ""
+
+msgid "Turning Point"
 msgstr ""
 
 msgid "Slipway"
@@ -17340,6 +17784,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -17463,78 +17910,6 @@ msgstr ""
 msgid "Fuel"
 msgstr ""
 
-msgid "Agip"
-msgstr ""
-
-msgid "Aral"
-msgstr ""
-
-msgid "Avia"
-msgstr ""
-
-msgid "BP"
-msgstr ""
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr ""
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
 msgid "With shop"
 msgstr ""
 
@@ -17544,51 +17919,12 @@ msgstr ""
 msgid "kiosk"
 msgstr ""
 
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -17807,9 +18143,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17828,6 +18161,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18030,6 +18366,12 @@ msgstr ""
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18120,6 +18462,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18334,6 +18679,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18821,7 +19169,7 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
@@ -18830,43 +19178,70 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
-msgid "Glass"
+msgid "Cardboard"
 msgstr ""
 
-msgid "Paper"
+msgid "Electrical Appliances"
 msgstr ""
 
-msgid "Scrap Metal"
+msgid "Glass"
 msgstr ""
 
-msgid "container"
+msgid "Glass Bottles"
 msgstr ""
 
-msgid "centre"
+msgid "Green Waste"
 msgstr ""
 
-msgid "Waste Basket/Trash Can"
+msgid "Paper"
 msgstr ""
 
-msgid "Waste Disposal/Dumpster"
+msgid "Plastic"
 msgstr ""
 
-msgid "Sanitary Dump Station"
+msgid "Plastic Bottles"
 msgstr ""
 
-msgid "Suction pumpout"
+msgid "Plastic Packaging"
 msgstr ""
 
-msgid "Gravity drain for hose"
+msgid "Scrap Metal"
 msgstr ""
 
-msgid "Casette or Elsan Disposal"
+msgid "Shoes"
 msgstr ""
 
-msgid "Operation times"
+msgid "Small Appliances"
 msgstr ""
 
-msgid "Backrest"
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
+msgstr ""
+
+msgid "Waste Basket/Trash Can"
+msgstr ""
+
+msgid "Waste Disposal/Dumpster"
+msgstr ""
+
+msgid "Sanitary Dump Station"
+msgstr ""
+
+msgid "Suction pumpout"
+msgstr ""
+
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
+msgstr ""
+
+msgid "Operation times"
+msgstr ""
+
+msgid "Backrest"
 msgstr ""
 
 msgid "Amount of Seats"
@@ -19046,6 +19421,9 @@ msgstr ""
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr ""
 
@@ -19221,12 +19599,18 @@ msgstr ""
 msgid "Basketball"
 msgstr ""
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr ""
 
@@ -19242,13 +19626,13 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
@@ -19272,9 +19656,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19293,9 +19674,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -19368,6 +19746,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20688,9 +21074,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -21703,10 +22086,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22133,6 +22516,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22157,6 +22543,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22217,6 +22615,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22307,9 +22708,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22679,6 +23089,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22733,9 +23146,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23479,47 +23889,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23528,10 +23947,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24134,6 +24565,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr ""
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25231,374 +25665,680 @@ msgid ""
 "highlight tracks"
 msgstr ""
 
-msgid "Delete this"
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
 msgstr ""
 
-msgid "Delete this&older"
+msgid "Connecting"
 msgstr ""
 
-msgid "km/h"
+msgid "Connected"
 msgstr ""
 
-msgid "Track name: "
+msgid "no name"
 msgstr ""
 
-msgid "Update IRS adjustment layer"
+msgid "Live GPS"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid "Show GPS data."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Speed"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Course"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
+msgid "Explore"
 msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25619,6 +26359,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -25677,47 +26420,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -25950,6 +26652,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr ""
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27167,6 +27872,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27338,6 +28064,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27347,6 +28076,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27527,6 +28259,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27705,6 +28440,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27714,6 +28482,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -27950,9 +28721,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29435,9 +30203,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/pl.po b/i18n/po/pl.po
index 4503a99..f1da4d5 100644
--- a/i18n/po/pl.po
+++ b/i18n/po/pl.po
@@ -7,17 +7,17 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
-"PO-Revision-Date: 2015-05-10 22:43+0000\n"
-"Last-Translator: Daniel Koć <daniel at xn--ko-wla.pl>\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
+"PO-Revision-Date: 2015-10-04 18:04+0000\n"
+"Last-Translator: eBin <Unknown>\n"
 "Language-Team: Polish <josm-lang-pl at googlegroups.com>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
 "|| n%100>=20) ? 1 : 2;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:53+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:56+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: pl\n"
 "X-Poedit-Bookmarks: 1098,-1,-1,-1,-1,-1,-1,-1,-1,-1\n"
 "X-Poedit-Basepath: /home/mfloryan/dev/josm/i18n/\n"
@@ -103,26 +103,23 @@ msgid "Initializing map styles"
 msgstr "Inicjowanie stylów map"
 
 msgid "Loading imagery preferences"
-msgstr "Wczytywanie ustawień podkładów mapy"
+msgstr "Wczytywanie ustawień podkładów"
 
 msgid "Updating user interface"
 msgstr "Uaktualnianie interfejsu użytkownika"
 
-msgid "{0} completed in {1}"
-msgstr "zakończono {0} z {1}"
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "Pominięto nieprawidłowy adres URL pliku: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "Pominięto nieprawidłowy adres URL: \"{0}\""
 
 msgid "Warning"
 msgstr "Ostrzeżenie"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "Pominięto nieprawidłowy adres URL pliku: \"{0}\""
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr "Parametr \"downloadgps\" nie przyjmuje nazw plików lub adresów URL"
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "Pominięto nieprawidłowy adres URL: \"{0}\""
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -134,7 +131,7 @@ msgstr ""
 "JOSM.</li></ul>Więcej informacji:"
 
 msgid "Exit JOSM"
-msgstr "Zamknij JOSM"
+msgstr "Zakończ JOSM"
 
 msgid "Continue, try anyway"
 msgstr "Kontynuuj mimo to"
@@ -164,7 +161,7 @@ msgid "Homepage"
 msgstr "Strona główna"
 
 msgid "Bug Reports"
-msgstr "Raporty o błędach"
+msgstr "Zgłoś błąd"
 
 msgid "Info"
 msgstr "Informacje"
@@ -248,7 +245,7 @@ msgid ""
 msgstr "Zaznacz na mapie elementy zaznaczone na powyższej liście."
 
 msgid "Add imagery layer {0}"
-msgstr "Dodaj warstwę zdjęć {0}"
+msgstr "Dodaje warstwę podkładu {0}"
 
 msgid "Select image format for WMS layer"
 msgstr "Wybierz format obrazu dla warsty WMS"
@@ -424,16 +421,16 @@ msgid "Please select at least two ways to combine."
 msgstr "Wybierz co najmniej dwie linie do połączenia."
 
 msgid "Copy"
-msgstr "Kopiuj"
+msgstr "Skopiuj"
 
 msgid "Copy selected objects to paste buffer."
-msgstr "Kopiuje zaznaczone obiekty do schowka."
+msgstr "Kopiuje zaznaczone obiekty do schowka"
 
 msgid "Please select something to copy."
 msgstr "Proszę wybrać coś do skopiowania."
 
 msgid "Copy Coordinates"
-msgstr "Kopiuj współrzędne"
+msgstr "Skopiuj współrzędne"
 
 msgid "Copy coordinates of selected nodes to clipboard."
 msgstr "Kopiuje współrzędne zaznaczonego węzła do schowka."
@@ -478,6 +475,9 @@ msgstr "Przełącz panel dialogowy"
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Przełącz panel dialogowy, maksymalizuj widok mapy"
 
+msgid "Distribute Nodes"
+msgstr "Rozmieść węzły"
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
 "Rozmieszcza wybrane węzły tak by znajdowały się w równych odległościach na "
@@ -491,6 +491,10 @@ msgid ""
 "* One no self-crossing way with at most two of its nodes;\n"
 "* Three nodes."
 msgstr ""
+"Wybierz:\n"
+"* Jedną linię, która nie krzyżuje się sama ze sobą i zawiera przynajmniej "
+"dwa węzły;\n"
+"* Trzy węzły."
 
 msgid "Download from OSM..."
 msgstr "Pobierz z OSM..."
@@ -509,7 +513,7 @@ msgid "Download data"
 msgstr "Pobiera dane"
 
 msgid "Download notes in current view"
-msgstr ""
+msgstr "Pobierz uwagi w bieżącym widoku"
 
 msgid "Download object..."
 msgstr "Pobierz obiekt…"
@@ -533,7 +537,7 @@ msgid "Exit"
 msgstr "Zakończ"
 
 msgid "Exit the application."
-msgstr "Kończy pracę z programem."
+msgstr "Kończy działanie programu"
 
 msgid "Expert Mode"
 msgstr "Tryb eksperta"
@@ -592,7 +596,7 @@ msgid "Adjust the position of this imagery layer"
 msgstr "Dopasuj położenie warstwy obrazu"
 
 msgid "Adjust imagery offset"
-msgstr "Dopasuj przesunięcie warstwy obrazu"
+msgstr "Dopasowuj przesunięcie warstwy podkładu"
 
 msgid "OK"
 msgstr "OK"
@@ -669,7 +673,7 @@ msgid "Please abort if you are not sure"
 msgstr "Przerwij jeśli nie jesteś pewien"
 
 msgid "The selected area is incomplete. Continue?"
-msgstr "Wybrany obszar nie jest kompletny. Czy chcesz kontynuować?"
+msgstr "Wybrany obszar nie jest kompletny. Kontynuować?"
 
 msgid "No intersection found. Nothing was changed."
 msgstr "Brak części wspólnej. Nic nie zmieniono."
@@ -836,7 +840,7 @@ msgid "Merge layer"
 msgstr "Scal warstwy"
 
 msgid "Merge the current layer into another layer"
-msgstr "Włącz  aktualną warstwę do innej."
+msgstr "Łączy bieżącą warstwę z inną"
 
 msgid "Merging layers with different upload policies"
 msgstr "Scalanie warstw z różnymi politykami wysyłania"
@@ -891,7 +895,7 @@ msgstr[1] "Połącz {0} węzły"
 msgstr[2] "Połącz {0} węzłów"
 
 msgid "Merge selection"
-msgstr "Połącz wybrane elementy."
+msgstr "Połącz wybrane elementy"
 
 msgid "Merge the currently selected objects into another layer"
 msgstr "Łączy aktualnie wybrane obiekty w nową warstę."
@@ -965,7 +969,7 @@ msgid "Open a file."
 msgstr "Otwiera plik."
 
 msgid "Opening files"
-msgstr "Otwieram pliki"
+msgstr "Otwieranie plików"
 
 msgid "Cannot open {0} file with the file importer ''{1}''."
 msgid_plural "Cannot open {0} files with the file importer ''{1}''."
@@ -1044,7 +1048,7 @@ msgid "Download Data"
 msgstr "Pobierz dane"
 
 msgid "Which tasks to perform?"
-msgstr ""
+msgstr "Które zadania wykonać?"
 
 msgid "Ok"
 msgstr "OK"
@@ -1120,6 +1124,30 @@ msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 "Proszę wybrać linie w których kąty w przybliżeniu mają 90 lub 180 stopni."
 
+msgid "Download from Overpass API ..."
+msgstr "Pobierz z Overpass API ..."
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr "Wklej"
 
@@ -1138,8 +1166,7 @@ msgid ""
 "objects?"
 msgstr ""
 "Skopiowane dane zawierają niekompletne obiekty. Podczas wstawiania "
-"niekompletne obiekty są usuwane. Czy chcesz wstawić dane bez niekompletnych "
-"obiektów?"
+"niekompletne obiekty są usuwane. Wstawić dane bez niekompletnych obiektów?"
 
 msgid "Paste Tags"
 msgstr "Wklej tagi"
@@ -1239,7 +1266,7 @@ msgid "Restart"
 msgstr "Uruchom ponownie"
 
 msgid "Restart the application."
-msgstr "Zrestartuj aplikcję."
+msgstr "Uruchamia program ponownie"
 
 msgid "Click to restart later."
 msgstr "Kliknij, aby zrestartować później."
@@ -1364,7 +1391,7 @@ msgid "No exporter for this layer"
 msgstr "Brak eksportera dla tej warstwy"
 
 msgid "Show Status Report"
-msgstr "Pokaż raport konfiguracji"
+msgstr "Wyświetl raport konfiguracji"
 
 msgid ""
 "Show status report with useful information that can be attached to bugs"
@@ -1581,9 +1608,9 @@ msgid ""
 "downloaded.<br>This can cause problems because other objects (that you do "
 "not see) might use them.<br>Do you really want to unglue?"
 msgstr ""
-"Próbujesz rozdzielić wezły poza pobranym obszarem.<br>Może to spowodować "
-"problem, bo węzły te moga być uzywane przez inne obiekty, które nie są teraz "
-"widoczne.<br>Czy napewno chcesz rozdzielić?"
+"Próbujesz rozdzielić węzły poza pobranym obszarem.<br>Może to spowodować "
+"problem, bo węzły te mogą być używane przez inne obiekty, które nie są teraz "
+"widoczne.<br>Czy na pewno chcesz je rozdzielić?"
 
 msgid ""
 "You are about to unglue incomplete objects.<br>This will cause problems "
@@ -1617,7 +1644,7 @@ msgstr[1] "Powiązana linia zniknie po odłączeniu wybranych węzłów."
 msgstr[2] "Powiązana linia zniknie po odłączeniu wybranych węzłów."
 
 msgid "Some irrelevant nodes have been removed from the selection"
-msgstr ""
+msgstr "Zbędne węzły zostały usunięte z zaznaczenia"
 
 msgid "Undo"
 msgstr "Cofnij"
@@ -1881,25 +1908,30 @@ msgstr "Uwagi"
 
 msgid "{0} note has been downloaded."
 msgid_plural "{0} notes have been downloaded."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} uwaga została pobrana."
+msgstr[1] "{0} uwagi zostały pobrane."
+msgstr[2] "{0} uwag zostało pobranych."
 
 msgid ""
 "Since the download limit was {0}, there might be more notes to download."
 msgstr ""
+"Ponieważ limit oczekiwania został ustalony na {0}, mogą istnieć jeszcze "
+"dalsze uwagi do pobrania."
 
 msgid ""
 "Request a smaller area to make sure that all notes are being downloaded."
 msgstr ""
+"Wybierz mniejszy obszar aby mieć pewność, że udało się pobrać wszystkie "
+"uwagi."
 
 msgid "More notes to download"
-msgstr ""
+msgstr "Więcej uwag do pobrania"
 
 msgid "Download OSM Notes within Bounds"
-msgstr ""
+msgstr "Pobierz uwagi w określonych granicach"
 
 msgid "Download OSM Note by ID"
-msgstr ""
+msgstr "Pobierz uwagi według ID"
 
 msgid "Download Compressed OSM Change"
 msgstr "Pobiera skompresowane zmiany OSM"
@@ -1911,7 +1943,7 @@ msgid "Download Compressed OSM"
 msgstr "Pobiera skompresowany OSM"
 
 msgid "Download OSM object by ID"
-msgstr ""
+msgstr "Pobierz obiekt według ID"
 
 msgid "Download OSM"
 msgstr "Pobiera OSM"
@@ -1952,13 +1984,13 @@ msgstr[1] "Konflikty podczas pobierania"
 msgstr[2] "Konflikty podczas pobierania"
 
 msgid "({0}/{1}) Loading parents of node {2}"
-msgstr "({0}/{1}) ładuję rodzica węzła {2}"
+msgstr "({0}/{1}) Wczytywanie nadrzędnych węzłów {2}"
 
 msgid "({0}/{1}) Loading parents of way {2}"
 msgstr "({0}/{1}) Ładuję rodzica linii {2}"
 
 msgid "({0}/{1}) Loading parents of relation {2}"
-msgstr "({0}/{1}) ładuję rodzica relacji {2}"
+msgstr "({0}/{1}) Wczytywanie nadrzędnych relacji {2}"
 
 msgid "Download session"
 msgstr "Pobierz sesję"
@@ -2126,15 +2158,6 @@ msgstr "Przyciąganie kątów włączone"
 msgid "Finish drawing."
 msgstr "Zakończ rysowanie."
 
-msgid "FIX"
-msgstr "Napraw"
-
-msgid "draw angle snap"
-msgstr "przystawka rysowania kąta"
-
-msgid "draw angle snap highlight"
-msgstr "rysuj podświetlenie przyciągania kąta"
-
 msgid "Toggle snapping by {0}"
 msgstr "Włącz przeciąganie o {0}"
 
@@ -2156,6 +2179,15 @@ msgstr "0,45,90,..."
 msgid "0,30,45,60,90,..."
 msgstr "0,30,45,60,90,..."
 
+msgid "FIX"
+msgstr "Napraw"
+
+msgid "draw angle snap"
+msgstr "przystawka rysowania kąta"
+
+msgid "draw angle snap highlight"
+msgstr "rysuj podświetlenie przyciągania kąta"
+
 msgid "Angle snapping"
 msgstr "Przyciąganie do kątów"
 
@@ -2289,9 +2321,6 @@ msgstr ""
 "ParallelWayAction\n"
 "Wybrane linie muszą tworzyć pojedynczą ścieżkę bez rozgałęzień"
 
-msgid "Make parallel way error"
-msgstr "Błąd tworzenia linii równoległej"
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2532,9 +2561,15 @@ msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 "Uwzględnij także niekompletne i skasowane obiekty w wynikach wyszukiwania."
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr "wyrażenie regularne"
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr "dodaj przycisk na pasku narzędzi"
 
@@ -2663,11 +2698,13 @@ msgstr "właściwości"
 
 msgid ""
 "ways with at least 20 nodes, or relations containing at least 20 nodes"
-msgstr ""
+msgstr "linie lub relacje zawierające przynajmniej 20 węzłów"
 
 msgid ""
 "nodes with at least 3 referring ways, or relations containing at least 3 ways"
 msgstr ""
+"węzły wchodzące w skład przynajmniej 3 linii lub relacje zawierające "
+"przynajmniej 3 linie"
 
 msgid "objects having 5 to 10 tags"
 msgstr "obiekty mające od 5 do 10 tagów"
@@ -2679,7 +2716,7 @@ msgid "closed ways with an area of 100 m²"
 msgstr "zamknięte linie z terenem od 100 m²"
 
 msgid "ways with a length of 200 m or more"
-msgstr ""
+msgstr "linie o długości 200 m lub dłuższe"
 
 msgid "state"
 msgstr "stan"
@@ -2757,6 +2794,10 @@ msgid "RX"
 msgstr "RX"
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr "A"
 
@@ -2809,6 +2850,9 @@ msgstr "Spodziewane: zakres liczbowy"
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr "Niespodziewany token. Spodziewano się {0}, znaleziono {1}."
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr "Niespodziewany token: {0}"
 
@@ -3325,6 +3369,24 @@ msgstr "Nie udało się utworzyć brakującego katalogu podręcznego: {0}"
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr "<html>Nie udało się utworzyć brakującego folderu cache: {0}</html>"
 
+msgid "Unable to delete temporary file {0}"
+msgstr "Próba usunięcia tymczasowego pliku {0} nie powiodła się"
+
+msgid "Unable to set file non-readable {0}"
+msgstr "Próba usunięcia uprawnień do odczytu na pliku {0} nie powiodła się"
+
+msgid "Unable to set file non-writable {0}"
+msgstr "Próba usunięcia uprawnień do zapisu na pliku {0} nie powiodła się"
+
+msgid "Unable to set file non-executable {0}"
+msgstr "Próba usunięcia uprawnień do wykonywania pliku {0} nie powiodła się"
+
+msgid "Unable to set file readable {0}"
+msgstr "Próba dodania uprawnień do odczytu na pliku {0} nie powiodła się"
+
+msgid "Unable to set file writable {0}"
+msgstr "Próba dodania uprawnień do zapisu na pliku {0} nie powiodła się"
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3396,6 +3458,8 @@ msgid ""
 "Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
 "startup)."
 msgstr ""
+"Spróbuj włączyć obsługę adresów IPv6 i preferuj adresy IPv6 nad IPv4 (działa "
+"tylko na początku rozruchu)."
 
 msgid " (at line {0}, column {1})"
 msgstr " (linia {0}, kolumna {1})"
@@ -3459,14 +3523,50 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
-msgid "Not in cache"
-msgstr "Brak w pamięci podręcznej"
-
 msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr ""
 "Odwzorowanie \"{0}\" nie zostało znalezione, zakładka \"{1}\" nie może "
 "zostać użyta"
 
+msgid "HTTP error {0} when loading tiles"
+msgstr "Błąd HTTP {0} podczas pobierania kafelków"
+
+msgid "Error downloading tiles: {0}"
+msgstr "Błąd pobierania kafelków: {0}"
+
+msgid "Could not load image from tile server"
+msgstr "Nie udało się pobrać obrazu z serwera kafelków"
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr "Wybierz warstwę WMTS"
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr "Odwzorowanie"
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr "Nie wybrano warstwy"
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
+msgstr ""
+"Tylko kwadratowe kafelki są obsługiwane. Serwer zwrócił {0}x{1} dla "
+"identyfikatora TileMatrix {2}"
+
 msgid "ID > 0 expected. Got {0}."
 msgstr "Oczekiwano ID > 0. Jest {0}."
 
@@ -3477,6 +3577,8 @@ msgid ""
 "Cannot assign a changesetId > 0 to a new primitive. Value of changesetId is "
 "{0}"
 msgstr ""
+"Nie można przypisać changesetId > 0 do nowego prymitywu. Wartość changesetId "
+"wynosi {0}"
 
 msgid "A primitive with ID = 0 cannot be invisible."
 msgstr "Element z ID = 0 nie może być niewidoczny."
@@ -3670,6 +3772,12 @@ msgstr "tekst"
 msgid "areatext"
 msgstr "obszar tekstowy"
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr "Parametr musi zaczynać się znakiem \"+\" (znaleziono \"{0}\")"
 
@@ -3697,15 +3805,15 @@ msgstr "Elipsoida \"{0}\" nie obsługiwana."
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr "Kombinacja parametrów elipsoidy nie jest osbługiwana."
 
+msgid "Unknown datum identifier: ''{0}''"
+msgstr "Nieznany identyfikator punktu odniesienia: ''{0}''"
+
 msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr "Elipsoida wymaga (+ellps=* lub +a=*, +b=*)"
 
 msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
-msgstr "Nieznany identyfikator punktu odniesienia: ''{0}''"
-
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
 msgstr "Potrzebny punkt odniesienia (+datum=*, +towgs84=* or +nadgrids=*)"
 
@@ -4033,7 +4141,7 @@ msgid "Checks for errors in internet-related tags."
 msgstr "Sprawdza błędy w tagach związanych z Internetem"
 
 msgid " URL cannot be converted to ASCII: {0}"
-msgstr ""
+msgstr " Nie można skonwertować adresu URl na ASCII: {0}"
 
 msgid "''{0}'': {1}"
 msgstr "''{0}'': {1}"
@@ -4060,13 +4168,13 @@ msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr "Niespójne wartości zależne od liczby pasów w przeciwnym kierunku"
 
 msgid "Long segments"
-msgstr ""
+msgstr "Długie segmenty"
 
 msgid "This tests for long way segments, which are usually errors."
-msgstr ""
+msgstr "Test sprawdzający długie odcinki linii, które zwykle są błędem."
 
 msgid "Very long segment of {0} kilometers"
-msgstr ""
+msgstr "Bardzo długi segment o długości {0} kilometrów"
 
 msgid "Tag checker (MapCSS based)"
 msgstr "Walidator tagów (bazujący na MapCSS)"
@@ -4170,7 +4278,7 @@ msgstr ""
 "przykład, Italia - Italien - Włochy."
 
 msgid "Missing name:*={0}. Add tag with correct language key."
-msgstr ""
+msgstr "Brakujący tag name:*={0}. Dodaj tag z prawidłowym kodem języka."
 
 msgid "A name is missing, even though name:* exists."
 msgstr "Brak tagu name, istnieje jednak name:*"
@@ -4271,11 +4379,13 @@ msgid "Relation is empty"
 msgstr "Pusta relacja"
 
 msgid "Role member does not match expression {0} in template {1}"
-msgstr ""
+msgstr "Członek nie spełnia wymagań {0} w szablonie {1}"
 
 msgid ""
 "Role member type {0} does not match accepted list of {1} in template {2}"
 msgstr ""
+"Typ członka {0} nie pasuje do listy akceptowanych wartości {1} w szablonie "
+"{2}"
 
 msgid "<empty>"
 msgstr "<pusta>"
@@ -4284,7 +4394,7 @@ msgid "Role {0} unknown in templates {1}"
 msgstr "Rola {0} jest nieznana w szablonach {1}"
 
 msgid "Empty role type found when expecting one of {0}"
-msgstr ""
+msgstr "Znaleziono pusty typ roli zamiast spodziewanego jednego z {0}"
 
 msgid "Role {0} missing"
 msgstr "Brakująca rola {0}"
@@ -4354,9 +4464,6 @@ msgstr "Klucz tagu jest za długi"
 msgid "Tags with empty values"
 msgstr "Tag z pustą wartością"
 
-msgid "Invalid property key"
-msgstr "Nieprawidłowy klucz właściwości"
-
 msgid "Invalid white space in property key"
 msgstr "Nieprawidłowy odstęp (space) w kluczu właściwości"
 
@@ -4366,12 +4473,24 @@ msgstr "Wartość zaczyna się lub kończy odstępem (space)"
 msgid "Property values contain HTML entity"
 msgstr "Wartość zawiera kody HTML"
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr "Klucz \"{0}\" nie występuje w szablonach"
 
 msgid "Presets do not contain property key"
 msgstr "Szablony nie zawierają danego klucza"
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr "Wartość ''{0}'' dla klucza ''{1}'' przypomina ''{2}''."
+
+msgid "Misspelled property value"
+msgstr "Literówka w podanej wartości"
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr "Wartość \"{0}\" dla klucza \"{1}\" nie występuje w szablonach."
 
@@ -4555,15 +4674,15 @@ msgstr ""
 "Węzeł kończący jedną linię blisko drugiej. Podejrzewamy brak złączenia linii "
 "posiadających w rzeczywistości połączenie."
 
+msgid "Unconnected nodes without physical tags"
+msgstr "Niepołączone węzły bez tagów"
+
 msgid "Untagged and unconnected nodes"
 msgstr "Nieotagowane i niepołączone węzły"
 
 msgid "This test checks for untagged nodes that are not part of any way."
 msgstr "Ten test znajduje węzły bez tagu i poza linią."
 
-msgid "Unconnected nodes without physical tags"
-msgstr "Niepołączone węzły bez tagów"
-
 msgid "No tags"
 msgstr "Bez tagów"
 
@@ -4765,6 +4884,7 @@ msgstr "Kliknij aby zamknąć"
 msgid "Imagery offset"
 msgstr "Przesunięcie warstwy obrazu"
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr "Podkłady"
 
@@ -4893,7 +5013,7 @@ msgid "Printing debugging messages to console"
 msgstr "Wypisywanie komunikatów debugowania na konsoli"
 
 msgid "Plugin loading skipped"
-msgstr ""
+msgstr "Pominiięto wczytywanie wtyczki"
 
 msgid "Enabled detailed debug level (trace)"
 msgstr "Włączony poziom dokładnego debugowania (trace)"
@@ -4937,6 +5057,8 @@ msgstr[2] "JOSM działa w trybie offline. Te zasoby nie będą dostępne: {0}"
 msgid ""
 "Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
 msgstr ""
+"Wykryto działającą sieć typu IPv6, będzie ona preferowana po następnym "
+"restarcie."
 
 msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
 msgstr ""
@@ -4945,6 +5067,8 @@ msgid ""
 "Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
 "restart."
 msgstr ""
+"Nie wykryto żadnej sieci IPv6 możliwej do użycia, IPv4 będzie preferowane "
+"względem IPv6 po następnym uruchomieniu."
 
 msgid "Unsaved osm data"
 msgstr "Niezapisane dane OSM"
@@ -4957,15 +5081,15 @@ msgstr "Porzuć"
 
 msgid "JOSM found {0} unsaved osm data layer. "
 msgid_plural "JOSM found {0} unsaved osm data layers. "
-msgstr[0] "JOSM znalazł {0} niezapisaną warstwę danych. "
-msgstr[1] "JOSM znalazł {0} niezapisane warstwy danych. "
-msgstr[2] "JOSM znalazł {0} niezapisanych warstw danych. . "
+msgstr[0] "Odnaleziono {0} niezapisaną warstwę danych. "
+msgstr[1] "Odnaleziono {0} niezapisane warstwy danych. "
+msgstr[2] "Odnaleziono {0} niezapisanych warstw danych. "
 
 msgid ""
 "It looks like JOSM crashed last time. Would you like to restore the data?"
 msgstr ""
-"Wygląda na to, że JOSM niespodziewanie zakończył pracę ostatnim razem. Czy "
-"przywrócić ostatnio edytowane dane?"
+"Wygląda na to, że program ostatnim razem niespodziewanie zakończył "
+"działanie. Przywrócić ostatnie dane?"
 
 msgid "Change proxy settings"
 msgstr "Zmień ustawienia proxy"
@@ -4993,48 +5117,58 @@ msgid ""
 msgstr ""
 "JOSM próbował uzyskać dostęp do następujących zasobów:<br>{0}ale mu się "
 "<b>nie udało :(</b>. Wystąpiły błędy w sieci: <br> {1}To może być ze względu "
-"na brakującą konfigurację proxy. <br> Czy chcesz zmienić teraz swoje "
-"ustawienia proxy?"
+"na brakującą konfigurację proxy. <br> Zmienić teraz ustawienia proxy?"
 
+msgctxt "menu"
 msgid "File"
 msgstr "Plik"
 
-msgid "Session"
-msgstr "Sesja"
+msgctxt "menu"
+msgid "Edit"
+msgstr "Edycja"
 
+msgctxt "menu"
 msgid "View"
 msgstr "Widok"
 
+msgctxt "menu"
 msgid "Tools"
 msgstr "Narzędzia"
 
+msgctxt "menu"
 msgid "More tools"
 msgstr "Więcej narzędzi"
 
+msgctxt "menu"
 msgid "Data"
 msgstr "Dane"
 
+msgctxt "menu"
 msgid "Selection"
 msgstr "Zaznaczenie"
 
+msgctxt "menu"
 msgid "Presets"
 msgstr "Szablony"
 
 msgid "More..."
 msgstr "Więcej..."
 
+msgctxt "menu"
 msgid "GPS"
 msgstr "GPS"
 
+msgctxt "menu"
 msgid "Windows"
 msgstr "Okna"
 
+msgctxt "menu"
+msgid "Help"
+msgstr "Pomoc"
+
 msgid "Menu: {0}"
 msgstr "Menu: {0}"
 
-msgid "Save and load the current session (list of layers, etc.)"
-msgstr "Zapisuje i wczytuje bieżącą sesję (listę warstw, itd.)"
-
 msgid "Edit toolbar"
 msgstr "Pasek narzędzi"
 
@@ -5051,11 +5185,12 @@ msgid "Imagery preferences"
 msgstr "Konfiguracja"
 
 msgid "Click to open the imagery tab in the preferences"
-msgstr "Kliknij aby otworzyć konfigurację podkładu w Ustawieniach"
+msgstr "Wyświetla kartę konfiguracji podkładów w oknie preferencji"
 
 msgid "Search menu items"
 msgstr "Wyszukaj w menu"
 
+msgctxt "menu"
 msgid "Audio"
 msgstr "Dźwięk"
 
@@ -5180,68 +5315,17 @@ msgstr "W tle"
 msgid "Click to run job in background"
 msgstr "Kilknij aby uruchomić pracę w tle"
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-"Podkład mapy może nie być skalibrowany. Sprawdź jego przesunięcie za pomocą "
-"ścieżek GPS!"
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-
-msgid "Details..."
-msgstr "Szczegóły..."
-
-msgid "Hide this message and never show it again"
-msgstr "Ukryj wiadomość i nie pokazuj ponownie"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-"<html>Potwierdź usunięcie <strong>1 obiektu</strong> z <strong>1 "
-"relacji</strong>.</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>Potwierdź usunięcie <strong>1  obiektu</strong> z <strong>{0} "
-"relacji</strong>.</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>Potwierdź usunięcie <strong>{0} obiektów</strong> z <strong>{1} "
-"relacji</strong>.</html>"
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] "Usuwanie {0} obiektu"
-msgstr[1] "Usuwanie {0} obiektów"
-msgstr[2] "Usuwanie {0} obiektów"
-
-msgid "Delete objects"
-msgstr "Usuwa obiekty"
-
-msgid "To delete"
-msgstr "Do usunięcia"
-
-msgid "From Relation"
-msgstr "Z relacji"
-
-msgid "Pos."
-msgstr "Pozycja"
+msgid " ({0})"
+msgstr " ({0})"
 
-msgid "Role"
-msgstr "Rola"
+msgid "{0} completed in {1}"
+msgstr "zakończono {0} z {1}"
 
-msgid "Click to close the dialog and remove the object from the relations"
-msgstr "Kliknij aby zamknąć i usunąć obiekty z relacji"
+msgid "Enlarge"
+msgstr "Powiększ"
 
-msgid "Click to close the dialog and to abort deleting the objects"
-msgstr "Kliknij aby zamknąć i anulować usuwanie obiektów"
+msgid "Shrink"
+msgstr "Zmniejsz"
 
 msgid ""
 "<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
@@ -5699,6 +5783,9 @@ msgstr "Zachowaj ich stan usunięcia"
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr "Rola"
+
 msgid "Primitive"
 msgstr "Element"
 
@@ -5974,6 +6061,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr "Zastosuj tę rolę do wszystkich członków"
 
+msgid "Pos."
+msgstr "Pozycja"
+
 msgid "Orig. Way"
 msgstr "Oryg. linia"
 
@@ -6125,6 +6215,48 @@ msgstr "Rozwiąż konflikty"
 msgid "Resolve conflicts for ''{0}''"
 msgstr "Rozwiąż konflikty dla \"{0}\""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+"<html>Potwierdź usunięcie <strong>1 obiektu</strong> z <strong>1 "
+"relacji</strong>.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Potwierdź usunięcie <strong>1  obiektu</strong> z <strong>{0} "
+"relacji</strong>.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Potwierdź usunięcie <strong>{0} obiektów</strong> z <strong>{1} "
+"relacji</strong>.</html>"
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] "Usuwanie {0} obiektu"
+msgstr[1] "Usuwanie {0} obiektów"
+msgstr[2] "Usuwanie {0} obiektów"
+
+msgid "Delete objects"
+msgstr "Usuwa obiekty"
+
+msgid "To delete"
+msgstr "Do usunięcia"
+
+msgid "From Relation"
+msgstr "Z relacji"
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr "Kliknij aby zamknąć i usunąć obiekty z relacji"
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr "Kliknij aby zamknąć i anulować usuwanie obiektów"
+
 msgid "Filter objects and hide/disable them."
 msgstr "Filtruj obiekty i ukrywaj/blokuj je."
 
@@ -6231,8 +6363,8 @@ msgstr "Szczegółowe informacje o obiekcie"
 msgid "map style"
 msgstr "styl mapy"
 
-msgid " ({0})"
-msgstr " ({0})"
+msgid "edit counts"
+msgstr ""
 
 msgid "not in data set"
 msgstr "nie w zestawie"
@@ -6370,7 +6502,12 @@ msgstr ""
 "Uwaga: Dwa wybrane obiekty mają podobną, ale nie identyczną pamięć podręczną "
 "stylu."
 
-msgid "xml"
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "xml"
 msgstr "xml"
 
 msgid "mapcss"
@@ -6379,29 +6516,49 @@ msgstr "mapcss"
 msgid "unknown"
 msgstr "nieznany"
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
-msgstr ""
-"Wprowadź koordynaty dla nowego węzła.<br/>Możesz oddzielić długość i "
-"szerokość geograficzną spacją, przecinkiem lub średnikiem.<br/>Używaj liczb "
-"dodatnich albo liter N i E aby oznaczyć Północną i Wschodnią wartość "
-"szerokości i długości geograficznej.<br/>Dla Południowej i Zachodniej "
-"wartości koordynatu możesz wprowadzić liczby ujemne albo odpowiednio litery "
-"S i W.<br/>Wartości koordynatów mogą być w jednym z trzech "
-"formatów:<ul><li><i>stopnie</i><tt>°</tt></li><li><i>stopnie</i><tt>°"
-"</tt> <i>minuty</i><tt>'</tt></li><li><i>stopnie</i><tt>°</tt> "
-"<i>minuty</i><tt>'</tt> <i>sekundy</i><tt>&quot</tt></li></ul>Symbole "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> nie są wymagane.<br/><br/>Kilka przykładów:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
+msgstr ""
 
 msgid "Projected coordinates:"
 msgstr "Wyświetlane współrzędne:"
@@ -6448,6 +6605,12 @@ msgstr "Krycie"
 msgid "Adjust opacity of the layer."
 msgstr "Zmienia stopień krycia (przezroczystość) warstwy."
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr "Aktywuj"
 
@@ -6515,10 +6678,10 @@ msgid "Move the selected entry one row up."
 msgstr "Przenieś zaznaczony wpis o jeden wiersz do góry."
 
 msgid "Reload from file"
-msgstr "Załaduj ponownie z pliku"
+msgstr "Wczytaj ponownie z pliku"
 
 msgid "reload selected styles from file"
-msgstr "załaduj ponownie z pliku wybrane style"
+msgstr "wczytaj ponownie z pliku wybrane style"
 
 msgid "Save as..."
 msgstr "Zapisz jako..."
@@ -6577,6 +6740,12 @@ msgstr "Ustawienia stylu"
 msgid "Customize the style"
 msgstr "Dostosuj styl"
 
+msgid "Mini map"
+msgstr ""
+
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
 msgid "List of notes"
 msgstr "Lista uwag"
 
@@ -6635,15 +6804,16 @@ msgstr "ID obiektu:"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "Wprowadź ID obiektu który ma zostać pobrany"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
-"Identyfikatory obiektów mogą być rozdzielone przecinkiem lub "
-"spacją.<br/>Przykłady: {0}<br/>W przypadku różnych obiektów, sprecyzuj "
-"rodzaj obiektu w ten sposób: {1}<br/>({2} oznacza <i>węzeł</i>, {3} "
-"<i>linię</i>, i {4} <i>relację</i>)"
 
 msgid ""
 "Invalid ID list specified\n"
@@ -6673,6 +6843,9 @@ msgstr "Relacje: {0}/{1}"
 msgid "Relations: {0}"
 msgstr "Relacje: {0}"
 
+msgid "Selection"
+msgstr "Zaznaczenie"
+
 msgid "Open a selection list window."
 msgstr "Otwiera okno z listą zaznaczonych obiektów."
 
@@ -6710,7 +6883,7 @@ msgid "Always hidden"
 msgstr "Zawsze ukryte"
 
 msgid "Toggle dynamic buttons"
-msgstr ""
+msgstr "Przełącz używanie dynamicznych przycisków"
 
 msgid "Open preferences for this panel"
 msgstr "Otwórz preferencje dla tego panelu"
@@ -6765,6 +6938,12 @@ msgstr "Otwiera okno z informacją o rezultatach sprawdzania poprawności"
 msgid "Validation results"
 msgstr "Sprawdzanie poprawności"
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr "Napraw"
 
@@ -7159,6 +7338,8 @@ msgid ""
 "<html>Please enter valid date/time values to restrict<br>the query to a "
 "specific time range.</html>"
 msgstr ""
+"<html>Wpisz poprawne wartości daty/czasu żeby ograniczyć<br>zapytanie do "
+"wybranego zakresu czasu.</html>"
 
 msgid "Invalid date/time values"
 msgstr "Niepoprawna data/czas"
@@ -7337,7 +7518,7 @@ msgid "Discardable key: background"
 msgstr ""
 
 msgid "{0} ''{1}''"
-msgstr ""
+msgstr "{0} ''{1}''"
 
 msgid "{0} different"
 msgid_plural "{0} different"
@@ -7409,6 +7590,12 @@ msgstr "Przejdź do wiki OSM by uzyskać pomoc na temat tagu (F1)"
 msgid "Launch browser with wiki help for selected object"
 msgstr "Uruchom przeglądarkę ze stroną objaśnienia wybranego obiektu"
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr "Wklej wartość ze schowka"
 
@@ -7506,14 +7693,13 @@ msgstr "Ustal liczbę ostatnio dodanych tagów"
 msgid "Remember last used tags after a restart"
 msgstr "Pmiętaj ostatnio używane tagi po restarcie"
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7708,6 +7894,12 @@ msgstr "Sortuj elementy relacji"
 msgid "Relation Editor: Sort"
 msgstr "Edytor relacji: Sortowanie"
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr "Odwróć kolejność członków relacji"
 
@@ -8208,7 +8400,7 @@ msgid "Go to the JOSM help home page"
 msgstr "Idź do strony domowej pomocy JOSM"
 
 msgid "Bad location in HTML document. Exception was: {0}"
-msgstr ""
+msgstr "Nieprawidłowe położenie w dokumencie HTML. Wyjątek: {0}"
 
 msgid "Failed to open help page. The target URL is empty."
 msgstr ""
@@ -8278,6 +8470,9 @@ msgstr "Wczytywanie historii relacji {0}"
 msgid "Node {0}"
 msgstr "Węzeł {0}"
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr "Powiększ do węzła"
 
@@ -8306,13 +8501,13 @@ msgid "Changeset source"
 msgstr "Źródło zestawu zmian"
 
 msgid "Imagery used"
-msgstr ""
+msgstr "Używany zestaw zdjęć"
 
 msgid "<b>Source</b>:"
 msgstr "<b>Źródło</b>:"
 
 msgid "<b>Imagery</b>:"
-msgstr ""
+msgstr "<b>Zdjęcia</b>:"
 
 msgid ""
 "<html>Version <strong>{0}</strong> currently edited in layer ''{1}''</html>"
@@ -8325,7 +8520,7 @@ msgstr ""
 "<html>Wersja <strong>{0}</strong> stworzone na <strong>{1}</strong></html>"
 
 msgid "Changeset"
-msgstr ""
+msgstr "Zestaw zmian"
 
 msgid "Changeset info"
 msgstr "Informacje o zestawie zmian"
@@ -8457,7 +8652,7 @@ msgstr ""
 "\"Zapisz\" aby zapisać warstwę do pliku określonego po lewej.</html>"
 
 msgid "Provide a brief comment for the changes you are uploading:"
-msgstr "Dołącz krótki opis zmian, które wysyłasz do serwera:"
+msgstr "Dołącz opis zmian, które wysyłasz do serwera:"
 
 msgid "Enter an upload comment"
 msgstr "Wprowadź komentarz przesyłania"
@@ -8769,7 +8964,7 @@ msgstr[0] ""
 msgstr[1] ""
 
 msgid "Unsaved data and missing associated file"
-msgstr ""
+msgstr "Nie zapisane dane i brak skojarzonego pliku"
 
 msgid ""
 "<html>{0} layer needs saving but has an associated file<br>which cannot be "
@@ -8783,7 +8978,7 @@ msgstr[0] ""
 msgstr[1] ""
 
 msgid "Unsaved data non-writable files"
-msgstr ""
+msgstr "Nie zapisane dane do plików bez uprawnień do zapisu"
 
 msgid "Close this dialog and resume editing in JOSM"
 msgstr "Zamknij to okno i powróć do edycji w JOSM"
@@ -8847,7 +9042,7 @@ msgid ""
 msgstr "Warstwa \"{0}\" posiada zmiany które powinny być wysłane na serwer."
 
 msgid "Layer ''{0}'' has modifications which are discouraged to be uploaded."
-msgstr ""
+msgstr "Warstwa ''{0}'' zawiera zmiany które nie są zalecane do wysłania."
 
 msgid "Layer ''{0}'' has no modifications to be uploaded."
 msgstr "Warstwa \"{0}\" nie posiada zmiany które powinny być wysłane."
@@ -9260,6 +9455,108 @@ msgstr[0] "{0} obiekt do usunięcia:"
 msgstr[1] "{0} obiekty do usunięcia:"
 msgstr[2] "{0} obiektów do usunięcia:"
 
+msgid "Show Tile Info"
+msgstr "Pokaż informację kafelka"
+
+msgid "Tile Info"
+msgstr "Informacja o kafelkach"
+
+msgid "Metadata "
+msgstr "Metadane "
+
+msgid "Auto Zoom"
+msgstr "Automatyczne powiększenie"
+
+msgid "Auto load tiles"
+msgstr "Automatyczne wczytywanie kafelków"
+
+msgid "Load All Tiles"
+msgstr "Wczytaj wszystkie kafelki"
+
+msgid "Load All Error Tiles"
+msgstr "Wczytaj wszystkie błędne kafelki"
+
+msgid "Zoom to native resolution"
+msgstr "Przybliż do natywnej rozdzielczości"
+
+msgid "Change resolution"
+msgstr "Zmień rozdzielczość"
+
+msgid "Failed to create tile source"
+msgstr "Nie udało się stworzyć źródła kafelków"
+
+msgid "Show Errors"
+msgstr "Pokaż Błędy"
+
+msgid "Load Tile"
+msgstr "Ładuj kafelek"
+
+msgid "Increase zoom"
+msgstr "Powiększ"
+
+msgid "Decrease zoom"
+msgstr "Zmniejsz"
+
+msgid "Snap to tile size"
+msgstr "Dopasuj do wielkości kafelków"
+
+msgid "Flush Tile Cache"
+msgstr "Wyczyść pamięć podręczną kafelków"
+
+msgid "zoom in to load any tiles"
+msgstr "przybliż by wczytać kafelki"
+
+msgid "zoom in to load more tiles"
+msgstr "przybliż by wczytać więcej kafelków"
+
+msgid "increase zoom level to see more detail"
+msgstr "przybliż by zobaczyć więcej detali"
+
+msgid "No tiles at this zoom level"
+msgstr "Brak kafelków na tym poziomie przybliżenia"
+
+msgid "Current zoom: {0}"
+msgstr "Obecne przybliżenie: {0}"
+
+msgid "Display zoom: {0}"
+msgstr "Poziom przybliżenia: {0}"
+
+msgid "Pixel scale: {0}"
+msgstr "Skala pikselowa: {0}"
+
+msgid "Best zoom: {0}"
+msgstr "Najlepsze przybliżenie: {0}"
+
+msgid "Cache stats: {0}"
+msgstr "Statystyki bufora: {0}"
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr "Pobrano {0}/{1} kafelków"
+
+msgid "Save WMS file"
+msgstr "Zapisz plik WMS"
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+"Podkład mapy może nie być skalibrowany. Sprawdź jego przesunięcie za pomocą "
+"ścieżek GPS!"
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+
+msgid "Details..."
+msgstr "Szczegóły..."
+
+msgid "Hide this message and never show it again"
+msgstr "Ukryj wiadomość i nie pokazuj ponownie"
+
 msgid "Customize Color"
 msgstr "Dostosuj kolor"
 
@@ -9317,6 +9614,9 @@ msgstr "Zapisz plik GPX"
 msgid "Imagery fade"
 msgstr "Przezroczystość podkładu"
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr "BŁĄD"
 
@@ -9337,12 +9637,9 @@ msgstr "Wszystkie odwzorowania są obsługiwane"
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
-"Warstwa {0} nie obsługuje nowego odwzorowania {1}.\n"
-"{2}\n"
-"Zmień odwzorowanie albo usuń tę warstwę."
 
 msgid "Save Layer"
 msgstr "Zapisz warstwę"
@@ -9426,189 +9723,85 @@ msgstr ""
 msgid "Save OSM file"
 msgstr "Zapisz plik OSM"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-"{0} nie jest prawidłowym argumentem TMS. Proszę sprawdzić adres URL "
-"serwera:\n"
-"{1}"
+msgid "EPSG:4326 and Mercator projection are supported"
+msgstr "Odwzorowania EPSG:4326 i Mercator są obsługiwane"
+
+msgid "Validation errors"
+msgstr "Błędy"
+
+msgid "No validation errors"
+msgstr "Sprawdzanie poprawności przebiegło pomyślnie"
+
+msgid "Set WMS Bookmark"
+msgstr "Ustaw zakładkę WMS"
 
 msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
-"Warstwa TMS nie obsługuje odwzorowania {0}.\n"
-"{1}\n"
-"Zmień odwzorowanie albo usuń tę warstwę."
+"JOSM użyje EPSG:4326 do odpytania serwera, jednak rezultaty mogą różnic się "
+"w zależności od serwera WMS"
 
-msgid "Auto Zoom"
-msgstr "Automatyczne powiększenie"
+msgid "Correlate to GPX"
+msgstr "Koreluj do GPX"
 
-msgid "Auto load tiles"
-msgstr "Automatyczne ładowanie kafelków"
+msgid "Invalid timezone"
+msgstr "Nieprawidłowa strefa czasowa"
 
-msgid "Show Errors"
-msgstr "Pokaż Błędy"
+msgid "Invalid offset"
+msgstr "Nieprawidłowe przesunięcie"
 
-msgid "Load Tile"
-msgstr "Ładuj kafelek"
+msgid "Correlate images with GPX track"
+msgstr "Skoreluj zdjęcia ze ścieżką GPX"
 
-msgid "Show Tile Info"
-msgstr "Pokaż informację kafelka"
+msgid "Try Again"
+msgstr "Spróbuj ponownie"
 
-msgid "Load All Tiles"
-msgstr "Ładuj wszystkie kafelki"
+msgid "No images could be matched!"
+msgstr "Nie można było dopasować żadnego zdjęcia!"
 
-msgid "Load All Error Tiles"
-msgstr "Wczytaj wszystkie błędne kafelki"
+msgid "GPX Files (*.gpx *.gpx.gz)"
+msgstr "Pliki GPX (*.gpx *.gpx.gz)"
 
-msgid "Increase zoom"
-msgstr "Powiększ"
+msgid "File {0} is loaded yet under the name \"{1}\""
+msgstr "Plik {0} jest załadowany pod nazwą \"{1}\""
 
-msgid "Decrease zoom"
-msgstr "Zmniejsz"
+msgid "Error while parsing {0}"
+msgstr "Błąd podczas przetwarzania {0}"
 
-msgid "Snap to tile size"
-msgstr "Dopasuj do wielkości kafelków"
+msgid "Could not read \"{0}\""
+msgstr "Nie można odczytać \"{0}\""
 
-msgid "Flush Tile Cache"
-msgstr "Wyczyść cache kafelków"
+msgid ""
+"<html>Take a photo of your GPS receiver while it displays the "
+"time.<br>Display that photo here.<br>And then, simply capture the time you "
+"read on the photo and select a timezone<hr></html>"
+msgstr ""
+"<html>Zrób zdjęcie swojemu odbiornikowi GPS gdy wyświetla on "
+"czas.<br>Wyświetl to zdjęcie tutaj.<br>Następnie po prostu ustaw czas według "
+"zdjęcia i wybierz strefę czasową<hr></html>"
 
-msgid "zoom in to load any tiles"
-msgstr "przybliż by załadować kafelki"
+msgid "Photo time (from exif):"
+msgstr "Czas zrobienia zdjęcia (z exif):"
 
-msgid "zoom in to load more tiles"
-msgstr "przybliż by załadować więcej kafelków"
+msgid "Gps time (read from the above photo): "
+msgstr "Czas GPS (odczytany ze zdjęcia): "
 
-msgid "increase zoom level to see more detail"
-msgstr "przybliż by zobaczyć więcej detali"
+msgid "I am in the timezone of: "
+msgstr "Jestem w strefie czasowej: "
 
-msgid "No tiles at this zoom level"
-msgstr "Brak kafelków na tym poziomie przybliżenia"
+msgid "No date"
+msgstr "Brak daty"
 
-msgid "Current zoom: {0}"
-msgstr "Obecne przybliżenie: {0}"
+msgid "Open another photo"
+msgstr "Otwórz inne zdjęcie"
 
-msgid "Display zoom: {0}"
-msgstr ""
+msgid "Synchronize time from a photo of the GPS receiver"
+msgstr "Synchronizuj czas ze zdjęcia odbiornika GPS"
 
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr "Najlepsze przybliżenie: {0}"
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr "Warstwa TMS  ({0}), pobieranie w powiększeniu {1}"
-
-msgid "EPSG:4326 and Mercator projection are supported"
-msgstr "Odwzorowania EPSG:4326 i Mercator są obsługiwane"
-
-msgid "Validation errors"
-msgstr "Błędy"
-
-msgid "No validation errors"
-msgstr "Sprawdzanie poprawności przebiegło pomyślnie"
-
-msgid "Blank Layer"
-msgstr "Pusta warstwa"
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr "Pobrano {0}/{1} kafelków"
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr "Warstwa WMS ({0}), automatycznie pobrana w powiększeniu {1}"
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr "Warstwa WMS ({0}), pobrana w powiększeniu {1}"
-
-msgid "Download visible tiles"
-msgstr "Pobierz widoczne kafle"
-
-msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr "Obszar jest za duży. Przybliż lub zmień rozdzielczość"
-
-msgid "Change resolution"
-msgstr "Zmień rozdzielczość"
-
-msgid "Reload erroneous tiles"
-msgstr "Wczytaj ponownie błędne kafle"
-
-msgid "Alpha channel"
-msgstr "Kanał alfa"
-
-msgid "Automatically change resolution"
-msgstr "Automatyczna zmiana rozdzielczości"
-
-msgid "Set WMS Bookmark"
-msgstr "Ustaw zakładkę WMS"
-
-msgid "Automatic downloading"
-msgstr "Automatyczne pobieranie"
-
-msgid "Zoom to native resolution"
-msgstr "Przybliż do natywnej rozdzielczości"
-
-msgid "Supported projections are: {0}"
-msgstr "Dostępne odwzorowania to: {0}"
-
-msgid "Unsupported WMS file version; found {0}, expected {1}"
-msgstr "Nieosługiwana wersja pliku WMS; znaleziono {0}, oczekiwano {1}"
-
-msgid "Save WMS file"
-msgstr "Zapisz plik WMS"
-
-msgid "Correlate to GPX"
-msgstr "Koreluj do GPX"
-
-msgid "GPX Files (*.gpx *.gpx.gz)"
-msgstr "Pliki GPX (*.gpx *.gpx.gz)"
-
-msgid "File {0} is loaded yet under the name \"{1}\""
-msgstr "Plik {0} jest załadowany pod nazwą \"{1}\""
-
-msgid "Error while parsing {0}"
-msgstr "Błąd podczas przetwarzania {0}"
-
-msgid "Could not read \"{0}\""
-msgstr "Nie można odczytać \"{0}\""
-
-msgid ""
-"<html>Take a photo of your GPS receiver while it displays the "
-"time.<br>Display that photo here.<br>And then, simply capture the time you "
-"read on the photo and select a timezone<hr></html>"
-msgstr ""
-"<html>Zrób zdjęcie swojemu odbiornikowi GPS gdy wyświetla on "
-"czas.<br>Wyświetl to zdjęcie tutaj.<br>Następnie po prostu ustaw czas według "
-"zdjęcia i wybierz strefę czasową<hr></html>"
-
-msgid "Photo time (from exif):"
-msgstr "Czas zrobienia zdjęcia (z exif):"
-
-msgid "Gps time (read from the above photo): "
-msgstr "Czas GPS (odczytany ze zdjęcia): "
-
-msgid "I am in the timezone of: "
-msgstr "Jestem w strefie czasowej: "
-
-msgid "No date"
-msgstr "Brak daty"
-
-msgid "Open another photo"
-msgstr "Otwórz inne zdjęcie"
-
-msgid "Synchronize time from a photo of the GPS receiver"
-msgstr "Synchronizuj czas ze zdjęcia odbiornika GPS"
-
-msgid ""
-"Error while parsing the date.\n"
-"Please use the requested format"
+msgid ""
+"Error while parsing the date.\n"
+"Please use the requested format"
 msgstr ""
 "Błąd podczas przetwarzania daty.\n"
 "Proszę użyć wybranego formatu."
@@ -9658,24 +9851,9 @@ msgstr "Strefa czasowa: "
 msgid "Offset:"
 msgstr "Przesunięcie:"
 
-msgid "Correlate images with GPX track"
-msgstr "Skoreluj zdjęcia ze ścieżką GPX"
-
 msgid "Correlate"
 msgstr "Skoreluj"
 
-msgid "Invalid timezone"
-msgstr "Nieprawidłowa strefa czasowa"
-
-msgid "Invalid offset"
-msgstr "Nieprawidłowe przesunięcie"
-
-msgid "Try Again"
-msgstr "Spróbuj ponownie"
-
-msgid "No images could be matched!"
-msgstr "Nie można było dopasować żadnego zdjęcia!"
-
 msgid "No gpx selected"
 msgstr "Brak zaznaczenia gpx"
 
@@ -9748,6 +9926,8 @@ msgid ""
 "Error while parsing offset.\n"
 "Expected format: {0}"
 msgstr ""
+"Błąd parsowania offsetu.\n"
+"Oczekiwany format: {0}"
 
 msgid "Extracting GPS locations from EXIF"
 msgstr "Pobieranie lokalizacji GPS z EXIF"
@@ -9762,7 +9942,7 @@ msgid "Reading {0}..."
 msgstr "Wczytywanie {0}..."
 
 msgid "Unable to get canonical path for directory {0}\n"
-msgstr ""
+msgstr "Nie udało się pobrać kanonicznej postaci ścieżki do katalogu {0}\n"
 
 msgid "Scanning directory {0}"
 msgstr "Przeglądanie katalogu {0}"
@@ -9835,7 +10015,7 @@ msgid "Delete File from disk"
 msgstr "Usuń plik z dysku"
 
 msgid "Copy image path"
-msgstr ""
+msgstr "Skopiuj ścieżkę obrazka"
 
 msgid "Next"
 msgstr "Następny"
@@ -9893,9 +10073,6 @@ msgstr ""
 "\n"
 "Czas GPS: {0}"
 
-msgid "JPEG images (*.jpg)"
-msgstr "Pliki JPEG (*.jpg)"
-
 msgid "Show thumbnails"
 msgstr "Pokaż miniaturki"
 
@@ -9964,9 +10141,6 @@ msgstr "metry"
 msgid "Maximum area per request:"
 msgstr "Maksymalny obszar na zapytanie:"
 
-msgid "sq km"
-msgstr "km kw."
-
 msgid "Download near:"
 msgstr "Pobierz w pobliżu:"
 
@@ -10443,7 +10617,7 @@ msgid "Close the dialog and accept the Access Token"
 msgstr "Zamknij okno i zaakceptuj klucz dostępu"
 
 msgid "Failed to cancel running OAuth operation"
-msgstr ""
+msgstr "Nie udało się anulować wykonywanej operacji OAuth"
 
 msgid "Retrieving OAuth Request Token from ''{0}''"
 msgstr "Pobieranie Żetonu Żądania OAuth z ''{0}''"
@@ -10601,13 +10775,15 @@ msgid "Click to retrieve an Access Token"
 msgstr ""
 
 msgid "Testing OAuth Access Token"
-msgstr ""
+msgstr "Sprawdzanie tokenu dostępowego OAuth"
 
 msgid "Retrieving user details with Access Token Key ''{0}'' was rejected."
 msgstr ""
 
 msgid "Retrieving user details with Access Token Key ''{0}'' was forbidden."
 msgstr ""
+"Pobieranie danych użytkownika przy użyciu tokenu dostępowego OAuth \"{0}\" "
+"zostało zabronione przez serwer."
 
 msgid ""
 "<html>Successfully used the Access Token ''{0}'' to<br>access the OSM server "
@@ -10637,7 +10813,7 @@ msgid ""
 msgstr ""
 
 msgid "Token allows restricted access"
-msgstr ""
+msgstr "Token umożliwia ograniczony dostęp"
 
 msgid ""
 "<html>Failed to retrieve information about the current user from the OSM "
@@ -10669,16 +10845,16 @@ msgstr "Zamknij okno ustawień i odrzuć zmiany w ustawieniach"
 msgid "Save the preferences and close the dialog"
 msgstr "Zapisuje ustawienia i zamyka okno"
 
-msgid "Download plugins"
-msgstr "Pobierz wtyczki"
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 "Należy ponownie uruchomić program JOSM, aby niektóre ustawienia stały się "
 "aktywne."
 
 msgid "Would you like to restart now?"
-msgstr "Czy chcesz zrestartować teraz?"
+msgstr "Uruchomić ponownie?"
+
+msgid "Download plugins"
+msgstr "Pobierz wtyczki"
 
 msgid "Icon paths:"
 msgstr "Ścieżki ikon:"
@@ -10995,7 +11171,7 @@ msgid "Start of track (will always do this if no other markers available)."
 msgstr ""
 
 msgid "Show or hide the audio menu entry on the main menu bar."
-msgstr ""
+msgstr "Pokazuj lub ukryj menu dźwięku w głównym pasku menu."
 
 msgid ""
 "Display a moving icon representing the point on the synchronized track where "
@@ -11032,7 +11208,7 @@ msgid "Forward/back time (seconds)"
 msgstr "Przewiń w przód/tył (sekundy)"
 
 msgid "The amount by which the speed is multiplied for fast forwarding"
-msgstr ""
+msgstr "Mnożnik prędkości stosowany podczas przewijania"
 
 msgid "Fast forward multiplier"
 msgstr "Szybkość przewijania (mnożnik)"
@@ -11511,6 +11687,21 @@ msgstr "Pokaż obszar"
 msgid "No bounding box was found for this layer."
 msgstr "Brak obszaru edycji dla tej warstwy"
 
+msgid "1. Enter getCapabilities URL"
+msgstr ""
+
+msgid "2. Enter name for this layer"
+msgstr ""
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr "przyciemnienia podkładu mapy"
 
@@ -11529,6 +11720,18 @@ msgstr "mocne"
 msgid "Sharpen (requires layer re-add): "
 msgstr "Wyostrzenie (wymaga ponownego dodania warstwy): "
 
+msgid "Tile cache directory: "
+msgstr "Katalog buforowania kafelków: "
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr "Maksymalna ilość obiektów w pamięci cache: "
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr "Właściwości podkładów"
 
@@ -11550,6 +11753,9 @@ msgstr "Dostawcy zdjęć"
 msgid "Offset bookmarks"
 msgstr "Zakładki przesunięcia"
 
+msgid "Cache contents"
+msgstr "Zawartość cache"
+
 msgid "Imagery Background: Default"
 msgstr "Podkład: domyślny"
 
@@ -11587,13 +11793,10 @@ msgid "Imagery URL (Default)"
 msgstr "URL podkładu (domyślne)"
 
 msgid "EULA license URL not available: {0}"
-msgstr ""
+msgstr "Adres URL licencji EULA nie jest dostępny: {0}"
 
 msgid "Malformed URL for the EULA licence: {0}"
-msgstr ""
-
-msgid "Projection"
-msgstr "Odwzorowanie"
+msgstr "Niepoprawny adres URL do licencji EULA: {0}"
 
 msgid "Layer"
 msgstr "Warstwa"
@@ -11619,17 +11822,11 @@ msgstr "Maksymalny poziom przybliżenia: "
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr "Katalog buforowania kafelków: "
-
 msgid "Maximum concurrent downloads: "
-msgstr ""
+msgstr "Maksymalna liczba jednoczesnych pobrań: "
 
 msgid "Maximum concurrent downloads per host: "
-msgstr ""
-
-msgid "Maximum elements in disk cache: "
-msgstr ""
+msgstr "Maksymalna liczba jednoczesnych pobrań z jednego seerwera: "
 
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
@@ -11638,20 +11835,11 @@ msgstr ""
 "Ta warstwa nie obsługuje żadnych odwzorowań z JOSM,\n"
 "więc nie możesz jej użyć. Ta wiadomość nie będzie pokazana ponownie."
 
-msgid "Downloader:"
-msgstr "Pobieracz:"
-
 msgid "Simultaneous connections:"
 msgstr "Jednoczesne połączenia:"
 
-msgid "Overlap tiles"
-msgstr "Nakładaj kafelki"
-
-msgid "% of east:"
-msgstr "% na wschód:"
-
-msgid "% of north:"
-msgstr "% na północ:"
+msgid "Tile size:"
+msgstr "Wielkość kafelka:"
 
 msgid "Auto save enabled"
 msgstr "Aktywne automatyczne zapisywanie"
@@ -11770,8 +11958,8 @@ msgid ""
 "Could not read tagging preset source: {0}\n"
 "Do you want to keep it?"
 msgstr ""
-"Nie mogłem odczytać źródła szablonu tagowania: {0}\n"
-"Czy chcesz go zatrzymać?"
+"Nie można odczytać źródła szablonu tagowania: {0}\n"
+"Zatrzymać go?"
 
 msgid "Could not read tagging preset source {0}"
 msgstr "Nie mogłem odczytać źródła szablonu tagowania {0}"
@@ -12209,10 +12397,14 @@ msgstr "Odinstaluj..."
 
 msgid "Install JOSM localhost certificate to system/browser root keystores"
 msgstr ""
+"Zainstaluj lokalny certyfikat JOSM w magazynie certyfikatów twojego "
+"systemu/przeglądarki"
 
 msgid ""
 "Uninstall JOSM localhost certificate from system/browser root keystores"
 msgstr ""
+"Odinstaluj lokalny certyfikat JOSM z magazynu certyfikatów twojego "
+"systemu/przeglądarki"
 
 msgid "Certificate:"
 msgstr "Certyfikat:"
@@ -12322,7 +12514,7 @@ msgid "Check interval (minutes):"
 msgstr "Sprawdzaj co (w minutach):"
 
 msgid "Max age for closed notes (days):"
-msgstr ""
+msgstr "Maksymalny wiek zamkniętych uwag (w dniach):"
 
 msgid ""
 "Specifies the number of days a note needs to be closed to no longer be "
@@ -12482,19 +12674,19 @@ msgid "Active rules:"
 msgstr "Aktywne reguły:"
 
 msgid "Add a new rule by entering filename or URL"
-msgstr ""
+msgstr "Dodaj nową regułę podając nazwę pliku lub adres URL"
 
 msgid "New rule entry:"
-msgstr ""
+msgstr "Nowa reguła:"
 
 msgid "Remove the selected rules from the list of active rules"
-msgstr ""
+msgstr "Usuń wybrane reguły z listy aktywnych reguł"
 
 msgid "Edit the filename or URL for the selected active rule"
 msgstr ""
 
 msgid "Add the selected available rules to the list of active rules"
-msgstr ""
+msgstr "Dodaj wybrane reguły do listy aktywnych reguł"
 
 msgid "Reloads the list of available rules from ''{0}''"
 msgstr ""
@@ -12535,10 +12727,10 @@ msgid "Checks for errors on highways"
 msgstr "Szuka błędów w systemie dróg"
 
 msgid "Multiple values"
-msgstr ""
+msgstr "Wiele wartości"
 
 msgid "Checks for wrong multiple values"
-msgstr ""
+msgstr "Sprawdza istnienie błędnych wielu wartości"
 
 msgid "Numeric values"
 msgstr "Wartości numeryczne"
@@ -12650,6 +12842,14 @@ msgstr "Zastosuj szablon"
 msgid "New relation"
 msgstr "Nowa relacja"
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] "Zmień {0} obiekt"
@@ -12759,6 +12959,9 @@ msgstr "Otwiera okno wyszukiwania szablonów"
 msgid "Search presets"
 msgstr "Szukaj w szablonach"
 
+msgid "Presets"
+msgstr "Szablony"
+
 msgid "Search for objects by preset"
 msgstr "Szukaj obiekty według szablonu"
 
@@ -13026,6 +13229,9 @@ msgstr "<html>Nie można odczytać plików.<br>Błąd w:<br>{0}</html>"
 msgid "GeoJSON Files"
 msgstr "Pliki GeoJSON"
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr "Warstwa ''{0}'' nie jest wspierana"
 
@@ -13299,7 +13505,7 @@ msgid "Prolog of OsmChange document not written yet. Please write first."
 msgstr ""
 
 msgid "OsmChange File"
-msgstr ""
+msgstr "Plik OsmChange"
 
 msgid "File ''{0}'' does not exist."
 msgstr "Plik ''{0}'' nie istnieje."
@@ -13308,7 +13514,7 @@ msgid "No data found in file {0}."
 msgstr "Nie znaleziono danych w pliku {0}."
 
 msgid "Open OsmChange file"
-msgstr ""
+msgstr "Otwórz plik OsmChange"
 
 msgid "Unsupported version: {0}"
 msgstr "Nieobsługiwana wersja: {0}"
@@ -13581,6 +13787,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr "Pliki WMS (*.wms)"
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr "Nieosługiwana wersja pliku WMS; znaleziono {0}, oczekiwano {1}"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -13678,7 +13887,7 @@ msgid "Remote Control has been asked to create a new node."
 msgstr ""
 
 msgid "There is no layer opened to add node"
-msgstr ""
+msgstr "Brak otwartej warstwy do dodawania węzłów"
 
 msgid "Remote Control has been asked to create a new way."
 msgstr ""
@@ -13687,7 +13896,7 @@ msgid "Invalid coordinates: {0}"
 msgstr "Nieprawidłowe współrzędne: {0}"
 
 msgid "There is no layer opened to add way"
-msgstr ""
+msgstr "Brak otwartej warstwy do dodawania linii"
 
 msgid "Add way"
 msgstr "Dodaj linię"
@@ -13703,7 +13912,7 @@ msgid ""
 msgstr ""
 
 msgid "Remote imagery"
-msgstr ""
+msgstr "Zdalne zdjęcia"
 
 msgid "Remote Control has been asked to import data from the following URL:"
 msgstr ""
@@ -13718,7 +13927,7 @@ msgid "The longitudes must be between {0} and {1}"
 msgstr "Długości geograficzne muszą być pomiędzy {0} a {1}"
 
 msgid "The minima must be less than the maxima"
-msgstr ""
+msgstr "Minimum musi być mniejsze niż maksimum"
 
 msgid "Remote Control has been asked to load the following data:"
 msgstr ""
@@ -13735,7 +13944,7 @@ msgid "Remote Control has been asked to open a local file."
 msgstr ""
 
 msgid "Do you want to allow this?"
-msgstr "Czy chcesz na to zezwolić?"
+msgstr "Zezwolić na to?"
 
 msgid "Confirm Remote Control action"
 msgstr ""
@@ -13995,6 +14204,19 @@ msgstr[2] ""
 "Wtyczka {0} wymaga {1} wtyczek które nie zostały znalezione. Brakujące "
 "wtyczki to:"
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -14537,9 +14759,9 @@ msgid ""
 "large.<br>Either request a smaller area or use an export file provided by "
 "the OSM community."
 msgstr ""
-"Obszar, który próbowałeś pobrać był zbyt lub same żądanie pobrania były zbyt "
-"duże.<br>Albo spróbuj pobrać mniejszy obszar albo użyj wyeksportowanego "
-"pliku udostępnionego przez społeczność OSM."
+"Obszar, który próbowałeś pobrać lub same żądanie pobrania były zbyt "
+"duże.<br>Spróbuj pobrać mniejszy obszar albo użyj wyeksportowanego pliku "
+"udostępnionego przez społeczność OSM."
 
 msgid "<br>Error message(untranslated): {0}"
 msgstr "<br>Treść błędu (nieprzetłumaczone): {0}"
@@ -15053,6 +15275,9 @@ msgstr "Aktualizuj"
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr "Widok"
+
 msgid "Blue:"
 msgstr "Niebieski:"
 
@@ -15092,8 +15317,8 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
-msgstr "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
+msgstr ""
 
 msgid "skobbler"
 msgstr ""
@@ -15104,9 +15329,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr "OpenCycleMap"
 
@@ -15215,6 +15437,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -15228,12 +15453,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -15270,10 +15501,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
+msgstr ""
+
+msgid "Geodatastyrelsen DTK Kort25"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -15300,6 +15537,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -15324,7 +15564,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -15339,6 +15579,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -15351,12 +15594,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -15377,6 +15614,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -15409,10 +15649,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -15442,6 +15679,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -15457,154 +15700,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
-msgstr ""
+msgid "Będzin: Budynki (buildings)"
+msgstr "Będzin: Budynki"
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
-msgstr ""
+msgid "Bytom: Budynki (buildings)"
+msgstr "Bytom: Budynki"
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
+msgstr "Chorzów: Budynki"
+
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Budynki (buildings)"
+msgstr "Gliwice: Budynki"
+
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
-msgstr "Będzin: Budynki"
+msgid "Powiat lubaczowski: Budynki (buildings)"
+msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
-msgstr "Bytom: Budynki"
+msgid "Powiat poznański: Budynki (buildings)"
+msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
-msgstr "Chorzów: Budynki"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
-msgstr "Gliwice: Budynki"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Przemyśl: Budynki (buildings)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -15619,9 +15868,18 @@ msgstr "Rzeszów: Budynki"
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -15751,6 +16009,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -15766,7 +16039,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -16092,6 +16365,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -16181,11 +16459,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -16244,7 +16517,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -16259,9 +16532,6 @@ msgstr "Scala nakładające się fragmenty linii."
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 "Pozwala na dodanie tagów do atrybutów wszystkich wybranych obiektów w danym "
@@ -16354,6 +16624,15 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr "Ta wtyczka upraszcza mapowanie i edycję tras transportu publicznego."
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+"Wyświetlaj przystanki wybranych tras transportu publicznego jako graf"
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr "Panel edycji oraz tworzenia relacji/wielokątów złożonych"
 
@@ -16392,6 +16671,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr "Narzędzia i ułatwienia edycji dla OpenSeaMap"
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -16473,9 +16755,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -16592,7 +16871,7 @@ msgstr ""
 
 msgctxt "riding"
 msgid "sports_centre"
-msgstr ""
+msgstr "centrum sportowe"
 
 msgctxt "riding"
 msgid "stadium"
@@ -16875,6 +17154,14 @@ msgid "basketball"
 msgstr "koszykówka"
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr "boules"
 
@@ -16899,10 +17186,6 @@ msgid "cricket"
 msgstr "krykiet"
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr "krokiet"
 
@@ -16919,6 +17202,10 @@ msgid "equestrian"
 msgstr "jeździectwo"
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr "hokej na trawie"
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -16935,14 +17222,26 @@ msgid "handball"
 msgstr "piłka ręczna"
 
 msgctxt "sport"
-msgid "hockey"
-msgstr "hokej"
-
-msgctxt "sport"
 msgid "horse_racing"
 msgstr "wyścigi konne"
 
 msgctxt "sport"
+msgid "ice_hockey"
+msgstr "hokej na lodzie"
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
+msgstr ""
+
+msgctxt "sport"
 msgid "motor"
 msgstr "motorowe"
 
@@ -16955,6 +17254,10 @@ msgid "racquet"
 msgstr "racket"
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -16967,6 +17270,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr "strzelectwo"
 
@@ -16994,6 +17301,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr "tenis"
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr "Opłata"
 
@@ -17083,50 +17402,54 @@ msgid "Symbol description"
 msgstr "Opis symboli"
 
 msgid "broadleaved"
-msgstr ""
+msgstr "liściasty"
 
 msgid "needleleaved"
-msgstr ""
+msgstr "iglasty"
 
 msgid "mixed"
 msgstr "mieszany"
 
 msgid "leafless"
-msgstr ""
+msgstr "bezliściowy"
 
 msgid "Cycle"
-msgstr ""
+msgstr "Cykl"
 
 msgid "deciduous"
-msgstr "liściasty"
+msgstr "gubiące liście"
 
 msgid "Plants that are leafless for a certain period during the year."
-msgstr ""
+msgstr "Rośliny które gubią liście na pewien okres czasu w ciągu roku."
 
 msgid "evergreen"
-msgstr ""
+msgstr "zawsze zielone"
 
 msgid "Plants that are never entirely without green foliage."
-msgstr ""
+msgstr "Rośliny które nie zrzucają nigdy zielonego listowia"
 
 msgid "semi_deciduous"
-msgstr ""
+msgstr "częściowo gubiące"
 
 msgid ""
 "Plants that lose their foliage for a very short period, when old leaves fall "
 "off and new foliage growth is starting."
 msgstr ""
+"Rośliny które zrzucają swoje listowie na bardzo krótki okres, kiedy stare "
+"liście odpadają i nowe zaczynają rosnąć"
 
 msgid "semi_evergreen"
-msgstr ""
+msgstr "częsciowo zawsze zielone"
 
 msgid ""
 "Plants that lose most, but not all, of their foliage for a fraction of the "
 "year."
 msgstr ""
+"Rośliny które gubią większość, ale nie wszystkie liście na pewien czas w "
+"roku."
 
 msgid "Habitat with evergreen and deciduous vegetation."
-msgstr ""
+msgstr "Środowisko z zawsze zielonymi i gubiącymi liście roślinami."
 
 msgid "bahai"
 msgstr "bahaizm"
@@ -17329,7 +17652,7 @@ msgid "culvert"
 msgstr "przepust"
 
 msgid "Water access rules:"
-msgstr ""
+msgstr "Dostęp dla żeglugi:"
 
 msgid "Ship"
 msgstr "Statek"
@@ -17344,7 +17667,7 @@ msgid "Motorboat"
 msgstr "Motorówka"
 
 msgid "Canoe"
-msgstr "Kanadyjka"
+msgstr "Kajak"
 
 msgid "Streets"
 msgstr "Sieć drogowa"
@@ -17356,13 +17679,13 @@ msgid "Motorway Link"
 msgstr "Autostrada - dojazd"
 
 msgid "Trunk"
-msgstr "Droga ekspresowa"
+msgstr "Droga główna"
 
 msgid "Motorroad"
 msgstr "Tylko silnikowe"
 
 msgid "Trunk Link"
-msgstr "Droga ekspresowa - dojazd"
+msgstr "Droga główna - dojazd"
 
 msgid "Primary"
 msgstr "Droga krajowa"
@@ -17385,6 +17708,9 @@ msgstr "Droga trzeciorzędna - łącznik"
 msgid "Unclassified"
 msgstr "Droga czwartorzędna"
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr "Zatoki dla wymijania"
 
@@ -17407,7 +17733,7 @@ msgstr "serwisowa"
 
 msgctxt "Highway"
 msgid "unclassified"
-msgstr ""
+msgstr "droga czwartorzędna"
 
 msgctxt "Highway"
 msgid "path"
@@ -17418,7 +17744,7 @@ msgid "cycleway"
 msgstr "droga dla rowerów"
 
 msgid "Vehicle access"
-msgstr ""
+msgstr "Dostęp dla pojazdów"
 
 msgid "Oneway for bicycle"
 msgstr "Jednokierunkowa dla rowerów"
@@ -17430,7 +17756,7 @@ msgid "Pedestrian"
 msgstr "Ciąg pieszy"
 
 msgid "Area"
-msgstr "obszar"
+msgstr "Obszar"
 
 msgid "Service"
 msgstr "Droga serwisowa"
@@ -17461,6 +17787,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr "Tor wyścigowy"
+
 msgid "Road (Unknown Type)"
 msgstr "Droga (nieokreślona)"
 
@@ -17469,71 +17798,71 @@ msgstr "W budowie"
 
 msgctxt "Highway"
 msgid "motorway"
-msgstr ""
+msgstr "autostrada"
 
 msgctxt "Highway"
 msgid "motorway_link"
-msgstr ""
+msgstr "autostrada - dojazd"
 
 msgctxt "Highway"
 msgid "trunk"
-msgstr ""
+msgstr "droga główna"
 
 msgctxt "Highway"
 msgid "trunk_link"
-msgstr ""
+msgstr "droga główna - dojazd"
 
 msgctxt "Highway"
 msgid "primary"
-msgstr ""
+msgstr "droga krajowa"
 
 msgctxt "Highway"
 msgid "primary_link"
-msgstr ""
+msgstr "droga krajowa - łącznik"
 
 msgctxt "Highway"
 msgid "secondary"
-msgstr ""
+msgstr "droga wojewódzka"
 
 msgctxt "Highway"
 msgid "secondary_link"
-msgstr ""
+msgstr "droga wojewódzka - łącznik"
 
 msgctxt "Highway"
 msgid "tertiary"
-msgstr ""
+msgstr "droga trzeciorzędna"
 
 msgctxt "Highway"
 msgid "tertiary_link"
-msgstr ""
+msgstr "droga trzeciorzędna - łącznik"
 
 msgctxt "Highway"
 msgid "bus_guideway"
-msgstr ""
+msgstr "tor autobusowy"
 
 msgctxt "Highway"
 msgid "bridleway"
-msgstr ""
+msgstr "ścieżka do jazdy konnej"
 
 msgctxt "Highway"
 msgid "living_street"
-msgstr ""
+msgstr "strefa zamieszkania"
 
 msgctxt "Highway"
 msgid "pedestrian"
-msgstr ""
+msgstr "ciąg pieszy"
 
 msgctxt "Highway"
 msgid "track"
-msgstr ""
+msgstr "droga polna lub leśna"
 
 msgctxt "Highway"
 msgid "footway"
-msgstr ""
+msgstr "ścieżka dla pieszych"
 
 msgctxt "Highway"
 msgid "steps"
-msgstr ""
+msgstr "schody"
 
 msgid "Junction"
 msgstr "Skrzyżowanie"
@@ -17592,7 +17921,7 @@ msgid "High-occupancy vehicles (hov)"
 msgstr "Pojazdy z wieloma pasażerami"
 
 msgid "Public Service Vehicles (psv)"
-msgstr "Transport publiczny"
+msgstr "transport publiczny"
 
 msgid "Tourist buses"
 msgstr "Autokary turystyczne"
@@ -17643,7 +17972,7 @@ msgid "Ways"
 msgstr "Drogi"
 
 msgid "Track"
-msgstr "Droga gruntowa"
+msgstr "Droga polna lub leśna"
 
 msgid "Tracktype"
 msgstr "Typ drogi"
@@ -17951,7 +18280,7 @@ msgid "Pedestrian Crossing"
 msgstr "Przejście dla pieszych"
 
 msgid "In case of traffic signals:"
-msgstr ""
+msgstr "W przypadku sygnalizacji świetlnej:"
 
 msgid "Traffic Calming"
 msgstr "Środek uspokojenia ruchu"
@@ -17998,6 +18327,12 @@ msgstr "Fotoradar"
 msgid "Traffic Mirror"
 msgstr "Lustro drogowe"
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr "Nazwane skrzyżowanie"
@@ -18006,6 +18341,8 @@ msgid ""
 "Used in some countries for a named road junction who’s name serves for local "
 "orientation."
 msgstr ""
+"Używane w niektórych krajach dla nazwanych skrzyżowań, które służą jako "
+"punkt orientacyjny"
 
 msgid "Elevator"
 msgstr "Winda"
@@ -18083,7 +18420,7 @@ msgid "barbed_wire"
 msgstr "drut kolczasty"
 
 msgid "chain_link"
-msgstr ""
+msgstr "siatka z drutu"
 
 msgid "electric"
 msgstr "energia elektryczna"
@@ -18092,7 +18429,7 @@ msgid "pole"
 msgstr "słup"
 
 msgid "split_rail"
-msgstr ""
+msgstr "bale drewniane"
 
 msgid "wire"
 msgstr "drut"
@@ -18187,9 +18524,14 @@ msgstr "Kolumnada"
 msgid "Avalanche Protector"
 msgstr "Ochrona przed lawinami"
 
+msgctxt "main group"
 msgid "Water"
 msgstr "Woda"
 
+msgctxt "sub group"
+msgid "Water"
+msgstr "Obiekty wodne"
+
 msgid "Drain"
 msgstr "Odpływ"
 
@@ -18232,19 +18574,23 @@ msgid "Culvert"
 msgstr "Przepust"
 
 msgid "Basin"
-msgstr "Zbiornik wodny"
+msgstr "Zbiornik wód deszczowych"
 
 msgid "Reservoir"
 msgstr "Sztuczne jezioro"
 
 msgid "Covered Reservoir"
-msgstr "Zakryte sztuczne jezioro"
+msgstr "Zakryty sztuczny zbiornik wody"
+
+msgctxt "natural"
+msgid "Water"
+msgstr "Zbiornik wodny"
 
 msgid "A body of standing water, such as a lake or pond."
 msgstr "Woda stojąca, na przykład jezioro lub staw."
 
 msgid "Water Body"
-msgstr "Woda stojąca"
+msgstr "Rodzaj"
 
 msgid "canal"
 msgstr "kanał"
@@ -18381,62 +18727,176 @@ msgstr ""
 msgid "public"
 msgstr "publiczny"
 
-msgid "Pier"
-msgstr "Molo"
+msgid "Marine Fuel"
+msgstr "Stacja paliw dla łodzi"
 
-msgid "Lock Gate"
-msgstr "Wrota śluzy"
+msgid "Agip"
+msgstr "Agip"
 
-msgid "Turning Point"
-msgstr "Punkt zawracania"
+msgid "Aral"
+msgstr "Aral"
 
-msgid "Slipway"
-msgstr "Pochylnia"
+msgid "Avia"
+msgstr "Avia"
 
-msgid "Boatyard"
-msgstr "Stocznia"
+msgid "BP"
+msgstr "BP"
 
-msgid "Dock"
-msgstr "Dok"
+msgid "Chevron"
+msgstr "Chevron"
 
-msgid "Transport"
-msgstr "Transport"
+msgid "Citgo"
+msgstr "Citgo"
 
-msgid "Railway"
-msgstr "Kolej"
+msgid "Eni"
+msgstr ""
 
-msgid "Rail"
-msgstr "Tor"
+msgid "Esso"
+msgstr "Esso"
 
-msgid "main"
-msgstr "główny"
+msgid "Exxon"
+msgstr "Exxon"
 
-msgid "branch"
-msgstr "gałąź"
+msgid "Gulf"
+msgstr "Gulf"
 
-msgid "industrial"
-msgstr "przemysł"
+msgid "Mobil"
+msgstr "Mobil"
 
-msgid "military"
-msgstr "wojsko"
+msgid "OMV"
+msgstr "OMV"
 
-msgid "tourism"
-msgstr "turystyka"
+msgid "Petro-Canada"
+msgstr "Petro-Canada"
 
-msgid "freight"
-msgstr "fracht"
+msgid "Pioneer"
+msgstr "Pioneer"
 
-msgid "Narrow Gauge Rail"
-msgstr "Kolej wąskotorowa"
+msgid "Q8"
+msgstr "Q8"
 
-msgid "Monorail"
-msgstr "Tor jednoszynowy"
+msgid "Repsol"
+msgstr "Repsol"
 
-msgid "Preserved"
-msgstr "Kolej retro"
+msgid "Shell"
+msgstr "Shell"
 
-msgid "Light Rail"
-msgstr "Trasa szybkiego tramwaju"
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr "Statoil"
+
+msgid "Sunoco"
+msgstr "Sunoco"
+
+msgid "Tamoil"
+msgstr "Tamoil"
+
+msgid "Texaco"
+msgstr "Texaco"
+
+msgid "Total"
+msgstr "Total"
+
+msgid "Independent"
+msgstr "Independent"
+
+msgid "Fuel types:"
+msgstr "Rodzaje paliwa:"
+
+msgid "Diesel"
+msgstr "Diesel (olej napędowy)"
+
+msgid "Bio Diesel"
+msgstr "Biodiesel"
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr "Benzyna bezołowiowa 91"
+
+msgid "Octane 92"
+msgstr "Benzyna bezołowiowa 92"
+
+msgid "Octane 95"
+msgstr "Benzyna bezołowiowa 95"
+
+msgid "Octane 98"
+msgstr "Benzyna bezołowiowa 98"
+
+msgid "Octane 100"
+msgstr "Benzyna bezołowiowa 100"
+
+msgid "E10 (10% Ethanol mix)"
+msgstr "E10 (bioetanol 10%)"
+
+msgid "E85 (85% Ethanol mix)"
+msgstr "E85 (bioetanol 85%)"
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr "Gaz LPG"
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr "Gaz CNG (sprężony gaz ziemny)"
+
+msgid "Pier"
+msgstr "Molo"
+
+msgid "Lock Gate"
+msgstr "Wrota śluzy"
+
+msgid "Turning Point"
+msgstr "Punkt zawracania"
+
+msgid "Slipway"
+msgstr "Pochylnia"
+
+msgid "Boatyard"
+msgstr "Stocznia"
+
+msgid "Dock"
+msgstr "Dok"
+
+msgid "Transport"
+msgstr "Transport"
+
+msgid "Railway"
+msgstr "Kolej"
+
+msgid "Rail"
+msgstr "Tor"
+
+msgid "main"
+msgstr "główny"
+
+msgid "branch"
+msgstr "gałąź"
+
+msgid "industrial"
+msgstr "przemysł"
+
+msgid "military"
+msgstr "wojsko"
+
+msgid "tourism"
+msgstr "turystyka"
+
+msgid "freight"
+msgstr "fracht"
+
+msgid "Narrow Gauge Rail"
+msgstr "Kolej wąskotorowa"
+
+msgid "Monorail"
+msgstr "Tor jednoszynowy"
+
+msgid "Preserved"
+msgstr "Kolej retro"
+
+msgid "Light Rail"
+msgstr "Trasa szybkiego tramwaju"
 
 msgid "Subway"
 msgstr "Metro"
@@ -18497,6 +18957,9 @@ msgstr "Kozioł oporowy"
 msgid "Railway Switch"
 msgstr "Zwrotnica"
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr "Koleje linowe"
 
@@ -18620,78 +19083,6 @@ msgstr "Wjazd na parking"
 msgid "Fuel"
 msgstr "Stacja benzynowa"
 
-msgid "Agip"
-msgstr "Agip"
-
-msgid "Aral"
-msgstr "Aral"
-
-msgid "Avia"
-msgstr "Avia"
-
-msgid "BP"
-msgstr "BP"
-
-msgid "Chevron"
-msgstr "Chevron"
-
-msgid "Citgo"
-msgstr "Citgo"
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr "Esso"
-
-msgid "Exxon"
-msgstr "Exxon"
-
-msgid "Gulf"
-msgstr "Gulf"
-
-msgid "Mobil"
-msgstr "Mobil"
-
-msgid "OMV"
-msgstr "OMV"
-
-msgid "Petro-Canada"
-msgstr "Petro-Canada"
-
-msgid "Pioneer"
-msgstr "Pioneer"
-
-msgid "Q8"
-msgstr "Q8"
-
-msgid "Repsol"
-msgstr "Repsol"
-
-msgid "Shell"
-msgstr "Shell"
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr "Statoil"
-
-msgid "Sunoco"
-msgstr "Sunoco"
-
-msgid "Tamoil"
-msgstr "Tamoil"
-
-msgid "Texaco"
-msgstr "Texaco"
-
-msgid "Total"
-msgstr "Total"
-
-msgid "Independent"
-msgstr "Independent"
-
 msgid "With shop"
 msgstr "Ze sklepem"
 
@@ -18701,51 +19092,12 @@ msgstr "sklep osiedlowy"
 msgid "kiosk"
 msgstr "kiosk"
 
-msgid "Fuel types:"
-msgstr "Rodzaje paliwa:"
-
-msgid "Diesel"
-msgstr "Diesel (olej napędowy)"
-
-msgid "Bio Diesel"
-msgstr "Biodiesel"
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr "Ultimate Diesel (GTL)"
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr "Diesel dla ciężarówek"
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr "Benzyna bezołowiowa 91"
-
-msgid "Octane 92"
-msgstr "Benzyna bezołowiowa 92"
-
-msgid "Octane 95"
-msgstr "Benzyna bezołowiowa 95"
-
-msgid "Octane 98"
-msgstr "Benzyna bezołowiowa 98"
-
-msgid "Octane 100"
-msgstr "Benzyna bezołowiowa 100"
-
-msgid "E10 (10% Ethanol mix)"
-msgstr "E10 (bioetanol 10%)"
-
-msgid "E85 (85% Ethanol mix)"
-msgstr "E85 (bioetanol 85%)"
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr "Gaz LPG"
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr "Gaz CNG (sprężony gaz ziemny)"
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -18964,9 +19316,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr "#CD853F"
 
-msgid "route segment"
-msgstr "odcinek trasy"
-
 msgid "stop position"
 msgstr "miejsce zatrzymania"
 
@@ -18985,6 +19334,9 @@ msgstr "peron (dla wysiadających)"
 msgid "platform (entry only)"
 msgstr "peron (dla wsiadających)"
 
+msgid "route segment"
+msgstr "odcinek trasy"
+
 msgid "Route Master"
 msgstr "Nadrzędna trasa pojazdów transportu publicznego"
 
@@ -19187,6 +19539,12 @@ msgstr "Hotel"
 msgid "Stars"
 msgstr "Gwiazdki"
 
+msgid "Rooms"
+msgstr "Pokoje"
+
+msgid "Beds"
+msgstr "Łóżka"
+
 msgid "Motel"
 msgstr "Motel"
 
@@ -19277,6 +19635,9 @@ msgstr "kanapki"
 msgid "sushi"
 msgstr "sushi"
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr "Mikrobrowar"
 
@@ -19491,6 +19852,9 @@ msgstr "Sauna"
 msgid "Horse Riding"
 msgstr "Jazda konna"
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr "Dom publiczny"
 
@@ -19978,8 +20342,8 @@ msgstr "Pokazuje ciśnienie atmosferyczne"
 msgid "Shows humidity"
 msgstr "Pokazuje wilgotność"
 
-msgid "Recycling"
-msgstr "Punkt zbiórki odpadów"
+msgid "Recycling Container"
+msgstr "Pojemnik na surowce wtórne"
 
 msgid "Batteries"
 msgstr "Baterie"
@@ -19987,23 +20351,50 @@ msgstr "Baterie"
 msgid "Cans"
 msgstr "Puszki"
 
+msgid "Cardboard"
+msgstr ""
+
+msgid "Electrical Appliances"
+msgstr ""
+
 msgid "Glass"
 msgstr "Szkło"
 
+msgid "Glass Bottles"
+msgstr ""
+
+msgid "Green Waste"
+msgstr ""
+
 msgid "Paper"
 msgstr "Papier"
 
-msgid "Scrap Metal"
-msgstr "Złom"
+msgid "Plastic"
+msgstr ""
 
-msgid "container"
-msgstr "pojemnik"
+msgid "Plastic Bottles"
+msgstr ""
 
-msgid "centre"
-msgstr "centrum recyklingu"
+msgid "Plastic Packaging"
+msgstr ""
 
-msgid "Waste Basket/Trash Can"
-msgstr "Kosz na śmieci"
+msgid "Scrap Metal"
+msgstr "Złom"
+
+msgid "Shoes"
+msgstr "Sklep obuwniczy"
+
+msgid "Small Appliances"
+msgstr ""
+
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
+msgstr "Centrum recyklingu"
+
+msgid "Waste Basket/Trash Can"
+msgstr "Kosz na śmieci"
 
 msgid "Waste Disposal/Dumpster"
 msgstr "Miejsca składowania śmieci"
@@ -20155,10 +20546,10 @@ msgid "Pitch"
 msgstr "Boisko"
 
 msgid "artificial_turf"
-msgstr ""
+msgstr "sztuczna trawa"
 
 msgid "decoturf"
-msgstr ""
+msgstr "decoturf"
 
 msgid "tartan"
 msgstr ""
@@ -20203,6 +20594,9 @@ msgstr "Łucznictwo"
 msgid "Track and Field Athletics"
 msgstr "Lekkoatletyka"
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr "Wspinaczka"
 
@@ -20378,12 +20772,18 @@ msgstr "Baseball"
 msgid "Basketball"
 msgstr "Koszykówka"
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr "Siatkówka"
 
 msgid "Beach Volleyball"
 msgstr "Siatkówka plażowa"
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr "Golf"
 
@@ -20399,14 +20799,14 @@ msgstr "Bowls"
 msgid "Cricket"
 msgstr "Krykiet"
 
-msgid "Cricket Nets"
-msgstr "Krykiet - siatki"
-
 msgid "Croquet"
 msgstr "Krokiet"
 
-msgid "Hockey"
-msgstr "Hokej"
+msgid "Field Hockey"
+msgstr "Hokej na trawie"
+
+msgid "Ice Hockey"
+msgstr "Hokej na lodzie"
 
 msgid "Pelota"
 msgstr "Pelota"
@@ -20429,9 +20829,6 @@ msgstr "Gokarty"
 msgid "Motocross"
 msgstr "Motocross"
 
-msgid "Safety Training"
-msgstr "Tor szkoleniowy"
-
 msgid "Model Aerodrome"
 msgstr "Lotnisko dla modeli"
 
@@ -20450,9 +20847,6 @@ msgstr "bieżnia"
 msgid "RC Car"
 msgstr "Zdalnie sterowane samochody"
 
-msgid "Raceway"
-msgstr "Tor wyścigowy"
-
 msgid "Man Made"
 msgstr "Obiekty sztuczne"
 
@@ -20486,11 +20880,11 @@ msgstr "stodoła"
 
 msgctxt "building"
 msgid "farm_auxiliary"
-msgstr ""
+msgstr "budynek gospodarczy"
 
 msgctxt "building"
 msgid "transportation"
-msgstr "budynek transportu i łączności"
+msgstr "budynek transportu"
 
 msgctxt "building"
 msgid "greenhouse"
@@ -20522,6 +20916,14 @@ msgstr "szopa"
 
 msgctxt "building"
 msgid "storage_tank"
+msgstr "zbiornik"
+
+msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
 msgstr ""
 
 msgctxt "building"
@@ -20638,7 +21040,7 @@ msgid "Gasometer"
 msgstr "Zbiornik gazu"
 
 msgid "Storage Tank"
-msgstr ""
+msgstr "Zbiornik przemysłowy"
 
 msgctxt "content"
 msgid "fuel"
@@ -21733,10 +22135,10 @@ msgid "Palaeontological Site"
 msgstr "Wykopalisko paleontologiczne"
 
 msgid "Monument"
-msgstr "Pomnik"
+msgstr "Monument"
 
 msgid "Memorial"
-msgstr "Miejsce pamięci"
+msgstr "Pomnik/miejsce pamięci"
 
 msgctxt "memorial"
 msgid "statue"
@@ -21821,7 +22223,7 @@ msgid "Public Market"
 msgstr "Targowisko"
 
 msgid "Organic"
-msgstr "Naturalna żywność"
+msgstr "Organiczne"
 
 msgid "Greengrocer"
 msgstr "Sklep warzywny"
@@ -21847,9 +22249,6 @@ msgstr "Wina"
 msgid "Boutique"
 msgstr "Butik"
 
-msgid "Shoes"
-msgstr "Sklep obuwniczy"
-
 msgid "Outdoor"
 msgstr "Sklep turystyczny"
 
@@ -21920,7 +22319,7 @@ msgid "Curtain"
 msgstr "Sklep z zasłonami"
 
 msgid "Art"
-msgstr "Sztuka"
+msgstr "Komercyjna galeria sztuki"
 
 msgid "Frame"
 msgstr "Sklep z ramami do obrazów"
@@ -21995,7 +22394,7 @@ msgid "Garden Centre"
 msgstr "Centrum ogrodnicze"
 
 msgid "Do-It-Yourself Store"
-msgstr "Sklep dla majsterkowiczów"
+msgstr "Market budowlany"
 
 msgid "Hardware"
 msgstr "Sklep z narzędziami"
@@ -22391,7 +22790,7 @@ msgid "A line of trees."
 msgstr "Rząd drzew"
 
 msgid "Wood"
-msgstr "Las pierwotny"
+msgstr "Drzewa/las pierwotny"
 
 msgid "Woodland where timber production does not dominate use."
 msgstr ""
@@ -22474,7 +22873,7 @@ msgid ""
 msgstr ""
 
 msgid "Scrub"
-msgstr "Busz"
+msgstr "Zarośla"
 
 msgid ""
 "Bare lower lying uncultivated land with bushes but little or no tree cover."
@@ -22580,7 +22979,7 @@ msgid "Religious"
 msgstr "Obszar religijny"
 
 msgid "Retail"
-msgstr "Obszar handlowy"
+msgstr "Obszar handlu detalicznego"
 
 msgid "Commercial"
 msgstr "Obszar biur i usług"
@@ -22610,7 +23009,7 @@ msgid "Landfill"
 msgstr "Wysypisko"
 
 msgid "Quarry"
-msgstr "Kamieniołom"
+msgstr "Kopalnia odkrywkowa/kamieniołom"
 
 msgid "Annotation"
 msgstr "Adnotacja"
@@ -22862,12 +23261,12 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr "Kontakt (schemat prosty)"
 
-msgid "Fax Number"
-msgstr "Numer faksu"
-
 msgid "Email Address"
 msgstr "Adres e-mail"
 
+msgid "Fax Number"
+msgstr "Numer faksu"
+
 msgid "Image"
 msgstr "Obraz"
 
@@ -23293,6 +23692,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -23317,6 +23719,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr "{0}={1} jest przestarzały"
 
@@ -23378,6 +23792,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -23430,7 +23847,7 @@ msgid "wrong crossing tag on a way"
 msgstr ""
 
 msgid "Unnamed unclassified highway"
-msgstr ""
+msgstr "Droga czwartorzędna bez nazwy"
 
 msgid "highway without a reference"
 msgstr ""
@@ -23468,9 +23885,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -23841,6 +24267,9 @@ msgstr "Dodawaj nowe punkty przez kliknięcie"
 msgid "Add fixed points on spacebar"
 msgstr "Dodawaj nowe punkty spacją"
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr "Rysuj tylko zamknięte wielokąty"
 
@@ -23895,9 +24324,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -24649,47 +25075,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
-msgstr "Ustawienia wtyczki"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
+msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
+msgstr ""
+
+msgid "Color Threshold"
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Use HSV based algorithm"
 msgstr ""
 
-msgid "merge nodes"
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -24698,10 +25133,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24759,10 +25206,11 @@ msgid "Set width of the building"
 msgstr "Ustal szerokość budynku"
 
 msgid "Merge address points"
-msgstr ""
+msgstr "Scal punkty adresowe"
 
 msgid "Move tags from address nodes inside buildings to building ways"
 msgstr ""
+"Przenieś tagi z punktów adresowych wewnątrz budynku na obrys tego budynku"
 
 msgid "Select both address nodes and building ways to merge"
 msgstr ""
@@ -25308,8 +25756,11 @@ msgstr "Reset przesunięcia"
 msgid "Reset offset (only vector images)"
 msgstr "Reset przesunięcia (tylko obrazy wektorowe)"
 
+msgid "Blank Layer"
+msgstr "Pusta warstwa"
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
-msgstr "warstwa WMS ({0}), {1} kafelków wczytano"
+msgstr "warstwa WMS ({0}), wczytano {1} kafelków"
 
 msgid "Is not vectorized."
 msgstr "Nie jest zwektoryzowane."
@@ -26522,266 +26973,572 @@ msgstr ""
 msgid "construct channel digraph and search for junctions"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr "{0} węzłów jak dotąd..."
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr "Śledzenie"
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr "Wystąpił nieznany błąd"
+
+msgid "east"
+msgstr "wschód"
+
+msgid "northeast"
+msgstr "północny-wschód"
+
+msgid "north"
+msgstr "północ"
+
+msgid "northwest"
+msgstr "północny-zachód"
+
+msgid "west"
+msgstr "zachód"
+
+msgid "southwest"
+msgstr "południowy-zachód"
+
+msgid "south"
+msgstr "południe"
+
+msgid "southeast"
+msgstr "południowy-wschód"
+
+msgid "coastline"
+msgstr "linia brzegowa"
+
+msgid "land"
+msgstr "ląd"
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr "Rozmiar kafli Landsat (w pikselach)"
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr "Oznacz linie jako"
+
+msgid "WMS Layer"
+msgstr "Warstwa WMS"
+
+msgid "Maximum cache size (MB)"
+msgstr "Maksymalny rozmiar pamięci podręcznej (MB)"
+
+msgid "Maximum cache age (days)"
+msgstr "Maksymalny wiek pamięci podręcznej (dni)"
+
+msgid "Source text"
+msgstr "Tekst źródłowy"
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+"Przesuń wszystkie punkty na wschód (przesunięcie w stopniach). Domyślnie 0."
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+"Przesuń wszystkie punkty na północ (przesunięcie w stopniach). Domyślnie 0."
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr "Pobieranie kafelka obrazu..."
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr "Połączenie nie powiodło się"
+
+msgid "Not connected"
+msgstr "Nie połączony"
+
+msgid "Connecting"
+msgstr "Łączenie"
+
+msgid "Connected"
+msgstr "Połączony"
+
+msgid "no name"
+msgstr "bez nazwy"
+
+msgid "Live GPS"
+msgstr ""
+
+msgid "Show GPS data."
+msgstr "Pokaż dane GPS."
+
+msgid "Status"
+msgstr "Status"
+
+msgid "Way Info"
+msgstr ""
+
+msgid "Speed"
+msgstr "Prędkość"
+
+msgid "Course"
+msgstr "Kurs"
+
+msgid "LiveGPS layer"
+msgstr ""
+
+msgid "Capture GPS Track"
+msgstr ""
+
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgstr ""
+
+msgid "Center Once"
+msgstr "Wycentruj raz"
+
+msgid "Center the LiveGPS layer to current position."
+msgstr ""
+
+msgid "Auto-Center"
+msgstr "Centruj ciągle"
+
+msgid "Continuously center the LiveGPS layer to current position."
+msgstr ""
+
+msgid "Open MapDust"
+msgstr ""
+
+msgid "MapDust bug reports"
+msgstr ""
+
+msgid "Activates the MapDust bug reporter plugin"
+msgstr ""
+
+msgid "Missing input data"
+msgstr ""
+
+msgid "Mapillary Images"
+msgstr ""
+
+msgid "Mapillary layer"
+msgstr ""
+
+msgid "Total images:"
+msgstr ""
+
+msgid "images"
+msgstr ""
+
+msgid "Mapillary"
+msgstr ""
+
+msgid "Create Mapillary layer"
+msgstr ""
+
+msgid "Start Mapillary layer"
+msgstr ""
+
+msgid "Download Mapillary images in current view"
+msgstr ""
+
+msgid "Export pictures"
+msgstr ""
+
+msgid "Export Mapillary pictures"
+msgstr ""
+
+msgid "Export images"
+msgstr ""
+
+msgid "Import pictures"
+msgstr ""
+
+msgid "Import local pictures"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer"
+msgstr ""
+
+msgid "Select pictures"
+msgstr ""
+
+msgid "Import pictures into sequence"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer in a sequence"
+msgstr ""
+
+msgid "Join mode"
+msgstr ""
+
+msgid "Join/unjoin pictures"
+msgstr ""
+
+msgid "Join Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures"
+msgstr ""
+
+msgid "Upload Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures."
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Walk mode"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Start walk mode"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "{0} nodes so far..."
-msgstr "{0} węzłów jak dotąd..."
+msgid "Uploaded {0} images"
+msgstr ""
 
-msgid "Lake Walker."
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "View in website"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Copy key"
 msgstr ""
 
-msgid "Tracing"
-msgstr "Śledzenie"
+msgid "Copy key tag"
+msgstr ""
 
-msgid "checking cache..."
+msgid "Edit on website"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Export all images"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Export selected images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "An unknown error has occurred"
-msgstr "Wystąpił nieznany błąd"
+msgid "Select a folder"
+msgstr ""
 
-msgid "east"
-msgstr "wschód"
+msgid "Explore"
+msgstr ""
 
-msgid "northeast"
-msgstr "północny-wschód"
+msgid "Select a directory"
+msgstr ""
 
-msgid "north"
-msgstr "północ"
+msgid "Speed limit"
+msgstr ""
 
-msgid "northwest"
-msgstr "północny-zachód"
+msgid "Give way"
+msgstr ""
 
-msgid "west"
-msgstr "zachód"
+msgid "No entry"
+msgstr ""
 
-msgid "southwest"
-msgstr "południowy-zachód"
+msgid "Intersection danger"
+msgstr ""
 
-msgid "south"
-msgstr "południe"
+msgid "Mandatory direction (any)"
+msgstr ""
 
-msgid "southeast"
-msgstr "południowy-wschód"
+msgid "No turn"
+msgstr ""
 
-msgid "coastline"
-msgstr "linia brzegowa"
+msgid "Uneven road"
+msgstr ""
 
-msgid "land"
-msgstr "ląd"
+msgid "No parking"
+msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "Years"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Months"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Days"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
-msgstr "Rozmiar kafli Landsat (w pikselach)"
+msgid "Mapillary filter"
+msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "Downloaded images"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "Only images with signs"
 msgstr ""
 
-msgid "Tag ways as"
-msgstr "Oznacz linie jako"
+msgid "Choose signs"
+msgstr ""
 
-msgid "WMS Layer"
-msgstr "Warstwa WMS"
+msgid "Mapillary history"
+msgstr ""
 
-msgid "Maximum cache size (MB)"
-msgstr "Maksymalny rozmiar pamięci podręcznej (MB)"
+msgid "Open Mapillary history dialog"
+msgstr ""
 
-msgid "Maximum cache age (days)"
-msgstr "Maksymalny wiek pamięci podręcznej (dni)"
+msgid "Open Mapillary window"
+msgstr ""
 
-msgid "Source text"
-msgstr "Tekst źródłowy"
+msgid "Mapillary dialog"
+msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Next picture"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Previous picture"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Jump to red"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
-"Przesuń wszystkie punkty na wschód (przesunięcie w stopniach). Domyślnie 0."
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Stops the walk."
 msgstr ""
-"Przesuń wszystkie punkty na północ (przesunięcie w stopniach). Domyślnie 0."
 
-msgid "Direction to search for land. Default east."
+msgid "Play"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Pause"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Downloading image tile..."
-msgstr "Pobieranie kafelka obrazu..."
+msgid "Use 24 hour format"
+msgstr ""
 
-msgid "Could not acquire image"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Connection Failed"
-msgstr "Połączenie nie powiodło się"
+msgid "Download mode: "
+msgstr ""
 
-msgid "Not connected"
-msgstr "Nie połączony"
+msgid "Upload selected sequence"
+msgstr ""
 
-msgid "Connecting"
-msgstr "Łączenie"
+msgid "Delete after upload"
+msgstr ""
 
-msgid "Connected"
-msgstr "Połączony"
+msgid "Wait for full quality pictures"
+msgstr ""
 
-msgid "no name"
-msgstr "bez nazwy"
+msgid "Follow selected image"
+msgstr ""
 
-msgid "Live GPS"
+msgid "Go forward"
 msgstr ""
 
-msgid "Show GPS data."
-msgstr "Pokaż dane GPS."
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Status"
-msgstr "Status"
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Way Info"
+msgid "2 images joined"
 msgstr ""
 
-msgid "Speed"
-msgstr "Prędkość"
-
-msgid "Course"
-msgstr "Kurs"
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "LiveGPS layer"
-msgstr ""
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Capture GPS Track"
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Center Once"
-msgstr "Wycentruj raz"
-
-msgid "Center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Auto-Center"
-msgstr "Centruj ciągle"
-
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Select mode"
 msgstr ""
 
-msgid "Open MapDust"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Missing input data"
+msgid "No images found"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Finished upload"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Uploading: {0}"
 msgstr ""
 
-msgid "Export"
-msgstr "Eksport"
-
 msgid "Measured values"
 msgstr "Zmierzone wartości"
 
@@ -26800,6 +27557,9 @@ msgstr "Długość zaznaczenia"
 msgid "Selection Area"
 msgstr "Powierzchnia zaznaczenia"
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr "Kąt"
 
@@ -26862,47 +27622,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr "Pobierz z Overpass API ..."
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr "Wybierz adres serwera lustrzanego OSM"
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr "O wtyczce"
 
@@ -26932,7 +27651,7 @@ msgid "No, just keep it"
 msgstr "Nie, zatrzymaj"
 
 msgid "Close the dialog and discard all changes"
-msgstr ""
+msgstr "Zamknij okno dialogowe i odrzuć wszystkie zmiany"
 
 msgid "Proceed and go to the next page"
 msgstr ""
@@ -27101,10 +27820,10 @@ msgid "Update modules"
 msgstr "Aktualizuj moduły"
 
 msgid "Update the selected modules"
-msgstr ""
+msgstr "Uaktualnij wybrane moduły"
 
 msgid "Please restart JOSM to activate the downloaded modules."
-msgstr ""
+msgstr "Proszę uruchomić program ponownie, aby aktywować pobrane moduły."
 
 msgid ""
 "All installed modules are up to date. JOSM does not have to download newer "
@@ -27132,10 +27851,13 @@ msgid "Download OSM data corresponding to the current data set."
 msgstr ""
 
 msgid "Diff"
-msgstr ""
+msgstr "Różnice"
 
 msgid "Perform diff between current data set and existing OSM data."
-msgstr ""
+msgstr "Porównaj bieżący zestaw danych z istniejącymi danymi OSM"
+
+msgid "Tools"
+msgstr "Narzędzia"
 
 msgid "Open tools menu for this data."
 msgstr ""
@@ -27293,6 +28015,7 @@ msgstr "Wyświetl licencję"
 
 msgid "Launch browser to the license page of the selected data set"
 msgstr ""
+"Otwórz w przeglądarce stronę z licencją do zaznaczonego zbioru danych"
 
 msgid "View License (summary)"
 msgstr "Wyświetl licencję (podsumowanie)"
@@ -27301,7 +28024,7 @@ msgid "Launch browser to the summary license page of the selected data set"
 msgstr ""
 
 msgid "View the license of the selected data set"
-msgstr ""
+msgstr "Pokaż licencją do zaznaczonego zbioru danych"
 
 msgid ""
 "Warning: Cannot download module ''{0}''. Its download link is not known. "
@@ -28359,6 +29082,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr "Narzędzia relacji"
 
@@ -28411,7 +29155,7 @@ msgid "Create multipolygons from rings"
 msgstr "Utwórz wielokąt złożony z pierścieni"
 
 msgid "Move tags from ways to relation"
-msgstr ""
+msgstr "Przenieś tagi z linii do relacji"
 
 msgid "Enter admin level and name for the border relation:"
 msgstr ""
@@ -28530,6 +29274,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -28539,6 +29286,9 @@ msgstr "Historia obiektów"
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -28719,6 +29469,9 @@ msgstr "Nowa wartość dla {0}"
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -28900,6 +29653,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -28909,6 +29695,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr "Eksport"
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -29060,7 +29849,7 @@ msgid "Reverse a terrace"
 msgstr "Scal budynki"
 
 msgid "Reverses house numbers on a terrace."
-msgstr "Scala kinka budynków w jeden"
+msgstr "Scala kilka budynków w jeden"
 
 msgid "Reverse a Terrace"
 msgstr "Scal budynki"
@@ -29150,9 +29939,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr "Wielkość kafelka:"
-
 msgid "Resolution:"
 msgstr "Rozdzielczość:"
 
@@ -30731,9 +31517,6 @@ msgstr ""
 "Wyszukiwanie po punkcie orientacyjnym. Kliknij i przesuń widok mapy do tego "
 "punktu."
 
-msgid "Way Select"
-msgstr "Wybór linii"
-
 msgid "Add names from Wikipedia"
 msgstr "Dodaj nazwy z Wikipedii"
 
diff --git a/i18n/po/pt.po b/i18n/po/pt.po
index 9730e49..8bac73b 100644
--- a/i18n/po/pt.po
+++ b/i18n/po/pt.po
@@ -7,16 +7,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
-"PO-Revision-Date: 2015-03-15 00:41+0000\n"
-"Last-Translator: Rui <xande6ruz at yandex.com>\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
+"PO-Revision-Date: 2015-09-30 10:20+0000\n"
+"Last-Translator: Ivo Xavier <ivofernandes12 at gmail.com>\n"
 "Language-Team: Portuguese <pt at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:53+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:57+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: pt\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -97,21 +97,18 @@ msgstr "A carregar preferências de imagens de fundo"
 msgid "Updating user interface"
 msgstr "A atualizar a interface"
 
-msgid "{0} completed in {1}"
-msgstr "{0} completado em {1}"
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "O endereço web do ficheiro não é válido e será ignorado: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "A ignorar o endereço web inválido: \"{0}\""
 
 msgid "Warning"
 msgstr "Aviso"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "O endereço web do ficheiro não é válido e será ignorado: \"{0}\""
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr "O parâmetro \"downloadgps\" não aceita nomes nem URLs de ficheiros"
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "A ignorar o endereço web inválido: \"{0}\""
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -426,7 +423,7 @@ msgid "Please select something to copy."
 msgstr "Por favor selecione algo para copiar."
 
 msgid "Copy Coordinates"
-msgstr "Copiar Coordenadas"
+msgstr "Copiar coordenadas"
 
 msgid "Copy coordinates of selected nodes to clipboard."
 msgstr ""
@@ -473,6 +470,9 @@ msgstr "Mostra os painéis laterais"
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Mostra os painéis laterais. maximizando a área visível"
 
+msgid "Distribute Nodes"
+msgstr "Distribuir Nós"
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr "Distribui os nós selecionados a distâncias iguais ao longo da linha."
 
@@ -484,6 +484,9 @@ msgid ""
 "* One no self-crossing way with at most two of its nodes;\n"
 "* Three nodes."
 msgstr ""
+"Selecione :\n"
+"* 1 linha que não intersecte a ela mesma com 2 nós no máximo;\n"
+"* 3 nós."
 
 msgid "Download from OSM..."
 msgstr "Descarregar do OpenStreetMap..."
@@ -502,7 +505,7 @@ msgid "Download data"
 msgstr "Descarregar dados"
 
 msgid "Download notes in current view"
-msgstr ""
+msgstr "Descarregar erros reportados na vista atual"
 
 msgid "Download object..."
 msgstr "Descarregar objeto..."
@@ -1054,7 +1057,7 @@ msgid "Download Data"
 msgstr "Descarregar Dados"
 
 msgid "Which tasks to perform?"
-msgstr ""
+msgstr "Que tarefas a fazer?"
 
 msgid "Ok"
 msgstr "Ok"
@@ -1130,6 +1133,30 @@ msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 "Por favor selecione linhas com ângulos de aproximadamente 90 ou 180 graus."
 
+msgid "Download from Overpass API ..."
+msgstr "Descarregar da API Overpass..."
+
+msgid "Download map data from Overpass API server."
+msgstr "Descarregar dados do mapa da API Overpass."
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr "Pedido Overpass: "
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr "Colar"
 
@@ -1296,7 +1323,7 @@ msgid "Save the current data to a new file."
 msgstr "Grava a camada ativa num ficheiro novo."
 
 msgid "Search Notes..."
-msgstr "Procurar e Descarregar Erros Reportados..."
+msgstr "Procurar e descarregar erros reportados..."
 
 msgid "Download notes from the note search API"
 msgstr "Procura e descarrega erros reportados no mapa do OpenStreetMap"
@@ -1331,7 +1358,7 @@ msgstr ""
 "intersecção com outras linhas"
 
 msgid "Load Session"
-msgstr "Carregar Sessão"
+msgstr "Abrir Sessão"
 
 msgid "Load a session from file."
 msgstr "Carrega uma sessão de um ficheiro."
@@ -1574,8 +1601,8 @@ msgstr "Nó Desligado"
 
 msgid "Dupe into {0} node"
 msgid_plural "Dupe into {0} nodes"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Separar em {0} nó"
+msgstr[1] "Separar em {0} nós"
 
 msgid "Dupe {0} node into {1} nodes"
 msgid_plural "Dupe {0} nodes into {1} nodes"
@@ -1625,7 +1652,7 @@ msgstr[0] "A linha afetada desaparecerá após desligar o nó selecionado."
 msgstr[1] "A linha afetada desaparecerá após desligar os nós selecionados."
 
 msgid "Some irrelevant nodes have been removed from the selection"
-msgstr ""
+msgstr "Alguns nós não relevantes foram removidos da seleção"
 
 msgid "Undo"
 msgstr "Desfazer"
@@ -1899,29 +1926,33 @@ msgid "Downloading Notes"
 msgstr "A descarregar erros reportados"
 
 msgid "Notes"
-msgstr "Erros reportados"
+msgstr "Erros reportados no OpenStreetMap"
 
 msgid "{0} note has been downloaded."
 msgid_plural "{0} notes have been downloaded."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} erro reportado descarregado."
+msgstr[1] "{0} erros reportados descarregados."
 
 msgid ""
 "Since the download limit was {0}, there might be more notes to download."
 msgstr ""
+"Uma vez que o limite de descarregamento é {0}, podem existir mais erros "
+"reportados para descarregar"
 
 msgid ""
 "Request a smaller area to make sure that all notes are being downloaded."
 msgstr ""
+"Escolha uma área do mapa mais pequena para ter a certeza que todos os erros "
+"reportados são descarregados"
 
 msgid "More notes to download"
-msgstr ""
+msgstr "Mais erros reportados para descarregar"
 
 msgid "Download OSM Notes within Bounds"
-msgstr ""
+msgstr "Descarregar erros reportados pelo limite"
 
 msgid "Download OSM Note by ID"
-msgstr ""
+msgstr "Descarregar erro reportado pelo ID"
 
 msgid "Download Compressed OSM Change"
 msgstr "Descarregar OSM Change comprimido"
@@ -1933,7 +1964,7 @@ msgid "Download Compressed OSM"
 msgstr "Descarregar OSM comprimido"
 
 msgid "Download OSM object by ID"
-msgstr ""
+msgstr "Descarregar objeto pelo ID"
 
 msgid "Download OSM"
 msgstr "Descarregar do OSM"
@@ -2140,15 +2171,6 @@ msgstr "Íman em ângulos ativado."
 msgid "Finish drawing."
 msgstr "Terminar o desenho."
 
-msgid "FIX"
-msgstr "FIXAR"
-
-msgid "draw angle snap"
-msgstr "desenhar em ângulo com íman"
-
-msgid "draw angle snap highlight"
-msgstr "destaque de desenho em ângulos com íman"
-
 msgid "Toggle snapping by {0}"
 msgstr "Alternar alinhamento com {0}"
 
@@ -2170,6 +2192,15 @@ msgstr "0,45,90,..."
 msgid "0,30,45,60,90,..."
 msgstr "0,30,45,60,90,..."
 
+msgid "FIX"
+msgstr "FIXAR"
+
+msgid "draw angle snap"
+msgstr "desenhar em ângulo com íman"
+
+msgid "draw angle snap highlight"
+msgstr "destaque de desenho em ângulos com íman"
+
 msgid "Angle snapping"
 msgstr "Ângulos com íman"
 
@@ -2306,9 +2337,6 @@ msgstr ""
 "FerramentaLinhaParalela\n"
 "As linhas selecionadas devem formar uma linha contínua"
 
-msgid "Make parallel way error"
-msgstr "Erro ao criar linha paralela"
-
 msgid "Drag play head"
 msgstr "Arrastar cabeça de reprodução"
 
@@ -2541,9 +2569,15 @@ msgstr "todos os objetos"
 msgid "Also include incomplete and deleted objects in search."
 msgstr "Incluir também objetos incompletos e eliminados na procura."
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr "expressão regular"
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr "adicionar botão com esta pesquisa na barra de ferramentas"
 
@@ -2675,10 +2709,13 @@ msgstr "propriedades"
 msgid ""
 "ways with at least 20 nodes, or relations containing at least 20 nodes"
 msgstr ""
+"linhas com pelo menos 20 nós ou relações que contenham pelo menos 20 nós"
 
 msgid ""
 "nodes with at least 3 referring ways, or relations containing at least 3 ways"
 msgstr ""
+"nós com pelo menos 3 linhas referentes ou relações que contenham pelo menos "
+"3 linhas"
 
 msgid "objects having 5 to 10 tags"
 msgstr "objetos com 5 a 10 etiquetas"
@@ -2690,7 +2727,7 @@ msgid "closed ways with an area of 100 m²"
 msgstr "linhas fechadas com uma área de 100 m²"
 
 msgid "ways with a length of 200 m or more"
-msgstr ""
+msgstr "linhas com um comprimento de 200 metros ou mais"
 
 msgid "state"
 msgstr "estado"
@@ -2771,6 +2808,10 @@ msgid "RX"
 msgstr "ER"
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr "T"
 
@@ -2824,6 +2865,9 @@ msgstr "Esperado um intervalo de números"
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr "Token inesperado. Esperado {0}, encontrado {1}"
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr "Token inesperado: {0}"
 
@@ -2837,7 +2881,7 @@ msgid "Missing operator for NOT"
 msgstr "Falta um parâmetro em NOT"
 
 msgid "Automatically truncating value of tag ''{0}'' on deleted object {1}"
-msgstr ""
+msgstr "A truncar o valor da etiqueta ''{0}'' no objeto eliminado {1}"
 
 msgid ""
 "Length of value for tag ''{0}'' on object {1} exceeds the max. allowed "
@@ -3318,6 +3362,24 @@ msgstr "Não foi possível criar o diretório que falta da cache: {0}"
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr "<html>Não foi possível criar a pasta que falta da cache: {0}</html>"
 
+msgid "Unable to delete temporary file {0}"
+msgstr "Não foi possível eliminar o ficheiro temporário {0}"
+
+msgid "Unable to set file non-readable {0}"
+msgstr "Não foi possível atribuir a não-leitura do ficheiro {0}"
+
+msgid "Unable to set file non-writable {0}"
+msgstr "Não foi possível atribuir a não-gravação do ficheiro {0}"
+
+msgid "Unable to set file non-executable {0}"
+msgstr "Não foi possível atribuir a não-execução do ficheiro {0}"
+
+msgid "Unable to set file readable {0}"
+msgstr "Não foi possível atribuir a leitura do ficheiro {0}"
+
+msgid "Unable to set file writable {0}"
+msgstr "Não foi possível atribuir a gravação do ficheiro {0}"
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3376,6 +3438,8 @@ msgid ""
 "Failed to initialize preferences. Failed to reset preference file to "
 "default: {0}"
 msgstr ""
+"Não foi possível inicializar as preferências. Não foi possível atribuir as "
+"preferências originais: {0}"
 
 msgid "Paint style {0}: {1}"
 msgstr "Estilo de pintura {0}: {1}"
@@ -3384,12 +3448,14 @@ msgid "Layer: {0}"
 msgstr "Camada: {0}"
 
 msgid "Failed to persist preferences to ''{0}''"
-msgstr ""
+msgstr "Não foi possível manter as preferências em ''{0}''"
 
 msgid ""
 "Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
 "startup)."
 msgstr ""
+"Tente ativar a rede IPv6, a preferir o IPv6 em vez de IPv4 (apenas funciona "
+"no início do JOSM)."
 
 msgid " (at line {0}, column {1})"
 msgstr " (na linha {0}, coluna {1})"
@@ -3454,14 +3520,53 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
-msgid "Not in cache"
-msgstr "Não está em cache"
-
 msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr ""
 "Não foi encontrada a projeção ''{0}''. O favorito de alinhamento ''{1}'' não "
 "pode ser utilizado"
 
+msgid "HTTP error {0} when loading tiles"
+msgstr "Erro HTTP {0} ao carregar as telas"
+
+msgid "Error downloading tiles: {0}"
+msgstr "Erro ao descarregar as telas: {0}"
+
+msgid "Could not load image from tile server"
+msgstr "Não foi possível carregar a imagem do servidor de telas"
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+"{0} não é um argumento WMS válido. Por favor verifique este URL do "
+"servidor:\n"
+"{1}"
+
+msgid "Select WMTS layer"
+msgstr "Selecionar camada WMTS"
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr "Projeção"
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr "Sem camadas definidas pelo documento getCapabilities: {0}"
+
+msgid "No layer selected"
+msgstr "Nenhuma camada selecionada"
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
+msgstr ""
+"São suportadas apenas telas quadradas. {0}x{1} devolvido pelo servidor para "
+"o identificador TileMatrix identifier {2}"
+
 msgid "ID > 0 expected. Got {0}."
 msgstr "Identificador (ID) > 0 esperado. Obteve-se {0}."
 
@@ -3489,6 +3594,9 @@ msgid ""
 "Please report this at {2}. This is not a critical error, it should be safe "
 "to continue in your work."
 msgstr ""
+"Era esperado o JOSM encontrar o objeto [{0} {1}] na base de dados mas não "
+"está lá. Por favor reporte este problema em {2}. Isto não é um erro crítico, "
+"deve ser seguro continuar a utilizar o JOSM."
 
 msgid "Missing merge target for way with id {0}"
 msgstr "Falta o alvo da fusão para a linha com o identificador {0}"
@@ -3672,6 +3780,13 @@ msgstr "texto"
 msgid "areatext"
 msgstr "área_de_texto"
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr "A projeção UTM (''+proj=utm'') requer o parâmetro ''+zone=...''"
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+"Esperado um número inteiro no intervalo 1 a 60 no parâmetro ''+zone=...''."
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 "O parâmetro tem de começar com o caractere a ''+'' (foi encontrado ''{0}'')"
@@ -3700,15 +3815,15 @@ msgstr "Elipsóide ''{0}'' não suportada."
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr "A combinação dos parâmetros da elipsóide não é suportada."
 
+msgid "Unknown datum identifier: ''{0}''"
+msgstr "Identificador de datum desconhecido: ''{0}''"
+
 msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr "Elipsóide (+ellps=* or +a=*, +b=*)"
 
 msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
-msgstr "Identificador de datum desconhecido: ''{0}''"
-
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
 msgstr "Datum necessário (+datum=*, +towgs84=* ou +nadgrids=*)"
 
@@ -3901,7 +4016,7 @@ msgstr ""
 "em restrições de circulação a certas horas."
 
 msgid "Does not match pattern ''restriction value @ condition''"
-msgstr ""
+msgstr "Não corresponde ao padrão ''valor de restrição @ condição''"
 
 msgid "{0} is not a valid restriction value"
 msgstr "{0} não é um valor de restrição válido"
@@ -4033,7 +4148,7 @@ msgid "Unknown country code: {0}"
 msgstr "Código desconhecido de país: {0}"
 
 msgid "Unknown source:maxspeed context: {0}"
-msgstr ""
+msgstr "Contexto desconhecido em source:maxspeed {0}"
 
 msgid "Internet tags"
 msgstr "Etiquetas de páginas da internet"
@@ -4073,13 +4188,15 @@ msgstr ""
 "Inconcistência no número de valores dependente de faixas na direção inversa."
 
 msgid "Long segments"
-msgstr ""
+msgstr "Segmentos demasidado longos"
 
 msgid "This tests for long way segments, which are usually errors."
 msgstr ""
+"Este teste procura por linhas demasiado longas, que podem ser erros ou "
+"originar problemas em alguns programas."
 
 msgid "Very long segment of {0} kilometers"
-msgstr ""
+msgstr "Segmento longo de  {0} quilómetros"
 
 msgid "Tag checker (MapCSS based)"
 msgstr "Verificador de etiquetas (baseado em MapCSS)"
@@ -4091,7 +4208,7 @@ msgid "Unable to replace argument {0} in {1}: {2}"
 msgstr "Não foi possível substituir o argumento {0} em {1}: {2}"
 
 msgid "Fix of {0}"
-msgstr ""
+msgstr "Correção de {0}"
 
 msgid " or "
 msgstr " ou "
@@ -4183,7 +4300,7 @@ msgstr ""
 "''name:en:Lisbon'' mas não ''name:pt:Lisboa'' ou o inverso."
 
 msgid "Missing name:*={0}. Add tag with correct language key."
-msgstr ""
+msgstr "Falta name:*={0}. Adicionar etiqueta com a chave de língua correta."
 
 msgid "A name is missing, even though name:* exists."
 msgstr "Tem etiquetas ''name:*'' mas falta a etiqueta ''name='' principal."
@@ -4275,6 +4392,8 @@ msgstr "Verifica se existem erros em relações."
 msgid ""
 "Route scheme is unspecified. Add {0} ({1}=public_transport; {2}=legacy)"
 msgstr ""
+"Esquema de rotas não especificado. adicionar {0} ({1}=public_transport; "
+"{2}=legacy)"
 
 msgid "Relation type is unknown"
 msgstr "O tipo de relação é desconhecido"
@@ -4371,9 +4490,6 @@ msgstr "Chave da etiqueta mais comprido do que o permitido"
 msgid "Tags with empty values"
 msgstr "Etiquetas com valores vazios"
 
-msgid "Invalid property key"
-msgstr "Chave da etiqueta inválida"
-
 msgid "Invalid white space in property key"
 msgstr "Espaço em branco na chave inválido"
 
@@ -4383,12 +4499,24 @@ msgstr "Valores começam ou terminam com espaço em branco"
 msgid "Property values contain HTML entity"
 msgstr "Valores das etiquetas contêm entidades HTML"
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr "Chave ''{0}'' não existente nos modelos de etiquetas"
 
 msgid "Presets do not contain property key"
 msgstr "A chave não existe nos modelos de etiquetas do JOSM"
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr "O valor ''{0}'' para a chave ''{1}'' parece-se com ''{2}''."
+
+msgid "Misspelled property value"
+msgstr "Valor da propriedade mal escrito"
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 "O valor ''{0}'' para a chave ''{1}'' não existe nos modelos de etiquetas do "
@@ -4589,6 +4717,9 @@ msgstr "Nó de linha perto de outra linha"
 msgid "Connected way end node near other way"
 msgstr "Nó de extremidade de uma linha perto de outra linha"
 
+msgid "Unconnected nodes without physical tags"
+msgstr "Nós isolados sem nenhuma etiqueta física"
+
 msgid "Untagged and unconnected nodes"
 msgstr "Nós isolados e sem nenhuma etiqueta"
 
@@ -4597,9 +4728,6 @@ msgstr ""
 "Isto verifica se existem nós sem etiquetas que não façam parte de nenhuma "
 "linha"
 
-msgid "Unconnected nodes without physical tags"
-msgstr "Nós isolados sem nenhuma etiqueta física"
-
 msgid "No tags"
 msgstr "Sem etiquetas"
 
@@ -4802,8 +4930,9 @@ msgstr "Clique para fechar esta janela"
 msgid "Imagery offset"
 msgstr "Alinhamento da imagem de fundo"
 
+msgctxt "menu"
 msgid "Imagery"
-msgstr "Imagem de Fundo"
+msgstr ""
 
 msgctxt "layer"
 msgid "Offset"
@@ -4867,7 +4996,7 @@ msgid "Print debugging messages to console"
 msgstr "A colocar mensagens na consola de comandos"
 
 msgid "Skip loading plugins"
-msgstr ""
+msgstr "Ignorar carregamento de plug-ins"
 
 msgid "Disable access to the given resource(s), separated by comma"
 msgstr "Impedir o acesso as seguintes recursos(s), separados por vírgula"
@@ -4938,7 +5067,7 @@ msgid "Printing debugging messages to console"
 msgstr "A colocar mensagens na consola de comandos"
 
 msgid "Plugin loading skipped"
-msgstr ""
+msgstr "Carregamento de plug-ins ignorado"
 
 msgid "Enabled detailed debug level (trace)"
 msgstr ""
@@ -4985,14 +5114,18 @@ msgstr[1] ""
 msgid ""
 "Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
 msgstr ""
+"Foi detetada uma rede IPv6 utilizável, após a próxima inicialização será "
+"usada a rede IPv6 em vez da IPv4."
 
 msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
-msgstr ""
+msgstr "Rede IPv6 detetada. A usar esta em vez da IPv4."
 
 msgid ""
 "Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
 "restart."
 msgstr ""
+"Foi detetada uma rede IPv6 não utilizável, após a próxima inicialização será "
+"usada a rede IPv4 em vez da IPv6."
 
 msgid "Unsaved osm data"
 msgstr "Dados OpenStreetMap não gravados"
@@ -5043,45 +5176,56 @@ msgstr ""
 "Internet ou ter a configuração de proxy errada.<br>Quer alterar as "
 "configurações de proxy?"
 
+msgctxt "menu"
 msgid "File"
-msgstr "Ficheiro"
+msgstr ""
 
-msgid "Session"
-msgstr "Sessão"
+msgctxt "menu"
+msgid "Edit"
+msgstr ""
 
+msgctxt "menu"
 msgid "View"
-msgstr "Ver"
+msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
-msgstr "Ferramentas"
+msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
-msgstr "Mais Ferramentas"
+msgstr ""
 
+msgctxt "menu"
 msgid "Data"
-msgstr "Dados"
+msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
-msgstr "Seleção"
+msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
-msgstr "Modelos de Etiquetas"
+msgstr ""
 
 msgid "More..."
 msgstr "Mais..."
 
+msgctxt "menu"
 msgid "GPS"
 msgstr "GPS"
 
+msgctxt "menu"
 msgid "Windows"
-msgstr "Painéis"
+msgstr "Janelas"
+
+msgctxt "menu"
+msgid "Help"
+msgstr "Ajuda"
 
 msgid "Menu: {0}"
 msgstr "Menu: {0}"
 
-msgid "Save and load the current session (list of layers, etc.)"
-msgstr "Gravar e carregar a sessão atual (lista de camadas, etc.)"
-
 msgid "Edit toolbar"
 msgstr "Barra de ferramentas de edição"
 
@@ -5105,6 +5249,7 @@ msgstr "Mostra várias opções das imagens de fundo"
 msgid "Search menu items"
 msgstr "Pesquisar por itens dos menus"
 
+msgctxt "menu"
 msgid "Audio"
 msgstr "Áudio"
 
@@ -5229,67 +5374,17 @@ msgstr "Em segundo plano"
 msgid "Click to run job in background"
 msgstr "Clique para fazer a tarefa em segundo plano"
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-"As fotografias aéreas podem estar desalinhadas. Por favor confirme o "
-"alinhamento utilizando trilhos GPS!"
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-
-msgid "Details..."
-msgstr "Detalhes..."
-
-msgid "Hide this message and never show it again"
-msgstr "Esconder esta mensagem e não a mostrar novamente"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-"<html>Por favor confirme se quer remover <strong>1 objeto</strong> de "
-"<strong>1 relação</strong>.</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>Por favor confirme se quer remover <strong>1 objeto</strong> de "
-"<strong>{0} relações</strong>.</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>Por favor confirme se quer remover <strong>{0} objetos</strong> de "
-"<strong>{1} relações</strong>.</html>"
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] "A eliminar {0} objeto"
-msgstr[1] "A eliminar {0} objetos"
-
-msgid "Delete objects"
-msgstr "Eliminar objectos"
-
-msgid "To delete"
-msgstr "Para eliminar"
-
-msgid "From Relation"
-msgstr "Da relação"
-
-msgid "Pos."
-msgstr "Pos."
+msgid " ({0})"
+msgstr " ({0})"
 
-msgid "Role"
-msgstr "Função"
+msgid "{0} completed in {1}"
+msgstr "{0} completado em {1}"
 
-msgid "Click to close the dialog and remove the object from the relations"
-msgstr "Clique para fechar a janela e remover o objeto das relações"
+msgid "Enlarge"
+msgstr "Aumentar"
 
-msgid "Click to close the dialog and to abort deleting the objects"
-msgstr "Clique para fechar a janela e cancelar a eliminação dos objetos"
+msgid "Shrink"
+msgstr "Diminuir"
 
 msgid ""
 "<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
@@ -5749,6 +5844,9 @@ msgstr "Manter o estado de eliminado do servidor"
 msgid "Undecide conflict between deleted state"
 msgstr "Desfazer fusão do estado de eliminado"
 
+msgid "Role"
+msgstr "Função"
+
 msgid "Primitive"
 msgstr "Objeto"
 
@@ -5895,6 +5993,8 @@ msgstr "O valor ''{0}'' será aplicado na chave ''{1}''"
 msgid ""
 "All numeric values sumed as ''{0}'' are going to be applied for key ''{1}''"
 msgstr ""
+"Todos os valores numéricos somados como ''{0}'' serão aplicados à chave "
+"''{1}''"
 
 msgid "The key ''{0}'' and all its values are going to be removed"
 msgstr "A chave ''{0}'' e todos os seus valores serão removidos"
@@ -6030,6 +6130,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr "Aplicar esta função a todos os membros"
 
+msgid "Pos."
+msgstr "Pos."
+
 msgid "Orig. Way"
 msgstr "Linha Orig."
 
@@ -6198,22 +6301,63 @@ msgstr "Resolver conflitos"
 msgid "Resolve conflicts for ''{0}''"
 msgstr "Resolver conflitos de ''{0}''"
 
-msgid "Filter objects and hide/disable them."
-msgstr "Filtrar objetos e escondê-los ou desativá-los."
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+"<html>Por favor confirme se quer remover <strong>1 objeto</strong> de "
+"<strong>1 relação</strong>.</html>"
 
-msgid "Enable filter"
-msgstr "Ativar filtro"
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Por favor confirme se quer remover <strong>1 objeto</strong> de "
+"<strong>{0} relações</strong>.</html>"
 
-msgid "Multikey: {0}"
-msgstr "Teclas múltiplas: {0}"
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Por favor confirme se quer remover <strong>{0} objetos</strong> de "
+"<strong>{1} relações</strong>.</html>"
 
-msgid "Hide filter"
-msgstr "Esconder filtro"
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] "A eliminar {0} objeto"
+msgstr[1] "A eliminar {0} objetos"
 
-msgid "Hiding filter"
-msgstr "Filtro de ocultar"
+msgid "Delete objects"
+msgstr "Eliminar objectos"
 
-msgid "Inverse filter"
+msgid "To delete"
+msgstr "Para eliminar"
+
+msgid "From Relation"
+msgstr "Da relação"
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr "Clique para fechar a janela e remover o objeto das relações"
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr "Clique para fechar a janela e cancelar a eliminação dos objetos"
+
+msgid "Filter objects and hide/disable them."
+msgstr "Filtrar objetos e escondê-los ou desativá-los."
+
+msgid "Enable filter"
+msgstr "Ativar filtro"
+
+msgid "Multikey: {0}"
+msgstr "Teclas múltiplas: {0}"
+
+msgid "Hide filter"
+msgstr "Esconder filtro"
+
+msgid "Hiding filter"
+msgstr "Filtro de ocultar"
+
+msgid "Inverse filter"
 msgstr "Filtro inverso"
 
 msgid "Filter mode"
@@ -6302,8 +6446,8 @@ msgstr "Informações detalhadas dos objetos selecionados"
 msgid "map style"
 msgstr "estilo de mapa"
 
-msgid " ({0})"
-msgstr " ({0})"
+msgid "edit counts"
+msgstr ""
 
 msgid "not in data set"
 msgstr "não está no conjunto de dados"
@@ -6443,6 +6587,11 @@ msgstr ""
 "Aviso: os 2 objetos selecionados são iguais, mas não têm as mesmas caches de "
 "estilo."
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr "xml"
 
@@ -6452,29 +6601,49 @@ msgstr "mapcss"
 msgid "unknown"
 msgstr "desconhecido"
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
-msgstr ""
-"Introduza as coordenadas do nó a criar,.<br/>Pode separar a latitude e a "
-"longitude com um espaço, vírgula ou ponto e vírgula.<br/>Use números "
-"positivos ou os caracteres N e E para indicar a direção cardinal Norte e "
-"Este.<br/>Para as direções cardinais Sul e Oeste pode usar números negativos "
-"ou os caracteres S e W (do inglês West=Oeste).<br/>Os valores das "
-"coordenadas podem ser introduzidos num dos três "
-"formatos:<ul><li><i>graus</i><tt>°</tt></li><li><i>graus</i><tt>°</tt"
-"> <i>minutos</i><tt>'</tt></li><li><i>graus</i><tt>°</tt> "
-"<i>minutos</i><tt>'</tt> <i>segundos</i><tt>&quot</tt></li></ul>Os "
-"símbolos <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> são opcionais.<br/><br/>Alguns exemplos:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
+msgstr ""
 
 msgid "Projected coordinates:"
 msgstr "Coordenadas projetadas:"
@@ -6521,6 +6690,12 @@ msgstr "Opacidade"
 msgid "Adjust opacity of the layer."
 msgstr "Ajustar a opacidade da camada."
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr "Ativar"
 
@@ -6650,6 +6825,12 @@ msgstr "Preferências de estilo"
 msgid "Customize the style"
 msgstr "Personalizar o estilo"
 
+msgid "Mini map"
+msgstr ""
+
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
 msgid "List of notes"
 msgstr "Lista de erros reportados"
 
@@ -6708,15 +6889,20 @@ msgstr "Identificador do objeto:"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "Introduza o identificador (ID) do objeto a ser descarregado"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+"Os identificadores dos objetos podem ser separados por vírgula ou espaço, "
+"por exemplo: {0}"
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
 msgstr ""
-"Os identificadores (ID) dos objetos podem ser separados por vírgula ou "
-"espaço.<br/>Exemplos: {0}<br/>No modo misto indique-os da seguinte forma: "
-"{1}<br/>({2} para <i>nós</i>, {3} para <i>linhas</i>, e {4} para "
-"<i>relações</i>)"
+"No modo misto, especifique objetos da seguinte forma: {0}<br/>({1} para "
+"<i>nós</i>, {2} para <i>linhas</i> e {3} para <i>relações</i>)"
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
+msgstr "Para intervalos de identificadores utiliza-se um hífen: {0}"
 
 msgid ""
 "Invalid ID list specified\n"
@@ -6748,6 +6934,9 @@ msgstr "Relações: {0}/{1}"
 msgid "Relations: {0}"
 msgstr "Relações: {0}"
 
+msgid "Selection"
+msgstr "Seleção"
+
 msgid "Open a selection list window."
 msgstr "Mostrar painel de objetos selecionados"
 
@@ -6843,6 +7032,12 @@ msgstr "Mostra o painel de Validação para verificar se existem erros."
 msgid "Validation results"
 msgstr "Resultados da validação"
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr "Corrigir"
 
@@ -6966,7 +7161,7 @@ msgid "Closed"
 msgstr "Fechado"
 
 msgid "ID"
-msgstr "ID (País: Indonésia; Estado Idaho)"
+msgstr "ID"
 
 msgid "Open"
 msgstr "Abrir"
@@ -7434,29 +7629,29 @@ msgid "This changeset query URL is invalid"
 msgstr "Este endereço web do pedido de conjunto de alterações não é válido"
 
 msgid "Discardable key: selection Foreground"
-msgstr ""
+msgstr "Chave descartável: seleção no primeiro plano"
 
 msgid "Discardable key: selection Background"
-msgstr ""
+msgstr "Chave descartável: seleção no segundo plano"
 
 msgid "Discardable key: foreground"
-msgstr ""
+msgstr "Chave descartável: primeiro plano"
 
 msgid "Discardable key: background"
-msgstr ""
+msgstr "Chave descartável: segundo plano"
 
 msgid "{0} ''{1}''"
-msgstr ""
+msgstr "{0} ''{1}''"
 
 msgid "{0} different"
 msgid_plural "{0} different"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} diferente"
+msgstr[1] "{0} diferente"
 
 msgid ", {0} unset"
 msgid_plural ", {0} unset"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] ", {0} não definido"
+msgstr[1] ", {0} não definido"
 
 msgid "Select objects for which to change tags."
 msgstr "Selecione os objetos nos quais quer alterar as etiquetas."
@@ -7477,7 +7672,7 @@ msgid "<different>"
 msgstr "<diferente>"
 
 msgid "Objects: {2} / Tags: {0} / Memberships: {1}"
-msgstr ""
+msgstr "Objetos: {2} / Etiquetas: {0} / Membros: {1}"
 
 msgid "Tags: {0} / Memberships: {1}"
 msgstr "Etiquetas: {0} / Membros: {1}"
@@ -7519,6 +7714,12 @@ msgid "Launch browser with wiki help for selected object"
 msgstr ""
 "Abrir no navegador de Internet a página de ajuda do objeto selecionado"
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr "Colar Valor"
 
@@ -7616,15 +7817,14 @@ msgstr "Definir o número de etiquetas adicionadas recentemente"
 msgid "Remember last used tags after a restart"
 msgstr "Lembrar as últimas etiquetas usadas após reiniciar o JOSM"
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
-msgstr ""
+msgid "to apply first suggestion"
+msgstr "para aplicar a primeira sugestão"
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
-msgstr ""
+msgid "to add without closing the dialog"
+msgstr "para adicionar sem fechar a janela"
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
-msgstr ""
+msgid "to add first suggestion without closing the dialog"
+msgstr "para adicionar a primeira sugestão sem fechar a janela"
 
 msgid "Please enter the number of recently added tags to display"
 msgstr "Introduza o número de etiquetas recentes a mostrar"
@@ -7687,7 +7887,7 @@ msgid "Downloading relation {0}"
 msgstr "A descarregar relação {0}"
 
 msgid "Ignoring exception because task was canceled. Exception: {0}"
-msgstr ""
+msgstr "A ignorar a exceção porque a tarefa foi cancelada. Exceção: {0}"
 
 msgid "Downloading {0} incomplete object"
 msgid_plural "Downloading {0} incomplete objects"
@@ -7818,6 +8018,12 @@ msgstr "Ordenar os membros da relação"
 msgid "Relation Editor: Sort"
 msgstr "Editor de Relações: Ordenar"
 
+msgid "Sort below"
+msgstr "Ordenar abaixo"
+
+msgid "Sort the selected relation members and all members below"
+msgstr "Ordenar os membros selecionados da relação e todos os membros abaixo"
+
 msgid "Reverse the order of the relation members"
 msgstr "Inverter a ordem dos membros da relação"
 
@@ -8263,9 +8469,10 @@ msgstr "Ocorreu um erro no pedido ''{0}'': ''{1}''"
 
 msgid "Name server returned invalid data. Please try again."
 msgstr ""
+"O nome do servidor retornou dados inválidos. Por favor tente de novo."
 
 msgid "Bad response"
-msgstr ""
+msgstr "Resposta inválida"
 
 msgid "Type"
 msgstr "Tipo"
@@ -8347,7 +8554,7 @@ msgid "Go to the JOSM help home page"
 msgstr "Ir para a página inicial de ajuda do JOSM"
 
 msgid "Bad location in HTML document. Exception was: {0}"
-msgstr ""
+msgstr "Localização errada no documento HTML. Exceção: {0}"
 
 msgid "Failed to open help page. The target URL is empty."
 msgstr ""
@@ -8425,6 +8632,9 @@ msgstr "A carregar o histórico da relação {0}"
 msgid "Node {0}"
 msgstr "Nó {0}"
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr "Enquadrar o nó"
 
@@ -8453,13 +8663,13 @@ msgid "Changeset source"
 msgstr "Fonte das informações do conjunto de dados"
 
 msgid "Imagery used"
-msgstr ""
+msgstr "Imagens de satélite usadas"
 
 msgid "<b>Source</b>:"
 msgstr "<b>Fonte</b>:"
 
 msgid "<b>Imagery</b>:"
-msgstr ""
+msgstr "<b>Imagens de satélite</b>:"
 
 msgid ""
 "<html>Version <strong>{0}</strong> currently edited in layer ''{1}''</html>"
@@ -8472,7 +8682,7 @@ msgstr ""
 "<html>Versão <strong>{0}</strong> criada em <strong>{1}</strong></html>"
 
 msgid "Changeset"
-msgstr ""
+msgstr "Conjunto de alterações"
 
 msgid "Changeset info"
 msgstr "Informação do conjunto de alterações"
@@ -8698,6 +8908,8 @@ msgstr "A fechar o conjunto de alterações {0}"
 msgid ""
 "Failed to put Credential Dialog always on top. Caught security exception."
 msgstr ""
+"Falhou a colocação da janela de credenciais por cima de tudo. Foi detetada "
+"uma exceção de segurança."
 
 msgid "Enter credentials for OSM API"
 msgstr "Introduza as credenciais para a API OSM"
@@ -9148,7 +9360,7 @@ msgstr[1] ""
 "valor vazios:<br>{0}<br>Continuar?</html>"
 
 msgid "Empty metadata"
-msgstr ""
+msgstr "Metadados vazios"
 
 msgid "Cancel the upload and resume editing"
 msgstr "Cancelar o envio e continuar a editar"
@@ -9331,7 +9543,7 @@ msgid "Cancel uploading"
 msgstr "Cancelar envio"
 
 msgid "Unexpected value for key ''{0}'' in preferences, got ''{1}''"
-msgstr ""
+msgstr "Valor inesperado da chave ''{0}'' nas preferências. Obtido ''{1}''"
 
 msgid "Please select the upload strategy:"
 msgstr "Escolha a forma como quer enviar os dados:"
@@ -9416,6 +9628,109 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] "{0} objeto a eliminar:"
 msgstr[1] "{0} objetos a eliminar:"
 
+msgid "Show Tile Info"
+msgstr "Ver Informação da Tela"
+
+msgid "Tile Info"
+msgstr "Informação da Tela"
+
+msgid "Metadata "
+msgstr "Metadados "
+
+msgid "Auto Zoom"
+msgstr "Enquadramento Automático"
+
+msgid "Auto load tiles"
+msgstr "Carregar automaticamente as telas"
+
+msgid "Load All Tiles"
+msgstr "Carregar Todas as Telas"
+
+msgid "Load All Error Tiles"
+msgstr "Carregar Todas as Telas com Erros"
+
+msgid "Zoom to native resolution"
+msgstr "Enquadrar na resolução nativa"
+
+msgid "Change resolution"
+msgstr "Alterar resolução"
+
+msgid "Failed to create tile source"
+msgstr "Não foi possível criar a fonte das telas"
+
+msgid "Show Errors"
+msgstr "Mostrar Erros"
+
+msgid "Load Tile"
+msgstr "Carregar Tela"
+
+msgid "Increase zoom"
+msgstr "Aproximar enquadramento"
+
+msgid "Decrease zoom"
+msgstr "Afastar enquadramento"
+
+msgid "Snap to tile size"
+msgstr "Enquadrar na resolução das telas"
+
+msgid "Flush Tile Cache"
+msgstr ""
+"Eliminar ficheiros temporários das telas (pode demorar alguns minutos)"
+
+msgid "zoom in to load any tiles"
+msgstr "aproximar o enquadramento para carregar qualquer tela"
+
+msgid "zoom in to load more tiles"
+msgstr "aproximar o enquadramento para carregar mais telas"
+
+msgid "increase zoom level to see more detail"
+msgstr "aproxime o enquadramento para ver mais detalhes"
+
+msgid "No tiles at this zoom level"
+msgstr "Sem telas a este nível"
+
+msgid "Current zoom: {0}"
+msgstr "Aproximação atual: {0}"
+
+msgid "Display zoom: {0}"
+msgstr "Aproximação de visualização: {0}"
+
+msgid "Pixel scale: {0}"
+msgstr "Escala do pixel: {0}"
+
+msgid "Best zoom: {0}"
+msgstr "Melhor aproximação: {0}"
+
+msgid "Cache stats: {0}"
+msgstr "Estatísticas da cache: {0}"
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr "{0} ({1}), a descarregar automaticamente no enquadramento {2}"
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr "{0} ({1}), a descarregar no enquadramento {2}"
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr "Descarregadas {0}/{1} telas"
+
+msgid "Save WMS file"
+msgstr "Gravar ficheiro de Imagem de Fundo"
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+"As fotografias aéreas podem estar desalinhadas. Por favor confirme o "
+"alinhamento utilizando trilhos GPS!"
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+
+msgid "Details..."
+msgstr "Detalhes..."
+
+msgid "Hide this message and never show it again"
+msgstr "Esconder esta mensagem e não a mostrar novamente"
+
 msgid "Customize Color"
 msgstr "Alterar Cor"
 
@@ -9469,6 +9784,9 @@ msgstr "Gravar ficheiro GPX"
 msgid "Imagery fade"
 msgstr "Desvanecimento da imagem de fundo"
 
+msgid "Unsupported imagery type: {0}"
+msgstr "Tipo de imagem não suportada: {0}"
+
 msgid "ERROR"
 msgstr "ERRO"
 
@@ -9489,12 +9807,12 @@ msgstr "São suportadas todas as projeções"
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 "A camada {0} não suporta a nova projeção {1}.\n"
-"{2}\n"
-"Altere de novo a projeção ou remova a camada."
+"As projeções suportadas são: {2}\n"
+"É necessário alterar a projeção novamente ou remover a camada."
 
 msgid "Save Layer"
 msgstr "Gravar Camada"
@@ -9509,7 +9827,7 @@ msgid "Total notes:"
 msgstr "Total de erros reportados:"
 
 msgid "Changes need uploading?"
-msgstr ""
+msgstr "As alterações necessitam de ser enviadas?"
 
 msgid "Data Layer {0}"
 msgstr "Camada de Dados {0}"
@@ -9577,151 +9895,45 @@ msgstr ""
 msgid "Save OSM file"
 msgstr "Gravar ficheiro OSM"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-"{0} não é um argumento TMS válido. Verifique o endereço web:\n"
-"{1}"
+msgid "EPSG:4326 and Mercator projection are supported"
+msgstr "São suportadas as projeções EPSG:4326 e Mercator"
+
+msgid "Validation errors"
+msgstr "Erros de validação"
+
+msgid "No validation errors"
+msgstr "Nenhum erro de validação"
+
+msgid "Set WMS Bookmark"
+msgstr "Criar favorito da imagem de fundo WMS"
 
 msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
-"As camadas TMS não são compatíveis com a projeção {0}.\n"
-"{1}\n"
-"Altere a projeção ou elimine a camada TMS."
+"O JOSM utilizará EPSG:4326 para consultar o servidor, mas os resultados "
+"poderão variar dependendo do servidor WMS"
 
-msgid "Auto Zoom"
-msgstr "Enquadramento Automático"
+msgid "Correlate to GPX"
+msgstr "Correlacionar com GPX"
 
-msgid "Auto load tiles"
-msgstr "Carregar automaticamente as telas"
+msgid "Invalid timezone"
+msgstr "Fuso horário inválido"
 
-msgid "Show Errors"
-msgstr "Mostrar Erros"
+msgid "Invalid offset"
+msgstr "Alinhamento inválido"
 
-msgid "Load Tile"
-msgstr "Carregar Tela"
+msgid "Correlate images with GPX track"
+msgstr "Corresponder imagens com o trilho GPX"
 
-msgid "Show Tile Info"
-msgstr "Ver Informação da Tela"
+msgid "Try Again"
+msgstr "Tentar de Novo"
 
-msgid "Load All Tiles"
-msgstr "Carregar Todas as Telas"
+msgid "No images could be matched!"
+msgstr "Não foi possível corresponder nenhuma imagem!"
 
-msgid "Load All Error Tiles"
-msgstr "Carregar Todas as Telas com Erros"
-
-msgid "Increase zoom"
-msgstr "Aproximar enquadramento"
-
-msgid "Decrease zoom"
-msgstr "Afastar enquadramento"
-
-msgid "Snap to tile size"
-msgstr "Enquadrar na resolução das telas"
-
-msgid "Flush Tile Cache"
-msgstr ""
-"Eliminar ficheiros temporários das telas (pode demorar alguns minutos)"
-
-msgid "zoom in to load any tiles"
-msgstr "aproximar o enquadramento para carregar qualquer tela"
-
-msgid "zoom in to load more tiles"
-msgstr "aproximar o enquadramento para carregar mais telas"
-
-msgid "increase zoom level to see more detail"
-msgstr "aproxime o enquadramento para ver mais detalhes"
-
-msgid "No tiles at this zoom level"
-msgstr "Sem telas a este nível"
-
-msgid "Current zoom: {0}"
-msgstr "Aproximação atual: {0}"
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr "Escala do pixel: {0}"
-
-msgid "Best zoom: {0}"
-msgstr "Melhor aproximação: {0}"
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr "Camada TMS ({0}) no nível de zoom {1}"
-
-msgid "EPSG:4326 and Mercator projection are supported"
-msgstr "São suportadas as projeções EPSG:4326 e Mercator"
-
-msgid "Validation errors"
-msgstr "Erros de validação"
-
-msgid "No validation errors"
-msgstr "Nenhum erro de validação"
-
-msgid "Blank Layer"
-msgstr "Camada Vazia (apenas para importar dados)"
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr "Descarregadas {0}/{1} telas"
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr "Camada WMS ({0}), a descarregar automaticamente no enquadramento {1}"
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr "Camada WMS ({0}), a descarregar no enquadramento {1}"
-
-msgid "Download visible tiles"
-msgstr "Descarregar telas visíveis"
-
-msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-"A área pedida é demasiado grande. Por favor aumente o enquadramento (zoom) "
-"ou altere a resolução"
-
-msgid "Change resolution"
-msgstr "Alterar resolução"
-
-msgid "Reload erroneous tiles"
-msgstr "Tornar a carregar telas com erros"
-
-msgid "Alpha channel"
-msgstr "Canal Alfa"
-
-msgid "Automatically change resolution"
-msgstr "Alterar automaticamente a resolução"
-
-msgid "Set WMS Bookmark"
-msgstr "Criar favorito da imagem de fundo WMS"
-
-msgid "Automatic downloading"
-msgstr "Descarregamento automático"
-
-msgid "Zoom to native resolution"
-msgstr "Enquadrar na resolução nativa"
-
-msgid "Supported projections are: {0}"
-msgstr "As projeções suportadas são: {0}"
-
-msgid "Unsupported WMS file version; found {0}, expected {1}"
-msgstr "Versão de ficheiro WMS não suportada; encontrada {0}, esperada {1}"
-
-msgid "Save WMS file"
-msgstr "Gravar ficheiro de Imagem de Fundo"
-
-msgid "Correlate to GPX"
-msgstr "Correlacionar com GPX"
-
-msgid "GPX Files (*.gpx *.gpx.gz)"
-msgstr "Ficheiros GPX (*.gpx *.gpx.gz)"
+msgid "GPX Files (*.gpx *.gpx.gz)"
+msgstr "Ficheiros GPX (*.gpx *.gpx.gz)"
 
 msgid "File {0} is loaded yet under the name \"{1}\""
 msgstr "O ficheiro {0} já está carregado com o nome \"{1}\""
@@ -9811,24 +10023,9 @@ msgstr "Fuso horário: "
 msgid "Offset:"
 msgstr "Alinhamento:"
 
-msgid "Correlate images with GPX track"
-msgstr "Corresponder imagens com o trilho GPX"
-
 msgid "Correlate"
 msgstr "Corresponder"
 
-msgid "Invalid timezone"
-msgstr "Fuso horário inválido"
-
-msgid "Invalid offset"
-msgstr "Alinhamento inválido"
-
-msgid "Try Again"
-msgstr "Tentar de Novo"
-
-msgid "No images could be matched!"
-msgstr "Não foi possível corresponder nenhuma imagem!"
-
 msgid "No gpx selected"
 msgstr "Nenhum GPX selecionado"
 
@@ -9945,8 +10142,8 @@ msgstr[1] "{0} estão geo-posicionadas."
 
 msgid "{0} has updated GPS data."
 msgid_plural "{0} have updated GPS data."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} tem dados GPS atualizados."
+msgstr[1] "{0} têm dados GPS atualizados."
 
 msgid "Delete image file from disk"
 msgstr "Eliminar ficheiro da imagem do disco"
@@ -10047,9 +10244,6 @@ msgstr ""
 "\n"
 "Tempo GPS: {0}"
 
-msgid "JPEG images (*.jpg)"
-msgstr "Imagens JPEG (*.jpg)"
-
 msgid "Show thumbnails"
 msgstr "Mostrar miniaturas das imagens"
 
@@ -10118,9 +10312,6 @@ msgstr "metros"
 msgid "Maximum area per request:"
 msgstr "Área máxima por pedido:"
 
-msgid "sq km"
-msgstr "km quadrados"
-
 msgid "Download near:"
 msgstr "Descarregar perto de:"
 
@@ -10249,7 +10440,7 @@ msgstr[0] "{0} consiste no marcador {1}"
 msgstr[1] "{0} consiste nos marcadores {1}"
 
 msgid "No existing audio markers in this layer to offset from."
-msgstr ""
+msgstr "Não existem marcadores áudio nesta camada."
 
 msgid "Show Text/Icons"
 msgstr "Mostrar Texto/Ícones"
@@ -10336,6 +10527,8 @@ msgid ""
 "Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
 "''{2}'' instead."
 msgstr ""
+"Foi encontrado em desuso ''{0}'' em ''{1}'' que será removido brevemente. Em "
+"vez disso use ''{2}''."
 
 msgid "Illegal dash pattern, values must be positive"
 msgstr "Padrão de tracejado inválido. Os valores têm de ser positivos."
@@ -10875,9 +11068,6 @@ msgstr "Fechar a janela de preferências e não gravar as alterações"
 msgid "Save the preferences and close the dialog"
 msgstr "Gravar as preferências e fechar a janela"
 
-msgid "Download plugins"
-msgstr "Descarregar módulos"
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 "É necessário reiniciar o JOSM para poder utilizar as novas definições."
@@ -10885,6 +11075,9 @@ msgstr ""
 msgid "Would you like to restart now?"
 msgstr "Quer reiniciar agora?"
 
+msgid "Download plugins"
+msgstr "Descarregar módulos"
+
 msgid "Icon paths:"
 msgstr "Diretório de ícones:"
 
@@ -11011,13 +11204,14 @@ msgid "Strange toolbar value: {0}"
 msgstr "Valor da barra de ferramentas estranho: {0}"
 
 msgid "Toolbar action {0} overwritten: {1} gets {2}"
-msgstr ""
+msgstr "Ação da barra de ferramentas {0} substituída: {1} obtém {2}"
 
 msgid "Registered toolbar action without name: {0}"
 msgstr "Ação da barra de ferramentas registada sem nome: {0}"
 
 msgid "Registered toolbar action {0} overwritten: {1} gets {2}"
 msgstr ""
+"Ação da barra de ferramentas registada {0} substituída: {1} obtém {2}"
 
 msgid "Toolbar: {0}"
 msgstr "Barra de ferramentas: {0}"
@@ -11164,7 +11358,7 @@ msgid "Advanced Background: Changed"
 msgstr "Fundo Avançado: Alterado"
 
 msgid "Advanced Background: NonDefault"
-msgstr ""
+msgstr "Fundo Avançado: Não-Padrão"
 
 msgid "Current value is default."
 msgstr "O valor atual é o valor de origem."
@@ -11340,7 +11534,7 @@ msgid "Draw inactive layers in other color"
 msgstr "Mostrar camadas inativas noutra cor"
 
 msgid "Display discardable keys"
-msgstr ""
+msgstr "Mostrar chaves descartáveis"
 
 msgid "Highlight target ways and nodes"
 msgstr "Destacar linhas e nós alvo ao selecionar ou desenhar"
@@ -11623,13 +11817,13 @@ msgid "Audio waypoint labelling"
 msgstr "Informações em pontos de trilhos GPS com áudio associado"
 
 msgid "Incorrect waypoint label pattern: {0}"
-msgstr ""
+msgstr "Padrão de etiqueta do ponto do trilho GPS incorreto: {0}"
 
 msgid "Incorrect pattern"
 msgstr "Padrão incorreto"
 
 msgid "Incorrect audio waypoint label pattern: {0}"
-msgstr ""
+msgstr "Padrão de etiqueta do ponto do áudio incorreto: {0}"
 
 msgid "Show splash screen at startup"
 msgstr "Mostrar janela de carregamento (splash screen) ao iniciar o JOSM"
@@ -11657,6 +11851,8 @@ msgstr "Mostrar datas no formato ISO"
 
 msgid "Use native file choosers (nicer, but do not support file filters)"
 msgstr ""
+"Usar janela de abrir ficheiros nativa (mais agradável, mas não mostra apenas "
+"os ficheiros que o JOSM pode abrir, mas sim todos)"
 
 msgid "Show localized name in selection lists, if available"
 msgstr ""
@@ -11688,6 +11884,8 @@ msgid ""
 "Use file choosers that behave more like native ones. They look nicer but do "
 "not support some features like file filters"
 msgstr ""
+"Usar tipo de janela ao abrir ficheiros nativa do sistema operativo. Não "
+"suporta funcionalidades como abrir apenas os ficheiros suportados pelo JOSM."
 
 msgid "Look and Feel"
 msgstr "Aparência e Interação"
@@ -11774,6 +11972,21 @@ msgstr "Mostrar limites"
 msgid "No bounding box was found for this layer."
 msgstr "Não foi encontrada nenhuma caixa de limites para esta camada."
 
+msgid "1. Enter getCapabilities URL"
+msgstr "1. Introduzir o URL de getCapabilities"
+
+msgid "2. Enter name for this layer"
+msgstr "2. Introduzir o nome desta camada"
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr "desvanecimento da imagem de fundo"
 
@@ -11792,6 +12005,19 @@ msgstr "Nitidez Agressiva"
 msgid "Sharpen (requires layer re-add): "
 msgstr "Melhorar nitidez (necessário re-adicionar camada): "
 
+msgid "Tile cache directory: "
+msgstr "Pasta para armazenar as telas temporariamente: "
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+"Tamanho máximo da cache no disco (por cada serviço de imagens aéreas) em MB: "
+
+msgid "Maximum number of objects in memory cache: "
+msgstr "Número máximo de objetos na cache da memória: "
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr "Preferências das Imagens de Fundo"
 
@@ -11815,6 +12041,9 @@ msgstr "Fornecedores de imagens de fundo"
 msgid "Offset bookmarks"
 msgstr "Favoritos de alinhamentos"
 
+msgid "Cache contents"
+msgstr "Conteúdos da cache"
+
 msgid "Imagery Background: Default"
 msgstr "Imagens de Fundo: Padrão"
 
@@ -11859,9 +12088,6 @@ msgstr "Endereço web da licença EULA não disponível: {0}"
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr "Endereço web da licença EULA incorreto: {0}"
 
-msgid "Projection"
-msgstr "Projeção"
-
 msgid "Layer"
 msgstr "Nível"
 
@@ -11886,17 +12112,11 @@ msgstr "Nível máximo enquadramento: "
 msgid "Add to slippymap chooser: "
 msgstr "Mostrar em Descarregar do OSM>sinal + no canto sup.dir.: "
 
-msgid "Tile cache directory: "
-msgstr "Pasta para armazenar as telas temporariamente: "
-
 msgid "Maximum concurrent downloads: "
-msgstr ""
+msgstr "Descarregamentos máximos atuais: "
 
 msgid "Maximum concurrent downloads per host: "
-msgstr ""
-
-msgid "Maximum elements in disk cache: "
-msgstr ""
+msgstr "Descarregamentos máximos atuais por host: "
 
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
@@ -11905,20 +12125,11 @@ msgstr ""
 "Esta camada não suporta nenhuma das projeções do JOSM,\n"
 "por isso não pode usá-la. Esta mensagem não aparecerá novamente."
 
-msgid "Downloader:"
-msgstr "Gestor de descargas:"
-
 msgid "Simultaneous connections:"
 msgstr "Ligações simultâneas:"
 
-msgid "Overlap tiles"
-msgstr "Sobrepor telas:"
-
-msgid "% of east:"
-msgstr "% para este:"
-
-msgid "% of north:"
-msgstr "% para norte:"
+msgid "Tile size:"
+msgstr "Tamanho da tela:"
 
 msgid "Auto save enabled"
 msgstr "Criar uma cópia de segurança automaticamente"
@@ -12313,7 +12524,7 @@ msgid "Projection bounds (in degrees)"
 msgstr "Limites da projeção (em graus)"
 
 msgid "Sets the SRS=... parameter in the WMS request"
-msgstr ""
+msgstr "Determina o parâmetro SRS=... no pedido WMS"
 
 msgid "Gauß-Krüger"
 msgstr "Gauss-Krüger"
@@ -12612,12 +12823,14 @@ msgid "Check interval (minutes):"
 msgstr "A cada (minutos):"
 
 msgid "Max age for closed notes (days):"
-msgstr ""
+msgstr "Idade máxima de erros reportados fechados (dias):"
 
 msgid ""
 "Specifies the number of days a note needs to be closed to no longer be "
 "downloaded"
 msgstr ""
+"Especifique o número de dias máximo desde que um erro reportado que tenha "
+"sido fechado não seja descarregado"
 
 msgid "Failed to retrieve OAuth Access Token from credential manager"
 msgstr ""
@@ -12965,6 +13178,14 @@ msgstr "Aplicar Etiquetas"
 msgid "New relation"
 msgstr "Criar relação"
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] "Alterar {0} objeto"
@@ -13026,11 +13247,15 @@ msgid ""
 "Broken tagging preset \"{0}-{1}\" - Java method given in ''values_from'' is "
 "not \"{2}\""
 msgstr ""
+"Modelo de etiquetas corrompido \"{0}-{1}\" - O método Java fornecido em "
+"''values_from'' não é \"{2}\""
 
 msgid ""
 "Broken tagging preset \"{0}-{1}\" - Java method given in ''values_from'' "
 "threw {2} ({3})"
 msgstr ""
+"Modelo de etiquetas corrompido \"{0}-{1}\" - O método Java fornecido em "
+"''values_from'' obteve {2} ({3})"
 
 msgid ""
 "Broken tagging preset \"{0}-{1}\" - number of items in ''display_values'' "
@@ -13079,6 +13304,9 @@ msgstr "Mostra a janela de procura de modelos de etiquetas"
 msgid "Search presets"
 msgstr "Procurar modelo de etiquetas"
 
+msgid "Presets"
+msgstr "Modelos de Etiquetas"
+
 msgid "Search for objects by preset"
 msgstr "Procurar objetos pela etiqueta"
 
@@ -13192,7 +13420,7 @@ msgstr ""
 "Atualmente é ''{1}''."
 
 msgid "Illegal value for attribute ''{0}'' of type double. Got ''{1}''."
-msgstr ""
+msgstr "Valor do atributo ''{0}'' ilegal de tipo duplo. Obtido ''{1}''."
 
 msgid ""
 "Illegal value for mandatory attribute ''{0}'' of type boolean. Got ''{1}''."
@@ -13293,6 +13521,8 @@ msgid ""
 "Unexpected format of error header for conflict in changeset update. Got "
 "''{0}''"
 msgstr ""
+"Formato inesperado no cabeçalho do erro para o conflito na atualização do "
+"conjunto de alterações. Foi obtido ''{0}''"
 
 msgid "Illegal longitude value for parameter ''{0}'', got {1}"
 msgstr "Valor de longitude incorreto do parâmetro ''{0}'', obteve-se {1}"
@@ -13385,6 +13615,9 @@ msgstr "<html>Não foi possível ler os ficheiros.<br>O erro é:<br>{0}</html>"
 msgid "GeoJSON Files"
 msgstr "Ficheiros GeoJSON"
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr "Camada ''{0}'' não suportada"
 
@@ -13831,6 +14064,8 @@ msgid ""
 "Normalizing value of attribute ''version'' of element {0} to {2}, API "
 "version is ''{3}''. Got {1}."
 msgstr ""
+"A normalizar o valor do atributo ''version'' do elemento {0} para {2}, a "
+"versão da API é ''{3}''. Obtido {1}."
 
 msgid "Unknown or unsupported API version. Got {0}."
 msgstr "Versão API desconhecida ou não suportada. Obteve-se {0}."
@@ -13972,6 +14207,9 @@ msgstr "Ficheiros de Servidor OSM comprimidos em zip"
 msgid "WMS Files (*.wms)"
 msgstr "Ficheiros WMS (*.wms)"
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr "Versão de ficheiro WMS não suportada; encontrada {0}, esperada {1}"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -14045,25 +14283,30 @@ msgid "Read protocol version"
 msgstr "Ler a versão do protocolo"
 
 msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
-msgstr ""
+msgstr "Não foi possível iniciar o controlo remoto IPv4 na porta {0}: {1}"
 
 msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
+"Não foi possível iniciar o servidor do controlo remoto IPv4 na porta {0}: {1}"
 
 msgid "RemoteControl::Accepting remote connections on {0}:{1}"
-msgstr ""
+msgstr "Controlo Remoto::a aceitar ligações de controlo remoto em {0}:{1}"
 
 msgid "RemoteControl::Server {0}:{1} stopped."
-msgstr ""
+msgstr "Controlo Remoto::Servidor{0}:{1} parado."
 
 msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
+"Não foi possível iniciar o servidor https do controlo remoto  IPv4 na porta "
+"{0}: {1}"
 
 msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
+"Não foi possível iniciar o servidor https do controlo remoto  IPv6 na porta "
+"{0}: {1}"
 
 msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
-msgstr ""
+msgstr "Controlo Remoto::a aceitar ligações seguras em {0}:{1}"
 
 msgid "Remote Control has been asked to create a new node."
 msgstr "Foi pedido ao Controlo Remoto para criar um nó."
@@ -14404,6 +14647,19 @@ msgid_plural ""
 msgstr[0] "O módulo {0} necessita de outro módulo que não foi encontrado:"
 msgstr[1] "O módulo {0} necessita de {1} módulos que não foram encontrados:"
 
+msgid "Download and restart"
+msgstr "Descarregar e reiniciar"
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] "Clique para descarregar o módulo que falta e reiniciar o JOSM"
+msgstr[1] "Clique para descarregar os módulos que faltam e reiniciar o JOSM"
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] "Clique para continuar sem este módulo"
+msgstr[1] "Clique para continuar sem estes módulos"
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -14624,6 +14880,8 @@ msgid ""
 "Failed to create plugin directory ''{0}''. Cannot cache plugin list from "
 "plugin site ''{1}''."
 msgstr ""
+"Não foi possível criar o diretório de plug-ins ''{0}''. Não é possível "
+"guardar em cache a lista de plug-ins do site ''{1}''."
 
 msgid "Writing plugin list to local cache ''{0}''"
 msgstr ""
@@ -15623,6 +15881,9 @@ msgstr "Atualizar"
 msgid "Update directory listing."
 msgstr "Atualizar listagem do diretório."
 
+msgid "View"
+msgstr "Ver"
+
 msgid "Blue:"
 msgstr "Azul:"
 
@@ -15662,11 +15923,11 @@ msgstr "MapQuest Open Aerial"
 msgid "OpenStreetMap GPS Traces"
 msgstr "Trilhos GPS no OpenStreetMap"
 
-msgid "OpenStreetMap (Mapnik)"
-msgstr "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
+msgstr ""
 
 msgid "skobbler"
-msgstr ""
+msgstr "skobbler"
 
 msgid "OpenStreetMap (Mapnik Black & White)"
 msgstr "OpenStreetMap (Mapnik Preto e Branco)"
@@ -15674,9 +15935,6 @@ msgstr "OpenStreetMap (Mapnik Preto e Branco)"
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr "OpenStreetMap (Mapnik, sem etiquetas)"
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr "OpenCycleMap"
 
@@ -15693,22 +15951,22 @@ msgid "Cambodia, Laos, Thailand, Vietnam bilingual"
 msgstr "Camboja, Laos, Tailândia Vietname bilingue"
 
 msgid "osmfr"
-msgstr ""
+msgstr "osmfr"
 
 msgid "OpenPT Map (overlay)"
 msgstr "OpenPublicTtransport Map (sobreposição)"
 
 msgid "Strava cycling heatmap"
-msgstr ""
+msgstr "Strava cycling heatmap"
 
 msgid "Strava running heatmap"
-msgstr ""
+msgstr "Strava running heatmap"
 
 msgid "Locator Overlay"
 msgstr "Locator - Sobreposição"
 
 msgid "QA No Address"
-msgstr ""
+msgstr "QA No Address"
 
 msgid "Waymarked Trails: Hiking"
 msgstr "Waymarked Trails: Caminhadas"
@@ -15762,13 +16020,13 @@ msgid "basemap.at"
 msgstr "basemap.at"
 
 msgid "basemap.at Orthofoto"
-msgstr ""
+msgstr "basemap.at Ortofoto"
 
 msgid "Graz: Basiskarte (base map)"
 msgstr "Graz: Basiskarte (mapa base)"
 
 msgid "Tiris: DGM (Terrain model)"
-msgstr ""
+msgstr "Tiris: DGM (Terrain model)"
 
 msgid "Tiris: DOM (Surface model)"
 msgstr "Tiris: DOM (Modelo de superfície)"
@@ -15785,6 +16043,9 @@ msgstr "Viena: Ortofoto (imagens aéreas)"
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr "VoGIS: Echtfarbenbild 2012 (12cm)"
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr "VoGIS: Flächenwidmungsplan"
 
@@ -15799,12 +16060,18 @@ msgid ""
 msgstr ""
 "AGIV(laanderen) imagens aéreas (cobre também a região de Bruxelas) (2013)"
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr "SPW(allonie) PICC numerical imagery"
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr "SPW(allonie) 2012 imagens aéreas"
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr "SPW(allonie) 2009 imagens aéreas"
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr "IBGE Mapa de Setores Urbanos (Brasil)"
 
@@ -15841,12 +16108,18 @@ msgstr "Checoslováquia  RUIAN - parcelas"
 msgid "Czech pLPIS"
 msgstr "Checoslováquia pLPIS"
 
-msgid "Fugro (Denmark)"
-msgstr "Fugro (Dinamarca)"
-
 msgid "Geodatastyrelsen (Denmark)"
 msgstr "Geodatastyrelsen (Dinamarca)"
 
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr "Geodatastyrelsen DTK Kort25"
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr "Geodatastyrelsen Skyggekort 1.6m"
+
+msgid "Geodatastyrelsen Skærmkort"
+msgstr "Geodatastyrelsen Skærmkort"
+
 msgid "Stevns (Denmark)"
 msgstr "Stevns (Dinamarca)"
 
@@ -15869,7 +16142,10 @@ msgid "Estonia Forestry (Maaamet)"
 msgstr "Estónia - Florestas (Maaamet)"
 
 msgid "BANO"
-msgstr ""
+msgstr "BANO"
+
+msgid "BD Carthage"
+msgstr "BD Carthage"
 
 msgid "Bordeaux - 2012"
 msgstr "Bordéus - 2012"
@@ -15895,8 +16171,8 @@ msgstr "Géobretagne - Morbihan 2010"
 msgid "Géolittoral - Orthophotos 2000"
 msgstr "Géolittoral - Ortofotos 2000"
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
-msgstr "Géolittoral V2 - Ortofotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
+msgstr ""
 
 msgid "Géolittoral - Sentiers"
 msgstr "Géolittoral - Sentiers"
@@ -15910,6 +16186,9 @@ msgstr "Loire-Atlantique - Ortofotos 2012 - 20 cm"
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 
+msgid "Route 500™©®"
+msgstr "Route 500"
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr "Toulouse - Orthophotoplan 2013"
 
@@ -15922,19 +16201,15 @@ msgstr "Toulouse - Orthophotoplan 2007"
 msgid "Tours - Orthophotos 2013"
 msgstr "Tours - Ortofotos 2013"
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr "Tours - Ortofotos 2008-2010"
-
-msgid "Tours - Orthophotos 2008"
-msgstr "Tours - Ortofotos 2008"
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
 msgstr ""
+"Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
+"- 1 m"
 
 msgid "Hike & Bike"
-msgstr ""
+msgstr "Hike & Bike"
 
 msgid "OpenStreetMap (Sorbian Language)"
 msgstr "OpenStreetMap (Língua Sorábia)"
@@ -15948,6 +16223,9 @@ msgstr "Hamburgo (20 cm)"
 msgid "Hamburg (DK5)"
 msgstr "Hamburgo (DK5)"
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr "Baviera (2 m)"
 
@@ -15983,11 +16261,8 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr "Maps4BW (LGL-BW, www.lgl-bw.de)"
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr "NRW-Atlas: Automatisierte Liegenschaftskarte (Vetorial)"
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
-msgstr "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
+msgstr "NRW-Atlas: ALKIS"
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
 msgstr "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -16017,6 +16292,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr "Irlanda Bartholomew Quarto de Polegada1940"
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr "Baronatos e Paróquias Civis da Irlanda - Memorial Atlas"
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr "Atlas Memorial da Irlanda (1901) L.J. Richards"
+
 msgid "OSMIE Townlands"
 msgstr "OSMIE Townlands"
 
@@ -16032,60 +16313,6 @@ msgstr "OSMIE Baronatos"
 msgid "OSMIE Political"
 msgstr "OSMIE Político"
 
-msgid "Ireland EEA GMES Urban Atlas"
-msgstr "Irlanda EEA GMES Atlas Urbano"
-
-msgid "Ireland EEA CORINE 2006"
-msgstr "Irlanda EEA CORINE 2006"
-
-msgid "Antrim Civil Parishes and Baronies"
-msgstr "Antrim - Paróquias Civis e Baronatos"
-
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
-msgstr "Atlas Memorial da Irlanda (1901) L.J. Richards"
-
-msgid "Carlow Civil Parishes and Baronies"
-msgstr "Carlow - Paróquias Civis e Baronatos"
-
-msgid "Clare Civil Parishes and Baronies"
-msgstr "Clare - Paróquias Civis e Baronatos"
-
-msgid "Dublin Civil Parishes and Baronies"
-msgstr "Dublin - Paróquias Civis e Baronatos"
-
-msgid "Fermanagh Civil Parishes and Baronies"
-msgstr "Fermanagh - Paróquias Civis e Baronatos"
-
-msgid "Galway Civil Parishes and Baronies"
-msgstr "Galway - Paróquias Civis e Baronatos"
-
-msgid "Kildare Civil Parishes and Baronies"
-msgstr "Kildare - Paróquias Civis e Baronatos"
-
-msgid "Leitrim Civil Parishes and Baronies"
-msgstr "Leitrim - Paróquias Civis e Baronatos"
-
-msgid "Longford Civil Parishes and Baronies"
-msgstr "Longford - Paróquias Civis e Baronatos"
-
-msgid "Offaly Civil Parishes and Baronies"
-msgstr "Offaly - Paróquias Civis e Baronatos"
-
-msgid "Sligo Civil Parishes and Baronies"
-msgstr "Sligo - Paróquias Civis e Baronatos"
-
-msgid "Tyrone Civil Parishes and Baronies"
-msgstr "Tyrone - Paróquias Civis e Baronatos"
-
-msgid "Westmeath Civil Parishes and Baronies"
-msgstr "Westmeath - Paróquias Civis e Baronatos"
-
-msgid "Wexford Civil Parishes and Baronies"
-msgstr "Wexford - Paróquias Civis e Baronatos"
-
-msgid "Wicklow Civil Parishes and Baronies"
-msgstr "Wicklow - Paróquias Civis e Baronatos"
-
 msgid "Lodi - Italy"
 msgstr "Lodi - Itália"
 
@@ -16119,6 +16346,9 @@ msgstr "50cm ortho - Letónia"
 msgid "20cm ortho - Latvia - Coastline"
 msgstr "20cm ortho - Letónia - Linha Costeira"
 
+msgid "1.cikla ortofotokarte - Latvia"
+msgstr "1.cikla ortofotokarte - Latvia"
+
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Lituânia)"
 
@@ -16134,6 +16364,9 @@ msgstr "Luxemburgo Inspire - Caminho de Ferro"
 msgid "Luxembourg Inspire Roads"
 msgstr "Luxemburgo Inspire - Estradas"
 
+msgid "Luxembourg Inspire Water"
+msgstr ""
+
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Delta do Níger Outubro 2012 Landsat"
 
@@ -16149,9 +16382,15 @@ msgstr "Pangasinán/Bulacan (Filipinas Alta Resolução)"
 msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr "Geoportal 2: Ortofotomapa (imagem aérea)"
 
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgstr "Geoportal 2: Ortofotomapa (imagem aérea) WMTS"
+
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr "Geoportal 2: PRNG (nomes geográficos)"
 
+msgid "Geoportal 2: ISOK hillshade"
+msgstr "Geoportal 2: ISOK hillshade"
+
 msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr "Będzin: Ortofotomapa 2013 (imagem aérea)"
 
@@ -16161,15 +16400,27 @@ msgstr "Będzin: Budynki (edifícios)"
 msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr "Bytom: Ortofotomapa 2012 (imagem aérea)"
 
+msgid "Bytom: Fotoplan 2014 (aerial image)"
+msgstr "Bytom: Fotoplan 2014 (imagens aéreas)"
+
 msgid "Bytom: Budynki (buildings)"
 msgstr "Bytom: Budynki (edifícios)"
 
 msgid "Chorzów: Budynki (buildings)"
 msgstr "Chorzów: Budynki (edifícios)"
 
+msgid "Częstochowa: Budynki (buildings)"
+msgstr "Częstochowa: Budynki (edifícios)"
+
 msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr "Częstochowa: Ortofotomapa 2011 (imagem aérea)"
 
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgstr "Częstochowa: Ortofotomapa 2013 (imagens aéreas)"
+
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgstr "Częstochowa: Ortofotomapa 2014 (imagens aéreas)"
+
 msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr "Gliwice: Ortofotomapa 2013 (imagem aérea)"
 
@@ -16179,9 +16430,45 @@ msgstr "Gliwice: Budynki (edifícios)"
 msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr "Katowice: Ortofotomapa (imagem aérea)"
 
+msgid "Katowice: Budynki (buildings)"
+msgstr "Katowice: Budynki (edifícios)"
+
+msgid "Łódź: Budynki (buildings)"
+msgstr "Łódź: Budynki (edifícios)"
+
 msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr "Łódź: Ortofotomapa (imagem aérea)"
 
+msgid "Powiat dębicki: Budynki (buildings)"
+msgstr "Condado de Dębica: Budynki (edifícios)"
+
+msgid "Powiat lubaczowski: Budynki (buildings)"
+msgstr "Polónia, Condado de Lubaczów: Edifícios"
+
+msgid "Powiat łańcucki: Budynki (buildings)"
+msgstr "Polónia, Condado de Łańcut: Edifícios"
+
+msgid "Powiat poznański: Budynki (buildings)"
+msgstr "Condado de Poznań: Budynki (edifícios)"
+
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgstr "Powiat poznański: Ortofotomapa (imagens aéreas)"
+
+msgid "Powiat rzeszowski: Budynki (buildings)"
+msgstr "Polónia, Condado de Rzeszów: Edifícios"
+
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgstr "Polónia, Condado de Rzeszów: Ortofotomapa (imagens aéreas)"
+
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr "Polónia, Condado de Stalowa Wola: Edifícios"
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr "Polónia, Przemyśl: Edifícios"
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgstr "Polónia, Przemyśl: Ortofotomapa (imagens aéreas)"
+
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
 msgstr "Ruda Śląska: Ortofotomapa (imagem aérea)"
 
@@ -16194,9 +16481,18 @@ msgstr "Rzeszów: Budynki (edifícios)"
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr "Siemianowice Śląskie: Ortofotomapa (imagem aérea)"
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr "Siemianowice Śląskie: Budynki (edifícios)"
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr "Świętochłowice: Ortofotomapa 2008 (imagens aéreas)"
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr "Świętochłowice: Ortofotomapa 2009 (imagem aérea)"
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr "Świętochłowice: Ortofotomapa 2012 (imagens aéreas)"
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr "Zabrze: Ortofotomapa 2011 (imagem aérea)"
 
@@ -16326,7 +16622,22 @@ msgstr "Bonvillars Ortofoto 2013"
 msgid "Fiez Orthophoto 2013"
 msgstr "Fiez Ortofoto 2013"
 
-msgid "MSR Maps Topo"
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
+msgid "MSR Maps Topo"
 msgstr "Mapas MSR - Topográfico"
 
 msgid "MSR Maps Urban"
@@ -16341,8 +16652,8 @@ msgstr "USGS Imagens de Satélite em Grande Escala"
 msgid "TIGER 2012 Roads Overlay"
 msgstr "TIGER 2012 Estradas sobrepostas"
 
-msgid "New & Misaligned TIGER Roads (2014)"
-msgstr "Estradas Novas e Desalinhadas TIGER (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
+msgstr ""
 
 msgid "MassGIS L3 Parcels"
 msgstr "MassGIS L3 Parcelas"
@@ -16680,9 +16991,14 @@ msgstr ""
 "Fornece uma linha de comandos e permite a criação de comandos. Ver o link "
 "para comandos padrão (arc, cicle, etc.)"
 
-msgid "(Warning: Experimental!) Tool for conflating (merging) data."
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
 msgstr ""
 
+msgid "(Warning: Experimental!) Tool for conflating (merging) data."
+msgstr "(Aviso: Experimental!) Ferramenta para unir dados."
+
 msgid "Create a grid of ways."
 msgstr "Criar uma grelha de linhas."
 
@@ -16783,14 +17099,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-"Este módulo experimental permite que o JOSM guarde as imagens de satélite "
-"temporárias (cache) em ficheiro de bases de dados e não em diretórios com "
-"milhares de ficheiros"
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -16863,11 +17171,14 @@ msgid ""
 "create, close,invalidate, re-open and comment bug reports by using this "
 "plugin."
 msgstr ""
+"O módulo MapDust mostra os erros reportados do MapDust no mapa. Pode "
+"reportar novos erros, fechá-los, invalidá-los, reabri-los e comentá-los "
+"utilizando este módulo."
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
-"Permite usar fotografias georreferenciadas do site mapillary.com (licença "
-"ODbL usada pelo OpenStreetMap)"
+"Permite usar fotografias de locais do site mapillary.com para ajudar a "
+"melhorar os mapas."
 
 msgid ""
 "Provide a measurement dialog and a layer to measure length and angle of "
@@ -16884,11 +17195,6 @@ msgstr "Combinar partes sobrepostas de linhas."
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr "Adiciona proibida viragem à esquerda em conjuntos de 4 ou 5 linhas"
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-"Simplifica o descarregamento de diferentes APIs de leitura, através de "
-"servidores espelhos do OpenStreetMap (com conteúdo duplicado do OSM)."
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 "Permite atribuir etiquetas a todos os objetos em qualquer área selecionada "
@@ -16987,7 +17293,7 @@ msgid ""
 msgstr ""
 
 msgid "Read and write osmosis poly filter files"
-msgstr ""
+msgstr "Ler e gravar ficheiros de filtros poly osmosis"
 
 msgid "Adds map printing to JOSM"
 msgstr "Permite imprimir mapas diretamente do JOSM"
@@ -17004,6 +17310,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr "Simplifica o mapeamento e edição de rotas de transportes públicos."
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr "Painel de criação de relações e multi-polígonos."
 
@@ -17021,6 +17335,8 @@ msgid ""
 "Renders routes (bus, hiking trails, bicycle routes, ..). Route types must be "
 "defined in routes.xml file in plugin directory"
 msgstr ""
+"Renderiza rotas (autocarro, trilhos de montanhismo, bicileta...).Os tipos de "
+"rota devem ser definidos no ficheiro routes.xml na pasta de plug-ins."
 
 msgid "Provides routing capabilities."
 msgstr ""
@@ -17056,6 +17372,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr "Editar funcionalidades para o OpenSeaMap"
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -17182,11 +17501,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr "Permite pesquisar por pontos do trilho em ficheiros GPX importados."
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-"Permite selecionar linhas contíguas que não terminem em intersecções com "
-"outras linhas"
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr "Simplifica a ligação de objetos do OSM a artigos da Wikipédia"
 
@@ -17228,7 +17542,7 @@ msgid "paving_stones"
 msgstr "blocos de cimento ou argamassa"
 
 msgid "cobblestone"
-msgstr "pedras redondas ou achatadas (paralelos)"
+msgstr "pedras redondas ou achatadas"
 
 msgid "gravel"
 msgstr "cascalho"
@@ -17385,11 +17699,11 @@ msgstr "ambos os lados"
 
 msgctxt "sidewalk"
 msgid "left"
-msgstr "esquerda"
+msgstr "esquerda do sentido da linha"
 
 msgctxt "sidewalk"
 msgid "right"
-msgstr "direita"
+msgstr "direita do sentido da linha"
 
 msgctxt "sidewalk"
 msgid "no"
@@ -17543,7 +17857,7 @@ msgid "terminal"
 msgstr "terminal de acesso à internet"
 
 msgid "Internet access fee"
-msgstr "taxa de utilização internet"
+msgstr "Taxa de utilização de Internet"
 
 msgid "Smoking"
 msgstr "Fumadores"
@@ -17607,6 +17921,14 @@ msgid "basketball"
 msgstr "basquetebol"
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr "voleibol de praia"
+
+msgctxt "sport"
+msgid "billiards"
+msgstr "bilhar"
+
+msgctxt "sport"
 msgid "boules"
 msgstr "boules (boccia, petanca...)"
 
@@ -17631,10 +17953,6 @@ msgid "cricket"
 msgstr "críquete"
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr "críquete em redes (para treino)"
-
-msgctxt "sport"
 msgid "croquet"
 msgstr "croquet"
 
@@ -17651,6 +17969,10 @@ msgid "equestrian"
 msgstr "equestre"
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr "hóquei em campo"
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr "jogos gaélicos"
 
@@ -17667,14 +17989,26 @@ msgid "handball"
 msgstr "andebol"
 
 msgctxt "sport"
-msgid "hockey"
-msgstr "hóquei"
-
-msgctxt "sport"
 msgid "horse_racing"
 msgstr "corridas_de_cavalos"
 
 msgctxt "sport"
+msgid "ice_hockey"
+msgstr "hóquei no gelo"
+
+msgctxt "sport"
+msgid "karting"
+msgstr "karting"
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr "aeródromo de modelismo"
+
+msgctxt "sport"
+msgid "motocross"
+msgstr "motocrosse"
+
+msgctxt "sport"
 msgid "motor"
 msgstr "motorizados"
 
@@ -17687,6 +18021,10 @@ msgid "racquet"
 msgstr "raquete"
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr "râguebi de 13 (rugby league)"
 
@@ -17699,6 +18037,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr "tiro"
 
@@ -17726,6 +18068,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr "ténis"
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr "voleibol"
+
+msgctxt "sport"
+msgid "9pin"
+msgstr "9 pinos"
+
+msgctxt "sport"
+msgid "10pin"
+msgstr "10 pinos"
+
 msgid "Fee"
 msgstr "Tarifa"
 
@@ -17827,19 +18181,19 @@ msgid "leafless"
 msgstr "sem folhas"
 
 msgid "Cycle"
-msgstr ""
+msgstr "Ciclo"
 
 msgid "deciduous"
 msgstr "caducifólias (caem todas as folhas)"
 
 msgid "Plants that are leafless for a certain period during the year."
-msgstr ""
+msgstr "Plantas que não tem folhas durante um certo período do ano."
 
 msgid "evergreen"
 msgstr "folhas persistentes"
 
 msgid "Plants that are never entirely without green foliage."
-msgstr ""
+msgstr "Plantas que nunca estão sem folhas verdes por completo."
 
 msgid "semi_deciduous"
 msgstr "semi-caducifólias (caem folhas mas voltam a nascer rapidamente)"
@@ -17848,6 +18202,8 @@ msgid ""
 "Plants that lose their foliage for a very short period, when old leaves fall "
 "off and new foliage growth is starting."
 msgstr ""
+"Plantas que perdem as folhas durante um curto período. Quando as folhas "
+"antigas caem e as novos começam logo a crescer."
 
 msgid "semi_evergreen"
 msgstr "folhas semi-persistentes"
@@ -17856,9 +18212,11 @@ msgid ""
 "Plants that lose most, but not all, of their foliage for a fraction of the "
 "year."
 msgstr ""
+"Plantas que perdem a maioria das folhas, mas não todas, durante um período "
+"do ano."
 
 msgid "Habitat with evergreen and deciduous vegetation."
-msgstr ""
+msgstr "Habitat com vegetação de folha persistente e caduca."
 
 msgid "bahai"
 msgstr "bahai"
@@ -18059,25 +18417,25 @@ msgstr ""
 "O corpo de água é ocasional (desaparece e aparece conforme as estações)?"
 
 msgid "culvert"
-msgstr ""
+msgstr "tubo de água"
 
 msgid "Water access rules:"
-msgstr ""
+msgstr "Regras de acesso à água:"
 
 msgid "Ship"
-msgstr ""
+msgstr "Navio"
 
 msgid "designated"
-msgstr "designado"
+msgstr "permitido oficialmente"
 
 msgid "Boat"
-msgstr ""
+msgstr "Barco"
 
 msgid "Motorboat"
-msgstr ""
+msgstr "Mota de água"
 
 msgid "Canoe"
-msgstr ""
+msgstr "Canoa"
 
 msgid "Streets"
 msgstr "Estradas"
@@ -18118,6 +18476,9 @@ msgstr "Ligação a Estrada / Caminho Municipal (Terciária)"
 msgid "Unclassified"
 msgstr "Estrada sem classificação oficial"
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr "1 só faixa (mas com lugares de passagem)"
 
@@ -18196,6 +18557,9 @@ msgstr ""
 "Rampa de emergência normalmente em auto-estradas ou estradas com grandes "
 "declives para poder parar um veículo com falha nos travões."
 
+msgid "Raceway"
+msgstr "Pista de Corridas de Veículos a Motor"
+
 msgid "Road (Unknown Type)"
 msgstr "Estrada genérica (quando não se sabe o tipo)"
 
@@ -18356,7 +18720,7 @@ msgstr "em ambos os sentidos"
 
 msgctxt "overtaking"
 msgid "forward"
-msgstr "para a frente"
+msgstr "sentido da linha"
 
 msgctxt "overtaking"
 msgid "backward"
@@ -18697,7 +19061,7 @@ msgid "Pedestrian Crossing"
 msgstr "Passagem de Peões (normalmente c/ passadeira)"
 
 msgid "In case of traffic signals:"
-msgstr ""
+msgstr "No caso de semáforos:"
 
 msgid "Traffic Calming"
 msgstr "Redutor de Velocidade (lombas...)"
@@ -18712,13 +19076,13 @@ msgid "choker"
 msgstr "chocker (não usado em Portugal)"
 
 msgid "cushion"
-msgstr ""
+msgstr "lomba tipo almofada"
 
 msgid "hump"
 msgstr "lomba de velocidade (2-4m; convexa)"
 
 msgid "rumble_strip"
-msgstr ""
+msgstr "faixas sonoras"
 
 msgid "table"
 msgstr "lomba comprida (+3m; plana no meio; normalmente passadeira)"
@@ -18744,6 +19108,12 @@ msgstr "Radar de Controlo de Velocidade"
 msgid "Traffic Mirror"
 msgstr "Espelho Sinalizador de Trânsito"
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr "Cruzamento com nome (raro)"
@@ -18785,7 +19155,7 @@ msgid "Bollard type"
 msgstr "Tipo de barreira"
 
 msgid "rising"
-msgstr ""
+msgstr "pilar automático"
 
 msgid "removable"
 msgstr "removível"
@@ -18935,6 +19305,11 @@ msgstr "Colunata"
 msgid "Avalanche Protector"
 msgstr "Proteção de avalanches"
 
+msgctxt "main group"
+msgid "Water"
+msgstr "Água"
+
+msgctxt "sub group"
 msgid "Water"
 msgstr "Água"
 
@@ -18959,7 +19334,7 @@ msgstr "Nascente"
 msgid ""
 "A point where groundwater naturally flows to the surface of the earth from "
 "underground."
-msgstr ""
+msgstr "Um ponto onde a água nasce naturalmente para a superfície."
 
 msgid "Waterfall"
 msgstr "Queda de água (cascata, salto, catarata)"
@@ -18988,8 +19363,12 @@ msgstr "Reservatório artificial (tanque, albufeira de barragem...)"
 msgid "Covered Reservoir"
 msgstr "Reservatório Coberto"
 
+msgctxt "natural"
+msgid "Water"
+msgstr "Corpo de Água"
+
 msgid "A body of standing water, such as a lake or pond."
-msgstr ""
+msgstr "Um corpo de água, como um lago ou um tanque."
 
 msgid "Water Body"
 msgstr "Corpo de Água"
@@ -19127,11 +19506,125 @@ msgid "Marina"
 msgstr "Marina"
 
 msgid "Dump Station"
-msgstr ""
+msgstr "Estação de Despejo de Esgotos"
 
 msgid "public"
 msgstr "locais públicos (vigiado pela polícia)"
 
+msgid "Marine Fuel"
+msgstr "Combustível Marítimo"
+
+msgid "Agip"
+msgstr "Agip"
+
+msgid "Aral"
+msgstr "Aral"
+
+msgid "Avia"
+msgstr "Avia"
+
+msgid "BP"
+msgstr "BP"
+
+msgid "Chevron"
+msgstr "Chevron"
+
+msgid "Citgo"
+msgstr "Citgo"
+
+msgid "Eni"
+msgstr "Eni"
+
+msgid "Esso"
+msgstr "Esso"
+
+msgid "Exxon"
+msgstr "Exxon"
+
+msgid "Gulf"
+msgstr "Gulf"
+
+msgid "Mobil"
+msgstr "Mobil"
+
+msgid "OMV"
+msgstr "OMV"
+
+msgid "Petro-Canada"
+msgstr "Petro-Canada"
+
+msgid "Pioneer"
+msgstr "Pioneer"
+
+msgid "Q8"
+msgstr "Q8"
+
+msgid "Repsol"
+msgstr "Repsol"
+
+msgid "Shell"
+msgstr "Shell"
+
+msgid "Socar"
+msgstr "Socar"
+
+msgid "Statoil"
+msgstr "Statoil"
+
+msgid "Sunoco"
+msgstr "Sunoco"
+
+msgid "Tamoil"
+msgstr "Tamoil"
+
+msgid "Texaco"
+msgstr "Texaco"
+
+msgid "Total"
+msgstr "Total"
+
+msgid "Independent"
+msgstr "Independente"
+
+msgid "Fuel types:"
+msgstr "tipos combustível:"
+
+msgid "Diesel"
+msgstr "Diesel"
+
+msgid "Bio Diesel"
+msgstr "Biodiesel"
+
+msgid "Octane 80"
+msgstr "80 octanas"
+
+msgid "Octane 91"
+msgstr "91 octanas"
+
+msgid "Octane 92"
+msgstr "92 octanas"
+
+msgid "Octane 95"
+msgstr "95 octanas"
+
+msgid "Octane 98"
+msgstr "98 octanas"
+
+msgid "Octane 100"
+msgstr "100 octanas"
+
+msgid "E10 (10% Ethanol mix)"
+msgstr "E10 (mistura com 10% Etanol)"
+
+msgid "E85 (85% Ethanol mix)"
+msgstr "E85 (mistura com 85% Etanol)"
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr "GPL (gás de petróleo liquefeito)"
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr "GNC (Gás Natural Comprimido)"
+
 msgid "Pier"
 msgstr "Pontão (atracadouro)"
 
@@ -19248,6 +19741,9 @@ msgstr "Pára-choques de via férrea"
 msgid "Railway Switch"
 msgstr "Agulha de Ferrovia"
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr "Aéreo por Cabo"
 
@@ -19332,116 +19828,44 @@ msgstr "autocarro"
 msgid "train"
 msgstr "comboio"
 
-msgid "tram"
-msgstr "elétrico"
-
-msgid "metro"
-msgstr "metro"
-
-msgid "ferry"
-msgstr "ferry"
-
-msgid "Capacity (overall)"
-msgstr "Capacidade (total)"
-
-msgid "Spaces for Disabled"
-msgstr "Espaços para Deficientes"
-
-msgid "Spaces for Women"
-msgstr "Espaços para Mulheres"
-
-msgid "Spaces for Parents"
-msgstr "Espaços para Pais"
-
-msgid "See the Wiki for other capacity:[types]=*."
-msgstr "Ver a página wiki para outras etiquetas capacity:[types]=*."
-
-msgid "Parking Space"
-msgstr "Lugar de Estacionamento"
-
-msgid "Capacity"
-msgstr "Capacidade"
-
-msgid "Covered (with roof)"
-msgstr "Coberto (telhado)"
-
-msgid "Parking Entrance"
-msgstr "Entrada/Saída de Parque de Estacionamento (Subterrâneo/Vários Pisos)"
-
-msgid "Fuel"
-msgstr "Posto de Combustível"
-
-msgid "Agip"
-msgstr "Agip"
-
-msgid "Aral"
-msgstr "Aral"
-
-msgid "Avia"
-msgstr "Avia"
-
-msgid "BP"
-msgstr "BP"
-
-msgid "Chevron"
-msgstr "Chevron"
-
-msgid "Citgo"
-msgstr "Citgo"
-
-msgid "Eni"
-msgstr "Eni"
-
-msgid "Esso"
-msgstr "Esso"
-
-msgid "Exxon"
-msgstr "Exxon"
-
-msgid "Gulf"
-msgstr "Gulf"
-
-msgid "Mobil"
-msgstr "Mobil"
-
-msgid "OMV"
-msgstr "OMV"
+msgid "tram"
+msgstr "elétrico"
 
-msgid "Petro-Canada"
-msgstr "Petro-Canada"
+msgid "metro"
+msgstr "metro"
 
-msgid "Pioneer"
-msgstr "Pioneer"
+msgid "ferry"
+msgstr "ferry"
 
-msgid "Q8"
-msgstr "Q8"
+msgid "Capacity (overall)"
+msgstr "Capacidade (total)"
 
-msgid "Repsol"
-msgstr "Repsol"
+msgid "Spaces for Disabled"
+msgstr "Espaços para Deficientes"
 
-msgid "Shell"
-msgstr "Shell"
+msgid "Spaces for Women"
+msgstr "Espaços para Mulheres"
 
-msgid "Socar"
-msgstr "Socar"
+msgid "Spaces for Parents"
+msgstr "Espaços para Pais"
 
-msgid "Statoil"
-msgstr "Statoil"
+msgid "See the Wiki for other capacity:[types]=*."
+msgstr "Ver a página wiki para outras etiquetas capacity:[types]=*."
 
-msgid "Sunoco"
-msgstr "Sunoco"
+msgid "Parking Space"
+msgstr "Lugar de Estacionamento"
 
-msgid "Tamoil"
-msgstr "Tamoil"
+msgid "Capacity"
+msgstr "Capacidade"
 
-msgid "Texaco"
-msgstr "Texaco"
+msgid "Covered (with roof)"
+msgstr "Coberto (telhado)"
 
-msgid "Total"
-msgstr "Total"
+msgid "Parking Entrance"
+msgstr "Entrada/Saída de Parque de Estacionamento (Subterrâneo/Vários Pisos)"
 
-msgid "Independent"
-msgstr "Independente"
+msgid "Fuel"
+msgstr "Posto de Combustível"
 
 msgid "With shop"
 msgstr "Com loja"
@@ -19452,51 +19876,12 @@ msgstr "conveniência"
 msgid "kiosk"
 msgstr "quiosque (jornais, revistas, tabaco, chocolates...)"
 
-msgid "Fuel types:"
-msgstr "tipos combustível:"
-
-msgid "Diesel"
-msgstr "Diesel"
-
-msgid "Bio Diesel"
-msgstr "Biodiesel"
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr "Diesel do tipo GTL (Gas To Liquid / Gás Para Líquido)"
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr "Diesel para pesados"
 
-msgid "Octane 80"
-msgstr "80 octanas"
-
-msgid "Octane 91"
-msgstr "91 octanas"
-
-msgid "Octane 92"
-msgstr "92 octanas"
-
-msgid "Octane 95"
-msgstr "95 octanas"
-
-msgid "Octane 98"
-msgstr "98 octanas"
-
-msgid "Octane 100"
-msgstr "100 octanas"
-
-msgid "E10 (10% Ethanol mix)"
-msgstr "E10 (mistura com 10% Etanol)"
-
-msgid "E85 (85% Ethanol mix)"
-msgstr "E85 (mistura com 85% Etanol)"
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr "GPL (gás de petróleo liquefeito)"
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr "GNC (Gás Natural Comprimido)"
-
 msgid "1/25 mix (mofa/moped)"
 msgstr "Mistura 1:25 (ciclomotor)"
 
@@ -19715,9 +20100,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr "#CD853F"
 
-msgid "route segment"
-msgstr "segmento de rota"
-
 msgid "stop position"
 msgstr "paragem"
 
@@ -19736,6 +20118,9 @@ msgstr "plataforma (apenas saída)"
 msgid "platform (entry only)"
 msgstr "plataforma (apenas entrada)"
 
+msgid "route segment"
+msgstr "segmento de rota"
+
 msgid "Route Master"
 msgstr "Rota Mestre"
 
@@ -19938,6 +20323,12 @@ msgstr "Hotel"
 msgid "Stars"
 msgstr "Estrelas"
 
+msgid "Rooms"
+msgstr "Quartos"
+
+msgid "Beds"
+msgstr "Camas"
+
 msgid "Motel"
 msgstr "Motel"
 
@@ -20028,11 +20419,14 @@ msgstr "sanduíches/sandes"
 msgid "sushi"
 msgstr "sushi"
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr "Destila e vende cerveja artesanal"
 
 msgid "Outdoor seating"
-msgstr ""
+msgstr "Esplanada"
 
 msgid "Fast Food"
 msgstr "Comida Rápida (Fast Food)"
@@ -20244,6 +20638,9 @@ msgstr "Sauna"
 msgid "Horse Riding"
 msgstr "Corridas de Cavalos"
 
+msgid "Casino"
+msgstr "Casino"
+
 msgid "Brothel"
 msgstr "Bordel"
 
@@ -20593,7 +20990,7 @@ msgid "seasonal"
 msgstr "sasonal"
 
 msgid "flush"
-msgstr "fluxo de água"
+msgstr "descarga de água (o mais comum)"
 
 msgid "pitlatrine"
 msgstr "direto à fossa por baixo (por gravidade)"
@@ -20629,13 +21026,13 @@ msgid "Collection times"
 msgstr "Horário de recolha"
 
 msgid "Mo-Sa 09:00"
-msgstr ""
+msgstr "Segunda a Sexta 9:00"
 
 msgid "Mo-Fr 17:30; Sa 12:00"
-msgstr ""
+msgstr "Segunda a Sexta 17:30; Sábado 12:00"
 
 msgid "Mo-Fr 15:00,19:00; Sa 15:10; Su 10:30"
-msgstr ""
+msgstr "Segunda a Sexta 15:00,19:00; Sábado15:10; Domingo 10:30"
 
 msgid "Drive through"
 msgstr "Serviço ao volante (sem sair do carro)"
@@ -20666,7 +21063,7 @@ msgid "Located inside a building?"
 msgstr "Localizado dentro de um edifício"
 
 msgid "Last check date (YYYY-MM-DD)"
-msgstr ""
+msgstr "Data da última inspeção (AAAA-MM-DD)"
 
 msgid "Last check note"
 msgstr ""
@@ -20732,8 +21129,8 @@ msgstr "Mostra a pressão barométrica"
 msgid "Shows humidity"
 msgstr "Mostra a humidade"
 
-msgid "Recycling"
-msgstr "Reciclagem (ecoponto ou ecocentro)"
+msgid "Recycling Container"
+msgstr ""
 
 msgid "Batteries"
 msgstr "Baterias (pilhão)"
@@ -20741,20 +21138,47 @@ msgstr "Baterias (pilhão)"
 msgid "Cans"
 msgstr "Latas (integrado no embalão)"
 
+msgid "Cardboard"
+msgstr "Cartão"
+
+msgid "Electrical Appliances"
+msgstr "Aparelhos Elétricos"
+
 msgid "Glass"
 msgstr "Vidro (vidrão)"
 
+msgid "Glass Bottles"
+msgstr "Garrafas de Vidro"
+
+msgid "Green Waste"
+msgstr ""
+
 msgid "Paper"
 msgstr "Papel (papelão)"
 
+msgid "Plastic"
+msgstr "Plástico"
+
+msgid "Plastic Bottles"
+msgstr "Garrafas de Plástico"
+
+msgid "Plastic Packaging"
+msgstr "Embalagens de Plástico"
+
 msgid "Scrap Metal"
 msgstr "Sucata Metálica"
 
-msgid "container"
-msgstr "ecoponto (contentores)"
+msgid "Shoes"
+msgstr "Sapataria"
+
+msgid "Small Appliances"
+msgstr "Aparelhos Elétricos Pequenos (TV,ferros...)"
 
-msgid "centre"
-msgstr "ecocentro (para objetos volumosos como frigoríficos, sofás...)"
+msgid "Waste"
+msgstr "Lixo"
+
+msgid "Recycling Centre"
+msgstr "Centro de Reciclagem"
 
 msgid "Waste Basket/Trash Can"
 msgstr "Caixote de lixo"
@@ -20763,16 +21187,16 @@ msgid "Waste Disposal/Dumpster"
 msgstr "Contentor de lixo"
 
 msgid "Sanitary Dump Station"
-msgstr ""
+msgstr "Estação de Despejo de Esgotos"
 
 msgid "Suction pumpout"
-msgstr ""
+msgstr "Bomba de sucção"
 
 msgid "Gravity drain for hose"
-msgstr ""
+msgstr "Drenagem por gravidade pela mangueira"
 
 msgid "Casette or Elsan Disposal"
-msgstr ""
+msgstr "Contantor ou Elsan"
 
 msgid "Operation times"
 msgstr "Intervalos em que está ligado"
@@ -20788,11 +21212,11 @@ msgstr "Tipo de abrigo"
 
 msgctxt "shelter"
 msgid "basic_hut"
-msgstr ""
+msgstr "cabana básica"
 
 msgctxt "shelter"
 msgid "lean_to"
-msgstr ""
+msgstr "cabana 3 paredes (tipo tenda aberta)"
 
 msgctxt "shelter"
 msgid "picnic_shelter"
@@ -20800,7 +21224,7 @@ msgstr "abrigo para piqueniques"
 
 msgctxt "shelter"
 msgid "public_transport"
-msgstr "abrigo de transporte público (por ex. paragens)"
+msgstr "abrigo de transporte público (paragem)"
 
 msgctxt "shelter"
 msgid "weather_shelter"
@@ -20909,13 +21333,13 @@ msgid "Pitch"
 msgstr "Campo"
 
 msgid "artificial_turf"
-msgstr ""
+msgstr "relva sintética"
 
 msgid "decoturf"
-msgstr ""
+msgstr "decoturf (em campos de ténis)"
 
 msgid "tartan"
-msgstr ""
+msgstr "tartan"
 
 msgid "Racetrack"
 msgstr ""
@@ -20959,6 +21383,9 @@ msgstr "Tiro com Arco e Flecha"
 msgid "Track and Field Athletics"
 msgstr "Atletismo em pista e campo (corrida, salto, lançamento)"
 
+msgid "Running"
+msgstr "Corrida"
+
 msgid "Climbing"
 msgstr "Escalada"
 
@@ -21111,16 +21538,16 @@ msgid "Gaelic Games"
 msgstr "Jogos Gaélicos"
 
 msgid "Hurling"
-msgstr ""
+msgstr "Hurling"
 
 msgid "Football"
 msgstr "Futebol"
 
 msgid "Camogie"
-msgstr ""
+msgstr "Camogie"
 
 msgid "Rounders"
-msgstr ""
+msgstr "Rounders"
 
 msgid "Rugby League"
 msgstr "Râguebi de 13 (Rugby League)"
@@ -21134,12 +21561,18 @@ msgstr "Basebol"
 msgid "Basketball"
 msgstr "Basquetebol"
 
+msgid "Handball"
+msgstr "Andebol"
+
 msgid "Volleyball"
 msgstr "Voleibol"
 
 msgid "Beach Volleyball"
 msgstr "Voleibol de Praia"
 
+msgid "Billiards"
+msgstr "Bilhar"
+
 msgid "Golf"
 msgstr "Golfe"
 
@@ -21155,14 +21588,14 @@ msgstr ""
 msgid "Cricket"
 msgstr "Críquete"
 
-msgid "Cricket Nets"
-msgstr "Críquete em Redes (para treino)"
-
 msgid "Croquet"
 msgstr "Croquet"
 
-msgid "Hockey"
-msgstr "Hóquei"
+msgid "Field Hockey"
+msgstr "Hóquei em Campo"
+
+msgid "Ice Hockey"
+msgstr "Hóquei no Gelo"
 
 msgid "Pelota"
 msgstr "Pelota Basca"
@@ -21185,30 +21618,24 @@ msgstr "Corridas de Karting"
 msgid "Motocross"
 msgstr "Motocrosse"
 
-msgid "Safety Training"
-msgstr "Formação de segurança"
-
 msgid "Model Aerodrome"
 msgstr "Aeródromo para Aeromodelismo"
 
 msgctxt "aerialway"
 msgid "pitch"
-msgstr ""
+msgstr "campo"
 
 msgctxt "aerialway"
 msgid "sports_centre"
-msgstr ""
+msgstr "centro desportivo"
 
 msgctxt "aerialway"
 msgid "track"
-msgstr ""
+msgstr "pista"
 
 msgid "RC Car"
 msgstr "Pista Para Carros Telecomandados"
 
-msgid "Raceway"
-msgstr "Pista de Corridas de Veículos a Motor"
-
 msgid "Man Made"
 msgstr "Construção"
 
@@ -21238,7 +21665,7 @@ msgstr "comercial"
 
 msgctxt "building"
 msgid "barn"
-msgstr ""
+msgstr "celeiro"
 
 msgctxt "building"
 msgid "farm_auxiliary"
@@ -21274,11 +21701,19 @@ msgstr "comercial de venda a retalho"
 
 msgctxt "building"
 msgid "shed"
-msgstr ""
+msgstr "barraco"
 
 msgctxt "building"
 msgid "storage_tank"
-msgstr ""
+msgstr "tanque de armazenamento"
+
+msgctxt "building"
+msgid "supermarket"
+msgstr "supermercado"
+
+msgctxt "building"
+msgid "gasometer"
+msgstr "gasómetro (reservatório)"
 
 msgctxt "building"
 msgid "cowshed"
@@ -21290,7 +21725,7 @@ msgstr "em construção"
 
 msgctxt "building"
 msgid "Levels"
-msgstr ""
+msgstr "Andares"
 
 msgid "Residential Building"
 msgstr "Edifício Residencial"
@@ -21317,25 +21752,25 @@ msgstr "dormitório"
 
 msgctxt "building"
 msgid "terrace"
-msgstr ""
+msgstr "fileira de casas iguais justapostas"
 
 msgctxt "building"
 msgid "detached"
-msgstr ""
+msgstr "vivenda uni-familiar"
 
 msgctxt "building"
 msgid "farm"
 msgstr "quinta"
 
 msgid "Building part"
-msgstr ""
+msgstr "Parte de Edifício"
 
 msgctxt "building"
 msgid "Skipped Levels"
-msgstr ""
+msgstr "Começa no andar"
 
 msgid "Skipped height (meters)"
-msgstr ""
+msgstr "Começa à altura (metros)"
 
 msgid "Entrance"
 msgstr "Entrada"
@@ -21364,7 +21799,7 @@ msgid "Entrance number"
 msgstr "Número de porta"
 
 msgid "Flat numbers"
-msgstr ""
+msgstr "Nº de porta de apartamentos"
 
 msgid "Tower"
 msgstr "Torre"
@@ -21394,15 +21829,15 @@ msgid "Gasometer"
 msgstr "Gasómetro (depósito)"
 
 msgid "Storage Tank"
-msgstr ""
+msgstr "Depósito de Armazenagem"
 
 msgctxt "content"
 msgid "fuel"
-msgstr ""
+msgstr "conbustível"
 
 msgctxt "content"
 msgid "manure"
-msgstr ""
+msgstr "estrume"
 
 msgctxt "content"
 msgid "oil"
@@ -21410,11 +21845,11 @@ msgstr ""
 
 msgctxt "content"
 msgid "sewage"
-msgstr ""
+msgstr "esgotos"
 
 msgctxt "content"
 msgid "silage"
-msgstr ""
+msgstr "cereais"
 
 msgctxt "content"
 msgid "slurry"
@@ -21422,11 +21857,11 @@ msgstr ""
 
 msgctxt "content"
 msgid "water"
-msgstr ""
+msgstr "água"
 
 msgctxt "content"
 msgid "wine"
-msgstr ""
+msgstr "vinho"
 
 msgid "Bunker Silo"
 msgstr "Silo em Corredor/Trincheira"
@@ -21969,7 +22404,7 @@ msgstr "Turbina Hidráulica (normal em barragens)"
 
 msgctxt "generator method"
 msgid "run-of-the-river"
-msgstr ""
+msgstr "a fio-de-água"
 
 msgctxt "generator method"
 msgid "water-pumped-storage"
@@ -21989,13 +22424,13 @@ msgid "hydrodynamic_screw"
 msgstr "turbina em parafuso de arquimedes"
 
 msgid "run-of-the-river"
-msgstr ""
+msgstr "a fio-de-água"
 
 msgid "kaplan_turbine"
 msgstr "turbina kaplan"
 
 msgid "run-of-the-river / water-storage"
-msgstr ""
+msgstr "a fio-de-água / armazenamento de água"
 
 msgid "pelton_turbine"
 msgstr "turbina pelton"
@@ -22226,13 +22661,13 @@ msgid "Type of construction"
 msgstr "Tipo de construção"
 
 msgid "lattice"
-msgstr ""
+msgstr "treliça"
 
 msgid "tubular"
-msgstr ""
+msgstr "tubular"
 
 msgid "solid"
-msgstr ""
+msgstr "sólida"
 
 msgid "steel"
 msgstr "aço"
@@ -22247,19 +22682,19 @@ msgstr "Tipo de torre"
 
 msgctxt "power"
 msgid "suspension"
-msgstr ""
+msgstr "suspensão"
 
 msgctxt "power"
 msgid "anchor"
-msgstr ""
+msgstr "ancora"
 
 msgctxt "power"
 msgid "termination"
-msgstr ""
+msgstr "terminação"
 
 msgctxt "power"
 msgid "branch"
-msgstr ""
+msgstr "ramal"
 
 msgctxt "power"
 msgid "transposing"
@@ -22270,7 +22705,7 @@ msgid "crossing"
 msgstr ""
 
 msgid "Branch tower type"
-msgstr ""
+msgstr "Tipo de torre do ramal"
 
 msgctxt "power"
 msgid "tap"
@@ -22278,7 +22713,7 @@ msgstr ""
 
 msgctxt "power"
 msgid "split"
-msgstr ""
+msgstr "bifurcação"
 
 msgctxt "power"
 msgid "loop"
@@ -22286,7 +22721,7 @@ msgstr ""
 
 msgctxt "power"
 msgid "cross"
-msgstr ""
+msgstr "cruzamento"
 
 msgid "Tower design"
 msgstr "Construção da torre"
@@ -22317,11 +22752,11 @@ msgstr "assimétrico"
 
 msgctxt "power"
 msgid "triangle"
-msgstr ""
+msgstr "triângulo"
 
 msgctxt "power"
 msgid "flag"
-msgstr ""
+msgstr "tipo bandeira"
 
 msgctxt "power"
 msgid "donau;one-level"
@@ -22341,23 +22776,23 @@ msgstr "nove níveis"
 
 msgctxt "power"
 msgid "delta"
-msgstr ""
+msgstr "delta"
 
 msgctxt "power"
 msgid "delta_two-level"
-msgstr ""
+msgstr "delta de 2 níveis"
 
 msgctxt "power"
 msgid "y-frame"
-msgstr ""
+msgstr "armação em Y"
 
 msgctxt "power"
 msgid "x-frame"
-msgstr ""
+msgstr "armação em X"
 
 msgctxt "power"
 msgid "h-frame"
-msgstr ""
+msgstr "armação em H"
 
 msgctxt "power"
 msgid "guyed_h-frame"
@@ -22381,11 +22816,11 @@ msgstr ""
 
 msgctxt "power"
 msgid "bipole"
-msgstr ""
+msgstr "bipolar"
 
 msgctxt "power"
 msgid "monopolar"
-msgstr ""
+msgstr "monopolar"
 
 msgid "Triple tower"
 msgstr "Torre tripla"
@@ -22415,7 +22850,7 @@ msgid "Line type"
 msgstr "Tipo de linha"
 
 msgid "line"
-msgstr ""
+msgstr "linha"
 
 msgid "minor_line"
 msgstr ""
@@ -22602,9 +23037,6 @@ msgstr "Vinho"
 msgid "Boutique"
 msgstr "Boutique"
 
-msgid "Shoes"
-msgstr "Sapataria"
-
 msgid "Outdoor"
 msgstr "Artigos para Atividades ao Ar Livre"
 
@@ -23104,7 +23536,7 @@ msgid "shield"
 msgstr "em escudo"
 
 msgid "scoria"
-msgstr ""
+msgstr "cone de escória"
 
 msgid "Ridge"
 msgstr "Cumeeira"
@@ -23113,10 +23545,10 @@ msgid "A mountain or hill ridge."
 msgstr "Cumeeiras de uma montanha"
 
 msgid "Valley"
-msgstr ""
+msgstr "Vale"
 
 msgid "A low area between hills."
-msgstr ""
+msgstr "Uma área baixa entre colinas ou montanhas."
 
 msgid "Cave Entrance"
 msgstr "Entrada de Caverna"
@@ -23159,19 +23591,19 @@ msgid "Forest"
 msgstr "Floresta"
 
 msgid "Cutline"
-msgstr ""
+msgstr "Atalhada (linha limpa de mato)"
 
 msgctxt "cutline"
 msgid "border"
-msgstr ""
+msgstr "fronteira de propriedade"
 
 msgctxt "cutline"
 msgid "firebreak"
-msgstr ""
+msgstr "linha de fogo"
 
 msgctxt "cutline"
 msgid "hunting"
-msgstr ""
+msgstr "caça"
 
 msgctxt "cutline"
 msgid "loggingmachine"
@@ -23179,15 +23611,15 @@ msgstr ""
 
 msgctxt "cutline"
 msgid "pipeline"
-msgstr ""
+msgstr "pipeline"
 
 msgctxt "cutline"
 msgid "piste"
-msgstr ""
+msgstr "pista de esqui"
 
 msgctxt "cutline"
 msgid "section"
-msgstr ""
+msgstr "secção"
 
 msgid "Grassland"
 msgstr "Pradaria"
@@ -23627,12 +24059,12 @@ msgstr "potencial"
 msgid "Contact (Common Schema)"
 msgstr "Contactos (esquema comum)"
 
-msgid "Fax Number"
-msgstr "Número de Fax"
-
 msgid "Email Address"
 msgstr "Email"
 
+msgid "Fax Number"
+msgstr "Número de Fax"
+
 msgid "Image"
 msgstr "Imagem"
 
@@ -24042,7 +24474,7 @@ msgid "Test"
 msgstr "Teste"
 
 msgid "Decreasing house numbers in addresses interpolation"
-msgstr ""
+msgstr "Números de porta decrescentes na interpolação de endereços"
 
 msgid "{0} without {1}"
 msgstr "{0} sem {1}"
@@ -24065,6 +24497,9 @@ msgstr "objeto incompleto: apenas {0} e {1}"
 msgid "{0} together with addr:*"
 msgstr "{0} junto com addr:*"
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr "{0} sem etiquetas adicionais"
 
@@ -24089,6 +24524,18 @@ msgstr "c/nome alternativo mas sem etiqueta {0}"
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr "uso incompleto de {0} numa via sem {1}"
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr "{0}={1} está em desuso"
 
@@ -24150,11 +24597,15 @@ msgstr "A definição de {0} é incerta"
 msgid ""
 "{0} is not recommended. Use the Reverse Ways function from the Tools menu."
 msgstr ""
+"{0} não é recomendado. Utilize Inverter Sentido da Linha no menu Ferramentas"
 
 msgid "key with uncommon character"
-msgstr ""
+msgstr "chave com um caractere incomum"
 
 msgid "uncommon short key"
+msgstr "chave curta incomum"
+
+msgid "{0} is inaccurate"
 msgstr ""
 
 msgid "{0} on a node. Should be used on a way."
@@ -24233,7 +24684,7 @@ msgid "empty value in semicolon-separated ''{0}''"
 msgstr "valor vazio em separação por ponto e vírgula ''{0}''"
 
 msgid "numerical key"
-msgstr ""
+msgstr "chave numérica"
 
 msgid "layer tag with + sign"
 msgstr "etiqueta de nível (layer) com o sinal +"
@@ -24242,15 +24693,24 @@ msgid "layer should be between -5 and 5"
 msgstr "O valor da etiqueta layer (nível) deve estar entre -5 e 5"
 
 msgid "level should be numbers with optional .5 increments"
-msgstr ""
+msgstr "andares deve ser números com incrementos opcionais de 0.5"
 
 msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr "{0}: medida por defeito em metros; o separador deve ser um ponto"
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr "formato {0} incomum"
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 "a voltagem deve estar em volts sem unidades, delimitadores ou espaços"
@@ -24641,6 +25101,9 @@ msgstr ""
 "Adicionar pontos permanentes (não auto-simplificáveis) ao premir a tecla de "
 "espaço"
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr "Desenhar apenas polígonos fechados"
 
@@ -24704,9 +25167,6 @@ msgstr "Desenhar a linha com o rato"
 msgid "min distance={0} px ({1} m)"
 msgstr "distância mínima={0} px ({1} m)"
 
-msgid "Convert way to FastDraw line"
-msgstr "Converter a linha numa linha de DesenhoRápido"
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr "Eps={0}, {1} nós, {2} nós/km"
 
@@ -24955,7 +25415,7 @@ msgid "Training process configuration"
 msgstr ""
 
 msgid "Model Settings"
-msgstr ""
+msgstr "Configurações do Modelo"
 
 msgid "Select objects or create new objects and get recommendation."
 msgstr ""
@@ -25573,63 +26033,86 @@ msgstr ""
 "Conte-nos o que fez e o que aconteceu e adicione o seguinte texto no "
 "relatório de erro, para que possamos encontrar a origem do problema."
 
-msgid "Area detection algorithm settings."
-msgstr "Definições do algoritmo de deteção de área."
+msgid "Area Selector - Preferences"
+msgstr ""
+
+msgid "Settings for the area detection algorithm."
+msgstr "Definições do algoritmo de deteção de área"
 
-msgid "Algorithm Settings"
-msgstr "Definições do Algoritmo"
+msgid "Boofcv - high resolution images"
+msgstr "Boofcv - imagens em alta resolução"
+
+msgid "Custom - low resolution images"
+msgstr "Personalizado - imagens em baixa resolução"
 
 msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
-"O intervalo de cor define até quanto a cor pode ser da cor original para ser "
-"selecionado (Padrão: {0})."
+"Escolha o algoritmo a usar. \"Auto\" tenta encontrar uma área com Boofcv e "
+"usa o algoritmo personalizado como recurso."
 
-msgid "Color Threshold"
-msgstr "Limiar de Cor"
+msgid "Algorithm"
+msgstr "Algoritmo"
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
-"Distância máxima entre cada ponto na sequência pode ser de uma linha, em "
-"pixéis (Padrão: {0})."
+"Máximo de pixeis que um ponto pode estar afastado de uma linha e ser "
+"considerado parte dessa linha (padrão: {0})."
 
-msgid "Tolerance Distance"
+msgid "Distance Tolerance"
 msgstr "Distância de Tolerância"
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
-msgstr "Tolerância para ângulos que se enquadrem, em radianos (Padrão: {0})."
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
+msgstr ""
+"Linhas com um ângulo menos (graus) que isto serão combinadas numa linha "
+"(padrão {0})."
+
+msgid "Angle Tolerance"
+msgstr "Ângulo de Tolerância"
+
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
+msgstr ""
+
+msgid "Color Threshold"
+msgstr "Limiar de Cor"
+
+msgid "Use HSV based algorithm"
+msgstr ""
 
-msgid "Tolerance Angle"
-msgstr "Ângulo de Tolerância"
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
+msgstr ""
 
-msgid "Plugin Settings"
-msgstr "Configuração do Módulo"
+msgid "How often thinning operation should be applied (Default {0})."
+msgstr "Quantas vezes esta operação deve ser aplicada (Padrão{0})."
 
-msgid "Show Address Dialog after mapping an area"
-msgstr "Mostrar janela de endereço após mapear uma área"
+msgid "Thinning Iterations"
+msgstr ""
 
 msgid "show address dialog"
 msgstr "mostrar janela de endereço"
 
-msgid "Merge nodes with neighbors"
-msgstr "Fundir nós com nós vizinhos"
+msgid "Show Address Dialog after mapping an area"
+msgstr "Mostrar janela de endereço após mapear uma área"
 
 msgid "merge nodes"
 msgstr "fundir nós"
 
-msgid "How often thinning operation should be applied (Default {0})."
-msgstr "Quantas vezes esta operação deve ser aplicada (Padrão{0})."
-
-msgid "Thinning Iterations"
-msgstr ""
+msgid "Merge nodes with existing nodes"
+msgstr "Fundir nós nos nós existentes"
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -25691,32 +26174,34 @@ msgid "Set width of the building"
 msgstr "Escolher a largura do edifício"
 
 msgid "Merge address points"
-msgstr ""
+msgstr "Fundir pontos de endereços"
 
 msgid "Move tags from address nodes inside buildings to building ways"
 msgstr ""
+"Mover as etiquetas dos nós com endereços que estão dentro de edifícios para "
+"os próprios edifícios"
 
 msgid "Select both address nodes and building ways to merge"
-msgstr ""
+msgstr "Selecione os nós dos endereços e o edifício para fundir"
 
 msgid "No address nodes found in the selection"
-msgstr ""
+msgstr "Não foram encontrados nós com endereços nos objetos selecionados"
 
 msgid "No building ways found in the selection"
-msgstr ""
+msgstr "Não foram encontrados edifícios nos objetos selecionados"
 
 msgid "There is {0} building with multiple address nodes inside"
 msgid_plural "There are {0} buildings with multiple address nodes inside"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Existe {0} edifício com nós de vários endereços dentro"
+msgstr[1] "Existem {0} edifícios com nós de vários endereços dentro"
 
 msgid "There is {0} building with address conflicts"
 msgid_plural "There are {0} buildings with address conflicts"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Existe {0} edifício com conflitos nos endereços"
+msgstr[1] "Existes {0} edifícios com conflitos nos endereços"
 
 msgid "No address nodes inside buildings found"
-msgstr ""
+msgstr "Não foram encontrados nós com endereços dentro de edifícios"
 
 msgid "on polygon"
 msgstr "no polígono"
@@ -25756,7 +26241,7 @@ msgstr ""
 "Provavelmente é uma versão antiga do ficheiro de cache."
 
 msgid "Lambert Zone {0} cache file (.{0})"
-msgstr "Lambert Zona {0} ficheiro de cache (.{0})"
+msgstr "Zona Lambert {0} ficheiro de cache (.{0})"
 
 msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
 msgstr "Zona Lambert CC9 {0} ficheiro de cache (.CC{0})"
@@ -25853,7 +26338,7 @@ msgid "Use \"Tableau d''assemblage\""
 msgstr ""
 
 msgid "Replace grey shades by white color only"
-msgstr ""
+msgstr "Substituir tons de cinzento por brancos apenas"
 
 msgid "Select first WMS layer in list."
 msgstr "Selecione a primeira camada WMS na lista."
@@ -26303,6 +26788,9 @@ msgstr "Limpar alinhamento"
 msgid "Reset offset (only vector images)"
 msgstr "Limpar alinhamento (apenas imagens vetoriais)"
 
+msgid "Blank Layer"
+msgstr "Camada Vazia (apenas para importar dados)"
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr "Camada WMS ({0}), {1} tela(s) carregada"
 
@@ -26718,7 +27206,7 @@ msgid "Disable data logging if distance falls below"
 msgstr "Desativar registo dos dados se a distãncia for inferior a"
 
 msgid "Unknown logFormat"
-msgstr ""
+msgstr "logFormat desconhecido"
 
 msgid "Port:"
 msgstr "Porta:"
@@ -26853,7 +27341,7 @@ msgid "Unknown tag for condition: {0}"
 msgstr "Etiqueta desconhecida para a condição: {0}"
 
 msgid "Element must not have children: {0}"
-msgstr ""
+msgstr "Elemento não deve ter filhos: {0}"
 
 msgid "Condition is already finished at </{0}>"
 msgstr "A condição já está terminada em </{0}>"
@@ -27180,16 +27668,16 @@ msgid "Calibration Layer"
 msgstr "Camada de Calibração"
 
 msgid "A deprecated calibration geometry of {0} nodes by {1}"
-msgstr ""
+msgstr "Uma geometria de calibração desatualizada de {0} nós por {1}"
 
 msgid "A calibration geometry of {0} nodes by {1}"
-msgstr ""
+msgstr "Calibração de geometria de {0} nós por {1}"
 
 msgid "Change Color"
 msgstr "Alterar Cor"
 
 msgid "Deprecate Offset"
-msgstr ""
+msgstr "Reportar Alinhamento Desatualizado"
 
 msgid "Are you sure this imagery offset is wrong?"
 msgstr "Tem a certeza que este alinhamento das imagens de fundo está errado?"
@@ -27199,6 +27687,7 @@ msgstr "Tem certeza que esta calibragem geométrica está errada?"
 
 msgid "Warning: deprecation is basically irreversible!"
 msgstr ""
+"Aviso: o reportar do alinhamento desatualizado é basicamente irreversível!"
 
 msgid "To store imagery offsets you must be a registered OSM user."
 msgstr ""
@@ -27214,9 +27703,11 @@ msgstr ""
 msgid ""
 "Please enter the reason why you mark this calibration geometry as deprecated"
 msgstr ""
+"Por favor introduza a razão porque quer marcar esta calibração de geometria "
+"como desatualizada"
 
 msgid "Notifying the server of the deprecation..."
-msgstr ""
+msgstr "A notificar o servidor da desatualização..."
 
 msgid "Get Imagery Offset..."
 msgstr "Obter Alinhamento..."
@@ -27234,10 +27725,10 @@ msgid "Loading imagery offsets..."
 msgstr "A carregar alinhamentos de imagens de fundo..."
 
 msgid "Error processing XML response: {0}"
-msgstr ""
+msgstr "Surgiu um erro ao processar a resposta XML: {0}"
 
 msgid "Offset"
-msgstr ""
+msgstr "Alinhamento"
 
 msgid "Imagery Offset Database"
 msgstr "Base de dados de Alinhamentos de Imagens de Fundo"
@@ -27255,39 +27746,49 @@ msgid "km"
 msgstr "km"
 
 msgid "Calibration geometries"
-msgstr ""
+msgstr "Calibragem geométrica"
 
 msgid "Deprecated offsets"
-msgstr ""
+msgstr "Alinhamentos desatualizados"
 
 msgid ""
 "The topmost imagery layer has been shifted to presumably match\n"
 "OSM data in the area. Please check that the offset is still valid\n"
 "by downloading GPS tracks and comparing them and OSM data to the imagery."
 msgstr ""
+"A imagem de satélite superior foi deslocada para estar alinhada "
+"presumivelmente\n"
+"com os dados do OpenStreetMap nesta área. Por favor confirme se o "
+"alinhamento ainda está correto\n"
+"descarregando trilhos GPS do OpenStreetMap e comparando-os com as imagens de "
+"satélite."
 
 msgid ""
 "A layer has been added with a calibration geometry. Hide data layers,\n"
 "find the corresponding feature on the imagery layer and move it accordingly."
 msgstr ""
+"Foi adicionada uma camada com uma geometria de calibração. Oculte as camadas "
+"de dados,\n"
+"encontre os elementos correspondentes na camada de imagens de satélite e "
+"mova para calibrar."
 
 msgid "Deprecated by {0} on {1}"
-msgstr ""
+msgstr "Desatualizado por {0} em {1}"
 
 msgid "Created by {0} on {1}"
 msgstr "Criado por {0} em {1}"
 
 msgid "Offset Information"
-msgstr ""
+msgstr "Informação do Alinhamento"
 
 msgid "Report this offset"
-msgstr ""
+msgstr "Reportar este alinhamento"
 
 msgid "You are to notify moderators of this offset. Why?"
-msgstr ""
+msgstr "Vai reportar aos moderadores este alinhamento. Qual o motivo?"
 
 msgid "Reporting the offset..."
-msgstr ""
+msgstr "A reportar o alinhamento..."
 
 msgid "An imagery offset of {0}"
 msgstr "Um alinhamento de imagens de fundo de {0}"
@@ -27296,19 +27797,19 @@ msgid "Imagery ID"
 msgstr "Identificador da Imagem de Fundo"
 
 msgid "A calibration geometry of {0} nodes"
-msgstr ""
+msgstr "Calibração de geometria de{0} nós"
 
 msgid "Determined right here"
-msgstr ""
+msgstr "Determinado aqui mesmo"
 
 msgid "Determined {0} away"
-msgstr ""
+msgstr "Determinado afastado daqui a {0}"
 
 msgid "Reason"
 msgstr "Motivo"
 
 msgid "This entry has been reported."
-msgstr ""
+msgstr "A entrada foi reportada"
 
 msgid "Server has rejected the request"
 msgstr "O servidor rejeitou o pedido"
@@ -27323,9 +27824,11 @@ msgid ""
 "Upload an offset for current imagery (or calibration object geometry) to a "
 "server"
 msgstr ""
+"Enviar o alinhamento para as imagens de fundo (ou calibração de geometria) "
+"para um servidor"
 
 msgid "Store calibration geometry"
-msgstr ""
+msgstr "Guardar calibração de geometria"
 
 msgid "Store imagery offset"
 msgstr "Gravar alinhamento"
@@ -27334,6 +27837,8 @@ msgid ""
 "The selected object can be used as a calibration geometry. What do you "
 "intend to do?"
 msgstr ""
+"O objeto selecionado não pode ser utilizado para a calibração de geometria. "
+"O que pretende fazer?"
 
 msgid ""
 "The topmost imagery layer has no offset. Are you sure you want to upload "
@@ -27348,6 +27853,10 @@ msgid ""
 "Please make sure it is as precise as possible, and describe a region this "
 "offset is applicable to."
 msgstr ""
+"Está a registar um alinhamento de imagens. Outros utilizadores na área "
+"poderão usá-lo para editar o mapa.\n"
+"Por favor certifique-se que o alinhamento é o mais preciso possível e "
+"descreva a região onde este alinhamento se aplica."
 
 msgid ""
 "You are registering a calibration geometry. It should be the most precisely "
@@ -27355,15 +27864,19 @@ msgid ""
 "clearly visible boundaries on various satellite imagery. Please describe "
 "this object and its whereabouts."
 msgstr ""
+"Está a registar uma geometria de calibração. Deve ser o objeto mais bem "
+"posicionado,\n"
+"com limites visíveis claramente em várias imagens de satélite. Por favor "
+"descreva este objeto e a sua localização."
 
 msgid "Uploading a new offset..."
-msgstr ""
+msgstr "A enviar um novo alinhamento..."
 
 msgid "This string should be 3 to 200 letters long."
 msgstr "Este texto deve ter entre 3 e 200 caracteres."
 
 msgid "Adjust imagery"
-msgstr ""
+msgstr "Ajustar imagem de fundo"
 
 msgid "Adjust the position of the selected imagery layer"
 msgstr "Altere a posição da camada de imagem de fundo selecionada"
@@ -27372,13 +27885,13 @@ msgid "Please select the imagery layer to adjust."
 msgstr "Selecione a camada de imagem de fundo a alinhar."
 
 msgid "Start adjusting"
-msgstr ""
+msgstr "Começar a ajustar"
 
 msgid "There are currently no imagery layer to adjust."
 msgstr "Não existem nenhuma camada de imagem de fundo para ajustar"
 
 msgid "No layers to adjust"
-msgstr ""
+msgstr "Nenhuma camada a ajustar"
 
 msgid "Normal"
 msgstr "Normal"
@@ -27435,7 +27948,7 @@ msgid "Importing..."
 msgstr "A importar..."
 
 msgid "SVG files [ImportVec plugin] (*.svg)"
-msgstr ""
+msgstr "Ficheiros SVG [módulo ImportVec] (*.svg)"
 
 msgid "Please open or create data layer before importing"
 msgstr "Por favor abra ou crie uma camada antes de importar"
@@ -27835,14 +28348,322 @@ msgstr "Ativa o módulo de Listagem de erros do MapDust"
 msgid "Missing input data"
 msgstr "Faltam dados de entrada"
 
+msgid "Mapillary Images"
+msgstr "Imagens Mapillary"
+
+msgid "Mapillary layer"
+msgstr "Camada Mapillary"
+
+msgid "Total images:"
+msgstr "Total de imagens:"
+
+msgid "images"
+msgstr "imagens"
+
 msgid "Mapillary"
 msgstr "Mapillary"
 
-msgid "Create Mapillary layer."
-msgstr "Criar camada Mapillary."
+msgid "Create Mapillary layer"
+msgstr "Criar camada Mapillary"
 
-msgid "Export"
-msgstr "Exportar"
+msgid "Start Mapillary layer"
+msgstr "Começar camada Mapillary"
+
+msgid "Download Mapillary images in current view"
+msgstr "Descarrregar imagens Mapillary na vista atual"
+
+msgid "Export pictures"
+msgstr "Exportar imagens"
+
+msgid "Export Mapillary pictures"
+msgstr "Exportar imagens Mapillary"
+
+msgid "Export images"
+msgstr "Exportar imagens"
+
+msgid "Import pictures"
+msgstr "Importar imagens"
+
+msgid "Import local pictures"
+msgstr "Importar imagens locais"
+
+msgid "Import pictures into Mapillary layer"
+msgstr "Importar imagens para a camada Mapillary"
+
+msgid "Select pictures"
+msgstr "Selecionar imagens"
+
+msgid "Import pictures into sequence"
+msgstr "Importar as imagens em sequência"
+
+msgid "Import pictures into Mapillary layer in a sequence"
+msgstr "Importar imagens para a camada Mapillary  em sequência"
+
+msgid "Join mode"
+msgstr "Modo de unir"
+
+msgid "Join/unjoin pictures"
+msgstr "Unir/Separar imagens"
+
+msgid "Join Mapillary pictures"
+msgstr "Unir imagens Mapillary"
+
+msgid "Upload pictures"
+msgstr "Enviar imagens"
+
+msgid "Upload Mapillary pictures"
+msgstr "Enviar imagens Mapillary"
+
+msgid "Upload pictures."
+msgstr ""
+
+msgid "Walk mode"
+msgstr "Modo a pé"
+
+msgid "Start walk mode"
+msgstr "COmeçar modo a pé"
+
+msgid "Zoom to selected image"
+msgstr "Aproximar a imagem selecionada"
+
+msgid "Zoom to the currently selected Mapillary image"
+msgstr "Ver de perto a imagem Mapillary atualmente selecionada"
+
+msgid "Uploaded {0} images"
+msgstr "Enviadas {0} imagens"
+
+msgid "Approve upload on the website"
+msgstr ""
+
+msgid "View in website"
+msgstr "Ver no site"
+
+msgid "Copy key"
+msgstr ""
+
+msgid "Copy key tag"
+msgstr ""
+
+msgid "Edit on website"
+msgstr ""
+
+msgid "Export all images"
+msgstr "Exportar todas as imagens"
+
+msgid "Export selected sequence"
+msgstr "Exportar sequência selecionada"
+
+msgid "Export selected images"
+msgstr "Exportar imagens selecionadas"
+
+msgid "Rewrite imported images"
+msgstr ""
+
+msgid "Select a folder"
+msgstr "Selecionar pasta"
+
+msgid "Explore"
+msgstr "Explorar"
+
+msgid "Select a directory"
+msgstr "Selecionar diretório"
+
+msgid "Speed limit"
+msgstr "Limite de velocidade"
+
+msgid "Give way"
+msgstr "Cedência de passagem"
+
+msgid "No entry"
+msgstr "Sentido proibido"
+
+msgid "Intersection danger"
+msgstr "Cruzamento"
+
+msgid "Mandatory direction (any)"
+msgstr "Sentido obrigatório"
+
+msgid "No turn"
+msgstr "Proibido virar"
+
+msgid "Uneven road"
+msgstr "Lomba"
+
+msgid "No parking"
+msgstr "Estacionamento proibido"
+
+msgid "No overtaking"
+msgstr "Ultrapassagem proibida"
+
+msgid "Pedestrian crossing"
+msgstr "Passadeira"
+
+msgid "Years"
+msgstr "Anos"
+
+msgid "Months"
+msgstr "Meses"
+
+msgid "Days"
+msgstr "Dias"
+
+msgid "Mapillary filter"
+msgstr "Filtro Mapillary"
+
+msgid "Open Mapillary filter dialog"
+msgstr "Abrir janela de filtro Mapillary"
+
+msgid "Downloaded images"
+msgstr "Imagens descarregadas"
+
+msgid "Only images with signs"
+msgstr "Apenas imagens com sinais"
+
+msgid "Choose signs"
+msgstr "Escolher sinais"
+
+msgid "Mapillary history"
+msgstr "Histórico Mapillary"
+
+msgid "Open Mapillary history dialog"
+msgstr "Abrir janela do histórico Mapillary"
+
+msgid "Open Mapillary window"
+msgstr "Abrir janela Mapillary"
+
+msgid "Mapillary dialog"
+msgstr "Janela Mapillary"
+
+msgid "Open Mapillary main dialog"
+msgstr "Abrir janela principal do Mapillary"
+
+msgid "Next picture"
+msgstr "Imagem seguinte"
+
+msgid "Shows the next picture in the sequence"
+msgstr "Mostra a próxima imagem na sequência de imagens"
+
+msgid "Previous picture"
+msgstr "Imagem anterior"
+
+msgid "Shows the previous picture in the sequence"
+msgstr "Mostra a imagem anterior na sequência de imagens"
+
+msgid "Jump to red"
+msgstr "Ir para o vermelho"
+
+msgid "Jumps to the picture at the other side of the red line"
+msgstr "Mostra a imagem na extremidade da linha vermelha"
+
+msgid "Jump to blue"
+msgstr "Ir para o azul"
+
+msgid "Jumps to the picture at the other side of the blue line"
+msgstr "Mostra a imagem na extremidade da linha azul"
+
+msgid "Stops the walk."
+msgstr "Pára o modo a pé."
+
+msgid "Play"
+msgstr "Iniciar"
+
+msgid "Continues with the paused walk."
+msgstr "Continua o modo a pé."
+
+msgid "Pause"
+msgstr "Pausa"
+
+msgid "Pauses the walk."
+msgstr "Pausa o modo a pé"
+
+msgid "Reverse buttons position when displaying images."
+msgstr ""
+
+msgid "Display hour when the picture was taken"
+msgstr "Mostrar a hora a que a fotografia foi tirada"
+
+msgid "Use 24 hour format"
+msgstr "Usar formato 24 horas"
+
+msgid "Move to picture''s location with next/previous buttons"
+msgstr ""
+
+msgid "Download mode: "
+msgstr "Método de descarregamento: "
+
+msgid "Upload selected sequence"
+msgstr ""
+
+msgid "Delete after upload"
+msgstr ""
+
+msgid "Wait for full quality pictures"
+msgstr ""
+
+msgid "Follow selected image"
+msgstr ""
+
+msgid "Go forward"
+msgstr ""
+
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] "{0} imagem eliminada"
+msgstr[1] "{0} imagens eliminadas"
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] "{0} imagem importadas"
+msgstr[1] "{0} imagens importadas"
+
+msgid "2 images joined"
+msgstr "2 imagens unidas"
+
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] "Movida {0} imagem"
+msgstr[1] "Movidas {0} imagens"
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] "Virada {0} imagem"
+msgstr[1] "Viradas {0} imagens"
+
+msgid "2 images unjoined"
+msgstr "2 imagens separadas"
+
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
+msgstr ""
+"A área descarregada é demasiado grande. O modo de descarregamento foi "
+"alterado para semi-automático até que a camada seja reiniciada."
+
+msgid "Downloading"
+msgstr "A descarregar"
+
+msgid "Select mode"
+msgstr ""
+
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
+msgstr ""
+
+msgid "Downloading Mapillary images"
+msgstr ""
+
+msgid "Total Mapillary images: {0}"
+msgstr ""
+
+msgid "No images found"
+msgstr "Nenhuma imagem encontrada"
+
+msgid "Finished upload"
+msgstr "Envio terminado"
+
+msgid "Uploading: {0}"
+msgstr "A enviar: {0}"
 
 msgid "Measured values"
 msgstr "Valores medidos"
@@ -27862,6 +28683,9 @@ msgstr "Comprimento da Seleção"
 msgid "Selection Area"
 msgstr "Área Selecionada"
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr "Ângulo"
 
@@ -27927,51 +28751,6 @@ msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 "Não foi possível encontrar os nós ''via'' (através de). Verifique a seleção."
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-"pedido XAPI, por exemplo '''' (para descarregar todos os dados), "
-"''[highway=*]'', ou ''[[network=VRR][ref=603|613]''"
-
-msgid "Download from OSM mirror..."
-msgstr "Descarregar dum espelho do OpenStreetMap..."
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr "Este pedido XAPI parece incorreto, por favor verifique"
-
-msgid "Object type: "
-msgstr "Tipo de objeto: "
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr "Tipo de objeto OSM para descarregar (''*'' para todos)"
-
-msgid "XAPI query: "
-msgstr "Pedido XAPI: "
-
-msgid "Download from Overpass API ..."
-msgstr "Descarregar da API Overpass..."
-
-msgid "Download map data from Overpass API server."
-msgstr "Descarregar dados do mapa da API Overpass."
-
-msgid "Overpass query: "
-msgstr "Pedido Overpass: "
-
-msgid "Select OSM mirror URL"
-msgstr "Escolha o endereço web do servidor espelho do OpenStreetMap"
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-"Selecione o endereço do servidor espelho de onde serão descarregados os "
-"dados."
-
-msgid "Base URL"
-msgstr "URL de Base"
-
-msgid "Enforce meta data"
-msgstr "Forçar meta dados"
-
 msgid "About Plugin"
 msgstr "Sobre o Módulo"
 
@@ -28227,6 +29006,9 @@ msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 "Mostra as diferenças entre o conjunto de dados atual e os dados do OSM."
 
+msgid "Tools"
+msgstr "Ferramentas"
+
 msgid "Open tools menu for this data."
 msgstr "Abrir o menu de ferramentas para estes dados."
 
@@ -29165,13 +29947,13 @@ msgid "Download Osmosis poly"
 msgstr ""
 
 msgid "Reading polygon filter file..."
-msgstr ""
+msgstr "A ler o ficheiro de filtro de polígono..."
 
 msgid "Error reading poly file: {0}"
-msgstr ""
+msgstr "Erro ao ler o ficheiro poly: {0}"
 
 msgid "The file must begin with a polygon name"
-msgstr ""
+msgstr "O ficheiro tem de começar com um nome de polígono"
 
 msgid "There are less than 2 points in an area"
 msgstr "Existem menos de 2 pontos numa área"
@@ -29519,6 +30301,27 @@ msgstr "Transporte Público: Ativar pontos de trilhos"
 msgid "Public Transport: Edit waypoint name"
 msgstr "Transporte Público: Editar nome do ponto de trilho"
 
+msgid "Public transport routes"
+msgstr "Rotas de transporte público"
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr "Ver rotas de transporte público"
+
+msgid "Filters"
+msgstr "Filtros"
+
+msgid "Choose Filter"
+msgstr "Escolher o Filtro"
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr "Caixa de Ferramentas de Relações"
 
@@ -29700,6 +30503,9 @@ msgstr "Conjunto de alterações revertido"
 msgid "It is not allowed to revert changeset from {0}"
 msgstr "Não é permitido reverter conjuntos de alterações de {0}"
 
+msgid "Downloading objects history"
+msgstr "A descarregar histórico dos objetos"
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr "Falta o alvo da fusão para {0} com o identificador {1}"
 
@@ -29709,6 +30515,9 @@ msgstr "Histórico de objetos"
 msgid "History reverter"
 msgstr "Reversor de histórico"
 
+msgid "Tool: Display objects history dialog"
+msgstr "Ferramenta: Mostrar janela de histórico dos objetos"
+
 msgid "Preparing history data..."
 msgstr "A preparar dados do histórico..."
 
@@ -29760,19 +30569,19 @@ msgid "Road Sign Plugin"
 msgstr "Módulo Sinais de Trânsito"
 
 msgid "signs"
-msgstr ""
+msgstr "sinais"
 
 msgid "Change Properties"
 msgstr "Alterar Propriedades"
 
 msgid "Country preset:"
-msgstr ""
+msgstr "Modelo de país:"
 
 msgid "Show all signs"
-msgstr ""
+msgstr "Mostrar todos os sinais"
 
 msgid "Show a selection of the most useful signs"
-msgstr ""
+msgstr "Mostrar uma seleção dos sinais mais úteis"
 
 msgid "Belgium"
 msgstr "Bélgica"
@@ -29903,6 +30712,9 @@ msgstr ""
 "Não foi encontrada a preferência ''{0}''. Não é possível inicializar o "
 "SdsApi."
 
+msgid "Proxy Authentication Required"
+msgstr "Necessária Autenticação Proxy"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -30108,6 +30920,39 @@ msgstr "Limiar de Fusão de Nós Adjacentes"
 msgid "SeaMap Editor"
 msgstr "Editor SeaMap"
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr "Desfeita eliminaçáo do nó {0}"
+
 msgid "OSM Export"
 msgstr "Exportar OSM"
 
@@ -30117,6 +30962,9 @@ msgstr "Exportar dados de tráfego para um ficheiro de rede SUMO."
 msgid "SUMO Export"
 msgstr "Exportar SUMO"
 
+msgid "Export"
+msgstr "Exportar"
+
 msgid "AutoSave LiveData"
 msgstr "Gravar Automaticamente"
 
@@ -30368,9 +31216,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr "Parâmetro para pedido ao servidor"
 
-msgid "Tile size:"
-msgstr "Tamanho da tela:"
-
 msgid "Resolution:"
 msgstr "Resolução:"
 
@@ -31467,6 +32312,8 @@ msgid ""
 "The selected way is not a split way, please select split points or split way "
 "too."
 msgstr ""
+"É necessário selecionar os pontos onde a área será separada em 2, ou uma "
+"linha com pontos coincidentes com a área."
 
 msgid "The selected nodes can not be consecutive nodes in the object."
 msgstr "Os nós selecionados não podem ser nós consecutivos no objeto."
@@ -31555,7 +32402,7 @@ msgstr ""
 "personalizado''"
 
 msgid "Utilsplugin2 settings"
-msgstr ""
+msgstr "Preferências Utilsplugin2"
 
 msgid "Here you can change some preferences of Utilsplugin2 functions"
 msgstr "Aqui pode configurar algumas preferências do módulo Utilsplugin2"
@@ -32089,9 +32936,6 @@ msgstr ""
 "Procurar pelo ponto do trilho GPS. Clique e mova o mapa para ver o ponto do "
 "trilho GPS."
 
-msgid "Way Select"
-msgstr "Selecionar Linhas Contíguas"
-
 msgid "Add names from Wikipedia"
 msgstr "Adicionar nomes da Wikipédia"
 
diff --git a/i18n/po/pt_BR.po b/i18n/po/pt_BR.po
index b042306..c4fe500 100644
--- a/i18n/po/pt_BR.po
+++ b/i18n/po/pt_BR.po
@@ -8,20 +8,20 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
-"PO-Revision-Date: 2015-04-24 14:11+0000\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
+"PO-Revision-Date: 2015-10-08 11:57+0000\n"
 "Last-Translator: Nelson A. de Oliveira <naoliv at debian.org>\n"
 "Language-Team: Português Brasileiro <gnome-pt_br-list at gnome.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 05:02+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 05:06+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: pt_BR\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
-msgstr "{0}: a opção ''{1}'' é ambígua"
+msgstr "{0}: opção \"{1}\" é ambígua"
 
 msgid "{0}: option ''--{1}'' does not allow an argument"
 msgstr "{0}: opção ''--{1}'' não permite argumento"
@@ -30,7 +30,7 @@ msgid "{0}: option ''{1}{2}'' does not allow an argument"
 msgstr "{0}: opção ''{1}{2}'' não permite argumento"
 
 msgid "{0}: option ''{1}'' requires an argument"
-msgstr "{0}: a opção ''{1}'' exige argumento"
+msgstr "{0}: a opção ''{1}'' exige um argumento"
 
 msgid "{0}: unrecognized option ''--{1}''"
 msgstr "{0}: opção ''--{1}'' desconhecida"
@@ -45,7 +45,7 @@ msgid "{0}: invalid option -- {1}"
 msgstr "{0}: opção inválida -- {1}"
 
 msgid "{0}: option requires an argument -- {1}"
-msgstr "{0}: opção requer argumento -- {1}"
+msgstr "{0}: opção requer um argumento -- {1}"
 
 msgid "Invalid value {0} for parameter ''has_arg''"
 msgstr "Valor {0} inválido para o parâmetro ''has_arg''"
@@ -98,22 +98,19 @@ msgstr "Carregando preferências de imagens"
 msgid "Updating user interface"
 msgstr "Atualizando interface do usuário"
 
-msgid "{0} completed in {1}"
-msgstr "{0} concluído em {1}"
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "Ignorando URL de arquivo mal formada: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "Ignorando URL mal formada: \"{0}\""
 
 msgid "Warning"
 msgstr "Aviso"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "Ignorando URL de arquivo mal formada: \"{0}\""
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 "O parâmetro \"downloadgps\" não aceita nomes de arquivos ou URLs de arquivos"
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "Ignorando URL mal formada: \"{0}\""
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -382,7 +379,7 @@ msgid "Combine Way"
 msgstr "Combinar Caminhos"
 
 msgid "Combine several ways into one."
-msgstr "Combinar vários caminho em um só."
+msgstr "Combinar vários caminhos em um só."
 
 msgid "Change directions?"
 msgstr "Inverter direções?"
@@ -394,20 +391,20 @@ msgid ""
 "The ways can not be combined in their current directions.  Do you want to "
 "reverse some of them?"
 msgstr ""
-"Os caminhos não podem ser combinados nas direções atuais. Pretende inverter "
-"algum deles?"
+"As vias não podem ser mescladas nas direções atuais. Gostaria de inverter "
+"algumas delas?"
 
 msgid ""
 "Could not combine ways<br>(They could not be merged into a single string of "
 "nodes)"
 msgstr ""
-"Não foi possível combinar as linhas<br>(Eles não puderam ser mesclados em "
+"Não foi possível combinar as linhas<br>(Elas não puderam ser mescladas em "
 "uma única sequência de nós)"
 
 msgid "Combine {0} way"
 msgid_plural "Combine {0} ways"
-msgstr[0] "Combinar {0} forma"
-msgstr[1] "Combinar {0} formas"
+msgstr[0] "Combinar {0} caminho"
+msgstr[1] "Combinar {0} caminhos"
 
 msgid "Please select at least two ways to combine."
 msgstr "Por favor, selecione no mínimo dois caminhos para combinar."
@@ -467,17 +464,23 @@ msgstr "Mostrar/esconder o painel de diálogos"
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Esconde o painel de diálogos,expande o mapa"
 
+msgid "Distribute Nodes"
+msgstr "Distribuir Nós"
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr "Distribuir nós selecionados equidistantemente sobre uma linha."
 
 msgid "Ignoring {0} nodes with null coordinates"
-msgstr "Igonrando {0} nós com coordenadas nulas"
+msgstr "Ignorando {0} nós com coordenadas nulas"
 
 msgid ""
 "Please select :\n"
 "* One no self-crossing way with at most two of its nodes;\n"
 "* Three nodes."
 msgstr ""
+"Por favor selecione:\n"
+"* Uma via que não se cruze com pelo menos dois de seus nós;\n"
+"* Três nós."
 
 msgid "Download from OSM..."
 msgstr "Baixar do OSM..."
@@ -496,7 +499,7 @@ msgid "Download data"
 msgstr "Dados baixados"
 
 msgid "Download notes in current view"
-msgstr ""
+msgstr "Baixar notas na vista atual"
 
 msgid "Download object..."
 msgstr "Baixar objeto..."
@@ -806,7 +809,7 @@ msgid "Download Rectified Images From Various Services"
 msgstr "Baixar imagens retificadas de vários serviços"
 
 msgid "Imagery: {0}"
-msgstr "Imagens: {0}"
+msgstr "Camadas: {0}"
 
 msgid "Custom WMS Link"
 msgstr "Link WMS customizado"
@@ -896,7 +899,7 @@ msgid "Merge selection"
 msgstr "Combinar seleção"
 
 msgid "Merge the currently selected objects into another layer"
-msgstr "Uniro os objetos atualmente selecionados em outro layer"
+msgstr "Unir os objetos atualmente selecionados em outro layer"
 
 msgid "Merging too many objects with different upload policies"
 msgstr "Combinando muitos objetos com diferentes políticas de envio"
@@ -1045,7 +1048,7 @@ msgid "Download Data"
 msgstr "Baixar dados"
 
 msgid "Which tasks to perform?"
-msgstr ""
+msgstr "Quais tarefas devem ser realizadas?"
 
 msgid "Ok"
 msgstr "Ok"
@@ -1122,6 +1125,30 @@ msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 "Por favor selecione caminhos com ângulos de aproximadamente 90 ou 180 graus."
 
+msgid "Download from Overpass API ..."
+msgstr "Baixar do Overpass API..."
+
+msgid "Download map data from Overpass API server."
+msgstr "Baixar mapa do servidor Overpass API"
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr "Consulta superior: "
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr "Colar"
 
@@ -1284,19 +1311,19 @@ msgid "Save the current data to a new file."
 msgstr "Salvar os dados atuais para um novo arquivo."
 
 msgid "Search Notes..."
-msgstr ""
+msgstr "Procurar Notas..."
 
 msgid "Download notes from the note search API"
-msgstr ""
+msgstr "Baixar notas da API de busca de notas"
 
 msgid "Search the OSM API for notes containing words:"
-msgstr ""
+msgstr "Buscar a API do OSM por notas que contenham as seguintes palavras:"
 
 msgid "Search for notes"
-msgstr ""
+msgstr "Procurar por notas"
 
 msgid "You must enter a search term"
-msgstr ""
+msgstr "Você deve digitar um termo de busca"
 
 msgid "Select All"
 msgstr "Selecionar Tudo"
@@ -1506,7 +1533,7 @@ msgid "Duplicate nodes that are used by multiple ways."
 msgstr "Duplicar nós que são usados em caminhos múltiplos."
 
 msgid "This node is not glued to anything else."
-msgstr "Este nó não esta grudado a nada."
+msgstr "Este nó não está grudado a nada."
 
 msgid "None of these nodes are glued to anything else."
 msgstr "Nenhum destes nós está grudado a algo."
@@ -1608,7 +1635,7 @@ msgstr[1] ""
 "A via afetada irá desaparecer após desconectar os nós selecionados."
 
 msgid "Some irrelevant nodes have been removed from the selection"
-msgstr ""
+msgstr "Alguns nós irrelevantes foram removidos da seleção"
 
 msgid "Undo"
 msgstr "Desfazer"
@@ -1635,12 +1662,13 @@ msgid "Updates the objects in the active data layer from the server."
 msgstr "Atualiza a partir do servidor os objetos na camada de dados ativa."
 
 msgid "Update modified"
-msgstr "Atualização modificada"
+msgstr "Atualizar objetos modificados"
 
 msgid ""
 "Updates the currently modified objects from the server (re-downloads data)"
 msgstr ""
-"Atualizar os objetos atuais modificados pelo servidor (baixa novamente dados)"
+"Atualiza os objetos atualmente modificados a partir do servidor (baixa "
+"novamente os dados)"
 
 msgid "No current dataset found"
 msgstr "Nenhum grupo de dados encontrado"
@@ -1866,7 +1894,7 @@ msgid "Markers from {0}"
 msgstr "Marcadores de {0}"
 
 msgid "Download OSM Notes"
-msgstr ""
+msgstr "Baixar Notas do OSM"
 
 msgid "Downloading Notes"
 msgstr "Baixando notas"
@@ -1876,25 +1904,27 @@ msgstr "Notas"
 
 msgid "{0} note has been downloaded."
 msgid_plural "{0} notes have been downloaded."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Baixou-se {0} nota."
+msgstr[1] "Baixaram-se {0} notas."
 
 msgid ""
 "Since the download limit was {0}, there might be more notes to download."
 msgstr ""
+"Como o limite de downloads foi {0}, pode haver mais notas a serem baixadas."
 
 msgid ""
 "Request a smaller area to make sure that all notes are being downloaded."
 msgstr ""
+"Peça uma área menor para se certificar de que todas as notas serão baixadas."
 
 msgid "More notes to download"
-msgstr ""
+msgstr "Mais notas a baixar"
 
 msgid "Download OSM Notes within Bounds"
-msgstr ""
+msgstr "Baixar notas do OSM dentro do limite"
 
 msgid "Download OSM Note by ID"
-msgstr ""
+msgstr "Baixar nota do OSM por ID"
 
 msgid "Download Compressed OSM Change"
 msgstr "Baixar modificações OSM comprimidas"
@@ -1906,7 +1936,7 @@ msgid "Download Compressed OSM"
 msgstr "Baixando OSM comprimido"
 
 msgid "Download OSM object by ID"
-msgstr ""
+msgstr "Baixar objeto do OSM por ID"
 
 msgid "Download OSM"
 msgstr "Baixando OSM"
@@ -2112,15 +2142,6 @@ msgstr "Encaixar Ângulos ativo."
 msgid "Finish drawing."
 msgstr "Finalizar desenho."
 
-msgid "FIX"
-msgstr "CORREÇÃO"
-
-msgid "draw angle snap"
-msgstr "desenhar encaixe do ângulo"
-
-msgid "draw angle snap highlight"
-msgstr "desenhar destaque do encaixe do ângulo"
-
 msgid "Toggle snapping by {0}"
 msgstr "Alternar encaixe por {0}"
 
@@ -2142,6 +2163,15 @@ msgstr "0,45,90,..."
 msgid "0,30,45,60,90,..."
 msgstr "0,30,45,60,90,..."
 
+msgid "FIX"
+msgstr "CORREÇÃO"
+
+msgid "draw angle snap"
+msgstr "desenhar encaixe do ângulo"
+
+msgid "draw angle snap highlight"
+msgstr "desenhar destaque do encaixe do ângulo"
+
 msgid "Angle snapping"
 msgstr "Encaixar ângulos"
 
@@ -2278,9 +2308,6 @@ msgstr ""
 "ParallelWayAction\n"
 "A via selecionada precisa formar um caminho simples sem ramos"
 
-msgid "Make parallel way error"
-msgstr "Erro de criação de via paralela"
-
 msgid "Drag play head"
 msgstr "Mover cabeça de execução"
 
@@ -2327,7 +2354,7 @@ msgid "Ctrl to merge with nearest node."
 msgstr "Ctrl para combinar com o nó mais próximo."
 
 msgid "Release the mouse button to stop moving."
-msgstr "Solve o botão do mouse para parar de mover."
+msgstr "Solte o botão do mouse para parar de mover."
 
 msgid "Release the mouse button to stop rotating."
 msgstr "Solte o botão do mouse para parar de girar."
@@ -2513,9 +2540,15 @@ msgstr "Todos os Objetos"
 msgid "Also include incomplete and deleted objects in search."
 msgstr "Também incluir na busca objetos incompletos ou apagados."
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr "expressão regular"
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr "adicionar botão à barra de ferramentas"
 
@@ -2645,11 +2678,12 @@ msgstr "propriedades"
 
 msgid ""
 "ways with at least 20 nodes, or relations containing at least 20 nodes"
-msgstr ""
+msgstr "vias com pelo menos 20 nós, ou relações contendo pelo menos 20 nós"
 
 msgid ""
 "nodes with at least 3 referring ways, or relations containing at least 3 ways"
 msgstr ""
+"nós conectados a pelo menos 3 vias, ou relações contendo pelo menos 3 vias"
 
 msgid "objects having 5 to 10 tags"
 msgstr "objetos com 5 a 10 tags"
@@ -2661,7 +2695,7 @@ msgid "closed ways with an area of 100 m²"
 msgstr "caminhos fechados com uma área de 100 m²"
 
 msgid "ways with a length of 200 m or more"
-msgstr ""
+msgstr "vias com comprimento igual ou superior a 200 m"
 
 msgid "state"
 msgstr "estado"
@@ -2738,6 +2772,10 @@ msgid "RX"
 msgstr "RX"
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr "A"
 
@@ -2791,6 +2829,9 @@ msgstr "Intervalo de números esperado"
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr "Token não esperado. Esperava {0}, mas {1} foi encontrado"
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr "Credencial de autenticação inesperada: {0}"
 
@@ -3232,12 +3273,10 @@ msgstr "Correção automática de tags"
 
 msgid "Unable to create directory {0}, autosave will be disabled"
 msgstr ""
-"Não foi possível criar o diretório {0}, o salvamento automático será "
-"desabilitado"
+"Impossível criar o diretório {0}, a gravação automática será desabilitada"
 
 msgid "Unable to create file {0}, other filename will be used"
-msgstr ""
-"Não foi possível criar o arquivo {0}, outro nome de arquivo será usado"
+msgstr "Impossível criar o arquivo {0}, outro nome de arquivo será usado"
 
 msgid "IOError while creating file, autosave will be skipped: {0}"
 msgstr ""
@@ -3245,7 +3284,7 @@ msgstr ""
 "ignorado: {0}"
 
 msgid "Unable to delete old backup file {0}"
-msgstr "Não foi possível remover o arquivo de segurança antigo {0}"
+msgstr "Impossível remover o arquivo de backup antigo {0}"
 
 msgid "Your work has been saved automatically."
 msgstr "Suas modificações foram salvas automaticamente."
@@ -3287,6 +3326,24 @@ msgstr "Falha ao criar diretório de cache ausente: {0}"
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr "<html>Falha ao criar o diretório de cache que faltava: {0}</html>"
 
+msgid "Unable to delete temporary file {0}"
+msgstr "Impossível deletar o arquivo temporário {0}"
+
+msgid "Unable to set file non-readable {0}"
+msgstr "Impossível remover permissão de leitura de {0}"
+
+msgid "Unable to set file non-writable {0}"
+msgstr "Impossível remover permissão de escrita de {0}"
+
+msgid "Unable to set file non-executable {0}"
+msgstr "Impossível remover permissão de execução de {0}"
+
+msgid "Unable to set file readable {0}"
+msgstr "Impossível definir permissão de leitura de {0}"
+
+msgid "Unable to set file writable {0}"
+msgstr "Impossível definir permissão de execução de {0}"
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3361,6 +3418,8 @@ msgid ""
 "Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
 "startup)."
 msgstr ""
+"Tente ativar a rede IPv6, preferindo IPv6 ao IPv4 (funciona somente na "
+"inicialização)."
 
 msgid " (at line {0}, column {1})"
 msgstr " (na linha {0}, coluna {1})"
@@ -3425,12 +3484,51 @@ msgctxt "compass"
 msgid "E"
 msgstr "L"
 
-msgid "Not in cache"
-msgstr "Não está no cache"
-
 msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr "Projeção ''{0}'' não foi encontrada, marcador ''{1}'' não é usável"
 
+msgid "HTTP error {0} when loading tiles"
+msgstr "Erro HTTP {0} ao ler imagens"
+
+msgid "Error downloading tiles: {0}"
+msgstr "Erro ao baixar imagens: {0}"
+
+msgid "Could not load image from tile server"
+msgstr "Impossível carregar imagem do servidor de imagens"
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+"{0} não é um argumento WMS válido. Por favor verifique a URL desse "
+"servidor:\n"
+"{1}"
+
+msgid "Select WMTS layer"
+msgstr "Selecione camada WMTS"
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr "Projeção"
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr "Nenhuma camada definida pelo documento getCapabilities: {0}"
+
+msgid "No layer selected"
+msgstr "Nenhuma camada selecionada"
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
+msgstr ""
+"Apenas imagens quadradas são aceitas. Servidor retornou {0}x{1} para o "
+"identificador TileMatrix {2}"
+
 msgid "ID > 0 expected. Got {0}."
 msgstr "ID > 0 esperada. Obtida {0}."
 
@@ -3450,7 +3548,7 @@ msgstr "Uma primitiva com ID = 0 não pode ser invisível."
 msgid ""
 "Unable to add primitive {0} to the dataset because it is already included"
 msgstr ""
-"Impossível adicionar primitiva {0} no conjunto de dados porque ela já está "
+"Impossível adicionar a primitiva {0} ao conjunto de dados porque já está "
 "incluída"
 
 msgid ""
@@ -3645,6 +3743,13 @@ msgstr "texto"
 msgid "areatext"
 msgstr "Área de texto"
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr "Projeção UTM (\"+proj=utm\") requer parâmetro \"+zone=...\"."
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+"Espera-se um valor inteiro entre 1 e 60 para o parâmetro \"+zone=...\"."
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr "O parâmetro deve começar com um ''+'' (encontrado ''{0}'')"
 
@@ -3672,6 +3777,9 @@ msgstr "Elipsoide ''{0}'' não suportado."
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr "Combinação de parâmetros elipsoides não é suportado."
 
+msgid "Unknown datum identifier: ''{0}''"
+msgstr "Identificador do ponto de referência desconhecido: ''{0}''"
+
 msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr "Elipsoide requer (+ellps=* ou +a=*, +b=*)"
 
@@ -3679,9 +3787,6 @@ msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 "Grade mudança no arquivo '' {0} '' para a opção +nadgrids não suportado."
 
-msgid "Unknown datum identifier: ''{0}''"
-msgstr "Identificador do ponto de referência desconhecido: ''{0}''"
-
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
 msgstr "Ponto de referência requerido (+datum=*, +towgs84=* ou +nadgrids=*)"
 
@@ -4010,7 +4115,7 @@ msgid "Checks for errors in internet-related tags."
 msgstr "Verifica se há erros nas tags relacionados à internet."
 
 msgid " URL cannot be converted to ASCII: {0}"
-msgstr ""
+msgstr " URL não pode ser convertida para ASCII: {0}"
 
 msgid "''{0}'': {1}"
 msgstr "''{0}'': {1}"
@@ -4037,13 +4142,13 @@ msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr "Valor do número de faixas dependentes inconsistente atrás"
 
 msgid "Long segments"
-msgstr ""
+msgstr "Segmentos longos"
 
 msgid "This tests for long way segments, which are usually errors."
-msgstr ""
+msgstr "Testa segmentos longos de vias, que geralmente são erros."
 
 msgid "Very long segment of {0} kilometers"
-msgstr ""
+msgstr "Segmento muito longo de {0} quilômetros"
 
 msgid "Tag checker (MapCSS based)"
 msgstr "Verificador de tag (MapCSS based)"
@@ -4102,6 +4207,8 @@ msgid ""
 "With the currently used mappaint style the style for inner way equals the "
 "multipolygon style"
 msgstr ""
+"Com o estilo do mapa atualmente utilizado, o estilo para vias internas se "
+"iguala ao estilo do multipolígono."
 
 msgid "Style for outer way mismatches"
 msgstr "Estilo para caminho externo faltando"
@@ -4110,6 +4217,8 @@ msgid ""
 "With the currently used mappaint style(s) the style for outer way mismatches "
 "polygon"
 msgstr ""
+"Com o(s) estilo(s) do mapa atualmente utilizado(s), o estilo para vias "
+"exteriores é incompatível com o polígono"
 
 msgid "Area style on outer way"
 msgstr "Estilo da área em outra via"
@@ -4142,7 +4251,7 @@ msgstr ""
 "por exemplo, Italia - Italien - Italy."
 
 msgid "Missing name:*={0}. Add tag with correct language key."
-msgstr ""
+msgstr "Falta name:*={0}. Adicione uma tag com a chave correta da língua."
 
 msgid "A name is missing, even though name:* exists."
 msgstr "Um nome está faltando, embora nome:* exista."
@@ -4245,20 +4354,22 @@ msgid "Relation is empty"
 msgstr "Relação está vazio"
 
 msgid "Role member does not match expression {0} in template {1}"
-msgstr ""
+msgstr "Papel do membro não bate com a expressão {0} no template {1}"
 
 msgid ""
 "Role member type {0} does not match accepted list of {1} in template {2}"
 msgstr ""
+"Papel do membro do tipo {0} não bate com a lista aceita de {1} no template "
+"{2}."
 
 msgid "<empty>"
 msgstr "<vazio>"
 
 msgid "Role {0} unknown in templates {1}"
-msgstr ""
+msgstr "Papel {0} é desconhecido no template {1}"
 
 msgid "Empty role type found when expecting one of {0}"
-msgstr ""
+msgstr "Papel vazio encontrado quando se esperava {0}"
 
 msgid "Role {0} missing"
 msgstr "Regra {0} faltando"
@@ -4329,9 +4440,6 @@ msgstr "O código da etiqueta é maior que permitido"
 msgid "Tags with empty values"
 msgstr "Tags com valores vazios"
 
-msgid "Invalid property key"
-msgstr "Chave de propriedade inválida"
-
 msgid "Invalid white space in property key"
 msgstr "Espaço em branco inválido na chave de propriedade"
 
@@ -4341,12 +4449,24 @@ msgstr "Valores de propriedade começam ou terminam com espaço em branco"
 msgid "Property values contain HTML entity"
 msgstr "Valores de propriedade contêm entidade HTML"
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr "A chave ''{0}'' não está nas predefinições."
 
 msgid "Presets do not contain property key"
 msgstr "Chave não incluída nas predefinições"
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr "Valor \"{0}'' para a chave ''{1}'' parece ser ''{2}''."
+
+msgid "Misspelled property value"
+msgstr "Erro ortográfico na propriedade do valor"
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr "O valor ''{0}'' para a chave ''{1}'' não está nas predefinições."
 
@@ -4467,7 +4587,7 @@ msgstr ""
 "Este teste verifica se as vias que podem ser circulares estão fechadas."
 
 msgid "Unclosed way"
-msgstr "Via fechada"
+msgstr "Caminho não fechado"
 
 msgid "natural type {0}"
 msgstr "tipo natural {0}"
@@ -4531,7 +4651,10 @@ msgid "Way node near other way"
 msgstr "Nó da via muito próximo de outra via"
 
 msgid "Connected way end node near other way"
-msgstr ""
+msgstr "Nó final da via conectada está perto de outra via"
+
+msgid "Unconnected nodes without physical tags"
+msgstr "Nós desconectados sem etiquetas físicas"
 
 msgid "Untagged and unconnected nodes"
 msgstr "Nós não marcados e desconectados"
@@ -4540,9 +4663,6 @@ msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 "Este teste verifica por nós sem etiquetas que não são parte de uma via."
 
-msgid "Unconnected nodes without physical tags"
-msgstr "Nós desconectados sem etiquetas físicas"
-
 msgid "No tags"
 msgstr "Sem etiquetas"
 
@@ -4550,16 +4670,16 @@ msgid "Has tag containing ''fixme'' or ''FIXME''"
 msgstr "Possui uma etiqueta contendo ''fixme'' ou ''FIXME''"
 
 msgid "Has key ''note'' or ''comment'' or ''description''"
-msgstr "Possui a chave ''nota'', ''comentário'' ou ''descrição''"
+msgstr "Possui a chave ''note'' ou ''comment'' ou ''description''"
 
 msgid "Has key ''created_by'' or ''converted_by''"
-msgstr "Possui a chave ''criado_por'' ou ''convertido_por''"
+msgstr "Possui a chave ''created_by'' ou ''converted_by''"
 
 msgid "Has key ''watch''"
-msgstr "Possui a chave ''assistir''"
+msgstr "Possui a chave ''watch''"
 
 msgid "Has key ''source''"
-msgstr "Possui a chave ''fonte''"
+msgstr "Possui a chave ''source''"
 
 msgid "Untagged, empty and one node ways"
 msgstr "Não marcado, vazio e um apenas um nó na via"
@@ -4568,7 +4688,7 @@ msgid "This test checks for untagged, empty and one node ways."
 msgstr "Este teste verifica por vias sem etiquetas, vazias e com um só nó."
 
 msgid "Unnamed ways"
-msgstr "Via sem nome"
+msgstr "Vias sem nome"
 
 msgid "Unnamed junction"
 msgstr "Cruzamento sem nome"
@@ -4737,10 +4857,11 @@ msgid "Click to close the dialog"
 msgstr "Clicar para fechar diálogo"
 
 msgid "Imagery offset"
-msgstr "Deslocamento das imagens"
+msgstr "Deslocamento de camada"
 
+msgctxt "menu"
 msgid "Imagery"
-msgstr "Imagens"
+msgstr "Camadas"
 
 msgctxt "layer"
 msgid "Offset"
@@ -4804,7 +4925,7 @@ msgid "Print debugging messages to console"
 msgstr "Imprimir mensagens de depuração no console"
 
 msgid "Skip loading plugins"
-msgstr ""
+msgstr "Pular carregamento de plugins"
 
 msgid "Disable access to the given resource(s), separated by comma"
 msgstr "Desative o acesso ao recurso especificado(s), separados por vírgula"
@@ -4816,19 +4937,19 @@ msgid "/PATH/TO/JOSM/PREF    "
 msgstr ""
 
 msgid "Set the preferences directory"
-msgstr ""
+msgstr "Definir o diretório de preferências"
 
 msgid "/PATH/TO/JOSM/USERDATA"
 msgstr ""
 
 msgid "Set the user data directory"
-msgstr ""
+msgstr "Configurar o diretório de dados do usuário"
 
 msgid "/PATH/TO/JOSM/CACHE   "
 msgstr ""
 
 msgid "Set the cache directory"
-msgstr ""
+msgstr "Configurar o diretório de cache"
 
 msgid "/PATH/TO/JOSM/HOMEDIR "
 msgstr ""
@@ -4837,11 +4958,15 @@ msgid ""
 "Relocate all 3 directories to homedir. Cache directory will be in "
 "homedir/cache"
 msgstr ""
+"Realocar todos os 3 diretórios para homedir. Diretório do cache será "
+"homedir/cache"
 
 msgid ""
 "-Djosm.home has lower precedence, i.e. the specific setting overrides the "
 "general one"
 msgstr ""
+"-Djosm.home tem precedência menor, p.ex. a configuração específica se "
+"sobrepõe à configuração geral"
 
 msgid ""
 "note: For some tasks, JOSM needs a lot of memory. It can be necessary to add "
@@ -4871,7 +4996,7 @@ msgid "Printing debugging messages to console"
 msgstr "Imprimindo mensagens de depuração no console"
 
 msgid "Plugin loading skipped"
-msgstr ""
+msgstr "Pulou-se o carregamento dos plugins"
 
 msgid "Enabled detailed debug level (trace)"
 msgstr "Habilitado nível de depuração detalhado (trace)"
@@ -4909,21 +5034,26 @@ msgid ""
 msgid_plural ""
 "JOSM is running in offline mode. These resources will not be available: {0}"
 msgstr[0] ""
-"JOSM está rodando em modo offline. Este recurso não estará disponível: {0}"
+"JOSM está executando em modo offline. Este recurso não estará disponível: {0}"
 msgstr[1] ""
-"JOSM está rodando em modo offline. Estes recursos não estarão disponível: {0}"
+"JOSM está executando em modo offline. Estes recursos não estarão "
+"disponíveis: {0}"
 
 msgid ""
 "Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
 msgstr ""
+"Rede IPv6 utilizável detectada, sendo preferível IPv6 sobre IPv4 no próximo "
+"reinício."
 
 msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
-msgstr ""
+msgstr "Rede IPv6 utilizável detectada, sendo preferível IPv6 sobre IPv4."
 
 msgid ""
 "Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
 "restart."
 msgstr ""
+"Rede IPv6 utilizável não detectada, sendo preferível IPv4 sobre IPv6 no "
+"próximo reinício."
 
 msgid "Unsaved osm data"
 msgstr "Dado osm não salvo"
@@ -4974,45 +5104,56 @@ msgstr ""
 "devido a uma configuração de proxy ausente.<br>Você gostaria de mudar suas "
 "configurações de proxy agora?"
 
+msgctxt "menu"
 msgid "File"
 msgstr "Arquivo"
 
-msgid "Session"
-msgstr "Sessão"
+msgctxt "menu"
+msgid "Edit"
+msgstr "Editar"
 
+msgctxt "menu"
 msgid "View"
-msgstr "Vista"
+msgstr "Visualizar"
 
+msgctxt "menu"
 msgid "Tools"
 msgstr "Ferramentas"
 
+msgctxt "menu"
 msgid "More tools"
 msgstr "Mais ferramentas"
 
+msgctxt "menu"
 msgid "Data"
 msgstr "Dados"
 
+msgctxt "menu"
 msgid "Selection"
 msgstr "Seleção"
 
+msgctxt "menu"
 msgid "Presets"
 msgstr "Predefinições"
 
 msgid "More..."
 msgstr "Mais..."
 
+msgctxt "menu"
 msgid "GPS"
 msgstr "GPS"
 
+msgctxt "menu"
 msgid "Windows"
 msgstr "Janelas"
 
+msgctxt "menu"
+msgid "Help"
+msgstr "Ajuda"
+
 msgid "Menu: {0}"
 msgstr "Menu: {0}"
 
-msgid "Save and load the current session (list of layers, etc.)"
-msgstr "Salvar e carregar a sessão atual (lista de camadas, etc.)"
-
 msgid "Edit toolbar"
 msgstr "Editar barra de ferramentas"
 
@@ -5028,16 +5169,17 @@ msgid "Click to open the tagging presets tab in the preferences"
 msgstr "Clique para abrir a guia de marcações predefinidas nas preferências"
 
 msgid "Imagery preferences"
-msgstr "Preferências das imagens"
+msgstr "Preferências das camadas"
 
 msgid "Click to open the imagery tab in the preferences"
-msgstr "Clique para abrir a aba Preferências das imagens"
+msgstr "Clique para abrir a aba Preferências das camadas"
 
 msgid "Search menu items"
-msgstr ""
+msgstr "Buscar itens do menu"
 
+msgctxt "menu"
 msgid "Audio"
-msgstr "Áudio"
+msgstr ""
 
 msgid "Do not hide toolbar"
 msgstr "Não ocultar barra de ferramentas"
@@ -5160,67 +5302,17 @@ msgstr "No fundo"
 msgid "Click to run job in background"
 msgstr "Clique para executar o tarefa em segundo plano"
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-"Imagens aéreas podem estar desalinhadas. Por favor, verifique seu "
-"deslocamento usando trilhas de GPS!"
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-
-msgid "Details..."
-msgstr "Detalhes..."
-
-msgid "Hide this message and never show it again"
-msgstr "Ocultar esta mensagem e não mostrá-la novamente"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-"<html>Por favor confirme para remover <strong>1 objeto</strong> de <strong>1 "
-"relação</strong>.</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>Por favor confirme para remover <strong>1 objeto</strong> de "
-"<strong>{0} relações</strong>.</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>Por gentileza confirme a remoção de <strong>{0} objetos</strong> de "
-"<strong>{1} relações</strong>.</html>"
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] "Apagando {0} objeto"
-msgstr[1] "Apagando {0} objetos"
-
-msgid "Delete objects"
-msgstr "Apagar objetos"
-
-msgid "To delete"
-msgstr "A apagar"
-
-msgid "From Relation"
-msgstr "De Relação"
-
-msgid "Pos."
-msgstr "Pos."
+msgid " ({0})"
+msgstr " ({0})"
 
-msgid "Role"
-msgstr "Regra"
+msgid "{0} completed in {1}"
+msgstr "{0} concluído em {1}"
 
-msgid "Click to close the dialog and remove the object from the relations"
-msgstr "Clique para fechar o diálogo e remover o objeto das relações"
+msgid "Enlarge"
+msgstr "Ampliar"
 
-msgid "Click to close the dialog and to abort deleting the objects"
-msgstr "Clique para fechar o diálogo e cancelar a remoção dos objetos"
+msgid "Shrink"
+msgstr "Reduzir"
 
 msgid ""
 "<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
@@ -5486,7 +5578,7 @@ msgstr ""
 "quando as decisões de mesclagem são aplicadas."
 
 msgid "Their version"
-msgstr "Sua versão"
+msgstr "Versão deles"
 
 msgid "List of elements in their dataset, i.e. the server dataset"
 msgstr ""
@@ -5627,8 +5719,8 @@ msgstr[1] "Versão combinada ({0} entradas)"
 
 msgid "Their version ({0} entry)"
 msgid_plural "Their version ({0} entries)"
-msgstr[0] "Sua versão ({0} entrada)"
-msgstr[1] "Sua versão ({0} entradas)"
+msgstr[0] "Versão deles ({0} entrada)"
+msgstr[1] "Versão deles ({0} entradas)"
 
 msgid "Node"
 msgstr "Nó"
@@ -5687,6 +5779,9 @@ msgstr "Manter seu estado suprimido"
 msgid "Undecide conflict between deleted state"
 msgstr "Não decidir conflito entre diferentes estados de exclusão"
 
+msgid "Role"
+msgstr "Regra"
+
 msgid "Primitive"
 msgstr "Primitivo"
 
@@ -5717,7 +5812,7 @@ msgid "My version (local dataset)"
 msgstr "Minha versão (dados locais)"
 
 msgid "Their version (server dataset)"
-msgstr "Sua versão (dados do servidor)"
+msgstr "Versão deles (dados do servidor)"
 
 msgid "Keep the selected key/value pairs from the local dataset"
 msgstr "Manter o par chave/valor selecionado dos dados locais"
@@ -5968,6 +6063,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr "Aplicar regra para todos os membros"
 
+msgid "Pos."
+msgstr "Pos."
+
 msgid "Orig. Way"
 msgstr "Caminho Original"
 
@@ -6135,20 +6233,61 @@ msgstr "Resolver conflitos"
 msgid "Resolve conflicts for ''{0}''"
 msgstr "Resolver conflitos para ''{0}''"
 
-msgid "Filter objects and hide/disable them."
-msgstr "Filtrar objetos e esconder/desativá-los."
-
-msgid "Enable filter"
-msgstr "Habilitar filtro"
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+"<html>Por favor confirme para remover <strong>1 objeto</strong> de <strong>1 "
+"relação</strong>.</html>"
 
-msgid "Multikey: {0}"
-msgstr "Multitecla: {0}"
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Por favor confirme para remover <strong>1 objeto</strong> de "
+"<strong>{0} relações</strong>.</html>"
 
-msgid "Hide filter"
-msgstr "Ocultar filtro"
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Por gentileza confirme a remoção de <strong>{0} objetos</strong> de "
+"<strong>{1} relações</strong>.</html>"
 
-msgid "Hiding filter"
-msgstr "Ocultando filtro"
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] "Apagando {0} objeto"
+msgstr[1] "Apagando {0} objetos"
+
+msgid "Delete objects"
+msgstr "Apagar objetos"
+
+msgid "To delete"
+msgstr "A apagar"
+
+msgid "From Relation"
+msgstr "De Relação"
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr "Clique para fechar o diálogo e remover o objeto das relações"
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr "Clique para fechar o diálogo e cancelar a remoção dos objetos"
+
+msgid "Filter objects and hide/disable them."
+msgstr "Filtrar objetos e esconder/desativá-los."
+
+msgid "Enable filter"
+msgstr "Habilitar filtro"
+
+msgid "Multikey: {0}"
+msgstr "Multitecla: {0}"
+
+msgid "Hide filter"
+msgstr "Ocultar filtro"
+
+msgid "Hiding filter"
+msgstr "Ocultando filtro"
 
 msgid "Inverse filter"
 msgstr "Inverter filtro"
@@ -6238,8 +6377,8 @@ msgstr "Informação avançada de objeto"
 msgid "map style"
 msgstr "estilo de mapa"
 
-msgid " ({0})"
-msgstr " ({0})"
+msgid "edit counts"
+msgstr "contagem de edições"
 
 msgid "not in data set"
 msgstr "não no conjunto de dados"
@@ -6248,7 +6387,7 @@ msgid "Node: "
 msgstr "Nó: "
 
 msgid "Way: "
-msgstr "Trilha: "
+msgstr "Caminho: "
 
 msgid "Relation: "
 msgstr "Relação: "
@@ -6379,6 +6518,11 @@ msgstr ""
 "Aviso: Os 2 objetos selecionados têm caches iguais, mas não de estilo "
 "idênticos."
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] "{0} usuário editou por último a seleção:"
+msgstr[1] "{0} usuários editaram por último a seleção:"
+
 msgid "xml"
 msgstr "xml"
 
@@ -6388,28 +6532,59 @@ msgstr "mapcss"
 msgid "unknown"
 msgstr "Desconhecido"
 
+msgid "Enter the coordinates for the new node."
+msgstr "Preencha as coordenadas do novo nó."
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
-msgstr ""
-"Digite as coordenadas para o novo nó. <br/>Você pode separar longitude e "
-"latitude com um espaço, vírgula ou ponto e vírgula.<br/>Use números "
-"positivos ou N, E para indicar Norte ou Leste.<br/>Para Sul e Oeste você "
-"pode usar números negativos ou S, W.<br/>O valor das coordenadas pode estar "
-"em um dos três formatos: "
-"<ul><li><i>graus</i><tt>°</tt></li><li><i>graus</i><tt>°</tt> "
-"<i>minutos</i><tt>'</tt></li><li><i>graus</i><tt>°</tt> "
-"<i>minutos</i><tt>'</tt> <i>segundos</i><tt>&quot</tt></li></ul>Símbolos "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> são opcionais.<br/><br/>Alguns exemplos:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+"Você pode separar a longitude da latitude com um espaço, vírgula ou ponto e "
+"vírgula."
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+"Utilize números positivos ou as letras N/E para indicar a posição cardeal "
+"Norte (N) ou Leste (E)."
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+"Para as direções cardeais Sul e Oeste você pode usar números negativos ou as "
+"letras S (Sul) e W (Oeste)."
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr "Os valores da coordenada podem estar em um desses três formatos:"
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr "<i>graus</i><tt>°</tt>"
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr "<i>graus</i><tt>°</tt> <i>minutos</i><tt>'</tt>"
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+"<i>graus</i><tt>°</tt> <i>minutos</i><tt>'</tt> "
+"<i>segundos</i><tt>&quot</tt>"
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+"Pode-se utilizar também a sintaxe <tt>lat=\"...\" lon=\"...\"</tt> ou "
+"<tt>lat=''...'' lon=''...''</tt>."
+
+msgid "Some examples:"
+msgstr "Alguns exemplos:"
 
 msgid "Projected coordinates:"
 msgstr "Coordenadas projetadas:"
@@ -6456,6 +6631,12 @@ msgstr "Opacidade"
 msgid "Adjust opacity of the layer."
 msgstr "Ajusta a opacidade da camada."
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr "Ativar"
 
@@ -6585,8 +6766,14 @@ msgstr "Configurações do estilo"
 msgid "Customize the style"
 msgstr "Personalizar o estilo"
 
+msgid "Mini map"
+msgstr "Minimapa"
+
+msgid "Displays a small map of the current edit location"
+msgstr "Mostra um pequeno mapa da posição atual de edição"
+
 msgid "List of notes"
-msgstr ""
+msgstr "Lista de notas"
 
 msgid "Add comment"
 msgstr "Adicionar comentário"
@@ -6643,14 +6830,20 @@ msgstr "ID do objeto:"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "Entre com o ID do objeto que deve ser baixado"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+"IDs de objetos podem ser separados por vírgulas ou espaços. Por exemplo: {0}"
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+"No modo misto, especificar objetos assim: {0}<br/>({1} é para <i>node</i>, "
+"{2} para <i>way</i>, e {3} para <i>relation</i>)"
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
-"IDs de objetos podem ser separadas por vírgula ou espaços. <br/>Examplos: "
-"{0}<br/>No modo misto, especifique os objetos como este: {1}<br/>({2} "
-"significa <i>nó</i>, {3} para <i>via</i>, e {4} para <i>relação</i>)"
+"Intervalos de IDs de objetos são especificados com um hífen. Por exemplo: {0}"
 
 msgid ""
 "Invalid ID list specified\n"
@@ -6680,6 +6873,9 @@ msgstr "Relações: {0}/{1}"
 msgid "Relations: {0}"
 msgstr "Relações: {0}"
 
+msgid "Selection"
+msgstr "Seleção"
+
 msgid "Open a selection list window."
 msgstr "Abrir uma janela de seleção."
 
@@ -6773,6 +6969,12 @@ msgstr "Abrir a janela de validação."
 msgid "Validation results"
 msgstr "Resultados da validação"
 
+msgid "Lookup"
+msgstr "Procurar"
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr "Corrigir"
 
@@ -6877,7 +7079,7 @@ msgid ""
 "download<br>your changesets from the OSM server unless you enter your OSM "
 "user name<br>in the JOSM preferences.</html>"
 msgstr ""
-"<html>O JOSM está atualmente rodando com um usuário anônimo. Ele não vai "
+"<html>O JOSM está atualmente executando com um usuário anônimo. Ele não vai "
 "baixar<br>seus conjuntos de alterações do servidor do OSM até que você "
 "informe seu nome de usuário<br>nas preferências do JOSM.</html>"
 
@@ -7370,17 +7572,17 @@ msgid "Discardable key: background"
 msgstr "Chave descartável: seleção segundo plano"
 
 msgid "{0} ''{1}''"
-msgstr ""
+msgstr "{0} ''{1}''"
 
 msgid "{0} different"
 msgid_plural "{0} different"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} diferente"
+msgstr[1] "{0} diferentes"
 
 msgid ", {0} unset"
 msgid_plural ", {0} unset"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] ", {0} indefinido"
+msgstr[1] ", {0} indefinidos"
 
 msgid "Select objects for which to change tags."
 msgstr "Selecione os objetos para os quais mudar as tags."
@@ -7401,7 +7603,7 @@ msgid "<different>"
 msgstr "<diferente>"
 
 msgid "Objects: {2} / Tags: {0} / Memberships: {1}"
-msgstr ""
+msgstr "Objetos: {2} / Tags: {0} / Membros: {1}"
 
 msgid "Tags: {0} / Memberships: {1}"
 msgstr "Tags: {0}/ Membors: {1}"
@@ -7442,6 +7644,12 @@ msgstr "Vá para o wiki do OSM, para ajuda de etiqueta (F1)"
 msgid "Launch browser with wiki help for selected object"
 msgstr "Iniciar o navegador com a ajuda wiki para objeto selecionado"
 
+msgid "Go to Taginfo"
+msgstr "Ir para Taginfo"
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr "Colar valor"
 
@@ -7537,15 +7745,14 @@ msgstr "Defina o número de tags adicionadas recentemente"
 msgid "Remember last used tags after a restart"
 msgstr "Lembrar das últimas tags usadas antes do restar"
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
-msgstr ""
+msgid "to apply first suggestion"
+msgstr "para aplicar a primeira sugestão"
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
-msgstr ""
+msgid "to add without closing the dialog"
+msgstr "para adicionar sem fechar a caixa de diálogo"
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
-msgstr ""
+msgid "to add first suggestion without closing the dialog"
+msgstr "para adicionar a primeira sugestão sem fechar a caixa de diálogo"
 
 msgid "Please enter the number of recently added tags to display"
 msgstr ""
@@ -7742,6 +7949,13 @@ msgstr "Classificar a relação de membros"
 msgid "Relation Editor: Sort"
 msgstr "Editor de relação: Classificar"
 
+msgid "Sort below"
+msgstr "Classificar abaixo"
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+"Classificar os membros da relação selecionada e todos os membros abaixo"
+
 msgid "Reverse the order of the relation members"
 msgstr "Reverter a ordem dos membros da relação"
 
@@ -8114,6 +8328,9 @@ msgid ""
 "<strong>{2}</strong> is enabled.<br>Please choose to either download OSM "
 "data, or GPX data, or Notes, or all.</html>"
 msgstr ""
+"<html>Nem <strong>{0}</strong> nem <strong>{1}</strong> nem "
+"<strong>{2}</strong> está ativo.<br>Por favor escolha baixar apenas dados "
+"OSM, ou dados GPX, ou Notas, ou tudo.</html>"
 
 msgid "Download referrers (parent relations)"
 msgstr "Baixar referentes (relações mães)"
@@ -8331,6 +8548,9 @@ msgstr "Carregando histórico para relação {0}"
 msgid "Node {0}"
 msgstr "Nó {0}"
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr "Zoom no nó"
 
@@ -8359,18 +8579,18 @@ msgid "Changeset source"
 msgstr "Fonte do changeset"
 
 msgid "Imagery used"
-msgstr ""
+msgstr "Camada usada"
 
 msgid "<b>Source</b>:"
 msgstr "<b>Fonte</b>:"
 
 msgid "<b>Imagery</b>:"
-msgstr ""
+msgstr "<b>Camada</b>:"
 
 msgid ""
 "<html>Version <strong>{0}</strong> currently edited in layer ''{1}''</html>"
 msgstr ""
-"<html>Versão <strong>{0}</strong> atualmente editar na camada ''{1}''</html>"
+"<html>Versão <strong>{0}</strong> atualmente editada na camada ''{1}''</html>"
 
 msgid ""
 "<html>Version <strong>{0}</strong> created on <strong>{1}</strong></html>"
@@ -8378,7 +8598,7 @@ msgstr ""
 "<html>Versão <strong>{0}</strong> criada em <strong>{1}</strong></html>"
 
 msgid "Changeset"
-msgstr ""
+msgstr "Conjunto de Mudanças"
 
 msgid "Changeset info"
 msgstr "Informações do changeset"
@@ -9321,6 +9541,108 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] "{0} objeto a remover:"
 msgstr[1] "{0} objetos a remover:"
 
+msgid "Show Tile Info"
+msgstr "Exibir informação do quadro"
+
+msgid "Tile Info"
+msgstr "Informação de Imagem de Fundo"
+
+msgid "Metadata "
+msgstr "Metadados "
+
+msgid "Auto Zoom"
+msgstr "Zoom automático"
+
+msgid "Auto load tiles"
+msgstr "Carregar quadros automaticamente"
+
+msgid "Load All Tiles"
+msgstr "Carregar todos os quadros"
+
+msgid "Load All Error Tiles"
+msgstr "Carregar todos os erros de quadros"
+
+msgid "Zoom to native resolution"
+msgstr "Zoom para a resolução nativa"
+
+msgid "Change resolution"
+msgstr "Mudar resolução"
+
+msgid "Failed to create tile source"
+msgstr "Falha na criação da fonte de imagem de fundo"
+
+msgid "Show Errors"
+msgstr "Exibir Erros"
+
+msgid "Load Tile"
+msgstr "Carregar quadro"
+
+msgid "Increase zoom"
+msgstr "Aumentar zoom"
+
+msgid "Decrease zoom"
+msgstr "Diminuir zoom"
+
+msgid "Snap to tile size"
+msgstr "Ajustar para o tamanho do quadro"
+
+msgid "Flush Tile Cache"
+msgstr "Apagar cache de tiles"
+
+msgid "zoom in to load any tiles"
+msgstr "zoom para carregar todos os quadros"
+
+msgid "zoom in to load more tiles"
+msgstr "zoom para carregar mais quadros"
+
+msgid "increase zoom level to see more detail"
+msgstr "aumentar nível de zoom para ver mais detalhes"
+
+msgid "No tiles at this zoom level"
+msgstr "Sem quadros neste nível de zoom"
+
+msgid "Current zoom: {0}"
+msgstr "Zoom atual: {0}"
+
+msgid "Display zoom: {0}"
+msgstr "Zoom de exibição: {0}"
+
+msgid "Pixel scale: {0}"
+msgstr "Escala de pixels: {0}"
+
+msgid "Best zoom: {0}"
+msgstr "Melhor zoom: {0}"
+
+msgid "Cache stats: {0}"
+msgstr "Estatísticas do cache: {0}"
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr "{0} ({1}), baixando automaticamente no zoom {2}"
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr "{0} ({1}), baixando no zoom {2}"
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr "Baixado {0}/{1} quadros"
+
+msgid "Save WMS file"
+msgstr "Salvar arquivo WMS"
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+"Imagens aéreas podem estar desalinhadas. Por favor, verifique seu "
+"deslocamento usando trilhas de GPS!"
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+
+msgid "Details..."
+msgstr "Detalhes..."
+
+msgid "Hide this message and never show it again"
+msgstr "Ocultar esta mensagem e não mostrá-la novamente"
+
 msgid "Customize Color"
 msgstr "Personalizar cores"
 
@@ -9372,7 +9694,10 @@ msgid "Save GPX file"
 msgstr "Salvar arquivo GPX"
 
 msgid "Imagery fade"
-msgstr "Desbotamento de imagens"
+msgstr "Desbotamento de camadas"
+
+msgid "Unsupported imagery type: {0}"
+msgstr "Tipo de camada não suportada: {0}"
 
 msgid "ERROR"
 msgstr "ERRO"
@@ -9394,12 +9719,12 @@ msgstr "Todas as projecções são suportadas"
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
-"A camada {0} não suporta a nova projeção {1}. \n"
-"{2} \n"
-"Altere a projeção de novo ou removar a camada."
+"A camada {0} não suporta a nova projeção {1}.\n"
+"Projeções suportadas são: {2}\n"
+"Mude a projeção de novo ou remova a camada."
 
 msgid "Save Layer"
 msgstr "Salvar Camada"
@@ -9482,157 +9807,51 @@ msgstr ""
 msgid "Save OSM file"
 msgstr "Salvar arquivo OSM"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-"{0} não é um argumento TMS válido . Por favor, verifique esta URL do "
-"servidor:\n"
-"{1}"
+msgid "EPSG:4326 and Mercator projection are supported"
+msgstr "EPSG:4326 e Mercator projection são suportados"
 
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-"Camadas TMS não suportam a projeção {0}. \n"
-"{1} \n"
-"Altere a projeção ou removar a camada."
+msgid "Validation errors"
+msgstr "Erros de validação"
 
-msgid "Auto Zoom"
-msgstr "Zoom automático"
+msgid "No validation errors"
+msgstr "Sem erros de validação"
 
-msgid "Auto load tiles"
-msgstr "Carregar quadros automaticamente"
+msgid "Set WMS Bookmark"
+msgstr "Adicionar marcador para esta camada WMS"
 
-msgid "Show Errors"
-msgstr "Exibir Erros"
+msgid ""
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
+msgstr ""
+"O JOSM utilizará EPSG:4326 para pedir ao servidor, mas os resultados podem "
+"variar dependendo do servidor WMS"
 
-msgid "Load Tile"
-msgstr "Carregar quadro"
+msgid "Correlate to GPX"
+msgstr "Correlacionar com GPX"
 
-msgid "Show Tile Info"
-msgstr "Exibir informação do quadro"
+msgid "Invalid timezone"
+msgstr "Timezone inválido"
 
-msgid "Load All Tiles"
-msgstr "Carregar todos os quadros"
+msgid "Invalid offset"
+msgstr "Deslocamento inválido"
 
-msgid "Load All Error Tiles"
-msgstr "Carregar todos os erros de quadros"
+msgid "Correlate images with GPX track"
+msgstr "Relacione as imagens com trilhas GPX"
 
-msgid "Increase zoom"
-msgstr "Aumentar zoom"
+msgid "Try Again"
+msgstr "Tentar novamente"
 
-msgid "Decrease zoom"
-msgstr "Diminuir zoom"
+msgid "No images could be matched!"
+msgstr "Não foi possível encontrar imagens coincidente!"
 
-msgid "Snap to tile size"
-msgstr "Ajustar para o tamanho do quadro"
+msgid "GPX Files (*.gpx *.gpx.gz)"
+msgstr "Arquivo GPX (*.gpx *.gpx.gz)"
 
-msgid "Flush Tile Cache"
-msgstr "Apagar cache de tiles"
+msgid "File {0} is loaded yet under the name \"{1}\""
+msgstr "Arquivo {0} está carregado sob o nome \"{1}\""
 
-msgid "zoom in to load any tiles"
-msgstr "zoom para carregar todos os quadros"
-
-msgid "zoom in to load more tiles"
-msgstr "zoom para carregar mais quadros"
-
-msgid "increase zoom level to see more detail"
-msgstr "aumentar nível de zoom para ver mais detalhes"
-
-msgid "No tiles at this zoom level"
-msgstr "Sem quadros neste nível de zoom"
-
-msgid "Current zoom: {0}"
-msgstr "Zoom atual: {0}"
-
-msgid "Display zoom: {0}"
-msgstr "Zoom de exibição: {0}"
-
-msgid "Pixel scale: {0}"
-msgstr "Escala de pixels: {0}"
-
-msgid "Best zoom: {0}"
-msgstr "Melhor zoom: {0}"
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr "Camada TMS ({0}), baixando em zoom {1}"
-
-msgid "EPSG:4326 and Mercator projection are supported"
-msgstr "EPSG:4326 e Mercator projection são suportados"
-
-msgid "Validation errors"
-msgstr "Erros de validação"
-
-msgid "No validation errors"
-msgstr "Sem erros de validação"
-
-msgid "Blank Layer"
-msgstr "Camada vazia"
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr "Baixado {0}/{1} quadros"
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr "Camada WMS ({0}), baixando automaticamente na ampliação {1}"
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr "Camada WMS ({0}), baixando na ampliação {1}"
-
-msgid "Download visible tiles"
-msgstr "Baixar imagens visíveis"
-
-msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-"A área requisitada é muito grande. Por favor, aumente a ampliação um pouco, "
-"ou mude a resolução"
-
-msgid "Change resolution"
-msgstr "Mudar resolução"
-
-msgid "Reload erroneous tiles"
-msgstr "Recarregar imagens erradas"
-
-msgid "Alpha channel"
-msgstr "Canal alfa"
-
-msgid "Automatically change resolution"
-msgstr "Mudar resolução automaticamente"
-
-msgid "Set WMS Bookmark"
-msgstr "Adicionar marcador para esta camada WMS"
-
-msgid "Automatic downloading"
-msgstr "Download automático"
-
-msgid "Zoom to native resolution"
-msgstr "Zoom para a resolução nativa"
-
-msgid "Supported projections are: {0}"
-msgstr "Projeções suportadas: {0}"
-
-msgid "Unsupported WMS file version; found {0}, expected {1}"
-msgstr "Versão do arquivo WMS sem suporte; encontrado {0}, esperado {1}"
-
-msgid "Save WMS file"
-msgstr "Salvar arquivo WMS"
-
-msgid "Correlate to GPX"
-msgstr "Correlacionar com GPX"
-
-msgid "GPX Files (*.gpx *.gpx.gz)"
-msgstr "Arquivo GPX (*.gpx *.gpx.gz)"
-
-msgid "File {0} is loaded yet under the name \"{1}\""
-msgstr "Arquivo {0} está carregado sob o nome \"{1}\""
-
-msgid "Error while parsing {0}"
-msgstr "Erro enquanto analisava {0}"
+msgid "Error while parsing {0}"
+msgstr "Erro enquanto analisava {0}"
 
 msgid "Could not read \"{0}\""
 msgstr "Não foi possível ler \"{0}\""
@@ -9681,7 +9900,7 @@ msgid "GPX track: "
 msgstr "Trilha GPX: "
 
 msgid "Open another GPX trace"
-msgstr "Abrir outra trilha GPS"
+msgstr "Abrir outra trilha GPX"
 
 msgid ""
 "<html>Use photo of an accurate clock,<br>e.g. GPS receiver display</html>"
@@ -9716,24 +9935,9 @@ msgstr "Timezone: "
 msgid "Offset:"
 msgstr "Deslocamento:"
 
-msgid "Correlate images with GPX track"
-msgstr "Relacione as imagens com trilhas GPX"
-
 msgid "Correlate"
 msgstr "Correlacione"
 
-msgid "Invalid timezone"
-msgstr "Timezone inválido"
-
-msgid "Invalid offset"
-msgstr "Offset inválido"
-
-msgid "Try Again"
-msgstr "Tentar novamente"
-
-msgid "No images could be matched!"
-msgstr "Não foi possível encontrar imagens coincidente!"
-
 msgid "No gpx selected"
 msgstr "Nenhum gpx selecionado"
 
@@ -9821,8 +10025,7 @@ msgid "Reading {0}..."
 msgstr "Lendo {0}..."
 
 msgid "Unable to get canonical path for directory {0}\n"
-msgstr ""
-"Não foi possível conseguir o caminho canonical para o diretório {0}\n"
+msgstr "Não foi possível conseguir o caminho canônico para o diretório {0}\n"
 
 msgid "Scanning directory {0}"
 msgstr "Varrendo diretório {0}"
@@ -9848,8 +10051,8 @@ msgstr[1] "{0} foram encontrados para serem etiquetados com GPS"
 
 msgid "{0} has updated GPS data."
 msgid_plural "{0} have updated GPS data."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} atualizou dados de GPS."
+msgstr[1] "{0} atualizaram dados de GPS."
 
 msgid "Delete image file from disk"
 msgstr "Remover arquivo de imagem do disco"
@@ -9926,6 +10129,8 @@ msgid ""
 "\n"
 "Speed: {0} km/h"
 msgstr ""
+"\n"
+"Velocidade: {0} km/h"
 
 msgid ""
 "\n"
@@ -9948,14 +10153,11 @@ msgstr ""
 "\n"
 "Hora GPS: {0}"
 
-msgid "JPEG images (*.jpg)"
-msgstr "Imagens JPEG (*.jpg)"
-
 msgid "Show thumbnails"
-msgstr ""
+msgstr "Mostrar miniaturas"
 
 msgid "Show image thumbnails instead of icons."
-msgstr ""
+msgstr "Mostrar miniaturas de imagens ao invés de ícones."
 
 msgid "Choose visible tracks"
 msgstr "Escolha faixas visíveis"
@@ -10020,9 +10222,6 @@ msgstr "metros"
 msgid "Maximum area per request:"
 msgstr "Área máxima por pedido:"
 
-msgid "sq km"
-msgstr "sq km"
-
 msgid "Download near:"
 msgstr "Baixar próximo:"
 
@@ -10771,15 +10970,15 @@ msgstr "Fecha a janela de preferências e descarta as modificações"
 msgid "Save the preferences and close the dialog"
 msgstr "Salva as preferências e fecha a janela"
 
-msgid "Download plugins"
-msgstr "Baixar plugins"
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr "Você precicar reiniciar JOSM para aplicar mudanças."
 
 msgid "Would you like to restart now?"
 msgstr "Deseja reiniciar agora?"
 
+msgid "Download plugins"
+msgstr "Baixar plugins"
+
 msgid "Icon paths:"
 msgstr "Caminho dos ícones:"
 
@@ -11332,7 +11531,7 @@ msgid "Everything"
 msgstr "Tudo"
 
 msgid "Name or offset"
-msgstr "Nome ou offset"
+msgstr "Nome ou deslocamento"
 
 msgid "None"
 msgstr "Nenhum"
@@ -11649,6 +11848,21 @@ msgstr "Exibir limites"
 msgid "No bounding box was found for this layer."
 msgstr "Sem caixa de limites encontrados para esta camada."
 
+msgid "1. Enter getCapabilities URL"
+msgstr "Digite a URL getCapabilites"
+
+msgid "2. Enter name for this layer"
+msgstr "2. Digite um nome para esta camada"
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr "imagery fade"
 
@@ -11667,6 +11881,18 @@ msgstr "Forte"
 msgid "Sharpen (requires layer re-add): "
 msgstr "Aguçar (requer readicionar camada) "
 
+msgid "Tile cache directory: "
+msgstr "Diretória de cahce de quadros: "
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr "Tamanho máximo do cache de disco (por imagem) em MB: "
+
+msgid "Maximum number of objects in memory cache: "
+msgstr "Quantidade máxima de objetos no cache da memória: "
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr "Preferências das imagens"
 
@@ -11688,6 +11914,9 @@ msgstr "Provedores do Imagery"
 msgid "Offset bookmarks"
 msgstr "Marcadores de deslocamento"
 
+msgid "Cache contents"
+msgstr "Conteúdo do cache"
+
 msgid "Imagery Background: Default"
 msgstr "Imagem do plano de fundo: Padrão"
 
@@ -11716,13 +11945,13 @@ msgid "Menu Name"
 msgstr "Nome do Menu"
 
 msgid "Imagery URL"
-msgstr "URL do Imagery"
+msgstr "URL da camada"
 
 msgid "Menu Name (Default)"
 msgstr "Nome do Menu (Padrão)"
 
 msgid "Imagery URL (Default)"
-msgstr "URL do Imagery (padrão)"
+msgstr "URL da camada (padrão)"
 
 msgid "EULA license URL not available: {0}"
 msgstr "URL do EULA da licença não disponível: {0}"
@@ -11730,9 +11959,6 @@ msgstr "URL do EULA da licença não disponível: {0}"
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr "URL malformada para o EULA da licença: {0}"
 
-msgid "Projection"
-msgstr "Projeção"
-
 msgid "Layer"
 msgstr "Layer"
 
@@ -11757,17 +11983,11 @@ msgstr "Nível máximo de zoom: "
 msgid "Add to slippymap chooser: "
 msgstr "Adicionar ao seletor no slippymap: "
 
-msgid "Tile cache directory: "
-msgstr "Diretória de cahce de quadros: "
-
 msgid "Maximum concurrent downloads: "
-msgstr ""
+msgstr "Máximo de downloads simultâneos: "
 
 msgid "Maximum concurrent downloads per host: "
-msgstr ""
-
-msgid "Maximum elements in disk cache: "
-msgstr ""
+msgstr "Máximo de downloads simultâneos por host: "
 
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
@@ -11776,20 +11996,11 @@ msgstr ""
 "Essa camada não suporta qualquer uma das projeções JOSM,\n"
 "então você não pode usá-lo. Esta mensagem não será exibida novamente."
 
-msgid "Downloader:"
-msgstr "Recebedor:"
-
 msgid "Simultaneous connections:"
 msgstr "Conexões simultâneas:"
 
-msgid "Overlap tiles"
-msgstr "Sobrepor quadros"
-
-msgid "% of east:"
-msgstr "% ao leste:"
-
-msgid "% of north:"
-msgstr "% ao norte:"
+msgid "Tile size:"
+msgstr "Tamanho do quadro:"
 
 msgid "Auto save enabled"
 msgstr "Salvamento automático habilitado"
@@ -12182,7 +12393,7 @@ msgid "Projection bounds (in degrees)"
 msgstr "Limites de projeção (em graus)"
 
 msgid "Sets the SRS=... parameter in the WMS request"
-msgstr ""
+msgstr "Configura o parâmetro SRS=... no pedido WMS"
 
 msgid "Gauß-Krüger"
 msgstr "Gauß-Krüger"
@@ -12471,12 +12682,14 @@ msgid "Check interval (minutes):"
 msgstr "Verificar intervalo (minutos):"
 
 msgid "Max age for closed notes (days):"
-msgstr ""
+msgstr "Idade máxima das notas fechadas (dias):"
 
 msgid ""
 "Specifies the number of days a note needs to be closed to no longer be "
 "downloaded"
 msgstr ""
+"Especifica o número de dias que uma nota necessita estar fechada para não "
+"ser mais baixada"
 
 msgid "Failed to retrieve OAuth Access Token from credential manager"
 msgstr ""
@@ -12811,6 +13024,14 @@ msgstr "Aplicar Preferência"
 msgid "New relation"
 msgstr "Nova relação"
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] "Modificar objeto {0}"
@@ -12929,6 +13150,9 @@ msgstr "Mostrar tela de busca de pré-definições"
 msgid "Search presets"
 msgstr "Buscar predefinição"
 
+msgid "Presets"
+msgstr "Predefinições"
+
 msgid "Search for objects by preset"
 msgstr "Procurar por predefinições"
 
@@ -13233,6 +13457,9 @@ msgstr "<html>Não foi possível ler o arquivo. <br> O erro é:<br>{0}</html>"
 msgid "GeoJSON Files"
 msgstr "Arquivos GeoJSON"
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr "Camada ''{0}'' não é suportada"
 
@@ -13437,8 +13664,7 @@ msgid "Removed layer {0} because it is not allowed by the configured API."
 msgstr "Camada removida {0}, porque não é permitida pela API configurada."
 
 msgid "Unexpected format of ID replied by the server. Got ''{0}''."
-msgstr ""
-"Formato de ID inesperado respondida pelo servidor. Recuperado ''{0}''."
+msgstr "Formato de ID inesperado respondido pelo servidor. Obtido ''{0}''."
 
 msgid ""
 "Unexpected format of new version of modified primitive ''{0}''. Got ''{1}''."
@@ -13701,7 +13927,7 @@ msgid "Illegal long value for attribute ''{0}''. Got ''{1}''."
 msgstr "Valor long ilegal para o atributo ''{0}''. Recuperado ''{1}''."
 
 msgid "{0} bytes have been read"
-msgstr ""
+msgstr "{0} bytes lidos"
 
 msgid "Prepare OSM data..."
 msgstr "Preparando dados OSM..."
@@ -13816,6 +14042,9 @@ msgstr "Arquivos do Servidor OSM compactados com zip"
 msgid "WMS Files (*.wms)"
 msgstr "Arquivos WMS (*.wms)"
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr "Versão do arquivo WMS sem suporte; encontrado {0}, esperado {1}"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -13874,7 +14103,7 @@ msgid "Open local files"
 msgstr "Abrir arquivos locais"
 
 msgid "Load imagery layers"
-msgstr "Carregar camadas do imagery"
+msgstr "Carregar camadas de imagens aéreas"
 
 msgid "Change the selection"
 msgstr "Mudar a seleção"
@@ -13890,24 +14119,27 @@ msgstr "Versão do protocolo de leitura"
 
 msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
+"Impossível iniciar servidor de controle remoto IPv4 na porta {0}: {1}"
 
 msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
 msgstr ""
+"Impossível iniciar servidor de controle remoto IPv6 na porta {0}: {1}"
 
 msgid "RemoteControl::Accepting remote connections on {0}:{1}"
-msgstr ""
+msgstr "RemoteControl::Aceitando conexões remotas em {0}:{1}"
 
 msgid "RemoteControl::Server {0}:{1} stopped."
-msgstr ""
+msgstr "RemoteControl::Servidor {0}:{1} parou."
 
 msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
 msgstr ""
 
 msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
 msgstr ""
+"Impossível iniciar o servidor IPv6 https de controle remoto na porta {0}: {1}"
 
 msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
-msgstr ""
+msgstr "RemoteControl::Aceitando conexões remotas seguras em {0}:{1}"
 
 msgid "Remote Control has been asked to create a new node."
 msgstr "Controle remoto informou da criação de um novo nó."
@@ -13938,11 +14170,11 @@ msgid ""
 "Remote Control has been asked to load an imagery layer from the following "
 "URL:"
 msgstr ""
-"Controle remoto informou do carregamento de uma camada imaginária da "
+"Controle remoto informou o carregamento de uma camada de imagem aérea da "
 "seguinte URL:"
 
 msgid "Remote imagery"
-msgstr "Imagme remota"
+msgstr "Imagem aérea remota"
 
 msgid "Remote Control has been asked to import data from the following URL:"
 msgstr "Controle remoto informou da importação de dados da seguinte URL:"
@@ -14030,8 +14262,8 @@ msgid ""
 "Version ''{0}'' of meta data for imagery layer is not supported. Expected: "
 "0.1"
 msgstr ""
-"Versão ''{0}'' de meta dados para a camada imagery não é suportado . "
-"Esperado: 0.1"
+"Versão ''{0}'' de metadados para a camada de imagens aéreas não é suportado "
+". Esperado: 0.1"
 
 msgid ""
 "Version ''{0}'' of meta data for marker layer is not supported. Expected: 0.1"
@@ -14225,7 +14457,7 @@ msgid ""
 "Running plugin update after JOSM upgrade. Automatic update at startup is "
 "enabled."
 msgstr ""
-"Rodando atualização do plugin após a atualização do JOSM. Atualização "
+"Executando atualização de plugin após a atualização do JOSM. Atualização "
 "automática na inicialização está ativada."
 
 msgid ""
@@ -14252,6 +14484,19 @@ msgstr[1] ""
 "O plugin {0} requer {1} plugins que não foram encontrados. Os plugins que "
 "faltam são:"
 
+msgid "Download and restart"
+msgstr "Baixar e reiniciar"
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] "Clique para baixar o plugin faltante e reiniciar o JOSM"
+msgstr[1] "Clique para baixar os plugins faltantes e reiniciar o JOSM"
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] "Clique para continuar sem este plugin"
+msgstr[1] "Clique para continuar sem estes plugins"
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -14512,8 +14757,8 @@ msgid ""
 "file a bug report."
 msgstr ""
 "Uma exceção inesperada aconteceu.<br>Este problema é sempre por erro no "
-"código do programa. Se você estiver rodando a última<br>versão do JOSM, por "
-"favor, seja gentil e redija um relatório de erro."
+"código do programa. Se você estiver executando a última<br>versão do JOSM, "
+"por favor, seja gentil e redija um relatório de erro."
 
 msgid "Update JOSM"
 msgstr "Atualize o JOSM"
@@ -14992,7 +15237,7 @@ msgid "Update Java"
 msgstr "Atualize o Java"
 
 msgid "You are running version {0} of Java."
-msgstr "Você está rodando a versão {0} do Java."
+msgstr "Você está executando a versão {0} do Java."
 
 msgid "April 2015"
 msgstr "Abril de 2015"
@@ -15458,6 +15703,9 @@ msgstr "Atualizar"
 msgid "Update directory listing."
 msgstr "Atualizar a listagem de diretórios."
 
+msgid "View"
+msgstr "Visualizar"
+
 msgid "Blue:"
 msgstr "Azul:"
 
@@ -15483,13 +15731,13 @@ msgid "Landsat"
 msgstr "Landsat"
 
 msgid "Bing aerial imagery"
-msgstr ""
+msgstr "Imagem aérea do Bing"
 
 msgid "HDM (Humanitarian OpenStreetMap Team)"
 msgstr "HDM (Humanitarian OpenStreetMap Team)"
 
 msgid "Mapbox Satellite"
-msgstr ""
+msgstr "Satélite Mapbox"
 
 msgid "MapQuest Open Aerial"
 msgstr "MapQuest Open Aerial"
@@ -15497,20 +15745,17 @@ msgstr "MapQuest Open Aerial"
 msgid "OpenStreetMap GPS Traces"
 msgstr "OpenStreetMap GPS Traces"
 
-msgid "OpenStreetMap (Mapnik)"
-msgstr "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
+msgstr ""
 
 msgid "skobbler"
 msgstr "skobbler"
 
 msgid "OpenStreetMap (Mapnik Black & White)"
-msgstr ""
+msgstr "OpenStreetMap (Mapnik Branco & Preto)"
 
 msgid "OpenStreetMap (Mapnik, no labels)"
-msgstr ""
-
-msgid "skobbler heatmap"
-msgstr "skobbler heatmap"
+msgstr "OpenStreetMap (Mapnik, sem etiquetas)"
 
 msgid "OpenCycleMap"
 msgstr "OpenCycleMap"
@@ -15564,28 +15809,28 @@ msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
 msgid "OSM Inspector: Geometry"
-msgstr ""
+msgstr "OSM Inspector: Geometria"
 
 msgid "OSM Inspector: Tagging"
 msgstr ""
 
 msgid "OSM Inspector: Places"
-msgstr ""
+msgstr "OSM Inspector: Lugares"
 
 msgid "OSM Inspector: Highways"
-msgstr ""
+msgstr "OSM Inspector: Rodovias"
 
 msgid "OSM Inspector: Multipolygon"
-msgstr ""
+msgstr "OSM Inspector: Multipolígono"
 
 msgid "OSM Inspector: Routing"
-msgstr ""
+msgstr "OSM Inspector: Roteamento"
 
 msgid "OSM Inspector: Addresses"
-msgstr ""
+msgstr "OSM Inspector: Endereços"
 
 msgid "OSM Inspector: Boundaries (EU)"
-msgstr ""
+msgstr "OSM Inspector: Fronteiras (UE)"
 
 msgid "AGRI black-and-white 2.5m"
 msgstr "AGRI black-and-white 2.5m"
@@ -15620,6 +15865,9 @@ msgstr "Vienna: Orthofoto (imagem aérea)"
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr "VoGIS: Echtfarbenbild 2012 (12cm)"
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr "VoGIS: Flächenwidmungsplan"
 
@@ -15633,12 +15881,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr "IBGE Mapa de Setores Urbanos"
 
@@ -15675,12 +15929,18 @@ msgstr "Czech RUIAN parcely"
 msgid "Czech pLPIS"
 msgstr "Czech pLPIS"
 
-msgid "Fugro (Denmark)"
-msgstr "Fugro (Dinamarca)"
-
 msgid "Geodatastyrelsen (Denmark)"
 msgstr "Geodatastyrelsen (Denmark)"
 
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
+msgstr ""
+
 msgid "Stevns (Denmark)"
 msgstr "Stevns (Denmark)"
 
@@ -15705,6 +15965,9 @@ msgstr "Estônia Forestry (Maaamet)"
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr "Bordeaux - 2012"
 
@@ -15729,8 +15992,8 @@ msgstr "Géobretagne - Morbihan 2010"
 msgid "Géolittoral - Orthophotos 2000"
 msgstr "Géolittoral - Orthophotos 2000"
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
-msgstr "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
+msgstr ""
 
 msgid "Géolittoral - Sentiers"
 msgstr "Géolittoral - Sentiers"
@@ -15744,6 +16007,9 @@ msgstr "Loire-Atlantique - Orthophotos 2012 - 20 cm"
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr "Toulouse - Orthophotoplan 2013"
 
@@ -15756,12 +16022,6 @@ msgstr "Toulouse - Orthophotoplan 2007"
 msgid "Tours - Orthophotos 2013"
 msgstr "Tours - Orthophotos 2013"
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr "Tours - Orthophotos 2008-2010"
-
-msgid "Tours - Orthophotos 2008"
-msgstr "Tours - Orthophotos 2008"
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -15784,6 +16044,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr "Hamburg (DK5)"
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr "Bavaria (2 m)"
 
@@ -15819,11 +16082,8 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr "Maps4BW (LGL-BW, www.lgl-bw.de)"
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
-msgstr "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
+msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
 msgstr "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -15852,73 +16112,25 @@ msgstr "Ireland British War Office One-Inch 1941-43 GSGS 4136"
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr "Ireland Bartholomew Quarter-Inch 1940"
 
-msgid "OSMIE Townlands"
-msgstr ""
-
-msgid "OSMIE EDs"
-msgstr ""
-
-msgid "OSMIE Civil Parishes"
-msgstr ""
-
-msgid "OSMIE Baronies"
-msgstr ""
-
-msgid "OSMIE Political"
-msgstr ""
-
-msgid "Ireland EEA GMES Urban Atlas"
-msgstr "Ireland EEA GMES Urban Atlas"
-
-msgid "Ireland EEA CORINE 2006"
-msgstr "Ireland EEA CORINE 2006"
-
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
 msgstr ""
 
 msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Clare Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Dublin Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Fermanagh Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Galway Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Kildare Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Leitrim Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Longford Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Offaly Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Sligo Civil Parishes and Baronies"
+msgid "OSMIE Townlands"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "OSMIE EDs"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "OSMIE Civil Parishes"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "OSMIE Baronies"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "OSMIE Political"
 msgstr ""
 
 msgid "Lodi - Italy"
@@ -15954,6 +16166,9 @@ msgstr "50 cm orto - Letónia"
 msgid "20cm ortho - Latvia - Coastline"
 msgstr "20 cm orto - Letónia - Litoral"
 
+msgid "1.cikla ortofotokarte - Latvia"
+msgstr ""
+
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Lituânia)"
 
@@ -15969,6 +16184,9 @@ msgstr "Luxembourg Inspire Railway"
 msgid "Luxembourg Inspire Roads"
 msgstr "Luxembourg Inspire Roads"
 
+msgid "Luxembourg Inspire Water"
+msgstr ""
+
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Niger Delta Oct 2012 Landsat"
 
@@ -15984,9 +16202,15 @@ msgstr "Pangasinán/Bulacan (Phillipines HiRes)"
 msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr "Geoportal 2: Ortofotomapa (aerial image)"
 
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgstr ""
+
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr "Geoportal 2: PRNG (geo names)"
 
+msgid "Geoportal 2: ISOK hillshade"
+msgstr ""
+
 msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr "Będzin: Ortofotomapa 2013 (imagem aérea)"
 
@@ -15996,15 +16220,27 @@ msgstr "Będzin: Budynki (edifícios)"
 msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr "Bytom: Ortofotomapa 2012 (imagem aérea)"
 
+msgid "Bytom: Fotoplan 2014 (aerial image)"
+msgstr ""
+
 msgid "Bytom: Budynki (buildings)"
 msgstr "Bytom: Budynki (edifícios)"
 
 msgid "Chorzów: Budynki (buildings)"
 msgstr "Chorzów: Budynki (prédios)"
 
+msgid "Częstochowa: Budynki (buildings)"
+msgstr ""
+
 msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr "Częstochowa: Ortofotomapa 2011 (aerial image)"
 
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgstr ""
+
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgstr ""
+
 msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr "Gliwice: Ortofotomapa 2013 (imagem aérea)"
 
@@ -16014,9 +16250,45 @@ msgstr "Gliwice: Budynki (prédios)"
 msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr "Katowice: Ortofotomapa (aerial image)"
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Katowice: Budynki (buildings)"
+msgstr ""
+
+msgid "Łódź: Budynki (buildings)"
+msgstr ""
+
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr "Łódź: Ortofotomapa (imagme aéria)"
 
+msgid "Powiat dębicki: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat lubaczowski: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat łańcucki: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat poznański: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgstr ""
+
+msgid "Powiat rzeszowski: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgstr ""
+
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgstr ""
+
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
 msgstr "Ruda Śląska: Ortofotomapa (imagem aérea)"
 
@@ -16029,9 +16301,18 @@ msgstr "Rzeszów: Budynki (buildings)"
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr "Siemianowice Śląskie: Ortofotomapa (imagem aéria)"
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr "Świętochłowice: Ortofotomapa 2009 (imagens aéreas)"
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr "Częstochowa: Ortofotomapa 2011 (imagem aérea)"
 
@@ -16161,6 +16442,21 @@ msgstr "Bonvillars Orthophoto 2013"
 msgid "Fiez Orthophoto 2013"
 msgstr "Fiez Orthophoto 2013"
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr "MSR Maps Topo"
 
@@ -16176,7 +16472,7 @@ msgstr "USGS Large Scale Imagery"
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -16522,6 +16818,11 @@ msgstr ""
 "Implementa uma linha de comando e permite criar seus comandos. Veja o link "
 "para os comandos padrão (arco, círculo, etc.)"
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr "(Aviso: Experimental!) Ferramenta para misturar (fundir) dados."
 
@@ -16616,20 +16917,13 @@ msgid ""
 "Database of imagery offsets: share and aquire imagery offsets with one "
 "button."
 msgstr ""
-"Banco de dados de deslocamentos de imagens: compartelhe e adquira imagens "
+"Banco de dados de deslocamentos de imagens: compartilhe e adquira imagens "
 "offsets com um botão."
 
 msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr "WMSPlugin-style imagery adjustment mapmode"
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-"Este plugin experimental permite o JOSM a salvar quadros em cache nos "
-"arquivos do banco de dados, não em grandes diretórios de cache"
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -16702,7 +16996,7 @@ msgstr ""
 "criar, fechar, invalidar, reabrir e comentar relatórios de bugs usando este "
 "plugin."
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -16720,9 +17014,6 @@ msgstr "Mesclar sobreposição parte das vias."
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr "Adiciona não virar à esquerda para conjuntos de 4 ou 5 vias"
 
-msgid "Simplifies download from different read-only APIs."
-msgstr "Simplifica o download de diferentes APIs somente leitura."
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 "Permite atribuir tags para todos os objetos em qualquer área selecionada de "
@@ -16821,6 +17112,14 @@ msgid ""
 msgstr ""
 "Este plugin simplifica o mapeamento e edição de rotas de transporte público."
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr "Painel de criação e edição de relação e multipolígono."
 
@@ -16864,6 +17163,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr "Editar recursos para OpenSeaMap"
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -16964,9 +17266,6 @@ msgstr "Download fácil ao longo de uma longa série de formas interligadas"
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr "Permite procurar de waypoint importados de arquivo GPX."
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr "Escolha uma sequência não-ramificada ligada a vias"
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr "Simplifica a ligação de objetos OSM para artigos da Wikipédia"
 
@@ -16975,7 +17274,7 @@ msgid ""
 "behind."
 msgstr ""
 "Dirigir um carro de corrida do ponto A ao ponto B sobre imagens aéreas, "
-"deixar os cactos para trás."
+"deixe os cactos para trás."
 
 msgid "Surface"
 msgstr "Superfície"
@@ -16999,16 +17298,16 @@ msgid "wood"
 msgstr "madeira"
 
 msgid "paving_stones"
-msgstr "pedras de calçada"
+msgstr "Piso intertravado"
 
 msgid "cobblestone"
-msgstr "pavimentação"
+msgstr "Piso de seixos"
 
 msgid "gravel"
 msgstr "pedras"
 
 msgid "pebblestone"
-msgstr "pebblestone"
+msgstr "Cascalho"
 
 msgid "compacted"
 msgstr "compactado"
@@ -17029,52 +17328,52 @@ msgid "sett"
 msgstr "pavimento"
 
 msgid "Smoothness"
-msgstr ""
+msgstr "Usabilidade"
 
 msgid "excellent"
-msgstr ""
+msgstr "excelente"
 
 msgid "Thin Rollers: rollerblade, skateboard"
 msgstr ""
 
 msgid "good"
-msgstr ""
+msgstr "boa"
 
 msgid "Thin Wheels: racing bike"
 msgstr ""
 
 msgid "intermediate"
-msgstr ""
+msgstr "intemediária"
 
 msgid "Wheels: city bike, wheelchair, scooter"
 msgstr ""
 
 msgid "bad"
-msgstr ""
+msgstr "ruim"
 
 msgid "Robust Wheels: trekking bike, car, rickshaw"
 msgstr ""
 
 msgid "very_bad"
-msgstr ""
+msgstr "muito ruim"
 
 msgid "High Clearance: light duty off-road vehicle"
 msgstr ""
 
 msgid "horrible"
-msgstr ""
+msgstr "horrível"
 
 msgid "Off-Road: heavy duty off-road vehicle"
 msgstr ""
 
 msgid "very_horrible"
-msgstr ""
+msgstr "muito_horrível"
 
 msgid "Specialized off-road: tractor, ATV"
 msgstr ""
 
 msgid "impassable"
-msgstr ""
+msgstr "intransponível"
 
 msgid "No wheeled vehicle"
 msgstr ""
@@ -17233,7 +17532,7 @@ msgid "Operator"
 msgstr "Operador"
 
 msgid "Service Times"
-msgstr "Horário de funcionamento"
+msgstr "Horário de serviço"
 
 msgid "18:00"
 msgstr "18:00"
@@ -17376,6 +17675,14 @@ msgid "basketball"
 msgstr "basquete"
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr "vôlei de praia"
+
+msgctxt "sport"
+msgid "billiards"
+msgstr "bilhar"
+
+msgctxt "sport"
 msgid "boules"
 msgstr "boules"
 
@@ -17397,11 +17704,7 @@ msgstr "alpinismo"
 
 msgctxt "sport"
 msgid "cricket"
-msgstr "crírquete"
-
-msgctxt "sport"
-msgid "cricket_nets"
-msgstr "cricket_nets"
+msgstr "críquete"
 
 msgctxt "sport"
 msgid "croquet"
@@ -17420,6 +17723,10 @@ msgid "equestrian"
 msgstr "hipismo"
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr "hóquei em campo"
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr "gaelic_games"
 
@@ -17436,14 +17743,26 @@ msgid "handball"
 msgstr "handball"
 
 msgctxt "sport"
-msgid "hockey"
-msgstr "hockey"
-
-msgctxt "sport"
 msgid "horse_racing"
 msgstr "horse_racing"
 
 msgctxt "sport"
+msgid "ice_hockey"
+msgstr "hóquei no gelo"
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr "aeromodelismo"
+
+msgctxt "sport"
+msgid "motocross"
+msgstr "motocross"
+
+msgctxt "sport"
 msgid "motor"
 msgstr "motor"
 
@@ -17456,6 +17775,10 @@ msgid "racquet"
 msgstr "raquete"
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr "rugby_league"
 
@@ -17465,7 +17788,11 @@ msgstr "rugby_union"
 
 msgctxt "sport"
 msgid "running"
-msgstr ""
+msgstr "corrida"
+
+msgctxt "sport"
+msgid "safety_training"
+msgstr "treinamento de segurança"
 
 msgctxt "sport"
 msgid "shooting"
@@ -17495,6 +17822,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr "tênis"
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr "vôlei"
+
+msgctxt "sport"
+msgid "9pin"
+msgstr "bolão"
+
+msgctxt "sport"
+msgid "10pin"
+msgstr "boliche"
+
 msgid "Fee"
 msgstr "Taxa"
 
@@ -17587,7 +17926,7 @@ msgid "broadleaved"
 msgstr "latifoliadas"
 
 msgid "needleleaved"
-msgstr "agulha com folhas"
+msgstr "acicular"
 
 msgid "mixed"
 msgstr "misturado"
@@ -17602,13 +17941,13 @@ msgid "deciduous"
 msgstr "decídua"
 
 msgid "Plants that are leafless for a certain period during the year."
-msgstr ""
+msgstr "Plantas que não tem folhas por um certo período durante o ano."
 
 msgid "evergreen"
 msgstr "sempre-viva"
 
 msgid "Plants that are never entirely without green foliage."
-msgstr ""
+msgstr "Plantas que nunca ficam inteiramente sem folhas verdes."
 
 msgid "semi_deciduous"
 msgstr "semi_deciduous"
@@ -17617,6 +17956,8 @@ msgid ""
 "Plants that lose their foliage for a very short period, when old leaves fall "
 "off and new foliage growth is starting."
 msgstr ""
+"Plantas que perdem suas folhas por um curto período de tempo, quando folhas "
+"velhas caem e novas folhas começam a crescer."
 
 msgid "semi_evergreen"
 msgstr "semi_evergreen"
@@ -17625,9 +17966,11 @@ msgid ""
 "Plants that lose most, but not all, of their foliage for a fraction of the "
 "year."
 msgstr ""
+"Plantas que perdem muitas, mas não todas, de suas folhas por uma fração do "
+"ano."
 
 msgid "Habitat with evergreen and deciduous vegetation."
-msgstr ""
+msgstr "Habitat com  vegetação folhas perenes e caducifólia."
 
 msgid "bahai"
 msgstr "bahai"
@@ -17684,7 +18027,7 @@ msgid "evangelical"
 msgstr "evangélica"
 
 msgid "greek_catholic"
-msgstr ""
+msgstr "Greco-católica"
 
 msgid "jehovahs_witness"
 msgstr "testemunha de jeová"
@@ -17699,7 +18042,7 @@ msgid "mormon"
 msgstr "mórmon"
 
 msgid "old_catholic"
-msgstr ""
+msgstr "Veterocatólica"
 
 msgid "orthodox"
 msgstr "ortodoxa"
@@ -17717,7 +18060,7 @@ msgid "quaker"
 msgstr "quaker"
 
 msgid "roman_catholic"
-msgstr ""
+msgstr "Católica romana"
 
 msgid "shia"
 msgstr "xiismo"
@@ -17812,7 +18155,7 @@ msgid "compressed air"
 msgstr "ar comprimido"
 
 msgid "steam"
-msgstr "névoa"
+msgstr "vapor"
 
 msgid "vacuum"
 msgstr "vácuo"
@@ -17851,41 +18194,44 @@ msgid "Streets"
 msgstr "Ruas"
 
 msgid "Motorway"
-msgstr "Auto-estrada"
+msgstr "Autoestrada"
 
 msgid "Motorway Link"
-msgstr "Ligação para auto-estrada"
+msgstr "Ligação de Autoestrada"
 
 msgid "Trunk"
-msgstr "Linha Tronco"
+msgstr "Via expressa"
 
 msgid "Motorroad"
 msgstr "Motorroad"
 
 msgid "Trunk Link"
-msgstr "Ligação para Linha Tronco"
+msgstr "Ligação de Via Expressa"
 
 msgid "Primary"
-msgstr "Estrada Primária"
+msgstr "Primária"
 
 msgid "Primary Link"
-msgstr "Ligação a Estrada Primária"
+msgstr "Ligação Primária"
 
 msgid "Secondary"
 msgstr "Secundária"
 
 msgid "Secondary Link"
-msgstr "Link secundário"
+msgstr "Ligação Secundária"
 
 msgid "Tertiary"
 msgstr "Terciária"
 
 msgid "Tertiary Link"
-msgstr "Ligação terciária"
+msgstr "Ligação Terciária"
 
 msgid "Unclassified"
 msgstr "Sem classificação"
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr "Lugares de passagem"
 
@@ -17962,6 +18308,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr "Raceway"
+
 msgid "Road (Unknown Type)"
 msgstr "Pista (tipo desconhecido)"
 
@@ -17970,59 +18319,59 @@ msgstr "Construção"
 
 msgctxt "Highway"
 msgid "motorway"
-msgstr ""
+msgstr "autoestrada"
 
 msgctxt "Highway"
 msgid "motorway_link"
-msgstr ""
+msgstr "ligação de autoestrada"
 
 msgctxt "Highway"
 msgid "trunk"
-msgstr ""
+msgstr "via expressa"
 
 msgctxt "Highway"
 msgid "trunk_link"
-msgstr ""
+msgstr "ligação de via expressa"
 
 msgctxt "Highway"
 msgid "primary"
-msgstr ""
+msgstr "primária"
 
 msgctxt "Highway"
 msgid "primary_link"
-msgstr ""
+msgstr "ligação primária"
 
 msgctxt "Highway"
 msgid "secondary"
-msgstr ""
+msgstr "secundária"
 
 msgctxt "Highway"
 msgid "secondary_link"
-msgstr ""
+msgstr "ligação secundária"
 
 msgctxt "Highway"
 msgid "tertiary"
-msgstr ""
+msgstr "terciária"
 
 msgctxt "Highway"
 msgid "tertiary_link"
-msgstr ""
+msgstr "lligação terciária"
 
 msgctxt "Highway"
 msgid "bus_guideway"
-msgstr ""
+msgstr "pista de VLP"
 
 msgctxt "Highway"
 msgid "bridleway"
-msgstr ""
+msgstr "hipovia"
 
 msgctxt "Highway"
 msgid "living_street"
-msgstr ""
+msgstr "via de espaço compartilhado"
 
 msgctxt "Highway"
 msgid "pedestrian"
-msgstr ""
+msgstr "calçadão"
 
 msgctxt "Highway"
 msgid "track"
@@ -18030,11 +18379,11 @@ msgstr ""
 
 msgctxt "Highway"
 msgid "footway"
-msgstr ""
+msgstr "caminho de pedestre"
 
 msgctxt "Highway"
 msgid "steps"
-msgstr ""
+msgstr "via com degraus"
 
 msgid "Junction"
 msgstr "Junção"
@@ -18052,6 +18401,8 @@ msgid ""
 "Some road types already imply some access restrictions which should not be "
 "set again."
 msgstr ""
+"Alguns tipos de estradas já implicam algumas restrições de acesso, as quais "
+"não dever ser inseridas novamente."
 
 msgid "No exit (cul-de-sac)"
 msgstr "Sem saída"
@@ -18135,7 +18486,7 @@ msgstr "Rotatória"
 
 msgctxt "Highway"
 msgid "construction"
-msgstr ""
+msgstr "em construção"
 
 msgid "Ford"
 msgstr "Travessia de rio"
@@ -18333,43 +18684,43 @@ msgid "Amount of Steps"
 msgstr "Quantidade de passos"
 
 msgid "Ramp"
-msgstr ""
+msgstr "Rampa"
 
 msgid "Stroller ramp"
 msgstr ""
 
 msgid "Bicycle ramp"
-msgstr ""
+msgstr "Rampa para bicicleta"
 
 msgid "Wheelchair ramp"
-msgstr ""
+msgstr "Rampa para cadeira de rodas"
 
 msgid "Luggage ramp"
-msgstr ""
+msgstr "Rampa para bagagem"
 
 msgid "automatic"
-msgstr ""
+msgstr "automática"
 
 msgid "manual"
-msgstr ""
+msgstr "manual"
 
 msgid "Handrail"
-msgstr ""
+msgstr "Corrimão"
 
 msgid "Left handrail"
-msgstr ""
+msgstr "Corrimão à esquerda"
 
 msgid "Center handrail"
-msgstr ""
+msgstr "Corrimão no centro"
 
 msgid "Right handrail"
-msgstr ""
+msgstr "Corrimão à direita"
 
 msgid "Waypoints"
 msgstr "Pontos da via"
 
 msgid "Motorway Junction"
-msgstr "Trevo de Acesso"
+msgstr "Saída de trevo"
 
 msgid "Number"
 msgstr "Número"
@@ -18512,6 +18863,12 @@ msgstr "Radar de Velocidade"
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr "Distância (quilômetros)"
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -18597,7 +18954,7 @@ msgid "barbed_wire"
 msgstr "arame_farpado"
 
 msgid "chain_link"
-msgstr "chain_link"
+msgstr "tela de arame"
 
 msgid "electric"
 msgstr "elétrico"
@@ -18637,7 +18994,7 @@ msgid "Gate"
 msgstr "Portão"
 
 msgid "Lift Gate"
-msgstr "Lift Gate"
+msgstr "Cancela elevatória"
 
 msgid "Swing Gate"
 msgstr "Swing Gate"
@@ -18701,6 +19058,11 @@ msgstr "Colunata"
 msgid "Avalanche Protector"
 msgstr "Protetor de avalanche"
 
+msgctxt "main group"
+msgid "Water"
+msgstr "Água"
+
+msgctxt "sub group"
 msgid "Water"
 msgstr "Água"
 
@@ -18756,6 +19118,10 @@ msgstr "Reservatório"
 msgid "Covered Reservoir"
 msgstr "Reservatório coberto"
 
+msgctxt "natural"
+msgid "Water"
+msgstr "Água"
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr "Um conjunto de água parada, como um lago ou lagoa."
 
@@ -18901,8 +19267,122 @@ msgstr ""
 msgid "public"
 msgstr "público"
 
+msgid "Marine Fuel"
+msgstr ""
+
+msgid "Agip"
+msgstr "Agip"
+
+msgid "Aral"
+msgstr "Aral"
+
+msgid "Avia"
+msgstr "Avia"
+
+msgid "BP"
+msgstr "BP"
+
+msgid "Chevron"
+msgstr "Chevron"
+
+msgid "Citgo"
+msgstr "Citgo"
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr "Esso"
+
+msgid "Exxon"
+msgstr "Exxon"
+
+msgid "Gulf"
+msgstr "Golfo"
+
+msgid "Mobil"
+msgstr "Mobil"
+
+msgid "OMV"
+msgstr "OMV"
+
+msgid "Petro-Canada"
+msgstr "Petro-Canada"
+
+msgid "Pioneer"
+msgstr "Pioneiro"
+
+msgid "Q8"
+msgstr "Q8"
+
+msgid "Repsol"
+msgstr "Repsol"
+
+msgid "Shell"
+msgstr "Shell"
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr "Statoil"
+
+msgid "Sunoco"
+msgstr "Sunoco"
+
+msgid "Tamoil"
+msgstr "Tamoil"
+
+msgid "Texaco"
+msgstr "Texaco"
+
+msgid "Total"
+msgstr "Total"
+
+msgid "Independent"
+msgstr "Independente"
+
+msgid "Fuel types:"
+msgstr "Tipos de combustíveis:"
+
+msgid "Diesel"
+msgstr "Diesel"
+
+msgid "Bio Diesel"
+msgstr "Biodiesel"
+
+msgid "Octane 80"
+msgstr "Octano 80"
+
+msgid "Octane 91"
+msgstr "Octano 91"
+
+msgid "Octane 92"
+msgstr "Octano 92"
+
+msgid "Octane 95"
+msgstr "Octano 95"
+
+msgid "Octane 98"
+msgstr "Octano 98"
+
+msgid "Octane 100"
+msgstr "Octano 100"
+
+msgid "E10 (10% Ethanol mix)"
+msgstr "E10 (10% de mistura de etanol)"
+
+msgid "E85 (85% Ethanol mix)"
+msgstr "E85 (85% de mistura de etanol)"
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr "LPG (Gás de petróleo liquefeito)"
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr "CNG (Compressed Natural Gas)"
+
 msgid "Pier"
-msgstr "Embarcadouro"
+msgstr "Pier"
 
 msgid "Lock Gate"
 msgstr "Portão de Dique"
@@ -19017,6 +19497,9 @@ msgstr "Parar buffer"
 msgid "Railway Switch"
 msgstr "Railway Switch"
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr "Aerialway"
 
@@ -19036,7 +19519,7 @@ msgid "Has heating?"
 msgstr "Tem aquecimento?"
 
 msgid "Chair Lift"
-msgstr "Teleférico"
+msgstr "Telecadeira"
 
 msgid "Number of people per chair"
 msgstr "Número de pessoas por cadeira"
@@ -19051,13 +19534,13 @@ msgid "Number of people per gondola"
 msgstr "Número de pessoas por gôndola"
 
 msgid "Mixed Lift"
-msgstr "Elevador misto"
+msgstr "Teleférico misto"
 
 msgid "Number of people per gondola/chair"
 msgstr "Número de pessoas por gôndola/cadeira"
 
 msgid "Drag Lift"
-msgstr "Arraste Levante"
+msgstr "Telesquis"
 
 msgid ""
 "drag_lift (general type - use only if exact type (see values below) is "
@@ -19077,7 +19560,7 @@ msgid "rope_tow"
 msgstr ""
 
 msgid "Magic Carpet"
-msgstr "Magic Carpet"
+msgstr "Esteira rolante"
 
 msgid "Goods"
 msgstr "Produtos"
@@ -19140,78 +19623,6 @@ msgstr "Entrada do estacionamento"
 msgid "Fuel"
 msgstr "Posto de Gasolina"
 
-msgid "Agip"
-msgstr "Agip"
-
-msgid "Aral"
-msgstr "Aral"
-
-msgid "Avia"
-msgstr "Avia"
-
-msgid "BP"
-msgstr "BP"
-
-msgid "Chevron"
-msgstr "Chevron"
-
-msgid "Citgo"
-msgstr "Citgo"
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr "Esso"
-
-msgid "Exxon"
-msgstr "Exxon"
-
-msgid "Gulf"
-msgstr "Golfo"
-
-msgid "Mobil"
-msgstr "Mobil"
-
-msgid "OMV"
-msgstr "OMV"
-
-msgid "Petro-Canada"
-msgstr "Petro-Canada"
-
-msgid "Pioneer"
-msgstr "Pioneiro"
-
-msgid "Q8"
-msgstr "Q8"
-
-msgid "Repsol"
-msgstr "Repsol"
-
-msgid "Shell"
-msgstr "Shell"
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr "Statoil"
-
-msgid "Sunoco"
-msgstr "Sunoco"
-
-msgid "Tamoil"
-msgstr "Tamoil"
-
-msgid "Texaco"
-msgstr "Texaco"
-
-msgid "Total"
-msgstr "Total"
-
-msgid "Independent"
-msgstr "Independente"
-
 msgid "With shop"
 msgstr "Com Loja"
 
@@ -19221,51 +19632,12 @@ msgstr "conveniência"
 msgid "kiosk"
 msgstr "quiosque"
 
-msgid "Fuel types:"
-msgstr "Tipos de combustíveis:"
-
-msgid "Diesel"
-msgstr "Diesel"
-
-msgid "Bio Diesel"
-msgstr "Biodiesel"
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr "Diesel (gás para líquido - diesel final)"
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr "Diesel for Heavy Good Vehicles"
 
-msgid "Octane 80"
-msgstr "Octano 80"
-
-msgid "Octane 91"
-msgstr "Octano 91"
-
-msgid "Octane 92"
-msgstr "Octano 92"
-
-msgid "Octane 95"
-msgstr "Octano 95"
-
-msgid "Octane 98"
-msgstr "Octano 98"
-
-msgid "Octane 100"
-msgstr "Octano 100"
-
-msgid "E10 (10% Ethanol mix)"
-msgstr "E10 (10% de mistura de etanol)"
-
-msgid "E85 (85% Ethanol mix)"
-msgstr "E85 (85% de mistura de etanol)"
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr "LPG (Gás de petróleo liquefeito)"
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr "CNG (Compressed Natural Gas)"
-
 msgid "1/25 mix (mofa/moped)"
 msgstr "1/25 mix (mofa/moped)"
 
@@ -19410,7 +19782,7 @@ msgid "Bicycles are washed (for a fee)"
 msgstr "Bicicletas são lavadas (por um certo valor)"
 
 msgid "Public Bicycle Repair Station"
-msgstr ""
+msgstr "Estação Pública para Reparo de Bicicletas"
 
 msgid "Chain tool"
 msgstr ""
@@ -19486,9 +19858,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr "#CD853F"
 
-msgid "route segment"
-msgstr "segmento de rota"
-
 msgid "stop position"
 msgstr "posição de parada"
 
@@ -19507,6 +19876,9 @@ msgstr "plataforma (apenas saida)"
 msgid "platform (entry only)"
 msgstr "plataforma (apenas entrada)"
 
+msgid "route segment"
+msgstr "segmento de rota"
+
 msgid "Route Master"
 msgstr "Rota principal"
 
@@ -19685,7 +20057,7 @@ msgid "yes"
 msgstr "sim"
 
 msgid "Beacon"
-msgstr "Sinal luminoso"
+msgstr "Baliza luminosa"
 
 msgid "Windsock"
 msgstr "Biruta"
@@ -19709,17 +20081,23 @@ msgstr "Hotel"
 msgid "Stars"
 msgstr "Estrelhas"
 
+msgid "Rooms"
+msgstr "Quartos"
+
+msgid "Beds"
+msgstr "Camas"
+
 msgid "Motel"
-msgstr "Motor Hotel"
+msgstr "Hotel de estrada"
 
 msgid "Guest House/Bed & Breakfast"
-msgstr ""
+msgstr "Pousada/Dormitório com café da manhã"
 
 msgid "Chalet"
 msgstr "Chalé"
 
 msgid "Hostel"
-msgstr "Albergue"
+msgstr "Hostel"
 
 msgid "Alpine Hut"
 msgstr "Cabana alpina"
@@ -19799,11 +20177,14 @@ msgstr "lanchonete"
 msgid "sushi"
 msgstr "sushi"
 
+msgid "steak_house"
+msgstr "churrascaria"
+
 msgid "Microbrewery"
 msgstr "Microcervejaria"
 
 msgid "Outdoor seating"
-msgstr ""
+msgstr "Lugares ao ar livre"
 
 msgid "Fast Food"
 msgstr "Lanchonete"
@@ -19981,16 +20362,16 @@ msgid "Movie Theater/Cinema"
 msgstr "Sala de cinema/Cinema"
 
 msgid "Drive-in theater"
-msgstr ""
+msgstr "Cinema ao ar livre"
 
 msgid "3D"
-msgstr ""
+msgstr "3D"
 
 msgid "Number of screens"
-msgstr ""
+msgstr "Quantidade de telas"
 
 msgid "Minimum age"
-msgstr ""
+msgstr "Idade mínima"
 
 msgid "Zoo"
 msgstr "Zoológico"
@@ -20016,6 +20397,9 @@ msgstr "Sauna"
 msgid "Horse Riding"
 msgstr "Passeios a cavalo"
 
+msgid "Casino"
+msgstr "Cassino"
+
 msgid "Brothel"
 msgstr "Bordel"
 
@@ -20023,16 +20407,16 @@ msgid "Playground"
 msgstr "Parquinho"
 
 msgid "Picnic Site"
-msgstr "Campo de Picnic"
+msgstr "Área de piquenique"
 
 msgid "Fireplace"
 msgstr "Lareira"
 
 msgid "Picnic Table"
-msgstr ""
+msgstr "Mesa de piquenique"
 
 msgid "Public Grill"
-msgstr "Public Grill"
+msgstr "Churrasqueira pública"
 
 msgctxt "grill"
 msgid "Fuel"
@@ -20331,7 +20715,7 @@ msgid "Pharmacy"
 msgstr "Farmácia"
 
 msgid "Dispensing"
-msgstr "Dispensar"
+msgstr "Farmacêutico (medicamentos controlados)"
 
 msgid "Baby Hatch/Safe Haven"
 msgstr "Baby Hatch/Refúgio"
@@ -20370,16 +20754,16 @@ msgid "pitlatrine"
 msgstr "pitlatrine"
 
 msgid "chemical"
-msgstr "química"
+msgstr "químico"
 
 msgid "bucket"
 msgstr "balde"
 
 msgid "Usage Position"
-msgstr "Posiçaõ de utilização"
+msgstr "Posição de utilização"
 
 msgid "seated"
-msgstr "assentado"
+msgstr "sentado"
 
 msgid "seated;urinal"
 msgstr "sentado;mictório"
@@ -20412,7 +20796,7 @@ msgid "Drive through"
 msgstr "Dirija através de"
 
 msgid "Telephone"
-msgstr "Telefone"
+msgstr "Telefone público"
 
 msgid "Coins"
 msgstr "Moedas"
@@ -20503,8 +20887,8 @@ msgstr "Mostra a pressão barométrica"
 msgid "Shows humidity"
 msgstr "Mostra umidade"
 
-msgid "Recycling"
-msgstr "Reciclagem"
+msgid "Recycling Container"
+msgstr "Container para Reciclagem"
 
 msgid "Batteries"
 msgstr "Baterias"
@@ -20512,20 +20896,47 @@ msgstr "Baterias"
 msgid "Cans"
 msgstr "Latas"
 
+msgid "Cardboard"
+msgstr "Papelão"
+
+msgid "Electrical Appliances"
+msgstr "Aparelhos Elétricos"
+
 msgid "Glass"
 msgstr "Vidro"
 
+msgid "Glass Bottles"
+msgstr "Garrafas de Vidro"
+
+msgid "Green Waste"
+msgstr "Resíduos Verdes"
+
 msgid "Paper"
 msgstr "Papel"
 
+msgid "Plastic"
+msgstr "Plástico"
+
+msgid "Plastic Bottles"
+msgstr "Garrafas Plásticas"
+
+msgid "Plastic Packaging"
+msgstr "Embalagens Plásticas"
+
 msgid "Scrap Metal"
 msgstr "Ferro Velho"
 
-msgid "container"
-msgstr "contêiner"
+msgid "Shoes"
+msgstr "Calçados"
+
+msgid "Small Appliances"
+msgstr "Pequenos Aparelhos"
 
-msgid "centre"
-msgstr "centro"
+msgid "Waste"
+msgstr "Resíduos"
+
+msgid "Recycling Centre"
+msgstr "Centro de Reciclagem"
 
 msgid "Waste Basket/Trash Can"
 msgstr "Cesta de Lixo/Lata de lixo"
@@ -20728,6 +21139,9 @@ msgstr "Arco e Flecha"
 msgid "Track and Field Athletics"
 msgstr "Pista e Campo de atletismo"
 
+msgid "Running"
+msgstr "Corrida"
+
 msgid "Climbing"
 msgstr "Escalada"
 
@@ -20859,7 +21273,7 @@ msgid "backcountry"
 msgstr "sertão"
 
 msgid "Shooting"
-msgstr "Estande de Tiro"
+msgstr "Tiro desportivo"
 
 msgid "Sport (Ball)"
 msgstr "Esporte com bola"
@@ -20892,10 +21306,10 @@ msgid "Rounders"
 msgstr "Rounders"
 
 msgid "Rugby League"
-msgstr "Liga de Rugby"
+msgstr "Rúgbi de 13"
 
 msgid "Rugby Union"
-msgstr "União Rugby"
+msgstr "Rúgbi de 15"
 
 msgid "Baseball"
 msgstr "Baseball"
@@ -20903,12 +21317,18 @@ msgstr "Baseball"
 msgid "Basketball"
 msgstr "Basquetebol"
 
+msgid "Handball"
+msgstr "Andebol"
+
 msgid "Volleyball"
 msgstr "Voleibol"
 
 msgid "Beach Volleyball"
 msgstr "Vôlei de praia"
 
+msgid "Billiards"
+msgstr "Bilhar"
+
 msgid "Golf"
 msgstr "Golfe"
 
@@ -20924,14 +21344,14 @@ msgstr "Lawn Bowling"
 msgid "Cricket"
 msgstr "Críquete"
 
-msgid "Cricket Nets"
-msgstr "Redes de de críquete"
-
 msgid "Croquet"
 msgstr "Croquete"
 
-msgid "Hockey"
-msgstr "Hockey"
+msgid "Field Hockey"
+msgstr "Hóquei em Campo"
+
+msgid "Ice Hockey"
+msgstr "Hóquei no Gelo"
 
 msgid "Pelota"
 msgstr "Pelota"
@@ -20954,9 +21374,6 @@ msgstr "Kart Racing"
 msgid "Motocross"
 msgstr "Motocross"
 
-msgid "Safety Training"
-msgstr "Treinamento de segurança"
-
 msgid "Model Aerodrome"
 msgstr "Pista para Aeromodelo"
 
@@ -20975,9 +21392,6 @@ msgstr "trilha"
 msgid "RC Car"
 msgstr "Carro RC"
 
-msgid "Raceway"
-msgstr "Raceway"
-
 msgid "Man Made"
 msgstr "Construção humana"
 
@@ -21050,6 +21464,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr "supermercado"
+
+msgctxt "building"
+msgid "gasometer"
+msgstr "gasômetro"
+
+msgctxt "building"
 msgid "cowshed"
 msgstr "estábulo"
 
@@ -21059,7 +21481,7 @@ msgstr "construção"
 
 msgctxt "building"
 msgid "Levels"
-msgstr ""
+msgstr "Andares"
 
 msgid "Residential Building"
 msgstr "Edifício Residencial"
@@ -21097,7 +21519,7 @@ msgid "farm"
 msgstr "fazenda"
 
 msgid "Building part"
-msgstr ""
+msgstr "Parte de edifício"
 
 msgctxt "building"
 msgid "Skipped Levels"
@@ -21139,7 +21561,7 @@ msgid "Tower"
 msgstr "Torre"
 
 msgid "Tower type"
-msgstr "Tipo da torrer"
+msgstr "Tipo da torre"
 
 msgid "communication"
 msgstr "comunicação"
@@ -21163,39 +21585,39 @@ msgid "Gasometer"
 msgstr "Gasômetro"
 
 msgid "Storage Tank"
-msgstr ""
+msgstr "Tanque de Armazenagem"
 
 msgctxt "content"
 msgid "fuel"
-msgstr ""
+msgstr "combustível"
 
 msgctxt "content"
 msgid "manure"
-msgstr ""
+msgstr "esterco"
 
 msgctxt "content"
 msgid "oil"
-msgstr ""
+msgstr "óleo"
 
 msgctxt "content"
 msgid "sewage"
-msgstr ""
+msgstr "esgoto"
 
 msgctxt "content"
 msgid "silage"
-msgstr ""
+msgstr "silagem"
 
 msgctxt "content"
 msgid "slurry"
-msgstr ""
+msgstr "chorume"
 
 msgctxt "content"
 msgid "water"
-msgstr ""
+msgstr "água"
 
 msgctxt "content"
 msgid "wine"
-msgstr ""
+msgstr "vinho"
 
 msgid "Bunker Silo"
 msgstr "Bunker Silo"
@@ -21314,7 +21736,7 @@ msgid "Water Tower"
 msgstr "Torre de Água"
 
 msgid "Water Works"
-msgstr "Fonte ornamental"
+msgstr "Estação de tratamento de água"
 
 msgid "Wastewater Treatment Plant"
 msgstr "Planta de tratamento de efluentes"
@@ -22002,7 +22424,7 @@ msgid "tubular"
 msgstr "tubular"
 
 msgid "solid"
-msgstr ""
+msgstr "sólido"
 
 msgid "steel"
 msgstr "aço"
@@ -22013,7 +22435,7 @@ msgstr "Vermelho/branco"
 
 msgctxt "power"
 msgid "Tower type"
-msgstr ""
+msgstr "Tipo da torre"
 
 msgctxt "power"
 msgid "suspension"
@@ -22261,7 +22683,7 @@ msgid "Monument"
 msgstr "Monumento"
 
 msgid "Memorial"
-msgstr "Memorial"
+msgstr "Monumento comemorativo"
 
 msgctxt "memorial"
 msgid "statue"
@@ -22297,11 +22719,11 @@ msgid "Wayside Shrine"
 msgstr "Wayside Shrine"
 
 msgid "Place of worship"
-msgstr ""
+msgstr "Lugar de prática religiosa"
 
 msgctxt "building"
 msgid "wayside_shrine"
-msgstr ""
+msgstr "capelinha de beira de estrada"
 
 msgid "Boundary Stone"
 msgstr "Marco fronteiriço"
@@ -22328,7 +22750,7 @@ msgid "Butcher"
 msgstr "Açougue"
 
 msgid "Seafood"
-msgstr "Frutos do Mar"
+msgstr "Peixaria / Frutos do Mar"
 
 msgid "Deli (Fine Food)"
 msgstr "Deli (comida requintada)"
@@ -22361,7 +22783,7 @@ msgid "Fair Trade"
 msgstr "Feira comercial"
 
 msgid "Alcohol"
-msgstr "Álcool"
+msgstr "Bebidas alcoólicas"
 
 msgid "Beverages"
 msgstr "Bebidas"
@@ -22372,14 +22794,11 @@ msgstr "Vinho"
 msgid "Boutique"
 msgstr "Boutique"
 
-msgid "Shoes"
-msgstr "Sapatos"
-
 msgid "Outdoor"
 msgstr "Outdoor"
 
 msgid "Dry Cleaning"
-msgstr "Lavanderia à Seco"
+msgstr "Lavanderia a seco"
 
 msgid "Laundry"
 msgstr "Lavanderia"
@@ -22388,7 +22807,7 @@ msgid "Tailor"
 msgstr "Alfaiate"
 
 msgid "Fabric"
-msgstr "Textura"
+msgstr "Tecidos"
 
 msgid "Electronic"
 msgstr "Eletrônica"
@@ -22430,7 +22849,7 @@ msgid "Money Exchange"
 msgstr "Loja de Câmbio"
 
 msgid "Pawnbroker"
-msgstr "agiota"
+msgstr "Agiota"
 
 msgid "Home decoration"
 msgstr "Decoração da casa"
@@ -22481,7 +22900,7 @@ msgid "Department Store"
 msgstr "Loja de departamentos"
 
 msgid "Mall"
-msgstr "Shopping center/Centro comercial"
+msgstr "Galeria Comercial/Shopping"
 
 msgid "Chemist"
 msgstr "Químico"
@@ -22496,13 +22915,13 @@ msgid "Tattoo"
 msgstr "Tatuagem"
 
 msgid "Optician"
-msgstr "Oculista"
+msgstr "Ótica"
 
 msgid "Hearing Aids"
 msgstr "Aparelhos auditivos"
 
 msgid "Medical Supply"
-msgstr ""
+msgstr "Suprimentos médicos"
 
 msgid "Jewellery"
 msgstr "Joalheiro"
@@ -22520,13 +22939,13 @@ msgid "Garden Centre"
 msgstr "Floricultura"
 
 msgid "Do-It-Yourself Store"
-msgstr "Loja Faça-Você-Mesmo"
+msgstr "Faça-Você-Mesmo"
 
 msgid "Hardware"
-msgstr "Componente físico"
+msgstr "Material de construção"
 
 msgid "Paint"
-msgstr "Pintura"
+msgstr "Tintas"
 
 msgid "Travel Agency"
 msgstr "Agência de Viagem"
@@ -22541,13 +22960,13 @@ msgid "Variety Store"
 msgstr "Loja de variedades"
 
 msgid "Bookmaker"
-msgstr "Bookmaker"
+msgstr "Casa de apostas"
 
 msgid "Lottery"
 msgstr "Loteria"
 
 msgid "Bag"
-msgstr "Saco"
+msgstr "Bolsas"
 
 msgid "Pet"
 msgstr "Animal de estimação"
@@ -22619,7 +23038,7 @@ msgid "vouchers"
 msgstr "vales"
 
 msgid "Payment Methods"
-msgstr ""
+msgstr "Formas de pagamento"
 
 msgid "Debit cards"
 msgstr "Cartões de Débito"
@@ -22637,22 +23056,22 @@ msgid "Laser"
 msgstr ""
 
 msgid "Maestro"
-msgstr ""
+msgstr "Maestro"
 
 msgid "Visa Debit"
 msgstr ""
 
 msgid "Visa Electron"
-msgstr ""
+msgstr "Visa Electron"
 
 msgid "Credit cards"
 msgstr "Cartão de Crédito"
 
 msgid "American Express"
-msgstr ""
+msgstr "American Express"
 
 msgid "Diners Club"
-msgstr ""
+msgstr "Diners Club"
 
 msgid "Discover Card"
 msgstr ""
@@ -22661,10 +23080,10 @@ msgid "JCB"
 msgstr ""
 
 msgid "Mastercard"
-msgstr ""
+msgstr "Mastercard"
 
 msgid "Visa"
-msgstr ""
+msgstr "Visa"
 
 msgid "Electronic purses and Charge cards"
 msgstr "Carteiras Eletrônicas e Cartões pré-pagos"
@@ -22709,13 +23128,13 @@ msgid "Cryptocurrencies"
 msgstr ""
 
 msgid "Bitcoin"
-msgstr ""
+msgstr "Bitcoin"
 
 msgid "Dogecoin"
-msgstr ""
+msgstr "Dogecoin"
 
 msgid "Litecoin"
-msgstr ""
+msgstr "Litecoin"
 
 msgid "Geography"
 msgstr "Geografia"
@@ -22788,7 +23207,7 @@ msgstr "País"
 
 msgctxt "place"
 msgid "State"
-msgstr ""
+msgstr "Estado"
 
 msgid "Region"
 msgstr "Região"
@@ -22836,7 +23255,7 @@ msgid "The top (summit) of a mountain or hill."
 msgstr "A parte superior (cume) de uma montanha ou colina."
 
 msgid "Saddle"
-msgstr "Saddle"
+msgstr "Passo de montanha"
 
 msgid "A saddle point between mountains or hills."
 msgstr "Um ponto entre montanhas ou colinas."
@@ -22882,10 +23301,10 @@ msgid "A mountain or hill ridge."
 msgstr "Uma montanha ou o cume do monte."
 
 msgid "Valley"
-msgstr ""
+msgstr "Vale"
 
 msgid "A low area between hills."
-msgstr ""
+msgstr "Uma área baixa entre colinas."
 
 msgid "Cave Entrance"
 msgstr "Entrada de Caverna"
@@ -22918,10 +23337,10 @@ msgid "A line of trees."
 msgstr "Uma linha de árvores."
 
 msgid "Wood"
-msgstr "Mata"
+msgstr "Floresta"
 
 msgid "Woodland where timber production does not dominate use."
-msgstr "Woodland, onde a produção de madeira não dominam o uso."
+msgstr "Woodland, onde a produção de madeira não é o uso dominante."
 
 msgid "Forest"
 msgstr "Floresta"
@@ -23041,15 +23460,17 @@ msgstr ""
 "Para as áreas de rocha sólida visível, que possuir vegetação escassa."
 
 msgid "Rock"
-msgstr ""
+msgstr "Rocha"
 
 msgid ""
 "A notable rock or group of rocks, with at least one of them firmly attached "
 "to the underlying bedrock."
 msgstr ""
+"Uma rocha notável ou grupo de rochas com, pelo menos, uma delas firmemente "
+"fixada ao leito rochoso subjacente."
 
 msgid "Tourism attraction"
-msgstr ""
+msgstr "Atração turística"
 
 msgid "Stone"
 msgstr "Pedra"
@@ -23194,7 +23615,7 @@ msgid "Country code"
 msgstr "Código do país"
 
 msgid "House name"
-msgstr "Nome da casa"
+msgstr "Complemento"
 
 msgid "Subdistrict"
 msgstr "Subdistrito"
@@ -23207,7 +23628,7 @@ msgstr "Província"
 
 msgctxt "addr:"
 msgid "State"
-msgstr ""
+msgstr "Estado"
 
 msgid "AL"
 msgstr "AL"
@@ -23401,12 +23822,12 @@ msgstr "potencial"
 msgid "Contact (Common Schema)"
 msgstr "Contato (esquema comum)"
 
-msgid "Fax Number"
-msgstr "Número do fax"
-
 msgid "Email Address"
 msgstr "Endereço de E-mail"
 
+msgid "Fax Number"
+msgstr "Número do fax"
+
 msgid "Image"
 msgstr "Imagem"
 
@@ -23415,34 +23836,39 @@ msgstr "Contato (esquema com o prefixo ''contato: *'')"
 
 msgctxt "description=*"
 msgid "A short text with additional information."
-msgstr ""
+msgstr "Um texto curto com informação adicional."
 
 msgctxt "description=*"
 msgid ""
 "It might be viewable to the end user (perhaps using a search system or a map "
 "with pop-ups)."
 msgstr ""
+"Pode ser visível para o usuário final (talvez usando um sistema de busca ou "
+"pop-ups no mapa)."
 
 msgctxt "note=*, fixme=*, description=*"
 msgid "Similar but different tags:"
-msgstr ""
+msgstr "Etiquetas similares, mas diferentes:"
 
 msgctxt "the tag note=*"
 msgid "Note"
-msgstr ""
+msgstr "Nota"
 
 msgctxt "note=*"
 msgid "An important hint for other mappers (not for the end user)."
 msgstr ""
+"Uma importante dica para outros mapeadores (não para o usuário final)."
 
 msgid "Fixme"
-msgstr ""
+msgstr "Corrija-me"
 
 msgctxt "fixme=*"
 msgid ""
 "A hint for other mappers (not for the end user), that an object needs an "
 "improvement."
 msgstr ""
+"Uma dica para outros mapeadores (não para usuário final) que um elemento "
+"precisa ser melhorado."
 
 msgid "outer segment"
 msgstr "segmento externo"
@@ -23463,16 +23889,16 @@ msgid "maritime"
 msgstr ""
 
 msgid "national_park"
-msgstr ""
+msgstr "parque nacional"
 
 msgid "political"
 msgstr "política"
 
 msgid "postal_code"
-msgstr ""
+msgstr "código postal"
 
 msgid "protected_area"
-msgstr ""
+msgstr "área de proteção"
 
 msgid "Sub area"
 msgstr "Sub área"
@@ -23508,25 +23934,25 @@ msgid "Restriction"
 msgstr "Restrição"
 
 msgid "no_left_turn"
-msgstr "proibida_conversão_esquerda"
+msgstr "proibido conversão à esquerda"
 
 msgid "no_right_turn"
-msgstr "proibida_conversão_direita"
+msgstr "proibido conversão à direita"
 
 msgid "no_straight_on"
-msgstr "proibido_em_frente"
+msgstr "proibido seguir em frente"
 
 msgid "no_u_turn"
-msgstr "proibido_retornar"
+msgstr "proibido retornar"
 
 msgid "only_right_turn"
-msgstr "somente_a_direita"
+msgstr "somente à direita"
 
 msgid "only_left_turn"
-msgstr "somente_a_esquerda"
+msgstr "somente à esquerda"
 
 msgid "only_straight_on"
-msgstr "somente_em_frente"
+msgstr "somente em frente"
 
 msgid "from way"
 msgstr "do caminho"
@@ -23820,19 +24246,22 @@ msgid "{0} without {1}, {2} or {3}"
 msgstr "{0} sem {1}, {2} ou {3}"
 
 msgid "{0} together with {1}"
-msgstr ""
+msgstr "{0} junto com {1}"
 
 msgid "incomplete object: only {0}"
-msgstr ""
+msgstr "elemento incompleto: somente {0}"
 
 msgid "incomplete object: only {0} and {1}"
-msgstr ""
+msgstr "elemento incompleto: somente {0} e {1}"
 
 msgid "{0} together with addr:*"
+msgstr "{0} junto com addr:*"
+
+msgid "{0} together with {1} and conflicting values"
 msgstr ""
 
 msgid "{0} on suspicious object"
-msgstr "{0} no objeto suspeito"
+msgstr "{0} em objeto suspeito"
 
 msgid "restaurant without name"
 msgstr "restaurante sem nome"
@@ -23850,11 +24279,23 @@ msgid "{0} should be on the node where {1} and {2} intersect"
 msgstr "{0} deve ser no nó onde {1} e {2} se cruzam"
 
 msgid "alternative name without {0}"
-msgstr ""
+msgstr "nome alternativo sem {0}"
 
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr "Mesmo valor de {0} e {1}"
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr "Mesmo valor de {0}, {1} e {2}"
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr "{0} e {1} junta com {2} e valores conflitantes"
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr "{0}={1} está obsoleto"
 
@@ -23900,14 +24341,14 @@ msgid "{0} should be replaced with {1}"
 msgstr "{0} deve ser substituido por {1}"
 
 msgid "{0} = {1}; remove {0}"
-msgstr ""
+msgstr "{0} = {1}; apagar {0}"
 
 msgid ""
 "{0}={1} is unspecific. Please replace ''{1}'' by ''left'', ''right'' or "
 "''both''."
 msgstr ""
-"{0}={1} é inespecífico. Por favor, substitua ''{1}'' por ''esquerda'', "
-"''direita'' ou ''ambos''."
+"{0}={1} é inespecífico. Por favor, substitua ''{1}'' por ''left'', ''right'' "
+"ou ''both''."
 
 msgid "Unspecific tag {0}"
 msgstr ""
@@ -23918,6 +24359,7 @@ msgstr ""
 msgid ""
 "{0} is not recommended. Use the Reverse Ways function from the Tools menu."
 msgstr ""
+"{0} não é recomendado. Use a função Reverter Caminhos no menu Ferramentas."
 
 msgid "key with uncommon character"
 msgstr ""
@@ -23925,6 +24367,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr "{0} em um nó. Deveria ser usado em uma via."
 
@@ -23935,7 +24380,7 @@ msgid "{0}=* on a node. Should be used in a relation"
 msgstr "{0}=* em um nó. Deveria ser utilizado em uma relação"
 
 msgid "{0} on a way. Should be used on a node."
-msgstr ""
+msgstr "{0} em uma linha. Deveria ser usado em um ponto."
 
 msgid "{0} on a way. Should be used in a relation"
 msgstr "{0} em uma via. Deveria ser utilizado em uma relação"
@@ -23953,7 +24398,7 @@ msgid "Overlapping Areas"
 msgstr "Sobreposição de áreas"
 
 msgid "{0} inside {1}"
-msgstr "{0} dentro {1}"
+msgstr "{0} dentro de {1}"
 
 msgid "Overlapping Identical Natural Areas"
 msgstr "Sobreposição de áreas naturais idênticas"
@@ -23965,7 +24410,7 @@ msgid "{0} must be connected to a way"
 msgstr "{0} precisa estar conectado à uma via"
 
 msgid "node connects waterway and bridge"
-msgstr ""
+msgstr "pontos conectam via aquática e ponte"
 
 msgid "abbreviated street name"
 msgstr "nome da rua abreviado"
@@ -23992,6 +24437,7 @@ msgid ""
 "Value of ''{0}'' should either be ''{1}'' or ''{2}''. For sidewalks use "
 "''{3}'' instead."
 msgstr ""
+"Valor de ''{0}'' deve ser ''{1}'' ou ''{2}''. Para calçadas use ''{3}''."
 
 msgid "{0} with multiple values"
 msgstr "{0} com múltiplos valores"
@@ -24017,9 +24463,22 @@ msgstr ""
 "{0}: metros é padrão; ponto é separador; se unidades, colocar espaço então a "
 "unidade"
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+"{0}: tonelada é padrão; ponto é separador; se unidade, coloque espaço antes "
+"da unidade"
+
 msgid "unusual {0} format"
 msgstr "formato {0} incomum"
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+"{0}: quilômetro é padrão; ponto é separador; se unidade, coloque espaço "
+"antes da unidade"
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr "tensão deve ser em volts sem unidades /delimitador/espaços"
 
@@ -24036,7 +24495,7 @@ msgid "{0} must be a numeric value"
 msgstr "{0} precisa ser um valor numérico"
 
 msgid "{0} must be a positive integer number"
-msgstr ""
+msgstr "{0} deve ser um número inteiro positivo"
 
 msgid "relation without type"
 msgstr "relações sem tipo"
@@ -24405,6 +24864,9 @@ msgstr "Adicionar pontos fixos no clique"
 msgid "Add fixed points on spacebar"
 msgstr "Adicionar pontos fixos na barra de espaços"
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr "Desenhar apenas polígonos fechados"
 
@@ -24468,9 +24930,6 @@ msgstr "Desenhe o caminho com o mouse"
 msgid "min distance={0} px ({1} m)"
 msgstr "min distance={0} px ({1} m)"
 
-msgid "Convert way to FastDraw line"
-msgstr "Converter via para linha FastDraw"
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr "Eps ={0}, {1} pontos, {2} p/km"
 
@@ -25328,70 +25787,87 @@ msgstr "Algo deu errado!"
 msgid "Please file a bug report on the github project page under"
 msgstr "Por favor, envie um relatório de bug na página do projeto no GitHub"
 
-msgid ""
-"Let us know what you did and what happend add the following text to the bug "
-"report, so we can find the source of the issue."
+msgid ""
+"Let us know what you did and what happend add the following text to the bug "
+"report, so we can find the source of the issue."
+msgstr ""
+"Deixe-nos saber o que você fez e o que aconteceu. Adicione o seguinte texto "
+"no relatório de bug, para que possamos encontrar a fonte do problema."
+
+msgid "Area Selector - Preferences"
+msgstr ""
+
+msgid "Settings for the area detection algorithm."
+msgstr ""
+
+msgid "Boofcv - high resolution images"
+msgstr ""
+
+msgid "Custom - low resolution images"
+msgstr ""
+
+msgid ""
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
+msgstr ""
+
+msgid "Algorithm"
+msgstr "Algoritmo"
+
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
+msgstr ""
+
+msgid "Distance Tolerance"
 msgstr ""
-"Deixe-nos saber o que você fez e o que aconteceu. Adicione o seguinte texto "
-"no relatório de bug, para que possamos encontrar a fonte do problema."
 
-msgid "Area detection algorithm settings."
-msgstr "Configuração do algoritmo de detecção de áreas"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
+msgstr ""
 
-msgid "Algorithm Settings"
-msgstr "Configurações de algoritmo"
+msgid "Angle Tolerance"
+msgstr ""
 
 msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
-"O limite de cor define o quanto a cor pode ser da cor original a ser "
-"selecionada (padrão: {0})."
 
 msgid "Color Threshold"
 msgstr "Limiar de cor"
 
-msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+msgid "Use HSV based algorithm"
 msgstr ""
-"Distância máxima em cada ponto da sequência pode ser a partir de uma linha, "
-"em pixels (Padrão: {0})."
-
-msgid "Tolerance Distance"
-msgstr "Distância de tolerância"
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
-msgstr "Tolerância para ângulos de ajuste, em radianos (Padrão {0})."
-
-msgid "Tolerance Angle"
-msgstr "Ângulo de tolerância"
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
+msgstr ""
 
-msgid "Plugin Settings"
-msgstr "Configurações do plugin"
+msgid "How often thinning operation should be applied (Default {0})."
+msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
-msgstr "Mostrar diálogo endereço após o mapeamento de uma área"
+msgid "Thinning Iterations"
+msgstr ""
 
 msgid "show address dialog"
 msgstr "Mostrar o diálogo endereço"
 
-msgid "Merge nodes with neighbors"
-msgstr "Unir nós com os vizinhos"
+msgid "Show Address Dialog after mapping an area"
+msgstr "Mostrar diálogo endereço após o mapeamento de uma área"
 
 msgid "merge nodes"
 msgstr "unir nós"
 
-msgid "How often thinning operation should be applied (Default {0})."
-msgstr ""
-
-msgid "Thinning Iterations"
+msgid "Merge nodes with existing nodes"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -26059,10 +26535,13 @@ msgstr ""
 "Primeiro selecione uma delas, então repita"
 
 msgid "Reset offset"
-msgstr "Resetar offset"
+msgstr "Resetar deslocamento"
 
 msgid "Reset offset (only vector images)"
-msgstr "Resetar offset (apenas imagens vetoriais)"
+msgstr "Resetar deslocamento (apenas imagens vetoriais)"
+
+msgid "Blank Layer"
+msgstr "Camada vazia"
 
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr "Camada WMS ({0}), {1} imagem(ns) carregadas"
@@ -26948,10 +27427,10 @@ msgid "Change Color"
 msgstr "Mudar cor"
 
 msgid "Deprecate Offset"
-msgstr "Offset depreciado"
+msgstr "Deslocamento obsoleto"
 
 msgid "Are you sure this imagery offset is wrong?"
-msgstr "Tem certeza que essa compensação da imagem está errada?"
+msgstr "Tem certeza que esse deslocamento de imagem está errado?"
 
 msgid "Are you sure this calibration geometry is aligned badly?"
 msgstr "Tem certeza de que a geometria de calibração está alinhada mal?"
@@ -26961,7 +27440,8 @@ msgstr "Aviso: depreciação é basicamente irreversível!"
 
 msgid "To store imagery offsets you must be a registered OSM user."
 msgstr ""
-"Para armazenar offset de imagens você precisa ser um usuário registrado OSM."
+"Para armazenar deslocamento de imagens você precisa ser um usuário "
+"registrado OSM."
 
 msgid ""
 "Please enter the reason why you mark this imagery offset as deprecated"
@@ -26979,7 +27459,7 @@ msgid "Notifying the server of the deprecation..."
 msgstr "Notificar o servidor da depreciação..."
 
 msgid "Get Imagery Offset..."
-msgstr "Obter imagens offset..."
+msgstr "Obter deslocamentos de imagem"
 
 msgid "Download offsets for current imagery from a server"
 msgstr "Baixe deslocamentos para a imagem atual de um servidor"
@@ -26991,7 +27471,7 @@ msgstr ""
 "faça o upload do offset."
 
 msgid "Loading imagery offsets..."
-msgstr "Carregando offstes das imagens..."
+msgstr "Carregando deslocamentos de imagens..."
 
 msgid "Error processing XML response: {0}"
 msgstr "Erro no processamento da resposta XML: {0}"
@@ -27018,7 +27498,7 @@ msgid "Calibration geometries"
 msgstr "Geometrias de calibração"
 
 msgid "Deprecated offsets"
-msgstr "Ofssets depreciados"
+msgstr "Deslocamentos obsoletos"
 
 msgid ""
 "The topmost imagery layer has been shifted to presumably match\n"
@@ -27026,8 +27506,8 @@ msgid ""
 "by downloading GPS tracks and comparing them and OSM data to the imagery."
 msgstr ""
 "A camada superior de imagens foi deslocada para combinar presumivelmente\n"
-"com dadosOSM na área. Verifique que o deslocamento ainda é válido\n"
-"ao baixar tracks GPS e comparar-los com os dados do OSM para a imagem."
+"com dados OSM na área. Verifique que o deslocamento ainda é válido\n"
+"ao baixar trilhas GPS e compará-las com os dados do OSM para a imagem."
 
 msgid ""
 "A layer has been added with a calibration geometry. Hide data layers,\n"
@@ -27045,10 +27525,10 @@ msgid "Created by {0} on {1}"
 msgstr "Criado por {0} em {1}"
 
 msgid "Offset Information"
-msgstr "Informação do deslocamento:"
+msgstr "Informação do deslocamento"
 
 msgid "Report this offset"
-msgstr "Reportar este offset"
+msgstr "Reportar este deslocamento"
 
 msgid "You are to notify moderators of this offset. Why?"
 msgstr "Você deve notificar moderadores deste offset. Por quê?"
@@ -27084,7 +27564,7 @@ msgid "Unable to connect to the server"
 msgstr "Não é possível conectar ao servidor"
 
 msgid "Store Imagery Offset..."
-msgstr "Armazinar offset da imagem..."
+msgstr "Armazenar deslocamento da imagem..."
 
 msgid ""
 "Upload an offset for current imagery (or calibration object geometry) to a "
@@ -27097,7 +27577,7 @@ msgid "Store calibration geometry"
 msgstr "Armazenar geometria calibração"
 
 msgid "Store imagery offset"
-msgstr "Armazinar offset da imagem"
+msgstr "Armazenar deslocamento da imagem"
 
 msgid ""
 "The selected object can be used as a calibration geometry. What do you "
@@ -27110,8 +27590,8 @@ msgid ""
 "The topmost imagery layer has no offset. Are you sure you want to upload "
 "this?"
 msgstr ""
-"A camada superior de imagens não tem offset. Tem certeza de que deseja "
-"enviar este?"
+"A camada superior de imagens não tem deslocamento. Tem certeza de que deseja "
+"enviar?"
 
 msgid ""
 "You are registering an imagery offset. Other users in this area will be able "
@@ -27119,10 +27599,10 @@ msgid ""
 "Please make sure it is as precise as possible, and describe a region this "
 "offset is applicable to."
 msgstr ""
-"Você está registrando um deslocmento de imagem. Outros usuários nesta área "
-"serão capaz de usá-lo para o mapeamento.\n"
+"Você está registrando um deslocamento de imagem. Outros usuários nesta área "
+"serão capazes de usá-lo para o mapeamento.\n"
 "Por favor, certifique-se que é o mais preciso possível, e descreva uma "
-"região onde este offset é aplicável."
+"região onde este deslocamento é aplicável."
 
 msgid ""
 "You are registering a calibration geometry. It should be the most precisely "
@@ -27387,7 +27867,7 @@ msgid "Running vertex reduction..."
 msgstr "Executando redução de vértice..."
 
 msgid "Running Douglas-Peucker approximation..."
-msgstr "Rodando aproximação Douglas-Peucker..."
+msgstr "Executando aproximação Douglas-Peucker..."
 
 msgid "Removing duplicate nodes..."
 msgstr "Removendo nós duplicados..."
@@ -27610,14 +28090,322 @@ msgstr "Ativa o plugin MapDust bug reporter"
 msgid "Missing input data"
 msgstr "Faltando dados de entrada"
 
+msgid "Mapillary Images"
+msgstr ""
+
+msgid "Mapillary layer"
+msgstr ""
+
+msgid "Total images:"
+msgstr "Total de imagens:"
+
+msgid "images"
+msgstr "imagens"
+
 msgid "Mapillary"
+msgstr "Mapillary"
+
+msgid "Create Mapillary layer"
+msgstr "Criar camada do Mapillary"
+
+msgid "Start Mapillary layer"
+msgstr "Iniciar camada do Mapillary"
+
+msgid "Download Mapillary images in current view"
+msgstr "Obtendo imagens do Mapillary na visão atual"
+
+msgid "Export pictures"
+msgstr "Exportar imagens"
+
+msgid "Export Mapillary pictures"
+msgstr "Exportar imagens do Mapillary"
+
+msgid "Export images"
+msgstr "Exportar imagens"
+
+msgid "Import pictures"
+msgstr "Importar imagens"
+
+msgid "Import local pictures"
+msgstr "Importar imagens locais"
+
+msgid "Import pictures into Mapillary layer"
+msgstr "Importar imagens na camada do Mapillary"
+
+msgid "Select pictures"
+msgstr "Selecionar imagens"
+
+msgid "Import pictures into sequence"
+msgstr "Importar imagens na sequência"
+
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Join mode"
 msgstr ""
 
-msgid "Export"
-msgstr "Exportar"
+msgid "Join/unjoin pictures"
+msgstr ""
+
+msgid "Join Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures"
+msgstr "Enviar imagens"
+
+msgid "Upload Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures."
+msgstr ""
+
+msgid "Walk mode"
+msgstr ""
+
+msgid "Start walk mode"
+msgstr ""
+
+msgid "Zoom to selected image"
+msgstr ""
+
+msgid "Zoom to the currently selected Mapillary image"
+msgstr ""
+
+msgid "Uploaded {0} images"
+msgstr ""
+
+msgid "Approve upload on the website"
+msgstr ""
+
+msgid "View in website"
+msgstr ""
+
+msgid "Copy key"
+msgstr ""
+
+msgid "Copy key tag"
+msgstr ""
+
+msgid "Edit on website"
+msgstr ""
+
+msgid "Export all images"
+msgstr ""
+
+msgid "Export selected sequence"
+msgstr ""
+
+msgid "Export selected images"
+msgstr ""
+
+msgid "Rewrite imported images"
+msgstr ""
+
+msgid "Select a folder"
+msgstr ""
+
+msgid "Explore"
+msgstr "Explorar"
+
+msgid "Select a directory"
+msgstr "Selecione um diretório"
+
+msgid "Speed limit"
+msgstr "Limite de velocidade"
+
+msgid "Give way"
+msgstr "Dê a preferência"
+
+msgid "No entry"
+msgstr ""
+
+msgid "Intersection danger"
+msgstr "Cruzamento perigoso"
+
+msgid "Mandatory direction (any)"
+msgstr "Sentido obrigatório (qualquer)"
+
+msgid "No turn"
+msgstr "Proibido virar"
+
+msgid "Uneven road"
+msgstr "Estrada irregular"
+
+msgid "No parking"
+msgstr "Proibido estacionar"
+
+msgid "No overtaking"
+msgstr "Proibido ultrapassar"
+
+msgid "Pedestrian crossing"
+msgstr "Travessia de pedestres"
+
+msgid "Years"
+msgstr "Anos"
+
+msgid "Months"
+msgstr "Meses"
+
+msgid "Days"
+msgstr "Dias"
+
+msgid "Mapillary filter"
+msgstr ""
+
+msgid "Open Mapillary filter dialog"
+msgstr ""
+
+msgid "Downloaded images"
+msgstr "Imagens baixadas"
+
+msgid "Only images with signs"
+msgstr "Somente imagens com placas"
+
+msgid "Choose signs"
+msgstr "Escolha placas"
+
+msgid "Mapillary history"
+msgstr ""
+
+msgid "Open Mapillary history dialog"
+msgstr ""
+
+msgid "Open Mapillary window"
+msgstr ""
+
+msgid "Mapillary dialog"
+msgstr ""
+
+msgid "Open Mapillary main dialog"
+msgstr ""
+
+msgid "Next picture"
+msgstr "Próxima foto"
+
+msgid "Shows the next picture in the sequence"
+msgstr "Mostra a próxima foto na sequência"
+
+msgid "Previous picture"
+msgstr "Foto anterior"
+
+msgid "Shows the previous picture in the sequence"
+msgstr "Mostra a foto anterior na sequência"
+
+msgid "Jump to red"
+msgstr ""
+
+msgid "Jumps to the picture at the other side of the red line"
+msgstr "Pula para a foto no outro lado da linha vermelha"
+
+msgid "Jump to blue"
+msgstr ""
+
+msgid "Jumps to the picture at the other side of the blue line"
+msgstr "Pula para a foto no outro lado da linha azul"
+
+msgid "Stops the walk."
+msgstr "Para a caminhada."
+
+msgid "Play"
+msgstr "Tocar"
+
+msgid "Continues with the paused walk."
+msgstr "Continua com a caminhada pausada."
+
+msgid "Pause"
+msgstr "Pausar"
+
+msgid "Pauses the walk."
+msgstr "Pausa a caminhada."
+
+msgid "Reverse buttons position when displaying images."
+msgstr ""
+
+msgid "Display hour when the picture was taken"
+msgstr "Mostra hora quando a foto foi tirada"
+
+msgid "Use 24 hour format"
+msgstr "Usar formuto de 24 horas"
+
+msgid "Move to picture''s location with next/previous buttons"
+msgstr ""
+
+msgid "Download mode: "
+msgstr ""
+
+msgid "Upload selected sequence"
+msgstr ""
+
+msgid "Delete after upload"
+msgstr ""
+
+msgid "Wait for full quality pictures"
+msgstr ""
+
+msgid "Follow selected image"
+msgstr ""
+
+msgid "Go forward"
+msgstr ""
+
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] "Apagar {0} imagem"
+msgstr[1] "Apagar {0} imagens"
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] "Importar {0} imagem"
+msgstr[1] "Importar {0} imagens"
+
+msgid "2 images joined"
+msgstr ""
+
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
+msgstr ""
+
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
+msgstr ""
+"A área do OSM baixada é muito grande. Função Baixar foi alterada para "
+"semiautomática até a camada reiniciar."
+
+msgid "Downloading"
+msgstr "Baixando"
+
+msgid "Select mode"
+msgstr "Modo de seleção"
+
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
+msgstr ""
+
+msgid "Downloading Mapillary images"
+msgstr ""
+
+msgid "Total Mapillary images: {0}"
+msgstr ""
+
+msgid "No images found"
+msgstr "Nenhuma imagem encontrada"
+
+msgid "Finished upload"
+msgstr ""
+
+msgid "Uploading: {0}"
+msgstr ""
 
 msgid "Measured values"
 msgstr "Valores medidos"
@@ -27638,6 +28426,9 @@ msgstr "Comprimento selecionado"
 msgid "Selection Area"
 msgstr "Área de seleção"
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr "Ângulo"
 
@@ -27701,51 +28492,7 @@ msgstr "Criar restrição para virar à esquerda Michigan"
 
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
-"Não foi possível localizar nós via . Por favor, verifique a sua seleção"
-
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-
-msgid "Download from OSM mirror..."
-msgstr "Baixar do espelho OSM..."
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-"Esta consulta XAPI parece ser inválida, por favor verifique novamente"
-
-msgid "Object type: "
-msgstr "Tipo de objeto: "
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr "Tipo de objeto OSM para download (''*'' significa qualquer)"
-
-msgid "XAPI query: "
-msgstr "XAPI query: "
-
-msgid "Download from Overpass API ..."
-msgstr "Baixar do Overpass API..."
-
-msgid "Download map data from Overpass API server."
-msgstr "Baixar mapa do servidor Overpass API"
-
-msgid "Overpass query: "
-msgstr "Consulta superior: "
-
-msgid "Select OSM mirror URL"
-msgstr "Selecionar URL espelho do OSM"
-
-msgid "Select OSM mirror URL to download from."
-msgstr "Selecionar URL espelho do OSM de onde baixar."
-
-msgid "Base URL"
-msgstr "URL base"
-
-msgid "Enforce meta data"
-msgstr "Aplicar metadados"
+"Não foi possível localizar nós via. Por favor, verifique a sua seleção"
 
 msgid "About Plugin"
 msgstr "Sobre o Plugin"
@@ -27996,6 +28743,9 @@ msgstr ""
 "Realiza uma comparação entre o conjunto de dados atual e os dados OSM "
 "existentes."
 
+msgid "Tools"
+msgstr "Ferramentas"
+
 msgid "Open tools menu for this data."
 msgstr "Abra o menu de ferramentas para esses dados."
 
@@ -28113,8 +28863,8 @@ msgid ""
 "Unable to detect Coordinate Reference System.\n"
 "Would you like to fallback to ESPG:4326 (WGS 84) ?"
 msgstr ""
-"Incapaz de detectar Referência do Sistema de Coordenadas.\n"
-"Gostaria de informar para ESPG:4326 (WGS 84)?"
+"Incapaz de detectar Sistema de Referência de Coordenadas.\n"
+"Gostaria de alternar para ESPG:4326 (WGS 84)?"
 
 msgid "Warning: CRS not found"
 msgstr "Aviso: CRS não encontrado"
@@ -28127,7 +28877,7 @@ msgstr ""
 "Não foi possível encontrar um repositório de dados para o arquivo {0}"
 
 msgid "Loading shapefile ({0} features)"
-msgstr "Carreegando shapefile ({0} características)"
+msgstr "Carregando shapefile ({0} atributos)"
 
 msgid "CSV files"
 msgstr "Arquivo CSV"
@@ -28226,7 +28976,7 @@ msgid ""
 "Running module update after elapsed update interval. Automatic update at "
 "startup is disabled."
 msgstr ""
-"Rodando atualização do módulo após intervalo de atualização decorrido. "
+"Executando atualização de módulo após intervalo de atualização decorrido. "
 "Atualização automática na inicialização está desativada."
 
 msgid "Could not load module {0}. Delete from preferences?"
@@ -29282,6 +30032,27 @@ msgstr "Transporte Público: Ativar waypoints"
 msgid "Public Transport: Edit waypoint name"
 msgstr "Editar padrões de rota para transporte público"
 
+msgid "Public transport routes"
+msgstr "Rotas de transporte público"
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr "Visualizar rotas de transporte público"
+
+msgid "Filters"
+msgstr "Filtros"
+
+msgid "Choose Filter"
+msgstr "Escolher Filtro"
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr "Caixa de ferramentas de relação"
 
@@ -29456,6 +30227,9 @@ msgstr "Changeset revertido"
 msgid "It is not allowed to revert changeset from {0}"
 msgstr "Não é permitido reverter de alterações de {0}"
 
+msgid "Downloading objects history"
+msgstr "Obtendo histórico dos objetos"
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr "Faltando alvo de mesclagem para {0} com id {1}"
 
@@ -29465,6 +30239,9 @@ msgstr "Histórico dos objetos"
 msgid "History reverter"
 msgstr "Reverter histórico"
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr "Preparando dados de histórico..."
 
@@ -29530,7 +30307,7 @@ msgid "Show a selection of the most useful signs"
 msgstr "Mostra uma seleção dos sinais mais úteis"
 
 msgid "Belgium"
-msgstr ""
+msgstr "Bélgica"
 
 msgid "Spain"
 msgstr "Espanha"
@@ -29652,6 +30429,9 @@ msgstr "Novo valor para {0}"
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr "Preferência ''{0}'' ausente. Não é possível inicializar SdsApi."
 
+msgid "Proxy Authentication Required"
+msgstr "Autenticação de Proxy Necessária"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -29766,7 +30546,7 @@ msgid "Save SDS file"
 msgstr "Salvar arquivo SDS"
 
 msgid "No object selected"
-msgstr ""
+msgstr "Nenhum objeto selecionado"
 
 msgid "SeaChart Editor"
 msgstr ""
@@ -29775,7 +30555,7 @@ msgid "Seamark Inspector"
 msgstr ""
 
 msgid "Select only one object"
-msgstr ""
+msgstr "Selecione apenas um objeto"
 
 msgid "Select a map object"
 msgstr ""
@@ -29855,6 +30635,39 @@ msgstr "Unir nós próximos"
 msgid "SeaMap Editor"
 msgstr "Editor SeaMap"
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr "Exportar OSM"
 
@@ -29864,6 +30677,9 @@ msgstr "Exportar dados de tráfego para SUMO network file."
 msgid "SUMO Export"
 msgstr "Exportar SUMO"
 
+msgid "Export"
+msgstr "Exportar"
+
 msgid "AutoSave LiveData"
 msgstr "AutoSave LiveData"
 
@@ -30118,9 +30934,6 @@ msgstr "Erro Tracer2"
 msgid "Parameter for server request"
 msgstr "Parâmetro para pedido do servidor."
 
-msgid "Tile size:"
-msgstr "Tamanho do quadro:"
-
 msgid "Resolution:"
 msgstr "Resolução:"
 
@@ -30618,7 +31431,7 @@ msgid "Save the turn restriction despite of errors and/or warnings"
 msgstr "Salva a restrição de sentido, apesar de erros e/ou avisos"
 
 msgid "No, resolve issues first"
-msgstr "Não resolver problemas primeiro"
+msgstr "Não, resolver problemas primeiro"
 
 msgid "Cancel saving and start resolving pending issues first"
 msgstr "Cancelar salvamento e começar a resolver pendências primeiro"
@@ -30732,10 +31545,10 @@ msgid "No Straight On"
 msgstr "Proibido seguir em frente"
 
 msgid "Only Right Turn"
-msgstr "Vira à Direita"
+msgstr "Vire à Direita"
 
 msgid "Only Left Turn"
-msgstr "Vire á Esquerda"
+msgstr "Vire à Esquerda"
 
 msgid "Only Straight On"
 msgstr "Siga em Frente"
@@ -31003,7 +31816,7 @@ msgid ""
 "The two ways participating in the turn restriction <strong>aren''t "
 "connected.</strong>"
 msgstr ""
-"As duas vias que participam da restrição de sentido<strong>não estão "
+"As duas vias que participam da restrição de sentido<strong> não estão "
 "conectadas. </strong>"
 
 msgid ""
@@ -31573,7 +32386,7 @@ msgid "Select last modified nodes"
 msgstr "Selecionar últimos nós modificados"
 
 msgid "Select last modified ways"
-msgstr "Selecionar últimas vias modificadas"
+msgstr "Selecionar últimos caminhos modificados"
 
 msgid "Select Way Nodes"
 msgstr "Selecionar nós da via"
@@ -31810,9 +32623,6 @@ msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 "Pesquisar após waypoint. Clique e mova a vista do mapa para o waypoint."
 
-msgid "Way Select"
-msgstr "Selecionar a via"
-
 msgid "Add names from Wikipedia"
 msgstr "Adicionar nomes da Wikipédia"
 
diff --git a/i18n/po/rm.po b/i18n/po/rm.po
index 90385b1..a9d96e2 100644
--- a/i18n/po/rm.po
+++ b/i18n/po/rm.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2009-06-21 19:14+0000\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: Raeto-Romance <rm at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n !=1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:54+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:57+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -97,19 +97,16 @@ msgstr ""
 msgid "Updating user interface"
 msgstr ""
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
 msgstr ""
 
 msgid "Warning"
 msgstr ""
 
-msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
+msgid "Ignoring malformed file URL: \"{0}\""
 msgstr ""
 
-msgid "Ignoring malformed URL: \"{0}\""
+msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 
 msgid ""
@@ -444,6 +441,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
 
@@ -1029,6 +1029,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr ""
 
@@ -1945,15 +1969,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr ""
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -1975,6 +1990,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2093,9 +2117,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2309,9 +2330,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr ""
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2525,6 +2552,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2567,6 +2598,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3017,6 +3051,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3134,10 +3186,44 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3327,6 +3413,12 @@ msgstr ""
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3354,13 +3446,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -3976,9 +4068,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -3988,12 +4077,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4174,13 +4275,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4378,6 +4479,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4591,43 +4693,54 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
 msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
 msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
 msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
 msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
-msgid "Menu: {0}"
+msgctxt "menu"
+msgid "Help"
 msgstr ""
 
-msgid "Save and load the current session (list of layers, etc.)"
+msgid "Menu: {0}"
 msgstr ""
 
 msgid "Edit toolbar"
@@ -4651,6 +4764,7 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
 msgstr ""
 
@@ -4773,58 +4887,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr ""
-
-msgid "Pos."
+msgid " ({0})"
 msgstr ""
 
-msgid "Role"
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5253,6 +5325,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr ""
+
 msgid "Primitive"
 msgstr ""
 
@@ -5493,6 +5568,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5639,6 +5717,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5742,7 +5855,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5870,6 +5983,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5879,17 +5997,48 @@ msgstr ""
 msgid "unknown"
 msgstr ""
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -5935,6 +6084,12 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr ""
 
@@ -6064,10 +6219,16 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
-msgid "List of notes"
+msgid "Mini map"
 msgstr ""
 
-msgid "Add comment"
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
+msgid "List of notes"
+msgstr ""
+
+msgid "Add comment"
 msgstr ""
 
 msgid "Comment"
@@ -6122,10 +6283,15 @@ msgstr ""
 msgid "Enter the ID of the object that should be downloaded"
 msgstr ""
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6154,6 +6320,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr ""
 
+msgid "Selection"
+msgstr ""
+
 msgid "Open a selection list window."
 msgstr ""
 
@@ -6244,6 +6413,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -6838,6 +7013,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6929,14 +7110,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7109,6 +7289,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7644,6 +7830,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8489,6 +8678,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr ""
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr ""
 
@@ -8542,6 +8831,9 @@ msgstr ""
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8562,7 +8854,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8645,80 +8937,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr ""
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-
-msgid "Auto Zoom"
-msgstr ""
-
-msgid "Auto load tiles"
-msgstr ""
-
-msgid "Show Errors"
-msgstr ""
-
-msgid "Load Tile"
-msgstr ""
-
-msgid "Show Tile Info"
-msgstr ""
-
-msgid "Load All Tiles"
-msgstr ""
-
-msgid "Load All Error Tiles"
-msgstr ""
-
-msgid "Increase zoom"
-msgstr ""
-
-msgid "Decrease zoom"
-msgstr ""
-
-msgid "Snap to tile size"
-msgstr ""
-
-msgid "Flush Tile Cache"
-msgstr ""
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
@@ -8728,56 +8946,30 @@ msgstr ""
 msgid "No validation errors"
 msgstr ""
 
-msgid "Blank Layer"
-msgstr ""
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "Download visible tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-
-msgid "Change resolution"
-msgstr ""
-
-msgid "Reload erroneous tiles"
-msgstr ""
-
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Automatic downloading"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Zoom to native resolution"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Supported projections are: {0}"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Save WMS file"
+msgid "Try Again"
 msgstr ""
 
-msgid "Correlate to GPX"
+msgid "No images could be matched!"
 msgstr ""
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
@@ -8864,24 +9056,9 @@ msgstr ""
 msgid "Offset:"
 msgstr ""
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
 msgid "Correlate"
 msgstr ""
 
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9075,9 +9252,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr ""
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9140,9 +9314,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9768,15 +9939,15 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr ""
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -10569,13 +10740,28 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
-msgid "imagery fade"
+msgid "1. Enter getCapabilities URL"
 msgstr ""
 
-msgid "Fade Color: "
+msgid "2. Enter name for this layer"
 msgstr ""
 
-msgid "Fade amount: "
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
+msgid "imagery fade"
+msgstr ""
+
+msgid "Fade Color: "
+msgstr ""
+
+msgid "Fade amount: "
 msgstr ""
 
 msgid "Soft"
@@ -10587,6 +10773,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10608,6 +10806,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10650,9 +10851,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr ""
 
@@ -10677,36 +10875,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11642,6 +11825,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] ""
@@ -11750,6 +11941,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12003,6 +12197,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12539,6 +12736,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12924,6 +13124,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13918,6 +14131,9 @@ msgstr ""
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr ""
+
 msgid "Blue:"
 msgstr ""
 
@@ -13957,7 +14173,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -13969,9 +14185,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14080,6 +14293,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14093,12 +14309,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14135,10 +14357,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14165,6 +14393,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14189,7 +14420,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14204,6 +14435,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14216,12 +14450,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14242,6 +14470,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14274,10 +14505,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14307,6 +14535,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14322,154 +14556,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14484,9 +14724,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14616,6 +14865,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14631,7 +14895,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -14957,6 +15221,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15041,11 +15310,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15099,7 +15363,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15114,9 +15378,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15197,6 +15458,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15235,6 +15504,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15310,9 +15582,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15718,6 +15987,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15742,10 +16019,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15762,6 +16035,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15778,11 +16055,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15798,6 +16087,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15810,6 +16103,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15837,6 +16134,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16228,6 +16537,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16304,6 +16616,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr ""
 
@@ -16841,6 +17156,12 @@ msgstr ""
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17030,6 +17351,11 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
 msgstr ""
 
@@ -17083,6 +17409,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17224,13 +17554,127 @@ msgstr ""
 msgid "public"
 msgstr ""
 
-msgid "Pier"
+msgid "Marine Fuel"
 msgstr ""
 
-msgid "Lock Gate"
+msgid "Agip"
 msgstr ""
 
-msgid "Turning Point"
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
+msgid "Pier"
+msgstr ""
+
+msgid "Lock Gate"
+msgstr ""
+
+msgid "Turning Point"
 msgstr ""
 
 msgid "Slipway"
@@ -17340,6 +17784,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -17463,78 +17910,6 @@ msgstr ""
 msgid "Fuel"
 msgstr ""
 
-msgid "Agip"
-msgstr ""
-
-msgid "Aral"
-msgstr ""
-
-msgid "Avia"
-msgstr ""
-
-msgid "BP"
-msgstr ""
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr ""
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
 msgid "With shop"
 msgstr ""
 
@@ -17544,51 +17919,12 @@ msgstr ""
 msgid "kiosk"
 msgstr ""
 
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -17807,9 +18143,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17828,6 +18161,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18030,6 +18366,12 @@ msgstr ""
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18120,6 +18462,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18334,6 +18679,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18821,7 +19169,7 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
@@ -18830,43 +19178,70 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
-msgid "Glass"
+msgid "Cardboard"
 msgstr ""
 
-msgid "Paper"
+msgid "Electrical Appliances"
 msgstr ""
 
-msgid "Scrap Metal"
+msgid "Glass"
 msgstr ""
 
-msgid "container"
+msgid "Glass Bottles"
 msgstr ""
 
-msgid "centre"
+msgid "Green Waste"
 msgstr ""
 
-msgid "Waste Basket/Trash Can"
+msgid "Paper"
 msgstr ""
 
-msgid "Waste Disposal/Dumpster"
+msgid "Plastic"
 msgstr ""
 
-msgid "Sanitary Dump Station"
+msgid "Plastic Bottles"
 msgstr ""
 
-msgid "Suction pumpout"
+msgid "Plastic Packaging"
 msgstr ""
 
-msgid "Gravity drain for hose"
+msgid "Scrap Metal"
 msgstr ""
 
-msgid "Casette or Elsan Disposal"
+msgid "Shoes"
 msgstr ""
 
-msgid "Operation times"
+msgid "Small Appliances"
 msgstr ""
 
-msgid "Backrest"
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
+msgstr ""
+
+msgid "Waste Basket/Trash Can"
+msgstr ""
+
+msgid "Waste Disposal/Dumpster"
+msgstr ""
+
+msgid "Sanitary Dump Station"
+msgstr ""
+
+msgid "Suction pumpout"
+msgstr ""
+
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
+msgstr ""
+
+msgid "Operation times"
+msgstr ""
+
+msgid "Backrest"
 msgstr ""
 
 msgid "Amount of Seats"
@@ -19046,6 +19421,9 @@ msgstr ""
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr ""
 
@@ -19221,12 +19599,18 @@ msgstr ""
 msgid "Basketball"
 msgstr ""
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr ""
 
@@ -19242,13 +19626,13 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
@@ -19272,9 +19656,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19293,9 +19674,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -19368,6 +19746,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20688,9 +21074,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -21703,10 +22086,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22133,6 +22516,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22157,6 +22543,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22217,6 +22615,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22307,9 +22708,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22679,6 +23089,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22733,9 +23146,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23479,47 +23889,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23528,10 +23947,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24134,6 +24565,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr ""
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25231,374 +25665,680 @@ msgid ""
 "highlight tracks"
 msgstr ""
 
-msgid "Delete this"
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
 msgstr ""
 
-msgid "Delete this&older"
+msgid "Connecting"
 msgstr ""
 
-msgid "km/h"
+msgid "Connected"
 msgstr ""
 
-msgid "Track name: "
+msgid "no name"
 msgstr ""
 
-msgid "Update IRS adjustment layer"
+msgid "Live GPS"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid "Show GPS data."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Speed"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Course"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
+msgid "Explore"
 msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25619,6 +26359,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -25677,47 +26420,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -25950,6 +26652,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr ""
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27167,6 +27872,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27338,6 +28064,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27347,6 +28076,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27527,6 +28259,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27705,6 +28440,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27714,6 +28482,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -27950,9 +28721,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29435,9 +30203,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/ro.po b/i18n/po/ro.po
index d97a9a9..4507545 100644
--- a/i18n/po/ro.po
+++ b/i18n/po/ro.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: JOSM\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2015-02-24 11:34+0000\n"
 "Last-Translator: Ciprian <c1pr1an_43v3r at yahoo.com>\n"
 "Language-Team: Romanian <gnomero-list at lists.sourceforge.net>\n"
@@ -16,8 +16,8 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=(n == 1 ? 0: (((n % 100 > 19) || ((n % 100 "
 "== 0) && (n != 0))) ? 2: 1));\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:54+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:58+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "X-Poedit-Country: ROMANIA\n"
 "Language: ro\n"
 "X-Poedit-Language: Romanian\n"
@@ -103,21 +103,18 @@ msgstr "Încărcarea preferințelor pentru fundal"
 msgid "Updating user interface"
 msgstr "Actualizare interfață utilizator"
 
-msgid "{0} completed in {1}"
-msgstr "{0} completat în {1}"
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "Se ingoră fişierul URL prost format: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "Ignoră URL greșit: \"{0}\""
 
 msgid "Warning"
 msgstr "Avertisment"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "Se ingoră fişierul URL prost format: \"{0}\""
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr "Parametrul \"downloadgps\" nu acceptă nume de fișiere sau URL-uri"
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "Ignoră URL greșit: \"{0}\""
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -476,6 +473,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
 "Distributi nodurile selectate pentru distante egale de-a lungul unei linii."
@@ -1083,6 +1083,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr ""
 
@@ -1999,15 +2023,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr ""
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -2029,6 +2044,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2147,9 +2171,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2363,9 +2384,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr ""
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2579,6 +2606,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2621,6 +2652,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3073,6 +3107,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3190,10 +3242,44 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3385,6 +3471,12 @@ msgstr ""
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3412,13 +3504,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -4034,9 +4126,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -4046,12 +4135,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4232,13 +4333,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4436,6 +4537,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4649,43 +4751,54 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
 msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
-msgstr "Vizualizare"
+msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
-msgstr "Unelte"
+msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
-msgstr "Selecţie"
+msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
 msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
-msgid "Menu: {0}"
+msgctxt "menu"
+msgid "Help"
 msgstr ""
 
-msgid "Save and load the current session (list of layers, etc.)"
+msgid "Menu: {0}"
 msgstr ""
 
 msgid "Edit toolbar"
@@ -4709,6 +4822,7 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
 msgstr ""
 
@@ -4831,58 +4945,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr ""
-
-msgid "Pos."
+msgid " ({0})"
 msgstr ""
 
-msgid "Role"
-msgstr ""
+msgid "{0} completed in {1}"
+msgstr "{0} completat în {1}"
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5311,6 +5383,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr ""
+
 msgid "Primitive"
 msgstr ""
 
@@ -5551,6 +5626,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5699,6 +5777,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5802,7 +5915,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5930,6 +6043,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5939,48 +6057,79 @@ msgstr ""
 msgid "unknown"
 msgstr "necunoscut"
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
 msgstr ""
 
-msgid "Projected coordinates:"
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
 msgstr ""
 
 msgid ""
-"Enter easting and northing (x and y) separated by space, comma or semicolon."
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
 msgstr ""
 
-msgid "Lat/Lon"
+msgid "Coordinate value can be in one of three formats:"
 msgstr ""
 
-msgid "East/North"
+msgid "<i>degrees</i><tt>°</tt>"
 msgstr ""
 
-msgid "Please enter a GPS coordinates"
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
 msgstr ""
 
-msgid "Please enter a Easting and Northing"
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
 msgstr ""
 
-msgid "Toggle visibility of layer: {0}"
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
 msgstr ""
 
-msgid "Open a list of all loaded layers."
-msgstr "Deschide o listă cu toate straturile încărcate."
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
 
-msgid "Delete the selected layers."
+msgid "Some examples:"
 msgstr ""
 
-msgid "Show/hide"
+msgid "Projected coordinates:"
+msgstr ""
+
+msgid ""
+"Enter easting and northing (x and y) separated by space, comma or semicolon."
+msgstr ""
+
+msgid "Lat/Lon"
+msgstr ""
+
+msgid "East/North"
+msgstr ""
+
+msgid "Please enter a GPS coordinates"
+msgstr ""
+
+msgid "Please enter a Easting and Northing"
+msgstr ""
+
+msgid "Toggle visibility of layer: {0}"
+msgstr ""
+
+msgid "Open a list of all loaded layers."
+msgstr "Deschide o listă cu toate straturile încărcate."
+
+msgid "Delete the selected layers."
+msgstr ""
+
+msgid "Show/hide"
 msgstr ""
 
 msgid "Toggle visible state of the selected layer."
@@ -5995,6 +6144,12 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr ""
 
@@ -6124,6 +6279,12 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
+msgid "Mini map"
+msgstr ""
+
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
 msgid "List of notes"
 msgstr ""
 
@@ -6182,10 +6343,15 @@ msgstr "ID-ul obiectului:"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "Introduceți ID-ul obiectului care ar trebui să fie descărcat"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6214,6 +6380,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr ""
 
+msgid "Selection"
+msgstr "Selecţie"
+
 msgid "Open a selection list window."
 msgstr "Deschide o fereastra cu o listă de selecţie."
 
@@ -6304,6 +6473,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -6898,6 +7073,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6989,14 +7170,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7169,6 +7349,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7704,6 +7890,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8549,6 +8738,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr ""
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr "Personalizează culoarea"
 
@@ -8602,6 +8891,9 @@ msgstr "Salvează fișier GPX"
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8622,7 +8914,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8707,265 +8999,150 @@ msgstr ""
 msgid "Save OSM file"
 msgstr "Salvează fișier OSM"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
+msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
+msgid "Validation errors"
 msgstr ""
 
-msgid "Auto Zoom"
+msgid "No validation errors"
 msgstr ""
 
-msgid "Auto load tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
-msgid "Show Errors"
+msgid ""
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Load Tile"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Show Tile Info"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Load All Tiles"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Load All Error Tiles"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Increase zoom"
+msgid "Try Again"
 msgstr ""
 
-msgid "Decrease zoom"
+msgid "No images could be matched!"
 msgstr ""
 
-msgid "Snap to tile size"
+msgid "GPX Files (*.gpx *.gpx.gz)"
 msgstr ""
 
-msgid "Flush Tile Cache"
+msgid "File {0} is loaded yet under the name \"{1}\""
 msgstr ""
 
-msgid "zoom in to load any tiles"
-msgstr ""
+msgid "Error while parsing {0}"
+msgstr "Eroare la prelucrarea {0}"
 
-msgid "zoom in to load more tiles"
-msgstr ""
+msgid "Could not read \"{0}\""
+msgstr "Nu am putut citi \"{0}\""
 
-msgid "increase zoom level to see more detail"
+msgid ""
+"<html>Take a photo of your GPS receiver while it displays the "
+"time.<br>Display that photo here.<br>And then, simply capture the time you "
+"read on the photo and select a timezone<hr></html>"
 msgstr ""
 
-msgid "No tiles at this zoom level"
+msgid "Photo time (from exif):"
 msgstr ""
 
-msgid "Current zoom: {0}"
+msgid "Gps time (read from the above photo): "
 msgstr ""
 
-msgid "Display zoom: {0}"
+msgid "I am in the timezone of: "
 msgstr ""
 
-msgid "Pixel scale: {0}"
+msgid "No date"
 msgstr ""
 
-msgid "Best zoom: {0}"
+msgid "Open another photo"
 msgstr ""
 
-msgid "Cache stats: {0}"
+msgid "Synchronize time from a photo of the GPS receiver"
 msgstr ""
 
-msgid "TMS layer ({0}), downloading in zoom {1}"
+msgid ""
+"Error while parsing the date.\n"
+"Please use the requested format"
 msgstr ""
 
-msgid "EPSG:4326 and Mercator projection are supported"
+msgid "Invalid date"
 msgstr ""
 
-msgid "Validation errors"
+msgid "<No GPX track loaded yet>"
 msgstr ""
 
-msgid "No validation errors"
+msgid "GPX track: "
 msgstr ""
 
-msgid "Blank Layer"
+msgid "Open another GPX trace"
 msgstr ""
 
-msgid "Downloaded {0}/{1} tiles"
+msgid ""
+"<html>Use photo of an accurate clock,<br>e.g. GPS receiver display</html>"
 msgstr ""
 
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
+msgid "Auto-Guess"
 msgstr ""
 
-msgid "WMS layer ({0}), downloading in zoom {1}"
+msgid "Matches first photo with first gpx point"
 msgstr ""
 
-msgid "Download visible tiles"
+msgid "Manual adjust"
 msgstr ""
 
-msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
+msgid "Override position for: "
 msgstr ""
 
-msgid "Change resolution"
+msgid "Images with geo location in exif data ({0}/{1})"
 msgstr ""
 
-msgid "Reload erroneous tiles"
+msgid "Images that are already tagged ({0}/{1})"
 msgstr ""
 
-msgid "Alpha channel"
+msgid "Show Thumbnail images on the map"
 msgstr ""
 
-msgid "Automatically change resolution"
+msgid "Timezone: "
 msgstr ""
 
-msgid "Set WMS Bookmark"
+msgid "Offset:"
 msgstr ""
 
-msgid "Automatic downloading"
+msgid "Correlate"
 msgstr ""
 
-msgid "Zoom to native resolution"
+msgid "No gpx selected"
 msgstr ""
 
-msgid "Supported projections are: {0}"
-msgstr ""
+msgid "<html>Matched <b>{0}</b> of <b>{1}</b> photo to GPX track.</html>"
+msgid_plural ""
+"<html>Matched <b>{0}</b> of <b>{1}</b> photos to GPX track.</html>"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Timezone: {0}"
 msgstr ""
 
-msgid "Save WMS file"
+msgid "Minutes: {0}"
 msgstr ""
 
-msgid "Correlate to GPX"
+msgid "Seconds: {0}"
 msgstr ""
 
-msgid "GPX Files (*.gpx *.gpx.gz)"
-msgstr ""
-
-msgid "File {0} is loaded yet under the name \"{1}\""
-msgstr ""
-
-msgid "Error while parsing {0}"
-msgstr "Eroare la prelucrarea {0}"
-
-msgid "Could not read \"{0}\""
-msgstr "Nu am putut citi \"{0}\""
-
-msgid ""
-"<html>Take a photo of your GPS receiver while it displays the "
-"time.<br>Display that photo here.<br>And then, simply capture the time you "
-"read on the photo and select a timezone<hr></html>"
-msgstr ""
-
-msgid "Photo time (from exif):"
-msgstr ""
-
-msgid "Gps time (read from the above photo): "
-msgstr ""
-
-msgid "I am in the timezone of: "
-msgstr ""
-
-msgid "No date"
-msgstr ""
-
-msgid "Open another photo"
-msgstr ""
-
-msgid "Synchronize time from a photo of the GPS receiver"
-msgstr ""
-
-msgid ""
-"Error while parsing the date.\n"
-"Please use the requested format"
-msgstr ""
-
-msgid "Invalid date"
-msgstr ""
-
-msgid "<No GPX track loaded yet>"
-msgstr ""
-
-msgid "GPX track: "
-msgstr ""
-
-msgid "Open another GPX trace"
-msgstr ""
-
-msgid ""
-"<html>Use photo of an accurate clock,<br>e.g. GPS receiver display</html>"
-msgstr ""
-
-msgid "Auto-Guess"
-msgstr ""
-
-msgid "Matches first photo with first gpx point"
-msgstr ""
-
-msgid "Manual adjust"
-msgstr ""
-
-msgid "Override position for: "
-msgstr ""
-
-msgid "Images with geo location in exif data ({0}/{1})"
-msgstr ""
-
-msgid "Images that are already tagged ({0}/{1})"
-msgstr ""
-
-msgid "Show Thumbnail images on the map"
-msgstr ""
-
-msgid "Timezone: "
-msgstr ""
-
-msgid "Offset:"
-msgstr ""
-
-msgid "Correlate images with GPX track"
-msgstr ""
-
-msgid "Correlate"
-msgstr ""
-
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
-msgid "No gpx selected"
-msgstr ""
-
-msgid "<html>Matched <b>{0}</b> of <b>{1}</b> photo to GPX track.</html>"
-msgid_plural ""
-"<html>Matched <b>{0}</b> of <b>{1}</b> photos to GPX track.</html>"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Timezone: {0}"
-msgstr ""
-
-msgid "Minutes: {0}"
-msgstr ""
-
-msgid "Seconds: {0}"
-msgstr ""
-
-msgid "(Time difference of {0} day)"
-msgid_plural "Time difference of {0} days"
-msgstr[0] ""
-msgstr[1] ""
+msgid "(Time difference of {0} day)"
+msgid_plural "Time difference of {0} days"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid ""
 "An error occurred while trying to match the photos to the GPX track. You can "
@@ -9137,9 +9314,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr "Imagine JPEG (*.jpg)"
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9202,9 +9376,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9830,15 +10001,15 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr "Trebui să reponiţi JOSM pentru ca anumite opţiuni să aibă efect."
 
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr ""
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -10635,6 +10806,21 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
+msgid "1. Enter getCapabilities URL"
+msgstr ""
+
+msgid "2. Enter name for this layer"
+msgstr ""
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr ""
 
@@ -10653,6 +10839,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10674,6 +10872,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10716,9 +10917,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr "Strat"
 
@@ -10743,36 +10941,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11708,6 +11891,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] "Schimb {0} obiect"
@@ -11817,6 +12008,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12070,6 +12264,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12606,6 +12803,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12991,6 +13191,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13985,6 +14198,9 @@ msgstr ""
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr "Vizualizare"
+
 msgid "Blue:"
 msgstr ""
 
@@ -14024,7 +14240,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -14036,9 +14252,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14147,6 +14360,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14160,12 +14376,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14202,10 +14424,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
+msgstr ""
+
+msgid "Geodatastyrelsen DTK Kort25"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14232,6 +14460,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14256,7 +14487,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14271,6 +14502,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14283,12 +14517,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14309,6 +14537,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14341,10 +14572,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14374,6 +14602,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14389,154 +14623,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14551,9 +14791,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14683,6 +14932,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14698,7 +14962,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -15024,6 +15288,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15108,11 +15377,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15166,7 +15430,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15181,9 +15445,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15264,6 +15525,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15302,6 +15571,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15377,9 +15649,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15785,6 +16054,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15809,10 +16086,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15829,6 +16102,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15845,11 +16122,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15865,6 +16154,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15877,6 +16170,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15904,6 +16201,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16295,6 +16604,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16371,6 +16683,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr ""
 
@@ -16908,6 +17223,12 @@ msgstr ""
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17097,6 +17418,11 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
 msgstr ""
 
@@ -17150,6 +17476,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17291,6 +17621,120 @@ msgstr ""
 msgid "public"
 msgstr ""
 
+msgid "Marine Fuel"
+msgstr ""
+
+msgid "Agip"
+msgstr ""
+
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
 msgid "Pier"
 msgstr ""
 
@@ -17407,6 +17851,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -17530,142 +17977,31 @@ msgstr ""
 msgid "Fuel"
 msgstr ""
 
-msgid "Agip"
+msgid "With shop"
 msgstr ""
 
-msgid "Aral"
+msgid "convenience"
 msgstr ""
 
-msgid "Avia"
+msgid "kiosk"
 msgstr ""
 
-msgid "BP"
+msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
-msgid "Chevron"
+msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Citgo"
+msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
-msgid "Eni"
+msgid "1/50 mix (mofa/moped)"
 msgstr ""
 
-msgid "Esso"
+msgid "Fuel cards:"
 msgstr ""
 
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
-msgid "With shop"
-msgstr ""
-
-msgid "convenience"
-msgstr ""
-
-msgid "kiosk"
-msgstr ""
-
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
-msgid "Diesel (Gas To Liquid - ultimate diesel)"
-msgstr ""
-
-msgid "Diesel for Heavy Good Vehicles"
-msgstr ""
-
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
-msgid "1/25 mix (mofa/moped)"
-msgstr ""
-
-msgid "1/50 mix (mofa/moped)"
-msgstr ""
-
-msgid "Fuel cards:"
-msgstr ""
-
-msgid "DKV"
+msgid "DKV"
 msgstr ""
 
 msgid "Routex"
@@ -17874,9 +18210,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17895,6 +18228,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18097,6 +18433,12 @@ msgstr ""
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18187,6 +18529,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18401,6 +18746,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18888,7 +19236,7 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
@@ -18897,19 +19245,46 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
+msgid "Cardboard"
+msgstr ""
+
+msgid "Electrical Appliances"
+msgstr ""
+
 msgid "Glass"
 msgstr ""
 
+msgid "Glass Bottles"
+msgstr ""
+
+msgid "Green Waste"
+msgstr ""
+
 msgid "Paper"
 msgstr ""
 
+msgid "Plastic"
+msgstr ""
+
+msgid "Plastic Bottles"
+msgstr ""
+
+msgid "Plastic Packaging"
+msgstr ""
+
 msgid "Scrap Metal"
 msgstr ""
 
-msgid "container"
+msgid "Shoes"
+msgstr ""
+
+msgid "Small Appliances"
+msgstr ""
+
+msgid "Waste"
 msgstr ""
 
-msgid "centre"
+msgid "Recycling Centre"
 msgstr ""
 
 msgid "Waste Basket/Trash Can"
@@ -19113,6 +19488,9 @@ msgstr ""
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr ""
 
@@ -19288,12 +19666,18 @@ msgstr ""
 msgid "Basketball"
 msgstr ""
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr ""
 
@@ -19309,13 +19693,13 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
@@ -19339,9 +19723,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19360,9 +19741,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -19435,6 +19813,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20755,9 +21141,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -21770,10 +22153,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22200,6 +22583,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22224,6 +22610,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22284,6 +22682,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22374,9 +22775,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22746,6 +23156,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22800,9 +23213,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23546,47 +23956,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23595,10 +24014,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debug"
+msgstr ""
+
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24201,6 +24632,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr ""
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25298,374 +25732,680 @@ msgid ""
 "highlight tracks"
 msgstr ""
 
-msgid "Delete this"
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
 msgstr ""
 
-msgid "Delete this&older"
+msgid "Connecting"
 msgstr ""
 
-msgid "km/h"
+msgid "Connected"
 msgstr ""
 
-msgid "Track name: "
+msgid "no name"
 msgstr ""
 
-msgid "Update IRS adjustment layer"
+msgid "Live GPS"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid "Show GPS data."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Speed"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Course"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
+msgid "Explore"
 msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25686,6 +26426,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -25744,47 +26487,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -26017,6 +26719,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr "Unelte"
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27234,6 +27939,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27405,6 +28131,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27414,6 +28143,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27594,6 +28326,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27772,6 +28507,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27781,6 +28549,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -28017,9 +28788,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29502,9 +30270,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/ru.po b/i18n/po/ru.po
index 946c897..316aa80 100644
--- a/i18n/po/ru.po
+++ b/i18n/po/ru.po
@@ -7,17 +7,17 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
-"PO-Revision-Date: 2015-05-09 04:59+0000\n"
-"Last-Translator: Aleksey Kabanov <Unknown>\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
+"PO-Revision-Date: 2015-10-08 06:38+0000\n"
+"Last-Translator: Nkolay Parukhin <parukhin at gmail.com>\n"
 "Language-Team: Koptev Oleg <koptev.oleg at gmail.com>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
 "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:54+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:58+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: ru_RU\n"
 
 msgid "Note"
@@ -57,7 +57,7 @@ msgid "{0}: invalid option -- {1}"
 msgstr "{0}: неверная опция  -- {1}"
 
 msgid "{0}: option requires an argument -- {1}"
-msgstr "{0}: опция требует аргументов -- {1}"
+msgstr "{0}: опция требует аргумент -- {1}"
 
 msgid "Invalid value {0} for parameter ''has_arg''"
 msgstr "Неверное значение {0} параметра ''has_arg''"
@@ -110,22 +110,19 @@ msgstr "Загрузка настроек подложек"
 msgid "Updating user interface"
 msgstr "Обновление интерфейса пользователя"
 
-msgid "{0} completed in {1}"
-msgstr "{0} завершено за {1}"
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "Некорректный файловый URL: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "Некорректный URL: \"{0}\""
 
 msgid "Warning"
 msgstr "Внимание"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "Некорректный файловый URL: \"{0}\""
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 "Параметр «downloadgps» не может использовать имена файлов или файловые URL"
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "Некорректный URL: \"{0}\""
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -482,6 +479,9 @@ msgstr "Показать/скрыть панели"
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Скрыть диалоговые панели и панели инструментов"
 
+msgid "Distribute Nodes"
+msgstr "Распределить точки равномерно"
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr "Расположить выделенные точки на равных расстояниях вдоль линии."
 
@@ -820,7 +820,7 @@ msgid "Download Rectified Images From Various Services"
 msgstr "Скачать выпрямленные изображения с различных служб"
 
 msgid "Imagery: {0}"
-msgstr "Снимок: {0}"
+msgstr ""
 
 msgid "Custom WMS Link"
 msgstr "Пользовательская ссылка WMS"
@@ -1146,6 +1146,32 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr "Пожалуйста, выделите линии с углами, близкими к 90 или 180 градусов."
 
+msgid "Download from Overpass API ..."
+msgstr "Загрузить с Overpass API ..."
+
+msgid "Download map data from Overpass API server."
+msgstr "Загрузить картографические данные с сервера Overpass API."
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr "Составляет запрос Overpass с помощью мастера запросов Overpass Turbo"
+
+msgid "Build query"
+msgstr "Составить запрос"
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+"<html>Помощнику Overpass не удалось выполнить синтаксический разбор "
+"следующего запроса:"
+
+msgid "Parse error"
+msgstr "Ошибка разбора"
+
+msgid "Overpass query: "
+msgstr "Запрос к Overpass: "
+
+msgid "Overpass server: "
+msgstr "Сервер Overpass: "
+
 msgid "Paste"
 msgstr "Вставить"
 
@@ -2148,15 +2174,6 @@ msgstr "Включена привязка к углам."
 msgid "Finish drawing."
 msgstr "Закончено вычерчивание."
 
-msgid "FIX"
-msgstr "Фикс."
-
-msgid "draw angle snap"
-msgstr "Привязка к углам"
-
-msgid "draw angle snap highlight"
-msgstr "Привязка к углам: подсветка"
-
 msgid "Toggle snapping by {0}"
 msgstr "Переключение привязки {0}"
 
@@ -2178,6 +2195,15 @@ msgstr "0,45,90,…"
 msgid "0,30,45,60,90,..."
 msgstr "0,30,45,60,90,…"
 
+msgid "FIX"
+msgstr "Фикс."
+
+msgid "draw angle snap"
+msgstr "Привязка к углам"
+
+msgid "draw angle snap highlight"
+msgstr "Привязка к углам: подсветка"
+
 msgid "Angle snapping"
 msgstr "Привязка к углам"
 
@@ -2313,9 +2339,6 @@ msgstr ""
 "Копирование параллельно:\n"
 "Выбранные линии должны иметь простую форму без ответвлений"
 
-msgid "Make parallel way error"
-msgstr "Ошибка создания параллельной линии"
-
 msgid "Drag play head"
 msgstr "Перетащить головку звукоснимателя"
 
@@ -2558,9 +2581,15 @@ msgstr "все объекты"
 msgid "Also include incomplete and deleted objects in search."
 msgstr "Включить в поиск незаконченные и удалённые объекты"
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr "регулярное выражение"
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr "добавить кнопку на панель инструментов"
 
@@ -2787,6 +2816,10 @@ msgid "RX"
 msgstr "RX"
 
 msgctxt "search"
+msgid "CSS"
+msgstr "CSS"
+
+msgctxt "search"
 msgid "A"
 msgstr "А-я"
 
@@ -2838,6 +2871,9 @@ msgstr "Ожидалась последовательность чисел"
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr "Неожиданный маркер. Ожидалось {0}, найдено {1}"
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr "Неожиданная лексема: {0}"
 
@@ -3357,6 +3393,24 @@ msgstr "Не удалось создать отсутствующий катал
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr "<html>Невозможно создать каталог для временных данных: {0}</html>"
 
+msgid "Unable to delete temporary file {0}"
+msgstr "Не удалось удалить временный файл {0}"
+
+msgid "Unable to set file non-readable {0}"
+msgstr "Не удалось сделать файл недоступным для чтения {0}"
+
+msgid "Unable to set file non-writable {0}"
+msgstr "Не удалось сделать файл недоступным для записи {0}"
+
+msgid "Unable to set file non-executable {0}"
+msgstr "Не удалось сделать файл неисполняемым {0}"
+
+msgid "Unable to set file readable {0}"
+msgstr "Не удалось сделать файл доступным для чтения {0}"
+
+msgid "Unable to set file writable {0}"
+msgstr "Не удалось сделать файл доступным для записи {0}"
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3428,6 +3482,8 @@ msgid ""
 "Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
 "startup)."
 msgstr ""
+"Пытаться использовать сеть IPv6, предпочитая IPv6 вместо IPv4 (работает "
+"только в начале запуска)."
 
 msgid " (at line {0}, column {1})"
 msgstr " (в строке {0}, столбец {1})"
@@ -3491,13 +3547,51 @@ msgctxt "compass"
 msgid "E"
 msgstr "В"
 
-msgid "Not in cache"
-msgstr "Не в кэше"
-
 msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr ""
 "Проекция ''{0}'' не найдена, закладка ''{1}'' непригодна к использованию"
 
+msgid "HTTP error {0} when loading tiles"
+msgstr "Ошибка HTTP {0} при скачивании квадратов"
+
+msgid "Error downloading tiles: {0}"
+msgstr "Ошибка загрузки квадратов: {0}"
+
+msgid "Could not load image from tile server"
+msgstr "Не удалось загрузить изображение с сервера"
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+"{0} — неправильный аргумент WMS. Проверьте URL этого сервера:\n"
+"{1}"
+
+msgid "Select WMTS layer"
+msgstr "Выберите WMTS слой"
+
+msgid "Layer name"
+msgstr "Название слоя"
+
+msgid "Projection"
+msgstr "Проекция"
+
+msgid "Matrix set identifier"
+msgstr "Идентификатор набора матриц"
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr "Слой не выбран"
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
+msgstr ""
+"Поддерживаются только квадратные тайлы. Получен ответ сервера {0}x{1} для "
+"идентификатора TileMatrix {2}"
+
 msgid "ID > 0 expected. Got {0}."
 msgstr "обнаружено id > 0. Получено {0}"
 
@@ -3705,6 +3799,14 @@ msgstr "текст"
 msgid "areatext"
 msgstr "для_текста"
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr "Проекции UTM (''+proj=utm'') требуется параметр ''+zone=...''."
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+"Ожидалось целочисленное значение в диапазоне 1-60 для параметра "
+"''+zone=...''."
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr "Параметр должен начинаться с символа «+» (найден: «{0}»)"
 
@@ -3732,15 +3834,15 @@ msgstr "Эллипсоид ''{0}'' не поддерживается."
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr "Комбинация параметров эллипсоида не поддерживается"
 
+msgid "Unknown datum identifier: ''{0}''"
+msgstr "Неизвестный идентификатор датума: ''{0}''"
+
 msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr "Требуется эллипсоид (+ellps=* или +a=*, +b=*)"
 
 msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr "Файл сдвига сетки «{0}» для опции +nadgrids не поддерживается."
 
-msgid "Unknown datum identifier: ''{0}''"
-msgstr "Неизвестный идентификатор датума: ''{0}''"
-
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
 msgstr "Требуется датум (+datum=*, +towgs84=* or +nadgrids=*)"
 
@@ -4392,9 +4494,6 @@ msgstr "Ключ тега длиннее, чем разрешено"
 msgid "Tags with empty values"
 msgstr "Теги с пустыми значениями"
 
-msgid "Invalid property key"
-msgstr "Неверный параметр ключа"
-
 msgid "Invalid white space in property key"
 msgstr "Неправильный пробел в написании ключа"
 
@@ -4404,12 +4503,24 @@ msgstr "Значение начинается или заканчивается
 msgid "Property values contain HTML entity"
 msgstr "Значения содержат HTML разметку"
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr "Ключ ''{0}'' похож на ''{1}''."
+
+msgid "Misspelled property key"
+msgstr "Опечатка в ключе свойства"
+
 msgid "Key ''{0}'' not in presets."
 msgstr "Ключа ''{0}'' нет в заготовках."
 
 msgid "Presets do not contain property key"
 msgstr "Заготовки не содержат подходящего ключа"
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr "Значение ''{0}'' ключа ''{1}'' выглядит похожим на ''{2}''."
+
+msgid "Misspelled property value"
+msgstr "Опечатка в значении"
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr "Значения ''{0}'' для ключа ''{1}'' нет в заготовках"
 
@@ -4592,6 +4703,9 @@ msgstr "Точка линии расположена около другой л
 msgid "Connected way end node near other way"
 msgstr "Конечная точка присоединённой линии расположена около другой линии"
 
+msgid "Unconnected nodes without physical tags"
+msgstr "Несоединённые  точки без тегов"
+
 msgid "Untagged and unconnected nodes"
 msgstr "Несоединённые точки без тегов"
 
@@ -4599,9 +4713,6 @@ msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 "Этот тест ищет точки, не имеющие тегов, и не являющиеся частью линий."
 
-msgid "Unconnected nodes without physical tags"
-msgstr "Несоединённые  точки без тегов"
-
 msgid "No tags"
 msgstr "Без тегов"
 
@@ -4802,8 +4913,9 @@ msgstr "Нажмите, чтобы закрыть диалог"
 msgid "Imagery offset"
 msgstr "Смещение снимка"
 
+msgctxt "menu"
 msgid "Imagery"
-msgstr "Снимок"
+msgstr ""
 
 msgctxt "layer"
 msgid "Offset"
@@ -4985,14 +5097,20 @@ msgstr[2] ""
 msgid ""
 "Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
 msgstr ""
+"Обнаружена  подходящая для использования сеть IPv6, предпочесть IPv6 вместо "
+"IPv4 после следующего перезапуска."
 
 msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
 msgstr ""
+"Обнаружена  подходящая для использования сеть IPv6, предпочесть IPv6 вместо "
+"IPv4."
 
 msgid ""
 "Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
 "restart."
 msgstr ""
+"Не обнаружено  подходящей для использования сети IPv6, предпочесть IPv4 "
+"вместо IPv6 после следующего перезапуска."
 
 msgid "Unsaved osm data"
 msgstr "Несохранённые данные osm"
@@ -5043,45 +5161,56 @@ msgstr ""
 "удалось</b> из-за следующих ошибок сети:<br>{1}Возможно, причина в "
 "отсутствии конфигурации прокси.<br>Хотите изменить настройки прокси сейчас?"
 
+msgctxt "menu"
 msgid "File"
 msgstr "Файл"
 
-msgid "Session"
-msgstr "Сеанс"
+msgctxt "menu"
+msgid "Edit"
+msgstr "Правка"
 
+msgctxt "menu"
 msgid "View"
 msgstr "Вид"
 
+msgctxt "menu"
 msgid "Tools"
 msgstr "Инструменты"
 
+msgctxt "menu"
 msgid "More tools"
 msgstr "Ещё инструменты"
 
+msgctxt "menu"
 msgid "Data"
 msgstr "Данные"
 
+msgctxt "menu"
 msgid "Selection"
 msgstr "Выделение"
 
+msgctxt "menu"
 msgid "Presets"
 msgstr "Заготовки"
 
 msgid "More..."
 msgstr "Ещё..."
 
+msgctxt "menu"
 msgid "GPS"
 msgstr "GPS"
 
+msgctxt "menu"
 msgid "Windows"
-msgstr "Панели"
+msgstr "Окна"
+
+msgctxt "menu"
+msgid "Help"
+msgstr "Справка"
 
 msgid "Menu: {0}"
 msgstr "Меню: {0}"
 
-msgid "Save and load the current session (list of layers, etc.)"
-msgstr "Сохранение и загрузка текущего сеанса (список слоёв и т.п.)"
-
 msgid "Edit toolbar"
 msgstr "Панель инструментов редактирования"
 
@@ -5105,8 +5234,9 @@ msgstr "Щёлкните, чтобы открыть вкладку снимко
 msgid "Search menu items"
 msgstr "Поиск пунктов меню"
 
+msgctxt "menu"
 msgid "Audio"
-msgstr "Звук"
+msgstr "Аудио"
 
 msgid "Do not hide toolbar"
 msgstr "Не скрывать панель инструментов"
@@ -5229,66 +5359,17 @@ msgstr "В фоне"
 msgid "Click to run job in background"
 msgstr "Нажмите, для запуска задачи в фоновом режиме"
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr "Снимок, скорее всего, сдвинут. Выровняйте его по GPS-трекам!"
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr "http://wiki.openstreetmap.org/wiki/RU:Using_Imagery"
-
-msgid "Details..."
-msgstr "Подробности..."
-
-msgid "Hide this message and never show it again"
-msgstr "Скрыть это сообщение и больше не показывать"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-"<html>Пожалуйста, подтвердите удаление <strong>1 объекта</strong> из "
-"<strong>1 отношения</strong>.</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>Пожалуйста, подтвердите удаление <strong>1 объекта</strong> из "
-"<strong>{0} отношений</strong>.</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>Пожалуйста, подтвердите удаление <strong>{0} объектов</strong> из "
-"<strong>{1} отношений</strong>.</html>"
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] "Удаление {0} объекта"
-msgstr[1] "Удаление {0} объектов"
-msgstr[2] "Удаление {0} объектов"
-
-msgid "Delete objects"
-msgstr "Удалить объекты"
-
-msgid "To delete"
-msgstr "Удалить"
-
-msgid "From Relation"
-msgstr "Из отношения"
-
-msgid "Pos."
-msgstr "Поз."
+msgid " ({0})"
+msgstr " ({0})"
 
-msgid "Role"
-msgstr "Роль"
+msgid "{0} completed in {1}"
+msgstr "{0} завершено за {1}"
 
-msgid "Click to close the dialog and remove the object from the relations"
-msgstr "Щёлкните, чтобы закрыть диалог и удалить объект из отношений"
+msgid "Enlarge"
+msgstr "Расширить"
 
-msgid "Click to close the dialog and to abort deleting the objects"
-msgstr "Щёлкните, чтобы закрыть диалог и отменить удаление объектов"
+msgid "Shrink"
+msgstr "Сжать"
 
 msgid ""
 "<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
@@ -5756,6 +5837,9 @@ msgstr "Оставить их состояние \"Удалён\""
 msgid "Undecide conflict between deleted state"
 msgstr "Не улаживать конфликт между удалёнными состояниями"
 
+msgid "Role"
+msgstr "Роль"
+
 msgid "Primitive"
 msgstr "Элемент"
 
@@ -6050,6 +6134,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr "Назначить эту роль всем участникам"
 
+msgid "Pos."
+msgstr "Поз."
+
 msgid "Orig. Way"
 msgstr "Исх. линия"
 
@@ -6110,7 +6197,7 @@ msgid "Opens the Changeset Manager window for the selected changesets"
 msgstr "Открыть менеджер пакетов правок для выбранных пакетов"
 
 msgid "Command Stack"
-msgstr "Список изменений"
+msgstr "Список правок"
 
 msgid "Open a list of all commands (undo buffer)."
 msgstr "Показать список всех действий (буфер отмены)"
@@ -6119,7 +6206,7 @@ msgid "Toggle: {0}"
 msgstr "Показать/Скрыть: {0}"
 
 msgid "Command Stack: Undo: {0} / Redo: {1}"
-msgstr "Стек команд: отменить: {0} / вернуть: {1}"
+msgstr "Последовательность правок: отменить: {0} / вернуть: {1}"
 
 msgid ""
 "Selects the objects that take part in this command (unless currently deleted)"
@@ -6211,6 +6298,48 @@ msgstr "Уладить конфликты"
 msgid "Resolve conflicts for ''{0}''"
 msgstr "Уладить конфликты для ''{0}''"
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+"<html>Пожалуйста, подтвердите удаление <strong>1 объекта</strong> из "
+"<strong>1 отношения</strong>.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Пожалуйста, подтвердите удаление <strong>1 объекта</strong> из "
+"<strong>{0} отношений</strong>.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Пожалуйста, подтвердите удаление <strong>{0} объектов</strong> из "
+"<strong>{1} отношений</strong>.</html>"
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] "Удаление {0} объекта"
+msgstr[1] "Удаление {0} объектов"
+msgstr[2] "Удаление {0} объектов"
+
+msgid "Delete objects"
+msgstr "Удалить объекты"
+
+msgid "To delete"
+msgstr "Удалить"
+
+msgid "From Relation"
+msgstr "Из отношения"
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr "Щёлкните, чтобы закрыть диалог и удалить объект из отношений"
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr "Щёлкните, чтобы закрыть диалог и отменить удаление объектов"
+
 msgid "Filter objects and hide/disable them."
 msgstr "Отфильтровать объекты и скрыть/отключить их."
 
@@ -6317,8 +6446,8 @@ msgstr "Подробная информация"
 msgid "map style"
 msgstr "стиль карты"
 
-msgid " ({0})"
-msgstr " ({0})"
+msgid "edit counts"
+msgstr "число правок"
 
 msgid "not in data set"
 msgstr "отсутствует в наборе данных"
@@ -6458,6 +6587,12 @@ msgid ""
 msgstr ""
 "Внимание: Два выбранных объекта идентичны, но имеют разные кэши стилей"
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] "{0} пользователь последним редактировал выделенное:"
+msgstr[1] "{0} пользователя последними редактировали выделенное:"
+msgstr[2] "{0} пользователей последними редактировали выделенное:"
+
 msgid "xml"
 msgstr "xml"
 
@@ -6467,29 +6602,60 @@ msgstr "mapcss"
 msgid "unknown"
 msgstr "неизвестно"
 
+msgid "Enter the coordinates for the new node."
+msgstr "Введите координаты новой точки."
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
 msgstr ""
-"Введите координаты новой точки.<br/>Долготу и широту можно разделить "
-"пробелом, запятой или точкой с запятой.<br/>Используйте положительные числа "
-"или символы N, E для указания северной широты или восточной долготы.<br/>Для "
-"южной широты или западной долготы используйте отрицательные числа или "
-"символы S, W.<br/>Координаты могут быть в одном из трёх "
-"форматов:<ul><li><i>градусы</i><tt>°</tt></li><li><i>градусы</i><tt>°"
-"</tt> <i>минуты</i><tt>'</tt></li><li><i>градусы</i><tt>°</tt> "
-"<i>минуты</i><tt>'</tt> <i>секунды</i><tt>&quot</tt></li></ul>Символы "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> являются необязательными.<br/><br/>Несколько "
-"примеров:<ul>{0}</ul>"
+"Долготу и широту можно разделить пробелом, запятой или точкой с запятой."
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+"Используйте положительные числовые значения или символы N, E для указания "
+"северной широты или восточной долготы."
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+"Для южной широты или восточной долготы можно использовать отрицательные "
+"значения или символы S, W."
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr "Координаты могут быть в одном из трёх форматов:"
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr "<i>градусы</i><tt>°</tt>"
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr "<i>градусы</i><tt>°</tt> <i>минуты</i><tt>'</tt>"
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+"<i>градусы</i><tt>°</tt> <i>минуты</i><tt>'</tt> "
+"<i>секунды</i><tt>&quot</tt>"
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+"Символы <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> указывать не обязательно."
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+"Можно также использовать синтаксис <tt>lat=\"...\" lon=\"...\"</tt> или "
+"<tt>lat=''...'' lon=''...''</tt>."
+
+msgid "Some examples:"
+msgstr "Несколько примеров:"
 
 msgid "Projected coordinates:"
 msgstr "Проецируемые координаты:"
@@ -6536,6 +6702,12 @@ msgstr "Непрозрачность"
 msgid "Adjust opacity of the layer."
 msgstr "Настроить непрозрачность слоя"
 
+msgid "Gamma"
+msgstr "Гамма"
+
+msgid "Adjust gamma value of the layer."
+msgstr "Настроить гамма-коррекцию слоя."
+
 msgid "Activate"
 msgstr "Активировать"
 
@@ -6665,6 +6837,12 @@ msgstr "Настройки стиля"
 msgid "Customize the style"
 msgstr "Настроить стиль"
 
+msgid "Mini map"
+msgstr "Мини-карта"
+
+msgid "Displays a small map of the current edit location"
+msgstr "Отобразить миниатюрную карту текущей редактируемой области"
+
 msgid "List of notes"
 msgstr "Список заметок"
 
@@ -6723,14 +6901,19 @@ msgstr "ID объекта:"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "Введите ID объекта, который должен быть скачан с сервера"
 
-msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
 msgstr ""
-"ID объектов можно разделять запятой или пробелом.<br/>Примеры: {0}<br/>В "
-"смешанном режиме указывайте объекты так: {1}<br/>({2} означает <i>точку "
-"(node)</i>, {3} — <i>линию (way)</i>, а {4} — <i>отношение (relation)</i>)"
+"ID объектов должны быть разделены запятыми или пробелами, например: {0}"
+
+msgid ""
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+"В смешанном режиме указывайте объекты так: {0}<br/>({1} означает <i>точку "
+"(node)</i>, {2} — <i>линию (way)</i>, а {3} — <i>отношение (relation)</i>)"
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
+msgstr "Диапазоны ID объектов указываются через дефис, например: {0}"
 
 msgid ""
 "Invalid ID list specified\n"
@@ -6760,6 +6943,9 @@ msgstr "Отношения: {0}/{1}"
 msgid "Relations: {0}"
 msgstr "Отношения: {0}"
 
+msgid "Selection"
+msgstr "Выделение"
+
 msgid "Open a selection list window."
 msgstr "Показать окно со списком выделенных объектов."
 
@@ -6855,6 +7041,12 @@ msgstr "Открыть окно проверки"
 msgid "Validation results"
 msgstr "Результаты проверки"
 
+msgid "Lookup"
+msgstr "Поиск"
+
+msgid "Looks up the selected primitives in the error list."
+msgstr "Найти выделенные примитивы в списке ошибок."
+
 msgid "Fix"
 msgstr "Исправить"
 
@@ -7510,6 +7702,12 @@ msgstr "Открыть описание тега в OSM wiki (F1)"
 msgid "Launch browser with wiki help for selected object"
 msgstr "Открыть браузер с описанием wiki для выбранного объекта"
 
+msgid "Go to Taginfo"
+msgstr "Перейти на Taginfo"
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr "Открыть браузер со статистикой Taginfo для выбранного объекта"
+
 msgid "Paste Value"
 msgstr "Вставить значение"
 
@@ -7607,16 +7805,14 @@ msgstr "Задать количество недавно добавленных
 msgid "Remember last used tags after a restart"
 msgstr "Помнить недавно добавленные теги после перезапуска"
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
-msgstr "<code>Ctrl-1</code> — применить первое предложение"
+msgid "to apply first suggestion"
+msgstr "для применения первого предложения"
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
-msgstr "<code>Shift-Enter</code> — добавить без закрытия диалога"
+msgid "to add without closing the dialog"
+msgstr "для добавления без закрытия диалога"
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
-msgstr ""
-"<code>Shift-Ctrl-1</code> — добавить первое предложение без закрытия диалога"
+msgid "to add first suggestion without closing the dialog"
+msgstr "для добавления первого предложения без закрытия диалога"
 
 msgid "Please enter the number of recently added tags to display"
 msgstr ""
@@ -7818,6 +8014,13 @@ msgstr "Сортировать участников отношений"
 msgid "Relation Editor: Sort"
 msgstr "Редактор отношений: сортировать"
 
+msgid "Sort below"
+msgstr "Сортировать расположенных ниже"
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+"Сортировать выделенных участников отношений и всех расположенных ниже"
+
 msgid "Reverse the order of the relation members"
 msgstr "Поменять порядок участников отношения на обратный"
 
@@ -8417,6 +8620,9 @@ msgstr "Скачка истории для отношения {0}"
 msgid "Node {0}"
 msgstr "Точка {0}"
 
+msgid "The nodes of this way are in reverse order"
+msgstr "Точки этой линии расположены в обратном порядке"
+
 msgid "Zoom to node"
 msgstr "Приблизиться к точке"
 
@@ -9453,6 +9659,108 @@ msgstr[0] "Удалить {0} объект:"
 msgstr[1] "Удалить {0} объекта:"
 msgstr[2] "Удалить {0} объектов:"
 
+msgid "Show Tile Info"
+msgstr "Показать данные квадрата"
+
+msgid "Tile Info"
+msgstr "Информация о квадрате"
+
+msgid "Metadata "
+msgstr "Метаданные "
+
+msgid "Auto Zoom"
+msgstr "Автомасштабирование"
+
+msgid "Auto load tiles"
+msgstr "Автозагрузка квадратов"
+
+msgid "Load All Tiles"
+msgstr "Загрузить все квадраты карты"
+
+msgid "Load All Error Tiles"
+msgstr "Загрузить все квадраты с ошибками"
+
+msgid "Zoom to native resolution"
+msgstr "Увеличить до исходного разрешения"
+
+msgid "Change resolution"
+msgstr "Изменить разрешение"
+
+msgid "Failed to create tile source"
+msgstr "Не удалось создать источник тайлов"
+
+msgid "Show Errors"
+msgstr "Показать ошибки"
+
+msgid "Load Tile"
+msgstr "Загрузить квадрат карты"
+
+msgid "Increase zoom"
+msgstr "Увеличить масштаб"
+
+msgid "Decrease zoom"
+msgstr "Уменьшить масштаб"
+
+msgid "Snap to tile size"
+msgstr "Привязаться к размеру квадрата"
+
+msgid "Flush Tile Cache"
+msgstr "Очистить кэш квадратов карты"
+
+msgid "zoom in to load any tiles"
+msgstr "приблизьте для загрузки квадратов"
+
+msgid "zoom in to load more tiles"
+msgstr "приблизьте для загрузки дополнительных квадратов"
+
+msgid "increase zoom level to see more detail"
+msgstr "увеличьте масштаб для лучшей детализации"
+
+msgid "No tiles at this zoom level"
+msgstr "Нет квадратов на данном масштабе"
+
+msgid "Current zoom: {0}"
+msgstr "Текущий масштаб: {0}"
+
+msgid "Display zoom: {0}"
+msgstr "Масштаб отображения: {0}"
+
+msgid "Pixel scale: {0}"
+msgstr "Масштаб пиксела: {0}"
+
+msgid "Best zoom: {0}"
+msgstr "Наилучший масштаб: {0}"
+
+msgid "Cache stats: {0}"
+msgstr "Статистика кэша: {0}"
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr "{0} ({1}), автоматическая загрузка с уровнем масштабирования {2}"
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr "{0} ({1}), загрузка с уровнем масштабирования {2}"
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr "Загружено {0}/{1} квадратов"
+
+msgid "Save WMS file"
+msgstr "Сохранить файл WMS"
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+"Снимок, скорее всего, сдвинут. Выровняйте его: "
+"https://wiki.openstreetmap.org/wiki/RU:Использование_аэрофотоснимков"
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr "http://wiki.openstreetmap.org/wiki/RU:Using_Imagery"
+
+msgid "Details..."
+msgstr "Подробности..."
+
+msgid "Hide this message and never show it again"
+msgstr "Скрыть это сообщение и больше не показывать"
+
 msgid "Customize Color"
 msgstr "Выбрать цвет"
 
@@ -9510,6 +9818,9 @@ msgstr "Сохранить файл GPX"
 msgid "Imagery fade"
 msgstr "Подложка: угасание к"
 
+msgid "Unsupported imagery type: {0}"
+msgstr "Неподдерживаемый тип подложки: {0}"
+
 msgid "ERROR"
 msgstr "Ошибка"
 
@@ -9530,12 +9841,12 @@ msgstr "Все проекции поддерживаются"
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 "Слой {0} не поддерживает новую проекцию {1}.\n"
-"{2}\n"
-"Измените проекцию или удалите слой."
+"Поддерживаемые проекции: {2}\n"
+"Измените проекцию снова или удалите слой."
 
 msgid "Save Layer"
 msgstr "Сохранить слой"
@@ -9616,85 +9927,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr "Сохранить файл OSM"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-"{0} - неверный TMS параметр. Пожалуйста, проверьте этот URL сервера:\n"
-"{1}"
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-"TMS слой  не поддерживает проекцию {0}.\n"
-"{1}\n"
-"Измените проекцию или удалите слой."
-
-msgid "Auto Zoom"
-msgstr "Автомасштабирование"
-
-msgid "Auto load tiles"
-msgstr "Автозагрузка квадратов"
-
-msgid "Show Errors"
-msgstr "Показать ошибки"
-
-msgid "Load Tile"
-msgstr "Загрузить квадрат карты"
-
-msgid "Show Tile Info"
-msgstr "Показать данные квадрата"
-
-msgid "Load All Tiles"
-msgstr "Загрузить все квадраты карты"
-
-msgid "Load All Error Tiles"
-msgstr "Загрузить все квадраты с ошибками"
-
-msgid "Increase zoom"
-msgstr "Увеличить масштаб"
-
-msgid "Decrease zoom"
-msgstr "Уменьшить масштаб"
-
-msgid "Snap to tile size"
-msgstr "Привязаться к размеру квадрата"
-
-msgid "Flush Tile Cache"
-msgstr "Очистить кэш квадратов карты"
-
-msgid "zoom in to load any tiles"
-msgstr "приблизьте для загрузки квадратов"
-
-msgid "zoom in to load more tiles"
-msgstr "приблизьте для загрузки дополнительных квадратов"
-
-msgid "increase zoom level to see more detail"
-msgstr "увеличьте масштаб для лучшей детализации"
-
-msgid "No tiles at this zoom level"
-msgstr "Нет квадратов на данном масштабе"
-
-msgid "Current zoom: {0}"
-msgstr "Текущий масштаб: {0}"
-
-msgid "Display zoom: {0}"
-msgstr "Масштаб отображения: {0}"
-
-msgid "Pixel scale: {0}"
-msgstr "Масштаб пиксела: {0}"
-
-msgid "Best zoom: {0}"
-msgstr "Наилучший масштаб: {0}"
-
-msgid "Cache stats: {0}"
-msgstr "Статистика кэша: {0}"
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr "TMS-слой ({0}), загрузка в масштабе {1}"
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr "Поддерживаются EPSG:4326 и проекция Меркатора"
 
@@ -9704,60 +9936,33 @@ msgstr "Ошибки при проверке"
 msgid "No validation errors"
 msgstr "Проверка не выявила ошибок"
 
-msgid "Blank Layer"
-msgstr "Пустой слой"
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr "Загружено {0}/{1} квадратов"
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr "Автоматическое скачивание слоя WMS ({0}), в масштабе {1}"
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr "Скачивание слоя WMS ({0}), в масштабе {1}"
-
-msgid "Download visible tiles"
-msgstr "Скачать видимые квадраты карты"
+msgid "Set WMS Bookmark"
+msgstr "Установить закладку WMS"
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
-"Запрошенная область слишком велика. Пожалуйста, увеличьте масштаб, или "
-"измените разрешение"
-
-msgid "Change resolution"
-msgstr "Изменить разрешение"
-
-msgid "Reload erroneous tiles"
-msgstr "Загрузить заново ошибочные квадраты карты"
-
-msgid "Alpha channel"
-msgstr "Альфа канал"
-
-msgid "Automatically change resolution"
-msgstr "Автоматически изменить разрешение"
+"JOSM будет использовать EPSG:4326 при запросе к серверу, но результаты могут "
+"отличаться в зависимости от WMS-сервера"
 
-msgid "Set WMS Bookmark"
-msgstr "Установить закладку WMS"
-
-msgid "Automatic downloading"
-msgstr "Автоматическое скачивание"
+msgid "Correlate to GPX"
+msgstr "Относятся к GPX"
 
-msgid "Zoom to native resolution"
-msgstr "Увеличить до исходного разрешения"
+msgid "Invalid timezone"
+msgstr "Недопустимый часовой пояс"
 
-msgid "Supported projections are: {0}"
-msgstr "Поддерживаемые проекции: {0}"
+msgid "Invalid offset"
+msgstr "Недопустимое смещение"
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
-msgstr ""
-"Неподдерживаемый формат версии WMS файла; обнаружено {0}, ожидалось {1}"
+msgid "Correlate images with GPX track"
+msgstr "Сопоставить изображения с GPX треком"
 
-msgid "Save WMS file"
-msgstr "Сохранить файл WMS"
+msgid "Try Again"
+msgstr "Попытаться снова"
 
-msgid "Correlate to GPX"
-msgstr "Относятся к GPX"
+msgid "No images could be matched!"
+msgstr "Нет соответствующих изображений!"
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
 msgstr "Файлы GPX (*.gpx *.gpx.gz)"
@@ -9850,24 +10055,9 @@ msgstr "Часовой пояс: "
 msgid "Offset:"
 msgstr "Смещение:"
 
-msgid "Correlate images with GPX track"
-msgstr "Сопоставить изображения с GPX треком"
-
 msgid "Correlate"
 msgstr "Установить соотношения"
 
-msgid "Invalid timezone"
-msgstr "Недопустимый часовой пояс"
-
-msgid "Invalid offset"
-msgstr "Недопустимое смещение"
-
-msgid "Try Again"
-msgstr "Попытаться снова"
-
-msgid "No images could be matched!"
-msgstr "Нет соответствующих изображений!"
-
 msgid "No gpx selected"
 msgstr "Нет выбранных gpx"
 
@@ -10088,9 +10278,6 @@ msgstr ""
 "\n"
 "Время GPS: {0}"
 
-msgid "JPEG images (*.jpg)"
-msgstr "Изображения JPEG (*.jpg)"
-
 msgid "Show thumbnails"
 msgstr "Показывать миниатюры"
 
@@ -10160,9 +10347,6 @@ msgstr "метров"
 msgid "Maximum area per request:"
 msgstr "Максимальная область для одного запроса:"
 
-msgid "sq km"
-msgstr "кв. км."
-
 msgid "Download near:"
 msgstr "Загрузить возле:"
 
@@ -10914,15 +11098,15 @@ msgstr "Закрыть диалог настроек и отменить вне
 msgid "Save the preferences and close the dialog"
 msgstr "Сохранить настройки и закрыть диалог"
 
-msgid "Download plugins"
-msgstr "Скачать модули"
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr "Необходимо перезапустить JOSM, чтобы изменения вступили в силу."
 
 msgid "Would you like to restart now?"
 msgstr "Перезапустить сейчас?"
 
+msgid "Download plugins"
+msgstr "Скачать модули"
+
 msgid "Icon paths:"
 msgstr "Путь к значкам:"
 
@@ -11778,6 +11962,21 @@ msgstr "Показать границы"
 msgid "No bounding box was found for this layer."
 msgstr "Не найдены границы для этого слоя."
 
+msgid "1. Enter getCapabilities URL"
+msgstr "1. Введите getCapabilities URL"
+
+msgid "2. Enter name for this layer"
+msgstr "2. Введите название слоя"
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr "Кэш {0}, общий размер кэша: {1} байт"
+
+msgid "Cache name"
+msgstr "Название кэша"
+
+msgid "Object Count"
+msgstr "Количество объектов"
+
 msgid "imagery fade"
 msgstr "потускнение снимка"
 
@@ -11796,11 +11995,23 @@ msgstr "Повысить резкость"
 msgid "Sharpen (requires layer re-add): "
 msgstr "Резкость (требует перезагрузки слоя): "
 
+msgid "Tile cache directory: "
+msgstr "Каталог кэша квадратов: "
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr "Максимальный размер дискового кэша (для снимка) в МБ: "
+
+msgid "Maximum number of objects in memory cache: "
+msgstr "Максимальное число объектов в кэше памяти: "
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr "Установки Снимка"
 
 msgid "Modify list of imagery layers displayed in the Imagery menu"
-msgstr "Править список слоёв подложек, отображаемых в меню «Снимок»"
+msgstr "Настроить список слоёв, отображаемых в меню «Слои»"
 
 msgid "Common Settings"
 msgstr "Общие настройки"
@@ -11812,11 +12023,14 @@ msgid "TMS Settings"
 msgstr "Настройки TMS"
 
 msgid "Imagery providers"
-msgstr "Поставщики подложек"
+msgstr "Поставщики слоёв"
 
 msgid "Offset bookmarks"
 msgstr "Закладки смещений"
 
+msgid "Cache contents"
+msgstr "Содержимое кэша"
+
 msgid "Imagery Background: Default"
 msgstr "Подложка: по умолчанию"
 
@@ -11859,9 +12073,6 @@ msgstr "URL лицензии EULA не доступен: {0}"
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr "URL лицензии EULA искажён: {0}"
 
-msgid "Projection"
-msgstr "Проекция"
-
 msgid "Layer"
 msgstr "Уровень"
 
@@ -11886,18 +12097,12 @@ msgstr "Макс. масштаб: "
 msgid "Add to slippymap chooser: "
 msgstr "Добавить в меню быстрой карты "
 
-msgid "Tile cache directory: "
-msgstr "Каталог кэша квадратов: "
-
 msgid "Maximum concurrent downloads: "
 msgstr "Макс. число одновременных загрузок: "
 
 msgid "Maximum concurrent downloads per host: "
 msgstr "Макс. количество одновременных загрузок с хоста: "
 
-msgid "Maximum elements in disk cache: "
-msgstr "Макс. число элементов в дисковом кэше: "
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
@@ -11905,20 +12110,11 @@ msgstr ""
 "Этот слой не поддерживает ни одной проекции JOSM,\n"
 "вы не можете его использовать. Это сообщение больше показано не будет."
 
-msgid "Downloader:"
-msgstr "Средство скачивания:"
-
 msgid "Simultaneous connections:"
 msgstr "Одновременные подключения:"
 
-msgid "Overlap tiles"
-msgstr "Перекрытие квадратов карты"
-
-msgid "% of east:"
-msgstr "% восточнее:"
-
-msgid "% of north:"
-msgstr "% севернее:"
+msgid "Tile size:"
+msgstr "Размер квадрата:"
 
 msgid "Auto save enabled"
 msgstr "Автоматическое сохранение включено"
@@ -12938,6 +13134,15 @@ msgstr "Применить заготовку"
 msgid "New relation"
 msgstr "Новое отношение"
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+"Невозможно применить заготовку <i>{0}</i>, так как ничего не выделено!"
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] "Изменяем {0} объект"
@@ -13057,6 +13262,9 @@ msgstr "Показать диалог поиска заготовок"
 msgid "Search presets"
 msgstr "Поиск заготовок"
 
+msgid "Presets"
+msgstr "Заготовки"
+
 msgid "Search for objects by preset"
 msgstr "Поиск объектов по заготовке"
 
@@ -13356,6 +13564,9 @@ msgstr "<html>Невозможно прочитать файлы.<br>Ошибк
 msgid "GeoJSON Files"
 msgstr "Файлы GeoJSON"
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr "Слой «{0}» не поддерживается"
 
@@ -13945,6 +14156,10 @@ msgstr "Сжатые zip файлы OSM сервера"
 msgid "WMS Files (*.wms)"
 msgstr "Файлы WMS (*.wms)"
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+"Неподдерживаемый формат версии WMS файла; обнаружено {0}, ожидалось {1}"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -14383,6 +14598,21 @@ msgstr[1] ""
 msgstr[2] ""
 "Модулю {0} требуется {1} модулей, которые не найдены. Отсутствующие модули:"
 
+msgid "Download and restart"
+msgstr "Скачать и перезапустить"
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] "Щёлкните, чтобы скачать отсутствующий модуль и перезапустить JOSM"
+msgstr[1] "Щёлкните, чтобы скачать отсутствующие модули и перезапустить JOSM"
+msgstr[2] "Щёлкните, чтобы скачать отсутствующие модули и перезапустить JOSM"
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] "Щёлкните, чтобы продолжить без этого модуля"
+msgstr[1] "Щёлкните, чтобы продолжить без этих модулей"
+msgstr[2] "Щёлкните, чтобы продолжить без этих модулей"
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -15621,6 +15851,9 @@ msgstr "Обновить"
 msgid "Update directory listing."
 msgstr "Обновить список каталога."
 
+msgid "View"
+msgstr "Вид"
+
 msgid "Blue:"
 msgstr "Синий:"
 
@@ -15660,8 +15893,8 @@ msgstr "MapQuest Open Aerial"
 msgid "OpenStreetMap GPS Traces"
 msgstr "GPS-треки OpenStreetMap"
 
-msgid "OpenStreetMap (Mapnik)"
-msgstr "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
+msgstr "OpenStreetMap (стандартный слой)"
 
 msgid "skobbler"
 msgstr "skobbler"
@@ -15672,9 +15905,6 @@ msgstr "OpenStreetMap (Mapnik чёрно-белый)"
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr "OpenStreetMap (Mapnik, без подписей)"
 
-msgid "skobbler heatmap"
-msgstr "Тепловая карта skobbler"
-
 msgid "OpenCycleMap"
 msgstr "OpenCycleMap"
 
@@ -15783,6 +16013,9 @@ msgstr "Вена: ортофото (аэрофотоснимок)"
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr "VoGIS: полноцветное изображение 2012 (12см)"
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr "VoGIS: полноцветное зимнее изображение 2015 (20 см)"
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr "VoGIS: план зонирования"
 
@@ -15796,12 +16029,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr "Аэрофотосъёмка AGIV(laanderen) (покрывает также Брюссель) (2013)"
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr "SPW(allonie) цифровое изображение PICC"
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr "Аэрофотосъёмка SPW(allonie) 2012"
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr "Аэрофотосъёмка SPW(allonie) 2009"
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr "кадастр:  только для названий и номеров домов, неточная геометрия"
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr "IBGE: карта городских районов"
 
@@ -15838,12 +16077,18 @@ msgstr "Чехия RUIAN (земельные участки)"
 msgid "Czech pLPIS"
 msgstr "Чехия pLPIS"
 
-msgid "Fugro (Denmark)"
-msgstr "Fugro (Дания)"
-
 msgid "Geodatastyrelsen (Denmark)"
 msgstr "Geodatastyrelsen (Дания)"
 
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr "Geodatastyrelsen DTK Kort25"
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr "Geodatastyrelsen Skyggekort 1.6 м"
+
+msgid "Geodatastyrelsen Skærmkort"
+msgstr "Geodatastyrelsen Skærmkort"
+
 msgid "Stevns (Denmark)"
 msgstr "Стевнс (Дания)"
 
@@ -15857,7 +16102,7 @@ msgid "Estonia Ortho (Maaamet)"
 msgstr "Эстония: ортофото (Maaamet)"
 
 msgid "Estonia Hillshade (Maaamet)"
-msgstr "Эстония: теневой рельеф (Maaamet)"
+msgstr "Эстония: отмывка рельефа (Maaamet)"
 
 msgid "Estonia Cadastre (Maaamet)"
 msgstr "Эстония: кадастр (Maaamet)"
@@ -15868,6 +16113,9 @@ msgstr "Эстония: лесные массивы (Maaamet)"
 msgid "BANO"
 msgstr "BANO"
 
+msgid "BD Carthage"
+msgstr "BD Carthage"
+
 msgid "Bordeaux - 2012"
 msgstr "Бордо - 2012"
 
@@ -15892,8 +16140,8 @@ msgstr "Géobretagne - Морбиан 2010"
 msgid "Géolittoral - Orthophotos 2000"
 msgstr "Géolittoral - ортофото 2000"
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
-msgstr "Géolittoral V2 - ортофото 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
+msgstr "Géolittoral V2 - ортоснимки 2011-2014"
 
 msgid "Géolittoral - Sentiers"
 msgstr "Géolittoral - трассы"
@@ -15907,6 +16155,9 @@ msgstr "Атлантическая Луара - ортофото 2012 - 20 см"
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr "SIG L-R - Лангедок-Руссильон 2012 - 20 см"
 
+msgid "Route 500™©®"
+msgstr "Route 500™ ©®"
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr "Тулуза - ортофотоплан 2013"
 
@@ -15919,12 +16170,6 @@ msgstr "Тулуза - ортофотоплан 2007"
 msgid "Tours - Orthophotos 2013"
 msgstr "Тур - ортофото 2013"
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr "Тур - ортофото 2008-2010"
-
-msgid "Tours - Orthophotos 2008"
-msgstr "Тур - ортофото 2008"
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -15945,6 +16190,9 @@ msgstr "Гамбург (20 см)"
 msgid "Hamburg (DK5)"
 msgstr "Гамбург (DK5)"
 
+msgid "Bavaria (80 cm)"
+msgstr "Бавария (80 см)"
+
 msgid "Bavaria (2 m)"
 msgstr "Бавария (2 м)"
 
@@ -15978,11 +16226,8 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr "Maps4BW (LGL-BW, www.lgl-bw.de)"
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr "NRW-Atlas: автоматизированный кадастровый план (векторный)"
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
-msgstr "NRW-Atlas: автоматизированный кадастровый план (растровый)"
+msgid "NRW-Atlas: ALKIS"
+msgstr "NRW-Atlas: ALKIS"
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
 msgstr "NRW-Atlas: цифровая базовая карта 1:5000"
@@ -16011,6 +16256,12 @@ msgstr "Ирландия, British War Office 1-дюймовая 1941-43 GSGS 413
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr "Ирландия, изд. Bartholomew, четвертьдюймовая 1940"
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr "Ирландские общины и баронства - Memorial Atlas"
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr "Памятный атлас Ирландии (1901) L.J. Richards"
+
 msgid "OSMIE Townlands"
 msgstr "OSM Карта землевладений в Ирландии"
 
@@ -16026,60 +16277,6 @@ msgstr "OSMIE: баронства"
 msgid "OSMIE Political"
 msgstr "Ирландская политическая карта"
 
-msgid "Ireland EEA GMES Urban Atlas"
-msgstr "Ирландия EEA GMES Urban Atlas"
-
-msgid "Ireland EEA CORINE 2006"
-msgstr "Ирландия EEA CORINE 2006"
-
-msgid "Antrim Civil Parishes and Baronies"
-msgstr "Антрим: общины и баронства"
-
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
-msgstr "Памятный атлас Ирландии (1901) L.J. Richards"
-
-msgid "Carlow Civil Parishes and Baronies"
-msgstr "Карлоу: общины и баронства"
-
-msgid "Clare Civil Parishes and Baronies"
-msgstr "Клэр: общины и баронства"
-
-msgid "Dublin Civil Parishes and Baronies"
-msgstr "Дублин: общины и баронства"
-
-msgid "Fermanagh Civil Parishes and Baronies"
-msgstr "Фермана: общины и баронства"
-
-msgid "Galway Civil Parishes and Baronies"
-msgstr "Голуэй: общины и баронства"
-
-msgid "Kildare Civil Parishes and Baronies"
-msgstr "Килдэр: общины и баронства"
-
-msgid "Leitrim Civil Parishes and Baronies"
-msgstr "Литрим: общины и баронства"
-
-msgid "Longford Civil Parishes and Baronies"
-msgstr "Лонгфорд: общины и баронства"
-
-msgid "Offaly Civil Parishes and Baronies"
-msgstr "Оффали: общины и баронства"
-
-msgid "Sligo Civil Parishes and Baronies"
-msgstr "Слайго: общины и баронства"
-
-msgid "Tyrone Civil Parishes and Baronies"
-msgstr "Тирон: общины и баронства"
-
-msgid "Westmeath Civil Parishes and Baronies"
-msgstr "Уэстмит: общины и баронства"
-
-msgid "Wexford Civil Parishes and Baronies"
-msgstr "Уэксфорд: общины и баронства"
-
-msgid "Wicklow Civil Parishes and Baronies"
-msgstr "Уиклоу:  общины и баронства"
-
 msgid "Lodi - Italy"
 msgstr "Лоди - Италия"
 
@@ -16113,6 +16310,9 @@ msgstr "50см ортофото - Латвия"
 msgid "20cm ortho - Latvia - Coastline"
 msgstr "20см ортфото - Латвия - побережье"
 
+msgid "1.cikla ortofotokarte - Latvia"
+msgstr "1.cikla ортофотокарта - Латвия"
+
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Литва)"
 
@@ -16128,6 +16328,9 @@ msgstr "Luxembourg Inspire: железные дороги"
 msgid "Luxembourg Inspire Roads"
 msgstr "Luxembourg Inspire: дороги"
 
+msgid "Luxembourg Inspire Water"
+msgstr "Luxembourg Inspire: водная карта"
+
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Дельта Нигера, окт. 2012 Landsat"
 
@@ -16143,9 +16346,15 @@ msgstr "Пангасинан/Булакан (Филлипины HiRes)"
 msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr "Geoportal 2: ортофото"
 
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgstr "Geoportal 2: ортофотокарта (аэроснимок) WMTS"
+
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr "Geoportal 2: PRNG (топонимы)"
 
+msgid "Geoportal 2: ISOK hillshade"
+msgstr "Geoportal 2: отмывка рельефа ISOK"
+
 msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr "Бендзин: Ortofotomapa 2013 (аэрофотосъёмка)"
 
@@ -16155,15 +16364,27 @@ msgstr "Бендзин: здания"
 msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr "Бытом: ортофото 2012"
 
+msgid "Bytom: Fotoplan 2014 (aerial image)"
+msgstr "Бытом: фотоплан 2014"
+
 msgid "Bytom: Budynki (buildings)"
 msgstr "Бытом: здания"
 
 msgid "Chorzów: Budynki (buildings)"
 msgstr "Хожув: здания"
 
+msgid "Częstochowa: Budynki (buildings)"
+msgstr "Ченстохова: здания"
+
 msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr "Ченстохова: ортофото 2011"
 
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgstr "Ченстохова: ортофотокарта 2013"
+
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgstr "Ченстохова: ортофотокарта 2014"
+
 msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr "Гливице: ортофото 2013"
 
@@ -16173,9 +16394,45 @@ msgstr "Гливице: здания"
 msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr "Катовице: ортофото"
 
+msgid "Katowice: Budynki (buildings)"
+msgstr "Катовице: здания"
+
+msgid "Łódź: Budynki (buildings)"
+msgstr "Лодзь: здания"
+
 msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr "Лодзь: ортофото"
 
+msgid "Powiat dębicki: Budynki (buildings)"
+msgstr "Дембицкий повят: здания"
+
+msgid "Powiat lubaczowski: Budynki (buildings)"
+msgstr "Любачувский повят: здания"
+
+msgid "Powiat łańcucki: Budynki (buildings)"
+msgstr "Ланцутский повят: здания"
+
+msgid "Powiat poznański: Budynki (buildings)"
+msgstr "Познанский повят: здания"
+
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgstr "Познанский повят: ортофотокарта"
+
+msgid "Powiat rzeszowski: Budynki (buildings)"
+msgstr "Жешувский повят: здания"
+
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgstr "Жешувский повят: ортофотокарта"
+
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr "Сталёвовольский повят: здания"
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr "Пшемысль: здания"
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgstr "Пшемысль: ортофотокарта"
+
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
 msgstr "Руда-Слёнска: ортофото"
 
@@ -16188,9 +16445,18 @@ msgstr "Жешув: здания"
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr "Семяновице-Слёнске: ортофото"
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr "Семяновице-Слёнске: здания"
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr "Свентохловице: ортофотокарта 2008"
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr "Свентохловице: ортофото 2009"
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr "Свентохловице: ортофотокарта 2012"
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr "Забже: ортофото 2011"
 
@@ -16320,6 +16586,21 @@ msgstr "Бонвиллар - ортофото 2013"
 msgid "Fiez Orthophoto 2013"
 msgstr "Фиез - ортофото 2013"
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr "NLSC Open Data WMTS"
+
 msgid "MSR Maps Topo"
 msgstr "MSR Maps Topo"
 
@@ -16335,8 +16616,8 @@ msgstr "USGS: крупномасштабные снимки"
 msgid "TIGER 2012 Roads Overlay"
 msgstr "TIGER 2012 - оверлей дорог"
 
-msgid "New & Misaligned TIGER Roads (2014)"
-msgstr "Новые и смещённые дороги TIGER (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
+msgstr "Новые и невыровненные дороги TIGER (2015)"
 
 msgid "MassGIS L3 Parcels"
 msgstr "MassGIS L3 Parcels"
@@ -16676,6 +16957,14 @@ msgstr ""
 "Реализует командную строку с возможностью создания своих команд. Стандартные "
 "команды можно скачать по ссылке."
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+"Предоставляет библиотеку Commons Imaging. Предназначен не для "
+"непосредственной установки пользователями, а как зависимость для других "
+"модулей."
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 "(Внимание: экспериментальный!) Инструмент для объединения (слияния) данных."
@@ -16778,13 +17067,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr "Старый режим выранивания подложки (как в бывшем WMSPlugin)"
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-"Этот экспериментальный модуль позволяет JOSM хранить кэш тайлов в базе "
-"данных, а не в тысячах файлов"
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -16860,8 +17142,9 @@ msgstr ""
 "этого модуля можно создавать, закрывать, аннулировать, переоткрывать отчёты "
 "об ошибках и добавлять к ним комментарии."
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
-msgstr "Позволяет пользователю работать с изображениями с mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
+msgstr ""
+"Позволяет пользователю работать со снимками, размещёнными на mapillary.com"
 
 msgid ""
 "Provide a measurement dialog and a layer to measure length and angle of "
@@ -16877,9 +17160,6 @@ msgstr "Объединение накладывающихся частей ли
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr "Добавляет запрет поворота налево для наборов из 4 или 5 линий"
 
-msgid "Simplifies download from different read-only APIs."
-msgstr "Упрощает загрузку из различных API только для чтения."
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 "Позволяет назначить теги  для всех объектов внутри выделенной области за "
@@ -16979,6 +17259,18 @@ msgstr ""
 "Этот модуль упрощает картографирование и правку маршрутов общественного "
 "транспорта."
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+"Отображает остановки выбранных маршрутов общественного транспорта в виде "
+"графа"
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+"Модуль RasterFilters позволяет выбирать и применять к некоторым слоям "
+"фильтры изображений"
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr "Панель создания и правки мультиполигонов и других отношений"
 
@@ -17026,6 +17318,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr "Изменений свойств редактирования OpenSeaMap"
 
+msgid "Allows to draw splines"
+msgstr "Позволяет рисовать сплайны"
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -17124,9 +17419,6 @@ msgstr "Быстрое скачивание вдоль большого набо
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr "Поиск по путевым точкам, импортированным из файлов gpx."
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr "Выделить последовательность неветвящихся соединённых линий"
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr "Упрощает связывание объектов OSM со статьями Wikipedia"
 
@@ -17537,6 +17829,14 @@ msgid "basketball"
 msgstr "баскетбол"
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr "пляжный волейбол"
+
+msgctxt "sport"
+msgid "billiards"
+msgstr "бильярд"
+
+msgctxt "sport"
 msgid "boules"
 msgstr "бул"
 
@@ -17561,10 +17861,6 @@ msgid "cricket"
 msgstr "крикет"
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr "сетки для тренировок по крикету"
-
-msgctxt "sport"
 msgid "croquet"
 msgstr "крокет"
 
@@ -17581,6 +17877,10 @@ msgid "equestrian"
 msgstr "верховая езда"
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr "хоккей на траве"
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr "гэльские игры"
 
@@ -17597,12 +17897,24 @@ msgid "handball"
 msgstr "гандбол"
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
+msgstr "скачки на лошадях"
+
+msgctxt "sport"
+msgid "ice_hockey"
 msgstr "хоккей"
 
 msgctxt "sport"
-msgid "horse_racing"
-msgstr "скачки на лошадях"
+msgid "karting"
+msgstr "картинг"
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr "авиамодельный спорт"
+
+msgctxt "sport"
+msgid "motocross"
+msgstr "мотокросс"
 
 msgctxt "sport"
 msgid "motor"
@@ -17617,6 +17929,10 @@ msgid "racquet"
 msgstr "игры с ракетками"
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr "радиоуправляемые автомодели"
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr "регби-лиг (регби-13)"
 
@@ -17629,6 +17945,10 @@ msgid "running"
 msgstr "бег"
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr "стрельба"
 
@@ -17656,6 +17976,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr "теннис"
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr "волейбол"
+
+msgctxt "sport"
+msgid "9pin"
+msgstr "9-кегельный боулинг"
+
+msgctxt "sport"
+msgid "10pin"
+msgstr "10-кегельный боулинг"
+
 msgid "Fee"
 msgstr "Денежный сбор"
 
@@ -18051,6 +18383,9 @@ msgstr "Съезд с третичной"
 msgid "Unclassified"
 msgstr "Не классифицировано"
 
+msgid "Street has no name"
+msgstr "Улица не имеет названия"
+
 msgid "Passing Places"
 msgstr "Место для разъезда"
 
@@ -18129,6 +18464,9 @@ msgstr ""
 "Полоса безопасности вдоль длинных склонов для аварийной остановки грузовиков "
 "и другого автотранспорта при поломке тормозной системы."
 
+msgid "Raceway"
+msgstr "Гоночная трасса"
+
 msgid "Road (Unknown Type)"
 msgstr "Дорога (тип неизвестен)"
 
@@ -18681,6 +19019,12 @@ msgstr "Камера-скоростемер"
 msgid "Traffic Mirror"
 msgstr "Дорожное зеркало"
 
+msgid "Highway milestone"
+msgstr "Дистанционный столб"
+
+msgid "Distance (kilometers)"
+msgstr "Расстояние (км)"
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr "Именованный перекрёсток"
@@ -18872,6 +19216,11 @@ msgstr "Колоннада"
 msgid "Avalanche Protector"
 msgstr "Лавинозащитная галерея"
 
+msgctxt "main group"
+msgid "Water"
+msgstr "Вода"
+
+msgctxt "sub group"
 msgid "Water"
 msgstr "Вода"
 
@@ -18926,6 +19275,10 @@ msgstr "Резервуар"
 msgid "Covered Reservoir"
 msgstr "Крытый резервуар"
 
+msgctxt "natural"
+msgid "Water"
+msgstr "Вода"
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr "Водоём, такой как озеро или пруд."
 
@@ -19071,6 +19424,120 @@ msgstr "Сливная станция"
 msgid "public"
 msgstr "общедоступное"
 
+msgid "Marine Fuel"
+msgstr "Судовое топливо"
+
+msgid "Agip"
+msgstr "Agip"
+
+msgid "Aral"
+msgstr "Aral"
+
+msgid "Avia"
+msgstr "Avia"
+
+msgid "BP"
+msgstr "BP"
+
+msgid "Chevron"
+msgstr "Chevron"
+
+msgid "Citgo"
+msgstr "Citgo"
+
+msgid "Eni"
+msgstr "Eni"
+
+msgid "Esso"
+msgstr "Esso"
+
+msgid "Exxon"
+msgstr "Exxon"
+
+msgid "Gulf"
+msgstr "Gulf"
+
+msgid "Mobil"
+msgstr "Mobil"
+
+msgid "OMV"
+msgstr "OMV"
+
+msgid "Petro-Canada"
+msgstr "Petro-Canada"
+
+msgid "Pioneer"
+msgstr "Pioneer"
+
+msgid "Q8"
+msgstr "Q8"
+
+msgid "Repsol"
+msgstr "Repsol"
+
+msgid "Shell"
+msgstr "Shell"
+
+msgid "Socar"
+msgstr "ГНКАР (SOCAR)"
+
+msgid "Statoil"
+msgstr "Statoil"
+
+msgid "Sunoco"
+msgstr "Sunoco"
+
+msgid "Tamoil"
+msgstr "Tamoil"
+
+msgid "Texaco"
+msgstr "Texaco"
+
+msgid "Total"
+msgstr "Total"
+
+msgid "Independent"
+msgstr "Независимый"
+
+msgid "Fuel types:"
+msgstr "Виды топлива:"
+
+msgid "Diesel"
+msgstr "дизельное"
+
+msgid "Bio Diesel"
+msgstr "биодизель"
+
+msgid "Octane 80"
+msgstr "бензин АИ-80"
+
+msgid "Octane 91"
+msgstr "бензин АИ-91"
+
+msgid "Octane 92"
+msgstr "бензин АИ-92"
+
+msgid "Octane 95"
+msgstr "бензин АИ-95"
+
+msgid "Octane 98"
+msgstr "бензин АИ-98"
+
+msgid "Octane 100"
+msgstr "бензин АИ-100"
+
+msgid "E10 (10% Ethanol mix)"
+msgstr "E10 (10% смесь этанола)"
+
+msgid "E85 (85% Ethanol mix)"
+msgstr "E85 (85% смесь этанола)"
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr "пропан-бутан (АГЗС)"
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr "природный газ"
+
 msgid "Pier"
 msgstr "Пирс"
 
@@ -19187,6 +19654,9 @@ msgstr "Буферный упор"
 msgid "Railway Switch"
 msgstr "Железнодорожная стрелка"
 
+msgid "Railway milestone"
+msgstr "Ж/д дистанционный столб"
+
 msgid "Aerialway"
 msgstr "Канатная дорога"
 
@@ -19312,78 +19782,6 @@ msgstr "Въезд на парковку"
 msgid "Fuel"
 msgstr "Заправочная станция"
 
-msgid "Agip"
-msgstr "Agip"
-
-msgid "Aral"
-msgstr "Aral"
-
-msgid "Avia"
-msgstr "Avia"
-
-msgid "BP"
-msgstr "BP"
-
-msgid "Chevron"
-msgstr "Chevron"
-
-msgid "Citgo"
-msgstr "Citgo"
-
-msgid "Eni"
-msgstr "Eni"
-
-msgid "Esso"
-msgstr "Esso"
-
-msgid "Exxon"
-msgstr "Exxon"
-
-msgid "Gulf"
-msgstr "Gulf"
-
-msgid "Mobil"
-msgstr "Mobil"
-
-msgid "OMV"
-msgstr "OMV"
-
-msgid "Petro-Canada"
-msgstr "Petro-Canada"
-
-msgid "Pioneer"
-msgstr "Pioneer"
-
-msgid "Q8"
-msgstr "Q8"
-
-msgid "Repsol"
-msgstr "Repsol"
-
-msgid "Shell"
-msgstr "Shell"
-
-msgid "Socar"
-msgstr "ГНКАР (SOCAR)"
-
-msgid "Statoil"
-msgstr "Statoil"
-
-msgid "Sunoco"
-msgstr "Sunoco"
-
-msgid "Tamoil"
-msgstr "Tamoil"
-
-msgid "Texaco"
-msgstr "Texaco"
-
-msgid "Total"
-msgstr "Total"
-
-msgid "Independent"
-msgstr "Независимый"
-
 msgid "With shop"
 msgstr "С магазином"
 
@@ -19393,51 +19791,12 @@ msgstr "продуктовый"
 msgid "kiosk"
 msgstr "киоск"
 
-msgid "Fuel types:"
-msgstr "Виды топлива:"
-
-msgid "Diesel"
-msgstr "дизельное"
-
-msgid "Bio Diesel"
-msgstr "биодизель"
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr "дизельное синтетическое (GTL-технология)"
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr "дизельное для тяжёлого транспорта"
 
-msgid "Octane 80"
-msgstr "бензин АИ-80"
-
-msgid "Octane 91"
-msgstr "бензин АИ-91"
-
-msgid "Octane 92"
-msgstr "бензин АИ-92"
-
-msgid "Octane 95"
-msgstr "бензин АИ-95"
-
-msgid "Octane 98"
-msgstr "бензин АИ-98"
-
-msgid "Octane 100"
-msgstr "бензин АИ-100"
-
-msgid "E10 (10% Ethanol mix)"
-msgstr "E10 (10% смесь этанола)"
-
-msgid "E85 (85% Ethanol mix)"
-msgstr "E85 (85% смесь этанола)"
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr "пропан-бутан (АГЗС)"
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr "природный газ"
-
 msgid "1/25 mix (mofa/moped)"
 msgstr "топливная смесь 1/25 (для мопедов)"
 
@@ -19658,9 +20017,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr "#CD853F"
 
-msgid "route segment"
-msgstr "сегмент маршрута"
-
 msgid "stop position"
 msgstr "место остановки"
 
@@ -19679,6 +20035,9 @@ msgstr "платформа (только выход)"
 msgid "platform (entry only)"
 msgstr "платформа (только выход)"
 
+msgid "route segment"
+msgstr "сегмент маршрута"
+
 msgid "Route Master"
 msgstr "Мастер-маршрут"
 
@@ -19881,6 +20240,12 @@ msgstr "Гостиница"
 msgid "Stars"
 msgstr "Звёзды"
 
+msgid "Rooms"
+msgstr "Количество комнат"
+
+msgid "Beds"
+msgstr "Количество постелей"
+
 msgid "Motel"
 msgstr "Мотель"
 
@@ -19971,6 +20336,9 @@ msgstr "сэндвичи"
 msgid "sushi"
 msgstr "суши"
 
+msgid "steak_house"
+msgstr "стейк-хаус"
+
 msgid "Microbrewery"
 msgstr "Пивоварня"
 
@@ -20185,6 +20553,9 @@ msgstr "Сауна"
 msgid "Horse Riding"
 msgstr "Верховая езда"
 
+msgid "Casino"
+msgstr "Казино"
+
 msgid "Brothel"
 msgstr "Бордель"
 
@@ -20672,8 +21043,8 @@ msgstr "Показывают атмосферное давление"
 msgid "Shows humidity"
 msgstr "Показывают влажность"
 
-msgid "Recycling"
-msgstr "Пункт приёма утильсырья"
+msgid "Recycling Container"
+msgstr "Контейнер для перерабатываемых отходов"
 
 msgid "Batteries"
 msgstr "Батарейки"
@@ -20681,20 +21052,47 @@ msgstr "Батарейки"
 msgid "Cans"
 msgstr "Консервные банки"
 
+msgid "Cardboard"
+msgstr "Упаковочный картон"
+
+msgid "Electrical Appliances"
+msgstr "Электроприборы"
+
 msgid "Glass"
 msgstr "Стекло"
 
+msgid "Glass Bottles"
+msgstr "Стеклянные бутылки"
+
+msgid "Green Waste"
+msgstr "Растительный мусор"
+
 msgid "Paper"
 msgstr "Бумага"
 
+msgid "Plastic"
+msgstr "Пластик"
+
+msgid "Plastic Bottles"
+msgstr "Пластиковые бутылки"
+
+msgid "Plastic Packaging"
+msgstr "Пластиковая тара"
+
 msgid "Scrap Metal"
 msgstr "Металлолом"
 
-msgid "container"
-msgstr "контейнер"
+msgid "Shoes"
+msgstr "Обувь"
+
+msgid "Small Appliances"
+msgstr "Мелкая бытовая техника"
 
-msgid "centre"
-msgstr "организация"
+msgid "Waste"
+msgstr "Общий контейнер для утиля"
+
+msgid "Recycling Centre"
+msgstr "Пункт приёма перерабатываемых отходов"
 
 msgid "Waste Basket/Trash Can"
 msgstr "Урна"
@@ -20897,6 +21295,9 @@ msgstr "Стрельба из лука"
 msgid "Track and Field Athletics"
 msgstr "Лёгкая атлетика"
 
+msgid "Running"
+msgstr "Бег"
+
 msgid "Climbing"
 msgstr "Скалолазание"
 
@@ -21072,12 +21473,18 @@ msgstr "Бейсбол"
 msgid "Basketball"
 msgstr "Баскетбол"
 
+msgid "Handball"
+msgstr "Гандбол"
+
 msgid "Volleyball"
 msgstr "Волейбол"
 
 msgid "Beach Volleyball"
 msgstr "Пляжный волейбол"
 
+msgid "Billiards"
+msgstr "Бильярд"
+
 msgid "Golf"
 msgstr "Гольф"
 
@@ -21093,14 +21500,14 @@ msgstr "Игра в шары на траве"
 msgid "Cricket"
 msgstr "Крикет"
 
-msgid "Cricket Nets"
-msgstr "Тренировочные сетки для крикета"
-
 msgid "Croquet"
 msgstr "Крокет"
 
-msgid "Hockey"
-msgstr "Хоккей"
+msgid "Field Hockey"
+msgstr "Хоккей на траве"
+
+msgid "Ice Hockey"
+msgstr "Хоккей с шайбой"
 
 msgid "Pelota"
 msgstr "Пелота"
@@ -21123,9 +21530,6 @@ msgstr "Картинг"
 msgid "Motocross"
 msgstr "Мотокросс"
 
-msgid "Safety Training"
-msgstr "Обучение технике безопасности"
-
 msgid "Model Aerodrome"
 msgstr "Авиамодельный спорт"
 
@@ -21144,9 +21548,6 @@ msgstr "дорожка"
 msgid "RC Car"
 msgstr "Машинка на дистанционном управлении"
 
-msgid "Raceway"
-msgstr "Гоночная трасса"
-
 msgid "Man Made"
 msgstr "Рукотворное"
 
@@ -21219,6 +21620,14 @@ msgid "storage_tank"
 msgstr "резервуар"
 
 msgctxt "building"
+msgid "supermarket"
+msgstr "супермаркет"
+
+msgctxt "building"
+msgid "gasometer"
+msgstr "газгольдер"
+
+msgctxt "building"
 msgid "cowshed"
 msgstr "коровник"
 
@@ -22541,9 +22950,6 @@ msgstr "Вино"
 msgid "Boutique"
 msgstr "Бутик"
 
-msgid "Shoes"
-msgstr "Обувь"
-
 msgid "Outdoor"
 msgstr "Товары для активного отдыха"
 
@@ -23571,12 +23977,12 @@ msgstr "возможная"
 msgid "Contact (Common Schema)"
 msgstr "Контактная информация (общая схема)"
 
-msgid "Fax Number"
-msgstr "Номер факса"
-
 msgid "Email Address"
 msgstr "Адрес электронной почты"
 
+msgid "Fax Number"
+msgstr "Номер факса"
+
 msgid "Image"
 msgstr "Изображение"
 
@@ -24005,6 +24411,9 @@ msgstr "неполный объект: только {0} и {1}"
 msgid "{0} together with addr:*"
 msgstr "{0} совместно с addr:*"
 
+msgid "{0} together with {1} and conflicting values"
+msgstr "{0} вместе с {1} и конфликтующие значения"
+
 msgid "{0} on suspicious object"
 msgstr "{0} на подозрительном объекте"
 
@@ -24029,6 +24438,18 @@ msgstr "альтернативное название без {0}"
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr "неполное использование {0} для линии без {1}"
 
+msgid "Same value of {0} and {1}"
+msgstr "Одинаковые значения у  {0} и {1}"
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr "Одинаковые значения у {0}, {1} и {2}"
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr "{0} и {1} вместе с {2} и конфликтующие значения"
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr "Подозрительная комбинация тегов: {0} и {1}"
+
 msgid "{0}={1} is deprecated"
 msgstr "{0}={1} использовать не рекомендуется"
 
@@ -24104,6 +24525,9 @@ msgstr "ключ с необычным символом"
 msgid "uncommon short key"
 msgstr "необычно короткий ключ"
 
+msgid "{0} is inaccurate"
+msgstr "{0} — неточное значение"
+
 msgid "{0} on a node. Should be used on a way."
 msgstr "{0} на точке. Должен использоваться на линии."
 
@@ -24198,9 +24622,22 @@ msgstr ""
 "{0}: по умолчанию в метрах; разделитель - точка; единицы измерения "
 "отделяются пробелом"
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+"{0}: по умолчанию тонны; разделитель — точка; при указании единицы измерения "
+"ставьте перед ней пробел"
+
 msgid "unusual {0} format"
 msgstr "необычный формат {0}"
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+"{0}: по умолчанию километры; разделитель — точка; при указании единицы "
+"измерения ставьте перед ней пробел"
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr "напряжение должно быть в вольтах без единиц/разделителей/пробелов"
 
@@ -24587,6 +25024,9 @@ msgstr "Добавлять фиксированные точки по клику
 msgid "Add fixed points on spacebar"
 msgstr "Добавлять фиксированные точки по нажатию пробела"
 
+msgid "Allow edit existing ways"
+msgstr "Разрешить редактирование существующих линий"
+
 msgid "Draw closed polygons only"
 msgstr "Рисовать только замкнутые многоугольники"
 
@@ -24650,9 +25090,6 @@ msgstr "Рисуйте линию мышью"
 msgid "min distance={0} px ({1} m)"
 msgstr "минимальное расстояние ={0} пикселей ({1} м)"
 
-msgid "Convert way to FastDraw line"
-msgstr "Преобразовать линию в FastDraw линию"
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr "Eps={0}, {1} точек, {2} на км"
 
@@ -25512,52 +25949,68 @@ msgstr ""
 "Сообщите нам о ваших действиях и о том, что произошло, добавив следующий "
 "текст в отчёт об ошибке, чтобы мы могли определить её причину."
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
+msgstr "Area Selector - настройки"
+
+msgid "Settings for the area detection algorithm."
 msgstr "Настройки алгоритма определения области."
 
-msgid "Algorithm Settings"
-msgstr "Настройки алгоритма"
+msgid "Boofcv - high resolution images"
+msgstr "Boofcv - изображения выского разрешения"
+
+msgid "Custom - low resolution images"
+msgstr "Встроенный — изображения низкого разрешения"
 
 msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
-"Цветовой порог определяет, насколько цвет объекта может отличаться от "
-"основного цвета, чтобы объект был выделен (по умолчанию: {0})."
+"Выберите алгоритм. \"Авто\" пытается найти область с помощью Boofcv, а в "
+"случае неудачи использует встроенный алгоритм."
 
-msgid "Color Threshold"
-msgstr "Цветовой порог"
+msgid "Algorithm"
+msgstr "Алгоритм"
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
-"Максимально допустимое расстояние каждой точки в последовательности от "
-"линии, в пикселах (по умолчанию: {0})."
+"Максимальное расстояние точки от линии (в пикселах), при котором точка всё "
+"ещё считается частью этой линии (По умолчанию: {0})."
 
-msgid "Tolerance Distance"
+msgid "Distance Tolerance"
 msgstr "Допуск по расстоянию"
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
-msgstr "Допустимое отклонение угла, в радианах (по умолчанию {0})."
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
+msgstr ""
+"Линии, расположенные под углом (в градусах) меньше этого, будут объединены в "
+"одну (По умолчанию {0})."
 
-msgid "Tolerance Angle"
+msgid "Angle Tolerance"
 msgstr "Допуск по углу"
 
-msgid "Plugin Settings"
-msgstr "Настройки модуля"
-
-msgid "Show Address Dialog after mapping an area"
-msgstr "Показывать адресный диалог после рисования области"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
+msgstr ""
+"Цветовой порог определяет, насколько цвет может отличаться от выбранного. "
+"Значения красного, зелёного и синего должны быть в диапазоне от (выбранный - "
+"порог) до (выбранный + порог). (По умолчанию: {0})."
 
-msgid "show address dialog"
-msgstr "Показывать адресный диалог"
+msgid "Color Threshold"
+msgstr "Цветовой порог"
 
-msgid "Merge nodes with neighbors"
-msgstr "Объединять точки с соседними"
+msgid "Use HSV based algorithm"
+msgstr "Использовать алгоритм, основанный на HSV"
 
-msgid "merge nodes"
-msgstr "Объединять точки"
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
+msgstr ""
+"Использовать оттенок и насыщенность вместо значений RGB для выбора "
+"подходящих цветов."
 
 msgid "How often thinning operation should be applied (Default {0})."
 msgstr "Как часто должна применяться операция утончения (По умолчанию {0})."
@@ -25565,11 +26018,25 @@ msgstr "Как часто должна применяться операция 
 msgid "Thinning Iterations"
 msgstr "Итерации утончения"
 
-msgid "Use hue and saturation instead of RGB distinction"
-msgstr "Использовать оттенок и насыщенность вместо RGB отличия"
+msgid "show address dialog"
+msgstr "Показывать адресный диалог"
+
+msgid "Show Address Dialog after mapping an area"
+msgstr "Показывать адресный диалог после рисования области"
+
+msgid "merge nodes"
+msgstr "Объединять точки"
+
+msgid "Merge nodes with existing nodes"
+msgstr "Объединять точки с существующими точками"
+
+msgid "Debug"
+msgstr "Отладка"
 
-msgid "use HSV based algorithm"
-msgstr "использовать алгоритм, основанный на HSV"
+msgid "Debugging mode will write images for each processing step."
+msgstr ""
+"В отладочном режиме изображения будут записываться для каждого шага "
+"обработки."
 
 msgid "Street Name:"
 msgstr "Улица:"
@@ -26237,6 +26704,9 @@ msgstr "Сброс смещения"
 msgid "Reset offset (only vector images)"
 msgstr "Сброс смещения (только векторное изображение)"
 
+msgid "Blank Layer"
+msgstr "Пустой слой"
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr "слой WMS ({0}), квадратов загружено: {1}"
 
@@ -27783,14 +28253,330 @@ msgstr "Включает модуль сообщений об ошибках Map
 msgid "Missing input data"
 msgstr "Входные данные отсутствуют"
 
+msgid "Mapillary Images"
+msgstr "Изображения Mapillary"
+
+msgid "Mapillary layer"
+msgstr "Слой Mapillary"
+
+msgid "Total images:"
+msgstr "Всего изображений:"
+
+msgid "images"
+msgstr "снимков"
+
 msgid "Mapillary"
 msgstr "Mapillary"
 
-msgid "Create Mapillary layer."
-msgstr "Создать слой Mapillary."
+msgid "Create Mapillary layer"
+msgstr "Создать слой Mapillary"
 
-msgid "Export"
-msgstr "Экспорт"
+msgid "Start Mapillary layer"
+msgstr "Создать слой Mapillary"
+
+msgid "Download Mapillary images in current view"
+msgstr "Скачать снимки Mapillary в текущей области"
+
+msgid "Export pictures"
+msgstr "Экспортировать изображения"
+
+msgid "Export Mapillary pictures"
+msgstr "Экспортировать изображения Mapillary"
+
+msgid "Export images"
+msgstr "Экспорт снимков"
+
+msgid "Import pictures"
+msgstr "Импортировать изображения"
+
+msgid "Import local pictures"
+msgstr "Импортировать локальные изображения"
+
+msgid "Import pictures into Mapillary layer"
+msgstr "Импортировать изображения на слой Mapillary"
+
+msgid "Select pictures"
+msgstr "Выберите изображения"
+
+msgid "Import pictures into sequence"
+msgstr "Импортировать изображения в последовательность"
+
+msgid "Import pictures into Mapillary layer in a sequence"
+msgstr "Импортировать изображения в последовательность в слое Mapillary"
+
+msgid "Join mode"
+msgstr ""
+
+msgid "Join/unjoin pictures"
+msgstr "Соединить/разъединить снимки"
+
+msgid "Join Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures"
+msgstr "Отправить снимки"
+
+msgid "Upload Mapillary pictures"
+msgstr "Отправить снимки Mapillary"
+
+msgid "Upload pictures."
+msgstr "Отправить снимки."
+
+msgid "Walk mode"
+msgstr "Режим прогулки"
+
+msgid "Start walk mode"
+msgstr "Включить режим прогулки"
+
+msgid "Zoom to selected image"
+msgstr "Масштабировать до выбранного снимка"
+
+msgid "Zoom to the currently selected Mapillary image"
+msgstr "Приблизить вид до текущего выбранного снимка Mapillary"
+
+msgid "Uploaded {0} images"
+msgstr "Отправлено {0} снимков"
+
+msgid "Approve upload on the website"
+msgstr ""
+
+msgid "View in website"
+msgstr "Посмотреть на веб-сайте"
+
+msgid "Copy key"
+msgstr "Копировать ключ"
+
+msgid "Copy key tag"
+msgstr "Копировать тег"
+
+msgid "Edit on website"
+msgstr ""
+
+msgid "Export all images"
+msgstr "Экспортировать все снимки"
+
+msgid "Export selected sequence"
+msgstr "Экспортировать выбранную последовательность"
+
+msgid "Export selected images"
+msgstr "Экспортировать выбранные снимки"
+
+msgid "Rewrite imported images"
+msgstr "Перезаписать импортированные изображения"
+
+msgid "Select a folder"
+msgstr "Выберите папку"
+
+msgid "Explore"
+msgstr "Обзор"
+
+msgid "Select a directory"
+msgstr "Выберите каталог"
+
+msgid "Speed limit"
+msgstr "Ограничение скорости"
+
+msgid "Give way"
+msgstr "Уступите дорогу"
+
+msgid "No entry"
+msgstr "Въезд запрещён"
+
+msgid "Intersection danger"
+msgstr "Пересечение со второстепенной"
+
+msgid "Mandatory direction (any)"
+msgstr "Предписываемое направление движения (любое)"
+
+msgid "No turn"
+msgstr "Поворот запрещён"
+
+msgid "Uneven road"
+msgstr "Неровная дорога"
+
+msgid "No parking"
+msgstr "Остановка запрещена"
+
+msgid "No overtaking"
+msgstr "Обгон запрещён"
+
+msgid "Pedestrian crossing"
+msgstr "Пешеходный переход"
+
+msgid "Years"
+msgstr "лет"
+
+msgid "Months"
+msgstr "месяцев"
+
+msgid "Days"
+msgstr "дней"
+
+msgid "Mapillary filter"
+msgstr "Фильтр Mapillary"
+
+msgid "Open Mapillary filter dialog"
+msgstr "Открыть диалог фильтра Mapillary"
+
+msgid "Downloaded images"
+msgstr "Скачанные снимки"
+
+msgid "Only images with signs"
+msgstr "Только изображения со знаками"
+
+msgid "Choose signs"
+msgstr "Выберите знаки"
+
+msgid "Mapillary history"
+msgstr "История Mapillary"
+
+msgid "Open Mapillary history dialog"
+msgstr "Открыть диалог истории Mapillary"
+
+msgid "Open Mapillary window"
+msgstr "Открыть окно Mapillary"
+
+msgid "Mapillary dialog"
+msgstr "Диалог Mapillary"
+
+msgid "Open Mapillary main dialog"
+msgstr "Открыть главное диалоговое окно Mapillary"
+
+msgid "Next picture"
+msgstr "Следующий снимок"
+
+msgid "Shows the next picture in the sequence"
+msgstr "Показать следующее изображение в последовательности"
+
+msgid "Previous picture"
+msgstr "Предыдущий снимок"
+
+msgid "Shows the previous picture in the sequence"
+msgstr "Показать предыдущее изображение в последовательности"
+
+msgid "Jump to red"
+msgstr "Перейти к красному"
+
+msgid "Jumps to the picture at the other side of the red line"
+msgstr "Перейти к изображению на другой стороне красной линии"
+
+msgid "Jump to blue"
+msgstr "Перейти к синему"
+
+msgid "Jumps to the picture at the other side of the blue line"
+msgstr "Перейти к изображению на другой стороне синей линии"
+
+msgid "Stops the walk."
+msgstr "Остановить прогулку"
+
+msgid "Play"
+msgstr "Пуск"
+
+msgid "Continues with the paused walk."
+msgstr "Продолжить приостановленную прогулку"
+
+msgid "Pause"
+msgstr "Пауза"
+
+msgid "Pauses the walk."
+msgstr "Приостановить прогулку"
+
+msgid "Reverse buttons position when displaying images."
+msgstr "Поменять расположение кнопок при показе изображений."
+
+msgid "Display hour when the picture was taken"
+msgstr "Показывать время, когда был сделан снимок"
+
+msgid "Use 24 hour format"
+msgstr "Использовать 24-часовой формат"
+
+msgid "Move to picture''s location with next/previous buttons"
+msgstr ""
+"Перемещаться к местоположению снимка по кнопкам ''Предыдущий/Следующий "
+"снимок''"
+
+msgid "Download mode: "
+msgstr "Режим скачивания: "
+
+msgid "Upload selected sequence"
+msgstr "Отправить выделенную последовательность"
+
+msgid "Delete after upload"
+msgstr "Удалить после отправки"
+
+msgid "Wait for full quality pictures"
+msgstr "Ждать загрузки снимков в полном разрешении"
+
+msgid "Follow selected image"
+msgstr "Следовать за выделенным снимком"
+
+msgid "Go forward"
+msgstr "Вперёд"
+
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] "Удалён {0} снимок"
+msgstr[1] "Удалены {0} снимка"
+msgstr[2] "Удалено {0} снимков"
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] "Импортирован {0} снимок"
+msgstr[1] "Импортированы {0} снимка"
+msgstr[2] "Импортировано {0} снимков"
+
+msgid "2 images joined"
+msgstr "2 снимка соединены"
+
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] "Перемещено {0} изображение"
+msgstr[1] "Перемещены {0} изображения"
+msgstr[2] "Перемещено {0} изображений"
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] "Повёрнуто {0} изображение"
+msgstr[1] "Повёрнуты {0} изображения"
+msgstr[2] "Повёрнуто {0} изображений"
+
+msgid "2 images unjoined"
+msgstr "2 снимка разъединены"
+
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
+msgstr ""
+"Загруженная область OSM слишком велика. Режим скачивания изменён на "
+"полуавтоматический до перезапуска слоя."
+
+msgid "Downloading"
+msgstr "Загрузка"
+
+msgid "Select mode"
+msgstr "Режим выделения"
+
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
+msgstr ""
+"<html><head><title>Вход на Mapillary</title></head><body>Вход успешный, "
+"возвращаемся в JOSM.</body></html>"
+
+msgid "Downloading Mapillary images"
+msgstr "Скачивание снимков Mapillary"
+
+msgid "Total Mapillary images: {0}"
+msgstr "Всего снимков Mapillary: {0}"
+
+msgid "No images found"
+msgstr "Изображения не найдены"
+
+msgid "Finished upload"
+msgstr "Отправка завершена"
+
+msgid "Uploading: {0}"
+msgstr "Отправка: {0}"
 
 msgid "Measured values"
 msgstr "Измеренные значения"
@@ -27810,6 +28596,9 @@ msgstr "Длина выделения"
 msgid "Selection Area"
 msgstr "Область выделения"
 
+msgid "Selection Radius"
+msgstr "Радиус выделения"
+
 msgid "Angle"
 msgstr "Угол"
 
@@ -27875,49 +28664,6 @@ msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 "Невозможно найти точки \"via\" (через). Пожалуйста, проверьте, что вы выбрали"
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-"Запрос XAPI, например, '''' (для скачивания всех данных), ''[highway=*]'' "
-"или ''[[network=VRR][ref=603|613]''"
-
-msgid "Download from OSM mirror..."
-msgstr "Загрузка с зеркала OSM..."
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr "Этот запрос XAPI  возможно неверен, пожалуйста, перепроверьте"
-
-msgid "Object type: "
-msgstr "Тип объекта: "
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr "Тип объекта OSM для скачивания («*» — любой)"
-
-msgid "XAPI query: "
-msgstr "Запрос XAPI: "
-
-msgid "Download from Overpass API ..."
-msgstr "Загрузить с Overpass API ..."
-
-msgid "Download map data from Overpass API server."
-msgstr "Загрузить картографические данные с сервера Overpass API."
-
-msgid "Overpass query: "
-msgstr "Запрос к Overpass: "
-
-msgid "Select OSM mirror URL"
-msgstr "Выберите адрес зеркала OSM"
-
-msgid "Select OSM mirror URL to download from."
-msgstr "Выберите URL зеркала OSM для скачивания."
-
-msgid "Base URL"
-msgstr "Основной адрес"
-
-msgid "Enforce meta data"
-msgstr "Запрашивать метаданные"
-
 msgid "About Plugin"
 msgstr "О модуле"
 
@@ -28164,6 +28910,9 @@ msgstr "Различия"
 msgid "Perform diff between current data set and existing OSM data."
 msgstr "Показывает различия между текущим набором данных и данными OSM."
 
+msgid "Tools"
+msgstr "Инструменты"
+
 msgid "Open tools menu for this data."
 msgstr "Выбрать инструмент"
 
@@ -29449,6 +30198,27 @@ msgstr "Общественный транспорт: Включить путев
 msgid "Public Transport: Edit waypoint name"
 msgstr "Общественный транспорт: Редактировать имя точки"
 
+msgid "Public transport routes"
+msgstr "Маршруты общественного транспорта"
+
+msgid "Toggle direction arrows"
+msgstr "Показать/скрыть стрелки направлений"
+
+msgid "Toggle reference labels"
+msgstr "Показать/скрыть метки"
+
+msgid "Visualize public transport routes"
+msgstr "Визуализировать маршруты общественного транспорта"
+
+msgid "Filters"
+msgstr "Фильтры"
+
+msgid "Choose Filter"
+msgstr "Выберите фильтр"
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr "Ошибка инициализации JSlider. Убедитесь в корректности  meta-inf."
+
 msgid "Relation Toolbox"
 msgstr "Relation Toolbox"
 
@@ -29621,6 +30391,9 @@ msgstr "Отменённый пакет правок"
 msgid "It is not allowed to revert changeset from {0}"
 msgstr "Нелья откатить пакет правок из {0}"
 
+msgid "Downloading objects history"
+msgstr "Скачивание истории объектов"
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr "Отсутствует результат объединения для {0} с id {1}"
 
@@ -29630,6 +30403,9 @@ msgstr "История объектов"
 msgid "History reverter"
 msgstr "Откатчик истории"
 
+msgid "Tool: Display objects history dialog"
+msgstr "Инструменты: Показать диалог истории объектов"
+
 msgid "Preparing history data..."
 msgstr "Подготовка данных истории..."
 
@@ -29817,6 +30593,9 @@ msgstr "Новое значение для {0}"
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr "Настройка ''{0}'' отсутствует. Невозможно инициализировать SdsApi."
 
+msgid "Proxy Authentication Required"
+msgstr "Необходима авторизация на прокси"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -30017,6 +30796,39 @@ msgstr "Порог близости точек (м)"
 msgid "SeaMap Editor"
 msgstr "Редактор морских карт"
 
+msgid "Spline drawing"
+msgstr "Рисование сплайна"
+
+msgid "Draw a spline curve"
+msgstr "Нарисовать сплайн"
+
+msgid "Spline goes outside of the world."
+msgstr "Сплайн выходит за пределы мира."
+
+msgid "Add an existing node to spline: {0}"
+msgstr "Добавить существующую точку к сплайну: {0}"
+
+msgid "Add a new node to spline: {0}"
+msgstr "Добавить новую точку к сплайну: {0}"
+
+msgid "Delete spline node {0}"
+msgstr "Удалить точку сплайна {0}"
+
+msgid "Finish spline"
+msgstr "Завершить сплайн"
+
+msgid "Splines"
+msgstr "Сплайны"
+
+msgid "Spline drawing preferences"
+msgstr "Настройки сплайна"
+
+msgid "Curve steps"
+msgstr "Число сегментов кривой"
+
+msgid "Undelete node {0}"
+msgstr "Вернуть удалённую точку {0}"
+
 msgid "OSM Export"
 msgstr "Экспорт OSM"
 
@@ -30026,6 +30838,9 @@ msgstr "Экспортировать данные о трафике в network-
 msgid "SUMO Export"
 msgstr "Экспорт в SUMO"
 
+msgid "Export"
+msgstr "Экспорт"
+
 msgid "AutoSave LiveData"
 msgstr "Автосохранение данных позиционирования"
 
@@ -30273,9 +31088,6 @@ msgstr "Ошибка Tracer2"
 msgid "Parameter for server request"
 msgstr "Параметры запроса к серверу"
 
-msgid "Tile size:"
-msgstr "Размер квадрата:"
-
 msgid "Resolution:"
 msgstr "Разрешение:"
 
@@ -31972,9 +32784,6 @@ msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 "Поиск путевой точки. Перемещает карту на путевую точку и выделяет ее."
 
-msgid "Way Select"
-msgstr "Выбрать линию"
-
 msgid "Add names from Wikipedia"
 msgstr "Добавить названия из Википедии"
 
diff --git a/i18n/po/sk.po b/i18n/po/sk.po
index 452972f..cab7cfc 100644
--- a/i18n/po/sk.po
+++ b/i18n/po/sk.po
@@ -9,16 +9,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
-"PO-Revision-Date: 2015-05-10 19:55+0000\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
+"PO-Revision-Date: 2015-10-07 19:18+0000\n"
 "Last-Translator: aceman444 <Unknown>\n"
 "Language-Team: Slovak <>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=(n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:56+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 05:00+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: sk\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -99,23 +99,20 @@ msgstr "Načítavajú sa predvoľby mapových podkladov"
 msgid "Updating user interface"
 msgstr "Aktualizujem používateľské rozhranie"
 
-msgid "{0} completed in {1}"
-msgstr "{0} dokončené za {1}"
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "Ignorujem deformovanú URL adresu súboru: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "Ignorujem zdeformovanú URL: \"{0}\""
 
 msgid "Warning"
 msgstr "Varovanie"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "Ignorujem deformovanú URL adresu súboru: \"{0}\""
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 "Hodnota parametra \"downloadgps\" nesmie byť názov súboru, ani URL adresa "
 "súboru"
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "Ignorujem zdeformovanú URL: \"{0}\""
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -473,6 +470,9 @@ msgstr "Prepnúť lištu s panelmi"
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Prepnúť lištu s panelmi, maximalizovať miesto na mapu"
 
+msgid "Distribute Nodes"
+msgstr "Rozmiestniť body"
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr "Rozložiť zvolené body v rovnakej vzdialenosti od seba pozdĺž trasy."
 
@@ -1069,9 +1069,9 @@ msgid ""
 msgstr ""
 "<h3>Keď je vybratá jedna alebo viac ciest, tvar sa upraví tak, že všetky "
 "uhly majú 90 alebo 180 stupňov.</h3>K výberu môžte pridať dva body. Potom sa "
-"smer upraví podľa týchto dvoch nastavených bodov. (Potom, môžte vrátiť posun "
-"niektorých bodov:<br>Tie vyberte a stlačte skratku pre Pravouhlosť / "
-"Obnovenie (undo). Prednastavené je Shift+Q.)"
+"smer upraví podľa týchto dvoch ukotvených bodov. (Potom môžte vrátiť posun "
+"niektorých bodov:<br>Tie vyberte a stlačte skratku pre Pravouhlosť / Vrátiť "
+"(undo). Prednastavené je Shift+Q.)"
 
 msgid "Orthogonalize Shape"
 msgstr "Vytvoriť pravouhlý tvar"
@@ -1123,6 +1123,31 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr "Prosím vyberte cesty s uhlami približne 90 alebo 180 stupňov."
 
+msgid "Download from Overpass API ..."
+msgstr "Stiahnuť cez Overpass API ..."
+
+msgid "Download map data from Overpass API server."
+msgstr "Stiahnuť dáta zo servera Overpass API ..."
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+"Vytvorí vyhľadávací reťazec pre Overpass pomocou pomocníka Overpass Turbo"
+
+msgid "Build query"
+msgstr "Vytvoriť požiadavku"
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr "<html>Pomocník Overpass nedokázal analyzovať nasledovnú požiadavku:"
+
+msgid "Parse error"
+msgstr "Chyba spracovania"
+
+msgid "Overpass query: "
+msgstr "Overpass požiadavka: "
+
+msgid "Overpass server: "
+msgstr "Overpass server: "
+
 msgid "Paste"
 msgstr "Vložiť"
 
@@ -1452,14 +1477,11 @@ msgid_plural ""
 "There is more than one way using the nodes you selected. Please select the "
 "way also."
 msgstr[0] ""
-"Je tam viac ako jedna cesta používajúca body, ktoré ste vybrali. Prosím "
-"vyberte tiež cestu."
+"Vybrané body používa viac ako jedna cesta. Prosím vyberte tiež cestu."
 msgstr[1] ""
-"Je tam viac ako jedna cesta používajúca bod, ktorý ste vybrali. Prosím "
-"vyberte tiež cestu."
+"Vybraný bod používa viac ako jedna cesta. Prosím vyberte tiež cestu."
 msgstr[2] ""
-"Je tam viac ako jedna cesta používajúca body, ktoré ste vybrali. Prosím "
-"vyberte tiež cestu."
+"Vybrané body používa viac ako jedna cesta. Prosím vyberte tiež cestu."
 
 msgid "You must select two or more nodes to split a circular way."
 msgstr "Musíte zvoliť minimálne dva body pre rozdelenie uzavretej cesty."
@@ -2127,15 +2149,6 @@ msgstr "Zameriavanie uhlov je aktívne."
 msgid "Finish drawing."
 msgstr "Koniec kreslenia."
 
-msgid "FIX"
-msgstr "FIX"
-
-msgid "draw angle snap"
-msgstr "kresliť uhol prichytenia"
-
-msgid "draw angle snap highlight"
-msgstr "zvýraznenie prichytenia kresleného uhla"
-
 msgid "Toggle snapping by {0}"
 msgstr "Prepínať prichytenie s {0}"
 
@@ -2157,6 +2170,15 @@ msgstr "0,45,90,..."
 msgid "0,30,45,60,90,..."
 msgstr "0,30,45,60,90,..."
 
+msgid "FIX"
+msgstr "FIX"
+
+msgid "draw angle snap"
+msgstr "kresliť uhol prichytenia"
+
+msgid "draw angle snap highlight"
+msgstr "zvýraznenie prichytenia kresleného uhla"
+
 msgid "Angle snapping"
 msgstr "Zameriavanie uhlov"
 
@@ -2290,9 +2312,6 @@ msgstr ""
 "ParallelWayAction\n"
 "Zvolené cesty musia tvoriť jednoduché nerozvetvené dráhy"
 
-msgid "Make parallel way error"
-msgstr "Vytvorenie rovnobežnej cesty zlyhalo"
-
 msgid "Drag play head"
 msgstr "Ťahať play head"
 
@@ -2526,9 +2545,15 @@ msgstr "všetky objekty"
 msgid "Also include incomplete and deleted objects in search."
 msgstr "Tiež zahŕňať v hľadaní neúplné a odstránené objekty."
 
+msgid "standard"
+msgstr "štandardný"
+
 msgid "regular expression"
 msgstr "regulárny výraz"
 
+msgid "MapCSS selector"
+msgstr "Identifikátor MapCSS"
+
 msgid "add toolbar button"
 msgstr "pridať tlačidlo na panel nástrojov"
 
@@ -2751,6 +2776,10 @@ msgid "RX"
 msgstr "RX"
 
 msgctxt "search"
+msgid "CSS"
+msgstr "CSS"
+
+msgctxt "search"
 msgid "A"
 msgstr "A"
 
@@ -2803,6 +2832,9 @@ msgstr "Očakávaný rozsah čísel"
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr "Neočakávaný symbol. Očakávaný {0}, nájdený {1}"
 
+msgid "Failed to parse MapCSS selector"
+msgstr "Nepodarilo sa načítať identifikátor MapCSS."
+
 msgid "Unexpected token: {0}"
 msgstr "Neočakávaný symbol: {0}"
 
@@ -3315,6 +3347,24 @@ msgstr "Nepodarilo sa vytvoriť chýbajúci cache adresár: {0}"
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr "<html>Nepodarilo sa vytvoriť chýbajúci adresár zásobníka: {0}</html>"
 
+msgid "Unable to delete temporary file {0}"
+msgstr "Nepodarilo sa odstrániť dočasný súbor {0}"
+
+msgid "Unable to set file non-readable {0}"
+msgstr "Nepodarilo sa odstrániť práva na čítanie zo súboru {0}"
+
+msgid "Unable to set file non-writable {0}"
+msgstr "Nepodarilo sa odstrániť práva na zápis zo súboru {0}"
+
+msgid "Unable to set file non-executable {0}"
+msgstr "Nepodarilo sa odstrániť práva na spúšťanie zo súboru {0}"
+
+msgid "Unable to set file readable {0}"
+msgstr "Nepodarilo sa nastaviť práva na čítanie zo súboru {0}"
+
+msgid "Unable to set file writable {0}"
+msgstr "Nepodarilo sa odstrániť na zápis zo súboru {0}"
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3452,12 +3502,51 @@ msgctxt "compass"
 msgid "E"
 msgstr "V"
 
-msgid "Not in cache"
-msgstr "Nie je v cache pamäti"
-
 msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr "Projekcia ''{0}'' nie je nájdená, záložka ''{1}'' nie je použiteľná"
 
+msgid "HTTP error {0} when loading tiles"
+msgstr "Chyba HTTP {0} pri sťahovaní dlaždíc"
+
+msgid "Error downloading tiles: {0}"
+msgstr "Chyba pri sťahovaní dlaždíc: {0}"
+
+msgid "Could not load image from tile server"
+msgstr "Nepodarilo sa načítať obrázok zo servera dlaždíc"
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+"{0} nie je platný parameter pre WMS. Prosím skontrolujte túto adresu URL "
+"servera:\n"
+"{1}"
+
+msgid "Select WMTS layer"
+msgstr "Zvoľte vrstvu WMTS"
+
+msgid "Layer name"
+msgstr "Názov vrstvy"
+
+msgid "Projection"
+msgstr "Projekcia"
+
+msgid "Matrix set identifier"
+msgstr "Identifikátor mriežky"
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr "Dokument getCapabilities nedefinuje žiadne vrstvy: {0}"
+
+msgid "No layer selected"
+msgstr "Nebola zvolená žiadna vrstva"
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
+msgstr ""
+"Podporované sú len štvorcové dlaždice. Server vrátil {0}x{1} pre "
+"identifikátor {2} TileMatrixu"
+
 msgid "ID > 0 expected. Got {0}."
 msgstr "Očakávané ID > 0. Obdržaná hodnota však bola {0}."
 
@@ -3673,6 +3762,14 @@ msgstr "text"
 msgid "areatext"
 msgstr "oblasť textu"
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr "Projekcia UTM (\"+proj=utm\") vyžaduje parameter \"+zone=...\"."
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+"Pre parameter \"+zone=...\" bola očakávaná celočíselná hodnota v intervale 1-"
+"60."
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr "Parameter musí začínať znakom \"+\" (nájdené ''{0}'')"
 
@@ -3700,15 +3797,15 @@ msgstr "Elipsoid ''{0}'' nie je podporovaný."
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr "Kombinácia parametrov elipsoidu nie je podporovaná."
 
+msgid "Unknown datum identifier: ''{0}''"
+msgstr "Neznámy identifikátor údaju: \"{0}\""
+
 msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr "Elipsoid sa vyžaduje (+ellps=* alebo +a=*, +b=*)"
 
 msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr "Súbor posunu mriežky \"{0}\" nie je pre voľbu +nadgrids podporovaná."
 
-msgid "Unknown datum identifier: ''{0}''"
-msgstr "Neznámy identifikátor údaju: \"{0}\""
-
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
 msgstr "Vyžaduje sa hodnota (+datum=*, +towgs84 =* alebo +nadgrids=*)"
 
@@ -4358,9 +4455,6 @@ msgstr "Kľúč značky je dlhší než je povolené"
 msgid "Tags with empty values"
 msgstr "Klúče s prázdnými hodnotami"
 
-msgid "Invalid property key"
-msgstr "Neplatné vlastnosti kľúča"
-
 msgid "Invalid white space in property key"
 msgstr "Neplatná medzera vo vlastnosti klúča"
 
@@ -4370,12 +4464,24 @@ msgstr "Hodnoty začínajú alebo končia medzerou"
 msgid "Property values contain HTML entity"
 msgstr "Hodnotu obsahujú HTML entitu"
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr "Kľúč \"{0}\" sa podobá na \"{1}\"."
+
+msgid "Misspelled property key"
+msgstr "Preklep v názve kľúča"
+
 msgid "Key ''{0}'' not in presets."
 msgstr "Kľúč ''{0}'' sa nenachádza v zozname predvolených hodnôt."
 
 msgid "Presets do not contain property key"
 msgstr "Predvoľby neobsahujú kľúč"
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr "Hodnota \"{0}\" pre kľúč \"{1}\" sa podobá na \"{2}\"."
+
+msgid "Misspelled property value"
+msgstr "Preklep v hodnote vlastnosti"
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr "Hodnota ''{0}'' pre kľúč ''{1}'' nie je v predvolenom zozname."
 
@@ -4558,6 +4664,9 @@ msgstr "Bod cesty je blízko inej cesty"
 msgid "Connected way end node near other way"
 msgstr "Koncový bod spojenej cesty je blízko inej cesty"
 
+msgid "Unconnected nodes without physical tags"
+msgstr "Nespojené body, bez fyzických značiek"
+
 msgid "Untagged and unconnected nodes"
 msgstr "Neoznačkované a nepripojené body"
 
@@ -4565,9 +4674,6 @@ msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 "Tento test hľadá body bez značiek, ktoré nie sú súčasťou žiadnej cesty."
 
-msgid "Unconnected nodes without physical tags"
-msgstr "Nespojené body, bez fyzických značiek"
-
 msgid "No tags"
 msgstr "Žiadne značky"
 
@@ -4766,6 +4872,7 @@ msgstr "Kliknutím zavriete dialóg"
 msgid "Imagery offset"
 msgstr "Posun mapového podkladu"
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr "Mapové podklady"
 
@@ -4924,7 +5031,7 @@ msgid "Setting defaults"
 msgstr "Nastavujem východzie hodnoty"
 
 msgid "Creating main GUI"
-msgstr "Vytváram hlavné grafické rozhranie ( GUI )"
+msgstr "Vytváram hlavné grafické rozhranie (GUI)"
 
 msgid "Loading plugins"
 msgstr "Načítavam pluginy"
@@ -5007,45 +5114,56 @@ msgstr ""
 "dôsledkom chýbajúcich nastavení proxy servera.<br>Chcete zmeniť nastavenia "
 "proxy teraz?"
 
+msgctxt "menu"
 msgid "File"
 msgstr "Súbor"
 
-msgid "Session"
-msgstr "Sedenie"
+msgctxt "menu"
+msgid "Edit"
+msgstr "Upraviť"
 
+msgctxt "menu"
 msgid "View"
 msgstr "Zobraziť"
 
+msgctxt "menu"
 msgid "Tools"
 msgstr "Nástroje"
 
+msgctxt "menu"
 msgid "More tools"
 msgstr "Viac nástrojov"
 
+msgctxt "menu"
 msgid "Data"
 msgstr "Údaje"
 
+msgctxt "menu"
 msgid "Selection"
 msgstr "Výber"
 
+msgctxt "menu"
 msgid "Presets"
 msgstr "Predvoľby"
 
 msgid "More..."
 msgstr "Ďalšie..."
 
+msgctxt "menu"
 msgid "GPS"
 msgstr "GPS"
 
+msgctxt "menu"
 msgid "Windows"
 msgstr "Okná"
 
+msgctxt "menu"
+msgid "Help"
+msgstr "Pomocník"
+
 msgid "Menu: {0}"
 msgstr "Menu: {0}"
 
-msgid "Save and load the current session (list of layers, etc.)"
-msgstr "Uložiť a načítať aktuálne sedenie (zoznam vrstiev, atď.)"
-
 msgid "Edit toolbar"
 msgstr "Editačná nástrojová lišta"
 
@@ -5067,6 +5185,7 @@ msgstr "Kliknite pre zobrazenie karty s nastaveniami pre mapové podklady"
 msgid "Search menu items"
 msgstr "Hľadať v položkách menu"
 
+msgctxt "menu"
 msgid "Audio"
 msgstr "Zvuk"
 
@@ -5191,68 +5310,17 @@ msgstr "Na pozadí"
 msgid "Click to run job in background"
 msgstr "Kliknite na spustenie úlohy na pozadí"
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-"Letecký mapový podklad môže byť posunutý. Skontrolujte jeho posun za pomoci "
-"GPS záznamov!"
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-
-msgid "Details..."
-msgstr "Podrobnosti..."
-
-msgid "Hide this message and never show it again"
-msgstr "Schovať túto správu a viac ju nezobrazovať"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-"<html>Prosím potvrdiť odstránenie <strong>1 objekt</strong> z <strong>1 "
-"relácie</strong>.</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>Prosím potvrdiť odstránenie <strong>1 objekt</strong> z <strong>{0} "
-"relácií</strong>.</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>Prosím potvrdiť odstránenie <strong>{0} objektov</strong> z "
-"<strong>{1} relácií</strong>.</html>"
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] "Vymazávam {0} objektov"
-msgstr[1] "Vymazávam {0} objekt"
-msgstr[2] "Vymazávam {0} objekty"
-
-msgid "Delete objects"
-msgstr "Zmazať objekty"
-
-msgid "To delete"
-msgstr "Na zmazanie"
-
-msgid "From Relation"
-msgstr "Z relácie"
-
-msgid "Pos."
-msgstr "Pos."
+msgid " ({0})"
+msgstr " ({0})"
 
-msgid "Role"
-msgstr "Funkcia"
+msgid "{0} completed in {1}"
+msgstr "{0} dokončené za {1}"
 
-msgid "Click to close the dialog and remove the object from the relations"
-msgstr "Kliknutie zavrie dialóg a odstráni objekt z relácií"
+msgid "Enlarge"
+msgstr "Zväčšiť"
 
-msgid "Click to close the dialog and to abort deleting the objects"
-msgstr "Kliknutie zavrie dialóg a zruší vymazanie objektov"
+msgid "Shrink"
+msgstr "Zmenšiť"
 
 msgid ""
 "<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
@@ -5718,6 +5786,9 @@ msgstr "Udržať ich vymazaný stav"
 msgid "Undecide conflict between deleted state"
 msgstr "Nevyriešené konflikty medzi vymazávaným stavom"
 
+msgid "Role"
+msgstr "Funkcia"
+
 msgid "Primitive"
 msgstr "Základný objekt"
 
@@ -6008,6 +6079,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr "Použiť túto úlohu pre všetkých členov"
 
+msgid "Pos."
+msgstr "Pos."
+
 msgid "Orig. Way"
 msgstr "Orig. cesta"
 
@@ -6174,6 +6248,48 @@ msgstr "Rozhodnutie konfliktov"
 msgid "Resolve conflicts for ''{0}''"
 msgstr "Rozhodnúť konflikt pre ''{0}''"
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+"<html>Prosím potvrdiť odstránenie <strong>1 objekt</strong> z <strong>1 "
+"relácie</strong>.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Prosím potvrdiť odstránenie <strong>1 objekt</strong> z <strong>{0} "
+"relácií</strong>.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Prosím potvrdiť odstránenie <strong>{0} objektov</strong> z "
+"<strong>{1} relácií</strong>.</html>"
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] "Vymazávam {0} objektov"
+msgstr[1] "Vymazávam {0} objekt"
+msgstr[2] "Vymazávam {0} objekty"
+
+msgid "Delete objects"
+msgstr "Zmazať objekty"
+
+msgid "To delete"
+msgstr "Na zmazanie"
+
+msgid "From Relation"
+msgstr "Z relácie"
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr "Kliknutie zavrie dialóg a odstráni objekt z relácií"
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr "Kliknutie zavrie dialóg a zruší vymazanie objektov"
+
 msgid "Filter objects and hide/disable them."
 msgstr "Filtrovať objekty a schovať/vypnúť ich."
 
@@ -6280,8 +6396,8 @@ msgstr "Rozšírené info objektov"
 msgid "map style"
 msgstr "štýl mapy"
 
-msgid " ({0})"
-msgstr " ({0})"
+msgid "edit counts"
+msgstr "počet zmien"
 
 msgid "not in data set"
 msgstr "nie je v súbore dát"
@@ -6421,6 +6537,12 @@ msgid ""
 msgstr ""
 "Upozornenie: Dva vybrané objekty majú rovnaké, ale nie sú totožné formáty."
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] "{0} používateľov naposledy menilo výber:"
+msgstr[1] "{0} používateľ naposledy menil výber:"
+msgstr[2] "{0} používatelia naposledy menili výber:"
+
 msgid "xml"
 msgstr "xml"
 
@@ -6430,28 +6552,58 @@ msgstr "mapcss"
 msgid "unknown"
 msgstr "neznámy"
 
+msgid "Enter the coordinates for the new node."
+msgstr "Zadajte súradnice pre nový bod."
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr "Dĺžku a šírku môžete oddeliť medzerou, čiarkou alebo bodkočiarkou."
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
 msgstr ""
-"Zadajte súradnice nového bodu.<br/>Môžete oddeliť zemepisnú dĺžku a šírku "
-"medzerou, čiarkou, alebo bodkočiarkou.<br/>Použite kladné čísla alebo znaky "
-"N, E na označenie svetových strán sever a východ .<br/>Pre svetové strany "
-"juh a západ, môžete použiť buď záporné čísla alebo znaky S, W.<br/>Súradnice "
-"môžu byť v jednom z troch "
-"formátov:<ul><li><i>stupne</i><tt>°</tt></li><li><i>stupne</i><tt>°</"
-"tt> <i>minúty</i><tt>'</tt></li><li><i>stupne</i><tt>°</tt> "
-"<i>minúty</i><tt>'</tt> <i>sekundy</i><tt>&quot</tt></li></ul>Symboly "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> sú nepovinné.<br/><br/>Príklady:<ul>{0}</ul>"
+"Použite kladné čísla alebo písmená N a E na určenie severného alebo "
+"východného smeru."
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+"Pre južný alebo západný smer použite záporné čísla alebo písmená S a W."
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr "Hodnota súradníc môže byť v jednom z troch formátov:"
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr "<i>stupne</i><tt>°</tt>"
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr "<i>stupne</i><tt>°</tt> <i>minúty</i><tt>'</tt>"
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+"<i>stupne</i><tt>°</tt> <i>minúty</i><tt>'</tt> "
+"<i>sekundy</i><tt>&quot</tt>"
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+"Symboly <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> sú nepovinné."
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+"Môžete tiež použiť zápis <tt>lat=\"...\" lon=\"...\"</tt> alebo "
+"<tt>lat=''...'' lon=''...''</tt>."
+
+msgid "Some examples:"
+msgstr "Príklady:"
 
 msgid "Projected coordinates:"
 msgstr "Projektované súradnice:"
@@ -6498,6 +6650,12 @@ msgstr "Nepriehladnosť"
 msgid "Adjust opacity of the layer."
 msgstr "Nastavte nepriehľadnosť vrstvy."
 
+msgid "Gamma"
+msgstr "Gamma"
+
+msgid "Adjust gamma value of the layer."
+msgstr "Upraviť hodnotu gamma pre vrstvu."
+
 msgid "Activate"
 msgstr "Aktivovať"
 
@@ -6627,6 +6785,12 @@ msgstr "Nastavenia štýlu"
 msgid "Customize the style"
 msgstr "Upraviť štýl"
 
+msgid "Mini map"
+msgstr "Minimapa"
+
+msgid "Displays a small map of the current edit location"
+msgstr "Zobrazí malú mapu upravovanej oblasti"
+
 msgid "List of notes"
 msgstr "Zoznam poznámok"
 
@@ -6685,14 +6849,18 @@ msgstr "ID objektu:"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "Vložiť ID objektu, ktorý má byť stiahnutý"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr "ID objektov môžu byť oddelené čiarkou alebo medzerou, napr.: {0}"
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
 msgstr ""
-"ID objektov môžu byť oddelené čiarkou alebo medzerou.<br/>Príklady: "
-"{0}<br/>V zmiečanom režime definujte objekty nasledovne: {1}<br/>({2} pre "
-"<i>bod</i>, {3} pre <i>cestu</i>, a {4} pre <i>reláciu</i>)"
+"V zmiešanom režime môžete určiť objekty takto: {0}<br/>({1} znamená "
+"<i>bod</i>, {2} <i>cestu</i>, a {3} <i>reláciu</i>)"
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
+msgstr "Intervaly ID objektov sa zadávajú s pomlčkou, napr.: {0}"
 
 msgid ""
 "Invalid ID list specified\n"
@@ -6722,6 +6890,9 @@ msgstr "Relácie: {0}/{1}"
 msgid "Relations: {0}"
 msgstr "Relácie: {0}"
 
+msgid "Selection"
+msgstr "Výber"
+
 msgid "Open a selection list window."
 msgstr "Otvoriť okno výberu."
 
@@ -6817,6 +6988,12 @@ msgstr "Otvoriť okno pre overovanie."
 msgid "Validation results"
 msgstr "Výsledky overovania"
 
+msgid "Lookup"
+msgstr "Vyhľadať"
+
+msgid "Looks up the selected primitives in the error list."
+msgstr "Vyhľadá vybrané objekty v zozname chýb."
+
 msgid "Fix"
 msgstr "Opraviť"
 
@@ -6883,7 +7060,7 @@ msgid "Query"
 msgstr "Požiadavka"
 
 msgid "Launch the dialog for querying changesets"
-msgstr "Spustiť dialógové okno pre požiadavky na zmenové súbory"
+msgstr "Spustiť dialógové okno pre vyhľadávanie zmenových súborov"
 
 msgid "Remove from cache"
 msgstr "Odstrániť z vyrovnávacej pamäte"
@@ -7128,13 +7305,13 @@ msgstr ""
 "Vybrať iba zmenové súbory súvisiace s konkrétnym ohraničujúcim rámcom"
 
 msgid "Query open changesets only"
-msgstr "Požiadať otvoriť iba zmenové súbory"
+msgstr "Vyžiadať iba otvorené zmenové súbory"
 
 msgid "Query closed changesets only"
-msgstr "Požiadať zatvoriť iba zmenové súbory"
+msgstr "Vyžiadať iba zatvorené zmenové súbory"
 
 msgid "Query both open and closed changesets"
-msgstr "Požiadať oboje otvoriť a zatvoriť zmenové súbory"
+msgstr "Vyžiadať otvorené aj zatvorené zmenové súbory"
 
 msgid "User ID:"
 msgstr "ID používateľa:"
@@ -7164,7 +7341,7 @@ msgid ""
 "Cannot restrict changeset query to the current user because the current user "
 "is anonymous"
 msgstr ""
-"Nemožno obmedziť požiadavku zmenového súboru pre aktuálneho používateľa, "
+"Nemožno obmedziť požiadavku zmenových súborov na aktuálneho používateľa, "
 "pretože aktuálny používateľ je anonymný"
 
 msgid "Current value ''{0}'' for user ID is not valid"
@@ -7172,7 +7349,7 @@ msgstr "Aktuálna hodnota ''{0}'' pre používateľské ID je neplatná"
 
 msgid "Cannot restrict the changeset query to the user name ''{0}''"
 msgstr ""
-"Nemožno omedziť požiadavku na zmenový súbor na nemo používateľa ''{0}''"
+"Nemožno obmedziť požiadavku zmenových súborov na meno používateľa \"{0}\""
 
 msgid "Please enter a valid user ID"
 msgstr "Prosím vložte platné ID používateľa"
@@ -7212,15 +7389,15 @@ msgid ""
 "Cannot build changeset query with time based restrictions. Input is not "
 "valid."
 msgstr ""
-"Nemôžem postaviť požiadavku pre zmenový súbor s časovým obmedzením. Vstup "
+"Nemôžem vytvoriť požiadavku na zmenové súbory s časovým obmedzením. Vstup "
 "nie je platný."
 
 msgid ""
 "<html>Please enter valid date/time values to restrict<br>the query to a "
 "specific time range.</html>"
 msgstr ""
-"<html>Prosím vložte platnú hodnotu limity dátumu/času<br>požiadavka na "
-"konkrétny časový rozsah.</html>"
+"<html>Prosím vložte platnú hodnotu dátumu/času pre obmedzenie<br>požiadavky "
+"na konkrétny časový rozsah.</html>"
 
 msgid "Invalid date/time values"
 msgstr "Neplatná hodnota dátum/čas"
@@ -7229,15 +7406,15 @@ msgid ""
 "Cannot restrict the changeset query to a specific bounding box. The input is "
 "invalid."
 msgstr ""
-"Nemožno obmedziť požiadavku pre zmenový súbor na špecifický ohraničujúci "
+"Nemožno obmedziť požiadavku na zmenové súbory na špecifický ohraničujúci "
 "rámec. Vstup je neplatný."
 
 msgid ""
 "<html>Please enter valid longitude/latitude values to restrict<br>the "
 "changeset query to a specific bounding box.</html>"
 msgstr ""
-"<html>Prosím vložte platné hodnoty zemepisnej dĺžky/šírky na "
-"obmedzenie<br>požiadavky na zmenový súbor na špecifický ohraničujúci "
+"<html>Prosím vložte platné hodnoty zemepisnej dĺžky/šírky pre "
+"obmedzenie<br>požiadavky na zmenové súbory na špecifický ohraničujúci "
 "rámec.</html>"
 
 msgid "Invalid bounding box"
@@ -7282,8 +7459,8 @@ msgid ""
 "<html>Select to restrict the query to your changesets only.<br>Unselect to "
 "include all changesets in the query.</html>"
 msgstr ""
-"<html>Vybrať podľa obmedzenej požiadavky iba vaše zmenové súbory.<br>Odobrať "
-"všetky vložené zmenové súbory v požiadavke.</html>"
+"<html>Zvoľte pre obmedzenie požiadavky iba na vaše zmenové súbory.<br>Ak "
+"nezvolíte, do požiadavky budú vybrané všetky zmenové súbory.</html>"
 
 msgid ""
 "<html>Please select one the following <strong>standard "
@@ -7328,7 +7505,7 @@ msgstr ""
 
 msgid "Cannot create changeset query for open changesets of anonymous user"
 msgstr ""
-"Nemôžem vytvoriť dotaz na sadu zmien pre otvorené sady zmien anonymného "
+"Nemôžem vytvoriť požiadavku na zmenové súbory na otvorené súbory anonymného "
 "používateľa"
 
 msgid "Basic"
@@ -7347,22 +7524,22 @@ msgid "Advanced"
 msgstr "Rozšírené"
 
 msgid "Use a custom changeset query"
-msgstr "Použiť obvyklú požiadavku pre zmenový súbor"
+msgstr "Použiť upravenú požiadavku na zmenové súbory"
 
 msgid "Query changesets"
-msgstr "Požiadavka zmenových súborov"
+msgstr "Požiadavka na zmenové súbory"
 
 msgid "Query and download changesets"
-msgstr "Požiadať a stiahnuť zmenové súbary"
+msgstr "Požiadať a stiahnuť zmenové súbory"
 
 msgid "Please enter a valid changeset query URL first."
-msgstr "Prosím najskôr vložte platnú URL požiadavku pre zmenový súbor."
+msgstr "Prosím najskôr vložte platnú URL pre požiadavky na zmenové súbory."
 
 msgid "Illegal changeset query URL"
-msgstr "Neplatná požiadavka URL pre zmenový súbor"
+msgstr "Neplatná URL pre požiadavky na zmenové súbory"
 
 msgid "Close the dialog and abort querying of changesets"
-msgstr "Zatvoriť dialóg a zrušiť požiadavku pre zmenové súbory"
+msgstr "Zatvoriť dialóg a zrušiť požiadavku na zmenové súbory"
 
 msgid "Querying and downloading changesets"
 msgstr "Žiadanie a sťahovanie zmenových súborov"
@@ -7391,7 +7568,7 @@ msgstr ""
 "''{0}'', bez ohľadu na host, port a cestu URL zadanú nižšie."
 
 msgid "This changeset query URL is invalid"
-msgstr "Táto požiadavka URL na zmenové súbory je chybná"
+msgstr "Táto URl pre požiadavky na zmenové súbory je chybná"
 
 msgid "Discardable key: selection Foreground"
 msgstr "Zbytočný kľúč: popredie výberu"
@@ -7480,6 +7657,12 @@ msgstr "Prejsť na OSM wiki pre pomoc so značkami (F1)"
 msgid "Launch browser with wiki help for selected object"
 msgstr "Spustiť prehliadač s wiki nápovedu pre vybraný objekt"
 
+msgid "Go to Taginfo"
+msgstr "Prejsť na Taginfo"
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr "Spustiť prehliadač so štatistikami Taginfo pre zvolený objekt"
+
 msgid "Paste Value"
 msgstr "Vložiť hodnotu"
 
@@ -7577,15 +7760,14 @@ msgstr "Nastavte počet novo pridaných značiek"
 msgid "Remember last used tags after a restart"
 msgstr "Zapamätať naposledy používané značky aj po reštarte"
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
-msgstr "<code>Ctrl-1</code> aplikuje prvý návrh"
+msgid "to apply first suggestion"
+msgstr "pre použitie prvého návrhu"
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
-msgstr "<code>Shift-Enter</code> pridá značku bez zatvorenia okna"
+msgid "to add without closing the dialog"
+msgstr "pre pridanie značky bez zatvorenia okna"
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
-msgstr "<code>Shift-Ctrl-1</code> pridá prvý návrh bez zatvorenia okna"
+msgid "to add first suggestion without closing the dialog"
+msgstr "pre pridanie značky prvého návhu bez zatvorenia okna"
 
 msgid "Please enter the number of recently added tags to display"
 msgstr "Zadajte prosím počet nedávno pridaných značiek pre zobrazenie"
@@ -7780,6 +7962,12 @@ msgstr "Triedenie členov relácie"
 msgid "Relation Editor: Sort"
 msgstr "Editor relácie: Zoradiť"
 
+msgid "Sort below"
+msgstr "Zotriediť dolu"
+
+msgid "Sort the selected relation members and all members below"
+msgstr "Zotriediť vybrané členy relácie a všetky členy pod nimi"
+
 msgid "Reverse the order of the relation members"
 msgstr "Obrátiť poradie členov relácie"
 
@@ -8080,7 +8268,7 @@ msgid "Value for longitude in range [-180,180] required."
 msgstr "Hodnota pre zemepisnú dížku v rozsahu [-180,180] povinná."
 
 msgid "Data Sources and Types:"
-msgstr "Zdroje dát a Typy:"
+msgstr "Dátové zdroje a typy:"
 
 msgid "OpenStreetMap data"
 msgstr "Údaje OpenStreetMap"
@@ -8369,6 +8557,9 @@ msgstr "Nahrať históriu pre reláciu {0}"
 msgid "Node {0}"
 msgstr "Bod {0}"
 
+msgid "The nodes of this way are in reverse order"
+msgstr "Body tejto cesty sú v obrátenom poradí"
+
 msgid "Zoom to node"
 msgstr "Priblížiť k bodu"
 
@@ -9378,6 +9569,108 @@ msgstr[0] "{0} zmazaných objektov:"
 msgstr[1] "{0} zmazaný objekt:"
 msgstr[2] "{0} zmazané objekty:"
 
+msgid "Show Tile Info"
+msgstr "Zobraziť informácie o dlaždici"
+
+msgid "Tile Info"
+msgstr "Informácie o dlaždiciach"
+
+msgid "Metadata "
+msgstr "Metaúdaje "
+
+msgid "Auto Zoom"
+msgstr "Automatické priblíženie"
+
+msgid "Auto load tiles"
+msgstr "Automaticky Načítať Dlaždice"
+
+msgid "Load All Tiles"
+msgstr "Načítať všetky dlaždice"
+
+msgid "Load All Error Tiles"
+msgstr "Načítať všetky chybné dlaždice"
+
+msgid "Zoom to native resolution"
+msgstr "Vrátiť na pôvodnú úroveň priblíženia"
+
+msgid "Change resolution"
+msgstr "Zmena rozlíšenia"
+
+msgid "Failed to create tile source"
+msgstr "Nepodarilo sa vytvoriť zdroj dlaždíc"
+
+msgid "Show Errors"
+msgstr "Ukázať Chyby"
+
+msgid "Load Tile"
+msgstr "Načítať dlaždicu"
+
+msgid "Increase zoom"
+msgstr "Priblížiť"
+
+msgid "Decrease zoom"
+msgstr "Oddialiť"
+
+msgid "Snap to tile size"
+msgstr "Snímka na veľkosť dlaždice"
+
+msgid "Flush Tile Cache"
+msgstr "Vymazať pamäť dlaždíc"
+
+msgid "zoom in to load any tiles"
+msgstr "Zväčšiť pri načítaní dlaždíc"
+
+msgid "zoom in to load more tiles"
+msgstr "Zväčšiť pri načítaní viacerýchdlaždíc"
+
+msgid "increase zoom level to see more detail"
+msgstr "zvýšiť úroveň zväčšenia pre viditeľnosť viacej detailov"
+
+msgid "No tiles at this zoom level"
+msgstr "Žiadne dlaždice na tejto úrovni priblíženia"
+
+msgid "Current zoom: {0}"
+msgstr "Aktuálne priblíženie:  {0}"
+
+msgid "Display zoom: {0}"
+msgstr "Zobrazované priblíženie:  {0}"
+
+msgid "Pixel scale: {0}"
+msgstr "Zväčšenie bodov: {0}"
+
+msgid "Best zoom: {0}"
+msgstr "Najlepšie priblíženie:  {0}"
+
+msgid "Cache stats: {0}"
+msgstr "Štatistiky vyrovnávacej pamäte: {0}"
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr "{0} ({1}), automaticky sa sťahuje pri priblížení {2}"
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr "{0} ({1}), sťahuje sa pri priblížení {2}"
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr "Stiahnutých {0}/{1} dlaždíc"
+
+msgid "Save WMS file"
+msgstr "Uložiť WMS súbor"
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+"Letecký mapový podklad môže byť posunutý. Skontrolujte jeho posun za pomoci "
+"GPS záznamov!"
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+
+msgid "Details..."
+msgstr "Podrobnosti..."
+
+msgid "Hide this message and never show it again"
+msgstr "Schovať túto správu a viac ju nezobrazovať"
+
 msgid "Customize Color"
 msgstr "Prispôsobiť farbu"
 
@@ -9435,6 +9728,9 @@ msgstr "Uložiť GPX súbor"
 msgid "Imagery fade"
 msgstr "Zoslabenie mapového podkladu"
 
+msgid "Unsupported imagery type: {0}"
+msgstr "Nepodporovaný typ podkladových snímok: {0}"
+
 msgid "ERROR"
 msgstr "CHYBA"
 
@@ -9455,12 +9751,12 @@ msgstr "Všetky projekcie sú podporované"
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 "Vrstva {0} nepodporuje novú projekciu {1}.\n"
-"{2}\n"
-"Zmeňte projekciu, alebo odstráňte vrstvu."
+"Podporované projekcie sú: {2}\n"
+"Zmeňte projekciu znovu alebo odstráňte vrstvu."
 
 msgid "Save Layer"
 msgstr "Uložiť vrstvu"
@@ -9544,85 +9840,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr "Uložiť OSM súbor"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-"{0} nie je platný TMS argument. Skontrolujte prosím tento server URL:\n"
-"{1}"
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-"TMS vrstvy nepodporujú projekcie {0}.\n"
-"{1}\n"
-"Zmeniť projekciu, alebo odstrániť vrstvu."
-
-msgid "Auto Zoom"
-msgstr "Auto Zoom"
-
-msgid "Auto load tiles"
-msgstr "Automaticky Načítať Dlaždice"
-
-msgid "Show Errors"
-msgstr "Ukázať Chyby"
-
-msgid "Load Tile"
-msgstr "Nahrať Dlaždice (Tiles)"
-
-msgid "Show Tile Info"
-msgstr "Ukázať Info Dlaždíc"
-
-msgid "Load All Tiles"
-msgstr "Nahrať Všetky Dlaždice"
-
-msgid "Load All Error Tiles"
-msgstr "Načítať Všetky Chybné Dlaždice"
-
-msgid "Increase zoom"
-msgstr "Priblíženie"
-
-msgid "Decrease zoom"
-msgstr "Oddialiť"
-
-msgid "Snap to tile size"
-msgstr "Snímka na veľkosť dlaždice"
-
-msgid "Flush Tile Cache"
-msgstr "Flush Tile Cache"
-
-msgid "zoom in to load any tiles"
-msgstr "Zväčšiť pri načítaní dlaždíc"
-
-msgid "zoom in to load more tiles"
-msgstr "Zväčšiť pri načítaní viacerýchdlaždíc"
-
-msgid "increase zoom level to see more detail"
-msgstr "zvýšiť úroveň zväčšenia pre viditeľnosť viacej detailov"
-
-msgid "No tiles at this zoom level"
-msgstr "Žiadne dlaždice na tejto úrovni priblíženia"
-
-msgid "Current zoom: {0}"
-msgstr "Aktuálne priblíženie:  {0}"
-
-msgid "Display zoom: {0}"
-msgstr "Zobrazované priblíženie:  {0}"
-
-msgid "Pixel scale: {0}"
-msgstr "Zväčšenie bodov: {0}"
-
-msgid "Best zoom: {0}"
-msgstr "Najlepšie priblíženie:  {0}"
-
-msgid "Cache stats: {0}"
-msgstr "Štatistiky vyrovnávacej pamäte: {0}"
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr "TMS vrstva ({0}), sťahovaná vo zväčšení (zoom) {1}"
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr "EPSG: 4326 a Mercator projekcie sú podporované"
 
@@ -9632,59 +9849,33 @@ msgstr "Overovanie chýb"
 msgid "No validation errors"
 msgstr "Žiadne chyby na overenie"
 
-msgid "Blank Layer"
-msgstr "Prázdna vrstva"
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr "Stiahnutých {0}/{1} dlaždíc"
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr "WMS vrstva ({0}), sa automaticky sťahuje vo zväčšení (zoom) {1}"
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr "WMS vrstva ({0}), sťahovaná vo zväčšení (zoom) {1}"
-
-msgid "Download visible tiles"
-msgstr "Stiahnuť viditeľné dlaždice"
+msgid "Set WMS Bookmark"
+msgstr "Nastaviť WMS Záložku"
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
-"Požadovaná oblasť je príliš veľká. Prosím priblížte ju, alebo zmeňte "
-"rozlíšenie."
-
-msgid "Change resolution"
-msgstr "Zmena rozlíšenia"
+"JOSM použije EPSG:4326 pre požiadavky na server, ale výsledky sa môžu líšiť "
+"v závislosti od WMS servera"
 
-msgid "Reload erroneous tiles"
-msgstr "Nahrať poškodené dlaždice"
-
-msgid "Alpha channel"
-msgstr "Alfa kanál"
-
-msgid "Automatically change resolution"
-msgstr "Automaticky zmeniť rozlíšenie"
-
-msgid "Set WMS Bookmark"
-msgstr "Nastaviť WMS Záložku"
-
-msgid "Automatic downloading"
-msgstr "Automatické sťahovanie"
+msgid "Correlate to GPX"
+msgstr "Zladiť GPX"
 
-msgid "Zoom to native resolution"
-msgstr "Vrátiť na pôvodnú úroveň priblíženia"
+msgid "Invalid timezone"
+msgstr "Neplatné časové pásmo"
 
-msgid "Supported projections are: {0}"
-msgstr "Podporované projekcie sú: {0}"
+msgid "Invalid offset"
+msgstr "Neplatný rozdiel"
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
-msgstr "Nepodporovaná verzia WMS súboru; nájdené {0}, očakávané {1}"
+msgid "Correlate images with GPX track"
+msgstr "Zladiť obrázky s GPX stopou"
 
-msgid "Save WMS file"
-msgstr "Uložiť WMS súbor"
+msgid "Try Again"
+msgstr "Skúsiť znovu"
 
-msgid "Correlate to GPX"
-msgstr "Zladiť GPX"
+msgid "No images could be matched!"
+msgstr "Žiadne obrázky nemôžu byť vyrovnané!"
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
 msgstr "Súbory GPX (*.gpx *.gpx.gz)"
@@ -9777,24 +9968,9 @@ msgstr "Časové pásmo: "
 msgid "Offset:"
 msgstr "Rozdiel:"
 
-msgid "Correlate images with GPX track"
-msgstr "Zladiť obrázky s GPX stopou"
-
 msgid "Correlate"
 msgstr "Zladiť"
 
-msgid "Invalid timezone"
-msgstr "Neplatné časové pásmo"
-
-msgid "Invalid offset"
-msgstr "Neplatný rozdiel"
-
-msgid "Try Again"
-msgstr "Skúsiť znovu"
-
-msgid "No images could be matched!"
-msgstr "Žiadne obrázky nemôžu byť vyrovnané!"
-
 msgid "No gpx selected"
 msgstr "Žiadny gpx nie je vybratý"
 
@@ -10015,9 +10191,6 @@ msgstr ""
 "\n"
 "GPS čas: {0}"
 
-msgid "JPEG images (*.jpg)"
-msgstr "JPEG obrázky (*.jpg)"
-
 msgid "Show thumbnails"
 msgstr "Zobraziť náhľady"
 
@@ -10086,9 +10259,6 @@ msgstr "metre"
 msgid "Maximum area per request:"
 msgstr "Maximálna plocha na požiadavku:"
 
-msgid "sq km"
-msgstr "štvorcové kilometre"
-
 msgid "Download near:"
 msgstr "Stiahnuť okolo:"
 
@@ -10841,15 +11011,15 @@ msgstr "Zavrieť dialóg nastavena a zrušiť aktualizáciu nastavení"
 msgid "Save the preferences and close the dialog"
 msgstr "Uložiť nastavenia a zavrieť dialóg"
 
-msgid "Download plugins"
-msgstr "Stiahnuť pluginy"
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr "Niektoré nastavenia sa prejavia až po reštartovaní JOSM."
 
 msgid "Would you like to restart now?"
 msgstr "Prajete si teraz reštartovať?"
 
+msgid "Download plugins"
+msgstr "Stiahnuť pluginy"
+
 msgid "Icon paths:"
 msgstr "Cesty pre ikony:"
 
@@ -11701,6 +11871,21 @@ msgstr "Zobraziť hranice"
 msgid "No bounding box was found for this layer."
 msgstr "Pre túto vrstvu nebol nájdený žiadny ohraničujúci rámec."
 
+msgid "1. Enter getCapabilities URL"
+msgstr "1. Zadajte URL pre getCapabilities"
+
+msgid "2. Enter name for this layer"
+msgstr "2. Zadajte názov pre túto vrstvu"
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr "Vyrovnávacia pamäť {0}, celková veľkosť: {1} bajtov"
+
+msgid "Cache name"
+msgstr "Názov vyrovnávacej pamäte"
+
+msgid "Object Count"
+msgstr "Počet objektov"
+
 msgid "imagery fade"
 msgstr "zoslabenie mapového podkladu"
 
@@ -11719,6 +11904,20 @@ msgstr "Silné"
 msgid "Sharpen (requires layer re-add): "
 msgstr "Zaostrenie (vyžaduje opätovné pridanie vrstvy): "
 
+msgid "Tile cache directory: "
+msgstr "Adresár pre vyrovnávaciu pamäť dlaždíc: "
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+"Maximálna veľkosť diskovej vyrovnávacej pamäti (pre každý mapový podklad) v "
+"MB: "
+
+msgid "Maximum number of objects in memory cache: "
+msgstr "Maximálny počet objektov v pamäti: "
+
+msgid "Tiles zoom offset:"
+msgstr "Posun priblíženia dlaždíc:"
+
 msgid "Imagery Preferences"
 msgstr "Nastavenie mapového podkladu"
 
@@ -11740,6 +11939,9 @@ msgstr "Poskytovatelia mapových podkladov"
 msgid "Offset bookmarks"
 msgstr "Záložky posunu mapového podkladu"
 
+msgid "Cache contents"
+msgstr "Obsah vyrovnávacej pamäti"
+
 msgid "Imagery Background: Default"
 msgstr "Pozadie snímok: Predvolené"
 
@@ -11782,9 +11984,6 @@ msgstr "EULA licencia URL nie je k dispozícii: {0}"
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr "Poškodená URL EULA licencia: {0}"
 
-msgid "Projection"
-msgstr "Projekcia"
-
 msgid "Layer"
 msgstr "Vrstva"
 
@@ -11795,7 +11994,7 @@ msgid "Northing"
 msgstr "Severne"
 
 msgid "Auto zoom by default: "
-msgstr "Automatický zoom v predvolenom nastavení: "
+msgstr "Automatické priblíženie v predvolenom nastavení: "
 
 msgid "Autoload tiles by default: "
 msgstr "Automatické načítanie dlaždíc v predvolenom nastavení: "
@@ -11809,18 +12008,12 @@ msgstr "Max. úroveň priblíženia: "
 msgid "Add to slippymap chooser: "
 msgstr "Pridať do výberu posúvacej mapy: "
 
-msgid "Tile cache directory: "
-msgstr "Adresár pre vyrovnávaciu pamäť dlaždíc: "
-
 msgid "Maximum concurrent downloads: "
 msgstr "Maximum paralelných sťahovaní: "
 
 msgid "Maximum concurrent downloads per host: "
 msgstr "Maximum paralelných sťahovaní z jedného serveru: "
 
-msgid "Maximum elements in disk cache: "
-msgstr "Maximum objektov v diskovej vyrovnávacej pamäti: "
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
@@ -11828,20 +12021,11 @@ msgstr ""
 "Táto vrstva nepodporuje žiadne z JOSM''projekcie,\n"
 "takže ju nemožno použiť. Táto správa sa znovu nezobrazí ."
 
-msgid "Downloader:"
-msgstr "Program na sťahovanie:"
-
 msgid "Simultaneous connections:"
 msgstr "Súbežné pripojenia:"
 
-msgid "Overlap tiles"
-msgstr "Prekrývanie dlaždíc (tiles)"
-
-msgid "% of east:"
-msgstr "% z východu:"
-
-msgid "% of north:"
-msgstr "% zo severu:"
+msgid "Tile size:"
+msgstr "Veľkosť dlaždice:"
 
 msgid "Auto save enabled"
 msgstr "Povolené Automatické uloženie"
@@ -12871,6 +13055,16 @@ msgstr "Použiť predvolené"
 msgid "New relation"
 msgstr "Nová relácia"
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+"Predvoľba <i>{0}</i> nemôže byť použitá, pretože nebol vybraný žiadny objekt!"
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+"Predvoľba <i>{0}</i> nemôže byť použitá, pretože vybrané objekty sú nevhodné!"
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] "Zmeniť {0} objektov"
@@ -12990,6 +13184,9 @@ msgstr "Zobraziť vyhľadávací dialóg predvolieb"
 msgid "Search presets"
 msgstr "Hľadať predvoľby"
 
+msgid "Presets"
+msgstr "Predvoľby"
+
 msgid "Search for objects by preset"
 msgstr "Hľadať objekty podľa predvoľby"
 
@@ -13214,19 +13411,19 @@ msgstr ""
 
 msgid "Unexpected value for ''{0}'' in changeset query url, got {1}"
 msgstr ""
-"Neočakávaná hodnota pre \"{0}\" v URL požiadavke zmenového súboru, obdržaná "
-"hodnota je {1}"
+"Neočakávaná hodnota pre \"{0}\" v URL pre požiadavku zmenových súborov, "
+"obdržaná hodnota je {1}"
 
 msgid ""
 "Cannot create a changeset query including both the query parameters ''uid'' "
 "and ''display_name''"
 msgstr ""
-"Nemožno vytvoriť požiadavku na zmenový súbor, vrátane parametrov požiadavky "
-"''uid'' a ''display_name''"
+"Nemožno vytvoriť požiadavku na zmenové súbory, vrátane parametrov požiadavky "
+"\"uid\" a \"display_name\""
 
 msgid "Unsupported parameter ''{0}'' in changeset query string"
 msgstr ""
-"Nepodporovaný parameter ''{0}'' v reťazci požiadavky zmenového súboru"
+"Nepodporovaný parameter ''{0}'' v reťazci požiadavky na zmenové súbory"
 
 msgid "Unexpected format for port number in preference ''{0}''. Got ''{1}''."
 msgstr ""
@@ -13296,6 +13493,9 @@ msgstr "<html>Nemôžem čítať.<br>Chyba je:<br>{0}</html>"
 msgid "GeoJSON Files"
 msgstr "GeoJSON súbory"
 
+msgid "Projected GeoJSON Files"
+msgstr "Súbory GeoJSON s projekciou"
+
 msgid "Layer ''{0}'' not supported"
 msgstr "Vrstva ''{0}'' nie je podporovaná"
 
@@ -13893,6 +14093,9 @@ msgstr "Súbory servera skomprimované v zip"
 msgid "WMS Files (*.wms)"
 msgstr "WMS Súbory (*.wms)"
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr "Nepodporovaná verzia WMS súboru; nájdené {0}, očakávané {1}"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -14328,7 +14531,22 @@ msgstr[1] ""
 msgstr[2] ""
 "Plugin {0} vyžaduje {1} pluginy, ktoré sa nenašli. Chýbajúce pluginy sú:"
 
-msgid ""
+msgid "Download and restart"
+msgstr "Stiahnuť a reštartovať"
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] "Kliknite pre stiahnutie chýbajúcich pluginov a reštartovanie JOSM"
+msgstr[1] "Kliknite pre stiahnutie chýbajúceho pluginu a reštartovanie JOSM"
+msgstr[2] "Kliknite pre stiahnutie chýbajúcich pluginov a reštartovanie JOSM"
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] "Kliknite pre pokračovanie bez týchto pluginov"
+msgstr[1] "Kliknite pre pokračovanie bez tohto pluginu"
+msgstr[2] "Kliknite pre pokračovanie bez týchto pluginov"
+
+msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
 msgstr ""
@@ -15566,6 +15784,9 @@ msgstr "Aktualizovať"
 msgid "Update directory listing."
 msgstr "Aktualizovať obsah adresára."
 
+msgid "View"
+msgstr "Zobraziť"
+
 msgid "Blue:"
 msgstr "Modrá:"
 
@@ -15605,8 +15826,8 @@ msgstr "MapQuest Open Aerial"
 msgid "OpenStreetMap GPS Traces"
 msgstr "OpenStreetMap GPS Stopy"
 
-msgid "OpenStreetMap (Mapnik)"
-msgstr "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
+msgstr "OpenStreetMap (Štandardná vrstva)"
 
 msgid "skobbler"
 msgstr "skobbler"
@@ -15617,9 +15838,6 @@ msgstr "OpenStreetMap (Mapnik Čiernobiely)"
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr "OpenStreetMap (Mapnik, bez nápisov)"
 
-msgid "skobbler heatmap"
-msgstr "skobbler heatmap"
-
 msgid "OpenCycleMap"
 msgstr "OpenCycleMap"
 
@@ -15728,6 +15946,9 @@ msgstr "Viedeň: Orthofoto (letecké snímky)"
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr "VoGIS: Obraz v skutočných farbách 2012 (12cm)"
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr "VoGIS: Obraz v skutočných farbách Zima 2015 (20cm)"
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr "VoGIS: Plán využitia územia"
 
@@ -15741,12 +15962,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr "AGIV(laanderen) letecké snímky (pokrýva aj Brusel) (2013)"
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr "SPW(allonie) PICC numerical imagery"
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr "SPW(allonie) 2012 letecké snímky"
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr "SPW(allonie) 2009 letecké snímky"
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr "kataster: len pre názvy a čísla domov, geometrie sú zlé"
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr "IBGE Mapa de Setores Urbanos"
 
@@ -15783,12 +16010,18 @@ msgstr "Český RUIAN parcely"
 msgid "Czech pLPIS"
 msgstr "Český pLPIS"
 
-msgid "Fugro (Denmark)"
-msgstr "Fugro (Dánsko)"
-
 msgid "Geodatastyrelsen (Denmark)"
 msgstr "Geodatastyrelsen (Dánsko)"
 
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr "Geodatastyrelsen DTK Kort25"
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr "Geodatastyrelsen Skyggekort 1.6m"
+
+msgid "Geodatastyrelsen Skærmkort"
+msgstr "Geodatastyrelsen Skærmkort"
+
 msgid "Stevns (Denmark)"
 msgstr "Stevns (Dánsko)"
 
@@ -15813,6 +16046,9 @@ msgstr "Estónsko, Lesníctvo (Maaamet)"
 msgid "BANO"
 msgstr "BANO"
 
+msgid "BD Carthage"
+msgstr "BD Carthage"
+
 msgid "Bordeaux - 2012"
 msgstr "Bordeaux - 2012"
 
@@ -15837,8 +16073,8 @@ msgstr "Géobretagne - Morbihan 2010"
 msgid "Géolittoral - Orthophotos 2000"
 msgstr "Géolittoral - Orthophotos 2000"
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
-msgstr "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
+msgstr "Géolittoral V2 - Orthofoto 2011-2014"
 
 msgid "Géolittoral - Sentiers"
 msgstr "Géolittoral - Sentiers"
@@ -15852,6 +16088,9 @@ msgstr "Loire-Atlantique - Ortofoto 2012 - 20 cm"
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 
+msgid "Route 500™©®"
+msgstr "Route 500™©®"
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr "Toulouse - Orthophotoplan 2013"
 
@@ -15864,12 +16103,6 @@ msgstr "Toulouse - Orthophotoplan 2007"
 msgid "Tours - Orthophotos 2013"
 msgstr "Tours - Ortofoto 2013"
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr "Tours - Ortofoto 2008-2010"
-
-msgid "Tours - Orthophotos 2008"
-msgstr "Tours - Ortofoto 2008"
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -15892,6 +16125,9 @@ msgstr "Hamburg (20 cm)"
 msgid "Hamburg (DK5)"
 msgstr "Hamburg (DK5)"
 
+msgid "Bavaria (80 cm)"
+msgstr "Bavorsko (80 cm)"
+
 msgid "Bavaria (2 m)"
 msgstr "Bavorsko (2 m)"
 
@@ -15926,11 +16162,8 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr "Maps4BW (LGL-BW, www.lgl-bw.de)"
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr "NRW-Atlas: Automatizovaná katastrálna mapa (Vektorová)"
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
-msgstr "NRW-Atlas: Automatizovaná katastrálna mapa (Rastrová)"
+msgid "NRW-Atlas: ALKIS"
+msgstr "NRW-Atlas: ALKIS"
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
 msgstr "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -15959,6 +16192,12 @@ msgstr "Ireland British War Office One-Inch 1941-43 GSGS 4136"
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr "Írsko Bartholomew Quarter-Inch 1940"
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr "Írsko Civil Parishes and Baronies - Memorial Atlas"
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr "Memorial Atlas of Ireland (1901) L.J. Richards"
+
 msgid "OSMIE Townlands"
 msgstr "OSMIE Townlands"
 
@@ -15974,60 +16213,6 @@ msgstr "OSMIE Baronies"
 msgid "OSMIE Political"
 msgstr "OSMIE Politická"
 
-msgid "Ireland EEA GMES Urban Atlas"
-msgstr "Írsko EEA GMES Urban Atlas"
-
-msgid "Ireland EEA CORINE 2006"
-msgstr "Írsko EEA CORINE 2006"
-
-msgid "Antrim Civil Parishes and Baronies"
-msgstr "Antrim Civil Parishes and Baronies"
-
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
-msgstr "Memorial Atlas of Ireland (1901) L.J. Richards"
-
-msgid "Carlow Civil Parishes and Baronies"
-msgstr "Carlow Civil Parishes and Baronies"
-
-msgid "Clare Civil Parishes and Baronies"
-msgstr "Clare Civil Parishes and Baronies"
-
-msgid "Dublin Civil Parishes and Baronies"
-msgstr "Dublin Civil Parishes and Baronies"
-
-msgid "Fermanagh Civil Parishes and Baronies"
-msgstr "Fermanagh Civil Parishes and Baronies"
-
-msgid "Galway Civil Parishes and Baronies"
-msgstr "Galway Civil Parishes and Baronies"
-
-msgid "Kildare Civil Parishes and Baronies"
-msgstr "Kildare Civil Parishes and Baronies"
-
-msgid "Leitrim Civil Parishes and Baronies"
-msgstr "Leitrim Civil Parishes and Baronies"
-
-msgid "Longford Civil Parishes and Baronies"
-msgstr "Longford Civil Parishes and Baronies"
-
-msgid "Offaly Civil Parishes and Baronies"
-msgstr "Offaly Civil Parishes and Baronies"
-
-msgid "Sligo Civil Parishes and Baronies"
-msgstr "Sligo Civil Parishes and Baronies"
-
-msgid "Tyrone Civil Parishes and Baronies"
-msgstr "Tyrone Civil Parishes and Baronies"
-
-msgid "Westmeath Civil Parishes and Baronies"
-msgstr "Westmeath Civil Parishes and Baronies"
-
-msgid "Wexford Civil Parishes and Baronies"
-msgstr "Wexford Civil Parishes and Baronies"
-
-msgid "Wicklow Civil Parishes and Baronies"
-msgstr "Wicklow Civil Parishes and Baronies"
-
 msgid "Lodi - Italy"
 msgstr "Lodi - Taliansko"
 
@@ -16061,6 +16246,9 @@ msgstr "50cm ortho - Lotyšsko"
 msgid "20cm ortho - Latvia - Coastline"
 msgstr "20cm ortho - Lotyšsko - Pobrežie"
 
+msgid "1.cikla ortofotokarte - Latvia"
+msgstr "1.cikla ortofotokarte - Lotyšsko"
+
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Litva)"
 
@@ -16076,6 +16264,9 @@ msgstr "Luxembourg Inspire Železnice"
 msgid "Luxembourg Inspire Roads"
 msgstr "Luxembourg Inspire Cesty"
 
+msgid "Luxembourg Inspire Water"
+msgstr "Luxembourg Inspire Water"
+
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Delta Nigeru Okt 2012 Landsat"
 
@@ -16091,9 +16282,15 @@ msgstr "Pangasinán/Bulacan (Phillipines HiRes)"
 msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr "Geoportal 2: Ortofotomapa (letecké snímky)"
 
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgstr "Geoportal 2: Ortofotomapa (letecké snímky) WMTS"
+
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr "Geoportal 2: PRNG (geografické názvy)"
 
+msgid "Geoportal 2: ISOK hillshade"
+msgstr "Geoportal 2: ISOK tieňovaný reliéf"
+
 msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr "Będzin: Ortofotomapa 2013 (letecké snímky)"
 
@@ -16103,15 +16300,27 @@ msgstr "Będzin: Budynki (budovy)"
 msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr "Bytom: Ortofotomapa 2012 (letecké snímky)"
 
+msgid "Bytom: Fotoplan 2014 (aerial image)"
+msgstr "Bytom: Fotoplan 2014 (letecký snímok)"
+
 msgid "Bytom: Budynki (buildings)"
 msgstr "Bytom: Budynki (budovy)"
 
 msgid "Chorzów: Budynki (buildings)"
 msgstr "Chorzów: Budynki (budovy)"
 
+msgid "Częstochowa: Budynki (buildings)"
+msgstr "Częstochowa: Budynki (budovy)"
+
 msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr "Częstochowa: Ortofotomapa 2011 (letecké snímky)"
 
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgstr "Częstochowa: Ortofotomapa 2013 (letecký snímok)"
+
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgstr "Częstochowa: Ortofotomapa 2014 (letecký snímok)"
+
 msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr "Gliwice: Ortofotomapa 2013 (letecké snímky)"
 
@@ -16121,9 +16330,45 @@ msgstr "Gliwice: Budynki (budovy)"
 msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr "Katowice: Ortofotomapa (letecké snímky)"
 
+msgid "Katowice: Budynki (buildings)"
+msgstr "Katowice: Budynki (budovy)"
+
+msgid "Łódź: Budynki (buildings)"
+msgstr "Łódź: Budynki (budovy)"
+
 msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr "Łódź: Ortofotomapa (letecké snímky)"
 
+msgid "Powiat dębicki: Budynki (buildings)"
+msgstr "Powiat dębicki: Budynki (budovy)"
+
+msgid "Powiat lubaczowski: Budynki (buildings)"
+msgstr "Powiat lubaczowski: Budynki (budovy)"
+
+msgid "Powiat łańcucki: Budynki (buildings)"
+msgstr "Powiat łańcucki: Budynki (budovy)"
+
+msgid "Powiat poznański: Budynki (buildings)"
+msgstr "Powiat poznański: Budynki (budovy)"
+
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgstr "Powiat poznański: Ortofotomapa (Letecký snímok)"
+
+msgid "Powiat rzeszowski: Budynki (buildings)"
+msgstr "Powiat rzeszowski: Budynki (budovy)"
+
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgstr "Powiat rzeszowski: Ortofotomapa (Letecké snímky)"
+
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr "Powiat stalowowolski: Budynki (budovy)"
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr "Przemyśl: Budynki (budovy)"
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgstr "Przemyśl: Ortofotomapa (Letecké snímky)"
+
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
 msgstr "Ruda Śląska: Ortofotomapa (letecké snímky)"
 
@@ -16136,9 +16381,18 @@ msgstr "Rzeszów: Budynki (budovy)"
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr "Siemianowice Śląskie: Ortofotomapa (letecké snímky)"
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr "Siemianowice Śląskie: Budynki (budovy)"
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr "Świętochłowice: Ortofotomapa 2008 (letecký snímok)"
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr "Świętochłowice: Ortofotomapa 2009 (letecké snímky)"
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr "Świętochłowice: Ortofotomapa 2012 (letecký snímok)"
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr "Zabrze: Ortofotomapa 2011 (letecké snímky)"
 
@@ -16268,6 +16522,21 @@ msgstr "Bonvillars Ortofoto 2013"
 msgid "Fiez Orthophoto 2013"
 msgstr "Fiez Ortofoto 2013"
 
+msgid "Taiwan e-Map Open Data"
+msgstr "Taiwan e-Map Open Data"
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr "Taiwan e-Map Open Data (s vrstevnicami)"
+
+msgid "Taiwan Village Boundaries"
+msgstr "Taiwan Hranice dedín"
+
+msgid "Taiwan Land-Section Data"
+msgstr "Taiwan Land-Section Data"
+
+msgid "NLSC Open Data WMTS"
+msgstr "NLSC Open Data WMTS"
+
 msgid "MSR Maps Topo"
 msgstr "MSR Mapy Topo"
 
@@ -16283,8 +16552,8 @@ msgstr "USGS Veľké letecké snímky"
 msgid "TIGER 2012 Roads Overlay"
 msgstr "TIGER 2012 Cesty"
 
-msgid "New & Misaligned TIGER Roads (2014)"
-msgstr "Nové & Nezarovnané TIGER Cesty (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
+msgstr "Nové & Nezarovnané TIGER cesty (2015)"
 
 msgid "MassGIS L3 Parcels"
 msgstr "MassGIS L3 Parcely"
@@ -16626,6 +16895,13 @@ msgstr ""
 "Doplní príkazový riadok a aktivuje vkladanie príkazov. Pozri odkaz na "
 "štandardné príkazy (oblúku, kružnica atď.)"
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+"Poskytuje knižnicu Commons Imaging. Nie je určený na priamu inštaláciu, ale "
+"ako závislosť pre iné pluginy."
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr "(Varovanie: Experimentálne!) Nástroj pre spájanie (zlučovanie) dát."
 
@@ -16722,13 +16998,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr "Prispôsobenie mapových podkladov typu WMSPlugin"
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-"Tento experimentálny plugin umožňuje JOSM-u ukladať dlaždice do databázových "
-"súborov namiesto veľkých dočasných priečinkov"
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -16799,8 +17068,8 @@ msgstr ""
 "Plugin MapDust zobrazuje na mape hlásenia o chybách z MapDust. Môžete "
 "vytvoriť, uzavrieť, zamietnuť, znovu otvoriť a komentovať chybové hlásenia."
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
-msgstr "Umožňuje pracovať s obrázkami na mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
+msgstr "Umožňuje prácu s obrázkami na mapillary.com"
 
 msgid ""
 "Provide a measurement dialog and a layer to measure length and angle of "
@@ -16817,9 +17086,6 @@ msgstr "Zlúčiť prekrývajúce sa časti cesty."
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr "Pridanie zákazu zabočenia vľavo pre sadu zo 4 alebo 5 ciest"
 
-msgid "Simplifies download from different read-only APIs."
-msgstr "Zjednodušuje sťahovanie z rôznych API, ktoré sú iba na čítanie."
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 "Umožňuje doplniť atribúty značiek do všetkých objektov v akejkoľvek zvolenej "
@@ -16919,6 +17185,16 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr "Tento plugin zjednodušuje mapovanie a úpravy trás hromadnej dopravy."
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr "Zobrazuje zastávky zvolených trás hromadnej dopravy ako graf"
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+"Plugin RasterFiltersPlugin umožňuje aplikovať niektoré obrázkové filtre na "
+"vrstvy"
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr "Panel na vytváranie a úpravu relácií a multipolygónov."
 
@@ -16966,6 +17242,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr "Upravuje vlastnosti pre OpenSeaMap"
 
+msgid "Allows to draw splines"
+msgstr "Umožňuje kresliť krivky (splines)"
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -17061,9 +17340,6 @@ msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 "Povolí hľadanie cestovného bodu (waypoint-u) v importovaných z gpx súboru."
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr "Vyberte poradie nerozvetvených spojených ciest"
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr "Zjednodušuje prepojenie OSM objektov s článkami Wikipedie"
 
@@ -17475,6 +17751,14 @@ msgid "basketball"
 msgstr "basketbal"
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr "plážový volejbal"
+
+msgctxt "sport"
+msgid "billiards"
+msgstr "biliard"
+
+msgctxt "sport"
 msgid "boules"
 msgstr "boules (spoločný názov pre hry hrajúce sa s kovovými guľami)"
 
@@ -17500,11 +17784,6 @@ msgid "cricket"
 msgstr "kriket"
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-"kriketová tréningová plocha s ochrannými sieťami (pre pálkára a nadhadzovača)"
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 "croquet (drevenou paličkou-kladivom sa búcha do gule cez obruče vložené do "
@@ -17523,6 +17802,10 @@ msgid "equestrian"
 msgstr "jazdectvo"
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr "pozemný hokej"
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr "galské hry"
 
@@ -17539,14 +17822,26 @@ msgid "handball"
 msgstr "hádzaná"
 
 msgctxt "sport"
-msgid "hockey"
-msgstr "hokej"
-
-msgctxt "sport"
 msgid "horse_racing"
 msgstr "konské dostihy"
 
 msgctxt "sport"
+msgid "ice_hockey"
+msgstr "ľadový hokej"
+
+msgctxt "sport"
+msgid "karting"
+msgstr "motokáry"
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr "letisko pre modelárov"
+
+msgctxt "sport"
+msgid "motocross"
+msgstr "motokros"
+
+msgctxt "sport"
 msgid "motor"
 msgstr "motošport"
 
@@ -17559,6 +17854,10 @@ msgid "racquet"
 msgstr "racquetbal (podobné ako squash, iné pravidlá)"
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr "RC autá"
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr "ragbyová liga"
 
@@ -17571,6 +17870,10 @@ msgid "running"
 msgstr "beh"
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr "bezpečnostný výcvik"
+
+msgctxt "sport"
 msgid "shooting"
 msgstr "streľba"
 
@@ -17598,6 +17901,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr "tenis"
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr "volejbal"
+
+msgctxt "sport"
+msgid "9pin"
+msgstr "9-kuželkový bowling"
+
+msgctxt "sport"
+msgid "10pin"
+msgstr "10-kuželkový bowling"
+
 msgid "Fee"
 msgstr "Poplatok"
 
@@ -17993,8 +18308,11 @@ msgstr "Prípojka cesty III. triedy"
 msgid "Unclassified"
 msgstr "Miestna cesta neklasifikovaná (Unclassified)"
 
+msgid "Street has no name"
+msgstr "Ulica nemá názov"
+
 msgid "Passing Places"
-msgstr "Parkoviská umožňujúce predbehnutie širokého vozidla"
+msgstr "Vyhýbacie ostrovčeky"
 
 msgid "Residential"
 msgstr "Ulica (miestna komunikácia)"
@@ -18071,6 +18389,9 @@ msgstr ""
 "Únikový pruh pre ťažké vozidlá popri dlhých klesajúcich svahoch, aby mohli "
 "zastaviť ak im zlyhajú brzdy."
 
+msgid "Raceway"
+msgstr "Závodná dráha"
+
 msgid "Road (Unknown Type)"
 msgstr "Cesta (neznámy typ)"
 
@@ -18258,7 +18579,7 @@ msgid "Track"
 msgstr "Poľná cesta (Track)"
 
 msgid "Tracktype"
-msgstr "Typ stopy"
+msgstr "Typ cesty (viditeľnosť)"
 
 msgid "grade1"
 msgstr "kvalita1 (najlepšia)"
@@ -18604,7 +18925,7 @@ msgid "table"
 msgstr "veľký retardér (table)"
 
 msgid "Passing Place"
-msgstr "Parkovisko umožňujúce predbehnutie širokého vozidla"
+msgstr "Vyhýbací ostrovček"
 
 msgid "Turning Circle"
 msgstr "Obratisko (zaokrúhlený koniec cesty pre ľahšie otáčanie sa áut)"
@@ -18624,6 +18945,12 @@ msgstr "Kamera na meranie rýchlosti"
 msgid "Traffic Mirror"
 msgstr "Cestné zrkadlo"
 
+msgid "Highway milestone"
+msgstr "Cestný míľnik"
+
+msgid "Distance (kilometers)"
+msgstr "Vzdialenosť (kilometre)"
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr "Pomenovaná križovatka"
@@ -18818,6 +19145,11 @@ msgstr "Kolonáda"
 msgid "Avalanche Protector"
 msgstr "Lavínová ochrana (strecha)"
 
+msgctxt "main group"
+msgid "Water"
+msgstr "Voda"
+
+msgctxt "sub group"
 msgid "Water"
 msgstr "Voda"
 
@@ -18834,7 +19166,7 @@ msgid "River"
 msgstr "Rieka"
 
 msgid "Canal"
-msgstr "Prieplav (canal)"
+msgstr "Prieplav/zavlažovací kanál"
 
 msgid "Spring"
 msgstr "Prameň"
@@ -18871,6 +19203,10 @@ msgstr "Nádrž"
 msgid "Covered Reservoir"
 msgstr "Krytá nádrž"
 
+msgctxt "natural"
+msgid "Water"
+msgstr "Voda"
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr "Masa stojatej vody, ako jazero alebo rybník."
 
@@ -18878,7 +19214,7 @@ msgid "Water Body"
 msgstr "Vodná plocha"
 
 msgid "canal"
-msgstr "prieplav"
+msgstr "prieplav/kanál"
 
 msgid "lake"
 msgstr "jazero"
@@ -19014,6 +19350,120 @@ msgstr "Výlevka na odpad z karavanu"
 msgid "public"
 msgstr "verejné"
 
+msgid "Marine Fuel"
+msgstr "Palivo pre lode"
+
+msgid "Agip"
+msgstr "Agip"
+
+msgid "Aral"
+msgstr "Aral"
+
+msgid "Avia"
+msgstr "Avia"
+
+msgid "BP"
+msgstr "BP"
+
+msgid "Chevron"
+msgstr "Chevron"
+
+msgid "Citgo"
+msgstr "Citgo"
+
+msgid "Eni"
+msgstr "Eni"
+
+msgid "Esso"
+msgstr "Esso"
+
+msgid "Exxon"
+msgstr "Exxon"
+
+msgid "Gulf"
+msgstr "Gulf"
+
+msgid "Mobil"
+msgstr "Mobil"
+
+msgid "OMV"
+msgstr "OMV"
+
+msgid "Petro-Canada"
+msgstr "Petro-Canada"
+
+msgid "Pioneer"
+msgstr "Pioneer"
+
+msgid "Q8"
+msgstr "Q8"
+
+msgid "Repsol"
+msgstr "Repsol"
+
+msgid "Shell"
+msgstr "Shell"
+
+msgid "Socar"
+msgstr "Socar"
+
+msgid "Statoil"
+msgstr "Statoil"
+
+msgid "Sunoco"
+msgstr "Sunoco"
+
+msgid "Tamoil"
+msgstr "Tamoil"
+
+msgid "Texaco"
+msgstr "Texaco"
+
+msgid "Total"
+msgstr "Total"
+
+msgid "Independent"
+msgstr "Rôzne"
+
+msgid "Fuel types:"
+msgstr "Typy palív:"
+
+msgid "Diesel"
+msgstr "Nafta"
+
+msgid "Bio Diesel"
+msgstr "Bio nafta"
+
+msgid "Octane 80"
+msgstr "80 oktánový"
+
+msgid "Octane 91"
+msgstr "91 oktánový"
+
+msgid "Octane 92"
+msgstr "92 oktánový"
+
+msgid "Octane 95"
+msgstr "95 oktánový"
+
+msgid "Octane 98"
+msgstr "98 oktánový"
+
+msgid "Octane 100"
+msgstr "100 oktánový"
+
+msgid "E10 (10% Ethanol mix)"
+msgstr "E10 (10% Etanol mix)"
+
+msgid "E85 (85% Ethanol mix)"
+msgstr "E85 (85% Etanol mix)"
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr "LPG (Skvapalnený ropný plyn)"
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr "CNG (Stlačený zemný plyn)"
+
 msgid "Pier"
 msgstr "Mólo"
 
@@ -19130,6 +19580,9 @@ msgstr "Nárazník"
 msgid "Railway Switch"
 msgstr "Výhybka"
 
+msgid "Railway milestone"
+msgstr "Železničný míľnik"
+
 msgid "Aerialway"
 msgstr "Lanovka"
 
@@ -19255,78 +19708,6 @@ msgstr "Vstup na parkovisko"
 msgid "Fuel"
 msgstr "Čerpacia stanica"
 
-msgid "Agip"
-msgstr "Agip"
-
-msgid "Aral"
-msgstr "Aral"
-
-msgid "Avia"
-msgstr "Avia"
-
-msgid "BP"
-msgstr "BP"
-
-msgid "Chevron"
-msgstr "Chevron"
-
-msgid "Citgo"
-msgstr "Citgo"
-
-msgid "Eni"
-msgstr "Eni"
-
-msgid "Esso"
-msgstr "Esso"
-
-msgid "Exxon"
-msgstr "Exxon"
-
-msgid "Gulf"
-msgstr "Gulf"
-
-msgid "Mobil"
-msgstr "Mobil"
-
-msgid "OMV"
-msgstr "OMV"
-
-msgid "Petro-Canada"
-msgstr "Petro-Canada"
-
-msgid "Pioneer"
-msgstr "Pioneer"
-
-msgid "Q8"
-msgstr "Q8"
-
-msgid "Repsol"
-msgstr "Repsol"
-
-msgid "Shell"
-msgstr "Shell"
-
-msgid "Socar"
-msgstr "Socar"
-
-msgid "Statoil"
-msgstr "Statoil"
-
-msgid "Sunoco"
-msgstr "Sunoco"
-
-msgid "Tamoil"
-msgstr "Tamoil"
-
-msgid "Texaco"
-msgstr "Texaco"
-
-msgid "Total"
-msgstr "Total"
-
-msgid "Independent"
-msgstr "Rôzne"
-
 msgid "With shop"
 msgstr "S obchodom"
 
@@ -19336,51 +19717,12 @@ msgstr "príslušenstvo"
 msgid "kiosk"
 msgstr "stánok (trafika)"
 
-msgid "Fuel types:"
-msgstr "Typy palív:"
-
-msgid "Diesel"
-msgstr "Nafta"
-
-msgid "Bio Diesel"
-msgstr "Bio nafta"
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr "Nafta (zo skvapalneného plynu - najkvalitnejšia, syntetická)"
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr "Nafta pre ťažké nákladné automobily"
 
-msgid "Octane 80"
-msgstr "80 oktánový"
-
-msgid "Octane 91"
-msgstr "91 oktánový"
-
-msgid "Octane 92"
-msgstr "92 oktánový"
-
-msgid "Octane 95"
-msgstr "95 oktánový"
-
-msgid "Octane 98"
-msgstr "98 oktánový"
-
-msgid "Octane 100"
-msgstr "100 oktánový"
-
-msgid "E10 (10% Ethanol mix)"
-msgstr "E10 (10% Etanol mix)"
-
-msgid "E85 (85% Ethanol mix)"
-msgstr "E85 (85% Etanol mix)"
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr "LPG (Skvapalnený ropný plyn)"
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr "CNG (Stlačený zemný plyn)"
-
 msgid "1/25 mix (mofa/moped)"
 msgstr "1/25 mix (mofa/moped)"
 
@@ -19599,9 +19941,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr "#CD853F"
 
-msgid "route segment"
-msgstr "úsek trasy"
-
 msgid "stop position"
 msgstr "poloha zastávky"
 
@@ -19620,6 +19959,9 @@ msgstr "nástupište (iba výstupy)"
 msgid "platform (entry only)"
 msgstr "nástupište (iba nástupy)"
 
+msgid "route segment"
+msgstr "úsek trasy"
+
 msgid "Route Master"
 msgstr "Sada trás (route master)"
 
@@ -19822,6 +20164,12 @@ msgstr "Hotel"
 msgid "Stars"
 msgstr "Hviezdičkový"
 
+msgid "Rooms"
+msgstr "Počet izieb"
+
+msgid "Beds"
+msgstr "Počet postelí"
+
 msgid "Motel"
 msgstr "Motel"
 
@@ -19912,6 +20260,9 @@ msgstr "sendviče"
 msgid "sushi"
 msgstr "sushi"
 
+msgid "steak_house"
+msgstr "steak"
+
 msgid "Microbrewery"
 msgstr "Minipivovar"
 
@@ -20126,6 +20477,9 @@ msgstr "Sauna"
 msgid "Horse Riding"
 msgstr "Jazdenie na koni"
 
+msgid "Casino"
+msgstr "Kasíno"
+
 msgid "Brothel"
 msgstr "Nevestinec"
 
@@ -20613,8 +20967,8 @@ msgstr "Zobrazuje atmosférický tlak"
 msgid "Shows humidity"
 msgstr "Zobrazuje vlhkosť"
 
-msgid "Recycling"
-msgstr "Recyklácia"
+msgid "Recycling Container"
+msgstr "Recyklačná nádoba"
 
 msgid "Batteries"
 msgstr "Batérie"
@@ -20622,20 +20976,47 @@ msgstr "Batérie"
 msgid "Cans"
 msgstr "Plechovky"
 
+msgid "Cardboard"
+msgstr "Kartón"
+
+msgid "Electrical Appliances"
+msgstr "Elektrické spotrebiče"
+
 msgid "Glass"
 msgstr "Sklo"
 
+msgid "Glass Bottles"
+msgstr "Sklenené fľaše"
+
+msgid "Green Waste"
+msgstr "Rastlinný odpad"
+
 msgid "Paper"
 msgstr "Papier"
 
+msgid "Plastic"
+msgstr "Plasty"
+
+msgid "Plastic Bottles"
+msgstr "Plastové fľaše"
+
+msgid "Plastic Packaging"
+msgstr "Plastové obaly"
+
 msgid "Scrap Metal"
 msgstr "Železný šrot"
 
-msgid "container"
-msgstr "kontajner"
+msgid "Shoes"
+msgstr "Obuv"
+
+msgid "Small Appliances"
+msgstr "Malé spotrebiče"
 
-msgid "centre"
-msgstr "stredisko"
+msgid "Waste"
+msgstr "Komunálny odpad"
+
+msgid "Recycling Centre"
+msgstr "Recyklačné stredisko"
 
 msgid "Waste Basket/Trash Can"
 msgstr "Odpadkový kôš"
@@ -20838,6 +21219,9 @@ msgstr "Lukostreľba"
 msgid "Track and Field Athletics"
 msgstr "Atletika"
 
+msgid "Running"
+msgstr "Beh"
+
 msgid "Climbing"
 msgstr "Lezenie"
 
@@ -21013,12 +21397,18 @@ msgstr "Bejzbal"
 msgid "Basketball"
 msgstr "Basketbal"
 
+msgid "Handball"
+msgstr "Hádzaná"
+
 msgid "Volleyball"
 msgstr "Volejbal"
 
 msgid "Beach Volleyball"
 msgstr "Plážový volejbal"
 
+msgid "Billiards"
+msgstr "Biliard"
+
 msgid "Golf"
 msgstr "Golf"
 
@@ -21034,14 +21424,14 @@ msgstr "Bowling na tráve"
 msgid "Cricket"
 msgstr "Kriket"
 
-msgid "Cricket Nets"
-msgstr "Cvičné ihrisko pre kriket so sieťou"
-
 msgid "Croquet"
 msgstr "Croquet"
 
-msgid "Hockey"
-msgstr "Hokej"
+msgid "Field Hockey"
+msgstr "Pozemný hokej"
+
+msgid "Ice Hockey"
+msgstr "Ľadový hokej"
 
 msgid "Pelota"
 msgstr "Pelota"
@@ -21064,9 +21454,6 @@ msgstr "Motokáry"
 msgid "Motocross"
 msgstr "Motokros"
 
-msgid "Safety Training"
-msgstr "Bezpečnostný výcvik"
-
 msgid "Model Aerodrome"
 msgstr "Letisko pre modelárov"
 
@@ -21085,9 +21472,6 @@ msgstr "dráha (trať)"
 msgid "RC Car"
 msgstr "RC Autá"
 
-msgid "Raceway"
-msgstr "Závodná dráha"
-
 msgid "Man Made"
 msgstr "Človekom vytvorené (Man made)"
 
@@ -21160,6 +21544,14 @@ msgid "storage_tank"
 msgstr "Zásobník/silo"
 
 msgctxt "building"
+msgid "supermarket"
+msgstr "supermarket"
+
+msgctxt "building"
+msgid "gasometer"
+msgstr "plynojem"
+
+msgctxt "building"
 msgid "cowshed"
 msgstr "maštaľ"
 
@@ -21184,7 +21576,7 @@ msgstr "apartmány (byty)"
 
 msgctxt "building"
 msgid "house"
-msgstr "rodinný dom"
+msgstr "nesamostatný rodinný dom"
 
 msgctxt "building"
 msgid "hut"
@@ -21200,7 +21592,7 @@ msgstr "radová zástavba"
 
 msgctxt "building"
 msgid "detached"
-msgstr "dom na samote"
+msgstr "samostatný rodinný dom"
 
 msgctxt "building"
 msgid "farm"
@@ -22482,9 +22874,6 @@ msgstr "Vinotéka"
 msgid "Boutique"
 msgstr "Butik"
 
-msgid "Shoes"
-msgstr "Obuv"
-
 msgid "Outdoor"
 msgstr "Turistický (Outdoor)"
 
@@ -23509,12 +23898,12 @@ msgstr "možná"
 msgid "Contact (Common Schema)"
 msgstr "Kontakt (bežná schéma)"
 
-msgid "Fax Number"
-msgstr "Číslo faxu"
-
 msgid "Email Address"
 msgstr "E-mailová adresa"
 
+msgid "Fax Number"
+msgstr "Číslo faxu"
+
 msgid "Image"
 msgstr "Obrázok"
 
@@ -23943,6 +24332,9 @@ msgstr "nekompletný objekt: iba {0} a {1}"
 msgid "{0} together with addr:*"
 msgstr "{0} spolu s addr:*"
 
+msgid "{0} together with {1} and conflicting values"
+msgstr "{0} spolu s {1} a odporujúce si hodnoty"
+
 msgid "{0} on suspicious object"
 msgstr "{0} na podozrivom objekte"
 
@@ -23967,6 +24359,18 @@ msgstr "alternatívny názov bez {0}"
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr "nekompletné použitie {0} na ceste bez {1}"
 
+msgid "Same value of {0} and {1}"
+msgstr "Rovnaká hodnota {0} a {1}"
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr "Rovnaká hodnota {0}, {1} a {2}"
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr "{0} a {1} spolu s {2} a odporujúce si hodnoty"
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr "Podozrivá kombinácia značiek: {0} a {1}"
+
 msgid "{0}={1} is deprecated"
 msgstr "{0}={1} je zastaralé"
 
@@ -24036,6 +24440,9 @@ msgstr "kľúč s nezvyčajným znakom"
 msgid "uncommon short key"
 msgstr "nezvyčajne krátky kľúč"
 
+msgid "{0} is inaccurate"
+msgstr "{0} je nepresné"
+
 msgid "{0} on a node. Should be used on a way."
 msgstr "{0} na bode. Malo by byť použité na ceste."
 
@@ -24130,9 +24537,22 @@ msgstr ""
 "{0}: metre sú predvolené; desatinným oddeľovačom je bodka; ak používate "
 "jednotku, zadajte pred ňu medzeru"
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+"{0}: predvolenou jednotkou je tona; desatinným oddeľovačom je bodka; ak "
+"uvádzate jednotky, oddeľte ich medzerou"
+
 msgid "unusual {0} format"
 msgstr "neobvyklý formát pre {0}"
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+"{0}: predvolenou jednotkou je kilometer; desatinným oddeľovačom je bodka; ak "
+"uvádzate jednotky, oddeľte ich medzerou"
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 "napätie by malo byť vo Voltoch bez medzier, oddeľovačov a merných jednotiek"
@@ -24518,6 +24938,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -24572,9 +24995,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -25335,59 +25755,80 @@ msgstr ""
 "Dajte nám vedieť čo ste robili a čo sa stalo. Do hlásenia pridajte "
 "nasledovný text, aby sme mohli nájsť príčinu problému."
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
+msgstr ""
+
+msgid "Settings for the area detection algorithm."
+msgstr ""
+
+msgid "Boofcv - high resolution images"
+msgstr ""
+
+msgid "Custom - low resolution images"
+msgstr ""
+
+msgid ""
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
+msgstr ""
+
+msgid "Algorithm"
+msgstr ""
+
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Distance Tolerance"
 msgstr ""
 
 msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Angle Tolerance"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid "Use HSV based algorithm"
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
-msgid "Plugin Settings"
+msgid "How often thinning operation should be applied (Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Thinning Iterations"
 msgstr ""
 
 msgid "show address dialog"
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Show Address Dialog after mapping an area"
 msgstr ""
 
 msgid "merge nodes"
 msgstr ""
 
-msgid "How often thinning operation should be applied (Default {0})."
-msgstr ""
-
-msgid "Thinning Iterations"
+msgid "Merge nodes with existing nodes"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -26039,6 +26480,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr "Prázdna vrstva"
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr "WMS vrstva ({0}), {1} dlaždice(dlaždíc) načítané"
 
@@ -27537,16 +27981,322 @@ msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
 msgid "Missing input data"
-msgstr ""
+msgstr "Chýbajú vstupné dáta"
+
+msgid "Mapillary Images"
+msgstr "Obrázky z Mapillary"
+
+msgid "Mapillary layer"
+msgstr "Vrstva Mapillary"
+
+msgid "Total images:"
+msgstr "Počet obrázkov:"
+
+msgid "images"
+msgstr "obrázky"
 
 msgid "Mapillary"
+msgstr "Mapillary"
+
+msgid "Create Mapillary layer"
+msgstr "Vytvoriť vrstvu Mapillary"
+
+msgid "Start Mapillary layer"
+msgstr "Začať vrstvu Mapillary"
+
+msgid "Download Mapillary images in current view"
+msgstr "Stiahnuť obrázky z Mapillary pre aktuálny pohľad"
+
+msgid "Export pictures"
+msgstr "Exportovať obrázky"
+
+msgid "Export Mapillary pictures"
+msgstr "Exportovať obrázky Mapillary"
+
+msgid "Export images"
+msgstr "Exportovať obrázky"
+
+msgid "Import pictures"
+msgstr "Importovať obrázky"
+
+msgid "Import local pictures"
+msgstr "Importovať lokálne obrázky"
+
+msgid "Import pictures into Mapillary layer"
+msgstr "Importovať obrázky do vrstvy Mapillary"
+
+msgid "Select pictures"
+msgstr "Zvoliť obrázky"
+
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "Export"
-msgstr "Export"
+msgid "Join mode"
+msgstr ""
+
+msgid "Join/unjoin pictures"
+msgstr ""
+
+msgid "Join Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures"
+msgstr ""
+
+msgid "Upload Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures."
+msgstr ""
+
+msgid "Walk mode"
+msgstr ""
+
+msgid "Start walk mode"
+msgstr ""
+
+msgid "Zoom to selected image"
+msgstr "Priblížiť na zvolený obrázok"
+
+msgid "Zoom to the currently selected Mapillary image"
+msgstr "Priblížiť na zvolený obrázok z Mapillary"
+
+msgid "Uploaded {0} images"
+msgstr ""
+
+msgid "Approve upload on the website"
+msgstr ""
+
+msgid "View in website"
+msgstr "Zobraziť na webstránke"
+
+msgid "Copy key"
+msgstr ""
+
+msgid "Copy key tag"
+msgstr ""
+
+msgid "Edit on website"
+msgstr ""
+
+msgid "Export all images"
+msgstr "Exportovať všetky obrázky"
+
+msgid "Export selected sequence"
+msgstr "Exportovať vybranú postupnosť"
+
+msgid "Export selected images"
+msgstr "Exportovať vybrané obrázky"
+
+msgid "Rewrite imported images"
+msgstr "Prepísať importované obrázky"
+
+msgid "Select a folder"
+msgstr "Vybrať prečinok"
+
+msgid "Explore"
+msgstr "Preskúmať"
+
+msgid "Select a directory"
+msgstr "Vyberte priečinok"
+
+msgid "Speed limit"
+msgstr "Rýchlostné obmedzenie"
+
+msgid "Give way"
+msgstr ""
+
+msgid "No entry"
+msgstr ""
+
+msgid "Intersection danger"
+msgstr ""
+
+msgid "Mandatory direction (any)"
+msgstr ""
+
+msgid "No turn"
+msgstr ""
+
+msgid "Uneven road"
+msgstr ""
+
+msgid "No parking"
+msgstr ""
+
+msgid "No overtaking"
+msgstr ""
+
+msgid "Pedestrian crossing"
+msgstr ""
+
+msgid "Years"
+msgstr ""
+
+msgid "Months"
+msgstr ""
+
+msgid "Days"
+msgstr ""
+
+msgid "Mapillary filter"
+msgstr "Filter Mapillary"
+
+msgid "Open Mapillary filter dialog"
+msgstr "Otvoriť okno filtra Mapillary"
+
+msgid "Downloaded images"
+msgstr "Stiahnuté obrázky"
+
+msgid "Only images with signs"
+msgstr "Iba obrázky so značkami"
+
+msgid "Choose signs"
+msgstr "Zvoľte značky"
+
+msgid "Mapillary history"
+msgstr "História Mapillary"
+
+msgid "Open Mapillary history dialog"
+msgstr "Otvoriť okno histórie Mapillary"
+
+msgid "Open Mapillary window"
+msgstr "Otvoriť okno Mapillary"
+
+msgid "Mapillary dialog"
+msgstr "Okno Mapillary"
+
+msgid "Open Mapillary main dialog"
+msgstr "Otvoriť hlavné okno Mapillary"
+
+msgid "Next picture"
+msgstr "Nasledujúci obrázok"
+
+msgid "Shows the next picture in the sequence"
+msgstr "Zobrazí nasledujúci obrázok v postupnosti"
+
+msgid "Previous picture"
+msgstr "Predchádzajúci obrázok"
+
+msgid "Shows the previous picture in the sequence"
+msgstr "Zobrazí predchádzajúci obrázok v postupnosti"
+
+msgid "Jump to red"
+msgstr "Skočiť na červenú"
+
+msgid "Jumps to the picture at the other side of the red line"
+msgstr "Preskočí na obrázok na druhej strane červenej čiary"
+
+msgid "Jump to blue"
+msgstr "Skočiť na modrú"
+
+msgid "Jumps to the picture at the other side of the blue line"
+msgstr "Preskočí na obrázok na druhej strane modrej čiary"
+
+msgid "Stops the walk."
+msgstr ""
+
+msgid "Play"
+msgstr ""
+
+msgid "Continues with the paused walk."
+msgstr ""
+
+msgid "Pause"
+msgstr ""
+
+msgid "Pauses the walk."
+msgstr ""
+
+msgid "Reverse buttons position when displaying images."
+msgstr "Otočiť pozície tlačidiel pri zobrazení obrázkov."
+
+msgid "Display hour when the picture was taken"
+msgstr "Zobraziť hodinu kedy bol obrázok zaznamenaný"
+
+msgid "Use 24 hour format"
+msgstr "Použiť 24-hodinový formát"
+
+msgid "Move to picture''s location with next/previous buttons"
+msgstr ""
+
+msgid "Download mode: "
+msgstr ""
+
+msgid "Upload selected sequence"
+msgstr ""
+
+msgid "Delete after upload"
+msgstr ""
+
+msgid "Wait for full quality pictures"
+msgstr ""
+
+msgid "Follow selected image"
+msgstr ""
+
+msgid "Go forward"
+msgstr ""
+
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
+msgstr ""
+
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
+msgstr ""
+
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
+msgstr ""
+
+msgid "Downloading"
+msgstr "Sťahuje sa"
+
+msgid "Select mode"
+msgstr ""
+
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
+msgstr ""
+
+msgid "Downloading Mapillary images"
+msgstr ""
+
+msgid "Total Mapillary images: {0}"
+msgstr ""
+
+msgid "No images found"
+msgstr "Nenašli sa žiadne obrázky"
+
+msgid "Finished upload"
+msgstr ""
+
+msgid "Uploading: {0}"
+msgstr ""
 
 msgid "Measured values"
 msgstr "Namerané hodnoty"
@@ -27566,6 +28316,9 @@ msgstr "Dĺžka výberu"
 msgid "Selection Area"
 msgstr "Plocha výberu"
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr "Uhol"
 
@@ -27630,47 +28383,6 @@ msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 "Nie som schopný nájsť sprostredkujúce body. Prosím skontrolujte Váš výber."
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr "O plugine"
 
@@ -27903,6 +28615,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr "Nástroje"
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -29122,6 +29837,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr "Nástroje pre relácie"
 
@@ -29296,6 +30032,9 @@ msgstr "Vrátený zmenový súbor"
 msgid "It is not allowed to revert changeset from {0}"
 msgstr "Nie je povolené vrátiť zmenový súbor z {0}"
 
+msgid "Downloading objects history"
+msgstr "Sťahuje sa história objektov"
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr "Chýba zlučovaný cieľ pre {0} s id {1}"
 
@@ -29305,6 +30044,9 @@ msgstr "História objektov"
 msgid "History reverter"
 msgstr "Vrátenie histórie"
 
+msgid "Tool: Display objects history dialog"
+msgstr "Nástroj: Zobraziť okno histórie objektov"
+
 msgid "Preparing history data..."
 msgstr "Pripravujem dáta histórie..."
 
@@ -29492,6 +30234,9 @@ msgstr "Nová hodnota pre {0}"
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -29670,6 +30415,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr "OSM Export"
 
@@ -29679,6 +30457,9 @@ msgstr "Exportovať dopravné údaje do súboru siete SUMO."
 msgid "SUMO Export"
 msgstr "SUMO Export"
 
+msgid "Export"
+msgstr "Export"
+
 msgid "AutoSave LiveData"
 msgstr "Automatické ukladanie LiveData"
 
@@ -29922,9 +30703,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -31554,9 +32332,6 @@ msgstr "Hľadanie waypointu"
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr "Hľadať za waypointom. Kliknite a posuňte náhľad mapy k waypointu."
 
-msgid "Way Select"
-msgstr "Way Select (výber cesty)"
-
 msgid "Add names from Wikipedia"
 msgstr "Pridať názvy z Wikipedie"
 
diff --git a/i18n/po/sl.po b/i18n/po/sl.po
index a931160..e059679 100644
--- a/i18n/po/sl.po
+++ b/i18n/po/sl.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2013-03-30 13:06+0000\n"
 "Last-Translator: Dirk Stöcker <launchpad at dstoecker.de>\n"
 "Language-Team: Slovenian <sl at li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || "
 "n%100==4 ? 3 : 0);\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:56+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 05:00+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: sl\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -98,19 +98,16 @@ msgstr ""
 msgid "Updating user interface"
 msgstr ""
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
 msgstr ""
 
 msgid "Warning"
 msgstr "Pozor"
 
-msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
+msgid "Ignoring malformed file URL: \"{0}\""
 msgstr ""
 
-msgid "Ignoring malformed URL: \"{0}\""
+msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 
 msgid ""
@@ -447,6 +444,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
 
@@ -1034,6 +1034,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr "Prilepi"
 
@@ -1959,15 +1983,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr "Zaključi risanje."
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -1989,6 +2004,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2107,9 +2131,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2323,9 +2344,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr "regularni izraz"
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2539,6 +2566,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2581,6 +2612,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3033,6 +3067,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3150,10 +3202,44 @@ msgctxt "compass"
 msgid "E"
 msgstr "V"
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3349,6 +3435,12 @@ msgstr "besedilo"
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3376,13 +3468,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -4000,9 +4092,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -4012,12 +4101,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4198,13 +4299,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4408,6 +4509,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4621,45 +4723,56 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
-msgstr "Datoteka"
+msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
-msgstr "Pogled"
+msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
-msgstr "Orodja"
+msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
-msgstr "Izbor"
+msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
-msgstr "Prednastavitve"
+msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
+msgctxt "menu"
+msgid "Help"
+msgstr ""
+
 msgid "Menu: {0}"
 msgstr "Meni: {0}"
 
-msgid "Save and load the current session (list of layers, etc.)"
-msgstr ""
-
 msgid "Edit toolbar"
 msgstr ""
 
@@ -4681,8 +4794,9 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
-msgstr "Zvok"
+msgstr ""
 
 msgid "Do not hide toolbar"
 msgstr ""
@@ -4803,58 +4917,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
+msgid " ({0})"
 msgstr ""
 
-msgid "Pos."
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "Role"
-msgstr "Vloga"
-
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5283,6 +5355,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr "Vloga"
+
 msgid "Primitive"
 msgstr ""
 
@@ -5523,6 +5598,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5669,6 +5747,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5772,7 +5885,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5900,6 +6013,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5909,45 +6027,76 @@ msgstr ""
 msgid "unknown"
 msgstr "neznan"
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
 msgstr ""
 
-msgid "Projected coordinates:"
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
 msgstr ""
 
 msgid ""
-"Enter easting and northing (x and y) separated by space, comma or semicolon."
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
 msgstr ""
 
-msgid "Lat/Lon"
+msgid "Coordinate value can be in one of three formats:"
 msgstr ""
 
-msgid "East/North"
+msgid "<i>degrees</i><tt>°</tt>"
 msgstr ""
 
-msgid "Please enter a GPS coordinates"
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
 msgstr ""
 
-msgid "Please enter a Easting and Northing"
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
 msgstr ""
 
-msgid "Toggle visibility of layer: {0}"
-msgstr "Preklop vidnost plasti: {0}"
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
 
-msgid "Open a list of all loaded layers."
-msgstr "Odpri seznam vseh naloženih plasti."
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
 
-msgid "Delete the selected layers."
+msgid "Some examples:"
+msgstr ""
+
+msgid "Projected coordinates:"
+msgstr ""
+
+msgid ""
+"Enter easting and northing (x and y) separated by space, comma or semicolon."
+msgstr ""
+
+msgid "Lat/Lon"
+msgstr ""
+
+msgid "East/North"
+msgstr ""
+
+msgid "Please enter a GPS coordinates"
+msgstr ""
+
+msgid "Please enter a Easting and Northing"
+msgstr ""
+
+msgid "Toggle visibility of layer: {0}"
+msgstr "Preklop vidnost plasti: {0}"
+
+msgid "Open a list of all loaded layers."
+msgstr "Odpri seznam vseh naloženih plasti."
+
+msgid "Delete the selected layers."
 msgstr "Izbriši izbrano plast."
 
 msgid "Show/hide"
@@ -5965,6 +6114,12 @@ msgstr "Prekrivnost"
 msgid "Adjust opacity of the layer."
 msgstr "Nastavi prekrivnost plasti."
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr "Aktiviraj"
 
@@ -6094,6 +6249,12 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
+msgid "Mini map"
+msgstr ""
+
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
 msgid "List of notes"
 msgstr ""
 
@@ -6152,10 +6313,15 @@ msgstr "ID objekta:"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "Vnesi ID objekta, ki naj se prenese"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6184,6 +6350,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr ""
 
+msgid "Selection"
+msgstr "Izbor"
+
 msgid "Open a selection list window."
 msgstr "Odpri okno s seznamom izbora."
 
@@ -6274,6 +6443,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr "Popravi"
 
@@ -6868,6 +7043,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6963,14 +7144,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7143,6 +7323,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7682,6 +7868,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8535,6 +8724,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr "Naloži vse ploščice"
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr "Spremeni ločljivost"
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr "Naloži ploščico"
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr "Prilagodi barvo"
 
@@ -8588,6 +8877,9 @@ msgstr "Shrani datoteko GPX"
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8608,7 +8900,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8691,80 +8983,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr "Shrani datoteko OSM"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-
-msgid "Auto Zoom"
-msgstr ""
-
-msgid "Auto load tiles"
-msgstr ""
-
-msgid "Show Errors"
-msgstr ""
-
-msgid "Load Tile"
-msgstr "Naloži ploščico"
-
-msgid "Show Tile Info"
-msgstr ""
-
-msgid "Load All Tiles"
-msgstr "Naloži vse ploščice"
-
-msgid "Load All Error Tiles"
-msgstr ""
-
-msgid "Increase zoom"
-msgstr ""
-
-msgid "Decrease zoom"
-msgstr ""
-
-msgid "Snap to tile size"
-msgstr ""
-
-msgid "Flush Tile Cache"
-msgstr ""
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
@@ -8774,56 +8992,30 @@ msgstr ""
 msgid "No validation errors"
 msgstr ""
 
-msgid "Blank Layer"
-msgstr "Prazna plast"
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
+msgid "Set WMS Bookmark"
 msgstr ""
 
-msgid "Download visible tiles"
-msgstr "Naloži vidne ploščice"
-
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-
-msgid "Change resolution"
-msgstr "Spremeni ločljivost"
-
-msgid "Reload erroneous tiles"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Set WMS Bookmark"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Automatic downloading"
-msgstr "Samodejno sprejemanje"
-
-msgid "Zoom to native resolution"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Supported projections are: {0}"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
-msgstr "Nepodprta različica datoteke WMS; našel {0}, pričakoval {1}"
-
-msgid "Save WMS file"
+msgid "Try Again"
 msgstr ""
 
-msgid "Correlate to GPX"
+msgid "No images could be matched!"
 msgstr ""
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
@@ -8910,24 +9102,9 @@ msgstr ""
 msgid "Offset:"
 msgstr ""
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
 msgid "Correlate"
 msgstr ""
 
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9125,9 +9302,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr "Slike JPEG (*.jpg)"
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9190,9 +9364,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr "Največja površina na zahtevo:"
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr "Prenesi okoli:"
 
@@ -9818,15 +9989,15 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr "Za upoštevanje nekaterih sprememb je potrebno ponovno zagnati JOSM."
 
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr ""
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -10621,6 +10792,21 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
+msgid "1. Enter getCapabilities URL"
+msgstr ""
+
+msgid "2. Enter name for this layer"
+msgstr ""
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr ""
 
@@ -10639,6 +10825,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10660,6 +10858,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10702,9 +10903,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr "Plast"
 
@@ -10729,36 +10927,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11694,6 +11877,14 @@ msgstr "Uporabi prednastavitev"
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] "Spremeni {0} predmete"
@@ -11804,6 +11995,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr "Prednastavitve"
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12057,6 +12251,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12599,6 +12796,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr "Nepodprta različica datoteke WMS; našel {0}, pričakoval {1}"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12984,6 +13184,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13982,6 +14195,9 @@ msgstr "Posodobi"
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr "Pogled"
+
 msgid "Blue:"
 msgstr ""
 
@@ -14021,7 +14237,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -14033,9 +14249,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14144,6 +14357,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14157,12 +14373,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14199,10 +14421,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14229,6 +14457,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14253,7 +14484,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14268,6 +14499,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14280,12 +14514,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14306,6 +14534,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14338,10 +14569,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14371,6 +14599,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14386,154 +14620,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
+msgstr ""
+
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
+msgstr ""
+
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Przemyśl: Budynki (buildings)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14548,9 +14788,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14680,6 +14929,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14695,7 +14959,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -15021,6 +15285,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15105,11 +15374,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15163,7 +15427,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15178,9 +15442,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15261,6 +15522,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15299,6 +15568,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15374,9 +15646,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15782,6 +16051,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15806,10 +16083,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15826,6 +16099,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15842,11 +16119,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15862,6 +16151,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15874,6 +16167,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15901,6 +16198,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16292,6 +16601,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16368,6 +16680,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr "Cesta (neznana kategorija)"
 
@@ -16905,6 +17220,12 @@ msgstr ""
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17094,8 +17415,13 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
-msgstr "Voda"
+msgstr ""
 
 msgid "Drain"
 msgstr ""
@@ -17147,6 +17473,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17288,6 +17618,120 @@ msgstr ""
 msgid "public"
 msgstr ""
 
+msgid "Marine Fuel"
+msgstr ""
+
+msgid "Agip"
+msgstr ""
+
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
 msgid "Pier"
 msgstr "Pomol"
 
@@ -17404,6 +17848,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr "Žičnica"
 
@@ -17527,78 +17974,6 @@ msgstr ""
 msgid "Fuel"
 msgstr "Gorivo"
 
-msgid "Agip"
-msgstr ""
-
-msgid "Aral"
-msgstr ""
-
-msgid "Avia"
-msgstr ""
-
-msgid "BP"
-msgstr ""
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr ""
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
 msgid "With shop"
 msgstr ""
 
@@ -17608,51 +17983,12 @@ msgstr ""
 msgid "kiosk"
 msgstr ""
 
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -17871,9 +18207,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17892,6 +18225,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18094,6 +18430,12 @@ msgstr ""
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18184,6 +18526,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18398,7 +18743,10 @@ msgstr "Savna"
 msgid "Horse Riding"
 msgstr ""
 
-msgid "Brothel"
+msgid "Casino"
+msgstr ""
+
+msgid "Brothel"
 msgstr ""
 
 msgid "Playground"
@@ -18885,8 +19233,8 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
-msgstr "Recikliranje"
+msgid "Recycling Container"
+msgstr ""
 
 msgid "Batteries"
 msgstr ""
@@ -18894,19 +19242,46 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
+msgid "Cardboard"
+msgstr ""
+
+msgid "Electrical Appliances"
+msgstr ""
+
 msgid "Glass"
 msgstr ""
 
+msgid "Glass Bottles"
+msgstr ""
+
+msgid "Green Waste"
+msgstr ""
+
 msgid "Paper"
 msgstr ""
 
+msgid "Plastic"
+msgstr ""
+
+msgid "Plastic Bottles"
+msgstr ""
+
+msgid "Plastic Packaging"
+msgstr ""
+
 msgid "Scrap Metal"
 msgstr ""
 
-msgid "container"
+msgid "Shoes"
+msgstr ""
+
+msgid "Small Appliances"
 msgstr ""
 
-msgid "centre"
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
 msgstr ""
 
 msgid "Waste Basket/Trash Can"
@@ -19110,6 +19485,9 @@ msgstr "Lokostrelstvo"
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr "Plezanje"
 
@@ -19285,12 +19663,18 @@ msgstr ""
 msgid "Basketball"
 msgstr "Košarka"
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr "Odbojka"
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr "Golf"
 
@@ -19306,14 +19690,14 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
-msgstr "Hokej"
+msgid "Ice Hockey"
+msgstr ""
 
 msgid "Pelota"
 msgstr ""
@@ -19336,9 +19720,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19357,9 +19738,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -19432,6 +19810,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20752,9 +21138,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -21767,10 +22150,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22197,6 +22580,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22221,6 +22607,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22281,6 +22679,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22371,9 +22772,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22743,6 +23153,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22797,9 +23210,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23543,47 +23953,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23592,10 +24011,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24198,6 +24629,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr "Prazna plast"
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25310,361 +25744,667 @@ msgstr ""
 msgid "Update IRS adjustment layer"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
-msgstr ""
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr "Ločljivost ploščic Landsat (pikslov na stopinjo)"
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr "Velikost ploščic Landsat (pikslov)"
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr "Plast WMS"
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+"Ločljivost ploščic Landsat, merjena v pikslih na stopinjo. Privzeto 4000."
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
+msgstr ""
+
+msgid "Connecting"
+msgstr ""
+
+msgid "Connected"
+msgstr ""
+
+msgid "no name"
+msgstr ""
+
+msgid "Live GPS"
+msgstr ""
+
+msgid "Show GPS data."
+msgstr "Prikaži GPS podatke."
+
+msgid "Status"
+msgstr "Stanje"
+
+msgid "Way Info"
+msgstr ""
+
+msgid "Speed"
+msgstr "Hitrost"
+
+msgid "Course"
+msgstr ""
+
+msgid "LiveGPS layer"
+msgstr ""
+
+msgid "Capture GPS Track"
+msgstr "Zajemi GPS sled"
+
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgstr ""
+"Povezava s strežnikom gpsd in prikaz trenutnega položaja na plasti LiveGPS."
+
+msgid "Center Once"
+msgstr "Centriraj zdaj"
+
+msgid "Center the LiveGPS layer to current position."
+msgstr "Centiraj plast LiveGPS na trenuten položaj."
+
+msgid "Auto-Center"
+msgstr "Samodejno centriraj"
 
-msgid "IRS Adjustment Layer"
-msgstr ""
+msgid "Continuously center the LiveGPS layer to current position."
+msgstr "Nenehno centriraj plast LiveGPS na trenutni položaj."
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Open MapDust"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Total images:"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "images"
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Mapillary"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "junctions"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Export pictures"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Export images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Import pictures"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Select pictures"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Check "
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Join mode"
 msgstr ""
 
-msgid "Search "
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Walk mode"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Start walk mode"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "View in website"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Copy key"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Edit on website"
 msgstr ""
 
-msgid "Tracing"
+msgid "Export all images"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Export selected images"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Select a folder"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Explore"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "Select a directory"
 msgstr ""
 
-msgid "east"
+msgid "Speed limit"
 msgstr ""
 
-msgid "northeast"
+msgid "Give way"
 msgstr ""
 
-msgid "north"
+msgid "No entry"
 msgstr ""
 
-msgid "northwest"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "west"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "southwest"
+msgid "No turn"
 msgstr ""
 
-msgid "south"
+msgid "Uneven road"
 msgstr ""
 
-msgid "southeast"
+msgid "No parking"
 msgstr ""
 
-msgid "coastline"
+msgid "No overtaking"
 msgstr ""
 
-msgid "land"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "Days"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
-msgstr "Ločljivost ploščic Landsat (pikslov na stopinjo)"
-
-msgid "Size of Landsat tiles (pixels)"
-msgstr "Velikost ploščic Landsat (pikslov)"
-
-msgid "Shift all traces to east (degrees)"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "Downloaded images"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "Only images with signs"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Choose signs"
 msgstr ""
 
-msgid "WMS Layer"
-msgstr "Plast WMS"
+msgid "Mapillary history"
+msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Next picture"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Previous picture"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Jump to red"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
-"Ločljivost ploščic Landsat, merjena v pikslih na stopinjo. Privzeto 4000."
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Play"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Pause"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Not connected"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Connecting"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "Connected"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "no name"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Live GPS"
+msgid "Go forward"
 msgstr ""
 
-msgid "Show GPS data."
-msgstr "Prikaži GPS podatke."
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Status"
-msgstr "Stanje"
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Way Info"
+msgid "2 images joined"
 msgstr ""
 
-msgid "Speed"
-msgstr "Hitrost"
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Course"
-msgstr ""
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "LiveGPS layer"
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Capture GPS Track"
-msgstr "Zajemi GPS sled"
-
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
-"Povezava s strežnikom gpsd in prikaz trenutnega položaja na plasti LiveGPS."
-
-msgid "Center Once"
-msgstr "Centriraj zdaj"
-
-msgid "Center the LiveGPS layer to current position."
-msgstr "Centiraj plast LiveGPS na trenuten položaj."
-
-msgid "Auto-Center"
-msgstr "Samodejno centriraj"
 
-msgid "Continuously center the LiveGPS layer to current position."
-msgstr "Nenehno centriraj plast LiveGPS na trenutni položaj."
+msgid "Downloading"
+msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25685,6 +26425,9 @@ msgstr "Dolžina izbranih poti"
 msgid "Selection Area"
 msgstr "Izbrana površina"
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr "Kot"
 
@@ -25743,47 +26486,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -26016,6 +26718,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr "Orodja"
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27233,6 +27938,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27404,6 +28130,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27413,6 +28142,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27593,6 +28325,9 @@ msgstr "Nova vrednost za {0}"
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27771,6 +28506,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27780,6 +28548,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -28016,9 +28787,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29503,9 +30271,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/sq.po b/i18n/po/sq.po
index 3da9e9a..99d446a 100644
--- a/i18n/po/sq.po
+++ b/i18n/po/sq.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2011-11-04 19:43+0000\n"
 "Last-Translator: StefanPrifti <Unknown>\n"
 "Language-Team: FLOSS Kosova\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:31+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:32+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -97,19 +97,16 @@ msgstr ""
 msgid "Updating user interface"
 msgstr ""
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
 msgstr ""
 
 msgid "Warning"
 msgstr "Vërejtje"
 
-msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
+msgid "Ignoring malformed file URL: \"{0}\""
 msgstr ""
 
-msgid "Ignoring malformed URL: \"{0}\""
+msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 
 msgid ""
@@ -444,6 +441,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
 
@@ -1029,6 +1029,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr ""
 
@@ -1945,15 +1969,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr ""
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -1975,6 +1990,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2093,9 +2117,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2309,9 +2330,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr ""
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2525,6 +2552,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2567,6 +2598,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3017,6 +3051,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3134,10 +3186,44 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3327,6 +3413,12 @@ msgstr ""
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3354,13 +3446,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -3976,9 +4068,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -3988,12 +4077,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4174,13 +4275,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4378,6 +4479,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4591,43 +4693,54 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
 msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
 msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
 msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
 msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
-msgid "Menu: {0}"
+msgctxt "menu"
+msgid "Help"
 msgstr ""
 
-msgid "Save and load the current session (list of layers, etc.)"
+msgid "Menu: {0}"
 msgstr ""
 
 msgid "Edit toolbar"
@@ -4651,6 +4764,7 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
 msgstr ""
 
@@ -4773,58 +4887,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr ""
-
-msgid "Pos."
+msgid " ({0})"
 msgstr ""
 
-msgid "Role"
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5253,6 +5325,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr ""
+
 msgid "Primitive"
 msgstr ""
 
@@ -5493,6 +5568,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5639,6 +5717,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5742,7 +5855,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5870,6 +5983,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5879,17 +5997,48 @@ msgstr ""
 msgid "unknown"
 msgstr ""
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -5935,6 +6084,12 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr ""
 
@@ -6064,10 +6219,16 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
-msgid "List of notes"
+msgid "Mini map"
 msgstr ""
 
-msgid "Add comment"
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
+msgid "List of notes"
+msgstr ""
+
+msgid "Add comment"
 msgstr ""
 
 msgid "Comment"
@@ -6122,10 +6283,15 @@ msgstr ""
 msgid "Enter the ID of the object that should be downloaded"
 msgstr ""
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6154,6 +6320,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr ""
 
+msgid "Selection"
+msgstr ""
+
 msgid "Open a selection list window."
 msgstr ""
 
@@ -6244,6 +6413,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -6838,6 +7013,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6929,14 +7110,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7109,6 +7289,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7644,6 +7830,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8489,6 +8678,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr ""
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr ""
 
@@ -8542,6 +8831,9 @@ msgstr ""
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8562,7 +8854,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8645,80 +8937,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr ""
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-
-msgid "Auto Zoom"
-msgstr ""
-
-msgid "Auto load tiles"
-msgstr ""
-
-msgid "Show Errors"
-msgstr ""
-
-msgid "Load Tile"
-msgstr ""
-
-msgid "Show Tile Info"
-msgstr ""
-
-msgid "Load All Tiles"
-msgstr ""
-
-msgid "Load All Error Tiles"
-msgstr ""
-
-msgid "Increase zoom"
-msgstr ""
-
-msgid "Decrease zoom"
-msgstr ""
-
-msgid "Snap to tile size"
-msgstr ""
-
-msgid "Flush Tile Cache"
-msgstr ""
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
@@ -8728,56 +8946,30 @@ msgstr ""
 msgid "No validation errors"
 msgstr ""
 
-msgid "Blank Layer"
-msgstr ""
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "Download visible tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-
-msgid "Change resolution"
-msgstr ""
-
-msgid "Reload erroneous tiles"
-msgstr ""
-
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Automatic downloading"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Zoom to native resolution"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Supported projections are: {0}"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Save WMS file"
+msgid "Try Again"
 msgstr ""
 
-msgid "Correlate to GPX"
+msgid "No images could be matched!"
 msgstr ""
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
@@ -8864,24 +9056,9 @@ msgstr ""
 msgid "Offset:"
 msgstr ""
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
 msgid "Correlate"
 msgstr ""
 
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9075,9 +9252,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr ""
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9140,9 +9314,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9768,15 +9939,15 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr ""
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -10569,13 +10740,28 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
-msgid "imagery fade"
+msgid "1. Enter getCapabilities URL"
 msgstr ""
 
-msgid "Fade Color: "
+msgid "2. Enter name for this layer"
 msgstr ""
 
-msgid "Fade amount: "
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
+msgid "imagery fade"
+msgstr ""
+
+msgid "Fade Color: "
+msgstr ""
+
+msgid "Fade amount: "
 msgstr ""
 
 msgid "Soft"
@@ -10587,6 +10773,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10608,6 +10806,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10650,9 +10851,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr ""
 
@@ -10677,36 +10875,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11642,6 +11825,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] ""
@@ -11750,6 +11941,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12003,6 +12197,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12539,6 +12736,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12924,6 +13124,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13918,6 +14131,9 @@ msgstr ""
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr ""
+
 msgid "Blue:"
 msgstr ""
 
@@ -13957,7 +14173,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -13969,9 +14185,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14080,6 +14293,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14093,12 +14309,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14135,10 +14357,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14165,6 +14393,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14189,7 +14420,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14204,6 +14435,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14216,12 +14450,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14242,6 +14470,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14274,10 +14505,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14307,6 +14535,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14322,154 +14556,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14484,9 +14724,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14616,6 +14865,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14631,7 +14895,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -14957,6 +15221,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15041,11 +15310,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15099,7 +15363,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15114,9 +15378,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15197,6 +15458,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15235,6 +15504,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15310,9 +15582,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15718,6 +15987,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15742,10 +16019,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15762,6 +16035,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15778,11 +16055,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15798,6 +16087,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15810,6 +16103,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15837,6 +16134,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16228,6 +16537,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16304,6 +16616,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr ""
 
@@ -16841,6 +17156,12 @@ msgstr ""
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17030,6 +17351,11 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
 msgstr ""
 
@@ -17083,6 +17409,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17224,13 +17554,127 @@ msgstr ""
 msgid "public"
 msgstr ""
 
-msgid "Pier"
+msgid "Marine Fuel"
 msgstr ""
 
-msgid "Lock Gate"
+msgid "Agip"
 msgstr ""
 
-msgid "Turning Point"
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
+msgid "Pier"
+msgstr ""
+
+msgid "Lock Gate"
+msgstr ""
+
+msgid "Turning Point"
 msgstr ""
 
 msgid "Slipway"
@@ -17340,6 +17784,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -17463,78 +17910,6 @@ msgstr ""
 msgid "Fuel"
 msgstr ""
 
-msgid "Agip"
-msgstr ""
-
-msgid "Aral"
-msgstr ""
-
-msgid "Avia"
-msgstr ""
-
-msgid "BP"
-msgstr ""
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr ""
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
 msgid "With shop"
 msgstr ""
 
@@ -17544,51 +17919,12 @@ msgstr ""
 msgid "kiosk"
 msgstr ""
 
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -17807,9 +18143,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17828,6 +18161,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18030,6 +18366,12 @@ msgstr ""
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18120,6 +18462,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18334,6 +18679,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18821,7 +19169,7 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
@@ -18830,43 +19178,70 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
-msgid "Glass"
+msgid "Cardboard"
 msgstr ""
 
-msgid "Paper"
+msgid "Electrical Appliances"
 msgstr ""
 
-msgid "Scrap Metal"
+msgid "Glass"
 msgstr ""
 
-msgid "container"
+msgid "Glass Bottles"
 msgstr ""
 
-msgid "centre"
+msgid "Green Waste"
 msgstr ""
 
-msgid "Waste Basket/Trash Can"
+msgid "Paper"
 msgstr ""
 
-msgid "Waste Disposal/Dumpster"
+msgid "Plastic"
 msgstr ""
 
-msgid "Sanitary Dump Station"
+msgid "Plastic Bottles"
 msgstr ""
 
-msgid "Suction pumpout"
+msgid "Plastic Packaging"
 msgstr ""
 
-msgid "Gravity drain for hose"
+msgid "Scrap Metal"
 msgstr ""
 
-msgid "Casette or Elsan Disposal"
+msgid "Shoes"
 msgstr ""
 
-msgid "Operation times"
+msgid "Small Appliances"
 msgstr ""
 
-msgid "Backrest"
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
+msgstr ""
+
+msgid "Waste Basket/Trash Can"
+msgstr ""
+
+msgid "Waste Disposal/Dumpster"
+msgstr ""
+
+msgid "Sanitary Dump Station"
+msgstr ""
+
+msgid "Suction pumpout"
+msgstr ""
+
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
+msgstr ""
+
+msgid "Operation times"
+msgstr ""
+
+msgid "Backrest"
 msgstr ""
 
 msgid "Amount of Seats"
@@ -19046,6 +19421,9 @@ msgstr ""
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr ""
 
@@ -19221,12 +19599,18 @@ msgstr ""
 msgid "Basketball"
 msgstr ""
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr ""
 
@@ -19242,13 +19626,13 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
@@ -19272,9 +19656,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19293,9 +19674,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -19368,6 +19746,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20688,9 +21074,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -21703,10 +22086,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22133,6 +22516,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22157,6 +22543,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22217,6 +22615,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22307,9 +22708,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22679,6 +23089,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22733,9 +23146,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23479,47 +23889,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23528,10 +23947,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24134,6 +24565,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr ""
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25231,374 +25665,680 @@ msgid ""
 "highlight tracks"
 msgstr ""
 
-msgid "Delete this"
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
 msgstr ""
 
-msgid "Delete this&older"
+msgid "Connecting"
 msgstr ""
 
-msgid "km/h"
+msgid "Connected"
 msgstr ""
 
-msgid "Track name: "
+msgid "no name"
 msgstr ""
 
-msgid "Update IRS adjustment layer"
+msgid "Live GPS"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid "Show GPS data."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Speed"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Course"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
+msgid "Explore"
 msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25619,6 +26359,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -25677,47 +26420,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -25950,6 +26652,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr ""
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27167,6 +27872,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27338,6 +28064,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27347,6 +28076,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27527,6 +28259,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27705,6 +28440,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27714,6 +28482,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -27950,9 +28721,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29435,9 +30203,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/sr.po b/i18n/po/sr.po
index 603923f..d9eb72f 100644
--- a/i18n/po/sr.po
+++ b/i18n/po/sr.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2015-02-01 15:30+0000\n"
 "Last-Translator: Slobodan Simić <Unknown>\n"
 "Language-Team: Serbian <sr at li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
 "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:55+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 04:59+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: sr\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -98,19 +98,16 @@ msgstr ""
 msgid "Updating user interface"
 msgstr "Ажурирање корисничког интерфејса"
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
 msgstr ""
 
 msgid "Warning"
 msgstr "Упозорење"
 
-msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
+msgid "Ignoring malformed file URL: \"{0}\""
 msgstr ""
 
-msgid "Ignoring malformed URL: \"{0}\""
+msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 
 msgid ""
@@ -445,6 +442,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
 
@@ -1030,6 +1030,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr ""
 
@@ -1946,15 +1970,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr ""
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -1976,6 +1991,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2094,9 +2118,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2310,9 +2331,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr ""
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2526,6 +2553,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2568,6 +2599,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3018,6 +3052,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3135,10 +3187,44 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3328,6 +3414,12 @@ msgstr ""
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3355,13 +3447,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -3977,9 +4069,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -3989,12 +4078,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4175,13 +4276,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4379,6 +4480,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4592,43 +4694,54 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
 msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
 msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
-msgstr "Избор"
+msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
 msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
-msgid "Menu: {0}"
+msgctxt "menu"
+msgid "Help"
 msgstr ""
 
-msgid "Save and load the current session (list of layers, etc.)"
+msgid "Menu: {0}"
 msgstr ""
 
 msgid "Edit toolbar"
@@ -4652,6 +4765,7 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
 msgstr ""
 
@@ -4774,58 +4888,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr ""
-
-msgid "Pos."
+msgid " ({0})"
 msgstr ""
 
-msgid "Role"
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5254,6 +5326,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr ""
+
 msgid "Primitive"
 msgstr ""
 
@@ -5494,6 +5569,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5640,6 +5718,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5743,7 +5856,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5871,6 +5984,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5880,17 +5998,48 @@ msgstr ""
 msgid "unknown"
 msgstr ""
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -5936,6 +6085,12 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr ""
 
@@ -6065,6 +6220,12 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
+msgid "Mini map"
+msgstr ""
+
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
 msgid "List of notes"
 msgstr ""
 
@@ -6123,10 +6284,15 @@ msgstr ""
 msgid "Enter the ID of the object that should be downloaded"
 msgstr ""
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6155,6 +6321,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr ""
 
+msgid "Selection"
+msgstr "Избор"
+
 msgid "Open a selection list window."
 msgstr ""
 
@@ -6245,6 +6414,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -6839,6 +7014,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6930,14 +7111,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7110,6 +7290,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7645,6 +7831,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8491,6 +8680,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr ""
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr ""
 
@@ -8544,6 +8833,9 @@ msgstr ""
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8564,7 +8856,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8647,80 +8939,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr ""
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-
-msgid "Auto Zoom"
-msgstr ""
-
-msgid "Auto load tiles"
-msgstr ""
-
-msgid "Show Errors"
-msgstr ""
-
-msgid "Load Tile"
-msgstr ""
-
-msgid "Show Tile Info"
-msgstr ""
-
-msgid "Load All Tiles"
-msgstr ""
-
-msgid "Load All Error Tiles"
-msgstr ""
-
-msgid "Increase zoom"
-msgstr ""
-
-msgid "Decrease zoom"
-msgstr ""
-
-msgid "Snap to tile size"
-msgstr ""
-
-msgid "Flush Tile Cache"
-msgstr ""
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
@@ -8730,56 +8948,30 @@ msgstr ""
 msgid "No validation errors"
 msgstr ""
 
-msgid "Blank Layer"
-msgstr ""
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "Download visible tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-
-msgid "Change resolution"
-msgstr ""
-
-msgid "Reload erroneous tiles"
-msgstr ""
-
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Automatic downloading"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Zoom to native resolution"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Supported projections are: {0}"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Save WMS file"
+msgid "Try Again"
 msgstr ""
 
-msgid "Correlate to GPX"
+msgid "No images could be matched!"
 msgstr ""
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
@@ -8866,24 +9058,9 @@ msgstr ""
 msgid "Offset:"
 msgstr ""
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
 msgid "Correlate"
 msgstr ""
 
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9077,9 +9254,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr ""
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9142,9 +9316,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9770,15 +9941,15 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr ""
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -10571,24 +10742,51 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
-msgid "imagery fade"
+msgid "1. Enter getCapabilities URL"
 msgstr ""
 
-msgid "Fade Color: "
+msgid "2. Enter name for this layer"
 msgstr ""
 
-msgid "Fade amount: "
+msgid "{0} cache, total cache size: {1} bytes"
 msgstr ""
 
-msgid "Soft"
+msgid "Cache name"
 msgstr ""
 
-msgid "Strong"
+msgid "Object Count"
+msgstr ""
+
+msgid "imagery fade"
+msgstr ""
+
+msgid "Fade Color: "
+msgstr ""
+
+msgid "Fade amount: "
+msgstr ""
+
+msgid "Soft"
+msgstr ""
+
+msgid "Strong"
 msgstr ""
 
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10610,6 +10808,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10652,9 +10853,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr ""
 
@@ -10679,36 +10877,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11644,6 +11827,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] ""
@@ -11752,6 +11943,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12005,6 +12199,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12541,6 +12738,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12926,6 +13126,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13920,6 +14133,9 @@ msgstr ""
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr ""
+
 msgid "Blue:"
 msgstr ""
 
@@ -13959,7 +14175,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -13971,9 +14187,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14082,6 +14295,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14095,12 +14311,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14137,10 +14359,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14167,6 +14395,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14191,7 +14422,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14206,6 +14437,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14218,12 +14452,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14244,6 +14472,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14276,10 +14507,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14309,6 +14537,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14324,154 +14558,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14486,9 +14726,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14618,6 +14867,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14633,7 +14897,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -14959,6 +15223,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15043,11 +15312,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15101,7 +15365,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15116,9 +15380,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15199,6 +15460,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15237,6 +15506,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15312,9 +15584,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15720,6 +15989,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15744,10 +16021,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15764,6 +16037,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15780,11 +16057,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
+msgstr ""
+
+msgctxt "sport"
+msgid "ice_hockey"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15800,6 +16089,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15812,6 +16105,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15839,6 +16136,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16230,6 +16539,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16306,6 +16618,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr ""
 
@@ -16843,6 +17158,12 @@ msgstr ""
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17032,6 +17353,11 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
 msgstr ""
 
@@ -17085,6 +17411,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17226,10 +17556,124 @@ msgstr ""
 msgid "public"
 msgstr ""
 
-msgid "Pier"
+msgid "Marine Fuel"
 msgstr ""
 
-msgid "Lock Gate"
+msgid "Agip"
+msgstr ""
+
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
+msgid "Pier"
+msgstr ""
+
+msgid "Lock Gate"
 msgstr ""
 
 msgid "Turning Point"
@@ -17342,6 +17786,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -17465,78 +17912,6 @@ msgstr ""
 msgid "Fuel"
 msgstr ""
 
-msgid "Agip"
-msgstr ""
-
-msgid "Aral"
-msgstr ""
-
-msgid "Avia"
-msgstr ""
-
-msgid "BP"
-msgstr ""
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr ""
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
 msgid "With shop"
 msgstr ""
 
@@ -17546,51 +17921,12 @@ msgstr ""
 msgid "kiosk"
 msgstr ""
 
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -17809,9 +18145,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17830,6 +18163,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18032,6 +18368,12 @@ msgstr ""
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18122,6 +18464,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18336,6 +18681,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18823,7 +19171,7 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
@@ -18832,43 +19180,70 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
-msgid "Glass"
+msgid "Cardboard"
 msgstr ""
 
-msgid "Paper"
+msgid "Electrical Appliances"
 msgstr ""
 
-msgid "Scrap Metal"
+msgid "Glass"
 msgstr ""
 
-msgid "container"
+msgid "Glass Bottles"
 msgstr ""
 
-msgid "centre"
+msgid "Green Waste"
 msgstr ""
 
-msgid "Waste Basket/Trash Can"
+msgid "Paper"
 msgstr ""
 
-msgid "Waste Disposal/Dumpster"
+msgid "Plastic"
 msgstr ""
 
-msgid "Sanitary Dump Station"
+msgid "Plastic Bottles"
 msgstr ""
 
-msgid "Suction pumpout"
+msgid "Plastic Packaging"
 msgstr ""
 
-msgid "Gravity drain for hose"
+msgid "Scrap Metal"
 msgstr ""
 
-msgid "Casette or Elsan Disposal"
+msgid "Shoes"
 msgstr ""
 
-msgid "Operation times"
+msgid "Small Appliances"
 msgstr ""
 
-msgid "Backrest"
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
+msgstr ""
+
+msgid "Waste Basket/Trash Can"
+msgstr ""
+
+msgid "Waste Disposal/Dumpster"
+msgstr ""
+
+msgid "Sanitary Dump Station"
+msgstr ""
+
+msgid "Suction pumpout"
+msgstr ""
+
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
+msgstr ""
+
+msgid "Operation times"
+msgstr ""
+
+msgid "Backrest"
 msgstr ""
 
 msgid "Amount of Seats"
@@ -19048,6 +19423,9 @@ msgstr ""
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr ""
 
@@ -19223,12 +19601,18 @@ msgstr ""
 msgid "Basketball"
 msgstr ""
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr ""
 
@@ -19244,13 +19628,13 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
@@ -19274,9 +19658,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19295,9 +19676,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -19370,6 +19748,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20690,9 +21076,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -21705,10 +22088,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22135,6 +22518,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22159,6 +22545,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22219,6 +22617,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22309,9 +22710,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22681,6 +23091,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22735,9 +23148,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23481,47 +23891,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23530,10 +23949,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24136,6 +24567,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr ""
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25233,374 +25667,680 @@ msgid ""
 "highlight tracks"
 msgstr ""
 
-msgid "Delete this"
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
 msgstr ""
 
-msgid "Delete this&older"
+msgid "Connecting"
 msgstr ""
 
-msgid "km/h"
+msgid "Connected"
 msgstr ""
 
-msgid "Track name: "
+msgid "no name"
 msgstr ""
 
-msgid "Update IRS adjustment layer"
+msgid "Live GPS"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid "Show GPS data."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Speed"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Course"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
+msgid "Explore"
 msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25621,6 +26361,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -25679,47 +26422,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -25952,6 +26654,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr ""
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27169,6 +27874,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27340,6 +28066,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27349,6 +28078,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27529,6 +28261,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27707,6 +28442,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27716,6 +28484,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -27952,9 +28723,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29437,9 +30205,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/sv.po b/i18n/po/sv.po
index 28ca46f..c9adbf0 100644
--- a/i18n/po/sv.po
+++ b/i18n/po/sv.po
@@ -7,16 +7,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
-"PO-Revision-Date: 2015-03-12 23:01+0000\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
+"PO-Revision-Date: 2015-08-17 21:52+0000\n"
 "Last-Translator: Niklas Henriksson <fringillus92 at gmail.com>\n"
 "Language-Team: Swedish <sv at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:57+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 05:01+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: sv\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -97,21 +97,18 @@ msgstr "Laddar inställningar för ortofoto"
 msgid "Updating user interface"
 msgstr "Uppdaterar användargränssnittet"
 
-msgid "{0} completed in {1}"
-msgstr "{0} genomfört på {1}"
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "Ignorerar ogiltig fil-URL: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "Hoppar över felaktig URL: \"{0}\""
 
 msgid "Warning"
 msgstr "Varning"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "Ignorerar ogiltig fil-URL: \"{0}\""
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr "Parametern \"downloadgps\" godtar inte filnamn eller fil-URL:er"
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "Hoppar över felaktig URL: \"{0}\""
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -461,6 +458,9 @@ msgstr "Växlar dialogpanelen"
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Växlar dialogpanelen, maximerar kartvyn"
 
+msgid "Distribute Nodes"
+msgstr "Distribuera noder"
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr "Distribuera de valda noderna på jämna avstånd längs en linje."
 
@@ -472,6 +472,9 @@ msgid ""
 "* One no self-crossing way with at most two of its nodes;\n"
 "* Three nodes."
 msgstr ""
+"Var god välj:\n"
+"* En ej självkorsande väg på mins två av dess noder;\n"
+"* Tre noder."
 
 msgid "Download from OSM..."
 msgstr "Ladda ner från OSM..."
@@ -490,7 +493,7 @@ msgid "Download data"
 msgstr "Hämta data"
 
 msgid "Download notes in current view"
-msgstr ""
+msgstr "Ladda ner kartanteckningar i nuvarande vy."
 
 msgid "Download object..."
 msgstr "Ladda ner objekt..."
@@ -1027,7 +1030,7 @@ msgid "Download Data"
 msgstr "Hämta data"
 
 msgid "Which tasks to perform?"
-msgstr ""
+msgstr "Vilka åtgärder ska genomföras?"
 
 msgid "Ok"
 msgstr "Ok"
@@ -1102,6 +1105,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr "Välj sträckor som står i ungefär 90 eller 180 graders vinkel."
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr "Klistra in"
 
@@ -1262,19 +1289,19 @@ msgid "Save the current data to a new file."
 msgstr "Spara nuvarande data i en ny fil."
 
 msgid "Search Notes..."
-msgstr ""
+msgstr "Sök kartanteckningar…"
 
 msgid "Download notes from the note search API"
-msgstr ""
+msgstr "Ladda ner kartanteckningar från söknings-API:n"
 
 msgid "Search the OSM API for notes containing words:"
-msgstr ""
+msgstr "Sök i OSM-API:n för kartanteckningar innehållandes följande ord:"
 
 msgid "Search for notes"
-msgstr ""
+msgstr "Sök efter kartanteckningar"
 
 msgid "You must enter a search term"
-msgstr ""
+msgstr "Du måste ange en sökterm"
 
 msgid "Select All"
 msgstr "Välj allt"
@@ -1589,7 +1616,7 @@ msgstr[1] ""
 "valda noderna."
 
 msgid "Some irrelevant nodes have been removed from the selection"
-msgstr ""
+msgstr "Några onödiga noder har tagits bort från markeringen"
 
 msgid "Undo"
 msgstr "Ångra"
@@ -1851,8 +1878,8 @@ msgstr "Anteckningar"
 
 msgid "{0} note has been downloaded."
 msgid_plural "{0} notes have been downloaded."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} anteckning har laddats ner"
+msgstr[1] "{0} anteckningar har laddats ner"
 
 msgid ""
 "Since the download limit was {0}, there might be more notes to download."
@@ -1861,6 +1888,7 @@ msgstr ""
 msgid ""
 "Request a smaller area to make sure that all notes are being downloaded."
 msgstr ""
+"Begär ett mindre område för att säkra att alla anteckningar laddas ner."
 
 msgid "More notes to download"
 msgstr ""
@@ -2088,15 +2116,6 @@ msgstr "Vinkellåsning aktiv."
 msgid "Finish drawing."
 msgstr "Avsluta ritning."
 
-msgid "FIX"
-msgstr "FIXA"
-
-msgid "draw angle snap"
-msgstr "Rita vinkellåst"
-
-msgid "draw angle snap highlight"
-msgstr "mall för att snappa vinklar"
-
 msgid "Toggle snapping by {0}"
 msgstr "Växla länkning med {0}"
 
@@ -2118,6 +2137,15 @@ msgstr "0,45,90,..."
 msgid "0,30,45,60,90,..."
 msgstr "0,30,45,60,90,..."
 
+msgid "FIX"
+msgstr "FIXA"
+
+msgid "draw angle snap"
+msgstr "Rita vinkellåst"
+
+msgid "draw angle snap highlight"
+msgstr "mall för att snappa vinklar"
+
 msgid "Angle snapping"
 msgstr "Vinkellåsning"
 
@@ -2247,9 +2275,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr "Skapa paralell väg fel"
-
 msgid "Drag play head"
 msgstr "Dra spelhuvudet"
 
@@ -2484,9 +2509,15 @@ msgstr "alla objekt"
 msgid "Also include incomplete and deleted objects in search."
 msgstr "Ta också med ofullständiga och borttagna objekt i sökningen."
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr "reguljärt uttryck"
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr "lägg till knapp på verktygsraden"
 
@@ -2705,6 +2736,10 @@ msgid "RX"
 msgstr "RX"
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr "A"
 
@@ -2759,6 +2794,9 @@ msgstr "Ett sifferintervall förväntades"
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr "Oväntad symbol. Förväntade {0}, men fann {1}"
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr "Oväntad symbol: {0}"
 
@@ -3247,6 +3285,24 @@ msgstr "Misslyckades med att skapa saknad cache-katalog: {0}"
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr "<html>Misslyckades med att skapa saknad cache-katalog: {0}</html>"
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3365,12 +3421,46 @@ msgctxt "compass"
 msgid "E"
 msgstr "Ö"
 
-msgid "Not in cache"
-msgstr "Ej i cachen"
-
 msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr ""
 
+msgid "HTTP error {0} when loading tiles"
+msgstr ""
+
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr "Projektion"
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
+msgstr ""
+
 msgid "ID > 0 expected. Got {0}."
 msgstr "ID över noll förväntad; Fick {0}"
 
@@ -3562,6 +3652,12 @@ msgstr "text"
 msgid "areatext"
 msgstr "yttext"
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3589,13 +3685,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -4227,9 +4323,6 @@ msgstr "Taggnamnet är längre än vad som är tillåtet"
 msgid "Tags with empty values"
 msgstr "Taggar med tomma värden"
 
-msgid "Invalid property key"
-msgstr "Ogiltig egenskapsnyckel"
-
 msgid "Invalid white space in property key"
 msgstr "Egenskapsnyckel innehåller ogiltigt blanksteg"
 
@@ -4239,12 +4332,24 @@ msgstr "Egenskapsvärdet börjar eller slutar med blanksteg"
 msgid "Property values contain HTML entity"
 msgstr "Det finns en HTML-markör i egenskapsvärdet"
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr "Nyckeln ''{0}'' finns Ej bland förinställda mallar."
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 "Värdet ''{0}'' för nyckeln ''{1}'' finns Ej bland förinställda mallar."
@@ -4431,6 +4536,9 @@ msgstr "Nod på sträcka nära annan sträcka"
 msgid "Connected way end node near other way"
 msgstr "Slutnod på sträcka nära annan sträcka"
 
+msgid "Unconnected nodes without physical tags"
+msgstr ""
+
 msgid "Untagged and unconnected nodes"
 msgstr "Otaggade och icke anslutna noder"
 
@@ -4439,9 +4547,6 @@ msgstr ""
 "Detta test letar efter noder som saknar tagg och som inte ingår i någon "
 "sträcka"
 
-msgid "Unconnected nodes without physical tags"
-msgstr ""
-
 msgid "No tags"
 msgstr "Inga etiketter"
 
@@ -4641,8 +4746,9 @@ msgstr "Klicka för att stänga dialogen"
 msgid "Imagery offset"
 msgstr "Bildförskjutning"
 
+msgctxt "menu"
 msgid "Imagery"
-msgstr "Bakgrundsbilder"
+msgstr ""
 
 msgctxt "layer"
 msgid "Offset"
@@ -4862,45 +4968,56 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
-msgstr "Arkiv"
+msgstr ""
 
-msgid "Session"
-msgstr "Session"
+msgctxt "menu"
+msgid "Edit"
+msgstr ""
 
+msgctxt "menu"
 msgid "View"
-msgstr "Visa"
+msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
-msgstr "Verktyg"
+msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
-msgstr "Fler verktyg"
+msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
-msgstr "Markering"
+msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
-msgstr "Snabbval"
+msgstr ""
 
 msgid "More..."
 msgstr "Mer..."
 
+msgctxt "menu"
 msgid "GPS"
-msgstr "GPS"
+msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
-msgstr "Fönster"
+msgstr ""
+
+msgctxt "menu"
+msgid "Help"
+msgstr ""
 
 msgid "Menu: {0}"
 msgstr "Meny: {0}"
 
-msgid "Save and load the current session (list of layers, etc.)"
-msgstr ""
-
 msgid "Edit toolbar"
 msgstr ""
 
@@ -4922,8 +5039,9 @@ msgstr "Klicka för att öppna fliken bakgrundsbilder i inställningarna"
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
-msgstr "Ljud"
+msgstr ""
 
 msgid "Do not hide toolbar"
 msgstr "Göm inte verktygsfält"
@@ -5044,58 +5162,16 @@ msgstr "I bakgrunden"
 msgid "Click to run job in background"
 msgstr "Klicka för att köra jobb i bakgrunden"
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-
-msgid "Details..."
-msgstr "Detaljer..."
-
-msgid "Hide this message and never show it again"
-msgstr "Dölj detta meddelande och visa det aldrig igen"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] "Raderar {0} objekt"
-msgstr[1] "Raderar {0} objekt"
-
-msgid "Delete objects"
-msgstr "Radera objekt"
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr "Från Relation"
-
-msgid "Pos."
+msgid " ({0})"
 msgstr ""
 
-msgid "Role"
-msgstr "Roll"
+msgid "{0} completed in {1}"
+msgstr "{0} genomfört på {1}"
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5526,6 +5602,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr "Roll"
+
 msgid "Primitive"
 msgstr ""
 
@@ -5768,6 +5847,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr "Applicera den här rollen på alla medlemmar"
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr "Urspr. sträcka"
 
@@ -5925,6 +6007,41 @@ msgstr "Lös konflikter"
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] "Raderar {0} objekt"
+msgstr[1] "Raderar {0} objekt"
+
+msgid "Delete objects"
+msgstr "Radera objekt"
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr "Från Relation"
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr "Filtrera objekt och dölj/inaktivera dem."
 
@@ -6028,7 +6145,7 @@ msgstr "Avancerad objektinformation"
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -6156,6 +6273,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr "xml"
 
@@ -6165,17 +6287,48 @@ msgstr ""
 msgid "unknown"
 msgstr "okänd"
 
-msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
+msgid ""
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -6221,6 +6374,12 @@ msgstr "Genomskinlighet"
 msgid "Adjust opacity of the layer."
 msgstr "Justera genomskinlighet på lagret."
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr "Aktivera"
 
@@ -6351,6 +6510,12 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
+msgid "Mini map"
+msgstr ""
+
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
 msgid "List of notes"
 msgstr ""
 
@@ -6409,10 +6574,15 @@ msgstr "Objekt-ID:"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "Ange ID för det objekt som ska laddas ner"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6441,6 +6611,9 @@ msgstr "Relationer: {0}/{1}"
 msgid "Relations: {0}"
 msgstr "Relationer: {0}"
 
+msgid "Selection"
+msgstr "Markering"
+
 msgid "Open a selection list window."
 msgstr "Öppna en urvalslista"
 
@@ -6533,6 +6706,12 @@ msgstr "Öppna valideringslistan"
 msgid "Validation results"
 msgstr "Valideringsresultat"
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr "Rätta till"
 
@@ -7140,6 +7319,12 @@ msgstr "Gå till OSM wiki för hjälp om taggen (F1)"
 msgid "Launch browser with wiki help for selected object"
 msgstr "Starta webbläsare med wiki-hjälpen för det valda objektet"
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr "Klistra in värde"
 
@@ -7231,14 +7416,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7412,6 +7596,12 @@ msgstr "Sortera relationsmedlemmarna"
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7967,6 +8157,9 @@ msgstr "Laddar historik för relation {0}"
 msgid "Node {0}"
 msgstr "Nod {0}"
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr "Zooma till nod"
 
@@ -8859,6 +9052,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] "{0} objekt att radera:"
 msgstr[1] "{0} objekt att radera:"
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr "Zooma automatiskt"
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr "Hämta alla rutor"
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr "Ändra upplösning"
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr "Visa fel"
+
+msgid "Load Tile"
+msgstr "Hämta ruta"
+
+msgid "Increase zoom"
+msgstr "Öka zoomläge"
+
+msgid "Decrease zoom"
+msgstr "Minska zoomläge"
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr "öka zoom-nivån för att se mer detaljer"
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr "Nuvarande zoom: {0}"
+
+msgid "Display zoom: {0}"
+msgstr "Visa zoom: {0}"
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr "Bästa zoom: {0}"
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr "Spara WMS-fil"
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+
+msgid "Details..."
+msgstr "Detaljer..."
+
+msgid "Hide this message and never show it again"
+msgstr "Dölj detta meddelande och visa det aldrig igen"
+
 msgid "Customize Color"
 msgstr "Anpassa färger"
 
@@ -8912,6 +9205,9 @@ msgstr "Spara GPX-fil"
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr "FEL"
 
@@ -8932,7 +9228,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -9017,193 +9313,89 @@ msgstr ""
 msgid "Save OSM file"
 msgstr "Spara OSM-fil"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
+msgid "EPSG:4326 and Mercator projection are supported"
+msgstr "EPSG:4326 och Mercator-projektion stöds"
 
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-"TMS-lager har inte stöd för projektionen {0}.\n"
-"{1}\n"
-"Ändra projektion eller ta bort lagret."
+msgid "Validation errors"
+msgstr "Valideringsfel"
 
-msgid "Auto Zoom"
-msgstr "Zooma automatiskt"
+msgid "No validation errors"
+msgstr "Inga valideringsfel"
 
-msgid "Auto load tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
-msgid "Show Errors"
-msgstr "Visa fel"
-
-msgid "Load Tile"
-msgstr "Hämta ruta"
-
-msgid "Show Tile Info"
+msgid ""
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Load All Tiles"
-msgstr "Hämta alla rutor"
+msgid "Correlate to GPX"
+msgstr "Korrelerar med GPX"
 
-msgid "Load All Error Tiles"
-msgstr ""
+msgid "Invalid timezone"
+msgstr "Ogiltig tidszon"
 
-msgid "Increase zoom"
-msgstr "Öka zoomläge"
+msgid "Invalid offset"
+msgstr "Ogiltig förskjutning"
 
-msgid "Decrease zoom"
-msgstr "Minska zoomläge"
+msgid "Correlate images with GPX track"
+msgstr "Sätt bilder i relation till GPX-spår"
 
-msgid "Snap to tile size"
-msgstr ""
+msgid "Try Again"
+msgstr "Försök igen"
 
-msgid "Flush Tile Cache"
+msgid "No images could be matched!"
 msgstr ""
 
-msgid "zoom in to load any tiles"
-msgstr ""
+msgid "GPX Files (*.gpx *.gpx.gz)"
+msgstr "GPX-filer"
 
-msgid "zoom in to load more tiles"
-msgstr ""
+msgid "File {0} is loaded yet under the name \"{1}\""
+msgstr "Filen {0} är fortfarande aktiv under namnet \"{1}\""
 
-msgid "increase zoom level to see more detail"
-msgstr "öka zoom-nivån för att se mer detaljer"
+msgid "Error while parsing {0}"
+msgstr "Fel vid tolkning {0}"
 
-msgid "No tiles at this zoom level"
+msgid "Could not read \"{0}\""
+msgstr "Kunde inte öppna \"{0}\""
+
+msgid ""
+"<html>Take a photo of your GPS receiver while it displays the "
+"time.<br>Display that photo here.<br>And then, simply capture the time you "
+"read on the photo and select a timezone<hr></html>"
 msgstr ""
+"<html>Ta ett foto av din GPS-mottagare när den visar tiden.<br>Visa detta "
+"foto här.<br>Och därefter läs helt enkelt av den tid du läste på fotot och "
+"välj en tidzon<hr></html>"
 
-msgid "Current zoom: {0}"
-msgstr "Nuvarande zoom: {0}"
+msgid "Photo time (from exif):"
+msgstr "Fototid (från exif):"
 
-msgid "Display zoom: {0}"
-msgstr "Visa zoom: {0}"
+msgid "Gps time (read from the above photo): "
+msgstr "Gps-tid (läst från fotot ovan): "
 
-msgid "Pixel scale: {0}"
-msgstr ""
+msgid "I am in the timezone of: "
+msgstr "Jag är i följande tidzon: "
 
-msgid "Best zoom: {0}"
-msgstr "Bästa zoom: {0}"
+msgid "No date"
+msgstr "Inget datum"
 
-msgid "Cache stats: {0}"
-msgstr ""
+msgid "Open another photo"
+msgstr "Öppna ett annat foto"
 
-msgid "TMS layer ({0}), downloading in zoom {1}"
+msgid "Synchronize time from a photo of the GPS receiver"
+msgstr "Synkronisera tid med hjälp av ett foto av GPS-mottagaren"
+
+msgid ""
+"Error while parsing the date.\n"
+"Please use the requested format"
 msgstr ""
+"Fel vid tolkning av daturm.\n"
+"Använd begärt format"
 
-msgid "EPSG:4326 and Mercator projection are supported"
-msgstr "EPSG:4326 och Mercator-projektion stöds"
-
-msgid "Validation errors"
-msgstr "Valideringsfel"
-
-msgid "No validation errors"
-msgstr "Inga valideringsfel"
-
-msgid "Blank Layer"
-msgstr "Tomt lager"
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr "WMS-lager ({0}), hämtas automatiskt i zoomläge {1}"
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr "WMS-lager ({0}), hämtas i zoomläge {1}"
-
-msgid "Download visible tiles"
-msgstr "Hämta de rutor som syns"
-
-msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-"Det begärda området är för stort. Zooma in lite eller ändra upplösning"
-
-msgid "Change resolution"
-msgstr "Ändra upplösning"
-
-msgid "Reload erroneous tiles"
-msgstr "Läs om felaktiga rutor"
-
-msgid "Alpha channel"
-msgstr "Alfakanal"
-
-msgid "Automatically change resolution"
-msgstr "Ändra upplösning automatiskt"
-
-msgid "Set WMS Bookmark"
-msgstr ""
-
-msgid "Automatic downloading"
-msgstr "Automatisk hämtning"
-
-msgid "Zoom to native resolution"
-msgstr ""
-
-msgid "Supported projections are: {0}"
-msgstr "Projektioner som stöds är: {0}"
-
-msgid "Unsupported WMS file version; found {0}, expected {1}"
-msgstr "WMS-filversion som ej stöds; funnen {0}, förväntad {1}"
-
-msgid "Save WMS file"
-msgstr "Spara WMS-fil"
-
-msgid "Correlate to GPX"
-msgstr "Korrelerar med GPX"
-
-msgid "GPX Files (*.gpx *.gpx.gz)"
-msgstr "GPX-filer"
-
-msgid "File {0} is loaded yet under the name \"{1}\""
-msgstr "Filen {0} är fortfarande aktiv under namnet \"{1}\""
-
-msgid "Error while parsing {0}"
-msgstr "Fel vid tolkning {0}"
-
-msgid "Could not read \"{0}\""
-msgstr "Kunde inte öppna \"{0}\""
-
-msgid ""
-"<html>Take a photo of your GPS receiver while it displays the "
-"time.<br>Display that photo here.<br>And then, simply capture the time you "
-"read on the photo and select a timezone<hr></html>"
-msgstr ""
-"<html>Ta ett foto av din GPS-mottagare när den visar tiden.<br>Visa detta "
-"foto här.<br>Och därefter läs helt enkelt av den tid du läste på fotot och "
-"välj en tidzon<hr></html>"
-
-msgid "Photo time (from exif):"
-msgstr "Fototid (från exif):"
-
-msgid "Gps time (read from the above photo): "
-msgstr "Gps-tid (läst från fotot ovan): "
-
-msgid "I am in the timezone of: "
-msgstr "Jag är i följande tidzon: "
-
-msgid "No date"
-msgstr "Inget datum"
-
-msgid "Open another photo"
-msgstr "Öppna ett annat foto"
-
-msgid "Synchronize time from a photo of the GPS receiver"
-msgstr "Synkronisera tid med hjälp av ett foto av GPS-mottagaren"
-
-msgid ""
-"Error while parsing the date.\n"
-"Please use the requested format"
-msgstr ""
-"Fel vid tolkning av daturm.\n"
-"Använd begärt format"
-
-msgid "Invalid date"
-msgstr "Ogiltigt datum"
+msgid "Invalid date"
+msgstr "Ogiltigt datum"
 
 msgid "<No GPX track loaded yet>"
 msgstr "<Inget GPX-spår har hämtats än>"
@@ -9245,24 +9437,9 @@ msgstr "Tidszon: "
 msgid "Offset:"
 msgstr "Förskjutning:"
 
-msgid "Correlate images with GPX track"
-msgstr "Sätt bilder i relation till GPX-spår"
-
 msgid "Correlate"
 msgstr "Korrelera"
 
-msgid "Invalid timezone"
-msgstr "Ogiltig tidszon"
-
-msgid "Invalid offset"
-msgstr "Ogiltig förskjutning"
-
-msgid "Try Again"
-msgstr "Försök igen"
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9469,9 +9646,6 @@ msgstr ""
 "\n"
 "GPS-tid: {0}"
 
-msgid "JPEG images (*.jpg)"
-msgstr "JPEG-bilder (*.jpg)"
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9534,9 +9708,6 @@ msgstr "meter"
 msgid "Maximum area per request:"
 msgstr "Största tillåtna område per begäran:"
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr "Hämta hem i närheten av:"
 
@@ -10176,9 +10347,6 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr "Hämta hem insticksmoduler"
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 "Du behöver starta om JOSM för att vissa inställningar skall slå igenom."
@@ -10186,6 +10354,9 @@ msgstr ""
 msgid "Would you like to restart now?"
 msgstr "Vill du starta om nu?"
 
+msgid "Download plugins"
+msgstr "Hämta hem insticksmoduler"
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -11009,6 +11180,21 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
+msgid "1. Enter getCapabilities URL"
+msgstr ""
+
+msgid "2. Enter name for this layer"
+msgstr ""
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr ""
 
@@ -11027,6 +11213,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr "Inställningar för bakgrundsbild"
 
@@ -11048,6 +11246,9 @@ msgstr "Bildkällor"
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -11090,9 +11291,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr "Projektion"
-
 msgid "Layer"
 msgstr "Lager"
 
@@ -11117,36 +11315,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr "Hämtare:"
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -12104,6 +12287,14 @@ msgstr "Tillämpa snabbval"
 msgid "New relation"
 msgstr "Ny relation"
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] "Ändra {0} objekt"
@@ -12212,6 +12403,9 @@ msgstr ""
 msgid "Search presets"
 msgstr "Sök snabbval"
 
+msgid "Presets"
+msgstr "Snabbval"
+
 msgid "Search for objects by preset"
 msgstr "Sök objekt efter snabbval"
 
@@ -12470,6 +12664,9 @@ msgstr "<html>Kunde inte läsa filer.<br>Felet är:<br>{0}</html>"
 msgid "GeoJSON Files"
 msgstr "GeoJSON-filer"
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -13013,6 +13210,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr "WMS-filer (*.wms)"
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr "WMS-filversion som ej stöds; funnen {0}, förväntad {1}"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -13418,6 +13618,19 @@ msgstr[1] ""
 "Insticksmodul {0} kräver {1} insticksmoduler som inte hittades. De saknade "
 "insticksmodulerna är:"
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -14492,6 +14705,9 @@ msgstr "Uppdatera"
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr "Visa"
+
 msgid "Blue:"
 msgstr "Blå:"
 
@@ -14531,7 +14747,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -14543,9 +14759,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14654,6 +14867,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14667,12 +14883,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14709,10 +14931,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14739,6 +14967,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14763,7 +14994,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14778,6 +15009,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14790,12 +15024,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14816,6 +15044,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14848,10 +15079,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14881,73 +15109,25 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
-msgid "OSMIE Townlands"
-msgstr ""
-
-msgid "OSMIE EDs"
-msgstr ""
-
-msgid "OSMIE Civil Parishes"
-msgstr ""
-
-msgid "OSMIE Baronies"
-msgstr ""
-
-msgid "OSMIE Political"
-msgstr ""
-
-msgid "Ireland EEA GMES Urban Atlas"
-msgstr ""
-
-msgid "Ireland EEA CORINE 2006"
-msgstr ""
-
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
 msgstr ""
 
 msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Clare Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Dublin Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Fermanagh Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Galway Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Kildare Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Leitrim Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Longford Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Offaly Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Sligo Civil Parishes and Baronies"
+msgid "OSMIE Townlands"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "OSMIE EDs"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "OSMIE Civil Parishes"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "OSMIE Baronies"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "OSMIE Political"
 msgstr ""
 
 msgid "Lodi - Italy"
@@ -14983,6 +15163,9 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
+msgid "1.cikla ortofotokarte - Latvia"
+msgstr ""
+
 msgid "ORT10LT (Lithuania)"
 msgstr ""
 
@@ -14998,6 +15181,9 @@ msgstr ""
 msgid "Luxembourg Inspire Roads"
 msgstr ""
 
+msgid "Luxembourg Inspire Water"
+msgstr ""
+
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -15013,9 +15199,15 @@ msgstr ""
 msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgstr ""
+
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
+msgid "Geoportal 2: ISOK hillshade"
+msgstr ""
+
 msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
@@ -15025,27 +15217,75 @@ msgstr ""
 msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
+msgid "Bytom: Fotoplan 2014 (aerial image)"
+msgstr ""
+
 msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
 msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
+msgid "Częstochowa: Budynki (buildings)"
+msgstr ""
+
 msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgstr ""
+
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgstr ""
+
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
 msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Katowice: Budynki (buildings)"
+msgstr ""
+
+msgid "Łódź: Budynki (buildings)"
+msgstr ""
+
 msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Powiat dębicki: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat lubaczowski: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat łańcucki: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat poznański: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgstr ""
+
+msgid "Powiat rzeszowski: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgstr ""
+
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgstr ""
+
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
 msgstr ""
 
@@ -15058,9 +15298,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -15190,6 +15439,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -15205,7 +15469,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -15533,6 +15797,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15617,11 +15886,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15675,7 +15939,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15693,9 +15957,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr "Lägger till förbjuden vänstersväng för grupper av 4 eller 5 sträckor"
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15778,6 +16039,14 @@ msgstr ""
 "Denna insticksmodul förenklar kartläggning och redigering av "
 "kollektivtrafiksrutter."
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15821,6 +16090,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15896,9 +16168,6 @@ msgstr "Enkel hämtning längs med en lång kedja av sammanbundna sträckor"
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -16304,6 +16573,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -16328,10 +16605,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -16348,6 +16621,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -16364,12 +16641,24 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
+msgstr "hästkapplöpning"
+
+msgctxt "sport"
+msgid "ice_hockey"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
-msgstr "hästkapplöpning"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
+msgstr ""
 
 msgctxt "sport"
 msgid "motor"
@@ -16384,6 +16673,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -16396,6 +16689,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -16423,6 +16720,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr "Avgift"
 
@@ -16666,16 +16975,16 @@ msgid "750000;200000"
 msgstr ""
 
 msgid "110000;20000"
-msgstr ""
+msgstr "110000;20000"
 
 msgid "Branch operator"
-msgstr ""
+msgstr "Grenoperatör"
 
 msgid "Amount of Cables"
 msgstr "Antal kablar"
 
 msgid "Amount of circuits"
-msgstr ""
+msgstr "Antal faser"
 
 msgid "Location"
 msgstr "Plats"
@@ -16694,17 +17003,17 @@ msgstr "underjordisk"
 
 msgctxt "power"
 msgid "platform"
-msgstr ""
+msgstr "plattform"
 
 msgctxt "power"
 msgid "kiosk"
-msgstr ""
+msgstr "stuga"
 
 msgid "Start date"
 msgstr "Startdatum"
 
 msgid "Output forms of energy:"
-msgstr ""
+msgstr "Eneriproduktion:"
 
 msgid "biogas"
 msgstr "biogas"
@@ -16752,28 +17061,28 @@ msgid "Toll"
 msgstr "Betalstation"
 
 msgid "Is the water body intermittent (disappears seasonally)?"
-msgstr ""
+msgstr "Är vattnet oregelgundet (försvinner säsongsbetonat)?"
 
 msgid "culvert"
-msgstr ""
+msgstr "kulvert"
 
 msgid "Water access rules:"
-msgstr ""
+msgstr "Tillträde till vattnet:"
 
 msgid "Ship"
-msgstr ""
+msgstr "Skepp"
 
 msgid "designated"
 msgstr "avsedd för"
 
 msgid "Boat"
-msgstr ""
+msgstr "Båt"
 
 msgid "Motorboat"
-msgstr ""
+msgstr "Motorbåt"
 
 msgid "Canoe"
-msgstr ""
+msgstr "Kanot"
 
 msgid "Streets"
 msgstr "Vägar"
@@ -16785,13 +17094,13 @@ msgid "Motorway Link"
 msgstr "Motorvägslänk"
 
 msgid "Trunk"
-msgstr "Stamväg"
+msgstr "Motortrafikled"
 
 msgid "Motorroad"
-msgstr ""
+msgstr "Motortrafikled"
 
 msgid "Trunk Link"
-msgstr "Stamvägslänk"
+msgstr "Motortrafikledslänk"
 
 msgid "Primary"
 msgstr "Primär"
@@ -16814,6 +17123,9 @@ msgstr "Tertiär länk"
 msgid "Unclassified"
 msgstr "Oklassificerad"
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr "Mötesplats (M-skylt)"
 
@@ -16828,29 +17140,29 @@ msgstr "Typ av väg"
 
 msgctxt "Highway"
 msgid "residential"
-msgstr ""
+msgstr "bostadsområde"
 
 msgctxt "Highway"
 msgid "service"
-msgstr ""
+msgstr "service"
 
 msgctxt "Highway"
 msgid "unclassified"
-msgstr ""
+msgstr "oklassificerad"
 
 msgctxt "Highway"
 msgid "path"
-msgstr ""
+msgstr "stig"
 
 msgctxt "Highway"
 msgid "cycleway"
-msgstr ""
+msgstr "cykelväg"
 
 msgid "Vehicle access"
-msgstr ""
+msgstr "Fordonstillträde"
 
 msgid "Oneway for bicycle"
-msgstr "Enkelriktad cykelväg"
+msgstr "Enkelriktat för cykel"
 
 msgid "Living Street"
 msgstr "Gårdsgata"
@@ -16865,7 +17177,7 @@ msgid "Service"
 msgstr "Tillfartsväg"
 
 msgid "Service way type"
-msgstr ""
+msgstr "Typ av serviceväg"
 
 msgid "alley"
 msgstr "gränd"
@@ -16877,18 +17189,23 @@ msgid "parking_aisle"
 msgstr "parkeringsväg"
 
 msgid "drive-through"
-msgstr ""
+msgstr "drive-through"
 
 msgid "Parking Aisle"
 msgstr "Parkeringskorridor"
 
 msgid "Escape"
-msgstr ""
+msgstr "Nödväg"
 
 msgid ""
 "Emergency lane beside long descending slopes for trucks and other vehicles "
 "to stop safely after brake failure."
 msgstr ""
+"Nödväg vid långa nedåtsluttande backar avsedda för lastbilar och andra "
+"fordon att stanna säkert vid bromsfel."
+
+msgid "Raceway"
+msgstr "Racingbana"
 
 msgid "Road (Unknown Type)"
 msgstr "Väg (okänd typ)"
@@ -16898,23 +17215,23 @@ msgstr "Under byggnad"
 
 msgctxt "Highway"
 msgid "motorway"
-msgstr ""
+msgstr "motorväg"
 
 msgctxt "Highway"
 msgid "motorway_link"
-msgstr ""
+msgstr "motorvägslänk"
 
 msgctxt "Highway"
 msgid "trunk"
-msgstr ""
+msgstr "motortrafikled"
 
 msgctxt "Highway"
 msgid "trunk_link"
-msgstr ""
+msgstr "motortrafikledslänk"
 
 msgctxt "Highway"
 msgid "primary"
-msgstr ""
+msgstr "primär"
 
 msgctxt "Highway"
 msgid "primary_link"
@@ -16922,47 +17239,47 @@ msgstr ""
 
 msgctxt "Highway"
 msgid "secondary"
-msgstr ""
+msgstr "sekundär"
 
 msgctxt "Highway"
 msgid "secondary_link"
-msgstr ""
+msgstr "sekundärlänk"
 
 msgctxt "Highway"
 msgid "tertiary"
-msgstr ""
+msgstr "tertiär"
 
 msgctxt "Highway"
 msgid "tertiary_link"
-msgstr ""
+msgstr "tertiärlänk"
 
 msgctxt "Highway"
 msgid "bus_guideway"
-msgstr ""
+msgstr "bussväg"
 
 msgctxt "Highway"
 msgid "bridleway"
-msgstr ""
+msgstr "ridstig"
 
 msgctxt "Highway"
 msgid "living_street"
-msgstr ""
+msgstr "gårdsgata"
 
 msgctxt "Highway"
 msgid "pedestrian"
-msgstr ""
+msgstr "fotgängare"
 
 msgctxt "Highway"
 msgid "track"
-msgstr ""
+msgstr "spår"
 
 msgctxt "Highway"
 msgid "footway"
-msgstr ""
+msgstr "gångväg"
 
 msgctxt "Highway"
 msgid "steps"
-msgstr ""
+msgstr "trappa"
 
 msgid "Junction"
 msgstr "Korsning"
@@ -16971,7 +17288,7 @@ msgid "roundabout"
 msgstr "rondell"
 
 msgid "jughandle"
-msgstr ""
+msgstr "jughandle"
 
 msgid "Road Restrictions"
 msgstr "Vägbegränsningar"
@@ -16980,12 +17297,14 @@ msgid ""
 "Some road types already imply some access restrictions which should not be "
 "set again."
 msgstr ""
+"Vissa vägtyper har redan vissa tillträdesbegränsningar, som inte borde "
+"ställas in igen."
 
 msgid "No exit (cul-de-sac)"
 msgstr "Återvändsgränd"
 
 msgid "Transport mode restrictions"
-msgstr ""
+msgstr "Transporttypsbegränsningar"
 
 msgid "official"
 msgstr ""
@@ -16997,7 +17316,7 @@ msgid "All vehicles"
 msgstr "Alla fordon"
 
 msgid "use_sidepath"
-msgstr ""
+msgstr "använd trottoar"
 
 msgid "Motor vehicles"
 msgstr "Motorfordon"
@@ -17015,16 +17334,16 @@ msgid "Agricultural"
 msgstr "jordbruksfordon"
 
 msgid "Emergency vehicles"
-msgstr ""
+msgstr "Utryckningsfordon"
 
 msgid "High-occupancy vehicles (hov)"
-msgstr ""
+msgstr "High-occupancy vehicles (hov)"
 
 msgid "Public Service Vehicles (psv)"
 msgstr "Allmänna transportmedel (psv)"
 
 msgid "Tourist buses"
-msgstr ""
+msgstr "Turistbussar"
 
 msgid "Min. speed (km/h)"
 msgstr "Minsta tillåtna hastighet (km/h)"
@@ -17036,11 +17355,11 @@ msgid "Max. length (meters)"
 msgstr "Maxlängd (meter)"
 
 msgid "Overtaking"
-msgstr ""
+msgstr "Omkörning"
 
 msgctxt "overtaking"
 msgid "yes"
-msgstr ""
+msgstr "ja"
 
 msgctxt "overtaking"
 msgid "both"
@@ -17048,22 +17367,22 @@ msgstr "båda"
 
 msgctxt "overtaking"
 msgid "forward"
-msgstr ""
+msgstr "mot"
 
 msgctxt "overtaking"
 msgid "backward"
-msgstr ""
+msgstr "bakåt"
 
 msgctxt "overtaking"
 msgid "no"
-msgstr ""
+msgstr "nej"
 
 msgid "Roundabout"
 msgstr "Rondell"
 
 msgctxt "Highway"
 msgid "construction"
-msgstr ""
+msgstr "konstruktion"
 
 msgid "Ford"
 msgstr "Vadställe"
@@ -17075,65 +17394,73 @@ msgid "Track"
 msgstr "Bruksväg"
 
 msgid "Tracktype"
-msgstr ""
+msgstr "Spårtyp"
 
 msgid "grade1"
-msgstr ""
+msgstr "grade1"
 
 msgid "grade2"
-msgstr ""
+msgstr "grade2"
 
 msgid "grade3"
-msgstr ""
+msgstr "grade3"
 
 msgid "grade4"
-msgstr ""
+msgstr "grade4"
 
 msgid "grade5"
-msgstr ""
+msgstr "grade5"
 
 msgid "MTB Scale"
-msgstr ""
+msgstr "MTB-skala"
 
 msgid "Path"
 msgstr "Stig"
 
 msgid "SAC Scale"
-msgstr ""
+msgstr "SAC-skala"
 
 msgid "T1 - hiking trail"
-msgstr ""
+msgstr "T1 - hikingspår"
 
 msgid "Trail well cleared. Area flat or slightly sloped, no fall hazard"
 msgstr ""
+"Spåret är väl underhållet. Området platt eller lätt sluttat, ingen fallrisk."
 
 msgid "T2 - mountain hiking trail"
-msgstr ""
+msgstr "T2 - bergsspår"
 
 msgid ""
 "Trail with continuous line and balanced ascent. Terrain partially steep, "
 "fall hazard possible"
 msgstr ""
+"Spår med kontinuerlig linje och balanserad lutning. Terräng delvis brant, "
+"risk för fall."
 
 msgid "T3 - difficult, exposed hiking trail"
-msgstr ""
+msgstr "T3 - svår, exponerat hikingspår"
 
 msgid ""
 "exposed sites may be secured with ropes or chains, possible need to use "
 "hands for balance. Partly exposed sites with fall hazard, scree, pathless "
 "jagged rocks"
 msgstr ""
+"exponerade områden kan säkras med rep eller kedjor, möjligt att behöva "
+"händer för balans. Vissa områden har fallrisk, stensluttningar eller lösa "
+"stenar"
 
 msgid "T4 - difficult, exposed, steep alpine trail"
-msgstr ""
+msgstr "T4 - svårt, exponerade och branta alpina spår"
 
 msgid ""
 "sometimes need for hand use to get ahead. Terrain quite exposed, precarious "
 "grassy acclivities, jagged rocks, facile snow-free glaciers"
 msgstr ""
+"ibland behov av händer för att ta sig fram. Terräng ganska exponerad, osäkra "
+"gräsiga sluttningar, skårig sten och ev. snöfria glaciärer"
 
 msgid "T5 - difficult alpine trail with climbing"
-msgstr ""
+msgstr "T5 - svår alpint spår med klättring"
 
 msgid ""
 "single plainly climbing up to second grade. Exposed, demanding terrain, "
@@ -17141,7 +17468,7 @@ msgid ""
 msgstr ""
 
 msgid "T6 - hazardous alpine trail with climbing"
-msgstr ""
+msgstr "T6 - farligt alpint spår med klättring"
 
 msgid ""
 "climbing up to second grade. Often very exposed, precarious jagged rocks, "
@@ -17153,23 +17480,23 @@ msgstr "Synlighet"
 
 msgctxt "trail_visibility"
 msgid "excellent"
-msgstr ""
+msgstr "utmärkt"
 
 msgctxt "trail_visibility"
 msgid "good"
-msgstr ""
+msgstr "bra"
 
 msgctxt "trail_visibility"
 msgid "intermediate"
-msgstr ""
+msgstr "medel"
 
 msgctxt "trail_visibility"
 msgid "bad"
-msgstr ""
+msgstr "dålig"
 
 msgctxt "trail_visibility"
 msgid "horrible"
-msgstr ""
+msgstr "fruktansvärd"
 
 msgctxt "trail_visibility"
 msgid "no"
@@ -17185,16 +17512,16 @@ msgid "Dedicated Bridleway"
 msgstr "Påbjuden ridväg"
 
 msgid "Cycle Lane/Track"
-msgstr ""
+msgstr "Cykel- bana/spår"
 
 msgid "Cycleway"
 msgstr "Cykelbana"
 
 msgid "lane"
-msgstr ""
+msgstr "vägbana"
 
 msgid "track"
-msgstr ""
+msgstr "spår"
 
 msgid "opposite_lane"
 msgstr "motsatta filen"
@@ -17209,22 +17536,22 @@ msgid "share_busway"
 msgstr ""
 
 msgid "shared_lane"
-msgstr ""
+msgstr "delat körfält"
 
 msgid "Cycleway left"
-msgstr ""
+msgstr "cykelväg vänster"
 
 msgid "Cycleway right"
-msgstr ""
+msgstr "cykelväg höger"
 
 msgid "Oneway (bicycle)"
 msgstr "Enkelriktad (cykelväg)"
 
 msgid "Edit Highway Attributes:"
-msgstr ""
+msgstr "Redigera vägattribut:"
 
 msgid "Highway"
-msgstr ""
+msgstr "Väg"
 
 msgid "Dedicated Cycleway"
 msgstr "Cykelbana"
@@ -17427,6 +17754,12 @@ msgstr "Hastighetskamera"
 msgid "Traffic Mirror"
 msgstr "Trafikspegel"
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17616,8 +17949,13 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr "Lavinskydd"
 
+msgctxt "main group"
 msgid "Water"
-msgstr "Vatten"
+msgstr ""
+
+msgctxt "sub group"
+msgid "Water"
+msgstr ""
 
 msgid "Drain"
 msgstr "Avlopp"
@@ -17669,6 +18007,10 @@ msgstr "Reservoar"
 msgid "Covered Reservoir"
 msgstr "Täckt reservoar"
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17810,49 +18152,163 @@ msgstr ""
 msgid "public"
 msgstr "offentlig"
 
-msgid "Pier"
-msgstr "Pir"
-
-msgid "Lock Gate"
-msgstr "Slussport"
+msgid "Marine Fuel"
+msgstr ""
 
-msgid "Turning Point"
-msgstr "Vändplats"
+msgid "Agip"
+msgstr ""
 
-msgid "Slipway"
-msgstr "Slip"
+msgid "Aral"
+msgstr ""
 
-msgid "Boatyard"
-msgstr "Varv"
+msgid "Avia"
+msgstr ""
 
-msgid "Dock"
-msgstr "Docka"
+msgid "BP"
+msgstr "BP"
 
-msgid "Transport"
-msgstr "Transport"
+msgid "Chevron"
+msgstr ""
 
-msgid "Railway"
-msgstr "Järnväg"
+msgid "Citgo"
+msgstr ""
 
-msgid "Rail"
-msgstr "Järnväg"
+msgid "Eni"
+msgstr ""
 
-msgid "main"
-msgstr "huvudlinje"
+msgid "Esso"
+msgstr "Esso"
 
-msgid "branch"
-msgstr "bibana"
+msgid "Exxon"
+msgstr ""
 
-msgid "industrial"
-msgstr "industri"
+msgid "Gulf"
+msgstr "Gulf"
 
-msgid "military"
-msgstr "militär"
+msgid "Mobil"
+msgstr ""
 
-msgid "tourism"
-msgstr "turism"
+msgid "OMV"
+msgstr ""
 
-msgid "freight"
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr "Q8"
+
+msgid "Repsol"
+msgstr "Repsol"
+
+msgid "Shell"
+msgstr "Shell"
+
+msgid "Socar"
+msgstr "Socar"
+
+msgid "Statoil"
+msgstr "Statoil"
+
+msgid "Sunoco"
+msgstr "Sunoco"
+
+msgid "Tamoil"
+msgstr "Tamoil"
+
+msgid "Texaco"
+msgstr "Texaco"
+
+msgid "Total"
+msgstr "Total"
+
+msgid "Independent"
+msgstr "Oberoende"
+
+msgid "Fuel types:"
+msgstr "Bränslesorter"
+
+msgid "Diesel"
+msgstr "Diesel"
+
+msgid "Bio Diesel"
+msgstr "Biodiesel"
+
+msgid "Octane 80"
+msgstr "80 oktan"
+
+msgid "Octane 91"
+msgstr "91 oktan"
+
+msgid "Octane 92"
+msgstr "92 oktan"
+
+msgid "Octane 95"
+msgstr "95 oktan"
+
+msgid "Octane 98"
+msgstr "98 oktan"
+
+msgid "Octane 100"
+msgstr "100 oktan"
+
+msgid "E10 (10% Ethanol mix)"
+msgstr "E10 (10% etanolblandning)"
+
+msgid "E85 (85% Ethanol mix)"
+msgstr "E85 (85% etanolblandning)"
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr "LPG (gasol)"
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr "CNG"
+
+msgid "Pier"
+msgstr "Pir"
+
+msgid "Lock Gate"
+msgstr "Slussport"
+
+msgid "Turning Point"
+msgstr "Vändplats"
+
+msgid "Slipway"
+msgstr "Slip"
+
+msgid "Boatyard"
+msgstr "Varv"
+
+msgid "Dock"
+msgstr "Docka"
+
+msgid "Transport"
+msgstr "Transport"
+
+msgid "Railway"
+msgstr "Järnväg"
+
+msgid "Rail"
+msgstr "Järnväg"
+
+msgid "main"
+msgstr "huvudlinje"
+
+msgid "branch"
+msgstr "bibana"
+
+msgid "industrial"
+msgstr "industri"
+
+msgid "military"
+msgstr "militär"
+
+msgid "tourism"
+msgstr "turism"
+
+msgid "freight"
 msgstr ""
 
 msgid "Narrow Gauge Rail"
@@ -17886,10 +18342,10 @@ msgid "Level Crossing"
 msgstr "Plankorsning"
 
 msgid "Traffic lights"
-msgstr ""
+msgstr "Trafikljus"
 
 msgid "Barrier"
-msgstr ""
+msgstr "Barriär"
 
 msgctxt "crossing:barrier"
 msgid "yes"
@@ -17901,11 +18357,11 @@ msgstr "nej"
 
 msgctxt "crossing:barrier"
 msgid "half"
-msgstr ""
+msgstr "halv"
 
 msgctxt "crossing:barrier"
 msgid "full"
-msgstr ""
+msgstr "full"
 
 msgctxt "crossing:barrier"
 msgid "double_half"
@@ -17915,7 +18371,7 @@ msgid "Crossing"
 msgstr "Järnvägsövergång"
 
 msgid "Crossing type"
-msgstr "Typ av övergångsställe"
+msgstr "Typ av järnvägsövergång"
 
 msgid "Turntable"
 msgstr "Vändskiva"
@@ -17926,6 +18382,9 @@ msgstr "Stoppbock"
 msgid "Railway Switch"
 msgstr "Växel"
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr "Linbana"
 
@@ -17951,7 +18410,7 @@ msgid "Number of people per chair"
 msgstr "Antal personer per stol"
 
 msgid "Has bubble?"
-msgstr ""
+msgstr "Har bubbla?"
 
 msgid "Gondola"
 msgstr "Gondol"
@@ -17960,10 +18419,10 @@ msgid "Number of people per gondola"
 msgstr "Antal personer per gondol"
 
 msgid "Mixed Lift"
-msgstr ""
+msgstr "Blandlift"
 
 msgid "Number of people per gondola/chair"
-msgstr ""
+msgstr "Personer per gondol/stol"
 
 msgid "Drag Lift"
 msgstr "Släplift"
@@ -18032,7 +18491,7 @@ msgid "Spaces for Parents"
 msgstr "Familjeplatser"
 
 msgid "See the Wiki for other capacity:[types]=*."
-msgstr ""
+msgstr "Se wikin för andra capacity:[typer]=*."
 
 msgid "Parking Space"
 msgstr "Parkeringsruta"
@@ -18049,78 +18508,6 @@ msgstr "Parkeringsingång"
 msgid "Fuel"
 msgstr "Bränsle"
 
-msgid "Agip"
-msgstr ""
-
-msgid "Aral"
-msgstr ""
-
-msgid "Avia"
-msgstr ""
-
-msgid "BP"
-msgstr "BP"
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr "Esso"
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr "Gulf"
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr "Q8"
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr "Shell"
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr "Statoil"
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr "Texaco"
-
-msgid "Total"
-msgstr "Total"
-
-msgid "Independent"
-msgstr "Oberoende"
-
 msgid "With shop"
 msgstr "Med affär"
 
@@ -18130,51 +18517,12 @@ msgstr "närbutik"
 msgid "kiosk"
 msgstr "kiosk"
 
-msgid "Fuel types:"
-msgstr "Bränslesorter"
-
-msgid "Diesel"
-msgstr "Diesel"
-
-msgid "Bio Diesel"
-msgstr "Biodiesel"
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Octane 80"
-msgstr "80 oktan"
-
-msgid "Octane 91"
-msgstr "91 oktan"
-
-msgid "Octane 92"
-msgstr "92 oktan"
-
-msgid "Octane 95"
-msgstr "95 oktan"
-
-msgid "Octane 98"
-msgstr "98 oktan"
-
-msgid "Octane 100"
-msgstr "100 oktan"
-
-msgid "E10 (10% Ethanol mix)"
-msgstr "E10 (10% etanolblandning)"
-
-msgid "E85 (85% Ethanol mix)"
-msgstr "E85 (85% etanolblandning)"
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
 msgid "1/25 mix (mofa/moped)"
 msgstr "Oljeblandat 4% (moped etc)"
 
@@ -18185,13 +18533,13 @@ msgid "Fuel cards:"
 msgstr ""
 
 msgid "DKV"
-msgstr ""
+msgstr "DKV"
 
 msgid "Routex"
-msgstr ""
+msgstr "Routex"
 
 msgid "UTA"
-msgstr ""
+msgstr "UTA"
 
 msgid "Charging Station"
 msgstr "Laddstation"
@@ -18221,7 +18569,7 @@ msgid "Parts"
 msgstr "Bildelar"
 
 msgid "Tires"
-msgstr ""
+msgstr "Däck"
 
 msgid "Rental"
 msgstr "Uthyrning"
@@ -18233,55 +18581,55 @@ msgid "Motorcycle Dealer"
 msgstr "MC-handlare"
 
 msgid "independent"
-msgstr ""
+msgstr "oberoende"
 
 msgid "Services:"
-msgstr ""
+msgstr "Tjänster:"
 
 msgid "Sale"
-msgstr ""
+msgstr "Försäljning"
 
 msgid "brand"
 msgstr "fabrikat"
 
 msgid "oldtimer"
-msgstr ""
+msgstr "gammaldags"
 
 msgid "Safety inspection"
-msgstr ""
+msgstr "Säkerhetsinspektion"
 
 msgid "DEKRA"
-msgstr ""
+msgstr "DEKRA"
 
 msgid "GTÜ"
-msgstr ""
+msgstr "GTÜ"
 
 msgid "MOT"
-msgstr ""
+msgstr "MOT"
 
 msgid "TÜV"
-msgstr ""
+msgstr "TÜV"
 
 msgid "Clothes"
 msgstr "Kläder"
 
 msgid "anchors"
-msgstr ""
+msgstr "ankare"
 
 msgid "ground_slots"
-msgstr ""
+msgstr "markgropar"
 
 msgid "informal"
-msgstr ""
+msgstr "spontan"
 
 msgid "lockers"
-msgstr ""
+msgstr "skåp"
 
 msgid "rack"
-msgstr ""
+msgstr "ställning"
 
 msgid "shed"
-msgstr ""
+msgstr "skjul"
 
 msgid "stands"
 msgstr ""
@@ -18320,13 +18668,13 @@ msgid "Public Bicycle Repair Station"
 msgstr ""
 
 msgid "Chain tool"
-msgstr ""
+msgstr "Kedjeverktyg"
 
 msgid "Public Transport"
 msgstr "Kollektivtrafik"
 
 msgid "Public Transport Route"
-msgstr ""
+msgstr "Kollektivtrafiksrutt"
 
 msgid "Route type"
 msgstr "Ruttyp"
@@ -18335,10 +18683,10 @@ msgid "subway"
 msgstr "tunnelbana"
 
 msgid "monorail"
-msgstr ""
+msgstr "monorail"
 
 msgid "light_rail"
-msgstr ""
+msgstr "snabbspårväg"
 
 msgid "trolleybus"
 msgstr "trådbuss"
@@ -18347,16 +18695,16 @@ msgid "aerialway"
 msgstr "linbana"
 
 msgid "From (initial stop)"
-msgstr ""
+msgstr "Från (första stoppet)"
 
 msgid "To (terminal stop)"
-msgstr ""
+msgstr "Till (sista stoppet)"
 
 msgid "Via (intermediate stops)"
-msgstr ""
+msgstr "Via (mellanliggande stopp)"
 
 msgid "Network"
-msgstr ""
+msgstr "Nätverk"
 
 msgid "Color (HTML name or hexadecimal code)"
 msgstr "Färg (HTML-namn eller hexadecimal kod)"
@@ -18393,47 +18741,47 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr "#CD853F"
 
-msgid "route segment"
-msgstr "Ruttdelsträcka"
-
 msgid "stop position"
-msgstr ""
+msgstr "stopplats"
 
 msgid "stop position (exit only)"
-msgstr ""
+msgstr "stopposition (endast avstigning)"
 
 msgid "stop position (entry only)"
-msgstr ""
+msgstr "stopposition (endast påstigning)"
 
 msgid "platform"
-msgstr ""
+msgstr "plattform"
 
 msgid "platform (exit only)"
-msgstr ""
+msgstr "plattform (endast avstigning)"
 
 msgid "platform (entry only)"
-msgstr ""
+msgstr "plattform (endast påstigning)"
+
+msgid "route segment"
+msgstr "Ruttdelsträcka"
 
 msgid "Route Master"
-msgstr ""
+msgstr "Huvudrutt"
 
 msgid "route variant/direction (at least 2)"
-msgstr ""
+msgstr "rutt-variant/riktning (minst 2)"
 
 msgid "Stop Area"
-msgstr ""
+msgstr "Stoppzon"
 
 msgid "UIC reference"
-msgstr ""
+msgstr "UIC-referens"
 
 msgid "UIC name"
-msgstr ""
+msgstr "UIC-namn"
 
 msgid "Stop Position"
-msgstr ""
+msgstr "Stopplats"
 
 msgid "Platform"
-msgstr ""
+msgstr "Plattform"
 
 msgid "Subway Entrance"
 msgstr "Tunnelbaneingång"
@@ -18445,19 +18793,19 @@ msgid "Bus"
 msgstr "Buss"
 
 msgid "Bus stop (legacy)"
-msgstr ""
+msgstr "Busshållplats (föråldrad tagg)"
 
 msgid "Tram stop (legacy)"
-msgstr ""
+msgstr "Spårvägshållplats (föråldrad tagg)"
 
 msgid "Train"
 msgstr "Tåg"
 
 msgid "Railway station (legacy)"
-msgstr ""
+msgstr "Järnvägsstation (föråldrad tagg)"
 
 msgid "Railway halt (legacy)"
-msgstr ""
+msgstr "Järnvägshållplats (föråldrad tagg)"
 
 msgid "Trolleybus"
 msgstr "Trådbuss"
@@ -18466,7 +18814,7 @@ msgid "Share taxi"
 msgstr "Delad taxi"
 
 msgid "Funicular"
-msgstr ""
+msgstr "Bergbana"
 
 msgid "Ferry"
 msgstr "Färja"
@@ -18484,7 +18832,7 @@ msgid "Railway platform (legacy)"
 msgstr ""
 
 msgid "funicular"
-msgstr ""
+msgstr "bergbana"
 
 msgctxt "railway"
 msgid "Station"
@@ -18500,7 +18848,7 @@ msgid "Reference Number"
 msgstr "Referensnummer"
 
 msgid "Public Transport (Legacy)"
-msgstr ""
+msgstr "Kollektivtrafik (föråldrad tagg)"
 
 msgid "Public transport route (Legacy)"
 msgstr ""
@@ -18616,6 +18964,12 @@ msgstr "Hotell"
 msgid "Stars"
 msgstr "Stjärnor"
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr "Motell"
 
@@ -18706,6 +19060,9 @@ msgstr "smörgås"
 msgid "sushi"
 msgstr "sushi"
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr "Mikrobryggeri"
 
@@ -18922,6 +19279,9 @@ msgstr "Bastu"
 msgid "Horse Riding"
 msgstr "Ridning"
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr "Bordell"
 
@@ -19021,75 +19381,75 @@ msgstr "tempel"
 
 msgctxt "christian"
 msgid "anglican"
-msgstr ""
+msgstr "anglikansk"
 
 msgctxt "christian"
 msgid "baptist"
-msgstr ""
+msgstr "baptistisk"
 
 msgctxt "christian"
 msgid "catholic"
-msgstr ""
+msgstr "katolsk"
 
 msgctxt "christian"
 msgid "evangelical"
-msgstr ""
+msgstr "evangelistisk"
 
 msgctxt "christian"
 msgid "greek_catholic"
-msgstr ""
+msgstr "grekisk-katolsk"
 
 msgctxt "christian"
 msgid "greek_orthodox"
-msgstr ""
+msgstr "grekisk-ortodox"
 
 msgctxt "christian"
 msgid "jehovahs_witness"
-msgstr ""
+msgstr "jehovas vittnen"
 
 msgctxt "christian"
 msgid "lutheran"
-msgstr ""
+msgstr "luteriansk (inkl. Svenska kyrkan)"
 
 msgctxt "christian"
 msgid "methodist"
-msgstr ""
+msgstr "metodistisk"
 
 msgctxt "christian"
 msgid "mormon"
-msgstr ""
+msgstr "mormonsk"
 
 msgctxt "christian"
 msgid "new_apostolic"
-msgstr ""
+msgstr "nyapostolistisk"
 
 msgctxt "christian"
 msgid "orthodox"
-msgstr ""
+msgstr "ortodox"
 
 msgctxt "christian"
 msgid "pentecostal"
-msgstr ""
+msgstr "pingstvänner"
 
 msgctxt "christian"
 msgid "presbyterian"
-msgstr "presbyterianer"
+msgstr "presbyteriansk"
 
 msgctxt "christian"
 msgid "protestant"
-msgstr ""
+msgstr "protestant"
 
 msgctxt "christian"
 msgid "quaker"
-msgstr ""
+msgstr "kväkare"
 
 msgctxt "christian"
 msgid "roman_catholic"
-msgstr ""
+msgstr "romsk-katolsk"
 
 msgctxt "christian"
 msgid "russian_orthodox"
-msgstr ""
+msgstr "rysk-ortodox"
 
 msgctxt "christian"
 msgid "seventh_day_adventist"
@@ -19102,7 +19462,7 @@ msgid "mosque"
 msgstr "moské"
 
 msgid "ibadi"
-msgstr ""
+msgstr "ibadi"
 
 msgid "Synagogue"
 msgstr "Synagoga"
@@ -19112,45 +19472,45 @@ msgstr "synagoga"
 
 msgctxt "jewish"
 msgid "orthodox"
-msgstr ""
+msgstr "ortodox"
 
 msgctxt "jewish"
 msgid "conservative"
-msgstr ""
+msgstr "konservativ"
 
 msgctxt "jewish"
 msgid "reform"
-msgstr ""
+msgstr "reformist"
 
 msgid "Buddhist Temple"
 msgstr "Buddhistiskt tempel"
 
 msgid "theravada"
-msgstr ""
+msgstr "theravada"
 
 msgid "mahayana"
-msgstr ""
+msgstr "mahayana"
 
 msgid "vajrayana"
-msgstr ""
+msgstr "vajrayana"
 
 msgid "Hindu Temple"
 msgstr "Hinduistiskt tempel"
 
 msgid "vaishnavism"
-msgstr ""
+msgstr "vaishnavism"
 
 msgid "shaivism"
-msgstr ""
+msgstr "shaivism"
 
 msgid "shaktism"
-msgstr ""
+msgstr "shaktism"
 
 msgid "smartism"
-msgstr ""
+msgstr "smartism"
 
 msgid "Shinto Shrine"
-msgstr ""
+msgstr "Shintoskrin"
 
 msgid "Other Place of Worship"
 msgstr "Annan religiös helgedom"
@@ -19162,7 +19522,7 @@ msgid "Town Hall"
 msgstr "Stadshus/kommunsäte"
 
 msgid "Community Centre"
-msgstr ""
+msgstr "Medborgarhus/Folkets hus"
 
 msgid "Embassy"
 msgstr "Ambassad"
@@ -19177,7 +19537,7 @@ msgid "Police"
 msgstr "Polisstation"
 
 msgid "Ranger Station"
-msgstr ""
+msgstr "Vaktstation"
 
 msgid "Fire Station"
 msgstr "Brandstation"
@@ -19189,7 +19549,7 @@ msgid "Education"
 msgstr "Undervisning"
 
 msgid "Kindergarten"
-msgstr "Barndaghem"
+msgstr "Förskola"
 
 msgid "School"
 msgstr "Skola"
@@ -19204,13 +19564,13 @@ msgid "Driving School"
 msgstr "Körskola"
 
 msgid "License Classes"
-msgstr ""
+msgstr "Körkortsklasser"
 
 msgid "A;A1;B;BE;C"
-msgstr ""
+msgstr "A;A1;B;BE;C"
 
 msgid "A;A1;B;B1;C;C1;D;D1;BE;CE;C1E;DE;D1E"
-msgstr ""
+msgstr "A;A1;B;B1;C;C1;D;D1;BE;CE;C1E;DE;D1E"
 
 msgid "Health"
 msgstr "Hälsovård"
@@ -19222,7 +19582,7 @@ msgid "Clinic"
 msgstr "Vårdcentral"
 
 msgid "Doctor''s Office"
-msgstr ""
+msgstr "Doktormottagning"
 
 msgid "Dentist"
 msgstr "Tandläkare"
@@ -19240,16 +19600,16 @@ msgid "Dispensing"
 msgstr "Receptutlämnande"
 
 msgid "Baby Hatch/Safe Haven"
-msgstr ""
+msgstr "Babylucka"
 
 msgid "Emergency Access Point"
 msgstr ""
 
 msgid "Point Number"
-msgstr ""
+msgstr "Punktnummer"
 
 msgid "Point Name"
-msgstr ""
+msgstr "Punktnamn"
 
 msgid "Phone Number"
 msgstr "Telefonnummer"
@@ -19261,61 +19621,61 @@ msgid "Veterinary"
 msgstr "Veterinär"
 
 msgid "Toilets/Restrooms"
-msgstr ""
+msgstr "Toaletter"
 
 msgid "Access rights"
-msgstr ""
+msgstr "Tillträde"
 
 msgid "seasonal"
-msgstr ""
+msgstr "säsongsmässig"
 
 msgid "flush"
-msgstr ""
+msgstr "vattenspolning"
 
 msgid "pitlatrine"
-msgstr ""
+msgstr "latrin"
 
 msgid "chemical"
-msgstr ""
+msgstr "kemisk"
 
 msgid "bucket"
-msgstr ""
+msgstr "hink"
 
 msgid "Usage Position"
-msgstr ""
+msgstr "Användningsposition"
 
 msgid "seated"
-msgstr ""
+msgstr "med säten"
 
 msgid "seated;urinal"
-msgstr ""
+msgstr "med säten; urinoar"
 
 msgid "squat"
-msgstr ""
+msgstr "på huk"
 
 msgid "urinal"
-msgstr ""
+msgstr "urinoar"
 
 msgid "Shower"
-msgstr ""
+msgstr "Dusch"
 
 msgid "Post Box"
 msgstr "Brevlåda"
 
 msgid "Collection times"
-msgstr ""
+msgstr "Tömningstid"
 
 msgid "Mo-Sa 09:00"
-msgstr ""
+msgstr "Mo-Sa 09:00"
 
 msgid "Mo-Fr 17:30; Sa 12:00"
-msgstr ""
+msgstr "Mo-Fr 17:30; Sa 12:00"
 
 msgid "Mo-Fr 15:00,19:00; Sa 15:10; Su 10:30"
-msgstr ""
+msgstr "Mo-Fr 15:00,19:00; Sa 15:10; Su 10:30"
 
 msgid "Drive through"
-msgstr ""
+msgstr "Drive-through"
 
 msgid "Telephone"
 msgstr "Telefon"
@@ -19325,7 +19685,7 @@ msgstr "Mynt"
 
 msgctxt "payment"
 msgid "Notes"
-msgstr ""
+msgstr "Sedlar"
 
 msgid "Telephone cards"
 msgstr "Telefonkort"
@@ -19343,10 +19703,10 @@ msgid "Located inside a building?"
 msgstr "Placerad inuti en byggnad?"
 
 msgid "Last check date (YYYY-MM-DD)"
-msgstr ""
+msgstr "Senaste kontrolldatum (ÅÅÅÅ-MM-DD)"
 
 msgid "Last check note"
-msgstr ""
+msgstr "Senaste kontrollanteckning"
 
 msgid "Clock"
 msgstr "Klocka"
@@ -19355,7 +19715,7 @@ msgid "Display"
 msgstr "Display"
 
 msgid "analog"
-msgstr ""
+msgstr "analog"
 
 msgid "digital"
 msgstr "digital"
@@ -19364,10 +19724,10 @@ msgid "sundial"
 msgstr "solur"
 
 msgid "unorthodox"
-msgstr ""
+msgstr "okonventionell"
 
 msgid "Support"
-msgstr ""
+msgstr "Stöd"
 
 msgctxt "mounting/support"
 msgid "pole"
@@ -19375,15 +19735,15 @@ msgstr "stolpe"
 
 msgctxt "mounting/support"
 msgid "wall_mounted"
-msgstr ""
+msgstr "väggmonterad"
 
 msgctxt "mounting/support"
 msgid "billboard"
-msgstr ""
+msgstr "anslagstavla"
 
 msgctxt "mounting/support"
 msgid "ground"
-msgstr ""
+msgstr "mark"
 
 msgid "Visibility/readability"
 msgstr "Synlighet/läsbarhet"
@@ -19409,8 +19769,8 @@ msgstr "Visar lufttryck"
 msgid "Shows humidity"
 msgstr "Visar luftfuktighet"
 
-msgid "Recycling"
-msgstr "Återvinning"
+msgid "Recycling Container"
+msgstr "Återvinningscontainer"
 
 msgid "Batteries"
 msgstr "Batterier"
@@ -19418,20 +19778,47 @@ msgstr "Batterier"
 msgid "Cans"
 msgstr "Burkar"
 
+msgid "Cardboard"
+msgstr "Kartong"
+
+msgid "Electrical Appliances"
+msgstr "Elapparater"
+
 msgid "Glass"
 msgstr "Glas"
 
+msgid "Glass Bottles"
+msgstr "Glasflaskor"
+
+msgid "Green Waste"
+msgstr "Trädgårdsavfall"
+
 msgid "Paper"
 msgstr "Papper"
 
+msgid "Plastic"
+msgstr "Plast"
+
+msgid "Plastic Bottles"
+msgstr "Plastflaskor"
+
+msgid "Plastic Packaging"
+msgstr "Plastförpackningar"
+
 msgid "Scrap Metal"
 msgstr "Metallskrot"
 
-msgid "container"
-msgstr ""
+msgid "Shoes"
+msgstr "Skor"
 
-msgid "centre"
-msgstr ""
+msgid "Small Appliances"
+msgstr "Småapparater"
+
+msgid "Waste"
+msgstr "Avfall"
+
+msgid "Recycling Centre"
+msgstr "Återvinningscentral"
 
 msgid "Waste Basket/Trash Can"
 msgstr "Papperskorg"
@@ -19440,10 +19827,10 @@ msgid "Waste Disposal/Dumpster"
 msgstr "Soptunna/Sopcontainer"
 
 msgid "Sanitary Dump Station"
-msgstr ""
+msgstr "Avloppstömningsstation"
 
 msgid "Suction pumpout"
-msgstr ""
+msgstr "Sugpump"
 
 msgid "Gravity drain for hose"
 msgstr ""
@@ -19452,7 +19839,7 @@ msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
-msgstr ""
+msgstr "Öppettider"
 
 msgid "Backrest"
 msgstr "Ryggstöd"
@@ -19465,15 +19852,15 @@ msgstr "Typ av skydd"
 
 msgctxt "shelter"
 msgid "basic_hut"
-msgstr ""
+msgstr "grundläggande"
 
 msgctxt "shelter"
 msgid "lean_to"
-msgstr ""
+msgstr "luta mot"
 
 msgctxt "shelter"
 msgid "picnic_shelter"
-msgstr "picnic_shelter"
+msgstr "picknick"
 
 msgctxt "shelter"
 msgid "public_transport"
@@ -19495,15 +19882,15 @@ msgstr "Höjd"
 
 msgctxt "height"
 msgid "low"
-msgstr ""
+msgstr "låg"
 
 msgctxt "height"
 msgid "half"
-msgstr ""
+msgstr "halv"
 
 msgctxt "height"
 msgid "full"
-msgstr ""
+msgstr "full"
 
 msgid "Hide"
 msgstr "Dölj"
@@ -19537,11 +19924,11 @@ msgid "Diameter (in mm)"
 msgstr "Diameter (mm)"
 
 msgid "Hydrant Position"
-msgstr ""
+msgstr "Brandpostens plats"
 
 msgctxt "hydrant position"
 msgid "lane"
-msgstr ""
+msgstr "vägbana"
 
 msgctxt "hydrant position"
 msgid "parking_lot"
@@ -19553,22 +19940,22 @@ msgstr "trottoar"
 
 msgctxt "hydrant position"
 msgid "green"
-msgstr ""
+msgstr "växtligheten"
 
 msgid "Pressure (in bar)"
 msgstr "Vattentryck (bar)"
 
 msgid "suction"
-msgstr ""
+msgstr "sug"
 
 msgid "Count"
-msgstr ""
+msgstr "Antal"
 
 msgid "Advertising Column"
-msgstr ""
+msgstr "Reklampelare"
 
 msgid "Billboard"
-msgstr ""
+msgstr "Affischtavla"
 
 msgid "Sports"
 msgstr "Idrott"
@@ -19586,7 +19973,7 @@ msgid "Pitch"
 msgstr "Plan"
 
 msgid "artificial_turf"
-msgstr ""
+msgstr "artificiellt gräs"
 
 msgid "decoturf"
 msgstr ""
@@ -19608,25 +19995,25 @@ msgstr "Flera"
 
 msgctxt "running"
 msgid "pitch"
-msgstr ""
+msgstr "plan"
 
 msgctxt "running"
 msgid "sports_centre"
-msgstr ""
+msgstr "sporthall"
 
 msgctxt "running"
 msgid "stadium"
-msgstr ""
+msgstr "stadion"
 
 msgctxt "running"
 msgid "track"
-msgstr ""
+msgstr "spår"
 
 msgid "Nine-pin Bowling"
-msgstr ""
+msgstr "kägel"
 
 msgid "Ten-pin Bowling"
-msgstr ""
+msgstr "bowling"
 
 msgid "Archery"
 msgstr "Bågskytte"
@@ -19634,27 +20021,30 @@ msgstr "Bågskytte"
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr "Löpning"
+
 msgid "Climbing"
 msgstr "Klättring"
 
 msgid "Canoeing/Kayaking"
-msgstr ""
+msgstr "Kanot/kajak"
 
 msgctxt "racing"
 msgid "pitch"
-msgstr ""
+msgstr "plan"
 
 msgctxt "racing"
 msgid "sports_centre"
-msgstr ""
+msgstr "sporthall"
 
 msgctxt "racing"
 msgid "stadium"
-msgstr ""
+msgstr "stadion"
 
 msgctxt "racing"
 msgid "track"
-msgstr ""
+msgstr "spår"
 
 msgid "Dog Racing"
 msgstr "Hundkapplöpning"
@@ -19672,7 +20062,7 @@ msgid "Skating"
 msgstr "Skridskoåkning"
 
 msgid "ice_rink"
-msgstr ""
+msgstr "isrink"
 
 msgid "Skateboard"
 msgstr "Skateboard"
@@ -19684,10 +20074,10 @@ msgid "swimming_pool"
 msgstr "swimmingpool"
 
 msgid "water_park"
-msgstr ""
+msgstr "vattenpark"
 
 msgid "Scuba Diving"
-msgstr ""
+msgstr "Dykning"
 
 msgid "Piste type"
 msgstr "Skidspårstyp"
@@ -19699,50 +20089,50 @@ msgid "nordic"
 msgstr "längdskidåkning"
 
 msgid "skitour"
-msgstr ""
+msgstr "skidtour"
 
 msgid "sled"
-msgstr ""
+msgstr "pulka"
 
 msgid "sleigh"
-msgstr ""
+msgstr "släde"
 
 msgid "snow_park"
-msgstr ""
+msgstr "snöpark"
 
 msgid "Difficulty"
 msgstr "Svårighetsgrad"
 
 msgctxt "piste:difficulty"
 msgid "novice"
-msgstr ""
+msgstr "nybörjare"
 
 msgctxt "piste:difficulty"
 msgid "easy"
-msgstr ""
+msgstr "lätt"
 
 msgctxt "piste:difficulty"
 msgid "intermediate"
-msgstr ""
+msgstr "medel"
 
 msgctxt "piste:difficulty"
 msgid "advanced"
-msgstr ""
+msgstr "avancerat"
 
 msgctxt "piste:difficulty"
 msgid "expert"
-msgstr ""
+msgstr "expert"
 
 msgctxt "piste:difficulty"
 msgid "freeride"
-msgstr ""
+msgstr "freeride"
 
 msgid "Grooming"
 msgstr ""
 
 msgctxt "piste:grooming"
 msgid "classic"
-msgstr ""
+msgstr "klassisk"
 
 msgctxt "piste:grooming"
 msgid "mogul"
@@ -19780,16 +20170,16 @@ msgid "American Football"
 msgstr "Amerikansk Fotboll"
 
 msgid "Canadian Football"
-msgstr ""
+msgstr "Kanadensisk fotboll"
 
 msgid "Gaelic Games"
-msgstr ""
+msgstr "Gaeliska spel"
 
 msgid "Hurling"
 msgstr ""
 
 msgid "Football"
-msgstr ""
+msgstr "Fotboll"
 
 msgid "Camogie"
 msgstr ""
@@ -19809,10 +20199,16 @@ msgstr "Baseball"
 msgid "Basketball"
 msgstr "Basket"
 
+msgid "Handball"
+msgstr "Handboll"
+
 msgid "Volleyball"
 msgstr "Volleyboll"
 
 msgid "Beach Volleyball"
+msgstr "Strandvolleyboll"
+
+msgid "Billiards"
 msgstr ""
 
 msgid "Golf"
@@ -19825,18 +20221,18 @@ msgid "Boule"
 msgstr "Boule"
 
 msgid "Lawn Bowling"
-msgstr ""
+msgstr "Gräsbowling"
 
 msgid "Cricket"
 msgstr "Cricket"
 
-msgid "Cricket Nets"
-msgstr "Cricketnät"
-
 msgid "Croquet"
 msgstr "Krocket"
 
-msgid "Hockey"
+msgid "Field Hockey"
+msgstr ""
+
+msgid "Ice Hockey"
 msgstr "Ishockey"
 
 msgid "Pelota"
@@ -19846,13 +20242,13 @@ msgid "Racquetball"
 msgstr ""
 
 msgid "Table Tennis/Ping-Pong"
-msgstr ""
+msgstr "Bordtennis/pingpong"
 
 msgid "Tennis"
 msgstr "Tennis"
 
 msgid "Motorsport"
-msgstr ""
+msgstr "Motorsport"
 
 msgid "Kart Racing"
 msgstr ""
@@ -19860,30 +20256,24 @@ msgstr ""
 msgid "Motocross"
 msgstr "Motocross"
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr "Modellflygfält"
 
 msgctxt "aerialway"
 msgid "pitch"
-msgstr ""
+msgstr "plan"
 
 msgctxt "aerialway"
 msgid "sports_centre"
-msgstr ""
+msgstr "sporthall"
 
 msgctxt "aerialway"
 msgid "track"
-msgstr ""
+msgstr "spår"
 
 msgid "RC Car"
 msgstr "RC-bilar"
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr "Byggnadsverk"
 
@@ -19897,7 +20287,7 @@ msgstr ""
 
 msgctxt "building"
 msgid "garages"
-msgstr ""
+msgstr "garagelänga"
 
 msgctxt "building"
 msgid "industrial"
@@ -19913,15 +20303,15 @@ msgstr "kommersiell"
 
 msgctxt "building"
 msgid "barn"
-msgstr ""
+msgstr "loge"
 
 msgctxt "building"
 msgid "farm_auxiliary"
-msgstr ""
+msgstr "jordbruksbyggnad"
 
 msgctxt "building"
 msgid "transportation"
-msgstr ""
+msgstr "transport"
 
 msgctxt "building"
 msgid "greenhouse"
@@ -19945,7 +20335,7 @@ msgstr "varuhus"
 
 msgctxt "building"
 msgid "retail"
-msgstr ""
+msgstr "handel"
 
 msgctxt "building"
 msgid "shed"
@@ -19953,42 +20343,50 @@ msgstr "skjul"
 
 msgctxt "building"
 msgid "storage_tank"
-msgstr ""
+msgstr "lagringstank"
+
+msgctxt "building"
+msgid "supermarket"
+msgstr "stormarknad"
+
+msgctxt "building"
+msgid "gasometer"
+msgstr "gasometer"
 
 msgctxt "building"
 msgid "cowshed"
-msgstr ""
+msgstr "kostall"
 
 msgctxt "building"
 msgid "construction"
-msgstr ""
+msgstr "konstruktion"
 
 msgctxt "building"
 msgid "Levels"
-msgstr ""
+msgstr "Våningsplan"
 
 msgid "Residential Building"
-msgstr ""
+msgstr "Bostadsbyggnad"
 
 msgctxt "building"
 msgid "residential"
-msgstr ""
+msgstr "bostäder"
 
 msgctxt "building"
 msgid "apartments"
-msgstr ""
+msgstr "lägenheter"
 
 msgctxt "building"
 msgid "house"
-msgstr ""
+msgstr "villa"
 
 msgctxt "building"
 msgid "hut"
-msgstr ""
+msgstr "stuga"
 
 msgctxt "building"
 msgid "dormitory"
-msgstr ""
+msgstr "elevhem/studenthem"
 
 msgctxt "building"
 msgid "terrace"
@@ -19996,14 +20394,14 @@ msgstr "radhus"
 
 msgctxt "building"
 msgid "detached"
-msgstr ""
+msgstr "fristående"
 
 msgctxt "building"
 msgid "farm"
 msgstr "bondgård"
 
 msgid "Building part"
-msgstr ""
+msgstr "Byggnadsdel"
 
 msgctxt "building"
 msgid "Skipped Levels"
@@ -20021,11 +20419,11 @@ msgstr "ja"
 
 msgctxt "entrance"
 msgid "main"
-msgstr ""
+msgstr "huvudentré"
 
 msgctxt "entrance"
 msgid "service"
-msgstr ""
+msgstr "service"
 
 msgctxt "entrance"
 msgid "exit"
@@ -20033,13 +20431,13 @@ msgstr "utgång"
 
 msgctxt "entrance"
 msgid "emergency"
-msgstr ""
+msgstr "nödutgång"
 
 msgid "Entrance number"
-msgstr ""
+msgstr "Entré nummer"
 
 msgid "Flat numbers"
-msgstr ""
+msgstr "Lägenhetsnummer"
 
 msgid "Tower"
 msgstr "Torn"
@@ -20069,42 +20467,42 @@ msgid "Gasometer"
 msgstr "Gasklocka"
 
 msgid "Storage Tank"
-msgstr ""
+msgstr "Lagringstank"
 
 msgctxt "content"
 msgid "fuel"
-msgstr ""
+msgstr "bränsle"
 
 msgctxt "content"
 msgid "manure"
-msgstr ""
+msgstr "gödsel"
 
 msgctxt "content"
 msgid "oil"
-msgstr ""
+msgstr "olja"
 
 msgctxt "content"
 msgid "sewage"
-msgstr ""
+msgstr "avlopp"
 
 msgctxt "content"
 msgid "silage"
-msgstr ""
+msgstr "silage"
 
 msgctxt "content"
 msgid "slurry"
-msgstr ""
+msgstr "slam"
 
 msgctxt "content"
 msgid "water"
-msgstr ""
+msgstr "vatten"
 
 msgctxt "content"
 msgid "wine"
-msgstr ""
+msgstr "vin"
 
 msgid "Bunker Silo"
-msgstr ""
+msgstr "bunkersilo"
 
 msgid "Pipeline"
 msgstr "Rörledning"
@@ -20151,10 +20549,10 @@ msgid "Depth in meters"
 msgstr "Djup i meter"
 
 msgid "Resource"
-msgstr ""
+msgstr "Resurs"
 
 msgid "aggregate"
-msgstr ""
+msgstr "aggregat"
 
 msgid "bauxite"
 msgstr "bauxit"
@@ -20223,10 +20621,10 @@ msgid "Water Works"
 msgstr "Vattenverk"
 
 msgid "Wastewater Treatment Plant"
-msgstr ""
+msgstr "Avloppsreningsverk"
 
 msgid "Watermill"
-msgstr ""
+msgstr "Vattenkvarn"
 
 msgid "Fountain"
 msgstr "Fontän"
@@ -20256,7 +20654,7 @@ msgid "Tide Level"
 msgstr "Tidvattennivå"
 
 msgid "Groundwater"
-msgstr ""
+msgstr "Grundvatten"
 
 msgid "Traffic"
 msgstr "Trafik"
@@ -20325,13 +20723,13 @@ msgid "parking"
 msgstr ""
 
 msgid "traffic"
-msgstr ""
+msgstr "traffik"
 
 msgid "shop"
 msgstr "affär"
 
 msgid "bank"
-msgstr ""
+msgstr "bank"
 
 msgid "Camera"
 msgstr "Kamera"
@@ -20361,7 +20759,7 @@ msgstr "stolpe"
 
 msgctxt "camera:mount"
 msgid "ceiling"
-msgstr ""
+msgstr "tak"
 
 msgid "Direction in degrees"
 msgstr "Sidriktning (i grader)"
@@ -20370,7 +20768,7 @@ msgid "Inclination in degrees"
 msgstr "Höjdriktning (i grader)"
 
 msgid "Bridges"
-msgstr ""
+msgstr "Broar"
 
 msgid "aqueduct"
 msgstr "akvedukt"
@@ -20379,10 +20777,10 @@ msgid "boardwalk"
 msgstr ""
 
 msgid "cantilever"
-msgstr ""
+msgstr "konsol"
 
 msgid "covered"
-msgstr ""
+msgstr "täckt"
 
 msgid "low_water_crossing"
 msgstr ""
@@ -20394,25 +20792,25 @@ msgid "viaduct"
 msgstr "viadukt"
 
 msgid "Structure"
-msgstr ""
+msgstr "Struktur"
 
 msgid "arch"
-msgstr ""
+msgstr "båge"
 
 msgid "beam"
 msgstr ""
 
 msgid "truss"
-msgstr ""
+msgstr "fackverksbro"
 
 msgid "floating"
-msgstr ""
+msgstr "flytbro"
 
 msgid "suspension"
-msgstr ""
+msgstr "hängbro"
 
 msgid "cable-stayed"
-msgstr ""
+msgstr "kabelbro"
 
 msgid "simple-suspension"
 msgstr ""
@@ -20430,7 +20828,7 @@ msgid "drawbridge"
 msgstr ""
 
 msgid "lift"
-msgstr ""
+msgstr "lyftbro"
 
 msgid "submersible"
 msgstr ""
@@ -21276,9 +21674,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr "Skor"
-
 msgid "Outdoor"
 msgstr "Friluftsliv"
 
@@ -22297,12 +22692,12 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
-msgstr "Faxnummer"
-
 msgid "Email Address"
 msgstr "E-postadress"
 
+msgid "Fax Number"
+msgstr "Faxnummer"
+
 msgid "Image"
 msgstr "Bild"
 
@@ -22727,6 +23122,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22751,6 +23149,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22811,6 +23221,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22903,9 +23316,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -23275,6 +23697,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -23329,9 +23754,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -24075,47 +24497,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -24124,10 +24555,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24736,6 +25179,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr "Tomt lager"
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr "WMS-lager ({0}), {1} ruta/rutor inlästa"
 
@@ -26028,202 +26474,508 @@ msgstr "söder"
 msgid "southeast"
 msgstr "sydöst"
 
-msgid "coastline"
-msgstr "kustlinje"
+msgid "coastline"
+msgstr "kustlinje"
+
+msgid "land"
+msgstr "land"
+
+msgid "Maximum number of segments per way"
+msgstr "Största tillåtna antal delsträckor per sträcka"
+
+msgid "Maximum number of nodes in initial trace"
+msgstr "Största tillåtna antal noder i grundspåret"
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr "Maximalt gråskalevärde att räkna som vatten (0-255)"
+
+msgid "Line simplification accuracy (degrees)"
+msgstr "Noggrannhet vid linjeförenkling (grader)"
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr "Upplösning på landsatrutor (pixlar per grad)"
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr "Storlek på landsatrutor (pixlar)"
+
+msgid "Shift all traces to east (degrees)"
+msgstr "Förskjut alla spår österut (grader)"
+
+msgid "Shift all traces to north (degrees)"
+msgstr "Förskjut alla spår norrut (grader)"
+
+msgid "Direction to search for land"
+msgstr "Riktning att söka efter land i"
+
+msgid "Tag ways as"
+msgstr "Tagga sträckor som"
+
+msgid "WMS Layer"
+msgstr "WMS-lager"
+
+msgid "Maximum cache size (MB)"
+msgstr "Största tillåtna cachestorlek (MB)"
+
+msgid "Maximum cache age (days)"
+msgstr "Största tillåtna cacheålder (dagar)"
+
+msgid "Source text"
+msgstr "Källtext"
+
+msgid "Lakewalker Plugin Preferences"
+msgstr "Inställningar för insticksmodulen Lakewalker"
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr "En insticksmodul för att spåra vattensamlingar på landsat-bilder."
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+"Största antal delsträckor som tillåts i varje skapad sträcka. Förval 250."
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+"Största antal noder som kan skapas innan processen avbryts (innan förenkling "
+"av linje). Förval 50000."
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+"Maximalt gråskalevärde att godta som vatten (baserat på landsat IR-1-data) "
+"Kan vara mellan 0-255. Förval 90."
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+"Noggrannhet för Douglas-Peuckers linjeförenkling, mätt i grader.<br>Lägre "
+"värden ger fler noder och en mer noggrann linje. Förval: 0,0003."
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr "Upplösning på landsatrutor mätt i pixlar per grad. Förval 4000."
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr "Storlek på en landsatruta, mätt i pixlar. Förval 2000."
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr "Förskjut alla punkter i östlig riktning (grader). Förval: 0."
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr "Förskjut alla punkter i nordlig riktning (grader). Förval 0."
+
+msgid "Direction to search for land. Default east."
+msgstr "I vilken riktning som land skall eftersökas. Förval öster."
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+"Tagga sträckor som vatten (water), kustlinje (coastline), land (land) eller "
+"lämna otaggat (nothing). Förval är vatten."
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+"Vilket WMS-lager skall användas som underlag för spårning. Förval är IR1."
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+"Största tillåtna storlek för varje cache-bibliotek i byte. Förval är 300MB"
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr "Största tillåtna ålder för varje cachad fil i dagar. Förval är 100"
+
+msgid "Data source text. Default is Landsat."
+msgstr "Text som anger datakälla. Förval är Landsat"
+
+msgid "Downloading image tile..."
+msgstr "Hämtar bildruta..."
+
+msgid "Could not acquire image"
+msgstr "Kunde inte skaffa en bild"
+
+msgid "Connection Failed"
+msgstr "Anslutning misslyckades"
+
+msgid "Not connected"
+msgstr "Inte ansluten"
+
+msgid "Connecting"
+msgstr "Ansluter"
+
+msgid "Connected"
+msgstr "Ansluten"
+
+msgid "no name"
+msgstr ""
+
+msgid "Live GPS"
+msgstr "Live GPS"
+
+msgid "Show GPS data."
+msgstr "Visa GPS-data"
+
+msgid "Status"
+msgstr "Status"
+
+msgid "Way Info"
+msgstr "Information om sträcka"
+
+msgid "Speed"
+msgstr "Hastighet:"
+
+msgid "Course"
+msgstr ""
+
+msgid "LiveGPS layer"
+msgstr "LiveGPS-lager"
+
+msgid "Capture GPS Track"
+msgstr "Fånga GPS-spår"
+
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgstr ""
+"Anslut till en gpsd-server och visa nuvarande position i ett LiveGPS-lager."
+
+msgid "Center Once"
+msgstr "Centrera en gång"
+
+msgid "Center the LiveGPS layer to current position."
+msgstr "Centrera LiveGPS-lagret runt nuvarande position."
+
+msgid "Auto-Center"
+msgstr "Autocentrera"
+
+msgid "Continuously center the LiveGPS layer to current position."
+msgstr "Centrera kontinuerligt LiveGPS-lagret runt nuvarande position."
+
+msgid "Open MapDust"
+msgstr ""
+
+msgid "MapDust bug reports"
+msgstr ""
+
+msgid "Activates the MapDust bug reporter plugin"
+msgstr ""
+
+msgid "Missing input data"
+msgstr ""
+
+msgid "Mapillary Images"
+msgstr ""
+
+msgid "Mapillary layer"
+msgstr ""
+
+msgid "Total images:"
+msgstr ""
+
+msgid "images"
+msgstr ""
+
+msgid "Mapillary"
+msgstr ""
+
+msgid "Create Mapillary layer"
+msgstr ""
+
+msgid "Start Mapillary layer"
+msgstr ""
+
+msgid "Download Mapillary images in current view"
+msgstr ""
+
+msgid "Export pictures"
+msgstr ""
+
+msgid "Export Mapillary pictures"
+msgstr ""
+
+msgid "Export images"
+msgstr ""
+
+msgid "Import pictures"
+msgstr ""
+
+msgid "Import local pictures"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer"
+msgstr ""
+
+msgid "Select pictures"
+msgstr ""
+
+msgid "Import pictures into sequence"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer in a sequence"
+msgstr ""
+
+msgid "Join mode"
+msgstr ""
+
+msgid "Join/unjoin pictures"
+msgstr ""
+
+msgid "Join Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures"
+msgstr ""
+
+msgid "Upload Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures."
+msgstr ""
+
+msgid "Walk mode"
+msgstr ""
+
+msgid "Start walk mode"
+msgstr ""
+
+msgid "Zoom to selected image"
+msgstr ""
+
+msgid "Zoom to the currently selected Mapillary image"
+msgstr ""
+
+msgid "Uploaded {0} images"
+msgstr ""
+
+msgid "Approve upload on the website"
+msgstr ""
+
+msgid "View in website"
+msgstr ""
+
+msgid "Copy key"
+msgstr ""
+
+msgid "Copy key tag"
+msgstr ""
+
+msgid "Edit on website"
+msgstr ""
+
+msgid "Export all images"
+msgstr ""
+
+msgid "Export selected sequence"
+msgstr ""
+
+msgid "Export selected images"
+msgstr ""
+
+msgid "Rewrite imported images"
+msgstr ""
+
+msgid "Select a folder"
+msgstr ""
+
+msgid "Explore"
+msgstr ""
+
+msgid "Select a directory"
+msgstr ""
+
+msgid "Speed limit"
+msgstr ""
 
-msgid "land"
-msgstr "land"
+msgid "Give way"
+msgstr ""
 
-msgid "Maximum number of segments per way"
-msgstr "Största tillåtna antal delsträckor per sträcka"
+msgid "No entry"
+msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
-msgstr "Största tillåtna antal noder i grundspåret"
+msgid "Intersection danger"
+msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
-msgstr "Maximalt gråskalevärde att räkna som vatten (0-255)"
+msgid "Mandatory direction (any)"
+msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
-msgstr "Noggrannhet vid linjeförenkling (grader)"
+msgid "No turn"
+msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
-msgstr "Upplösning på landsatrutor (pixlar per grad)"
+msgid "Uneven road"
+msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
-msgstr "Storlek på landsatrutor (pixlar)"
+msgid "No parking"
+msgstr ""
 
-msgid "Shift all traces to east (degrees)"
-msgstr "Förskjut alla spår österut (grader)"
+msgid "No overtaking"
+msgstr ""
 
-msgid "Shift all traces to north (degrees)"
-msgstr "Förskjut alla spår norrut (grader)"
+msgid "Pedestrian crossing"
+msgstr ""
 
-msgid "Direction to search for land"
-msgstr "Riktning att söka efter land i"
+msgid "Years"
+msgstr ""
 
-msgid "Tag ways as"
-msgstr "Tagga sträckor som"
+msgid "Months"
+msgstr ""
 
-msgid "WMS Layer"
-msgstr "WMS-lager"
+msgid "Days"
+msgstr ""
 
-msgid "Maximum cache size (MB)"
-msgstr "Största tillåtna cachestorlek (MB)"
+msgid "Mapillary filter"
+msgstr ""
 
-msgid "Maximum cache age (days)"
-msgstr "Största tillåtna cacheålder (dagar)"
+msgid "Open Mapillary filter dialog"
+msgstr ""
 
-msgid "Source text"
-msgstr "Källtext"
+msgid "Downloaded images"
+msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
-msgstr "Inställningar för insticksmodulen Lakewalker"
+msgid "Only images with signs"
+msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
-msgstr "En insticksmodul för att spåra vattensamlingar på landsat-bilder."
+msgid "Choose signs"
+msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Mapillary history"
 msgstr ""
-"Största antal delsträckor som tillåts i varje skapad sträcka. Förval 250."
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Open Mapillary history dialog"
 msgstr ""
-"Största antal noder som kan skapas innan processen avbryts (innan förenkling "
-"av linje). Förval 50000."
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Open Mapillary window"
 msgstr ""
-"Maximalt gråskalevärde att godta som vatten (baserat på landsat IR-1-data) "
-"Kan vara mellan 0-255. Förval 90."
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Mapillary dialog"
 msgstr ""
-"Noggrannhet för Douglas-Peuckers linjeförenkling, mätt i grader.<br>Lägre "
-"värden ger fler noder och en mer noggrann linje. Förval: 0,0003."
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
-msgstr "Upplösning på landsatrutor mätt i pixlar per grad. Förval 4000."
+msgid "Open Mapillary main dialog"
+msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
-msgstr "Storlek på en landsatruta, mätt i pixlar. Förval 2000."
+msgid "Next picture"
+msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
-msgstr "Förskjut alla punkter i östlig riktning (grader). Förval: 0."
+msgid "Shows the next picture in the sequence"
+msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
-msgstr "Förskjut alla punkter i nordlig riktning (grader). Förval 0."
+msgid "Previous picture"
+msgstr ""
 
-msgid "Direction to search for land. Default east."
-msgstr "I vilken riktning som land skall eftersökas. Förval öster."
+msgid "Shows the previous picture in the sequence"
+msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Jump to red"
 msgstr ""
-"Tagga sträckor som vatten (water), kustlinje (coastline), land (land) eller "
-"lämna otaggat (nothing). Förval är vatten."
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
-"Vilket WMS-lager skall användas som underlag för spårning. Förval är IR1."
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to blue"
 msgstr ""
-"Största tillåtna storlek för varje cache-bibliotek i byte. Förval är 300MB"
 
-msgid "Maximum age of each cached file in days. Default is 100"
-msgstr "Största tillåtna ålder för varje cachad fil i dagar. Förval är 100"
+msgid "Jumps to the picture at the other side of the blue line"
+msgstr ""
 
-msgid "Data source text. Default is Landsat."
-msgstr "Text som anger datakälla. Förval är Landsat"
+msgid "Stops the walk."
+msgstr ""
 
-msgid "Downloading image tile..."
-msgstr "Hämtar bildruta..."
+msgid "Play"
+msgstr ""
 
-msgid "Could not acquire image"
-msgstr "Kunde inte skaffa en bild"
+msgid "Continues with the paused walk."
+msgstr ""
 
-msgid "Connection Failed"
-msgstr "Anslutning misslyckades"
+msgid "Pause"
+msgstr ""
 
-msgid "Not connected"
-msgstr "Inte ansluten"
+msgid "Pauses the walk."
+msgstr ""
 
-msgid "Connecting"
-msgstr "Ansluter"
+msgid "Reverse buttons position when displaying images."
+msgstr ""
 
-msgid "Connected"
-msgstr "Ansluten"
+msgid "Display hour when the picture was taken"
+msgstr ""
 
-msgid "no name"
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Live GPS"
-msgstr "Live GPS"
+msgid "Move to picture''s location with next/previous buttons"
+msgstr ""
 
-msgid "Show GPS data."
-msgstr "Visa GPS-data"
+msgid "Download mode: "
+msgstr ""
 
-msgid "Status"
-msgstr "Status"
+msgid "Upload selected sequence"
+msgstr ""
 
-msgid "Way Info"
-msgstr "Information om sträcka"
+msgid "Delete after upload"
+msgstr ""
 
-msgid "Speed"
-msgstr "Hastighet:"
+msgid "Wait for full quality pictures"
+msgstr ""
 
-msgid "Course"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "LiveGPS layer"
-msgstr "LiveGPS-lager"
+msgid "Go forward"
+msgstr ""
 
-msgid "Capture GPS Track"
-msgstr "Fånga GPS-spår"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
-"Anslut till en gpsd-server och visa nuvarande position i ett LiveGPS-lager."
 
-msgid "Center Once"
-msgstr "Centrera en gång"
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Center the LiveGPS layer to current position."
-msgstr "Centrera LiveGPS-lagret runt nuvarande position."
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Auto-Center"
-msgstr "Autocentrera"
+msgid "2 images unjoined"
+msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
-msgstr "Centrera kontinuerligt LiveGPS-lagret runt nuvarande position."
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
+msgstr ""
 
-msgid "Open MapDust"
+msgid "Downloading"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid "Select mode"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "No images found"
 msgstr ""
 
-msgid "Export"
+msgid "Finished upload"
+msgstr ""
+
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -26244,6 +26996,9 @@ msgstr "Urvalets längd"
 msgid "Selection Area"
 msgstr "Urvalets area"
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr "Vinkel"
 
@@ -26306,47 +27061,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr "Bas-URL"
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -26579,6 +27293,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr "Verktyg"
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27802,6 +28519,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27973,6 +28711,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27982,6 +28723,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -28162,6 +28906,9 @@ msgstr "Nytt värde för {0}"
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -28340,6 +29087,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -28349,6 +29129,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr "Spara LiveData automatiskt"
 
@@ -28588,9 +29371,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -30080,9 +30860,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr "Sträckval"
-
 msgid "Add names from Wikipedia"
 msgstr "Lägg till namn från Wikipedia"
 
diff --git a/i18n/po/ta.po b/i18n/po/ta.po
index db9e155..8630166 100644
--- a/i18n/po/ta.po
+++ b/i18n/po/ta.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2012-10-03 22:36+0000\n"
 "Last-Translator: நவீன் குமார்(கெம்ளின்) <naveenmtp at gmail.com>\n"
 "Language-Team: Tamil <ta at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:58+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 05:02+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "X-Poedit-Country: INDIA\n"
 "Language: ta\n"
 "X-Poedit-Language: Tamil\n"
@@ -99,21 +99,18 @@ msgstr ""
 msgid "Updating user interface"
 msgstr ""
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "தவறாக அமைக்கப்பட்ட \"{0}\" என்ற கோப்பின் முகவரியைப் புறக்கணித்தல்"
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "தவறாக அமைக்கப்பட்ட \"{0}\" என்ற முகவரியைப் புறக்கணித்தல்"
 
 msgid "Warning"
 msgstr "எச்சரிக்கை"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "தவறாக அமைக்கப்பட்ட \"{0}\" என்ற கோப்பின் முகவரியைப் புறக்கணித்தல்"
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "தவறாக அமைக்கப்பட்ட \"{0}\" என்ற முகவரியைப் புறக்கணித்தல்"
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -452,6 +449,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr "கோட்டின் வழியாக தேர்ந்தெடுக்கப்பட்ட புள்ளிகளை சம தூரத்தில் பங்கிடு"
 
@@ -1051,6 +1051,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr "ஒட்டு"
 
@@ -1979,15 +2003,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr ""
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -2009,6 +2024,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2127,9 +2151,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2343,9 +2364,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr ""
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2559,6 +2586,10 @@ msgid "RX"
 msgstr "RX"
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr "A"
 
@@ -2601,6 +2632,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3051,6 +3085,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3168,10 +3220,44 @@ msgctxt "compass"
 msgid "E"
 msgstr "E"
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3361,6 +3447,12 @@ msgstr ""
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3388,13 +3480,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -4010,9 +4102,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -4022,12 +4111,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4208,13 +4309,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4412,6 +4513,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4625,43 +4727,54 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
 msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
 msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
 msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
 msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
-msgid "Menu: {0}"
+msgctxt "menu"
+msgid "Help"
 msgstr ""
 
-msgid "Save and load the current session (list of layers, etc.)"
+msgid "Menu: {0}"
 msgstr ""
 
 msgid "Edit toolbar"
@@ -4685,6 +4798,7 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
 msgstr ""
 
@@ -4807,58 +4921,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr ""
-
-msgid "Pos."
+msgid " ({0})"
 msgstr ""
 
-msgid "Role"
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5287,6 +5359,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr ""
+
 msgid "Primitive"
 msgstr ""
 
@@ -5527,6 +5602,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5673,6 +5751,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5776,7 +5889,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5904,6 +6017,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5913,17 +6031,48 @@ msgstr ""
 msgid "unknown"
 msgstr ""
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -5969,10 +6118,16 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
-msgid "Activate"
+msgid "Gamma"
 msgstr ""
 
-msgid "Activate the selected layer"
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
+msgid "Activate"
+msgstr ""
+
+msgid "Activate the selected layer"
 msgstr ""
 
 msgid "Activate layer"
@@ -6098,6 +6253,12 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
+msgid "Mini map"
+msgstr ""
+
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
 msgid "List of notes"
 msgstr ""
 
@@ -6156,10 +6317,15 @@ msgstr ""
 msgid "Enter the ID of the object that should be downloaded"
 msgstr ""
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6188,6 +6354,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr ""
 
+msgid "Selection"
+msgstr ""
+
 msgid "Open a selection list window."
 msgstr ""
 
@@ -6278,6 +6447,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -6873,6 +7048,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6964,14 +7145,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7144,6 +7324,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7679,6 +7865,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8524,6 +8713,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr ""
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr ""
 
@@ -8577,6 +8866,9 @@ msgstr "GPX கோப்பைக் காக்க"
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8597,7 +8889,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8682,80 +8974,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr "OSM கோப்பைக் காக்க"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-
-msgid "Auto Zoom"
-msgstr ""
-
-msgid "Auto load tiles"
-msgstr ""
-
-msgid "Show Errors"
-msgstr ""
-
-msgid "Load Tile"
-msgstr ""
-
-msgid "Show Tile Info"
-msgstr ""
-
-msgid "Load All Tiles"
-msgstr ""
-
-msgid "Load All Error Tiles"
-msgstr ""
-
-msgid "Increase zoom"
-msgstr ""
-
-msgid "Decrease zoom"
-msgstr ""
-
-msgid "Snap to tile size"
-msgstr ""
-
-msgid "Flush Tile Cache"
-msgstr ""
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
@@ -8765,56 +8983,30 @@ msgstr ""
 msgid "No validation errors"
 msgstr ""
 
-msgid "Blank Layer"
-msgstr ""
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "Download visible tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-
-msgid "Change resolution"
-msgstr ""
-
-msgid "Reload erroneous tiles"
-msgstr ""
-
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Automatic downloading"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Zoom to native resolution"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Supported projections are: {0}"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Save WMS file"
+msgid "Try Again"
 msgstr ""
 
-msgid "Correlate to GPX"
+msgid "No images could be matched!"
 msgstr ""
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
@@ -8901,24 +9093,9 @@ msgstr ""
 msgid "Offset:"
 msgstr ""
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
 msgid "Correlate"
 msgstr ""
 
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9112,9 +9289,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr ""
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9177,9 +9351,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9805,16 +9976,16 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 
 msgid "Would you like to restart now?"
 msgstr ""
 
-msgid "Icon paths:"
+msgid "Download plugins"
+msgstr ""
+
+msgid "Icon paths:"
 msgstr ""
 
 msgid "Short Description:"
@@ -10606,6 +10777,21 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
+msgid "1. Enter getCapabilities URL"
+msgstr ""
+
+msgid "2. Enter name for this layer"
+msgstr ""
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr ""
 
@@ -10624,6 +10810,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10645,6 +10843,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10687,9 +10888,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr ""
 
@@ -10714,36 +10912,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11679,6 +11862,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] ""
@@ -11787,6 +11978,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12040,6 +12234,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12576,6 +12773,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12961,6 +13161,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13955,6 +14168,9 @@ msgstr ""
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr ""
+
 msgid "Blue:"
 msgstr ""
 
@@ -13994,7 +14210,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -14006,9 +14222,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14117,6 +14330,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14130,12 +14346,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14172,10 +14394,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14202,6 +14430,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14226,7 +14457,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14241,6 +14472,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14253,12 +14487,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14279,6 +14507,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14311,10 +14542,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14344,6 +14572,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14359,154 +14593,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14521,9 +14761,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14653,6 +14902,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14668,7 +14932,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -14994,6 +15258,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15078,11 +15347,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15136,7 +15400,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15151,9 +15415,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15234,6 +15495,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15272,6 +15541,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15347,9 +15619,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15755,6 +16024,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15779,10 +16056,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15799,6 +16072,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15815,11 +16092,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15835,6 +16124,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15847,6 +16140,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15874,6 +16171,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16265,6 +16574,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16341,6 +16653,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr ""
 
@@ -16878,6 +17193,12 @@ msgstr ""
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17067,6 +17388,11 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
 msgstr ""
 
@@ -17120,6 +17446,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17261,13 +17591,127 @@ msgstr ""
 msgid "public"
 msgstr ""
 
-msgid "Pier"
+msgid "Marine Fuel"
 msgstr ""
 
-msgid "Lock Gate"
+msgid "Agip"
 msgstr ""
 
-msgid "Turning Point"
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
+msgid "Pier"
+msgstr ""
+
+msgid "Lock Gate"
+msgstr ""
+
+msgid "Turning Point"
 msgstr ""
 
 msgid "Slipway"
@@ -17377,6 +17821,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -17500,78 +17947,6 @@ msgstr ""
 msgid "Fuel"
 msgstr ""
 
-msgid "Agip"
-msgstr ""
-
-msgid "Aral"
-msgstr ""
-
-msgid "Avia"
-msgstr ""
-
-msgid "BP"
-msgstr ""
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr ""
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
 msgid "With shop"
 msgstr ""
 
@@ -17581,51 +17956,12 @@ msgstr ""
 msgid "kiosk"
 msgstr ""
 
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -17844,9 +18180,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17865,6 +18198,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18067,6 +18403,12 @@ msgstr ""
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18157,6 +18499,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18371,6 +18716,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18858,7 +19206,7 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
@@ -18867,37 +19215,64 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
-msgid "Glass"
+msgid "Cardboard"
 msgstr ""
 
-msgid "Paper"
+msgid "Electrical Appliances"
 msgstr ""
 
-msgid "Scrap Metal"
+msgid "Glass"
 msgstr ""
 
-msgid "container"
+msgid "Glass Bottles"
 msgstr ""
 
-msgid "centre"
+msgid "Green Waste"
 msgstr ""
 
-msgid "Waste Basket/Trash Can"
+msgid "Paper"
 msgstr ""
 
-msgid "Waste Disposal/Dumpster"
+msgid "Plastic"
 msgstr ""
 
-msgid "Sanitary Dump Station"
+msgid "Plastic Bottles"
 msgstr ""
 
-msgid "Suction pumpout"
+msgid "Plastic Packaging"
 msgstr ""
 
-msgid "Gravity drain for hose"
+msgid "Scrap Metal"
 msgstr ""
 
-msgid "Casette or Elsan Disposal"
+msgid "Shoes"
+msgstr "காலணிகள்"
+
+msgid "Small Appliances"
+msgstr ""
+
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
+msgstr ""
+
+msgid "Waste Basket/Trash Can"
+msgstr ""
+
+msgid "Waste Disposal/Dumpster"
+msgstr ""
+
+msgid "Sanitary Dump Station"
+msgstr ""
+
+msgid "Suction pumpout"
+msgstr ""
+
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
@@ -19083,6 +19458,9 @@ msgstr ""
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr ""
 
@@ -19258,12 +19636,18 @@ msgstr ""
 msgid "Basketball"
 msgstr ""
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr ""
 
@@ -19279,13 +19663,13 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
@@ -19309,9 +19693,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19330,9 +19711,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -19405,6 +19783,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20725,9 +21111,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr "காலணிகள்"
-
 msgid "Outdoor"
 msgstr ""
 
@@ -21740,10 +22123,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22170,6 +22553,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22194,6 +22580,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22254,6 +22652,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22344,9 +22745,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22716,6 +23126,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22770,9 +23183,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23516,47 +23926,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23565,10 +23984,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24171,6 +24602,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr ""
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25268,374 +25702,680 @@ msgid ""
 "highlight tracks"
 msgstr ""
 
-msgid "Delete this"
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
 msgstr ""
 
-msgid "Delete this&older"
+msgid "Connecting"
 msgstr ""
 
-msgid "km/h"
+msgid "Connected"
 msgstr ""
 
-msgid "Track name: "
+msgid "no name"
 msgstr ""
 
-msgid "Update IRS adjustment layer"
+msgid "Live GPS"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid "Show GPS data."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Speed"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Course"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
+msgid "Explore"
 msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25656,6 +26396,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -25720,47 +26463,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -25993,6 +26695,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr ""
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27210,6 +27915,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27381,6 +28107,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27390,6 +28119,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27570,6 +28302,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27748,6 +28483,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27757,6 +28525,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -27993,9 +28764,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29478,9 +30246,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/te.po b/i18n/po/te.po
index dfedd2b..8c8aae0 100644
--- a/i18n/po/te.po
+++ b/i18n/po/te.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2011-05-13 08:50+0000\n"
 "Last-Translator: Praveen Illa <mail2ipn at gmail.com>\n"
 "Language-Team: Telugu <te at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:58+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 05:02+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: te\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -97,19 +97,16 @@ msgstr ""
 msgid "Updating user interface"
 msgstr ""
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
 msgstr ""
 
 msgid "Warning"
 msgstr "హెచ్చరిక"
 
-msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
+msgid "Ignoring malformed file URL: \"{0}\""
 msgstr ""
 
-msgid "Ignoring malformed URL: \"{0}\""
+msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 
 msgid ""
@@ -444,6 +441,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
 
@@ -1029,6 +1029,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr ""
 
@@ -1945,15 +1969,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr ""
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -1975,6 +1990,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2093,9 +2117,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2309,9 +2330,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr ""
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2525,6 +2552,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2567,6 +2598,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3017,6 +3051,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3134,10 +3186,44 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3327,6 +3413,12 @@ msgstr ""
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3354,13 +3446,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -3976,9 +4068,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -3988,12 +4077,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4174,13 +4275,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4378,6 +4479,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4591,43 +4693,54 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
 msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
 msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
 msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
 msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
-msgid "Menu: {0}"
+msgctxt "menu"
+msgid "Help"
 msgstr ""
 
-msgid "Save and load the current session (list of layers, etc.)"
+msgid "Menu: {0}"
 msgstr ""
 
 msgid "Edit toolbar"
@@ -4651,6 +4764,7 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
 msgstr ""
 
@@ -4773,58 +4887,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr ""
-
-msgid "Pos."
+msgid " ({0})"
 msgstr ""
 
-msgid "Role"
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5253,6 +5325,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr ""
+
 msgid "Primitive"
 msgstr ""
 
@@ -5493,6 +5568,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5639,6 +5717,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5742,7 +5855,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5870,6 +5983,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5879,17 +5997,48 @@ msgstr ""
 msgid "unknown"
 msgstr ""
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -5935,6 +6084,12 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr ""
 
@@ -6064,10 +6219,16 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
-msgid "List of notes"
+msgid "Mini map"
 msgstr ""
 
-msgid "Add comment"
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
+msgid "List of notes"
+msgstr ""
+
+msgid "Add comment"
 msgstr ""
 
 msgid "Comment"
@@ -6122,10 +6283,15 @@ msgstr ""
 msgid "Enter the ID of the object that should be downloaded"
 msgstr ""
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6154,6 +6320,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr ""
 
+msgid "Selection"
+msgstr ""
+
 msgid "Open a selection list window."
 msgstr ""
 
@@ -6244,6 +6413,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -6838,6 +7013,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6929,14 +7110,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7109,6 +7289,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7644,6 +7830,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8489,6 +8678,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr ""
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr ""
 
@@ -8542,6 +8831,9 @@ msgstr ""
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8562,7 +8854,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8645,80 +8937,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr ""
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-
-msgid "Auto Zoom"
-msgstr ""
-
-msgid "Auto load tiles"
-msgstr ""
-
-msgid "Show Errors"
-msgstr ""
-
-msgid "Load Tile"
-msgstr ""
-
-msgid "Show Tile Info"
-msgstr ""
-
-msgid "Load All Tiles"
-msgstr ""
-
-msgid "Load All Error Tiles"
-msgstr ""
-
-msgid "Increase zoom"
-msgstr ""
-
-msgid "Decrease zoom"
-msgstr ""
-
-msgid "Snap to tile size"
-msgstr ""
-
-msgid "Flush Tile Cache"
-msgstr ""
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
@@ -8728,56 +8946,30 @@ msgstr ""
 msgid "No validation errors"
 msgstr ""
 
-msgid "Blank Layer"
-msgstr ""
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "Download visible tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-
-msgid "Change resolution"
-msgstr ""
-
-msgid "Reload erroneous tiles"
-msgstr ""
-
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Automatic downloading"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Zoom to native resolution"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Supported projections are: {0}"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Save WMS file"
+msgid "Try Again"
 msgstr ""
 
-msgid "Correlate to GPX"
+msgid "No images could be matched!"
 msgstr ""
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
@@ -8864,24 +9056,9 @@ msgstr ""
 msgid "Offset:"
 msgstr ""
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
 msgid "Correlate"
 msgstr ""
 
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9075,9 +9252,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr ""
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9140,9 +9314,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9768,15 +9939,15 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr ""
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -10569,13 +10740,28 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
-msgid "imagery fade"
+msgid "1. Enter getCapabilities URL"
 msgstr ""
 
-msgid "Fade Color: "
+msgid "2. Enter name for this layer"
 msgstr ""
 
-msgid "Fade amount: "
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
+msgid "imagery fade"
+msgstr ""
+
+msgid "Fade Color: "
+msgstr ""
+
+msgid "Fade amount: "
 msgstr ""
 
 msgid "Soft"
@@ -10587,6 +10773,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10608,6 +10806,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10650,9 +10851,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr ""
 
@@ -10677,36 +10875,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11642,6 +11825,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] ""
@@ -11750,6 +11941,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12003,6 +12197,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12539,6 +12736,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12924,6 +13124,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13918,6 +14131,9 @@ msgstr ""
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr ""
+
 msgid "Blue:"
 msgstr ""
 
@@ -13957,7 +14173,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -13969,9 +14185,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14080,6 +14293,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14093,12 +14309,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14135,10 +14357,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14165,6 +14393,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14189,7 +14420,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14204,6 +14435,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14216,12 +14450,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14242,6 +14470,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14274,10 +14505,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14307,6 +14535,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14322,154 +14556,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14484,9 +14724,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14616,6 +14865,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14631,7 +14895,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -14957,6 +15221,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15041,11 +15310,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15099,7 +15363,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15114,9 +15378,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15197,6 +15458,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15235,6 +15504,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15310,9 +15582,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15718,6 +15987,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15742,10 +16019,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15762,6 +16035,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15778,11 +16055,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15798,6 +16087,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15810,6 +16103,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15837,6 +16134,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16228,6 +16537,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16304,6 +16616,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr ""
 
@@ -16841,6 +17156,12 @@ msgstr ""
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17030,6 +17351,11 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
 msgstr ""
 
@@ -17083,6 +17409,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17224,13 +17554,127 @@ msgstr ""
 msgid "public"
 msgstr ""
 
-msgid "Pier"
+msgid "Marine Fuel"
 msgstr ""
 
-msgid "Lock Gate"
+msgid "Agip"
 msgstr ""
 
-msgid "Turning Point"
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
+msgid "Pier"
+msgstr ""
+
+msgid "Lock Gate"
+msgstr ""
+
+msgid "Turning Point"
 msgstr ""
 
 msgid "Slipway"
@@ -17340,6 +17784,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -17463,78 +17910,6 @@ msgstr ""
 msgid "Fuel"
 msgstr ""
 
-msgid "Agip"
-msgstr ""
-
-msgid "Aral"
-msgstr ""
-
-msgid "Avia"
-msgstr ""
-
-msgid "BP"
-msgstr ""
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr ""
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
 msgid "With shop"
 msgstr ""
 
@@ -17544,51 +17919,12 @@ msgstr ""
 msgid "kiosk"
 msgstr ""
 
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -17807,9 +18143,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17828,6 +18161,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18030,6 +18366,12 @@ msgstr ""
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18120,6 +18462,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18334,6 +18679,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18821,7 +19169,7 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
@@ -18830,43 +19178,70 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
-msgid "Glass"
+msgid "Cardboard"
 msgstr ""
 
-msgid "Paper"
+msgid "Electrical Appliances"
 msgstr ""
 
-msgid "Scrap Metal"
+msgid "Glass"
 msgstr ""
 
-msgid "container"
+msgid "Glass Bottles"
 msgstr ""
 
-msgid "centre"
+msgid "Green Waste"
 msgstr ""
 
-msgid "Waste Basket/Trash Can"
+msgid "Paper"
 msgstr ""
 
-msgid "Waste Disposal/Dumpster"
+msgid "Plastic"
 msgstr ""
 
-msgid "Sanitary Dump Station"
+msgid "Plastic Bottles"
 msgstr ""
 
-msgid "Suction pumpout"
+msgid "Plastic Packaging"
 msgstr ""
 
-msgid "Gravity drain for hose"
+msgid "Scrap Metal"
 msgstr ""
 
-msgid "Casette or Elsan Disposal"
+msgid "Shoes"
 msgstr ""
 
-msgid "Operation times"
+msgid "Small Appliances"
 msgstr ""
 
-msgid "Backrest"
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
+msgstr ""
+
+msgid "Waste Basket/Trash Can"
+msgstr ""
+
+msgid "Waste Disposal/Dumpster"
+msgstr ""
+
+msgid "Sanitary Dump Station"
+msgstr ""
+
+msgid "Suction pumpout"
+msgstr ""
+
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
+msgstr ""
+
+msgid "Operation times"
+msgstr ""
+
+msgid "Backrest"
 msgstr ""
 
 msgid "Amount of Seats"
@@ -19046,6 +19421,9 @@ msgstr ""
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr ""
 
@@ -19221,12 +19599,18 @@ msgstr ""
 msgid "Basketball"
 msgstr ""
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr ""
 
@@ -19242,13 +19626,13 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
@@ -19272,9 +19656,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19293,9 +19674,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -19368,6 +19746,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20688,9 +21074,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -21703,10 +22086,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22133,6 +22516,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22157,6 +22543,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22217,6 +22615,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22307,9 +22708,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22679,6 +23089,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22733,9 +23146,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23479,47 +23889,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23528,10 +23947,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24134,6 +24565,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr ""
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25231,374 +25665,680 @@ msgid ""
 "highlight tracks"
 msgstr ""
 
-msgid "Delete this"
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
 msgstr ""
 
-msgid "Delete this&older"
+msgid "Connecting"
 msgstr ""
 
-msgid "km/h"
+msgid "Connected"
 msgstr ""
 
-msgid "Track name: "
+msgid "no name"
 msgstr ""
 
-msgid "Update IRS adjustment layer"
+msgid "Live GPS"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid "Show GPS data."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Speed"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Course"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
+msgid "Explore"
 msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25619,6 +26359,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -25677,47 +26420,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -25950,6 +26652,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr ""
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27167,6 +27872,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27338,6 +28064,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27347,6 +28076,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27527,6 +28259,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27705,6 +28440,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27714,6 +28482,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -27950,9 +28721,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29435,9 +30203,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/th.po b/i18n/po/th.po
index b641b22..6f004ee 100644
--- a/i18n/po/th.po
+++ b/i18n/po/th.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2009-03-23 02:34+0000\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: Thai <th at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:58+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 05:03+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: th\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -97,19 +97,16 @@ msgstr ""
 msgid "Updating user interface"
 msgstr ""
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
 msgstr ""
 
 msgid "Warning"
 msgstr ""
 
-msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
+msgid "Ignoring malformed file URL: \"{0}\""
 msgstr ""
 
-msgid "Ignoring malformed URL: \"{0}\""
+msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 
 msgid ""
@@ -444,6 +441,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
 
@@ -1029,6 +1029,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr ""
 
@@ -1945,15 +1969,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr ""
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -1975,6 +1990,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2093,9 +2117,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2309,9 +2330,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr ""
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2525,6 +2552,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2567,6 +2598,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3017,6 +3051,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3134,10 +3186,44 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3327,6 +3413,12 @@ msgstr ""
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3354,13 +3446,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -3976,9 +4068,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -3988,12 +4077,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4174,13 +4275,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4378,6 +4479,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4591,43 +4693,54 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
 msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
 msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
 msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
 msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
-msgid "Menu: {0}"
+msgctxt "menu"
+msgid "Help"
 msgstr ""
 
-msgid "Save and load the current session (list of layers, etc.)"
+msgid "Menu: {0}"
 msgstr ""
 
 msgid "Edit toolbar"
@@ -4651,6 +4764,7 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
 msgstr ""
 
@@ -4773,58 +4887,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr ""
-
-msgid "Pos."
+msgid " ({0})"
 msgstr ""
 
-msgid "Role"
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5253,6 +5325,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr ""
+
 msgid "Primitive"
 msgstr ""
 
@@ -5493,6 +5568,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5639,6 +5717,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5742,7 +5855,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5870,6 +5983,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5879,17 +5997,48 @@ msgstr ""
 msgid "unknown"
 msgstr ""
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -5935,6 +6084,12 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr ""
 
@@ -6064,10 +6219,16 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
-msgid "List of notes"
+msgid "Mini map"
 msgstr ""
 
-msgid "Add comment"
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
+msgid "List of notes"
+msgstr ""
+
+msgid "Add comment"
 msgstr ""
 
 msgid "Comment"
@@ -6122,10 +6283,15 @@ msgstr ""
 msgid "Enter the ID of the object that should be downloaded"
 msgstr ""
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6154,6 +6320,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr ""
 
+msgid "Selection"
+msgstr ""
+
 msgid "Open a selection list window."
 msgstr ""
 
@@ -6244,6 +6413,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -6838,6 +7013,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6929,14 +7110,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7109,6 +7289,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7644,6 +7830,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8489,6 +8678,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr ""
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr ""
 
@@ -8542,6 +8831,9 @@ msgstr ""
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8562,7 +8854,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8645,80 +8937,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr ""
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-
-msgid "Auto Zoom"
-msgstr ""
-
-msgid "Auto load tiles"
-msgstr ""
-
-msgid "Show Errors"
-msgstr ""
-
-msgid "Load Tile"
-msgstr ""
-
-msgid "Show Tile Info"
-msgstr ""
-
-msgid "Load All Tiles"
-msgstr ""
-
-msgid "Load All Error Tiles"
-msgstr ""
-
-msgid "Increase zoom"
-msgstr ""
-
-msgid "Decrease zoom"
-msgstr ""
-
-msgid "Snap to tile size"
-msgstr ""
-
-msgid "Flush Tile Cache"
-msgstr ""
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
@@ -8728,56 +8946,30 @@ msgstr ""
 msgid "No validation errors"
 msgstr ""
 
-msgid "Blank Layer"
-msgstr ""
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "Download visible tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-
-msgid "Change resolution"
-msgstr ""
-
-msgid "Reload erroneous tiles"
-msgstr ""
-
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Automatic downloading"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Zoom to native resolution"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Supported projections are: {0}"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Save WMS file"
+msgid "Try Again"
 msgstr ""
 
-msgid "Correlate to GPX"
+msgid "No images could be matched!"
 msgstr ""
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
@@ -8864,24 +9056,9 @@ msgstr ""
 msgid "Offset:"
 msgstr ""
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
 msgid "Correlate"
 msgstr ""
 
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9075,9 +9252,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr ""
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9140,9 +9314,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9768,15 +9939,15 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr ""
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -10569,13 +10740,28 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
-msgid "imagery fade"
+msgid "1. Enter getCapabilities URL"
 msgstr ""
 
-msgid "Fade Color: "
+msgid "2. Enter name for this layer"
 msgstr ""
 
-msgid "Fade amount: "
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
+msgid "imagery fade"
+msgstr ""
+
+msgid "Fade Color: "
+msgstr ""
+
+msgid "Fade amount: "
 msgstr ""
 
 msgid "Soft"
@@ -10587,6 +10773,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10608,6 +10806,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10650,9 +10851,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr ""
 
@@ -10677,36 +10875,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11642,6 +11825,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] ""
@@ -11750,6 +11941,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12003,6 +12197,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12539,6 +12736,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12924,6 +13124,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13918,6 +14131,9 @@ msgstr ""
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr ""
+
 msgid "Blue:"
 msgstr ""
 
@@ -13957,7 +14173,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -13969,9 +14185,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14080,6 +14293,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14093,12 +14309,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14135,10 +14357,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14165,6 +14393,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14189,7 +14420,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14204,6 +14435,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14216,12 +14450,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14242,6 +14470,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14274,10 +14505,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14307,6 +14535,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14322,154 +14556,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14484,9 +14724,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14616,6 +14865,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14631,7 +14895,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -14957,6 +15221,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15041,11 +15310,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15099,7 +15363,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15114,9 +15378,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15197,6 +15458,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15235,6 +15504,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15310,9 +15582,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15718,6 +15987,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15742,10 +16019,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15762,6 +16035,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15778,11 +16055,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15798,6 +16087,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15810,6 +16103,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15837,6 +16134,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16228,6 +16537,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16304,6 +16616,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr ""
 
@@ -16841,6 +17156,12 @@ msgstr ""
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17030,6 +17351,11 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
 msgstr ""
 
@@ -17083,6 +17409,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17224,13 +17554,127 @@ msgstr ""
 msgid "public"
 msgstr ""
 
-msgid "Pier"
+msgid "Marine Fuel"
 msgstr ""
 
-msgid "Lock Gate"
+msgid "Agip"
 msgstr ""
 
-msgid "Turning Point"
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
+msgid "Pier"
+msgstr ""
+
+msgid "Lock Gate"
+msgstr ""
+
+msgid "Turning Point"
 msgstr ""
 
 msgid "Slipway"
@@ -17340,6 +17784,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -17463,78 +17910,6 @@ msgstr ""
 msgid "Fuel"
 msgstr ""
 
-msgid "Agip"
-msgstr ""
-
-msgid "Aral"
-msgstr ""
-
-msgid "Avia"
-msgstr ""
-
-msgid "BP"
-msgstr ""
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr ""
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
 msgid "With shop"
 msgstr ""
 
@@ -17544,51 +17919,12 @@ msgstr ""
 msgid "kiosk"
 msgstr ""
 
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -17807,9 +18143,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17828,6 +18161,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18030,6 +18366,12 @@ msgstr ""
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18120,6 +18462,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18334,6 +18679,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18821,7 +19169,7 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
@@ -18830,43 +19178,70 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
-msgid "Glass"
+msgid "Cardboard"
 msgstr ""
 
-msgid "Paper"
+msgid "Electrical Appliances"
 msgstr ""
 
-msgid "Scrap Metal"
+msgid "Glass"
 msgstr ""
 
-msgid "container"
+msgid "Glass Bottles"
 msgstr ""
 
-msgid "centre"
+msgid "Green Waste"
 msgstr ""
 
-msgid "Waste Basket/Trash Can"
+msgid "Paper"
 msgstr ""
 
-msgid "Waste Disposal/Dumpster"
+msgid "Plastic"
 msgstr ""
 
-msgid "Sanitary Dump Station"
+msgid "Plastic Bottles"
 msgstr ""
 
-msgid "Suction pumpout"
+msgid "Plastic Packaging"
 msgstr ""
 
-msgid "Gravity drain for hose"
+msgid "Scrap Metal"
 msgstr ""
 
-msgid "Casette or Elsan Disposal"
+msgid "Shoes"
 msgstr ""
 
-msgid "Operation times"
+msgid "Small Appliances"
 msgstr ""
 
-msgid "Backrest"
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
+msgstr ""
+
+msgid "Waste Basket/Trash Can"
+msgstr ""
+
+msgid "Waste Disposal/Dumpster"
+msgstr ""
+
+msgid "Sanitary Dump Station"
+msgstr ""
+
+msgid "Suction pumpout"
+msgstr ""
+
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
+msgstr ""
+
+msgid "Operation times"
+msgstr ""
+
+msgid "Backrest"
 msgstr ""
 
 msgid "Amount of Seats"
@@ -19046,6 +19421,9 @@ msgstr ""
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr ""
 
@@ -19221,12 +19599,18 @@ msgstr ""
 msgid "Basketball"
 msgstr ""
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr ""
 
@@ -19242,13 +19626,13 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
@@ -19272,9 +19656,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19293,9 +19674,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -19368,6 +19746,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20688,9 +21074,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -21703,10 +22086,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22133,6 +22516,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22157,6 +22543,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22217,6 +22615,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22307,9 +22708,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22679,6 +23089,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22733,9 +23146,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23479,47 +23889,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23528,10 +23947,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24134,6 +24565,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr ""
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25231,374 +25665,680 @@ msgid ""
 "highlight tracks"
 msgstr ""
 
-msgid "Delete this"
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
 msgstr ""
 
-msgid "Delete this&older"
+msgid "Connecting"
 msgstr ""
 
-msgid "km/h"
+msgid "Connected"
 msgstr ""
 
-msgid "Track name: "
+msgid "no name"
 msgstr ""
 
-msgid "Update IRS adjustment layer"
+msgid "Live GPS"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid "Show GPS data."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Speed"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Course"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
+msgid "Explore"
 msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25619,6 +26359,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -25677,47 +26420,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -25950,6 +26652,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr ""
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27167,6 +27872,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27338,6 +28064,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27347,6 +28076,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27527,6 +28259,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27705,6 +28440,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27714,6 +28482,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -27950,9 +28721,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29435,9 +30203,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/tr.po b/i18n/po/tr.po
index 6708a73..1d6874a 100644
--- a/i18n/po/tr.po
+++ b/i18n/po/tr.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2014-05-16 05:31+0000\n"
 "Last-Translator: katpatuka <email at katpatuka.org>\n"
 "Language-Team: Türkçe <>\n"
@@ -17,8 +17,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:59+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 05:03+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -99,23 +99,20 @@ msgstr "Görüntü tercihleri yükleniyor"
 msgid "Updating user interface"
 msgstr "Kullanıcı arayüzü güncelleniyor"
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "hatalı dosya atlandı URL: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "Yanlış linkler atlanıldı: URL: \"{0}\""
 
 msgid "Warning"
 msgstr "Uyarı"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "hatalı dosya atlandı URL: \"{0}\""
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 "\"downloadgps\" parametresi dosya isimleri ve dosya URLleri kabul "
 "etmemektedir."
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "Yanlış linkler atlanıldı: URL: \"{0}\""
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -454,6 +451,9 @@ msgstr "Diyalog paneli"
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Diyalog panelini aç/kapa, haritayı genişlet"
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr "Noktaları düz bir çüzgi olarak dağıt"
 
@@ -1054,6 +1054,30 @@ msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 "Dik açıya yakın ve neredeyse doğrusal olan açıılar içeren yollar seçin."
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr "Yapıştır"
 
@@ -1990,15 +2014,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr ""
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -2020,6 +2035,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2139,9 +2163,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2359,9 +2380,15 @@ msgstr "bütün nesneler"
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr "ifade anlatımı"
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2575,6 +2602,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2620,6 +2651,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3071,6 +3105,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3188,10 +3240,44 @@ msgctxt "compass"
 msgid "E"
 msgstr "D"
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3381,6 +3467,12 @@ msgstr "metin"
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3408,13 +3500,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -4035,9 +4127,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr "Boş değerli etiketler"
 
-msgid "Invalid property key"
-msgstr "Geçersiz özellik anahtar"
-
 msgid "Invalid white space in property key"
 msgstr "Özellik anahtarında geçersiz -boşluk- karakteri"
 
@@ -4047,12 +4136,24 @@ msgstr "Özellik anahtarı -boşluk- karakteri ile başlıyor veya bitiyor"
 msgid "Property values contain HTML entity"
 msgstr "Özellik anahtarı HTML bilgisi içeriyor"
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4238,6 +4339,9 @@ msgstr "Yolun sonunda başka yol var"
 msgid "Connected way end node near other way"
 msgstr "Bağlı yolun sonuda başka yol var"
 
+msgid "Unconnected nodes without physical tags"
+msgstr "Sahipsiz ve etiketlenmemiş noktalar"
+
 msgid "Untagged and unconnected nodes"
 msgstr ""
 
@@ -4245,9 +4349,6 @@ msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 "Bu test etiketsiz ve herhangi bir yola dahil olmayan noktaları kontrol eder."
 
-msgid "Unconnected nodes without physical tags"
-msgstr "Sahipsiz ve etiketlenmemiş noktalar"
-
 msgid "No tags"
 msgstr "Etiket yok"
 
@@ -4444,6 +4545,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4657,45 +4759,56 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
-msgstr "Dosya"
+msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
-msgstr "Görünüm"
+msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
-msgstr "Araçlar"
+msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
-msgstr "Daha fazla araç"
+msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
-msgstr "Seçim"
+msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
-msgstr "Ayarlanmış"
+msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
+msgctxt "menu"
+msgid "Help"
+msgstr ""
+
 msgid "Menu: {0}"
 msgstr "Menu: {0}"
 
-msgid "Save and load the current session (list of layers, etc.)"
-msgstr ""
-
 msgid "Edit toolbar"
 msgstr ""
 
@@ -4717,8 +4830,9 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
-msgstr "Ses"
+msgstr ""
 
 msgid "Do not hide toolbar"
 msgstr ""
@@ -4839,58 +4953,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
+msgid " ({0})"
 msgstr ""
 
-msgid "Pos."
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "Role"
-msgstr "Rol"
-
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5318,6 +5390,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr "Rol"
+
 msgid "Primitive"
 msgstr ""
 
@@ -5557,6 +5632,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5703,6 +5781,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5806,7 +5919,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5934,6 +6047,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5943,43 +6061,74 @@ msgstr ""
 msgid "unknown"
 msgstr "bilinmeyen"
 
-msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+msgid "Enter the coordinates for the new node."
 msgstr ""
 
-msgid "Projected coordinates:"
+msgid ""
+"You can separate longitude and latitude with space, comma or semicolon."
 msgstr ""
 
 msgid ""
-"Enter easting and northing (x and y) separated by space, comma or semicolon."
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
 msgstr ""
 
-msgid "Lat/Lon"
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
 msgstr ""
 
-msgid "East/North"
+msgid "Coordinate value can be in one of three formats:"
 msgstr ""
 
-msgid "Please enter a GPS coordinates"
+msgid "<i>degrees</i><tt>°</tt>"
 msgstr ""
 
-msgid "Please enter a Easting and Northing"
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
 msgstr ""
 
-msgid "Toggle visibility of layer: {0}"
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
 msgstr ""
 
-msgid "Open a list of all loaded layers."
-msgstr "Yüklenmiş katmanların listesini aç"
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
+msgstr ""
+
+msgid "Projected coordinates:"
+msgstr ""
+
+msgid ""
+"Enter easting and northing (x and y) separated by space, comma or semicolon."
+msgstr ""
+
+msgid "Lat/Lon"
+msgstr ""
+
+msgid "East/North"
+msgstr ""
+
+msgid "Please enter a GPS coordinates"
+msgstr ""
+
+msgid "Please enter a Easting and Northing"
+msgstr ""
+
+msgid "Toggle visibility of layer: {0}"
+msgstr ""
+
+msgid "Open a list of all loaded layers."
+msgstr "Yüklenmiş katmanların listesini aç"
 
 msgid "Delete the selected layers."
 msgstr ""
@@ -5999,6 +6148,12 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr ""
 
@@ -6128,6 +6283,12 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
+msgid "Mini map"
+msgstr ""
+
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
 msgid "List of notes"
 msgstr ""
 
@@ -6186,10 +6347,15 @@ msgstr "Nesne ID’si :"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "İndirilecek nesnenin ID numarasını giriniz"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6218,6 +6384,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr "İlişkiler: {0}"
 
+msgid "Selection"
+msgstr "Seçim"
+
 msgid "Open a selection list window."
 msgstr "Seçim listesi penceresini aç."
 
@@ -6308,6 +6477,12 @@ msgstr "Onaylama penceresini aç."
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr "Onar"
 
@@ -6902,6 +7077,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6993,14 +7174,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7173,6 +7353,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7710,6 +7896,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8555,6 +8744,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr "Bütün Mozaikleri Yükle"
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr "Çözünürlüğü değiştir"
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr "Mozaik Yükle"
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr "Renkleri Ayarla"
 
@@ -8608,6 +8897,9 @@ msgstr "GPX olarak sakla"
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8628,7 +8920,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8711,193 +9003,92 @@ msgstr "Çözülmemiş çelişkiler var. Çelişkiler kaydedilmeyecektir! Devam?
 msgid "Save OSM file"
 msgstr "OSM dosyası olarak sakla"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
+msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
+msgid "Validation errors"
+msgstr "Onaylama Hataları"
 
-msgid "Auto Zoom"
-msgstr ""
+msgid "No validation errors"
+msgstr "Onaylama hatası yok"
 
-msgid "Auto load tiles"
-msgstr ""
+msgid "Set WMS Bookmark"
+msgstr "WMS İmi Belirle"
 
-msgid "Show Errors"
+msgid ""
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Load Tile"
-msgstr "Mozaik Yükle"
+msgid "Correlate to GPX"
+msgstr "GPX e göre ilişkilendir"
 
-msgid "Show Tile Info"
-msgstr ""
+msgid "Invalid timezone"
+msgstr "Geçersiz zaman dilimi"
 
-msgid "Load All Tiles"
-msgstr "Bütün Mozaikleri Yükle"
+msgid "Invalid offset"
+msgstr "Geçersiz offset"
 
-msgid "Load All Error Tiles"
-msgstr ""
+msgid "Correlate images with GPX track"
+msgstr "imaj ile GPX izini ilişkilendir"
 
-msgid "Increase zoom"
+msgid "Try Again"
 msgstr ""
 
-msgid "Decrease zoom"
+msgid "No images could be matched!"
 msgstr ""
 
-msgid "Snap to tile size"
-msgstr ""
+msgid "GPX Files (*.gpx *.gpx.gz)"
+msgstr "GPX Dosyaları (*.gpx *.gpx.gz)"
 
-msgid "Flush Tile Cache"
-msgstr ""
+msgid "File {0} is loaded yet under the name \"{1}\""
+msgstr "{0} Dosyası \"{1}\" ismi ile yüklendi"
 
-msgid "zoom in to load any tiles"
-msgstr ""
+msgid "Error while parsing {0}"
+msgstr "Ayrıştırma sırasında hata {0}"
 
-msgid "zoom in to load more tiles"
-msgstr ""
+msgid "Could not read \"{0}\""
+msgstr "Okunamadı \"{0}\""
 
-msgid "increase zoom level to see more detail"
+msgid ""
+"<html>Take a photo of your GPS receiver while it displays the "
+"time.<br>Display that photo here.<br>And then, simply capture the time you "
+"read on the photo and select a timezone<hr></html>"
 msgstr ""
+"<html>Zaman hesaplanırken GPS alıcınız fotoğrafını göster.<br>Fotoğrafı "
+"burda göster.<br>Sadece zamanı ekrandan okuyunuz ve zaman dilimini "
+"seçiniz<hr></html>"
 
-msgid "No tiles at this zoom level"
-msgstr ""
+msgid "Photo time (from exif):"
+msgstr "Fotoğraf zamanı (exif den):"
 
-msgid "Current zoom: {0}"
-msgstr ""
+msgid "Gps time (read from the above photo): "
+msgstr "Gps zamanı (fotoğraftan okundu): "
 
-msgid "Display zoom: {0}"
-msgstr ""
+msgid "I am in the timezone of: "
+msgstr "Şu zaman dilimindeyim: "
 
-msgid "Pixel scale: {0}"
-msgstr ""
+msgid "No date"
+msgstr "Tarih Yok"
 
-msgid "Best zoom: {0}"
-msgstr ""
+msgid "Open another photo"
+msgstr "Başka bir fotoğraf aç"
 
-msgid "Cache stats: {0}"
-msgstr ""
+msgid "Synchronize time from a photo of the GPS receiver"
+msgstr "GPS receiver ile Fotoğrafın zamanını eşitle"
 
-msgid "TMS layer ({0}), downloading in zoom {1}"
+msgid ""
+"Error while parsing the date.\n"
+"Please use the requested format"
 msgstr ""
+"Zaman bilgisi ayrıştırılamadı.\n"
+"Lütfen istenen formatı kullanın"
 
-msgid "EPSG:4326 and Mercator projection are supported"
-msgstr ""
+msgid "Invalid date"
+msgstr "Geçersiz Tarih"
 
-msgid "Validation errors"
-msgstr "Onaylama Hataları"
-
-msgid "No validation errors"
-msgstr "Onaylama hatası yok"
-
-msgid "Blank Layer"
-msgstr "Boş Tabaka"
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr "WMS tabaksı ({0}), otomatik indirildi, görüntü seviyesi {1}"
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr "WMS tabakası ({0}), görüntü seviyesi {1}"
-
-msgid "Download visible tiles"
-msgstr "Görünen mozaikleri indir"
-
-msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-"İstenen alan çok büyük. Lütfen biraz yakınlaştır veya çözünürlüğünü değiştir"
-
-msgid "Change resolution"
-msgstr "Çözünürlüğü değiştir"
-
-msgid "Reload erroneous tiles"
-msgstr ""
-
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
-msgstr "WMS İmi Belirle"
-
-msgid "Automatic downloading"
-msgstr "Otomatik indir"
-
-msgid "Zoom to native resolution"
-msgstr ""
-
-msgid "Supported projections are: {0}"
-msgstr ""
-
-msgid "Unsupported WMS file version; found {0}, expected {1}"
-msgstr "Desteklenmeyen WMS versiyonu; bulunan {0}, istenen {1}"
-
-msgid "Save WMS file"
-msgstr ""
-
-msgid "Correlate to GPX"
-msgstr "GPX e göre ilişkilendir"
-
-msgid "GPX Files (*.gpx *.gpx.gz)"
-msgstr "GPX Dosyaları (*.gpx *.gpx.gz)"
-
-msgid "File {0} is loaded yet under the name \"{1}\""
-msgstr "{0} Dosyası \"{1}\" ismi ile yüklendi"
-
-msgid "Error while parsing {0}"
-msgstr "Ayrıştırma sırasında hata {0}"
-
-msgid "Could not read \"{0}\""
-msgstr "Okunamadı \"{0}\""
-
-msgid ""
-"<html>Take a photo of your GPS receiver while it displays the "
-"time.<br>Display that photo here.<br>And then, simply capture the time you "
-"read on the photo and select a timezone<hr></html>"
-msgstr ""
-"<html>Zaman hesaplanırken GPS alıcınız fotoğrafını göster.<br>Fotoğrafı "
-"burda göster.<br>Sadece zamanı ekrandan okuyunuz ve zaman dilimini "
-"seçiniz<hr></html>"
-
-msgid "Photo time (from exif):"
-msgstr "Fotoğraf zamanı (exif den):"
-
-msgid "Gps time (read from the above photo): "
-msgstr "Gps zamanı (fotoğraftan okundu): "
-
-msgid "I am in the timezone of: "
-msgstr "Şu zaman dilimindeyim: "
-
-msgid "No date"
-msgstr "Tarih Yok"
-
-msgid "Open another photo"
-msgstr "Başka bir fotoğraf aç"
-
-msgid "Synchronize time from a photo of the GPS receiver"
-msgstr "GPS receiver ile Fotoğrafın zamanını eşitle"
-
-msgid ""
-"Error while parsing the date.\n"
-"Please use the requested format"
-msgstr ""
-"Zaman bilgisi ayrıştırılamadı.\n"
-"Lütfen istenen formatı kullanın"
-
-msgid "Invalid date"
-msgstr "Geçersiz Tarih"
-
-msgid "<No GPX track loaded yet>"
-msgstr "<GPX izi yüklenmedi>"
+msgid "<No GPX track loaded yet>"
+msgstr "<GPX izi yüklenmedi>"
 
 msgid "GPX track: "
 msgstr "GPX izi: "
@@ -8936,24 +9127,9 @@ msgstr "Zamandilimi: "
 msgid "Offset:"
 msgstr "Offset:"
 
-msgid "Correlate images with GPX track"
-msgstr "imaj ile GPX izini ilişkilendir"
-
 msgid "Correlate"
 msgstr ""
 
-msgid "Invalid timezone"
-msgstr "Geçersiz zaman dilimi"
-
-msgid "Invalid offset"
-msgstr "Geçersiz offset"
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9153,9 +9329,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr "JPEG görüntüsü (*.jpg)"
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9218,9 +9391,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr "Her istek için max. alan:"
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9853,15 +10023,15 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr "Ayarların aktif olamsı için programı açıp/kapatmalısınız."
 
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr ""
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -10661,6 +10831,21 @@ msgstr "Çerçeveyi Görüntüle"
 msgid "No bounding box was found for this layer."
 msgstr ""
 
+msgid "1. Enter getCapabilities URL"
+msgstr ""
+
+msgid "2. Enter name for this layer"
+msgstr ""
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr ""
 
@@ -10679,6 +10864,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10700,6 +10897,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr "Kaydırma İmleri"
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10742,9 +10942,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr "Tabaka"
 
@@ -10769,36 +10966,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11735,6 +11917,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] "{0} Objeyi Değiştir"
@@ -11843,6 +12033,9 @@ msgstr ""
 msgid "Search presets"
 msgstr "Ön tanımlarında ara"
 
+msgid "Presets"
+msgstr "Ayarlanmış"
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12096,6 +12289,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12638,6 +12834,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr "Desteklenmeyen WMS versiyonu; bulunan {0}, istenen {1}"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -13023,6 +13222,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -14024,6 +14236,9 @@ msgstr "Güncelle"
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr "Görünüm"
+
 msgid "Blue:"
 msgstr ""
 
@@ -14063,7 +14278,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -14075,9 +14290,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14186,6 +14398,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14199,12 +14414,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14241,10 +14462,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
+msgstr ""
+
+msgid "Geodatastyrelsen DTK Kort25"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14271,6 +14498,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14295,7 +14525,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14310,6 +14540,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14322,12 +14555,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14348,6 +14575,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14380,10 +14610,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14413,73 +14640,25 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
-msgid "OSMIE Townlands"
-msgstr ""
-
-msgid "OSMIE EDs"
-msgstr ""
-
-msgid "OSMIE Civil Parishes"
-msgstr ""
-
-msgid "OSMIE Baronies"
-msgstr ""
-
-msgid "OSMIE Political"
-msgstr ""
-
-msgid "Ireland EEA GMES Urban Atlas"
-msgstr ""
-
-msgid "Ireland EEA CORINE 2006"
-msgstr ""
-
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
 msgstr ""
 
 msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Clare Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Dublin Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Fermanagh Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Galway Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Kildare Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Leitrim Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Longford Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Offaly Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Sligo Civil Parishes and Baronies"
+msgid "OSMIE Townlands"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "OSMIE EDs"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "OSMIE Civil Parishes"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "OSMIE Baronies"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "OSMIE Political"
 msgstr ""
 
 msgid "Lodi - Italy"
@@ -14515,6 +14694,9 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
+msgid "1.cikla ortofotokarte - Latvia"
+msgstr ""
+
 msgid "ORT10LT (Lithuania)"
 msgstr ""
 
@@ -14530,6 +14712,9 @@ msgstr ""
 msgid "Luxembourg Inspire Roads"
 msgstr ""
 
+msgid "Luxembourg Inspire Water"
+msgstr ""
+
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -14545,9 +14730,15 @@ msgstr ""
 msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgstr ""
+
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
+msgid "Geoportal 2: ISOK hillshade"
+msgstr ""
+
 msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
@@ -14557,15 +14748,27 @@ msgstr ""
 msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
+msgstr ""
+
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
 msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
+msgid "Częstochowa: Budynki (buildings)"
+msgstr ""
+
 msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgstr ""
+
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgstr ""
+
 msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
@@ -14575,9 +14778,45 @@ msgstr ""
 msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Katowice: Budynki (buildings)"
+msgstr ""
+
+msgid "Łódź: Budynki (buildings)"
+msgstr ""
+
 msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Powiat dębicki: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat lubaczowski: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat łańcucki: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat poznański: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgstr ""
+
+msgid "Powiat rzeszowski: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgstr ""
+
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgstr ""
+
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
 msgstr ""
 
@@ -14590,9 +14829,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14722,6 +14970,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14737,7 +15000,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -15063,6 +15326,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15147,11 +15415,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15205,7 +15468,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15220,9 +15483,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15303,6 +15563,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15341,6 +15609,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15416,9 +15687,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15824,6 +16092,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15848,10 +16124,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15868,6 +16140,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15884,11 +16160,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15904,6 +16192,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15916,6 +16208,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15943,6 +16239,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr "Ücret"
 
@@ -16334,6 +16642,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr "tanzim edilmemiş"
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16410,6 +16721,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr "yol (tipi bilinmiyor)"
 
@@ -16947,6 +17261,12 @@ msgstr "hız kamerası"
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17136,8 +17456,13 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
-msgstr "Su"
+msgstr ""
 
 msgid "Drain"
 msgstr "kanalizasyon"
@@ -17189,6 +17514,10 @@ msgstr "Havuz"
 msgid "Covered Reservoir"
 msgstr "Kapalı Sarnıç"
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17330,6 +17659,120 @@ msgstr ""
 msgid "public"
 msgstr ""
 
+msgid "Marine Fuel"
+msgstr ""
+
+msgid "Agip"
+msgstr ""
+
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
 msgid "Pier"
 msgstr "Kemer"
 
@@ -17446,6 +17889,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr "havayolu"
 
@@ -17569,145 +18015,34 @@ msgstr ""
 msgid "Fuel"
 msgstr "Yakıt"
 
-msgid "Agip"
+msgid "With shop"
 msgstr ""
 
-msgid "Aral"
+msgid "convenience"
 msgstr ""
 
-msgid "Avia"
+msgid "kiosk"
 msgstr ""
 
-msgid "BP"
+msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
-msgid "Chevron"
+msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Citgo"
+msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
-msgid "Eni"
+msgid "1/50 mix (mofa/moped)"
 msgstr ""
 
-msgid "Esso"
+msgid "Fuel cards:"
 msgstr ""
 
-msgid "Exxon"
+msgid "DKV"
 msgstr ""
 
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
-msgid "With shop"
-msgstr ""
-
-msgid "convenience"
-msgstr ""
-
-msgid "kiosk"
-msgstr ""
-
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
-msgid "Diesel (Gas To Liquid - ultimate diesel)"
-msgstr ""
-
-msgid "Diesel for Heavy Good Vehicles"
-msgstr ""
-
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
-msgid "1/25 mix (mofa/moped)"
-msgstr ""
-
-msgid "1/50 mix (mofa/moped)"
-msgstr ""
-
-msgid "Fuel cards:"
-msgstr ""
-
-msgid "DKV"
-msgstr ""
-
-msgid "Routex"
+msgid "Routex"
 msgstr ""
 
 msgid "UTA"
@@ -17913,9 +18248,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17934,6 +18266,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18136,6 +18471,12 @@ msgstr "Hotel"
 msgid "Stars"
 msgstr "Stars"
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr "Motel"
 
@@ -18226,6 +18567,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18440,6 +18784,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18927,8 +19274,8 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
-msgstr "Geri Dönüşüm"
+msgid "Recycling Container"
+msgstr ""
 
 msgid "Batteries"
 msgstr "Piller"
@@ -18936,19 +19283,46 @@ msgstr "Piller"
 msgid "Cans"
 msgstr "Çöp Tenekesi"
 
+msgid "Cardboard"
+msgstr ""
+
+msgid "Electrical Appliances"
+msgstr ""
+
 msgid "Glass"
 msgstr "Cam"
 
+msgid "Glass Bottles"
+msgstr ""
+
+msgid "Green Waste"
+msgstr ""
+
 msgid "Paper"
 msgstr "Kağıt"
 
+msgid "Plastic"
+msgstr ""
+
+msgid "Plastic Bottles"
+msgstr ""
+
+msgid "Plastic Packaging"
+msgstr ""
+
 msgid "Scrap Metal"
 msgstr "Hurda Metal"
 
-msgid "container"
+msgid "Shoes"
+msgstr ""
+
+msgid "Small Appliances"
+msgstr ""
+
+msgid "Waste"
 msgstr ""
 
-msgid "centre"
+msgid "Recycling Centre"
 msgstr ""
 
 msgid "Waste Basket/Trash Can"
@@ -19152,6 +19526,9 @@ msgstr "okçuluk"
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr "tırmanma"
 
@@ -19327,12 +19704,18 @@ msgstr "Baseball"
 msgid "Basketball"
 msgstr "Basketbol"
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr "Voleybol"
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr "Golf"
 
@@ -19348,14 +19731,14 @@ msgstr ""
 msgid "Cricket"
 msgstr "Kricket"
 
-msgid "Cricket Nets"
-msgstr "Cricket Nets"
-
 msgid "Croquet"
 msgstr "Kroke"
 
-msgid "Hockey"
-msgstr "Hockey"
+msgid "Field Hockey"
+msgstr ""
+
+msgid "Ice Hockey"
+msgstr ""
 
 msgid "Pelota"
 msgstr "Pelota"
@@ -19378,9 +19761,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19399,9 +19779,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr "İnsan Yapımı"
 
@@ -19474,6 +19851,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20794,9 +21179,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr "Dışortam"
 
@@ -21809,10 +22191,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22239,6 +22621,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22263,6 +22648,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22323,6 +22720,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22413,9 +22813,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22785,6 +23194,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22839,9 +23251,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23585,47 +23994,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
+msgstr ""
+
+msgid "Color Threshold"
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Use HSV based algorithm"
 msgstr ""
 
-msgid "merge nodes"
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23634,10 +24052,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
+msgstr ""
+
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24240,6 +24670,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr "Boş Tabaka"
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25529,194 +25962,500 @@ msgstr "Kıyı çizgisi"
 msgid "land"
 msgstr "yer"
 
-msgid "Maximum number of segments per way"
-msgstr "Her yol için max segment sayısı"
+msgid "Maximum number of segments per way"
+msgstr "Her yol için max segment sayısı"
+
+msgid "Maximum number of nodes in initial trace"
+msgstr "İlk iz için max nokta sayısı"
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr "Max gri seviyesi, su için (0-255)"
+
+msgid "Line simplification accuracy (degrees)"
+msgstr "çizgi basitleştirme doğruluğu (derece)"
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr "Landsat mozaik çözünürlüğü (derece başına pixel)"
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr "Landsat mozaik boyutu (pixel)"
+
+msgid "Shift all traces to east (degrees)"
+msgstr "Bütün izleri doğuya taşı (derece)"
+
+msgid "Shift all traces to north (degrees)"
+msgstr "Bütün izleri kuzaye taşı (derece)"
+
+msgid "Direction to search for land"
+msgstr "Karaya doğru yön araması"
+
+msgid "Tag ways as"
+msgstr "Yolları şu şekilde etiketle"
+
+msgid "WMS Layer"
+msgstr "WMS Tabakası"
+
+msgid "Maximum cache size (MB)"
+msgstr "Max. Hafıza Boyutu (MB)"
+
+msgid "Maximum cache age (days)"
+msgstr "Max. Hafızada tutma (gün)"
+
+msgid "Source text"
+msgstr "Kaynak Metin"
+
+msgid "Lakewalker Plugin Preferences"
+msgstr "Gölyürüyüşü eklentisi tercihleri"
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr "Landsat imajı üzerinde su alanını tespit eden eklenti."
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr "Oluşturulan yol için max. segment sayısı. Varsayılan 250."
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+"Sıkıştırmadan önceki max. nokta sayısı (yolların basitleştirmeden önce). "
+"Varsayılan 50000."
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+"Max gri seviye, su kabulu için (Landsat IR-1 verisi için). 0-255 "
+"arasıVarsayılan:90."
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+"Douglas-Peucker hat basitleştirme hassasiyeti, açı olarak verilir.<br>düşük "
+"değerler çok ve hassas nokta oluşturur. Varsayılan 0.0003."
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+"Landsat mozaik çözünürlüğü, derece başına pixel oalrak ölçülür. "
+"Varsayılan:4000"
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr "Landsat mozaik boyutu. Varsayılan 2000."
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr "Bütün noktaları doğuya hizala (derece). Varsayılan 0."
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr "Bütün noktaları kuzeye hizala (derece). Varsayılan 0."
+
+msgid "Direction to search for land. Default east."
+msgstr "Yer aramak için yön. Varsayılan Doğu."
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+"Yolu su, sahilşeridi,kara veya hiçbişi olarak etiketle. Varsayılan Su."
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr "Hangi WMS tabaksı iz takibi için kullanılsın."
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr "Çalışma hafızası boyutu, byte olarak. Varsayılan 300MB"
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr "Çalışma alanında saklanılan dosyaların max yaşı (gün).Varsayılan 100"
+
+msgid "Data source text. Default is Landsat."
+msgstr "Veri kaynak metni. Varsayılan landsat"
+
+msgid "Downloading image tile..."
+msgstr "Görüntü mozaiği indiriliyor..."
+
+msgid "Could not acquire image"
+msgstr "Görünüt alınamadı"
+
+msgid "Connection Failed"
+msgstr "Bağlantı Hatası"
+
+msgid "Not connected"
+msgstr "Bağlı Değil"
+
+msgid "Connecting"
+msgstr "Bağlanıyor"
+
+msgid "Connected"
+msgstr "Bağlı"
+
+msgid "no name"
+msgstr ""
+
+msgid "Live GPS"
+msgstr "Canlı GPS"
+
+msgid "Show GPS data."
+msgstr "GPS verisini göster."
+
+msgid "Status"
+msgstr "Durum"
+
+msgid "Way Info"
+msgstr "Yol bİlgisis"
+
+msgid "Speed"
+msgstr "Hız"
+
+msgid "Course"
+msgstr "Yön"
+
+msgid "LiveGPS layer"
+msgstr "Canlı GPS tabakası"
+
+msgid "Capture GPS Track"
+msgstr "GPS izini takip et"
+
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgstr ""
+"gpsd server ına bağlan ve şu anki pozsiyonu CanlıGPS tabakasında göster"
+
+msgid "Center Once"
+msgstr "Merkeze koy"
+
+msgid "Center the LiveGPS layer to current position."
+msgstr "Canlı GPS verilerini tabakadfa merkeze koy."
+
+msgid "Auto-Center"
+msgstr "Otomatik-Merkezleme"
+
+msgid "Continuously center the LiveGPS layer to current position."
+msgstr "Devamlı olarak canlı GPS tabakasını görüntünün ortasına getir"
+
+msgid "Open MapDust"
+msgstr ""
+
+msgid "MapDust bug reports"
+msgstr ""
+
+msgid "Activates the MapDust bug reporter plugin"
+msgstr ""
+
+msgid "Missing input data"
+msgstr ""
+
+msgid "Mapillary Images"
+msgstr ""
+
+msgid "Mapillary layer"
+msgstr ""
+
+msgid "Total images:"
+msgstr ""
+
+msgid "images"
+msgstr ""
+
+msgid "Mapillary"
+msgstr ""
+
+msgid "Create Mapillary layer"
+msgstr ""
+
+msgid "Start Mapillary layer"
+msgstr ""
+
+msgid "Download Mapillary images in current view"
+msgstr ""
+
+msgid "Export pictures"
+msgstr ""
+
+msgid "Export Mapillary pictures"
+msgstr ""
+
+msgid "Export images"
+msgstr ""
+
+msgid "Import pictures"
+msgstr ""
+
+msgid "Import local pictures"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer"
+msgstr ""
+
+msgid "Select pictures"
+msgstr ""
+
+msgid "Import pictures into sequence"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer in a sequence"
+msgstr ""
+
+msgid "Join mode"
+msgstr ""
+
+msgid "Join/unjoin pictures"
+msgstr ""
+
+msgid "Join Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures"
+msgstr ""
+
+msgid "Upload Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures."
+msgstr ""
+
+msgid "Walk mode"
+msgstr ""
+
+msgid "Start walk mode"
+msgstr ""
+
+msgid "Zoom to selected image"
+msgstr ""
+
+msgid "Zoom to the currently selected Mapillary image"
+msgstr ""
+
+msgid "Uploaded {0} images"
+msgstr ""
+
+msgid "Approve upload on the website"
+msgstr ""
+
+msgid "View in website"
+msgstr ""
+
+msgid "Copy key"
+msgstr ""
+
+msgid "Copy key tag"
+msgstr ""
+
+msgid "Edit on website"
+msgstr ""
+
+msgid "Export all images"
+msgstr ""
+
+msgid "Export selected sequence"
+msgstr ""
+
+msgid "Export selected images"
+msgstr ""
+
+msgid "Rewrite imported images"
+msgstr ""
+
+msgid "Select a folder"
+msgstr ""
+
+msgid "Explore"
+msgstr ""
+
+msgid "Select a directory"
+msgstr ""
+
+msgid "Speed limit"
+msgstr ""
+
+msgid "Give way"
+msgstr ""
+
+msgid "No entry"
+msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
-msgstr "İlk iz için max nokta sayısı"
+msgid "Intersection danger"
+msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
-msgstr "Max gri seviyesi, su için (0-255)"
+msgid "Mandatory direction (any)"
+msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
-msgstr "çizgi basitleştirme doğruluğu (derece)"
+msgid "No turn"
+msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
-msgstr "Landsat mozaik çözünürlüğü (derece başına pixel)"
+msgid "Uneven road"
+msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
-msgstr "Landsat mozaik boyutu (pixel)"
+msgid "No parking"
+msgstr ""
 
-msgid "Shift all traces to east (degrees)"
-msgstr "Bütün izleri doğuya taşı (derece)"
+msgid "No overtaking"
+msgstr ""
 
-msgid "Shift all traces to north (degrees)"
-msgstr "Bütün izleri kuzaye taşı (derece)"
+msgid "Pedestrian crossing"
+msgstr ""
 
-msgid "Direction to search for land"
-msgstr "Karaya doğru yön araması"
+msgid "Years"
+msgstr ""
 
-msgid "Tag ways as"
-msgstr "Yolları şu şekilde etiketle"
+msgid "Months"
+msgstr ""
 
-msgid "WMS Layer"
-msgstr "WMS Tabakası"
+msgid "Days"
+msgstr ""
 
-msgid "Maximum cache size (MB)"
-msgstr "Max. Hafıza Boyutu (MB)"
+msgid "Mapillary filter"
+msgstr ""
 
-msgid "Maximum cache age (days)"
-msgstr "Max. Hafızada tutma (gün)"
+msgid "Open Mapillary filter dialog"
+msgstr ""
 
-msgid "Source text"
-msgstr "Kaynak Metin"
+msgid "Downloaded images"
+msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
-msgstr "Gölyürüyüşü eklentisi tercihleri"
+msgid "Only images with signs"
+msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
-msgstr "Landsat imajı üzerinde su alanını tespit eden eklenti."
+msgid "Choose signs"
+msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
-msgstr "Oluşturulan yol için max. segment sayısı. Varsayılan 250."
+msgid "Mapillary history"
+msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Open Mapillary history dialog"
 msgstr ""
-"Sıkıştırmadan önceki max. nokta sayısı (yolların basitleştirmeden önce). "
-"Varsayılan 50000."
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Open Mapillary window"
 msgstr ""
-"Max gri seviye, su kabulu için (Landsat IR-1 verisi için). 0-255 "
-"arasıVarsayılan:90."
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Mapillary dialog"
 msgstr ""
-"Douglas-Peucker hat basitleştirme hassasiyeti, açı olarak verilir.<br>düşük "
-"değerler çok ve hassas nokta oluşturur. Varsayılan 0.0003."
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary main dialog"
 msgstr ""
-"Landsat mozaik çözünürlüğü, derece başına pixel oalrak ölçülür. "
-"Varsayılan:4000"
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
-msgstr "Landsat mozaik boyutu. Varsayılan 2000."
+msgid "Next picture"
+msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
-msgstr "Bütün noktaları doğuya hizala (derece). Varsayılan 0."
+msgid "Shows the next picture in the sequence"
+msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
-msgstr "Bütün noktaları kuzeye hizala (derece). Varsayılan 0."
+msgid "Previous picture"
+msgstr ""
 
-msgid "Direction to search for land. Default east."
-msgstr "Yer aramak için yön. Varsayılan Doğu."
+msgid "Shows the previous picture in the sequence"
+msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Jump to red"
 msgstr ""
-"Yolu su, sahilşeridi,kara veya hiçbişi olarak etiketle. Varsayılan Su."
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
-msgstr "Hangi WMS tabaksı iz takibi için kullanılsın."
+msgid "Jumps to the picture at the other side of the red line"
+msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
-msgstr "Çalışma hafızası boyutu, byte olarak. Varsayılan 300MB"
+msgid "Jump to blue"
+msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
-msgstr "Çalışma alanında saklanılan dosyaların max yaşı (gün).Varsayılan 100"
+msgid "Jumps to the picture at the other side of the blue line"
+msgstr ""
 
-msgid "Data source text. Default is Landsat."
-msgstr "Veri kaynak metni. Varsayılan landsat"
+msgid "Stops the walk."
+msgstr ""
 
-msgid "Downloading image tile..."
-msgstr "Görüntü mozaiği indiriliyor..."
+msgid "Play"
+msgstr ""
 
-msgid "Could not acquire image"
-msgstr "Görünüt alınamadı"
+msgid "Continues with the paused walk."
+msgstr ""
 
-msgid "Connection Failed"
-msgstr "Bağlantı Hatası"
+msgid "Pause"
+msgstr ""
 
-msgid "Not connected"
-msgstr "Bağlı Değil"
+msgid "Pauses the walk."
+msgstr ""
 
-msgid "Connecting"
-msgstr "Bağlanıyor"
+msgid "Reverse buttons position when displaying images."
+msgstr ""
 
-msgid "Connected"
-msgstr "Bağlı"
+msgid "Display hour when the picture was taken"
+msgstr ""
 
-msgid "no name"
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Live GPS"
-msgstr "Canlı GPS"
+msgid "Move to picture''s location with next/previous buttons"
+msgstr ""
 
-msgid "Show GPS data."
-msgstr "GPS verisini göster."
+msgid "Download mode: "
+msgstr ""
 
-msgid "Status"
-msgstr "Durum"
+msgid "Upload selected sequence"
+msgstr ""
 
-msgid "Way Info"
-msgstr "Yol bİlgisis"
+msgid "Delete after upload"
+msgstr ""
 
-msgid "Speed"
-msgstr "Hız"
+msgid "Wait for full quality pictures"
+msgstr ""
 
-msgid "Course"
-msgstr "Yön"
+msgid "Follow selected image"
+msgstr ""
 
-msgid "LiveGPS layer"
-msgstr "Canlı GPS tabakası"
+msgid "Go forward"
+msgstr ""
 
-msgid "Capture GPS Track"
-msgstr "GPS izini takip et"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
-"gpsd server ına bağlan ve şu anki pozsiyonu CanlıGPS tabakasında göster"
 
-msgid "Center Once"
-msgstr "Merkeze koy"
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Center the LiveGPS layer to current position."
-msgstr "Canlı GPS verilerini tabakadfa merkeze koy."
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Auto-Center"
-msgstr "Otomatik-Merkezleme"
+msgid "2 images unjoined"
+msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
-msgstr "Devamlı olarak canlı GPS tabakasını görüntünün ortasına getir"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
+msgstr ""
 
-msgid "Open MapDust"
+msgid "Downloading"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid "Select mode"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "No images found"
 msgstr ""
 
-msgid "Export"
+msgid "Finished upload"
+msgstr ""
+
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25737,6 +26476,9 @@ msgstr "Seçim Uzunluğu"
 msgid "Selection Area"
 msgstr "Seçim Alanı"
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr "Açı"
 
@@ -25795,47 +26537,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -26068,6 +26769,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr "Araçlar"
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27287,6 +27991,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27458,6 +28183,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27467,6 +28195,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27647,6 +28378,9 @@ msgstr "{0} için yeni değer"
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27825,6 +28559,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr "SeaMap düzenleyici"
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27834,6 +28601,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr "Canlı veriyi otomatik sakla"
 
@@ -28070,9 +28840,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29553,9 +30320,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/ug.po b/i18n/po/ug.po
index f9d864b..8816c7e 100644
--- a/i18n/po/ug.po
+++ b/i18n/po/ug.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2012-07-14 16:22+0000\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: Uyghur <ug at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2015-05-12 04:59+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 05:04+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: \n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -97,19 +97,16 @@ msgstr ""
 msgid "Updating user interface"
 msgstr ""
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
 msgstr ""
 
 msgid "Warning"
 msgstr ""
 
-msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
+msgid "Ignoring malformed file URL: \"{0}\""
 msgstr ""
 
-msgid "Ignoring malformed URL: \"{0}\""
+msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 
 msgid ""
@@ -444,6 +441,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
 
@@ -1029,6 +1029,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr ""
 
@@ -1945,15 +1969,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr ""
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -1975,6 +1990,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2093,9 +2117,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2309,9 +2330,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr ""
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2525,6 +2552,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2567,6 +2598,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3017,6 +3051,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3134,10 +3186,44 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3327,6 +3413,12 @@ msgstr ""
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3354,13 +3446,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -3976,9 +4068,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -3988,12 +4077,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4174,13 +4275,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4378,6 +4479,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4591,43 +4693,54 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
 msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
 msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
 msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
 msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
-msgid "Menu: {0}"
+msgctxt "menu"
+msgid "Help"
 msgstr ""
 
-msgid "Save and load the current session (list of layers, etc.)"
+msgid "Menu: {0}"
 msgstr ""
 
 msgid "Edit toolbar"
@@ -4651,6 +4764,7 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
 msgstr ""
 
@@ -4773,58 +4887,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr ""
-
-msgid "Pos."
+msgid " ({0})"
 msgstr ""
 
-msgid "Role"
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5253,6 +5325,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr ""
+
 msgid "Primitive"
 msgstr ""
 
@@ -5493,6 +5568,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5639,6 +5717,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5742,7 +5855,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5870,6 +5983,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5879,17 +5997,48 @@ msgstr ""
 msgid "unknown"
 msgstr ""
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -5935,6 +6084,12 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr ""
 
@@ -6064,10 +6219,16 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
-msgid "List of notes"
+msgid "Mini map"
 msgstr ""
 
-msgid "Add comment"
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
+msgid "List of notes"
+msgstr ""
+
+msgid "Add comment"
 msgstr ""
 
 msgid "Comment"
@@ -6122,10 +6283,15 @@ msgstr ""
 msgid "Enter the ID of the object that should be downloaded"
 msgstr ""
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6154,6 +6320,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr ""
 
+msgid "Selection"
+msgstr ""
+
 msgid "Open a selection list window."
 msgstr ""
 
@@ -6244,6 +6413,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -6838,6 +7013,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6929,14 +7110,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7109,6 +7289,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7644,6 +7830,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8489,6 +8678,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr ""
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr ""
 
@@ -8542,6 +8831,9 @@ msgstr ""
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8562,7 +8854,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8645,80 +8937,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr ""
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-
-msgid "Auto Zoom"
-msgstr ""
-
-msgid "Auto load tiles"
-msgstr ""
-
-msgid "Show Errors"
-msgstr ""
-
-msgid "Load Tile"
-msgstr ""
-
-msgid "Show Tile Info"
-msgstr ""
-
-msgid "Load All Tiles"
-msgstr ""
-
-msgid "Load All Error Tiles"
-msgstr ""
-
-msgid "Increase zoom"
-msgstr ""
-
-msgid "Decrease zoom"
-msgstr ""
-
-msgid "Snap to tile size"
-msgstr ""
-
-msgid "Flush Tile Cache"
-msgstr ""
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
@@ -8728,56 +8946,30 @@ msgstr ""
 msgid "No validation errors"
 msgstr ""
 
-msgid "Blank Layer"
-msgstr ""
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "Download visible tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-
-msgid "Change resolution"
-msgstr ""
-
-msgid "Reload erroneous tiles"
-msgstr ""
-
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Automatic downloading"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Zoom to native resolution"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Supported projections are: {0}"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Save WMS file"
+msgid "Try Again"
 msgstr ""
 
-msgid "Correlate to GPX"
+msgid "No images could be matched!"
 msgstr ""
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
@@ -8864,24 +9056,9 @@ msgstr ""
 msgid "Offset:"
 msgstr ""
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
 msgid "Correlate"
 msgstr ""
 
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9075,9 +9252,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr ""
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9140,9 +9314,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9768,15 +9939,15 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr ""
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -10569,13 +10740,28 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
-msgid "imagery fade"
+msgid "1. Enter getCapabilities URL"
 msgstr ""
 
-msgid "Fade Color: "
+msgid "2. Enter name for this layer"
 msgstr ""
 
-msgid "Fade amount: "
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
+msgid "imagery fade"
+msgstr ""
+
+msgid "Fade Color: "
+msgstr ""
+
+msgid "Fade amount: "
 msgstr ""
 
 msgid "Soft"
@@ -10587,6 +10773,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10608,6 +10806,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10650,9 +10851,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr ""
 
@@ -10677,36 +10875,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11642,6 +11825,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] ""
@@ -11750,6 +11941,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12003,6 +12197,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12539,6 +12736,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12924,6 +13124,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13918,6 +14131,9 @@ msgstr ""
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr ""
+
 msgid "Blue:"
 msgstr ""
 
@@ -13957,7 +14173,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -13969,9 +14185,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14080,6 +14293,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14093,12 +14309,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14135,10 +14357,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14165,6 +14393,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14189,7 +14420,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14204,6 +14435,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14216,12 +14450,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14242,6 +14470,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14274,10 +14505,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14307,6 +14535,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14322,154 +14556,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14484,9 +14724,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14616,6 +14865,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14631,7 +14895,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -14957,6 +15221,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15041,11 +15310,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15099,7 +15363,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15114,9 +15378,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15197,6 +15458,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15235,6 +15504,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15310,9 +15582,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15718,6 +15987,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15742,10 +16019,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15762,6 +16035,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15778,11 +16055,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15798,6 +16087,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15810,6 +16103,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15837,6 +16134,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16228,6 +16537,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16304,6 +16616,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr ""
 
@@ -16841,6 +17156,12 @@ msgstr ""
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17030,6 +17351,11 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
 msgstr ""
 
@@ -17083,6 +17409,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17224,13 +17554,127 @@ msgstr ""
 msgid "public"
 msgstr ""
 
-msgid "Pier"
+msgid "Marine Fuel"
 msgstr ""
 
-msgid "Lock Gate"
+msgid "Agip"
 msgstr ""
 
-msgid "Turning Point"
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
+msgid "Pier"
+msgstr ""
+
+msgid "Lock Gate"
+msgstr ""
+
+msgid "Turning Point"
 msgstr ""
 
 msgid "Slipway"
@@ -17340,6 +17784,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -17463,78 +17910,6 @@ msgstr ""
 msgid "Fuel"
 msgstr ""
 
-msgid "Agip"
-msgstr ""
-
-msgid "Aral"
-msgstr ""
-
-msgid "Avia"
-msgstr ""
-
-msgid "BP"
-msgstr ""
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr ""
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
 msgid "With shop"
 msgstr ""
 
@@ -17544,51 +17919,12 @@ msgstr ""
 msgid "kiosk"
 msgstr ""
 
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -17807,9 +18143,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17828,6 +18161,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18030,6 +18366,12 @@ msgstr ""
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18120,6 +18462,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18334,6 +18679,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18821,7 +19169,7 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
@@ -18830,43 +19178,70 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
-msgid "Glass"
+msgid "Cardboard"
 msgstr ""
 
-msgid "Paper"
+msgid "Electrical Appliances"
 msgstr ""
 
-msgid "Scrap Metal"
+msgid "Glass"
 msgstr ""
 
-msgid "container"
+msgid "Glass Bottles"
 msgstr ""
 
-msgid "centre"
+msgid "Green Waste"
 msgstr ""
 
-msgid "Waste Basket/Trash Can"
+msgid "Paper"
 msgstr ""
 
-msgid "Waste Disposal/Dumpster"
+msgid "Plastic"
 msgstr ""
 
-msgid "Sanitary Dump Station"
+msgid "Plastic Bottles"
 msgstr ""
 
-msgid "Suction pumpout"
+msgid "Plastic Packaging"
 msgstr ""
 
-msgid "Gravity drain for hose"
+msgid "Scrap Metal"
 msgstr ""
 
-msgid "Casette or Elsan Disposal"
+msgid "Shoes"
 msgstr ""
 
-msgid "Operation times"
+msgid "Small Appliances"
 msgstr ""
 
-msgid "Backrest"
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
+msgstr ""
+
+msgid "Waste Basket/Trash Can"
+msgstr ""
+
+msgid "Waste Disposal/Dumpster"
+msgstr ""
+
+msgid "Sanitary Dump Station"
+msgstr ""
+
+msgid "Suction pumpout"
+msgstr ""
+
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
+msgstr ""
+
+msgid "Operation times"
+msgstr ""
+
+msgid "Backrest"
 msgstr ""
 
 msgid "Amount of Seats"
@@ -19046,6 +19421,9 @@ msgstr ""
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr ""
 
@@ -19221,12 +19599,18 @@ msgstr ""
 msgid "Basketball"
 msgstr ""
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr ""
 
@@ -19242,13 +19626,13 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
@@ -19272,9 +19656,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19293,9 +19674,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -19368,6 +19746,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20688,9 +21074,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -21703,10 +22086,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22133,6 +22516,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22157,6 +22543,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22217,6 +22615,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22307,9 +22708,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22679,6 +23089,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22733,9 +23146,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23479,47 +23889,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23528,10 +23947,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24134,6 +24565,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr ""
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25231,374 +25665,680 @@ msgid ""
 "highlight tracks"
 msgstr ""
 
-msgid "Delete this"
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
 msgstr ""
 
-msgid "Delete this&older"
+msgid "Connecting"
 msgstr ""
 
-msgid "km/h"
+msgid "Connected"
 msgstr ""
 
-msgid "Track name: "
+msgid "no name"
 msgstr ""
 
-msgid "Update IRS adjustment layer"
+msgid "Live GPS"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid "Show GPS data."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Speed"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Course"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
+msgid "Explore"
 msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25619,6 +26359,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -25677,47 +26420,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -25950,6 +26652,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr ""
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27167,6 +27872,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27338,6 +28064,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27347,6 +28076,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27527,6 +28259,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27705,6 +28440,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27714,6 +28482,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -27950,9 +28721,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29435,9 +30203,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/uk.po b/i18n/po/uk.po
index e5d01d9..48813a2 100644
--- a/i18n/po/uk.po
+++ b/i18n/po/uk.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
-"PO-Revision-Date: 2015-05-10 06:55+0000\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
+"PO-Revision-Date: 2015-10-06 21:01+0000\n"
 "Last-Translator: andygol <Unknown>\n"
 "Language-Team: Ukrainian <uk at li.org>\n"
 "MIME-Version: 1.0\n"
@@ -16,8 +16,8 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
 "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Launchpad-Export-Date: 2015-05-12 05:00+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 05:04+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: uk\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -42,13 +42,13 @@ msgid "{0}: illegal option -- {1}"
 msgstr "{0}: неприпустимий параметр -- {1}"
 
 msgid "{0}: invalid option -- {1}"
-msgstr "{0}: невірний параметр -- {1}"
+msgstr "{0}: неправильний параметр -- {1}"
 
 msgid "{0}: option requires an argument -- {1}"
 msgstr "{0}: параметр потребує наявності аргументу -- {1}"
 
 msgid "Invalid value {0} for parameter ''has_arg''"
-msgstr "Невірне значення {0} для параметру ''has_arg''"
+msgstr "Хибне значення {0} для параметру ''has_arg''"
 
 msgid "Background Terms of Use"
 msgstr "Роз’яснення Умов використання"
@@ -99,22 +99,19 @@ msgstr "Завантаження налаштувань фону"
 msgid "Updating user interface"
 msgstr "Оновлення інтерфейсу користувача"
 
-msgid "{0} completed in {1}"
-msgstr "{0} завершено з {1}"
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "Ігнорування невірної адреси файлу: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "Ігнорування хибної адреси: \"{0}\""
 
 msgid "Warning"
 msgstr "Попередження"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "Ігнорування хибної адреси файлу: \"{0}\""
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 "Параметр \"downloadgps\" не приймає імена файлів або URL-адреси файлів"
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "Ігнорування невірної адреси: \"{0}\""
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -402,8 +399,8 @@ msgid ""
 "The ways can not be combined in their current directions.  Do you want to "
 "reverse some of them?"
 msgstr ""
-"Лінії з їх поточними напрямками неможливо з’єднати. Чи бажаєте ви змінити "
-"напрямок однієї з них на протилежний?"
+"Лінії з їхніми поточними напрямками неможливо з’єднати. Чи бажаєте ви "
+"змінити напрямок однієї з них на протилежний?"
 
 msgid ""
 "Could not combine ways<br>(They could not be merged into a single string of "
@@ -475,6 +472,9 @@ msgstr "Панель діалогів"
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "Приховує панель діалогів, для збільшення площі для редагування"
 
+msgid "Distribute Nodes"
+msgstr "Розподілити точки рівномірно"
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr "Розташувати точки на рівних відстанях вздовж лінії"
 
@@ -836,7 +836,7 @@ msgstr ""
 "сервісом. Будь ласка, спробуйте знов."
 
 msgid "No valid WMS URL or id"
-msgstr "Відсутні вірні WMS URL або ідентифікатор"
+msgstr "Відсутні правильні WMS URL або ідентифікатор"
 
 msgid "Merge layer"
 msgstr "Об’єднати шари"
@@ -858,10 +858,10 @@ msgid ""
 msgstr ""
 "Ви намагаєтесь об’єднати дані між шарами ''{0}'' та ''{1}''.<br /><br />Ці "
 "шари мають різні правила щодо надсилання даних і їх не треба об’єднувати.<br "
-"/>Їх об’єднання призведе до застосування обмежувального правила (надсилання "
-"небажане) до шару ''{1}''.<br /><br /><b>Це небажаний шлях об’єднання цих "
-"даних</b>.<br />Замість цього вам потрібно виконати злиття даних для кожного "
-"окремого об’єкта, використовуючи інструмент ''<i>Об’єднати "
+"/>Їхнє об’єднання призведе до застосування обмежувального правила "
+"(надсилання небажане) до шару ''{1}''.<br /><br /><b>Це небажаний шлях "
+"об’єднання цих даних</b>.<br />Натомість вам потрібно виконати злиття даних "
+"для кожного окремого об’єкта, використовуючи інструмент ''<i>Об’єднати "
 "виділене</i>''.<br /><br />Ви дійсно бажаєте продовжити процес об’єднання "
 "даних?"
 
@@ -1080,8 +1080,8 @@ msgstr ""
 "<h3>Коли виділена одна чи більше ліній, форма змінюється таким чином, що всі "
 "кути становитимуть 90 або 180 градусів.</h3>Ви можете додати дві додаткові "
 "точки. Тоді напрямок буде змінено згідно до цих опорних точок. (Пізніше, ви "
-"можете відмінити переміщення певних точок:<br>Виберіть їх та натисніть "
-"комбінацію клавіш для дій \"Зробити прямі кути / Відмінити\". Типово це "
+"можете скасувати переміщення певних точок:<br>Виберіть їх та натисніть "
+"комбінацію клавіш для дій \"Зробити прямі кути / Скасувати\". Типово це "
 "Shift+Q.)"
 
 msgid "Orthogonalize Shape"
@@ -1137,6 +1137,32 @@ msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 "Будь ласка, виберіть лінії з кутами, близькими до 90 або 180 градусів."
 
+msgid "Download from Overpass API ..."
+msgstr "Завантажити з Overpass API…"
+
+msgid "Download map data from Overpass API server."
+msgstr "Завантажити картографічні дані з сервера Overpass API."
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+"Створює запити Overpass використовуючи помічника зі сторення запитів "
+"Overpass Turbo"
+
+msgid "Build query"
+msgstr "Створити запит"
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr "<html>Помічник Overpass не зміг розібрати цей запит:"
+
+msgid "Parse error"
+msgstr "Помилка розбору"
+
+msgid "Overpass query: "
+msgstr "Overpass запит: "
+
+msgid "Overpass server: "
+msgstr "Сервер Overpass: "
+
 msgid "Paste"
 msgstr "Вставити"
 
@@ -1419,7 +1445,7 @@ msgid "Simplify all selected ways"
 msgstr "Спростити всі виділені лінії"
 
 msgid "Cancel operation"
-msgstr "Відмінити операцію"
+msgstr "Скасувати операцію"
 
 msgid ""
 "The selection contains {0} ways. Are you sure you want to simplify them all?"
@@ -1711,7 +1737,7 @@ msgid ""
 msgstr ""
 "Ви намагаєтесь надіслати дані з шару ''{0}''.<br /><br />Надсилання даних "
 "цього шару <b>настійливо не рекомендується</b>. Якщо бажаєте продовжити,<br "
-"/>вам можливо доведеться відмінити ваші зміни, або зміни інших учасників.<br "
+"/>вам можливо доведеться скасувати ваші зміни, або зміни інших учасників.<br "
 "/><br />Ви дійсно бажаєте продовжити?"
 
 msgid "Ignore this hint and upload anyway"
@@ -1940,7 +1966,7 @@ msgstr "Отримання даних"
 msgid ""
 "Ignoring exception because download has been canceled. Exception was: {0}"
 msgstr ""
-"Ігнорування винятку, тому що завантаження було відмінене. Помилка: {0}"
+"Ігнорування винятку, тому що завантаження було скасоване. Помилка: {0}"
 
 msgid "No data found in this area."
 msgstr "У цьому місці немає даних."
@@ -2012,8 +2038,8 @@ msgid_plural ""
 "server.<br>If you later try to delete or update them the server is likely to "
 "report a conflict."
 msgstr[0] ""
-"У вашому локальному наборі даних {0} об’єкт, який міг бути вилучений на "
-"сервері.<br>Якщо пізніше Ви спробуєте вилучити або оновити його, сервер, "
+"У вашому локальному наборі даних {0} об’єкт, які можуть бути вилучені на "
+"сервері.<br>Якщо пізніше Ви спробуєте вилучити або оновити їх, сервер, "
 "ймовірно, повідомить про конфлікт."
 msgstr[1] ""
 "У вашому локальному наборі даних {0} об’єкти, які можуть бути вилучені на "
@@ -2113,10 +2139,10 @@ msgid "Add node into way"
 msgstr "Додати точку до лінії"
 
 msgid "Connect existing way to node"
-msgstr "Приєднати існуючу лінію до точки"
+msgstr "Приєднати наявну лінію до точки"
 
 msgid "Add a new node to an existing way"
-msgstr "Додати нову точку до існуючої лінії"
+msgstr "Додати нову точку до наявної лінії"
 
 msgid "Add node into way and connect"
 msgstr "Додати точку до лінії та приєднати"
@@ -2145,15 +2171,6 @@ msgstr "Прив’язку до кутів активовано."
 msgid "Finish drawing."
 msgstr "Закінчити креслення."
 
-msgid "FIX"
-msgstr "Фікс."
-
-msgid "draw angle snap"
-msgstr "Креслити з прив’язкою до кута"
-
-msgid "draw angle snap highlight"
-msgstr "підсвічувати кут прив’язки"
-
 msgid "Toggle snapping by {0}"
 msgstr "Переключити прив’язку до {0}"
 
@@ -2175,6 +2192,15 @@ msgstr "0,45,90,…"
 msgid "0,30,45,60,90,..."
 msgstr "0,30,45,60,90,…"
 
+msgid "FIX"
+msgstr "Фікс."
+
+msgid "draw angle snap"
+msgstr "Креслити з прив’язкою до кута"
+
+msgid "draw angle snap highlight"
+msgstr "підсвічувати кут прив’язки"
+
 msgid "Angle snapping"
 msgstr "Прив’язка до кутів"
 
@@ -2246,7 +2272,7 @@ msgid "Click on the way to start improving its shape."
 msgstr "Клацніть по лінії, щоб розпочати покращення її форми."
 
 msgid "Select a way that you want to make more accurate."
-msgstr "Виділіть лінію, яку ви бажаєте зробити більш точною."
+msgstr "Виділіть лінію, яку ви бажаєте зробити точнішою."
 
 msgid ""
 "Click to add a new node. Release Ctrl to move existing nodes or hold Alt to "
@@ -2310,9 +2336,6 @@ msgstr ""
 "ParallelWayAction\n"
 "Виділені лінії повинні формувати простий, без відгалужень, шлях"
 
-msgid "Make parallel way error"
-msgstr "Помилка створення паралельної лінії"
-
 msgid "Drag play head"
 msgstr "Перетягнути повзунок"
 
@@ -2555,9 +2578,15 @@ msgstr "усі об’єкти"
 msgid "Also include incomplete and deleted objects in search."
 msgstr "Також включати в результати пошуку вилучені та неповні об’єкти."
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr "регулярний вираз"
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr "додати на панель інструментів"
 
@@ -2744,14 +2773,14 @@ msgid "objects in current view"
 msgstr "об’єкти у поточному виді"
 
 msgid "objects (and all its way nodes / relation members) in current view"
-msgstr "об’єкти (та всі їх лінії, точки/члени зв’язків) у поточному виді"
+msgstr "об’єкти (та всі їхні лінії, точки/члени зв’язків) у поточному виді"
 
 msgid "objects in downloaded area"
 msgstr "об’єкти у завантаженій ділянці"
 
 msgid "objects (and all its way nodes / relation members) in downloaded area"
 msgstr ""
-"об’єкти (та всі їх лінії, точки/члени зв’язків) у завантаженій ділянці"
+"об’єкти (та всі їхні лінії, точки/члени зв’язків) у завантаженій ділянці"
 
 msgid "No match found for ''{0}''"
 msgstr "Не знайдено збігів для ''{0}''"
@@ -2781,6 +2810,10 @@ msgid "RX"
 msgstr "пошук за виразом"
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr "Всі"
 
@@ -2832,6 +2865,9 @@ msgstr "Очікується діапазон чисел"
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr "Непередбачений елемент. Очікувалось {0}, знайдено {1}"
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr "Непередбачена конструкція: {0}"
 
@@ -2907,9 +2943,9 @@ msgid ""
 "inspect them."
 msgstr ""
 "Наступні попередження є результатом автоматичної перевірки.<br>Спробуйте "
-"виправити їх, але будьте обережними (не зруйнуйте вірні дані). Якщо ви не "
-"впевнені — проігноруйте їх.<br>Коли ви закриєте це вікно, ви зможете знайти "
-"усі ці елементи на панелі результатів перевірки."
+"виправити їх, але будьте обережними (не зруйнуйте правильні дані). Якщо ви "
+"не впевнені — проігноруйте їх.<br>Коли ви закриєте це вікно, ви зможете "
+"знайти усі ці елементи на панелі результатів перевірки."
 
 msgid "Errors"
 msgstr "Помилки"
@@ -3164,7 +3200,7 @@ msgstr "Додати конфлікт для ''{0}''"
 
 msgid ""
 "Cannot undo command ''{0}'' because layer ''{1}'' is not present any more"
-msgstr "Неможливо відмінити команду ''{0}'', оскільки відсутній шар ''{1}''"
+msgstr "Неможливо скасувати команду ''{0}'', оскільки відсутній шар ''{1}''"
 
 msgid "Resolve conflicts in coordinates in {0}"
 msgstr "Розв’язати конфлікт в позиції {0}"
@@ -3289,7 +3325,7 @@ msgid "Tags of "
 msgstr "Теґи "
 
 msgid "Roles in relations referring to"
-msgstr "Ролі в зв’язках, що відносяться до"
+msgstr "Ролі в зв’язках, що належать до"
 
 msgid "Automatic tag correction"
 msgstr "Автоматичне виправлення теґів"
@@ -3347,6 +3383,24 @@ msgstr "Не вдалося створити відсутню теку для к
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr "<html>Не вдалося створити втрачену теку кешу: {0}</html>"
 
+msgid "Unable to delete temporary file {0}"
+msgstr "Не вдається вилучити тимчасовий файл {0}"
+
+msgid "Unable to set file non-readable {0}"
+msgstr "Не вдалося зробити файл недосяжним для читання {0}"
+
+msgid "Unable to set file non-writable {0}"
+msgstr "Не вдалося зробити файл недосяжним для записування {0}"
+
+msgid "Unable to set file non-executable {0}"
+msgstr "Не вдалося зробити файл непризначеним  для виконання {0}"
+
+msgid "Unable to set file readable {0}"
+msgstr "Не вдалося зробити файл досяжним для читання {0}"
+
+msgid "Unable to set file writable {0}"
+msgstr "Не вдалося зробити файл досяжним для запису {0}"
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3484,13 +3538,51 @@ msgctxt "compass"
 msgid "E"
 msgstr "Сх"
 
-msgid "Not in cache"
-msgstr "Не в кеші"
-
 msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr ""
 "Проекція ''{0}'' не знайдена, закладка ''{1}'' не може використовуватись"
 
+msgid "HTTP error {0} when loading tiles"
+msgstr "Помилка HTTP {0} при завантаженні квадратів"
+
+msgid "Error downloading tiles: {0}"
+msgstr "Помилка завантаження квадратів: {0}"
+
+msgid "Could not load image from tile server"
+msgstr "Неможливо звантажити зображення з сервера"
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+"{0} – не є допустимим аргументом WMS. Перевірте URL цього сервера:\n"
+"{1}"
+
+msgid "Select WMTS layer"
+msgstr "Вибрати шар WMTS"
+
+msgid "Layer name"
+msgstr "Назва шару"
+
+msgid "Projection"
+msgstr "Проекція"
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr "Не визначено жодного шару через getCapabilities докменту: {0}"
+
+msgid "No layer selected"
+msgstr "Не виділено жодного шару"
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
+msgstr ""
+"Підтримуються тільки квадратні тайли. Сервер повернув {0}x{1} для "
+"ідентифікатора {2}  TileMatrix"
+
 msgid "ID > 0 expected. Got {0}."
 msgstr "Очікується ідентифікатор >0. Маємо {0}."
 
@@ -3701,6 +3793,12 @@ msgstr "текст"
 msgid "areatext"
 msgstr "текст"
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr "Проекції UTM (''+proj=utm'') потрібен параметр ''+zone=…''."
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr "Очікувалось ціле число в діапазоні 1-60 для парааметру ''+zone=…''"
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr "Параметр повинен починатись із знака ''+'' (зараз ''{0}'')"
 
@@ -3728,15 +3826,15 @@ msgstr "Еліпсоїд ''{0}'' не підтримується."
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr "Комбінація параметрів еліпсоїда не підтримується."
 
+msgid "Unknown datum identifier: ''{0}''"
+msgstr "Невідомий ідентифікатор датуму: ''{0}''"
+
 msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr "Вимагається еліпсоїд (+ellps=* або +a=*, +b=*)"
 
 msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr "Параметр +nadgrids для файлу зсуву решітки ''{0}'' не підтримується."
 
-msgid "Unknown datum identifier: ''{0}''"
-msgstr "Невідомий ідентифікатор датуму: ''{0}''"
-
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
 msgstr "Потрібен датум (+datum=*, +towgs84=* or +nadgrids=*)"
 
@@ -3925,7 +4023,7 @@ msgid "Does not match pattern ''restriction value @ condition''"
 msgstr "Не відповідає шаблону ''обмеження значення @ умова''"
 
 msgid "{0} is not a valid restriction value"
-msgstr "{0} не є вірним значенням обмеження"
+msgstr "{0} не є правильним значенням обмеження"
 
 msgid "Wrong syntax in {0} key"
 msgstr "Має помилковий синтаксис ключа {0}"
@@ -4107,7 +4205,7 @@ msgid "Tag checker (MapCSS based)"
 msgstr "Перевірка теґів (на основі MapCSS)"
 
 msgid "This test checks for errors in tag keys and values."
-msgstr "Цей тест перевіряє теґи та їх значення на наявність помилок."
+msgstr "Цей тест перевіряє теґи та їхні значення на наявність помилок."
 
 msgid "Unable to replace argument {0} in {1}: {2}"
 msgstr "Неможливо замінити аргумент {0} в {1}: {2}"
@@ -4157,7 +4255,7 @@ msgid ""
 "With the currently used mappaint style the style for inner way equals the "
 "multipolygon style"
 msgstr ""
-"Відповідно до стилю, що використовується зараз, стиль внутрішньої лінії "
+"Відповідно до стилю, що тепер використовується, стиль внутрішньої лінії "
 "дорівнює стилю мультиполігону"
 
 msgid "Style for outer way mismatches"
@@ -4242,7 +4340,7 @@ msgid "Invalid/unsupported syntax."
 msgstr "Помилковий/непідтримуваний синтаксис."
 
 msgid "Overlapping ways"
-msgstr "Співпадаючі лінії"
+msgstr "Лінії, що збігаються"
 
 msgid ""
 "This test checks that a connection between two nodes is not used by more "
@@ -4262,10 +4360,10 @@ msgid "Ways share segment with area"
 msgstr "Лінії мають спільні відрізки із полігонами"
 
 msgid "Overlapping highways"
-msgstr "Співпадаючі дороги"
+msgstr "Дороги, що збігаються"
 
 msgid "Overlapping railways"
-msgstr "Співпадаючі залізничні колії"
+msgstr "Залізничні колії, що збігаються"
 
 msgid "Way contains segment twice"
 msgstr "Лінія містить відрізок двічі"
@@ -4308,7 +4406,7 @@ msgstr "Роль члена не відповідає виразу {0} в шаб
 msgid ""
 "Role member type {0} does not match accepted list of {1} in template {2}"
 msgstr ""
-"Роль члена типу {0} не співпадає з прийнятим переліком з {1} в шаблоні {2}"
+"Роль члена типу {0} не сходиться з прийнятим переліком з {1} в шаблоні {2}"
 
 msgid "<empty>"
 msgstr "<порожньо>"
@@ -4351,10 +4449,10 @@ msgid "Adding {0} to ignore tags"
 msgstr "Додавання {0} до ігноруємих теґів"
 
 msgid "Invalid tagchecker line - {0}: {1}"
-msgstr "Невірний рядок перевірки теґів — {0}: {1}"
+msgstr "Неправильний рядок перевірки теґів — {0}: {1}"
 
 msgid "Invalid spellcheck line: {0}"
-msgstr "Невірний рядок перевірки правопису: {0}"
+msgstr "Неправильний рядок перевірки правопису: {0}"
 
 msgid "Adding {0} to spellchecker"
 msgstr "Додавання {0} до перевірки правопису"
@@ -4370,7 +4468,7 @@ msgid "Suspicious tag/value combinations"
 msgstr "Підозріла комбінація теґ/значення"
 
 msgid "Key ''{0}'' invalid."
-msgstr "Невірний ключ ''{0}''."
+msgstr "Неправильний ключ ''{0}''."
 
 msgid "Tag value contains character with code less than 0x20"
 msgstr "Значення теґу містить символ з кодом, меншим за 0x20"
@@ -4387,11 +4485,8 @@ msgstr "Ключ теґу довший, ніж дозволено"
 msgid "Tags with empty values"
 msgstr "Теґи без значень"
 
-msgid "Invalid property key"
-msgstr "Невірні властивості ключа"
-
 msgid "Invalid white space in property key"
-msgstr "Невірний пробіл у властивостях ключа"
+msgstr "Неправильний пробіл у властивостях ключа"
 
 msgid "Property values start or end with white space"
 msgstr "Значення починається чи закінчується пробілом"
@@ -4399,12 +4494,24 @@ msgstr "Значення починається чи закінчується п
 msgid "Property values contain HTML entity"
 msgstr "Значення містять елементи HTML"
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr "Ключ ''{0}'' схожий на ''{1}''."
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr "Ключа ''{0}'' немає в заготовках."
 
 msgid "Presets do not contain property key"
 msgstr "Заготовки не містять такого ключа"
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr "Значення ''{0}'' ключа ''{1}'' схоже на ''{2}''."
+
+msgid "Misspelled property value"
+msgstr "Опечатка в значенні"
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr "Значення ''{0}'' для ключа ''{1}'' немає в заготовках"
 
@@ -4589,6 +4696,9 @@ msgstr "Точка лінії розташована біля іншої лін
 msgid "Connected way end node near other way"
 msgstr "Кінцева точка приєднаної лінії розташована близько до іншої лінії"
 
+msgid "Unconnected nodes without physical tags"
+msgstr "Не з’єднані точки без теґів"
+
 msgid "Untagged and unconnected nodes"
 msgstr "Неприєднані та непозначені точки"
 
@@ -4597,9 +4707,6 @@ msgstr ""
 "Цей тест перевіряє на наявність точок, що не мають теґів, і що не є частиною "
 "ліній."
 
-msgid "Unconnected nodes without physical tags"
-msgstr "Не з’єднані точки без теґів"
-
 msgid "No tags"
 msgstr "Немає теґів"
 
@@ -4654,7 +4761,7 @@ msgid "Way terminates on Area"
 msgstr "Лінія закінчується полігоном"
 
 msgid "Wrongly Ordered Ways"
-msgstr "Невірно впорядковані лінії"
+msgstr "Помилково впорядковані лінії"
 
 msgid "This test checks the direction of water, land and coastline ways."
 msgstr "Цей тест перевіряє напрямок водних та берегових ліній."
@@ -4735,7 +4842,7 @@ msgid "IO Exception"
 msgstr "Виключення вводу-виводу"
 
 msgid "Illegal Data"
-msgstr "Невірні дані"
+msgstr "Помилкові дані"
 
 msgid "Offline mode"
 msgstr "Автономний режим"
@@ -4800,6 +4907,7 @@ msgstr "Натисніть, щоб закрити діалог"
 msgid "Imagery offset"
 msgstr "Положення фону"
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr "Фон"
 
@@ -5050,45 +5158,56 @@ msgstr ""
 "відбулось завдяки відсутності налаштувань проксі.<br>Бажаєте змінити "
 "налаштування проксі-сервера зараз?"
 
+msgctxt "menu"
 msgid "File"
 msgstr "Файл"
 
-msgid "Session"
-msgstr "Сеанс"
+msgctxt "menu"
+msgid "Edit"
+msgstr "Правити"
 
+msgctxt "menu"
 msgid "View"
 msgstr "Вид"
 
+msgctxt "menu"
 msgid "Tools"
 msgstr "Інструменти"
 
+msgctxt "menu"
 msgid "More tools"
 msgstr "Ще інструменти"
 
+msgctxt "menu"
 msgid "Data"
 msgstr "Дані"
 
+msgctxt "menu"
 msgid "Selection"
 msgstr "Виділення"
 
+msgctxt "menu"
 msgid "Presets"
 msgstr "Заготовки"
 
 msgid "More..."
 msgstr "Ще…"
 
+msgctxt "menu"
 msgid "GPS"
 msgstr "GPS"
 
+msgctxt "menu"
 msgid "Windows"
 msgstr "Панелі"
 
+msgctxt "menu"
+msgid "Help"
+msgstr "Довідка"
+
 msgid "Menu: {0}"
 msgstr "Меню: {0}"
 
-msgid "Save and load the current session (list of layers, etc.)"
-msgstr "Збереження та завантаження поточного сеансу (шари й т.і.)"
-
 msgid "Edit toolbar"
 msgstr "Панель інструментів редагування"
 
@@ -5112,6 +5231,7 @@ msgstr "Відкрити вкладку налаштування фону в Н
 msgid "Search menu items"
 msgstr "Пошук пунктів меню"
 
+msgctxt "menu"
 msgid "Audio"
 msgstr "Звук"
 
@@ -5236,68 +5356,17 @@ msgstr "В фоні"
 msgid "Click to run job in background"
 msgstr "Клацніть, щоб перевести роботу у фоновий режим"
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-"Аерофотознімки можуть бути розташовані неправильно. Будь ласка, перевірте їх "
-"зміщення за допомогою GPS-треків!"
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-
-msgid "Details..."
-msgstr "Подробиці…"
-
-msgid "Hide this message and never show it again"
-msgstr "Приховати це повідомлення і більше не показувати"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-"<html>Будь ласка, підтвердіть вилучення <strong>1 об’єкта</strong> з "
-"<strong>1 зв’язку</strong>.</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>Будь ласка, підтвердіть вилучення <strong>1 об’єкта</strong> з "
-"<strong>{0} зв’язків</strong>.</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>Будь ласка, підтвердіть вилучення <strong>{0} об’єктів</strong> із "
-"<strong>{1} зв’язків</strong>.</html>"
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] "Вилучення {0} об’єкта"
-msgstr[1] "Вилучення {0} об’єктів"
-msgstr[2] "Вилучення {0} об’єктів"
-
-msgid "Delete objects"
-msgstr "Вилучити об’єкти"
-
-msgid "To delete"
-msgstr "Вилучити"
-
-msgid "From Relation"
-msgstr "Зі зв’язку"
-
-msgid "Pos."
-msgstr "Поз."
+msgid " ({0})"
+msgstr " ({0})"
 
-msgid "Role"
-msgstr "Роль"
+msgid "{0} completed in {1}"
+msgstr "{0} завершено з {1}"
 
-msgid "Click to close the dialog and remove the object from the relations"
-msgstr "Клацніть, щоб закрити діалог і вилучити об’єкт зі зв’язків"
+msgid "Enlarge"
+msgstr "Збільшити"
 
-msgid "Click to close the dialog and to abort deleting the objects"
-msgstr "Клацніть, щоб закрити діалог і скасувати вилучення об’єктів"
+msgid "Shrink"
+msgstr "Зменшити"
 
 msgid ""
 "<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
@@ -5534,7 +5603,7 @@ msgid "Merging deleted objects failed"
 msgstr "Збій злиття вилучених об’єктів"
 
 msgid "List in role {0} is currently not participating in a compare pair."
-msgstr "Список в ролі {0} в даний момент не бере участь у парі порівняння ."
+msgstr "Список в ролі {0} нині не бере участь у парі порівняння ."
 
 msgid "Unexpected value of parameter ''index''. Got {0}."
 msgstr "Неочікуванне значення параметра \"index\". Поточне значення {0}"
@@ -5765,6 +5834,9 @@ msgstr "Залишити чужий стан \"Вилучений\""
 msgid "Undecide conflict between deleted state"
 msgstr "Не розв’язувати конфлікти між вилученими станами"
 
+msgid "Role"
+msgstr "Роль"
+
 msgid "Primitive"
 msgstr "Елемент"
 
@@ -5826,7 +5898,7 @@ msgid "No conflicts to resolve"
 msgstr "Конфліктів не виявлено"
 
 msgid "Cancel conflict resolution"
-msgstr "Відмінити розв’язання конфліктів"
+msgstr "Скасувати розв’язання конфліктів"
 
 msgid "Apply resolved conflicts"
 msgstr "Застосувати розв’язання конфліктів"
@@ -6057,6 +6129,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr "Застосувати цю роль всім членам зв’язку"
 
+msgid "Pos."
+msgstr "Поз."
+
 msgid "Orig. Way"
 msgstr "Ориг. лінія"
 
@@ -6219,6 +6294,48 @@ msgstr "Розв’язати конфлікти"
 msgid "Resolve conflicts for ''{0}''"
 msgstr "Розв’язати кнофлікти для ''{0}''"
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+"<html>Будь ласка, підтвердіть вилучення <strong>1 об’єкта</strong> з "
+"<strong>1 зв’язку</strong>.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Будь ласка, підтвердіть вилучення <strong>1 об’єкта</strong> з "
+"<strong>{0} зв’язків</strong>.</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>Будь ласка, підтвердіть вилучення <strong>{0} об’єктів</strong> із "
+"<strong>{1} зв’язків</strong>.</html>"
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] "Вилучення {0} об’єкта"
+msgstr[1] "Вилучення {0} об’єктів"
+msgstr[2] "Вилучення {0} об’єктів"
+
+msgid "Delete objects"
+msgstr "Вилучити об’єкти"
+
+msgid "To delete"
+msgstr "Вилучити"
+
+msgid "From Relation"
+msgstr "Зі зв’язку"
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr "Клацніть, щоб закрити діалог і вилучити об’єкт зі зв’язків"
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr "Клацніть, щоб закрити діалог і скасувати вилучення об’єктів"
+
 msgid "Filter objects and hide/disable them."
 msgstr "Відфільтрувати об’єкти і приховати/відключити їх."
 
@@ -6324,8 +6441,8 @@ msgstr "Розширена інформація про об’єкт"
 msgid "map style"
 msgstr "стиль мапи"
 
-msgid " ({0})"
-msgstr " ({0})"
+msgid "edit counts"
+msgstr "кількість правок"
 
 msgid "not in data set"
 msgstr "не в наборі даних"
@@ -6465,6 +6582,12 @@ msgid ""
 msgstr ""
 "Попередження: Два обраних об’єкти ідентичні, але мають різні кеші стилів."
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] "{0} участник останім редагували виділене:"
+msgstr[1] "{0} участники останімі редагували виділене:"
+msgstr[2] "{0} участників останімі редагували виділене:"
+
 msgid "xml"
 msgstr "xml"
 
@@ -6474,28 +6597,60 @@ msgstr "mapcss"
 msgid "unknown"
 msgstr "Невідомо"
 
+msgid "Enter the coordinates for the new node."
+msgstr "Введіть координати нової точки"
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
 msgstr ""
-"Введіть координати нової точки.<br/>Ви можете відділити довготу та широту "
-"пробілом, комою, чи крапкою з комою.<br/>Використовуйте додатні числа або "
-"літери N та E для позначення Північної широти та Східної довготи.<br/>Для "
-"Південної широти та Західної довготи — від’ємні числа або символи S та "
-"W.<br/>Координати можуть бути вказані в одному із трьох "
-"форматів:<ul><li><i>градуси</i><tt>°</tt></li><li><i>градуси</i><tt>°"
-"</tt> <i>хвилини</i><tt>'</tt></li><li><i>градуси</i><tt>°</tt> "
-"<i>хвилини</i><tt>'</tt> <i>секунди</i><tt>&quot</tt></li></ul>Символи "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> є необов’язковими.<br/><br/>Кілька прикладів:<ul>{0}</ul>"
+"Довготу і широту можна розділити пробілом, комою або крапкою з комою."
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+"Використовуйте позитивні числові значення або символи N, E для північної "
+"широти та східної довготи."
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+"Для південної широти або східної довготи можна використовувати негативні "
+"значення або символи S, W."
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr "Координати можуть бути в одному з трьох форматів:"
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr "<i>градуси</i><tt>°</tt>"
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr "<i>градуси</i><tt>°</tt> <i>хвилини</i><tt>'</tt>"
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+"<i>градуси</i><tt>°</tt> <i>хвилини</i><tt>'</tt> "
+"<i>секунди</i><tt>&quot</tt>"
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+"Символи <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> є не обов’язковими."
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+"Також можна використовувати синтвксис <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+
+msgid "Some examples:"
+msgstr "Приклади:"
 
 msgid "Projected coordinates:"
 msgstr "Прогнозовані координати:"
@@ -6542,6 +6697,12 @@ msgstr "Непрозорість"
 msgid "Adjust opacity of the layer."
 msgstr "Налаштування рівня непрозрості шару."
 
+msgid "Gamma"
+msgstr "Контрастність"
+
+msgid "Adjust gamma value of the layer."
+msgstr "Підлаштовує коефіцієнт контрастності шару"
+
 msgid "Activate"
 msgstr "Активувати"
 
@@ -6671,6 +6832,12 @@ msgstr "Налаштування стилю"
 msgid "Customize the style"
 msgstr "Налаштувати стиль"
 
+msgid "Mini map"
+msgstr "Міні мапа"
+
+msgid "Displays a small map of the current edit location"
+msgstr "Прказує поточну ділянку на маленькій мапі"
+
 msgid "List of notes"
 msgstr "Прелік нотаток"
 
@@ -6729,21 +6896,26 @@ msgstr "Ідентифікатор об’єкту:"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "Введіть ідентифікатор об’єкту, який потрібно завантажити з сервера"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+"ID об’єктів повинні бути розділені комами або пробілами, наприклад: {0}"
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
 msgstr ""
-"ID об’єктів можуть бути розділені комою чи пробілом.<br/>Наприклад: "
-"{0}<br/>У змішаному вигляді зазначайте об’єкти подібно до: {1}<br/>({2} "
-"використовується для <i>точок</i>, {3} для <i>ліній</i>, та {4} для "
-"<i>зв’язків</i>)"
+"У комбінованому режимі, зазначайте об’єкти так: {0}<br/>({1} означає "
+"<i>точку (node)</i>, {2} – <i>лінію (way)</i>, а {3} – <i>зв’язок "
+"(relation)</i>)"
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
+msgstr "Діапазони ID об’єктів вказуються через дефіс, наприклад: {0}"
 
 msgid ""
 "Invalid ID list specified\n"
 "Cannot continue."
 msgstr ""
-"Зазначено невірний ID переліку\n"
+"Зазначено помилковий ID переліку\n"
 "Продовження неможливе."
 
 msgid "Relations"
@@ -6767,7 +6939,10 @@ msgstr "Зв’язки: {0}/{1}"
 msgid "Relations: {0}"
 msgstr "Зв’язки: {0}"
 
-msgid "Open a selection list window."
+msgid "Selection"
+msgstr "Виділення"
+
+msgid "Open a selection list window."
 msgstr "Відкрити вікно зі списком виділених об’єктів."
 
 msgid "Current Selection"
@@ -6862,6 +7037,12 @@ msgstr "Відкрити вікно перевірки"
 msgid "Validation results"
 msgstr "Результат перевірки"
 
+msgid "Lookup"
+msgstr "Пошук"
+
+msgid "Looks up the selected primitives in the error list."
+msgstr "Знайти виділені примітиви в списку помилок."
+
 msgid "Fix"
 msgstr "Виправити"
 
@@ -7222,7 +7403,7 @@ msgid "Please enter a non-empty user name"
 msgstr "Будь ласка, введіть непорожнє ім’я учасника"
 
 msgid "Invalid user name"
-msgstr "Невірне ім’я учасника"
+msgstr "Неправильне ім’я учасника"
 
 msgid "Date: "
 msgstr "Дата: "
@@ -7249,8 +7430,8 @@ msgid ""
 "Cannot build changeset query with time based restrictions. Input is not "
 "valid."
 msgstr ""
-"Неможливо виконати отримання набору змін на основі обмежень за часом. "
-"Введене невірне значення."
+"Неможливо створити запит на отримання набору змін на основі обмежень за "
+"часом. Введене невірне значення."
 
 msgid ""
 "<html>Please enter valid date/time values to restrict<br>the query to a "
@@ -7260,14 +7441,14 @@ msgstr ""
 "обмежити<br>запит зазначеними часовими межами.</html>"
 
 msgid "Invalid date/time values"
-msgstr "Невірні значення дати/часу"
+msgstr "Помилкові значення дати/часу"
 
 msgid ""
 "Cannot restrict the changeset query to a specific bounding box. The input is "
 "invalid."
 msgstr ""
 "Неможливо обмежити запит на отримання набору змін в межах габаритного "
-"прямокутника. Введене невірне значення."
+"прямокутника. Введене помилкове значення."
 
 msgid ""
 "<html>Please enter valid longitude/latitude values to restrict<br>the "
@@ -7278,13 +7459,13 @@ msgstr ""
 "прямокутника.</html>"
 
 msgid "Invalid bounding box"
-msgstr "Невірний габаритний прямокутник"
+msgstr "Помилковий габаритний прямокутник"
 
 msgid ""
 "The current value is not a valid user ID. Please enter an integer value > 0"
 msgstr ""
-"Поточне значення не є вірним ідентифікатором учасника. Будь ласка, введіть "
-"ціле значення > 0"
+"Поточне значення не є правильним ідентифікатором учасника. Будь ласка, "
+"введіть ціле значення > 0"
 
 msgid "Please enter an integer value > 0"
 msgstr "Будь ласка, введіть ціле число > 0"
@@ -7293,8 +7474,8 @@ msgid ""
 "<html>The  current value is not a valid user name.<br>Please enter an non-"
 "empty user name.</html>"
 msgstr ""
-"<html>Поточне значення не є вірним ідентифікатором учасника.<br>Будь ласка, "
-"введіть непорожнє ім’я учасника.</html>"
+"<html>Поточне значення не є правильним ідентифікатором учасника.<br>Будь "
+"ласка, введіть непорожнє ім’я учасника.</html>"
 
 msgid "Please enter an non-empty user name"
 msgstr "Будь ласка, введіть непорожнє ім’я учасника"
@@ -7310,7 +7491,7 @@ msgid ""
 "Please enter a valid time in the usual format for your locale.<br>Example: "
 "{0}<br>Example: {1}<br>Example: {2}<br>Example: {3}<br>"
 msgstr ""
-"Будь ласка, введіть час у вірному форматі для вашої мови.<br>Приклад: "
+"Будь ласка, введіть час у правильному форматі для вашої мови.<br>Приклад: "
 "{0}<br>Приклад: {1}<br>Приклад: {2}<br>Приклад: {3}<br>"
 
 msgid "Download my changesets only"
@@ -7352,7 +7533,7 @@ msgid ""
 "currently no map view active.</em></html>"
 msgstr ""
 "<html>Завантажити набори змін для поточного виду мапи.<br><em>Відключено. На "
-"даний момент немає активного виду мапи.</em></html>"
+"цей момент немає активного виду мапи.</em></html>"
 
 msgid "<html>Download changesets in the current map view</html>"
 msgstr "<html>Завантажити набори змін для поточного виду мапи</html>"
@@ -7449,12 +7630,12 @@ msgid "{0} different"
 msgid_plural "{0} different"
 msgstr[0] "{0} різний"
 msgstr[1] "{0} різних"
-msgstr[2] "{0} різний"
+msgstr[2] "{0} різних"
 
 msgid ", {0} unset"
 msgid_plural ", {0} unset"
 msgstr[0] ", {0} не встановлений"
-msgstr[1] ", {0} е встановлено"
+msgstr[1] ", {0} не встановлено"
 msgstr[2] ", {0} не встановлено"
 
 msgid "Select objects for which to change tags."
@@ -7517,6 +7698,12 @@ msgstr "Перейти до OSM-Вікі, щоб отримати довідку
 msgid "Launch browser with wiki help for selected object"
 msgstr "Запустити оглядач для огляду довідки по виділеному об’єкту"
 
+msgid "Go to Taginfo"
+msgstr "Перейти на Taginfo"
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr "Відкрити оглядач зі статистикою з Taginfo для виділеного об’єкта"
+
 msgid "Paste Value"
 msgstr "Вставити значення"
 
@@ -7614,16 +7801,14 @@ msgstr "Встановити кількість нещодавно додани
 msgid "Remember last used tags after a restart"
 msgstr "Запам’ятати останні теґи після перезавантаження"
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
-msgstr "<code>Ctrl-1</code> – застосувати першу пропозицію"
+msgid "to apply first suggestion"
+msgstr "для застосування першої пропозиції"
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
-msgstr "<code>Shift-Enter</code> – додати без закриття діалогу"
+msgid "to add without closing the dialog"
+msgstr "для додавання без закриття діалогу"
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
-msgstr ""
-"<code>Shift-Ctrl-1</code> – додати першу пропозицію без закриття діалогу"
+msgid "to add first suggestion without closing the dialog"
+msgstr "для додавання першої пропозиції без закриття діалогу"
 
 msgid "Please enter the number of recently added tags to display"
 msgstr "Введіть, будь ласка, кількість нещодавно доданих теґів для показу"
@@ -7821,6 +8006,12 @@ msgstr "Впорядкувати членів зв’язку"
 msgid "Relation Editor: Sort"
 msgstr "Редактор зв’язків: Сортування"
 
+msgid "Sort below"
+msgstr "Впорядкувати нижче"
+
+msgid "Sort the selected relation members and all members below"
+msgstr "Впорядкувати виділених учасників зв’язків і всіх розташованих нижче"
+
 msgid "Reverse the order of the relation members"
 msgstr "Змінити порядок членів зв’язку на протилежний"
 
@@ -8052,8 +8243,7 @@ msgid "Bookmarks"
 msgstr "Закладки"
 
 msgid "<html>There is currently no download area selected.</html>"
-msgstr ""
-"<html>На даний момент не обрана ділянка для завантаження з сервера.</html>"
+msgstr "<html>Нині не обрана ділянка для завантаження з сервера.</html>"
 
 msgid ""
 "<html><strong>Current download area</strong> (minlon, minlat, maxlon, "
@@ -8071,8 +8261,8 @@ msgstr "Додати закладку для завантаження вибра
 msgid ""
 "Currently, there is no download area selected. Please select an area first."
 msgstr ""
-"В даний час немає жодної вибраної ділянки для завантаження. Будь ласка, "
-"виберіть ділянку."
+"Тепер немає жодної вибраної ділянки для завантаження. Будь ласка, виберіть "
+"ділянку."
 
 msgid "Please enter a name for the bookmarked download area."
 msgstr "Будь ласка, введіть ім’я закладки для ділянки."
@@ -8155,7 +8345,7 @@ msgid ""
 "<html>Autostart ''Download from OSM'' dialog every time JOSM is "
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
-"<html>Відкривати вікно ''Завантажити з OSM'' кожного разу під час запуску "
+"<html>Відкривати вікно ''Завантажити з OSM'' щоразу під час запуску "
 "JOSM.<br>Ви можете відкрити його вручну через меню Файл або з панелі "
 "інструментів.</html>"
 
@@ -8257,7 +8447,7 @@ msgid "Name server returned invalid data. Please try again."
 msgstr "Сервер імен повернув помилкові дані. Спробуйте знов."
 
 msgid "Bad response"
-msgstr "Невірна відповідь"
+msgstr "Хибна відповідь"
 
 msgid "Type"
 msgstr "Тип"
@@ -8412,6 +8602,9 @@ msgstr "Завантаження історії для зв’язку {0}"
 msgid "Node {0}"
 msgstr "Точка {0}"
 
+msgid "The nodes of this way are in reverse order"
+msgstr "Точки цієї лінії знаходяться у зворотньому порядку"
+
 msgid "Zoom to node"
 msgstr "Наблизитись до точки"
 
@@ -8440,7 +8633,7 @@ msgid "Changeset source"
 msgstr "Джерело даних набору змін"
 
 msgid "Imagery used"
-msgstr "Фон, що вкиористовувася"
+msgstr "Фон, що використовувався"
 
 msgid "<b>Source</b>:"
 msgstr "<b>Джерело</b>:"
@@ -8638,10 +8831,10 @@ msgstr ""
 "надсилання"
 
 msgid "Upload to an existing changeset"
-msgstr "Надіслати у існуючий набір змін"
+msgstr "Надіслати у наявний набір змін"
 
 msgid "Upload data to an already existing and open changeset"
-msgstr "Додати дані у вже існуючий та відкритий набір змін"
+msgstr "Додати дані у вже наявний та відкритий набір змін"
 
 msgid "Select an open changeset"
 msgstr "Виберіть відкритий набір змін"
@@ -8726,7 +8919,7 @@ msgid ""
 "Authenticating at the host ''{0}'' failed. Please enter a valid username and "
 "a valid password."
 msgstr ""
-"Автентифікація на ''{0}'' не вдалась. Будь ласка, введіть вірні ім’я "
+"Автентифікація на ''{0}'' не вдалась. Будь ласка, введіть правильні ім’я "
 "користувача та пароль."
 
 msgid "Please enter the user name for authenticating at your proxy server"
@@ -8776,7 +8969,7 @@ msgid ""
 "Skipping download."
 msgstr ""
 "Неможливо завантажити файл ''{0}''. Посилання для його завантаження ''{1}'' "
-"не є вірним URL. Пропускаємо завантаження."
+"не є правильним URL. Пропускаємо завантаження."
 
 msgid ""
 "Could not retrieve the list of your open changesets because<br>JOSM does not "
@@ -9118,13 +9311,13 @@ msgstr ""
 "Повернутись до попереднього вікна, щоб ввести більш докладний коментар"
 
 msgid "Cancel and return to the previous dialog"
-msgstr "Відмінити та повернутись до попереднього вікна"
+msgstr "Скасувати та повернутись до попереднього вікна"
 
 msgid "Please enter a valid chunk size first"
-msgstr "Будь ласка, спочатку введіть вірний розмір порції"
+msgstr "Будь ласка, спочатку введіть правильний розмір порції"
 
 msgid "Illegal chunk size"
-msgstr "Невірний розмір порції"
+msgstr "Помилковий розмір порції"
 
 msgid "{0}={1}"
 msgstr "{0}={1}"
@@ -9148,7 +9341,7 @@ msgid "Empty metadata"
 msgstr "Відсутні метадані"
 
 msgid "Cancel the upload and resume editing"
-msgstr "Відмінити надсилання даних та повернутись до редагування"
+msgstr "Скасувати надсилання даних та повернутись до редагування"
 
 msgid "Tags of changeset {0}"
 msgstr "Теґи набору змін {0}"
@@ -9312,7 +9505,7 @@ msgstr[2] "Надсилання {0} об’єктів…"
 msgid ""
 "Ignoring caught exception because upload is canceled. Exception is: {0}"
 msgstr ""
-"Ігнорування виявленого виключення, оскільки надсилання на сервер скасовано. "
+"Ігнорування виявленого винятку, оскільки надсилання на сервер скасовано. "
 "Помилка: {0}"
 
 msgid "Upload successful!"
@@ -9336,7 +9529,7 @@ msgid "Select objects to upload"
 msgstr "Виділити об’єкти для надсилання"
 
 msgid "Cancel uploading"
-msgstr "Відмінити надсилання"
+msgstr "Скасувати надсилання"
 
 msgid "Unexpected value for key ''{0}'' in preferences, got ''{1}''"
 msgstr "Неочікуване значення ''{1}'' для ключа ''{0}'' у налаштуваннях"
@@ -9391,7 +9584,7 @@ msgstr[1] "({0} запити)"
 msgstr[2] "({0} запитів)"
 
 msgid "Illegal chunk size <= 0. Please enter an integer > 1"
-msgstr "Невірний розмір порції <= 0. Будь ласка, введіть ціле число > 1"
+msgstr "Помилковий розмір порції <= 0. Будь ласка, введіть ціле число > 1"
 
 msgid "Chunk size {0} exceeds max. changeset size {1} for server ''{2}''"
 msgstr ""
@@ -9430,6 +9623,108 @@ msgstr[0] "Вилучити {0} об’єкт:"
 msgstr[1] "Вилучити {0} об’єкти:"
 msgstr[2] "Вилучити {0} об’єктів:"
 
+msgid "Show Tile Info"
+msgstr "Показати дані квадрата"
+
+msgid "Tile Info"
+msgstr "Інформація про квадрат"
+
+msgid "Metadata "
+msgstr "Метадані "
+
+msgid "Auto Zoom"
+msgstr "Автомасштабування"
+
+msgid "Auto load tiles"
+msgstr "Автозавантаження квадратів"
+
+msgid "Load All Tiles"
+msgstr "Завантажити всі квадрати мапи"
+
+msgid "Load All Error Tiles"
+msgstr "Завантажити усі помилкові квадрати"
+
+msgid "Zoom to native resolution"
+msgstr "Масштабувати до природної розподільчої здатності"
+
+msgid "Change resolution"
+msgstr "Змінити розподільчу здатність"
+
+msgid "Failed to create tile source"
+msgstr "Збій створення джерела квадратів мапи"
+
+msgid "Show Errors"
+msgstr "Показати помилки"
+
+msgid "Load Tile"
+msgstr "Завантажити квадрат мапи"
+
+msgid "Increase zoom"
+msgstr "Збільшити масштаб"
+
+msgid "Decrease zoom"
+msgstr "Зменшити масштаб"
+
+msgid "Snap to tile size"
+msgstr "Прив’язатися до розміру квадрата"
+
+msgid "Flush Tile Cache"
+msgstr "Очистити кеш квадратів мапи"
+
+msgid "zoom in to load any tiles"
+msgstr "наблизитись для завантаження будь-яких квадратів мапи"
+
+msgid "zoom in to load more tiles"
+msgstr "наблизитись для завантаження більшої кількості квадратів мапи"
+
+msgid "increase zoom level to see more detail"
+msgstr "збільшити масштаб, що побачити більше детелей"
+
+msgid "No tiles at this zoom level"
+msgstr "На цьому рівні масштабування квадрати мапи відсутні"
+
+msgid "Current zoom: {0}"
+msgstr "Поточний масштаб: {0}"
+
+msgid "Display zoom: {0}"
+msgstr "Масштаб показу: {0}"
+
+msgid "Pixel scale: {0}"
+msgstr "Масштаб пікселів {0}"
+
+msgid "Best zoom: {0}"
+msgstr "Найкращий масштаб: {0}"
+
+msgid "Cache stats: {0}"
+msgstr "Статистика кеша: {0}"
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr "{0} ({1}), автоматичне завантаження в масштабі {2}"
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr "{0} ({1}), завантаження в масштабі {2}"
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr "Завантажено {0}/{1} квадратів"
+
+msgid "Save WMS file"
+msgstr "Зберегти файл WMS"
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+"Аерофотознімки можуть бути розташовані неправильно. Будь ласка, перевірте "
+"їхнє зміщення за допомогою GPS-треків!"
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+
+msgid "Details..."
+msgstr "Подробиці…"
+
+msgid "Hide this message and never show it again"
+msgstr "Приховати це повідомлення і більше не показувати"
+
 msgid "Customize Color"
 msgstr "Налаштувати колір"
 
@@ -9487,6 +9782,9 @@ msgstr "Зберегти файл GPX"
 msgid "Imagery fade"
 msgstr "Прозорість зображення"
 
+msgid "Unsupported imagery type: {0}"
+msgstr "Непідтримуваний тип фонового зображення: {0}"
+
 msgid "ERROR"
 msgstr "ПОМИЛКА"
 
@@ -9507,11 +9805,11 @@ msgstr "Підтримуються усі проекції"
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 "Шар {0} не підтримує нову проекцію {1}.\n"
-"{2}\n"
+"Підтримуються проекції: {2}\n"
 "Змініть проекцію або вилучіть шар."
 
 msgid "Save Layer"
@@ -9596,85 +9894,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr "Зберегти файл OSM"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-"{0} — недійсний параметр TMS. Будь ласка, перевірте цей URL сервера:\n"
-"{1}"
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-"Шар TMS не підтримує проекцію {0}.\n"
-"{1}\n"
-"Змініть проекцію або вилучіть шар."
-
-msgid "Auto Zoom"
-msgstr "Автомасштабування"
-
-msgid "Auto load tiles"
-msgstr "Автозавантаження квадратів"
-
-msgid "Show Errors"
-msgstr "Показати помилки"
-
-msgid "Load Tile"
-msgstr "Завантажити квадрат мапи"
-
-msgid "Show Tile Info"
-msgstr "Показати дані квадрата"
-
-msgid "Load All Tiles"
-msgstr "Завантажити всі квадрати мапи"
-
-msgid "Load All Error Tiles"
-msgstr "Завантажити усі помилкові квадрати"
-
-msgid "Increase zoom"
-msgstr "Збільшити масштаб"
-
-msgid "Decrease zoom"
-msgstr "Зменшити масштаб"
-
-msgid "Snap to tile size"
-msgstr "Прив’язатися до розміру квадрата"
-
-msgid "Flush Tile Cache"
-msgstr "Очистити кеш квадратів мапи"
-
-msgid "zoom in to load any tiles"
-msgstr "наблизитись для завантаження будь-яких квадратів мапи"
-
-msgid "zoom in to load more tiles"
-msgstr "наблизитись для завантаження більшої кількості квадратів мапи"
-
-msgid "increase zoom level to see more detail"
-msgstr "збільшити масштаб, що побачити більше детелей"
-
-msgid "No tiles at this zoom level"
-msgstr "На цьому рівні масштабування квадрати мапи відсутні"
-
-msgid "Current zoom: {0}"
-msgstr "Поточний масштаб: {0}"
-
-msgid "Display zoom: {0}"
-msgstr "Масштаб показу: {0}"
-
-msgid "Pixel scale: {0}"
-msgstr "Масштаб пікселів {0}"
-
-msgid "Best zoom: {0}"
-msgstr "Найкращий масштаб: {0}"
-
-msgid "Cache stats: {0}"
-msgstr "Статистика кеша: {0}"
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr "Шар TMS ({0}), завантажується в масштабі {1}"
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr "Підтримуються проекції EPSG:4326 та Mercator"
 
@@ -9684,59 +9903,33 @@ msgstr "Помилки"
 msgid "No validation errors"
 msgstr "Перевірка не виявила помилок"
 
-msgid "Blank Layer"
-msgstr "Порожній шар"
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr "Завантажено {0}/{1} квадратів"
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr "Автоматичне завантаження шару WMS ({0}), в масштабі {1}"
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr "Завантаження шару WMS ({0}), в масштабі {1}"
-
-msgid "Download visible tiles"
-msgstr "Завантажити видимі квадрати мапи"
+msgid "Set WMS Bookmark"
+msgstr "Встановити закладку WMS"
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
-"Запрошена ділянка занадто велика. Будь ласка, трохи наблизьтесь, або змініть "
-"розподільчу здатність"
-
-msgid "Change resolution"
-msgstr "Змінити розподільчу здатність"
-
-msgid "Reload erroneous tiles"
-msgstr "Перезавантажити помилкові квадрати"
+"JOSM буде використовувати EPSG:4326 для надсилання запитів до сервера, \r\n"
+"але результати можуть відрізнятись в залежності в WMS-сервера"
 
-msgid "Alpha channel"
-msgstr "Альфа-канал"
-
-msgid "Automatically change resolution"
-msgstr "Автоматично змінювати розподільчу здатність"
-
-msgid "Set WMS Bookmark"
-msgstr "Встановити закладку WMS"
-
-msgid "Automatic downloading"
-msgstr "Автоматичне завантаження"
+msgid "Correlate to GPX"
+msgstr "Відносяться до GPX"
 
-msgid "Zoom to native resolution"
-msgstr "Масштабувати до природної розподільчої здатності"
+msgid "Invalid timezone"
+msgstr "Некоректний часовий пояс"
 
-msgid "Supported projections are: {0}"
-msgstr "Підтримувані проекції: {0}"
+msgid "Invalid offset"
+msgstr "Хибне зміщення"
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
-msgstr "Непідтримувана версія файлу WMS; знайдено {0}, очікувалось {1}"
+msgid "Correlate images with GPX track"
+msgstr "Зіставити зображення з GPX треком"
 
-msgid "Save WMS file"
-msgstr "Зберегти файл WMS"
+msgid "Try Again"
+msgstr "Спробувати знову"
 
-msgid "Correlate to GPX"
-msgstr "Відносяться до GPX"
+msgid "No images could be matched!"
+msgstr "Немає відповідних зображень!"
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
 msgstr "Файли GPX (*.gpx *.gpx.gz)"
@@ -9785,7 +9978,7 @@ msgstr ""
 "Будь ласка, використовуйте формат запиту"
 
 msgid "Invalid date"
-msgstr "Невірна дата"
+msgstr "Некоректна дата"
 
 msgid "<No GPX track loaded yet>"
 msgstr "<GPX-трек ще не завантажено>"
@@ -9829,24 +10022,9 @@ msgstr "Часовий пояс: "
 msgid "Offset:"
 msgstr "Зміщення:"
 
-msgid "Correlate images with GPX track"
-msgstr "Зіставити зображення з GPX треком"
-
 msgid "Correlate"
 msgstr "Узгодити"
 
-msgid "Invalid timezone"
-msgstr "Невірний часовий пояс"
-
-msgid "Invalid offset"
-msgstr "Невірне зміщення"
-
-msgid "Try Again"
-msgstr "Спробувати знову"
-
-msgid "No images could be matched!"
-msgstr "Немає відповідних зображень!"
-
 msgid "No gpx selected"
 msgstr "gpx не виділено"
 
@@ -10065,9 +10243,6 @@ msgstr ""
 "\n"
 "GPS час: {0}"
 
-msgid "JPEG images (*.jpg)"
-msgstr "Зображення JPEG (*.jpg)"
-
 msgid "Show thumbnails"
 msgstr "Показувати мініатюри"
 
@@ -10137,9 +10312,6 @@ msgstr "метри"
 msgid "Maximum area per request:"
 msgstr "Максимальна ділянка для одного запиту:"
 
-msgid "sq km"
-msgstr "кв.км"
-
 msgid "Download near:"
 msgstr "Завантажити біля:"
 
@@ -10156,7 +10328,7 @@ msgid "Click to download"
 msgstr "Натисніть для завантаження"
 
 msgid "Click to cancel"
-msgstr "Натисніть для відміни"
+msgstr "Натисніть для скасування"
 
 msgid "Download from OSM along this track"
 msgstr "Завантажити з OSM дані уздовж цього треку"
@@ -10361,11 +10533,12 @@ msgstr ""
 "часом. Замість цього використовуйте ''{2}''."
 
 msgid "Illegal dash pattern, values must be positive"
-msgstr "Невірний шаблон переривчастої лінії, значення має бути позитивним"
+msgstr ""
+"Неправильний шаблон переривчастої лінії, значення має бути позитивним"
 
 msgid "Illegal dash pattern, at least one value must be > 0"
 msgstr ""
-"Невірний шаблон переривчастої лінії, принаймні одне значення має бути > 0"
+"Неправильний шаблон переривчастої лінії, принаймні одне значення має бути > 0"
 
 msgid ""
 "Failed to parse Mappaint styles from ''{0}''. Error was: [{1}:{2}] {3}"
@@ -10410,7 +10583,7 @@ msgid "Click to reset the OAuth settings to default values"
 msgstr "Натисніть, щоб скинути налаштування OAuth на типові"
 
 msgid "Click to abort resetting to the OAuth default values"
-msgstr "Натисніть, щоб відмінити скидання налаштування OAuth на типові"
+msgstr "Натисніть, щоб скасувати скидання налаштування OAuth на типові"
 
 msgid ""
 "<html>JOSM is about to reset the OAuth settings to default values.<br>The "
@@ -10554,9 +10727,9 @@ msgid ""
 "advanced setting and try again.</html>"
 msgstr ""
 "<html>Не вдалося автоматично отримати мітку доступу OAuth <br>з сервера OSM, "
-"тому що JOSM не зміг побудувати<br>вірне URL-посилання для входу з URL OAuth "
-"Authorize Endpoint ''{0}''.<br><br>Будь ласка, перевірте ваші розширені "
-"налаштування і спробуйте ще раз.</html>"
+"тому що JOSM не зміг згенерувати<br>правильне URL-посилання для входу з URL "
+"OAuth Authorize Endpoint ''{0}''.<br><br>Будь ласка, перевірте ваші "
+"розширені налаштування і спробуйте ще раз.</html>"
 
 msgid ""
 "<html>The automatic process for retrieving an OAuth Access Token<br>from the "
@@ -10882,15 +11055,15 @@ msgstr "Закрити діалог налаштувань і скасувати
 msgid "Save the preferences and close the dialog"
 msgstr "Зберегти налаштування і закрити діалог"
 
-msgid "Download plugins"
-msgstr "Завантажити втулки"
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr "Потрібно перезапустити JOSM, щоб зміни набрали сили."
 
 msgid "Would you like to restart now?"
 msgstr "Ви бажаєте перезапустити програму зараз?"
 
+msgid "Download plugins"
+msgstr "Завантажити втулки"
+
 msgid "Icon paths:"
 msgstr "Шлях до значків:"
 
@@ -11071,7 +11244,7 @@ msgid ""
 "by pressing \"Cancel\" in preferences dialog <br/>To activate some changes "
 "JOSM restart may be needed.</html>"
 msgstr ""
-"<html>Це файл із результатами імпорту. <br/>Ви можете відмінити зміни "
+"<html>Це файл із результатами імпорту. <br/>Ви можете скасувати зміни "
 "налаштувань, натиснувши на кнопку «Скасувати» у вікні налаштувань.<br/>Щоб "
 "задіяти деякі зміни, можливо, потрібно перезапустити JOSM.</html>"
 
@@ -11472,7 +11645,7 @@ msgid "Track date"
 msgstr "Дата треку"
 
 msgid "Single Color (can be customized for named layers)"
-msgstr "Одним кольором (може бути визначено для іменованих шарів)"
+msgstr "Одним кольором (може налаштовуватись для іменованих шарів)"
 
 msgid "Car"
 msgstr "Автомобіль"
@@ -11562,7 +11735,7 @@ msgstr "Товщина ліній GPX"
 msgid ""
 "Apply antialiasing to the GPX lines resulting in a smoother appearance."
 msgstr ""
-"Застосовування згладжування до ліній GPX призведе до їх більш плавного "
+"Застосовування згладжування до ліній GPX призведе до їхнього плавнішого "
 "вигляду."
 
 msgid ""
@@ -11586,7 +11759,7 @@ msgstr ""
 "Ваш пристрій захоплення для цього повинен реєструвати таку інформацію."
 
 msgid "Colors points and track segments by its timestamp."
-msgstr "Розфарбовувати точки та відрізки треку за їх часом."
+msgstr "Розфарбовувати точки та відрізки треку за їхнім часом."
 
 msgid "Allows to tune the track coloring for different average speeds."
 msgstr ""
@@ -11749,6 +11922,21 @@ msgstr "Показати межі"
 msgid "No bounding box was found for this layer."
 msgstr "Для цього шару не знайдено габаритного прямокутника."
 
+msgid "1. Enter getCapabilities URL"
+msgstr "1. Введіть getCapabilities URL"
+
+msgid "2. Enter name for this layer"
+msgstr "2. Введіть назву для цього шару"
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr "Кеш {0}, загальний розмір кешу: {1} байт"
+
+msgid "Cache name"
+msgstr "Назва кешу"
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr "затемнювання фону"
 
@@ -11767,6 +11955,18 @@ msgstr "Сильно"
 msgid "Sharpen (requires layer re-add): "
 msgstr "Підсилення (потрібно пере-додавання шару): "
 
+msgid "Tile cache directory: "
+msgstr "Тека кешу квадратів мапи: "
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr "Максимальний обсяг дискового простору (на кожний шар фону) у Мб: "
+
+msgid "Maximum number of objects in memory cache: "
+msgstr "Максимальна кількість об’єктів в кеші: "
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr "Параметри фону"
 
@@ -11788,6 +11988,9 @@ msgstr "Постачальники фонів"
 msgid "Offset bookmarks"
 msgstr "Закладки положень"
 
+msgid "Cache contents"
+msgstr "Кеш містить"
+
 msgid "Imagery Background: Default"
 msgstr "Фонове зображення: Типове"
 
@@ -11830,9 +12033,6 @@ msgstr "Посилання на ліцензію EULA не доступне: {0}
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr "Спотворене посилання на ліцензію EULA: {0}"
 
-msgid "Projection"
-msgstr "Проекція"
-
 msgid "Layer"
 msgstr "Рівень"
 
@@ -11857,18 +12057,12 @@ msgstr "Макс. масштаб "
 msgid "Add to slippymap chooser: "
 msgstr "Додавати до вибору у slippymap: "
 
-msgid "Tile cache directory: "
-msgstr "Тека кешу квадратів мапи: "
-
 msgid "Maximum concurrent downloads: "
 msgstr "Максимальна кількість одночасних завантажень: "
 
 msgid "Maximum concurrent downloads per host: "
 msgstr "Максимальна кількість одночасних завантажень хосту: "
 
-msgid "Maximum elements in disk cache: "
-msgstr "Максимальна кількість елементів у дісковому кеші "
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
@@ -11877,20 +12071,11 @@ msgstr ""
 "тож ви не можете ним скористатись. \n"
 "Це повідомлення не буде показане знов."
 
-msgid "Downloader:"
-msgstr "Завантажувач:"
-
 msgid "Simultaneous connections:"
 msgstr "Одночасних підключень:"
 
-msgid "Overlap tiles"
-msgstr "Зміщення квадратів мапи"
-
-msgid "% of east:"
-msgstr "% на схід:"
-
-msgid "% of north:"
-msgstr "% на північ:"
+msgid "Tile size:"
+msgstr "Розмір квадрату:"
 
 msgid "Auto save enabled"
 msgstr "Автозбереження"
@@ -11925,7 +12110,7 @@ msgid ""
 "the file name and saves it in the same folder.)</i>"
 msgstr ""
 "<i>(JOSM може залишати резервні копії, зберігаючи шари з даними. Він додає "
-"до їх назви ''~'' та зберігає у ту ж саму теку.)</i>"
+"до їхньої назви ''~'' та зберігає у ту ж саму теку.)</i>"
 
 msgid "Notification at each save"
 msgstr "Повідомлення при кожному збереженні"
@@ -12090,7 +12275,7 @@ msgstr ""
 
 msgid "Warning: illegal format of entry in preset list ''{0}''. Got ''{1}''"
 msgstr ""
-"Попередження: невірний формат записів у переліку ''{0}''. Маємо ''{1}''"
+"Попередження: помилковий формат записів у переліку ''{0}''. Маємо ''{1}''"
 
 msgid "Internal Preset"
 msgstr "Внутрішній шаблон"
@@ -12231,10 +12416,10 @@ msgid "By Code (EPSG)"
 msgstr "За кодом (EPSG)"
 
 msgid "Invalid projection configuration: {0}"
-msgstr "Невірне налаштування проекції: {0}"
+msgstr "Неправильні налаштування проекції: {0}"
 
 msgid "Projection configuration is valid."
-msgstr "Налаштування проекції вірне."
+msgstr "Налаштування проекції правильне."
 
 msgid "Validate"
 msgstr "Перевірити"
@@ -12480,11 +12665,11 @@ msgid ""
 "<html>''{0}'' is not a valid OSM API URL.<br>Please check the spelling and "
 "validate again.</html>"
 msgstr ""
-"<html>''{0}'' є невірним URL OSM API.<br>Будь ласка, перевірте правильність "
-"написання і спробуйте ще раз.</html>"
+"<html>''{0}'' є помилковим URL OSM API.<br>Будь ласка, перевірте "
+"правильність написання і спробуйте ще раз.</html>"
 
 msgid "Invalid API URL"
-msgstr "Невірний URL API"
+msgstr "Помилковий URL API"
 
 msgid ""
 "<html>Failed to build URL ''{0}'' for validating the OSM API "
@@ -12624,17 +12809,17 @@ msgid "Test the API URL"
 msgstr "Перевірити URL API"
 
 msgid "The API URL is valid."
-msgstr "URL API вірне."
+msgstr "URL API правильне."
 
 msgid "Validation failed. The API URL seems to be invalid."
-msgstr "Перевірку не пройдено. URL API виглядає невірним."
+msgstr "Перевірку не пройдено. URL API виглядає помилковим."
 
 msgid "OSM API URL must not be empty. Please enter the OSM API URL."
 msgstr ""
 "URL OSM API не повинно бути порожнім. Будь ласка, введіть URL OSM API."
 
 msgid "The current value is not a valid URL"
-msgstr "Поточне значення — невірне URL"
+msgstr "Поточне значення — помилкове URL"
 
 msgid "Please enter the OSM API URL."
 msgstr "Будь ласка, введіть URL OSM API."
@@ -12685,7 +12870,7 @@ msgid ""
 "not configured to retrieve them. Resetting preferences to ''No proxy''"
 msgstr ""
 "JOSM налаштовано на використання проксі-сервера із системними "
-"налаштуваннями, але віртуальна машина Java не налаштована на їх отримання. "
+"налаштуваннями, але віртуальна машина Java не налаштована на їхнє отримання. "
 "Скидання налаштувань на ''Без проксі''"
 
 msgid "Connection Settings"
@@ -12911,6 +13096,14 @@ msgstr "Застосувати заготовку"
 msgid "New relation"
 msgstr "Новий зв’язок"
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] "Правка {0} об’єкта"
@@ -13030,6 +13223,9 @@ msgstr "Показати вікно із заготовками пошуку"
 msgid "Search presets"
 msgstr "Пошук заготовок"
 
+msgid "Presets"
+msgstr "Заготовки"
+
 msgid "Search for objects by preset"
 msgstr "Пошук об’єктів по заготовках"
 
@@ -13245,10 +13441,10 @@ msgstr ""
 "правок. Отримано ''{0}''"
 
 msgid "Illegal longitude value for parameter ''{0}'', got {1}"
-msgstr "Невірне значення довготи для параметру ''{0}'', отримано {1}"
+msgstr "Помилкове значення довготи для параметру ''{0}'', отримано {1}"
 
 msgid "Illegal latitude value for parameter ''{0}'', got {1}"
-msgstr "Невірне значення широти для параметру ''{0}'', отримано {1}"
+msgstr "Помилкове значення широти для параметру ''{0}'', отримано {1}"
 
 msgid "Unexpected value for ''{0}'' in changeset query url, got {1}"
 msgstr "Неочікуване значення для ''{0}'' в URL запиті набору змін, маємо {1}"
@@ -13328,6 +13524,9 @@ msgstr "<html>Неможливо прочитати файли.<br>Помилк
 msgid "GeoJSON Files"
 msgstr "Файли GeoJSON"
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr "Шар ''{0}'' не підтримується"
 
@@ -13918,6 +14117,9 @@ msgstr "Файли сервера OSM стиснені zip"
 msgid "WMS Files (*.wms)"
 msgstr "Файли WMS (*.wms)"
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr "Непідтримувана версія файлу WMS; знайдено {0}, очікувалось {1}"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -14083,7 +14285,7 @@ msgid ""
 "the API."
 msgstr ""
 "Через Дистанційне керування був отриманий запит на завантаження об’єктів (за "
-"їх ID) через API."
+"їхнім ID) через API."
 
 msgid "Remote Control has been asked to open a local file."
 msgstr ""
@@ -14362,6 +14564,21 @@ msgstr[1] "Втулок {0} потребує {1} втулки, які не зн
 msgstr[2] ""
 "Втулок {0} потребує {1} втулків, які не знайдено. Відсутні втулки:"
 
+msgid "Download and restart"
+msgstr "Завантажити та перезапустити"
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] "Клацніть, щоб завантажити відсутній втулок і перезапустити JOSM"
+msgstr[1] "Клацніть, щоб завантажити відсутні втулки і перезапустити JOSM"
+msgstr[2] "Клацніть, щоб завантажити відсутні втулки і перезапустити JOSM"
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] "Клацніть, щоб продовжити без цього втулка"
+msgstr[1] "Клацніть, щоб продовжити без цих втулків"
+msgstr[2] "Клацніть, щоб продовжити без цих втулків"
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -14529,10 +14746,10 @@ msgid "Invalid URL ''{0}'' in plugin {1}"
 msgstr "Помилкове посилання ''{0}'' у втулку {1}"
 
 msgid "Invalid plugin description ''{0}'' in plugin {1}"
-msgstr "Невірний опис ''{0}'' втулка {1}"
+msgstr "Помилковий опис ''{0}'' втулка {1}"
 
 msgid "Invalid plugin main version ''{0}'' in plugin {1}"
-msgstr "Невірна основна версія втулка ''{0}'' у {1}"
+msgstr "Помилкова основна версія втулка ''{0}'' у {1}"
 
 msgid "Missing plugin main version in plugin {0}"
 msgstr "Відсутня основна версія втулка у {0}"
@@ -15123,7 +15340,7 @@ msgid "URL does not contain {0}/{1}/{2}"
 msgstr "URL не містить {0}/{1}/{2}"
 
 msgid "URL does not contain valid {0}"
-msgstr "URL не містить вірний {0}"
+msgstr "URL не містить правильний {0}"
 
 msgid "reserved"
 msgstr "зарезервовано"
@@ -15598,6 +15815,9 @@ msgstr "Оновити"
 msgid "Update directory listing."
 msgstr "Оновити теку."
 
+msgid "View"
+msgstr "Вид"
+
 msgid "Blue:"
 msgstr "Синій:"
 
@@ -15638,8 +15858,8 @@ msgstr "MapQuest Open Aerial"
 msgid "OpenStreetMap GPS Traces"
 msgstr "GPS-треки OpenStreetMap"
 
-msgid "OpenStreetMap (Mapnik)"
-msgstr "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
+msgstr "OpenStreetMap (Стандартний шар)"
 
 msgid "skobbler"
 msgstr "skobbler"
@@ -15650,9 +15870,6 @@ msgstr "OpenStreetMap (Мапнік Ч&Б)"
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr "OpenStreetMap (Мапнік, без підписів)"
 
-msgid "skobbler heatmap"
-msgstr "skobbler теплова мапа"
-
 msgid "OpenCycleMap"
 msgstr "OpenCycleMap"
 
@@ -15761,6 +15978,9 @@ msgstr "Відень: Ортофото (аерофотознімки)"
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr "VoGIS: Повнокольорове зображення 2012 (12см)"
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr "VoGIS: Кольорова мапа Зима 2015 (20см)"
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr "VoGIS: Плани"
 
@@ -15774,12 +15994,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr "AGIV (Фландрія) аерофотознімки (покривають Брюссель) (2013)"
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr "SPW(allonie) цифрове зображення PICC"
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr "SPW (allonie) 2012 аерофотознімки"
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr "SPW (allonie) 2009 аерофотознімки"
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr "IBGE Мапа міських районів"
 
@@ -15816,12 +16042,18 @@ msgstr "Чехія RUIAN ділянки"
 msgid "Czech pLPIS"
 msgstr "Чехія pLPIS"
 
-msgid "Fugro (Denmark)"
-msgstr "Fugro (Данія)"
-
 msgid "Geodatastyrelsen (Denmark)"
 msgstr "Агенція геоданих (Данія)"
 
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr "Геодані агентство DTK Kort25"
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr "Агентство геоданих Skyggekort 1.6 м"
+
+msgid "Geodatastyrelsen Skærmkort"
+msgstr "Геодані агентство Skærmkort"
+
 msgid "Stevns (Denmark)"
 msgstr "Стевнс (Данія)"
 
@@ -15846,6 +16078,9 @@ msgstr "Естонія ліси (Maaamet)"
 msgid "BANO"
 msgstr "BANO"
 
+msgid "BD Carthage"
+msgstr "BD Carthage"
+
 msgid "Bordeaux - 2012"
 msgstr "Бордо - 2012"
 
@@ -15870,8 +16105,8 @@ msgstr "Géobretagne - Морбіан 2010"
 msgid "Géolittoral - Orthophotos 2000"
 msgstr "Géolittoral - Ортофотознімки 2000"
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
-msgstr "Géolittoral V2 - Ортофотознімки 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
+msgstr "Géolittoral V2 - Ортофото 2011-2014"
 
 msgid "Géolittoral - Sentiers"
 msgstr "Géolittoral - Sentiers"
@@ -15885,6 +16120,9 @@ msgstr "Атлантична Луара - Ортофото 2012 - 20 см"
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr "SIG L-R - Лангедок-Руссильон 2012 - 20 см"
 
+msgid "Route 500™©®"
+msgstr "Route 500™©®"
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr "Тулуза - Ортофотоплан 2013"
 
@@ -15897,12 +16135,6 @@ msgstr "Тулуза - ортофотоплан 2007"
 msgid "Tours - Orthophotos 2013"
 msgstr "Тур - ортофото 2013"
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr "Тур - ортофото 2008-2010"
-
-msgid "Tours - Orthophotos 2008"
-msgstr "Тур - ортофото 2008"
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -15923,6 +16155,9 @@ msgstr "Гамбург (20 см)"
 msgid "Hamburg (DK5)"
 msgstr "Гамбург (DK5)"
 
+msgid "Bavaria (80 cm)"
+msgstr "Баварія (80 см)"
+
 msgid "Bavaria (2 m)"
 msgstr "Баварія (2 м)"
 
@@ -15956,11 +16191,8 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr "Maps4BW (LGL-BW, www.lgl-bw.de)"
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr "NRW-Atlas: автоматизований кадастровий план (векторний)"
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
-msgstr "NRW-Atlas: автоматизований кадастровий план (растровий)"
+msgid "NRW-Atlas: ALKIS"
+msgstr "NRW-Atlas: ALKIS"
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
 msgstr "NRW-Atlas: цифрова базова мапа 1:5000"
@@ -15990,6 +16222,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr "Ірландія, вид. Bartholomew, чвертьдюймова 1940"
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr "Волості на баронства Ірландії – Пам’ятний атлас"
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr "Пам’ятний атлас Ірландії (1901) L.J. Richards"
+
 msgid "OSMIE Townlands"
 msgstr "OSMIE Таунленди"
 
@@ -16005,60 +16243,6 @@ msgstr "OSMIE Баронства"
 msgid "OSMIE Political"
 msgstr "OSMIE Політична мапа"
 
-msgid "Ireland EEA GMES Urban Atlas"
-msgstr "Ірландія EEA GMES Urban Atlas"
-
-msgid "Ireland EEA CORINE 2006"
-msgstr "Ірландія EEA CORINE 2006"
-
-msgid "Antrim Civil Parishes and Baronies"
-msgstr "Волості та баронства Антрім"
-
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
-msgstr "Пам’ятний атлас Ірландії (1901) L.J. Richards"
-
-msgid "Carlow Civil Parishes and Baronies"
-msgstr "Волості та баронства Карлоу"
-
-msgid "Clare Civil Parishes and Baronies"
-msgstr "Волості та баронства Клер"
-
-msgid "Dublin Civil Parishes and Baronies"
-msgstr "Волості та баронства Дублін"
-
-msgid "Fermanagh Civil Parishes and Baronies"
-msgstr "Волості та баронства Фермана"
-
-msgid "Galway Civil Parishes and Baronies"
-msgstr "Волості та баронства Голуей"
-
-msgid "Kildare Civil Parishes and Baronies"
-msgstr "Волості та баронства Кілдер"
-
-msgid "Leitrim Civil Parishes and Baronies"
-msgstr "Волості та баронства Літрім"
-
-msgid "Longford Civil Parishes and Baronies"
-msgstr "Волості та баронства Лонгфорд"
-
-msgid "Offaly Civil Parishes and Baronies"
-msgstr "Волості та баронства Оффалі"
-
-msgid "Sligo Civil Parishes and Baronies"
-msgstr "Волості та баронства Слайго"
-
-msgid "Tyrone Civil Parishes and Baronies"
-msgstr "Волості та баронства Тайрон"
-
-msgid "Westmeath Civil Parishes and Baronies"
-msgstr "Волості та баронства Західний Міт"
-
-msgid "Wexford Civil Parishes and Baronies"
-msgstr "Волості та баронства Вексфорд"
-
-msgid "Wicklow Civil Parishes and Baronies"
-msgstr "Волості та баронства Уіклоу"
-
 msgid "Lodi - Italy"
 msgstr "Лоді - Італія"
 
@@ -16092,6 +16276,9 @@ msgstr "50см ортофото - Латвія"
 msgid "20cm ortho - Latvia - Coastline"
 msgstr "20см ортофото - Латвія - Берегова лінія"
 
+msgid "1.cikla ortofotokarte - Latvia"
+msgstr "Цикл 1 ортофотоплан - Латвія"
+
 msgid "ORT10LT (Lithuania)"
 msgstr "ORT10LT (Литва)"
 
@@ -16107,6 +16294,9 @@ msgstr "Люксембург Inspire Залізниця"
 msgid "Luxembourg Inspire Roads"
 msgstr "Люксембург Inspire Дороги"
 
+msgid "Luxembourg Inspire Water"
+msgstr "Люксембург Inspire Води"
+
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr "Дельта Нігера, жовт. 2012 Landsat"
 
@@ -16122,9 +16312,15 @@ msgstr "Пангасінан/Булакан (Філіппіни HiRes)"
 msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr "Geoportal 2: ортофото"
 
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgstr "Geoportal 2: Ортофотомапа (супутник) WMTS"
+
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr "Geoportal 2: PRNG (топоніми)"
 
+msgid "Geoportal 2: ISOK hillshade"
+msgstr "Geoportal 2: ISOK рельєф"
+
 msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr "Бедзін: Ортофото 2013 (аерофото)"
 
@@ -16134,15 +16330,27 @@ msgstr "Бендзин: будівлі"
 msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr "Битом: ортофото 2012 (аерофото)"
 
+msgid "Bytom: Fotoplan 2014 (aerial image)"
+msgstr "Битом: Фотоплан 2014 (супутник)"
+
 msgid "Bytom: Budynki (buildings)"
 msgstr "Битом: будівлі"
 
 msgid "Chorzów: Budynki (buildings)"
 msgstr "Хожув: будівлі"
 
+msgid "Częstochowa: Budynki (buildings)"
+msgstr "Ченстохова: Будинки"
+
 msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr "Ченстохова: ортофото 2011 (аерофото)"
 
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgstr "Ченстохова: Ортофотомапа 2013 (супутник)"
+
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgstr "Ченстохова: Ортофотомапа 2014 (супутник)"
+
 msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr "Глівіце: ортофото 2013 (аерофото)"
 
@@ -16152,9 +16360,45 @@ msgstr "Глівіце: будинки"
 msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr "Катовіце: ортофото (аерофото)"
 
+msgid "Katowice: Budynki (buildings)"
+msgstr "Катовіце: Будинки"
+
+msgid "Łódź: Budynki (buildings)"
+msgstr "Лодзь: будівлі"
+
 msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr "Лодзь: ортофото (аерофото)"
 
+msgid "Powiat dębicki: Budynki (buildings)"
+msgstr "Дембіцький повіт: будівлі"
+
+msgid "Powiat lubaczowski: Budynki (buildings)"
+msgstr "Любачівський повіт: Будинки"
+
+msgid "Powiat łańcucki: Budynki (buildings)"
+msgstr "Ланьцутський повіт: Будинки"
+
+msgid "Powiat poznański: Budynki (buildings)"
+msgstr "Познанський повіт: будівлі"
+
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgstr "Познанський повіт: Ортофотомапа (супутник)"
+
+msgid "Powiat rzeszowski: Budynki (buildings)"
+msgstr "Ряшівський повіт: Будинки"
+
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgstr "Ряшівський повіт: Ортофотомапа"
+
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr "Стальововольський повіт: Будинки"
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr "Перемишль: Будинки"
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgstr "Перемишль: Ортофотомапа"
+
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
 msgstr "Руда-Шльонська: ортофото (аерофото)"
 
@@ -16167,9 +16411,18 @@ msgstr "Жешув: будинки"
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr "Семяновіце-Шльонські: ортофото (аерофото)"
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr "Семяновіце-Шльонські: Будинки"
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr "Свентохловіце: Ортофотомапа 2008 (супутник)"
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr "Свентохловіце: ортофото 2009 (аерофото)"
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr "Свентохловіце: Ортофотомапа 2012 (супутник)"
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr "Забже: ортофото 2011"
 
@@ -16299,6 +16552,21 @@ msgstr "Бонвіллар - ортофото 2013"
 msgid "Fiez Orthophoto 2013"
 msgstr "Фієз - ортофото 2013"
 
+msgid "Taiwan e-Map Open Data"
+msgstr "Тайвань e-Map Open Data"
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr "Тайвань e-Map Open Data (з лініями висот)"
+
+msgid "Taiwan Village Boundaries"
+msgstr "Тайвань межі поселень"
+
+msgid "Taiwan Land-Section Data"
+msgstr "Тайвань Земельний поділ"
+
+msgid "NLSC Open Data WMTS"
+msgstr "NLSC Open Data WMTS"
+
 msgid "MSR Maps Topo"
 msgstr "MSR Топомапи"
 
@@ -16314,8 +16582,8 @@ msgstr "USGS: великомасштабні знимки"
 msgid "TIGER 2012 Roads Overlay"
 msgstr "TIGER 2012 шар доріг"
 
-msgid "New & Misaligned TIGER Roads (2014)"
-msgstr "Нові та не перевірені дороги TIGER (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
+msgstr "Нові та неперевірені дороги TIGER (2015)"
 
 msgid "MassGIS L3 Parcels"
 msgstr "MassGIS L3 Ділянки"
@@ -16660,6 +16928,14 @@ msgstr ""
 "Перейдіть за посилання, щоб ознайомитись із стандартними командами (arc, "
 "circle тощо)"
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+"Надає бібліотеку Commons Imaging. Не призначений для безпосереднього "
+"встановлення користувачами, встановлюється тільки як залежність для інших "
+"втулків."
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 "(Увага: Експериментальна версія!) Інструмент для об’єднання (злиття) даних."
@@ -16762,14 +17038,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr "WMSPlugin-подібний втулок для підлаштування фонового зображення"
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-"Експериментальний втулок, дозволяє JOSMу зберігати кеш квадратів фонових "
-"зображень у базі даних, а не в теці кешу із неймовірною кількістю вкладених "
-"тек."
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -16844,9 +17112,9 @@ msgstr ""
 "За допомогою цього втулка ви можете створювати, закривати, знов відкривати "
 "та коментувати повідомлення про помилки."
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
-"Дозволяє користувачеві працювати з фотографіями, розміщеними на mapillary.com"
+"Дозволяє користувачеві працювати зі знімками, розміщеними на mapillary.com"
 
 msgid ""
 "Provide a measurement dialog and a layer to measure length and angle of "
@@ -16858,14 +17126,11 @@ msgstr ""
 "бути також імпортований із шару gps)."
 
 msgid "Merge overlapping part of ways."
-msgstr "Злиття частин шляхів, що співпадають."
+msgstr "Злиття частин шляхів, що збігаються."
 
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr "Додає заборону повороту ліворуч для наборів з 4 або 5 ліній"
 
-msgid "Simplifies download from different read-only APIs."
-msgstr "Спрощує завантаження з різних доступних тільки для читання API."
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 "Дозволяє призначити теґи до всіх об’єктів в будь-якій виділеній області за "
@@ -16933,7 +17198,7 @@ msgstr ""
 "натиснувши праву клавішу миші на шарі зображення."
 
 msgid "Make photos movable and position them on the map."
-msgstr "Робить знімки рухомими для позиціювання їх положення на мапі."
+msgstr "Робить знімки рухомими для позиціювання їхнього положення на мапі."
 
 msgid ""
 "This plugin allows to display any picture as a background in the editor and "
@@ -16966,6 +17231,17 @@ msgid ""
 msgstr ""
 "Цей втулок спрощує нанесення і редагування маршрутів громадського транспорту."
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+"Показує зупинки виділеного маршруту громадського транспорту у вигляді графу"
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+"Втулок RasterFilters дозволяє вибирати і застосовувати до деяких шарів "
+"фільтри зображень"
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr "Панель створення та редагування зв’язків та мультиполігонів."
 
@@ -17013,6 +17289,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr "Редагування об’єктів OpenSeaMap"
 
+msgid "Allows to draw splines"
+msgstr "Дозволяє креслити криві"
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -17111,9 +17390,6 @@ msgstr "Просте завантаження уздовж довгого наб
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr "Дозволяє пошук маршрутних точок, імпортованих із файлу gpx."
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr "Виділити послідовність з’єднаних ліній, що не розгалужуються"
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr "Спрощує зв’язування об’єктів ОСМ зі статтями з Вікіпедії"
 
@@ -17523,6 +17799,14 @@ msgid "basketball"
 msgstr "баскетбол"
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr "пляжний волейбол"
+
+msgctxt "sport"
+msgid "billiards"
+msgstr "більярд"
+
+msgctxt "sport"
 msgid "boules"
 msgstr "буль"
 
@@ -17547,10 +17831,6 @@ msgid "cricket"
 msgstr "крикет"
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr "крикетні сітки"
-
-msgctxt "sport"
 msgid "croquet"
 msgstr "крокет"
 
@@ -17567,6 +17847,10 @@ msgid "equestrian"
 msgstr "кінний спорт"
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr "хокей на траві"
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr "гельські ігри"
 
@@ -17583,14 +17867,26 @@ msgid "handball"
 msgstr "гандбол"
 
 msgctxt "sport"
-msgid "hockey"
-msgstr "хокей"
-
-msgctxt "sport"
 msgid "horse_racing"
 msgstr "кінні перегони"
 
 msgctxt "sport"
+msgid "ice_hockey"
+msgstr "хокей на льоду"
+
+msgctxt "sport"
+msgid "karting"
+msgstr "картинг"
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr "авіамоделізм"
+
+msgctxt "sport"
+msgid "motocross"
+msgstr "мотокрос"
+
+msgctxt "sport"
 msgid "motor"
 msgstr "мотоспорт"
 
@@ -17603,6 +17899,10 @@ msgid "racquet"
 msgstr "ракетка"
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr "автомоделізм"
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr "ліга регбі"
 
@@ -17615,6 +17915,10 @@ msgid "running"
 msgstr "біг"
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr "самозахист"
+
+msgctxt "sport"
 msgid "shooting"
 msgstr "стрільба"
 
@@ -17642,6 +17946,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr "теніс"
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr "волейбол"
+
+msgctxt "sport"
+msgid "9pin"
+msgstr "Кегельбан"
+
+msgctxt "sport"
+msgid "10pin"
+msgstr "боулінг"
+
 msgid "Fee"
 msgstr "Платна"
 
@@ -17838,7 +18154,7 @@ msgid "greek_catholic"
 msgstr "грекокатолицизм"
 
 msgid "jehovahs_witness"
-msgstr "свідки Ієгови"
+msgstr "свідки Єгови"
 
 msgid "lutheran"
 msgstr "лютеранство"
@@ -18037,6 +18353,9 @@ msgstr "З’їзд з/на Третинну"
 msgid "Unclassified"
 msgstr "Не має класифікації"
 
+msgid "Street has no name"
+msgstr "Вулиця не має назви"
+
 msgid "Passing Places"
 msgstr "Місце роз’їзду"
 
@@ -18116,6 +18435,9 @@ msgstr ""
 "аварійної зупінкі вантажівок та иншіх транспортних засобів під час виходу з "
 "ладу гальмівної сістеми."
 
+msgid "Raceway"
+msgstr "Гоночна траса"
+
 msgid "Road (Unknown Type)"
 msgstr "Дорога (тип невідомий)"
 
@@ -18669,6 +18991,12 @@ msgstr "Камера (радар)"
 msgid "Traffic Mirror"
 msgstr "Дорожнє дзеркало"
 
+msgid "Highway milestone"
+msgstr "Верстовий стовп"
+
+msgid "Distance (kilometers)"
+msgstr "Відстань (км)"
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr "Перехресття з назвою"
@@ -18858,6 +19186,11 @@ msgstr "Колонада"
 msgid "Avalanche Protector"
 msgstr "Захист від лавин"
 
+msgctxt "main group"
+msgid "Water"
+msgstr "Вода"
+
+msgctxt "sub group"
 msgid "Water"
 msgstr "Вода"
 
@@ -18911,6 +19244,10 @@ msgstr "Водосховище"
 msgid "Covered Reservoir"
 msgstr "Критий резервуар"
 
+msgctxt "natural"
+msgid "Water"
+msgstr "Вода"
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr "Вид стоячої води, наприклад: озеро чи ставок."
 
@@ -19056,6 +19393,120 @@ msgstr "Станція асенізації"
 msgid "public"
 msgstr "загальнодоступне"
 
+msgid "Marine Fuel"
+msgstr "Заправка"
+
+msgid "Agip"
+msgstr "Agip"
+
+msgid "Aral"
+msgstr "Aral"
+
+msgid "Avia"
+msgstr "Avia"
+
+msgid "BP"
+msgstr "BP"
+
+msgid "Chevron"
+msgstr "Шеврон"
+
+msgid "Citgo"
+msgstr "Citgo"
+
+msgid "Eni"
+msgstr "Eni"
+
+msgid "Esso"
+msgstr "Esso"
+
+msgid "Exxon"
+msgstr "Exxon"
+
+msgid "Gulf"
+msgstr "Gulf"
+
+msgid "Mobil"
+msgstr "Mobil"
+
+msgid "OMV"
+msgstr "OMV"
+
+msgid "Petro-Canada"
+msgstr "Petro-Canada"
+
+msgid "Pioneer"
+msgstr "Pioneer"
+
+msgid "Q8"
+msgstr "Q8"
+
+msgid "Repsol"
+msgstr "Repsol"
+
+msgid "Shell"
+msgstr "Shell"
+
+msgid "Socar"
+msgstr "Socar"
+
+msgid "Statoil"
+msgstr "Statoil"
+
+msgid "Sunoco"
+msgstr "Sunoco"
+
+msgid "Tamoil"
+msgstr "Tamoil"
+
+msgid "Texaco"
+msgstr "Texaco"
+
+msgid "Total"
+msgstr "Total"
+
+msgid "Independent"
+msgstr "Незалежна"
+
+msgid "Fuel types:"
+msgstr "Види палива:"
+
+msgid "Diesel"
+msgstr "Дизельне"
+
+msgid "Bio Diesel"
+msgstr "Біодизель"
+
+msgid "Octane 80"
+msgstr "бензин (80)"
+
+msgid "Octane 91"
+msgstr "бензин (91)"
+
+msgid "Octane 92"
+msgstr "бензин (92)"
+
+msgid "Octane 95"
+msgstr "бензин (95)"
+
+msgid "Octane 98"
+msgstr "бензин (98)"
+
+msgid "Octane 100"
+msgstr "бензин (100)"
+
+msgid "E10 (10% Ethanol mix)"
+msgstr "E10 (10% суміш етанолу)"
+
+msgid "E85 (85% Ethanol mix)"
+msgstr "E85 (85% суміш етанолу)"
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr "пропан-бутан"
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr "метан"
+
 msgid "Pier"
 msgstr "Пірс"
 
@@ -19172,6 +19623,9 @@ msgstr "Буферний упор"
 msgid "Railway Switch"
 msgstr "Стрілочний перевід"
 
+msgid "Railway milestone"
+msgstr "Верстовий стовп"
+
 msgid "Aerialway"
 msgstr "Канатна дорога"
 
@@ -19297,78 +19751,6 @@ msgstr "В’їзд на стоянку"
 msgid "Fuel"
 msgstr "Заправка"
 
-msgid "Agip"
-msgstr "Agip"
-
-msgid "Aral"
-msgstr "Aral"
-
-msgid "Avia"
-msgstr "Avia"
-
-msgid "BP"
-msgstr "BP"
-
-msgid "Chevron"
-msgstr "Шеврон"
-
-msgid "Citgo"
-msgstr "Citgo"
-
-msgid "Eni"
-msgstr "Eni"
-
-msgid "Esso"
-msgstr "Esso"
-
-msgid "Exxon"
-msgstr "Exxon"
-
-msgid "Gulf"
-msgstr "Gulf"
-
-msgid "Mobil"
-msgstr "Mobil"
-
-msgid "OMV"
-msgstr "OMV"
-
-msgid "Petro-Canada"
-msgstr "Petro-Canada"
-
-msgid "Pioneer"
-msgstr "Pioneer"
-
-msgid "Q8"
-msgstr "Q8"
-
-msgid "Repsol"
-msgstr "Repsol"
-
-msgid "Shell"
-msgstr "Shell"
-
-msgid "Socar"
-msgstr "Socar"
-
-msgid "Statoil"
-msgstr "Statoil"
-
-msgid "Sunoco"
-msgstr "Sunoco"
-
-msgid "Tamoil"
-msgstr "Tamoil"
-
-msgid "Texaco"
-msgstr "Texaco"
-
-msgid "Total"
-msgstr "Total"
-
-msgid "Independent"
-msgstr "Незалежна"
-
 msgid "With shop"
 msgstr "Із крамницею"
 
@@ -19378,51 +19760,12 @@ msgstr "супутні товари"
 msgid "kiosk"
 msgstr "кіоск"
 
-msgid "Fuel types:"
-msgstr "Види палива:"
-
-msgid "Diesel"
-msgstr "Дизельне"
-
-msgid "Bio Diesel"
-msgstr "Біодизель"
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr "Дизельне (зріджений газ — супер-дизель)"
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr "Дизельне для вантажівок"
 
-msgid "Octane 80"
-msgstr "бензин (80)"
-
-msgid "Octane 91"
-msgstr "бензин (91)"
-
-msgid "Octane 92"
-msgstr "бензин (92)"
-
-msgid "Octane 95"
-msgstr "бензин (95)"
-
-msgid "Octane 98"
-msgstr "бензин (98)"
-
-msgid "Octane 100"
-msgstr "бензин (100)"
-
-msgid "E10 (10% Ethanol mix)"
-msgstr "E10 (10% суміш етанолу)"
-
-msgid "E85 (85% Ethanol mix)"
-msgstr "E85 (85% суміш етанолу)"
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr "пропан-бутан"
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr "метан"
-
 msgid "1/25 mix (mofa/moped)"
 msgstr "паливна суміш 1/25 (для мопедів)"
 
@@ -19638,11 +19981,8 @@ msgid "white"
 msgstr "білий"
 
 msgctxt "color"
-msgid "#CD853F"
-msgstr "#CD853F"
-
-msgid "route segment"
-msgstr "відрізок маршруту"
+msgid "#CD853F"
+msgstr "#CD853F"
 
 msgid "stop position"
 msgstr "місце зупинки"
@@ -19662,6 +20002,9 @@ msgstr "платформа (тільки вихід)"
 msgid "platform (entry only)"
 msgstr "платформа (тільки вихід)"
 
+msgid "route segment"
+msgstr "відрізок маршруту"
+
 msgid "Route Master"
 msgstr "Майстер маршрут"
 
@@ -19864,6 +20207,12 @@ msgstr "Готель"
 msgid "Stars"
 msgstr "Зірки"
 
+msgid "Rooms"
+msgstr "Кількість кімнат"
+
+msgid "Beds"
+msgstr "Кількість ліжок"
+
 msgid "Motel"
 msgstr "Мотель"
 
@@ -19954,6 +20303,9 @@ msgstr "сандвічі"
 msgid "sushi"
 msgstr "суші"
 
+msgid "steak_house"
+msgstr "стейк хауз"
+
 msgid "Microbrewery"
 msgstr "Міні-пивоварня"
 
@@ -20166,7 +20518,10 @@ msgid "Sauna"
 msgstr "Сауна"
 
 msgid "Horse Riding"
-msgstr "Прогулянка вверхи"
+msgstr "Прогулянка верхи"
+
+msgid "Casino"
+msgstr "Казино"
 
 msgid "Brothel"
 msgstr "Дім розпусти"
@@ -20291,7 +20646,7 @@ msgstr "грецька православна"
 
 msgctxt "christian"
 msgid "jehovahs_witness"
-msgstr "свідки Ієгови"
+msgstr "свідки Єгови"
 
 msgctxt "christian"
 msgid "lutheran"
@@ -20655,8 +21010,8 @@ msgstr "Показує атмосферний тиск"
 msgid "Shows humidity"
 msgstr "Показує вологість"
 
-msgid "Recycling"
-msgstr "Пункт прийому вторинної сировини"
+msgid "Recycling Container"
+msgstr "Контейнер вторсировини"
 
 msgid "Batteries"
 msgstr "Батарейки/Акумулятори"
@@ -20664,20 +21019,47 @@ msgstr "Батарейки/Акумулятори"
 msgid "Cans"
 msgstr "Бляшанки"
 
+msgid "Cardboard"
+msgstr "Картон"
+
+msgid "Electrical Appliances"
+msgstr "Електроприлади"
+
 msgid "Glass"
 msgstr "Скло"
 
+msgid "Glass Bottles"
+msgstr "Склотара"
+
+msgid "Green Waste"
+msgstr "Рослинні відходи"
+
 msgid "Paper"
 msgstr "Папір"
 
+msgid "Plastic"
+msgstr "Пластик"
+
+msgid "Plastic Bottles"
+msgstr "Пластикова тара"
+
+msgid "Plastic Packaging"
+msgstr "Пластикова упаковка"
+
 msgid "Scrap Metal"
 msgstr "Металобрухт"
 
-msgid "container"
-msgstr "контейнер"
+msgid "Shoes"
+msgstr "Взуття"
+
+msgid "Small Appliances"
+msgstr "Дрібне приладдя"
+
+msgid "Waste"
+msgstr "Відходи"
 
-msgid "centre"
-msgstr "центр"
+msgid "Recycling Centre"
+msgstr "Центр переробки відходів"
 
 msgid "Waste Basket/Trash Can"
 msgstr "Урна для сміття"
@@ -20880,6 +21262,9 @@ msgstr "Стрільба з лука"
 msgid "Track and Field Athletics"
 msgstr "Легка атлетика"
 
+msgid "Running"
+msgstr "біг"
+
 msgid "Climbing"
 msgstr "Скелелазіння"
 
@@ -21055,12 +21440,18 @@ msgstr "Бейсбол"
 msgid "Basketball"
 msgstr "Баскетбол"
 
+msgid "Handball"
+msgstr "Гандбол"
+
 msgid "Volleyball"
 msgstr "Волейбол"
 
 msgid "Beach Volleyball"
 msgstr "Пляжний волейбол"
 
+msgid "Billiards"
+msgstr "Більярд"
+
 msgid "Golf"
 msgstr "Гольф"
 
@@ -21076,14 +21467,14 @@ msgstr "Боулз"
 msgid "Cricket"
 msgstr "Крикет"
 
-msgid "Cricket Nets"
-msgstr "Тренувальні сітки для крикету"
-
 msgid "Croquet"
 msgstr "Крокет"
 
-msgid "Hockey"
-msgstr "Хокей"
+msgid "Field Hockey"
+msgstr "Хокей на траві"
+
+msgid "Ice Hockey"
+msgstr "Хокей з шайбою"
 
 msgid "Pelota"
 msgstr "Пелота"
@@ -21106,9 +21497,6 @@ msgstr "Картинг"
 msgid "Motocross"
 msgstr "Мотокрос"
 
-msgid "Safety Training"
-msgstr "Курси контраварійного водіння"
-
 msgid "Model Aerodrome"
 msgstr "Аеродром для авіамоделей"
 
@@ -21127,9 +21515,6 @@ msgstr "трек"
 msgid "RC Car"
 msgstr "Дистанційно керовані автомобілі"
 
-msgid "Raceway"
-msgstr "Гоночна траса"
-
 msgid "Man Made"
 msgstr "Штучні об’єкти"
 
@@ -21202,6 +21587,14 @@ msgid "storage_tank"
 msgstr "резервуар"
 
 msgctxt "building"
+msgid "supermarket"
+msgstr "супермаркет"
+
+msgctxt "building"
+msgid "gasometer"
+msgstr "газгольдер"
+
+msgctxt "building"
 msgid "cowshed"
 msgstr "корівник"
 
@@ -22524,9 +22917,6 @@ msgstr "Вино"
 msgid "Boutique"
 msgstr "Бутік"
 
-msgid "Shoes"
-msgstr "Взуття"
-
 msgid "Outdoor"
 msgstr "Товари для активного відпочинку"
 
@@ -22696,7 +23086,7 @@ msgid "Bookmaker"
 msgstr "Букмекер"
 
 msgid "Lottery"
-msgstr "Лоторея"
+msgstr "Лотерея"
 
 msgid "Bag"
 msgstr "Валізи"
@@ -23176,9 +23566,9 @@ msgid ""
 "free-draining infertile, acidic soils, and is characterised by open, low-"
 "growing woody vegetation."
 msgstr ""
-"Необроблені землі біля підніжжя гір, з деревно-чагарниковим покриттям, "
-"зустрічаються в основному на засушливих, безплідних, кислих ґрунтах, і "
-"характеризуються відкритою, низькорослою деревною рослинністю."
+"Необроблені землі біля підніжжя гір, з деревно-чагарниковим покриттям,\r\n"
+"трапляються переважно на засушливих, безплідних, кислих ґрунтах,\r\n"
+"і характеризуються відкритою, низькорослою деревною рослинністю."
 
 msgid "Sand"
 msgstr "Пісок"
@@ -23261,7 +23651,7 @@ msgid "Park"
 msgstr "Парк"
 
 msgid "Recreation Ground"
-msgstr "Майданчик для ігор"
+msgstr "Майданчик для дозвілля"
 
 msgid "Residential Area"
 msgstr "Житловий район"
@@ -23558,12 +23948,12 @@ msgstr "можлива"
 msgid "Contact (Common Schema)"
 msgstr "Контакти (Загальна схема)"
 
-msgid "Fax Number"
-msgstr "Номер факсу"
-
 msgid "Email Address"
 msgstr "Адреса ел. пошти"
 
+msgid "Fax Number"
+msgstr "Номер факсу"
+
 msgid "Image"
 msgstr "Зображення"
 
@@ -23816,7 +24206,7 @@ msgid "fork node for alternative routes"
 msgstr "точка відгалуження альтернативного маршруту"
 
 msgid "Power Route"
-msgstr "Лінія електромерж"
+msgstr "Лінія електромереж"
 
 msgid "Railway Route"
 msgstr "Залізничний маршрут"
@@ -23992,6 +24382,9 @@ msgstr "неповний об’єкт: тільки {0} та {1}"
 msgid "{0} together with addr:*"
 msgstr "{0} разом з addr:*"
 
+msgid "{0} together with {1} and conflicting values"
+msgstr "{0} разом з {1} та суперечливими значеннями"
+
 msgid "{0} on suspicious object"
 msgstr "{0} на сумнівному об’єкті"
 
@@ -24016,6 +24409,18 @@ msgstr "альтернативна назва без {0}"
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr "неповне використання {0} на лінії без {1}"
 
+msgid "Same value of {0} and {1}"
+msgstr "Те ж саме значення {0} і {1}"
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr "Те ж саме значення {0}, {1} і {2}"
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr "{0} і {1} разом з {2} і значеннями, що спричиняють конфлікт"
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr "{0}={1} є застарілим"
 
@@ -24042,7 +24447,7 @@ msgstr ""
 
 msgid "{0}={1} is deprecated. Please use instead a multipolygon."
 msgstr ""
-"{0}={1} є застарілим. Будь ласка, використовуйте замість цього мультиполігон."
+"{0}={1} є застарілим. Будь ласка, використовуйте натомість мультиполігон."
 
 msgid ""
 "{0} is deprecated. Please specify interval by using opening_hours syntax"
@@ -24092,6 +24497,9 @@ msgstr "Ключ з незвичайним символом"
 msgid "uncommon short key"
 msgstr "незвично короткий ключ"
 
+msgid "{0} is inaccurate"
+msgstr "{0} — неточне значення"
+
 msgid "{0} on a node. Should be used on a way."
 msgstr "{0} на точці. Слід застосовувати до лінії."
 
@@ -24186,9 +24594,22 @@ msgstr ""
 "{0}: типово в метрах; десятковий розділювач — крапка; одиниці виміру "
 "вказуються через пробіл"
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+"{0}: типово в тоннах; роздільник – крапка; якщо треба, одиниці виміру "
+"відділяються пробілом"
+
 msgid "unusual {0} format"
 msgstr "незвичайний формат {0}"
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+"{0}: типово в кілометрах; роздільник – крапка; якщо треба, одиниці виміру "
+"відділяються пробілом"
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 "напруга повинна зазначатись у вольтах без пробілів/роздільників/одиниць "
@@ -24398,7 +24819,7 @@ msgstr ""
 "буде доступною."
 
 msgid "Invalid URL {0}"
-msgstr "Невірне посилання {0}"
+msgstr "Помилкове посилання {0}"
 
 msgid "Error fetching URL {0}"
 msgstr "Помилка отримання даних за посиланням {0}"
@@ -24576,6 +24997,9 @@ msgstr "Додавати фіксовані точки клацанням"
 msgid "Add fixed points on spacebar"
 msgstr "Додавати фіксовані точки пробілом"
 
+msgid "Allow edit existing ways"
+msgstr "Дозволити редагування інсуючих ліній"
+
 msgid "Draw closed polygons only"
 msgstr "Креслення тільки замкнених ліній"
 
@@ -24640,9 +25064,6 @@ msgstr "Креслити лінію мишею"
 msgid "min distance={0} px ({1} m)"
 msgstr "мін. відстань={0} пікс. ({1} м)"
 
-msgid "Convert way to FastDraw line"
-msgstr "Перетворити лінію у лінію FastDraw"
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr "Eps={0}, {1} точок, {2} т/км"
 
@@ -25064,13 +25485,14 @@ msgid "Expected even numbers for addresses"
 msgstr "Очікуються непарні номери будівель"
 
 msgid "Expected valid number for increment"
-msgstr "Очікується вірний номер для прирощення"
+msgstr "Очікується правильний номер для прирощення"
 
 msgid "Country code must be 2 letters"
 msgstr "Код країни повинен складатись з 2 символів"
 
 msgid "Please enter valid number for starting and ending address"
-msgstr "Будь ласка, введіть вірний номер для початку та закінчення нумерації"
+msgstr ""
+"Будь ласка, введіть правильний номер для початку та закінчення нумерації"
 
 msgid "Alphabetic address must end with a letter"
 msgstr "Алфавітна адреса має закінчуватися літерою"
@@ -25085,10 +25507,10 @@ msgstr ""
 "літера кінцевої адреси"
 
 msgid "Please enter valid number for starting address"
-msgstr "Будь ласка, введіть вірний номер для початкової адреси"
+msgstr "Будь ласка, введіть правильний номер для початкової адреси"
 
 msgid "Please enter valid number for ending address"
-msgstr "Будь ласка, введіть вірний номер для кінцевої адреси"
+msgstr "Будь ласка, введіть правильний номер для кінцевої адреси"
 
 msgid "Starting address number must be less than ending address number"
 msgstr "Номер початкової адреси повинен бути меншим за номер кінцевої адреси"
@@ -25104,7 +25526,7 @@ msgid ""
 "Alternatively put the pivot on their common node.\n"
 msgstr ""
 "Будь ласка, виділіть два відрізки, що не мають спільних точок.\n"
-"Або ж встановіть точку оберту на їх спільну точку.\n"
+"Або ж встановіть точку оберту на їхню спільну точку.\n"
 
 msgid ""
 "Aligning would result nodes ''outside the world''.\n"
@@ -25152,7 +25574,7 @@ msgid ""
 " or put the pivot on their common node.\n"
 msgstr ""
 "Будь ласка, позначте два відрізки, що не мають спільних\n"
-" точок або встановіть вісь на їх спільну точку.\n"
+" точок або встановіть вісь на їхню спільну точку.\n"
 
 msgid "Align Way Segments: Modes"
 msgstr "Вирівняти відрізки лінії: Методи"
@@ -25176,7 +25598,7 @@ msgid ""
 "<html>Aligns the way segment to the reference so that its length is "
 "preserved.</html>"
 msgstr ""
-"<html>Вирівнювати відрізки лінії за взірцем так, щоб їх довжина "
+"<html>Вирівнювати відрізки лінії за взірцем так, щоб їхня довжина "
 "зберігалась.</html>"
 
 msgid ""
@@ -25503,52 +25925,68 @@ msgstr ""
 "Розкажіть, що ви робили і що сталось, додайте наступний текст до "
 "повідомлення про помилку, в такий спосіб ми матимемо змогу знайти її джерело."
 
-msgid "Area detection algorithm settings."
-msgstr "Налаштування алгоритму визначення ділянок"
+msgid "Area Selector - Preferences"
+msgstr "Виділення ділянки – налаштування"
+
+msgid "Settings for the area detection algorithm."
+msgstr "Налаштування алгоритму визначення ділянки."
 
-msgid "Algorithm Settings"
-msgstr "Налаштування алгоритму"
+msgid "Boofcv - high resolution images"
+msgstr "Boofcv - зображення високої якості"
+
+msgid "Custom - low resolution images"
+msgstr "Настроюваний - зображення низької якості"
 
 msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
-"Кольоровий поріг визначає, як сильно колір може відрізнятись від "
-"оригінального, виділеного кольору (Типово: {0})"
+"Оберить який алгоритм використовувати. \"Авто\" намагається знайти ділянку "
+"за допомогою Boofcv, настроюванний алгоритм використовується у разі відмови."
 
-msgid "Color Threshold"
-msgstr "Межа кольорового переходу"
+msgid "Algorithm"
+msgstr "Алгоритм"
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
-"Максимальна відстань між точками, що утворюють лінію, в пікселях (Типово: "
-"{0})"
-
-msgid "Tolerance Distance"
-msgstr "Допустима відстань"
+"Максимальна відстань точки від лінії (пікселів), при якому точка все ще "
+"вважається частиною цієї лінії (Типово: {0})"
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
-msgstr "Допуск для кута, в радіанах (Типово: {0})"
+msgid "Distance Tolerance"
+msgstr "Допустиме відхилення відстані"
 
-msgid "Tolerance Angle"
-msgstr "Допустимий кут"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
+msgstr ""
+"Лінії, розташовані під кутом (в градусах) менше цього, будуть об’єднані в "
+"одну (Типово {0})."
 
-msgid "Plugin Settings"
-msgstr "Параметри втулків"
+msgid "Angle Tolerance"
+msgstr "Допустиме відхилення кута"
 
-msgid "Show Address Dialog after mapping an area"
-msgstr "Показувати адресний діалог після креслення"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
+msgstr ""
+"Поріг кольору визначає, наскільки колір може відрізнятися від обраного. "
+"Значення червоного, зеленого і синього повинні бути в діапазоні від "
+"(вибраний - поріг) до (обраний + поріг). (Типово: {0})."
 
-msgid "show address dialog"
-msgstr "Показувати адресний діалог"
+msgid "Color Threshold"
+msgstr "Межа кольорового переходу"
 
-msgid "Merge nodes with neighbors"
-msgstr "Об’єднувати точки з сусідніми"
+msgid "Use HSV based algorithm"
+msgstr "Використовувати алгоритм, заснований на HSV"
 
-msgid "merge nodes"
-msgstr "об’єднати точки"
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
+msgstr ""
+"Використовувати відтінок і насиченість замість значень RGB для вибору "
+"відповідних кольорів."
 
 msgid "How often thinning operation should be applied (Default {0})."
 msgstr "Як часто слід застосовувати розрідження (типово {0})."
@@ -25556,11 +25994,24 @@ msgstr "Як часто слід застосовувати розрідженн
 msgid "Thinning Iterations"
 msgstr "Ітерації розрідження"
 
-msgid "Use hue and saturation instead of RGB distinction"
-msgstr "Використовувати відтінок і насиченість замість RGB відмінності"
+msgid "show address dialog"
+msgstr "Показувати адресний діалог"
+
+msgid "Show Address Dialog after mapping an area"
+msgstr "Показувати адресний діалог після креслення"
+
+msgid "merge nodes"
+msgstr "об’єднати точки"
+
+msgid "Merge nodes with existing nodes"
+msgstr "Об''єднати точки з існуючими точками"
+
+msgid "Debug"
+msgstr "Відлагодження"
 
-msgid "use HSV based algorithm"
-msgstr "використовувати алгоритм, заснований на HSV"
+msgid "Debugging mode will write images for each processing step."
+msgstr ""
+"В режимі відлагодження будут створені зображення для кожного кроку оробки."
 
 msgid "Street Name:"
 msgstr "Вулиця:"
@@ -25717,7 +26168,7 @@ msgid ""
 "or action canceled"
 msgstr ""
 "Місто {0} не знайдено або не доступне\n"
-"або дію відмінено"
+"або дію скасовано"
 
 msgid "Choose from..."
 msgstr "Виберіть з…"
@@ -26091,7 +26542,8 @@ msgstr "Неможливо завантажити кеш {0}, несумісни
 
 msgid ""
 "Selected file {0} is not a cache file from this plugin (invalid extension)"
-msgstr "Обраний файл {0} не є кеш-файлом цього втулка (невірне розширення)"
+msgstr ""
+"Обраний файл {0} не є кеш-файлом цього втулка (неправильне розширення)"
 
 msgid "The location {0} is already on screen. Cache not loaded."
 msgstr "Місце положення {0} вже на екрані. Кеш не завантажено."
@@ -26229,6 +26681,9 @@ msgstr "Перевстановити зміщення"
 msgid "Reset offset (only vector images)"
 msgstr "Перевстановити зміщення (тільки векторні зображення)"
 
+msgid "Blank Layer"
+msgstr "Порожній шар"
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr "Шар WMS ({0}), {1} квадрат(и,ів) завантажено"
 
@@ -26491,7 +26946,7 @@ msgid "Import path from GPX layer"
 msgstr "Імпортувати шлях із шару даних GPX"
 
 msgid "Drop existing path"
-msgstr "Очистити існуючий шлях"
+msgstr "Очистити наявний шлях"
 
 msgid "No GPX data layer found."
 msgstr "Не знайдено шару даних GPX"
@@ -26708,7 +27163,8 @@ msgstr "GPSБах"
 
 msgid "select gpx points and \"blam!\", find centre and direction of spread"
 msgstr ""
-"виділіть точки gpx та, \"бах!\", знайдіть центр та напрямок їх розповсюдження"
+"виділіть точки gpx та, \"бах!\", знайдіть центр та напрямок їхнього "
+"розповсюдження"
 
 msgid "Add EGPX layer"
 msgstr "Додати шар EGPX"
@@ -26757,7 +27213,7 @@ msgid "Tag element inside other tag element"
 msgstr "Теґ елементу всередині іншого теґу"
 
 msgid "Invalid opening xml tag <{0}> in state {1}"
-msgstr "Невірний відкриваючий xml-теґ <{0}> у позиції {1}"
+msgstr "Неправильний відкриваючий xml-теґ <{0}> у позиції {1}"
 
 msgid "Condition isn''t finished at </condition> tag"
 msgstr "Умови не закінчуються теґом </condition>"
@@ -26766,7 +27222,7 @@ msgid "Closing tag element that was not open"
 msgstr "Закриття теґу елемента до його відкриття"
 
 msgid "Invalid closing xml tag </{0}> in state {1}"
-msgstr "Невірний закриваючий xml-теґ <{0}> у позиції {1}"
+msgstr "Неправильний закриваючий xml-теґ <{0}> у позиції {1}"
 
 msgid "Some tags have not been closed; now in state {0}"
 msgstr "Деякі теґи не закриті; перебувають у стані {0}"
@@ -27112,7 +27568,7 @@ msgid "Deprecate Offset"
 msgstr "Вилучити зсув"
 
 msgid "Are you sure this imagery offset is wrong?"
-msgstr "Ви впевнені, що це зміщення знімка є невірним?"
+msgstr "Ви впевнені, що це зміщення знімка є неправильним?"
 
 msgid "Are you sure this calibration geometry is aligned badly?"
 msgstr "Ви впевнені, що ця калібрувальна геометрія є погано прив’язаною?"
@@ -27517,7 +27973,7 @@ msgid "Looking for shoreline..."
 msgstr "Пошук берегової лінії…"
 
 msgid "{0} nodes so far..."
-msgstr "{0} точок на даний момен…"
+msgstr "{0} точок на цей момент…"
 
 msgid "Lake Walker."
 msgstr "Трасувальник озер"
@@ -27768,14 +28224,329 @@ msgstr "Активує втулок звітування про помилки M
 msgid "Missing input data"
 msgstr "Вхідні дані відсутні"
 
+msgid "Mapillary Images"
+msgstr "Знімки Mapillary"
+
+msgid "Mapillary layer"
+msgstr "Mapillary"
+
+msgid "Total images:"
+msgstr "Всього знімків:"
+
+msgid "images"
+msgstr "знімків"
+
 msgid "Mapillary"
 msgstr "Mapillary"
 
-msgid "Create Mapillary layer."
-msgstr "Створити шар Mapillary."
+msgid "Create Mapillary layer"
+msgstr "Створити шар Mapillary"
 
-msgid "Export"
-msgstr "Експорт"
+msgid "Start Mapillary layer"
+msgstr "Запустити шар Mapillary"
+
+msgid "Download Mapillary images in current view"
+msgstr "Заватнажити знімки Mapillary для поточного виду"
+
+msgid "Export pictures"
+msgstr "Експортувати знімки"
+
+msgid "Export Mapillary pictures"
+msgstr "Експортувати знімки Mapillary"
+
+msgid "Export images"
+msgstr "Експорт знімків"
+
+msgid "Import pictures"
+msgstr "Імпортувати знімки"
+
+msgid "Import local pictures"
+msgstr "Імпортувати локальні знімкки"
+
+msgid "Import pictures into Mapillary layer"
+msgstr "Імпортувати знімки до шару Mapillary"
+
+msgid "Select pictures"
+msgstr "Виберіть знімки"
+
+msgid "Import pictures into sequence"
+msgstr "Імпорт зображень з послідовності"
+
+msgid "Import pictures into Mapillary layer in a sequence"
+msgstr "Імпорт зображень в шар Mapillary з послідовності"
+
+msgid "Join mode"
+msgstr "Режим з’єднування"
+
+msgid "Join/unjoin pictures"
+msgstr "З’єднати/роз’єднати зображення"
+
+msgid "Join Mapillary pictures"
+msgstr "З’єднати зображення Mapillary"
+
+msgid "Upload pictures"
+msgstr "Завантажити знімки"
+
+msgid "Upload Mapillary pictures"
+msgstr "Завантажити знімки Mapillary"
+
+msgid "Upload pictures."
+msgstr "Завантажити знімки."
+
+msgid "Walk mode"
+msgstr "Пішохідний режим"
+
+msgid "Start walk mode"
+msgstr "Запустити пішохідний режим"
+
+msgid "Zoom to selected image"
+msgstr "Масштабувати до виділеного знімка"
+
+msgid "Zoom to the currently selected Mapillary image"
+msgstr "Наблизитись до поточного виділеного знімка Mapillary"
+
+msgid "Uploaded {0} images"
+msgstr "Надіслано {0} знімків"
+
+msgid "Approve upload on the website"
+msgstr "Підтверджувати надсилання до веб-сайту"
+
+msgid "View in website"
+msgstr "Подивитись на сайті"
+
+msgid "Copy key"
+msgstr "Копіювати ключ"
+
+msgid "Copy key tag"
+msgstr "Копіювати теґ"
+
+msgid "Edit on website"
+msgstr "Редагувати на сайті"
+
+msgid "Export all images"
+msgstr "Експортувати всі знімки"
+
+msgid "Export selected sequence"
+msgstr "Експортувати обрану послідовність"
+
+msgid "Export selected images"
+msgstr "Експортувати виділені знімки"
+
+msgid "Rewrite imported images"
+msgstr "Перезаписати імпортовані зображення"
+
+msgid "Select a folder"
+msgstr "Оберіть теку"
+
+msgid "Explore"
+msgstr "Оглянути"
+
+msgid "Select a directory"
+msgstr "Виберіть теку"
+
+msgid "Speed limit"
+msgstr "Обмеження швидкості"
+
+msgid "Give way"
+msgstr "Дати дорогу"
+
+msgid "No entry"
+msgstr "В’їзд заборонено"
+
+msgid "Intersection danger"
+msgstr "Перехрещення з другорядною дорогою"
+
+msgid "Mandatory direction (any)"
+msgstr "Напрямок руху"
+
+msgid "No turn"
+msgstr "Поворот заборонений"
+
+msgid "Uneven road"
+msgstr "Нерівна дорога"
+
+msgid "No parking"
+msgstr "Стоянка заборонена"
+
+msgid "No overtaking"
+msgstr "Обгін заборонений"
+
+msgid "Pedestrian crossing"
+msgstr "Пішохідний перехід"
+
+msgid "Years"
+msgstr "Роки"
+
+msgid "Months"
+msgstr "Місяці"
+
+msgid "Days"
+msgstr "Дні"
+
+msgid "Mapillary filter"
+msgstr "Фільтр Mapillary"
+
+msgid "Open Mapillary filter dialog"
+msgstr "Відкрити діалог фільтра Mapillary"
+
+msgid "Downloaded images"
+msgstr "Завантажені знімки"
+
+msgid "Only images with signs"
+msgstr "Тільки знімки зі знаками"
+
+msgid "Choose signs"
+msgstr "Виберіть знаки"
+
+msgid "Mapillary history"
+msgstr "Історія Mapillary"
+
+msgid "Open Mapillary history dialog"
+msgstr "Відкрити історію Mapillary"
+
+msgid "Open Mapillary window"
+msgstr "Відкрити вікно Mapillary"
+
+msgid "Mapillary dialog"
+msgstr "Mapillary"
+
+msgid "Open Mapillary main dialog"
+msgstr "Відкрити головний діалог Mapillary"
+
+msgid "Next picture"
+msgstr "Наступний знімок"
+
+msgid "Shows the next picture in the sequence"
+msgstr "Показує наступний знімок послідовності"
+
+msgid "Previous picture"
+msgstr "Попередній знімок"
+
+msgid "Shows the previous picture in the sequence"
+msgstr "Показує попередній знімок послідовності"
+
+msgid "Jump to red"
+msgstr "Перейти до червоної"
+
+msgid "Jumps to the picture at the other side of the red line"
+msgstr "Перейти до знімку з іншого боку від червоної лінії"
+
+msgid "Jump to blue"
+msgstr "Перейти до блакитної"
+
+msgid "Jumps to the picture at the other side of the blue line"
+msgstr "Перейти до зображення з іншого боку від блакитної лінії"
+
+msgid "Stops the walk."
+msgstr "Зупиняє перегляд."
+
+msgid "Play"
+msgstr "Пуск"
+
+msgid "Continues with the paused walk."
+msgstr "Продовжує перегляд."
+
+msgid "Pause"
+msgstr "Пауза"
+
+msgid "Pauses the walk."
+msgstr "Призупиняє перегляд"
+
+msgid "Reverse buttons position when displaying images."
+msgstr "Зворотнє положення кнопок під час показу знімків."
+
+msgid "Display hour when the picture was taken"
+msgstr "Показувати час, коли було зроблено знімок"
+
+msgid "Use 24 hour format"
+msgstr "Використовувати 24-годинний формат"
+
+msgid "Move to picture''s location with next/previous buttons"
+msgstr ""
+"Пересуватись до місця де був зроблений знімок кнопками Наступний/Попередній"
+
+msgid "Download mode: "
+msgstr "Режим завантаження: "
+
+msgid "Upload selected sequence"
+msgstr "Надіслати виділену послідовність"
+
+msgid "Delete after upload"
+msgstr "Вилучити післа надсиланання"
+
+msgid "Wait for full quality pictures"
+msgstr "Чекати якісних фотографій"
+
+msgid "Follow selected image"
+msgstr "Йти за виділеним знімком"
+
+msgid "Go forward"
+msgstr "Вперед"
+
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] "Вилучений {0} знімок"
+msgstr[1] "Вилучено {0} знімки"
+msgstr[2] "Вилучено {0} знімків"
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] "Імпортований {0} знімок"
+msgstr[1] "Імпортовано {0} знімки"
+msgstr[2] "Імпортовано {0} знімків"
+
+msgid "2 images joined"
+msgstr "2 зображення з’єднано"
+
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] "Переміщено {0} зображення"
+msgstr[1] "Переміщено {0} зображення"
+msgstr[2] "Переміщено {0} зображень"
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] "Обернуто {0} зображення"
+msgstr[1] "Обернуто {0} зображення"
+msgstr[2] "Обернуто {0} зображень"
+
+msgid "2 images unjoined"
+msgstr "2 зображення роз’єднано"
+
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
+msgstr ""
+"Завантажена в JOSM ділянка завелика. Режим завантаження був змінений на "
+"напівавтоматичний до перезапуску шару."
+
+msgid "Downloading"
+msgstr "Завантаження"
+
+msgid "Select mode"
+msgstr "Режим виділення"
+
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
+msgstr ""
+"<html><head><title>Вхід до Mapillary</title></head><body>Вхід вдалий, "
+"повертаємось в JOSM.</body></html>"
+
+msgid "Downloading Mapillary images"
+msgstr "Завантаження знімків Mapillary"
+
+msgid "Total Mapillary images: {0}"
+msgstr "Всього знімків Mapillary: {0}"
+
+msgid "No images found"
+msgstr "Знімків не знайдено"
+
+msgid "Finished upload"
+msgstr "Надсилання закінчене"
+
+msgid "Uploading: {0}"
+msgstr "Надсилання: {0}"
 
 msgid "Measured values"
 msgstr "Результати вимірювання"
@@ -27796,6 +28567,9 @@ msgstr "Довжина виділення"
 msgid "Selection Area"
 msgstr "Область виділення"
 
+msgid "Selection Radius"
+msgstr "Радіус виділення"
+
 msgid "Angle"
 msgstr "Кут"
 
@@ -27851,7 +28625,7 @@ msgid "Please select 4 ways that form a closed relation."
 msgstr "Будь ласка, виділіть 4 лінії, що утворюють закритий зв’язок."
 
 msgid "Unable to order the ways. Please verify their directions"
-msgstr "Неможливо впорядкувати лінії. Будь ласка, перевірте їх напрямки"
+msgstr "Неможливо впорядкувати лінії. Будь ласка, перевірте їхні напрямки"
 
 msgid "Create Michigan left turn restriction"
 msgstr "Створити обмеження повороту ліворуч (Мічіган)"
@@ -27859,49 +28633,6 @@ msgstr "Створити обмеження повороту ліворуч (М
 msgid "Unable to find via nodes. Please check your selection"
 msgstr "Неможливо знайти точки «через». Будь ласка, перевірте свій вибір"
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-"Запит XAPI, наприклад, '''' (для завантаження всіх даних), ''[highway=*]'' "
-"or ''[[network=VRR][ref=603|613]''"
-
-msgid "Download from OSM mirror..."
-msgstr "Завантаження з дзеркала OSM…"
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr "Цей запит XAPI здається недійсним, будь ласка, перевірте"
-
-msgid "Object type: "
-msgstr "Тип об’єкта: "
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr "Тип об’єкта OSM для завантаження (''*'' — будь-який)"
-
-msgid "XAPI query: "
-msgstr "Запит XAPI: "
-
-msgid "Download from Overpass API ..."
-msgstr "Завантажити з Overpass API…"
-
-msgid "Download map data from Overpass API server."
-msgstr "Завантажити картографічні дані з сервера Overpass API."
-
-msgid "Overpass query: "
-msgstr "Overpass запит: "
-
-msgid "Select OSM mirror URL"
-msgstr "Виберіть URL дзеркала OSM"
-
-msgid "Select OSM mirror URL to download from."
-msgstr "Оберіть URL дзеркала OSM для завантаження."
-
-msgid "Base URL"
-msgstr "Базовий URL"
-
-msgid "Enforce meta data"
-msgstr "Задати метадані"
-
 msgid "About Plugin"
 msgstr "Про втулок"
 
@@ -28153,6 +28884,9 @@ msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 "Знайти відмінності між поточним набором даних та існуючими даними OSM."
 
+msgid "Tools"
+msgstr "Інструменти"
+
 msgid "Open tools menu for this data."
 msgstr "Відкрити меню інструментів для цих даних."
 
@@ -28293,7 +29027,7 @@ msgstr "Не знайдено правильних координат."
 
 msgid "Invalid file. Bad length on line {0}. Expected {1} columns, got {2}."
 msgstr ""
-"Помилковий файл. Невірна довжина лінії {0}. Очікувалось {1} стовпчиків, "
+"Помилковий файл. Неправильна довжина лінії {0}. Очікувалось {1} стовпчиків, "
 "маємо {2}."
 
 msgid "XLS files"
@@ -28465,7 +29199,7 @@ msgid "The module file ''{0}'' does not include a Manifest."
 msgstr "Файл модуля ''{0}'' не містить Manifest."
 
 msgid "Invalid URL ''{0}'' in module {1}"
-msgstr "Невірний URL ''{0}'' в модулі {1}"
+msgstr "Помилковий URL ''{0}'' в модулі {1}"
 
 msgid "<b>Module provided by an external source:</b> {0}"
 msgstr "<b>Модуль надається із зовнішнього джерела:</b> {0}"
@@ -29151,7 +29885,7 @@ msgid "Print"
 msgstr "Друк"
 
 msgid "Printing has been cancelled."
-msgstr "Друк був відмінений."
+msgstr "Друк був скасований."
 
 msgid "Printing stopped"
 msgstr "Друк зупинено"
@@ -29205,7 +29939,7 @@ msgid ""
 "There exists no dataset. Try to download data from the server or open an OSM "
 "file."
 msgstr ""
-"Набір даний відсутній. Спробуйте завантажити дані з сервера, чи відкрити "
+"Набір даних відсутній. Спробуйте завантажити дані з сервера, чи відкрити "
 "файл OSM."
 
 msgid "No data found"
@@ -29266,7 +30000,7 @@ msgid "Can''t parse a time from this string."
 msgstr "Неможливо визначити час із цього рядка."
 
 msgid "Invalid value"
-msgstr "Невірне значення"
+msgstr "Некоректне значення"
 
 msgid "moved"
 msgstr "пересунуто"
@@ -29389,7 +30123,7 @@ msgid ""
 "The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
 "has trackpoints."
 msgstr ""
-"Файл GPX не містить вірних точок треку. Будь ласка, скористайтесь файлом "
+"Файл GPX не містить правильних точок треку. Будь ласка, скористайтесь файлом "
 "GPX, який містить інформацію про трек."
 
 msgid "GPX File Trouble"
@@ -29434,8 +30168,29 @@ msgstr "Громадський транспорт: Включити маршру
 msgid "Public Transport: Edit waypoint name"
 msgstr "Громадський транспорт: Редагувати назву маршрутної точки"
 
+msgid "Public transport routes"
+msgstr "Маршрути громадського транспорту"
+
+msgid "Toggle direction arrows"
+msgstr "Показувати стрілки напрямку"
+
+msgid "Toggle reference labels"
+msgstr "Показувати таблички маршрутів"
+
+msgid "Visualize public transport routes"
+msgstr "Показати маршрути громадського транспорту"
+
+msgid "Filters"
+msgstr "Фільтри"
+
+msgid "Choose Filter"
+msgstr "Виберіть фільтр"
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr "Помилка ініціалізації JSlider. Переконайтесь що meta-inf є вірним."
+
 msgid "Relation Toolbox"
-msgstr "Інструменти для роботи із зв’язками"
+msgstr "Інструменти для роботи зі зв’язками"
 
 msgid "Open relation/multipolygon editor panel"
 msgstr "Відкрити панель редактора зв’язків/мультиполігонів"
@@ -29468,7 +30223,7 @@ msgid "Enter role for selected members"
 msgstr "Ввести роль для виділених членів"
 
 msgid "Relation Toolbox: {0}"
-msgstr "Інструменти для роботи із зв’язками: {0}"
+msgstr "Інструменти для роботи зі зв’язками: {0}"
 
 msgid "another..."
 msgstr "інше…"
@@ -29522,7 +30277,7 @@ msgid "Find a relation"
 msgstr "Знайти зв’язок"
 
 msgid "Reconstruct polygon"
-msgstr "Перетворити на плігон"
+msgstr "Перетворити на полігон"
 
 msgid "Multipolygon must consist only of ways"
 msgstr "Мультиполігон повинен складатись лише з ліній"
@@ -29583,7 +30338,7 @@ msgid "Way platform without ''platform'' role found"
 msgstr "Лінія платформи без ролі ''platform''"
 
 msgid "Revert changeset fully"
-msgstr "Повністю відмінити набір змін"
+msgstr "Повністю скасувати набір змін"
 
 msgid "Revert selection only"
 msgstr "Відмінити зміни тільки виділених об’єктів"
@@ -29598,7 +30353,7 @@ msgid "Revert"
 msgstr "Відновити"
 
 msgid "Enter the ID of the changeset that should be reverted"
-msgstr "Введіть Id набору змін, який потрібно відмінити"
+msgstr "Введіть Id набору змін, який потрібно скасувати"
 
 msgid "Reverted changeset"
 msgstr "Відмінений набір змін"
@@ -29606,6 +30361,9 @@ msgstr "Відмінений набір змін"
 msgid "It is not allowed to revert changeset from {0}"
 msgstr "Не допускається скасування набору змін {0}"
 
+msgid "Downloading objects history"
+msgstr "Завантаження історії об’єктів"
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr "Відсутній об’єкт злиття для {0} з ідентифікатором {1}"
 
@@ -29615,6 +30373,9 @@ msgstr "Історія об’єктів"
 msgid "History reverter"
 msgstr "Повернення з історії"
 
+msgid "Tool: Display objects history dialog"
+msgstr "Інструмент: Показувати діалог історії об’єктів"
+
 msgid "Preparing history data..."
 msgstr "Підготовка даних історії…"
 
@@ -29629,7 +30390,7 @@ msgid ""
 "It is needed to download them before reverting. Do you want to continue?"
 msgstr ""
 "Цей набір змін містить об’єкти, яких немає в поточному наборі даних.\n"
-"Їх потрібно спочатку завантажити, перед тим як відмінити. Чи бажаєте "
+"Їх потрібно спочатку завантажити, перед тим як скасувати. Чи бажаєте "
 "продовжити?"
 
 msgid "Confirm"
@@ -29802,6 +30563,9 @@ msgstr "Нове значення для {0}"
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr "Параметр ''{0}'' відсутній. Неможливо ініціалізувати SdsApi."
 
+msgid "Proxy Authentication Required"
+msgstr "Потрібна проксі-автентифікація"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -29967,14 +30731,14 @@ msgid ""
 msgstr ""
 "Точки лінії (фігури) будуть вилучені, якщо всі значення <u>Angle Weight "
 "(Вага кута)</u>, <u>Area Weight (Вага площі)</u> та <u>Distance Weight (Вага "
-"відстані)</u> більші за 1. <u>Weight (Вага)</u> розраховується, як <u>Value "
+"відстані)</u> більші за 1. <u>Weight (Вага)</u> вираховується, як <u>Value "
 "(Значення)</u> / <u>Threshold (Поріг)</u>, де: <u>Value (Значення)</u> є "
 "одним зі значень <u>Angle (Кута)</u>, <u>Area (Площі)</u> та <u>Distance "
-"(Відстані)</u> розрахованих із трьох суміжних точок "
+"(Відстані)</u> вирахуваних із трьох суміжних точок "
 "лінії.<ul><li><u>Значенням</u> <u>Кута</u> є значення кута в градусах до "
 "другої точки</li><li><u>Значенням</u> <u>Площі</u> є площа "
 "трикутника</li><li><u>Значенням</u> <u>Відстані</u> є відстань Cross Track "
-"Error Distance</li></ul>Усі три <u>Ваги</u>, помножені на їх "
+"Error Distance</li></ul>Усі три <u>Ваги</u>, помножені на їхні "
 "<u>Коефіцієнти</u>, сумуються і точка з найменшою сумою вилучається першою. "
 "Вилучення триває до тих пір, доки не лишиться точок для вилучення. "
 "Об’єднання найближчих точок є наступним кроком спрощення, який зливає "
@@ -30004,6 +30768,39 @@ msgstr "Поріг злиття найближчих точок"
 msgid "SeaMap Editor"
 msgstr "Редактор морських мап"
 
+msgid "Spline drawing"
+msgstr "Креслення лекальних кривих"
+
+msgid "Draw a spline curve"
+msgstr "Накреслити лекальну криву"
+
+msgid "Spline goes outside of the world."
+msgstr "Крива виходить за межи світу."
+
+msgid "Add an existing node to spline: {0}"
+msgstr "Додати існуючу точку до кривої: {0}"
+
+msgid "Add a new node to spline: {0}"
+msgstr "Додати нову точку до кривої: {0}"
+
+msgid "Delete spline node {0}"
+msgstr "Вилучити точку кривої {0}"
+
+msgid "Finish spline"
+msgstr "Завершити криву"
+
+msgid "Splines"
+msgstr "Криві"
+
+msgid "Spline drawing preferences"
+msgstr "Налаштування креслення кривих"
+
+msgid "Curve steps"
+msgstr "Кроки кривої"
+
+msgid "Undelete node {0}"
+msgstr "Відновити вилучену точку {0}"
+
 msgid "OSM Export"
 msgstr "Експорт OSM"
 
@@ -30013,6 +30810,9 @@ msgstr "Експорт даних трафіку в файл мережі SUMO."
 msgid "SUMO Export"
 msgstr "Експорт SUMO"
 
+msgid "Export"
+msgstr "Експорт"
+
 msgid "AutoSave LiveData"
 msgstr "Автозбереження редагованих даних"
 
@@ -30263,9 +31063,6 @@ msgstr "Tracer2 помилка"
 msgid "Parameter for server request"
 msgstr "Параметри для запиту до сервера"
 
-msgid "Tile size:"
-msgstr "Розмір квадрату:"
-
 msgid "Resolution:"
 msgstr "Роздільність:"
 
@@ -30358,7 +31155,7 @@ msgstr "Завантаження підписаних даних"
 
 msgid "Warning: Ignoring exception because task was canceled. Exception: {0}"
 msgstr ""
-"Попередження: Ігнорування винятку, тому що завдання було відмінено. Виняток: "
+"Попередження: Ігнорування винятку, тому що завдання було скасовано. Виняток: "
 "{0}"
 
 msgid ""
@@ -30400,8 +31197,8 @@ msgstr "Підпис"
 
 msgid "Digital sign selected Tags, if you believe they are correct."
 msgstr ""
-"Накладання цифрового підпису на Теґи, до яких ви маєте впевненість у їх "
-"повній справжності."
+"Накладання цифрового підпису на Теґи, до яких ви маєте впевненість у їхній "
+"достовірності."
 
 msgid "Show all available signatures for selected attribute."
 msgstr "Показати всі наявні підписи для вибраного атрибута."
@@ -30765,7 +31562,7 @@ msgid "No, resolve issues first"
 msgstr "Ні, спочатку розв’язати проблеми"
 
 msgid "Cancel saving and start resolving pending issues first"
-msgstr "Відмінити збереження і спочатку розв’язати невирішені проблеми"
+msgstr "Скасувати збереження і спочатку розв’язати невирішені проблеми"
 
 msgid "Pending errors and warnings"
 msgstr "Невирішені помилки та попередження"
@@ -30973,7 +31770,7 @@ msgid ""
 "selection only.<br>Deselect to display all turn restrictions in the current "
 "data set.</html>"
 msgstr ""
-"<html>Виберіть, щоб показати лише ті обмеження поворотів, які відносяться до "
+"<html>Виберіть, щоб показати лише ті обмеження поворотів, які належать до "
 "виділених об’єктів.<br>Скасуйте вибір, щоб показати всі обмеження поворотів "
 "в поточному наборі даних.</html>"
 
@@ -31427,7 +32224,7 @@ msgid "Please select one of custom URLs (configured in Preferences)"
 msgstr "Будь ласка, виберіть один із URL (задається в Налаштуваннях)"
 
 msgid "Ask every time"
-msgstr "Запитувати кожного разу"
+msgstr "Запитувати щоразу"
 
 msgid "Configure custom URL"
 msgstr "Налаштувати URL користувача"
@@ -31953,9 +32750,6 @@ msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 "Пошук після маршрутної точки. Клацніть та потягніть мапу до маршрутної точки."
 
-msgid "Way Select"
-msgstr "Вибрати лінію"
-
 msgid "Add names from Wikipedia"
 msgstr "Додати назву з Вікіпедії"
 
diff --git a/i18n/po/ur.po b/i18n/po/ur.po
index 44e531e..14b1cd6 100644
--- a/i18n/po/ur.po
+++ b/i18n/po/ur.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
 "PO-Revision-Date: 2010-05-13 04:15+0000\n"
 "Last-Translator: Shoaib Mirza <Unknown>\n"
 "Language-Team: Urdu <ur at li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2015-05-12 05:00+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 05:05+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: ur\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -97,19 +97,16 @@ msgstr ""
 msgid "Updating user interface"
 msgstr ""
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
 msgstr ""
 
 msgid "Warning"
 msgstr "انتباہ"
 
-msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
+msgid "Ignoring malformed file URL: \"{0}\""
 msgstr ""
 
-msgid "Ignoring malformed URL: \"{0}\""
+msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr ""
 
 msgid ""
@@ -444,6 +441,9 @@ msgstr ""
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr ""
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr ""
 
@@ -1029,6 +1029,30 @@ msgstr ""
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr ""
 
+msgid "Download from Overpass API ..."
+msgstr ""
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr ""
 
@@ -1945,15 +1969,6 @@ msgstr ""
 msgid "Finish drawing."
 msgstr ""
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr ""
 
@@ -1975,6 +1990,15 @@ msgstr ""
 msgid "0,30,45,60,90,..."
 msgstr ""
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr ""
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr ""
 
@@ -2093,9 +2117,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr ""
-
 msgid "Drag play head"
 msgstr ""
 
@@ -2309,9 +2330,15 @@ msgstr ""
 msgid "Also include incomplete and deleted objects in search."
 msgstr ""
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr ""
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr ""
 
@@ -2525,6 +2552,10 @@ msgid "RX"
 msgstr ""
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr ""
 
@@ -2567,6 +2598,9 @@ msgstr ""
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr ""
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr ""
 
@@ -3017,6 +3051,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr ""
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3134,10 +3186,44 @@ msgctxt "compass"
 msgid "E"
 msgstr ""
 
-msgid "Not in cache"
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgstr ""
+
+msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr ""
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
 msgid "ID > 0 expected. Got {0}."
@@ -3327,6 +3413,12 @@ msgstr ""
 msgid "areatext"
 msgstr ""
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3354,13 +3446,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -3976,9 +4068,6 @@ msgstr ""
 msgid "Tags with empty values"
 msgstr ""
 
-msgid "Invalid property key"
-msgstr ""
-
 msgid "Invalid white space in property key"
 msgstr ""
 
@@ -3988,12 +4077,24 @@ msgstr ""
 msgid "Property values contain HTML entity"
 msgstr ""
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr ""
 
 msgid "Presets do not contain property key"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr ""
 
@@ -4174,13 +4275,13 @@ msgstr ""
 msgid "Connected way end node near other way"
 msgstr ""
 
-msgid "Untagged and unconnected nodes"
+msgid "Unconnected nodes without physical tags"
 msgstr ""
 
-msgid "This test checks for untagged nodes that are not part of any way."
+msgid "Untagged and unconnected nodes"
 msgstr ""
 
-msgid "Unconnected nodes without physical tags"
+msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
 
 msgid "No tags"
@@ -4378,6 +4479,7 @@ msgstr ""
 msgid "Imagery offset"
 msgstr ""
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
@@ -4591,43 +4693,54 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
 msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
 msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
 msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
 msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
-msgid "Menu: {0}"
+msgctxt "menu"
+msgid "Help"
 msgstr ""
 
-msgid "Save and load the current session (list of layers, etc.)"
+msgid "Menu: {0}"
 msgstr ""
 
 msgid "Edit toolbar"
@@ -4651,6 +4764,7 @@ msgstr ""
 msgid "Search menu items"
 msgstr ""
 
+msgctxt "menu"
 msgid "Audio"
 msgstr ""
 
@@ -4773,58 +4887,16 @@ msgstr ""
 msgid "Click to run job in background"
 msgstr ""
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr ""
-
-msgid "Pos."
+msgid " ({0})"
 msgstr ""
 
-msgid "Role"
+msgid "{0} completed in {1}"
 msgstr ""
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
@@ -5253,6 +5325,9 @@ msgstr ""
 msgid "Undecide conflict between deleted state"
 msgstr ""
 
+msgid "Role"
+msgstr ""
+
 msgid "Primitive"
 msgstr ""
 
@@ -5493,6 +5568,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr ""
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr ""
 
@@ -5639,6 +5717,41 @@ msgstr ""
 msgid "Resolve conflicts for ''{0}''"
 msgstr ""
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Delete objects"
+msgstr ""
+
+msgid "To delete"
+msgstr ""
+
+msgid "From Relation"
+msgstr ""
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr ""
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr ""
+
 msgid "Filter objects and hide/disable them."
 msgstr ""
 
@@ -5742,7 +5855,7 @@ msgstr ""
 msgid "map style"
 msgstr ""
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
@@ -5870,6 +5983,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr ""
 
@@ -5879,17 +5997,48 @@ msgstr ""
 msgid "unknown"
 msgstr ""
 
+msgid "Enter the coordinates for the new node."
+msgstr ""
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
 msgstr ""
 
 msgid "Projected coordinates:"
@@ -5935,6 +6084,12 @@ msgstr ""
 msgid "Adjust opacity of the layer."
 msgstr ""
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr ""
 
@@ -6064,10 +6219,16 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
-msgid "List of notes"
+msgid "Mini map"
 msgstr ""
 
-msgid "Add comment"
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
+msgid "List of notes"
+msgstr ""
+
+msgid "Add comment"
 msgstr ""
 
 msgid "Comment"
@@ -6122,10 +6283,15 @@ msgstr ""
 msgid "Enter the ID of the object that should be downloaded"
 msgstr ""
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6154,6 +6320,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr ""
 
+msgid "Selection"
+msgstr ""
+
 msgid "Open a selection list window."
 msgstr ""
 
@@ -6244,6 +6413,12 @@ msgstr ""
 msgid "Validation results"
 msgstr ""
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr ""
 
@@ -6838,6 +7013,12 @@ msgstr ""
 msgid "Launch browser with wiki help for selected object"
 msgstr ""
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6929,14 +7110,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7109,6 +7289,12 @@ msgstr ""
 msgid "Relation Editor: Sort"
 msgstr ""
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr ""
 
@@ -7644,6 +7830,9 @@ msgstr ""
 msgid "Node {0}"
 msgstr ""
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr ""
 
@@ -8489,6 +8678,106 @@ msgid_plural "{0} objects to delete:"
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Show Tile Info"
+msgstr ""
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr ""
+
+msgid "Auto load tiles"
+msgstr ""
+
+msgid "Load All Tiles"
+msgstr ""
+
+msgid "Load All Error Tiles"
+msgstr ""
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr ""
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr ""
+
+msgid "Load Tile"
+msgstr ""
+
+msgid "Increase zoom"
+msgstr ""
+
+msgid "Decrease zoom"
+msgstr ""
+
+msgid "Snap to tile size"
+msgstr ""
+
+msgid "Flush Tile Cache"
+msgstr ""
+
+msgid "zoom in to load any tiles"
+msgstr ""
+
+msgid "zoom in to load more tiles"
+msgstr ""
+
+msgid "increase zoom level to see more detail"
+msgstr ""
+
+msgid "No tiles at this zoom level"
+msgstr ""
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr ""
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr ""
+
+msgid "Details..."
+msgstr ""
+
+msgid "Hide this message and never show it again"
+msgstr ""
+
 msgid "Customize Color"
 msgstr ""
 
@@ -8542,6 +8831,9 @@ msgstr ""
 msgid "Imagery fade"
 msgstr ""
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr ""
 
@@ -8562,7 +8854,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8645,80 +8937,6 @@ msgstr ""
 msgid "Save OSM file"
 msgstr ""
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-
-msgid "Auto Zoom"
-msgstr ""
-
-msgid "Auto load tiles"
-msgstr ""
-
-msgid "Show Errors"
-msgstr ""
-
-msgid "Load Tile"
-msgstr ""
-
-msgid "Show Tile Info"
-msgstr ""
-
-msgid "Load All Tiles"
-msgstr ""
-
-msgid "Load All Error Tiles"
-msgstr ""
-
-msgid "Increase zoom"
-msgstr ""
-
-msgid "Decrease zoom"
-msgstr ""
-
-msgid "Snap to tile size"
-msgstr ""
-
-msgid "Flush Tile Cache"
-msgstr ""
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
@@ -8728,56 +8946,30 @@ msgstr ""
 msgid "No validation errors"
 msgstr ""
 
-msgid "Blank Layer"
-msgstr ""
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "Download visible tiles"
+msgid "Set WMS Bookmark"
 msgstr ""
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-
-msgid "Change resolution"
-msgstr ""
-
-msgid "Reload erroneous tiles"
-msgstr ""
-
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Automatic downloading"
+msgid "Correlate to GPX"
 msgstr ""
 
-msgid "Zoom to native resolution"
+msgid "Invalid timezone"
 msgstr ""
 
-msgid "Supported projections are: {0}"
+msgid "Invalid offset"
 msgstr ""
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgid "Correlate images with GPX track"
 msgstr ""
 
-msgid "Save WMS file"
+msgid "Try Again"
 msgstr ""
 
-msgid "Correlate to GPX"
+msgid "No images could be matched!"
 msgstr ""
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
@@ -8864,24 +9056,9 @@ msgstr ""
 msgid "Offset:"
 msgstr ""
 
-msgid "Correlate images with GPX track"
-msgstr ""
-
 msgid "Correlate"
 msgstr ""
 
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
-
 msgid "No gpx selected"
 msgstr ""
 
@@ -9075,9 +9252,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr ""
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9140,9 +9314,6 @@ msgstr ""
 msgid "Maximum area per request:"
 msgstr ""
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr ""
 
@@ -9768,15 +9939,15 @@ msgstr ""
 msgid "Save the preferences and close the dialog"
 msgstr ""
 
-msgid "Download plugins"
-msgstr ""
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr ""
 
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr ""
+
 msgid "Icon paths:"
 msgstr ""
 
@@ -10569,13 +10740,28 @@ msgstr ""
 msgid "No bounding box was found for this layer."
 msgstr ""
 
-msgid "imagery fade"
+msgid "1. Enter getCapabilities URL"
 msgstr ""
 
-msgid "Fade Color: "
+msgid "2. Enter name for this layer"
 msgstr ""
 
-msgid "Fade amount: "
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
+msgid "imagery fade"
+msgstr ""
+
+msgid "Fade Color: "
+msgstr ""
+
+msgid "Fade amount: "
 msgstr ""
 
 msgid "Soft"
@@ -10587,6 +10773,18 @@ msgstr ""
 msgid "Sharpen (requires layer re-add): "
 msgstr ""
 
+msgid "Tile cache directory: "
+msgstr ""
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr ""
 
@@ -10608,6 +10806,9 @@ msgstr ""
 msgid "Offset bookmarks"
 msgstr ""
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10650,9 +10851,6 @@ msgstr ""
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr ""
 
-msgid "Projection"
-msgstr ""
-
 msgid "Layer"
 msgstr ""
 
@@ -10677,36 +10875,21 @@ msgstr ""
 msgid "Add to slippymap chooser: "
 msgstr ""
 
-msgid "Tile cache directory: "
-msgstr ""
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
 
-msgid "Downloader:"
-msgstr ""
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
-
-msgid "% of north:"
+msgid "Tile size:"
 msgstr ""
 
 msgid "Auto save enabled"
@@ -11642,6 +11825,14 @@ msgstr ""
 msgid "New relation"
 msgstr ""
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] ""
@@ -11750,6 +11941,9 @@ msgstr ""
 msgid "Search presets"
 msgstr ""
 
+msgid "Presets"
+msgstr ""
+
 msgid "Search for objects by preset"
 msgstr ""
 
@@ -12003,6 +12197,9 @@ msgstr ""
 msgid "GeoJSON Files"
 msgstr ""
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12539,6 +12736,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr ""
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12924,6 +13124,19 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13918,6 +14131,9 @@ msgstr ""
 msgid "Update directory listing."
 msgstr ""
 
+msgid "View"
+msgstr ""
+
 msgid "Blue:"
 msgstr ""
 
@@ -13957,7 +14173,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -13969,9 +14185,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14080,6 +14293,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14093,12 +14309,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14135,10 +14357,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14165,6 +14393,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14189,7 +14420,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14204,6 +14435,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14216,12 +14450,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14242,6 +14470,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14274,10 +14505,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14307,6 +14535,12 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
+msgstr ""
+
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr ""
+
 msgid "OSMIE Townlands"
 msgstr ""
 
@@ -14322,154 +14556,160 @@ msgstr ""
 msgid "OSMIE Political"
 msgstr ""
 
-msgid "Ireland EEA GMES Urban Atlas"
+msgid "Lodi - Italy"
 msgstr ""
 
-msgid "Ireland EEA CORINE 2006"
+msgid "Lombardia - Italy (CTR)"
 msgstr ""
 
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Sicily - Italy"
 msgstr ""
 
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgid "PCN 2006 - Italy"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
+msgid "PCN 2008 - IT Lazio+Umbria"
 msgstr ""
 
-msgid "Clare Civil Parishes and Baronies"
+msgid "PCN 2012 - Italy"
 msgstr ""
 
-msgid "Dublin Civil Parishes and Baronies"
+msgid "South Tyrol Orthofoto 2011"
 msgstr ""
 
-msgid "Fermanagh Civil Parishes and Baronies"
+msgid "South Tyrol Topomap"
 msgstr ""
 
-msgid "Galway Civil Parishes and Baronies"
+msgid "USSR - Latvia"
 msgstr ""
 
-msgid "Kildare Civil Parishes and Baronies"
+msgid "50cm ortho - Latvia"
 msgstr ""
 
-msgid "Leitrim Civil Parishes and Baronies"
+msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
-msgid "Longford Civil Parishes and Baronies"
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
-msgid "Offaly Civil Parishes and Baronies"
+msgid "ORT10LT (Lithuania)"
 msgstr ""
 
-msgid "Sligo Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2010"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Ortho 2013"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Railway"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Roads"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
-msgid "Lodi - Italy"
+msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
-msgid "Lombardia - Italy (CTR)"
+msgid "Gaza Strip - Pléiades - 2014/07/06"
 msgstr ""
 
-msgid "Sicily - Italy"
+msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
 msgstr ""
 
-msgid "PCN 2006 - Italy"
+msgid "Pangasinán/Bulacan (Phillipines HiRes)"
 msgstr ""
 
-msgid "PCN 2008 - IT Lazio+Umbria"
+msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "PCN 2012 - Italy"
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
-msgid "South Tyrol Orthofoto 2011"
+msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
-msgid "South Tyrol Topomap"
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
-msgid "USSR - Latvia"
+msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "50cm ortho - Latvia"
+msgid "Będzin: Budynki (buildings)"
 msgstr ""
 
-msgid "20cm ortho - Latvia - Coastline"
+msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
-msgid "ORT10LT (Lithuania)"
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2010"
+msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Ortho 2013"
+msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Railway"
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
-msgid "Luxembourg Inspire Roads"
+msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
-msgid "Niger Delta Oct 2012 Landsat"
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
-msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Pangasinán/Bulacan (Phillipines HiRes)"
+msgid "Gliwice: Budynki (buildings)"
 msgstr ""
 
-msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Geoportal 2: PRNG (geo names)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Ortofotomapa 2013 (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Będzin: Budynki (buildings)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Bytom: Budynki (buildings)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Chorzów: Budynki (buildings)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Gliwice: Budynki (buildings)"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Katowice: Ortofotomapa (aerial image)"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
 msgstr ""
 
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
@@ -14484,9 +14724,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14616,6 +14865,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14631,7 +14895,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -14957,6 +15221,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr ""
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15041,11 +15310,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15099,7 +15363,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15114,9 +15378,6 @@ msgstr ""
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr ""
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
 
@@ -15197,6 +15458,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr ""
 
@@ -15235,6 +15504,9 @@ msgstr ""
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15310,9 +15582,6 @@ msgstr ""
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr ""
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15718,6 +15987,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15742,10 +16019,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15762,6 +16035,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15778,11 +16055,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15798,6 +16087,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15810,6 +16103,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15837,6 +16134,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr ""
 
@@ -16228,6 +16537,9 @@ msgstr ""
 msgid "Unclassified"
 msgstr ""
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16304,6 +16616,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr ""
 
@@ -16841,6 +17156,12 @@ msgstr ""
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17030,6 +17351,11 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
+msgid "Water"
+msgstr ""
+
+msgctxt "sub group"
 msgid "Water"
 msgstr ""
 
@@ -17083,6 +17409,10 @@ msgstr ""
 msgid "Covered Reservoir"
 msgstr ""
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17224,13 +17554,127 @@ msgstr ""
 msgid "public"
 msgstr ""
 
-msgid "Pier"
+msgid "Marine Fuel"
 msgstr ""
 
-msgid "Lock Gate"
+msgid "Agip"
 msgstr ""
 
-msgid "Turning Point"
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr ""
+
+msgid "Independent"
+msgstr ""
+
+msgid "Fuel types:"
+msgstr ""
+
+msgid "Diesel"
+msgstr ""
+
+msgid "Bio Diesel"
+msgstr ""
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr ""
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr ""
+
+msgid "Pier"
+msgstr ""
+
+msgid "Lock Gate"
+msgstr ""
+
+msgid "Turning Point"
 msgstr ""
 
 msgid "Slipway"
@@ -17340,6 +17784,9 @@ msgstr ""
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr ""
 
@@ -17463,78 +17910,6 @@ msgstr ""
 msgid "Fuel"
 msgstr ""
 
-msgid "Agip"
-msgstr ""
-
-msgid "Aral"
-msgstr ""
-
-msgid "Avia"
-msgstr ""
-
-msgid "BP"
-msgstr ""
-
-msgid "Chevron"
-msgstr ""
-
-msgid "Citgo"
-msgstr ""
-
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr ""
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Independent"
-msgstr ""
-
 msgid "With shop"
 msgstr ""
 
@@ -17544,51 +17919,12 @@ msgstr ""
 msgid "kiosk"
 msgstr ""
 
-msgid "Fuel types:"
-msgstr ""
-
-msgid "Diesel"
-msgstr ""
-
-msgid "Bio Diesel"
-msgstr ""
-
 msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
 msgid "Diesel for Heavy Good Vehicles"
 msgstr ""
 
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
-
 msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
@@ -17807,9 +18143,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr ""
-
 msgid "stop position"
 msgstr ""
 
@@ -17828,6 +18161,9 @@ msgstr ""
 msgid "platform (entry only)"
 msgstr ""
 
+msgid "route segment"
+msgstr ""
+
 msgid "Route Master"
 msgstr ""
 
@@ -18030,6 +18366,12 @@ msgstr ""
 msgid "Stars"
 msgstr ""
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr ""
 
@@ -18120,6 +18462,9 @@ msgstr ""
 msgid "sushi"
 msgstr ""
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18334,6 +18679,9 @@ msgstr ""
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr ""
 
@@ -18821,7 +19169,7 @@ msgstr ""
 msgid "Shows humidity"
 msgstr ""
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
@@ -18830,43 +19178,70 @@ msgstr ""
 msgid "Cans"
 msgstr ""
 
-msgid "Glass"
+msgid "Cardboard"
 msgstr ""
 
-msgid "Paper"
+msgid "Electrical Appliances"
 msgstr ""
 
-msgid "Scrap Metal"
+msgid "Glass"
 msgstr ""
 
-msgid "container"
+msgid "Glass Bottles"
 msgstr ""
 
-msgid "centre"
+msgid "Green Waste"
 msgstr ""
 
-msgid "Waste Basket/Trash Can"
+msgid "Paper"
 msgstr ""
 
-msgid "Waste Disposal/Dumpster"
+msgid "Plastic"
 msgstr ""
 
-msgid "Sanitary Dump Station"
+msgid "Plastic Bottles"
 msgstr ""
 
-msgid "Suction pumpout"
+msgid "Plastic Packaging"
 msgstr ""
 
-msgid "Gravity drain for hose"
+msgid "Scrap Metal"
 msgstr ""
 
-msgid "Casette or Elsan Disposal"
+msgid "Shoes"
 msgstr ""
 
-msgid "Operation times"
+msgid "Small Appliances"
 msgstr ""
 
-msgid "Backrest"
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
+msgstr ""
+
+msgid "Waste Basket/Trash Can"
+msgstr ""
+
+msgid "Waste Disposal/Dumpster"
+msgstr ""
+
+msgid "Sanitary Dump Station"
+msgstr ""
+
+msgid "Suction pumpout"
+msgstr ""
+
+msgid "Gravity drain for hose"
+msgstr ""
+
+msgid "Casette or Elsan Disposal"
+msgstr ""
+
+msgid "Operation times"
+msgstr ""
+
+msgid "Backrest"
 msgstr ""
 
 msgid "Amount of Seats"
@@ -19046,6 +19421,9 @@ msgstr ""
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr ""
 
@@ -19221,12 +19599,18 @@ msgstr ""
 msgid "Basketball"
 msgstr ""
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr ""
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr ""
 
@@ -19242,13 +19626,13 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
+msgid "Croquet"
 msgstr ""
 
-msgid "Croquet"
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
@@ -19272,9 +19656,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19293,9 +19674,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr ""
 
@@ -19368,6 +19746,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20688,9 +21074,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr ""
-
 msgid "Outdoor"
 msgstr ""
 
@@ -21703,10 +22086,10 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
+msgid "Email Address"
 msgstr ""
 
-msgid "Email Address"
+msgid "Fax Number"
 msgstr ""
 
 msgid "Image"
@@ -22133,6 +22516,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22157,6 +22543,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22217,6 +22615,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22307,9 +22708,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22679,6 +23089,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22733,9 +23146,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23479,47 +23889,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23528,10 +23947,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24134,6 +24565,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr ""
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr ""
 
@@ -25231,374 +25665,680 @@ msgid ""
 "highlight tracks"
 msgstr ""
 
-msgid "Delete this"
+msgid "Delete this"
+msgstr ""
+
+msgid "Delete this&older"
+msgstr ""
+
+msgid "km/h"
+msgstr ""
+
+msgid "Track name: "
+msgstr ""
+
+msgid "Update IRS adjustment layer"
+msgstr ""
+
+msgid ""
+"This option creates IRS adjustment layer and a little way inside it. You "
+"need to adjust WMS layer placement first.\n"
+"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
+"with [irs rectify] in subject."
+msgstr ""
+
+msgid "IRS Adjustment Layer"
+msgstr ""
+
+msgid "Channel-Digraph created from the active OSM-Layer"
+msgstr ""
+
+msgid "Create Channel Digraph"
+msgstr ""
+
+msgid "this layer is no osm data layer"
+msgstr ""
+
+msgid "Converting OSM graph into Channel Digraph"
+msgstr ""
+
+msgid "filtering ways"
+msgstr ""
+
+msgid "creating Channel-Digraph"
+msgstr ""
+
+msgid "sealing Digraph"
+msgstr ""
+
+msgid "calculating Strong Connectedness"
+msgstr ""
+
+msgid "creating DigraphLayer"
+msgstr ""
+
+msgid "JunctionChecking"
+msgstr ""
+
+msgid "Open the junctionchecking window."
+msgstr ""
+
+msgid "junctions"
+msgstr ""
+
+msgid "Channel-Digraph creation"
+msgstr ""
+
+msgid "seal Channel Digraph"
+msgstr ""
+
+msgid "calculate strong connected channels"
+msgstr ""
+
+msgid "Junctionchecking/junctions searching"
+msgstr ""
+
+msgid "order of junction (n):"
+msgstr ""
+
+msgid "produce OSM-Relations: junction"
+msgstr ""
+
+msgid ""
+"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgstr ""
+
+msgid "create the channel digraph"
+msgstr ""
+
+msgid "Check "
+msgstr ""
+
+msgid "check the subust for junction properties"
+msgstr ""
+
+msgid "Search "
+msgstr ""
+
+msgid "search for junctions in the channel subset"
+msgstr ""
+
+msgid ""
+"The marked channels contains a junctioncandidate (white). To test this "
+"candidat mark these channel and press the \"Check\" button again."
+msgstr ""
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr ""
+
+msgid "The marked channels are not a junction:"
+msgstr ""
+
+msgid "construct channel digraph and search for junctions"
+msgstr ""
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr ""
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr ""
+
+msgid "Direction index ''{0}'' not found"
+msgstr ""
+
+msgid "The starting location was not within the bbox"
+msgstr ""
+
+msgid "Looking for shoreline..."
+msgstr ""
+
+msgid "{0} nodes so far..."
+msgstr ""
+
+msgid "Lake Walker."
+msgstr ""
+
+msgid "Lake Walker"
+msgstr ""
+
+msgid "Error creating cache directory: {0}"
+msgstr ""
+
+msgid "Tracing"
+msgstr ""
+
+msgid "checking cache..."
+msgstr ""
+
+msgid "Running vertex reduction..."
+msgstr ""
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr ""
+
+msgid "Removing duplicate nodes..."
+msgstr ""
+
+msgid "Lakewalker trace"
+msgstr ""
+
+msgid "An unknown error has occurred"
+msgstr ""
+
+msgid "east"
+msgstr ""
+
+msgid "northeast"
+msgstr ""
+
+msgid "north"
+msgstr ""
+
+msgid "northwest"
+msgstr ""
+
+msgid "west"
+msgstr ""
+
+msgid "southwest"
+msgstr ""
+
+msgid "south"
+msgstr ""
+
+msgid "southeast"
+msgstr ""
+
+msgid "coastline"
+msgstr ""
+
+msgid "land"
+msgstr ""
+
+msgid "Maximum number of segments per way"
+msgstr ""
+
+msgid "Maximum number of nodes in initial trace"
+msgstr ""
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr ""
+
+msgid "Line simplification accuracy (degrees)"
+msgstr ""
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr ""
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr ""
+
+msgid "Shift all traces to east (degrees)"
+msgstr ""
+
+msgid "Shift all traces to north (degrees)"
+msgstr ""
+
+msgid "Direction to search for land"
+msgstr ""
+
+msgid "Tag ways as"
+msgstr ""
+
+msgid "WMS Layer"
+msgstr ""
+
+msgid "Maximum cache size (MB)"
+msgstr ""
+
+msgid "Maximum cache age (days)"
+msgstr ""
+
+msgid "Source text"
+msgstr ""
+
+msgid "Lakewalker Plugin Preferences"
+msgstr ""
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr ""
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr ""
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr ""
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr ""
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr ""
+
+msgid "Direction to search for land. Default east."
+msgstr ""
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr ""
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr ""
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr ""
+
+msgid "Data source text. Default is Landsat."
+msgstr ""
+
+msgid "Downloading image tile..."
+msgstr ""
+
+msgid "Could not acquire image"
+msgstr ""
+
+msgid "Connection Failed"
+msgstr ""
+
+msgid "Not connected"
 msgstr ""
 
-msgid "Delete this&older"
+msgid "Connecting"
 msgstr ""
 
-msgid "km/h"
+msgid "Connected"
 msgstr ""
 
-msgid "Track name: "
+msgid "no name"
 msgstr ""
 
-msgid "Update IRS adjustment layer"
+msgid "Live GPS"
 msgstr ""
 
-msgid ""
-"This option creates IRS adjustment layer and a little way inside it. You "
-"need to adjust WMS layer placement first.\n"
-"Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
-"with [irs rectify] in subject."
+msgid "Show GPS data."
 msgstr ""
 
-msgid "IRS Adjustment Layer"
+msgid "Status"
 msgstr ""
 
-msgid "Channel-Digraph created from the active OSM-Layer"
+msgid "Way Info"
 msgstr ""
 
-msgid "Create Channel Digraph"
+msgid "Speed"
 msgstr ""
 
-msgid "this layer is no osm data layer"
+msgid "Course"
 msgstr ""
 
-msgid "Converting OSM graph into Channel Digraph"
+msgid "LiveGPS layer"
 msgstr ""
 
-msgid "filtering ways"
+msgid "Capture GPS Track"
 msgstr ""
 
-msgid "creating Channel-Digraph"
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
 msgstr ""
 
-msgid "sealing Digraph"
+msgid "Center Once"
 msgstr ""
 
-msgid "calculating Strong Connectedness"
+msgid "Center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "creating DigraphLayer"
+msgid "Auto-Center"
 msgstr ""
 
-msgid "JunctionChecking"
+msgid "Continuously center the LiveGPS layer to current position."
 msgstr ""
 
-msgid "Open the junctionchecking window."
+msgid "Open MapDust"
 msgstr ""
 
-msgid "junctions"
+msgid "MapDust bug reports"
 msgstr ""
 
-msgid "Channel-Digraph creation"
+msgid "Activates the MapDust bug reporter plugin"
 msgstr ""
 
-msgid "seal Channel Digraph"
+msgid "Missing input data"
 msgstr ""
 
-msgid "calculate strong connected channels"
+msgid "Mapillary Images"
 msgstr ""
 
-msgid "Junctionchecking/junctions searching"
+msgid "Mapillary layer"
 msgstr ""
 
-msgid "order of junction (n):"
+msgid "Total images:"
 msgstr ""
 
-msgid "produce OSM-Relations: junction"
+msgid "images"
 msgstr ""
 
-msgid ""
-"if enabled the plugin produces osm-relations from the junction subgraphs"
+msgid "Mapillary"
 msgstr ""
 
-msgid "create the channel digraph"
+msgid "Create Mapillary layer"
 msgstr ""
 
-msgid "Check "
+msgid "Start Mapillary layer"
 msgstr ""
 
-msgid "check the subust for junction properties"
+msgid "Download Mapillary images in current view"
 msgstr ""
 
-msgid "Search "
+msgid "Export pictures"
 msgstr ""
 
-msgid "search for junctions in the channel subset"
+msgid "Export Mapillary pictures"
 msgstr ""
 
-msgid ""
-"The marked channels contains a junctioncandidate (white). To test this "
-"candidat mark these channel and press the \"Check\" button again."
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Import pictures"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Select pictures"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Join mode"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "Tracing"
+msgid "Walk mode"
 msgstr ""
 
-msgid "checking cache..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "View in website"
 msgstr ""
 
-msgid "east"
+msgid "Copy key"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "north"
+msgid "Edit on website"
 msgstr ""
 
-msgid "northwest"
+msgid "Export all images"
 msgstr ""
 
-msgid "west"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected images"
 msgstr ""
 
-msgid "south"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "southeast"
+msgid "Select a folder"
 msgstr ""
 
-msgid "coastline"
+msgid "Explore"
 msgstr ""
 
-msgid "land"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Give way"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "No entry"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "No parking"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No overtaking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Months"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Days"
 msgstr ""
 
-msgid "Source text"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Next picture"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Play"
 msgstr ""
 
-msgid "Not connected"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connecting"
+msgid "Pause"
 msgstr ""
 
-msgid "Connected"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "no name"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Status"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Way Info"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Speed"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "Course"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Go forward"
 msgstr ""
 
-msgid "Center Once"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid "Downloading"
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Select mode"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25619,6 +26359,9 @@ msgstr ""
 msgid "Selection Area"
 msgstr ""
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr ""
 
@@ -25677,47 +26420,6 @@ msgstr ""
 msgid "Unable to find via nodes. Please check your selection"
 msgstr ""
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr ""
 
@@ -25950,6 +26652,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr ""
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27167,6 +27872,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr ""
 
@@ -27338,6 +28064,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr ""
 
@@ -27347,6 +28076,9 @@ msgstr ""
 msgid "History reverter"
 msgstr ""
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr ""
 
@@ -27527,6 +28259,9 @@ msgstr ""
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27705,6 +28440,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr ""
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27714,6 +28482,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr ""
 
@@ -27950,9 +28721,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29435,9 +30203,6 @@ msgstr ""
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
 
-msgid "Way Select"
-msgstr ""
-
 msgid "Add names from Wikipedia"
 msgstr ""
 
diff --git a/i18n/po/vi.po b/i18n/po/vi.po
index 012f6b3..04deedd 100644
--- a/i18n/po/vi.po
+++ b/i18n/po/vi.po
@@ -7,122 +7,124 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
-"PO-Revision-Date: 2013-03-13 05:33+0000\n"
-"Last-Translator: Minh Nguyễn <mxn at 1ec5.org>\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
+"PO-Revision-Date: 2015-05-14 20:17+0000\n"
+"Last-Translator: Mạnh <laituanmanh32 at gmail.com>\n"
 "Language-Team: Vietnamese <vi at li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2015-05-12 05:01+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 05:05+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: vi\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
-msgstr ""
+msgstr "{0}: tùy chọn '' {1} '' là mơ hồ"
 
 msgid "{0}: option ''--{1}'' does not allow an argument"
-msgstr ""
+msgstr "{0}: tùy chọn '' - {1} '' không cho phép một đối số"
 
 msgid "{0}: option ''{1}{2}'' does not allow an argument"
-msgstr ""
+msgstr "{0}: tùy chọn '' {1} {2} '' không cho phép một đối số"
 
 msgid "{0}: option ''{1}'' requires an argument"
-msgstr ""
+msgstr "{0}: tùy chọn '' {1} '' yêu cầu một tham số"
 
 msgid "{0}: unrecognized option ''--{1}''"
-msgstr ""
+msgstr "{0}: tùy chọn không được công nhận '' - {1} ''"
 
 msgid "{0}: unrecognized option ''{1}{2}''"
-msgstr ""
+msgstr "{0}: không nhận diện tùy chọn '' {1} {2} ''"
 
 msgid "{0}: illegal option -- {1}"
-msgstr ""
+msgstr "{0}: lựa chọn bất hợp pháp - {1}"
 
 msgid "{0}: invalid option -- {1}"
-msgstr ""
+msgstr "{0}: tùy chọn không hợp lệ - {1}"
 
 msgid "{0}: option requires an argument -- {1}"
-msgstr ""
+msgstr "{0}: tùy chọn yêu cầu một đối số - {1}"
 
 msgid "Invalid value {0} for parameter ''has_arg''"
-msgstr ""
+msgstr "không hợp lệ giá trị {0} cho tham số '' has_arg ''"
 
 msgid "Background Terms of Use"
-msgstr "Điều khoản Sử dụng Hình nền"
+msgstr "Background Điều khoản sử dụng"
 
 msgid "Opening link not supported on current platform (''{0}'')"
-msgstr "Liên kết đang mở không được hỗ trợ trên phiên bản (''{0}'')"
+msgstr "liên kết mạc không được hỗ trợ trên nền tảng hiện tại ('' {0} '')"
 
 msgid "ERROR: {0}"
-msgstr ""
+msgstr "LỖI: {0}"
 
 msgid "WARNING: {0}"
-msgstr ""
+msgstr "CẢNH BÁO: {0}"
 
 msgid "INFO: {0}"
-msgstr ""
+msgstr "INFO: {0}"
 
 msgid "DEBUG: {0}"
-msgstr ""
+msgstr "DEBUG: {0}"
 
 msgid "Cause: "
-msgstr ""
+msgstr "Nguyên nhân: "
 
 msgid "Executing platform startup hook"
-msgstr ""
+msgstr "nền tảng Thi startup móc"
 
 msgid "Building main menu"
-msgstr "Đang xây trình đơn chính"
+msgstr "Xây dựng trình đơn chính"
 
 msgid "Help"
-msgstr "Trợ giúp"
+msgstr "Help"
 
 msgid "Initializing OSM API"
-msgstr ""
+msgstr "Đang khởi tạo OSM API"
 
 msgid "Initializing validator"
-msgstr ""
+msgstr "Đang khởi tạo trình xác nhận"
 
 msgid "Initializing presets"
-msgstr ""
+msgstr "Đang khởi tạo cài đặt trước"
 
 msgid "Initializing map styles"
-msgstr ""
+msgstr "Đang khởi tạo phong cách đồ"
 
 msgid "Loading imagery preferences"
-msgstr "Đang tải tùy chỉnh hình ảnh"
+msgstr "sở thích tải hình ảnh"
 
 msgid "Updating user interface"
-msgstr "Đang cập nhật giao diện"
+msgstr "Đang cập nhật giao diện người dùng"
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "Bỏ qua đường dẫn đến tập tin nguy hại:{0}"
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "Bỏ qua URL không hợp lệ: \" {0} \""
 
 msgid "Warning"
 msgstr "Cảnh báo"
 
-msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
-msgstr "Thông số \"downloadgps\" không chấp nhận tên file hoặc URL"
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "Bỏ qua URL tập tin bị thay đổi: \" {0} \""
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "Bỏ qua liên kết xấu: \"{0}\""
+msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
+msgstr ""
+"Thông số \" downloadgps \"không chấp nhận các tên file hoặc URL tập tin"
 
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
 "compatible) version of JOSM.</li></ul>More Info:"
 msgstr ""
+"<H2> JOSM đòi hỏi phiên bản Java {0} </ h2> Phát hiện phiên bản Java:.. {1} "
+"<br> YouCó thể <ul> <li> cập nhật Java của bạn (JRE) hoặc </ li> <li> sử "
+"dụng một đầu (Java {2}Tương thích) phiên bản của JOSM </ li> </ ul> More "
+"Info:."
 
 msgid "Exit JOSM"
 msgstr "Thoát JOSM"
 
 msgid "Continue, try anyway"
-msgstr ""
+msgstr "Tiếp tục, cố gắng thử lại"
 
 msgid "Error"
 msgstr "Lỗi"
@@ -131,46 +133,46 @@ msgid "About"
 msgstr "Giới thiệu"
 
 msgid "Display the about screen."
-msgstr "Hiển thị màn hình \"Giới thiệu\""
+msgstr "Hiển thị về màn hình."
 
 msgid "Java OpenStreetMap Editor"
-msgstr "Công cụ biên tập Java OpenStreetMap"
+msgstr "Java OpenStreetMap Editor"
 
 msgid "Version {0}"
 msgstr "Phiên bản {0}"
 
 msgid "Last change at {0}"
-msgstr "Lần thay đổi mới nhất lúc {0}"
+msgstr "thay đổi cuối tại {0}"
 
 msgid "Java Version {0}"
-msgstr "Phiên bản Java {0}"
+msgstr "Java Version {0}"
 
 msgid "Homepage"
-msgstr "Trang chủ"
+msgstr "Homepage"
 
 msgid "Bug Reports"
-msgstr "Báo Bug"
+msgstr "Báo cáo Bug"
 
 msgid "Info"
 msgstr "Thông tin"
 
 msgid "Readme"
-msgstr "Hướng dẫn trước khi sử dụng"
+msgstr "Readme"
 
 msgid "Revision"
-msgstr "Bản sửa đổi"
+msgstr "Sửa đổi"
 
 msgid "Contribution"
 msgstr "Đóng góp"
 
 msgid "License"
-msgstr "Bản quyền"
+msgstr "Giấy phép"
 
 msgid "Plugins"
-msgstr "Phần mở rộng"
+msgstr "Plugins"
 
 msgid "About JOSM..."
-msgstr "Thông tin về JOSM..."
+msgstr "Về JOSM ..."
 
 msgid ""
 "You are about to launch {0} browser window.<br>This may both clutter your "
@@ -179,42 +181,46 @@ msgid_plural ""
 "You are about to launch {0} browser windows.<br>This may both clutter your "
 "screen with browser windows<br>and take some time to finish."
 msgstr[0] ""
-msgstr[1] ""
+"Bạn muốn khởi động {0} cửa sổ trình duyệt. <br> Điều này có thể cả lộn xộn "
+"của bạnMàn hình với các cửa sổ trình duyệt <br> và mất một thời gian để kết "
+"thúc."
 
 msgid "Continue"
 msgstr "Tiếp tục"
 
 msgid "Click to continue and to open {0} browser"
 msgid_plural "Click to continue and to open {0} browsers"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Nhấn vào đây để tiếp tục và mở {0} duyệt"
 
 msgid "Cancel"
-msgstr "Huỷ bỏ"
+msgstr "Hủy bỏ"
 
 msgid "Click to abort launching external browsers"
-msgstr "Nhấp chuột vào đây để đóng các trình duyện ngoài"
+msgstr "Nhấn vào đây để hủy bỏ tung ra trình duyệt bên ngoài"
 
 msgid "Please select at least one already uploaded node, way, or relation."
-msgstr "Hãy chọn ít nhất một node, đường hoặc relation đã được upload"
+msgstr ""
+"Hãy chọn ít nhất một trong những đã được tải lên nút, cách nào, hay một quan "
+"hệ."
 
 msgid "Please select the target layer."
-msgstr "Hãy chọn layer đích"
+msgstr "Hãy chọn layer mục tiêu."
 
 msgid "Select target layer"
-msgstr "Chọn layer đích"
+msgstr "Chọn layer mục tiêu"
 
 msgid "Merge"
-msgstr "Gộp"
+msgstr "Merge"
 
 msgid ""
 "<html>There are no layers the source layer<br>''{0}''<br>could be merged "
 "to.</html>"
 msgstr ""
-"<html>Không có layer nguồn nào <br>''{0}''<br>được merged vào.</html>"
+"<html>There are no layers the source layer<br>''{0}''<br>could be merged "
+"to.</html>"
 
 msgid "No target layers"
-msgstr "Không có layer đích"
+msgstr "Không có lớp mục tiêu"
 
 msgid "Select"
 msgstr "Chọn"
@@ -222,12 +228,14 @@ msgstr "Chọn"
 msgid ""
 "Set the selected elements on the map to the selected items in the list above."
 msgstr ""
+"Thiết lập các thành phần được chọn trên bản đồ cho các mục được chọn trong "
+"danh sách trên."
 
 msgid "Add imagery layer {0}"
-msgstr "Thêm lớp ảnh {0}"
+msgstr "Add layer hình ảnh {0}"
 
 msgid "Select image format for WMS layer"
-msgstr ""
+msgstr "Chọn định dạng hình ảnh cho lớp WMS"
 
 msgid "Select WMS layers"
 msgstr "Chọn lớp WMS"
@@ -239,7 +247,7 @@ msgid "Invalid service URL."
 msgstr "URL dịch vụ không hợp lệ."
 
 msgid "WMS Error"
-msgstr "Lỗi WMS"
+msgstr "WMS Error"
 
 msgid "Could not retrieve WMS layer list."
 msgstr "Không thể lấy danh sách lớp WMS."
@@ -248,59 +256,64 @@ msgid "Could not parse WMS layer list."
 msgstr "Không thể phân tích danh sách lớp WMS."
 
 msgid "Add Node..."
-msgstr "Thêm Nút"
+msgstr "Add Node ..."
 
 msgid "Add a node by entering latitude / longitude or easting / northing."
 msgstr ""
+"Thêm một nút bằng cách nhập vĩ độ / kinh độ hoặc đường về hướng đông / đường "
+"đi về hướng bắc."
 
 msgid "Edit: {0}"
-msgstr "Sửa {0}"
+msgstr "Edit: {0}"
 
 msgid "Align Nodes in Circle"
-msgstr "Canh các nốt theo Vòng tròn"
+msgstr "Align Nodes trong Circle"
 
 msgid "Move the selected nodes into a circle."
-msgstr "Di chuyển các nốt đã chọn vào trong vòng tròn"
+msgstr "Di chuyển các nút được chọn vào một vòng tròn."
 
 msgid "Tool: {0}"
-msgstr "Công cụ {0}"
+msgstr "Công cụ: {0}"
 
 msgid "Not enough nodes in selected ways."
-msgstr ""
+msgstr "Không đủ các nút trong cách lựa chọn."
 
 msgid "Please select at least four nodes."
-msgstr "Xin hãy chọn ít nhất 4 nốt"
+msgstr "Hãy chọn ít nhất bốn nút."
 
 msgid "Cannot determine center of selected nodes."
-msgstr ""
+msgstr "Không thể xác định trung tâm của các nút lựa chọn."
 
 msgid ""
 "One or more nodes involved in this action is outside of the downloaded area."
 msgstr ""
+"Một hoặc nhiều hơn các nút tham gia vào hành động này là bên ngoài của khu "
+"vực được tải về."
 
 msgid "Align Nodes in Line"
-msgstr "Canh các nốt theo đường"
+msgstr "Align Nodes trong Line"
 
 msgid "Move the selected nodes in to a line."
-msgstr "Di chuyển các nốt đã chọn vào 1 đường"
+msgstr "Di chuyển các nút được chọn vào một đường."
 
 msgid "Please select at least three nodes."
-msgstr "Xin hãy chọn ít nhất 3 nốt"
+msgstr "Hãy chọn ít nhất ba nút."
 
 msgid "Can not align a polygon. Abort."
-msgstr ""
+msgstr "Không thể sắp xếp một đa giác. Abort."
 
 msgid "Intersection of three or more ways can not be solved. Abort."
 msgstr ""
+"Giao điểm của ba hoặc nhiều hơn những cách không thể được giải quyết. Abort."
 
 msgid "Two parallels ways found. Abort."
-msgstr ""
+msgstr "Hai song song cách tìm thấy. Abort."
 
 msgid "data"
 msgstr "dữ liệu"
 
 msgid "layer"
-msgstr "lớp"
+msgstr "layer"
 
 msgid "selection"
 msgstr "lựa chọn"
@@ -309,255 +322,269 @@ msgid "conflict"
 msgstr "xung đột"
 
 msgid "download"
-msgstr "tải về"
+msgstr "download"
 
 msgid "problem"
-msgstr ""
+msgstr "vấn đề"
 
 msgid "previous"
 msgstr "trước"
 
 msgid "next"
-msgstr "kế tiếp"
+msgstr "bên cạnh"
 
 msgid "Nothing selected to zoom to."
-msgstr "Chưa chọn để xem"
+msgstr "Không có gì được chọn để phóng to đến."
 
 msgid "Information"
 msgstr "Thông tin"
 
 msgid "Zoom to {0}"
-msgstr "Phóng to đến {0}"
+msgstr "Zoom to {0}"
 
 msgid "Zoom the view to {0}."
-msgstr "Phóng đến {0}"
+msgstr "Phóng to view để {0}."
 
 msgid "View: {0}"
-msgstr "Xem {0}"
+msgstr "Xem: {0}"
 
 msgid "No conflicts to zoom to"
-msgstr "Không có xung đột cần xem"
+msgstr "Không có xung đột để phóng to đến"
 
 msgid "Changeset Manager"
-msgstr "Quản lý các thay đổi"
+msgstr "changeset Manager"
 
 msgid "Toggle visibility of Changeset Manager window"
-msgstr ""
+msgstr "Bập bênh của cửa sổ changeset Manager"
 
 msgid "Close open changesets"
-msgstr "Đóng các thay đổi đang mở"
+msgstr "Đóng changesets mở"
 
 msgid "Closes open changesets"
-msgstr "Đóng các thay đổi đang mở"
+msgstr "Đóng changesets mở"
 
 msgid "File: {0}"
-msgstr "Tập tin:{0}"
+msgstr "File: {0}"
 
 msgid "There are no open changesets"
-msgstr "Không có thay đổi đang mở"
+msgstr "Không có changesets mở"
 
 msgid "No open changesets"
-msgstr "Không có thay đổi mở"
+msgstr "Không changesets mở"
 
 msgid "Downloading open changesets ..."
-msgstr "Đang tải các bộ thay đổi mở…"
+msgstr "Tải changesets mở ..."
 
 msgid "Combine Way"
-msgstr "Gộp đường"
+msgstr "Kết hợp Way"
 
 msgid "Combine several ways into one."
-msgstr "Gộp một ôố đường thành 1"
+msgstr "Kết hợp nhiều cách thành một."
 
 msgid "Change directions?"
-msgstr "Đổi chiều ?"
+msgstr "Thay đổi hướng?"
 
 msgid "Reverse and Combine"
-msgstr "Đảo chiều và Gộp"
+msgstr "Reverse và Kết hợp"
 
 msgid ""
 "The ways can not be combined in their current directions.  Do you want to "
 "reverse some of them?"
 msgstr ""
-"Các đường không thể gộp được theo chiều hiện tại. Bạn có muốn đảo chiều "
-"chúng ?"
+"Những cách không thể được kết hợp theo các hướng hiện tại của họ. Bạn có "
+"muốnĐảo ngược một số trong số họ?Các đường không thể gộp được theo chiều "
+"hiện tại. Bạn có muốn đảo chiều chúng ?"
 
 msgid ""
 "Could not combine ways<br>(They could not be merged into a single string of "
 "nodes)"
 msgstr ""
+"Không thể kết hợp cách <br> (Họ không thể được sáp nhập vào một chuỗi duy "
+"nhất củaNút)"
 
 msgid "Combine {0} way"
 msgid_plural "Combine {0} ways"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Kết hợp {0} cách"
 
 msgid "Please select at least two ways to combine."
-msgstr "Hãy chọn ít nhất 2 đường để gộp"
+msgstr "Hãy chọn ít nhất hai cách để kết hợp."
 
 msgid "Copy"
-msgstr "Sao chép"
+msgstr "Copy"
 
 msgid "Copy selected objects to paste buffer."
-msgstr "Chép các đối tượng được chọn để tạo buffer"
+msgstr "Sao chép đối tượng được chọn để dán đệm."
 
 msgid "Please select something to copy."
-msgstr "Xin hãy chọn đối tượng để sao chép"
+msgstr "Hãy chọn một cái gì đó để sao chép."
 
 msgid "Copy Coordinates"
-msgstr "Sao chép Tọa độ"
+msgstr "Copy Tọa độ"
 
 msgid "Copy coordinates of selected nodes to clipboard."
-msgstr ""
+msgstr "Copy tọa độ của nút chọn vào clipboard."
 
 msgid "Create Circle"
-msgstr "Đường tròn lớn"
+msgstr "Tạo Circle"
 
 msgid "Create a circle from three selected nodes."
-msgstr "Tạo một đường tròn từ 3 nốt đã chọn"
+msgstr "Tạo một vòng tròn từ ba nút lựa chọn."
 
 msgid ""
 "Please select exactly two or three nodes or one way with exactly two or "
 "three nodes."
 msgstr ""
+"Hãy chọn đúng hai hoặc ba nút hay một cách chính xác với hai hoặcBa nút."
 
 msgid "Those nodes are not in a circle. Aborting."
-msgstr ""
+msgstr "Những nút không phải là trong một vòng tròn. hủy bỏ."
 
 msgid "Update multipolygon"
-msgstr ""
+msgstr "Cập nhật multipolygon"
 
 msgid "Create multipolygon"
-msgstr "Tạo Multipolygon"
+msgstr "Tạo multipolygon"
 
 msgid "No data loaded."
-msgstr "Không có dữ liệu được đọc"
+msgstr "Không có dữ liệu được nạp."
 
 msgid "You must select at least one way."
-msgstr "Bạn phải chọn ít nhất một đường"
+msgstr "Bạn phải chọn ít nhất một cách."
 
 msgid "Delete"
-msgstr "Xoá"
+msgstr "Xóa"
 
 msgid "Delete selected objects."
-msgstr "Xóa các đối tượng đã chọn"
+msgstr "Xóa đối tượng được chọn."
 
 msgid "Toggle dialogs panel"
-msgstr ""
+msgstr "hộp thoại Chuyển đổi bảng"
 
 msgid "Toggle dialogs panel, maximize mapview"
+msgstr "Chuyển đổi các hộp thoại bảng điều khiển, tối đa hóa MapView"
+
+msgid "Distribute Nodes"
 msgstr ""
 
 msgid "Distribute the selected nodes to equal distances along a line."
-msgstr "Phân bố các nốt đã chọn theo một khoảng bằng nhau dọc theo 1 đường"
+msgstr ""
+"Phân phối các nút lựa chọn để khoảng cách bằng nhau dọc theo một đường."
 
 msgid "Ignoring {0} nodes with null coordinates"
-msgstr ""
+msgstr "Bỏ qua {0} nút với tọa độ null"
 
 msgid ""
 "Please select :\n"
 "* One no self-crossing way with at most two of its nodes;\n"
 "* Three nodes."
 msgstr ""
+"Xin hãy chọn: \n"
+"* Một không có cách nào tự qua với ít nhất hai trong số các nút của nó; \n"
+"* Ba nút."
 
 msgid "Download from OSM..."
-msgstr "Tải về từ OSM"
+msgstr "Tải từ OSM ..."
 
 msgid "Download map data from the OSM server."
-msgstr "Tải dữ liệu bản đồ từ server của OSM"
+msgstr "dữ liệu Tải về bản đồ từ máy chủ OSM."
 
 msgid ""
 "<html>This action will require {0} individual<br>download requests. Do you "
 "wish<br>to continue?</html>"
 msgstr ""
+"<Html> Hành động này sẽ yêu cầu {0} cá nhân <br> yêu cầu download. Bạn "
+"cóMuốn <br> tiếp tục không? </ Html>"
 
 msgid "Download data"
 msgstr "Tải dữ liệu"
 
 msgid "Download notes in current view"
-msgstr ""
+msgstr "Tải về ghi chú trong quan điểm hiện tại"
 
 msgid "Download object..."
-msgstr "Tải về đối tượng…"
+msgstr "Tải về đối tượng ..."
 
 msgid "Download OSM object by ID."
-msgstr "Tải về đối tượng OSM theo ID."
+msgstr "Tải OSM đối tượng bằng ID."
 
 msgid "Download parent ways/relations..."
-msgstr "Tải về lối/quan hệ mẹ"
+msgstr "cách Tải phụ huynh / các mối quan hệ ..."
 
 msgid "Download objects referring to one of the selected objects"
-msgstr "Tải các đối tượng có liên quan đến đối tượng được chọn"
+msgstr "Tải về đối tượng đề cập đến một trong những đối tượng được chọn"
 
 msgid "Duplicate"
-msgstr "Sao"
+msgstr "Bản sao"
 
 msgid "Duplicate selection by copy and immediate paste."
-msgstr "Sao chép và dán để nhân đôi lựa chọn"
+msgstr "lựa chọn Duplicate bằng cách sao chép và dán ngay lập tức."
 
 msgid "Exit"
 msgstr "Thoát"
 
 msgid "Exit the application."
-msgstr "Thoát chương trình"
+msgstr "Thoát khỏi ứng dụng."
 
 msgid "Expert Mode"
-msgstr ""
+msgstr "Expert Mode"
 
 msgid "Enable/disable expert mode"
-msgstr ""
+msgstr "Bật / tắt chế độ chuyên môn"
 
 msgid "Follow line"
-msgstr "Bám theo đường"
+msgstr "Follow dòng"
 
 msgid "Continues drawing a line that shares nodes with another line."
-msgstr "Tiếp tục vẽ đường có chung nút với đường khác"
+msgstr "Tiếp tục vẽ một đường chia sẻ các nút với dòng khác."
 
 msgid "Follow"
-msgstr "Theo"
+msgstr "Làm theo"
 
 msgid "Fullscreen view"
-msgstr "Toàn màn hình"
+msgstr "xem toàn màn hình"
 
 msgid "Toggle fullscreen view"
-msgstr "Bật/tắt hiện toàn màn hình"
+msgstr "Chuyển chế độ xem toàn màn hình"
 
 msgid "Export to GPX..."
-msgstr "Xuất ra GPX"
+msgstr "Xuất khẩu sang GPX ..."
 
 msgid "Export the data to GPX file."
-msgstr "Xuất ra file GPX"
+msgstr "Xuất dữ liệu vào tập tin GPX."
 
 msgid "Nothing to export. Get some data first."
-msgstr "Không có dữ liệu để xuất. Hãy chọn dữ liệu nào đó trước đã"
+msgstr "Không có gì để xuất khẩu. Nhận được một số dữ liệu đầu tiên."
 
 msgid "Export GPX file"
-msgstr "Xuất file GPX"
+msgstr "Xuất GPX tập tin"
 
 msgid "History"
-msgstr ""
+msgstr "History"
 
 msgid "Display history information about OSM ways, nodes, or relations."
-msgstr "Hiện thông tin lịch sử về lối, nốt, hoặc quan hệ OSM."
+msgstr "thông tin lịch sử về cách hiển thị OSM, nút, hoặc quan hệ."
 
 msgid "Show history"
-msgstr ""
+msgstr "Hiển thị lịch sử"
 
 msgid "History (web)"
-msgstr ""
+msgstr "Lịch sử (web)"
 
 msgid ""
 "Display history information about OSM ways, nodes, or relations in web "
 "browser."
 msgstr ""
+"Thông tin lịch sử về cách hiển thị OSM, nút, hoặc quan hệ trong webTrình "
+"duyệt."
 
 msgid "New offset"
-msgstr ""
+msgstr "mới bù đắp"
 
 msgid "Adjust the position of this imagery layer"
-msgstr "Thay đổi vị trí của lớp ảnh này"
+msgstr "Điều chỉnh vị trí của layer hình ảnh này"
 
 msgid "Adjust imagery offset"
-msgstr "Hiệu chỉnh tịnh tiến của ảnh"
+msgstr "Điều chỉnh hình ảnh bù đắp"
 
 msgid "OK"
 msgstr "OK"
@@ -568,228 +595,247 @@ msgid ""
 "You can also enter east and north offset in the {0} coordinates.\n"
 "If you want to save the offset as bookmark, enter the bookmark name below"
 msgstr ""
+"Sử dụng các phím mũi tên hoặc kéo layer hình ảnh với chuột để điều chỉnh "
+"hình ảnhBù đắp. \n"
+"Bạn cũng có thể nhập vào phía đông và phía bắc bù đắp trong {0} tọa độ. \n"
+"Nếu bạn muốn lưu bù đắp như bookmark, nhập tên bookmark dưới đây"
 
 msgid "Offset: "
-msgstr "Tính tiến: "
+msgstr "Offset: "
 
 msgid "Bookmark name: "
-msgstr ""
+msgstr "tên Bookmark: "
 
 msgid "Overwrite"
-msgstr "Ghi đè"
+msgstr "Overwrite"
 
 msgid "Offset bookmark already exists. Overwrite?"
-msgstr ""
+msgstr "Offset bookmark đã tồn tại. Ghi đè lên?"
 
 msgid "Advanced info"
-msgstr ""
+msgstr "Thông tin chi tiết"
 
 msgid ""
 "Display advanced object information about OSM nodes, ways, or relations."
 msgstr ""
+"Hiển thị thông tin đối tượng tiên tiến về các nút OSM, cách, hoặc quan hệ."
 
 msgid "Advanced info (web)"
-msgstr ""
+msgstr "Thông tin chi tiết (web)"
 
 msgid ""
 "Display object information about OSM nodes, ways, or relations in web "
 "browser."
 msgstr ""
+"Đối tượng thông tin về các nút Display OSM, cách, hoặc quan hệ trong "
+"webTrình duyệt."
 
 msgid "Join overlapping Areas"
-msgstr ""
+msgstr "Tham gia chồng lấn khu vực"
 
 msgid "Joins areas that overlap each other"
-msgstr ""
+msgstr "gia nhập khu vực mà chồng chéo nhau"
 
 msgid "Please select at least one closed way that should be joined."
-msgstr ""
+msgstr "Hãy chọn ít nhất một cách khép kín nên được tham gia."
 
 msgid ""
 "One of the selected ways is not closed and therefore cannot be joined."
 msgstr ""
+"Một trong những cách lựa chọn là không đóng cửa và do đó không thể được tham "
+"gia."
 
 msgid "Join area confirmation"
-msgstr ""
+msgstr "Tham gia xác nhận khu vực"
 
 msgid "The selected way has nodes outside of the downloaded data region."
 msgid_plural ""
 "The selected ways have nodes outside of the downloaded data region."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Cách chọn có các nút bên ngoài của vùng dữ liệu tải về."
 
 msgid "This can lead to nodes being deleted accidentally."
-msgstr ""
+msgstr "Điều này có thể dẫn đến các nút bị xóa vô tình."
 
 msgid "Are you really sure to continue?"
-msgstr ""
+msgstr "Bạn có thực sự chắc chắn tiếp tục không?"
 
 msgid "Please abort if you are not sure"
-msgstr ""
+msgstr "Hãy hủy bỏ nếu bạn không chắc chắn"
 
 msgid "The selected area is incomplete. Continue?"
-msgstr ""
+msgstr "Các khu vực được lựa chọn là không đầy đủ. Tiếp tục?"
 
 msgid "No intersection found. Nothing was changed."
-msgstr ""
+msgstr "Không giao được tìm thấy. Không có gì đã thay đổi."
 
 msgid "Move tags from ways to relations"
-msgstr ""
+msgstr "Di chuyển thẻ từ cách để quan hệ"
 
 msgid "Reverting changes"
-msgstr ""
+msgstr "Lùi lại thay đổi"
 
 msgid "Removed duplicate nodes"
-msgstr ""
+msgstr "Loại bỏ trùng lặp các nút"
 
 msgid "Added node on all intersections"
-msgstr ""
+msgstr "Thêm nút trên tất cả các nút giao thông"
 
 msgid "Assemble new polygons"
-msgstr ""
+msgstr "Lắp ráp đa giác mới"
 
 msgid "Delete relations"
-msgstr ""
+msgstr "Xóa quan hệ"
 
 msgid "Delete Ways that are not part of an inner multipolygon"
-msgstr ""
+msgstr "Xóa Cách đó không phải là một phần của một multipolygon bên trong"
 
 msgid "Joined overlapping areas"
-msgstr ""
+msgstr "khu vực Gia nhập chồng chéo"
 
 msgid ""
 "Some of the ways were part of relations that have been modified.<br>Please "
 "verify no errors have been introduced."
 msgstr ""
+"Một số trong những cách là một phần của mối quan hệ đó đã được sửa đổi. <br> "
+"HãyXác minh không có lỗi đã được giới thiệu."
 
 msgid "Fix tag conflicts"
-msgstr "Giải quyết xung đột thẻ"
+msgstr "xung đột Fix tag"
 
 msgid "Split ways into fragments"
-msgstr ""
+msgstr "Split cách thành các mảnh"
 
 msgid "Sorry. Cannot handle multipolygon relations with multiple outer ways."
 msgstr ""
+"Xin lỗi. Không thể xử lý multipolygon quan hệ với nhiều cách bên ngoài."
 
 msgid ""
 "Sorry. Cannot handle way that is outer in multiple multipolygon relations."
 msgstr ""
+"Xin lỗi. Không thể xử lý theo cách đó là bên ngoài trong nhiều mối quan hệ "
+"multipolygon."
 
 msgid ""
 "Sorry. Cannot handle way that is both inner and outer in multipolygon "
 "relations."
 msgstr ""
+"Xin lỗi. Không thể xử lý theo cách đó là cả bên trong và bên ngoài trong "
+"multipolygonQuan hệ"
 
 msgid ""
 "Sorry. Cannot handle way that is inner in multiple multipolygon relations."
 msgstr ""
+"Xin lỗi. Không thể xử lý theo cách đó là bên trong nhiều mối quan hệ "
+"multipolygon."
 
 msgid "Removed Element from Relations"
-msgstr ""
+msgstr "Gỡ bỏ phần tử từ quan hệ"
 
 msgid "Remove tags from inner ways"
-msgstr ""
+msgstr "Xóa thẻ từ cách bên trong"
 
 msgid "Join Areas Function"
-msgstr "Hàm Nối Vùng"
+msgstr "Tham gia khu vực Chức năng"
 
 msgid "Join Node to Way"
-msgstr "Nối các nốt thành đường"
+msgstr "Tham gia Node để Way"
 
 msgid "Include a node into the nearest way segments"
-msgstr ""
+msgstr "Bao gồm một nút vào các phân đoạn cách gần nhất"
 
 msgid "Move Node onto Way"
-msgstr ""
+msgstr "Di chuyển Node lên Way"
 
 msgid "Move the node onto the nearest way segments and include it"
-msgstr ""
+msgstr "Di chuyển các nút vào phân khúc cách gần nhất và bao gồm nó"
 
 msgid "No Shortcut"
-msgstr "Không có phím tắt"
+msgstr "Không có Shortcut"
 
 msgid "Jump To Position"
-msgstr "Nhảy tới Vị trí"
+msgstr "Jump To Position"
 
 msgid "Opens a dialog that allows to jump to a specific location"
-msgstr ""
+msgstr "Mở một hộp thoại cho phép để chuyển đến một địa điểm cụ thể"
 
 msgid "Enter Lat/Lon to jump to position."
-msgstr "Nhập vĩ độ và kinh độ để nhảy tới vị trí."
+msgstr "Nhập Lat / Lon để chuyển đến vị trí."
 
 msgid "You can also paste an URL from www.openstreetmap.org"
-msgstr "Cũng có thể dán URL từ www.openstreetmap.org"
+msgstr "Bạn cũng có thể dán một URL từ www.openstreetmap.org"
 
 msgid "Latitude"
-msgstr "Vĩ độ"
+msgstr "Latitude"
 
 msgid "Longitude"
 msgstr "Kinh độ"
 
 msgid "Zoom (in metres)"
-msgstr "Thu phóng (mét)"
+msgstr "Zoom (tính bằng mét)"
 
 msgid "URL"
 msgstr "URL"
 
 msgid "Jump there"
-msgstr "Nhảy tới đấy"
+msgstr "Jump có"
 
 msgid "Jump to Position"
-msgstr "Nhảy tới Vị trí"
+msgstr "Nhảy đến vị trí"
 
 msgid "Could not parse Latitude, Longitude or Zoom. Please check."
-msgstr ""
+msgstr "Không thể phân tích Latitude, kinh độ hoặc Zoom. Vui lòng kiểm tra."
 
 msgid "Unable to parse Lon/Lat"
-msgstr ""
+msgstr "Không thể phân tích Lon / Lạt"
 
 msgid "Lasso Mode"
-msgstr ""
+msgstr "Lasso Mode"
 
 msgid "Lasso selection mode: select objects within a hand-drawn region"
-msgstr ""
+msgstr "chế độ lựa chọn Lasso: chọn đối tượng bên trong một khu vực vẽ tay"
 
 msgid "Rectified Image..."
-msgstr ""
+msgstr "chỉnh hình ..."
 
 msgid "Download Rectified Images From Various Services"
-msgstr ""
+msgstr "Tải sửa chữa hình ảnh từ dịch vụ khác nhau"
 
 msgid "Imagery: {0}"
-msgstr ""
+msgstr "Hình ảnh: {0}"
 
 msgid "Custom WMS Link"
-msgstr ""
+msgstr "Custom WMS Link"
 
 msgid "Supported Rectifier Services:"
-msgstr ""
+msgstr "Hỗ trợ Rectifier dịch vụ:"
 
 msgid "Visit Homepage"
-msgstr ""
+msgstr "trang chủ"
 
 msgid "WMS URL or Image ID:"
-msgstr ""
+msgstr "WMS URL hoặc hình ảnh ID:"
 
 msgid "Add Rectified Image"
-msgstr ""
+msgstr "Thêm sửa chữa Image"
 
 msgid ""
 "Couldn''t match the entered link or id to the selected service. Please try "
 "again."
 msgstr ""
+"Couldn''t phù hợp với các liên kết nhập vào hoặc id để các dịch vụ đã chọn. "
+"Vui lòng thửMột lần nữa."
 
 msgid "No valid WMS URL or id"
-msgstr ""
+msgstr "Không URL WMS hợp lệ hoặc id"
 
 msgid "Merge layer"
-msgstr "Gộp lớp"
+msgstr "Merge layer"
 
 msgid "Merge the current layer into another layer"
-msgstr "Gộp lớp hiện tại vào một lớp khác"
+msgstr "Merge các layer hiện tại thành một lớp"
 
 msgid "Merging layers with different upload policies"
-msgstr ""
+msgstr "Kết hợp các lớp với các chính sách khác nhau upload"
 
 msgid ""
 "You are about to merge data between layers ''{0}'' and ''{1}''.<br /><br "
@@ -800,44 +846,53 @@ msgid ""
 "one by one, by using ''<i>Merge selection</i>''.<br /><br />Are you sure you "
 "want to continue?"
 msgstr ""
+"Bạn muốn hợp nhất dữ liệu giữa các lớp '' {0} '' và '' {1} ''. <br /> <Br/> "
+"Các lớp này có các chính sách upload khác nhau và không nên được sáp nhập "
+"làNó. <br /> Việc sáp nhập chúng sẽ dẫn đến thực thi các chính sách chặt chẽ "
+"hơn (uploadNản) để '' {1} ''. <br /> <br /> <B> Điều này không phải là cách "
+"được khuyến cáoSáp nhập dữ liệu chẳng hạn </ b>. <br /> Thay vào đó bạn nên "
+"kiểm tra và hợp nhất với từng đối tượng,Từng người một, bằng cách sử dụng '' "
+"<i> Merge lựa chọn </ i> ''. <br /> <br /> Bạn có chắc bạnMuốn tiếp tục "
+"không?"
 
 msgid "Ignore this hint and merge anyway"
-msgstr ""
+msgstr "Bỏ qua gợi ý này và hợp nhất anyway"
 
 msgid "Merge Nodes"
-msgstr "Hợp nhất các nốt"
+msgstr "Merge Nodes"
 
 msgid "Merge nodes into the oldest one."
-msgstr "Hợp nhất các nốt vào nốt cũ nhất"
+msgstr "Hợp nhất nút vào một trong những lâu đời nhất."
 
 msgid ""
 "Please select at least two nodes to merge or one node that is close to "
 "another node."
 msgstr ""
+"Hãy chọn ít nhất hai nút sáp nhập hay một nút đó là gần vớiMột nút khác."
 
 msgid "Abort Merging"
-msgstr "Hủy tiến tiến trình gộp"
+msgstr "Hủy bỏ sáp nhập"
 
 msgid "Click to abort merging nodes"
-msgstr ""
+msgstr "Nhấn vào đây để hủy bỏ việc sáp nhập các nút"
 
 msgid ""
 "Cannot merge nodes: Would have to delete way {0} which is still used by {1}"
 msgstr ""
+"Không thể hợp nhất các nút: Sẽ phải xóa cách {0} mà vẫn được sử dụng bởi {1}"
 
 msgid "Merge {0} node"
 msgid_plural "Merge {0} nodes"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Merge {0} nút"
 
 msgid "Merge selection"
 msgstr "Hợp nhất lựa chọn"
 
 msgid "Merge the currently selected objects into another layer"
-msgstr ""
+msgstr "Hợp nhất các đối tượng đang được chọn vào một lớp"
 
 msgid "Merging too many objects with different upload policies"
-msgstr ""
+msgstr "Kết hợp quá nhiều đối tượng với các chính sách khác nhau upload"
 
 msgid ""
 "You are about to merge more than 1 object between layers ''{0}'' and "
@@ -845,15 +900,19 @@ msgid ""
 "data</b>.<br />You should instead check and merge each object, <b>one by "
 "one</b>.<br /><br />Are you sure you want to continue?"
 msgstr ""
+"Bạn muốn hợp nhất nhiều hơn 1 đối tượng giữa các lớp '' {0} '' và'' {1} ''. "
+"<br /> <br /> <B> Điều này không phải là cách khuyến khích việc sáp nhập như "
+"vậyDữ liệu </ b>. <br /> Bạn nên thay vì kiểm tra và hợp nhất với từng đối "
+"tượng, <b> một củaMột </ b>. <br /> <br /> Bạn có chắc muốn tiếp tục không?"
 
 msgid "Mirror"
-msgstr "Tạo bản sao đối xứng"
+msgstr "Mirror"
 
 msgid "Mirror selected nodes and ways."
-msgstr "Tạo bản sao đối xứng các nốt và đường được chọn"
+msgstr "Mirror nút đã chọn và cách thức."
 
 msgid "Please select at least one node or way."
-msgstr "Hãy chọn ít nhất 1 nốt hay 1 đường"
+msgstr "Hãy chọn ít nhất một nút hoặc cách."
 
 msgid "up"
 msgstr "lên"
@@ -865,47 +924,47 @@ msgid "left"
 msgstr "trái"
 
 msgid "right"
-msgstr "phải"
+msgstr "quyền"
 
 msgid "Move objects {0}"
-msgstr "Di chuyển đối tượng {0}"
+msgstr "Di chuyển các đối tượng {0}"
 
 msgid "Move {0}"
-msgstr "Di chuyển {0}"
+msgstr "Move {0}"
 
 msgid "Moves Objects {0}"
 msgstr "Di chuyển các đối tượng {0}"
 
 msgid "Cannot move objects outside of the world."
-msgstr "Không thể di chuyển đối tượng ra ngoài biên"
+msgstr "Không thể di chuyển các đối tượng bên ngoài của thế giới."
 
 msgid "Move Node..."
-msgstr "Di chuyển Nốt…"
+msgstr "Di chuyển Node ..."
 
 msgid "Edit latitude and longitude of a node."
-msgstr "Sửa đổi vĩ độ và kinh độ của nốt."
+msgstr "Edit vĩ độ và kinh độ của một nút."
 
 msgid "New Layer"
-msgstr "Lớp Mới"
+msgstr "Tạo lớp mới"
 
 msgid "Create a new map layer."
-msgstr "Tạo lớp bản đồ mới."
+msgstr "Tạo một lớp bản đồ mới."
 
 msgid "URL Files"
-msgstr ""
+msgstr "Files URL"
 
 msgid "Open..."
-msgstr "Mở..."
+msgstr "Mở ..."
 
 msgid "Open a file."
-msgstr "Mở tập tin."
+msgstr "Mở một tập tin."
 
 msgid "Opening files"
 msgstr "Mở tập tin"
 
 msgid "Cannot open {0} file with the file importer ''{1}''."
 msgid_plural "Cannot open {0} files with the file importer ''{1}''."
-msgstr[0] "Không có thể mở {0} tập tin dùng trình nhập tập tin ''{1}''."
+msgstr[0] "Không thể mở {0} tập tin với các nhà nhập khẩu tập tin '' {1} ''."
 
 msgid ""
 "Cannot open {0} file because file does not exist or no suitable file "
@@ -914,70 +973,75 @@ msgid_plural ""
 "Cannot open {0} files because files do not exist or no suitable file "
 "importer is available."
 msgstr[0] ""
-msgstr[1] ""
+"Không thể mở tập tin {0} bởi vì tập tin không tồn tại hoặc không có tập tin "
+"phù hợpNhập khẩu có sẵn."
 
 msgid "no importer"
-msgstr ""
+msgstr "không nhập khẩu"
 
 msgid "does not exist"
-msgstr ""
+msgstr "không tồn tại"
 
 msgid "<html>Cannot open directory ''{0}''.<br>Please select a file.</html>"
 msgstr ""
+"<html> Không thể mở thư mục '' {0} ''. <br> Vui lòng chọn một tập tin. </ "
+"html>"
 
 msgid "Open file"
 msgstr "Mở tập tin"
 
 msgid "Opening {0} file..."
 msgid_plural "Opening {0} files..."
-msgstr[0] "Đang mở {0} tập tin…"
+msgstr[0] "Opening {0} tập tin ..."
 
 msgid "Opening file ''{0}'' ..."
-msgstr "Mở tập tin ''{0}'' ..."
+msgstr "tập tin mở cửa '' {0} '' ..."
 
 msgid "Open Location..."
-msgstr "Mở vị trí..."
+msgstr "Open Location ..."
 
 msgid "Open an URL."
-msgstr "Mở một liên kết"
+msgstr "Mở một URL."
 
 msgid "Separate Layer"
-msgstr "Chia lớp"
+msgstr "Layer riêng biệt"
 
 msgid "Select if the data should be downloaded into a new layer"
-msgstr ""
+msgstr "Chọn nếu các dữ liệu cần được tải về vào một layer mới"
 
 msgid "Enter URL to download:"
-msgstr "Điền đường dẫn (URL) để tải về:"
+msgstr "Nhập URL để tải về:"
 
 msgid "Enter an URL from where data should be downloaded"
-msgstr ""
+msgstr "Nhập một URL từ nơi dữ liệu phải được tải về"
 
 msgid "Download Location"
-msgstr "Tải về vị trí"
+msgstr "Download Location"
 
 msgid "Download URL"
-msgstr "Liên kết tải"
+msgstr "Download URL"
 
 msgid "Start downloading data"
 msgstr "Bắt đầu tải dữ liệu"
 
 msgid "Close dialog and cancel downloading"
-msgstr "Đóng hộp thoại và hủy tiến trình tải"
+msgstr "Đóng hộp thoại và hủy tải"
 
 msgid "Download Data"
 msgstr "Tải dữ liệu"
 
 msgid "Which tasks to perform?"
-msgstr ""
+msgstr "Những nhiệm vụ để thực hiện?"
 
 msgid "Ok"
-msgstr "OK"
+msgstr "Ok"
 
 msgid ""
 "Cannot open URL ''{0}''<br>The following download tasks accept the URL "
 "patterns shown:<br>{1}"
 msgstr ""
+"Không thể mở URL '' {0} '' <br> Các nhiệm vụ tải về sau chấp nhận các URLMô "
+"hình hiển thị: <br> {1}"
 
 msgid ""
 "<h3>When one or more ways are selected, the shape is adjusted such, that all "
@@ -986,352 +1050,402 @@ msgid ""
 "can undo the movement for certain nodes:<br>Select them and press the "
 "shortcut for Orthogonalize / Undo. The default is Shift-Q.)"
 msgstr ""
+"<H3> Khi một hoặc nhiều cách được lựa chọn, các hình dạng được điều chỉnh "
+"như vậy, mà tất cảGóc 90 hoặc 180 độ. </ H3> Bạn có thể thêm hai nút để lựa "
+"chọn.Sau đó, hướng được cố định bằng các nút tham chiếu hai. (Sau đó, bạnCó "
+"thể hồi phục lại phong trào cho các nút nhất định: <br> Chọn chúng và "
+"bấmShortcut cho Orthogonalize / Undo. Mặc định là Shift-Q.)"
 
 msgid "Orthogonalize Shape"
-msgstr "Hình dạng trực giao"
+msgstr "Orthogonalize Shape"
 
 msgid "Move nodes so all angles are 90 or 180 degrees"
-msgstr ""
+msgstr "Di chuyển các nút vì vậy tất cả các góc độ là 90 hoặc 180 độ"
 
 msgid "Orthogonalize Shape / Undo"
-msgstr ""
+msgstr "Orthogonalize Shape / Undo"
 
 msgid "Undo orthogonalization for certain nodes"
-msgstr ""
+msgstr "Undo orthogonalization cho các nút nhất định"
 
 msgid "Orthogonalize / Undo"
-msgstr ""
+msgstr "Orthogonalize / Undo"
 
 msgid ""
 "Orthogonalize Shape / Undo<br>Please select nodes that were moved by the "
 "previous Orthogonalize Shape action!"
 msgstr ""
+"Orthogonalize Shape / Undo <br> hãy lựa chọn các nút đã được chuyển bởiTrước "
+"Orthogonalize Shape hành động!"
 
 msgid ""
 "<html>You are using the EPSG:4326 projection which might lead<br>to "
 "undesirable results when doing rectangular alignments.<br>Change your "
 "projection to get rid of this warning.<br>Do you want to continue?</html>"
 msgstr ""
+"<Html> Bạn đang sử dụng EPSG: 4326 chiếu mà có thể dẫn đến <br>Kết quả không "
+"mong muốn khi thực hiện sắp xếp, hình chữ nhật. <br> Thay đổi của bạnChiếu "
+"để thoát khỏi cảnh báo này. <br> Bạn có muốn tiếp tục không? </ Html>"
 
 msgid "Selection must consist only of ways and nodes."
-msgstr ""
+msgstr "Lựa chọn phải chỉ gồm những cách thức và các nút."
 
 msgid "Orthogonalize"
-msgstr "Trực giao hóa"
+msgstr "Orthogonalize"
 
 msgid "Usage"
-msgstr ""
+msgstr "sử dụng"
 
 msgid ""
 "<html>Please make sure all selected ways head in a similar direction<br>or "
 "orthogonalize them one by one.</html>"
 msgstr ""
+"<Html> Vui lòng đảm bảo tất cả những cách lựa chọn đầu theo một hướng <br> "
+"tương tự hoặcOrthogonalize từng cái một. </ Html>"
 
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
+msgstr "Hãy chọn cách với góc khoảng 90 hoặc 180 độ."
+
+msgid "Download from Overpass API ..."
+msgstr "Tải về từ API Cầu vượt ..."
+
+msgid "Download map data from Overpass API server."
+msgstr "dữ liệu Tải về bản đồ từ máy chủ API Cầu vượt."
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr "query Cầu vượt: "
+
+msgid "Overpass server: "
 msgstr ""
 
 msgid "Paste"
 msgstr "Dán"
 
 msgid "Paste contents of paste buffer."
-msgstr "Dán nội dung của bộ nhớ"
+msgstr "Dán nội dung của dán đệm."
 
 msgid "Delete incomplete members?"
-msgstr ""
+msgstr "Xóa thành viên không đầy đủ?"
 
 msgid "Paste without incomplete members"
-msgstr ""
+msgstr "Dán mà không có các thành viên không đầy đủ"
 
 msgid ""
 "The copied data contains incomplete objects.  When pasting the incomplete "
 "objects are removed.  Do you want to paste the data without the incomplete "
 "objects?"
 msgstr ""
+"Các dữ liệu sao chép chứa các đối tượng chưa đầy đủ. Khi dán không đầy đủCác "
+"đối tượng được loại bỏ. Bạn có muốn dán dữ liệu mà không có đầy đủĐối tượng?"
 
 msgid "Paste Tags"
-msgstr "Dán Thuộc tính"
+msgstr "Paste Tags"
 
 msgid "Apply tags of contents of paste buffer to all selected items."
-msgstr "Áp dụng thẻ các nội dung cả bộ nhớ  cho các đối tượng được chọn"
+msgstr "Áp dụng thẻ nội dung dán đệm cho tất cả các mục đã chọn."
 
 msgid "Pasting {0} tag"
 msgid_plural "Pasting {0} tags"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "dán {0} tag"
 
 msgid "to {0} object"
 msgid_plural "to {0} objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} đối tượng"
 
 msgid "Preferences..."
-msgstr "Thiết lập"
+msgstr "Tùy chọn ..."
 
 msgid "Open a preferences dialog for global settings."
-msgstr ""
+msgstr "Mở một sở thích thoại cho các thiết lập toàn cầu."
 
 msgid "Preferences"
-msgstr "Thiết lập"
+msgstr "Tùy chỉnh"
 
 msgid "Purge..."
-msgstr ""
+msgstr "Purge ..."
 
 msgid "Forget objects but do not delete them on server when uploading."
 msgstr ""
+"Hãy quên đi các đối tượng nhưng không xóa chúng trên máy chủ khi tải lên."
 
 msgid "Purge"
-msgstr ""
+msgstr "thanh trừng"
 
 msgid "Confirm Purging"
-msgstr ""
+msgstr "Xác nhận thổi khí"
 
 msgid ""
 "This operation makes JOSM forget the selected objects.<br> They will be "
 "removed from the layer, but <i>not</i> deleted<br> on the server when "
 "uploading."
 msgstr ""
+"Hoạt động này làm cho JOSM quên các đối tượng được chọn. <br> Họ sẽ làLoại "
+"bỏ khỏi lớp, nhưng <i> không </ i> xóa <br> trên máy chủ khiTải lên"
 
 msgid ""
 "The following dependent objects will be purged<br> in addition to the "
 "selected objects:"
 msgstr ""
+"Các đối tượng phụ thuộc sau đây sẽ bị thanh lọc <br> ngoàiCác đối tượng được "
+"lựa chọn:"
 
 msgid "Add to selection"
-msgstr ""
+msgstr "Thêm vào lựa chọn"
 
 msgid ""
 "Some of the objects are modified.<br> Proceed, if these changes should be "
 "discarded.</html>"
 msgstr ""
+"Một số đối tượng đang biến đổi. <br> Tiến, nếu những thay đổi này cần đượcBỏ "
+"đi. </ Html>"
 
 msgid "Clear Undo/Redo buffer"
-msgstr ""
+msgstr "Clear Undo / Redo đệm"
 
 msgid "Redo"
 msgstr "Làm lại"
 
 msgid "Redo the last undone action."
-msgstr "Gọi lại tác vụ hủy vừa xong"
+msgstr "Làm lại các hành động hoàn tác cuối cùng."
 
 msgid "Redo ..."
-msgstr ""
+msgstr "Làm lại ..."
 
 msgid "Redo {0}"
-msgstr ""
+msgstr "Làm lại {0}"
 
 msgid "Rename layer"
-msgstr "Thay tên lớp"
+msgstr "Đổi tên lớp"
 
 msgid "Also rename the file"
-msgstr "Đồng thời đổi tên tập tin"
+msgstr "Cũng đổi tên các tập tin"
 
 msgid "Could not rename file ''{0}''"
-msgstr "Không thể đặt lại tên tập tin \"{0}\""
+msgstr "Không thể đổi tên file '' {0} ''"
 
 msgid "Report bug"
-msgstr ""
+msgstr "Báo cáo lỗi"
 
 msgid "Report a ticket to JOSM bugtracker"
-msgstr ""
+msgstr "Báo cáo một vé để JOSM bugtracker"
 
 msgid "Restart"
-msgstr ""
+msgstr "Khởi động lại"
 
 msgid "Restart the application."
-msgstr ""
+msgstr "Khởi động lại ứng dụng."
 
 msgid "Click to restart later."
-msgstr ""
+msgstr "Nhấn vào đây để khởi động lại sau đó."
 
 msgid "Reverse way"
-msgstr ""
+msgstr "cách Xếp"
 
 msgid "Reverse Ways"
-msgstr "Đảo chiều đường"
+msgstr "Cách Xếp"
 
 msgid "Reverse the direction of all selected ways."
-msgstr "Đảo chiều của các đường vừa chọn"
+msgstr "Đảo ngược hướng của tất cả các cách lựa chọn."
 
 msgid "Please select at least one way."
-msgstr "Xin hãy chọn ít nhất 1 đường"
+msgstr "Hãy chọn ít nhất một cách."
 
 msgid "Reverse ways"
-msgstr "Đảo chiều"
+msgstr "cách Xếp"
 
 msgid "Save"
 msgstr "Lưu"
 
 msgid "Save the current data."
-msgstr "Lưu dữ liệu hiện thời"
+msgstr "Lưu dữ liệu hiện tại."
 
 msgid "File {0} exists. Overwrite?"
-msgstr "Đã có tồn tại tập tin {0}. Có ghi đè không?"
+msgstr "File {0} tồn tại. Ghi đè lên?"
 
 msgid "No Exporter found! Nothing saved."
-msgstr ""
+msgstr "Không xuất khẩu được tìm thấy! Không có gì lưu lại."
 
 msgid "File exists. Overwrite?"
-msgstr "File đã có. Bạn có muốn ghi đè ?"
+msgstr "File tồn tại. Ghi đè lên?"
 
 msgid "Save As..."
-msgstr "Lưu thành..."
+msgstr "Save As ..."
 
 msgid "Save the current data to a new file."
-msgstr "Lưu dữ liệu hiện thời thành file mới"
+msgstr "Lưu dữ liệu hiện tại vào một tập tin mới."
 
 msgid "Search Notes..."
-msgstr ""
+msgstr "Tìm kiếm Ghi chú ..."
 
 msgid "Download notes from the note search API"
-msgstr ""
+msgstr "Tải về ghi chép từ các API lưu ý tìm kiếm"
 
 msgid "Search the OSM API for notes containing words:"
-msgstr ""
+msgstr "Search API OSM cho các ghi chú có chứa các từ:"
 
 msgid "Search for notes"
-msgstr ""
+msgstr "Tìm kiếm các ghi chú"
 
 msgid "You must enter a search term"
-msgstr ""
+msgstr "Bạn phải nhập cụm từ tìm kiếm"
 
 msgid "Select All"
-msgstr "Chọn tất"
+msgstr "Chọn tất cả"
 
 msgid ""
 "Select all undeleted objects in the data layer. This selects incomplete "
 "objects too."
 msgstr ""
-"Chọn tất các đối tượng chưa bị xóa hay chưa hoàn thành trong lớp dữ liệu."
+"Chọn tất cả các đối tượng được phục hồi trong các lớp dữ liệu. Điều này sẽ "
+"lựa chọn không đầy đủĐối tượng quá.Chọn tất các đối tượng chưa bị xóa hay "
+"chưa hoàn thành trong lớp dữ liệu."
 
 msgid "Non-branching way sequences"
-msgstr ""
+msgstr "Non-nhánh chuỗi cách"
 
 msgid "Select non-branching sequences of ways"
-msgstr ""
+msgstr "Chọn không phân nhánh chuỗi cách"
 
 msgid "Load Session"
-msgstr ""
+msgstr "Load Session"
 
 msgid "Load a session from file."
-msgstr ""
+msgstr "Load một phiên làm việc từ tập tin."
 
 msgid "Open session"
-msgstr ""
+msgstr "Open phiên"
 
 msgid "Loading session ''{0}''"
-msgstr ""
+msgstr "Đang tải phiên '' {0} ''"
 
 msgid "Data Error"
-msgstr ""
+msgstr "Data Error"
 
 msgid "IO Error"
-msgstr ""
+msgstr "IO Error"
 
 msgid "<html>Could not load session file ''{0}''.<br>Error is:<br>{1}</html>"
 msgstr ""
+"<html> Không thể tải tập tin phiên '' {0} '' <br> Lỗi là:. <br> {1} </ html>"
 
 msgid "Save Session As..."
-msgstr ""
+msgstr "Lưu phiên As ..."
 
 msgid "Save the current session to a new file."
-msgstr ""
+msgstr "Lưu phiên hiện tại vào một tập tin mới."
 
 msgid "Session file (archive) (*.joz)"
-msgstr ""
+msgstr "Session file (lưu trữ) (* .joz)"
 
 msgid "Session file (*.jos)"
-msgstr ""
+msgstr "Session tập tin (* .jos)"
 
 msgid "Save session"
-msgstr ""
+msgstr "Lưu phiên"
 
 msgid "<html>Could not save session file ''{0}''.<br>Error is:<br>{1}</html>"
 msgstr ""
+"<html> Không thể lưu tập tin phiên '' {0} '' <br> Lỗi là:. <br> {1} </ html>"
 
 msgid "Save Session"
-msgstr ""
+msgstr "Save Session"
 
 msgid "Save As"
-msgstr ""
+msgstr "Save As"
 
 msgid "Layers"
-msgstr ""
+msgstr "Các lớp"
 
 msgid "No exporter for this layer"
-msgstr ""
+msgstr "Không xuất khẩu cho layer này là"
 
 msgid "Show Status Report"
-msgstr "Hiện Báo cáo Trạng thái"
+msgstr "Show Status Report"
 
 msgid ""
 "Show status report with useful information that can be attached to bugs"
 msgstr ""
-"Hiện Báo cáo Trạng thái gồm các thông tin hữu ích có thể dùng để kiểm soát "
-"lỗi của chương trình"
+"Hiển thị báo cáo tình trạng thông tin hữu ích có thể được gắn vào lỗiHiện "
+"Báo cáo Trạng thái gồm các thông tin hữu ích có thể dùng để kiểm soát lỗi "
+"của chương trình"
 
 msgid "Help: {0}"
-msgstr "Trợ giúp: {0}"
+msgstr "Help: {0}"
 
 msgid "Status Report"
-msgstr "Báo cáo Trạng Thái"
+msgstr "Báo cáo tình trạng"
 
 msgid "Copy to clipboard and close"
-msgstr "Sao chép vào clipboard và Đóng"
+msgstr "Sao chép vào clipboard và gần gũi"
 
 msgid "Close"
-msgstr "Đóng"
+msgstr "Close"
 
 msgid "Simplify Way"
-msgstr ""
+msgstr "Đơn giản hóa Way"
 
 msgid "Delete unnecessary nodes from a way."
-msgstr ""
+msgstr "Xóa các nút không cần thiết từ một cách."
 
 msgid "Please select at least one way to simplify."
-msgstr ""
+msgstr "Hãy chọn ít nhất một cách để đơn giản hóa."
 
 msgid "Yes"
-msgstr ""
+msgstr "Có"
 
 msgid "Simplify all selected ways"
-msgstr ""
+msgstr "Đơn giản hóa tất cả các cách chọn"
 
 msgid "Cancel operation"
-msgstr ""
+msgstr "Hủy hoạt động"
 
 msgid ""
 "The selection contains {0} ways. Are you sure you want to simplify them all?"
 msgstr ""
+"Việc lựa chọn có chứa {0} cách. Bạn có chắc chắn bạn muốn đơn giản hóa tất "
+"cả?"
 
 msgid "Simplify ways?"
-msgstr ""
+msgstr "Đơn giản hóa cách?"
 
 msgid "Simplify {0} way"
 msgid_plural "Simplify {0} ways"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Đơn giản hóa {0} cách"
 
 msgid "Simplify Way (remove {0} node)"
 msgid_plural "Simplify Way (remove {0} nodes)"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Đơn giản hóa Way (bỏ {0} node)"
 
 msgid "Split Way"
-msgstr "Cắt đường"
+msgstr "Split Way"
 
 msgid "Split a way at the selected node."
-msgstr "Cắt đường tại nốt đã chọn"
+msgstr "Chia một cách tại nút lựa chọn."
 
 msgid ""
 "The current selection cannot be used for splitting - no node is selected."
 msgstr ""
+"Việc lựa chọn hiện tại không thể được sử dụng để tách - không có nút được "
+"chọn."
 
 msgid "The selected nodes do not share the same way."
-msgstr "Các nốt được chọn không có chung đường"
+msgstr "Các nút chọn không chia sẻ cùng một cách."
 
 msgid "The selected node is not in the middle of any way."
 msgid_plural "The selected nodes are not in the middle of any way."
-msgstr[0] "Lựa chọn nốt không ở giữa của bất kỳ đường nào cả."
+msgstr[0] "Các nút chọn không phải là ở giữa bất kỳ cách nào."
 
 msgid ""
 "There is more than one way using the node you selected. Please select the "
@@ -1340,86 +1454,95 @@ msgid_plural ""
 "There is more than one way using the nodes you selected. Please select the "
 "way also."
 msgstr[0] ""
-"Có nhiều hơn 1 đường đang sử dụng nốt bạn chọn. Xin hãy chọn đường."
+"Có nhiều cách sử dụng các nút bạn chọn. Hãy chọnCách cũng có.Có nhiều hơn 1 "
+"đường đang sử dụng nốt bạn chọn. Xin hãy chọn đường."
 
 msgid "You must select two or more nodes to split a circular way."
-msgstr "Bạn phải chọn hai hoặc nhiều nốt để chia đường vòng tròn"
+msgstr "Bạn phải chọn hai hoặc nhiều hơn các nút để phân chia một cách tròn."
 
 msgid ""
 "The way cannot be split at the selected nodes. (Hint: Select nodes in the "
 "middle of the way.)"
 msgstr ""
-"Không thể chia đường tại các nốt đã chọn(Gợi ý: Hãy thử chọn các nốt ở giữa "
-"của đường)"
+"Cách không thể được tách ra ở các nút lựa chọn (Gợi ý:. Chọn nút trongGiữa "
+"đường đi.)Không thể chia đường tại các nốt đã chọn(Gợi ý: Hãy thử chọn các "
+"nốt ở giữa của đường)"
 
 msgid ""
 "A role based relation membership was copied to all new ways.<br>You should "
 "verify this and correct it when necessary."
 msgstr ""
+"Một mối quan hệ dựa trên vai trò thành viên đã được sao chép vào tất cả "
+"những cách thức mới. <br> Bạn nênXác minh điều này và sửa nó khi cần thiết."
 
 msgid ""
 "A relation membership was copied to all new ways.<br>You should verify this "
 "and correct it when necessary."
 msgstr ""
+"Một thành viên liên quan đã được sao chép vào tất cả những cách thức mới. "
+"<br> Bạn nên xác minh điều nàyVà sửa nó khi cần thiết."
 
 msgid "Split way {0} into {1} part"
 msgid_plural "Split way {0} into {1} parts"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Split cách {0} vào {1} phần"
 
 msgid "Toggle GPX Lines"
-msgstr "Chuyển các đường GPX"
+msgstr "Toggle GPX Lines"
 
 msgid "Draw lines between raw gps points."
-msgstr "Vẽ đường giữa các điểm GPS"
+msgstr "Vẽ đường giữa các điểm gps liệu."
 
 msgid "Toggles the global setting ''{0}''."
-msgstr "Chuyển sang thiết lập chung \"{0}\""
+msgstr "Nhấn thả các thiết lập toàn cầu '' {0} ''."
 
 msgid "Encourage/discourage upload"
-msgstr ""
+msgstr "Khuyến khích / ngăn upload"
 
 msgid "UnGlue Ways"
-msgstr "Đường chưa nối với nhau"
+msgstr "UnGlue cách"
 
 msgid "Duplicate nodes that are used by multiple ways."
-msgstr "Nhân đôi các nốt để dùng cho nhiều đường"
+msgstr "nút Duplicate được sử dụng bởi nhiều cách khác nhau."
 
 msgid "This node is not glued to anything else."
-msgstr "Nốt này không được gắn với bất kì đối tượng nào cả"
+msgstr "Nút này không được dán vào bất cứ điều gì khác."
 
 msgid "None of these nodes are glued to anything else."
-msgstr "Không có nốt nào được gắn với bất kì đối tượng nào cả"
+msgstr "Không ai trong số các nút này được dán vào bất cứ điều gì khác."
 
 msgid "None of this way''s nodes are glued to anything else."
-msgstr ""
+msgstr "None of this way''s nodes are glued to anything else."
 
 msgid "The current selection cannot be used for unglueing."
-msgstr "Lựa chọn hiện thời không thể đùng để bóc ra được"
+msgstr "Việc lựa chọn hiện tại không thể được sử dụng cho unglueing."
 
 msgid "Select either:"
-msgstr "Chọn cả:"
+msgstr "Chọn một trong hai:"
 
 msgid "* One tagged node, or"
-msgstr "1 Node đã có thuộc tính, hoặc"
+msgstr "* Một tagged nút, hoặc"
 
 msgid "* One node that is used by more than one way, or"
-msgstr "1 Node được dùng bởi nhiều đường khác, hoặc"
+msgstr "* Một nút được sử dụng bởi nhiều hơn một cách, hoặc"
 
 msgid ""
 "* One node that is used by more than one way and one of those ways, or"
 msgstr ""
-"1 Node được dùng bởi nhiều đường khác và 1 trong số các đường đó, hoặc"
+"* Một trong những nút đó được sử dụng bởi hơn một con đường và một trong "
+"những cách thức, hoặc1 Node được dùng bởi nhiều đường khác và 1 trong số các "
+"đường đó, hoặc"
 
 msgid ""
 "* One way that has one or more nodes that are used by more than one way, or"
 msgstr ""
-"*Một đường có một hoặc nhiều nốt được dùng bởi nhiều (hơn một) đường khác, "
-"hoặc"
+"* Một trong những cách mà có một hoặc nhiều hơn các nút được sử dụng bởi "
+"nhiều hơn một cách, hoặc*Một đường có một hoặc nhiều nốt được dùng bởi nhiều "
+"(hơn một) đường khác, hoặc"
 
 msgid ""
 "* One way and one or more of its nodes that are used by more than one way."
-msgstr "Một đường và một hoặc nhiều nốt của nó được dùng bởi cả đường khác"
+msgstr ""
+"* Một cách và một hoặc nhiều các nút của nó được sử dụng bởi hơn một cách."
 
 msgid ""
 "Note: If a way is selected, this way will get fresh copies of the unglued\n"
@@ -1427,124 +1550,136 @@ msgid ""
 "their\n"
 "own copy and all nodes will be selected."
 msgstr ""
-"Chú ý: Nếu một đường được chọn, đường nãy sẽ lấy bản sao mới nhất của các "
-"nốt chưa được gắn kết và các nốt mới này sẽ được chọn. Hay nói cách khác, "
-"tất cả các đường sẽ lấy bản sao của riêng chúng và các nốt sẽ được chọn"
+"Lưu ý: Nếu một đường được chọn, cách này sẽ nhận được bản sao tươi của "
+"unglued \n"
+"Nút và các nút mới sẽ được lựa chọn. Nếu không, tất cả những cách sẽ nhận "
+"đượcCủa họ \n"
+"Bản sao của riêng và tất cả các nút sẽ được lựa chọn.Chú ý: Nếu một đường "
+"được chọn, đường nãy sẽ lấy bản sao mới nhất của các nốt chưa được gắn kết "
+"và các nốt mới này sẽ được chọn. Hay nói cách khác, tất cả các đường sẽ lấy "
+"bản sao của riêng chúng và các nốt sẽ được chọn"
 
 msgid "Unglued Node"
-msgstr "Nốt không được nối"
+msgstr "Node unglued"
 
 msgid "Dupe into {0} node"
 msgid_plural "Dupe into {0} nodes"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Dupe vào {0} nút"
 
 msgid "Dupe {0} node into {1} nodes"
 msgid_plural "Dupe {0} nodes into {1} nodes"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Dupe {0} vào nút {1} nút"
 
 msgid "Unglue confirmation"
-msgstr ""
+msgstr "xác nhận Unglue"
 
 msgid ""
 "You are about to unglue nodes outside of the area you have "
 "downloaded.<br>This can cause problems because other objects (that you do "
 "not see) might use them.<br>Do you really want to unglue?"
 msgstr ""
+"Bạn muốn unglue các nút bên ngoài của khu vực bạn cóTải về. <br> Điều này có "
+"thể gây ra vấn đề vì các đối tượng khác (mà bạn làmKhông nhìn thấy) có thể "
+"sử dụng chúng. <br> Bạn có thực sự muốn unglue?"
 
 msgid ""
 "You are about to unglue incomplete objects.<br>This will cause problems "
 "because you don''t see the real object.<br>Do you really want to unglue?"
 msgstr ""
+"Bạn muốn unglue đối tượng không đầy đủ. <br> Này sẽ gây ra vấn đềBởi vì bạn "
+"don''t thấy đối tượng thực sự. <br> Bạn có thực sự muốn unglue?"
 
 msgid "Disconnect Node from Way"
-msgstr ""
+msgstr "Node Disconnect từ Way"
 
 msgid "Disconnect nodes from a way they currently belong to"
-msgstr ""
+msgstr "nút Disconnect từ một cách mà họ hiện đang thuộc về"
 
 msgid "Select at least one node to be disconnected."
-msgstr ""
+msgstr "Chọn ít nhất một node bị ngắt kết nối."
 
 msgid "Selected node cannot be disconnected from anything."
 msgid_plural "Selected nodes cannot be disconnected from anything."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "nút chọn không thể bị ngắt kết nối từ bất cứ điều gì."
 
 msgid ""
 "The affected way would disappear after disconnecting the selected node."
 msgid_plural ""
 "The affected way would disappear after disconnecting the selected nodes."
 msgstr[0] ""
-msgstr[1] ""
+"Cách bị ảnh hưởng sẽ biến mất sau khi ngắt kết nối các nút lựa chọn."
 
 msgid "Some irrelevant nodes have been removed from the selection"
 msgstr ""
 
 msgid "Undo"
-msgstr "Hoàn lại"
+msgstr "Undo"
 
 msgid "Undo the last action."
-msgstr "Quay lại thao tác trước"
+msgstr "Undo hành động cuối cùng."
 
 msgid "Undo ..."
-msgstr ""
+msgstr "Undo ..."
 
 msgid "Undo {0}"
-msgstr ""
+msgstr "Undo {0}"
 
 msgid "Unselect All"
-msgstr "Bỏ chọn tất cả"
+msgstr "Bỏ tất cả mục"
 
 msgid "Unselect all objects."
-msgstr "Bỏ chọn các đối tượng"
+msgstr "Bỏ chọn tất cả các đối tượng."
 
 msgid "Update data"
 msgstr "Cập nhật dữ liệu"
 
 msgid "Updates the objects in the active data layer from the server."
-msgstr ""
+msgstr "Cập nhật các đối tượng trong các lớp dữ liệu hoạt động từ máy chủ."
 
 msgid "Update modified"
-msgstr ""
+msgstr "Cập nhật biến dạng"
 
 msgid ""
 "Updates the currently modified objects from the server (re-downloads data)"
 msgstr ""
+"Cập nhật các đối tượng hiện đang được sửa đổi từ các máy chủ (re-tải dữ liệu)"
 
 msgid "No current dataset found"
-msgstr ""
+msgstr "Không tìm thấy dữ liệu hiện tại"
 
 msgid "Did not find an object with id {0} in the current dataset"
-msgstr ""
+msgstr "Không tìm thấy một đối tượng với id {0} trong bộ dữ liệu hiện tại"
 
 msgid "Update selection"
-msgstr ""
+msgstr "Cập nhật lựa chọn"
 
 msgid ""
 "Updates the currently selected objects from the server (re-downloads data)"
-msgstr "Cập nhật các đối tượng đang được chọn từ server (tải lại dữ liệu)"
+msgstr ""
+"Cập nhật các đối tượng đang được chọn từ các máy chủ (re-tải dữ liệu)"
 
 msgid "There are no selected objects to update."
-msgstr ""
+msgstr "Không có đối tượng được lựa chọn để cập nhật."
 
 msgid "Selection empty"
-msgstr "Lựa chọn rỗng"
+msgstr "Lựa chọn sản phẩm nào"
 
 msgid "Upload data"
-msgstr "Tải lên dữ liệu"
+msgstr "Upload dữ liệu"
 
 msgid "Upload all changes in the active data layer to the OSM server"
-msgstr ""
+msgstr "Tải lên tất cả thay đổi trong lớp dữ liệu hoạt động đến máy chủ OSM"
 
 msgid ""
 "<html>The data to be uploaded participates in unresolved conflicts of layer "
 "''{0}''.<br>You have to resolve them first.</html>"
 msgstr ""
+"<Html> Các dữ liệu được tải lên tham gia vào các cuộc xung đột chưa được "
+"giải quyết của layer'' {0} ''. <br> Bạn phải giải quyết chúng trước tiên. </ "
+"Html>"
 
 msgid "Upload discouraged"
-msgstr ""
+msgstr "Upload nản lòng"
 
 msgid ""
 "You are about to upload data from the layer ''{0}''.<br /><br />Sending data "
@@ -1552,285 +1687,293 @@ msgid ""
 "require you subsequently have to revert your changes, or force other "
 "contributors to.<br /><br />Are you sure you want to continue?"
 msgstr ""
+"Bạn muốn upload dữ liệu từ lớp '' {0} ''. <br /> <br /> Việc gửi dữ liệuTừ "
+"lớp này là <b> khuyến khích mạnh mẽ </ b>. Nếu bạn tiếp tục, <br /> nó có "
+"thểPhải là những bạn sau đó phải trở lại những thay đổi của bạn, hoặc buộc "
+"khácĐóng góp vào. <br /> <br /> Bạn có chắc muốn tiếp tục không?"
 
 msgid "Ignore this hint and upload anyway"
-msgstr ""
+msgstr "Bỏ qua gợi ý này và tải lên anyway"
 
 msgid "No changes to upload."
-msgstr "Không có thay đổi nào để tải lên"
+msgstr "Không có thay đổi để tải lên."
 
 msgid "Nothing to upload. Get some data first."
-msgstr "Không có gì để tải lên."
+msgstr "Không có gì để tải lên. Nhận được một số dữ liệu đầu tiên."
 
 msgid "Upload note changes to server"
-msgstr ""
+msgstr "Tải các thay đổi lưu ý đến máy chủ"
 
 msgid "Upload notes"
-msgstr ""
+msgstr "Upload ghi chú"
 
 msgid "Uploading notes to server"
-msgstr ""
+msgstr "Tải lên ghi chú đến máy chủ"
 
 msgid "Upload selection"
-msgstr ""
+msgstr "Upload lựa chọn"
 
 msgid "Upload all changes in the current selection to the OSM server."
 msgstr ""
+"Tải lên tất cả những thay đổi trong việc lựa chọn hiện tại để các máy chủ "
+"OSM."
 
 msgid "Checking parents for deleted objects"
-msgstr ""
+msgstr "Kiểm tra bố mẹ cho các đối tượng đã xóa"
 
 msgid "Reading parents of ''{0}''"
-msgstr ""
+msgstr "Đọc sách của cha mẹ '' {0} ''"
 
 msgid "Checking for deleted parents in the local dataset"
-msgstr ""
+msgstr "Kiểm tra cho các bậc cha mẹ đã bị xóa trong tập dữ liệu địa phương"
 
 msgid "Validation"
-msgstr ""
+msgstr "Xác nhận"
 
 msgid "Performs the data validation"
-msgstr ""
+msgstr "Thực hiện việc xác nhận dữ liệu"
 
 msgid "Validating"
-msgstr ""
+msgstr "Members"
 
 msgid "Test {0}/{1}: Starting {2}"
-msgstr ""
+msgstr "Test {0} / {1}: Bắt đầu từ {2}"
 
 msgid "Updating ignored errors ..."
-msgstr ""
+msgstr "Đang cập nhật lỗi bỏ qua ..."
 
 msgid "Viewport Following"
-msgstr ""
+msgstr "Sau Viewport"
 
 msgid "Enable/disable automatic moving of the map view to last placed node"
-msgstr ""
+msgstr "Bật / tắt chức năng tự động di chuyển của bản đồ để kéo nút đặt"
 
 msgid "Toggle Viewport Following"
-msgstr ""
+msgstr "Toggle Viewport Sau"
 
 msgid "Wireframe View"
-msgstr ""
+msgstr "cấu trúc khung View"
 
 msgid "Enable/disable rendering the map as wireframe only"
-msgstr ""
+msgstr "Bật / tắt chức năng render bản đồ như wireframe chỉ"
 
 msgid "Toggle Wireframe view"
-msgstr ""
+msgstr "Toggle Wireframe view"
 
 msgid "Zoom In"
-msgstr "Phóng to"
+msgstr "Zoom In"
 
 msgid "Zoom In (Keypad)"
-msgstr ""
+msgstr "Zoom In (Bàn phím)"
 
 msgid "Zoom Out"
-msgstr "Thu nhỏ"
+msgstr "Zoom Out"
 
 msgid "Zoom Out (Keypad)"
-msgstr ""
+msgstr "Zoom Out (Bàn phím)"
 
 msgid "Zoom to"
-msgstr ""
+msgstr "Zoom to"
 
 msgid "Zoom to the object the first selected member refers to"
-msgstr ""
+msgstr "Zoom đến đối tượng các thành viên được lựa chọn đầu tiên đề cập đến"
 
 msgid "Zooming disabled because layer of this relation is not active"
 msgstr ""
+"Zooming bị vô hiệu hóa bởi vì lớp của mối quan hệ này là không hoạt động"
 
 msgid "Zooming disabled because there is no selected member"
-msgstr ""
+msgstr "Zooming bị vô hiệu hóa bởi vì không có thành viên được lựa chọn"
 
 msgid "Zoom to the first selected node"
-msgstr ""
+msgstr "Zoom vào nút lựa chọn đầu tiên"
 
 msgid "Zooming disabled because layer of this way is not active"
-msgstr ""
+msgstr "Zooming bị vô hiệu hóa bởi vì lớp của cách này là không hoạt động"
 
 msgid "Zooming disabled because there is no selected node"
-msgstr ""
+msgstr "Zooming bị vô hiệu hóa vì không có nút lựa chọn"
 
 msgctxt "audio"
 msgid "Back"
-msgstr ""
+msgstr "Back"
 
 msgctxt "audio"
 msgid "Jump back."
-msgstr ""
+msgstr "Bước trở lại."
 
 msgid "Audio: {0}"
-msgstr ""
+msgstr "Audio: {0}"
 
 msgctxt "audio"
 msgid "Faster"
-msgstr ""
+msgstr "nhanh hơn"
 
 msgctxt "audio"
 msgid "Faster Forward"
-msgstr ""
+msgstr "Faster Forward"
 
 msgctxt "audio"
 msgid "Forward"
-msgstr ""
+msgstr "Chuyển tiếp"
 
 msgctxt "audio"
 msgid "Jump forward"
-msgstr ""
+msgstr "Chuyển tiếp"
 
 msgctxt "audio"
 msgid "Next Marker"
-msgstr ""
+msgstr "Next Marker"
 
 msgctxt "audio"
 msgid "Play next marker."
-msgstr ""
+msgstr "Play marker tiếp theo."
 
 msgctxt "audio"
 msgid "Play/Pause"
-msgstr ""
+msgstr "Play / Pause"
 
 msgid "Play/pause audio."
-msgstr "Chơi/Tạm dừng"
+msgstr "Play / pause âm thanh."
 
 msgctxt "audio"
 msgid "Previous Marker"
-msgstr ""
+msgstr "Trước Marker"
 
 msgctxt "audio"
 msgid "Play previous marker."
-msgstr ""
+msgstr "Play marker trước."
 
 msgctxt "audio"
 msgid "Slower"
-msgstr ""
+msgstr "chậm"
 
 msgctxt "audio"
 msgid "Slower Forward"
-msgstr ""
+msgstr "Slower Forward"
 
 msgid "Download GPS"
-msgstr ""
+msgstr "Download GPS"
 
 msgid "Downloading GPS data"
 msgstr "Tải dữ liệu GPS"
 
 msgid "Downloaded GPX Data"
-msgstr "Đã tải dữ liệu GPX"
+msgstr "Downloaded GPX Data"
 
 msgid "Markers from {0}"
-msgstr ""
+msgstr "Markers từ {0}"
 
 msgid "Download OSM Notes"
-msgstr ""
+msgstr "Tải OSM Notes"
 
 msgid "Downloading Notes"
-msgstr ""
+msgstr "Tải Notes"
 
 msgid "Notes"
-msgstr ""
+msgstr "Notes"
 
 msgid "{0} note has been downloaded."
 msgid_plural "{0} notes have been downloaded."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} lưu ý đã được tải về."
 
 msgid ""
 "Since the download limit was {0}, there might be more notes to download."
-msgstr ""
+msgstr "Kể từ khi giới hạn tải về là {0}, có thể có nhiều ghi chú để tải về."
 
 msgid ""
 "Request a smaller area to make sure that all notes are being downloaded."
 msgstr ""
+"Yêu cầu một diện tích nhỏ hơn để đảm bảo rằng tất cả các ghi chú đang được "
+"tải về."
 
 msgid "More notes to download"
-msgstr ""
+msgstr "Thêm ghi chú để tải về"
 
 msgid "Download OSM Notes within Bounds"
-msgstr ""
+msgstr "Tải OSM Ghi chú trong Bounds"
 
 msgid "Download OSM Note by ID"
-msgstr ""
+msgstr "Tải OSM Lưu ý bằng ID"
 
 msgid "Download Compressed OSM Change"
-msgstr ""
+msgstr "Tải nén OSM Change"
 
 msgid "Download OSM Change"
-msgstr ""
+msgstr "Tải OSM Change"
 
 msgid "Download Compressed OSM"
-msgstr ""
+msgstr "Tải nén OSM"
 
 msgid "Download OSM object by ID"
-msgstr ""
+msgstr "Tải OSM đối tượng bằng cách ID"
 
 msgid "Download OSM"
-msgstr ""
+msgstr "Tải OSM"
 
 msgid "Downloading data"
-msgstr "Đang tải dữ liệu"
+msgstr "Tải dữ liệu"
 
 msgid ""
 "Ignoring exception because download has been canceled. Exception was: {0}"
-msgstr ""
+msgstr ". Exception Bỏ qua ngoại lệ vì tải xuống đã bị huỷ bỏ là: {0}"
 
 msgid "No data found in this area."
-msgstr ""
+msgstr "Không tìm thấy dữ liệu trong lĩnh vực này."
 
 msgid "OSM Server URL:"
-msgstr ""
+msgstr "Máy chủ OSM URL:"
 
 msgid "Command"
-msgstr ""
+msgstr "Command"
 
 msgid "Request details: {0}"
-msgstr ""
+msgstr "chi tiết Yêu cầu: {0}"
 
 msgid "Download OSM URL"
-msgstr ""
+msgstr "Tải OSM URL"
 
 msgid "There was {0} conflict during import."
 msgid_plural "There were {0} conflicts during import."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Có {0} xung đột trong quá trình nhập khẩu."
 
 msgid "Conflict during download"
 msgid_plural "Conflicts during download"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Xung đột trong khi tải về"
 
 msgid "({0}/{1}) Loading parents of node {2}"
-msgstr ""
+msgstr "({0} / {1}) Loading cha mẹ của nút {2}"
 
 msgid "({0}/{1}) Loading parents of way {2}"
-msgstr ""
+msgstr "({0} / {1}) Loading cha mẹ của cách {2}"
 
 msgid "({0}/{1}) Loading parents of relation {2}"
-msgstr ""
+msgstr "({0} / {1}) Loading cha mẹ của quan hệ {2}"
 
 msgid "Download session"
-msgstr ""
+msgstr "Download phiên"
 
 msgid "Download {0} of {1} ({2} left)"
-msgstr "Tải {0} của {1} (còn {2})"
+msgstr "Download {0} {1} ({2} trái)"
 
 msgid "Updating data"
-msgstr ""
+msgstr "Cập nhật dữ liệu"
 
 msgid "Check on the server"
-msgstr ""
+msgstr "Kiểm tra trên máy chủ"
 
 msgid ""
 "Click to check whether objects in your local dataset are deleted on the "
 "server"
 msgstr ""
+"Nhấn vào đây để kiểm tra xem các đối tượng trong tập dữ liệu địa phương của "
+"bạn sẽ bị xóa trênServer"
 
 msgid "Ignore"
-msgstr ""
+msgstr "Bỏ qua"
 
 msgid "Click to abort and to resume editing"
-msgstr ""
+msgstr "Nhấn vào đây để hủy bỏ và tiếp tục chỉnh sửa"
 
 msgid ""
 "There is {0} object in your local dataset which might be deleted on the "
@@ -1841,292 +1984,309 @@ msgid_plural ""
 "server.<br>If you later try to delete or update them the server is likely to "
 "report a conflict."
 msgstr[0] ""
-msgstr[1] ""
+"Có {0} đối tượng trong tập dữ liệu địa phương của bạn mà có thể được xóa "
+"trênServer. <br> Nếu sau đó bạn cố gắng xóa hoặc cập nhật này, máy chủ có "
+"khả năngBáo cáo một cuộc xung đột."
 
 msgid ""
 "Click <strong>{0}</strong> to check the state of this object on the server."
 msgid_plural ""
 "Click <strong>{0}</strong> to check the state of these objects on the server."
 msgstr[0] ""
-msgstr[1] ""
+"Nhấn vào <strong> {0} </ strong> để kiểm tra trạng thái của đối tượng này "
+"trên các máy chủ."
 
 msgid "Click <strong>{0}</strong> to ignore.</html>"
-msgstr ""
+msgstr "Nhấn vào <strong> {0} </ strong> để bỏ qua. </ html>"
 
 msgid "Deleted or moved objects"
-msgstr ""
+msgstr "Đã bị xóa hoặc di chuyển các đối tượng"
 
 msgid "The following errors occurred during mass download: {0}"
-msgstr ""
+msgstr "Các lỗi sau đây xảy ra trong quá trình tải xuống hàng loạt: {0}"
 
 msgid "Errors during download"
-msgstr ""
+msgstr "Lỗi trong khi tải về"
 
 msgid "Error during download"
-msgstr ""
+msgstr "Lỗi trong khi tải về"
 
 msgid "Add a new Note"
-msgstr ""
+msgstr "Thêm một ghi chú mới"
 
 msgid "Add note mode"
-msgstr ""
+msgstr "Thêm vào chế độ ghi chú"
 
 msgid "Click the location where you wish to create a new note"
-msgstr ""
+msgstr "Nhấn vào vị trí mà bạn muốn tạo một ghi chú mới"
 
 msgid "Create new note"
-msgstr ""
+msgstr "Tạo ghi chú mới"
 
 msgid "Create note"
-msgstr ""
+msgstr "Tạo ghi chú"
 
 msgid "Enter a detailed comment to create a note"
-msgstr ""
+msgstr "Nhập một bình luận chi tiết để tạo một ghi chú"
 
 msgid "You must enter a comment to create a new note"
-msgstr ""
+msgstr "Bạn phải nhập vào một comment để tạo một ghi chú mới"
 
 msgid "Delete Mode"
 msgstr "Xóa Mode"
 
 msgid "Delete nodes or ways."
-msgstr "Xóa nốt hoặc đường"
+msgstr "Xóa các nút hoặc cách khác nhau."
 
 msgid "Mode: {0}"
-msgstr "Chế độ: {0}"
+msgstr "Mode: {0}"
 
 msgid ""
 "Click to delete. Shift: delete way segment. Alt: do not delete unused nodes "
 "when deleting a way. Ctrl: delete referring objects."
 msgstr ""
+"Nhấn vào đây để xóa Shift:. Xóa phân khúc cách Alt:. Không xóa các nút không "
+"sử dụngKhi xóa một cách Ctrl:. Xóa đề cập đối tượng."
 
 msgid "Draw"
 msgstr "Vẽ"
 
 msgid "Draw nodes"
-msgstr "Vẽ nốt"
+msgstr "Vẽ nút"
 
 msgid "Mode: Draw Angle snapping"
-msgstr ""
+msgstr "Mode: Vẽ góc chụp"
 
 msgid "Backspace in Add mode"
-msgstr ""
+msgstr "Backspace trong Add mode"
 
 msgid "helper line"
-msgstr ""
+msgstr "helper dòng"
 
 msgid "Cannot add a node outside of the world."
-msgstr "Không thể tạo thêm nốt bên ngoài biên"
+msgstr "Không thể thêm một nút bên ngoài của thế giới."
 
 msgid "Add node"
-msgstr "Thêm nốt"
+msgstr "Thêm nút"
 
 msgid "Add node into way"
-msgstr "Thêm nốt vào đường"
+msgstr "Thêm nút vào con đường"
 
 msgid "Connect existing way to node"
-msgstr "Nối đường đã có vào nốt"
+msgstr "Kết nối đường tới nút hiện tại"
 
 msgid "Add a new node to an existing way"
-msgstr "Thêm một nốt mới vào đường đã có"
+msgstr "Thêm một nút mới vào một cách hiện hữu"
 
 msgid "Add node into way and connect"
-msgstr "Thêm nốt vào đường và nối lại"
+msgstr "Thêm nút vào chiều và kết nối"
 
 msgid "Create new node."
-msgstr "Tạo nốt mới"
+msgstr "Tạo nút mới."
 
 msgid "Select node under cursor."
-msgstr "Chọn nốt tại bị trí trỏ chuột"
+msgstr "Chọn nút dưới con trỏ."
 
 msgid "Insert new node into way."
 msgid_plural "Insert new node into {0} ways."
-msgstr[0] "Chèn nốt mới tạo vào {0} đường"
+msgstr[0] "Chèn nút mới vào con đường."
 
 msgid "Start new way from last node."
-msgstr "Tạo đường mới từ nốt vừa xong"
+msgstr "Bắt đầu con đường mới từ nút cuối cùng."
 
 msgid "Continue way from last node."
-msgstr "Tiếp tục tạo đường từ nốt vừa xong"
+msgstr "Tiếp tục con đường từ nút cuối cùng."
 
 msgid "Angle snapping active."
-msgstr ""
+msgstr "Góc chụp hoạt động."
 
 msgid "Finish drawing."
-msgstr "Kết thúc vẽ"
-
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr ""
-
-msgid "draw angle snap highlight"
-msgstr ""
+msgstr "Hoàn thành bản vẽ."
 
 msgid "Toggle snapping by {0}"
-msgstr ""
+msgstr "Toggle chụp bởi {0}"
 
 msgid "Show helper geometry"
-msgstr ""
+msgstr "Show helper hình học"
 
 msgid "Snap to node projections"
-msgstr ""
+msgstr "Snap tới nút dự"
 
 msgid "Disable"
-msgstr ""
+msgstr "Disable"
 
 msgid "0,90,..."
-msgstr ""
+msgstr "0,90, ..."
 
 msgid "0,45,90,..."
-msgstr ""
+msgstr "0,45,90, ..."
 
 msgid "0,30,45,60,90,..."
-msgstr ""
+msgstr "0,30,45,60,90, ..."
+
+msgid "FIX"
+msgstr "FIX"
+
+msgid "draw angle snap"
+msgstr "vẽ góc chụp"
+
+msgid "draw angle snap highlight"
+msgstr "vẽ Góc đính nổi bật"
 
 msgid "Angle snapping"
-msgstr ""
+msgstr "góc chụp"
 
 msgid "Switch angle snapping mode while drawing"
-msgstr ""
+msgstr "Switch góc chụp chế độ trong khi vẽ"
 
 msgid "Dual alignment"
-msgstr ""
+msgstr "Dual chỉnh"
 
 msgid "Switch dual alignment mode while extruding"
-msgstr ""
+msgstr "Chuyển sang chế độ kết kép trong khi đùn"
 
 msgid "Extrude"
-msgstr "Ấn ra"
+msgstr "Extrude"
 
 msgid "Create areas"
-msgstr "Tạo vùng"
+msgstr "Tạo khu vực"
 
 msgid "Extrude Dual alignment"
-msgstr ""
+msgstr "Extrude liên kết kép"
 
 msgid ""
 "Drag a way segment to make a rectangle. Ctrl-drag to move a segment along "
 "its normal, Alt-drag to create a new rectangle, double click to add a new "
 "node."
 msgstr ""
+"Kéo một phân khúc cách để làm cho một hình chữ nhật. Ctrl-kéo để di chuyển "
+"một phân đoạn cùngBình thường, Alt-kéo nó để tạo ra một hình chữ nhật mới, "
+"click đúp để thêm một mớiNút."
 
 msgid "Dual alignment active."
-msgstr ""
+msgstr "liên kết kép hoạt động."
 
 msgid "Segment collapsed due to its direction reversing."
-msgstr ""
+msgstr "Segment sập do hướng của nó đảo ngược."
 
 msgid "Move a segment along its normal, then release the mouse button."
-msgstr ""
+msgstr "Di chuyển một đoạn dọc bình thường của nó, sau đó thả nút chuột."
 
 msgid ""
 "Move the node along one of the segments, then release the mouse button."
 msgstr ""
+"Di chuyển các nút dọc theo một trong các phân đoạn, sau đó thả nút chuột."
 
 msgid "Draw a rectangle of the desired size, then release the mouse button."
-msgstr "Vẽ một hình chữ nhật với kích thước mong muốn, sau đó nhả chuột"
+msgstr "Vẽ một hình chữ nhật có kích thước mong muốn, sau đó thả nút chuột."
 
 msgid "Extrude: main line"
-msgstr ""
+msgstr "Extrude: dòng chính"
 
 msgid "Extrude: helper line"
-msgstr ""
+msgstr "Extrude: helper dòng"
 
 msgid "Extrude Way"
-msgstr "Đẩy đường ra"
+msgstr "Extrude Way"
 
 msgid "Improve Way Accuracy"
-msgstr ""
+msgstr "Cải thiện Way chính xác"
 
 msgid "Improve Way Accuracy mode"
-msgstr ""
+msgstr "Cải thiện chế độ chính xác Way"
 
 msgid "improve way accuracy helper line"
-msgstr ""
+msgstr "cải thiện cách đường chính xác helper"
 
 msgid "Click on the way to start improving its shape."
-msgstr ""
+msgstr "Bấm vào đường để bắt đầu cải thiện hình dạng của nó."
 
 msgid "Select a way that you want to make more accurate."
-msgstr ""
+msgstr "Chọn một cách mà bạn muốn làm cho chính xác hơn."
 
 msgid ""
 "Click to add a new node. Release Ctrl to move existing nodes or hold Alt to "
 "delete."
 msgstr ""
+"Nhấn vào đây để thêm một nút mới. Thả Ctrl để di chuyển nút hiện có hoặc giữ "
+"phím Alt đểDelete"
 
 msgid ""
 "Click to delete the highlighted node. Release Alt to move existing nodes or "
 "hold Ctrl to add new nodes."
 msgstr ""
+"Nhấn vào đây để xóa các nút nhấn mạnh. Phát hành Alt để di chuyển nút hiện "
+"có hoặcGiữ Ctrl để thêm các nút mới."
 
 msgid ""
 "Click to move the highlighted node. Hold Ctrl to add new nodes, or Alt to "
 "delete."
 msgstr ""
+"Nhấn vào đây để di chuyển các nút nhấn mạnh. Giữ Ctrl để thêm các nút mới, "
+"hoặc Alt đểDelete"
 
 msgid "Cannot place a node outside of the world."
-msgstr ""
+msgstr "Không thể đặt một nút bên ngoài của thế giới."
 
 msgid "Add a new node to way"
 msgid_plural "Add a new node to {0} ways"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Thêm một nút mới vào cách"
 
 msgid "Cannot delete node that is referenced by multiple objects"
-msgstr ""
+msgstr "Không thể xóa nút đó được tham chiếu bởi nhiều đối tượng"
 
 msgid "Cannot delete node that has tags"
-msgstr ""
+msgstr "Không thể xóa nút đó có thẻ"
 
 msgid "Parallel"
-msgstr ""
+msgstr "song song"
 
 msgid "Make parallel copies of ways"
-msgstr ""
+msgstr "Tạo bản sao song song cách"
 
 msgid "make parallel helper line"
-msgstr ""
+msgstr "làm cho dòng helper song song"
 
 msgid ""
 "Select ways as in Select mode. Drag selected ways or a single way to create "
 "a parallel copy (Alt toggles tag preservation)"
 msgstr ""
+"Chọn cách như trong Chọn chế độ. Kéo cách chọn hoặc một con đường duy nhất "
+"để tạo raMột bản sao song song (Alt Toggles bảo quản tag)"
 
 msgid "Hold Ctrl to toggle snapping"
-msgstr ""
+msgstr "Giữ Ctrl để chuyển đổi chụp"
 
 msgid ""
 "ParallelWayAction\n"
 "The ways selected must form a simple branchless path"
 msgstr ""
-
-msgid "Make parallel way error"
-msgstr ""
+"ParallelWayAction \n"
+"Những cách lựa chọn phải tạo thành một con đường không cành đơn giản"
 
 msgid "Drag play head"
-msgstr ""
+msgstr "Kéo chơi đầu"
 
 msgid ""
 "Drag play head and release near track to play audio from there; "
 "SHIFT+release to synchronize audio at that point."
 msgstr ""
-"Thả phần Chơi trước và bỏ ra gần track để chơi tập tin âm thanh từ đó. Nhấn "
-"SHIFT + bỏ ra để đồng bộ hóa âm thanh tại điểm đó"
+"Đầu Kéo chơi và phát hành gần track để chơi âm thanh từ đó;SHIFT + phát hành "
+"để đồng bộ hóa âm thanh vào thời điểm đó.Thả phần Chơi trước và bỏ ra gần "
+"track để chơi tập tin âm thanh từ đó. Nhấn SHIFT + bỏ ra để đồng bộ hóa âm "
+"thanh tại điểm đó"
 
 msgid "Select, move, scale and rotate objects"
-msgstr ""
+msgstr "Chọn, di chuyển, quy mô và xoay đối tượng"
 
 msgid "Move elements"
-msgstr ""
+msgstr "Di chuyển các yếu tố"
 
 msgid "Move them"
-msgstr ""
+msgstr "Di chuyển chúng"
 
 msgid "Undo move"
-msgstr ""
+msgstr "Hoàn tác di chuyển"
 
 msgid ""
 "You moved more than {0} element. Moving a large number of elements is often "
@@ -2137,79 +2297,88 @@ msgid_plural ""
 "an error.\n"
 "Really move them?"
 msgstr[0] ""
-msgstr[1] ""
+"Bạn di chuyển nhiều hơn {0} phần tử. Di chuyển một số lượng lớn các yếu tố "
+"thườngMột lỗi. \n"
+"Thực sự chuyển chúng?"
 
 msgid "Release the mouse button to select the objects in the rectangle."
-msgstr "Nhả chuột để chọn các đối tượng trong hình chữ nhật"
+msgstr "Nhả chuột để chọn các đối tượng trong hình chữ nhật."
 
 msgid "Ctrl to merge with nearest node."
-msgstr ""
+msgstr "Ctrl để kết hợp với nút gần nhất."
 
 msgid "Release the mouse button to stop moving."
-msgstr ""
+msgstr "Nhả chuột để ngừng di chuyển."
 
 msgid "Release the mouse button to stop rotating."
-msgstr "Nhả chuột để dừng xoay"
+msgstr "Nhả chuột để ngừng quay."
 
 msgid "Release the mouse button to stop scaling."
-msgstr ""
+msgstr "Nhả chuột để ngừng mở rộng quy mô."
 
 msgid ""
 "Move objects by dragging; Shift to add to selection (Ctrl to toggle); Shift-"
 "Ctrl to rotate selected; Alt-Ctrl to scale selected; or change selection"
 msgstr ""
+"Di chuyển đối tượng bằng cách kéo; Shift để thêm vào lựa chọn (Ctrl để "
+"chuyển đổi); Shift-Ctrl để xoay được lựa chọn; Alt-Ctrl để chọn quy mô, hoặc "
+"lựa chọn thay đổi"
 
 msgid "Add and move a virtual new node to way"
 msgid_plural "Add and move a virtual new node to {0} ways"
-msgstr[0] "Thêm và di chuyển một nốt ảo mới đến {0} đường."
+msgstr[0] "Thêm và di chuyển một nút mới ảo để cách"
 
 msgid "Zoom"
-msgstr "Thu/Phóng"
+msgstr "Zoom"
 
 msgid "Zoom and move map"
-msgstr "Thu phóng và dịch chuyển bản đồ"
+msgstr "Zoom và bản đồ di chuyển"
 
 msgid ""
 "Zoom by dragging or Ctrl+. or Ctrl+,; move with Ctrl+up, left, down, right; "
 "move zoom with right button"
 msgstr ""
-"Thu phóng bằng cách thả hoặc Ctrl+. hoặc Ctrl+, ; di chuyển với Ctrl+ mũi "
-"tên lên, trái, xuống, phải; di chuyển bằng nút chuột phải"
+"Zoom bằng cách kéo hoặc Ctrl + hoặc Ctrl + ,; di chuyển với Ctrl + lên, "
+"trái, xuống, phải;Di chuyển với zoom nút bên phảiThu phóng bằng cách thả "
+"hoặc Ctrl+. hoặc Ctrl+, ; di chuyển với Ctrl+ mũi tên lên, trái, xuống, "
+"phải; di chuyển bằng nút chuột phải"
 
 msgid "Add all objects selected in the current dataset after the last member"
 msgstr ""
+"Thêm tất cả các đối tượng được lựa chọn trong các số liệu hiện tại sau khi "
+"thành viên cuối cùng"
 
 msgid "Add selection to relation"
-msgstr ""
+msgstr "Thêm lựa chọn để mối quan hệ"
 
 msgid "Add selection to {0} relation"
 msgid_plural "Add selection to {0} relations"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Thêm lựa chọn cho {0} mối quan hệ"
 
 msgid "Delete the selected relation"
-msgstr ""
+msgstr "Xóa các mối quan hệ đã chọn"
 
 msgid "Download all members of the selected relations"
-msgstr ""
+msgstr "Tải về tất cả các thành viên của các mối quan hệ đã chọn"
 
 msgid "Download members"
-msgstr ""
+msgstr "Tải về các thành viên"
 
 msgid "Download incomplete members of selected relations"
-msgstr ""
+msgstr "Tải thành viên đầy đủ của các mối quan hệ đã chọn"
 
 msgid "Download incomplete members"
-msgstr ""
+msgstr "Tải về các thành viên không đầy đủ"
 
 msgid "Create a copy of this relation and open it in another editor window"
 msgstr ""
+"Tạo một bản sao của mối quan hệ này và mở nó trong một cửa sổ soạn thảo"
 
 msgid "Edit"
-msgstr "Sửa"
+msgstr "Edit"
 
 msgid "Call relation editor for selected relation"
-msgstr ""
+msgstr "Gọi trình soạn thảo liên quan cho mối quan hệ được lựa chọn"
 
 msgid ""
 "You are about to open <b>{0}</b> different relation editor "
@@ -2218,432 +2387,473 @@ msgid_plural ""
 "You are about to open <b>{0}</b> different relation editors "
 "simultaneously.<br/>Do you want to continue?"
 msgstr[0] ""
-msgstr[1] ""
+"Bạn muốn mở <b> {0} biên tập </ b> mối quan hệ khác nhauCùng một lúc. <br/> "
+"Bạn có muốn tiếp tục không?"
 
 msgid "Confirmation"
-msgstr ""
+msgstr "Xác nhận"
 
 msgid "Select in relation list"
-msgstr ""
+msgstr "Chọn trong danh sách mối quan hệ"
 
 msgid "Select relation in relation list."
-msgstr ""
+msgstr "Chọn liên quan trong danh sách liên quan."
 
 msgid "Add the members of all selected relations to current selection"
 msgstr ""
+"Thêm các thành viên của tất cả các mối quan hệ được lựa chọn để lựa chọn "
+"hiện tại"
 
 msgid "Select the members of all selected relations"
-msgstr ""
+msgstr "Chọn các thành viên của tất cả các mối quan hệ đã chọn"
 
 msgid "Select members (add)"
-msgstr ""
+msgstr "Chọn các thành viên (thêm)"
 
 msgid "Select members"
-msgstr ""
+msgstr "Chọn các thành viên"
 
 msgid "Add the selected relations to the current selection"
-msgstr ""
+msgstr "Thêm các mối quan hệ đã chọn vào lựa chọn hiện tại"
 
 msgid "Set the current selection to the list of selected relations"
 msgstr ""
+"Thiết lập các lựa chọn hiện tại vào danh sách các mối quan hệ đã chọn"
 
 msgid "Select relation (add)"
-msgstr ""
+msgstr "Chọn liên quan (thêm)"
 
 msgid "Select relation"
-msgstr ""
+msgstr "Chọn liên quan"
 
 msgid "<not>"
-msgstr ""
+msgstr "<không>"
 
 msgid "<or>"
-msgstr ""
+msgstr "<hoặc>"
 
 msgid "<xor>"
-msgstr ""
+msgstr "<xor>"
 
 msgid "<left parent>"
-msgstr ""
+msgstr "<mẹ lại>"
 
 msgid "<right parent>"
-msgstr ""
+msgstr "<mẹ phải>"
 
 msgid "<colon>"
-msgstr ""
+msgstr "<ruột>"
 
 msgid "<equals>"
-msgstr ""
+msgstr "<bằng>"
 
 msgid "<key>"
-msgstr ""
+msgstr "<key>"
 
 msgid "<question mark>"
-msgstr ""
+msgstr "<dấu hỏi>"
 
 msgid "<end-of-file>"
-msgstr ""
+msgstr "<end-of-file>"
 
 msgid "Search..."
-msgstr "Tìm kiếm"
+msgstr "Tìm kiếm ..."
 
 msgid "Search for objects."
-msgstr "Tìm kiếm các đối tượng"
+msgstr "Tìm kiếm cho các đối tượng."
 
 msgid "{0}: "
-msgstr ""
+msgstr "{0}: "
 
 msgid "Filter string:"
-msgstr ""
+msgstr "Bộ lọc chuỗi:"
 
 msgid "Search string:"
-msgstr ""
+msgstr "Tìm chuỗi:"
 
 msgid "Enter the search expression"
-msgstr ""
+msgstr "Nhập biểu thức tìm kiếm"
 
 msgid "replace selection"
 msgstr "thay thế lựa chọn"
 
 msgid "add to selection"
-msgstr "thêm vào phần chọn"
+msgstr "thêm vào lựa chọn"
 
 msgid "remove from selection"
-msgstr "xóa khỏi phần chọn"
+msgstr "gỡ bỏ từ lựa chọn"
 
 msgid "find in selection"
-msgstr ""
+msgstr "tìm thấy trong lựa chọn"
 
 msgid "case sensitive"
-msgstr "phân biệt hoa/thường"
+msgstr "trường hợp nhạy cảm"
 
 msgid "all objects"
-msgstr ""
+msgstr "tất cả các đối tượng"
 
 msgid "Also include incomplete and deleted objects in search."
+msgstr "Cũng bao gồm các đối tượng chưa đầy đủ và bị xóa trong tìm kiếm."
+
+msgid "standard"
 msgstr ""
 
 msgid "regular expression"
-msgstr "Biểu thức chính tắc"
+msgstr "biểu thức chính quy"
 
-msgid "add toolbar button"
+msgid "MapCSS selector"
 msgstr ""
 
+msgid "add toolbar button"
+msgstr "nút trên thanh công cụ thêm"
+
 msgid "Filter"
-msgstr ""
+msgstr "Filter"
 
 msgid "Search"
 msgstr "Tìm kiếm"
 
 msgid "Submit filter"
-msgstr ""
+msgstr "Gửi lọc"
 
 msgid "Start Search"
-msgstr "Bắt đầu tìm"
+msgstr "Bắt đầu tìm kiếm"
 
 msgid ""
 "Search expression is not valid: \n"
 "\n"
 " {0}"
 msgstr ""
+"Tìm kiếm biểu hiện là không hợp lệ: \n"
+"\n"
+"{0}"
 
 msgid "Invalid search expression"
-msgstr ""
+msgstr "biểu thức tìm kiếm không hợp lệ"
 
 msgid "basic examples"
-msgstr ""
+msgstr "ví dụ cơ bản"
 
 msgid "Baker Street"
-msgstr ""
+msgstr "Baker Street"
 
 msgid "''Baker'' and ''Street'' in any key"
-msgstr ""
+msgstr "'' Baker '' và '' Street '' trong bất kỳ quan trọng"
 
 msgid "\"Baker Street\""
-msgstr ""
+msgstr "\" Baker Street \""
 
 msgid "''Baker Street'' in any key"
-msgstr ""
+msgstr "'' Baker Street '' trong bất kỳ quan trọng"
 
 msgid "basics"
-msgstr ""
+msgstr "cơ bản"
 
 msgid "''valuefragment'' anywhere in ''key''"
-msgstr ""
+msgstr "'' valuefragment '' bất cứ nơi nào trong '' chìa khóa ''"
 
 msgid "''valuefragment'' nowhere in ''key''"
-msgstr ""
+msgstr "'' valuefragment '' không nơi nào trong '' chìa khóa ''"
 
 msgid "''key'' with exactly ''value''"
-msgstr ""
+msgstr "''key'' with exactly ''value''"
 
 msgid "''key'' with any value"
-msgstr ""
+msgstr "'' chìa khóa '' với bất kỳ giá trị"
 
 msgid "''value'' in any key"
-msgstr ""
+msgstr "'' giá trị '' trong bất kỳ quan trọng"
 
 msgid "matches if ''key'' exists"
-msgstr ""
+msgstr "phù hợp nếu '' chìa khóa '' tồn tại"
 
 msgid "matches if ''key'' is greater than ''value'' (analogously, less than)"
-msgstr ""
+msgstr "phù hợp nếu '' chìa khóa '' lớn hơn '' giá trị '' (Tương tự, ít hơn)"
 
 msgid ""
 "to quote operators.<br>Within quoted strings the <b>\"</b> and <b>\\</b> "
 "characters need to be escaped by a preceding <b>\\</b> (e.g. <b>\\\"</b> and "
 "<b>\\\\</b>)."
 msgstr ""
+"Trích dẫn các nhà khai thác. <br> Trong chuỗi trích dẫn các <b> \" </ b> và "
+"<b> \\ </ b> Nhân vật cần phải được thoát bởi một trước <b> \\ </ b> (ví dụ "
+"như <b> \\\" </ b> và <B> \\\\ </ b>)."
 
 msgid "combinators"
-msgstr ""
+msgstr "combinators"
 
 msgid "logical and (both expressions have to be satisfied)"
-msgstr ""
+msgstr "hợp lý và (cả hai đều có được thỏa mãn)"
 
 msgid "logical or (at least one expression has to be satisfied)"
-msgstr ""
+msgstr "hợp lý hay (ít nhất một biểu thức có được thỏa mãn)"
 
 msgid "logical not"
-msgstr ""
+msgstr "hợp lý không"
 
 msgid "use parenthesis to group expressions"
-msgstr ""
+msgstr "sử dụng dấu ngoặc đơn để biểu thức nhóm"
 
 msgid "objects"
-msgstr ""
+msgstr "đối tượng"
 
 msgid "all ways"
-msgstr ""
+msgstr "mọi cách"
 
 msgid "all relations"
-msgstr ""
+msgstr "tất cả các mối quan hệ"
 
 msgid "all closed ways"
-msgstr ""
+msgstr "tất cả các cách kín"
 
 msgid "object without useful tags"
-msgstr ""
+msgstr "đối tượng mà không có thẻ hữu ích"
 
 msgid "metadata"
-msgstr ""
+msgstr "siêu dữ liệu"
 
 msgid "objects changed by user"
-msgstr ""
+msgstr "đối tượng thay đổi bằng cách sử dụng"
 
 msgid "objects with given ID"
-msgstr ""
+msgstr "đối tượng với ID cho"
 
 msgid "objects with given version"
-msgstr ""
+msgstr "đối tượng với phiên bản được đưa ra"
 
 msgid "objects with given changeset ID"
-msgstr ""
+msgstr "đối tượng với ban ID changeset"
 
 msgid "objects with last modification timestamp within range"
-msgstr ""
+msgstr "đối tượng với dấu thời gian sửa đổi cuối cùng trong phạm vi"
 
 msgid "properties"
-msgstr ""
+msgstr "tài sản"
 
 msgid ""
 "ways with at least 20 nodes, or relations containing at least 20 nodes"
-msgstr ""
+msgstr "Cách với ít nhất 20 nút, hoặc quan hệ có chứa ít nhất 20 nút"
 
 msgid ""
 "nodes with at least 3 referring ways, or relations containing at least 3 ways"
-msgstr ""
+msgstr "Nút với ít nhất 3 cách đề cập, hoặc quan hệ có chứa ít nhất 3 cách"
 
 msgid "objects having 5 to 10 tags"
-msgstr ""
+msgstr "đối tượng có 5-10 thẻ"
 
 msgid "objects with given role in a relation"
-msgstr ""
+msgstr "đối tượng với vai trò nhất định trong một mối quan hệ"
 
 msgid "closed ways with an area of 100 m²"
-msgstr ""
+msgstr "đóng cửa cách với diện tích 100 m²"
 
 msgid "ways with a length of 200 m or more"
-msgstr ""
+msgstr "cách với chiều dài 200 m hoặc hơn"
 
 msgid "state"
-msgstr ""
+msgstr "nhà nước"
 
 msgid "all modified objects"
-msgstr ""
+msgstr "tất cả các đối tượng biến dạng"
 
 msgid "all new objects"
-msgstr ""
+msgstr "tất cả các đối tượng mới"
 
 msgid "all selected objects"
-msgstr ""
+msgstr "tất cả các đối tượng được chọn"
 
 msgid "all incomplete objects"
-msgstr ""
+msgstr "tất cả các đối tượng không đầy đủ"
 
 msgid "related objects"
-msgstr ""
+msgstr "các đối tượng liên quan"
 
 msgid "all children of objects matching the expression"
-msgstr ""
+msgstr "tất cả các trẻ em của các đối tượng phù hợp với khái niệm"
 
 msgid "all parents of objects matching the expression"
-msgstr ""
+msgstr "tất cả phụ huynh của các đối tượng phù hợp với khái niệm"
 
 msgid "n-th member of relation and/or n-th node of way"
-msgstr ""
+msgstr "n-th thành viên của mối quan hệ và / hoặc n-th nút của cách"
 
 msgid "every n-th member of relation and/or every n-th node of way"
-msgstr ""
+msgstr "mỗi thành viên n-th các mối quan hệ và / hoặc mỗi nút n-th của cách"
 
 msgid "view"
-msgstr ""
+msgstr "view"
 
 msgid "objects in current view"
-msgstr ""
+msgstr "đối tượng trong diện hiện tại"
 
 msgid "objects (and all its way nodes / relation members) in current view"
 msgstr ""
+"đối tượng (và tất cả các nút chiều / thành viên liên quan của nó) theo quan "
+"điểm hiện tại"
 
 msgid "objects in downloaded area"
-msgstr ""
+msgstr "đối tượng trong khu vực được tải về"
 
 msgid "objects (and all its way nodes / relation members) in downloaded area"
 msgstr ""
+"đối tượng (và tất cả các nút chiều / thành viên liên quan của nó) trong khu "
+"vực được tải về"
 
 msgid "No match found for ''{0}''"
-msgstr "Không tìm thấy gì khớp với {0}"
+msgstr "Không có trận đấu tìm thấy cho '' {0} ''"
 
 msgid "Nothing added to selection by searching for ''{0}''"
-msgstr "Không có gì được thêm vào lựa chon bằng cách tìm kiếm với ''{0}''"
+msgstr "Không có gì thêm để lựa chọn bằng cách tìm kiếm cho '' {0} ''"
 
 msgid "Nothing removed from selection by searching for ''{0}''"
-msgstr "Không có gì được gỡ bỏ từ lựa chon bằng cách tìm kiếm với ''{0}''"
+msgstr "Không có gì lấy ra từ lựa chọn bằng cách tìm kiếm cho '' {0} ''"
 
 msgid "Nothing found in selection by searching for ''{0}''"
 msgstr ""
+"Không tìm thấy gì trong việc lựa chọn bằng cách tìm kiếm cho '' {0} ''"
 
 msgid "Found {0} matches"
-msgstr "Có {0} khớp"
+msgstr "Tìm thấy {0} trận"
 
 msgctxt "search"
 msgid "CS"
-msgstr ""
+msgstr "CS"
 
 msgctxt "search"
 msgid "CI"
-msgstr ""
+msgstr "CI"
 
 msgctxt "search"
 msgid "RX"
+msgstr "RX"
+
+msgctxt "search"
+msgid "CSS"
 msgstr ""
 
 msgctxt "search"
 msgid "A"
-msgstr ""
+msgstr "A"
 
 msgid ""
 "The regex \"{0}\" had a parse error at offset {1}, full error:\n"
 "\n"
 "{2}"
 msgstr ""
+"Các regex \" {0} \"đã có một lỗi phân tích cú pháp bù đắp {1}, toàn báo lỗi: "
+"\n"
+"\n"
+"{2}"
 
 msgid ""
 "The regex \"{0}\" had a parse error, full error:\n"
 "\n"
 "{1}"
 msgstr ""
+"Các regex \" {0} \"đã có một lỗi phân tích cú pháp, lỗi đầy đủ: \n"
+"\n"
+"{1}"
 
 msgid "Expecting <i>min</i>/<i>max</i> after ''timestamp''"
-msgstr ""
+msgstr "Mong <i> min </ i> / <i> max </ i> sau khi '' dấu thời gian ''"
 
 msgid "Range of primitive ids expected"
-msgstr ""
+msgstr "Range của id nguyên thủy dự kiến"
 
 msgid "Range of changeset ids expected"
-msgstr ""
+msgstr "Range của id changeset dự kiến"
 
 msgid "Range of versions expected"
-msgstr ""
+msgstr "Phạm vi của các phiên bản dự kiến"
 
 msgid "Key cannot be empty when tag operator is used. Sample use: key=value"
 msgstr ""
-"Khóa không thể bị trống khi tác tử thẻ được dùng. Ví dụ: khóa=giá trị"
+"Key không thể để trống khi điều hành thẻ được sử dụng sử dụng mẫu:. key = "
+"valueKhóa không thể bị trống khi tác tử thẻ được dùng. Ví dụ: khóa=giá trị"
 
 msgid "Unknown primitive type: {0}. Allowed values are node, way or relation"
 msgstr ""
-"Kiểu đối tượng không rõ:{0}. Các giá trị được phép dùng là nốt, đường và "
-"quan hệ"
+"Unknown primitive type: {0}. Allowed values are node, way or relation"
 
 msgid "Positive integer expected"
-msgstr ""
+msgstr "số nguyên dương dự kiến"
 
 msgid "Range of numbers expected"
-msgstr ""
+msgstr "Phạm vi của các con số dự kiến"
 
 msgid "Unexpected token. Expected {0}, found {1}"
+msgstr "token Unexpected. Dự kiến ​​{0}, tìm thấy {1}"
+
+msgid "Failed to parse MapCSS selector"
 msgstr ""
 
 msgid "Unexpected token: {0}"
-msgstr "Dấu hiệ không rõ: {0}"
+msgstr "token Unexpected: {0}"
 
 msgid "Missing parameter for OR"
-msgstr ""
+msgstr "Thiếu tham số cho OR"
 
 msgid "Missing parameter for XOR"
-msgstr ""
+msgstr "Thiếu tham số cho XOR"
 
 msgid "Missing operator for NOT"
-msgstr ""
+msgstr "Thiếu điều hành cho không"
 
 msgid "Automatically truncating value of tag ''{0}'' on deleted object {1}"
-msgstr ""
+msgstr "Tự động cắt bỏ giá trị của thẻ '' {0} '' trên đối tượng bị xóa {1}"
 
 msgid ""
 "Length of value for tag ''{0}'' on object {1} exceeds the max. allowed "
 "length {2}. Values length is {3}."
 msgstr ""
+"Chiều dài của giá trị cho từ khóa '' {0} '' trên đối tượng {1} vượt quá tối "
+"đa. Cho phépChiều dài {2}. Giá trị chiều dài là {3}."
 
 msgid "Precondition Violation"
-msgstr ""
+msgstr "Điều kiện tiên quyết vi phạm"
 
 msgid "{0} nodes in way {1} exceed the max. allowed number of nodes {2}"
 msgstr ""
+"{0} nút trong cách {1} vượt quá tối đa. Số lượng các nút cho phép {2}"
 
 msgid "API Capabilities Violation"
-msgstr ""
+msgstr "Khả năng API vi phạm"
 
 msgid "Cyclic dependency between relations:"
-msgstr ""
+msgstr "phụ thuộc Cyclic giữa các mối quan hệ:"
 
 msgid "Removed obsolete tags"
-msgstr ""
+msgstr "Gỡ bỏ các thẻ lỗi thời"
 
 msgid "Fix deprecated tags"
-msgstr ""
+msgstr "Fix thẻ phản đối"
 
 msgid ""
 "<html>{0} relations build a cycle because they refer to each other.<br>JOSM "
 "cannot upload them. Please edit the relations and remove the cyclic "
 "dependency.</html>"
 msgstr ""
+"<Html> {0} quan hệ xây dựng một chu kỳ vì chúng liên hệ với nhau <br> JOSM "
+"khác.Không thể tải chúng. Hãy chỉnh sửa các mối quan hệ và loại bỏ các "
+"cyclicPhụ thuộc. </ Html>"
 
 msgid "Relation ..."
-msgstr ""
+msgstr "Mối quan hệ ..."
 
 msgid "... refers to relation"
-msgstr ""
+msgstr "... đề cập đến mối quan hệ"
 
 msgid "Cycling dependencies"
-msgstr ""
+msgstr "Đạp xe phụ thuộc"
 
 msgid "Uploading modified notes"
-msgstr ""
+msgstr "Uploading ghi chú sửa đổi"
 
 msgid "Note {0} failed: {1}"
-msgstr ""
+msgstr "Ghi chú {0} không thành công: {1}"
 
 msgid "Notes failed to upload"
-msgstr ""
+msgstr "Notes không tải lên được"
 
 msgid ""
 "The following are results of automatic validation. Try fixing these, but be "
@@ -2651,156 +2861,156 @@ msgid ""
 "cancel this dialog, you can find the entries in the validator side panel to "
 "inspect them."
 msgstr ""
+"Sau đây là kết quả của việc xác nhận tự động. Hãy thử sửa chữa các, nhưng "
+"làCẩn thận (don''t phá hủy dữ liệu hợp lệ). Khi nghi ngờ bỏ qua chúng. <br> "
+"Khi bạnHủy bỏ hộp thoại này, bạn có thể tìm thấy các mục trong bảng điều "
+"khiển bên validator đểKiểm tra chúng."
 
 msgid "Errors"
-msgstr ""
+msgstr "lỗi"
 
 msgid "Usually this should be fixed."
-msgstr ""
+msgstr "Thông thường điều này cần được cố định."
 
 msgid "Warnings"
-msgstr ""
+msgstr "cảnh báo"
 
 msgid "Fix these when possible."
-msgstr ""
+msgstr "Sửa chữa những khi có thể."
 
 msgid "Other"
-msgstr ""
+msgstr "Khác"
 
 msgid "Informational warnings, expect many false entries."
-msgstr ""
+msgstr "cảnh báo Bảng thông báo, mong đợi nhiều ghi sai."
 
 msgid "Suspicious data found. Upload anyway?"
-msgstr ""
+msgstr "tìm thấy dữ liệu đáng ngờ. Tải lên vậy?"
 
 msgid "Continue upload"
-msgstr ""
+msgstr "Tiếp tục upload"
 
 msgid "Add node {0}"
-msgstr ""
+msgstr "Thêm nút {0}"
 
 msgid "Add way {0}"
-msgstr ""
+msgstr "Thêm cách {0}"
 
 msgid "Add relation {0}"
-msgstr ""
+msgstr "Thêm liên quan {0}"
 
 msgid "Added {0} object"
 msgid_plural "Added {0} objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Added {0} đối tượng"
 
 msgid "New way {0} has 0 nodes"
-msgstr ""
+msgstr "cách New {0} có 0 nút"
 
 msgid "Change node {0}"
-msgstr ""
+msgstr "Thay đổi nút {0}"
 
 msgid "Change way {0}"
-msgstr ""
+msgstr "Thay đổi cách {0}"
 
 msgid "Change relation {0}"
-msgstr ""
+msgstr "Thay đổi liên quan {0}"
 
 msgid "Changed nodes of {0}"
-msgstr ""
+msgstr "Thay đổi nút của {0}"
 
 msgid "Remove \"{0}\" for node ''{1}''"
-msgstr ""
+msgstr "Hủy bỏ \" {0} \"cho nút '' {1} ''"
 
 msgid "Remove \"{0}\" for way ''{1}''"
-msgstr ""
+msgstr "Hủy bỏ \" {0} \"cho cách '' {1} ''"
 
 msgid "Remove \"{0}\" for relation ''{1}''"
-msgstr ""
+msgstr "Hủy bỏ \" {0} \"cho mối quan hệ '' {1} ''"
 
 msgid "Set {0}={1} for node ''{2}''"
-msgstr ""
+msgstr "Set {0} = {1} cho nút '' {2} ''"
 
 msgid "Set {0}={1} for way ''{2}''"
-msgstr ""
+msgstr "Set {0} = {1} cho cách '' {2} ''"
 
 msgid "Set {0}={1} for relation ''{2}''"
-msgstr ""
+msgstr "Set {0} = {1} cho mối quan hệ '' {2} ''"
 
 msgid "Remove \"{0}\" for {1} object"
 msgid_plural "Remove \"{0}\" for {1} objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Hủy bỏ \" {0} \"cho {1} đối tượng"
 
 msgid "Set {0}={1} for {2} object"
 msgid_plural "Set {0}={1} for {2} objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Set {0} = {1} {2} cho đối tượng"
 
 msgid "Deleted {0} tags for {1} object"
 msgid_plural "Deleted {0} tags for {1} objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Deleted {0} tags cho {1} đối tượng"
 
 msgid "Set {0} tags for {1} object"
 msgid_plural "Set {0} tags for {1} objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Set {0} tags cho {1} đối tượng"
 
 msgid "Replace \"{0}\" by \"{1}\" for"
-msgstr ""
+msgstr "Thay thế \" {0} \"của \" {1} \"cho"
 
 msgid "object"
 msgid_plural "objects"
 msgstr[0] "đối tượng"
 
 msgid "Change relation member role for {0} {1}"
-msgstr ""
+msgstr "Thay đổi thành viên quan vai trò cho {0} {1}"
 
 msgid "At least one object to delete required, got empty collection"
-msgstr ""
+msgstr "Ít nhất một đối tượng để xóa yêu cầu, có bộ sưu tập sản phẩm nào"
 
 msgid "Delete node {0}"
-msgstr ""
+msgstr "Xóa nút {0}"
 
 msgid "Delete way {0}"
-msgstr ""
+msgstr "Xóa cách {0}"
 
 msgid "Delete relation {0}"
-msgstr ""
+msgstr "Xóa quan hệ {0}"
 
 msgid "Delete {0} object"
 msgid_plural "Delete {0} objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Xóa {0} đối tượng"
 
 msgid "Delete {0} node"
 msgid_plural "Delete {0} nodes"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Xóa {0} nút"
 
 msgid "Delete {0} way"
 msgid_plural "Delete {0} ways"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Xóa {0} cách"
 
 msgid "Delete {0} relation"
 msgid_plural "Delete {0} relations"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Xóa {0} mối quan hệ"
 
 msgid "Deleted ''{0}''"
-msgstr ""
+msgstr "Xóa '' {0} ''"
 
 msgid "Delete confirmation"
-msgstr ""
+msgstr "Xóa xác nhận"
 
 msgid ""
 "You are about to delete nodes outside of the area you have "
 "downloaded.<br>This can cause problems because other objects (that you do "
 "not see) might use them.<br>Do you really want to delete?"
 msgstr ""
+"Bạn muốn xóa các nút bên ngoài của khu vực bạn cóTải về. <br> Điều này có "
+"thể gây ra vấn đề vì các đối tượng khác (mà bạn làmKhông nhìn thấy) có thể "
+"sử dụng chúng. <br> Bạn có thực sự muốn xoá không?"
 
 msgid ""
 "You are about to delete incomplete objects.<br>This will cause problems "
 "because you don''t see the real object.<br>Do you really want to delete?"
 msgstr ""
+"Bạn muốn xóa các đối tượng không đầy đủ. <br> Này sẽ gây ra vấn đềBởi vì bạn "
+"don''t thấy đối tượng thực sự. <br> Bạn có thực sự muốn xoá không?"
 
 msgid ""
 "You are about to delete {0} relation: {1}<br/>This step is rarely necessary "
@@ -2811,117 +3021,115 @@ msgid_plural ""
 "and cannot be undone easily after being uploaded to the server.<br/>Do you "
 "really want to delete?"
 msgstr[0] ""
-msgstr[1] ""
+"Bạn muốn xóa {0} liên quan: {1} <br/> Bước này hiếm khi cần thiếtVà không "
+"thể được hoàn tác một cách dễ dàng sau khi được tải lên máy chủ. <br/> "
+"BạnThực sự muốn xoá không?"
 
 msgid "Delete relation?"
-msgstr ""
+msgstr "Xóa quan hệ?"
 
 msgid "Move {0} node"
 msgid_plural "Move {0} nodes"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Move {0} nút"
 
 msgid "Purged {0} object"
 msgid_plural "Purged {0} objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "thanh trừng {0} đối tượng"
 
 msgid "Removed nodes from {0}"
-msgstr ""
+msgstr "Gỡ bỏ các nút từ {0}"
 
 msgid "Rotate {0} node"
 msgid_plural "Rotate {0} nodes"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Rotate {0} nút"
 
 msgid "Scale {0} node"
 msgid_plural "Scale {0} nodes"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Scale {0} nút"
 
 msgid "Selected {0} object"
 msgid_plural "Selected {0} objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "chọn {0} đối tượng"
 
 msgid "Sequence: {0}"
-msgstr ""
+msgstr "trình tự: {0}"
 
 msgid "Transform {0} node"
 msgid_plural "Transform {0} nodes"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Biến đổi {0} nút"
 
 msgid ""
 "<html>Layer ''{0}'' already has a conflict for object<br>''{1}''.<br>This "
 "conflict cannot be added.</html>"
 msgstr ""
+"<Html> layer '' {0} '' đã có một cuộc xung đột với đối tượng <br> '' {1} ''. "
+"<br> NàyXung đột không thể được thêm vào. </ Html>"
 
 msgid "Double conflict"
-msgstr ""
+msgstr "xung đột đôi"
 
 msgid ""
 "Layer ''{0}'' does not exist any more. Cannot remove conflict for object "
 "''{1}''."
 msgstr ""
+"Layer '' {0} '' không tồn tại nữa. Không thể loại bỏ xung đột cho các đối "
+"tượng'' {1} ''."
 
 msgid "Add conflict for ''{0}''"
-msgstr ""
+msgstr "Thêm xung đột cho '' {0} ''"
 
 msgid ""
 "Cannot undo command ''{0}'' because layer ''{1}'' is not present any more"
 msgstr ""
+"Không thể hoàn tác lệnh '' {0} '' vì lớp '' {1} '' không được trình bày nữa"
 
 msgid "Resolve conflicts in coordinates in {0}"
-msgstr "Xử lý xung đột tọa độ trong  {0}"
+msgstr "Giải quyết xung đột trong tọa độ trong {0}"
 
 msgid "Cannot resolve undecided conflict."
-msgstr ""
+msgstr "Không thể giải quyết xung đột chưa được quyết định."
 
 msgid "Resolve conflicts in deleted state in {0}"
-msgstr "Xử lý các xung đột trong trạng thái đã bị xóa trong {0}"
+msgstr "Giải quyết xung đột trong tình trạng bị xóa trong {0}"
 
 msgid "Set the ''modified'' flag for node {0}"
-msgstr ""
+msgstr "Thiết lập '' thay đổi '' cờ cho nút {0}"
 
 msgid "Set the ''modified'' flag for way {0}"
-msgstr ""
+msgstr "Thiết lập '' thay đổi '' cờ cho cách {0}"
 
 msgid "Set the ''modified'' flag for relation {0}"
-msgstr ""
+msgstr "Thiết lập '' thay đổi '' cờ cho quan hệ {0}"
 
 msgid "Resolve conflicts in member list of relation {0}"
-msgstr "Xử lý các xung đột trong danh sách các thành phần  {0}"
+msgstr "Giải quyết xung đột trong danh sách thành viên của liên quan {0}"
 
 msgid "Resolve {0} tag conflict in node {1}"
 msgid_plural "Resolve {0} tag conflicts in node {1}"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Resolve {0} tag xung đột tại nút {1}"
 
 msgid "Resolve {0} tag conflict in way {1}"
 msgid_plural "Resolve {0} tag conflicts in way {1}"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Resolve {0} tag xung đột trong cách {1}"
 
 msgid "Resolve {0} tag conflict in relation {1}"
 msgid_plural "Resolve {0} tag conflicts in relation {1}"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Resolve {0} tag xung đột trong mối quan hệ {1}"
 
 msgid "Resolve version conflict for node {0}"
-msgstr ""
+msgstr "phiên bản Resolve xung đột cho các node {0}"
 
 msgid "Resolve version conflict for way {0}"
-msgstr ""
+msgstr "phiên bản Resolve xung đột với cách {0}"
 
 msgid "Resolve version conflict for relation {0}"
-msgstr ""
+msgstr "phiên bản Resolve xung đột cho mối quan hệ {0}"
 
 msgid "Resolve conflicts in node list of way {0}"
-msgstr ""
+msgstr "Giải quyết xung đột trong danh sách nút của cách {0}"
 
 msgid "Main dataset does not include node {0}"
-msgstr ""
+msgstr "số liệu chính không bao gồm nút {0}"
 
 msgid "Apply?"
 msgstr "Áp dụng?"
@@ -2935,153 +3143,190 @@ msgid_plural ""
 "of these tags are defined by its direction:<br/>{1}Do you really want to "
 "change the way direction, thus its semantic meaning?</html>"
 msgstr[0] ""
-msgstr[1] ""
+"<Html> Bạn sẽ đảo ngược cách '' {0} '', <br/> có ý nghĩa ngữ nghĩaCủa thẻ "
+"của nó '' {1} '' được xác định bởi hướng đi của nó. <br/> Bạn có thực sự "
+"muốnThay đổi cách hướng, do đó ý nghĩa ngữ nghĩa của nó? </ Html>"
 
 msgid "Reverse directional way."
-msgstr ""
+msgstr "Đảo ngược chiều hướng."
 
 msgid ""
 "When reversing this way, the following changes are suggested in order to "
 "maintain data consistency."
 msgstr ""
+"Khi đảo chiều theo cách này, những thay đổi sau đây được đề nghị đểDuy trì "
+"tính nhất quán dữ liệu."
 
 msgid "Relation"
-msgstr "Quan hệ"
+msgstr "quan hệ"
 
 msgid "Old role"
-msgstr "vai trò cũ"
+msgstr "Old vai trò"
 
 msgid "New role"
-msgstr "vãi trò mới"
+msgstr "vai trò mới"
 
 msgid "Old key"
-msgstr "khóa cũ"
+msgstr "Old key"
 
 msgid "Old value"
-msgstr "giá trị cũ"
+msgstr "Old giá trị"
 
 msgid "New key"
-msgstr "khóa mới"
+msgstr "chìa khóa mới"
 
 msgid "New value"
-msgstr "giá trị mới"
+msgstr "Giá trị mới"
 
 msgid "Apply selected changes"
-msgstr "Áp dụng các thay đổi đã chọn"
+msgstr "Áp dụng thay đổi lựa chọn"
 
 msgid "Do not apply changes"
-msgstr ""
+msgstr "Đừng áp dụng những thay đổi"
 
 msgid "Please select which changes you want to apply."
-msgstr ""
+msgstr "Hãy chọn thay đổi bạn muốn áp dụng."
 
 msgid "Tags of "
-msgstr ""
+msgstr "Thẻ của "
 
 msgid "Roles in relations referring to"
-msgstr "Các vai trò trong quan hệ đang tham chiếu đến"
+msgstr "Vai trò trong quan hệ đề cập đến"
 
 msgid "Automatic tag correction"
-msgstr "Tự động hiệu chỉnh thẻ"
+msgstr "Tự động điều chỉnh tag"
 
 msgid "Unable to create directory {0}, autosave will be disabled"
-msgstr ""
+msgstr "Không thể tạo thư mục {0}, autosave sẽ bị vô hiệu hóa"
 
 msgid "Unable to create file {0}, other filename will be used"
-msgstr ""
+msgstr "Không thể tạo tập tin {0}, tên tập tin khác sẽ được sử dụng"
 
 msgid "IOError while creating file, autosave will be skipped: {0}"
-msgstr ""
+msgstr "IOError trong khi tạo ra tập tin, tự động lưu sẽ bị bỏ qua: {0}"
 
 msgid "Unable to delete old backup file {0}"
-msgstr ""
+msgstr "Không thể xóa file backup cũ {0}"
 
 msgid "Your work has been saved automatically."
-msgstr ""
+msgstr "Công việc của bạn đã được lưu tự động."
 
 msgid "Restoring files"
-msgstr ""
+msgstr "Khôi phục các tập tin"
 
 msgid "Illegal latitude value ''{0}''"
-msgstr ""
+msgstr "giá trị vĩ độ bất hợp pháp '' {0} ''"
 
 msgid "Illegal longitude value ''{0}''"
-msgstr ""
+msgstr "giá trị kinh độ bất hợp pháp '' {0} ''"
 
 msgid "Question"
-msgstr ""
+msgstr "Câu hỏi"
 
 msgid "Message"
-msgstr ""
+msgstr "Message"
 
 msgid "Enter text"
-msgstr ""
+msgstr "Nhập văn bản"
 
 msgid "Installing plugins"
-msgstr ""
+msgstr "Cài đặt plugins"
 
 msgid ""
 "<html>Settings file asks to append preferences to <b>{0}</b>,<br/> but its "
 "default value is unknown at this moment.<br/> Please activate corresponding "
 "function manually and retry importing."
 msgstr ""
+"<Html> Cài đặt tập tin yêu cầu để nối thêm ưu đãi để <b> {0} </ b>, <br/> "
+"nhưng nóGiá trị mặc định là không biết tại thời điểm này. <br/> Vui lòng "
+"kích hoạt tương ứngChức năng bằng tay và thử lại nhập khẩu."
 
 msgid "Failed to create missing cache directory: {0}"
-msgstr ""
+msgstr "Không thể tạo thư mục mất tích cache: {0}"
 
 msgid "<html>Failed to create missing cache directory: {0}</html>"
+msgstr "<html> Không thể tạo thư mục mất tích cache: {0} </ html>"
+
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
 msgstr ""
 
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
 msgstr ""
+"Không thể khởi sở thích. Sở thích thư mục '' {0} '' không phải là mộtThư mục"
 
 msgid ""
 "<html>Failed to initialize preferences.<br>Preference directory ''{0}'' is "
 "not a directory.</html>"
 msgstr ""
+"<Html> Không thể khởi sở thích. <br> Thư mục Preference '' {0} '' làKhông "
+"phải là một thư mục. </ Html>"
 
 msgid ""
 "Failed to initialize preferences. Failed to create missing preference "
 "directory: {0}"
-msgstr ""
+msgstr "Không thể khởi sở thích. Không thể tạo thiếu sở thíchThư mục: {0}"
 
 msgid ""
 "<html>Failed to initialize preferences.<br>Failed to create missing "
 "preference directory: {0}</html>"
 msgstr ""
+"<Html> Không thể khởi sở thích. <br> Không tạo được mất tíchThư mục ưu tiên: "
+"{0} </ html>"
 
 msgid "Missing preference file ''{0}''. Creating a default preference file."
-msgstr ""
+msgstr "Thiếu tập tin ưu đãi '' {0} ''. Tạo ra một tập tin ưu đãi mặc định."
 
 msgid ""
 "Replacing existing preference file ''{0}'' with default preference file."
 msgstr ""
+"Thay thế tập tin ưu đãi hiện tại '' {0} '' với tập tin ưu đãi mặc định."
 
 msgid ""
 "<html>Failed to initialize preferences.<br>Failed to reset preference file "
 "to default: {0}</html>"
 msgstr ""
+"<Html> Không thể khởi sở thích. <br> Không thể thiết lập lại tập tin ưu "
+"đãiMặc định: {0} </ html>"
 
 msgid ""
 "<html>Preferences file had errors.<br> Making backup of old one to "
 "<br>{0}<br> and creating a new default preference file.</html>"
 msgstr ""
+"File <html> Preferences có lỗi. <br> Làm sao lưu cũ để<br> {0} <br> và tạo "
+"ra một tập tin ưu đãi mặc định mới. </ Html>"
 
 msgid ""
 "Failed to initialize preferences. Failed to reset preference file to "
 "default: {0}"
 msgstr ""
+"Không thể khởi sở thích. Không thể thiết lập lại tập tin ưu tiên choMặc "
+"định: {0}"
 
 msgid "Paint style {0}: {1}"
-msgstr ""
+msgstr "Paint phong cách {0}: {1}"
 
 msgid "Layer: {0}"
 msgstr "Layer: {0}"
 
 msgid "Failed to persist preferences to ''{0}''"
-msgstr ""
+msgstr "Không thể kéo dài ưu đãi để '' {0} ''"
 
 msgid ""
 "Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
@@ -3089,629 +3334,713 @@ msgid ""
 msgstr ""
 
 msgid " (at line {0}, column {1})"
-msgstr ""
+msgstr " (ở dòng {0}, cột {1})"
 
 msgid "Preference setting {0} has been removed since it is no longer used."
-msgstr ""
+msgstr "Preference thiết lập {0} đã được gỡ bỏ vì nó không còn được sử dụng."
 
 msgid "Metric"
-msgstr ""
+msgstr "Metric"
 
 msgid "Chinese"
-msgstr ""
+msgstr "Trung Quốc"
 
 msgid "Imperial"
-msgstr ""
+msgstr "Imperial"
 
 msgid "Nautical Mile"
-msgstr ""
+msgstr "Nautical Mile"
 
 msgid "Failed to load resource ''{0}'', error is {1}."
-msgstr ""
+msgstr "Không thể tải tài nguyên '' {0} '', lỗi là {1}."
 
 msgid "UNKNOWN"
-msgstr "KHÔNG RÕ"
+msgstr "UNKNOWN"
 
 msgid "Unexpected JOSM version number in revision file, value is ''{0}''"
 msgstr ""
+"Unexpected số phiên bản JOSM trong tập tin sửa đổi, giá trị là '' {0} ''"
 
 msgid "The revision file ''/REVISION'' is missing."
-msgstr ""
+msgstr "Các tập tin sửa đổi '' / RÀ SOÁT '' là mất tích."
 
 msgid "Already registered a conflict for primitive ''{0}''."
-msgstr ""
+msgstr "Đã đăng ký một cuộc xung đột với nguyên thủy '' {0} ''."
 
 msgid "Decimal Degrees"
-msgstr "Độ thập phân (ddd.dddddd)"
+msgstr "Degrees Decimal"
 
 msgid "deg° min'' sec\""
-msgstr ""
+msgstr "° ° min '' sec \""
 
 msgid "deg° min'' (Nautical)"
-msgstr ""
+msgstr "° ° min '' (Nautical)"
 
 msgid "Projected Coordinates"
-msgstr ""
+msgstr "Dự Tọa độ"
 
 msgctxt "compass"
 msgid "S"
-msgstr ""
+msgstr "S"
 
 msgctxt "compass"
 msgid "N"
-msgstr ""
+msgstr "N"
 
 msgctxt "compass"
 msgid "W"
-msgstr ""
+msgstr "W"
 
 msgctxt "compass"
 msgid "E"
+msgstr "E"
+
+msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr ""
+"chiếu '' {0} '' không được tìm thấy, đánh dấu '' {1} '' không phải là có thể "
+"sử dụng"
 
-msgid "Not in cache"
+msgid "HTTP error {0} when loading tiles"
 msgstr ""
 
-msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
+msgid "Error downloading tiles: {0}"
 msgstr ""
 
-msgid "ID > 0 expected. Got {0}."
+msgid "Could not load image from tile server"
 msgstr ""
 
-msgid "Version > 0 expected. Got {0}."
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr "chiếu"
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
 msgstr ""
 
+msgid "ID > 0 expected. Got {0}."
+msgstr "ID> 0 dự kiến. Chấn {0}."
+
+msgid "Version > 0 expected. Got {0}."
+msgstr "Version> 0 dự kiến. Chấn {0}."
+
 msgid ""
 "Cannot assign a changesetId > 0 to a new primitive. Value of changesetId is "
 "{0}"
 msgstr ""
+"Không thể gán changesetId> 0 đến một giá trị nguyên thủy mới. Của "
+"changesetId là{0}"
 
 msgid "A primitive with ID = 0 cannot be invisible."
-msgstr ""
+msgstr "Một nguyên thủy với ID = 0 không thể là vô hình."
 
 msgid ""
 "Unable to add primitive {0} to the dataset because it is already included"
 msgstr ""
+"Không thể thêm nguyên thủy {0} cho các số liệu bởi vì nó đã được bao gồm"
 
 msgid ""
 "JOSM expected to find primitive [{0} {1}] in dataset but it is not there. "
 "Please report this at {2}. This is not a critical error, it should be safe "
 "to continue in your work."
 msgstr ""
+"JOSM mong đợi tìm thấy nguyên thủy [{0} {1}] trong tập dữ liệu nhưng nó "
+"không phải là không có.Xin báo cáo này tại {2}. Đây không phải là một lỗi "
+"nghiêm trọng, nó phải được an toànĐể tiếp tục công việc của mình."
 
 msgid "Missing merge target for way with id {0}"
-msgstr ""
+msgstr "mục tiêu hợp nhất cho Thiếu cách với id {0}"
 
 msgid ""
 "Object of type {0} with id {1} was marked to be deleted, but it''s missing "
 "in the source dataset"
 msgstr ""
+"Đối tượng của loại {0} với id {1} đã được đánh dấu để bị xoá, nhưng nó còn "
+"thiếuTrong nguồn dữ liệu"
 
 msgid "Missing merge target for node with id {0}"
-msgstr ""
+msgstr "mục tiêu hợp nhất cho Thiếu nút với id {0}"
 
 msgid "Missing merge target for relation with id {0}"
-msgstr ""
+msgstr "mục tiêu hợp nhất cho mối quan hệ với Thiếu id {0}"
 
 msgid "Missing merge target of type {0} with id {1}"
-msgstr ""
+msgstr "mục tiêu hợp nhất Thiếu các loại {0} với id {1}"
 
 msgid "Conflict in ''visible'' attribute for object of type {0} with id {1}"
 msgstr ""
+"Xung đột trong '' nhìn thấy '' thuộc tính cho đối tượng của loại {0} với id "
+"{1}"
 
 msgid "Merging data..."
-msgstr ""
+msgstr "Kết hợp dữ liệu ..."
 
 msgid "Test ''{0}'' completed in {1}"
-msgstr ""
+msgstr "Kiểm tra '' {0} '' hoàn thành vào {1}"
 
 msgid "Cannot add a way with only {0} nodes."
-msgstr ""
+msgstr "Không thể thêm một cách với chỉ {0} nút."
 
 msgid "Each node must connect exactly 2 ways"
-msgstr ""
+msgstr "Mỗi nút phải kết nối chính xác 2 cách"
 
 msgid "There is an intersection between ways."
-msgstr ""
+msgstr "Có một ngã tư giữa các cách."
 
 msgid ""
 "Cannot merge because either of the participating primitives is new and the "
 "other is not"
 msgstr ""
+"Không thể hợp nhất bởi vì một trong các nguyên thủy tham gia là mới vàKhác "
+"không phải là"
 
 msgid ""
 "Cannot merge primitives with different ids. This id is {0}, the other is {1}"
 msgstr ""
+"Không thể hợp nhất nguyên thủy với id khác nhau. Id này là {0}, khác là {1}"
 
 msgid "node"
 msgid_plural "nodes"
-msgstr[0] "nốt"
+msgstr[0] "nút"
 
 msgid "way"
 msgid_plural "ways"
-msgstr[0] "đường"
+msgstr[0] "cách"
 
 msgid "relation"
 msgid_plural "relations"
 msgstr[0] "quan hệ"
 
 msgid "closedway"
-msgstr ""
+msgstr "closedway"
 
 msgid "multipolygon"
-msgstr ""
+msgstr "multipolygon"
 
 msgid ""
 "Tag collection cannot be applied to a primitive because there are keys with "
 "multiple values."
 msgstr ""
+"Tag sưu tập không thể được áp dụng cho một nguyên thủy vì có phím vớiNhiều "
+"giá trị."
 
 msgid "<anonymous>"
-msgstr ""
+msgstr "<vô danh>"
 
 msgid "Cannot add node {0} to incomplete way {1}."
-msgstr ""
+msgstr "Không thể thêm nút {0} để cách không đầy đủ {1}."
 
 msgid "Nodes in way must be in the same dataset"
-msgstr ""
+msgstr "Nodes trong cách phải nằm trong cùng một tập dữ liệu"
 
 msgid "Deleted node referenced by {0}"
-msgstr ""
+msgstr "nút Deleted tham chiếu bởi {0}"
 
 msgid "Complete node {0} with null coordinates in way {1}"
-msgstr ""
+msgstr "Hoàn thành nút {0} với null tọa độ trong cách {1}"
 
 msgid ""
 "Cannot compare primitive with ID ''{0}'' to primitive with ID ''{1}''."
 msgstr ""
+"Không thể so sánh nguyên thủy với ID '' {0} '' để nguyên thủy với ID '' {1} "
+"''."
 
 msgid "Parameter {0} not in range 0..{1}. Got ''{2}''."
-msgstr ""
+msgstr "Thông số {0} không phải trong khoảng 0 .. {1}. Got '' {2} ''."
 
 msgid "Failed to load map renderer class ''{0}''. The class wasn''t found."
 msgstr ""
+"Không thể tải lớp bản đồ renderer '' {0} ''. Các lớp wasn''t được tìm thấy."
 
 msgid ""
 "Can''t activate map renderer class ''{0}'', because the class wasn''t found."
 msgstr ""
+"Can''t kích hoạt bản đồ lớp renderer '' {0} '', bởi vì wasn''t class được "
+"tìm thấy."
 
 msgid "Activating the standard map renderer instead."
-msgstr ""
+msgstr "Kích hoạt các renderer bản đồ chuẩn để thay thế."
 
 msgid ""
 "Can''t activate map renderer class ''{0}'', because it isn''t a subclass of "
 "''{1}''."
 msgstr ""
+"Can''t kích hoạt bản đồ lớp renderer '' {0} '', bởi vì nó isn''ta lớp con "
+"của'' {1} ''."
 
 msgid ""
 "Can''t activate map renderer class ''{0}'', because it isn''t registered as "
 "map renderer."
 msgstr ""
+"Can''t kích hoạt bản đồ lớp renderer '' {0} '', bởi vì nó isn''t đăng ký "
+"làBản đồ renderer."
 
 msgid "Wireframe Map Renderer"
-msgstr ""
+msgstr "Bản đồ cấu trúc khung Renderer"
 
 msgid "Renders the map as simple wire frame."
-msgstr ""
+msgstr "Hiển thị hình ảnh bản đồ khung dây đơn giản."
 
 msgid "Styled Map Renderer"
-msgstr ""
+msgstr "theo kiểu đồ Renderer"
 
 msgid "Renders the map using style rules in a set of style sheets."
 msgstr ""
+"Hiển thị hình ảnh bản đồ bằng cách sử dụng quy tắc phong cách trong một tập "
+"hợp các style sheets."
 
 msgid "inactive"
-msgstr ""
+msgstr "không hoạt động"
 
 msgid "selected"
-msgstr "được chọn"
+msgstr "lựa chọn"
 
 msgid "Relation: selected"
-msgstr ""
+msgstr "Relation: chọn"
 
 msgid "Node: standard"
-msgstr ""
+msgstr "Node: tiêu chuẩn"
 
 msgid "Node: connection"
-msgstr ""
+msgstr "Node: kết nối"
 
 msgid "Node: tagged"
-msgstr ""
+msgstr "Node: gắn thẻ"
 
 msgid "untagged way"
-msgstr ""
+msgstr "cách gắn thẻ"
 
 msgid "background"
-msgstr ""
+msgstr "background"
 
 msgid "highlight"
-msgstr ""
+msgstr "nổi bật"
 
 msgid "highlight wireframe"
-msgstr ""
+msgstr "highlight wireframe"
 
 msgid "untagged"
-msgstr ""
+msgstr "không được gắn thẻ"
 
 msgid "text"
-msgstr ""
+msgstr "văn bản"
 
 msgid "areatext"
+msgstr "areatext"
+
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
 msgstr ""
 
-msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
 msgstr ""
 
+msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
+msgstr "Parameter must begin with a ''+'' character (found ''{0}'')"
+
 msgid "Unknown parameter: ''{0}''."
-msgstr ""
+msgstr "tham số chưa biết:. '' {0} ''"
 
 msgid "Value expected for parameter ''{0}''."
-msgstr ""
+msgstr "Giá trị dự kiến ​​cho tham số '' {0} ''."
 
 msgid "No value expected for parameter ''{0}''."
-msgstr ""
+msgstr "Không có giá trị dự kiến ​​cho tham số '' {0} ''."
 
 msgid "Unexpected parameter format (''{0}'')"
-msgstr ""
+msgstr "định dạng tham số không mong đợi ('' {0} '')"
 
 msgid "Value ''{0}'' for option +init not supported."
-msgstr ""
+msgstr "Giá trị '' {0} '' cho các tùy chọn + init không được hỗ trợ."
 
 msgid ": "
-msgstr ""
+msgstr ": "
 
 msgid "Ellipsoid ''{0}'' not supported."
-msgstr ""
+msgstr "Ellipsoid '' {0} '' không được hỗ trợ."
 
 msgid "Combination of ellipsoid parameters is not supported."
-msgstr ""
+msgstr "Sự kết hợp của các thông số ellipsoid không được hỗ trợ."
+
+msgid "Unknown datum identifier: ''{0}''"
+msgstr "Không rõ danh tánh mốc: '' {0} ''"
 
 msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
-msgstr ""
+msgstr "Ellipsoid yêu cầu (+ ellps = * hoặc + a = *, + b = *)"
 
 msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
-
-msgid "Unknown datum identifier: ''{0}''"
-msgstr ""
+"Grid thay đổi tập tin '' {0} '' cho các tùy chọn + nadgrids không được hỗ "
+"trợ."
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
-msgstr ""
+msgstr "Datum yêu cầu (+ mốc = *, + towgs84 = * hoặc + nadgrids = *)"
 
 msgid ""
 "Unexpected number of arguments for parameter ''towgs84'' (must be 3 or 7)"
-msgstr ""
+msgstr "Số bất ngờ của đối số cho tham số '' towgs84 '' (phải là 3 hoặc 7)"
 
 msgid "Unable to parse value of parameter ''towgs84'' (''{0}'')"
-msgstr ""
+msgstr "Không thể phân tích giá trị của tham số '' towgs84 '' ('' {0} '')"
 
 msgid "Projection required (+proj=*)"
-msgstr ""
+msgstr "chiếu yêu cầu (+ proj = *)"
 
 msgid "Unknown projection identifier: ''{0}''"
-msgstr ""
+msgstr "Không rõ danh tánh chiếu: '' {0} ''"
 
 msgid "Unexpected number of arguments for parameter ''+bounds'' (must be 4)"
-msgstr ""
+msgstr "số bất ngờ của đối số cho tham số '' + giới hạn '' (phải 4)"
 
 msgid "Unknown parameter ''{0}''"
-msgstr ""
+msgstr "tham số không rõ '' {0} ''"
 
 msgid "Expected number argument for parameter ''{0}''"
-msgstr ""
+msgstr "Dự kiến ​​số lượng đối số cho tham số '' {0} ''"
 
 msgid "Unable to parse value ''{1}'' of parameter ''{0}'' as number."
 msgstr ""
+"Không thể phân tích giá trị '' {1} '' của tham số '' {0} '' là số lượng."
 
 msgid ""
 "Unable to parse value ''{1}'' of parameter ''{0}'' as coordinate value."
 msgstr ""
+"Không thể phân tích giá trị '' {1} '' của tham số '' {0} '' như phối hợp giá "
+"trị."
 
 msgid "Custom Projection"
-msgstr ""
+msgstr "Custom chiếu"
 
 msgid "GRS80"
-msgstr ""
+msgstr "GRS80"
 
 msgid "WGS84"
-msgstr ""
+msgstr "WGS84"
 
 msgid "Parameter ''{0}'' required."
-msgstr ""
+msgstr "Thông số '' {0} '' yêu cầu."
 
 msgid "Lambert Conformal Conic"
-msgstr ""
+msgstr "Lambert Conformal Conic"
 
 msgid "Lat/lon (Geodetic)"
-msgstr ""
+msgstr "Lat / lon (trắc địa)"
 
 msgid "Mercator"
-msgstr ""
+msgstr "Mercator"
 
 msgid "Swiss Oblique Mercator"
-msgstr ""
+msgstr "Swiss xiên Mercator"
 
 msgid "Transverse Mercator"
-msgstr ""
+msgstr "Transverse Mercator"
 
 msgid ""
 "Error initializing test {0}:\n"
 " {1}"
 msgstr ""
+"Lỗi khởi tạo thử nghiệm {0}: \n"
+"{1}"
 
 msgid "validation error"
-msgstr ""
+msgstr "xác nhận lỗi"
 
 msgid "validation warning"
-msgstr ""
+msgstr "xác nhận cảnh báo"
 
 msgid "validation other"
-msgstr ""
+msgstr "xác nhận khác"
 
 msgid "Running test {0}"
-msgstr ""
+msgstr "Chạy thử nghiệm {0}"
 
 msgid "E-mail address contains non-ascii characters"
-msgstr ""
+msgstr "địa chỉ E-mail có chứa các ký tự khác ASCII không"
 
 msgid "E-mail address is invalid"
-msgstr ""
+msgstr "địa chỉ E-mail không hợp lệ"
 
 msgid "E-mail address contains an invalid username: {0}"
-msgstr ""
+msgstr "địa chỉ E-mail có chứa tên người dùng không hợp lệ: {0}"
 
 msgid "E-mail address contains an invalid domain: {0}"
-msgstr ""
+msgstr "địa chỉ E-mail có chứa một miền không hợp lệ: {0}"
 
 msgid "URL contains non-ascii characters"
-msgstr ""
+msgstr "URL chứa các ký tự khác ASCII không"
 
 msgid "URL is invalid"
-msgstr ""
+msgstr "URL không hợp lệ"
 
 msgid "URL contains an invalid protocol: {0}"
-msgstr ""
+msgstr "URL chứa một giao thức không hợp lệ: {0}"
 
 msgid "URL contains an invalid authority: {0}"
-msgstr ""
+msgstr "URL có chứa một cơ quan không hợp lệ: {0}"
 
 msgid "URL contains an invalid path: {0}"
-msgstr ""
+msgstr "URL có chứa một đường dẫn không hợp lệ: {0}"
 
 msgid "URL contains an invalid query: {0}"
-msgstr ""
+msgstr "URL có chứa một truy vấn không hợp lệ: {0}"
 
 msgid "URL contains an invalid fragment: {0}"
-msgstr ""
+msgstr "URL có chứa một đoạn không hợp lệ: {0}"
 
 msgid "Addresses"
-msgstr ""
+msgstr "Địa chỉ"
 
 msgid "Checks for errors in addresses and associatedStreet relations."
-msgstr ""
+msgstr "Kiểm tra các lỗi trong các địa chỉ và quan hệ associatedStreet."
 
 msgid "Multiple associatedStreet relations"
-msgstr ""
+msgstr "Nhiều quan hệ associatedStreet"
 
 msgid "House number without street"
-msgstr ""
+msgstr "Số nhà mà không có đường phố"
 
 msgid "House number ''{0}'' duplicated"
-msgstr ""
+msgstr "Nhà số '' {0} '' nhân đôi"
 
 msgid "Duplicate house numbers"
-msgstr ""
+msgstr "số nhà Duplicate"
 
 msgid "Multiple street names in relation"
-msgstr ""
+msgstr "tên đường phố Nhiều trong mối quan hệ"
 
 msgid "House number too far from street"
-msgstr ""
+msgstr "Số nhà quá xa từ đường phố"
 
 msgid "API Capabilities"
-msgstr ""
+msgstr "Khả năng API"
 
 msgid "Checks for errors against API capabilities"
-msgstr ""
+msgstr "Kiểm tra các lỗi chống lại khả năng API"
 
 msgid ""
 "Way contains more than {0} nodes. It should be replaced by a multipolygon"
-msgstr ""
+msgstr "Way chứa hơn {0} nút. Nó cần được thay thế bởi một multipolygon"
 
 msgid "Way contains more than {0} nodes. It should be split or simplified"
-msgstr ""
+msgstr "Way chứa hơn {0} nút. Nó nên được chia nhỏ và đơn giản hóa"
 
 msgid "Barriers and entrances"
-msgstr ""
+msgstr "rào và lối ra vào"
 
 msgid "Checks for errors in barriers and entrances."
-msgstr ""
+msgstr "Kiểm tra các lỗi trong hàng rào và cổng ra vào."
 
 msgid "Barrier entrance not set on a barrier"
-msgstr ""
+msgstr "Barrier lối vào không được đặt vào một hàng rào"
 
 msgid "Coastlines"
-msgstr ""
+msgstr "Đường bờ biển"
 
 msgid "This test checks that coastlines are correct."
-msgstr ""
+msgstr "kiểm tra thử nghiệm này là đường bờ biển là chính xác."
 
 msgid "Unconnected coastline"
-msgstr ""
+msgstr "bờ biển không có liên quan"
 
 msgid "Unordered coastline"
-msgstr ""
+msgstr "bờ biển không có thứ tự"
 
 msgid "Reversed coastline"
-msgstr ""
+msgstr "đảo ngược bờ biển"
 
 msgid "Conditional Keys"
-msgstr ""
+msgstr "điều kiện Keys"
 
 msgid "Tests for the correct usage of ''*:conditional'' tags."
-msgstr ""
+msgstr "Các thử nghiệm về việc sử dụng đúng '' *: có điều kiện '' thẻ."
 
 msgid "Does not match pattern ''restriction value @ condition''"
-msgstr ""
+msgstr "Không phù hợp với mô hình '' giá trị hạn chế @ tình trạng ''"
 
 msgid "{0} is not a valid restriction value"
-msgstr ""
+msgstr "{0} không phải là một giá trị hợp lệ hạn chế"
 
 msgid "Wrong syntax in {0} key"
-msgstr ""
+msgstr "cú pháp sai lệch trong {0} key"
 
 msgid "Error in {0} value: {1}"
-msgstr ""
+msgstr "Lỗi trong {0} giá trị: {1}"
 
 msgid "Crossing ways"
-msgstr ""
+msgstr "cách Crossing"
 
 msgid "Crossing buildings"
-msgstr ""
+msgstr "tòa nhà Crossing"
 
 msgid "Crossing waterways"
-msgstr ""
+msgstr "Crossing đường thủy"
 
 msgid "Crossing waterway/highway"
-msgstr ""
+msgstr "Vượt đường thủy / đường cao tốc"
 
 msgid "Crossing boundaries"
-msgstr ""
+msgstr "ranh giới Crossing"
 
 msgid "Crossing barriers"
-msgstr ""
+msgstr "rào cản Crossing"
 
 msgid ""
 "This test checks if two roads, railways, waterways or buildings crosses in "
 "the same layer, but are not connected by a node."
 msgstr ""
+"Thử nghiệm này nếu hai con đường, đường sắt, đường thủy hoặc các tòa nhà qua "
+"trongCùng một lớp, nhưng không được nối với nhau bằng một nút."
 
 msgid "Duplicated nodes"
-msgstr ""
+msgstr "nút trùng lặp"
 
 msgid "This test checks that there are no nodes at the very same location."
-msgstr ""
+msgstr "Thử nghiệm này mà không có các nút tại vị trí rất giống nhau."
 
 msgid "Mixed type duplicated nodes"
-msgstr ""
+msgstr "loại hỗn hợp nhân đôi nút"
 
 msgid "Highway duplicated nodes"
-msgstr ""
+msgstr "lộ hạch nhân đôi"
 
 msgid "Railway duplicated nodes"
-msgstr ""
+msgstr "Đường sắt hạch nhân đôi"
 
 msgid "Waterway duplicated nodes"
-msgstr ""
+msgstr "Waterway nhân đôi nút"
 
 msgid "Boundary duplicated nodes"
-msgstr ""
+msgstr "Boundary nhân đôi nút"
 
 msgid "Power duplicated nodes"
-msgstr ""
+msgstr "Power hạch nhân đôi"
 
 msgid "Natural duplicated nodes"
-msgstr ""
+msgstr "Natural nhân đôi nút"
 
 msgid "Building duplicated nodes"
-msgstr ""
+msgstr "Xây dựng nhân đôi nút"
 
 msgid "Landuse duplicated nodes"
-msgstr ""
+msgstr "sử dụng đất nhân đôi nút"
 
 msgid "Other duplicated nodes"
-msgstr ""
+msgstr "các nút khác nhân đôi"
 
 msgid "Nodes at same position"
-msgstr ""
+msgstr "Các nút ở vị trí tương đương"
 
 msgid "Duplicated relations"
-msgstr ""
+msgstr "quan hệ trùng lặp"
 
 msgid ""
 "This test checks that there are no relations with same tags and same members "
 "with same roles."
 msgstr ""
+"Thử nghiệm này kiểm tra mà không có quan hệ với cùng một thẻ và cùng các "
+"thành viênVới cùng một vai trò."
 
 msgid "Relations with same members"
-msgstr ""
+msgstr "Quan hệ với các thành viên cùng"
 
 msgid "Delete duplicate relations"
-msgstr ""
+msgstr "Xóa quan hệ trùng lặp"
 
 msgid "Duplicated ways"
-msgstr ""
+msgstr "cách trùng lặp"
 
 msgid ""
 "This test checks that there are no ways with same node coordinates and "
 "optionally also same tags."
 msgstr ""
+"Thử nghiệm này kiểm tra mà không có những cách có tọa độ cùng một nút vàTùy "
+"chọn cũng cùng một thẻ."
 
 msgid "Ways with same position"
-msgstr ""
+msgstr "cách với cùng một vị trí"
 
 msgid "Delete duplicate ways"
-msgstr ""
+msgstr "Xóa cách trùng lặp"
 
 msgid "Duplicated way nodes"
-msgstr ""
+msgstr "cách hạch Nhân đôi"
 
 msgid "Checks for ways with identical consecutive nodes."
-msgstr ""
+msgstr "Kiểm tra cách với các nút giống hệt nhau liên tiếp."
 
 msgid "Highways"
-msgstr ""
+msgstr "Đường cao tốc"
 
 msgid "Performs semantic checks on highways."
-msgstr ""
+msgstr "Thực hiện kiểm tra ngữ nghĩa trên đường cao tốc."
 
 msgid "Incorrect roundabout (highway: {0} instead of {1})"
-msgstr ""
+msgstr "vòng xoay không chính xác (đường cao tốc: {0} thay vì {1})"
 
 msgid "Highway link is not linked to adequate highway/link"
-msgstr ""
+msgstr "liên kết lộ không liên kết với đầy đủ đường cao tốc / link"
 
 msgid "Missing pedestrian crossing information"
-msgstr ""
+msgstr "Thiếu thông tin cho người đi bộ qua"
 
 msgid "Unknown country code: {0}"
-msgstr ""
+msgstr "mã quốc gia Unknown: {0}"
 
 msgid "Unknown source:maxspeed context: {0}"
-msgstr ""
+msgstr "nguồn Unknown: bối cảnh maxspeed: {0}"
 
 msgid "Internet tags"
-msgstr ""
+msgstr "thẻ Internet"
 
 msgid "Checks for errors in internet-related tags."
-msgstr ""
+msgstr "Kiểm tra các lỗi trong các thẻ liên quan đến internet."
 
 msgid " URL cannot be converted to ASCII: {0}"
-msgstr ""
+msgstr " URL không thể được chuyển đổi sang ASCII: {0}"
 
 msgid "''{0}'': {1}"
-msgstr ""
+msgstr "'' {0} '': {1}"
 
 msgid "Lane tags"
-msgstr ""
+msgstr "thẻ Lane"
 
 msgid "Test that validates ''lane:'' tags."
-msgstr ""
+msgstr "Test mà xác nhận '' làn đường: '' thẻ."
 
 msgid "Number of {0} greater than {1}"
-msgstr ""
+msgstr "Số {0} lớn hơn {1}"
 
 msgid "{0}+{1}"
-msgstr ""
+msgstr "{0} + {1}"
 
 msgid "Number of lane dependent values inconsistent"
-msgstr ""
+msgstr "Số các giá trị phụ thuộc vào làn đường không phù hợp"
 
 msgid "Number of lane dependent values inconsistent in forward direction"
 msgstr ""
+"Số các giá trị phụ thuộc vào làn đường không phù hợp trong hướng về phía "
+"trước"
 
 msgid "Number of lane dependent values inconsistent in backward direction"
-msgstr ""
+msgstr "Số các giá trị phụ thuộc vào làn đường không phù hợp theo hướng lùi"
 
 msgid "Long segments"
 msgstr ""
@@ -3723,570 +4052,605 @@ msgid "Very long segment of {0} kilometers"
 msgstr ""
 
 msgid "Tag checker (MapCSS based)"
-msgstr ""
+msgstr "Tag checker (MapCSS dựa)"
 
 msgid "This test checks for errors in tag keys and values."
-msgstr ""
+msgstr "Thử nghiệm này cho các lỗi trong khóa tag và giá trị."
 
 msgid "Unable to replace argument {0} in {1}: {2}"
-msgstr ""
+msgstr "Không thể thay thế tham số {0} trong {1}: {2}"
 
 msgid "Fix of {0}"
-msgstr ""
+msgstr "Fix của {0}"
 
 msgid " or "
-msgstr ""
+msgstr " hoặc "
 
 msgid "{0}, use {1} instead"
-msgstr ""
+msgstr "{0}, sử dụng {1} thay vì"
 
 msgid "Adding {0} to tag checker"
-msgstr ""
+msgstr "Thêm {0} để gắn thẻ checker"
 
 msgid "Failed to add {0} to tag checker"
-msgstr ""
+msgstr "Không thể thêm {0} để gắn thẻ checker"
 
 msgid "Multipolygon"
-msgstr ""
+msgstr "Multipolygon"
 
 msgid "This test checks if multipolygons are valid."
-msgstr ""
+msgstr "Thử nghiệm này nếu multipolygons là hợp lệ."
 
 msgid "Area style way is not closed"
-msgstr ""
+msgstr "phong cách Area cách là không đóng cửa"
 
 msgid "No outer way for multipolygon"
-msgstr ""
+msgstr "Không có cách nào ngoài cho multipolygon"
 
 msgid "Role for ''{0}'' should be ''{1}''"
-msgstr ""
+msgstr "Vai trò cho '' {0} '' là '' {1} ''"
 
 msgid "No area style for multipolygon"
-msgstr ""
+msgstr "Không có phong cách khu vực cho multipolygon"
 
 msgid ""
 "Multipolygon relation should be tagged with area tags and not the outer way"
 msgid_plural ""
 "Multipolygon relation should be tagged with area tags and not the outer ways"
 msgstr[0] ""
-msgstr[1] ""
+"Quan hệ Multipolygon nên được gắn với thẻ khu vực và không phải là cách bên "
+"ngoài"
 
 msgid ""
 "With the currently used mappaint style the style for inner way equals the "
 "multipolygon style"
 msgstr ""
+"Với phong cách mappaint hiện đang sử dụng các phong cách cho chiều ở bên "
+"trong bằng cácPhong cách multipolygon"
 
 msgid "Style for outer way mismatches"
-msgstr ""
+msgstr "Style cho cách bên ngoài bất xứng"
 
 msgid ""
 "With the currently used mappaint style(s) the style for outer way mismatches "
 "polygon"
 msgstr ""
+"Với phong cách hiện đang sử dụng mappaint (s) phong cách cho cách bên ngoài "
+"bất xứngĐa giác"
 
 msgid "Area style on outer way"
-msgstr ""
+msgstr "phong cách Area trên đường bên ngoài"
 
 msgid "Multipolygon is not closed"
-msgstr ""
+msgstr "Multipolygon là không đóng cửa"
 
 msgid "Multipolygon inner way is outside"
-msgstr ""
+msgstr "Multipolygon chiều ở bên trong là bên ngoài"
 
 msgid "Intersection between multipolygon ways"
-msgstr ""
+msgstr "Giao lộ giữa cách multipolygon"
 
 msgid "No useful role for multipolygon member"
-msgstr ""
+msgstr "Không có vai trò hữu ích cho thành viên multipolygon"
 
 msgid "Non-Way in multipolygon"
-msgstr ""
+msgstr "Non-Way trong multipolygon"
 
 msgid "Missing name:* translation"
-msgstr ""
+msgstr "Thiếu tên: * Dịch thuật"
 
 msgid ""
 "This test finds multilingual objects whose ''name'' attribute is not equal "
 "to some ''name:*'' attribute and not a composition of ''name:*'' attributes, "
 "e.g., Italia - Italien - Italy."
 msgstr ""
+"Test này tìm đối tượng đa ngôn ngữ mà '' tên '' thuộc tính là không bình "
+"đẳngMột số '' tên: * '' thuộc tính và không phải là một phần của '' tên: * "
+"'' thuộc tínhVí dụ, Italia - Italien -. Ý"
 
 msgid "Missing name:*={0}. Add tag with correct language key."
-msgstr ""
+msgstr "Thiếu tên:. * = {0} Thêm tag với phím ngôn ngữ chính xác."
 
 msgid "A name is missing, even though name:* exists."
-msgstr ""
+msgstr "Một tên là mất tích, mặc dù tên: * tồn tại."
 
 msgid "Opening hours syntax"
-msgstr ""
+msgstr "Mở giờ cú pháp"
 
 msgid "This test checks the correct usage of the opening hours syntax."
-msgstr ""
+msgstr "thử nghiệm này kiểm tra việc sử dụng đúng giờ mở cửa cú pháp."
 
 msgid "opening_hours value can be prettified"
-msgstr ""
+msgstr "opening_hours giá trị có thể được tô điểm"
 
 msgid "Unexpected token:"
-msgstr ""
+msgstr "token mong đợi:"
 
 msgid "Unexpected token (school holiday parser):"
-msgstr ""
+msgstr "(phân tích cú pháp nghỉ học) Unexpected mã thông báo:"
 
 msgid "Unexpected token in number range:"
-msgstr ""
+msgstr "token Unexpected trong dãy số:"
 
 msgid "Unexpected token in week range:"
-msgstr ""
+msgstr "token Unexpected trong phạm vi tuần:"
 
 msgid "Unexpected token in weekday range:"
-msgstr ""
+msgstr "token Unexpected trong phạm vi các ngày trong tuần:"
 
 msgid "Unexpected token in month range:"
-msgstr ""
+msgstr "token Unexpected trong khoảng tháng:"
 
 msgid "Unexpected token in year range:"
-msgstr ""
+msgstr "token Unexpected trong phạm vi năm:"
 
 msgid "Invalid/unsupported syntax."
-msgstr ""
+msgstr "cú pháp không hợp lệ / không được hỗ trợ."
 
 msgid "Overlapping ways"
-msgstr ""
+msgstr "Chồng chéo cách"
 
 msgid ""
 "This test checks that a connection between two nodes is not used by more "
 "than one way."
 msgstr ""
+"Thử nghiệm này kiểm tra rằng một kết nối giữa hai nút không được sử dụng bởi "
+"hơnHơn một cách."
 
 msgid "Areas share segment"
-msgstr ""
+msgstr "vùng phân đoạn chia sẻ"
 
 msgid "Highways share segment with area"
-msgstr ""
+msgstr "Đường cao tốc đoạn cổ phiếu, với khu vực"
 
 msgid "Railways share segment with area"
-msgstr ""
+msgstr "Đường sắt phân khúc thị phần với khu vực"
 
 msgid "Ways share segment with area"
-msgstr ""
+msgstr "phân chia cách với khu vực"
 
 msgid "Overlapping highways"
-msgstr ""
+msgstr "chồng chéo xa lộ"
 
 msgid "Overlapping railways"
-msgstr ""
+msgstr "Chồng chéo đường sắt"
 
 msgid "Way contains segment twice"
-msgstr ""
+msgstr "Way chứa đoạn hai lần"
 
 msgid "Power lines"
-msgstr ""
+msgstr "dòng điện"
 
 msgid ""
 "Checks for nodes in power lines that do not have a power=tower/pole tag."
 msgstr ""
+"Kiểm tra cho các nút trong đường dây điện mà không có một sức mạnh = tháp / "
+"tag cực."
 
 msgid "Missing power tower/pole within power line"
-msgstr ""
+msgstr "Thiếu tháp điện / cực trong đường dây điện"
 
 msgid "Role verification problem"
-msgstr ""
+msgstr "Vấn đề xác minh vai trò"
 
 msgid "Relation checker"
-msgstr ""
+msgstr "Quan hệ checker"
 
 msgid "Checks for errors in relations."
-msgstr ""
+msgstr "Kiểm tra các lỗi trong các mối quan hệ."
 
 msgid ""
 "Route scheme is unspecified. Add {0} ({1}=public_transport; {2}=legacy)"
 msgstr ""
+"Đề án Route là không xác định Thêm {0}. ({1} = public_transport; {2} = di "
+"sản)"
 
 msgid "Relation type is unknown"
-msgstr ""
+msgstr "kiểu quan hệ là không rõ"
 
 msgid "Relation is empty"
-msgstr ""
+msgstr "Relation là trống rỗng"
 
 msgid "Role member does not match expression {0} in template {1}"
-msgstr ""
+msgstr "Vai trò thành viên không phù hợp {0} biểu hiện trong mẫu {1}"
 
 msgid ""
 "Role member type {0} does not match accepted list of {1} in template {2}"
 msgstr ""
+"Vai trò thành viên loại {0} không phù hợp với danh sách được chấp nhận {1} "
+"trong mẫu {2}"
 
 msgid "<empty>"
-msgstr ""
+msgstr "<trống>"
 
 msgid "Role {0} unknown in templates {1}"
-msgstr ""
+msgstr "Vai trò {0} không rõ trong các mẫu {1}"
 
 msgid "Empty role type found when expecting one of {0}"
-msgstr ""
+msgstr "loại vai trò rỗng được tìm thấy khi chờ đợi một trong {0}"
 
 msgid "Role {0} missing"
-msgstr ""
+msgstr "Vai trò {0} mất tích"
 
 msgid "Number of {0} roles too low ({1})"
-msgstr ""
+msgstr "Số {0} vai trò quá thấp ({1})"
 
 msgid "Number of {0} roles too high ({1})"
-msgstr ""
+msgstr "Số {0} vai trò quá cao ({1})"
 
 msgid "Self-intersecting ways"
-msgstr ""
+msgstr "cách tự giao nhau"
 
 msgid ""
 "This test checks for ways that contain some of their nodes more than once."
 msgstr ""
+"Thử nghiệm này cho cách có chứa một số các nút của họ nhiều hơn một lần."
 
 msgid "Similarly named ways"
-msgstr ""
+msgstr "Tương tự như vậy cách đặt tên"
 
 msgid ""
 "This test checks for ways with similar names that may have been misspelled."
-msgstr ""
+msgstr "Thử nghiệm này cho cách có tên tương tự có thể đã bị sai chính tả."
 
 msgid "Tag checker"
-msgstr ""
+msgstr "Tag checker"
 
 msgid "Adding {0} to ignore tags"
-msgstr ""
+msgstr "Thêm {0} để bỏ qua thẻ"
 
 msgid "Invalid tagchecker line - {0}: {1}"
-msgstr ""
+msgstr "dòng tagchecker không hợp lệ - {0}: {1}"
 
 msgid "Invalid spellcheck line: {0}"
-msgstr ""
+msgstr "dòng kiểm tra chính tả không hợp lệ: {0}"
 
 msgid "Adding {0} to spellchecker"
-msgstr ""
+msgstr "Thêm {0} để kiểm tra chính tả"
 
 msgid ""
 "Could not access data file(s):\n"
 "{0}"
 msgstr ""
+"Không thể truy cập tập tin dữ liệu (s): \n"
+"{0}"
 
 msgid "Suspicious tag/value combinations"
-msgstr ""
+msgstr "kết hợp tag Suspicious / giá trị"
 
 msgid "Key ''{0}'' invalid."
-msgstr ""
+msgstr "Key '' {0} '' không hợp lệ."
 
 msgid "Tag value contains character with code less than 0x20"
-msgstr ""
+msgstr "Tag giá trị chứa ký tự với mã ít hơn 0x20"
 
 msgid "Tag key contains character with code less than 0x20"
-msgstr ""
+msgstr "Tag key chứa ký tự với mã ít hơn 0x20"
 
 msgid "Tag value longer than allowed"
-msgstr ""
+msgstr "Tag giá trị dài hơn cho phép"
 
 msgid "Tag key longer than allowed"
-msgstr ""
+msgstr "Tag trọng còn hơn mức cho phép"
 
 msgid "Tags with empty values"
-msgstr ""
-
-msgid "Invalid property key"
-msgstr ""
+msgstr "thẻ với giá trị rỗng"
 
 msgid "Invalid white space in property key"
-msgstr ""
+msgstr "không gian trắng không hợp lệ trong chính tài sản"
 
 msgid "Property values start or end with white space"
-msgstr ""
+msgstr "giá trị tài sản bắt đầu hoặc kết thúc với không gian trắng"
 
 msgid "Property values contain HTML entity"
+msgstr "giá trị tài sản có thực thể HTML"
+
+msgid "Key ''{0}'' looks like ''{1}''."
 msgstr ""
 
-msgid "Key ''{0}'' not in presets."
+msgid "Misspelled property key"
 msgstr ""
 
+msgid "Key ''{0}'' not in presets."
+msgstr "Key '' {0} '' không trong cài đặt trước."
+
 msgid "Presets do not contain property key"
+msgstr "Presets không chứa key bất động sản"
+
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
 msgstr ""
 
-msgid "Value ''{0}'' for key ''{1}'' not in presets."
+msgid "Misspelled property value"
 msgstr ""
 
+msgid "Value ''{0}'' for key ''{1}'' not in presets."
+msgstr "Giá trị '' {0} '' cho khóa '' {1} '' không trong cài đặt trước."
+
 msgid "Presets do not contain property value"
-msgstr ""
+msgstr "Presets không chứa giá trị tài sản"
 
 msgid "FIXMES"
-msgstr ""
+msgstr "FIXMES"
 
 msgid "Check property keys."
-msgstr ""
+msgstr "Kiểm tra phím bất động sản."
 
 msgid "Validate that property keys are valid checking against list of words."
 msgstr ""
+"Xác nhận rằng các phím sở hữu có giá trị kiểm tra đối với danh sách các từ."
 
 msgid "Use complex property checker."
-msgstr ""
+msgstr "Sử dụng kiểm tra tài sản phức tạp."
 
 msgid "Validate property values and tags using complex rules."
 msgstr ""
+"Xác nhận giá trị tài sản và các thẻ bằng cách sử dụng quy tắc phức tạp."
 
 msgid "TagChecker source"
-msgstr ""
+msgstr "TagChecker nguồn"
 
 msgid "Data sources ({0})"
-msgstr ""
+msgstr "nguồn dữ liệu ({0})"
 
 msgid "Check property values."
-msgstr ""
+msgstr "Kiểm tra giá trị tài sản."
 
 msgid "Validate that property values are valid checking against presets."
 msgstr ""
+"Xác nhận rằng giá trị tài sản có giá trị kiểm tra đối với cài đặt trước."
 
 msgid "Check for FIXMES."
-msgstr ""
+msgstr "Kiểm tra cho FIXMES."
 
 msgid "Looks for nodes or ways with FIXME in any property value."
-msgstr ""
+msgstr "Có vẻ cho các nút hoặc cách với FIXME trong bất kỳ giá trị tài sản."
 
 msgid "Fix tags"
-msgstr ""
+msgstr "Fix thẻ"
 
 msgid "Could not find element type"
-msgstr ""
+msgstr "Không tìm thấy loại nguyên tố"
 
 msgid "Incorrect number of parameters"
-msgstr ""
+msgstr "số không chính xác của các thông số"
 
 msgid "Could not find warning level"
-msgstr ""
+msgstr "Không tìm thấy mức cảnh báo"
 
 msgid "Illegal expression ''{0}''"
-msgstr ""
+msgstr "biểu hiện bất hợp pháp '' {0} ''"
 
 msgid "Illegal regular expression ''{0}''"
-msgstr ""
+msgstr "biểu hiện thường xuyên bất hợp pháp '' {0} ''"
 
 msgid "Turnrestrictions"
-msgstr ""
+msgstr "Turnrestrictions"
 
 msgid "This test checks if turnrestrictions are valid."
-msgstr ""
+msgstr "Thử nghiệm này nếu turnrestrictions là hợp lệ."
 
 msgid "Unknown role"
-msgstr ""
+msgstr "vai trò Unknown"
 
 msgid "Unknown member type"
-msgstr ""
+msgstr "Không biết loại thành viên"
 
 msgid "More than one \"from\" way found"
-msgstr ""
+msgstr "More than one \"from\" way found"
 
 msgid "More than one \"to\" way found"
-msgstr ""
+msgstr "More than one \"to\" way found"
 
 msgid "More than one \"via\" node found"
-msgstr ""
+msgstr "More than one \"via\" node found"
 
 msgid "Cannot mix node and way for role \"via\""
-msgstr ""
+msgstr "Cannot mix node and way for role \"via\""
 
 msgid "No \"from\" way found"
-msgstr ""
+msgstr "No \"from\" way found"
 
 msgid "No \"to\" way found"
-msgstr ""
+msgstr "No \"to\" way found"
 
 msgid "No \"via\" node or way found"
-msgstr ""
+msgstr "No \"via\" node or way found"
 
 msgid "The \"from\" way does not start or end at a \"via\" node."
-msgstr ""
+msgstr "The \"from\" way does not start or end at a \"via\" node."
 
 msgid "Superfluous turnrestriction as \"to\" way is oneway"
-msgstr ""
+msgstr "Superfluous turnrestriction as \"to\" way is oneway"
 
 msgid "The \"to\" way does not start or end at a \"via\" node."
-msgstr ""
+msgstr "The \"to\" way does not start or end at a \"via\" node."
 
 msgid "The \"from\" and the first \"via\" way are not connected."
-msgstr ""
+msgstr "The \"from\" and the first \"via\" way are not connected."
 
 msgid "The \"via\" ways are not connected."
-msgstr ""
+msgstr "The \"via\" ways are not connected."
 
 msgid "The last \"via\" and the \"to\" way are not connected."
-msgstr ""
+msgstr "The last \"via\" and the \"to\" way are not connected."
 
 msgid "Unclosed Ways"
-msgstr ""
+msgstr "không khép kín cách"
 
 msgid "This tests if ways which should be circular are closed."
-msgstr ""
+msgstr "xét nghiệm này nếu cách đó nên có dạng tròn được đóng cửa."
 
 msgid "Unclosed way"
-msgstr ""
+msgstr "cách khép kín"
 
 msgid "natural type {0}"
-msgstr ""
+msgstr "loại tự nhiên {0}"
 
 msgid "landuse type {0}"
-msgstr ""
+msgstr "kiểu sử dụng đất {0}"
 
 msgid "amenities type {0}"
-msgstr ""
+msgstr "tiện nghi loại {0}"
 
 msgid "sport type {0}"
-msgstr ""
+msgstr "kiểu thể thao {0}"
 
 msgid "tourism type {0}"
-msgstr ""
+msgstr "kiểu du lịch {0}"
 
 msgid "shop type {0}"
-msgstr ""
+msgstr "loại cửa hàng {0}"
 
 msgid "leisure type {0}"
-msgstr ""
+msgstr "loại giải trí {0}"
 
 msgid "waterway type {0}"
-msgstr ""
+msgstr "loại thủy {0}"
 
 msgid "boundary type {0}"
-msgstr ""
+msgstr "loại ranh giới {0}"
 
 msgid "building"
-msgstr ""
+msgstr "xây dựng"
 
 msgid "area"
-msgstr ""
+msgstr "khu vực"
 
 msgid "Unconnected highways"
-msgstr ""
+msgstr "không được kết nối đường cao tốc"
 
 msgid "Unconnected railways"
-msgstr ""
+msgstr "đường sắt không có liên quan"
 
 msgid "Unconnected waterways"
-msgstr ""
+msgstr "đường thủy không có liên quan"
 
 msgid "Unconnected natural lands and landuses"
-msgstr ""
+msgstr "vùng đất tự nhiên không kết nối và landuses"
 
 msgid "Unconnected power ways"
-msgstr ""
+msgstr "cách điện không có liên quan"
 
 msgid "This test checks if a way has an endpoint very near to another way."
 msgstr ""
+"Thử nghiệm này nếu một cách có một điểm cuối rất gần đến một cách khác."
 
 msgid "Way end node near other highway"
-msgstr ""
+msgstr "nút cuối Way gần đường cao tốc khác"
 
 msgid "Way end node near other way"
-msgstr ""
+msgstr "nút cuối Way gần cách nào khác"
 
 msgid "Way node near other way"
-msgstr ""
+msgstr "Way nút gần cách nào khác"
 
 msgid "Connected way end node near other way"
-msgstr ""
+msgstr "nút cách kết thúc kết nối gần cách nào khác"
+
+msgid "Unconnected nodes without physical tags"
+msgstr "nút không có liên quan mà không có thẻ vật lý"
 
 msgid "Untagged and unconnected nodes"
-msgstr ""
+msgstr "Untagged hệ đặc nút"
 
 msgid "This test checks for untagged nodes that are not part of any way."
 msgstr ""
-
-msgid "Unconnected nodes without physical tags"
-msgstr ""
+"Thử nghiệm này cho các nút không được gắn thẻ mà không phải là một phần của "
+"bất kỳ cách nào."
 
 msgid "No tags"
-msgstr ""
+msgstr "Không có thẻ"
 
 msgid "Has tag containing ''fixme'' or ''FIXME''"
-msgstr ""
+msgstr "Có thẻ chứa '' FIXME '' hoặc '' FIXME ''"
 
 msgid "Has key ''note'' or ''comment'' or ''description''"
-msgstr ""
+msgstr "Có chìa khóa '' chú '' hoặc '' bình luận '' hoặc '' mô tả ''"
 
 msgid "Has key ''created_by'' or ''converted_by''"
-msgstr ""
+msgstr "Có chìa khóa ''created_by'' hoặc ''converted_by''"
 
 msgid "Has key ''watch''"
-msgstr ""
+msgstr "Có chìa khóa '' watch ''"
 
 msgid "Has key ''source''"
-msgstr ""
+msgstr "Có chìa khóa '' nguồn ''"
 
 msgid "Untagged, empty and one node ways"
-msgstr ""
+msgstr "Untagged, trống rỗng và một nút cách"
 
 msgid "This test checks for untagged, empty and one node ways."
-msgstr ""
+msgstr "Thử nghiệm này cho cách untagged, trống rỗng và một nút."
 
 msgid "Unnamed ways"
-msgstr ""
+msgstr "cách vô danh"
 
 msgid "Unnamed junction"
-msgstr ""
+msgstr "ngã ba vô danh"
 
 msgid "Untagged ways (commented)"
-msgstr ""
+msgstr "cách Untagged (nhận xét)"
 
 msgid "Untagged ways"
-msgstr ""
+msgstr "cách Untagged"
 
 msgid "Empty ways"
-msgstr ""
+msgstr "cách Empty"
 
 msgid "One node ways"
-msgstr ""
+msgstr "Một cách nút"
 
 msgid "Way connected to Area"
-msgstr ""
+msgstr "Way kết nối với khu vực"
 
 msgid "Checks for ways connected to areas."
-msgstr ""
+msgstr "Kiểm tra cho cách kết nối với khu vực."
 
 msgid "Way terminates on Area"
-msgstr ""
+msgstr "Way chấm dứt vào Area"
 
 msgid "Wrongly Ordered Ways"
-msgstr ""
+msgstr "Sai kết có thứ tự cách"
 
 msgid "This test checks the direction of water, land and coastline ways."
 msgstr ""
+"thử nghiệm này kiểm tra hướng của đường thủy, đường bộ và đường bờ biển."
 
 msgid "Reversed coastline: land not on left side"
-msgstr ""
+msgstr "đảo ngược bờ biển: đất không nằm về phía bên trái"
 
 msgid "Reversed land: land not on left side"
-msgstr ""
+msgstr "Reversed đất: đất không nằm về phía bên trái"
 
 msgid "Show this dialog again the next time"
-msgstr ""
+msgstr "Hiển thị hộp thoại này một lần nữa trong thời gian tới"
 
 msgid "Do not show again (this operation)"
-msgstr ""
+msgstr "Không hiển thị lần nữa (hoạt động này)"
 
 msgid "Do not show again (this session)"
-msgstr ""
+msgstr "Không hiển thị lần nữa (phiên này)"
 
 msgid "Do not show again (remembers choice)"
-msgstr ""
+msgstr "Không hiển thị lần nữa (nhớ lựa chọn)"
 
 msgid " [id: {0}]"
-msgstr ""
+msgstr " [id: {0}]"
 
 msgid "incomplete"
-msgstr "không hoàn thành"
+msgstr "không đầy đủ"
 
 msgid "House {0}"
-msgstr ""
+msgstr "House {0}"
 
 msgid "House number {0} at {1}"
-msgstr ""
+msgstr "Nhà số {0} tại {1}"
 
 msgid "House number {0}"
-msgstr ""
+msgstr "Số nhà {0}"
 
 msgid "highway"
-msgstr "đường chính"
+msgstr "đường cao tốc"
 
 msgid "railway"
 msgstr "đường sắt"
@@ -4299,194 +4663,204 @@ msgstr "sử dụng đất"
 
 msgid "{0} node"
 msgid_plural "{0} nodes"
-msgstr[0] "{0} nốt"
+msgstr[0] "{0} nút"
 
 msgid "{0} member"
 msgid_plural "{0} members"
-msgstr[0] "{0} thành phần"
+msgstr[0] "{0} thành viên"
 
 msgid "public transport"
-msgstr ""
+msgstr "giao thông công cộng"
 
 msgid "Changeset {0}"
-msgstr ""
+msgstr "changeset {0}"
 
 msgid "Precondition violation"
-msgstr "Điều kiện yêu cầu bị vi phạm"
+msgstr "vi phạm Điều kiện tiên quyết"
 
 msgid "Security exception"
-msgstr ""
+msgstr "An ninh ngoại lệ"
 
 msgid "Network exception"
-msgstr ""
+msgstr "Network ngoại lệ"
 
 msgid "IO Exception"
-msgstr ""
+msgstr "IO Exception"
 
 msgid "Illegal Data"
-msgstr ""
+msgstr "bất hợp pháp dữ liệu"
 
 msgid "Offline mode"
-msgstr ""
+msgstr "chế độ Offline"
 
 msgid "Internal Server Error"
-msgstr ""
+msgstr "Internal Server Error"
 
 msgid "Bad Request"
-msgstr ""
+msgstr "Bad Request"
 
 msgid "Not Found"
-msgstr ""
+msgstr "Không tìm thấy"
 
 msgid "Conflict"
-msgstr ""
+msgstr "xung đột"
 
 msgid "Authentication Failed"
-msgstr ""
+msgstr "Xác thực không thành công"
 
 msgid "Access to redacted version ''{0}'' of {1} {2} is forbidden."
-msgstr ""
+msgstr "Tiếp cận redacted phiên bản '' {0} '' {1} {2} là cấm"
 
 msgid "Authorisation Failed"
-msgstr ""
+msgstr "Cấp phép thất bại"
 
 msgid "Client Time Out"
-msgstr ""
+msgstr "Client Time Out"
 
 msgid "Bandwidth Limit Exceeded"
-msgstr ""
+msgstr "Giới hạn Bandwidth Exceeded"
 
 msgid "Communication with OSM server failed"
-msgstr ""
+msgstr "Giao tiếp với máy chủ OSM thất bại"
 
 msgid "Authentication failed"
-msgstr ""
+msgstr "Xác thực không thành công"
 
 msgid "Unknown host"
-msgstr ""
+msgstr "Unknown host"
 
 msgid "Object deleted"
 msgid_plural "Objects deleted"
 msgstr[0] "Đối tượng đã bị xóa"
 
 msgid "Show help information"
-msgstr ""
+msgstr "Hiển thị thông tin trợ giúp"
 
 msgid "Downloading \"Message of the day\""
-msgstr ""
+msgstr "Tải \" Thông điệp của ngày \""
 
 msgid "Failed to read MOTD. Exception was: {0}"
-msgstr ""
+msgstr "Không đọc motd ngoại lệ là:. {0}"
 
 msgid "Message of the day not available"
-msgstr ""
+msgstr "Thông điệp của ngày không có sẵn"
 
 msgid "Click to close the dialog"
-msgstr ""
+msgstr "Nhấn vào đây để đóng hộp thoại"
 
 msgid "Imagery offset"
-msgstr ""
+msgstr "Hình tượng bù đắp"
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr ""
 
 msgctxt "layer"
 msgid "Offset"
-msgstr ""
+msgstr "Offset"
 
 msgid "Expected non-empty value for parameter ''{0}'', got ''{1}''"
 msgstr ""
+"Dự kiến ​​sẽ không có sản phẩm nào có giá trị cho tham số '' {0} '', đã '' "
+"{1} ''"
 
 msgid "usage"
-msgstr ""
+msgstr "sử dụng"
 
 msgid "options"
-msgstr ""
+msgstr "tùy chọn"
 
 msgid "Show this help"
-msgstr ""
+msgstr "Hiển thị trợ giúp này"
 
 msgid "Standard unix geometry argument"
-msgstr ""
+msgstr "Standard unix hình học lập luận"
 
 msgid "Download the bounding box"
-msgstr ""
+msgstr "Tải hộp bounding"
 
 msgid "Download the location at the URL (with lat=x&lon=y&zoom=z)"
-msgstr ""
+msgstr "Tải về vị trí tại các URL (với lat = x & lon = y = z & zoom)"
 
 msgid "Open a file (any file type that can be opened with File/Open)"
 msgstr ""
+"Mở một tập tin (bất kỳ loại tập tin có thể được mở ra với File / Open)"
 
 msgid "Download the bounding box as raw GPS"
-msgstr ""
+msgstr "Tải hộp bounding như GPS thô"
 
 msgid "Download the location at the URL (with lat=x&lon=y&zoom=z) as raw GPS"
 msgstr ""
+"Tải về vị trí tại các URL (với lat = x & lon = y & zoom = z) như GPS thô"
 
 msgid "Select with the given search"
-msgstr ""
+msgstr "Chọn với tìm kiếm đã cho"
 
 msgid "Launch in maximized mode"
-msgstr ""
+msgstr "Launch trong chế độ tối đa hóa"
 
 msgid "Reset the preferences to default"
-msgstr ""
+msgstr "Thiết lập lại các ưu đãi để mặc định"
 
 msgid "Changes preferences according to the XML file"
-msgstr ""
+msgstr "Thay đổi sở thích theo các tập tin XML"
 
 msgid "Set preference key to value"
-msgstr ""
+msgstr "Thiết lập chính ưu đãi để giá trị"
 
 msgid "Set the language"
-msgstr ""
+msgstr "Cài đặt ngôn ngữ"
 
 msgid "Displays the JOSM version and exits"
-msgstr ""
+msgstr "Hiển thị phiên bản JOSM và lối thoát hiểm"
 
 msgid "Print debugging messages to console"
-msgstr ""
+msgstr "thông điệp In gỡ lỗi để an ủi"
 
 msgid "Skip loading plugins"
-msgstr ""
+msgstr "Bỏ tải plugins"
 
 msgid "Disable access to the given resource(s), separated by comma"
 msgstr ""
+"Vô hiệu hoá quyền truy cập vào các tài nguyên nhất định (s), cách nhau bởi "
+"dấu phẩy"
 
 msgid "options provided as Java system properties"
-msgstr ""
+msgstr "tùy chọn được cung cấp như là thuộc tính hệ thống Java"
 
 msgid "/PATH/TO/JOSM/PREF    "
-msgstr ""
+msgstr "/PATH/TO/JOSM/PREF    "
 
 msgid "Set the preferences directory"
-msgstr ""
+msgstr "Thiết lập thư mục sở thích"
 
 msgid "/PATH/TO/JOSM/USERDATA"
-msgstr ""
+msgstr "/PATH/TO/JOSM/UserData"
 
 msgid "Set the user data directory"
-msgstr ""
+msgstr "Thiết lập thư mục dữ liệu người dùng"
 
 msgid "/PATH/TO/JOSM/CACHE   "
-msgstr ""
+msgstr "/PATH/TO/JOSM/CACHE   "
 
 msgid "Set the cache directory"
-msgstr ""
+msgstr "Thiết lập thư mục cache"
 
 msgid "/PATH/TO/JOSM/HOMEDIR "
-msgstr ""
+msgstr "/PATH/TO/JOSM/homedir "
 
 msgid ""
 "Relocate all 3 directories to homedir. Cache directory will be in "
 "homedir/cache"
 msgstr ""
+"Di dời tất cả 3 thư mục để homedir. Cache thư mục sẽ được ởHomedir/cache"
 
 msgid ""
 "-Djosm.home has lower precedence, i.e. the specific setting overrides the "
 "general one"
 msgstr ""
+"-Djosm.home Có độ ưu tiên thấp hơn, ví dụ như các thiết lập cụ thể đèChung "
+"một"
 
 msgid ""
 "note: For some tasks, JOSM needs a lot of memory. It can be necessary to add "
@@ -4494,59 +4868,65 @@ msgid ""
 "      Java option to specify the maximum size of allocated memory in "
 "megabytes"
 msgstr ""
+"Lưu ý: Đối với một số nhiệm vụ, JOSM cần rất nhiều bộ nhớ Nó có thể là cần "
+"thiết để thêm vào.sau\n"
+"Tùy chọn Java để xác định kích thước tối đa của bộ nhớ phân bổMB"
 
 msgid "examples"
-msgstr ""
+msgstr "ví dụ"
 
 msgid ""
 "Parameters --download, --downloadgps, and --selection are processed in this "
 "order."
 msgstr ""
+"Tham số --download, --downloadgps, và --selection được chế biến ở đâyTrật tự"
 
 msgid "Make sure you load some data if you use --selection."
 msgstr ""
+"Hãy chắc chắn rằng bạn tải một số dữ liệu nếu bạn sử dụng --selection."
 
 msgid "Printing debugging messages to console"
-msgstr ""
+msgstr "thông điệp In ấn gỡ lỗi để an ủi"
 
 msgid "Plugin loading skipped"
-msgstr ""
+msgstr "Plugin tải bỏ qua"
 
 msgid "Enabled detailed debug level (trace)"
-msgstr ""
+msgstr "Bật mức độ gỡ lỗi chi tiết (trace)"
 
 msgid "Initializing"
-msgstr ""
+msgstr "Đang khởi tạo"
 
 msgid "Updating plugins"
-msgstr ""
+msgstr "Đang cập nhật plugins"
 
 msgid "Installing updated plugins"
-msgstr ""
+msgstr "Cài đặt plugin cập nhật"
 
 msgid "Loading early plugins"
-msgstr ""
+msgstr "Đang tải plugins sớm"
 
 msgid "Setting defaults"
-msgstr ""
+msgstr "Thiết lập mặc định"
 
 msgid "Creating main GUI"
-msgstr "Đang khởi tạo chương trình"
+msgstr "Tạo GUI chính"
 
 msgid "Loading plugins"
-msgstr ""
+msgstr "Loading plugins"
 
 msgid ""
 "''{0}'' is not a valid value for argument ''{1}''. Possible values are {2}, "
 "possibly delimited by commas."
 msgstr ""
+"''{0}'' không phải là một giá trị hợp lệ cho tham số ''{1}''. Giá trị có thể "
+"là {2},Có thể được phân định bằng dấu phẩy."
 
 msgid ""
 "JOSM is running in offline mode. This resource will not be available: {0}"
 msgid_plural ""
 "JOSM is running in offline mode. These resources will not be available: {0}"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "JOSM đang chạy ở chế độ ẩn. tài nguyên này sẽ không có sẵn: {0}"
 
 msgid ""
 "Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
@@ -4561,37 +4941,41 @@ msgid ""
 msgstr ""
 
 msgid "Unsaved osm data"
-msgstr ""
+msgstr "Chưa lưu dữ liệu OSM"
 
 msgid "Restore"
-msgstr ""
+msgstr "Restore"
 
 msgid "Discard"
-msgstr ""
+msgstr "Bỏ"
 
 msgid "JOSM found {0} unsaved osm data layer. "
 msgid_plural "JOSM found {0} unsaved osm data layers. "
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "JOSM thấy {0} chưa lưu lớp dữ liệu OSM. "
 
 msgid ""
 "It looks like JOSM crashed last time. Would you like to restore the data?"
 msgstr ""
+"Nó trông giống như JOSM bị rơi lần cuối cùng. Bạn có muốn khôi phục lại dữ "
+"liệu?"
 
 msgid "Change proxy settings"
-msgstr ""
+msgstr "Thay đổi thiết lập proxy"
 
 msgid "Proxy errors occurred"
-msgstr ""
+msgstr "lỗi Proxy xảy ra"
 
 msgid ""
 "JOSM tried to access the following resources:<br>{0}but <b>failed</b> to do "
 "so, because of the following proxy errors:<br>{1}Would you like to change "
 "your proxy settings now?"
 msgstr ""
+"JOSM cố gắng truy cập vào các tài nguyên sau: <br> {0} nhưng <b> không </ b> "
+"để làmNhư vậy, vì các proxy lỗi sau đây: <br> {1} có bạn muốn thay đổiCài "
+"đặt proxy của bạn bây giờ?"
 
 msgid "Network errors occurred"
-msgstr ""
+msgstr "lỗi mạng xảy ra"
 
 msgid ""
 "JOSM tried to access the following resources:<br>{0}but <b>failed</b> to do "
@@ -4599,256 +4983,235 @@ msgid ""
 "missing proxy configuration.<br>Would you like to change your proxy settings "
 "now?"
 msgstr ""
+"JOSM cố gắng truy cập vào các tài nguyên sau: <br> {0} nhưng <b> không </ b> "
+"để làmNhư vậy, bởi vì các lỗi mạng sau đây: <br> {1} Nó có thể là do mộtMất "
+"tích cấu hình proxy. <br> Bạn có muốn thay đổi cài đặt proxy của bạnBây giờ?"
 
+msgctxt "menu"
 msgid "File"
 msgstr ""
 
-msgid "Session"
+msgctxt "menu"
+msgid "Edit"
 msgstr ""
 
+msgctxt "menu"
 msgid "View"
 msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
 msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
 msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
 msgstr ""
 
 msgid "More..."
-msgstr ""
+msgstr "More ..."
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
 msgstr ""
 
-msgid "Menu: {0}"
+msgctxt "menu"
+msgid "Help"
 msgstr ""
 
-msgid "Save and load the current session (list of layers, etc.)"
-msgstr ""
+msgid "Menu: {0}"
+msgstr "Menu: {0}"
 
 msgid "Edit toolbar"
-msgstr ""
+msgstr "Chỉnh sửa thanh công cụ"
 
 msgid "Toggles the visibility of the edit toolbar (i.e., the vertical tool)"
 msgstr ""
+"Nhấn thả khả năng hiển thị của thanh công cụ chỉnh sửa (ví dụ, các công cụ "
+"theo chiều dọc)"
 
 msgid "Preset preferences"
-msgstr ""
+msgstr "sở thích Preset"
 
 msgid "Click to open the tagging presets tab in the preferences"
-msgstr ""
+msgstr "Nhấn vào đây để mở các tab cài đặt trước gắn thẻ trong các ưu đãi"
 
 msgid "Imagery preferences"
-msgstr ""
+msgstr "sở thích Imagery"
 
 msgid "Click to open the imagery tab in the preferences"
-msgstr ""
+msgstr "Nhấn vào đây để mở các tab hình ảnh trong trình ưu đãi"
 
 msgid "Search menu items"
-msgstr ""
+msgstr "mục trình đơn tìm kiếm"
 
+msgctxt "menu"
 msgid "Audio"
 msgstr ""
 
 msgid "Do not hide toolbar"
-msgstr ""
+msgstr "Đừng giấu thanh công cụ"
 
 msgid "Hide this button"
-msgstr ""
+msgstr "Ẩn nút này"
 
 msgid "Click the arrow at the bottom to show it again."
-msgstr ""
+msgstr "Nhấn vào mũi tên ở phía dưới để hiển thị nó một lần nữa."
 
 msgid "Hide edit toolbar"
-msgstr ""
+msgstr "Hide chỉnh sửa thanh công cụ"
 
 msgid "Hide or show this toggle button"
-msgstr ""
+msgstr "Ẩn hoặc hiển thị nút này chuyển đổi"
 
 msgid "Move right"
-msgstr ""
+msgstr "Di chuyển đúng"
 
 msgid "Map: {0}"
-msgstr ""
+msgstr "Bản đồ: {0}"
 
 msgid "Move left"
-msgstr ""
+msgstr "di chuyển trái"
 
 msgid "Move up"
-msgstr ""
+msgstr "Move up"
 
 msgid "Move down"
-msgstr ""
+msgstr "Di chuyển xuống"
 
 msgid "Zoom in"
-msgstr ""
+msgstr "Zoom in"
 
 msgid "Zoom out"
-msgstr ""
+msgstr "Thu nhỏ"
 
 msgid "scale"
-msgstr ""
+msgstr "quy mô"
 
 msgid "Status bar background"
-msgstr ""
+msgstr "Thanh trạng thái nền"
 
 msgid "Status bar background: active"
-msgstr ""
+msgstr "Tình trạng thanh nền: hoạt động"
 
 msgid "Status bar foreground"
-msgstr ""
+msgstr "thanh Status foreground"
 
 msgid "Status bar foreground: active"
-msgstr ""
+msgstr "thanh Status foreground: hoạt động"
 
 msgid "{0} ({1})"
-msgstr ""
+msgstr "{0} ({1})"
 
 msgid "The geographic latitude at the mouse pointer."
-msgstr ""
+msgstr "vĩ độ địa lý ở con trỏ chuột."
 
 msgid "The geographic longitude at the mouse pointer."
-msgstr ""
+msgstr "kinh độ địa lý ở con trỏ chuột."
 
 msgid "The (compass) heading of the line segment being drawn."
-msgstr ""
+msgstr "(la bàn) tiêu đề của đoạn thẳng được rút ra."
 
 msgid "The angle between the previous and the current way segment."
-msgstr ""
+msgstr "Góc giữa trước và phân khúc cách hiện tại."
 
 msgid "The length of the new way segment being drawn."
-msgstr ""
+msgstr "Chiều dài của đoạn đường mới được rút ra."
 
 msgid "The name of the object at the mouse pointer."
-msgstr ""
+msgstr "Tên của các đối tượng tại các con trỏ chuột."
 
 msgid ""
 "Middle click again to cycle through.<br>Hold CTRL to select directly from "
 "this list with the mouse.<hr>"
 msgstr ""
+"Trung click lần nữa để chu kỳ thông qua. <br> Giữ CTRL để chọn trực tiếp "
+"từDanh sách này với con chuột. <Hr>"
 
 msgid "(no object)"
-msgstr ""
+msgstr "(không có đối tượng)"
 
 msgid "User:"
-msgstr ""
+msgstr "tài:"
 
 msgid "Do not hide status bar"
-msgstr ""
+msgstr "Đừng giấu thanh trạng thái"
 
 msgid "System of measurement changed to {0}"
-msgstr ""
+msgstr "Hệ thống đo lường thay đổi để {0}"
 
 msgid "Layer not in list."
-msgstr ""
+msgstr "layer không có trong danh sách."
 
 msgid "Layer ''{0}'' must be in list of layers"
-msgstr ""
+msgstr "Layer '' {0} '' phải có trong danh sách các lớp"
 
 msgid "Default (open, closed, new)"
-msgstr ""
+msgstr "Default (mở, đóng mới)"
 
 msgid "Username"
-msgstr ""
+msgstr "Tên đăng nhập"
 
 msgid "Created date"
-msgstr ""
+msgstr "Ngày tạo"
 
 msgid "Last change date"
-msgstr ""
+msgstr "ngày thay đổi cuối cùng"
 
 msgid "Select note sorting method"
-msgstr ""
+msgstr "Chọn lưu ý phương pháp phân loại"
 
 msgid "Click to cancel the current operation"
-msgstr ""
+msgstr "Nhấn vào đây để hủy bỏ các hoạt động hiện tại"
 
 msgid "In background"
-msgstr ""
+msgstr "Trong nền"
 
 msgid "Click to run job in background"
-msgstr ""
-
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr ""
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr ""
-
-msgid "Details..."
-msgstr ""
-
-msgid "Hide this message and never show it again"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] ""
-msgstr[1] ""
-
-msgid "Delete objects"
-msgstr ""
-
-msgid "To delete"
-msgstr ""
-
-msgid "From Relation"
-msgstr ""
+msgstr "Click để chạy công việc trong nền"
 
-msgid "Pos."
-msgstr ""
+msgid " ({0})"
+msgstr " ({0})"
 
-msgid "Role"
-msgstr ""
+msgid "{0} completed in {1}"
+msgstr "{0} hoàn thành vào {1}"
 
-msgid "Click to close the dialog and remove the object from the relations"
+msgid "Enlarge"
 msgstr ""
 
-msgid "Click to close the dialog and to abort deleting the objects"
+msgid "Shrink"
 msgstr ""
 
 msgid ""
 "<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
 "level.</html>"
 msgstr ""
+"<Html> Hãy chọn một <strong> loạt các gạch OSM </ strong> ở một zoom choCấp. "
+"</ Html>"
 
 msgid "Zoom level:"
-msgstr ""
+msgstr "độ Zoom:"
 
 msgid "from tile"
-msgstr ""
+msgstr "từ gạch"
 
 msgid "up to tile"
-msgstr ""
+msgstr "lên đến gạch"
 
 msgid ""
 "<html>Alternatively you may enter a <strong>tile address</strong> for a "
@@ -4856,477 +5219,511 @@ msgid ""
 "addresses in the format <i>zoom,x,y</i> or <i>zoom;x;y</i> are valid "
 "too.</html>"
 msgstr ""
+"<Html> Hoặc bạn có thể nhập vào <strong> địa chỉ gạch </ strong> cho mộtNgói "
+"duy nhất trong định dạng <i> zoomlevel / x / y </ i>, tức là <i> 15/256/223 "
+"</ i> Tile.Địa chỉ ở định dạng <i> zoom, x, y </ i> hoặc <i> zoom; x; y </ "
+"i> có giá trịQuá. </ Html>"
 
 msgid "Tile address:"
-msgstr ""
+msgstr "Tile địa chỉ:"
 
 msgid "Apply the tile address"
-msgstr ""
+msgstr "Áp dụng các địa chỉ gạch"
 
 msgid "Please enter a tile address"
-msgstr ""
+msgstr "Xin vui lòng nhập một địa chỉ gạch"
 
 msgid "The current value isn''t a valid tile address"
-msgstr ""
+msgstr "Giá trị hiện tại isn''ta địa chỉ hợp lệ gạch"
 
 msgid "Please enter a tile index"
-msgstr ""
+msgstr "Hãy nhập một số gạch"
 
 msgid "The current value isn''t a valid tile index for the given zoom level"
-msgstr ""
+msgstr "Giá trị hiện tại isn''ta chỉ số ngói hợp lệ cho mức zoom cho"
 
 msgid "Conflict background: no conflict"
-msgstr ""
+msgstr "Xung đột nền: không có xung đột"
 
 msgid "Conflict background: decided"
-msgstr ""
+msgstr "Xung đột nền: quyết định"
 
 msgid "Conflict background: undecided"
-msgstr ""
+msgstr "Xung đột nền: chưa quyết định"
 
 msgid "Conflict background: drop"
-msgstr ""
+msgstr "Xung đột nền: thả"
 
 msgid "Conflict background: keep"
-msgstr ""
+msgstr "Xung đột nền: giữ"
 
 msgid "Conflict background: combined"
-msgstr ""
+msgstr "Xung đột nền: kết hợp"
 
 msgid "Conflict background: selected"
-msgstr ""
+msgstr "Xung đột nền: chọn"
 
 msgid "Conflict foreground: undecided"
-msgstr ""
+msgstr "Xung đột foreground: chưa quyết định"
 
 msgid "Conflict foreground: drop"
-msgstr ""
+msgstr "Xung đột foreground: thả"
 
 msgid "Conflict foreground: keep"
-msgstr ""
+msgstr "Xung đột foreground: giữ"
 
 msgid "Conflict background: empty row"
-msgstr ""
+msgstr "Xung đột nền: dòng sản phẩm nào"
 
 msgid "Conflict background: frozen"
-msgstr ""
+msgstr "Xung đột nền: đông lạnh"
 
 msgid "Conflict background: in comparison"
-msgstr ""
+msgstr "Xung đột nền: so"
 
 msgid "Conflict foreground: in comparison"
-msgstr ""
+msgstr "Xung đột foreground: so"
 
 msgid "Conflict background"
-msgstr ""
+msgstr "Xung đột nền"
 
 msgid "Conflict foreground"
-msgstr ""
+msgstr "Xung đột foreground"
 
 msgid "Conflict background: not in opposite"
-msgstr ""
+msgstr "Xung đột nền: không đối diện"
 
 msgid "Conflict background: in opposite"
-msgstr ""
+msgstr "Xung đột nền: ở đối diện"
 
 msgid "Conflict background: same position in opposite"
-msgstr ""
+msgstr "Xung đột nền: vị trí tương đương ở đối diện"
 
 msgid "Conflict background: keep one tag"
-msgstr ""
+msgstr "Xung đột nền: giữ một thẻ"
 
 msgid "Conflict foreground: keep one tag"
-msgstr ""
+msgstr "Xung đột foreground: giữ một thẻ"
 
 msgid "Conflict background: drop tag"
-msgstr ""
+msgstr "Xung đột nền: thả tag"
 
 msgid "Conflict foreground: drop tag"
-msgstr ""
+msgstr "Xung đột foreground: thả tag"
 
 msgid "Conflict background: keep all tags"
-msgstr ""
+msgstr "Xung đột nền: giữ cho tất cả các thẻ"
 
 msgid "Conflict foreground: keep all tags"
-msgstr ""
+msgstr "Xung đột foreground: giữ cho tất cả các thẻ"
 
 msgid "Conflict background: sum all numeric tags"
-msgstr ""
+msgstr "Xung đột nền: sum tất cả các thẻ số"
 
 msgid "Conflict foreground: sum all numeric tags"
-msgstr ""
+msgstr "Xung đột foreground: sum tất cả các thẻ số"
 
 msgid "Conflict background: keep member"
-msgstr ""
+msgstr "Xung đột nền: giữ thành viên"
 
 msgid "Conflict foreground: keep member"
-msgstr ""
+msgstr "Xung đột foreground: giữ thành viên"
 
 msgid "Conflict background: remove member"
-msgstr ""
+msgstr "Xung đột nền: xóa thành viên"
 
 msgid "Conflict foreground: remove member"
-msgstr ""
+msgstr "Xung đột foreground: xóa thành viên"
 
 msgid "My with Their"
-msgstr ""
+msgstr "của tôi với họ"
 
 msgid "My with Merged"
-msgstr ""
+msgstr "My với Merged"
 
 msgid "Their with Merged"
-msgstr ""
+msgstr "của họ với Merged"
 
 msgid "Role {0} is not participating in compare pair {1}."
-msgstr ""
+msgstr "Vai trò {0} không được tham gia trong cặp so sánh {1}."
 
 msgid "Properties"
-msgstr ""
+msgstr "Properties"
 
 msgid "Tags"
-msgstr ""
+msgstr "Thẻ"
 
 msgid "Nodes"
-msgstr ""
+msgstr "Nodes"
 
 msgid "Members"
-msgstr ""
+msgstr "Thành viên"
 
 msgid "No pending tag conflicts to be resolved"
-msgstr ""
+msgstr "Không có xung đột tag chờ để được giải quyết"
 
 msgid "Tags({0} conflict)"
 msgid_plural "Tags({0} conflicts)"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Tags ({0} xung đột)"
 
 msgid "{0} pending tag conflict to be resolved"
 msgid_plural "{0} pending tag conflicts to be resolved"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} cấp phát thẻ để xung đột được giải quyết"
 
 msgid "Nodes(resolved)"
-msgstr ""
+msgstr "Nodes (phân giải)"
 
 msgid ""
 "Merged node list frozen. No pending conflicts in the node list of this way"
 msgstr ""
+"Danh sách nút Merged đông lạnh. Không có xung đột cấp phát trong danh sách "
+"nút của cách này"
 
 msgid "Nodes(with conflicts)"
-msgstr ""
+msgstr "Nodes (có xung đột)"
 
 msgid "Pending conflicts in the node list of this way"
-msgstr ""
+msgstr "Đang chờ xung đột trong danh sách nút của cách này"
 
 msgid "Members(resolved)"
-msgstr ""
+msgstr "Các thành viên (phân giải)"
 
 msgid ""
 "Merged member list frozen. No pending conflicts in the member list of this "
 "relation"
 msgstr ""
+"Danh sách thành viên Merged đông lạnh. Không có xung đột cấp phát trong danh "
+"sách thành viên củaQuan hệ"
 
 msgid "Members(with conflicts)"
-msgstr ""
+msgstr "Các thành viên (có xung đột)"
 
 msgid "Pending conflicts in the member list of this relation"
-msgstr ""
+msgstr "Đang chờ xung đột trong danh sách thành viên của mối quan hệ này"
 
 msgid "No pending property conflicts"
-msgstr ""
+msgstr "Không có xung đột tài sản chờ"
 
 msgid "Properties(with conflicts)"
-msgstr ""
+msgstr "Properties (có xung đột)"
 
 msgid "Pending property conflicts to be resolved"
-msgstr ""
+msgstr "xung đột tài sản chờ để được giải quyết"
 
 msgid "Conflict Resolution"
-msgstr ""
+msgstr "Giải quyết xung đột"
 
 msgid "{0} more..."
-msgstr ""
+msgstr "{0} hơn ..."
 
 msgid ""
 "The following objects could not be copied to the target object<br>because "
 "they are deleted in the target dataset:"
 msgstr ""
+"Các đối tượng sau đây không thể được sao chép vào các đối tượng mục tiêu "
+"<br> vìChúng được xóa trong tập dữ liệu mục tiêu:"
 
 msgid "Merging deleted objects failed"
-msgstr ""
+msgstr "Kết hợp đối tượng bị xóa không thành công"
 
 msgid "List in role {0} is currently not participating in a compare pair."
 msgstr ""
+"Danh sách trong vai trò {0} hiện tại không được tham gia vào một cặp so sánh."
 
 msgid "Unexpected value of parameter ''index''. Got {0}."
-msgstr ""
+msgstr "giá trị bất ngờ của tham số '' index ''. Chấn {0}."
 
 msgid "Item {0} not found in list."
-msgstr ""
+msgstr "Item {0} không tìm thấy trong danh sách."
 
 msgid "lock scrolling"
-msgstr ""
+msgstr "lock di chuyển"
 
 msgid "Compare "
-msgstr ""
+msgstr "So sánh "
 
 msgid "My version"
-msgstr ""
+msgstr "phiên bản của tôi"
 
 msgid "List of elements in my dataset, i.e. the local dataset"
 msgstr ""
+"Danh sách các phần tử trong tập dữ liệu của tôi, tức là các tập dữ liệu địa "
+"phương"
 
 msgid "Merged version"
-msgstr ""
+msgstr "phiên bản Merged"
 
 msgid ""
 "List of merged elements. They will replace the list of my elements when the "
 "merge decisions are applied."
 msgstr ""
+"Danh sách các yếu tố hợp nhất. Họ sẽ thay thế các danh sách các yếu tố của "
+"tôi khiHợp nhất các quyết định được áp dụng."
 
 msgid "Their version"
-msgstr ""
+msgstr "phiên bản của họ"
 
 msgid "List of elements in their dataset, i.e. the server dataset"
 msgstr ""
+"Danh sách các phần tử trong tập dữ liệu của họ, tức là các tập dữ liệu máy "
+"chủ"
 
 msgid "> top"
-msgstr ""
+msgstr "> top"
 
 msgid "Copy my selected nodes to the start of the merged node list"
-msgstr ""
+msgstr "Sao chép các nút lựa chọn của tôi vào đầu danh sách nút sáp nhập"
 
 msgid "> bottom"
-msgstr ""
+msgstr "> đáy"
 
 msgid "Copy my selected elements to the end of the list of merged elements."
 msgstr ""
+"Sao chép thành phần được chọn của tôi vào cuối danh sách các yếu tố hợp nhất."
 
 msgid "> before"
-msgstr ""
+msgstr "> trước"
 
 msgid ""
 "Copy my selected elements before the first selected element in the list of "
 "merged elements."
 msgstr ""
+"Sao chép thành phần được chọn của tôi trước phần tử được lựa chọn đầu tiên "
+"trong danh sáchSáp nhập các yếu tố."
 
 msgid "> after"
-msgstr ""
+msgstr "> sau"
 
 msgid ""
 "Copy my selected elements after the first selected element in the list of "
 "merged elements."
 msgstr ""
+"Sao chép thành phần được chọn của tôi sau khi các yếu tố lựa chọn đầu tiên "
+"trong danh sáchSáp nhập các yếu tố."
 
 msgid "< top"
-msgstr ""
+msgstr "<top"
 
 msgid ""
 "Copy their selected element to the start of the list of merged elements."
 msgstr ""
+"Sao chép phần tử của họ lựa chọn để khởi đầu của danh sách các yếu tố hợp "
+"nhất."
 
 msgid "< bottom"
-msgstr ""
+msgstr "<đáy"
 
 msgid ""
 "Copy their selected elements to the end of the list of merged elements."
 msgstr ""
+"Sao chép các yếu tố mà họ đã chọn để kết thúc danh sách các yếu tố hợp nhất."
 
 msgid "< before"
-msgstr ""
+msgstr "<trước"
 
 msgid ""
 "Copy their selected elements before the first selected element in the list "
 "of merged elements."
 msgstr ""
+"Sao chép các yếu tố mà họ đã chọn trước phần tử được lựa chọn đầu tiên trong "
+"danh sáchSáp nhập của các yếu tố."
 
 msgid "< after"
-msgstr ""
+msgstr "<sau"
 
 msgid ""
 "Copy their selected element after the first selected element in the list of "
 "merged elements"
 msgstr ""
+"Sao chép phần tử của họ được lựa chọn sau khi các yếu tố lựa chọn đầu tiên "
+"trong danh sáchYếu tố sáp nhập"
 
 msgid "Copy all my elements to the target"
-msgstr ""
+msgstr "Sao chép tất cả các yếu tố của tôi với mục tiêu"
 
 msgid "Copy all their elements to the target"
-msgstr ""
+msgstr "Sao chép tất cả các yếu tố của họ với mục tiêu"
 
 msgid "Up"
-msgstr ""
+msgstr "Up"
 
 msgid "Move up the selected entries by one position."
-msgstr ""
+msgstr "Di chuyển lên các mục được lựa chọn bởi một vị trí."
 
 msgid "Down"
-msgstr ""
+msgstr "Down"
 
 msgid "Move down the selected entries by one position."
-msgstr ""
+msgstr "Di chuyển xuống các mục được lựa chọn bởi một vị trí."
 
 msgid "Remove"
-msgstr ""
+msgstr "Hủy bỏ"
 
 msgid "Remove the selected entries from the list of merged elements."
-msgstr ""
+msgstr "Hủy bỏ các mục được lựa chọn từ danh sách các yếu tố hợp nhất."
 
 msgid "Freeze"
-msgstr ""
+msgstr "Freeze"
 
 msgid "Freeze the current list of merged elements."
-msgstr ""
+msgstr "Freeze danh sách hiện tại của các nguyên tố hợp nhất."
 
 msgid "Unfreeze"
-msgstr ""
+msgstr "Unfreeze"
 
 msgid "Unfreeze the list of merged elements and start merging."
-msgstr ""
+msgstr "Unfreeze danh sách các yếu tố hợp nhất và sáp nhập bắt đầu."
 
 msgid ""
 "<html>Click <strong>{0}</strong> to start merging my and their "
 "entries.</html>"
 msgstr ""
+"<Html> Click <strong> {0} </ strong> để bắt đầu sáp nhập và tôi của họMục. "
+"</ Html>"
 
 msgid ""
 "<html>Click <strong>{0}</strong> to finish merging my and their "
 "entries.</html>"
 msgstr ""
+"<Html> Click <strong> {0} </ strong> để hoàn tất việc sáp nhập và tôi của "
+"họMục. </ Html>"
 
 msgid "My version ({0} entry)"
 msgid_plural "My version ({0} entries)"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "phiên bản của tôi ({0} entry)"
 
 msgid "Merged version ({0} entry)"
 msgid_plural "Merged version ({0} entries)"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Merged phiên bản ({0} entry)"
 
 msgid "Their version ({0} entry)"
 msgid_plural "Their version ({0} entries)"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "phiên bản của họ ({0} entry)"
 
 msgid "Node"
-msgstr ""
+msgstr "Node"
 
 msgid "Merged nodes not frozen yet. Cannot build resolution command."
-msgstr ""
+msgstr "nút Merged không đông lạnh chưa. Không thể xây dựng lệnh giải quyết."
 
 msgid "Properties in my dataset, i.e. the local dataset"
 msgstr ""
+"Properties trong bộ dữ liệu của tôi, tức là các tập dữ liệu địa phương"
 
 msgid ""
 "Properties in the merged element. They will replace properties in my "
 "elements when merge decisions are applied."
 msgstr ""
+"Properties trong các yếu tố hợp nhất. Họ sẽ thay thế các thuộc tính trong "
+"tôiYếu tố khi quyết định hợp nhất được áp dụng."
 
 msgid "Properties in their dataset, i.e. the server dataset"
-msgstr ""
+msgstr "Properties trong bộ dữ liệu của họ, tức là các tập dữ liệu máy chủ"
 
 msgid "Coordinates:"
-msgstr ""
+msgstr "Tọa độ:"
 
 msgid "Deleted State:"
-msgstr ""
+msgstr "Deleted Nhà nước:"
 
 msgid "Referenced by:"
-msgstr ""
+msgstr "Tham chiếu bởi:"
 
 msgid "(none)"
-msgstr ""
+msgstr "(không có)"
 
 msgid "deleted"
-msgstr ""
+msgstr "xóa"
 
 msgid "not deleted"
-msgstr ""
+msgstr "không xóa"
 
 msgid "Keep my coordinates"
-msgstr ""
+msgstr "Giữ tọa độ của tôi"
 
 msgid "Keep their coordinates"
-msgstr ""
+msgstr "Giữ tọa độ của họ"
 
 msgid "Undecide conflict between different coordinates"
-msgstr ""
+msgstr "xung đột Undecide giữa tọa độ khác nhau"
 
 msgid "Keep my deleted state"
-msgstr ""
+msgstr "Giữ trạng thái bị xóa của tôi"
 
 msgid "Keep their deleted state"
-msgstr ""
+msgstr "Giữ trạng thái bị xóa của họ"
 
 msgid "Undecide conflict between deleted state"
-msgstr ""
+msgstr "xung đột Undecide giữa nhà nước đã xóa"
+
+msgid "Role"
+msgstr "Vai trò"
 
 msgid "Primitive"
-msgstr ""
+msgstr "nguyên thủy"
 
 msgid "Merged nodes not frozen yet. Cannot build resolution command"
-msgstr ""
+msgstr "nút Merged không đông lạnh chưa. Không thể xây dựng lệnh giải quyết"
 
 msgid "<undefined>"
-msgstr ""
+msgstr "<undefined>"
 
 msgid "The merged dataset will not include a tag with key {0}"
-msgstr ""
+msgstr "Các bộ dữ liệu bị sáp nhập sẽ không có một thẻ với phím {0}"
 
 msgid "My dataset does not include a tag with key {0}"
-msgstr ""
+msgstr "bộ dữ liệu của tôi không có một thẻ với phím {0}"
 
 msgid "Key"
-msgstr ""
+msgstr "Key"
 
 msgid "Value"
-msgstr ""
+msgstr "Giá trị"
 
 msgid "Cannot apply undecided tag merge item."
-msgstr ""
+msgstr "Không thể áp dụng chưa quyết định mục tag hợp nhất."
 
 msgid "My version (local dataset)"
-msgstr ""
+msgstr "phiên bản của tôi (tập dữ liệu địa phương)"
 
 msgid "Their version (server dataset)"
-msgstr ""
+msgstr "phiên bản (máy chủ dữ liệu) của họ"
 
 msgid "Keep the selected key/value pairs from the local dataset"
-msgstr ""
+msgstr "Giữ cặp khóa được lựa chọn / giá trị từ các số liệu địa phương"
 
 msgid "Keep the selected key/value pairs from the server dataset"
-msgstr ""
+msgstr "Giữ các cặp khóa / giá trị được lựa chọn từ các bộ dữ liệu máy chủ"
 
 msgid "Undecide"
-msgstr ""
+msgstr "Undecide"
 
 msgid "Mark the selected tags as undecided"
-msgstr ""
+msgstr "Đánh dấu các thẻ chọn là chưa quyết định"
 
 msgid "Their dataset does not include a tag with key {0}"
-msgstr ""
+msgstr "bộ dữ liệu của họ không có một thẻ với phím {0}"
 
 msgid "Conflicts when combining primitives"
-msgstr ""
+msgstr "Mâu thuẫn khi kết hợp nguyên thủy"
 
 msgid "Conflicts when combining ways - combined way is ''{0}''"
-msgstr ""
+msgstr "Mâu thuẫn khi kết hợp cách - cách kết hợp là '' {0} ''"
 
 msgid "Conflicts when merging nodes - target node is ''{0}''"
-msgstr ""
+msgstr "Mâu thuẫn khi sáp nhập các nút - nút mục tiêu là '' {0} ''"
 
 msgid "No conflicts to resolve"
-msgstr ""
+msgstr "Không có xung đột để giải quyết"
 
 msgid "Cancel conflict resolution"
-msgstr ""
+msgstr "Hủy giải quyết xung đột"
 
 msgid "Apply resolved conflicts"
-msgstr ""
+msgstr "Áp dụng các xung đột được giải quyết"
 
 msgid "Apply"
-msgstr ""
+msgstr "Apply"
 
 msgid ""
 "You are about to combine {1} object, which is part of {0} "
@@ -5341,16 +5738,20 @@ msgid_plural ""
 "are shown a dialog to decide how to adapt the relations.<br/><br/>Do you "
 "want to continue?"
 msgstr[0] ""
-msgstr[1] ""
+"Bạn muốn kết hợp {1} đối tượng, mà là một phần của {0}Quan hệ: <br/> {2} Kết "
+"hợp các đối tượng này có thể phá vỡ mối quan hệ này Nếu bạn đang có.Không "
+"chắc chắn, hãy hủy bỏ hoạt động này. <br/> Nếu bạn muốn tiếp tục, bạn "
+"đangThể hiện một hộp thoại để quyết định làm thế nào để thích ứng với các "
+"mối quan hệ. <br/> <br/> Bạn có muốnTiếp tục không?"
 
 msgid "Combine confirmation"
-msgstr ""
+msgstr "Kết hợp xác nhận"
 
 msgid ", "
-msgstr ""
+msgstr ", "
 
 msgid "<i>missing</i>"
-msgstr ""
+msgstr "<i> thiếu </ i>"
 
 msgid ""
 "You are about to combine {0} objects, but the following tags are used "
@@ -5363,123 +5764,132 @@ msgid_plural ""
 "may have unwanted tags.<br/>If you want to continue, you are shown a dialog "
 "to fix the conflicting tags.<br/><br/>Do you want to continue?"
 msgstr[0] ""
-msgstr[1] ""
+"Bạn muốn kết hợp {0} đối tượng, nhưng các thẻ sau đây được sử "
+"dụngConflictingly: <br/> {1} Nếu các đối tượng này được kết hợp, các đối "
+"tượng kết quảChưa có thẻ không mong muốn. <br/> Nếu bạn muốn tiếp tục, bạn "
+"được hiển thị một hộp thoạiĐể sửa các thẻ mâu thuẫn. <br/> <br/> Bạn có muốn "
+"tiếp tục không?"
 
 msgid "Choose a value"
-msgstr ""
+msgstr "Chọn một giá trị"
 
 msgid "none"
-msgstr ""
+msgstr "none"
 
 msgid "all"
-msgstr ""
+msgstr "tất cả"
 
 msgid "sum"
-msgstr ""
+msgstr "tổng hợp"
 
 msgid "Please decide which values to keep"
-msgstr ""
+msgstr "Hãy quyết định mà các giá trị để giữ"
 
 msgid "Value ''{0}'' is going to be applied for key ''{1}''"
-msgstr ""
+msgstr "Giá trị '' {0} '' sẽ được áp dụng cho khóa '' {1} ''"
 
 msgid ""
 "All numeric values sumed as ''{0}'' are going to be applied for key ''{1}''"
 msgstr ""
+"Tất cả các giá trị số sumed là '' {0} '' sẽ được áp dụng cho khóa '' {1} ''"
 
 msgid "The key ''{0}'' and all its values are going to be removed"
-msgstr ""
+msgstr "Chìa khóa '' {0} '' và tất cả các giá trị của nó sẽ được gỡ bỏ"
 
 msgid "All values joined as ''{0}'' are going to be applied for key ''{1}''"
 msgstr ""
+"Tất cả các giá trị tham gia như là '' {0} '' sẽ được áp dụng cho khóa '' {1} "
+"''"
 
 msgid "Tag collection does not include the selected value ''{0}''."
-msgstr ""
+msgstr "Tag thu không bao gồm giá trị được lựa chọn '' {0} ''."
 
 msgid "Not decided yet."
-msgstr ""
+msgstr "Không quyết định."
 
 msgid "Tags from nodes"
-msgstr ""
+msgstr "Thẻ từ nút"
 
 msgid "Tags from ways"
-msgstr ""
+msgstr "Từ khóa bạn cách"
 
 msgid "Tags from relations"
-msgstr ""
+msgstr "Thẻ từ quan hệ"
 
 msgid "Conflicts in pasted tags"
-msgstr ""
+msgstr "Mâu thuẫn trong thẻ dán"
 
 msgid "Paste ..."
-msgstr ""
+msgstr "Paste ..."
 
 msgid "From ..."
-msgstr ""
+msgstr "Từ ..."
 
 msgid "To ..."
-msgstr ""
+msgstr "Để ..."
 
 msgid "{0} tag"
 msgid_plural "{0} tags"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} tag"
 
 msgid "{0} way"
 msgid_plural "{0} ways"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} cách"
 
 msgid "{0} relation"
 msgid_plural "{0} relations"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} mối quan hệ"
 
 msgid "Position {0} is out of range. Current number of members is {1}."
-msgstr ""
+msgstr "Vị trí {0} là ra khỏi phạm vi. Hiện nay số lượng thành viên là {1}."
 
 msgid "Remove this relation member from the relation"
-msgstr ""
+msgstr "Xóa thành viên này quan hệ từ các mối quan hệ"
 
 msgid "Keep"
-msgstr ""
+msgstr "Giữ"
 
 msgid "Keep this relation member for the target object"
-msgstr ""
+msgstr "Giữ thành viên quan hệ này cho các đối tượng mục tiêu"
 
 msgid "Undecided"
-msgstr ""
+msgstr "Chưa quyết định"
 
 msgid "Not decided yet"
-msgstr ""
+msgstr "Không quyết định chưa"
 
 msgid "Role:"
-msgstr ""
+msgstr "Vai trò:"
 
 msgid "Enter a role for all relation memberships"
-msgstr ""
+msgstr "Nhập vai trò của tất cả các thành viên liên quan"
 
 msgid "Tag modified relations with "
-msgstr ""
+msgstr "Tag sửa đổi các mối quan hệ với "
 
 msgid ""
 "<html>Select to enable entering a tag which will be applied<br>to all "
 "modified relations.</html>"
 msgstr ""
+"<Html> Chọn để cho phép nhập vào một từ khóa đó sẽ được áp dụng cho tất cả "
+"các <br>Sửa đổi các mối quan hệ. </ Html>"
 
 msgctxt "tag"
 msgid "Key:"
-msgstr ""
+msgstr "Key:"
 
 msgid "<html>Enter a tag key, e.g. <strong><tt>fixme</tt></strong></html>"
 msgstr ""
+"<html> Nhập key tag, ví dụ như <strong> <tt> FIXME </ tt> </ strong> </ html>"
 
 msgid "Value:"
-msgstr ""
+msgstr "Giá trị:"
 
 msgid ""
 "<html>Enter a tag value, e.g. <strong><tt>check members</tt></strong></html>"
 msgstr ""
+"<Html> Nhập một giá trị thẻ, ví dụ như <strong> <tt> kiểm tra các thành viên "
+"</ tt> </ strong> </ html>"
 
 msgid ""
 "<html>The combined ways are members in one or more relations. Please decide "
@@ -5489,6 +5899,12 @@ msgid ""
 "ways that are members of the same relation: the combined way will take the "
 "place of the original way in the relation.</html>"
 msgstr ""
+"<Html> Các cách kết hợp là thành viên trong một hoặc nhiều quan hệ. Hãy "
+"quyết địnhCho dù bạn muốn <strong> giữ </ strong> các thành viên cho các kết "
+"hợpCách hay bạn muốn <strong> xóa </ strong> họ. <br> Mặc định là<Strong> "
+"giữ </ strong> cách đầu tiên và <strong> xóa </ strong> khácCách là thành "
+"viên của các mối quan hệ cùng: cách kết hợp sẽ điNơi cách ban đầu trong các "
+"mối quan hệ. </ Html>"
 
 msgid ""
 "<html>The merged nodes are members in one or more relations. Please decide "
@@ -5498,137 +5914,150 @@ msgid ""
 "other nodes that are members of the same relation: the target node will take "
 "the place of the original node in the relation.</html>"
 msgstr ""
+"<Html> Các nút sáp nhập là thành viên trong một hoặc nhiều quan hệ. Hãy "
+"quyết địnhCho dù bạn muốn <strong> giữ </ strong> các thành viên cho mục "
+"tiêuNút hoặc cho dù bạn muốn <strong> xóa </ strong> họ. <br> Mặc định "
+"là<Strong> giữ </ strong> nút đầu tiên và <strong> xóa </ strong>Nút khác là "
+"thành viên của các mối quan hệ cùng: các nút mục tiêu sẽ mấtVị trí của nút "
+"gốc trong các mối quan hệ. </ Html>"
 
 msgid "Apply this role to all members"
-msgstr ""
+msgstr "Áp dụng vai trò này cho tất cả các thành viên"
+
+msgid "Pos."
+msgstr "Pos."
 
 msgid "Orig. Way"
-msgstr ""
+msgstr "Orig. Way"
 
 msgid "Decision"
-msgstr ""
+msgstr "Quyết định"
 
 msgid "<html>Please select the values to keep for the following tags.</html>"
-msgstr ""
+msgstr "<html> Hãy chọn các giá trị để giữ cho các thẻ sau đây. </ html>"
 
 msgid "Show tags with conflicts only"
-msgstr ""
+msgstr "Hiển thị các thẻ chỉ có xung đột"
 
 msgid "Show tags with multiple values only"
-msgstr ""
+msgstr "Hiển thị các thẻ với nhiều giá trị duy nhất"
 
 msgid "For selected objects only"
-msgstr ""
+msgstr "đối tượng Đối với lựa chọn duy nhất"
 
 msgid ""
 "<html>Select to show changesets for the currently selected objects "
 "only.<br>Unselect to show all changesets for objects in the current data "
 "layer.</html>"
 msgstr ""
+"<Html> Chọn để hiển thị changesets cho các đối tượng đang được chọnChỉ. <br> "
+"Bỏ chọn để hiển thị tất cả các changesets cho các đối tượng trong các dữ "
+"liệu hiện tạiLayer. </ Html>"
 
 msgid "Changesets"
-msgstr ""
+msgstr "changesets"
 
 msgid "Open the list of changesets in the current layer."
-msgstr ""
+msgstr "Mở danh sách các changesets trong lớp hiện tại."
 
 msgid "Select all objects assigned to the currently selected changesets"
-msgstr ""
+msgstr "Chọn tất cả các đối tượng giao cho changesets hiện đang được chọn"
 
 msgid "Download"
-msgstr "Tải về"
+msgstr "Download"
 
 msgid ""
 "Download information about the selected changesets from the OSM server"
-msgstr ""
+msgstr "Thông tin Tải về changesets được lựa chọn từ các máy chủ OSM"
 
 msgid "Closes the selected open changesets"
-msgstr ""
+msgstr "Đóng changesets mở được lựa chọn"
 
 msgid "Show info"
-msgstr ""
+msgstr "Hiển thị thông tin"
 
 msgid "Open a web page for each selected changeset"
-msgstr ""
+msgstr "Mở một trang web cho mỗi changeset chọn"
 
 msgid "Details"
-msgstr ""
+msgstr "Details"
 
 msgid "Opens the Changeset Manager window for the selected changesets"
-msgstr ""
+msgstr "Mở cửa sổ changeset Manager cho các changesets chọn"
 
 msgid "Command Stack"
-msgstr ""
+msgstr "Command Stack"
 
 msgid "Open a list of all commands (undo buffer)."
-msgstr ""
+msgstr "Mở một danh sách tất cả các lệnh (undo đệm)."
 
 msgid "Toggle: {0}"
-msgstr ""
+msgstr "Toggle: {0}"
 
 msgid "Command Stack: Undo: {0} / Redo: {1}"
-msgstr ""
+msgstr "Command Stack: Undo: {0} / Redo: {1}"
 
 msgid ""
 "Selects the objects that take part in this command (unless currently deleted)"
-msgstr ""
+msgstr "Chọn các đối tượng tham gia vào lệnh này (trừ khi đang bị xóa)"
 
 msgid "Select and zoom"
-msgstr ""
+msgstr "Chọn và phóng to"
 
 msgid ""
 "Selects the objects that take part in this command (unless currently "
 "deleted), then and zooms to it"
 msgstr ""
+"Chọn các đối tượng tham gia vào lệnh này (trừ khi hiện nayXóa), sau đó và "
+"phóng vào nó"
 
 msgid "Undo the selected and all later commands"
-msgstr ""
+msgstr "Hoàn tác lựa chọn và tất cả các lệnh sau"
 
 msgid "Redo the selected and all earlier commands"
-msgstr ""
+msgstr "Làm lại và tất cả các lệnh trước đó đã chọn"
 
 msgid "Resolve conflicts."
-msgstr ""
+msgstr "Giải quyết xung đột."
 
 msgid "Conflict: {0} unresolved"
 msgid_plural "Conflicts: {0} unresolved"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "xung đột: {0} chưa được giải quyết"
 
 msgid "Rel.:{0} / Ways:{1} / Nodes:{2}"
-msgstr ""
+msgstr "Rel:. {0} / Cách: {1} / Nodes: {2}"
 
 msgid "Resolve"
-msgstr ""
+msgstr "Resolve"
 
 msgid "Open a merge dialog of all selected items in the list above."
 msgstr ""
+"Mở một hộp thoại hợp nhất của tất cả các mục được chọn trong danh sách trên."
 
 msgid "There was {0} conflict detected."
 msgid_plural "There were {0} conflicts detected."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Có {0} xung đột phát hiện."
 
 msgid "Click to close this dialog and continue editing"
-msgstr ""
+msgstr "Nhấn vào đây để đóng hộp thoại này và tiếp tục chỉnh sửa"
 
 msgid "Conflicts detected"
-msgstr ""
+msgstr "Mâu thuẫn phát hiện"
 
 msgid "Cancel conflict resolution and close the dialog"
-msgstr ""
+msgstr "Hủy giải quyết xung đột và đóng hộp thoại"
 
 msgid "Apply resolved conflicts and close the dialog"
-msgstr ""
+msgstr "Áp dụng giải quyết các cuộc xung đột và đóng hộp thoại"
 
 msgid "Apply Resolution"
-msgstr ""
+msgstr "Áp dụng Nghị quyết"
 
 msgid "Close anyway"
-msgstr ""
+msgstr "Đóng anyway"
 
 msgid "Continue resolving"
-msgstr ""
+msgstr "Tiếp tục giải quyết"
 
 msgid ""
 "<html>You did not finish to merge the differences in this "
@@ -5638,758 +6067,888 @@ msgid ""
 "applied.</strong><br>Click <strong>{1}</strong> to return to resolving "
 "conflicts.</html>"
 msgstr ""
+"<Html> Bạn đã không hoàn thành để hợp nhất sự khác biệt trong nàyNghị quyết "
+"xung đột mâu thuẫn. <br> Sẽ không được áp dụng trừ khi tất cảNhững khác biệt "
+"<br> được giải quyết. <br> Nhấp <strong> {0} </ strong> để đóngAnyway. "
+"<Strong> khác biệt Đã <br> giải quyết sẽ không đượcÁp dụng. </ Strong> <br> "
+"Nhấp <strong> {1} </ strong> để trở về để giải quyếtXung đột. </ Html>"
 
 msgid "Conflict not resolved completely"
-msgstr ""
+msgstr "xung đột không được giải quyết hoàn toàn"
 
 msgid "Resolve conflicts"
-msgstr ""
+msgstr "Giải quyết xung đột"
 
 msgid "Resolve conflicts for ''{0}''"
+msgstr "Giải quyết xung đột cho '' {0} ''"
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
 msgstr ""
+"<Html> Vui lòng xác nhận xóa <strong> 1 đối tượng </ strong> từ <strong> "
+"1Quan hệ </ strong>. </ Html>"
 
-msgid "Filter objects and hide/disable them."
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
 msgstr ""
+"<Html> Vui lòng xác nhận xóa <strong> 1 đối tượng </ strong> từ <strong> "
+"{0}Quan hệ </ strong>. </ Html>"
 
-msgid "Enable filter"
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
 msgstr ""
+"<Html> Vui lòng xác nhận xóa <strong> {0} đối tượng </ strong> từ <strong> "
+"{1}Quan hệ </ strong>. </ Html>"
 
-msgid "Multikey: {0}"
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] "Xóa {0} đối tượng"
+
+msgid "Delete objects"
+msgstr "Xóa các đối tượng"
+
+msgid "To delete"
+msgstr "Để xóa"
+
+msgid "From Relation"
+msgstr "Từ quan hệ"
+
+msgid "Click to close the dialog and remove the object from the relations"
 msgstr ""
+"Nhấn vào đây để đóng hộp thoại và loại bỏ các đối tượng từ các mối quan hệ"
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr "Nhấn vào đây để đóng hộp thoại và hủy bỏ việc xóa các đối tượng"
+
+msgid "Filter objects and hide/disable them."
+msgstr "đối tượng Lọc và ẩn / vô hiệu hóa chúng."
+
+msgid "Enable filter"
+msgstr "Kích hoạt tính năng lọc"
+
+msgid "Multikey: {0}"
+msgstr "Multikey: {0}"
 
 msgid "Hide filter"
-msgstr ""
+msgstr "Hide lọc"
 
 msgid "Hiding filter"
-msgstr ""
+msgstr "Ẩn bộ lọc"
 
 msgid "Inverse filter"
-msgstr ""
+msgstr "bộ lọc Inverse"
 
 msgid "Filter mode"
-msgstr ""
+msgstr "Filter chế độ"
 
 msgid "Add"
 msgstr "Thêm"
 
 msgid "Add filter."
-msgstr ""
+msgstr "Thêm bộ lọc"
 
 msgid "Edit filter."
-msgstr ""
+msgstr "Chỉnh sửa bộ lọc"
 
 msgid "Delete filter."
-msgstr ""
+msgstr "Xóa bộ lọc"
 
 msgid "Move filter up."
-msgstr ""
+msgstr "Move lọc lên."
 
 msgid "Move filter down."
-msgstr ""
+msgstr "Di chuyển bộ lọc xuống."
 
 msgid "Filter Hidden:{0} Disabled:{1}"
-msgstr ""
+msgstr "Bộ lọc ẩn danh: {0} Disabled: {1}"
 
 msgid "Error in filter"
-msgstr ""
+msgstr "Lỗi trong bộ lọc"
 
 msgctxt "filter"
 msgid "E"
-msgstr ""
+msgstr "E"
 
 msgctxt "filter"
 msgid "H"
-msgstr ""
+msgstr "H"
 
 msgctxt "filter"
 msgid "Text"
-msgstr ""
+msgstr "Văn bản"
 
 msgctxt "filter"
 msgid "I"
-msgstr ""
+msgstr "I"
 
 msgctxt "filter"
 msgid "M"
-msgstr ""
+msgstr "M"
 
 msgctxt "filter"
 msgid "R"
-msgstr ""
+msgstr "R"
 
 msgctxt "filter"
 msgid "A"
-msgstr ""
+msgstr "A"
 
 msgctxt "filter"
 msgid "D"
-msgstr ""
+msgstr "D"
 
 msgctxt "filter"
 msgid "F"
-msgstr ""
+msgstr "F"
 
 msgid "<h2>Filter active</h2>"
-msgstr ""
+msgstr "<h2> Filter hoạt động </ h2>"
 
 msgid "<p><b>{0}</b> object hidden"
 msgid_plural "<p><b>{0}</b> objects hidden"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "<p> <b> {0} </ b> đối tượng ẩn"
 
 msgid "<b>{0}</b> object disabled"
 msgid_plural "<b>{0}</b> objects disabled"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "<b> {0} </ b> đối tượng người khuyết tật"
 
 msgid "</p><p>Close the filter dialog to see all objects.<p></html>"
 msgstr ""
+"</ p> <p> Đóng hộp thoại bộ lọc để xem tất cả các đối tượng. <p> </ html>"
 
 msgid "Advanced object info"
-msgstr ""
+msgstr "Nâng cao Thông tin đối tượng"
 
 msgid "map style"
-msgstr ""
+msgstr "bản đồ theo phong cách"
 
-msgid " ({0})"
+msgid "edit counts"
 msgstr ""
 
 msgid "not in data set"
-msgstr ""
+msgstr "không trong tập dữ liệu"
 
 msgid "Node: "
-msgstr ""
+msgstr "Node: "
 
 msgid "Way: "
-msgstr ""
+msgstr "Way: "
 
 msgid "Relation: "
-msgstr ""
+msgstr "Mối quan hệ: "
 
 msgid "deleted-on-server"
-msgstr ""
+msgstr "xóa-on-server"
 
 msgid "modified"
-msgstr ""
+msgstr "biến dạng"
 
 msgid "filtered/hidden"
-msgstr ""
+msgstr "lọc / ẩn"
 
 msgid "filtered/disabled"
-msgstr ""
+msgstr "lọc / vô hiệu hóa"
 
 msgid "has direction keys (reversed)"
-msgstr ""
+msgstr "có các phím hướng (đảo ngược)"
 
 msgid "has direction keys"
-msgstr ""
+msgstr "có các phím hướng"
 
 msgid "State: "
-msgstr ""
+msgstr "Nhà nước: "
 
 msgid "Data Set: "
-msgstr ""
+msgstr "Data Set: "
 
 msgid "Edited at: "
-msgstr ""
+msgstr "Sửa tại: "
 
 msgid "<new object>"
-msgstr ""
+msgstr "<object mới>"
 
 msgid "Edited by: "
-msgstr ""
+msgstr "Chỉnh sửa bởi: "
 
 msgid "Version: "
-msgstr ""
+msgstr "Version: "
 
 msgid "In changeset: "
-msgstr ""
+msgstr "Trong changeset: "
 
 msgid "Tags: "
-msgstr ""
+msgstr "Tags: "
 
 msgid "Centroid: "
-msgstr ""
+msgstr "trọng tâm: "
 
 msgid "{0} Member: "
 msgid_plural "{0} Members: "
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} Member: "
 
 msgid " as \"{0}\""
-msgstr ""
+msgstr " như \" {0} \""
 
 msgid "{0} Nodes: "
-msgstr ""
+msgstr "{0} Nodes: "
 
 msgid "Bounding box: "
-msgstr ""
+msgstr "hộp bounding: "
 
 msgid "Bounding box (projected): "
-msgstr ""
+msgstr "hộp (dự kiến) bounding: "
 
 msgid "Center of bounding box: "
-msgstr ""
+msgstr "Trung tâm của khung giới hạn: "
 
 msgid "Coordinates: "
-msgstr ""
+msgstr "Tọa độ: "
 
 msgid "Coordinates (projected): "
-msgstr ""
+msgstr "Tọa độ (dự kiến): "
 
 msgid "Part of: "
-msgstr ""
+msgstr "Một phần của: "
 
 msgid "In conflict with: "
-msgstr ""
+msgstr "Trong cuộc xung đột với: "
 
 msgid "Styles Cache for \"{0}\":"
-msgstr ""
+msgstr "Styles Cache \" {0} \":"
 
 msgid ""
 "\n"
 "\n"
 "> applying {0} style \"{1}\"\n"
 msgstr ""
+"\n"
+"\n"
+"> Áp dụng {0} phong cách \" {1} \"\n"
 
 msgid ""
 "\n"
 "Range:{0}"
 msgstr ""
+"\n"
+"Phạm vi: {0}"
 
 msgid ""
 "\n"
 "\n"
 "> skipping \"{0}\" (not active)"
 msgstr ""
+"\n"
+"\n"
+"> Bỏ qua \" {0} \"(không hoạt động)"
 
 msgid ""
 "\n"
 "\n"
 "List of generated Styles:\n"
 msgstr ""
+"\n"
+"\n"
+"Danh sách Styles tạo:\n"
 
 msgid "The 2 selected objects have identical style caches."
-msgstr ""
+msgstr "2 đối tượng được lựa chọn có cache phong cách giống hệt nhau."
 
 msgid "The 2 selected objects have different style caches."
-msgstr ""
+msgstr "2 đối tượng được lựa chọn có cache phong cách khác nhau."
 
 msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
+"Cảnh báo: 2 đối tượng được lựa chọn phải bằng nhau, nhưng cache phong cách "
+"không giống nhau."
+
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
 
 msgid "xml"
-msgstr ""
+msgstr "xml"
 
 msgid "mapcss"
-msgstr ""
+msgstr "mapcss"
 
 msgid "unknown"
+msgstr "không rõ"
+
+msgid "Enter the coordinates for the new node."
 msgstr ""
 
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
 msgstr ""
 
-msgid "Projected coordinates:"
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
 msgstr ""
 
+msgid "Some examples:"
+msgstr ""
+
+msgid "Projected coordinates:"
+msgstr "Dự tọa:"
+
 msgid ""
 "Enter easting and northing (x and y) separated by space, comma or semicolon."
 msgstr ""
+"Nhập đường về hướng đông và đường đi về hướng bắc (x và y) cách nhau bởi "
+"không gian, dấu phẩy hoặc dấu chấm phẩy."
 
 msgid "Lat/Lon"
-msgstr ""
+msgstr "Lat / Lon"
 
 msgid "East/North"
-msgstr ""
+msgstr "Đông / Bắc"
 
 msgid "Please enter a GPS coordinates"
-msgstr ""
+msgstr "Hãy nhập một tọa độ GPS"
 
 msgid "Please enter a Easting and Northing"
-msgstr ""
+msgstr "Hãy nhập một hướng đông và đường đi về hướng bắc"
 
 msgid "Toggle visibility of layer: {0}"
-msgstr ""
+msgstr "Bập bênh của lớp: {0}"
 
 msgid "Open a list of all loaded layers."
-msgstr ""
+msgstr "Mở một danh sách của tất cả các lớp được nạp."
 
 msgid "Delete the selected layers."
-msgstr ""
+msgstr "Xóa các lớp được chọn."
 
 msgid "Show/hide"
-msgstr ""
+msgstr "Hiện / ẩn"
 
 msgid "Toggle visible state of the selected layer."
-msgstr ""
+msgstr "Chuyển đổi trạng thái ban đầu của các lớp được chọn."
 
 msgid "Show/hide layer"
-msgstr ""
+msgstr "Hiện / ẩn lớp"
 
 msgid "Opacity"
-msgstr ""
+msgstr "Opacity"
 
 msgid "Adjust opacity of the layer."
+msgstr "Điều chỉnh độ mờ đục của lớp."
+
+msgid "Gamma"
 msgstr ""
 
-msgid "Activate"
+msgid "Adjust gamma value of the layer."
 msgstr ""
 
+msgid "Activate"
+msgstr "Kích hoạt"
+
 msgid "Activate the selected layer"
-msgstr ""
+msgstr "Kích hoạt các lớp được chọn"
 
 msgid "Activate layer"
-msgstr ""
+msgstr "Kích hoạt lớp"
 
 msgid "Merge this layer into another layer"
-msgstr ""
+msgstr "Merge layer này vào một lớp"
 
 msgid "Duplicate this layer"
-msgstr ""
+msgstr "Nhân đôi layer này"
 
 msgid "Copy of {0}"
 msgstr "Bản sao của {0}"
 
 msgid "Copy {1} of {0}"
-msgstr "Bản sao thứ {1} của {0}"
+msgstr "Copy {1} {0}"
 
 msgid "layer is currently visible (click to hide layer)"
-msgstr ""
+msgstr "layer hiện đang nhìn thấy được (click để ẩn layer)"
 
 msgid "layer is currently hidden (click to show layer)"
-msgstr ""
+msgstr "layer được ẩn (bấm vào để hiển thị lớp)"
 
 msgid "this layer is the active layer"
-msgstr ""
+msgstr "lớp này là lớp tích cực"
 
 msgid "this layer is not currently active (click to activate)"
-msgstr ""
+msgstr "layer này hiện không hoạt động (bấm vào để kích hoạt)"
 
 msgid "Move the selected layer one row up."
-msgstr ""
+msgstr "Di chuyển các lớp được chọn lên một hàng."
 
 msgid "Move the selected layer one row down."
-msgstr ""
+msgstr "Di chuyển các lớp được chọn một hàng xuống."
 
 msgid "Information about layer"
-msgstr ""
+msgstr "Thông tin về lớp"
 
 msgid "Map paint preferences"
-msgstr ""
+msgstr "sở thích Bản đồ sơn"
 
 msgid "Map Paint Styles"
-msgstr ""
+msgstr "Bản đồ Sơn Styles"
 
 msgid "configure the map painting style"
-msgstr ""
+msgstr "cấu hình đồ họa theo phong cách"
 
 msgid "MapPaint"
-msgstr ""
+msgstr "MapPaint"
 
 msgid "On/Off"
-msgstr ""
+msgstr "On / Off"
 
 msgid "Turn selected styles on or off"
-msgstr ""
+msgstr "Bật phong cách được lựa chọn hoặc tắt"
 
 msgid "Move the selected entry one row down."
-msgstr ""
+msgstr "Di chuyển các mục chọn một hàng xuống."
 
 msgid "Move the selected entry one row up."
-msgstr ""
+msgstr "Di chuyển các mục chọn một hàng lên trên."
 
 msgid "Reload from file"
-msgstr ""
+msgstr "Nạp lại từ tập tin"
 
 msgid "reload selected styles from file"
-msgstr ""
+msgstr "lại phong cách lựa chọn từ tập tin"
 
 msgid "Save as..."
-msgstr ""
+msgstr "Save as ..."
 
 msgid "Save a copy of this Style to file and add it to the list"
-msgstr ""
+msgstr "Lưu một bản sao của phong cách này để nộp và thêm nó vào danh sách"
 
 msgid "Map paint style file (*.mapcss, *.zip)"
-msgstr ""
+msgstr "phong cách đồ sơn file (* .mapcss, * .zip)"
 
 msgid "Map paint style file (*.xml, *.zip)"
-msgstr ""
+msgstr "phong cách đồ sơn file (* .xml, * .zip)"
 
 msgid "Reloading style sources"
-msgstr ""
+msgstr "Reloading nguồn phong cách"
 
 msgid "Save style ''{0}'' as ''{1}''"
-msgstr ""
+msgstr "Lưu phong cách '' {0} '' như '' {1} ''"
 
 msgid "view meta information, error log and source definition"
-msgstr ""
+msgstr "xem thông tin meta, lỗi đăng nhập và nguồn định nghĩa"
 
 msgid "Map Style info"
-msgstr ""
+msgstr "Bản đồ Kiểu info"
 
 msgid "Source"
-msgstr ""
+msgstr "Nguồn"
 
 msgid "Title:"
-msgstr ""
+msgstr "Tiêu đề:"
 
 msgid "URL:"
-msgstr ""
+msgstr "URL:"
 
 msgid "Built-in Style, internal path:"
-msgstr ""
+msgstr "Built-in Style, đường nội bộ:"
 
 msgid "Path:"
-msgstr ""
+msgstr "Path:"
 
 msgid "Icon:"
-msgstr ""
+msgstr "Biểu tượng:"
 
 msgid "Background:"
-msgstr ""
+msgstr "Bối cảnh:"
 
 msgid "Style is currently active?"
-msgstr ""
+msgstr "Style hiện đang hoạt động?"
 
 msgid "No"
-msgstr ""
+msgstr "Không"
 
 msgid "Style settings"
-msgstr ""
+msgstr "thiết lập Style"
 
 msgid "Customize the style"
+msgstr "Tùy chỉnh phong cách"
+
+msgid "Mini map"
 msgstr ""
 
-msgid "List of notes"
+msgid "Displays a small map of the current edit location"
 msgstr ""
 
+msgid "List of notes"
+msgstr "Danh sách các ghi chú"
+
 msgid "Add comment"
-msgstr ""
+msgstr "Add comment"
 
 msgid "Comment"
-msgstr ""
+msgstr "Comment"
 
 msgid "Comment on note"
-msgstr ""
+msgstr "Bình luận về ghi chú"
 
 msgid "Add comment to note:"
-msgstr ""
+msgstr "Add comment cần lưu ý:"
 
 msgid "Close note"
-msgstr ""
+msgstr "Close lưu ý"
 
 msgid "Close note with message:"
-msgstr ""
+msgstr "Close lưu ý với thông điệp:"
 
 msgid "Create a new note"
-msgstr ""
+msgstr "Tạo một ghi chú mới"
 
 msgid "Create"
-msgstr ""
+msgstr "Tạo"
 
 msgid "Reopen note"
-msgstr ""
+msgstr "Mở lại lưu ý"
 
 msgid "Reopen"
-msgstr ""
+msgstr "mở lại"
 
 msgid "Reopen note with message:"
-msgstr ""
+msgstr "Mở lại lưu ý với thông điệp:"
 
 msgid "Sort notes"
-msgstr ""
+msgstr "Sắp xếp các ghi chú"
 
 msgid "Sort"
-msgstr ""
+msgstr "Phân loại"
 
 msgid "Object type:"
-msgstr "Loại đối tượng:"
+msgstr "kiểu Object:"
 
 msgctxt "osm object types"
 msgid "mixed"
-msgstr ""
+msgstr "pha trộn"
 
 msgid "Choose the OSM object type"
-msgstr "Lựa chọn loại đối tượng OSM"
+msgstr "Chọn loại đối tượng OSM"
 
 msgid "Object ID:"
-msgstr "ID của Đối tượng:"
+msgstr "Object ID:"
 
 msgid "Enter the ID of the object that should be downloaded"
-msgstr "Nhập ID của đối tượng để tải về"
+msgstr "Nhập ID của đối tượng đó phải được tải về"
+
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
 
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
 "Invalid ID list specified\n"
 "Cannot continue."
 msgstr ""
+"Invalid danh sách ID quy \n"
+"Không thể tiếp tục."
 
 msgid "Relations"
-msgstr ""
+msgstr "Quan hệ"
 
 msgid "Open a list of all relations."
-msgstr ""
+msgstr "Mở một danh sách của tất cả các mối quan hệ."
 
 msgid "Relation list filter"
-msgstr ""
+msgstr "danh sách Relation lọc"
 
 msgid "Create a new relation"
-msgstr ""
+msgstr "Tạo một mối quan hệ mới"
 
 msgid "New"
-msgstr "Tạo mới"
+msgstr "New"
 
 msgid "Relations: {0}/{1}"
-msgstr ""
+msgstr "Quan hệ: {0} / {1}"
 
 msgid "Relations: {0}"
-msgstr ""
+msgstr "Quan hệ: {0}"
+
+msgid "Selection"
+msgstr "Lựa chọn"
 
 msgid "Open a selection list window."
-msgstr ""
+msgstr "Mở một cửa sổ danh sách lựa chọn."
 
 msgid "Current Selection"
-msgstr ""
+msgstr "Lựa chọn hiện tại"
 
 msgid "Search for objects"
-msgstr ""
+msgstr "Tìm kiếm cho các đối tượng"
 
 msgid "Display the history of the selected objects."
-msgstr ""
+msgstr "Hiển thị lịch sử của các đối tượng được chọn."
 
 msgid "Zoom to selection"
-msgstr ""
+msgstr "Zoom để lựa chọn"
 
 msgid "Zoom to selected element(s)"
-msgstr ""
+msgstr "Zoom vào phần tử được lựa chọn (s)"
 
 msgid "Sel.: Rel.:{0} / Ways:{1} / Nodes:{2}"
-msgstr ""
+msgstr "Sel .: Rel:. {0} / Cách: {1} / Nodes: {2}"
 
 msgid "Unselectable now"
-msgstr ""
+msgstr "Unselectable bây giờ"
 
 msgid "Selection: {0}"
-msgstr ""
+msgstr "Lựa chọn: {0}"
 
 msgid "Always shown"
-msgstr ""
+msgstr "Luôn luôn hiển thị"
 
 msgid "Dynamic"
-msgstr ""
+msgstr "Dynamic"
 
 msgid "Always hidden"
-msgstr ""
+msgstr "Luôn ẩn"
 
 msgid "Toggle dynamic buttons"
-msgstr ""
+msgstr "Chuyển đổi nút năng động"
 
 msgid "Open preferences for this panel"
-msgstr ""
+msgstr "Open ưu đãi cho bảng điều"
 
 msgid "Undock the panel"
-msgstr ""
+msgstr "giải phóng bảng"
 
 msgid ""
 "Close this panel. You can reopen it with the buttons in the left toolbar."
 msgstr ""
+"Đóng bảng điều khiển này. Bạn có thể mở lại nó bằng các nút trên thanh công "
+"cụ bên trái."
 
 msgid "Click to minimize/maximize the panel content"
-msgstr ""
+msgstr "Nhấn vào để giảm thiểu / tối đa hóa các nội dung của bảng điều khiển"
 
 msgid "Side buttons"
-msgstr ""
+msgstr "nút Side"
 
 msgid "Authors"
-msgstr ""
+msgstr "Tác giả"
 
 msgid "Open a list of people working on the selected objects."
-msgstr ""
+msgstr "Mở một danh sách những người làm việc trên các đối tượng được chọn."
 
 msgid "{0} Author"
 msgid_plural "{0} Authors"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} Tác giả"
 
 msgid "Select objects submitted by this user"
-msgstr ""
+msgstr "Chọn đối tượng nộp bởi người dùng này"
 
 msgid "Launches a browser with information about the user"
-msgstr ""
+msgstr "tung ra một trình duyệt với các thông tin về người sử dụng"
 
 msgid "Only launching info browsers for the first {0} of {1} selected users"
 msgstr ""
+"Chỉ tung ra trình duyệt thông tin cho người đầu tiên {0} {1} người dùng lựa "
+"chọn"
 
 msgid "Author"
-msgstr ""
+msgstr "tác giả"
 
 msgid "# Objects"
-msgstr ""
+msgstr "# Objects"
 
 msgid "Validation Results"
-msgstr ""
+msgstr "Xác nhận kết quả"
 
 msgid "Open the validation window."
-msgstr ""
+msgstr "Mở cửa sổ xác nhận."
 
 msgid "Validation results"
+msgstr "Kết quả Validation"
+
+msgid "Lookup"
 msgstr ""
 
-msgid "Fix"
+msgid "Looks up the selected primitives in the error list."
 msgstr ""
 
+msgid "Fix"
+msgstr "Fix"
+
 msgid "Fix the selected issue."
-msgstr ""
+msgstr "Khắc phục các vấn đề lựa chọn."
 
 msgid "Ignore the selected issue next time."
-msgstr ""
+msgstr "Bỏ qua những vấn đề được lựa chọn thời gian tiếp theo."
 
 msgid "Whole group"
-msgstr ""
+msgstr "Tổng số các nhóm"
 
 msgid "Single elements"
-msgstr ""
+msgstr "các yếu tố đơn"
 
 msgid "Nothing"
-msgstr ""
+msgstr "Không có gì"
 
 msgid "Ignore whole group or individual elements?"
-msgstr ""
+msgstr "Bỏ qua cả nhóm hoặc các yếu tố cá nhân?"
 
 msgid "Ignoring elements"
-msgstr ""
+msgstr "Bỏ qua yếu tố"
 
 msgid "Fixing errors ..."
-msgstr ""
+msgstr "Sửa những lỗi ..."
 
 msgid "Fixing ({0}/{1}): ''{2}''"
-msgstr ""
+msgstr "Sửa ({0} / {1}): '' {2} ''"
 
 msgid "Updating map ..."
-msgstr ""
+msgstr "Cập nhật bản đồ ..."
 
 msgid "anonymous"
-msgstr ""
+msgstr "vô danh"
 
 msgid "Display the basic properties of the changeset"
-msgstr ""
+msgstr "Hiển thị các thuộc tính cơ bản của changeset"
 
 msgid "Display the tags of the changeset"
-msgstr ""
+msgstr "Hiển thị các thẻ của changeset"
 
 msgid "Content"
-msgstr ""
+msgstr "Nội dung"
 
 msgid "Display the objects created, updated, and deleted by the changeset"
 msgstr ""
+"Hiển thị các đối tượng được tạo ra, cập nhật, và xóa các thuật changeset"
 
 msgid "Discussion"
-msgstr ""
+msgstr "Thảo luận"
 
 msgid "Display the public discussion around this changeset"
-msgstr ""
+msgstr "Hiển thị các cuộc thảo luận công cộng xung quanh changeset này"
 
 msgid "Changeset Management Dialog"
-msgstr ""
+msgstr "changeset Quản lý Dialog"
 
 msgid "Close the dialog"
-msgstr ""
+msgstr "Đóng hộp thoại"
 
 msgid "Query"
-msgstr ""
+msgstr "Truy vấn"
 
 msgid "Launch the dialog for querying changesets"
-msgstr ""
+msgstr "Khởi chạy hộp thoại để truy vấn changesets"
 
 msgid "Remove from cache"
-msgstr ""
+msgstr "Gỡ bỏ khỏi bộ nhớ cache"
 
 msgid "Remove the selected changesets from the local cache"
-msgstr ""
+msgstr "Hủy bỏ các changesets chọn từ bộ nhớ cache của địa phương"
 
 msgid "Close the selected changesets"
-msgstr ""
+msgstr "Đóng changesets chọn"
 
 msgid "Update changeset"
-msgstr ""
+msgstr "Cập nhật changeset"
 
 msgid "Updates the selected changesets with current data from the OSM server"
-msgstr ""
+msgstr "Cập nhật các changesets chọn với dữ liệu hiện tại từ các máy chủ OSM"
 
 msgid "Download changeset content"
-msgstr ""
+msgstr "Tải changeset nội dung"
 
 msgid "Download the content of the selected changesets from the server"
-msgstr ""
+msgstr "Tải về nội dung của các changesets được lựa chọn từ các máy chủ"
 
 msgid "My changesets"
-msgstr ""
+msgstr "changesets của tôi"
 
 msgid "Download my changesets from the OSM server (max. 100 changesets)"
-msgstr ""
+msgstr "Tải changesets của tôi từ máy chủ OSM (max. 100 changesets)"
 
 msgid ""
 "<html>JOSM is currently running with an anonymous user. It cannot "
 "download<br>your changesets from the OSM server unless you enter your OSM "
 "user name<br>in the JOSM preferences.</html>"
 msgstr ""
+"<Html> JOSM hiện đang chạy với một người dùng vô danh. Nó có thể khôngTải "
+"<br> changesets bạn từ máy chủ OSM trừ khi bạn nhập OSM của bạnTên người "
+"dùng <br> trong các ưu đãi JOSM. </ Html>"
 
 msgctxt "changeset.upload-comment"
 msgid "empty"
-msgstr ""
+msgstr "trống rỗng"
 
 msgctxt "changeset.state"
 msgid "Open"
-msgstr ""
+msgstr "Open"
 
 msgctxt "changeset.state"
 msgid "Closed"
-msgstr ""
+msgstr "Closed"
 
 msgid "ID"
-msgstr ""
+msgstr "ID"
 
 msgid "Open"
-msgstr ""
+msgstr "Open"
 
 msgid "User"
-msgstr ""
+msgstr "Người sử dụng"
 
 msgid "Created at"
-msgstr ""
+msgstr "Created at"
 
 msgid "Closed at"
-msgstr ""
+msgstr "Đóng cửa tại"
 
 msgid "Discussions"
-msgstr ""
+msgstr "Thảo luận"
 
 msgid "Downloading changeset content"
-msgstr ""
+msgstr "Tải nội dung changeset"
 
 msgid "({0}/{1}) Downloading changeset {2}..."
-msgstr ""
+msgstr "({0} / {1}) Tải changeset {2} ..."
 
 msgid "({0}/{1}) Downloading content for changeset {2}..."
-msgstr ""
+msgstr "({0} / {1}) tải về nội dung cho changeset {2} ..."
 
 msgid ""
 "<html>The selected object is not available in the current<br>edit layer "
@@ -6398,276 +6957,313 @@ msgid_plural ""
 "<html>None of the selected objects is available in the current<br>edit layer "
 "''{0}''.</html>"
 msgstr[0] ""
-msgstr[1] ""
+"<Html> Các đối tượng được chọn không có sẵn trong hiện tại <br> chỉnh sửa "
+"layer'' {0} ''. </ Html>"
 
 msgid "Download content"
-msgstr ""
+msgstr "Tải nội dung"
 
 msgid "Download the changeset content from the OSM server"
-msgstr ""
+msgstr "Tải nội dung từ máy chủ changeset OSM"
 
 msgid "Update content"
-msgstr ""
+msgstr "Cập nhật nội dung"
 
 msgid "Update the changeset content from the OSM server"
-msgstr ""
+msgstr "Cập nhật các nội dung changeset từ máy chủ OSM"
 
 msgid "Download and show the history of the selected objects"
-msgstr ""
+msgstr "Tải về và hiển thị lịch sử của các đối tượng được chọn"
 
 msgid "Select in layer"
-msgstr ""
+msgstr "Chọn trong lớp"
 
 msgid "Select the corresponding primitives in the current data layer"
-msgstr ""
+msgstr "Chọn nguyên thủy tương ứng trong các lớp dữ liệu hiện tại"
 
 msgid "Nothing to select"
-msgstr ""
+msgstr "Không có gì để chọn"
 
 msgid "Zoom to in layer"
-msgstr ""
+msgstr "Zoom to trong lớp"
 
 msgid "Zoom to the corresponding objects in the current data layer"
-msgstr ""
+msgstr "Zoom cho các đối tượng tương ứng trong các lớp dữ liệu hiện tại"
 
 msgid "Nothing to zoom to"
-msgstr ""
+msgstr "Không có gì để zoom to"
 
 msgid "The content of this changeset is not downloaded yet."
-msgstr ""
+msgstr "Nội dung của changeset này không được tải về chưa."
 
 msgid "Download now"
-msgstr ""
+msgstr "Download now"
 
 msgid "Download the changeset content"
-msgstr ""
+msgstr "Tải nội dung changeset"
 
 msgid "Created"
-msgstr ""
+msgstr "tạo"
 
 msgid "Updated"
-msgstr ""
+msgstr "Cập nhật"
 
 msgid "Deleted"
-msgstr ""
+msgstr "xóa"
 
 msgid "Name"
-msgstr ""
+msgstr "Name"
 
 msgid "ID:"
-msgstr ""
+msgstr "ID:"
 
 msgid "Comment:"
-msgstr ""
+msgstr "Nhận xét:"
 
 msgid "Open/Closed:"
-msgstr ""
+msgstr "Mở / đóng:"
 
 msgid "Created by:"
-msgstr ""
+msgstr "Tạo bởi:"
 
 msgid "Created on:"
-msgstr ""
+msgstr "Created on:"
 
 msgid "Closed on:"
-msgstr ""
+msgstr "đóng vào:"
 
 msgid "Remove the changeset in the detail view panel from the local cache"
 msgstr ""
+"Hủy bỏ các changeset trong bảng điểm chi tiết từ bộ nhớ cache của địa phương"
 
 msgid "Update the changeset from the OSM server"
-msgstr ""
+msgstr "Cập nhật các changeset từ máy chủ OSM"
 
 msgid ""
 "Select the primitives in the content of this changeset in the current data "
 "layer"
 msgstr ""
+"Chọn nguyên thủy trong nội dung của changeset này trong các dữ liệu hiện "
+"tạiLayer"
 
 msgid ""
 "<html>None of the objects in the content of changeset {0} is available in "
 "the current<br>edit layer ''{1}''.</html>"
 msgstr ""
+"<Html> Không ai trong số các đối tượng trong các nội dung của changeset {0} "
+"có sẵn trong<br> Chỉnh sửa layer hiện tại '' {1} ''. </ Html>"
 
 msgid ""
 "Zoom to the objects in the content of this changeset in the current data "
 "layer"
 msgstr ""
+"Phóng to để các đối tượng trong các nội dung của changeset này trong các dữ "
+"liệu hiện tạiLayer"
 
 msgid "Update changeset discussion"
-msgstr ""
+msgstr "thảo luận Cập nhật changeset"
 
 msgid "Update the changeset discussion from the OSM server"
-msgstr ""
+msgstr "Cập nhật các cuộc thảo luận changeset từ máy chủ OSM"
 
 msgid "Date"
-msgstr ""
+msgstr "Ngày"
 
 msgid "Download changesets"
-msgstr ""
+msgstr "Tải changesets"
 
 msgid "{0} [incomplete]"
-msgstr ""
+msgstr "{0} [không đầy đủ]"
 
 msgid "open"
-msgstr ""
+msgstr "mở"
 
 msgid "closed"
-msgstr ""
+msgstr "đóng cửa"
 
 msgid "Changeset ID: "
-msgstr ""
+msgstr "changeset ID: "
 
 msgid "Enter a changeset id"
-msgstr ""
+msgstr "Nhập một changeset id"
 
 msgid ""
 "Download the changeset with the specified id, including the changeset content"
-msgstr ""
+msgstr "Tải changeset với id cụ thể, bao gồm các nội dung changeset"
 
 msgid "Select changesets owned by specific users"
-msgstr ""
+msgstr "Chọn changesets thuộc sở hữu của người sử dụng cụ thể"
 
 msgid "Select changesets depending on whether they are open or closed"
-msgstr ""
+msgstr "Chọn changesets tùy thuộc vào việc họ đang mở hoặc đóng cửa"
 
 msgid ""
 "Select changesets based on the date/time they have been created or closed"
 msgstr ""
+"Chọn changesets dựa trên ngày tháng / thời gian họ đã được tạo ra hoặc đóng "
+"cửa"
 
 msgid "Select only changesets related to a specific bounding box"
-msgstr ""
+msgstr "Chỉ chọn changesets liên quan đến một hộp bounding cụ thể"
 
 msgid "Query open changesets only"
-msgstr ""
+msgstr "Query changesets mở"
 
 msgid "Query closed changesets only"
-msgstr ""
+msgstr "Query đóng changesets chỉ"
 
 msgid "Query both open and closed changesets"
-msgstr ""
+msgstr "Query cả hai mở và đóng cửa changesets"
 
 msgid "User ID:"
-msgstr ""
+msgstr "User ID:"
 
 msgid "User name:"
-msgstr ""
+msgstr "Tên người dùng:"
 
 msgid "Only changesets owned by myself"
-msgstr ""
+msgstr "Chỉ changesets thuộc sở hữu của bản thân mình"
 
 msgid "Only changesets owned by the user with the following user ID"
 msgstr ""
+"Chỉ changesets thuộc sở hữu của người sử dụng với các ID người dùng sau"
 
 msgid "Only changesets owned by the user with the following user name"
-msgstr ""
+msgstr "Chỉ changesets thuộc sở hữu của người dùng với tên người dùng sau"
 
 msgid ""
 "Only changesets owned by myself (disabled. JOSM is currently run by an "
 "anonymous user)"
 msgstr ""
+"Chỉ changesets thuộc sở hữu của mình (disabled JOSM. Hiện đang điều hành bởi "
+"mộtNgười dùng ẩn danh)"
 
 msgid ""
 "Cannot restrict changeset query to the current user because the current user "
 "is anonymous"
 msgstr ""
+"Không thể hạn chế truy vấn changeset cho người sử dụng hiện nay bởi vì người "
+"dùng hiện tạiVô danh"
 
 msgid "Current value ''{0}'' for user ID is not valid"
-msgstr ""
+msgstr "giá trị hiện tại '' {0} '' cho người dùng ID không hợp lệ"
 
 msgid "Cannot restrict the changeset query to the user name ''{0}''"
 msgstr ""
+"Không thể hạn chế các truy vấn changeset với tên người dùng '' {0} ''"
 
 msgid "Please enter a valid user ID"
-msgstr ""
+msgstr "Hãy nhập một ID người dùng hợp lệ"
 
 msgid "Invalid user ID"
-msgstr ""
+msgstr "ID người dùng không hợp lệ"
 
 msgid "Please enter a non-empty user name"
-msgstr ""
+msgstr "Hãy nhập tên người dùng không trống"
 
 msgid "Invalid user name"
-msgstr ""
+msgstr "Tên người dùng không hợp lệ"
 
 msgid "Date: "
-msgstr ""
+msgstr "Ngày "
 
 msgid "Time:"
-msgstr ""
+msgstr "Thời gian:"
 
 msgid "Closed after - "
-msgstr ""
+msgstr "đóng sau - "
 
 msgid "Date:"
-msgstr ""
+msgstr "Ngày"
 
 msgid "Created before - "
-msgstr ""
+msgstr "tạo trước - "
 
 msgid "Only changesets closed after the following date/time"
-msgstr ""
+msgstr "Chỉ changesets đóng sau khi sau ngày / thời gian"
 
 msgid "Only changesets closed after and created before a specific date/time"
 msgstr ""
+"Chỉ changesets đóng cửa sau và tạo ra trước một ngày cụ thể / thời gian"
 
 msgid ""
 "Cannot build changeset query with time based restrictions. Input is not "
 "valid."
 msgstr ""
+"Không thể xây dựng truy vấn changeset với những hạn chế dựa trên thời gian. "
+"Input không phải làHợp lệ"
 
 msgid ""
 "<html>Please enter valid date/time values to restrict<br>the query to a "
 "specific time range.</html>"
 msgstr ""
+"<Html> Vui lòng nhập các giá trị ngày / thời gian hợp lệ để hạn chế <br> "
+"truy vấn đến mộtPhạm vi thời gian cụ thể. </ Html>"
 
 msgid "Invalid date/time values"
-msgstr ""
+msgstr "Ngày không hợp lệ / lần giá trị"
 
 msgid ""
 "Cannot restrict the changeset query to a specific bounding box. The input is "
 "invalid."
 msgstr ""
+"Không thể hạn chế các truy vấn changeset để một hộp bounding cụ thể. Các đầu "
+"vào làKhông hợp lệ"
 
 msgid ""
 "<html>Please enter valid longitude/latitude values to restrict<br>the "
 "changeset query to a specific bounding box.</html>"
 msgstr ""
+"<Html> Vui lòng nhập kinh độ / vĩ độ giá trị hợp lệ để hạn chế các <br>Query "
+"changeset để một hộp bounding cụ thể. </ Html>"
 
 msgid "Invalid bounding box"
-msgstr ""
+msgstr "hộp bounding không hợp lệ"
 
 msgid ""
 "The current value is not a valid user ID. Please enter an integer value > 0"
 msgstr ""
+"Giá trị hiện tại không phải là một ID người dùng hợp lệ. Vui lòng nhập một "
+"giá trị số nguyên> 0"
 
 msgid "Please enter an integer value > 0"
-msgstr ""
+msgstr "Hãy nhập một giá trị số nguyên> 0"
 
 msgid ""
 "<html>The  current value is not a valid user name.<br>Please enter an non-"
 "empty user name.</html>"
 msgstr ""
+"<Html> Giá trị hiện tại không phải là một tên người dùng hợp lệ. <br> Vui "
+"lòng nhập một phiTên người dùng sản phẩm nào. </ Html>"
 
 msgid "Please enter an non-empty user name"
-msgstr ""
+msgstr "Hãy nhập tên người dùng không trống"
 
 msgid ""
 "Please enter a date in the usual format for your locale.<br>Example: "
 "{0}<br>Example: {1}<br>Example: {2}<br>Example: {3}<br>"
 msgstr ""
+"Xin vui lòng nhập một ngày trong các định dạng thông thường cho miền địa "
+"phương của bạn <br> Ví dụ:.{0} <br> Ví dụ: {1} <br> Ví dụ: {2} <br> Ví dụ: "
+"{3} <br>"
 
 msgid ""
 "Please enter a valid time in the usual format for your locale.<br>Example: "
 "{0}<br>Example: {1}<br>Example: {2}<br>Example: {3}<br>"
 msgstr ""
+"Xin vui lòng nhập một thời gian hợp lệ trong các định dạng thông thường cho "
+"miền địa phương của bạn <br> Ví dụ:.{0} <br> Ví dụ: {1} <br> Ví dụ: {2} <br> "
+"Ví dụ: {3} <br>"
 
 msgid "Download my changesets only"
-msgstr ""
+msgstr "Tải changesets tôi chỉ"
 
 msgid ""
 "<html>Select to restrict the query to your changesets only.<br>Unselect to "
 "include all changesets in the query.</html>"
 msgstr ""
+"<Html> Chọn để hạn chế các truy vấn để chỉ changesets của mình. <br> Bỏ chọn "
+"đểBao gồm tất cả các changesets trong truy vấn. </ Html>"
 
 msgid ""
 "<html>Please select one the following <strong>standard "
@@ -6675,868 +7271,948 @@ msgid ""
 "only want to download changesets created by yourself.<br>Note that JOSM will "
 "download max. 100 changesets.</html>"
 msgstr ""
+"<Html> Xin vui lòng chọn một trong những điều sau đây <strong> chuẩnTruy vấn "
+"</ strong> .Select <strong> Tải changesets tôi chỉ </ strong> nếu bạnChỉ "
+"muốn tải changesets tạo ra bởi chính mình. <br> Lưu ý JOSM rằng sẽTải max. "
+"100 changesets. </ Html>"
 
 msgid "<html>Download the latest changesets</html>"
-msgstr ""
+msgstr "<html> Tải changesets mới nhất </ html>"
 
 msgid ""
 "<html>Download my open changesets<br><em>Disabled. Please enter your OSM "
 "user name in the preferences first.</em></html>"
 msgstr ""
+"<Html> Tải changesets mở của tôi <br> <em> Disabled. Vui lòng nhập OSM của "
+"bạnTên người dùng trong các ưu đãi đầu tiên. </ Em> </ html>"
 
 msgid "<html>Download my open changesets</html>"
-msgstr ""
+msgstr "<html> Tải changesets mở của tôi </ html>"
 
 msgid ""
 "<html>Download changesets in the current map view.<br><em>Disabled. There is "
 "currently no map view active.</em></html>"
 msgstr ""
+"<Html> Tải changesets trong xem bản đồ hiện tại. <br> <Em> Disabled. CóHiện "
+"tại không có xem bản đồ hoạt động. </ Em> </ html>"
 
 msgid "<html>Download changesets in the current map view</html>"
-msgstr ""
+msgstr "<html> Tải changesets trong xem bản đồ hiện tại </ html>"
 
 msgid ""
 "Unexpected value for preference ''{0}'', got ''{1}''. Resetting to default "
 "query."
 msgstr ""
+"Giá trị bất ngờ cho sở thích '' {0} '', đã '' {1} ''. Reset để mặc địnhTruy "
+"vấn"
 
 msgid "Cannot create changeset query for open changesets of anonymous user"
 msgstr ""
+"Không thể tạo truy vấn changeset cho changesets mở của người dùng vô danh"
 
 msgid "Basic"
-msgstr ""
+msgstr "cơ bản"
 
 msgid "Download changesets using predefined queries"
-msgstr ""
+msgstr "Tải changesets sử dụng các truy vấn được xác định trước"
 
 msgid "From URL"
-msgstr ""
+msgstr "Từ URL"
 
 msgid "Query changesets from a server URL"
-msgstr ""
+msgstr "changesets Truy vấn từ một URL server"
 
 msgid "Advanced"
-msgstr ""
+msgstr "Advanced"
 
 msgid "Use a custom changeset query"
-msgstr ""
+msgstr "Sử dụng một truy vấn tùy chỉnh changeset"
 
 msgid "Query changesets"
-msgstr ""
+msgstr "changesets Query"
 
 msgid "Query and download changesets"
-msgstr ""
+msgstr "Truy vấn và tải changesets"
 
 msgid "Please enter a valid changeset query URL first."
-msgstr ""
+msgstr "Hãy nhập một truy vấn URL changeset hợp lệ đầu tiên."
 
 msgid "Illegal changeset query URL"
-msgstr ""
+msgstr "URL truy vấn changeset bất hợp pháp"
 
 msgid "Close the dialog and abort querying of changesets"
-msgstr ""
+msgstr "Đóng hộp thoại và hủy bỏ việc truy vấn của changesets"
 
 msgid "Querying and downloading changesets"
-msgstr ""
+msgstr "Truy vấn và tải changesets"
 
 msgid "Determine user id for current user..."
-msgstr ""
+msgstr "Xác định người sử dụng id cho người dùng hiện tại ..."
 
 msgid "Query and download changesets ..."
-msgstr ""
+msgstr "Truy vấn và tải changesets ..."
 
 msgid "URL: "
-msgstr ""
+msgstr "URL: "
 
 msgid "Please enter or paste an URL to retrieve changesets from the OSM API."
-msgstr ""
+msgstr "Hãy nhập hoặc dán một URL để lấy changesets từ API OSM."
 
 msgid "Examples"
-msgstr ""
+msgstr "ví dụ"
 
 msgid ""
 "Note that changeset queries are currently always submitted to ''{0}'', "
 "regardless of the host, port and path of the URL entered below."
 msgstr ""
+"Lưu ý rằng các truy vấn changeset đang luôn luôn trình '' {0} '',Bất kể các "
+"máy chủ, cổng và đường dẫn của URL nhập dưới đây."
 
 msgid "This changeset query URL is invalid"
-msgstr ""
+msgstr "URL truy vấn changeset này là không hợp lệ"
 
 msgid "Discardable key: selection Foreground"
-msgstr ""
+msgstr "key discardable: lựa chọn Foreground"
 
 msgid "Discardable key: selection Background"
-msgstr ""
+msgstr "discardable chính: lựa chọn Background"
 
 msgid "Discardable key: foreground"
-msgstr ""
+msgstr "key discardable: foreground"
 
 msgid "Discardable key: background"
-msgstr ""
+msgstr "key discardable: background"
 
 msgid "{0} ''{1}''"
-msgstr ""
+msgstr "{0} '' {1} ''"
 
 msgid "{0} different"
 msgid_plural "{0} different"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} khác nhau"
 
 msgid ", {0} unset"
 msgid_plural ", {0} unset"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] ", {0} unset"
 
 msgid "Select objects for which to change tags."
-msgstr ""
+msgstr "Chọn các đối tượng mà thay đổi thẻ."
 
 msgid "Tags/Memberships"
-msgstr ""
+msgstr "Tags / Thành Viên"
 
 msgid "Tags for selected objects."
-msgstr ""
+msgstr "Thẻ cho đối tượng được chọn."
 
 msgid "Member Of"
-msgstr ""
+msgstr "Member Of"
 
 msgid "Position"
-msgstr ""
+msgstr "Vị trí"
 
 msgid "<different>"
-msgstr ""
+msgstr "<khác nhau>"
 
 msgid "Objects: {2} / Tags: {0} / Memberships: {1}"
-msgstr ""
+msgstr "Đối tượng: {2} / Tags: {0} / Thành viên: {1}"
 
 msgid "Tags: {0} / Memberships: {1}"
-msgstr ""
+msgstr "Tags: {0} / Thành viên: {1}"
 
 msgid "Tags / Memberships"
-msgstr ""
+msgstr "Tags / Thành Viên"
 
 msgid "Delete the selected key in all objects"
-msgstr ""
+msgstr "Xóa phím chọn trong tất cả các đối tượng"
 
 msgid "Delete Tags"
-msgstr ""
+msgstr "Xóa Tags"
 
 msgid "Change relation"
-msgstr ""
+msgstr "Thay đổi quan hệ"
 
 msgid "Delete from relation"
-msgstr "Xóa"
+msgstr "Xóa từ mối quan hệ"
 
 msgid "Really delete selection from relation {0}?"
-msgstr ""
+msgstr "Really xóa lựa chọn từ mối quan hệ {0}?"
 
 msgid "Add a new key/value pair to all objects"
-msgstr ""
+msgstr "Thêm một cặp khóa / giá trị mới cho tất cả các đối tượng"
 
 msgid "Add Tag"
-msgstr ""
+msgstr "Thêm Tag"
 
 msgid "Edit the value of the selected key for all objects"
-msgstr ""
+msgstr "Chỉnh sửa các giá trị của khóa chọn cho tất cả các đối tượng"
 
 msgid "Edit Tags"
-msgstr ""
+msgstr "Edit Tags"
 
 msgid "Go to OSM wiki for tag help (F1)"
-msgstr ""
+msgstr "Tới OSM wiki cho tag giúp (F1)"
 
 msgid "Launch browser with wiki help for selected object"
+msgstr "trình duyệt Launch với wiki trợ giúp cho đối tượng được chọn"
+
+msgid "Go to Taginfo"
 msgstr ""
 
-msgid "Paste Value"
+msgid "Launch browser with Taginfo statistics for selected object"
 msgstr ""
 
+msgid "Paste Value"
+msgstr "Paste Value"
+
 msgid "Paste the value of the selected tag from clipboard"
-msgstr ""
+msgstr "Dán giá trị của thẻ được lựa chọn từ clipboard"
 
 msgid "Copy Value"
-msgstr ""
+msgstr "Copy Value"
 
 msgid "Copy the value of the selected tag to clipboard"
-msgstr ""
+msgstr "Sao chép giá trị của thẻ được chọn ra clipboard"
 
 msgid "Copy selected Key(s)/Value(s)"
-msgstr ""
+msgstr "Sao chép chọn Key (s) / Giá trị (s)"
 
 msgid "Copy the key and value of the selected tag(s) to clipboard"
 msgstr ""
+"Sao chép chìa khóa và giá trị của thẻ được lựa chọn (s) vào clipboard"
 
 msgid "Copy all Keys/Values"
-msgstr ""
+msgstr "Sao chép tất cả các phím / giá trị"
 
 msgid "Copy the key and value of all the tags to clipboard"
-msgstr ""
+msgstr "Sao chép chìa khóa và giá trị của tất cả các thẻ vào clipboard"
 
 msgid "Search Key/Value/Type"
-msgstr ""
+msgstr "Tìm kiếm Key / Value / Type"
 
 msgid ""
 "Search with the key and value of the selected tag, restrict to type (i.e., "
 "node/way/relation)"
 msgstr ""
+"Tìm kiếm với chìa khóa và giá trị của thẻ được lựa chọn, hạn chế nhập (ví "
+"dụ,Node / chiều / liên quan)"
 
 msgid "Search Key/Value"
-msgstr ""
+msgstr "Tìm kiếm Key / Value"
 
 msgid "Search with the key and value of the selected tag"
-msgstr ""
+msgstr "Tìm kiếm với chìa khóa và giá trị của thẻ được chọn"
 
 msgid "Overwrite key"
-msgstr ""
+msgstr "key Overwrite"
 
 msgid "Replace"
-msgstr ""
+msgstr "Thay thế"
 
 msgid "The new key is already used, overwrite values?"
-msgstr ""
+msgstr "Chìa khóa mới đã được sử dụng, giá trị ghi đè lên?"
 
 msgid "Change value?"
 msgid_plural "Change values?"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Thay đổi giá trị?"
 
 msgid "This will change {0} object."
 msgid_plural "This will change up to {0} objects."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Điều này sẽ thay đổi {0} đối tượng."
 
 msgid "An empty value deletes the tag."
-msgstr ""
+msgstr "Một giá trị rỗng xóa thẻ."
 
 msgid "You changed the key from ''{0}'' to ''{1}''."
-msgstr ""
+msgstr "Bạn đã thay đổi quan trọng từ '' {0} '' để '' {1} ''."
 
 msgid "Change properties of up to {0} object"
 msgid_plural "Change properties of up to {0} objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Thay đổi các thuộc tính lên đến {0} đối tượng"
 
 msgid "Use English language for tag by default"
-msgstr ""
+msgstr "Sử dụng ngôn ngữ tiếng Anh cho tag mặc định"
 
 msgid "Add value?"
-msgstr ""
+msgstr "Thêm giá trị?"
 
 msgid "This will change up to {0} object."
 msgid_plural "This will change up to {0} objects."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Điều này sẽ thay đổi lên đến {0} đối tượng."
 
 msgid "Please select a key"
-msgstr ""
+msgstr "Hãy chọn một phím"
 
 msgid "Please select a value"
-msgstr ""
+msgstr "Hãy chọn một giá trị"
 
 msgid "Set number of recently added tags"
-msgstr ""
+msgstr "Thiết lập số lượng thẻ được thêm gần đây"
 
 msgid "Remember last used tags after a restart"
-msgstr ""
+msgstr "Ghi thẻ cuối cùng sử dụng sau khi khởi động lại"
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
-msgstr ""
+msgstr "Vui lòng nhập số lượng thẻ được thêm gần đây để hiển thị"
 
 msgid "Please enter integer number between 0 and {0}"
-msgstr ""
+msgstr "Hãy nhập số nguyên giữa 0 và {0}"
 
 msgid "Recently added tags"
-msgstr ""
+msgstr "thẻ đã thêm gần đây"
 
 msgid "Choose recent tag {0}"
-msgstr ""
+msgstr "Chọn thẻ gần đây {0}"
 
 msgid "Use this tag again"
-msgstr ""
+msgstr "Sử dụng thẻ này một lần nữa"
 
 msgid "Apply recent tag {0}"
-msgstr ""
+msgstr "Áp dụng thẻ gần đây {0}"
 
 msgid "The key ''{0}'' is already used"
-msgstr ""
+msgstr "Chìa khóa '' {0} '' đã được sử dụng"
 
 msgid "You changed the value of ''{0}'' from ''{1}'' to ''{2}''."
-msgstr ""
+msgstr "Bạn thay đổi giá trị của '' {0} '' từ '' {1} '' để '' {2} ''."
 
 msgid "Edit the relation the currently selected relation member refers to."
 msgstr ""
+"Chỉnh sửa các mối quan hệ các thành viên liên quan hiện đang được chọn đề "
+"cập đến."
 
 msgid "Download all child relations (recursively)"
-msgstr ""
+msgstr "Tải về tất cả các mối quan hệ con (đệ quy)"
 
 msgid "Download All Children"
-msgstr ""
+msgstr "Tải về Tất cả trẻ em"
 
 msgid "Download selected relations"
-msgstr ""
+msgstr "Tải chọn quan hệ"
 
 msgid "Download Selected Children"
-msgstr ""
+msgstr "Download Selected Children"
 
 msgid "Conflict in data"
 msgid_plural "Conflicts in data"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Xung đột trong dữ liệu"
 
 msgid "Download relation members"
-msgstr ""
+msgstr "thành viên Tải về mối quan hệ"
 
 msgid ""
 "<html>The child relation<br>{0}<br>is deleted on the server. It cannot be "
 "loaded</html>"
 msgstr ""
+"<Html> Mối quan hệ con <br> {0} <br> được xóa trên máy chủ. Nó có thể không "
+"đượcNạp </ html>"
 
 msgid "Relation is deleted"
-msgstr ""
+msgstr "Mối quan hệ này sẽ bị xóa"
 
 msgid "Downloading relation {0}"
-msgstr ""
+msgstr "Tải mối quan hệ {0}"
 
 msgid "Ignoring exception because task was canceled. Exception: {0}"
-msgstr ""
+msgstr "Exception Bỏ qua ngoại lệ bởi vì nhiệm vụ đã bị hủy bỏ. {0}"
 
 msgid "Downloading {0} incomplete object"
 msgid_plural "Downloading {0} incomplete objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Tải {0} không đầy đủ đối tượng"
 
 msgid "Downloading {0} incomplete child of relation ''{1}''"
 msgid_plural "Downloading {0} incomplete children of relation ''{1}''"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Tải {0} con chưa đầy đủ về mối quan hệ '' {1} ''"
 
 msgid "Downloading {0} incomplete child of {1} parent relations"
 msgid_plural "Downloading {0} incomplete children of {1} parent relations"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Tải {0} con chưa đầy đủ của {1} quan hệ cha mẹ"
 
 msgid "Download relations"
-msgstr ""
+msgstr "Tải về mối quan hệ"
 
 msgid "({0}/{1}): Downloading relation ''{2}''..."
-msgstr ""
+msgstr "({0} / {1}): Tải về mối quan hệ '' {2} '' ..."
 
 msgid "Tags and Members"
-msgstr ""
+msgstr "Tags và thành viên"
 
 msgid "Parent Relations"
-msgstr ""
+msgstr "Quan hệ phụ huynh"
 
 msgid "Child Relations"
-msgstr ""
+msgstr "Quan hệ trẻ"
 
 msgid "Apply Role:"
-msgstr ""
+msgstr "Áp dụng Vai trò:"
 
 msgid "Enter a role and apply it to the selected relation members"
 msgstr ""
+"Nhập vai trò và áp dụng nó cho các thành viên liên quan được lựa chọn"
 
 msgid "New Relation"
-msgstr ""
+msgstr "Mối quan hệ mới"
 
 msgid "Focus Relation Editor with relation ''{0}'' in layer ''{1}''"
 msgstr ""
+"Tập trung Relation biên soạn với các mối quan hệ '' {0} '' trong lớp '' {1} "
+"''"
 
 msgid "Relation Editor: {0}"
-msgstr ""
+msgstr "Quan hệ Editor: {0}"
 
 msgid ""
 "<html>There is at least one member in this relation referring<br>to the "
 "relation itself.<br>This creates circular dependencies and is "
 "discouraged.<br>How do you want to proceed with circular dependencies?</html>"
 msgstr ""
+"<Html> Có ít nhất một thành viên trong mối quan hệ này đề cập <br> đếnMối "
+"quan hệ riêng của mình. <br> Điều này tạo ra phụ thuộc vòng tròn và làNản. "
+"<br> Làm thế nào để bạn muốn tiếp tục phụ thuộc vòng tròn? </ Html>"
 
 msgid "Remove them, clean up relation"
-msgstr ""
+msgstr "Gỡ bỏ chúng, làm sạch hệ"
 
 msgid "Ignore them, leave relation as is"
-msgstr ""
+msgstr "Bỏ qua chúng, để lại mối quan hệ như là"
 
 msgid "Sorry, shortcut \"{0}\" can not be enabled in Relation editor dialog"
 msgstr ""
+"Xin lỗi, tắt \" {0} \"không thể được kích hoạt trong hộp thoại biên tập viên "
+"Quan hệ"
 
 msgid ""
 "<html>This relation already has one or more members referring to<br>the "
 "object ''{0}''<br><br>Do you really want to add another relation "
 "member?</html>"
 msgstr ""
+"<Html> Mối quan hệ này đã có một hoặc nhiều thành viên đề cập đến <br> sựĐối "
+"tượng '' {0} '' <br> Bạn có thực sự muốn thêm mối quan hệ khácThành viên? </ "
+"Html>"
 
 msgid "Multiple members referring to same object."
-msgstr ""
+msgstr "Nhiều thành viên đề cập đến cùng một đối tượng."
 
 msgid ""
 "<html>You are trying to add a relation to itself.<br><br>This creates "
 "circular references and is therefore discouraged.<br>Skipping relation "
 "''{0}''.</html>"
 msgstr ""
+"<Html> Bạn đang cố gắng để thêm một mối quan hệ với chính nó. <br> Điều này "
+"tạo raTài liệu tham khảo thông tư và do đó không được khuyến khích. <br> "
+"Quan hệ Bỏ qua'' {0} ''. </ Html>"
 
 msgid ""
 "Add all objects selected in the current dataset before the first member"
 msgstr ""
+"Thêm tất cả các đối tượng được lựa chọn trong các tập dữ liệu hiện hành "
+"trước khi các thành viên đầu tiên"
 
 msgid ""
 "Add all objects selected in the current dataset before the first selected "
 "member"
 msgstr ""
+"Thêm tất cả các đối tượng được lựa chọn trong các tập dữ liệu hiện hành "
+"trước khi lựa chọn đầu tiênThành viên"
 
 msgid ""
 "Add all objects selected in the current dataset after the last selected "
 "member"
 msgstr ""
+"Thêm tất cả các đối tượng được lựa chọn trong các số liệu hiện tại sau khi "
+"được lựa chọn cuối cùngThành viên"
 
 msgid "Remove all members referring to one of the selected objects"
 msgstr ""
+"Hủy bỏ tất cả các thành viên đề cập đến một trong những đối tượng được chọn"
 
 msgid ""
 "Select relation members which refer to objects in the current selection"
 msgstr ""
+"Chọn các thành viên liên quan trong đó đề cập đến các đối tượng trong các "
+"lựa chọn hiện tại"
 
 msgid ""
 "Select relation members which refer to {0} objects in the current selection"
 msgstr ""
+"Chọn các thành viên liên quan mà tham khảo {0} các đối tượng trong các lựa "
+"chọn hiện tại"
 
 msgid "Select objects for selected relation members"
-msgstr ""
+msgstr "Chọn các đối tượng cho các thành viên liên quan được lựa chọn"
 
 msgid "Sort the relation members"
-msgstr ""
+msgstr "Sắp xếp các thành viên liên quan"
 
 msgid "Relation Editor: Sort"
+msgstr "Quan hệ Editor: Phân loại"
+
+msgid "Sort below"
 msgstr ""
 
-msgid "Reverse the order of the relation members"
+msgid "Sort the selected relation members and all members below"
 msgstr ""
 
+msgid "Reverse the order of the relation members"
+msgstr "Đảo ngược thứ tự của các thành viên liên quan"
+
 msgid "Reverse"
-msgstr ""
+msgstr "Đảo ngược"
 
 msgid "Move the currently selected members up"
-msgstr ""
+msgstr "Di chuyển các thành viên hiện đang được chọn lên"
 
 msgid "Relation Editor: Move Up"
-msgstr ""
+msgstr "Quan hệ Editor: Move Up"
 
 msgid "Move the currently selected members down"
-msgstr ""
+msgstr "Di chuyển các thành viên hiện đang được chọn xuống"
 
 msgid "Relation Editor: Move Down"
-msgstr ""
+msgstr "Quan hệ Editor: Move Down"
 
 msgid "Remove the currently selected members from this relation"
-msgstr ""
+msgstr "Hủy bỏ các thành viên hiện đang được chọn từ mối quan hệ này"
 
 msgid "Relation Editor: Remove"
-msgstr ""
+msgstr "Quan hệ Editor: Hủy bỏ"
 
 msgid "Delete the currently edited relation"
-msgstr ""
+msgstr "Xóa các mối quan hệ hiện sửa"
 
 msgid ""
 "One or more members of this new relation have been deleted while the "
 "relation editor\n"
 "was open. They have been removed from the relation members list."
 msgstr ""
+"Một hoặc nhiều thành viên của mối quan hệ mới này đã bị xóa trong khiQuan hệ "
+"biên tập \n"
+"Đã được mở. Chúng đã bị xóa khỏi danh sách thành viên liên quan."
 
 msgid "Yes, create a conflict and close"
-msgstr ""
+msgstr "Có, tạo ra một cuộc xung đột và gần gũi"
 
 msgid "Click to create a conflict and close this relation editor"
 msgstr ""
+"Nhấn vào đây để tạo ra một cuộc xung đột và đóng trình soạn thảo mối quan hệ "
+"này"
 
 msgid "No, continue editing"
-msgstr ""
+msgstr "Không, tiếp tục chỉnh sửa"
 
 msgid "Click to return to the relation editor and to resume relation editing"
 msgstr ""
+"Nhấn vào đây để trở về soạn thảo liên quan và tiếp tục chỉnh sửa liên quan"
 
 msgid ""
 "<html>This relation has been changed outside of the editor.<br>You cannot "
 "apply your changes and continue editing.<br><br>Do you want to create a "
 "conflict and close the editor?</html>"
 msgstr ""
+"<Html> Mối quan hệ này đã được thay đổi bên ngoài của các biên tập viên. "
+"<br> Bạn không thểÁp dụng các thay đổi của bạn và tiếp tục chỉnh sửa. <br> "
+"Bạn có muốn tạo ra mộtXung đột và đóng trình soạn thảo? </ Html>"
 
 msgid ""
 "<html>Layer ''{0}'' already has a conflict for object<br>''{1}''.<br>Please "
 "resolve this conflict first, then try again.</html>"
 msgstr ""
+"<Html> layer '' {0} '' đã có một cuộc xung đột với đối tượng <br> '' {1} ''. "
+"<br> HãyGiải quyết cuộc xung đột này đầu tiên, sau đó thử lại. </ Html>"
 
 msgid "Apply the current updates"
-msgstr ""
+msgstr "Áp dụng các bản cập nhật hiện nay"
 
 msgid "Apply the updates and close the dialog"
-msgstr ""
+msgstr "Áp dụng các bản cập nhật và đóng hộp thoại"
 
 msgid "Cancel the updates and close the dialog"
-msgstr ""
+msgstr "Hủy bỏ các bản cập nhật và đóng hộp thoại"
 
 msgid "Yes, save the changes and close"
-msgstr ""
+msgstr "Có, lưu các thay đổi và đóng cửa"
 
 msgid "Click to save the changes and close this relation editor"
 msgstr ""
+"Nhấn vào đây để lưu các thay đổi và đóng trình soạn thảo mối quan hệ này"
 
 msgid "No, discard the changes and close"
-msgstr ""
+msgstr "Không, loại bỏ những thay đổi và gần gũi"
 
 msgid "Click to discard the changes and close this relation editor"
 msgstr ""
+"Nhấn vào đây để loại bỏ các thay đổi và đóng trình soạn thảo mối quan hệ này"
 
 msgid "Cancel, continue editing"
-msgstr ""
+msgstr "Hủy bỏ, tiếp tục chỉnh sửa"
 
 msgid ""
 "<html>The relation has been changed.<br><br>Do you want to save your "
 "changes?</html>"
 msgstr ""
+"<Html> Các mối quan hệ đã được thay đổi. <br> Bạn có muốn tiết kiệm của "
+"bạnThay đổi? </ Html>"
 
 msgid "Unsaved changes"
-msgstr ""
+msgstr "thay đổi chưa được lưu"
 
 msgid "Add an empty tag"
-msgstr ""
+msgstr "Thêm một thẻ trống"
 
 msgid "Download all incomplete members"
-msgstr ""
+msgstr "Tải về tất cả các thành viên không đầy đủ"
 
 msgid "Download Members"
-msgstr ""
+msgstr "Tải viên"
 
 msgid "Relation Editor: Download Members"
-msgstr ""
+msgstr "Quan hệ Editor: Tải viên"
 
 msgid "Download selected incomplete members"
-msgstr ""
+msgstr "Tải về lựa chọn các thành viên không đầy đủ"
 
 msgid "Sets a role for the selected members"
-msgstr ""
+msgstr "Thiết lập một vai trò cho các thành viên được lựa chọn"
 
 msgid "Apply Role"
-msgstr ""
+msgstr "Áp dụng Vai trò"
 
 msgid "You are setting an empty role on {0} object."
 msgid_plural "You are setting an empty role on {0} objects."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Bạn đang thiết lập một vai trò trống trên {0} đối tượng."
 
 msgid "This is equal to deleting the roles of these objects."
-msgstr ""
+msgstr "Đây là bằng cách xóa các vai trò của các đối tượng này."
 
 msgid "Do you really want to apply the new role?"
-msgstr ""
+msgstr "Bạn có thực sự muốn áp dụng các vai trò mới?"
 
 msgid "Yes, apply it"
-msgstr ""
+msgstr "Có, áp dụng nó"
 
 msgid "No, do not apply"
-msgstr ""
+msgstr "Không, không áp dụng"
 
 msgid "Confirm empty role"
-msgstr ""
+msgstr "Xác nhận vai trò trống rỗng"
 
 msgid "Edit the relation the currently selected relation member refers to"
 msgstr ""
+"Chỉnh sửa các mối quan hệ các thành viên liên quan hiện đang được chọn dùng "
+"để chỉ"
 
 msgid ""
 "Members from paste buffer cannot be added because they are not included in "
 "current layer"
 msgstr ""
+"Thành viên từ dán đệm không thể được thêm vào bởi vì họ không được bao gồm "
+"trongLayer hiện tại"
 
 msgid "Select previous Gap"
-msgstr ""
+msgstr "Chọn Gap trước"
 
 msgid "Select the previous relation member which gives rise to a gap"
-msgstr ""
+msgstr "Chọn các thành viên liên quan trước đó đưa đến một khoảng cách"
 
 msgid "Select next Gap"
-msgstr ""
+msgstr "Chọn Gap tiếp theo"
 
 msgid "Select the next relation member which gives rise to a gap"
-msgstr ""
+msgstr "Chọn các thành viên liên quan tiếp theo mà đưa đến một khoảng cách"
 
 msgid "Zoom to Gap"
-msgstr ""
+msgstr "Zoom để Gap"
 
 msgid "Zoom to the gap in the way sequence"
-msgstr ""
+msgstr "Zoom để khoảng cách về trình tự cách"
 
 msgid "Refers to"
-msgstr ""
+msgstr "Đề cập đến"
 
 msgid "Download referring relations"
-msgstr ""
+msgstr "Tải đề cập mối quan hệ"
 
 msgid "There were {0} conflicts during import."
-msgstr ""
+msgstr "Có {0} xung đột trong quá trình nhập khẩu."
 
 msgid "including immediate children of parent relations"
-msgstr ""
+msgstr "bao gồm cả trẻ em ngay lập tức các mối quan hệ cha mẹ"
 
 msgid "Load parent relations"
-msgstr ""
+msgstr "quan hệ tải trọng cha mẹ"
 
 msgid "Reload"
-msgstr "Tải lại"
+msgstr "Reload"
 
 msgid "Loading parent relations"
-msgstr ""
+msgstr "quan hệ tải phụ huynh"
 
 msgid "Edit the currently selected relation"
-msgstr ""
+msgstr "Chỉnh sửa các mối quan hệ đang được chọn"
 
 msgid "Apply Changes"
-msgstr ""
+msgstr "Apply Changes"
 
 msgid "Create new relation in layer ''{0}''"
-msgstr ""
+msgstr "Tạo mối quan hệ mới trong lớp '' {0} ''"
 
 msgid "Edit new relation in layer ''{0}''"
-msgstr ""
+msgstr "Sửa đổi mối quan hệ mới trong lớp '' {0} ''"
 
 msgid "Edit relation #{0} in layer ''{1}''"
-msgstr ""
+msgstr "Edit relation #{0} in layer ''{1}''"
 
 msgid "Load relation"
-msgstr ""
+msgstr "Load mối quan hệ"
 
 msgid "way is connected"
-msgstr ""
+msgstr "cách được kết nối"
 
 msgid "way is connected to previous relation member"
-msgstr ""
+msgstr "cách được kết nối với thành viên liên quan trước đó"
 
 msgid "way is connected to next relation member"
-msgstr ""
+msgstr "cách được kết nối với thành viên liên quan tới"
 
 msgid "way is not connected to previous or next relation member"
-msgstr ""
+msgstr "cách không được kết nối trước hoặc sau viên quan hệ"
 
 msgid "{0} - {1} ({2})"
-msgstr ""
+msgstr "{0} - {1} ({2})"
 
 msgid "Wrong number of arguments for bookmark"
-msgstr ""
+msgstr "Sai số lập luận cho bookmark"
 
 msgid "Error reading bookmark entry: %s"
-msgstr ""
+msgstr "Lỗi đọc entry bookmark:% s"
 
 msgid "Bookmarks"
-msgstr ""
+msgstr "Bookmarks"
 
 msgid "<html>There is currently no download area selected.</html>"
-msgstr ""
+msgstr "<html> Có hiện không có tải về vùng được chọn. </ html>"
 
 msgid ""
 "<html><strong>Current download area</strong> (minlon, minlat, maxlon, "
 "maxlat): </html>"
 msgstr ""
+"<Html> <strong> hiện tại khu vực download </ strong> (minlon, minlat, "
+"maxlon,Maxlat): </ html>"
 
 msgid "Create bookmark"
-msgstr ""
+msgstr "Tạo bookmark"
 
 msgid "Add a bookmark for the currently selected download area"
-msgstr ""
+msgstr "Thêm một bookmark cho khu vực download đang được chọn"
 
 msgid ""
 "Currently, there is no download area selected. Please select an area first."
 msgstr ""
+"Hiện nay, không có tải khu vực được lựa chọn. Hãy chọn một khu vực đầu tiên."
 
 msgid "Please enter a name for the bookmarked download area."
-msgstr ""
+msgstr "Xin hãy nhập tên cho khu vực download đã đánh dấu."
 
 msgid "Name of location"
-msgstr ""
+msgstr "Tên địa điểm"
 
 msgid "Remove the currently selected bookmarks"
-msgstr ""
+msgstr "Hủy bỏ các dấu trang hiện tại được chọn"
 
 msgid "Rename the currently selected bookmark"
-msgstr ""
+msgstr "Đổi tên bookmark hiện đang được chọn"
 
 msgid "min lat"
-msgstr ""
+msgstr "min lat"
 
 msgid "min lon"
-msgstr ""
+msgstr "min lon"
 
 msgid "max lat"
-msgstr ""
+msgstr "max lat"
 
 msgid "max lon"
-msgstr ""
+msgstr "max lon"
 
 msgid "Clear textarea"
-msgstr ""
+msgstr "Clear textarea"
 
 msgid ""
 "URL from www.openstreetmap.org (you can paste an URL here to download the "
 "area)"
 msgstr ""
+"URL từ www.openstreetmap.org (bạn có thể dán một URL vào đây để tải vềKhu "
+"vực)"
 
 msgid "Bounding Box"
-msgstr ""
+msgstr "Bounding Box"
 
 msgid "The string ''{0}'' is not a valid double value."
-msgstr ""
+msgstr "Các chuỗi '' {0} '' không phải là một giá trị gấp đôi giá trị."
 
 msgid "Value for latitude in range [-90,90] required."
-msgstr ""
+msgstr "Giá trị vĩ độ trong khoảng [-90,90] yêu cầu."
 
 msgid "Value for longitude in range [-180,180] required."
-msgstr ""
+msgstr "Giá trị kinh độ trong phạm vi [-180.180] yêu cầu."
 
 msgid "Data Sources and Types:"
-msgstr ""
+msgstr "Nguồn gốc và các loại dữ liệu:"
 
 msgid "OpenStreetMap data"
-msgstr "Dữ liệu của OpenStreetMap"
+msgstr "OpenStreetMap dữ liệu"
 
 msgid "Select to download OSM data in the selected download area."
-msgstr ""
+msgstr "Chọn để tải dữ liệu OSM trong khu vực download được lựa chọn."
 
 msgid "Raw GPS data"
-msgstr "Dữ liệu GPS thô"
+msgstr "Raw GPS dữ liệu"
 
 msgid "Select to download GPS traces in the selected download area."
-msgstr ""
+msgstr "Chọn để tải về dấu vết GPS trong khu vực download được lựa chọn."
 
 msgid "Select to download notes in the selected download area."
-msgstr ""
+msgstr "Chọn để tải về các ghi chú trong khu vực download được lựa chọn."
 
 msgid "Download as new layer"
-msgstr ""
+msgstr "Tải về dưới layer mới"
 
 msgid ""
 "<html>Select to download data into a new data layer.<br>Unselect to download "
 "into the currently active data layer.</html>"
 msgstr ""
+"<Html> Chọn để tải dữ liệu vào một lớp dữ liệu mới. <br> Bỏ chọn để tải "
+"vềVào các lớp dữ liệu đang hoạt động. </ Html>"
 
 msgid "Open this dialog on startup"
-msgstr ""
+msgstr "Mở hộp thoại này khi khởi động"
 
 msgid ""
 "<html>Autostart ''Download from OSM'' dialog every time JOSM is "
 "started.<br>You can open it manually from File menu or toolbar.</html>"
 msgstr ""
+"<Html> Autostart '' Download từ OSM '' hộp thoại mỗi khi JOSM làBắt đầu. "
+"<br> Bạn có thể mở nó bằng tay từ menu File hoặc thanh công cụ. </ Html>"
 
 msgid ""
 "Use left click&drag to select area, arrows or right mouse button to scroll "
 "map, wheel or +/- to zoom."
 msgstr ""
+"Sử dụng trái nhấp chuột và kéo để chọn khu vực, mũi tên hoặc chuột phải để "
+"di chuyểnBản đồ, bánh xe hoặc +/- để phóng to."
 
 msgid "No area selected yet"
-msgstr ""
+msgstr "Không có lựa chọn khu vực nào"
 
 msgid "Download area too large; will probably be rejected by server"
-msgstr ""
+msgstr "Tải về diện tích quá lớn, có thể sẽ bị từ chối bởi máy chủ"
 
 msgid "Download area ok, size probably acceptable to server"
-msgstr ""
+msgstr "Tải khu vực ok, kích thước có thể chấp nhận được đến máy chủ"
 
 msgid "Click to close the dialog and to abort downloading"
-msgstr ""
+msgstr "Nhấn vào đây để đóng hộp thoại và hủy bỏ tải"
 
 msgid "Click to download the currently selected area"
-msgstr ""
+msgstr "Nhấn vào đây để tải về các khu vực hiện đang được chọn"
 
 msgid "Please select a download area first."
-msgstr ""
+msgstr "Hãy chọn một khu vực tải về đầu tiên."
 
 msgid ""
 "<html>Neither <strong>{0}</strong> nor <strong>{1}</strong> nor "
 "<strong>{2}</strong> is enabled.<br>Please choose to either download OSM "
 "data, or GPX data, or Notes, or all.</html>"
 msgstr ""
+"<Html> Không <strong> {0} </ strong> cũng <strong> {1} </ strong> cũng "
+"không<Strong> {2} </ strong> được kích hoạt. <br> Vui lòng chọn hoặc tải "
+"OSMDữ liệu, hoặc dữ liệu GPX, hoặc Notes, hoặc tất cả. </ Html>"
 
 msgid "Download referrers (parent relations)"
-msgstr ""
+msgstr "Tải referrers (quan hệ cha mẹ)"
 
 msgid "Download object"
 msgstr "Tải về đối tượng"
 
 msgid "Start downloading"
-msgstr "Bắt đầu tải về"
+msgstr "Bắt đầu tải"
 
 msgid ""
 "Select if the referrers of the object should be downloaded as well, "
 "i.e.,parent relations and for nodes, additionally, parent ways"
 msgstr ""
+"Chọn nếu các liên kết dẫn đến các đối tượng cần được tải về là tốt,Tức là, "
+"quan hệ cha mẹ và cho các nút, thêm vào đó, cách cha mẹ"
 
 msgid "Select if the members of a relation should be downloaded as well"
-msgstr ""
+msgstr "Chọn nếu các thành viên của một mối quan hệ cần được tải về là tốt"
 
 msgid "Download referrers (parent relations and ways)"
-msgstr ""
+msgstr "Tải referrers (quan hệ cha mẹ và cách)"
 
 msgid "Class Type"
-msgstr ""
+msgstr "Class Type"
 
 msgid "Bounds"
-msgstr ""
+msgstr "Bounds"
 
 msgid "Choose the server for searching:"
-msgstr ""
+msgstr "Chọn máy chủ để tìm kiếm:"
 
 msgid "Enter a place name to search for:"
-msgstr ""
+msgstr "Nhập tên địa điểm để tìm kiếm cho:"
 
 msgid "Enter a place name to search for"
-msgstr ""
+msgstr "Nhập tên địa điểm để tìm kiếm"
 
 msgid "Areas around places"
-msgstr ""
+msgstr "Khu vực xung quanh nơi"
 
 msgid "Null pointer exception, possibly some missing tags."
-msgstr ""
+msgstr "Null pointer ngoại lệ, có thể một số thẻ mất tích."
 
 msgid "Search ..."
-msgstr ""
+msgstr "Tìm kiếm ..."
 
 msgid "Click to start searching for places"
-msgstr ""
+msgstr "Nhấn vào đây để bắt đầu tìm kiếm những nơi"
 
 msgid "Querying name server"
-msgstr ""
+msgstr "Truy vấn máy chủ tên"
 
 msgid "Querying name server ..."
-msgstr ""
+msgstr "Truy vấn tên máy chủ ..."
 
 msgid "Error occured with query ''{0}'': ''{1}''"
-msgstr ""
+msgstr "Lỗi xảy ra với truy vấn '' {0} '': '' {1} ''"
 
 msgid "Name server returned invalid data. Please try again."
-msgstr ""
+msgstr "Tên máy chủ trả lại dữ liệu không hợp lệ. Vui lòng thử lại."
 
 msgid "Bad response"
-msgstr ""
+msgstr "Phản hồi"
 
 msgid "Type"
-msgstr ""
+msgstr "Type"
 
 msgid "Slippy map"
-msgstr ""
+msgstr "đồ lật đật"
 
 msgid "Tile Numbers"
-msgstr ""
+msgstr "Số Tile"
 
 msgid "JOSM Help Browser"
-msgstr ""
+msgstr "JOSM Trợ giúp trình duyệt"
 
 msgid "Failed to read CSS file ''help-browser.css''. Exception is: {0}"
-msgstr ""
+msgstr "Không đọc được file CSS '' help-browser.css '' ngoại lệ là:. {0}"
 
 msgid ""
 "<html><p class=\"warning-header\">Help content for help topic missing</p><p "
@@ -7547,6 +8223,14 @@ msgid ""
 "your local language ({1})</a> and the <a href=\"{3}\">help topic in "
 "English</a>.</p></html>"
 msgstr ""
+"<Html> <p class = \" cảnh báo-header \"> Nội dung trợ giúp cho chủ đề trợ "
+"giúp thiếu </ p> <pClass = \" cảnh báo cơ thể \"> Nội dung trợ giúp cho các "
+"chủ đề trợ giúp <strong> {0} </ strong>Vẫn chưa xuất hiện. Đó là thiếu cả "
+"trong ngôn ngữ địa phương của bạn ({1}) và trongTiếng Anh. <br> Xin giúp cải "
+"thiện hệ thống JOSM giúp đỡ và điền vàoThiếu thông tin. Bạn vừa có thể chỉnh "
+"sửa các <a href=\"{2}\"> chủ đề trợ giúp trongNgôn ngữ địa phương của bạn "
+"({1}) </a> và <a href=\"{3}\"> chủ đề trợ giúp trong</a> Tiếng Anh. </ P> </ "
+"html>"
 
 msgid ""
 "<html><p class=\"error-header\">Error when retrieving help information</p><p "
@@ -7554,199 +8238,226 @@ msgid ""
 "could not be loaded. The error message is "
 "(untranslated):<br><tt>{1}</tt></p></html>"
 msgstr ""
+"<Html> <p class = \" lỗi-header \"> Lỗi khi lấy thông tin trợ giúp </ p> "
+"<pClass = \" lỗi cơ thể \"> Các nội dung cho các chủ đề trợ giúp <strong> "
+"{0} </ strong>Không thể được nạp. Các thông báo lỗi là(Chưa được dịch): <br> "
+"<tt> {1} </ tt> </ p> </ html>"
 
 msgid ""
 "<html>Failed to open help page for url {0}.<br>This is most likely due to a "
 "network problem, please check<br>your internet connection</html>"
 msgstr ""
+"<Html> Không thể mở trang trợ giúp cho url {0}. <br> Này rất có thể là do "
+"mộtVấn đề mạng, vui lòng kiểm tra <br> nối internet của bạn </ html>"
 
 msgid "Failed to open URL"
-msgstr ""
+msgstr "Không mở URL"
 
 msgid "Open the current help page in an external browser"
-msgstr ""
+msgstr "Mở trang trợ giúp hiện trong một trình duyệt bên ngoài"
 
 msgid "Edit the current help page"
-msgstr ""
+msgstr "Chỉnh sửa các trang trợ giúp của hiện tại"
 
 msgid ""
 "<html>The current URL <tt>{0}</tt><br>is an external URL. Editing is only "
 "possible for help topics<br>on the help server <tt>{1}</tt>.</html>"
 msgstr ""
+"<Html> URL hiện tại <tt> {0} </ tt> <br> được một URL bên ngoài. Editing chỉ "
+"làCó thể cho chủ đề trợ giúp <br> trên máy chủ giúp <tt> {1} </ tt>. </ Html>"
 
 msgid "Reload the current help page"
-msgstr ""
+msgstr "Cập nhật lại trang trợ giúp hiện tại"
 
 msgid "Go to the previous page"
-msgstr ""
+msgstr "Tới trang trước"
 
 msgid "Go to the next page"
-msgstr ""
+msgstr "Đến trang tiếp theo"
 
 msgid "Go to the JOSM help home page"
-msgstr ""
+msgstr "Tới trang chủ JOSM giúp đỡ"
 
 msgid "Bad location in HTML document. Exception was: {0}"
-msgstr ""
+msgstr ". Bad vị trí trong HTML Exception tài liệu là: {0}"
 
 msgid "Failed to open help page. The target URL is empty."
-msgstr ""
+msgstr "Không mở trang trợ giúp. Các URL mục tiêu là trống rỗng."
 
 msgid "Failed to open help page"
-msgstr ""
+msgstr "Không mở trang trợ giúp"
 
 msgid "Latitude: "
-msgstr ""
+msgstr "Latitude: "
 
 msgid "Longitude: "
-msgstr ""
+msgstr "Kinh độ: "
 
 msgid "Distance: "
-msgstr ""
+msgstr "Khoảng cách "
 
 msgid "Coordinates"
-msgstr ""
+msgstr "Tọa độ"
 
 msgid "History for node {0}"
-msgstr ""
+msgstr "Lịch sử cho nút {0}"
 
 msgid "History for way {0}"
-msgstr ""
+msgstr "Lịch sử cho cách {0}"
 
 msgid "History for relation {0}"
-msgstr ""
+msgstr "Lịch sử cho mối quan hệ {0}"
 
 msgid "Reload the history from the server"
-msgstr ""
+msgstr "Nạp lại lịch sử từ các máy chủ"
 
 msgid "History not initialized yet. Failed to set reference primitive."
 msgstr ""
+"Lịch sử không khởi tạo nào. Không thể thiết lập tham chiếu nguyên thủy."
 
 msgid ""
 "Failed to set reference. Reference ID {0} does not match history ID {1}."
 msgstr ""
+"Không thể thiết lập tham chiếu. ID tham khảo {0} không phù hợp với lịch sử "
+"ID {1}."
 
 msgid ""
 "Failed to set reference. Reference version {0} not available in history."
 msgstr ""
+"Không thể thiết lập tham chiếu. Phiên bản Reference {0} không có trong lịch "
+"sử."
 
 msgid "History not initialized yet. Failed to set current primitive."
 msgstr ""
+"Lịch sử không khởi tạo nào. Không thể thiết lập hiện tại nguyên thủy."
 
 msgid ""
 "Failed to set current primitive. Current version {0} not available in "
 "history."
 msgstr ""
+"Không thể thiết lập hiện tại nguyên thủy. Phiên bản hiện tại {0} không có "
+"sẵn trongLịch sử"
 
 msgid "Load history"
-msgstr ""
+msgstr "lịch sử Load"
 
 msgid "Loading history for node {0}"
-msgstr ""
+msgstr "Đang tải lịch sử cho nút {0}"
 
 msgid "Loading history for way {0}"
-msgstr ""
+msgstr "Đang tải lịch sử cho cách {0}"
 
 msgid "Loading history for relation {0}"
-msgstr ""
+msgstr "Đang tải lịch sử cho mối quan hệ {0}"
 
 msgid "Node {0}"
+msgstr "Node {0}"
+
+msgid "The nodes of this way are in reverse order"
 msgstr ""
 
 msgid "Zoom to node"
-msgstr ""
+msgstr "Zoom tới nút"
 
 msgid "Zoom to this node in the current data layer"
-msgstr ""
+msgstr "Zoom đến nút này trong các lớp dữ liệu hiện tại"
 
 msgid "Open a history browser with the history of this node"
-msgstr ""
+msgstr "Mở một trình duyệt lịch sử với lịch sử của nút này"
 
 msgid "Way {0}"
-msgstr ""
+msgstr "Way {0}"
 
 msgid "Relation {0}"
-msgstr ""
+msgstr "Quan hệ {0}"
 
 msgid "Object"
-msgstr ""
+msgstr "đối tượng"
 
 msgid "not present"
-msgstr ""
+msgstr "không có mặt"
 
 msgid "Changeset comment"
-msgstr ""
+msgstr "changeset bình luận"
 
 msgid "Changeset source"
-msgstr ""
+msgstr "changeset nguồn"
 
 msgid "Imagery used"
-msgstr ""
+msgstr "Hình tượng sử dụng"
 
 msgid "<b>Source</b>:"
-msgstr ""
+msgstr "<b> Nguồn </ b>:"
 
 msgid "<b>Imagery</b>:"
-msgstr ""
+msgstr "<b> Hình ảnh </ b>:"
 
 msgid ""
 "<html>Version <strong>{0}</strong> currently edited in layer ''{1}''</html>"
 msgstr ""
+"<Html> Phiên bản <strong> {0} </ strong> hiện chỉnh sửa trong lớp '' {1} '' "
+"</ html>"
 
 msgid ""
 "<html>Version <strong>{0}</strong> created on <strong>{1}</strong></html>"
 msgstr ""
+"<Html> Phiên bản <strong> {0} </ strong> tạo ra trên <strong> {1} </ strong> "
+"</ html>"
 
 msgid "Changeset"
-msgstr ""
+msgstr "changeset"
 
 msgid "Changeset info"
-msgstr ""
+msgstr "changeset info"
 
 msgid "Launch browser with information about the changeset"
-msgstr ""
+msgstr "trình duyệt Launch với thông tin về các changeset"
 
 msgid "Show changeset {0}"
-msgstr ""
+msgstr "Show changeset {0}"
 
 msgid "User info"
-msgstr ""
+msgstr "Thông tin tài khoản"
 
 msgid "Launch browser with information about the user"
-msgstr ""
+msgstr "trình duyệt Launch với các thông tin về người sử dụng"
 
 msgid "Show user {0}"
-msgstr ""
+msgstr "Hiện người dùng {0}"
 
 msgid "Ver"
-msgstr ""
+msgstr "Ver"
 
 msgid "A"
-msgstr ""
+msgstr "A"
 
 msgid "B"
-msgstr ""
+msgstr "B"
 
 msgid ""
 "Failed to update primitive with id {0} because current edit layer is null"
 msgstr ""
+"Không cập nhật được nguyên thủy với id {0} bởi vì layer chỉnh sửa hiện tại "
+"là vô giá trị"
 
 msgid ""
 "Failed to update primitive with id {0} because current edit layer does not "
 "include such a primitive"
 msgstr ""
+"Không cập nhật được nguyên thủy với id {0} bởi vì layer chỉnh sửa hiện tại "
+"thì khôngBao gồm như một nguyên thủy"
 
 msgid "Synchronize node {0} only"
-msgstr ""
+msgstr "Đồng bộ hóa nút {0} chỉ"
 
 msgid "Synchronize way {0} only"
-msgstr ""
+msgstr "Đồng bộ hóa cách {0} chỉ"
 
 msgid "Synchronize relation {0} only"
-msgstr ""
+msgstr "Đồng bộ hóa quan hệ {0} chỉ"
 
 msgid "Synchronize entire dataset"
-msgstr ""
+msgstr "Đồng bộ hóa toàn bộ dữ liệu"
 
 msgid ""
 "<html>Uploading <strong>failed</strong> because the server has a newer "
@@ -7758,13 +8469,14 @@ msgid ""
 "server.<br>Click <strong>{6}</strong> to abort and continue "
 "editing.<br></html>"
 msgstr ""
-"<html> Upload <strong>thất bại</strong> do máy chủ có một phiên bản mới hơn "
-"so với số nốt, đường và quan hệ của bạn.<br> Xung đột gây ra do "
-"<strong>{0}</strong> với id <strong>{1}</strong>,<br> máy chủ có phiên bản "
-"{2}, phiên bản của bạn là {3}.<br><br>Chọn <strong>{4}</strong> để đồng bộ "
-"hóa các đối tượng bị xung đột .<br>Chọn <strong>{5}</strong> để đồng bộ hóa "
-"toàn bộ dữ liệu trên máy với máy chủ.<br>Chọn <strong>{6}</strong> để thoát "
-"và tiếp tục chỉnh sửa<br></html>"
+"<html>Uploading <strong>failed</strong> because the server has a newer "
+"version of one<br>of your nodes, ways, or relations.<br>The conflict is "
+"caused by the <strong>{0}</strong> with id <strong>{1}</strong>,<br>the "
+"server has version {2}, your version is {3}.<br><br>Click "
+"<strong>{4}</strong> to synchronize the conflicting primitive only.<br>Click "
+"<strong>{5}</strong> to synchronize the entire local dataset with the "
+"server.<br>Click <strong>{6}</strong> to abort and continue "
+"editing.<br></html>"
 
 msgid ""
 "<html>Uploading <strong>failed</strong> because the server has a newer "
@@ -7773,38 +8485,49 @@ msgid ""
 "server.<br>Click <strong>{1}</strong> to abort and continue "
 "editing.<br></html>"
 msgstr ""
+"<html>Uploading <strong>failed</strong> because the server has a newer "
+"version of one<br>of your nodes, ways, or relations.<br><br>Click "
+"<strong>{0}</strong> to synchronize the entire local dataset with the "
+"server.<br>Click <strong>{1}</strong> to abort and continue "
+"editing.<br></html>"
 
 msgid ""
 "<html>Uploading <strong>failed</strong> because you have been "
 "using<br>changeset {0} which was already closed at {1}.<br>Please upload "
 "again with a new or an existing open changeset.</html>"
 msgstr ""
+"<html>Uploading <strong>failed</strong> because you have been "
+"using<br>changeset {0} which was already closed at {1}.<br>Please upload "
+"again with a new or an existing open changeset.</html>"
 
 msgid "Changeset closed"
-msgstr ""
+msgstr "changeset đóng cửa"
 
 msgid "Prepare conflict resolution"
-msgstr ""
+msgstr "Chuẩn bị giải quyết xung đột"
 
 msgid "Click to download all referring objects for {0}"
-msgstr ""
+msgstr "Nhấn vào đây để tải về tất cả các đối tượng tham khảo cho {0}"
 
 msgid "Click to cancel and to resume editing the map"
-msgstr ""
+msgstr "Nhấn vào đây để hủy bỏ và tiếp tục chỉnh sửa bản đồ"
 
 msgid ""
 "Click <strong>{0}</strong> to load them now.<br>If necessary JOSM will "
 "create conflicts which you can resolve in the Conflict Resolution Dialog."
 msgstr ""
+"Nhấn vào <strong> {0} </ strong> để tải chúng ngay bây giờ. <br> Nếu JOSM "
+"cần thiết sẽTạo ra xung đột mà bạn có thể giải quyết trong Nghị quyết xung "
+"đột Dialog."
 
 msgid "Object still in use"
-msgstr ""
+msgstr "đối tượng vẫn còn sử dụng"
 
 msgid "Error header \"{0}\" did not match with an expected pattern"
-msgstr ""
+msgstr "Lỗi phần đầu \" {0} \"không phù hợp với một mô hình dự kiến"
 
 msgid "Upload"
-msgstr ""
+msgstr "Upload"
 
 msgid ""
 "<html>Select which actions to perform for this layer, if you click the "
@@ -7812,169 +8535,187 @@ msgid ""
 "server.<br/>Check \"Save\" to save the layer to the file specified on the "
 "left.</html>"
 msgstr ""
+"<Html> Chọn hành động để thực hiện cho lớp này, nếu bạn nhấp vàoNút ngoài "
+"cùng bên trái. <br/> Kiểm tra \" upload \"để tải lên các thay đổi đối với "
+"OSMServer. <br/> Kiểm tra \" Save \"để lưu các layer vào một file nào "
+"trênTrái. </ Html>"
 
 msgid "Provide a brief comment for the changes you are uploading:"
-msgstr "Mô tả ngắn một số thay đổi mà bạn muốn tải lên:"
+msgstr ""
+"Cung cấp một bình luận ngắn gọn cho các thay đổi mà bạn đang tải lên:"
 
 msgid "Enter an upload comment"
-msgstr ""
+msgstr "Nhập một bình luận upload"
 
 msgid "Specify the data source for the changes"
-msgstr ""
+msgstr "Xác định nguồn dữ liệu cho các thay đổi"
 
 msgid "obtain from current layers"
-msgstr ""
+msgstr "có được từ các lớp hiện tại"
 
 msgid "Enter a source"
-msgstr ""
+msgstr "Nhập một nguồn"
 
 msgid "Changeset id:"
-msgstr ""
+msgstr "changeset id:"
 
 msgid "Created at:"
-msgstr ""
+msgstr "Created at:"
 
 msgid "Changeset comment:"
-msgstr ""
+msgstr "changeset bình luận:"
 
 msgid "No open changeset"
-msgstr ""
+msgstr "Không changeset mở"
 
 msgid ""
 "Please decide what changeset the data is uploaded to and whether to close "
 "the changeset after the next upload."
 msgstr ""
+"Hãy quyết định những gì changeset dữ liệu được tải lên và liệu để đóngCác "
+"changeset sau khi upload tiếp theo."
 
 msgid "Upload to a new changeset"
-msgstr ""
+msgstr "Tải lên một changeset mới"
 
 msgid "Open a new changeset and use it in the next upload"
-msgstr ""
+msgstr "Mở một changeset mới và sử dụng nó trong các upload tiếp theo"
 
 msgid "Upload to an existing changeset"
-msgstr ""
+msgstr "Tải lên một changeset hiện"
 
 msgid "Upload data to an already existing and open changeset"
-msgstr ""
+msgstr "Tải dữ liệu vào một changeset đang tồn tại và mở"
 
 msgid "Select an open changeset"
-msgstr ""
+msgstr "Chọn một changeset mở"
 
 msgid "Close changeset after upload"
-msgstr ""
+msgstr "Close changeset sau khi upload"
 
 msgid "Select to close the changeset after the next upload"
-msgstr ""
+msgstr "Chọn để đóng changeset sau khi upload tiếp theo"
 
 msgid "Load the list of your open changesets from the server"
-msgstr ""
+msgstr "Nạp danh sách của changesets mở của bạn từ máy chủ"
 
 msgid "Close the currently selected open changeset"
-msgstr ""
+msgstr "Đóng changeset mở hiện đang được chọn"
 
 msgid "<html>Please select the changesets you want to close</html>"
-msgstr ""
+msgstr "<html> Hãy chọn changesets bạn muốn đóng </ html>"
 
 msgid "Open changesets"
-msgstr ""
+msgstr "Open changesets"
 
 msgid "Close changesets"
-msgstr ""
+msgstr "Close changesets"
 
 msgid "Close the selected open changesets"
-msgstr ""
+msgstr "Đóng changesets mở được lựa chọn"
 
 msgid "Cancel closing of changesets"
-msgstr ""
+msgstr "Hủy đóng cửa của changesets"
 
 msgid "Closing changeset"
-msgstr ""
+msgstr "Đóng cửa changeset"
 
 msgid "Closing changeset {0}"
-msgstr ""
+msgstr "Đóng cửa changeset {0}"
 
 msgid ""
 "Failed to put Credential Dialog always on top. Caught security exception."
 msgstr ""
+"Không thể đưa Credential Dialog luôn luôn trên đầu. Ngoại lệ an ninh bị bắt."
 
 msgid "Enter credentials for OSM API"
-msgstr ""
+msgstr "Nhập thông tin cho OSM API"
 
 msgid "Enter credentials for host"
-msgstr ""
+msgstr "Nhập thông tin đăng nhập cho máy chủ"
 
 msgid "Enter credentials for HTTP proxy"
-msgstr ""
+msgstr "Nhập thông tin cho HTTP proxy"
 
 msgid "Password"
-msgstr ""
+msgstr "Mật khẩu"
 
 msgid "Warning: The password is transferred unencrypted."
-msgstr ""
+msgstr "Cảnh báo: mật khẩu được chuyển giao không được mã hóa."
 
 msgid "Please enter the user name of your OSM account"
-msgstr ""
+msgstr "Hãy nhập tên người dùng của tài khoản OSM của bạn"
 
 msgid "Please enter the password of your OSM account"
-msgstr ""
+msgstr "Hãy nhập mật khẩu của tài khoản OSM của bạn"
 
 msgid ""
 "Authenticating at the OSM API ''{0}'' failed. Please enter a valid username "
 "and a valid password."
 msgstr ""
+"Chứng thực tại OSM API '' {0} '' thất bại. Vui lòng nhập một tên người dùng "
+"hợp lệVà mật khẩu hợp lệ."
 
 msgid "Please enter the user name of your account"
-msgstr ""
+msgstr "Hãy nhập tên người dùng của tài khoản của bạn"
 
 msgid "Please enter the password of your account"
-msgstr ""
+msgstr "Hãy nhập mật khẩu của tài khoản của bạn"
 
 msgid ""
 "Authenticating at the host ''{0}'' failed. Please enter a valid username and "
 "a valid password."
 msgstr ""
+"Chứng thực tại máy chủ '' {0} '' thất bại. Vui lòng nhập một tên người dùng "
+"hợp lệ vàMột mật khẩu hợp lệ."
 
 msgid "Please enter the user name for authenticating at your proxy server"
-msgstr ""
+msgstr "Hãy nhập tên người dùng để xác thực tại máy chủ proxy của bạn"
 
 msgid "Please enter the password for authenticating at your proxy server"
-msgstr ""
+msgstr "Hãy nhập mật khẩu để xác thực tại máy chủ proxy của bạn"
 
 msgid ""
 "Authenticating at the HTTP proxy ''{0}'' failed. Please enter a valid "
 "username and a valid password."
 msgstr ""
+"Chứng thực tại các proxy HTTP '' {0} '' thất bại. Vui lòng nhập một giá "
+"trịTên đăng nhập và mật khẩu hợp lệ."
 
 msgid ""
 "Warning: depending on the authentication method the proxy server uses the "
 "password may be transferred unencrypted."
 msgstr ""
+"Cảnh báo: tùy thuộc vào phương pháp xác thực máy chủ proxy sử dụngMật khẩu "
+"có thể được chuyển giao không được mã hóa."
 
 msgid "Authenticate"
-msgstr ""
+msgstr "Xác thực"
 
 msgid "Authenticate with the supplied username and password"
-msgstr ""
+msgstr "Xác thực với tên người dùng và mật khẩu được cung cấp"
 
 msgid "Cancel authentication"
-msgstr ""
+msgstr "Hủy xác thực"
 
 msgid "Downloading file"
-msgstr ""
+msgstr "Tải file"
 
 msgid "Downloading File {0}: {1} bytes..."
-msgstr ""
+msgstr "Tải tập tin {0}: {1} byte ..."
 
 msgid "Download finished"
-msgstr ""
+msgstr "Tải xong"
 
 msgid "Unpacking {0} into {1}"
-msgstr ""
+msgstr "Giải nén {0} vào {1}"
 
 msgid ""
 "Cannot download file ''{0}''. Its download link ''{1}'' is not a valid URL. "
 "Skipping download."
 msgstr ""
+"Không thể tải tập tin '' {0} ''. Link download của nó '' {1} '' không phải "
+"là một URL hợp lệ.Bỏ qua tải."
 
 msgid ""
 "Could not retrieve the list of your open changesets because<br>JOSM does not "
@@ -7982,93 +8723,99 @@ msgid ""
 "not entitled<br>to know the identity of the user on whose behalf you are "
 "working."
 msgstr ""
+"Không thể lấy danh sách các changesets mở của bạn bởi vì <br> JOSM khôngBiết "
+"danh tính của bạn. <br> Bạn đã có thể chọn để làm việc nặc danh hoặc bạn "
+"làKhông được hưởng <br> để biết được danh tính của người sử dụng mà trên "
+"danh nghĩa bạn đangLàm việc."
 
 msgid "Missing user identity"
-msgstr ""
+msgstr "Thiếu tính người dùng"
 
 msgid ""
 "Failed to retrieve user infos for the current JOSM user. Exception was: {0}"
 msgstr ""
+". Exception Không truy infos sử dụng cho người sử dụng JOSM hiện tại là: {0}"
 
 msgid "Download objects"
-msgstr ""
+msgstr "Tải về đối tượng"
 
 msgid "Initializing nodes to download ..."
-msgstr ""
+msgstr "Đang khởi tạo các nút để tải về ..."
 
 msgid "Object could not be downloaded"
 msgid_plural "Some objects could not be downloaded"
-msgstr[0] "Đối tượng không thể tải về được"
+msgstr[0] "đối tượng không thể được tải về"
 
 msgid "One object could not be downloaded.<br>"
 msgid_plural "{0} objects could not be downloaded.<br>"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Một đối tượng không thể được tải về. <br>"
 
 msgid ""
 "The server replied with response code 404.<br>This usually means, the server "
 "does not know an object with the requested id."
 msgstr ""
-"Máy chủ báo lỗi mã 404.<br> Lỗi này là thường là do server không biết mã ID "
-"của đối tượng được yêu cầu"
+"Các máy chủ trả lời với mã phản hồi 404. <br> này thường có nghĩa là, các "
+"máy chủKhông biết một đối tượng với id yêu cầu.Máy chủ báo lỗi mã 404.<br> "
+"Lỗi này là thường là do server không biết mã ID của đối tượng được yêu cầu"
 
 msgid "missing objects:"
-msgstr "Đối tượng bị thiếu:"
+msgstr "thiếu đối tượng:"
 
 msgid "One downloaded object is deleted."
 msgid_plural "{0} downloaded objects are deleted."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Một đối tượng đã tải về sẽ bị xóa."
 
 msgid ""
 "Either edit the path manually in the text field or click the \"...\" button "
 "to open a file chooser."
 msgstr ""
+"Hoặc là chỉnh sửa các đường dẫn bằng tay trong trường văn bản hoặc nhấp vào "
+"\" ... \"nútĐể mở một tập tin chooser."
 
 msgid "The bold text is the name of the layer."
-msgstr ""
+msgstr "Các chữ in đậm là tên của lớp."
 
 msgid "Click here to choose save path"
-msgstr ""
+msgstr "Nhấn vào đây để chọn đường dẫn lưu"
 
 msgid "Layer ''{0}'' is not backed by a file"
-msgstr ""
+msgstr "Layer '' {0} '' không được hỗ trợ bởi một tập tin"
 
 msgid "File ''{0}'' is not writable. Please enter another file name."
-msgstr ""
+msgstr "File '' {0} '' không cho phép ghi. Vui lòng nhập tên tập tin khác."
 
 msgid "Click cell to change the file path."
-msgstr ""
+msgstr "Nhấn vào tế bào để thay đổi đường dẫn tập tin."
 
 msgid "Launch a file chooser to select a file"
-msgstr ""
+msgstr "Khởi chạy một chooser tập tin để chọn một tập tin"
 
 msgid "Select filename"
-msgstr ""
+msgstr "Chọn tên tập tin"
 
 msgid "Open Recent"
-msgstr ""
+msgstr "Mở gần đây"
 
 msgid "List of recently opened files"
-msgstr ""
+msgstr "Danh sách các tập tin vừa mở"
 
 msgid "Clear"
-msgstr ""
+msgstr "Clear"
 
 msgid "Clear the list of recently opened files"
-msgstr ""
+msgstr "Xoá danh sách các tập tin vừa mở"
 
 msgid "Saving layer to ''{0}'' ..."
-msgstr ""
+msgstr "Tiết kiệm lớp để '' {0} '' ..."
 
 msgid "Unsaved changes - Save/Upload before exiting?"
-msgstr ""
+msgstr "thay đổi chưa được lưu - Lưu / Tải lên trước khi thoát?"
 
 msgid "Unsaved changes - Save/Upload before deleting?"
-msgstr ""
+msgstr "thay đổi chưa được lưu - Lưu / Tải lên trước khi xóa?"
 
 msgid "Uploading and saving modified layers ..."
-msgstr ""
+msgstr "Tải lên và tiết kiệm đổi lớp ..."
 
 msgid ""
 "<html>{0} layer has unresolved conflicts.<br>Either resolve them first or "
@@ -8077,10 +8824,12 @@ msgid_plural ""
 "<html>{0} layers have unresolved conflicts.<br>Either resolve them first or "
 "discard the modifications.<br>Layers with conflicts:</html>"
 msgstr[0] ""
-msgstr[1] ""
+"<Html> {0} layer có mâu thuẫn chưa được giải quyết. <br> Hoặc là giải quyết "
+"chúng trước hoặcLoại bỏ những sửa đổi <br> Layer với các cuộc xung đột. </ "
+"Html>"
 
 msgid "Unsaved data and conflicts"
-msgstr ""
+msgstr "dữ liệu chưa được lưu và xung đột"
 
 msgid ""
 "<html>{0} layer needs saving but has no associated file.<br>Either select a "
@@ -8090,10 +8839,12 @@ msgid_plural ""
 "file for each of them or discard the changes.<br>Layers without a "
 "file:</html>"
 msgstr[0] ""
-msgstr[1] ""
+"<Html> {0} layer cần tiết kiệm nhưng không có tập tin liên quan. <br> Hoặc "
+"chọn mộtFile cho layer này hay bỏ qua chúng <br> lớp mà không có một tập "
+"tin:. </ Html>"
 
 msgid "Unsaved data and missing associated file"
-msgstr ""
+msgstr "dữ liệu chưa được lưu và thiếu tập tin liên quan"
 
 msgid ""
 "<html>{0} layer needs saving but has an associated file<br>which cannot be "
@@ -8104,40 +8855,45 @@ msgid_plural ""
 "written.<br>Either select another file for each of them or discard the "
 "changes.<br>Layers with non-writable files:</html>"
 msgstr[0] ""
-msgstr[1] ""
+"<Html> {0} layer cần tiết kiệm nhưng có một tập tin <br> liên quan mà không "
+"thể đượcĐược viết. <br> Hoặc chọn một tập tin cho layer này hay bỏ quaThay "
+"đổi <br> Layer với một tập tin không thể ghi:. </ Html>"
 
 msgid "Unsaved data non-writable files"
-msgstr ""
+msgstr "dữ liệu chưa được lưu các tập tin không thể ghi"
 
 msgid "Close this dialog and resume editing in JOSM"
-msgstr ""
+msgstr "Đóng hộp thoại này và tiếp tục chỉnh sửa trong JOSM"
 
 msgid "Exit now!"
-msgstr ""
+msgstr "Thoát bây giờ!"
 
 msgid "Exit JOSM without saving. Unsaved changes are lost."
-msgstr ""
+msgstr "Thoát JOSM mà không saving. thay đổi chưa được lưu sẽ bị mất."
 
 msgid "Delete now!"
-msgstr ""
+msgstr "Xóa ngay bây giờ!"
 
 msgid "Delete layers without saving. Unsaved changes are lost."
-msgstr ""
+msgstr "Xóa lớp mà không lưu. thay đổi chưa được lưu sẽ bị mất."
 
 msgid "Perform actions before exiting"
-msgstr ""
+msgstr "Thực hiện hành động trước khi xuất cảnh"
 
 msgid "Exit JOSM with saving. Unsaved changes are uploaded and/or saved."
 msgstr ""
+"Thoát JOSM với tiết kiệm. thay đổi chưa được lưu được tải lên và / hoặc lưu "
+"lại."
 
 msgid "Perform actions before deleting"
-msgstr ""
+msgstr "Thực hiện hành động trước khi xóa"
 
 msgid "Save/Upload layers before deleting. Unsaved changes are not lost."
 msgstr ""
+"lớp Save / Upload trước khi xóa. thay đổi chưa được lưu sẽ không mất đi."
 
 msgid "Preparing layer ''{0}'' for upload ..."
-msgstr ""
+msgstr "lớp Chuẩn bị '' {0} '' để tải lên ..."
 
 msgid ""
 "<html>An upload and/or save operation of one layer with modifications<br>was "
@@ -8146,85 +8902,90 @@ msgid_plural ""
 "<html>Upload and/or save operations of {0} layers with modifications<br>were "
 "canceled or have failed.</html>"
 msgstr[0] ""
-msgstr[1] ""
+"<Html> Một upload và / hoặc lưu hoạt động của một lớp với sửa đổi <br> làHủy "
+"bỏ hoặc đã thất bại. </ Html>"
 
 msgid "Incomplete upload and/or save"
-msgstr ""
+msgstr "upload Incomplete và / hoặc tiết kiệm"
 
 msgid "should be uploaded"
-msgstr ""
+msgstr "nên được tải lên"
 
 msgid "should be saved"
-msgstr ""
+msgstr "cần được cứu"
 
 msgid ""
 "Layer ''{0}'' has modifications which should be uploaded to the server."
-msgstr ""
+msgstr "Layer '' {0} '' có những sửa đổi đó phải được tải lên máy chủ."
 
 msgid "Layer ''{0}'' has modifications which are discouraged to be uploaded."
 msgstr ""
+"Layer '' {0} '' có những sửa đổi mà không được khuyến khích để được tải lên."
 
 msgid "Layer ''{0}'' has no modifications to be uploaded."
-msgstr ""
+msgstr "Layer '' {0} '' đã không sửa đổi được tải lên."
 
 msgid ""
 "Layer ''{0}'' has modifications which should be saved to its associated file "
 "''{1}''."
 msgstr ""
+"Layer '' {0} '' có những sửa đổi cần được lưu vào tập tin liên quan của nó'' "
+"{1} ''."
 
 msgid "Layer ''{0}'' has no modifications to be saved."
-msgstr ""
+msgstr "Layer '' {0} '' đã không sửa đổi để được cứu."
 
 msgid "Layer Name and File Path"
-msgstr ""
+msgstr "Layer Name và File Path"
 
 msgid "Recommended Actions"
-msgstr ""
+msgstr "Hành động Recommended"
 
 msgid "Actions To Take"
-msgstr ""
+msgstr "Actions Để Đi"
 
 msgid "Update objects"
 msgstr "Cập nhật các đối tượng"
 
 msgid "Initializing nodes to update ..."
-msgstr ""
+msgstr "nút Khởi tạo để cập nhật ..."
 
 msgid "Initializing ways to update ..."
-msgstr ""
+msgstr "Đang khởi tạo cách để cập nhật ..."
 
 msgid "Initializing relations to update ..."
-msgstr ""
+msgstr "quan hệ Khởi tạo để cập nhật ..."
 
 msgid "Settings"
-msgstr ""
+msgstr "Settings"
 
 msgid "Decide how to upload the data and which changeset to use"
 msgstr ""
+"Quyết định như thế nào để tải lên các dữ liệu và đó changeset để sử dụng"
 
 msgid "Tags of new changeset"
-msgstr ""
+msgstr "Thẻ của changeset mới"
 
 msgid "Apply tags to the changeset data is uploaded to"
-msgstr ""
+msgstr "Áp dụng thẻ để các dữ liệu changeset được tải lên"
 
 msgid "Manage open changesets and select a changeset to upload to"
-msgstr ""
+msgstr "Quản lý changesets mở và chọn một changeset để tải lên"
 
 msgid "Configure advanced settings"
-msgstr ""
+msgstr "Cấu hình cài đặt nâng cao"
 
 msgid "Upload to ''{0}''"
-msgstr ""
+msgstr "Tải lên để '' {0} ''"
 
 msgid "Upload Changes"
-msgstr "Tải lên"
+msgstr "Upload Thay đổi"
 
 msgid "Upload the changed primitives"
-msgstr ""
+msgstr "Upload các nguyên thủy thay đổi"
 
 msgid "Please revise upload comment"
-msgstr ""
+msgstr "Vui lòng xem lại upload bình luận"
 
 msgid ""
 "Your upload comment is <i>empty</i>, or <i>very short</i>.<br /><br />This "
@@ -8233,9 +8994,15 @@ msgid ""
 "/>to understand what is going on!<br /><br />If you spend a minute now to "
 "explain your change, you will make life<br />easier for many other mappers."
 msgstr ""
+"Comment upload của bạn là <i> trống </ i>, hoặc <i> rất ngắn </ i>. <br /> "
+"<br /> NàyLà kỹ thuật cho phép, nhưng xin vui lòng xem xét rằng nhiều người "
+"sử dụng là người <br/> Xem những thay đổi trong khu vực của họ phụ thuộc vào "
+"ý kiến ​​changeset ý nghĩa <br/> Để hiểu những gì đang diễn ra! <br /> <br "
+"/> Nếu bạn dành một phút ngay bây giờ đểGiải thích sự thay đổi của bạn, bạn "
+"sẽ làm cho cuộc sống dễ dàng hơn <br /> cho nhiều bản đồ khác."
 
 msgid "Please specify a changeset source"
-msgstr ""
+msgstr "Hãy ghi rõ nguồn changeset"
 
 msgid ""
 "You did not specify a source for your changes.<br />It is technically "
@@ -8243,27 +9010,32 @@ msgid ""
 "origins of the data.<br /><br />If you spend a minute now to explain your "
 "change, you will make life<br />easier for many other mappers."
 msgstr ""
+"Bạn không thể chỉ định một nguồn cho các thay đổi của bạn. <br /> Đây là kỹ "
+"thuậtCho phép, nhưng thông tin này giúp <br /> người dùng khác để hiểu "
+"đượcNguồn gốc của dữ liệu. <br /> <br /> Nếu bạn dành một phút ngay bây giờ "
+"để giải thích bạnThay đổi, bạn sẽ làm cho cuộc sống dễ dàng hơn <br /> cho "
+"nhiều bản đồ khác."
 
 msgid "Revise"
-msgstr ""
+msgstr "Sửa đổi"
 
 msgid "Continue as is"
-msgstr ""
+msgstr "Tiếp tục như là"
 
 msgid "Return to the previous dialog to enter a more descriptive comment"
-msgstr ""
+msgstr "Quay trở lại hộp thoại trước để nhập vào một comment mô tả nhiều hơn"
 
 msgid "Cancel and return to the previous dialog"
-msgstr ""
+msgstr "Hủy bỏ và trở về hộp thoại trước đó"
 
 msgid "Please enter a valid chunk size first"
-msgstr ""
+msgstr "Hãy nhập một kích thước đoạn đầu tiên hợp lệ"
 
 msgid "Illegal chunk size"
-msgstr ""
+msgstr "kích thước đoạn bất hợp pháp"
 
 msgid "{0}={1}"
-msgstr ""
+msgstr "{0} = {1}"
 
 msgid ""
 "<html>The following changeset tag contains an empty "
@@ -8272,48 +9044,53 @@ msgid_plural ""
 "<html>The following changeset tags contain an empty "
 "key/value:<br>{0}<br>Continue?</html>"
 msgstr[0] ""
-msgstr[1] ""
+"<Html> Thẻ changeset sau đây có chứa một sản phẩm nàoKey / value: <br> {0} "
+"<br> Tiếp tục </ html>"
 
 msgid "Empty metadata"
-msgstr ""
+msgstr "siêu dữ liệu rỗng"
 
 msgid "Cancel the upload and resume editing"
-msgstr ""
+msgstr "Thôi công việc tải và tiếp tục chỉnh sửa"
 
 msgid "Tags of changeset {0}"
-msgstr ""
+msgstr "Thẻ của changeset {0}"
 
 msgid ""
 "Object ''{0}'' is already deleted on the server. Skipping this object and "
 "retrying to upload."
 msgstr ""
+"Object '' {0} '' đã được xóa trên máy chủ. Bỏ qua đối tượng này vàThử lại để "
+"tải lên."
 
 msgid "Preparing objects to upload ..."
-msgstr ""
+msgstr "Chuẩn bị các đối tượng để tải lên ..."
 
 msgid "Objects are uploaded to a <strong>new changeset</strong>."
-msgstr ""
+msgstr "Đối tượng được tải lên một <strong> changeset mới </ strong>."
 
 msgid ""
 "Objects are uploaded to the <strong>open changeset</strong> {0} with upload "
 "comment ''{1}''."
 msgstr ""
+"Đối tượng được tải lên <strong> mở changeset </ strong> {0} với uploadBình "
+"luận '' {1} ''."
 
 msgid ""
 "The changeset is going to be <strong>closed</strong> after this upload"
-msgstr ""
+msgstr "Các changeset sẽ là <strong> đóng </ strong> sau khi tải lên này"
 
 msgid "The changeset is <strong>left open</strong> after this upload"
-msgstr ""
+msgstr "changeset là <strong> bỏ ngỏ </ strong> sau khi tải lên này"
 
 msgid "configure changeset"
-msgstr ""
+msgstr "cấu hình changeset"
 
 msgid "Uploading <strong>{0} object</strong> to <strong>1 changeset</strong>"
 msgid_plural ""
 "Uploading <strong>{0} objects</strong> to <strong>1 changeset</strong>"
 msgstr[0] ""
-msgstr[1] ""
+"Uploading <strong> {0} đối tượng </ strong> <strong> 1 changeset </ strong>"
 
 msgid ""
 "Uploading <strong>{0} object</strong> to <strong>1 changeset</strong> using "
@@ -8322,58 +9099,68 @@ msgid_plural ""
 "Uploading <strong>{0} objects</strong> to <strong>1 changeset</strong> using "
 "<strong>1 request</strong>"
 msgstr[0] ""
-msgstr[1] ""
+"Uploading <strong> {0} đối tượng </ strong> <strong> 1 changeset </ strong> "
+"sử dụng<Strong> 1 yêu cầu </ strong>"
 
 msgid ""
 "Uploading <strong>{0} objects</strong> to <strong>1 changeset</strong> using "
 "<strong>{1} requests</strong>"
 msgstr ""
+"Uploading <strong> {0} đối tượng </ strong> <strong> 1 changeset </ strong> "
+"sử dụng<Strong> {1} yêu cầu </ strong>"
 
 msgid "advanced configuration"
-msgstr ""
+msgstr "cấu hình cao cấp"
 
 msgid ""
 "{0} objects exceed the max. allowed {1} objects in a changeset on the server "
 "''{2}''. Please <a href=\"urn:advanced-configuration\">configure</a> how to "
 "proceed with <strong>multiple changesets</strong>"
 msgstr ""
+"{0} đối tượng vượt quá tối đa. Phép {1} đối tượng trong một changeset trên "
+"máy chủ'' {2} ''. Hãy <a href=\"urn:advanced-configuration\"> configure </a> "
+"thế nào đểTiến hành với <strong> nhiều changesets </ strong>"
 
 msgid ""
 "Uploading <strong>{0} objects</strong> to <strong>multiple "
 "changesets</strong> using <strong>{1} requests</strong>"
 msgstr ""
+"Uploading <strong> {0} đối tượng </ strong> <strong> nhiềuChangesets </ "
+"strong> bằng <strong> {1} yêu cầu </ strong>"
 
 msgid "Uploading data for layer ''{0}''"
-msgstr ""
+msgstr "Nhập dữ liệu cho lớp '' {0} ''"
 
 msgid "Continue uploading"
-msgstr ""
+msgstr "Tiếp tục tải lên"
 
 msgid "Click to continue uploading to additional new changesets"
-msgstr ""
+msgstr "Nhấn vào đây để tiếp tục tải lên để thêm changesets mới"
 
 msgid "Go back to Upload Dialog"
-msgstr ""
+msgstr "Quay về Tải lên Dialog"
 
 msgid "Click to return to the Upload Dialog"
-msgstr ""
+msgstr "Nhấn vào đây để trở về Tải lên Dialog"
 
 msgid "Abort"
-msgstr ""
+msgstr "Hủy bỏ"
 
 msgid "Click to abort uploading"
-msgstr ""
+msgstr "Nhấn vào đây để hủy bỏ upload"
 
 msgid ""
 "The server reported that the current changeset was closed.<br>This is most "
 "likely because the changesets size exceeded the max. size<br>of {0} objects "
 "on the server ''{1}''."
 msgstr ""
+"Các máy chủ báo cáo rằng changeset hiện nay đã được đóng. <br> Này là nhấtCó "
+"khả năng bởi vì kích thước changesets vượt quá tối đa. Kích thước <br> của "
+"{0} đối tượngTrên máy chủ '' {1} ''."
 
 msgid "There is {0} object left to upload."
 msgid_plural "There are {0} objects left to upload."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Có {0} đối tượng còn lại để tải lên."
 
 msgid ""
 "Click ''<strong>{0}</strong>'' to continue uploading to additional new "
@@ -8381,205 +9168,315 @@ msgid ""
 "dialog.<br>Click ''<strong>{2}</strong>'' to abort uploading and return to "
 "map editing.<br>"
 msgstr ""
+"Nhấp vào '' <strong> {0} </ strong> '' để tiếp tục tải lên để thêm "
+"mớiChangesets. <br> Nhấp vào '' <strong> {1} </ strong> '' để trở về "
+"uploadHộp thoại. <br> Nhấp vào '' <strong> {2} </ strong> '' để hủy bỏ việc "
+"tải lên và quay trở lạiChỉnh sửa bản đồ. <br>"
 
 msgid "Changeset is full"
-msgstr ""
+msgstr "changeset là đầy đủ"
 
 msgid "Node ''{0}'' is already deleted. Skipping object in upload."
-msgstr ""
+msgstr "Node '' {0} '' đã được xóa. Bỏ qua đối tượng trong upload."
 
 msgid "Way ''{0}'' is already deleted. Skipping object in upload."
-msgstr ""
+msgstr "Way '' {0} '' đã được xóa. Bỏ qua đối tượng trong upload."
 
 msgid "Relation ''{0}'' is already deleted. Skipping object in upload."
-msgstr ""
+msgstr "Quan hệ '' {0} '' đã được xóa. Bỏ qua đối tượng trong upload."
 
 msgid "Object ''{0}'' is already deleted. Skipping object in upload."
-msgstr ""
+msgstr "đối tượng '' {0} '' đã được xóa. Bỏ qua đối tượng trong upload."
 
 msgid "Uploading {0} object..."
 msgid_plural "Uploading {0} objects..."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Uploading {0} đối tượng ..."
 
 msgid ""
 "Ignoring caught exception because upload is canceled. Exception is: {0}"
-msgstr ""
+msgstr "Bỏ qua bắt ngoại lệ vì upload được hủy bỏ hợp ngoại lệ là:. {0}"
 
 msgid "Upload successful!"
-msgstr ""
+msgstr "Tải lên thành công!"
 
 msgid ""
 "<html>Mark modified objects <strong>from the current selection</strong> to "
 "be uploaded to the server.</html>"
 msgstr ""
+"<Html> Mark chỉnh các đối tượng <strong> từ sự chọn lựa hiện nay </ strong> "
+"đểĐược tải lên máy chủ. </ Html>"
 
 msgid ""
 "<html>Mark <strong>locally deleted objects</strong> to be deleted on the "
 "server.</html>"
 msgstr ""
+"<Html> Đánh <strong> đối tượng tại địa phương xóa </ strong> để được xóa "
+"trênMáy chủ. </ Html>"
 
 msgid "Select objects to upload"
-msgstr ""
+msgstr "Chọn đối tượng để tải lên"
 
 msgid "Cancel uploading"
-msgstr ""
+msgstr "Hủy upload"
 
 msgid "Unexpected value for key ''{0}'' in preferences, got ''{1}''"
-msgstr ""
+msgstr "giá trị bất ngờ cho chính '' {0} '' trong sở thích, có '' {1} ''"
 
 msgid "Please select the upload strategy:"
-msgstr ""
+msgstr "Hãy chọn các chiến lược upload:"
 
 msgid "Upload data in one request"
-msgstr ""
+msgstr "Tải lên dữ liệu trong một yêu cầu"
 
 msgid "Upload data in chunks of objects. Chunk size: "
-msgstr ""
+msgstr "Tải dữ liệu trong khối có kích thước Chunk đối tượng. "
 
 msgid "Upload each object individually"
-msgstr ""
+msgstr "Tải lên từng đối tượng riêng rẽ"
 
 msgid ""
 "<html>There are <strong>multiple changesets</strong> necessary in order to "
 "upload {0} objects. Which strategy do you want to use?</html>"
 msgstr ""
+"<Html> Có <strong> nhiều changesets </ strong> cần thiết đểTải lên {0} đối "
+"tượng. Chiến lược Mà bạn có muốn sử dụng? </ Html>"
 
 msgid "Fill up one changeset and return to the Upload Dialog"
-msgstr ""
+msgstr "Đổ đầy một changeset và trở về Tải lên Dialog"
 
 msgid "Open and use as many new changesets as necessary"
-msgstr ""
+msgstr "Mở và sử dụng như nhiều changesets mới khi cần thiết"
 
 msgid "Upload in one request not possible (too many objects to upload)"
-msgstr ""
+msgstr "Tải lên trong một yêu cầu không thể (quá nhiều đối tượng để tải lên)"
 
 msgid ""
 "<html>Cannot upload {0} objects in one request because the<br>max. changeset "
 "size {1} on server ''{2}'' is exceeded.</html>"
 msgstr ""
+"<Html> Không thể tải lên {0} đối tượng trong một yêu cầu bởi vì <br> max "
+"changeset.Size {1} trên máy chủ '' {2} '' được vượt quá. </ Html>"
 
 msgid "(1 request)"
-msgstr ""
+msgstr "(1 yêu cầu)"
 
 msgid "(# requests unknown)"
-msgstr ""
+msgstr "(# yêu cầu không được biết)"
 
 msgid "({0} request)"
 msgid_plural "({0} requests)"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "({0} yêu cầu)"
 
 msgid "Illegal chunk size <= 0. Please enter an integer > 1"
-msgstr ""
+msgstr "kích thước chunk trái phép <= 0. Xin vui lòng nhập một số nguyên> 1"
 
 msgid "Chunk size {0} exceeds max. changeset size {1} for server ''{2}''"
 msgstr ""
+"Chunk kích thước {0} vượt max. kích thước changeset {1} cho máy chủ '' {2} ''"
 
 msgid "Please enter an integer > 1"
-msgstr ""
+msgstr "Hãy nhập một số nguyên> 1"
 
 msgid "Value ''{0}'' is not a number. Please enter an integer > 1"
 msgstr ""
+"Giá trị '' {0} '' không phải là một con số. Vui lòng nhập một số nguyên> 1"
 
 msgid "Objects to add:"
-msgstr "Các đối tượng thêm vào:"
+msgstr "Đối tượng để thêm vào:"
 
 msgid "Objects to modify:"
-msgstr "Các đối tượng đã thay đổi:"
+msgstr "Đối tượng để sửa đổi:"
 
 msgid "Objects to delete:"
-msgstr "Các đối tượng đã xóa"
+msgstr "Đối tượng để xóa:"
 
 msgid "{0} object to add:"
 msgid_plural "{0} objects to add:"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} đối tượng để thêm:"
 
 msgid "{0} object to modify:"
 msgid_plural "{0} objects to modify:"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} đối tượng phải sửa đổi:"
 
 msgid "{0} object to delete:"
 msgid_plural "{0} objects to delete:"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} đối tượng để xóa:"
 
-msgid "Customize Color"
+msgid "Show Tile Info"
+msgstr "Show Tile Info"
+
+msgid "Tile Info"
 msgstr ""
 
-msgid "Default"
+msgid "Metadata "
 msgstr ""
 
-msgid "Choose a color"
+msgid "Auto Zoom"
+msgstr "Auto Zoom"
+
+msgid "Auto load tiles"
+msgstr "gạch tải Auto"
+
+msgid "Load All Tiles"
+msgstr "Tải tất cả các gạch"
+
+msgid "Load All Error Tiles"
+msgstr "Tải tất cả các gạch Error"
+
+msgid "Zoom to native resolution"
+msgstr "Zoom để độ phân giải gốc"
+
+msgid "Change resolution"
+msgstr "Thay đổi độ phân giải"
+
+msgid "Failed to create tile source"
 msgstr ""
 
-msgid "Name: {0}"
+msgid "Show Errors"
+msgstr "Hiển thị lỗi"
+
+msgid "Load Tile"
+msgstr "Load Tile"
+
+msgid "Increase zoom"
+msgstr "Tăng zoom"
+
+msgid "Decrease zoom"
+msgstr "Giảm zoom"
+
+msgid "Snap to tile size"
+msgstr "Snap to kích thước gạch"
+
+msgid "Flush Tile Cache"
+msgstr "Flush Tile Cache"
+
+msgid "zoom in to load any tiles"
+msgstr "phóng to để tải bất kỳ gạch"
+
+msgid "zoom in to load more tiles"
+msgstr "phóng to để tải nhiều gạch"
+
+msgid "increase zoom level to see more detail"
+msgstr "mức tăng zoom để xem chi tiết hơn"
+
+msgid "No tiles at this zoom level"
+msgstr "Không có gạch ở mức thu phóng này"
+
+msgid "Current zoom: {0}"
+msgstr "zoom hiện tại: {0}"
+
+msgid "Display zoom: {0}"
+msgstr "Hiển thị zoom: {0}"
+
+msgid "Pixel scale: {0}"
+msgstr "quy mô Pixel: {0}"
+
+msgid "Best zoom: {0}"
+msgstr "zoom tốt nhất: {0}"
+
+msgid "Cache stats: {0}"
+msgstr "số liệu thống kê Cache: {0}"
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
 msgstr ""
 
-msgid "Description: {0}"
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr "Downloaded {0} / {1} gạch"
+
+msgid "Save WMS file"
+msgstr "Lưu WMS file"
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
 msgstr ""
+"Hình ảnh Trên không thể không thẳng hàng. Vui lòng kiểm tra của nó bù đắp "
+"bằng cách sử dụng đường GPS!"
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+
+msgid "Details..."
+msgstr "Details ..."
+
+msgid "Hide this message and never show it again"
+msgstr "Ẩn thư này và không bao giờ thấy nó một lần nữa"
+
+msgid "Customize Color"
+msgstr "Customize Color"
+
+msgid "Default"
+msgstr "Default"
+
+msgid "Choose a color"
+msgstr "Chọn màu"
+
+msgid "Name: {0}"
+msgstr "Name: {0}"
+
+msgid "Description: {0}"
+msgstr "Mô tả: {0}"
 
 msgid "{0} track"
 msgid_plural "{0} tracks"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} theo dõi"
 
 msgid "Description"
-msgstr ""
+msgstr "Mô tả"
 
 msgid "Timespan"
-msgstr ""
+msgstr "khoảng thời gian"
 
 msgid "Length"
-msgstr ""
+msgstr "Length"
 
 msgid "Length: {0}"
-msgstr ""
+msgstr "Chiều dài: {0}"
 
 msgid "{0} route, "
 msgid_plural "{0} routes, "
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} tuyến đường, "
 
 msgid "{0} waypoint"
 msgid_plural "{0} waypoints"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} waypoint"
 
 msgid "{0} track, "
 msgid_plural "{0} tracks, "
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} theo dõi, "
 
 msgid "Save GPX file"
-msgstr "Lưu file GPX"
+msgstr "Lưu tập tin GPX"
 
 msgid "Imagery fade"
+msgstr "Hình tượng phai"
+
+msgid "Unsupported imagery type: {0}"
 msgstr ""
 
 msgid "ERROR"
-msgstr ""
+msgstr "ERROR"
 
 msgid "Next marker"
-msgstr ""
+msgstr "marker Next"
 
 msgid "Jump to next marker"
-msgstr ""
+msgstr "Nhảy đến điểm đánh dấu tiếp theo"
 
 msgid "Previous marker"
-msgstr ""
+msgstr "đánh dấu trước"
 
 msgid "Jump to previous marker"
-msgstr ""
+msgstr "Nhảy đến điểm đánh dấu trước đó"
 
 msgid "All projections are supported"
-msgstr ""
+msgstr "Tất cả các dự được hỗ trợ"
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8587,754 +9484,676 @@ msgid "Save Layer"
 msgstr "Lưu Layer"
 
 msgid "Note"
-msgstr ""
+msgstr "Ghi chú"
 
 msgid "Notes layer"
-msgstr ""
+msgstr "Ghi chú layer"
 
 msgid "Total notes:"
-msgstr ""
+msgstr "Tổng số ghi chú:"
 
 msgid "Changes need uploading?"
-msgstr ""
+msgstr "Những thay đổi cần tải lên?"
 
 msgid "Data Layer {0}"
-msgstr "Lớp dữ liệu {0}"
+msgstr "Dữ liệu lớp {0}"
 
 msgid "outside downloaded area"
-msgstr ""
+msgstr "khu vực bên ngoài tải về"
 
 msgid "Merging layers"
-msgstr ""
+msgstr "Kết hợp các lớp"
 
 msgid "{0} deleted"
 msgid_plural "{0} deleted"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} xóa"
 
 msgid "{0} consists of:"
-msgstr ""
+msgstr "{0} bao gồm:"
 
 msgid "unset"
-msgstr ""
+msgstr "unset"
 
 msgid "API version: {0}"
-msgstr ""
+msgstr "phiên bản API: {0}"
 
 msgid "Upload is discouraged"
-msgstr ""
+msgstr "Upload được nản lòng"
 
 msgid "Convert to GPX layer"
-msgstr ""
+msgstr "Chuyển đổi sang lớp GPX"
 
 msgid "Converted from: {0}"
-msgstr ""
+msgstr "Chuyển đổi từ: {0}"
 
 msgid "Dataset consistency test"
-msgstr ""
+msgstr "kiểm tra tính nhất quán Dataset"
 
 msgid "No problems found"
-msgstr ""
+msgstr "Không thấy vấn đề"
 
 msgid "Following problems found:"
-msgstr ""
+msgstr "Sau các vấn đề được tìm thấy:"
 
 msgid "Empty document"
-msgstr "File trống rỗng"
+msgstr "tài liệu rỗng"
 
 msgid "Save anyway"
-msgstr "Cứ lưu"
+msgstr "Lưu anyway"
 
 msgid "The document contains no data."
-msgstr "File không có dữ liệu"
+msgstr "Tài liệu này không chứa dữ liệu."
 
 msgid "Conflicts"
 msgstr "Xung đột"
 
 msgid "Reject Conflicts and Save"
-msgstr "Loại bỏ xung đột và lưu"
+msgstr "Từ chối Xung đột và Save"
 
 msgid ""
 "There are unresolved conflicts. Conflicts will not be saved and handled as "
 "if you rejected all. Continue?"
 msgstr ""
-"Xung đột không xử lý được. Các xung đột sẽ không được lưu và kiểm soát khi "
-"bạn loại bỏ tất. Có tiếp tục không?"
+"Có những xung đột chưa được giải quyết. Xung đột sẽ không được lưu và xử lý "
+"nhưNếu bạn từ chối tất cả. Tiếp tục?Xung đột không xử lý được. Các xung đột "
+"sẽ không được lưu và kiểm soát khi bạn loại bỏ tất. Có tiếp tục không?"
 
 msgid "Save OSM file"
-msgstr "Lưu file OSM"
-
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-
-msgid "Auto Zoom"
-msgstr ""
-
-msgid "Auto load tiles"
-msgstr ""
-
-msgid "Show Errors"
-msgstr ""
-
-msgid "Load Tile"
-msgstr ""
-
-msgid "Show Tile Info"
-msgstr ""
-
-msgid "Load All Tiles"
-msgstr ""
-
-msgid "Load All Error Tiles"
-msgstr ""
-
-msgid "Increase zoom"
-msgstr ""
-
-msgid "Decrease zoom"
-msgstr ""
-
-msgid "Snap to tile size"
-msgstr ""
-
-msgid "Flush Tile Cache"
-msgstr ""
-
-msgid "zoom in to load any tiles"
-msgstr ""
-
-msgid "zoom in to load more tiles"
-msgstr ""
-
-msgid "increase zoom level to see more detail"
-msgstr ""
-
-msgid "No tiles at this zoom level"
-msgstr ""
-
-msgid "Current zoom: {0}"
-msgstr ""
-
-msgid "Display zoom: {0}"
-msgstr ""
-
-msgid "Pixel scale: {0}"
-msgstr ""
-
-msgid "Best zoom: {0}"
-msgstr ""
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
+msgstr "Lưu tập tin OSM"
 
 msgid "EPSG:4326 and Mercator projection are supported"
-msgstr ""
+msgstr "EPSG: 4326 và Mercator chiếu được hỗ trợ"
 
 msgid "Validation errors"
-msgstr ""
+msgstr "lỗi Validation"
 
 msgid "No validation errors"
-msgstr ""
-
-msgid "Blank Layer"
-msgstr ""
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr ""
+msgstr "Không có lỗi xác nhận"
 
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "Download visible tiles"
-msgstr ""
+msgid "Set WMS Bookmark"
+msgstr "Đặt WMS Bookmark"
 
 msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr ""
-
-msgid "Change resolution"
-msgstr ""
-
-msgid "Reload erroneous tiles"
-msgstr ""
-
-msgid "Alpha channel"
-msgstr ""
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Automatic downloading"
-msgstr ""
+msgid "Correlate to GPX"
+msgstr "tương quan đến GPX"
 
-msgid "Zoom to native resolution"
-msgstr ""
+msgid "Invalid timezone"
+msgstr "múi giờ không hợp lệ"
 
-msgid "Supported projections are: {0}"
-msgstr ""
+msgid "Invalid offset"
+msgstr "không hợp lệ bù đắp"
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
-msgstr ""
+msgid "Correlate images with GPX track"
+msgstr "Tương quan giữa các hình ảnh với GPX theo dõi"
 
-msgid "Save WMS file"
-msgstr ""
+msgid "Try Again"
+msgstr "Try Again"
 
-msgid "Correlate to GPX"
-msgstr ""
+msgid "No images could be matched!"
+msgstr "Không có hình ảnh có thể được xuất hiện!"
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
-msgstr ""
+msgstr "GPX Files (* tệp .gpx * .gpx.gz)"
 
 msgid "File {0} is loaded yet under the name \"{1}\""
-msgstr ""
+msgstr "File {0} được nạp chưa dưới tên \" {1} \""
 
 msgid "Error while parsing {0}"
-msgstr ""
+msgstr "Lỗi khi phân tích cú pháp {0}"
 
 msgid "Could not read \"{0}\""
-msgstr "Không đọc \"{0}\" được"
+msgstr "Không thể đọc \" {0} \""
 
 msgid ""
 "<html>Take a photo of your GPS receiver while it displays the "
 "time.<br>Display that photo here.<br>And then, simply capture the time you "
 "read on the photo and select a timezone<hr></html>"
 msgstr ""
+"<Html> Chụp ảnh của máy thu GPS của bạn trong khi nó sẽ hiển thịThời gian. "
+"<br> Hiển thị ảnh ở đây. <br> Và sau đó, chỉ cần nắm bắt được thời gian "
+"bạnĐọc vào ảnh và chọn múi giờ <hr> </ html>"
 
 msgid "Photo time (from exif):"
-msgstr ""
+msgstr "Ảnh thời gian (từ Exif):"
 
 msgid "Gps time (read from the above photo): "
-msgstr ""
+msgstr "thời gian Gps (đọc từ các bức ảnh trên): "
 
 msgid "I am in the timezone of: "
-msgstr ""
+msgstr "Tôi đang ở múi giờ của: "
 
 msgid "No date"
-msgstr ""
+msgstr "Không có ngày"
 
 msgid "Open another photo"
-msgstr ""
+msgstr "Mở một ảnh khác"
 
 msgid "Synchronize time from a photo of the GPS receiver"
-msgstr ""
+msgstr "Đồng bộ hóa thời gian từ một bức ảnh của các máy thu GPS"
 
 msgid ""
 "Error while parsing the date.\n"
 "Please use the requested format"
 msgstr ""
+"Lỗi trong khi phân tích ngày. \n"
+"Xin vui lòng sử dụng định dạng theo yêu cầu"
 
 msgid "Invalid date"
-msgstr ""
+msgstr "Ngày không hợp lệ"
 
 msgid "<No GPX track loaded yet>"
-msgstr ""
+msgstr "<Không theo dõi GPX nạp chưa>"
 
 msgid "GPX track: "
-msgstr ""
+msgstr "GPX ca khúc: "
 
 msgid "Open another GPX trace"
-msgstr ""
+msgstr "Mở một dấu vết GPX"
 
 msgid ""
 "<html>Use photo of an accurate clock,<br>e.g. GPS receiver display</html>"
 msgstr ""
+"<Html> Sử dụng hình ảnh của một chiếc đồng hồ chính xác, ví dụ như màn hình "
+"hiển thị <br> thu GPS </ html>"
 
 msgid "Auto-Guess"
-msgstr ""
+msgstr "Auto-Guess"
 
 msgid "Matches first photo with first gpx point"
-msgstr ""
+msgstr "Trận đấu đầu tiên với điểm ảnh GPX đầu tiên"
 
 msgid "Manual adjust"
-msgstr ""
+msgstr "Manual điều chỉnh"
 
 msgid "Override position for: "
-msgstr ""
+msgstr "Ghi đè vị trí cho: "
 
 msgid "Images with geo location in exif data ({0}/{1})"
-msgstr ""
+msgstr "hình ảnh với vị trí địa lý trong dữ liệu Exif ({0} / {1})"
 
 msgid "Images that are already tagged ({0}/{1})"
-msgstr ""
+msgstr "Những hình ảnh đó đã được gắn thẻ ({0} / {1})"
 
 msgid "Show Thumbnail images on the map"
-msgstr ""
+msgstr "Hiển thị hình ảnh thu nhỏ trên bản đồ"
 
 msgid "Timezone: "
-msgstr ""
+msgstr "Timezone: "
 
 msgid "Offset:"
-msgstr ""
-
-msgid "Correlate images with GPX track"
-msgstr ""
+msgstr "Offset:"
 
 msgid "Correlate"
-msgstr ""
-
-msgid "Invalid timezone"
-msgstr ""
-
-msgid "Invalid offset"
-msgstr ""
-
-msgid "Try Again"
-msgstr ""
-
-msgid "No images could be matched!"
-msgstr ""
+msgstr "Tương quan"
 
 msgid "No gpx selected"
-msgstr ""
+msgstr "Không GPX chọn"
 
 msgid "<html>Matched <b>{0}</b> of <b>{1}</b> photo to GPX track.</html>"
 msgid_plural ""
 "<html>Matched <b>{0}</b> of <b>{1}</b> photos to GPX track.</html>"
 msgstr[0] ""
-msgstr[1] ""
+"<html> kết hợp <b> {0} </ b> của <b> {1} </ b> ảnh để GPX theo dõi. </ html>"
 
 msgid "Timezone: {0}"
-msgstr ""
+msgstr "Múi giờ: {0}"
 
 msgid "Minutes: {0}"
-msgstr ""
+msgstr "Minutes: {0}"
 
 msgid "Seconds: {0}"
-msgstr ""
+msgstr "Giây: {0}"
 
 msgid "(Time difference of {0} day)"
 msgid_plural "Time difference of {0} days"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "(Thời gian khác biệt của {0} ngày)"
 
 msgid ""
 "An error occurred while trying to match the photos to the GPX track. You can "
 "adjust the sliders to manually match the photos."
 msgstr ""
+"Đã xảy ra lỗi trong khi cố gắng để phù hợp với các bức ảnh để theo dõi GPX. "
+"Bạn có thểĐiều chỉnh các thanh trượt để tay phù hợp với hình ảnh."
 
 msgid "Matching photos to track failed"
-msgstr ""
+msgstr "Matching ảnh để theo dõi các thất bại"
 
 msgid "Adjust timezone and offset"
-msgstr ""
+msgstr "Điều chỉnh múi giờ và bù đắp"
 
 msgid "The selected photos do not contain time information."
-msgstr ""
+msgstr "Những hình ảnh được lựa chọn không chứa thông tin thời gian."
 
 msgid "Photos do not contain time information"
-msgstr ""
+msgstr "Hình ảnh không chứa thông tin thời gian"
 
 msgid ""
 "The selected GPX track does not contain timestamps. Please select another "
 "one."
-msgstr ""
+msgstr "Các GPX track được chọn không có thời gian. Hãy chọn mộtMột."
 
 msgid "GPX Track has no time information"
-msgstr ""
+msgstr "GPX dõi không có thông tin thời gian"
 
 msgid "You should select a GPX track"
-msgstr ""
+msgstr "Bạn nên chọn một ca khúc GPX"
 
 msgid "No selected GPX track"
-msgstr ""
+msgstr "Không có lựa chọn GPX theo dõi"
 
 msgid ""
 "Error while parsing timezone.\n"
 "Expected format: {0}"
 msgstr ""
+"Lỗi trong khi phân tích múi giờ. \n"
+"Định dạng dự kiến: {0}"
 
 msgid ""
 "Error while parsing offset.\n"
 "Expected format: {0}"
 msgstr ""
+"Lỗi khi phân tích cú pháp bù đắp. \n"
+"Định dạng dự kiến: {0}"
 
 msgid "Extracting GPS locations from EXIF"
-msgstr ""
+msgstr "Extracting vị trí GPS từ EXIF"
 
 msgid "Starting directory scan"
-msgstr ""
+msgstr "Bắt đầu từ thư mục quét"
 
 msgid "Read photos..."
-msgstr ""
+msgstr "Đọc bức ảnh ..."
 
 msgid "Reading {0}..."
-msgstr ""
+msgstr "Đọc {0} ..."
 
 msgid "Unable to get canonical path for directory {0}\n"
-msgstr ""
+msgstr "Không thể có được con đường chính tắc cho thư mục {0}\n"
 
 msgid "Scanning directory {0}"
-msgstr ""
+msgstr "thư mục quét {0}"
 
 msgid "Error while getting files from directory {0}\n"
-msgstr ""
+msgstr "Lỗi trong khi nhận được tập tin từ thư mục {0}\n"
 
 msgid "One of the selected files was null"
-msgstr ""
+msgstr "Một trong các tập tin được lựa chọn là vô giá trị"
 
 msgid "Geotagged Images"
-msgstr ""
+msgstr "Những hình ảnh gắn thẻ địa lý"
 
 msgid "{0} image loaded."
 msgid_plural "{0} images loaded."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} hình ảnh được tải."
 
 msgid "{0} was found to be GPS tagged."
 msgid_plural "{0} were found to be GPS tagged."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} đã được tìm thấy bị GPS gắn thẻ."
 
 msgid "{0} has updated GPS data."
 msgid_plural "{0} have updated GPS data."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} đã được cập nhật dữ liệu GPS."
 
 msgid "Delete image file from disk"
-msgstr ""
+msgstr "Xóa file ảnh từ đĩa"
 
 msgid ""
 "<html><h3>Delete the file {0} from disk?<p>The image file will be "
 "permanently lost!</h3></html>"
 msgstr ""
+"<Html> <h3> Xóa các tập tin {0} từ đĩa? <P> Các tập tin ảnh sẽ đượcVĩnh viễn "
+"mất đi! </ H3> </ html>"
 
 msgid "Image file could not be deleted."
-msgstr ""
+msgstr "tập tin hình ảnh không thể xóa được."
 
 msgid "No image"
-msgstr ""
+msgstr "Không có hình ảnh"
 
 msgid "Loading {0}"
-msgstr ""
+msgstr "Loading {0}"
 
 msgid "Error on file {0}"
-msgstr ""
+msgstr "Lỗi trên tập {0}"
 
 msgid "Display geotagged images"
-msgstr ""
+msgstr "Hiển thị hình ảnh gắn thẻ địa lý"
 
 msgid "Previous"
-msgstr ""
+msgstr "trước"
 
 msgid "Show previous Image"
-msgstr ""
+msgstr "Show Image trước"
 
 msgid "Geoimage: {0}"
-msgstr ""
+msgstr "Geoimage: {0}"
 
 msgid "Remove photo from layer"
-msgstr ""
+msgstr "Xóa ảnh từ layer"
 
 msgid "Delete File from disk"
-msgstr ""
+msgstr "Xóa tập tin từ đĩa"
 
 msgid "Copy image path"
-msgstr ""
+msgstr "Copy đường dẫn hình ảnh"
 
 msgid "Next"
-msgstr ""
+msgstr "Next"
 
 msgid "Show next Image"
-msgstr ""
+msgstr "Hiển thị hình bên cạnh"
 
 msgid "Show first Image"
-msgstr ""
+msgstr "Hiển thị ảnh đầu tiên"
 
 msgid "Show last Image"
-msgstr ""
+msgstr "Show Image cuối cùng"
 
 msgid "Center view"
-msgstr ""
+msgstr "Trung tâm xem"
 
 msgid "Zoom best fit and 1:1"
-msgstr ""
+msgstr "Zoom phù hợp nhất và 1: 1"
 
 msgid "Move dialog to the side pane"
-msgstr ""
+msgstr "Di chuyển hộp thoại để các cửa sổ bên"
 
 msgid ""
 "\n"
 "Altitude: {0} m"
 msgstr ""
+"\n"
+"Độ cao: {0} m"
 
 msgid ""
 "\n"
 "Speed: {0} km/h"
 msgstr ""
+"\n"
+"Tốc độ: {0} km / h"
 
 msgid ""
 "\n"
 "Direction {0}°"
 msgstr ""
+"\n"
+"Hướng {0} °"
 
 msgid ""
 "\n"
 "EXIF time: {0}"
 msgstr ""
+"\n"
+"Hiện EXIF: {0}"
 
 msgid ""
 "\n"
 "GPS time: {0}"
 msgstr ""
-
-msgid "JPEG images (*.jpg)"
-msgstr ""
+"\n"
+"Thời gian GPS: {0}"
 
 msgid "Show thumbnails"
-msgstr ""
+msgstr "Hiển thị hình thu nhỏ"
 
 msgid "Show image thumbnails instead of icons."
-msgstr ""
+msgstr "Hiển thị ảnh thu nhỏ thay vì biểu tượng."
 
 msgid "Choose visible tracks"
-msgstr ""
+msgstr "Chọn bài hát có thể nhìn thấy"
 
 msgid "Select by date"
-msgstr ""
+msgstr "Chọn theo ngày"
 
 msgid ""
 "<html>Select all tracks that you want to be displayed. You can drag select a "
 "range of tracks or use CTRL+Click to select specific ones. The map is "
 "updated live in the background. Open the URLs by double clicking them.</html>"
 msgstr ""
+"<Html> Chọn tất cả các bài hát mà bạn muốn được hiển thị. Bạn có thể kéo "
+"chọn mộtPhạm vi của bài hát hoặc sử dụng tổ hợp phím CTRL + Nhấn vào đây để "
+"chọn những người cụ thể. Các bản đồ làCập nhật trực tiếp trong nền. Mở URL "
+"bằng nhấp kép. </ Html>"
 
 msgid "Set track visibility for {0}"
-msgstr ""
+msgstr "Đặt theo dõi khả năng hiển thị cho {0}"
 
 msgid "Show all"
-msgstr ""
+msgstr "Hiển thị tất cả"
 
 msgid "Show selected only"
-msgstr ""
+msgstr "Hiện chỉ có lựa chọn"
 
 msgid "Convert to data layer"
-msgstr ""
+msgstr "Chuyển đổi sang lớp dữ liệu"
 
 msgid ""
 "<html>Upload of unprocessed GPS data as map data is considered "
 "harmful.<br>If you want to upload traces, look here:</html>"
 msgstr ""
+"<Html> Upload dữ liệu GPS chưa qua chế biến như là dữ liệu bản đồ được coi "
+"làHại <br> Nếu bạn muốn tải lên dấu vết, xem ở đây:. </ Html>"
 
 msgid "Customize track drawing"
-msgstr ""
+msgstr "Tùy theo dõi bản vẽ"
 
 msgid "From"
-msgstr ""
+msgstr "Từ"
 
 msgid "To"
-msgstr ""
+msgstr "Để"
 
 msgid "No timestamp"
-msgstr ""
+msgstr "Không có dấu thời gian"
 
 msgid "Select to download OSM data."
-msgstr ""
+msgstr "Chọn để tải dữ liệu OSM."
 
 msgid "Select to download GPS traces."
-msgstr ""
+msgstr "Chọn để tải về dấu vết GPS."
 
 msgid "Download everything within:"
-msgstr ""
+msgstr "Tải về tất cả mọi thứ bên trong:"
 
 msgid "meters"
-msgstr ""
+msgstr "mét"
 
 msgid "Maximum area per request:"
-msgstr ""
-
-msgid "sq km"
-msgstr ""
+msgstr "diện tích tối đa cho mỗi yêu cầu:"
 
 msgid "Download near:"
-msgstr ""
+msgstr "Tải gần:"
 
 msgid "track only"
-msgstr ""
+msgstr "đường chỉ"
 
 msgid "waypoints only"
-msgstr ""
+msgstr "waypoints chỉ"
 
 msgid "track and waypoints"
-msgstr ""
+msgstr "theo dõi và waypoints"
 
 msgid "Click to download"
-msgstr ""
+msgstr "Nhấn vào đây để tải về"
 
 msgid "Click to cancel"
-msgstr ""
+msgstr "Nhấn vào đây để hủy bỏ"
 
 msgid "Download from OSM along this track"
-msgstr ""
+msgstr "Tải từ OSM cùng ca khúc này"
 
 msgid "Calculating Download Area"
-msgstr ""
+msgstr "Tính toán Tải Area"
 
 msgid "Precache imagery tiles along this track"
-msgstr ""
+msgstr "Precache gạch hình ảnh cùng ca khúc này"
 
 msgid "Precaching WMS"
-msgstr ""
+msgstr "Precaching WMS"
 
 msgid "Please select the imagery layer."
-msgstr ""
+msgstr "Hãy chọn layer hình ảnh."
 
 msgid "Select imagery layer"
-msgstr ""
+msgstr "Chọn layer hình ảnh"
 
 msgid "There are no imagery layers."
-msgstr ""
+msgstr "Không có các lớp hình ảnh."
 
 msgid "No imagery layers"
-msgstr ""
+msgstr "Không có các lớp hình ảnh"
 
 msgid "Velocity, km/h"
-msgstr ""
+msgstr "Velocity, km / h"
 
 msgid "HDOP, m"
-msgstr ""
+msgstr "HDOP, m"
 
 msgid "Time"
-msgstr ""
+msgstr "Thời gian"
 
 msgid "Direction"
-msgstr ""
+msgstr "Direction"
 
 msgid "gps point"
-msgstr ""
+msgstr "gps điểm"
 
 msgid "Import Audio"
-msgstr ""
+msgstr "Import Audio"
 
 msgid ""
 "<html>The data in the GPX layer ''{0}'' has been downloaded from the "
 "server.<br>Because its way points do not include a timestamp we cannot "
 "correlate them with audio data.</html>"
 msgstr ""
+"<Html> Các dữ liệu trong lớp GPX '' {0} '' đã được tải về từ cácServer. <br> "
+"Bởi vì điểm cách nó không bao gồm một dấu thời gian, chúng tôi không "
+"thểTương quan của chúng với dữ liệu âm thanh. </ Html>"
 
 msgid "Import not possible"
-msgstr ""
+msgstr "Import không thể"
 
 msgid "Wave Audio files (*.wav)"
-msgstr ""
+msgstr "file sóng âm thanh (* .wav)"
 
 msgid "Audio markers from {0}"
-msgstr ""
+msgstr "dấu hiệu âm thanh từ {0}"
 
 msgid "No GPX track available in layer to associate audio with."
-msgstr ""
+msgstr "Không GPX track có sẵn trong lớp để kết hợp âm thanh với."
 
 msgid ""
 "Some waypoints with timestamps from before the start of the track or after "
 "the end were omitted or moved to the start."
 msgstr ""
+"Một số điểm tọa độ với thời gian từ trước khi bắt đầu theo dõi hoặc sau "
+"khiCuối cùng đã được bỏ qua hoặc di chuyển để bắt đầu."
 
 msgid ""
 "Some waypoints which were too far from the track to sensibly estimate their "
 "time were omitted."
 msgstr ""
+"Một số điểm tọa độ đó là quá xa để theo dõi một cách hợp lý ước tính của "
+"họThời gian đã được bỏ qua."
 
 msgid "Import images"
-msgstr ""
+msgstr "Đưa hình ảnh"
 
 msgid ""
 "<html>The data in the GPX layer ''{0}'' has been downloaded from the "
 "server.<br>Because its way points do not include a timestamp we cannot "
 "correlate them with images.</html>"
 msgstr ""
+"<Html> Các dữ liệu trong lớp GPX '' {0} '' đã được tải về từ cácServer. <br> "
+"Bởi vì điểm cách nó không bao gồm một dấu thời gian, chúng tôi không "
+"thểTương quan của chúng với hình ảnh. </ Html>"
 
 msgid "Markers From Named Points"
-msgstr ""
+msgstr "Markers Từ điểm đặt tên"
 
 msgid "Named Trackpoints from {0}"
-msgstr ""
+msgstr "Đặt tên trên đoạn đường từ {0}"
 
 msgid "gps marker"
-msgstr ""
+msgstr "gps marker"
 
 msgid "marker"
 msgid_plural "markers"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "đánh dấu"
 
 msgid "{0} consists of {1} marker"
 msgid_plural "{0} consists of {1} markers"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} bao gồm {1} đánh dấu"
 
 msgid "No existing audio markers in this layer to offset from."
-msgstr ""
+msgstr "Không có dấu hiệu âm thanh hiện có trong lớp này để bù đắp từ."
 
 msgid "Show Text/Icons"
-msgstr ""
+msgstr "Show Text / Icons"
 
 msgid "Toggle visible state of the marker text and icons."
 msgstr ""
+"Chuyển đổi trạng thái ban đầu của văn bản đánh dấu và các biểu tượng."
 
 msgid "Synchronize Audio"
-msgstr ""
+msgstr "Synchronize Audio"
 
 msgid ""
 "You need to pause audio at the moment when you hear your synchronization cue."
 msgstr ""
+"Bạn cần phải tạm dừng âm thanh vào thời điểm khi bạn nghe cue đồng bộ hóa "
+"của bạn."
 
 msgid "Audio synchronized at point {0}."
-msgstr ""
+msgstr "Audio đồng bộ tại {0} điểm."
 
 msgid "Unable to synchronize in layer being played."
-msgstr ""
+msgstr "Không thể đồng bộ hóa trong lớp đang được chơi."
 
 msgid "Make Audio Marker at Play Head"
-msgstr ""
+msgstr "Hãy nghe Marker tại Chơi Head"
 
 msgid ""
 "You need to have paused audio at the point on the track where you want the "
 "marker."
 msgstr ""
+"Bạn cần có âm thanh tạm dừng tại các điểm trên đường đua nơi bạn muốnĐánh dấu"
 
 msgid ""
 "You need to drag the play head near to the GPX track whose associated sound "
 "track you were playing (after the first marker)."
 msgstr ""
+"Bạn cần phải kéo đầu chơi gần để theo dõi GPX có liên quan đến âm thanhTheo "
+"dõi bạn đang chơi (sau khi đánh dấu lần đầu tiên)."
 
 msgid ""
 "You need to SHIFT-drag the play head onto an audio marker or onto the track "
 "point where you want to synchronize."
 msgstr ""
+"Bạn cần phải Shift-kéo đầu chơi vào một dấu hiệu âm thanh hoặc trên đường "
+"đuaĐiểm mà bạn muốn đồng bộ hóa."
 
 msgid "Unable to create new audio marker."
-msgstr ""
+msgstr "Không thể tạo marker âm thanh mới."
 
 msgid "There was an error while trying to display the URL for this marker"
-msgstr ""
+msgstr "Có lỗi trong khi cố gắng để hiển thị các URL cho điểm đánh dấu này"
 
 msgid "(URL was: "
-msgstr ""
+msgstr "(URL là: "
 
 msgid "Select the map painting styles"
-msgstr ""
+msgstr "Chọn các kiểu vẽ bản đồ"
 
 msgid "Failed to load Mappaint styles from ''{0}''. Exception was: {1}"
-msgstr ""
+msgstr "Không thể tải Mappaint phong cách từ '' {0} '' ngoại lệ là:. {1}"
 
 msgid "loading style ''{0}''..."
-msgstr ""
+msgstr "bốc phong cách '' {0} '' ..."
 
 msgid ""
 "There was an error when loading this style. Select ''Info'' from the right "
@@ -9343,80 +10162,88 @@ msgid_plural ""
 "There were {0} errors when loading this style. Select ''Info'' from the "
 "right click menu for details."
 msgstr[0] ""
-msgstr[1] ""
+"Có lỗi khi tải phong cách này. Chọn '' Thông tin '' từ bên phảiNhấp vào "
+"trình đơn để biết chi tiết."
 
 msgid "Failed to parse Mappaint styles from ''{0}''. Error was: {1}"
-msgstr ""
+msgstr "Không phân tích Mappaint phong cách từ '' {0} '' Lỗi là:. {1}"
 
 msgid ""
 "Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use "
 "''{2}'' instead."
 msgstr ""
+"Phát hiện bị phản đối '' {0} '' trong '' {1} '' đó sẽ sớm bị xóa. Sử dụng'' "
+"{2} '' thay thế."
 
 msgid "Illegal dash pattern, values must be positive"
-msgstr ""
+msgstr "mẫu gạch ngang bất hợp pháp, giá trị phải được tích cực"
 
 msgid "Illegal dash pattern, at least one value must be > 0"
-msgstr ""
+msgstr "mẫu gạch ngang bất hợp pháp, ít nhất một giá trị phải được> 0"
 
 msgid ""
 "Failed to parse Mappaint styles from ''{0}''. Error was: [{1}:{2}] {3}"
 msgstr ""
+"Không phân tích Mappaint phong cách từ '' {0} '' Lỗi là:. [{1}: {2}] {3}"
 
 msgid "Access Token Key:"
-msgstr ""
+msgstr "Access token Key:"
 
 msgid "Access Token Secret:"
-msgstr ""
+msgstr "Access token Secret:"
 
 msgid "Save Access Token in preferences"
-msgstr ""
+msgstr "Save truy cập token trong tùy chọn"
 
 msgid ""
 "<html>Select to save the Access Token in the JOSM preferences.<br>Unselect "
 "to use the Access Token in this JOSM session only.</html>"
 msgstr ""
+"<Html> Chọn để lưu Token truy cập trong các ưu đãi JOSM. <br> Bỏ chọnSử dụng "
+"Token Access trong phiên JOSM này mà thôi. </ Html>"
 
 msgid "Use default settings"
-msgstr ""
+msgstr "Sử dụng cài đặt mặc định"
 
 msgid "Consumer Key:"
-msgstr ""
+msgstr "Key tiêu dùng:"
 
 msgid "Consumer Secret:"
-msgstr ""
+msgstr "Secret tiêu dùng:"
 
 msgid "Request Token URL:"
-msgstr ""
+msgstr "Yêu cầu token URL:"
 
 msgid "Access Token URL:"
-msgstr ""
+msgstr "Access token URL:"
 
 msgid "Authorize URL:"
-msgstr ""
+msgstr "Ủy URL:"
 
 msgid "Click to reset the OAuth settings to default values"
-msgstr ""
+msgstr "Nhấn vào đây để thiết lập lại các thiết lập OAuth giá trị mặc định"
 
 msgid "Click to abort resetting to the OAuth default values"
-msgstr ""
+msgstr "Nhấn vào đây để hủy bỏ cài đặt lại các giá trị mặc định OAuth"
 
 msgid ""
 "<html>JOSM is about to reset the OAuth settings to default values.<br>The "
 "current custom settings are not saved.</html>"
 msgstr ""
+"<Html> JOSM sắp đặt lại các thiết lập OAuth giá trị mặc định. <br>Thiết lập "
+"tùy chỉnh hiện tại sẽ không được lưu. </ Html>"
 
 msgid "Overwrite custom OAuth settings?"
-msgstr ""
+msgstr "Ghi đè lên các thiết lập tùy chỉnh OAuth?"
 
 msgid "Fully automatic"
-msgstr ""
+msgstr "Hoàn toàn tự động"
 
 msgid "Semi-automatic"
-msgstr ""
+msgstr "bán tự động"
 
 msgid "Manual"
-msgstr ""
+msgstr "Manual"
 
 msgid ""
 "<html>Run a fully automatic procedure to get an access token from the OSM "
@@ -9424,6 +10251,10 @@ msgid ""
 "fully<br>automatically authorizes the user and retrieves an Access "
 "Token.</html>"
 msgstr ""
+"<Html> Chạy một thủ tục hoàn toàn tự động để có được một thẻ truy cập từ "
+"OSMJOSM website. <br> Truy cập các trang web OSM thay mặt của người sử dụng "
+"JOSM vàHoàn toàn tự động <br> ủy quyền cho người sử dụng và lấy ra một "
+"AccessToken. </ Html>"
 
 msgid ""
 "<html>Run a semi-automatic procedure to get an access token from the OSM "
@@ -9432,11 +10263,18 @@ msgid ""
 "external browser<br>to authenticate itself and to accept the request token "
 "submitted by JOSM.</html>"
 msgstr ""
+"<Html> Chạy một thủ tục bán tự động để có được một thẻ truy cập từ OSMJOSM "
+"website. <br> Nộp các yêu cầu tiêu chuẩn OAuth để có được một yêu cầu "
+"tokenVà một token <br> Access. Nó công văn hướng người dùng đến trang web "
+"của OSM trong mộtTrình duyệt ngoài <br> để xác thực bản thân và chấp nhận "
+"yêu cầu mã thông báoDo JOSM. </ Html>"
 
 msgid ""
 "<html>Enter an Access Token manually if it was generated and retrieved "
 "outside<br>of JOSM.</html>"
 msgstr ""
+"<Html> Nhập một thẻ truy cập bằng tay nếu nó được tạo ra và lấy raBên ngoài "
+"<br> của JOSM. </ Html>"
 
 msgid ""
 "Please enter your OSM user name and password. The password will "
@@ -9444,71 +10282,87 @@ msgid ""
 "will be submitted to the OSM server <strong>only once</strong>. Subsequent "
 "data upload requests don''t use your password any more."
 msgstr ""
+"Xin hãy nhập tên người dùng và mật khẩu của bạn OSM Các mật khẩu. Sẽ<Strong> "
+"không </ strong> được lưu trong văn bản rõ ràng trong các ưu đãi JOSM và "
+"nóSẽ được gửi đến máy chủ OSM <strong> chỉ một lần </ strong>. Tiếp theoYêu "
+"cầu upload dữ liệu don''t sử dụng mật khẩu của bạn nữa."
 
 msgid "Username: "
-msgstr ""
+msgstr "Tên đăng nhập: "
 
 msgid "Password: "
-msgstr ""
+msgstr "Mật khẩu: "
 
 msgid ""
 "<strong>Warning:</strong> JOSM does login <strong>once</strong> using a "
 "secure connection."
 msgstr ""
+"<Strong> Cảnh báo: </ strong> JOSM không đăng nhập <strong> lần </ strong> "
+"bằng cách sử dụng mộtBảo đảm kết nối."
 
 msgid "Granted rights"
-msgstr ""
+msgstr "quyền Cấp"
 
 msgid "Advanced OAuth properties"
-msgstr ""
+msgstr "Advanced OAuth tài sản"
 
 msgid "Accept Access Token"
-msgstr ""
+msgstr "Chấp nhận truy cập token"
 
 msgid ""
 "<html>You have successfully retrieved an OAuth Access Token from the OSM "
 "website. Click on <strong>{0}</strong> to accept the token. JOSM will use it "
 "in subsequent requests to gain access to the OSM API.</html>"
 msgstr ""
+"<Html> Bạn đã thành công lấy ra một OAuth truy cập token từ OSMTrang web. "
+"Nhấp vào <strong> {0} </ strong> để chấp nhận các token. JOSM sẽ sử dụng "
+"nóTrong yêu cầu tiếp theo để đạt được quyền truy cập vào các API OSM. </ "
+"Html>"
 
 msgid "Authorize now"
-msgstr ""
+msgstr "Ủy bây giờ"
 
 msgid "Click to redirect you to the authorization form on the JOSM web site"
 msgstr ""
+"Nhấn vào đây để chuyển hướng bạn đến các hình thức ủy quyền trên trang web "
+"JOSM"
 
 msgid "Back"
-msgstr "Quay lại"
+msgstr "Back"
 
 msgid "Run the automatic authorization steps again"
-msgstr ""
+msgstr "Chạy các bước cấp phép tự động một lần nữa"
 
 msgid "Test Access Token"
-msgstr ""
+msgstr "Test truy cập token"
 
 msgid "Please enter your OSM user name"
-msgstr ""
+msgstr "Hãy nhập tên người dùng OSM của bạn"
 
 msgid "The user name cannot be empty. Please enter your OSM user name"
 msgstr ""
+"Tên người dùng không thể để trống. Vui lòng nhập tên người dùng OSM của bạn"
 
 msgid "Please enter your OSM password"
-msgstr ""
+msgstr "Hãy nhập mật khẩu OSM của bạn"
 
 msgid "The password cannot be empty. Please enter your OSM password"
-msgstr ""
+msgstr "Mật khẩu không thể để trống. Vui lòng nhập mật khẩu OSM của bạn"
 
 msgid "Authorize JOSM to access the OSM API"
-msgstr ""
+msgstr "Ủy JOSM để truy cập API OSM"
 
 msgid ""
 "<html>The automatic process for retrieving an OAuth Access Token<br>from the "
 "OSM server failed.<br><br>Please try again or choose another kind of "
 "authorization process,<br>i.e. semi-automatic or manual authorization.</html>"
 msgstr ""
+"<Html> Các quá trình tự động để lấy một <br> OAuth truy cập token từServer "
+"OSM thất bại. <br> Vui lòng thử lại hoặc chọn một loạiQuá trình cấp phép, "
+"<br> tức là bán tự động hoặc bằng tay ủy quyền. </ Html>"
 
 msgid "OAuth authorization failed"
-msgstr ""
+msgstr "ủy quyền OAuth thất bại"
 
 msgid ""
 "<html>The automatic process for retrieving an OAuth Access Token<br>from the "
@@ -9516,176 +10370,198 @@ msgid ""
 "from the OAuth Authorize Endpoint URL ''{0}''.<br><br>Please check your "
 "advanced setting and try again.</html>"
 msgstr ""
+"<Html> Các quá trình tự động để lấy một <br> OAuth truy cập token từServer "
+"OSM thất bại vì JOSM đã không thể xây dựng một URL <br> đăng nhập hợp lệTừ "
+"OAuth Authorize Endpoint URL '' {0} ''. <br> Vui lòng kiểm tra của bạnThiết "
+"lập tiên tiến và thử lại. </ Html>"
 
 msgid ""
 "<html>The automatic process for retrieving an OAuth Access Token<br>from the "
 "OSM server failed. JOSM failed to log into {0}<br>for user "
 "{1}.<br><br>Please check username and password and try again.</html>"
 msgstr ""
+"<Html> Các quá trình tự động để lấy một <br> OAuth truy cập token từServer "
+"OSM thất bại. JOSM không đăng nhập vào {0} <br> cho người sử dụng{1}. <br> "
+"Vui lòng kiểm tra tên đăng nhập và mật khẩu và thử lại. </ Html>"
 
 msgid ""
 "Please enter an OAuth Access Token which is authorized to access the OSM "
 "server ''{0}''."
 msgstr ""
+"Xin vui lòng nhập một OAuth truy cập token nước có thẩm quyền để truy cập "
+"vào OSMMáy chủ '' {0} ''."
 
 msgid "Access Token"
-msgstr ""
+msgstr "Access token"
 
 msgid "Advanced OAuth parameters"
-msgstr ""
+msgstr "Advanced OAuth thông số"
 
 msgid "Enter the OAuth Access Token"
-msgstr ""
+msgstr "Nhập OAuth truy cập token"
 
 msgid "Enter advanced OAuth properties"
-msgstr ""
+msgstr "Nhập thuộc tính OAuth tiên tiến"
 
 msgid ""
 "<html><body>Please enter an OAuth Access Token which is authorized to access "
 "the OSM server ''{0}''.</body></html>"
 msgstr ""
+"<Html> <body> Xin vui lòng nhập một OAuth truy cập token đó được phép truy "
+"cậpMáy chủ OSM '' {0} ''. </ Body> </ html>"
 
 msgid "Please enter an Access Token Key"
-msgstr ""
+msgstr "Hãy nhập một truy cập token Key"
 
 msgid ""
 "The Access Token Key must not be empty. Please enter an Access Token Key"
 msgstr ""
+"Việc truy cập token Key không phải trống. Vui lòng nhập một truy cập token "
+"Key"
 
 msgid "Please enter an Access Token Secret"
-msgstr ""
+msgstr "Hãy nhập một truy cập token Secret"
 
 msgid ""
 "The Access Token Secret must not be empty. Please enter an Access Token "
 "Secret"
 msgstr ""
+"Việc truy cập token Secret không phải trống. Vui lòng nhập một token "
+"AccessSecret"
 
 msgid "Click to test the Access Token"
-msgstr ""
+msgstr "Nhấn vào đây để kiểm tra truy cập token"
 
 msgid ""
 "With OAuth you grant JOSM the right to upload map data and GPS tracks on "
 "your behalf (<a href=\"{0}\">more info...</a>)."
 msgstr ""
+"Với OAuth bạn cấp JOSM quyền upload dữ liệu bản đồ và GPS theo dõi trênThay "
+"mặt bạn (<a href=\"{0}\"> biết thêm ... </a>)."
 
 msgid "Please select an authorization procedure: "
-msgstr ""
+msgstr "Hãy chọn một thủ tục ủy quyền: "
 
 msgid "Get an Access Token for ''{0}''"
-msgstr ""
+msgstr "Nhận được một thẻ truy cập cho '' {0} ''"
 
 msgid "Close the dialog and cancel authorization"
-msgstr ""
+msgstr "Đóng hộp thoại và hủy ủy quyền"
 
 msgid "Close the dialog and accept the Access Token"
-msgstr ""
+msgstr "Đóng hộp thoại và chấp nhận truy cập token"
 
 msgid "Failed to cancel running OAuth operation"
-msgstr ""
+msgstr "Không thể hủy bỏ chạy hoạt động OAuth"
 
 msgid "Retrieving OAuth Request Token from ''{0}''"
-msgstr ""
+msgstr "Lấy OAuth Request token từ '' {0} ''"
 
 msgid "Retrieving OAuth Access Token from ''{0}''"
-msgstr ""
+msgstr "Lấy OAuth truy cập token từ '' {0} ''"
 
 msgid "OSM website did not return a session cookie in response to ''{0}'',"
 msgstr ""
+"OSM website không trở về một session cookie để đáp ứng với '' {0} '',"
 
 msgid ""
 "Failed to authenticate user ''{0}'' with password ''***'' as OAuth user"
 msgstr ""
+"Không thể xác thực người dùng '' {0} '' với mật khẩu '' *** '' như OAuth "
+"người sử dụng"
 
 msgid "Failed to authorize OAuth request  ''{0}''"
-msgstr ""
+msgstr "Không cho phép yêu cầu OAuth '' {0} ''"
 
 msgid "Authorizing OAuth Request token ''{0}'' at the OSM website ..."
-msgstr ""
+msgstr "ủy quyền OAuth Request token '' {0} '' tại trang web OSM ..."
 
 msgid "Initializing a session at the OSM website..."
-msgstr ""
+msgstr "Đang khởi tạo một phiên họp tại các trang web OSM ..."
 
 msgid "Authenticating the session for user ''{0}''..."
-msgstr ""
+msgstr "Chứng thực phiên cho người dùng '' {0} '' ..."
 
 msgid "Authorizing request token ''{0}''..."
-msgstr ""
+msgstr "Về việc ủy ​​quyền yêu cầu mã thông báo '' {0} '' ..."
 
 msgid "Logging out session ''{0}''..."
-msgstr ""
+msgstr "Đăng xuất phiên '' {0} '' ..."
 
 msgid "Allow to upload map data"
-msgstr ""
+msgstr "Cho phép upload dữ liệu bản đồ"
 
 msgid "Select to grant JOSM the right to upload map data on your behalf"
-msgstr ""
+msgstr "Chọn cấp JOSM quyền upload dữ liệu bản đồ thay cho bạn"
 
 msgid "Allow to upload GPS traces"
-msgstr ""
+msgstr "Cho phép tải lên dấu vết GPS"
 
 msgid "Select to grant JOSM the right to upload GPS traces on your behalf"
-msgstr ""
+msgstr "Chọn cấp JOSM quyền tải lên dấu vết GPS thay cho bạn"
 
 msgid "Allow to download your private GPS traces"
-msgstr ""
+msgstr "Cho phép tải dấu vết tin GPS của bạn"
 
 msgid ""
 "Select to grant JOSM the right to download your private GPS traces into JOSM "
 "layers"
-msgstr ""
+msgstr "Chọn cấp JOSM quyền tải về dấu vết tin GPS của bạn vào JOSMLớp"
 
 msgid "Allow to read your preferences"
-msgstr ""
+msgstr "Cho phép đọc sở thích của bạn"
 
 msgid "Select to grant JOSM the right to read your server preferences"
-msgstr ""
+msgstr "Chọn cấp JOSM quyền để đọc sở thích của máy chủ của bạn"
 
 msgid "Allow to write your preferences"
-msgstr ""
+msgstr "Cho phép để viết sở thích của bạn"
 
 msgid "Select to grant JOSM the right to write your server preferences"
-msgstr ""
+msgstr "Chọn cấp JOSM quyền ghi ưu đãi máy chủ của bạn"
 
 msgid "Allow modifications of notes"
-msgstr ""
+msgstr "cho phép chỉnh sửa các ghi chú"
 
 msgid "Select to grant JOSM the right to modify notes on your behalf"
-msgstr ""
+msgstr "Chọn cấp JOSM quyền sửa đổi ghi chú thay cho bạn"
 
 msgid "Retrieving OAuth Access Token..."
-msgstr ""
+msgstr "Lấy OAuth truy cập token ..."
 
 msgid "<html>Retrieving an OAuth Access Token from ''{0}'' failed.</html>"
-msgstr ""
+msgstr "<html> Lấy một OAuth truy cập token từ '' {0} '' thất bại. </ html>"
 
 msgid "Request Failed"
-msgstr ""
+msgstr "Failed Request"
 
 msgid "Retrieving OAuth Request Token..."
-msgstr ""
+msgstr "Lấy OAuth Request token ..."
 
 msgid "<html>Retrieving an OAuth Request Token from ''{0}'' failed.</html>"
-msgstr ""
+msgstr "<html> Lấy một OAuth Request token từ '' {0} '' thất bại. </ html>"
 
 msgid "Display Advanced OAuth Parameters"
-msgstr ""
+msgstr "Hiển thị thông số OAuth Advanced"
 
 msgid "Retrieve Request Token"
-msgstr ""
+msgstr "Lấy Yêu cầu token"
 
 msgid ""
 "<html>Please click on <strong>{0}</strong> to retrieve an OAuth Request "
 "Token from ''{1}''.</html>"
 msgstr ""
+"<Html> Vui lòng click vào <strong> {0} </ strong> để lấy một yêu cầu "
+"OAuthToken từ '' {1} ''. </ Html>"
 
 msgid "<html>Step 1/3: Retrieve an OAuth Request Token</html>"
-msgstr ""
+msgstr "<html> Bước 1/3: Lấy một Request OAuth token </ html>"
 
 msgid "<html>Step 2/3: Authorize and retrieve an Access Token</html>"
-msgstr ""
+msgstr "<html> Bước 2/3: Ủy quyền và lấy một thẻ truy cập </ html>"
 
 msgid "Request Access Token"
-msgstr ""
+msgstr "Yêu cầu truy cập token"
 
 msgid ""
 "<html>JOSM successfully retrieved a Request Token. JOSM is now launching an "
@@ -9696,45 +10572,58 @@ msgid ""
 "copy the following authorize URL and paste it into the address field of your "
 "browser.</html>"
 msgstr ""
+"<Html> JOSM lấy thành công một Request Token. JOSM hiện đang tung ra "
+"mộtTrang uỷ quyền trong một trình duyệt bên ngoài. Hãy đăng nhập với OSM của "
+"bạnTên đăng nhập và mật khẩu và làm theo hướng dẫn để cho phép các yêu "
+"cầuToken. Sau đó chuyển trở lại hộp thoại này và nhấn vào<Strong> {0} </ "
+"strong> <br> Nếu tung ra trình duyệt bên ngoài không bạn có thểSao chép URL "
+"ủy quyền sau đây và dán nó vào trường địa chỉ của bạnTrình duyệt. </ Html>"
 
 msgid "Go back to step 1/3"
-msgstr ""
+msgstr "Quay trở lại bước 1/3"
 
 msgid "<html>Step 3/3: Successfully retrieved an Access Token</html>"
-msgstr ""
+msgstr "<html> Bước 3/3: lấy thành công một thẻ truy cập </ html>"
 
 msgid ""
 "<html>JOSM has successfully retrieved an Access Token. You can now accept "
 "this token. JOSM will use it in the future for authentication and "
 "authorization to the OSM server.<br><br>The access token is: </html>"
 msgstr ""
+"<Html> JOSM đã lấy thành công một token Access. Bây giờ bạn có thể chấp "
+"nhậnToken này. JOSM sẽ sử dụng nó trong tương lai để xác thực và. Ủy quyền "
+"cho máy chủ OSM <br> <br> Các mã thông báo truy cập là: </ html>"
 
 msgid "Click to retrieve a Request Token"
-msgstr ""
+msgstr "Nhấn vào đây để lấy lại một yêu cầu token"
 
 msgid "Retrieve Access Token"
-msgstr ""
+msgstr "Lấy truy cập token"
 
 msgid "Click to retrieve an Access Token"
-msgstr ""
+msgstr "Nhấn vào đây để lấy một thẻ truy cập"
 
 msgid "Testing OAuth Access Token"
-msgstr ""
+msgstr "Thử nghiệm OAuth truy cập token"
 
 msgid "Retrieving user details with Access Token Key ''{0}'' was rejected."
 msgstr ""
+"Lấy chi tiết người dùng với truy cập token khóa '' {0} '' đã bị từ chối."
 
 msgid "Retrieving user details with Access Token Key ''{0}'' was forbidden."
-msgstr ""
+msgstr "Lấy chi tiết người dùng với truy cập token khóa '' {0} '' đã bị cấm."
 
 msgid ""
 "<html>Successfully used the Access Token ''{0}'' to<br>access the OSM server "
 "at ''{1}''.<br>You are accessing the OSM server as user ''{2}'' with id "
 "''{3}''.</html>"
 msgstr ""
+"<Html> sử dụng thành công các truy cập token '' {0} '' để <br> truy cập máy "
+"chủ OSMTại '' {1} ''. <br> Bạn đang truy cập vào máy chủ OSM là người dùng "
+"'' {2} '' với id'' {3} ''. </ Html>"
 
 msgid "Success"
-msgstr ""
+msgstr "thành công"
 
 msgid ""
 "<html>Failed to access the OSM server ''{0}''<br>with the Access Token "
@@ -9742,9 +10631,13 @@ msgid ""
 "not<br>be able to access any protected resource on this server using this "
 "token.</html>"
 msgstr ""
+"<Html> Không thể truy cập vào máy chủ OSM '' {0} '' <br> với Token Access'' "
+"{1} ''. <br> Các máy chủ từ chối Token Access là trái phép. Bạn sẽKhông <br> "
+"có thể truy cập bất kỳ tài nguyên được bảo vệ trên máy chủ này sử dụng "
+"nàyToken. </ Html>"
 
 msgid "Test failed"
-msgstr ""
+msgstr "Test không thành công"
 
 msgid ""
 "<html>The Access Token ''{1}'' is known to the OSM server ''{0}''.<br>The "
@@ -9753,9 +10646,14 @@ msgid ""
 "nevertheless use it<br>to upload data, upload GPS traces, and/or access "
 "other protected resources.</html>"
 msgstr ""
+"<Html> access token '' {1} '' được biết đến máy chủ OSM '' {0} ''. <br>Thử "
+"nghiệm để lấy các chi tiết dùng cho dấu hiệu này không thành côngMặc dù. "
+"<br> Tùy thuộc vào những gì được cấp quyền cho thẻ này bạn có thểTuy nhiên "
+"sử dụng nó <br> để upload dữ liệu, tải lên dấu vết GPS, và / hoặc truy "
+"cậpCác nguồn lực khác được bảo vệ. </ Html>"
 
 msgid "Token allows restricted access"
-msgstr ""
+msgstr "token cho phép truy cập hạn chế"
 
 msgid ""
 "<html>Failed to retrieve information about the current user from the OSM "
@@ -9763,2804 +10661,3069 @@ msgid ""
 "Access Token, but<br>rather a problem with the server configuration. "
 "Carefully check the server<br>URL and your Internet connection.</html>"
 msgstr ""
+"<Html> Không thể lấy thông tin về người dùng hiện tại từ OSMMáy chủ '' {0} "
+"''. <br> Đây có lẽ không phải là một vấn đề gây ra bởi các thử nghiệmAccess "
+"Token, nhưng <br> đúng hơn là một vấn đề với các cấu hình máy chủ.Cẩn thận "
+"kiểm tra máy chủ <br> URL và kết nối Internet của bạn. </ Html>"
 
 msgid ""
 "<html>Failed to sign the request for the OSM server ''{0}'' with the token "
 "''{1}''.<br>The token ist probably invalid.</html>"
 msgstr ""
+"<Html> Không thể đăng ký theo yêu cầu cho máy chủ OSM '' {0} '' với các mã "
+"thông báo'' {1} ''. <br> Ist thẻ có lẽ không hợp lệ. </ Html>"
 
 msgid ""
 "<html>The test failed because the server responded with an internal "
 "error.<br>JOSM could not decide whether the token is valid. Please try again "
 "later.</html>"
 msgstr ""
+"<Html> Các thử nghiệm không thành công vì các máy chủ đáp ứng với một nội "
+"bộLỗi. <br> JOSM không thể quyết định liệu các mã thông báo là hợp lệ. Vui "
+"lòng thử lạiSau này. </ Html>"
 
 msgid "Retrieving user info..."
-msgstr ""
+msgstr "Lấy thông tin người dùng ..."
 
 msgid "Expert mode"
-msgstr ""
+msgstr "chế độ Expert"
 
 msgid "Close the preferences dialog and discard preference updates"
-msgstr ""
+msgstr "Đóng hộp thoại sở thích và loại bỏ các bản cập nhật ưu tiên"
 
 msgid "Save the preferences and close the dialog"
-msgstr ""
-
-msgid "Download plugins"
-msgstr ""
+msgstr "Lưu các ưu đãi và đóng hộp thoại"
 
 msgid "You have to restart JOSM for some settings to take effect."
-msgstr ""
+msgstr "Bạn phải khởi động lại JOSM cho một số thiết lập có hiệu lực."
 
 msgid "Would you like to restart now?"
-msgstr ""
+msgstr "Bạn có muốn khởi động lại bây giờ?"
+
+msgid "Download plugins"
+msgstr "Download plugins"
 
 msgid "Icon paths:"
-msgstr ""
+msgstr "Biểu tượng con đường:"
 
 msgid "Short Description:"
-msgstr ""
+msgstr "Mô tả ngắn:"
 
 msgid "Author:"
-msgstr ""
+msgstr "Tác giả:"
 
 msgid "Webpage:"
-msgstr ""
+msgstr "trang web:"
 
 msgid "Description:"
-msgstr ""
+msgstr "Mô tả:"
 
 msgid "Version:"
-msgstr ""
+msgstr "Version:"
 
 msgid "Minimum JOSM Version:"
-msgstr ""
+msgstr "tối thiểu JOSM Version:"
 
 msgid "by {0}"
-msgstr ""
+msgstr "bởi {0}"
 
 msgid "Name (optional):"
-msgstr ""
+msgstr "Tên (không bắt buộc):"
 
 msgid "URL / File:"
-msgstr ""
+msgstr "URL / File:"
 
 msgid "active"
-msgstr ""
+msgstr "tích cực"
 
 msgid "Map paint style file (*.xml, *.mapcss, *.zip)"
-msgstr ""
+msgstr "phong cách đồ sơn file (* .xml, * .mapcss, * .zip)"
 
 msgid "Preset definition file (*.xml, *.zip)"
-msgstr ""
+msgstr "tập tin định nghĩa Preset (* .xml, * .zip)"
 
 msgid "Tag checker rule (*.validator.mapcss, *.zip)"
-msgstr ""
+msgstr "Tag kiểm tra quy tắc (* .validator.mapcss, * .zip)"
 
 msgid "Edit source entry:"
-msgstr ""
+msgstr "Sửa nguồn nhập cảnh:"
 
 msgid "Entry ''{0}'' requires JOSM Version {1}. (Currently running: {2})"
-msgstr ""
+msgstr "Entry '' {0} '' đòi hỏi JOSM bản {1}. (Hiện đang chạy: {2})"
 
 msgid "Continue anyway"
-msgstr ""
+msgstr "Vẫn tiếp tục"
 
 msgid "Ignore warning and install style anyway"
-msgstr ""
+msgstr "Bỏ qua cảnh báo và cài đặt phong cách anyway"
 
 msgid "Some entries have unmet dependencies:"
-msgstr ""
+msgstr "Một số mục có phụ thuộc chưa được đáp ứng:"
 
 msgid "Reset"
-msgstr ""
+msgstr "Reset"
 
 msgid "Reset to default"
-msgstr ""
+msgstr "Thiết lập lại để mặc định"
 
 msgid "Add a new icon path"
-msgstr ""
+msgstr "Thêm một con đường biểu tượng mới"
 
 msgid "Remove the selected icon paths"
-msgstr ""
+msgstr "Hủy bỏ các đường dẫn biểu tượng đã chọn"
 
 msgid "Edit the selected icon path"
-msgstr ""
+msgstr "Chỉnh sửa đường dẫn biểu tượng đã chọn"
 
 msgid "Tooltip"
-msgstr ""
+msgstr "Tooltip"
 
 msgid "Icon"
-msgstr ""
+msgstr "Icon"
 
 msgid "Remove from toolbar"
-msgstr ""
+msgstr "Gỡ bỏ khỏi thanh công cụ"
 
 msgid "Configure toolbar"
-msgstr ""
+msgstr "Cấu hình thanh công cụ"
 
 msgid "Edit shortcut"
-msgstr ""
+msgstr "Chỉnh sửa phím tắt"
 
 msgid "Do not hide toolbar and menu"
-msgstr ""
+msgstr "Đừng giấu thanh công cụ và menu"
 
 msgid "Actions"
-msgstr ""
+msgstr "Actions"
 
 msgid "Toolbar customization"
-msgstr ""
+msgstr "tùy biến thanh công cụ"
 
 msgid "Customize the elements on the toolbar."
-msgstr ""
+msgstr "Tùy chỉnh các yếu tố trên thanh công cụ."
 
 msgid "Separator"
-msgstr ""
+msgstr "separator"
 
 msgid "Toolbar"
-msgstr ""
+msgstr "Toolbar"
 
 msgid "Available"
-msgstr ""
+msgstr "có sẵn"
 
 msgid "Action parameters"
-msgstr ""
+msgstr "thông số hành động"
 
 msgid "Parameter name"
-msgstr ""
+msgstr "Parameter name"
 
 msgid "Parameter value"
-msgstr ""
+msgstr "Thông số giá trị"
 
 msgid "Toolbar action without name: {0}"
-msgstr ""
+msgstr "hành động Thanh công cụ mà không có tên: {0}"
 
 msgid "Strange toolbar value: {0}"
-msgstr ""
+msgstr "giá trị thanh công cụ lạ: {0}"
 
 msgid "Toolbar action {0} overwritten: {1} gets {2}"
-msgstr ""
+msgstr "hành động Thanh công cụ {0} ghi đè: {1} được {2}"
 
 msgid "Registered toolbar action without name: {0}"
-msgstr ""
+msgstr "hành động thanh công cụ đăng ký mà không có tên: {0}"
 
 msgid "Registered toolbar action {0} overwritten: {1} gets {2}"
-msgstr ""
+msgstr "hành động đăng ký thanh công cụ {0} ghi đè: {1} được {2}"
 
 msgid "Toolbar: {0}"
-msgstr ""
+msgstr "Thanh công cụ: {0}"
 
 msgid "Advanced Preferences"
-msgstr ""
+msgstr "Nâng cao Tuỳ chọn"
 
 msgid "Setting Preference entries directly. Use with caution!"
-msgstr ""
+msgstr "Thiết lập mục thích trực tiếp. Sử dụng thận trọng!"
 
 msgid "Search: "
-msgstr ""
+msgstr "Tìm kiếm "
 
 msgid "Read from file"
-msgstr ""
+msgstr "Đọc từ tập tin"
 
 msgid "Export selected items"
-msgstr ""
+msgstr "xuất khẩu được lựa chọn mục"
 
 msgid "JOSM custom settings files (*.xml)"
-msgstr ""
+msgstr "tập tin cài đặt tùy chỉnh JOSM (* .xml)"
 
 msgid "Please select some preference keys not marked as default"
-msgstr ""
+msgstr "Hãy chọn một số phím ưu tiên không được đánh dấu như là mặc định"
 
 msgid "Export preferences keys to JOSM customization file"
-msgstr ""
+msgstr "ưu đãi xuất khẩu để khóa tập tin tùy biến JOSM"
 
 msgid "What to do with preference lists when this file is to be imported?"
 msgstr ""
+"gì để làm với danh sách ưu tiên khi tập tin này là để được nhập khẩu?"
 
 msgid "Append preferences from file to existing values"
-msgstr ""
+msgstr "Gắn thêm ưu đãi từ tập tin vào các giá trị hiện tại"
 
 msgid "Replace existing values"
-msgstr ""
+msgstr "Thay thế các giá trị hiện tại"
 
 msgid "Open JOSM customization file"
-msgstr ""
+msgstr "tập tin tùy biến mở JOSM"
 
 msgid "Import log"
-msgstr ""
+msgstr "Nhập log"
 
 msgid ""
 "<html>Here is file import summary. <br/>You can reject preferences changes "
 "by pressing \"Cancel\" in preferences dialog <br/>To activate some changes "
 "JOSM restart may be needed.</html>"
 msgstr ""
+"<Html> Sau đây là tóm tắt nhập khẩu tập tin. <br/> Bạn có thể từ chối các sở "
+"thích thay đổiBằng cách nhấn \" Hủy bỏ \"trong hộp thoại sở thích <br/> Để "
+"kích hoạt một số thay đổiJOSM khởi động lại có thể cần thiết. </ Html>"
 
 msgid "shortcut"
-msgstr ""
+msgstr "shortcut"
 
 msgid "color"
-msgstr ""
+msgstr "màu"
 
 msgid "toolbar"
-msgstr ""
+msgstr "thanh công cụ"
 
 msgid "imagery"
-msgstr ""
+msgstr "hình ảnh"
 
 msgid "Reset preferences"
-msgstr ""
+msgstr "Thiết lập lại ưu đãi"
 
 msgid ""
 "You are about to clear all preferences to their default values<br />All your "
 "settings will be deleted: plugins, imagery, filters, toolbar buttons, "
 "keyboard, etc. <br />Are you sure you want to continue?"
 msgstr ""
+"Bạn muốn xóa tất cả các ưu đãi về giá trị mặc định <br /> Tất cả bạnCài đặt "
+"sẽ bị xóa: plugins, hình ảnh, các bộ lọc, các nút trên thanh công cụ,Bàn "
+"phím, vv <br /> Bạn có chắc muốn tiếp tục không?"
 
 msgid "Load profile"
-msgstr ""
+msgstr "Load profile"
 
 msgid "Save {0} profile"
-msgstr ""
+msgstr "Lưu {0} hồ sơ"
 
 msgid "All the preferences of this group are default, nothing to save"
-msgstr ""
+msgstr "Tất cả các ưu đãi của nhóm này là mặc định, không có gì để tiết kiệm"
 
 msgid "Choose profile file"
-msgstr ""
+msgstr "Chọn tập tin hồ sơ"
 
 msgid "Change list setting"
-msgstr ""
+msgstr "Thay đổi thiết lập danh sách"
 
 msgid "Key: {0}"
-msgstr ""
+msgstr "Key: {0}"
 
 msgid "Change list of lists setting"
-msgstr ""
+msgstr "Thay đổi danh sách các danh mục thiết lập"
 
 msgid "add entry"
-msgstr ""
+msgstr "thêm mục"
 
 msgid "Remove the selected entry"
-msgstr ""
+msgstr "Hủy bỏ các mục được chọn"
 
 msgid "Change list of maps setting"
-msgstr ""
+msgstr "Thay đổi danh sách bản đồ thiết lập"
 
 msgid "Entry {0}"
-msgstr ""
+msgstr "Entry {0}"
 
 msgid "Please select the row to edit."
-msgstr ""
+msgstr "Hãy chọn hàng để chỉnh sửa."
 
 msgid "Select Setting Type:"
-msgstr ""
+msgstr "Chọn Setting Type:"
 
 msgid "Simple"
-msgstr ""
+msgstr "đơn giản"
 
 msgid "List"
-msgstr ""
+msgstr "Danh sách"
 
 msgid "List of lists"
-msgstr ""
+msgstr "Danh sách danh sách"
 
 msgid "List of maps"
-msgstr ""
+msgstr "Danh sách bản đồ"
 
 msgid "Add setting"
-msgstr ""
+msgstr "Thêm thiết lập"
 
 msgid "Please select the row to delete."
-msgstr ""
+msgstr "Hãy chọn hàng để xóa."
 
 msgid "Advanced Background: Changed"
-msgstr ""
+msgstr "Background nâng cao: Thay đổi"
 
 msgid "Advanced Background: NonDefault"
-msgstr ""
+msgstr "Background chi tiết: NonDefault"
 
 msgid "Current value is default."
-msgstr ""
+msgstr "giá trị hiện tại là mặc định."
 
 msgid "Default value is ''{0}''."
-msgstr ""
+msgstr "Giá trị mặc định là '' {0} ''."
 
 msgid "Default value currently unknown (setting has not been used yet)."
 msgstr ""
+"Giá trị mặc định hiện nay chưa biết (thiết lập đã không được sử dụng chưa)."
 
 msgid "Change string setting"
-msgstr ""
+msgstr "Thay đổi thiết lập chuỗi"
 
 msgid "Value: "
-msgstr ""
+msgstr "Giá trị: "
 
 msgid "Audio Settings"
-msgstr ""
+msgstr "Cài đặt âm thanh"
 
 msgid "Settings for the audio player and audio markers."
-msgstr ""
+msgstr "Cài đặt cho máy nghe nhạc âm thanh và các dấu thanh."
 
 msgid "Display the Audio menu."
-msgstr ""
+msgstr "Hiển thị menu Audio."
 
 msgid "Label audio (and image and web) markers."
-msgstr ""
+msgstr "Label âm thanh (và hình ảnh và web) đánh dấu."
 
 msgid "Display live audio trace."
-msgstr ""
+msgstr "Hiển thị trực tiếp dấu vết âm thanh."
 
 msgid "Explicit waypoints with valid timestamps."
-msgstr ""
+msgstr "waypoints Explicit với thời gian hợp lệ."
 
 msgid "Explicit waypoints with time estimated from track position."
-msgstr ""
+msgstr "waypoints Explicit với thời gian dự kiến ​​từ vị trí theo dõi."
 
 msgid "Named trackpoints."
-msgstr ""
+msgstr "Đặt tên trên đoạn đường."
 
 msgid "Modified times (time stamps) of audio files."
-msgstr ""
+msgstr "đổi lần (thời gian tem) của các tập tin âm thanh."
 
 msgid "Start of track (will always do this if no other markers available)."
 msgstr ""
+"Bắt đầu theo dõi (luôn luôn sẽ làm được điều này nếu không có các dấu hiệu "
+"khác sẵn có)."
 
 msgid "Show or hide the audio menu entry on the main menu bar."
-msgstr ""
+msgstr "Hiển thị hoặc ẩn các mục trình đơn âm thanh trên thanh menu chính."
 
 msgid ""
 "Display a moving icon representing the point on the synchronized track where "
 "the audio currently playing was recorded."
 msgstr ""
+"Hiển thị một biểu tượng đại diện cho di chuyển các điểm trên đường đua đồng "
+"bộ ở đâuÂm thanh hiện đang chơi đã được ghi lại."
 
 msgid ""
 "Put text labels against audio (and image and web) markers as well as their "
 "button icons."
 msgstr ""
+"Đặt nhãn văn bản chống lại âm thanh (và hình ảnh và web) đánh dấu cũng như "
+"họNút biểu tượng."
 
 msgid "When importing audio, make markers from..."
-msgstr ""
+msgstr "Khi nhập khẩu âm thanh, làm cho các dấu hiệu từ ..."
 
 msgid "When importing audio, apply it to any waypoints in the GPX layer."
 msgstr ""
+"Khi nhập khẩu âm thanh, áp dụng nó cho bất kỳ waypoints trong lớp GPX."
 
 msgid ""
 "Automatically create audio markers from trackpoints (rather than explicit "
 "waypoints) with names or descriptions."
 msgstr ""
+"Tự động tạo ra các dấu hiệu âm thanh từ đoạn đường (chứ không phải là rõ "
+"ràngWaypoints) với tên hoặc mô tả."
 
 msgid ""
 "Create audio markers at the position on the track corresponding to the "
 "modified time of each audio WAV file imported."
 msgstr ""
+"Tạo dấu âm thanh ở vị trí trên đường đua tương ứng vớiThời gian sửa đổi của "
+"mỗi tập tin WAV âm thanh nhập khẩu."
 
 msgid ""
 "The number of seconds to jump forward or back when the relevant button is "
 "pressed"
 msgstr ""
+"Số giây để nhảy về phía trước hoặc quay trở lại khi nút có liên quan làÉp"
 
 msgid "Forward/back time (seconds)"
-msgstr ""
+msgstr "Chuyển tiếp / ngược thời gian (giây)"
 
 msgid "The amount by which the speed is multiplied for fast forwarding"
-msgstr ""
+msgstr "Số tiền mà tốc độ được nhân cho nhanh chóng chuyển tiếp"
 
 msgid "Fast forward multiplier"
-msgstr ""
+msgstr "forward nhân nhanh"
 
 msgid ""
 "Playback starts this number of seconds before (or after, if negative) the "
 "audio track position requested"
 msgstr ""
+"Playback bắt đầu số này của giây trước khi (hoặc sau, nếu âm)Vị trí track âm "
+"thanh yêu cầu"
 
 msgid "Lead-in time (seconds)"
-msgstr ""
+msgstr "Lead-in thời gian (giây)"
 
 msgid "The ratio of voice recorder elapsed time to true elapsed time"
-msgstr ""
+msgstr "Tỷ lệ ghi âm thời gian trôi qua để thời gian trôi qua thật"
 
 msgid "Voice recorder calibration"
-msgstr ""
+msgstr "Máy ghi âm chuẩn"
 
 msgid "Color"
-msgstr ""
+msgstr "Color"
 
 msgid "Choose"
-msgstr ""
+msgstr "Chọn"
 
 msgid "Choose a color for {0}"
-msgstr ""
+msgstr "Chọn một màu cho {0}"
 
 msgid "Set to default"
-msgstr ""
+msgstr "Thiết lập mặc định"
 
 msgid "Set all to default"
-msgstr ""
+msgstr "Đặt tất cả để mặc định"
 
 msgid "Colors used by different objects in JOSM."
-msgstr ""
+msgstr "Màu sắc được sử dụng bởi các đối tượng khác nhau trong JOSM."
 
 msgid "Colors"
-msgstr ""
+msgstr "Màu sắc"
 
 msgid "Display Settings"
-msgstr ""
+msgstr "Display Settings"
 
 msgid ""
 "Various settings that influence the visual representation of the whole "
 "program."
-msgstr ""
+msgstr "Thiết lập khác nhau ảnh hưởng đến hình ảnh của toàn bộChương trình."
 
 msgid "Draw Direction Arrows"
-msgstr ""
+msgstr "Vẽ mũi tên Direction"
 
 msgid "Only on the head of a way."
-msgstr ""
+msgstr "Chỉ trên đầu của một con đường."
 
 msgid "Draw oneway arrows."
-msgstr ""
+msgstr "Vẽ mũi tên oneway."
 
 msgid "Draw segment order numbers"
-msgstr ""
+msgstr "Vẽ số thứ tự phân đoạn"
 
 msgid "Draw boundaries of downloaded data"
-msgstr ""
+msgstr "Vẽ ranh giới của dữ liệu tải về"
 
 msgid "Draw virtual nodes in select mode"
-msgstr ""
+msgstr "Vẽ các nút ảo trong chọn chế độ"
 
 msgid "Draw inactive layers in other color"
-msgstr ""
+msgstr "Vẽ lớp không hoạt động trong màu sắc khác"
 
 msgid "Display discardable keys"
-msgstr ""
+msgstr "Hiển thị các phím discardable"
 
 msgid "Highlight target ways and nodes"
-msgstr ""
+msgstr "cách mục tiêu nổi bật và các nút"
 
 msgid "Draw rubber-band helper line"
-msgstr ""
+msgstr "Vẽ đường helper cao su-band"
 
 msgid "Smooth map graphics (antialiasing)"
-msgstr ""
+msgstr "đồ họa đồ Smooth (antialiasing)"
 
 msgid "Smooth map graphics in wireframe mode (antialiasing)"
-msgstr ""
+msgstr "đồ họa mượt mà bản đồ trong chế độ wireframe (antialiasing)"
 
 msgid "Draw only outlines of areas"
-msgstr ""
+msgstr "Vẽ chỉ phác thảo của khu vực"
 
 msgid "GPS Points"
-msgstr ""
+msgstr "Điểm GPS"
 
 msgid "Draw direction hints for way segments."
-msgstr ""
+msgstr "Vẽ gợi ý hướng cho đoạn đường."
 
 msgid "Draw arrows in the direction of oneways and other directed features."
-msgstr ""
+msgstr "Vẽ mũi tên theo hướng oneways và các tính năng hướng khác."
 
 msgid "Draw the order numbers of all segments within their way."
-msgstr ""
+msgstr "Vẽ các số thứ tự của tất cả các phân đoạn trong cách của họ."
 
 msgid "Draw the boundaries of data loaded from the server."
-msgstr ""
+msgstr "Vẽ ranh giới của dữ liệu được tải từ máy chủ."
 
 msgid "Draw virtual nodes in select mode for easy way modification."
-msgstr ""
+msgstr "Vẽ các nút ảo trong chọn chế độ để dễ dàng sửa đổi cách."
 
 msgid "Draw the inactive data layers in a different color."
-msgstr ""
+msgstr "Vẽ các lớp dữ liệu không hoạt động trong một màu sắc khác nhau."
 
 msgid ""
 "Apply antialiasing to the map view resulting in a smoother appearance."
 msgstr ""
+"Áp dụng khử răng cưa để xem bản đồ kết quả trong một xuất hiện mượt mà hơn."
 
 msgid ""
 "Apply antialiasing to the map view in wireframe mode resulting in a smoother "
 "appearance."
 msgstr ""
+"Áp dụng khử răng cưa để xem bản đồ ở chế độ wireframe dẫn đến sự mượt màXuất "
+"hiện."
 
 msgid "Hightlight target nodes and ways while drawing or selecting"
-msgstr ""
+msgstr "nút mục tiêu Hightlight và cách khi vẽ hoặc chọn"
 
 msgid ""
 "This option suppresses the filling of areas, overriding anything specified "
 "in the selected style."
 msgstr ""
+"Tùy chọn này sẽ bỏ làm của khu vực, trọng bất cứ điều gì cụ thểTrong phong "
+"cách lựa chọn."
 
 msgid ""
 "Display keys which have been deemed uninteresting to the point that they can "
 "be silently removed."
 msgstr ""
+"Hiển thị các phím đã được coi là nhàm chán đến mức mà họ có thểĐược âm thầm "
+"loại bỏ."
 
 msgid "Options that affect drawing performance"
-msgstr ""
+msgstr "Tùy chọn có ảnh hưởng đến hiệu suất vẽ"
 
 msgid "Segment drawing options"
-msgstr ""
+msgstr "tùy chọn Segment vẽ"
 
 msgid "Select and draw mode options"
-msgstr ""
+msgstr "Chọn và vẽ tùy chọn chế độ"
 
 msgid "Other options"
-msgstr ""
+msgstr "Các tùy chọn khác"
 
 msgid "OSM Data"
-msgstr ""
+msgstr "OSM Data"
 
 msgid "Auto"
-msgstr ""
+msgstr "Tự động"
 
 msgctxt "gpx_field"
 msgid "Name"
-msgstr ""
+msgstr "Name"
 
 msgctxt "gpx_field"
 msgid "Desc(ription)"
-msgstr ""
+msgstr "quyết định (ription)"
 
 msgid "Everything"
-msgstr ""
+msgstr "Tất cả mọi thứ"
 
 msgid "Name or offset"
-msgstr ""
+msgstr "Tên hoặc bù đắp"
 
 msgid "None"
-msgstr ""
+msgstr "Không"
 
 msgid "Custom"
-msgstr ""
+msgstr "Custom"
 
 msgid "Use global settings"
-msgstr ""
+msgstr "Sử dụng các thiết lập toàn cầu"
 
 msgid "All"
-msgstr ""
+msgstr "Tất cả"
 
 msgid "Local files"
-msgstr ""
+msgstr "các tập tin địa phương"
 
 msgid "Force lines if no segments imported"
-msgstr ""
+msgstr "dòng Force nếu có phân đoạn nhập khẩu"
 
 msgid "Draw large GPS points"
-msgstr ""
+msgstr "Vẽ điểm GPS lớn"
 
 msgid "Draw a circle from HDOP value"
-msgstr ""
+msgstr "Vẽ một vòng tròn từ HDOP giá trị"
 
 msgid "Velocity (red = slow, green = fast)"
-msgstr ""
+msgstr "Velocity (đỏ = chậm, màu xanh lá cây = nhanh)"
 
 msgid "Direction (red = west, yellow = north, green = east, blue = south)"
 msgstr ""
+"Direction (red = tây, vàng = bắc, xanh lá cây = đông, màu xanh = nam)"
 
 msgid "Dilution of Position (red = high, green = low, if available)"
-msgstr ""
+msgstr "loãng Chức vụ (red = cao, màu xanh lá cây = thấp, nếu có)"
 
 msgid "Track date"
-msgstr ""
+msgstr "ngày Track"
 
 msgid "Single Color (can be customized for named layers)"
-msgstr ""
+msgstr "Single Color (có thể được tùy chỉnh cho các lớp có tên)"
 
 msgid "Car"
-msgstr ""
+msgstr "Car"
 
 msgid "Bicycle"
-msgstr ""
+msgstr "xe đạp"
 
 msgid "Foot"
-msgstr ""
+msgstr "chân"
 
 msgid "Create markers when reading GPX"
-msgstr ""
+msgstr "Tạo dấu khi đọc GPX"
 
 msgid "Fast drawing (looks uglier)"
-msgstr ""
+msgstr "Fast vẽ (trông xấu hơn)"
 
 msgid "Dynamic color range based on data limits"
-msgstr ""
+msgstr "Dải màu dựa trên giới hạn dữ liệu"
 
 msgid "Smooth GPX graphics (antialiasing)"
-msgstr ""
+msgstr "đồ họa GPX Smooth (antialiasing)"
 
 msgid ""
 "Automatically make a marker layer from any waypoints when opening a GPX "
 "layer."
 msgstr ""
+"Tự động tạo một layer đánh dấu từ bất kỳ waypoints khi mở một GPXLớp."
 
 msgid "Draw lines between raw GPS points"
-msgstr ""
+msgstr "Vẽ đường giữa các điểm GPS thô"
 
 msgid ""
 "Maximum length (in meters) to draw lines for local files. Set to ''-1'' to "
 "draw all lines."
 msgstr ""
+"Chiều dài tối đa (tính bằng mét) để vẽ đường cho các tập tin địa phương. Set "
+"để '' -1 '' đểVẽ tất cả các dòng."
 
 msgid "Maximum length for local files (meters)"
-msgstr ""
+msgstr "chiều dài tối đa cho các tập tin địa phương (mét)"
 
 msgid ""
 "Maximum length (in meters) to draw lines. Set to ''-1'' to draw all lines."
 msgstr ""
+"Chiều dài tối đa (tính bằng mét) để vẽ đường. Set để '' -1 '' để vẽ tất cả "
+"các dòng."
 
 msgid "Maximum length (meters)"
-msgstr ""
+msgstr "Chiều dài tối đa (m)"
 
 msgid ""
 "Force drawing of lines if the imported data contain no line information."
-msgstr ""
+msgstr "Buộc vẽ các đường nếu dữ liệu nhập khẩu không chứa thông tin đường."
 
 msgid "Draw direction arrows for lines, connecting GPS points."
-msgstr ""
+msgstr "Vẽ mũi tên hướng cho đường dây, nối các điểm GPS."
 
 msgid ""
 "Draw the direction arrows using table lookups instead of complex math."
-msgstr ""
+msgstr "Vẽ mũi tên hướng sử dụng tra cứu bảng thay vì toán học phức tạp."
 
 msgid ""
 "Do not draw arrows if they are not at least this distance away from the last "
 "one."
 msgstr ""
+"Đừng vẽ mũi tên nếu họ không phải là ít nhất khoảng cách này đi từ cuối "
+"cùngMột."
 
 msgid "Minimum distance (pixels)"
-msgstr ""
+msgstr "Khoảng cách tối thiểu (điểm ảnh)"
 
 msgid "Draw a circle from HDOP value."
-msgstr ""
+msgstr "Vẽ một vòng tròn từ HDOP giá trị."
 
 msgid "Draw larger dots for the GPS points."
-msgstr ""
+msgstr "Vẽ các chấm lớn hơn cho các điểm GPS."
 
 msgid "Width of drawn GPX line (0 for default)"
-msgstr ""
+msgstr "Chiều rộng của đường GPX rút ra (0 cho mặc định)"
 
 msgid "Drawing width of GPX lines"
-msgstr ""
+msgstr "Vẽ chiều rộng của dòng GPX"
 
 msgid ""
 "Apply antialiasing to the GPX lines resulting in a smoother appearance."
 msgstr ""
+"Áp dụng khử răng cưa với các dòng GPX kết quả trong một xuất hiện mượt mà "
+"hơn."
 
 msgid ""
 "All points and track segments will have the same color. Can be customized in "
 "Layer Manager."
 msgstr ""
+"Tất cả các điểm và các đoạn đường sẽ có cùng một màu sắc. Có thể được tùy "
+"chỉnh trongLayer Manager."
 
 msgid "Colors points and track segments by velocity."
-msgstr ""
+msgstr "Colors điểm và phân đoạn theo dõi bởi vận tốc."
 
 msgid "Colors points and track segments by direction."
-msgstr ""
+msgstr "Colors điểm và phân đoạn theo dõi bằng cách hướng."
 
 msgid ""
 "Colors points and track segments by dilution of position (HDOP). Your "
 "capture device needs to log that information."
 msgstr ""
+"Colors điểm và phân đoạn theo dõi bằng cách pha loãng của vị trí (HDOP) của "
+"bạn.Thiết bị chụp cần phải đăng nhập thông tin đó."
 
 msgid "Colors points and track segments by its timestamp."
-msgstr ""
+msgstr "Colors điểm và phân đoạn theo dõi bởi dấu thời gian của nó."
 
 msgid "Allows to tune the track coloring for different average speeds."
-msgstr ""
+msgstr "Cho phép điều chỉnh các track màu cho tốc độ trung bình khác nhau."
 
 msgid "Track and Point Coloring"
-msgstr ""
+msgstr "Theo dõi và điểm màu"
 
 msgid "Colors points and track segments by data limits."
-msgstr ""
+msgstr "Colors điểm và phân đoạn theo dõi bằng cách giới hạn dữ liệu."
 
 msgid "Waypoint labelling"
-msgstr ""
+msgstr "Waypoint dán nhãn"
 
 msgid "Audio waypoint labelling"
-msgstr ""
+msgstr "ghi nhãn waypoint Audio"
 
 msgid "Incorrect waypoint label pattern: {0}"
-msgstr ""
+msgstr "không đúng mẫu Nhãn waypoint: {0}"
 
 msgid "Incorrect pattern"
-msgstr ""
+msgstr "mẫu không chính xác"
 
 msgid "Incorrect audio waypoint label pattern: {0}"
-msgstr ""
+msgstr "không đúng mẫu Nhãn waypoint audio: {0}"
 
 msgid "Show splash screen at startup"
-msgstr ""
+msgstr "Hiển thị màn hình splash khi khởi động"
 
 msgid "Show object ID in selection lists"
-msgstr ""
+msgstr "Hiển thị đối tượng ID trong danh sách lựa chọn"
 
 msgid "Show localized name in selection lists"
-msgstr ""
+msgstr "Hiển thị bản địa hóa tên trong danh sách lựa chọn"
 
 msgid "Modeless working (Potlatch style)"
-msgstr ""
+msgstr "làm việc Modeless (Potlatch style)"
 
 msgid "Dynamic buttons in side menus"
-msgstr ""
+msgstr "nút năng động trong các menu phụ"
 
 msgid "Display ISO dates"
-msgstr ""
+msgstr "ngày Display ISO"
 
 msgid "Use native file choosers (nicer, but do not support file filters)"
 msgstr ""
+"Sử dụng tập tin gốc chọn canh (đẹp hơn, nhưng không hỗ trợ bộ lọc tập tin)"
 
 msgid "Show localized name in selection lists, if available"
-msgstr ""
+msgstr "Hiển thị bản địa hóa tên trong danh sách lựa chọn, nếu có"
 
 msgid "Do not require to switch modes (potlatch style workflow)"
-msgstr ""
+msgstr "Đừng đòi hỏi phải chuyển đổi chế độ (workflow phong cách Potlatch)"
 
 msgid ""
 "Display buttons in right side menus only when mouse is inside the element"
-msgstr ""
+msgstr "Nút Display ở menu bên phải chỉ khi con chuột bên trong phần tử"
 
 msgid "ISO 8601"
-msgstr ""
+msgstr "ISO 8601"
 
 msgid ""
 "Format dates according to {0}. Today''s date will be displayed as {1} "
 "instead of {2}"
 msgstr ""
+"Format dates according to {0}. Today''s date will be displayed as {1} "
+"instead of {2}"
 
 msgid ""
 "Use file choosers that behave more like native ones. They look nicer but do "
 "not support some features like file filters"
 msgstr ""
+"Sử dụng tập tin chọn canh mà cư xử giống như những người bản địa. Họ trông "
+"đẹp hơn nhưng làmKhông hỗ trợ một số tính năng như bộ lọc tập tin"
 
 msgid "Look and Feel"
-msgstr ""
+msgstr "Nhìn và cảm nhận"
 
 msgid "Language"
-msgstr ""
+msgstr "Ngôn ngữ"
 
 msgid "Default (Auto determined)"
-msgstr ""
+msgstr "Default (Auto xác định)"
 
 msgid "Add Imagery URL"
-msgstr ""
+msgstr "Add URL Hình ảnh"
 
 msgid "1. Enter URL"
-msgstr ""
+msgstr "1. Nhập URL"
 
 msgid ""
 "{0} is replaced by tile zoom level, also supported:<br>offsets to the zoom "
 "level: {1} or {2}<br>reversed zoom level: {3}"
 msgstr ""
+"{0} được thay thế bằng tấm mức độ phóng, cũng được hỗ trợ: <br> offsets để "
+"zoomMức độ: {1} hoặc {2} <br> đảo ngược mức zoom: {3}"
 
 msgid "{0} is replaced by X-coordinate of the tile"
-msgstr ""
+msgstr "{0} được thay thế bằng X-phối hợp của gạch"
 
 msgid "{0} is replaced by Y-coordinate of the tile"
-msgstr ""
+msgstr "{0} được thay thế bởi Y-phối hợp của gạch"
 
 msgid "{0} is replaced by {1} (Yahoo style Y coordinate)"
-msgstr ""
+msgstr "{0} được thay thế bởi {1} (Yahoo style Y phối hợp)"
 
 msgid ""
 "{0} is replaced by {1} (OSGeo Tile Map Service Specification style Y "
 "coordinate)"
 msgstr ""
+"{0} được thay thế bởi {1} (OSGeo Tile Dịch vụ bản đồ kỹ thuật phong cách "
+"YPhối hợp)"
 
 msgid ""
 "{0} is replaced by a random selection from the given comma separated list, "
 "e.g. {1}"
 msgstr ""
+"{0} được thay thế bởi một lựa chọn ngẫu nhiên từ các dấu phẩy được tách ra "
+"danh sáchVí dụ {1}"
 
 msgid "2. Enter maximum zoom (optional)"
-msgstr ""
+msgstr "2. Nhập zoom tối đa (tùy chọn)"
 
 msgid "3. Verify generated TMS URL"
-msgstr ""
+msgstr "3. Xác minh tạo ra URL TMS"
 
 msgid "4. Enter name for this layer"
-msgstr ""
+msgstr "4. Nhập tên cho layer này là"
 
 msgid "Store WMS endpoint only, select layers at usage"
-msgstr ""
+msgstr "Store WMS endpoint chỉ, chọn layer cùng sử dụng"
 
 msgid "Show bounds"
-msgstr ""
+msgstr "Show giới hạn"
 
 msgid "1. Enter service URL"
-msgstr ""
+msgstr "1. Nhập URL của dịch vụ"
 
 msgid "Get layers"
-msgstr ""
+msgstr "Nhận lớp"
 
 msgid "2. Select layers"
-msgstr ""
+msgstr "2. Chọn lớp"
 
 msgid "3. Select image format"
-msgstr ""
+msgstr "3. Chọn định dạng hình ảnh"
 
 msgid "4. Verify generated WMS URL"
-msgstr ""
+msgstr "4. Xác minh tạo ra URL WMS"
 
 msgid "5. Enter name for this layer"
-msgstr ""
+msgstr "5. Nhập tên cho layer này là"
 
 msgid "Show Bounds"
-msgstr ""
+msgstr "Show Bounds"
 
 msgid "No bounding box was found for this layer."
+msgstr "Không có hộp bounding được tìm thấy cho lớp này."
+
+msgid "1. Enter getCapabilities URL"
 msgstr ""
 
-msgid "imagery fade"
+msgid "2. Enter name for this layer"
 msgstr ""
 
-msgid "Fade Color: "
+msgid "{0} cache, total cache size: {1} bytes"
 msgstr ""
 
-msgid "Fade amount: "
+msgid "Cache name"
 msgstr ""
 
-msgid "Soft"
+msgid "Object Count"
 msgstr ""
 
+msgid "imagery fade"
+msgstr "hình ảnh mờ dần"
+
+msgid "Fade Color: "
+msgstr "Fade Color: "
+
+msgid "Fade amount: "
+msgstr "số tiền Fade: "
+
+msgid "Soft"
+msgstr "Soft"
+
 msgid "Strong"
-msgstr ""
+msgstr "Strong"
 
 msgid "Sharpen (requires layer re-add): "
+msgstr "Sharpen (yêu cầu lớp tái add): "
+
+msgid "Tile cache directory: "
+msgstr "thư mục Tile cache: "
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
 msgstr ""
 
-msgid "Imagery Preferences"
+msgid "Maximum number of objects in memory cache: "
 msgstr ""
 
-msgid "Modify list of imagery layers displayed in the Imagery menu"
+msgid "Tiles zoom offset:"
 msgstr ""
 
+msgid "Imagery Preferences"
+msgstr "Preferences Imagery"
+
+msgid "Modify list of imagery layers displayed in the Imagery menu"
+msgstr "Sửa đổi danh sách các lớp hình ảnh hiển thị trong menu Hình ảnh"
+
 msgid "Common Settings"
-msgstr ""
+msgstr "Common Settings"
 
 msgid "WMS Settings"
-msgstr ""
+msgstr "WMS Settings"
 
 msgid "TMS Settings"
-msgstr ""
+msgstr "TMS Settings"
 
 msgid "Imagery providers"
-msgstr ""
+msgstr "các nhà cung cấp Hình ảnh"
 
 msgid "Offset bookmarks"
+msgstr "Offset bookmarks"
+
+msgid "Cache contents"
 msgstr ""
 
 msgid "Imagery Background: Default"
-msgstr ""
+msgstr "Hình ảnh Background: Default"
 
 msgid "Available default entries:"
-msgstr ""
+msgstr "mục mặc định sẵn:"
 
 msgid "Selected entries:"
-msgstr ""
+msgstr "mục chọn:"
 
 msgid "Add a new {0} entry by entering the URL"
-msgstr ""
+msgstr "Thêm một mới {0} nhập bằng cách nhập URL"
 
 msgid "Remove entry"
-msgstr ""
+msgstr "Xóa entry"
 
 msgid "copy selected defaults"
-msgstr ""
+msgstr "sao chép mặc định được chọn"
 
 msgid "Please select at least one row to copy."
-msgstr ""
+msgstr "Hãy chọn ít nhất một dòng để sao chép."
 
 msgid "reload defaults"
-msgstr ""
+msgstr "reload mặc định"
 
 msgid "Menu Name"
-msgstr ""
+msgstr "Menu Name"
 
 msgid "Imagery URL"
-msgstr ""
+msgstr "Hình tượng URL"
 
 msgid "Menu Name (Default)"
-msgstr ""
+msgstr "Menu Name (Default)"
 
 msgid "Imagery URL (Default)"
-msgstr ""
+msgstr "URL Hình ảnh (Default)"
 
 msgid "EULA license URL not available: {0}"
-msgstr ""
+msgstr "EULA giấy phép URL không có sẵn: {0}"
 
 msgid "Malformed URL for the EULA licence: {0}"
-msgstr ""
-
-msgid "Projection"
-msgstr ""
+msgstr "URL không đúng định dạng cho phép EULA: {0}"
 
 msgid "Layer"
-msgstr ""
+msgstr "Layer"
 
 msgid "Easting"
-msgstr ""
+msgstr "hướng đông"
 
 msgid "Northing"
-msgstr ""
+msgstr "đường đi về hướng bắc"
 
 msgid "Auto zoom by default: "
-msgstr ""
+msgstr "Auto zoom theo mặc định: "
 
 msgid "Autoload tiles by default: "
-msgstr ""
+msgstr "Autoload gạch bằng cách mặc định: "
 
 msgid "Min. zoom level: "
-msgstr ""
+msgstr ". Min mức zoom: "
 
 msgid "Max. zoom level: "
-msgstr ""
+msgstr ". Max mức zoom: "
 
 msgid "Add to slippymap chooser: "
-msgstr ""
-
-msgid "Tile cache directory: "
-msgstr ""
+msgstr "Thêm vào slippymap chooser: "
 
 msgid "Maximum concurrent downloads: "
-msgstr ""
+msgstr "đồng thời tải tối đa: "
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
 msgstr ""
-
-msgid "Downloader:"
-msgstr ""
+"That layer does not support any of JOSM''s projections,\n"
+"so you can not use it. This message will not show again."
 
 msgid "Simultaneous connections:"
-msgstr ""
-
-msgid "Overlap tiles"
-msgstr ""
-
-msgid "% of east:"
-msgstr ""
+msgstr "kết nối đồng thời:"
 
-msgid "% of north:"
-msgstr ""
+msgid "Tile size:"
+msgstr "Tile kích thước:"
 
 msgid "Auto save enabled"
-msgstr ""
+msgstr "Auto save kích hoạt"
 
 msgid "Auto save interval (seconds)"
-msgstr ""
+msgstr "Tự động tiết kiệm khoảng thời gian (giây)"
 
 msgid "Default value: {0}"
-msgstr ""
+msgstr "Mặc định giá trị: {0}"
 
 msgid "Auto saved files per layer"
-msgstr ""
+msgstr "Auto tác phẩm cho mỗi lớp lưu"
 
 msgid ""
 "<i>(Autosave stores the changed data layers in periodic intervals. The "
 "backups are saved in JOSM''s preference folder. In case of a crash, JOSM "
 "tries to recover the unsaved changes on next start.)</i>"
 msgstr ""
+"<i>(Autosave stores the changed data layers in periodic intervals. The "
+"backups are saved in JOSM''s preference folder. In case of a crash, JOSM "
+"tries to recover the unsaved changes on next start.)</i>"
 
 msgid "Keep backup files when saving data layers"
-msgstr ""
+msgstr "Giữ các tập tin sao lưu khi lưu các lớp dữ liệu"
 
 msgid "When saving, keep backup files ending with a ~"
-msgstr ""
+msgstr "Khi lưu, giữ các tập tin sao lưu kết thúc với một ~"
 
 msgid ""
 "<i>(JOSM can keep a backup file when saving data layers. It appends ''~'' to "
 "the file name and saves it in the same folder.)</i>"
 msgstr ""
+"<I> (JOSM có thể giữ một tập tin sao lưu khi lưu các lớp dữ liệu. Nó gắn "
+"thêm '' ~ '' đểTên tập tin và lưu nó trong cùng một thư mục.) </ I>"
 
 msgid "Notification at each save"
-msgstr ""
+msgstr "Thông báo ở mỗi tiết kiệm"
 
 msgid "When saving, display a small notification"
-msgstr ""
+msgstr "Khi lưu, hiển thị một thông báo nhỏ"
 
 msgid "File backup"
-msgstr ""
+msgstr "File backup"
 
 msgid "Configure whether to create backup files"
-msgstr ""
+msgstr "Cấu hình cho dù để tạo file sao lưu"
 
 msgid "Enable built-in icon defaults"
-msgstr ""
+msgstr "Kích hoạt tính năng được xây dựng trong mặc định biểu tượng"
 
 msgid "Available styles:"
-msgstr ""
+msgstr "kiểu dáng có thể:"
 
 msgid "Active styles:"
-msgstr ""
+msgstr "phong cách mới"
 
 msgid "Add a new style by entering filename or URL"
-msgstr ""
+msgstr "Thêm một phong cách mới bằng cách nhập tên file hoặc URL"
 
 msgid "New style entry:"
-msgstr ""
+msgstr "nhập cảnh theo phong cách mới:"
 
 msgid "Remove the selected styles from the list of active styles"
-msgstr ""
+msgstr "Hủy bỏ các phong cách được lựa chọn từ danh sách các kiểu hoạt động"
 
 msgid "Edit the filename or URL for the selected active style"
-msgstr ""
+msgstr "Chỉnh sửa tên file hoặc URL cho phong cách hoạt động đã chọn"
 
 msgid "Add the selected available styles to the list of active styles"
 msgstr ""
+"Thêm các phong cách có sẵn lựa chọn vào danh sách các phong cách năng động"
 
 msgid "Reloads the list of available styles from ''{0}''"
-msgstr ""
+msgstr "Tải lại danh sách các phong cách có sẵn từ '' {0} ''"
 
 msgid "Loading style sources from ''{0}''"
-msgstr ""
+msgstr "nguồn tải phong cách từ '' {0} ''"
 
 msgid ""
 "<html>Failed to load the list of style sources "
 "from<br>''{0}''.<br><br>Details (untranslated):<br>{1}</html>"
 msgstr ""
+"<Html> Không thể tải danh sách các nguồn phong cáchTừ <br> '' {0} '' <br> "
+"chi tiết (chưa được dịch):. <br> {1} </ html>"
 
 msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr ""
+"Cảnh báo:. định dạng bất hợp pháp của các mục trong danh sách phong cách '' "
+"{0} '' Chấn '' {1} ''"
 
 msgid "JOSM default (MapCSS)"
-msgstr ""
+msgstr "JOSM mặc định (MapCSS)"
 
 msgid ""
 "Internal style to be used as base for runtime switchable overlay styles"
 msgstr ""
+"Phong cách nội bộ sẽ được sử dụng như là cơ sở cho phong cách thời gian chạy "
+"overlay switchable"
 
 msgid "Potlatch 2"
-msgstr ""
+msgstr "Potlatch 2"
 
 msgid "the main Potlatch 2 style"
-msgstr ""
+msgstr "các chính Potlatch 2 phong cách"
 
 msgid "Map Settings"
-msgstr ""
+msgstr "Map Settings"
 
 msgid "Settings for the map projection and data interpretation."
-msgstr ""
+msgstr "Settings cho phép chiếu bản đồ và giải thích dữ liệu."
 
 msgid "Could not read tagging preset source: {0}"
-msgstr ""
+msgstr "Không thể đọc gắn thẻ nguồn cài sẵn: {0}"
 
 msgid ""
 "Could not read tagging preset source: {0}\n"
 "Do you want to keep it?"
 msgstr ""
+"Không thể đọc gắn thẻ nguồn cài sẵn: {0} \n"
+"Bạn có muốn giữ nó?"
 
 msgid "Could not read tagging preset source {0}"
-msgstr ""
+msgstr "Không thể đọc gắn thẻ nguồn cài sẵn {0}"
 
 msgid ""
 "<html>Tagging preset source {0} can be loaded but it contains errors. Do you "
 "really want to use it?<br><br><table width=600>Error is: [{1}:{2}] "
 "{3}</table></html>"
 msgstr ""
+"<Html> Gắn thẻ cài sẵn nguồn {0} có thể được nạp nhưng nó bị lỗi. Bạn có? "
+"Thực sự muốn sử dụng nó <br> <chiều rộng bảng = 600> Lỗi là: [{1}: {2}]{3} "
+"</ table> </ html>"
 
 msgid ""
 "<html>Unable to parse tagging preset source: {0}. Do you really want to use "
 "it?<br><br><table width=400>Error is: [{1}:{2}] {3}</table></html>"
 msgstr ""
+"<Html> Không thể phân tích gắn thẻ nguồn cài sẵn:. {0} Bạn có thực sự muốn "
+"sử dụng? Nó <br> <chiều rộng bảng = 400> Lỗi là: [{1}: {2}] {3} </ table> </ "
+"html>"
 
 msgid ""
 "<html>Tagging preset source {0} can be loaded but it contains errors. Do you "
 "really want to use it?<br><br><table width=600>Error is: {1}</table></html>"
 msgstr ""
+"<Html> Gắn thẻ cài sẵn nguồn {0} có thể được nạp nhưng nó bị lỗi. Bạn cóThực "
+"sự muốn sử dụng nó <br> <chiều rộng bảng = 600> Lỗi là: {1} </ table> </ "
+"html>"
 
 msgid ""
 "<html>Unable to parse tagging preset source: {0}. Do you really want to use "
 "it?<br><br><table width=600>Error is: {1}</table></html>"
 msgstr ""
+"<Html> Không thể phân tích gắn thẻ nguồn cài sẵn:. {0} Bạn có thực sự muốn "
+"sử dụngNó <br> <chiều rộng bảng = 600> Lỗi là: {1} </ table> </ html>"
 
 msgid "Sort presets menu"
-msgstr ""
+msgstr "Sắp xếp presets menu"
 
 msgid "Tagging Presets"
-msgstr ""
+msgstr "Gắn thẻ Presets"
 
 msgid "Available presets:"
-msgstr ""
+msgstr "presets hiện có:"
 
 msgid "Active presets:"
-msgstr ""
+msgstr "cài đặt trước kích hoạt:"
 
 msgid "Add a new preset by entering filename or URL"
-msgstr ""
+msgstr "Thêm một định sẵn mới bằng cách nhập tên file hoặc URL"
 
 msgid "New preset entry:"
-msgstr ""
+msgstr "nhập cảnh New preset:"
 
 msgid "Remove the selected presets from the list of active presets"
-msgstr ""
+msgstr "Hủy bỏ các mẫu thiết lập chọn từ danh sách có sẵn đang hoạt động"
 
 msgid "Edit the filename or URL for the selected active preset"
-msgstr ""
+msgstr "Chỉnh sửa tên file hoặc URL cho cài đặt sẵn hoạt động đã chọn"
 
 msgid "Add the selected available presets to the list of active presets"
-msgstr ""
+msgstr "Thêm các bộ cài sẵn chọn vào danh sách các mẫu thiết lập hoạt động"
 
 msgid "Reloads the list of available presets from ''{0}''"
-msgstr ""
+msgstr "Tải lại danh sách các mẫu thiết lập sẵn từ '' {0} ''"
 
 msgid "Loading preset sources from ''{0}''"
-msgstr ""
+msgstr "Loading nguồn cài sẵn từ '' {0} ''"
 
 msgid ""
 "<html>Failed to load the list of preset sources "
 "from<br>''{0}''.<br><br>Details (untranslated):<br>{1}</html>"
 msgstr ""
+"<Html> Không thể tải danh sách các nguồn cài sẵnTừ <br> '' {0} '' <br> chi "
+"tiết (chưa được dịch):. <br> {1} </ html>"
 
 msgid "Warning: illegal format of entry in preset list ''{0}''. Got ''{1}''"
 msgstr ""
+"Cảnh báo:. định dạng bất hợp pháp của các mục trong danh sách định sẵn '' "
+"{0} '' Chấn '' {1} ''"
 
 msgid "Internal Preset"
-msgstr ""
+msgstr "nội bộ Preset"
 
 msgid "The default preset for JOSM"
-msgstr ""
+msgstr "cài sẵn mặc định cho JOSM"
 
 msgid "Plugin bundled with JOSM"
-msgstr ""
+msgstr "Plugin kèm với JOSM"
 
 msgid ""
 "Please click on <strong>Download list</strong> to download and display a "
 "list of available plugins."
 msgstr ""
+"Vui lòng click vào <strong> Tải về danh sách </ strong> để tải về và hiển "
+"thị mộtDanh sách các plugin có sẵn."
 
 msgid "Plugin {0} is still required by this plugin:"
 msgid_plural "Plugin {0} is still required by these {1} plugins:"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Plugin {0} vẫn yêu cầu của plugin này:"
 
 msgid "{0}: Version {1} (local: {2})"
-msgstr ""
+msgstr "{0}: Phiên bản {1} (địa phương: {2})"
 
 msgid " (requires: {0})"
-msgstr ""
+msgstr " (yêu cầu: {0})"
 
 msgid "Configure available plugins."
-msgstr ""
+msgstr "Cấu hình plugin có sẵn."
 
 msgid ""
 "The following plugin has been downloaded <strong>successfully</strong>:"
 msgid_plural ""
 "The following {0} plugins have been downloaded <strong>successfully</strong>:"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Các plugin sau đây đã được tải về <strong> thành công </ strong>:"
 
 msgid "Downloading the following plugin has <strong>failed</strong>:"
 msgid_plural ""
 "Downloading the following {0} plugins has <strong>failed</strong>:"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Tải các plugin sau đây đã <strong> không </ strong>:"
 
 msgid "Please restart JOSM to activate the downloaded plugins."
-msgstr ""
+msgstr "Hãy khởi động lại JOSM để kích hoạt các plugin tải về."
 
 msgid "Update plugins"
-msgstr ""
+msgstr "Cập nhật plugins"
 
 msgid "Search:"
-msgstr ""
+msgstr "Tìm kiếm"
 
 msgid "Enter a search expression"
-msgstr ""
+msgstr "Nhập một biểu thức tìm kiếm"
 
 msgid "Plugin update policy"
-msgstr ""
+msgstr "chính sách cập nhật Plugin"
 
 msgid "Accept the new plugin sites and close the dialog"
-msgstr ""
+msgstr "Chấp nhận các trang web plugin mới và đóng hộp thoại"
 
 msgid "Configure Plugin Sites"
-msgstr ""
+msgstr "Configure Plugin Sites"
 
 msgid "Download list"
-msgstr ""
+msgstr "Download list"
 
 msgid "Download the list of available plugins"
-msgstr ""
+msgstr "Tải danh sách các plugin có sẵn"
 
 msgid "Update the selected plugins"
-msgstr ""
+msgstr "Cập nhật các plugin chọn"
 
 msgid ""
 "All installed plugins are up to date. JOSM does not have to download newer "
 "versions."
 msgstr ""
+"Tất cả các plugin được cài đặt cập nhật. JOSM không phải tải về phiên bản "
+"mới hơnPhiên bản"
 
 msgid "Plugins up to date"
-msgstr ""
+msgstr "Plugins cập nhật"
 
 msgid "Configure sites..."
-msgstr ""
+msgstr "Cấu hình các trang web ..."
 
 msgid "Configure the list of sites where plugins are downloaded from"
-msgstr ""
+msgstr "Cấu hình danh sách các trang web nơi plugins được tải về từ"
 
 msgid "Add JOSM Plugin description URL."
-msgstr ""
+msgstr "Thêm JOSM Plugin mô tả URL."
 
 msgid "Enter URL"
-msgstr ""
+msgstr "Nhập URL"
 
 msgid "Please select an entry."
-msgstr ""
+msgstr "Hãy chọn một mục."
 
 msgid "Edit JOSM Plugin description URL."
-msgstr ""
+msgstr "Edit JOSM Plugin mô tả URL."
 
 msgid "JOSM Plugin description URL"
-msgstr ""
+msgstr "JOSM Plugin mô tả URL"
 
 msgid "Ask before updating"
-msgstr ""
+msgstr "Hỏi trước khi cập nhật"
 
 msgid "Always update without asking"
-msgstr ""
+msgstr "Luôn luôn cập nhật mà không cần hỏi"
 
 msgid "Never update"
-msgstr ""
+msgstr "Không bao giờ cập nhật"
 
 msgid ""
 "Please decide whether JOSM shall automatically update active plugins at "
 "startup after an update of JOSM itself."
 msgstr ""
+"Hãy quyết định xem liệu JOSM sẽ tự động cập nhật các plugin đang hoạt động "
+"tạiKhởi động sau khi một bản cập nhật của JOSM bản thân."
 
 msgid "Update interval (in days):"
-msgstr ""
+msgstr "Cập nhật khoảng thời gian (ngày):"
 
 msgid ""
 "Please decide whether JOSM shall automatically update active plugins after a "
 "certain period of time."
 msgstr ""
+"Hãy quyết định xem liệu JOSM sẽ tự động cập nhật các plugin hoạt động sau "
+"khi mộtThời gian nhất định."
 
 msgid "By Code (EPSG)"
-msgstr ""
+msgstr "Bằng Mã (EPSG)"
 
 msgid "Invalid projection configuration: {0}"
-msgstr ""
+msgstr "cấu hình chiếu không hợp lệ: {0}"
 
 msgid "Projection configuration is valid."
-msgstr ""
+msgstr "cấu hình chiếu là hợp lệ."
 
 msgid "Validate"
-msgstr ""
+msgstr "Validate"
 
 msgid "Parameter information..."
-msgstr ""
+msgstr "thông tin Parameter ..."
 
 msgid "Parameter information"
-msgstr ""
+msgstr "Thông tin Tham số"
 
 msgid "Projection name"
-msgstr ""
+msgstr "tên chiếu"
 
 msgid "Supported values:"
-msgstr ""
+msgstr "Hỗ trợ các giá trị:"
 
 msgid "Projection parameters"
-msgstr ""
+msgstr "thông số chiếu"
 
 msgid "False easting and false northing"
-msgstr ""
+msgstr "False đường về hướng đông và sai đường đi về hướng bắc"
 
 msgid "Central meridian"
-msgstr ""
+msgstr "kinh tuyến trung ương"
 
 msgid "Scaling factor"
-msgstr ""
+msgstr "Scaling yếu tố"
 
 msgid "Ellipsoid name"
-msgstr ""
+msgstr "tên Ellipsoid"
 
 msgid "Ellipsoid parameters"
-msgstr ""
+msgstr "thông số Ellipsoid"
 
 msgid "Datum name"
-msgstr ""
+msgstr "tên Datum"
 
 msgid "3 or 7 term datum transform parameters"
-msgstr ""
+msgstr "mốc 3 hoặc 7 hạn chuyển đổi các tham số"
 
 msgid "NTv2 grid file"
-msgstr ""
+msgstr "NTv2 tập tin lưới"
 
 msgid "Built-in:"
-msgstr ""
+msgstr "Built-in:"
 
 msgid "Projection bounds (in degrees)"
-msgstr ""
+msgstr "giới hạn chiếu (độ)"
 
 msgid "Sets the SRS=... parameter in the WMS request"
-msgstr ""
+msgstr "Thiết lập SRS = ... tham số trong yêu cầu WMS"
 
 msgid "Gauß-Krüger"
-msgstr ""
+msgstr "Gauss-Kruger"
 
 msgid "GK Zone"
-msgstr ""
+msgstr "GK Zone"
 
 msgid "Gauß-Krüger Zone {0}"
-msgstr ""
+msgstr "Gauss-Kruger Zone {0}"
 
 msgid "{0} ({1} to {2} degrees)"
-msgstr ""
+msgstr "{0} ({1} để {2} độ)"
 
 msgid "Lambert CC9 Zone (France)"
-msgstr ""
+msgstr "CC9 Zone Lambert (Pháp)"
 
 msgid "Lambert CC Zone"
-msgstr ""
+msgstr "Lambert CC Zone"
 
 msgid "{0} (Corsica)"
-msgstr ""
+msgstr "{0} (Corsica)"
 
 msgid "Lambert 4 Zones (France)"
-msgstr ""
+msgstr "Lambert 4 Zones (Pháp)"
 
 msgid "WGS84 Geographic"
-msgstr ""
+msgstr "WGS84 Geographic"
 
 msgid "Belgian Lambert 1972"
-msgstr ""
+msgstr "Bỉ Lambert 1972"
 
 msgid "Belgian Lambert 2008"
-msgstr ""
+msgstr "Bỉ Lambert 2008"
 
 msgid "Lambert Zone (Estonia)"
-msgstr ""
+msgstr "Lambert Zone (Estonia)"
 
 msgid "Lambert 93 (France)"
-msgstr ""
+msgstr "Lambert 93 (Pháp)"
 
 msgid "LKS-92 (Latvia TM)"
-msgstr ""
+msgstr "LKS-92 (Latvia TM)"
 
 msgid "SWEREF99 13 30 / EPSG:3008 (Sweden)"
-msgstr ""
+msgstr "SWEREF99 13 30 / EPSG: 3008 (Thụy Điển)"
 
 msgid "Projection method"
-msgstr ""
+msgstr "phương pháp chiếu"
 
 msgid "Projection code"
-msgstr ""
+msgstr "mã chiếu"
 
 msgid "Display coordinates as"
-msgstr ""
+msgstr "Hiển thị tọa độ như"
 
 msgid "System of measurement"
-msgstr ""
+msgstr "Hệ thống đo lường"
 
 msgid "Map Projection"
-msgstr ""
+msgstr "chiếu Bản đồ"
 
 msgid "The projection {0} could not be activated. Using Mercator"
-msgstr ""
+msgstr "Việc dự {0} không thể được kích hoạt. Sử dụng Mercator"
 
 msgid "PUWG 1992 (Poland)"
-msgstr ""
+msgstr "PUWG 1992 (Ba Lan)"
 
 msgid "PUWG 2000 Zone {0} (Poland)"
-msgstr ""
+msgstr "PUWG 2000 Zone {0} (Ba Lan)"
 
 msgid "PUWG (Poland)"
-msgstr ""
+msgstr "PUWG (Ba Lan)"
 
 msgid "PUWG Zone"
-msgstr ""
+msgstr "PUWG Zone"
 
 msgid "Swiss Grid (Switzerland)"
-msgstr ""
+msgstr "Swiss Grid (Thụy Sĩ)"
 
 msgid "<i>CH1903 / LV03 (without local corrections)</i>"
-msgstr ""
+msgstr "<i> CH1903 / LV03 (không có sửa chữa địa phương) </ i>"
 
 msgid "Guadeloupe Fort-Marigot 1949"
-msgstr ""
+msgstr "Guadeloupe Fort-Marigot 1949"
 
 msgid "Guadeloupe Ste-Anne 1948"
-msgstr ""
+msgstr "Guadeloupe Ste-Anne 1948"
 
 msgid "Martinique Fort Desaix 1952"
-msgstr ""
+msgstr "Martinique Fort Desaix 1952"
 
 msgid "Reunion RGR92"
-msgstr ""
+msgstr "Reunion RGR92"
 
 msgid "Guyane RGFG95"
-msgstr ""
+msgstr "Guyane RGFG95"
 
 msgid "UTM France (DOM)"
-msgstr ""
+msgstr "UTM Pháp (DOM)"
 
 msgid "UTM Geodesic system"
-msgstr ""
+msgstr "Hệ thống UTM đo đạc"
 
 msgid "UTM"
-msgstr ""
+msgstr "UTM"
 
 msgid "UTM Zone"
-msgstr ""
+msgstr "UTM Zone"
 
 msgid "North"
-msgstr ""
+msgstr "Bắc"
 
 msgid "South"
-msgstr ""
+msgstr "Nam"
 
 msgid "Hemisphere"
-msgstr ""
+msgstr "bán cầu"
 
 msgid "Remote Control"
-msgstr ""
+msgstr "điều khiển từ xa"
 
 msgid "Settings for the remote control feature."
-msgstr ""
+msgstr "Cài đặt cho tính năng điều khiển từ xa."
 
 msgid "Download objects to new layer"
-msgstr ""
+msgstr "Tải về đối tượng cho lớp mới"
 
 msgid "Confirm all Remote Control actions manually"
-msgstr ""
+msgstr "Xác nhận tất cả các hành động điều khiển từ xa bằng tay"
 
 msgid ""
 "Allows JOSM to be controlled from other applications, e.g. from a web "
 "browser."
 msgstr ""
+"Cho phép JOSM được điều khiển từ các ứng dụng khác, ví dụ như từ một "
+"webTrình duyệt."
 
 msgid ""
 "JOSM will always listen at <b>port {0}</b> (http) and <b>port {1}</b> "
 "(https) on localhost.<br>These ports are not configurable because they are "
 "referenced by external applications talking to JOSM."
 msgstr ""
+"JOSM sẽ luôn luôn lắng nghe tại <b> cổng {0} </ b> (http) và <b> cổng {1} </ "
+"b>(Https) trên localhost. <br> Những cổng này không thể cấu hình, vì họ "
+"làTham chiếu bởi các ứng dụng bên ngoài nói chuyện với JOSM."
 
 msgid "Enable remote control"
-msgstr ""
+msgstr "Kích hoạt tính năng điều khiển từ xa"
 
 msgid "Enable HTTPS support"
-msgstr ""
+msgstr "Kích hoạt tính năng hỗ trợ HTTPS"
 
 msgid "Install..."
-msgstr ""
+msgstr "Cài đặt ..."
 
 msgid "Uninstall..."
-msgstr ""
+msgstr "Gỡ bỏ ..."
 
 msgid "Install JOSM localhost certificate to system/browser root keystores"
-msgstr ""
+msgstr "Cài đặt JOSM chứng localhost để keystores gốc hệ thống / duyệt"
 
 msgid ""
 "Uninstall JOSM localhost certificate from system/browser root keystores"
 msgstr ""
+"Gỡ bỏ Giấy chứng nhận JOSM localhost từ keystores gốc hệ thống / duyệt"
 
 msgid "Certificate:"
-msgstr ""
+msgstr "Giấy chứng nhận:"
 
 msgid "Certificate has been successfully installed."
-msgstr ""
+msgstr "Giấy chứng nhận đã được cài đặt thành công."
 
 msgid "Certificate is already installed. Nothing to do."
-msgstr ""
+msgstr "Giấy chứng nhận đã được cài đặt. Không có gì để làm."
 
 msgid "Removing certificate {0} from root keystore."
-msgstr ""
+msgstr "Loại bỏ Giấy chứng nhận {0} từ keystore gốc."
 
 msgid "Certificate has been successfully uninstalled."
-msgstr ""
+msgstr "Giấy chứng nhận đã được gỡ bỏ cài đặt thành công."
 
 msgid "Certificate is not installed. Nothing to do."
-msgstr ""
+msgstr "Giấy chứng nhận không được cài đặt. Không có gì để làm."
 
 msgid "Permitted actions:"
-msgstr ""
+msgstr "hành động được phép:"
 
 msgid "Testing OSM API URL ''{0}''"
-msgstr ""
+msgstr "Thử nghiệm OSM URL API '' {0} ''"
 
 msgid ""
 "<html>''{0}'' is not a valid OSM API URL.<br>Please check the spelling and "
 "validate again.</html>"
 msgstr ""
+"<Html> '' {0} '' không phải là một URL OSM API hợp lệ. <br> Vui lòng kiểm "
+"tra chính tả vàXác nhận một lần nữa. </ Html>"
 
 msgid "Invalid API URL"
-msgstr ""
+msgstr "URL API không hợp lệ"
 
 msgid ""
 "<html>Failed to build URL ''{0}'' for validating the OSM API "
 "server.<br>Please check the spelling of ''{1}'' and validate again.</html>"
 msgstr ""
+"<Html> Không thể xây dựng URL '' {0} '' cho việc chứng thực các API "
+"OSMServer. <br> Vui lòng kiểm tra chính tả của '' {1} '' và xác nhận một lần "
+"nữa. </ Html>"
 
 msgid ""
 "<html>Failed to connect to the URL ''{0}''.<br>Please check the spelling of "
 "''{1}'' and your Internet connection and validate again.</html>"
 msgstr ""
+"<Html> Không thể kết nối đến các URL '' {0} ''. <br> Vui lòng kiểm tra chính "
+"tả của'' {1} '' và kết nối Internet của bạn và xác nhận một lần nữa. </ Html>"
 
 msgid "Connection to API failed"
-msgstr ""
+msgstr "Kết nối đến API thất bại"
 
 msgid ""
 "<html>Failed to retrieve a list of changesets from the OSM API server "
 "at<br>''{1}''. The server responded with the return code {0} instead of "
 "200.<br>Please check the spelling of ''{1}'' and validate again.</html>"
 msgstr ""
+"<Html> Không truy xuất một danh sách các changesets từ máy chủ OSM APITại "
+"<br> '' {1} ''. Máy chủ trả về mã trở lại {0} thay vì200. <br> Vui lòng kiểm "
+"tra chính tả của '' {1} '' và xác nhận một lần nữa. </ Html>"
 
 msgid ""
 "<html>The OSM API server at ''{0}'' did not return a valid response.<br>It "
 "is likely that ''{0}'' is not an OSM API server.<br>Please check the "
 "spelling of ''{0}'' and validate again.</html>"
 msgstr ""
+"<Html> Các máy chủ API OSM tại '' {0} '' đã không trả lại một phản ứng hợp "
+"lệ. <br> NóCó khả năng là '' {0} '' không phải là một máy chủ OSM API. <br> "
+"Vui lòng kiểm traLỗi chính tả '' {0} '' và xác nhận một lần nữa. </ Html>"
 
 msgid "Authentication"
-msgstr ""
+msgstr "Xác thực"
 
 msgid "Configure your identity and how to authenticate at the OSM server"
 msgstr ""
+"Cấu hình nhận dạng của bạn và làm thế nào để xác thực tại máy chủ OSM"
 
 msgid "Use Basic Authentication"
-msgstr ""
+msgstr "Sử dụng Basic Authentication"
 
 msgid ""
 "Select to use HTTP basic authentication with your OSM username and password"
 msgstr ""
+"Chọn sử dụng HTTP xác thực cơ bản với tên truy cập và mật khẩu của bạn OSM"
 
 msgid "Use OAuth"
-msgstr ""
+msgstr "Sử dụng OAuth"
 
 msgid "Select to use OAuth as authentication mechanism"
-msgstr ""
+msgstr "Chọn sử dụng OAuth là cơ chế xác thực"
 
 msgid ""
 "Unsupported value in preference ''{0}'', got ''{1}''. Using authentication "
 "method ''Basic Authentication''."
 msgstr ""
+"Giá trị không được hỗ trợ trong sở thích '' {0} '', đã '' {1} ''. Sử dụng "
+"xác thựcPhương pháp '' Basic Authentication ''."
 
 msgid "OSM username:"
-msgstr ""
+msgstr "OSM username:"
 
 msgid "OSM password:"
-msgstr ""
+msgstr "OSM password:"
 
 msgid "Failed to retrieve OSM credentials from credential manager."
-msgstr ""
+msgstr "Không thể lấy thông tin từ OSM quản lý có khả năng."
 
 msgid "Current credential manager is of type ''{0}''"
-msgstr ""
+msgstr "quản lý chứng chỉ hiện tại là loại '' {0} ''"
 
 msgid "Failed to save OSM credentials to credential manager."
-msgstr ""
+msgstr "Không thể lưu các thông tin OSM để ủy nhiệm quản lý."
 
 msgid "Periodically check for new messages"
-msgstr ""
+msgstr "Định kỳ kiểm tra tin nhắn mới"
 
 msgid "Check interval (minutes):"
-msgstr ""
+msgstr "Kiểm tra khoảng thời gian (phút):"
 
 msgid "Max age for closed notes (days):"
-msgstr ""
+msgstr "Max tuổi cho các ghi chú đóng (ngày):"
 
 msgid ""
 "Specifies the number of days a note needs to be closed to no longer be "
 "downloaded"
 msgstr ""
+"Xác định số lượng ngày một lưu ý cần phải được đóng cửa để không cònTải về"
 
 msgid "Failed to retrieve OAuth Access Token from credential manager"
-msgstr ""
+msgstr "Không thể lấy OAuth truy cập token từ người quản lý ủy nhiệm"
 
 msgid "Failed to store OAuth Access Token to credentials manager"
 msgstr ""
+"Không thể truy cập cửa hàng OAuth mã tự động cho các thông tin quản lý"
 
 msgid ""
 "You do not have an Access Token yet to access the OSM server using OAuth. "
 "Please authorize first."
 msgstr ""
+"Bạn không có chứng cứ truy cập nào để truy cập vào máy chủ OSM sử dụng "
+"OAuth.Hãy cấp phép đầu tiên."
 
 msgid ""
 "You already have an Access Token to access the OSM server using OAuth."
 msgstr ""
+"Bạn đã có một thẻ truy cập để truy cập vào máy chủ OSM sử dụng OAuth."
 
 msgid "Save to preferences"
-msgstr ""
+msgstr "Lưu vào sở thích"
 
 msgid "Click to step through the OAuth authorization process"
-msgstr ""
+msgstr "Click để bước qua quá trình cấp phép OAuth"
 
 msgid "New Access Token"
-msgstr ""
+msgstr "New truy cập token"
 
 msgid ""
 "Click to step through the OAuth authorization process and generate a new "
 "Access Token"
 msgstr ""
+"Click để bước qua quá trình cấp phép OAuth và tạo ra một mớiTruy cập token"
 
 msgid "Click test access to the OSM server with the current access token"
 msgstr ""
+"Click truy cập thử nghiệm để các máy chủ OSM với các thẻ truy cập hiện tại"
 
 msgid "<html>Use the default OSM server URL (<strong>{0}</strong>)</html>"
 msgstr ""
+"<html> Sử dụng các URL mặc định máy chủ OSM (<strong> {0} </ strong>) </ "
+"html>"
 
 msgid "Test the API URL"
-msgstr ""
+msgstr "Kiểm tra các URL API"
 
 msgid "The API URL is valid."
-msgstr ""
+msgstr "URL API là hợp lệ."
 
 msgid "Validation failed. The API URL seems to be invalid."
-msgstr ""
+msgstr "Xác nhận thất bại. Các URL API có vẻ là không hợp lệ."
 
 msgid "OSM API URL must not be empty. Please enter the OSM API URL."
-msgstr ""
+msgstr "URL OSM API không phải trống. Vui lòng nhập địa chỉ URL OSM API."
 
 msgid "The current value is not a valid URL"
-msgstr ""
+msgstr "Giá trị hiện tại không phải là một URL hợp lệ"
 
 msgid "Please enter the OSM API URL."
-msgstr ""
+msgstr "Hãy nhập URL OSM API."
 
 msgid "Proxy settings"
-msgstr ""
+msgstr "Proxy settings"
 
 msgid "Configure whether to use a proxy server"
-msgstr ""
+msgstr "Cấu hình xem có sử dụng một máy chủ proxy"
 
 msgid "Host:"
-msgstr ""
+msgstr "Host:"
 
 msgctxt "server"
 msgid "Port:"
-msgstr ""
+msgstr "Port:"
 
 msgid ""
 "Please enter a username and a password if your proxy requires authentication."
 msgstr ""
+"Xin hãy nhập tên người dùng và mật khẩu nếu proxy của bạn yêu cầu xác thực."
 
 msgid "Password:"
-msgstr ""
+msgstr "Mật khẩu:"
 
 msgid "No proxy"
-msgstr ""
+msgstr "Không có proxy"
 
 msgid "Use standard system settings"
-msgstr ""
+msgstr "Sử dụng các thiết lập hệ thống tiêu chuẩn"
 
 msgid ""
 "Use standard system settings (disabled. Start JOSM with <tt>-"
 "Djava.net.useSystemProxies=true</tt> to enable)"
 msgstr ""
+"Sử dụng các thiết lập hệ thống tiêu chuẩn (disabled Bắt đầu JOSM với <tt> -"
+".Djava.net.useSystemProxies = true </ tt> để bật)"
 
 msgid "Manually configure a HTTP proxy"
-msgstr ""
+msgstr "Cấu hình một proxy HTTP"
 
 msgid "Use a SOCKS proxy"
-msgstr ""
+msgstr "Sử dụng một proxy SOCKS"
 
 msgid ""
 "JOSM is configured to use proxies from the system setting, but the JVM is "
 "not configured to retrieve them. Resetting preferences to ''No proxy''"
 msgstr ""
+"JOSM được cấu hình để sử dụng proxy từ các thiết lập hệ thống, nhưng các JVM "
+"làKhông được cấu hình để lấy chúng. Reset sở thích để '' No proxy ''"
 
 msgid "Connection Settings"
-msgstr ""
+msgstr "Connection Settings"
 
 msgid "Connection Settings for the OSM server."
-msgstr ""
+msgstr "Cài đặt kết nối cho các máy chủ OSM."
 
 msgid "Action"
-msgstr ""
+msgstr "Action"
 
 msgid "Shortcut"
-msgstr ""
+msgstr "Shortcut"
 
 msgid "Shortcut Background: User"
-msgstr ""
+msgstr "Background Shortcut: User"
 
 msgid "Shortcut Background: Modified"
-msgstr ""
+msgstr "Background Shortcut: Được thay đổi"
 
 msgid "Use default"
-msgstr ""
+msgstr "Sử dụng mặc định"
 
 msgid "Key:"
-msgstr ""
+msgstr "Key:"
 
 msgid "Attention: Use real keyboard keys only!"
-msgstr ""
+msgstr "Chú ý: Chỉ sử dụng các phím bàn phím thật!"
 
 msgid "Keyboard Shortcuts"
-msgstr ""
+msgstr "Phím tắt"
 
 msgid "Changing keyboard shortcuts manually."
-msgstr ""
+msgstr "Thay đổi các phím tắt bàn phím bằng tay."
 
 msgid "Data validator"
-msgstr ""
+msgstr "Dữ liệu validator"
 
 msgid ""
 "An OSM data validator that checks for common errors made by users and editor "
 "programs."
 msgstr ""
+"An xác nhận dữ liệu OSM để kiểm tra các lỗi thông thường được thực hiện bởi "
+"người sử dụng và biên tậpChương trình."
 
 msgid "Available rules:"
-msgstr ""
+msgstr "quy tắc hiện có:"
 
 msgid "Active rules:"
-msgstr ""
+msgstr "quy tắc hoạt động:"
 
 msgid "Add a new rule by entering filename or URL"
-msgstr ""
+msgstr "Thêm một quy tắc mới bằng cách nhập tên file hoặc URL"
 
 msgid "New rule entry:"
-msgstr ""
+msgstr "quy tắc mục mới:"
 
 msgid "Remove the selected rules from the list of active rules"
-msgstr ""
+msgstr "Hủy bỏ các quy tắc lựa chọn từ danh sách các quy tắc hoạt động"
 
 msgid "Edit the filename or URL for the selected active rule"
-msgstr ""
+msgstr "Chỉnh sửa tên file hoặc URL cho các quy tắc hoạt động đã chọn"
 
 msgid "Add the selected available rules to the list of active rules"
-msgstr ""
+msgstr "Thêm các quy tắc có sẵn lựa chọn vào danh sách các quy tắc hoạt động"
 
 msgid "Reloads the list of available rules from ''{0}''"
-msgstr ""
+msgstr "Tải lại danh sách các quy tắc có sẵn từ '' {0} ''"
 
 msgid "Loading rule sources from ''{0}''"
-msgstr ""
+msgstr "nguồn tải nguyên tắc từ '' {0} ''"
 
 msgid ""
 "<html>Failed to load the list of rule sources "
 "from<br>''{0}''.<br><br>Details (untranslated):<br>{1}</html>"
 msgstr ""
+"<Html> Không thể tải danh sách các nguồn quy tắcTừ <br> '' {0} '' <br> chi "
+"tiết (chưa được dịch):. <br> {1} </ html>"
 
 msgid "Warning: illegal format of entry in rule list ''{0}''. Got ''{1}''"
 msgstr ""
+"Cảnh báo:. định dạng bất hợp pháp của các mục trong danh sách quy tắc '' {0} "
+"'' Chấn '' {1} ''"
 
 msgid "Checks for errors on addresses"
-msgstr ""
+msgstr "Kiểm tra các lỗi trên các địa chỉ"
 
 msgid "Tag combinations"
-msgstr ""
+msgstr "Tag kết hợp"
 
 msgid "Checks for missing tag or suspicious combinations"
-msgstr ""
+msgstr "Kiểm tra mất tích tag hoặc nghi ngờ kết hợp"
 
 msgid "Deprecated features"
-msgstr ""
+msgstr "tính năng được tán"
 
 msgid "Checks for deprecated features"
-msgstr ""
+msgstr "Kiểm tra các tính năng lỗi thời"
 
 msgid "Geometry"
-msgstr ""
+msgstr "Geometry"
 
 msgid "Checks for geometry errors"
-msgstr ""
+msgstr "Kiểm tra các lỗi hình học"
 
 msgid "Checks for errors on highways"
-msgstr ""
+msgstr "Kiểm tra các lỗi trên đường cao tốc"
 
 msgid "Multiple values"
-msgstr ""
+msgstr "Nhiều giá trị"
 
 msgid "Checks for wrong multiple values"
-msgstr ""
+msgstr "Kiểm tra cho nhiều giá trị sai"
 
 msgid "Numeric values"
-msgstr ""
+msgstr "Các giá trị số"
 
 msgid "Checks for wrong numeric values"
-msgstr ""
+msgstr "Kiểm tra cho các giá trị số sai"
 
 msgid "Power"
-msgstr ""
+msgstr "Power"
 
 msgid "Checks for errors on power infrastructures"
-msgstr ""
+msgstr "Kiểm tra các lỗi trên cơ sở hạ tầng năng lượng"
 
 msgid "Religion"
-msgstr ""
+msgstr "Tôn giáo"
 
 msgid "Checks for errors on religious objects"
-msgstr ""
+msgstr "Kiểm tra các lỗi trên đối tượng tôn giáo"
 
 msgid "Checks for errors on relations"
-msgstr ""
+msgstr "Kiểm tra các lỗi trên các mối quan hệ"
 
 msgid "Unnecessary tags"
-msgstr ""
+msgstr "thẻ không cần thiết"
 
 msgid "Checks for unnecessary tags"
-msgstr ""
+msgstr "Kiểm tra cho thẻ không cần thiết"
 
 msgid "Wikipedia"
-msgstr ""
+msgstr "Wikipedia"
 
 msgid "Checks for wrong wikipedia tags"
-msgstr ""
+msgstr "Kiểm tra cho các thẻ sai wikipedia"
 
 msgid "Tag checker rules"
-msgstr ""
+msgstr "quy tắc Tag checker"
 
 msgid "Choose Tag checker rules to enable"
-msgstr ""
+msgstr "Chọn quy tắc Tag kiểm tra để cho phép"
 
 msgid "Use ignore list."
-msgstr ""
+msgstr "Sử dụng danh sách bỏ qua."
 
 msgid "Use the ignore list to suppress warnings."
-msgstr ""
+msgstr "Sử dụng danh sách bỏ qua để ngăn chặn cảnh báo."
 
 msgid "Use error layer."
-msgstr ""
+msgstr "Sử dụng sai lớp."
 
 msgid "Use the error layer to display problematic elements."
-msgstr ""
+msgstr "Sử dụng các lớp lỗi để hiển thị các thành phần có vấn đề."
 
 msgid "Show informational level."
-msgstr ""
+msgstr "Show cấp thông tin."
 
 msgid "Show the informational tests."
-msgstr ""
+msgstr "Hiển thị các bài kiểm tra thông tin."
 
 msgid "Show informational level on upload."
-msgstr ""
+msgstr "Hiển thị thông tin về mức độ upload."
 
 msgid "Show the informational tests in the upload check windows."
-msgstr ""
+msgstr "Hiển thị các bài kiểm tra thông tin trong cửa sổ tải lên kiểm tra."
 
 msgid "On demand"
-msgstr ""
+msgstr "theo yêu cầu"
 
 msgid "On upload"
-msgstr ""
+msgstr "Ngày upload"
 
 msgid "Tests"
-msgstr ""
+msgstr "thử nghiệm"
 
 msgid "Choose tests to enable"
-msgstr ""
+msgstr "Chọn bài kiểm tra để cho phép"
 
 msgid "multiple"
-msgstr ""
+msgstr "nhiều"
 
 msgid "Remove old keys from up to {0} object"
 msgid_plural "Remove old keys from up to {0} objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Hủy bỏ các phím cũ từ lên đến {0} đối tượng"
 
 msgid "Delete the selection in the tag table"
-msgstr ""
+msgstr "Xóa lựa chọn trong bảng từ khóa"
 
 msgid "Add a new tag"
-msgstr ""
+msgstr "Thêm một thẻ mới"
 
 msgid "Paste tags from buffer"
-msgstr ""
+msgstr "thẻ Paste từ đệm"
 
 msgid "Use preset ''{0}'' of group ''{1}''"
-msgstr ""
+msgstr "Sử dụng đặt trước '' {0} '' của nhóm '' {1} ''"
 
 msgid "Use preset ''{0}''"
-msgstr ""
+msgstr "Sử dụng đặt trước '' {0} ''"
 
 msgid "Elements of type {0} are supported."
-msgstr ""
+msgstr "Các yếu tố của loại {0} được hỗ trợ."
 
 msgid "Edit also …"
-msgstr ""
+msgstr "Edit cũng ..."
 
 msgid "Apply Preset"
-msgstr ""
+msgstr "Áp dụng Preset"
 
 msgid "New relation"
+msgstr "mối quan hệ mới"
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
 msgstr ""
 
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Change {0} đối tượng"
 
 msgid "Nothing selected!"
-msgstr ""
+msgstr "Không có gì lựa chọn!"
 
 msgid "Selection unsuitable!"
-msgstr ""
+msgstr "Lựa chọn không thích hợp!"
 
 msgid "Change Tags"
-msgstr ""
+msgstr "Thay đổi Tags"
 
 msgid "Add or remove toolbar button"
-msgstr ""
+msgstr "Thêm hoặc loại bỏ nút thanh công cụ"
 
 msgid "Unknown requisite: {0}"
-msgstr ""
+msgstr "điều kiện tiên quyết Unknown: {0}"
 
 msgid "Illegal member expression: {0}"
-msgstr ""
+msgstr "biểu thành viên bất hợp pháp: {0}"
 
 msgid "More information about this feature"
-msgstr ""
+msgstr "Thông tin thêm về tính năng này"
 
 msgid "Available roles"
-msgstr ""
+msgstr "role có sẵn"
 
 msgid "role"
-msgstr ""
+msgstr "vai trò"
 
 msgid "count"
-msgstr ""
+msgstr "đếm"
 
 msgid "elements"
-msgstr ""
+msgstr "yếu tố"
 
 msgid "Optional Attributes:"
-msgstr ""
+msgstr "Tùy chọn thuộc tính:"
 
 msgid "Select auto-increment of {0} for this field"
-msgstr ""
+msgstr "Chọn auto-increment của {0} cho lĩnh vực này"
 
 msgid "Cancel auto-increment for this field"
-msgstr ""
+msgstr "Hủy auto-increment cho lĩnh vực này"
 
 msgid "{0}:"
-msgstr ""
+msgstr "{0}:"
 
 msgid ""
 "Warning in tagging preset \"{0}-{1}\": Ignoring ''{2}'' attribute as ''{3}'' "
 "elements are given."
 msgstr ""
+"Cảnh báo trong tagging preset \" {0} - {1} \": Bỏ qua '' {2} '' thuộc tính "
+"như '' {3} ''Yếu tố được đưa ra."
 
 msgid ""
 "Broken tagging preset \"{0}-{1}\" - Java method given in ''values_from'' is "
 "not \"{2}\""
 msgstr ""
+"Broken tagging preset \" {0} - {1} \"- phương pháp Java được đưa ra trong '' "
+"values_from '' làKhông \" {2} \""
 
 msgid ""
 "Broken tagging preset \"{0}-{1}\" - Java method given in ''values_from'' "
 "threw {2} ({3})"
 msgstr ""
+"Broken tagging preset \" {0} - {1} \"- phương pháp Java được đưa ra trong '' "
+"values_from ''Ném {2} ({3})"
 
 msgid ""
 "Broken tagging preset \"{0}-{1}\" - number of items in ''display_values'' "
 "must be the same as in ''values''"
 msgstr ""
+"Broken tagging preset \" {0} - {1} \"- số mục trong '' display_values "
+"​​''Phải giống như trong '' giá trị ''"
 
 msgid ""
 "Broken tagging preset \"{0}-{1}\" - number of items in "
 "''short_descriptions'' must be the same as in ''values''"
 msgstr ""
+"Broken tagging preset \" {0} - {1} \"- số mục trong'' Short_descriptions '' "
+"phải giống như trong '' giá trị ''"
 
 msgid "Unknown type: {0}"
-msgstr ""
+msgstr "loại Unknown: {0}"
 
 msgid "Preset group {1} / {0}"
-msgstr ""
+msgstr "nhóm Preset {1} / {0}"
 
 msgid "Preset group {0}"
-msgstr ""
+msgstr "nhóm Preset {0}"
 
 msgid "Reference {0} is being used before it was defined"
-msgstr ""
+msgstr "tham khảo {0} đang được sử dụng trước khi nó được định nghĩa"
 
 msgid "Roles cannot appear more than once"
-msgstr ""
+msgstr "Vai trò không thể xuất hiện nhiều hơn một lần"
 
 msgid "Preset role element without parent"
-msgstr ""
+msgstr "yếu tố đóng vai trò Preset mà không có cha mẹ"
 
 msgid "Preset sub element without parent"
-msgstr ""
+msgstr "yếu tố phụ Preset mà không cần cha mẹ"
 
 msgid "Error parsing {0}: "
-msgstr ""
+msgstr "Lỗi phân tích cú pháp {0}: "
 
 msgid "Search preset"
-msgstr ""
+msgstr "Tìm kiếm cài sẵn"
 
 msgid "Show preset search dialog"
-msgstr ""
+msgstr "Hiển thị cài sẵn tìm kiếm hộp thoại"
 
 msgid "Search presets"
-msgstr ""
+msgstr "Tìm kiếm cài đặt trước"
+
+msgid "Presets"
+msgstr "Presets"
 
 msgid "Search for objects by preset"
-msgstr ""
+msgstr "Tìm kiếm cho các đối tượng bằng cách cài sẵn"
 
 msgid "Show only applicable to selection"
-msgstr ""
+msgstr "Hiện chỉ áp dụng đối với lựa chọn"
 
 msgid "Search in tags"
-msgstr ""
+msgstr "Tìm kiếm trong thẻ"
 
 msgid "Add toolbar button"
-msgstr ""
+msgstr "nút trên thanh công cụ Add"
 
 msgid ""
 "Adjustable {0} not registered yet. Cannot set participation in synchronized "
 "adjustment."
 msgstr ""
+"Điều chỉnh {0} chưa đăng ký. Không thể thiết lập tham gia đồng bộĐiều chỉnh"
 
 msgid "Adjustable {0} not registered yet."
-msgstr ""
+msgstr "Điều chỉnh {0} chưa đăng ký."
 
 msgid "Some of the key listeners forgot to remove themselves: {0}"
-msgstr ""
+msgstr "Một số người nghe quan trọng để loại bỏ quên bản thân: {0}"
 
 msgid "Some of the key modifier listeners forgot to remove themselves: {0}"
-msgstr ""
+msgstr "Một số người nghe modifier key quên để loại bỏ bản thân: {0}"
 
 msgid "All files (*.*)"
-msgstr ""
+msgstr "Tất cả các file (*. *)"
 
 msgid "Received error page:"
-msgstr ""
+msgstr "Nhận lỗi trang:"
 
 msgid "Min. latitude"
-msgstr ""
+msgstr "vĩ độ Min."
 
 msgid "Min. longitude"
-msgstr ""
+msgstr "kinh độ Min."
 
 msgid "Max. latitude"
-msgstr ""
+msgstr "vĩ độ Max."
 
 msgid "Max. longitude"
-msgstr ""
+msgstr "kinh độ Max."
 
 msgid ""
 "URL from www.openstreetmap.org (you can paste a download URL here to specify "
 "a bounding box)"
 msgstr ""
+"URL từ www.openstreetmap.org (bạn có thể dán một URL tải về tại đây để xác "
+"địnhMột hộp bounding)"
 
 msgid ""
 "The current value is not a valid changeset ID. Please enter an integer value "
 "> 0"
 msgstr ""
+"Giá trị hiện tại không phải là một ID changeset hợp lệ. Vui lòng nhập một "
+"giá trị số nguyên> 0"
 
 msgid "Add a new source to the list."
-msgstr ""
+msgstr "Thêm một nguồn mới vào danh sách."
 
 msgid "Edit the selected source."
-msgstr ""
+msgstr "Chỉnh sửa nguồn được chọn."
 
 msgid "Delete the selected source from the list."
-msgstr ""
+msgstr "Xóa các nguồn được chọn từ danh sách."
 
 msgid ""
 "The current value is not a valid OSM ID. Please enter an integer value > 0"
 msgstr ""
+"Giá trị hiện tại không phải là một ID OSM hợp lệ. Vui lòng nhập một giá trị "
+"số nguyên> 0"
 
 msgid "false: the property is explicitly switched off"
-msgstr ""
+msgstr "false: tài sản được một cách rõ ràng tắt"
 
 msgid "true: the property is explicitly switched on"
-msgstr ""
+msgstr "true: tài sản được một cách rõ ràng bật"
 
 msgid ""
 "partial: different selected objects have different values, do not change"
 msgstr ""
+"Một phần: đối tượng được lựa chọn khác nhau có giá trị khác nhau, không thay "
+"đổi"
 
 msgid "unset: do not set this property on the selected objects"
 msgstr ""
+"unset: không thiết lập thuộc tính này trên các đối tượng được lựa chọn"
 
 msgid "Cut"
-msgstr ""
+msgstr "Cắt"
 
 msgid "Right click = copy to clipboard"
-msgstr ""
+msgstr "Nhấp chuột phải = sao chép vào clipboard"
 
 msgid "Missing mandatory attribute ''{0}''."
-msgstr ""
+msgstr "Thiếu thuộc tính bắt buộc '' {0} ''."
 
 msgid ""
 "Illegal value for mandatory attribute ''{0}'' of type long. Got ''{1}''."
 msgstr ""
+"Giá trị không hợp với thuộc tính bắt buộc '' {0} '' của loại dài. Chấn '' "
+"{1} ''."
 
 msgid ""
 "Illegal value for mandatory attribute ''{0}'' of type long (>=0). Got "
 "''{1}''."
 msgstr ""
+"Giá trị không hợp với thuộc tính bắt buộc '' {0} '' của loại dài (> = 0). "
+"Chấn'' {1} ''."
 
 msgid "Illegal value for attribute ''{0}'' of type double. Got ''{1}''."
 msgstr ""
+"Giá trị không hợp với thuộc tính '' {0} '' kiểu double. Chấn '' {1} ''."
 
 msgid ""
 "Illegal value for mandatory attribute ''{0}'' of type boolean. Got ''{1}''."
 msgstr ""
+"Giá trị không hợp với thuộc tính bắt buộc '' {0} '' kiểu boolean. Chấn '' "
+"{1} ''."
 
 msgid ""
 "Illegal value for mandatory attribute ''{0}'' of type OsmPrimitiveType. Got "
 "''{1}''."
 msgstr ""
+"Giá trị không hợp với thuộc tính bắt buộc '' {0} '' của loại "
+"OsmPrimitiveType. Chấn'' {1} ''."
 
 msgid ""
 "Way with external ID ''{0}'' includes missing node with external ID ''{1}''."
 msgstr ""
+"Way với ID bên ngoài '' {0} '' bao gồm thiếu nút với ID bên ngoài '' {1} ''."
 
 msgid "Deleted node {0} is part of way {1}"
-msgstr ""
+msgstr "nút Deleted {0} là một phần của đường {1}"
 
 msgid ""
 "Way {0} with {1} nodes has incomplete nodes because at least one node was "
 "missing in the loaded data."
 msgstr ""
+"Way {0} với {1} các nút có các nút không đầy đủ vì ít nhất một nút làMất "
+"tích trong việc nạp dữ liệu."
 
 msgid ""
 "Relation with external id ''{0}'' refers to a missing primitive with "
 "external id ''{1}''."
 msgstr ""
+"Mối quan hệ với id bên ngoài '' {0} '' là một thiếu nguyên thủy vớiId bên "
+"ngoài '' {1} ''."
 
 msgid "Deleted member {0} is used by relation {1}"
-msgstr ""
+msgstr "Xóa thành viên {0} được sử dụng bởi các mối quan hệ {1}"
 
 msgid "All Formats"
 msgstr "Tất cả định dạng"
 
 msgid "Downloading points {0} to {1}..."
-msgstr ""
+msgstr "Tải điểm {0} đến {1} ..."
 
 msgid "Contacting OSM Server..."
-msgstr "Đang kết nối đến máy chủ OSM..."
+msgstr "Liên hệ với OSM Server ..."
 
 msgid "Failed to open input stream for resource ''{0}''"
-msgstr ""
+msgstr "Không mở dòng đầu vào cho tài nguyên '' {0} ''"
 
 msgid ""
 "Failed to open file with extension ''{2}'' and namepart ''{3}'' in zip file "
 "''{0}''. Exception was: {1}"
 msgstr ""
+"Không thể mở tập tin với phần mở rộng '' {2} '' và tên dụng cụ '' {3} '' "
+"trong tập tin zip. '' {0} '' ngoại lệ là: {1}"
 
 msgid "Failed to rename file {0} to {1}."
-msgstr ""
+msgstr "Không thể đổi tên {0} tập tin đến {1}."
 
 msgid "Failed to load {0}, use cached file and retry next time: {1}"
 msgstr ""
+"Không thể tải tập tin {0}, sử dụng bộ nhớ đệm và thử lại lần sau: {1}"
 
 msgid ""
 "Unexpected response from HTTP server. Got {0} response without ''Location'' "
 "header. Can''t redirect. Aborting."
 msgstr ""
+"Phản ứng bất ngờ từ máy chủ HTTP. Chấn {0} phản ứng mà không có '' Vị trí "
+"''Header. Can''t chuyển hướng. Hủy bỏ."
 
 msgid "Too many redirects to the download URL detected. Aborting."
-msgstr ""
+msgstr "Quá nhiều chuyển hướng đến URL tải phát hiện. hủy bỏ."
 
 msgid "Download redirected to ''{0}''"
-msgstr ""
+msgstr "Download chuyển hướng đến '' {0} ''"
 
 msgid "Failed to read from ''{0}''. Server responded with status code {1}."
-msgstr ""
+msgstr "Không đọc được từ '' {0} ''. Máy chủ trả lời với mã trạng thái {1}."
 
 msgid ""
 "Illegal value of attribute ''{0}'' of element ''{1}'' in server "
 "capabilities. Got ''{2}''"
 msgstr ""
+"Giá trị không hợp của thuộc tính '' {0} '' của nguyên tố '' {1} '' trong máy "
+"chủKhả năng. Chấn '' {2} ''"
 
 msgid "Failed to parse date ''{0}'' replied by server."
-msgstr ""
+msgstr "Không thể ngày '' {0} '' trả lời của máy chủ phân tích."
 
 msgid ""
 "Unexpected format of error header for conflict in changeset update. Got "
 "''{0}''"
 msgstr ""
+"Định dạng không mong đợi của tiêu đề lỗi cho cuộc xung đột trong bản cập "
+"nhật changeset. Chấn'' {0} ''"
 
 msgid "Illegal longitude value for parameter ''{0}'', got {1}"
-msgstr ""
+msgstr "giá trị kinh độ bất hợp pháp đối với tham số '' {0} '', có {1}"
 
 msgid "Illegal latitude value for parameter ''{0}'', got {1}"
-msgstr ""
+msgstr "giá trị vĩ độ bất hợp pháp đối với tham số '' {0} '', có {1}"
 
 msgid "Unexpected value for ''{0}'' in changeset query url, got {1}"
-msgstr ""
+msgstr "giá trị bất ngờ cho '' {0} '' trong truy vấn url changeset, có {1}"
 
 msgid ""
 "Cannot create a changeset query including both the query parameters ''uid'' "
 "and ''display_name''"
 msgstr ""
+"Không thể tạo một truy vấn changeset bao gồm cả các thông số truy vấn '' uid "
+"''Và '' display_name ''"
 
 msgid "Unsupported parameter ''{0}'' in changeset query string"
-msgstr ""
+msgstr "tham số không được hỗ trợ '' {0} '' trong changeset chuỗi truy vấn"
 
 msgid "Unexpected format for port number in preference ''{0}''. Got ''{1}''."
 msgstr ""
+"định dạng bất ngờ cho số cổng vào sở thích '' {0} ''. Chấn '' {1} ''."
 
 msgid "The proxy will not be used."
-msgstr ""
+msgstr "Các proxy sẽ không được sử dụng."
 
 msgid "Illegal port number in preference ''{0}''. Got {1}."
-msgstr ""
+msgstr "số cảng bất hợp pháp trong sở thích '' {0} ''. Chấn {1}."
 
 msgid ""
 "Unexpected value for preference ''{0}'' found. Got ''{1}''. Will use no "
 "proxy."
 msgstr ""
+"Giá trị bất ngờ cho sở thích '' {0} '' được tìm thấy. Chấn '' {1} ''. Sẽ sử "
+"dụng không cóProxy"
 
 msgid ""
 "Unexpected parameters for HTTP proxy. Got host ''{0}'' and port ''{1}''."
 msgstr ""
+"Các thông số bất ngờ cho HTTP proxy. Chấn máy chủ '' {0} '' và cổng '' {1} "
+"''."
 
 msgid ""
 "Unexpected parameters for SOCKS proxy. Got host ''{0}'' and port ''{1}''."
 msgstr ""
+"Các thông số bất ngờ cho SOCKS proxy. Chấn máy chủ '' {0} '' và cổng '' {1} "
+"''."
 
 msgid ""
 "Connection to proxy ''{0}'' for URI ''{1}'' failed. Exception was: {2}"
 msgstr ""
+"Kết nối đến proxy '' {0} '' cho URI '' {1} '' thất bại ngoại lệ là:. {2}"
 
 msgid ""
 "The JVM is not configured to lookup proxies from the system settings. The "
 "property ''java.net.useSystemProxies'' was missing at startup time.  Will "
 "not use a proxy."
 msgstr ""
+"Các JVM không được cấu hình để tra cứu các proxy từ các cài đặt hệ thống. "
+"CácTài sản '' java.net.useSystemProxies '' đã mất tích vào lúc khởi động. "
+"SẽKhông sử dụng proxy."
 
 msgid "Parsing response from server..."
-msgstr ""
+msgstr "Phân tích phản hồi từ máy chủ ..."
 
 msgid "Unexpected XML element with name ''{0}''"
-msgstr ""
+msgstr "Unexpected phần tử XML với tên '' {0} ''"
 
 msgid "Could not export ''{0}''."
-msgstr ""
+msgstr "Không thể xuất '' {0} ''."
 
 msgid "Could not import ''{0}''."
-msgstr ""
+msgstr "Không thể nhập '' {0} ''."
 
 msgid "Could not import files."
-msgstr ""
+msgstr "Không thể nhập các tập tin."
 
 msgid "<html>Could not read file ''{0}''.<br>Error is:<br>{1}</html>"
 msgstr ""
+"<html> Không thể đọc tập tin '' {0} '' <br> Lỗi là:. <br> {1} </ html>"
 
 msgid "<html>Could not read files.<br>Error is:<br>{0}</html>"
-msgstr ""
+msgstr "<html> Không thể đọc các tập tin <br> Lỗi là:. <br> {0} </ html>"
 
 msgid "GeoJSON Files"
+msgstr "GeoJSON còn Files"
+
+msgid "Projected GeoJSON Files"
 msgstr ""
 
 msgid "Layer ''{0}'' not supported"
-msgstr ""
+msgstr "Layer '' {0} '' không được hỗ trợ"
 
 msgid ""
 "Note: GPL is not compatible with the OSM license. Do not upload GPL licensed "
 "tracks."
 msgstr ""
-"Chú ý: GPL không dùng  với bản quyền của OSM. Không tải lên các tracks có "
-"bản quyền GPL"
+"Lưu ý: GPL là không tương thích với giấy phép OSM Không tải lên GPL cấp "
+"phép.Bài hát.Chú ý: GPL không dùng  với bản quyền của OSM. Không tải lên các "
+"tracks có bản quyền GPL"
 
 msgid "GPS track description"
-msgstr ""
+msgstr "theo dõi GPS mô tả"
 
 msgid "Add author information"
 msgstr "Thêm thông tin tác giả"
 
 msgid "Real name"
-msgstr "Tên thật"
+msgstr "tên Real"
 
 msgid "E-Mail"
-msgstr "Thư điện tử"
+msgstr "E-Mail"
 
 msgid "Copyright (URL)"
-msgstr "Bản quyền (URL)"
+msgstr "Copyright (URL)"
 
 msgid "Predefined"
-msgstr "Định nghĩa trước"
+msgstr "Predefined"
 
 msgid "Copyright year"
-msgstr ""
+msgstr "Copyright năm"
 
 msgid "Keywords"
 msgstr "Từ khoá"
 
 msgid "Export options"
-msgstr "Tùy chọn để xuất"
+msgstr "tùy chọn Export"
 
 msgid "Export and Save"
-msgstr "Xuất và Lưu"
+msgstr "Xuất khẩu và Lưu"
 
 msgid ""
 "Error while exporting {0}:\n"
 "{1}"
 msgstr ""
-"Có lỗi trong khi xuất {0}:\n"
+"Lỗi trong khi xuất khẩu {0}: \n"
 "{1}"
 
 msgid "Choose a predefined license"
-msgstr ""
+msgstr "Chọn một giấy phép được xác định trước"
 
 msgid "GPX Files"
-msgstr "Các file GPX"
+msgstr "GPX Files"
 
 msgid "Parsing data for layer ''{0}'' failed"
-msgstr ""
+msgstr "Phân tích dữ liệu cho lớp '' {0} '' thất bại"
 
 msgid ""
 "Error occurred while parsing gpx data for layer ''{0}''. Only a part of the "
 "file will be available."
 msgstr ""
+"Lỗi xảy ra khi phân tích dữ liệu GPX cho lớp '' {0} ''. Chỉ có một phần "
+"củaTập tin sẽ có sẵn."
 
 msgid ""
 "Error occurred while parsing gpx file ''{0}''. Only a part of the file will "
 "be available."
 msgstr ""
+"Lỗi xảy ra khi phân tích GPX tập tin '' {0} ''. Chỉ có một phần của tập tin "
+"sẽCó sẵn."
 
 msgid "Parse error: invalid document structure for GPX document."
-msgstr ""
+msgstr "Parse error: cấu trúc tài liệu không hợp lệ cho tài liệu GPX."
 
 msgid "(at line {0}, column {1})"
-msgstr ""
+msgstr "(ở dòng {0}, cột {1})"
 
 msgid "Unknown mode {0}."
-msgstr ""
+msgstr "chế độ Unknown {0}."
 
 msgid "Image Files"
-msgstr ""
+msgstr "Image Files"
 
 msgid "folder"
-msgstr ""
+msgstr "thư mục"
 
 msgid "Looking for image files"
-msgstr ""
+msgstr "Tìm kiếm các tập tin hình ảnh"
 
 msgid "No image files found."
-msgstr ""
+msgstr "Không có tập tin hình ảnh được tìm thấy."
 
 msgid "get number of unread messages"
-msgstr ""
+msgstr "có được số tin nhắn chưa đọc"
 
 msgid "You have {0} unread message."
 msgid_plural "You have {0} unread messages."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Bạn có {0} tin nhắn chưa đọc."
 
 msgid "Click here to see your inbox."
-msgstr ""
+msgstr "Nhấn vào đây để xem hộp thư đến của bạn."
 
 msgid "Message notifier"
-msgstr ""
+msgstr "tin nhắn thông báo dạng"
 
 msgid "{0} not available (offline mode)"
-msgstr ""
+msgstr "{0} không có sẵn (chế độ offline)"
 
 msgid ""
 "No primitive with id {0} in local dataset. Cannot infer primitive type."
 msgstr ""
+"Không có nguyên thủy với id {0} trong tập dữ liệu địa phương. Không thể suy "
+"luận kiểu nguyên thủy."
 
 msgid "Fetching a package of nodes from ''{0}''"
-msgstr ""
+msgstr "Đang tìm nạp một gói các nút từ '' {0} ''"
 
 msgid "Fetching a package of ways from ''{0}''"
-msgstr ""
+msgstr "Đang tìm nạp một gói các cách từ '' {0} ''"
 
 msgid "Fetching a package of relations from ''{0}''"
-msgstr ""
+msgstr "Đang tìm nạp một gói các mối quan hệ từ '' {0} ''"
 
 msgid "Downloading {0} object from ''{1}''"
 msgid_plural "Downloading {0} objects from ''{1}''"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Tải {0} đối tượng từ '' {1} ''"
 
 msgid ""
 "Server replied with response code 404, retrying with an individual request "
 "for each object."
 msgstr ""
+"Server trả lời bằng phản ứng mã 404, thử lại với một yêu cầu cá nhânĐối với "
+"từng đối tượng."
 
 msgid "Downloading OSM data..."
-msgstr ""
+msgstr "Tải dữ liệu OSM ..."
 
 msgid "Fetching node with id {0} from ''{1}''"
-msgstr ""
+msgstr "Đang tìm nạp nút với id {0} từ '' {1} ''"
 
 msgid "Fetching way with id {0} from ''{1}''"
-msgstr ""
+msgstr "cách tìm nạp với id {0} từ '' {1} ''"
 
 msgid "Fetching relation with id {0} from ''{1}''"
-msgstr ""
+msgstr "Đang tìm nạp mối quan hệ với id {0} từ '' {1} ''"
 
 msgid "Server replied with response code 404 for id {0}. Skipping."
-msgstr ""
+msgstr "Server trả lời bằng phản ứng mã 404 cho id {0}. Bỏ qua"
 
 msgid "NMEA-0183 Files"
-msgstr "Các file NMEA-0183"
+msgstr "NMEA-0183 Files"
 
 msgid "Coordinates imported: {0}"
-msgstr ""
+msgstr "tọa độ nhập khẩu: {0}"
 
 msgid "Malformed sentences: {0}"
-msgstr ""
+msgstr "câu dạng sai: {0}"
 
 msgid "Checksum errors: {0}"
-msgstr ""
+msgstr "lỗi Checksum: {0}"
 
 msgid "Unknown sentences: {0}"
-msgstr ""
+msgstr "câu Unknown: {0}"
 
 msgid "Zero coordinates: {0}"
-msgstr ""
+msgstr "tọa độ Zero: {0}"
 
 msgid "NMEA import success:"
-msgstr ""
+msgstr "nhập khẩu NMEA thành công:"
 
 msgid "NMEA import failure!"
-msgstr ""
+msgstr "nhập khẩu NMEA thất bại!"
 
 msgid "Note Files"
-msgstr ""
+msgstr "Lưu ý Files"
 
 msgid "OSM API"
-msgstr ""
+msgstr "OSM API"
 
 msgid "JOSM website"
-msgstr ""
+msgstr "JOSM website"
 
 msgid "Unable to access ''{0}'': {1} not available (offline mode)"
-msgstr ""
+msgstr "Không thể truy cập '' {0} '': {1} không có sẵn (chế độ offline)"
 
 msgid "Unable to initialize OSM API."
-msgstr ""
+msgstr "Không thể khởi tạo OSM API."
 
 msgid "This version of JOSM is incompatible with the configured server."
 msgstr ""
+"Phiên bản này của JOSM là không tương thích với các máy chủ được cấu hình."
 
 msgid ""
 "It supports protocol version 0.6, while the server says it supports {0} to "
 "{1}."
 msgstr ""
+"Nó hỗ trợ giao thức phiên bản 0.6, trong khi các máy chủ nói nó hỗ trợ {0} "
+"để{1}."
 
 msgid "Removed layer {0} because it is not allowed by the configured API."
-msgstr ""
+msgstr "layer Removed {0} bởi vì nó không được phép của các API cấu hình."
 
 msgid "Unexpected format of ID replied by the server. Got ''{0}''."
-msgstr ""
+msgstr "định dạng không mong đợi của ID trả lời của máy chủ. Chấn '' {0} ''."
 
 msgid ""
 "Unexpected format of new version of modified primitive ''{0}''. Got ''{1}''."
 msgstr ""
+"Định dạng không mong đợi của phiên bản mới của biến đổi nguyên thủy '' {0} "
+"''. Chấn '' {1} ''."
 
 msgid "Creating changeset..."
-msgstr ""
+msgstr "Tạo changeset ..."
 
 msgid "Successfully opened changeset {0}"
-msgstr ""
+msgstr "changeset Khai trương thành công {0}"
 
 msgid "Changeset ID > 0 expected. Got {0}."
-msgstr ""
+msgstr "changeset ID> 0 dự kiến. Chấn {0}."
 
 msgid "Updating changeset..."
-msgstr ""
+msgstr "Đang cập nhật changeset ..."
 
 msgid "Updating changeset {0}..."
-msgstr ""
+msgstr "Đang cập nhật changeset {0} ..."
 
 msgid "Closing changeset..."
-msgstr ""
+msgstr "Đóng cửa changeset ..."
 
 msgid "No changeset present for diff upload."
-msgstr ""
+msgstr "Không changeset hiện cho diff upload."
 
 msgid "Preparing upload request..."
-msgstr ""
+msgstr "Chuẩn bị yêu cầu tải lên ..."
 
 msgid "Waiting 10 seconds ... "
-msgstr ""
+msgstr "Chờ đợi 10 giây ... "
 
 msgid "Starting retry {0} of {1} in {2} seconds ..."
-msgstr ""
+msgstr "khởi điểm retry {0} {1} trong {2} giây ..."
 
 msgid "OK - trying again."
-msgstr ""
+msgstr "OK ​​- cố gắng một lần nữa."
 
 msgid "Starting retry {0} of {1}."
-msgstr ""
+msgstr "khởi điểm retry {0} {1}."
 
 msgid "Current changeset is null. Cannot upload data."
-msgstr ""
+msgstr "changeset hiện tại là vô giá trị. Không thể tải dữ liệu."
 
 msgid "ID of current changeset > 0 required. Current ID is {0}."
-msgstr ""
+msgstr "ID của hiện changeset> 0 cần thiết. ID hiện tại là {0}."
 
 msgid "Open changeset expected. Got closed changeset with id {0}."
-msgstr ""
+msgstr "Open changeset mong đợi. Chấn đóng changeset với id {0}."
 
 msgid "Note upload failed"
-msgstr ""
+msgstr "Note lên không thành công"
 
 msgid "Error parsing note response from server"
-msgstr ""
+msgstr "Lỗi phân tích lưu ý phản hồi từ máy chủ"
 
 msgid "(Code={0})"
-msgstr ""
+msgstr "(Mã số = {0})"
 
 msgid "The server replied an error with code {0}."
-msgstr ""
+msgstr "Các máy chủ trả lời một lỗi với mã {0}."
 
 msgid "OSM Server Files bzip2 compressed"
-msgstr ""
+msgstr "OSM máy chủ tập tin nén bzip2"
 
 msgid "Prolog of OsmChange document already written. Please write only once."
-msgstr ""
+msgstr "Prolog của OsmChange tài liệu đã viết. Hãy viết một lần."
 
 msgid "Prolog of OsmChange document not written yet. Please write first."
 msgstr ""
+"Prolog của tài liệu OsmChange không bằng văn bản. Vui lòng viết đầu tiên."
 
 msgid "OsmChange File"
-msgstr ""
+msgstr "OsmChange File"
 
 msgid "File ''{0}'' does not exist."
-msgstr ""
+msgstr "File '' {0} '' không tồn tại."
 
 msgid "No data found in file {0}."
-msgstr ""
+msgstr "Không tìm thấy dữ liệu trong {0} tập tin."
 
 msgid "Open OsmChange file"
-msgstr ""
+msgstr "Mở tập tin OsmChange"
 
 msgid "Unsupported version: {0}"
-msgstr ""
+msgstr "phiên bản được hỗ trợ: {0}"
 
 msgid ""
 "Unsupported start element ''{0}'' in changeset content at position "
 "({1},{2}). Skipping."
 msgstr ""
+"Phần tử bắt đầu được hỗ trợ '' {0} '' trong nội dung changeset ở vị trí({1}, "
+"{2}). Bỏ qua"
 
 msgid ""
 "Illegal document structure. Found node, way, or relation outside of "
 "''create'', ''modify'', or ''delete''."
 msgstr ""
+"Cấu trúc tài liệu bất hợp pháp. Found nút, cách, hoặc mối quan hệ bên "
+"ngoài'' Tạo ra '', '' sửa đổi '', hoặc '' xóa ''."
 
 msgid ""
 "Unsupported end element ''{0}'' in changeset content at position ({1},{2}). "
 "Skipping."
 msgstr ""
+"Yếu tố cuối cùng không được hỗ trợ '' {0} '' trong nội dung changeset tại vị "
+"trí ({1}, {2}).Bỏ qua"
 
 msgid "Parsing changeset content ..."
-msgstr ""
+msgstr "Phân tích nội dung changeset ..."
 
 msgid "Illegal boolean value for attribute ''{0}''. Got ''{1}''."
 msgstr ""
+"giá trị boolean bất hợp pháp cho thuộc tính '' {0} ''. Chấn '' {1} ''."
 
 msgid "Illegal value for attribute ''{0}''. Got ''{1}''."
-msgstr ""
+msgstr "Giá trị không hợp với thuộc tính '' {0} ''. Chấn '' {1} ''."
 
 msgid "Illegal numeric value for attribute ''{0}''. Got ''{1}''."
-msgstr ""
+msgstr "giá trị số bất hợp pháp cho thuộc tính '' {0} ''. Chấn '' {1} ''."
 
 msgid "Missing mandatory attribute ''{0}'' of XML element {1}."
-msgstr ""
+msgstr "Thiếu thuộc tính bắt buộc '' {0} '' của các phần tử XML {1}."
 
 msgid "Undefined element ''{0}'' found in input stream. Aborting."
-msgstr ""
+msgstr "yếu tố Không xác định '' {0} '' tìm thấy trong dòng đầu vào. hủy bỏ."
 
 msgid "Parsing list of changesets..."
-msgstr ""
+msgstr "Phân tích danh sách các changesets ..."
 
 msgid "Failed to sign a HTTP connection with an OAuth Authentication header"
-msgstr ""
+msgstr "Không thể ký một kết nối HTTP với một tiêu đề OAuth xác thực"
 
 msgid "Unexpected value for preference ''{0}''. Got ''{1}''."
-msgstr ""
+msgstr "giá trị bất ngờ cho sở thích '' {0} ''. Chấn '' {1} ''."
 
 msgid "<html>An error occurred while saving.<br>Error is:<br>{0}</html>"
 msgstr ""
+"<html> Một lỗi xảy ra trong khi tiết kiệm <br> Lỗi là:. <br> {0} </ html>"
 
 msgid ""
 "<html>An error occurred while restoring backup file.<br>Error "
 "is:<br>{0}</html>"
 msgstr ""
+"<Html> Một lỗi xảy ra trong khi khôi phục tập tin sao lưu. <br> ErrorLà: "
+"<br> {0} </ html>"
 
 msgid "OSM Server Files gzip compressed"
-msgstr ""
+msgstr "OSM máy chủ tập tin nén gzip"
 
 msgid "Parsing OSM history data ..."
-msgstr ""
+msgstr "Phân tích lịch sử dữ liệu OSM ..."
 
 msgid "OSM Server Files"
-msgstr "Các file trên Server OSM"
+msgstr "OSM chủ Files"
 
 msgid "Invalid dataset"
-msgstr ""
+msgstr "bộ dữ liệu không hợp lệ"
 
 msgid "No data found for layer ''{0}''."
-msgstr ""
+msgstr "Không tìm thấy dữ liệu cho lớp '' {0} ''."
 
 msgid "No data found in file ''{0}''."
-msgstr ""
+msgstr "Không tìm thấy dữ liệu trong tập tin '' {0} ''."
 
 msgid "Open OSM file"
-msgstr ""
+msgstr "Mở tập tin OSM"
 
 msgid "Reading was canceled"
-msgstr ""
+msgstr "Reading đã bị hủy bỏ"
 
 msgid ""
 "Missing mandatory attributes on element ''bounds''. Got "
 "minlon=''{0}'',minlat=''{1}'',maxlon=''{3}'',maxlat=''{4}'', origin=''{5}''."
 msgstr ""
+"Thiếu thuộc tính bắt buộc về yếu tố '' giới hạn ''. ChấnMinlon = '' {0} '', "
+"minlat = '' {1} '', maxlon = '' {3} '', maxlat = '' {4} '', nguồn gốc = '' "
+"{5} '' ."
 
 msgid "Deleted way {0} contains nodes"
-msgstr ""
+msgstr "cách xóa {0} chứa các nút"
 
 msgid "Missing mandatory attribute ''{0}'' on <nd> of way {1}."
-msgstr ""
+msgstr "Thiếu thuộc tính bắt buộc '' {0} '' trên <nd> cách {1}."
 
 msgid "Illegal value of attribute ''ref'' of element <nd>. Got {0}."
 msgstr ""
+"giá trị bất hợp pháp của thuộc tính '' tài '' của các phần tử <nd>. Chấn {0}."
 
 msgid "Deleted relation {0} contains members"
-msgstr ""
+msgstr "mối quan hệ đã bị xóa {0} chứa các thành viên"
 
 msgid "Missing attribute ''ref'' on member in relation {0}."
-msgstr ""
+msgstr "Thiếu thuộc tính '' tài '' về thành viên liên quan {0}."
 
 msgid ""
 "Illegal value for attribute ''ref'' on member in relation {0}. Got {1}"
 msgstr ""
+"Giá trị không hợp với thuộc tính '' tài '' về thành viên liên quan {0}. Chấn "
+"{1}"
 
 msgid "Missing attribute ''type'' on member {0} in relation {1}."
 msgstr ""
+"Thiếu thuộc tính '' loại '' trên {0} thành viên trong mối quan hệ {1}."
 
 msgid ""
 "Illegal value for attribute ''type'' on member {0} in relation {1}. Got {2}."
 msgstr ""
+"Giá trị không hợp với thuộc tính '' loại '' về thành viên {0} trong mối quan "
+"hệ {1}. Chấn {2}."
 
 msgid "Incomplete <member> specification with ref=0"
-msgstr ""
+msgstr "Incomplete <thành viên> đặc điểm kỹ thuật với ref = 0"
 
 msgid "Missing key or value attribute in tag."
-msgstr ""
+msgstr "Thiếu thuộc tính khóa hoặc giá trị trong tag."
 
 msgid "Undefined element ''{0}'' found in input stream. Skipping."
-msgstr ""
+msgstr "yếu tố Không xác định '' {0} '' tìm thấy trong dòng đầu vào. Bỏ qua"
 
 msgid "Illegal object with ID=0."
-msgstr ""
+msgstr "đối tượng bất hợp pháp với ID = 0."
 
 msgid ""
 "Illegal value for attribute ''version'' on OSM primitive with ID {0}. Got "
 "{1}."
 msgstr ""
+"Giá trị không hợp với thuộc tính '' phiên bản '' trên OSM nguyên thủy với ID "
+"{0}. Chấn{1}."
 
 msgid ""
 "Normalizing value of attribute ''version'' of element {0} to {2}, API "
 "version is ''{3}''. Got {1}."
 msgstr ""
+"Bình thường hoá giá trị của thuộc tính '' phiên bản '' của các phần tử {0} "
+"để {2}, APIPhiên bản là '' {3} ''. Chấn {1}."
 
 msgid "Unknown or unsupported API version. Got {0}."
-msgstr ""
+msgstr "Không biết hoặc không được hỗ trợ phiên bản API. Chấn {0}."
 
 msgid "Missing attribute ''version'' on OSM primitive with ID {0}."
-msgstr ""
+msgstr "Thiếu thuộc tính '' phiên bản '' trên OSM nguyên thủy với ID {0}."
 
 msgid ""
 "Illegal value for attribute ''changeset'' on new object {1}. Got {0}. "
 "Resetting to 0."
 msgstr ""
+"Giá trị không hợp với thuộc tính '' changeset '' đối tượng mới {1}. Chấn "
+"{0}.Nắn 0."
 
 msgid "Illegal value for attribute ''changeset''. Got {0}."
-msgstr ""
+msgstr "Giá trị không hợp với thuộc tính '' changeset ''. Chấn {0}."
 
 msgid "Missing required attribute ''{0}''."
-msgstr ""
+msgstr "Thiếu thuộc tính cần thiết '' {0} ''."
 
 msgid "Illegal long value for attribute ''{0}''. Got ''{1}''."
-msgstr ""
+msgstr "giá trị lâu bất hợp pháp cho thuộc tính '' {0} ''. Chấn '' {1} ''."
 
 msgid "{0} bytes have been read"
-msgstr ""
+msgstr "{0} byte đã được đọc"
 
 msgid "Prepare OSM data..."
-msgstr ""
+msgstr "Chuẩn bị dữ liệu OSM ..."
 
 msgid "Parsing OSM data..."
-msgstr ""
+msgstr "Phân tích dữ liệu OSM ..."
 
 msgid "Preparing data set..."
-msgstr ""
+msgstr "Chuẩn bị tập hợp dữ liệu ..."
 
 msgid "Line {0} column {1}: "
-msgstr ""
+msgstr "Line {0} {1} cột: "
 
 msgid "Downloading referring ways ..."
-msgstr ""
+msgstr "Tải đề cập cách ..."
 
 msgid "Downloading referring relations ..."
-msgstr ""
+msgstr "quan hệ Downloading cập ..."
 
 msgid "Reading changesets..."
-msgstr ""
+msgstr "Đọc sách changesets ..."
 
 msgid "Downloading changesets ..."
-msgstr ""
+msgstr "Tải changesets ..."
 
 msgid "Reading changeset {0} ..."
-msgstr ""
+msgstr "Đọc sách changeset {0} ..."
 
 msgid "Downloading changeset {0} ..."
-msgstr ""
+msgstr "Tải changeset {0} ..."
 
 msgid "Downloading {0} changeset ..."
 msgid_plural "Downloading {0} changesets ..."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Tải {0} changeset ..."
 
 msgid "({0}/{1}) Downloading changeset {2} ..."
-msgstr ""
+msgstr "({0} / {1}) Tải changeset {2} ..."
 
 msgid "Downloading content for changeset {0} ..."
-msgstr ""
+msgstr "Tải nội dung cho {0} changeset ..."
 
 msgid "Downloading history..."
-msgstr ""
+msgstr "Tải lịch sử ..."
 
 msgid "Contacting Server..."
-msgstr ""
+msgstr "Liên hệ với Server ..."
 
 msgid "Downloading OSM notes..."
-msgstr ""
+msgstr "Tải ghi chú OSM ..."
 
 msgid "Failed to open connection to API {0}."
-msgstr ""
+msgstr "Không thể mở kết nối đến {0} API."
 
 msgid ""
 "Could not connect to the OSM server. Please check your internet connection."
 msgstr ""
+"Không thể kết nối đến máy chủ OSM. Vui lòng kiểm tra kết nối internet của "
+"bạn."
 
 msgid "Reading error text failed."
-msgstr ""
+msgstr "Đọc văn bản lỗi thất bại."
 
 msgid "XML tag <user> is missing."
-msgstr ""
+msgstr "tag XML <user> là mất tích."
 
 msgid "Missing attribute ''{0}'' on XML tag ''{1}''."
-msgstr ""
+msgstr "Thiếu thuộc tính '' {0} '' trên tag XML '' {1} ''."
 
 msgid "Illegal value for attribute ''{0}'' on XML tag ''{1}''. Got {2}."
 msgstr ""
+"Giá trị không hợp với thuộc tính '' {0} '' trên tag XML '' {1} ''. Chấn {2}."
 
 msgid "Reading user info ..."
-msgstr ""
+msgstr "Đọc thông tin người sử dụng ..."
 
 msgid "Starting to upload with one request per primitive ..."
-msgstr ""
+msgstr "Bắt đầu tải lên với một yêu cầu mỗi nguyên thủy ..."
 
 msgid "{0}% ({1}/{2}), {3} left. Uploading node ''{4}'' (id: {5})"
-msgstr ""
+msgstr "{0}% ({1} / {2}), {3} rời Tải lên nút '' {4} '' (id: {5})."
 
 msgid "{0}% ({1}/{2}), {3} left. Uploading way ''{4}'' (id: {5})"
-msgstr ""
+msgstr "{0}% ({1} / {2}), {3} rời Tải lên đường '' {4} '' (id: {5})."
 
 msgid "{0}% ({1}/{2}), {3} left. Uploading relation ''{4}'' (id: {5})"
-msgstr ""
+msgstr "{0}% ({1} / {2}), {3} trái liên quan Tải lên '' {4} '' (id: {5})."
 
 msgid "Starting to upload in one request ..."
-msgstr ""
+msgstr "Bắt đầu tải lên trong một thỉnh cầu ..."
 
 msgid "Value >0 expected for parameter ''{0}'', got {1}"
-msgstr ""
+msgstr "Giá trị> 0 sẽ cho thông số '' {0} '', có {1}"
 
 msgid "Starting to upload in chunks..."
-msgstr ""
+msgstr "Bắt đầu tải lên trong khối ..."
 
 msgid "({0}/{1}) Uploading {2} object..."
 msgid_plural "({0}/{1}) Uploading {2} objects..."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "({0} / {1}) Uploading {2} đối tượng ..."
 
 msgid "Uploading data ..."
-msgstr ""
+msgstr "Tải lên dữ liệu ..."
 
 msgid "Unexpected id 0 for osm primitive found"
-msgstr ""
+msgstr "Unexpected id 0 cho OSM nguyên thủy được tìm thấy"
 
 msgid "OSM Server Files zip compressed"
-msgstr ""
+msgstr "OSM máy chủ tập tin zip nén"
 
 msgid "WMS Files (*.wms)"
-msgstr ""
+msgstr "WMS Files (* .wms)"
+
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr "không được hỗ trợ phiên bản WMS file; tìm thấy {0}, dự kiến ​​{1}"
 
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
@@ -12568,66 +13731,71 @@ msgid ""
 "transferred <strong>unencrypted</strong> in every request sent to the OSM "
 "server. <strong>Do not use a valuable password.</strong></p></body></html>"
 msgstr ""
+"<Html> <body> <p class = \" cảnh báo cơ thể \"> <strong> Cảnh báo: </ "
+"strong> Mật khẩuĐược lưu trữ trong văn bản gốc trong các ưu đãi file JOSM. "
+"Hơn nữa, nó làChuyển <strong> không được mã hóa </ strong> trong mọi yêu cầu "
+"gửi đến OSMMáy chủ. <Strong> Không sử dụng một mật khẩu có giá trị. </ "
+"Strong> </ p> </ body> </ html>"
 
 msgid "Save user and password (unencrypted)"
-msgstr ""
+msgstr "Lưu người dùng và mật khẩu (không mã hóa)"
 
 msgid "<delete from {0} objects>"
-msgstr ""
+msgstr "<xóa từ {0} đối tượng>"
 
 msgid "Old values of"
-msgstr ""
+msgstr "giá trị cổ"
 
 msgid "Add tags to selected objects"
-msgstr ""
+msgstr "Thêm thẻ cho các đối tượng được chọn"
 
 msgid "Add selected tags"
-msgstr ""
+msgstr "Thêm thẻ lựa chọn"
 
 msgid "Add all tags"
-msgstr ""
+msgstr "Thêm tất cả các thẻ"
 
 msgid "Add checked tags to selected objects"
-msgstr ""
+msgstr "Thêm thẻ kiểm tra để đối tượng được chọn"
 
 msgid "Shift+Enter: Add all tags to selected objects"
-msgstr ""
+msgstr "Shift + Enter: Thêm tất cả các thẻ cho các đối tượng được lựa chọn"
 
 msgid "Assume"
-msgstr ""
+msgstr "Giả sử"
 
 msgid "Existing values"
-msgstr ""
+msgstr "Giá trị có sẵn"
 
 msgid "Enable the checkbox to accept the value"
-msgstr ""
+msgstr "Kích hoạt hộp kiểm để chấp nhận giá trị"
 
 msgid "Accept all tags from {0} for this session"
-msgstr ""
+msgstr "Chấp nhận tất cả các thẻ từ {0} phiên này"
 
 msgid "Load data from API"
-msgstr ""
+msgstr "Load dữ liệu từ API"
 
 msgid "Import data from URL"
-msgstr ""
+msgstr "Nhập dữ liệu từ URL"
 
 msgid "Open local files"
-msgstr ""
+msgstr "Mở tập tin địa phương"
 
 msgid "Load imagery layers"
-msgstr ""
+msgstr "lớp tải hình ảnh"
 
 msgid "Change the selection"
-msgstr ""
+msgstr "Thay đổi các lựa chọn"
 
 msgid "Change the viewport"
-msgstr ""
+msgstr "Thay đổi khung nhìn"
 
 msgid "Create new objects"
-msgstr ""
+msgstr "Tạo các đối tượng mới"
 
 msgid "Read protocol version"
-msgstr ""
+msgstr "Đọc bản giao thức"
 
 msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
 msgstr ""
@@ -12651,293 +13819,334 @@ msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
 msgstr ""
 
 msgid "Remote Control has been asked to create a new node."
-msgstr ""
+msgstr "điều khiển từ xa đã được yêu cầu để tạo ra một nút mới."
 
 msgid "There is no layer opened to add node"
-msgstr ""
+msgstr "Không có lớp mở thêm nút"
 
 msgid "Remote Control has been asked to create a new way."
-msgstr ""
+msgstr "điều khiển từ xa đã được yêu cầu để tạo ra một con đường mới."
 
 msgid "Invalid coordinates: {0}"
-msgstr ""
+msgstr "tọa độ không hợp lệ: {0}"
 
 msgid "There is no layer opened to add way"
-msgstr ""
+msgstr "Không có lớp mở thêm đường"
 
 msgid "Add way"
-msgstr ""
+msgstr "Thêm đường"
 
 msgid ""
 "Remote Control has been asked to report its supported features. This enables "
 "web sites to guess a running JOSM version"
 msgstr ""
+"Điều khiển từ xa đã được yêu cầu báo cáo các tính năng hỗ trợ của nó. Điều "
+"này cho phépTrang web để đoán một phiên bản JOSM chạy"
 
 msgid ""
 "Remote Control has been asked to load an imagery layer from the following "
 "URL:"
-msgstr ""
+msgstr "Điều khiển từ xa đã được yêu cầu tải một lớp hình ảnh từ sauURL:"
 
 msgid "Remote imagery"
-msgstr ""
+msgstr "hình ảnh từ xa"
 
 msgid "Remote Control has been asked to import data from the following URL:"
-msgstr ""
+msgstr "điều khiển từ xa đã được yêu cầu để nhập dữ liệu từ các URL sau:"
 
 msgid "Remote Control has been asked to load data from the API."
-msgstr ""
+msgstr "điều khiển từ xa đã được hỏi để tải dữ liệu từ các API."
 
 msgid "The latitudes must be between {0} and {1}"
-msgstr ""
+msgstr "vĩ độ phải được giữa {0} và {1}"
 
 msgid "The longitudes must be between {0} and {1}"
-msgstr ""
+msgstr "kinh độ phải được giữa {0} và {1}"
 
 msgid "The minima must be less than the maxima"
-msgstr ""
+msgstr "cực tiểu phải nhỏ hơn maxima"
 
 msgid "Remote Control has been asked to load the following data:"
-msgstr ""
+msgstr "điều khiển từ xa đã được hỏi để tải các dữ liệu sau đây:"
 
 msgid "Loading data"
-msgstr ""
+msgstr "Đang tải dữ liệu"
 
 msgid ""
 "Remote Control has been asked to load objects (specified by their id) from "
 "the API."
 msgstr ""
+"Điều khiển từ xa đã được hỏi để tải các đối tượng (theo quy định của id của "
+"họ) từAPI"
 
 msgid "Remote Control has been asked to open a local file."
-msgstr ""
+msgstr "điều khiển từ xa đã được yêu cầu để mở một tập tin địa phương."
 
 msgid "Do you want to allow this?"
-msgstr ""
+msgstr "Bạn có muốn cho phép không?"
 
 msgid "Confirm Remote Control action"
-msgstr ""
+msgstr "Xác nhận hành động điều khiển từ xa"
 
 msgid ""
 "Remote Control has been asked to report its protocol version. This enables "
 "web sites to detect a running JOSM."
 msgstr ""
+"Điều khiển từ xa đã được yêu cầu báo cáo phiên bản giao thức của nó. Điều "
+"này cho phépTrang web để phát hiện một JOSM chạy."
 
 msgid ""
 "Version ''{0}'' of meta data for geoimage layer is not supported. Expected: "
 "0.1"
 msgstr ""
+". Phiên bản '' {0} '' dữ liệu meta cho lớp geoimage không được hỗ trợ dự "
+"kiến:0.1"
 
 msgid "Data:"
-msgstr ""
+msgstr "Dữ liệu"
 
 msgid "local file"
-msgstr ""
+msgstr "tập tin địa phương"
 
 msgid "Link to a GPX file on your local disk."
-msgstr ""
+msgstr "Liên kết đến một tập tin GPX trên ổ đĩa của bạn."
 
 msgid "include"
-msgstr ""
+msgstr "bao gồm"
 
 msgid "Include GPX data in the .joz session file."
-msgstr ""
+msgstr "Bao gồm dữ liệu trong tập tin GPX phiên .joz."
 
 msgid "No file association"
-msgstr ""
+msgstr "Không liên kết tập tin"
 
 msgid "GPX data will be included in the session file."
-msgstr ""
+msgstr "dữ liệu GPX sẽ được bao gồm trong các tập tin phiên."
 
 msgid ""
 "Version ''{0}'' of meta data for gpx track layer is not supported. Expected: "
 "0.1"
 msgstr ""
+". Phiên bản '' {0} '' dữ liệu meta cho lớp GPX theo dõi không được hỗ trợ dự "
+"kiến:0.1"
 
 msgid "File name expected for layer no. {0}"
-msgstr ""
+msgstr "Tên tập tin sẽ cho lớp không. {0}"
 
 msgid ""
 "Version ''{0}'' of meta data for imagery layer is not supported. Expected: "
 "0.1"
 msgstr ""
+". Phiên bản '' {0} '' dữ liệu meta cho layer hình ảnh không được hỗ trợ dự "
+"kiến:0.1"
 
 msgid ""
 "Version ''{0}'' of meta data for marker layer is not supported. Expected: 0.1"
 msgstr ""
+"Phiên bản '' {0} '' dữ liệu meta cho lớp đánh dấu không được hỗ trợ dự "
+"kiến:. 0,1"
 
 msgid "Layer contains unsaved data - save to file."
-msgstr ""
+msgstr "Layer chứa dữ liệu chưa lưu - lưu vào tập tin."
 
 msgid "Layer does not contain unsaved data."
-msgstr ""
+msgstr "Layer không chứa dữ liệu chưa được lưu."
 
 msgid "Link to a OSM data file on your local disk."
-msgstr ""
+msgstr "Liên kết đến một tập tin dữ liệu OSM trên ổ đĩa của bạn."
 
 msgid "Include OSM data in the .joz session file."
-msgstr ""
+msgstr "Bao gồm dữ liệu OSM trong tập tin phiên .joz."
 
 msgid "OSM data will be included in the session file."
-msgstr ""
+msgstr "dữ liệu OSM sẽ được bao gồm trong các tập tin phiên."
 
 msgid ""
 "Version ''{0}'' of meta data for osm data layer is not supported. Expected: "
 "0.1"
 msgstr ""
+". Phiên bản '' {0} '' dữ liệu meta cho lớp dữ liệu OSM không được hỗ trợ dự "
+"kiến:0.1"
 
 msgid "Session file (*.jos, *.joz)"
-msgstr ""
+msgstr "Session tập tin (* .jos, * .joz)"
 
 msgid "Unable to locate file  ''{0}''."
-msgstr ""
+msgstr "Không thể xác định vị trí tập tin '' {0} ''."
 
 msgid "Unsupported scheme ''{0}'' in URI ''{1}''."
-msgstr ""
+msgstr "chương trình được hỗ trợ '' {0} '' trong URI '' {1} ''."
 
 msgid "Unexpected root element ''{0}'' in session file"
-msgstr ""
+msgstr "phần tử gốc bất ngờ '' {0} '' trong tập tin phiên"
 
 msgid "Version ''{0}'' of session file is not supported. Expected: 0.1"
 msgstr ""
+"Phiên bản '' {0} '' của tập tin phiên không được hỗ trợ dự kiến:. 0,1"
 
 msgid "missing mandatory attribute ''index'' for element ''layer''"
-msgstr ""
+msgstr "thiếu thuộc tính bắt buộc '' index '' cho các phần tử '' lớp ''"
 
 msgid "unexpected format of attribute ''index'' for element ''layer''"
 msgstr ""
+"định dạng không mong muốn của thuộc tính '' index '' cho các phần tử '' lớp "
+"''"
 
 msgid "attribute ''index'' ({0}) for element ''layer'' must be unique"
 msgstr ""
+"thuộc tính '' index '' ({0}) cho các phần tử '' lớp '' phải là duy nhất"
 
 msgid "missing layer with index {0}"
-msgstr ""
+msgstr "thiếu lớp với index {0}"
 
 msgid "missing mandatory attribute ''name'' for element ''layer''"
-msgstr ""
+msgstr "thiếu thuộc tính bắt buộc '' tên '' cho các phần tử '' lớp ''"
 
 msgid "missing mandatory attribute ''type'' for element ''layer''"
-msgstr ""
+msgstr "thiếu thuộc tính bắt buộc '' loại '' cho các phần tử '' lớp ''"
 
 msgid "Unable to load layer"
-msgstr ""
+msgstr "Không thể tải lớp"
 
 msgid ""
 "Cannot load layer of type ''{0}'' because no suitable importer was found."
 msgstr ""
+"Không thể nạp lớp của loại '' {0} '' vì không có nhà nhập khẩu phù hợp đã "
+"được tìm thấy."
 
 msgid ""
 "Cannot load layer {0} because it depends on layer {1} which has been skipped."
 msgstr ""
+"Không thể nạp lớp {0} bởi vì nó phụ thuộc vào lớp {1} đã được bỏ qua."
 
 msgid "Error loading layer"
-msgstr ""
+msgstr "Lỗi tải lớp"
 
 msgid "<html>Could not load layer {0} ''{1}''.<br>Error is:<br>{2}</html>"
 msgstr ""
+"<html> Không thể tải lớp {0} '' {1} '' <br> Lỗi là:. <br> {2} </ html>"
 
 msgid "Skip layer and continue"
-msgstr ""
+msgstr "Bỏ lớp và tiếp tục"
 
 msgid "expected .jos file inside .joz archive"
-msgstr ""
+msgstr "dự kiến ​​.jos nộp bên .joz lưu trữ"
 
 msgid "Skip download"
-msgstr ""
+msgstr "Bỏ download"
 
 msgid "Download Plugin"
-msgstr ""
+msgstr "Tải Plugin"
 
 msgid "Skip Download"
-msgstr ""
+msgstr "Bỏ Download"
 
 msgid "JOSM version {0} required for plugin {1}."
-msgstr ""
+msgstr "JOSM phiên bản {0} cần thiết cho plugin {1}."
 
 msgid "Download skipped"
-msgstr ""
+msgstr "Download bỏ qua"
 
 msgid ""
 "Cannot download plugin ''{0}''. Its download link is not known. Skipping "
 "download."
 msgstr ""
+"Không thể tải plugin '' {0} ''. Link download của nó không được biết. Bỏ "
+"quaTải"
 
 msgid ""
 "Cannot download plugin ''{0}''. Its download link ''{1}'' is not a valid "
 "URL. Skipping download."
 msgstr ""
+"Không thể tải plugin '' {0} ''. Link download của nó '' {1} '' không phải là "
+"một giá trịURL. Bỏ qua tải."
 
 msgid "Failed to create plugin directory ''{0}''"
-msgstr ""
+msgstr "Không thể tạo thư mục plugin '' {0} ''"
 
 msgid "Downloading Plugin {0}..."
-msgstr ""
+msgstr "Tải Plugin {0} ..."
 
 msgid "An error occurred in plugin {0}"
-msgstr ""
+msgstr "Một lỗi đã xảy ra trong plugin {0}"
 
 msgid "integrated into main program"
-msgstr ""
+msgstr "tích hợp vào chương trình chính"
 
 msgid "replaced by new {0} plugin"
-msgstr ""
+msgstr "thay thế bằng mới {0} plugin"
 
 msgid "no longer required"
-msgstr ""
+msgstr "không còn cần thiết"
 
 msgid "The following plugin is no longer necessary and has been deactivated:"
 msgid_plural ""
 "The following plugins are no longer necessary and have been deactivated:"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Các plugin sau đây là không còn cần thiết và đã được vô hiệu hoá:"
 
 msgid ""
 "<html>Loading of the plugin \"{0}\" was requested.<br>This plugin is no "
 "longer developed and very likely will produce errors.<br>It should be "
 "disabled.<br>Delete from preferences?</html>"
 msgstr ""
+"<Html> Đang tải của các plugin \" {0} \"đã được yêu cầu. <br> Plugin này là "
+"khôngCòn phát triển và rất có thể sẽ tạo ra những lỗi. <br> Nó sẽ đượcVô "
+"hiệu hóa. <br> Xóa từ sở thích? </ Html>"
 
 msgid "Plugin update"
-msgstr ""
+msgstr "Plugin update"
 
 msgid ""
 "You updated your JOSM software.<br>To prevent problems the plugins should be "
 "updated as well.<br><br>Update plugins now?"
 msgstr ""
+"Bạn đã cập nhật phần mềm JOSM của bạn. <br> Để ngăn chặn vấn đề các plugins "
+"cần đượcCập nhật là tốt. <br> Update plugin bây giờ?"
 
 msgid "Last plugin update more than {0} days ago."
-msgstr ""
+msgstr "Last Plugin cập nhật nhiều hơn {0} ngày trước."
 
 msgid "Click to update the activated plugins"
-msgstr ""
+msgstr "Nhấn vào đây để cập nhật các plugin kích hoạt"
 
 msgid "Skip update"
-msgstr ""
+msgstr "Bỏ update"
 
 msgid "Click to skip updating the activated plugins"
-msgstr ""
+msgstr "Nhấn vào đây để skip cập nhật các plugin kích hoạt"
 
 msgid ""
 "Skipping plugin update after JOSM upgrade. Automatic update at startup is "
 "disabled."
 msgstr ""
+"Bỏ qua các plugin cập nhật sau khi nâng cấp JOSM. Tự động cập nhật lúc khởi "
+"động làVô hiệu hóa"
 
 msgid ""
 "Skipping plugin update after elapsed update interval. Automatic update at "
 "startup is disabled."
 msgstr ""
+"Bỏ qua các plugin cập nhật sau khi cập nhật khoảng thời gian trôi qua. Tự "
+"động cập nhật tạiKhởi động là người tàn tật."
 
 msgid ""
 "Running plugin update after JOSM upgrade. Automatic update at startup is "
 "enabled."
 msgstr ""
+"Chạy cập nhật các plugin sau khi nâng cấp JOSM. Tự động cập nhật lúc khởi "
+"động làKích hoạt"
 
 msgid ""
 "Running plugin update after elapsed update interval. Automatic update at "
 "startup is disabled."
 msgstr ""
+"Chạy Plugin cập nhật sau khi cập nhật khoảng thời gian trôi qua. Tự động cập "
+"nhật tạiKhởi động là người tàn tật."
 
 msgid ""
 "Unexpected value ''{0}'' for preference ''{1}''. Assuming value ''ask''."
 msgstr ""
+"Giá trị bất ngờ '' {0} '' cho sở thích '' {1} ''. Giả sử giá trị '' cầu ''."
 
 msgid ""
 "Plugin {0} requires a plugin which was not found. The missing plugin is:"
@@ -12945,56 +14154,70 @@ msgid_plural ""
 "Plugin {0} requires {1} plugins which were not found. The missing plugins "
 "are:"
 msgstr[0] ""
+". Plugin {0} đòi hỏi một plugin mà đã không được tìm thấy plugin thiếu là:"
+
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
 msgstr[1] ""
 
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
 msgstr ""
+"<Html> Plugin {0} đòi hỏi phiên bản JOSM {1}. Các phiên bản JOSM hiện nay "
+"là{2}. <br> Bạn phải cập nhật JOSM để sử dụng plugin này. </ Html>"
 
 msgid "Could not load plugin {0}. Delete from preferences?"
-msgstr ""
+msgstr "Không thể tải trình cắm {0}. Xóa từ sở thích?"
 
 msgid "loading plugin ''{0}'' (version {1})"
-msgstr ""
+msgstr "nạp plugin '' {0} '' (phiên bản {1})"
 
 msgid ""
 "<html>Could not load plugin {0} because the plugin<br>main class ''{1}'' was "
 "not found.<br>Delete from preferences?</html>"
 msgstr ""
+"<Html> Không thể tải Plugin {0} bởi vì <br> Plugin lớp chính '' {1} '' đã "
+"đượcKhông tìm thấy. <br> Xóa từ sở thích? </ Html>"
 
 msgid "Loading plugins ..."
-msgstr ""
+msgstr "Loading plugins ..."
 
 msgid "Checking plugin preconditions..."
-msgstr ""
+msgstr "Kiểm tra điều kiện tiên quyết plugin ..."
 
 msgid "Loading plugin ''{0}''..."
-msgstr ""
+msgstr "Đang tải plugin '' {0} '' ..."
 
 msgid "JOSM could not find information about the following plugin:"
 msgid_plural "JOSM could not find information about the following plugins:"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "JOSM không thể tìm thấy thông tin về các plugin sau đây:"
 
 msgid "The plugin is not going to be loaded."
 msgid_plural "The plugins are not going to be loaded."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Các plugin sẽ không được nạp."
 
 msgid "Determine plugins to load..."
-msgstr ""
+msgstr "Xác định các plugin để tải ..."
 
 msgid "Removing deprecated plugins..."
-msgstr ""
+msgstr "Loại bỏ các plugin bị phản đối ..."
 
 msgid "Removing unmaintained plugins..."
-msgstr ""
+msgstr "Loại bỏ các plugin bỏ dở ..."
 
 msgid "Updating the following plugin has failed:"
 msgid_plural "Updating the following plugins has failed:"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Đang cập nhật các plugin sau đây đã thất bại:"
 
 msgid ""
 "Please open the Preference Dialog after JOSM has started and try to update "
@@ -13003,184 +14226,202 @@ msgid_plural ""
 "Please open the Preference Dialog after JOSM has started and try to update "
 "them manually."
 msgstr[0] ""
-msgstr[1] ""
+"Xin hãy mở hộp thoại Preference sau JOSM đã bắt đầu và cố gắng cập nhậtNó "
+"bằng tay."
 
 msgid "Plugin update failed"
-msgstr ""
+msgstr "update Plugin thất bại"
 
 msgid "Failed to find plugin {0}"
-msgstr ""
+msgstr "Không thể tìm thấy các plugin {0}"
 
 msgid "Failed to download plugin information list"
-msgstr ""
+msgstr "Không thể tải danh sách thông tin plugin"
 
 msgid "Disable plugin"
-msgstr ""
+msgstr "Vô hiệu hóa plugin"
 
 msgid "Click to delete the plugin ''{0}''"
-msgstr ""
+msgstr "Nhấn vào đây để xóa các plugin '' {0} ''"
 
 msgid "Keep plugin"
-msgstr ""
+msgstr "Giữ plugin"
 
 msgid "Click to keep the plugin ''{0}''"
-msgstr ""
+msgstr "Nhấn vào đây để giữ cho các plugin '' {0} ''"
 
 msgid "Failed to delete outdated plugin ''{0}''."
-msgstr ""
+msgstr "Không thể xóa các plugin đã lỗi thời '' {0} ''."
 
 msgid ""
 "Failed to install already downloaded plugin ''{0}''. Skipping installation. "
 "JOSM is still going to load the old plugin version."
 msgstr ""
+"Không thể cài đặt đã tải về plugin '' {0} ''. Bỏ qua cài đặt.JOSM vẫn còn "
+"đang để tải các phiên bản plugin cũ."
 
 msgid ""
 "Failed to install plugin ''{0}'' from temporary download file ''{1}''. {2}"
 msgstr ""
+"Không thể cài đặt plugin '' {0} '' từ tải tập tin tạm thời '' {1} ''. {2}"
 
 msgid ""
 "Failed to install plugin ''{0}'' from temporary download file ''{1}''. "
 "Renaming failed."
 msgstr ""
+"Không thể cài đặt plugin '' {0} '' từ tập tin tải về tạm thời '' {1} ''.Đổi "
+"tên thất bại."
 
 msgid "Update plugin"
-msgstr ""
+msgstr "Cập nhật plugin"
 
 msgid "Click to update the plugin ''{0}''"
-msgstr ""
+msgstr "Nhấn vào đây để cập nhật các plugin '' {0} ''"
 
 msgid "Click to disable the plugin ''{0}''"
-msgstr ""
+msgstr "Nhấn vào đây để vô hiệu hóa các plugin '' {0} ''"
 
 msgid ""
 "An unexpected exception occurred that may have come from the ''{0}'' plugin."
 msgstr ""
+"An unexpected exception occurred that may have come from the ''{0}'' plugin."
 
 msgid "According to the information within the plugin, the author is {0}."
-msgstr ""
+msgstr "Theo thông tin trong các plugin, tác giả là {0}."
 
 msgid ""
 "Try updating to the newest version of this plugin before reporting a bug."
 msgstr ""
+"Hãy thử cập nhật phiên bản mới nhất của plugin này trước khi báo cáo một lỗi."
 
 msgid ""
 "The plugin has been removed from the configuration. Please restart JOSM to "
 "unload the plugin."
 msgstr ""
+"Các plugin đã được gỡ bỏ ra. Hãy khởi động lại JOSM tớiDỡ bỏ các plugin."
 
 msgid "Plugin information"
-msgstr ""
+msgstr "Plugin thông tin"
 
 msgid "no description available"
-msgstr ""
+msgstr "không có mô tả"
 
 msgid ""
 "Do not ask again and remember my decision (go to Preferences->Plugins to "
 "change it later)"
 msgstr ""
+"Đừng hỏi lại và ghi nhớ quyết định của tôi (vào Preferences-> Plugins đểThay "
+"đổi nó sau này)"
 
 msgid "Invalid jar file ''{0}''"
-msgstr ""
+msgstr "file jar không hợp lệ '' {0} ''"
 
 msgid "The plugin file ''{0}'' does not include a Manifest."
-msgstr ""
+msgstr "Các plugin file '' {0} '' không bao gồm một Manifest."
 
 msgid "Invalid URL ''{0}'' in plugin {1}"
-msgstr ""
+msgstr "URL không hợp lệ '' {0} '' trong plugin {1}"
 
 msgid "Invalid plugin description ''{0}'' in plugin {1}"
-msgstr ""
+msgstr "mô tả các plugin không hợp lệ '' {0} '' trong plugin {1}"
 
 msgid "Invalid plugin main version ''{0}'' in plugin {1}"
-msgstr ""
+msgstr "plugin không hợp lệ phiên bản chính '' {0} '' trong plugin {1}"
 
 msgid "Missing plugin main version in plugin {0}"
-msgstr ""
+msgstr "Missing Plugin phiên bản chính trong plugin {0}"
 
 msgid "More info..."
-msgstr ""
+msgstr "Thông tin khác ..."
 
 msgid "<b>Plugin provided by an external source:</b> {0}"
-msgstr ""
+msgstr "<b> Plugin cung cấp bởi một nguồn bên ngoài: </ b> {0}"
 
 msgid "Failed to create plugin information from manifest for plugin ''{0}''"
-msgstr ""
+msgstr "Không thể tạo thông tin plugin từ manifest cho plugin '' {0} ''"
 
 msgid "Illegal entry in plugin list."
-msgstr ""
+msgstr "nhập cảnh trái phép trong danh sách plugin."
 
 msgid "Reading local plugin information.."
-msgstr ""
+msgstr "Đọc thông tin Plugin địa phương .."
 
 msgid "Processing plugin site cache files..."
-msgstr ""
+msgstr "các tập tin bộ nhớ cache Processing trang web plugin ..."
 
 msgid "Processing file ''{0}''"
-msgstr ""
+msgstr "tập tin chế biến '' {0} ''"
 
 msgid "Failed to scan file ''{0}'' for plugin information. Skipping."
-msgstr ""
+msgstr "Không thể quét file '' {0} '' cho các plugin thông tin. Bỏ qua"
 
 msgid "Processing plugin files..."
-msgstr ""
+msgstr "chế biến các plugin file ..."
 
 msgid "Download plugin list..."
-msgstr ""
+msgstr "danh sách Tải plugin ..."
 
 msgid "Downloading plugin list from ''{0}''"
-msgstr ""
+msgstr "Tải danh sách plugin từ '' {0} ''"
 
 msgid "Plugin list download error"
-msgstr ""
+msgstr "danh sách Plugin tải về lỗi"
 
 msgid "JOSM failed to download plugin list:"
-msgstr ""
+msgstr "JOSM không tải về danh sách plugin:"
 
 msgid "Details:"
-msgstr ""
+msgstr "Thông tin chi tiết:"
 
 msgid ""
 "Failed to create plugin directory ''{0}''. Cannot cache plugin list from "
 "plugin site ''{1}''."
 msgstr ""
+"Không thể tạo thư mục Plugin '' {0} ''. Không thể nhớ cache danh sách plugin "
+"từPlugin trang web '' {1} ''."
 
 msgid "Writing plugin list to local cache ''{0}''"
-msgstr ""
+msgstr "Viết danh sách plugin để cache nội bộ '' {0} ''"
 
 msgid "Parsing plugin list from site ''{0}''"
-msgstr ""
+msgstr "Phân tích danh sách plugin từ trang web '' {0} ''"
 
 msgid ""
 "Failed to parse plugin list document from site ''{0}''. Skipping site. "
 "Exception was: {1}"
 msgstr ""
+"Không phân tích plugin của tài liệu danh sách từ trang web '' {0} ''. Bỏ qua "
+"trang web.Ngoại lệ là: {1}"
 
 msgid "Processing plugin list from site ''{0}''"
-msgstr ""
+msgstr "plugin Processing danh sách từ trang web '' {0} ''"
 
 msgid "This is after the end of the recording"
-msgstr ""
+msgstr "Đây là sau khi kết thúc buổi ghi hình"
 
 msgid "unspecified reason"
-msgstr ""
+msgstr "lý do không xác định"
 
 msgid "Error playing sound"
-msgstr ""
+msgstr "Lỗi chơi âm thanh"
 
 msgid "Do nothing"
-msgstr ""
+msgstr "Không làm gì cả"
 
 msgid "Report Bug"
-msgstr ""
+msgstr "Báo cáo Bug"
 
 msgid ""
 "An unexpected exception occurred.<br>This is always a coding error. If you "
 "are running the latest<br>version of JOSM, please consider being kind and "
 "file a bug report."
 msgstr ""
+"Một ngoại lệ bất ngờ xảy ra. <br> Này luôn luôn là một lỗi mã hóa. Nếu "
+"bạnĐang chạy phiên bản mới nhất của <br> JOSM, xin vui lòng xem xét việc "
+"loại vàNộp một báo cáo lỗi."
 
 msgid "Update JOSM"
-msgstr ""
+msgstr "Cập nhật JOSM"
 
 msgid ""
 "An unexpected exception occurred. This is always a coding "
@@ -13189,44 +14430,60 @@ msgid ""
 "(<b>{1}</b>).<br><br><b>Please update JOSM</b> before considering to file a "
 "bug report."
 msgstr ""
+"Một ngoại lệ bất ngờ xảy ra. Điều này luôn luôn là một mã hóaLỗi. <br> Tuy "
+"nhiên, bạn đang chạy một phiên bản cũ của JOSM({0}), <br> thay vì sử dụng "
+"các phiên bản thử nghiệm hiện tại(<B> {1} </ b>). <br> <B> Vui lòng cập nhật "
+"JOSM </ b> trước khi xem xét để nộpBáo cáo lỗi."
 
 msgid "Unexpected Exception"
-msgstr ""
+msgstr "ngoại lệ bất ngờ"
 
 msgid "Suppress further error dialogs for this session."
-msgstr ""
+msgstr "Ngăn chặn các hộp thoại báo lỗi hơn nữa cho phiên này."
 
 msgid ""
 "You have encountered an error in JOSM. Before you file a bug report make "
 "sure you have updated to the latest version of JOSM here:"
 msgstr ""
+"Bạn đã gặp phải một lỗi trong JOSM. Trước khi quý vị nộp một báo cáo lỗi "
+"makeChắc chắn rằng bạn đã cập nhật lên phiên bản mới nhất của JOSM đây:"
 
 msgid ""
 "You should also update your plugins. If neither of those help please file a "
 "bug report in our bugtracker using this link:"
 msgstr ""
+"Bạn cũng nên cập nhật các plugin của bạn. Nếu không phải của những người "
+"giúp đỡ xin vui lòng nộpBáo cáo lỗi trong bugtracker của chúng tôi bằng cách "
+"sử dụng liên kết này:"
 
 msgid ""
 "There the error information provided below should already be filled in for "
 "you. Please include information on how to reproduce the error and try to "
 "supply as much detail as possible."
 msgstr ""
+"Có những thông tin lỗi được cung cấp dưới đây đã được điền vào choBạn. Xin "
+"bao gồm thông tin về làm thế nào để sao chép các lỗi và cố gắngCung cấp càng "
+"nhiều chi tiết càng tốt."
 
 msgid ""
 "Alternatively, if that does not work you can manually fill in the "
 "information below at this URL:"
 msgstr ""
+"Ngoài ra, nếu điều đó không làm việc, bạn có thể tự điền vàoThông tin dưới "
+"đây tại URL này:"
 
 msgid "(The text has already been copied to your clipboard.)"
-msgstr ""
+msgstr "(Các văn bản đã được sao chép vào clipboard của bạn.)"
 
 msgid "You have encountered a bug in JOSM"
-msgstr ""
+msgstr "Bạn đã gặp phải một lỗi trong JOSM"
 
 msgid ""
 "<html>Failed to initialize communication with the OSM server {0}.<br>Check "
 "the server URL in your preferences and your internet connection."
 msgstr ""
+"<Html> Không thể khởi tạo giao tiếp với máy chủ OSM {0}. <br> Kiểm traURL "
+"của máy chủ trong các sở thích của bạn và kết nối internet của bạn."
 
 msgid ""
 "<html>Failed to authenticate at the OSM server ''{0}''.<br>You are using "
@@ -13234,6 +14491,10 @@ msgid ""
 "configured.<br>Please open the Preferences Dialog and generate or enter an "
 "Access Token.</html>"
 msgstr ""
+"<Html> Không xác thực tại máy chủ OSM '' {0} ''. <br> Bạn đang sử dụngOAuth "
+"để xác thực nhưng hiện tại không có <br> OAuth truy cập tokenCấu hình. <br> "
+"Vui lòng mở Preferences Dialog và tạo ra hoặc nhập vào mộtAccess Token. </ "
+"Html>"
 
 msgid ""
 "<strong>Failed</strong> to delete <strong>node {0}</strong>. It is still "
@@ -13244,7 +14505,9 @@ msgid_plural ""
 "referred to by nodes {1}.<br>Please load the nodes, remove the reference to "
 "the node, and upload again."
 msgstr[0] ""
-msgstr[1] ""
+"<Strong> Không </ strong> xóa <strong> nút {0} </ strong>. Nó vẫn làGọi bằng "
+"nút {1}. <br> Vui lòng tải các node, loại bỏ các tham chiếu đếnNút, và tải "
+"lên một lần nữa."
 
 msgid ""
 "<strong>Failed</strong> to delete <strong>node {0}</strong>. It is still "
@@ -13255,7 +14518,9 @@ msgid_plural ""
 "referred to by ways {1}.<br>Please load the ways, remove the reference to "
 "the node, and upload again."
 msgstr[0] ""
-msgstr[1] ""
+"<Strong> Không </ strong> xóa <strong> nút {0} </ strong>. Nó vẫn làGọi bằng "
+"cách {1}. <br> Vui lòng tải đường đi, loại bỏ các tham chiếu đếnNút, và tải "
+"lên một lần nữa."
 
 msgid ""
 "<strong>Failed</strong> to delete <strong>node {0}</strong>. It is still "
@@ -13266,7 +14531,9 @@ msgid_plural ""
 "referred to by relations {1}.<br>Please load the relations, remove the "
 "reference to the node, and upload again."
 msgstr[0] ""
-msgstr[1] ""
+"<Strong> Không </ strong> xóa <strong> nút {0} </ strong>. Nó vẫn làGọi bằng "
+"quan hệ {1}. <br> Vui lòng tải các mối quan hệ, loại bỏ cácTham chiếu đến "
+"nút, và tải lên một lần nữa."
 
 msgid ""
 "<strong>Failed</strong> to delete <strong>way {0}</strong>. It is still "
@@ -13277,7 +14544,9 @@ msgid_plural ""
 "referred to by nodes {1}.<br>Please load the nodes, remove the reference to "
 "the way, and upload again."
 msgstr[0] ""
-msgstr[1] ""
+"<Strong> Không </ strong> xóa <strong> cách {0} </ strong>. Nó vẫn làGọi "
+"bằng nút {1}. <br> Vui lòng tải các node, loại bỏ các tham chiếu đếnĐường "
+"đi, và tải lên một lần nữa."
 
 msgid ""
 "<strong>Failed</strong> to delete <strong>way {0}</strong>. It is still "
@@ -13288,7 +14557,9 @@ msgid_plural ""
 "referred to by ways {1}.<br>Please load the ways, remove the reference to "
 "the way, and upload again."
 msgstr[0] ""
-msgstr[1] ""
+"<Strong> Không </ strong> xóa <strong> cách {0} </ strong>. Nó vẫn làGọi "
+"bằng cách {1}. <br> Vui lòng tải đường đi, loại bỏ các tham chiếu đếnCách, "
+"và tải lên một lần nữa."
 
 msgid ""
 "<strong>Failed</strong> to delete <strong>way {0}</strong>. It is still "
@@ -13299,7 +14570,9 @@ msgid_plural ""
 "referred to by relations {1}.<br>Please load the relations, remove the "
 "reference to the way, and upload again."
 msgstr[0] ""
-msgstr[1] ""
+"<Strong> Không </ strong> xóa <strong> cách {0} </ strong>. Nó vẫn làGọi "
+"bằng quan hệ {1}. <br> Vui lòng tải các mối quan hệ, loại bỏ cácTài liệu "
+"tham khảo để đường đi, và tải lên một lần nữa."
 
 msgid ""
 "<strong>Failed</strong> to delete <strong>relation {0}</strong>. It is still "
@@ -13310,7 +14583,9 @@ msgid_plural ""
 "referred to by nodes {1}.<br>Please load the nodes, remove the reference to "
 "the relation, and upload again."
 msgstr[0] ""
-msgstr[1] ""
+"<Strong> Không </ strong> xóa <strong> quan hệ {0} </ strong>. Nó vẫn làGọi "
+"bằng nút {1}. <br> Vui lòng tải các node, loại bỏ các tham chiếu đếnCác mối "
+"quan hệ, và tải lên một lần nữa."
 
 msgid ""
 "<strong>Failed</strong> to delete <strong>relation {0}</strong>. It is still "
@@ -13321,7 +14596,9 @@ msgid_plural ""
 "referred to by ways {1}.<br>Please load the ways, remove the reference to "
 "the relation, and upload again."
 msgstr[0] ""
-msgstr[1] ""
+"<Strong> Không </ strong> xóa <strong> quan hệ {0} </ strong>. Nó vẫn làGọi "
+"bằng cách {1}. <br> Vui lòng tải đường đi, loại bỏ các tham chiếu đếnMối "
+"quan hệ, và tải lên một lần nữa."
 
 msgid ""
 "<strong>Failed</strong> to delete <strong>relation {0}</strong>. It is still "
@@ -13332,33 +14609,44 @@ msgid_plural ""
 "referred to by relations {1}.<br>Please load the relations, remove the "
 "reference to the relation, and upload again."
 msgstr[0] ""
-msgstr[1] ""
+"<Strong> Không </ strong> xóa <strong> quan hệ {0} </ strong>. Nó vẫn làGọi "
+"bằng quan hệ {1}. <br> Vui lòng tải các mối quan hệ, loại bỏ cácTham chiếu "
+"đến các mối quan hệ, và tải lên một lần nữa."
 
 msgid ""
 "<html>Uploading to the server <strong>failed</strong> because your "
 "current<br>dataset violates a precondition.<br>The error message "
 "is:<br>{0}</html>"
 msgstr ""
+"<Html> tải lên đến máy chủ <strong> không </ strong> vì bạn<br> Bộ dữ liệu "
+"hiện hành vi phạm điều kiện tiên quyết. <br> Các thông báo lỗiLà: <br> {0} "
+"</ html>"
 
 msgid ""
 "<html>Authentication at the OSM server with the username ''{0}'' "
 "failed.<br>Please check the username and the password in the JOSM "
 "preferences.</html>"
 msgstr ""
+"<Html> xác thực tại máy chủ OSM với username '' {0} ''Thất bại. <br> Vui "
+"lòng kiểm tra tên người dùng và mật khẩu trong JOSMSở thích. </ Html>"
 
 msgid ""
 "<html>Authentication at the OSM server with the OAuth token ''{0}'' "
 "failed.<br>Please launch the preferences dialog and retrieve another OAuth "
 "token.</html>"
 msgstr ""
+"<Html> xác thực tại máy chủ OSM với OAuth token '' {0} ''Thất bại. <br> Vui "
+"lòng khởi động hộp thoại sở thích và lấy một OAuthToken. </ Html>"
 
 msgid ""
 "<html>Authorisation at the OSM server failed.<br>The server reported the "
 "following error:<br>''{0}''</html>"
 msgstr ""
+"<Html> Cấp phép tại máy chủ OSM thất bại. <br> Máy chủ báo cáoLỗi sau: <br> "
+"'' {0} '' </ html>"
 
 msgid "<html>Authorisation at the OSM server failed.<br></html>"
-msgstr ""
+msgstr "<html> Cấp phép tại máy chủ OSM thất bại. <br> </ html>"
 
 msgid ""
 "<html>Authorisation at the OSM server with the OAuth token ''{0}'' "
@@ -13366,14 +14654,20 @@ msgid ""
 "resource<br>''{1}''.<br>Please launch the preferences dialog and retrieve "
 "another OAuth token.</html>"
 msgstr ""
+"<Html> Cấp phép tại máy chủ OSM với OAuth token '' {0} ''Không thành công. "
+"<br> Các mã thông báo không được phép truy cập đến bảo vệTài nguyên <br> '' "
+"{1} ''. <br> Vui lòng khởi động hộp thoại sở thích và lấyMột mã thông báo "
+"OAuth. </ Html>"
 
 msgid ""
 "<html>Communication with the OSM server ''{0}'' timed out. Please retry "
 "later.</html>"
 msgstr ""
+"<Html> Truyền thông với các máy chủ OSM '' {0} '' hết thời gian. Vui lòng "
+"thử lạiSau này. </ Html>"
 
 msgid "no error message available"
-msgstr ""
+msgstr "không có thông báo lỗi có sẵn"
 
 msgid ""
 "<html>Communication with the OSM server ''{0}''failed. The server "
@@ -13381,70 +14675,97 @@ msgid ""
 "message:<br><strong>Error code:<strong> {1}<br><strong>Error message "
 "(untranslated)</strong>: {2}</html>"
 msgstr ""
+"<Html> Truyền thông với các máy chủ OSM '' {0} '' thất bại. Các máy chủTrả "
+"lời <br> mã lỗi sau và các lỗi sauThông điệp: <br> mã <strong> Lỗi: <strong> "
+"{1} <br> <strong> Thông báo lỗi(Chưa được dịch) </ strong>: {2} </ html>"
 
 msgid ""
 "<html>Closing of changeset <strong>{0}</strong> failed <br>because it has "
 "already been closed."
 msgstr ""
+"<Html> Bế mạc changeset <strong> {0} </ strong> không <br> bởi vì nó cóĐã bị "
+"đóng cửa."
 
 msgid ""
 "<html>Closing of changeset <strong>{0}</strong> failed<br> because it has "
 "already been closed on {1}."
 msgstr ""
+"<Html> Bế mạc changeset <strong> {0} </ strong> không <br> bởi vì nó cóĐã bị "
+"đóng cửa vào {1}."
 
 msgid ""
 "<html>The server reported that it has detected a conflict.<br>Error message "
 "(untranslated):<br>{0}</html>"
 msgstr ""
+"<Html> Các máy chủ thông báo rằng nó đã phát hiện một cuộc xung đột. <br> "
+"Lỗi tin nhắn(Chưa được dịch): <br> {0} </ html>"
 
 msgid "<html>The server reported that it has detected a conflict."
-msgstr ""
+msgstr "<html> Các máy chủ thông báo rằng nó đã phát hiện một cuộc xung đột."
 
 msgid ""
 "<html>Failed to upload to changeset <strong>{0}</strong><br>because it has "
 "already been closed on {1}."
 msgstr ""
+"<Html> Không thể tải lên changeset <strong> {0} </ strong> <br> bởi vì nó "
+"cóĐã bị đóng cửa vào {1}."
 
 msgid ""
 "<html>Failed to open a connection to the remote server<br>''{0}''<br>for "
 "security reasons. This is most likely because you are running<br>in an "
 "applet and because you did not load your applet from ''{1}''."
 msgstr ""
+"<html>Failed to open a connection to the remote server<br>''{0}''<br>for "
+"security reasons. This is most likely because you are running<br>in an "
+"applet and because you did not load your applet from ''{1}''."
 
 msgid ""
 "<html>Failed to open a connection to the remote server<br>''{0}''.<br>Please "
 "check your internet connection."
 msgstr ""
+"<html>Failed to open a connection to the remote server<br>''{0}''.<br>Please "
+"check your internet connection."
 
 msgid ""
 "<html>Failed to upload data to or download data from<br>''{0}''<br>due to a "
 "problem with transferring data.<br>Details (untranslated): {1}</html>"
 msgstr ""
+"<Html> Không thể tải dữ liệu đến hoặc tải dữ liệu từ <br> '' {0} '' <br> "
+"doVấn đề với việc chuyển dữ liệu <br> chi tiết (chưa được dịch):. {1} </ "
+"html>"
 
 msgid ""
 "<html>Failed to download data. Its format is either unsupported, ill-formed, "
 "and/or inconsistent.<br><br>Details (untranslated): {0}</html>"
 msgstr ""
+"<Html> Không thể tải dữ liệu. Dạng của nó là hoặc không được hỗ trợ, bệnh-"
+"được hình thànhVà / hoặc không phù hợp <br> chi tiết (chưa được dịch):. {0} "
+"</ html>"
 
 msgid "<html>Failed to download data.<br><br>Details: {0}</html>"
-msgstr ""
+msgstr "<html> Không thể tải dữ liệu <br> chi tiết:. {0} </ html>"
 
 msgid ""
 "<html>The OSM server<br>''{0}''<br>reported an internal server "
 "error.<br>This is most likely a temporary problem. Please try again later."
 msgstr ""
+"<Html> Các máy chủ OSM <br> '' {0} '' <br> báo cáo một máy chủ nội bộLỗi. "
+"<br> Này rất có thể là một vấn đề tạm thời. Vui lòng thử lại sau."
 
 msgid "The OSM server ''{0}'' reported a bad request.<br>"
-msgstr ""
+msgstr "Máy chủ OSM '' {0} '' báo cáo một yêu cầu xấu. <br>"
 
 msgid ""
 "The area you tried to download is too big or your request was too "
 "large.<br>Either request a smaller area or use an export file provided by "
 "the OSM community."
 msgstr ""
+"Các khu vực bạn cố gắng tải về quá lớn hoặc yêu cầu của bạn đã quáLớn. <br> "
+"Hoặc là yêu cầu một diện tích nhỏ hơn hoặc sử dụng một tập tin xuất khẩu "
+"cung cấp bởiCộng đồng OSM."
 
 msgid "<br>Error message(untranslated): {0}"
-msgstr ""
+msgstr "<br> Thông báo lỗi (chưa được dịch): {0}"
 
 msgid ""
 "The OSM server ''{0}'' does not know about an object<br>you tried to read, "
@@ -13452,12 +14773,19 @@ msgid ""
 "server or you are using an invalid URL to access<br>it. Please carefully "
 "check the server''s address ''{0}'' for typos."
 msgstr ""
+"The OSM server ''{0}'' does not know about an object<br>you tried to read, "
+"update, or delete. Either the respective object<br>does not exist on the "
+"server or you are using an invalid URL to access<br>it. Please carefully "
+"check the server''s address ''{0}'' for typos."
 
 msgid ""
 "<html>Failed to open a connection to the remote server<br>''{0}''.<br>Host "
 "name ''{1}'' could not be resolved. <br>Please check the API URL in your "
 "preferences and your internet connection."
 msgstr ""
+"<html>Failed to open a connection to the remote server<br>''{0}''.<br>Host "
+"name ''{1}'' could not be resolved. <br>Please check the API URL in your "
+"preferences and your internet connection."
 
 msgid ""
 "<html>The server reports that an object is deleted.<br><strong>Uploading "
@@ -13465,98 +14793,116 @@ msgid ""
 "<strong>Downloading failed</strong> if you tried to download this "
 "object.<br><br>The error message is:<br>{0}</html>"
 msgstr ""
+"<Html> Các máy chủ báo cáo rằng một đối tượng bị xóa. <br> <Strong> tải "
+"lênKhông thành công </ strong> nếu bạn đã cố gắng để cập nhật hoặc xóa đối "
+"tượng này. <br><Strong> tải không </ strong> nếu bạn đã cố gắng để tải về "
+"điều nàyĐối tượng <br> Các thông báo lỗi là:. <br> {0} </ html>"
 
 msgid "Unable to find translation for the locale {0}. Reverting to {1}."
-msgstr ""
+msgstr "Không tìm thấy bản dịch là các địa phương {0}. Lùi lại đến {1}."
 
 msgid ""
 "Fatal: failed to locate image ''{0}''. This is a serious configuration "
 "problem. JOSM will stop working."
 msgstr ""
+"Fatal: không thể xác định vị trí hình ảnh '' {0} '' Đây là một cấu hình "
+"nghiêm trọng.Vấn đề JOSM. Sẽ ngừng làm việc."
 
 msgid "Failed to locate image ''{0}''"
-msgstr ""
+msgstr "Không thể xác định vị trí hình ảnh '' {0} ''"
 
 msgid "Failed to handle zip file ''{0}''. Exception was: {1}"
-msgstr ""
+msgstr "Không thể xử lý các tập tin zip '' {0} '' ngoại lệ là:. {1}"
 
 msgid ""
 "Failed to access directory ''{0}'' for security reasons. Exception was: {1}"
 msgstr ""
+"Không thể truy cập vào thư mục '' {0} '' vì lý do an ninh ngoại lệ là:. {1}"
 
 msgid "{0}... [please type its number]"
-msgstr ""
+msgstr "{0} ... [vui lòng gõ số của nó]"
 
 msgid ""
 "Failed to open URL. There is currently no platform set. Please set a "
 "platform first."
 msgstr ""
+"Không mở URL. Hiện nay không có bộ nền tảng. Vui lòng đặtNền tảng đầu tiên."
 
 msgid "Opening URL: {0}"
-msgstr ""
+msgstr "Mở URL: {0}"
 
 msgid "zoom"
-msgstr ""
+msgstr "zoom"
 
 msgid "latitude"
-msgstr ""
+msgstr "vĩ độ"
 
 msgid "longitude"
-msgstr ""
+msgstr "kinh độ"
 
 msgid "URL does not contain {0}/{1}/{2}"
-msgstr ""
+msgstr "URL không chứa {0} / {1} / {2}"
 
 msgid "URL does not contain valid {0}"
-msgstr ""
+msgstr "URL không chứa giá trị {0}"
 
 msgid "reserved"
-msgstr ""
+msgstr "dành riêng"
 
 msgid "Outdated Java version"
-msgstr ""
+msgstr "phiên bản Java lỗi thời"
 
 msgid "Update Java"
-msgstr ""
+msgstr "Update Java"
 
 msgid "You are running version {0} of Java."
-msgstr ""
+msgstr "Bạn đang chạy phiên bản {0} của Java."
 
 msgid "April 2015"
-msgstr ""
+msgstr "April 2015"
 
 msgid ""
 "This version is no longer supported by {0} since {1} and is not recommended "
 "for use."
 msgstr ""
+"Phiên bản này không còn được hỗ trợ bởi {0} từ {1} và không được khuyến "
+"cáoĐể sử dụng."
 
 msgid ""
 "JOSM will soon stop working with this version; we highly recommend you to "
 "update to Java {0}."
 msgstr ""
+"JOSM sẽ sớm ngừng làm việc với phiên bản này, chúng tôi khuyên bạn nên "
+"bạnCập nhật cho Java {0}."
 
 msgid "Would you like to update now ?"
-msgstr ""
+msgstr "Bạn có muốn cập nhật bây giờ?"
 
 msgid ""
 "A previous version of JOSM has installed a custom certificate in order to "
 "provide HTTPS support for Remote Control:"
 msgstr ""
+"Một phiên bản trước của JOSM đã cài đặt một chứng chỉ tùy chỉnh đểCung cấp "
+"hỗ trợ HTTPS cho điều khiển từ xa:"
 
 msgid ""
 "It appears it could be an important <b>security risk</b>.<br><br>You are now "
 "going to be prompted by Windows to remove this insecure certificate.<br>For "
 "your own safety, <b>please click Yes</b> in next dialog."
 msgstr ""
+"Có vẻ như nó có thể là một <b> nguy cơ bảo mật quan trọng </ b>. <br> Bạn "
+"bây giờSẽ được nhắc nhở bởi Windows để gỡ bỏ giấy chứng nhận an toàn này. "
+"<br> Đối vớiSự an toàn của riêng bạn, <b> xin vui lòng bấm vào Có </ b> "
+"trong hộp thoại tiếp theo."
 
 msgid "Removing insecure certificate from {0} keystore: {1}"
-msgstr ""
+msgstr "Loại bỏ Giấy chứng nhận an toàn từ {0} keystore: {1}"
 
 msgid "Unable to remove insecure certificate from keystore: {0}"
-msgstr ""
+msgstr "Không thể gỡ bỏ giấy chứng nhận an toàn từ keystore: {0}"
 
 msgid "JOSM localhost certificate found in {0} keystore: {1}"
-msgstr ""
+msgstr "Giấy chứng nhận JOSM localhost tìm thấy trong {0} keystore: {1}"
 
 msgid ""
 "Remote Control is configured to provide HTTPS support.<br>This requires to "
@@ -13566,1402 +14912,1495 @@ msgid ""
 "next dialog.<br><br>If unsure, you can also click No then disable HTTPS "
 "support in Remote Control preferences."
 msgstr ""
+"Điều khiển từ xa được cấu hình để cung cấp hỗ trợ HTTPS. <br> Điều này đòi "
+"hỏi phảiThêm một chứng chỉ tùy chỉnh được tạo ra bởi JOSM vào Windows Root "
+"CACửa hàng. <br> <br> Bây giờ bạn sẽ được nhắc nhở bởi Windows để xác nhận "
+"điều nàyHoạt động. <br> Để kích hoạt tính năng hỗ trợ HTTPS thích hợp, <b> "
+"xin vui lòng bấm vào Có </ b> trongHộp thoại tiếp theo. <br> Nếu không chắc "
+"chắn, bạn cũng có thể nhấn No sau đó vô hiệu hóa HTTPSHỗ trợ trong tùy chọn "
+"điều khiển từ xa."
 
 msgid "HTTPS support in Remote Control"
-msgstr ""
+msgstr "HTTPS hỗ trợ trong điều khiển từ xa"
 
 msgid "Adding JOSM localhost certificate to {0} keystore"
-msgstr ""
+msgstr "Thêm chứng JOSM localhost để {0} keystore"
 
 msgid "Silent shortcut conflict: ''{0}'' moved by ''{1}'' to ''{2}''."
 msgstr ""
+"Silent shortcut xung đột:. '' {0} '' di chuyển bằng '' {1} '' để '' {2} ''"
 
 msgid "There was {0} tag found in the buffer, it is suspicious!"
 msgid_plural "There were {0} tags found in the buffer, it is suspicious!"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Có {0} tag được tìm thấy trong bộ đệm, nó là đáng ngờ!"
 
 msgid "Key is too long (max {0} characters):"
-msgstr ""
+msgstr "Key là quá dài (tối đa {0} ký tự):"
 
 msgid "Suspicious characters in key:"
-msgstr ""
+msgstr "nhân vật đáng ngờ trong khóa:"
 
 msgid "Value is too long (max {0} characters):"
-msgstr ""
+msgstr "Giá trị quá dài (tối đa {0} ký tự):"
 
 msgid "Do you want to paste these tags?"
-msgstr ""
+msgstr "Bạn có muốn dán các thẻ này?"
 
 msgid "Clear buffer"
-msgstr ""
+msgstr "Clear đệm"
 
 msgid "Ignore warnings"
-msgstr ""
+msgstr "Bỏ qua cảnh báo"
 
 msgid ""
 "<html><p> Sorry, it is impossible to paste tags from buffer. It does not "
 "contain any JOSM object or suitable text. </p></html>"
 msgstr ""
+"<Html> <p> Xin lỗi, không thể để dán thẻ từ đệm. Nó khôngChứa bất kỳ đối "
+"tượng JOSM hoặc văn bản phù hợp. </ P> </ html>"
 
 msgid "ms"
-msgstr ""
+msgstr "ms"
 
 msgid "s"
-msgstr ""
+msgstr "s"
 
 msgid "min"
-msgstr ""
+msgstr "min"
 
 msgid "h"
-msgstr ""
+msgstr "h"
 
 msgid "day"
 msgid_plural "days"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "ngày"
 
 msgid ""
 "Preference with key ''{0}'' does not include ''{1}''. Cannot restore window "
 "geometry from preferences."
 msgstr ""
+"Preference khóa '' {0} '' không bao gồm '' {1} ''. Không thể khôi phục lại "
+"cửa sổHình học từ sở thích."
 
 msgid ""
 "Preference with key ''{0}'' does not provide an int value for ''{1}''. Got "
 "{2}. Cannot restore window geometry from preferences."
 msgstr ""
+"Preference khóa '' {0} '' không cung cấp một giá trị int cho '' {1} ''. "
+"Chấn{2}. Không thể khôi phục lại vị trí cửa sổ từ sở thích."
 
 msgid ""
 "Failed to parse field ''{1}'' in preference with key ''{0}''. Exception was: "
 "{2}. Cannot restore window geometry from preferences."
 msgstr ""
+". Không thể phân tích cú pháp trường '' {1} '' trong sở thích với phím '' "
+"{0} '' ngoại lệ là:{2}. Không thể khôi phục lại vị trí cửa sổ từ sở thích."
 
 msgid ""
 "Preference with key ''{0}'' does not exist. Cannot restore window geometry "
 "from preferences."
 msgstr ""
+"Preference khóa '' {0} '' không tồn tại. Không thể khôi phục lại vị trí cửa "
+"sổTừ sở thích."
 
 msgid "Ignoring malformed geometry: {0}"
-msgstr ""
+msgstr "Bỏ qua hình học bị thay đổi: {0}"
 
 msgid "Failed to load XML schema."
-msgstr ""
+msgstr "Không thể tải giản đồ XML."
 
 msgid ""
 "Error in search expression on position {0} - right side of or(|) expression "
 "must return set of primitives"
 msgstr ""
+"Lỗi trong biểu thức tìm kiếm trên vị trí {0} - phía bên phải hoặc (|) biểu "
+"hiệnPhải trả lại thiết lập của nguyên thủy"
 
 msgid ""
 "Error in search expression on position {0} - left side of or(|) expression "
 "must return set of primitives"
 msgstr ""
+"Lỗi trong biểu thức tìm kiếm trên vị trí {0} - bên trái hoặc (|) biểu "
+"hiệnPhải trả lại thiết lập của nguyên thủy"
 
 msgid ""
 "Error in search expression on position {0} - not(-) cannot be used in this "
 "context"
 msgstr ""
+"Lỗi trong biểu thức tìm kiếm trên vị trí {0} - không (-) có thể không được "
+"sử dụng trongBối cảnh"
 
 msgid ""
 "Error in search expression on position {0} - expression must return "
 "different then current primitive"
 msgstr ""
+"Lỗi trong biểu thức tìm kiếm trên vị trí {0} - biểu hiện phải trả lạiKhác "
+"nhau sau đó hiện nguyên thủy"
 
 msgid "Unexpected token ({0}) on position {1}"
-msgstr ""
+msgstr "token không mong đợi ({0}) vào vị trí {1}"
 
 msgid "Unexpected token on position {0}. Expected {1}, found {2}"
-msgstr ""
+msgstr "token không mong đợi trên vị trí {0}. Dự kiến ​​{1}, {2} tìm thấy"
 
 msgid "Error while parsing search expression on position {0}"
-msgstr ""
+msgstr "Lỗi trong khi phân tích biểu thức tìm kiếm trên vị trí {0}"
 
 msgid "Unexpected char on {0}. Expected {1} found {2}"
-msgstr ""
+msgstr "Unexpected char trên {0}. Dự kiến ​​{1} {2} tìm thấy"
 
 msgid "Expected search expression"
-msgstr ""
+msgstr "dự kiến ​​biểu hiện tìm kiếm"
 
 msgid ""
 "You requested too many nodes (limit is 50,000). Either request a smaller "
 "area, or use planet.osm"
 msgstr ""
+"Bạn yêu cầu quá nhiều nút (giới hạn là 50.000). Hoặc là yêu cầu nhỏ hơnKhu "
+"vực, hoặc sử dụng planet.osm"
 
 msgid "Database offline for maintenance"
-msgstr ""
+msgstr "Cơ sở dữ liệu ẩn để bảo trì"
 
 msgid "You have downloaded too much data. Please try again later."
-msgstr ""
+msgstr "Bạn đã tải về quá nhiều dữ liệu. Vui lòng thử lại sau."
 
 msgid ""
 "The maximum bbox size is 0.25, and your request was too large. Either "
 "request a smaller area, or use planet.osm"
 msgstr ""
+"Kích thước tối đa là 0,25 bbox, và yêu cầu của bạn quá lớn. Hoặc làYêu cầu "
+"một diện tích nhỏ hơn, hoặc sử dụng planet.osm"
 
 msgid "JOSM-Trac login at josm.openstreetmap.de"
-msgstr ""
+msgstr "JOSM-Trac đăng nhập tại josm.openstreetmap.de"
 
 msgid "could not get audio input stream from input URL"
-msgstr ""
+msgstr "không thể có được dòng đầu vào âm thanh từ đầu vào URL"
 
 msgid "Audio Device Unavailable"
-msgstr ""
+msgstr "Audio Device Unavailable"
 
 msgid "You must make your edits public to upload new data"
-msgstr ""
+msgstr "Bạn phải làm công sửa của bạn để tải lên dữ liệu mới"
 
 msgid "town"
-msgstr ""
+msgstr "thị trấn"
 
 msgctxt "landuse"
 msgid "forest"
-msgstr ""
+msgstr "rừng"
 
 msgctxt "landuse"
 msgid "meadow"
-msgstr ""
+msgstr "cỏ"
 
 msgctxt "landuse"
 msgid "farmland"
-msgstr ""
+msgstr "đất nông nghiệp"
 
 msgctxt "landuse"
 msgid "residential"
-msgstr ""
+msgstr "dân cư"
 
 msgctxt "natural"
 msgid "scrub"
-msgstr ""
+msgstr "chà"
 
 msgctxt "Relation type"
 msgid "associatedStreet"
-msgstr ""
+msgstr "associatedStreet"
 
 msgctxt "Relation type"
 msgid "boundary"
-msgstr ""
+msgstr "ranh giới"
 
 msgctxt "Relation type"
 msgid "bridge"
-msgstr ""
+msgstr "cầu nối"
 
 msgctxt "Relation type"
 msgid "destination_sign"
-msgstr ""
+msgstr "destination_sign"
 
 msgctxt "Relation type"
 msgid "enforcement"
-msgstr ""
+msgstr "thực thi"
 
 msgctxt "Relation type"
 msgid "multipolygon"
-msgstr ""
+msgstr "multipolygon"
 
 msgctxt "Relation type"
 msgid "network"
-msgstr ""
+msgstr "mạng"
 
 msgctxt "Relation type"
 msgid "public_transport"
-msgstr ""
+msgstr "public_transport"
 
 msgctxt "Relation type"
 msgid "restriction"
-msgstr ""
+msgstr "hạn chế"
 
 msgctxt "Relation type"
 msgid "route"
-msgstr ""
+msgstr "lộ trình"
 
 msgctxt "Relation type"
 msgid "route_master"
-msgstr ""
+msgstr "route_master"
 
 msgctxt "Relation type"
 msgid "site"
-msgstr ""
+msgstr "trang web"
 
 msgctxt "Relation type"
 msgid "street"
-msgstr ""
+msgstr "đường phố"
 
 msgctxt "Relation type"
 msgid "tunnel"
-msgstr ""
+msgstr "đường hầm"
 
 msgctxt "Relation type"
 msgid "waterway"
-msgstr ""
+msgstr "đường thủy"
 
 msgctxt "Place type"
 msgid "city"
-msgstr ""
+msgstr "thành phố"
 
 msgctxt "Place type"
 msgid "locality"
-msgstr ""
+msgstr "địa phương"
 
 msgctxt "Place type"
 msgid "village"
-msgstr ""
+msgstr "làng"
 
 msgctxt "Place type"
 msgid "town"
-msgstr ""
+msgstr "thị trấn"
 
 msgctxt "Place type"
 msgid "borough"
-msgstr ""
+msgstr "quận"
 
 msgctxt "Place type"
 msgid "municipality"
-msgstr ""
+msgstr "đô thị"
 
 msgctxt "Place type"
 msgid "island"
-msgstr ""
+msgstr "hòn đảo"
 
 msgctxt "Place type"
 msgid "county"
-msgstr ""
+msgstr "quận"
 
 msgctxt "Place type"
 msgid "hamlet"
-msgstr ""
+msgstr "ấp"
 
 msgctxt "Place type"
 msgid "suburb"
-msgstr ""
+msgstr "ngoại ô"
 
 msgid "All Files"
-msgstr ""
+msgstr "All Files"
 
 msgid "Attributes"
-msgstr ""
+msgstr "Attributes"
 
 msgid "Abort file chooser dialog"
-msgstr ""
+msgstr "Abort thoại chooser file"
 
 msgid "Abort file chooser dialog."
-msgstr ""
+msgstr "Abort thoại chooser tập tin."
 
 msgid "Create New Folder"
-msgstr ""
+msgstr "Create New Folder"
 
 msgid "Delete File"
-msgstr ""
+msgstr "Xóa File"
 
 msgid "Enter file name:"
-msgstr ""
+msgstr "Nhập tên tập tin:"
 
 msgid "Enter path or folder name:"
-msgstr ""
+msgstr "Nhập đường dẫn hoặc tên thư mục:"
 
 msgid "Error "
-msgstr ""
+msgstr "Lỗi "
 
 msgid "Error renaming file \"{0}\" to \"{1}\""
-msgstr ""
+msgstr "Lỗi đổi tên tập tin \" {0} \"để \" {1} \""
 
 msgid "File name:"
-msgstr ""
+msgstr "Tên tập tin:"
 
 msgid "File Name:"
-msgstr ""
+msgstr "File Name:"
 
 msgid "FileChooser help."
-msgstr ""
+msgstr "FileChooser giúp đỡ."
 
 msgid "Files"
-msgstr ""
+msgstr "Files"
 
 msgid "Files of type:"
-msgstr ""
+msgstr "Files of type:"
 
 msgid "Files of Type:"
-msgstr ""
+msgstr "Files of Type:"
 
 msgid "Filter:"
-msgstr ""
+msgstr "Filter:"
 
 msgid "Folders"
-msgstr ""
+msgstr "Folders"
 
 msgid "Home"
-msgstr ""
+msgstr "Home"
 
 msgid "Look in:"
-msgstr ""
+msgstr "Hãy nhìn vào:"
 
 msgid "Look In:"
-msgstr ""
+msgstr "Look In:"
 
 msgid "Modified"
-msgstr ""
+msgstr "thay đổi"
 
 msgid "New Folder"
-msgstr ""
+msgstr "New Folder"
 
 msgid "Open selected file"
-msgstr ""
+msgstr "Mở tập tin đã chọn"
 
 msgid "Open selected file."
-msgstr ""
+msgstr "Mở tập tin được chọn."
 
 msgid "Refresh"
-msgstr ""
+msgstr "Làm mới"
 
 msgid "Rename File"
-msgstr ""
+msgstr "Đổi tên File"
 
 msgid "Rename file \"{0}\" to"
-msgstr ""
+msgstr "Đổi tên tập tin \" {0} \"để"
 
 msgid "Save in:"
-msgstr ""
+msgstr "Save in:"
 
 msgid "Save In:"
-msgstr ""
+msgstr "Save In:"
 
 msgid "Save selected file."
-msgstr ""
+msgstr "Lưu tập tin được chọn."
 
 msgid "Selection:"
-msgstr ""
+msgstr "Lựa chọn"
 
 msgid "Size"
-msgstr ""
+msgstr "Kích"
 
 msgid "Up One Level"
-msgstr ""
+msgstr "Lên một bậc"
 
 msgid "Update"
-msgstr ""
+msgstr "Cập nhật"
 
 msgid "Update directory listing."
-msgstr ""
+msgstr "danh sách Cập nhật thư mục."
+
+msgid "View"
+msgstr "View"
 
 msgid "Blue:"
-msgstr ""
+msgstr "Blue"
 
 msgid "Color Name:"
-msgstr ""
+msgstr "Color Name:"
 
 msgid "Green:"
-msgstr ""
+msgstr "Green:"
 
 msgid "Hue:"
-msgstr ""
+msgstr "Huế:"
 
 msgid "GTK Color Chooser"
-msgstr ""
+msgstr "GTK Color Chooser"
 
 msgid "Red:"
-msgstr ""
+msgstr "Red"
 
 msgid "Saturation:"
-msgstr ""
+msgstr "Saturation:"
 
 msgid "Landsat"
-msgstr ""
+msgstr "Landsat"
 
 msgid "Bing aerial imagery"
-msgstr ""
+msgstr "Bing hình ảnh trên không"
 
 msgid "HDM (Humanitarian OpenStreetMap Team)"
-msgstr ""
+msgstr "HDM (Humanitarian OpenStreetMap Team)"
 
 msgid "Mapbox Satellite"
-msgstr ""
+msgstr "Mapbox vệ tinh"
 
 msgid "MapQuest Open Aerial"
-msgstr ""
+msgstr "MapQuest mở Aerial"
 
 msgid "OpenStreetMap GPS Traces"
-msgstr ""
+msgstr "OpenStreetMap GPS vết"
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
-msgstr ""
+msgstr "skobbler"
 
 msgid "OpenStreetMap (Mapnik Black & White)"
-msgstr ""
+msgstr "OpenStreetMap (Mapnik Black & White)"
 
 msgid "OpenStreetMap (Mapnik, no labels)"
-msgstr ""
-
-msgid "skobbler heatmap"
-msgstr ""
+msgstr "OpenStreetMap (Mapnik, không có nhãn)"
 
 msgid "OpenCycleMap"
-msgstr ""
+msgstr "OpenCycleMap"
 
 msgid "MapQuest OSM"
-msgstr ""
+msgstr "MapQuest OSM"
 
 msgid "Public Transport (ÖPNV)"
-msgstr ""
+msgstr "Giao thông vận tải công cộng (ÖPNV)"
 
 msgid "OpenStreetMap (German Style)"
-msgstr ""
+msgstr "OpenStreetMap (German Style)"
 
 msgid "Cambodia, Laos, Thailand, Vietnam bilingual"
-msgstr ""
+msgstr "Campuchia, Lào, Thái Lan, Việt Nam song ngữ"
 
 msgid "osmfr"
-msgstr ""
+msgstr "osmfr"
 
 msgid "OpenPT Map (overlay)"
-msgstr ""
+msgstr "OpenPT Map (overlay)"
 
 msgid "Strava cycling heatmap"
-msgstr ""
+msgstr "Strava đi xe đạp heatmap"
 
 msgid "Strava running heatmap"
-msgstr ""
+msgstr "Strava chạy heatmap"
 
 msgid "Locator Overlay"
-msgstr ""
+msgstr "Locator Overlay"
 
 msgid "QA No Address"
-msgstr ""
+msgstr "QA Không Address"
 
 msgid "Waymarked Trails: Hiking"
-msgstr ""
+msgstr "Trails Waymarked: Đi bộ"
 
 msgid "Waymarked Trails: Cycling"
-msgstr ""
+msgstr "Waymarked Trails: Xe đạp"
 
 msgid "Waymarked Trails: MTB"
-msgstr ""
+msgstr "Waymarked Trails: MTB"
 
 msgid "Waymarked Trails: Skating"
-msgstr ""
+msgstr "Trails Waymarked: Skating"
 
 msgid "Waymarked Trails: Horse Riding"
-msgstr ""
+msgstr "Trails Waymarked: Cưỡi ngựa"
 
 msgid "Waymarked Trails: Winter Sports"
-msgstr ""
+msgstr "Trails Waymarked: Thể thao mùa đông"
 
 msgid "OSM Inspector: Geometry"
-msgstr ""
+msgstr "OSM Thanh tra: Hình học"
 
 msgid "OSM Inspector: Tagging"
-msgstr ""
+msgstr "OSM Inspector: Gắn thẻ"
 
 msgid "OSM Inspector: Places"
-msgstr ""
+msgstr "OSM Inspector: Địa điểm"
 
 msgid "OSM Inspector: Highways"
-msgstr ""
+msgstr "OSM Inspector: Đường cao tốc"
 
 msgid "OSM Inspector: Multipolygon"
-msgstr ""
+msgstr "OSM Inspector: Multipolygon"
 
 msgid "OSM Inspector: Routing"
-msgstr ""
+msgstr "OSM Inspector: Routing"
 
 msgid "OSM Inspector: Addresses"
-msgstr ""
+msgstr "OSM Inspector: Địa chỉ"
 
 msgid "OSM Inspector: Boundaries (EU)"
-msgstr ""
+msgstr "OSM Inspector: Ranh giới (EU)"
 
 msgid "AGRI black-and-white 2.5m"
-msgstr ""
+msgstr "AGRI 2.5m màu đen và trắng"
 
 msgid "Geoimage.at MaxRes"
-msgstr ""
+msgstr "Geoimage.at MaxRes"
 
 msgid "basemap.at"
-msgstr ""
+msgstr "basemap.at"
 
 msgid "basemap.at Orthofoto"
-msgstr ""
+msgstr "basemap.at Orthofoto"
 
 msgid "Graz: Basiskarte (base map)"
-msgstr ""
+msgstr "Graz: Basiskarte (bản đồ cơ sở)"
 
 msgid "Tiris: DGM (Terrain model)"
-msgstr ""
+msgstr "Tiris: DGM (Terrain model)"
 
 msgid "Tiris: DOM (Surface model)"
-msgstr ""
+msgstr "Tiris: DOM (mô hình bề mặt)"
 
 msgid "Vienna: Mehrzweckkarte (general purpose)"
-msgstr ""
+msgstr "Vienna: Mehrzweckkarte (mục đích chung)"
 
 msgid "Vienna: Beschriftungen (annotations)"
-msgstr ""
+msgstr "Vienna: Beschriftungen (chú thích)"
 
 msgid "Vienna: Orthofoto (aerial image)"
-msgstr ""
+msgstr "Vienna: Orthofoto (hình ảnh trên không)"
 
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
+msgstr "VoGIS: Echtfarbenbild 2012 (12cm)"
+
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
 msgstr ""
 
 msgid "VoGIS: Flächenwidmungsplan"
-msgstr ""
+msgstr "VoGIS: Flächenwidmungsplan"
 
 msgid "VoGIS: DGM (Terrain model)"
-msgstr ""
+msgstr "VoGIS: DGM (mô hình địa hình)"
 
 msgid "VoGIS: DOM (Surface model)"
-msgstr ""
+msgstr "VoGIS: DOM (mô hình bề mặt)"
 
 msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
+"AGIV (laanderen) hình ảnh trên không (bao gồm khu vực Brussels cũng) (2013)"
 
-msgid "SPW(allonie) 2012 aerial imagery"
+msgid "SPW(allonie) PICC numerical imagery"
 msgstr ""
 
+msgid "SPW(allonie) 2012 aerial imagery"
+msgstr "SPW (allonie) 2012 aerial hình ảnh"
+
 msgid "SPW(allonie) 2009 aerial imagery"
+msgstr "SPW (allonie) 2009 hình ảnh trên không"
+
+msgid "cadastre: for names and house numbers only, bad geometry"
 msgstr ""
 
 msgid "IBGE Mapa de Setores Urbanos"
-msgstr ""
+msgstr "IBGE Mapa de Setores Urbanos"
 
 msgid "IBGE Mapa de Setores Rurais"
-msgstr ""
+msgstr "IBGE Mapa de Setores Rurais"
 
 msgid "Geobase Hydrography"
-msgstr ""
+msgstr "Geobase Thủy"
 
 msgid "Geobase Roads"
-msgstr ""
+msgstr "Geobase Đường"
 
 msgid "Canvec"
-msgstr ""
+msgstr "Canvec"
 
 msgid "British Columbia Mosaic"
-msgstr ""
+msgstr "British Columbia Mosaic"
 
 msgid "Kelowna 2012"
-msgstr ""
+msgstr "Kelowna 2012"
 
 msgid "Kelowna Roads overlay"
-msgstr ""
+msgstr "Kelowna Đường overlay"
 
 msgid "Czech CUZK:KM"
-msgstr ""
+msgstr "Czech CUZK: KM"
 
 msgid "Czech RUIAN budovy"
-msgstr ""
+msgstr "Czech Ruian budovy"
 
 msgid "Czech RUIAN parcely"
-msgstr ""
+msgstr "Czech Ruian parcely"
 
 msgid "Czech pLPIS"
+msgstr "Czech pLPIS"
+
+msgid "Geodatastyrelsen (Denmark)"
+msgstr "Geodatastyrelsen (Đan Mạch)"
+
+msgid "Geodatastyrelsen DTK Kort25"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen Skyggekort 1.6m"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
-msgstr ""
+msgstr "Stevns (Đan Mạch)"
 
 msgid "Vejmidte (Denmark)"
-msgstr ""
+msgstr "Vejmidte (Đan Mạch)"
 
 msgid "Estonia Basemap (Maaamet)"
-msgstr ""
+msgstr "Estonia basemap (Maaamet)"
 
 msgid "Estonia Ortho (Maaamet)"
-msgstr ""
+msgstr "Estonia Ortho (Maaamet)"
 
 msgid "Estonia Hillshade (Maaamet)"
-msgstr ""
+msgstr "Estonia Hillshade (Maaamet)"
 
 msgid "Estonia Cadastre (Maaamet)"
-msgstr ""
+msgstr "Estonia Địa chính (Maaamet)"
 
 msgid "Estonia Forestry (Maaamet)"
-msgstr ""
+msgstr "Estonia Lâm nghiệp (Maaamet)"
 
 msgid "BANO"
+msgstr "Bano"
+
+msgid "BD Carthage"
 msgstr ""
 
 msgid "Bordeaux - 2012"
-msgstr ""
+msgstr "Bordeaux - 2012"
 
 msgid "Cadastre"
-msgstr ""
+msgstr "Địa chính"
 
 msgid "CRAIG - Auvergne 2013 - 25 cm"
-msgstr ""
+msgstr "CRAIG - Auvergne 2013-25 cm"
 
 msgid "CRIGE PACA Alpes-Maritimes 2009 - 40 cm"
-msgstr ""
+msgstr "CRIGE PACA Alpes-Maritimes 2009-40 cm"
 
 msgid "GrandNancy Orthophotographie 2012"
-msgstr ""
+msgstr "GrandNancy Orthophotographie 2012"
 
 msgid "Géobretagne - Brest 2010 - 10 cm"
-msgstr ""
+msgstr "Géobretagne - Brest 2010-10 cm"
 
 msgid "Géobretagne - Morbihan 2010"
-msgstr ""
+msgstr "Géobretagne - Morbihan 2010"
 
 msgid "Géolittoral - Orthophotos 2000"
-msgstr ""
+msgstr "Géolittoral - Orthophotos 2000"
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
-msgstr ""
+msgstr "Géolittoral - Sentiers"
 
 msgid "Grand Lyon - Orthophotographie 2012 - 10cm"
-msgstr ""
+msgstr "Grand Lyon - Orthophotographie 2012 - 10cm"
 
 msgid "Loire-Atlantique - Orthophotos 2012 - 20 cm"
-msgstr ""
+msgstr "Loire-Atlantique - Orthophotos 2012-20 cm"
 
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
+msgstr "SIG LR - Languedoc-Roussillon 2012-20 cm"
+
+msgid "Route 500™©®"
 msgstr ""
 
 msgid "Toulouse - Orthophotoplan 2013"
-msgstr ""
+msgstr "Toulouse - Orthophotoplan 2013"
 
 msgid "Toulouse - Orthophotoplan 2011"
-msgstr ""
+msgstr "Toulouse - Orthophotoplan 2011"
 
 msgid "Toulouse - Orthophotoplan 2007"
-msgstr ""
+msgstr "Toulouse - Orthophotoplan 2007"
 
 msgid "Tours - Orthophotos 2013"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
+msgstr "Tours - Orthophotos 2013"
 
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
 msgstr ""
+"Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999-"
+" 1 m"
 
 msgid "Hike & Bike"
-msgstr ""
+msgstr "Hike & Bike"
 
 msgid "OpenStreetMap (Sorbian Language)"
-msgstr ""
+msgstr "OpenStreetMap (Sorbian Language)"
 
 msgid "Hamburg (40 cm)"
-msgstr ""
+msgstr "Hamburg (40 cm)"
 
 msgid "Hamburg (20 cm)"
-msgstr ""
+msgstr "Hamburg (20 cm)"
 
 msgid "Hamburg (DK5)"
+msgstr "Hamburg (DK5)"
+
+msgid "Bavaria (80 cm)"
 msgstr ""
 
 msgid "Bavaria (2 m)"
-msgstr ""
+msgstr "Bavaria (2 m)"
 
 msgid "Stuttgart (Luftbild)"
-msgstr ""
+msgstr "Stuttgart (Luftbild)"
 
 msgid "Erlangen Luftbild (2013 6,25 cm)"
-msgstr ""
+msgstr "Erlangen Luftbild (2013 6,25 cm)"
 
 msgid "Erlangen 2011 Luftbild (5,0 cm)"
-msgstr ""
+msgstr "Erlangen 2011 Luftbild (5,0 cm)"
 
 msgid "Old map of Zwenkau - TK25 Messtischblatt (4739; 1906; PROJ.4-rect)"
-msgstr ""
+msgstr "đồ cổ của Zwenkau - TK25 Messtischblatt (4739; 1906; PROJ.4-rect)"
 
 msgid "Old map of Pegau - TK25 Messtischblatt (4839; 1909; PROJ.4-rect)"
-msgstr ""
+msgstr "đồ cổ của Pegau - TK25 Messtischblatt (4839; 1909; PROJ.4-rect)"
 
 msgid "Physical DE - Physische Karte (Naturräume)"
-msgstr ""
+msgstr "Physical DE - Physische Karte (Naturräume)"
 
 msgid "Physical DE:Harz - Physische Karte (Naturräume)"
-msgstr ""
+msgstr "Physical DE: Harz - Physische Karte (Naturräume)"
 
 msgid ""
 "Physical DE:Harz - Overlay für Bing (z.B. Deckkraft zw. 20 und 50 Prozent "
 "nutzen)"
 msgstr ""
+"Physical DE:. Harz - Overlay für Bing (ZB Deckkraft ZW 20 und 50 "
+"ProzentNutzen)"
 
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
-msgstr ""
+msgstr "Maps4BW (LGL-BW, www.lgl-bw.de)"
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
-msgstr ""
+msgstr "NRW-Atlas: Digitale GrundKarte 1: 5000"
 
 msgid "NRW-Atlas: Luftbilder"
-msgstr ""
+msgstr "NRW-Atlas: Luftbilder"
 
 msgid "NRW-Atlas: Topographische Karte 1:10000"
-msgstr ""
+msgstr "NRW-Atlas: Topographische Karte 1: 10000"
 
 msgid "Metropole Ruhr: Luftbilder (10 cm)"
-msgstr ""
+msgstr "Metropole Ruhr: Luftbilder (10 cm)"
 
 msgid "Drone Imagery (Haiti)"
-msgstr ""
+msgstr "Drone Hình ảnh (Haiti)"
 
 msgid "Drone Imagery 2014 (Haiti)"
-msgstr ""
+msgstr "Drone Hình ảnh 2014 (Haiti)"
 
 msgid "Ireland British War Office 1:25k GSGS 3906"
-msgstr ""
+msgstr "Ireland British War Văn phòng 1: 25k GSGS 3906"
 
 msgid "Ireland British War Office One-Inch 1941-43 GSGS 4136"
-msgstr ""
+msgstr "Ireland British War Office One-Inch 1941-1943 GSGS 4136"
 
 msgid "Ireland Bartholomew Quarter-Inch 1940"
+msgstr "Ireland Bartholomew Quarter-Inch 1940"
+
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
 msgstr ""
 
+msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
+msgstr "Memorial Atlas of Ireland (1901) LJ Richards"
+
 msgid "OSMIE Townlands"
-msgstr ""
+msgstr "OSMIE Townlands"
 
 msgid "OSMIE EDs"
-msgstr ""
+msgstr "OSMIE EDS"
 
 msgid "OSMIE Civil Parishes"
-msgstr ""
+msgstr "OSMIE dân giáo xứ"
 
 msgid "OSMIE Baronies"
-msgstr ""
+msgstr "OSMIE Baronies"
 
 msgid "OSMIE Political"
-msgstr ""
-
-msgid "Ireland EEA GMES Urban Atlas"
-msgstr ""
-
-msgid "Ireland EEA CORINE 2006"
-msgstr ""
-
-msgid "Antrim Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
-msgstr ""
-
-msgid "Carlow Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Clare Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Dublin Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Fermanagh Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Galway Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Kildare Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Leitrim Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Longford Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Offaly Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Sligo Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Tyrone Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Westmeath Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Wexford Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Wicklow Civil Parishes and Baronies"
-msgstr ""
+msgstr "OSMIE Chính trị"
 
 msgid "Lodi - Italy"
-msgstr ""
+msgstr "Lodi - Italy"
 
 msgid "Lombardia - Italy (CTR)"
-msgstr ""
+msgstr "Lombardia - Ý (CTR)"
 
 msgid "Sicily - Italy"
-msgstr ""
+msgstr "Sicily - Italy"
 
 msgid "PCN 2006 - Italy"
-msgstr ""
+msgstr "PCN 2006 - Italy"
 
 msgid "PCN 2008 - IT Lazio+Umbria"
-msgstr ""
+msgstr "PCN 2008 - IT Lazio + Umbria"
 
 msgid "PCN 2012 - Italy"
-msgstr ""
+msgstr "PCN 2012 - Italy"
 
 msgid "South Tyrol Orthofoto 2011"
-msgstr ""
+msgstr "South Tyrol Orthofoto 2011"
 
 msgid "South Tyrol Topomap"
-msgstr ""
+msgstr "South Tyrol Topomap"
 
 msgid "USSR - Latvia"
-msgstr ""
+msgstr "Liên Xô - Latvia"
 
 msgid "50cm ortho - Latvia"
-msgstr ""
+msgstr "50cm ortho - Latvia"
 
 msgid "20cm ortho - Latvia - Coastline"
+msgstr "20cm ortho - Latvia - Coastline"
+
+msgid "1.cikla ortofotokarte - Latvia"
 msgstr ""
 
 msgid "ORT10LT (Lithuania)"
-msgstr ""
+msgstr "ORT10LT (Lithuania)"
 
 msgid "Luxembourg Inspire Ortho 2010"
-msgstr ""
+msgstr "Luxembourg Inspire Ortho 2010"
 
 msgid "Luxembourg Inspire Ortho 2013"
-msgstr ""
+msgstr "Luxembourg Inspire Ortho 2013"
 
 msgid "Luxembourg Inspire Railway"
-msgstr ""
+msgstr "Luxembourg Inspire đường sắt"
 
 msgid "Luxembourg Inspire Roads"
+msgstr "Luxembourg Inspire Đường"
+
+msgid "Luxembourg Inspire Water"
 msgstr ""
 
 msgid "Niger Delta Oct 2012 Landsat"
-msgstr ""
+msgstr "Niger Delta tháng 10 năm 2012 Landsat"
 
 msgid "Gaza Strip - Pléiades - 2014/07/06"
-msgstr ""
+msgstr "Dải Gaza - Pléiades - 2014/07/06"
 
 msgid "Gaza Strip - Pléiades - 2014/07/06 (NIR)"
-msgstr ""
+msgstr "Dải Gaza - Pléiades - 2014/07/06 (NIR)"
 
 msgid "Pangasinán/Bulacan (Phillipines HiRes)"
-msgstr ""
+msgstr "Pangasinan / Bulacan (Phillipines thuê)"
 
 msgid "Geoportal 2: Ortofotomapa (aerial image)"
+msgstr "Geoportal 2: Ortofotomapa (hình ảnh trên không)"
+
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
 msgstr ""
 
 msgid "Geoportal 2: PRNG (geo names)"
+msgstr "Geoportal 2: PRNG (tên địa lý)"
+
+msgid "Geoportal 2: ISOK hillshade"
 msgstr ""
 
 msgid "Będzin: Ortofotomapa 2013 (aerial image)"
-msgstr ""
+msgstr "Bedzin: Ortofotomapa 2013 (ảnh trên không)"
 
 msgid "Będzin: Budynki (buildings)"
-msgstr ""
+msgstr "Bedzin: Budynki (tòa nhà)"
 
 msgid "Bytom: Ortofotomapa 2012 (aerial image)"
+msgstr "Bytom: Ortofotomapa 2012 (ảnh trên không)"
+
+msgid "Bytom: Fotoplan 2014 (aerial image)"
 msgstr ""
 
 msgid "Bytom: Budynki (buildings)"
-msgstr ""
+msgstr "Bytom: Budynki (tòa nhà)"
 
 msgid "Chorzów: Budynki (buildings)"
+msgstr "Chorzów: Budynki (tòa nhà)"
+
+msgid "Częstochowa: Budynki (buildings)"
 msgstr ""
 
 msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
+msgstr "Częstochowa: Ortofotomapa 2011 (ảnh trên không)"
+
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
-msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
 msgstr ""
 
+msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
+msgstr "Gliwice: Ortofotomapa 2013 (ảnh trên không)"
+
 msgid "Gliwice: Budynki (buildings)"
-msgstr ""
+msgstr "Gliwice: Budynki (tòa nhà)"
 
 msgid "Katowice: Ortofotomapa (aerial image)"
+msgstr "Katowice: Ortofotomapa (hình ảnh trên không)"
+
+msgid "Katowice: Budynki (buildings)"
+msgstr ""
+
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
 msgid "Łódź: Ortofotomapa (aerial image)"
+msgstr "Łódź: Ortofotomapa (hình ảnh trên không)"
+
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Powiat poznański: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
+msgid "Powiat rzeszowski: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgstr ""
+
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgstr ""
+
+msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgstr "Ruda Slaska: Ortofotomapa (hình ảnh trên không)"
+
+msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgstr "Rzeszów: Ortofotomapa (hình ảnh trên không)"
+
+msgid "Rzeszów: Budynki (buildings)"
+msgstr "Rzeszów: Budynki (tòa nhà)"
+
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgstr "Siemianowice Śląskie: Ortofotomapa (hình ảnh trên không)"
+
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
 msgstr ""
 
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgstr "Świętochłowice: Ortofotomapa 2009 (ảnh trên không)"
+
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
-msgstr ""
+msgstr "Zabrze: Ortofotomapa 2011 (ảnh trên không)"
 
 msgid "trail.pl: Szlaki (paths)"
-msgstr ""
+msgstr "trail.pl: Szlaki (đường dẫn)"
 
 msgid "ScanEx IRS"
-msgstr ""
+msgstr "ScanEx IRS"
 
 msgid "ScanEx SPOT"
-msgstr ""
+msgstr "ScanEx SPOT"
 
 msgid "Freemap.sk Car"
-msgstr ""
+msgstr "Freemap.sk Car"
 
 msgid "Freemap.sk Hiking"
-msgstr ""
+msgstr "Freemap.sk đi bộ"
 
 msgid "Freemap.sk Cyclo"
-msgstr ""
+msgstr "Freemap.sk Cyclo"
 
 msgid "Freemap.sk Ski"
-msgstr ""
+msgstr "Freemap.sk Ski"
 
 msgid "Katastrálna mapa Slovenska (KaPor, 2010-04)"
-msgstr ""
+msgstr "Katastrálna MAPA Slovenska (Kapor, 2010-04)"
 
 msgid "Katastrálna mapa Slovenska (KaPor, 2011-05)"
-msgstr ""
+msgstr "Katastrálna MAPA Slovenska (Kapor, 2011-05)"
 
 msgid "Slovakia EEA GMES Urban Atlas"
-msgstr ""
+msgstr "Slovakia EEA GMES Urban Atlas"
 
 msgid "Slovakia EEA CORINE 2006"
-msgstr ""
+msgstr "Slovakia EEA Corine 2006"
 
 msgid "Slovakia Historic Maps"
-msgstr ""
+msgstr "Slovakia Maps lịch sử"
 
 msgid "RABA-KGZ: Slovenia farmland use"
-msgstr ""
+msgstr "Raba-KGZ: Slovenia đất nông nghiệp sử dụng"
 
 msgid "RABA-KGZ: Slovenia built-up areas"
-msgstr ""
+msgstr "Raba-KGZ: Slovenia xây dựng lên các khu vực"
 
 msgid "South Africa CD:NGI Aerial"
-msgstr ""
+msgstr "Nam Phi CD: NGI Aerial"
 
 msgid "Catastro Spain"
-msgstr ""
+msgstr "Catastro Tây Ban Nha"
 
 msgid "PNOA Spain"
-msgstr ""
+msgstr "PNOA Tây Ban Nha"
 
 msgid "SIGPAC Spain"
-msgstr ""
+msgstr "SIGPAC Tây Ban Nha"
 
 msgid "GRAFCAN - Canary Islands"
-msgstr ""
+msgstr "GRAFCAN - Quần đảo Canary"
 
 msgid "ITACyL - Castile and León"
-msgstr ""
+msgstr "ITACyL - Castile và León"
 
 msgid "IDEIB - Balearic Islands"
-msgstr ""
+msgstr "IDEIB - Quần đảo Balearic"
 
 msgid "GRAFCAN Express - Canary Islands"
-msgstr ""
+msgstr "GRAFCAN Express - Quần đảo Canary"
 
 msgid "Kanton Aargau 25cm (AGIS 2011)"
-msgstr ""
+msgstr "Kanton Aargau 25cm (AGIS 2011)"
 
 msgid "Kanton Aargau 25cm (AGIS 2014)"
-msgstr ""
+msgstr "Kanton Aargau 25cm (AGIS 2014)"
 
 msgid "Stadt Uster Orthophoto 2008 10cm"
-msgstr ""
+msgstr "Stadt Uster Orthophoto 2008 10cm"
 
 msgid "Stadtplan Zürich"
-msgstr ""
+msgstr "Stadtplan Zürich"
 
 msgid "Stadt Zürich Übersichtsplan (Strassen, Gebäude, Hausnummer)"
-msgstr ""
+msgstr "Stadt Zürich Übersichtsplan (Strassen, Gebäude, Hausnummer)"
 
 msgid "Stadt Zürich Luftbild 2011"
-msgstr ""
+msgstr "Stadt Zürich Luftbild 2011"
 
 msgid "Orthofoto Kanton Solothurn RGB (SOGIS 2011/2012/2013)"
-msgstr ""
+msgstr "Orthofoto Kanton Solothurn RGB (SOGIS 2011/2012/2013)"
 
 msgid "Orthofoto Kanton Solothurn Infrarot (SOGIS 2011/2012/2013)"
-msgstr ""
+msgstr "Orthofoto Kanton Solothurn Infrarot (SOGIS 2011/2012/2013)"
 
 msgid "Canton de Génève 5cm (SITG 2011)"
-msgstr ""
+msgstr "Canton de Geneve 5cm (SITG 2011)"
 
 msgid "Canton de Neuchâtel 50cm (SITN 2006)"
-msgstr ""
+msgstr "Canton de Neuchâtel 50cm (SITN 2006)"
 
 msgid "Canton du Jura 50cm (RCJU 1998)"
-msgstr ""
+msgstr "Canton du Jura 50cm (RCJU 1998)"
 
 msgid "Canton de Fribourg 50cm (2005)"
-msgstr ""
+msgstr "Canton de Fribourg 50cm (2005)"
 
 msgid "Stadt Bern 10cm/25cm (2012)"
-msgstr ""
+msgstr "Stadt Bern 10cm / 25cm (2012)"
 
 msgid "HEIG-VD / Orthophoto Yverdon-les-Bains 25cm (2007)"
-msgstr ""
+msgstr "HEIG-VD / Orthophoto Yverdon-les-Bains 25cm (2007)"
 
 msgid "Ville de Nyon - Orthophoto 2010 HD 5cm/pi"
-msgstr ""
+msgstr "Ville de Nyon - Orthophoto 2010 HD 5cm / pi"
 
 msgid "Cartoriviera - Orthophoto 2012"
-msgstr ""
+msgstr "Cartoriviera - Orthophoto 2012"
 
 msgid "SIGIP - Orthophoto 2012"
-msgstr ""
+msgstr "SIGIP - Orthophoto 2012"
 
 msgid "Lausanne - Orthophoto technique 2012"
-msgstr ""
+msgstr "Lausanne - Orthophoto kỹ thuật năm 2012"
 
 msgid "Bonvillars Orthophoto 2013"
-msgstr ""
+msgstr "Bonvillars Orthophoto 2013"
 
 msgid "Fiez Orthophoto 2013"
+msgstr "Fiez Orthophoto 2013"
+
+msgid "Taiwan e-Map Open Data"
 msgstr ""
 
-msgid "MSR Maps Topo"
+msgid "Taiwan e-Map Open Data (with Contour Line)"
 msgstr ""
 
-msgid "MSR Maps Urban"
+msgid "Taiwan Village Boundaries"
 msgstr ""
 
-msgid "USGS Topographic Maps"
+msgid "Taiwan Land-Section Data"
 msgstr ""
 
-msgid "USGS Large Scale Imagery"
+msgid "NLSC Open Data WMTS"
 msgstr ""
 
+msgid "MSR Maps Topo"
+msgstr "MSR Maps Topo"
+
+msgid "MSR Maps Urban"
+msgstr "MSR Maps đô thị"
+
+msgid "USGS Topographic Maps"
+msgstr "USGS địa hình Maps"
+
+msgid "USGS Large Scale Imagery"
+msgstr "USGS mô lớn Imagery"
+
 msgid "TIGER 2012 Roads Overlay"
-msgstr ""
+msgstr "TIGER 2012 Đường Overlay"
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
-msgstr ""
+msgstr "MassGIS L3 Bưu kiện"
 
 msgid "NC Latest Orthoimagery"
-msgstr ""
+msgstr "NC Orthoimagery mới nhất"
 
 msgid "U.S. Forest Service roads"
-msgstr ""
+msgstr "Lâm nghiệp Hoa Kỳ con đường"
 
 msgid "Ukraine - Orthophotomaps 2012"
-msgstr ""
+msgstr "Ukraine - Orthophotomaps 2012"
 
 msgid "7th Series (OS7)"
-msgstr ""
+msgstr "Series 7 (OS7)"
 
 msgid "OS New Popular Edition historic"
-msgstr ""
+msgstr "hệ điều hành mới Popular bản lịch sử"
 
 msgid "OS OpenData StreetView"
-msgstr ""
+msgstr "OS OpenData StreetView"
 
 msgid "OS OpenData Locator"
-msgstr ""
+msgstr "OS OpenData Locator"
 
 msgid "Surrey Air Survey"
-msgstr ""
+msgstr "Air Khảo sát Surrey"
 
 msgid "NLS - OS 6-inch Scotland 1842-82"
-msgstr ""
+msgstr "NLS - OS 6-inch Scotland 1842-1882"
 
 msgid "NLS - OS 1:25k 1st Series 1937-61"
-msgstr ""
+msgstr "NLS - OS 1: 25k 1 series 1937-1961"
 
 msgid "NLS - OS 1-inch 7th Series 1955-61"
-msgstr ""
+msgstr "NLS - OS 1-inch 7 series 1955-1961"
 
 msgid "OS 1:25k historic (OSM-Best)"
-msgstr ""
+msgstr "hệ điều hành 1: 25k lịch sử (OSM-Best)"
 
 msgid "OS 1:25k historic (OSM-Limited)"
-msgstr ""
+msgstr "hệ điều hành 1: 25k lịch sử (OSM-Limited)"
 
 msgid "OS Scottish Popular historic"
-msgstr ""
+msgstr "OS Scotland Popular lịch sử"
 
 msgid "NLS - Bartholomew Half Inch, 1897-1907"
-msgstr ""
+msgstr "NLS - Bartholomew Nửa Inch, 1897-1907"
 
 msgid "OS Town Plans, Aberdeen 1866-1867 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Aberdeen 1866-1867 (NLS)"
 
 msgid "OS Town Plans, Airdrie 1858 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Airdrie 1858 (NLS)"
 
 msgid "OS Town Plans, Alexandria 1859 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Alexandria 1859 (NLS)"
 
 msgid "OS Town Plans, Alloa 1861-1862 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Alloa 1861-1862 (NLS)"
 
 msgid "OS Town Plans, Annan 1859 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Annan 1859 (NLS)"
 
 msgid "OS Town Plans, Arbroath 1858 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Arbroath 1858 (NLS)"
 
 msgid "OS Town Plans, Ayr 1855 (NLS)"
-msgstr ""
+msgstr "hệ điều hành kế hoạch Town, Ayr 1855 (NLS)"
 
 msgid "OS Town Plans, Berwick-upon-Tweed 1852 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Berwick-upon-Tweed 1852 (NLS)"
 
 msgid "OS Town Plans, Brechin 1862 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Brechin 1862 (NLS)"
 
 msgid "OS Town Plans, Burntisland 1894 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Burntisland 1894 (NLS)"
 
 msgid "OS Town Plans, Campbelton 1865 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Campbelton 1865 (NLS)"
 
 msgid "OS Town Plans, Coatbridge 1858 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Coatbridge 1858 (NLS)"
 
 msgid "OS Town Plans, Cupar 1854 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Cupar 1854 (NLS)"
 
 msgid "OS Town Plans, Cupar 1893-1894 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Cupar 1893-1894 (NLS)"
 
 msgid "OS Town Plans, Dalkeith 1852 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Dalkeith 1852 (NLS)"
 
 msgid "OS Town Plans, Dalkeith 1893 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Dalkeith năm 1893 (NLS)"
 
 msgid "OS Town Plans, Dumbarton 1859 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Dumbarton 1859 (NLS)"
 
 msgid "OS Town Plans, Dumfries 1850 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Dumfries 1850 (NLS)"
 
 msgid "OS Town Plans, Dumfries 1893 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Dumfries năm 1893 (NLS)"
 
 msgid "OS Town Plans, Dundee 1857-1858 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Dundee 1857-1858 (NLS)"
 
 msgid "OS Town Plans, Dundee 1870-1872 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Dundee 1870-1872 (NLS)"
 
 msgid "OS Town Plans, Dunfermline 1854 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Dunfermline 1854 (NLS)"
 
 msgid "OS Town Plans, Dunfermline 1894 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Dunfermline 1894 (NLS)"
 
 msgid "OS Town Plans, Edinburgh 1849-1851 (NLS)"
-msgstr ""
+msgstr "hệ điều hành kế hoạch Town, Edinburgh 1849-1851 (NLS)"
 
 msgid "OS Town Plans, Edinburgh 1876-1877 (NLS)"
-msgstr ""
+msgstr "hệ điều hành kế hoạch Town, Edinburgh 1876-1877 (NLS)"
 
 msgid "OS Town Plans, Edinburgh 1893-1894 (NLS)"
-msgstr ""
+msgstr "hệ điều hành kế hoạch Town, Edinburgh 1893-1894 (NLS)"
 
 msgid "OS Town Plans, Elgin 1868 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Elgin 1868 (NLS)"
 
 msgid "OS Town Plans, Falkirk 1858-1859 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Falkirk 1858-1859 (NLS)"
 
 msgid "OS Town Plans, Forfar 1860-1861 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Forfar 1860-1861 (NLS)"
 
 msgid "OS Town Plans, Forres 1868 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Forres 1868 (NLS)"
 
 msgid "OS Town Plans, Galashiels 1858 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Galashiels 1858 (NLS)"
 
 msgid "OS Town Plans, Girvan 1857 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Girvan 1857 (NLS)"
 
 msgid "OS Town Plans, Glasgow 1857-1858 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Glasgow 1857-1858 (NLS)"
 
 msgid "OS Town Plans, Glasgow 1892-1894 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Glasgow 1892-1894 (NLS)"
 
 msgid "OS Town Plans, Greenock 1857 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Greenock 1857 (NLS)"
 
 msgid "OS Town Plans, Haddington 1853 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Haddington 1853 (NLS)"
 
 msgid "OS Town Plans, Haddington 1893 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Haddington năm 1893 (NLS)"
 
 msgid "OS Town Plans, Hamilton 1858 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Hamilton 1858 (NLS)"
 
 msgid "OS Town Plans, Hawick 1857-1858 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Hawick 1857-1858 (NLS)"
 
 msgid "OS Town Plans, Inverness 1867-1868 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Inverness 1867-1868 (NLS)"
 
 msgid "OS Town Plans, Irvine 1859 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Irvine 1859 (NLS)"
 
 msgid "OS Town Plans, Jedburgh 1858 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Jedburgh 1858 (NLS)"
 
 msgid "OS Town Plans, Kelso 1857 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Kelso 1857 (NLS)"
 
 msgid "OS Town Plans, Kilmarnock 1857-1859 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Kilmarnock 1857-1859 (NLS)"
 
 msgid "OS Town Plans, Kirkcaldy 1855 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Kirkcaldy 1855 (NLS)"
 
 msgid "OS Town Plans, Kirkcaldy 1894 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Kirkcaldy 1894 (NLS)"
 
 msgid "OS Town Plans, Kirkcudbright 1850 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Kirkcudbright 1850 (NLS)"
 
 msgid "OS Town Plans, Kirkcudbright 1893 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Kirkcudbright năm 1893 (NLS)"
 
 msgid "OS Town Plans, Kirkintilloch 1859 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Kirkintilloch 1859 (NLS)"
 
 msgid "OS Town Plans, Kirriemuir 1861 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Kirriemuir 1861 (NLS)"
 
 msgid "OS Town Plans, Lanark 1858 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Lanark 1858 (NLS)"
 
 msgid "OS Town Plans, Linlithgow 1856 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Linlithgow 1856 (NLS)"
 
 msgid "OS Town Plans, Mayole 1856-1857 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Mayole 1856-1857 (NLS)"
 
 msgid "OS Town Plans, Montrose 1861-1862 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Montrose 1861-1862 (NLS)"
 
 msgid "OS Town Plans, Musselburgh 1853 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Musselburgh 1853 (NLS)"
 
 msgid "OS Town Plans, Musselburgh 1893 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Musselburgh năm 1893 (NLS)"
 
 msgid "OS Town Plans, Nairn 1867-1868 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Nairn 1867-1868 (NLS)"
 
 msgid "OS Town Plans, Oban 1867-1868 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Oban 1867-1868 (NLS)"
 
 msgid "OS Town Plans, Peebles 1856 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Peebles 1856 (NLS)"
 
 msgid "OS Town Plans, Perth 1860 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Perth 1860 (NLS)"
 
 msgid "OS Town Plans, Peterhead 1868 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Peterhead 1868 (NLS)"
 
 msgid "OS Town Plans, Port Glasgow 1856-1857 (NLS)"
-msgstr ""
+msgstr "hệ điều hành kế hoạch Town, Port Glasgow 1856-1857 (NLS)"
 
 msgid "OS Town Plans, Portobello 1893-1894 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Portobello 1893-1894 (NLS)"
 
 msgid "OS Town Plans, Rothesay 1862-1863 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Rothesay 1862-1863 (NLS)"
 
 msgid "OS Town Plans, Selkirk 1865 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Selkirk 1865 (NLS)"
 
 msgid "OS Town Plans, St Andrews 1854 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, St Andrews 1854 (NLS)"
 
 msgid "OS Town Plans, St Andrews 1893 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, St Andrews năm 1893 (NLS)"
 
 msgid "OS Town Plans, Stirling 1858 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Stirling 1858 (NLS)"
 
 msgid "OS Town Plans, Stonehaven 1864 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Stonehaven 1864 (NLS)"
 
 msgid "OS Town Plans, Stranraer 1847 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Stranraer 1847 (NLS)"
 
 msgid "OS Town Plans, Stranraer 1863-1877 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Stranraer 1863-1877 (NLS)"
 
 msgid "OS Town Plans, Stranraer 1893 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Stranraer năm 1893 (NLS)"
 
 msgid "OS Town Plans, Strathaven 1858 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Strathaven 1858 (NLS)"
 
 msgid "OS Town Plans, Wick 1872 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Wick 1872 (NLS)"
 
 msgid "OS Town Plans, Wigtown 1848 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Wigtown 1848 (NLS)"
 
 msgid "OS Town Plans, Wigtown 1894 (NLS)"
-msgstr ""
+msgstr "OS Town Kế hoạch, Wigtown 1894 (NLS)"
 
 msgid "Landsat 233055"
-msgstr ""
+msgstr "Landsat 233.055"
 
 msgid ""
 "Group common Address Interpolation inputs in a single dialog, as well as an "
 "option to automatically generate individual house number nodes from a Way."
 msgstr ""
+"Nhóm chung Địa chỉ Interpolation đầu vào trong một hộp thoại duy nhất, cũng "
+"như mộtTùy chọn để tự động tạo ra các nút số nhà lẻ từ một Way."
 
 msgid ""
 "Makes a pair of selected way segments parallel by rotating one of them "
 "around a chosen pivot."
 msgstr ""
+"Làm cho một cặp chọn đoạn đường song song bằng cách xoay một trong số họXung "
+"quanh một trục lựa chọn."
 
 msgid ""
 "Allows selection of areas in an layer and automatic creation of a way as "
 "polygon. Built to ease mapping of building from background layers. Optimized "
 "for basemap.at."
 msgstr ""
+"Cho phép lựa chọn các khu vực trong một lớp và tự động tạo ra một cách làĐa "
+"giác. Được thiết kế để dễ dàng lập bản đồ xây dựng từ lớp nền. Tối ưu hóaCho "
+"basemap.at."
 
 msgid "Tools for drawing buildings."
-msgstr ""
+msgstr "Công cụ cho các tòa nhà vẽ."
 
 msgid "A special handler for the French land registry WMS server."
-msgstr ""
+msgstr "Một trình xử lý đặc biệt cho đăng ký đất Pháp WMS server."
 
 msgid ""
 "Overlays the canvec tile grid on the map and prints URL''s to the .zip "
 "files. Future goals: allow auto-downloading and loading of canvec .osm files"
 msgstr ""
+"Overlays the canvec tile grid on the map and prints URL''s to the .zip "
+"files. Future goals: allow auto-downloading and loading of canvec .osm files"
 
 msgid ""
 "Allows the user to create different color schemes and to switch between "
@@ -14969,160 +16408,206 @@ msgid ""
 "white background with matching colors for better visibility in bright "
 "sunlight. See dialog in display preferences."
 msgstr ""
+"Cho phép người sử dụng để tạo ra màu khác nhau và chuyển đổi giữa cácChúng. "
+"Chỉ cần thay đổi màu sắc và tạo ra một kế hoạch mới. Được sử dụng để chuyển "
+"sang mộtBackground màu trắng với màu sắc phù hợp cho khả năng hiển thị tốt "
+"hơn trong sángÁnh sáng mặt trời. Xem thoại trong tùy chọn màn hình hiển thị."
 
 msgid ""
 "Imports proprietary CSV files of the Columbus/Visiontac V-900 GPS logger "
 "into a GPX layer."
 msgstr ""
+"Nhập khẩu độc quyền các tập tin CSV của logger Columbus / Visiontac V-900 "
+"GPSVào một lớp GPX."
 
 msgid ""
 "Implements a command line and enables to create your commands. See link for "
 "standard commands (arc, circle etc.)"
 msgstr ""
+"Thực hiện một dòng lệnh và cho phép tạo ra các lệnh của bạn. Xem liên kết "
+"choLệnh chuẩn (arc, hình tròn vv)"
 
-msgid "(Warning: Experimental!) Tool for conflating (merging) data."
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
 msgstr ""
 
+msgid "(Warning: Experimental!) Tool for conflating (merging) data."
+msgstr "(Cảnh báo: Thử nghiệm!) Công cụ cho conflating (sáp nhập) dữ liệu."
+
 msgid "Create a grid of ways."
-msgstr ""
+msgstr "Tạo một mạng lưới các cách khác nhau."
 
 msgid ""
 "Creating and handling address nodes and buildings within Czech Republic."
-msgstr ""
+msgstr "Tạo ra và xử lý các nút địa chỉ và các tòa nhà trong Cộng hòa Séc."
 
 msgid ""
 "Allows to import various file formats into JOSM directly. Currently "
 "supported: TangoGPS, Garmin Trainings Center TCX."
 msgstr ""
+"Cho phép nhập khẩu các định dạng tập tin khác nhau vào JOSM trực tiếp. Hiện "
+"nayHỗ trợ: TangoGPS, Garmin Đào tạo Trung tâm TCX."
 
 msgid "Download your GPX tracks from openstreetmap.org"
-msgstr ""
+msgstr "Tải bài hát GPX của bạn từ openstreetmap.org"
 
 msgid ""
 "This plugin directly upload GPS Traces from current active layer in JOSM to "
 "openstreetmap.org."
 msgstr ""
+"Plugin này trực tiếp tải lên vết GPS từ lớp đang hoạt động hiện tại JOSM "
+"tớiOpenstreetmap.org."
 
 msgid "Downloads OSM data along a way"
-msgstr ""
+msgstr "tải dữ liệu OSM dọc theo một con đường"
 
 msgid ""
 "Allows the user to anonymize timestamps and delete parts of huge GPX tracks "
 "very fast."
 msgstr ""
+"Cho phép người sử dụng để ẩn tên timestamps và xóa các phần của bài hát GPX "
+"khổng lồRất nhanh."
 
 msgid "Shows the elevation profile and some statistical data of a GPX track."
 msgstr ""
+"Hiển thị hồ sơ cá nhân cao và một số dữ liệu thống kê của một ca khúc GPX."
 
 msgid "Handling of French EPCIs (boundary=local_authority)"
-msgstr ""
+msgstr "Xử lý EPCIs Pháp (ranh giới = local_authority)"
 
 msgid "Use external scripts in JOSM"
-msgstr ""
+msgstr "Sử dụng kịch bản bên ngoài trong JOSM"
 
 msgid "Fast drawing ways by mouse"
-msgstr ""
+msgstr "cách vẽ nhanh bằng chuột"
 
 msgid "Finds and fixes invalid street addresses in a comfortable way."
 msgstr ""
+"Tìm kiếm và sửa chữa các địa chỉ đường phố không hợp lệ một cách thoải mái."
 
 msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
 msgstr ""
+"Nói chuyện với người sử dụng chỉnh sửa bản đồ gần đó, được thông báo khi có "
+"người đến gần."
 
 msgid ""
 "Provides parts of the GeoTools library for other JOSM plugins. Not meant to "
 "be installed directly by users, but rather as a dependency for other plugins."
 msgstr ""
+"Cung cấp các bộ phận của thư viện GeoTools cho plugins JOSM khác. Không có "
+"nghĩa là đểĐược cài đặt trực tiếp bởi người sử dụng, mà là một sự phụ thuộc "
+"cho các plugin khác."
 
 msgid ""
 "Download GPS points from Globalsat dg100 data logger directly in JOSM."
-msgstr ""
+msgstr "Tải điểm GPS Globalsat từ dữ liệu dg100 logger trực tiếp trong JOSM."
 
 msgid ""
 "Analyse a set of GPS points to obtain its centre and direction of spread."
 msgstr ""
+"Phân tích một tập hợp các điểm GPS để có được trung tâm và hướng lây lan của "
+"nó."
 
 msgid "Allows to filter out unnecessary GPS tracks"
-msgstr ""
+msgstr "Cho phép để lọc ra các đường GPS không cần thiết"
 
 msgid "Visualizes routing information as a routing graph."
-msgstr ""
+msgstr "hình dung thông tin định tuyến như một đồ thị định tuyến."
 
 msgid "Simple tool to tag house numbers."
-msgstr ""
+msgstr "công cụ đơn giản để gắn thẻ số nhà."
 
 msgid "Generate Imagery XML bounds from a multipolygon"
-msgstr ""
+msgstr "Tạo Hình ảnh giới hạn XML từ một multipolygon"
 
 msgid ""
 "Database of imagery offsets: share and aquire imagery offsets with one "
 "button."
 msgstr ""
+"Cơ sở dữ liệu của offsets hình ảnh: chia sẻ hình ảnh và aquire offsets với "
+"mộtNút"
 
 msgid "WMSPlugin-style imagery adjustment mapmode"
-msgstr ""
-
-msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
+msgstr "điều chỉnh hình ảnh theo phong cách WMSPlugin mapmode"
 
 msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
 msgstr ""
+"Plugin khác để phù hợp với hình ảnh đến các điểm tọa độ trong một tập tin "
+"GPX. Một trận đấu làThực hiện khi các '' tên '', '' cmt '' hoặc '' desc '' "
+"thuộc tính của một thẻ waypointPhù hợp với tên tập tin của hình ảnh."
 
 msgid "Plugin for importing spatial referenced images"
-msgstr ""
+msgstr "Plugin cho nhập khẩu hình ảnh tham chiếu không gian"
 
 msgid "Import vector graphics (SVG)"
-msgstr ""
+msgstr "đồ họa vector nhập (SVG)"
 
 msgid ""
 "Extra information about current layer objects pop ups - currently GPX "
 "trackpoint info"
 msgstr ""
+"Thông tin thêm về lớp hiện các đối tượng cửa sổ pop up - hiện GPXThông tin "
+"trackpoint"
 
 msgid "A helper for IRS satellite adjustment."
-msgstr ""
+msgstr "Một helper cho điều chỉnh vệ tinh IRS."
 
 msgid ""
 "Provides Java Native Access (JNA) library. Not meant to be installed "
 "directly by users, but rather as a dependency for other plugins."
 msgstr ""
+"Cung cấp truy cập Java Native (JNA) thư viện. Không có nghĩa là để được cài "
+"đặtTrực tiếp bởi người sử dụng, mà là một sự phụ thuộc cho các plugin khác."
 
 msgid ""
 "Provides Java Topology Suite (JTS) library and related utilities. Not meant "
 "to be installed directly by users, but rather as a dependency for other "
 "plugins."
 msgstr ""
+"Cung cấp Java Topology Suite (JTS) tiện ích thư viện và có liên quan. Không "
+"có nghĩa làPhải được cài đặt trực tiếp bởi người sử dụng, mà là một sự phụ "
+"thuộc hộPlugins"
 
 msgid ""
 "creates a channel digraph and checks a subset of channels if it is a "
 "junction or searches in a subset of channels for junctions"
 msgstr ""
+"Tạo ra một digraph kênh và kiểm tra một tập hợp con của các kênh nếu nó là "
+"mộtNgã ba hoặc tìm kiếm trong một tập hợp con của các kênh truyền hình cho "
+"nút giao thông"
 
 msgid "Helps vectorizing WMS images."
-msgstr ""
+msgstr "Giúp vectorizing WMS hình ảnh."
 
 msgid ""
 "Support live GPS input (moving dot) through a connection to gpsd server."
 msgstr ""
+"Hỗ trợ trực tiếp đầu vào GPS (di chuyển dot) thông qua một kết nối đến máy "
+"chủ gpsd."
 
 msgid ""
 "Provides the Log4j library for other JOSM plugins. Not meant to be installed "
 "directly by users, but rather as a dependency for other plugins."
 msgstr ""
+"Cung cấp các thư viện Log4j cho plugins JOSM khác. Không có nghĩa là để được "
+"cài đặtTrực tiếp bởi người sử dụng, mà là một sự phụ thuộc cho các plugin "
+"khác."
 
 msgid ""
 "The MapDust Plug-In shows the MapDust bug reports on the map. You can "
 "create, close,invalidate, re-open and comment bug reports by using this "
 "plugin."
 msgstr ""
+"Các MapDust Plug-In cho thấy các báo cáo lỗi MapDust trên bản đồ. Bạn có "
+"thểTạo ra, gần gũi, làm mất hiệu lực, mở lại và nhận xét các báo cáo lỗi này "
+"bằng cách sử dụngCắm vào."
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15130,3755 +16615,3959 @@ msgid ""
 "segments, area surrounded by a (simple) closed way and create measurement "
 "paths (which also can be imported from a gps layer)."
 msgstr ""
+"Cung cấp một hộp thoại đo lường và một lớp để đo chiều dài và góc củaPhân "
+"đoạn, khu vực được bao quanh bởi một (đơn giản) đóng cửa cách và tạo đo "
+"lườngCon đường (mà cũng có thể được nhập khẩu từ một lớp gps)."
 
 msgid "Merge overlapping part of ways."
-msgstr ""
+msgstr "Merge chồng chéo một phần của cách."
 
 msgid "Adds no left turn for sets of 4 or 5 ways"
-msgstr ""
-
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
+msgstr "thêm không rẽ trái cho bộ 4 hoặc 5 cách"
 
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr ""
+"Cho phép gán thẻ cho tất cả các đối tượng trong bất kỳ khu vực được lựa chọn "
+"cùng một lúc"
 
 msgid "NanoLog adjustment and browsing layer"
-msgstr ""
+msgstr "NanoLog điều chỉnh và trình duyệt lớp"
 
 msgid ""
 "Use your system''s password manager to store the API username and password. "
 "(KWallet and gnome-keyring are supported.)"
 msgstr ""
+"Sử dụng hệ thống của bạn đang quản lý mật khẩu để lưu trữ tên người dùng và "
+"mật khẩu API.(KWallet và gnome-keyring được hỗ trợ.)"
 
 msgid ""
 "Disallow using JOSM forever (WARNING: this plugin prevents JOSM from loading "
 "and is hard to rid of)"
 msgstr ""
+"Không cho phép sử dụng JOSM mãi mãi (WARNING: plugin này ngăn cản từ JOSM "
+"tảiVà rất khó để thoát khỏi)"
 
 msgid "Convert data from Open Data portals to OSM layer"
-msgstr ""
+msgstr "Chuyển đổi dữ liệu từ dữ liệu mở cổng thông tin để lớp OSM"
 
 msgid "extended options for editing opening_hours"
-msgstr ""
+msgstr "mở rộng các tùy chọn cho opening_hours chỉnh sửa"
 
 msgid ""
 "Allows opening gpx/osm files that intersect the currently visible screen area"
 msgstr ""
+"Cho phép mở GPX / file OSM giao với phần diện tích màn hình hiện thời hiển "
+"thị"
 
 msgid ""
 "Launches FireFox to display the current visible screen as a nice SVG image."
 msgstr ""
+"Ra mắt FireFox để hiển thị màn hình hiển thị hiện như một hình ảnh SVG tốt "
+"đẹp."
 
 msgid ""
 "Bring in errors from Osm Inspector and display it on the current JOSM "
 "bounding box"
 msgstr ""
+"Mang trong các lỗi từ OSM Thanh tra và hiển thị nó trên JOSM hiện tạiKhung "
+"giới hạn"
 
 msgid ""
 "Recommends categories/tags on newly created OSM entities by analysing "
 "spatial entities into training features and using SVM classification"
 msgstr ""
+"Khuyến nghị loại / thẻ trên thực thể OSM mới được tạo ra bằng cách phân "
+"tíchThực thể không gian vào các tính năng đào tạo và sử dụng SVM phân loại"
 
 msgid "Import/export OSM data in PBF format"
-msgstr ""
+msgstr "Nhập / xuất dữ liệu OSM ở định dạng PBF"
 
 msgid "Import PDF file and convert to ways."
-msgstr ""
+msgstr "Nhập tập tin PDF và chuyển đổi sang cách khác nhau."
 
 msgid ""
 "Write gps position info to the image file header. Run this feature from the "
 "right click menu of the image layer."
 msgstr ""
+"Viết gps thông tin vị trí để đầu tập tin hình ảnh. Chạy tính năng này từMenu "
+"chuột phải của lớp hình ảnh."
 
 msgid "Make photos movable and position them on the map."
-msgstr ""
+msgstr "Làm cho bức ảnh chuyển động và vị trí của chúng trên bản đồ."
 
 msgid ""
 "This plugin allows to display any picture as a background in the editor and "
 "align it with the map."
 msgstr ""
+"Plugin này cho phép hiển thị bất kỳ hình ảnh như là một nền tảng trong các "
+"biên tập viên vàAlign nó với bản đồ."
 
 msgid "The great JGoodies Plastic Look and Feel."
-msgstr ""
+msgstr "JGoodies lớn Look nhựa và Feel."
 
 msgid ""
 "Shows an additional information about point on map. There is only a Czech "
 "RUIAN module available at this moment."
 msgstr ""
+"Cho thấy một thông tin bổ sung về điểm trên bản đồ. Chỉ có một CzechRuian mô-"
+"đun có sẵn tại thời điểm này."
 
 msgid "Read and write osmosis poly filter files"
-msgstr ""
+msgstr "Đọc và ghi tập tin lọc thẩm thấu poly"
 
 msgid "Adds map printing to JOSM"
-msgstr ""
+msgstr "Thêm in ấn bản đồ để JOSM"
 
 msgid "adds projections from Proj4J"
-msgstr ""
+msgstr "thêm dự từ Proj4J"
 
 msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr ""
+"Plugin này giúp đơn giản hoá việc lập bản đồ và chỉnh sửa các tuyến đường "
+"giao thông công cộng."
 
-msgid "Relation and multipolygon creating and editing panel."
+msgid "Displays stops of selected public transport routes as graph"
 msgstr ""
 
-msgid "Plugin for reverting changesets"
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
 msgstr ""
 
+msgid "Relation and multipolygon creating and editing panel."
+msgstr "Mối quan hệ và multipolygon tạo và chỉnh sửa bảng điều khiển."
+
+msgid "Plugin for reverting changesets"
+msgstr "Plugin cho quay trở changesets"
+
 msgid ""
 "Plugin for tagging of objects based on a selection of road signs. The dialog "
 "can be opened by clicking a small icon in the upper right corner of the "
 "properties window. Available country presets: Belgium, Germany, Poland, "
 "Slovakia, Spain."
 msgstr ""
+"Plugin cho gắn thẻ của các đối tượng dựa trên sự lựa chọn của các dấu hiệu "
+"đường bộ. Hộp thoạiCó thể được mở bằng cách nhấp chuột vào một biểu tượng "
+"nhỏ ở góc trên bên phải của. Cửa sổ thuộc tính cài đặt trước đất nước có "
+"sẵn: Bỉ, Đức, Ba Lan,Slovakia, Tây Ban Nha."
 
 msgid ""
 "Renders routes (bus, hiking trails, bicycle routes, ..). Route types must be "
 "defined in routes.xml file in plugin directory"
 msgstr ""
+"Hiển thị hình các tuyến đường (xe buýt, đường mòn đi bộ đường dài, đường xe "
+"đạp, ..). Loại Route phảiĐịnh nghĩa trong file routes.xml trong thư mục "
+"plugin"
 
 msgid "Provides routing capabilities."
-msgstr ""
+msgstr "Cung cấp khả năng định tuyến."
 
 msgid "Loads data from SDS"
-msgstr ""
+msgstr "Tải dữ liệu từ SDS"
 
 msgid "Imagery Layer for Sea Charts"
-msgstr ""
+msgstr "Hình tượng Layer biển Charts"
 
 msgid "Edit features for Sea Charts"
-msgstr ""
+msgstr "Chỉnh sửa các tính năng cho Sea Charts"
 
 msgid ""
 "Simplify area by removing nodes on very obtuse angles. This can be "
 "constrained by maximum removed area size. Also average nearby nodes."
 msgstr ""
+"Đơn giản hóa khu vực bằng cách loại bỏ các nút trên góc độ rất chậm hiểu. "
+"Điều này có thể đượcHạn chế bởi kích thước diện tích loại bỏ tối đa. Ngoài "
+"ra các nút trung bình gần đó."
 
 msgid "Edit features for OpenSeaMap"
+msgstr "Chỉnh sửa các tính năng cho OpenSeaMap"
+
+msgid "Allows to draw splines"
 msgstr ""
 
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
 msgstr ""
+"Cho phép chỉnh sửa thông tin giao thông và xuất khẩu nó vào tính di động đô "
+"thịSimulator SUMO"
 
 msgid "Allow adding markers/nodes on current gps positions."
-msgstr ""
+msgstr "Cho phép thêm dấu / nút trên vị trí gps hiện tại."
 
 msgid ""
 "Launch browser to a Web resource about a selected object having known tags, "
 "such as Wikipedia"
 msgstr ""
+"Trình duyệt Launch đến một tài nguyên Web về một đối tượng được chọn có thẻ "
+"gọi,Như Wikipedia"
 
 msgid "Provides a dialog for editing tags in a tabular grid."
-msgstr ""
+msgstr "Cung cấp một hộp thoại cho bạn soạn trong một lưới dạng bảng."
 
 msgid ""
 "Adds a tagging preset tester to the help menu, which helps you developing of "
 "tagging presets (quick preview of the dialog that will popup). You can start "
 "the jar-file as standalone as well."
 msgstr ""
+"Thêm một thử gắn thẻ cài sẵn menu trợ giúp, giúp bạn phát triển củaGắn thẻ "
+"cài đặt trước (preview nhanh của hộp thoại sẽ bật lên). Bạn có thể bắt "
+"đầuJar-file như độc lập là tốt."
 
 msgid "Make terraced houses out of single blocks."
-msgstr ""
+msgstr "Hãy nhà bậc thang ra khỏi khối duy nhất."
 
 msgid ""
 "Provides helper buttons to allow working with single button mouse (stylus). "
 "Activate by holding T and slip map with left mouse button"
 msgstr ""
+"Cung cấp các nút helper để cho phép làm việc với các nút bấm chuột "
+"(stylus).Kích hoạt bằng cách giữ T và bản đồ trượt với nút chuột trái"
 
 msgid ""
 "Traces buildings from Czech cadastral map. Needs TracerServer (.NET or Mono) "
 "to be running."
 msgstr ""
+"Dấu vết các tòa nhà từ Séc bản đồ địa chính. Nhu cầu TracerServer (NET hay "
+"Mono)Để được chạy."
 
 msgid ""
 "Traces buildings and other shapes from a map. Needs Tracer2Server to be "
 "running."
 msgstr ""
+"Dấu vết các tòa nhà và hình dạng khác từ bản đồ. Nhu cầu Tracer2Server để "
+"đượcChạy"
 
 msgid "Plugin to digital sign OSM-Data"
-msgstr ""
+msgstr "Plugin để dấu hiệu kỹ thuật số OSM-Data"
 
 msgid ""
 "Provides a straightforward GUI for adding, editing and deleting turn lanes."
 msgstr ""
+"Cung cấp một giao diện đơn giản để thêm, chỉnh sửa và xóa các làn đường rẽ."
 
 msgid ""
 "The turnrestrictions plugin allows to enter maintain information about turn "
 "restrictions in the OpenStreetMap database."
 msgstr ""
+"Các turnrestrictions plugin cho phép để vào duy trì thông tin về lần lượtHạn "
+"chế trong các cơ sở dữ liệu OpenStreetMap."
 
 msgid "Allows undeleting object from OSM database"
-msgstr ""
+msgstr "Cho phép đối tượng undeleting từ cơ sở dữ liệu OSM"
 
 msgid "Several utilities that make your life easier."
-msgstr ""
+msgstr "Một số tiện ích mà làm cho cuộc sống của bạn dễ dàng hơn."
 
 msgid ""
 "(This Plugin is currently work in progress!!!) Links and syncs a "
 "georeferenced video against a GPS track, to use it for identify visible "
 "objects."
 msgstr ""
+"(Plugin này hiện đang làm việc trong tiến !!!) Liên kết và đồng bộ mộtVideo "
+"tham chiếu địa lý chống lại một ca khúc GPS, sử dụng nó để xác định rõ "
+"ràngĐối tượng"
 
 msgid ""
 "Supports downloading tiled, scanned maps from walking-papers.org. This "
 "plugin is still under early development and may be buggy."
 msgstr ""
+"Hỗ trợ tải lát gạch, bản đồ quét từ walking-papers.org. Điều nàyPlugin vẫn "
+"còn đang được phát triển ban đầu và có thể là lỗi."
 
 msgid "Easy downloading along a long set of interconnected ways"
-msgstr ""
+msgstr "Dễ dàng tải về cùng một tập dài của cách kết nối với nhau"
 
 msgid "Enables searching for waypoint imported from gpx file."
-msgstr ""
-
-msgid "Select a sequence of non-branching connected ways"
-msgstr ""
+msgstr "Cho phép tìm kiếm các điểm tham chiếu được nhập khẩu từ tập tin GPX."
 
 msgid "Simplifies linking OSM objects to Wikipedia articles"
-msgstr ""
+msgstr "Đơn giản hóa kết nối các đối tượng OSM đến các bài viết Wikipedia"
 
 msgid ""
 "Drive a race car from point A to point B over aerial imagery, leave cacti "
 "behind."
 msgstr ""
+"Lái xe một chiếc xe đua từ điểm A đến điểm B trên hình ảnh trên không, để "
+"lại xương rồngĐằng sau."
 
 msgid "Surface"
-msgstr ""
+msgstr "Bề mặt"
 
 msgid "paved"
-msgstr ""
+msgstr "lát"
 
 msgid "unpaved"
-msgstr ""
+msgstr "không trải nhựa"
 
 msgid "asphalt"
-msgstr ""
+msgstr "nhựa đường"
 
 msgid "concrete"
-msgstr ""
+msgstr "bê tông"
 
 msgid "metal"
-msgstr ""
+msgstr "kim loại"
 
 msgid "wood"
-msgstr ""
+msgstr "gỗ"
 
 msgid "paving_stones"
-msgstr ""
+msgstr "paving_stones"
 
 msgid "cobblestone"
-msgstr ""
+msgstr "đá sỏi"
 
 msgid "gravel"
-msgstr ""
+msgstr "sỏi"
 
 msgid "pebblestone"
-msgstr ""
+msgstr "đá cuội"
 
 msgid "compacted"
-msgstr ""
+msgstr "đầm"
 
 msgid "grass_paver"
-msgstr ""
+msgstr "grass_paver"
 
 msgid "grass"
-msgstr ""
+msgstr "cỏ"
 
 msgid "sand"
-msgstr ""
+msgstr "cát"
 
 msgid "ground"
-msgstr ""
+msgstr "mặt đất"
 
 msgid "sett"
-msgstr ""
+msgstr "Cài"
 
 msgid "Smoothness"
-msgstr ""
+msgstr "Smoothness"
 
 msgid "excellent"
-msgstr ""
+msgstr "tuyệt vời"
 
 msgid "Thin Rollers: rollerblade, skateboard"
-msgstr ""
+msgstr "Rollers Thin: Rollerblade, ván trượt"
 
 msgid "good"
-msgstr ""
+msgstr "tốt"
 
 msgid "Thin Wheels: racing bike"
-msgstr ""
+msgstr "Thin Wheels: đua xe đạp"
 
 msgid "intermediate"
-msgstr ""
+msgstr "trung gian"
 
 msgid "Wheels: city bike, wheelchair, scooter"
-msgstr ""
+msgstr "Bánh xe: xe đạp thành phố, xe lăn, xe tay ga"
 
 msgid "bad"
-msgstr ""
+msgstr "xấu"
 
 msgid "Robust Wheels: trekking bike, car, rickshaw"
-msgstr ""
+msgstr "Wheels mạnh mẽ: trekking xe đạp, xe hơi, xe kéo"
 
 msgid "very_bad"
-msgstr ""
+msgstr "very_bad"
 
 msgid "High Clearance: light duty off-road vehicle"
-msgstr ""
+msgstr "High Clearance: nhiệm vụ ánh sáng off-road xe"
 
 msgid "horrible"
-msgstr ""
+msgstr "khủng khiếp"
 
 msgid "Off-Road: heavy duty off-road vehicle"
-msgstr ""
+msgstr "Off-Road: nhiệm vụ nặng nề off-road xe"
 
 msgid "very_horrible"
-msgstr ""
+msgstr "very_horrible"
 
 msgid "Specialized off-road: tractor, ATV"
-msgstr ""
+msgstr "chuyên ngành off-road: máy kéo, ATV"
 
 msgid "impassable"
-msgstr ""
+msgstr "không thể vượt qua"
 
 msgid "No wheeled vehicle"
-msgstr ""
+msgstr "Không có chiếc xe bánh"
 
 msgctxt "riding"
 msgid "pitch"
-msgstr ""
+msgstr "pitch"
 
 msgctxt "riding"
 msgid "sports_centre"
-msgstr ""
+msgstr "sports_centre"
 
 msgctxt "riding"
 msgid "stadium"
-msgstr ""
+msgstr "sân vận động"
 
 msgctxt "riding"
 msgid "track"
-msgstr ""
+msgstr "theo dõi"
 
 msgid "clay"
-msgstr ""
+msgstr "đất sét"
 
 msgid "dirt"
-msgstr ""
+msgstr "bẩn"
 
 msgid "fine_gravel"
-msgstr ""
+msgstr "fine_gravel"
 
 msgid "mud"
-msgstr ""
+msgstr "bùn"
 
 msgid "Lanes"
-msgstr ""
+msgstr "Làn đường"
 
 msgid "Max. speed (km/h)"
-msgstr ""
+msgstr "Max. Tốc độ (km / h)"
 
 msgid "Bridge"
-msgstr ""
+msgstr "Bridge"
 
 msgid "Tunnel"
-msgstr ""
+msgstr "Tunnel"
 
 msgid "Cutting"
-msgstr ""
+msgstr "Cắt"
 
 msgid "Embankment"
-msgstr ""
+msgstr "Kè"
 
 msgid "Incline"
-msgstr ""
+msgstr "nghiêng"
 
 msgid "10%"
-msgstr ""
+msgstr "10%"
 
 msgid "-10%"
-msgstr ""
+msgstr "-10%"
 
 msgid "10°"
-msgstr ""
+msgstr "10 °"
 
 msgid "-10°"
-msgstr ""
+msgstr "-10 °"
 
 msgid "Oneway"
-msgstr ""
+msgstr "OneWay"
 
 msgid "Lit"
-msgstr ""
+msgstr "Lit"
 
 msgid "Width (meters)"
-msgstr ""
+msgstr "Chiều rộng (m)"
 
 msgid "Sidewalk"
-msgstr ""
+msgstr "vỉa hè"
 
 msgctxt "sidewalk"
 msgid "both"
-msgstr ""
+msgstr "cả hai"
 
 msgctxt "sidewalk"
 msgid "left"
-msgstr ""
+msgstr "trái"
 
 msgctxt "sidewalk"
 msgid "right"
-msgstr ""
+msgstr "quyền"
 
 msgctxt "sidewalk"
 msgid "no"
-msgstr ""
+msgstr "không"
 
 msgid "Service type"
-msgstr ""
+msgstr "Loại dịch vụ"
 
 msgid "yard"
-msgstr ""
+msgstr "sân"
 
 msgid "siding"
-msgstr ""
+msgstr "về phe"
 
 msgid "spur"
-msgstr ""
+msgstr "thúc đẩy"
 
 msgid "Electrified"
-msgstr ""
+msgstr "điện"
 
 msgid "contact_line"
-msgstr ""
+msgstr "contact_line"
 
 msgid "no"
-msgstr ""
+msgstr "không"
 
 msgid "yes"
-msgstr ""
+msgstr "yes"
 
 msgid "rail"
-msgstr ""
+msgstr "đường sắt"
 
 msgid "Voltage in Volts (V)"
-msgstr ""
+msgstr "áp trong Volts (V)"
 
 msgid "Frequency in Hertz (Hz)"
-msgstr ""
+msgstr "Tần số trong Hertz (Hz)"
 
 msgid "16.67"
-msgstr ""
+msgstr "16,67"
 
 msgid "16.7"
-msgstr ""
+msgstr "16,7"
 
 msgctxt "railway"
 msgid "Tracks"
-msgstr ""
+msgstr "Tracks"
 
 msgid "Gauge (mm)"
-msgstr ""
+msgstr "đo (mm)"
 
 msgid "Allowed traffic:"
-msgstr ""
+msgstr "Được phép giao thông:"
 
 msgid "Horse"
-msgstr ""
+msgstr "ngựa"
 
 msgid "Motorcycle"
-msgstr ""
+msgstr "xe máy"
 
 msgid "Motorcar"
-msgstr ""
+msgstr "Tô"
 
 msgid "Reference"
-msgstr ""
+msgstr "tham khảo"
 
 msgid "Operator"
-msgstr ""
+msgstr "điều hành"
 
 msgid "Service Times"
-msgstr ""
+msgstr "Dịch vụ Times"
 
 msgid "18:00"
-msgstr ""
+msgstr "18:00"
 
 msgid "sunset,sunrise"
-msgstr ""
+msgstr "hoàng hôn, mặt trời mọc"
 
 msgid "Su 09:30,11:00"
-msgstr ""
+msgstr "Su 09: 30,11: 00"
 
 msgid "Sa,Su,PH 09:00"
-msgstr ""
+msgstr "Sa, Su, PH 09:00"
 
 msgid "Sa 18:00; Su 10:45"
-msgstr ""
+msgstr "Sa 18:00; 10:45 Su"
 
 msgid ""
 "Fr 08:00-18:00; Apr 10-15 off; Jun 07:00-20:00; Aug off; Dec 24 08:00-24:00"
 msgstr ""
+"Cha 08: 00-18: 00; 10-ngày 15 tháng 4 off; Jun 07: 00-20: 00; Aug off; Dec "
+"24 08: 00-24: 00"
 
 msgid "Sa 10:00+"
-msgstr ""
+msgstr "Sa 10: 00+"
 
 msgid "week 1-53/2 Fr 09:00-12:00; week 2-52/2 We 09:00-12:00"
 msgstr ""
+"tuần 1-53 / 2 Fr 09: 00-12: 00; tuần 2-52 / 2 Chúng tôi 09: 00-12: 00"
 
 msgid "Opening Hours"
-msgstr ""
+msgstr "Giờ mở cửa"
 
 msgid "24/7"
-msgstr ""
+msgstr "24/7"
 
 msgid "08:30-12:30,15:30-20:00"
-msgstr ""
+msgstr "08: 30-12: 30,15: 30-20: 00"
 
 msgid "Sa-Su 00:00-24:00"
-msgstr ""
+msgstr "Sa-Su 00: 00-24: 00"
 
 msgid "Mo-Fr 08:30-20:00; Sa,Su 08:00-15:00; PH off"
-msgstr ""
+msgstr "Mo-Fr 08: 30-20: 00; Sa, Su 08: 00-15: 00; PH off"
 
 msgid "Mo-Fr 08:30-20:00, Tu-Su 08:00-15:00; Sa 08:00-12:00"
-msgstr ""
+msgstr "Mo-Fr 08: 30-20: 00, Tu-Su 08: 00-15: 00; Sa 08: 00-12: 00"
 
 msgid ""
 "Mo-Su 08:00-18:00; Apr 10-15 off; Jun 08:00-14:00; Aug off; Dec 25 off"
 msgstr ""
+"Mo-Su 08: 00-18: 00; 10-ngày 15 tháng 4 off; 08 tháng 6: 00-14: 00; Tháng "
+"Tám off; 25 tháng 12 off"
 
 msgid "sunrise-sunset"
-msgstr ""
+msgstr "mặt trời mọc, mặt trời lặn"
 
 msgid "Su 10:00+"
-msgstr ""
+msgstr "Su 10: 00+"
 
 msgid "Wheelchairs"
-msgstr ""
+msgstr "Xe lăn"
 
 msgid "limited"
-msgstr ""
+msgstr "giới hạn"
 
 msgid "Brand"
-msgstr ""
+msgstr "Nhãn hiệu"
 
 msgid "Internet access"
-msgstr ""
+msgstr "truy cập Internet"
 
 msgid "wlan"
-msgstr ""
+msgstr "wlan"
 
 msgid "wired"
-msgstr ""
+msgstr "dây"
 
 msgid "terminal"
-msgstr ""
+msgstr "thiết bị đầu cuối"
 
 msgid "Internet access fee"
-msgstr ""
+msgstr "phí truy cập Internet"
 
 msgid "Smoking"
-msgstr ""
+msgstr "hút"
 
 msgid "dedicated"
-msgstr ""
+msgstr "chuyên dụng"
 
 msgid "separated"
-msgstr ""
+msgstr "tách biệt"
 
 msgid "isolated"
-msgstr ""
+msgstr "cô lập"
 
 msgid "Height (meters)"
-msgstr ""
+msgstr "Chiều cao (m)"
 
 msgid "Max. width (meters)"
-msgstr ""
+msgstr "Max. Chiều rộng (m)"
 
 msgid "Max. height (meters)"
-msgstr ""
+msgstr "Max. chiều cao (m)"
 
 msgid "pitch"
-msgstr ""
+msgstr "pitch"
 
 msgid "sports_centre"
-msgstr ""
+msgstr "sports_centre"
 
 msgid "stadium"
-msgstr ""
+msgstr "sân vận động"
 
 msgid "Sport"
-msgstr ""
+msgstr "Sport"
 
 msgctxt "sport"
 msgid "multi"
-msgstr ""
+msgstr "đa"
 
 msgctxt "sport"
 msgid "archery"
-msgstr ""
+msgstr "bắn cung"
 
 msgctxt "sport"
 msgid "athletics"
-msgstr ""
+msgstr "điền kinh"
 
 msgctxt "sport"
 msgid "american_football"
-msgstr ""
+msgstr "american_football"
 
 msgctxt "sport"
 msgid "australian_football"
-msgstr ""
+msgstr "australian_football"
 
 msgctxt "sport"
 msgid "baseball"
-msgstr ""
+msgstr "bóng chày"
 
 msgctxt "sport"
 msgid "basketball"
+msgstr "bóng rổ"
+
+msgctxt "sport"
+msgid "beachvolleyball"
 msgstr ""
 
 msgctxt "sport"
-msgid "boules"
+msgid "billiards"
 msgstr ""
 
 msgctxt "sport"
+msgid "boules"
+msgstr "boules"
+
+msgctxt "sport"
 msgid "bowls"
-msgstr ""
+msgstr "bát"
 
 msgctxt "sport"
 msgid "canadian_football"
-msgstr ""
+msgstr "canadian_football"
 
 msgctxt "sport"
 msgid "canoe"
-msgstr ""
+msgstr "xuồng"
 
 msgctxt "sport"
 msgid "climbing"
-msgstr ""
+msgstr "leo núi"
 
 msgctxt "sport"
 msgid "cricket"
-msgstr ""
-
-msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
+msgstr "dế"
 
 msgctxt "sport"
 msgid "croquet"
-msgstr ""
+msgstr "croquet"
 
 msgctxt "sport"
 msgid "cycling"
-msgstr ""
+msgstr "xe đạp"
 
 msgctxt "sport"
 msgid "dog_racing"
-msgstr ""
+msgstr "dog_racing"
 
 msgctxt "sport"
 msgid "equestrian"
+msgstr "cưỡi ngựa"
+
+msgctxt "sport"
+msgid "field_hockey"
 msgstr ""
 
 msgctxt "sport"
 msgid "gaelic_games"
-msgstr ""
+msgstr "gaelic_games"
 
 msgctxt "sport"
 msgid "golf"
-msgstr ""
+msgstr "golf"
 
 msgctxt "sport"
 msgid "gymnastics"
-msgstr ""
+msgstr "thể dục"
 
 msgctxt "sport"
 msgid "handball"
+msgstr "ném"
+
+msgctxt "sport"
+msgid "horse_racing"
+msgstr "horse_racing"
+
+msgctxt "sport"
+msgid "ice_hockey"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "karting"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "model_aerodrome"
 msgstr ""
 
 msgctxt "sport"
-msgid "motor"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
+msgid "motor"
+msgstr "động cơ"
+
+msgctxt "sport"
 msgid "pelota"
-msgstr ""
+msgstr "Pelota"
 
 msgctxt "sport"
 msgid "racquet"
+msgstr "vợt"
+
+msgctxt "sport"
+msgid "rc_car"
 msgstr ""
 
 msgctxt "sport"
 msgid "rugby_league"
-msgstr ""
+msgstr "rugby_league"
 
 msgctxt "sport"
 msgid "rugby_union"
-msgstr ""
+msgstr "rugby_union"
 
 msgctxt "sport"
 msgid "running"
+msgstr "chạy"
+
+msgctxt "sport"
+msgid "safety_training"
 msgstr ""
 
 msgctxt "sport"
 msgid "shooting"
-msgstr ""
+msgstr "bắn súng"
 
 msgctxt "sport"
 msgid "skateboard"
-msgstr ""
+msgstr "ván trượt"
 
 msgctxt "sport"
 msgid "skating"
-msgstr ""
+msgstr "trượt"
 
 msgctxt "sport"
 msgid "soccer"
-msgstr ""
+msgstr "bóng đá"
 
 msgctxt "sport"
 msgid "swimming"
-msgstr ""
+msgstr "bơi"
 
 msgctxt "sport"
 msgid "table_tennis"
-msgstr ""
+msgstr "table_tennis"
 
 msgctxt "sport"
 msgid "tennis"
+msgstr "tennis"
+
+msgctxt "sport"
+msgid "volleyball"
 msgstr ""
 
-msgid "Fee"
+msgctxt "sport"
+msgid "9pin"
 msgstr ""
 
-msgid "06:00-20:00"
+msgctxt "sport"
+msgid "10pin"
 msgstr ""
 
+msgid "Fee"
+msgstr "Phí"
+
+msgid "06:00-20:00"
+msgstr "06: 00-20: 00"
+
 msgid "Mo-Fr 09:00-18:00,Sa 08:00-14:00"
-msgstr ""
+msgstr "Mo-Fr 09: 00-18: 00, Sa 08: 00-14: 00"
 
 msgid "May-Sep 09:30-12:30,14:15-19:30"
-msgstr ""
+msgstr "May-Sep 09: 30-12: 30,14: 15-19: 30"
 
 msgctxt "parking"
 msgid "multi-storey"
-msgstr ""
+msgstr "đa tầng"
 
 msgctxt "parking"
 msgid "surface"
-msgstr ""
+msgstr "bề mặt"
 
 msgctxt "parking"
 msgid "underground"
-msgstr ""
+msgstr "ngầm"
 
 msgctxt "parking"
 msgid "rooftop"
-msgstr ""
+msgstr "mái nhà"
 
 msgid "Reference number"
-msgstr ""
+msgstr "Số tham khảo"
 
 msgid "Access"
-msgstr ""
+msgstr "Access"
 
 msgid "private"
-msgstr ""
+msgstr "riêng tư"
 
 msgid "customers"
-msgstr ""
+msgstr "khách hàng"
 
 msgid "permissive"
-msgstr ""
+msgstr "dễ dãi"
 
 msgid "Time Limit (minutes)"
-msgstr ""
+msgstr "Time Limit (phút)"
 
 msgid "Supervised"
-msgstr ""
+msgstr "giám sát"
 
 msgid "General Access"
-msgstr ""
+msgstr "General Access"
 
 msgid "destination"
-msgstr ""
+msgstr "điểm đến"
 
 msgid "delivery"
-msgstr ""
+msgstr "giao hàng"
 
 msgid "agricultural"
-msgstr ""
+msgstr "nông nghiệp"
 
 msgid "forestry"
-msgstr ""
+msgstr "lâm nghiệp"
 
 msgid "Population"
-msgstr ""
+msgstr "Dân số"
 
 msgid "Post code"
-msgstr ""
+msgstr "Mã bưu điện"
 
 msgid "Website"
-msgstr ""
+msgstr "Website"
 
 msgid "Distance (km)"
-msgstr ""
+msgstr "Khoảng cách (km)"
 
 msgid "Ascent (m)"
-msgstr ""
+msgstr "Ascent (m)"
 
 msgid "Descent (m)"
-msgstr ""
+msgstr "Descent (m)"
 
 msgid "Roundtrip"
-msgstr ""
+msgstr "khứ hồi"
 
 msgid "Symbol description"
-msgstr ""
+msgstr "Mô tả Symbol"
 
 msgid "broadleaved"
-msgstr ""
+msgstr "lá rộng"
 
 msgid "needleleaved"
-msgstr ""
+msgstr "needleleaved"
 
 msgid "mixed"
-msgstr ""
+msgstr "pha trộn"
 
 msgid "leafless"
-msgstr ""
+msgstr "lá"
 
 msgid "Cycle"
-msgstr ""
+msgstr "Mùa thi"
 
 msgid "deciduous"
-msgstr ""
+msgstr "rụng"
 
 msgid "Plants that are leafless for a certain period during the year."
-msgstr ""
+msgstr "Cây có lá trong một thời gian nhất định trong năm."
 
 msgid "evergreen"
-msgstr ""
+msgstr "xanh"
 
 msgid "Plants that are never entirely without green foliage."
-msgstr ""
+msgstr "Cây đó là không bao giờ hoàn toàn không có lá màu xanh lá cây."
 
 msgid "semi_deciduous"
-msgstr ""
+msgstr "semi_deciduous"
 
 msgid ""
 "Plants that lose their foliage for a very short period, when old leaves fall "
 "off and new foliage growth is starting."
 msgstr ""
+"Cây mà mất lá của họ trong một thời gian rất ngắn, khi lá già rơiTắt và tăng "
+"trưởng lá mới là bắt đầu."
 
 msgid "semi_evergreen"
-msgstr ""
+msgstr "semi_evergreen"
 
 msgid ""
 "Plants that lose most, but not all, of their foliage for a fraction of the "
 "year."
 msgstr ""
+"Cây mà mất hầu hết, nhưng không phải tất cả, các tán lá của họ cho một phần "
+"nhỏ củaNăm"
 
 msgid "Habitat with evergreen and deciduous vegetation."
-msgstr ""
+msgstr "Habitat với thường xanh và thảm thực vật rụng lá."
 
 msgid "bahai"
-msgstr ""
+msgstr "Bahai"
 
 msgid "buddhist"
-msgstr ""
+msgstr "Phật"
 
 msgid "christian"
-msgstr ""
+msgstr "christian"
 
 msgid "hindu"
-msgstr ""
+msgstr "hindu"
 
 msgid "jain"
-msgstr ""
+msgstr "jain"
 
 msgid "jewish"
-msgstr ""
+msgstr "Do Thái"
 
 msgid "muslim"
-msgstr ""
+msgstr "muslim"
 
 msgid "shinto"
-msgstr ""
+msgstr "Thần đạo"
 
 msgid "sikh"
-msgstr ""
+msgstr "Sikh"
 
 msgid "spiritualist"
-msgstr ""
+msgstr "duy linh"
 
 msgid "taoist"
-msgstr ""
+msgstr "Đạo"
 
 msgid "unitarian"
-msgstr ""
+msgstr "Unitarian"
 
 msgid "zoroastrian"
-msgstr ""
+msgstr "Zoroastrian"
 
 msgid "Denomination"
-msgstr ""
+msgstr "Mệnh"
 
 msgid "anglican"
-msgstr ""
+msgstr "Anh giáo"
 
 msgid "baptist"
-msgstr ""
+msgstr "phái tẩy lể"
 
 msgid "catholic"
-msgstr ""
+msgstr "công giáo"
 
 msgid "evangelical"
-msgstr ""
+msgstr "evangelical"
 
 msgid "greek_catholic"
-msgstr ""
+msgstr "greek_catholic"
 
 msgid "jehovahs_witness"
-msgstr ""
+msgstr "jehovahs_witness"
 
 msgid "lutheran"
-msgstr ""
+msgstr "Lutheran"
 
 msgid "methodist"
-msgstr ""
+msgstr "theo phương pháp"
 
 msgid "mormon"
-msgstr ""
+msgstr "Mặc Môn"
 
 msgid "old_catholic"
-msgstr ""
+msgstr "old_catholic"
 
 msgid "orthodox"
-msgstr ""
+msgstr "chính thống"
 
 msgid "pentecostal"
-msgstr ""
+msgstr "Ngũ Tuần"
 
 msgid "presbyterian"
-msgstr ""
+msgstr "Trưởng Lão"
 
 msgid "protestant"
-msgstr ""
+msgstr "Tin lành"
 
 msgid "quaker"
-msgstr ""
+msgstr "Quaker"
 
 msgid "roman_catholic"
-msgstr ""
+msgstr "roman_catholic"
 
 msgid "shia"
-msgstr ""
+msgstr "Shia"
 
 msgid "sunni"
-msgstr ""
+msgstr "Sunni"
 
 msgid "high"
-msgstr ""
+msgstr "cao"
 
 msgid "medium"
-msgstr ""
+msgstr "trung bình"
 
 msgid "low"
-msgstr ""
+msgstr "thấp"
 
 msgid "750000;200000"
-msgstr ""
+msgstr "750000; 200000"
 
 msgid "110000;20000"
-msgstr ""
+msgstr "110000; 20000"
 
 msgid "Branch operator"
-msgstr ""
+msgstr "điều hành Chi nhánh"
 
 msgid "Amount of Cables"
-msgstr ""
+msgstr "Số tiền của Cáp"
 
 msgid "Amount of circuits"
-msgstr ""
+msgstr "Số tiền của các mạch"
 
 msgid "Location"
-msgstr ""
+msgstr "Location"
 
 msgctxt "power"
 msgid "outdoor"
-msgstr ""
+msgstr "ngoài trời"
 
 msgctxt "power"
 msgid "indoor"
-msgstr ""
+msgstr "trong nhà"
 
 msgctxt "power"
 msgid "underground"
-msgstr ""
+msgstr "ngầm"
 
 msgctxt "power"
 msgid "platform"
-msgstr ""
+msgstr "nền tảng"
 
 msgctxt "power"
 msgid "kiosk"
-msgstr ""
+msgstr "kiosk"
 
 msgid "Start date"
-msgstr ""
+msgstr "Ngày bắt đầu"
 
 msgid "Output forms of energy:"
-msgstr ""
+msgstr "dạng đầu ra năng lượng:"
 
 msgid "biogas"
-msgstr ""
+msgstr "biogas"
 
 msgid "2 W"
-msgstr ""
+msgstr "2 W"
 
 msgid "3 kW"
-msgstr ""
+msgstr "3 kW"
 
 msgid "5 MW"
-msgstr ""
+msgstr "5 MW"
 
 msgid "7 GW"
-msgstr ""
+msgstr "7 GW"
 
 msgid "electricity"
-msgstr ""
+msgstr "điện"
 
 msgid "hot water"
-msgstr ""
+msgstr "nước nóng"
 
 msgid "hot air"
-msgstr ""
+msgstr "khí nóng"
 
 msgid "cold water"
-msgstr ""
+msgstr "nước lạnh"
 
 msgid "cold air"
-msgstr ""
+msgstr "khí lạnh"
 
 msgid "compressed air"
-msgstr ""
+msgstr "khí nén"
 
 msgid "steam"
-msgstr ""
+msgstr "hơi"
 
 msgid "vacuum"
-msgstr ""
+msgstr "chân không"
 
 msgid "Max. weight (tonnes)"
-msgstr ""
+msgstr "Max. trọng lượng (tấn)"
 
 msgid "Toll"
-msgstr ""
+msgstr "Toll"
 
 msgid "Is the water body intermittent (disappears seasonally)?"
-msgstr ""
+msgstr "có phải là cơ thể nước liên tục (biến mất theo mùa)?"
 
 msgid "culvert"
-msgstr ""
+msgstr "cống"
 
 msgid "Water access rules:"
-msgstr ""
+msgstr "quy tắc truy cập nước:"
 
 msgid "Ship"
-msgstr ""
+msgstr "Tàu"
 
 msgid "designated"
-msgstr ""
+msgstr "chỉ định"
 
 msgid "Boat"
-msgstr ""
+msgstr "Boat"
 
 msgid "Motorboat"
-msgstr ""
+msgstr "Thuyền máy"
 
 msgid "Canoe"
-msgstr ""
+msgstr "Canoe"
 
 msgid "Streets"
-msgstr ""
+msgstr "Streets"
 
 msgid "Motorway"
-msgstr ""
+msgstr "Đường cao tốc"
 
 msgid "Motorway Link"
-msgstr ""
+msgstr "Đường cao tốc Liên kết"
 
 msgid "Trunk"
-msgstr ""
+msgstr "Trunk"
 
 msgid "Motorroad"
-msgstr ""
+msgstr "Motorroad"
 
 msgid "Trunk Link"
-msgstr ""
+msgstr "Trunk Link"
 
 msgid "Primary"
-msgstr ""
+msgstr "Chính"
 
 msgid "Primary Link"
-msgstr ""
+msgstr "Primary Link"
 
 msgid "Secondary"
-msgstr ""
+msgstr "thứ cấp"
 
 msgid "Secondary Link"
-msgstr ""
+msgstr "Secondary Link"
 
 msgid "Tertiary"
-msgstr ""
+msgstr "Đệ tam"
 
 msgid "Tertiary Link"
-msgstr ""
+msgstr "Tertiary Link"
 
 msgid "Unclassified"
+msgstr "Không phân loại"
+
+msgid "Street has no name"
 msgstr ""
 
 msgid "Passing Places"
-msgstr ""
+msgstr "Passing Places"
 
 msgid "Residential"
-msgstr ""
+msgstr "dân cư"
 
 msgid "Bicycle Road"
-msgstr ""
+msgstr "Bicycle Road"
 
 msgid "Highway type"
-msgstr ""
+msgstr "kiểu lộ"
 
 msgctxt "Highway"
 msgid "residential"
-msgstr ""
+msgstr "dân cư"
 
 msgctxt "Highway"
 msgid "service"
-msgstr ""
+msgstr "dịch vụ"
 
 msgctxt "Highway"
 msgid "unclassified"
-msgstr ""
+msgstr "không được phân loại"
 
 msgctxt "Highway"
 msgid "path"
-msgstr ""
+msgstr "con đường"
 
 msgctxt "Highway"
 msgid "cycleway"
-msgstr ""
+msgstr "cycleway"
 
 msgid "Vehicle access"
-msgstr ""
+msgstr "Vehicle truy cập"
 
 msgid "Oneway for bicycle"
-msgstr ""
+msgstr "OneWay cho xe đạp"
 
 msgid "Living Street"
-msgstr ""
+msgstr "Living Street"
 
 msgid "Pedestrian"
-msgstr ""
+msgstr "đi bộ"
 
 msgid "Area"
-msgstr ""
+msgstr "Area"
 
 msgid "Service"
-msgstr ""
+msgstr "Dịch vụ"
 
 msgid "Service way type"
-msgstr ""
+msgstr "cách dịch vụ kiểu"
 
 msgid "alley"
-msgstr ""
+msgstr "hẻm"
 
 msgid "driveway"
-msgstr ""
+msgstr "driveway"
 
 msgid "parking_aisle"
-msgstr ""
+msgstr "parking_aisle"
 
 msgid "drive-through"
-msgstr ""
+msgstr "drive-through"
 
 msgid "Parking Aisle"
-msgstr ""
+msgstr "Parking lối đi"
 
 msgid "Escape"
-msgstr ""
+msgstr "Thoát"
 
 msgid ""
 "Emergency lane beside long descending slopes for trucks and other vehicles "
 "to stop safely after brake failure."
 msgstr ""
+"Làn khẩn cấp bên cạnh dài giảm dần độ dốc cho xe tải và xe khácĐể ngăn chặn "
+"một cách an toàn sau khi thất bại phanh."
+
+msgid "Raceway"
+msgstr "Đường đua"
 
 msgid "Road (Unknown Type)"
-msgstr ""
+msgstr "Road (Vô Type)"
 
 msgid "Construction"
-msgstr ""
+msgstr "Xây dựng"
 
 msgctxt "Highway"
 msgid "motorway"
-msgstr ""
+msgstr "đường cao tốc"
 
 msgctxt "Highway"
 msgid "motorway_link"
-msgstr ""
+msgstr "motorway_link"
 
 msgctxt "Highway"
 msgid "trunk"
-msgstr ""
+msgstr "thân cây"
 
 msgctxt "Highway"
 msgid "trunk_link"
-msgstr ""
+msgstr "trunk_link"
 
 msgctxt "Highway"
 msgid "primary"
-msgstr ""
+msgstr "chính"
 
 msgctxt "Highway"
 msgid "primary_link"
-msgstr ""
+msgstr "primary_link"
 
 msgctxt "Highway"
 msgid "secondary"
-msgstr ""
+msgstr "thứ cấp"
 
 msgctxt "Highway"
 msgid "secondary_link"
-msgstr ""
+msgstr "secondary_link"
 
 msgctxt "Highway"
 msgid "tertiary"
-msgstr ""
+msgstr "đại học"
 
 msgctxt "Highway"
 msgid "tertiary_link"
-msgstr ""
+msgstr "tertiary_link"
 
 msgctxt "Highway"
 msgid "bus_guideway"
-msgstr ""
+msgstr "bus_guideway"
 
 msgctxt "Highway"
 msgid "bridleway"
-msgstr ""
+msgstr "bridleway"
 
 msgctxt "Highway"
 msgid "living_street"
-msgstr ""
+msgstr "living_street"
 
 msgctxt "Highway"
 msgid "pedestrian"
-msgstr ""
+msgstr "đi bộ"
 
 msgctxt "Highway"
 msgid "track"
-msgstr ""
+msgstr "theo dõi"
 
 msgctxt "Highway"
 msgid "footway"
-msgstr ""
+msgstr "thang lên xuống hầm mỏ"
 
 msgctxt "Highway"
 msgid "steps"
-msgstr ""
+msgstr "bước"
 
 msgid "Junction"
-msgstr ""
+msgstr "Junction"
 
 msgid "roundabout"
-msgstr ""
+msgstr "đường vòng"
 
 msgid "jughandle"
-msgstr ""
+msgstr "jughandle"
 
 msgid "Road Restrictions"
-msgstr ""
+msgstr "Hạn chế Road"
 
 msgid ""
 "Some road types already imply some access restrictions which should not be "
 "set again."
 msgstr ""
+"Một số loại đường đã bao hàm một số hạn chế truy cập mà không cần đượcThiết "
+"lập một lần nữa."
 
 msgid "No exit (cul-de-sac)"
-msgstr ""
+msgstr "Không có lối ra (cul-de-sac)"
 
 msgid "Transport mode restrictions"
-msgstr ""
+msgstr "Giao thông vận tải chế độ hạn chế"
 
 msgid "official"
-msgstr ""
+msgstr "chính thức"
 
 msgid "Vehicles per type"
-msgstr ""
+msgstr "Phương tiện đi lại mỗi loại"
 
 msgid "All vehicles"
-msgstr ""
+msgstr "Tất cả các xe"
 
 msgid "use_sidepath"
-msgstr ""
+msgstr "use_sidepath"
 
 msgid "Motor vehicles"
-msgstr ""
+msgstr "Xe ô tô"
 
 msgid "Light Commercial Vehicles (goods)"
-msgstr ""
+msgstr "Light Xe thương mại (hàng hóa)"
 
 msgid "Heavy Goods Vehicles (hgv)"
-msgstr ""
+msgstr "Hàng Xe Hạng Nặng (HGV)"
 
 msgid "Vehicles per use"
-msgstr ""
+msgstr "Phương tiện đi lại mỗi lần sử dụng"
 
 msgid "Agricultural"
-msgstr ""
+msgstr "nông nghiệp"
 
 msgid "Emergency vehicles"
-msgstr ""
+msgstr "xe khẩn cấp"
 
 msgid "High-occupancy vehicles (hov)"
-msgstr ""
+msgstr "xe cao công suất (HOV)"
 
 msgid "Public Service Vehicles (psv)"
-msgstr ""
+msgstr "Dịch vụ công cộng Phương tiện đi lại (PSV)"
 
 msgid "Tourist buses"
-msgstr ""
+msgstr "xe buýt du lịch"
 
 msgid "Min. speed (km/h)"
-msgstr ""
+msgstr "Min. tốc độ (km / h)"
 
 msgid "Max. axleload (tonnes)"
-msgstr ""
+msgstr "Max. axleload (tấn)"
 
 msgid "Max. length (meters)"
-msgstr ""
+msgstr "chiều dài Max. (m)"
 
 msgid "Overtaking"
-msgstr ""
+msgstr "vượt"
 
 msgctxt "overtaking"
 msgid "yes"
-msgstr ""
+msgstr "yes"
 
 msgctxt "overtaking"
 msgid "both"
-msgstr ""
+msgstr "cả hai"
 
 msgctxt "overtaking"
 msgid "forward"
-msgstr ""
+msgstr "chuyển tiếp"
 
 msgctxt "overtaking"
 msgid "backward"
-msgstr ""
+msgstr "lạc hậu"
 
 msgctxt "overtaking"
 msgid "no"
-msgstr ""
+msgstr "không"
 
 msgid "Roundabout"
-msgstr ""
+msgstr "Roundabout"
 
 msgctxt "Highway"
 msgid "construction"
-msgstr ""
+msgstr "xây dựng"
 
 msgid "Ford"
-msgstr ""
+msgstr "Ford"
 
 msgid "Ways"
-msgstr ""
+msgstr "cách"
 
 msgid "Track"
-msgstr ""
+msgstr "Track"
 
 msgid "Tracktype"
-msgstr ""
+msgstr "Tracktype"
 
 msgid "grade1"
-msgstr ""
+msgstr "grade1"
 
 msgid "grade2"
-msgstr ""
+msgstr "grade2"
 
 msgid "grade3"
-msgstr ""
+msgstr "grade3"
 
 msgid "grade4"
-msgstr ""
+msgstr "grade4"
 
 msgid "grade5"
-msgstr ""
+msgstr "grade5"
 
 msgid "MTB Scale"
-msgstr ""
+msgstr "MTB Scale"
 
 msgid "Path"
-msgstr ""
+msgstr "Path"
 
 msgid "SAC Scale"
-msgstr ""
+msgstr "SAC Scale"
 
 msgid "T1 - hiking trail"
-msgstr ""
+msgstr "T1 - hiking trail"
 
 msgid "Trail well cleared. Area flat or slightly sloped, no fall hazard"
 msgstr ""
+"Trail cũng xóa. Diện tích phẳng hoặc hơi dốc, không gây bất kỳ mùa thu"
 
 msgid "T2 - mountain hiking trail"
-msgstr ""
+msgstr "T2 - đường mòn đi bộ đường dài núi"
 
 msgid ""
 "Trail with continuous line and balanced ascent. Terrain partially steep, "
 "fall hazard possible"
 msgstr ""
+"Trail với dòng liên tục đi lên và cân bằng. Địa hình phần dốcRơi nguy hiểm "
+"có thể"
 
 msgid "T3 - difficult, exposed hiking trail"
-msgstr ""
+msgstr "T3 - khó khăn, đi bộ đường dài tiếp xúc với đường mòn"
 
 msgid ""
 "exposed sites may be secured with ropes or chains, possible need to use "
 "hands for balance. Partly exposed sites with fall hazard, scree, pathless "
 "jagged rocks"
 msgstr ""
+"Các trang web tiếp xúc có thể được bảo đảm bằng dây thừng hoặc dây chuyền, "
+"có thể cần phải sử dụngBàn tay để giữ thăng bằng. Một phần các trang web "
+"tiếp xúc với nạn mùa thu, những hòn đá nhỏ, không lối điĐá lởm chởm"
 
 msgid "T4 - difficult, exposed, steep alpine trail"
-msgstr ""
+msgstr "T4 - khó khăn, tiếp xúc, dốc núi đường mòn"
 
 msgid ""
 "sometimes need for hand use to get ahead. Terrain quite exposed, precarious "
 "grassy acclivities, jagged rocks, facile snow-free glaciers"
 msgstr ""
+"Đôi khi cần sử dụng tay để có được trước. Địa hình khá tiếp xúc, bấp "
+"bênhAcclivities cỏ, đá núi lởm chởm, dễ dãi băng tuyết miễn phí"
 
 msgid "T5 - difficult alpine trail with climbing"
-msgstr ""
+msgstr "T5 - khó đường mòn núi cao với leo núi"
 
 msgid ""
 "single plainly climbing up to second grade. Exposed, demanding terrain, "
 "jagged rocks, few dangerous glacier and snow"
 msgstr ""
+"Duy nhất rõ ràng leo lên lớp hai. Tiếp xúc, đòi hỏi địa hình,Đá lởm chởm, "
+"vài băng nguy hiểm và tuyết"
 
 msgid "T6 - hazardous alpine trail with climbing"
-msgstr ""
+msgstr "T6 - nguy hiểm đường mòn núi cao với leo núi"
 
 msgid ""
 "climbing up to second grade. Often very exposed, precarious jagged rocks, "
 "glacier with danger to slip and fall"
 msgstr ""
+"Leo lên đến lớp thứ hai. Thường thì rất tiếp xúc, đá núi lởm chởm bấp "
+"bênh,Sông băng nguy hiểm trượt và mùa thu"
 
 msgid "Visibility"
-msgstr ""
+msgstr "Tầm nhìn"
 
 msgctxt "trail_visibility"
 msgid "excellent"
-msgstr ""
+msgstr "tuyệt vời"
 
 msgctxt "trail_visibility"
 msgid "good"
-msgstr ""
+msgstr "tốt"
 
 msgctxt "trail_visibility"
 msgid "intermediate"
-msgstr ""
+msgstr "trung gian"
 
 msgctxt "trail_visibility"
 msgid "bad"
-msgstr ""
+msgstr "xấu"
 
 msgctxt "trail_visibility"
 msgid "horrible"
-msgstr ""
+msgstr "khủng khiếp"
 
 msgctxt "trail_visibility"
 msgid "no"
-msgstr ""
+msgstr "không"
 
 msgid "Ski"
-msgstr ""
+msgstr "Ski"
 
 msgid "Snowmobile"
-msgstr ""
+msgstr "Snowmobile"
 
 msgid "Dedicated Bridleway"
-msgstr ""
+msgstr "chuyên dụng Bridleway"
 
 msgid "Cycle Lane/Track"
-msgstr ""
+msgstr "Cycle Lane / Track"
 
 msgid "Cycleway"
-msgstr ""
+msgstr "Cycleway"
 
 msgid "lane"
-msgstr ""
+msgstr "lane"
 
 msgid "track"
-msgstr ""
+msgstr "theo dõi"
 
 msgid "opposite_lane"
-msgstr ""
+msgstr "opposite_lane"
 
 msgid "opposite_track"
-msgstr ""
+msgstr "opposite_track"
 
 msgid "opposite"
-msgstr ""
+msgstr "đối diện"
 
 msgid "share_busway"
-msgstr ""
+msgstr "share_busway"
 
 msgid "shared_lane"
-msgstr ""
+msgstr "shared_lane"
 
 msgid "Cycleway left"
-msgstr ""
+msgstr "Cycleway trái"
 
 msgid "Cycleway right"
-msgstr ""
+msgstr "Cycleway đúng"
 
 msgid "Oneway (bicycle)"
-msgstr ""
+msgstr "OneWay (xe đạp)"
 
 msgid "Edit Highway Attributes:"
-msgstr ""
+msgstr "Edit Attributes lộ:"
 
 msgid "Highway"
-msgstr ""
+msgstr "lộ"
 
 msgid "Dedicated Cycleway"
-msgstr ""
+msgstr "chuyên dụng Cycleway"
 
 msgid "Pedestrians"
-msgstr ""
+msgstr "Người đi bộ"
 
 msgid "Segregated Foot- and Cycleway"
-msgstr ""
+msgstr "phân biệt chủng tộc và Foot- Cycleway"
 
 msgid "Combined Foot- and Cycleway"
-msgstr ""
+msgstr "Combined Foot- và Cycleway"
 
 msgid "Dedicated Footway"
-msgstr ""
+msgstr "chuyên dụng thang lên xuống hầm mỏ"
 
 msgid "Steps"
-msgstr ""
+msgstr "Steps"
 
 msgid "Amount of Steps"
-msgstr ""
+msgstr "Số tiền của Steps"
 
 msgid "Ramp"
-msgstr ""
+msgstr "Ramp"
 
 msgid "Stroller ramp"
-msgstr ""
+msgstr "đẩy dốc"
 
 msgid "Bicycle ramp"
-msgstr ""
+msgstr "đoạn đường xe đạp"
 
 msgid "Wheelchair ramp"
-msgstr ""
+msgstr "Xe lăn dốc"
 
 msgid "Luggage ramp"
-msgstr ""
+msgstr "Hành lý đoạn đường"
 
 msgid "automatic"
-msgstr ""
+msgstr "tự động"
 
 msgid "manual"
-msgstr ""
+msgstr "bằng tay"
 
 msgid "Handrail"
-msgstr ""
+msgstr "Lan can"
 
 msgid "Left handrail"
-msgstr ""
+msgstr "Left lan can"
 
 msgid "Center handrail"
-msgstr ""
+msgstr "Trung tâm lan can"
 
 msgid "Right handrail"
-msgstr ""
+msgstr "lan can Right"
 
 msgid "Waypoints"
-msgstr ""
+msgstr "Waypoints"
 
 msgid "Motorway Junction"
-msgstr ""
+msgstr "Đường cao tốc Junction"
 
 msgid "Number"
-msgstr ""
+msgstr "Số"
 
 msgid "Exit to"
-msgstr ""
+msgstr "Exit để"
 
 msgid "Services"
-msgstr ""
+msgstr "Dịch vụ"
 
 msgid "Toilets"
-msgstr ""
+msgstr "Nhà vệ sinh"
 
 msgid "Rest Area"
-msgstr ""
+msgstr "Rest Area"
 
 msgid "Drinking Water"
-msgstr ""
+msgstr "nước uống"
 
 msgid "Traffic Signal"
-msgstr ""
+msgstr "Tín hiệu giao thông"
 
 msgid "Optional crossing attributes:"
-msgstr ""
+msgstr "qua thuộc tính tùy chọn:"
 
 msgid "Pedestrian crossing type"
-msgstr ""
+msgstr "Pedestrian loại qua"
 
 msgid "uncontrolled"
-msgstr ""
+msgstr "không kiểm soát"
 
 msgid "traffic_signals"
-msgstr ""
+msgstr "traffic_signals"
 
 msgid "island"
-msgstr ""
+msgstr "hòn đảo"
 
 msgid "unmarked"
-msgstr ""
+msgstr "không rõ ràng"
 
 msgid "Crossing type name (UK)"
-msgstr ""
+msgstr "loại tên Crossing (Anh)"
 
 msgid "zebra"
-msgstr ""
+msgstr "ngựa vằn"
 
 msgid "pelican"
-msgstr ""
+msgstr "bồ nông"
 
 msgid "toucan"
-msgstr ""
+msgstr "chim cò"
 
 msgid "puffin"
-msgstr ""
+msgstr "loại chim biển"
 
 msgid "pegasus"
-msgstr ""
+msgstr "pegasus"
 
 msgid "tiger"
-msgstr ""
+msgstr "con hổ"
 
 msgid "Button operated"
-msgstr ""
+msgstr "Button hoạt động"
 
 msgid "Sound signals"
-msgstr ""
+msgstr "tín hiệu âm thanh"
 
 msgid "Crossing attendant"
-msgstr ""
+msgstr "Crossing giả"
 
 msgid "Cross by bicycle"
-msgstr ""
+msgstr "Cross bằng xe đạp"
 
 msgid "Cross on horseback"
-msgstr ""
+msgstr "Cross trên lưng ngựa"
 
 msgid "Optional values for specific countries"
-msgstr ""
+msgstr "giá trị bắt buộc đối với các nước cụ thể"
 
 msgid "Stop"
-msgstr ""
+msgstr "Dừng lại"
 
 msgid "Give Way"
-msgstr ""
+msgstr "Hãy cho Way"
 
 msgid "Mini-Roundabout"
-msgstr ""
+msgstr "Mini-Roundabout"
 
 msgid "clockwise"
-msgstr ""
+msgstr "chiều kim đồng hồ"
 
 msgid "Pedestrian Crossing"
-msgstr ""
+msgstr "Pedestrian Crossing"
 
 msgid "In case of traffic signals:"
-msgstr ""
+msgstr "Trong trường hợp của các tín hiệu giao thông:"
 
 msgid "Traffic Calming"
-msgstr ""
+msgstr "Traffic Calming"
 
 msgid "bump"
-msgstr ""
+msgstr "đẩy"
 
 msgid "chicane"
-msgstr ""
+msgstr "biện luận"
 
 msgid "choker"
-msgstr ""
+msgstr "choker"
 
 msgid "cushion"
-msgstr ""
+msgstr "đệm"
 
 msgid "hump"
-msgstr ""
+msgstr "bướu"
 
 msgid "rumble_strip"
-msgstr ""
+msgstr "rumble_strip"
 
 msgid "table"
-msgstr ""
+msgstr "bảng"
 
 msgid "Passing Place"
-msgstr ""
+msgstr "Passing Place"
 
 msgid "Turning Circle"
-msgstr ""
+msgstr "Quay Circle"
 
 msgid "Turning Loop"
-msgstr ""
+msgstr "Quay Loop"
 
 msgid "City Limit"
-msgstr ""
+msgstr "City Limit"
 
 msgid "Second Name"
-msgstr ""
+msgstr "Tên thứ hai"
 
 msgid "Speed Camera"
-msgstr ""
+msgstr "Speed ​​Camera"
 
 msgid "Traffic Mirror"
+msgstr "Traffic Mirror"
+
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
 msgstr ""
 
 msgctxt "junction=yes"
 msgid "Named Junction"
-msgstr ""
+msgstr "Đặt tên Junction"
 
 msgid ""
 "Used in some countries for a named road junction who’s name serves for local "
 "orientation."
 msgstr ""
+"Được sử dụng ở một số nước cho một ngã ba đường có tên là tên người phục vụ "
+"cho địa phươngĐịnh hướng"
 
 msgid "Elevator"
-msgstr ""
+msgstr "Elevator"
 
 msgid "Grit Bin"
-msgstr ""
+msgstr "Grit Bin"
 
 msgid "Mountain Pass"
-msgstr ""
+msgstr "Mountain Pass"
 
 msgid "Elevation"
-msgstr ""
+msgstr "Elevation"
 
 msgid "Barriers"
-msgstr ""
+msgstr "rào cản"
 
 msgid "Block"
-msgstr ""
+msgstr "Block"
 
 msgid "Material"
-msgstr ""
+msgstr "Chất liệu"
 
 msgid "stone"
-msgstr ""
+msgstr "đá"
 
 msgid "Bollard"
-msgstr ""
+msgstr "Bollard"
 
 msgid "Bollard type"
-msgstr ""
+msgstr "Bollard loại"
 
 msgid "rising"
-msgstr ""
+msgstr "tăng"
 
 msgid "removable"
-msgstr ""
+msgstr "di động"
 
 msgid "plastic"
-msgstr ""
+msgstr "nhựa"
 
 msgid "Cycle Barrier"
-msgstr ""
+msgstr "Cycle Barrier"
 
 msgid "Cattle Grid"
-msgstr ""
+msgstr "Gia súc Grid"
 
 msgid "Bus Trap"
-msgstr ""
+msgstr "Bus Trap"
 
 msgid "Spikes"
-msgstr ""
+msgstr "Spikes"
 
 msgid "Toll Booth"
-msgstr ""
+msgstr "Toll Booth"
 
 msgid "Border Control"
-msgstr ""
+msgstr "kiểm soát biên"
 
 msgid "Hedge"
-msgstr ""
+msgstr "Hedge"
 
 msgid "Genus"
-msgstr ""
+msgstr "Chi"
 
 msgid "Species"
-msgstr ""
+msgstr "Species"
 
 msgid "Taxon"
-msgstr ""
+msgstr "Taxon"
 
 msgid "Fence"
-msgstr ""
+msgstr "hàng rào"
 
 msgid "barbed_wire"
-msgstr ""
+msgstr "barbed_wire"
 
 msgid "chain_link"
-msgstr ""
+msgstr "chain_link"
 
 msgid "electric"
-msgstr ""
+msgstr "điện"
 
 msgid "pole"
-msgstr ""
+msgstr "cực"
 
 msgid "split_rail"
-msgstr ""
+msgstr "split_rail"
 
 msgid "wire"
-msgstr ""
+msgstr "dây"
 
 msgid "Guard Rail"
-msgstr ""
+msgstr "Guard Rail"
 
 msgid "Wall"
-msgstr ""
+msgstr "Wall"
 
 msgid "City Wall"
-msgstr ""
+msgstr "phố Wall"
 
 msgid "Retaining Wall"
-msgstr ""
+msgstr "Tường"
 
 msgctxt "Barrier"
 msgid "Ditch"
-msgstr ""
+msgstr "Mương"
 
 msgid "Kerb"
-msgstr ""
+msgstr "Kerb"
 
 msgid "Entrance (Barrier Opening)"
-msgstr ""
+msgstr "Entrance (Barrier Opening)"
 
 msgid "Gate"
-msgstr ""
+msgstr "Gate"
 
 msgid "Lift Gate"
-msgstr ""
+msgstr "Nâng Gate"
 
 msgid "Swing Gate"
-msgstr ""
+msgstr "Swing Gate"
 
 msgctxt "swing_gate"
 msgid "single"
-msgstr ""
+msgstr "duy nhất"
 
 msgctxt "swing_gate"
 msgid "double"
-msgstr ""
+msgstr "kép"
 
 msgid "Hampshire Gate"
-msgstr ""
+msgstr "Hampshire Gate"
 
 msgid "Bump Gate"
-msgstr ""
+msgstr "Bump Gate"
 
 msgid "Kissing Gate"
-msgstr ""
+msgstr "Kissing Gate"
 
 msgid "Chain"
-msgstr ""
+msgstr "Chain"
 
 msgid "Stile"
-msgstr ""
+msgstr "Stile"
 
 msgid "ladder"
-msgstr ""
+msgstr "bậc thang"
 
 msgid "squeezer"
-msgstr ""
+msgstr "ép"
 
 msgid "stepover"
-msgstr ""
+msgstr "stepOver"
 
 msgid "Turnstile"
-msgstr ""
+msgstr "cửa quay"
 
 msgid "Sally Port"
-msgstr ""
+msgstr "Sally Port"
 
 msgid "Passageways"
-msgstr ""
+msgstr "lối đi"
 
 msgid "Building Passage"
-msgstr ""
+msgstr "Xây dựng Passage"
 
 msgid "Arcade"
-msgstr ""
+msgstr "Arcade"
 
 msgid "Open on left side"
-msgstr ""
+msgstr "Open trên bên trái"
 
 msgid "Open on right side"
-msgstr ""
+msgstr "Open vào phía bên phải"
 
 msgid "Colonnade"
-msgstr ""
+msgstr "Colonnade"
 
 msgid "Avalanche Protector"
+msgstr "Avalanche Protector"
+
+msgctxt "main group"
+msgid "Water"
 msgstr ""
 
+msgctxt "sub group"
 msgid "Water"
 msgstr ""
 
 msgid "Drain"
-msgstr ""
+msgstr "Drain"
 
 msgid "Ditch"
-msgstr ""
+msgstr "Mương"
 
 msgid "Stream"
-msgstr ""
+msgstr "Stream"
 
 msgid "River"
-msgstr ""
+msgstr "sông"
 
 msgid "Canal"
-msgstr ""
+msgstr "Canal"
 
 msgid "Spring"
-msgstr ""
+msgstr "mùa xuân"
 
 msgid ""
 "A point where groundwater naturally flows to the surface of the earth from "
 "underground."
-msgstr ""
+msgstr "Một điểm mà nước ngầm tự nhiên chảy đến bề mặt trái đất từNgầm"
 
 msgid "Waterfall"
-msgstr ""
+msgstr "Thác nước"
 
 msgid "Weir"
-msgstr ""
+msgstr "Weir"
 
 msgid "Dam"
-msgstr ""
+msgstr "Dam"
 
 msgid "Groyne"
-msgstr ""
+msgstr "bờ đê thấp"
 
 msgid "Breakwater"
-msgstr ""
+msgstr "chắn sóng"
 
 msgid "Culvert"
-msgstr ""
+msgstr "cống"
 
 msgid "Basin"
-msgstr ""
+msgstr "lưu vực"
 
 msgid "Reservoir"
-msgstr ""
+msgstr "Reservoir"
 
 msgid "Covered Reservoir"
+msgstr "Bao Reservoir"
+
+msgctxt "natural"
+msgid "Water"
 msgstr ""
 
 msgid "A body of standing water, such as a lake or pond."
-msgstr ""
+msgstr "Một cơ thể đứng nước, chẳng hạn như một cái hồ, ao."
 
 msgid "Water Body"
-msgstr ""
+msgstr "Body Water"
 
 msgid "canal"
-msgstr ""
+msgstr "kênh"
 
 msgid "lake"
-msgstr ""
+msgstr "hồ"
 
 msgid "lagoon"
-msgstr ""
+msgstr "đầm phá"
 
 msgid "oxbow"
-msgstr ""
+msgstr "khoang cổ bò"
 
 msgid "pond"
-msgstr ""
+msgstr "ao"
 
 msgid "reservoir"
-msgstr ""
+msgstr "hồ chứa"
 
 msgid "river"
-msgstr ""
+msgstr "sông"
 
 msgid "Salt Water"
-msgstr ""
+msgstr "Salt Water"
 
 msgid "Coastline"
-msgstr ""
+msgstr "Coastline"
 
 msgid ""
 "Line between the sea and land (with the water on the right side of the way)."
-msgstr ""
+msgstr "Đường dây giữa biển và đất (với các nước ở phía bên phải của đường)."
 
 msgid "Riverbank"
-msgstr ""
+msgstr "Riverbank"
 
 msgid "Wetland"
-msgstr ""
+msgstr "đầm lầy"
 
 msgid "Waterlogged area, either permanently or seasonally with vegetation."
 msgstr ""
+"khu vực Waterlogged, hoặc là vĩnh viễn hoặc theo mùa với thảm thực vật."
 
 msgid "swamp"
-msgstr ""
+msgstr "đầm lầy"
 
 msgid "bog"
-msgstr ""
+msgstr "bog"
 
 msgid "marsh"
-msgstr ""
+msgstr "đầm lầy"
 
 msgid "reedbed"
-msgstr ""
+msgstr "reedbed"
 
 msgid "saltmarsh"
-msgstr ""
+msgstr "saltmarsh"
 
 msgid "tidalflat"
-msgstr ""
+msgstr "tidalflat"
 
 msgid "mangrove"
-msgstr ""
+msgstr "ngập mặn"
 
 msgid "Mud"
-msgstr ""
+msgstr "Mud"
 
 msgid "Large area covered with mud."
-msgstr ""
+msgstr "Diện tích lớn được bao phủ bởi bùn."
 
 msgid "Beach"
-msgstr ""
+msgstr "Beach"
 
 msgid "A flat area of sand, gravel or pebble next to water."
-msgstr ""
+msgstr "Một khu vực bằng phẳng của cát, sỏi, đá cuội bên cạnh nước."
 
 msgid "swimming"
-msgstr ""
+msgstr "bơi"
 
 msgid "surfing"
-msgstr ""
+msgstr "lướt sóng"
 
 msgid "Bay"
-msgstr ""
+msgstr "Bay"
 
 msgid ""
 "A large body of water partially enclosed by land but with a wide mouth."
 msgstr ""
+"Một số lượng nước lớn bao bọc bởi một phần đất nhưng với một cái miệng rộng."
 
 msgid "Cliff"
-msgstr ""
+msgstr "Cliff"
 
 msgid ""
 "A steep rock face exposure, with a significant vertical, or near vertical "
 "(leave the lower face to the right of the way)."
 msgstr ""
+"A tiếp xúc với mặt đá dốc đứng, với một dọc đáng kể, hoặc gần thẳng đứng(Rời "
+"khỏi mặt dưới bên phải của con đường)."
 
 msgid "Shipping"
-msgstr ""
+msgstr "Vận chuyển"
 
 msgid "Ferry Terminal"
-msgstr ""
+msgstr "Ferry Terminal"
 
 msgid "Cargo"
-msgstr ""
+msgstr "Cargo"
 
 msgctxt "cargo"
 msgid "passengers"
-msgstr ""
+msgstr "hành khách"
 
 msgctxt "cargo"
 msgid "vehicle"
-msgstr ""
+msgstr "xe"
 
 msgctxt "cargo"
 msgid "bicycle"
-msgstr ""
+msgstr "xe đạp"
 
 msgctxt "cargo"
 msgid "hgv"
-msgstr ""
+msgstr "HGV"
 
 msgctxt "cargo"
 msgid "passengers;vehicle"
-msgstr ""
+msgstr "hành khách; xe"
 
 msgid "Ferry Route"
-msgstr ""
+msgstr "Ferry Route"
 
 msgid "Marina"
-msgstr ""
+msgstr "Marina"
 
 msgid "Dump Station"
-msgstr ""
+msgstr "Dump Station"
 
 msgid "public"
-msgstr ""
+msgstr "công cộng"
 
-msgid "Pier"
+msgid "Marine Fuel"
 msgstr ""
 
-msgid "Lock Gate"
-msgstr ""
+msgid "Agip"
+msgstr "Agip"
 
-msgid "Turning Point"
-msgstr ""
+msgid "Aral"
+msgstr "Aral"
 
-msgid "Slipway"
-msgstr ""
+msgid "Avia"
+msgstr "Avia"
 
-msgid "Boatyard"
-msgstr ""
+msgid "BP"
+msgstr "BP"
 
-msgid "Dock"
-msgstr ""
+msgid "Chevron"
+msgstr "Chevron"
 
-msgid "Transport"
-msgstr ""
+msgid "Citgo"
+msgstr "Citgo"
 
-msgid "Railway"
-msgstr ""
+msgid "Eni"
+msgstr "Eni"
 
-msgid "Rail"
-msgstr ""
+msgid "Esso"
+msgstr "Esso"
 
-msgid "main"
-msgstr ""
+msgid "Exxon"
+msgstr "Exxon"
 
-msgid "branch"
-msgstr ""
+msgid "Gulf"
+msgstr "Vịnh"
 
-msgid "industrial"
-msgstr ""
+msgid "Mobil"
+msgstr "Mobil"
 
-msgid "military"
-msgstr ""
+msgid "OMV"
+msgstr "OMV"
 
-msgid "tourism"
-msgstr ""
+msgid "Petro-Canada"
+msgstr "Petro-Canada"
 
-msgid "freight"
-msgstr ""
+msgid "Pioneer"
+msgstr "tiên phong"
 
-msgid "Narrow Gauge Rail"
-msgstr ""
+msgid "Q8"
+msgstr "Q8"
 
-msgid "Monorail"
-msgstr ""
+msgid "Repsol"
+msgstr "Repsol"
 
-msgid "Preserved"
-msgstr ""
+msgid "Shell"
+msgstr "Shell"
 
-msgid "Light Rail"
-msgstr ""
+msgid "Socar"
+msgstr "SOCAR"
 
-msgid "Subway"
-msgstr ""
+msgid "Statoil"
+msgstr "Statoil"
 
-msgid "Tram"
-msgstr ""
+msgid "Sunoco"
+msgstr "Sunoco"
 
-msgid "Bus Guideway"
-msgstr ""
+msgid "Tamoil"
+msgstr "TAMOIL"
 
-msgid "Disused Rail"
-msgstr ""
+msgid "Texaco"
+msgstr "Texaco"
 
-msgid "Abandoned Rail"
-msgstr ""
+msgid "Total"
+msgstr "Total"
 
-msgid "Level Crossing"
-msgstr ""
+msgid "Independent"
+msgstr "độc lập"
 
-msgid "Traffic lights"
-msgstr ""
+msgid "Fuel types:"
+msgstr "Nhiên liệu loại:"
 
-msgid "Barrier"
-msgstr ""
+msgid "Diesel"
+msgstr "Diesel"
 
-msgctxt "crossing:barrier"
-msgid "yes"
-msgstr ""
+msgid "Bio Diesel"
+msgstr "Bio Diesel"
 
-msgctxt "crossing:barrier"
-msgid "no"
-msgstr ""
+msgid "Octane 80"
+msgstr "Octane 80"
+
+msgid "Octane 91"
+msgstr "Octane 91"
+
+msgid "Octane 92"
+msgstr "Octane 92"
+
+msgid "Octane 95"
+msgstr "Octane 95"
+
+msgid "Octane 98"
+msgstr "Octane 98"
+
+msgid "Octane 100"
+msgstr "Octane 100"
+
+msgid "E10 (10% Ethanol mix)"
+msgstr "E10 (10% Ethanol pha trộn)"
+
+msgid "E85 (85% Ethanol mix)"
+msgstr "E85 (85% Ethanol pha trộn)"
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr "LPG (khí dầu mỏ hóa lỏng)"
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr "CNG (Compressed Natural Gas)"
+
+msgid "Pier"
+msgstr "Pier"
+
+msgid "Lock Gate"
+msgstr "Khóa Gate"
+
+msgid "Turning Point"
+msgstr "Turning Point"
+
+msgid "Slipway"
+msgstr "đường trượt"
+
+msgid "Boatyard"
+msgstr "Boatyard"
+
+msgid "Dock"
+msgstr "Dock"
+
+msgid "Transport"
+msgstr "Giao thông vận tải"
+
+msgid "Railway"
+msgstr "đường sắt"
+
+msgid "Rail"
+msgstr "Rail"
+
+msgid "main"
+msgstr "chính"
+
+msgid "branch"
+msgstr "chi nhánh"
+
+msgid "industrial"
+msgstr "công nghiệp"
+
+msgid "military"
+msgstr "quân sự"
+
+msgid "tourism"
+msgstr "du lịch"
+
+msgid "freight"
+msgstr "cước"
+
+msgid "Narrow Gauge Rail"
+msgstr "chuẩn Hẹp Rail"
+
+msgid "Monorail"
+msgstr "Monorail"
+
+msgid "Preserved"
+msgstr "bảo quản"
+
+msgid "Light Rail"
+msgstr "Light Rail"
+
+msgid "Subway"
+msgstr "Subway"
+
+msgid "Tram"
+msgstr "Tram"
+
+msgid "Bus Guideway"
+msgstr "Bus tắc chủ"
+
+msgid "Disused Rail"
+msgstr "bỏ hoang đường sắt"
+
+msgid "Abandoned Rail"
+msgstr "Abandoned Rail"
+
+msgid "Level Crossing"
+msgstr "Level Crossing"
+
+msgid "Traffic lights"
+msgstr "Đèn giao thông"
+
+msgid "Barrier"
+msgstr "Barrier"
+
+msgctxt "crossing:barrier"
+msgid "yes"
+msgstr "yes"
+
+msgctxt "crossing:barrier"
+msgid "no"
+msgstr "không"
 
 msgctxt "crossing:barrier"
 msgid "half"
-msgstr ""
+msgstr "một nửa"
 
 msgctxt "crossing:barrier"
 msgid "full"
-msgstr ""
+msgstr "đầy đủ"
 
 msgctxt "crossing:barrier"
 msgid "double_half"
-msgstr ""
+msgstr "double_half"
 
 msgid "Crossing"
-msgstr ""
+msgstr "Crossing"
 
 msgid "Crossing type"
-msgstr ""
+msgstr "loại Crossing"
 
 msgid "Turntable"
-msgstr ""
+msgstr "Turntable"
 
 msgid "Buffer Stop"
-msgstr ""
+msgstr "Buffer Stop"
 
 msgid "Railway Switch"
+msgstr "Railway Switch"
+
+msgid "Railway milestone"
 msgstr ""
 
 msgid "Aerialway"
-msgstr ""
+msgstr "Aerialway"
 
 msgid "Cable Car"
-msgstr ""
+msgstr "Cable Car"
 
 msgid "Number of people per hour"
-msgstr ""
+msgstr "Số người mỗi giờ"
 
 msgid "Number of people per car"
-msgstr ""
+msgstr "Số người trên xe"
 
 msgid "Typical journey time in minutes"
-msgstr ""
+msgstr "thời gian hành trình tiêu biểu trong vài phút"
 
 msgid "Has heating?"
-msgstr ""
+msgstr "Có sưởi ấm?"
 
 msgid "Chair Lift"
-msgstr ""
+msgstr "Chủ tịch Lift"
 
 msgid "Number of people per chair"
-msgstr ""
+msgstr "Số người trên ghế"
 
 msgid "Has bubble?"
-msgstr ""
+msgstr "Có bong bóng?"
 
 msgid "Gondola"
-msgstr ""
+msgstr "Gondola"
 
 msgid "Number of people per gondola"
-msgstr ""
+msgstr "Số người mỗi gondola"
 
 msgid "Mixed Lift"
-msgstr ""
+msgstr "Mixed Lift"
 
 msgid "Number of people per gondola/chair"
-msgstr ""
+msgstr "Số người mỗi gondola / ghế"
 
 msgid "Drag Lift"
-msgstr ""
+msgstr "Kéo Lift"
 
 msgid ""
 "drag_lift (general type - use only if exact type (see values below) is "
 "unknown)"
 msgstr ""
+"Drag_lift (loại nói chung - chỉ dùng nếu loại chính xác (xem các giá trị "
+"dưới đây) làKhông rõ)"
 
 msgid "t-bar"
-msgstr ""
+msgstr "t-bar"
 
 msgid "j-bar"
-msgstr ""
+msgstr "j-bar"
 
 msgid "platter"
-msgstr ""
+msgstr "đĩa"
 
 msgid "rope_tow"
-msgstr ""
+msgstr "rope_tow"
 
 msgid "Magic Carpet"
-msgstr ""
+msgstr "Magic Carpet"
 
 msgid "Goods"
-msgstr ""
+msgstr "Hàng hóa"
 
 msgctxt "aerialway"
 msgid "Station"
-msgstr ""
+msgstr "Station"
 
 msgid "Pylon"
-msgstr ""
+msgstr "Pylon"
 
 msgid "Parking"
-msgstr ""
+msgstr "Parking"
 
 msgid "Park and Ride"
-msgstr ""
+msgstr "Park and Ride"
 
 msgid "bus"
-msgstr ""
+msgstr "xe buýt"
 
 msgid "train"
-msgstr ""
+msgstr "đào tạo"
 
 msgid "tram"
-msgstr ""
+msgstr "tram"
 
 msgid "metro"
-msgstr ""
+msgstr "tàu điện ngầm"
 
 msgid "ferry"
-msgstr ""
+msgstr "phà"
 
 msgid "Capacity (overall)"
-msgstr ""
+msgstr "Công suất (tổng thể)"
 
 msgid "Spaces for Disabled"
-msgstr ""
+msgstr "Không gian cho người khuyết tật"
 
 msgid "Spaces for Women"
-msgstr ""
+msgstr "Không gian cho phụ nữ"
 
 msgid "Spaces for Parents"
-msgstr ""
+msgstr "Không gian dành cho bố mẹ"
 
 msgid "See the Wiki for other capacity:[types]=*."
-msgstr ""
+msgstr "Xem Wiki cho năng lực khác:. [loại] = *"
 
 msgid "Parking Space"
-msgstr ""
+msgstr "Parking Space"
 
 msgid "Capacity"
-msgstr ""
+msgstr "năng lực"
 
 msgid "Covered (with roof)"
-msgstr ""
+msgstr "Bao (có mái)"
 
 msgid "Parking Entrance"
-msgstr ""
+msgstr "Parking Entrance"
 
 msgid "Fuel"
-msgstr ""
+msgstr "nhiên liệu"
 
-msgid "Agip"
-msgstr ""
+msgid "With shop"
+msgstr "Với cửa hàng"
 
-msgid "Aral"
-msgstr ""
+msgid "convenience"
+msgstr "thuận tiện"
 
-msgid "Avia"
-msgstr ""
+msgid "kiosk"
+msgstr "kiosk"
 
-msgid "BP"
-msgstr ""
+msgid "Diesel (Gas To Liquid - ultimate diesel)"
+msgstr "Diesel (Gas Để lỏng - diesel cuối cùng)"
 
-msgid "Chevron"
-msgstr ""
+msgid "Diesel for Heavy Good Vehicles"
+msgstr "Diesel cho nặng Tốt Phương tiện đi lại"
 
-msgid "Citgo"
-msgstr ""
+msgid "1/25 mix (mofa/moped)"
+msgstr "1/25 hỗn hợp (MOFA / công suất thấp)"
 
-msgid "Eni"
-msgstr ""
+msgid "1/50 mix (mofa/moped)"
+msgstr "1/50 hỗn hợp (MOFA / công suất thấp)"
 
-msgid "Esso"
-msgstr ""
+msgid "Fuel cards:"
+msgstr "thẻ nhiên liệu:"
 
-msgid "Exxon"
-msgstr ""
+msgid "DKV"
+msgstr "DKV"
 
-msgid "Gulf"
-msgstr ""
+msgid "Routex"
+msgstr "Routex"
 
-msgid "Mobil"
-msgstr ""
+msgid "UTA"
+msgstr "UTA"
 
-msgid "OMV"
-msgstr ""
+msgid "Charging Station"
+msgstr "Charging Station"
 
-msgid "Petro-Canada"
-msgstr ""
+msgid "Voltage"
+msgstr "Voltage"
 
-msgid "Pioneer"
-msgstr ""
+msgid "Amperage"
+msgstr "Cường độ dòng điện"
 
-msgid "Q8"
-msgstr ""
+msgid "Wash"
+msgstr "Rửa"
 
-msgid "Repsol"
-msgstr ""
+msgid "Car Dealer"
+msgstr "Car Dealer"
 
-msgid "Shell"
-msgstr ""
+msgid "Second hand"
+msgstr "Second hand"
 
-msgid "Socar"
-msgstr ""
+msgid "only"
+msgstr "chỉ"
 
-msgid "Statoil"
-msgstr ""
+msgid "Repair"
+msgstr "Repair"
 
-msgid "Sunoco"
-msgstr ""
+msgid "Parts"
+msgstr "Bộ phận"
 
-msgid "Tamoil"
-msgstr ""
+msgid "Tires"
+msgstr "Tires"
 
-msgid "Texaco"
-msgstr ""
+msgid "Rental"
+msgstr "thuê"
 
-msgid "Total"
-msgstr ""
+msgid "Sharing"
+msgstr "Chia sẻ"
 
-msgid "Independent"
-msgstr ""
+msgid "Motorcycle Dealer"
+msgstr "Đại lý xe máy"
 
-msgid "With shop"
-msgstr ""
+msgid "independent"
+msgstr "độc lập"
 
-msgid "convenience"
-msgstr ""
+msgid "Services:"
+msgstr "Dịch vụ"
 
-msgid "kiosk"
-msgstr ""
+msgid "Sale"
+msgstr "Cần bán"
 
-msgid "Fuel types:"
-msgstr ""
+msgid "brand"
+msgstr "thương hiệu"
 
-msgid "Diesel"
-msgstr ""
+msgid "oldtimer"
+msgstr "ngày xưa"
 
-msgid "Bio Diesel"
-msgstr ""
+msgid "Safety inspection"
+msgstr "kiểm tra an toàn"
 
-msgid "Diesel (Gas To Liquid - ultimate diesel)"
-msgstr ""
+msgid "DEKRA"
+msgstr "DEKRA"
 
-msgid "Diesel for Heavy Good Vehicles"
-msgstr ""
+msgid "GTÜ"
+msgstr "GTÜ"
 
-msgid "Octane 80"
-msgstr ""
+msgid "MOT"
+msgstr "MOT"
 
-msgid "Octane 91"
-msgstr ""
+msgid "TÜV"
+msgstr "TÜV"
 
-msgid "Octane 92"
-msgstr ""
+msgid "Clothes"
+msgstr "Quần áo"
 
-msgid "Octane 95"
-msgstr ""
+msgid "anchors"
+msgstr "neo"
 
-msgid "Octane 98"
-msgstr ""
+msgid "ground_slots"
+msgstr "ground_slots"
 
-msgid "Octane 100"
-msgstr ""
+msgid "informal"
+msgstr "không chính thức"
 
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
+msgid "lockers"
+msgstr "tủ khóa"
 
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
+msgid "rack"
+msgstr "rack"
 
-msgid "LPG (Liquefied petroleum gas)"
-msgstr ""
+msgid "shed"
+msgstr "đổ"
 
-msgid "CNG (Compressed Natural Gas)"
-msgstr ""
+msgid "stands"
+msgstr "đứng"
 
-msgid "1/25 mix (mofa/moped)"
-msgstr ""
-
-msgid "1/50 mix (mofa/moped)"
-msgstr ""
-
-msgid "Fuel cards:"
-msgstr ""
-
-msgid "DKV"
-msgstr ""
-
-msgid "Routex"
-msgstr ""
-
-msgid "UTA"
-msgstr ""
-
-msgid "Charging Station"
-msgstr ""
-
-msgid "Voltage"
-msgstr ""
-
-msgid "Amperage"
-msgstr ""
-
-msgid "Wash"
-msgstr ""
-
-msgid "Car Dealer"
-msgstr ""
-
-msgid "Second hand"
-msgstr ""
-
-msgid "only"
-msgstr ""
-
-msgid "Repair"
-msgstr ""
-
-msgid "Parts"
-msgstr ""
-
-msgid "Tires"
-msgstr ""
-
-msgid "Rental"
-msgstr ""
-
-msgid "Sharing"
-msgstr ""
-
-msgid "Motorcycle Dealer"
-msgstr ""
-
-msgid "independent"
-msgstr ""
-
-msgid "Services:"
-msgstr ""
-
-msgid "Sale"
-msgstr ""
-
-msgid "brand"
-msgstr ""
-
-msgid "oldtimer"
-msgstr ""
-
-msgid "Safety inspection"
-msgstr ""
-
-msgid "DEKRA"
-msgstr ""
-
-msgid "GTÜ"
-msgstr ""
-
-msgid "MOT"
-msgstr ""
-
-msgid "TÜV"
-msgstr ""
-
-msgid "Clothes"
-msgstr ""
-
-msgid "anchors"
-msgstr ""
-
-msgid "ground_slots"
-msgstr ""
-
-msgid "informal"
-msgstr ""
-
-msgid "lockers"
-msgstr ""
-
-msgid "rack"
-msgstr ""
-
-msgid "shed"
-msgstr ""
-
-msgid "stands"
-msgstr ""
-
-msgid "wall_loops"
-msgstr ""
+msgid "wall_loops"
+msgstr "wall_loops"
 
 msgid "Covered"
-msgstr ""
+msgstr "Bao"
 
 msgid "Bike Dealer"
-msgstr ""
+msgstr "Bike Dealer"
 
 msgid "Bicycles are sold"
-msgstr ""
+msgstr "Xe đạp được bán"
 
 msgid "Second-hand bicycles are sold"
-msgstr ""
+msgstr "xe đạp Second-hand được bán"
 
 msgid "Bicycles are repaired"
-msgstr ""
+msgstr "Xe đạp được sửa chữa"
 
 msgid "Bicycles are rented"
-msgstr ""
+msgstr "Xe đạp được thuê"
 
 msgid "Free bicycle pump"
-msgstr ""
+msgstr "Miễn phí xe đạp bơm"
 
 msgid "Tools for do-it-yourself repair (may be a bike co-operative)"
-msgstr ""
+msgstr "Công cụ cho-nó-do tự mình sửa chữa (có thể là một chiếc xe đạp HTX)"
 
 msgid "Bicycles are washed (for a fee)"
-msgstr ""
+msgstr "Xe đạp được rửa sạch (có thu phí)"
 
 msgid "Public Bicycle Repair Station"
-msgstr ""
+msgstr "Public xe đạp Sửa chữa Station"
 
 msgid "Chain tool"
-msgstr ""
+msgstr "công cụ Chain"
 
 msgid "Public Transport"
-msgstr ""
+msgstr "Giao thông vận tải công cộng"
 
 msgid "Public Transport Route"
-msgstr ""
+msgstr "Public Transport Route"
 
 msgid "Route type"
-msgstr ""
+msgstr "loại Route"
 
 msgid "subway"
-msgstr ""
+msgstr "tàu điện ngầm"
 
 msgid "monorail"
-msgstr ""
+msgstr "monorail"
 
 msgid "light_rail"
-msgstr ""
+msgstr "light_rail"
 
 msgid "trolleybus"
-msgstr ""
+msgstr "xe điện"
 
 msgid "aerialway"
-msgstr ""
+msgstr "aerialway"
 
 msgid "From (initial stop)"
-msgstr ""
+msgstr "Từ (stop ban đầu)"
 
 msgid "To (terminal stop)"
-msgstr ""
+msgstr "Để (stop terminal)"
 
 msgid "Via (intermediate stops)"
-msgstr ""
+msgstr "Via (dừng trung gian)"
 
 msgid "Network"
-msgstr ""
+msgstr "Network"
 
 msgid "Color (HTML name or hexadecimal code)"
-msgstr ""
+msgstr "Color (tên mã HTML hoặc thập lục phân)"
 
 msgctxt "color"
 msgid "black"
-msgstr ""
+msgstr "đen"
 
 msgctxt "color"
 msgid "brown"
-msgstr ""
+msgstr "nâu"
 
 msgctxt "color"
 msgid "green"
-msgstr ""
+msgstr "xanh"
 
 msgctxt "color"
 msgid "red"
-msgstr ""
+msgstr "đỏ"
 
 msgctxt "color"
 msgid "blue"
-msgstr ""
+msgstr "xanh"
 
 msgctxt "color"
 msgid "gray"
-msgstr ""
+msgstr "màu xám"
 
 msgctxt "color"
 msgid "white"
-msgstr ""
+msgstr "trắng"
 
 msgctxt "color"
 msgid "#CD853F"
-msgstr ""
-
-msgid "route segment"
-msgstr ""
+msgstr "# CD853F"
 
 msgid "stop position"
-msgstr ""
+msgstr "dừng lại vị trí"
 
 msgid "stop position (exit only)"
-msgstr ""
+msgstr "vị trí dừng (lối thoát duy nhất)"
 
 msgid "stop position (entry only)"
-msgstr ""
+msgstr "vị trí dừng (entry chỉ)"
 
 msgid "platform"
-msgstr ""
+msgstr "nền tảng"
 
 msgid "platform (exit only)"
-msgstr ""
+msgstr "nền tảng (lối thoát duy nhất)"
 
 msgid "platform (entry only)"
-msgstr ""
+msgstr "nền tảng (entry chỉ)"
+
+msgid "route segment"
+msgstr "đường phân khúc"
 
 msgid "Route Master"
-msgstr ""
+msgstr "Route Master"
 
 msgid "route variant/direction (at least 2)"
-msgstr ""
+msgstr "lộ biến thể / hướng (ít nhất là 2)"
 
 msgid "Stop Area"
-msgstr ""
+msgstr "Stop Area"
 
 msgid "UIC reference"
-msgstr ""
+msgstr "UIC tham khảo"
 
 msgid "UIC name"
-msgstr ""
+msgstr "tên UIC"
 
 msgid "Stop Position"
-msgstr ""
+msgstr "Stop Position"
 
 msgid "Platform"
-msgstr ""
+msgstr "Nền tảng"
 
 msgid "Subway Entrance"
-msgstr ""
+msgstr "Subway Entrance"
 
 msgid "Station or amenities"
-msgstr ""
+msgstr "Trạm hoặc tiện nghi"
 
 msgid "Bus"
-msgstr ""
+msgstr "xe buýt"
 
 msgid "Bus stop (legacy)"
-msgstr ""
+msgstr "Bus stop (di sản)"
 
 msgid "Tram stop (legacy)"
-msgstr ""
+msgstr "Tram stop (di sản)"
 
 msgid "Train"
-msgstr ""
+msgstr "Train"
 
 msgid "Railway station (legacy)"
-msgstr ""
+msgstr "ga (di sản)"
 
 msgid "Railway halt (legacy)"
-msgstr ""
+msgstr "Đường sắt dừng (di sản)"
 
 msgid "Trolleybus"
-msgstr ""
+msgstr "xe điện"
 
 msgid "Share taxi"
-msgstr ""
+msgstr "Share taxi"
 
 msgid "Funicular"
-msgstr ""
+msgstr "Funicular"
 
 msgid "Ferry"
-msgstr ""
+msgstr "Ferry"
 
 msgid "Bench"
-msgstr ""
+msgstr "Cuốn"
 
 msgid "Shelter"
-msgstr ""
+msgstr "Shelter"
 
 msgid "Highway platform (legacy)"
-msgstr ""
+msgstr "lộ nền tảng (di sản)"
 
 msgid "Railway platform (legacy)"
-msgstr ""
+msgstr "Railway nền tảng (di sản)"
 
 msgid "funicular"
-msgstr ""
+msgstr "đường sắt leo núi"
 
 msgctxt "railway"
 msgid "Station"
-msgstr ""
+msgstr "Station"
 
 msgid "Building"
-msgstr ""
+msgstr "Xây dựng"
 
 msgid "Ticket Machine"
-msgstr ""
+msgstr "Máy Ticket"
 
 msgid "Reference Number"
-msgstr ""
+msgstr "Số tham khảo"
 
 msgid "Public Transport (Legacy)"
-msgstr ""
+msgstr "Giao thông vận tải công cộng (Legacy)"
 
 msgid "Public transport route (Legacy)"
-msgstr ""
+msgstr "tuyến đường giao thông công cộng (Legacy)"
 
 msgid "forward segment"
-msgstr ""
+msgstr "phía trước đoạn"
 
 msgid "backward segment"
-msgstr ""
+msgstr "phân khúc lạc hậu"
 
 msgid "halt point"
-msgstr ""
+msgstr "tạm dừng điểm"
 
 msgid "forward halt point"
-msgstr ""
+msgstr "điểm dừng về phía trước"
 
 msgid "backward halt point"
-msgstr ""
+msgstr "điểm dừng lạc hậu"
 
 msgid "UIC-Reference"
-msgstr ""
+msgstr "UIC-Reference"
 
 msgid "Railway Halt"
-msgstr ""
+msgstr "Đường sắt Halt"
 
 msgid "Tram Stop"
-msgstr ""
+msgstr "Tram Stop"
 
 msgid "Railway Platform"
-msgstr ""
+msgstr "Đường sắt Platform"
 
 msgid "Reference (track number)"
-msgstr ""
+msgstr "Tài liệu tham khảo (theo dõi số)"
 
 msgid "Bus Station"
-msgstr ""
+msgstr "Bus Station"
 
 msgid "Bus Stop"
-msgstr ""
+msgstr "Bus Stop"
 
 msgid "Tactile Paving"
-msgstr ""
+msgstr "Tactile lát"
 
 msgid "incorrect"
-msgstr ""
+msgstr "không chính xác"
 
 msgid "Bus Platform"
-msgstr ""
+msgstr "Bus Platform"
 
 msgid "Taxi"
-msgstr ""
+msgstr "Taxi"
 
 msgid "Airport"
-msgstr ""
+msgstr "Airport"
 
 msgid "Airport Ground"
-msgstr ""
+msgstr "Airport Ground"
 
 msgid "IATA"
-msgstr ""
+msgstr "IATA"
 
 msgid "ICAO"
-msgstr ""
+msgstr "ICAO"
 
 msgid "Runway"
-msgstr ""
+msgstr "Runway"
 
 msgid "Taxiway"
-msgstr ""
+msgstr "đường lăn"
 
 msgid "Helipad"
-msgstr ""
+msgstr "băng lên thẳng"
 
 msgid "Apron"
-msgstr ""
+msgstr "Apron"
 
 msgid "Plane Parking Position"
-msgstr ""
+msgstr "Plane xe Position"
 
 msgid "Hangar"
-msgstr ""
+msgstr "Hangar"
 
 msgctxt "building"
 msgid "hangar"
-msgstr ""
+msgstr "nhà chứa máy bay"
 
 msgctxt "building"
 msgid "yes"
-msgstr ""
+msgstr "yes"
 
 msgid "Beacon"
-msgstr ""
+msgstr "Beacon"
 
 msgid "Windsock"
-msgstr ""
+msgstr "Windsock"
 
 msgid "Terminal"
-msgstr ""
+msgstr "Terminal"
 
 msgctxt "airport"
 msgid "Gate"
-msgstr ""
+msgstr "Gate"
 
 msgid "Facilities"
-msgstr ""
+msgstr "thiết bị"
 
 msgid "Accommodation"
-msgstr ""
+msgstr "Nhà trọ"
 
 msgid "Hotel"
-msgstr ""
+msgstr "Hotel"
 
 msgid "Stars"
+msgstr "Sao"
+
+msgid "Rooms"
 msgstr ""
 
-msgid "Motel"
+msgid "Beds"
 msgstr ""
 
+msgid "Motel"
+msgstr "Motel"
+
 msgid "Guest House/Bed & Breakfast"
-msgstr ""
+msgstr "Guest House / Bed & Breakfast"
 
 msgid "Chalet"
-msgstr ""
+msgstr "Chalet"
 
 msgid "Hostel"
-msgstr ""
+msgstr "Hostel"
 
 msgid "Alpine Hut"
-msgstr ""
+msgstr "Alpine Hut"
 
 msgid "Caravan Site/RV Park"
-msgstr ""
+msgstr "Caravan / RV Park"
 
 msgid "Number of places"
-msgstr ""
+msgstr "Số địa điểm"
 
 msgid "Power supply"
-msgstr ""
+msgstr "Nguồn điện"
 
 msgid "Tents allowed"
-msgstr ""
+msgstr "Lều cho phép"
 
 msgid "Camping Site"
-msgstr ""
+msgstr "Camping Site"
 
 msgid "Food+Drinks"
-msgstr ""
+msgstr "Food + Drinks"
 
 msgid "Restaurant"
-msgstr ""
+msgstr "Restaurant"
 
 msgid "Cuisine"
-msgstr ""
+msgstr "Ẩm thực"
 
 msgid "italian"
-msgstr ""
+msgstr "tiếng"
 
 msgid "chinese"
-msgstr ""
+msgstr "Trung Quốc"
 
 msgid "pizza"
-msgstr ""
+msgstr "pizza"
 
 msgid "burger"
-msgstr ""
+msgstr "hamburger"
 
 msgid "greek"
-msgstr ""
+msgstr "greek"
 
 msgid "german"
-msgstr ""
+msgstr "Đức"
 
 msgid "indian"
-msgstr ""
+msgstr "Ấn Độ"
 
 msgid "regional"
-msgstr ""
+msgstr "khu vực"
 
 msgid "kebab"
-msgstr ""
+msgstr "kebab"
 
 msgid "turkish"
-msgstr ""
+msgstr "Thổ Nhĩ Kỳ"
 
 msgid "asian"
-msgstr ""
+msgstr "Châu Á"
 
 msgid "thai"
-msgstr ""
+msgstr "Thái"
 
 msgid "mexican"
-msgstr ""
+msgstr "mexican"
 
 msgid "japanese"
-msgstr ""
+msgstr "japanese"
 
 msgid "french"
-msgstr ""
+msgstr "Pháp"
 
 msgid "sandwich"
-msgstr ""
+msgstr "sandwich"
 
 msgid "sushi"
+msgstr "sushi"
+
+msgid "steak_house"
 msgstr ""
 
 msgid "Microbrewery"
-msgstr ""
+msgstr "Microbrewery"
 
 msgid "Outdoor seating"
-msgstr ""
+msgstr "chỗ ngồi ngoài trời"
 
 msgid "Fast Food"
-msgstr ""
+msgstr "Thức ăn nhanh"
 
 msgid "fish_and_chips"
-msgstr ""
+msgstr "fish_and_chips"
 
 msgid "chicken"
-msgstr ""
+msgstr "gà"
 
 msgid "Food Court"
-msgstr ""
+msgstr "Food Court"
 
 msgid "Cafe"
-msgstr ""
+msgstr "Cafe"
 
 msgid "ice_cream"
-msgstr ""
+msgstr "ice_cream"
 
 msgid "Pub"
-msgstr ""
+msgstr "Pub"
 
 msgid "Beer Garden"
-msgstr ""
+msgstr "Beer Garden"
 
 msgid "Bar"
-msgstr ""
+msgstr "Bar"
 
 msgid "Night Club"
-msgstr ""
+msgstr "Night Club"
 
 msgid "Strip Club"
-msgstr ""
+msgstr "Strip Club"
 
 msgid "Tourism"
-msgstr ""
+msgstr "Du lịch"
 
 msgid "Attraction"
-msgstr ""
+msgstr "Attraction"
 
 msgid "Viewpoint"
-msgstr ""
+msgstr "Quan điểm"
 
 msgid "Look-Out Tower"
-msgstr ""
+msgstr "Look-Out Tower"
 
 msgid "Information Office"
-msgstr ""
+msgstr "Văn phòng Thông tin"
 
 msgid "An office where you can get information about a town or region."
 msgstr ""
+"Một văn phòng, nơi bạn có thể nhận được thông tin về một thành phố hoặc khu "
+"vực."
 
 msgid "Map"
-msgstr ""
+msgstr "Bản đồ"
 
 msgid "A board with a map."
-msgstr ""
+msgstr "Một hội đồng với một bản đồ."
 
 msgid "Detail Grade"
-msgstr ""
+msgstr "Xem chi tiết Lớp"
 
 msgid "topo"
-msgstr ""
+msgstr "topo"
 
 msgid "street"
-msgstr ""
+msgstr "đường phố"
 
 msgid "scheme"
-msgstr ""
+msgstr "Đề án"
 
 msgid "toposcope"
-msgstr ""
+msgstr "toposcope"
 
 msgid "Shown Area"
-msgstr ""
+msgstr "Shown Area"
 
 msgid "site"
-msgstr ""
+msgstr "trang web"
 
 msgid "city"
-msgstr ""
+msgstr "thành phố"
 
 msgid "region"
-msgstr ""
+msgstr "khu vực"
 
 msgid "Closer Description"
-msgstr ""
+msgstr "Closer Mô tả"
 
 msgid "Routes shown for:"
-msgstr ""
+msgstr "Tuyến đường thể hiện cho:"
 
 msgid "Hiking"
-msgstr ""
+msgstr "đi bộ"
 
 msgid "Cycling"
-msgstr ""
+msgstr "Đạp xe"
 
 msgid "Mountainbiking"
-msgstr ""
+msgstr "mountainbiking"
 
 msgid "Skiing"
-msgstr ""
+msgstr "Trượt tuyết"
 
 msgid "Riding"
-msgstr ""
+msgstr "Cưỡi"
 
 msgid "... other transportation modes possible"
-msgstr ""
+msgstr "... phương thức vận tải khác có thể"
 
 msgid "Information Board"
-msgstr ""
+msgstr "Ban Thông tin"
 
 msgid "A board with information."
-msgstr ""
+msgstr "Một bảng thông tin."
 
 msgid "Board Content"
-msgstr ""
+msgstr "Ban Nội dung"
 
 msgid "notice"
-msgstr ""
+msgstr "thông báo"
 
 msgid "history"
-msgstr ""
+msgstr "lịch sử"
 
 msgid "nature"
-msgstr ""
+msgstr "thiên nhiên"
 
 msgid "wildlife"
-msgstr ""
+msgstr "động vật hoang dã"
 
 msgid "plants"
-msgstr ""
+msgstr "nhà máy"
 
 msgid "geology"
-msgstr ""
+msgstr "địa chất"
 
 msgid "Guidepost"
-msgstr ""
+msgstr "Guidepost"
 
 msgid ""
 "A Signpost/Guidepost to indicate the directions to different destinations."
-msgstr ""
+msgstr "Một biển hiệu / Guidepost để chỉ hướng tới các điểm đến khác nhau."
 
 msgid "Information Terminal"
-msgstr ""
+msgstr "Thông tin Terminal"
 
 msgid "Information access via electronic methods."
-msgstr ""
+msgstr "tiếp cận thông tin qua các phương pháp điện tử."
 
 msgid "Closer description"
-msgstr ""
+msgstr "Mô tả Closer"
 
 msgid "Audio Guide"
-msgstr ""
+msgstr "Audio Guide"
 
 msgid "Information using headphones or a mobile phone."
-msgstr ""
+msgstr "Thông tin sử dụng tai nghe hoặc điện thoại di động."
 
 msgid "Audioguide via mobile phone?"
-msgstr ""
+msgstr "loa phóng thanh qua điện thoại di động?"
 
 msgid "Phone number"
-msgstr ""
+msgstr "Số điện thoại"
 
 msgid "Other Information Point"
-msgstr ""
+msgstr "Thông tin khác Point"
 
 msgid "Leisure"
-msgstr ""
+msgstr "Giải trí"
 
 msgid "Movie Theater/Cinema"
-msgstr ""
+msgstr "Movie Theater / Cinema"
 
 msgid "Drive-in theater"
-msgstr ""
+msgstr "Drive-trong nhà hát"
 
 msgid "3D"
-msgstr ""
+msgstr "3D"
 
 msgid "Number of screens"
-msgstr ""
+msgstr "Số lượng màn hình"
 
 msgid "Minimum age"
-msgstr ""
+msgstr "Tuổi tối thiểu"
 
 msgid "Zoo"
-msgstr ""
+msgstr "Zoo"
 
 msgid "Dog Park"
-msgstr ""
+msgstr "Dog Park"
 
 msgid "fence"
-msgstr ""
+msgstr "hàng rào"
 
 msgid "wall"
-msgstr ""
+msgstr "bức tường"
 
 msgid "Amusement/Theme Park"
-msgstr ""
+msgstr "Amusement / Theme Park"
 
 msgid "Water Park"
-msgstr ""
+msgstr "Công viên nước"
 
 msgid "Sauna"
-msgstr ""
+msgstr "hơi"
 
 msgid "Horse Riding"
+msgstr "Cưỡi ngựa"
+
+msgid "Casino"
 msgstr ""
 
 msgid "Brothel"
-msgstr ""
+msgstr "thổ"
 
 msgid "Playground"
-msgstr ""
+msgstr "sân chơi"
 
 msgid "Picnic Site"
-msgstr ""
+msgstr "Picnic trang web"
 
 msgid "Fireplace"
-msgstr ""
+msgstr "Lò"
 
 msgid "Picnic Table"
-msgstr ""
+msgstr "Picnic Table"
 
 msgid "Public Grill"
-msgstr ""
+msgstr "Công Grill"
 
 msgctxt "grill"
 msgid "Fuel"
-msgstr ""
+msgstr "nhiên liệu"
 
 msgid "charcoal"
-msgstr ""
+msgstr "than"
 
 msgid "Firepit"
-msgstr ""
+msgstr "firepit"
 
 msgid "Fishing"
-msgstr ""
+msgstr "Câu cá"
 
 msgid "Private Swimming Pool"
-msgstr ""
+msgstr "riêng Bể bơi"
 
 msgid "Culture"
-msgstr ""
+msgstr "Văn hóa"
 
 msgid "Museum"
-msgstr ""
+msgstr "Bảo tàng"
 
 msgid "Theatre"
-msgstr ""
+msgstr "Nhà hát"
 
 msgid "Library"
-msgstr ""
+msgstr "Thư viện"
 
 msgid "Arts Centre"
-msgstr ""
+msgstr "Trung tâm nghệ thuật"
 
 msgid "Artwork"
-msgstr ""
+msgstr "Ảnh minh họa"
 
 msgid "mural"
-msgstr ""
+msgstr "bức tranh tường"
 
 msgid "sculpture"
-msgstr ""
+msgstr "điêu khắc"
 
 msgid "statue"
-msgstr ""
+msgstr "bức tượng"
 
 msgid "Artist Name"
-msgstr ""
+msgstr "Artist Name"
 
 msgid "Recording Studio"
-msgstr ""
+msgstr "Recording Studio"
 
 msgid "audio"
-msgstr ""
+msgstr "audio"
 
 msgid "video"
-msgstr ""
+msgstr "video"
 
 msgid "Place of Worship"
-msgstr ""
+msgstr "Nơi thờ cúng"
 
 msgid "Church"
-msgstr "Nhà thờ"
+msgstr "Giáo Hội"
 
 msgid "Building type"
-msgstr ""
+msgstr "loại Building"
 
 msgid "basilica"
-msgstr ""
+msgstr "nhà thờ"
 
 msgid "cathedral"
-msgstr ""
+msgstr "nhà thờ"
 
 msgid "chapel"
-msgstr ""
+msgstr "nhà nguyện"
 
 msgid "church"
-msgstr ""
+msgstr "nhà thờ"
 
 msgid "temple"
-msgstr ""
+msgstr "đền thờ"
 
 msgctxt "christian"
 msgid "anglican"
-msgstr ""
+msgstr "Anh giáo"
 
 msgctxt "christian"
 msgid "baptist"
-msgstr ""
+msgstr "phái tẩy lể"
 
 msgctxt "christian"
 msgid "catholic"
-msgstr ""
+msgstr "công giáo"
 
 msgctxt "christian"
 msgid "evangelical"
-msgstr ""
+msgstr "evangelical"
 
 msgctxt "christian"
 msgid "greek_catholic"
-msgstr ""
+msgstr "greek_catholic"
 
 msgctxt "christian"
 msgid "greek_orthodox"
-msgstr ""
+msgstr "greek_orthodox"
 
 msgctxt "christian"
 msgid "jehovahs_witness"
-msgstr ""
+msgstr "jehovahs_witness"
 
 msgctxt "christian"
 msgid "lutheran"
-msgstr ""
+msgstr "Lutheran"
 
 msgctxt "christian"
 msgid "methodist"
-msgstr ""
+msgstr "theo phương pháp"
 
 msgctxt "christian"
 msgid "mormon"
-msgstr ""
+msgstr "Mặc Môn"
 
 msgctxt "christian"
 msgid "new_apostolic"
-msgstr ""
+msgstr "new_apostolic"
 
 msgctxt "christian"
 msgid "orthodox"
-msgstr ""
+msgstr "chính thống"
 
 msgctxt "christian"
 msgid "pentecostal"
-msgstr ""
+msgstr "Ngũ Tuần"
 
 msgctxt "christian"
 msgid "presbyterian"
-msgstr ""
+msgstr "Trưởng Lão"
 
 msgctxt "christian"
 msgid "protestant"
-msgstr ""
+msgstr "Tin lành"
 
 msgctxt "christian"
 msgid "quaker"
-msgstr ""
+msgstr "Quaker"
 
 msgctxt "christian"
 msgid "roman_catholic"
-msgstr ""
+msgstr "roman_catholic"
 
 msgctxt "christian"
 msgid "russian_orthodox"
-msgstr ""
+msgstr "russian_orthodox"
 
 msgctxt "christian"
 msgid "seventh_day_adventist"
-msgstr ""
+msgstr "seventh_day_adventist"
 
 msgid "Mosque"
-msgstr ""
+msgstr "Nhà thờ Hồi giáo"
 
 msgid "mosque"
-msgstr ""
+msgstr "nhà thờ Hồi giáo"
 
 msgid "ibadi"
-msgstr ""
+msgstr "ibadi"
 
 msgid "Synagogue"
-msgstr ""
+msgstr "Giáo đường Do Thái"
 
 msgid "synagogue"
-msgstr ""
+msgstr "hội"
 
 msgctxt "jewish"
 msgid "orthodox"
-msgstr ""
+msgstr "chính thống"
 
 msgctxt "jewish"
 msgid "conservative"
-msgstr ""
+msgstr "bảo thủ"
 
 msgctxt "jewish"
 msgid "reform"
-msgstr ""
+msgstr "cải cách"
 
 msgid "Buddhist Temple"
-msgstr ""
+msgstr "Đền Phật giáo"
 
 msgid "theravada"
-msgstr ""
+msgstr "Nguyên Thủy"
 
 msgid "mahayana"
-msgstr ""
+msgstr "đại thừa"
 
 msgid "vajrayana"
-msgstr ""
+msgstr "Kim Cương thừa"
 
 msgid "Hindu Temple"
-msgstr ""
+msgstr "Đền Hindu"
 
 msgid "vaishnavism"
-msgstr ""
+msgstr "vaishnavism"
 
 msgid "shaivism"
-msgstr ""
+msgstr "shaivism"
 
 msgid "shaktism"
-msgstr ""
+msgstr "shaktism"
 
 msgid "smartism"
-msgstr ""
+msgstr "smartism"
 
 msgid "Shinto Shrine"
-msgstr ""
+msgstr "Shinto Shrine"
 
 msgid "Other Place of Worship"
-msgstr ""
+msgstr "Nơi khác thờ cúng"
 
 msgid "Public Building"
-msgstr ""
+msgstr "Xây dựng công cộng"
 
 msgid "Town Hall"
-msgstr ""
+msgstr "Town Hall"
 
 msgid "Community Centre"
-msgstr ""
+msgstr "Trung tâm cộng đồng"
 
 msgid "Embassy"
-msgstr ""
+msgstr "Đại sứ quán"
 
 msgid "Courthouse"
-msgstr ""
+msgstr "Tòa án"
 
 msgid "Prison"
-msgstr ""
+msgstr "Prison"
 
 msgid "Police"
-msgstr ""
+msgstr "Cảnh sát"
 
 msgid "Ranger Station"
-msgstr ""
+msgstr "Ranger Station"
 
 msgid "Fire Station"
-msgstr ""
+msgstr "Fire Station"
 
 msgid "Post Office"
-msgstr ""
+msgstr "Post Office"
 
 msgid "Education"
-msgstr ""
+msgstr "Giáo dục"
 
 msgid "Kindergarten"
-msgstr ""
+msgstr "mẫu giáo"
 
 msgid "School"
-msgstr ""
+msgstr "School"
 
 msgid "University"
-msgstr ""
+msgstr "Đại học"
 
 msgid "College"
-msgstr ""
+msgstr "College"
 
 msgid "Driving School"
-msgstr ""
+msgstr "Driving School"
 
 msgid "License Classes"
-msgstr ""
+msgstr "Lớp học License"
 
 msgid "A;A1;B;BE;C"
-msgstr ""
+msgstr "A; A1; B; BE; C"
 
 msgid "A;A1;B;B1;C;C1;D;D1;BE;CE;C1E;DE;D1E"
-msgstr ""
+msgstr "A; A1; B; B1; C; C1; D; D1; BE; CE; C1E; DE; D1E"
 
 msgid "Health"
-msgstr ""
+msgstr "Sức khỏe"
 
 msgid "Hospital"
-msgstr ""
+msgstr "Bệnh viện"
 
 msgid "Clinic"
-msgstr ""
+msgstr "Clinic"
 
 msgid "Doctor''s Office"
-msgstr ""
+msgstr "Văn phòng của Bác sĩ"
 
 msgid "Dentist"
-msgstr ""
+msgstr "Dentist"
 
 msgid "Nursing Home"
-msgstr ""
+msgstr "Nursing Home"
 
 msgid "Retirement Home"
-msgstr ""
+msgstr "Hưu Home"
 
 msgid "Pharmacy"
-msgstr ""
+msgstr "Dược"
 
 msgid "Dispensing"
-msgstr ""
+msgstr "Pha Chế"
 
 msgid "Baby Hatch/Safe Haven"
-msgstr ""
+msgstr "Baby Hatch / Safe Haven"
 
 msgid "Emergency Access Point"
-msgstr ""
+msgstr "Emergency Access Point"
 
 msgid "Point Number"
-msgstr ""
+msgstr "điểm số"
 
 msgid "Point Name"
-msgstr ""
+msgstr "Điểm danh"
 
 msgid "Phone Number"
-msgstr ""
+msgstr "Số điện thoại"
 
 msgid "(Use international code, like +12-345-67890)"
-msgstr ""
+msgstr "(Sử dụng mã quốc tế, như + 12-345-67890)"
 
 msgid "Veterinary"
-msgstr ""
+msgstr "thú y"
 
 msgid "Toilets/Restrooms"
-msgstr ""
+msgstr "Nhà vệ sinh / Nhà vệ sinh"
 
 msgid "Access rights"
-msgstr ""
+msgstr "quyền truy cập"
 
 msgid "seasonal"
-msgstr ""
+msgstr "theo mùa"
 
 msgid "flush"
-msgstr ""
+msgstr "tuôn ra"
 
 msgid "pitlatrine"
-msgstr ""
+msgstr "pitlatrine"
 
 msgid "chemical"
-msgstr ""
+msgstr "hóa học"
 
 msgid "bucket"
-msgstr ""
+msgstr "xô"
 
 msgid "Usage Position"
-msgstr ""
+msgstr "Cách sử dụng vị trí"
 
 msgid "seated"
-msgstr ""
+msgstr "ngồi"
 
 msgid "seated;urinal"
-msgstr ""
+msgstr "ngồi; bồn tiểu"
 
 msgid "squat"
-msgstr ""
+msgstr "ngồi xổm"
 
 msgid "urinal"
-msgstr ""
+msgstr "nước tiểu"
 
 msgid "Shower"
-msgstr ""
+msgstr "Shower"
 
 msgid "Post Box"
-msgstr ""
+msgstr "Post Box"
 
 msgid "Collection times"
-msgstr ""
+msgstr "Bộ sưu tập lần"
 
 msgid "Mo-Sa 09:00"
-msgstr ""
+msgstr "Mo-Sa 09:00"
 
 msgid "Mo-Fr 17:30; Sa 12:00"
-msgstr ""
+msgstr "Mo-Fr 17:30; 12:00 Sa"
 
 msgid "Mo-Fr 15:00,19:00; Sa 15:10; Su 10:30"
-msgstr ""
+msgstr "Mo-Fr 15: 00,19: 00; Sa 15:10; 10:30 Su"
 
 msgid "Drive through"
-msgstr ""
+msgstr "Lái xe qua"
 
 msgid "Telephone"
-msgstr ""
+msgstr "Telephone"
 
 msgid "Coins"
-msgstr ""
+msgstr "đồng xu"
 
 msgctxt "payment"
 msgid "Notes"
-msgstr ""
+msgstr "Notes"
 
 msgid "Telephone cards"
-msgstr ""
+msgstr "Thẻ điện thoại"
 
 msgid "Emergency Phone"
-msgstr ""
+msgstr "khẩn cấp Điện thoại"
 
 msgid "Internet Access"
-msgstr ""
+msgstr "Truy cập Internet"
 
 msgid "Automated Defibrillator"
-msgstr ""
+msgstr "tự động khử rung tim"
 
 msgid "Located inside a building?"
-msgstr ""
+msgstr "Nằm trong một tòa nhà?"
 
 msgid "Last check date (YYYY-MM-DD)"
-msgstr ""
+msgstr "cuối ngày kiểm tra (YYYY-MM-DD)"
 
 msgid "Last check note"
-msgstr ""
+msgstr "kiểm tra lưu ý cuối cùng"
 
 msgid "Clock"
-msgstr ""
+msgstr "Đồng hồ"
 
 msgid "Display"
-msgstr ""
+msgstr "Hiển thị"
 
 msgid "analog"
-msgstr ""
+msgstr "analog"
 
 msgid "digital"
-msgstr ""
+msgstr "kỹ thuật số"
 
 msgid "sundial"
-msgstr ""
+msgstr "đồng hồ mặt trời"
 
 msgid "unorthodox"
-msgstr ""
+msgstr "không chính thống"
 
 msgid "Support"
-msgstr ""
+msgstr "Hỗ trợ"
 
 msgctxt "mounting/support"
 msgid "pole"
-msgstr ""
+msgstr "cực"
 
 msgctxt "mounting/support"
 msgid "wall_mounted"
-msgstr ""
+msgstr "wall_mounted"
 
 msgctxt "mounting/support"
 msgid "billboard"
-msgstr ""
+msgstr "billboard"
 
 msgctxt "mounting/support"
 msgid "ground"
-msgstr ""
+msgstr "mặt đất"
 
 msgid "Visibility/readability"
-msgstr ""
+msgstr "Visibility / dễ đọc"
 
 msgid "house (up to 5m)"
-msgstr ""
+msgstr "nhà (lên đến 5m)"
 
 msgid "street (up to 20m)"
-msgstr ""
+msgstr "đường phố (lên đến 20m)"
 
 msgid "area (more than 20m)"
-msgstr ""
+msgstr "khu vực (hơn 20m)"
 
 msgid "Shows current date"
-msgstr ""
+msgstr "Hiển thị ngày hiện tại"
 
 msgid "Shows temperature"
-msgstr ""
+msgstr "Hiển thị nhiệt độ"
 
 msgid "Shows barometric pressure"
-msgstr ""
+msgstr "Hiển thị áp suất khí quyển"
 
 msgid "Shows humidity"
-msgstr ""
+msgstr "Hiển thị độ ẩm"
 
-msgid "Recycling"
+msgid "Recycling Container"
 msgstr ""
 
 msgid "Batteries"
-msgstr ""
+msgstr "Pin"
 
 msgid "Cans"
+msgstr "lon"
+
+msgid "Cardboard"
+msgstr ""
+
+msgid "Electrical Appliances"
 msgstr ""
 
 msgid "Glass"
+msgstr "Thủy tinh"
+
+msgid "Glass Bottles"
+msgstr ""
+
+msgid "Green Waste"
 msgstr ""
 
 msgid "Paper"
+msgstr "Paper"
+
+msgid "Plastic"
+msgstr ""
+
+msgid "Plastic Bottles"
+msgstr ""
+
+msgid "Plastic Packaging"
 msgstr ""
 
 msgid "Scrap Metal"
+msgstr "Scrap Metal"
+
+msgid "Shoes"
+msgstr "Giày dép"
+
+msgid "Small Appliances"
 msgstr ""
 
-msgid "container"
+msgid "Waste"
 msgstr ""
 
-msgid "centre"
+msgid "Recycling Centre"
 msgstr ""
 
 msgid "Waste Basket/Trash Can"
-msgstr ""
+msgstr "Chất thải Basket / Trash Can"
 
 msgid "Waste Disposal/Dumpster"
-msgstr ""
+msgstr "xử lý chất thải / Dumpster"
 
 msgid "Sanitary Dump Station"
-msgstr ""
+msgstr "Trạm Dump vệ sinh"
 
 msgid "Suction pumpout"
-msgstr ""
+msgstr "hút pumpout"
 
 msgid "Gravity drain for hose"
 msgstr ""
@@ -18887,621 +20576,632 @@ msgid "Casette or Elsan Disposal"
 msgstr ""
 
 msgid "Operation times"
-msgstr ""
+msgstr "Thời gian hoạt động"
 
 msgid "Backrest"
-msgstr ""
+msgstr "tựa lưng"
 
 msgid "Amount of Seats"
-msgstr ""
+msgstr "Số tiền của Ghế"
 
 msgid "Type of shelter"
-msgstr ""
+msgstr "Loại hình nơi trú ẩn"
 
 msgctxt "shelter"
 msgid "basic_hut"
-msgstr ""
+msgstr "basic_hut"
 
 msgctxt "shelter"
 msgid "lean_to"
-msgstr ""
+msgstr "lean_to"
 
 msgctxt "shelter"
 msgid "picnic_shelter"
-msgstr ""
+msgstr "picnic_shelter"
 
 msgctxt "shelter"
 msgid "public_transport"
-msgstr ""
+msgstr "public_transport"
 
 msgctxt "shelter"
 msgid "weather_shelter"
-msgstr ""
+msgstr "weather_shelter"
 
 msgctxt "shelter"
 msgid "wildlife_hide"
-msgstr ""
+msgstr "wildlife_hide"
 
 msgid "Hunting Stand"
-msgstr ""
+msgstr "Săn Stand"
 
 msgid "Height"
-msgstr ""
+msgstr "Chiều cao"
 
 msgctxt "height"
 msgid "low"
-msgstr ""
+msgstr "thấp"
 
 msgctxt "height"
 msgid "half"
-msgstr ""
+msgstr "một nửa"
 
 msgctxt "height"
 msgid "full"
-msgstr ""
+msgstr "đầy đủ"
 
 msgid "Hide"
-msgstr ""
+msgstr "Hide"
 
 msgid "Lock"
-msgstr ""
+msgstr "Lock"
 
 msgid "Indoor"
-msgstr ""
+msgstr "trong nhà"
 
 msgid "Fire Hydrant"
-msgstr ""
+msgstr "chữa cháy"
 
 msgctxt "pipeline"
 msgid "underground"
-msgstr ""
+msgstr "ngầm"
 
 msgctxt "pipeline"
 msgid "pillar"
-msgstr ""
+msgstr "trụ cột"
 
 msgctxt "pipeline"
 msgid "wall"
-msgstr ""
+msgstr "bức tường"
 
 msgctxt "pipeline"
 msgid "pond"
-msgstr ""
+msgstr "ao"
 
 msgid "Diameter (in mm)"
-msgstr ""
+msgstr "Đường kính (mm)"
 
 msgid "Hydrant Position"
-msgstr ""
+msgstr "vòi Position"
 
 msgctxt "hydrant position"
 msgid "lane"
-msgstr ""
+msgstr "lane"
 
 msgctxt "hydrant position"
 msgid "parking_lot"
-msgstr ""
+msgstr "parking_lot"
 
 msgctxt "hydrant position"
 msgid "sidewalk"
-msgstr ""
+msgstr "vỉa hè"
 
 msgctxt "hydrant position"
 msgid "green"
-msgstr ""
+msgstr "xanh"
 
 msgid "Pressure (in bar)"
-msgstr ""
+msgstr "Áp lực (thanh)"
 
 msgid "suction"
-msgstr ""
+msgstr "hút"
 
 msgid "Count"
-msgstr ""
+msgstr "đếm"
 
 msgid "Advertising Column"
-msgstr ""
+msgstr "Advertising Cột"
 
 msgid "Billboard"
-msgstr ""
+msgstr "Billboard"
 
 msgid "Sports"
-msgstr ""
+msgstr "Thể thao"
 
 msgid "Sport Facilities"
-msgstr ""
+msgstr "thiết bị thể thao"
 
 msgid "Stadium"
-msgstr ""
+msgstr "Sân vận động"
 
 msgid "Sports Centre"
-msgstr ""
+msgstr "Trung tâm Thể thao"
 
 msgid "Pitch"
-msgstr ""
+msgstr "Pitch"
 
 msgid "artificial_turf"
-msgstr ""
+msgstr "artificial_turf"
 
 msgid "decoturf"
-msgstr ""
+msgstr "decoturf"
 
 msgid "tartan"
-msgstr ""
+msgstr "sọc"
 
 msgid "Racetrack"
-msgstr ""
+msgstr "Đường đua"
 
 msgid "Golf Course"
-msgstr ""
+msgstr "Golf Course"
 
 msgid "Miniature Golf"
-msgstr ""
+msgstr "Golf Miniature"
 
 msgid "Multi"
-msgstr ""
+msgstr "Multi"
 
 msgctxt "running"
 msgid "pitch"
-msgstr ""
+msgstr "pitch"
 
 msgctxt "running"
 msgid "sports_centre"
-msgstr ""
+msgstr "sports_centre"
 
 msgctxt "running"
 msgid "stadium"
-msgstr ""
+msgstr "sân vận động"
 
 msgctxt "running"
 msgid "track"
-msgstr ""
+msgstr "theo dõi"
 
 msgid "Nine-pin Bowling"
-msgstr ""
+msgstr "Nine-pin Bowling"
 
 msgid "Ten-pin Bowling"
-msgstr ""
+msgstr "Ten-pin Bowling"
 
 msgid "Archery"
-msgstr ""
+msgstr "Bắn cung"
 
 msgid "Track and Field Athletics"
+msgstr "Theo dõi và Dòng điền kinh"
+
+msgid "Running"
 msgstr ""
 
 msgid "Climbing"
-msgstr ""
+msgstr "Leo núi"
 
 msgid "Canoeing/Kayaking"
-msgstr ""
+msgstr "Canoeing / Kayaking"
 
 msgctxt "racing"
 msgid "pitch"
-msgstr ""
+msgstr "pitch"
 
 msgctxt "racing"
 msgid "sports_centre"
-msgstr ""
+msgstr "sports_centre"
 
 msgctxt "racing"
 msgid "stadium"
-msgstr ""
+msgstr "sân vận động"
 
 msgctxt "racing"
 msgid "track"
-msgstr ""
+msgstr "theo dõi"
 
 msgid "Dog Racing"
-msgstr ""
+msgstr "Dog Racing"
 
 msgid "Equestrian"
-msgstr ""
+msgstr "cưỡi ngựa"
 
 msgid "Horse Racing"
-msgstr ""
+msgstr "Đua ngựa"
 
 msgid "Gymnastics"
-msgstr ""
+msgstr "Thể dục"
 
 msgid "Skating"
-msgstr ""
+msgstr "trượt"
 
 msgid "ice_rink"
-msgstr ""
+msgstr "ice_rink"
 
 msgid "Skateboard"
-msgstr ""
+msgstr "Skateboard"
 
 msgid "Swimming"
-msgstr ""
+msgstr "bơi"
 
 msgid "swimming_pool"
-msgstr ""
+msgstr "swimming_pool"
 
 msgid "water_park"
-msgstr ""
+msgstr "water_park"
 
 msgid "Scuba Diving"
-msgstr ""
+msgstr "Scuba Diving"
 
 msgid "Piste type"
-msgstr ""
+msgstr "loại Piste"
 
 msgid "downhill"
-msgstr ""
+msgstr "xuống dốc"
 
 msgid "nordic"
-msgstr ""
+msgstr "nordic"
 
 msgid "skitour"
-msgstr ""
+msgstr "skitour"
 
 msgid "sled"
-msgstr ""
+msgstr "kéo xe"
 
 msgid "sleigh"
-msgstr ""
+msgstr "xe trượt tuyết"
 
 msgid "snow_park"
-msgstr ""
+msgstr "snow_park"
 
 msgid "Difficulty"
-msgstr ""
+msgstr "Khó khăn"
 
 msgctxt "piste:difficulty"
 msgid "novice"
-msgstr ""
+msgstr "người mới"
 
 msgctxt "piste:difficulty"
 msgid "easy"
-msgstr ""
+msgstr "dễ dàng"
 
 msgctxt "piste:difficulty"
 msgid "intermediate"
-msgstr ""
+msgstr "trung gian"
 
 msgctxt "piste:difficulty"
 msgid "advanced"
-msgstr ""
+msgstr "cấp cao"
 
 msgctxt "piste:difficulty"
 msgid "expert"
-msgstr ""
+msgstr "chuyên gia"
 
 msgctxt "piste:difficulty"
 msgid "freeride"
-msgstr ""
+msgstr "freeride"
 
 msgid "Grooming"
-msgstr ""
+msgstr "Chăm sóc"
 
 msgctxt "piste:grooming"
 msgid "classic"
-msgstr ""
+msgstr "cổ điển"
 
 msgctxt "piste:grooming"
 msgid "mogul"
-msgstr ""
+msgstr "ông trùm"
 
 msgctxt "piste:grooming"
 msgid "skating"
-msgstr ""
+msgstr "trượt"
 
 msgctxt "piste:grooming"
 msgid "classic;skating"
-msgstr ""
+msgstr "cổ điển; trượt băng"
 
 msgctxt "piste:grooming"
 msgid "scooter"
-msgstr ""
+msgstr "scooter"
 
 msgctxt "piste:grooming"
 msgid "backcountry"
-msgstr ""
+msgstr "hẻo lánh"
 
 msgid "Shooting"
-msgstr ""
+msgstr "Shooting"
 
 msgid "Sport (Ball)"
-msgstr ""
+msgstr "Sport (Ball)"
 
 msgid "Soccer"
-msgstr ""
+msgstr "bóng đá"
 
 msgid "Australian Football"
-msgstr ""
+msgstr "Bóng đá Úc"
 
 msgid "American Football"
-msgstr ""
+msgstr "bóng đá Mỹ"
 
 msgid "Canadian Football"
-msgstr ""
+msgstr "Canadian bóng đá"
 
 msgid "Gaelic Games"
-msgstr ""
+msgstr "Gaelic Games"
 
 msgid "Hurling"
-msgstr ""
+msgstr "Hurling"
 
 msgid "Football"
-msgstr ""
+msgstr "Bóng đá"
 
 msgid "Camogie"
-msgstr ""
+msgstr "Camogie"
 
 msgid "Rounders"
-msgstr ""
+msgstr "Rounders"
 
 msgid "Rugby League"
-msgstr ""
+msgstr "Rugby League"
 
 msgid "Rugby Union"
-msgstr ""
+msgstr "Rugby Union"
 
 msgid "Baseball"
-msgstr ""
+msgstr "bóng chày"
 
 msgid "Basketball"
+msgstr "bóng rổ"
+
+msgid "Handball"
 msgstr ""
 
 msgid "Volleyball"
-msgstr ""
+msgstr "bóng chuyền"
 
 msgid "Beach Volleyball"
+msgstr "Bóng chuyền bãi biển"
+
+msgid "Billiards"
 msgstr ""
 
 msgid "Golf"
-msgstr ""
+msgstr "Golf"
 
 msgid "golf_course"
-msgstr ""
+msgstr "golf_course"
 
 msgid "Boule"
-msgstr ""
+msgstr "Boule"
 
 msgid "Lawn Bowling"
-msgstr ""
+msgstr "Lawn bowling"
 
 msgid "Cricket"
-msgstr ""
-
-msgid "Cricket Nets"
-msgstr ""
+msgstr "Cricket"
 
 msgid "Croquet"
+msgstr "Croquet"
+
+msgid "Field Hockey"
 msgstr ""
 
-msgid "Hockey"
+msgid "Ice Hockey"
 msgstr ""
 
 msgid "Pelota"
-msgstr ""
+msgstr "Pelota"
 
 msgid "Racquetball"
-msgstr ""
+msgstr "vợt"
 
 msgid "Table Tennis/Ping-Pong"
-msgstr ""
+msgstr "Table Tennis / Ping-Pong"
 
 msgid "Tennis"
-msgstr ""
+msgstr "Tennis"
 
 msgid "Motorsport"
-msgstr ""
+msgstr "Motorsport"
 
 msgid "Kart Racing"
-msgstr ""
+msgstr "Kart Racing"
 
 msgid "Motocross"
-msgstr ""
-
-msgid "Safety Training"
-msgstr ""
+msgstr "Motocross"
 
 msgid "Model Aerodrome"
-msgstr ""
+msgstr "Model Aerodrome"
 
 msgctxt "aerialway"
 msgid "pitch"
-msgstr ""
+msgstr "pitch"
 
 msgctxt "aerialway"
 msgid "sports_centre"
-msgstr ""
+msgstr "sports_centre"
 
 msgctxt "aerialway"
 msgid "track"
-msgstr ""
+msgstr "theo dõi"
 
 msgid "RC Car"
-msgstr ""
-
-msgid "Raceway"
-msgstr ""
+msgstr "RC Car"
 
 msgid "Man Made"
-msgstr ""
+msgstr "Man Made"
 
 msgctxt "building"
 msgid "roof"
-msgstr ""
+msgstr "mái nhà"
 
 msgctxt "building"
 msgid "garage"
-msgstr ""
+msgstr "garage"
 
 msgctxt "building"
 msgid "garages"
-msgstr ""
+msgstr "gara"
 
 msgctxt "building"
 msgid "industrial"
-msgstr ""
+msgstr "công nghiệp"
 
 msgctxt "building"
 msgid "school"
-msgstr ""
+msgstr "trường học"
 
 msgctxt "building"
 msgid "commercial"
-msgstr ""
+msgstr "thương mại"
 
 msgctxt "building"
 msgid "barn"
-msgstr ""
+msgstr "chuồng"
 
 msgctxt "building"
 msgid "farm_auxiliary"
-msgstr ""
+msgstr "farm_auxiliary"
 
 msgctxt "building"
 msgid "transportation"
-msgstr ""
+msgstr "giao thông"
 
 msgctxt "building"
 msgid "greenhouse"
-msgstr ""
+msgstr "nhà kính"
 
 msgctxt "building"
 msgid "office"
-msgstr ""
+msgstr "văn phòng"
 
 msgctxt "building"
 msgid "university"
-msgstr ""
+msgstr "trường đại học"
 
 msgctxt "building"
 msgid "hospital"
-msgstr ""
+msgstr "bệnh viện"
 
 msgctxt "building"
 msgid "warehouse"
-msgstr ""
+msgstr "kho"
 
 msgctxt "building"
 msgid "retail"
-msgstr ""
+msgstr "bán lẻ"
 
 msgctxt "building"
 msgid "shed"
-msgstr ""
+msgstr "đổ"
 
 msgctxt "building"
 msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
-msgid "cowshed"
+msgid "supermarket"
 msgstr ""
 
 msgctxt "building"
-msgid "construction"
+msgid "gasometer"
 msgstr ""
 
 msgctxt "building"
+msgid "cowshed"
+msgstr "chuồng bò"
+
+msgctxt "building"
+msgid "construction"
+msgstr "xây dựng"
+
+msgctxt "building"
 msgid "Levels"
-msgstr ""
+msgstr "Levels"
 
 msgid "Residential Building"
-msgstr ""
+msgstr "Xây dựng Khu dân cư"
 
 msgctxt "building"
 msgid "residential"
-msgstr ""
+msgstr "dân cư"
 
 msgctxt "building"
 msgid "apartments"
-msgstr ""
+msgstr "căn hộ"
 
 msgctxt "building"
 msgid "house"
-msgstr ""
+msgstr "nhà"
 
 msgctxt "building"
 msgid "hut"
-msgstr ""
+msgstr "túp lều"
 
 msgctxt "building"
 msgid "dormitory"
-msgstr ""
+msgstr "ký túc xá"
 
 msgctxt "building"
 msgid "terrace"
-msgstr ""
+msgstr "sân thượng"
 
 msgctxt "building"
 msgid "detached"
-msgstr ""
+msgstr "tách rời"
 
 msgctxt "building"
 msgid "farm"
-msgstr ""
+msgstr "trang trại"
 
 msgid "Building part"
-msgstr ""
+msgstr "Xây dựng phần"
 
 msgctxt "building"
 msgid "Skipped Levels"
-msgstr ""
+msgstr "Bỏ qua Levels"
 
 msgid "Skipped height (meters)"
-msgstr ""
+msgstr "chiều cao Skipped (mét)"
 
 msgid "Entrance"
-msgstr ""
+msgstr "Lối vào"
 
 msgctxt "entrance"
 msgid "yes"
-msgstr ""
+msgstr "yes"
 
 msgctxt "entrance"
 msgid "main"
-msgstr ""
+msgstr "chính"
 
 msgctxt "entrance"
 msgid "service"
-msgstr ""
+msgstr "dịch vụ"
 
 msgctxt "entrance"
 msgid "exit"
-msgstr ""
+msgstr "thoát"
 
 msgctxt "entrance"
 msgid "emergency"
-msgstr ""
+msgstr "khẩn cấp"
 
 msgid "Entrance number"
-msgstr ""
+msgstr "số Entrance"
 
 msgid "Flat numbers"
-msgstr ""
+msgstr "số phẳng"
 
 msgid "Tower"
-msgstr ""
+msgstr "Tower"
 
 msgid "Tower type"
-msgstr ""
+msgstr "Tower loại"
 
 msgid "communication"
-msgstr ""
+msgstr "truyền thông"
 
 msgid "observation"
-msgstr ""
+msgstr "quan sát"
 
 msgid "Flagpole"
-msgstr ""
+msgstr "Cột cờ"
 
 msgid "Works"
-msgstr ""
+msgstr "Làm việc"
 
 msgid "Chimney"
-msgstr ""
+msgstr "Ống khói"
 
 msgid "Windmill"
-msgstr ""
+msgstr "Cối xay gió"
 
 msgid "Gasometer"
-msgstr ""
+msgstr "khí kế"
 
 msgid "Storage Tank"
 msgstr ""
@@ -19539,3203 +21239,3290 @@ msgid "wine"
 msgstr ""
 
 msgid "Bunker Silo"
-msgstr ""
+msgstr "Bunker Silo"
 
 msgid "Pipeline"
-msgstr ""
+msgstr "đường ống"
 
 msgid "water"
-msgstr ""
+msgstr "nước"
 
 msgid "gas"
-msgstr ""
+msgstr "khí"
 
 msgid "heat"
-msgstr ""
+msgstr "nhiệt"
 
 msgid "oil"
-msgstr ""
+msgstr "dầu"
 
 msgid "sewage"
-msgstr ""
+msgstr "nước thải"
 
 msgctxt "pipeline"
 msgid "underwater"
-msgstr ""
+msgstr "dưới nước"
 
 msgctxt "pipeline"
 msgid "overground"
-msgstr ""
+msgstr "trên mặt đất"
 
 msgid "Crane"
-msgstr ""
+msgstr "Crane"
 
 msgid "Mineshaft"
-msgstr ""
+msgstr "Mineshaft"
 
 msgid "Function"
-msgstr ""
+msgstr "Chức năng"
 
 msgid "winding"
-msgstr ""
+msgstr "quanh co"
 
 msgid "air"
-msgstr ""
+msgstr "không khí"
 
 msgid "Depth in meters"
-msgstr ""
+msgstr "chiều sâu trong mét"
 
 msgid "Resource"
-msgstr ""
+msgstr "tài nguyên"
 
 msgid "aggregate"
-msgstr ""
+msgstr "tổng hợp"
 
 msgid "bauxite"
-msgstr ""
+msgstr "bauxite"
 
 msgid "coal"
-msgstr ""
+msgstr "than"
 
 msgid "copper"
-msgstr ""
+msgstr "đồng"
 
 msgid "dimension_stone"
-msgstr ""
+msgstr "dimension_stone"
 
 msgid "gold"
-msgstr ""
+msgstr "vàng"
 
 msgid "ilmenite"
-msgstr ""
+msgstr "ilmenit"
 
 msgid "iron_ore"
-msgstr ""
+msgstr "iron_ore"
 
 msgid "lead"
-msgstr ""
+msgstr "dẫn dắt"
 
 msgid "limestone"
-msgstr ""
+msgstr "đá vôi"
 
 msgid "nickel"
-msgstr ""
+msgstr "nickel"
 
 msgid "rutile"
-msgstr ""
+msgstr "rutile"
 
 msgid "salt"
-msgstr ""
+msgstr "muối"
 
 msgid "silver"
-msgstr ""
+msgstr "bạc"
 
 msgid "tin"
-msgstr ""
+msgstr "tin"
 
 msgid "zinc"
-msgstr ""
+msgstr "kẽm"
 
 msgid "zircon"
-msgstr ""
+msgstr "zircon"
 
 msgid "Visible Headframe"
-msgstr ""
+msgstr "Visible Headframe"
 
 msgid "Disused"
-msgstr ""
+msgstr "bỏ hoang"
 
 msgid "Adit"
-msgstr ""
+msgstr "Adit"
 
 msgid "Length in meters"
-msgstr ""
+msgstr "Chiều dài trong mét"
 
 msgid "Water Tower"
-msgstr ""
+msgstr "tháp nước"
 
 msgid "Water Works"
-msgstr ""
+msgstr "Water Works"
 
 msgid "Wastewater Treatment Plant"
-msgstr ""
+msgstr "Điều trị Nhà máy Xử lý nước thải"
 
 msgid "Watermill"
-msgstr ""
+msgstr "Watermill"
 
 msgid "Fountain"
-msgstr ""
+msgstr "Fountain"
 
 msgid "Water Well"
-msgstr ""
+msgstr "Nước Vâng"
 
 msgid "Lighthouse"
-msgstr ""
+msgstr "Ngọn hải đăng"
 
 msgid "Street Lamp"
-msgstr ""
+msgstr "Street đèn"
 
 msgid "Mo-Fr 22:00-05:00"
-msgstr ""
+msgstr "Mo-Fr 22: 00-05: 00"
 
 msgid "Monitoring Station"
-msgstr ""
+msgstr "Giám sát Station"
 
 msgid "Monitoring:"
-msgstr ""
+msgstr "Giám sát:"
 
 msgid "Water level"
-msgstr ""
+msgstr "cấp nước"
 
 msgid "Tide Level"
-msgstr ""
+msgstr "Tide Level"
 
 msgid "Groundwater"
-msgstr ""
+msgstr "ngầm"
 
 msgid "Traffic"
-msgstr ""
+msgstr "giao thông"
 
 msgid "Air Quality"
-msgstr ""
+msgstr "Chất lượng không khí"
 
 msgid "Noise"
-msgstr ""
+msgstr "Noise"
 
 msgid "GPS Signals"
-msgstr ""
+msgstr "Tín hiệu GPS"
 
 msgid "GLONASS Signals"
-msgstr ""
+msgstr "GLONASS Tín hiệu"
 
 msgid "Galileo Signals"
-msgstr ""
+msgstr "Galileo Tín hiệu"
 
 msgid "Weather"
-msgstr ""
+msgstr "Thời tiết"
 
 msgid "Radiation"
-msgstr ""
+msgstr "bức xạ"
 
 msgid "Seismic Activity"
-msgstr ""
+msgstr "Hoạt động địa chấn"
 
 msgid "Recording:"
-msgstr ""
+msgstr "ghi:"
 
 msgid "Automated"
-msgstr ""
+msgstr "tự động"
 
 msgid "Manually"
-msgstr ""
+msgstr "Manually"
 
 msgid "Remote"
-msgstr ""
+msgstr "từ xa"
 
 msgid "Display:"
-msgstr ""
+msgstr "Hiển thị:"
 
 msgid "Analog"
-msgstr ""
+msgstr "Analog"
 
 msgid "Digital"
-msgstr ""
+msgstr "kỹ thuật số"
 
 msgid "Survey Point"
-msgstr ""
+msgstr "Khảo sát Point"
 
 msgid "Surveillance Camera"
-msgstr ""
+msgstr "Surveillance Camera"
 
 msgid "indoor"
-msgstr ""
+msgstr "trong nhà"
 
 msgid "outdoor"
-msgstr ""
+msgstr "ngoài trời"
 
 msgid "Zone"
-msgstr ""
+msgstr "Zone"
 
 msgid "parking"
-msgstr ""
+msgstr "parking"
 
 msgid "traffic"
-msgstr ""
+msgstr "giao thông"
 
 msgid "shop"
-msgstr ""
+msgstr "cửa hàng"
 
 msgid "bank"
-msgstr ""
+msgstr "ngân hàng"
 
 msgid "Camera"
-msgstr ""
+msgstr "Camera"
 
 msgctxt "camera:type"
 msgid "fixed"
-msgstr ""
+msgstr "cố định"
 
 msgctxt "camera:type"
 msgid "panning"
-msgstr ""
+msgstr "panning"
 
 msgctxt "camera:type"
 msgid "dome"
-msgstr ""
+msgstr "vòm"
 
 msgid "Mounted on"
-msgstr ""
+msgstr "đặt trên"
 
 msgctxt "camera:mount"
 msgid "wall"
-msgstr ""
+msgstr "bức tường"
 
 msgctxt "camera:mount"
 msgid "pole"
-msgstr ""
+msgstr "cực"
 
 msgctxt "camera:mount"
 msgid "ceiling"
-msgstr ""
+msgstr "trần"
 
 msgid "Direction in degrees"
-msgstr ""
+msgstr "Direction trong độ"
 
 msgid "Inclination in degrees"
-msgstr ""
+msgstr "Độ nghiêng ở các mức độ"
 
 msgid "Bridges"
-msgstr ""
+msgstr "Bridges"
 
 msgid "aqueduct"
-msgstr ""
+msgstr "aqueduct"
 
 msgid "boardwalk"
-msgstr ""
+msgstr "boardwalk"
 
 msgid "cantilever"
-msgstr ""
+msgstr "hẫng"
 
 msgid "covered"
-msgstr ""
+msgstr "bao phủ"
 
 msgid "low_water_crossing"
-msgstr ""
+msgstr "low_water_crossing"
 
 msgid "trestle"
-msgstr ""
+msgstr "giá đỡ"
 
 msgid "viaduct"
-msgstr ""
+msgstr "cầu cạn"
 
 msgid "Structure"
-msgstr ""
+msgstr "Cấu trúc"
 
 msgid "arch"
-msgstr ""
+msgstr "arch"
 
 msgid "beam"
-msgstr ""
+msgstr "chùm"
 
 msgid "truss"
-msgstr ""
+msgstr "kèo"
 
 msgid "floating"
-msgstr ""
+msgstr "nổi"
 
 msgid "suspension"
-msgstr ""
+msgstr "treo"
 
 msgid "cable-stayed"
-msgstr ""
+msgstr "dây văng"
 
 msgid "simple-suspension"
-msgstr ""
+msgstr "đơn giản-treo"
 
 msgid "humpback"
-msgstr ""
+msgstr "lưng gù"
 
 msgid "Movable Bridge"
-msgstr ""
+msgstr "Movable Bridge"
 
 msgid "bascule"
-msgstr ""
+msgstr "bascule"
 
 msgid "drawbridge"
-msgstr ""
+msgstr "cây cầu"
 
 msgid "lift"
-msgstr ""
+msgstr "thang máy"
 
 msgid "submersible"
-msgstr ""
+msgstr "chìm"
 
 msgid "swing"
-msgstr ""
+msgstr "swing"
 
 msgid "transporter"
-msgstr ""
+msgstr "vận chuyển"
 
 msgid "Bridge Support"
-msgstr ""
+msgstr "cầu Hỗ trợ"
 
 msgid "pier"
-msgstr ""
+msgstr "bến tàu"
 
 msgid "abutment"
-msgstr ""
+msgstr "trụ"
 
 msgid "lift_pier"
-msgstr ""
+msgstr "lift_pier"
 
 msgid "pivot_pier"
-msgstr ""
+msgstr "pivot_pier"
 
 msgid "Bridge outline"
-msgstr ""
+msgstr "Cầu cương"
 
 msgid "Power Plant"
-msgstr ""
+msgstr "Nhà máy điện"
 
 msgid "Output forms of energy (optional):"
-msgstr ""
+msgstr "dạng đầu ra năng lượng (tùy chọn):"
 
 msgid "Power Generator"
-msgstr ""
+msgstr "Power Generator"
 
 msgid "Biofuel Power Generator"
-msgstr ""
+msgstr "Nhiên liệu sinh học phát điện"
 
 msgid "Generator Type"
-msgstr ""
+msgstr "Generator Type"
 
 msgid "gas_turbine"
-msgstr ""
+msgstr "gas_turbine"
 
 msgid "reciprocating_engine"
-msgstr ""
+msgstr "reciprocating_engine"
 
 msgid "steam_generator"
-msgstr ""
+msgstr "steam_generator"
 
 msgid "Biogas Power Generator"
-msgstr ""
+msgstr "Biogas Máy phát điện"
 
 msgid "Biomass Power Generator"
-msgstr ""
+msgstr "Biomass máy phát điện"
 
 msgid "Method"
-msgstr ""
+msgstr "Phương pháp"
 
 msgctxt "generator method"
 msgid "anaerobic_digestion"
-msgstr ""
+msgstr "anaerobic_digestion"
 
 msgctxt "generator method"
 msgid "combustion"
-msgstr ""
+msgstr "đốt cháy"
 
 msgctxt "generator method"
 msgid "gasification"
-msgstr ""
+msgstr "khí hóa"
 
 msgid "bioreactor"
-msgstr ""
+msgstr "phản ứng sinh học"
 
 msgid "anaerobic_digestion / combustion"
-msgstr ""
+msgstr "anaerobic_digestion / đốt"
 
 msgid "pyrolysis"
-msgstr ""
+msgstr "nhiệt phân"
 
 msgid "combustion"
-msgstr ""
+msgstr "đốt cháy"
 
 msgid "steam_turbine"
-msgstr ""
+msgstr "steam_turbine"
 
 msgid "Coal Power Generator"
-msgstr ""
+msgstr "than máy phát điện"
 
 msgid "Gas Power Generator"
-msgstr ""
+msgstr "khí máy phát điện"
 
 msgid "combined_cycle"
-msgstr ""
+msgstr "combined_cycle"
 
 msgid "Oil Power Generator"
-msgstr ""
+msgstr "Dầu máy phát điện"
 
 msgid "Diesel Power Generator"
-msgstr ""
+msgstr "Diesel máy phát điện"
 
 msgid "Gasoline Power Generator"
-msgstr ""
+msgstr "xăng máy phát điện"
 
 msgid "Nuclear Reactor"
-msgstr ""
+msgstr "Nuclear Reactor"
 
 msgctxt "generator method"
 msgid "fission"
-msgstr ""
+msgstr "phân hạch"
 
 msgctxt "generator method"
 msgid "fusion"
-msgstr ""
+msgstr "nhiệt hạch"
 
 msgid "Boiling Water Reactor 1 (BWR-1)"
-msgstr ""
+msgstr "Boiling Water Reactor 1 (BWR-1)"
 
 msgid "fission"
-msgstr ""
+msgstr "phân hạch"
 
 msgid "Boiling Water Reactor 2 (BWR-2)"
-msgstr ""
+msgstr "Boiling Water Reactor 2 (BWR-2)"
 
 msgid "Boiling Water Reactor 3 (BWR-3)"
-msgstr ""
+msgstr "Boiling Water Reactor 3 (BWR-3)"
 
 msgid "Boiling Water Reactor 4 (BWR-4)"
-msgstr ""
+msgstr "Boiling Water Reactor 4 (BWR-4)"
 
 msgid "Boiling Water Reactor 5 (BWR-5)"
-msgstr ""
+msgstr "Boiling Water Reactor 5 (BWR-5)"
 
 msgid "Boiling Water Reactor 6 (BWR-6)"
-msgstr ""
+msgstr "Boiling Water Reactor 6 (BWR-6)"
 
 msgid "CANada Deuterium Uranium reactor (CANDU)"
-msgstr ""
+msgstr "Canada Deuterium Uranium lò phản ứng (CANDU)"
 
 msgid "cold-fusion"
-msgstr ""
+msgstr "lạnh-fusion"
 
 msgid "fusion"
-msgstr ""
+msgstr "nhiệt hạch"
 
 msgid "China Pressurized Reactor (CPR-1000)"
-msgstr ""
+msgstr "Trung Quốc điều áp Reactor (CPR-1000)"
 
 msgid "European Pressurized Reactor (EPR)"
-msgstr ""
+msgstr "châu Âu chịu áp Reactor (EPR)"
 
 msgid "Inertial Confinement Fusion (ICF)"
-msgstr ""
+msgstr "Inertial giam Fusion (ICF)"
 
 msgid "Pressurized water reactor (PWR)"
-msgstr ""
+msgstr "lò phản ứng nước áp lực (PWR)"
 
 msgid "Reactor Bolshoy Moshchnosti Kanalniy 1000 (RBMK-1000)"
-msgstr ""
+msgstr "Reactor Bolshoy Moshchnosti Kanalniy 1000 (RBMK-1000)"
 
 msgid "Reactor Bolshoy Moshchnosti Kanalniy 1500 (RBMK-1500)"
-msgstr ""
+msgstr "Reactor Bolshoy Moshchnosti Kanalniy 1500 (RBMK-1500)"
 
 msgid "stellarator"
-msgstr ""
+msgstr "stellarator"
 
 msgid "tokamak"
-msgstr ""
+msgstr "tokamak"
 
 msgid "Vodo-Vodyanoi Energetichesky Reactor (VVER)"
-msgstr ""
+msgstr "Vodo-Vodyanoi Energetichesky Reactor (VVER)"
 
 msgid "Solar Power Generator"
-msgstr ""
+msgstr "Solar Power Generator"
 
 msgctxt "generator method"
 msgid "photovoltaic"
-msgstr ""
+msgstr "quang điện"
 
 msgctxt "generator method"
 msgid "thermal"
-msgstr ""
+msgstr "nhiệt"
 
 msgid "solar_photovoltaic_panel"
-msgstr ""
+msgstr "solar_photovoltaic_panel"
 
 msgid "photovoltaic"
-msgstr ""
+msgstr "quang điện"
 
 msgid "solar_thermal_collector"
-msgstr ""
+msgstr "solar_thermal_collector"
 
 msgid "thermal"
-msgstr ""
+msgstr "nhiệt"
 
 msgid "Waste Power Generator"
-msgstr ""
+msgstr "Xử lý chất thải phát điện"
 
 msgctxt "generator method"
 msgid "pyrolysis"
-msgstr ""
+msgstr "nhiệt phân"
 
 msgid "gasification"
-msgstr ""
+msgstr "khí hóa"
 
 msgid "Water Turbine"
-msgstr ""
+msgstr "Nước Turbine"
 
 msgctxt "generator method"
 msgid "run-of-the-river"
-msgstr ""
+msgstr "run-of-the-sông"
 
 msgctxt "generator method"
 msgid "water-pumped-storage"
-msgstr ""
+msgstr "nước hồ chứa bằng bơm"
 
 msgctxt "generator method"
 msgid "water-storage"
-msgstr ""
+msgstr "nước lưu trữ"
 
 msgid "francis_turbine"
-msgstr ""
+msgstr "francis_turbine"
 
 msgid "all methods"
-msgstr ""
+msgstr "tất cả các phương pháp"
 
 msgid "hydrodynamic_screw"
-msgstr ""
+msgstr "hydrodynamic_screw"
 
 msgid "run-of-the-river"
-msgstr ""
+msgstr "run-of-the-sông"
 
 msgid "kaplan_turbine"
-msgstr ""
+msgstr "kaplan_turbine"
 
 msgid "run-of-the-river / water-storage"
-msgstr ""
+msgstr "run-of-the-sông / nước lưu trữ"
 
 msgid "pelton_turbine"
-msgstr ""
+msgstr "pelton_turbine"
 
 msgid "Tidal Water Turbine"
-msgstr ""
+msgstr "Turbine Tidal nước"
 
 msgctxt "generator method"
 msgid "barrage"
-msgstr ""
+msgstr "đập"
 
 msgctxt "generator method"
 msgid "stream"
-msgstr ""
+msgstr "dòng"
 
 msgid "horizontal_axis"
-msgstr ""
+msgstr "horizontal_axis"
 
 msgid "barrage"
-msgstr ""
+msgstr "đập"
 
 msgid "vertical_axis"
-msgstr ""
+msgstr "vertical_axis"
 
 msgid "Wave Energy Converter"
-msgstr ""
+msgstr "Wave Energy Converter"
 
 msgid "Osmotic Power Generator"
-msgstr ""
+msgstr "thẩm thấu phát điện"
 
 msgid "Geothermal Power Generator"
-msgstr ""
+msgstr "địa nhiệt điện Generator"
 
 msgid "heat_pump"
-msgstr ""
+msgstr "heat_pump"
 
 msgid "Wind Turbine"
-msgstr ""
+msgstr "Wind Turbine"
 
 msgid "Power Substation"
-msgstr ""
+msgstr "Power Substation"
 
 msgid "Type of substation"
-msgstr ""
+msgstr "Loại trạm biến áp"
 
 msgctxt "power"
 msgid "transmission"
-msgstr ""
+msgstr "truyền"
 
 msgctxt "power"
 msgid "distribution"
-msgstr ""
+msgstr "phân phối"
 
 msgctxt "power"
 msgid "minor_distribution"
-msgstr ""
+msgstr "minor_distribution"
 
 msgctxt "power"
 msgid "converter"
-msgstr ""
+msgstr "chuyển đổi"
 
 msgctxt "power"
 msgid "compensation"
-msgstr ""
+msgstr "bồi thường"
 
 msgctxt "power"
 msgid "transition"
-msgstr ""
+msgstr "chuyển tiếp"
 
 msgctxt "power"
 msgid "traction"
-msgstr ""
+msgstr "lực kéo"
 
 msgctxt "power"
 msgid "industrial"
-msgstr ""
+msgstr "công nghiệp"
 
 msgid "Power rating (kVA/MVA)"
-msgstr ""
+msgstr "Công suất (kVA / MVA)"
 
 msgid "2700 kVA"
-msgstr ""
+msgstr "2700 kVA"
 
 msgid "12500 kVA"
-msgstr ""
+msgstr "12500 kVA"
 
 msgid "15 MVA"
-msgstr ""
+msgstr "15 MVA"
 
 msgid "50 MVA"
-msgstr ""
+msgstr "50 MVA"
 
 msgid "100 MVA"
-msgstr ""
+msgstr "100 MVA"
 
 msgid "Gas insulated"
-msgstr ""
+msgstr "khí cách nhiệt"
 
 msgid "Power Transformer"
-msgstr ""
+msgstr "Power Transformer"
 
 msgid "Type of transformer"
-msgstr ""
+msgstr "Loại máy biến áp"
 
 msgctxt "power"
 msgid "generator"
-msgstr ""
+msgstr "máy phát điện"
 
 msgctxt "power"
 msgid "auto"
-msgstr ""
+msgstr "tự động"
 
 msgctxt "power"
 msgid "phase_angle_regulator"
-msgstr ""
+msgstr "phase_angle_regulator"
 
 msgctxt "power"
 msgid "yes"
-msgstr ""
+msgstr "yes"
 
 msgid "Phases"
-msgstr ""
+msgstr "giai đoạn"
 
 msgid "Power Switchgear"
-msgstr ""
+msgstr "Power Switchgear"
 
 msgid ""
 "(Please only use this tag if more detailed mapping using busbars and bays is "
 "impossible!)"
 msgstr ""
+"(Xin vui lòng chỉ sử dụng thẻ này nếu lập bản đồ bằng cách sử dụng thanh cái "
+"chi tiết hơn và vịnh làKhông thể!)"
 
 msgid "Power Busbar"
-msgstr ""
+msgstr "Power thanh cái"
 
 msgid "Power Bay"
-msgstr ""
+msgstr "Bay Power"
 
 msgid "Power Switch"
-msgstr ""
+msgstr "Power Switch"
 
 msgid "Power Converter"
-msgstr ""
+msgstr "Power Converter"
 
 msgid "Type of converter"
-msgstr ""
+msgstr "Loại chuyển đổi"
 
 msgctxt "power"
 msgid "lcc"
-msgstr ""
+msgstr "lcc"
 
 msgctxt "power"
 msgid "vsc"
-msgstr ""
+msgstr "VSC"
 
 msgctxt "power"
 msgid "back-to-back"
-msgstr ""
+msgstr "back-to-back"
 
 msgid "Amount of poles"
-msgstr ""
+msgstr "Số tiền cực"
 
 msgid "monopole"
-msgstr ""
+msgstr "đơn cực"
 
 msgid "bipole"
-msgstr ""
+msgstr "Bipole"
 
 msgid "Power rating (MVA)"
-msgstr ""
+msgstr "Công suất (MVA)"
 
 msgid "Power Compensator"
-msgstr ""
+msgstr "Power bù"
 
 msgid "Type of compensator"
-msgstr ""
+msgstr "Loại bù"
 
 msgctxt "power"
 msgid "shunt_reactor"
-msgstr ""
+msgstr "shunt_reactor"
 
 msgctxt "power"
 msgid "shunt_capacitor"
-msgstr ""
+msgstr "shunt_capacitor"
 
 msgctxt "power"
 msgid "static_var"
-msgstr ""
+msgstr "static_var"
 
 msgctxt "power"
 msgid "statcom"
-msgstr ""
+msgstr "STATCOM"
 
 msgctxt "power"
 msgid "synchronous_condenser"
-msgstr ""
+msgstr "synchronous_condenser"
 
 msgctxt "power"
 msgid "filter"
-msgstr ""
+msgstr "bộ lọc"
 
 msgctxt "power"
 msgid "series_reactor"
-msgstr ""
+msgstr "series_reactor"
 
 msgctxt "power"
 msgid "series_capacitor"
-msgstr ""
+msgstr "series_capacitor"
 
 msgid "Power rating (kvar/Mvar)"
-msgstr ""
+msgstr "giá điện (kVAR / MVAr)"
 
 msgid "500 kvar"
-msgstr ""
+msgstr "500 kVAR"
 
 msgid "1 Mvar"
-msgstr ""
+msgstr "1 MVAr"
 
 msgid "5 Mvar"
-msgstr ""
+msgstr "5 MVAr"
 
 msgid "Cable Distribution Cabinet"
-msgstr ""
+msgstr "cáp Tủ phân phối"
 
 msgid "Power Tower"
-msgstr ""
+msgstr "Tower Power"
 
 msgid "Type of construction"
-msgstr ""
+msgstr "Loại công trình"
 
 msgid "lattice"
-msgstr ""
+msgstr "lưới"
 
 msgid "tubular"
-msgstr ""
+msgstr "hình ống"
 
 msgid "solid"
-msgstr ""
+msgstr "rắn"
 
 msgid "steel"
-msgstr ""
+msgstr "thép"
 
 msgctxt "color"
 msgid "red/white"
-msgstr ""
+msgstr "màu đỏ / trắng"
 
 msgctxt "power"
 msgid "Tower type"
-msgstr ""
+msgstr "Tower loại"
 
 msgctxt "power"
 msgid "suspension"
-msgstr ""
+msgstr "treo"
 
 msgctxt "power"
 msgid "anchor"
-msgstr ""
+msgstr "neo"
 
 msgctxt "power"
 msgid "termination"
-msgstr ""
+msgstr "chấm dứt"
 
 msgctxt "power"
 msgid "branch"
-msgstr ""
+msgstr "chi nhánh"
 
 msgctxt "power"
 msgid "transposing"
-msgstr ""
+msgstr "transposing"
 
 msgctxt "power"
 msgid "crossing"
-msgstr ""
+msgstr "qua"
 
 msgid "Branch tower type"
-msgstr ""
+msgstr "kiểu tháp Branch"
 
 msgctxt "power"
 msgid "tap"
-msgstr ""
+msgstr "tap"
 
 msgctxt "power"
 msgid "split"
-msgstr ""
+msgstr "chia tay"
 
 msgctxt "power"
 msgid "loop"
-msgstr ""
+msgstr "loop"
 
 msgctxt "power"
 msgid "cross"
-msgstr ""
+msgstr "chéo"
 
 msgid "Tower design"
-msgstr ""
+msgstr "Tower thiết kế"
 
 msgctxt "power"
 msgid "one-level"
-msgstr ""
+msgstr "một cấp"
 
 msgctxt "power"
 msgid "two-level"
-msgstr ""
+msgstr "hai cấp"
 
 msgctxt "power"
 msgid "donau"
-msgstr ""
+msgstr "Donau"
 
 msgctxt "power"
 msgid "three-level"
-msgstr ""
+msgstr "ba cấp"
 
 msgctxt "power"
 msgid "barrel"
-msgstr ""
+msgstr "thùng"
 
 msgctxt "power"
 msgid "asymmetric"
-msgstr ""
+msgstr "không đối xứng"
 
 msgctxt "power"
 msgid "triangle"
-msgstr ""
+msgstr "tam giác"
 
 msgctxt "power"
 msgid "flag"
-msgstr ""
+msgstr "cờ"
 
 msgctxt "power"
 msgid "donau;one-level"
-msgstr ""
+msgstr "Donau; một cấp"
 
 msgctxt "power"
 msgid "four-level"
-msgstr ""
+msgstr "bốn cấp"
 
 msgctxt "power"
 msgid "six-level"
-msgstr ""
+msgstr "sáu cấp"
 
 msgctxt "power"
 msgid "nine-level"
-msgstr ""
+msgstr "chín cấp"
 
 msgctxt "power"
 msgid "delta"
-msgstr ""
+msgstr "đồng bằng"
 
 msgctxt "power"
 msgid "delta_two-level"
-msgstr ""
+msgstr "delta_two cấp"
 
 msgctxt "power"
 msgid "y-frame"
-msgstr ""
+msgstr "y-frame"
 
 msgctxt "power"
 msgid "x-frame"
-msgstr ""
+msgstr "x-frame"
 
 msgctxt "power"
 msgid "h-frame"
-msgstr ""
+msgstr "h-frame"
 
 msgctxt "power"
 msgid "guyed_h-frame"
-msgstr ""
+msgstr "guyed_h-frame"
 
 msgctxt "power"
 msgid "portal"
-msgstr ""
+msgstr "cổng thông tin"
 
 msgctxt "power"
 msgid "portal_two-level"
-msgstr ""
+msgstr "portal_two cấp"
 
 msgctxt "power"
 msgid "portal_three-level"
-msgstr ""
+msgstr "portal_three cấp"
 
 msgctxt "power"
 msgid "guyed_v-frame"
-msgstr ""
+msgstr "guyed_v-frame"
 
 msgctxt "power"
 msgid "bipole"
-msgstr ""
+msgstr "Bipole"
 
 msgctxt "power"
 msgid "monopolar"
-msgstr ""
+msgstr "đơn cực"
 
 msgid "Triple tower"
-msgstr ""
+msgstr "Triple tháp"
 
 msgid "Incomplete tower"
-msgstr ""
+msgstr "tháp Incomplete"
 
 msgid "Location transition"
-msgstr ""
+msgstr "Địa điểm chuyển tiếp"
 
 msgid "Pole"
-msgstr ""
+msgstr "Pole"
 
 msgid "Pole with Transformer"
-msgstr ""
+msgstr "Pole với Transformer"
 
 msgid "Pole Attributes:"
-msgstr ""
+msgstr "Cực thuộc tính:"
 
 msgid "Transformer Attributes:"
-msgstr ""
+msgstr "Transformer thuộc tính:"
 
 msgid "Power Line"
-msgstr ""
+msgstr "Power Line"
 
 msgid "Line type"
-msgstr ""
+msgstr "kiểu Line"
 
 msgid "line"
-msgstr ""
+msgstr "dòng"
 
 msgid "minor_line"
-msgstr ""
+msgstr "minor_line"
 
 msgid "Number of conductors/wires per cable"
-msgstr ""
+msgstr "Số dây dẫn / dây cáp cho mỗi"
 
 msgctxt "power"
 msgid "single"
-msgstr ""
+msgstr "duy nhất"
 
 msgctxt "power"
 msgid "double"
-msgstr ""
+msgstr "kép"
 
 msgctxt "power"
 msgid "triple"
-msgstr ""
+msgstr "ba"
 
 msgctxt "power"
 msgid "quad"
-msgstr ""
+msgstr "quad"
 
 msgctxt "power"
 msgid "fivefold"
-msgstr ""
+msgstr "gấp năm lần"
 
 msgctxt "power"
 msgid "sixfold"
-msgstr ""
+msgstr "gấp sáu lần"
 
 msgctxt "power"
 msgid "eightfold"
-msgstr ""
+msgstr "tám lần"
 
 msgid "Used for data communications"
-msgstr ""
+msgstr "Được sử dụng để truyền dữ liệu"
 
 msgid "Power Cable"
-msgstr ""
+msgstr "Dây cáp điện"
 
 msgctxt "power cable"
 msgid "underground"
-msgstr ""
+msgstr "ngầm"
 
 msgctxt "power cable"
 msgid "underwater"
-msgstr ""
+msgstr "dưới nước"
 
 msgctxt "power cable"
 msgid "overground"
-msgstr ""
+msgstr "trên mặt đất"
 
 msgid "Historic Places"
-msgstr ""
+msgstr "Historic Places"
 
 msgid "Castle"
-msgstr ""
+msgstr "Castle"
 
 msgid "Ruins"
-msgstr ""
+msgstr "Ruins"
 
 msgid "Archaeological Site"
-msgstr ""
+msgstr "Khảo cổ trang"
 
 msgid "Battlefield"
-msgstr ""
+msgstr "Battlefield"
 
 msgid "Palaeontological Site"
-msgstr ""
+msgstr "Site cổ sinh vật học"
 
 msgid "Monument"
-msgstr ""
+msgstr "Tượng đài"
 
 msgid "Memorial"
-msgstr ""
+msgstr "Memorial"
 
 msgctxt "memorial"
 msgid "statue"
-msgstr ""
+msgstr "bức tượng"
 
 msgctxt "memorial"
 msgid "bust"
-msgstr ""
+msgstr "phá sản"
 
 msgctxt "memorial"
 msgid "plaque"
-msgstr ""
+msgstr "mảng bám"
 
 msgctxt "memorial"
 msgid "stele"
-msgstr ""
+msgstr "bia"
 
 msgctxt "memorial"
 msgid "stone"
-msgstr ""
+msgstr "đá"
 
 msgctxt "memorial"
 msgid "war_memorial"
-msgstr ""
+msgstr "war_memorial"
 
 msgid "Inscription"
-msgstr ""
+msgstr "Công nhận"
 
 msgid "Wayside Cross"
-msgstr ""
+msgstr "Wayside Cross"
 
 msgid "Wayside Shrine"
-msgstr ""
+msgstr "Wayside Shrine"
 
 msgid "Place of worship"
-msgstr ""
+msgstr "Nơi thờ phượng"
 
 msgctxt "building"
 msgid "wayside_shrine"
-msgstr ""
+msgstr "wayside_shrine"
 
 msgid "Boundary Stone"
-msgstr ""
+msgstr "Boundary Stone"
 
 msgid "Shops"
-msgstr ""
+msgstr "Cửa hàng"
 
 msgid "Food"
-msgstr ""
+msgstr "Thực phẩm"
 
 msgid "Supermarket"
-msgstr ""
+msgstr "siêu thị"
 
 msgid "Convenience Store"
-msgstr ""
+msgstr "Convenience Store"
 
 msgid "Kiosk"
-msgstr ""
+msgstr "Kiosk"
 
 msgid "Bakery"
-msgstr ""
+msgstr "Bakery"
 
 msgid "Butcher"
-msgstr ""
+msgstr "Butcher"
 
 msgid "Seafood"
-msgstr ""
+msgstr "Seafood"
 
 msgid "Deli (Fine Food)"
-msgstr ""
+msgstr "Deli (Fine Food)"
 
 msgid "Candy Store"
-msgstr ""
+msgstr "Candy Store"
 
 msgid "Tea"
-msgstr ""
+msgstr "Tea"
 
 msgid "Coffee"
-msgstr ""
+msgstr "Coffee"
 
 msgid "Public Market"
-msgstr ""
+msgstr "Chợ công cộng"
 
 msgid "Organic"
-msgstr ""
+msgstr "hữu cơ"
 
 msgid "Greengrocer"
-msgstr ""
+msgstr "bán rau"
 
 msgid "Farm Stand"
-msgstr ""
+msgstr "Trang trại đứng"
 
 msgid "Organic/Bio"
-msgstr ""
+msgstr "hữu cơ / Bio"
 
 msgid "Fair Trade"
-msgstr ""
+msgstr "Hội chợ Thương mại"
 
 msgid "Alcohol"
-msgstr ""
+msgstr "Alcohol"
 
 msgid "Beverages"
-msgstr ""
+msgstr "Beverages"
 
 msgid "Wine"
-msgstr ""
+msgstr "Wine"
 
 msgid "Boutique"
-msgstr ""
-
-msgid "Shoes"
-msgstr ""
+msgstr "Boutique"
 
 msgid "Outdoor"
-msgstr ""
+msgstr "ngoài trời"
 
 msgid "Dry Cleaning"
-msgstr ""
+msgstr "giặt khô"
 
 msgid "Laundry"
-msgstr ""
+msgstr "giặt"
 
 msgid "Tailor"
-msgstr ""
+msgstr "Tailor"
 
 msgid "Fabric"
-msgstr ""
+msgstr "Vải"
 
 msgid "Electronic"
-msgstr ""
+msgstr "điện tử"
 
 msgid "Computer"
-msgstr ""
+msgstr "Computer"
 
 msgid "Electronics"
-msgstr ""
+msgstr "Điện tử"
 
 msgid "Mobile Phone"
-msgstr ""
+msgstr "Điện thoại di động"
 
 msgid "Vacuum Cleaner"
-msgstr ""
+msgstr "Máy hút bụi"
 
 msgid "Hifi"
-msgstr ""
+msgstr "Hifi"
 
 msgid "Video"
-msgstr ""
+msgstr "Video"
 
 msgid "Video Games"
-msgstr ""
+msgstr "Video Games"
 
 msgid "Music"
-msgstr ""
+msgstr "Âm nhạc"
 
 msgid "Cash"
-msgstr ""
+msgstr "Tiền mặt"
 
 msgid "Bank"
-msgstr ""
+msgstr "Ngân hàng"
 
 msgid "Automated Teller Machine"
-msgstr ""
+msgstr "Automated Teller Machine"
 
 msgid "Money Exchange"
-msgstr ""
+msgstr "Đổi tiền"
 
 msgid "Pawnbroker"
-msgstr ""
+msgstr "tiệm cầm đồ"
 
 msgid "Home decoration"
-msgstr ""
+msgstr "Nội thất"
 
 msgid "Furniture"
-msgstr ""
+msgstr "Furniture"
 
 msgid "Kitchen"
-msgstr ""
+msgstr "nhà bếp"
 
 msgid "Curtain"
-msgstr ""
+msgstr "Curtain"
 
 msgid "Art"
-msgstr ""
+msgstr "nghệ thuật"
 
 msgid "Frame"
-msgstr ""
+msgstr "Frame"
 
 msgid "Bed"
-msgstr ""
+msgstr "trên giường"
 
 msgid "Interior Decoration"
-msgstr ""
+msgstr "Trang trí nội thất"
 
 msgid "Antiques"
-msgstr ""
+msgstr "Đồ cổ"
 
 msgid "Printed Material"
-msgstr ""
+msgstr "Printed Material"
 
 msgid "Stationery"
-msgstr ""
+msgstr "Văn phòng"
 
 msgid "Copy Shop"
-msgstr ""
+msgstr "Copy Shop"
 
 msgid "Book Store"
-msgstr ""
+msgstr "Book Store"
 
 msgid "Newspaper Stand"
-msgstr ""
+msgstr "Báo đế"
 
 msgid "Ticket"
-msgstr ""
+msgstr "Ticket"
 
 msgid "Department Store"
-msgstr ""
+msgstr "Department Store"
 
 msgid "Mall"
-msgstr ""
+msgstr "Mall"
 
 msgid "Chemist"
-msgstr ""
+msgstr "Nhà hóa học"
 
 msgid "Hairdresser/Barber"
-msgstr ""
+msgstr "Thợ làm tóc / Barber"
 
 msgid "Beauty"
-msgstr ""
+msgstr "Beauty"
 
 msgid "Tattoo"
-msgstr ""
+msgstr "Tattoo"
 
 msgid "Optician"
-msgstr ""
+msgstr "Optician"
 
 msgid "Hearing Aids"
-msgstr ""
+msgstr "thính"
 
 msgid "Medical Supply"
-msgstr ""
+msgstr "Medical Supply"
 
 msgid "Jewellery"
-msgstr ""
+msgstr "Đồ trang sức"
 
 msgid "Gift/Souvenir"
-msgstr ""
+msgstr "quà tặng / lưu niệm"
 
 msgid "Erotic"
-msgstr ""
+msgstr "Erotic"
 
 msgid "Florist"
-msgstr ""
+msgstr "Florist"
 
 msgid "Garden Centre"
-msgstr ""
+msgstr "Garden Centre"
 
 msgid "Do-It-Yourself Store"
-msgstr ""
+msgstr "Do-It-Yourself Store"
 
 msgid "Hardware"
-msgstr ""
+msgstr "phần cứng"
 
 msgid "Paint"
-msgstr ""
+msgstr "Paint"
 
 msgid "Travel Agency"
-msgstr ""
+msgstr "Cơ quan Du lịch"
 
 msgid "Musical Instrument"
-msgstr ""
+msgstr "Cụ Musical"
 
 msgid "Toys"
-msgstr ""
+msgstr "Đồ chơi"
 
 msgid "Variety Store"
-msgstr ""
+msgstr "Variety Store"
 
 msgid "Bookmaker"
-msgstr ""
+msgstr "cược"
 
 msgid "Lottery"
-msgstr ""
+msgstr "xổ số"
 
 msgid "Bag"
-msgstr ""
+msgstr "túi"
 
 msgid "Pet"
-msgstr ""
+msgstr "Pet"
 
 msgid "Funeral Directors"
-msgstr ""
+msgstr "Giám đốc tang"
 
 msgid "Vending Machine"
-msgstr ""
+msgstr "Vending Machine"
 
 msgid "Vending products"
-msgstr ""
+msgstr "bán hàng tự động sản phẩm"
 
 msgid "animal_food"
-msgstr ""
+msgstr "animal_food"
 
 msgid "bicycle_tube"
-msgstr ""
+msgstr "bicycle_tube"
 
 msgid "cigarettes"
-msgstr ""
+msgstr "thuốc lá"
 
 msgid "condoms"
-msgstr ""
+msgstr "bao cao su"
 
 msgid "drinks"
-msgstr ""
+msgstr "đồ uống"
 
 msgid "excrement_bags"
-msgstr ""
+msgstr "excrement_bags"
 
 msgid "food"
-msgstr ""
+msgstr "thực phẩm"
 
 msgid "news_papers"
-msgstr ""
+msgstr "news_papers"
 
 msgid "parking_tickets"
-msgstr ""
+msgstr "parking_tickets"
 
 msgid "photos"
-msgstr ""
+msgstr "hình ảnh"
 
 msgid "public_transport_plans"
-msgstr ""
+msgstr "public_transport_plans"
 
 msgid "public_transport_tickets"
-msgstr ""
+msgstr "public_transport_tickets"
 
 msgid "SIM-cards"
-msgstr ""
+msgstr "SIM-card"
 
 msgid "stamps"
-msgstr ""
+msgstr "tem"
 
 msgid "sweets"
-msgstr ""
+msgstr "kẹo"
 
 msgid "tampons"
-msgstr ""
+msgstr "băng vệ sinh"
 
 msgid "telephone_vouchers"
-msgstr ""
+msgstr "telephone_vouchers"
 
 msgid "toys"
-msgstr ""
+msgstr "đồ chơi"
 
 msgid "vouchers"
-msgstr ""
+msgstr "chứng từ"
 
 msgid "Payment Methods"
-msgstr ""
+msgstr "Phương thức thanh toán"
 
 msgid "Debit cards"
-msgstr ""
+msgstr "Thẻ ghi nợ"
 
 msgid "BankAxess"
-msgstr ""
+msgstr "BankAxess"
 
 msgid "Bancomat"
-msgstr ""
+msgstr "ATM"
 
 msgid "Girocard"
-msgstr ""
+msgstr "Girocard"
 
 msgid "Laser"
-msgstr ""
+msgstr "Laser"
 
 msgid "Maestro"
-msgstr ""
+msgstr "Maestro"
 
 msgid "Visa Debit"
-msgstr ""
+msgstr "Visa Debit"
 
 msgid "Visa Electron"
-msgstr ""
+msgstr "Visa Electron"
 
 msgid "Credit cards"
-msgstr ""
+msgstr "Thẻ tín dụng"
 
 msgid "American Express"
-msgstr ""
+msgstr "American Express"
 
 msgid "Diners Club"
-msgstr ""
+msgstr "Diners Club"
 
 msgid "Discover Card"
-msgstr ""
+msgstr "Discover Card"
 
 msgid "JCB"
-msgstr ""
+msgstr "JCB"
 
 msgid "Mastercard"
-msgstr ""
+msgstr "Mastercard"
 
 msgid "Visa"
-msgstr ""
+msgstr "Visa"
 
 msgid "Electronic purses and Charge cards"
-msgstr ""
+msgstr "ví điện tử và thẻ Charge"
 
 msgid "Avant (fi)"
-msgstr ""
+msgstr "Avant (fi)"
 
 msgid "Cash (ch)"
-msgstr ""
+msgstr "Cash (ch)"
 
 msgid "Chipknip (nl)"
-msgstr ""
+msgstr "Chipknip (nl)"
 
 msgid "Geldkarte (de)"
-msgstr ""
+msgstr "Geldkarte (de)"
 
 msgid "Mep (pt)"
-msgstr ""
+msgstr "Mép (pt)"
 
 msgid "Minicash (lu)"
-msgstr ""
+msgstr "Minicash (lu)"
 
 msgid "Minipay (it)"
-msgstr ""
+msgstr "Minipay (nó)"
 
 msgid "Mondero (ar)"
-msgstr ""
+msgstr "Mondero (ar)"
 
 msgid "Mondero 4b (es)"
-msgstr ""
+msgstr "Mondero 4b (es)"
 
 msgid "Moneo (fr)"
-msgstr ""
+msgstr "Moneo (fr)"
 
 msgid "Proton (be)"
-msgstr ""
+msgstr "Proton (được)"
 
 msgid "Quick (au)"
-msgstr ""
+msgstr "Quick (au)"
 
 msgid "Cryptocurrencies"
-msgstr ""
+msgstr "Cryptocurrencies"
 
 msgid "Bitcoin"
-msgstr ""
+msgstr "Bitcoin"
 
 msgid "Dogecoin"
-msgstr ""
+msgstr "dogecoin"
 
 msgid "Litecoin"
-msgstr ""
+msgstr "Litecoin"
 
 msgid "Geography"
-msgstr ""
+msgstr "Địa lý"
 
 msgid "Boundaries"
-msgstr ""
+msgstr "Ranh giới"
 
 msgid "Administrative"
-msgstr ""
+msgstr "hành chính"
 
 msgid "Administrative level"
-msgstr ""
+msgstr "cấp hành chính"
 
 msgid "Maritime"
-msgstr ""
+msgstr "Hàng hải"
 
 msgid "Political"
-msgstr ""
+msgstr "Chính trị"
 
 msgid "Division"
-msgstr ""
+msgstr "Division"
 
 msgid "canton"
-msgstr ""
+msgstr "bang"
 
 msgid "linguistic_community"
-msgstr ""
+msgstr "linguistic_community"
 
 msgid "ward"
-msgstr ""
+msgstr "phường"
 
 msgid "Postal Code"
-msgstr ""
+msgstr "Mã bưu chính"
 
 msgid "National Park"
-msgstr ""
+msgstr "Vườn quốc gia"
 
 msgid "Protected Area"
-msgstr ""
+msgstr "Khu vực bảo vệ"
 
 msgid "Protect Class"
-msgstr ""
+msgstr "Bảo vệ Class"
 
 msgid "Title or type of protection"
-msgstr ""
+msgstr "Tiêu đề hoặc loại bảo vệ"
 
 msgid "Border type"
-msgstr ""
+msgstr "loại Border"
 
 msgid "baseline"
-msgstr ""
+msgstr "đường cơ sở"
 
 msgid "territorial"
-msgstr ""
+msgstr "lãnh thổ"
 
 msgid "contiguous"
-msgstr ""
+msgstr "liền kề"
 
 msgid "eez"
-msgstr ""
+msgstr "EEZ"
 
 msgid "Places"
-msgstr ""
+msgstr "Places"
 
 msgid "Continent"
-msgstr ""
+msgstr "Continent"
 
 msgid "Country"
-msgstr ""
+msgstr "Quốc gia"
 
 msgctxt "place"
 msgid "State"
-msgstr ""
+msgstr "Nhà nước"
 
 msgid "Region"
-msgstr ""
+msgstr "khu vực"
 
 msgid "County"
-msgstr ""
+msgstr "Hạt"
 
 msgid "City"
-msgstr ""
+msgstr "City"
 
 msgid "Town"
-msgstr ""
+msgstr "Town"
 
 msgid "Village"
-msgstr ""
+msgstr "làng"
 
 msgid "Hamlet"
-msgstr ""
+msgstr "Hamlet"
 
 msgid "Isolated Dwelling"
-msgstr ""
+msgstr "Isolated Dwelling"
 
 msgid "Suburb"
-msgstr ""
+msgstr "Ngoại ô"
 
 msgid "Neighbourhood"
-msgstr ""
+msgstr "Neighbourhood"
 
 msgid "Farm"
-msgstr ""
+msgstr "Farm"
 
 msgid "A farm within a bigger settlement"
-msgstr ""
+msgstr "Một trang trại trong một khu định cư lớn hơn"
 
 msgid "(please use isolated_dwelling for an isolated farm)"
 msgstr ""
+"(xin vui lòng sử dụng isolated_dwelling cho một trang trại bị cô lập)"
 
 msgid "Locality"
-msgstr ""
+msgstr "Địa phương"
 
 msgid "Peak"
-msgstr ""
+msgstr "Đỉnh"
 
 msgid "The top (summit) of a mountain or hill."
-msgstr ""
+msgstr "The top (đỉnh) của một ngọn núi hoặc đồi."
 
 msgid "Saddle"
-msgstr ""
+msgstr "Saddle"
 
 msgid "A saddle point between mountains or hills."
-msgstr ""
+msgstr "Một điểm yên ngựa giữa núi đồi."
 
 msgid "Glacier"
-msgstr ""
+msgstr "Glacier"
 
 msgid ""
 "A persistent body of dense ice that is constantly moving under its own "
 "weight."
 msgstr ""
+"Một cơ thể dai dẳng của băng dày đặc đó là liên tục di chuyển theo của riêng "
+"mìnhTrọng lượng"
 
 msgid "Volcano"
-msgstr ""
+msgstr "Volcano"
 
 msgid "A volcano, either dormant, extinct or active."
-msgstr ""
+msgstr "Một núi lửa, hoặc không hoạt động, tuyệt chủng hoặc đang hoạt động."
 
 msgid "Current Status"
-msgstr ""
+msgstr "Trạng thái"
 
 msgid "dormant"
-msgstr ""
+msgstr "ngủ đông"
 
 msgid "extinct"
-msgstr ""
+msgstr "tuyệt chủng"
 
 msgid "stratovolcano"
-msgstr ""
+msgstr "stratovolcano"
 
 msgid "shield"
-msgstr ""
+msgstr "lá chắn"
 
 msgid "scoria"
-msgstr ""
+msgstr "scoria"
 
 msgid "Ridge"
-msgstr ""
+msgstr "Ridge"
 
 msgid "A mountain or hill ridge."
-msgstr ""
+msgstr "Một núi hoặc đồi núi."
 
 msgid "Valley"
-msgstr ""
+msgstr "thung lũng"
 
 msgid "A low area between hills."
-msgstr ""
+msgstr "Một khu vực thấp giữa những ngọn đồi."
 
 msgid "Cave Entrance"
-msgstr ""
+msgstr "Cave Entrance"
 
 msgid "The entrance to a cave."
-msgstr ""
+msgstr "Các lối vào một hang động."
 
 msgid "Island"
-msgstr ""
+msgstr "Đảo"
 
 msgid "Islet"
-msgstr ""
+msgstr "Hòn"
 
 msgid "Nature"
-msgstr ""
+msgstr "Thiên nhiên"
 
 msgid "Tree"
-msgstr ""
+msgstr "Tree"
 
 msgid "A single tree."
-msgstr ""
+msgstr "Một cây duy nhất."
 
 msgid "Botanical Name"
-msgstr ""
+msgstr "Tên Botanical"
 
 msgid "Tree Row"
-msgstr ""
+msgstr "Tree Row"
 
 msgid "A line of trees."
-msgstr ""
+msgstr "Một hàng cây."
 
 msgid "Wood"
-msgstr ""
+msgstr "Gỗ"
 
 msgid "Woodland where timber production does not dominate use."
-msgstr ""
+msgstr "Woodland nơi sản xuất gỗ không thống trị sử dụng."
 
 msgid "Forest"
-msgstr ""
+msgstr "rừng"
 
 msgid "Cutline"
-msgstr ""
+msgstr "Cutline"
 
 msgctxt "cutline"
 msgid "border"
-msgstr ""
+msgstr "biên giới"
 
 msgctxt "cutline"
 msgid "firebreak"
-msgstr ""
+msgstr "firebreak"
 
 msgctxt "cutline"
 msgid "hunting"
-msgstr ""
+msgstr "săn"
 
 msgctxt "cutline"
 msgid "loggingmachine"
-msgstr ""
+msgstr "loggingmachine"
 
 msgctxt "cutline"
 msgid "pipeline"
-msgstr ""
+msgstr "đường ống"
 
 msgctxt "cutline"
 msgid "piste"
-msgstr ""
+msgstr "piste"
 
 msgctxt "cutline"
 msgid "section"
-msgstr ""
+msgstr "phần"
 
 msgid "Grassland"
-msgstr ""
+msgstr "Đồng cỏ"
 
 msgid ""
 "Where vegetation is dominated by grasses (Poaceae) and other herbaceous (non-"
 "woody) plants. Excludes cultivated areas and wetlands."
 msgstr ""
+"Trong trường hợp thảm thực vật chủ yếu là cỏ (Poaceae) và thân thảo khác "
+"(khôngGỗ) nhà máy. Không bao gồm các lĩnh vực và vùng đất ngập nước trồng."
 
 msgid "pampas"
-msgstr ""
+msgstr "đồng hoang"
 
 msgid "prairie"
-msgstr ""
+msgstr "cỏ"
 
 msgid "puszta"
-msgstr ""
+msgstr "Puszta"
 
 msgid "savanna"
-msgstr ""
+msgstr "xavan"
 
 msgid "steppe"
-msgstr ""
+msgstr "thảo nguyên"
 
 msgid "veld"
-msgstr ""
+msgstr "đồng cỏ lớn nhưng không có rừng"
 
 msgid "Nature Reserve"
-msgstr ""
+msgstr "Bảo tồn Thiên nhiên"
 
 msgid "Scree"
-msgstr ""
+msgstr "Scree"
 
 msgid "An accumulation of loose rocks."
-msgstr ""
+msgstr "Một sự tích lũy của các loại đá lỏng lẻo."
 
 msgid "Fell"
-msgstr ""
+msgstr "Fell"
 
 msgid ""
 "Bare upper lying uncultivated land principally covered with grass and often "
 "grazed."
 msgstr ""
+"Bare trên nằm đất không canh tác chủ yếu bao phủ bởi cỏ và thường xuyênGặm"
 
 msgid "Scrub"
-msgstr ""
+msgstr "Scrub"
 
 msgid ""
 "Bare lower lying uncultivated land with bushes but little or no tree cover."
 msgstr ""
+"Bare thấp nằm đất trống với bụi cây nhưng ít hoặc không có cây che phủ."
 
 msgid "Heath"
-msgstr ""
+msgstr "Heath"
 
 msgid ""
 "Bare lower lying uncultivated land with a shrubland habitat found mainly on "
 "free-draining infertile, acidic soils, and is characterised by open, low-"
 "growing woody vegetation."
 msgstr ""
+"Bare thấp nằm đất trống với một môi trường sống vùng cây bụi chủ yếu xuất "
+"hiện trênFree-thoát vô sinh, đất chua, và được đặc trưng bởi mở, thấpPhát "
+"triển thảm thực vật thân gỗ."
 
 msgid "Sand"
-msgstr ""
+msgstr "cát"
 
 msgid "Large area covered with sand."
-msgstr ""
+msgstr "Diện tích lớn được bao phủ bởi cát."
 
 msgid "Bare Rock"
-msgstr ""
+msgstr "Bare Rock"
 
 msgid ""
 "For areas of solid visible rock that is sparsely vegetated or not vegetated "
 "at all."
 msgstr ""
+"Đối với các khu vực đá nhìn thấy rắn được thảm thực vật thưa thớt hoặc không "
+"có thảm thực vậtỞ tất cả."
 
 msgid "Rock"
-msgstr ""
+msgstr "Rock"
 
 msgid ""
 "A notable rock or group of rocks, with at least one of them firmly attached "
 "to the underlying bedrock."
 msgstr ""
+"Một hòn đá đáng chú ý hoặc nhóm đá, với ít nhất một trong số họ luôn gắn "
+"chặtĐể các nền tảng cơ bản."
 
 msgid "Tourism attraction"
-msgstr ""
+msgstr "thu hút du lịch"
 
 msgid "Stone"
-msgstr ""
+msgstr "Stone"
 
 msgid ""
 "A single notable free-standing rock, which may differ from the composition "
 "of the terrain it lies in."
 msgstr ""
+"A đáng chú ý đá miễn phí-đứng duy nhất, mà có thể khác nhau từ các thành "
+"phầnCủa địa hình nó nằm trong"
 
 msgid "Land use"
-msgstr ""
+msgstr "sử dụng đất"
 
 msgid "Farmyard"
-msgstr ""
+msgstr "chuồng"
 
 msgid "Farmland"
-msgstr ""
+msgstr "Đất nông nghiệp"
 
 msgid "Meadow"
-msgstr ""
+msgstr "Meadow"
 
 msgid "Orchard"
-msgstr ""
+msgstr "Orchard"
 
 msgid "Vineyard"
-msgstr ""
+msgstr "Vineyard"
 
 msgid "Greenhouse Horticulture"
-msgstr ""
+msgstr "Greenhouse Horticulture"
 
 msgid "Plant Nursery"
-msgstr ""
+msgstr "Plant Nursery"
 
 msgid "Allotments"
-msgstr ""
+msgstr "lô đất"
 
 msgid "Garden"
-msgstr ""
+msgstr "Garden"
 
 msgid "Grass"
-msgstr ""
+msgstr "Cỏ"
 
 msgid "Village Green"
-msgstr ""
+msgstr "Village Green"
 
 msgid "Common"
-msgstr ""
+msgstr "thông thường"
 
 msgid "Park"
-msgstr ""
+msgstr "Park"
 
 msgid "Recreation Ground"
-msgstr ""
+msgstr "Recreation Ground"
 
 msgid "Residential Area"
-msgstr ""
+msgstr "Khu dân cư"
 
 msgid "Graveyard"
-msgstr ""
+msgstr "Nghĩa địa"
 
 msgid "Cemetery"
-msgstr ""
+msgstr "Nghĩa trang"
 
 msgid "Religious"
-msgstr ""
+msgstr "Tôn giáo"
 
 msgid "Retail"
-msgstr ""
+msgstr "bán lẻ"
 
 msgid "Commercial"
-msgstr ""
+msgstr "thương mại"
 
 msgid "Industrial"
-msgstr ""
+msgstr "công nghiệp"
 
 msgid "Garages"
-msgstr ""
+msgstr "Nhà xe"
 
 msgid "Railway Land"
-msgstr ""
+msgstr "Đường sắt Land"
 
 msgid "Military"
-msgstr ""
+msgstr "quân sự"
 
 msgid "Construction Area"
-msgstr ""
+msgstr "Diện tích xây dựng"
 
 msgid "Brownfield"
-msgstr ""
+msgstr "Brownfield"
 
 msgid "Greenfield"
-msgstr ""
+msgstr "Greenfield"
 
 msgid "Landfill"
-msgstr ""
+msgstr "bãi rác"
 
 msgid "Quarry"
-msgstr ""
+msgstr "Quarry"
 
 msgid "Annotation"
-msgstr ""
+msgstr "Chú thích"
 
 msgid "Alternative name"
-msgstr ""
+msgstr "tên thay thế"
 
 msgid "Historical name"
-msgstr ""
+msgstr "Lịch sử tên"
 
 msgid "Local name"
-msgstr ""
+msgstr "Tên địa phương"
 
 msgid "Regional name"
-msgstr ""
+msgstr "Regional tên"
 
 msgid "National name"
-msgstr ""
+msgstr "tên quốc gia"
 
 msgid "International name"
-msgstr ""
+msgstr "tên quốc tế"
 
 msgid "Official name"
-msgstr ""
+msgstr "Tên gọi chính thức"
 
 msgid "Common name abbreviation"
-msgstr ""
+msgstr "Common tên viết tắt"
 
 msgid "House number"
-msgstr ""
+msgstr "Nhà số"
 
 msgid "Street name"
-msgstr ""
+msgstr "tên Street"
 
 msgid "Place name"
-msgstr ""
+msgstr "tên Place"
 
 msgid "City name"
-msgstr ""
+msgstr "Tên City"
 
 msgid "Country code"
-msgstr ""
+msgstr "Mã quốc gia"
 
 msgid "House name"
-msgstr ""
+msgstr "House tên"
 
 msgid "Subdistrict"
-msgstr ""
+msgstr "Subdistrict"
 
 msgid "District"
-msgstr ""
+msgstr "District"
 
 msgid "Province"
-msgstr ""
+msgstr "tỉnh"
 
 msgctxt "addr:"
 msgid "State"
-msgstr ""
+msgstr "Nhà nước"
 
 msgid "AL"
-msgstr ""
+msgstr "AL"
 
 msgid "AK"
-msgstr ""
+msgstr "AK"
 
 msgid "AZ"
-msgstr ""
+msgstr "AZ"
 
 msgid "AR"
-msgstr ""
+msgstr "AR"
 
 msgid "CA"
-msgstr ""
+msgstr "CA"
 
 msgid "CO"
-msgstr ""
+msgstr "CO"
 
 msgid "CT"
-msgstr ""
+msgstr "CT"
 
 msgid "DE"
-msgstr ""
+msgstr "DE"
 
 msgid "FL"
-msgstr ""
+msgstr "FL"
 
 msgid "GA"
-msgstr ""
+msgstr "GA"
 
 msgid "HI"
-msgstr ""
+msgstr "HI"
 
 msgid "IL"
-msgstr ""
+msgstr "IL"
 
 msgid "IN"
-msgstr ""
+msgstr "IN"
 
 msgid "IA"
-msgstr ""
+msgstr "IA"
 
 msgid "KS"
-msgstr ""
+msgstr "KS"
 
 msgid "KY"
-msgstr ""
+msgstr "KY"
 
 msgid "LA"
-msgstr ""
+msgstr "LA"
 
 msgid "ME"
-msgstr ""
+msgstr "ME"
 
 msgid "MD"
-msgstr ""
+msgstr "MD"
 
 msgid "MA"
-msgstr ""
+msgstr "MA"
 
 msgid "MI"
-msgstr ""
+msgstr "MI"
 
 msgid "MN"
-msgstr ""
+msgstr "MN"
 
 msgid "MS"
-msgstr ""
+msgstr "MS"
 
 msgid "MO"
-msgstr ""
+msgstr "MO"
 
 msgid "MT"
-msgstr ""
+msgstr "MT"
 
 msgid "NE"
-msgstr ""
+msgstr "NE"
 
 msgid "NV"
-msgstr ""
+msgstr "NV"
 
 msgid "NH"
-msgstr ""
+msgstr "NH"
 
 msgid "NJ"
-msgstr ""
+msgstr "NJ"
 
 msgid "NM"
-msgstr ""
+msgstr "NM"
 
 msgid "NY"
-msgstr ""
+msgstr "NY"
 
 msgid "NC"
-msgstr ""
+msgstr "NC"
 
 msgid "ND"
-msgstr ""
+msgstr "ND"
 
 msgid "OH"
-msgstr ""
+msgstr "OH"
 
 msgid "OR"
-msgstr ""
+msgstr "OR"
 
 msgid "PA"
-msgstr ""
+msgstr "PA"
 
 msgid "RI"
-msgstr ""
+msgstr "RI"
 
 msgid "SC"
-msgstr ""
+msgstr "SC"
 
 msgid "SD"
-msgstr ""
+msgstr "SD"
 
 msgid "TN"
-msgstr ""
+msgstr "TN"
 
 msgid "TX"
-msgstr ""
+msgstr "TX"
 
 msgid "UT"
-msgstr ""
+msgstr "UT"
 
 msgid "VT"
-msgstr ""
+msgstr "VT"
 
 msgid "VA"
-msgstr ""
+msgstr "VA"
 
 msgid "WA"
-msgstr ""
+msgstr "WA"
 
 msgid "WV"
-msgstr ""
+msgstr "WV"
 
 msgid "WI"
-msgstr ""
+msgstr "WI"
 
 msgid "DC"
-msgstr ""
+msgstr "DC"
 
 msgid "AS"
-msgstr ""
+msgstr "AS"
 
 msgid "GU"
-msgstr ""
+msgstr "GU"
 
 msgid "MP"
-msgstr ""
+msgstr "MP"
 
 msgid "PR"
-msgstr ""
+msgstr "PR"
 
 msgid "UM"
-msgstr ""
+msgstr "UM"
 
 msgid "VI"
-msgstr ""
+msgstr "VI"
 
 msgid "Address Interpolation"
-msgstr ""
+msgstr "Địa chỉ Interpolation"
 
 msgid "Numbering scheme"
-msgstr ""
+msgstr "Numbering Đề án"
 
 msgid "odd"
-msgstr ""
+msgstr "kỳ lạ"
 
 msgid "even"
-msgstr ""
+msgstr "thậm chí"
 
 msgid "alphabetic"
-msgstr ""
+msgstr "chữ cái"
 
 msgid "Accuracy"
-msgstr ""
+msgstr "Độ chính xác"
 
 msgid "actual"
-msgstr ""
+msgstr "thực tế"
 
 msgid "estimate"
-msgstr ""
+msgstr "ước tính"
 
 msgid "potential"
-msgstr ""
+msgstr "tiềm năng"
 
 msgid "Contact (Common Schema)"
-msgstr ""
-
-msgid "Fax Number"
-msgstr ""
+msgstr "Liên (Schema Common)"
 
 msgid "Email Address"
-msgstr ""
+msgstr "Địa chỉ Email"
+
+msgid "Fax Number"
+msgstr "Fax Number"
 
 msgid "Image"
-msgstr ""
+msgstr "Hình ảnh"
 
 msgid "Contact (Schema with ''contact:*'' Prefix)"
-msgstr ""
+msgstr "Liên (Schema với '' liên hệ: * '' Prefix)"
 
 msgctxt "description=*"
 msgid "A short text with additional information."
-msgstr ""
+msgstr "Một văn bản ngắn với thông tin bổ sung."
 
 msgctxt "description=*"
 msgid ""
 "It might be viewable to the end user (perhaps using a search system or a map "
 "with pop-ups)."
 msgstr ""
+"Nó có thể là có thể xem được cho người dùng cuối (có thể dùng một hệ thống "
+"tìm kiếm hoặc một bản đồVới pop-up)."
 
 msgctxt "note=*, fixme=*, description=*"
 msgid "Similar but different tags:"
-msgstr ""
+msgstr "tương tự nhưng khác nhau tags:"
 
 msgctxt "the tag note=*"
 msgid "Note"
-msgstr ""
+msgstr "Ghi chú"
 
 msgctxt "note=*"
 msgid "An important hint for other mappers (not for the end user)."
 msgstr ""
+"Một gợi ý quan trọng cho vẽ bản đồ khác (không phải cho người dùng cuối)."
 
 msgid "Fixme"
-msgstr ""
+msgstr "FIXME"
 
 msgctxt "fixme=*"
 msgid ""
 "A hint for other mappers (not for the end user), that an object needs an "
 "improvement."
 msgstr ""
+"Một gợi ý cho vẽ bản đồ khác (không phải cho người dùng cuối), là một đối "
+"tượng cần mộtCải thiện"
 
 msgid "outer segment"
-msgstr ""
+msgstr "phân khúc bên ngoài"
 
 msgid "inner segment"
-msgstr ""
+msgstr "phân khúc bên trong"
 
 msgid "Boundary"
-msgstr ""
+msgstr "ranh giới"
 
 msgid "Boundary type"
-msgstr ""
+msgstr "loại ranh giới"
 
 msgid "administrative"
-msgstr ""
+msgstr "hành chính"
 
 msgid "maritime"
-msgstr ""
+msgstr "hàng hải"
 
 msgid "national_park"
-msgstr ""
+msgstr "national_park"
 
 msgid "political"
-msgstr ""
+msgstr "chính trị"
 
 msgid "postal_code"
-msgstr ""
+msgstr "postal_code"
 
 msgid "protected_area"
-msgstr ""
+msgstr "protected_area"
 
 msgid "Sub area"
-msgstr ""
+msgstr "khu vực Sub"
 
 msgid "Administration centre"
-msgstr ""
+msgstr "Quản lý trung tâm"
 
 msgid "Label point"
-msgstr ""
+msgstr "Label điểm"
 
 msgid "Site"
-msgstr ""
+msgstr "Site"
 
 msgid "Site name"
-msgstr ""
+msgstr "tên trang web"
 
 msgid "where to place the label"
-msgstr ""
+msgstr "nơi để đặt nhãn"
 
 msgid "perimeter of the site"
-msgstr ""
+msgstr "chu vi của trang web"
 
 msgid "entrances to the site, on the perimeter"
-msgstr ""
+msgstr "lối vào các trang web, trên chu vi"
 
 msgid "members of site"
-msgstr ""
+msgstr "các thành viên của trang web"
 
 msgid "Turn Restriction"
-msgstr ""
+msgstr "Bật Restriction"
 
 msgid "Restriction"
-msgstr ""
+msgstr "Hạn chế"
 
 msgid "no_left_turn"
-msgstr ""
+msgstr "no_left_turn"
 
 msgid "no_right_turn"
-msgstr ""
+msgstr "no_right_turn"
 
 msgid "no_straight_on"
-msgstr ""
+msgstr "no_straight_on"
 
 msgid "no_u_turn"
-msgstr ""
+msgstr "no_u_turn"
 
 msgid "only_right_turn"
-msgstr ""
+msgstr "only_right_turn"
 
 msgid "only_left_turn"
-msgstr ""
+msgstr "only_left_turn"
 
 msgid "only_straight_on"
-msgstr ""
+msgstr "only_straight_on"
 
 msgid "from way"
-msgstr ""
+msgstr "từ cách"
 
 msgid "via node or ways"
-msgstr ""
+msgstr "thông qua nút hoặc cách"
 
 msgid "to way"
-msgstr ""
+msgstr "với cách"
 
 msgid "Enforcement"
-msgstr ""
+msgstr "Thực thi"
 
 msgid "Type of enforcement"
-msgstr ""
+msgstr "Loại hình thi hành"
 
 msgid "maxheight"
-msgstr ""
+msgstr "maxheight"
 
 msgid "maxweight"
-msgstr ""
+msgstr "maxweight"
 
 msgid "maxspeed"
-msgstr ""
+msgstr "maxspeed"
 
 msgid "mindistance"
-msgstr ""
+msgstr "mindistance"
 
 msgid "check"
-msgstr ""
+msgstr "kiểm tra"
 
 msgid "Max. height (meters, only if enforcement=maxheight)"
-msgstr ""
+msgstr "Max. chiều cao (mét, chỉ khi thực thi = maxheight)"
 
 msgid "Max. weight (tonnes, only if enforcement=maxweight)"
-msgstr ""
+msgstr "Max. trọng lượng (tấn, chỉ khi thực thi = maxweight)"
 
 msgid "Max. speed (km/h, only if enforcement=maxspeed)"
-msgstr ""
+msgstr "tốc độ Max. (km / h, chỉ khi thực thi = maxspeed)"
 
 msgid "location of enforcement device"
-msgstr ""
+msgstr "vị trí của thiết bị thi hành"
 
 msgid "node on way where enforcement starts"
-msgstr ""
+msgstr "nút trên đường nơi thực thi bắt đầu"
 
 msgid "where enforcement ends"
-msgstr ""
+msgstr "nơi thực thi kết thúc"
 
 msgid "traffic light or barrier that stops you"
-msgstr ""
+msgstr "đèn giao thông hoặc rào cản mà dừng lại bạn"
 
 msgid "Routes"
-msgstr ""
+msgstr "đường"
 
 msgid "Bicycle Route"
-msgstr ""
+msgstr "Bicycle Route"
 
 msgid "icn"
-msgstr ""
+msgstr "ICN"
 
 msgid "ncn"
-msgstr ""
+msgstr "NCN"
 
 msgid "rcn"
-msgstr ""
+msgstr "RCN"
 
 msgid "lcn"
-msgstr ""
+msgstr "LCN"
 
 msgid "Mountain Biking Route"
-msgstr ""
+msgstr "Xe đạp leo núi Route"
 
 msgid "Hiking Route"
-msgstr ""
+msgstr "Đường đi bộ Route"
 
 msgid "iwn"
-msgstr ""
+msgstr "iwn"
 
 msgid "nwn"
-msgstr ""
+msgstr "Neverwinter Nights"
 
 msgid "rwn"
-msgstr ""
+msgstr "rwn"
 
 msgid "lwn"
-msgstr ""
+msgstr "LWN"
 
 msgid "infrastructure"
-msgstr ""
+msgstr "cơ sở hạ tầng"
 
 msgid "natural"
-msgstr ""
+msgstr "tự nhiên"
 
 msgid "Piste Route"
-msgstr ""
+msgstr "Piste Route"
 
 msgid "link segment"
-msgstr ""
+msgstr "phân khúc liên kết"
 
 msgid "shortcut segment"
-msgstr ""
+msgstr "phân khúc phím tắt"
 
 msgid "variant segment"
-msgstr ""
+msgstr "biến thể phân đoạn"
 
 msgid "entry points"
-msgstr ""
+msgstr "điểm vào"
 
 msgid "Ski Route"
-msgstr ""
+msgstr "Ski Route"
 
 msgid "alpine"
-msgstr ""
+msgstr "alpine"
 
 msgid "Detour Route"
-msgstr ""
+msgstr "Đường vòng Route"
 
 msgid "Destination"
-msgstr ""
+msgstr "Destination"
 
 msgid "Ref of the way this is a detour to"
-msgstr ""
+msgstr "Ref của con đường này là đường vòng để"
 
 msgid "fork node for alternative routes"
-msgstr ""
+msgstr "nút ngã ba cho tuyến đường thay thế"
 
 msgid "Power Route"
-msgstr ""
+msgstr "Power Route"
 
 msgid "Railway Route"
-msgstr ""
+msgstr "Đường sắt Route"
 
 msgid "Road Route"
-msgstr ""
+msgstr "đường Route"
 
 msgid "Route Network"
-msgstr ""
+msgstr "Route Network"
 
 msgid "member"
-msgstr ""
+msgstr "thành viên"
 
 msgid "Associated Street"
-msgstr ""
+msgstr "Associated Street"
 
 msgid "house"
-msgstr ""
+msgstr "nhà"
 
 msgid "Street"
-msgstr ""
+msgstr "Street"
 
 msgid "ways being part of street"
-msgstr ""
+msgstr "cách là một phần của đường phố"
 
 msgid "addresses belonging to the street"
-msgstr ""
+msgstr "các địa chỉ thuộc đường phố"
 
 msgid "houses belonging to the street"
-msgstr ""
+msgstr "nhà thuộc đường phố"
 
 msgid "anything related to the street"
-msgstr ""
+msgstr "bất cứ điều gì liên quan đến các đường phố"
 
 msgid "Destination Sign"
-msgstr ""
+msgstr "Destination Sign"
 
 msgid "Destination written on sign (w/o distance)"
-msgstr ""
+msgstr "Destination được viết trên tấm bảng (w / o xa)"
 
 msgid "Time (hh:mm, for trekking)"
-msgstr ""
+msgstr "Time (hh: mm, cho trekking)"
 
 msgid "Colour of background"
-msgstr ""
+msgstr "Màu nền"
 
 msgid "Colour of text"
-msgstr ""
+msgstr "Màu của văn bản"
 
 msgid "Colour of border/arrow"
-msgstr ""
+msgstr "Màu của biên giới / mũi tên"
 
 msgid "last way before junction"
-msgstr ""
+msgstr "cách cuối cùng trước khi ngã ba"
 
 msgid "node of the intersection"
-msgstr ""
+msgstr "nút ngã tư"
 
 msgid "first way after junction"
-msgstr ""
+msgstr "cách đầu tiên sau khi ngã"
 
 msgid "position of sign"
-msgstr ""
+msgstr "vị trí của dấu hiệu"
 
 msgid "Waterway"
-msgstr ""
+msgstr "đường thủy"
 
 msgid "Subtype of waterway (largest one of members)"
-msgstr ""
+msgstr "subtype của đường thủy (lớn nhất một trong các thành viên)"
 
 msgid "stream"
-msgstr ""
+msgstr "dòng"
 
 msgid "drain"
-msgstr ""
+msgstr "cống"
 
 msgid "ditch"
-msgstr ""
+msgstr "mương"
 
 msgid "Name of river/lake/sea/ocean it runs into"
-msgstr ""
+msgstr "Tên của con sông / hồ / biển / đại dương nó chạy vào"
 
 msgid "Reference Sandre (FR)"
-msgstr ""
+msgstr "Reference Sandre (FR)"
 
 msgid "Reference FGKZ (DE)"
-msgstr ""
+msgstr "Reference FGKZ (DE)"
 
 msgid "Reference REGINE (NO)"
-msgstr ""
+msgstr "Reference Regine (NO)"
 
 msgid "Reference GNIS (USA)"
-msgstr ""
+msgstr "Reference GNIS (USA)"
 
 msgid "Reference GNBC (CA)"
-msgstr ""
+msgstr "Reference GNBC (CA)"
 
 msgid "waterways (no riverbank)"
-msgstr ""
+msgstr "đường thủy (không có bờ sông)"
 
 msgid "branch waterways (no riverbank)"
-msgstr ""
+msgstr "đường nhánh (không có bờ sông)"
 
 msgid "spring of waterway"
-msgstr ""
+msgstr "mùa xuân thuỷ"
 
 msgid "Length (meters)"
-msgstr ""
+msgstr "Chiều dài (m)"
 
 msgid "ways supported by (on top of) the bridge"
-msgstr ""
+msgstr "cách hỗ trợ bởi (phía trên) cây cầu"
 
 msgid "ways passing under the bridge"
-msgstr ""
+msgstr "cách đi qua dưới cầu"
 
 msgid "way forming the outline footprint"
-msgstr ""
+msgstr "cách hình thành các dấu chân cương"
 
 msgid "edge ways parallel to ''across''"
-msgstr ""
+msgstr "cách cạnh song song với '' qua ''"
 
 msgid "ways passing through the tunnel"
-msgstr ""
+msgstr "cách đi qua đường hầm"
 
 msgid "edge ways parallel to ''through''"
-msgstr ""
+msgstr "cách cạnh song song với '' thông qua ''"
 
 msgid "Tunnel Start"
-msgstr ""
+msgstr "Tunnel Start"
 
 msgid "Village/City"
-msgstr "Làng/Thành phố"
+msgstr "Village / City"
 
 msgid "One Way"
-msgstr "Một chiều"
+msgstr "One Way"
 
 msgid "Fuel Station"
-msgstr "Trạm xăng"
+msgstr "trạm nhiên liệu"
 
 msgid "Shopping"
-msgstr "Cửa hàng"
+msgstr "Mua sắm"
 
 msgid "WC"
-msgstr "Nhà vệ sinh"
+msgstr "WC"
 
 msgid "Camping"
-msgstr ""
+msgstr "cắm trại"
 
 msgid "Test"
-msgstr "Kiểm tra"
+msgstr "Test"
 
 msgid "Decreasing house numbers in addresses interpolation"
-msgstr ""
+msgstr "Giảm số căn nhà tại địa chỉ nội suy"
 
 msgid "{0} without {1}"
-msgstr ""
+msgstr "{0} không có {1}"
 
 msgid "{0} without {1} or {2}"
-msgstr ""
+msgstr "{0} không có {1} hoặc {2}"
 
 msgid "{0} without {1}, {2} or {3}"
-msgstr ""
+msgstr "{0} không có {1}, {2} hoặc {3}"
 
 msgid "{0} together with {1}"
-msgstr ""
+msgstr "{0} cùng với {1}"
 
 msgid "incomplete object: only {0}"
-msgstr ""
+msgstr "đối tượng không đầy đủ: chỉ {0}"
 
 msgid "incomplete object: only {0} and {1}"
-msgstr ""
+msgstr "đối tượng không đầy đủ: chỉ {0} và {1}"
 
 msgid "{0} together with addr:*"
+msgstr "{0} cùng với addr: *"
+
+msgid "{0} together with {1} and conflicting values"
 msgstr ""
 
 msgid "{0} on suspicious object"
-msgstr ""
+msgstr "{0} vào đối tượng đáng ngờ"
 
 msgid "restaurant without name"
-msgstr ""
+msgstr "nhà hàng không tên"
 
 msgid "{0} used with {1}"
-msgstr ""
+msgstr "{0} được sử dụng với {1}"
 
 msgid "natural water used for swimming pool"
-msgstr ""
+msgstr "nước thiên nhiên dùng cho bể bơi"
 
 msgid "sport without physical feature"
-msgstr ""
+msgstr "thể thao mà không tính năng vật lý"
 
 msgid "{0} should be on the node where {1} and {2} intersect"
-msgstr ""
+msgstr "{0} nên được trên nút nơi {1} và {2} giao nhau"
 
 msgid "alternative name without {0}"
-msgstr ""
+msgstr "tên thay thế mà không {0}"
 
 msgid "incomplete usage of {0} on a way without {1}"
+msgstr "sử dụng không đầy đủ của {0} vào một cách mà không {1}"
+
+msgid "Same value of {0} and {1}"
 msgstr ""
 
-msgid "{0}={1} is deprecated"
+msgid "Same value of {0}, {1} and {2}"
 msgstr ""
 
-msgid "{0} is deprecated"
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
 msgstr ""
 
+msgid "{0}={1} is deprecated"
+msgstr "{0} = {1} là bị phản đối"
+
+msgid "{0} is deprecated"
+msgstr "{0} bị phản đối"
+
 msgid "''{0}'' is meaningless, use more specific tags, e.g. ''{1}''"
 msgstr ""
+"'' {0} '' là vô nghĩa, sử dụng các thẻ cụ thể hơn, ví dụ như '' {1} ''"
 
 msgid ""
 "''{0}'' does not specify the official mode of transportation, use ''{1}'' "
 "for example"
 msgstr ""
+"'' {0} '' không xác định chế độ chính thức của giao thông vận tải, sử dụng "
+"'' {1} ''Ví dụ"
 
 msgid ""
 "{0}={1} is unspecific. Instead of ''{1}'' please give more information about "
 "what exactly should be fixed."
 msgstr ""
+"{0} = {1} là không đặc hiệu. Thay vì '' {1} '' xin vui lòng cho biết thêm "
+"thông tin vềChính xác những gì cần được cố định."
 
 msgid "{0}={1} is deprecated. Please use instead a multipolygon."
-msgstr ""
+msgstr "{0} = {1} là bị phản đối. Vui lòng sử dụng thay vì một multipolygon."
 
 msgid ""
 "{0} is deprecated. Please specify interval by using opening_hours syntax"
 msgstr ""
+"{0} bị phản đối. Hãy xác định khoảng thời gian bằng cách sử dụng cú pháp "
+"opening_hours"
 
 msgid ""
 "{0} is deprecated. Please delete this object and use a private layer instead"
 msgstr ""
+"{0} bị phản đối. Xin vui lòng xóa đối tượng này và sử dụng một lớp riêng "
+"thay vì"
 
 msgid "{0}={1} is unspecific. Please replace ''{1}'' by a specific value."
 msgstr ""
+"{0} = {1} là không đặc hiệu. Hãy thay thế '' {1} '' bởi một giá trị cụ thể."
 
 msgid "{0} should be replaced with {1}"
-msgstr ""
+msgstr "{0} nên được thay thế bằng {1}"
 
 msgid "{0} = {1}; remove {0}"
-msgstr ""
+msgstr "{0} = {1}; bỏ {0}"
 
 msgid ""
 "{0}={1} is unspecific. Please replace ''{1}'' by ''left'', ''right'' or "
 "''both''."
 msgstr ""
+"{0} = {1} là không đặc hiệu. Hãy thay thế '' {1} '' bằng '' trái '', '' đúng "
+"'' hay'' Cả hai ''."
 
 msgid "Unspecific tag {0}"
-msgstr ""
+msgstr "tag không đặc hiệu {0}"
 
 msgid "Definition of {0} is unclear"
-msgstr ""
+msgstr "Định nghĩa của {0} là không rõ ràng"
 
 msgid ""
 "{0} is not recommended. Use the Reverse Ways function from the Tools menu."
-msgstr ""
+msgstr "{0} là không nên. Sử dụng chức năng Xếp cách từ menu Tools."
 
 msgid "key with uncommon character"
-msgstr ""
+msgstr "chìa khóa với nhân vật hiếm"
 
 msgid "uncommon short key"
+msgstr "chìa khóa ngắn không phổ biến"
+
+msgid "{0} is inaccurate"
 msgstr ""
 
 msgid "{0} on a node. Should be used on a way."
-msgstr ""
+msgstr "{0} trên một nút. Nên được sử dụng trên một con đường."
 
 msgid "{0} on a node. Should be drawn as an area."
-msgstr ""
+msgstr "{0} trên một nút. nên được rút ra như là một khu vực."
 
 msgid "{0}=* on a node. Should be used in a relation"
-msgstr ""
+msgstr "{0} = * trên một nút. Nên được sử dụng trong một mối quan hệ"
 
 msgid "{0} on a way. Should be used on a node."
-msgstr ""
+msgstr "{0} trên một cách. Nên được sử dụng trên một nút."
 
 msgid "{0} on a way. Should be used in a relation"
-msgstr ""
+msgstr "{0} trên một cách. Nên được sử dụng trong một mối quan hệ"
 
 msgid "{0} on a node"
-msgstr ""
+msgstr "{0} vào một nút"
 
 msgid "Building inside building"
-msgstr ""
+msgstr "Xây dựng bên trong tòa nhà"
 
 msgid "Overlapping Water Areas"
-msgstr ""
+msgstr "vùng nước chồng chéo"
 
 msgid "Overlapping Areas"
-msgstr ""
+msgstr "Chồng chéo khu vực"
 
 msgid "{0} inside {1}"
-msgstr ""
+msgstr "{0} trong {1}"
 
 msgid "Overlapping Identical Natural Areas"
-msgstr ""
+msgstr "Chồng chéo Khu vực tự nhiên giống hệt"
 
 msgid "Overlapping Identical Landuses"
-msgstr ""
+msgstr "Chồng chéo Landuses giống hệt"
 
 msgid "{0} must be connected to a way"
-msgstr ""
+msgstr "{0} phải được kết nối một cách"
 
 msgid "node connects waterway and bridge"
-msgstr ""
+msgstr "nút kết nối đường thủy và cầu nối"
 
 msgid "abbreviated street name"
-msgstr ""
+msgstr "tên đường tắt"
 
 msgid "wrong highway tag on a node"
-msgstr ""
+msgstr "tag lộ sai trên một nút"
 
 msgid "wrong crossing tag on a way"
-msgstr ""
+msgstr "tag qua sai về một cách"
 
 msgid "Unnamed unclassified highway"
-msgstr ""
+msgstr "không được phân loại đường cao tốc vô danh"
 
 msgid "highway without a reference"
-msgstr ""
+msgstr "đường cao tốc mà không có một tài liệu tham khảo"
 
 msgid "temporary highway type"
-msgstr ""
+msgstr "đường cao tốc loại tạm thời"
 
 msgid "street name contains ss"
-msgstr ""
+msgstr "tên đường phố chứa ss"
 
 msgid ""
 "Value of ''{0}'' should either be ''{1}'' or ''{2}''. For sidewalks use "
 "''{3}'' instead."
 msgstr ""
+"Giá trị của '' {0} '' hoặc nên là '' {1} '' hoặc '' {2} ''. Đối với vỉa hè "
+"sử dụng'' {3} '' thay thế."
 
 msgid "{0} with multiple values"
-msgstr ""
+msgstr "{0} với nhiều giá trị"
 
 msgid "empty value in semicolon-separated ''{0}''"
-msgstr ""
+msgstr "giá trị sản phẩm nào trong dấu chấm phẩy '' {0} ''"
 
 msgid "numerical key"
-msgstr ""
+msgstr "phím số"
 
 msgid "layer tag with + sign"
-msgstr ""
+msgstr "layer tag với + dấu hiệu"
 
 msgid "layer should be between -5 and 5"
-msgstr ""
+msgstr "lớp nên được giữa -5 và 5"
 
 msgid "level should be numbers with optional .5 increments"
-msgstr ""
+msgstr "mức nên số với gia số tùy chọn 0,5"
 
 msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
+"{0}: mét là mặc định; thời gian là dấu phân cách, nếu đơn vị, đưa không gian "
+"sau đó đơn vị"
+
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
 
 msgid "unusual {0} format"
+msgstr "không bình thường {0} format"
+
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
 msgstr ""
 
 msgid "voltage should be in volts with no units/delimiter/spaces"
-msgstr ""
+msgstr "điện áp phải ở trong volts không có đơn vị / delimiter / không gian"
 
 msgid "unusual {0} specification"
-msgstr ""
+msgstr "không bình thường {0} đặc điểm kỹ thuật"
 
 msgid "unusual train track gauge; use mm with no separator"
 msgstr ""
+"không bình thường tàu theo dõi đo lường; sử dụng mm không có dấu phân cách"
 
 msgid "unusual incline; use percentages/degrees or up/down"
-msgstr ""
+msgstr "nghiêng bất thường; sử dụng tỷ lệ phần trăm / độ hoặc lên / xuống"
 
 msgid "{0} must be a numeric value"
-msgstr ""
+msgstr "{0} phải là một giá trị số"
 
 msgid "{0} must be a positive integer number"
-msgstr ""
+msgstr "{0} phải là một số nguyên dương"
 
 msgid "relation without type"
-msgstr ""
+msgstr "mối quan hệ không có loại"
 
 msgid "{0} relation without {0} tag"
-msgstr ""
+msgstr "{0} mối quan hệ mà không có {0} tag"
 
 msgid "religion without denomination"
-msgstr ""
+msgstr "tôn giáo không có mệnh giá"
 
 msgid "unknown christian denomination"
-msgstr ""
+msgstr "không rõ giáo phái Kitô giáo"
 
 msgid "unknown muslim denomination"
-msgstr ""
+msgstr "không rõ mệnh giá muslim"
 
 msgid "unknown jewish denomination"
-msgstr ""
+msgstr "không rõ giáo phái Do Thái"
 
 msgid "{0} is unnecessary"
-msgstr ""
+msgstr "{0} là không cần thiết"
 
 msgid "{0} is unnecessary for {1}"
-msgstr ""
+msgstr "{0} là không cần thiết cho {1}"
 
 msgid "{0}={1} makes no sense"
-msgstr ""
+msgstr "{0} = {1} làm cho không có ý nghĩa"
 
 msgid "Nodes duplicating parent way tags"
-msgstr ""
+msgstr "Nodes nhân đôi cách mẹ tags"
 
 msgid ""
 "no wikipedia-language given, use ''wikipedia''=''language:page title''"
 msgstr ""
+"Không wikipedia-ngôn ngữ nhất định, sử dụng '' wikipedia '' = '' ngôn ngữ: "
+"tiêu đề trang ''"
 
 msgid "unknown language prefix in wikipedia tag"
-msgstr ""
+msgstr "không rõ tiền tố ngôn ngữ trong thẻ wikipedia"
 
 msgid "deprecated format for wikipedia tag"
-msgstr ""
+msgstr "định dạng phản đối cho tag wikipedia"
 
 msgid "''wikipedia''=''language:page title''"
-msgstr ""
+msgstr "'' wikipedia '' = '' ngôn ngữ: tiêu đề trang ''"
 
 msgid "Hide icons at low zoom"
-msgstr ""
+msgstr "Ẩn biểu tượng ở zoom thấp"
 
 msgid "Less obtrusive node symbols at low zoom"
-msgstr ""
+msgstr "biểu tượng nút Ít gây khó chịu ở zoom thấp"
 
 msgid "Display street labels (at high zoom)"
-msgstr ""
+msgstr "nhãn đường Display (tại zoom cao)"
 
 msgid "Use alternative turn restriction icon set"
-msgstr ""
+msgstr "Sử dụng lần lượt thay thế biểu tượng hạn chế tập"
 
 msgid "Columbus V-900 CSV Files"
-msgstr ""
+msgstr "Columbus V-900 CSV Files"
 
 msgid "Importing CSV file ''%s''..."
-msgstr ""
+msgstr "Nhập khẩu CSV file ''% s '' ..."
 
 msgid "Markers of "
-msgstr ""
+msgstr "Dấu mốc của "
 
 msgid "Show summary after import"
-msgstr ""
+msgstr "Hiển thị tóm tắt sau khi nhập khẩu"
 
 msgid "Do not zoom after import"
-msgstr ""
+msgstr "Đừng phóng to sau khi nhập khẩu"
 
 msgid "Ignore hdop/vdop/pdop entries"
-msgstr ""
+msgstr "Bỏ qua HDOP mục / VDOP / PDOP"
 
 msgid "Warn on missing audio files"
-msgstr ""
+msgstr "Cảnh báo trên các tập tin âm thanh mất tích"
 
 msgid "Warn on conversion errors"
-msgstr ""
+msgstr "Cảnh báo về lỗi chuyển đổi"
 
 msgid "Error in line "
-msgstr ""
+msgstr "Lỗi tại dòng "
 
 msgid "Missing audio file"
-msgstr ""
+msgstr "Thiếu tập tin âm thanh"
 
 msgid "Commands"
-msgstr ""
+msgstr "lệnh"
 
 msgid ""
 "No command has been found. Would you like to download and install default "
 "commands now?"
 msgstr ""
+"Không có lệnh đã được tìm thấy. Bạn có muốn tải về và cài đặt mặc địnhLệnh "
+"bây giờ?"
 
 msgid "No command found"
-msgstr ""
+msgstr "Không tìm thấy lệnh"
 
 msgid "Default commands have been successfully installed"
-msgstr ""
+msgstr "lệnh Default đã được cài đặt thành công"
 
 msgid ""
 "Failed to download and install default commands.\n"
 "\n"
 "Error: {0}"
 msgstr ""
+"Không thể tải và cài đặt các lệnh mặc định. \n"
+"\n"
+"Lỗi: {0}"
 
 msgid "Processing..."
-msgstr ""
+msgstr "chế biến ..."
 
 msgid "Aborted"
-msgstr ""
+msgstr "hủy bỏ"
 
 msgid "Error executing the script: "
-msgstr ""
+msgstr "Lỗi thực hiện kịch bản: "
 
 msgid "Command line"
-msgstr ""
+msgstr "Command line"
 
 msgid "Set input focus to the command line."
-msgstr ""
+msgstr "Đặt trọng tâm vào các dòng lệnh."
 
 msgid "Point on the start"
-msgstr ""
+msgstr "Point trên bắt đầu"
 
 msgid "Point on the end"
-msgstr ""
+msgstr "Point trên kết thúc"
 
 msgid "Missing definition of new object with id {0}."
-msgstr ""
+msgstr "Thiếu định nghĩa của đối tượng mới với {0} id."
 
 msgid "Missing mandatory attribute ''{0}'' on <member> of relation {1}."
-msgstr ""
+msgstr "Thiếu thuộc tính bắt buộc '' {0} '' trên <thành viên> quan hệ {1}."
 
 msgid "Illegal value for attribute ''uid''. Got ''{0}''."
-msgstr ""
+msgstr "Giá trị không hợp với thuộc tính '' uid ''. Chấn '' {0} ''."
 
 msgid "nodes"
-msgstr "nốt"
+msgstr "nút"
 
 msgid "ways"
-msgstr "đường"
+msgstr "cách"
 
 msgid "relations"
 msgstr "quan hệ"
 
 msgid "OSM objects"
-msgstr ""
+msgstr "đối tượng OSM"
 
 msgid "Can not draw outside of the world."
-msgstr ""
+msgstr "không thể rút ra bên ngoài của thế giới."
 
 msgid "Create grid of ways"
-msgstr ""
+msgstr "Tạo lưới cách"
 
 msgid ""
 "Forms a grid of ways in base to two existing that have various nodes and one "
 "in common"
 msgstr ""
+"Forms một mạng lưới các cách thức cơ sở để hai hiện có mà có các nút khác "
+"nhau và mộtChung"
 
 msgid "Select two ways with a node in common"
-msgstr ""
+msgstr "Chọn hai cách với một nút chung"
 
 msgid "Select two ways with alone a node in common"
-msgstr ""
+msgstr "Chọn hai cách chỉ với một mình một nút chung"
 
 msgid "Create a grid of ways"
-msgstr ""
+msgstr "Tạo một mạng lưới các cách"
 
 msgid "Download Track ..."
-msgstr ""
+msgstr "Tải dõi ..."
 
 msgid "Download GPX track from openstreetmap.org"
-msgstr ""
+msgstr "Tải GPX track từ openstreetmap.org"
 
 msgid ""
 "Error occurred while parsing gpx file {0}. Only a part of the file will be "
 "available."
 msgstr ""
+"Lỗi xảy ra khi phân tích cú pháp tập tin GPX {0}. Chỉ có một phần của tập "
+"tin sẽ đượcCó sẵn."
 
 msgid "Invalid URL {0}"
-msgstr ""
+msgstr "URL không hợp lệ {0}"
 
 msgid "Error fetching URL {0}"
-msgstr ""
+msgstr "Lỗi lấy URL {0}"
 
 msgid "Error parsing data from URL {0}"
-msgstr ""
+msgstr "Lỗi phân tích dữ liệu từ URL {0}"
 
 msgid "Download Track"
-msgstr ""
+msgstr "Tải Track"
 
 msgid "Filename"
-msgstr ""
+msgstr "Tên tệp"
 
 msgid "Private (only shared as anonymous, unordered points)"
-msgstr ""
+msgstr "Riêng tư (chỉ chia sẻ như vô danh, không có thứ tự điểm)"
 
 msgid "Public (shown in trace list and as anonymous, unordered points)"
 msgstr ""
+"Public (hiển thị trong danh sách theo dõi và như vô danh, không có thứ tự "
+"điểm)"
 
 msgid "Trackable (only shared as anonymous, ordered points with timestamps)"
 msgstr ""
+"dễ theo dõi (chỉ chia sẻ như vô danh, ra lệnh cho điểm với thời gian)"
 
 msgid ""
 "Identifiable (shown in trace list and as identifiable, ordered points with "
 "timestamps)"
 msgstr ""
+"Nhận dạng (hiển thị trong danh sách theo dõi và như nhận dạng, đặt điểm "
+"vớiTimestamps)"
 
 msgid "Upload Trace"
-msgstr ""
+msgstr "Upload Trace"
 
 msgid "Upload Traces"
-msgstr ""
+msgstr "Tải lên vết"
 
 msgid "Defines the visibility of your trace for other OSM users."
-msgstr ""
+msgstr "Xác định tầm nhìn của dấu vết của bạn cho người dùng OSM khác."
 
 msgid "http://wiki.openstreetmap.org/wiki/Visibility_of_GPS_traces"
-msgstr ""
+msgstr "http://wiki.openstreetmap.org/wiki/Visibility_of_GPS_traces"
 
 msgid "(What does that mean?)"
-msgstr ""
+msgstr "(có nghĩa là gì?)"
 
 msgid "Please enter Description about your trace."
-msgstr ""
+msgstr "Hãy nhập Mô tả về dấu vết của bạn."
 
 msgid "Tags (comma delimited)"
-msgstr ""
+msgstr "Tags (dấu phẩy phân cách)"
 
 msgid "Please enter tags about your trace."
-msgstr ""
+msgstr "Hãy nhập thẻ về dấu vết của bạn."
 
 msgid "Selected track: {0}"
-msgstr ""
+msgstr "theo dõi chọn: {0}"
 
 msgid "No GPX layer selected. Cannot upload a trace."
-msgstr ""
+msgstr "Không có lớp GPX chọn. Không thể tải lên một dấu vết."
 
 msgid "Uploading trace ..."
-msgstr ""
+msgstr "Tải lên dấu vết ..."
 
 msgid "Connecting..."
-msgstr ""
+msgstr "Kết nối ..."
 
 msgid "Upload canceled"
-msgstr ""
+msgstr "Upload hủy"
 
 msgid "Error while uploading"
-msgstr ""
+msgstr "Lỗi trong khi tải lên"
 
 msgid "GPX upload was successful"
-msgstr ""
+msgstr "GPX upload thành công"
 
 msgid "Upload failed. Server returned the following message: "
-msgstr ""
+msgstr "Tải lên không thành máy chủ trả lại được thông báo sau: "
 
 msgid "Uploading GPX track: {0}% ({1} of {2})"
-msgstr ""
+msgstr "Uploading GPX theo dõi: {0}% ({1} của {2})"
 
 msgid "No description provided. Please provide some description."
-msgstr ""
+msgstr "Không có mô tả cung cấp. Vui lòng cung cấp một số mô tả."
 
 msgid "Uploading GPX Track"
-msgstr ""
+msgstr "Uploading GPX Track"
 
 msgid "Uploads traces to openstreetmap.org"
-msgstr ""
+msgstr "Uploads dấu vết để openstreetmap.org"
 
 msgid "Shows elevation profile"
-msgstr ""
+msgstr "Hiển thị hồ sơ cao"
 
 msgid "Elevation Profile"
-msgstr ""
+msgstr "Độ cao"
 
 msgid "Elevation Grid Layer (experimental!)"
-msgstr ""
+msgstr "Elevation Lưới Layer (thử nghiệm!)"
 
 msgid "Shows elevation grid layer"
-msgstr ""
+msgstr "Hiển lớp lưới độ cao"
 
 msgid "Elevation Grid"
-msgstr ""
+msgstr "Elevation Grid"
 
 msgid "No SRTM data"
-msgstr ""
+msgstr "Không có dữ liệu SRTM"
 
 msgid "Open the elevation profile window."
-msgstr ""
+msgstr "Mở cửa sổ cấu hình cao."
 
 msgid "Min"
-msgstr ""
+msgstr "Min"
 
 msgid "Avrg"
-msgstr ""
+msgstr "Avrg"
 
 msgid "Max"
-msgstr ""
+msgstr "Max"
 
 msgid "Dist"
-msgstr ""
+msgstr "quận"
 
 msgid "Gain"
-msgstr ""
+msgstr "Gain"
 
 msgid "Tracks"
-msgstr ""
+msgstr "Tracks"
 
 msgid "Elevation profile for track ''{0}''."
-msgstr ""
+msgstr "profile Elevation cho ca khúc '' {0} ''."
 
 msgid "Elevation profile"
-msgstr ""
+msgstr "Elevation profile"
 
 msgid "(No elevation data)"
-msgstr ""
+msgstr "(Không có dữ liệu độ cao)"
 
 msgid "Can not save preferences"
-msgstr ""
+msgstr "Không thể lưu các sở thích"
 
 msgid "Epsilon multiplier"
-msgstr ""
+msgstr "Epsilon nhân"
 
 msgid "Starting Epsilon"
-msgstr ""
+msgstr "Bắt đầu từ Epsilon"
 
 msgid "Max points count per 1 km"
-msgstr ""
+msgstr "Max chỉ đếm trên 1 km"
 
 msgid "Enter key mode"
-msgstr ""
+msgstr "Nhập chế độ chính"
 
 msgid "Auto add tags"
-msgstr ""
+msgstr "Auto thêm thẻ"
 
 msgid "Autosimplify"
-msgstr ""
+msgstr "Autosimplify"
 
 msgid "Simplify with initial epsilon"
-msgstr ""
+msgstr "Đơn giản hóa với epsilon ban đầu"
 
 msgid "Save as is"
-msgstr ""
+msgstr "Save as is"
 
 msgid "Snap to nodes"
-msgstr ""
+msgstr "Snap cho nút"
 
 msgid "Add fixed points on click"
-msgstr ""
+msgstr "Thêm điểm cố định trên click"
 
 msgid "Add fixed points on spacebar"
+msgstr "Thêm điểm cố định trên spacebar"
+
+msgid "Allow edit existing ways"
 msgstr ""
 
 msgid "Draw closed polygons only"
-msgstr ""
+msgstr "Vẽ đa giác khép kín chỉ"
 
 msgid "FastDraw configuration"
-msgstr ""
+msgstr "FastDraw cấu hình"
 
 msgid "Try copying tags from properties table"
-msgstr ""
+msgstr "Cố gắng sao chép thẻ từ bảng tính"
 
 msgid "Save settings"
-msgstr ""
+msgstr "Lưu các thiết lập"
 
 msgid "Can not read settings"
-msgstr ""
+msgstr "Không thể đọc các thiết lập"
 
 msgid "Q=Options, Enter=save, Ctrl-Enter=save with tags, Up/Down=tune"
 msgstr ""
+"Q = Options, Nhập = lưu, Ctrl-Enter = lưu với các thẻ, Up / Down = giai điệu"
 
 msgid ""
 "Click or Click&drag to continue, Ctrl-Click to add fixed node, Shift-Click "
 "to delete, Enter to simplify or save, Ctrl-Shift-Click to start new line"
 msgstr ""
+"Click hoặc Click & kéo để tiếp tục, Ctrl-Click để thêm nút cố định, Shift-"
+"ClickĐể xóa, Enter để đơn giản hóa hoặc lưu, Ctrl-Shift-Click để bắt đầu "
+"dòng mới"
 
 msgid "FastDrawing"
-msgstr ""
+msgstr "FastDrawing"
 
 msgid "Fast drawing mode"
-msgstr ""
+msgstr "chế độ vẽ nhanh"
 
 msgid "Please move the mouse to draw new way"
-msgstr ""
+msgstr "Xin hãy di chuyển con chuột để vẽ cách mới"
 
 msgid "Are you sure you do not want to save the line containing {0} points?"
-msgstr ""
+msgstr "Bạn có chắc chắn bạn không muốn lưu các dòng có chứa {0} điểm?"
 
 msgid ""
 "{0} m - length of the line\n"
@@ -22743,196 +24530,200 @@ msgid ""
 "{2} points per km (maximum)\n"
 "{3} points per km (average)"
 msgstr ""
+"{0} m - chiều dài của dòng \n"
+"{1} các nút \n"
+"{2} điểm cho mỗi km (tối đa) \n"
+"{3} chỉ mỗi km (trung bình)"
 
 msgid "Line information"
-msgstr ""
+msgstr "Dòng thông tin"
 
 msgid "Cannot place node outside of the world."
-msgstr ""
+msgstr "Không thể đặt nút bên ngoài của thế giới."
 
 msgid "Draw the way by mouse"
-msgstr ""
+msgstr "Vẽ đường đi bằng cách chuột"
 
 msgid "min distance={0} px ({1} m)"
-msgstr ""
-
-msgid "Convert way to FastDraw line"
-msgstr ""
+msgstr "min khoảng cách = {0} px ({1} m)"
 
 msgid "Eps={0}, {1} points, {2} p/km"
-msgstr ""
+msgstr "Eps = {0}, {1} điểm, {2} p / km"
 
 msgid "Fix addresses"
-msgstr ""
+msgstr "địa chỉ Fix"
 
 msgid "Show dialog with incomplete addresses"
-msgstr ""
+msgstr "Hiển thị hộp thoại với các địa chỉ không đầy đủ"
 
 msgid "Include objects used for guesses"
-msgstr ""
+msgstr "Bao gồm các đối tượng sử dụng để dự đoán"
 
 msgid "Fix street addresses"
-msgstr ""
+msgstr "địa chỉ Fix đường phố"
 
 msgid "Find and fix addresses without (valid) streets."
-msgstr ""
+msgstr "Tìm và sửa chữa mà không có địa chỉ (có thời hạn) đường phố."
 
 msgid "Address Edit"
-msgstr ""
+msgstr "Địa chỉ Edit"
 
 msgid "Searching"
-msgstr ""
+msgstr "Tìm kiếm"
 
 msgid "Guess values for "
-msgstr ""
+msgstr "giá trị Guess cho "
 
 msgid "Address has no street"
-msgstr ""
+msgstr "Địa chỉ không có đường phố"
 
 msgid "Address has no valid street"
-msgstr ""
+msgstr "Địa chỉ không có đường không hợp lệ"
 
 msgid "Address has no post code"
-msgstr ""
+msgstr "Địa chỉ không có bài code"
 
 msgid "Address has no city"
-msgstr ""
+msgstr "Địa chỉ không có thành phố"
 
 msgid "Address has no country"
-msgstr ""
+msgstr "Địa chỉ không có nước"
 
 msgid "Assign to"
-msgstr ""
+msgstr "Gán cho"
 
 msgid "Remove all address tags"
-msgstr ""
+msgstr "Hủy bỏ tất cả các thẻ địa chỉ"
 
 msgid "No name"
-msgstr ""
+msgstr "Không Tên"
 
 msgid "Unresolved Addresses"
-msgstr ""
+msgstr "Địa chỉ không được giải quyết"
 
 msgid "Select and close"
-msgstr ""
+msgstr "Chọn và gần gũi"
 
 msgid "Fix unresolved addresses"
-msgstr ""
+msgstr "Sửa địa chỉ chưa được giải quyết"
 
 msgid "Complete Addresses"
-msgstr ""
+msgstr "Địa chỉ Complete"
 
 msgid "Incomplete Addresses"
-msgstr ""
+msgstr "Địa chỉ Incomplete"
 
 msgid "Selected Addresses"
-msgstr ""
+msgstr "Địa chỉ chọn"
 
 msgid "Selected Street"
-msgstr ""
+msgstr "Chọn đường"
 
 msgid "(No data)"
-msgstr ""
+msgstr "(Không có dữ liệu)"
 
 msgid "Segments"
-msgstr ""
+msgstr "Phân đoạn"
 
 msgid "Show incomplete addresses"
-msgstr ""
+msgstr "Hiển thị các địa chỉ không đầy đủ"
 
 msgid "items"
-msgstr ""
+msgstr "mặt hàng"
 
 msgid "no items"
-msgstr ""
+msgstr "không có sản phẩm"
 
 msgctxt "address"
 msgid "City"
-msgstr ""
+msgstr "City"
 
 msgid "Postcode"
-msgstr ""
+msgstr "Mã bưu"
 
 msgid "Turns all guesses into the corresponding tag values."
-msgstr ""
+msgstr "Biến tất cả các dự đoán vào các giá trị thẻ tương ứng."
 
 msgid "Applied guessed values"
-msgstr ""
+msgstr "Ứng dụng đoán giá trị"
 
 msgid "Applied guessed values for "
-msgstr ""
+msgstr "Ứng dụng đoán giá trị cho "
 
 msgid "Assign address to street"
-msgstr ""
+msgstr "Gán địa chỉ đường phố"
 
 msgid "Assign the selected address(es) to the selected street."
-msgstr ""
+msgstr "Gán địa chỉ đã chọn (es) để các đường phố được lựa chọn."
 
 msgid "Set street name"
-msgstr ""
+msgstr "Đặt tên đường phố"
 
 msgid "Convert ALL streets."
-msgstr ""
+msgstr "Chuyển đổi tất cả các đường phố."
 
 msgid ""
 "Create relation between street and related addresses for ALL streets in the "
 "current layer."
 msgstr ""
+"Tạo mối quan hệ giữa các đường phố và các địa chỉ liên quan cho tất cả các "
+"đường phố trongLớp hiện tại."
 
 msgid "Convert to relation."
-msgstr ""
+msgstr "Chuyển đổi để mối quan hệ."
 
 msgid "Create relation between street and related addresses."
-msgstr ""
+msgstr "Tạo mối quan hệ giữa các đường phố và các địa chỉ liên quan."
 
 msgid "Create address relation for "
-msgstr ""
+msgstr "Tạo mối quan hệ địa chỉ cho "
 
 msgid "Guess"
-msgstr ""
+msgstr "Guess"
 
 msgid ""
 "Tries to guess address data by picking the name of the closest object with "
 "according tag."
 msgstr ""
+"Cố gắng đoán dữ liệu địa chỉ bằng cách chọn tên của các đối tượng gần nhất "
+"vớiTheo tag."
 
 msgid "Guessing address values"
-msgstr ""
+msgstr "Đoán giá trị địa chỉ"
 
 msgid "Removes address related tags from the object."
-msgstr ""
+msgstr "Gỡ bỏ địa chỉ liên quan đến thẻ từ đối tượng."
 
 msgid "Remove address tags"
-msgstr ""
+msgstr "Xóa thẻ địa chỉ"
 
 msgid "Marks selected addresses in the map"
-msgstr ""
+msgstr "Marks chọn địa chỉ trên bản đồ"
 
 msgid "Select incomplete addresses"
-msgstr ""
+msgstr "Chọn địa chỉ không đầy đủ"
 
 msgid "Selects all addresses with incomplete data."
-msgstr ""
+msgstr "Chọn tất cả các địa chỉ với dữ liệu không đầy đủ."
 
 msgid "Use tag ''addr:street'' or ''addr:place''"
-msgstr ""
+msgstr "Sử dụng từ khóa '' addr: đường phố '' hoặc '' addr: địa điểm ''"
 
 msgid "House Number Editor"
-msgstr ""
+msgstr "House Số Editor"
 
 msgid "House number increment:"
-msgstr ""
+msgstr "Nhà số increment:"
 
 msgid "Updating properties of up to {0} object"
 msgid_plural "Updating properties of up to {0} objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Đang cập nhật tính lên đến {0} đối tượng"
 
 msgid "Default image projection"
-msgstr ""
+msgstr "chiếu hình ảnh mặc định"
 
 msgid "JOSM''s current projection"
-msgstr ""
+msgstr "JOSM''s current projection"
 
 msgid ""
 "No projection file (.prj) found.<br>You can choose the default image "
@@ -22940,384 +24731,417 @@ msgid ""
 "image projection.<br>(It can be changed later from the right click menu of "
 "the image layer.)"
 msgstr ""
+"No projection file (.prj) found.<br>You can choose the default image "
+"projection ({0}) or JOSM''s current editor projection ({1}) as original "
+"image projection.<br>(It can be changed later from the right click menu of "
+"the image layer.)"
 
 msgid "Layer Properties"
-msgstr ""
+msgstr "Layer Properties"
 
 msgid "Error while creating image layer: {0}"
-msgstr ""
+msgstr "Lỗi khi tạo lớp ảnh: {0}"
 
 msgid "Import image"
-msgstr ""
+msgstr "Nhập khẩu hình ảnh"
 
 msgid "Import georeferenced image"
-msgstr ""
+msgstr "Import image tham chiếu hình học"
 
 msgid "Error while creating image layer: "
-msgstr ""
+msgstr "Lỗi khi tạo lớp hình ảnh: "
 
 msgid "NanoLog"
-msgstr ""
+msgstr "NanoLog"
 
 msgid "NanoLog of {0} entries"
-msgstr ""
+msgstr "NanoLog của {0} mục"
 
 msgid "NanoLog of {0} lines, {1} of them with coordinates."
-msgstr ""
+msgstr "NanoLog của {0} dòng, {1} của chúng với tọa độ."
 
 msgid "Correlate with GPX..."
-msgstr ""
+msgstr "tương quan với GPX ..."
 
 msgid "Put on GPX..."
-msgstr ""
+msgstr "Đặt trên GPX ..."
 
 msgid "Correlate entries with GPS trace"
-msgstr ""
+msgstr "Tương quan giữa các mục với các dấu vết GPS"
 
 msgid "Save layer..."
-msgstr ""
+msgstr "Lưu lớp ..."
 
 msgid "Save NanoLog layer"
-msgstr ""
+msgstr "Lưu NanoLog lớp"
 
 msgid "Open NanoLog panel"
-msgstr ""
+msgstr "Open NanoLog bảng"
 
 msgid "Open NanoLog file..."
-msgstr ""
+msgstr "Mở file NanoLog ..."
 
 msgid "Could not read NanoLog file:"
-msgstr ""
+msgstr "Không thể đọc tập tin NanoLog:"
 
 msgid "OSM Recommendation"
-msgstr ""
+msgstr "OSM Khuyến nghị"
 
 msgid "Recommend categories to your newly created instances."
-msgstr ""
+msgstr "Đề nghị loại để các trường hợp mới được tạo ra."
 
 msgid "Training process configuration"
-msgstr ""
+msgstr "quá trình đào tạo cấu hình"
 
 msgid "Model Settings"
-msgstr ""
+msgstr "Model Settings"
 
 msgid "Select objects or create new objects and get recommendation."
-msgstr ""
+msgstr "Chọn đối tượng hoặc tạo ra các đối tượng mới và nhận được đề nghị."
 
 msgid "Add Recommendation"
-msgstr ""
+msgstr "Thêm Khuyến nghị"
 
 msgid "Add a recommended key/value pair to your object"
-msgstr ""
+msgstr "Thêm một khóa / cặp giá trị được đề nghị để đối tượng của bạn"
 
 msgid "Train a Model"
-msgstr ""
+msgstr "Hãy dạy cho Model"
 
 msgid "Start the training engine!"
-msgstr ""
+msgstr "Khởi động động cơ đào tạo!"
 
 msgid "Edit opening hours"
-msgstr ""
+msgstr "Edit giờ mở cửa"
 
 msgid "Edit time-tag of selected element in a graphical interface"
 msgstr ""
+"Chỉnh sửa thời gian-tag của phần tử được chọn trong một giao diện đồ họa"
 
 msgid "edit existing tag"
-msgstr ""
+msgstr "tag hiện chỉnh sửa"
 
 msgid "edit new tag"
-msgstr ""
+msgstr "chỉnh sửa tag mới"
 
 msgid "Display clock in 12h mode."
-msgstr ""
+msgstr "đồng hồ hiển thị ở chế độ 12h."
 
 msgid "Choose key"
-msgstr ""
+msgstr "Chọn phím"
 
 msgid "apply {0}"
-msgstr ""
+msgstr "áp dụng {0}"
 
 msgid "There is something wrong in the value near:"
-msgstr ""
+msgstr "Có gì đó sai trong các giá trị gần:"
 
 msgid "Info: {0}"
-msgstr ""
+msgstr "Thông tin: {0}"
 
 msgid "Correct the value manually and than press Enter."
-msgstr ""
+msgstr "Đúng giá trị bằng tay và rồi nhấn Enter."
 
 msgid "Error in timeformat"
-msgstr ""
+msgstr "Lỗi trong TIMEFORMAT"
 
 msgid "open end"
-msgstr ""
+msgstr "kết thúc mở"
 
 msgid "Import Osm Inspector Bugs..."
-msgstr ""
+msgstr "Nhập OSM Inspector Bugs ..."
 
 msgid "OsmInspector"
-msgstr ""
+msgstr "OsmInspector"
 
 msgid "Open OsmInspector"
-msgstr ""
+msgstr "Open OsmInspector"
 
 msgid "OsmBugInfo"
-msgstr ""
+msgstr "OsmBugInfo"
 
 msgid "Open a OSM Inspector selection list window."
-msgstr ""
+msgstr "Mở một cửa sổ danh sách lựa chọn OSM Inspector."
 
 msgid "Current Selected Bug Info"
-msgstr ""
+msgstr "Current Bug chọn Info"
 
 msgid "Prev OSMI bug"
-msgstr ""
+msgstr "Trước OSMI lỗi"
 
 msgid "Next OSMI bug"
-msgstr ""
+msgstr "Next OSMI lỗi"
 
 msgid "Osm Inspector Bugs"
-msgstr ""
+msgstr "OSM Inspector Bugs"
 
 msgid "OSM Inspector Bugs"
-msgstr ""
+msgstr "OSM Inspector Bugs"
 
 msgid "Selected Bug Info"
-msgstr ""
+msgstr "chọn Bug Info"
 
 msgid "Handy Address Interpolation Functions"
-msgstr ""
+msgstr "Handy Địa chỉ Interpolation Chức năng"
 
 msgid "Define Address Interpolation"
-msgstr ""
+msgstr "Xác định Địa chỉ Interpolation"
 
 msgid "Odd"
-msgstr ""
+msgstr "Odd"
 
 msgid "Even"
-msgstr ""
+msgstr "Ngay cả"
 
 msgid "Alphabetic"
-msgstr ""
+msgstr "chữ cái"
 
 msgid "Numeric"
-msgstr ""
+msgstr "Numeric"
 
 msgid "Actual"
-msgstr ""
+msgstr "thực tế"
 
 msgid "Estimate"
-msgstr ""
+msgstr "Ước"
 
 msgid "Potential"
-msgstr ""
+msgstr "tiềm năng"
 
 msgid "Relation: {0}"
-msgstr ""
+msgstr "Mối quan hệ: {0}"
 
 msgid "Associate with street using:"
-msgstr ""
+msgstr "Liên kết với các đường phố sử dụng:"
 
 msgid "Numbering Scheme:"
-msgstr ""
+msgstr "Numbering Đề án:"
 
 msgid "Increment:"
-msgstr ""
+msgstr "Tăng:"
 
 msgid "Starting #:"
-msgstr ""
+msgstr "Bắt đầu từ #:"
 
 msgid "Ending #:"
-msgstr ""
+msgstr "Kết thúc #:"
 
 msgid "Accuracy:"
-msgstr ""
+msgstr "Độ chính xác:"
 
 msgid "Convert way to individual house numbers."
-msgstr ""
+msgstr "Chuyển đổi cách đến các số nhà biệt."
 
 msgid "Will associate {0} additional house number nodes"
-msgstr ""
+msgstr "sẽ kết hợp {0} ngôi nhà thêm nút số"
 
 msgid "City:"
-msgstr ""
+msgstr "Thành phố:"
 
 msgid "State:"
-msgstr ""
+msgstr "Nhà nước:"
 
 msgid "Post Code:"
-msgstr ""
+msgstr "Post Code:"
 
 msgid "Country:"
-msgstr ""
+msgstr "Country:"
 
 msgid "Full Address:"
-msgstr ""
+msgstr "Full Địa chỉ:"
 
 msgid "Optional Information:"
-msgstr ""
+msgstr "Thông tin bắt buộc:"
 
 msgid "Please select a street to associate with address interpolation way"
-msgstr ""
+msgstr "Hãy chọn một con đường để kết hợp với cách suy địa chỉ"
 
 msgid "Please select address interpolation way for this street"
-msgstr ""
+msgstr "Hãy chọn nội suy địa chỉ đường cho con phố này"
 
 msgid "Expected odd numbers for addresses"
-msgstr ""
+msgstr "Dự kiến ​​số lẻ cho các địa chỉ"
 
 msgid "Expected even numbers for addresses"
-msgstr ""
+msgstr "Dự kiến ​​ngay cả con số cho các địa chỉ"
 
 msgid "Expected valid number for increment"
-msgstr ""
+msgstr "Dự kiến ​​số hợp lệ cho increment"
 
 msgid "Country code must be 2 letters"
-msgstr ""
+msgstr "Mã quốc gia phải có 2 chữ"
 
 msgid "Please enter valid number for starting and ending address"
-msgstr ""
+msgstr "Hãy nhập số hợp lệ để bắt đầu và kết thúc địa chỉ"
 
 msgid "Alphabetic address must end with a letter"
-msgstr ""
+msgstr "địa chỉ chữ cái phải kết thúc bằng một chữ cái"
 
 msgid "Starting and ending numbers must be the same for alphabetic addresses"
-msgstr ""
+msgstr "Bắt đầu và kết thúc số phải giống nhau cho các địa chỉ dạng chữ cái"
 
 msgid "Starting address letter must be less than ending address letter"
-msgstr ""
+msgstr "Bắt đầu từ địa chỉ thư phải nhỏ hơn kết thúc thư địa chỉ"
 
 msgid "Please enter valid number for starting address"
-msgstr ""
+msgstr "Hãy nhập số hợp lệ để bắt đầu địa chỉ"
 
 msgid "Please enter valid number for ending address"
-msgstr ""
+msgstr "Hãy nhập số hợp lệ cho địa chỉ kết thúc"
 
 msgid "Starting address number must be less than ending address number"
-msgstr ""
+msgstr "Bắt đầu từ số lượng địa chỉ phải nhỏ hơn số địa chỉ kết thúc"
 
 msgid "Align Way Segments"
-msgstr ""
+msgstr "Align Way Phân đoạn"
 
 msgid "Align Ways"
-msgstr ""
+msgstr "Align cách"
 
 msgid ""
 "Please select two segments that don''t share any nodes.\n"
 "Alternatively put the pivot on their common node.\n"
 msgstr ""
+"Hãy chọn hai phân đoạn don''t chia sẻ bất kỳ nút. \n"
+"Hoặc đặt pivot trên nút phổ biến của họ.\n"
 
 msgid ""
 "Aligning would result nodes ''outside the world''.\n"
 "Alignment not possible.\n"
 msgstr ""
+"Gắn kết sẽ dẫn đến các nút '' bên ngoài thế giới ''. \n"
+"Alignment không thể.\n"
 
 msgid ""
 "There is at least a non-pivot endpoint of the alignee that joins more than "
 "two way segments.\n"
 "Preserved angles type alignment is not possible.\n"
 msgstr ""
+"Có ít nhất một thiết bị đầu cuối không pivot của alignee mà tham gia nhiều "
+"hơnHai đoạn đường. \n"
+"Góc độ bảo quản loại liên kết là không thể.\n"
 
 msgid ""
 "The alignment is not possible with maintaining the angles of the joint "
 "segments.\n"
 "Either choose the ''keep length'' aligning method or select other segments.\n"
 msgstr ""
+"Các điều chỉnh là không thể với việc duy trì các góc của khớpPhân đoạn. \n"
+"Hoặc là chọn '' giữ chiều dài '' phương pháp sắp xếp hay chọn các phân đoạn "
+"khác.\n"
 
 msgid ""
 "An intersection point would fall outside its adjacent nodes.\n"
 "This is an unsupported scenario.\n"
 msgstr ""
+"Một giao điểm sẽ nằm ngoài các nút lân cận của nó. \n"
+"Đây là một kịch bản không được hỗ trợ.\n"
 
 msgid "Undocumented problem occured.\n"
-msgstr ""
+msgstr "vấn đề khống và xảy ra.\n"
 
 msgid "AlignWayS: Alignment not possible"
-msgstr ""
+msgstr "AlignWayS: Alignment không thể"
 
 msgid "Align way segment"
-msgstr ""
+msgstr "Align phân cách"
 
 msgid ""
 "Please select two segments that don''t share any nodes\n"
 " or put the pivot on their common node.\n"
 msgstr ""
+"Hãy chọn hai phân đoạn don''t chia sẻ bất kỳ nút \n"
+"Hoặc đặt pivot trên nút phổ biến của họ.\n"
 
 msgid "Align Way Segments: Modes"
-msgstr ""
+msgstr "Align Way Segments: Chế độ"
 
 msgid "Align Ways control panel"
-msgstr ""
+msgstr "Align cách bảng điều khiển"
 
 msgid "This panel activates in Align Ways mode:"
-msgstr ""
+msgstr "bảng điều khiển này sẽ kích hoạt trong chế độ Align cách:"
 
 msgid "Length preserved"
-msgstr ""
+msgstr "Chiều dài bảo quản"
 
 msgid "Angle preserved"
-msgstr ""
+msgstr "Góc nhìn bảo tồn"
 
 msgid "Align with:"
-msgstr ""
+msgstr "Align với:"
 
 msgid ""
 "<html>Aligns the way segment to the reference so that its length is "
 "preserved.</html>"
 msgstr ""
+"<Html> Canh lề đường phân đoạn để các tài liệu tham khảo để chiều dài của nó "
+"làBảo quản. </ Html>"
 
 msgid ""
 "<html>Aligns the way segment to the reference so that the angles of its "
 "adjacent segments are preserved.<br/>The length of the aligned segment is "
 "likely to change as result.</html>"
 msgstr ""
+"<Html> Canh lề đường phân đoạn để các tài liệu tham khảo để các góc của "
+"nóPhân khúc liền kề được bảo quản. <br/> Chiều dài của đoạn thẳng làCó khả "
+"năng để thay đổi kết quả. </ Html>"
 
 msgid "I''m ready!"
-msgstr ""
+msgstr "I''m sẵn sàng!"
 
 msgid "AlignWays Tips"
-msgstr ""
+msgstr "AlignWays Mẹo"
 
 msgid "AlignWays: What''s New..."
-msgstr ""
+msgstr "AlignWays: What''s New..."
 
 msgid "Align Ways mode"
-msgstr ""
+msgstr "Align cách chế độ"
 
 msgid "Parameter ''{0}'' must not be null"
-msgstr ""
+msgstr "Thông số '' {0} '' không phải là vô giá trị"
 
 msgid ""
 "Segment to be aligned cannot be the same with the reference segment.\n"
 "Please choose a different segment to be aligned."
 msgstr ""
+"Phân khúc phải được liên kết không thể giống với các phân khúc tham khảo. \n"
+"Hãy chọn một phân khúc khác nhau được liên kết."
 
 msgid "AlignWayS message"
-msgstr ""
+msgstr "AlignWayS nhắn"
 
 msgid ""
 "Reference segment cannot be the same with the segment to be aligned.\n"
 "Please choose a different reference segment."
 msgstr ""
+"Phân khúc tham khảo không thể giống với các phân khúc được phù hợp. \n"
+"Hãy chọn một đoạn tài liệu tham khảo khác nhau."
 
 msgid "Ctrl-Click: select reference way segment; Alt-click: Clear selection"
-msgstr ""
+msgstr "Ctrl-Click: chọn phân khúc cách tham chiếu; Alt-click: Xóa lựa chọn"
 
 msgid ": Align segments; Alt-click: Clear selection"
-msgstr ""
+msgstr ": Căn đoạn; Alt-click: Xóa lựa chọn"
 
 msgid ""
 "Ctrl-click: select reference way segment; Click: select way segment to be "
 "aligned"
 msgstr ""
+"Ctrl-click: chọn phân khúc cách tham chiếu; Click: chọn phân khúc cách để "
+"đượcPhù hợp"
 
 msgid "Click: select way segment to be aligned; Alt-click: Clear selection"
 msgstr ""
+"Click: chọn phân khúc cách nào để được thẳng hàng; Alt-click: Xóa lựa chọn"
 
 msgid ""
 "Ctrl-Click: select reference way segment; Click: select way segment to be "
 "aligned"
 msgstr ""
+"Ctrl-Click: chọn phân khúc cách tham chiếu; Click: chọn phân khúc cách để "
+"đượcPhù hợp"
 
 msgid ""
 "Welcome to the</span><br>\n"
@@ -23327,6 +25151,12 @@ msgid ""
 "...or it rather should be called <br>\n"
 "<span style=\"font-size: large;\">AlignWayS(egments)</span> Plugin..."
 msgstr ""
+"Chào mừng đến với </ span> <br> \n"
+"<Span style = \" font-size: xx-lớn; \"> AlignWay <span style = \" color: rgb "
+"(204, 85, 0); \"> S </ span> Plugin <br> \n"
+" </ Span> <span style = \" font-size: trung bình; \"> <br> \n"
+"... Hoặc nó thay vì phải được gọi là <br> \n"
+"<Span style = \" font-size: lớn; \"> AlignWayS (egments) </ span> Plugin ..."
 
 msgid ""
 "<html>\n"
@@ -23340,6 +25170,16 @@ msgid ""
 "</html>\n"
 "\n"
 msgstr ""
+"<Html> \n"
+"<P style = \" font-family: sans-serif; font-weight: bold; \"> AlignWays sẽ \n"
+"Giúp bạn sắp xếp hai đoạn đường. Điều này có thể có ích khi ví dụ \n"
+"Bạn vẽ phác thảo của một tòa nhà và muốn phụ của nó để được song song \n"
+"Với một đường phố hoặc đường bộ. <br> \n"
+"<br> \n"
+"Một số lời khuyên có thể giúp trước khi bạn bắt đầu: \n"
+"</ P> \n"
+"</ Html>\n"
+"\n"
 
 msgid ""
 "<html>\n"
@@ -23354,6 +25194,17 @@ msgid ""
 "</html>\n"
 "\n"
 msgstr ""
+"<Html> \n"
+"<Div style = \" font-family: sans-serif; \"> \n"
+"<Ul> \n"
+"<Li> <b> Chọn một đoạn tài liệu tham khảo. </ B> Bạn có thể làm điều này "
+"bằng <b> <i> <spanstyle=\"color:green\"> Ctrl-bấm </ span> </ i> </ b> ing \n"
+"Trên một đoạn. Các khác, phân khúc được phù hợp sẽ trở thành song song để \n"
+"Thế này. </ Li> \n"
+"</ Ul> \n"
+"</ Div> \n"
+"</ Html>\n"
+"\n"
 
 msgid ""
 "<html>\n"
@@ -23370,6 +25221,18 @@ msgid ""
 "</html>\n"
 "\n"
 msgstr ""
+"<Html> \n"
+"<Div style = \" font-family: sans-serif \"> \n"
+"<Ul> \n"
+"<Li> <b> Chọn phân khúc được phù hợp. </ B> Bạn có thể làm điều này bằng "
+"cách đơn giản<B> <i> <span style=\"color:green\"> bấm </ span> </ i> </ b> "
+"ing trên khác nhauPhân khúc. \n"
+"Trục xoay sẽ được đánh dấu bởi mặc định trong các trung tâm củaPhân khúc. \n"
+"</ Li> \n"
+"</ Ul> \n"
+"</ Div> \n"
+"</ Html>\n"
+"\n"
 
 msgid ""
 "<html>\n"
@@ -23386,6 +25249,18 @@ msgid ""
 "</html>\n"
 "\n"
 msgstr ""
+"<Html> \n"
+"<Div style = \" font-family: sans-serif \"> \n"
+"<Ul> \n"
+"<Li> Tùy chọn <b> thay đổi điểm xoay pivot </ b>. Để có đượcSong song với "
+"việc phân khúc tham khảo, các phân khúc được phù hợp sẽ xoayXung quanh điểm "
+"này. Bạn có thể chọn hai chi hoặc trung tâm củaPhân khúc của <b> <i> <span "
+"style=\"color:green\">. Bấm </ span> </ i> </ b> ing gần đó\n"
+"</ Li> \n"
+"</ Ul> \n"
+"</ Div> \n"
+"</ Html>\n"
+"\n"
 
 msgid ""
 "<html>\n"
@@ -23401,6 +25276,17 @@ msgid ""
 "</html>\n"
 "\n"
 msgstr ""
+"<Html> \n"
+"<Div style = \" font-family: sans-serif \"> \n"
+"<Ul> \n"
+"<Li> <b> Align các đoạn. </ B> Nhấn <b> <i> <spanstyle=\"color:green\"> {0} "
+"</ span> </ i> </ b> Hoặc you''ll tìmLệnh trong <b> Công cụ </ b> \n"
+"Menu hoặc có thể muốn đặt các hành động trên <b> thanh công cụ </ b>. \n"
+"</ Li> \n"
+"</ Ul> \n"
+"</ Div> \n"
+"</ Html>\n"
+"\n"
 
 msgid ""
 "<html>\n"
@@ -23412,304 +25298,345 @@ msgid ""
 "</html>\n"
 "\n"
 msgstr ""
+"<Html> \n"
+"<Div style = \" font-family: sans-serif \"> \n"
+"<B> gợi ý cuối: </ b> Có một cách dễ dàng để bắt đầu hơn lựa chọn của bạn "
+"nếu bạnMuốn: <b> <i> <span style=\"color:green\"> Alt-Click </ span> </ i> "
+"</ b> ở đâu đóTrên bản đồ. \n"
+"</ Div> \n"
+"</ Html>\n"
+"\n"
 
 msgid "Don''t show this again"
-msgstr ""
+msgstr "Don''t hiện này một lần nữa"
 
 msgid "What''s new..."
-msgstr ""
+msgstr "Có gì mới ..."
 
 msgid "Added <b>angle preserving</b> aligning mode"
-msgstr ""
+msgstr "Thêm <b> góc giữ gìn chế độ </ b> xếp thẳng"
 
 msgid "Various improvements and bugfixes"
-msgstr ""
+msgstr "cải tiến khác nhau và sửa lỗi"
 
 msgid "Errr..."
-msgstr ""
+msgstr "Errr ..."
 
 msgid "Browser not supported."
-msgstr ""
+msgstr "Trình duyệt không hỗ trợ."
 
 msgid "Building address"
-msgstr ""
+msgstr "địa chỉ Building"
 
 msgid "empty"
-msgstr ""
+msgstr "trống rỗng"
 
 msgid "skip"
-msgstr ""
+msgstr "bỏ qua"
 
 msgid "House number:"
-msgstr ""
+msgstr "Nhà số:"
 
 msgid "Street:"
-msgstr ""
+msgstr "Đường:"
 
 msgid "Post code:"
-msgstr ""
+msgstr "Mã bưu điện:"
 
 msgid "Building:"
-msgstr ""
+msgstr "Xây dựng:"
 
 msgid "Tags:"
-msgstr ""
+msgstr "Tags:"
 
 msgid "Name:"
-msgstr ""
+msgstr "Name:"
 
 msgid "updated building info"
-msgstr ""
+msgstr "cập nhật thông tin xây dựng"
 
 msgid "Tag Element"
-msgstr ""
+msgstr "Tag Element"
 
 msgid "Select an item to tag."
-msgstr ""
+msgstr "Chọn một mục để gắn thẻ."
 
 msgid "Tag Building"
-msgstr ""
+msgstr "Tag Building"
 
 msgid "Tools: {0}"
-msgstr ""
+msgstr "Tools: {0}"
 
 msgid "Area Selection"
-msgstr ""
+msgstr "Area Selection"
 
 msgid "Select an area (e.g. building) from an underlying image."
-msgstr ""
+msgstr "Chọn một khu vực (ví dụ như xây dựng) từ một hình ảnh cơ bản."
 
 msgid "Area Selector"
-msgstr ""
+msgstr "Selector"
 
 msgid "Created area"
-msgstr ""
+msgstr "khu vực tạo"
 
 msgid "Unable to detect a polygon where you clicked."
-msgstr ""
+msgstr "Không thể phát hiện một đối tượng vùng, bạn nhấp vào."
 
 msgid "Error Report"
-msgstr ""
+msgstr "Lỗi Báo cáo"
 
 msgid "Something went wrong!"
-msgstr ""
+msgstr "Một cái gì đó đã đi sai!"
 
 msgid "Please file a bug report on the github project page under"
-msgstr ""
+msgstr "Hãy thông báo lỗi trên trang dự án github dưới"
 
 msgid ""
 "Let us know what you did and what happend add the following text to the bug "
 "report, so we can find the source of the issue."
 msgstr ""
+"Hãy cho chúng tôi biết những gì bạn đã làm và những gì happend thêm các văn "
+"bản sau đây để các lỗiBáo cáo, vì vậy chúng tôi có thể tìm thấy nguồn gốc "
+"của vấn đề."
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
+msgstr "Color Threshold"
+
+msgid "Use HSV based algorithm"
 msgstr ""
 
-msgid "merge nodes"
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
 msgstr ""
+"Làm thế nào thường làm loãng hoạt động nên được áp dụng (Default {0})."
 
 msgid "Thinning Iterations"
+msgstr "Mỏng Iterations"
+
+msgid "show address dialog"
+msgstr "địa chỉ hiển thị hộp thoại"
+
+msgid "Show Address Dialog after mapping an area"
+msgstr "Show Địa chỉ Dialog sau khi vạch một khu vực"
+
+msgid "merge nodes"
+msgstr "hợp nhất nút"
+
+msgid "Merge nodes with existing nodes"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "Debug"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
-msgstr ""
+msgstr "Đường:"
 
 msgid "Big buildings mode"
-msgstr ""
+msgstr "tòa nhà Big chế độ"
 
 msgid "Rotate crosshair"
-msgstr ""
+msgstr "Rotate crosshair"
 
 msgid "Advanced settings"
-msgstr ""
+msgstr "Cài đặt nâng cao"
 
 msgid "Buildings tags:"
-msgstr ""
+msgstr "Buildings tags:"
 
 msgid "Cannot place building outside of the world."
-msgstr ""
+msgstr "Không thể thực hiện xây dựng bên ngoài của thế giới."
 
 msgid "Create building"
-msgstr ""
+msgstr "Tạo dựng"
 
 msgid "Set buildings size"
-msgstr ""
+msgstr "Set tòa size"
 
 msgid "Use Address dialog"
-msgstr ""
+msgstr "Sử dụng Địa chỉ hộp thoại"
 
 msgid "Auto-select building"
-msgstr ""
+msgstr "xây dựng tự động chọn"
 
 msgid "Use address nodes under buildings"
-msgstr ""
+msgstr "Sử dụng các nút địa chỉ dưới các tòa nhà"
 
 msgid "Buildings width:"
-msgstr ""
+msgstr "Các tòa nhà rộng:"
 
 msgid "Length step:"
-msgstr ""
+msgstr "Chiều dài bước:"
 
 msgid "Advanced..."
-msgstr ""
+msgstr "Advanced ..."
 
 msgid "Draw buildings"
-msgstr ""
+msgstr "Vẽ tòa nhà"
 
 msgid "Point on the corner of the building to start drawing"
-msgstr ""
+msgstr "Point trên các góc của tòa nhà để bắt đầu vẽ"
 
 msgid "Point on opposite end of the building"
-msgstr ""
+msgstr "Point trên đầu đối diện của tòa nhà"
 
 msgid "Set width of the building"
-msgstr ""
+msgstr "Đặt độ rộng của tòa nhà"
 
 msgid "Merge address points"
-msgstr ""
+msgstr "Merge điểm địa chỉ"
 
 msgid "Move tags from address nodes inside buildings to building ways"
 msgstr ""
+"Di chuyển thẻ từ các nút địa chỉ bên trong các tòa nhà để xây dựng cách"
 
 msgid "Select both address nodes and building ways to merge"
-msgstr ""
+msgstr "Chọn cả hai nút địa chỉ và cách xây dựng để hợp nhất"
 
 msgid "No address nodes found in the selection"
-msgstr ""
+msgstr "Không có các nút địa chỉ tìm thấy trong các lựa chọn"
 
 msgid "No building ways found in the selection"
-msgstr ""
+msgstr "Không có cách xây dựng tìm thấy trong việc lựa chọn"
 
 msgid "There is {0} building with multiple address nodes inside"
 msgid_plural "There are {0} buildings with multiple address nodes inside"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Có {0} xây dựng với nhiều nút địa chỉ bên trong"
 
 msgid "There is {0} building with address conflicts"
 msgid_plural "There are {0} buildings with address conflicts"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Có {0} tòa nhà với các cuộc xung đột địa chỉ"
 
 msgid "No address nodes inside buildings found"
-msgstr ""
+msgstr "Không có các nút địa chỉ bên trong tòa nhà tìm thấy"
 
 msgid "on polygon"
-msgstr ""
+msgstr "trên đa giác"
 
 msgid "Add address"
-msgstr ""
+msgstr "Thêm địa chỉ"
 
 msgid "Helping tool for tag address"
-msgstr ""
+msgstr "Giúp công cụ cho địa chỉ tag"
 
 msgid "CadastreFR - Buildings"
-msgstr ""
+msgstr "CadastreFR - Tòa nhà"
 
 msgid "Next no"
-msgstr ""
+msgstr "Tiếp theo không"
 
 msgid "Enter addresses"
-msgstr ""
+msgstr "Nhập địa chỉ"
 
 msgid ""
 "Location \"{0}\" found in cache.\n"
 "Load cache first ?\n"
 "(No = new cache)"
 msgstr ""
+"Location \" {0} \"được tìm thấy trong bộ nhớ cache. \n"
+"Load bộ nhớ cache đầu tiên? \n"
+"(No = new cache)"
 
 msgid "Select Feuille"
-msgstr ""
+msgstr "Chọn Feuille"
 
 msgid ""
 "Error loading file.\n"
 "Probably an old version of the cache file."
 msgstr ""
+"Lỗi tải file. \n"
+"Có lẽ là một phiên bản cũ của tập tin bộ nhớ cache."
 
 msgid "Lambert Zone {0} cache file (.{0})"
-msgstr ""
+msgstr "Lambert Zone {0} file cache (. {0})"
 
 msgid "Lambert CC9 Zone {0} cache file (.CC{0})"
-msgstr ""
+msgstr "Lambert CC9 Zone {0} file cache (.cc {0})"
 
 msgid "Guadeloupe Fort-Marigot cache file (.UTM1)"
-msgstr ""
+msgstr "tập tin bộ nhớ cache Guadeloupe Fort-Marigot (.UTM1)"
 
 msgid "Guadeloupe Ste-Anne cache file (.UTM2)"
-msgstr ""
+msgstr "tập tin bộ nhớ cache Guadeloupe Ste-Anne (.UTM2)"
 
 msgid "Martinique Fort Desaix cache file (.UTM3)"
-msgstr ""
+msgstr "tập tin bộ nhớ cache Martinique Fort Desaix (.UTM3)"
 
 msgid "Reunion RGR92 cache file (.UTM4)"
-msgstr ""
+msgstr "tập tin bộ nhớ cache Reunion RGR92 (.UTM4)"
 
 msgid "CadastreGrabber: Illegal url."
-msgstr ""
+msgstr "CadastreGrabber: url bất hợp pháp."
 
 msgid ""
 "Cannot open a new client session.\n"
 "Server in maintenance or temporary overloaded."
 msgstr ""
+"Không thể mở một phiên client mới. \n"
+"Server trong việc bảo trì hoặc tạm thời bị quá tải."
 
 msgid ""
 "Town/city {0} not found or not available\n"
 "or action canceled"
 msgstr ""
+"Tỉnh / thành phố {0} không tìm thấy hoặc không có sẵn \n"
+"Hay hành động hủy bỏ"
 
 msgid "Choose from..."
-msgstr ""
+msgstr "Chọn từ ..."
 
 msgid "Select commune"
-msgstr ""
+msgstr "Chọn xã"
 
 msgid "Auto sourcing"
-msgstr ""
+msgstr "Tự động tìm nguồn cung ứng"
 
 msgid ""
 "Plugin cadastre-fr used the key shortcut F11 for grabbing,\n"
@@ -23717,94 +25644,108 @@ msgid ""
 "The new grabbing key is F10, but you can change the key\n"
 "in the shortcut settings if you want."
 msgstr ""
+"Plugin địa chính-fr sử dụng các phím tắt F11 key cho grabbing, \n"
+"Mà bây giờ được phân bổ cho chuyển đổi toàn màn hình. \n"
+"Chìa khóa grabbing mới là F10, nhưng bạn có thể thay đổi các phím \n"
+"Trong các thiết lập phím tắt nếu bạn muốn."
 
 msgid ""
 "Please enable at least two WMS layers in the cadastre-fr plugin "
 "configuration.\n"
 "Layers ''Building'' and ''Parcel'' added by default."
 msgstr ""
+"Xin vui lòng cho phép ít nhất hai lớp WMS trong địa chính-fr pluginCấu hình. "
+"\n"
+"Layers '' Xây dựng '' và '' Parcel '' được thêm vào theo mặc định."
 
 msgid ""
 "Warning: failed to put option pane dialog always on top. Exception was: {0}"
 msgstr ""
+"Cảnh báo: không thể đặt hộp thoại tùy chọn cửa sổ luôn luôn trên đầu "
+"Exception là:. {0}"
 
 msgid ""
 "To enable the cadastre WMS plugin, change\n"
 "the current projection to one of the cadastre\n"
 "projections and retry"
 msgstr ""
+"Để kích hoạt các plugin WMS địa chính, thay đổi \n"
+"Chiếu hiện tại một trong những địa chính \n"
+"Dự và thử lại"
 
 msgid "Change the current projection"
-msgstr ""
+msgstr "Thay đổi chiếu hiện tại"
 
 msgid "Replace original background by JOSM background color."
-msgstr ""
+msgstr "Thay thế nền ban đầu bởi màu nền JOSM."
 
 msgid "Reverse grey colors (for black backgrounds)."
-msgstr ""
+msgstr "Đảo ngược màu xám (cho nền đen)."
 
 msgid "Set background transparent."
-msgstr ""
+msgstr "Đặt nền trong suốt."
 
 msgid "Draw boundaries of downloaded data."
-msgstr ""
+msgstr "Vẽ ranh giới của dữ liệu tải về."
 
 msgid "Disable image cropping during georeferencing."
-msgstr ""
+msgstr "Vô hiệu hóa hình ảnh cắt xén trong georeferencing."
 
 msgid "Use \"Tableau d''assemblage\""
-msgstr ""
+msgstr "Sử dụng \" hoạt cảnh d''tập hợp \""
 
 msgid "Replace grey shades by white color only"
-msgstr ""
+msgstr "Thay thế màu xám bởi màu trắng duy nhất"
 
 msgid "Select first WMS layer in list."
-msgstr ""
+msgstr "Chọn layer WMS đầu tiên trong danh sách."
 
 msgid "Don''t use relation for addresses (but \"addr:street\" on elements)."
 msgstr ""
+"Don''t quan hệ sử dụng cho các địa chỉ (nhưng \" addr: đường \"trên các yếu "
+"tố)."
 
 msgid "off"
-msgstr ""
+msgstr "off"
 
 msgid "25 m"
-msgstr ""
+msgstr "25 m"
 
 msgid "50 m"
-msgstr ""
+msgstr "50 m"
 
 msgid "100 m"
-msgstr ""
+msgstr "100 m"
 
 msgid "symbol"
-msgstr ""
+msgstr "biểu tượng"
 
 msgid "parcel"
-msgstr ""
+msgstr "thửa"
 
 msgid "parcel number"
-msgstr ""
+msgstr "số thửa"
 
 msgid "address"
-msgstr ""
+msgstr "địa chỉ"
 
 msgid "locality"
-msgstr ""
+msgstr "địa phương"
 
 msgid "section"
-msgstr ""
+msgstr "phần"
 
 msgid "commune"
-msgstr ""
+msgstr "xã"
 
 msgid "Enable automatic caching."
-msgstr ""
+msgstr "Kích hoạt tính năng bộ nhớ đệm tự động."
 
 msgid "Max. cache size (in MB)"
-msgstr ""
+msgstr "Kích thước tối đa. cache (trong MB)"
 
 msgid "French cadastre WMS"
-msgstr ""
+msgstr "Pháp địa chính WMS"
 
 msgid ""
 "A special handler of the French cadastre wms at "
@@ -23815,1335 +25756,1433 @@ msgid ""
 "http://www.cadastre.gouv.fr/scpc/html/CU_01_ConditionsGenerales_fr.html</a> "
 "<BR>before any upload of data created by this plugin."
 msgstr ""
+"A xử lý đặc biệt của địa chính Pháp WMS tạiWww.cadastre.gouv.fr <BR> <BR> "
+"Xin vui lòng đọc các Điều khoản và Điều kiện sử dụng ở đây(Bằng tiếng Pháp): "
+"<br> <aHref = \" "
+"http://www.cadastre.gouv.fr/scpc/html/CU_01_ConditionsGenerales_fr.htm L \"> "
+"Http://www.cadastre.gouv.fr/scpc/html/CU_01_ConditionsGenerales_fr.html "
+"</a><BR> Trước khi upload dữ liệu được tạo ra bởi các plugin này."
 
 msgid "<html>Value of key \"source\" when autosourcing is enabled</html>"
 msgstr ""
+"<html> Giá trị của key \" nguồn \"khi autosourcing được kích hoạt </ html>"
 
 msgid ""
 "Replace the original white background by the background color defined in "
 "JOSM preferences."
 msgstr ""
+"Thay thế các nền màu trắng ban đầu bởi màu nền được xác định trongSở thích "
+"JOSM."
 
 msgid ""
 "Invert the original black and white colors (and all intermediate greys). "
 "Useful for texts on dark backgrounds."
 msgstr ""
+"Đảo ngược màu sắc ban đầu màu đen và màu trắng (và tất cả các màu xám trung "
+"gian).Hữu ích cho văn bản trên nền tối."
 
 msgid "Allows multiple layers stacking"
-msgstr ""
+msgstr "Cho phép nhiều lớp xếp chồng"
 
 msgid "Set WMS layers transparency. Right is opaque, left is transparent."
-msgstr ""
+msgstr "Đặt WMS lớp minh bạch. Phải là đục, bên trái là minh bạch."
 
 msgid "Draw a rectangle around downloaded data from WMS server."
-msgstr ""
+msgstr "Vẽ một hình chữ nhật quanh dữ liệu tải về từ máy chủ WMS."
 
 msgid "Image resolution:"
-msgstr ""
+msgstr "Hình ảnh độ phân giải:"
 
 msgid "High resolution (1000x800)"
-msgstr ""
+msgstr "độ phân giải cao (1000x800)"
 
 msgid "Medium resolution (800x600)"
-msgstr ""
+msgstr "độ phân giải trung bình (800x600)"
 
 msgid "Low resolution (600x400)"
-msgstr ""
+msgstr "độ phân giải thấp (600x400)"
 
 msgid "Image filter interpolation:"
-msgstr ""
+msgstr "bộ lọc hình ảnh nội suy:"
 
 msgid "Nearest-Neighbor (fastest) [ Default ]"
-msgstr ""
+msgstr "gần-Neighbor (nhanh nhất) [Mặc định]"
 
 msgid "Bilinear (fast)"
-msgstr ""
+msgstr "Bilinear (nhanh)"
 
 msgid "Bicubic (slow)"
-msgstr ""
+msgstr "Bicubic (chậm)"
 
 msgid "Vector images grab multiplier:"
-msgstr ""
+msgstr "Vector hình ảnh lấy nhân:"
 
 msgid "Grab one image full screen"
-msgstr ""
+msgstr "Lấy một hình ảnh toàn màn hình"
 
 msgid "Grab smaller images (higher quality but use more memory)"
 msgstr ""
+"Lấy hình ảnh nhỏ hơn (chất lượng cao hơn nhưng sử dụng nhiều bộ nhớ hơn)"
 
 msgid "Fixed size square (default is 100m)"
-msgstr ""
+msgstr "Fixed kích thước vuông (mặc định là 100m)"
 
 msgid "Fixed size (from 25 to 1000 meters)"
-msgstr ""
+msgstr "kích thước cố định (25-1000 mét)"
 
 msgid "Layers:"
-msgstr ""
+msgstr "Layers:"
 
 msgid "Sea, rivers, swimming pools."
-msgstr ""
+msgstr "Biển, sông, hồ bơi."
 
 msgid "Buildings, covers, underground constructions."
-msgstr ""
+msgstr "Công trình, bao gồm, các công trình ngầm."
 
 msgid "Symbols like cristian cross."
-msgstr ""
+msgstr "Biểu tượng như cross cristian."
 
 msgid "Parcels."
-msgstr ""
+msgstr "Bưu kiện."
 
 msgid "Parcels numbers, street names."
-msgstr ""
+msgstr "số bưu phẩm, tên đường phố."
 
 msgid "Address, houses numbers."
-msgstr ""
+msgstr "Địa chỉ, số nhà."
 
 msgid "Locality, hamlet, place."
-msgstr ""
+msgstr "Địa phương, thôn, nơi."
 
 msgid "Cadastral sections and subsections."
-msgstr ""
+msgstr "phần địa chính và phần phụ."
 
 msgid "Municipality administrative borders."
-msgstr ""
+msgstr "Thành phố biên giới hành chính."
 
 msgid "Raster images grab multiplier:"
-msgstr ""
+msgstr "hình ảnh Raster lấy nhân:"
 
 msgid ""
 "Add the \"Tableau(x) d''assemblage\" in the list of cadastre sheets to grab."
 msgstr ""
+"Thêm \" hoạt cảnh (x) d''tập hợp \"trong danh sách các tờ địa chính để lấy."
 
 msgid "Replace greyscale by white color (smaller files and memory usage)."
 msgstr ""
+"Thay thế bằng tông màu xám màu trắng (các file nhỏ hơn và sử dụng bộ nhớ)."
 
 msgid "Display crosspieces:"
-msgstr ""
+msgstr "Display Thanh dầm:"
 
 msgid "Allows an automatic caching"
-msgstr ""
+msgstr "Cho phép bộ nhớ đệm tự động"
 
 msgid "Oldest files are automatically deleted when this size is exceeded"
-msgstr ""
+msgstr "các tập tin cũ sẽ được tự động xóa khi kích thước này bị vượt quá"
 
 msgid ""
 "Automatically selects the first WMS layer if multiple layers exist when "
 "grabbing."
-msgstr ""
+msgstr "Tự động chọn lớp WMS đầu tiên, nếu lớp tồn tại khiLấy."
 
 msgid "Enable this to use the tag \"add:street\" on nodes."
 msgstr ""
+"Kích hoạt tính năng này để sử dụng các tag \" thêm: đường \"trên các nút."
 
 msgid "Unexpected file extension. {0}"
-msgstr ""
+msgstr "Unexpected mở rộng tập tin. {0}"
 
 msgid "Add \"source=...\" to elements?"
-msgstr ""
+msgstr "Thêm \" source = ... \"để tố?"
 
 msgid "Downloading {0}"
-msgstr ""
+msgstr "Tải {0}"
 
 msgid "Contacting WMS Server..."
-msgstr ""
+msgstr "Liên hệ với WMS Server ..."
 
 msgid "Create buildings"
-msgstr ""
+msgstr "Tạo tòa nhà"
 
 msgid ""
 "To avoid cadastre WMS overload,\n"
 "building import size is limited to 1 km2 max."
 msgstr ""
+"Để tránh tình trạng quá tải địa chính WMS, \n"
+"Quy mô xây dựng nhập khẩu được giới hạn từ 1 km2 max."
 
 msgid "Please, enable auto-sourcing and check cadastre millesime."
 msgstr ""
+"Xin vui lòng, cho phép tự động tìm nguồn cung ứng và kiểm tra địa chính "
+"Millesime."
 
 msgid "Extract SVG ViewBox..."
-msgstr ""
+msgstr "Extract SVG ViewBox ..."
 
 msgid "Extract best fitting boundary..."
-msgstr ""
+msgstr "Extract biên cho phù hợp nhất ..."
 
 msgid "Create boundary"
-msgstr ""
+msgstr "Tạo ranh giới"
 
 msgid "Contacting cadastre WMS ..."
-msgstr ""
+msgstr "Liên hệ với WMS địa chính ..."
 
 msgid "Image already loaded"
-msgstr ""
+msgstr "Hình ảnh đã được nạp"
 
 msgid ""
 "Municipality vectorized !\n"
 "Use the normal Cadastre Grab menu."
 msgstr ""
+"Thành phố vector! \n"
+"Sử dụng menu Địa chính Grab bình thường."
 
 msgid ""
 "This commune is not vectorized.\n"
 "Please use the other menu entry to georeference a \"Plan image\""
 msgstr ""
+"Xã này không vector. \n"
+"Vui lòng sử dụng mục trình đơn khác để georeference một \" hình ảnh Plan \""
 
 msgid "Extract commune boundary"
-msgstr ""
+msgstr "Extract xã biên giới"
 
 msgid "Only on vectorized layers"
-msgstr ""
+msgstr "Chỉ trên lớp véc tơ"
 
 msgid "Cancel current grab"
-msgstr ""
+msgstr "Hủy lấy hiện tại"
 
 msgid "Cancel current grab (only vector images)"
-msgstr ""
+msgstr "Hủy lấy (những ảnh vector) hiện tại"
 
 msgid "Cadastre grab"
-msgstr ""
+msgstr "Địa chính lấy"
 
 msgid "Download Image from French Cadastre WMS"
-msgstr ""
+msgstr "Tải hình ảnh từ Pháp Địa chính WMS"
 
 msgid "Cadastre: {0}"
-msgstr ""
+msgstr "Địa chính: {0}"
 
 msgid "Georeference an image"
-msgstr ""
+msgstr "georeference một hình ảnh"
 
 msgid "Grab non-georeferenced image"
-msgstr ""
+msgstr "Lấy hình ảnh không tham chiếu hình học"
 
 msgid "Georeferencing interrupted"
-msgstr ""
+msgstr "georeferencing gián đoạn"
 
 msgid ""
 "This image contains georeference data.\n"
 "Do you want to use them ?"
 msgstr ""
+"Hình ảnh này có chứa dữ liệu georeference. \n"
+"Bạn có muốn sử dụng chúng?"
 
 msgid "Load layer from cache"
-msgstr ""
+msgstr "Load layer từ bộ nhớ cache"
 
 msgid "Load location from cache (only if cache is enabled)"
-msgstr ""
+msgstr "Load vị trí từ bộ nhớ cache (bộ nhớ cache chỉ khi được kích hoạt)"
 
 msgid "{0} not allowed with the current projection"
-msgstr ""
+msgstr "{0} không được cho phép với các chiếu hiện tại"
 
 msgid ""
 "Cannot load cache {0} which is not compatible with current projection zone"
 msgstr ""
+"Không thể tải bộ nhớ cache {0} mà không tương thích với các khu vực chiếu "
+"hiện tại"
 
 msgid ""
 "Selected file {0} is not a cache file from this plugin (invalid extension)"
 msgstr ""
+"Chọn tập tin {0} không phải là một tập tin bộ nhớ cache từ plugin này (phần "
+"mở rộng không hợp lệ)"
 
 msgid "The location {0} is already on screen. Cache not loaded."
-msgstr ""
+msgstr "{0} vị trí đã được trên màn hình. cache không được nạp."
 
 msgid "(optional)"
-msgstr ""
+msgstr "(tùy chọn)"
 
 msgid "Change location"
-msgstr ""
+msgstr "Change location"
 
 msgid "Set a new location for the next request"
-msgstr ""
+msgstr "Thiết lập một vị trí mới cho các yêu cầu tiếp theo"
 
 msgid "Add a new municipality layer"
-msgstr ""
+msgstr "Thêm một layer đô thị mới"
 
 msgid "Commune"
-msgstr ""
+msgstr "xã"
 
 msgid ""
 "<html>Enter the town,village or city name.<br>Use the syntax and punctuation "
 "known by www.cadastre.gouv.fr .</html>"
 msgstr ""
+"<Html> Nhập thị trấn, làng hoặc tên thành phố. <br> Sử dụng cú pháp và chấm "
+"câuĐược biết đến bởi www.cadastre.gouv.fr. </ Html>"
 
 msgid "Departement"
-msgstr ""
+msgstr "Lãnh thổ hải"
 
 msgid "<html>Departement number (optional)</html>"
-msgstr ""
+msgstr "<html> số thuộc tỉnh (tùy chọn) </ html>"
 
 msgid "Add new layer"
-msgstr ""
+msgstr "thêm một lớp mới"
 
 msgid "Open Cadastre Preferences"
-msgstr ""
+msgstr "Preferences mở Địa chính"
 
 msgid "Refine georeferencing"
-msgstr ""
+msgstr "Lọc georeferencing"
 
 msgid "Improve georeferencing (only raster images)"
-msgstr ""
+msgstr "Nâng cao georeferencing (chỉ hình ảnh raster)"
 
 msgid "Reset cookie"
-msgstr ""
+msgstr "Đặt lại cookie"
 
 msgid "Get a new cookie (session timeout)"
-msgstr ""
+msgstr "Nhận một cookie mới (session timeout)"
 
 msgid "Save image as..."
-msgstr ""
+msgstr "Lưu hình ảnh thành ..."
 
 msgid "PNG files (*.png)"
-msgstr ""
+msgstr "các tập tin PNG (* .png)"
 
 msgid "GeoTiff files (*.tif)"
-msgstr ""
+msgstr "các tập tin tệp GeoTiff (* .tif)"
 
 msgid "Export image (only raster images)"
-msgstr ""
+msgstr "hình ảnh xuất khẩu (chỉ hình ảnh raster)"
 
 msgid ""
 "Click first corner for image cropping\n"
 "(two points required)"
 msgstr ""
+"Click vào góc đầu tiên cho hình ảnh cắt xén \n"
+"(Yêu cầu hai điểm)"
 
 msgid "Image cropping"
-msgstr ""
+msgstr "Hình ảnh cắt xén"
 
 msgid ""
 "Click first Lambert crosspiece for georeferencing\n"
 "(two points required)"
 msgstr ""
+"Trước tiên nhấp crosspiece Lambert cho georeferencing \n"
+"(Yêu cầu hai điểm)"
 
 msgid "Image georeferencing"
-msgstr ""
+msgstr "Hình ảnh georeferencing"
 
 msgid ""
 "Do you want to cancel completely\n"
 "or just retry "
 msgstr ""
+"Bạn có muốn hủy bỏ hoàn toàn \n"
+"Hay chỉ là thử lại "
 
 msgid ""
 "Ooops. I failed to catch all coordinates\n"
 "correctly. Retry please."
 msgstr ""
+"Ooops. Tôi không thể bắt tất cả các tọa độ \n"
+"Một cách chính xác. Thử lại xin vui lòng."
 
 msgid "Enter cadastre east,north position"
-msgstr ""
+msgstr "Nhập địa chính phía đông, vị trí phía bắc"
 
 msgid "(Warning: verify north with arrow !!)"
-msgstr ""
+msgstr "(Cảnh báo: xác minh bắc với mũi tên !!)"
 
 msgid "East"
-msgstr ""
+msgstr "Đông"
 
 msgid "I use the mouse"
-msgstr ""
+msgstr "tôi sử dụng chuột"
 
 msgid "Set {0} Lambert coordinates"
-msgstr ""
+msgstr "Set {0} Lambert tọa độ"
 
 msgid "Click second corner for image cropping"
-msgstr ""
+msgstr "Nhấn vào góc thứ hai cho hình ảnh cắt xén"
 
 msgid "Click second Lambert crosspiece for georeferencing"
-msgstr ""
+msgstr "Nhấn vào thứ hai Lambert crosspiece cho georeferencing"
 
 msgid "Adjust WMS"
-msgstr ""
+msgstr "Điều chỉnh WMS"
 
 msgid "Adjust the position of the WMS layer (saved for raster images only)"
-msgstr ""
+msgstr "Điều chỉnh vị trí của lớp WMS (lưu lại để chỉ hình ảnh raster)"
 
 msgid ""
 "More than one WMS layer present\n"
 "Select one of them first, then retry"
 msgstr ""
+"Hơn một lớp WMS hiện \n"
+"Chọn một trong số họ đầu tiên, sau đó thử lại"
 
 msgid "Reset offset"
-msgstr ""
+msgstr "Đặt lại bù đắp"
 
 msgid "Reset offset (only vector images)"
-msgstr ""
+msgstr "Đặt lại bù đắp (chỉ hình ảnh vector)"
+
+msgid "Blank Layer"
+msgstr "Blank Layer"
 
 msgid "WMS layer ({0}), {1} tile(s) loaded"
-msgstr ""
+msgstr "WMS layer ({0}), {1} ngói (s) nạp"
 
 msgid "Is not vectorized."
-msgstr ""
+msgstr "Không phải là vector."
 
 msgid "Bounding box: {0}"
-msgstr ""
+msgstr "bounding box: {0}"
 
 msgid "Image size (px): {0}/{1}"
-msgstr ""
+msgstr "Kích thước ảnh (px): {0} / {1}"
 
 msgid "Is vectorized."
-msgstr ""
+msgstr "Là vector."
 
 msgid "Commune bbox: {0}"
-msgstr ""
+msgstr "xã bbox: {0}"
 
 msgid ""
 "Unsupported cache file version; found {0}, expected {1}\n"
 "Create a new one."
 msgstr ""
+"Không được hỗ trợ phiên bản tập tin cache; tìm thấy {0}, dự kiến ​​{1} \n"
+"Tạo một cái mới."
 
 msgid "Cache Format Error"
-msgstr ""
+msgstr "Format cache Error"
 
 msgid "Lambert zone {0} in cache incompatible with current Lambert zone {1}"
 msgstr ""
+"Lambert {0} vùng trong bộ nhớ cache không tương thích với các khu Lambert "
+"hiện tại {1}"
 
 msgid "Cache Lambert Zone Error"
-msgstr ""
+msgstr "Cache Lambert Zone Error"
 
 msgid "canvec tile helper"
-msgstr ""
+msgstr "helper ngói canvec"
 
 msgid "Use"
-msgstr ""
+msgstr "Sử dụng"
 
 msgid "Please select a scheme to use."
-msgstr ""
+msgstr "Hãy chọn một chương trình để sử dụng."
 
 msgid "Color Scheme"
-msgstr ""
+msgstr "Color Scheme"
 
 msgid "Please select the scheme to delete."
-msgstr ""
+msgstr "Hãy chọn chương trình để xóa."
 
 msgid "Use the selected scheme from the list."
-msgstr ""
+msgstr "Sử dụng các chương trình được lựa chọn từ danh sách."
 
 msgid "Use the current colors as a new color scheme."
-msgstr ""
+msgstr "Sử dụng các màu sắc hiện tại như là một màu sắc mới."
 
 msgid "Delete the selected scheme from the list."
-msgstr ""
+msgstr "Xóa các chương trình được lựa chọn từ danh sách."
 
 msgid "Color Schemes"
-msgstr ""
+msgstr "Color Schemes"
 
 msgid "Conflate object pair"
-msgstr ""
+msgstr "conflate cặp đối tượng"
 
 msgid "Added {0} object to subject layer"
 msgid_plural "Added {0} objects to subject layer"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Added {0} đối tượng cho lớp chủ đề"
 
 msgid "Conflation"
-msgstr ""
+msgstr "Conflation"
 
 msgid "Activates the conflation plugin"
-msgstr ""
+msgstr "Kích hoạt các plugin conflation"
 
 msgid "Matches"
-msgstr ""
+msgstr "Phù hợp"
 
 msgid "Reference only"
-msgstr ""
+msgstr "Tham chiếu chỉ"
 
 msgid "Subject only"
-msgstr ""
+msgstr "Subject chỉ"
 
 msgid "Matches ({0})"
-msgstr ""
+msgstr "Những Trận Đấu ({0})"
 
 msgid "Reference only ({0})"
-msgstr ""
+msgstr "Reference chỉ ({0})"
 
 msgid "Subject only ({0})"
-msgstr ""
+msgstr "Subject chỉ ({0})"
 
 msgid "Configure"
-msgstr ""
+msgstr "Cấu hình"
 
 msgid "Configure conflation options"
-msgstr ""
+msgstr "Cấu hình tùy chọn conflation"
 
 msgid "Delete {0} conflation matches"
-msgstr ""
+msgstr "Xóa {0} conflation phù hợp"
 
 msgid "Remove {0} unmatched objects"
-msgstr ""
+msgstr "Xóa {0} đối tượng chưa từng có"
 
 msgid "Remove selected matches"
-msgstr ""
+msgstr "Hủy bỏ trận đấu được chọn"
 
 msgid "Conflate"
-msgstr ""
+msgstr "conflate"
 
 msgid "Conflate selected objects"
-msgstr ""
+msgstr "conflate đối tượng được chọn"
 
 msgid "Conflation: {0}"
-msgstr ""
+msgstr "Conflation: {0}"
 
 msgid "Cannot replace geometry."
-msgstr ""
+msgstr "Không thể thay thế hình học."
 
 msgid "Zoom to selected primitive(s)"
-msgstr ""
+msgstr "Zoom để chọn nguyên thủy (s)"
 
 msgid "Select selected primitive(s)"
-msgstr ""
+msgstr "Chọn lựa chọn nguyên thủy (s)"
 
 msgid "Select the primitives currently selected in the list"
-msgstr ""
+msgstr "Chọn nguyên thủy hiện đang được chọn trong danh sách"
 
 msgid "Match finder settings"
-msgstr ""
+msgstr "công cụ tìm Match settings"
 
 msgid "Match finder method"
-msgstr ""
+msgstr "phương pháp cụ tìm Match"
 
 msgid "Threshold distance"
-msgstr ""
+msgstr "Threshold khoảng cách"
 
 msgid "Distances greater than this will result in a score of zero."
-msgstr ""
+msgstr "Khoảng cách lớn hơn này sẽ dẫn đến một số điểm là zero."
 
 msgid "Centroid distance"
-msgstr ""
+msgstr "khoảng cách trọng tâm"
 
 msgid "Hausdorff distance"
-msgstr ""
+msgstr "Hausdorff khoảng cách"
 
 msgid "Configure conflation settings"
-msgstr ""
+msgstr "Cấu hình cài đặt conflation"
 
 msgid "Generate matches"
-msgstr ""
+msgstr "Tạo ra các trận đấu"
 
 msgid "Subject"
-msgstr ""
+msgstr "Tiêu đề"
 
 msgid "Selections must be made for both reference and subject."
 msgstr ""
+"Selections phải được thực hiện cho cả hai tài liệu tham khảo và phụ thuộc."
 
 msgid "Incomplete selections"
-msgstr ""
+msgstr "Lựa chọn Incomplete"
 
 msgid "Restore subject selection"
-msgstr ""
+msgstr "Khôi phục lựa chọn chủ đề"
 
 msgid "Restore reference selection"
-msgstr ""
+msgstr "Khôi phục lựa chọn tài liệu tham khảo"
 
 msgid "Freeze subject selection"
-msgstr ""
+msgstr "Freeze lựa chọn chủ đề"
 
 msgid "No valid OSM data layer present."
-msgstr ""
+msgstr "Không OSM hợp lệ lớp dữ liệu hiện tại."
 
 msgid "Error freezing selection"
-msgstr ""
+msgstr "Lỗi đông lựa chọn"
 
 msgid "Nothing is selected, please try again."
-msgstr ""
+msgstr "Không có gì được chọn, vui lòng thử lại."
 
 msgid "Empty selection"
-msgstr ""
+msgstr "lựa chọn Empty"
 
 msgid "Invalid reference or subject"
-msgstr ""
+msgstr "tham chiếu không hợp lệ hay chủ đề"
 
 msgid "Address"
-msgstr ""
+msgstr "Địa chỉ"
 
 msgid "Split area"
-msgstr ""
+msgstr "Split khu vực"
 
 msgid "Splits an area by an untagged way."
-msgstr ""
+msgstr "Tách một khu vực bằng cách gắn thẻ."
 
 msgid ""
 "The selected area cannot be splitted, because it is a member of some "
 "relation.\n"
 "Remove the area from the relation before splitting it."
 msgstr ""
+"Các khu vực được lựa chọn không thể bị tách, bởi vì nó là một thành viên của "
+"một sốMối quan hệ. \n"
+"Hủy bỏ các diện tích từ mối quan hệ trước khi chia tách nó."
 
 msgid "TangoGPS Files (*.log)"
-msgstr ""
+msgstr "TangoGPS Files (* .log)"
 
 msgid "Coordinates imported: "
-msgstr "Tọa độ được nhập vào: "
+msgstr "tọa độ nhập khẩu: "
 
 msgid "Format errors: "
-msgstr ""
+msgstr "Format lỗi: "
 
 msgid "TangoGPS import success"
-msgstr ""
+msgstr "TangoGPS nhập thành công"
 
 msgid "TangoGPS import failure!"
-msgstr ""
+msgstr "TangoGPS nhập thất bại!"
 
 msgid "TCX Files (*.tcx)"
-msgstr ""
+msgstr "TCX Files (* .tcx)"
 
 msgid "Download along..."
-msgstr ""
+msgstr "Tải về cùng ..."
 
 msgid "Download OSM data along the selected ways."
-msgstr ""
+msgstr "dữ liệu Tải OSM dọc theo những cách lựa chọn."
 
 msgid "Download Along"
-msgstr ""
+msgstr "Tải Cùng"
 
 msgid "Please select 1 or more ways to download along"
-msgstr ""
+msgstr "Hãy chọn 1 hoặc nhiều cách để tải về cùng"
 
 msgid "Download from OSM along selected ways"
-msgstr ""
+msgstr "Tải từ OSM cùng cách chọn"
 
 msgid "{0} intermediate nodes to download."
-msgstr ""
+msgstr "{0} các nút trung gian để tải về."
 
 msgid "between {0} {1} and {2} {3}"
-msgstr ""
+msgstr "giữa {0} {1} và {2} {3}"
 
 msgid "  adding {0} {1}"
-msgstr ""
+msgstr "  thêm {0} {1}"
 
 msgid "Layer for editing GPX tracks"
-msgstr ""
+msgstr "Layer để chỉnh sửa GPX theo dõi"
 
 msgid "Convert to GPX layer with anonymised time"
-msgstr ""
+msgstr "Chuyển đổi sang lớp GPX với thời gian ẩn danh"
 
 msgid "EditGpx"
-msgstr ""
+msgstr "EditGpx"
 
 msgid "edit gpx tracks"
-msgstr ""
+msgstr "bài hát chỉnh sửa GPX"
 
 msgid "Import path from GPX layer"
-msgstr ""
+msgstr "con đường nhập khẩu từ lớp GPX"
 
 msgid "Drop existing path"
-msgstr ""
+msgstr "Thả con đường hiện tại"
 
 msgid "No GPX data layer found."
-msgstr ""
+msgstr "Không có lớp dữ liệu GPX được tìm thấy."
 
 msgid "External tool error"
-msgstr ""
+msgstr "ngoài lỗi công cụ"
 
 msgid "Error executing the script:"
-msgstr ""
+msgstr "Lỗi thực hiện kịch bản:"
 
 msgid ""
 "Child script have returned invalid data.\n"
 "\n"
 "stderr contents:"
 msgstr ""
+"Kịch bản trẻ em đã trở về dữ liệu không hợp lệ. \n"
+"\n"
+"Nội dung stderr:"
 
 msgid "exttool:{0}"
-msgstr ""
+msgstr "exttool: {0}"
 
 msgid "External Tool: {0}"
-msgstr ""
+msgstr "Công cụ bên ngoài: {0}"
 
 msgid "Edit tool"
-msgstr ""
+msgstr "Chỉnh sửa công cụ"
 
 msgid "CmdLine:"
-msgstr ""
+msgstr "cmdline:"
 
 msgid "External tools"
-msgstr ""
+msgstr "Công cụ bên ngoài"
 
 msgid "Delete tool \"{0}\"?"
-msgstr ""
+msgstr "Xóa công cụ \" {0} \"?"
 
 msgid "Are you sure?"
-msgstr ""
+msgstr "Bạn có chắc chắn?"
 
 msgid "New tool..."
-msgstr ""
+msgstr "công cụ mới ..."
 
 msgid "Install"
-msgstr ""
+msgstr "Cài đặt"
 
 msgid "Public"
-msgstr ""
+msgstr "Public"
 
 msgid "Could not get server response, check logs"
-msgstr ""
+msgstr "Không thể có được phản ứng máy chủ, kiểm tra nhật ký"
 
 msgid "Failed to login as {0}:"
-msgstr ""
+msgstr "Không thể đăng nhập như là {0}:"
 
 msgid "The server did not return user ID"
-msgstr ""
+msgstr "Các máy chủ đã không trả lại người sử dụng ID"
 
 msgid "Failed to get messages as {0}:"
-msgstr ""
+msgstr "Không nhận được tin nhắn như {0}:"
 
 msgid "GeoChat"
-msgstr ""
+msgstr "GeoChat"
 
 msgid "Open GeoChat panel"
-msgstr ""
+msgstr "Open bảng GeoChat"
 
 msgid "Zoom in to see messages"
-msgstr ""
+msgstr "Phóng to để xem tin nhắn"
 
 msgid "Login"
-msgstr ""
+msgstr "Đăng nhập"
 
 msgid "Enable autologin"
-msgstr ""
+msgstr "Bật AutoLogin"
 
 msgid "{0} user"
 msgid_plural "{0} users"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} người sử dụng"
 
 msgid "not logged in"
-msgstr ""
+msgstr "không đăng nhập"
 
 msgid "Failed to log in to GeoChat:"
-msgstr ""
+msgstr "Không thể đăng nhập vào GeoChat:"
 
 msgid "Failed to send message:"
-msgstr ""
+msgstr "Không gửi được tin nhắn:"
 
 msgid "User {0} has left"
-msgstr ""
+msgstr "User {0} đã để lại"
 
 msgid "User {0} is mapping nearby"
-msgstr ""
+msgstr "User {0} là lập bản đồ gần đó"
 
 msgid "Users mapping nearby:"
-msgstr ""
+msgstr "Người dùng bản đồ gần đó:"
 
 msgid "Private chat"
-msgstr ""
+msgstr "chuyện riêng"
 
 msgid "Close tab"
-msgstr ""
+msgstr "Close Tab"
 
 msgid "Logout"
-msgstr ""
+msgstr "Thoát"
 
 msgid "Clear log"
-msgstr ""
+msgstr "Xóa nhật ký"
 
 msgid "Show users on map"
-msgstr ""
+msgstr "Hiện người dùng trên bản đồ"
 
 msgid "Position only"
-msgstr ""
+msgstr "Vị trí chỉ"
 
 msgid "Position, Time, Date, Speed"
-msgstr ""
+msgstr "Vị trí, thời gian, ngày, Speed"
 
 msgid "Position, Time, Date, Speed, Altitude"
-msgstr ""
+msgstr "Vị trí, thời gian, ngày, tốc độ, độ cao"
 
 msgid "A By Time"
-msgstr ""
+msgstr "A theo thời gian"
 
 msgid "A By Distance"
-msgstr ""
+msgstr "Một By Distance"
 
 msgid "B By Time"
-msgstr ""
+msgstr "B theo thời gian"
 
 msgid "B By Distance"
-msgstr ""
+msgstr "B Bằng cách"
 
 msgid "C By Time"
-msgstr ""
+msgstr "C theo thời gian"
 
 msgid "C By Distance"
-msgstr ""
+msgstr "C By Distance"
 
 msgid "Data Logging Format"
-msgstr ""
+msgstr "Data Logging Format"
 
 msgid "Disable data logging if speed falls below"
-msgstr ""
+msgstr "Disable dữ liệu đăng nhập nếu tốc độ giảm xuống dưới"
 
 msgid "Disable data logging if distance falls below"
-msgstr ""
+msgstr "Disable dữ liệu đăng nhập nếu khoảng cách xuống dưới"
 
 msgid "Unknown logFormat"
-msgstr ""
+msgstr "LogFormat Unknown"
 
 msgid "Port:"
-msgstr ""
+msgstr "Port:"
 
 msgid "refresh the port list"
-msgstr ""
+msgstr "làm mới danh sách cổng"
 
 msgid "Configure Device"
-msgstr ""
+msgstr "Cấu hình thiết bị"
 
 msgid "Connection Error."
-msgstr ""
+msgstr "Lỗi kết nối"
 
 msgid "configure the connected DG100"
-msgstr ""
+msgstr "cấu hình DG100 kết nối"
 
 msgid "delete data after import"
-msgstr ""
+msgstr "xóa dữ liệu sau khi nhập khẩu"
 
 msgid "Importing data from device."
-msgstr ""
+msgstr "Nhập dữ liệu từ thiết bị."
 
 msgid "Importing data from DG100..."
-msgstr ""
+msgstr "Nhập dữ liệu từ DG100 ..."
 
 msgid "Error deleting data."
-msgstr ""
+msgstr "Lỗi xóa dữ liệu."
 
 msgid "imported data from {0}"
-msgstr ""
+msgstr "nhập dữ liệu từ {0}"
 
 msgid "No data found on device."
-msgstr ""
+msgstr "Không tìm thấy dữ liệu trên thiết bị."
 
 msgid "Connection failed."
-msgstr ""
+msgstr "Kết nối thất bại."
 
 msgid ""
 "Cannot load library rxtxSerial. If you need support to install it try "
 "Globalsat homepage at http://www.raphael-mack.de/josm-globalsat-gpx-import-"
 "plugin/"
 msgstr ""
+"Không thể tải rxtxSerial thư viện. Nếu bạn cần hỗ trợ để cài đặt nó cố "
+"gắngTrang chủ Globalsat tại http://www.raphael-mack.de/josm-globalsat-gpx-"
+"import-Cắm vào /"
 
 msgid "Globalsat Import"
-msgstr ""
+msgstr "Globalsat nhập khẩu"
 
 msgid "Import Data from Globalsat Datalogger DG100 into GPX layer."
-msgstr ""
+msgstr "Nhập dữ liệu từ Globalsat Datalogger DG100 vào lớp GPX."
 
 msgid "Import"
-msgstr ""
+msgstr "nhập khẩu"
 
 msgid "GPS Blams"
-msgstr ""
+msgstr "GPS Blams"
 
 msgid "GPSBlam"
-msgstr ""
+msgstr "GPSBlam"
 
 msgid "select gpx points and \"blam!\", find centre and direction of spread"
-msgstr ""
+msgstr "chọn điểm GPX và \" blam! \", tìm trung tâm và hướng lây lan"
 
 msgid "Add EGPX layer"
-msgstr ""
+msgstr "Add layer EGPX"
 
 msgid "GPX Data"
-msgstr ""
+msgstr "GPX Data"
 
 msgid "Classes element below root child level"
-msgstr ""
+msgstr "Lớp học phần dưới mức con root"
 
 msgid "Class element ({0}) outside classes element"
-msgstr ""
+msgstr "yếu tố Class ({0}) bên ngoài lớp học phần"
 
 msgid "Class element without name"
-msgstr ""
+msgstr "phần tử lớp mà không có tên"
 
 msgid "Tag element outside basetag and implication elements"
-msgstr ""
+msgstr "Tag yếu tố bên ngoài basetag và ý nghĩa các yếu tố"
 
 msgid "Implications element below root child level"
-msgstr ""
+msgstr "Những ảnh hưởng yếu tố dưới mức con root"
 
 msgid "Tag without key"
-msgstr ""
+msgstr "Tag mà không cần chìa khóa"
 
 msgid "Tag without value (key is {0})"
-msgstr ""
+msgstr "Tag không có giá trị (khóa là {0})"
 
 msgid "Closed classes while it was not open"
-msgstr ""
+msgstr "lớp học Closed trong khi nó đã không mở"
 
 msgid "Closed classes element before all class elements were closed"
 msgstr ""
+"phần tử lớp Closed trước khi tất cả các yếu tố đẳng cấp đã bị đóng cửa"
 
 msgid "Closed class element while none was open"
-msgstr ""
+msgstr "phần tử lớp Closed trong khi không được mở"
 
 msgid "Closed basetags while it was not open"
-msgstr ""
+msgstr "basetags Closed trong khi nó đã không mở"
 
 msgid "Closed implications while it was not open"
-msgstr ""
+msgstr "tác động Closed trong khi nó đã không mở"
 
 msgid "Tag element inside other tag element"
-msgstr ""
+msgstr "Tag yếu tố bên trong phần tử thẻ khác"
 
 msgid "Invalid opening xml tag <{0}> in state {1}"
-msgstr ""
+msgstr "thẻ mở xml không hợp lệ <{0}> trong trạng thái {1}"
 
 msgid "Condition isn''t finished at </condition> tag"
-msgstr ""
+msgstr "Condition isn''t xong tại </ condition> tag"
 
 msgid "Closing tag element that was not open"
-msgstr ""
+msgstr "Đóng tố tag mà không mở"
 
 msgid "Invalid closing xml tag </{0}> in state {1}"
-msgstr ""
+msgstr "thẻ đóng xml không hợp lệ </ {0}> trong trạng thái {1}"
 
 msgid "Some tags have not been closed; now in state {0}"
-msgstr ""
+msgstr "Một số thẻ đã không bị đóng cửa, bây giờ ở trạng thái {0}"
 
 msgid "Key element without attribute k"
-msgstr ""
+msgstr "yếu tố chính mà không có thuộc tính k"
 
 msgid "Condition is already finished at <{0}>"
-msgstr ""
+msgstr "Điều kiện đã được hoàn thành tại <{0}>"
 
 msgid "Unknown tag for condition: {0}"
-msgstr ""
+msgstr "tag Unknown cho điều kiện: {0}"
 
 msgid "Element must not have children: {0}"
-msgstr ""
+msgstr "Yếu tố không phải có con: {0}"
 
 msgid "Condition is already finished at </{0}>"
-msgstr ""
+msgstr "Điều kiện đã được hoàn thành tại </ {0}>"
 
 msgid "<and> needs at least one child"
-msgstr ""
+msgstr "<và> cần ít nhất một con"
 
 msgid "<or> needs at least one child"
-msgstr ""
+msgstr "<hoặc> cần ít nhất một con"
 
 msgid "<not> needs at least one child"
-msgstr ""
+msgstr "<không> nhu cầu ít nhất một con"
 
 msgid "Wrong closing tag {0} (</{1}> expected)"
-msgstr ""
+msgstr "tag Wrong đóng {0} (</ {1}> dự kiến)"
 
 msgid "Condition {0} not yet finished"
-msgstr ""
+msgstr "Condition {0} chưa kết thúc"
 
 msgid "Group not yet evaluated"
-msgstr ""
+msgstr "Tập đoàn chưa được đánh giá"
 
 msgid "Collection must contain at least one condition"
-msgstr ""
+msgstr "Bộ sưu tập phải có ít nhất một điều kiện"
 
 msgid "No ruleset has been selected!"
-msgstr ""
+msgstr "Không ruleset đã được chọn!"
 
 msgid "No ruleset"
-msgstr ""
+msgstr "Không ruleset"
 
 msgid ""
 "Syntax exception in access ruleset:\n"
 "{0}"
 msgstr ""
+"Cú pháp ngoại lệ trong số các nguyên tắc truy cập: \n"
+"{0}"
 
 msgid ""
 "File not found:\n"
 "{0}"
 msgstr ""
+"File không tìm thấy: \n"
+"{0}"
 
 msgid ""
 "Problem when accessing a file:\n"
 "{0}"
 msgstr ""
+"Vấn đề khi truy cập vào một tập tin: \n"
+"{0}"
 
 msgid "File not found:\n"
-msgstr ""
+msgstr "File không tìm thấy:\n"
 
 msgid "Couldn''t find built-in ruleset {0}"
-msgstr ""
+msgstr "Couldn''t tìm được xây dựng trong số các nguyên tắc {0}"
 
 msgid "height (m)"
-msgstr ""
+msgstr "chiều cao (m)"
 
 msgid "width (m)"
-msgstr ""
+msgstr "chiều rộng (m)"
 
 msgid "length (m)"
-msgstr ""
+msgstr "chiều dài (m)"
 
 msgid "speed (km/h)"
-msgstr ""
+msgstr "tốc độ (km / h)"
 
 msgid "weight (t)"
-msgstr ""
+msgstr "trọng lượng (t)"
 
 msgid "axleload (t)"
-msgstr ""
+msgstr "axleload (t)"
 
 msgid "Bookmark name"
-msgstr ""
+msgstr "Bookmark name"
 
 msgid "Bookmark name already exists!"
-msgstr ""
+msgstr "tên Bookmark đã tồn tại!"
 
 msgid "Bookmark name must not contain ''{0}''!"
-msgstr ""
+msgstr "tên Bookmark không phải chứa '' {0} ''!"
 
 msgid "Access class"
-msgstr ""
+msgstr "class Access"
 
 msgid "Access class must not contain ''{0}''!"
-msgstr ""
+msgstr "class Access không phải chứa '' {0} ''!"
 
 msgid "Access types"
-msgstr ""
+msgstr "các loại Access"
 
 msgid "Vehicle properties"
-msgstr ""
+msgstr "tài sản xe"
 
 msgid "Road requirements"
-msgstr ""
+msgstr "yêu cầu Road"
 
 msgid "Max. incline up (%, pos.)"
-msgstr ""
+msgstr "Max. nghiêng lên (%, pos.)"
 
 msgid "Maximum incline the vehicle can go up"
-msgstr ""
+msgstr "nghiêng tối đa chiếc xe có thể đi lên"
 
 msgid "Max. incline down (%, pos.)"
-msgstr ""
+msgstr "Max. nghiêng xuống (%, pos.)"
 
 msgid "Maximum incline the vehicle can go down"
-msgstr ""
+msgstr "nghiêng tối đa chiếc xe có thể đi xuống"
 
 msgid "Surface blacklist"
-msgstr ""
+msgstr "Surface danh sách đen"
 
 msgid ""
 "List of surfaces the vehicle cannot use, values are separated by semicolons "
 "(;)"
 msgstr ""
+"Danh sách các bề mặt chiếc xe không thể sử dụng, giá trị được phân cách bằng "
+"dấu chấm phẩy(;)"
 
 msgid "max. tracktype grade"
-msgstr ""
+msgstr "tối đa. tracktype lớp"
 
 msgid "Worst tracktype (1-5) the vehicle can still use, 0 for none"
-msgstr ""
+msgstr "tracktype tồi tệ nhất (1-5) chiếc xe vẫn có thể sử dụng, 0 cho không"
 
 msgid "Change bookmark"
-msgstr ""
+msgstr "Thay đổi bookmark"
 
 msgid "Edit access parameters"
-msgstr ""
+msgstr "các thông số chỉnh truy cập"
 
 msgid "Graph View Dialog"
-msgstr ""
+msgstr "Graph Xem Dialog"
 
 msgid "Open the dialog for graph view configuration."
-msgstr ""
+msgstr "Mở hộp thoại để xem đồ thị cấu hình."
 
 msgid "default"
-msgstr ""
+msgstr "mặc định"
 
 msgid "end nodes"
-msgstr ""
+msgstr "nút kết thúc"
 
 msgid "incline"
-msgstr ""
+msgstr "nghiêng"
 
 msgid "Ruleset:"
-msgstr ""
+msgstr "số các nguyên tắc:"
 
 msgid "Parameters:"
-msgstr ""
+msgstr "Parameters:"
 
 msgid "Coloring:"
-msgstr ""
+msgstr "Coloring:"
 
 msgid "Create/update graph"
-msgstr ""
+msgstr "Tạo đồ thị / cập nhật"
 
 msgid "Graphview"
-msgstr ""
+msgstr "Graphview"
 
 msgid "Settings for the Graphview plugin that visualizes routing graphs."
-msgstr ""
+msgstr "Cài đặt cho các plugin Graphview mà hiển thị đồ thị định tuyến."
 
 msgid "Ruleset"
-msgstr ""
+msgstr "số các nguyên tắc"
 
 msgid "Use built-in rulesets"
-msgstr ""
+msgstr "Sử dụng được xây dựng trong rulesets"
 
 msgid "External ruleset directory:"
-msgstr ""
+msgstr "thư mục ruleset ngoài:"
 
 msgid "Select directory"
-msgstr ""
+msgstr "Chọn thư mục"
 
 msgid "Vehicle"
-msgstr ""
+msgstr "xe"
 
 msgid "Restore defaults"
-msgstr ""
+msgstr "Khôi phục mặc định"
 
 msgid "Visualization"
-msgstr ""
+msgstr "Hình ảnh"
 
 msgid "Draw directions separately"
-msgstr ""
+msgstr "Vẽ đường riêng"
 
 msgid "Node color"
-msgstr ""
+msgstr "Node màu"
 
 msgid "Arrow color"
-msgstr ""
+msgstr "Mũi tên màu"
 
 msgid "Arrowhead fill color"
-msgstr ""
+msgstr "Arrowhead đầy màu sắc"
 
 msgid "Arrowhead placement"
-msgstr ""
+msgstr "Arrowhead vị trí"
 
 msgid "New bookmark"
-msgstr ""
+msgstr "bookmark mới"
 
 msgid "Really delete \"{0}\"?"
-msgstr ""
+msgstr "Thực sự muốn xoá \" {0} \"?"
 
 msgid "Bookmark deletion"
-msgstr ""
+msgstr "Bookmark xóa"
 
 msgid ""
 "Really restore default bookmarks?\n"
 "All manually added or edited bookmarks will be lost!"
 msgstr ""
+"Thật khôi phục bookmark mặc định? \n"
+"Tất cả dấu tay thêm hoặc chỉnh sửa sẽ bị mất!"
 
 msgid "Bookmark reset"
-msgstr ""
+msgstr "Bookmark reset"
 
 msgid "Choose node color"
-msgstr ""
+msgstr "Chọn nút màu"
 
 msgid "Choose arrow color"
-msgstr ""
+msgstr "Chọn mũi tên màu"
 
 msgid "Choose arrowhead fill color"
-msgstr ""
+msgstr "Chọn màu lấp mũi tên"
 
 msgid "Routing graph calculated by the GraphView plugin"
-msgstr ""
+msgstr "đồ thị tuyến tính bởi các plugin GraphView"
 
 msgid "GraphView layer is not mergable"
-msgstr ""
+msgstr "layer GraphView là không mergable"
 
 msgid "graphview default node"
-msgstr ""
+msgstr "nút graphview mặc định"
 
 msgid "graphview default segment"
-msgstr ""
+msgstr "phân khúc graphview mặc định"
 
 msgid "graphview arrowhead core"
-msgstr ""
+msgstr "graphview đầu mũi tên cốt lõi"
 
 msgid ""
 "Weights must be given as positive decimal numbers with unit \"t\" or without "
 "unit."
 msgstr ""
+"Cân phải được đưa ra như là số thập phân dương với đơn vị \" t \"hoặc không "
+"cóĐơn vị"
 
 msgid ""
 "Lengths must be given as positive decimal numbers with unit \"m\", \"km\", "
 "\"mi\" or without unit.\n"
 "Alternatively, the format FEET'' INCHES\" can be used."
 msgstr ""
+"Độ dài phải được đưa ra là các số dương thập phân với đơn vị \" m \", \" km "
+"\",\" Mi \"hoặc không có đơn vị. \n"
+"Ngoài ra, inch định dạng FEET '' \" có thể được sử dụng."
 
 msgid ""
 "Speeds should be given as numbers without unit or as numbers followed by "
 "\"mph\"."
 msgstr ""
+"Tốc độ nên được đưa ra như là con số không có đơn hoặc như là các số tiếp "
+"theo\" Mph \"."
 
 msgid ""
 "Inclines must be given as positive decimal numbers with followed by \"%\"."
 msgstr ""
+"Nghiêng phải được đưa ra như là số thập phân dương với theo sau \"% \"."
 
 msgid "Tracktype grades must be given as integers between 0 and 5."
-msgstr ""
+msgstr "Tracktype lớp phải được đưa ra là các số nguyên giữa 0 và 5."
 
 msgid ""
 "Surface values must not contain any of the following characters: '','', '' "
 "'{' '',  '' '}' '', ''='', ''|''"
 msgstr ""
+"Giá trị bề mặt không được chứa bất kỳ các ký tự sau: '', '', '''{' '', '' "
+"'}' '', '' = '', '' | ''"
 
 msgid "Imagery XML Files"
-msgstr ""
+msgstr "Hình tượng XML Files"
 
 msgid "Save Imagery XML file"
-msgstr ""
+msgstr "Lưu Hình ảnh XML file"
 
 msgid "XML Imagery Bounds"
-msgstr ""
+msgstr "XML Hình ảnh Bounds"
 
 msgid "Generate Imagery XML bounds for the selection"
-msgstr ""
+msgstr "Tạo Hình ảnh giới hạn XML cho việc lựa chọn"
 
 msgid "edit bounds for selected defaults"
-msgstr ""
+msgstr "chỉnh sửa giới hạn cho giá trị mặc định được chọn"
 
 msgid "Download imagery XML bounds"
-msgstr ""
+msgstr "Tải hình ảnh giới hạn XML"
 
 msgid ""
 "Validating error in file {0}:\n"
 "{1}\n"
 "Do you want to continue without validating the file ?"
 msgstr ""
+"Validating lỗi trong tập {0}: \n"
+"{1} \n"
+"Bạn có muốn tiếp tục mà không xác nhận các tập tin?"
 
 msgid "Open Imagery XML file"
-msgstr ""
+msgstr "XML mở tập tin Hình ảnh"
 
 msgid "Calibration Layer"
-msgstr ""
+msgstr "Hiệu chỉnh Layer"
 
 msgid "A deprecated calibration geometry of {0} nodes by {1}"
-msgstr ""
+msgstr "Một hình học chuẩn bị phản đối của {0} nút bởi {1}"
 
 msgid "A calibration geometry of {0} nodes by {1}"
-msgstr ""
+msgstr "Một hình học hiệu chuẩn của {0} nút bởi {1}"
 
 msgid "Change Color"
-msgstr ""
+msgstr "Change Color"
 
 msgid "Deprecate Offset"
-msgstr ""
+msgstr "Phản đối offset"
 
 msgid "Are you sure this imagery offset is wrong?"
-msgstr ""
+msgstr "Bạn có chắc chắn hình ảnh này bù đắp là sai?"
 
 msgid "Are you sure this calibration geometry is aligned badly?"
-msgstr ""
+msgstr "Bạn có chắc chắn hình học chuẩn này được canh sao?"
 
 msgid "Warning: deprecation is basically irreversible!"
-msgstr ""
+msgstr "Cảnh báo: về cơ bản là không thể đảo ngược deprecation!"
 
 msgid "To store imagery offsets you must be a registered OSM user."
-msgstr ""
+msgstr "Để lưu offsets hình ảnh bạn phải là một người sử dụng OSM đăng ký."
 
 msgid ""
 "Please enter the reason why you mark this imagery offset as deprecated"
 msgstr ""
+"Xin vui lòng nhập lý do tại sao bạn đánh dấu hình ảnh này bù đắp như bị phản "
+"đối"
 
 msgid ""
 "Please enter the reason why you mark this calibration geometry as deprecated"
 msgstr ""
+"Xin vui lòng nhập lý do tại sao bạn đánh dấu hình học chuẩn này là phản đối"
 
 msgid "Notifying the server of the deprecation..."
-msgstr ""
+msgstr "Thông báo cho các máy chủ của deprecation ..."
 
 msgid "Get Imagery Offset..."
-msgstr ""
+msgstr "Nhận Hình ảnh offset ..."
 
 msgid "Download offsets for current imagery from a server"
-msgstr ""
+msgstr "Tải offsets cho hình ảnh hiện tại từ một máy chủ"
 
 msgid ""
 "No data for this region. Please adjust imagery layer and upload an offset."
 msgstr ""
+"Không có dữ liệu cho vùng này. Vui lòng điều chỉnh layer hình ảnh và tải lên "
+"một bù đắp."
 
 msgid "Loading imagery offsets..."
-msgstr ""
+msgstr "offsets tải hình ảnh ..."
 
 msgid "Error processing XML response: {0}"
-msgstr ""
+msgstr "phản ứng xử lý lỗi XML: {0}"
 
 msgid "Offset"
-msgstr ""
+msgstr "Offset"
 
 msgid "Imagery Offset Database"
-msgstr ""
+msgstr "Hình tượng offset Cơ sở dữ liệu"
 
 msgid "mm"
-msgstr ""
+msgstr "mm"
 
 msgid "cm"
-msgstr ""
+msgstr "cm"
 
 msgid "m"
-msgstr ""
+msgstr "m"
 
 msgid "km"
-msgstr ""
+msgstr "km"
 
 msgid "Calibration geometries"
-msgstr ""
+msgstr "Hiệu chỉnh hình học"
 
 msgid "Deprecated offsets"
-msgstr ""
+msgstr "offsets được tán"
 
 msgid ""
 "The topmost imagery layer has been shifted to presumably match\n"
 "OSM data in the area. Please check that the offset is still valid\n"
 "by downloading GPS tracks and comparing them and OSM data to the imagery."
 msgstr ""
+"Tầng trên cùng hình ảnh đã được chuyển đến có lẽ phù hợp \n"
+"Dữ liệu OSM trong khu vực. Vui lòng kiểm tra bù đắp vẫn là \n"
+" hợp lệBằng cách tải về các bản nhạc GPS và so sánh chúng và dữ liệu OSM vào "
+"hình ảnh."
 
 msgid ""
 "A layer has been added with a calibration geometry. Hide data layers,\n"
 "find the corresponding feature on the imagery layer and move it accordingly."
 msgstr ""
+"Một lớp đã được thêm vào với một hình học hiệu chuẩn. Giấu các lớp dữ liệu, "
+"\n"
+"Tìm tính năng tương ứng trên layer hình ảnh và di chuyển nó cho phù hợp."
 
 msgid "Deprecated by {0} on {1}"
-msgstr ""
+msgstr "được tán thành bởi {0} vào {1}"
 
 msgid "Created by {0} on {1}"
-msgstr ""
+msgstr "Tạo bởi {0} vào {1}"
 
 msgid "Offset Information"
-msgstr ""
+msgstr "Offset Thông tin"
 
 msgid "Report this offset"
-msgstr ""
+msgstr "Báo cáo này bù đắp"
 
 msgid "You are to notify moderators of this offset. Why?"
-msgstr ""
+msgstr "Bạn đang thông báo cho người điều khiển nhóm này bù đắp. Tại sao?"
 
 msgid "Reporting the offset..."
-msgstr ""
+msgstr "Báo cáo việc bù đắp ..."
 
 msgid "An imagery offset of {0}"
-msgstr ""
+msgstr "Một hình ảnh bù đắp của {0}"
 
 msgid "Imagery ID"
-msgstr ""
+msgstr "Hình ảnh ID"
 
 msgid "A calibration geometry of {0} nodes"
-msgstr ""
+msgstr "Một hình học hiệu chuẩn của {0} nút"
 
 msgid "Determined right here"
-msgstr ""
+msgstr "Quyết tâm ngay tại đây"
 
 msgid "Determined {0} away"
-msgstr ""
+msgstr "Quyết tâm {0} đi"
 
 msgid "Reason"
-msgstr ""
+msgstr "Reason"
 
 msgid "This entry has been reported."
-msgstr ""
+msgstr "Mục nhập này đã được báo cáo."
 
 msgid "Server has rejected the request"
-msgstr ""
+msgstr "Server đã bác bỏ yêu cầu"
 
 msgid "Unable to connect to the server"
-msgstr ""
+msgstr "Không thể kết nối đến máy chủ"
 
 msgid "Store Imagery Offset..."
-msgstr ""
+msgstr "Store Hình ảnh offset ..."
 
 msgid ""
 "Upload an offset for current imagery (or calibration object geometry) to a "
 "server"
 msgstr ""
+"Tải một bù đắp cho hình ảnh hiện tại (hoặc hiệu chỉnh đối tượng hình học) "
+"đến mộtServer"
 
 msgid "Store calibration geometry"
-msgstr ""
+msgstr "Store hiệu chuẩn hình học"
 
 msgid "Store imagery offset"
-msgstr ""
+msgstr "Store hình ảnh bù đắp"
 
 msgid ""
 "The selected object can be used as a calibration geometry. What do you "
 "intend to do?"
 msgstr ""
+"Các đối tượng được chọn có thể được sử dụng như một hình học hiệu chuẩn. "
+"Điều gì làm bạnCó ý định làm gì?"
 
 msgid ""
 "The topmost imagery layer has no offset. Are you sure you want to upload "
 "this?"
 msgstr ""
+"Tầng trên cùng hình ảnh đã không bù đắp. Bạn có chắc chắn bạn muốn tải "
+"lênNày?"
 
 msgid ""
 "You are registering an imagery offset. Other users in this area will be able "
@@ -25151,6 +27190,10 @@ msgid ""
 "Please make sure it is as precise as possible, and describe a region this "
 "offset is applicable to."
 msgstr ""
+"Bạn đang đăng ký một hình ảnh bù đắp. Các thành viên khác trong lĩnh vực này "
+"sẽ có thểSử dụng nó để lập bản đồ. \n"
+"Hãy chắc chắn rằng nó là chính xác như có thể, và mô tả một khu vực nàyBù "
+"đắp được áp dụng cho."
 
 msgid ""
 "You are registering a calibration geometry. It should be the most precisely "
@@ -25158,116 +27201,122 @@ msgid ""
 "clearly visible boundaries on various satellite imagery. Please describe "
 "this object and its whereabouts."
 msgstr ""
+"Bạn đang đăng ký một hình học hiệu chuẩn. Nó phải là chính xác nhấtVị trí "
+"đối tượng, với \n"
+"Ranh giới rõ ràng trên hình ảnh vệ tinh khác nhau. Hãy mô tảĐối tượng này và "
+"nơi ở của mình."
 
 msgid "Uploading a new offset..."
-msgstr ""
+msgstr "Tải lên mới bù đắp ..."
 
 msgid "This string should be 3 to 200 letters long."
-msgstr ""
+msgstr "Chuỗi này nên 3-200 ký tự."
 
 msgid "Adjust imagery"
-msgstr ""
+msgstr "Điều chỉnh hình ảnh"
 
 msgid "Adjust the position of the selected imagery layer"
-msgstr ""
+msgstr "Điều chỉnh vị trí của lớp hình ảnh được lựa chọn"
 
 msgid "Please select the imagery layer to adjust."
-msgstr ""
+msgstr "Hãy chọn layer hình ảnh để điều chỉnh."
 
 msgid "Start adjusting"
-msgstr ""
+msgstr "Bắt đầu điều chỉnh"
 
 msgid "There are currently no imagery layer to adjust."
-msgstr ""
+msgstr "Hiện tại không có lớp hình ảnh để điều chỉnh."
 
 msgid "No layers to adjust"
-msgstr ""
+msgstr "Không có lớp để điều chỉnh"
 
 msgid "Normal"
-msgstr ""
+msgstr "Normal"
 
 msgid "Rotate 90"
-msgstr ""
+msgstr "Rotate 90"
 
 msgid "Rotate 180"
-msgstr ""
+msgstr "Rotate 180"
 
 msgid "Rotate 270"
-msgstr ""
+msgstr "Rotate 270"
 
 msgid "Previous image"
-msgstr ""
+msgstr "hình ảnh trước"
 
 msgid "Next image"
-msgstr ""
+msgstr "hình ảnh kế tiếp"
 
 msgid "Rotate left"
-msgstr ""
+msgstr "Xoay trái"
 
 msgid "Rotate image left"
-msgstr ""
+msgstr "hình ảnh Xoay trái"
 
 msgid "Rotate right"
-msgstr ""
+msgstr "Rotate right"
 
 msgid "Rotate image right"
-msgstr ""
+msgstr "Xoay hình ảnh bên phải"
 
 msgid "WayPoint Image"
-msgstr ""
+msgstr "waypoint Image"
 
 msgid "Display non-geotagged photos"
-msgstr ""
+msgstr "Hiển thị hình ảnh không gắn thẻ địa lý"
 
 msgid "Imported Images"
-msgstr ""
+msgstr "hình ảnh nhập khẩu"
 
 msgid "Image files (*.jpg, *.jpeg, *.png, *.gif)"
-msgstr ""
+msgstr "các tập tin hình ảnh (* .jpg, * .jpeg, * .png, * .gif)"
 
 msgid "Import vector graphics"
-msgstr ""
+msgstr "đồ họa vector nhập khẩu"
 
 msgid "Scale:"
-msgstr ""
+msgstr "Scale:"
 
 msgid "unit(s) = "
-msgstr ""
+msgstr "đơn vị (s) = "
 
 msgid "Importing..."
-msgstr ""
+msgstr "Nhập khẩu ..."
 
 msgid "SVG files [ImportVec plugin] (*.svg)"
-msgstr ""
+msgstr "các tập tin SVG [ImportVec Plugin] (* .svg)"
 
 msgid "Please open or create data layer before importing"
-msgstr ""
+msgstr "Hãy mở hoặc tạo lớp dữ liệu trước khi nhập khẩu"
 
 msgid "InfoMode"
-msgstr ""
+msgstr "InfoMode"
 
 msgid "GPX info mode"
-msgstr ""
+msgstr "GPX thông tin chế độ"
 
 msgid ""
 "Move the mouse to show trackpoint info for current layer. Hold shift to "
 "highlight tracks"
 msgstr ""
+"Di chuyển chuột để hiển thị thông tin trackpoint cho lớp hiện tại. Giữ "
+"chuyển sangBài hát nổi bật"
 
 msgid "Delete this"
-msgstr ""
+msgstr "Xóa này"
 
 msgid "Delete this&older"
-msgstr ""
+msgstr "Xóa này & cũ"
 
 msgid "km/h"
-msgstr ""
+msgstr "km / h"
 
 msgid "Track name: "
-msgstr ""
+msgstr "tên Track: "
 
 msgid "Update IRS adjustment layer"
-msgstr ""
+msgstr "Cập nhật IRS điều chỉnh layer"
 
 msgid ""
 "This option creates IRS adjustment layer and a little way inside it. You "
@@ -25275,780 +27324,1092 @@ msgid ""
 "Resulting layer is to be saved as .osm and sent to Komzpa (me at komzpa.net) "
 "with [irs rectify] in subject."
 msgstr ""
+"Tùy chọn này tạo layer điều chỉnh IRS và là một cách nhỏ bên trong nó "
+"Bạn.Cần phải điều chỉnh vị trí lớp WMS đầu tiên. \n"
+"Kết quả là lớp được lưu như .osm và gửi đến Komzpa (me at komzpa.net)Bằng [IRS "
+"chỉnh lưu] trong chủ đề."
 
 msgid "IRS Adjustment Layer"
-msgstr ""
+msgstr "IRS Adjustment Layer"
 
 msgid "Channel-Digraph created from the active OSM-Layer"
-msgstr ""
+msgstr "Channel-digraph tạo ra từ các hoạt động OSM-Layer"
 
 msgid "Create Channel Digraph"
-msgstr ""
+msgstr "Tạo Kênh digraph"
 
 msgid "this layer is no osm data layer"
-msgstr ""
+msgstr "layer này là không có lớp dữ liệu OSM"
 
 msgid "Converting OSM graph into Channel Digraph"
-msgstr ""
+msgstr "Chuyển đổi đồ OSM vào kênh digraph"
 
 msgid "filtering ways"
-msgstr ""
+msgstr "cách lọc"
 
 msgid "creating Channel-Digraph"
-msgstr ""
+msgstr "tạo Channel-digraph"
 
 msgid "sealing Digraph"
-msgstr ""
+msgstr "niêm phong digraph"
 
 msgid "calculating Strong Connectedness"
-msgstr ""
+msgstr "tính toán sự liên kết mạnh mẽ"
 
 msgid "creating DigraphLayer"
-msgstr ""
+msgstr "tạo DigraphLayer"
 
 msgid "JunctionChecking"
-msgstr ""
+msgstr "JunctionChecking"
 
 msgid "Open the junctionchecking window."
-msgstr ""
+msgstr "Mở cửa sổ junctionchecking."
 
 msgid "junctions"
-msgstr ""
+msgstr "nút giao thông"
 
 msgid "Channel-Digraph creation"
-msgstr ""
+msgstr "Channel-digraph sáng tạo"
 
 msgid "seal Channel Digraph"
-msgstr ""
+msgstr "dấu Kênh digraph"
 
 msgid "calculate strong connected channels"
-msgstr ""
+msgstr "tính toán các kênh kết nối mạnh mẽ"
 
 msgid "Junctionchecking/junctions searching"
-msgstr ""
+msgstr "Junctionchecking / nút tìm kiếm"
 
 msgid "order of junction (n):"
-msgstr ""
+msgstr "trật tự của đường giao nhau (n):"
 
 msgid "produce OSM-Relations: junction"
-msgstr ""
+msgstr "sản xuất OSM-Relations: ngã ba"
 
 msgid ""
 "if enabled the plugin produces osm-relations from the junction subgraphs"
 msgstr ""
+"Nếu được kích hoạt các plugin tạo OSM quan hệ từ các đồ thị con đường giao "
+"nhau"
 
 msgid "create the channel digraph"
-msgstr ""
+msgstr "tạo digraph kênh"
 
 msgid "Check "
-msgstr ""
+msgstr "Kiểm tra "
 
 msgid "check the subust for junction properties"
-msgstr ""
+msgstr "kiểm tra subust cho tính ngã ba"
 
 msgid "Search "
-msgstr ""
+msgstr "Tìm kiếm "
 
 msgid "search for junctions in the channel subset"
-msgstr ""
+msgstr "tìm kiếm các mối nối trong tập hợp con kênh"
 
 msgid ""
 "The marked channels contains a junctioncandidate (white). To test this "
 "candidat mark these channel and press the \"Check\" button again."
 msgstr ""
+"Các kênh được đánh dấu có chứa một junctioncandidate (màu trắng). Để kiểm "
+"tra điều nàyCandidat dấu các kênh và nhấn \" Kiểm tra \"nút một lần nữa."
+
+msgid "The marked channels are a {0}-ways junction"
+msgstr "Các kênh được đánh dấu là một {0} -ways ngã ba"
+
+msgid "The marked channels are not a junction:"
+msgstr "Các kênh được đánh dấu là không phải là một giao lộ:"
+
+msgid "construct channel digraph and search for junctions"
+msgstr "xây dựng kênh digraph và tìm kiếm các mối nối"
+
+msgid "Number of {0}-ways junctions found: {1}"
+msgstr "Số {0} -ways nút tìm thấy: {1}"
+
+msgid "generate all combinations from entrie/exit candidates"
+msgstr "tạo ra tất cả các kết hợp từ các ứng cử viên entrie / exit"
+
+msgid "Direction index ''{0}'' not found"
+msgstr "Hướng index '' {0} '' không tìm thấy"
+
+msgid "The starting location was not within the bbox"
+msgstr "Các vị trí bắt đầu không thuộc bbox"
+
+msgid "Looking for shoreline..."
+msgstr "Nhìn cho bờ ..."
+
+msgid "{0} nodes so far..."
+msgstr "{0} các nút cho đến nay ..."
+
+msgid "Lake Walker."
+msgstr "Hồ Walker."
+
+msgid "Lake Walker"
+msgstr "Hồ Walker"
+
+msgid "Error creating cache directory: {0}"
+msgstr "Lỗi thư mục cache tạo: {0}"
+
+msgid "Tracing"
+msgstr "Truy tìm"
+
+msgid "checking cache..."
+msgstr "kiểm tra bộ nhớ cache ..."
+
+msgid "Running vertex reduction..."
+msgstr "Chạy giảm đỉnh ..."
+
+msgid "Running Douglas-Peucker approximation..."
+msgstr "Chạy Douglas-Peucker xấp xỉ ..."
+
+msgid "Removing duplicate nodes..."
+msgstr "Loại bỏ các nút trùng lặp ..."
+
+msgid "Lakewalker trace"
+msgstr "Lakewalker dấu vết"
+
+msgid "An unknown error has occurred"
+msgstr "Một lỗi không rõ đã xảy ra"
+
+msgid "east"
+msgstr "đông"
+
+msgid "northeast"
+msgstr "Đông Bắc"
+
+msgid "north"
+msgstr "bắc"
+
+msgid "northwest"
+msgstr "Tây Bắc"
+
+msgid "west"
+msgstr "tây"
+
+msgid "southwest"
+msgstr "Tây Nam"
+
+msgid "south"
+msgstr "nam"
+
+msgid "southeast"
+msgstr "Đông Nam"
+
+msgid "coastline"
+msgstr "bờ biển"
+
+msgid "land"
+msgstr "đất"
+
+msgid "Maximum number of segments per way"
+msgstr "Số lượng tối đa của phân đoạn mỗi cách"
+
+msgid "Maximum number of nodes in initial trace"
+msgstr "Số lượng tối đa các nút trong dấu vết ban đầu"
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr "giá trị màu xám tối đa để tính là nước (0-255)"
+
+msgid "Line simplification accuracy (degrees)"
+msgstr "Line đơn giản hóa chính xác (độ)"
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr "Nghị quyết của gạch Landsat (pixel cho mỗi độ)"
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr "Kích thước của Landsat gạch (pixels)"
+
+msgid "Shift all traces to east (degrees)"
+msgstr "Shift tất cả các dấu vết để đông (độ)"
+
+msgid "Shift all traces to north (degrees)"
+msgstr "Shift tất cả các dấu vết để bắc (độ)"
+
+msgid "Direction to search for land"
+msgstr "Direction để tìm kiếm đất"
+
+msgid "Tag ways as"
+msgstr "cách Tag as"
+
+msgid "WMS Layer"
+msgstr "WMS Layer"
+
+msgid "Maximum cache size (MB)"
+msgstr "kích thước bộ nhớ cache tối đa (MB)"
+
+msgid "Maximum cache age (days)"
+msgstr "tuổi nhớ cache tối đa (ngày)"
+
+msgid "Source text"
+msgstr "Nguồn văn bản"
+
+msgid "Lakewalker Plugin Preferences"
+msgstr "Preferences Lakewalker Plugin"
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr "Một plugin để theo dõi các cơ quan nước trên ảnh Landsat."
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr ""
+"Số lượng tối đa của phân đoạn cho phép trong mỗi cách tạo ra. Mặc định 250."
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr ""
+"Số lượng tối đa các nút để tạo ra trước khi tháo trên (trước khi đơn giản "
+"hóaDòng). Mặc định 50000."
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr ""
+"Giá trị màu xám tối đa chấp nhận như nước (dựa trên Landsat IR-1 dữ liệu). "
+"Có thể làTrong khoảng từ 0-255. Mặc định 90."
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+"Độ chính xác của Douglas-Peucker dòng đơn giản hóa, đo bằngĐộ. <br> Giá trị "
+"thấp hơn cho các nút và các đường chính xác hơn. Default0,0003."
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr "Nghị quyết của gạch Landsat, đo bằng pixel mỗi độ. Mặc định 4000."
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr "Kích thước của một gạch Landsat, đo bằng pixel. Mặc định năm 2000."
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr "Offset tất cả các điểm ở hướng Đông (độ). Mặc định 0."
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr "Offset tất cả các điểm ở Bắc hướng (độ). Mặc định 0."
+
+msgid "Direction to search for land. Default east."
+msgstr "Direction để tìm kiếm đất. Mặc định đông."
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr "cách Tag như nước, bờ biển, đất hoặc không có gì. Mặc định là nước."
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr "Những WMS lớp sử dụng để truy tìm đối. Mặc định là IR1."
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr ""
+"Kích thước tối đa của mỗi thư mục cache trong byte. Mặc định là 300MB"
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr "Tuổi tối đa của mỗi tập tin được lưu trữ trong ngày. Mặc định là 100"
+
+msgid "Data source text. Default is Landsat."
+msgstr "Nguồn số liệu văn bản. Mặc định là Landsat."
+
+msgid "Downloading image tile..."
+msgstr "Tải ngói hình ảnh ..."
+
+msgid "Could not acquire image"
+msgstr "Không thể có được hình ảnh"
+
+msgid "Connection Failed"
+msgstr "kết nối thất bại"
+
+msgid "Not connected"
+msgstr "Không kết nối"
+
+msgid "Connecting"
+msgstr "Kết nối"
+
+msgid "Connected"
+msgstr "Kết nối"
+
+msgid "no name"
+msgstr "không tên"
+
+msgid "Live GPS"
+msgstr "Live GPS"
+
+msgid "Show GPS data."
+msgstr "Show GPS dữ liệu."
+
+msgid "Status"
+msgstr "Status"
+
+msgid "Way Info"
+msgstr "Way Info"
+
+msgid "Speed"
+msgstr "Speed"
+
+msgid "Course"
+msgstr "Khóa học"
+
+msgid "LiveGPS layer"
+msgstr "LiveGPS lớp"
+
+msgid "Capture GPS Track"
+msgstr "Chụp GPS Track"
+
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgstr ""
+"Kết nối đến máy chủ gpsd và hiển thị vị trí hiện tại trong lớp LiveGPS."
+
+msgid "Center Once"
+msgstr "Một khi Trung tâm"
+
+msgid "Center the LiveGPS layer to current position."
+msgstr "Trung tâm LiveGPS lớp đến vị trí hiện tại."
+
+msgid "Auto-Center"
+msgstr "Auto-Center"
+
+msgid "Continuously center the LiveGPS layer to current position."
+msgstr "Tiếp tục tập trung các lớp LiveGPS đến vị trí hiện tại."
+
+msgid "Open MapDust"
+msgstr "Open MapDust"
+
+msgid "MapDust bug reports"
+msgstr "MapDust báo cáo lỗi"
+
+msgid "Activates the MapDust bug reporter plugin"
+msgstr "Kích hoạt MapDust phóng lỗi plugin"
+
+msgid "Missing input data"
+msgstr "Thiếu dữ liệu đầu vào"
+
+msgid "Mapillary Images"
+msgstr ""
+
+msgid "Mapillary layer"
+msgstr ""
+
+msgid "Total images:"
+msgstr ""
+
+msgid "images"
+msgstr ""
+
+msgid "Mapillary"
+msgstr "Mapillary"
+
+msgid "Create Mapillary layer"
+msgstr ""
+
+msgid "Start Mapillary layer"
+msgstr ""
+
+msgid "Download Mapillary images in current view"
+msgstr ""
+
+msgid "Export pictures"
+msgstr ""
+
+msgid "Export Mapillary pictures"
+msgstr ""
 
-msgid "The marked channels are a {0}-ways junction"
+msgid "Export images"
 msgstr ""
 
-msgid "The marked channels are not a junction:"
+msgid "Import pictures"
 msgstr ""
 
-msgid "construct channel digraph and search for junctions"
+msgid "Import local pictures"
 msgstr ""
 
-msgid "Number of {0}-ways junctions found: {1}"
+msgid "Import pictures into Mapillary layer"
 msgstr ""
 
-msgid "generate all combinations from entrie/exit candidates"
+msgid "Select pictures"
 msgstr ""
 
-msgid "Direction index ''{0}'' not found"
+msgid "Import pictures into sequence"
 msgstr ""
 
-msgid "The starting location was not within the bbox"
+msgid "Import pictures into Mapillary layer in a sequence"
 msgstr ""
 
-msgid "Looking for shoreline..."
+msgid "Join mode"
 msgstr ""
 
-msgid "{0} nodes so far..."
+msgid "Join/unjoin pictures"
 msgstr ""
 
-msgid "Lake Walker."
+msgid "Join Mapillary pictures"
 msgstr ""
 
-msgid "Lake Walker"
+msgid "Upload pictures"
 msgstr ""
 
-msgid "Error creating cache directory: {0}"
+msgid "Upload Mapillary pictures"
 msgstr ""
 
-msgid "Tracing"
+msgid "Upload pictures."
 msgstr ""
 
-msgid "checking cache..."
+msgid "Walk mode"
 msgstr ""
 
-msgid "Running vertex reduction..."
+msgid "Start walk mode"
 msgstr ""
 
-msgid "Running Douglas-Peucker approximation..."
+msgid "Zoom to selected image"
 msgstr ""
 
-msgid "Removing duplicate nodes..."
+msgid "Zoom to the currently selected Mapillary image"
 msgstr ""
 
-msgid "Lakewalker trace"
+msgid "Uploaded {0} images"
 msgstr ""
 
-msgid "An unknown error has occurred"
+msgid "Approve upload on the website"
 msgstr ""
 
-msgid "east"
+msgid "View in website"
 msgstr ""
 
-msgid "northeast"
+msgid "Copy key"
 msgstr ""
 
-msgid "north"
+msgid "Copy key tag"
 msgstr ""
 
-msgid "northwest"
+msgid "Edit on website"
 msgstr ""
 
-msgid "west"
+msgid "Export all images"
 msgstr ""
 
-msgid "southwest"
+msgid "Export selected sequence"
 msgstr ""
 
-msgid "south"
+msgid "Export selected images"
 msgstr ""
 
-msgid "southeast"
+msgid "Rewrite imported images"
 msgstr ""
 
-msgid "coastline"
+msgid "Select a folder"
 msgstr ""
 
-msgid "land"
+msgid "Explore"
 msgstr ""
 
-msgid "Maximum number of segments per way"
+msgid "Select a directory"
 msgstr ""
 
-msgid "Maximum number of nodes in initial trace"
+msgid "Speed limit"
 msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
+msgid "Give way"
 msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
+msgid "No entry"
 msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
+msgid "Intersection danger"
 msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
+msgid "Mandatory direction (any)"
 msgstr ""
 
-msgid "Shift all traces to east (degrees)"
+msgid "No turn"
 msgstr ""
 
-msgid "Shift all traces to north (degrees)"
+msgid "Uneven road"
 msgstr ""
 
-msgid "Direction to search for land"
+msgid "No parking"
 msgstr ""
 
-msgid "Tag ways as"
+msgid "No overtaking"
 msgstr ""
 
-msgid "WMS Layer"
+msgid "Pedestrian crossing"
 msgstr ""
 
-msgid "Maximum cache size (MB)"
+msgid "Years"
 msgstr ""
 
-msgid "Maximum cache age (days)"
+msgid "Months"
 msgstr ""
 
-msgid "Source text"
+msgid "Days"
 msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
+msgid "Mapillary filter"
 msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
+msgid "Open Mapillary filter dialog"
 msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
+msgid "Downloaded images"
 msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
+msgid "Only images with signs"
 msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
+msgid "Choose signs"
 msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Mapillary history"
 msgstr ""
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgid "Open Mapillary history dialog"
 msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgid "Open Mapillary window"
 msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
+msgid "Mapillary dialog"
 msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
+msgid "Open Mapillary main dialog"
 msgstr ""
 
-msgid "Direction to search for land. Default east."
+msgid "Next picture"
 msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgid "Shows the next picture in the sequence"
 msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgid "Previous picture"
 msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgid "Shows the previous picture in the sequence"
 msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
+msgid "Jump to red"
 msgstr ""
 
-msgid "Data source text. Default is Landsat."
+msgid "Jumps to the picture at the other side of the red line"
 msgstr ""
 
-msgid "Downloading image tile..."
+msgid "Jump to blue"
 msgstr ""
 
-msgid "Could not acquire image"
+msgid "Jumps to the picture at the other side of the blue line"
 msgstr ""
 
-msgid "Connection Failed"
+msgid "Stops the walk."
 msgstr ""
 
-msgid "Not connected"
+msgid "Play"
 msgstr ""
 
-msgid "Connecting"
+msgid "Continues with the paused walk."
 msgstr ""
 
-msgid "Connected"
+msgid "Pause"
 msgstr ""
 
-msgid "no name"
+msgid "Pauses the walk."
 msgstr ""
 
-msgid "Live GPS"
+msgid "Reverse buttons position when displaying images."
 msgstr ""
 
-msgid "Show GPS data."
+msgid "Display hour when the picture was taken"
 msgstr ""
 
-msgid "Status"
+msgid "Use 24 hour format"
 msgstr ""
 
-msgid "Way Info"
+msgid "Move to picture''s location with next/previous buttons"
 msgstr ""
 
-msgid "Speed"
+msgid "Download mode: "
 msgstr ""
 
-msgid "Course"
+msgid "Upload selected sequence"
 msgstr ""
 
-msgid "LiveGPS layer"
+msgid "Delete after upload"
 msgstr ""
 
-msgid "Capture GPS Track"
+msgid "Wait for full quality pictures"
 msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgid "Follow selected image"
 msgstr ""
 
-msgid "Center Once"
+msgid "Go forward"
 msgstr ""
 
-msgid "Center the LiveGPS layer to current position."
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images joined"
 msgstr ""
 
-msgid "Auto-Center"
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "2 images unjoined"
 msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
 msgstr ""
 
-msgid "Open MapDust"
+msgid "Downloading"
 msgstr ""
 
-msgid "MapDust bug reports"
+msgid "Select mode"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Missing input data"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Mapillary"
+msgid "Total Mapillary images: {0}"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "No images found"
 msgstr ""
 
-msgid "Export"
+msgid "Finished upload"
 msgstr ""
 
-msgid "Measured values"
+msgid "Uploading: {0}"
 msgstr ""
 
+msgid "Measured values"
+msgstr "đo giá trị"
+
 msgid "Open the measurement window."
-msgstr ""
+msgstr "Mở cửa sổ đo."
 
 msgid "Reset current measurement results and delete measurement path."
-msgstr ""
+msgstr "Thiết lập lại kết quả đo hiện tại và xóa path đo."
 
 msgid "Path Length"
-msgstr ""
+msgstr "Độ dài đường dẫn"
 
 msgid "Selection Length"
-msgstr ""
+msgstr "Lựa chọn Length"
 
 msgid "Selection Area"
+msgstr "Lựa chọn Area"
+
+msgid "Selection Radius"
 msgstr ""
 
 msgid "Angle"
-msgstr ""
+msgstr "góc"
 
 msgid "Angle between two selected Nodes"
-msgstr ""
+msgstr "Góc giữa hai nút chọn"
 
 msgid "Layer to make measurements"
-msgstr ""
+msgstr "Layer để thực hiện đo đạc"
 
 msgid "measurement mode"
-msgstr ""
+msgstr "chế độ đo lường"
 
 msgid "Measurements"
-msgstr ""
+msgstr "đo"
 
 msgid "Merge overlap"
-msgstr ""
+msgstr "Merge chồng chéo"
 
 msgid "Merge overlap of ways."
-msgstr ""
+msgstr "Merge chồng chéo cách."
 
 msgid "Merge Overlap (combine)"
-msgstr ""
+msgstr "Merge Overlap (kết hợp)"
 
 msgid ""
 "<html>A role based relation membership was copied to all new ways.<br>You "
 "should verify this and correct it when necessary.</html>"
 msgstr ""
+"<Html> A dựa trên vai trò quan thành viên đã được sao chép vào tất cả những "
+"cách thức mới. <br> YouNên xác minh này và sửa nó khi cần thiết. </ Html>"
 
 msgid ""
 "<html>A relation membership was copied to all new ways.<br>You should verify "
 "this and correct it when necessary.</html>"
 msgstr ""
+"<Html> Một thành viên liên quan đã được sao chép vào tất cả những cách thức "
+"mới. <br> Bạn nên xác minhNày và sửa nó khi cần thiết. </ Html>"
 
 msgid "Split way"
-msgstr ""
+msgstr "Split cách"
 
 msgid "Michigan Left"
-msgstr ""
+msgstr "Michigan Left"
 
 msgid "Adds no left turn for sets of 4 or 5 ways."
-msgstr ""
+msgstr "thêm không rẽ trái cho bộ 4 hoặc 5 cách."
 
 msgid "Please select 4 or 5 ways to assign no left turns."
-msgstr ""
+msgstr "Hãy chọn 4 hoặc 5 cách để gán không rẽ trái."
 
 msgid "Please select 4 ways that form a closed relation."
-msgstr ""
+msgstr "Hãy chọn 4 cách hình thành một mối quan hệ khép kín."
 
 msgid "Unable to order the ways. Please verify their directions"
-msgstr ""
+msgstr "Không thể đặt hàng các cách khác nhau. Hãy kiểm tra hướng dẫn của họ"
 
 msgid "Create Michigan left turn restriction"
-msgstr ""
+msgstr "Tạo Michigan hạn chế rẽ trái"
 
 msgid "Unable to find via nodes. Please check your selection"
-msgstr ""
-
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
+msgstr "Không thể tìm thấy thông qua các nút. Hãy kiểm tra lựa chọn của bạn"
 
 msgid "About Plugin"
-msgstr ""
+msgstr "Về Plugin"
 
 msgid "Native password manager plugin"
-msgstr ""
+msgstr "password Native quản lý plugin"
 
 msgid "No native password manager could be found!"
-msgstr ""
+msgstr "Không quản lý mật khẩu có nguồn gốc có thể được tìm thấy!"
 
 msgid ""
 "Depending on your Operating System / Distribution, you may have to create a "
 "default keyring / wallet first."
 msgstr ""
+"Tùy thuộc vào hệ điều hành của bạn / Distribution, bạn có thể phải tạo "
+"mộtMặc định keyring / ví đầu tiên."
 
 msgid "No thanks, use JOSM''s plain text preferences storage"
-msgstr ""
+msgstr "No thanks, use JOSM''s plain text preferences storage"
 
 msgid ""
 "Found sensitive data that is still saved in JOSM''s preference file (plain "
 "text)."
 msgstr ""
+"Found sensitive data that is still saved in JOSM''s preference file (plain "
+"text)."
 
 msgid "Transfer to password manager and remove from preference file"
-msgstr ""
+msgstr "Transfer để quản lý mật khẩu và loại bỏ từ tập tin ưu đãi"
 
 msgid "No, just keep it"
-msgstr ""
+msgstr "Không, chỉ cần giữ cho nó"
 
 msgid "Close the dialog and discard all changes"
-msgstr ""
+msgstr "Đóng hộp thoại và loại bỏ tất cả những thay đổi"
 
 msgid "Proceed and go to the next page"
-msgstr ""
+msgstr "Tiến hành và đi đến trang tiếp theo"
 
 msgid "Finish"
-msgstr ""
+msgstr "Finish"
 
 msgid "Confirm the setup and close this dialog"
-msgstr ""
+msgstr "Xác nhận các thiết lập và đóng hộp thoại này"
 
 msgid "JOSM/OSM API/Username"
-msgstr ""
+msgstr "JOSM / OSM API / Tên đăng nhập"
 
 msgid "JOSM/OSM API/Password"
-msgstr ""
+msgstr "JOSM / OSM API / Password"
 
 msgid "{0}/Username"
-msgstr ""
+msgstr "{0} / Tên đăng nhập"
 
 msgid "{0}/Password"
-msgstr ""
+msgstr "{0} / Password"
 
 msgid "JOSM/Proxy/Username"
-msgstr ""
+msgstr "JOSM / Proxy / Tên đăng nhập"
 
 msgid "JOSM/Proxy/Password"
-msgstr ""
+msgstr "JOSM / Proxy / Password"
 
 msgid "JOSM/OAuth/OSM API/Key"
-msgstr ""
+msgstr "JOSM / OAuth / OSM API / Key"
 
 msgid "JOSM/OAuth/OSM API/Secret"
-msgstr ""
+msgstr "JOSM / OAuth / OSM API / Secret"
 
 msgid "Native Password Manager Plugin"
-msgstr ""
+msgstr "Manager Plugin Native Password"
 
 msgid "The username and password is protected by {0}."
-msgstr ""
+msgstr "Tên người dùng và mật khẩu được bảo vệ bởi {0}."
 
 msgid "username"
-msgstr ""
+msgstr "tên người dùng"
 
 msgid "password"
-msgstr ""
+msgstr "mật khẩu"
 
 msgid "proxy username"
-msgstr ""
+msgstr "proxy username"
 
 msgid "proxy password"
-msgstr ""
+msgstr "password proxy"
 
 msgid "oauth key"
-msgstr ""
+msgstr "oauth key"
 
 msgid "oauth secret"
-msgstr ""
+msgstr "oauth bí mật"
 
 msgid ""
 "<br><strong>Warning:</strong> There may be sensitive data left in your "
 "preference file. ({0})"
 msgstr ""
+"<br> <Strong> Cảnh báo: </ strong> có thể là dữ liệu nhạy cảm còn lại trong "
+"bạnTập tin ưu đãi. ({0})"
 
 msgid "Save user and password ({0})"
-msgstr ""
+msgstr "Lưu người dùng và mật khẩu ({0})"
 
 msgid "Plain text, JOSM default"
-msgstr ""
+msgstr "văn bản đồng bằng, JOSM mặc định"
 
 msgid "Use {0}"
-msgstr ""
+msgstr "Sử dụng {0}"
 
 msgid "Encrypt data with Windows logon credentials"
-msgstr ""
+msgstr "Mã hóa dữ liệu với các thông tin đăng nhập Windows"
 
 msgid "The native password manager plugin detected {0} on your system."
 msgstr ""
+"Việc quản lý mật khẩu có nguồn gốc trình cắm {0} phát hiện trên hệ thống của "
+"bạn."
 
 msgid "Days without mapping: {0}."
-msgstr ""
+msgstr "Days mà không có bản đồ:. {0}"
 
 msgid ""
 "(To miserably continue mapping, edit out no_more_mapping\n"
 "from {0})"
 msgstr ""
+"(Để thảm hại tiếp tục lập bản đồ, chỉnh sửa ra no_more_mapping \n"
+"{0})"
 
 msgid "Split by municipality"
-msgstr ""
+msgstr "Chia theo đô thị"
 
 msgid "Split this data by municipality (admin_level=8)."
-msgstr ""
+msgstr "Tách dữ liệu này bằng cách đô thị (admin_level = 8)."
 
 msgid "Split by sector"
-msgstr ""
+msgstr "Chia theo ngành"
 
 msgid "Split this data by sector (admin_level=10)."
-msgstr ""
+msgstr "Tách dữ liệu này theo ngành (admin_level = 10)."
 
 msgid "Split by neighbourhood"
-msgstr ""
+msgstr "Chia theo khu phố"
 
 msgid "Split this data by neighbourhood (admin_level=11)."
-msgstr ""
+msgstr "Tách dữ liệu này của khu phố (admin_level = 11)."
 
 msgid "Download open data"
-msgstr ""
+msgstr "Tải dữ liệu mở"
 
 msgid "License URL not available: {0}"
-msgstr ""
+msgstr "Giấy phép URL không có sẵn: {0}"
 
 msgid "OpenData preferences"
-msgstr ""
+msgstr "sở thích OpenData"
 
 msgid "License Agreement"
-msgstr ""
+msgstr "License Agreement"
 
 msgid "Accept"
-msgstr ""
+msgstr "Chấp nhận"
 
 msgid "Refuse"
-msgstr ""
+msgstr "Từ chối"
 
 msgid "I understand and accept these terms and conditions"
-msgstr ""
+msgstr "Tôi hiểu và chấp nhận các điều khoản và điều kiện"
 
 msgid "View the full text of this license"
-msgstr ""
+msgstr "Xem đầy đủ nội dung của giấy phép này"
 
 msgid "I refuse these terms and conditions. Cancel download."
-msgstr ""
+msgstr "Tôi từ chối các điều khoản và điều kiện. Hủy việc tải về."
 
 msgid "Module bundled with opendata plugin"
-msgstr ""
+msgstr "Module kèm với plugin opendata"
 
 msgid ""
 "Please click on <strong>Download list</strong> to download and display a "
 "list of available modules."
 msgstr ""
+"Vui lòng click vào <strong> Tải về danh sách </ strong> để tải về và hiển "
+"thị mộtDanh sách các module có sẵn."
 
 msgid ""
 "The following module has been downloaded <strong>successfully</strong>:"
 msgid_plural ""
 "The following {0} modules have been downloaded <strong>successfully</strong>:"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Các module sau đây đã được tải về <strong> thành công </ strong>:"
 
 msgid "Downloading the following module has <strong>failed</strong>:"
 msgid_plural ""
 "Downloading the following {0} modules has <strong>failed</strong>:"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Tải các module sau đây đã <strong> không </ strong>:"
 
 msgid "Modules"
-msgstr ""
+msgstr "Modules"
 
 msgid "Accept the new module sites and close the dialog"
-msgstr ""
+msgstr "Chấp nhận các trang web module mới và đóng hộp thoại"
 
 msgid "Configure Module Sites"
-msgstr ""
+msgstr "Cấu hình module Sites"
 
 msgid "Download the list of available modules"
-msgstr ""
+msgstr "Tải danh sách các mô-đun có sẵn"
 
 msgid "Update modules"
-msgstr ""
+msgstr "Cập nhật mô-đun"
 
 msgid "Update the selected modules"
-msgstr ""
+msgstr "Cập nhật các module được chọn"
 
 msgid "Please restart JOSM to activate the downloaded modules."
-msgstr ""
+msgstr "Hãy khởi động lại JOSM để kích hoạt các module tải về."
 
 msgid ""
 "All installed modules are up to date. JOSM does not have to download newer "
 "versions."
 msgstr ""
+"Tất cả các module được cài đặt cập nhật. JOSM không phải tải về phiên bản "
+"mới hơnPhiên bản"
 
 msgid "Modules up to date"
-msgstr ""
+msgstr "Modules đến ngày"
 
 msgid "Configure the list of sites where modules are downloaded from"
-msgstr ""
+msgstr "Cấu hình danh sách các trang web mà các mô-đun được tải về từ"
 
 msgid "Add Open Data Module description URL."
-msgstr ""
+msgstr "Thêm mô tả URL Open Data Module."
 
 msgid "Edit Open Data Module description URL."
-msgstr ""
+msgstr "Mô tả URL Sửa Open Data Module."
 
 msgid "Open Data Module description URL"
-msgstr ""
+msgstr "Mô tả URL Open Data Module"
 
 msgid "Download OSM data corresponding to the current data set."
-msgstr ""
+msgstr "Tải dữ liệu OSM tương ứng với các bộ dữ liệu hiện tại."
 
 msgid "Diff"
-msgstr ""
+msgstr "Diff"
 
 msgid "Perform diff between current data set and existing OSM data."
-msgstr ""
+msgstr "Thực hiện diff giữa bộ dữ liệu hiện tại và dữ liệu OSM hiện có."
+
+msgid "Tools"
+msgstr "Công cụ"
 
 msgid "Open tools menu for this data."
-msgstr ""
+msgstr "menu mở công cụ cho dữ liệu này."
 
 msgid "Open the OpenData window."
-msgstr ""
+msgstr "Mở cửa sổ OpenData."
 
 msgid "Raw data"
-msgstr ""
+msgstr "Nguyên liệu"
 
 msgid "OpenData Preferences"
-msgstr ""
+msgstr "Preferences OpenData"
 
 msgid ""
 "A special handler for various Open Data portals<br/><br/>Please read the "
 "Terms and Conditions of Use of each portal<br/>before any upload of data "
 "loaded by this plugin."
 msgstr ""
+"A xử lý đặc biệt cho các cổng dữ liệu mở khác nhau <br/> <br/> hãy đọcĐiều "
+"khoản và Điều kiện sử dụng của mỗi <br/> cổng trước khi bất cứ upload dữ "
+"liệuNạp bằng plugin này."
 
 msgid "General settings"
-msgstr ""
+msgstr "Cài đặt chung"
 
 msgid ""
 "Import only raw data (i.e. do not add/delete tags or replace them by "
 "standard OSM tags)"
 msgstr ""
+"Chỉ nhập dữ liệu thô (tức là không thêm / xóa thẻ hoặc thay thế chúng bằng "
+"cáchThẻ OSM standard)"
 
 msgid "Overpass API server:"
-msgstr ""
+msgstr "server API Cầu vượt:"
 
 msgid "Overpass API server used to download OSM data"
-msgstr ""
+msgstr "server API Cầu vượt được sử dụng để tải về dữ liệu OSM"
 
 msgid "XAPI server:"
-msgstr ""
+msgstr "xapi server:"
 
 msgid ""
 "XAPI server used to download OSM data when Overpass API is not available"
 msgstr ""
+"Server xapi sử dụng để tải về dữ liệu OSM khi Cầu vượt API không có sẵn"
 
 msgid "Download modules"
-msgstr ""
+msgstr "Tải mô-đun"
 
 msgid "View summary"
-msgstr ""
+msgstr "Xem tóm tắt"
 
 msgid "View full text"
-msgstr ""
+msgstr "Xem toàn văn"
 
 msgid ""
 "''Lambert CC 9 zones'' coordinates found with different zone codes for X and "
 "Y: "
 msgstr ""
+"Tọa độ '' Lambert CC 9 khu vực '' được tìm thấy với mã vùng khác nhau cho X "
+"vàY: "
 
 msgid "Downloading data..."
-msgstr ""
+msgstr "Tải dữ liệu ..."
 
 msgid "OpenData XML files"
-msgstr ""
+msgstr "OpenData file XML"
 
 msgid "File to load"
-msgstr ""
+msgstr "File để tải"
 
 msgid "7Zip Files"
-msgstr ""
+msgstr "7zip Files"
 
 msgid "Reading 7Zip file..."
-msgstr ""
+msgstr "Đọc tập tin 7zip ..."
 
 msgid "Zip Files"
-msgstr ""
+msgstr "Zip Files"
 
 msgid "Reading Zip file..."
-msgstr ""
+msgstr "Đọc tập tin Zip ..."
 
 msgid "Cannot transform to WGS84"
-msgstr ""
+msgstr "không thể chuyển đổi để WGS84"
 
 msgid ""
 "JOSM was unable to find a strict mathematical transformation between ''{0}'' "
@@ -26056,1638 +28417,1736 @@ msgid ""
 "perform a non-precise transformation (<b>with location errors up to 1 "
 "km</b>) ?<br/><br/>If so, <b>do NOT upload</b> such data to OSM !"
 msgstr ""
+"JOSM đã không thể tìm thấy một sự biến đổi toán học chặt chẽ giữa '' {0} "
+"''Và WGS84. <br /> <br /> Bạn có muốn thử một <i> hậu </ i> phương pháp, mà "
+"sẽThực hiện một chuyển đổi không chính xác (<b> với các lỗi vị trí lên đến "
+"1Km </ b>)? <br/> <br/> Nếu vậy, <b> KHÔNG tải lên </ b> dữ liệu đó cho OSM!"
 
 msgid "Try lenient method"
-msgstr ""
+msgstr "Hãy thử phương pháp khoan dung"
 
 msgid "GML files"
-msgstr ""
+msgstr "GML tập tin"
 
 msgid "KML/KMZ files"
-msgstr ""
+msgstr "KML / KMZ file"
 
 msgid "MapInfo files"
-msgstr ""
+msgstr "MapInfo tập tin"
 
 msgid "Shapefiles"
-msgstr ""
+msgstr "tập tin hình dạng"
 
 msgid ""
 "Unable to detect Coordinate Reference System.\n"
 "Would you like to fallback to ESPG:4326 (WGS 84) ?"
 msgstr ""
+"Không thể để phát hiện Hệ tọa độ tham chiếu. \n"
+"Bạn có muốn dự phòng để ESPG: 4326 (WGS 84)?"
 
 msgid "Warning: CRS not found"
-msgstr ""
+msgstr "Cảnh báo: CRS không tìm thấy"
 
 msgid "Unable to detect CRS !"
-msgstr ""
+msgstr "Không thể phát hiện CRS!"
 
 msgid "Unable to find a data store for file {0}"
-msgstr ""
+msgstr "Không tìm thấy một kho dữ liệu cho tập {0}"
 
 msgid "Loading shapefile ({0} features)"
-msgstr ""
+msgstr "Loading shapefile ({0} có)"
 
 msgid "CSV files"
-msgstr ""
+msgstr "các tập tin CSV"
 
 msgid "ODS files"
-msgstr ""
+msgstr "các tập tin ODS"
 
 msgid "No valid coordinates have been found."
-msgstr ""
+msgstr "Không có tọa độ hợp lệ đã được tìm thấy."
 
 msgid "Invalid file. Bad length on line {0}. Expected {1} columns, got {2}."
 msgstr ""
+"tập tin không hợp lệ. Bad chiều dài trên dòng {0}. Dự kiến ​​{1} cột, có {2}."
 
 msgid "XLS files"
-msgstr ""
+msgstr "các tập tin XLS"
 
 msgid "View OSM Wiki page"
-msgstr ""
+msgstr "Xem OSM Wiki trang"
 
 msgid "Launch browser to the OSM Wiki page of the selected data set"
-msgstr ""
+msgstr "Launch trình duyệt đến trang OSM Wiki của tập dữ liệu đã chọn"
 
 msgid "View Local Portal page"
-msgstr ""
+msgstr "Xem Local Portal trang"
 
 msgid "Launch browser to the local portal page of the selected data set"
 msgstr ""
+"Launch trình duyệt để các trang cổng thông tin địa phương của bộ dữ liệu "
+"được lựa chọn"
 
 msgid "View National Portal page"
-msgstr ""
+msgstr "View Quốc Portal trang"
 
 msgid "Launch browser to the national portal page of the selected data set"
 msgstr ""
+"Launch trình duyệt để các trang cổng thông tin quốc gia của tập dữ liệu đã "
+"chọn"
 
 msgid "View License"
-msgstr ""
+msgstr "Xem License"
 
 msgid "Launch browser to the license page of the selected data set"
-msgstr ""
+msgstr "Launch trình duyệt để trang giấy phép của bộ dữ liệu được lựa chọn"
 
 msgid "View License (summary)"
-msgstr ""
+msgstr "Xem Giấy phép (tóm tắt)"
 
 msgid "Launch browser to the summary license page of the selected data set"
-msgstr ""
+msgstr "Launch trình duyệt để trang giấy tóm tắt của tập dữ liệu đã chọn"
 
 msgid "View the license of the selected data set"
-msgstr ""
+msgstr "Xem giấy phép của bộ dữ liệu được lựa chọn"
 
 msgid ""
 "Warning: Cannot download module ''{0}''. Its download link is not known. "
 "Skipping download."
 msgstr ""
+"Cảnh báo: Không thể tải mô-đun '' {0} '' liên kết tải về của nó không được "
+"biết đến..Bỏ qua tải."
 
 msgid ""
 "Warning: Cannot download module ''{0}''. Its download link ''{1}'' is not a "
 "valid URL. Skipping download."
 msgstr ""
+"Cảnh báo: Không thể tải mô-đun '' {0} '' liên kết tải về của nó '' {1} '' "
+"không phải là một.URL hợp lệ. Bỏ qua tải."
 
 msgid "Downloading Module {0}..."
-msgstr ""
+msgstr "Tải đun {0} ..."
 
 msgid "An error occurred in module {0}"
-msgstr ""
+msgstr "Một lỗi đã xảy ra trong mô-đun {0}"
 
 msgid "Last module update more than {0} days ago."
-msgstr ""
+msgstr "Last update mô-đun lớn hơn {0} ngày trước."
 
 msgid "Click to update the activated modules"
-msgstr ""
+msgstr "Nhấn vào đây để cập nhật các module kích hoạt"
 
 msgid "Click to skip updating the activated modules"
-msgstr ""
+msgstr "Nhấn vào đây để skip cập nhật các module kích hoạt"
 
 msgid ""
 "Skipping module update after elapsed update interval. Automatic update at "
 "startup is disabled."
 msgstr ""
+"Bỏ qua cập nhật mô-đun sau khi cập nhật khoảng thời gian trôi qua. Tự động "
+"cập nhật tạiKhởi động là người tàn tật."
 
 msgid ""
 "Running module update after elapsed update interval. Automatic update at "
 "startup is disabled."
 msgstr ""
+"Chạy cập nhật mô-đun sau khi cập nhật khoảng thời gian trôi qua. Tự động cập "
+"nhật tạiKhởi động là người tàn tật."
 
 msgid "Could not load module {0}. Delete from preferences?"
-msgstr ""
+msgstr "Không thể tải mô-đun {0}. Xóa từ sở thích?"
 
 msgid "loading module ''{0}'' (version {1})"
-msgstr ""
+msgstr "module loading '' {0} '' (phiên bản {1})"
 
 msgid ""
 "<html>Could not load module {0} because the module<br>main class ''{1}'' was "
 "not found.<br>Delete from preferences?</html>"
 msgstr ""
+"<Html> Không thể tải mô-đun {0} bởi vì các mô-đun <br> lớp chính '' {1} '' "
+"đã đượcKhông tìm thấy. <br> Xóa từ sở thích? </ Html>"
 
 msgid "Loading modules ..."
-msgstr ""
+msgstr "Loading module ..."
 
 msgid "Checking module preconditions..."
-msgstr ""
+msgstr "Kiểm tra điều kiện tiên quyết mô-đun ..."
 
 msgid "Loading module ''{0}''..."
-msgstr ""
+msgstr "Loading module '' {0} '' ..."
 
 msgid "JOSM could not find information about the following module:"
 msgid_plural "JOSM could not find information about the following modules:"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "JOSM không thể tìm thấy thông tin về module sau đây:"
 
 msgid "The module is not going to be loaded."
 msgid_plural "The modules are not going to be loaded."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Các mô-đun sẽ không được nạp."
 
 msgid "Updating the following module has failed:"
 msgid_plural "Updating the following modules has failed:"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Đang cập nhật các module sau đây đã thất bại:"
 
 msgid "Module update failed"
-msgstr ""
+msgstr "update module thất bại"
 
 msgid "Warning: failed to download module information list"
-msgstr ""
+msgstr "Cảnh báo: không tải về danh sách thông tin module"
 
 msgid "Disable module"
-msgstr ""
+msgstr "Disable module"
 
 msgid "Click to delete the module ''{0}''"
-msgstr ""
+msgstr "Nhấn vào đây để xóa các module '' {0} ''"
 
 msgid "Keep module"
-msgstr ""
+msgstr "Giữ module"
 
 msgid "Click to keep the module ''{0}''"
-msgstr ""
+msgstr "Nhấn vào đây để giữ cho các mô-đun '' {0} ''"
 
 msgid "Warning: failed to delete outdated module ''{0}''."
-msgstr ""
+msgstr "Cảnh báo: không thể xóa mô-đun lỗi thời '' {0} ''."
 
 msgid ""
 "Warning: failed to install already downloaded module ''{0}''. Skipping "
 "installation. JOSM is still going to load the old module version."
 msgstr ""
+"Cảnh báo: không thể cài đặt mô-đun đã được tải về '' {0} '' Bỏ qua.Cài đặt "
+"JOSM. Vẫn còn đang để tải các phiên bản mô-đun cũ."
 
 msgid ""
 "Warning: failed to install module ''{0}'' from temporary download file "
 "''{1}''. Renaming failed."
 msgstr ""
+"Cảnh báo: không thể cài đặt module '' {0} '' từ tập tin tải về tạm thời'' "
+"{1} ''. Đổi tên thất bại."
 
 msgid ""
 "Do not ask again and remember my decision (go to Preferences->Modules to "
 "change it later)"
 msgstr ""
+"Đừng hỏi lại và ghi nhớ quyết định của tôi (vào Preferences-> Mô-đun đểThay "
+"đổi nó sau này)"
 
 msgid "The module file ''{0}'' does not include a Manifest."
-msgstr ""
+msgstr "Các tập tin module '' {0} '' không bao gồm một Manifest."
 
 msgid "Invalid URL ''{0}'' in module {1}"
-msgstr ""
+msgstr "URL không hợp lệ '' {0} '' trong module {1}"
 
 msgid "<b>Module provided by an external source:</b> {0}"
-msgstr ""
+msgstr "<b> Module cung cấp bởi một nguồn bên ngoài: </ b> {0}"
 
 msgid "Failed to create module information from manifest for module ''{0}''"
-msgstr ""
+msgstr "Không thể tạo thông tin module từ manifest cho module '' {0} ''"
 
 msgid "Illegal entry in module list."
-msgstr ""
+msgstr "nhập cảnh trái phép trong danh sách module."
 
 msgid "Reading local module information.."
-msgstr ""
+msgstr "Đọc thông tin module địa phương .."
 
 msgid "Processing module site cache files..."
-msgstr ""
+msgstr "các tập tin bộ nhớ cache Processing trang mô-đun ..."
 
 msgid ""
 "Warning: Failed to scan file ''{0}'' for module information. Skipping."
 msgstr ""
+"Cảnh báo: Không thể để quét file '' {0} '' cho mô-đun thông tin Bỏ qua.."
 
 msgid "Processing module site cache icon files..."
-msgstr ""
+msgstr "các tập tin biểu tượng mô-đun xử lý trang bộ nhớ cache ..."
 
 msgid "Processing module files..."
-msgstr ""
+msgstr "các tập tin mô-đun xử lý ..."
 
 msgid "Download module list..."
-msgstr ""
+msgstr "danh sách Tải mô-đun ..."
 
 msgid "Downloading module list from ''{0}''"
-msgstr ""
+msgstr "Tải danh sách module từ '' {0} ''"
 
 msgid ""
 "Warning: failed to create module directory ''{0}''. Cannot cache module list "
 "from module site ''{1}''."
 msgstr ""
+"Cảnh báo: không thể tạo thư mục module '' {0} '' không thể cache danh sách "
+"module.Từ trang web module '' {1} ''."
 
 msgid "Writing module list to local cache ''{0}''"
-msgstr ""
+msgstr "Viết danh sách module bộ nhớ cache của địa phương '' {0} ''"
 
 msgid "Parsing module list from site ''{0}''"
-msgstr ""
+msgstr "Phân tích danh sách module từ trang web '' {0} ''"
 
 msgid ""
 "Failed to parse module list document from site ''{0}''. Skipping site. "
 "Exception was: {1}"
 msgstr ""
+"Không phân tích danh sách module tài liệu từ trang web '' {0} ''. Bỏ qua "
+"trang web.Ngoại lệ là: {1}"
 
 msgid "Processing module list from site ''{0}''"
-msgstr ""
+msgstr "danh sách module chế biến từ trang web '' {0} ''"
 
 msgid "Open Visible..."
-msgstr ""
+msgstr "Mở Visible ..."
 
 msgid "Open only files that are visible in current view."
-msgstr ""
+msgstr "Mở tập tin chỉ có thể nhìn thấy trong quan điểm hiện tại."
 
 msgid "No view open - cannot determine boundaries!"
-msgstr ""
+msgstr "Không nhìn mở - không thể xác định ranh giới!"
 
 msgid "Unknown file extension: {0}"
-msgstr "Phần mở rộng tập tin không xác định:{0}"
+msgstr "Không rõ phần mở rộng tập: {0}"
 
 msgid "Parsing file \"{0}\" failed"
-msgstr ""
+msgstr "Phân tích cú pháp tập tin \" {0} \"thất bại"
 
 msgid "Osmarender"
-msgstr ""
+msgstr "Osmarender"
 
 msgid ""
 "Firefox not found. Please set firefox executable in the Map Settings page of "
 "the preferences."
 msgstr ""
+"Firefox không tìm thấy. Hãy đặt firefox thực thi trong trang đồ Settings "
+"củaSở thích."
 
 msgid "Firefox executable"
-msgstr ""
+msgstr "Firefox thực thi"
 
 msgid "OSM Server Files pbf compressed"
-msgstr ""
+msgstr "OSM máy chủ tập tin PBF nén"
 
 msgid "Download PBF"
-msgstr ""
+msgstr "Tải PBF"
 
 msgid "Invalid changeset id: {0}"
-msgstr ""
+msgstr "id changeset không hợp lệ: {0}"
 
 msgid "Invalid timestamp: {0}"
-msgstr ""
+msgstr "dấu thời gian không hợp lệ: {0}"
 
 msgid "Invalid DenseNodes key/values table"
-msgstr ""
+msgstr "DenseNodes Invalid key bảng / giá trị"
 
 msgid "Reading OSM data..."
-msgstr ""
+msgstr "Đọc dữ liệu OSM ..."
 
 msgid "Transform error: Min X must be smaller than max"
-msgstr ""
+msgstr "Biến đổi lỗi: Min X phải nhỏ hơn max"
 
 msgid "Transform error: Min Y must be smaller than max"
-msgstr ""
+msgstr "Biến đổi lỗi: Min Y phải nhỏ hơn max"
 
 msgid "Transform error: Points too close"
-msgstr ""
+msgstr "Biến đổi lỗi: Điểm quá gần"
 
 msgid "Transform error: Unsupported variant."
-msgstr ""
+msgstr "Biến đổi lỗi: biến thể không được hỗ trợ."
 
 msgid "Transform error: Unsupported orientation"
-msgstr ""
+msgstr "Biến đổi lỗi: định hướng không được hỗ trợ"
 
 msgid "Finished"
-msgstr ""
+msgstr "Finished"
 
 msgid "Prefs"
-msgstr ""
+msgstr "Prefs"
 
 msgid "Load file..."
-msgstr ""
+msgstr "tập tin tải ..."
 
 msgid "Place"
-msgstr ""
+msgstr "Place"
 
 msgid "Show target"
-msgstr ""
+msgstr "Hiện tượng"
 
 msgid "Take X and Y from selected node"
-msgstr ""
+msgstr "Hãy X và Y từ nút chọn"
 
 msgid "Debug info"
-msgstr ""
+msgstr "thông tin Debug"
 
 msgid "Merge close nodes"
-msgstr ""
+msgstr "Hợp nhất nút close"
 
 msgid "Remove objects smaller than"
-msgstr ""
+msgstr "Hủy bỏ các vật thể nhỏ hơn"
 
 msgid "Remove objects larger than"
-msgstr ""
+msgstr "Hủy bỏ các đối tượng lớn hơn"
 
 msgid "Only this color"
-msgstr ""
+msgstr "Chỉ có màu này"
 
 msgid "Remove parallel lines"
-msgstr ""
+msgstr "Hủy bỏ các đường song song"
 
 msgid "Take only first X paths"
-msgstr ""
+msgstr "Hãy chỉ đường dẫn X đầu tiên"
 
 msgid "Color/width change"
-msgstr ""
+msgstr "Color / chiều rộng thay đổi"
 
 msgid "Shape closed"
-msgstr ""
+msgstr "Shape đóng cửa"
 
 msgid "Single segments"
-msgstr ""
+msgstr "phân khúc Single"
 
 msgid "Orthogonal shapes"
-msgstr ""
+msgstr "hình dạng Orthogonal"
 
 msgid "Import settings"
-msgstr ""
+msgstr "Nhập cài đặt"
 
 msgid "Introduce separate layers for:"
-msgstr ""
+msgstr "Giới thiệu các lớp riêng biệt cho:"
 
 msgid "Bind to coordinates"
-msgstr ""
+msgstr "Bind đến tọa độ"
 
 msgid "Projection:"
-msgstr ""
+msgstr "chiếu:"
 
 msgid "Bottom left (min) corner:"
-msgstr ""
+msgstr "Dưới cùng bên trái (min) góc:"
 
 msgid "PDF X and Y"
-msgstr ""
+msgstr "PDF X và Y"
 
 msgid "East and North"
-msgstr ""
+msgstr "Đông và Bắc"
 
 msgid "Top right (max) corner:"
-msgstr ""
+msgstr "trên bên phải (max) góc:"
 
 msgid "Projection Preferences"
-msgstr ""
+msgstr "Preferences chiếu"
 
 msgid "Close the dialog and apply projection preferences"
-msgstr ""
+msgstr "Đóng hộp thoại và thực hiện ưu đãi chiếu"
 
 msgid "Close the dialog, discard projection preference changes"
-msgstr ""
+msgstr "Đóng hộp thoại, loại bỏ chiếu thay đổi sở thích"
 
 msgid "Loading..."
-msgstr ""
+msgstr "Loading ..."
 
 msgid "PDF file preview"
-msgstr ""
+msgstr "tập tin PDF xem trước"
 
 msgid "Loaded"
-msgstr ""
+msgstr "Loaded"
 
 msgid "Imported PDF: "
-msgstr ""
+msgstr "Nhập khẩu PDF: "
 
 msgid "Please select exactly one node."
-msgstr ""
+msgstr "Hãy chọn đúng một nút."
 
 msgid "PDF files"
-msgstr ""
+msgstr "các tập tin PDF"
 
 msgid "OSM files"
-msgstr ""
+msgstr "các tập tin OSM"
 
 msgid "Preparing"
-msgstr ""
+msgstr "Chuẩn bị"
 
 msgid "Tolerance is not a number"
-msgstr ""
+msgstr "Nhẫn không phải là một con số"
 
 msgid "Could not parse color"
-msgstr ""
+msgstr "Không thể phân tích màu sắc"
 
 msgid "Could not parse max path count"
-msgstr ""
+msgstr "Không thể phân tích tối đa số con đường"
 
 msgid "Parsing file"
-msgstr ""
+msgstr "Phân tích cú pháp file"
 
 msgid "File not found."
-msgstr ""
+msgstr "File không tìm thấy."
 
 msgid "Error while parsing: {0}"
-msgstr ""
+msgstr "Lỗi khi phân tích cú pháp: {0}"
 
 msgid "Removing parallel segments"
-msgstr ""
+msgstr "Loại bỏ các đoạn song song"
 
 msgid "Max distance is not a number"
-msgstr ""
+msgstr "Max khoảng cách không phải là một con số"
 
 msgid "Joining nodes"
-msgstr ""
+msgstr "Tham gia các nút"
 
 msgid "Joining adjacent segments"
-msgstr ""
+msgstr "Gia nhập phân khúc liền kề"
 
 msgid "Removing small objects"
-msgstr ""
+msgstr "Loại bỏ nhỏ các đối tượng"
 
 msgid "Removing large objects"
-msgstr ""
+msgstr "Loại bỏ các đối tượng lớn"
 
 msgid "Finalizing layers"
-msgstr ""
+msgstr "Hoàn thiện lớp"
 
 msgid "Please set a projection."
-msgstr ""
+msgstr "Xin hãy đặt một chiếu."
 
 msgid "Could not parse numbers. Please check."
-msgstr ""
+msgstr "Không thể phân tích các con số. Vui lòng kiểm tra."
 
 msgid "Building JOSM layer"
-msgstr ""
+msgstr "Xây dựng JOSM lớp"
 
 msgid "Postprocessing layer"
-msgstr ""
+msgstr "Postprocessing lớp"
 
 msgid "Saving to file."
-msgstr ""
+msgstr "Saving nộp."
 
 msgid " Writing to file"
-msgstr ""
+msgstr " Viết vào tập tin"
 
 msgid "Building JOSM layer."
-msgstr ""
+msgstr "Xây dựng JOSM lớp."
 
 msgid " "
 msgstr ""
 
 msgid "Import PDF file"
-msgstr ""
+msgstr "Import PDF file"
 
 msgid "Import PDF file."
-msgstr ""
+msgstr "Import PDF file."
 
 msgid "Import PDF"
-msgstr ""
+msgstr "Import PDF"
 
 msgid " {0} objects so far"
-msgstr ""
+msgstr " {0} đối tượng cho đến nay"
 
 msgid "Parsing PDF"
-msgstr ""
+msgstr "Phân tích cú pháp PDF"
 
 msgid "Encrypted documents not supported."
-msgstr ""
+msgstr "mã hóa các tài liệu không được hỗ trợ."
 
 msgid "The PDF file must have exactly one page."
-msgstr ""
+msgstr "Các tập tin PDF phải có đúng một trang."
 
 msgid "Read error: "
-msgstr ""
+msgstr "Đọc báo lỗi: "
 
 msgid "Write error: "
-msgstr ""
+msgstr "Viết báo lỗi: "
 
 msgid "Write coordinates to image header"
-msgstr ""
+msgstr "Write tọa độ để tiêu đề hình ảnh"
 
 msgid ""
 "Write position information into the exif header of the following files:"
-msgstr ""
+msgstr "Viết thông tin vị trí vào tiêu đề Exif của các tập tin sau đây:"
 
 msgid "settings"
-msgstr ""
+msgstr "cài đặt"
 
 msgid "keep backup files"
-msgstr ""
+msgstr "giữ các tập tin sao lưu"
 
 msgid "change file modification time:"
-msgstr ""
+msgstr "tập tin thay đổi thời gian sửa đổi:"
 
 msgid "to gps time"
-msgstr ""
+msgstr "gian gps"
 
 msgid "to previous value (unchanged mtime)"
-msgstr ""
+msgstr "với giá trị trước đó (mtime không thay đổi)"
 
 msgid "Photo Geotagging Plugin"
-msgstr ""
+msgstr "Ảnh Geotagging Plugin"
 
 msgid "Writing position information to image files..."
-msgstr ""
+msgstr "Viết thông tin vị trí các tập tin ảnh ..."
 
 msgid "Could not read mtime."
-msgstr ""
+msgstr "Không thể đọc mtime."
 
 msgid "Could not write mtime."
-msgstr ""
+msgstr "Không thể ghi mtime."
 
 msgid "File could not be deleted!"
-msgstr ""
+msgstr "File không thể xóa được!"
 
 msgid "Could not rename file!"
-msgstr ""
+msgstr "Không thể đổi tên tập tin!"
 
 msgid "Could not rename file {0} to {1}!"
-msgstr ""
+msgstr "Không thể đổi tên file {0} đến {1}!"
 
 msgid "<html><h3>There are old backup files in the image directory!</h3>"
 msgstr ""
+"<html> <h3> Có những tập tin sao lưu cũ trong thư mục hình ảnh! </ h3>"
 
 msgid "Override old backup files?"
-msgstr ""
+msgstr "Ghi đè file backup cũ?"
 
 msgid "Keep old backups and continue"
-msgstr ""
+msgstr "Hãy sao lưu cũ và tiếp tục"
 
 msgid "Override"
-msgstr ""
+msgstr "Override"
 
 msgid "Could not delete temporary file!"
-msgstr ""
+msgstr "Không thể xóa tập tin tạm thời!"
 
 msgid "Test failed: Could not read mtime."
-msgstr ""
+msgstr "Test không thành công: Không thể đọc mtime."
 
 msgid "Test failed: Could not write mtime."
-msgstr ""
+msgstr "Test không thành công: Không thể ghi mtime."
 
 msgid "Adjust photos"
-msgstr ""
+msgstr "Điều chỉnh hình ảnh"
 
 msgid "Move and position photos"
-msgstr ""
+msgstr "Di chuyển và vị trí hình ảnh"
 
 msgid ""
 "Click+drag photo, shift+click to position photo, control+click to set "
 "direction."
 msgstr ""
+"Click + photo kéo, shift + click để vị trí của ảnh, kiểm soát + bấm vào để "
+"thiết lậpHướng."
 
 msgid "Please load some photos."
-msgstr ""
+msgstr "Hãy tải một số hình ảnh."
 
 msgid "New layer for untagged images"
-msgstr ""
+msgstr "layer mới cho hình ảnh không được gắn thẻ"
 
 msgid "Untagged Images"
-msgstr ""
+msgstr "Hình ảnh Untagged"
 
 msgid "Do you want to save current calibration of layer {0}?"
-msgstr ""
+msgstr "Bạn có muốn tiết kiệm hiệu chuẩn hiện hành của {0} lớp?"
 
 msgid "Load Picture Calibration..."
-msgstr ""
+msgstr "Tải Ảnh Calibration ..."
 
 msgid "Loads calibration data from a file"
-msgstr ""
+msgstr "tải dữ liệu hiệu chuẩn từ một tập tin"
 
 msgid "Loading file failed: {0}"
-msgstr ""
+msgstr "Tải tệp không thành: {0}"
 
 msgid "Load World File Calibration..."
-msgstr ""
+msgstr "Load Thế giới tin Calibration ..."
 
 msgid "Loads calibration data from a world file"
-msgstr ""
+msgstr "tải dữ liệu hiệu chuẩn từ một tập tin thế giới"
 
 msgid "Reset Calibration"
-msgstr ""
+msgstr "Reset Calibration"
 
 msgid "Reset calibration"
-msgstr ""
+msgstr "Thiết lập lại cân chỉnh"
 
 msgid "Calibration reset"
-msgstr ""
+msgstr "Hiệu chỉnh thiết lập lại"
 
 msgid "Save Picture Calibration..."
-msgstr ""
+msgstr "Save Picture Calibration ..."
 
 msgid "Saves calibration data to a file"
-msgstr ""
+msgstr "Lưu dữ liệu hiệu chuẩn vào một tập tin"
 
 msgid "Saving file failed: {0}"
-msgstr ""
+msgstr "Đang lưu tệp bị lỗi: {0}"
 
 msgid "New picture layer from clipboard"
-msgstr ""
+msgstr "lớp hình ảnh mới từ clipboard"
 
 msgid "Supported image files, *.zip, *.kml"
-msgstr ""
+msgstr "Hỗ trợ các tập tin hình ảnh, * .zip, * .kml"
 
 msgid "New picture layer from file..."
-msgstr ""
+msgstr "lớp hình ảnh mới từ tập tin ..."
 
 msgid ""
 "KML calibration is in beta stage and may produce incorrectly calibrated "
 "layers!\n"
 "Please use {0} to upload your KMLs that were calibrated incorrectly."
 msgstr ""
+"KML hiệu chuẩn đang trong giai đoạn beta và có thể sản xuất ra được hiệu "
+"chỉnh không chính xácLớp! \n"
+"Vui lòng sử dụng {0} để tải KML của bạn đã được hiệu chỉnh không chính xác."
 
 msgid "PicLayer move"
-msgstr ""
+msgstr "PicLayer di chuyển"
 
 msgid "Moved"
-msgstr ""
+msgstr "Cảm động"
 
 msgid "Drag to move the picture"
-msgstr ""
+msgstr "Kéo để di chuyển hình ảnh"
 
 msgid "PicLayer rotate"
-msgstr ""
+msgstr "PicLayer xoay"
 
 msgid "Rotated"
-msgstr ""
+msgstr "xoay vòng"
 
 msgid "Drag to rotate the picture"
-msgstr ""
+msgstr "Kéo để xoay hình ảnh"
 
 msgid "PicLayer scale X"
-msgstr ""
+msgstr "PicLayer quy mô X"
 
 msgid "Scaled by X"
-msgstr ""
+msgstr "Scaled bởi X"
 
 msgid "Drag to scale the picture in the X Axis"
-msgstr ""
+msgstr "Kéo để mở rộng các hình ảnh trong X Axis"
 
 msgid "PicLayer scale"
-msgstr ""
+msgstr "PicLayer quy mô"
 
 msgid "Scaled"
-msgstr ""
+msgstr "Scaled"
 
 msgid "Drag to scale the picture in the X and Y Axis"
-msgstr ""
+msgstr "Kéo để mở rộng các hình ảnh trong X và Y Axis"
 
 msgid "PicLayer scale Y"
-msgstr ""
+msgstr "PicLayer quy mô Y"
 
 msgid "Scaled by Y"
-msgstr ""
+msgstr "Scaled bởi Y"
 
 msgid "Drag to scale the picture in the Y Axis"
-msgstr ""
+msgstr "Kéo để mở rộng các hình ảnh trong Y Axis"
 
 msgid "PicLayer shear"
-msgstr ""
+msgstr "PicLayer cắt"
 
 msgid "Sheared"
-msgstr ""
+msgstr "xén lông"
 
 msgid "Drag to shear the picture"
-msgstr ""
+msgstr "Kéo để cắt hình ảnh"
 
 msgid "PicLayer Move point"
-msgstr ""
+msgstr "PicLayer Move điểm"
 
 msgid "Point added/moved"
-msgstr ""
+msgstr "Point thêm / chuyển"
 
 msgid "Drag or create point on the picture"
-msgstr ""
+msgstr "Kéo hoặc tạo điểm trên hình ảnh"
 
 msgid "PicLayer Remove point"
-msgstr ""
+msgstr "PicLayer Xóa điểm"
 
 msgid "Point removed"
-msgstr ""
+msgstr "Point gỡ bỏ"
 
 msgid "Remove point on the picture"
-msgstr ""
+msgstr "Xóa điểm trên hình ảnh"
 
 msgid "PicLayer Transform point"
-msgstr ""
+msgstr "PicLayer Biến đổi điểm"
 
 msgid "Point transformed"
-msgstr ""
+msgstr "điểm chuyển đổi"
 
 msgid "Transform point on the picture"
-msgstr ""
+msgstr "Biến đổi điểm trên hình ảnh"
 
 msgid "PicLayer: {0}"
-msgstr ""
+msgstr "PicLayer: {0}"
 
 msgid "Calibration Files"
-msgstr ""
+msgstr "Calibration Files"
 
 msgid "Could not find the map object."
-msgstr ""
+msgstr "không thể tìm thấy các đối tượng bản đồ."
 
 msgid "PicLayer failed to load or import the image."
-msgstr ""
+msgstr "PicLayer không tải hoặc nhập khẩu các hình ảnh."
 
 msgid "Nothing in clipboard"
-msgstr ""
+msgstr "Không có gì trong clipboard"
 
 msgid "The clipboard data is not an image"
-msgstr ""
+msgstr "Các dữ liệu vào clipboard không phải là một hình ảnh"
 
 msgid "Warning: failed to handle zip file ''{0}''. Exception was: {1}"
 msgstr ""
+"Cảnh báo: không thể xử lý các tập tin zip '' {0} '' ngoại lệ là:. {1}"
 
 msgid "A calibration file associated to the picture file was found: {0}\n"
 msgstr ""
+"Một tập tin hiệu chuẩn liên quan đến các tập tin hình ảnh đã được tìm thấy: "
+"{0}\n"
 
 msgid ""
 "Set \"{0}\" to yes/no/ask in the preferences\n"
 "to control the autoloading of calibration files."
 msgstr ""
+"Set \" {0} \"yes / no / hỏi trong các ưu đãi \n"
+"Để kiểm soát tự động load các file chuẩn."
 
 msgid "Do you want to apply it ?"
-msgstr ""
+msgstr "Bạn có muốn áp dụng nó?"
 
 msgid "Load calibration file ?"
-msgstr ""
+msgstr "tập tin tải hiệu chuẩn?"
 
 msgid "It will be applied automatically."
-msgstr ""
+msgstr "Nó sẽ được áp dụng tự động."
 
 msgid ""
 "Also, from now on, calibration files will always be loaded automatically."
 msgstr ""
+"Ngoài ra, từ bây giờ, các tập tin hiệu chuẩn sẽ luôn luôn được nạp tự động."
 
 msgid "Point info"
-msgstr ""
+msgstr "info Point"
 
 msgid "Point info."
-msgstr ""
+msgstr "info Point."
 
 msgid "Connecting server"
-msgstr ""
+msgstr "server Kết nối"
 
 msgid "PointInfo"
-msgstr ""
+msgstr "PointInfo"
 
 msgid "Data not available."
-msgstr ""
+msgstr "Không có dữ liệu."
 
 msgid "Add new address point"
-msgstr ""
+msgstr "Thêm điểm địa chỉ mới"
 
 msgid "Tags copied to clipboard."
-msgstr ""
+msgstr "Thẻ sao chép vào clipboard."
 
 msgid "New address point added."
-msgstr ""
+msgstr "điểm địa chỉ mới được thêm vào."
 
 msgid "Download Osmosis poly"
-msgstr ""
+msgstr "Tải Osmosis poly"
 
 msgid "Reading polygon filter file..."
-msgstr ""
+msgstr "Đọc tập tin lọc đa giác ..."
 
 msgid "Error reading poly file: {0}"
-msgstr ""
+msgstr "Lỗi đọc tập tin nhiều: {0}"
 
 msgid "The file must begin with a polygon name"
-msgstr ""
+msgstr "Các tập tin phải bắt đầu với một tên đa giác"
 
 msgid "There are less than 2 points in an area"
-msgstr ""
+msgstr "Có ít hơn 2 điểm trong một khu vực"
 
 msgid "A polygon coordinate line must contain exactly 2 numbers"
-msgstr ""
+msgstr "Một đa giác phối dòng phải chứa chính xác số 2"
 
 msgid "Unable to parse {0} as a number"
-msgstr ""
+msgstr "Không thể phân tích {0} như một số"
 
 msgid "Invalid coordinates were found: {0}, {1}"
-msgstr ""
+msgstr "tọa độ không hợp lệ đã được tìm thấy: {0}, {1}"
 
 msgid "{0} points were outside world bounds and were moved"
-msgstr ""
+msgstr "{0} điểm là giới hạn thế giới bên ngoài và đã chuyển"
 
 msgid "Osmosis polygon filter files"
-msgstr ""
+msgstr "bộ lọc tập tin Osmosis đa giác"
 
 msgid "Print..."
-msgstr ""
+msgstr "In ..."
 
 msgid "Print the map"
-msgstr ""
+msgstr "In bản đồ"
 
 msgid "Print the Map"
-msgstr ""
+msgstr "In ra Bản đồ"
 
 msgid "Printer"
-msgstr ""
+msgstr "in"
 
 msgid "Media"
-msgstr ""
+msgstr "Media"
 
 msgid "Orientation"
-msgstr ""
+msgstr "Định hướng"
 
 msgid "Printer settings"
-msgstr ""
+msgstr "Cài đặt máy in"
 
 msgid "Scale"
-msgstr ""
+msgstr "Scale"
 
 msgid "Resolution"
-msgstr ""
+msgstr "Nghị quyết"
 
 msgid "Map information"
-msgstr ""
+msgstr "Bản đồ thông tin"
 
 msgid "Map Preview"
-msgstr ""
+msgstr "Bản Preview"
 
 msgid "Zoom To Page"
-msgstr ""
+msgstr "Zoom Để trang"
 
 msgid "Zoom To Actual Size"
-msgstr ""
+msgstr "Zoom Để Actual Size"
 
 msgid "Print"
-msgstr ""
+msgstr "In"
 
 msgid "Printing has been cancelled."
-msgstr ""
+msgstr "In ấn đã bị hủy bỏ."
 
 msgid "Printing stopped"
-msgstr ""
+msgstr "In ấn dừng lại"
 
 msgid "Printing has failed."
-msgstr ""
+msgstr "In ấn đã thất bại."
 
 msgid "Proj4J: {0} selected"
-msgstr ""
+msgstr "Proj4J: {0} được chọn"
 
 msgid "Selected: {0}"
-msgstr ""
+msgstr "chọn: {0}"
 
 msgid "Proj4J Plugin"
-msgstr ""
+msgstr "Proj4J Plugin"
 
 msgid "Code"
-msgstr ""
+msgstr "Code"
 
 msgid "added"
-msgstr ""
+msgstr "bổ sung"
 
 msgid "Public Transport: Enable GTFSStops"
-msgstr ""
+msgstr "Giao thông vận tải công cộng: Enable GTFSStops"
 
 msgid "Public Transport: Catch GTFS stops"
-msgstr ""
+msgstr "Giao thông vận tải công cộng: Catch GTFS dừng lại"
 
 msgid "skipped"
-msgstr ""
+msgstr "bỏ qua"
 
 msgid "Public Transport: Disable GTFS"
-msgstr ""
+msgstr "Giao thông vận tải công cộng: Vô hiệu hoá GTFS"
 
 msgid "Create Stops from GTFS ..."
-msgstr ""
+msgstr "Tạo điểm dừng từ GTFS ..."
 
 msgid "Create Stops from a GTFS file"
-msgstr ""
+msgstr "Tạo điểm dừng từ một tập tin GTFS"
 
 msgid "Select GTFS file (stops.txt)"
-msgstr ""
+msgstr "Chọn tập tin GTFS (stops.txt)"
 
 msgid "File \"{0}\" does not exist"
-msgstr ""
+msgstr "File \" {0} \"không tồn tại"
 
 msgid "IOException \"{0}\" occurred"
-msgstr ""
+msgstr "IOException \" {0} \"xảy ra"
 
 msgid ""
 "There exists no dataset. Try to download data from the server or open an OSM "
 "file."
 msgstr ""
+"Có tồn tại không có dữ liệu. Hãy thử để tải dữ liệu từ máy chủ hoặc mở một "
+"OSMTập tin."
 
 msgid "No data found"
-msgstr ""
+msgstr "Không tìm thấy dữ liệu"
 
 msgid "The GTFS file was empty."
-msgstr ""
+msgstr "Tập tin GTFS trống không."
 
 msgid "Create Stops from GTFS"
-msgstr ""
+msgstr "Tạo điểm dừng từ GTFS"
 
 msgid "GTFS-Stops"
-msgstr ""
+msgstr "GTFS-Stops"
 
 msgid "Type of stops to add"
-msgstr ""
+msgstr "Loại dừng để thêm"
 
 msgid "Time on your GPS device"
-msgstr ""
+msgstr "Thời gian trên thiết bị GPS của bạn"
 
 msgid "HH:MM:SS.sss"
-msgstr ""
+msgstr "HH: MM: SS.sss"
 
 msgid "Time on your stopwatch"
-msgstr ""
+msgstr "Thời gian trên đồng hồ bấm giờ của bạn"
 
 msgid "Time window"
-msgstr ""
+msgstr "Thời gian cửa sổ"
 
 msgid "seconds"
-msgstr ""
+msgstr "giây"
 
 msgid "Move Threshold"
-msgstr ""
+msgstr "Move Threshold"
 
 msgid "Suggest Stops"
-msgstr ""
+msgstr "Đề nghị dừng"
 
 msgid "Find"
-msgstr ""
+msgstr "Tìm"
 
 msgid "Show"
-msgstr ""
+msgstr "Show"
 
 msgid "Mark"
-msgstr ""
+msgstr "Mark"
 
 msgid "Catch"
-msgstr ""
+msgstr "Catch"
 
 msgid "Join"
-msgstr ""
+msgstr "Tham gia"
 
 msgid "Enable"
-msgstr ""
+msgstr "Enable"
 
 msgid "Can''t parse a time from this string."
-msgstr ""
+msgstr "can''t phân tích một thời gian từ chuỗi này."
 
 msgid "Invalid value"
-msgstr ""
+msgstr "giá trị không hợp lệ"
 
 msgid "moved"
-msgstr ""
+msgstr "di chuyển"
 
 msgid "Public Transport: Join GTFS stops"
-msgstr ""
+msgstr "Giao thông vận tải công cộng: Tham gia GTFS dừng lại"
 
 msgid "Id"
-msgstr ""
+msgstr "Id"
 
 msgid "State"
-msgstr ""
+msgstr "Nhà nước"
 
 msgid "pending"
-msgstr ""
+msgstr "cấp phát"
 
 msgid "outside"
-msgstr ""
+msgstr "bên ngoài"
 
 msgid "[incomplete]"
-msgstr ""
+msgstr "[không đầy đủ]"
 
 msgid "[empty way]"
-msgstr ""
+msgstr "[cách trống rỗng]"
 
 msgid "[ID] {0}"
-msgstr ""
+msgstr "[ID] {0}"
 
 msgid "[gap]"
-msgstr ""
+msgstr "[khoảng cách]"
 
 msgid " [ID] {0}"
-msgstr ""
+msgstr " [ID] {0}"
 
 msgid "Route patterns ..."
-msgstr ""
+msgstr "mẫu Route ..."
 
 msgid "Edit Route patterns for public transport"
-msgstr ""
+msgstr "mẫu Chỉnh sửa Tuyến đường giao thông công cộng"
 
 msgid "Route Patterns"
-msgstr ""
+msgstr "Route Patterns"
 
 msgid "Overview"
-msgstr ""
+msgstr "Tổng quan"
 
 msgid "Itinerary"
-msgstr ""
+msgstr "Hành trình"
 
 msgid "Stops"
-msgstr ""
+msgstr "Dừng"
 
 msgid "Meta"
-msgstr ""
+msgstr "Meta"
 
 msgid "Existing route patterns:"
-msgstr ""
+msgstr "hiện mô hình tuyến đường:"
 
 msgid "Reflect"
-msgstr ""
+msgstr "Reflect"
 
 msgid "Required tags:"
-msgstr ""
+msgstr "thẻ yêu cầu:"
 
 msgid "Common tags:"
-msgstr ""
+msgstr "thẻ thông thường:"
 
 msgid "Additional tags:"
-msgstr ""
+msgstr "thẻ bổ sung:"
 
 msgid "Add a new Tag"
-msgstr ""
+msgstr "Thêm một Tag mới"
 
 msgid "Name/Id"
-msgstr ""
+msgstr "Tên / Id"
 
 msgid "Ref"
-msgstr ""
+msgstr "Ref"
 
 msgid "Stops are possible on the"
-msgstr ""
+msgstr "Dừng là có thể vào"
 
 msgid "right hand side"
-msgstr ""
+msgstr "bên tay phải"
 
 msgid "left hand side"
-msgstr ""
+msgstr "bên tay trái"
 
 msgid "Maximum distance from route"
-msgstr ""
+msgstr "Khoảng cách tối đa từ đường"
 
 msgid "Public Transport: Change stop type"
-msgstr ""
+msgstr "Giao thông vận tải công cộng: Thay đổi kiểu cửa"
 
 msgid "Create Stops from GPX ..."
-msgstr ""
+msgstr "Tạo điểm dừng từ GPX ..."
 
 msgid "Create Stops from a GPX file"
-msgstr ""
+msgstr "Tạo điểm dừng từ một tập tin GPX"
 
 msgid "Select GPX file"
-msgstr ""
+msgstr "Chọn tập tin GPX"
 
 msgid "The GPX file contained no tracks or waypoints."
-msgstr ""
+msgstr "Các tập tin GPX không chứa các bài hát hoặc điểm tham chiếu."
 
 msgid "Create Stops from GPX"
-msgstr ""
+msgstr "Tạo điểm dừng từ GPX"
 
 msgid "Tracks in this GPX file:"
-msgstr ""
+msgstr "Tracks trong tập tin GPX này:"
 
 msgid "Detach"
-msgstr ""
+msgstr "Gỡ"
 
 msgid "implicit"
-msgstr ""
+msgstr "tiềm ẩn"
 
 msgid ""
 "The GPX file doesn''t contain valid trackpoints. Please use a GPX file that "
 "has trackpoints."
 msgstr ""
+"Các tập tin GPX doesn''t chứa trên đoạn hợp lệ. Vui lòng sử dụng một tập tin "
+"GPX rằngCó đoạn đường."
 
 msgid "GPX File Trouble"
-msgstr ""
+msgstr "Tập tin GPX Trouble"
 
 msgid "unnamed"
-msgstr "không có tên"
+msgstr "vô danh"
 
 msgid "Public Transport: Add track stop"
-msgstr ""
+msgstr "Giao thông vận tải công cộng: Thêm đường dừng"
 
 msgid "Public Transport: Delete track stop"
-msgstr ""
+msgstr "Giao thông vận tải công cộng: Xóa track cửa"
 
 msgid "Public Transport: Detach track stop list"
-msgstr ""
+msgstr "Giao thông vận tải công cộng: Tháo danh sách ngừng theo dõi"
 
 msgid "Public Transport: Edit track stop list"
-msgstr ""
+msgstr "Giao thông vận tải công cộng: Chỉnh sửa danh sách theo dõi cửa"
 
 msgid "Public Transport: Relocate nodes in track stoplist"
-msgstr ""
+msgstr "Giao thông vận tải công cộng: Di dời các nút trong track stoplist"
 
 msgid "Public Transport: sort track stop list"
-msgstr ""
+msgstr "Giao thông vận tải công cộng: sắp xếp theo dõi danh sách ngừng"
 
 msgid "Public Transport: Suggest stops"
-msgstr ""
+msgstr "Giao thông vận tải công cộng: Đề nghị dừng"
 
 msgid "Stopname"
-msgstr ""
+msgstr "Stopname"
 
 msgid "Public Transport: Detach waypoints"
-msgstr ""
+msgstr "Giao thông vận tải công cộng: Tháo waypoints"
 
 msgid "Public Transport: Disable waypoints"
-msgstr ""
+msgstr "Giao thông vận tải công cộng: Vô hiệu hoá waypoints"
 
 msgid "Public Transport: Enable waypoints"
-msgstr ""
+msgstr "Giao thông vận tải công cộng: Enable waypoints"
 
 msgid "Public Transport: Edit waypoint name"
+msgstr "Giao thông vận tải công cộng: Chỉnh sửa tên waypoint"
+
+msgid "Public transport routes"
 msgstr ""
 
-msgid "Relation Toolbox"
+msgid "Toggle direction arrows"
 msgstr ""
 
-msgid "Open relation/multipolygon editor panel"
+msgid "Toggle reference labels"
 msgstr ""
 
-msgid "Specify role"
+msgid "Visualize public transport routes"
 msgstr ""
 
-msgid "Change relation member roles to {0}"
+msgid "Filters"
 msgstr ""
 
-msgid "Create administrative boundary relations"
+msgid "Choose Filter"
 msgstr ""
 
-msgid "Add tags boundary and admin_level to boundary relation ways"
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
 msgstr ""
 
+msgid "Relation Toolbox"
+msgstr "Quan hệ Toolbox"
+
+msgid "Open relation/multipolygon editor panel"
+msgstr "Open quan / multipolygon bảng biên tập"
+
+msgid "Specify role"
+msgstr "Xác định vai trò"
+
+msgid "Change relation member roles to {0}"
+msgstr "vai trò thành viên Thay đổi liên quan tới {0}"
+
+msgid "Create administrative boundary relations"
+msgstr "Tạo mối quan hệ địa giới hành chính"
+
+msgid "Add tags boundary and admin_level to boundary relation ways"
+msgstr "Thêm thẻ ranh giới và admin_level đến ranh giới cách quan hệ"
+
 msgid "Move area tags from contour to relation"
-msgstr ""
+msgstr "Di chuyển các thẻ khu vực từ đường viền để mối quan hệ"
 
 msgid "When moving tags, consider even non-repeating ones"
-msgstr ""
+msgstr "Khi di chuyển thẻ, xem xét thậm chí không lặp lại những cái"
 
 msgid "Always split ways of neighbouring multipolygons"
-msgstr ""
+msgstr "Luôn luôn chia cách multipolygons láng giềng"
 
 msgid "Change role"
-msgstr ""
+msgstr "Thay đổi vai trò"
 
 msgid "Enter role for selected members"
-msgstr ""
+msgstr "Nhập vai trò cho các thành viên được lựa chọn"
 
 msgid "Relation Toolbox: {0}"
-msgstr ""
+msgstr "Quan hệ Toolbox: {0}"
 
 msgid "another..."
-msgstr ""
+msgstr "khác ..."
 
 msgid "Add/remove members from the chosen relation"
-msgstr ""
+msgstr "Thêm / loại bỏ các thành viên từ các mối quan hệ được chọn"
 
 msgid "Clear the chosen relation"
-msgstr ""
+msgstr "Xóa các mối quan hệ được chọn"
 
 msgid "Create a multipolygon from selected objects"
-msgstr ""
+msgstr "Tạo một multipolygon từ các đối tượng được lựa chọn"
 
 msgid "Create multipolygons from rings"
-msgstr ""
+msgstr "Tạo multipolygons từ nhẫn"
 
 msgid "Move tags from ways to relation"
-msgstr ""
+msgstr "Di chuyển thẻ từ cách để mối quan hệ"
 
 msgid "Enter admin level and name for the border relation:"
-msgstr ""
+msgstr "Nhập mức admin và tên cho mối quan hệ biên giới:"
 
 msgid "Admin level"
-msgstr ""
+msgstr "cấp quản lý"
 
 msgid "Create a relation from selected objects"
-msgstr ""
+msgstr "Tạo một quan hệ từ đối tượng được chọn"
 
 msgid "Choose a type for the relation:"
-msgstr ""
+msgstr "Chọn một loại cho các mối quan hệ:"
 
 msgid "Delete relation"
-msgstr ""
+msgstr "Xóa mối quan hệ"
 
 msgid "Download incomplete members for the chosen relation"
-msgstr ""
+msgstr "Tải về các thành viên không đầy đủ cho các mối quan hệ được chọn"
 
 msgid "Download referrers"
-msgstr ""
+msgstr "Tải referrers"
 
 msgid "Download referrers for the chosen relation and its members."
 msgstr ""
+"Download dẫn đến nhiều cho mối quan hệ được lựa chọn và các thành viên của "
+"nó."
 
 msgid "Duplicate relation"
-msgstr ""
+msgstr "quan hệ trùng lặp"
 
 msgid "Open relation editor for the chosen relation"
-msgstr ""
+msgstr "biên tập viên quan hệ mở cho mối quan hệ được chọn"
 
 msgid "Find a relation"
-msgstr ""
+msgstr "Tìm một mối quan hệ"
 
 msgid "Reconstruct polygon"
-msgstr ""
+msgstr "Cải tạo đa giác"
 
 msgid "Multipolygon must consist only of ways"
-msgstr ""
+msgstr "Multipolygon phải chỉ gồm những cách"
 
 msgid "Reconstruction of polygons can be done only from outer ways"
-msgstr ""
+msgstr "Tái thiết của đa giác có thể được thực hiện chỉ từ cách bên ngoài"
 
 msgid "Reconstruct polygons from relation {0}"
-msgstr ""
+msgstr "Cải tạo đa giác từ mối quan hệ {0}"
 
 msgid "Reconstruct route"
-msgstr ""
+msgstr "Cải tạo tuyến đường"
 
 msgid "Open relation wiki page"
-msgstr ""
+msgstr "trang wiki mở mối quan hệ"
 
 msgid "Select relation in main selection."
-msgstr ""
+msgstr "Chọn liên quan trong lựa chọn chính."
 
 msgid "Fix roles of the chosen relation members"
-msgstr ""
+msgstr "Fix vai trò của các thành viên liên quan lựa chọn"
 
 msgid "Complete multipolygon for way {0}"
-msgstr ""
+msgstr "Hoàn thành multipolygon cho cách {0}"
 
 msgid "Node without ''house'' role found"
-msgstr ""
+msgstr "Node không có '' nhà '' vai trò tìm thấy"
 
 msgid "Way without ''house'' or ''street'' role found"
-msgstr ""
+msgstr "Way mà không có '' nhà '' hoặc '' đường phố '' vai trò tìm thấy"
 
 msgid "Relation without ''house'' role found"
-msgstr ""
+msgstr "Mối quan hệ mà không có '' nhà '' vai trò tìm thấy"
 
 msgid "Relation does not have name"
-msgstr ""
+msgstr "Mối quan hệ không có tên"
 
 msgid "Relation has streets with different names"
-msgstr ""
+msgstr "Mối quan hệ có đường phố với tên gọi khác nhau"
 
 msgid "fix associatedStreet relation"
-msgstr ""
+msgstr "fix associatedStreet mối quan hệ"
 
 msgid "Relation without ''subarea'' role found"
-msgstr ""
+msgstr "Mối quan hệ mà không có '' vùng phụ '' vai trò tìm thấy"
 
 msgid "Node without ''label'' or ''admin_centre'' role found"
-msgstr ""
+msgstr "Node không có '' nhãn '' hoặc '' admin_centre '' vai trò tìm thấy"
 
 msgid "Way without ''inner'' or ''outer'' role found"
-msgstr ""
+msgstr "Way mà không có '' nội '' hoặc '' bên ngoài '' vai trò tìm thấy"
 
 msgid "Node without ''stop'' or ''platform'' role found"
-msgstr ""
+msgstr "Node không có '' stop '' hoặc '' nền tảng '' vai trò tìm thấy"
 
 msgid "Way platform without ''platform'' role found"
-msgstr ""
+msgstr "Way nền tảng mà không có '' nền tảng '' vai trò tìm thấy"
 
 msgid "Revert changeset fully"
-msgstr ""
+msgstr "Hoàn nguyên changeset đầy đủ"
 
 msgid "Revert selection only"
-msgstr ""
+msgstr "Hoàn nguyên chỉ lựa chọn"
 
 msgid "Revert selection and restore deleted objects"
-msgstr ""
+msgstr "Hoàn nguyên lựa chọn và khôi phục lại đối tượng đã xóa"
 
 msgid "Revert changeset"
-msgstr ""
+msgstr "Hoàn nguyên changeset"
 
 msgid "Revert"
-msgstr ""
+msgstr "Hoàn nguyên"
 
 msgid "Enter the ID of the changeset that should be reverted"
-msgstr ""
+msgstr "Nhập ID của changeset cần được hoàn nguyên"
 
 msgid "Reverted changeset"
-msgstr ""
+msgstr "Đã hủy changeset"
 
 msgid "It is not allowed to revert changeset from {0}"
+msgstr "Nó không được phép trở lại changeset từ {0}"
+
+msgid "Downloading objects history"
 msgstr ""
 
 msgid "Missing merge target for {0} with id {1}"
-msgstr ""
+msgstr "mục tiêu hợp nhất cho Thiếu {0} với id {1}"
 
 msgid "Objects history"
-msgstr ""
+msgstr "Đối tượng lịch sử"
 
 msgid "History reverter"
+msgstr "Lịch sử trao lại tài sản"
+
+msgid "Tool: Display objects history dialog"
 msgstr ""
 
 msgid "Preparing history data..."
-msgstr ""
+msgstr "Chuẩn bị dữ liệu lịch sử ..."
 
 msgid "Remote Control has been asked to revert a changeset."
-msgstr ""
+msgstr "điều khiển từ xa đã được yêu cầu trở lại một changeset."
 
 msgid "Reverting..."
-msgstr ""
+msgstr "hoàn nguyên ..."
 
 msgid ""
 "This changeset has objects that are not present in current dataset.\n"
 "It is needed to download them before reverting. Do you want to continue?"
 msgstr ""
+"Changeset này có đối tượng mà không có mặt trong bộ dữ liệu hiện hành. \n"
+"Nó là cần thiết để tải về chúng trước khi quay trở lại. Bạn có muốn tiếp tục "
+"không?"
 
 msgid "Confirm"
-msgstr ""
+msgstr "Xác nhận"
 
 msgid "Fetching missing primitives"
-msgstr ""
+msgstr "Đang tìm nạp nguyên thủy mất tích"
 
 msgid "Downloading changeset"
-msgstr ""
+msgstr "Tải changeset"
 
 msgid "See {0}"
-msgstr ""
+msgstr "Xem {0}"
 
 msgid "Revert changeset #{0}"
-msgstr ""
+msgstr "Hoàn nguyên changeset # {0}"
 
 msgid ""
 "Warning: unsupported start element ''{0}'' in changeset content at position "
 "({1},{2}). Skipping."
 msgstr ""
+"Cảnh báo: phần tử bắt đầu được hỗ trợ '' {0} '' trong nội dung changeset ở "
+"vị trí({1}, {2}). Bỏ qua"
 
 msgid ""
 "Warning: unsupported end element ''{0}'' in changeset content at position "
 "({1},{2}). Skipping."
 msgstr ""
+"Cảnh báo: yếu tố cuối không được hỗ trợ '' {0} '' trong nội dung changeset ở "
+"vị trí({1}, {2}). Bỏ qua"
 
 msgid "Road Sign Plugin"
-msgstr ""
+msgstr "Road Đăng Plugin"
 
 msgid "signs"
-msgstr ""
+msgstr "dấu hiệu"
 
 msgid "Change Properties"
-msgstr ""
+msgstr "Thay đổi Properties"
 
 msgid "Country preset:"
-msgstr ""
+msgstr "Country cài sẵn:"
 
 msgid "Show all signs"
-msgstr ""
+msgstr "Hiển thị tất cả các dấu hiệu"
 
 msgid "Show a selection of the most useful signs"
-msgstr ""
+msgstr "Hiển thị các lựa chọn trong những dấu hiệu hữu ích nhất"
 
 msgid "Belgium"
-msgstr ""
+msgstr "Bỉ"
 
 msgid "Spain"
-msgstr ""
+msgstr "Tây Ban Nha"
 
 msgid "Germany"
-msgstr ""
+msgstr "Đức"
 
 msgid "Poland"
-msgstr ""
+msgstr "Ba Lan"
 
 msgid "Slovakia"
-msgstr ""
+msgstr "Slovakia"
 
 msgid "Roadsign tagging"
-msgstr ""
+msgstr "Roadsign gắn thẻ"
 
 msgid "Add tags by clicking on road signs"
-msgstr ""
+msgstr "Thêm từ khóa bằng cách nhấp chuột vào đường dấu hiệu"
 
 msgid "Roadsigns plugin: open dialog"
-msgstr ""
+msgstr "Roadsigns plugin: mở hộp thoại"
 
 msgid "custom"
-msgstr ""
+msgstr "tùy chỉnh"
 
 msgid "Could not read tagging preset source: ''{0}''"
-msgstr ""
+msgstr "Không thể đọc gắn thẻ nguồn cài sẵn: '' {0} ''"
 
 msgid "Error parsing tagging preset from ''{0}'':\n"
-msgstr ""
+msgstr "Lỗi phân tích cú pháp gắn thẻ định sẵn từ '' {0} '':\n"
 
 msgid "Sign {0}"
-msgstr ""
+msgstr "Sign {0}"
 
 msgid "Additional sign {0}"
-msgstr ""
+msgstr "dấu hiệu khác {0}"
 
 msgid "Edit relation"
-msgstr ""
+msgstr "Edit mối quan hệ"
 
 msgid "Edit relations"
-msgstr ""
+msgstr "Edit quan hệ"
 
 msgid "No relation is selected"
-msgstr ""
+msgstr "Không quan hệ được lựa chọn"
 
 msgid "Remove node ''{0}'' at position {1} from relation ''{2}''"
-msgstr ""
+msgstr "Hủy bỏ nút '' {0} '' ở vị trí {1} từ mối quan hệ '' {2} ''"
 
 msgid "Remove way ''{0}'' at position {1} from relation ''{2}''"
-msgstr ""
+msgstr "Hủy bỏ cách '' {0} '' ở vị trí {1} từ mối quan hệ '' {2} ''"
 
 msgid "Remove relation ''{0}'' at position {1} from relation ''{2}''"
-msgstr ""
+msgstr "Hủy bỏ mối quan hệ '' {0} '' ở vị trí {1} từ mối quan hệ '' {2} ''"
 
 msgid "routing active route"
-msgstr ""
+msgstr "định tuyến đường hoạt động"
 
 msgid "routing inactive route"
-msgstr ""
+msgstr "định tuyến đường không hoạt động"
 
 msgid "Routing"
-msgstr ""
+msgstr "Routing"
 
 msgid "Click to add destination."
-msgstr ""
+msgstr "Nhấn vào đây để thêm điểm đến."
 
 msgid "Click and drag to move destination"
-msgstr ""
+msgstr "Nhấp và kéo để di chuyển điểm đến"
 
 msgid "Click to remove destination"
-msgstr ""
+msgstr "Nhấn vào đây để xóa điểm đến"
 
 msgid "Open a list of routing nodes"
-msgstr ""
+msgstr "Mở một danh sách các nút định tuyến"
 
 msgid "Add routing layer"
-msgstr ""
+msgstr "Add layer định tuyến"
 
 msgid "Criteria"
-msgstr ""
+msgstr "Tiêu chuẩn"
 
 msgid "Shortest"
-msgstr ""
+msgstr "Shortest"
 
 msgid "Fastest"
-msgstr ""
+msgstr "nhanh nhất"
 
 msgid "Ignore oneways"
-msgstr ""
+msgstr "Bỏ qua oneways"
 
 msgid "Reverse route"
-msgstr ""
+msgstr "Xếp đường"
 
 msgid "Clear route"
-msgstr ""
+msgstr "Xoá tuyến đường"
 
 msgid "Reconstruct Graph"
-msgstr ""
+msgstr "tái tạo lại Graph"
 
 msgid "Routing Plugin Preferences"
-msgstr ""
+msgstr "Preferences Routing Plugin"
 
 msgid "Configure routing preferences."
-msgstr ""
+msgstr "Cấu hình định tuyến thích."
 
 msgid "Speed (Km/h)"
-msgstr ""
+msgstr "Tốc độ (Km / h)"
 
 msgid "Weight"
-msgstr ""
+msgstr "Weight"
 
 msgid "Enter weight values"
-msgstr ""
+msgstr "Nhập giá trị trọng lượng"
 
 msgid "New value for {0}"
-msgstr ""
+msgstr "giá trị mới cho {0}"
 
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
+msgstr "Preference '' {0} '' mất tích. Không thể khởi tạo SdsApi."
+
+msgid "Proxy Authentication Required"
 msgstr ""
 
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
 msgstr ""
+"<Html> <body> <p class = \" cảnh báo cơ thể \"> <strong> Cảnh báo: </ "
+"strong> Mật khẩuĐược lưu trữ trong văn bản gốc trong các ưu đãi file JOSM. "
+"</ P> </ body> </ html>"
 
 msgid "Enter credentials for Separate Data Store API"
-msgstr ""
+msgstr "Nhập thông tin cho dữ liệu riêng biệt Cửa API"
 
 msgid "Please enter the user name of your SDS account"
-msgstr ""
+msgstr "Hãy nhập tên người dùng của tài khoản SDS của bạn"
 
 msgid "Please enter the password of your SDS account"
-msgstr ""
+msgstr "Hãy nhập mật khẩu của SDS tài khoản"
 
 msgid ""
 "Authenticating at the SDS API ''{0}'' failed. Please enter a valid username "
 "and a valid password."
 msgstr ""
+"Chứng thực tại API SDS '' {0} '' thất bại. Vui lòng nhập một tên người dùng "
+"hợp lệVà mật khẩu hợp lệ."
 
 msgid "SDS data file"
-msgstr ""
+msgstr "SDS dữ liệu tập tin"
 
 msgid "Load..."
-msgstr ""
+msgstr "Load ..."
 
 msgid "Load separate data store data from a file."
-msgstr ""
+msgstr "Load dữ liệu lưu trữ dữ liệu riêng biệt từ một tập tin."
 
 msgid "Loading files"
-msgstr ""
+msgstr "Đang tải các tập tin"
 
 msgid "SDS"
-msgstr ""
+msgstr "SDS"
 
 msgid "Information about SDS."
-msgstr ""
+msgstr "Thông tin về SDS."
 
 msgid "About SDS..."
-msgstr ""
+msgstr "Về SDS ..."
 
 msgid "Open a preferences dialog for SDS."
-msgstr ""
+msgstr "Mở một hộp thoại sở thích cho SDS."
 
 msgid "Separate Data Store"
-msgstr ""
+msgstr "Separate dữ liệu Store"
 
 msgid "Configures access to the Separate Data Store."
-msgstr ""
+msgstr "Cấu hình truy cập vào các dữ liệu Store riêng biệt."
 
 msgid "Server"
-msgstr ""
+msgstr "Server"
 
 msgid "The URL under which the SDS server can be contacted."
-msgstr ""
+msgstr "Các URL theo đó các máy chủ SDS có thể liên lạc."
 
 msgid ""
 "The user name at the SDS server. You need to create an account with the SDS "
 "admin first."
 msgstr ""
+"Tên người dùng tại máy chủ SDS. Bạn cần phải tạo một tài khoản với các "
+"SDSAdmin đầu tiên."
 
 msgid ""
 "The password at the SDS server. You need to create an account with the SDS "
 "admin first."
 msgstr ""
+"Các mật khẩu tại máy chủ SDS. Bạn cần phải tạo một tài khoản với các "
+"SDSAdmin đầu tiên."
 
 msgid ""
 "Tags beginning with this prefix are never saved to OSM, but to the SDS "
 "server only."
 msgstr ""
+"Thẻ bắt đầu với tiền tố này không bao giờ được lưu vào OSM, nhưng đến SDSMáy "
+"chủ duy nhất."
 
 msgid "SDS server URL"
-msgstr ""
+msgstr "SDS URL server"
 
 msgid "SDS username"
-msgstr ""
+msgstr "SDS username"
 
 msgid "SDS password"
-msgstr ""
+msgstr "SDS password"
 
 msgid "Test credentials now"
-msgstr ""
+msgstr "Kiểm tra thông tin ngay bây giờ"
 
 msgid "SDS tag prefix"
-msgstr ""
+msgstr "SDS tag tiền tố"
 
 msgid "Connection successful."
-msgstr ""
+msgstr "kết nối thành công."
 
 msgid "Cannot connect to SDS server: "
-msgstr ""
+msgstr "không thể kết nối với máy chủ SDS: "
 
 msgid "Save..."
-msgstr ""
+msgstr "Lưu ..."
 
 msgid "Save the current separate data store information to a file."
 msgstr ""
+"Lưu các thông tin lưu trữ dữ liệu riêng biệt hiện tại vào một tập tin."
 
 msgid "Save SDS file"
-msgstr ""
+msgstr "Lưu SDS file"
 
 msgid "No object selected"
-msgstr ""
+msgstr "Không có đối tượng được chọn"
 
 msgid "SeaChart Editor"
-msgstr ""
+msgstr "SeaChart Editor"
 
 msgid "Seamark Inspector"
-msgstr ""
+msgstr "đèn pha chỉ đường cho tàu chạy thanh tra"
 
 msgid "Select only one object"
-msgstr ""
+msgstr "Chỉ chọn một đối tượng"
 
 msgid "Select a map object"
-msgstr ""
+msgstr "Chọn một đối tượng bản đồ"
 
 msgid "Simplify Area"
-msgstr ""
+msgstr "Đơn giản hóa Area"
 
 msgid "Delete unnecessary nodes from an area."
-msgstr ""
+msgstr "Xóa các nút không cần thiết từ một khu vực."
 
 msgid "Yes, delete nodes"
-msgstr ""
+msgstr "Có, xóa các nút"
 
 msgid "Delete nodes outside of downloaded data regions"
-msgstr ""
+msgstr "Xóa các nút bên ngoài các vùng dữ liệu tải về"
 
 msgid "No, abort"
-msgstr ""
+msgstr "Không, hủy bỏ"
 
 msgid "Do you want to delete them anyway?"
-msgstr ""
+msgstr "Bạn có muốn xóa chúng không?"
 
 msgid "Delete nodes outside of data regions?"
-msgstr ""
+msgstr "Xóa các nút bên ngoài các vùng dữ liệu?"
 
 msgid "average nearby nodes"
-msgstr ""
+msgstr "các nút lân cận trung bình"
 
 msgid ""
 "Node of the way (area) is removed if all of <u>Angle Weight</u>, <u>Area "
@@ -27703,713 +30162,801 @@ msgid ""
 "another step of the simplification that merges adjanced nodes that are "
 "closer than <u>Threshold</u> meters."
 msgstr ""
+"Node of the way (khu vực) được lấy ra nếu tất cả các <u> Góc Trọng lượng </ "
+"u>, <u> AreaTrọng lượng </ u> và <u> cách Trọng lượng </ u> đều lớn hơn 1. "
+"<u> Trọng lượng </ u> làTính như <u> giá trị </ u> / <u> Threshold </ u>, "
+"nơi <u> giá trị </ u> là một trong những<U> Góc </ u>, <u> Khu </ u> và <u> "
+"cách </ u> tính từ mỗi baĐiểm adjanced của con đường. <Ul> <li> <u> giá trị "
+"</ u> của <u> Góc </ u> là góc trongĐộ trên nút thứ hai </ li> <li> <u> giá "
+"trị </ u> của <u> Khu </ u> là khu vựcHình thành bởi tam </ li> <li> <u> giá "
+"trị </ u> của <u> cách </ u> là CrossTheo dõi Lỗi cách </ li> </ ul> Tất cả "
+"ba <u> Trọng lượng </ u> s nhân của nó<U> tố </ u> s được tổng kết và nút số "
+"tiền thấp nhất được lấy ra đầu tiên.Removal tiếp tục cho đến khi không có "
+"nút để remove.Merge Nodes gần đó làMột bước trong việc đơn giản mà kết hợp "
+"các nút adjanced đượcGần hơn <u> Threshold </ u> m."
+
+msgid "Angle Threshold"
+msgstr "Góc Threshold"
+
+msgid "Angle Factor"
+msgstr "Góc Factor"
+
+msgid "Area Threshold"
+msgstr "Area Threshold"
+
+msgid "Area Factor"
+msgstr "Area Factor"
+
+msgid "Distance Threshold"
+msgstr "Khoảng cách Threshold"
+
+msgid "Distance Factor"
+msgstr "Khoảng cách Factor"
+
+msgid "Merge Nearby Nodes Threshold"
+msgstr "Merge Nodes Threshold gần đó"
+
+msgid "SeaMap Editor"
+msgstr "SEAMAP Editor"
+
+msgid "Spline drawing"
+msgstr ""
 
-msgid "Angle Threshold"
+msgid "Draw a spline curve"
 msgstr ""
 
-msgid "Angle Factor"
+msgid "Spline goes outside of the world."
 msgstr ""
 
-msgid "Area Threshold"
+msgid "Add an existing node to spline: {0}"
 msgstr ""
 
-msgid "Area Factor"
+msgid "Add a new node to spline: {0}"
 msgstr ""
 
-msgid "Distance Threshold"
+msgid "Delete spline node {0}"
 msgstr ""
 
-msgid "Distance Factor"
+msgid "Finish spline"
 msgstr ""
 
-msgid "Merge Nearby Nodes Threshold"
+msgid "Splines"
 msgstr ""
 
-msgid "SeaMap Editor"
+msgid "Spline drawing preferences"
 msgstr ""
 
-msgid "OSM Export"
+msgid "Curve steps"
 msgstr ""
 
-msgid "Export traffic data to SUMO network file."
+msgid "Undelete node {0}"
 msgstr ""
 
+msgid "OSM Export"
+msgstr "OSM xuất khẩu"
+
+msgid "Export traffic data to SUMO network file."
+msgstr "dữ liệu lưu lượng xuất khẩu vào tập tin mạng SUMO."
+
 msgid "SUMO Export"
-msgstr ""
+msgstr "SUMO xuất khẩu"
+
+msgid "Export"
+msgstr "xuất khẩu"
 
 msgid "AutoSave LiveData"
-msgstr ""
+msgstr "Tự động lưu LiveData"
 
 msgid "Save captured data to file every minute."
-msgstr ""
+msgstr "Lưu dữ liệu bị bắt nộp mỗi phút."
 
 msgid "Error while exporting {0}: {1}"
-msgstr ""
+msgstr "Lỗi trong khi xuất khẩu {0}: {1}"
 
 msgid "Duplicate hotkey for button ''{0}'' - button will be ignored!"
-msgstr ""
+msgstr "hotkey nút Duplicate cho '' {0} '' - nút sẽ bị bỏ qua!"
 
 msgid "SurveyorPlugin needs LiveGpsPlugin, but could not find it!"
-msgstr ""
+msgstr "SurveyorPlugin cần LiveGpsPlugin, nhưng không thể tìm thấy nó!"
 
 msgid "Surveyor..."
-msgstr ""
+msgstr "Surveyor ..."
 
 msgid "Open surveyor tool."
-msgstr ""
+msgstr "công cụ trắc địa Open."
 
 msgid "Surveyor"
-msgstr ""
+msgstr "Surveyor"
 
 msgid "Could not read surveyor definition: {0}"
-msgstr ""
+msgstr "Không thể đọc định nghĩa trắc địa: {0}"
 
 msgid "Error parsing {0}: {1}"
-msgstr ""
+msgstr "Lỗi phân tích cú pháp {0}: {1}"
 
 msgid "Surveyor waypoint layer"
-msgstr ""
+msgstr "layer waypoint Surveyor"
 
 msgid "{0} start"
-msgstr ""
+msgstr "{0} bắt đầu"
 
 msgid "{0} end"
-msgstr ""
+msgstr "{0} end"
 
 msgid "Waypoint Description"
-msgstr ""
+msgstr "Waypoint Mô tả"
 
 msgid "Tag2Link Preferences"
-msgstr ""
+msgstr "Preferences Tag2Link"
 
 msgid "Launch browser with information about the selected object"
-msgstr ""
+msgstr "trình duyệt Launch với thông tin về các đối tượng được chọn"
 
 msgid ""
 "Launch your default software for sending an email to the selected contact "
 "address"
 msgstr ""
+"Khởi động phần mềm mặc định của bạn để gửi một email để liên lạc đã chọnĐịa "
+"chỉ"
 
 msgid "Edit tags"
-msgstr ""
+msgstr "Chỉnh sửa thẻ"
 
 msgid "Launches the tag editor dialog"
-msgstr ""
+msgstr "tung ra hộp thoại biên tập tag"
 
 msgid "JOSM Tag Editor Plugin"
-msgstr ""
+msgstr "JOSM Tag Editor Plugin"
 
 msgid "Abort tag editing and close dialog"
-msgstr ""
+msgstr "Abort chỉnh sửa từ khóa và đóng hộp thoại"
 
 msgid "Apply edited tags and close dialog"
-msgstr ""
+msgstr "Áp dụng thẻ đã được chỉnh sửa và đóng hộp thoại"
 
 msgid "Highlight"
-msgstr ""
+msgstr "Highlight"
 
 msgid "Group"
-msgstr ""
+msgstr "Tập đoàn"
 
 msgid "Item"
-msgstr ""
+msgstr "Item"
 
 msgid "unexpected column number {0}"
-msgstr ""
+msgstr "cột số bất ngờ {0}"
 
 msgid "Tagging Preset Tester"
-msgstr ""
+msgstr "Gắn thẻ Preset Tester"
 
 msgid ""
 "Open the tagging preset test tool for previewing tagging preset dialogs."
 msgstr ""
+"Mở tagging cài sẵn công cụ kiểm tra để xem trước gắn thẻ hộp thoại cài đặt "
+"trước."
 
 msgid "You have to specify tagging preset sources in the preferences first."
-msgstr ""
+msgstr "Bạn phải xác định gắn thẻ nguồn cài sẵn trong các ưu đãi đầu tiên."
 
 msgid "Enter housenumbers or amount of segments"
-msgstr ""
+msgstr "Nhập housenumbers hoặc số lượng phân đoạn"
 
 msgid "Terrace a house"
-msgstr ""
+msgstr "Terrace một nhà"
 
 msgid "Interpolation"
-msgstr ""
+msgstr "Interpolation"
 
 msgid "Lowest Number"
-msgstr ""
+msgstr "Số Thấp nhất"
 
 msgid "Lowest housenumber of the terraced house"
-msgstr ""
+msgstr "Số nhà thấp nhất của ngôi nhà bậc thang"
 
 msgid "Highest Number"
-msgstr ""
+msgstr "Số cao nhất"
 
 msgid "List of Numbers"
-msgstr ""
+msgstr "Danh sách Numbers"
 
 msgid "add to existing associatedStreet relation"
-msgstr ""
+msgstr "thêm vào mối quan hệ associatedStreet hiện"
 
 msgid "create an associatedStreet relation"
-msgstr ""
+msgstr "tạo ra một mối quan hệ associatedStreet"
 
 msgid "keep outline way"
-msgstr ""
+msgstr "giữ cách cương"
 
 msgid "Street name: "
-msgstr ""
+msgstr "Tên Đường: "
 
 msgid "Even/Odd"
-msgstr ""
+msgstr "Thậm chí / Odd"
 
 msgid "Lowest number"
-msgstr ""
+msgstr "số thấp nhất"
 
 msgid "Highest number"
-msgstr ""
+msgstr "số cao nhất"
 
 msgid "Lowest housenumber cannot be higher than highest housenumber"
-msgstr ""
+msgstr "Số nhà thấp nhất không được cao hơn Số nhà cao nhất"
 
 msgid "Housenumbers do not match odd/even setting"
-msgstr ""
+msgstr "Housenumbers không phù hợp chẵn / lẻ thiết"
 
 msgid "Segment must be a number greater 1"
-msgstr ""
+msgstr "Segment phải là một số lớn hơn 1"
 
 msgid "{0} must be greater than 0"
-msgstr ""
+msgstr "{0} phải lớn hơn 0"
 
 msgid "{0} is not a number"
-msgstr ""
+msgstr "{0} không phải là một con số"
 
 msgid "Reverse a terrace"
-msgstr ""
+msgstr "Reverse sân"
 
 msgid "Reverses house numbers on a terrace."
-msgstr ""
+msgstr "cá ngược số nhà trên sân."
 
 msgid "Reverse a Terrace"
-msgstr ""
+msgstr "Đảo ngược một Terrace"
 
 msgid "Cannot reverse!"
-msgstr ""
+msgstr "không thể đảo ngược!"
 
 msgid "Reverse Terrace"
-msgstr ""
+msgstr "Xếp Terrace"
 
 msgid "Terrace a building"
-msgstr ""
+msgstr "Terrace một tòa nhà"
 
 msgid "Creates individual buildings from a long building."
-msgstr ""
+msgstr "Tạo ra các tòa nhà riêng lẻ từ một tòa nhà dài."
 
 msgid "Invalid selection"
-msgstr ""
+msgstr "lựa chọn không hợp lệ"
 
 msgid ""
 "Select a single, closed way of at least four nodes. (Optionally you can also "
 "select a street for the addr:street tag and a node to mark the start of "
 "numbering.)"
 msgstr ""
+"Chọn một cách khép kín duy nhất của ít nhất bốn nút. (Tuỳ chọn bạn cũng có "
+"thểChọn một con đường cho addr: tag đường phố và một nút để đánh dấu sự khởi "
+"đầu củaĐánh số.)"
 
 msgid "Terrace"
-msgstr ""
+msgstr "Terrace"
 
 msgid "Browse"
-msgstr ""
+msgstr "Browse"
 
 msgid "Browse map with left button"
-msgstr ""
+msgstr "Duyệt bản đồ bằng nút trái"
 
 msgid "Merge objects nodes"
-msgstr ""
+msgstr "Hợp nhất các đối tượng hạch"
 
 msgid "Tracer"
-msgstr ""
+msgstr "Tracer"
 
 msgid "Tracer."
-msgstr ""
+msgstr "Tracer."
 
 msgid "Tracer building"
-msgstr ""
+msgstr "xây dựng Tracer"
 
 msgid "Tracer2"
-msgstr ""
+msgstr "Tracer2"
 
 msgid "Tracer2."
-msgstr ""
+msgstr "Tracer2."
 
 msgid "Change tag {0} to {1}"
-msgstr ""
+msgstr "Thay đổi tag {0} đến {1}"
 
 msgid ""
 "The Tracer2Server version isn''t compatible with this plugin. Please "
 "download version {0} from\n"
 "{1}."
 msgstr ""
+"Phiên bản Tracer2Server isn''t tương thích với các plugin này. HãyDownload "
+"phiên bản {0} \n"
+"{1}."
 
 msgid ""
 "New version of Tracer2Server is available. For best results please upgrade "
 "to version {0}."
 msgstr ""
+"Phiên bản mới của Tracer2Server có sẵn. Để có kết quả tốt nhất hãy nâng "
+"cấpPhiên bản {0}."
 
 msgid "No set of parameter is active!"
-msgstr ""
+msgstr "Không có thiết lập các tham số là tích cực!"
 
 msgid "Select parameter"
-msgstr ""
+msgstr "Chọn tham số"
 
 msgid "Tracer2: add a way with {0} points"
-msgstr ""
+msgstr "Tracer2: thêm một cách với {0} điểm"
 
 msgid "Tracer2: modify way to {0} points"
-msgstr ""
+msgstr "Tracer2: thay đổi cách {0} điểm"
 
 msgid "Tracer2 error"
-msgstr ""
+msgstr "Tracer2 lỗi"
 
 msgid "Parameter for server request"
-msgstr ""
-
-msgid "Tile size:"
-msgstr ""
+msgstr "Thông số cho yêu cầu máy chủ"
 
 msgid "Resolution:"
-msgstr ""
+msgstr "Độ phân giải:"
 
 msgid "Mode:"
-msgstr ""
+msgstr "Mode:"
 
 msgid "Threshold:"
-msgstr ""
+msgstr "Threshold:"
 
 msgid "Points per circle:"
-msgstr ""
+msgstr "Số điểm mỗi vòng tròn:"
 
 msgid "Tag:"
-msgstr ""
+msgstr "Tag:"
 
 msgid "Preferred values:"
-msgstr ""
+msgstr "giá trị ưa thích:"
 
 msgid "Delete parameter \"{0}\"?"
-msgstr ""
+msgstr "Xóa tham số \" {0} \"?"
 
 msgid "Add new"
-msgstr ""
+msgstr "Thêm mới"
 
 msgid "Add predefined"
-msgstr ""
+msgstr "Thêm được xác định trước"
 
 msgid "Select predefined parameter"
-msgstr ""
+msgstr "Chọn tham số được xác định trước"
 
 msgid "Modify list of parameter for server request."
-msgstr ""
+msgstr "Sửa đổi danh sách các tham số cho yêu cầu máy chủ."
 
 msgid "Parameter:"
-msgstr ""
+msgstr "Thông số:"
 
 msgid ""
 "Tracer2Server isn''t running. Please start the Server.\n"
 "If you don''t have the server, please download it from\n"
 "{0}."
 msgstr ""
+"Tracer2Server isn''t chạy. Hãy bắt đầu lại Server. \n"
+"Nếu bạn don''t có máy chủ, hãy tải nó từ \n"
+"{0}"
 
 msgid "Tracer2Server hasn''t found anything."
-msgstr ""
+msgstr "Tracer2Server hasn''t tìm thấy bất cứ điều gì."
 
 msgid "Tracer2Server has detected an error."
-msgstr ""
+msgstr "Tracer2Server đã phát hiện một lỗi."
 
 msgid "GPG"
-msgstr ""
+msgstr "GPG"
 
 msgid "Export sigs..."
-msgstr ""
+msgstr "Xuất sigs ..."
 
 msgid "Export all signatures to XML file."
-msgstr ""
+msgstr "Xuất tất cả các chữ ký vào tập tin XML."
 
 msgid "Export sigs to XML..."
-msgstr ""
+msgstr "Xuất sigs để XML ..."
 
 msgid "Save Signatures file"
-msgstr ""
+msgstr "Lưu chữ ký tập tin"
 
 msgid ""
 "Get all referenced but not actually present OSM objects from OSM server."
 msgstr ""
+"Nhận được tất cả các tham chiếu nhưng không phải đối tượng OSM thực hiện từ "
+"máy chủ OSM."
 
 msgid "Download referenced osm objects..."
-msgstr ""
+msgstr "Tải về tham chiếu đối tượng OSM ..."
 
 msgid "{0} Signatures loaded. All referenced OSM objects found."
 msgstr ""
+"{0} Signatures nạp. Tất cả các đối tượng tham chiếu OSM được tìm thấy."
 
 msgid ""
 "{0} of {1} OSM objects are referenced but not there.\n"
 "Do you want to load them from OSM-Server?"
 msgstr ""
+"{0} {1} đối tượng OSM được tham chiếu nhưng không có. \n"
+"Bạn có muốn tải chúng từ OSM-Server?"
 
 msgid "Load objects from server"
-msgstr ""
+msgstr "đối tượng Load from server"
 
 msgid "Download signed data"
-msgstr ""
+msgstr "Download ký dữ liệu"
 
 msgid "Warning: Ignoring exception because task was canceled. Exception: {0}"
 msgstr ""
+": Exception Bỏ qua ngoại lệ bởi vì nhiệm vụ đã bị hủy bỏ: Cảnh báo. {0}"
 
 msgid ""
 "Generating new Keypair.\n"
 "Collecting randomness..."
 msgstr ""
+"Tạo cặp khóa mới. \n"
+"Thu thập ngẫu nhiên ..."
 
 msgid "UID"
-msgstr ""
+msgstr "UID"
 
 msgid "KeyID"
-msgstr ""
+msgstr "KeyID"
 
 msgid "OSM-Info"
-msgstr ""
+msgstr "OSM-Info"
 
 msgid "Signed"
-msgstr ""
+msgstr "Signed"
 
 msgid "Unknown"
-msgstr ""
+msgstr "Không biết"
 
 msgid "Object signatures"
-msgstr ""
+msgstr "chữ ký Object"
 
 msgid "Open object signing window."
-msgstr ""
+msgstr "Mở đối tượng cửa sổ ký tên."
 
 msgid "Check"
-msgstr ""
+msgstr "Kiểm tra"
 
 msgid "Check all available signatures for selected object."
-msgstr ""
+msgstr "Kiểm tra tất cả các chữ ký có sẵn cho đối tượng được chọn."
 
 msgid "Sign"
-msgstr ""
+msgstr "Sign"
 
 msgid "Digital sign selected Tags, if you believe they are correct."
-msgstr ""
+msgstr "dấu chọn khóa kỹ thuật số, nếu bạn tin rằng họ là chính xác."
 
 msgid "Show all available signatures for selected attribute."
-msgstr ""
+msgstr "Hiển thị tất cả các chữ ký có sẵn cho thuộc tính lựa chọn."
 
 msgid "Show deleted tags and notes if they were signed before"
-msgstr ""
+msgstr "Show xóa thẻ và ghi chú nếu họ đã được ký kết trước khi"
 
 msgid ""
 "Use default (and maybe existing) GnuPG directory ({0}) to store new keys and "
 "configs."
 msgstr ""
+"Sử dụng mặc định (và có thể tồn tại) GnuPG thư mục ({0}) để lưu trữ các khóa "
+"mới vàConfigs."
 
 msgid "Use separate GnuPG directory ({0}) to store new keys and configs."
 msgstr ""
+"Sử dụng thư mục riêng biệt GnuPG ({0}) để lưu trữ các khóa mới và configs."
 
 msgid "Trust OSM Settings"
-msgstr ""
+msgstr "Trust Cài đặt OSM"
 
 msgid "Change GPG and privacy settings of the trustosm plugin."
-msgstr ""
+msgstr "Thay đổi GPG và bảo mật các thiết lập của các plugin trustosm."
 
 msgid "Use separate GnuPG configuration directory?"
-msgstr ""
+msgstr "Sử dụng riêng thư mục cấu hình GnuPG?"
 
 msgid "GnuPG"
-msgstr ""
+msgstr "GnuPG"
 
 msgid "Dialog"
-msgstr ""
+msgstr "Dialog"
 
 msgid "Signed key value pair was: {0}={1}"
-msgstr ""
+msgstr "Signed cặp giá trị quan trọng là: {0} = {1}"
 
 msgid "{0} Signatures found."
-msgstr ""
+msgstr "{0} Signatures được tìm thấy."
 
 msgid "Signature Info"
-msgstr ""
+msgstr "Chữ ký Info"
 
 msgid "Sorry, there are no Signatures for the selected Node."
-msgstr ""
+msgstr "Xin lỗi, không có chữ ký cho các Node được chọn."
 
 msgid "No Signature found"
-msgstr ""
+msgstr "Không có Chữ ký tìm thấy"
 
 msgid ""
 "Selected node was:\n"
 "{0}"
 msgstr ""
+"Nút chọn đã: \n"
+"{0}"
 
 msgid "Sorry, there are no Signatures for the selected Attribute."
-msgstr ""
+msgstr "Xin lỗi, không có chữ ký cho các thuộc tính lựa chọn."
 
 msgid ""
 "Selected key value pair was:\n"
 "{0}={1}"
 msgstr ""
+"Chọn cặp giá trị quan trọng là: \n"
+"{0} = {1}"
 
 msgid "Sorry, there are no Signatures for the selected Segment."
-msgstr ""
+msgstr "Xin lỗi, không có chữ ký cho các Segment lựa chọn."
 
 msgid "Selected WaySegment was:"
-msgstr ""
+msgstr "chọn WaySegment là:"
 
 msgid "Signature Files"
-msgstr ""
+msgstr "Chữ ký Files"
 
 msgid "OSM Signature Files"
-msgstr ""
+msgstr "OSM Chữ ký Files"
 
 msgid "Only digits allowed in osmid: ''{0}''."
-msgstr ""
+msgstr "Chỉ có chữ số cho phép trong osmid: '' {0} ''."
 
 msgid "Could not parse OpenPGP message."
-msgstr ""
+msgstr "Không thể phân tích cú pháp nhắn OpenPGP."
 
 msgid "Prepare stuff..."
-msgstr ""
+msgstr "Chuẩn bị các công cụ ..."
 
 msgid "Parsing Signature data..."
-msgstr ""
+msgstr "Phân tích cú pháp Chữ ký dữ liệu ..."
 
 msgid "The Signature is broken!"
-msgstr ""
+msgstr "Chữ ký là hỏng!"
 
 msgid "Manipulation Warning"
-msgstr ""
+msgstr "Manipulation Cảnh báo"
 
 msgid "Select a signing key from your keyring-file:"
-msgstr ""
+msgstr "Chọn một phím ký từ keyring-file của bạn:"
 
 msgid "Don''t ask again for the key"
-msgstr ""
+msgstr "Don''t hỏi lại cho phím"
 
 msgid "Use a random key from this list"
-msgstr ""
+msgstr "Sử dụng một khóa ngẫu nhiên từ danh sách này"
 
 msgid "Create new Key"
-msgstr ""
+msgstr "Tạo Key mới"
 
 msgid "Select a Key to sign"
-msgstr ""
+msgstr "Chọn một Key ký"
 
 msgid ""
 "The object with the ID \"{0}\" ({1}) is newly created.\n"
 "You can not sign it, because the signature would lose the ID-Reference after "
 "uploading it to the OSM-server."
 msgstr ""
+"Các đối tượng với các ID \" {0} \"({1}) mới được tạo ra. \n"
+"Bạn không thể đăng nó, bởi vì các chữ ký sẽ mất ID-Reference sauTải lên nó "
+"vào OSM-server."
 
 msgid "Signing canceled!"
-msgstr ""
+msgstr "Việc ký hủy bỏ!"
 
 msgid "Please give a tolerance in meters"
-msgstr ""
+msgstr "Xin cho một sự khoan dung trong mét"
 
 msgid "Select as much as you like:"
-msgstr ""
+msgstr "Chọn nhiều như bạn thích:"
 
 msgid "Survey"
-msgstr ""
+msgstr "điều tra"
 
 msgid "Aerial Photography"
-msgstr ""
+msgstr "Aerial Photography"
 
 msgid "Web Recherche"
-msgstr ""
+msgstr "Web Recherche"
 
 msgid "Trusted persons told me"
-msgstr ""
+msgstr "Trusted người nói với tôi"
 
 msgid "Which source did you use?"
-msgstr ""
+msgstr "Những nguồn mà bạn đã sử dụng?"
 
 msgid "never"
-msgstr ""
+msgstr "không bao giờ"
 
 msgid "Primary user-ID: "
-msgstr ""
+msgstr "user-ID Tiểu học: "
 
 msgid "Key-ID: "
-msgstr ""
+msgstr "Key-ID: "
 
 msgid "Fingerprint: "
-msgstr ""
+msgstr "vân tay: "
 
 msgid "Algorithm: "
-msgstr ""
+msgstr "Thuật toán: "
 
 msgid "Strength in bit: "
-msgstr ""
+msgstr "Sức mạnh trong bit: "
 
 msgid "Creation date: "
-msgstr ""
+msgstr "Ngày sáng tạo: "
 
 msgid "Expiration date: "
-msgstr ""
+msgstr "Ngày hết hạn: "
 
 msgid "PGP-Key details"
-msgstr ""
+msgstr "PGP-Key chi tiết"
 
 msgid "User-ID:"
-msgstr ""
+msgstr "User-ID:"
 
 msgid "Select algorithm:"
-msgstr ""
+msgstr "Chọn thuật toán:"
 
 msgid "Choose Bitlength (Strength):"
-msgstr ""
+msgstr "Chọn Bitlength (Strength):"
 
 msgid "Encryption algorithm to protect private key:"
-msgstr ""
+msgstr "Thuật toán mã hóa để bảo vệ khóa riêng:"
 
 msgid "Choose an expiry date for the key:"
-msgstr ""
+msgstr "Chọn một ngày hết hạn cho các phím:"
 
 msgid "Create a new signing key"
-msgstr ""
+msgstr "Tạo một key bản hợp đồng mới"
 
 msgid "No such lane."
-msgstr ""
+msgstr "Không lane như vậy."
 
 msgid ""
 "<html>The number of lanes is not specified for one or more roads; please add "
 "missing lanes tags.</html>"
 msgstr ""
+"<Html> Các số làn đường không được chỉ định cho một hoặc nhiều đường; hãy "
+"thêmThiếu làn tags. </ Html>"
 
 msgid ""
 "<html>An error occurred while constructing the model. Please run the "
 "validator to make sure the data is consistent.<br><br>Error: {0}</html>"
 msgstr ""
+"<Html> Một lỗi xảy ra trong khi xây dựng mô hình. Hãy chạyValidator để đảm "
+"bảo các dữ liệu phù hợp <br> Lỗi:. {0} </ html>"
 
 msgid "Edit turn relations and lane lengths for selected node."
-msgstr ""
+msgstr "Edit quan hệ lần lượt, và độ dài đường dành cho nút lựa chọn."
 
 msgid "Validate turn- and lane-length-relations for consistency."
-msgstr ""
+msgstr "Xác nhận turn- và lane dài quan hệ cho nhất quán."
 
 msgid "Turn Lanes"
-msgstr ""
+msgstr "Bật Lanes"
 
 msgid "Edit turn lanes"
-msgstr ""
+msgstr "làn Sửa lần lượt"
 
 msgid "Quick-Fix"
-msgstr ""
+msgstr "Quick-Fix"
 
 msgid "Revalidate all turnlanes-relations."
-msgstr ""
+msgstr "lệ lại tất cả turnlanes-quan hệ."
 
 msgid "Automatically fixes the issue."
-msgstr ""
+msgstr "Tự động sửa chữa vấn đề."
 
 msgid "Selects the offending relation."
-msgstr ""
+msgstr "Chọn liên quan vi phạm."
 
 msgid "Add turn"
-msgstr ""
+msgstr "Thêm lần lượt"
 
 msgid "Delete lane."
-msgstr ""
+msgstr "Xóa làn đường."
 
 msgid "Delete turn."
-msgstr ""
+msgstr "Xóa lượt."
 
 msgid "{0} lanes are not referenced in any turn-relation."
-msgstr ""
+msgstr "{0} làn xe không được tham chiếu trong bất cứ lần lượt quan hệ."
 
 msgid "Put the ways in order."
-msgstr ""
+msgstr "Đặt những cách trật tự."
 
 msgid "Relation references non-existent (regular) lane {0}"
-msgstr ""
+msgstr "tài liệu tham khảo quan hệ không tồn tại (thường xuyên) lane {0}"
 
 msgid "Relation references non-existent extra lane {0}"
-msgstr ""
+msgstr "tài liệu tham khảo quan hệ không tồn tại thêm làn {0}"
 
 msgid "Integer list \"{0}\" contains unexpected values."
-msgstr ""
+msgstr "Integer danh sách \" {0} \"chứa giá trị bất ngờ."
 
 msgid "Create/Edit turn restriction..."
-msgstr ""
+msgstr "Tạo / Chỉnh sửa hạn chế lần lượt ..."
 
 msgid "Create or edit a turn restriction."
-msgstr ""
+msgstr "Tạo hoặc chỉnh sửa một hạn chế lượt."
 
 msgid ""
 "In the following table you can edit the <strong>raw tags</strong> of the OSM "
 "relation representing this turn restriction."
 msgstr ""
+"Trong bảng sau đây bạn có thể chỉnh sửa các <strong> tags liệu </ strong> "
+"của OSMQuan hệ đại diện hạn chế sự thay đổi này."
 
 msgid ""
 "In the following table you can edit the <strong>raw members</strong> of the "
 "OSM relation representing this turn restriction."
 msgstr ""
+"Trong bảng sau đây bạn có thể chỉnh sửa các <strong> thành viên liệu </ "
+"strong> củaQuan hệ OSM đại diện hạn chế sự thay đổi này."
 
 msgid "Type:"
-msgstr ""
+msgstr "Type:"
 
 msgid "From:"
-msgstr ""
+msgstr "From:"
 
 msgid "To:"
-msgstr ""
+msgstr "To:"
 
 msgid "Vias:"
-msgstr ""
+msgstr "Vias:"
 
 msgid "Copy to the clipboard"
-msgstr ""
+msgstr "Sao chép vào clipboard"
 
 msgid "Cannot find object with id ''{0}'' in layer ''{1}''"
-msgstr ""
+msgstr "Không thể tìm thấy đối tượng với id '' {0} '' trong lớp '' {1} ''"
 
 msgid ""
 "Cannot add object ''{0}'' as relation member because it is deleted or "
 "invisible in layer ''{1}''"
 msgstr ""
+"Không thể thêm đối tượng '' {0} '' là thành viên quan hệ bởi vì nó sẽ bị xóa "
+"hoặcVô hình trong lớp '' {1} ''"
 
 msgid "Clear the selected roles or delete the selected members"
-msgstr ""
+msgstr "Xóa các vai trò được lựa chọn hoặc xóa các thành viên được lựa chọn"
 
 msgid "Insert new relation members from object in the clipboard"
-msgstr ""
+msgstr "Chèn các thành viên liên quan mới từ các đối tượng trong clipboard"
 
 msgid "Move the selected relation members down by one position"
-msgstr ""
+msgstr "Di chuyển các thành viên liên quan chọn xuống một vị trí"
 
 msgid "Move the selected relation members up by one position"
-msgstr ""
+msgstr "Di chuyển các thành viên liên quan được chọn lên một vị trí"
 
 msgid "Edit basic attributes of a turn restriction"
-msgstr ""
+msgstr "Chỉnh sửa các thuộc tính cơ bản của một hạn chế biến"
 
 msgid "Edit the raw tags and members of this turn restriction"
-msgstr ""
+msgstr "Chỉnh sửa các thẻ liệu và các thành viên hạn chế sự thay đổi này"
 
 msgid "Errors/Warnings"
-msgstr ""
+msgstr "lỗi / cảnh báo"
 
 msgid "Show errors and warnings related to this turn restriction"
-msgstr ""
+msgstr "Hiển thị lỗi và cảnh báo liên quan đến hạn chế sự thay đổi này"
 
 msgid "Create a new turn restriction in layer ''{0}''"
-msgstr ""
+msgstr "Tạo một hạn chế biến mới trong lớp '' {0} ''"
 
 msgid "Edit a new turn restriction in layer ''{0}''"
-msgstr ""
+msgstr "Chỉnh sửa một hạn chế biến mới trong lớp '' {0} ''"
 
 msgid "Edit turn restriction ''{0}'' in layer ''{1}''"
-msgstr ""
+msgstr "Sửa lần lượt giới hạn '' {0} '' trong lớp '' {1} ''"
 
 msgid ""
 "There is still an unresolved error or warning identified for this turn "
@@ -28418,25 +30965,27 @@ msgid_plural ""
 "There are still {0} errors and/or warnings identified for this turn "
 "restriction. You are recommended to resolve these issues first."
 msgstr[0] ""
-msgstr[1] ""
+"Hiện vẫn còn là một lỗi chưa được giải quyết hoặc cảnh báo xác định cho sự "
+"thay đổi nàyHạn chế. Bạn được khuyến cáo để giải quyết vấn đề này lần đầu "
+"tiên."
 
 msgid "Do you want to save anyway?"
-msgstr ""
+msgstr "Bạn có muốn lưu không?"
 
 msgid "Yes, save anyway"
-msgstr ""
+msgstr "Có, lưu anyway"
 
 msgid "Save the turn restriction despite of errors and/or warnings"
-msgstr ""
+msgstr "Lưu hạn chế lần lượt mặc dù các lỗi và / hoặc cảnh báo"
 
 msgid "No, resolve issues first"
-msgstr ""
+msgstr "Không, giải quyết vấn đề đầu tiên"
 
 msgid "Cancel saving and start resolving pending issues first"
-msgstr ""
+msgstr "Hủy lưu và bắt đầu giải quyết các vấn đề cấp phát đầu tiên"
 
 msgid "Pending errors and warnings"
-msgstr ""
+msgstr "Đang chờ lỗi và cảnh báo"
 
 msgid ""
 "This turn restriction refers to an object which was deleted outside of this "
@@ -28445,239 +30994,263 @@ msgid_plural ""
 "This turn restriction refers to {0} objects which were deleted outside of "
 "this turn restriction editor:"
 msgstr[0] ""
-msgstr[1] ""
+"Hạn chế này lần lượt đề cập đến một đối tượng mà đã bị xóa ngoài nàyBiến "
+"biên tập hạn chế:"
 
 msgid ""
 "Updates to this turn restriction can''t be saved unless deleted members are "
 "removed.<br>How to you want to proceed?"
 msgstr ""
+"Cập nhật để hạn chế điều này lần lượt can''t được lưu trừ khi các thành viên "
+"đã xóa đượcGỡ bỏ. <br> Làm thế nào để bạn có muốn tiếp tục?"
 
 msgid "Remove deleted members and save"
-msgstr ""
+msgstr "Xóa thành viên đã bị xóa và tiết kiệm"
 
 msgid "Cancel and return to editor"
-msgstr ""
+msgstr "Hủy bỏ và trở về biên tập"
 
 msgid "Deleted members in turn restriction"
-msgstr ""
+msgstr "Các thành viên trong Deleted hạn chế biến"
 
 msgid "Create a conflict and close this turn restriction editor"
 msgstr ""
+"Tạo một cuộc xung đột và đóng trình soạn thảo hạn chế sự thay đổi này"
 
 msgid "Return to the turn restriction editor and resume editing"
-msgstr ""
+msgstr "Trở lại các biên tập viên hạn chế lượt và tiếp tục chỉnh sửa"
 
 msgid ""
 "<html>This turn restriction has been changed outside of the editor.<br>You "
 "cannot apply your changes and continue editing.<br><br>Do you want to create "
 "a conflict and close the editor?</html>"
 msgstr ""
+"<Html> turn này hạn chế đã được thay đổi bên ngoài của các biên tập viên. "
+"<br> YouKhông thể áp dụng các thay đổi của bạn và tiếp tục chỉnh sửa. <br> "
+"Bạn có muốn tạo raMột cuộc xung đột và đóng trình soạn thảo? </ Html>"
 
 msgid "Already participating in a conflict"
-msgstr ""
+msgstr "Đã tham gia vào một cuộc xung đột"
 
 msgid "Delete this turn restriction"
-msgstr ""
+msgstr "Xóa hạn chế sự thay đổi này"
 
 msgid "Select this turn restriction"
-msgstr ""
+msgstr "Chọn hạn chế sự thay đổi này"
 
 msgid "Activate the layer this turn restriction belongs to and zoom to it"
-msgstr ""
+msgstr "Kích hoạt lớp hạn chế điều này lần lượt thuộc về và phóng to để nó"
 
 msgid "{0} warning"
 msgid_plural "{0} warnings"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} cảnh báo"
 
 msgid "{0} error"
 msgid_plural "{0} errors"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} lỗi"
 
 msgid "no issues"
-msgstr ""
+msgstr "không có vấn đề"
 
 msgid "please select a way"
-msgstr ""
+msgstr "xin vui lòng chọn một cách"
 
 msgid "multiple objects with role ''{0}''"
-msgstr ""
+msgstr "nhiều đối tượng với vai trò '' {0} ''"
 
 msgid "Delete from turn restriction"
-msgstr ""
+msgstr "Xóa từ hạn chế biến"
 
 msgid "Accept the currently selected way"
-msgstr ""
+msgstr "Chấp nhận các cách chọn hiện tại"
 
 msgid "Paste from the clipboard"
-msgstr ""
+msgstr "Dán từ clipboard"
 
 msgid "Create new turn restriction"
-msgstr ""
+msgstr "Tạo hạn chế biến mới"
 
 msgid "Launch the turn restriction editor to create a new turn restriction"
 msgstr ""
+"Khởi động trình soạn thảo hạn chế lần lượt để tạo ra một hạn chế biến mới"
 
 msgid "No Right Turn"
-msgstr ""
+msgstr "Không Bật Right"
 
 msgid "No Left Turn"
-msgstr ""
+msgstr "Không Rẽ trái"
 
 msgid "No U-Turn"
-msgstr ""
+msgstr "No U-Turn"
 
 msgid "No Straight On"
-msgstr ""
+msgstr "Không Straight On"
 
 msgid "Only Right Turn"
-msgstr ""
+msgstr "Chỉ Right Turn"
 
 msgid "Only Left Turn"
-msgstr ""
+msgstr "Chỉ còn lại Turn"
 
 msgid "Only Straight On"
-msgstr ""
+msgstr "Chỉ Straight On"
 
 msgid "Warning: failed to load icon for turn restriction type ''{0}''"
 msgstr ""
+"Cảnh báo: không thể tải biểu tượng cho loại hạn chế lần lượt '' {0} ''"
 
 msgid "please select a turn restriction type"
-msgstr ""
+msgstr "hãy chọn một loại hạn chế biến"
 
 msgid ""
 "Select the vehicle types this turn restriction is <strong>not</strong> "
 "applicable for."
 msgstr ""
+"Chọn các kiểu xe hạn chế sự thay đổi này là <strong> không </ strong>Áp dụng "
+"cho."
 
 msgid "Public Service Vehicles"
-msgstr ""
+msgstr "Dịch vụ công cộng Phương tiện đi lại"
 
 msgid "Public service vehicles like buses, tramways, etc."
-msgstr ""
+msgstr "xe dịch vụ công cộng như xe buýt, tàu điện, vv"
 
 msgid "Heavy Goods Vehicles"
-msgstr ""
+msgstr "Hàng Xe Hạng Nặng"
 
 msgid "Motorcars"
-msgstr ""
+msgstr "ôtô"
 
 msgid "Bicycles"
-msgstr ""
+msgstr "Xe đạp"
 
 msgid "Mopeds"
-msgstr ""
+msgstr "Xe đạp gắn máy"
 
 msgid "Use standard exceptions"
-msgstr ""
+msgstr "Sử dụng ngoại lệ tiêu chuẩn"
 
 msgid "Use non-standard exceptions"
-msgstr ""
+msgstr "Sử dụng ngoại lệ không chuẩn"
 
 msgid "Remove the currently selected vias"
-msgstr ""
+msgstr "Hủy bỏ các vias hiện đang được chọn"
 
 msgid "Move the selected vias down by one position"
-msgstr ""
+msgstr "Di chuyển các vias chọn xuống một vị trí"
 
 msgid "Move the selected vias up by one position"
-msgstr ""
+msgstr "Di chuyển các vias được chọn lên một vị trí"
 
 msgid "Copy the selected vias to the clipboard"
-msgstr ""
+msgstr "Sao chép vias chọn vào clipboard"
 
 msgid "Insert ''via'' objects from the clipboard"
-msgstr ""
+msgstr "Insert '' qua '' đối tượng từ clipboard"
 
 msgid ""
 "Failed to retrieve OSM object with id {0} from dataset {1}. Cannot add it as "
 "''via''."
 msgstr ""
+"Không thể lấy ra đối tượng OSM với id {0} từ tập dữ liệu {1}. Không thể thêm "
+"vào nó như là'' Qua ''."
 
 msgctxt "turnrestrictions"
 msgid "From:"
-msgstr ""
+msgstr "From:"
 
 msgctxt "turnrestriction"
 msgid "To:"
-msgstr ""
+msgstr "To:"
 
 msgid "no participating way with role ''from''"
-msgstr ""
+msgstr "không có cách nào với vai trò tham gia '' từ ''"
 
 msgid "no participating way with role ''to''"
-msgstr ""
+msgstr "không có cách nào tham gia với vai trò '' để ''"
 
 msgid "Only participating in selection"
-msgstr ""
+msgstr "Chỉ tham gia lựa chọn"
 
 msgid ""
 "<html>Select to display turn restrictions related to object in the current "
 "selection only.<br>Deselect to display all turn restrictions in the current "
 "data set.</html>"
 msgstr ""
+"<Html> Chọn để hiển thị hạn chế rẽ liên quan đến đối tượng trong hiện tạiLựa "
+"chọn duy nhất. <br> Deselect để hiển thị tất cả các hạn chế rẽ trong hiện "
+"tạiTập hợp dữ liệu. </ Html>"
 
 msgid "Turn Restrictions"
-msgstr ""
+msgstr "Bật hạn chế"
 
 msgid "Display and manage turn restrictions in the current data set"
-msgstr ""
+msgstr "Hiển thị và quản lý hạn chế rẽ trong tập dữ liệu hiện tại"
 
 msgid "Open an editor for the selected turn restriction"
-msgstr ""
+msgstr "Mở một biên tập viên cho các hạn chế lần lượt chọn"
 
 msgid "Delete the selected turn restriction"
-msgstr ""
+msgstr "Xóa các hạn chế lần lượt chọn"
 
 msgid "Create a new turn restriction"
-msgstr ""
+msgstr "Tạo một hạn chế biến mới"
 
 msgid "Set the current JOSM selection to the selected turn restrictions"
-msgstr ""
+msgstr "Thiết lập các lựa chọn JOSM hiện sự hạn chế lần lượt chọn"
 
 msgid "Select in current data layer"
-msgstr ""
+msgstr "Chọn trong lớp dữ liệu hiện tại"
 
 msgid "Zoom to the currently selected turn restrictions"
-msgstr ""
+msgstr "Zoom để hạn chế rẽ đang được chọn"
 
 msgid "An OSM plugin for editing turn restrictions."
-msgstr ""
+msgstr "Một Plugin OSM cho hạn chế chỉnh sửa lần lượt."
 
 msgid ""
 "Development of the turn restriction plugin was sponsored by <a "
 "href=\"http://www.skobbler.de\">skobbler GmbH</a>."
 msgstr ""
+"Phát triển các plugin hạn chế lần lượt được tài trợ bởi <aHref = \" http: "
+"//www.skobbler.de \"> skobbler GmbH </a>."
 
 msgid "Configure the preferences for the turnrestrictions plugin"
-msgstr ""
+msgstr "Cấu hình các ưu đãi đối với các plugin turnrestrictions"
 
 msgid "Sponsor"
-msgstr ""
+msgstr "tài trợ"
 
 msgid ""
 "The Basic Editor can optionally display the list of via-objects of a turn "
 "restriction. If enabled, one can edit them in the Basic editor too. If "
 "disabled, editing of via-objects is possible in the Advanced Editor only."
 msgstr ""
+"The Basic Editor có thể tùy chọn hiển thị danh sách các đối tượng qua một "
+"lượtHạn chế. Nếu được kích hoạt, người ta có thể chỉnh sửa chúng trong trình "
+"soạn thảo cơ bản quá. NếuVô hiệu hóa, chỉnh sửa các đối tượng qua là có thể "
+"có trong các biên tập nâng cao chỉ."
 
 msgid "Display and edit list of via-objects in the Basic Editor"
-msgstr ""
+msgstr "Hiển thị và chỉnh sửa danh sách qua các đối tượng trong Basic Editor"
 
 msgid "Road signs - Set A"
-msgstr ""
+msgstr "báo hiệu đường bộ - Set A"
 
 msgid "Road signs - Set B"
-msgstr ""
+msgstr "báo hiệu đường bộ - Set B"
 
 msgid "Please select the set of road sign icons to be used in the plugin."
 msgstr ""
+"Hãy chọn các thiết lập của các biểu tượng báo hiệu đường bộ sẽ được sử dụng "
+"trong các plugin."
 
 msgid ""
 "Warning: the preference with key ''{0}'' has an unsupported value ''{1}''. "
 "Assuming the default value ''set-a''."
 msgstr ""
+"Cảnh báo: những sở thích với phím '' {0} '' có một giá trị không được hỗ trợ "
+"'' {1} ''.Giả sử các giá trị mặc định '' set-một ''."
 
 msgid ""
 "This turn restriction uses the way <span class=\"object-name\">{0}</span> "
@@ -28685,34 +31258,43 @@ msgid ""
 "turn restriction, the way with role <tt>from</tt> should be different from "
 "the way with role <tt>to</tt>, though."
 msgstr ""
+"Hạn chế này lần lượt sử dụng đường <span class = \" đối tượng tên \"> {0} </ "
+"span>Với vai trò <tt> từ </ tt> <strong> và </ strong> với vai trò <tt> để "
+"</ tt>. Trong mộtBiến hạn chế, cách với vai trò <tt> từ </ tt> nên khácCách "
+"với vai trò <tt> để </ tt>, mặc dù."
 
 msgid "Delete ''from''"
-msgstr ""
+msgstr "Delete '' từ ''"
 
 msgid "Removes the member with role ''from''"
-msgstr ""
+msgstr "Gỡ bỏ các thành viên với vai trò '' từ ''"
 
 msgid "Delete ''to''"
-msgstr ""
+msgstr "Delete '' để ''"
 
 msgid "Removes the member with role ''to''"
-msgstr ""
+msgstr "Gỡ bỏ các thành viên với vai trò '' để ''"
 
 msgid "Fix in editor"
-msgstr ""
+msgstr "Sửa chữa trong trình soạn thảo"
 
 msgid ""
 "Go to Basic Editor and manually choose members with roles ''from'' and ''to''"
 msgstr ""
+"Tới Basic Editor và tự lựa chọn các thành viên với vai trò '' từ '' và '' để "
+"''"
 
 msgid ""
 "This turn restriction uses a non-standard restriction type <tt>{0}</tt> for "
 "the tag key <tt>restriction</tt>. It is recommended to use standard values "
 "only. Please select one in the Basic editor."
 msgstr ""
+"Hạn chế này lần lượt sử dụng một loại hạn chế phi tiêu chuẩn <tt> {0} </ tt> "
+"choChìa khóa thẻ <tt> hạn chế </ tt>. Nó được khuyến cáo sử dụng các giá trị "
+"tiêu chuẩnMà thôi. Xin vui lòng chọn một trong các trình soạn thảo cơ bản."
 
 msgid "Go to Basic Editor and manually choose a turn restriction type"
-msgstr ""
+msgstr "Tới Basic Editor và tự chọn một loại hạn chế biến"
 
 msgid ""
 "The <strong>from</strong>-way <span class=\"object-name\">{0}</span> and the "
@@ -28721,83 +31303,101 @@ msgid ""
 "<strong>via</strong>-object.<br> It is recommended to set it as unique "
 "<strong>via</strong>-object."
 msgstr ""
+"Các <strong> từ </ strong> -way <span class = \" đối tượng tên \"> {0} </ "
+"span> và<Strong> </ strong> -way <span class = \" đối tượng tên \"> {1} </ "
+"span> cắt nhau tạiNút <span class = \" đối tượng tên \"> {2} </ span> nhưng "
+"nút Quest này là một<Strong> qua </ strong> -object. <br> Đó là đề nghị để "
+"thiết lập nó như là duy nhất<Strong> qua </ strong> -object."
 
 msgid "Set via-Object"
-msgstr ""
+msgstr "Đặt qua-Object"
 
 msgid ""
 "Replaces the currently configured via-objects with the node at the "
 "intersection"
-msgstr ""
+msgstr "Thay thế các cấu hình hiện qua các đối tượng với các nút tạiNgã tư"
 
 msgid "Go to Basic Editor and manually fix the list of via-objects"
-msgstr ""
+msgstr "Tới Basic Editor và tự sửa chữa các danh sách qua các đối tượng"
 
 msgid ""
 "A turn restriction must declare the type of restriction. Please select a "
 "type in the Basic Editor."
 msgstr ""
+"Một hạn chế lần lượt phải khai báo các loại hạn chế. Vui lòng chọn mộtLoại "
+"trong Basic Editor."
 
 msgid "A way with role <tt>from</tt> is required in a turn restriction."
 msgstr ""
+"Một cách với vai trò <tt> từ </ tt> là cần thiết trong một giới hạn lượt."
 
 msgid "A way with role <tt>to</tt> is required in a turn restriction."
 msgstr ""
+"Một cách với vai trò <tt> để </ tt> là cần thiết trong một giới hạn lượt."
 
 msgid "Please go to the Basic editor and manually choose a way."
-msgstr ""
+msgstr "Xin vui lòng đến biên tập cơ bản và tự chọn một cách."
 
 msgid "Add in editor"
-msgstr ""
+msgstr "Thêm vào editor"
 
 msgid "Add a way with role ''from''"
-msgstr ""
+msgstr "Thêm một cách với vai trò '' từ ''"
 
 msgid "Add a way with role ''to''"
-msgstr ""
+msgstr "Thêm một cách với vai trò '' để ''"
 
 msgid ""
 "The two ways participating in the turn restriction <strong>aren''t "
 "connected.</strong>"
 msgstr ""
+"Hai cách tham gia vào các hạn chế lượt <strong> aren''tKết nối. </ Strong>"
 
 msgid ""
 "Make sure you add one or more via objects (nodes or ways) to the turn "
 "restriction."
 msgstr ""
+"Hãy chắc chắn rằng bạn thêm một hoặc nhiều hơn thông qua các đối tượng (nút "
+"hoặc cách) để lần lượtHạn chế"
 
 msgid "Go to the Advanced Editor and add via objects"
-msgstr ""
+msgstr "Tới Editor chi tiết và thêm thông qua các đối tượng"
 
 msgid ""
 "A turn restriction requires exactly one way with role <tt>from</tt>. This "
 "turn restriction has {0} ways in this role. Please remove {1} of them."
 msgstr ""
+"Một hạn chế cũng đòi hỏi chính xác một cách với vai trò <tt> từ </ tt>. Điều "
+"nàyBiến hạn chế có {0} cách trong vai trò này. Hãy bỏ {1} của họ."
 
 msgid ""
 "A turn restriction requires exactly one way with role <tt>to</tt>. This turn "
 "restriction has {0} ways in this role. Please remove {1} of them."
 msgstr ""
+"Một hạn chế cũng đòi hỏi chính xác một cách với vai trò <tt> để </ tt>. Diễn "
+"biến nàyHạn chế có {0} cách trong vai trò này. Hãy bỏ {1} của họ."
 
 msgid "Go to the Advanced Editor and remove the members"
-msgstr ""
+msgstr "Tới Editor chi tiết và loại bỏ các thành viên"
 
 msgid ""
 "The tag <tt>except</tt> has the non-standard value <tt>{0}</tt>. It is "
 "recommended to use standard values for <tt>except</tt> only."
 msgstr ""
+"Các tag <tt> trừ </ tt> có giá trị không chuẩn <tt> {0} </ tt>. Nó làKhuyến "
+"khích sử dụng các giá trị tiêu chuẩn cho <tt> trừ </ tt> chỉ."
 
 msgid "Go to Basic Editor and select standard vehicle type based exceptions"
-msgstr ""
+msgstr "Tới Basic Editor và chọn loại xe tiêu chuẩn ngoại lệ dựa"
 
 msgid "The required tag <tt>{0}={1}</tt> is missing."
-msgstr ""
+msgstr "Thẻ yêu cầu <tt> {0} = {1} </ tt> là mất tích."
 
 msgid "Add missing tag"
-msgstr ""
+msgstr "Thêm thiếu tag"
 
 msgid "Add the missing tag {0}={1}"
-msgstr ""
+msgstr "Thêm thẻ mất tích {0} = {1}"
 
 msgid ""
 "The way <span class=\"object-name\">{0}</span> with role <tt>from</tt> and "
@@ -28805,221 +31405,246 @@ msgid ""
 "intersect at node <span class=\"object-name\">{2}</span>. <p> Both ways "
 "should be split at the intersecting node."
 msgstr ""
+"Cách <span class = \" đối tượng tên \"> {0} </ span> với vai trò <tt> từ </ "
+"tt> vàCách <span class = \" đối tượng tên \"> {1} </ span> với vai trò <tt> "
+"để </ tt>Giao nhau tại nút <span class = \" đối tượng tên \"> {2} </ span>. "
+"<P> Cả hai cáchNên được chia tại nút giao nhau."
 
 msgid ""
 "The way <span class=\"object-name\">{0}</span> with role <tt>{1}</tt> should "
 "be split at node <span class=\"object-name\">{2}</span> where it connects to "
 "way <span class=\"object-name\">{3}</span>."
 msgstr ""
+"Cách <span class = \" đối tượng tên \"> {0} </ span> với vai trò <tt> {1} </ "
+"tt> nênĐược chia tại nút <span class = \" đối tượng tên \"> {2} </ span> mà "
+"nó kết nối tớiCách <span class = \" đối tượng tên \"> {3} </ span>."
 
 msgid "Split now"
-msgstr ""
+msgstr "Split bây giờ"
 
 msgid "Split the ways"
-msgstr ""
+msgstr "Chia cách"
 
 msgid ""
 "This turn restriction uses the node <span class=\"object-name\">{0}</span> "
 "as member with role <tt>{1}</tt>."
 msgstr ""
+"Hạn chế này lần lượt sử dụng các nút <span class = \" đối tượng tên \"> {0} "
+"</ span>Như thành viên với vai trò <tt> {1} </ tt>."
 
 msgid ""
 "This turn restriction uses the relation <span class=\"object-"
 "name\">{0}</span> as member with role <tt>{1}</tt>."
 msgstr ""
+"Hạn chế này lần lượt sử dụng các mối quan hệ <span class = \" object- Name "
+"\"> {0} </ span> là thành viên với vai trò <tt> {1} </ tt>."
 
 msgid "A way is required instead."
-msgstr ""
+msgstr "Một cách là cần thiết để thay thế."
 
 msgid "Delete the member from the turn restriction"
-msgstr ""
+msgstr "Xóa thành viên khỏi những hạn chế biến"
 
 msgid "Change to the Basic Editor and select a way"
-msgstr ""
+msgstr "Thay đổi để các Basic Editor và chọn một cách"
 
 msgid "Undelete object..."
-msgstr ""
+msgstr "đối tượng Undelete ..."
 
 msgid "Undelete object by id"
-msgstr ""
+msgstr "đối tượng Undelete bởi id"
 
 msgid "Unable to undelete node {0}. Object has likely been redacted"
-msgstr ""
+msgstr "Không thể lấy lại nút {0}. Object đã có khả năng được redacted"
 
 msgid "Unable to undelete way {0}. Object has likely been redacted"
-msgstr ""
+msgstr "Không thể cách lấy lại {0}. Object đã có khả năng được redacted"
 
 msgid "Unable to undelete relation {0}. Object has likely been redacted"
 msgstr ""
+"Không thể lấy lại các mối quan hệ {0}. Object đã có khả năng được redacted"
 
 msgid "Undelete Object"
-msgstr ""
+msgstr "Object Undelete"
 
 msgid "Undelete object"
-msgstr ""
+msgstr "đối tượng Undelete"
 
 msgid ""
 "Enter the type and ID of the objects that should be undeleted, e.g., ''n1 "
 "w2''"
-msgstr ""
+msgstr "Nhập loại và ID của đối tượng mà nên được lấy lại, ví dụ, '' n1W2 ''"
 
 msgid "Select if the data should be added into a new layer"
-msgstr ""
+msgstr "Chọn nếu các dữ liệu cần được thêm vào một lớp mới"
 
 msgid "Start undeleting"
-msgstr ""
+msgstr "Bắt đầu khi phục hồi"
 
 msgid "Close dialog and cancel"
-msgstr ""
+msgstr "Đóng hộp thoại và hủy bỏ"
 
 msgid "Add nodes at intersections"
-msgstr ""
+msgstr "Thêm nút tại nút giao thông"
 
 msgid "Add missing nodes at intersections of selected ways."
-msgstr ""
+msgstr "Thêm thiếu các nút ở các nút giao thông của cách lựa chọn."
 
 msgid "Please select one or more ways with intersections of segments."
 msgstr ""
+"Hãy chọn một hoặc nhiều cách hơn với nút giao thông của các phân đoạn."
 
 msgid "Align Way Nodes"
-msgstr ""
+msgstr "Align Way Nodes"
 
 msgid "Align nodes in a way"
-msgstr ""
+msgstr "Căn nút trong một cách"
 
 msgid "The way with selected nodes can not be straightened."
-msgstr ""
+msgstr "chiều với các nút lựa chọn không thể đứng thẳng."
 
 msgid "Internal error: number of nodes is {0}."
-msgstr ""
+msgstr "Lỗi nội bộ: số nút là {0}."
 
 msgid "Extract node"
-msgstr ""
+msgstr "Extract nút"
 
 msgid "Extracts node from a way"
-msgstr ""
+msgstr "Trích xuất các nút từ một cách"
 
 msgid ""
 "This tool extracts node from its ways and requires single node to be "
 "selected."
 msgstr ""
+"Công cụ này chiết xuất từ ​​nút cách thức của mình và đòi hỏi nút duy nhất "
+"để đượcLựa chọn."
 
 msgid "Extract node from line"
-msgstr ""
+msgstr "Extract nút từ dòng"
 
 msgid "Paste Relations"
-msgstr ""
+msgstr "Dán Relations"
 
 msgid ""
 "Paste relation membership from objects in the buffer onto selected object(s)"
 msgstr ""
+"Paste mối quan hệ thành viên từ các đối tượng trong bộ đệm vào đối tượng "
+"được lựa chọn (s)"
 
 msgid "Split Object"
-msgstr ""
+msgstr "Split Object"
 
 msgid "Split an object at the selected nodes."
-msgstr ""
+msgstr "Tách một đối tượng tại các nút lựa chọn."
 
 msgid "The current selection cannot be used for splitting."
-msgstr "Lựa chọn hiện thời không thể dùng để cắt được"
+msgstr "Việc lựa chọn hiện tại không thể được sử dụng để tách."
 
 msgid "The selected way is not closed."
-msgstr ""
+msgstr "Cách chọn là không đóng cửa."
 
 msgid "The selected way does not contain the selected node."
 msgid_plural "The selected way does not contain all the selected nodes."
-msgstr[0] "Đường được chọn không chứa nốt được chọn"
+msgstr[0] "Cách lựa chọn không chứa các nút lựa chọn."
 
 msgid ""
 "The selected way is not a split way, please select split points or split way "
 "too."
 msgstr ""
+"Cách chọn không phải là một cách phân chia, xin vui lòng chọn điểm phân chia "
+"hoặc phân chia theo cáchQuá."
 
 msgid "The selected nodes can not be consecutive nodes in the object."
-msgstr ""
+msgstr "Các nút lựa chọn không thể hạch liên tiếp trong đối tượng."
 
 msgid "Split adjacent ways"
-msgstr ""
+msgstr "cách chia liền kề"
 
 msgid "Split adjacent ways on T-intersections"
-msgstr ""
+msgstr "cách chia liền kề trên T-nút giao thông"
 
 msgid ""
 "There are several ways containing one of the splitting nodes. Select ways "
 "participating in this operation."
 msgstr ""
+"Có một số cách có chứa một trong các nút chia tách. Chọn cáchTham gia vào "
+"hoạt động này."
 
 msgid "Symmetry"
-msgstr ""
+msgstr "đối xứng"
 
 msgid ""
 "Please select at least two nodes for symmetry axis and something else to "
 "mirror."
 msgstr ""
+"Hãy chọn ít nhất hai nút cho trục đối xứng và một cái gì đó khác đểGương"
 
 msgid "Copy tags from previous selection"
-msgstr ""
+msgstr "Sao chép thẻ từ lựa chọn trước"
 
 msgid "Pastes tags of previously selected object(s)"
-msgstr ""
+msgstr "Dán thẻ của đối tượng đã chọn trước đó (s)"
 
 msgid "Add Source Tag"
-msgstr ""
+msgstr "Add Source Tag"
 
 msgid "Add remembered source tag"
-msgstr ""
+msgstr "Thêm thẻ nhớ nguồn"
 
 msgid "UnGlue Relation"
-msgstr ""
+msgstr "Quan hệ UnGlue"
 
 msgid ""
 "Duplicate nodes, ways and relations that are used by multiple relations."
 msgstr ""
+"Bản sao các nút, cách thức và các mối quan hệ được sử dụng bởi nhiều mối "
+"quan hệ."
 
 msgid "UnGlue Relations"
-msgstr ""
+msgstr "UnGlue Relations"
 
 msgid "Unglued Relations"
-msgstr ""
+msgstr "unglued Relations"
 
 msgid "Change relation member for {0} {1}"
-msgstr ""
+msgstr "thành viên Thay đổi liên quan cho {0} {1}"
 
 msgid "Circle arc"
-msgstr ""
+msgstr "Circle arc"
 
 msgid "Create a circle arc"
-msgstr ""
+msgstr "Tạo một vòng cung vòng tròn"
 
 msgid "Select custom URL"
-msgstr ""
+msgstr "Chọn URL tùy chỉnh"
 
 msgid "Please select one of custom URLs (configured in Preferences)"
-msgstr ""
+msgstr "Hãy chọn một trong các URL tuỳ chỉnh (cấu hình trong Preferences)"
 
 msgid "Ask every time"
-msgstr ""
+msgstr "Ask every time"
 
 msgid "Configure custom URL"
-msgstr ""
+msgstr "Cấu hình URL tùy chỉnh"
 
 msgid "Open custom URL"
-msgstr ""
+msgstr "URL tùy chỉnh Open"
 
 msgid "Opens specified URL browser"
-msgstr ""
+msgstr "Mở trình duyệt URL được chỉ định"
 
 msgid "Utilsplugin2 settings"
-msgstr ""
+msgstr "Utilsplugin2 settings"
 
 msgid "Here you can change some preferences of Utilsplugin2 functions"
 msgstr ""
+"Ở đây bạn có thể thay đổi một số sở thích của các chức năng Utilsplugin2"
 
 msgid "Save to file"
-msgstr ""
+msgstr "Save to file"
 
 msgid "Load from file"
-msgstr ""
+msgstr "Load from file"
 
 msgid ""
 "Please edit custom URLs and select one row to use with the tool<br/> "
@@ -29030,15 +31655,22 @@ msgid ""
 "latitude/longitude <br/> Your can manually load settings from file "
 "<b>customurl.txt</b> in JOSM folder"
 msgstr ""
+"Please edit custom URLs and select one row to use with the tool<br/> "
+"<b>{key}</b> is replaced with the tag value<br/> "
+"<b>{#id}</b> is replaced with the element ID<br/> "
+"<b>{#type}</b> is replaced with \"node\",\"way\" or \"relation\" "
+"<br/> <b>{#lat} , {#lon}</b> is replaced with map center "
+"latitude/longitude <br/> Your can manually load settings from file "
+"<b>customurl.txt</b> in JOSM folder"
 
 msgid "Custom URL configuration"
-msgstr ""
+msgstr "cấu hình URL Custom"
 
 msgid "Lat Lon tool"
-msgstr ""
+msgstr "Lạt Lon công cụ"
 
 msgid "Create geometry by entering lat lon coordinates for it."
-msgstr ""
+msgstr "Tạo hình học bằng cách nhập lat lon tọa độ cho nó."
 
 msgid ""
 "Enter the coordinates for the new nodes, one for each line.<br/>If you enter "
@@ -29063,370 +31695,418 @@ msgid ""
 "24.5</li><li>-49 29.4 N -19 24.5 W</li></ul><li>48 deg 42' 52.13\" N, 21 "
 "deg 11' 47.60\" E</li></ul>"
 msgstr ""
+"Enter the coordinates for the new nodes, one for each line.<br/>If you enter "
+"two lines with the same coordinates there will be generated duplicate "
+"nodes.<br/>You can separate longitude and latitude with space, comma or "
+"semicolon.<br/>Use positive numbers or N, E characters to indicate North or "
+"East cardinal direction.<br/>For South and West cardinal directions you can "
+"use either negative numbers or S, W characters.<br/>Coordinate value can be "
+"in one of three "
+"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
+"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
+"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
+"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional.<br/><br/>Some examples:<ul><li>49.29918° "
+"19.24788°</li><li>N 49.29918 E 19.24788</li><li>W 49°29.918' S "
+"19°24.788'</li><li>N 49°29'04" E "
+"19°24'43"</li><li>49.29918 N, 19.24788 "
+"E</li><li>49°29'21" N 19°24'38" E</li><li>49 29 "
+"51, 19 24 18</li><li>49 29, 19 24</li><li>E 49 29, N 19 24</li><li>49° "
+"29; 19° 24</li><li>N 49° 29, W 19° 24</li><li>49° 29.5 S, "
+"19° 24.6 E</li><li>N 49 29.918 E 19 15.88</li><li>49 29.4 19 "
+"24.5</li><li>-49 29.4 N -19 24.5 W</li></ul><li>48 deg 42' 52.13\" N, 21 "
+"deg 11' 47.60\" E</li></ul>"
 
 msgid "Tag multiple objects [alpha]"
-msgstr ""
+msgstr "Tag nhiều đối tượng [alpha]"
 
 msgid "Edit tags of object list in table"
-msgstr ""
+msgstr "Chỉnh sửa thẻ của danh sách đối tượng trong bảng"
 
 msgid "Tag multiple objects"
-msgstr ""
+msgstr "Tag nhiều đối tượng"
 
 msgid "Sync with JOSM selection"
-msgstr ""
+msgstr "Sync với lựa chọn JOSM"
 
 msgid "Zoom to objects"
-msgstr ""
+msgstr "Zoom vào các đối tượng"
 
 msgid "Remove tag"
-msgstr ""
+msgstr "Xóa thẻ"
 
 msgid "Delete tags from multiple objects"
-msgstr ""
+msgstr "Xóa thẻ từ nhiều đối tượng"
 
 msgid "Duplicate tags from the first"
-msgstr ""
+msgstr "thẻ trùng lặp từ đầu"
 
 msgid "Set tags for multiple objects"
-msgstr ""
+msgstr "Đặt thẻ cho nhiều đối tượng"
 
 msgid "Delete from history"
-msgstr ""
+msgstr "Xóa lịch sử"
 
 msgid "Find primitives with these tags"
-msgstr ""
+msgstr "Tìm nguyên thủy với những tag"
 
 msgid "Multitag Background: highlight"
-msgstr ""
+msgstr "Multitag Background: nổi bật"
 
 msgid "Replace Geometry"
-msgstr ""
+msgstr "Thay thế Geometry"
 
 msgid "Replace geometry of selected object with a new one"
-msgstr ""
+msgstr "Thay thế hình học của đối tượng được lựa chọn với một cái mới"
 
 msgid ""
 "This tool replaces geometry of one object with another, and so requires "
 "exactly two objects to be selected."
 msgstr ""
+"Công cụ này thay thế hình học của một đối tượng với nhau, và do đó đòi "
+"hỏiChính xác hai đối tượng được lựa chọn."
 
 msgid ""
 "This tool can only replace a node, upgrade a node to a way or a "
 "multipolygon, or replace a way with a way."
 msgstr ""
+"Công cụ này chỉ có thể thay thế một nút, nâng cấp một nút đến một cách hay "
+"mộtMultipolygon, hoặc thay thế một cách có một cách."
 
 msgid "Node belongs to way(s), cannot replace."
-msgstr ""
+msgstr "Node thuộc về cách (s), không thể thay thế."
 
 msgid "Replace geometry for node {0}"
-msgstr ""
+msgstr "Thay thế hình học cho nút {0}"
 
 msgid "Relation is not a multipolygon, cannot be used as a replacement."
 msgstr ""
+"Mối quan hệ không phải là một multipolygon, không thể được sử dụng như là "
+"một thay thế."
 
 msgid ""
 "Please select one way that exists in the database and one new way with "
 "correct geometry."
 msgstr ""
+"Hãy chọn một trong những cách tồn tại trong cơ sở dữ liệu và một trong những "
+"cách mới vớiHình học chính xác."
 
 msgid "The ways must be entirely within the downloaded area."
-msgstr ""
+msgstr "Những cách phải hoàn toàn nằm trong khu vực được tải về."
 
 msgid ""
 "The way to be replaced cannot have any nodes with properties or relation "
 "memberships unless they belong to both ways."
 msgstr ""
+"Cách để được thay thế không thể có bất kỳ nút với tài sản hoặc mối quan "
+"hệThành viên trừ khi họ thuộc về cả hai cách."
 
 msgid "Exceeded iteration limit for robust method, using simpler method."
 msgstr ""
+"Vượt quá giới hạn cho phép lặp phương pháp mạnh mẽ, sử dụng phương pháp đơn "
+"giản."
 
 msgid "Replace geometry for way {0}"
-msgstr ""
+msgstr "Thay thế hình học cho cách {0}"
 
 msgid "Range of child primitives count"
-msgstr ""
+msgstr "Phạm vi của đứa trẻ nguyên thủy đếm"
 
 msgid "Range of parent primitives count"
-msgstr ""
+msgstr "Range của nguyên thủy mẹ đếm"
 
 msgid "Range of referencing relation count"
-msgstr ""
+msgstr "Phạm vi của các mối quan hệ tham chiếu đếm"
 
 msgid "Range of attached ways count"
-msgstr ""
+msgstr "Range cách gắn đếm"
 
 msgid "Adjacent nodes"
-msgstr ""
+msgstr "nút liền kề"
 
 msgid "Select adjacent nodes"
-msgstr ""
+msgstr "Chọn nút liền kề"
 
 msgid "Adjacent ways"
-msgstr ""
+msgstr "cách liền kề"
 
 msgid "Adjacent ways will be selected. Nodes will be deselected."
-msgstr ""
+msgstr "cách liền kề sẽ được lựa chọn. Các nút sẽ không được chọn."
 
 msgid "All connected ways"
-msgstr ""
+msgstr "Tất cả những cách kết nối"
 
 msgid "Select all connected ways"
-msgstr ""
+msgstr "Chọn tất cả các cách kết nối"
 
 msgid "Intersecting ways"
-msgstr ""
+msgstr "giao nhau cách"
 
 msgid "Select intersecting ways"
-msgstr ""
+msgstr "Chọn cách giao nhau"
 
 msgid "Please select some ways to find connected and intersecting ways!"
-msgstr ""
+msgstr "Hãy chọn một số cách để tìm cách kết nối và giao nhau!"
 
 msgid "All intersecting ways"
-msgstr ""
+msgstr "Tất cả những cách giao nhau"
 
 msgid "Select all intersecting ways"
-msgstr ""
+msgstr "Chọn tất cả cách giao nhau"
 
 msgid "Please select some ways to find all connected and intersecting ways!"
-msgstr ""
+msgstr "Hãy chọn một số cách để tìm tất cả các cách kết nối và giao nhau!"
 
 msgid "Middle nodes"
-msgstr ""
+msgstr "nút Middle"
 
 msgid "Select middle nodes"
-msgstr ""
+msgstr "Chọn nút giữa"
 
 msgid "Please select two nodes connected by way!"
-msgstr ""
+msgstr "Hãy chọn hai nút kết nối bằng cách nào!"
 
 msgid "Too many ways are added: {0}!"
-msgstr ""
+msgstr "Quá nhiều cách được thêm vào: {0}"
 
 msgid "All inside [testing]"
-msgstr ""
+msgstr "Tất cả trong [thử nghiệm]"
 
 msgid "Select all inside selected polygons"
-msgstr ""
+msgstr "Chọn tất cả các đa giác bên trong được lựa chọn"
 
 msgid ""
 "Nothing found. Please select some closed ways or multipolygons to find all "
 "primitives inside them!"
 msgstr ""
+"Không tìm thấy gì. Hãy chọn một vài cách đóng hoặc multipolygons để tìm tất "
+"cảNguyên thủy bên trong chúng!"
 
 msgid "Area boundary [testing]"
-msgstr ""
+msgstr "Khu vực biên giới [thử nghiệm]"
 
 msgid "Select relation or all ways that forms area boundary"
-msgstr ""
+msgstr "Chọn liên quan hoặc tất cả những cách mà tạo thành ranh giới khu vực"
 
 msgid ""
 "Nothing found. Please select way that is a part of some polygon formed by "
 "connected ways"
 msgstr ""
+"Không tìm thấy gì. Hãy chọn cách đó là một phần của một số đa giác hình "
+"thành bởiCách kết nối"
 
 msgid "Select Highway"
-msgstr ""
+msgstr "Chọn lộ"
 
 msgid "Select highway for the name/ref given"
-msgstr ""
+msgstr "Chọn đường cao tốc cho tên / ref cho"
 
 msgid "Please select one or two ways for this action"
-msgstr ""
+msgstr "Hãy chọn một hoặc hai cách cho hành động này"
 
 msgid "Select last modified nodes"
-msgstr ""
+msgstr "Chọn nút biến đổi cuối cùng"
 
 msgid "Select last modified ways"
-msgstr ""
+msgstr "Chọn cách biến đổi cuối cùng"
 
 msgid "Select Way Nodes"
-msgstr ""
+msgstr "Chọn Way Nodes"
 
 msgid "Select all nodes of a selected way."
-msgstr ""
+msgstr "Chọn tất cả các nút của một cách lựa chọn."
 
 msgid "Undo selection"
-msgstr ""
+msgstr "Hoàn tác lựa chọn"
 
 msgid "Reselect last added object or selection form history"
-msgstr ""
+msgstr "Chọn lại thêm lịch sử đối tượng hoặc lựa chọn hình thức cuối cùng"
 
 msgid "Unselect nodes"
-msgstr ""
+msgstr "nút Bỏ chọn"
 
 msgid "Removes all nodes from selection"
-msgstr ""
+msgstr "Gỡ bỏ tất cả các nút từ lựa chọn"
 
 msgid "Import Video"
-msgstr ""
+msgstr "Import Video"
 
 msgid "Sync a video against this GPS track"
-msgstr ""
+msgstr "Sync một video chống theo dõi GPS này"
 
 msgid "Remove Video"
-msgstr ""
+msgstr "Xóa Video"
 
 msgid "removes current video from layer"
-msgstr ""
+msgstr "loại bỏ video hiện từ lớp"
 
 msgid "Play/Pause"
-msgstr "Phát/Tạm dừng"
+msgstr "Play / Pause"
 
 msgid "starts/pauses video playback"
-msgstr ""
+msgstr "bắt đầu / tạm dừng phát lại video"
 
 msgid "Video: {0}"
-msgstr ""
+msgstr "Video: {0}"
 
 msgid "Backward"
-msgstr ""
+msgstr "ngược"
 
 msgid "jumps n sec back"
-msgstr ""
+msgstr "nhảy n sec trở lại"
 
 msgid "Forward"
-msgstr "Tua"
+msgstr "Chuyển tiếp"
 
 msgid "jumps n sec forward"
-msgstr ""
+msgstr "nhảy n giây về phía trước"
 
 msgid "Faster"
-msgstr "Nhanh hơn"
+msgstr "nhanh hơn"
 
 msgid "faster playback"
-msgstr ""
+msgstr "phát nhanh"
 
 msgid "Slower"
-msgstr "Chậm hơn"
+msgstr "chậm"
 
 msgid "slower playback"
-msgstr ""
+msgstr "chậm phát lại"
 
 msgid "Jump To"
-msgstr ""
+msgstr "Jump To"
 
 msgid "jumps to the entered gps time"
-msgstr ""
+msgstr "nhảy đến thời gps nhập"
 
 msgid "Loop"
-msgstr ""
+msgstr "Loop"
 
 msgid "loops n sec around current position"
-msgstr ""
+msgstr "vòng n giây xung quanh vị trí hiện tại"
 
 msgid "Keep centered"
-msgstr ""
+msgstr "Hãy làm trung tâm"
 
 msgid "follows the video icon automatically"
-msgstr ""
+msgstr "sau biểu tượng video tự động"
 
 msgid "Subtitles"
-msgstr ""
+msgstr "Subtitles"
 
 msgid "Show subtitles in video"
-msgstr ""
+msgstr "Hiển thị phụ đề trong video"
 
 msgid "Jump length"
-msgstr ""
+msgstr "Jump dài"
 
 msgid "Set the length of a jump"
-msgstr ""
+msgstr "Thiết lập độ dài của một bước nhảy"
 
 msgid "Jump in video for x ms"
-msgstr ""
+msgstr "Jump trong video cho x ms"
 
 msgid "Loop length"
-msgstr ""
+msgstr "chiều dài Loop"
 
 msgid "Set the length around a looppoint"
-msgstr ""
+msgstr "Thiết lập độ dài xung quanh một looppoint"
 
 msgid "no deinterlacing"
-msgstr ""
+msgstr "không Deinterlacing"
 
 msgid "deinterlacing using line doubling"
-msgstr ""
+msgstr "Deinterlacing sử dụng đường tăng gấp đôi"
 
 msgid "deinterlacing using linear interpolation"
-msgstr ""
+msgstr "Deinterlacing sử dụng nội suy tuyến tính"
 
 msgid ""
 "VLC library is not correctly initialized. Please check that VLC {0} is "
 "correctly installed on your system. Its architecture (32/64 bits) must also "
 "be the same as the JRE that runs JOSM."
 msgstr ""
+"Thư viện VLC không được khởi tạo một cách chính xác. Hãy kiểm tra xem VLC "
+"{0}Cài đặt đúng trên hệ thống của bạn. Kiến trúc (32/64 bit) của nó cũng "
+"phảiGiống như các JRE chạy JOSM."
 
 msgid "Jump to"
-msgstr ""
+msgstr "Chuyển đến"
 
 msgid "Jump to GPS time"
-msgstr ""
+msgstr "Nhảy đến thời gian GPS"
 
 msgid "Shows current position in the video"
-msgstr ""
+msgstr "Hiển thị vị trí hiện trong video"
 
 msgid "Sync"
-msgstr ""
+msgstr "Sync"
 
 msgid "Unable to find JNA Java library!"
-msgstr ""
+msgstr "Không tìm thấy thư viện JNA Java!"
 
 msgid "Unable to find native libvlc library!"
-msgstr ""
+msgstr "Không tìm thấy thư viện libvlc bản địa!"
 
 msgid "play"
-msgstr ""
+msgstr "chơi"
 
 msgid "loop"
-msgstr ""
+msgstr "loop"
 
 msgid "mute"
-msgstr ""
+msgstr "câm"
 
 msgid "Walking Papers Scanned Map"
-msgstr ""
+msgstr "Walking Papers scan Map"
 
 msgid ""
 "Display a map that was previously scanned and uploaded to walking-papers.org"
 msgstr ""
+"Hiển thị một bản đồ mà trước đó đã được quét và tải lên để walking-papers.org"
 
 msgid ""
 "Enter a walking-papers.org URL or ID (the bit after the ?id= in the URL)"
 msgstr ""
+"Nhập một URL walking-papers.org hoặc ID (các bit sau? Id = trong URL)"
 
 msgid "Could not read information from walking-papers.org the id \"{0}\""
-msgstr ""
+msgstr "không thể đọc thông tin từ walking-papers.org id \" {0} \""
 
 msgid "Walking Papers: {0}"
-msgstr ""
+msgstr "Walking Papers: {0}"
 
 msgid "Walking Papers layer ({0}) in zoom {1}"
-msgstr ""
+msgstr "Walking Papers layer ({0}) trong zoom {1}"
 
 msgid "Way Download"
-msgstr ""
+msgstr "Way Download"
 
 msgid "Download map data on the end of selected way"
-msgstr ""
+msgstr "dữ liệu Tải về bản đồ trên đến cuối con đường đã chọn"
 
 msgid ""
 "<html>Neither a node nor a way with an endpoint outside of the<br>current "
 "download areas is selected.<br>Select a node on the start or end of a way or "
 "an entire way first.</html>"
 msgstr ""
+"<Html> Cả một node hay một chiều với một thiết bị đầu cuối bên ngoài của "
+"<br> hiện tạiKhu vực tải về được chọn. <br> Chọn một nút trên đầu hoặc cuối "
+"của một cách hayMột cách toàn bộ đầu tiên. </ Html>"
 
 msgid "<html>Could not find a unique node to start downloading from.</html>"
 msgstr ""
+"<html> Không tìm thấy một nút duy nhất để bắt đầu tải về từ. </ html>"
 
 msgid "<html>There are no ways connected to node ''{0}''. Aborting.</html>"
-msgstr ""
+msgstr "<html> Không có cách kết nối với nút '' {0} ''. hủy bỏ. </ html>"
 
 msgid ""
 "Way downloader data inconsistency. Prior connected way ''{0}'' wasn''t "
 "discovered after download"
 msgstr ""
+"Way dữ liệu downloader không thống nhất. Cách kết nối Trước khi '' {0} '' "
+"wasn''tPhát hiện sau khi tải về"
 
 msgid ""
 "<html>There aren''t further connected ways to download.<br>A potential "
@@ -29435,115 +32115,124 @@ msgid ""
 "''{1}''<br>Merge the duplicate node onto the currently selected node and "
 "continue way downloading?</html>"
 msgstr ""
+"<Html> Có aren''t cách kết nối xa hơn để tải về. <br> Một tiềm năngNút trùng "
+"lặp của nút đang được chọn đã được tìm thấy, mặc dù. <br> TheNút đang được "
+"chọn là '' {0} '' <br> Nút trùng lặp tiềm năng là'' {1} '' <br> Merge các "
+"nút trùng lặp vào nút đang chọnTiếp tục cách tải? </ Html>"
 
 msgid "Merge duplicate node?"
-msgstr ""
+msgstr "Hợp nhất nút trùng lặp?"
 
 msgid "<html>No more connected ways to download.</html>"
-msgstr ""
+msgstr "<html> Không có cách kết nối nhiều hơn để tải về. </ html>"
 
 msgid "Node ''{0}'' is a junction with more than 2 connected ways."
-msgstr ""
+msgstr "Node '' {0} '' là một đường giao nhau với hơn 2 cách kết nối."
 
 msgid "Enter search expression here.."
-msgstr ""
+msgstr "Nhập tìm kiếm biểu hiện ở đây .."
 
 msgid "Select waypoint to move map"
-msgstr ""
+msgstr "Chọn waypoint để di chuyển bản đồ"
 
 msgid "Waypoint search"
-msgstr ""
+msgstr "Waypoint tìm kiếm"
 
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr ""
-
-msgid "Way Select"
-msgstr ""
+"Tìm kiếm sau khi waypoint. Click và di chuyển xem bản đồ đến waypoint."
 
 msgid "Add names from Wikipedia"
-msgstr ""
+msgstr "Thêm tên từ Wikipedia"
 
 msgid ""
 "Fetches interwiki links from Wikipedia in order to add several name tags"
-msgstr ""
+msgstr "Nạp liên kết wiki từ Wikipedia để thêm nhiều thẻ tên"
 
 msgid ""
 "Copies the {0} template to the system clipboard instantiated with the "
 "coordinates of the first selected node"
 msgstr ""
+"Bản sao các {0} template vào clipboard hệ thống khởi tạo vớiTọa độ của các "
+"nút lựa chọn đầu tiên"
 
 msgid "Copy {0} template"
-msgstr ""
+msgstr "Copy {0} mẫu"
 
 msgid "Fetch Wikipedia articles with coordinates"
-msgstr ""
+msgstr "Lấy bài viết Wikipedia với tọa độ"
 
 msgid ""
 "Double click on item to search for object with article name (and center "
 "coordinate)"
 msgstr ""
+"Double click vào mục tìm kiếm đối tượng với tên bài viết (và trung tâmPhối "
+"hợp)"
 
 msgid "Available via WIWOSM server"
-msgstr ""
+msgstr "có sẵn thông qua máy chủ WIWOSM"
 
 msgid "Available in local dataset"
-msgstr ""
+msgstr "có sẵn trong tập dữ liệu địa phương"
 
 msgid "Not linked yet"
-msgstr ""
+msgstr "Không liên kết nào"
 
 msgid "{0}.Wikipedia.org"
-msgstr ""
+msgstr "{0} .Wikipedia.org"
 
 msgid "{0}.Wikipedia.org: {1}"
-msgstr ""
+msgstr "{0} .Wikipedia.org: {1}"
 
 msgid "Fetches all coordinates from Wikipedia in the current view"
-msgstr ""
+msgstr "nạp tất cả các tọa độ từ Wikipedia trong quan điểm hiện tại"
 
 msgid "coordinates"
-msgstr ""
+msgstr "tọa độ"
 
 msgid "Category"
-msgstr ""
+msgstr "Thể loại"
 
 msgid "Fetches a list of all Wikipedia articles of a category"
 msgstr ""
+"lấy một danh sách của tất cả các bài viết trên Wikipedia về một thể loại"
 
 msgid "Enter the Wikipedia category"
-msgstr ""
+msgstr "Nhập loại Wikipedia"
 
 msgid "Clipboard"
-msgstr ""
+msgstr "Clipboard"
 
 msgid "Pastes Wikipedia articles from the system clipboard"
-msgstr ""
+msgstr "điều Pastes Wikipedia từ clipboard của hệ thống"
 
 msgid "clipboard"
-msgstr ""
+msgstr "clipboard"
 
 msgid "Open Article"
-msgstr ""
+msgstr "Open Điều"
 
 msgid "Opens the Wikipedia article of the selected item in a browser"
-msgstr ""
+msgstr "Mở bài viết Wikipedia của mục đã chọn trong một trình duyệt"
 
 msgid "Sets the default language for the Wikipedia articles"
-msgstr ""
+msgstr "Thiết lập ngôn ngữ mặc định cho các bài viết Wikipedia"
 
 msgid "Enter the Wikipedia language"
-msgstr ""
+msgstr "Nhập ngôn ngữ Wikipedia"
 
 msgid ""
 "Adds a ''wikipedia'' tag corresponding to this article to the selected "
 "objects"
 msgstr ""
+"Thêm một '' wikipedia '' tag tương ứng với bài viết này để các lựa chọnĐối "
+"tượng"
 
 msgid "The Ultimate WMS Super-speed Turbo Challenge II"
-msgstr ""
+msgstr "The Ultimate WMS siêu tốc Turbo Challenge II"
 
 msgid "Go driving"
-msgstr ""
+msgstr "Go lái xe"
 
 msgid "Drive a race car on this layer"
-msgstr ""
+msgstr "Lái một chiếc xe đua trên lớp này"
diff --git a/i18n/po/zh_CN.po b/i18n/po/zh_CN.po
index 4a2cd36..f8b07c1 100644
--- a/i18n/po/zh_CN.po
+++ b/i18n/po/zh_CN.po
@@ -3,28 +3,25 @@
 # This file is distributed under the same license as the josm package.
 # FIRST AUTHOR <EMAIL at ADDRESS>, 2009.
 # mmyangfl <mmyangfl at gmail.com>, 2012.
-# mmyfl <mmyangfl at gmail.com>, 2011, 2012, 2013.
 # yangfl <yangfl at localhost>, 2014.
+# mmyfl <mmyangfl at gmail.com>, 2011, 2012, 2013, 2015.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
-"PO-Revision-Date: 2015-04-21 04:28+0000\n"
-"Last-Translator: rc1028 <q371320247 at live.com>\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
+"PO-Revision-Date: 2015-09-09 08:38+0000\n"
+"Last-Translator: mmyfl <Unknown>\n"
 "Language-Team: 汉语 <>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2015-05-12 05:03+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 05:08+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: zh_CN\n"
 
-msgid "yard"
-msgstr "货场线"
-
 msgid "{0}: option ''{1}'' is ambiguous"
 msgstr "{0}:选项“{1}”模糊不清"
 
@@ -38,10 +35,10 @@ msgid "{0}: option ''{1}'' requires an argument"
 msgstr "{0}:选项“{1}”需要一个参数"
 
 msgid "{0}: unrecognized option ''--{1}''"
-msgstr "{0}:无法识别的选项“--{1}''"
+msgstr "{0}:无法识别的选项“--{1}”"
 
 msgid "{0}: unrecognized option ''{1}{2}''"
-msgstr "{0}:无法识别的选项“{1}{2}''"
+msgstr "{0}:无法识别的选项“{1}{2}”"
 
 msgid "{0}: illegal option -- {1}"
 msgstr "{0}:非法选项 -- {1}"
@@ -53,7 +50,7 @@ msgid "{0}: option requires an argument -- {1}"
 msgstr "{0}:选项需要一个参数 -- {1}"
 
 msgid "Invalid value {0} for parameter ''has_arg''"
-msgstr "参数“has_arg''的值 {0} 无效"
+msgstr "参数“has_arg”的值 {0} 无效"
 
 msgid "Background Terms of Use"
 msgstr "背景使用条款"
@@ -62,16 +59,16 @@ msgid "Opening link not supported on current platform (''{0}'')"
 msgstr "当前平台不支持打开链接(“{0}”)"
 
 msgid "ERROR: {0}"
-msgstr "错误:{0}"
+msgstr "错误: {0}"
 
 msgid "WARNING: {0}"
-msgstr "【警告】:{0}"
+msgstr "警告: {0}"
 
 msgid "INFO: {0}"
-msgstr "【信息】:{0}"
+msgstr "信息: {0}"
 
 msgid "DEBUG: {0}"
-msgstr "【调试】:{0}"
+msgstr "调试: {0}"
 
 msgid "Cause: "
 msgstr "原因: "
@@ -103,27 +100,24 @@ msgstr "加载图像首选项中"
 msgid "Updating user interface"
 msgstr "更新用户界面中"
 
-msgid "{0} completed in {1}"
-msgstr "{1} 中已完成 {0}"
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "忽略格式不良的文件 URL:“{0}”"
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "忽略不正确的 URL:“{0}”"
 
 msgid "Warning"
 msgstr "警告"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "忽略格式不良的文件 URL:“{0}”"
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr "参数“downloadgps”不能使用文件名或文件 URL"
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "忽略不正确的 URL:“{0}”"
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
 "compatible) version of JOSM.</li></ul>More Info:"
 msgstr ""
-"<h2>JOSM 需要 Java 版本 {0}</h2>检测到 Java 版本 {1}<br>你可以 <ul><li>升级 Java (JRE) "
+"<h2>JOSM 需要 Java 版本 {0}</h2>检测到 Java 版本 {1}<br>您可以 <ul><li>升级 Java (JRE) "
 "或者</li><li>用旧版 (兼容 Java {2}) JOSM</li></ul>其它信息:"
 
 msgid "Exit JOSM"
@@ -199,7 +193,7 @@ msgid "Cancel"
 msgstr "取消"
 
 msgid "Click to abort launching external browsers"
-msgstr "单击以放弃启动外部浏览器"
+msgstr "单击以中止外部浏览器的启动"
 
 msgid "Please select at least one already uploaded node, way, or relation."
 msgstr "请至少选择一个已上传的节点、路径或关系。"
@@ -232,7 +226,7 @@ msgid "Add imagery layer {0}"
 msgstr "添加图像层 {0}"
 
 msgid "Select image format for WMS layer"
-msgstr "为WMS图层选择图像格式"
+msgstr "为 WMS 图层选择图像格式"
 
 msgid "Select WMS layers"
 msgstr "选择 WMS 图层"
@@ -302,7 +296,7 @@ msgid "Two parallels ways found. Abort."
 msgstr "发现两条平行道路。中止。"
 
 msgid "data"
-msgstr "数据"
+msgstr "数据(D)"
 
 msgid "layer"
 msgstr "图层"
@@ -432,7 +426,7 @@ msgid "Create multipolygon"
 msgstr "建立多重多边形"
 
 msgid "No data loaded."
-msgstr "没有加载数据。"
+msgstr "未加载数据。"
 
 msgid "You must select at least one way."
 msgstr "您必须选择至少一条路径。"
@@ -449,6 +443,9 @@ msgstr "切换对话框面板"
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "切换对话框面板,最大化到地图视图"
 
+msgid "Distribute Nodes"
+msgstr "分布节点"
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr "依一条直线将选定的节点等距离散布。"
 
@@ -460,6 +457,9 @@ msgid ""
 "* One no self-crossing way with at most two of its nodes;\n"
 "* Three nodes."
 msgstr ""
+"请选择:\n"
+"* 一条不自我交叉、至少有两个节点的路径;\n"
+"* 三个节点。"
 
 msgid "Download from OSM..."
 msgstr "从 OSM 下载..."
@@ -476,7 +476,7 @@ msgid "Download data"
 msgstr "下载数据"
 
 msgid "Download notes in current view"
-msgstr "在当前视图中下载地图注释"
+msgstr "在当前视图中下载笔记"
 
 msgid "Download object..."
 msgstr "下载对象..."
@@ -737,13 +737,13 @@ msgid "URL"
 msgstr "URL"
 
 msgid "Jump there"
-msgstr "跳至那里"
+msgstr "跳至该处"
 
 msgid "Jump to Position"
-msgstr "跳到位置"
+msgstr "跳至位置"
 
 msgid "Could not parse Latitude, Longitude or Zoom. Please check."
-msgstr "无法粘贴纬度、经度或缩放级别。请检查。"
+msgstr "无法解析纬度、经度或缩放级别。请检查。"
 
 msgid "Unable to parse Lon/Lat"
 msgstr "无法分析经/纬度"
@@ -1042,6 +1042,30 @@ msgstr "<html>请确定所有选定的路径都朝着类似的方向<br>或是
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr "请选择角度大约为 90 或 180 度的路径。"
 
+msgid "Download from Overpass API ..."
+msgstr "从 Overpass API 下载..."
+
+msgid "Download map data from Overpass API server."
+msgstr "从 Overpass API 服务器下载地图数据。"
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr "使用 Overpass Turbo 查询向导构建 Overpass 查询"
+
+msgid "Build query"
+msgstr "构建查询"
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr "<html>Overpass 向导无法解析以下查询:"
+
+msgid "Parse error"
+msgstr "解析错误"
+
+msgid "Overpass query: "
+msgstr "Overpass 查询: "
+
+msgid "Overpass server: "
+msgstr "Overpass 服务器: "
+
 msgid "Paste"
 msgstr "粘贴"
 
@@ -1139,7 +1163,7 @@ msgid "Could not rename file ''{0}''"
 msgstr "无法重命名文件“{0}”"
 
 msgid "Report bug"
-msgstr "报告故障"
+msgstr "报告错误"
 
 msgid "Report a ticket to JOSM bugtracker"
 msgstr "回报给 JOSM 错误追踪系统"
@@ -1187,19 +1211,19 @@ msgid "Save As..."
 msgstr "另存为..."
 
 msgid "Save the current data to a new file."
-msgstr "将目前的数据保存为新的文件。"
+msgstr "将当前数据保存为新的文件。"
 
 msgid "Search Notes..."
-msgstr "搜索地图注释…"
+msgstr "搜索笔记..."
 
 msgid "Download notes from the note search API"
-msgstr "从地图注释搜索API下载注释"
+msgstr "从笔记搜索 API 下载笔记"
 
 msgid "Search the OSM API for notes containing words:"
-msgstr "用OSM API搜索包含下列内容的地图注释:"
+msgstr "用 OSM API 搜索包含下列内容的笔记:"
 
 msgid "Search for notes"
-msgstr "搜索地图注释"
+msgstr "搜索笔记"
 
 msgid "You must enter a search term"
 msgstr "您必须输入一个搜索关键词"
@@ -1473,7 +1497,7 @@ msgid_plural ""
 msgstr[0] "断开选定的节点后,受影响的路径将会消失。"
 
 msgid "Some irrelevant nodes have been removed from the selection"
-msgstr ""
+msgstr "一些无关节点已从选择范围中移除"
 
 msgid "Undo"
 msgstr "撤消"
@@ -1718,34 +1742,34 @@ msgid "Markers from {0}"
 msgstr "{0} 的标记"
 
 msgid "Download OSM Notes"
-msgstr "下载OSM地图注释"
+msgstr "下载 OSM 笔记"
 
 msgid "Downloading Notes"
 msgstr "下载说明"
 
 msgid "Notes"
-msgstr "注释"
+msgstr "笔记"
 
 msgid "{0} note has been downloaded."
 msgid_plural "{0} notes have been downloaded."
-msgstr[0] "已下载{0}条注释。"
+msgstr[0] "已下载 {0} 条笔记。"
 
 msgid ""
 "Since the download limit was {0}, there might be more notes to download."
-msgstr "由于下载限制为{0},可能有更多注释需要下载。"
+msgstr "由于下载限制为 {0},可能有更多笔记需要下载。"
 
 msgid ""
 "Request a smaller area to make sure that all notes are being downloaded."
-msgstr "请选择更小的区域以便所有注释均被下载。"
+msgstr "请选择更小的区域以便所有笔记均被下载。"
 
 msgid "More notes to download"
-msgstr "需下载更多注释"
+msgstr "需下载更多笔记"
 
 msgid "Download OSM Notes within Bounds"
-msgstr "下载边界内的OSM注释"
+msgstr "下载边界内的 OSM 笔记"
 
 msgid "Download OSM Note by ID"
-msgstr "根据ID下载注释"
+msgstr "根据 ID 下载 OSM 笔记"
 
 msgid "Download Compressed OSM Change"
 msgstr "下载压缩 OSM 修改"
@@ -1757,7 +1781,7 @@ msgid "Download Compressed OSM"
 msgstr "下载压缩 OSM"
 
 msgid "Download OSM object by ID"
-msgstr "根据ID下载OSM对象"
+msgstr "根据 ID 下载 OSM 对象"
 
 msgid "Download OSM"
 msgstr "下载 OSM"
@@ -1786,7 +1810,7 @@ msgstr "下载 OSM URL"
 
 msgid "There was {0} conflict during import."
 msgid_plural "There were {0} conflicts during import."
-msgstr[0] "在输入过程中发生 {0} 个冲突。"
+msgstr[0] "在导入过程中发生 {0} 个冲突。"
 
 msgid "Conflict during download"
 msgid_plural "Conflicts during download"
@@ -1871,10 +1895,10 @@ msgid "Create note"
 msgstr "创建笔记"
 
 msgid "Enter a detailed comment to create a note"
-msgstr "输入详细的注释以创建地图注释"
+msgstr "输入详细的注释以创建笔记"
 
 msgid "You must enter a comment to create a new note"
-msgstr "要创建新注释必须输入内容"
+msgstr "要创建新笔记必须输入内容"
 
 msgid "Delete Mode"
 msgstr "删除模式"
@@ -1945,15 +1969,6 @@ msgstr "角度对齐活动中。"
 msgid "Finish drawing."
 msgstr "结束绘制。"
 
-msgid "FIX"
-msgstr "修正"
-
-msgid "draw angle snap"
-msgstr "绘制角度对齐"
-
-msgid "draw angle snap highlight"
-msgstr "绘制角度对齐高亮"
-
 msgid "Toggle snapping by {0}"
 msgstr "切换 {0} 贴紧"
 
@@ -1975,6 +1990,15 @@ msgstr "0,45,90,..."
 msgid "0,30,45,60,90,..."
 msgstr "0,30,45,60,90,..."
 
+msgid "FIX"
+msgstr "修正"
+
+msgid "draw angle snap"
+msgstr "绘制角度对齐"
+
+msgid "draw angle snap highlight"
+msgstr "绘制角度对齐高亮"
+
 msgid "Angle snapping"
 msgstr "角度对齐"
 
@@ -2020,7 +2044,7 @@ msgid "Draw a rectangle of the desired size, then release the mouse button."
 msgstr "绘出想要尺寸的矩形,然后放开鼠标按钮。"
 
 msgid "Extrude: main line"
-msgstr "挤压出: 为主线"
+msgstr "拉伸:主线"
 
 msgid "Extrude: helper line"
 msgstr "拉伸:辅助线"
@@ -2095,9 +2119,6 @@ msgstr ""
 "平行路径动作\n"
 "选定的路径必须是一条简单的无分支路径"
 
-msgid "Make parallel way error"
-msgstr "制作平行路径错误"
-
 msgid "Drag play head"
 msgstr "拖放播放开头"
 
@@ -2206,7 +2227,7 @@ msgid ""
 msgid_plural ""
 "You are about to open <b>{0}</b> different relation editors "
 "simultaneously.<br/>Do you want to continue?"
-msgstr[0] "你将同时打开<b>{0}</b>个关系编辑器。<br/>要继续吗?"
+msgstr[0] "您将同时打开<b>{0}</b>个关系编辑器。<br/>要继续吗?"
 
 msgid "Confirmation"
 msgstr "确认"
@@ -2310,9 +2331,15 @@ msgstr "所有的对象"
 msgid "Also include incomplete and deleted objects in search."
 msgstr "也查找不完整和已删除的对象。"
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr "正则表达式"
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr "添加工具栏按钮"
 
@@ -2440,11 +2467,11 @@ msgstr "属性"
 
 msgid ""
 "ways with at least 20 nodes, or relations containing at least 20 nodes"
-msgstr ""
+msgstr "含有至少 20 个节点的路径,或含有至少 20 个节点的关系"
 
 msgid ""
 "nodes with at least 3 referring ways, or relations containing at least 3 ways"
-msgstr ""
+msgstr "含有至少 3 条路径的节点,或含有至少 3 条路径的关系"
 
 msgid "objects having 5 to 10 tags"
 msgstr "有 5 到 10 个标签的对象"
@@ -2456,7 +2483,7 @@ msgid "closed ways with an area of 100 m²"
 msgstr "面积为 100 平方米的封闭路径"
 
 msgid "ways with a length of 200 m or more"
-msgstr ""
+msgstr "长度为 200 米及以上的路径"
 
 msgid "state"
 msgstr "状态"
@@ -2531,6 +2558,10 @@ msgid "RX"
 msgstr "正则表达式搜索"
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr "所有元素"
 
@@ -2579,6 +2610,9 @@ msgstr "预计的数字范围"
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr "意外的令牌。预期 {0},发现 {1}"
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr "意外的令牌:{0}"
 
@@ -2634,13 +2668,13 @@ msgid "Cycling dependencies"
 msgstr "循环相依性"
 
 msgid "Uploading modified notes"
-msgstr "正在上传修改后的注释"
+msgstr "正在上传修改后的笔记"
 
 msgid "Note {0} failed: {1}"
-msgstr "注释{0}失败:{1}"
+msgstr "笔记 {0} 失败:{1}"
 
 msgid "Notes failed to upload"
-msgstr "上传注释失败"
+msgstr "上传笔记失败"
 
 msgid ""
 "The following are results of automatic validation. Try fixing these, but be "
@@ -3012,6 +3046,24 @@ msgstr "无法创建丢失的缓存目录:{0}"
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr "<html>无法创建丢失的缓存目录:{0}</html>"
 
+msgid "Unable to delete temporary file {0}"
+msgstr "无法删除临时文件 {0}"
+
+msgid "Unable to set file non-readable {0}"
+msgstr "无法设置文件 {0} 不可读"
+
+msgid "Unable to set file non-writable {0}"
+msgstr "无法设置文件 {0} 不可写"
+
+msgid "Unable to set file non-executable {0}"
+msgstr "无法设置文件 {0} 不可执行"
+
+msgid "Unable to set file readable {0}"
+msgstr "无法设置文件 {0} 可读"
+
+msgid "Unable to set file writable {0}"
+msgstr "无法设置文件 {0} 可写"
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3066,7 +3118,7 @@ msgstr "无法保持首选项“{0}”"
 msgid ""
 "Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early "
 "startup)."
-msgstr ""
+msgstr "尝试启用 IPv6 网络,优先使用 IPv6(只适用于 IPv6 早期启动时)。"
 
 msgid " (at line {0}, column {1})"
 msgstr " (在 {0} 行,{1} 列)"
@@ -3102,7 +3154,7 @@ msgid "Already registered a conflict for primitive ''{0}''."
 msgstr "已经注册原型“{0}”的冲突。"
 
 msgid "Decimal Degrees"
-msgstr "十进位经纬度"
+msgstr "十进制经纬度"
 
 msgid "deg° min'' sec\""
 msgstr "度°分''秒\""
@@ -3129,17 +3181,53 @@ msgctxt "compass"
 msgid "E"
 msgstr "东"
 
-msgid "Not in cache"
-msgstr "不在缓存中"
-
 msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr "找不到投影法“{0}”,无法使用书签“{1}”"
 
+msgid "HTTP error {0} when loading tiles"
+msgstr "加载瓦片时发生 HTTP 错误 {0}"
+
+msgid "Error downloading tiles: {0}"
+msgstr "下载瓦片时发生错误:{0}"
+
+msgid "Could not load image from tile server"
+msgstr "无法从瓦片服务器加载图像"
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+"{0} 不是有效的 WMS 参数。请检查服务器 URL:\n"
+"{1}"
+
+msgid "Select WMTS layer"
+msgstr "选择 WMTS 图层"
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr "投影法"
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr "getCapabilities 文档未定义图层:{0}"
+
+msgid "No layer selected"
+msgstr "未选择图层"
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
+msgstr ""
+
 msgid "ID > 0 expected. Got {0}."
-msgstr "预计 ID > 0。收到 {0}。"
+msgstr "期望 ID > 0。收到 {0}。"
 
 msgid "Version > 0 expected. Got {0}."
-msgstr "预计版本 > 0。收到 {0}。"
+msgstr "期望版本 > 0。收到 {0}。"
 
 msgid ""
 "Cannot assign a changesetId > 0 to a new primitive. Value of changesetId is "
@@ -3319,6 +3407,12 @@ msgstr "文字"
 msgid "areatext"
 msgstr "区域文字"
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr "UTM 投影(''+proj=utm'')需要“+zone=...”参数。"
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr "“+zone=...”参数的预期整数值介于 1-60 之间。"
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr "参数必须开始于一个“+”字符(发现“{0}”)"
 
@@ -3346,15 +3440,15 @@ msgstr "不支持椭球“{0}”。"
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr "不支持的椭球参数组合。"
 
+msgid "Unknown datum identifier: ''{0}''"
+msgstr "未知的基准标识符:“{0}”"
+
 msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr "椭球要求(+ellps=* 或 i+a=*, +b=*)"
 
 msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr "不支持网格转换文件“{0}”选项 +nadgrids。"
 
-msgid "Unknown datum identifier: ''{0}''"
-msgstr "未知的基准标识符:“{0}”"
-
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
 msgstr "数据要求(+datum=*,+towgs84=* 或 +nadgrids=*)"
 
@@ -3491,17 +3585,17 @@ msgid "House number too far from street"
 msgstr "远离街道的门牌号"
 
 msgid "API Capabilities"
-msgstr ""
+msgstr "API 功能"
 
 msgid "Checks for errors against API capabilities"
-msgstr ""
+msgstr "检查违反 API 功能的错误"
 
 msgid ""
 "Way contains more than {0} nodes. It should be replaced by a multipolygon"
-msgstr "线状要素超过{0}个点,应换用多边形要素。"
+msgstr "路径超过 {0} 个点,应换用多边形。"
 
 msgid "Way contains more than {0} nodes. It should be split or simplified"
-msgstr "线状要素超过{0}个点,应该打断或简化。"
+msgstr "路径超过 {0} 个点,应切割或简化。"
 
 msgid "Barriers and entrances"
 msgstr "障碍和入口"
@@ -3696,13 +3790,13 @@ msgid "Number of lane dependent values inconsistent in backward direction"
 msgstr "反向车道相关值参数不一致"
 
 msgid "Long segments"
-msgstr ""
+msgstr "长区段"
 
 msgid "This tests for long way segments, which are usually errors."
-msgstr ""
+msgstr "检查过长的路径区段,通常由错误引起。"
 
 msgid "Very long segment of {0} kilometers"
-msgstr ""
+msgstr "过长区段({0} 千米)"
 
 msgid "Tag checker (MapCSS based)"
 msgstr "标签检查器(基于 MapCSS)"
@@ -3795,7 +3889,7 @@ msgstr ""
 "属性组成。例如:Italia - Italien - Italy。"
 
 msgid "Missing name:*={0}. Add tag with correct language key."
-msgstr ""
+msgstr "缺少 name:*={0}。用正确的语言键添加标签。"
 
 msgid "A name is missing, even though name:* exists."
 msgstr "缺少 name,但还有 name:* 存在。"
@@ -3813,7 +3907,7 @@ msgid "Unexpected token:"
 msgstr "异常标记:"
 
 msgid "Unexpected token (school holiday parser):"
-msgstr "异常标记(学校假期分析器):"
+msgstr "异常标记(学校假期解析器):"
 
 msgid "Unexpected token in number range:"
 msgstr "异常标记的数字范围:"
@@ -3863,7 +3957,7 @@ msgid "Way contains segment twice"
 msgstr "路径两次包含同一区段"
 
 msgid "Power lines"
-msgstr "电线"
+msgstr "输电线"
 
 msgid ""
 "Checks for nodes in power lines that do not have a power=tower/pole tag."
@@ -3973,9 +4067,6 @@ msgstr "标签键值长过允许值"
 msgid "Tags with empty values"
 msgstr "标签没有数值"
 
-msgid "Invalid property key"
-msgstr "无效的属性键值"
-
 msgid "Invalid white space in property key"
 msgstr "属性键值中有无效的空白字节"
 
@@ -3985,12 +4076,24 @@ msgstr "属性数值以空白字节开头或结尾"
 msgid "Property values contain HTML entity"
 msgstr "属性数值含有 HTML 标记"
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr "键“{0}”不在预设组合中。"
 
 msgid "Presets do not contain property key"
 msgstr "预设组合不包含属性键值"
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr "键“{1}”的值“{0}”像“{2}”。"
+
+msgid "Misspelled property value"
+msgstr "拼写错误的属性值"
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr "键“{1}”的值“{0}”不在预设组合中。"
 
@@ -4171,15 +4274,15 @@ msgstr "路径节点靠近其他的路径"
 msgid "Connected way end node near other way"
 msgstr "已连接的路径结束点靠近其他的路径"
 
+msgid "Unconnected nodes without physical tags"
+msgstr "未连接且没有实体标签的节点"
+
 msgid "Untagged and unconnected nodes"
 msgstr "未标记的且未连接的节点"
 
 msgid "This test checks for untagged nodes that are not part of any way."
 msgstr "这个测试会检查未加标签,且不属任何路径的一部分的节点。"
 
-msgid "Unconnected nodes without physical tags"
-msgstr "未连接且没有实体标签的节点"
-
 msgid "No tags"
 msgstr "无标记"
 
@@ -4247,10 +4350,10 @@ msgid "Show this dialog again the next time"
 msgstr "下次还显示此对话框"
 
 msgid "Do not show again (this operation)"
-msgstr "不要再显示 (此操作)"
+msgstr "不要再显示(此操作)"
 
 msgid "Do not show again (this session)"
-msgstr "不要再显示 (此会话)"
+msgstr "不要再显示(此会话)"
 
 msgid "Do not show again (remembers choice)"
 msgstr "不要再显示(记住选择)"
@@ -4330,7 +4433,7 @@ msgid "Authentication Failed"
 msgstr "验证失败"
 
 msgid "Access to redacted version ''{0}'' of {1} {2} is forbidden."
-msgstr "禁止访问{1} {2} 的编辑版本“{0}”"
+msgstr "禁止访问 {1} {2} 的编辑版本“{0}”"
 
 msgid "Authorisation Failed"
 msgstr "验证失败"
@@ -4372,6 +4475,7 @@ msgstr "点击以关闭对话框"
 msgid "Imagery offset"
 msgstr "图像偏移"
 
+msgctxt "menu"
 msgid "Imagery"
 msgstr "图像(I)"
 
@@ -4434,7 +4538,7 @@ msgid "Print debugging messages to console"
 msgstr "打印调试信息至控制台"
 
 msgid "Skip loading plugins"
-msgstr ""
+msgstr "跳过加载插件"
 
 msgid "Disable access to the given resource(s), separated by comma"
 msgstr "禁止访问特定资源,以逗号分隔"
@@ -4443,25 +4547,25 @@ msgid "options provided as Java system properties"
 msgstr "提供 Java 系统属性的选项"
 
 msgid "/PATH/TO/JOSM/PREF    "
-msgstr "JOSM偏好设置路径    "
+msgstr "/JOSM/首选项/路径    "
 
 msgid "Set the preferences directory"
-msgstr "设置偏好设置目录"
+msgstr "设置首选项目录"
 
 msgid "/PATH/TO/JOSM/USERDATA"
-msgstr "JOSM用户数据路径"
+msgstr "/JOSM/用户/数据/路径"
 
 msgid "Set the user data directory"
 msgstr "设置用户数据目录"
 
 msgid "/PATH/TO/JOSM/CACHE   "
-msgstr "JOSM缓存路径   "
+msgstr "/JOSM/缓存/路径   "
 
 msgid "Set the cache directory"
 msgstr "设置缓存目录"
 
 msgid "/PATH/TO/JOSM/HOMEDIR "
-msgstr "JOSM安装路径 "
+msgstr "/JOSM/安装/路径 "
 
 msgid ""
 "Relocate all 3 directories to homedir. Cache directory will be in "
@@ -4471,7 +4575,7 @@ msgstr "将三个目录均重置为安装目录。缓存路径为安装目录下
 msgid ""
 "-Djosm.home has lower precedence, i.e. the specific setting overrides the "
 "general one"
-msgstr "-Djosm.home的优先级更低,即该设置覆盖了一般设置"
+msgstr "-Djosm.home 的优先级更低,即该设置覆盖了一般设置"
 
 msgid ""
 "note: For some tasks, JOSM needs a lot of memory. It can be necessary to add "
@@ -4497,7 +4601,7 @@ msgid "Printing debugging messages to console"
 msgstr "打印调试信息至控制台"
 
 msgid "Plugin loading skipped"
-msgstr ""
+msgstr "已跳过插件加载"
 
 msgid "Enabled detailed debug level (trace)"
 msgstr "启用详细调试级别(跟踪)"
@@ -4536,15 +4640,15 @@ msgstr[0] "JOSM 正在以离线模式运行。此资源将无法使用:{0}"
 
 msgid ""
 "Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."
-msgstr ""
+msgstr "检测到可用的 IPv6 网络,下次重新启动后优先使用 IPv6 而非 IPv4。"
 
 msgid "Detected useable IPv6 network, prefering IPv6 over IPv4."
-msgstr ""
+msgstr "检测到可用的 IPv6 网络,优先使用 IPv6 而非 IPv4。"
 
 msgid ""
 "Detected no useable IPv6 network, prefering IPv4 over IPv6 after next "
 "restart."
-msgstr ""
+msgstr "未检测到可用的 IPv6 网络,下次重新启动后优先使用 IPv4 而非 IPv6。"
 
 msgid "Unsaved osm data"
 msgstr "未保存的 OSM 数据"
@@ -4587,45 +4691,56 @@ msgstr ""
 "JOSM "
 "试图访问下列资源:<br>{0},但访问<b>失败</b>,因下列网络错误:<br>{1}这可能是由于未配置代理。<br>您是否要立即更改代理设置?"
 
+msgctxt "menu"
 msgid "File"
 msgstr "文件(F)"
 
-msgid "Session"
-msgstr "会话"
+msgctxt "menu"
+msgid "Edit"
+msgstr "编辑(E)"
 
+msgctxt "menu"
 msgid "View"
 msgstr "查看(V)"
 
+msgctxt "menu"
 msgid "Tools"
 msgstr "工具(T)"
 
+msgctxt "menu"
 msgid "More tools"
-msgstr "更多工具(R)"
+msgstr "更多工具(M)"
 
+msgctxt "menu"
 msgid "Data"
-msgstr "数据"
+msgstr "数据(D)"
 
+msgctxt "menu"
 msgid "Selection"
 msgstr "选择(N)"
 
+msgctxt "menu"
 msgid "Presets"
 msgstr "预设组合(P)"
 
 msgid "More..."
 msgstr "更多..."
 
+msgctxt "menu"
 msgid "GPS"
 msgstr "GPS"
 
+msgctxt "menu"
 msgid "Windows"
 msgstr "窗口(W)"
 
+msgctxt "menu"
+msgid "Help"
+msgstr "帮助(H)"
+
 msgid "Menu: {0}"
 msgstr "菜单:{0}"
 
-msgid "Save and load the current session (list of layers, etc.)"
-msgstr "保存和加载当前会话(图层列表等)"
-
 msgid "Edit toolbar"
 msgstr "编辑工具栏"
 
@@ -4647,8 +4762,9 @@ msgstr "点击以在首选项中打开图像选项卡"
 msgid "Search menu items"
 msgstr "搜索菜单项"
 
+msgctxt "menu"
 msgid "Audio"
-msgstr "音频(U)"
+msgstr ""
 
 msgid "Do not hide toolbar"
 msgstr "不要隐藏工具栏"
@@ -4746,7 +4862,7 @@ msgid "Layer ''{0}'' must be in list of layers"
 msgstr "图层“{0}”必须在图层列表中"
 
 msgid "Default (open, closed, new)"
-msgstr "默认(开启,关闭,新建)"
+msgstr "默认(开启,关闭,新建)"
 
 msgid "Username"
 msgstr "用户名"
@@ -4758,7 +4874,7 @@ msgid "Last change date"
 msgstr "上次修改日期"
 
 msgid "Select note sorting method"
-msgstr "选择注释排序方法"
+msgstr "选择笔记排序方法"
 
 msgid "Click to cancel the current operation"
 msgstr "点击以取消目前的操作"
@@ -4769,60 +4885,17 @@ msgstr "在后台"
 msgid "Click to run job in background"
 msgstr "点击以在后台运行工作"
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr "航拍图像可能是错位的。请使用 GPS 轨迹检查偏移!"
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-
-msgid "Details..."
-msgstr "详细信息..."
-
-msgid "Hide this message and never show it again"
-msgstr "隐藏此消息,并不再显示"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr "<html>请确认是否从<strong>1 个关系</strong>中删除<strong>1 个对象</strong>。</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>请确认是否从<strong>{0} 个关系</strong>中删除<strong>1 个对象</strong>。</html>"
-
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
-msgstr ""
-"<html>请确认是否从<strong>{1} 个关系</strong>中删除<strong>{0} 个对象</strong>。</html>"
-
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] "正在删除 {0} 个对象"
-
-msgid "Delete objects"
-msgstr "正在删除对象"
-
-msgid "To delete"
-msgstr "要删除"
-
-msgid "From Relation"
-msgstr "从关系"
-
-msgid "Pos."
-msgstr "次序。"
+msgid " ({0})"
+msgstr " ({0})"
 
-msgid "Role"
-msgstr "角色"
+msgid "{0} completed in {1}"
+msgstr "{0} 已完成{1}"
 
-msgid "Click to close the dialog and remove the object from the relations"
-msgstr "点击以关闭此对话框,并从关系中删除此对象"
+msgid "Enlarge"
+msgstr "放大"
 
-msgid "Click to close the dialog and to abort deleting the objects"
-msgstr "点击以关闭此对话框,并放弃删除此对象"
+msgid "Shrink"
+msgstr "缩小"
 
 msgid ""
 "<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
@@ -5247,6 +5320,9 @@ msgstr "保留他们的删除状态"
 msgid "Undecide conflict between deleted state"
 msgstr "已删除状态之间未解决的冲突"
 
+msgid "Role"
+msgstr "角色"
+
 msgid "Primitive"
 msgstr "原型"
 
@@ -5473,9 +5549,9 @@ msgid ""
 "ways that are members of the same relation: the combined way will take the "
 "place of the original way in the relation.</html>"
 msgstr ""
-"<html>要结合的线是一个或多个关系的成员。请决定你是否要将结合后的线<strong>保留</strong>在关系中还是从关系中<strong>移除</"
-"strong>。<br>默认操作是<strong>保留</strong>第一条线而从关系中<strong>移除</strong>其余的线,然后结合后的线将"
-"在关系中取代原来第一条线的位置。</html>"
+"<html>将合并的路径是一个或多个关系的成员。请决定您是否要将合并后的路径<strong>保留</strong>在关系中,或是从关系中<strong>移"
+"除</strong>。<br>默认操作是<strong>保留</strong>第一条路径而从关系中<strong>移除</strong>其余路径,合并后的"
+"路径将在关系中取代原来第一条路径的位置。</html>"
 
 msgid ""
 "<html>The merged nodes are members in one or more relations. Please decide "
@@ -5485,13 +5561,16 @@ msgid ""
 "other nodes that are members of the same relation: the target node will take "
 "the place of the original node in the relation.</html>"
 msgstr ""
-"<html>合并的节点是来自一个或多个关系的成员。请决定您将把结果节点<strong>保留</strong>还是<strong>移除</strong>出这"
-"些关系。<br>默认选择是<strong>保留</strong>第一个节点而<strong>移除</strong>同一关系中的其他节点:即结果节点取代了原"
-"来节点在关系中的位置。</html>"
+"<html>将合并的节点是一个或多个关系的成员。请决定您是否要将合并后的节点<strong>保留</strong>在关系中,或是从关系中<strong>移"
+"除</strong>。<br>默认操作是<strong>保留</strong>第一个节点而从关系中<strong>移除</strong>其余节点,合并后的"
+"节点将在关系中取代原来第一个节点的位置。</html>"
 
 msgid "Apply this role to all members"
 msgstr "将这个角色应用到所有成员中"
 
+msgid "Pos."
+msgstr "次序。"
+
 msgid "Orig. Way"
 msgstr "原路径"
 
@@ -5639,6 +5718,42 @@ msgstr "解决冲突"
 msgid "Resolve conflicts for ''{0}''"
 msgstr "调解“{0}”的冲突"
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr "<html>请确认是否从<strong>1 个关系</strong>中删除<strong>1 个对象</strong>。</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>请确认是否从<strong>{0} 个关系</strong>中删除<strong>1 个对象</strong>。</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>请确认是否从<strong>{1} 个关系</strong>中删除<strong>{0} 个对象</strong>。</html>"
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] "正在删除 {0} 个对象"
+
+msgid "Delete objects"
+msgstr "正在删除对象"
+
+msgid "To delete"
+msgstr "要删除"
+
+msgid "From Relation"
+msgstr "从关系"
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr "点击以关闭此对话框,并从关系中删除此对象"
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr "点击以关闭此对话框,并放弃删除此对象"
+
 msgid "Filter objects and hide/disable them."
 msgstr "过滤对象并隐藏/停用它们。"
 
@@ -5740,8 +5855,8 @@ msgstr "高级的对象信息"
 msgid "map style"
 msgstr "地图样式"
 
-msgid " ({0})"
-msgstr " ({0})"
+msgid "edit counts"
+msgstr "编辑计数"
 
 msgid "not in data set"
 msgstr "不在数据集合中"
@@ -5878,6 +5993,10 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr "警告:选定的 2 个对象相同,但却有不完全相同的样式缓存。"
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] "{0} 位用户最后编辑了选择范围:"
+
 msgid "xml"
 msgstr "xml"
 
@@ -5887,25 +6006,54 @@ msgstr "mapcss"
 msgid "unknown"
 msgstr "不明"
 
+msgid "Enter the coordinates for the new node."
+msgstr "输入新节点的坐标。"
+
 msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr "您可以用空格、逗号或分号分隔经度和纬度。"
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr "使用正数或N、E指示北或东基方向。"
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr "南或西基方向则可以使用负数或S、W。"
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr "坐标值可以是三种格式中的一种:"
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr "<i>度</i><tt>°</tt>"
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr "<i>度</i><tt>°</tt> <i>分</i><tt>'</tt>"
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr "<i>度</i><tt>°</tt> <i>分</i><tt>'</tt> <i>秒</i><tt>&quot</tt>"
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+"符号 "
+"<tt>°</tt>、<tt>'</tt>、<tt>′</tt>、<tt>"</tt>、<tt>″</t"
+"t> 可选。"
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
 msgstr ""
-"输入新节点的坐标。<br />你可以用空格、逗号、分号分隔经纬度。<br />用正值或者字符N,E表示北半球和东半球。<br "
-"/>对于南半球和西半球你可以用负值或者字符S,W。<br "
-"/>坐标值可以用以下三种格式:<ul><li><i>度</i><tt>°</tt></li><i>度</i><tt>°</tt><i>分<"
-"/i><tt>'</tt></li><li><i>度</i><tt>°</tt><i>分</i><tt>'</tt> "
-"<i>秒</i><tt>&quot</tt></li></ul>符号<tt>°</tt>, <tt>'</tt>, "
-"<tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt>不是必须的。<br/><br/>例如:<ul>{0}</ul>"
+"您也可以使用 <tt>lat=\"...\" lon=\"...\"</tt> 或 <tt>lat=''...'' lon=''...''</tt> "
+"格式。"
+
+msgid "Some examples:"
+msgstr "一些示例:"
 
 msgid "Projected coordinates:"
 msgstr "投影坐标:"
@@ -5950,6 +6098,12 @@ msgstr "不透明度"
 msgid "Adjust opacity of the layer."
 msgstr "调整图层的不透明度。"
 
+msgid "Gamma"
+msgstr "Gamma"
+
+msgid "Adjust gamma value of the layer."
+msgstr "调整图层的 gamma 值。"
+
 msgid "Activate"
 msgstr "使用"
 
@@ -5990,7 +6144,7 @@ msgid "Move the selected layer one row down."
 msgstr "将选定的图层下移一列。"
 
 msgid "Information about layer"
-msgstr "关于图层的信息"
+msgstr "图层信息"
 
 msgid "Map paint preferences"
 msgstr "地图绘制首选项"
@@ -6079,44 +6233,50 @@ msgstr "样式设置"
 msgid "Customize the style"
 msgstr "自定义样式"
 
+msgid "Mini map"
+msgstr "小地图"
+
+msgid "Displays a small map of the current edit location"
+msgstr "显示当前编辑位置的小地图"
+
 msgid "List of notes"
-msgstr "地图注释列表"
+msgstr "笔记列表"
 
 msgid "Add comment"
 msgstr "添加评论"
 
 msgid "Comment"
-msgstr "备注"
+msgstr "评论"
 
 msgid "Comment on note"
-msgstr "注释的评论"
+msgstr "笔记的评论"
 
 msgid "Add comment to note:"
-msgstr "给注释添加评论"
+msgstr "为笔记添加评论:"
 
 msgid "Close note"
-msgstr "关闭注释"
+msgstr "关闭笔记"
 
 msgid "Close note with message:"
-msgstr "关闭注释并附言:"
+msgstr "关闭笔记并附言:"
 
 msgid "Create a new note"
-msgstr "新建地图注释"
+msgstr "新建笔记"
 
 msgid "Create"
 msgstr "创建"
 
 msgid "Reopen note"
-msgstr "重新开启地图注释"
+msgstr "重新开启笔记"
 
 msgid "Reopen"
 msgstr "重新开启"
 
 msgid "Reopen note with message:"
-msgstr "重启地图注释并附言:"
+msgstr "重新开启笔记并附言:"
 
 msgid "Sort notes"
-msgstr "注释排序"
+msgstr "排序笔记"
 
 msgid "Sort"
 msgstr "排序"
@@ -6137,14 +6297,17 @@ msgstr "对象 ID:"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "输入要下载的对象 ID:"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr "对象 ID 可用逗号或空格隔开,例如:{0}"
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
 msgstr ""
-"对象ID可以用逗号或空格分隔。<br "
-"/>例如:{0}<br/>在混合模式下,这样指定对象:{1}<br/>({2}代表<i>节点</i>,{3}代表<i>线</i>,{4}代表<i>关系</"
-"i>)"
+"在混合模式中,像这样指定对象:{0}<br/>({1} 表示 <i>节点</i>,{2} 表示 <i>路径</i>,{3} 表示 <i>关系</i>)"
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
+msgstr "用连字符指定对象 ID 的范围,例如:{0}"
 
 msgid ""
 "Invalid ID list specified\n"
@@ -6174,6 +6337,9 @@ msgstr "关系: {0}/{1}"
 msgid "Relations: {0}"
 msgstr "关系:{0}"
 
+msgid "Selection"
+msgstr "选择(N)"
+
 msgid "Open a selection list window."
 msgstr "打开选择范围列表窗口。"
 
@@ -6263,6 +6429,12 @@ msgstr "打开验证窗口。"
 msgid "Validation results"
 msgstr "验证结果"
 
+msgid "Lookup"
+msgstr "查找"
+
+msgid "Looks up the selected primitives in the error list."
+msgstr "在错误列表中查找选定的原型。"
+
 msgid "Fix"
 msgstr "修正"
 
@@ -6711,7 +6883,7 @@ msgstr "<html>下载在目前地图查看中的修改集合</html>"
 msgid ""
 "Unexpected value for preference ''{0}'', got ''{1}''. Resetting to default "
 "query."
-msgstr "偏好设置\"{0}\"中出现超出预期的值\"{1}\"。将重置为默认请求。"
+msgstr "首选项\"{0}\"中出现超出预期的值\"{1}\"。将重置为默认请求。"
 
 msgid "Cannot create changeset query for open changesets of anonymous user"
 msgstr "不能创建匿名用户的开放修改集合查询"
@@ -6776,29 +6948,27 @@ msgid "This changeset query URL is invalid"
 msgstr "这个修改集合查询 URL 是无效的"
 
 msgid "Discardable key: selection Foreground"
-msgstr ""
+msgstr "可丢弃键:选择前景"
 
 msgid "Discardable key: selection Background"
-msgstr ""
+msgstr "可丢弃键:选择背景"
 
 msgid "Discardable key: foreground"
-msgstr ""
+msgstr "可丢弃键:前景"
 
 msgid "Discardable key: background"
-msgstr ""
+msgstr "可丢弃键:背景"
 
 msgid "{0} ''{1}''"
-msgstr ""
+msgstr "{0} “{1}”"
 
 msgid "{0} different"
 msgid_plural "{0} different"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "{0} 不同"
 
 msgid ", {0} unset"
 msgid_plural ", {0} unset"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] ",{0} 未设置"
 
 msgid "Select objects for which to change tags."
 msgstr "请选择要更改标签的对象。"
@@ -6819,10 +6989,10 @@ msgid "<different>"
 msgstr "<不同>"
 
 msgid "Objects: {2} / Tags: {0} / Memberships: {1}"
-msgstr ""
+msgstr "对象:{2} / 标签:{0} / 所在关系:{1}"
 
 msgid "Tags: {0} / Memberships: {1}"
-msgstr "标签: {0} / 所在关系: {1}"
+msgstr "标签:{0} / 所在关系:{1}"
 
 msgid "Tags / Memberships"
 msgstr "标签/所在关系"
@@ -6860,6 +7030,12 @@ msgstr "转到 OSM 的维基页面查看标签的帮助内容(F1)"
 msgid "Launch browser with wiki help for selected object"
 msgstr "启动浏览器并显示选定对象的维基说明"
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr "粘贴值参"
 
@@ -6919,7 +7095,7 @@ msgid "An empty value deletes the tag."
 msgstr "空白的数值代表删除该标签。"
 
 msgid "You changed the key from ''{0}'' to ''{1}''."
-msgstr "你已将键名从\"{0}\"改为\"{1}\""
+msgstr "您已将键名从\"{0}\"改为\"{1}\""
 
 msgid "Change properties of up to {0} object"
 msgid_plural "Change properties of up to {0} objects"
@@ -6947,15 +7123,14 @@ msgstr "设置最近添加的标签数"
 msgid "Remember last used tags after a restart"
 msgstr "重启后仍记住最近使用的标签"
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
-msgstr ""
+msgid "to apply first suggestion"
+msgstr "以应用第一条建议"
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
-msgstr ""
+msgid "to add without closing the dialog"
+msgstr "以在不关闭对话框的情况下添加"
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
-msgstr ""
+msgid "to add first suggestion without closing the dialog"
+msgstr "以在不关闭对话框的情况下添加第一条建议"
 
 msgid "Please enter the number of recently added tags to display"
 msgstr "请输入应显示多少最近的新标签"
@@ -6979,7 +7154,7 @@ msgid "The key ''{0}'' is already used"
 msgstr "键“{0}”已被使用"
 
 msgid "You changed the value of ''{0}'' from ''{1}'' to ''{2}''."
-msgstr "你已将键\"{0}\"的值从\"{1}\"改为\"{2}\"."
+msgstr "您已将键\"{0}\"的值从\"{1}\"改为\"{2}\"."
 
 msgid "Edit the relation the currently selected relation member refers to."
 msgstr "编辑目前选定的关系成员所参照的关系。"
@@ -7126,6 +7301,12 @@ msgstr "排序关系成员"
 msgid "Relation Editor: Sort"
 msgstr "关系编辑器:排序"
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr "反转关系成员的顺序"
 
@@ -7424,7 +7605,7 @@ msgid "Select to download GPS traces in the selected download area."
 msgstr "选择以下载选定下载区域中的 GPS 轨迹。"
 
 msgid "Select to download notes in the selected download area."
-msgstr "选择下载选定区域内的地图注释"
+msgstr "选择下载选定区域内的笔记"
 
 msgid "Download as new layer"
 msgstr "下载为新图层"
@@ -7471,7 +7652,7 @@ msgid ""
 "data, or GPX data, or Notes, or all.</html>"
 msgstr ""
 "<html><strong>{0}</strong>,<strong>{1}</strong>,<strong>{2}</strong>均未开启。<br>"
-"请选择下载OSM数据、GPX数据、地图注释之一或者全部。</html>"
+"请选择下载OSM数据、GPX数据、笔记之一或者全部。</html>"
 
 msgid "Download referrers (parent relations)"
 msgstr "下载参照者(父关系)"
@@ -7674,6 +7855,9 @@ msgstr "正在加载关系 {0} 的历史记录"
 msgid "Node {0}"
 msgstr "节点 {0}"
 
+msgid "The nodes of this way are in reverse order"
+msgstr "此路径的节点为逆序"
+
 msgid "Zoom to node"
 msgstr "缩放到节点"
 
@@ -7702,13 +7886,13 @@ msgid "Changeset source"
 msgstr "修改集数据源"
 
 msgid "Imagery used"
-msgstr ""
+msgstr "使用的影像底图"
 
 msgid "<b>Source</b>:"
 msgstr "<b>来源</b>:"
 
 msgid "<b>Imagery</b>:"
-msgstr ""
+msgstr "<b>影像</b>"
 
 msgid ""
 "<html>Version <strong>{0}</strong> currently edited in layer ''{1}''</html>"
@@ -7719,7 +7903,7 @@ msgid ""
 msgstr "<html>版本 <strong>{0}</strong> 建立于 <strong>{1}</strong></html>"
 
 msgid "Changeset"
-msgstr ""
+msgstr "修改集合"
 
 msgid "Changeset info"
 msgstr "修改集合信息"
@@ -8146,13 +8330,13 @@ msgid "Delete layers without saving. Unsaved changes are lost."
 msgstr "不保存就删除图层。未保存的修改会丢失。"
 
 msgid "Perform actions before exiting"
-msgstr "在退出前执行的操作"
+msgstr "在退出前执行操作"
 
 msgid "Exit JOSM with saving. Unsaved changes are uploaded and/or saved."
 msgstr "保存后结束 JOSM。未保存的修改会上传和/或保存。"
 
 msgid "Perform actions before deleting"
-msgstr "在删除前执行的操作"
+msgstr "在删除前执行操作"
 
 msgid "Save/Upload layers before deleting. Unsaved changes are not lost."
 msgstr "删除图层前先保存/上传。未保存的修改不会消失。"
@@ -8266,8 +8450,8 @@ msgid ""
 "origins of the data.<br /><br />If you spend a minute now to explain your "
 "change, you will make life<br />easier for many other mappers."
 msgstr ""
-"你没有指定你的修改的数据源。<br />这在技术上是允许的,但是数据来源信息<br .>有助于其他用户理解数据的来源。<br /><br "
-"/>如果你现在花一点时间解释你的修改,你将给其他绘图者带来方便。"
+"您没有指定您修改的数据来源。<br />这在技术上是允许的,但此信息<br />有助于其他用户理解数据的来源。<br /><br "
+"/>如果您现在花一点时间解释您的修改,将给其他绘图者带来方便。"
 
 msgid "Revise"
 msgstr "修改"
@@ -8532,6 +8716,106 @@ msgid "{0} object to delete:"
 msgid_plural "{0} objects to delete:"
 msgstr[0] "{0} 个对象要删除:"
 
+msgid "Show Tile Info"
+msgstr "显示瓦片信息"
+
+msgid "Tile Info"
+msgstr "瓦片信息"
+
+msgid "Metadata "
+msgstr "元数据 "
+
+msgid "Auto Zoom"
+msgstr "自动缩放"
+
+msgid "Auto load tiles"
+msgstr "自动加载瓦片"
+
+msgid "Load All Tiles"
+msgstr "加载所有瓦片"
+
+msgid "Load All Error Tiles"
+msgstr "加载所有错误的瓦片"
+
+msgid "Zoom to native resolution"
+msgstr "缩放到原始分辨率"
+
+msgid "Change resolution"
+msgstr "更改分辨率"
+
+msgid "Failed to create tile source"
+msgstr "无法创建瓦片源"
+
+msgid "Show Errors"
+msgstr "显示错误"
+
+msgid "Load Tile"
+msgstr "加载瓦片"
+
+msgid "Increase zoom"
+msgstr "增加缩放"
+
+msgid "Decrease zoom"
+msgstr "减少缩放"
+
+msgid "Snap to tile size"
+msgstr "贴紧瓦片大小"
+
+msgid "Flush Tile Cache"
+msgstr "清除瓦片缓存"
+
+msgid "zoom in to load any tiles"
+msgstr "放大以加载瓦片"
+
+msgid "zoom in to load more tiles"
+msgstr "放大以加载更多瓦片"
+
+msgid "increase zoom level to see more detail"
+msgstr "缩小以查看更多信息"
+
+msgid "No tiles at this zoom level"
+msgstr "在此缩放等级没有瓦片"
+
+msgid "Current zoom: {0}"
+msgstr "当前缩放等级:{0}"
+
+msgid "Display zoom: {0}"
+msgstr "显示缩放等级:{0}"
+
+msgid "Pixel scale: {0}"
+msgstr "像素缩放等级:{0}"
+
+msgid "Best zoom: {0}"
+msgstr "最佳缩放等级:{0}"
+
+msgid "Cache stats: {0}"
+msgstr "缓存状态:{0}"
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr "{0} ({1}),正在自动以缩放 {2} 下载"
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr "{0} ({1}),正在以缩放 {2} 下载"
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr "下载 {0}/{1} 瓦片"
+
+msgid "Save WMS file"
+msgstr "保存 WMS 文件"
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr "航拍图像可能是错位的。请使用 GPS 轨迹检查偏移!"
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+
+msgid "Details..."
+msgstr "详细信息..."
+
+msgid "Hide this message and never show it again"
+msgstr "隐藏此消息,并不再显示"
+
 msgid "Customize Color"
 msgstr "自定义颜色"
 
@@ -8581,6 +8865,9 @@ msgstr "保存 GPX 文件"
 msgid "Imagery fade"
 msgstr "图像淡化"
 
+msgid "Unsupported imagery type: {0}"
+msgstr "不支持的图像类型:{0}"
+
 msgid "ERROR"
 msgstr "错误"
 
@@ -8601,24 +8888,24 @@ msgstr "支持所有的投影法"
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
-"图层 {0} 不支持新的投影法 {1}。\n"
-"{2}\n"
-"请再次更改投影法,或者删除图层。"
+"此图层 {0} 不支持新的投影法 {1}。\n"
+"支持的投影法为:{2}\n"
+"请再次更改投影法或删除图层。"
 
 msgid "Save Layer"
 msgstr "保存图层"
 
 msgid "Note"
-msgstr "注释"
+msgstr "笔记"
 
 msgid "Notes layer"
-msgstr "注释层"
+msgstr "笔记图层"
 
 msgid "Total notes:"
-msgstr "注释总数:"
+msgstr "总笔记:"
 
 msgid "Changes need uploading?"
 msgstr "需要上传修改吗?"
@@ -8686,85 +8973,6 @@ msgstr "尚有未解决的冲突。如果您全部拒绝就不会保存冲突。
 msgid "Save OSM file"
 msgstr "保存 OSM 文件"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
-msgstr ""
-"{0} 不是一个有效的 TMS 参数。请检查此服务器的 URL:\n"
-"{1}"
-
-msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
-msgstr ""
-"TMS 图层不支持投影法 {0}。\n"
-"{1}\n"
-"请更改投影法,或者删除图层。"
-
-msgid "Auto Zoom"
-msgstr "自动缩放"
-
-msgid "Auto load tiles"
-msgstr "自动加载瓦片"
-
-msgid "Show Errors"
-msgstr "显示错误"
-
-msgid "Load Tile"
-msgstr "加载瓦片"
-
-msgid "Show Tile Info"
-msgstr "显示瓦片信息"
-
-msgid "Load All Tiles"
-msgstr "加载所有瓦片"
-
-msgid "Load All Error Tiles"
-msgstr "加载所有错误的瓦片"
-
-msgid "Increase zoom"
-msgstr "增加缩放"
-
-msgid "Decrease zoom"
-msgstr "减少缩放"
-
-msgid "Snap to tile size"
-msgstr "贴紧瓦片大小"
-
-msgid "Flush Tile Cache"
-msgstr "清除瓦片缓存"
-
-msgid "zoom in to load any tiles"
-msgstr "放大以加载瓦片"
-
-msgid "zoom in to load more tiles"
-msgstr "放大以加载更多瓦片"
-
-msgid "increase zoom level to see more detail"
-msgstr "缩小以查看更多信息"
-
-msgid "No tiles at this zoom level"
-msgstr "在此缩放等级没有瓦片"
-
-msgid "Current zoom: {0}"
-msgstr "当前缩放等级:{0}"
-
-msgid "Display zoom: {0}"
-msgstr "显示缩放等级:{0}"
-
-msgid "Pixel scale: {0}"
-msgstr "像素缩放等级:{0}"
-
-msgid "Best zoom: {0}"
-msgstr "最佳缩放等级:{0}"
-
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr "TMS图层({0}),以缩放等级{1}下载"
-
 msgid "EPSG:4326 and Mercator projection are supported"
 msgstr "支持 EPSG:4326 和麦卡托投影法"
 
@@ -8774,57 +8982,31 @@ msgstr "验证错误"
 msgid "No validation errors"
 msgstr "没有验证错误"
 
-msgid "Blank Layer"
-msgstr "空白图层"
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr "下载 {0}/{1} 瓦片"
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr "WMS 图层({0}),于缩放 {1} 自动下载"
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr "WMS 图层({0}),于缩放 {1} 下载"
-
-msgid "Download visible tiles"
-msgstr "下载可见的瓦片"
-
-msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr "要求的区域太大。请放大一点,或是更改分辨率"
-
-msgid "Change resolution"
-msgstr "更改分辨率"
-
-msgid "Reload erroneous tiles"
-msgstr "重新加载错误的瓦片"
-
-msgid "Alpha channel"
-msgstr "Alpha 通道"
-
-msgid "Automatically change resolution"
-msgstr "自动更改分辨率"
-
 msgid "Set WMS Bookmark"
 msgstr "设定 WMS 书签"
 
-msgid "Automatic downloading"
-msgstr "自动下载"
+msgid ""
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
+msgstr "JOSM 将使用 EPSG:4326 向服务器发出查询,但 WMS 服务器的结果可能会有所不同"
 
-msgid "Zoom to native resolution"
-msgstr "缩放到原始分辨率"
+msgid "Correlate to GPX"
+msgstr "关联到 GPX"
 
-msgid "Supported projections are: {0}"
-msgstr "支持的投影法为:{0}"
+msgid "Invalid timezone"
+msgstr "无效的时区"
 
-msgid "Unsupported WMS file version; found {0}, expected {1}"
-msgstr "不支持的 WMS 文件版本;发现 {0},应为 {1}"
+msgid "Invalid offset"
+msgstr "无效的移位"
 
-msgid "Save WMS file"
-msgstr "保存 WMS 文件"
+msgid "Correlate images with GPX track"
+msgstr "将图片与 GPX 轨迹关联"
 
-msgid "Correlate to GPX"
-msgstr "关联到 GPX"
+msgid "Try Again"
+msgstr "再试一次"
+
+msgid "No images could be matched!"
+msgstr "无法配对任何图片!"
 
 msgid "GPX Files (*.gpx *.gpx.gz)"
 msgstr "GPX 文件(*.gpx *.gpx.gz)"
@@ -8913,24 +9095,9 @@ msgstr "时区: "
 msgid "Offset:"
 msgstr "偏移:"
 
-msgid "Correlate images with GPX track"
-msgstr "将图片与 GPX 轨迹关联"
-
 msgid "Correlate"
 msgstr "关联"
 
-msgid "Invalid timezone"
-msgstr "无效的时区"
-
-msgid "Invalid offset"
-msgstr "无效的移位"
-
-msgid "Try Again"
-msgstr "再试一次"
-
-msgid "No images could be matched!"
-msgstr "无法配对任何图片!"
-
 msgid "No gpx selected"
 msgstr "尚未选择 gpx"
 
@@ -8988,14 +9155,14 @@ msgid ""
 "Expected format: {0}"
 msgstr ""
 "分析时区时发生错误。\n"
-"预计的格式:{0}"
+"期望的格式:{0}"
 
 msgid ""
 "Error while parsing offset.\n"
 "Expected format: {0}"
 msgstr ""
 "在分析补偿时发生错误。\n"
-"预计的格式:{0}"
+"期望的格式:{0}"
 
 msgid "Extracting GPS locations from EXIF"
 msgstr "正在从 EXIF 中提取 GPS 位置"
@@ -9034,7 +9201,7 @@ msgstr[0] "发现 {0} 已有 GPS 标签。"
 
 msgid "{0} has updated GPS data."
 msgid_plural "{0} have updated GPS data."
-msgstr[0] "{0}更新了GPS数据。"
+msgstr[0] "{0} 更新了 GPS 数据。"
 
 msgid "Delete image file from disk"
 msgstr "从磁盘删除图片文件"
@@ -9133,9 +9300,6 @@ msgstr ""
 "\n"
 "GPS 时间:{0}"
 
-msgid "JPEG images (*.jpg)"
-msgstr "JPEG 图片(*.jpg)"
-
 msgid "Show thumbnails"
 msgstr "显示缩略图"
 
@@ -9200,9 +9364,6 @@ msgstr "米"
 msgid "Maximum area per request:"
 msgstr "每个要求最大区域:"
 
-msgid "sq km"
-msgstr "平方千米"
-
 msgid "Download near:"
 msgstr "下载接近:"
 
@@ -9261,7 +9422,7 @@ msgid "gps point"
 msgstr "gps 点"
 
 msgid "Import Audio"
-msgstr "输入音频"
+msgstr "导入音频"
 
 msgid ""
 "<html>The data in the GPX layer ''{0}'' has been downloaded from the "
@@ -9293,7 +9454,7 @@ msgid ""
 msgstr "部分离轨迹太远而无法明显判断其时间的路点会被忽略。"
 
 msgid "Import images"
-msgstr "输入图片"
+msgstr "导入图片"
 
 msgid ""
 "<html>The data in the GPX layer ''{0}'' has been downloaded from the "
@@ -9702,10 +9863,10 @@ msgid "Select to grant JOSM the right to write your server preferences"
 msgstr "选择以使 JOSM 有权写入您服务器的首选项"
 
 msgid "Allow modifications of notes"
-msgstr "允许修改注释"
+msgstr "允许修改笔记"
 
 msgid "Select to grant JOSM the right to modify notes on your behalf"
-msgstr "选择以使 JOSM 有权修改注释"
+msgstr "选择以使 JOSM 有权修改笔记"
 
 msgid "Retrieving OAuth Access Token..."
 msgstr "正在取回 OAuth 访问令牌..."
@@ -9857,15 +10018,15 @@ msgstr "关闭首选项窗口,并放弃首选项的更新"
 msgid "Save the preferences and close the dialog"
 msgstr "保存首选项,并关闭对话框"
 
-msgid "Download plugins"
-msgstr "下载插件"
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr "您必须重新启动 JOSM,才能让某些设定值生效。"
 
 msgid "Would you like to restart now?"
 msgstr "您想要现在重启吗?"
 
+msgid "Download plugins"
+msgstr "下载插件"
+
 msgid "Icon paths:"
 msgstr "图标路径:"
 
@@ -9885,7 +10046,7 @@ msgid "Version:"
 msgstr "版本:"
 
 msgid "Minimum JOSM Version:"
-msgstr "最低的JOSM版本"
+msgstr "最低 JOSM 版本:"
 
 msgid "by {0}"
 msgstr "由 {0}"
@@ -10172,7 +10333,7 @@ msgid "Named trackpoints."
 msgstr "已命名的轨迹点。"
 
 msgid "Modified times (time stamps) of audio files."
-msgstr "音频文件的修改次数(时间戳记)。"
+msgstr "音频文件的修改次数(时间戳)。"
 
 msgid "Start of track (will always do this if no other markers available)."
 msgstr "轨迹的开头(如果没有其他的标记可用就会这么做)。"
@@ -10191,10 +10352,10 @@ msgid ""
 msgstr "在音频(和图片、网页)标记的按钮图标旁放上文字标签。"
 
 msgid "When importing audio, make markers from..."
-msgstr "输入音频时,由此制作标记..."
+msgstr "导入音频时,由此制作标记..."
 
 msgid "When importing audio, apply it to any waypoints in the GPX layer."
-msgstr "输入音频时,将它应用到 GPX 图层的任何路点中。"
+msgstr "导入音频时,将它应用到 GPX 图层的任何路点中。"
 
 msgid ""
 "Automatically create audio markers from trackpoints (rather than explicit "
@@ -10554,10 +10715,10 @@ msgid "Dynamic buttons in side menus"
 msgstr "侧菜单栏中的动态按钮"
 
 msgid "Display ISO dates"
-msgstr "显示ISO日期"
+msgstr "显示 ISO 日期"
 
 msgid "Use native file choosers (nicer, but do not support file filters)"
-msgstr "使用原生文件选择器(更美观但不支持文件过滤功能)"
+msgstr "使用原生文件选择器(更美观但不支持文件过滤功能)"
 
 msgid "Show localized name in selection lists, if available"
 msgstr "如果可以,在选择范围列表中显示本地化的名称"
@@ -10575,7 +10736,7 @@ msgstr "ISO 8601"
 msgid ""
 "Format dates according to {0}. Today''s date will be displayed as {1} "
 "instead of {2}"
-msgstr "根据{0}格式化日期。今天的日期将显示为{1}而非{2}"
+msgstr "根据 {0} 格式化日期。今天的日期将显示为 {1} 而非 {2}"
 
 msgid ""
 "Use file choosers that behave more like native ones. They look nicer but do "
@@ -10595,64 +10756,64 @@ msgid "Add Imagery URL"
 msgstr "添加图像 URL"
 
 msgid "1. Enter URL"
-msgstr "输入URL"
+msgstr "1. 输入 URL"
 
 msgid ""
 "{0} is replaced by tile zoom level, also supported:<br>offsets to the zoom "
 "level: {1} or {2}<br>reversed zoom level: {3}"
-msgstr ""
+msgstr "瓦片缩放等级由 {0} 替代,还支持:<br>缩放等级偏移:{1} 或 {2}<br>反向缩放等级:{3}"
 
 msgid "{0} is replaced by X-coordinate of the tile"
-msgstr "{0}由地图瓦片的X坐标替换"
+msgstr "{0} 由地图瓦片的 X 坐标替换"
 
 msgid "{0} is replaced by Y-coordinate of the tile"
-msgstr "{0}由地图瓦片的Y坐标替换"
+msgstr "{0} 由地图瓦片的 Y 坐标替换"
 
 msgid "{0} is replaced by {1} (Yahoo style Y coordinate)"
-msgstr "{0}由{1}替换(雅虎Y坐标)"
+msgstr "{0} 由 {1} 替换(雅虎 Y 坐标)"
 
 msgid ""
 "{0} is replaced by {1} (OSGeo Tile Map Service Specification style Y "
 "coordinate)"
-msgstr "{0}由{1}替换(OSGeo瓦片地图服务的Y坐标)"
+msgstr "{0} 由 {1} 替换(OSGeo 瓦片地图服务的 Y 坐标)"
 
 msgid ""
 "{0} is replaced by a random selection from the given comma separated list, "
 "e.g. {1}"
-msgstr "{0}由给定的逗号分隔列表中的随机项替换,如{1}"
+msgstr "{0} 由给定的逗号分隔列表中的随机项替换,如 {1}"
 
 msgid "2. Enter maximum zoom (optional)"
-msgstr "请输入最高的缩放 (可选)"
+msgstr "2. 输入最高缩放等级(可选)"
 
 msgid "3. Verify generated TMS URL"
-msgstr "验证生成的 TMS URL"
+msgstr "3. 验证生成的 TMS URL"
 
 msgid "4. Enter name for this layer"
-msgstr "请输入层名字"
+msgstr "4. 输入图层名称"
 
 msgid "Store WMS endpoint only, select layers at usage"
-msgstr ""
+msgstr "仅存储 WMS 终点,选择正在使用的图层"
 
 msgid "Show bounds"
 msgstr "显示边界"
 
 msgid "1. Enter service URL"
-msgstr "请输入服务的URL"
+msgstr "1. 输入服务 URL"
 
 msgid "Get layers"
-msgstr "检索面板"
+msgstr "获取图层"
 
 msgid "2. Select layers"
-msgstr "选择层"
+msgstr "2. 选择图层"
 
 msgid "3. Select image format"
-msgstr "3.选择图像格式"
+msgstr "3. 选择图像格式"
 
 msgid "4. Verify generated WMS URL"
-msgstr "确认生成的WMS URL地址"
+msgstr "4. 验证生成的 WMS URL"
 
 msgid "5. Enter name for this layer"
-msgstr "输入该图层的名称"
+msgstr "5. 输入图层名称"
 
 msgid "Show Bounds"
 msgstr "显示边界"
@@ -10660,6 +10821,21 @@ msgstr "显示边界"
 msgid "No bounding box was found for this layer."
 msgstr "找不到这个图层的限定边框。"
 
+msgid "1. Enter getCapabilities URL"
+msgstr "1. 输入 getCapabilities URL"
+
+msgid "2. Enter name for this layer"
+msgstr "2. 输入图层名称"
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr "淡化图像"
 
@@ -10678,6 +10854,18 @@ msgstr "强烈"
 msgid "Sharpen (requires layer re-add): "
 msgstr "锐化(需要重新添加图层): "
 
+msgid "Tile cache directory: "
+msgstr "瓦片缓存目录: "
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr "最大磁盘缓存大小(每图像,MB): "
+
+msgid "Maximum number of objects in memory cache: "
+msgstr "最大内存缓存对象数量: "
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr "图像首选项"
 
@@ -10699,6 +10887,9 @@ msgstr "图像提供者"
 msgid "Offset bookmarks"
 msgstr "偏移书签"
 
+msgid "Cache contents"
+msgstr "缓存内容"
+
 msgid "Imagery Background: Default"
 msgstr "背景图像:默认"
 
@@ -10741,9 +10932,6 @@ msgstr "EULA 授权 URL 无法使用:{0}"
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr "EULA 授权的 URL 格式错误:{0}"
 
-msgid "Projection"
-msgstr "投影法"
-
 msgid "Layer"
 msgstr "层"
 
@@ -10768,17 +10956,11 @@ msgstr "最大缩放级别: "
 msgid "Add to slippymap chooser: "
 msgstr "添加到快速地图选择器: "
 
-msgid "Tile cache directory: "
-msgstr "瓦片缓存目录: "
-
 msgid "Maximum concurrent downloads: "
-msgstr ""
+msgstr "最大并发下载数: "
 
 msgid "Maximum concurrent downloads per host: "
-msgstr ""
-
-msgid "Maximum elements in disk cache: "
-msgstr ""
+msgstr "每个主机最大并发下载数: "
 
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
@@ -10787,20 +10969,11 @@ msgstr ""
 "那个图层不支持任何 JOSM 的投影法,\n"
 "因此您不能使用它。这条信息不会再显示。"
 
-msgid "Downloader:"
-msgstr "下载器:"
-
 msgid "Simultaneous connections:"
 msgstr "同时连接:"
 
-msgid "Overlap tiles"
-msgstr "重叠瓦片"
-
-msgid "% of east:"
-msgstr "% 东:"
-
-msgid "% of north:"
-msgstr "% 北:"
+msgid "Tile size:"
+msgstr "拼贴尺寸:"
 
 msgid "Auto save enabled"
 msgstr "启用自动保存"
@@ -10884,7 +11057,7 @@ msgid "Warning: illegal format of entry in style list ''{0}''. Got ''{1}''"
 msgstr "警告:样式列表“{0}”中项目的格式不正确。得到“{1}”。"
 
 msgid "JOSM default (MapCSS)"
-msgstr "JOSM默认(MapCSS)"
+msgstr "JOSM 默认(MapCSS)"
 
 msgid ""
 "Internal style to be used as base for runtime switchable overlay styles"
@@ -11162,7 +11335,7 @@ msgid "Projection bounds (in degrees)"
 msgstr "投影范围(度)"
 
 msgid "Sets the SRS=... parameter in the WMS request"
-msgstr "在WMS请求中设置参数SRS=..."
+msgstr "在 WMS 请求中设置参数 SRS=..."
 
 msgid "Gauß-Krüger"
 msgstr "高斯克鲁格"
@@ -11303,33 +11476,33 @@ msgid ""
 "(https) on localhost.<br>These ports are not configurable because they are "
 "referenced by external applications talking to JOSM."
 msgstr ""
-"JOSM将持续监听本机的<b>{0}端口</b>(http)和<b>{1}端口</b>(https)。<br>这些端口由于被外部应用程序同JOSM通信占用"
-"而不能配置。"
+"JOSM 将监听本机<b>端口 {0}</b>(http)和<b>端口 {1}</b>(https)。<br>这些端口是外部应用程序同 JOSM "
+"通信的参考,因而不能被配置。"
 
 msgid "Enable remote control"
 msgstr "启用远程控制"
 
 msgid "Enable HTTPS support"
-msgstr "启用HTTPS支持"
+msgstr "启用 HTTPS 支持"
 
 msgid "Install..."
 msgstr "安装..."
 
 msgid "Uninstall..."
-msgstr "卸载…"
+msgstr "卸载..."
 
 msgid "Install JOSM localhost certificate to system/browser root keystores"
-msgstr "向系统/浏览器的根证书库安装JOSM本地证书"
+msgstr "向系统/浏览器的根证书库安装 JOSM 本地证书"
 
 msgid ""
 "Uninstall JOSM localhost certificate from system/browser root keystores"
-msgstr "从系统/浏览器的根证书库卸载JOSM本地证书"
+msgstr "从系统/浏览器的根证书库卸载 JOSM 本地证书"
 
 msgid "Certificate:"
 msgstr "证书:"
 
 msgid "Certificate has been successfully installed."
-msgstr "证书已被成功安装。"
+msgstr "证书已成功安装。"
 
 msgid "Certificate is already installed. Nothing to do."
 msgstr "证书已安装。无需操作。"
@@ -11338,7 +11511,7 @@ msgid "Removing certificate {0} from root keystore."
 msgstr "正在从根证书库中移除证书{0}。"
 
 msgid "Certificate has been successfully uninstalled."
-msgstr "证书已被成功卸载。"
+msgstr "证书已成功卸载。"
 
 msgid "Certificate is not installed. Nothing to do."
 msgstr "证书未安装。无需操作。"
@@ -11397,7 +11570,7 @@ msgstr "使用基本验证"
 
 msgid ""
 "Select to use HTTP basic authentication with your OSM username and password"
-msgstr "选择以使用您的 OSM 用户名和密码进行 HTTP 验证"
+msgstr "选此以使用您的 OSM 用户名和密码进行 HTTP 验证"
 
 msgid "Use OAuth"
 msgstr "使用 OAuth"
@@ -11417,33 +11590,33 @@ msgid "OSM password:"
 msgstr "OSM 密码:"
 
 msgid "Failed to retrieve OSM credentials from credential manager."
-msgstr "无法从信任证管理器获取OSM信任证。"
+msgstr "无法从凭据管理器获取 OSM 凭据。"
 
 msgid "Current credential manager is of type ''{0}''"
 msgstr "目前的凭证管理程序类型为“{0}”"
 
 msgid "Failed to save OSM credentials to credential manager."
-msgstr "无法将OSM信任证保存至信任证管理器。"
+msgstr "无法将 OSM 凭据保存至凭据管理器。"
 
 msgid "Periodically check for new messages"
 msgstr "定期检查新消息"
 
 msgid "Check interval (minutes):"
-msgstr "检查间隔(分钟):"
+msgstr "检查间隔(分钟):"
 
 msgid "Max age for closed notes (days):"
-msgstr ""
+msgstr "已关闭笔记的最大生存时间(天):"
 
 msgid ""
 "Specifies the number of days a note needs to be closed to no longer be "
 "downloaded"
-msgstr ""
+msgstr "设定下载未处理笔记的最长追溯天数:"
 
 msgid "Failed to retrieve OAuth Access Token from credential manager"
-msgstr "无法从信任证管理器获取OAuth访问令牌"
+msgstr "无法从凭据管理器获取 OAuth 访问令牌"
 
 msgid "Failed to store OAuth Access Token to credentials manager"
-msgstr "无法将OAuth访问令牌储存至信任证管理器"
+msgstr "无法将 OAuth 访问令牌存储至凭据管理器"
 
 msgid ""
 "You do not have an Access Token yet to access the OSM server using OAuth. "
@@ -11533,7 +11706,7 @@ msgstr "使用 SOCKS 代理服务器"
 msgid ""
 "JOSM is configured to use proxies from the system setting, but the JVM is "
 "not configured to retrieve them. Resetting preferences to ''No proxy''"
-msgstr "JOSM被配置为使用系统设置的代理服务器,但Java虚拟机尚未被配置。将偏好设置重置为“无代理”。"
+msgstr "JOSM 已配置为使用系统设定值,但 Java 虚拟机未设置为允许检索此设定。将首选项重置为“无代理”。"
 
 msgid "Connection Settings"
 msgstr "连接设定值"
@@ -11577,7 +11750,7 @@ msgid ""
 msgstr "OSM 数据检验器,能够检查用户与编辑器程序造成的一般性错误。"
 
 msgid "Available rules:"
-msgstr "可达性规则:"
+msgstr "可用规则:"
 
 msgid "Active rules:"
 msgstr "有效规则:"
@@ -11598,15 +11771,15 @@ msgid "Add the selected available rules to the list of active rules"
 msgstr "将所选可用规则加入有效规则"
 
 msgid "Reloads the list of available rules from ''{0}''"
-msgstr "重新从{0}中加载可用规则列表"
+msgstr "重新从 {0} 中加载可用规则列表"
 
 msgid "Loading rule sources from ''{0}''"
-msgstr "从{0}中加载规则源"
+msgstr "从 {0} 中加载规则源"
 
 msgid ""
 "<html>Failed to load the list of rule sources "
 "from<br>''{0}''.<br><br>Details (untranslated):<br>{1}</html>"
-msgstr "<html>从{0}加载规则源失败。<br><br>详情如下(可能未翻译):<br>{1}</html>"
+msgstr "<html>从 {0} 加载规则源失败。<br><br>详细信息(未翻译):<br>{1}</html>"
 
 msgid "Warning: illegal format of entry in rule list ''{0}''. Got ''{1}''"
 msgstr "警告:规则列表\"{0}\"中非法的条目格式\"{1}\""
@@ -11621,10 +11794,10 @@ msgid "Checks for missing tag or suspicious combinations"
 msgstr "检查缺漏标签或可疑标签组合"
 
 msgid "Deprecated features"
-msgstr "不建议使用的要素"
+msgstr "不建议使用的特征"
 
 msgid "Checks for deprecated features"
-msgstr "检验不建议使用的要素"
+msgstr "检查不建议使用的特征"
 
 msgid "Geometry"
 msgstr "几何"
@@ -11750,6 +11923,14 @@ msgstr "应用预设组合"
 msgid "New relation"
 msgstr "新建关系"
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] "更改 {0} 个对象"
@@ -11857,6 +12038,9 @@ msgstr "显示预设组合搜索对话框"
 msgid "Search presets"
 msgstr "搜索预设组合"
 
+msgid "Presets"
+msgstr "预设组合(P)"
+
 msgid "Search for objects by preset"
 msgstr "按预设组合搜索对象"
 
@@ -11878,10 +12062,10 @@ msgid "Adjustable {0} not registered yet."
 msgstr "可调整的 {0} 尚未注册。"
 
 msgid "Some of the key listeners forgot to remove themselves: {0}"
-msgstr "部分键盘监听器忘记移除自身:{0}"
+msgstr "部分按键监听器忘记移除自身:{0}"
 
 msgid "Some of the key modifier listeners forgot to remove themselves: {0}"
-msgstr ""
+msgstr "部分按键修饰监听器忘记移除自身:{0}"
 
 msgid "All files (*.*)"
 msgstr "所有文件(*.*)"
@@ -12027,7 +12211,7 @@ msgstr "无法从“{0}”读取。服务器响应状态代码 {1}。"
 msgid ""
 "Illegal value of attribute ''{0}'' of element ''{1}'' in server "
 "capabilities. Got ''{2}''"
-msgstr ""
+msgstr "服务器功能中元素“{1}”的属性“{0}”值非法。得到“{2}”"
 
 msgid "Failed to parse date ''{0}'' replied by server."
 msgstr "解析服务器返回的日期“{0}”失败。"
@@ -12066,31 +12250,31 @@ msgstr "首选项“{0}”中有无效的端口号。得到“{1}”。"
 msgid ""
 "Unexpected value for preference ''{0}'' found. Got ''{1}''. Will use no "
 "proxy."
-msgstr "首选项\"{0}\"中发现意外值\"{1}\"。将不使用代理。"
+msgstr "首选项“{0}”中发现意外值“{1}”。将不使用代理。"
 
 msgid ""
 "Unexpected parameters for HTTP proxy. Got host ''{0}'' and port ''{1}''."
-msgstr "HTTP代理服务器意外参数:主机\"{0}\",端口\"{1}\""
+msgstr "HTTP 代理服务器意外参数:主机\"{0}\",端口\"{1}\"。"
 
 msgid ""
 "Unexpected parameters for SOCKS proxy. Got host ''{0}'' and port ''{1}''."
-msgstr "SOCKS代理服务器意外参数:主机\"{0}\",端口\"{1}\""
+msgstr "SOCKS 代理服务器意外参数:主机\"{0}\",端口\"{1}\"。"
 
 msgid ""
 "Connection to proxy ''{0}'' for URI ''{1}'' failed. Exception was: {2}"
-msgstr "与位于\"{1}\"的代理服务器\"{0}\"连接失败。异常如下:{2}"
+msgstr "与位于\"{1}\"的代理服务器\"{0}\"连接失败。异常为:{2}"
 
 msgid ""
 "The JVM is not configured to lookup proxies from the system settings. The "
 "property ''java.net.useSystemProxies'' was missing at startup time.  Will "
 "not use a proxy."
-msgstr "JVM未被配置为从系统设置中查找代理。启动时''java.net.useSystemProxies''属性丢失。将不使用代理服务器。"
+msgstr "JVM 未配置为从系统设置中查找代理。启动时“java.net.useSystemProxies”属性丢失。将不使用代理服务器。"
 
 msgid "Parsing response from server..."
 msgstr "正在分析服务器的回应..."
 
 msgid "Unexpected XML element with name ''{0}''"
-msgstr "XML 元素有意外的名称“{0}”"
+msgstr "XML 元素意外名称“{0}”"
 
 msgid "Could not export ''{0}''."
 msgstr "无法导出“{0}”。"
@@ -12110,6 +12294,9 @@ msgstr "<html>无法读取文件。<br>错误为:<br>{0}</html>"
 msgid "GeoJSON Files"
 msgstr "GeoJSON 文件"
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr "不支持图层“{0}”"
 
@@ -12206,10 +12393,10 @@ msgid "Click here to see your inbox."
 msgstr "点击这里查看您的收件箱。"
 
 msgid "Message notifier"
-msgstr ""
+msgstr "消息通知"
 
 msgid "{0} not available (offline mode)"
-msgstr "{0}暂时不可用(离线模式)"
+msgstr "{0} 暂时不可用(离线模式)"
 
 msgid ""
 "No primitive with id {0} in local dataset. Cannot infer primitive type."
@@ -12255,37 +12442,37 @@ msgid "Coordinates imported: {0}"
 msgstr "导入的坐标:{0}"
 
 msgid "Malformed sentences: {0}"
-msgstr "格式错误的句子:{0}"
+msgstr "格式错误的语句:{0}"
 
 msgid "Checksum errors: {0}"
 msgstr "校验错误:{0}"
 
 msgid "Unknown sentences: {0}"
-msgstr "未知的句子:{0}"
+msgstr "未知语句:{0}"
 
 msgid "Zero coordinates: {0}"
 msgstr "零坐标:{0}"
 
 msgid "NMEA import success:"
-msgstr "NMEA导入成功:"
+msgstr "NMEA 导入成功:"
 
 msgid "NMEA import failure!"
-msgstr "NMEA 输入失败!"
+msgstr "NMEA 导入失败!"
 
 msgid "Note Files"
-msgstr "注释文件"
+msgstr "笔记文件"
 
 msgid "OSM API"
 msgstr "OSM API"
 
 msgid "JOSM website"
-msgstr "JOSM网站"
+msgstr "JOSM 网站"
 
 msgid "Unable to access ''{0}'': {1} not available (offline mode)"
 msgstr "无法访问\"{0}\":{1}(离线模式)"
 
 msgid "Unable to initialize OSM API."
-msgstr "OSM API无法初始化"
+msgstr "无法初始化 OSM API。"
 
 msgid "This version of JOSM is incompatible with the configured server."
 msgstr "这个版本的 JOSM 与设定的服务器。"
@@ -12309,10 +12496,10 @@ msgid "Creating changeset..."
 msgstr "正在建立修改集合..."
 
 msgid "Successfully opened changeset {0}"
-msgstr "成功开放修改集合 {0}"
+msgstr "成功开启修改集合 {0}"
 
 msgid "Changeset ID > 0 expected. Got {0}."
-msgstr "预计修改集合 ID > 0 。得到 {0}。"
+msgstr "期望修改集合 ID > 0 。得到 {0}。"
 
 msgid "Updating changeset..."
 msgstr "正在更新修改集合..."
@@ -12351,10 +12538,10 @@ msgid "Open changeset expected. Got closed changeset with id {0}."
 msgstr "需要开放的修改集合。却发现 id {0} 的关闭修改集合。"
 
 msgid "Note upload failed"
-msgstr "注释上传失败"
+msgstr "笔记上传失败"
 
 msgid "Error parsing note response from server"
-msgstr "解析服务器返回的地图注释响应失败"
+msgstr "解析服务器返回的笔记响应失败"
 
 msgid "(Code={0})"
 msgstr "(代码={0})"
@@ -12405,13 +12592,13 @@ msgid "Parsing changeset content ..."
 msgstr "正在分析修改集合内容..."
 
 msgid "Illegal boolean value for attribute ''{0}''. Got ''{1}''."
-msgstr "属性“{0}”有不合法的布尔值。得到“{1}”。"
+msgstr "属性“{0}”布尔值非法。得到“{1}”。"
 
 msgid "Illegal value for attribute ''{0}''. Got ''{1}''."
-msgstr "属性“{0}”有不合法的数值。得到“{1}”。"
+msgstr "属性“{0}”值非法。得到“{1}”。"
 
 msgid "Illegal numeric value for attribute ''{0}''. Got ''{1}''."
-msgstr "属性“{0}”有不合法的数字值。得到“{1}”。"
+msgstr "属性“{0}”数字值非法。得到“{1}”。"
 
 msgid "Missing mandatory attribute ''{0}'' of XML element {1}."
 msgstr "XML 元素“{0}”缺少必要属性“{1}”。"
@@ -12426,7 +12613,7 @@ msgid "Failed to sign a HTTP connection with an OAuth Authentication header"
 msgstr "无法以 OAuth 验证标头签署 HTTP 连接"
 
 msgid "Unexpected value for preference ''{0}''. Got ''{1}''."
-msgstr "首选项\"{0}\"的意外值\"{1}\""
+msgstr "首选项\"{0}\"值意外。得到\"{1}\"。"
 
 msgid "<html>An error occurred while saving.<br>Error is:<br>{0}</html>"
 msgstr "<html>在保存时发生错误。<br>错误为:<br>{0}</html>"
@@ -12480,18 +12667,18 @@ msgid "Deleted relation {0} contains members"
 msgstr "删除的关系 {0} 包含成员"
 
 msgid "Missing attribute ''ref'' on member in relation {0}."
-msgstr "在关系 {0} 的成员缺少属性 \"ref\"。"
+msgstr "关系 {0} 的成员缺少属性 \"ref\"。"
 
 msgid ""
 "Illegal value for attribute ''ref'' on member in relation {0}. Got {1}"
-msgstr "在关系 {0} 的成员属性 \"ref\"有不合法的数值。得到 {1}"
+msgstr "关系 {0} 的成员属性 \"ref\"值非法。得到 {1}"
 
 msgid "Missing attribute ''type'' on member {0} in relation {1}."
-msgstr "在关系 {1} 的成员 {0} 缺少属性“type”。"
+msgstr "关系 {1} 的成员 {0} 缺少属性“type”。"
 
 msgid ""
 "Illegal value for attribute ''type'' on member {0} in relation {1}. Got {2}."
-msgstr "在关系 {1} 的成员 {0} 属性“type”有不合法的数值。得到 {2}。"
+msgstr "关系 {1} 的成员 {0} 属性“type”值非法。得到 {2}。"
 
 msgid "Incomplete <member> specification with ref=0"
 msgstr "不完整的 <member> 规格,ref=0"
@@ -12508,23 +12695,23 @@ msgstr "不合法的对象,id=0"
 msgid ""
 "Illegal value for attribute ''version'' on OSM primitive with ID {0}. Got "
 "{1}."
-msgstr "在 OSM 原型 ID {0} 的属性“version”有不合法的数值。得到 {1}。"
+msgstr "OSM 原型 ID {0} 的属性“version”值非法。得到 {1}。"
 
 msgid ""
 "Normalizing value of attribute ''version'' of element {0} to {2}, API "
 "version is ''{3}''. Got {1}."
-msgstr "正在从{0}到{2}归一化元素“版本”属性{1}, API版本是\"{3}\""
+msgstr "正在正规化元素 {0} 的属性“version”为 {2},API 版本为\"{3}\"。得到 {1}。"
 
 msgid "Unknown or unsupported API version. Got {0}."
 msgstr "不明或不支持的 API 版本。得到 {0}。"
 
 msgid "Missing attribute ''version'' on OSM primitive with ID {0}."
-msgstr "在 OSM 原型 ID {0} 缺少属性“version”。"
+msgstr "OSM 原型 ID {0} 缺少属性“version”。"
 
 msgid ""
 "Illegal value for attribute ''changeset'' on new object {1}. Got {0}. "
 "Resetting to 0."
-msgstr "在新对象 {1} 的属性“changeset”中,有不合法的数值。得到 {0}。重设为 0。"
+msgstr "新对象 {1} 的属性“changeset”值非法。得到 {0}。重设为 0。"
 
 msgid "Illegal value for attribute ''changeset''. Got {0}."
 msgstr "属性“changeset”有不合法的数值。得到“{0}”。"
@@ -12533,10 +12720,10 @@ msgid "Missing required attribute ''{0}''."
 msgstr "缺少必要的属性“{0}”。"
 
 msgid "Illegal long value for attribute ''{0}''. Got ''{1}''."
-msgstr "属性“{0}”有不合法的 long 数值。得到“{1}”。"
+msgstr "属性“{0}” long 数值非法。得到“{1}”。"
 
 msgid "{0} bytes have been read"
-msgstr "已读入{0}字节"
+msgstr "已读入 {0} 字节"
 
 msgid "Prepare OSM data..."
 msgstr "准备 OSM 数据..."
@@ -12585,20 +12772,20 @@ msgid "Contacting Server..."
 msgstr "正在连接服务器..."
 
 msgid "Downloading OSM notes..."
-msgstr "正在下载OSM地图注释"
+msgstr "正在下载 OSM 笔记..."
 
 msgid "Failed to open connection to API {0}."
 msgstr "打开 API {0} 连接失败"
 
 msgid ""
 "Could not connect to the OSM server. Please check your internet connection."
-msgstr "无法连接到 osm 服务器。请检查您的互联网网络连接。"
+msgstr "无法连接到 OSM 服务器。请检查您的网络连接。"
 
 msgid "Reading error text failed."
 msgstr "读取错误文本失败。"
 
 msgid "XML tag <user> is missing."
-msgstr "缺少了 XML 标签 <user>。"
+msgstr "缺少 XML 标签 <user>。"
 
 msgid "Missing attribute ''{0}'' on XML tag ''{1}''."
 msgstr "XML 标签“{1}”缺少了属性“{0}”。"
@@ -12641,11 +12828,14 @@ msgid "Unexpected id 0 for osm primitive found"
 msgstr "发现意外的 id 0 osm 原型"
 
 msgid "OSM Server Files zip compressed"
-msgstr "OSM服务器文件被压缩为zip"
+msgstr "OSM 服务器 zip 压缩文件"
 
 msgid "WMS Files (*.wms)"
 msgstr "WMS 文件(*.wms)"
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr "不支持的 WMS 文件版本;发现 {0},应为 {1}"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12663,7 +12853,7 @@ msgid "<delete from {0} objects>"
 msgstr "<从 {0} 个对象中删除>"
 
 msgid "Old values of"
-msgstr ""
+msgstr "旧值"
 
 msgid "Add tags to selected objects"
 msgstr "将标签添加到选定的对象中"
@@ -12690,7 +12880,7 @@ msgid "Enable the checkbox to accept the value"
 msgstr "启用该复选框可接值参"
 
 msgid "Accept all tags from {0} for this session"
-msgstr ""
+msgstr "本次回话接受所有来自{0}的标签"
 
 msgid "Load data from API"
 msgstr "从 API 加载数据"
@@ -12714,28 +12904,28 @@ msgid "Create new objects"
 msgstr "创建新对象"
 
 msgid "Read protocol version"
-msgstr "读取通讯许可证版本"
+msgstr "读取通讯协议版本"
 
 msgid "Cannot start IPv4 remotecontrol server on port {0}: {1}"
-msgstr ""
+msgstr "无法于端口 {0} 启动 IPv4 远程控制服务器:{1}"
 
 msgid "Cannot start IPv6 remotecontrol server on port {0}: {1}"
-msgstr ""
+msgstr "无法于端口 {0} 启动 IPv6 远程控制服务器:{1}"
 
 msgid "RemoteControl::Accepting remote connections on {0}:{1}"
-msgstr ""
+msgstr "远程控制::接受远程连接 {0}:{1}"
 
 msgid "RemoteControl::Server {0}:{1} stopped."
-msgstr ""
+msgstr "远程控制::服务器 {0}:{1} 已停止。"
 
 msgid "Cannot start IPv4 remotecontrol https server on port {0}: {1}"
-msgstr ""
+msgstr "无法于端口 {0} 启动 IPv4 HTTPS 远程控制服务器:{1}"
 
 msgid "Cannot start IPv6 remotecontrol https server on port {0}: {1}"
-msgstr ""
+msgstr "无法于端口 {0} 启动 IPv6 HTTPS 远程控制服务器:{1}"
 
 msgid "RemoteControl::Accepting secure remote connections on {0}:{1}"
-msgstr ""
+msgstr "远程控制::接受安全远程连接 {0}:{1}"
 
 msgid "Remote Control has been asked to create a new node."
 msgstr "远程控制被要求建立新的节点。"
@@ -12758,7 +12948,7 @@ msgstr "添加路径"
 msgid ""
 "Remote Control has been asked to report its supported features. This enables "
 "web sites to guess a running JOSM version"
-msgstr ""
+msgstr "远程控制已被要求报告其支持的功能。这可使网站部分获知正在运行的 JOSM 版本"
 
 msgid ""
 "Remote Control has been asked to load an imagery layer from the following "
@@ -12775,30 +12965,30 @@ msgid "Remote Control has been asked to load data from the API."
 msgstr "远程控制被要求自 API 下载数据。"
 
 msgid "The latitudes must be between {0} and {1}"
-msgstr ""
+msgstr "纬度必须介于 {0} 和 {1} 之间"
 
 msgid "The longitudes must be between {0} and {1}"
-msgstr ""
+msgstr "经度必须介于 {0} 和 {1} 之间"
 
 msgid "The minima must be less than the maxima"
-msgstr ""
+msgstr "最小值必须小于最大值"
 
 msgid "Remote Control has been asked to load the following data:"
-msgstr ""
+msgstr "远程控制已被要求加载下列数据:"
 
 msgid "Loading data"
-msgstr ""
+msgstr "加载数据"
 
 msgid ""
 "Remote Control has been asked to load objects (specified by their id) from "
 "the API."
-msgstr "远程控制已被要求从 API 加载对象(由他们的 ID指定)。"
+msgstr "远程控制已被要求从 API 加载对象(由他们的 ID 指定)。"
 
 msgid "Remote Control has been asked to open a local file."
 msgstr "远程控制已被要求打开一个本地文件。"
 
 msgid "Do you want to allow this?"
-msgstr "您是否要允许这个?"
+msgstr "您是否要允许此动作?"
 
 msgid "Confirm Remote Control action"
 msgstr "确认远程控制动作"
@@ -12820,19 +13010,19 @@ msgid "local file"
 msgstr "本地文件"
 
 msgid "Link to a GPX file on your local disk."
-msgstr ""
+msgstr "关联到本地磁盘中的 GPX 文件"
 
 msgid "include"
 msgstr "包含"
 
 msgid "Include GPX data in the .joz session file."
-msgstr ""
+msgstr "将 GPX 数据包含在 .joz 会话文件中"
 
 msgid "No file association"
 msgstr "没有文件关联"
 
 msgid "GPX data will be included in the session file."
-msgstr ""
+msgstr "GPX 数据将包含于 .joz 会话文件中"
 
 msgid ""
 "Version ''{0}'' of meta data for gpx track layer is not supported. Expected: "
@@ -12849,7 +13039,7 @@ msgstr "不支持版本“{0}”的图像图层元数据。预期:0.1"
 
 msgid ""
 "Version ''{0}'' of meta data for marker layer is not supported. Expected: 0.1"
-msgstr ""
+msgstr "标注图层元数据版本\"{0}\"不再支持,应为0.1"
 
 msgid "Layer contains unsaved data - save to file."
 msgstr "图层包含未保存的数据 - 保存到文件。"
@@ -12884,7 +13074,7 @@ msgid "Unexpected root element ''{0}'' in session file"
 msgstr "会话文件中意外的根元素“{0}”"
 
 msgid "Version ''{0}'' of session file is not supported. Expected: 0.1"
-msgstr "不支持版本“{0}”的会话文件。预期:0.1"
+msgstr "不支持版本“{0}”的会话文件。期望:0.1"
 
 msgid "missing mandatory attribute ''index'' for element ''layer''"
 msgstr "元素“layer”缺少必需的属性“index”"
@@ -12893,7 +13083,7 @@ msgid "unexpected format of attribute ''index'' for element ''layer''"
 msgstr "元素“layer”属性“index”有意外的格式"
 
 msgid "attribute ''index'' ({0}) for element ''layer'' must be unique"
-msgstr "属性''index''({0})的元素“layer”必须是唯一的"
+msgstr "属性“index”({0})的元素“layer”必须是唯一的"
 
 msgid "missing layer with index {0}"
 msgstr "索引 {0} 缺少图层"
@@ -12940,17 +13130,17 @@ msgid "JOSM version {0} required for plugin {1}."
 msgstr "JOSM 版本 {0} 需要插件 {1}。"
 
 msgid "Download skipped"
-msgstr "下载跳过的"
+msgstr "下载已跳过内容"
 
 msgid ""
 "Cannot download plugin ''{0}''. Its download link is not known. Skipping "
 "download."
-msgstr ""
+msgstr "无法下载插件“{0}”。下载链接未知。正在跳过下载。"
 
 msgid ""
 "Cannot download plugin ''{0}''. Its download link ''{1}'' is not a valid "
 "URL. Skipping download."
-msgstr ""
+msgstr "无法下载插件“{0}”。下载链接“{1}”不是有效的 URL。正在跳过下载。"
 
 msgid "Failed to create plugin directory ''{0}''"
 msgstr "无法建立插件目录“{0}”"
@@ -12983,7 +13173,7 @@ msgstr ""
 "<html>已要求加载插件“{0}”。<br>这个插件已不再开发,并且很有可能产生问题。<br>它应该被停用。<br>是否从首选项中删除?</html>"
 
 msgid "Plugin update"
-msgstr ""
+msgstr "插件更新"
 
 msgid ""
 "You updated your JOSM software.<br>To prevent problems the plugins should be "
@@ -13033,6 +13223,17 @@ msgid_plural ""
 "are:"
 msgstr[0] "找不到插件 {0} 需要的 {1} 插件。缺少的插件为:"
 
+msgid "Download and restart"
+msgstr "下载插件并重启软件"
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] "点击下载缺失的插件并重启JOSM"
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] "点击跳过该插件"
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13092,10 +13293,10 @@ msgid "Plugin update failed"
 msgstr "插件更新失败"
 
 msgid "Failed to find plugin {0}"
-msgstr ""
+msgstr "找不到插件 {0}"
 
 msgid "Failed to download plugin information list"
-msgstr ""
+msgstr "无法下载插件信息列表"
 
 msgid "Disable plugin"
 msgstr "停用插件"
@@ -13110,27 +13311,27 @@ msgid "Click to keep the plugin ''{0}''"
 msgstr "点击以保留插件“{0}”"
 
 msgid "Failed to delete outdated plugin ''{0}''."
-msgstr ""
+msgstr "无法删除过期插件“{0}”。"
 
 msgid ""
 "Failed to install already downloaded plugin ''{0}''. Skipping installation. "
 "JOSM is still going to load the old plugin version."
-msgstr ""
+msgstr "无法安装已下载插件“{0}”。正在跳过安装。JOSM 仍然加载旧版本插件。"
 
 msgid ""
 "Failed to install plugin ''{0}'' from temporary download file ''{1}''. {2}"
-msgstr ""
+msgstr "无法从临时下载文件“{1}”中安装插件“{0}”。{2}"
 
 msgid ""
 "Failed to install plugin ''{0}'' from temporary download file ''{1}''. "
 "Renaming failed."
-msgstr ""
+msgstr "无法从临时下载文件“{1}”中安装插件“{0}”。重命名失败。"
 
 msgid "Update plugin"
-msgstr ""
+msgstr "升级插件"
 
 msgid "Click to update the plugin ''{0}''"
-msgstr ""
+msgstr "点击以升级插件“{0}”"
 
 msgid "Click to disable the plugin ''{0}''"
 msgstr "点击以停用插件“{0}”"
@@ -13160,7 +13361,7 @@ msgstr "没有描述可用"
 msgid ""
 "Do not ask again and remember my decision (go to Preferences->Plugins to "
 "change it later)"
-msgstr "不要再询问,并记住我的决定(稍后可到 首选项->插件 改变它)"
+msgstr "不要再询问,并记住我的决定(稍后可至 首选项->插件 中更改)"
 
 msgid "Invalid jar file ''{0}''"
 msgstr "无效的 jar 文件“{0}”"
@@ -13175,10 +13376,10 @@ msgid "Invalid plugin description ''{0}'' in plugin {1}"
 msgstr "无效的插件 {1} 描述“{0}”"
 
 msgid "Invalid plugin main version ''{0}'' in plugin {1}"
-msgstr ""
+msgstr "插件 {1} 主版本“{0}”无效"
 
 msgid "Missing plugin main version in plugin {0}"
-msgstr ""
+msgstr "插件 {0} 主版本缺失"
 
 msgid "More info..."
 msgstr "更多信息..."
@@ -13202,7 +13403,7 @@ msgid "Processing file ''{0}''"
 msgstr "正在处理文件“{0}”"
 
 msgid "Failed to scan file ''{0}'' for plugin information. Skipping."
-msgstr ""
+msgstr "文件\"{0}\"扫描插件信息失败,正在跳过。"
 
 msgid "Processing plugin files..."
 msgstr "正在处理插件文件..."
@@ -13214,18 +13415,18 @@ msgid "Downloading plugin list from ''{0}''"
 msgstr "正在从“{0}”下载插件列表"
 
 msgid "Plugin list download error"
-msgstr ""
+msgstr "插件列表下载错误"
 
 msgid "JOSM failed to download plugin list:"
-msgstr ""
+msgstr "JOSM 无法下载插件列表:"
 
 msgid "Details:"
-msgstr ""
+msgstr "详细信息:"
 
 msgid ""
 "Failed to create plugin directory ''{0}''. Cannot cache plugin list from "
 "plugin site ''{1}''."
-msgstr ""
+msgstr "创建插件目录\"{0}\"失败。无法从插件网站\"{1}\"缓存插件列表。"
 
 msgid "Writing plugin list to local cache ''{0}''"
 msgstr "正在将插件列表写入本地缓存“{0}”"
@@ -13260,10 +13461,10 @@ msgid ""
 "An unexpected exception occurred.<br>This is always a coding error. If you "
 "are running the latest<br>version of JOSM, please consider being kind and "
 "file a bug report."
-msgstr "发生意想不到的异常。<br>这通常是程序码的错误。如果您使用的是最新版的<br>JOSM,请考虑不吝回复错误。"
+msgstr "发生异常。<br>这通常是程序码引起的错误。如果您使用的是最新版的<br>JOSM,请考虑不吝回复错误。"
 
 msgid "Update JOSM"
-msgstr ""
+msgstr "升级 JOSM"
 
 msgid ""
 "An unexpected exception occurred. This is always a coding "
@@ -13272,6 +13473,8 @@ msgid ""
 "(<b>{1}</b>).<br><br><b>Please update JOSM</b> before considering to file a "
 "bug report."
 msgstr ""
+"发生异常。这通常是程序码引起的错误。<br><br>然而您运行的是旧版本的 JOSM "
+"({0}),而不是<br>当前的测试版(<b>{1}</b>)。<br><br>在您考虑提交错误报告之前,<b>请更新您的 JOSM</b>。"
 
 msgid "Unexpected Exception"
 msgstr "意想不到的异常"
@@ -13406,7 +13609,7 @@ msgid_plural ""
 "referred to by ways {1}.<br>Please load the ways, remove the reference to "
 "the relation, and upload again."
 msgstr[0] ""
-"删除<strong>关系 {0} 失败</strong>。它仍然被节点路径 {1} 参照。<br>请加载路径,删除关系的参照,并重新上传。"
+"删除<strong>关系 {0} 失败</strong>。它仍然被路径 {1} 参照。<br>请加载路径,删除关系的参照,并重新上传。"
 
 msgid ""
 "<strong>Failed</strong> to delete <strong>relation {0}</strong>. It is still "
@@ -13522,7 +13725,7 @@ msgid ""
 msgstr "<html>无法下载数据。它的格式可能不支持、格式有问题和/或不一致。<br><br>详细信息(未翻译):{0}</html>"
 
 msgid "<html>Failed to download data.<br><br>Details: {0}</html>"
-msgstr ""
+msgstr "<html>无法下载数据。<br><br>详细信息:{0}</html>"
 
 msgid ""
 "<html>The OSM server<br>''{0}''<br>reported an internal server "
@@ -13572,17 +13775,17 @@ msgstr "找不到地区设定 {0} 的翻译。回复为 {1}。"
 msgid ""
 "Fatal: failed to locate image ''{0}''. This is a serious configuration "
 "problem. JOSM will stop working."
-msgstr "严重的错误:无法定位图片“{0}”。这是严重的配置问题。JOSM 会停止运作。"
+msgstr "致命错误:无法定位图片“{0}”。这是严重的配置问题。JOSM 将停止工作。"
 
 msgid "Failed to locate image ''{0}''"
 msgstr "定位图像“{0}”时失败"
 
 msgid "Failed to handle zip file ''{0}''. Exception was: {1}"
-msgstr ""
+msgstr "无法处理压缩文件“{0}”。异常为:{1}"
 
 msgid ""
 "Failed to access directory ''{0}'' for security reasons. Exception was: {1}"
-msgstr ""
+msgstr "由于安全原因,无法访问目录“{0}”。异常为:{1}"
 
 msgid "{0}... [please type its number]"
 msgstr "{0}... [请输入其编号]"
@@ -13593,70 +13796,72 @@ msgid ""
 msgstr "无法打开 URL。目前尚未设定平台。请先设定平台。"
 
 msgid "Opening URL: {0}"
-msgstr ""
+msgstr "正在打开 URL:{0}"
 
 msgid "zoom"
-msgstr ""
+msgstr "缩放级别"
 
 msgid "latitude"
-msgstr ""
+msgstr "纬度"
 
 msgid "longitude"
-msgstr ""
+msgstr "经度"
 
 msgid "URL does not contain {0}/{1}/{2}"
-msgstr ""
+msgstr "URL 不包含{0}/{1}/{2}"
 
 msgid "URL does not contain valid {0}"
-msgstr ""
+msgstr "URL 不包含有效的{0}"
 
 msgid "reserved"
-msgstr "已保留"
+msgstr "保留"
 
 msgid "Outdated Java version"
-msgstr ""
+msgstr "过时的 Java 版本"
 
 msgid "Update Java"
-msgstr ""
+msgstr "升级 Java"
 
 msgid "You are running version {0} of Java."
-msgstr ""
+msgstr "您正在运行 Java 版本 {0}。"
 
 msgid "April 2015"
-msgstr ""
+msgstr "2015 年 4 月"
 
 msgid ""
 "This version is no longer supported by {0} since {1} and is not recommended "
 "for use."
-msgstr ""
+msgstr "从 {1} 起,此版本不再受 {0} 支持,因此不推荐使用。"
 
 msgid ""
 "JOSM will soon stop working with this version; we highly recommend you to "
 "update to Java {0}."
-msgstr ""
+msgstr "JOSM 即将停止支持这一 Java 版本,强烈建议您升级至 Java {0}。"
 
 msgid "Would you like to update now ?"
-msgstr ""
+msgstr "您希望立即更新吗?"
 
 msgid ""
 "A previous version of JOSM has installed a custom certificate in order to "
 "provide HTTPS support for Remote Control:"
-msgstr ""
+msgstr "先前版本的 JOSM 安装了以下自定义证书,以提供远程控制的 HTTPS 支持:"
 
 msgid ""
 "It appears it could be an important <b>security risk</b>.<br><br>You are now "
 "going to be prompted by Windows to remove this insecure certificate.<br>For "
 "your own safety, <b>please click Yes</b> in next dialog."
 msgstr ""
+"这可能是一个严重的<b>安全隐患</b>。<br><br>即将弹出的 Windows "
+"对话框会提示您删除此不安全证书。<br>为了您的安全,请在下一个对话框中<b>单击“是”</b>。"
 
 msgid "Removing insecure certificate from {0} keystore: {1}"
-msgstr ""
+msgstr "正在从密钥库 {0} 中移除不安全的证书:{1}"
 
 msgid "Unable to remove insecure certificate from keystore: {0}"
-msgstr ""
+msgstr "无法从密钥库中删除不安全的证书:{0}"
 
 msgid "JOSM localhost certificate found in {0} keystore: {1}"
-msgstr ""
+msgstr "在密钥库 {0} 中找到 JOSM 本地主机证书:{1}"
 
 msgid ""
 "Remote Control is configured to provide HTTPS support.<br>This requires to "
@@ -13666,15 +13871,18 @@ msgid ""
 "next dialog.<br><br>If unsure, you can also click No then disable HTTPS "
 "support in Remote Control preferences."
 msgstr ""
+"远程控制配置为提供 HTTPS 支持。<br>这需要向 Windows 根 CA 存储中添加 JOSM 自生成证书。<br><br>Windows "
+"将会弹出对话框确认此操作。<br>要启用 HTTPS "
+"支持,在接下来的对话框中<b>单击“是”</b>。<br><br>如果不确定,您也可以点击“否”,并在远程控制首选项中禁用 HTTPS 支持。"
 
 msgid "HTTPS support in Remote Control"
-msgstr ""
+msgstr "远程控制的 HTTPS 支持"
 
 msgid "Adding JOSM localhost certificate to {0} keystore"
-msgstr ""
+msgstr "正在添加本地主机 JOSM 证书至密钥库 {0}"
 
 msgid "Silent shortcut conflict: ''{0}'' moved by ''{1}'' to ''{2}''."
-msgstr "安静快捷键冲突:“{0}”被“{1}”移动到“{2}”。"
+msgstr "静默快捷键冲突:“{0}”被“{1}”移动到“{2}”。"
 
 msgid "There was {0} tag found in the buffer, it is suspicious!"
 msgid_plural "There were {0} tags found in the buffer, it is suspicious!"
@@ -13701,7 +13909,7 @@ msgstr "忽略警告"
 msgid ""
 "<html><p> Sorry, it is impossible to paste tags from buffer. It does not "
 "contain any JOSM object or suitable text. </p></html>"
-msgstr "<html><p>对不起,无法粘贴缓存中的标签,缓存中没有JOSM对象或适当的文本。</p></html>"
+msgstr "<html><p>对不起,无法解析缓存中的标签,缓存中没有 JOSM 对象或适当的文本。</p></html>"
 
 msgid "ms"
 msgstr "毫秒"
@@ -13817,7 +14025,7 @@ msgstr "森林"
 
 msgctxt "landuse"
 msgid "meadow"
-msgstr ""
+msgstr "草甸"
 
 msgctxt "landuse"
 msgid "farmland"
@@ -13841,11 +14049,11 @@ msgstr "边界"
 
 msgctxt "Relation type"
 msgid "bridge"
-msgstr ""
+msgstr "桥梁"
 
 msgctxt "Relation type"
 msgid "destination_sign"
-msgstr ""
+msgstr "终点指示牌"
 
 msgctxt "Relation type"
 msgid "enforcement"
@@ -13873,7 +14081,7 @@ msgstr "路线"
 
 msgctxt "Relation type"
 msgid "route_master"
-msgstr ""
+msgstr "主路线"
 
 msgctxt "Relation type"
 msgid "site"
@@ -13881,11 +14089,11 @@ msgstr "站点"
 
 msgctxt "Relation type"
 msgid "street"
-msgstr ""
+msgstr "街道"
 
 msgctxt "Relation type"
 msgid "tunnel"
-msgstr ""
+msgstr "隧道"
 
 msgctxt "Relation type"
 msgid "waterway"
@@ -14039,6 +14247,9 @@ msgstr "更新"
 msgid "Update directory listing."
 msgstr "更新目录列表。"
 
+msgid "View"
+msgstr "查看(V)"
+
 msgid "Blue:"
 msgstr "蓝:"
 
@@ -14061,52 +14272,49 @@ msgid "Saturation:"
 msgstr "饱和度:"
 
 msgid "Landsat"
-msgstr ""
+msgstr "Landsat"
 
 msgid "Bing aerial imagery"
-msgstr ""
+msgstr "Bing 航拍图像"
 
 msgid "HDM (Humanitarian OpenStreetMap Team)"
-msgstr ""
+msgstr "HDM(人道主义 OSM 团队)"
 
 msgid "Mapbox Satellite"
-msgstr ""
+msgstr "Mapbox 卫星"
 
 msgid "MapQuest Open Aerial"
-msgstr ""
+msgstr "MapQuest 开放航拍图像"
 
 msgid "OpenStreetMap GPS Traces"
-msgstr ""
+msgstr "OSM GPS轨迹"
 
-msgid "OpenStreetMap (Mapnik)"
-msgstr ""
+msgid "OpenStreetMap (Standard layer)"
+msgstr "OpenStreetMap (标准图层)"
 
 msgid "skobbler"
 msgstr ""
 
 msgid "OpenStreetMap (Mapnik Black & White)"
-msgstr ""
+msgstr "OpenStreetMap (Mapnik 黑白)"
 
 msgid "OpenStreetMap (Mapnik, no labels)"
-msgstr ""
-
-msgid "skobbler heatmap"
-msgstr ""
+msgstr "OpenStreetMap (Mapnik,无标签)"
 
 msgid "OpenCycleMap"
-msgstr ""
+msgstr "OpenCycleMap"
 
 msgid "MapQuest OSM"
-msgstr ""
+msgstr "MapQuest OSM"
 
 msgid "Public Transport (ÖPNV)"
-msgstr ""
+msgstr "公共交通(ÖPNV)"
 
 msgid "OpenStreetMap (German Style)"
-msgstr ""
+msgstr "OpenStreetMap (德国样式)"
 
 msgid "Cambodia, Laos, Thailand, Vietnam bilingual"
-msgstr ""
+msgstr "柬埔寨、老挝、泰国、越南多语言"
 
 msgid "osmfr"
 msgstr ""
@@ -14115,13 +14323,13 @@ msgid "OpenPT Map (overlay)"
 msgstr ""
 
 msgid "Strava cycling heatmap"
-msgstr ""
+msgstr "Strava自行车热力图"
 
 msgid "Strava running heatmap"
-msgstr ""
+msgstr "Strava跑步热力图"
 
 msgid "Locator Overlay"
-msgstr ""
+msgstr "定位符叠加层"
 
 msgid "QA No Address"
 msgstr ""
@@ -14145,40 +14353,40 @@ msgid "Waymarked Trails: Winter Sports"
 msgstr ""
 
 msgid "OSM Inspector: Geometry"
-msgstr ""
+msgstr "OSM 检查器:几何"
 
 msgid "OSM Inspector: Tagging"
-msgstr ""
+msgstr "OSM 检查器:标签"
 
 msgid "OSM Inspector: Places"
-msgstr ""
+msgstr "OSM 检查器:位置"
 
 msgid "OSM Inspector: Highways"
-msgstr ""
+msgstr "OSM 检查器:公路"
 
 msgid "OSM Inspector: Multipolygon"
-msgstr ""
+msgstr "OSM 检查器:多重多边形"
 
 msgid "OSM Inspector: Routing"
-msgstr ""
+msgstr "OSM 检查器:路线"
 
 msgid "OSM Inspector: Addresses"
-msgstr ""
+msgstr "OSM 检查器:地址"
 
 msgid "OSM Inspector: Boundaries (EU)"
-msgstr ""
+msgstr "OSM 检查器:边界(欧盟)"
 
 msgid "AGRI black-and-white 2.5m"
 msgstr ""
 
 msgid "Geoimage.at MaxRes"
-msgstr ""
+msgstr "Geoimage.at MaxRes"
 
 msgid "basemap.at"
-msgstr ""
+msgstr "basemap.at"
 
 msgid "basemap.at Orthofoto"
-msgstr ""
+msgstr "basemap.at Orthofoto"
 
 msgid "Graz: Basiskarte (base map)"
 msgstr ""
@@ -14201,6 +14409,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14214,12 +14425,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14256,10 +14473,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14284,13 +14507,16 @@ msgid "Estonia Forestry (Maaamet)"
 msgstr ""
 
 msgid "BANO"
+msgstr "BANO"
+
+msgid "BD Carthage"
 msgstr ""
 
 msgid "Bordeaux - 2012"
 msgstr ""
 
 msgid "Cadastre"
-msgstr "地籍管理"
+msgstr "Cadastre"
 
 msgid "CRAIG - Auvergne 2013 - 25 cm"
 msgstr ""
@@ -14310,7 +14536,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14325,6 +14551,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14337,12 +14566,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14363,6 +14586,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14395,10 +14621,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14428,73 +14651,25 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
-msgid "OSMIE Townlands"
-msgstr ""
-
-msgid "OSMIE EDs"
-msgstr ""
-
-msgid "OSMIE Civil Parishes"
-msgstr ""
-
-msgid "OSMIE Baronies"
-msgstr ""
-
-msgid "OSMIE Political"
-msgstr ""
-
-msgid "Ireland EEA GMES Urban Atlas"
-msgstr ""
-
-msgid "Ireland EEA CORINE 2006"
-msgstr ""
-
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
 msgstr ""
 
 msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Clare Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Dublin Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Fermanagh Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Galway Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Kildare Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Leitrim Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Longford Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Offaly Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Sligo Civil Parishes and Baronies"
+msgid "OSMIE Townlands"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "OSMIE EDs"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "OSMIE Civil Parishes"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "OSMIE Baronies"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "OSMIE Political"
 msgstr ""
 
 msgid "Lodi - Italy"
@@ -14530,6 +14705,9 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
+msgid "1.cikla ortofotokarte - Latvia"
+msgstr ""
+
 msgid "ORT10LT (Lithuania)"
 msgstr ""
 
@@ -14545,6 +14723,9 @@ msgstr ""
 msgid "Luxembourg Inspire Roads"
 msgstr ""
 
+msgid "Luxembourg Inspire Water"
+msgstr ""
+
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -14560,9 +14741,15 @@ msgstr ""
 msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgstr ""
+
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
+msgid "Geoportal 2: ISOK hillshade"
+msgstr ""
+
 msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
@@ -14572,15 +14759,27 @@ msgstr ""
 msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
+msgid "Bytom: Fotoplan 2014 (aerial image)"
+msgstr ""
+
 msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
 msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
+msgid "Częstochowa: Budynki (buildings)"
+msgstr ""
+
 msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgstr ""
+
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgstr ""
+
 msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
@@ -14590,37 +14789,82 @@ msgstr ""
 msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Łódź: Ortofotomapa (aerial image)"
+msgid "Katowice: Budynki (buildings)"
 msgstr ""
 
-msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgid "Łódź: Budynki (buildings)"
 msgstr ""
 
-msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
-msgid "Rzeszów: Budynki (buildings)"
+msgid "Powiat dębicki: Budynki (buildings)"
 msgstr ""
 
-msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgid "Powiat lubaczowski: Budynki (buildings)"
 msgstr ""
 
-msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgid "Powiat łańcucki: Budynki (buildings)"
 msgstr ""
 
-msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgid "Powiat poznański: Budynki (buildings)"
 msgstr ""
 
-msgid "trail.pl: Szlaki (paths)"
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "ScanEx IRS"
+msgid "Powiat rzeszowski: Budynki (buildings)"
 msgstr ""
 
-msgid "ScanEx SPOT"
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
 msgstr ""
 
-msgid "Freemap.sk Car"
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgstr ""
+
+msgid "Ruda Śląska: Ortofotomapa (aerial image)"
+msgstr ""
+
+msgid "Rzeszów: Ortofotomapa (aerial image)"
+msgstr ""
+
+msgid "Rzeszów: Budynki (buildings)"
+msgstr ""
+
+msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
+msgstr ""
+
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
+msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
+msgstr ""
+
+msgid "trail.pl: Szlaki (paths)"
+msgstr ""
+
+msgid "ScanEx IRS"
+msgstr ""
+
+msgid "ScanEx SPOT"
+msgstr ""
+
+msgid "Freemap.sk Car"
 msgstr ""
 
 msgid "Freemap.sk Hiking"
@@ -14737,6 +14981,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14752,7 +15011,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -15023,16 +15282,16 @@ msgid "OS Town Plans, Strathaven 1858 (NLS)"
 msgstr ""
 
 msgid "OS Town Plans, Wick 1872 (NLS)"
-msgstr ""
+msgstr "OS Town Plans,维克(Wick) 1872 (NLS)"
 
 msgid "OS Town Plans, Wigtown 1848 (NLS)"
-msgstr ""
+msgstr "OS Town Plans,威格敦(Wigtown) 1848 (NLS)"
 
 msgid "OS Town Plans, Wigtown 1894 (NLS)"
-msgstr ""
+msgstr "OS Town Plans,威格敦(Wigtown) 1894 (NLS)"
 
 msgid "Landsat 233055"
-msgstr ""
+msgstr "Landsat 233055"
 
 msgid ""
 "Group common Address Interpolation inputs in a single dialog, as well as an "
@@ -15076,10 +15335,15 @@ msgstr "将 Columbus/Visiontac V-900 GPS 记录器的专有 CSV 文件导入到
 msgid ""
 "Implements a command line and enables to create your commands. See link for "
 "standard commands (arc, circle etc.)"
-msgstr "创建一个命令列让您建立自己的指令。请查阅连接以了解标准指令(arc, circle 等)"
+msgstr "提供命令行让您创建自己的命令。请查阅链接以了解标准命令(arc、circle 等)"
+
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr "提供通用图像库。注定不会被用户直接安装,而是依赖于其他插件。这并不意味着要由用户直接安装,而是作为其他插件的一个依赖。"
 
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
-msgstr ""
+msgstr "(警告:实验性!)用于冲突(合并)数据的工具。"
 
 msgid "Create a grid of ways."
 msgstr "建立路径的格线。"
@@ -15091,7 +15355,7 @@ msgstr "建立并处理捷克共和国中的地址节点与建筑。"
 msgid ""
 "Allows to import various file formats into JOSM directly. Currently "
 "supported: TangoGPS, Garmin Trainings Center TCX."
-msgstr ""
+msgstr "允许直接将各种文件格式导入到 JOSM。目前支持:TangoGPS、Garmin Trainings Center TCX。"
 
 msgid "Download your GPX tracks from openstreetmap.org"
 msgstr "从 openstreetmap.org 下载您的轨迹"
@@ -15126,7 +15390,7 @@ msgstr "寻找并以适当的方式来修正无效的街道地址。"
 
 msgid ""
 "Talk with users editing the map nearby, be notified when someone comes close."
-msgstr ""
+msgstr "与周围正在编辑地图的用户交流,当有人靠近时会显示通知。"
 
 msgid ""
 "Provides parts of the GeoTools library for other JOSM plugins. Not meant to "
@@ -15135,11 +15399,11 @@ msgstr "为其他 JOSM 插件提供 GeoTools 库。这并不意味着要由用
 
 msgid ""
 "Download GPS points from Globalsat dg100 data logger directly in JOSM."
-msgstr "在 JOSM 中直接从 Globalsat dg100 数据记录器下载 GPS 点。"
+msgstr "直接在 JOSM 中从 Globalsat dg100 数据记录器下载 GPS 点。"
 
 msgid ""
 "Analyse a set of GPS points to obtain its centre and direction of spread."
-msgstr ""
+msgstr "分析一组 GPS 点,得到它们的中心及发散的方向。"
 
 msgid "Allows to filter out unnecessary GPS tracks"
 msgstr "允许您过滤掉不必要的 GPS 轨迹"
@@ -15156,26 +15420,19 @@ msgstr "从多重多边形中生成图像 XML 边界"
 msgid ""
 "Database of imagery offsets: share and aquire imagery offsets with one "
 "button."
-msgstr "图像偏移的数据库:一个按钮,分享和获取图像偏移。"
+msgstr "图像偏移数据库:一个按钮,分享和获取图像偏移。"
 
 msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
-msgstr ""
-"另一个用来将图片与 GPX 文件中的路点配对的插件。配对的方式是当路点标签的“name”、“cmt”或 ”desc“ "
-"属性与图片的文件名称相符时就是配对成功。"
+msgstr "另一个用来将图片与 GPX 文件中路点配对的插件。当路点标签的“name”、“cmt”或“desc”属性与图片文件名相符时就是配对成功。"
 
 msgid "Plugin for importing spatial referenced images"
-msgstr "用来导入空间参照图片的外挂程式"
+msgstr "导入空间参照图片的插件"
 
 msgid "Import vector graphics (SVG)"
 msgstr "导入矢量图形(SVG)"
@@ -15186,18 +15443,18 @@ msgid ""
 msgstr "当前图层对象的额外信息弹出窗口 - 当前 GPX 的轨迹点的信息"
 
 msgid "A helper for IRS satellite adjustment."
-msgstr "IRS 卫星调整协助程序"
+msgstr "IRS 卫星调整辅助程序"
 
 msgid ""
 "Provides Java Native Access (JNA) library. Not meant to be installed "
 "directly by users, but rather as a dependency for other plugins."
-msgstr ""
+msgstr "提供 Java Native Access (JNA)库。不应由用户直接安装,而是作为其他插件的依赖。"
 
 msgid ""
 "Provides Java Topology Suite (JTS) library and related utilities. Not meant "
 "to be installed directly by users, but rather as a dependency for other "
 "plugins."
-msgstr "提供 Java 拓扑套件(JTS)库及相关工具。并不意味着要由用户直接安装,而是被其他插件所依赖。"
+msgstr "提供 Java 拓扑套件(JTS)库及相关工具。不应由用户直接安装,而是作为其他插件的依赖。"
 
 msgid ""
 "creates a channel digraph and checks a subset of channels if it is a "
@@ -15214,7 +15471,7 @@ msgstr "支持通过连接到 gpsd 服务器的即时 GPS 输入(移动点)。"
 msgid ""
 "Provides the Log4j library for other JOSM plugins. Not meant to be installed "
 "directly by users, but rather as a dependency for other plugins."
-msgstr ""
+msgstr "为其它 JOSM 插件提供 Log4j 库。不应由用户直接安装,而是作为其他插件的依赖。"
 
 msgid ""
 "The MapDust Plug-In shows the MapDust bug reports on the map. You can "
@@ -15222,8 +15479,8 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
-msgstr ""
+msgid "Allows the user to work with pictures hosted at mapillary.com"
+msgstr "允许用户使用托管在 mapillary.com 的图片工作"
 
 msgid ""
 "Provide a measurement dialog and a layer to measure length and angle of "
@@ -15237,9 +15494,6 @@ msgstr "合并重叠的部分路径。"
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr "为 4 或 5 条路径添加禁止左转"
 
-msgid "Simplifies download from different read-only APIs."
-msgstr "简化从不同的只读 API 下载。"
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr "允许在任何选定区域中,一次性给所有的对象添加标签"
 
@@ -15254,7 +15508,7 @@ msgstr "使用系统的密码管理器来存储 API 的用户名和密码。(支
 msgid ""
 "Disallow using JOSM forever (WARNING: this plugin prevents JOSM from loading "
 "and is hard to rid of)"
-msgstr ""
+msgstr "永久禁止使用 JOSM(警告:此插件会阻止 JOSM 加载,难以卸载)"
 
 msgid "Convert data from Open Data portals to OSM layer"
 msgstr "将开放数据网站的数据转换为 OSM 图层"
@@ -15289,7 +15543,7 @@ msgstr "导入 PDF 文件并转换为路径。"
 msgid ""
 "Write gps position info to the image file header. Run this feature from the "
 "right click menu of the image layer."
-msgstr "将 gps 地点信息写入图片档的档头。在图片图层按右键菜单就可以执行这项功能。"
+msgstr "将 gps 地点信息写入图片文件的文件头。在图片图层按右键菜单就可以执行这项功能。"
 
 msgid "Make photos movable and position them on the map."
 msgstr ""
@@ -15320,6 +15574,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr "这个插件简化了公共交通路线的制图与编辑。"
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr "关系及多重多边形的创建和编辑面板。"
 
@@ -15358,6 +15620,9 @@ msgstr "由移除属于很钝的钝角的节点来简化区域。这可以使用
 msgid "Edit features for OpenSeaMap"
 msgstr "OpenSeaMap 的编辑功能"
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15433,9 +15698,6 @@ msgstr "方便的下载一整组互相联结的路径"
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr "为从 GPX 文件导入的路点打开搜索功能。"
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr "选择一整列无分支的路径"
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr ""
 
@@ -15454,10 +15716,10 @@ msgid "unpaved"
 msgstr "没铺面的"
 
 msgid "asphalt"
-msgstr "柏油"
+msgstr "沥青"
 
 msgid "concrete"
-msgstr "水泥地"
+msgstr "水泥"
 
 msgid "metal"
 msgstr "金属"
@@ -15469,19 +15731,19 @@ msgid "paving_stones"
 msgstr "铺路石"
 
 msgid "cobblestone"
-msgstr "石子路"
+msgstr "石子"
 
 msgid "gravel"
-msgstr "碎石路"
+msgstr "碎石"
 
 msgid "pebblestone"
 msgstr "鹅卵石"
 
 msgid "compacted"
-msgstr "压实的"
+msgstr "压实"
 
 msgid "grass_paver"
-msgstr "草地_铺面"
+msgstr "踏步石"
 
 msgid "grass"
 msgstr "草地"
@@ -15493,83 +15755,83 @@ msgid "ground"
 msgstr "地面"
 
 msgid "sett"
-msgstr ""
+msgstr "密铺石"
 
 msgid "Smoothness"
-msgstr ""
+msgstr "平整度"
 
 msgid "excellent"
-msgstr ""
+msgstr "优"
 
 msgid "Thin Rollers: rollerblade, skateboard"
-msgstr ""
+msgstr "轻便滚轮:轮滑,滑板"
 
 msgid "good"
-msgstr ""
+msgstr "良"
 
 msgid "Thin Wheels: racing bike"
-msgstr ""
+msgstr "轻便车辆:跑车"
 
 msgid "intermediate"
-msgstr ""
+msgstr "中"
 
 msgid "Wheels: city bike, wheelchair, scooter"
-msgstr ""
+msgstr "一般车辆:城市自行车,轮椅,代步车"
 
 msgid "bad"
-msgstr ""
+msgstr "差"
 
 msgid "Robust Wheels: trekking bike, car, rickshaw"
-msgstr ""
+msgstr "加强车辆:登山自行车,汽车,人力车"
 
 msgid "very_bad"
-msgstr ""
+msgstr "下"
 
 msgid "High Clearance: light duty off-road vehicle"
-msgstr ""
+msgstr "高净空:轻型越野汽车"
 
 msgid "horrible"
-msgstr ""
+msgstr "劣"
 
 msgid "Off-Road: heavy duty off-road vehicle"
-msgstr ""
+msgstr "越野:重型越野汽车"
 
 msgid "very_horrible"
-msgstr ""
+msgstr "糟"
 
 msgid "Specialized off-road: tractor, ATV"
-msgstr ""
+msgstr "专业越野:拖拉机,ATV"
 
 msgid "impassable"
-msgstr ""
+msgstr "无"
 
 msgid "No wheeled vehicle"
-msgstr ""
+msgstr "不可通过轮式车辆"
 
 msgctxt "riding"
 msgid "pitch"
-msgstr ""
+msgstr "场地"
 
 msgctxt "riding"
 msgid "sports_centre"
-msgstr ""
+msgstr "体育中心"
 
 msgctxt "riding"
 msgid "stadium"
-msgstr ""
+msgstr "体育场"
 
 msgctxt "riding"
 msgid "track"
-msgstr ""
+msgstr "轨迹"
 
 msgid "clay"
-msgstr ""
+msgstr "粘土"
 
 msgid "dirt"
-msgstr ""
+msgstr "泥地"
 
 msgid "fine_gravel"
-msgstr ""
+msgstr "细石"
 
 msgid "mud"
 msgstr "泥沼"
@@ -15617,26 +15879,29 @@ msgid "Width (meters)"
 msgstr "宽度(米)"
 
 msgid "Sidewalk"
-msgstr ""
+msgstr "人行道"
 
 msgctxt "sidewalk"
 msgid "both"
-msgstr ""
+msgstr "双向"
 
 msgctxt "sidewalk"
 msgid "left"
-msgstr ""
+msgstr "左侧"
 
 msgctxt "sidewalk"
 msgid "right"
-msgstr ""
+msgstr "右侧"
 
 msgctxt "sidewalk"
 msgid "no"
-msgstr ""
+msgstr "无"
 
 msgid "Service type"
-msgstr ""
+msgstr "服务类型"
+
+msgid "yard"
+msgstr "站线"
 
 msgid "siding"
 msgstr "侧线"
@@ -15673,7 +15938,7 @@ msgstr "16.7"
 
 msgctxt "railway"
 msgid "Tracks"
-msgstr ""
+msgstr "轨道"
 
 msgid "Gauge (mm)"
 msgstr "轨距(mm)"
@@ -15811,98 +16076,118 @@ msgstr "运动"
 
 msgctxt "sport"
 msgid "multi"
-msgstr ""
+msgstr "多种"
 
 msgctxt "sport"
 msgid "archery"
-msgstr ""
+msgstr "射箭"
 
 msgctxt "sport"
 msgid "athletics"
-msgstr ""
+msgstr "田径"
 
 msgctxt "sport"
 msgid "american_football"
-msgstr ""
+msgstr "美式足球"
 
 msgctxt "sport"
 msgid "australian_football"
-msgstr ""
+msgstr "澳式足球"
 
 msgctxt "sport"
 msgid "baseball"
-msgstr ""
+msgstr "棒球"
 
 msgctxt "sport"
 msgid "basketball"
-msgstr ""
+msgstr "篮球"
+
+msgctxt "sport"
+msgid "beachvolleyball"
+msgstr "沙滩排球"
+
+msgctxt "sport"
+msgid "billiards"
+msgstr "台球"
 
 msgctxt "sport"
 msgid "boules"
-msgstr ""
+msgstr "滚球"
 
 msgctxt "sport"
 msgid "bowls"
-msgstr ""
+msgstr "保龄球"
 
 msgctxt "sport"
 msgid "canadian_football"
-msgstr ""
+msgstr "加拿大橄榄球"
 
 msgctxt "sport"
 msgid "canoe"
-msgstr ""
+msgstr "独木舟"
 
 msgctxt "sport"
 msgid "climbing"
-msgstr ""
+msgstr "攀岩"
 
 msgctxt "sport"
 msgid "cricket"
-msgstr ""
-
-msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
+msgstr "板球"
 
 msgctxt "sport"
 msgid "croquet"
-msgstr ""
+msgstr "门球"
 
 msgctxt "sport"
 msgid "cycling"
-msgstr ""
+msgstr "自行车"
 
 msgctxt "sport"
 msgid "dog_racing"
-msgstr ""
+msgstr "赛狗"
 
 msgctxt "sport"
 msgid "equestrian"
-msgstr ""
+msgstr "骑马"
+
+msgctxt "sport"
+msgid "field_hockey"
+msgstr "曲棍球"
 
 msgctxt "sport"
 msgid "gaelic_games"
-msgstr ""
+msgstr "盖尔赛"
 
 msgctxt "sport"
 msgid "golf"
-msgstr ""
+msgstr "高尔夫"
 
 msgctxt "sport"
 msgid "gymnastics"
-msgstr ""
+msgstr "体操"
 
 msgctxt "sport"
 msgid "handball"
-msgstr ""
+msgstr "手球"
 
 msgctxt "sport"
-msgid "hockey"
-msgstr ""
+msgid "horse_racing"
+msgstr "赛马"
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr "冰球"
+
+msgctxt "sport"
+msgid "karting"
+msgstr "卡丁车"
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr "航模"
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15911,13 +16196,17 @@ msgstr ""
 
 msgctxt "sport"
 msgid "pelota"
-msgstr ""
+msgstr "回力球"
 
 msgctxt "sport"
 msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15930,44 +16219,60 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
-msgid "shooting"
+msgid "safety_training"
 msgstr ""
 
 msgctxt "sport"
+msgid "shooting"
+msgstr "射击"
+
+msgctxt "sport"
 msgid "skateboard"
-msgstr ""
+msgstr "滑板"
 
 msgctxt "sport"
 msgid "skating"
-msgstr ""
+msgstr "溜冰"
 
 msgctxt "sport"
 msgid "soccer"
-msgstr ""
+msgstr "足球"
 
 msgctxt "sport"
 msgid "swimming"
-msgstr ""
+msgstr "游泳"
 
 msgctxt "sport"
 msgid "table_tennis"
-msgstr ""
+msgstr "乒乓球"
 
 msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr "9 球"
+
+msgctxt "sport"
+msgid "10pin"
+msgstr "10 球"
+
 msgid "Fee"
 msgstr "费用"
 
 msgid "06:00-20:00"
-msgstr ""
+msgstr "06:00-20:00"
 
 msgid "Mo-Fr 09:00-18:00,Sa 08:00-14:00"
-msgstr ""
+msgstr "周一-周五 09:00-18:00,周六 08:00-14:00"
 
 msgid "May-Sep 09:30-12:30,14:15-19:30"
-msgstr ""
+msgstr "五月-九月 09:30-12:30,14:15-19:30"
 
 msgctxt "parking"
 msgid "multi-storey"
@@ -15983,7 +16288,7 @@ msgstr ""
 
 msgctxt "parking"
 msgid "rooftop"
-msgstr ""
+msgstr "屋顶"
 
 msgid "Reference number"
 msgstr "编号"
@@ -16034,62 +16339,62 @@ msgid "Distance (km)"
 msgstr "距离(千米)"
 
 msgid "Ascent (m)"
-msgstr ""
+msgstr "上升(m)"
 
 msgid "Descent (m)"
-msgstr ""
+msgstr "下降(m)"
 
 msgid "Roundtrip"
-msgstr ""
+msgstr "往返"
 
 msgid "Symbol description"
 msgstr "符号说明"
 
 msgid "broadleaved"
-msgstr ""
+msgstr "阔叶"
 
 msgid "needleleaved"
-msgstr ""
+msgstr "针叶"
 
 msgid "mixed"
 msgstr "混合"
 
 msgid "leafless"
-msgstr ""
+msgstr "无叶"
 
 msgid "Cycle"
-msgstr ""
+msgstr "循环"
 
 msgid "deciduous"
-msgstr "落叶类"
+msgstr "落叶"
 
 msgid "Plants that are leafless for a certain period during the year."
-msgstr ""
+msgstr "一年的特定时期植物不长叶子。"
 
 msgid "evergreen"
-msgstr ""
+msgstr "常青"
 
 msgid "Plants that are never entirely without green foliage."
-msgstr ""
+msgstr "植物不会完全没有绿色的树叶。"
 
 msgid "semi_deciduous"
-msgstr ""
+msgstr "半落叶"
 
 msgid ""
 "Plants that lose their foliage for a very short period, when old leaves fall "
 "off and new foliage growth is starting."
-msgstr ""
+msgstr "植物只在很短时间内没有叶子,老叶脱落时新叶开始生长。"
 
 msgid "semi_evergreen"
-msgstr ""
+msgstr "半常青"
 
 msgid ""
 "Plants that lose most, but not all, of their foliage for a fraction of the "
 "year."
-msgstr ""
+msgstr "植物在较短时间内脱光了几乎所有树叶,只保留部分。"
 
 msgid "Habitat with evergreen and deciduous vegetation."
-msgstr ""
+msgstr "有常青和落叶植物的栖息地。"
 
 msgid "bahai"
 msgstr "巴海大同教"
@@ -16146,7 +16451,7 @@ msgid "evangelical"
 msgstr "福音派"
 
 msgid "greek_catholic"
-msgstr ""
+msgstr "希腊天主教"
 
 msgid "jehovahs_witness"
 msgstr "耶和华见证"
@@ -16161,7 +16466,7 @@ msgid "mormon"
 msgstr "摩门教"
 
 msgid "old_catholic"
-msgstr ""
+msgstr "老天主教"
 
 msgid "orthodox"
 msgstr "东正教"
@@ -16179,7 +16484,7 @@ msgid "quaker"
 msgstr "教友派"
 
 msgid "roman_catholic"
-msgstr ""
+msgstr "罗马天主教"
 
 msgid "shia"
 msgstr "什叶派"
@@ -16203,36 +16508,36 @@ msgid "110000;20000"
 msgstr "110000;20000"
 
 msgid "Branch operator"
-msgstr ""
+msgstr "营运分公司"
 
 msgid "Amount of Cables"
 msgstr "电缆数"
 
 msgid "Amount of circuits"
-msgstr ""
+msgstr "电路数"
 
 msgid "Location"
 msgstr "位置"
 
 msgctxt "power"
 msgid "outdoor"
-msgstr ""
+msgstr "室外"
 
 msgctxt "power"
 msgid "indoor"
-msgstr ""
+msgstr "室内"
 
 msgctxt "power"
 msgid "underground"
-msgstr ""
+msgstr "地下"
 
 msgctxt "power"
 msgid "platform"
-msgstr ""
+msgstr "平台"
 
 msgctxt "power"
 msgid "kiosk"
-msgstr ""
+msgstr "亭"
 
 msgid "Start date"
 msgstr "启用日期"
@@ -16286,28 +16591,28 @@ msgid "Toll"
 msgstr "收费"
 
 msgid "Is the water body intermittent (disappears seasonally)?"
-msgstr ""
+msgstr "时令水体(季节性消失)?"
 
 msgid "culvert"
-msgstr ""
+msgstr "暗渠"
 
 msgid "Water access rules:"
-msgstr ""
+msgstr "通航:"
 
 msgid "Ship"
-msgstr ""
+msgstr "船舶"
 
 msgid "designated"
 msgstr "指定"
 
 msgid "Boat"
-msgstr ""
+msgstr "小船"
 
 msgid "Motorboat"
-msgstr ""
+msgstr "汽艇"
 
 msgid "Canoe"
-msgstr ""
+msgstr "独木舟"
 
 msgid "Streets"
 msgstr "街道"
@@ -16348,6 +16653,9 @@ msgstr "三级道路连络线"
 msgid "Unclassified"
 msgstr "未分类道路"
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr "让车区"
 
@@ -16411,18 +16719,21 @@ msgid "parking_aisle"
 msgstr "停车场通道"
 
 msgid "drive-through"
-msgstr ""
+msgstr "免下车"
 
 msgid "Parking Aisle"
 msgstr "停车场通道"
 
 msgid "Escape"
-msgstr ""
+msgstr "避险车道"
 
 msgid ""
 "Emergency lane beside long descending slopes for trucks and other vehicles "
 "to stop safely after brake failure."
-msgstr ""
+msgstr "公路连续下坡路段位于行车道外侧的紧急车道,供货车制动失效时驶入避险自救。"
+
+msgid "Raceway"
+msgstr "赛道"
 
 msgid "Road (Unknown Type)"
 msgstr "道路(不明的类型)"
@@ -16432,43 +16743,43 @@ msgstr "施工"
 
 msgctxt "Highway"
 msgid "motorway"
-msgstr ""
+msgstr "高速公路"
 
 msgctxt "Highway"
 msgid "motorway_link"
-msgstr ""
+msgstr "高速公路连接线"
 
 msgctxt "Highway"
 msgid "trunk"
-msgstr ""
+msgstr "快速道路"
 
 msgctxt "Highway"
 msgid "trunk_link"
-msgstr ""
+msgstr "快速道路连接线"
 
 msgctxt "Highway"
 msgid "primary"
-msgstr ""
+msgstr "一级道路"
 
 msgctxt "Highway"
 msgid "primary_link"
-msgstr ""
+msgstr "一级道路连接线"
 
 msgctxt "Highway"
 msgid "secondary"
-msgstr ""
+msgstr "二级道路"
 
 msgctxt "Highway"
 msgid "secondary_link"
-msgstr ""
+msgstr "二级道路连接线"
 
 msgctxt "Highway"
 msgid "tertiary"
-msgstr ""
+msgstr "三级道路"
 
 msgctxt "Highway"
 msgid "tertiary_link"
-msgstr ""
+msgstr "三级道路连接线"
 
 msgctxt "Highway"
 msgid "bus_guideway"
@@ -16480,11 +16791,11 @@ msgstr ""
 
 msgctxt "Highway"
 msgid "living_street"
-msgstr ""
+msgstr "生活街道"
 
 msgctxt "Highway"
 msgid "pedestrian"
-msgstr ""
+msgstr "步行街"
 
 msgctxt "Highway"
 msgid "track"
@@ -16492,11 +16803,11 @@ msgstr ""
 
 msgctxt "Highway"
 msgid "footway"
-msgstr ""
+msgstr "专用人行步道"
 
 msgctxt "Highway"
 msgid "steps"
-msgstr ""
+msgstr "台阶"
 
 msgid "Junction"
 msgstr "交叉点"
@@ -16558,7 +16869,7 @@ msgid "Public Service Vehicles (psv)"
 msgstr "公共汽车(psv)"
 
 msgid "Tourist buses"
-msgstr ""
+msgstr "旅游巴士"
 
 msgid "Min. speed (km/h)"
 msgstr "最低速度(km/h)"
@@ -16574,30 +16885,30 @@ msgstr "超车"
 
 msgctxt "overtaking"
 msgid "yes"
-msgstr ""
+msgstr "可"
 
 msgctxt "overtaking"
 msgid "both"
-msgstr ""
+msgstr "双向"
 
 msgctxt "overtaking"
 msgid "forward"
-msgstr ""
+msgstr "向前"
 
 msgctxt "overtaking"
 msgid "backward"
-msgstr ""
+msgstr "向后"
 
 msgctxt "overtaking"
 msgid "no"
-msgstr ""
+msgstr "不可"
 
 msgid "Roundabout"
 msgstr "环岛"
 
 msgctxt "Highway"
 msgid "construction"
-msgstr ""
+msgstr "在建"
 
 msgid "Ford"
 msgstr "浅滩"
@@ -16703,11 +17014,11 @@ msgstr "差"
 
 msgctxt "trail_visibility"
 msgid "horrible"
-msgstr ""
+msgstr "劣"
 
 msgctxt "trail_visibility"
 msgid "no"
-msgstr ""
+msgstr "无"
 
 msgid "Ski"
 msgstr "滑雪"
@@ -16782,37 +17093,37 @@ msgid "Amount of Steps"
 msgstr "阶梯数"
 
 msgid "Ramp"
-msgstr ""
+msgstr "坡道"
 
 msgid "Stroller ramp"
-msgstr ""
+msgstr "推车坡道"
 
 msgid "Bicycle ramp"
-msgstr ""
+msgstr "自行车坡道"
 
 msgid "Wheelchair ramp"
-msgstr ""
+msgstr "轮椅坡道"
 
 msgid "Luggage ramp"
-msgstr ""
+msgstr "行李坡道"
 
 msgid "automatic"
-msgstr ""
+msgstr "自动"
 
 msgid "manual"
-msgstr ""
+msgstr "手动"
 
 msgid "Handrail"
-msgstr ""
+msgstr "扶手"
 
 msgid "Left handrail"
-msgstr ""
+msgstr "左扶手"
 
 msgid "Center handrail"
-msgstr ""
+msgstr "中扶手"
 
 msgid "Right handrail"
-msgstr ""
+msgstr "右扶手"
 
 msgid "Waypoints"
 msgstr "路点"
@@ -16833,7 +17144,7 @@ msgid "Toilets"
 msgstr "厕所"
 
 msgid "Rest Area"
-msgstr "休息区"
+msgstr "停车区"
 
 msgid "Drinking Water"
 msgstr "饮水机"
@@ -16842,7 +17153,7 @@ msgid "Traffic Signal"
 msgstr "信号灯"
 
 msgid "Optional crossing attributes:"
-msgstr ""
+msgstr "可选路口属性:"
 
 msgid "Pedestrian crossing type"
 msgstr "人行横道类型"
@@ -16899,13 +17210,13 @@ msgid "Optional values for specific countries"
 msgstr ""
 
 msgid "Stop"
-msgstr "禁止通行"
+msgstr "停车让行"
 
 msgid "Give Way"
-msgstr ""
+msgstr "减速让行"
 
 msgid "Mini-Roundabout"
-msgstr ""
+msgstr "微型环岛"
 
 msgid "clockwise"
 msgstr "顺时针"
@@ -16914,7 +17225,7 @@ msgid "Pedestrian Crossing"
 msgstr "人行横道"
 
 msgid "In case of traffic signals:"
-msgstr ""
+msgstr "如遇交通信号:"
 
 msgid "Traffic Calming"
 msgstr "道路减速设施"
@@ -16961,6 +17272,12 @@ msgstr "测速照相"
 msgid "Traffic Mirror"
 msgstr ""
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -16971,7 +17288,7 @@ msgid ""
 msgstr ""
 
 msgid "Elevator"
-msgstr ""
+msgstr "电梯"
 
 msgid "Grit Bin"
 msgstr "除雪沙/盐箱"
@@ -17037,7 +17354,7 @@ msgid "Species"
 msgstr "种"
 
 msgid "Taxon"
-msgstr ""
+msgstr "类"
 
 msgid "Fence"
 msgstr "围栏"
@@ -17115,7 +17432,7 @@ msgid "Stile"
 msgstr "栅栏台阶"
 
 msgid "ladder"
-msgstr ""
+msgstr "梯子"
 
 msgid "squeezer"
 msgstr ""
@@ -17150,8 +17467,13 @@ msgstr "棚洞"
 msgid "Avalanche Protector"
 msgstr "雪崩保护"
 
+msgctxt "main group"
 msgid "Water"
-msgstr "水域"
+msgstr "水路"
+
+msgctxt "sub group"
+msgid "Water"
+msgstr "水体"
 
 msgid "Drain"
 msgstr "渠"
@@ -17174,7 +17496,7 @@ msgstr "泉"
 msgid ""
 "A point where groundwater naturally flows to the surface of the earth from "
 "underground."
-msgstr ""
+msgstr "地下水自然从地下流至地表的位置。"
 
 msgid "Waterfall"
 msgstr "瀑布"
@@ -17203,8 +17525,12 @@ msgstr "贮水处"
 msgid "Covered Reservoir"
 msgstr "有覆盖的贮水处"
 
+msgctxt "natural"
+msgid "Water"
+msgstr "积水"
+
 msgid "A body of standing water, such as a lake or pond."
-msgstr ""
+msgstr "积水处,如湖泊或池塘。"
 
 msgid "Water Body"
 msgstr "水体"
@@ -17219,7 +17545,7 @@ msgid "lagoon"
 msgstr "泻湖"
 
 msgid "oxbow"
-msgstr ""
+msgstr "牛轭湖"
 
 msgid "pond"
 msgstr "池塘"
@@ -17231,14 +17557,14 @@ msgid "river"
 msgstr "河"
 
 msgid "Salt Water"
-msgstr ""
+msgstr "咸水"
 
 msgid "Coastline"
 msgstr "海岸线"
 
 msgid ""
 "Line between the sea and land (with the water on the right side of the way)."
-msgstr ""
+msgstr "在海洋与陆地之间的路径(路径右侧为海)。"
 
 msgid "Riverbank"
 msgstr "河岸"
@@ -17247,16 +17573,16 @@ msgid "Wetland"
 msgstr "湿地"
 
 msgid "Waterlogged area, either permanently or seasonally with vegetation."
-msgstr ""
+msgstr "涝区,永久或季节性覆有植被。"
 
 msgid "swamp"
-msgstr "沼泽(swamp)"
+msgstr "沼泽"
 
 msgid "bog"
-msgstr "沼泽(bog)"
+msgstr "泥沼"
 
 msgid "marsh"
-msgstr "沼泽(marsh)"
+msgstr "草泽"
 
 msgid "reedbed"
 msgstr "芦苇荡"
@@ -17274,16 +17600,16 @@ msgid "Mud"
 msgstr "泥浆地"
 
 msgid "Large area covered with mud."
-msgstr ""
+msgstr "大面积覆盖泥土的区域。"
 
 msgid "Beach"
-msgstr "海滩"
+msgstr "沙滩"
 
 msgid "A flat area of sand, gravel or pebble next to water."
-msgstr ""
+msgstr "靠近水的平坦区域,有沙子、砂砾或卵石。"
 
 msgid "swimming"
-msgstr ""
+msgstr "游泳"
 
 msgid "surfing"
 msgstr ""
@@ -17293,7 +17619,7 @@ msgstr "海湾"
 
 msgid ""
 "A large body of water partially enclosed by land but with a wide mouth."
-msgstr ""
+msgstr "大片水体,部分由土地包围,但有一个宽阔出口。"
 
 msgid "Cliff"
 msgstr "断崖"
@@ -17339,11 +17665,125 @@ msgid "Marina"
 msgstr "码头"
 
 msgid "Dump Station"
-msgstr ""
+msgstr "转储站"
 
 msgid "public"
 msgstr "公共"
 
+msgid "Marine Fuel"
+msgstr "船用燃油"
+
+msgid "Agip"
+msgstr "阿吉普(Agip)"
+
+msgid "Aral"
+msgstr "亚拉(Aral)"
+
+msgid "Avia"
+msgstr "阿维亚(Avia)"
+
+msgid "BP"
+msgstr "英国石油(BP)"
+
+msgid "Chevron"
+msgstr "雪佛龙(Chevron)"
+
+msgid "Citgo"
+msgstr "雪铁戈(Citgo)"
+
+msgid "Eni"
+msgstr "埃尼(Eni)"
+
+msgid "Esso"
+msgstr "埃索(Esso)"
+
+msgid "Exxon"
+msgstr "埃克森(Exxon)"
+
+msgid "Gulf"
+msgstr "海湾(Gulf)"
+
+msgid "Mobil"
+msgstr "美孚(Mobil)"
+
+msgid "OMV"
+msgstr "奥地利石油和天然气集团(OMV)"
+
+msgid "Petro-Canada"
+msgstr "加拿大石油(Petro-Canada)"
+
+msgid "Pioneer"
+msgstr "先锋(Pioneer)"
+
+msgid "Q8"
+msgstr "科威特石油(Q8)"
+
+msgid "Repsol"
+msgstr "雷普索尔(Repsol)"
+
+msgid "Shell"
+msgstr "壳牌(Shell)"
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr "挪威国家石油(Statoil)"
+
+msgid "Sunoco"
+msgstr "太阳(Sunoco)"
+
+msgid "Tamoil"
+msgstr "塔莫尔(Tamoil)"
+
+msgid "Texaco"
+msgstr "德士古(Texaco)"
+
+msgid "Total"
+msgstr "道达尔(Total)"
+
+msgid "Independent"
+msgstr "个体"
+
+msgid "Fuel types:"
+msgstr "燃油类型:"
+
+msgid "Diesel"
+msgstr "柴油"
+
+msgid "Bio Diesel"
+msgstr "生物柴油"
+
+msgid "Octane 80"
+msgstr "80 号"
+
+msgid "Octane 91"
+msgstr "91 号"
+
+msgid "Octane 92"
+msgstr "92 号"
+
+msgid "Octane 95"
+msgstr "95 号"
+
+msgid "Octane 98"
+msgstr "98 号"
+
+msgid "Octane 100"
+msgstr "100 号"
+
+msgid "E10 (10% Ethanol mix)"
+msgstr "E10(添加 10% 乙醇)"
+
+msgid "E85 (85% Ethanol mix)"
+msgstr "E85(添加 85% 乙醇)"
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr "液化石油气(LPG)"
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr "压缩天然气(CNG)"
+
 msgid "Pier"
 msgstr "渡头"
 
@@ -17387,7 +17827,7 @@ msgid "tourism"
 msgstr "旅游"
 
 msgid "freight"
-msgstr ""
+msgstr "货运"
 
 msgid "Narrow Gauge Rail"
 msgstr "窄轨"
@@ -17458,6 +17898,9 @@ msgid "Buffer Stop"
 msgstr "止冲器"
 
 msgid "Railway Switch"
+msgstr "铁路道岔"
+
+msgid "Railway milestone"
 msgstr ""
 
 msgid "Aerialway"
@@ -17494,7 +17937,7 @@ msgid "Number of people per gondola"
 msgstr "每厢的人数"
 
 msgid "Mixed Lift"
-msgstr ""
+msgstr "混合式缆车"
 
 msgid "Number of people per gondola/chair"
 msgstr ""
@@ -17548,7 +17991,7 @@ msgid "tram"
 msgstr "有轨电车"
 
 msgid "metro"
-msgstr ""
+msgstr "地铁"
 
 msgid "ferry"
 msgstr "渡轮"
@@ -17569,7 +18012,7 @@ msgid "See the Wiki for other capacity:[types]=*."
 msgstr "请参见维基页上的其他容量标签 capacity:[types]=*"
 
 msgid "Parking Space"
-msgstr ""
+msgstr "停车位"
 
 msgid "Capacity"
 msgstr "容量"
@@ -17578,172 +18021,61 @@ msgid "Covered (with roof)"
 msgstr "有覆盖(带顶棚)"
 
 msgid "Parking Entrance"
-msgstr ""
+msgstr "停车场入口"
 
 msgid "Fuel"
 msgstr "加油站"
 
-msgid "Agip"
-msgstr "阿吉普(Agip)"
-
-msgid "Aral"
-msgstr "亚拉(Aral)"
+msgid "With shop"
+msgstr "带商店"
 
-msgid "Avia"
-msgstr "阿维亚(Avia)"
+msgid "convenience"
+msgstr "便利店"
 
-msgid "BP"
-msgstr "英国石油(BP)"
+msgid "kiosk"
+msgstr "售货亭"
 
-msgid "Chevron"
-msgstr "雪佛龙(Chevron)"
+msgid "Diesel (Gas To Liquid - ultimate diesel)"
+msgstr "柴油(天然气合成)"
 
-msgid "Citgo"
-msgstr "雪铁戈(Citgo)"
+msgid "Diesel for Heavy Good Vehicles"
+msgstr "重型货车用柴油"
 
-msgid "Eni"
+msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
-msgid "Esso"
-msgstr "埃索(Esso)"
+msgid "1/50 mix (mofa/moped)"
+msgstr ""
 
-msgid "Exxon"
-msgstr "埃克森(Exxon)"
+msgid "Fuel cards:"
+msgstr "加油卡:"
 
-msgid "Gulf"
-msgstr "海湾(Gulf)"
+msgid "DKV"
+msgstr ""
 
-msgid "Mobil"
-msgstr "美孚(Mobil)"
+msgid "Routex"
+msgstr ""
 
-msgid "OMV"
-msgstr "奥地利石油和天然气集团(OMV)"
+msgid "UTA"
+msgstr ""
 
-msgid "Petro-Canada"
-msgstr "加拿大石油(Petro-Canada)"
+msgid "Charging Station"
+msgstr "充电站"
 
-msgid "Pioneer"
-msgstr "先锋(Pioneer)"
+msgid "Voltage"
+msgstr "电压"
 
-msgid "Q8"
-msgstr "科威特石油(Q8)"
+msgid "Amperage"
+msgstr "安"
 
-msgid "Repsol"
-msgstr "雷普索尔(Repsol)"
+msgid "Wash"
+msgstr "洗车"
 
-msgid "Shell"
-msgstr "壳牌(Shell)"
+msgid "Car Dealer"
+msgstr "汽车经销商"
 
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr "挪威国家石油(Statoil)"
-
-msgid "Sunoco"
-msgstr "太阳(Sunoco)"
-
-msgid "Tamoil"
-msgstr "塔莫尔(Tamoil)"
-
-msgid "Texaco"
-msgstr "德士古(Texaco)"
-
-msgid "Total"
-msgstr "道达尔(Total)"
-
-msgid "Independent"
-msgstr "个体"
-
-msgid "With shop"
-msgstr "带商店"
-
-msgid "convenience"
-msgstr "便利店"
-
-msgid "kiosk"
-msgstr "售货亭"
-
-msgid "Fuel types:"
-msgstr "燃油类型:"
-
-msgid "Diesel"
-msgstr "柴油"
-
-msgid "Bio Diesel"
-msgstr "生物柴油"
-
-msgid "Diesel (Gas To Liquid - ultimate diesel)"
-msgstr "柴油(天然气合成)"
-
-msgid "Diesel for Heavy Good Vehicles"
-msgstr "重型货车用柴油"
-
-msgid "Octane 80"
-msgstr "80 号"
-
-msgid "Octane 91"
-msgstr "91 号"
-
-msgid "Octane 92"
-msgstr "92 号"
-
-msgid "Octane 95"
-msgstr "95 号"
-
-msgid "Octane 98"
-msgstr "98 号"
-
-msgid "Octane 100"
-msgstr "100 号"
-
-msgid "E10 (10% Ethanol mix)"
-msgstr "E10(添加 10% 乙醇)"
-
-msgid "E85 (85% Ethanol mix)"
-msgstr "E85(添加 85% 乙醇)"
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr "液化石油气(LPG)"
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr "压缩天然气(CNG)"
-
-msgid "1/25 mix (mofa/moped)"
-msgstr ""
-
-msgid "1/50 mix (mofa/moped)"
-msgstr ""
-
-msgid "Fuel cards:"
-msgstr ""
-
-msgid "DKV"
-msgstr ""
-
-msgid "Routex"
-msgstr ""
-
-msgid "UTA"
-msgstr ""
-
-msgid "Charging Station"
-msgstr "充电站"
-
-msgid "Voltage"
-msgstr "电压"
-
-msgid "Amperage"
-msgstr "安"
-
-msgid "Wash"
-msgstr "洗车"
-
-msgid "Car Dealer"
-msgstr "汽车经销商"
-
-msgid "Second hand"
-msgstr "二手"
+msgid "Second hand"
+msgstr "二手"
 
 msgid "only"
 msgstr "只有"
@@ -17755,7 +18087,7 @@ msgid "Parts"
 msgstr "配件"
 
 msgid "Tires"
-msgstr ""
+msgstr "轮胎"
 
 msgid "Rental"
 msgstr "租车"
@@ -17851,16 +18183,16 @@ msgid "Bicycles are washed (for a fee)"
 msgstr "清洗自行车(收费)"
 
 msgid "Public Bicycle Repair Station"
-msgstr ""
+msgstr "公共自行车维修站"
 
 msgid "Chain tool"
-msgstr ""
+msgstr "车链工具"
 
 msgid "Public Transport"
 msgstr "公共交通"
 
 msgid "Public Transport Route"
-msgstr ""
+msgstr "公共交通路线"
 
 msgid "Route type"
 msgstr "路线类型"
@@ -17927,9 +18259,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr "#CD853F"
 
-msgid "route segment"
-msgstr "路线区段"
-
 msgid "stop position"
 msgstr "停车位置"
 
@@ -17948,8 +18277,11 @@ msgstr "站台(仅下客)"
 msgid "platform (entry only)"
 msgstr "站台(仅上客)"
 
+msgid "route segment"
+msgstr "路线区段"
+
 msgid "Route Master"
-msgstr ""
+msgstr "主干线"
 
 msgid "route variant/direction (at least 2)"
 msgstr ""
@@ -17958,13 +18290,13 @@ msgid "Stop Area"
 msgstr ""
 
 msgid "UIC reference"
-msgstr ""
+msgstr "UIC 编号"
 
 msgid "UIC name"
 msgstr "UIC 名称"
 
 msgid "Stop Position"
-msgstr ""
+msgstr "停车位置"
 
 msgid "Platform"
 msgstr "站台"
@@ -17973,7 +18305,7 @@ msgid "Subway Entrance"
 msgstr "地铁入口"
 
 msgid "Station or amenities"
-msgstr ""
+msgstr "车站或设施"
 
 msgid "Bus"
 msgstr "公交车"
@@ -18034,10 +18366,10 @@ msgid "Reference Number"
 msgstr "编号"
 
 msgid "Public Transport (Legacy)"
-msgstr ""
+msgstr "公共交通(旧式标记)"
 
 msgid "Public transport route (Legacy)"
-msgstr ""
+msgstr "公共交通路线(旧式标记)"
 
 msgid "forward segment"
 msgstr "顺向区段"
@@ -18079,7 +18411,7 @@ msgid "Tactile Paving"
 msgstr "盲道"
 
 msgid "incorrect"
-msgstr ""
+msgstr "不正确"
 
 msgid "Bus Platform"
 msgstr "公交车月台"
@@ -18112,7 +18444,7 @@ msgid "Apron"
 msgstr "停机坪"
 
 msgid "Plane Parking Position"
-msgstr ""
+msgstr "机位"
 
 msgid "Hangar"
 msgstr "飞机库"
@@ -18150,6 +18482,12 @@ msgstr "旅馆"
 msgid "Stars"
 msgstr "星级"
 
+msgid "Rooms"
+msgstr "房间"
+
+msgid "Beds"
+msgstr "床位"
+
 msgid "Motel"
 msgstr "汽车旅馆"
 
@@ -18240,6 +18578,9 @@ msgstr "三明治"
 msgid "sushi"
 msgstr "寿司"
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr "自酿酒"
 
@@ -18268,16 +18609,16 @@ msgid "Pub"
 msgstr "酒店"
 
 msgid "Beer Garden"
-msgstr ""
+msgstr "啤酒花园"
 
 msgid "Bar"
 msgstr "酒吧"
 
 msgid "Night Club"
-msgstr ""
+msgstr "夜店"
 
 msgid "Strip Club"
-msgstr ""
+msgstr "脱衣舞酒吧"
 
 msgid "Tourism"
 msgstr "旅游"
@@ -18301,7 +18642,7 @@ msgid "Map"
 msgstr "地图"
 
 msgid "A board with a map."
-msgstr ""
+msgstr "地图展示板。"
 
 msgid "Detail Grade"
 msgstr "详细等级"
@@ -18358,7 +18699,7 @@ msgid "Information Board"
 msgstr "信息板"
 
 msgid "A board with information."
-msgstr ""
+msgstr "信息展示板。"
 
 msgid "Board Content"
 msgstr "信息板内容"
@@ -18379,29 +18720,29 @@ msgid "plants"
 msgstr "植物"
 
 msgid "geology"
-msgstr ""
+msgstr "地质"
 
 msgid "Guidepost"
 msgstr "路牌"
 
 msgid ""
 "A Signpost/Guidepost to indicate the directions to different destinations."
-msgstr ""
+msgstr "指到不同目的地方向的路标/指路牌。"
 
 msgid "Information Terminal"
 msgstr "信息终端机"
 
 msgid "Information access via electronic methods."
-msgstr ""
+msgstr "通过电子方式获取信息。"
 
 msgid "Closer description"
 msgstr "贴切描述"
 
 msgid "Audio Guide"
-msgstr ""
+msgstr "语音导览"
 
 msgid "Information using headphones or a mobile phone."
-msgstr ""
+msgstr "使用耳机或手机获取信息。"
 
 msgid "Audioguide via mobile phone?"
 msgstr "在手机上的语音导览?"
@@ -18416,25 +18757,25 @@ msgid "Leisure"
 msgstr "休闲"
 
 msgid "Movie Theater/Cinema"
-msgstr ""
+msgstr "电影院"
 
 msgid "Drive-in theater"
-msgstr ""
+msgstr "汽车影院"
 
 msgid "3D"
-msgstr ""
+msgstr "3D"
 
 msgid "Number of screens"
-msgstr ""
+msgstr "屏幕数"
 
 msgid "Minimum age"
-msgstr ""
+msgstr "最低年龄"
 
 msgid "Zoo"
 msgstr "动物园"
 
 msgid "Dog Park"
-msgstr ""
+msgstr "狗狗公园"
 
 msgid "fence"
 msgstr "栅栏"
@@ -18443,7 +18784,7 @@ msgid "wall"
 msgstr "墙"
 
 msgid "Amusement/Theme Park"
-msgstr ""
+msgstr "主题公园"
 
 msgid "Water Park"
 msgstr "水上乐园"
@@ -18452,7 +18793,10 @@ msgid "Sauna"
 msgstr "桑拿"
 
 msgid "Horse Riding"
-msgstr ""
+msgstr "马场"
+
+msgid "Casino"
+msgstr "赌场"
 
 msgid "Brothel"
 msgstr "妓院"
@@ -18467,7 +18811,7 @@ msgid "Fireplace"
 msgstr "壁炉"
 
 msgid "Picnic Table"
-msgstr ""
+msgstr "野餐餐桌"
 
 msgid "Public Grill"
 msgstr "公共烧烤区"
@@ -18480,7 +18824,7 @@ msgid "charcoal"
 msgstr "木炭"
 
 msgid "Firepit"
-msgstr ""
+msgstr "火塘"
 
 msgid "Fishing"
 msgstr "钓鱼"
@@ -18537,7 +18881,7 @@ msgid "Building type"
 msgstr "建筑类型"
 
 msgid "basilica"
-msgstr ""
+msgstr "大殿"
 
 msgid "cathedral"
 msgstr "大教堂"
@@ -18553,79 +18897,79 @@ msgstr "寺庙"
 
 msgctxt "christian"
 msgid "anglican"
-msgstr ""
+msgstr "安立甘宗(英国国教)"
 
 msgctxt "christian"
 msgid "baptist"
-msgstr ""
+msgstr "浸信会"
 
 msgctxt "christian"
 msgid "catholic"
-msgstr ""
+msgstr "天主教"
 
 msgctxt "christian"
 msgid "evangelical"
-msgstr ""
+msgstr "福音派"
 
 msgctxt "christian"
 msgid "greek_catholic"
-msgstr ""
+msgstr "希腊天主教"
 
 msgctxt "christian"
 msgid "greek_orthodox"
-msgstr ""
+msgstr "希腊东正教"
 
 msgctxt "christian"
 msgid "jehovahs_witness"
-msgstr ""
+msgstr "耶和华见证会"
 
 msgctxt "christian"
 msgid "lutheran"
-msgstr ""
+msgstr "路德宗"
 
 msgctxt "christian"
 msgid "methodist"
-msgstr ""
+msgstr "卫理公会"
 
 msgctxt "christian"
 msgid "mormon"
-msgstr ""
+msgstr "摩门教"
 
 msgctxt "christian"
 msgid "new_apostolic"
-msgstr ""
+msgstr "新使徒"
 
 msgctxt "christian"
 msgid "orthodox"
-msgstr ""
+msgstr "东正教"
 
 msgctxt "christian"
 msgid "pentecostal"
-msgstr ""
+msgstr "圣灵降临派"
 
 msgctxt "christian"
 msgid "presbyterian"
-msgstr ""
+msgstr "长老派"
 
 msgctxt "christian"
 msgid "protestant"
-msgstr ""
+msgstr "新教"
 
 msgctxt "christian"
 msgid "quaker"
-msgstr ""
+msgstr "教友派"
 
 msgctxt "christian"
 msgid "roman_catholic"
-msgstr ""
+msgstr "罗马天主教"
 
 msgctxt "christian"
 msgid "russian_orthodox"
-msgstr ""
+msgstr "俄罗斯东正教"
 
 msgctxt "christian"
 msgid "seventh_day_adventist"
-msgstr ""
+msgstr "复临安息日会"
 
 msgid "Mosque"
 msgstr "清真寺"
@@ -18634,7 +18978,7 @@ msgid "mosque"
 msgstr "清真寺"
 
 msgid "ibadi"
-msgstr ""
+msgstr "艾巴德派"
 
 msgid "Synagogue"
 msgstr "犹太教堂"
@@ -18644,15 +18988,15 @@ msgstr "犹太教"
 
 msgctxt "jewish"
 msgid "orthodox"
-msgstr ""
+msgstr "东正教"
 
 msgctxt "jewish"
 msgid "conservative"
-msgstr ""
+msgstr "保守派"
 
 msgctxt "jewish"
 msgid "reform"
-msgstr ""
+msgstr "改革派"
 
 msgid "Buddhist Temple"
 msgstr "佛教寺庙"
@@ -18673,10 +19017,10 @@ msgid "vaishnavism"
 msgstr "毗湿奴"
 
 msgid "shaivism"
-msgstr "湿婆"
+msgstr "湿婆派"
 
 msgid "shaktism"
-msgstr ""
+msgstr "性力派"
 
 msgid "smartism"
 msgstr ""
@@ -18691,7 +19035,7 @@ msgid "Public Building"
 msgstr "公共建筑"
 
 msgid "Town Hall"
-msgstr ""
+msgstr "市政厅"
 
 msgid "Community Centre"
 msgstr "社区中心"
@@ -18709,7 +19053,7 @@ msgid "Police"
 msgstr "警察局"
 
 msgid "Ranger Station"
-msgstr ""
+msgstr "护林站"
 
 msgid "Fire Station"
 msgstr "消防队"
@@ -18736,13 +19080,13 @@ msgid "Driving School"
 msgstr "驾校"
 
 msgid "License Classes"
-msgstr "许可类型"
+msgstr "驾照类型"
 
 msgid "A;A1;B;BE;C"
-msgstr ""
+msgstr "A;A1;B;BE;C"
 
 msgid "A;A1;B;B1;C;C1;D;D1;BE;CE;C1E;DE;D1E"
-msgstr ""
+msgstr "A;A1;B;B1;C;C1;D;D1;BE;CE;C1E;DE;D1E"
 
 msgid "Health"
 msgstr "健康"
@@ -18751,10 +19095,10 @@ msgid "Hospital"
 msgstr "医院"
 
 msgid "Clinic"
-msgstr ""
+msgstr "诊所"
 
 msgid "Doctor''s Office"
-msgstr ""
+msgstr "医生办公室"
 
 msgid "Dentist"
 msgstr "牙医"
@@ -18772,7 +19116,7 @@ msgid "Dispensing"
 msgstr "配药"
 
 msgid "Baby Hatch/Safe Haven"
-msgstr ""
+msgstr "婴儿安全岛"
 
 msgid "Emergency Access Point"
 msgstr "紧急连络点"
@@ -18793,13 +19137,13 @@ msgid "Veterinary"
 msgstr "兽医"
 
 msgid "Toilets/Restrooms"
-msgstr ""
+msgstr "厕所/洗手间"
 
 msgid "Access rights"
-msgstr ""
+msgstr "访问权限"
 
 msgid "seasonal"
-msgstr ""
+msgstr "时令"
 
 msgid "flush"
 msgstr ""
@@ -18814,40 +19158,40 @@ msgid "bucket"
 msgstr ""
 
 msgid "Usage Position"
-msgstr ""
+msgstr "使用位置"
 
 msgid "seated"
-msgstr ""
+msgstr "坐式"
 
 msgid "seated;urinal"
-msgstr ""
+msgstr "坐式;小便器"
 
 msgid "squat"
-msgstr ""
+msgstr "蹲式"
 
 msgid "urinal"
-msgstr ""
+msgstr "小便器"
 
 msgid "Shower"
-msgstr ""
+msgstr "淋浴"
 
 msgid "Post Box"
 msgstr "邮筒"
 
 msgid "Collection times"
-msgstr ""
+msgstr "收集时间"
 
 msgid "Mo-Sa 09:00"
-msgstr ""
+msgstr "周一-周六 09:00"
 
 msgid "Mo-Fr 17:30; Sa 12:00"
-msgstr ""
+msgstr "周一-周五 17:30; 周六 12:00"
 
 msgid "Mo-Fr 15:00,19:00; Sa 15:10; Su 10:30"
-msgstr ""
+msgstr "周一-周五 15:00,19:00; 周六 15:10; 周日 10:30"
 
 msgid "Drive through"
-msgstr ""
+msgstr "不停车"
 
 msgid "Telephone"
 msgstr "电话"
@@ -18857,7 +19201,7 @@ msgstr "硬币"
 
 msgctxt "payment"
 msgid "Notes"
-msgstr ""
+msgstr "备注"
 
 msgid "Telephone cards"
 msgstr "电话卡"
@@ -18866,19 +19210,19 @@ msgid "Emergency Phone"
 msgstr "紧急电话"
 
 msgid "Internet Access"
-msgstr ""
+msgstr "互联网访问"
 
 msgid "Automated Defibrillator"
-msgstr ""
+msgstr "自动除颤器"
 
 msgid "Located inside a building?"
-msgstr ""
+msgstr "位于建筑物内?"
 
 msgid "Last check date (YYYY-MM-DD)"
-msgstr ""
+msgstr "最后检查日期(YYYY-MM-DD)"
 
 msgid "Last check note"
-msgstr ""
+msgstr "最后检查说明"
 
 msgid "Clock"
 msgstr "时钟"
@@ -18887,35 +19231,35 @@ msgid "Display"
 msgstr "显示"
 
 msgid "analog"
-msgstr ""
+msgstr "模拟"
 
 msgid "digital"
-msgstr ""
+msgstr "数字"
 
 msgid "sundial"
-msgstr ""
+msgstr "日晷"
 
 msgid "unorthodox"
-msgstr ""
+msgstr "非传统"
 
 msgid "Support"
 msgstr "支撑"
 
 msgctxt "mounting/support"
 msgid "pole"
-msgstr ""
+msgstr "杆"
 
 msgctxt "mounting/support"
 msgid "wall_mounted"
-msgstr ""
+msgstr "墙上"
 
 msgctxt "mounting/support"
 msgid "billboard"
-msgstr ""
+msgstr "展板"
 
 msgctxt "mounting/support"
 msgid "ground"
-msgstr ""
+msgstr "地面"
 
 msgid "Visibility/readability"
 msgstr "可见性/可读性"
@@ -18941,8 +19285,8 @@ msgstr "显示气压"
 msgid "Shows humidity"
 msgstr "显示湿度"
 
-msgid "Recycling"
-msgstr "回收"
+msgid "Recycling Container"
+msgstr "回收箱"
 
 msgid "Batteries"
 msgstr "电池"
@@ -18950,29 +19294,56 @@ msgstr "电池"
 msgid "Cans"
 msgstr "瓶罐"
 
+msgid "Cardboard"
+msgstr "纸板箱"
+
+msgid "Electrical Appliances"
+msgstr "电器"
+
 msgid "Glass"
 msgstr "玻璃"
 
+msgid "Glass Bottles"
+msgstr "玻璃瓶"
+
+msgid "Green Waste"
+msgstr "绿色废物"
+
 msgid "Paper"
 msgstr "纸张"
 
+msgid "Plastic"
+msgstr "塑料"
+
+msgid "Plastic Bottles"
+msgstr "塑料瓶"
+
+msgid "Plastic Packaging"
+msgstr "塑料包装"
+
 msgid "Scrap Metal"
 msgstr "废金属"
 
-msgid "container"
-msgstr "箱子"
+msgid "Shoes"
+msgstr "鞋"
+
+msgid "Small Appliances"
+msgstr "小家电"
+
+msgid "Waste"
+msgstr "垃圾"
 
-msgid "centre"
-msgstr "中心"
+msgid "Recycling Centre"
+msgstr "回收中心"
 
 msgid "Waste Basket/Trash Can"
-msgstr ""
+msgstr "废纸篓/垃圾箱"
 
 msgid "Waste Disposal/Dumpster"
-msgstr ""
+msgstr "废物处理/垃圾站"
 
 msgid "Sanitary Dump Station"
-msgstr ""
+msgstr "垃圾转运站"
 
 msgid "Suction pumpout"
 msgstr ""
@@ -19027,15 +19398,15 @@ msgstr "高度"
 
 msgctxt "height"
 msgid "low"
-msgstr ""
+msgstr "低"
 
 msgctxt "height"
 msgid "half"
-msgstr ""
+msgstr "半"
 
 msgctxt "height"
 msgid "full"
-msgstr ""
+msgstr "全"
 
 msgid "Hide"
 msgstr "隐藏"
@@ -19044,7 +19415,7 @@ msgid "Lock"
 msgstr "锁"
 
 msgid "Indoor"
-msgstr ""
+msgstr "室内"
 
 msgid "Fire Hydrant"
 msgstr "消防栓"
@@ -19055,7 +19426,7 @@ msgstr "地下"
 
 msgctxt "pipeline"
 msgid "pillar"
-msgstr ""
+msgstr "立柱"
 
 msgctxt "pipeline"
 msgid "wall"
@@ -19063,13 +19434,13 @@ msgstr "墙上"
 
 msgctxt "pipeline"
 msgid "pond"
-msgstr ""
+msgstr "池塘"
 
 msgid "Diameter (in mm)"
 msgstr "直径(毫米)"
 
 msgid "Hydrant Position"
-msgstr ""
+msgstr "消防栓"
 
 msgctxt "hydrant position"
 msgid "lane"
@@ -19097,10 +19468,10 @@ msgid "Count"
 msgstr "数目"
 
 msgid "Advertising Column"
-msgstr ""
+msgstr "广告栏"
 
 msgid "Billboard"
-msgstr ""
+msgstr "公告板"
 
 msgid "Sports"
 msgstr "运动"
@@ -19118,13 +19489,13 @@ msgid "Pitch"
 msgstr "场地"
 
 msgid "artificial_turf"
-msgstr ""
+msgstr "人工草皮"
 
 msgid "decoturf"
 msgstr ""
 
 msgid "tartan"
-msgstr ""
+msgstr "塑胶"
 
 msgid "Racetrack"
 msgstr "跑道"
@@ -19155,22 +19526,25 @@ msgid "track"
 msgstr ""
 
 msgid "Nine-pin Bowling"
-msgstr ""
+msgstr "九瓶保龄球"
 
 msgid "Ten-pin Bowling"
-msgstr ""
+msgstr "十瓶保龄球"
 
 msgid "Archery"
 msgstr "射箭"
 
 msgid "Track and Field Athletics"
+msgstr "田径场"
+
+msgid "Running"
 msgstr ""
 
 msgid "Climbing"
 msgstr "攀岩"
 
 msgid "Canoeing/Kayaking"
-msgstr ""
+msgstr "独木舟/皮划艇"
 
 msgctxt "racing"
 msgid "pitch"
@@ -19219,7 +19593,7 @@ msgid "water_park"
 msgstr "水上公园"
 
 msgid "Scuba Diving"
-msgstr ""
+msgstr "水肺潜水"
 
 msgid "Piste type"
 msgstr "滑雪方式"
@@ -19231,39 +19605,39 @@ msgid "nordic"
 msgstr "北欧"
 
 msgid "skitour"
-msgstr ""
+msgstr "滑雪旅行"
 
 msgid "sled"
-msgstr ""
+msgstr "雪橇"
 
 msgid "sleigh"
-msgstr ""
+msgstr "雪橇车"
 
 msgid "snow_park"
-msgstr "公园"
+msgstr "冰雪乐园"
 
 msgid "Difficulty"
-msgstr "困难度"
+msgstr "难度"
 
 msgctxt "piste:difficulty"
 msgid "novice"
-msgstr ""
+msgstr "新手"
 
 msgctxt "piste:difficulty"
 msgid "easy"
-msgstr ""
+msgstr "简单"
 
 msgctxt "piste:difficulty"
 msgid "intermediate"
-msgstr ""
+msgstr "适中"
 
 msgctxt "piste:difficulty"
 msgid "advanced"
-msgstr ""
+msgstr "高级"
 
 msgctxt "piste:difficulty"
 msgid "expert"
-msgstr ""
+msgstr "专业"
 
 msgctxt "piste:difficulty"
 msgid "freeride"
@@ -19312,22 +19686,22 @@ msgid "American Football"
 msgstr "美式足球"
 
 msgid "Canadian Football"
-msgstr "加拿大式足球"
+msgstr "加拿大橄榄球"
 
 msgid "Gaelic Games"
-msgstr ""
+msgstr "盖尔赛"
 
 msgid "Hurling"
-msgstr ""
+msgstr "爱尔兰曲棍球"
 
 msgid "Football"
-msgstr ""
+msgstr "橄榄球"
 
 msgid "Camogie"
-msgstr ""
+msgstr "卡莫奇"
 
 msgid "Rounders"
-msgstr ""
+msgstr "弧形球"
 
 msgid "Rugby League"
 msgstr "联盟式橄榄球"
@@ -19341,11 +19715,17 @@ msgstr "棒球"
 msgid "Basketball"
 msgstr "篮球"
 
+msgid "Handball"
+msgstr "手球"
+
 msgid "Volleyball"
 msgstr "排球"
 
 msgid "Beach Volleyball"
-msgstr ""
+msgstr "沙滩排球"
+
+msgid "Billiards"
+msgstr "台球"
 
 msgid "Golf"
 msgstr "高尔夫"
@@ -19357,28 +19737,28 @@ msgid "Boule"
 msgstr "草地滚球"
 
 msgid "Lawn Bowling"
-msgstr ""
+msgstr "草地保龄球"
 
 msgid "Cricket"
 msgstr "板球"
 
-msgid "Cricket Nets"
-msgstr "板球网"
-
 msgid "Croquet"
 msgstr "木球"
 
-msgid "Hockey"
+msgid "Field Hockey"
 msgstr "曲棍球"
 
+msgid "Ice Hockey"
+msgstr "冰球"
+
 msgid "Pelota"
 msgstr "回力球"
 
 msgid "Racquetball"
-msgstr ""
+msgstr "壁球"
 
 msgid "Table Tennis/Ping-Pong"
-msgstr ""
+msgstr "乒乓球"
 
 msgid "Tennis"
 msgstr "网球"
@@ -19387,14 +19767,11 @@ msgid "Motorsport"
 msgstr "赛车"
 
 msgid "Kart Racing"
-msgstr ""
+msgstr "卡丁车"
 
 msgid "Motocross"
 msgstr "摩托车越野赛"
 
-msgid "Safety Training"
-msgstr "安全培训"
-
 msgid "Model Aerodrome"
 msgstr "模型飞机机场"
 
@@ -19413,9 +19790,6 @@ msgstr "赛道"
 msgid "RC Car"
 msgstr "遥控车"
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr "人造物"
 
@@ -19445,11 +19819,11 @@ msgstr "商业"
 
 msgctxt "building"
 msgid "barn"
-msgstr ""
+msgstr "谷仓"
 
 msgctxt "building"
 msgid "farm_auxiliary"
-msgstr ""
+msgstr "农场辅助"
 
 msgctxt "building"
 msgid "transportation"
@@ -19485,19 +19859,27 @@ msgstr "棚舍"
 
 msgctxt "building"
 msgid "storage_tank"
+msgstr "储存罐"
+
+msgctxt "building"
+msgid "supermarket"
+msgstr "超市"
+
+msgctxt "building"
+msgid "gasometer"
 msgstr ""
 
 msgctxt "building"
 msgid "cowshed"
-msgstr ""
+msgstr "牛舍"
 
 msgctxt "building"
 msgid "construction"
-msgstr ""
+msgstr "在建"
 
 msgctxt "building"
 msgid "Levels"
-msgstr ""
+msgstr "层数"
 
 msgid "Residential Building"
 msgstr "住宅楼"
@@ -19568,10 +19950,10 @@ msgid "emergency"
 msgstr "紧急"
 
 msgid "Entrance number"
-msgstr ""
+msgstr "入口编号"
 
 msgid "Flat numbers"
-msgstr ""
+msgstr "公寓编号"
 
 msgid "Tower"
 msgstr "塔"
@@ -19601,42 +19983,42 @@ msgid "Gasometer"
 msgstr "贮气桶"
 
 msgid "Storage Tank"
-msgstr ""
+msgstr "储罐"
 
 msgctxt "content"
 msgid "fuel"
-msgstr ""
+msgstr "燃料"
 
 msgctxt "content"
 msgid "manure"
-msgstr ""
+msgstr "粪便"
 
 msgctxt "content"
 msgid "oil"
-msgstr ""
+msgstr "石油"
 
 msgctxt "content"
 msgid "sewage"
-msgstr ""
+msgstr "污水"
 
 msgctxt "content"
 msgid "silage"
-msgstr ""
+msgstr "青贮"
 
 msgctxt "content"
 msgid "slurry"
-msgstr ""
+msgstr "泥浆"
 
 msgctxt "content"
 msgid "water"
-msgstr ""
+msgstr "水"
 
 msgctxt "content"
 msgid "wine"
-msgstr ""
+msgstr "酒"
 
 msgid "Bunker Silo"
-msgstr ""
+msgstr "邦克筒仓"
 
 msgid "Pipeline"
 msgstr "管道"
@@ -19752,13 +20134,13 @@ msgid "Water Tower"
 msgstr "贮水塔"
 
 msgid "Water Works"
-msgstr "给水厂"
+msgstr "自来水厂"
 
 msgid "Wastewater Treatment Plant"
-msgstr ""
+msgstr "污水处理厂"
 
 msgid "Watermill"
-msgstr "使用水车的磨坊"
+msgstr "水车磨坊"
 
 msgid "Fountain"
 msgstr "喷泉"
@@ -19773,7 +20155,7 @@ msgid "Street Lamp"
 msgstr "路灯"
 
 msgid "Mo-Fr 22:00-05:00"
-msgstr "周一-周五 22:00-05:00"
+msgstr "周一-周五 22:00-05:00"
 
 msgid "Monitoring Station"
 msgstr "监测站"
@@ -19788,7 +20170,7 @@ msgid "Tide Level"
 msgstr "潮位"
 
 msgid "Groundwater"
-msgstr ""
+msgstr "地下水"
 
 msgid "Traffic"
 msgstr "交通"
@@ -19870,7 +20252,7 @@ msgstr "相机"
 
 msgctxt "camera:type"
 msgid "fixed"
-msgstr ""
+msgstr "固定"
 
 msgctxt "camera:type"
 msgid "panning"
@@ -19878,37 +20260,37 @@ msgstr ""
 
 msgctxt "camera:type"
 msgid "dome"
-msgstr ""
+msgstr "拱顶"
 
 msgid "Mounted on"
-msgstr "安装在"
+msgstr "位置"
 
 msgctxt "camera:mount"
 msgid "wall"
-msgstr ""
+msgstr "墙上"
 
 msgctxt "camera:mount"
 msgid "pole"
-msgstr ""
+msgstr "竿"
 
 msgctxt "camera:mount"
 msgid "ceiling"
-msgstr ""
+msgstr "天花板"
 
 msgid "Direction in degrees"
-msgstr "方向角度"
+msgstr "方向角"
 
 msgid "Inclination in degrees"
-msgstr "倾斜角度"
+msgstr "倾斜角"
 
 msgid "Bridges"
-msgstr ""
+msgstr "桥梁"
 
 msgid "aqueduct"
-msgstr "渠桥"
+msgstr "水渠"
 
 msgid "boardwalk"
-msgstr ""
+msgstr "木板路"
 
 msgid "cantilever"
 msgstr ""
@@ -19920,52 +20302,52 @@ msgid "low_water_crossing"
 msgstr ""
 
 msgid "trestle"
-msgstr ""
+msgstr "栈桥"
 
 msgid "viaduct"
 msgstr "旱桥"
 
 msgid "Structure"
-msgstr ""
+msgstr "结构"
 
 msgid "arch"
-msgstr ""
+msgstr "拱形"
 
 msgid "beam"
-msgstr ""
+msgstr "横梁"
 
 msgid "truss"
-msgstr ""
+msgstr "桁架"
 
 msgid "floating"
-msgstr ""
+msgstr "浮桥"
 
 msgid "suspension"
-msgstr "悬索桥"
+msgstr "悬索"
 
 msgid "cable-stayed"
-msgstr ""
+msgstr "斜拉"
 
 msgid "simple-suspension"
-msgstr ""
+msgstr "简单悬挂"
 
 msgid "humpback"
-msgstr ""
+msgstr "弓形"
 
 msgid "Movable Bridge"
-msgstr ""
+msgstr "活动桥"
 
 msgid "bascule"
-msgstr ""
+msgstr "竖旋"
 
 msgid "drawbridge"
-msgstr ""
+msgstr "吊拉"
 
 msgid "lift"
-msgstr ""
+msgstr "升降"
 
 msgid "submersible"
-msgstr ""
+msgstr "潜水"
 
 msgid "swing"
 msgstr "吊桥"
@@ -19974,7 +20356,7 @@ msgid "transporter"
 msgstr ""
 
 msgid "Bridge Support"
-msgstr ""
+msgstr "桥墩"
 
 msgid "pier"
 msgstr ""
@@ -19998,10 +20380,10 @@ msgid "Output forms of energy (optional):"
 msgstr ""
 
 msgid "Power Generator"
-msgstr "发电厂"
+msgstr "发电机"
 
 msgid "Biofuel Power Generator"
-msgstr ""
+msgstr "生物燃料发电机"
 
 msgid "Generator Type"
 msgstr "发电机类型"
@@ -20016,10 +20398,10 @@ msgid "steam_generator"
 msgstr "蒸汽发生器"
 
 msgid "Biogas Power Generator"
-msgstr ""
+msgstr "沼气发电机"
 
 msgid "Biomass Power Generator"
-msgstr ""
+msgstr "生物质能源发电机"
 
 msgid "Method"
 msgstr "方式"
@@ -20037,40 +20419,40 @@ msgid "gasification"
 msgstr "气化"
 
 msgid "bioreactor"
-msgstr ""
+msgstr "生物反应器"
 
 msgid "anaerobic_digestion / combustion"
-msgstr ""
+msgstr "厌氧消化/燃烧"
 
 msgid "pyrolysis"
-msgstr ""
+msgstr "热解"
 
 msgid "combustion"
-msgstr ""
+msgstr "燃烧"
 
 msgid "steam_turbine"
 msgstr "汽轮机"
 
 msgid "Coal Power Generator"
-msgstr ""
+msgstr "燃煤发电机"
 
 msgid "Gas Power Generator"
-msgstr ""
+msgstr "天然气发电机"
 
 msgid "combined_cycle"
 msgstr "联合循环"
 
 msgid "Oil Power Generator"
-msgstr ""
+msgstr "燃油发电机"
 
 msgid "Diesel Power Generator"
-msgstr ""
+msgstr "柴油发动机"
 
 msgid "Gasoline Power Generator"
-msgstr ""
+msgstr "汽油发电机"
 
 msgid "Nuclear Reactor"
-msgstr ""
+msgstr "核反应堆"
 
 msgctxt "generator method"
 msgid "fission"
@@ -20081,40 +20463,40 @@ msgid "fusion"
 msgstr "聚变"
 
 msgid "Boiling Water Reactor 1 (BWR-1)"
-msgstr "第1代沸水反应堆(BWR-1)"
+msgstr "第 1 代沸水堆(BWR-1)"
 
 msgid "fission"
-msgstr ""
+msgstr "裂变"
 
 msgid "Boiling Water Reactor 2 (BWR-2)"
-msgstr "第2代沸水反应堆(BWR-2)"
+msgstr "第 2 代沸水堆(BWR-2)"
 
 msgid "Boiling Water Reactor 3 (BWR-3)"
-msgstr "第3代沸水反应堆(BWR-3)"
+msgstr "第 3 代沸水堆(BWR-3)"
 
 msgid "Boiling Water Reactor 4 (BWR-4)"
-msgstr "第4代沸水反应堆(BWR-4)"
+msgstr "第 4 代沸水堆(BWR-4)"
 
 msgid "Boiling Water Reactor 5 (BWR-5)"
-msgstr "第2代沸水反应堆(BWR-2)"
+msgstr "第 5 代沸水堆(BWR-5)"
 
 msgid "Boiling Water Reactor 6 (BWR-6)"
-msgstr "第6代沸水反应堆(BWR-6)"
+msgstr "第 6 代沸水堆(BWR-6)"
 
 msgid "CANada Deuterium Uranium reactor (CANDU)"
 msgstr "加拿大氘铀反应堆(CANDU)"
 
 msgid "cold-fusion"
-msgstr ""
+msgstr "冷聚变"
 
 msgid "fusion"
-msgstr ""
+msgstr "聚变"
 
 msgid "China Pressurized Reactor (CPR-1000)"
 msgstr "中国压水堆(CPR-1000)"
 
 msgid "European Pressurized Reactor (EPR)"
-msgstr "欧洲压水堆(EPR"
+msgstr "欧洲压水堆(EPR)"
 
 msgid "Inertial Confinement Fusion (ICF)"
 msgstr "惯性约束聚变(ICF)"
@@ -20123,10 +20505,10 @@ msgid "Pressurized water reactor (PWR)"
 msgstr "压水反应堆(PWR)"
 
 msgid "Reactor Bolshoy Moshchnosti Kanalniy 1000 (RBMK-1000)"
-msgstr "压力管式石墨慢化沸水反应炉1000(RBMK-1000)"
+msgstr "压力管式石墨慢化沸水反应炉 1000(RBMK-1000)"
 
 msgid "Reactor Bolshoy Moshchnosti Kanalniy 1500 (RBMK-1500)"
-msgstr "压力管式石墨慢化沸水反应炉1500(RBMK-1500)"
+msgstr "压力管式石墨慢化沸水反应炉 1500(RBMK-1500)"
 
 msgid "stellarator"
 msgstr "仿星器"
@@ -20138,7 +20520,7 @@ msgid "Vodo-Vodyanoi Energetichesky Reactor (VVER)"
 msgstr "压水冷却慢化反应堆(VVER)"
 
 msgid "Solar Power Generator"
-msgstr ""
+msgstr "太阳能发电机"
 
 msgctxt "generator method"
 msgid "photovoltaic"
@@ -20152,26 +20534,26 @@ msgid "solar_photovoltaic_panel"
 msgstr "太阳能光伏板"
 
 msgid "photovoltaic"
-msgstr ""
+msgstr "光伏"
 
 msgid "solar_thermal_collector"
 msgstr "太阳能集热器"
 
 msgid "thermal"
-msgstr ""
+msgstr "导热"
 
 msgid "Waste Power Generator"
-msgstr ""
+msgstr "垃圾焚烧发电机"
 
 msgctxt "generator method"
 msgid "pyrolysis"
 msgstr "热解"
 
 msgid "gasification"
-msgstr ""
+msgstr "气化"
 
 msgid "Water Turbine"
-msgstr ""
+msgstr "水轮机"
 
 msgctxt "generator method"
 msgid "run-of-the-river"
@@ -20189,10 +20571,10 @@ msgid "francis_turbine"
 msgstr "混流式水轮机"
 
 msgid "all methods"
-msgstr ""
+msgstr "所有方式"
 
 msgid "hydrodynamic_screw"
-msgstr ""
+msgstr "水动力螺旋"
 
 msgid "run-of-the-river"
 msgstr ""
@@ -20207,7 +20589,7 @@ msgid "pelton_turbine"
 msgstr "水斗式水轮机"
 
 msgid "Tidal Water Turbine"
-msgstr ""
+msgstr "潮汐水轮机"
 
 msgctxt "generator method"
 msgid "barrage"
@@ -20221,112 +20603,112 @@ msgid "horizontal_axis"
 msgstr "横轴"
 
 msgid "barrage"
-msgstr ""
+msgstr "堰坝"
 
 msgid "vertical_axis"
 msgstr "纵轴"
 
 msgid "Wave Energy Converter"
-msgstr ""
+msgstr "波能转换器"
 
 msgid "Osmotic Power Generator"
-msgstr ""
+msgstr "海水盐差能发电机"
 
 msgid "Geothermal Power Generator"
-msgstr ""
+msgstr "地热能发电机"
 
 msgid "heat_pump"
 msgstr "热泵"
 
 msgid "Wind Turbine"
-msgstr ""
+msgstr "风力发电机"
 
 msgid "Power Substation"
-msgstr ""
+msgstr "变电站"
 
 msgid "Type of substation"
-msgstr ""
+msgstr "变电站类型"
 
 msgctxt "power"
 msgid "transmission"
-msgstr ""
+msgstr "传送"
 
 msgctxt "power"
 msgid "distribution"
-msgstr ""
+msgstr "分配"
 
 msgctxt "power"
 msgid "minor_distribution"
-msgstr ""
+msgstr "次级分配"
 
 msgctxt "power"
 msgid "converter"
-msgstr ""
+msgstr "变流器"
 
 msgctxt "power"
 msgid "compensation"
-msgstr ""
+msgstr "补偿"
 
 msgctxt "power"
 msgid "transition"
-msgstr ""
+msgstr "转换"
 
 msgctxt "power"
 msgid "traction"
-msgstr ""
+msgstr "牵引"
 
 msgctxt "power"
 msgid "industrial"
-msgstr ""
+msgstr "工业"
 
 msgid "Power rating (kVA/MVA)"
-msgstr ""
+msgstr "主变容量(kVA/MVA)"
 
 msgid "2700 kVA"
-msgstr ""
+msgstr "2700 kVA"
 
 msgid "12500 kVA"
-msgstr ""
+msgstr "12500 kVA"
 
 msgid "15 MVA"
-msgstr ""
+msgstr "15 MVA"
 
 msgid "50 MVA"
-msgstr ""
+msgstr "50 MVA"
 
 msgid "100 MVA"
-msgstr ""
+msgstr "100 MVA"
 
 msgid "Gas insulated"
-msgstr ""
+msgstr "气体绝缘"
 
 msgid "Power Transformer"
-msgstr ""
+msgstr "变压器"
 
 msgid "Type of transformer"
-msgstr ""
+msgstr "变压器类型"
 
 msgctxt "power"
 msgid "generator"
-msgstr ""
+msgstr "发电机"
 
 msgctxt "power"
 msgid "auto"
-msgstr ""
+msgstr "自动"
 
 msgctxt "power"
 msgid "phase_angle_regulator"
-msgstr ""
+msgstr "相位角调节器"
 
 msgctxt "power"
 msgid "yes"
-msgstr ""
+msgstr "是"
 
 msgid "Phases"
-msgstr ""
+msgstr "相数"
 
 msgid "Power Switchgear"
-msgstr ""
+msgstr "开关柜"
 
 msgid ""
 "(Please only use this tag if more detailed mapping using busbars and bays is "
@@ -20334,31 +20716,31 @@ msgid ""
 msgstr ""
 
 msgid "Power Busbar"
-msgstr ""
+msgstr "母线"
 
 msgid "Power Bay"
 msgstr ""
 
 msgid "Power Switch"
-msgstr ""
+msgstr "开关"
 
 msgid "Power Converter"
-msgstr ""
+msgstr "换流器"
 
 msgid "Type of converter"
-msgstr ""
+msgstr "换流器类型"
 
 msgctxt "power"
 msgid "lcc"
-msgstr ""
+msgstr "电网换相换流器(LCC)"
 
 msgctxt "power"
 msgid "vsc"
-msgstr ""
+msgstr "电压源换流器(VSC)"
 
 msgctxt "power"
 msgid "back-to-back"
-msgstr ""
+msgstr "背靠背换流器(back-to-back)"
 
 msgid "Amount of poles"
 msgstr ""
@@ -20370,57 +20752,57 @@ msgid "bipole"
 msgstr ""
 
 msgid "Power rating (MVA)"
-msgstr ""
+msgstr "主变容量(MVA)"
 
 msgid "Power Compensator"
-msgstr ""
+msgstr "补偿器"
 
 msgid "Type of compensator"
-msgstr ""
+msgstr "补偿器类型"
 
 msgctxt "power"
 msgid "shunt_reactor"
-msgstr ""
+msgstr "并联电抗器"
 
 msgctxt "power"
 msgid "shunt_capacitor"
-msgstr ""
+msgstr "并联电容器"
 
 msgctxt "power"
 msgid "static_var"
-msgstr ""
+msgstr "静止无功"
 
 msgctxt "power"
 msgid "statcom"
-msgstr ""
+msgstr "静止无功发生器"
 
 msgctxt "power"
 msgid "synchronous_condenser"
-msgstr ""
+msgstr "同步调相机"
 
 msgctxt "power"
 msgid "filter"
-msgstr ""
+msgstr "滤波器"
 
 msgctxt "power"
 msgid "series_reactor"
-msgstr ""
+msgstr "串联电抗器"
 
 msgctxt "power"
 msgid "series_capacitor"
-msgstr ""
+msgstr "串联电容器"
 
 msgid "Power rating (kvar/Mvar)"
-msgstr ""
+msgstr "主变容量(kvar/Mvar)"
 
 msgid "500 kvar"
-msgstr ""
+msgstr "500 kvar"
 
 msgid "1 Mvar"
-msgstr ""
+msgstr "1 Mvar"
 
 msgid "5 Mvar"
-msgstr ""
+msgstr "5 Mvar"
 
 msgid "Cable Distribution Cabinet"
 msgstr "电缆配电柜"
@@ -20429,7 +20811,7 @@ msgid "Power Tower"
 msgstr "电塔"
 
 msgid "Type of construction"
-msgstr ""
+msgstr "建筑类型"
 
 msgid "lattice"
 msgstr ""
@@ -20445,35 +20827,35 @@ msgstr "钢"
 
 msgctxt "color"
 msgid "red/white"
-msgstr ""
+msgstr "红/白"
 
 msgctxt "power"
 msgid "Tower type"
-msgstr ""
+msgstr "电塔类型"
 
 msgctxt "power"
 msgid "suspension"
-msgstr ""
+msgstr "悬挂"
 
 msgctxt "power"
 msgid "anchor"
-msgstr ""
+msgstr "锚定"
 
 msgctxt "power"
 msgid "termination"
-msgstr ""
+msgstr "终端"
 
 msgctxt "power"
 msgid "branch"
-msgstr ""
+msgstr "分叉"
 
 msgctxt "power"
 msgid "transposing"
-msgstr ""
+msgstr "换位"
 
 msgctxt "power"
 msgid "crossing"
-msgstr ""
+msgstr "交叉"
 
 msgid "Branch tower type"
 msgstr ""
@@ -20627,53 +21009,53 @@ msgid "minor_line"
 msgstr "低压"
 
 msgid "Number of conductors/wires per cable"
-msgstr ""
+msgstr "每电缆导体/导线数"
 
 msgctxt "power"
 msgid "single"
-msgstr ""
+msgstr "单"
 
 msgctxt "power"
 msgid "double"
-msgstr ""
+msgstr "双"
 
 msgctxt "power"
 msgid "triple"
-msgstr ""
+msgstr "三"
 
 msgctxt "power"
 msgid "quad"
-msgstr ""
+msgstr "四"
 
 msgctxt "power"
 msgid "fivefold"
-msgstr ""
+msgstr "五"
 
 msgctxt "power"
 msgid "sixfold"
-msgstr ""
+msgstr "六"
 
 msgctxt "power"
 msgid "eightfold"
-msgstr ""
+msgstr "八"
 
 msgid "Used for data communications"
-msgstr ""
+msgstr "用于数据通信"
 
 msgid "Power Cable"
-msgstr ""
+msgstr "电缆"
 
 msgctxt "power cable"
 msgid "underground"
-msgstr ""
+msgstr "地下"
 
 msgctxt "power cable"
 msgid "underwater"
-msgstr ""
+msgstr "水下"
 
 msgctxt "power cable"
 msgid "overground"
-msgstr ""
+msgstr "地上"
 
 msgid "Historic Places"
 msgstr "历史地区"
@@ -20770,16 +21152,16 @@ msgid "Deli (Fine Food)"
 msgstr "熟食店(美食)"
 
 msgid "Candy Store"
-msgstr ""
+msgstr "糖果店"
 
 msgid "Tea"
-msgstr ""
+msgstr "茶"
 
 msgid "Coffee"
-msgstr ""
+msgstr "咖啡"
 
 msgid "Public Market"
-msgstr ""
+msgstr "公共市场"
 
 msgid "Organic"
 msgstr "有机"
@@ -20797,20 +21179,17 @@ msgid "Fair Trade"
 msgstr ""
 
 msgid "Alcohol"
-msgstr "酒"
+msgstr "酒类"
 
 msgid "Beverages"
 msgstr "饮料"
 
 msgid "Wine"
-msgstr ""
+msgstr "红酒"
 
 msgid "Boutique"
 msgstr "时装"
 
-msgid "Shoes"
-msgstr "鞋"
-
 msgid "Outdoor"
 msgstr "户外用品"
 
@@ -20848,10 +21227,10 @@ msgid "Video"
 msgstr "影片"
 
 msgid "Video Games"
-msgstr ""
+msgstr "视频游戏"
 
 msgid "Music"
-msgstr ""
+msgstr "音乐"
 
 msgid "Cash"
 msgstr "现金"
@@ -20869,7 +21248,7 @@ msgid "Pawnbroker"
 msgstr "典当"
 
 msgid "Home decoration"
-msgstr ""
+msgstr "家庭装修"
 
 msgid "Furniture"
 msgstr "家俱"
@@ -20887,31 +21266,31 @@ msgid "Frame"
 msgstr "框架"
 
 msgid "Bed"
-msgstr ""
+msgstr "床"
 
 msgid "Interior Decoration"
-msgstr ""
+msgstr "室内装饰"
 
 msgid "Antiques"
-msgstr ""
+msgstr "古董"
 
 msgid "Printed Material"
-msgstr ""
+msgstr "印刷品"
 
 msgid "Stationery"
 msgstr "文具"
 
 msgid "Copy Shop"
-msgstr ""
+msgstr "复印店"
 
 msgid "Book Store"
 msgstr "书店"
 
 msgid "Newspaper Stand"
-msgstr ""
+msgstr "报摊"
 
 msgid "Ticket"
-msgstr ""
+msgstr "车票"
 
 msgid "Department Store"
 msgstr "百货商店"
@@ -20923,13 +21302,13 @@ msgid "Chemist"
 msgstr "化妆品店"
 
 msgid "Hairdresser/Barber"
-msgstr ""
+msgstr "美发/理发"
 
 msgid "Beauty"
-msgstr ""
+msgstr "美容"
 
 msgid "Tattoo"
-msgstr ""
+msgstr "文身"
 
 msgid "Optician"
 msgstr "眼镜店"
@@ -20941,10 +21320,10 @@ msgid "Medical Supply"
 msgstr ""
 
 msgid "Jewellery"
-msgstr ""
+msgstr "珠宝"
 
 msgid "Gift/Souvenir"
-msgstr ""
+msgstr "礼品/纪念品"
 
 msgid "Erotic"
 msgstr "情色"
@@ -20977,22 +21356,22 @@ msgid "Variety Store"
 msgstr "杂货店"
 
 msgid "Bookmaker"
-msgstr ""
+msgstr "博彩"
 
 msgid "Lottery"
-msgstr ""
+msgstr "彩票"
 
 msgid "Bag"
 msgstr ""
 
 msgid "Pet"
-msgstr ""
+msgstr "宠物"
 
 msgid "Funeral Directors"
-msgstr ""
+msgstr "殡仪"
 
 msgid "Vending Machine"
-msgstr ""
+msgstr "自动售货机"
 
 msgid "Vending products"
 msgstr "贩卖产品"
@@ -21055,28 +21434,28 @@ msgid "vouchers"
 msgstr "券"
 
 msgid "Payment Methods"
-msgstr ""
+msgstr "支付方式"
 
 msgid "Debit cards"
 msgstr "借记卡"
 
 msgid "BankAxess"
-msgstr ""
+msgstr "BankAxess"
 
 msgid "Bancomat"
-msgstr ""
+msgstr "Bancomat"
 
 msgid "Girocard"
-msgstr ""
+msgstr "Girocard"
 
 msgid "Laser"
 msgstr ""
 
 msgid "Maestro"
-msgstr ""
+msgstr "Maestro"
 
 msgid "Visa Debit"
-msgstr ""
+msgstr "Visa 借记卡"
 
 msgid "Visa Electron"
 msgstr ""
@@ -21085,10 +21464,10 @@ msgid "Credit cards"
 msgstr "信用卡"
 
 msgid "American Express"
-msgstr ""
+msgstr "American Express/美国运通卡"
 
 msgid "Diners Club"
-msgstr ""
+msgstr "Diners Club/大来卡"
 
 msgid "Discover Card"
 msgstr ""
@@ -21097,10 +21476,10 @@ msgid "JCB"
 msgstr ""
 
 msgid "Mastercard"
-msgstr ""
+msgstr "Mastercard/万事达卡"
 
 msgid "Visa"
-msgstr ""
+msgstr "Visa/威士卡"
 
 msgid "Electronic purses and Charge cards"
 msgstr "电子钱包或收费卡"
@@ -21142,16 +21521,16 @@ msgid "Quick (au)"
 msgstr ""
 
 msgid "Cryptocurrencies"
-msgstr ""
+msgstr "加密货币"
 
 msgid "Bitcoin"
-msgstr ""
+msgstr "比特币"
 
 msgid "Dogecoin"
-msgstr ""
+msgstr "狗币"
 
 msgid "Litecoin"
-msgstr ""
+msgstr "莱特币"
 
 msgid "Geography"
 msgstr "地理"
@@ -21166,7 +21545,7 @@ msgid "Administrative level"
 msgstr "行政区界等级"
 
 msgid "Maritime"
-msgstr ""
+msgstr "海岸"
 
 msgid "Political"
 msgstr "政治"
@@ -21199,7 +21578,7 @@ msgid "Title or type of protection"
 msgstr ""
 
 msgid "Border type"
-msgstr ""
+msgstr "边界类型"
 
 msgid "baseline"
 msgstr ""
@@ -21224,7 +21603,7 @@ msgstr "国家"
 
 msgctxt "place"
 msgid "State"
-msgstr ""
+msgstr "州"
 
 msgid "Region"
 msgstr "地区"
@@ -21254,7 +21633,7 @@ msgid "Neighbourhood"
 msgstr "街坊"
 
 msgid "Farm"
-msgstr ""
+msgstr "农场"
 
 msgid "A farm within a bigger settlement"
 msgstr ""
@@ -21310,22 +21689,22 @@ msgid "scoria"
 msgstr ""
 
 msgid "Ridge"
-msgstr ""
+msgstr "山脊"
 
 msgid "A mountain or hill ridge."
-msgstr ""
+msgstr "一座山或山脊。"
 
 msgid "Valley"
-msgstr ""
+msgstr "山谷"
 
 msgid "A low area between hills."
-msgstr ""
+msgstr "山间的较低区域。"
 
 msgid "Cave Entrance"
-msgstr "洞窟入口"
+msgstr "洞口"
 
 msgid "The entrance to a cave."
-msgstr ""
+msgstr "洞穴的入口。"
 
 msgid "Island"
 msgstr "岛"
@@ -21340,16 +21719,16 @@ msgid "Tree"
 msgstr "树"
 
 msgid "A single tree."
-msgstr ""
+msgstr "单独一棵树。"
 
 msgid "Botanical Name"
 msgstr "植物学名"
 
 msgid "Tree Row"
-msgstr "树行"
+msgstr "树排"
 
 msgid "A line of trees."
-msgstr ""
+msgstr "一排树。"
 
 msgid "Wood"
 msgstr "树林"
@@ -21454,7 +21833,7 @@ msgid "Sand"
 msgstr "沙地"
 
 msgid "Large area covered with sand."
-msgstr ""
+msgstr "大片沙地"
 
 msgid "Bare Rock"
 msgstr ""
@@ -21538,7 +21917,7 @@ msgid "Cemetery"
 msgstr "不靠近教堂的墓地"
 
 msgid "Religious"
-msgstr ""
+msgstr "宗教"
 
 msgid "Retail"
 msgstr "零售"
@@ -21553,13 +21932,13 @@ msgid "Garages"
 msgstr "车库"
 
 msgid "Railway Land"
-msgstr ""
+msgstr "铁路用地"
 
 msgid "Military"
 msgstr "军事"
 
 msgid "Construction Area"
-msgstr ""
+msgstr "工地"
 
 msgid "Brownfield"
 msgstr "废弃土地(棕地)"
@@ -21607,7 +21986,7 @@ msgid "Street name"
 msgstr "街道名称"
 
 msgid "Place name"
-msgstr ""
+msgstr "地点名称"
 
 msgid "City name"
 msgstr "城市名称"
@@ -21625,173 +22004,173 @@ msgid "District"
 msgstr ""
 
 msgid "Province"
-msgstr ""
+msgstr "省"
 
 msgctxt "addr:"
 msgid "State"
-msgstr ""
+msgstr "州"
 
 msgid "AL"
-msgstr ""
+msgstr "AL/亚拉巴马州"
 
 msgid "AK"
-msgstr ""
+msgstr "AK/阿拉斯加州"
 
 msgid "AZ"
-msgstr ""
+msgstr "AZ/亚利桑那州"
 
 msgid "AR"
-msgstr ""
+msgstr "AR/阿肯色州"
 
 msgid "CA"
-msgstr ""
+msgstr "CA/加利福尼亚州"
 
 msgid "CO"
-msgstr ""
+msgstr "CO/科罗拉多州"
 
 msgid "CT"
-msgstr ""
+msgstr "CT/康涅狄格州"
 
 msgid "DE"
-msgstr ""
+msgstr "DE/德拉瓦州"
 
 msgid "FL"
-msgstr ""
+msgstr "FL/佛罗利达州"
 
 msgid "GA"
-msgstr ""
+msgstr "GA/乔治亚州"
 
 msgid "HI"
-msgstr ""
+msgstr "HI/夏威夷州"
 
 msgid "IL"
-msgstr ""
+msgstr "IL/伊利诺伊州"
 
 msgid "IN"
-msgstr ""
+msgstr "IN/印第安纳州"
 
 msgid "IA"
-msgstr ""
+msgstr "IA/爱达荷州"
 
 msgid "KS"
-msgstr ""
+msgstr "KS/堪萨斯州"
 
 msgid "KY"
-msgstr ""
+msgstr "KY/肯塔基州"
 
 msgid "LA"
-msgstr ""
+msgstr "LA/路易斯安那州"
 
 msgid "ME"
-msgstr ""
+msgstr "ME/缅因州"
 
 msgid "MD"
-msgstr ""
+msgstr "MD/马里兰州"
 
 msgid "MA"
-msgstr ""
+msgstr "MA/马萨诸塞州"
 
 msgid "MI"
-msgstr ""
+msgstr "MI/密歇根州"
 
 msgid "MN"
-msgstr ""
+msgstr "MN/明尼苏达州"
 
 msgid "MS"
-msgstr ""
+msgstr "MS/密西西比州"
 
 msgid "MO"
-msgstr ""
+msgstr "MO/密苏里州"
 
 msgid "MT"
-msgstr ""
+msgstr "MT/蒙大拿州"
 
 msgid "NE"
-msgstr ""
+msgstr "NE/内布拉斯加州"
 
 msgid "NV"
-msgstr ""
+msgstr "NV/内华达州"
 
 msgid "NH"
-msgstr ""
+msgstr "NH/新罕布什尔州"
 
 msgid "NJ"
-msgstr ""
+msgstr "NJ/新泽西州"
 
 msgid "NM"
-msgstr ""
+msgstr "NM/新墨西哥州"
 
 msgid "NY"
-msgstr ""
+msgstr "NY/纽约州"
 
 msgid "NC"
-msgstr ""
+msgstr "NC/北卡罗来纳州"
 
 msgid "ND"
-msgstr ""
+msgstr "ND/北达科他州"
 
 msgid "OH"
-msgstr ""
+msgstr "OH/俄亥俄州"
 
 msgid "OR"
-msgstr ""
+msgstr "OR/俄克拉荷马州"
 
 msgid "PA"
-msgstr ""
+msgstr "PA/宾夕法尼亚州"
 
 msgid "RI"
-msgstr ""
+msgstr "RI/罗得岛州"
 
 msgid "SC"
-msgstr ""
+msgstr "SC/南卡罗来纳州"
 
 msgid "SD"
-msgstr ""
+msgstr "SD/南达科他州"
 
 msgid "TN"
-msgstr ""
+msgstr "TN/田纳西州"
 
 msgid "TX"
-msgstr ""
+msgstr "TX/德克萨斯州"
 
 msgid "UT"
-msgstr ""
+msgstr "UT/犹他州"
 
 msgid "VT"
-msgstr ""
+msgstr "VT/佛蒙特州"
 
 msgid "VA"
-msgstr ""
+msgstr "VA/弗吉尼亚州"
 
 msgid "WA"
-msgstr ""
+msgstr "WA/华盛顿州"
 
 msgid "WV"
-msgstr ""
+msgstr "WV/西弗吉尼亚州"
 
 msgid "WI"
-msgstr ""
+msgstr "WI/威斯康星州"
 
 msgid "DC"
-msgstr ""
+msgstr "DC/哥伦比亚特区"
 
 msgid "AS"
-msgstr ""
+msgstr "AS/美属萨摩亚"
 
 msgid "GU"
-msgstr ""
+msgstr "GU/关岛"
 
 msgid "MP"
-msgstr ""
+msgstr "MP/北马里亚纳群岛"
 
 msgid "PR"
-msgstr ""
+msgstr "PR/波多黎各"
 
 msgid "UM"
-msgstr ""
+msgstr "UM/美国本土外小岛屿"
 
 msgid "VI"
-msgstr ""
+msgstr "VI/维京群岛"
 
 msgid "Address Interpolation"
 msgstr "地址编排规则"
@@ -21823,12 +22202,12 @@ msgstr "可能"
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
-msgstr "传真号码"
-
 msgid "Email Address"
 msgstr "电子邮件地址"
 
+msgid "Fax Number"
+msgstr "传真号码"
+
 msgid "Image"
 msgstr "图像"
 
@@ -21851,14 +22230,14 @@ msgstr ""
 
 msgctxt "the tag note=*"
 msgid "Note"
-msgstr ""
+msgstr "注释"
 
 msgctxt "note=*"
 msgid "An important hint for other mappers (not for the end user)."
 msgstr ""
 
 msgid "Fixme"
-msgstr ""
+msgstr "需修正"
 
 msgctxt "fixme=*"
 msgid ""
@@ -21924,7 +22303,7 @@ msgid "members of site"
 msgstr "地点的成员"
 
 msgid "Turn Restriction"
-msgstr ""
+msgstr "转弯限制"
 
 msgid "Restriction"
 msgstr "限制"
@@ -22020,10 +22399,10 @@ msgid "lcn"
 msgstr ""
 
 msgid "Mountain Biking Route"
-msgstr ""
+msgstr "山地自行车路线"
 
 msgid "Hiking Route"
-msgstr ""
+msgstr "远足路线"
 
 msgid "iwn"
 msgstr ""
@@ -22044,7 +22423,7 @@ msgid "natural"
 msgstr "自然"
 
 msgid "Piste Route"
-msgstr ""
+msgstr "滑雪路线"
 
 msgid "link segment"
 msgstr ""
@@ -22068,7 +22447,7 @@ msgid "Detour Route"
 msgstr ""
 
 msgid "Destination"
-msgstr ""
+msgstr "目的地"
 
 msgid "Ref of the way this is a detour to"
 msgstr ""
@@ -22080,13 +22459,13 @@ msgid "Power Route"
 msgstr ""
 
 msgid "Railway Route"
-msgstr ""
+msgstr "铁路路线"
 
 msgid "Road Route"
-msgstr ""
+msgstr "公路路线"
 
 msgid "Route Network"
-msgstr ""
+msgstr "路网"
 
 msgid "member"
 msgstr "成员"
@@ -22253,6 +22632,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22277,6 +22659,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22337,6 +22731,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22380,7 +22777,7 @@ msgid "node connects waterway and bridge"
 msgstr ""
 
 msgid "abbreviated street name"
-msgstr "简短的街道名称"
+msgstr "缩写的街道名称"
 
 msgid "wrong highway tag on a node"
 msgstr "节点上的错误公路标签"
@@ -22427,9 +22824,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22489,7 +22895,7 @@ msgid "deprecated format for wikipedia tag"
 msgstr ""
 
 msgid "''wikipedia''=''language:page title''"
-msgstr ""
+msgstr "\"wikipedia\"=\"语言代码:页面标题\""
 
 msgid "Hide icons at low zoom"
 msgstr ""
@@ -22539,19 +22945,22 @@ msgstr "命令"
 msgid ""
 "No command has been found. Would you like to download and install default "
 "commands now?"
-msgstr ""
+msgstr "命令未找到。您希望下载并安装默认的命令吗?"
 
 msgid "No command found"
-msgstr ""
+msgstr "命令未找到"
 
 msgid "Default commands have been successfully installed"
-msgstr ""
+msgstr "默认命令已成功安装"
 
 msgid ""
 "Failed to download and install default commands.\n"
 "\n"
 "Error: {0}"
 msgstr ""
+"未能下载并安装默认的命令。\n"
+"\n"
+"错误:{0}"
 
 msgid "Processing..."
 msgstr "处理中..."
@@ -22716,25 +23125,25 @@ msgid "Uploads traces to openstreetmap.org"
 msgstr "上传轨迹至 openstreetmap.org"
 
 msgid "Shows elevation profile"
-msgstr "显示高度轮廓"
+msgstr "显示海拔轮廓"
 
 msgid "Elevation Profile"
-msgstr "高度轮廓"
+msgstr "海拔轮廓"
 
 msgid "Elevation Grid Layer (experimental!)"
-msgstr ""
+msgstr "海拔网格图层(实验性!)"
 
 msgid "Shows elevation grid layer"
-msgstr ""
+msgstr "显示海拔网格图层"
 
 msgid "Elevation Grid"
-msgstr ""
+msgstr "海拔网格"
 
 msgid "No SRTM data"
-msgstr ""
+msgstr "无 SRTM 数据"
 
 msgid "Open the elevation profile window."
-msgstr "打开高度轮廓窗口。"
+msgstr "打开海拔轮廓窗口。"
 
 msgid "Min"
 msgstr "最小"
@@ -22749,64 +23158,67 @@ msgid "Dist"
 msgstr "距离"
 
 msgid "Gain"
-msgstr "增益"
+msgstr "爬升"
 
 msgid "Tracks"
 msgstr "轨迹"
 
 msgid "Elevation profile for track ''{0}''."
-msgstr "轨迹“{0}”的高度配置文件。"
+msgstr "轨迹“{0}”的海拔轮廓。"
 
 msgid "Elevation profile"
-msgstr "高度配置文件"
+msgstr "海拔轮廓"
 
 msgid "(No elevation data)"
-msgstr "(没有高度数据)"
+msgstr "(无海拔数据)"
 
 msgid "Can not save preferences"
 msgstr "无法保存首选项"
 
 msgid "Epsilon multiplier"
-msgstr ""
+msgstr "分度步进倍率"
 
 msgid "Starting Epsilon"
-msgstr ""
+msgstr "起始分度"
 
 msgid "Max points count per 1 km"
-msgstr "每公里的最大节点计数"
+msgstr "每公里最大点数"
 
 msgid "Enter key mode"
-msgstr ""
+msgstr "回车时动作"
 
 msgid "Auto add tags"
-msgstr ""
+msgstr "自动添加标签"
 
 msgid "Autosimplify"
 msgstr "自动简化"
 
 msgid "Simplify with initial epsilon"
-msgstr ""
+msgstr "以起始分度简化"
 
 msgid "Save as is"
-msgstr "就这样保存"
+msgstr "原样保存"
 
 msgid "Snap to nodes"
-msgstr ""
+msgstr "对齐节点"
 
 msgid "Add fixed points on click"
-msgstr ""
+msgstr "单击时添加固定点"
 
 msgid "Add fixed points on spacebar"
-msgstr ""
+msgstr "按空格时添加固定点"
+
+msgid "Allow edit existing ways"
+msgstr "允许编辑既存路径"
 
 msgid "Draw closed polygons only"
-msgstr ""
+msgstr "只绘制封闭多边形"
 
 msgid "FastDraw configuration"
-msgstr "快速绘制配置"
+msgstr "快速绘制设置"
 
 msgid "Try copying tags from properties table"
-msgstr ""
+msgstr "尝试从属性表中复制标签"
 
 msgid "Save settings"
 msgstr "保存设置"
@@ -22857,11 +23269,8 @@ msgstr "用鼠标绘制路径"
 msgid "min distance={0} px ({1} m)"
 msgstr "最小距离={0} 像素({1} 米)"
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
-msgstr ""
+msgstr "分度={0},{1} 个点,{2} 点/公里"
 
 msgid "Fix addresses"
 msgstr "修正地址"
@@ -22870,7 +23279,7 @@ msgid "Show dialog with incomplete addresses"
 msgstr "显示有不完整地址的对话框"
 
 msgid "Include objects used for guesses"
-msgstr ""
+msgstr "包括用于猜测的对象"
 
 msgid "Fix street addresses"
 msgstr "修正街道地址"
@@ -23173,10 +23582,10 @@ msgid "Current Selected Bug Info"
 msgstr ""
 
 msgid "Prev OSMI bug"
-msgstr ""
+msgstr "前一 OSMI 错误"
 
 msgid "Next OSMI bug"
-msgstr ""
+msgstr "后一 OSMI 错误"
 
 msgid "Osm Inspector Bugs"
 msgstr ""
@@ -23209,7 +23618,7 @@ msgid "Actual"
 msgstr "实际"
 
 msgid "Estimate"
-msgstr "预计"
+msgstr "估计"
 
 msgid "Potential"
 msgstr "潜在"
@@ -23677,47 +24086,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23726,10 +24144,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
+msgstr ""
+
+msgid "merge nodes"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
+msgstr ""
+
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24359,6 +24789,9 @@ msgstr "重置偏移"
 msgid "Reset offset (only vector images)"
 msgstr "重置偏移(仅矢量图像)"
 
+msgid "Blank Layer"
+msgstr "空白图层"
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr "WMS 图层({0}),已加载 {1} 个瓦片"
 
@@ -24366,7 +24799,7 @@ msgid "Is not vectorized."
 msgstr "并非矢量化的。"
 
 msgid "Bounding box: {0}"
-msgstr ""
+msgstr "限定边框:{0}"
 
 msgid "Image size (px): {0}/{1}"
 msgstr ""
@@ -24453,7 +24886,7 @@ msgid "Subject only ({0})"
 msgstr ""
 
 msgid "Configure"
-msgstr "设定"
+msgstr "设置"
 
 msgid "Configure conflation options"
 msgstr ""
@@ -24540,7 +24973,7 @@ msgid "Nothing is selected, please try again."
 msgstr ""
 
 msgid "Empty selection"
-msgstr ""
+msgstr "空选择范围"
 
 msgid "Invalid reference or subject"
 msgstr ""
@@ -24593,7 +25026,7 @@ msgid "Please select 1 or more ways to download along"
 msgstr "请选择 1 或多条路径来沿着下载"
 
 msgid "Download from OSM along selected ways"
-msgstr ""
+msgstr "沿选定的路径从 OSM 下载"
 
 msgid "{0} intermediate nodes to download."
 msgstr "要下载 {0} 个中间的节点。"
@@ -24671,16 +25104,16 @@ msgid "Public"
 msgstr "公开"
 
 msgid "Could not get server response, check logs"
-msgstr ""
+msgstr "无法获取服务器响应,检查日志"
 
 msgid "Failed to login as {0}:"
-msgstr ""
+msgstr "无法以 {0} 登录:"
 
 msgid "The server did not return user ID"
-msgstr ""
+msgstr "服务器未返回用户ID"
 
 msgid "Failed to get messages as {0}:"
-msgstr ""
+msgstr "无法以 {0} 获取信息:"
 
 msgid "GeoChat"
 msgstr "GeoChat"
@@ -24705,10 +25138,10 @@ msgid "not logged in"
 msgstr "未登录"
 
 msgid "Failed to log in to GeoChat:"
-msgstr ""
+msgstr "无法登录 GeoChat:"
 
 msgid "Failed to send message:"
-msgstr ""
+msgstr "无法发送信息:"
 
 msgid "User {0} has left"
 msgstr "用户 {0} 已离开"
@@ -24827,10 +25260,10 @@ msgid "Import"
 msgstr "输入"
 
 msgid "GPS Blams"
-msgstr ""
+msgstr "GPS Blams"
 
 msgid "GPSBlam"
-msgstr ""
+msgstr "GPSBlam"
 
 msgid "select gpx points and \"blam!\", find centre and direction of spread"
 msgstr ""
@@ -25194,7 +25627,7 @@ msgid "edit bounds for selected defaults"
 msgstr ""
 
 msgid "Download imagery XML bounds"
-msgstr ""
+msgstr "下载图像 XML 边界"
 
 msgid ""
 "Validating error in file {0}:\n"
@@ -25345,7 +25778,7 @@ msgstr "存储图像偏移..."
 msgid ""
 "Upload an offset for current imagery (or calibration object geometry) to a "
 "server"
-msgstr ""
+msgstr "上传当前图像的偏移(或校准对象几何)到服务器"
 
 msgid "Store calibration geometry"
 msgstr "存储几何校正"
@@ -25387,7 +25820,7 @@ msgid "Adjust imagery"
 msgstr "调整图像"
 
 msgid "Adjust the position of the selected imagery layer"
-msgstr ""
+msgstr "调整所选图像图层的位置"
 
 msgid "Please select the imagery layer to adjust."
 msgstr "请选择图像图层来调整。"
@@ -25453,10 +25886,10 @@ msgid "unit(s) = "
 msgstr "单位 = "
 
 msgid "Importing..."
-msgstr "输入中..."
+msgstr "正在导入..."
 
 msgid "SVG files [ImportVec plugin] (*.svg)"
-msgstr ""
+msgstr "SVG文件[ImportVec插件] (*.SVG)"
 
 msgid "Please open or create data layer before importing"
 msgstr ""
@@ -25527,13 +25960,13 @@ msgid "creating DigraphLayer"
 msgstr ""
 
 msgid "JunctionChecking"
-msgstr ""
+msgstr "路口检查"
 
 msgid "Open the junctionchecking window."
-msgstr ""
+msgstr "打开路口检查窗口。"
 
 msgid "junctions"
-msgstr ""
+msgstr "路口"
 
 msgid "Channel-Digraph creation"
 msgstr ""
@@ -25605,10 +26038,10 @@ msgid "{0} nodes so far..."
 msgstr "目前 {0} 个节点..."
 
 msgid "Lake Walker."
-msgstr "Lake Walker。"
+msgstr "湖岸寻迹工具。"
 
 msgid "Lake Walker"
-msgstr "Lake Walker"
+msgstr "湖岸寻迹"
 
 msgid "Error creating cache directory: {0}"
 msgstr "建立缓存目录时发生错误:{0}"
@@ -25691,159 +26124,465 @@ msgstr "所有轨迹向北平移(度)"
 msgid "Direction to search for land"
 msgstr "查找陆地的方向"
 
-msgid "Tag ways as"
-msgstr "将路径标记为"
+msgid "Tag ways as"
+msgstr "将路径标记为"
+
+msgid "WMS Layer"
+msgstr "WMS 图层"
+
+msgid "Maximum cache size (MB)"
+msgstr "最大缓存大小(MB)"
+
+msgid "Maximum cache age (days)"
+msgstr "最大缓存留存时间(天)"
+
+msgid "Source text"
+msgstr "来源文字"
+
+msgid "Lakewalker Plugin Preferences"
+msgstr "Lakewalker 插件首选项"
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr "用来追踪 Landsat 图库中水域的插件。"
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr "在每条产生的路径中允许的最大区段数。默认为 250。"
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr "在简化线条前产生最大的节点数目。默认值为 50000。"
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr "被认定为水域的最大灰色值(基于 Landsat IR-1 数据)。可以在范围 0-255。默认值为 90。"
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+"Douglas-Peucker 线条简化的准确度,以度为测量单位。<br>较低的数值会产生较多的节点,和更准确的线条。默认值为 0.0003。"
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr "Landsat 瓦片的解析度,以每一度像素为测量单位。默认值为 4000。"
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr "一个 landsat 瓦片的大小,以像素为测量单位。默认值为 2000。"
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr "所有点向东方移位(度)。默认值为 0。"
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr "所有点向北方移位(度)。默认值为 0。"
+
+msgid "Direction to search for land. Default east."
+msgstr "查找陆地方向。默认值为东方。"
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr "将路径加上标签成为水域、海岸线、陆地或都不是。默认值为水域。"
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr "再次追踪时要使用的 WMS 图层。默认值为 IR1。"
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr "每个缓存目录的最大容量(字节)。默认值为 300MB"
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr "每个缓存文件留存的最大天数。默认值为 100"
+
+msgid "Data source text. Default is Landsat."
+msgstr "数据来源文字。默认值为 Landsat。"
+
+msgid "Downloading image tile..."
+msgstr "正在下载图片瓦片..."
+
+msgid "Could not acquire image"
+msgstr "无法获得图片"
+
+msgid "Connection Failed"
+msgstr "连接失败"
+
+msgid "Not connected"
+msgstr "未连接"
+
+msgid "Connecting"
+msgstr "正在连接"
+
+msgid "Connected"
+msgstr "已连接"
+
+msgid "no name"
+msgstr "没有名称"
+
+msgid "Live GPS"
+msgstr "Live GPS"
+
+msgid "Show GPS data."
+msgstr "显示 GPS 数据。"
+
+msgid "Status"
+msgstr "状态"
+
+msgid "Way Info"
+msgstr "路径信息"
+
+msgid "Speed"
+msgstr "速度"
+
+msgid "Course"
+msgstr "道路"
+
+msgid "LiveGPS layer"
+msgstr "LiveGPS 图层"
+
+msgid "Capture GPS Track"
+msgstr "捕获 GPS 轨迹"
+
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgstr "连接至 gpsd 服务器,并在 LiveGPS 图层中显示目前的位置。"
+
+msgid "Center Once"
+msgstr "置中一次"
+
+msgid "Center the LiveGPS layer to current position."
+msgstr "将 LiveGPS 图层置中于目前的位置。"
+
+msgid "Auto-Center"
+msgstr "自动居中"
+
+msgid "Continuously center the LiveGPS layer to current position."
+msgstr "持续将 LiveGPS 图层置中到目前的位置。"
+
+msgid "Open MapDust"
+msgstr "打开 MapDust"
+
+msgid "MapDust bug reports"
+msgstr ""
+
+msgid "Activates the MapDust bug reporter plugin"
+msgstr ""
+
+msgid "Missing input data"
+msgstr "缺少输入数据"
+
+msgid "Mapillary Images"
+msgstr ""
+
+msgid "Mapillary layer"
+msgstr ""
+
+msgid "Total images:"
+msgstr ""
+
+msgid "images"
+msgstr ""
+
+msgid "Mapillary"
+msgstr ""
+
+msgid "Create Mapillary layer"
+msgstr ""
+
+msgid "Start Mapillary layer"
+msgstr ""
+
+msgid "Download Mapillary images in current view"
+msgstr ""
+
+msgid "Export pictures"
+msgstr ""
+
+msgid "Export Mapillary pictures"
+msgstr ""
+
+msgid "Export images"
+msgstr ""
+
+msgid "Import pictures"
+msgstr ""
+
+msgid "Import local pictures"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer"
+msgstr ""
+
+msgid "Select pictures"
+msgstr ""
+
+msgid "Import pictures into sequence"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer in a sequence"
+msgstr ""
+
+msgid "Join mode"
+msgstr ""
+
+msgid "Join/unjoin pictures"
+msgstr ""
+
+msgid "Join Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures"
+msgstr ""
+
+msgid "Upload Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures."
+msgstr ""
+
+msgid "Walk mode"
+msgstr ""
+
+msgid "Start walk mode"
+msgstr ""
+
+msgid "Zoom to selected image"
+msgstr ""
+
+msgid "Zoom to the currently selected Mapillary image"
+msgstr ""
+
+msgid "Uploaded {0} images"
+msgstr ""
+
+msgid "Approve upload on the website"
+msgstr ""
+
+msgid "View in website"
+msgstr ""
+
+msgid "Copy key"
+msgstr ""
+
+msgid "Copy key tag"
+msgstr ""
+
+msgid "Edit on website"
+msgstr ""
+
+msgid "Export all images"
+msgstr ""
+
+msgid "Export selected sequence"
+msgstr ""
+
+msgid "Export selected images"
+msgstr ""
+
+msgid "Rewrite imported images"
+msgstr ""
+
+msgid "Select a folder"
+msgstr ""
+
+msgid "Explore"
+msgstr ""
+
+msgid "Select a directory"
+msgstr ""
+
+msgid "Speed limit"
+msgstr ""
+
+msgid "Give way"
+msgstr ""
+
+msgid "No entry"
+msgstr ""
+
+msgid "Intersection danger"
+msgstr ""
+
+msgid "Mandatory direction (any)"
+msgstr ""
+
+msgid "No turn"
+msgstr ""
+
+msgid "Uneven road"
+msgstr ""
+
+msgid "No parking"
+msgstr ""
+
+msgid "No overtaking"
+msgstr ""
+
+msgid "Pedestrian crossing"
+msgstr ""
+
+msgid "Years"
+msgstr ""
+
+msgid "Months"
+msgstr ""
+
+msgid "Days"
+msgstr ""
+
+msgid "Mapillary filter"
+msgstr ""
 
-msgid "WMS Layer"
-msgstr "WMS 图层"
+msgid "Open Mapillary filter dialog"
+msgstr ""
 
-msgid "Maximum cache size (MB)"
-msgstr "最大缓存大小(MB)"
+msgid "Downloaded images"
+msgstr ""
 
-msgid "Maximum cache age (days)"
-msgstr "最大缓存留存时间(天)"
+msgid "Only images with signs"
+msgstr ""
 
-msgid "Source text"
-msgstr "来源文字"
+msgid "Choose signs"
+msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
-msgstr "Lakewalker 插件首选项"
+msgid "Mapillary history"
+msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
-msgstr "用来追踪 Landsat 图库中水域的插件。"
+msgid "Open Mapillary history dialog"
+msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
-msgstr "在每条产生的路径中允许的最大区段数。默认为 250。"
+msgid "Open Mapillary window"
+msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
-msgstr "在简化线条前产生最大的节点数目。默认值为 50000。"
+msgid "Mapillary dialog"
+msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
-msgstr "被认定为水域的最大灰色值(基于 Landsat IR-1 数据)。可以在范围 0-255。默认值为 90。"
+msgid "Open Mapillary main dialog"
+msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Next picture"
 msgstr ""
-"Douglas-Peucker 线条简化的准确度,以度为测量单位。<br>较低的数值会产生较多的节点,和更准确的线条。默认值为 0.0003。"
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
-msgstr "Landsat 瓦片的解析度,以每一度像素为测量单位。默认值为 4000。"
+msgid "Shows the next picture in the sequence"
+msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
-msgstr "一个 landsat 瓦片的大小,以像素为测量单位。默认值为 2000。"
+msgid "Previous picture"
+msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
-msgstr "所有点向东方移位(度)。默认值为 0。"
+msgid "Shows the previous picture in the sequence"
+msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
-msgstr "所有点向北方移位(度)。默认值为 0。"
+msgid "Jump to red"
+msgstr ""
 
-msgid "Direction to search for land. Default east."
-msgstr "查找陆地方向。默认值为东方。"
+msgid "Jumps to the picture at the other side of the red line"
+msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
-msgstr "将路径加上标签成为水域、海岸线、陆地或都不是。默认值为水域。"
+msgid "Jump to blue"
+msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
-msgstr "再次追踪时要使用的 WMS 图层。默认值为 IR1。"
+msgid "Jumps to the picture at the other side of the blue line"
+msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
-msgstr "每个缓存目录的最大容量(字节)。默认值为 300MB"
+msgid "Stops the walk."
+msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
-msgstr "每个缓存文件留存的最大天数。默认值为 100"
+msgid "Play"
+msgstr ""
 
-msgid "Data source text. Default is Landsat."
-msgstr "数据来源文字。默认值为 Landsat。"
+msgid "Continues with the paused walk."
+msgstr ""
 
-msgid "Downloading image tile..."
-msgstr "正在下载图片瓦片..."
+msgid "Pause"
+msgstr ""
 
-msgid "Could not acquire image"
-msgstr "无法获得图片"
+msgid "Pauses the walk."
+msgstr ""
 
-msgid "Connection Failed"
-msgstr "连接失败"
+msgid "Reverse buttons position when displaying images."
+msgstr ""
 
-msgid "Not connected"
-msgstr "未连接"
+msgid "Display hour when the picture was taken"
+msgstr ""
 
-msgid "Connecting"
-msgstr "正在连接"
+msgid "Use 24 hour format"
+msgstr ""
 
-msgid "Connected"
-msgstr "已连接"
+msgid "Move to picture''s location with next/previous buttons"
+msgstr ""
 
-msgid "no name"
-msgstr "没有名称"
+msgid "Download mode: "
+msgstr ""
 
-msgid "Live GPS"
-msgstr "Live GPS"
+msgid "Upload selected sequence"
+msgstr ""
 
-msgid "Show GPS data."
-msgstr "显示 GPS 数据。"
+msgid "Delete after upload"
+msgstr ""
 
-msgid "Status"
-msgstr "状态"
+msgid "Wait for full quality pictures"
+msgstr ""
 
-msgid "Way Info"
-msgstr "路径信息"
+msgid "Follow selected image"
+msgstr ""
 
-msgid "Speed"
-msgstr "速度"
+msgid "Go forward"
+msgstr ""
 
-msgid "Course"
-msgstr "道路"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "LiveGPS layer"
-msgstr "LiveGPS 图层"
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Capture GPS Track"
-msgstr "捕获 GPS 轨迹"
+msgid "2 images joined"
+msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
-msgstr "连接至 gpsd 服务器,并在 LiveGPS 图层中显示目前的位置。"
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Center Once"
-msgstr "置中一次"
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Center the LiveGPS layer to current position."
-msgstr "将 LiveGPS 图层置中于目前的位置。"
+msgid "2 images unjoined"
+msgstr ""
 
-msgid "Auto-Center"
-msgstr "自动置中"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
+msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
-msgstr "持续将 LiveGPS 图层置中到目前的位置。"
+msgid "Downloading"
+msgstr ""
 
-msgid "Open MapDust"
-msgstr "打开 MapDust"
+msgid "Select mode"
+msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
-msgstr "缺少输入数据"
+msgid "Total Mapillary images: {0}"
+msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
-msgstr "导出"
+msgid "Uploading: {0}"
+msgstr ""
 
 msgid "Measured values"
 msgstr "测量的数值"
@@ -25863,6 +26602,9 @@ msgstr "选择范围长度"
 msgid "Selection Area"
 msgstr "选择范围"
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr "角度"
 
@@ -25921,47 +26663,6 @@ msgstr "建立密歇根左转弯限制"
 msgid "Unable to find via nodes. Please check your selection"
 msgstr "无法透过节点找到。请检查您的选择范围"
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr "从 OSM 镜像站下载..."
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr "对象类型: "
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr ""
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr "基础 URL"
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr "关于插件"
 
@@ -26192,6 +26893,9 @@ msgstr "差异"
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr "工具(T)"
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -26777,7 +27481,7 @@ msgstr "将坐标写入图片头"
 
 msgid ""
 "Write position information into the exif header of the following files:"
-msgstr "将地点信息写入下列文件的 exif 档头:"
+msgstr "将地点信息写入下列文件的 exif 头:"
 
 msgid "settings"
 msgstr "设定值"
@@ -27406,6 +28110,27 @@ msgstr "公共交通:启用路点"
 msgid "Public Transport: Edit waypoint name"
 msgstr "公共交通:编辑路点名称"
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr "关系工具箱"
 
@@ -27569,13 +28294,16 @@ msgid "Revert"
 msgstr "还原"
 
 msgid "Enter the ID of the changeset that should be reverted"
-msgstr ""
+msgstr "输入要还原的修改集合 ID"
 
 msgid "Reverted changeset"
-msgstr ""
+msgstr "已还原的修改集合"
 
 msgid "It is not allowed to revert changeset from {0}"
-msgstr ""
+msgstr "不允许从 {0} 还原修改集合"
+
+msgid "Downloading objects history"
+msgstr "正在下载对象历史记录"
 
 msgid "Missing merge target for {0} with id {1}"
 msgstr "缺少 id {1} {0} 的合并目标"
@@ -27584,7 +28312,10 @@ msgid "Objects history"
 msgstr "对象历史记录"
 
 msgid "History reverter"
-msgstr "历史记录还原"
+msgstr "历史记录还原器"
+
+msgid "Tool: Display objects history dialog"
+msgstr "工具:显示对象历史记录对话框"
 
 msgid "Preparing history data..."
 msgstr "正在准备历史记录数据..."
@@ -27615,7 +28346,7 @@ msgid "See {0}"
 msgstr "参见 {0}"
 
 msgid "Revert changeset #{0}"
-msgstr "恢复修改集合#{0}"
+msgstr "还原修改集合 #{0}"
 
 msgid ""
 "Warning: unsupported start element ''{0}'' in changeset content at position "
@@ -27646,7 +28377,7 @@ msgid "Show a selection of the most useful signs"
 msgstr "显示一组最有用的标志"
 
 msgid "Belgium"
-msgstr ""
+msgstr "比利时"
 
 msgid "Spain"
 msgstr "西班牙"
@@ -27768,6 +28499,9 @@ msgstr "{0} 的新数值"
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr "缺少首选项“{0}”。无法初始化 SdsApi。"
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27823,22 +28557,22 @@ msgid "Server"
 msgstr "服务器"
 
 msgid "The URL under which the SDS server can be contacted."
-msgstr ""
+msgstr "可联系 SDS 服务器的 URL。"
 
 msgid ""
 "The user name at the SDS server. You need to create an account with the SDS "
 "admin first."
-msgstr ""
+msgstr "SDS 服务器用户名。您首先需要向 SDS 管理员创建一个帐户。"
 
 msgid ""
 "The password at the SDS server. You need to create an account with the SDS "
 "admin first."
-msgstr ""
+msgstr "SDS 服务器密码。您首先需要向 SDS 管理员创建一个帐户。"
 
 msgid ""
 "Tags beginning with this prefix are never saved to OSM, but to the SDS "
 "server only."
-msgstr ""
+msgstr "以此前缀开头的标签只保存到 SDS 服务器,不会保存到 OSM。"
 
 msgid "SDS server URL"
 msgstr "SDS 服务器 URL"
@@ -27871,19 +28605,19 @@ msgid "Save SDS file"
 msgstr "保存 SDS 文件"
 
 msgid "No object selected"
-msgstr ""
+msgstr "未选择对象"
 
 msgid "SeaChart Editor"
-msgstr ""
+msgstr "海图编辑器"
 
 msgid "Seamark Inspector"
-msgstr ""
+msgstr "海标检查器"
 
 msgid "Select only one object"
-msgstr ""
+msgstr "只选择一个对象"
 
 msgid "Select a map object"
-msgstr ""
+msgstr "选择一个地图对象"
 
 msgid "Simplify Area"
 msgstr "简化区域"
@@ -27948,14 +28682,50 @@ msgstr "合并阈值附近的节点"
 msgid "SeaMap Editor"
 msgstr "海标编辑器"
 
-msgid "OSM Export"
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
 msgstr ""
 
+msgid "Undelete node {0}"
+msgstr "取消删除节点 {0}"
+
+msgid "OSM Export"
+msgstr "OSM 导出"
+
 msgid "Export traffic data to SUMO network file."
 msgstr ""
 
 msgid "SUMO Export"
-msgstr ""
+msgstr "SUMO 导出"
+
+msgid "Export"
+msgstr "导出"
 
 msgid "AutoSave LiveData"
 msgstr "自动保存即时数据"
@@ -28003,7 +28773,7 @@ msgid "Tag2Link Preferences"
 msgstr "Tag2Link 首选项"
 
 msgid "Launch browser with information about the selected object"
-msgstr ""
+msgstr "启动浏览器,显示有关所选对象的信息"
 
 msgid ""
 "Launch your default software for sending an email to the selected contact "
@@ -28193,9 +28963,6 @@ msgstr "示踪器 2 错误"
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr "拼贴尺寸:"
-
 msgid "Resolution:"
 msgstr "分辨率:"
 
@@ -28218,13 +28985,13 @@ msgid "Delete parameter \"{0}\"?"
 msgstr "删除参数“{0}”?"
 
 msgid "Add new"
-msgstr ""
+msgstr "添加新的"
 
 msgid "Add predefined"
-msgstr ""
+msgstr "添加预定义的"
 
 msgid "Select predefined parameter"
-msgstr ""
+msgstr "选择预定义参数"
 
 msgid "Modify list of parameter for server request."
 msgstr ""
@@ -28796,7 +29563,7 @@ msgid "Bicycles"
 msgstr "自行车"
 
 msgid "Mopeds"
-msgstr ""
+msgstr "轻便摩托车"
 
 msgid "Use standard exceptions"
 msgstr "使用标准异常"
@@ -28877,7 +29644,7 @@ msgstr "用来编辑转弯限制的 OSM 插件"
 msgid ""
 "Development of the turn restriction plugin was sponsored by <a "
 "href=\"http://www.skobbler.de\">skobbler GmbH</a>."
-msgstr "转弯限制插件的开发是由 <a href=\"http://www.skobbler.de\">skobbler GmbH</a> 赞助。"
+msgstr "转弯限制插件由 <a href=\"http://www.skobbler.de\">skobbler GmbH</a> 赞助开发。"
 
 msgid "Configure the preferences for the turnrestrictions plugin"
 msgstr "设定 turnrestrictions 插件的首选项"
@@ -29155,7 +29922,7 @@ msgstr "粘贴关系"
 
 msgid ""
 "Paste relation membership from objects in the buffer onto selected object(s)"
-msgstr ""
+msgstr "从缓冲区对象中粘贴成员关系到选定的对象上"
 
 msgid "Split Object"
 msgstr "分割对象"
@@ -29253,7 +30020,7 @@ msgid "Opens specified URL browser"
 msgstr "打开指定的 URL 浏览器"
 
 msgid "Utilsplugin2 settings"
-msgstr ""
+msgstr "Utilsplugin2 设置"
 
 msgid "Here you can change some preferences of Utilsplugin2 functions"
 msgstr "在这里,您可以更改一些 Utilsplugin2 功能的首选项"
@@ -29327,22 +30094,22 @@ msgstr ""
 "deg 11' 47.60\" E</li></ul>"
 
 msgid "Tag multiple objects [alpha]"
-msgstr ""
+msgstr "标记多个对象 [alpha]"
 
 msgid "Edit tags of object list in table"
-msgstr ""
+msgstr "编辑列于表中对象的标签"
 
 msgid "Tag multiple objects"
-msgstr ""
+msgstr "标记多个对象"
 
 msgid "Sync with JOSM selection"
 msgstr ""
 
 msgid "Zoom to objects"
-msgstr ""
+msgstr "缩放至对象"
 
 msgid "Remove tag"
-msgstr ""
+msgstr "移除标签"
 
 msgid "Delete tags from multiple objects"
 msgstr ""
@@ -29582,7 +30349,7 @@ msgid "Keep centered"
 msgstr "保持居中"
 
 msgid "follows the video icon automatically"
-msgstr ""
+msgstr "自动跟随视频图标"
 
 msgid "Subtitles"
 msgstr "字幕"
@@ -29612,13 +30379,14 @@ msgid "deinterlacing using line doubling"
 msgstr ""
 
 msgid "deinterlacing using linear interpolation"
-msgstr ""
+msgstr "使用线性插值解交错"
 
 msgid ""
 "VLC library is not correctly initialized. Please check that VLC {0} is "
 "correctly installed on your system. Its architecture (32/64 bits) must also "
 "be the same as the JRE that runs JOSM."
 msgstr ""
+"VLC 库没有正确初始化。请检查 VLC {0} 是否正确地安装在系统上。它的架构(32/64位)也必须与运行  JOSM 的 JRE 相同。"
 
 msgid "Jump to"
 msgstr "跳至"
@@ -29721,9 +30489,6 @@ msgstr "搜索路点"
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr "在路点后搜索。点击并移动地图查看路点。"
 
-msgid "Way Select"
-msgstr "路径选择"
-
 msgid "Add names from Wikipedia"
 msgstr "添加维基百科的名称"
 
diff --git a/i18n/po/zh_TW.po b/i18n/po/zh_TW.po
index b524e89..e1fc1bc 100644
--- a/i18n/po/zh_TW.po
+++ b/i18n/po/zh_TW.po
@@ -7,16 +7,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: josm\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-12 03:33+0200\n"
-"PO-Revision-Date: 2015-05-02 23:23+0000\n"
-"Last-Translator: Chao-Hsiung Liao <j_h_liau at yahoo.com.tw>\n"
+"POT-Creation-Date: 2015-10-09 03:39+0200\n"
+"PO-Revision-Date: 2015-05-12 22:54+0000\n"
+"Last-Translator: Supaplex <Unknown>\n"
 "Language-Team: Traditional Chinese\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2015-05-12 05:03+0000\n"
-"X-Generator: Launchpad (build 17487)\n"
+"X-Launchpad-Export-Date: 2015-10-09 05:08+0000\n"
+"X-Generator: Launchpad (build 17802)\n"
 "Language: zh_TW\n"
 
 msgid "{0}: option ''{1}'' is ambiguous"
@@ -97,21 +97,18 @@ msgstr "正在載入圖片偏好設定"
 msgid "Updating user interface"
 msgstr "正在更新使用者介面"
 
-msgid "{0} completed in {1}"
-msgstr ""
-
-msgid "Ignoring malformed file URL: \"{0}\""
-msgstr "忽略格式不良的檔案 URL: \"{0}\""
+msgid "Ignoring malformed URL: \"{0}\""
+msgstr "忽略不正確的 URL: \"{0}\""
 
 msgid "Warning"
 msgstr "警告"
 
+msgid "Ignoring malformed file URL: \"{0}\""
+msgstr "忽略格式不良的檔案 URL: \"{0}\""
+
 msgid "Parameter \"downloadgps\" does not accept file names or file URLs"
 msgstr "參數「downloadgps」不能使用檔案名稱或檔案 URL"
 
-msgid "Ignoring malformed URL: \"{0}\""
-msgstr "忽略不正確的 URL: \"{0}\""
-
 msgid ""
 "<h2>JOSM requires Java version {0}.</h2>Detected Java version: {1}.<br>You "
 "can <ul><li>update your Java (JRE) or</li><li>use an earlier (Java {2} "
@@ -445,11 +442,14 @@ msgstr "切換對話盒面板"
 msgid "Toggle dialogs panel, maximize mapview"
 msgstr "切換對話盒面板,最大化地圖檢視"
 
+msgid "Distribute Nodes"
+msgstr ""
+
 msgid "Distribute the selected nodes to equal distances along a line."
 msgstr "依一條直線將選取的節點等距離散佈。"
 
 msgid "Ignoring {0} nodes with null coordinates"
-msgstr ""
+msgstr "忽略無座標資訊的 {0} 節點"
 
 msgid ""
 "Please select :\n"
@@ -1035,6 +1035,30 @@ msgstr "<html>請確定所有選取的路徑都朝著類似的方向<br>或是
 msgid "Please select ways with angles of approximately 90 or 180 degrees."
 msgstr "請選擇角度大約為 90 或 180 度的路徑。"
 
+msgid "Download from Overpass API ..."
+msgstr "從 Overpass API 下載..."
+
+msgid "Download map data from Overpass API server."
+msgstr ""
+
+msgid "Builds an Overpass query using the Overpass Turbo query wizard"
+msgstr ""
+
+msgid "Build query"
+msgstr ""
+
+msgid "<html>The Overpass wizard could not parse the following query:"
+msgstr ""
+
+msgid "Parse error"
+msgstr ""
+
+msgid "Overpass query: "
+msgstr ""
+
+msgid "Overpass server: "
+msgstr ""
+
 msgid "Paste"
 msgstr "貼上"
 
@@ -1942,15 +1966,6 @@ msgstr "貼齊角度已生效。"
 msgid "Finish drawing."
 msgstr "結束繪製。"
 
-msgid "FIX"
-msgstr ""
-
-msgid "draw angle snap"
-msgstr "繪製角度貼齊"
-
-msgid "draw angle snap highlight"
-msgstr ""
-
 msgid "Toggle snapping by {0}"
 msgstr "切換依 {0} 貼齊"
 
@@ -1972,6 +1987,15 @@ msgstr "0,45,90,..."
 msgid "0,30,45,60,90,..."
 msgstr "0,30,45,60,90,..."
 
+msgid "FIX"
+msgstr ""
+
+msgid "draw angle snap"
+msgstr "繪製角度貼齊"
+
+msgid "draw angle snap highlight"
+msgstr ""
+
 msgid "Angle snapping"
 msgstr "角度貼齊"
 
@@ -2090,9 +2114,6 @@ msgid ""
 "The ways selected must form a simple branchless path"
 msgstr ""
 
-msgid "Make parallel way error"
-msgstr "製作平行路徑錯誤"
-
 msgid "Drag play head"
 msgstr "拖放播放開頭"
 
@@ -2306,9 +2327,15 @@ msgstr "所有的物件"
 msgid "Also include incomplete and deleted objects in search."
 msgstr "搜尋也包含不完整和已刪除的物件。"
 
+msgid "standard"
+msgstr ""
+
 msgid "regular expression"
 msgstr "正規表示式"
 
+msgid "MapCSS selector"
+msgstr ""
+
 msgid "add toolbar button"
 msgstr "加入工具列按鈕"
 
@@ -2525,6 +2552,10 @@ msgid "RX"
 msgstr "RX"
 
 msgctxt "search"
+msgid "CSS"
+msgstr ""
+
+msgctxt "search"
 msgid "A"
 msgstr "A"
 
@@ -2573,6 +2604,9 @@ msgstr "預期的數字範圍"
 msgid "Unexpected token. Expected {0}, found {1}"
 msgstr "未預期的記號。應該為 {0},卻發現 {1}"
 
+msgid "Failed to parse MapCSS selector"
+msgstr ""
+
 msgid "Unexpected token: {0}"
 msgstr "未預期的記號:{0}"
 
@@ -3013,6 +3047,24 @@ msgstr ""
 msgid "<html>Failed to create missing cache directory: {0}</html>"
 msgstr "<html>無法建立缺少的快取目錄: {0}</html>"
 
+msgid "Unable to delete temporary file {0}"
+msgstr ""
+
+msgid "Unable to set file non-readable {0}"
+msgstr ""
+
+msgid "Unable to set file non-writable {0}"
+msgstr ""
+
+msgid "Unable to set file non-executable {0}"
+msgstr ""
+
+msgid "Unable to set file readable {0}"
+msgstr ""
+
+msgid "Unable to set file writable {0}"
+msgstr ""
+
 msgid ""
 "Failed to initialize preferences. Preference directory ''{0}'' is not a "
 "directory."
@@ -3130,12 +3182,46 @@ msgctxt "compass"
 msgid "E"
 msgstr "東"
 
-msgid "Not in cache"
-msgstr "不在快取中"
-
 msgid "Projection ''{0}'' is not found, bookmark ''{1}'' is not usable"
 msgstr "找不到投影法「{0}」,書籤「{1}」無法使用"
 
+msgid "HTTP error {0} when loading tiles"
+msgstr ""
+
+msgid "Error downloading tiles: {0}"
+msgstr ""
+
+msgid "Could not load image from tile server"
+msgstr ""
+
+msgid ""
+"{0} is not a valid WMS argument. Please check this server URL:\n"
+"{1}"
+msgstr ""
+
+msgid "Select WMTS layer"
+msgstr ""
+
+msgid "Layer name"
+msgstr ""
+
+msgid "Projection"
+msgstr "投影方法"
+
+msgid "Matrix set identifier"
+msgstr ""
+
+msgid "No layers defined by getCapabilities document: {0}"
+msgstr ""
+
+msgid "No layer selected"
+msgstr ""
+
+msgid ""
+"Only square tiles are supported. {0}x{1} returned by server for TileMatrix "
+"identifier {2}"
+msgstr ""
+
 msgid "ID > 0 expected. Got {0}."
 msgstr "預期 ID > 0。收到 {0}。"
 
@@ -3320,6 +3406,12 @@ msgstr "文字"
 msgid "areatext"
 msgstr "區域文字"
 
+msgid "UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."
+msgstr ""
+
+msgid "Expected integer value in range 1-60 for ''+zone=...'' parameter."
+msgstr ""
+
 msgid "Parameter must begin with a ''+'' character (found ''{0}'')"
 msgstr ""
 
@@ -3347,13 +3439,13 @@ msgstr ""
 msgid "Combination of ellipsoid parameters is not supported."
 msgstr ""
 
-msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
+msgid "Unknown datum identifier: ''{0}''"
 msgstr ""
 
-msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
+msgid "Ellipsoid required (+ellps=* or +a=*, +b=*)"
 msgstr ""
 
-msgid "Unknown datum identifier: ''{0}''"
+msgid "Grid shift file ''{0}'' for option +nadgrids not supported."
 msgstr ""
 
 msgid "Datum required (+datum=*, +towgs84=* or +nadgrids=*)"
@@ -3973,9 +4065,6 @@ msgstr "標籤設定鍵長過允許值"
 msgid "Tags with empty values"
 msgstr "標籤沒有數值"
 
-msgid "Invalid property key"
-msgstr "無效的屬性設定鍵"
-
 msgid "Invalid white space in property key"
 msgstr "屬性設定鍵中有無效的空白字元"
 
@@ -3985,12 +4074,24 @@ msgstr "屬性數值以空白字元開頭或結尾"
 msgid "Property values contain HTML entity"
 msgstr "屬性數值含有 HTML 標記"
 
+msgid "Key ''{0}'' looks like ''{1}''."
+msgstr ""
+
+msgid "Misspelled property key"
+msgstr ""
+
 msgid "Key ''{0}'' not in presets."
 msgstr "設定鍵「{0}」不在預設組合裡。"
 
 msgid "Presets do not contain property key"
 msgstr "預設組合不包含屬性設定鍵"
 
+msgid "Value ''{0}'' for key ''{1}'' looks like ''{2}''."
+msgstr ""
+
+msgid "Misspelled property value"
+msgstr ""
+
 msgid "Value ''{0}'' for key ''{1}'' not in presets."
 msgstr "設定鍵「{1}」的數值「{0}」不在預設組合中。"
 
@@ -4171,15 +4272,15 @@ msgstr "路徑節點靠近其他的路徑"
 msgid "Connected way end node near other way"
 msgstr "已連接的路徑結束點靠近其他的路徑"
 
+msgid "Unconnected nodes without physical tags"
+msgstr "未連接且沒有實體標籤的節點"
+
 msgid "Untagged and unconnected nodes"
 msgstr "沒有標籤且未連接的節點"
 
 msgid "This test checks for untagged nodes that are not part of any way."
 msgstr "這個測試會檢查未加標籤且不屬任何路徑的一部分的節點。"
 
-msgid "Unconnected nodes without physical tags"
-msgstr "未連接且沒有實體標籤的節點"
-
 msgid "No tags"
 msgstr "沒有標籤"
 
@@ -4372,8 +4473,9 @@ msgstr "點選以關閉對話盒"
 msgid "Imagery offset"
 msgstr "圖片偏移"
 
+msgctxt "menu"
 msgid "Imagery"
-msgstr "圖片"
+msgstr ""
 
 msgctxt "layer"
 msgid "Offset"
@@ -4586,45 +4688,56 @@ msgid ""
 "now?"
 msgstr ""
 
+msgctxt "menu"
 msgid "File"
-msgstr "檔案"
+msgstr ""
 
-msgid "Session"
-msgstr "作業階段"
+msgctxt "menu"
+msgid "Edit"
+msgstr ""
 
+msgctxt "menu"
 msgid "View"
-msgstr "檢視"
+msgstr ""
 
+msgctxt "menu"
 msgid "Tools"
-msgstr "工具"
+msgstr ""
 
+msgctxt "menu"
 msgid "More tools"
-msgstr "更多工具"
+msgstr ""
 
+msgctxt "menu"
 msgid "Data"
 msgstr ""
 
+msgctxt "menu"
 msgid "Selection"
-msgstr "選擇區域"
+msgstr ""
 
+msgctxt "menu"
 msgid "Presets"
-msgstr "預設組合"
+msgstr ""
 
 msgid "More..."
 msgstr ""
 
+msgctxt "menu"
 msgid "GPS"
 msgstr ""
 
+msgctxt "menu"
 msgid "Windows"
-msgstr "視窗"
+msgstr ""
+
+msgctxt "menu"
+msgid "Help"
+msgstr ""
 
 msgid "Menu: {0}"
 msgstr "選單:{0}"
 
-msgid "Save and load the current session (list of layers, etc.)"
-msgstr "儲存與載入目前的作業階段 (圖層清單等等)"
-
 msgid "Edit toolbar"
 msgstr "編輯工具列"
 
@@ -4646,8 +4759,9 @@ msgstr "點選以開啟偏好設定的圖片分頁"
 msgid "Search menu items"
 msgstr "搜尋選單項目"
 
+msgctxt "menu"
 msgid "Audio"
-msgstr "音效"
+msgstr ""
 
 msgid "Do not hide toolbar"
 msgstr ""
@@ -4768,62 +4882,18 @@ msgstr "背景執行"
 msgid "Click to run job in background"
 msgstr "點選以在背景執行工作"
 
-msgid ""
-"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
-msgstr "航照圖可能沒有對齊。請使用 GPS 軌跡檢查它的位移值!"
-
-msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
-
-msgid "Details..."
-msgstr "詳細資料…"
-
-msgid "Hide this message and never show it again"
-msgstr "隱藏這個訊息並且不再顯示它"
-
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
-"relation</strong>.</html>"
-msgstr ""
-"<html>請確認是否從 <strong>1 個關係</strong>中移除 <strong>1 個物件</strong>。</html>"
+msgid " ({0})"
+msgstr " ({0})"
 
-msgid ""
-"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
-"relations</strong>.</html>"
+msgid "{0} completed in {1}"
 msgstr ""
-"<html>請確認是否從 <strong>{0} 個關係</strong>中移除 <strong>1 個物件</strong>。</html>"
 
-msgid ""
-"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
-"relations</strong>.</html>"
+msgid "Enlarge"
 msgstr ""
-"<html>請確認是否從 <strong>{1} 個關係</strong>中移除 <strong>{0} 個物件</strong>。</html>"
 
-msgid "Deleting {0} object"
-msgid_plural "Deleting {0} objects"
-msgstr[0] "正在刪除 {0} 個物件"
-
-msgid "Delete objects"
-msgstr "正在刪除物件"
-
-msgid "To delete"
-msgstr "要刪除"
-
-msgid "From Relation"
-msgstr "從關係"
-
-msgid "Pos."
+msgid "Shrink"
 msgstr ""
 
-msgid "Role"
-msgstr "角色"
-
-msgid "Click to close the dialog and remove the object from the relations"
-msgstr "點選以關閉此對話盒並從關係中移除此物件"
-
-msgid "Click to close the dialog and to abort deleting the objects"
-msgstr "點選以關閉此對話盒並放棄刪除此物件"
-
 msgid ""
 "<html>Please select a <strong>range of OSM tiles</strong> at a given zoom "
 "level.</html>"
@@ -5247,6 +5317,9 @@ msgstr "保留他們的刪除狀態"
 msgid "Undecide conflict between deleted state"
 msgstr "已刪除狀態之間未解決的衝突"
 
+msgid "Role"
+msgstr "角色"
+
 msgid "Primitive"
 msgstr "原型"
 
@@ -5484,6 +5557,9 @@ msgstr ""
 msgid "Apply this role to all members"
 msgstr "將這個角色套用到所有成員中"
 
+msgid "Pos."
+msgstr ""
+
 msgid "Orig. Way"
 msgstr "原路徑"
 
@@ -5632,6 +5708,43 @@ msgstr "解決衝突"
 msgid "Resolve conflicts for ''{0}''"
 msgstr "調解「{0}」的衝突"
 
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>1 "
+"relation</strong>.</html>"
+msgstr ""
+"<html>請確認是否從 <strong>1 個關係</strong>中移除 <strong>1 個物件</strong>。</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>請確認是否從 <strong>{0} 個關係</strong>中移除 <strong>1 個物件</strong>。</html>"
+
+msgid ""
+"<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} "
+"relations</strong>.</html>"
+msgstr ""
+"<html>請確認是否從 <strong>{1} 個關係</strong>中移除 <strong>{0} 個物件</strong>。</html>"
+
+msgid "Deleting {0} object"
+msgid_plural "Deleting {0} objects"
+msgstr[0] "正在刪除 {0} 個物件"
+
+msgid "Delete objects"
+msgstr "正在刪除物件"
+
+msgid "To delete"
+msgstr "要刪除"
+
+msgid "From Relation"
+msgstr "從關係"
+
+msgid "Click to close the dialog and remove the object from the relations"
+msgstr "點選以關閉此對話盒並從關係中移除此物件"
+
+msgid "Click to close the dialog and to abort deleting the objects"
+msgstr "點選以關閉此對話盒並放棄刪除此物件"
+
 msgid "Filter objects and hide/disable them."
 msgstr "過濾物件並隱藏/停用它們。"
 
@@ -5735,8 +5848,8 @@ msgstr "進階的物件資訊"
 msgid "map style"
 msgstr "地圖樣式"
 
-msgid " ({0})"
-msgstr " ({0})"
+msgid "edit counts"
+msgstr ""
 
 msgid "not in data set"
 msgstr "不在資料組合內"
@@ -5864,6 +5977,11 @@ msgid ""
 "Warning: The 2 selected objects have equal, but not identical style caches."
 msgstr ""
 
+msgid "{0} user last edited the selection:"
+msgid_plural "{0} users last edited the selection:"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid "xml"
 msgstr "xml"
 
@@ -5873,22 +5991,53 @@ msgstr ""
 msgid "unknown"
 msgstr "不明"
 
-msgid ""
-"Enter the coordinates for the new node.<br/>You can separate longitude and "
-"latitude with space, comma or semicolon.<br/>Use positive numbers or N, E "
-"characters to indicate North or East cardinal direction.<br/>For South and "
-"West cardinal directions you can use either negative numbers or S, W "
-"characters.<br/>Coordinate value can be in one of three "
-"formats:<ul><li><i>degrees</i><tt>°</tt></li><li><i>degrees</i><tt>°<"
-"/tt> <i>minutes</i><tt>'</tt></li><li><i>degrees</i><tt>°</tt> "
-"<i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li></ul>Symbols "
-"<tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
-"<tt>″</tt> are optional.<br/><br/>Some examples:<ul>{0}</ul>"
+msgid "Enter the coordinates for the new node."
 msgstr ""
 
-msgid "Projected coordinates:"
-msgstr "投影的坐標:"
-
+msgid ""
+"You can separate longitude and latitude with space, comma or semicolon."
+msgstr ""
+
+msgid ""
+"Use positive numbers or N, E characters to indicate North or East cardinal "
+"direction."
+msgstr ""
+
+msgid ""
+"For South and West cardinal directions you can use either negative numbers "
+"or S, W characters."
+msgstr ""
+
+msgid "Coordinate value can be in one of three formats:"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt>"
+msgstr ""
+
+msgid "<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"
+msgstr ""
+
+msgid ""
+"<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> "
+"<i>seconds</i><tt>&quot</tt>"
+msgstr ""
+
+msgid ""
+"Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, "
+"<tt>″</tt> are optional."
+msgstr ""
+
+msgid ""
+"You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or "
+"<tt>lat=''...'' lon=''...''</tt>."
+msgstr ""
+
+msgid "Some examples:"
+msgstr ""
+
+msgid "Projected coordinates:"
+msgstr "投影的坐標:"
+
 msgid ""
 "Enter easting and northing (x and y) separated by space, comma or semicolon."
 msgstr ""
@@ -5929,6 +6078,12 @@ msgstr "透明度"
 msgid "Adjust opacity of the layer."
 msgstr "調整圖層的透明度。"
 
+msgid "Gamma"
+msgstr ""
+
+msgid "Adjust gamma value of the layer."
+msgstr ""
+
 msgid "Activate"
 msgstr "使用"
 
@@ -6058,6 +6213,12 @@ msgstr ""
 msgid "Customize the style"
 msgstr ""
 
+msgid "Mini map"
+msgstr ""
+
+msgid "Displays a small map of the current edit location"
+msgstr ""
+
 msgid "List of notes"
 msgstr ""
 
@@ -6116,10 +6277,15 @@ msgstr "物件 ID:"
 msgid "Enter the ID of the object that should be downloaded"
 msgstr "輸入要下載的物件 ID"
 
+msgid "Object IDs can be separated by comma or space, for instance: {0}"
+msgstr ""
+
 msgid ""
-"Object IDs can be separated by comma or space.<br/>Examples: {0}<br/>In "
-"mixed mode, specify objects like this: {1}<br/>({2} stands for <i>node</i>, "
-"{3} for <i>way</i>, and {4} for <i>relation</i>)"
+"In mixed mode, specify objects like this: {0}<br/>({1} stands for "
+"<i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)"
+msgstr ""
+
+msgid "Ranges of object IDs are specified with a hyphen, for instance: {0}"
 msgstr ""
 
 msgid ""
@@ -6148,6 +6314,9 @@ msgstr ""
 msgid "Relations: {0}"
 msgstr "關係:{0}"
 
+msgid "Selection"
+msgstr "選擇區域"
+
 msgid "Open a selection list window."
 msgstr "開啓選擇區域清單視窗。"
 
@@ -6237,6 +6406,12 @@ msgstr "開啟驗證視窗。"
 msgid "Validation results"
 msgstr "驗證的結果"
 
+msgid "Lookup"
+msgstr ""
+
+msgid "Looks up the selected primitives in the error list."
+msgstr ""
+
 msgid "Fix"
 msgstr "修正"
 
@@ -6834,6 +7009,12 @@ msgstr "前往 OSM wiki 取得標籤說明 (F1)"
 msgid "Launch browser with wiki help for selected object"
 msgstr "執行瀏覽器顯示選取物件的 wiki 說明"
 
+msgid "Go to Taginfo"
+msgstr ""
+
+msgid "Launch browser with Taginfo statistics for selected object"
+msgstr ""
+
 msgid "Paste Value"
 msgstr ""
 
@@ -6921,14 +7102,13 @@ msgstr ""
 msgid "Remember last used tags after a restart"
 msgstr ""
 
-msgid "<code>Ctrl-1</code> to apply first suggestion"
+msgid "to apply first suggestion"
 msgstr ""
 
-msgid "<code>Shift-Enter</code> to add without closing the dialog"
+msgid "to add without closing the dialog"
 msgstr ""
 
-msgid ""
-"<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog"
+msgid "to add first suggestion without closing the dialog"
 msgstr ""
 
 msgid "Please enter the number of recently added tags to display"
@@ -7099,6 +7279,12 @@ msgstr "排序關係成員"
 msgid "Relation Editor: Sort"
 msgstr "關係編輯器:排序"
 
+msgid "Sort below"
+msgstr ""
+
+msgid "Sort the selected relation members and all members below"
+msgstr ""
+
 msgid "Reverse the order of the relation members"
 msgstr "反轉關係成員的順序"
 
@@ -7641,6 +7827,9 @@ msgstr "正在載入關係 {0} 的歷史紀錄"
 msgid "Node {0}"
 msgstr "節點 {0}"
 
+msgid "The nodes of this way are in reverse order"
+msgstr ""
+
 msgid "Zoom to node"
 msgstr "縮放到節點"
 
@@ -8496,6 +8685,106 @@ msgid "{0} object to delete:"
 msgid_plural "{0} objects to delete:"
 msgstr[0] "{0} 個物件要刪除:"
 
+msgid "Show Tile Info"
+msgstr "顯示拼貼資訊"
+
+msgid "Tile Info"
+msgstr ""
+
+msgid "Metadata "
+msgstr ""
+
+msgid "Auto Zoom"
+msgstr "自動縮放"
+
+msgid "Auto load tiles"
+msgstr "自動載入拼貼"
+
+msgid "Load All Tiles"
+msgstr "載入所有拼貼"
+
+msgid "Load All Error Tiles"
+msgstr "載入所有錯誤的拼貼"
+
+msgid "Zoom to native resolution"
+msgstr ""
+
+msgid "Change resolution"
+msgstr "改變解析度"
+
+msgid "Failed to create tile source"
+msgstr ""
+
+msgid "Show Errors"
+msgstr "顯示錯誤"
+
+msgid "Load Tile"
+msgstr "載入拼貼"
+
+msgid "Increase zoom"
+msgstr "增加縮放"
+
+msgid "Decrease zoom"
+msgstr "減少縮放"
+
+msgid "Snap to tile size"
+msgstr "貼緊拼貼大小"
+
+msgid "Flush Tile Cache"
+msgstr "清除拼貼快取"
+
+msgid "zoom in to load any tiles"
+msgstr "拉近以讀取任何拼貼"
+
+msgid "zoom in to load more tiles"
+msgstr "拉近以讀取更多拼貼"
+
+msgid "increase zoom level to see more detail"
+msgstr "增加縮放等級以查看更多詳細資料"
+
+msgid "No tiles at this zoom level"
+msgstr "這個縮放等級沒有拼貼"
+
+msgid "Current zoom: {0}"
+msgstr ""
+
+msgid "Display zoom: {0}"
+msgstr ""
+
+msgid "Pixel scale: {0}"
+msgstr ""
+
+msgid "Best zoom: {0}"
+msgstr ""
+
+msgid "Cache stats: {0}"
+msgstr ""
+
+msgid "{0} ({1}), automatically downloading in zoom {2}"
+msgstr ""
+
+msgid "{0} ({1}), downloading in zoom {2}"
+msgstr ""
+
+msgid "Downloaded {0}/{1} tiles"
+msgstr ""
+
+msgid "Save WMS file"
+msgstr ""
+
+msgid ""
+"Aerial imagery might be misaligned. Please check its offset using GPS tracks!"
+msgstr "航照圖可能沒有對齊。請使用 GPS 軌跡檢查它的位移值!"
+
+msgid "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+msgstr "http://wiki.openstreetmap.org/wiki/Using_Imagery"
+
+msgid "Details..."
+msgstr "詳細資料…"
+
+msgid "Hide this message and never show it again"
+msgstr "隱藏這個訊息並且不再顯示它"
+
 msgid "Customize Color"
 msgstr "自訂顏色"
 
@@ -8545,6 +8834,9 @@ msgstr "儲存 GPX 檔案"
 msgid "Imagery fade"
 msgstr "圖片淡出"
 
+msgid "Unsupported imagery type: {0}"
+msgstr ""
+
 msgid "ERROR"
 msgstr "錯誤"
 
@@ -8565,7 +8857,7 @@ msgstr ""
 
 msgid ""
 "The layer {0} does not support the new projection {1}.\n"
-"{2}\n"
+"Supported projections are: {2}\n"
 "Change the projection again or remove the layer."
 msgstr ""
 
@@ -8647,190 +8939,90 @@ msgstr "尚有未解決的衝突。如果您全部拒絕就不會儲存衝突。
 msgid "Save OSM file"
 msgstr "儲存 OSM 檔案"
 
-msgid ""
-"{0} is not a valid TMS argument. Please check this server URL:\n"
-"{1}"
+msgid "EPSG:4326 and Mercator projection are supported"
 msgstr ""
 
+msgid "Validation errors"
+msgstr "驗證的錯誤"
+
+msgid "No validation errors"
+msgstr "沒有驗證上的錯誤"
+
+msgid "Set WMS Bookmark"
+msgstr "設定 WMS 書籤"
+
 msgid ""
-"TMS layers do not support the projection {0}.\n"
-"{1}\n"
-"Change the projection or remove the layer."
+"JOSM will use EPSG:4326 to query the server, but results may vary depending "
+"on the WMS server"
 msgstr ""
 
-msgid "Auto Zoom"
-msgstr "自動縮放"
+msgid "Correlate to GPX"
+msgstr "關聯到 GPX"
 
-msgid "Auto load tiles"
-msgstr "自動載入拼貼"
+msgid "Invalid timezone"
+msgstr "無效的時區"
 
-msgid "Show Errors"
-msgstr "顯示錯誤"
+msgid "Invalid offset"
+msgstr "無效的移位"
 
-msgid "Load Tile"
-msgstr "載入拼貼"
+msgid "Correlate images with GPX track"
+msgstr "將圖片與 GPX 軌跡關聯"
 
-msgid "Show Tile Info"
-msgstr "顯示拼貼資訊"
+msgid "Try Again"
+msgstr "再試一次"
 
-msgid "Load All Tiles"
-msgstr "載入所有拼貼"
+msgid "No images could be matched!"
+msgstr "無法配對任何圖片!"
 
-msgid "Load All Error Tiles"
-msgstr "載入所有錯誤的拼貼"
+msgid "GPX Files (*.gpx *.gpx.gz)"
+msgstr "GPX 檔案 (*.gpx *.gpx.gz)"
 
-msgid "Increase zoom"
-msgstr "增加縮放"
+msgid "File {0} is loaded yet under the name \"{1}\""
+msgstr "檔案 {0} 已經以「{1}」的名稱載入了。"
 
-msgid "Decrease zoom"
-msgstr "減少縮放"
+msgid "Error while parsing {0}"
+msgstr "當解析 {0} 時發生錯誤。"
 
-msgid "Snap to tile size"
-msgstr "貼緊拼貼大小"
+msgid "Could not read \"{0}\""
+msgstr "不能讀取 \"{0}\""
 
-msgid "Flush Tile Cache"
-msgstr "清除拼貼快取"
+msgid ""
+"<html>Take a photo of your GPS receiver while it displays the "
+"time.<br>Display that photo here.<br>And then, simply capture the time you "
+"read on the photo and select a timezone<hr></html>"
+msgstr ""
+"<html>配合您的 GPS 接收器拍照,它會顯示時刻。<br>在這裡顯示照片。<br>然後,根據您讀取到的相片時刻並選擇時區<hr></html>"
 
-msgid "zoom in to load any tiles"
-msgstr "拉近以讀取任何拼貼"
+msgid "Photo time (from exif):"
+msgstr "相片時刻 (取自 exif):"
 
-msgid "zoom in to load more tiles"
-msgstr "拉近以讀取更多拼貼"
+msgid "Gps time (read from the above photo): "
+msgstr "Gps 時刻(自上列相片讀取): "
 
-msgid "increase zoom level to see more detail"
-msgstr "增加縮放等級以查看更多詳細資料"
+msgid "I am in the timezone of: "
+msgstr "我所在的時區: "
 
-msgid "No tiles at this zoom level"
-msgstr "這個縮放等級沒有拼貼"
+msgid "No date"
+msgstr "沒有日期"
 
-msgid "Current zoom: {0}"
-msgstr ""
+msgid "Open another photo"
+msgstr "開啟其他相片"
 
-msgid "Display zoom: {0}"
-msgstr ""
+msgid "Synchronize time from a photo of the GPS receiver"
+msgstr "從 GPS 接收器的相片同步時間"
 
-msgid "Pixel scale: {0}"
+msgid ""
+"Error while parsing the date.\n"
+"Please use the requested format"
 msgstr ""
+"分析日期時發生錯誤。\n"
+"請使用要求的格式"
 
-msgid "Best zoom: {0}"
-msgstr ""
+msgid "Invalid date"
+msgstr "無效的日期"
 
-msgid "Cache stats: {0}"
-msgstr ""
-
-msgid "TMS layer ({0}), downloading in zoom {1}"
-msgstr ""
-
-msgid "EPSG:4326 and Mercator projection are supported"
-msgstr ""
-
-msgid "Validation errors"
-msgstr "驗證的錯誤"
-
-msgid "No validation errors"
-msgstr "沒有驗證上的錯誤"
-
-msgid "Blank Layer"
-msgstr "空白圖層"
-
-msgid "Downloaded {0}/{1} tiles"
-msgstr ""
-
-msgid "WMS layer ({0}), automatically downloading in zoom {1}"
-msgstr "WMS 圖層 ({0}),於縮放 {1} 自動下載"
-
-msgid "WMS layer ({0}), downloading in zoom {1}"
-msgstr "WMS 圖層 ({0}),於縮放 {1} 下載"
-
-msgid "Download visible tiles"
-msgstr "下載可見的拼貼"
-
-msgid ""
-"The requested area is too big. Please zoom in a little, or change resolution"
-msgstr "要求的區域太大。請拉近一點,或是改變解析度"
-
-msgid "Change resolution"
-msgstr "改變解析度"
-
-msgid "Reload erroneous tiles"
-msgstr "重新載入錯誤的拼貼"
-
-msgid "Alpha channel"
-msgstr "透明色版"
-
-msgid "Automatically change resolution"
-msgstr ""
-
-msgid "Set WMS Bookmark"
-msgstr "設定 WMS 書籤"
-
-msgid "Automatic downloading"
-msgstr "自動下載"
-
-msgid "Zoom to native resolution"
-msgstr ""
-
-msgid "Supported projections are: {0}"
-msgstr ""
-
-msgid "Unsupported WMS file version; found {0}, expected {1}"
-msgstr "不支援的 WMS 檔案版本;發現 {0},應為 {1}"
-
-msgid "Save WMS file"
-msgstr ""
-
-msgid "Correlate to GPX"
-msgstr "關聯到 GPX"
-
-msgid "GPX Files (*.gpx *.gpx.gz)"
-msgstr "GPX 檔案 (*.gpx *.gpx.gz)"
-
-msgid "File {0} is loaded yet under the name \"{1}\""
-msgstr "檔案 {0} 已經以「{1}」的名稱載入了。"
-
-msgid "Error while parsing {0}"
-msgstr "當解析 {0} 時發生錯誤。"
-
-msgid "Could not read \"{0}\""
-msgstr "不能讀取 \"{0}\""
-
-msgid ""
-"<html>Take a photo of your GPS receiver while it displays the "
-"time.<br>Display that photo here.<br>And then, simply capture the time you "
-"read on the photo and select a timezone<hr></html>"
-msgstr ""
-"<html>配合您的 GPS 接收器拍照,它會顯示時刻。<br>在這裡顯示照片。<br>然後,根據您讀取到的相片時刻並選擇時區<hr></html>"
-
-msgid "Photo time (from exif):"
-msgstr "相片時刻 (取自 exif):"
-
-msgid "Gps time (read from the above photo): "
-msgstr "Gps 時刻(自上列相片讀取): "
-
-msgid "I am in the timezone of: "
-msgstr "我所在的時區: "
-
-msgid "No date"
-msgstr "沒有日期"
-
-msgid "Open another photo"
-msgstr "開啟其他相片"
-
-msgid "Synchronize time from a photo of the GPS receiver"
-msgstr "從 GPS 接收器的相片同步時間"
-
-msgid ""
-"Error while parsing the date.\n"
-"Please use the requested format"
-msgstr ""
-"分析日期時發生錯誤。\n"
-"請使用要求的格式"
-
-msgid "Invalid date"
-msgstr "無效的日期"
-
-msgid "<No GPX track loaded yet>"
-msgstr "<尚未載入 GPX 軌跡>"
+msgid "<No GPX track loaded yet>"
+msgstr "<尚未載入 GPX 軌跡>"
 
 msgid "GPX track: "
 msgstr "GPX 軌跡: "
@@ -8869,24 +9061,9 @@ msgstr "時區: "
 msgid "Offset:"
 msgstr "位移:"
 
-msgid "Correlate images with GPX track"
-msgstr "將圖片與 GPX 軌跡關聯"
-
 msgid "Correlate"
 msgstr "關聯"
 
-msgid "Invalid timezone"
-msgstr "無效的時區"
-
-msgid "Invalid offset"
-msgstr "無效的移位"
-
-msgid "Try Again"
-msgstr "再試一次"
-
-msgid "No images could be matched!"
-msgstr "無法配對任何圖片!"
-
 msgid "No gpx selected"
 msgstr "尚未選擇 gpx"
 
@@ -9084,9 +9261,6 @@ msgid ""
 "GPS time: {0}"
 msgstr ""
 
-msgid "JPEG images (*.jpg)"
-msgstr "JPEG 圖片 (*.jpg)"
-
 msgid "Show thumbnails"
 msgstr ""
 
@@ -9149,9 +9323,6 @@ msgstr "公尺"
 msgid "Maximum area per request:"
 msgstr "每個要求最大區域:"
 
-msgid "sq km"
-msgstr ""
-
 msgid "Download near:"
 msgstr "下載接近:"
 
@@ -9802,15 +9973,15 @@ msgstr "關閉偏好設定視窗並放棄偏好設定的更新"
 msgid "Save the preferences and close the dialog"
 msgstr "儲存偏好設定並關閉對話盒"
 
-msgid "Download plugins"
-msgstr "下載外掛程式"
-
 msgid "You have to restart JOSM for some settings to take effect."
 msgstr "您必須重新啟動 JOSM 才能讓某些設定值生效。"
 
 msgid "Would you like to restart now?"
 msgstr ""
 
+msgid "Download plugins"
+msgstr "下載外掛程式"
+
 msgid "Icon paths:"
 msgstr "圖示路徑:"
 
@@ -10603,6 +10774,21 @@ msgstr "顯示邊界"
 msgid "No bounding box was found for this layer."
 msgstr "找不到這個圖層的綁定方塊。"
 
+msgid "1. Enter getCapabilities URL"
+msgstr ""
+
+msgid "2. Enter name for this layer"
+msgstr ""
+
+msgid "{0} cache, total cache size: {1} bytes"
+msgstr ""
+
+msgid "Cache name"
+msgstr ""
+
+msgid "Object Count"
+msgstr ""
+
 msgid "imagery fade"
 msgstr "淡化圖片"
 
@@ -10621,6 +10807,18 @@ msgstr "強烈"
 msgid "Sharpen (requires layer re-add): "
 msgstr "銳化 (需要重新加入圖層): "
 
+msgid "Tile cache directory: "
+msgstr "拼貼快取目錄: "
+
+msgid "Maximum size of disk cache (per imagery) in MB: "
+msgstr ""
+
+msgid "Maximum number of objects in memory cache: "
+msgstr ""
+
+msgid "Tiles zoom offset:"
+msgstr ""
+
 msgid "Imagery Preferences"
 msgstr "圖片偏好設定"
 
@@ -10642,6 +10840,9 @@ msgstr "圖片提供者"
 msgid "Offset bookmarks"
 msgstr "位移書籤"
 
+msgid "Cache contents"
+msgstr ""
+
 msgid "Imagery Background: Default"
 msgstr ""
 
@@ -10684,9 +10885,6 @@ msgstr "EULA 授權 URL 無法使用:{0}"
 msgid "Malformed URL for the EULA licence: {0}"
 msgstr "EULA 授權的 URL 格式錯誤:{0}"
 
-msgid "Projection"
-msgstr "投影方法"
-
 msgid "Layer"
 msgstr "層級"
 
@@ -10711,18 +10909,12 @@ msgstr "最大縮放等級: "
 msgid "Add to slippymap chooser: "
 msgstr "加入快速地圖選擇器: "
 
-msgid "Tile cache directory: "
-msgstr "拼貼快取目錄: "
-
 msgid "Maximum concurrent downloads: "
 msgstr ""
 
 msgid "Maximum concurrent downloads per host: "
 msgstr ""
 
-msgid "Maximum elements in disk cache: "
-msgstr ""
-
 msgid ""
 "That layer does not support any of JOSM''s projections,\n"
 "so you can not use it. This message will not show again."
@@ -10730,20 +10922,11 @@ msgstr ""
 "那個圖層不支援 JOSM 的任何投影法,\n"
 "因此您不能使用它。這個訊息不會再顯示。"
 
-msgid "Downloader:"
-msgstr "下載器:"
-
 msgid "Simultaneous connections:"
 msgstr ""
 
-msgid "Overlap tiles"
-msgstr "重疊拼貼"
-
-msgid "% of east:"
-msgstr "% 東:"
-
-msgid "% of north:"
-msgstr "% 北:"
+msgid "Tile size:"
+msgstr ""
 
 msgid "Auto save enabled"
 msgstr "已啟用自動儲存"
@@ -11692,6 +11875,14 @@ msgstr "套用預設組合"
 msgid "New relation"
 msgstr "新關係"
 
+msgid ""
+"The preset <i>{0}</i> cannot be applied since nothing has been selected!"
+msgstr ""
+
+msgid ""
+"The preset <i>{0}</i> cannot be applied since the selection is unsuitable!"
+msgstr ""
+
 msgid "Change {0} object"
 msgid_plural "Change {0} objects"
 msgstr[0] "改變 {0} 個物件"
@@ -11801,6 +11992,9 @@ msgstr "顯示預設組合對話盒"
 msgid "Search presets"
 msgstr "搜尋預設組合"
 
+msgid "Presets"
+msgstr "預設組合"
+
 msgid "Search for objects by preset"
 msgstr "依預設組合搜尋物件"
 
@@ -12054,6 +12248,9 @@ msgstr "<html>無法讀取檔案。<br>錯誤為:<br>{0}</html>"
 msgid "GeoJSON Files"
 msgstr "GeoJSON 檔案"
 
+msgid "Projected GeoJSON Files"
+msgstr ""
+
 msgid "Layer ''{0}'' not supported"
 msgstr ""
 
@@ -12589,6 +12786,9 @@ msgstr ""
 msgid "WMS Files (*.wms)"
 msgstr "WMS 檔案 (*.wms)"
 
+msgid "Unsupported WMS file version; found {0}, expected {1}"
+msgstr "不支援的 WMS 檔案版本;發現 {0},應為 {1}"
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. Furthermore, it is "
@@ -12977,6 +13177,19 @@ msgid_plural ""
 "are:"
 msgstr[0] "找不到外掛程式 {0} 需要的 {1} 外掛程式。缺少的外掛程式為:"
 
+msgid "Download and restart"
+msgstr ""
+
+msgid "Click to download missing plugin and restart JOSM"
+msgid_plural "Click to download missing plugins and restart JOSM"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Click to continue without this plugin"
+msgid_plural "Click to continue without these plugins"
+msgstr[0] ""
+msgstr[1] ""
+
 msgid ""
 "<html>Plugin {0} requires JOSM version {1}. The current JOSM version is "
 "{2}.<br>You have to update JOSM in order to use this plugin.</html>"
@@ -13982,6 +14195,9 @@ msgstr "更新"
 msgid "Update directory listing."
 msgstr "更新目錄清單。"
 
+msgid "View"
+msgstr "檢視"
+
 msgid "Blue:"
 msgstr "藍:"
 
@@ -14021,7 +14237,7 @@ msgstr ""
 msgid "OpenStreetMap GPS Traces"
 msgstr ""
 
-msgid "OpenStreetMap (Mapnik)"
+msgid "OpenStreetMap (Standard layer)"
 msgstr ""
 
 msgid "skobbler"
@@ -14033,9 +14249,6 @@ msgstr ""
 msgid "OpenStreetMap (Mapnik, no labels)"
 msgstr ""
 
-msgid "skobbler heatmap"
-msgstr ""
-
 msgid "OpenCycleMap"
 msgstr ""
 
@@ -14144,6 +14357,9 @@ msgstr ""
 msgid "VoGIS: Echtfarbenbild 2012 (12cm)"
 msgstr ""
 
+msgid "VoGIS: Echtfarbenbild Winter 2015 (20cm)"
+msgstr ""
+
 msgid "VoGIS: Flächenwidmungsplan"
 msgstr ""
 
@@ -14157,12 +14373,18 @@ msgid ""
 "AGIV(laanderen) aerial imagery (covers Brussels region as well) (2013)"
 msgstr ""
 
+msgid "SPW(allonie) PICC numerical imagery"
+msgstr ""
+
 msgid "SPW(allonie) 2012 aerial imagery"
 msgstr ""
 
 msgid "SPW(allonie) 2009 aerial imagery"
 msgstr ""
 
+msgid "cadastre: for names and house numbers only, bad geometry"
+msgstr ""
+
 msgid "IBGE Mapa de Setores Urbanos"
 msgstr ""
 
@@ -14199,10 +14421,16 @@ msgstr ""
 msgid "Czech pLPIS"
 msgstr ""
 
-msgid "Fugro (Denmark)"
+msgid "Geodatastyrelsen (Denmark)"
 msgstr ""
 
-msgid "Geodatastyrelsen (Denmark)"
+msgid "Geodatastyrelsen DTK Kort25"
+msgstr ""
+
+msgid "Geodatastyrelsen Skyggekort 1.6m"
+msgstr ""
+
+msgid "Geodatastyrelsen Skærmkort"
 msgstr ""
 
 msgid "Stevns (Denmark)"
@@ -14229,6 +14457,9 @@ msgstr ""
 msgid "BANO"
 msgstr ""
 
+msgid "BD Carthage"
+msgstr ""
+
 msgid "Bordeaux - 2012"
 msgstr ""
 
@@ -14253,7 +14484,7 @@ msgstr ""
 msgid "Géolittoral - Orthophotos 2000"
 msgstr ""
 
-msgid "Géolittoral V2 - Orthophotos 2010-2012"
+msgid "Géolittoral V2 - Orthophotos 2011-2014"
 msgstr ""
 
 msgid "Géolittoral - Sentiers"
@@ -14268,6 +14499,9 @@ msgstr ""
 msgid "SIG L-R - Languedoc-Roussillon 2012 - 20 cm"
 msgstr ""
 
+msgid "Route 500™©®"
+msgstr ""
+
 msgid "Toulouse - Orthophotoplan 2013"
 msgstr ""
 
@@ -14280,12 +14514,6 @@ msgstr ""
 msgid "Tours - Orthophotos 2013"
 msgstr ""
 
-msgid "Tours - Orthophotos 2008-2010"
-msgstr ""
-
-msgid "Tours - Orthophotos 2008"
-msgstr ""
-
 msgid ""
 "Vercors - Réserve naturelle des Hauts-Plateaux du Vercors - Orthophotos 1999 "
 "- 1 m"
@@ -14306,6 +14534,9 @@ msgstr ""
 msgid "Hamburg (DK5)"
 msgstr ""
 
+msgid "Bavaria (80 cm)"
+msgstr ""
+
 msgid "Bavaria (2 m)"
 msgstr ""
 
@@ -14338,10 +14569,7 @@ msgstr ""
 msgid "Maps4BW (LGL-BW, www.lgl-bw.de)"
 msgstr ""
 
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Vektor)"
-msgstr ""
-
-msgid "NRW-Atlas: Automatisierte Liegenschaftskarte (Raster)"
+msgid "NRW-Atlas: ALKIS"
 msgstr ""
 
 msgid "NRW-Atlas: Digitale GrundKarte 1:5000"
@@ -14371,73 +14599,25 @@ msgstr ""
 msgid "Ireland Bartholomew Quarter-Inch 1940"
 msgstr ""
 
-msgid "OSMIE Townlands"
-msgstr ""
-
-msgid "OSMIE EDs"
-msgstr ""
-
-msgid "OSMIE Civil Parishes"
-msgstr ""
-
-msgid "OSMIE Baronies"
-msgstr ""
-
-msgid "OSMIE Political"
-msgstr ""
-
-msgid "Ireland EEA GMES Urban Atlas"
-msgstr ""
-
-msgid "Ireland EEA CORINE 2006"
-msgstr ""
-
-msgid "Antrim Civil Parishes and Baronies"
+msgid "Ireland Civil Parishes and Baronies - Memorial Atlas"
 msgstr ""
 
 msgid "Memorial Atlas of Ireland (1901) L.J. Richards"
 msgstr ""
 
-msgid "Carlow Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Clare Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Dublin Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Fermanagh Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Galway Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Kildare Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Leitrim Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Longford Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Offaly Civil Parishes and Baronies"
-msgstr ""
-
-msgid "Sligo Civil Parishes and Baronies"
+msgid "OSMIE Townlands"
 msgstr ""
 
-msgid "Tyrone Civil Parishes and Baronies"
+msgid "OSMIE EDs"
 msgstr ""
 
-msgid "Westmeath Civil Parishes and Baronies"
+msgid "OSMIE Civil Parishes"
 msgstr ""
 
-msgid "Wexford Civil Parishes and Baronies"
+msgid "OSMIE Baronies"
 msgstr ""
 
-msgid "Wicklow Civil Parishes and Baronies"
+msgid "OSMIE Political"
 msgstr ""
 
 msgid "Lodi - Italy"
@@ -14473,6 +14653,9 @@ msgstr ""
 msgid "20cm ortho - Latvia - Coastline"
 msgstr ""
 
+msgid "1.cikla ortofotokarte - Latvia"
+msgstr ""
+
 msgid "ORT10LT (Lithuania)"
 msgstr ""
 
@@ -14488,6 +14671,9 @@ msgstr ""
 msgid "Luxembourg Inspire Roads"
 msgstr ""
 
+msgid "Luxembourg Inspire Water"
+msgstr ""
+
 msgid "Niger Delta Oct 2012 Landsat"
 msgstr ""
 
@@ -14503,9 +14689,15 @@ msgstr ""
 msgid "Geoportal 2: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Geoportal 2: Ortofotomapa (aerial image) WMTS"
+msgstr ""
+
 msgid "Geoportal 2: PRNG (geo names)"
 msgstr ""
 
+msgid "Geoportal 2: ISOK hillshade"
+msgstr ""
+
 msgid "Będzin: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
@@ -14515,15 +14707,27 @@ msgstr ""
 msgid "Bytom: Ortofotomapa 2012 (aerial image)"
 msgstr ""
 
+msgid "Bytom: Fotoplan 2014 (aerial image)"
+msgstr ""
+
 msgid "Bytom: Budynki (buildings)"
 msgstr ""
 
 msgid "Chorzów: Budynki (buildings)"
 msgstr ""
 
+msgid "Częstochowa: Budynki (buildings)"
+msgstr ""
+
 msgid "Częstochowa: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
+msgid "Częstochowa: Ortofotomapa 2013 (aerial image)"
+msgstr ""
+
+msgid "Częstochowa: Ortofotomapa 2014 (aerial image)"
+msgstr ""
+
 msgid "Gliwice: Ortofotomapa 2013 (aerial image)"
 msgstr ""
 
@@ -14533,9 +14737,45 @@ msgstr ""
 msgid "Katowice: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Katowice: Budynki (buildings)"
+msgstr ""
+
+msgid "Łódź: Budynki (buildings)"
+msgstr ""
+
 msgid "Łódź: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Powiat dębicki: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat lubaczowski: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat łańcucki: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat poznański: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat poznański: Ortofotomapa (Aerial image)"
+msgstr ""
+
+msgid "Powiat rzeszowski: Budynki (buildings)"
+msgstr ""
+
+msgid "Powiat rzeszowski: Ortofotomapa (Aerial image)"
+msgstr ""
+
+msgid "Powiat stalowowolski: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Budynki (buildings)"
+msgstr ""
+
+msgid "Przemyśl: Ortofotomapa (aerial image)"
+msgstr ""
+
 msgid "Ruda Śląska: Ortofotomapa (aerial image)"
 msgstr ""
 
@@ -14548,9 +14788,18 @@ msgstr ""
 msgid "Siemianowice Śląskie: Ortofotomapa (aerial image)"
 msgstr ""
 
+msgid "Siemianowice Śląskie: Budynki (buildings)"
+msgstr ""
+
+msgid "Świętochłowice: Ortofotomapa 2008 (aerial image)"
+msgstr ""
+
 msgid "Świętochłowice: Ortofotomapa 2009 (aerial image)"
 msgstr ""
 
+msgid "Świętochłowice: Ortofotomapa 2012 (aerial image)"
+msgstr ""
+
 msgid "Zabrze: Ortofotomapa 2011 (aerial image)"
 msgstr ""
 
@@ -14680,6 +14929,21 @@ msgstr ""
 msgid "Fiez Orthophoto 2013"
 msgstr ""
 
+msgid "Taiwan e-Map Open Data"
+msgstr ""
+
+msgid "Taiwan e-Map Open Data (with Contour Line)"
+msgstr ""
+
+msgid "Taiwan Village Boundaries"
+msgstr ""
+
+msgid "Taiwan Land-Section Data"
+msgstr ""
+
+msgid "NLSC Open Data WMTS"
+msgstr ""
+
 msgid "MSR Maps Topo"
 msgstr ""
 
@@ -14695,7 +14959,7 @@ msgstr ""
 msgid "TIGER 2012 Roads Overlay"
 msgstr ""
 
-msgid "New & Misaligned TIGER Roads (2014)"
+msgid "New & Misaligned TIGER Roads (2015)"
 msgstr ""
 
 msgid "MassGIS L3 Parcels"
@@ -15021,6 +15285,11 @@ msgid ""
 "standard commands (arc, circle etc.)"
 msgstr "實作一個命令列讓您建立自己的指令。請查閱連結以了解標準指令 (arc, circle 等.)"
 
+msgid ""
+"Provides Commons Imaging library. Not meant to be installed directly by "
+"users, but rather as a dependency for other plugins."
+msgstr ""
+
 msgid "(Warning: Experimental!) Tool for conflating (merging) data."
 msgstr ""
 
@@ -15105,11 +15374,6 @@ msgid "WMSPlugin-style imagery adjustment mapmode"
 msgstr ""
 
 msgid ""
-"This experimental plugin allows JOSM to store tile cache in database files, "
-"not in huge cache directories"
-msgstr ""
-
-msgid ""
 "Another plugin to match images to the waypoints in a GPX file. A match is "
 "made when the ''name'', ''cmt'' or ''desc'' attribute of a waypoint tag "
 "matches the filename of an image."
@@ -15165,7 +15429,7 @@ msgid ""
 "plugin."
 msgstr ""
 
-msgid "Enables user to work with pictures hosted at mapillary.com"
+msgid "Allows the user to work with pictures hosted at mapillary.com"
 msgstr ""
 
 msgid ""
@@ -15180,9 +15444,6 @@ msgstr "合併路徑重疊的部分。"
 msgid "Adds no left turn for sets of 4 or 5 ways"
 msgstr "為 4 或 5 條路徑加入禁止左轉"
 
-msgid "Simplifies download from different read-only APIs."
-msgstr ""
-
 msgid "Allows to attribute tags to all objects in any selected area at once"
 msgstr "允許在任何選取的區域中一次將所有物件加入屬性標籤"
 
@@ -15263,6 +15524,14 @@ msgid ""
 "This plugin simplifies the mapping and editing of public transport routes."
 msgstr "這個外掛程式簡化了大眾運輸路線的製圖與編輯。"
 
+msgid "Displays stops of selected public transport routes as graph"
+msgstr ""
+
+msgid ""
+"The RasterFiltersPlugin allows to choose and apply some images'' filters to "
+"some layers"
+msgstr ""
+
 msgid "Relation and multipolygon creating and editing panel."
 msgstr "關係與多重多邊形建立與編輯面板。"
 
@@ -15301,6 +15570,9 @@ msgstr "藉由移除屬於很鈍的鈍角的節點來簡化區域。這可以使
 msgid "Edit features for OpenSeaMap"
 msgstr ""
 
+msgid "Allows to draw splines"
+msgstr ""
+
 msgid ""
 "Allows to edit traffic information and export it to the urban mobility "
 "simulator SUMO"
@@ -15376,9 +15648,6 @@ msgstr "方便的下載一整組互相聯結的路徑"
 msgid "Enables searching for waypoint imported from gpx file."
 msgstr "啟用搜尋從 gpx 檔案匯入的航點。"
 
-msgid "Select a sequence of non-branching connected ways"
-msgstr "選擇非分支連接的路徑次序"
-
 msgid "Simplifies linking OSM objects to Wikipedia articles"
 msgstr "簡化連結 OSM 物件至維基百科文章"
 
@@ -15784,6 +16053,14 @@ msgid "basketball"
 msgstr ""
 
 msgctxt "sport"
+msgid "beachvolleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "billiards"
+msgstr ""
+
+msgctxt "sport"
 msgid "boules"
 msgstr ""
 
@@ -15808,10 +16085,6 @@ msgid "cricket"
 msgstr ""
 
 msgctxt "sport"
-msgid "cricket_nets"
-msgstr ""
-
-msgctxt "sport"
 msgid "croquet"
 msgstr ""
 
@@ -15828,6 +16101,10 @@ msgid "equestrian"
 msgstr ""
 
 msgctxt "sport"
+msgid "field_hockey"
+msgstr ""
+
+msgctxt "sport"
 msgid "gaelic_games"
 msgstr ""
 
@@ -15844,11 +16121,23 @@ msgid "handball"
 msgstr ""
 
 msgctxt "sport"
-msgid "hockey"
+msgid "horse_racing"
 msgstr ""
 
 msgctxt "sport"
-msgid "horse_racing"
+msgid "ice_hockey"
+msgstr ""
+
+msgctxt "sport"
+msgid "karting"
+msgstr ""
+
+msgctxt "sport"
+msgid "model_aerodrome"
+msgstr ""
+
+msgctxt "sport"
+msgid "motocross"
 msgstr ""
 
 msgctxt "sport"
@@ -15864,6 +16153,10 @@ msgid "racquet"
 msgstr ""
 
 msgctxt "sport"
+msgid "rc_car"
+msgstr ""
+
+msgctxt "sport"
 msgid "rugby_league"
 msgstr ""
 
@@ -15876,6 +16169,10 @@ msgid "running"
 msgstr ""
 
 msgctxt "sport"
+msgid "safety_training"
+msgstr ""
+
+msgctxt "sport"
 msgid "shooting"
 msgstr ""
 
@@ -15903,6 +16200,18 @@ msgctxt "sport"
 msgid "tennis"
 msgstr ""
 
+msgctxt "sport"
+msgid "volleyball"
+msgstr ""
+
+msgctxt "sport"
+msgid "9pin"
+msgstr ""
+
+msgctxt "sport"
+msgid "10pin"
+msgstr ""
+
 msgid "Fee"
 msgstr "費用"
 
@@ -16294,6 +16603,9 @@ msgstr "鄉道連絡道路"
 msgid "Unclassified"
 msgstr "未分類(Unclassified)"
 
+msgid "Street has no name"
+msgstr ""
+
 msgid "Passing Places"
 msgstr ""
 
@@ -16370,6 +16682,9 @@ msgid ""
 "to stop safely after brake failure."
 msgstr ""
 
+msgid "Raceway"
+msgstr ""
+
 msgid "Road (Unknown Type)"
 msgstr "道路(不明的類型)"
 
@@ -16907,6 +17222,12 @@ msgstr "測速照相"
 msgid "Traffic Mirror"
 msgstr "交通鏡"
 
+msgid "Highway milestone"
+msgstr ""
+
+msgid "Distance (kilometers)"
+msgstr ""
+
 msgctxt "junction=yes"
 msgid "Named Junction"
 msgstr ""
@@ -17096,8 +17417,13 @@ msgstr ""
 msgid "Avalanche Protector"
 msgstr ""
 
+msgctxt "main group"
 msgid "Water"
-msgstr "水域"
+msgstr ""
+
+msgctxt "sub group"
+msgid "Water"
+msgstr ""
 
 msgid "Drain"
 msgstr "排水溝"
@@ -17149,6 +17475,10 @@ msgstr "水庫"
 msgid "Covered Reservoir"
 msgstr "有覆蓋的水庫"
 
+msgctxt "natural"
+msgid "Water"
+msgstr ""
+
 msgid "A body of standing water, such as a lake or pond."
 msgstr ""
 
@@ -17290,6 +17620,120 @@ msgstr ""
 msgid "public"
 msgstr "公開"
 
+msgid "Marine Fuel"
+msgstr ""
+
+msgid "Agip"
+msgstr ""
+
+msgid "Aral"
+msgstr ""
+
+msgid "Avia"
+msgstr ""
+
+msgid "BP"
+msgstr ""
+
+msgid "Chevron"
+msgstr ""
+
+msgid "Citgo"
+msgstr ""
+
+msgid "Eni"
+msgstr ""
+
+msgid "Esso"
+msgstr ""
+
+msgid "Exxon"
+msgstr ""
+
+msgid "Gulf"
+msgstr ""
+
+msgid "Mobil"
+msgstr ""
+
+msgid "OMV"
+msgstr ""
+
+msgid "Petro-Canada"
+msgstr ""
+
+msgid "Pioneer"
+msgstr ""
+
+msgid "Q8"
+msgstr ""
+
+msgid "Repsol"
+msgstr ""
+
+msgid "Shell"
+msgstr ""
+
+msgid "Socar"
+msgstr ""
+
+msgid "Statoil"
+msgstr ""
+
+msgid "Sunoco"
+msgstr ""
+
+msgid "Tamoil"
+msgstr ""
+
+msgid "Texaco"
+msgstr ""
+
+msgid "Total"
+msgstr "Total"
+
+msgid "Independent"
+msgstr "Independent"
+
+msgid "Fuel types:"
+msgstr "燃料類型:"
+
+msgid "Diesel"
+msgstr "柴油"
+
+msgid "Bio Diesel"
+msgstr "生質柴油"
+
+msgid "Octane 80"
+msgstr ""
+
+msgid "Octane 91"
+msgstr ""
+
+msgid "Octane 92"
+msgstr ""
+
+msgid "Octane 95"
+msgstr ""
+
+msgid "Octane 98"
+msgstr ""
+
+msgid "Octane 100"
+msgstr ""
+
+msgid "E10 (10% Ethanol mix)"
+msgstr ""
+
+msgid "E85 (85% Ethanol mix)"
+msgstr ""
+
+msgid "LPG (Liquefied petroleum gas)"
+msgstr "LPG (液化石油氣)"
+
+msgid "CNG (Compressed Natural Gas)"
+msgstr "CNG (壓縮天然氣)"
+
 msgid "Pier"
 msgstr "渡頭"
 
@@ -17406,6 +17850,9 @@ msgstr "緩衝停止點"
 msgid "Railway Switch"
 msgstr ""
 
+msgid "Railway milestone"
+msgstr ""
+
 msgid "Aerialway"
 msgstr "空中路線"
 
@@ -17529,139 +17976,28 @@ msgstr "停車場入口"
 msgid "Fuel"
 msgstr "加油站"
 
-msgid "Agip"
-msgstr ""
+msgid "With shop"
+msgstr "附設商店"
 
-msgid "Aral"
-msgstr ""
+msgid "convenience"
+msgstr "便利商店"
 
-msgid "Avia"
+msgid "kiosk"
 msgstr ""
 
-msgid "BP"
+msgid "Diesel (Gas To Liquid - ultimate diesel)"
 msgstr ""
 
-msgid "Chevron"
+msgid "Diesel for Heavy Good Vehicles"
+msgstr "重型貨車柴油"
+
+msgid "1/25 mix (mofa/moped)"
 msgstr ""
 
-msgid "Citgo"
+msgid "1/50 mix (mofa/moped)"
 msgstr ""
 
-msgid "Eni"
-msgstr ""
-
-msgid "Esso"
-msgstr ""
-
-msgid "Exxon"
-msgstr ""
-
-msgid "Gulf"
-msgstr ""
-
-msgid "Mobil"
-msgstr ""
-
-msgid "OMV"
-msgstr ""
-
-msgid "Petro-Canada"
-msgstr ""
-
-msgid "Pioneer"
-msgstr ""
-
-msgid "Q8"
-msgstr ""
-
-msgid "Repsol"
-msgstr ""
-
-msgid "Shell"
-msgstr ""
-
-msgid "Socar"
-msgstr ""
-
-msgid "Statoil"
-msgstr ""
-
-msgid "Sunoco"
-msgstr ""
-
-msgid "Tamoil"
-msgstr ""
-
-msgid "Texaco"
-msgstr ""
-
-msgid "Total"
-msgstr "Total"
-
-msgid "Independent"
-msgstr "Independent"
-
-msgid "With shop"
-msgstr "附設商店"
-
-msgid "convenience"
-msgstr "便利商店"
-
-msgid "kiosk"
-msgstr ""
-
-msgid "Fuel types:"
-msgstr "燃料類型:"
-
-msgid "Diesel"
-msgstr "柴油"
-
-msgid "Bio Diesel"
-msgstr "生質柴油"
-
-msgid "Diesel (Gas To Liquid - ultimate diesel)"
-msgstr ""
-
-msgid "Diesel for Heavy Good Vehicles"
-msgstr "重型貨車柴油"
-
-msgid "Octane 80"
-msgstr ""
-
-msgid "Octane 91"
-msgstr ""
-
-msgid "Octane 92"
-msgstr ""
-
-msgid "Octane 95"
-msgstr ""
-
-msgid "Octane 98"
-msgstr ""
-
-msgid "Octane 100"
-msgstr ""
-
-msgid "E10 (10% Ethanol mix)"
-msgstr ""
-
-msgid "E85 (85% Ethanol mix)"
-msgstr ""
-
-msgid "LPG (Liquefied petroleum gas)"
-msgstr "LPG (液化石油氣)"
-
-msgid "CNG (Compressed Natural Gas)"
-msgstr "CNG (壓縮天然氣)"
-
-msgid "1/25 mix (mofa/moped)"
-msgstr ""
-
-msgid "1/50 mix (mofa/moped)"
-msgstr ""
-
-msgid "Fuel cards:"
+msgid "Fuel cards:"
 msgstr ""
 
 msgid "DKV"
@@ -17873,9 +18209,6 @@ msgctxt "color"
 msgid "#CD853F"
 msgstr ""
 
-msgid "route segment"
-msgstr "路線區段"
-
 msgid "stop position"
 msgstr "停車位置"
 
@@ -17894,6 +18227,9 @@ msgstr "月台(僅下車)"
 msgid "platform (entry only)"
 msgstr "月台(僅上車)"
 
+msgid "route segment"
+msgstr "路線區段"
+
 msgid "Route Master"
 msgstr ""
 
@@ -18096,6 +18432,12 @@ msgstr "旅館"
 msgid "Stars"
 msgstr "星級"
 
+msgid "Rooms"
+msgstr ""
+
+msgid "Beds"
+msgstr ""
+
 msgid "Motel"
 msgstr "汽車旅館"
 
@@ -18186,6 +18528,9 @@ msgstr "三明治"
 msgid "sushi"
 msgstr "壽司"
 
+msgid "steak_house"
+msgstr ""
+
 msgid "Microbrewery"
 msgstr ""
 
@@ -18400,6 +18745,9 @@ msgstr "三溫暖"
 msgid "Horse Riding"
 msgstr ""
 
+msgid "Casino"
+msgstr ""
+
 msgid "Brothel"
 msgstr "妓院"
 
@@ -18887,8 +19235,8 @@ msgstr "顯示氣壓"
 msgid "Shows humidity"
 msgstr "顯示溼度"
 
-msgid "Recycling"
-msgstr "資源回收"
+msgid "Recycling Container"
+msgstr ""
 
 msgid "Batteries"
 msgstr "電池"
@@ -18896,19 +19244,46 @@ msgstr "電池"
 msgid "Cans"
 msgstr "瓶罐"
 
+msgid "Cardboard"
+msgstr ""
+
+msgid "Electrical Appliances"
+msgstr ""
+
 msgid "Glass"
 msgstr "玻璃"
 
+msgid "Glass Bottles"
+msgstr ""
+
+msgid "Green Waste"
+msgstr ""
+
 msgid "Paper"
 msgstr "紙張"
 
+msgid "Plastic"
+msgstr ""
+
+msgid "Plastic Bottles"
+msgstr ""
+
+msgid "Plastic Packaging"
+msgstr ""
+
 msgid "Scrap Metal"
 msgstr "廢金屬"
 
-msgid "container"
+msgid "Shoes"
+msgstr "鞋類"
+
+msgid "Small Appliances"
 msgstr ""
 
-msgid "centre"
+msgid "Waste"
+msgstr ""
+
+msgid "Recycling Centre"
 msgstr ""
 
 msgid "Waste Basket/Trash Can"
@@ -19112,6 +19487,9 @@ msgstr "射箭"
 msgid "Track and Field Athletics"
 msgstr ""
 
+msgid "Running"
+msgstr ""
+
 msgid "Climbing"
 msgstr "攀岩"
 
@@ -19287,12 +19665,18 @@ msgstr "棒球"
 msgid "Basketball"
 msgstr "籃球"
 
+msgid "Handball"
+msgstr ""
+
 msgid "Volleyball"
 msgstr "排球"
 
 msgid "Beach Volleyball"
 msgstr ""
 
+msgid "Billiards"
+msgstr ""
+
 msgid "Golf"
 msgstr "高爾夫"
 
@@ -19308,14 +19692,14 @@ msgstr ""
 msgid "Cricket"
 msgstr ""
 
-msgid "Cricket Nets"
-msgstr ""
-
 msgid "Croquet"
 msgstr "木球"
 
-msgid "Hockey"
-msgstr "曲棍球"
+msgid "Field Hockey"
+msgstr ""
+
+msgid "Ice Hockey"
+msgstr ""
 
 msgid "Pelota"
 msgstr "回力球"
@@ -19338,9 +19722,6 @@ msgstr ""
 msgid "Motocross"
 msgstr ""
 
-msgid "Safety Training"
-msgstr ""
-
 msgid "Model Aerodrome"
 msgstr ""
 
@@ -19359,9 +19740,6 @@ msgstr ""
 msgid "RC Car"
 msgstr ""
 
-msgid "Raceway"
-msgstr ""
-
 msgid "Man Made"
 msgstr "人造物"
 
@@ -19434,6 +19812,14 @@ msgid "storage_tank"
 msgstr ""
 
 msgctxt "building"
+msgid "supermarket"
+msgstr ""
+
+msgctxt "building"
+msgid "gasometer"
+msgstr ""
+
+msgctxt "building"
 msgid "cowshed"
 msgstr ""
 
@@ -20754,9 +21140,6 @@ msgstr ""
 msgid "Boutique"
 msgstr ""
 
-msgid "Shoes"
-msgstr "鞋類"
-
 msgid "Outdoor"
 msgstr "戶外用品"
 
@@ -21769,12 +22152,12 @@ msgstr ""
 msgid "Contact (Common Schema)"
 msgstr ""
 
-msgid "Fax Number"
-msgstr "傳真號碼"
-
 msgid "Email Address"
 msgstr "電子郵件位址"
 
+msgid "Fax Number"
+msgstr "傳真號碼"
+
 msgid "Image"
 msgstr "圖片"
 
@@ -22199,6 +22582,9 @@ msgstr ""
 msgid "{0} together with addr:*"
 msgstr ""
 
+msgid "{0} together with {1} and conflicting values"
+msgstr ""
+
 msgid "{0} on suspicious object"
 msgstr ""
 
@@ -22223,6 +22609,18 @@ msgstr ""
 msgid "incomplete usage of {0} on a way without {1}"
 msgstr ""
 
+msgid "Same value of {0} and {1}"
+msgstr ""
+
+msgid "Same value of {0}, {1} and {2}"
+msgstr ""
+
+msgid "{0} and {1} together with {2} and conflicting values"
+msgstr ""
+
+msgid "Suspicious tag combination: {0} and {1}"
+msgstr ""
+
 msgid "{0}={1} is deprecated"
 msgstr ""
 
@@ -22283,6 +22681,9 @@ msgstr ""
 msgid "uncommon short key"
 msgstr ""
 
+msgid "{0} is inaccurate"
+msgstr ""
+
 msgid "{0} on a node. Should be used on a way."
 msgstr ""
 
@@ -22373,9 +22774,18 @@ msgid ""
 "{0}: meters is default; period is separator; if units, put space then unit"
 msgstr ""
 
+msgid ""
+"{0}: tonne is default; period is separator; if units, put space then unit"
+msgstr ""
+
 msgid "unusual {0} format"
 msgstr ""
 
+msgid ""
+"{0}: kilometers is default; period is separator; if units, put space then "
+"unit"
+msgstr ""
+
 msgid "voltage should be in volts with no units/delimiter/spaces"
 msgstr ""
 
@@ -22426,16 +22836,16 @@ msgstr "節點具有重複的路徑標籤"
 
 msgid ""
 "no wikipedia-language given, use ''wikipedia''=''language:page title''"
-msgstr ""
+msgstr "沒有指定維基百科語言,請使用\"wikipedia\"=\"語言代碼:頁面標題\""
 
 msgid "unknown language prefix in wikipedia tag"
-msgstr ""
+msgstr "維基百科標籤後綴是未知的語言代碼"
 
 msgid "deprecated format for wikipedia tag"
-msgstr ""
+msgstr "棄用的維基百科標籤格式"
 
 msgid "''wikipedia''=''language:page title''"
-msgstr ""
+msgstr "\"wikipedia\"=\"語言代碼:頁面標題\""
 
 msgid "Hide icons at low zoom"
 msgstr ""
@@ -22745,6 +23155,9 @@ msgstr ""
 msgid "Add fixed points on spacebar"
 msgstr ""
 
+msgid "Allow edit existing ways"
+msgstr ""
+
 msgid "Draw closed polygons only"
 msgstr ""
 
@@ -22799,9 +23212,6 @@ msgstr ""
 msgid "min distance={0} px ({1} m)"
 msgstr ""
 
-msgid "Convert way to FastDraw line"
-msgstr ""
-
 msgid "Eps={0}, {1} points, {2} p/km"
 msgstr ""
 
@@ -23578,47 +23988,56 @@ msgid ""
 "report, so we can find the source of the issue."
 msgstr ""
 
-msgid "Area detection algorithm settings."
+msgid "Area Selector - Preferences"
 msgstr ""
 
-msgid "Algorithm Settings"
+msgid "Settings for the area detection algorithm."
 msgstr ""
 
-msgid ""
-"The color threshold defines how far the color can be of the original color "
-"to be selected (Default: {0})."
+msgid "Boofcv - high resolution images"
 msgstr ""
 
-msgid "Color Threshold"
+msgid "Custom - low resolution images"
 msgstr ""
 
 msgid ""
-"Maximum distance away each point in the sequence can be from a line, in "
-"pixels (Default: {0})."
+"Choose wich algorithm should be used. \"Auto\" tries to find an area with "
+"Boofcv and uses the custom algorithm as a fallback."
 msgstr ""
 
-msgid "Tolerance Distance"
+msgid "Algorithm"
 msgstr ""
 
-msgid "Tolerance for fitting angles, in radians (Default {0})."
+msgid ""
+"Maximum pixels a point can be away from a line and still be considered as a "
+"member of this line (Default: {0})."
 msgstr ""
 
-msgid "Tolerance Angle"
+msgid "Distance Tolerance"
 msgstr ""
 
-msgid "Plugin Settings"
+msgid ""
+"Lines with a smaller angle (degrees) than this will be combined to one line "
+"(Default {0})."
 msgstr ""
 
-msgid "Show Address Dialog after mapping an area"
+msgid "Angle Tolerance"
 msgstr ""
 
-msgid "show address dialog"
+msgid ""
+"The color threshold defines how much a color may differ from the selected "
+"color. The red, green and blue values must be in the range of (selected - "
+"threshold) to (selected + threshold). (Default: {0})."
 msgstr ""
 
-msgid "Merge nodes with neighbors"
+msgid "Color Threshold"
 msgstr ""
 
-msgid "merge nodes"
+msgid "Use HSV based algorithm"
+msgstr ""
+
+msgid ""
+"Use hue and saturation instead of RGB distinction to select matching colors."
 msgstr ""
 
 msgid "How often thinning operation should be applied (Default {0})."
@@ -23627,10 +24046,22 @@ msgstr ""
 msgid "Thinning Iterations"
 msgstr ""
 
-msgid "Use hue and saturation instead of RGB distinction"
+msgid "show address dialog"
+msgstr ""
+
+msgid "Show Address Dialog after mapping an area"
 msgstr ""
 
-msgid "use HSV based algorithm"
+msgid "merge nodes"
+msgstr ""
+
+msgid "Merge nodes with existing nodes"
+msgstr ""
+
+msgid "Debug"
+msgstr ""
+
+msgid "Debugging mode will write images for each processing step."
 msgstr ""
 
 msgid "Street Name:"
@@ -24260,6 +24691,9 @@ msgstr ""
 msgid "Reset offset (only vector images)"
 msgstr ""
 
+msgid "Blank Layer"
+msgstr "空白圖層"
+
 msgid "WMS layer ({0}), {1} tile(s) loaded"
 msgstr "WMS 圖層 ({0}),已載入 {1} 個拼貼"
 
@@ -25563,182 +25997,488 @@ msgstr "陸地"
 msgid "Maximum number of segments per way"
 msgstr "每路徑的最大區段數"
 
-msgid "Maximum number of nodes in initial trace"
-msgstr "初始化軌跡的最大節點數"
+msgid "Maximum number of nodes in initial trace"
+msgstr "初始化軌跡的最大節點數"
+
+msgid "Maximum gray value to count as water (0-255)"
+msgstr "判斷為水域的最大灰色值 (0-255)"
+
+msgid "Line simplification accuracy (degrees)"
+msgstr "線條簡化準確度(度)"
+
+msgid "Resolution of Landsat tiles (pixels per degree)"
+msgstr "Landsat 拼貼的解析度(每一度的像素)"
+
+msgid "Size of Landsat tiles (pixels)"
+msgstr "Landsat 拼貼的大小(像素)"
+
+msgid "Shift all traces to east (degrees)"
+msgstr "所有軌跡向東平移(度)"
+
+msgid "Shift all traces to north (degrees)"
+msgstr "所有軌跡向北平移(度)"
+
+msgid "Direction to search for land"
+msgstr "搜尋陸地的方向"
+
+msgid "Tag ways as"
+msgstr "將路徑標記為"
+
+msgid "WMS Layer"
+msgstr "WMS 圖層"
+
+msgid "Maximum cache size (MB)"
+msgstr "最大快取大小 (MB)"
+
+msgid "Maximum cache age (days)"
+msgstr "最大快取留存時間(天)"
+
+msgid "Source text"
+msgstr "來源文字"
+
+msgid "Lakewalker Plugin Preferences"
+msgstr "Lakewalker 外掛程式偏好設定"
+
+msgid "A plugin to trace water bodies on Landsat imagery."
+msgstr "用來追蹤 Landsat 圖庫中水域的外掛程式。"
+
+msgid ""
+"Maximum number of segments allowed in each generated way. Default 250."
+msgstr "在每個產生的路徑中允許的最大區段數。預設為 250。"
+
+msgid ""
+"Maximum number of nodes to generate before bailing out (before simplifying "
+"lines). Default 50000."
+msgstr "在簡化線條前產生最大的節點數目。預設值為 50000。"
+
+msgid ""
+"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
+"in the range 0-255. Default 90."
+msgstr "被認定為水域的最大灰色數值(基於 Landsat IR-1 資料。可以是範圍 0-255。預設值為 90。"
+
+msgid ""
+"Accuracy of Douglas-Peucker line simplification, measured in "
+"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
+"0.0003."
+msgstr ""
+"Douglas-Peucker 線條簡化的準確度,以度為測量單位。<br>較低的數值會產生較多的節點,和更準確的線條。預設值為 0.0003。"
+
+msgid ""
+"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
+msgstr "Landsat 拼貼的解析度,以每一度像素為測量單位。預設值為 4000。"
+
+msgid "Size of one landsat tile, measured in pixels. Default 2000."
+msgstr "一個 landsat 拼貼的大小,以像素為測量單位。預設值為 2000。"
+
+msgid "Offset all points in East direction (degrees). Default 0."
+msgstr "所有點向東方移位(度)。預設值為 0。"
+
+msgid "Offset all points in North direction (degrees). Default 0."
+msgstr "所有點向北方移位(度)。預設值為 0。"
+
+msgid "Direction to search for land. Default east."
+msgstr "搜尋陸地方向。預設值為東方。"
+
+msgid "Tag ways as water, coastline, land or nothing. Default is water."
+msgstr "將路徑加上標籤成為水域、海岸線、陸地或都不是。預設值為水域。"
+
+msgid "Which WMS layer to use for tracing against. Default is IR1."
+msgstr "再次追蹤時要使用的 WMS 圖層。預設值為 IR1。"
+
+msgid "Maximum size of each cache directory in bytes. Default is 300MB"
+msgstr "每個快取目錄的最大容量(位元組)。預設值為 300MB"
+
+msgid "Maximum age of each cached file in days. Default is 100"
+msgstr "每個快取檔案留存的最大天數。預設值為 100"
+
+msgid "Data source text. Default is Landsat."
+msgstr "資料來源文字。預設值為 Landsat。"
+
+msgid "Downloading image tile..."
+msgstr "正在下載圖片拼貼..."
+
+msgid "Could not acquire image"
+msgstr "無法擷取圖片"
+
+msgid "Connection Failed"
+msgstr "連線失敗"
+
+msgid "Not connected"
+msgstr "未連線"
+
+msgid "Connecting"
+msgstr "正在連線"
+
+msgid "Connected"
+msgstr "已連線"
+
+msgid "no name"
+msgstr "沒有名稱"
+
+msgid "Live GPS"
+msgstr "Live GPS"
+
+msgid "Show GPS data."
+msgstr "顯示 GPS 資料。"
+
+msgid "Status"
+msgstr "狀態"
+
+msgid "Way Info"
+msgstr "路徑資訊"
+
+msgid "Speed"
+msgstr "速度"
+
+msgid "Course"
+msgstr "道路"
+
+msgid "LiveGPS layer"
+msgstr "LiveGPS 圖層"
+
+msgid "Capture GPS Track"
+msgstr "擷取 GPS 軌跡"
+
+msgid "Connect to gpsd server and show current position in LiveGPS layer."
+msgstr "連線至 gpsd 伺服器並在 LiveGPS 圖層中顯示目前的位置。"
+
+msgid "Center Once"
+msgstr "置中一次"
+
+msgid "Center the LiveGPS layer to current position."
+msgstr "將 LiveGPS 圖層置中於目前的位置。"
+
+msgid "Auto-Center"
+msgstr "自動置中"
+
+msgid "Continuously center the LiveGPS layer to current position."
+msgstr "持續將 LiveGPS 圖層置中到目前的位置。"
+
+msgid "Open MapDust"
+msgstr "開啟 MapDust"
+
+msgid "MapDust bug reports"
+msgstr ""
+
+msgid "Activates the MapDust bug reporter plugin"
+msgstr ""
+
+msgid "Missing input data"
+msgstr "缺少輸入資料"
+
+msgid "Mapillary Images"
+msgstr ""
+
+msgid "Mapillary layer"
+msgstr ""
+
+msgid "Total images:"
+msgstr ""
+
+msgid "images"
+msgstr ""
+
+msgid "Mapillary"
+msgstr ""
+
+msgid "Create Mapillary layer"
+msgstr ""
+
+msgid "Start Mapillary layer"
+msgstr ""
+
+msgid "Download Mapillary images in current view"
+msgstr ""
+
+msgid "Export pictures"
+msgstr ""
+
+msgid "Export Mapillary pictures"
+msgstr ""
+
+msgid "Export images"
+msgstr ""
+
+msgid "Import pictures"
+msgstr ""
+
+msgid "Import local pictures"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer"
+msgstr ""
+
+msgid "Select pictures"
+msgstr ""
+
+msgid "Import pictures into sequence"
+msgstr ""
+
+msgid "Import pictures into Mapillary layer in a sequence"
+msgstr ""
+
+msgid "Join mode"
+msgstr ""
+
+msgid "Join/unjoin pictures"
+msgstr ""
+
+msgid "Join Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures"
+msgstr ""
+
+msgid "Upload Mapillary pictures"
+msgstr ""
+
+msgid "Upload pictures."
+msgstr ""
+
+msgid "Walk mode"
+msgstr ""
+
+msgid "Start walk mode"
+msgstr ""
+
+msgid "Zoom to selected image"
+msgstr ""
+
+msgid "Zoom to the currently selected Mapillary image"
+msgstr ""
+
+msgid "Uploaded {0} images"
+msgstr ""
+
+msgid "Approve upload on the website"
+msgstr ""
+
+msgid "View in website"
+msgstr ""
+
+msgid "Copy key"
+msgstr ""
+
+msgid "Copy key tag"
+msgstr ""
+
+msgid "Edit on website"
+msgstr ""
+
+msgid "Export all images"
+msgstr ""
+
+msgid "Export selected sequence"
+msgstr ""
+
+msgid "Export selected images"
+msgstr ""
+
+msgid "Rewrite imported images"
+msgstr ""
+
+msgid "Select a folder"
+msgstr ""
+
+msgid "Explore"
+msgstr ""
+
+msgid "Select a directory"
+msgstr ""
+
+msgid "Speed limit"
+msgstr ""
+
+msgid "Give way"
+msgstr ""
+
+msgid "No entry"
+msgstr ""
+
+msgid "Intersection danger"
+msgstr ""
+
+msgid "Mandatory direction (any)"
+msgstr ""
+
+msgid "No turn"
+msgstr ""
 
-msgid "Maximum gray value to count as water (0-255)"
-msgstr "判斷為水域的最大灰色值 (0-255)"
+msgid "Uneven road"
+msgstr ""
 
-msgid "Line simplification accuracy (degrees)"
-msgstr "線條簡化準確度(度)"
+msgid "No parking"
+msgstr ""
 
-msgid "Resolution of Landsat tiles (pixels per degree)"
-msgstr "Landsat 拼貼的解析度(每一度的像素)"
+msgid "No overtaking"
+msgstr ""
 
-msgid "Size of Landsat tiles (pixels)"
-msgstr "Landsat 拼貼的大小(像素)"
+msgid "Pedestrian crossing"
+msgstr ""
 
-msgid "Shift all traces to east (degrees)"
-msgstr "所有軌跡向東平移(度)"
+msgid "Years"
+msgstr ""
 
-msgid "Shift all traces to north (degrees)"
-msgstr "所有軌跡向北平移(度)"
+msgid "Months"
+msgstr ""
 
-msgid "Direction to search for land"
-msgstr "搜尋陸地的方向"
+msgid "Days"
+msgstr ""
 
-msgid "Tag ways as"
-msgstr "將路徑標記為"
+msgid "Mapillary filter"
+msgstr ""
 
-msgid "WMS Layer"
-msgstr "WMS 圖層"
+msgid "Open Mapillary filter dialog"
+msgstr ""
 
-msgid "Maximum cache size (MB)"
-msgstr "最大快取大小 (MB)"
+msgid "Downloaded images"
+msgstr ""
 
-msgid "Maximum cache age (days)"
-msgstr "最大快取留存時間(天)"
+msgid "Only images with signs"
+msgstr ""
 
-msgid "Source text"
-msgstr "來源文字"
+msgid "Choose signs"
+msgstr ""
 
-msgid "Lakewalker Plugin Preferences"
-msgstr "Lakewalker 外掛程式偏好設定"
+msgid "Mapillary history"
+msgstr ""
 
-msgid "A plugin to trace water bodies on Landsat imagery."
-msgstr "用來追蹤 Landsat 圖庫中水域的外掛程式。"
+msgid "Open Mapillary history dialog"
+msgstr ""
 
-msgid ""
-"Maximum number of segments allowed in each generated way. Default 250."
-msgstr "在每個產生的路徑中允許的最大區段數。預設為 250。"
+msgid "Open Mapillary window"
+msgstr ""
 
-msgid ""
-"Maximum number of nodes to generate before bailing out (before simplifying "
-"lines). Default 50000."
-msgstr "在簡化線條前產生最大的節點數目。預設值為 50000。"
+msgid "Mapillary dialog"
+msgstr ""
 
-msgid ""
-"Maximum gray value to accept as water (based on Landsat IR-1 data). Can be "
-"in the range 0-255. Default 90."
-msgstr "被認定為水域的最大灰色數值(基於 Landsat IR-1 資料。可以是範圍 0-255。預設值為 90。"
+msgid "Open Mapillary main dialog"
+msgstr ""
 
-msgid ""
-"Accuracy of Douglas-Peucker line simplification, measured in "
-"degrees.<br>Lower values give more nodes, and more accurate lines. Default "
-"0.0003."
+msgid "Next picture"
 msgstr ""
-"Douglas-Peucker 線條簡化的準確度,以度為測量單位。<br>較低的數值會產生較多的節點,和更準確的線條。預設值為 0.0003。"
 
-msgid ""
-"Resolution of Landsat tiles, measured in pixels per degree. Default 4000."
-msgstr "Landsat 拼貼的解析度,以每一度像素為測量單位。預設值為 4000。"
+msgid "Shows the next picture in the sequence"
+msgstr ""
 
-msgid "Size of one landsat tile, measured in pixels. Default 2000."
-msgstr "一個 landsat 拼貼的大小,以像素為測量單位。預設值為 2000。"
+msgid "Previous picture"
+msgstr ""
 
-msgid "Offset all points in East direction (degrees). Default 0."
-msgstr "所有點向東方移位(度)。預設值為 0。"
+msgid "Shows the previous picture in the sequence"
+msgstr ""
 
-msgid "Offset all points in North direction (degrees). Default 0."
-msgstr "所有點向北方移位(度)。預設值為 0。"
+msgid "Jump to red"
+msgstr ""
 
-msgid "Direction to search for land. Default east."
-msgstr "搜尋陸地方向。預設值為東方。"
+msgid "Jumps to the picture at the other side of the red line"
+msgstr ""
 
-msgid "Tag ways as water, coastline, land or nothing. Default is water."
-msgstr "將路徑加上標籤成為水域、海岸線、陸地或都不是。預設值為水域。"
+msgid "Jump to blue"
+msgstr ""
 
-msgid "Which WMS layer to use for tracing against. Default is IR1."
-msgstr "再次追蹤時要使用的 WMS 圖層。預設值為 IR1。"
+msgid "Jumps to the picture at the other side of the blue line"
+msgstr ""
 
-msgid "Maximum size of each cache directory in bytes. Default is 300MB"
-msgstr "每個快取目錄的最大容量(位元組)。預設值為 300MB"
+msgid "Stops the walk."
+msgstr ""
 
-msgid "Maximum age of each cached file in days. Default is 100"
-msgstr "每個快取檔案留存的最大天數。預設值為 100"
+msgid "Play"
+msgstr ""
 
-msgid "Data source text. Default is Landsat."
-msgstr "資料來源文字。預設值為 Landsat。"
+msgid "Continues with the paused walk."
+msgstr ""
 
-msgid "Downloading image tile..."
-msgstr "正在下載圖片拼貼..."
+msgid "Pause"
+msgstr ""
 
-msgid "Could not acquire image"
-msgstr "無法擷取圖片"
+msgid "Pauses the walk."
+msgstr ""
 
-msgid "Connection Failed"
-msgstr "連線失敗"
+msgid "Reverse buttons position when displaying images."
+msgstr ""
 
-msgid "Not connected"
-msgstr "未連線"
+msgid "Display hour when the picture was taken"
+msgstr ""
 
-msgid "Connecting"
-msgstr "正在連線"
+msgid "Use 24 hour format"
+msgstr ""
 
-msgid "Connected"
-msgstr "已連線"
+msgid "Move to picture''s location with next/previous buttons"
+msgstr ""
 
-msgid "no name"
-msgstr "沒有名稱"
+msgid "Download mode: "
+msgstr ""
 
-msgid "Live GPS"
-msgstr "Live GPS"
+msgid "Upload selected sequence"
+msgstr ""
 
-msgid "Show GPS data."
-msgstr "顯示 GPS 資料。"
+msgid "Delete after upload"
+msgstr ""
 
-msgid "Status"
-msgstr "狀態"
+msgid "Wait for full quality pictures"
+msgstr ""
 
-msgid "Way Info"
-msgstr "路徑資訊"
+msgid "Follow selected image"
+msgstr ""
 
-msgid "Speed"
-msgstr "速度"
+msgid "Go forward"
+msgstr ""
 
-msgid "Course"
-msgstr "道路"
+msgid "Deleted {0} image"
+msgid_plural "Deleted {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "LiveGPS layer"
-msgstr "LiveGPS 圖層"
+msgid "Imported {0} image"
+msgid_plural "Imported {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Capture GPS Track"
-msgstr "擷取 GPS 軌跡"
+msgid "2 images joined"
+msgstr ""
 
-msgid "Connect to gpsd server and show current position in LiveGPS layer."
-msgstr "連線至 gpsd 伺服器並在 LiveGPS 圖層中顯示目前的位置。"
+msgid "Moved {0} image"
+msgid_plural "Moved {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Center Once"
-msgstr "置中一次"
+msgid "Turned {0} image"
+msgid_plural "Turned {0} images"
+msgstr[0] ""
+msgstr[1] ""
 
-msgid "Center the LiveGPS layer to current position."
-msgstr "將 LiveGPS 圖層置中於目前的位置。"
+msgid "2 images unjoined"
+msgstr ""
 
-msgid "Auto-Center"
-msgstr "自動置中"
+msgid ""
+"The downloaded OSM area is too big. Download mode has been changed to "
+"semiautomatic until the layer is restarted."
+msgstr ""
 
-msgid "Continuously center the LiveGPS layer to current position."
-msgstr "持續將 LiveGPS 圖層置中到目前的位置。"
+msgid "Downloading"
+msgstr ""
 
-msgid "Open MapDust"
-msgstr "開啟 MapDust"
+msgid "Select mode"
+msgstr ""
 
-msgid "MapDust bug reports"
+msgid ""
+"<html><head><title>Mapillary login</title></head><body>Login successful, "
+"return to JOSM.</body></html>"
 msgstr ""
 
-msgid "Activates the MapDust bug reporter plugin"
+msgid "Downloading Mapillary images"
 msgstr ""
 
-msgid "Missing input data"
-msgstr "缺少輸入資料"
+msgid "Total Mapillary images: {0}"
+msgstr ""
 
-msgid "Mapillary"
+msgid "No images found"
 msgstr ""
 
-msgid "Create Mapillary layer."
+msgid "Finished upload"
 msgstr ""
 
-msgid "Export"
+msgid "Uploading: {0}"
 msgstr ""
 
 msgid "Measured values"
@@ -25759,6 +26499,9 @@ msgstr "選擇區域長度"
 msgid "Selection Area"
 msgstr "選擇區域"
 
+msgid "Selection Radius"
+msgstr ""
+
 msgid "Angle"
 msgstr "角度"
 
@@ -25817,47 +26560,6 @@ msgstr "建立密西根左轉彎限制"
 msgid "Unable to find via nodes. Please check your selection"
 msgstr "無法透過節點找到。請檢查您的選擇區域"
 
-msgid ""
-"XAPI query, e.g., '''' (to download all data), ''[highway=*]'', or "
-"''[[network=VRR][ref=603|613]''"
-msgstr ""
-
-msgid "Download from OSM mirror..."
-msgstr ""
-
-msgid "This XAPI query seems to be invalid, please doublecheck"
-msgstr ""
-
-msgid "Object type: "
-msgstr ""
-
-msgid "OSM object type to download (''*'' stands for any)"
-msgstr ""
-
-msgid "XAPI query: "
-msgstr ""
-
-msgid "Download from Overpass API ..."
-msgstr ""
-
-msgid "Download map data from Overpass API server."
-msgstr ""
-
-msgid "Overpass query: "
-msgstr ""
-
-msgid "Select OSM mirror URL"
-msgstr "選取 OSM 鏡射網址"
-
-msgid "Select OSM mirror URL to download from."
-msgstr ""
-
-msgid "Base URL"
-msgstr ""
-
-msgid "Enforce meta data"
-msgstr ""
-
 msgid "About Plugin"
 msgstr "關於外掛程式"
 
@@ -26090,6 +26792,9 @@ msgstr ""
 msgid "Perform diff between current data set and existing OSM data."
 msgstr ""
 
+msgid "Tools"
+msgstr "工具"
+
 msgid "Open tools menu for this data."
 msgstr ""
 
@@ -27307,6 +28012,27 @@ msgstr ""
 msgid "Public Transport: Edit waypoint name"
 msgstr ""
 
+msgid "Public transport routes"
+msgstr ""
+
+msgid "Toggle direction arrows"
+msgstr ""
+
+msgid "Toggle reference labels"
+msgstr ""
+
+msgid "Visualize public transport routes"
+msgstr ""
+
+msgid "Filters"
+msgstr ""
+
+msgid "Choose Filter"
+msgstr ""
+
+msgid "JSlider initialization error. Make sure your meta-inf is correct."
+msgstr ""
+
 msgid "Relation Toolbox"
 msgstr "關係工具箱"
 
@@ -27478,6 +28204,9 @@ msgstr ""
 msgid "It is not allowed to revert changeset from {0}"
 msgstr ""
 
+msgid "Downloading objects history"
+msgstr ""
+
 msgid "Missing merge target for {0} with id {1}"
 msgstr "缺少 id {1} {0} 的合併目標"
 
@@ -27487,6 +28216,9 @@ msgstr "物件歷史紀錄"
 msgid "History reverter"
 msgstr "歷史紀錄還原"
 
+msgid "Tool: Display objects history dialog"
+msgstr ""
+
 msgid "Preparing history data..."
 msgstr "正在準備歷史紀錄資料..."
 
@@ -27667,6 +28399,9 @@ msgstr "{0} 的新數值"
 msgid "Preference ''{0}'' missing. Cannot initialize SdsApi."
 msgstr ""
 
+msgid "Proxy Authentication Required"
+msgstr ""
+
 msgid ""
 "<html><body><p class=\"warning-body\"><strong>Warning:</strong> The password "
 "is stored in plain text in the JOSM preferences file. </p></body></html>"
@@ -27845,6 +28580,39 @@ msgstr ""
 msgid "SeaMap Editor"
 msgstr "海圖編輯器"
 
+msgid "Spline drawing"
+msgstr ""
+
+msgid "Draw a spline curve"
+msgstr ""
+
+msgid "Spline goes outside of the world."
+msgstr ""
+
+msgid "Add an existing node to spline: {0}"
+msgstr ""
+
+msgid "Add a new node to spline: {0}"
+msgstr ""
+
+msgid "Delete spline node {0}"
+msgstr ""
+
+msgid "Finish spline"
+msgstr ""
+
+msgid "Splines"
+msgstr ""
+
+msgid "Spline drawing preferences"
+msgstr ""
+
+msgid "Curve steps"
+msgstr ""
+
+msgid "Undelete node {0}"
+msgstr ""
+
 msgid "OSM Export"
 msgstr ""
 
@@ -27854,6 +28622,9 @@ msgstr ""
 msgid "SUMO Export"
 msgstr ""
 
+msgid "Export"
+msgstr ""
+
 msgid "AutoSave LiveData"
 msgstr "自動儲存即時資料"
 
@@ -28090,9 +28861,6 @@ msgstr ""
 msgid "Parameter for server request"
 msgstr ""
 
-msgid "Tile size:"
-msgstr ""
-
 msgid "Resolution:"
 msgstr ""
 
@@ -29590,15 +30358,12 @@ msgstr "航點搜尋"
 msgid "Search after waypoint. Click and move the map view to the waypoint."
 msgstr "搜尋航點。點選並將地圖檢視移動到航點。"
 
-msgid "Way Select"
-msgstr "路徑選擇"
-
 msgid "Add names from Wikipedia"
 msgstr "從維基百科加入名稱"
 
 msgid ""
 "Fetches interwiki links from Wikipedia in order to add several name tags"
-msgstr ""
+msgstr "從維基百科內部連結增加名稱標籤"
 
 msgid ""
 "Copies the {0} template to the system clipboard instantiated with the "
diff --git a/images/Mf_closedway.png b/images/Mf_closedway.png
deleted file mode 100644
index 0082bf3..0000000
Binary files a/images/Mf_closedway.png and /dev/null differ
diff --git a/images/Mf_closedway.svg b/images/Mf_closedway.svg
new file mode 100644
index 0000000..5d23d57
--- /dev/null
+++ b/images/Mf_closedway.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="20px" height="20px">
+  <path d="m.5,1.5a1,1 0 0 1 1,-1h17a1,1 0 0 1 1,1v17a1,1 0 0 1 -1,1h-17a1,1 0 0 1 -1,-1z" fill="#fff" stroke="#6e6e6e"/>
+  <path d="m14,3 -11,7 14,7" fill="#cec"/>
+  <circle cx="16" cy="16" r="2"/>
+  <circle cx="14" cy="4" r="2"/>
+  <circle cx="4" cy="10" r="2"/>
+</svg>
diff --git a/images/Mf_node.png b/images/Mf_node.png
deleted file mode 100644
index c6e1fc8..0000000
Binary files a/images/Mf_node.png and /dev/null differ
diff --git a/images/Mf_node.svg b/images/Mf_node.svg
new file mode 100644
index 0000000..eaa1771
--- /dev/null
+++ b/images/Mf_node.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="20px" height="20px">
+  <path d="m.5,1.5a1,1 0 0 1 1,-1h17a1,1 0 0 1 1,1v17a1,1 0 0 1 -1,1h-17a1,1 0 0 1 -1,-1z" fill="#fff" stroke="#6e6e6e"/>
+  <circle cx="10" cy="10" r="2" fill="#f88" stroke="#000"/>
+</svg>
diff --git a/images/Mf_relation.png b/images/Mf_relation.png
deleted file mode 100644
index 6a6d0bb..0000000
Binary files a/images/Mf_relation.png and /dev/null differ
diff --git a/images/Mf_relation.svg b/images/Mf_relation.svg
new file mode 100644
index 0000000..75be276
--- /dev/null
+++ b/images/Mf_relation.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="20px" height="20px">
+  <path d="m.5,1.5a1,1 0 0 1 1,-1h17a1,1 0 0 1 1,1v17a1,1 0 0 1 -1,1h-17a1,1 0 0 1 -1,-1z" fill="#fff" stroke="#6e6e6e"/>
+  <path d="m4,10 12,6" stroke="#ece" stroke-width="2"/>
+  <circle cx="16" cy="16" r="2"/>
+  <circle cx="14" cy="4" r="2"/>
+  <circle cx="4" cy="10" r="2"/>
+</svg>
diff --git a/images/Mf_way.png b/images/Mf_way.png
deleted file mode 100644
index 4eac8c4..0000000
Binary files a/images/Mf_way.png and /dev/null differ
diff --git a/images/Mf_way.svg b/images/Mf_way.svg
new file mode 100644
index 0000000..1f927af
--- /dev/null
+++ b/images/Mf_way.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="20px" height="20px">
+  <path d="m.5,1.5a1,1 0 0 1 1,-1h17a1,1 0 0 1 1,1v17a1,1 0 0 1 -1,1h-17a1,1 0 0 1 -1,-1z" fill="#fff" stroke="#6e6e6e"/>
+  <path d="m14,4 -10,6 12,6" fill="none" stroke="#ade" stroke-width="2"/>
+  <circle cx="16" cy="16" r="2"/>
+  <circle cx="14" cy="4" r="2"/>
+  <circle cx="4" cy="10" r="2"/>
+</svg>
diff --git a/images/audio-back.png b/images/audio-back.png
deleted file mode 100644
index 7f79796..0000000
Binary files a/images/audio-back.png and /dev/null differ
diff --git a/images/audio-back.svg b/images/audio-back.svg
new file mode 100644
index 0000000..73be4ba
--- /dev/null
+++ b/images/audio-back.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="24px" height="24px">
+  <path d="m4,12 8,-5v5l8,-5v10l-8,-5v5z"/>
+</svg>
diff --git a/images/audio-faster.png b/images/audio-faster.png
deleted file mode 100644
index a006f20..0000000
Binary files a/images/audio-faster.png and /dev/null differ
diff --git a/images/audio-faster.svg b/images/audio-faster.svg
new file mode 100644
index 0000000..b82f7a0
--- /dev/null
+++ b/images/audio-faster.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="24px" height="24px">
+  <path d="m0,7 8,5v-5l8,5v-5l8,5l-8,5v-5l-8,5v-5l-8,5z"/>
+</svg>
diff --git a/images/audio-fwd.png b/images/audio-fwd.png
deleted file mode 100644
index 8550ebf..0000000
Binary files a/images/audio-fwd.png and /dev/null differ
diff --git a/images/audio-fwd.svg b/images/audio-fwd.svg
new file mode 100644
index 0000000..164e6c9
--- /dev/null
+++ b/images/audio-fwd.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="24px" height="24px">
+  <path d="m4,7 8,5v-5l8,5 -8,5v-5l-8,5z"/>
+</svg>
diff --git a/images/audio-next.png b/images/audio-next.png
deleted file mode 100644
index be724f4..0000000
Binary files a/images/audio-next.png and /dev/null differ
diff --git a/images/audio-next.svg b/images/audio-next.svg
new file mode 100644
index 0000000..ca5032e
--- /dev/null
+++ b/images/audio-next.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="24px" height="24px">
+  <path d="m7,7 8,5v-5h2v10h-2v-5l-8,5z"/>
+</svg>
diff --git a/images/audio-playpause.png b/images/audio-playpause.png
deleted file mode 100644
index b66d8ff..0000000
Binary files a/images/audio-playpause.png and /dev/null differ
diff --git a/images/audio-playpause.svg b/images/audio-playpause.svg
new file mode 100644
index 0000000..ce941de
--- /dev/null
+++ b/images/audio-playpause.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="24px" height="24px">
+  <path d="m4,7 8,5v-5h3v10h-3v-5l-8,5zm13,0h3v10h-3z"/>
+</svg>
diff --git a/images/audio-prev.png b/images/audio-prev.png
deleted file mode 100644
index 1cbcf12..0000000
Binary files a/images/audio-prev.png and /dev/null differ
diff --git a/images/audio-prev.svg b/images/audio-prev.svg
new file mode 100644
index 0000000..9da7934
--- /dev/null
+++ b/images/audio-prev.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="24px" height="24px">
+  <path d="m7,7h2v5l8,-5v10l-8,-5v5h-2z"/>
+</svg>
diff --git a/images/audio-slower.png b/images/audio-slower.png
deleted file mode 100644
index cda69f0..0000000
Binary files a/images/audio-slower.png and /dev/null differ
diff --git a/images/audio-slower.svg b/images/audio-slower.svg
new file mode 100644
index 0000000..b03bc70
--- /dev/null
+++ b/images/audio-slower.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="24px" height="24px">
+  <path d="m0,7 8,5 8,-5v5l8,-5v10l-8,-5v5l-8,-5 -8,5z"/>
+</svg>
diff --git a/images/audio-sync.png b/images/audio-sync.png
deleted file mode 100644
index 01ef2d4..0000000
Binary files a/images/audio-sync.png and /dev/null differ
diff --git a/images/audio-sync.svg b/images/audio-sync.svg
new file mode 100644
index 0000000..ecb9edb
--- /dev/null
+++ b/images/audio-sync.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="24px" height="24px">
+  <path d="m5,11v2h10l-5,8h10l-5,-8h4v-2h-10l5,-8h-10l5,8z"/>
+</svg>
diff --git a/images/dialogs/add_wmts.png b/images/dialogs/add_wmts.png
new file mode 100644
index 0000000..e70c193
Binary files /dev/null and b/images/dialogs/add_wmts.png differ
diff --git a/images/dialogs/layerlist/gamma.png b/images/dialogs/layerlist/gamma.png
new file mode 100644
index 0000000..f67ada4
Binary files /dev/null and b/images/dialogs/layerlist/gamma.png differ
diff --git a/images/dialogs/minimap.png b/images/dialogs/minimap.png
new file mode 100644
index 0000000..7ac592c
Binary files /dev/null and b/images/dialogs/minimap.png differ
diff --git a/images/dialogs/sort_below.png b/images/dialogs/sort_below.png
new file mode 100644
index 0000000..ac7742c
Binary files /dev/null and b/images/dialogs/sort_below.png differ
diff --git a/images/dialogs/taginfo.png b/images/dialogs/taginfo.png
new file mode 100644
index 0000000..7461811
Binary files /dev/null and b/images/dialogs/taginfo.png differ
diff --git a/images/download-overpass.png b/images/download-overpass.png
new file mode 100644
index 0000000..1795676
Binary files /dev/null and b/images/download-overpass.png differ
diff --git a/images/icons/power_tower_high2.n.16.png b/images/icons/power_tower_high2.n.16.png
new file mode 100644
index 0000000..4dbe28a
Binary files /dev/null and b/images/icons/power_tower_high2.n.16.png differ
diff --git a/images/icons/power_tower_low.n.16.png b/images/icons/power_tower_low.n.16.png
new file mode 100644
index 0000000..3abb7c3
Binary files /dev/null and b/images/icons/power_tower_low.n.16.png differ
diff --git a/images/logo.svg b/images/logo.svg
index b7e4787..c021dc9 100644
--- a/images/logo.svg
+++ b/images/logo.svg
@@ -1 +1 @@
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1000 1000"><defs><filter id="1" x="-.033" width="1.066" y="-.309" height="1.618"><feGaussianBlur stdDeviation="11.58046"/></filter><filter id="2" color-interpolation-filters="sRGB"><feGaussianBlur stdDeviation=".5"/></filter><filter id="0"><feGaussianBlur stdDeviation="10"/></filter><linearGradient id="8" gradientUnits="userSpaceOnUse" x1="470" y1="540" x2="570" y2="600"><stop stop-color="#ddc [...]
\ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="0 0 1000 1000"><defs>  <filter color-interpolation-filters="sRGB" id="A">    <feGaussianBlur stdDeviation=".5"/>  </filter>  <filter color-interpolation-filters="sRGB" id="3">    <feGaussianBlur stdDeviation="10"/>  </filter>  <filter x="-.033" y="-.309" width="1.066" height="1.618" color-interpolation-filters="sRGB" id="5">    <feGaussianBlur st [...]
\ No newline at end of file
diff --git a/images/misc/gray_check.png b/images/misc/gray_check.png
new file mode 100644
index 0000000..80964a0
Binary files /dev/null and b/images/misc/gray_check.png differ
diff --git a/images/oauth/oauth-logo.png b/images/oauth/oauth-logo.png
deleted file mode 100644
index 35effee..0000000
Binary files a/images/oauth/oauth-logo.png and /dev/null differ
diff --git a/images/oauth/oauth-logo.svg b/images/oauth/oauth-logo.svg
new file mode 100644
index 0000000..3f15669
--- /dev/null
+++ b/images/oauth/oauth-logo.svg
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 1800 600" width="402px" height="134px">
+<defs>
+  <mask maskUnits="objectBoundingBox" maskContentUnits="ObjectBoundingBox" id="hashCircle">
+    <circle cx="300" cy="300" r="190" fill="#fff" stroke="none"/>
+  </mask>
+  <pattern patternUnits="userSpaceOnUse" x="0" y="0" width="50" height="50" id="hash">
+    <path d="m0,0 50,50m-50,0 50,-50" stroke="#fff" stroke-width="4"/>
+  </pattern>
+</defs>
+<g>
+  <circle cx="300" cy="300" r="300" fill="#000"/>
+  <circle cx="300" cy="300" r="282.5" stroke="#fff" stroke-width="10"/>
+</g>
+<circle fill="url(#hash)" cx="300" cy="300" r="190"/>
+<path id="keyhole" stroke="#000" stroke-width="6" fill="#fff" d="M377.768,426.033C365.328,426.033 354.411,418.155 350.601,406.429L336.745,364.211L267.43,364.211L254.556,406.044C250.67,417.998 239.67,426 227.166,426C224.164,426 221.182,425.525 218.303,424.591C203.357,420.104 194.872,404.017 199.451,388.751L257.957,203.428C261.756,191.639 272.94,183.416 285.157,183.416L316.267,183.416C328.553,183.416 339.736,191.499 343.461,203.073L404.99,388.327C409.91,403.473 401.763,419.732 386.839,424. [...]
+<g id="OAUTH" fill="#fff">
+  <path d="M148.001,124.354L147.928,124.255C140.632,114.256 142.773,100.268 153.518,92.426C164.263,84.585 178.066,86.786 185.362,96.784L185.435,96.883C192.731,106.882 190.59,120.871 179.845,128.712C169.1,136.553 155.297,134.353 148.001,124.354z M175.658,104.171L175.585,104.072C171.919,99.048 165.093,97.32 159.771,101.204C154.498,105.052 154.088,111.907 157.754,116.932L157.827,117.031C161.494,122.055 168.319,123.783 173.592,119.935C178.915,116.051 179.325,109.196 175.658,104.171z" />
+  <path d="M218.344,58.817L229.309,55.299L260.048,91.033L247.851,94.946L242.509,88.576L226.676,93.656L226.096,101.927L214.134,105.765L218.344,58.817z M236.384,80.775L228.066,70.573L227.177,83.729L236.384,80.775z" />
+  <path d="M279.795,69.567L279.891,45.364L292.023,45.412L291.928,69.369C291.903,75.589 295.032,78.557 299.836,78.577C304.64,78.596 307.792,75.776 307.815,69.741L307.912,45.477L320.044,45.525L319.949,69.42C319.894,83.338 311.926,89.404 299.67,89.355C287.415,89.305 279.742,83.054 279.795,69.567z" />
+  <path d="M363.859,65.338L351.491,61.563L354.547,51.55L390.71,62.587L387.654,72.6L375.286,68.826L365.759,100.042L354.333,96.555L363.859,65.338z" />
+  <path d="M423.012,76.559L432.958,83.178L424.02,96.61L436.786,105.106L445.725,91.673L455.671,98.292L431.788,134.181L421.841,127.562L430.917,113.924L418.15,105.428L409.075,119.066L399.129,112.447L423.012,76.559z"/>
+  <path d="M458.146,468.883L458.222,468.98C465.896,478.693 464.29,492.755 453.852,501.001C443.414,509.247 429.536,507.575 421.862,497.862L421.786,497.765C414.112,488.051 415.719,473.99 426.156,465.744C436.594,457.499 450.472,459.17 458.146,468.883z M431.277,490.11L431.353,490.207C435.209,495.088 442.096,496.554 447.267,492.469C452.389,488.422 452.538,481.556 448.681,476.675L448.605,476.578C444.75,471.697 437.862,470.231 432.74,474.278C427.569,478.363 427.421,485.229 431.277,490.11z"/>
+  <path d="M390.707,537.182L379.907,541.179L347.625,506.833L359.638,502.386L365.256,508.516L380.85,502.744L381.065,494.456L392.847,490.095L390.707,537.182z M371.718,516.04L380.477,525.865L380.786,512.683L371.718,516.04z"/>
+  <path d="M328.888,528.985L329.955,553.164L317.835,553.699L316.778,529.766C316.504,523.552 313.236,520.738 308.437,520.95C303.638,521.162 300.625,524.131 300.891,530.16L301.961,554.4L289.841,554.935L288.787,531.064C288.173,517.16 295.841,510.718 308.084,510.178C320.328,509.637 328.293,515.511 328.888,528.985z"/>
+  <path d="M244.671,536.891L257.158,540.262L254.429,550.37L217.918,540.515L220.647,530.406L233.134,533.777L241.641,502.261L253.177,505.375L244.671,536.891z"/>
+  <path d="M185.65,528.108L175.401,521.966L183.696,508.125L170.543,500.241L162.248,514.082L152,507.94L174.164,470.961L184.412,477.104L175.99,491.156L189.144,499.04L197.566,484.988L207.814,491.131L185.65,528.108z"/>
+</g>
+<path id="O" d="m937.68,234.55c-12.66,-16.44 -29.75,-24.65 -51.28,-24.65 -21.53,0 -38.67,8.22 -51.42,24.65 -12.66,16.44 -18.98,38.85 -18.98,67.24 0,28.21 6.33,50.54 18.98,66.97 12.74,16.44 29.88,24.65 51.42,24.65 21.53,0 38.63,-8.22 51.28,-24.65 12.57,-16.44 18.85,-38.76 18.85,-66.97 0,-28.39 -6.28,-50.8 -18.85,-67.24M886.39,199.61c25.49,0 45.88,9.23 61.17,27.69 15.29,18.55 22.94,43.37 22.94,74.49 0,31.03 -7.65,55.77 -22.94,74.22 -15.29,18.54 -35.68,27.82 -61.17,27.82 -25.58,0 -46.05,-9. [...]
+<path id="A" d="m1079.4,216.48 -42.19,110.74 83.72,0 -41.53,-110.74m-8.44,-13.32 17.27,0 75.28,196.83 -15.03,0 -23.47,-61.83 -91.89,0L1009.79,400l-13.97,0 75.15,-196.83"/>
+<path id="u" d="m1205,240h14v97a42,51.5 0 0 0 84,0v-97.4h14v100a56,60 0 0 1 -112,0z"/>
+<path id="t" d="m1346,240h125v11.5h-55.5v148.5h-14v-148.5h-55.5z" />
+<path id="h" d="m1502,240h14v69h84v-69h14v160h-14v-79.5h-84v79.5h-14z"/>
+</svg>
diff --git a/images/oauth/oauth-small.svg b/images/oauth/oauth-small.svg
new file mode 100644
index 0000000..addff98
--- /dev/null
+++ b/images/oauth/oauth-small.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.0" viewBox="0 0 32 32" width="20px" height="20px" xmlns:xlink="http://www.w3.org/1999/xlink">
+  <circle cx="16" cy="16" r="16" fill="#000"/>
+  <circle cx="16" cy="16" r="11" fill="#888"/>
+  <path d="m35,16 a4,4 0 0 1 3,3 l7.5,22.5 a3.16,3.16 0 0 1 -6,2 l-3,-9 h-9 l-3,9 a3.16,3.16 0 0 1 -6,-2 l7.5,-22.5 a4,4 0 0 1 3,-3z" fill="#fff" transform="scale(.5)"/>
+</svg>
diff --git a/images/oauth/oauth.png b/images/oauth/oauth.png
deleted file mode 100644
index ef16293..0000000
Binary files a/images/oauth/oauth.png and /dev/null differ
diff --git a/images/presets/JusticeScales.png b/images/presets/JusticeScales.png
deleted file mode 100644
index 356abb7..0000000
Binary files a/images/presets/JusticeScales.png and /dev/null differ
diff --git a/images/presets/bollard.png b/images/presets/bollard.png
index a91561c..4d17cd4 100644
Binary files a/images/presets/bollard.png and b/images/presets/bollard.png differ
diff --git a/images/presets/field_hockey.png b/images/presets/field_hockey.png
new file mode 100644
index 0000000..0a5a90f
Binary files /dev/null and b/images/presets/field_hockey.png differ
diff --git a/images/presets/ford.png b/images/presets/ford.png
deleted file mode 100644
index 2d989b4..0000000
Binary files a/images/presets/ford.png and /dev/null differ
diff --git a/images/presets/Hockey.png b/images/presets/ice_hockey.png
similarity index 100%
rename from images/presets/Hockey.png
rename to images/presets/ice_hockey.png
diff --git a/images/presets/pharmacy.png b/images/presets/pharmacy.png
deleted file mode 100644
index ffe19ba..0000000
Binary files a/images/presets/pharmacy.png and /dev/null differ
diff --git a/images/presets/prison.png b/images/presets/prison.png
deleted file mode 100644
index 220781c..0000000
Binary files a/images/presets/prison.png and /dev/null differ
diff --git a/images/presets/recycling.png b/images/presets/recycling.png
deleted file mode 100644
index 5080911..0000000
Binary files a/images/presets/recycling.png and /dev/null differ
diff --git a/images/presets/safety_training.png b/images/presets/safety_training.png
deleted file mode 100644
index 0f4d0c5..0000000
Binary files a/images/presets/safety_training.png and /dev/null differ
diff --git a/images/svpDown.png b/images/svpDown.png
deleted file mode 100644
index 3ed4bc2..0000000
Binary files a/images/svpDown.png and /dev/null differ
diff --git a/images/svpDown.svg b/images/svpDown.svg
new file mode 100644
index 0000000..6425286
--- /dev/null
+++ b/images/svpDown.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="9px" height="5px">
+  <path d="m0,0h9l-4.5,5z"/>
+</svg>
diff --git a/images/svpLeft.png b/images/svpLeft.png
deleted file mode 100644
index 7654531..0000000
Binary files a/images/svpLeft.png and /dev/null differ
diff --git a/images/svpLeft.svg b/images/svpLeft.svg
new file mode 100644
index 0000000..813a47c
--- /dev/null
+++ b/images/svpLeft.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="5px" height="9px">
+  <path d="m5,9v-9l-5,4.5z"/>
+</svg>
diff --git a/images/svpRight.png b/images/svpRight.png
deleted file mode 100644
index 307e737..0000000
Binary files a/images/svpRight.png and /dev/null differ
diff --git a/images/svpRight.svg b/images/svpRight.svg
new file mode 100644
index 0000000..4b324fc
--- /dev/null
+++ b/images/svpRight.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="5px" height="9px">
+  <path d="m0,9v-9l5,4.5z"/>
+</svg>
diff --git a/images/svpUp.png b/images/svpUp.png
deleted file mode 100644
index ea1cf6e..0000000
Binary files a/images/svpUp.png and /dev/null differ
diff --git a/images/svpUp.svg b/images/svpUp.svg
new file mode 100644
index 0000000..bb861f3
--- /dev/null
+++ b/images/svpUp.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="9px" height="5px">
+  <path d="m0,5h9l-4.5,-5z"/>
+</svg>
diff --git a/linux/latest/usr/bin/josm-latest b/linux/latest/usr/bin/josm-latest
index 8adcbfe..5390e6b 100755
--- a/linux/latest/usr/bin/josm-latest
+++ b/linux/latest/usr/bin/josm-latest
@@ -11,9 +11,11 @@ ARCH="`dpkg --print-architecture 2> /dev/null || true`"
 
 # If OpenJDK is only available headless, do not try it
 if dpkg --get-selections 'openjdk-*-jre' | grep install$ > /dev/null ; then
+	JAVA9_CMDS="/usr/lib/jvm/java-9-openjdk/bin/java /usr/lib/jvm/java-9-openjdk-$ARCH/bin/java /usr/lib/jvm/java-9-oracle/bin/java"
 	JAVA8_CMDS="/usr/lib/jvm/java-8-openjdk/bin/java /usr/lib/jvm/java-8-openjdk-$ARCH/bin/java /usr/lib/jvm/java-8-oracle/bin/java"
 	JAVA7_CMDS="$JAVA_HOME/bin/java /usr/lib/jvm/java-7-openjdk/bin/java /usr/lib/jvm/java-7-openjdk-$ARCH/bin/java /usr/lib/jvm/java-7-oracle/bin/java"
 else
+	JAVA9_CMDS="/usr/lib/jvm/java-9-oracle/bin/java"
 	JAVA8_CMDS="/usr/lib/jvm/java-8-oracle/bin/java"
 	JAVA7_CMDS="$JAVA_HOME/bin/java /usr/lib/jvm/java-7-oracle/bin/java /usr/bin/java"
 fi
@@ -44,6 +46,18 @@ for jcmd in $JAVA7_CMDS; do
     fi
 done
 
+for jcmd in $JAVA9_CMDS; do
+	if [ "z$ALTERNATIVE_JDK" = "z`readlink -n -f $jcmd`" ] && [ -z "${JAVACMD}" ]; then
+        JAVACMD="$jcmd"
+    fi
+done
+
+for jcmd in $JAVA9_CMDS; do
+    if [ -x "$jcmd" -a -z "${JAVACMD}" ]; then
+        JAVACMD="$jcmd"
+    fi
+done
+
 if [ "$JAVACMD" ]; then
     echo "Using $JAVACMD to execute josm-latest." || true
     set +e
diff --git a/linux/latest/usr/share/applications/josm-latest.desktop b/linux/latest/usr/share/applications/josm-latest.desktop
index 9d300dc..cb51dd9 100644
--- a/linux/latest/usr/share/applications/josm-latest.desktop
+++ b/linux/latest/usr/share/applications/josm-latest.desktop
@@ -8,6 +8,6 @@ Icon=josm-latest.png
 Exec=josm-latest %F
 Terminal=false
 MimeType=application/x-osm+xml;application/x-gpx+xml
-StartupNotify=false
+StartupNotify=true
 Categories=Education;Geoscience;Maps
 StartupWMClass=org-openstreetmap-josm-Main
diff --git a/linux/tested/usr/bin/josm b/linux/tested/usr/bin/josm
index 0a8c07d..3819de7 100755
--- a/linux/tested/usr/bin/josm
+++ b/linux/tested/usr/bin/josm
@@ -11,9 +11,11 @@ ARCH="`dpkg --print-architecture 2> /dev/null || true`"
 
 # If OpenJDK is only available headless, do not try it
 if dpkg --get-selections 'openjdk-*-jre' | grep install$ > /dev/null ; then
+	JAVA9_CMDS="/usr/lib/jvm/java-9-openjdk/bin/java /usr/lib/jvm/java-9-openjdk-$ARCH/bin/java /usr/lib/jvm/java-9-oracle/bin/java"
 	JAVA8_CMDS="/usr/lib/jvm/java-8-openjdk/bin/java /usr/lib/jvm/java-8-openjdk-$ARCH/bin/java /usr/lib/jvm/java-8-oracle/bin/java"
 	JAVA7_CMDS="$JAVA_HOME/bin/java /usr/lib/jvm/java-7-openjdk/bin/java /usr/lib/jvm/java-7-openjdk-$ARCH/bin/java /usr/lib/jvm/java-7-oracle/bin/java"
 else
+	JAVA9_CMDS="/usr/lib/jvm/java-9-oracle/bin/java"
 	JAVA8_CMDS="/usr/lib/jvm/java-8-oracle/bin/java"
 	JAVA7_CMDS="$JAVA_HOME/bin/java /usr/lib/jvm/java-7-oracle/bin/java /usr/bin/java"
 fi
@@ -44,6 +46,18 @@ for jcmd in $JAVA7_CMDS; do
     fi
 done
 
+for jcmd in $JAVA9_CMDS; do
+	if [ "z$ALTERNATIVE_JDK" = "z`readlink -n -f $jcmd`" ] && [ -z "${JAVACMD}" ]; then
+        JAVACMD="$jcmd"
+    fi
+done
+
+for jcmd in $JAVA9_CMDS; do
+    if [ -x "$jcmd" -a -z "${JAVACMD}" ]; then
+        JAVACMD="$jcmd"
+    fi
+done
+
 if [ "$JAVACMD" ]; then
     echo "Using $JAVACMD to execute josm." || true
     set +e
diff --git a/linux/tested/usr/share/applications/josm.desktop b/linux/tested/usr/share/applications/josm.desktop
index 1de6fa7..5b15ef2 100644
--- a/linux/tested/usr/share/applications/josm.desktop
+++ b/linux/tested/usr/share/applications/josm.desktop
@@ -8,6 +8,6 @@ Icon=josm.png
 Exec=josm %F
 Terminal=false
 MimeType=application/x-osm+xml;application/x-gpx+xml
-StartupNotify=false
+StartupNotify=true
 Categories=Education;Geoscience;Maps
 StartupWMClass=org-openstreetmap-josm-Main
diff --git a/netbeans/nbbuild.xml b/netbeans/nbbuild.xml
index 55ba401..2d3801e 100644
--- a/netbeans/nbbuild.xml
+++ b/netbeans/nbbuild.xml
@@ -12,7 +12,6 @@
 
     <property name="javacc.home" location="../tools"/>
     <property name="mapcss.dir" location="../src/org/openstreetmap/josm/gui/mappaint/mapcss"/>
-    <property name="imagerytypes.dir" location="${src.dir}/org/openstreetmap/josm/data/imagery/types"/>
     <!-- For Windows-specific stuff -->
     <condition property="isWindows">
         <os family="Windows"/>
@@ -108,9 +107,6 @@ Build-Date: ${build.tstamp}
         <uptodate property="javacc.notRequired" targetfile="${mapcss.dir}/parsergen/MapCSSParser.java" >
             <srcfiles dir="${mapcss.dir}" includes="MapCSSParser.jj"/>
         </uptodate>
-        <uptodate property="jaxb.notRequired" targetfile="${src.dir}/org/openstreetmap/josm/data/imagery/types/package-info.java" >
-            <srcfiles dir="../data_nodist" includes="wms-cache.xsd"/>
-        </uptodate>
     </target>	
     <target name="javacc" depends="check-javacc" unless="javacc.notRequired">
         <mkdir dir="${mapcss.dir}/parsergen"/>
@@ -126,22 +122,7 @@ Build-Date: ${build.tstamp}
             <arg value="${mapcss.dir}/MapCSSParser.jj"/>
         </exec>
     </target>
-    <target name="-jaxb_win" if="isWindows">
-        <property name="xjc" value="${java.home}\..\bin\xjc.exe" />
-    </target>
-    <target name="-jaxb_nix" unless="isWindows">
-        <property name="xjc" value="${java.home}/../bin/xjc" />
-    </target>
-    <target name="jaxb" depends="init, -jaxb_win, -jaxb_nix" unless="jaxb.notRequired">
-        <exec executable="${xjc}" failonerror="true">
-            <arg value="-d"/>
-            <arg value="${src.dir}"/>
-            <arg value="-encoding"/>
-            <arg value="UTF-8"/>
-            <arg value="../data_nodist/wms-cache.xsd"/>
-        </exec>
-    </target>
-    <target name="-pre-compile" depends="javacc,jaxb">
+    <target name="-pre-compile" depends="javacc">
 <!--        <javacc target="${mapcss.dir}/MapCSSParser.jj" javacchome="${javacc.home}" outputdirectory="${mapcss.dir}/parsergen"/>-->
     </target>    
 </project>
diff --git a/presets_lang.pl b/presets_lang.pl
index 76fd5cb..b3e5cf0 100755
--- a/presets_lang.pl
+++ b/presets_lang.pl
@@ -40,7 +40,7 @@ sub handle_start
       {
         $datan{"de"} = "/wiki/Proposed_features/De:Hausnummern";
       }
-      while($main =~ /<span lang="([a-z_A-Z-]+)"(?: style="unicode-bidi:embed")?><a href="(\/wiki\/.*?)"/g)
+      while($main =~ /<bdi lang="([a-z_A-Z-]+)"(?: style="unicode-bidi:embed;unicode-bidi:-webkit-isolate;unicode-bidi:isolate")?><a href="(\/wiki\/.*?)"/g)
       {
         my $lang = lc($1);
         my $val = uri_unescape($2);
diff --git a/scripts/taginfoextract.groovy b/scripts/taginfoextract.groovy
index 2f180e5..51361e0 100644
--- a/scripts/taginfoextract.groovy
+++ b/scripts/taginfoextract.groovy
@@ -6,15 +6,17 @@
  *
  * groovy -cp dist/josm-custom.jar scripts/taginfoextract.groovy -t mappaint
  * groovy -cp dist/josm-custom.jar scripts/taginfoextract.groovy -t presets
+ * groovy -cp dist/josm-custom.jar scripts/taginfoextract.groovy -t external_presets
  */
+import groovy.json.JsonBuilder
+
 import java.awt.image.BufferedImage
-import java.nio.file.Files
 import java.nio.file.FileSystems
+import java.nio.file.Files
 import java.nio.file.Path
 
 import javax.imageio.ImageIO
 
-import groovy.json.JsonBuilder
 import org.openstreetmap.josm.Main
 import org.openstreetmap.josm.data.Version
 import org.openstreetmap.josm.data.coor.LatLon
@@ -33,6 +35,7 @@ import org.openstreetmap.josm.gui.mappaint.mapcss.MapCSSStyleSource
 import org.openstreetmap.josm.gui.mappaint.mapcss.Condition.SimpleKeyValueCondition
 import org.openstreetmap.josm.gui.mappaint.mapcss.Selector.GeneralSelector
 import org.openstreetmap.josm.gui.mappaint.mapcss.parsergen.MapCSSParser
+import org.openstreetmap.josm.gui.preferences.map.TaggingPresetPreference
 import org.openstreetmap.josm.gui.tagging.TaggingPreset
 import org.openstreetmap.josm.gui.tagging.TaggingPresetItems
 import org.openstreetmap.josm.gui.tagging.TaggingPresetReader
@@ -185,12 +188,18 @@ class taginfoextract {
             script.run()
         } else if (options.t == 'presets') {
             script.run_presets()
+        } else if (options.t == 'external_presets') {
+            script.run_external_presets()
         } else {
             System.err.println 'Invalid type ' + options.t
-            System.exit(1)
+            if (!options.noexit) {
+                System.exit(1)
+            }
         }
 
-        System.exit(0)
+        if (!options.noexit) {
+            System.exit(0)
+        }
     }
 
     /**
@@ -204,6 +213,7 @@ class taginfoextract {
         cli.t(args:1, argName: "type", "the project type to be generated")
         cli._(longOpt:'svnrev', args:1, argName:"revision", "corresponding revision of the repository https://svn.openstreetmap.org/ (optional, current revision is read from the local checkout or from the web if not given, see --svnweb)")
         cli._(longOpt:'imgdir', args:1, argName:"directory", "directory to put the generated images in (default: ./taginfo-img)")
+        cli._(longOpt:'noexit', "don't call System.exit(), for use from Ant script")
         cli._(longOpt:'svnweb', 'fetch revision of the repository https://svn.openstreetmap.org/ from web and not from the local repository')
         cli._(longOpt:'imgurlprefix', args:1, argName:'prefix', 'image URLs prefix for generated image files')
         cli.h(longOpt:'help', "show this help")
@@ -233,8 +243,13 @@ class taginfoextract {
 
     void run_presets() {
         init()
-        def tags = []
         def presets = TaggingPresetReader.readAll(input_file, true)
+        def tags = convert_presets(presets, "", true)
+        write_json("JOSM main presets", "Tags supported by the default presets in the OSM editor JOSM", tags)
+    }
+
+    def convert_presets(Iterable<TaggingPreset> presets, String descriptionPrefix, boolean addImages) {
+        def tags = []
         for (TaggingPreset preset : presets) {
             for (TaggingPresetItems.KeyedItem item : Utils.filteredCollection(preset.data, TaggingPresetItems.KeyedItem.class)) {
                 def values
@@ -245,18 +260,41 @@ class taginfoextract {
                 }
                 for (String value : values) {
                     def tag = [
-                            description: preset.name,
+                            description: descriptionPrefix + preset.name,
                             key: item.key,
                             value: value,
                             object_types: preset.types.collect {it == TaggingPresetType.CLOSEDWAY ? "area" : it.toString().toLowerCase()},
                     ]
-                    if (preset.iconName) tag += [icon_url: find_image_url(preset.iconName)]
+                    if (addImages && preset.iconName) tag += [icon_url: find_image_url(preset.iconName)]
                     tags += tag
                 }
             }
         }
+        return tags
+    }
 
-        write_json("JOSM main presets", "Tags supported by the default presets in the OSM editor JOSM", tags)
+    void run_external_presets() {
+        init()
+        TaggingPresetReader.setLoadIcons(false)
+        def sources = new TaggingPresetPreference.TaggingPresetSourceEditor().loadAndGetAvailableSources()
+        def tags = []
+        for (def source : sources) {
+            if (source.url.startsWith("resource")) {
+                // default presets
+                continue;
+            }
+            try {
+                println "Loading ${source.url}"
+                def presets = TaggingPresetReader.readAll(source.url, false)
+                def t = convert_presets(presets, source.title + " ", false)
+                println "Converting ${t.size()} presets of ${source.title}"
+                tags += t
+            } catch (Exception ex) {
+                System.err.println("Skipping ${source.url} due to error")
+                ex.printStackTrace()
+            }
+        }
+        write_json("JOSM user presets", "Tags supported by the user contributed presets in the OSM editor JOSM", tags)
     }
 
     void run() {
@@ -323,9 +361,11 @@ class taginfoextract {
      */
     def init() {
         Main.initApplicationPreferences()
+        Main.determinePlatformHook()
         Main.pref.enableSaveOnPut(false)
         Main.setProjection(Projections.getProjectionByCode("EPSG:3857"))
         Path tmpdir = Files.createTempDirectory(FileSystems.getDefault().getPath(base_dir), "pref")
+        tmpdir.toFile().deleteOnExit()
         System.setProperty("josm.home", tmpdir.toString())
 
         josm_svn_revision = Version.getInstance().getVersion()
@@ -356,7 +396,17 @@ class taginfoextract {
         }
         f = new File("${base_dir}/images/${path}")
         if (f.exists()) {
-            return "https://josm.openstreetmap.de/export/${josm_svn_revision}/josm/trunk/images/${path}"
+            if (path.startsWith("images/styles/standard/")) {
+                path = path.substring("images/styles/standard/".length())
+                def rev = osm_svn_revision()
+                return "https://trac.openstreetmap.org/export/${rev}/subversion/applications/share/map-icons/classic.small/${path}"
+            } else if (path.startsWith("styles/standard/")) {
+                path = path.substring("styles/standard/".length())
+                def rev = osm_svn_revision()
+                return "https://trac.openstreetmap.org/export/${rev}/subversion/applications/share/map-icons/classic.small/${path}"
+            } else {
+                return "https://josm.openstreetmap.de/export/${josm_svn_revision}/josm/trunk/images/${path}"
+            }
         }
         assert false, "Cannot find image url for ${path}"
     }
diff --git a/src/JOSM.java b/src/JOSM.java
index 824fb35..06e9d16 100644
--- a/src/JOSM.java
+++ b/src/JOSM.java
@@ -1,4 +1,4 @@
-// License: GPL. Copyright 2007 by Immanuel Scholz and others
+// License: GPL. For details, see LICENSE file.
 import org.openstreetmap.josm.gui.MainApplication;
 
 /**
@@ -7,9 +7,10 @@ import org.openstreetmap.josm.gui.MainApplication;
  * The name of the main class will be the name of the application menu on OS X.
  * so instead of exposing "org.openstreetmap.josm.gui.MainApplication" to the
  * user, we subclass it with a nicer name "JOSM".
- * An alternative would be to set the name in the plist file---but JOSM usually
- * is not delivered as an OS X Application Bundle, so we have no plist file.
+ * An alternative is to set the name in the plist file for the  OS X Application Bundle.
  *
  * @since 1023
  */
-public class JOSM extends MainApplication {}
+public class JOSM extends MainApplication {
+
+}
diff --git a/src/org/apache/commons/jcs/JCS.java b/src/org/apache/commons/jcs/JCS.java
new file mode 100644
index 0000000..696847d
--- /dev/null
+++ b/src/org/apache/commons/jcs/JCS.java
@@ -0,0 +1,212 @@
+package org.apache.commons.jcs;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.access.CacheAccess;
+import org.apache.commons.jcs.access.GroupCacheAccess;
+import org.apache.commons.jcs.access.exception.CacheException;
+import org.apache.commons.jcs.engine.behavior.ICompositeCacheAttributes;
+import org.apache.commons.jcs.engine.behavior.IElementAttributes;
+import org.apache.commons.jcs.engine.control.CompositeCache;
+import org.apache.commons.jcs.engine.control.CompositeCacheManager;
+import org.apache.commons.jcs.engine.control.group.GroupAttrName;
+
+import java.util.Properties;
+
+/**
+ * Simple class for using JCS. To use JCS in your application, you can use the static methods of
+ * this class to get access objects (instances of this class) for your cache regions. One CacheAccess
+ * object should be created for each region you want to access. If you have several regions, then
+ * get instances for each. For best performance the getInstance call should be made in an
+ * initialization method.
+ */
+public abstract class JCS
+{
+    /** cache.ccf alternative. */
+    private static String configFilename = null;
+
+    /** alternative configuration properties */
+    private static Properties configProps = null;
+
+    /** Cache manager use by the various forms of defineRegion and getAccess */
+    private static CompositeCacheManager cacheMgr;
+
+    /**
+     * Define a new cache region with the given name. In the oracle specification, these attributes
+     * are global and not region specific, regional overrides is a value add each region should be
+     * able to house both cache and element attribute sets. It is more efficient to define a cache
+     * in the props file and then strictly use the get access method. Use of the define region
+     * outside of an initialization block should be avoided.
+     * <p>
+     * @param name Name that will identify the region
+     * @return CacheAccess instance for the new region
+     * @throws CacheException
+     */
+    public static <K, V> CacheAccess<K, V> defineRegion( String name )
+        throws CacheException
+    {
+        CompositeCache<K, V> cache = getCacheManager().getCache( name );
+        return new CacheAccess<K, V>( cache );
+    }
+
+    /**
+     * Define a new cache region with the specified name and attributes.
+     * <p>
+     * @param name Name that will identify the region
+     * @param cattr CompositeCacheAttributes for the region
+     * @return CacheAccess instance for the new region
+     * @throws CacheException
+     */
+    public static <K, V> CacheAccess<K, V> defineRegion( String name, ICompositeCacheAttributes cattr )
+        throws CacheException
+    {
+        CompositeCache<K, V> cache = getCacheManager().getCache( name, cattr );
+        return new CacheAccess<K, V>( cache );
+    }
+
+    /**
+     * Define a new cache region with the specified name and attributes and return a CacheAccess to
+     * it.
+     * <p>
+     * @param name Name that will identify the region
+     * @param cattr CompositeCacheAttributes for the region
+     * @param attr Attributes for the region
+     * @return CacheAccess instance for the new region
+     * @throws CacheException
+     */
+    public static <K, V> CacheAccess<K, V> defineRegion( String name, ICompositeCacheAttributes cattr, IElementAttributes attr )
+        throws CacheException
+    {
+        CompositeCache<K, V> cache = getCacheManager().getCache( name, cattr, attr );
+        return new CacheAccess<K, V>( cache );
+    }
+
+    /**
+     * Set the filename that the cache manager will be initialized with. Only matters before the
+     * instance is initialized.
+     * <p>
+     * @param configFilename
+     */
+    public static void setConfigFilename( String configFilename )
+    {
+        JCS.configFilename = configFilename;
+    }
+
+    /**
+     * Set the properties that the cache manager will be initialized with. Only
+     * matters before the instance is initialized.
+     *
+     * @param configProps
+     */
+    public static void setConfigProperties( Properties configProps )
+    {
+        JCS.configProps = configProps;
+    }
+
+    /**
+     * Helper method which checks to make sure the cacheMgr class field is set, and if not requests
+     * an instance from CacheManagerFactory.
+     *
+     * @throws CacheException if the configuration cannot be loaded
+     */
+    private static CompositeCacheManager getCacheManager() throws CacheException
+    {
+        synchronized ( JCS.class )
+        {
+            if ( cacheMgr == null || !cacheMgr.isInitialized())
+            {
+                if ( configProps != null )
+                {
+                    cacheMgr = CompositeCacheManager.getUnconfiguredInstance();
+                    cacheMgr.configure( configProps );
+                }
+                else if ( configFilename != null )
+                {
+                    cacheMgr = CompositeCacheManager.getUnconfiguredInstance();
+                    cacheMgr.configure( configFilename );
+                }
+                else
+                {
+                    cacheMgr = CompositeCacheManager.getInstance();
+                }
+            }
+
+            return cacheMgr;
+        }
+    }
+
+    /**
+     * Get a CacheAccess which accesses the provided region.
+     * <p>
+     * @param region Region that return CacheAccess will provide access to
+     * @return A CacheAccess which provides access to a given region.
+     * @throws CacheException
+     */
+    public static <K, V> CacheAccess<K, V> getInstance( String region )
+        throws CacheException
+    {
+        CompositeCache<K, V> cache = getCacheManager().getCache( region );
+        return new CacheAccess<K, V>( cache );
+    }
+
+    /**
+     * Get a CacheAccess which accesses the provided region.
+     * <p>
+     * @param region Region that return CacheAccess will provide access to
+     * @param icca CacheAttributes for region
+     * @return A CacheAccess which provides access to a given region.
+     * @throws CacheException
+     */
+    public static <K, V> CacheAccess<K, V> getInstance( String region, ICompositeCacheAttributes icca )
+        throws CacheException
+    {
+        CompositeCache<K, V> cache = getCacheManager().getCache( region, icca );
+        return new CacheAccess<K, V>( cache );
+    }
+
+    /**
+     * Get a GroupCacheAccess which accesses the provided region.
+     * <p>
+     * @param region Region that return GroupCacheAccess will provide access to
+     * @return A GroupCacheAccess which provides access to a given region.
+     * @throws CacheException
+     */
+    public static <K, V> GroupCacheAccess<K, V> getGroupCacheInstance( String region )
+        throws CacheException
+    {
+        CompositeCache<GroupAttrName<K>, V> cache = getCacheManager().getCache( region );
+        return new GroupCacheAccess<K, V>( cache );
+    }
+
+    /**
+     * Get a GroupCacheAccess which accesses the provided region.
+     * <p>
+     * @param region Region that return GroupCacheAccess will provide access to
+     * @param icca CacheAttributes for region
+     * @return A GroupCacheAccess which provides access to a given region.
+     * @throws CacheException
+     */
+    public static <K, V> GroupCacheAccess<K, V> getGroupCacheInstance( String region, ICompositeCacheAttributes icca )
+        throws CacheException
+    {
+        CompositeCache<GroupAttrName<K>, V> cache = getCacheManager().getCache( region, icca );
+        return new GroupCacheAccess<K, V>( cache );
+    }
+}
diff --git a/src/org/apache/commons/jcs/access/AbstractCacheAccess.java b/src/org/apache/commons/jcs/access/AbstractCacheAccess.java
new file mode 100644
index 0000000..08deda8
--- /dev/null
+++ b/src/org/apache/commons/jcs/access/AbstractCacheAccess.java
@@ -0,0 +1,203 @@
+package org.apache.commons.jcs.access;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.access.behavior.ICacheAccessManagement;
+import org.apache.commons.jcs.access.exception.CacheException;
+import org.apache.commons.jcs.engine.behavior.ICompositeCacheAttributes;
+import org.apache.commons.jcs.engine.behavior.IElementAttributes;
+import org.apache.commons.jcs.engine.control.CompositeCache;
+import org.apache.commons.jcs.engine.stats.behavior.ICacheStats;
+
+import java.io.IOException;
+
+/**
+ * This class provides the common methods for all types of access to the cache.
+ * <p>
+ * An instance of this class is tied to a specific cache region. Static methods are provided to get
+ * such instances.
+ * <p>
+ * Using this class you can retrieve an item, the item's wrapper, and the element's configuration.  You can also put an
+ * item in the cache, remove an item, and clear a region.
+ * <p>
+ * The JCS class is the preferred way to access these methods.
+ */
+public abstract class AbstractCacheAccess<K, V>
+    implements ICacheAccessManagement
+{
+    /**
+     * The cache that a given instance of this class provides access to.
+     * <p>
+     * TODO Should this be the interface?
+     */
+    private final CompositeCache<K, V> cacheControl;
+
+    /**
+     * Constructor for the CacheAccess object.
+     * <p>
+     * @param cacheControl The cache which the created instance accesses
+     */
+    public AbstractCacheAccess( CompositeCache<K, V> cacheControl )
+    {
+        this.cacheControl = cacheControl;
+    }
+
+    /**
+     * Removes all of the elements from a region.
+     * <p>
+     * @throws CacheException
+     */
+    @Override
+    public void clear()
+        throws CacheException
+    {
+        try
+        {
+            this.getCacheControl().removeAll();
+        }
+        catch ( IOException e )
+        {
+            throw new CacheException( e );
+        }
+    }
+
+    /**
+     * This method is does not reset the attributes for items already in the cache. It could
+     * potentially do this for items in memory, and maybe on disk (which would be slow) but not
+     * remote items. Rather than have unpredictable behavior, this method just sets the default
+     * attributes. Items subsequently put into the cache will use these defaults if they do not
+     * specify specific attributes.
+     * <p>
+     * @param attr the default attributes.
+     * @throws CacheException if something goes wrong.
+     */
+    @Override
+    public void setDefaultElementAttributes( IElementAttributes attr )
+        throws CacheException
+    {
+        this.getCacheControl().setElementAttributes( attr );
+    }
+
+    /**
+     * Retrieves A COPY OF the default element attributes used by this region. This does not provide
+     * a reference to the element attributes.
+     * <p>
+     * Each time an element is added to the cache without element attributes, the default element
+     * attributes are cloned.
+     * <p>
+     * @return the default element attributes used by this region.
+     * @throws CacheException
+     */
+    @Override
+    public IElementAttributes getDefaultElementAttributes()
+        throws CacheException
+    {
+        return this.getCacheControl().getElementAttributes();
+    }
+
+    /**
+     * This returns the ICacheStats object with information on this region and its auxiliaries.
+     * <p>
+     * This data can be formatted as needed.
+     * <p>
+     * @return ICacheStats
+     */
+    @Override
+    public ICacheStats getStatistics()
+    {
+        return this.getCacheControl().getStatistics();
+    }
+
+    /**
+     * @return A String version of the stats.
+     */
+    @Override
+    public String getStats()
+    {
+        return this.getCacheControl().getStats();
+    }
+
+    /**
+     * Dispose this region. Flushes objects to and closes auxiliary caches. This is a shutdown
+     * command!
+     * <p>
+     * To simply remove all elements from the region use clear().
+     */
+    @Override
+    public void dispose()
+    {
+        this.getCacheControl().dispose();
+    }
+
+    /**
+     * Gets the ICompositeCacheAttributes of the cache region.
+     * <p>
+     * @return ICompositeCacheAttributes, the controllers config info, defined in the top section of
+     *         a region definition.
+     */
+    @Override
+    public ICompositeCacheAttributes getCacheAttributes()
+    {
+        return this.getCacheControl().getCacheAttributes();
+    }
+
+    /**
+     * Sets the ICompositeCacheAttributes of the cache region.
+     * <p>
+     * @param cattr The new ICompositeCacheAttribute value
+     */
+    @Override
+    public void setCacheAttributes( ICompositeCacheAttributes cattr )
+    {
+        this.getCacheControl().setCacheAttributes( cattr );
+    }
+
+    /**
+     * This instructs the memory cache to remove the <i>numberToFree</i> according to its eviction
+     * policy. For example, the LRUMemoryCache will remove the <i>numberToFree</i> least recently
+     * used items. These will be spooled to disk if a disk auxiliary is available.
+     * <p>
+     * @param numberToFree
+     * @return the number that were removed. if you ask to free 5, but there are only 3, you will
+     *         get 3.
+     * @throws CacheException
+     */
+    @Override
+    public int freeMemoryElements( int numberToFree )
+        throws CacheException
+    {
+        int numFreed = -1;
+        try
+        {
+            numFreed = this.getCacheControl().getMemoryCache().freeElements( numberToFree );
+        }
+        catch ( IOException ioe )
+        {
+            String message = "Failure freeing memory elements.";
+            throw new CacheException( message, ioe );
+        }
+        return numFreed;
+    }
+
+    public CompositeCache<K, V> getCacheControl() {
+        return cacheControl;
+    }
+
+}
diff --git a/src/org/apache/commons/jcs/access/CacheAccess.java b/src/org/apache/commons/jcs/access/CacheAccess.java
new file mode 100644
index 0000000..e34c6d1
--- /dev/null
+++ b/src/org/apache/commons/jcs/access/CacheAccess.java
@@ -0,0 +1,309 @@
+package org.apache.commons.jcs.access;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.access.behavior.ICacheAccess;
+import org.apache.commons.jcs.access.exception.CacheException;
+import org.apache.commons.jcs.access.exception.InvalidArgumentException;
+import org.apache.commons.jcs.access.exception.InvalidHandleException;
+import org.apache.commons.jcs.access.exception.ObjectExistsException;
+import org.apache.commons.jcs.engine.CacheElement;
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.behavior.IElementAttributes;
+import org.apache.commons.jcs.engine.control.CompositeCache;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * This class provides an interface for all types of access to the cache.
+ * <p>
+ * An instance of this class is tied to a specific cache region. Static methods are provided to get
+ * such instances.
+ * <p>
+ * Using this class you can retrieve an item, the item's wrapper, and the element's configuration.  You can also put an
+ * item in the cache, remove an item, and clear a region.
+ * <p>
+ * The JCS class is the preferred way to access these methods.
+ */
+public class CacheAccess<K, V>
+    extends AbstractCacheAccess<K, V>
+    implements ICacheAccess<K, V>
+{
+    /** The logger. */
+    private static final Log log = LogFactory.getLog( CacheAccess.class );
+
+    /**
+     * Constructor for the CacheAccess object.
+     * <p>
+     * @param cacheControl The cache which the created instance accesses
+     */
+    public CacheAccess( CompositeCache<K, V> cacheControl )
+    {
+        super(cacheControl);
+    }
+
+    /**
+     * Retrieve an object from the cache region this instance provides access to.
+     * <p>
+     * @param name Key the object is stored as
+     * @return The object if found or null
+     */
+    @Override
+    public V get( K name )
+    {
+        ICacheElement<K, V> element = this.getCacheControl().get( name );
+
+        return ( element != null ) ? element.getVal() : null;
+    }
+
+    /**
+     * Retrieve matching objects from the cache region this instance provides access to.
+     * <p>
+     * @param pattern - a key pattern for the objects stored
+     * @return A map of key to values.  These are stripped from the wrapper.
+     */
+    @Override
+    public Map<K, V> getMatching( String pattern )
+    {
+        HashMap<K, V> unwrappedResults = new HashMap<K, V>();
+
+        Map<K, ICacheElement<K, V>> wrappedResults = this.getCacheControl().getMatching( pattern );
+        if ( wrappedResults != null )
+        {
+            for (Map.Entry<K, ICacheElement<K, V>> entry : wrappedResults.entrySet())
+            {
+                ICacheElement<K, V> element = entry.getValue();
+                if ( element != null )
+                {
+                    unwrappedResults.put( entry.getKey(), element.getVal() );
+                }
+            }
+        }
+        return unwrappedResults;
+    }
+
+    /**
+     * This method returns the ICacheElement<K, V> wrapper which provides access to element info and other
+     * attributes.
+     * <p>
+     * This returns a reference to the wrapper. Any modifications will be reflected in the cache. No
+     * defensive copy is made.
+     * <p>
+     * This method is most useful if you want to determine things such as the how long the element
+     * has been in the cache.
+     * <p>
+     * The last access time in the ElementAttributes should be current.
+     * <p>
+     * @param name Key the Serializable is stored as
+     * @return The ICacheElement<K, V> if the object is found or null
+     */
+    @Override
+    public ICacheElement<K, V> getCacheElement( K name )
+    {
+        return this.getCacheControl().get( name );
+    }
+
+    /**
+     * Get multiple elements from the cache based on a set of cache keys.
+     * <p>
+     * This method returns the ICacheElement<K, V> wrapper which provides access to element info and other
+     * attributes.
+     * <p>
+     * This returns a reference to the wrapper. Any modifications will be reflected in the cache. No
+     * defensive copy is made.
+     * <p>
+     * This method is most useful if you want to determine things such as the how long the element
+     * has been in the cache.
+     * <p>
+     * The last access time in the ElementAttributes should be current.
+     * <p>
+     * @param names set of Serializable cache keys
+     * @return a map of K key to ICacheElement<K, V> element, or empty map if none of the keys are present
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> getCacheElements( Set<K> names )
+    {
+        return this.getCacheControl().getMultiple( names );
+    }
+
+    /**
+     * Get multiple elements from the cache based on a set of cache keys.
+     * <p>
+     * This method returns the ICacheElement<K, V> wrapper which provides access to element info and other
+     * attributes.
+     * <p>
+     * This returns a reference to the wrapper. Any modifications will be reflected in the cache. No
+     * defensive copy is made.
+     * <p>
+     * This method is most useful if you want to determine things such as the how long the element
+     * has been in the cache.
+     * <p>
+     * The last access time in the ElementAttributes should be current.
+     * <p>
+     * @param pattern key search pattern
+     * @return a map of K key to ICacheElement<K, V> element, or empty map if no keys match the pattern
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> getMatchingCacheElements( String pattern )
+    {
+        return this.getCacheControl().getMatching( pattern );
+    }
+
+    /**
+     * Place a new object in the cache, associated with key name. If there is currently an object
+     * associated with name in the region an ObjectExistsException is thrown. Names are scoped to a
+     * region so they must be unique within the region they are placed.
+     * <p>
+     * @param key Key object will be stored with
+     * @param value Object to store
+     * @throws CacheException and ObjectExistsException is thrown if the item is already in the
+     *                cache.
+     */
+    @Override
+    public void putSafe( K key, V value )
+    {
+        if ( this.getCacheControl().get( key ) != null )
+        {
+            throw new ObjectExistsException( "putSafe failed.  Object exists in the cache for key [" + key
+                + "].  Remove first or use a non-safe put to override the value." );
+        }
+        put( key, value );
+    }
+
+    /**
+     * Place a new object in the cache, associated with key name. If there is currently an object
+     * associated with name in the region it is replaced. Names are scoped to a region so they must
+     * be unique within the region they are placed.
+     * @param name Key object will be stored with
+     * @param obj Object to store
+     */
+    @Override
+    public void put( K name, V obj )
+    {
+        // Call put with a copy of the contained caches default attributes.
+        // the attributes are copied by the cacheControl
+        put( name, obj, this.getCacheControl().getElementAttributes() );
+    }
+
+    /**
+     * Constructs a cache element with these attributes, and puts it into the cache.
+     * <p>
+     * If the key or the value is null, and InvalidArgumentException is thrown.
+     * <p>
+     * @see org.apache.commons.jcs.access.behavior.ICacheAccess#put(java.io.Serializable, java.io.Serializable,
+     *      org.apache.commons.jcs.engine.behavior.IElementAttributes)
+     */
+    @Override
+    public void put( K key, V val, IElementAttributes attr )
+    {
+        if ( key == null )
+        {
+            throw new InvalidArgumentException( "Key must not be null" );
+        }
+
+        if ( val == null )
+        {
+            throw new InvalidArgumentException( "Value must not be null" );
+        }
+
+        // Create the element and update. This may throw an IOException which
+        // should be wrapped by cache access.
+        try
+        {
+            CacheElement<K, V> ce = new CacheElement<K, V>( this.getCacheControl().getCacheName(), key,
+                                                val );
+
+            ce.setElementAttributes( attr );
+
+            this.getCacheControl().update( ce );
+        }
+        catch ( IOException e )
+        {
+            throw new CacheException( e );
+        }
+    }
+
+    /**
+     * Removes a single item by name.
+     * <p>
+     * @param name the name of the item to remove.
+     */
+    @Override
+    public void remove( K name )
+    {
+        this.getCacheControl().remove( name );
+    }
+
+    /**
+     * Reset attributes for a particular element in the cache. NOTE: this method is currently not
+     * implemented.
+     * <p>
+     * @param name Key of object to reset attributes for
+     * @param attr New attributes for the object
+     * @throws InvalidHandleException if the item does not exist.
+     */
+    @Override
+    public void resetElementAttributes( K name, IElementAttributes attr )
+    {
+        ICacheElement<K, V> element = this.getCacheControl().get( name );
+
+        if ( element == null )
+        {
+            throw new InvalidHandleException( "Object for name [" + name + "] is not in the cache" );
+        }
+
+        // Although it will work currently, don't assume pass by reference here,
+        // i.e. don't do this:
+        // element.setElementAttributes( attr );
+        // Another reason to call put is to force the changes to be distributed.
+
+        put( element.getKey(), element.getVal(), attr );
+    }
+
+    /**
+     * GetElementAttributes will return an attribute object describing the current attributes
+     * associated with the object name. The name object must override the Object.equals and
+     * Object.hashCode methods.
+     * <p>
+     * @param name Key of object to get attributes for
+     * @return Attributes for the object, null if object not in cache
+     */
+    @Override
+    public IElementAttributes getElementAttributes( K name )
+    {
+        IElementAttributes attr = null;
+
+        try
+        {
+            attr = this.getCacheControl().getElementAttributes( name );
+        }
+        catch ( IOException ioe )
+        {
+            log.error( "Failure getting element attributes", ioe );
+        }
+
+        return attr;
+    }
+}
diff --git a/src/org/apache/commons/jcs/access/GroupCacheAccess.java b/src/org/apache/commons/jcs/access/GroupCacheAccess.java
new file mode 100644
index 0000000..958abba
--- /dev/null
+++ b/src/org/apache/commons/jcs/access/GroupCacheAccess.java
@@ -0,0 +1,211 @@
+package org.apache.commons.jcs.access;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.access.behavior.IGroupCacheAccess;
+import org.apache.commons.jcs.access.exception.CacheException;
+import org.apache.commons.jcs.access.exception.InvalidArgumentException;
+import org.apache.commons.jcs.engine.CacheElement;
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.behavior.IElementAttributes;
+import org.apache.commons.jcs.engine.control.CompositeCache;
+import org.apache.commons.jcs.engine.control.group.GroupAttrName;
+import org.apache.commons.jcs.engine.control.group.GroupId;
+
+import java.io.IOException;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * Access for groups.
+ */
+public class GroupCacheAccess<K, V>
+    extends AbstractCacheAccess<GroupAttrName<K>, V>
+    implements IGroupCacheAccess<K, V>
+{
+    /**
+     * Constructor for the GroupCacheAccess object
+     * <p>
+     * @param cacheControl
+     */
+    public GroupCacheAccess( CompositeCache<GroupAttrName<K>, V> cacheControl )
+    {
+        super(cacheControl);
+    }
+
+    /**
+     * Gets an item out of the cache that is in a specified group.
+     * <p>
+     * @param name
+     *            The key name.
+     * @param group
+     *            The group name.
+     * @return The cached value, null if not found.
+     */
+    @Override
+    public V getFromGroup( K name, String group )
+    {
+        ICacheElement<GroupAttrName<K>, V> element = this.getCacheControl().get( getGroupAttrName( group, name ) );
+        return ( element != null ) ? element.getVal() : null;
+    }
+
+    /**
+     * Internal method used for group functionality.
+     * <p>
+     * @param group
+     * @param name
+     * @return GroupAttrName
+     */
+    private GroupAttrName<K> getGroupAttrName( String group, K name )
+    {
+        GroupId gid = new GroupId( this.getCacheControl().getCacheName(), group );
+        return new GroupAttrName<K>( gid, name );
+    }
+
+    /**
+     * Allows the user to put an object into a group within a particular cache
+     * region. This method sets the object's attributes to the default for the
+     * region.
+     * <p>
+     * @param name
+     *            The key name.
+     * @param groupName
+     *            The group name.
+     * @param value
+     *            The object to cache
+     * @throws CacheException
+     */
+    @Override
+    public void putInGroup( K name, String groupName, V value )
+        throws CacheException
+    {
+        putInGroup( name, groupName, value, null );
+    }
+
+    /**
+     * Allows the user to put an object into a group within a particular cache
+     * region. This method allows the object's attributes to be individually
+     * specified.
+     * <p>
+     * @param name
+     *            The key name.
+     * @param groupName
+     *            The group name.
+     * @param value
+     *            The object to cache
+     * @param attr
+     *            The objects attributes.
+     * @throws CacheException
+     */
+    @Override
+    public void putInGroup( K name, String groupName, V value, IElementAttributes attr )
+        throws CacheException
+    {
+        if ( name == null )
+        {
+            throw new InvalidArgumentException( "Key must not be null" );
+        }
+
+        if ( value == null )
+        {
+            throw new InvalidArgumentException( "Value must not be null" );
+        }
+
+        // Create the element and update. This may throw an IOException which
+        // should be wrapped by cache access.
+        try
+        {
+            GroupAttrName<K> key = getGroupAttrName( groupName, name );
+            CacheElement<GroupAttrName<K>, V> ce =
+                new CacheElement<GroupAttrName<K>, V>( this.getCacheControl().getCacheName(), key, value );
+
+            IElementAttributes attributes = (attr == null) ? this.getCacheControl().getElementAttributes() : attr;
+            ce.setElementAttributes( attributes );
+
+            this.getCacheControl().update( ce );
+        }
+        catch ( IOException e )
+        {
+            throw new CacheException( e );
+        }
+
+    }
+
+    /**
+     * @param name
+     * @param group
+     */
+    @Override
+    public void removeFromGroup( K name, String group )
+    {
+        GroupAttrName<K> key = getGroupAttrName( group, name );
+        this.getCacheControl().remove( key );
+    }
+
+    /**
+     * Gets the set of keys of objects currently in the group.
+     * <p>
+     * @param group
+     * @return A Set of keys.
+     */
+    @Override
+    public Set<K> getGroupKeys( String group )
+    {
+        Set<K> groupKeys = new HashSet<K>();
+        GroupId groupId = new GroupId( this.getCacheControl().getCacheName(), group );
+
+        for (GroupAttrName<K> gan : this.getCacheControl().getKeySet())
+        {
+            if (gan.groupId.equals( groupId ))
+            {
+                groupKeys.add( gan.attrName );
+            }
+        }
+
+        return groupKeys;
+    }
+
+    /**
+     * Gets the set of group names in the cache
+     * <p>
+     * @return A Set of group names.
+     */
+    public Set<String> getGroupNames()
+    {
+        HashSet<String> names = new HashSet<String>();
+        for (GroupAttrName<K> gan : this.getCacheControl().getKeySet())
+        {
+            names.add(gan.groupId.groupName);
+        }
+        return names;
+    }
+
+    /**
+     * Invalidates a group: remove all the group members
+     * <p>
+     * @param group
+     *            The name of the group to invalidate
+     */
+    @Override
+    public void invalidateGroup( String group )
+    {
+        this.getCacheControl().remove(getGroupAttrName(group, null));
+    }
+}
diff --git a/src/org/apache/commons/jcs/access/PartitionedCacheAccess.java b/src/org/apache/commons/jcs/access/PartitionedCacheAccess.java
new file mode 100644
index 0000000..873f8d4
--- /dev/null
+++ b/src/org/apache/commons/jcs/access/PartitionedCacheAccess.java
@@ -0,0 +1,846 @@
+package org.apache.commons.jcs.access;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.JCS;
+import org.apache.commons.jcs.access.behavior.ICacheAccess;
+import org.apache.commons.jcs.access.exception.CacheException;
+import org.apache.commons.jcs.access.exception.ConfigurationException;
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.behavior.ICompositeCacheAttributes;
+import org.apache.commons.jcs.engine.behavior.IElementAttributes;
+import org.apache.commons.jcs.engine.stats.behavior.ICacheStats;
+import org.apache.commons.jcs.utils.props.AbstractPropertyContainer;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * TODO:  Add new methods that will allow you to provide a partition indicator for all major calls.  Add an interface as well.
+ * <p>
+ * This handles dividing puts and gets.
+ * <p>
+ * There are two required properties.
+ * <p>
+ * <ol>
+ * <li>.numberOfPartitions</li>
+ * <li>.partitionRegionNamePrefix</li>
+ * </ol>
+ * System properties will override values in the properties file.
+ * <p>
+ * We use a JCS region name for each partition that looks like this: partitionRegionNamePrefix + "_"
+ * + partitionNumber. The number is 0 indexed based.
+ * <p>
+ * @author Aaron Smuts
+ */
+public class PartitionedCacheAccess<K extends Serializable, V extends Serializable>
+    extends AbstractPropertyContainer
+    implements ICacheAccess<K, V>
+{
+    /** the logger. */
+    private static final Log log = LogFactory.getLog( PartitionedCacheAccess.class );
+
+    /** The number of partitions. */
+    private int numberOfPartitions = 1;
+
+    /**
+     * We use a JCS region name for each partition that looks like this: partitionRegionNamePrefix +
+     * "_" + partitionNumber
+     */
+    private String partitionRegionNamePrefix;
+
+    /** An array of partitions built during initialization. */
+    private ICacheAccess<K, V>[] partitions;
+
+    /** Is the class initialized. */
+    private boolean initialized = false;
+
+    /** Sets default properties heading and group. */
+    public PartitionedCacheAccess()
+    {
+        setPropertiesHeading( "PartitionedCacheAccess" );
+        setPropertiesGroup( "cache" );
+    }
+
+    /**
+     * Puts the value into the appropriate cache partition.
+     * <p>
+     * @param key key
+     * @param object object
+     * @throws CacheException on configuration problem
+     */
+    @Override
+    public void put( K key, V object )
+        throws CacheException
+    {
+        if ( key == null || object == null )
+        {
+            log.warn( "Bad input key [" + key + "].  Cannot put null into the cache." );
+            return;
+        }
+
+        if (!ensureInit())
+        {
+            return;
+        }
+
+        int partition = getPartitionNumberForKey( key );
+        try
+        {
+            partitions[partition].put( key, object );
+        }
+        catch ( CacheException e )
+        {
+            log.error( "Problem putting value for key [" + key + "] in cache [" + partitions[partition] + "]" );
+            throw e;
+        }
+    }
+
+    /**
+     * Puts in cache if an item does not exist with the name in that region.
+     * <p>
+     * @param key
+     * @param object
+     * @throws CacheException
+     */
+    @Override
+    public void putSafe( K key, V object )
+        throws CacheException
+    {
+        if ( key == null || object == null )
+        {
+            log.warn( "Bad input key [" + key + "].  Cannot putSafe null into the cache." );
+        }
+
+        if (!ensureInit())
+        {
+            return;
+        }
+
+        int partition = getPartitionNumberForKey( key );
+        partitions[partition].putSafe( key, object );
+    }
+
+    /**
+     * Puts the value into the appropriate cache partition.
+     * <p>
+     * @param key key
+     * @param object object
+     * @param attr
+     * @throws CacheException on configuration problem
+     */
+    @Override
+    public void put( K key, V object, IElementAttributes attr )
+        throws CacheException
+    {
+        if ( key == null || object == null )
+        {
+            log.warn( "Bad input key [" + key + "].  Cannot put null into the cache." );
+            return;
+        }
+
+        if (!ensureInit())
+        {
+            return;
+        }
+
+        int partition = getPartitionNumberForKey( key );
+
+        try
+        {
+            partitions[partition].put( key, object, attr );
+        }
+        catch ( CacheException e )
+        {
+            log.error( "Problem putting value for key [" + key + "] in cache [" + partitions[partition] + "]" );
+            throw e;
+        }
+    }
+
+    /**
+     * Gets the object for the key from the desired partition.
+     * <p>
+     * @param key key
+     * @return result, null if not found.
+     */
+    @Override
+    public V get( K key )
+    {
+        if ( key == null )
+        {
+            log.warn( "Input key is null." );
+            return null;
+        }
+
+        if (!ensureInit())
+        {
+            return null;
+        }
+
+        int partition = getPartitionNumberForKey( key );
+
+        return partitions[partition].get( key );
+    }
+
+    /**
+     * Gets the ICacheElement<K, V> (the wrapped object) for the key from the desired partition.
+     * <p>
+     * @param key key
+     * @return result, null if not found.
+     */
+    @Override
+    public ICacheElement<K, V> getCacheElement( K key )
+    {
+        if ( key == null )
+        {
+            log.warn( "Input key is null." );
+            return null;
+        }
+
+        if (!ensureInit())
+        {
+            return null;
+        }
+
+        int partition = getPartitionNumberForKey( key );
+
+        return partitions[partition].getCacheElement( key );
+    }
+
+    /**
+     * This is a getMultiple. We try to group the keys so that we make as few calls as needed.
+     * <p>
+     * @param names
+     * @return Map of keys to ICacheElement
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> getCacheElements( Set<K> names )
+    {
+        if ( names == null )
+        {
+            log.warn( "Bad input names cannot be null." );
+            return Collections.emptyMap();
+        }
+
+        if (!ensureInit())
+        {
+            return Collections.emptyMap();
+        }
+
+        @SuppressWarnings("unchecked") // No generic arrays in java
+        Set<K>[] dividedNames = new Set[this.getNumberOfPartitions()];
+
+        for (K key : names)
+        {
+            int partition = getPartitionNumberForKey( key );
+            if ( dividedNames[partition] == null )
+            {
+                dividedNames[partition] = new HashSet<K>();
+            }
+            dividedNames[partition].add( key );
+        }
+
+        Map<K, ICacheElement<K, V>> result = new HashMap<K, ICacheElement<K, V>>();
+        for ( int i = 0; i < partitions.length; i++ )
+        {
+            if ( dividedNames[i] != null && !dividedNames[i].isEmpty() )
+            {
+                result.putAll( partitions[i].getCacheElements( dividedNames[i] ) );
+            }
+        }
+        return result;
+    }
+
+    /**
+     * This is tricky. Do we need to get from all the partitions?
+     * <p>
+     * If this interface took an object, we could use the hashcode to determine the partition. Then
+     * we could use the toString for the pattern.
+     * <p>
+     * @param pattern
+     * @return HashMap key to value
+     */
+    @Override
+    public Map<K, V> getMatching( String pattern )
+    {
+        if ( pattern == null )
+        {
+            log.warn( "Input pattern is null." );
+            return null;
+        }
+
+        if (!ensureInit())
+        {
+            return null;
+        }
+
+        Map<K, V> result = new HashMap<K, V>();
+        for (ICacheAccess<K, V> partition : partitions)
+        {
+            result.putAll( partition.getMatching( pattern ) );
+        }
+
+        return result;
+    }
+
+    /**
+     * This is tricky. Do we need to get from all the partitions?
+     * <p>
+     * @param pattern
+     * @return HashMap key to ICacheElement
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> getMatchingCacheElements( String pattern )
+    {
+        if ( pattern == null )
+        {
+            log.warn( "Input pattern is null." );
+            return null;
+        }
+
+        if (!ensureInit())
+        {
+            return null;
+        }
+
+        Map<K, ICacheElement<K, V>> result = new HashMap<K, ICacheElement<K, V>>();
+        for (ICacheAccess<K, V> partition : partitions)
+        {
+            result.putAll( partition.getMatchingCacheElements( pattern ) );
+        }
+        return result;
+    }
+
+    /**
+     * Removes the item from the appropriate partition.
+     * <p>
+     * @param key
+     * @throws CacheException
+     */
+    @Override
+    public void remove( K key )
+        throws CacheException
+    {
+        if ( key == null )
+        {
+            log.warn( "Input key is null. Cannot remove null from the cache." );
+            return;
+        }
+
+        if (!ensureInit())
+        {
+            return;
+        }
+
+        int partition = getPartitionNumberForKey( key );
+        try
+        {
+            partitions[partition].remove( key );
+        }
+        catch ( CacheException e )
+        {
+            log.error( "Problem removing value for key [" + key + "] in cache [" + partitions[partition] + "]" );
+            throw e;
+        }
+    }
+
+    /**
+     * Calls free on each partition.
+     * <p>
+     * @param numberToFree
+     * @return number removed
+     * @throws CacheException
+     */
+    @Override
+    public int freeMemoryElements( int numberToFree )
+        throws CacheException
+    {
+        if (!ensureInit())
+        {
+            return 0;
+        }
+
+        int count = 0;
+        for (ICacheAccess<K, V> partition : partitions)
+        {
+            count += partition.freeMemoryElements( numberToFree );
+        }
+        return count;
+    }
+
+    /**
+     * @return ICompositeCacheAttributes from the first partition.
+     */
+    @Override
+    public ICompositeCacheAttributes getCacheAttributes()
+    {
+        if (!ensureInit())
+        {
+            return null;
+        }
+
+        if ( partitions.length == 0 )
+        {
+            return null;
+        }
+
+        return partitions[0].getCacheAttributes();
+    }
+
+    /**
+     * @return IElementAttributes from the first partition.
+     * @throws CacheException
+     */
+    @Override
+    public IElementAttributes getDefaultElementAttributes()
+        throws CacheException
+    {
+        if (!ensureInit())
+        {
+            return null;
+        }
+
+        if ( partitions.length == 0 )
+        {
+            return null;
+        }
+
+        return partitions[0].getDefaultElementAttributes();
+    }
+
+    /**
+     * This is no more efficient than simply getting the cache element.
+     * <p>
+     * @param key
+     * @return IElementAttributes
+     * @throws CacheException
+     */
+    @Override
+    public IElementAttributes getElementAttributes( K key )
+        throws CacheException
+    {
+        if ( key == null )
+        {
+            log.warn( "Input key is null. Cannot getElementAttributes for null from the cache." );
+            return null;
+        }
+
+        if (!ensureInit())
+        {
+            return null;
+        }
+
+        int partition = getPartitionNumberForKey( key );
+
+        return partitions[partition].getElementAttributes( key );
+    }
+
+    /**
+     * Resets the attributes for this item. This has the same effect as an update, in most cases.
+     * None of the auxiliaries are optimized to do this more efficiently than a simply update.
+     * <p>
+     * @param key
+     * @param attributes
+     * @throws CacheException
+     */
+    @Override
+    public void resetElementAttributes( K key, IElementAttributes attributes )
+        throws CacheException
+    {
+        if ( key == null )
+        {
+            log.warn( "Input key is null. Cannot resetElementAttributes for null." );
+            return;
+        }
+
+        if (!ensureInit())
+        {
+            return;
+        }
+
+        int partition = getPartitionNumberForKey( key );
+
+        partitions[partition].resetElementAttributes( key, attributes );
+    }
+
+    /**
+     * Sets the attributes on all the partitions.
+     * <p>
+     * @param cattr
+     */
+    @Override
+    public void setCacheAttributes( ICompositeCacheAttributes cattr )
+    {
+        if (!ensureInit())
+        {
+            return;
+        }
+
+        for (ICacheAccess<K, V> partition : partitions)
+        {
+            partition.setCacheAttributes( cattr );
+        }
+    }
+
+    /**
+     * Removes all of the elements from a region.
+     * <p>
+     * @throws CacheException
+     */
+    @Override
+    public void clear()
+        throws CacheException
+    {
+        if (!ensureInit())
+        {
+            return;
+        }
+
+        for (ICacheAccess<K, V> partition : partitions)
+        {
+            partition.clear();
+        }
+    }
+
+    /**
+     * This method is does not reset the attributes for items already in the cache. It could
+     * potentially do this for items in memory, and maybe on disk (which would be slow) but not
+     * remote items. Rather than have unpredictable behavior, this method just sets the default
+     * attributes. Items subsequently put into the cache will use these defaults if they do not
+     * specify specific attributes.
+     * <p>
+     * @param attr the default attributes.
+     * @throws CacheException if something goes wrong.
+     */
+    @Override
+    public void setDefaultElementAttributes( IElementAttributes attr )
+        throws CacheException
+    {
+        if (!ensureInit())
+        {
+            return;
+        }
+
+        for (ICacheAccess<K, V> partition : partitions)
+        {
+            partition.setDefaultElementAttributes(attr);
+        }
+    }
+
+    /**
+     * This returns the ICacheStats object with information on this region and its auxiliaries.
+     * <p>
+     * This data can be formatted as needed.
+     * <p>
+     * @return ICacheStats
+     */
+    @Override
+    public ICacheStats getStatistics()
+    {
+        if (!ensureInit())
+        {
+            return null;
+        }
+
+        if ( partitions.length == 0 )
+        {
+            return null;
+        }
+
+        return partitions[0].getStatistics();
+    }
+
+    /**
+     * @return A String version of the stats.
+     */
+    @Override
+    public String getStats()
+    {
+        if (!ensureInit())
+        {
+            return "";
+        }
+
+        StringBuilder stats = new StringBuilder();
+        for (ICacheAccess<K, V> partition : partitions)
+        {
+            stats.append(partition.getStats());
+            stats.append("\n");
+        }
+
+        return stats.toString();
+    }
+
+    /**
+     * Dispose this region. Flushes objects to and closes auxiliary caches. This is a shutdown
+     * command!
+     * <p>
+     * To simply remove all elements from the region use clear().
+     */
+    @Override
+    public synchronized void dispose()
+    {
+        if (!ensureInit())
+        {
+            return;
+        }
+
+        for (ICacheAccess<K, V> partition : partitions)
+        {
+            partition.dispose();
+        }
+
+        initialized = false;
+    }
+
+    /**
+     * This expects a numeric key. If the key cannot be converted into a number, we will return 0.
+     * TODO we could md5 it or get the hashcode.
+     * <p>
+     * We determine the partition by taking the mod of the number of partitions.
+     * <p>
+     * @param key key
+     * @return the partition number.
+     */
+    protected int getPartitionNumberForKey( K key )
+    {
+        if ( key == null )
+        {
+            return 0;
+        }
+
+        long keyNum = getNumericValueForKey( key );
+
+        int partition = (int) ( keyNum % getNumberOfPartitions() );
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Using partition [" + partition + "] for key [" + key + "]" );
+        }
+
+        return partition;
+    }
+
+    /**
+     * This can be overridden for special purposes.
+     * <p>
+     * @param key key
+     * @return long
+     */
+    public long getNumericValueForKey( K key )
+    {
+        String keyString = key.toString();
+        long keyNum = -1;
+        try
+        {
+            keyNum = Long.parseLong( keyString );
+        }
+        catch ( NumberFormatException e )
+        {
+            // THIS IS UGLY, but I can't think of a better failsafe right now.
+            keyNum = key.hashCode();
+            log.warn( "Couldn't convert [" + key + "] into a number.  Will use hashcode [" + keyNum + "]" );
+        }
+        return keyNum;
+    }
+
+    /**
+     * Initialize if we haven't already.
+     * <p>
+     * @throws ConfigurationException on configuration problem
+     */
+    protected synchronized boolean ensureInit()
+    {
+        if ( !initialized )
+        {
+            try
+            {
+                initialize();
+            }
+            catch ( ConfigurationException e )
+            {
+                log.error( "Couldn't configure partioned access.", e );
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * Use the partition prefix and the number of partitions to get JCS regions.
+     * <p>
+     * @throws ConfigurationException on configuration problem
+     */
+    protected synchronized void initialize()
+        throws ConfigurationException
+    {
+        ensureProperties();
+
+        @SuppressWarnings("unchecked") // No generic arrays in java
+        ICacheAccess<K, V>[] tempPartitions = new ICacheAccess[this.getNumberOfPartitions()];
+        for ( int i = 0; i < this.getNumberOfPartitions(); i++ )
+        {
+            String regionName = this.getPartitionRegionNamePrefix() + "_" + i;
+            try
+            {
+                tempPartitions[i] = JCS.getInstance( regionName );
+            }
+            catch ( CacheException e )
+            {
+                log.error( "Problem getting cache for region [" + regionName + "]" );
+            }
+        }
+
+        partitions = tempPartitions;
+        initialized = true;
+    }
+
+    /**
+     * Loads in the needed configuration settings. System properties are checked first. A system
+     * property will override local property value.
+     * <p>
+     * Loads the following JCS Cache specific properties:
+     * <ul>
+     * <li>heading.numberOfPartitions</li>
+     * <li>heading.partitionRegionNamePrefix</li>
+     * </ul>
+     * @throws ConfigurationException on configuration problem
+     */
+    @Override
+    protected void handleProperties()
+        throws ConfigurationException
+    {
+        // Number of Partitions.
+        String numberOfPartitionsPropertyName = this.getPropertiesHeading() + ".numberOfPartitions";
+        String numberOfPartitionsPropertyValue = getPropertyForName( numberOfPartitionsPropertyName, true );
+        try
+        {
+            this.setNumberOfPartitions( Integer.parseInt( numberOfPartitionsPropertyValue ) );
+        }
+        catch ( NumberFormatException e )
+        {
+            String message = "Could not convert [" + numberOfPartitionsPropertyValue + "] into a number for ["
+                + numberOfPartitionsPropertyName + "]";
+            log.error( message );
+            throw new ConfigurationException( message );
+        }
+
+        // Partition Name Prefix.
+        String prefixPropertyName = this.getPropertiesHeading() + ".partitionRegionNamePrefix";
+        String prefix = getPropertyForName( prefixPropertyName, true );
+        this.setPartitionRegionNamePrefix( prefix );
+    }
+
+    /**
+     * Checks the system properties before the properties.
+     * <p>
+     * @param propertyName name
+     * @param required is it required?
+     * @return the property value if one is found
+     * @throws ConfigurationException thrown if it is required and not found.
+     */
+    protected String getPropertyForName( String propertyName, boolean required )
+        throws ConfigurationException
+    {
+        String propertyValue = null;
+        propertyValue = System.getProperty( propertyName );
+        if ( propertyValue != null )
+        {
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "Found system property override: Name [" + propertyName + "] Value [" + propertyValue + "]" );
+            }
+        }
+        else
+        {
+            propertyValue = this.getProperties().getProperty( propertyName );
+            if ( required && propertyValue == null )
+            {
+                String message = "Could not find required property [" + propertyName + "] in propertiesGroup ["
+                    + this.getPropertiesGroup() + "]";
+                log.error( message );
+                throw new ConfigurationException( message );
+            }
+            else
+            {
+                if ( log.isInfoEnabled() )
+                {
+                    log.info( "Name [" + propertyName + "] Value [" + propertyValue + "]" );
+                }
+            }
+        }
+        return propertyValue;
+    }
+
+    /**
+     * @param numberOfPartitions The numberOfPartitions to set.
+     */
+    protected void setNumberOfPartitions( int numberOfPartitions )
+    {
+        this.numberOfPartitions = numberOfPartitions;
+    }
+
+    /**
+     * @return Returns the numberOfPartitions.
+     */
+    protected int getNumberOfPartitions()
+    {
+        return numberOfPartitions;
+    }
+
+    /**
+     * @param partitionRegionNamePrefix The partitionRegionNamePrefix to set.
+     */
+    protected void setPartitionRegionNamePrefix( String partitionRegionNamePrefix )
+    {
+        this.partitionRegionNamePrefix = partitionRegionNamePrefix;
+    }
+
+    /**
+     * @return Returns the partitionRegionNamePrefix.
+     */
+    protected String getPartitionRegionNamePrefix()
+    {
+        return partitionRegionNamePrefix;
+    }
+
+    /**
+     * @param partitions The partitions to set.
+     */
+    protected void setPartitions( ICacheAccess<K, V>[] partitions )
+    {
+        this.partitions = partitions;
+    }
+
+    /**
+     * @return Returns the partitions.
+     */
+    protected ICacheAccess<K, V>[] getPartitions()
+    {
+        return partitions;
+    }
+}
diff --git a/src/org/apache/commons/jcs/access/behavior/ICacheAccess.java b/src/org/apache/commons/jcs/access/behavior/ICacheAccess.java
new file mode 100644
index 0000000..6f8ac8d
--- /dev/null
+++ b/src/org/apache/commons/jcs/access/behavior/ICacheAccess.java
@@ -0,0 +1,167 @@
+package org.apache.commons.jcs.access.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.access.exception.CacheException;
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.behavior.IElementAttributes;
+
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * ICacheAccess defines the behavior for client access.
+ */
+public interface ICacheAccess<K, V>
+    extends ICacheAccessManagement
+{
+    /**
+     * Basic get method.
+     * <p>
+     * @param name
+     * @return Object or null if not found.
+     */
+    V get( K name );
+
+    /**
+     * Retrieve matching objects from the cache region this instance provides access to.
+     * <p>
+     * @param pattern - a key pattern for the objects stored
+     * @return A map of key to values. These are stripped from the wrapper.
+     */
+    Map<K, V> getMatching( String pattern );
+
+    /**
+     * Puts in cache if an item does not exist with the name in that region.
+     * <p>
+     * @param name
+     * @param obj
+     * @throws CacheException
+     */
+    void putSafe( K name, V obj )
+        throws CacheException;
+
+    /**
+     * Puts and/or overrides an element with the name in that region.
+     * <p>
+     * @param name
+     * @param obj
+     * @throws CacheException
+     */
+    void put( K name, V obj )
+        throws CacheException;
+
+    /**
+     * Description of the Method
+     * <p>
+     * @param name
+     * @param obj
+     * @param attr
+     * @throws CacheException
+     */
+    void put( K name, V obj, IElementAttributes attr )
+        throws CacheException;
+
+    /**
+     * This method returns the ICacheElement<K, V> wrapper which provides access to element info and other
+     * attributes.
+     * <p>
+     * This returns a reference to the wrapper. Any modifications will be reflected in the cache. No
+     * defensive copy is made.
+     * <p>
+     * This method is most useful if you want to determine things such as the how long the element
+     * has been in the cache.
+     * <p>
+     * The last access time in the ElementAttributes should be current.
+     * <p>
+     * @param name Key the object is stored as
+     * @return The ICacheElement<K, V> if the object is found or null
+     */
+    ICacheElement<K, V> getCacheElement( K name );
+
+    /**
+     * Get multiple elements from the cache based on a set of cache keys.
+     * <p>
+     * This method returns the ICacheElement<K, V> wrapper which provides access to element info and other
+     * attributes.
+     * <p>
+     * This returns a reference to the wrapper. Any modifications will be reflected in the cache. No
+     * defensive copy is made.
+     * <p>
+     * This method is most useful if you want to determine things such as the how long the element
+     * has been in the cache.
+     * <p>
+     * The last access time in the ElementAttributes should be current.
+     * <p>
+     * @param names set of Object cache keys
+     * @return a map of Object key to ICacheElement<K, V> element, or empty map if none of the keys are
+     *         present
+     */
+    Map<K, ICacheElement<K, V>> getCacheElements( Set<K> names );
+
+    /**
+     * Get multiple elements from the cache based on a set of cache keys.
+     * <p>
+     * This method returns the ICacheElement<K, V> wrapper which provides access to element info and other
+     * attributes.
+     * <p>
+     * This returns a reference to the wrapper. Any modifications will be reflected in the cache. No
+     * defensive copy is made.
+     * <p>
+     * This method is most useful if you want to determine things such as the how long the element
+     * has been in the cache.
+     * <p>
+     * The last access time in the ElementAttributes should be current.
+     * <p>
+     * @param pattern key search pattern
+     * @return a map of Object key to ICacheElement<K, V> element, or empty map if no keys match the
+     *         pattern
+     */
+    Map<K, ICacheElement<K, V>> getMatchingCacheElements( String pattern );
+
+    /**
+     * Remove an object for this key if one exists, else do nothing.
+     * <p>
+     * @param name
+     * @throws CacheException
+     */
+    void remove( K name )
+        throws CacheException;
+
+    /**
+     * Reset the attributes on the object matching this key name.
+     * <p>
+     * @param name
+     * @param attributes
+     * @throws CacheException
+     */
+    void resetElementAttributes( K name, IElementAttributes attributes )
+        throws CacheException;
+
+    /**
+     * Gets the elementAttributes attribute of the ICacheAccess object
+     * <p>
+     * @param name
+     * @return The elementAttributes value
+     * @throws CacheException
+     */
+    IElementAttributes getElementAttributes( K name )
+        throws CacheException;
+}
diff --git a/src/org/apache/commons/jcs/access/behavior/ICacheAccessManagement.java b/src/org/apache/commons/jcs/access/behavior/ICacheAccessManagement.java
new file mode 100644
index 0000000..21c01f4
--- /dev/null
+++ b/src/org/apache/commons/jcs/access/behavior/ICacheAccessManagement.java
@@ -0,0 +1,111 @@
+package org.apache.commons.jcs.access.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.access.exception.CacheException;
+import org.apache.commons.jcs.engine.behavior.ICompositeCacheAttributes;
+import org.apache.commons.jcs.engine.behavior.IElementAttributes;
+import org.apache.commons.jcs.engine.stats.behavior.ICacheStats;
+
+/**
+ * ICacheAccessManagement defines the methods for cache management, cleanup and shutdown.
+ */
+public interface ICacheAccessManagement
+{
+    /**
+     * Dispose this region. Flushes objects to and closes auxiliary caches. This is a shutdown
+     * command!
+     * <p>
+     * To simply remove all elements from the region use clear().
+     */
+    void dispose();
+
+    /**
+     * Removes all of the elements from a region.
+     * <p>
+     * @throws CacheException
+     */
+    void clear() throws CacheException;
+
+    /**
+     * GetElementAttributes will return an attribute object describing the current attributes
+     * associated with the object name. If no name parameter is available, the attributes for the
+     * region will be returned. The name object must override the Object.equals and Object.hashCode
+     * methods.
+     * <p>
+     * @return The elementAttributes value
+     * @throws CacheException
+     */
+    IElementAttributes getDefaultElementAttributes()
+        throws CacheException;
+
+    /**
+     * This method is does not reset the attributes for items already in the cache. It could
+     * potentially do this for items in memory, and maybe on disk (which would be slow) but not
+     * remote items. Rather than have unpredictable behavior, this method just sets the default
+     * attributes. Items subsequently put into the cache will use these defaults if they do not
+     * specify specific attributes.
+     * <p>
+     * @param attr the default attributes.
+     * @throws CacheException if something goes wrong.
+     */
+    void setDefaultElementAttributes( IElementAttributes attr ) throws CacheException;
+
+    /**
+     * Gets the ICompositeCacheAttributes of the cache region
+     * <p>
+     * @return ICompositeCacheAttributes
+     */
+    ICompositeCacheAttributes getCacheAttributes();
+
+    /**
+     * Sets the ICompositeCacheAttributes of the cache region
+     * <p>
+     * @param cattr The new ICompositeCacheAttribute value
+     */
+    void setCacheAttributes( ICompositeCacheAttributes cattr );
+
+    /**
+     * This instructs the memory cache to remove the <i>numberToFree</i> according to its eviction
+     * policy. For example, the LRUMemoryCache will remove the <i>numberToFree</i> least recently
+     * used items. These will be spooled to disk if a disk auxiliary is available.
+     * <p>
+     * @param numberToFree
+     * @return the number that were removed. if you ask to free 5, but there are only 3, you will
+     *         get 3.
+     * @throws CacheException
+     */
+    int freeMemoryElements( int numberToFree )
+        throws CacheException;
+
+    /**
+     * This returns the ICacheStats object with information on this region and its auxiliaries.
+     * <p>
+     * This data can be formatted as needed.
+     * <p>
+     * @return ICacheStats
+     */
+    ICacheStats getStatistics();
+
+    /**
+     * @return A String version of the stats.
+     */
+    String getStats();
+}
diff --git a/src/org/apache/commons/jcs/access/behavior/IGroupCacheAccess.java b/src/org/apache/commons/jcs/access/behavior/IGroupCacheAccess.java
new file mode 100644
index 0000000..4527d24
--- /dev/null
+++ b/src/org/apache/commons/jcs/access/behavior/IGroupCacheAccess.java
@@ -0,0 +1,89 @@
+package org.apache.commons.jcs.access.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.access.exception.CacheException;
+import org.apache.commons.jcs.engine.behavior.IElementAttributes;
+
+import java.util.Set;
+
+/**
+ * IGroupCacheAccess defines group specific behavior for the client access
+ * classes.
+ */
+public interface IGroupCacheAccess<K, V>
+    extends ICacheAccessManagement
+{
+    /**
+     * Gets the g attribute of the IGroupCacheAccess object
+     * <p>
+     * @param name
+     * @param group
+     *            the name of the group to associate this with.
+     * @return The object that is keyed by the name in the group
+     */
+    V getFromGroup( K name, String group );
+
+    /**
+     * Puts an item in the cache associated with this group.
+     * <p>
+     * @param key
+     * @param group
+     * @param obj
+     * @throws CacheException
+     */
+    void putInGroup( K key, String group, V obj )
+        throws CacheException;
+
+    /**
+     * Put in the cache associated with this group using these attributes.
+     * <p>
+     * @param key
+     * @param group
+     * @param obj
+     * @param attr
+     * @throws CacheException
+     */
+    void putInGroup( K key, String group, V obj, IElementAttributes attr )
+        throws CacheException;
+
+    /**
+     * Remove the item from this group in this region by this name.
+     * <p>
+     * @param name
+     * @param group
+     */
+    void removeFromGroup( K name, String group );
+
+    /**
+     * Gets the set of keys of objects currently in the group
+     * <p>
+     * @param group
+     * @return the set of group keys.
+     */
+    Set<K> getGroupKeys( String group );
+
+    /**
+     * Invalidates a group
+     * <p>
+     * @param group
+     */
+    void invalidateGroup( String group );
+}
diff --git a/src/org/apache/commons/jcs/access/exception/CacheException.java b/src/org/apache/commons/jcs/access/exception/CacheException.java
new file mode 100644
index 0000000..78479b1
--- /dev/null
+++ b/src/org/apache/commons/jcs/access/exception/CacheException.java
@@ -0,0 +1,66 @@
+package org.apache.commons.jcs.access.exception;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * This is the most general exception the cache throws.
+ */
+public class CacheException
+    extends RuntimeException
+{
+    /** Don't change. */
+    private static final long serialVersionUID = 8725795372935590265L;
+
+    /**
+     * Default
+     */
+    public CacheException()
+    {
+        super();
+    }
+
+    /**
+     * Constructor for the CacheException object
+     * @param nested a nested exception
+     */
+    public CacheException( Throwable nested )
+    {
+        super(nested);
+    }
+
+    /**
+     * Constructor for the CacheException object
+     * @param message the exception message
+     */
+    public CacheException( String message )
+    {
+        super(message);
+    }
+
+    /**
+     * Constructor for the CacheException object
+     * @param message the exception message
+     * @param nested a nested exception
+     */
+    public CacheException(String message, Throwable nested)
+    {
+        super(message, nested);
+    }
+}
diff --git a/src/org/apache/commons/jcs/access/exception/ConfigurationException.java b/src/org/apache/commons/jcs/access/exception/ConfigurationException.java
new file mode 100644
index 0000000..03f4890
--- /dev/null
+++ b/src/org/apache/commons/jcs/access/exception/ConfigurationException.java
@@ -0,0 +1,44 @@
+package org.apache.commons.jcs.access.exception;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/** Thrown if there is some severe configuration problem that makes the cache nonfunctional. */
+public class ConfigurationException
+    extends CacheException
+{
+    /** Don't change. */
+    private static final long serialVersionUID = 6881044536186097055L;
+
+    /** Constructor for the ConfigurationException object */
+    public ConfigurationException()
+    {
+        super();
+    }
+
+    /**
+     * Constructor for the ConfigurationException object.
+     * <p>
+     * @param message
+     */
+    public ConfigurationException( String message )
+    {
+        super( message );
+    }
+}
diff --git a/src/org/apache/commons/jcs/access/exception/InvalidArgumentException.java b/src/org/apache/commons/jcs/access/exception/InvalidArgumentException.java
new file mode 100644
index 0000000..cfb4435
--- /dev/null
+++ b/src/org/apache/commons/jcs/access/exception/InvalidArgumentException.java
@@ -0,0 +1,47 @@
+package org.apache.commons.jcs.access.exception;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * InvalidArgumentException is thrown if an argument is passed to the cache that is invalid. For
+ * instance, null values passed to put result in this exception.
+ */
+public class InvalidArgumentException
+    extends CacheException
+{
+    /** Don't change. */
+    private static final long serialVersionUID = -6058373692208755562L;
+
+    /** Constructor for the InvalidArgumentException object */
+    public InvalidArgumentException()
+    {
+        super();
+    }
+
+    /**
+     * Constructor for the InvalidArgumentException object.
+     * <p>
+     * @param message
+     */
+    public InvalidArgumentException( String message )
+    {
+        super( message );
+    }
+}
diff --git a/src/org/apache/commons/jcs/access/exception/InvalidGroupException.java b/src/org/apache/commons/jcs/access/exception/InvalidGroupException.java
new file mode 100644
index 0000000..870a402
--- /dev/null
+++ b/src/org/apache/commons/jcs/access/exception/InvalidGroupException.java
@@ -0,0 +1,47 @@
+package org.apache.commons.jcs.access.exception;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * InvalidGroupException
+ */
+public class InvalidGroupException
+    extends CacheException
+{
+    /** Don't change. */
+    private static final long serialVersionUID = -5219807114008843480L;
+
+    /** Constructor for the InvalidGroupException object */
+    public InvalidGroupException()
+    {
+        super();
+    }
+
+    /**
+     * Constructor for the InvalidGroupException object
+     * <p>
+     * @param message
+     */
+    public InvalidGroupException( String message )
+    {
+        super( message );
+    }
+
+}
diff --git a/src/org/apache/commons/jcs/access/exception/InvalidHandleException.java b/src/org/apache/commons/jcs/access/exception/InvalidHandleException.java
new file mode 100644
index 0000000..6b0e6d3
--- /dev/null
+++ b/src/org/apache/commons/jcs/access/exception/InvalidHandleException.java
@@ -0,0 +1,48 @@
+package org.apache.commons.jcs.access.exception;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * InvalidHandleException is not used.
+ */
+public class InvalidHandleException
+    extends CacheException
+{
+    /** Don't change. */
+    private static final long serialVersionUID = -5947822454839845924L;
+
+    /** Constructor for the InvalidHandleException object */
+    public InvalidHandleException()
+    {
+        // nothing
+        super();
+    }
+
+    /**
+     * Constructor for the InvalidHandleException object.
+     * <p>
+     * @param message
+     */
+    public InvalidHandleException( String message )
+    {
+        super( message );
+    }
+
+}
diff --git a/src/org/apache/commons/jcs/access/exception/ObjectExistsException.java b/src/org/apache/commons/jcs/access/exception/ObjectExistsException.java
new file mode 100644
index 0000000..edef1a4
--- /dev/null
+++ b/src/org/apache/commons/jcs/access/exception/ObjectExistsException.java
@@ -0,0 +1,53 @@
+package org.apache.commons.jcs.access.exception;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * The putSafe method on the JCS convenience class throws this exception if the object is already
+ * present in the cache.
+ * <p>
+ * I'm removing this exception from normal use.
+ * <p>
+ * The overhead of throwing exceptions and the cumbersomeness of coding around exceptions warrants
+ * removal. Exceptions like this don't make sense to throw in the course of normal operations to
+ * signify a normal and expected condition. Returning null if an object isn't found is sufficient.
+ */
+public class ObjectExistsException
+    extends CacheException
+{
+    /** Don't change. */
+    private static final long serialVersionUID = -3779745827993383872L;
+
+    /** Constructor for the ObjectExistsException object */
+    public ObjectExistsException()
+    {
+        super();
+    }
+
+    /**
+     * Constructor for the ObjectExistsException object
+     * @param message
+     */
+    public ObjectExistsException( String message )
+    {
+        super( message );
+    }
+
+}
diff --git a/src/org/apache/commons/jcs/access/exception/ObjectNotFoundException.java b/src/org/apache/commons/jcs/access/exception/ObjectNotFoundException.java
new file mode 100644
index 0000000..8dca2de
--- /dev/null
+++ b/src/org/apache/commons/jcs/access/exception/ObjectNotFoundException.java
@@ -0,0 +1,51 @@
+package org.apache.commons.jcs.access.exception;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * ObjectNotFoundException
+ * <p>
+ * TODO see if we can remove this.
+ * <p>
+ * This is thrown from the composite cache if you as for the element attributes and the element does
+ * not exist.
+ */
+public class ObjectNotFoundException
+    extends CacheException
+{
+    /** Don't change. */
+    private static final long serialVersionUID = 5684353421076546842L;
+
+    /** Constructor for the ObjectNotFoundException object */
+    public ObjectNotFoundException()
+    {
+        super();
+    }
+
+    /**
+     * Constructor for the ObjectNotFoundException object
+     * @param message
+     */
+    public ObjectNotFoundException( String message )
+    {
+        super( message );
+    }
+
+}
diff --git a/src/org/apache/commons/jcs/access/package.html b/src/org/apache/commons/jcs/access/package.html
new file mode 100644
index 0000000..477e5cc
--- /dev/null
+++ b/src/org/apache/commons/jcs/access/package.html
@@ -0,0 +1,27 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<html>
+  <head>
+  </head>
+  <body>
+    Contains classes for accessing the cache. The CacheAccess interface, which
+    all classes in this package implement, provides all the methods a client
+    should need to use a Cache.
+  </body>
+</html>
diff --git a/src/org/apache/commons/jcs/admin/CacheElementInfo.java b/src/org/apache/commons/jcs/admin/CacheElementInfo.java
new file mode 100644
index 0000000..1c09423
--- /dev/null
+++ b/src/org/apache/commons/jcs/admin/CacheElementInfo.java
@@ -0,0 +1,124 @@
+package org.apache.commons.jcs.admin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.beans.ConstructorProperties;
+
+
+/**
+ * Stores info on a cache element for the template
+ */
+public class CacheElementInfo
+{
+    /** element key */
+    private final String key;
+
+    /** is it eternal */
+    private final boolean eternal;
+
+    /** when it was created */
+    private final String createTime;
+
+    /** max life */
+    private final long maxLifeSeconds;
+
+    /** when it will expire */
+    private final long expiresInSeconds;
+
+    /**
+     * Parameterized constructor
+     *
+	 * @param key element key
+	 * @param eternal is it eternal
+	 * @param createTime when it was created
+	 * @param maxLifeSeconds max life
+	 * @param expiresInSeconds when it will expire
+	 */
+    @ConstructorProperties({"key", "eternal", "createTime", "maxLifeSeconds", "expiresInSeconds"})
+    public CacheElementInfo(String key, boolean eternal, String createTime,
+			long maxLifeSeconds, long expiresInSeconds)
+    {
+		super();
+		this.key = key;
+		this.eternal = eternal;
+		this.createTime = createTime;
+		this.maxLifeSeconds = maxLifeSeconds;
+		this.expiresInSeconds = expiresInSeconds;
+	}
+
+	/**
+     * @return a string representation of the key
+     */
+    public String getKey()
+    {
+        return this.key;
+    }
+
+    /**
+     * @return true if the item does not expire
+     */
+    public boolean isEternal()
+    {
+        return this.eternal;
+    }
+
+    /**
+     * @return the time the object was created
+     */
+    public String getCreateTime()
+    {
+        return this.createTime;
+    }
+
+    /**
+     * Ignored if isEternal
+     * @return the longest this object can live.
+     */
+    public long getMaxLifeSeconds()
+    {
+        return this.maxLifeSeconds;
+    }
+
+    /**
+     * Ignored if isEternal
+     * @return how many seconds until this object expires.
+     */
+    public long getExpiresInSeconds()
+    {
+        return this.expiresInSeconds;
+    }
+
+    /**
+     * @return string info on the item
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder buf = new StringBuilder();
+        buf.append( "\nCacheElementInfo " );
+        buf.append( "\n Key [" ).append( getKey() ).append( "]" );
+        buf.append( "\n Eternal [" ).append( isEternal() ).append( "]" );
+        buf.append( "\n CreateTime [" ).append( getCreateTime() ).append( "]" );
+        buf.append( "\n MaxLifeSeconds [" ).append( getMaxLifeSeconds() ).append( "]" );
+        buf.append( "\n ExpiresInSeconds [" ).append( getExpiresInSeconds() ).append( "]" );
+
+        return buf.toString();
+    }
+}
diff --git a/src/org/apache/commons/jcs/admin/CacheRegionInfo.java b/src/org/apache/commons/jcs/admin/CacheRegionInfo.java
new file mode 100644
index 0000000..963f5d4
--- /dev/null
+++ b/src/org/apache/commons/jcs/admin/CacheRegionInfo.java
@@ -0,0 +1,180 @@
+package org.apache.commons.jcs.admin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.beans.ConstructorProperties;
+
+
+
+/**
+ * Stores info on a cache region for the template
+ */
+public class CacheRegionInfo
+{
+    /** The name of the cache region */
+    private final String cacheName;
+
+    /** The size of the cache region */
+    private final int cacheSize;
+
+    /** The status of the cache region */
+    private final String cacheStatus;
+
+    /** The statistics of the cache region */
+    private final String cacheStatistics;
+
+    /** The number of memory hits in the cache region */
+    private final int hitCountRam;
+
+    /** The number of auxiliary hits in the cache region */
+    private final int hitCountAux;
+
+    /** The number of misses in the cache region because the items were not found */
+    private final int missCountNotFound;
+
+    /** The number of misses in the cache region because the items were expired */
+    private final int missCountExpired;
+
+    /** The number of bytes counted so far, will be a total of all items */
+    private final long byteCount;
+
+    /**
+     * Parameterized constructor
+     *
+	 * @param cacheName The name of the cache region
+	 * @param cacheSize The size of the cache region
+	 * @param cacheStatus The status of the cache region
+	 * @param cacheStatistics The statistics of the cache region
+	 * @param hitCountRam The number of memory hits in the cache region
+	 * @param hitCountAux The number of auxiliary hits in the cache region
+	 * @param missCountNotFound The number of misses in the cache region because the items were not found
+	 * @param missCountExpired The number of misses in the cache region because the items were expired
+	 * @param byteCount The number of bytes counted so far, will be a total of all items
+	 */
+    @ConstructorProperties({"cacheName", "cacheSize", "cacheStatus", "cacheStatistics",
+    	"hitCountRam", "hitCountAux", "missCountNotFound", "missCountExpired", "byteCount"})
+	public CacheRegionInfo(String cacheName, int cacheSize, String cacheStatus,
+			String cacheStatistics, int hitCountRam, int hitCountAux,
+			int missCountNotFound, int missCountExpired, long byteCount)
+	{
+		super();
+		this.cacheName = cacheName;
+		this.cacheSize = cacheSize;
+		this.cacheStatus = cacheStatus;
+		this.cacheStatistics = cacheStatistics;
+		this.hitCountRam = hitCountRam;
+		this.hitCountAux = hitCountAux;
+		this.missCountNotFound = missCountNotFound;
+		this.missCountExpired = missCountExpired;
+		this.byteCount = byteCount;
+	}
+
+	/**
+	 * @return the cacheName
+	 */
+	public String getCacheName()
+	{
+		return this.cacheName;
+	}
+
+	/**
+	 * @return the cacheSize
+	 */
+	public int getCacheSize()
+	{
+		return this.cacheSize;
+	}
+
+	/**
+     * @return a status string
+     */
+    public String getCacheStatus()
+    {
+        return this.cacheStatus;
+    }
+
+    /**
+     * Return the statistics for the region.
+     * <p>
+     * @return String
+     */
+    public String getCacheStatistics()
+    {
+        return this.cacheStatistics;
+    }
+
+    /**
+	 * @return the hitCountRam
+	 */
+	public int getHitCountRam()
+	{
+		return hitCountRam;
+	}
+
+	/**
+	 * @return the hitCountAux
+	 */
+	public int getHitCountAux()
+	{
+		return hitCountAux;
+	}
+
+	/**
+	 * @return the missCountNotFound
+	 */
+	public int getMissCountNotFound()
+	{
+		return missCountNotFound;
+	}
+
+	/**
+	 * @return the missCountExpired
+	 */
+	public int getMissCountExpired()
+	{
+		return missCountExpired;
+	}
+
+	/**
+     * @return total byte count
+     */
+    public long getByteCount()
+    {
+        return this.byteCount;
+    }
+
+    /**
+     * @return string info on the region
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder buf = new StringBuilder();
+        buf.append( "\nCacheRegionInfo " );
+        if ( cacheName != null )
+        {
+            buf.append( "\n CacheName [" + cacheName + "]" );
+            buf.append( "\n Status [" + cacheStatus + "]" );
+        }
+        buf.append( "\n ByteCount [" + getByteCount() + "]" );
+
+        return buf.toString();
+    }
+}
diff --git a/src/org/apache/commons/jcs/admin/CountingOnlyOutputStream.java b/src/org/apache/commons/jcs/admin/CountingOnlyOutputStream.java
new file mode 100644
index 0000000..ea0baf8
--- /dev/null
+++ b/src/org/apache/commons/jcs/admin/CountingOnlyOutputStream.java
@@ -0,0 +1,84 @@
+package org.apache.commons.jcs.admin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.io.OutputStream;
+
+/**
+ * Keeps track of the number of bytes written to it, but doesn't write them anywhere.
+ */
+public class CountingOnlyOutputStream
+    extends OutputStream
+{
+    /** number of bytes passed through */
+    private int count; // TODO should this be long?
+
+    /**
+     * count as we write.
+     * <p>
+     * @param b
+     * @throws IOException
+     */
+    @Override
+    public void write( byte[] b )
+        throws IOException
+    {
+        this.count += b.length;
+    }
+
+    /**
+     * count as we write.
+     * <p>
+     * @param b
+     * @param off
+     * @param len
+     * @throws IOException
+     */
+    @Override
+    public void write( byte[] b, int off, int len )
+        throws IOException
+    {
+        this.count += len;
+    }
+
+    /**
+     * count as we write.
+     * <p>
+     * @param b
+     * @throws IOException
+     */
+    @Override
+    public void write( int b )
+        throws IOException
+    {
+        this.count++;
+    }
+
+    /**
+     * The number of bytes that have passed through this stream.
+     * <p>
+     * @return int
+     */
+    public int getCount()
+    {
+        return this.count;
+    }
+}
diff --git a/src/org/apache/commons/jcs/admin/JCSAdmin.jsp b/src/org/apache/commons/jcs/admin/JCSAdmin.jsp
new file mode 100644
index 0000000..d92b0af
--- /dev/null
+++ b/src/org/apache/commons/jcs/admin/JCSAdmin.jsp
@@ -0,0 +1,310 @@
+<%--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+--%>
+<%@page import="org.apache.commons.jcs.JCS"%>
+<%@page import="org.apache.commons.jcs.access.CacheAccess" %>
+<%@page import="org.apache.commons.jcs.admin.CacheElementInfo" %>
+<%@page import="org.apache.commons.jcs.admin.CacheRegionInfo" %>
+<%@page import="java.io.Serializable" %>
+<%@page import="java.util.HashMap" %>
+
+<jsp:useBean id="jcsBean" scope="request" class="org.apache.commons.jcs.admin.JCSAdminBean" />
+
+<html>
+<head>
+
+<SCRIPT LANGUAGE="Javascript">
+  function decision( message, url )
+  {
+    if( confirm(message) )
+    {
+      location.href = url;
+    }
+  }
+</SCRIPT>
+
+<title> JCS Admin Servlet </title>
+
+</head>
+
+<body>
+
+<%
+			String CACHE_NAME_PARAM = "cacheName";
+			String ACTION_PARAM = "action";
+		 	String CLEAR_ALL_REGIONS_ACTION = "clearAllRegions";
+		 	String CLEAR_REGION_ACTION = "clearRegion";
+		 	String REMOVE_ACTION = "remove";
+		 	String DETAIL_ACTION = "detail";
+		 	String REGION_SUMMARY_ACTION = "regionSummary";
+		 	String ITEM_ACTION = "item";
+			String KEY_PARAM = "key";
+			String SILENT_PARAM = "silent";
+
+     		String DEFAULT_TEMPLATE_NAME = "DEFAULT";
+     		String REGION_DETAIL_TEMPLATE_NAME = "DETAIL";
+     		String ITEM_TEMPLATE_NAME = "ITEM";
+     		String REGION_SUMMARY_TEMPLATE_NAME = "SUMMARY";
+
+			String templateName = DEFAULT_TEMPLATE_NAME;
+
+			HashMap<String, Object> context = new HashMap<String, Object>();
+
+			// Get cacheName for actions from request (might be null)
+			String cacheName = request.getParameter( CACHE_NAME_PARAM );
+
+			if ( cacheName != null )
+			{
+			    cacheName = cacheName.trim();
+			}
+
+			// If an action was provided, handle it
+			String action = request.getParameter( ACTION_PARAM );
+
+			if ( action != null )
+			{
+				if ( action.equals( CLEAR_ALL_REGIONS_ACTION ) )
+				{
+					jcsBean.clearAllRegions();
+				}
+				else if ( action.equals( CLEAR_REGION_ACTION ) )
+				{
+					if ( cacheName == null )
+					{
+						// Not Allowed
+					}
+					else
+					{
+						jcsBean.clearRegion( cacheName );
+					}
+				}
+				else if ( action.equals( REMOVE_ACTION ) )
+				{
+					String[] keys = request.getParameterValues( KEY_PARAM );
+
+					for ( int i = 0; i < keys.length; i++ )
+					{
+						jcsBean.removeItem( cacheName, keys[ i ] );
+					}
+
+					templateName = REGION_DETAIL_TEMPLATE_NAME;
+				}
+				else if ( action.equals( DETAIL_ACTION ) )
+				{
+					templateName = REGION_DETAIL_TEMPLATE_NAME;
+				}
+				else if ( action.equals( ITEM_ACTION ) )
+				{
+					templateName = ITEM_TEMPLATE_NAME;
+				}
+				else if ( action.equals( REGION_SUMMARY_ACTION ) )
+				{
+					templateName = REGION_SUMMARY_TEMPLATE_NAME;
+				}
+			}
+
+			if ( request.getParameter( SILENT_PARAM ) != null )
+			{
+				// If silent parameter was passed, no output should be produced.
+				//return null;
+			}
+			else
+			{
+				// Populate the context based on the template
+				if ( templateName == REGION_DETAIL_TEMPLATE_NAME )
+				{
+					//context.put( "cacheName", cacheName );
+					context.put( "elementInfoRecords", jcsBean.buildElementInfo( cacheName ) );
+				}
+				else if ( templateName == DEFAULT_TEMPLATE_NAME )
+				{
+					context.put( "cacheInfoRecords", jcsBean.buildCacheInfo() );
+				}
+			}
+
+///////////////////////////////////////////////////////////////////////////////////
+			//handle display
+
+			if ( templateName == ITEM_TEMPLATE_NAME )
+			{
+			    String key = request.getParameter( KEY_PARAM );
+
+			    if ( key != null )
+			    {
+			        key = key.trim();
+			    }
+
+			    CacheAccess<Serializable, Serializable> cache = JCS.getInstance( cacheName );
+				org.apache.commons.jcs.engine.behavior.ICacheElement<?, ?> element = cache.getCacheElement( key );
+%>
+<h1> Item for key [<%=key%>] in region [<%=cacheName%>] </h1>
+
+<a href="JCSAdmin.jsp?action=detail&cacheName=<%=cacheName%>">Region Detail</a>
+| <a href="JCSAdmin.jsp">All Regions</a>
+
+  <pre>
+	<%=element%>
+  </pre>
+<%
+			}
+			else if ( templateName == REGION_SUMMARY_TEMPLATE_NAME )
+			{
+%>
+
+<h1> Summary for region [<%=cacheName%>] </h1>
+
+<a href="JCSAdmin.jsp">All Regions</a>
+
+<%
+    CacheAccess<?, ?> cache = JCS.getInstance( cacheName );
+    String stats = cache.getStats();
+%>
+
+    <br>
+<b> Stats for region [<%=cacheName%>] </b>
+
+    <pre>
+    	<%=stats%>
+    </pre>
+
+<%
+			}
+			else if ( templateName == REGION_DETAIL_TEMPLATE_NAME )
+			{
+%>
+
+<h1> Detail for region [<%=cacheName%>] </h1>
+
+<a href="JCSAdmin.jsp">All Regions</a>
+
+<table border="1" cellpadding="5" >
+    <tr>
+        <th> Key </th>
+        <th> Eternal? </th>
+        <th> Create time </th>
+        <th> Max Life (s) </th>
+        <th> Till Expiration (s) </th>
+    </tr>
+<%
+	CacheElementInfo[] list = (CacheElementInfo[]) context.get( "elementInfoRecords" );
+    for (CacheElementInfo element : list)
+    {
+%>
+        <tr>
+            <td> <%=element.getKey()%> </td>
+            <td> <%=element.isEternal()%> </td>
+            <td> <%=element.getCreateTime()%> </td>
+            <td> <%=element.getMaxLifeSeconds()%> </td>
+            <td> <%=element.getExpiresInSeconds()%> </td>
+            <td>
+             <a href="JCSAdmin.jsp?action=item&cacheName=<%=cacheName%>&key=<%=element.getKey()%>"> View </a>
+            | <a href="JCSAdmin.jsp?action=remove&cacheName=<%=cacheName%>&key=<%=element.getKey()%>"> Remove </a>
+            </td>
+        </tr>
+<%
+    }
+
+    CacheAccess<?, ?> cache = JCS.getInstance( cacheName );
+    String stats = cache.getStats();
+%>
+    </table>
+
+    <br>
+<b> Stats for region [<%=cacheName%>] </b>
+
+    <pre>
+    	<%=stats%>
+    </pre>
+<%
+  }
+  else
+  {
+%>
+
+<h1> Cache Regions </h1>
+
+<p>
+These are the regions which are currently defined in the cache. 'Items' and
+'Bytes' refer to the elements currently in memory (not spooled). You can clear
+all items for a region by selecting 'Remove all' next to the desired region
+below. You can also <a href="javascript:decision('Clicking OK will clear all the data from all regions!','JCSAdmin.jsp?action=clearAllRegions')">Clear all regions</a>
+which empties the entire cache.
+</p>
+<p>
+	<form action="JCSAdmin.jsp">
+		<input type="hidden" name="action" value="item">
+		Retrieve (key) <input type="text" name="key">  
+		(region) <select name="cacheName">
+<%
+  CacheRegionInfo[] listSelect = (CacheRegionInfo[]) context.get( "cacheInfoRecords" );
+  for (CacheRegionInfo record : listSelect)
+  {
+	%>
+    <option value="<%=record.getCacheName()%>"><%=record.getCacheName()%></option>
+	<%
+  }
+%>
+				</select>
+		<input type="submit">
+	</form>
+</p>
+
+<table border="1" cellpadding="5" >
+    <tr>
+        <th> Cache Name </th>
+        <th> Items </th>
+        <th> Bytes </th>
+        <th> Status </th>
+        <th> Memory Hits </th>
+        <th> Aux Hits </th>
+        <th> Not Found Misses </th>
+        <th> Expired Misses </th>
+    </tr>
+
+<%
+	CacheRegionInfo[] list = (CacheRegionInfo[]) context.get( "cacheInfoRecords" );
+    for (CacheRegionInfo record : listSelect)
+    {
+%>
+        <tr>
+            <td> <%=record.getCacheName()%> </td>
+            <td> <%=record.getCacheSize()%> </td>
+            <td> <%=record.getByteCount()%> </td>
+            <td> <%=record.getCacheStatus()%> </td>
+            <td> <%=record.getHitCountRam()%> </td>
+            <td> <%=record.getHitCountAux()%> </td>
+            <td> <%=record.getMissCountNotFound()%> </td>
+            <td> <%=record.getMissCountExpired()%> </td>
+            <td>
+                <a href="JCSAdmin.jsp?action=regionSummary&cacheName=<%=record.getCacheName()%>"> Summary </a>
+                | <a href="JCSAdmin.jsp?action=detail&cacheName=<%=record.getCacheName()%>"> Detail </a>
+                | <a href="javascript:decision('Clicking OK will remove all the data from the region [<%=record.getCacheName()%>]!','JCSAdmin.jsp?action=clearRegion&cacheName=<%=record.getCacheName()%>')"> Clear </a>
+            </td>
+        </tr>
+<%
+    }
+%>
+    </table>
+<%
+  }
+%>
+
+
+</body>
+
+</html>
diff --git a/src/org/apache/commons/jcs/admin/JCSAdminBean.java b/src/org/apache/commons/jcs/admin/JCSAdminBean.java
new file mode 100644
index 0000000..79ae211
--- /dev/null
+++ b/src/org/apache/commons/jcs/admin/JCSAdminBean.java
@@ -0,0 +1,436 @@
+package org.apache.commons.jcs.admin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.access.exception.CacheException;
+import org.apache.commons.jcs.auxiliary.remote.server.RemoteCacheServer;
+import org.apache.commons.jcs.auxiliary.remote.server.RemoteCacheServerFactory;
+import org.apache.commons.jcs.engine.CacheElementSerialized;
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.behavior.IElementAttributes;
+import org.apache.commons.jcs.engine.control.CompositeCache;
+import org.apache.commons.jcs.engine.control.CompositeCacheManager;
+import org.apache.commons.jcs.engine.memory.behavior.IMemoryCache;
+
+import java.io.IOException;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.text.DateFormat;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.LinkedList;
+import java.util.Set;
+
+/**
+ * A servlet which provides HTTP access to JCS. Allows a summary of regions to be viewed, and
+ * removeAll to be run on individual regions or all regions. Also provides the ability to remove
+ * items (any number of key arguments can be provided with action 'remove'). Should be initialized
+ * with a properties file that provides at least a classpath resource loader.
+ */
+public class JCSAdminBean implements JCSJMXBean
+{
+    /** The cache manager. */
+    private final CompositeCacheManager cacheHub;
+
+    /**
+     * Default constructor
+     */
+    public JCSAdminBean()
+    {
+        super();
+        try
+        {
+            this.cacheHub = CompositeCacheManager.getInstance();
+        }
+        catch (CacheException e)
+        {
+            throw new RuntimeException("Could not retrieve cache manager instance", e);
+        }
+    }
+
+    /**
+     * Parameterized constructor
+     *
+	 * @param cacheHub the cache manager instance
+	 */
+	public JCSAdminBean(CompositeCacheManager cacheHub)
+	{
+		super();
+		this.cacheHub = cacheHub;
+	}
+
+	/**
+     * Builds up info about each element in a region.
+     * <p>
+     * @param cacheName
+     * @return Array of CacheElementInfo objects
+     * @throws Exception
+     */
+    @Override
+    public CacheElementInfo[] buildElementInfo( String cacheName )
+        throws Exception
+    {
+        CompositeCache<Serializable, Serializable> cache = cacheHub.getCache( cacheName );
+
+        Serializable[] keys = cache.getMemoryCache().getKeySet().toArray(new Serializable[0]);
+
+        // Attempt to sort keys according to their natural ordering. If that
+        // fails, get the key array again and continue unsorted.
+        try
+        {
+            Arrays.sort( keys );
+        }
+        catch ( Exception e )
+        {
+            keys = cache.getMemoryCache().getKeySet().toArray(new Serializable[0]);
+        }
+
+        LinkedList<CacheElementInfo> records = new LinkedList<CacheElementInfo>();
+
+        ICacheElement<Serializable, Serializable> element;
+        IElementAttributes attributes;
+        CacheElementInfo elementInfo;
+
+        DateFormat format = DateFormat.getDateTimeInstance( DateFormat.SHORT, DateFormat.SHORT );
+
+        long now = System.currentTimeMillis();
+
+        for (Serializable key : keys)
+        {
+            element = cache.getMemoryCache().getQuiet( key );
+
+            attributes = element.getElementAttributes();
+
+            elementInfo = new CacheElementInfo(
+            		String.valueOf( key ),
+            		attributes.getIsEternal(),
+            		format.format(new Date(attributes.getCreateTime())),
+            		attributes.getMaxLife(),
+            		(now - attributes.getCreateTime() - attributes.getMaxLife() * 1000 ) / -1000);
+
+            records.add( elementInfo );
+        }
+
+        return records.toArray(new CacheElementInfo[0]);
+    }
+
+    /**
+     * Builds up data on every region.
+     * <p>
+     * TODO we need a most light weight method that does not count bytes. The byte counting can
+     *       really swamp a server.
+     * @return list of CacheRegionInfo objects
+     * @throws Exception
+     */
+    @Override
+    public CacheRegionInfo[] buildCacheInfo()
+        throws Exception
+    {
+        String[] cacheNames = cacheHub.getCacheNames();
+
+        Arrays.sort( cacheNames );
+
+        LinkedList<CacheRegionInfo> cacheInfo = new LinkedList<CacheRegionInfo>();
+
+        CacheRegionInfo regionInfo;
+        CompositeCache<?, ?> cache;
+
+        for ( int i = 0; i < cacheNames.length; i++ )
+        {
+            cache = cacheHub.getCache( cacheNames[i] );
+
+            regionInfo = new CacheRegionInfo(
+                    cache.getCacheName(),
+                    cache.getSize(),
+                    cache.getStatus().toString(),
+                    cache.getStats(),
+                    cache.getHitCountRam(),
+                    cache.getHitCountAux(),
+                    cache.getMissCountNotFound(),
+                    cache.getMissCountExpired(),
+                    getByteCount( cache ));
+
+            cacheInfo.add( regionInfo );
+        }
+
+        return cacheInfo.toArray(new CacheRegionInfo[0]);
+    }
+
+
+	/**
+     * Tries to estimate how much data is in a region. This is expensive. If there are any non serializable objects in
+     * the region or an error occurs, suppresses exceptions and returns 0.
+     * <p/>
+     *
+     * @return int The size of the region in bytes.
+     */
+	@Override
+    public int getByteCount(String cacheName)
+	{
+		return getByteCount(cacheHub.getCache(cacheName));
+	}
+
+	/**
+     * Tries to estimate how much data is in a region. This is expensive. If there are any non serializable objects in
+     * the region or an error occurs, suppresses exceptions and returns 0.
+     * <p/>
+     *
+     * @return int The size of the region in bytes.
+     */
+    public <K, V> int getByteCount(CompositeCache<K, V> cache)
+    {
+        if (cache == null)
+        {
+            throw new IllegalArgumentException("The cache object specified was null.");
+        }
+
+        long size = 0;
+        IMemoryCache<K, V> memCache = cache.getMemoryCache();
+
+        for (K key : memCache.getKeySet())
+        {
+            ICacheElement<K, V> ice = null;
+			try
+			{
+				ice = memCache.get(key);
+			}
+			catch (IOException e)
+			{
+                throw new RuntimeException("IOException while trying to get a cached element", e);
+			}
+
+			if (ice == null)
+			{
+				continue;
+			}
+
+			if (ice instanceof CacheElementSerialized)
+            {
+                size = size + ((CacheElementSerialized<K, V>) ice).getSerializedValue().length;
+            }
+            else
+            {
+                Object element = ice.getVal();
+
+                //CountingOnlyOutputStream: Keeps track of the number of bytes written to it, but doesn't write them anywhere.
+                CountingOnlyOutputStream counter = new CountingOnlyOutputStream();
+                ObjectOutputStream out = null;
+                try
+                {
+                    out = new ObjectOutputStream(counter);
+                    out.writeObject(element);
+                }
+                catch (IOException e)
+                {
+                    throw new RuntimeException("IOException while trying to measure the size of the cached element", e);
+                }
+                finally
+                {
+                	try
+                	{
+                		if (out != null)
+                		{
+                			out.close();
+                		}
+					}
+                	catch (IOException e)
+                	{
+                		// ignore
+					}
+                	try
+                	{
+						counter.close();
+					}
+                	catch (IOException e)
+                	{
+                		// ignore
+					}
+                }
+
+                // 4 bytes lost for the serialization header
+                size = size + counter.getCount() - 4;
+            }
+        }
+
+        if (size > Integer.MAX_VALUE)
+        {
+            throw new IllegalStateException("The size of cache " + cache.getCacheName() + " (" + size + " bytes) is too large to be represented as an integer.");
+        }
+
+        return (int) size;
+    }
+
+    /**
+     * Clears all regions in the cache.
+     * <p/>
+     * If this class is running within a remote cache server, clears all regions via the <code>RemoteCacheServer</code>
+     * API, so that removes will be broadcast to client machines. Otherwise clears all regions in the cache directly via
+     * the usual cache API.
+     */
+    @Override
+    public void clearAllRegions() throws IOException
+    {
+        if (RemoteCacheServerFactory.getRemoteCacheServer() == null)
+        {
+            // Not running in a remote cache server.
+            // Remove objects from the cache directly, as no need to broadcast removes to client machines...
+
+            String[] names = cacheHub.getCacheNames();
+
+            for (int i = 0; i < names.length; i++)
+            {
+                cacheHub.getCache(names[i]).removeAll();
+            }
+        }
+        else
+        {
+            // Running in a remote cache server.
+            // Remove objects via the RemoteCacheServer API, so that removes will be broadcast to client machines...
+            try
+            {
+                String[] cacheNames = cacheHub.getCacheNames();
+
+                // Call remoteCacheServer.removeAll(String) for each cacheName...
+                RemoteCacheServer<?, ?> remoteCacheServer = RemoteCacheServerFactory.getRemoteCacheServer();
+                for (int i = 0; i < cacheNames.length; i++)
+                {
+                    String cacheName = cacheNames[i];
+                    remoteCacheServer.removeAll(cacheName);
+                }
+            }
+            catch (IOException e)
+            {
+                throw new IllegalStateException("Failed to remove all elements from all cache regions: " + e, e);
+            }
+        }
+    }
+
+    /**
+     * Clears a particular cache region.
+     * <p/>
+     * If this class is running within a remote cache server, clears the region via the <code>RemoteCacheServer</code>
+     * API, so that removes will be broadcast to client machines. Otherwise clears the region directly via the usual
+     * cache API.
+     */
+    @Override
+    public void clearRegion(String cacheName) throws IOException
+    {
+        if (cacheName == null)
+        {
+            throw new IllegalArgumentException("The cache name specified was null.");
+        }
+        if (RemoteCacheServerFactory.getRemoteCacheServer() == null)
+        {
+            // Not running in a remote cache server.
+            // Remove objects from the cache directly, as no need to broadcast removes to client machines...
+            cacheHub.getCache(cacheName).removeAll();
+        }
+        else
+        {
+            // Running in a remote cache server.
+            // Remove objects via the RemoteCacheServer API, so that removes will be broadcast to client machines...
+            try
+            {
+                // Call remoteCacheServer.removeAll(String)...
+                RemoteCacheServer<?, ?> remoteCacheServer = RemoteCacheServerFactory.getRemoteCacheServer();
+                remoteCacheServer.removeAll(cacheName);
+            }
+            catch (IOException e)
+            {
+                throw new IllegalStateException("Failed to remove all elements from cache region [" + cacheName + "]: " + e, e);
+            }
+        }
+    }
+
+    /**
+     * Removes a particular item from a particular region.
+     * <p/>
+     * If this class is running within a remote cache server, removes the item via the <code>RemoteCacheServer</code>
+     * API, so that removes will be broadcast to client machines. Otherwise clears the region directly via the usual
+     * cache API.
+     *
+     * @param cacheName
+     * @param key
+     *
+     * @throws IOException
+     */
+    @Override
+    public void removeItem(String cacheName, String key) throws IOException
+    {
+        if (cacheName == null)
+        {
+            throw new IllegalArgumentException("The cache name specified was null.");
+        }
+        if (key == null)
+        {
+            throw new IllegalArgumentException("The key specified was null.");
+        }
+        if (RemoteCacheServerFactory.getRemoteCacheServer() == null)
+        {
+            // Not running in a remote cache server.
+            // Remove objects from the cache directly, as no need to broadcast removes to client machines...
+            cacheHub.getCache(cacheName).remove(key);
+        }
+        else
+        {
+            // Running in a remote cache server.
+            // Remove objects via the RemoteCacheServer API, so that removes will be broadcast to client machines...
+            try
+            {
+                Object keyToRemove = null;
+                CompositeCache<?, ?> cache = CompositeCacheManager.getInstance().getCache(cacheName);
+
+                // A String key was supplied, but to remove elements via the RemoteCacheServer API, we need the
+                // actual key object as stored in the cache (i.e. a Serializable object). To find the key in this form,
+                // we iterate through all keys stored in the memory cache until we find one whose toString matches
+                // the string supplied...
+                Set<?> allKeysInCache = cache.getMemoryCache().getKeySet();
+                for (Object keyInCache : allKeysInCache)
+                {
+                    if (keyInCache.toString().equals(key))
+                    {
+                        if (keyToRemove == null)
+                        {
+                            keyToRemove = keyInCache;
+                        }
+                        else
+                        {
+                            // A key matching the one specified was already found...
+                            throw new IllegalStateException("Unexpectedly found duplicate keys in the cache region matching the key specified.");
+                        }
+                    }
+                }
+                if (keyToRemove == null)
+                {
+                    throw new IllegalStateException("No match for this key could be found in the set of keys retrieved from the memory cache.");
+                }
+                // At this point, we have retrieved the matching K key.
+
+                // Call remoteCacheServer.remove(String, Serializable)...
+                RemoteCacheServer<Serializable, Serializable> remoteCacheServer = RemoteCacheServerFactory.getRemoteCacheServer();
+                remoteCacheServer.remove(cacheName, key);
+            }
+            catch (Exception e)
+            {
+                throw new IllegalStateException("Failed to remove element with key [" + key + ", " + key.getClass() + "] from cache region [" + cacheName + "]: " + e, e);
+            }
+        }
+    }
+}
diff --git a/src/org/apache/commons/jcs/admin/JCSJMXBean.java b/src/org/apache/commons/jcs/admin/JCSJMXBean.java
new file mode 100644
index 0000000..863d6a4
--- /dev/null
+++ b/src/org/apache/commons/jcs/admin/JCSJMXBean.java
@@ -0,0 +1,90 @@
+package org.apache.commons.jcs.admin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import javax.management.MXBean;
+import java.io.IOException;
+
+/**
+ * A MXBean to expose the JCS statistics to JMX
+ */
+ at MXBean
+public interface JCSJMXBean
+{
+    /**
+     * Builds up info about each element in a region.
+     * <p>
+     * @param cacheName
+     * @return Array of CacheElementInfo objects
+     * @throws Exception
+     */
+    CacheElementInfo[] buildElementInfo( String cacheName ) throws Exception;
+
+    /**
+     * Builds up data on every region.
+     * <p>
+     * TODO we need a most light weight method that does not count bytes. The byte counting can
+     *       really swamp a server.
+     * @return Array of CacheRegionInfo objects
+     * @throws Exception
+     */
+    CacheRegionInfo[] buildCacheInfo() throws Exception;
+
+    /**
+     * Tries to estimate how much data is in a region. This is expensive. If there are any non serializable objects in
+     * the region or an error occurs, suppresses exceptions and returns 0.
+     * <p/>
+     *
+     * @return int The size of the region in bytes.
+     */
+    int getByteCount(String cacheName);
+
+    /**
+     * Clears all regions in the cache.
+     * <p/>
+     * If this class is running within a remote cache server, clears all regions via the <code>RemoteCacheServer</code>
+     * API, so that removes will be broadcast to client machines. Otherwise clears all regions in the cache directly via
+     * the usual cache API.
+     */
+    void clearAllRegions() throws IOException;
+
+    /**
+     * Clears a particular cache region.
+     * <p/>
+     * If this class is running within a remote cache server, clears the region via the <code>RemoteCacheServer</code>
+     * API, so that removes will be broadcast to client machines. Otherwise clears the region directly via the usual
+     * cache API.
+     */
+    void clearRegion(String cacheName) throws IOException;
+
+    /**
+     * Removes a particular item from a particular region.
+     * <p/>
+     * If this class is running within a remote cache server, removes the item via the <code>RemoteCacheServer</code>
+     * API, so that removes will be broadcast to client machines. Otherwise clears the region directly via the usual
+     * cache API.
+     *
+     * @param cacheName
+     * @param key
+     *
+     * @throws IOException
+     */
+    void removeItem(String cacheName, String key) throws IOException;
+}
diff --git a/src/org/apache/commons/jcs/admin/servlet/JCSAdminServlet.java b/src/org/apache/commons/jcs/admin/servlet/JCSAdminServlet.java
new file mode 100644
index 0000000..2a26c03
--- /dev/null
+++ b/src/org/apache/commons/jcs/admin/servlet/JCSAdminServlet.java
@@ -0,0 +1,181 @@
+package org.apache.commons.jcs.admin.servlet;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.admin.JCSAdminBean;
+import org.apache.velocity.Template;
+import org.apache.velocity.context.Context;
+import org.apache.velocity.tools.view.VelocityViewServlet;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * A servlet which provides HTTP access to JCS. Allows a summary of regions to
+ * be viewed, and removeAll to be run on individual regions or all regions. Also
+ * provides the ability to remove items (any number of key arguments can be
+ * provided with action 'remove'). Should be initialized with a properties file
+ * that provides at least a classpath resource loader. Since this extends
+ * VelocityServlet, which uses the singleton model for velocity, it will share
+ * configuration with any other Velocity in the same JVM.
+ * <p>
+ * Initialization in a webapp will look something like this:
+ * <p>
+ *
+ * <pre>
+ *
+ *    [servlet]
+ *        [servlet-name]JCSAdminServlet[/servlet-name]
+ *        [servlet-class]org.apache.commons.jcs.admin.servlet.JCSAdminServlet[/servlet-class]
+ *        [init-param]
+ *            [param-name]properties[/param-name]
+ *            [param-value]WEB-INF/conf/JCSAdminServlet.velocity.properties[/param-value]
+ *        [/init-param]
+ *    [/servlet]
+ *
+ * </pre>
+ *
+ * <p>
+ * FIXME: It would be nice to use the VelocityEngine model so this can be truly
+ * standalone. Right now if you run it in the same container as, say, turbine,
+ * turbine must be run first to ensure it's config takes precedence.
+ * <p>
+ */
+public class JCSAdminServlet
+    extends VelocityViewServlet
+{
+    private static final long serialVersionUID = -5519844149238645275L;
+
+    private static final String DEFAULT_TEMPLATE_NAME = "/org/apache/jcs/admin/servlet/JCSAdminServletDefault.vm";
+
+    private static final String REGION_DETAIL_TEMPLATE_NAME = "/org/apache/jcs/admin/servlet/JCSAdminServletRegionDetail.vm";
+
+    // Keys for parameters
+
+    private static final String CACHE_NAME_PARAM = "cacheName";
+
+    private static final String ACTION_PARAM = "action";
+
+    private static final String KEY_PARAM = "key";
+
+    private static final String SILENT_PARAM = "silent";
+
+    // Possible values for 'action' parameter
+
+    private static final String CLEAR_ALL_REGIONS_ACTION = "clearAllRegions";
+
+    private static final String CLEAR_REGION_ACTION = "clearRegion";
+
+    private static final String REMOVE_ACTION = "remove";
+
+    private static final String DETAIL_ACTION = "detail";
+
+    /**
+     * Velocity based admin servlet.
+     * <p>
+     * @param request
+     * @param response
+     * @param context
+     * @return Template
+     * @throws Exception
+     *
+     */
+    @Override
+    protected Template handleRequest( HttpServletRequest request, HttpServletResponse response, Context context )
+    {
+        JCSAdminBean admin = new JCSAdminBean();
+
+        String templateName = DEFAULT_TEMPLATE_NAME;
+
+        // Get cacheName for actions from request (might be null)
+
+        String cacheName = request.getParameter( CACHE_NAME_PARAM );
+
+        // If an action was provided, handle it
+
+        String action = request.getParameter( ACTION_PARAM );
+
+        try
+        {
+			if ( action != null )
+			{
+			    if ( action.equals( CLEAR_ALL_REGIONS_ACTION ) )
+			    {
+			        admin.clearAllRegions();
+			    }
+			    else if ( action.equals( CLEAR_REGION_ACTION ) )
+			    {
+			        if ( cacheName != null )
+			        {
+			            admin.clearRegion( cacheName );
+			        }
+			    }
+			    else if ( action.equals( REMOVE_ACTION ) )
+			    {
+			        String[] keys = request.getParameterValues( KEY_PARAM );
+
+			        for ( int i = 0; i < keys.length; i++ )
+			        {
+			            admin.removeItem( cacheName, keys[i] );
+			        }
+
+			        templateName = REGION_DETAIL_TEMPLATE_NAME;
+			    }
+			    else if ( action.equals( DETAIL_ACTION ) )
+			    {
+			        templateName = REGION_DETAIL_TEMPLATE_NAME;
+			    }
+			}
+		}
+        catch (IOException e)
+        {
+        	getLog().error("Could not execute action.", e);
+        	return null;
+		}
+
+        if ( request.getParameter( SILENT_PARAM ) != null )
+        {
+            // If silent parameter was passed, no output should be produced.
+
+            return null;
+        }
+        // Populate the context based on the template
+
+        try
+        {
+			if ( templateName == REGION_DETAIL_TEMPLATE_NAME )
+			{
+			    context.put( "cacheName", cacheName );
+			    context.put( "elementInfoRecords", admin.buildElementInfo( cacheName ) );
+			}
+			else if ( templateName == DEFAULT_TEMPLATE_NAME )
+			{
+			    context.put( "cacheInfoRecords", admin.buildCacheInfo() );
+			}
+		}
+        catch (Exception e)
+        {
+        	getLog().error("Could not populate context.", e);
+		}
+
+        return getTemplate( templateName );
+    }
+}
diff --git a/src/org/apache/commons/jcs/admin/servlet/JCSAdminServletDefault.vm b/src/org/apache/commons/jcs/admin/servlet/JCSAdminServletDefault.vm
new file mode 100644
index 0000000..1c993cb
--- /dev/null
+++ b/src/org/apache/commons/jcs/admin/servlet/JCSAdminServletDefault.vm
@@ -0,0 +1,64 @@
+## Licensed to the Apache Software Foundation (ASF) under one
+## or more contributor license agreements.  See the NOTICE file
+## distributed with this work for additional information
+## regarding copyright ownership.  The ASF licenses this file
+## to you under the Apache License, Version 2.0 (the
+## "License"); you may not use this file except in compliance
+## with the License.  You may obtain a copy of the License at
+##
+##   http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing,
+## software distributed under the License is distributed on an
+## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+## KIND, either express or implied.  See the License for the
+## specific language governing permissions and limitations
+## under the License.
+<html>
+
+<head><title> JCS Admin Servlet </title></head>
+
+<body>
+
+<h1> Cache Regions </h1>
+
+<p>These are the regions which are currently defined in the cache. 'Items' and
+'Bytes' refer to the elements currently in memory (not spooled). You can clear
+all items for a region by selecting 'Remove all' next to the desired region
+below. You can also <a href="?action=clearAllRegions">Clear all regions</a>
+which empties the entire cache.</p>
+
+<table border="1" cellpadding="5" >
+    <tr>
+        <th> Cache Name </th>
+        <th> Items </th>
+        <th> Bytes </th>
+        <th> Status </th>
+        <th> Memory Hits </th>
+        <th> Aux Hits </th>
+        <th> Not Found Misses </th>
+        <th> Expired Misses </th>
+    </tr>
+
+    #foreach ( $record in $cacheInfoRecords )
+        <tr>
+            <td> $record.cache.cacheName </td>
+            <td> $record.cache.size </td>
+            <td> $record.byteCount </td>
+            <td> $record.status </td>
+            <td> $record.cache.hitCountRam </td>
+            <td> $record.cache.hitCountAux </td>
+            <td> $record.cache.missCountNotFound </td>
+            <td> $record.cache.missCountExpired </td>
+            <td>
+                <a href="?action=detail&cacheName=${record.cache.cacheName}"> Detail </a>
+                | <a href="?action=clearRegion&cacheName=${record.cache.cacheName}"> Remove all </a>
+            </td>
+        </tr>
+    #end
+
+</table>
+
+</body>
+
+</html>
diff --git a/src/org/apache/commons/jcs/admin/servlet/JCSAdminServletRegionDetail.vm b/src/org/apache/commons/jcs/admin/servlet/JCSAdminServletRegionDetail.vm
new file mode 100644
index 0000000..8bbbf06
--- /dev/null
+++ b/src/org/apache/commons/jcs/admin/servlet/JCSAdminServletRegionDetail.vm
@@ -0,0 +1,50 @@
+## Licensed to the Apache Software Foundation (ASF) under one
+## or more contributor license agreements.  See the NOTICE file
+## distributed with this work for additional information
+## regarding copyright ownership.  The ASF licenses this file
+## to you under the Apache License, Version 2.0 (the
+## "License"); you may not use this file except in compliance
+## with the License.  You may obtain a copy of the License at
+##
+##   http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing,
+## software distributed under the License is distributed on an
+## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+## KIND, either express or implied.  See the License for the
+## specific language governing permissions and limitations
+## under the License.
+<html>
+
+<head><title> JCS Admin Servlet Region Detail </title></head>
+
+<body>
+
+<h1> Keys for region: $cacheName </h1>
+
+<table border="1" cellpadding="5" >
+    <tr>
+        <th> Key </th>
+        <th> Eternal? </th>
+        <th> Create time </th>
+        <th> Max Life (s) </th>
+        <th> Till Expiration (s) </th>
+    </tr>
+
+    #foreach ( $element in $elementInfoRecords )
+
+        <tr>
+            <td> $element.key </td>
+            <td> $element.eternal </td>
+            <td> $element.createTime </td>
+            <td> $element.maxLifeSeconds </td>
+            <td> $element.expiresInSeconds </td>
+            <td> <a href="?action=remove&cacheName=${cacheName}&key=${element.key}"> Remove </a> </td>
+        </tr>
+    #end
+
+</table>
+
+</body>
+
+</html>
diff --git a/src/org/apache/commons/jcs/auxiliary/AbstractAuxiliaryCache.java b/src/org/apache/commons/jcs/auxiliary/AbstractAuxiliaryCache.java
new file mode 100644
index 0000000..f66d3f5
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/AbstractAuxiliaryCache.java
@@ -0,0 +1,210 @@
+package org.apache.commons.jcs.auxiliary;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.behavior.IElementSerializer;
+import org.apache.commons.jcs.engine.logging.CacheEvent;
+import org.apache.commons.jcs.engine.logging.behavior.ICacheEvent;
+import org.apache.commons.jcs.engine.logging.behavior.ICacheEventLogger;
+import org.apache.commons.jcs.engine.match.KeyMatcherPatternImpl;
+import org.apache.commons.jcs.engine.match.behavior.IKeyMatcher;
+import org.apache.commons.jcs.utils.serialization.StandardSerializer;
+
+/** This holds convenience methods used by most auxiliary caches. */
+public abstract class AbstractAuxiliaryCache<K, V>
+    implements AuxiliaryCache<K, V>
+{
+    /** An optional event logger */
+    private ICacheEventLogger cacheEventLogger;
+
+    /** The serializer. Uses a standard serializer by default. */
+    private IElementSerializer elementSerializer = new StandardSerializer();
+
+    /** Key matcher used by the getMatching API */
+    private IKeyMatcher<K> keyMatcher = new KeyMatcherPatternImpl<K>();
+
+    /**
+     * Logs an event if an event logger is configured.
+     * <p>
+     * @param item
+     * @param eventName
+     * @return ICacheEvent
+     */
+    protected ICacheEvent<K> createICacheEvent( ICacheElement<K, V> item, String eventName )
+    {
+        if ( cacheEventLogger == null )
+        {
+            return new CacheEvent<K>();
+        }
+        String diskLocation = getEventLoggingExtraInfo();
+        String regionName = null;
+        K key = null;
+        if ( item != null )
+        {
+            regionName = item.getCacheName();
+            key = item.getKey();
+        }
+        return cacheEventLogger.createICacheEvent( getAuxiliaryCacheAttributes().getName(), regionName, eventName,
+                                                   diskLocation, key );
+    }
+
+    /**
+     * Logs an event if an event logger is configured.
+     * <p>
+     * @param regionName
+     * @param key
+     * @param eventName
+     * @return ICacheEvent
+     */
+    protected <T> ICacheEvent<T> createICacheEvent( String regionName, T key, String eventName )
+    {
+        if ( cacheEventLogger == null )
+        {
+            return new CacheEvent<T>();
+        }
+        String diskLocation = getEventLoggingExtraInfo();
+        return cacheEventLogger.createICacheEvent( getAuxiliaryCacheAttributes().getName(), regionName, eventName,
+                                                   diskLocation, key );
+
+    }
+
+    /**
+     * Logs an event if an event logger is configured.
+     * <p>
+     * @param cacheEvent
+     */
+    protected <T> void logICacheEvent( ICacheEvent<T> cacheEvent )
+    {
+        if ( cacheEventLogger != null )
+        {
+            cacheEventLogger.logICacheEvent( cacheEvent );
+        }
+    }
+
+    /**
+     * Logs an event if an event logger is configured.
+     * <p>
+     * @param source
+     * @param eventName
+     * @param optionalDetails
+     */
+    protected void logApplicationEvent( String source, String eventName, String optionalDetails )
+    {
+        if ( cacheEventLogger != null )
+        {
+            cacheEventLogger.logApplicationEvent( source, eventName, optionalDetails );
+        }
+    }
+
+    /**
+     * Logs an event if an event logger is configured.
+     * <p>
+     * @param source
+     * @param eventName
+     * @param errorMessage
+     */
+    protected void logError( String source, String eventName, String errorMessage )
+    {
+        if ( cacheEventLogger != null )
+        {
+            cacheEventLogger.logError( source, eventName, errorMessage );
+        }
+    }
+
+    /**
+     * Gets the extra info for the event log.
+     * <p>
+     * @return IP, or disk location, etc.
+     */
+    public abstract String getEventLoggingExtraInfo();
+
+    /**
+     * Allows it to be injected.
+     * <p>
+     * @param cacheEventLogger
+     */
+    @Override
+    public void setCacheEventLogger( ICacheEventLogger cacheEventLogger )
+    {
+        this.cacheEventLogger = cacheEventLogger;
+    }
+
+    /**
+     * Allows it to be injected.
+     * <p>
+     * @return cacheEventLogger
+     */
+    public ICacheEventLogger getCacheEventLogger()
+    {
+        return this.cacheEventLogger;
+    }
+
+    /**
+     * Allows you to inject a custom serializer. A good example would be a compressing standard
+     * serializer.
+     * <p>
+     * Does not allow you to set it to null.
+     * <p>
+     * @param elementSerializer
+     */
+    @Override
+    public void setElementSerializer( IElementSerializer elementSerializer )
+    {
+        if ( elementSerializer != null )
+        {
+            this.elementSerializer = elementSerializer;
+        }
+    }
+
+    /**
+     * Allows it to be injected.
+     * <p>
+     * @return elementSerializer
+     */
+    public IElementSerializer getElementSerializer()
+    {
+        return this.elementSerializer;
+    }
+
+    /**
+     * Sets the key matcher used by get matching.
+     * <p>
+     * @param keyMatcher
+     */
+    @Override
+    public void setKeyMatcher( IKeyMatcher<K> keyMatcher )
+    {
+        if ( keyMatcher != null )
+        {
+            this.keyMatcher = keyMatcher;
+        }
+    }
+
+    /**
+     * Returns the key matcher used by get matching.
+     * <p>
+     * @return keyMatcher
+     */
+    public IKeyMatcher<K> getKeyMatcher()
+    {
+        return this.keyMatcher;
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/AbstractAuxiliaryCacheAttributes.java b/src/org/apache/commons/jcs/auxiliary/AbstractAuxiliaryCacheAttributes.java
new file mode 100644
index 0000000..dfc598b
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/AbstractAuxiliaryCacheAttributes.java
@@ -0,0 +1,130 @@
+package org.apache.commons.jcs.auxiliary;
+
+import org.apache.commons.jcs.engine.behavior.ICacheEventQueue;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * This has common attributes used by all auxiliaries.
+ */
+public abstract class AbstractAuxiliaryCacheAttributes
+    implements AuxiliaryCacheAttributes
+{
+    /** Don't change */
+    private static final long serialVersionUID = -6594609334959187673L;
+
+    /** cacheName */
+    private String cacheName;
+
+    /** name */
+    private String name;
+
+    /** eventQueueType -- pooled, or single threaded */
+    private ICacheEventQueue.QueueType eventQueueType;
+
+    /** Named when pooled */
+    private String eventQueuePoolName;
+
+    /**
+     * @param name
+     */
+    @Override
+    public void setCacheName( String name )
+    {
+        this.cacheName = name;
+    }
+
+    /**
+     * Gets the cacheName attribute of the AuxiliaryCacheAttributes object
+     * <p>
+     * @return The cacheName value
+     */
+    @Override
+    public String getCacheName()
+    {
+        return this.cacheName;
+    }
+
+    /**
+     * This is the name of the auxiliary in configuration file.
+     * <p>
+     * @see org.apache.commons.jcs.auxiliary.AuxiliaryCacheAttributes#setName(java.lang.String)
+     */
+    @Override
+    public void setName( String s )
+    {
+        this.name = s;
+    }
+
+    /**
+     * Gets the name attribute of the AuxiliaryCacheAttributes object
+     * <p>
+     * @return The name value
+     */
+    @Override
+    public String getName()
+    {
+        return this.name;
+    }
+
+    /**
+     * SINGLE is the default. If you choose POOLED, the value of EventQueuePoolName will be used
+     * <p>
+     * @param queueType SINGLE or POOLED
+     */
+    @Override
+    public void setEventQueueType( ICacheEventQueue.QueueType queueType )
+    {
+        this.eventQueueType = queueType;
+    }
+
+    /**
+     * @return SINGLE or POOLED
+     */
+    @Override
+    public ICacheEventQueue.QueueType getEventQueueType()
+    {
+        return eventQueueType;
+    }
+
+    /**
+     * If you choose a POOLED event queue type, the value of EventQueuePoolName will be used. This
+     * is ignored if the pool type is SINGLE
+     * <p>
+     * @param s SINGLE or POOLED
+     */
+    @Override
+    public void setEventQueuePoolName( String s )
+    {
+        eventQueuePoolName = s;
+    }
+
+    /**
+     * Sets the pool name to use. If a pool is not found by this name, the thread pool manager will
+     * return a default configuration.
+     * <p>
+     * @return name of thread pool to use for this auxiliary
+     */
+    @Override
+    public String getEventQueuePoolName()
+    {
+        return eventQueuePoolName;
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/AbstractAuxiliaryCacheEventLogging.java b/src/org/apache/commons/jcs/auxiliary/AbstractAuxiliaryCacheEventLogging.java
new file mode 100644
index 0000000..44e368e
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/AbstractAuxiliaryCacheEventLogging.java
@@ -0,0 +1,353 @@
+package org.apache.commons.jcs.auxiliary;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.logging.behavior.ICacheEvent;
+import org.apache.commons.jcs.engine.logging.behavior.ICacheEventLogger;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * All ICacheEvents are defined as final. Children must implement process events. These are wrapped
+ * in event log parent calls.
+ * <p>
+ * You can override the public method, but if you don't, the default will call getWithTiming.
+ */
+public abstract class AbstractAuxiliaryCacheEventLogging<K, V>
+    extends AbstractAuxiliaryCache<K, V>
+{
+    /**
+     * Puts an item into the cache.
+     * <p>
+     * @param cacheElement
+     * @throws IOException
+     */
+    @Override
+    public void update( ICacheElement<K, V> cacheElement )
+        throws IOException
+    {
+        updateWithEventLogging( cacheElement );
+    }
+
+    /**
+     * Puts an item into the cache. Wrapped in logging.
+     * <p>
+     * @param cacheElement
+     * @throws IOException
+     */
+    protected final void updateWithEventLogging( ICacheElement<K, V> cacheElement )
+        throws IOException
+    {
+        ICacheEvent<K> cacheEvent = createICacheEvent( cacheElement, ICacheEventLogger.UPDATE_EVENT );
+        try
+        {
+            processUpdate( cacheElement );
+        }
+        finally
+        {
+            logICacheEvent( cacheEvent );
+        }
+    }
+
+    /**
+     * Implementation of put.
+     * <p>
+     * @param cacheElement
+     * @throws IOException
+     */
+    protected abstract void processUpdate( ICacheElement<K, V> cacheElement )
+        throws IOException;
+
+    /**
+     * Gets the item from the cache.
+     * <p>
+     * @param key
+     * @return ICacheElement, a wrapper around the key, value, and attributes
+     * @throws IOException
+     */
+    @Override
+    public ICacheElement<K, V> get( K key )
+        throws IOException
+    {
+        return getWithEventLogging( key );
+    }
+
+    /**
+     * Gets the item from the cache. Wrapped in logging.
+     * <p>
+     * @param key
+     * @return ICacheElement, a wrapper around the key, value, and attributes
+     * @throws IOException
+     */
+    protected final ICacheElement<K, V> getWithEventLogging( K key )
+        throws IOException
+    {
+        ICacheEvent<K> cacheEvent = createICacheEvent( getCacheName(), key, ICacheEventLogger.GET_EVENT );
+        try
+        {
+            return processGet( key );
+        }
+        finally
+        {
+            logICacheEvent( cacheEvent );
+        }
+    }
+
+    /**
+     * Implementation of get.
+     * <p>
+     * @param key
+     * @return ICacheElement, a wrapper around the key, value, and attributes
+     * @throws IOException
+     */
+    protected abstract ICacheElement<K, V> processGet( K key )
+        throws IOException;
+
+    /**
+     * Gets multiple items from the cache based on the given set of keys.
+     * <p>
+     * @param keys
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data in cache for any of these keys
+     * @throws IOException
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> getMultiple(Set<K> keys)
+        throws IOException
+    {
+        return getMultipleWithEventLogging( keys );
+    }
+
+    /**
+     * Gets multiple items from the cache based on the given set of keys.
+     * <p>
+     * @param keys
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data in cache for any of these keys
+     * @throws IOException
+     */
+    protected final Map<K, ICacheElement<K, V>> getMultipleWithEventLogging(Set<K> keys )
+        throws IOException
+    {
+        ICacheEvent<Serializable> cacheEvent = createICacheEvent( getCacheName(), (Serializable) keys,
+                                                    ICacheEventLogger.GETMULTIPLE_EVENT );
+        try
+        {
+            return processGetMultiple( keys );
+        }
+        finally
+        {
+            logICacheEvent( cacheEvent );
+        }
+    }
+
+    /**
+     * Implementation of getMultiple.
+     * <p>
+     * @param keys
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data in cache for any of these keys
+     * @throws IOException
+     */
+    protected abstract Map<K, ICacheElement<K, V>> processGetMultiple(Set<K> keys)
+        throws IOException;
+
+    /**
+     * Gets items from the cache matching the given pattern. Items from memory will replace those
+     * from remote sources.
+     * <p>
+     * This only works with string keys. It's too expensive to do a toString on every key.
+     * <p>
+     * Auxiliaries will do their best to handle simple expressions. For instance, the JDBC disk
+     * cache will convert * to % and . to _
+     * <p>
+     * @param pattern
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data matching the pattern.
+     * @throws IOException
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> getMatching( String pattern )
+        throws IOException
+    {
+        return getMatchingWithEventLogging( pattern );
+    }
+
+    /**
+     * Gets mmatching items from the cache based on the given pattern.
+     * <p>
+     * @param pattern
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data matching the pattern.
+     * @throws IOException
+     */
+    protected final Map<K, ICacheElement<K, V>> getMatchingWithEventLogging( String pattern )
+        throws IOException
+    {
+        ICacheEvent<String> cacheEvent = createICacheEvent( getCacheName(), pattern, ICacheEventLogger.GETMATCHING_EVENT );
+        try
+        {
+            return processGetMatching( pattern );
+        }
+        finally
+        {
+            logICacheEvent( cacheEvent );
+        }
+    }
+
+    /**
+     * Implementation of getMatching.
+     * <p>
+     * @param pattern
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data matching the pattern.
+     * @throws IOException
+     */
+    protected abstract Map<K, ICacheElement<K, V>> processGetMatching( String pattern )
+        throws IOException;
+
+    /**
+     * Removes the item from the cache. Wraps the remove in event logs.
+     * <p>
+     * @param key
+     * @return boolean, whether or not the item was removed
+     * @throws IOException
+     */
+    @Override
+    public boolean remove( K key )
+        throws IOException
+    {
+        return removeWithEventLogging( key );
+    }
+
+    /**
+     * Removes the item from the cache. Wraps the remove in event logs.
+     * <p>
+     * @param key
+     * @return boolean, whether or not the item was removed
+     * @throws IOException
+     */
+    protected final boolean removeWithEventLogging( K key )
+        throws IOException
+    {
+        ICacheEvent<K> cacheEvent = createICacheEvent( getCacheName(), key, ICacheEventLogger.REMOVE_EVENT );
+        try
+        {
+            return processRemove( key );
+        }
+        finally
+        {
+            logICacheEvent( cacheEvent );
+        }
+    }
+
+    /**
+     * Specific implementation of remove.
+     * <p>
+     * @param key
+     * @return boolean, whether or not the item was removed
+     * @throws IOException
+     */
+    protected abstract boolean processRemove( K key )
+        throws IOException;
+
+    /**
+     * Removes all from the region. Wraps the removeAll in event logs.
+     * <p>
+     * @throws IOException
+     */
+    @Override
+    public void removeAll()
+        throws IOException
+    {
+        removeAllWithEventLogging();
+    }
+
+    /**
+     * Removes all from the region. Wraps the removeAll in event logs.
+     * <p>
+     * @throws IOException
+     */
+    protected final void removeAllWithEventLogging()
+        throws IOException
+    {
+        ICacheEvent<String> cacheEvent = createICacheEvent( getCacheName(), "all", ICacheEventLogger.REMOVEALL_EVENT );
+        try
+        {
+            processRemoveAll();
+        }
+        finally
+        {
+            logICacheEvent( cacheEvent );
+        }
+    }
+
+    /**
+     * Specific implementation of removeAll.
+     * <p>
+     * @throws IOException
+     */
+    protected abstract void processRemoveAll()
+        throws IOException;
+
+    /**
+     * Synchronously dispose the remote cache; if failed, replace the remote handle with a zombie.
+     * <p>
+     * @throws IOException
+     */
+    @Override
+    public void dispose()
+        throws IOException
+    {
+        disposeWithEventLogging();
+    }
+
+    /**
+     * Synchronously dispose the remote cache; if failed, replace the remote handle with a zombie.
+     * Wraps the removeAll in event logs.
+     * <p>
+     * @throws IOException
+     */
+    protected final void disposeWithEventLogging()
+        throws IOException
+    {
+        ICacheEvent<String> cacheEvent = createICacheEvent( getCacheName(), "none", ICacheEventLogger.DISPOSE_EVENT );
+        try
+        {
+            processDispose();
+        }
+        finally
+        {
+            logICacheEvent( cacheEvent );
+        }
+    }
+
+    /**
+     * Specific implementation of dispose.
+     * <p>
+     * @throws IOException
+     */
+    protected abstract void processDispose()
+        throws IOException;
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/AbstractAuxiliaryCacheFactory.java b/src/org/apache/commons/jcs/auxiliary/AbstractAuxiliaryCacheFactory.java
new file mode 100644
index 0000000..657015e
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/AbstractAuxiliaryCacheFactory.java
@@ -0,0 +1,72 @@
+package org.apache.commons.jcs.auxiliary;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.AuxiliaryCacheFactory;
+
+/**
+ * Base class for auxiliary cache factories.
+ */
+public abstract class AbstractAuxiliaryCacheFactory
+    implements AuxiliaryCacheFactory
+{
+    /** The auxiliary name. The composite cache manager keeps this in a map, keyed by name. */
+    private String name = this.getClass().getSimpleName();
+
+    /**
+     * Initialize this factory
+     */
+    @Override
+    public void initialize()
+    {
+        // empty
+    }
+
+    /**
+     * Dispose of this factory, clean up shared resources
+     */
+    @Override
+    public void dispose()
+    {
+        // empty
+    }
+
+    /**
+     * Gets the name attribute of the DiskCacheFactory object
+     * <p>
+     * @return The name value
+     */
+    @Override
+    public String getName()
+    {
+        return this.name;
+    }
+
+    /**
+     * Sets the name attribute of the DiskCacheFactory object
+     * <p>
+     * @param name The new name value
+     */
+    @Override
+    public void setName( String name )
+    {
+        this.name = name;
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/AuxiliaryCache.java b/src/org/apache/commons/jcs/auxiliary/AuxiliaryCache.java
new file mode 100644
index 0000000..3bc3a52
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/AuxiliaryCache.java
@@ -0,0 +1,77 @@
+package org.apache.commons.jcs.auxiliary;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.behavior.ICache;
+import org.apache.commons.jcs.engine.behavior.IElementSerializer;
+import org.apache.commons.jcs.engine.logging.behavior.ICacheEventLogger;
+import org.apache.commons.jcs.engine.stats.behavior.IStats;
+
+import java.io.IOException;
+import java.util.Set;
+
+/**
+ * Tag interface for auxiliary caches. Currently this provides no additional methods over what is in
+ * ICache, but I anticipate that will change. For example, there will be a mechanism for determining
+ * the type (disk/lateral/remote) of the auxiliary here -- and the existing getCacheType will be
+ * removed from ICache.
+ */
+public interface AuxiliaryCache<K, V>
+    extends ICache<K, V>
+{
+    /**
+     * Get a set of the keys for all elements in the auxiliary cache.
+     * <p>
+     * @return a set of the key type
+     * TODO This should probably be done in chunks with a range passed in. This
+     *       will be a problem if someone puts a 1,000,000 or so items in a
+     *       region.
+     * @throws IOException if access to the auxiliary cache fails
+     */
+    Set<K> getKeySet() throws IOException;
+
+    /**
+     * @return the historical and statistical data for a region's auxiliary cache.
+     */
+    IStats getStatistics();
+
+    /**
+     * This returns the generic attributes for an auxiliary cache. Most implementations will cast
+     * this to a more specific type.
+     * <p>
+     * @return the attributes for the auxiliary cache
+     */
+    AuxiliaryCacheAttributes getAuxiliaryCacheAttributes();
+
+    /**
+     * Allows you to inject a custom serializer. A good example would be a compressing standard
+     * serializer.
+     * <p>
+     * @param elementSerializer
+     */
+    void setElementSerializer( IElementSerializer elementSerializer );
+
+    /**
+     * Every Auxiliary must allow for the use of an event logger.
+     * <p>
+     * @param cacheEventLogger
+     */
+    void setCacheEventLogger( ICacheEventLogger cacheEventLogger );
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/AuxiliaryCacheAttributes.java b/src/org/apache/commons/jcs/auxiliary/AuxiliaryCacheAttributes.java
new file mode 100644
index 0000000..c04b04b
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/AuxiliaryCacheAttributes.java
@@ -0,0 +1,95 @@
+package org.apache.commons.jcs.auxiliary;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.behavior.ICacheEventQueue;
+
+import java.io.Serializable;
+
+/**
+ * This is a nominal interface that auxiliary cache attributes should implement. This allows the
+ * auxiliary mangers to share a common interface.
+ */
+public interface AuxiliaryCacheAttributes
+    extends Serializable, Cloneable
+{
+    /**
+     * Sets the name of the cache, referenced by the appropriate manager.
+     * <p>
+     * @param s The new cacheName value
+     */
+    void setCacheName( String s );
+
+    /**
+     * Gets the cacheName attribute of the AuxiliaryCacheAttributes object
+     * <p>
+     * @return The cacheName value
+     */
+    String getCacheName();
+
+    /**
+     * Name known by by configurator
+     * <p>
+     * @param s The new name value
+     */
+    void setName( String s );
+
+    /**
+     * Gets the name attribute of the AuxiliaryCacheAttributes object
+     * <p>
+     * @return The name value
+     */
+    String getName();
+
+    /**
+     * SINGLE is the default. If you choose POOLED, the value of EventQueuePoolName will be used
+     * <p>
+     * @param s SINGLE or POOLED
+     */
+    void setEventQueueType( ICacheEventQueue.QueueType s );
+
+    /**
+     * @return SINGLE or POOLED
+     */
+    ICacheEventQueue.QueueType getEventQueueType();
+
+    /**
+     * If you choose a POOLED event queue type, the value of EventQueuePoolName will be used. This
+     * is ignored if the pool type is SINGLE
+     * <p>
+     * @param s SINGLE or POOLED
+     */
+    void setEventQueuePoolName( String s );
+
+    /**
+     * Sets the pool name to use. If a pool is not found by this name, the thread pool manager will
+     * return a default configuration.
+     * <p>
+     * @return name of thread pool to use for this auxiliary
+     */
+    String getEventQueuePoolName();
+
+    /**
+     * Clones
+     * <p>
+     * @return a copy
+     */
+    AuxiliaryCacheAttributes copy();
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/AuxiliaryCacheConfigurator.java b/src/org/apache/commons/jcs/auxiliary/AuxiliaryCacheConfigurator.java
new file mode 100644
index 0000000..1a87313
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/AuxiliaryCacheConfigurator.java
@@ -0,0 +1,128 @@
+package org.apache.commons.jcs.auxiliary;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.behavior.IElementSerializer;
+import org.apache.commons.jcs.engine.logging.behavior.ICacheEventLogger;
+import org.apache.commons.jcs.utils.config.OptionConverter;
+import org.apache.commons.jcs.utils.config.PropertySetter;
+import org.apache.commons.jcs.utils.serialization.StandardSerializer;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.util.Properties;
+
+/**
+ * Configuration util for auxiliary caches. I plan to move the auxiliary configuration from the
+ * composite cache configurator here.
+ */
+public class AuxiliaryCacheConfigurator
+{
+    /** The logger. */
+    private static final Log log = LogFactory.getLog( AuxiliaryCacheConfigurator.class );
+
+    /** .attributes */
+    public static final String ATTRIBUTE_PREFIX = ".attributes";
+
+    /**
+     * jcs.auxiliary.NAME.cacheeventlogger=CLASSNAME
+     * <p>
+     * jcs.auxiliary.NAME.cacheeventlogger.attributes.CUSTOMPROPERTY=VALUE
+     */
+    public static final String CACHE_EVENT_LOGGER_PREFIX = ".cacheeventlogger";
+
+    /**
+     * jcs.auxiliary.NAME.serializer=CLASSNAME
+     * <p>
+     * jcs.auxiliary.NAME.serializer.attributes.CUSTOMPROPERTY=VALUE
+     */
+    public static final String SERIALIZER_PREFIX = ".serializer";
+
+    /**
+     * Parses the event logger config, if there is any for the auxiliary.
+     * <p>
+     * @param props
+     * @param auxPrefix - ex. AUXILIARY_PREFIX + auxName
+     * @return cacheEventLogger
+     */
+    public static ICacheEventLogger parseCacheEventLogger( Properties props, String auxPrefix )
+    {
+        ICacheEventLogger cacheEventLogger = null;
+
+        // auxFactory was not previously initialized.
+        String eventLoggerClassName = auxPrefix + CACHE_EVENT_LOGGER_PREFIX;
+        cacheEventLogger = OptionConverter.instantiateByKey( props, eventLoggerClassName, null );
+        if ( cacheEventLogger != null )
+        {
+            String cacheEventLoggerAttributePrefix = auxPrefix + CACHE_EVENT_LOGGER_PREFIX + ATTRIBUTE_PREFIX;
+            PropertySetter.setProperties( cacheEventLogger, props, cacheEventLoggerAttributePrefix + "." );
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "Using custom cache event logger [" + cacheEventLogger + "] for auxiliary [" + auxPrefix
+                    + "]" );
+            }
+        }
+        else
+        {
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "No cache event logger defined for auxiliary [" + auxPrefix + "]" );
+            }
+        }
+        return cacheEventLogger;
+    }
+
+    /**
+     * Parses the element config, if there is any for the auxiliary.
+     * <p>
+     * @param props
+     * @param auxPrefix - ex. AUXILIARY_PREFIX + auxName
+     * @return cacheEventLogger
+     */
+    public static IElementSerializer parseElementSerializer( Properties props, String auxPrefix )
+    {
+        // TODO take in the entire prop key
+        IElementSerializer elementSerializer = null;
+
+        // auxFactory was not previously initialized.
+        String elementSerializerClassName = auxPrefix + SERIALIZER_PREFIX;
+        elementSerializer = OptionConverter.instantiateByKey( props, elementSerializerClassName, null );
+        if ( elementSerializer != null )
+        {
+            String attributePrefix = auxPrefix + SERIALIZER_PREFIX + ATTRIBUTE_PREFIX;
+            PropertySetter.setProperties( elementSerializer, props, attributePrefix + "." );
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "Using custom element serializer [" + elementSerializer + "] for auxiliary [" + auxPrefix
+                    + "]" );
+            }
+        }
+        else
+        {
+            // use the default standard serializer
+            elementSerializer = new StandardSerializer();
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "Using standard serializer [" + elementSerializer + "] for auxiliary [" + auxPrefix + "]" );
+            }
+        }
+        return elementSerializer;
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/AuxiliaryCacheFactory.java b/src/org/apache/commons/jcs/auxiliary/AuxiliaryCacheFactory.java
new file mode 100644
index 0000000..75bcdb7
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/AuxiliaryCacheFactory.java
@@ -0,0 +1,71 @@
+package org.apache.commons.jcs.auxiliary;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.behavior.ICompositeCacheManager;
+import org.apache.commons.jcs.engine.behavior.IElementSerializer;
+import org.apache.commons.jcs.engine.logging.behavior.ICacheEventLogger;
+
+/**
+ * All auxiliary caches must have a factory that the cache configurator can use to create instances.
+ */
+public interface AuxiliaryCacheFactory
+{
+    /**
+     * Creates an auxiliary using the supplied attributes. Adds it to the composite cache manager.
+     * <p>
+     * @param attr
+     * @param cacheMgr This allows auxiliaries to reference the manager without assuming that it is
+     *            a singleton. This will allow JCS to be a non-singleton. Also, it makes it easier to
+     *            test.
+     * @param cacheEventLogger
+     * @param elementSerializer
+     * @return AuxiliaryCache
+     * @throws Exception if cache instance could not be created
+     */
+    <K, V> AuxiliaryCache<K, V> createCache(
+            AuxiliaryCacheAttributes attr, ICompositeCacheManager cacheMgr,
+            ICacheEventLogger cacheEventLogger, IElementSerializer elementSerializer )
+            throws Exception;
+
+    /**
+     * Initialize this factory
+     */
+    void initialize();
+
+    /**
+     * Dispose of this factory, clean up shared resources
+     */
+    void dispose();
+
+    /**
+     * Sets the name attribute of the AuxiliaryCacheFactory object
+     * <p>
+     * @param s The new name value
+     */
+    void setName( String s );
+
+    /**
+     * Gets the name attribute of the AuxiliaryCacheFactory object
+     * <p>
+     * @return The name value
+     */
+    String getName();
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/disk/AbstractDiskCache.java b/src/org/apache/commons/jcs/auxiliary/disk/AbstractDiskCache.java
new file mode 100644
index 0000000..42dbacc
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/disk/AbstractDiskCache.java
@@ -0,0 +1,872 @@
+package org.apache.commons.jcs.auxiliary.disk;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.AbstractAuxiliaryCacheEventLogging;
+import org.apache.commons.jcs.auxiliary.AuxiliaryCache;
+import org.apache.commons.jcs.auxiliary.disk.behavior.IDiskCacheAttributes;
+import org.apache.commons.jcs.engine.CacheEventQueueFactory;
+import org.apache.commons.jcs.engine.CacheInfo;
+import org.apache.commons.jcs.engine.CacheStatus;
+import org.apache.commons.jcs.engine.behavior.ICache;
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.behavior.ICacheEventQueue;
+import org.apache.commons.jcs.engine.behavior.ICacheListener;
+import org.apache.commons.jcs.engine.stats.StatElement;
+import org.apache.commons.jcs.engine.stats.Stats;
+import org.apache.commons.jcs.engine.stats.behavior.IStatElement;
+import org.apache.commons.jcs.engine.stats.behavior.IStats;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+
+/**
+ * Abstract class providing a base implementation of a disk cache, which can be easily extended to
+ * implement a disk cache for a specific persistence mechanism.
+ * <p>
+ * When implementing the abstract methods note that while this base class handles most things, it
+ * does not acquire or release any locks. Implementations should do so as necessary. This is mainly
+ * done to minimize the time spent in critical sections.
+ * <p>
+ * Error handling in this class needs to be addressed. Currently if an exception is thrown by the
+ * persistence mechanism, this class destroys the event queue. Should it also destroy purgatory?
+ * Should it dispose itself?
+ */
+public abstract class AbstractDiskCache<K, V>
+    extends AbstractAuxiliaryCacheEventLogging<K, V>
+    implements AuxiliaryCache<K, V>
+{
+    /** The logger */
+    private static final Log log = LogFactory.getLog( AbstractDiskCache.class );
+
+    /** Generic disk cache attributes */
+    private IDiskCacheAttributes diskCacheAttributes = null;
+
+    // TODO most of these fields should be made private with getters/setters as necessary
+    // Though hopefully many of them can be set at construction and made final
+
+    /**
+     * Map where elements are stored between being added to this cache and actually spooled to disk.
+     * This allows puts to the disk cache to return quickly, and the more expensive operation of
+     * serializing the elements to persistent storage queued for later.
+     * <p>
+     * If the elements are pulled into the memory cache while the are still in purgatory, writing to
+     * disk can be canceled.
+     */
+    protected Map<K, PurgatoryElement<K, V>> purgatory = new HashMap<K, PurgatoryElement<K, V>>();
+
+    /**
+     * The CacheEventQueue where changes will be queued for asynchronous updating of the persistent
+     * storage.
+     */
+    protected ICacheEventQueue<K, V> cacheEventQueue;
+
+    /**
+     * Indicates whether the cache is 'alive': initialized, but not yet disposed. Child classes must
+     * set this to true.
+     */
+    protected boolean alive = false;
+
+    /** Every cache will have a name, subclasses must set this when they are initialized. */
+    protected String cacheName;
+
+    /** DEBUG: Keeps a count of the number of purgatory hits for debug messages */
+    protected int purgHits = 0;
+
+    /**
+     * We lock here, so that we cannot get an update after a remove all. an individual removal locks
+     * the item.
+     */
+    protected final ReentrantReadWriteLock removeAllLock = new ReentrantReadWriteLock();
+
+    // ----------------------------------------------------------- constructors
+
+    /**
+     * Construct the abstract disk cache, create event queues and purgatory. Child classes should
+     * set the alive flag to true after they are initialized.
+     * <p>
+     * @param attr
+     */
+    public AbstractDiskCache( IDiskCacheAttributes attr )
+    {
+        this.diskCacheAttributes = attr;
+
+        this.cacheName = attr.getCacheName();
+
+        // create queue
+        CacheEventQueueFactory<K, V> fact = new CacheEventQueueFactory<K, V>();
+        this.cacheEventQueue = fact.createCacheEventQueue( new MyCacheListener(), CacheInfo.listenerId, cacheName,
+                                                           diskCacheAttributes.getEventQueuePoolName(),
+                                                           diskCacheAttributes.getEventQueueType() );
+
+        // create purgatory
+        initPurgatory();
+    }
+
+    /**
+     * Purgatory size of -1 means to use a HashMap with no size limit. Anything greater will use an
+     * LRU map of some sort.
+     * <p>
+     * TODO Currently setting this to 0 will cause nothing to be put to disk, since it will assume
+     *       that if an item is not in purgatory, then it must have been plucked. We should make 0
+     *       work, a way to not use purgatory.
+     */
+    private void initPurgatory()
+    {
+        // we need this so we can stop the updates from happening after a
+        // removeall
+        removeAllLock.writeLock().lock();
+
+        try
+        {
+            synchronized (this)
+            {
+                if ( diskCacheAttributes.getMaxPurgatorySize() >= 0 )
+                {
+                    purgatory = new LRUMapJCS<K, PurgatoryElement<K, V>>( diskCacheAttributes.getMaxPurgatorySize() );
+                }
+                else
+                {
+                    purgatory = new HashMap<K, PurgatoryElement<K, V>>();
+                }
+            }
+        }
+        finally
+        {
+            removeAllLock.writeLock().unlock();
+        }
+    }
+
+    // ------------------------------------------------------- interface ICache
+
+    /**
+     * Adds the provided element to the cache. Element will be added to purgatory, and then queued
+     * for later writing to the serialized storage mechanism.
+     * <p>
+     * An update results in a put event being created. The put event will call the handlePut method
+     * defined here. The handlePut method calls the implemented doPut on the child.
+     * <p>
+     * @param cacheElement
+     * @throws IOException
+     * @see org.apache.commons.jcs.engine.behavior.ICache#update
+     */
+    @Override
+    public final void update( ICacheElement<K, V> cacheElement )
+        throws IOException
+    {
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Putting element in purgatory, cacheName: " + cacheName + ", key: " + cacheElement.getKey() );
+        }
+
+        try
+        {
+            // Wrap the CacheElement in a PurgatoryElement
+            PurgatoryElement<K, V> pe = new PurgatoryElement<K, V>( cacheElement );
+
+            // Indicates the the element is eligible to be spooled to disk,
+            // this will remain true unless the item is pulled back into
+            // memory.
+            pe.setSpoolable( true );
+
+            // Add the element to purgatory
+            synchronized ( purgatory )
+            {
+                purgatory.put( pe.getKey(), pe );
+            }
+
+            // Queue element for serialization
+            cacheEventQueue.addPutEvent( pe );
+        }
+        catch ( IOException ex )
+        {
+            log.error( "Problem adding put event to queue.", ex );
+
+            cacheEventQueue.destroy();
+        }
+    }
+
+    /**
+     * Check to see if the item is in purgatory. If so, return it. If not, check to see if we have
+     * it on disk.
+     * <p>
+     * @param key
+     * @return ICacheElement<K, V> or null
+     * @see AuxiliaryCache#get
+     */
+    @Override
+    public final ICacheElement<K, V> get( K key )
+    {
+        // If not alive, always return null.
+
+        if ( !alive )
+        {
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "get was called, but the disk cache is not alive." );
+            }
+            return null;
+        }
+
+        PurgatoryElement<K, V> pe = null;
+        synchronized ( purgatory )
+        {
+            pe = purgatory.get( key );
+        }
+
+        // If the element was found in purgatory
+        if ( pe != null )
+        {
+            purgHits++;
+
+            if ( log.isDebugEnabled() )
+            {
+                if ( purgHits % 100 == 0 )
+                {
+                    log.debug( "Purgatory hits = " + purgHits );
+                }
+            }
+
+            // Since the element will go back to the memory cache, we could set
+            // spoolable to false, which will prevent the queue listener from
+            // serializing the element. This would not match the disk cache
+            // behavior and the behavior of other auxiliaries. Gets never remove
+            // items from auxiliaries.
+            // Beyond consistency, the items should stay in purgatory and get
+            // spooled since the mem cache may be set to 0. If an item is
+            // active, it will keep getting put into purgatory and removed. The
+            // CompositeCache now does not put an item to memory from disk if
+            // the size is 0.
+            // Do not set spoolable to false. Just let it go to disk. This
+            // will allow the memory size = 0 setting to work well.
+
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Found element in purgatory, cacheName: " + cacheName + ", key: " + key );
+            }
+
+            return pe.getCacheElement();
+        }
+
+        // If we reach this point, element was not found in purgatory, so get
+        // it from the cache.
+        try
+        {
+            return doGet( key );
+        }
+        catch ( Exception e )
+        {
+            log.error( e );
+
+            cacheEventQueue.destroy();
+        }
+
+        return null;
+    }
+
+    /**
+     * Gets items from the cache matching the given pattern. Items from memory will replace those
+     * from remote sources.
+     * <p>
+     * This only works with string keys. It's too expensive to do a toString on every key.
+     * <p>
+     * Auxiliaries will do their best to handle simple expressions. For instance, the JDBC disk
+     * cache will convert * to % and . to _
+     * <p>
+     * @param pattern
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data matching the pattern.
+     * @throws IOException
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> getMatching( String pattern )
+        throws IOException
+    {
+        // Get the keys from purgatory
+        Set<K> keyArray = null;
+
+        // this avoids locking purgatory, but it uses more memory
+        synchronized ( purgatory )
+        {
+            keyArray = new HashSet<K>(purgatory.keySet());
+        }
+
+        Set<K> matchingKeys = getKeyMatcher().getMatchingKeysFromArray( pattern, keyArray );
+
+        // call getMultiple with the set
+        Map<K, ICacheElement<K, V>> result = processGetMultiple( matchingKeys );
+
+        // Get the keys from disk
+        Map<K, ICacheElement<K, V>> diskMatches = doGetMatching( pattern );
+
+        result.putAll( diskMatches );
+
+        return result;
+    }
+
+    /**
+     * Gets multiple items from the cache based on the given set of keys.
+     * <p>
+     * @param keys
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data in cache for any of these keys
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> processGetMultiple(Set<K> keys)
+    {
+        Map<K, ICacheElement<K, V>> elements = new HashMap<K, ICacheElement<K, V>>();
+
+        if ( keys != null && !keys.isEmpty() )
+        {
+            for (K key : keys)
+            {
+                ICacheElement<K, V> element = get( key );
+
+                if ( element != null )
+                {
+                    elements.put( key, element );
+                }
+            }
+        }
+
+        return elements;
+    }
+
+    /**
+     * The keys in the cache.
+     * <p>
+     * @see org.apache.commons.jcs.auxiliary.AuxiliaryCache#getKeySet()
+     */
+    @Override
+    public abstract Set<K> getKeySet() throws IOException;
+
+    /**
+     * Removes are not queued. A call to remove is immediate.
+     * <p>
+     * @param key
+     * @return whether the item was present to be removed.
+     * @throws IOException
+     * @see org.apache.commons.jcs.engine.behavior.ICache#remove
+     */
+    @Override
+    public final boolean remove( K key )
+        throws IOException
+    {
+        PurgatoryElement<K, V> pe = null;
+
+        synchronized ( purgatory )
+        {
+            // I'm getting the object, so I can lock on the element
+            // Remove element from purgatory if it is there
+            pe = purgatory.get( key );
+        }
+
+        if ( pe != null )
+        {
+            synchronized ( pe.getCacheElement() )
+            {
+                synchronized ( purgatory )
+                {
+                    purgatory.remove( key );
+                }
+
+                // no way to remove from queue, just make sure it doesn't get on
+                // disk and then removed right afterwards
+                pe.setSpoolable( false );
+
+                // Remove from persistent store immediately
+                doRemove( key );
+            }
+        }
+        else
+        {
+            // Remove from persistent store immediately
+            doRemove( key );
+        }
+
+        return false;
+    }
+
+    /**
+     * @throws IOException
+     * @see org.apache.commons.jcs.engine.behavior.ICache#removeAll
+     */
+    @Override
+    public final void removeAll()
+        throws IOException
+    {
+        if ( this.diskCacheAttributes.isAllowRemoveAll() )
+        {
+            // Replace purgatory with a new empty hashtable
+            initPurgatory();
+
+            // Remove all from persistent store immediately
+            doRemoveAll();
+        }
+        else
+        {
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "RemoveAll was requested but the request was not fulfilled: allowRemoveAll is set to false." );
+            }
+        }
+    }
+
+    /**
+     * Adds a dispose request to the disk cache.
+     * <p>
+     * Disposal proceeds in several steps.
+     * <ol>
+     * <li>Prior to this call the Composite cache dumped the memory into the disk cache. If it is
+     * large then we need to wait for the event queue to finish.
+     * <li>Wait until the event queue is empty of until the configured ShutdownSpoolTimeLimit is
+     * reached.
+     * <li>Call doDispose on the concrete impl.
+     * </ol>
+     * @throws IOException
+     */
+    @Override
+    public final void dispose()
+        throws IOException
+    {
+        Runnable disR = new Runnable()
+        {
+            @Override
+            public void run()
+            {
+                boolean keepGoing = true;
+                long total = 0;
+                long interval = 100;
+                while ( keepGoing )
+                {
+                    keepGoing = !cacheEventQueue.isEmpty();
+                    try
+                    {
+                        Thread.sleep( interval );
+                        total += interval;
+                        // log.info( "total = " + total );
+                    }
+                    catch ( InterruptedException e )
+                    {
+                        break;
+                    }
+                }
+                log.info( "No longer waiting for event queue to finish: " + cacheEventQueue.getStatistics() );
+            }
+        };
+        Thread t = new Thread( disR );
+        t.start();
+        // wait up to 60 seconds for dispose and then quit if not done.
+        try
+        {
+            t.join( this.diskCacheAttributes.getShutdownSpoolTimeLimit() * 1000 );
+        }
+        catch ( InterruptedException ex )
+        {
+            log.error( "The Shutdown Spool Process was interrupted.", ex );
+        }
+
+        log.info( "In dispose, destroying event queue." );
+        // This stops the processor thread.
+        cacheEventQueue.destroy();
+
+        // Invoke any implementation specific disposal code
+        // need to handle the disposal first.
+        doDispose();
+
+        alive = false;
+    }
+
+    /**
+     * @return the region name.
+     * @see ICache#getCacheName
+     */
+    @Override
+    public String getCacheName()
+    {
+        return cacheName;
+    }
+
+    /**
+     * Gets basic stats for the abstract disk cache.
+     * <p>
+     * @return String
+     */
+    @Override
+    public String getStats()
+    {
+        return getStatistics().toString();
+    }
+
+    /**
+     * Returns semi-structured data.
+     * <p>
+     * @see org.apache.commons.jcs.auxiliary.AuxiliaryCache#getStatistics()
+     */
+    @Override
+    public IStats getStatistics()
+    {
+        IStats stats = new Stats();
+        stats.setTypeName( "Abstract Disk Cache" );
+
+        ArrayList<IStatElement<?>> elems = new ArrayList<IStatElement<?>>();
+
+        elems.add(new StatElement<Integer>( "Purgatory Hits", Integer.valueOf(purgHits) ) );
+        elems.add(new StatElement<Integer>( "Purgatory Size", Integer.valueOf(purgatory.size()) ) );
+
+        // get the stats from the event queue too
+        IStats eqStats = this.cacheEventQueue.getStatistics();
+        elems.addAll(eqStats.getStatElements());
+
+        stats.setStatElements( elems );
+
+        return stats;
+    }
+
+    /**
+     * @return the status -- alive or disposed from CacheConstants
+     * @see ICache#getStatus
+     */
+    @Override
+    public CacheStatus getStatus()
+    {
+        return ( alive ? CacheStatus.ALIVE : CacheStatus.DISPOSED );
+    }
+
+    /**
+     * Size cannot be determined without knowledge of the cache implementation, so subclasses will
+     * need to implement this method.
+     * <p>
+     * @return the number of items.
+     * @see ICache#getSize
+     */
+    @Override
+    public abstract int getSize();
+
+    /**
+     * @see org.apache.commons.jcs.engine.behavior.ICacheType#getCacheType
+     * @return Always returns DISK_CACHE since subclasses should all be of that type.
+     */
+    @Override
+    public CacheType getCacheType()
+    {
+        return CacheType.DISK_CACHE;
+    }
+
+    /**
+     * Cache that implements the CacheListener interface, and calls appropriate methods in its
+     * parent class.
+     */
+    protected class MyCacheListener
+        implements ICacheListener<K, V>
+    {
+        /** Id of the listener */
+        private long listenerId = 0;
+
+        /**
+         * @return cacheElement.getElementAttributes();
+         * @throws IOException
+         * @see ICacheListener#getListenerId
+         */
+        @Override
+        public long getListenerId()
+            throws IOException
+        {
+            return this.listenerId;
+        }
+
+        /**
+         * @param id
+         * @throws IOException
+         * @see ICacheListener#setListenerId
+         */
+        @Override
+        public void setListenerId( long id )
+            throws IOException
+        {
+            this.listenerId = id;
+        }
+
+        /**
+         * @param element
+         * @throws IOException
+         * @see ICacheListener#handlePut NOTE: This checks if the element is a puratory element and
+         *      behaves differently depending. However since we have control over how elements are
+         *      added to the cache event queue, that may not be needed ( they are always
+         *      PurgatoryElements ).
+         */
+        @Override
+        public void handlePut( ICacheElement<K, V> element )
+            throws IOException
+        {
+            if ( alive )
+            {
+                // If the element is a PurgatoryElement<K, V> we must check to see
+                // if it is still spoolable, and remove it from purgatory.
+                if ( element instanceof PurgatoryElement )
+                {
+                    PurgatoryElement<K, V> pe = (PurgatoryElement<K, V>) element;
+
+                    synchronized ( pe.getCacheElement() )
+                    {
+                        // TODO consider a timeout.
+                        // we need this so that we can have multiple update
+                        // threads and still have removeAll requests come in that
+                        // always win
+                        removeAllLock.readLock().lock();
+
+                        try
+                        {
+                            // TODO consider changing purgatory sync
+                            // String keyAsString = element.getKey().toString();
+                            synchronized ( purgatory )
+                            {
+                                // If the element has already been removed from
+                                // purgatory do nothing
+                                if ( !purgatory.containsKey( pe.getKey() ) )
+                                {
+                                    return;
+                                }
+
+                                element = pe.getCacheElement();
+                            }
+
+                            // I took this out of the purgatory sync block.
+                            // If the element is still eligible, spool it.
+                            if ( pe.isSpoolable() )
+                            {
+                                doUpdate( element );
+                            }
+                        }
+                        finally
+                        {
+                            removeAllLock.readLock().unlock();
+                        }
+
+                        synchronized ( purgatory )
+                        {
+                            // After the update has completed, it is safe to
+                            // remove the element from purgatory.
+                            purgatory.remove( element.getKey() );
+                        }
+                    }
+                }
+                else
+                {
+                    // call the child's implementation
+                    doUpdate( element );
+                }
+            }
+            else
+            {
+                /*
+                 * The cache is not alive, hence the element should be removed from purgatory. All
+                 * elements should be removed eventually. Perhaps, the alive check should have been
+                 * done before it went in the queue. This block handles the case where the disk
+                 * cache fails during normal operations.
+                 */
+                synchronized ( purgatory )
+                {
+                    purgatory.remove( element.getKey() );
+                }
+            }
+        }
+
+        /**
+         * @param cacheName
+         * @param key
+         * @throws IOException
+         * @see ICacheListener#handleRemove
+         */
+        @Override
+        public void handleRemove( String cacheName, K key )
+            throws IOException
+        {
+            if ( alive )
+            {
+                if ( doRemove( key ) )
+                {
+                    log.debug( "Element removed, key: " + key );
+                }
+            }
+        }
+
+        /**
+         * @param cacheName
+         * @throws IOException
+         * @see ICacheListener#handleRemoveAll
+         */
+        @Override
+        public void handleRemoveAll( String cacheName )
+            throws IOException
+        {
+            if ( alive )
+            {
+                doRemoveAll();
+            }
+        }
+
+        /**
+         * @param cacheName
+         * @throws IOException
+         * @see ICacheListener#handleDispose
+         */
+        @Override
+        public void handleDispose( String cacheName )
+            throws IOException
+        {
+            if ( alive )
+            {
+                doDispose();
+            }
+        }
+    }
+
+    /**
+     * Before the event logging layer, the subclasses implemented the do* methods. Now the do*
+     * methods call the *WithEventLogging method on the super. The *WithEventLogging methods call
+     * the abstract process* methods. The children implement the process methods.
+     * <p>
+     * ex. doGet calls getWithEventLogging, which calls processGet
+     */
+
+    /**
+     * Get a value from the persistent store.
+     * <p>
+     * Before the event logging layer, the subclasses implemented the do* methods. Now the do*
+     * methods call the *EventLogging method on the super. The *WithEventLogging methods call the
+     * abstract process* methods. The children implement the process methods.
+     * <p>
+     * @param key Key to locate value for.
+     * @return An object matching key, or null.
+     * @throws IOException
+     */
+    protected final ICacheElement<K, V> doGet( K key )
+        throws IOException
+    {
+        return super.getWithEventLogging( key );
+    }
+
+    /**
+     * Get a value from the persistent store.
+     * <p>
+     * Before the event logging layer, the subclasses implemented the do* methods. Now the do*
+     * methods call the *EventLogging method on the super. The *WithEventLogging methods call the
+     * abstract process* methods. The children implement the process methods.
+     * <p>
+     * @param pattern Used to match keys.
+     * @return A map of matches..
+     * @throws IOException
+     */
+    protected final Map<K, ICacheElement<K, V>> doGetMatching( String pattern )
+        throws IOException
+    {
+        return super.getMatchingWithEventLogging( pattern );
+    }
+
+    /**
+     * Add a cache element to the persistent store.
+     * <p>
+     * Before the event logging layer, the subclasses implemented the do* methods. Now the do*
+     * methods call the *EventLogging method on the super. The *WithEventLogging methods call the
+     * abstract process* methods. The children implement the process methods.
+     * <p>
+     * @param cacheElement
+     * @throws IOException
+     */
+    protected final void doUpdate( ICacheElement<K, V> cacheElement )
+        throws IOException
+    {
+        super.updateWithEventLogging( cacheElement );
+    }
+
+    /**
+     * Remove an object from the persistent store if found.
+     * <p>
+     * Before the event logging layer, the subclasses implemented the do* methods. Now the do*
+     * methods call the *EventLogging method on the super. The *WithEventLogging methods call the
+     * abstract process* methods. The children implement the process methods.
+     * <p>
+     * @param key Key of object to remove.
+     * @return whether or no the item was present when removed
+     * @throws IOException
+     */
+    protected final boolean doRemove( K key )
+        throws IOException
+    {
+        return super.removeWithEventLogging( key );
+    }
+
+    /**
+     * Remove all objects from the persistent store.
+     * <p>
+     * Before the event logging layer, the subclasses implemented the do* methods. Now the do*
+     * methods call the *EventLogging method on the super. The *WithEventLogging methods call the
+     * abstract process* methods. The children implement the process methods.
+     * <p>
+     * @throws IOException
+     */
+    protected final void doRemoveAll()
+        throws IOException
+    {
+        super.removeAllWithEventLogging();
+    }
+
+    /**
+     * Dispose of the persistent store. Note that disposal of purgatory and setting alive to false
+     * does NOT need to be done by this method.
+     * <p>
+     * Before the event logging layer, the subclasses implemented the do* methods. Now the do*
+     * methods call the *EventLogging method on the super. The *WithEventLogging methods call the
+     * abstract process* methods. The children implement the process methods.
+     * <p>
+     * @throws IOException
+     */
+    protected final void doDispose()
+        throws IOException
+    {
+        super.disposeWithEventLogging();
+    }
+
+    /**
+     * Gets the extra info for the event log.
+     * <p>
+     * @return disk location
+     */
+    @Override
+    public String getEventLoggingExtraInfo()
+    {
+        return getDiskLocation();
+    }
+
+    /**
+     * This is used by the event logging.
+     * <p>
+     * @return the location of the disk, either path or ip.
+     */
+    protected abstract String getDiskLocation();
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/disk/AbstractDiskCacheAttributes.java b/src/org/apache/commons/jcs/auxiliary/disk/AbstractDiskCacheAttributes.java
new file mode 100644
index 0000000..fb10a97
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/disk/AbstractDiskCacheAttributes.java
@@ -0,0 +1,233 @@
+package org.apache.commons.jcs.auxiliary.disk;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.AbstractAuxiliaryCacheAttributes;
+import org.apache.commons.jcs.auxiliary.AuxiliaryCacheAttributes;
+import org.apache.commons.jcs.auxiliary.disk.behavior.IDiskCacheAttributes;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.File;
+
+/**
+ * This has common attributes that any conceivable disk cache would need.
+ */
+public abstract class AbstractDiskCacheAttributes
+    extends AbstractAuxiliaryCacheAttributes
+    implements IDiskCacheAttributes
+{
+    /** Don't change. */
+    private static final long serialVersionUID = 8306631920391711229L;
+
+    /** The logger */
+    private static final Log log = LogFactory.getLog( AbstractDiskCacheAttributes.class );
+
+    /** path to disk */
+    private File diskPath;
+
+    /** if this is false, we will not execute remove all */
+    private boolean allowRemoveAll = true;
+
+    /** default to 5000 */
+    private int maxPurgatorySize = MAX_PURGATORY_SIZE_DEFAULT;
+
+    /** Default amount of time to allow for key persistence on shutdown */
+    private static final int DEFAULT_shutdownSpoolTimeLimit = 60;
+
+    /**
+     * This default determines how long the shutdown will wait for the key spool and data defrag to
+     * finish.
+     */
+    private int shutdownSpoolTimeLimit = DEFAULT_shutdownSpoolTimeLimit;
+
+    private DiskLimitType diskLimitType = DiskLimitType.COUNT;
+
+    private int chunkSize;
+
+    /**
+     * Sets the diskPath attribute of the DiskCacheAttributes object
+     * <p>
+     * @param path The new diskPath value
+     */
+    @Override
+    public void setDiskPath( String path )
+    {
+        setDiskPath( new File( path ) );
+    }
+
+    /**
+     * Sets the diskPath attribute of the DiskCacheAttributes object
+     * <p>
+     * @param diskPath The new diskPath value
+     */
+    public void setDiskPath( File diskPath )
+    {
+        this.diskPath = diskPath;
+        boolean result = this.diskPath.isDirectory(); 
+        
+        if (!result)
+        {
+        		result = this.diskPath.mkdirs();
+        }
+        if (!result)
+        {
+            log.error("Failed to create directory " + diskPath);
+        }
+    }
+
+    /**
+     * Gets the diskPath attribute of the attributes object
+     * <p>
+     * @return The diskPath value
+     */
+    @Override
+    public File getDiskPath()
+    {
+        return this.diskPath;
+    }
+
+    /**
+     * Gets the maxKeySize attribute of the DiskCacheAttributes object
+     * <p>
+     * @return The maxPurgatorySize value
+     */
+    @Override
+    public int getMaxPurgatorySize()
+    {
+        return maxPurgatorySize;
+    }
+
+    /**
+     * Sets the maxPurgatorySize attribute of the DiskCacheAttributes object
+     * <p>
+     * @param maxPurgatorySize The new maxPurgatorySize value
+     */
+    @Override
+    public void setMaxPurgatorySize( int maxPurgatorySize )
+    {
+        this.maxPurgatorySize = maxPurgatorySize;
+    }
+
+    /**
+     * Get the amount of time in seconds we will wait for elements to move to disk during shutdown
+     * for a particular region.
+     * <p>
+     * @return the time in seconds.
+     */
+    @Override
+    public int getShutdownSpoolTimeLimit()
+    {
+        return this.shutdownSpoolTimeLimit;
+    }
+
+    /**
+     * Sets the amount of time in seconds we will wait for elements to move to disk during shutdown
+     * for a particular region.
+     * <p>
+     * This is how long we give the event queue to empty.
+     * <p>
+     * The default is 60 seconds.
+     * <p>
+     * @param shutdownSpoolTimeLimit the time in seconds
+     */
+    @Override
+    public void setShutdownSpoolTimeLimit( int shutdownSpoolTimeLimit )
+    {
+        this.shutdownSpoolTimeLimit = shutdownSpoolTimeLimit;
+    }
+
+    /**
+     * Simple clone.
+     * <p>
+     * @return AuxiliaryCacheAttributes
+     */
+    @Override
+    public AuxiliaryCacheAttributes copy()
+    {
+        try
+        {
+            return (AuxiliaryCacheAttributes) this.clone();
+        }
+        catch ( Exception e )
+        {
+            // swallow
+        }
+        return this;
+    }
+
+    /**
+     * @param allowRemoveAll The allowRemoveAll to set.
+     */
+    @Override
+    public void setAllowRemoveAll( boolean allowRemoveAll )
+    {
+        this.allowRemoveAll = allowRemoveAll;
+    }
+
+    /**
+     * @return Returns the allowRemoveAll.
+     */
+    @Override
+    public boolean isAllowRemoveAll()
+    {
+        return allowRemoveAll;
+    }
+
+    /**
+     * Includes the common attributes for a debug message.
+     * <p>
+     * @return String
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder str = new StringBuilder();
+        str.append( "AbstractDiskCacheAttributes " );
+        str.append( "\n diskPath = " + getDiskPath() );
+        str.append( "\n maxPurgatorySize   = " + getMaxPurgatorySize() );
+        str.append( "\n allowRemoveAll   = " + isAllowRemoveAll() );
+        str.append( "\n ShutdownSpoolTimeLimit   = " + getShutdownSpoolTimeLimit() );
+        return str.toString();
+    }
+    @Override
+    public void setDiskLimitType(DiskLimitType diskLimitType) {
+        this.diskLimitType = diskLimitType;
+
+    }
+
+    @Override
+    public void setDiskLimitTypeName(String diskLimitTypeName) {
+        if (diskLimitTypeName != null) {
+            String name = diskLimitTypeName.trim();
+            if ("COUNT".equals(name)) {
+                diskLimitType = DiskLimitType.COUNT;
+            } else if ("SIZE".equals(name)) {
+                diskLimitType = DiskLimitType.SIZE;
+            }
+        }
+
+    }
+
+    @Override
+    public DiskLimitType getDiskLimitType() {
+        return diskLimitType;
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/disk/LRUMapJCS.java b/src/org/apache/commons/jcs/auxiliary/disk/LRUMapJCS.java
new file mode 100644
index 0000000..c6b1801
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/disk/LRUMapJCS.java
@@ -0,0 +1,75 @@
+package org.apache.commons.jcs.auxiliary.disk;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.utils.struct.LRUMap;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Extension of LRUMap for logging of removals. Can switch this back to a HashMap easily. This
+ * provides some abstraction. It also makes it easy to log overflow.
+ */
+public class LRUMapJCS<K, V>
+    extends LRUMap<K, V>
+{
+    /** The logger */
+    private static final Log log = LogFactory.getLog( LRUMapJCS.class );
+
+    /**
+     * This creates an unbounded version.
+     */
+    public LRUMapJCS()
+    {
+        super();
+    }
+
+    /**
+     * This creates a list bounded by the max key size argument. The Boundary is enforces by an LRU
+     * eviction policy.
+     * <p>
+     * This is used in the Disk cache to store keys and purgatory elements if a boundary is
+     * requested.
+     * <p>
+     * The LRU memory cache uses its own LRU implementation.
+     * <p>
+     * @param maxKeySize
+     */
+    public LRUMapJCS( int maxKeySize )
+    {
+        super( maxKeySize );
+    }
+
+    /**
+     * This is called when an item is removed from the LRU. We just log some information.
+     * <p>
+     * @param key
+     * @param value
+     */
+    @Override
+    protected void processRemovedLRU(K key, V value)
+    {
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Removing key [" + key + "] from key store, value [" + value + "]" );
+            log.debug( "Key store size [" + this.size() + "]" );
+        }
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/disk/PurgatoryElement.java b/src/org/apache/commons/jcs/auxiliary/disk/PurgatoryElement.java
new file mode 100644
index 0000000..7dc89fe
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/disk/PurgatoryElement.java
@@ -0,0 +1,157 @@
+package org.apache.commons.jcs.auxiliary.disk;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.CacheElement;
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.behavior.IElementAttributes;
+
+/**
+ * Implementation of cache elements in purgatory.
+ * <p>
+ * Elements are stored in purgatory when they are spooled to the auxiliary cache, but have not yet
+ * been written to disk.
+ */
+public class PurgatoryElement<K, V>
+    extends CacheElement<K, V>
+    implements ICacheElement<K, V>
+{
+    /** Don't change */
+    private static final long serialVersionUID = -8152034342684135628L;
+
+    /** Is the element ready to be spooled? */
+    private boolean spoolable = false;
+
+    /** Wrapped cache Element */
+    private ICacheElement<K, V> cacheElement;
+
+    /**
+     * Constructor for the PurgatoryElement<K, V> object
+     * <p>
+     * @param cacheElement CacheElement
+     */
+    public PurgatoryElement( ICacheElement<K, V> cacheElement )
+    {
+        super(cacheElement.getCacheName(),
+                cacheElement.getKey(), cacheElement.getVal(),
+                cacheElement.getElementAttributes());
+        this.cacheElement = cacheElement;
+    }
+
+    /**
+     * Gets the spoolable property.
+     * <p>
+     * @return The spoolable value
+     */
+    public boolean isSpoolable()
+    {
+        return spoolable;
+    }
+
+    /**
+     * Sets the spoolable property.
+     * <p>
+     * @param spoolable The new spoolable value
+     */
+    public void setSpoolable( boolean spoolable )
+    {
+        this.spoolable = spoolable;
+    }
+
+    /**
+     * Get the wrapped cache element.
+     * <p>
+     * @return ICacheElement
+     */
+    public ICacheElement<K, V> getCacheElement()
+    {
+        return cacheElement;
+    }
+
+    // ------------------------------------------------ interface ICacheElement
+
+    /**
+     * @return cacheElement.getCacheName();
+     * @see ICacheElement#getCacheName
+     */
+    @Override
+    public String getCacheName()
+    {
+        return cacheElement.getCacheName();
+    }
+
+    /**
+     * @return cacheElement.getKey();
+     * @see ICacheElement#getKey
+     */
+    @Override
+    public K getKey()
+    {
+        return cacheElement.getKey();
+    }
+
+    /**
+     * @return cacheElement.getVal();
+     * @see ICacheElement#getVal
+     */
+    @Override
+    public V getVal()
+    {
+        return cacheElement.getVal();
+    }
+
+    /**
+     * @return cacheElement.getElementAttributes();
+     * @see ICacheElement#getElementAttributes
+     */
+    @Override
+    public IElementAttributes getElementAttributes()
+    {
+        return cacheElement.getElementAttributes();
+    }
+
+    /**
+     * @param attr
+     * @see ICacheElement#setElementAttributes
+     */
+    @Override
+    public void setElementAttributes( IElementAttributes attr )
+    {
+        cacheElement.setElementAttributes( attr );
+    }
+
+    /**
+     * @return debug string
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder buf = new StringBuilder();
+        buf.append( "[PurgatoryElement: " );
+        buf.append( " isSpoolable = " + isSpoolable() );
+        buf.append( " CacheElement = " + getCacheElement() );
+        buf.append( " CacheName = " + getCacheName() );
+        buf.append( " Key = " + getKey() );
+        buf.append( " Value = " + getVal() );
+        buf.append( " ElementAttributes = " + getElementAttributes() );
+        buf.append( "]" );
+        return buf.toString();
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/disk/behavior/IDiskCacheAttributes.java b/src/org/apache/commons/jcs/auxiliary/disk/behavior/IDiskCacheAttributes.java
new file mode 100644
index 0000000..f7d32fd
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/disk/behavior/IDiskCacheAttributes.java
@@ -0,0 +1,131 @@
+package org.apache.commons.jcs.auxiliary.disk.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.AuxiliaryCacheAttributes;
+
+import java.io.File;
+
+/**
+ * Common disk cache attributes.
+ */
+public interface IDiskCacheAttributes
+    extends AuxiliaryCacheAttributes
+{
+    enum DiskLimitType {
+        /** limit elements by count (default) */
+        COUNT,
+        /** limit elements by their size */
+        SIZE
+    }
+    /**
+     * This is the default purgatory size limit. Purgatory is the area where
+     * items to be spooled are temporarily stored. It basically provides access
+     * to items on the to-be-spooled queue.
+     */
+    int MAX_PURGATORY_SIZE_DEFAULT = 5000;
+
+    /**
+     * Sets the diskPath attribute of the IJISPCacheAttributes object
+     * <p>
+     * @param path
+     *            The new diskPath value
+     */
+    void setDiskPath( String path );
+
+    /**
+     * Gets the diskPath attribute of the attributes object
+     * <p>
+     * @return The diskPath value
+     */
+    File getDiskPath();
+
+    /**
+     * Gets the maxKeySize attribute of the DiskCacheAttributes object
+     * <p>
+     * @return The maxPurgatorySize value
+     */
+    int getMaxPurgatorySize();
+
+    /**
+     * Sets the maxPurgatorySize attribute of the DiskCacheAttributes object
+     * <p>
+     * @param maxPurgatorySize
+     *            The new maxPurgatorySize value
+     */
+    void setMaxPurgatorySize( int maxPurgatorySize );
+
+    /**
+     * Get the amount of time in seconds we will wait for elements to move to
+     * disk during shutdown for a particular region.
+     * <p>
+     * @return the time in seconds.
+     */
+    int getShutdownSpoolTimeLimit();
+
+    /**
+     * Sets the amount of time in seconds we will wait for elements to move to
+     * disk during shutdown for a particular region.
+     * <p>
+     * This is how long we give the event queue to empty.
+     * <p>
+     * The default is 60 seconds.
+     * <p>
+     * @param shutdownSpoolTimeLimit
+     *            the time in seconds
+     */
+    void setShutdownSpoolTimeLimit( int shutdownSpoolTimeLimit );
+
+    /**
+     * If this is true then remove all is not prohibited.
+     * <p>
+     * @return boolean
+     */
+    boolean isAllowRemoveAll();
+
+    /**
+     * If this is false, then remove all requests will not be honored.
+     * <p>
+     * This provides a safety mechanism for the persistent store.
+     * <p>
+     * @param allowRemoveAll
+     */
+    void setAllowRemoveAll( boolean allowRemoveAll );
+
+    /**
+     * set the type of the limit of the cache size
+     * @param diskLimitType COUNT - limit by count of the elements, SIZE, limit by sum of element's size
+     */
+    void setDiskLimitType(DiskLimitType diskLimitType);
+
+    /**
+     * Translates and stores String values  of DiskLimitType
+     *
+     * Allowed values: "COUNT" and "SIZE"
+     * @param diskLimitTypeName
+     */
+    void setDiskLimitTypeName(String diskLimitTypeName);
+
+    /**
+     *
+     * @return active DiskLimitType
+     */
+    DiskLimitType getDiskLimitType();
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/disk/block/BlockDisk.java b/src/org/apache/commons/jcs/auxiliary/disk/block/BlockDisk.java
new file mode 100644
index 0000000..1e918da
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/disk/block/BlockDisk.java
@@ -0,0 +1,524 @@
+package org.apache.commons.jcs.auxiliary.disk.block;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.RandomAccessFile;
+import java.io.Serializable;
+import java.nio.ByteBuffer;
+import java.nio.channels.FileChannel;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicLong;
+
+import org.apache.commons.jcs.engine.behavior.IElementSerializer;
+import org.apache.commons.jcs.utils.serialization.StandardSerializer;
+import org.apache.commons.jcs.utils.struct.SingleLinkedList;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * This class manages reading an writing data to disk. When asked to write a value, it returns a
+ * block array. It can read an object from the block numbers in a byte array.
+ * <p>
+ * @author Aaron Smuts
+ */
+public class BlockDisk
+{
+    /** The logger */
+    private static final Log log = LogFactory.getLog( BlockDisk.class );
+
+    /** The size of the header that indicates the amount of data stored in an occupied block. */
+    public static final byte HEADER_SIZE_BYTES = 4;
+    // N.B. 4 bytes is the size used for ByteBuffer.putInt(int value) and ByteBuffer.getInt()
+
+    /** defaults to 4kb */
+    private static final int DEFAULT_BLOCK_SIZE_BYTES = 4 * 1024;
+
+    /** Size of the blocks */
+    private final int blockSizeBytes;
+
+    /**
+     * the total number of blocks that have been used. If there are no free, we will use this to
+     * calculate the position of the next block.
+     */
+    private final AtomicInteger numberOfBlocks = new AtomicInteger(0);
+
+    /** Empty blocks that can be reused. */
+    private final SingleLinkedList<Integer> emptyBlocks = new SingleLinkedList<Integer>();
+
+    /** The serializer. */
+    private final IElementSerializer elementSerializer;
+
+    /** Location of the spot on disk */
+    private final String filepath;
+
+    /** File channel for multiple concurrent reads and writes */
+    private final FileChannel fc;
+
+    /** How many bytes have we put to disk */
+    private final AtomicLong putBytes = new AtomicLong(0);
+
+    /** How many items have we put to disk */
+    private final AtomicLong putCount = new AtomicLong(0);
+
+    /**
+     * Constructor for the Disk object
+     * <p>
+     * @param file
+     * @param elementSerializer
+     * @throws FileNotFoundException
+     */
+    public BlockDisk( File file, IElementSerializer elementSerializer )
+        throws FileNotFoundException
+    {
+        this( file, DEFAULT_BLOCK_SIZE_BYTES, elementSerializer );
+    }
+
+    /**
+     * Creates the file and set the block size in bytes.
+     * <p>
+     * @param file
+     * @param blockSizeBytes
+     * @throws FileNotFoundException
+     */
+    public BlockDisk( File file, int blockSizeBytes )
+        throws FileNotFoundException
+    {
+        this( file, blockSizeBytes, new StandardSerializer() );
+    }
+
+    /**
+     * Creates the file and set the block size in bytes.
+     * <p>
+     * @param file
+     * @param blockSizeBytes
+     * @param elementSerializer
+     * @throws FileNotFoundException
+     */
+    public BlockDisk( File file, int blockSizeBytes, IElementSerializer elementSerializer )
+        throws FileNotFoundException
+    {
+        this.filepath = file.getAbsolutePath();
+        RandomAccessFile raf = new RandomAccessFile( filepath, "rw" );
+        this.fc = raf.getChannel();
+
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "Constructing BlockDisk, blockSizeBytes [" + blockSizeBytes + "]" );
+        }
+
+        this.blockSizeBytes = blockSizeBytes;
+        this.elementSerializer = elementSerializer;
+    }
+
+    /**
+     * Allocate a given number of blocks from the available set
+     *
+     * @param numBlocksNeeded
+     * @return an array of allocated blocks
+     */
+    private int[] allocateBlocks(int numBlocksNeeded)
+    {
+        assert numBlocksNeeded >= 1;
+
+        int[] blocks = new int[numBlocksNeeded];
+        // get them from the empty list or take the next one
+        for (int i = 0; i < numBlocksNeeded; i++)
+        {
+            Integer emptyBlock = emptyBlocks.takeFirst();
+            if (emptyBlock == null)
+            {
+                emptyBlock = Integer.valueOf(numberOfBlocks.getAndIncrement());
+            }
+            blocks[i] = emptyBlock.intValue();
+        }
+
+        return blocks;
+    }
+
+    /**
+     * This writes an object to disk and returns the blocks it was stored in.
+     * <p>
+     * The program flow is as follows:
+     * <ol>
+     * <li>Serialize the object.</li>
+     * <li>Determine the number of blocks needed.</li>
+     * <li>Look for free blocks in the emptyBlock list.</li>
+     * <li>If there were not enough in the empty list. Take the nextBlock and increment it.</li>
+     * <li>If the data will not fit in one block, create sub arrays.</li>
+     * <li>Write the subarrays to disk.</li>
+     * <li>If the process fails we should decrement the block count if we took from it.</li>
+     * </ol>
+     * @param object
+     * @return the blocks we used.
+     * @throws IOException
+     */
+    protected int[] write( Serializable object )
+        throws IOException
+    {
+        // serialize the object
+        byte[] data = elementSerializer.serialize(object);
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "write, total pre-chunking data.length = " + data.length );
+        }
+
+        this.putBytes.addAndGet(data.length);
+        this.putCount.incrementAndGet();
+
+        // figure out how many blocks we need.
+        int numBlocksNeeded = calculateTheNumberOfBlocksNeeded(data);
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "numBlocksNeeded = " + numBlocksNeeded );
+        }
+
+        // allocate blocks
+        int[] blocks = allocateBlocks(numBlocksNeeded);
+
+        int offset = 0;
+        final int maxChunkSize = blockSizeBytes - HEADER_SIZE_BYTES;
+        ByteBuffer headerBuffer = ByteBuffer.allocate(HEADER_SIZE_BYTES);
+
+        for (int i = 0; i < numBlocksNeeded; i++)
+        {
+            headerBuffer.clear();
+            int length = Math.min(maxChunkSize, data.length - offset);
+            headerBuffer.putInt(length);
+
+            ByteBuffer dataBuffer = ByteBuffer.wrap(data, offset, length);
+
+            long position = calculateByteOffsetForBlock(blocks[i]);
+            // write the header
+            headerBuffer.flip();
+            int written = fc.write(headerBuffer, position);
+            assert written == HEADER_SIZE_BYTES;
+
+            //write the data
+            written = fc.write(dataBuffer, position + HEADER_SIZE_BYTES);
+            assert written == length;
+
+            offset += length;
+        }
+
+        //fc.force(false);
+
+        return blocks;
+    }
+
+    /**
+     * Return the amount to put in each block. Fill them all the way, minus the header.
+     * <p>
+     * @param complete
+     * @param numBlocksNeeded
+     * @return byte[][]
+     */
+    protected byte[][] getBlockChunks( byte[] complete, int numBlocksNeeded )
+    {
+        byte[][] chunks = new byte[numBlocksNeeded][];
+
+        if ( numBlocksNeeded == 1 )
+        {
+            chunks[0] = complete;
+        }
+        else
+        {
+            int maxChunkSize = this.blockSizeBytes - HEADER_SIZE_BYTES;
+            int totalBytes = complete.length;
+            int totalUsed = 0;
+            for ( short i = 0; i < numBlocksNeeded; i++ )
+            {
+                // use the max that can be written to a block or whatever is left in the original
+                // array
+                int chunkSize = Math.min( maxChunkSize, totalBytes - totalUsed );
+                byte[] chunk = new byte[chunkSize];
+                // copy from the used position to the chunk size on the complete array to the chunk
+                // array.
+                System.arraycopy( complete, totalUsed, chunk, 0, chunkSize );
+                chunks[i] = chunk;
+                totalUsed += chunkSize;
+            }
+        }
+
+        return chunks;
+    }
+
+    /**
+     * Reads an object that is located in the specified blocks.
+     * <p>
+     * @param blockNumbers
+     * @return Serializable
+     * @throws IOException
+     * @throws ClassNotFoundException
+     */
+    protected <T extends Serializable> T read( int[] blockNumbers )
+        throws IOException, ClassNotFoundException
+    {
+        byte[] data = null;
+
+        if ( blockNumbers.length == 1 )
+        {
+            data = readBlock( blockNumbers[0] );
+        }
+        else
+        {
+            ByteArrayOutputStream baos = new ByteArrayOutputStream(getBlockSizeBytes());
+            // get all the blocks into data
+            for ( short i = 0; i < blockNumbers.length; i++ )
+            {
+                byte[] chunk = readBlock( blockNumbers[i] );
+                baos.write(chunk);
+            }
+
+            data = baos.toByteArray();
+            baos.close();
+        }
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "read, total post combination data.length = " + data.length );
+        }
+
+        return elementSerializer.deSerialize( data, null );
+    }
+
+    /**
+     * This reads the occupied data in a block.
+     * <p>
+     * The first four bytes of the record should tell us how long it is. The data is read into a
+     * byte array and then an object is constructed from the byte array.
+     * <p>
+     * @return byte[]
+     * @param block
+     * @throws IOException
+     */
+    private byte[] readBlock( int block )
+        throws IOException
+    {
+        int datalen = 0;
+
+        String message = null;
+        boolean corrupted = false;
+        long fileLength = fc.size();
+
+        int position = calculateByteOffsetForBlock( block );
+//        if ( position > fileLength )
+//        {
+//            corrupted = true;
+//            message = "Record " + position + " starts past EOF.";
+//        }
+//        else
+        {
+            ByteBuffer datalength = ByteBuffer.allocate(HEADER_SIZE_BYTES);
+            fc.read(datalength, position);
+            datalength.flip();
+            datalen = datalength.getInt();
+            if ( position + datalen > fileLength )
+            {
+                corrupted = true;
+                message = "Record " + position + " exceeds file length.";
+            }
+        }
+
+        if ( corrupted )
+        {
+            log.warn( "\n The file is corrupt: " + "\n " + message );
+            throw new IOException( "The File Is Corrupt, need to reset" );
+        }
+
+        ByteBuffer data = ByteBuffer.allocate(datalen);
+        fc.read(data, position + HEADER_SIZE_BYTES);
+        data.flip();
+
+        return data.array();
+    }
+
+    /**
+     * Add these blocks to the emptyBlock list.
+     * <p>
+     * @param blocksToFree
+     */
+    protected void freeBlocks( int[] blocksToFree )
+    {
+        if ( blocksToFree != null )
+        {
+            for ( short i = 0; i < blocksToFree.length; i++ )
+            {
+                emptyBlocks.addLast( Integer.valueOf( blocksToFree[i] ) );
+            }
+        }
+    }
+
+    /**
+     * Calculates the file offset for a particular block.
+     * <p>
+     * @param block
+     * @return the offset for this block
+     */
+    protected int calculateByteOffsetForBlock( int block )
+    {
+        return block * blockSizeBytes;
+    }
+
+    /**
+     * The number of blocks needed.
+     * <p>
+     * @param data
+     * @return the number of blocks needed to store the byte array
+     */
+    protected int calculateTheNumberOfBlocksNeeded( byte[] data )
+    {
+        int dataLength = data.length;
+
+        int oneBlock = blockSizeBytes - HEADER_SIZE_BYTES;
+
+        // takes care of 0 = HEADER_SIZE_BYTES + blockSizeBytes
+        if ( dataLength <= oneBlock )
+        {
+            return 1;
+        }
+
+        int dividend = dataLength / oneBlock;
+
+        if ( dataLength % oneBlock != 0 )
+        {
+            dividend++;
+        }
+        return dividend;
+    }
+
+    /**
+     * Returns the file length.
+     * <p>
+     * @return the size of the file.
+     * @throws IOException
+     */
+    protected long length()
+        throws IOException
+    {
+        return fc.size();
+    }
+
+    /**
+     * Closes the file.
+     * <p>
+     * @throws IOException
+     */
+    protected void close()
+        throws IOException
+    {
+        fc.close();
+    }
+
+    /**
+     * Resets the file.
+     * <p>
+     * @throws IOException
+     */
+    protected synchronized void reset()
+        throws IOException
+    {
+        this.numberOfBlocks.set(0);
+        this.emptyBlocks.clear();
+        fc.truncate(0);
+        fc.force(true);
+    }
+
+    /**
+     * @return Returns the numberOfBlocks.
+     */
+    protected int getNumberOfBlocks()
+    {
+        return numberOfBlocks.get();
+    }
+
+    /**
+     * @return Returns the blockSizeBytes.
+     */
+    protected int getBlockSizeBytes()
+    {
+        return blockSizeBytes;
+    }
+
+    /**
+     * @return Returns the average size of the an element inserted.
+     */
+    protected long getAveragePutSizeBytes()
+    {
+        long count = this.putCount.get();
+
+        if (count == 0 )
+        {
+            return 0;
+        }
+        return this.putBytes.get() / count;
+    }
+
+    /**
+     * @return Returns the number of empty blocks.
+     */
+    protected int getEmptyBlocks()
+    {
+        return this.emptyBlocks.size();
+    }
+
+    /**
+     * For debugging only.
+     * <p>
+     * @return String with details.
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder buf = new StringBuilder();
+        buf.append( "\nBlock Disk " );
+        buf.append( "\n  Filepath [" + filepath + "]" );
+        buf.append( "\n  NumberOfBlocks [" + this.numberOfBlocks.get() + "]" );
+        buf.append( "\n  BlockSizeBytes [" + this.blockSizeBytes + "]" );
+        buf.append( "\n  Put Bytes [" + this.putBytes + "]" );
+        buf.append( "\n  Put Count [" + this.putCount + "]" );
+        buf.append( "\n  Average Size [" + getAveragePutSizeBytes() + "]" );
+        buf.append( "\n  Empty Blocks [" + this.getEmptyBlocks() + "]" );
+        try
+        {
+            buf.append( "\n  Length [" + length() + "]" );
+        }
+        catch ( IOException e )
+        {
+            // swallow
+        }
+        return buf.toString();
+    }
+
+    /**
+     * This is used for debugging.
+     * <p>
+     * @return the file path.
+     */
+    protected String getFilePath()
+    {
+        return filepath;
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/disk/block/BlockDiskCache.java b/src/org/apache/commons/jcs/auxiliary/disk/block/BlockDiskCache.java
new file mode 100644
index 0000000..2836ab6
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/disk/block/BlockDiskCache.java
@@ -0,0 +1,739 @@
+package org.apache.commons.jcs.auxiliary.disk.block;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+
+import org.apache.commons.jcs.auxiliary.AuxiliaryCacheAttributes;
+import org.apache.commons.jcs.auxiliary.disk.AbstractDiskCache;
+import org.apache.commons.jcs.engine.CacheConstants;
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.behavior.IElementSerializer;
+import org.apache.commons.jcs.engine.behavior.IRequireScheduler;
+import org.apache.commons.jcs.engine.control.group.GroupAttrName;
+import org.apache.commons.jcs.engine.stats.StatElement;
+import org.apache.commons.jcs.engine.stats.Stats;
+import org.apache.commons.jcs.engine.stats.behavior.IStatElement;
+import org.apache.commons.jcs.engine.stats.behavior.IStats;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * There is one BlockDiskCache per region. It manages the key and data store.
+ * <p>
+ * @author Aaron Smuts
+ */
+public class BlockDiskCache<K, V>
+    extends AbstractDiskCache<K, V>
+    implements IRequireScheduler
+{
+    /** The logger. */
+    private static final Log log = LogFactory.getLog( BlockDiskCache.class );
+
+    /** The name to prefix all log messages with. */
+    private final String logCacheName;
+
+    /** The name of the file to store data. */
+    private final String fileName;
+
+    /** The data access object */
+    private BlockDisk dataFile;
+
+    /** Attributes governing the behavior of the block disk cache. */
+    private final BlockDiskCacheAttributes blockDiskCacheAttributes;
+
+    /** The root directory for keys and data. */
+    private final File rootDirectory;
+
+    /** Store, loads, and persists the keys */
+    private BlockDiskKeyStore<K> keyStore;
+
+    /**
+     * Use this lock to synchronize reads and writes to the underlying storage mechanism. We don't
+     * need a reentrant lock, since we only lock one level.
+     */
+    private final ReentrantReadWriteLock storageLock = new ReentrantReadWriteLock();
+
+    /**
+     * Constructs the BlockDisk after setting up the root directory.
+     * <p>
+     * @param cacheAttributes
+     */
+    public BlockDiskCache( BlockDiskCacheAttributes cacheAttributes )
+    {
+        this( cacheAttributes, null );
+    }
+
+    /**
+     * Constructs the BlockDisk after setting up the root directory.
+     * <p>
+     * @param cacheAttributes
+     * @param elementSerializer used if supplied, the super's super will not set a null
+     */
+    public BlockDiskCache( BlockDiskCacheAttributes cacheAttributes, IElementSerializer elementSerializer )
+    {
+        super( cacheAttributes );
+        setElementSerializer( elementSerializer );
+
+        this.blockDiskCacheAttributes = cacheAttributes;
+        this.logCacheName = "Region [" + getCacheName() + "] ";
+
+        if ( log.isInfoEnabled() )
+        {
+            log.info( logCacheName + "Constructing BlockDiskCache with attributes " + cacheAttributes );
+        }
+
+        // Make a clean file name
+        this.fileName = getCacheName().replaceAll("[^a-zA-Z0-9-_\\.]", "_");
+        this.rootDirectory = cacheAttributes.getDiskPath();
+
+        if ( log.isInfoEnabled() )
+        {
+            log.info( logCacheName + "Cache file root directory: [" + rootDirectory + "]");
+        }
+
+        try
+        {
+            if ( this.blockDiskCacheAttributes.getBlockSizeBytes() > 0 )
+            {
+                this.dataFile = new BlockDisk( new File( rootDirectory, fileName + ".data" ),
+                                               this.blockDiskCacheAttributes.getBlockSizeBytes() );
+            }
+            else
+            {
+                this.dataFile = new BlockDisk( new File( rootDirectory, fileName + ".data" ), getElementSerializer() );
+            }
+
+            keyStore = new BlockDiskKeyStore<K>( this.blockDiskCacheAttributes, this );
+
+            boolean alright = verifyDisk();
+
+            if ( keyStore.size() == 0 || !alright )
+            {
+                this.reset();
+            }
+
+            // Initialization finished successfully, so set alive to true.
+            alive = true;
+            if ( log.isInfoEnabled() )
+            {
+                log.info( logCacheName + "Block Disk Cache is alive." );
+            }
+        }
+        catch ( IOException e )
+        {
+            log.error( logCacheName + "Failure initializing for fileName: " + fileName + " and root directory: "
+                + rootDirectory, e );
+        }
+    }
+
+    /**
+     * @see org.apache.commons.jcs.engine.behavior.IRequireScheduler#setScheduledExecutorService(java.util.concurrent.ScheduledExecutorService)
+     */
+    @Override
+    public void setScheduledExecutorService(ScheduledExecutorService scheduledExecutor)
+    {
+        // add this region to the persistence thread.
+        // TODO we might need to stagger this a bit.
+        if ( this.blockDiskCacheAttributes.getKeyPersistenceIntervalSeconds() > 0 )
+        {
+            scheduledExecutor.scheduleAtFixedRate(
+                    new Runnable()
+                    {
+                        @Override
+                        public void run()
+                        {
+                            keyStore.saveKeys();
+                        }
+                    },
+                    this.blockDiskCacheAttributes.getKeyPersistenceIntervalSeconds(),
+                    this.blockDiskCacheAttributes.getKeyPersistenceIntervalSeconds(),
+                    TimeUnit.SECONDS);
+        }
+    }
+
+    /**
+     * We need to verify that the file on disk uses the same block size and that the file is the
+     * proper size.
+     * <p>
+     * @return true if it looks ok
+     */
+    protected boolean verifyDisk()
+    {
+        boolean alright = false;
+        // simply try to read a few. If it works, then the file is probably ok.
+        // TODO add more.
+
+        storageLock.readLock().lock();
+
+        try
+        {
+            int maxToTest = 100;
+            int count = 0;
+            Iterator<Map.Entry<K, int[]>> it = this.keyStore.entrySet().iterator();
+            while ( it.hasNext() && count < maxToTest )
+            {
+                count++;
+                Map.Entry<K, int[]> entry = it.next();
+                Object data = this.dataFile.read( entry.getValue() );
+                if ( data == null )
+                {
+                    throw new Exception( logCacheName + "Couldn't find data for key [" + entry.getKey() + "]" );
+                }
+            }
+            alright = true;
+        }
+        catch ( Exception e )
+        {
+            log.warn( logCacheName + "Problem verifying disk.  Message [" + e.getMessage() + "]" );
+            alright = false;
+        }
+        finally
+        {
+            storageLock.readLock().unlock();
+        }
+
+        return alright;
+    }
+
+    /**
+     * Return the keys in this cache.
+     * <p>
+     * @see org.apache.commons.jcs.auxiliary.disk.AbstractDiskCache#getKeySet()
+     */
+    @Override
+    public Set<K> getKeySet() throws IOException
+    {
+        HashSet<K> keys = new HashSet<K>();
+
+        storageLock.readLock().lock();
+
+        try
+        {
+            keys.addAll(this.keyStore.keySet());
+        }
+        finally
+        {
+            storageLock.readLock().unlock();
+        }
+
+        return keys;
+    }
+
+    /**
+     * Gets matching items from the cache.
+     * <p>
+     * @param pattern
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data in cache matching keys
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> processGetMatching( String pattern )
+    {
+        Map<K, ICacheElement<K, V>> elements = new HashMap<K, ICacheElement<K, V>>();
+
+        Set<K> keyArray = null;
+        storageLock.readLock().lock();
+        try
+        {
+            keyArray = new HashSet<K>(keyStore.keySet());
+        }
+        finally
+        {
+            storageLock.readLock().unlock();
+        }
+
+        Set<K> matchingKeys = getKeyMatcher().getMatchingKeysFromArray( pattern, keyArray );
+
+        for (K key : matchingKeys)
+        {
+            ICacheElement<K, V> element = processGet( key );
+            if ( element != null )
+            {
+                elements.put( key, element );
+            }
+        }
+
+        return elements;
+    }
+
+    /**
+     * Returns the number of keys.
+     * <p>
+     * (non-Javadoc)
+     * @see org.apache.commons.jcs.auxiliary.disk.AbstractDiskCache#getSize()
+     */
+    @Override
+    public int getSize()
+    {
+        return this.keyStore.size();
+    }
+
+    /**
+     * Gets the ICacheElement<K, V> for the key if it is in the cache. The program flow is as follows:
+     * <ol>
+     * <li>Make sure the disk cache is alive.</li> <li>Get a read lock.</li> <li>See if the key is
+     * in the key store.</li> <li>If we found a key, ask the BlockDisk for the object at the
+     * blocks..</li> <li>Release the lock.</li>
+     * </ol>
+     * (non-Javadoc)
+     * @param key
+     * @return ICacheElement
+     * @see org.apache.commons.jcs.auxiliary.disk.AbstractDiskCache#doGet(java.io.Serializable)
+     */
+    @Override
+    protected ICacheElement<K, V> processGet( K key )
+    {
+        if ( !alive )
+        {
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( logCacheName + "No longer alive so returning null for key = " + key );
+            }
+            return null;
+        }
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( logCacheName + "Trying to get from disk: " + key );
+        }
+
+        ICacheElement<K, V> object = null;
+
+
+        try
+        {
+            storageLock.readLock().lock();
+            try {
+                int[] ded = this.keyStore.get( key );
+                if ( ded != null )
+                {
+                    object = this.dataFile.read( ded );
+                }
+            } finally {
+                storageLock.readLock().unlock();
+            }
+
+        }
+        catch ( IOException ioe )
+        {
+            log.error( logCacheName + "Failure getting from disk--IOException, key = " + key, ioe );
+            reset();
+        }
+        catch ( Exception e )
+        {
+            log.error( logCacheName + "Failure getting from disk, key = " + key, e );
+        }
+        return object;
+    }
+
+    /**
+     * Writes an element to disk. The program flow is as follows:
+     * <ol>
+     * <li>Acquire write lock.</li> <li>See id an item exists for this key.</li> <li>If an item
+     * already exists, add its blocks to the remove list.</li> <li>Have the Block disk write the
+     * item.</li> <li>Create a descriptor and add it to the key map.</li> <li>Release the write
+     * lock.</li>
+     * </ol>
+     * @param element
+     * @see org.apache.commons.jcs.auxiliary.disk.AbstractDiskCache#doUpdate(org.apache.commons.jcs.engine.behavior.ICacheElement)
+     */
+    @Override
+    protected void processUpdate( ICacheElement<K, V> element )
+    {
+        if ( !alive )
+        {
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( logCacheName + "No longer alive; aborting put of key = " + element.getKey() );
+            }
+            return;
+        }
+
+        int[] old = null;
+
+        // make sure this only locks for one particular cache region
+        storageLock.writeLock().lock();
+
+        try
+        {
+            old = this.keyStore.get( element.getKey() );
+
+            if ( old != null )
+            {
+                this.dataFile.freeBlocks( old );
+            }
+
+            int[] blocks = this.dataFile.write( element );
+
+            this.keyStore.put( element.getKey(), blocks );
+
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( logCacheName + "Put to file [" + fileName + "] key [" + element.getKey() + "]" );
+            }
+        }
+        catch ( IOException e )
+        {
+            log.error( logCacheName + "Failure updating element, key: " + element.getKey() + " old: " + Arrays.toString(old), e );
+        }
+        finally
+        {
+            storageLock.writeLock().unlock();
+        }
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( logCacheName + "Storing element on disk, key: " + element.getKey() );
+        }
+    }
+
+    /**
+     * Returns true if the removal was successful; or false if there is nothing to remove. Current
+     * implementation always result in a disk orphan.
+     * <p>
+     * (non-Javadoc)
+     * @param key
+     * @return true if removed anything
+     * @see org.apache.commons.jcs.auxiliary.disk.AbstractDiskCache#doRemove(java.io.Serializable)
+     */
+    @Override
+    protected boolean processRemove( K key )
+    {
+        if ( !alive )
+        {
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( logCacheName + "No longer alive so returning false for key = " + key );
+            }
+            return false;
+        }
+
+        boolean reset = false;
+        boolean removed = false;
+
+        storageLock.writeLock().lock();
+
+        try
+        {
+            if ( key instanceof String && key.toString().endsWith( CacheConstants.NAME_COMPONENT_DELIMITER ) )
+            {
+                // remove all keys of the same name group.
+                Iterator<Map.Entry<K, int[]>> iter = this.keyStore.entrySet().iterator();
+
+                while ( iter.hasNext() )
+                {
+                    Map.Entry<K, int[]> entry = iter.next();
+                    K k = entry.getKey();
+
+                    if ( k instanceof String && k.toString().startsWith( key.toString() ) )
+                    {
+                        int[] ded = this.keyStore.get( key );
+                        this.dataFile.freeBlocks( ded );
+                        iter.remove();
+                        removed = true;
+                        // TODO this needs to update the remove count separately
+                    }
+                }
+            }
+            else if ( key instanceof GroupAttrName && ((GroupAttrName<?>)key).attrName == null )
+            {
+                // remove all keys of the same name hierarchy.
+                Iterator<Map.Entry<K, int[]>> iter = this.keyStore.entrySet().iterator();
+                while ( iter.hasNext() )
+                {
+                    Map.Entry<K, int[]> entry = iter.next();
+                    K k = entry.getKey();
+
+                    if ( k instanceof GroupAttrName &&
+                        ((GroupAttrName<?>)k).groupId.equals(((GroupAttrName<?>)key).groupId))
+                    {
+                        int[] ded = this.keyStore.get( key );
+                        this.dataFile.freeBlocks( ded );
+                        iter.remove();
+                        removed = true;
+                    }
+                }
+            }
+            else
+            {
+                // remove single item.
+                int[] ded = this.keyStore.remove( key );
+                removed = ded != null;
+                if ( removed )
+                {
+                    this.dataFile.freeBlocks( ded );
+                }
+
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( logCacheName + "Disk removal: Removed from key hash, key [" + key + "] removed = "
+                        + removed );
+                }
+            }
+        }
+        catch ( Exception e )
+        {
+            log.error( logCacheName + "Problem removing element.", e );
+            reset = true;
+        }
+        finally
+        {
+            storageLock.writeLock().unlock();
+        }
+
+        if ( reset )
+        {
+            reset();
+        }
+
+        return removed;
+    }
+
+    /**
+     * Resets the keyfile, the disk file, and the memory key map.
+     * <p>
+     * @see org.apache.commons.jcs.auxiliary.disk.AbstractDiskCache#doRemoveAll()
+     */
+    @Override
+    protected void processRemoveAll()
+    {
+        reset();
+    }
+
+    /**
+     * Dispose of the disk cache in a background thread. Joins against this thread to put a cap on
+     * the disposal time.
+     * <p>
+     * TODO make dispose window configurable.
+     */
+    @Override
+    public void processDispose()
+    {
+        Runnable disR = new Runnable()
+        {
+            @Override
+            public void run()
+            {
+                try
+                {
+                    disposeInternal();
+                }
+                catch ( InterruptedException e )
+                {
+                    log.warn( "Interrupted while diposing." );
+                }
+            }
+        };
+        Thread t = new Thread( disR, "BlockDiskCache-DisposalThread" );
+        t.start();
+        // wait up to 60 seconds for dispose and then quit if not done.
+        try
+        {
+            t.join( 60 * 1000 );
+        }
+        catch ( InterruptedException ex )
+        {
+            log.error( logCacheName + "Interrupted while waiting for disposal thread to finish.", ex );
+        }
+    }
+
+    /**
+     * Internal method that handles the disposal.
+     * @throws InterruptedException
+     */
+    protected void disposeInternal()
+        throws InterruptedException
+    {
+        if ( !alive )
+        {
+            log.error( logCacheName + "Not alive and dispose was called, filename: " + fileName );
+            return;
+        }
+        storageLock.writeLock().lock();
+        try
+        {
+            // Prevents any interaction with the cache while we're shutting down.
+            alive = false;
+
+            this.keyStore.saveKeys();
+
+            try
+            {
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( logCacheName + "Closing files, base filename: " + fileName );
+                }
+                dataFile.close();
+                // dataFile = null;
+
+                // TOD make a close
+                // keyFile.close();
+                // keyFile = null;
+            }
+            catch ( IOException e )
+            {
+                log.error( logCacheName + "Failure closing files in dispose, filename: " + fileName, e );
+            }
+        }
+        finally
+        {
+            storageLock.writeLock().unlock();
+        }
+
+        if ( log.isInfoEnabled() )
+        {
+            log.info( logCacheName + "Shutdown complete." );
+        }
+    }
+
+    /**
+     * Returns the attributes.
+     * <p>
+     * (non-Javadoc)
+     * @see org.apache.commons.jcs.auxiliary.AuxiliaryCache#getAuxiliaryCacheAttributes()
+     */
+    @Override
+    public AuxiliaryCacheAttributes getAuxiliaryCacheAttributes()
+    {
+        return this.blockDiskCacheAttributes;
+    }
+
+    /**
+     * Reset effectively clears the disk cache, creating new files, recyclebins, and keymaps.
+     * <p>
+     * It can be used to handle errors by last resort, force content update, or removeall.
+     */
+    private void reset()
+    {
+        if ( log.isWarnEnabled() )
+        {
+            log.warn( logCacheName + "Resetting cache" );
+        }
+
+        try
+        {
+            storageLock.writeLock().lock();
+
+            this.keyStore.reset();
+
+            if ( dataFile != null )
+            {
+                dataFile.reset();
+            }
+        }
+        catch ( IOException e )
+        {
+            log.error( logCacheName + "Failure resetting state", e );
+        }
+        finally
+        {
+            storageLock.writeLock().unlock();
+        }
+    }
+
+    /**
+     * Add these blocks to the emptyBlock list.
+     * <p>
+     * @param blocksToFree
+     */
+    protected void freeBlocks( int[] blocksToFree )
+    {
+        this.dataFile.freeBlocks( blocksToFree );
+    }
+
+    /**
+     * Gets basic stats for the disk cache.
+     * <p>
+     * @return String
+     */
+    @Override
+    public String getStats()
+    {
+        return getStatistics().toString();
+    }
+
+    /**
+     * Returns info about the disk cache.
+     * <p>
+     * (non-Javadoc)
+     * @see org.apache.commons.jcs.auxiliary.AuxiliaryCache#getStatistics()
+     */
+    @Override
+    public IStats getStatistics()
+    {
+        IStats stats = new Stats();
+        stats.setTypeName( "Block Disk Cache" );
+
+        ArrayList<IStatElement<?>> elems = new ArrayList<IStatElement<?>>();
+
+        elems.add(new StatElement<Boolean>( "Is Alive", Boolean.valueOf(alive) ) );
+        elems.add(new StatElement<Integer>( "Key Map Size", Integer.valueOf(this.keyStore.size()) ) );
+
+        try
+        {
+            elems.add(new StatElement<Long>( "Data File Length",
+                    Long.valueOf(this.dataFile != null ? this.dataFile.length() : -1L) ) );
+        }
+        catch ( IOException e )
+        {
+            log.error( e );
+        }
+
+        elems.add(new StatElement<Integer>( "Block Size Bytes",
+                Integer.valueOf(this.dataFile.getBlockSizeBytes()) ) );
+        elems.add(new StatElement<Integer>( "Number Of Blocks",
+                Integer.valueOf(this.dataFile.getNumberOfBlocks()) ) );
+        elems.add(new StatElement<Long>( "Average Put Size Bytes",
+                Long.valueOf(this.dataFile.getAveragePutSizeBytes()) ) );
+        elems.add(new StatElement<Integer>( "Empty Blocks",
+                Integer.valueOf(this.dataFile.getEmptyBlocks()) ) );
+
+        // get the stats from the super too
+        IStats sStats = super.getStatistics();
+        elems.addAll(sStats.getStatElements());
+
+        stats.setStatElements( elems );
+
+        return stats;
+    }
+
+    /**
+     * This is used by the event logging.
+     * <p>
+     * @return the location of the disk, either path or ip.
+     */
+    @Override
+    protected String getDiskLocation()
+    {
+        return dataFile.getFilePath();
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/disk/block/BlockDiskCacheAttributes.java b/src/org/apache/commons/jcs/auxiliary/disk/block/BlockDiskCacheAttributes.java
new file mode 100644
index 0000000..e520dda
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/disk/block/BlockDiskCacheAttributes.java
@@ -0,0 +1,118 @@
+package org.apache.commons.jcs.auxiliary.disk.block;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.disk.AbstractDiskCacheAttributes;
+
+/**
+ * This holds attributes for Block Disk Cache configuration.
+ * <p>
+ * @author Aaron Smuts
+ */
+public class BlockDiskCacheAttributes
+    extends AbstractDiskCacheAttributes
+{
+    /** Don't change */
+    private static final long serialVersionUID = 6568840097657265989L;
+
+    /** The size per block in bytes. */
+    private int blockSizeBytes;
+
+    /** Maximum number of keys to be kept in memory */
+    private static final int DEFAULT_MAX_KEY_SIZE = 5000;
+
+    /** -1 means no limit. */
+    private int maxKeySize = DEFAULT_MAX_KEY_SIZE;
+
+    /** How often should we persist the keys. */
+    private static final long DEFAULT_KEY_PERSISTENCE_INTERVAL_SECONDS = 5 * 60;
+
+    /** The keys will be persisted at this interval.  -1 mean never. */
+    private long keyPersistenceIntervalSeconds = DEFAULT_KEY_PERSISTENCE_INTERVAL_SECONDS;
+
+    /**
+     * The size of the blocks. All blocks are the same size.
+     * <p>
+     * @param blockSizeBytes The blockSizeBytes to set.
+     */
+    public void setBlockSizeBytes( int blockSizeBytes )
+    {
+        this.blockSizeBytes = blockSizeBytes;
+    }
+
+    /**
+     * @return Returns the blockSizeBytes.
+     */
+    public int getBlockSizeBytes()
+    {
+        return blockSizeBytes;
+    }
+
+    /**
+     * @param maxKeySize The maxKeySize to set.
+     */
+    public void setMaxKeySize( int maxKeySize )
+    {
+        this.maxKeySize = maxKeySize;
+    }
+
+    /**
+     * @return Returns the maxKeySize.
+     */
+    public int getMaxKeySize()
+    {
+        return maxKeySize;
+    }
+
+    /**
+     * @param keyPersistenceIntervalSeconds The keyPersistenceIntervalSeconds to set.
+     */
+    public void setKeyPersistenceIntervalSeconds( long keyPersistenceIntervalSeconds )
+    {
+        this.keyPersistenceIntervalSeconds = keyPersistenceIntervalSeconds;
+    }
+
+    /**
+     * @return Returns the keyPersistenceIntervalSeconds.
+     */
+    public long getKeyPersistenceIntervalSeconds()
+    {
+        return keyPersistenceIntervalSeconds;
+    }
+
+    /**
+     * Write out the values for debugging purposes.
+     * <p>
+     * @return String
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder str = new StringBuilder();
+        str.append( "\nBlockDiskAttributes " );
+        str.append( "\n DiskPath [" + this.getDiskPath() + "]" );
+        str.append( "\n MaxKeySize [" + this.getMaxKeySize() + "]" );
+        str.append( "\n MaxPurgatorySize [" + this.getMaxPurgatorySize() + "]" );
+        str.append( "\n BlockSizeBytes [" + this.getBlockSizeBytes() + "]" );
+        str.append( "\n KeyPersistenceIntervalSeconds [" + this.getKeyPersistenceIntervalSeconds() + "]" );
+        str.append( "\n DiskLimitType [" + this.getDiskLimitType() + "]" );
+        return str.toString();
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/disk/block/BlockDiskCacheFactory.java b/src/org/apache/commons/jcs/auxiliary/disk/block/BlockDiskCacheFactory.java
new file mode 100644
index 0000000..62252b1
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/disk/block/BlockDiskCacheFactory.java
@@ -0,0 +1,66 @@
+package org.apache.commons.jcs.auxiliary.disk.block;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.AbstractAuxiliaryCacheFactory;
+import org.apache.commons.jcs.auxiliary.AuxiliaryCacheAttributes;
+import org.apache.commons.jcs.engine.behavior.ICompositeCacheManager;
+import org.apache.commons.jcs.engine.behavior.IElementSerializer;
+import org.apache.commons.jcs.engine.logging.behavior.ICacheEventLogger;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Creates disk cache instances.
+ */
+public class BlockDiskCacheFactory
+    extends AbstractAuxiliaryCacheFactory
+{
+    /** The logger */
+    private static final Log log = LogFactory.getLog( BlockDiskCacheFactory.class );
+
+    /**
+     * Create an instance of the BlockDiskCache.
+     * <p>
+     * @param iaca the cache attributes for this cache
+     * @param cacheMgr This allows auxiliaries to reference the manager without assuming that it is
+     *            a singleton. This will allow JCS to be a non-singleton. Also, it makes it easier
+     *            to test.
+     * @param cacheEventLogger
+     * @param elementSerializer
+     * @return BlockDiskCache
+     */
+    @Override
+    public <K, V> BlockDiskCache<K, V> createCache( AuxiliaryCacheAttributes iaca, ICompositeCacheManager cacheMgr,
+                                       ICacheEventLogger cacheEventLogger, IElementSerializer elementSerializer )
+    {
+        BlockDiskCacheAttributes idca = (BlockDiskCacheAttributes) iaca;
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Creating DiskCache for attributes = " + idca );
+        }
+
+        BlockDiskCache<K, V> cache = new BlockDiskCache<K, V>( idca );
+        cache.setCacheEventLogger( cacheEventLogger );
+        cache.setElementSerializer( elementSerializer );
+
+        return cache;
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/disk/block/BlockDiskElementDescriptor.java b/src/org/apache/commons/jcs/auxiliary/disk/block/BlockDiskElementDescriptor.java
new file mode 100644
index 0000000..73fd657
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/disk/block/BlockDiskElementDescriptor.java
@@ -0,0 +1,132 @@
+package org.apache.commons.jcs.auxiliary.disk.block;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.io.Serializable;
+
+/**
+ * This represents an element on disk. This is used when we persist the keys. We only store the
+ * block addresses in memory. We don't need the length here, since all the blocks are the same size
+ * receyle bin.
+ * <p>
+ * @author Aaron Smuts
+ */
+public class BlockDiskElementDescriptor<K>
+    implements Serializable, Externalizable
+{
+    /** Don't change */
+    private static final long serialVersionUID = -1400659301208101411L;
+
+    /** The key */
+    private K key;
+
+    /** The array of block numbers */
+    private int[] blocks;
+
+    /**
+     * @param key The key to set.
+     */
+    public void setKey( K key )
+    {
+        this.key = key;
+    }
+
+    /**
+     * @return Returns the key.
+     */
+    public K getKey()
+    {
+        return key;
+    }
+
+    /**
+     * @param blocks The blocks to set.
+     */
+    public void setBlocks( int[] blocks )
+    {
+        this.blocks = blocks;
+    }
+
+    /**
+     * This holds the block numbers. An item my be dispersed between multiple blocks.
+     * <p>
+     * @return Returns the blocks.
+     */
+    public int[] getBlocks()
+    {
+        return blocks;
+    }
+
+    /**
+     * For debugging.
+     * <p>
+     * @return Info on the descriptor.
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder buf = new StringBuilder();
+        buf.append( "\nBlockDiskElementDescriptor" );
+        buf.append( "\n key [" + this.getKey() + "]" );
+        buf.append( "\n blocks [" );
+        if ( this.getBlocks() != null )
+        {
+            for ( int i = 0; i < blocks.length; i++ )
+            {
+                buf.append( this.getBlocks()[i] );
+            }
+        }
+        buf.append( "]" );
+        return buf.toString();
+    }
+
+    /**
+     * Saves on reflection.
+     * <p>
+     * (non-Javadoc)
+     * @see java.io.Externalizable#readExternal(java.io.ObjectInput)
+     */
+    @Override
+    @SuppressWarnings("unchecked") // Need cast to K
+    public void readExternal( ObjectInput input )
+        throws IOException, ClassNotFoundException
+    {
+        this.key = (K) input.readObject();
+        this.blocks = (int[]) input.readObject();
+    }
+
+    /**
+     * Saves on reflection.
+     * <p>
+     * (non-Javadoc)
+     * @see java.io.Externalizable#writeExternal(java.io.ObjectOutput)
+     */
+    @Override
+    public void writeExternal( ObjectOutput output )
+        throws IOException
+    {
+        output.writeObject( this.key );
+        output.writeObject( this.blocks );
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/disk/block/BlockDiskKeyStore.java b/src/org/apache/commons/jcs/auxiliary/disk/block/BlockDiskKeyStore.java
new file mode 100644
index 0000000..4a478fb
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/disk/block/BlockDiskKeyStore.java
@@ -0,0 +1,471 @@
+package org.apache.commons.jcs.auxiliary.disk.block;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.EOFException;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.apache.commons.jcs.auxiliary.disk.behavior.IDiskCacheAttributes.DiskLimitType;
+import org.apache.commons.jcs.io.ObjectInputStreamClassLoaderAware;
+import org.apache.commons.jcs.utils.struct.AbstractLRUMap;
+import org.apache.commons.jcs.utils.struct.LRUMap;
+import org.apache.commons.jcs.utils.timing.ElapsedTimer;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * This is responsible for storing the keys.
+ * <p>
+ * @author Aaron Smuts
+ */
+public class BlockDiskKeyStore<K>
+{
+    /** The logger */
+    private static final Log log = LogFactory.getLog( BlockDiskKeyStore.class );
+
+    /** Attributes governing the behavior of the block disk cache. */
+    private final BlockDiskCacheAttributes blockDiskCacheAttributes;
+
+    /** The key to block map */
+    private Map<K, int[]> keyHash;
+
+    /** The file where we persist the keys */
+    private final File keyFile;
+
+    /** The name to prefix log messages with. */
+    protected final String logCacheName;
+
+    /** Name of the file where we persist the keys */
+    private final String fileName;
+
+    /** The maximum number of keys to store in memory */
+    private final int maxKeySize;
+
+    /** we need this so we can communicate free blocks to the data store when keys fall off the LRU */
+    protected final BlockDiskCache<K, ?> blockDiskCache;
+
+    private DiskLimitType diskLimitType = DiskLimitType.COUNT;
+
+    private int blockSize;
+
+    /**
+     * Set the configuration options.
+     * <p>
+     * @param cacheAttributes
+     * @param blockDiskCache used for freeing
+     */
+    public BlockDiskKeyStore( BlockDiskCacheAttributes cacheAttributes,
+            BlockDiskCache<K, ?> blockDiskCache)
+    {
+        this.blockDiskCacheAttributes = cacheAttributes;
+        this.logCacheName = "Region [" + this.blockDiskCacheAttributes.getCacheName() + "] ";
+        this.fileName = this.blockDiskCacheAttributes.getCacheName();
+        this.maxKeySize = cacheAttributes.getMaxKeySize();
+        this.blockDiskCache = blockDiskCache;
+        this.diskLimitType  = cacheAttributes.getDiskLimitType();
+        this.blockSize = cacheAttributes.getBlockSizeBytes();
+
+        File rootDirectory = cacheAttributes.getDiskPath();
+
+        if ( log.isInfoEnabled() )
+        {
+            log.info( logCacheName + "Cache file root directory [" + rootDirectory + "]" );
+        }
+
+        this.keyFile = new File( rootDirectory, fileName + ".key" );
+
+        if ( log.isInfoEnabled() )
+        {
+            log.info( logCacheName + "Key File [" + this.keyFile.getAbsolutePath() + "]" );
+        }
+
+        if ( keyFile.length() > 0 )
+        {
+            loadKeys();
+            // TODO verify somehow
+        }
+        else
+        {
+            initKeyMap();
+        }
+    }
+
+    /**
+     * Saves key file to disk. This gets the LRUMap entry set and write the entries out one by one
+     * after putting them in a wrapper.
+     */
+    protected void saveKeys()
+    {
+        try
+        {
+            ElapsedTimer timer = new ElapsedTimer();
+            int numKeys = keyHash.size();
+            if ( log.isInfoEnabled() )
+            {
+                log.info( logCacheName + "Saving keys to [" + this.keyFile.getAbsolutePath() + "], key count ["
+                    + numKeys + "]" );
+            }
+
+            synchronized (keyFile)
+            {
+                FileOutputStream fos = new FileOutputStream( keyFile );
+                BufferedOutputStream bos = new BufferedOutputStream( fos, 65536 );
+                ObjectOutputStream oos = new ObjectOutputStream( bos );
+                try
+                {
+                    // don't need to synchronize, since the underlying collection makes a copy
+                    for (Map.Entry<K, int[]> entry : keyHash.entrySet())
+                    {
+                        BlockDiskElementDescriptor<K> descriptor = new BlockDiskElementDescriptor<K>();
+                        descriptor.setKey( entry.getKey() );
+                        descriptor.setBlocks( entry.getValue() );
+                        // stream these out in the loop.
+                        oos.writeObject( descriptor );
+                    }
+                }
+                finally
+                {
+                    oos.flush();
+                    oos.close();
+                }
+            }
+
+            if ( log.isInfoEnabled() )
+            {
+                log.info( logCacheName + "Finished saving keys. It took " + timer.getElapsedTimeString() + " to store "
+                    + numKeys + " keys.  Key file length [" + keyFile.length() + "]" );
+            }
+        }
+        catch ( IOException e )
+        {
+            log.error( logCacheName + "Problem storing keys.", e );
+        }
+    }
+
+    /**
+     * Resets the file and creates a new key map.
+     */
+    protected void reset()
+    {
+        synchronized (keyFile)
+        {
+            clearMemoryMap();
+            saveKeys();
+        }
+
+    }
+
+    /**
+     * This is mainly used for testing. It leave the disk in tact, and just clears memory.
+     */
+    protected void clearMemoryMap()
+    {
+        this.keyHash.clear();
+    }
+
+    /**
+     * Create the map for keys that contain the index position on disk.
+     */
+    private void initKeyMap()
+    {
+        keyHash = null;
+        if ( maxKeySize >= 0 )
+        {
+            if (this.diskLimitType.equals(DiskLimitType.SIZE)) {
+                keyHash = new LRUMapSizeLimited(maxKeySize);
+            } else {
+                keyHash = new LRUMapCountLimited( maxKeySize );
+            }
+            if ( log.isInfoEnabled() )
+            {
+                log.info( logCacheName + "Set maxKeySize to: '" + maxKeySize + "'" );
+            }
+        }
+        else
+        {
+            // If no max size, use a plain map for memory and processing efficiency.
+            keyHash = new HashMap<K, int[]>();
+            // keyHash = Collections.synchronizedMap( new HashMap() );
+            if ( log.isInfoEnabled() )
+            {
+                log.info( logCacheName + "Set maxKeySize to unlimited'" );
+            }
+        }
+    }
+
+    /**
+     * Loads the keys from the .key file. The keys are stored individually on disk. They are added
+     * one by one to an LRUMap..
+     */
+    protected void loadKeys()
+    {
+        if ( log.isInfoEnabled() )
+        {
+            log.info( logCacheName + "Loading keys for " + keyFile.toString() );
+        }
+
+        try
+        {
+            // create a key map to use.
+            initKeyMap();
+
+            HashMap<K, int[]> keys = new HashMap<K, int[]>();
+
+            synchronized (keyFile)
+            {
+                FileInputStream fis = new FileInputStream( keyFile );
+                BufferedInputStream bis = new BufferedInputStream( fis );
+                ObjectInputStream ois = new ObjectInputStreamClassLoaderAware( bis , null);
+                try
+                {
+                    while ( true )
+                    {
+                        @SuppressWarnings("unchecked") // Need to cast from Object
+                        BlockDiskElementDescriptor<K> descriptor = (BlockDiskElementDescriptor<K>) ois.readObject();
+                        if ( descriptor != null )
+                        {
+                            keys.put( descriptor.getKey(), descriptor.getBlocks() );
+                        }
+                    }
+                }
+                catch ( EOFException eof )
+                {
+                    // nothing
+                }
+                finally
+                {
+                    ois.close();
+                }
+            }
+
+            if ( !keys.isEmpty() )
+            {
+                keyHash.putAll( keys );
+
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( logCacheName + "Found " + keys.size() + " in keys file." );
+                }
+
+                if ( log.isInfoEnabled() )
+                {
+                    log.info( logCacheName + "Loaded keys from [" + fileName + "], key count: " + keyHash.size()
+                        + "; up to " + maxKeySize + " will be available." );
+                }
+            }
+        }
+        catch ( Exception e )
+        {
+            log.error( logCacheName + "Problem loading keys for file " + fileName, e );
+        }
+    }
+
+    /**
+     * Gets the entry set.
+     * <p>
+     * @return entry set.
+     */
+    public Set<Map.Entry<K, int[]>> entrySet()
+    {
+        return this.keyHash.entrySet();
+    }
+
+    /**
+     * Gets the key set.
+     * <p>
+     * @return key set.
+     */
+    public Set<K> keySet()
+    {
+        return this.keyHash.keySet();
+    }
+
+    /**
+     * Gets the size of the key hash.
+     * <p>
+     * @return the number of keys.
+     */
+    public int size()
+    {
+        return this.keyHash.size();
+    }
+
+    /**
+     * gets the object for the key.
+     * <p>
+     * @param key
+     * @return Object
+     */
+    public int[] get( K key )
+    {
+        return this.keyHash.get( key );
+    }
+
+    /**
+     * Puts a int[] in the keyStore.
+     * <p>
+     * @param key
+     * @param value
+     */
+    public void put( K key, int[] value )
+    {
+        this.keyHash.put( key, value );
+    }
+
+    /**
+     * Remove by key.
+     * <p>
+     * @param key
+     * @return BlockDiskElementDescriptor if it was present, else null
+     */
+    public int[] remove( K key )
+    {
+        return this.keyHash.remove( key );
+    }
+
+
+    /**
+     * Class for recycling and lru. This implements the LRU size overflow callback, so we can mark the
+     * blocks as free.
+     */
+
+    public class LRUMapSizeLimited
+    	extends AbstractLRUMap<K, int[]>
+
+    {
+        /**
+         * <code>tag</code> tells us which map we are working on.
+         */
+        public String tag = "orig-lru-size";
+        // size of the content in kB
+        private AtomicInteger contentSize = new AtomicInteger();
+        private int maxSize = -1;
+        /**
+         * Default
+         */
+        public LRUMapSizeLimited()
+        {
+            super();
+        }
+
+        /**
+         * @param maxKeySize
+         */
+        public LRUMapSizeLimited( int maxKeySize )
+        {
+            super();
+            this.maxSize = maxKeySize;
+        }
+
+        @Override
+        public int[] put(K key, int[] value) {
+            try {
+                return super.put(key, value);
+            } finally {
+                // keep the content size in kB, so 2^31 kB is reasonable value
+                contentSize.addAndGet((int) Math.ceil(value.length * blockSize / 1024.0));
+            }
+        }
+
+        @Override
+        public int[] remove(Object key ) {
+            int[] value = null;
+
+            try {
+                value = super.remove(key);
+                return value;
+            } finally {
+                if (value != null) {
+                    // keep the content size in kB, so 2^31 kB is reasonable value
+                    contentSize.addAndGet((int) ((Math.ceil(value.length * blockSize / 1024.0)) * -1));
+                }
+            }
+        }
+
+        /**
+         * This is called when the may key size is reached. The least recently used item will be
+         * passed here. We will store the position and size of the spot on disk in the recycle bin.
+         * <p>
+         * @param key
+         * @param value
+         */
+        @Override
+        protected void processRemovedLRU( K key, int[] value )
+        {
+            blockDiskCache.freeBlocks( value );
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( logCacheName + "Removing key: [" + key + "] from key store." );
+                log.debug( logCacheName + "Key store size: [" + super.size() + "]." );
+            }
+        }
+        @Override
+        protected boolean shouldRemove() {
+            return maxSize > 0 && contentSize.intValue() > maxSize && this.size() > 1;
+        }
+    }
+    /**
+     * Class for recycling and lru. This implements the LRU overflow callback, so we can mark the
+     * blocks as free.
+     */
+    public class LRUMapCountLimited
+    extends LRUMap<K, int[]>
+    // implements Serializable
+    {
+        /**
+         * <code>tag</code> tells us which map we are working on.
+         */
+        public String tag = "orig-lru-count";
+
+        public LRUMapCountLimited(int maxKeySize) {
+            super(maxKeySize);
+        }
+
+
+        /**
+         * This is called when the may key size is reached. The least recently used item will be
+         * passed here. We will store the position and size of the spot on disk in the recycle bin.
+         * <p>
+         * @param key
+         * @param value
+         */
+        @Override
+        protected void processRemovedLRU( K key, int[] value )
+        {
+            blockDiskCache.freeBlocks( value );
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( logCacheName + "Removing key: [" + key + "] from key store." );
+                log.debug( logCacheName + "Key store size: [" + super.size() + "]." );
+            }
+        }
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/disk/indexed/IndexedDisk.java b/src/org/apache/commons/jcs/auxiliary/disk/indexed/IndexedDisk.java
new file mode 100644
index 0000000..ee6a3ad
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/disk/indexed/IndexedDisk.java
@@ -0,0 +1,282 @@
+package org.apache.commons.jcs.auxiliary.disk.indexed;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.RandomAccessFile;
+import java.io.Serializable;
+import java.nio.ByteBuffer;
+import java.nio.channels.FileChannel;
+
+import org.apache.commons.jcs.engine.behavior.IElementSerializer;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/** Provides thread safe access to the underlying random access file. */
+class IndexedDisk
+{
+    /** The size of the header that indicates the amount of data stored in an occupied block. */
+    public static final byte HEADER_SIZE_BYTES = 4;
+
+    /** The serializer. */
+    private final IElementSerializer elementSerializer;
+
+    /** The logger */
+    private static final Log log = LogFactory.getLog( IndexedDisk.class );
+
+    /** The path to the log directory. */
+    private final String filepath;
+
+    /** The data file. */
+    private final FileChannel fc;
+
+    /**
+     * Constructor for the Disk object
+     * <p>
+     * @param file
+     * @param elementSerializer
+     * @throws FileNotFoundException
+     */
+    public IndexedDisk( File file, IElementSerializer elementSerializer )
+        throws FileNotFoundException
+    {
+        this.filepath = file.getAbsolutePath();
+        this.elementSerializer = elementSerializer;
+        RandomAccessFile raf = new RandomAccessFile( filepath, "rw" );
+        this.fc = raf.getChannel();
+    }
+
+    /**
+     * This reads an object from the given starting position on the file.
+     * <p>
+     * The first four bytes of the record should tell us how long it is. The data is read into a byte
+     * array and then an object is constructed from the byte array.
+     * <p>
+     * @return Serializable
+     * @param ded
+     * @throws IOException
+     * @throws ClassNotFoundException
+     */
+    protected <T extends Serializable> T readObject( IndexedDiskElementDescriptor ded )
+        throws IOException, ClassNotFoundException
+    {
+        String message = null;
+        boolean corrupted = false;
+        long fileLength = fc.size();
+        if ( ded.pos > fileLength )
+        {
+            corrupted = true;
+            message = "Record " + ded + " starts past EOF.";
+        }
+        else
+        {
+            ByteBuffer datalength = ByteBuffer.allocate(HEADER_SIZE_BYTES);
+            fc.read(datalength, ded.pos);
+            datalength.flip();
+            int datalen = datalength.getInt();
+            if ( ded.len != datalen )
+            {
+                corrupted = true;
+                message = "Record " + ded + " does not match data length on disk (" + datalen + ")";
+            }
+            else if ( ded.pos + ded.len > fileLength )
+            {
+                corrupted = true;
+                message = "Record " + ded + " exceeds file length.";
+            }
+        }
+
+        if ( corrupted )
+        {
+            log.warn( "\n The file is corrupt: " + "\n " + message );
+            throw new IOException( "The File Is Corrupt, need to reset" );
+        }
+
+        ByteBuffer data = ByteBuffer.allocate(ded.len);
+        fc.read(data, ded.pos + HEADER_SIZE_BYTES);
+        data.flip();
+
+        return elementSerializer.deSerialize( data.array(), null );
+    }
+
+    /**
+     * Moves the data stored from one position to another. The descriptor's position is updated.
+     * <p>
+     * @param ded
+     * @param newPosition
+     * @throws IOException
+     */
+    protected void move( final IndexedDiskElementDescriptor ded, final long newPosition )
+        throws IOException
+    {
+        ByteBuffer datalength = ByteBuffer.allocate(HEADER_SIZE_BYTES);
+        fc.read(datalength, ded.pos);
+        datalength.flip();
+        int length = datalength.getInt();
+
+        if ( length != ded.len )
+        {
+            throw new IOException( "Mismatched memory and disk length (" + length + ") for " + ded );
+        }
+
+        // TODO: more checks?
+
+        long readPos = ded.pos;
+        long writePos = newPosition;
+
+        // header len + data len
+        int remaining = HEADER_SIZE_BYTES + length;
+        ByteBuffer buffer = ByteBuffer.allocate(16384);
+
+        while ( remaining > 0 )
+        {
+            // chunk it
+            int chunkSize = Math.min( remaining, buffer.capacity() );
+            buffer.limit(chunkSize);
+            fc.read(buffer, readPos);
+            buffer.flip();
+            fc.write(buffer, writePos);
+            buffer.clear();
+
+            writePos += chunkSize;
+            readPos += chunkSize;
+            remaining -= chunkSize;
+        }
+
+        ded.pos = newPosition;
+    }
+
+    /**
+     * Writes the given byte array to the Disk at the specified position.
+     * <p>
+     * @param data
+     * @param ded
+     * @return true if we wrote successfully
+     * @throws IOException
+     */
+    protected boolean write( IndexedDiskElementDescriptor ded, byte[] data )
+        throws IOException
+    {
+        long pos = ded.pos;
+        if ( log.isTraceEnabled() )
+        {
+            log.trace( "write> pos=" + pos );
+            log.trace( fc + " -- data.length = " + data.length );
+        }
+
+        if ( data.length != ded.len )
+        {
+            throw new IOException( "Mismatched descriptor and data lengths" );
+        }
+
+        ByteBuffer buffer = ByteBuffer.allocate(HEADER_SIZE_BYTES + data.length);
+        buffer.putInt(data.length);
+        buffer.put(data);
+        buffer.flip();
+        int written = fc.write(buffer, pos);
+        //fc.force(true);
+
+        return written == data.length;
+    }
+
+    /**
+     * Serializes the object and write it out to the given position.
+     * <p>
+     * TODO: make this take a ded as well.
+     * @return true unless error
+     * @param obj
+     * @param pos
+     * @throws IOException
+     */
+    protected boolean writeObject( Serializable obj, long pos )
+        throws IOException
+    {
+        byte[] data = elementSerializer.serialize( obj );
+        write( new IndexedDiskElementDescriptor( pos, data.length ), data );
+        return true;
+    }
+
+    /**
+     * Returns the raf length.
+     * <p>
+     * @return the length of the file.
+     * @throws IOException
+     */
+    protected long length()
+        throws IOException
+    {
+        return fc.size();
+    }
+
+    /**
+     * Closes the raf.
+     * <p>
+     * @throws IOException
+     */
+    protected void close()
+        throws IOException
+    {
+        fc.close();
+    }
+
+    /**
+     * Sets the raf to empty.
+     * <p>
+     * @throws IOException
+     */
+    protected synchronized void reset()
+        throws IOException
+    {
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Resetting Indexed File [" + filepath + "]" );
+        }
+        fc.truncate(0);
+        fc.force(true);
+    }
+
+    /**
+     * Truncates the file to a given length.
+     * <p>
+     * @param length the new length of the file
+     * @throws IOException
+     */
+    protected void truncate( long length )
+        throws IOException
+    {
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "Truncating file [" + filepath + "] to " + length );
+        }
+        fc.truncate( length );
+    }
+
+    /**
+     * This is used for debugging.
+     * <p>
+     * @return the file path.
+     */
+    protected String getFilePath()
+    {
+        return filepath;
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/disk/indexed/IndexedDiskCache.java b/src/org/apache/commons/jcs/auxiliary/disk/indexed/IndexedDiskCache.java
new file mode 100644
index 0000000..e7a2f33
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/disk/indexed/IndexedDiskCache.java
@@ -0,0 +1,1773 @@
+package org.apache.commons.jcs.auxiliary.disk.indexed;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.AuxiliaryCacheAttributes;
+import org.apache.commons.jcs.auxiliary.disk.AbstractDiskCache;
+import org.apache.commons.jcs.auxiliary.disk.behavior.IDiskCacheAttributes.DiskLimitType;
+import org.apache.commons.jcs.engine.CacheConstants;
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.behavior.IElementSerializer;
+import org.apache.commons.jcs.engine.control.group.GroupAttrName;
+import org.apache.commons.jcs.engine.control.group.GroupId;
+import org.apache.commons.jcs.engine.logging.behavior.ICacheEvent;
+import org.apache.commons.jcs.engine.logging.behavior.ICacheEventLogger;
+import org.apache.commons.jcs.engine.stats.StatElement;
+import org.apache.commons.jcs.engine.stats.Stats;
+import org.apache.commons.jcs.engine.stats.behavior.IStatElement;
+import org.apache.commons.jcs.engine.stats.behavior.IStats;
+import org.apache.commons.jcs.utils.struct.AbstractLRUMap;
+import org.apache.commons.jcs.utils.struct.LRUMap;
+import org.apache.commons.jcs.utils.struct.SortedPreferentialArray;
+import org.apache.commons.jcs.utils.timing.ElapsedTimer;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.ConcurrentModificationException;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+
+/**
+ * Disk cache that uses a RandomAccessFile with keys stored in memory. The maximum number of keys
+ * stored in memory is configurable. The disk cache tries to recycle spots on disk to limit file
+ * expansion.
+ */
+public class IndexedDiskCache<K, V>
+    extends AbstractDiskCache<K, V>
+{
+    /** The logger */
+    private static final Log log = LogFactory.getLog( IndexedDiskCache.class );
+
+    /** Cache name used in log messages */
+    protected final String logCacheName;
+
+    /** The name of the file where the data is stored */
+    private final String fileName;
+
+    /** The IndexedDisk manages reads and writes to the data file. */
+    private IndexedDisk dataFile;
+
+    /** The IndexedDisk manages reads and writes to the key file. */
+    private IndexedDisk keyFile;
+
+    /** Map containing the keys and disk offsets. */
+    private Map<K, IndexedDiskElementDescriptor> keyHash;
+
+    /** The maximum number of keys that we will keep in memory. */
+    private final int maxKeySize;
+
+    /** A handle on the data file. */
+    private File rafDir;
+
+    /** Should we keep adding to the recycle bin. False during optimization. */
+    boolean doRecycle = true;
+
+    /** Should we optimize real time */
+    boolean isRealTimeOptimizationEnabled = true;
+
+    /** Should we optimize on shutdown. */
+    boolean isShutdownOptimizationEnabled = true;
+
+    /** are we currently optimizing the files */
+    boolean isOptimizing = false;
+
+    /** The number of times the file has been optimized. */
+    private int timesOptimized = 0;
+
+    /** The thread optimizing the file. */
+    private volatile Thread currentOptimizationThread;
+
+    /** used for counting the number of requests */
+    private int removeCount = 0;
+
+    /** Should we queue puts. True when optimizing. We write the queue post optimization. */
+    private boolean queueInput = false;
+
+    /** list where puts made during optimization are made */
+    private final LinkedList<IndexedDiskElementDescriptor> queuedPutList =
+        new LinkedList<IndexedDiskElementDescriptor>();
+
+    /** RECYLCE BIN -- array of empty spots */
+    private SortedPreferentialArray<IndexedDiskElementDescriptor> recycle;
+
+    /** User configurable parameters */
+    private final IndexedDiskCacheAttributes cattr;
+
+    /** How many slots have we recycled. */
+    private int recycleCnt = 0;
+
+    /** How many items were there on startup. */
+    private int startupSize = 0;
+
+    /** the number of bytes free on disk. */
+    private long bytesFree = 0;
+
+    /** mode we are working on (size or count limited **/
+    private DiskLimitType diskLimitType = DiskLimitType.COUNT;
+
+    /** simple stat */
+    private AtomicInteger hitCount = new AtomicInteger(0);
+
+    /**
+     * Use this lock to synchronize reads and writes to the underlying storage mechanism.
+     */
+    protected ReentrantReadWriteLock storageLock = new ReentrantReadWriteLock();
+
+    /**
+     * Constructor for the DiskCache object.
+     * <p>
+     * @param cacheAttributes
+     */
+    public IndexedDiskCache( IndexedDiskCacheAttributes cacheAttributes )
+    {
+        this( cacheAttributes, null );
+    }
+
+    /**
+     * Constructor for the DiskCache object.
+     * <p>
+     * @param cattr
+     * @param elementSerializer used if supplied, the super's super will not set a null
+     */
+    public IndexedDiskCache( IndexedDiskCacheAttributes cattr, IElementSerializer elementSerializer )
+    {
+        super( cattr );
+
+        setElementSerializer( elementSerializer );
+
+        this.cattr = cattr;
+        this.maxKeySize = cattr.getMaxKeySize();
+        this.isRealTimeOptimizationEnabled = cattr.getOptimizeAtRemoveCount() > 0;
+        this.isShutdownOptimizationEnabled = cattr.isOptimizeOnShutdown();
+        this.logCacheName = "Region [" + getCacheName() + "] ";
+        this.diskLimitType = cattr.getDiskLimitType();
+        // Make a clean file name
+        this.fileName = getCacheName().replaceAll("[^a-zA-Z0-9-_\\.]", "_");
+
+        try
+        {
+            initializeFileSystem( cattr );
+
+            initializeKeysAndData( cattr );
+
+            initializeRecycleBin();
+
+            // Initialization finished successfully, so set alive to true.
+            alive = true;
+            if ( log.isInfoEnabled() )
+            {
+                log.info( logCacheName + "Indexed Disk Cache is alive." );
+            }
+
+            // TODO: Should we improve detection of whether or not the file should be optimized.
+            if ( isRealTimeOptimizationEnabled && keyHash.size() > 0 )
+            {
+                // Kick off a real time optimization, in case we didn't do a final optimization.
+                doOptimizeRealTime();
+            }
+        }
+        catch ( Exception e )
+        {
+            log.error( logCacheName + "Failure initializing for fileName: " + fileName + " and directory: "
+                + this.rafDir.getAbsolutePath(), e );
+        }
+    }
+
+    /**
+     * Tries to create the root directory if it does not already exist.
+     * <p>
+     * @param cattr
+     */
+    private void initializeFileSystem( IndexedDiskCacheAttributes cattr )
+    {
+        this.rafDir = cattr.getDiskPath();
+        if ( log.isInfoEnabled() )
+        {
+            log.info( logCacheName + "Cache file root directory: " + rafDir );
+        }
+    }
+
+    /**
+     * Creates the key and data disk caches.
+     * <p>
+     * Loads any keys if they are present and ClearDiskOnStartup is false.
+     * <p>
+     * @param cattr
+     * @throws FileNotFoundException
+     * @throws IOException
+     * @throws InterruptedException
+     */
+    private void initializeKeysAndData( IndexedDiskCacheAttributes cattr )
+        throws FileNotFoundException, IOException, InterruptedException
+    {
+        this.dataFile = new IndexedDisk( new File( rafDir, fileName + ".data" ), getElementSerializer() );
+        this.keyFile = new IndexedDisk( new File( rafDir, fileName + ".key" ), getElementSerializer() );
+
+        if ( cattr.isClearDiskOnStartup() )
+        {
+            if ( log.isInfoEnabled() )
+            {
+                log.info( logCacheName + "ClearDiskOnStartup is set to true.  Ingnoring any persisted data." );
+            }
+            initializeEmptyStore();
+        }
+        else if ( keyFile.length() > 0 )
+        {
+            // If the key file has contents, try to initialize the keys
+            // from it. In no keys are loaded reset the data file.
+            initializeStoreFromPersistedData();
+        }
+        else
+        {
+            // Otherwise start with a new empty map for the keys, and reset
+            // the data file if it has contents.
+            initializeEmptyStore();
+        }
+    }
+
+    /**
+     * Initializes an empty disk cache.
+     * <p>
+     * @throws IOException
+     */
+    private void initializeEmptyStore()
+        throws IOException
+    {
+        initializeKeyMap();
+
+        if ( dataFile.length() > 0 )
+        {
+            dataFile.reset();
+        }
+    }
+
+    /**
+     * Loads any persisted data and checks for consistency. If there is a consistency issue, the
+     * files are cleared.
+     * <p>
+     * @throws InterruptedException
+     * @throws IOException
+     */
+    private void initializeStoreFromPersistedData()
+        throws InterruptedException, IOException
+    {
+        loadKeys();
+
+        if ( keyHash.size() == 0 )
+        {
+            dataFile.reset();
+        }
+        else
+        {
+            boolean isOk = checkKeyDataConsistency( false );
+            if ( !isOk )
+            {
+                keyHash.clear();
+                keyFile.reset();
+                dataFile.reset();
+                log.warn( logCacheName + "Corruption detected.  Reseting data and keys files." );
+            }
+            else
+            {
+                synchronized (this)
+                {
+                    startupSize = keyHash.size();
+                }
+            }
+        }
+    }
+
+    /**
+     * Loads the keys from the .key file. The keys are stored in a HashMap on disk. This is
+     * converted into a LRUMap.
+     * <p>
+     * @throws InterruptedException
+     */
+    protected void loadKeys()
+        throws InterruptedException
+    {
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( logCacheName + "Loading keys for " + keyFile.toString() );
+        }
+
+        storageLock.writeLock().lock();
+
+        try
+        {
+            // create a key map to use.
+            initializeKeyMap();
+
+            HashMap<K, IndexedDiskElementDescriptor> keys =
+                keyFile.readObject( new IndexedDiskElementDescriptor( 0, (int) keyFile.length()
+                - IndexedDisk.HEADER_SIZE_BYTES ) );
+
+            if ( keys != null )
+            {
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( logCacheName + "Found " + keys.size() + " in keys file." );
+                }
+
+                keyHash.putAll( keys );
+
+                if ( log.isInfoEnabled() )
+                {
+                    log.info( logCacheName + "Loaded keys from [" + fileName + "], key count: " + keyHash.size()
+                        + "; up to " + maxKeySize + " will be available." );
+                }
+            }
+
+            if ( log.isDebugEnabled() )
+            {
+                dump( false );
+            }
+        }
+        catch ( Exception e )
+        {
+            log.error( logCacheName + "Problem loading keys for file " + fileName, e );
+        }
+        finally
+        {
+            storageLock.writeLock().unlock();
+        }
+    }
+
+    /**
+     * Check for minimal consistency between the keys and the datafile. Makes sure no starting
+     * positions in the keys exceed the file length.
+     * <p>
+     * The caller should take the appropriate action if the keys and data are not consistent.
+     * @param checkForDedOverlaps if <code>true</code>, do a more thorough check by checking for
+     *            data overlap
+     * @return <code>true</code> if the test passes
+     */
+    private boolean checkKeyDataConsistency( boolean checkForDedOverlaps )
+    {
+        ElapsedTimer timer = new ElapsedTimer();
+        log.debug( logCacheName + "Performing inital consistency check" );
+
+        boolean isOk = true;
+        long fileLength = 0;
+        try
+        {
+            fileLength = dataFile.length();
+
+            for (Map.Entry<K, IndexedDiskElementDescriptor> e : keyHash.entrySet())
+            {
+                IndexedDiskElementDescriptor ded = e.getValue();
+
+                isOk = ded.pos + IndexedDisk.HEADER_SIZE_BYTES + ded.len <= fileLength;
+
+                if ( !isOk )
+                {
+                    log.warn( logCacheName + "The dataFile is corrupted!" + "\n raf.length() = " + fileLength
+                        + "\n ded.pos = " + ded.pos );
+                    break;
+                }
+            }
+
+            if ( isOk && checkForDedOverlaps )
+            {
+                isOk = checkForDedOverlaps( createPositionSortedDescriptorList() );
+            }
+        }
+        catch ( Exception e )
+        {
+            log.error( e );
+            isOk = false;
+        }
+
+        if ( log.isInfoEnabled() )
+        {
+            log.info( logCacheName + "Finished inital consistency check, isOk = " + isOk + " in "
+                + timer.getElapsedTimeString() );
+        }
+
+        return isOk;
+    }
+
+    /**
+     * Detects any overlapping elements. This expects a sorted list.
+     * <p>
+     * The total length of an item is IndexedDisk.RECORD_HEADER + ded.len.
+     * <p>
+     * @param sortedDescriptors
+     * @return false if there are overlaps.
+     */
+    protected boolean checkForDedOverlaps( IndexedDiskElementDescriptor[] sortedDescriptors )
+    {
+        long start = System.currentTimeMillis();
+        boolean isOk = true;
+        long expectedNextPos = 0;
+        for ( int i = 0; i < sortedDescriptors.length; i++ )
+        {
+            IndexedDiskElementDescriptor ded = sortedDescriptors[i];
+            if ( expectedNextPos > ded.pos )
+            {
+                log.error( logCacheName + "Corrupt file: overlapping deds " + ded );
+                isOk = false;
+                break;
+            }
+            else
+            {
+                expectedNextPos = ded.pos + IndexedDisk.HEADER_SIZE_BYTES + ded.len;
+            }
+        }
+        long end = System.currentTimeMillis();
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( logCacheName + "Check for DED overlaps took " + ( end - start ) + " ms." );
+        }
+
+        return isOk;
+    }
+
+    /**
+     * Saves key file to disk. This converts the LRUMap to a HashMap for deserialization.
+     */
+    protected void saveKeys()
+    {
+        try
+        {
+            if ( log.isInfoEnabled() )
+            {
+                log.info( logCacheName + "Saving keys to: " + fileName + ", key count: " + keyHash.size() );
+            }
+
+            keyFile.reset();
+
+            HashMap<K, IndexedDiskElementDescriptor> keys =
+                new HashMap<K, IndexedDiskElementDescriptor>();
+            keys.putAll( keyHash );
+
+            if ( keys.size() > 0 )
+            {
+                keyFile.writeObject( keys, 0 );
+            }
+
+            if ( log.isInfoEnabled() )
+            {
+                log.info( logCacheName + "Finished saving keys." );
+            }
+        }
+        catch ( Exception e )
+        {
+            log.error( logCacheName + "Problem storing keys.", e );
+        }
+    }
+
+    /**
+     * Update the disk cache. Called from the Queue. Makes sure the Item has not been retrieved from
+     * purgatory while in queue for disk. Remove items from purgatory when they go to disk.
+     * <p>
+     * @param ce The ICacheElement<K, V> to put to disk.
+     */
+    @Override
+    protected void processUpdate( ICacheElement<K, V> ce )
+    {
+        if ( !alive )
+        {
+            log.error( logCacheName + "No longer alive; aborting put of key = " + ce.getKey() );
+            return;
+        }
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( logCacheName + "Storing element on disk, key: " + ce.getKey() );
+        }
+
+        IndexedDiskElementDescriptor ded = null;
+
+        // old element with same key
+        IndexedDiskElementDescriptor old = null;
+
+        try
+        {
+            byte[] data = getElementSerializer().serialize( ce );
+
+            // make sure this only locks for one particular cache region
+            storageLock.writeLock().lock();
+            try
+            {
+                old = keyHash.get( ce.getKey() );
+
+                // Item with the same key already exists in file.
+                // Try to reuse the location if possible.
+                if ( old != null && data.length <= old.len )
+                {
+                    // Reuse the old ded. The defrag relies on ded updates by reference, not
+                    // replacement.
+                    ded = old;
+                    ded.len = data.length;
+                }
+                else
+                {
+                    // we need this to compare in the recycle bin
+                    ded = new IndexedDiskElementDescriptor( dataFile.length(), data.length );
+
+                    if ( doRecycle )
+                    {
+                        IndexedDiskElementDescriptor rep = recycle
+                            .takeNearestLargerOrEqual( ded );
+                        if ( rep != null )
+                        {
+                            ded = rep;
+                            ded.len = data.length;
+                            recycleCnt++;
+                            this.adjustBytesFree( ded, false );
+                            if ( log.isDebugEnabled() )
+                            {
+                                log.debug( logCacheName + "using recycled ded " + ded.pos + " rep.len = " + rep.len
+                                    + " ded.len = " + ded.len );
+                            }
+                        }
+                    }
+
+                    // Put it in the map
+                    keyHash.put( ce.getKey(), ded );
+
+                    if ( queueInput )
+                    {
+                        queuedPutList.add( ded );
+                        if ( log.isDebugEnabled() )
+                        {
+                            log.debug( logCacheName + "added to queued put list." + queuedPutList.size() );
+                        }
+                    }
+
+                    // add the old slot to the recycle bin
+                    if ( old != null )
+                    {
+                        addToRecycleBin( old );
+                    }
+                }
+
+                dataFile.write( ded, data );
+            }
+            finally
+            {
+                storageLock.writeLock().unlock();
+            }
+
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( logCacheName + "Put to file: " + fileName + ", key: " + ce.getKey() + ", position: "
+                    + ded.pos + ", size: " + ded.len );
+            }
+        }
+        catch ( ConcurrentModificationException cme )
+        {
+            // do nothing, this means it has gone back to memory mid
+            // serialization
+            if ( log.isDebugEnabled() )
+            {
+                // this shouldn't be possible
+                log.debug( logCacheName + "Caught ConcurrentModificationException." + cme );
+            }
+        }
+        catch ( Exception e )
+        {
+            log.error( logCacheName + "Failure updating element, key: " + ce.getKey() + " old: " + old, e );
+        }
+    }
+
+    /**
+     * Gets the key, then goes to disk to get the object.
+     * <p>
+     * @param key
+     * @return ICacheElement<K, V> or null
+     * @see AbstractDiskCache#doGet
+     */
+    @Override
+    protected ICacheElement<K, V> processGet( K key )
+    {
+        if ( !alive )
+        {
+            log.error( logCacheName + "No longer alive so returning null for key = " + key );
+            return null;
+        }
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( logCacheName + "Trying to get from disk: " + key );
+        }
+
+        ICacheElement<K, V> object = null;
+        try
+        {
+            storageLock.readLock().lock();
+            try
+            {
+                object = readElement( key );
+            }
+            finally
+            {
+                storageLock.readLock().unlock();
+            }
+
+            if ( object != null )
+            {
+                hitCount.incrementAndGet();
+            }
+        }
+        catch ( IOException ioe )
+        {
+            log.error( logCacheName + "Failure getting from disk, key = " + key, ioe );
+            reset();
+        }
+        catch ( Exception e )
+        {
+            log.error( logCacheName + "Failure getting from disk, key = " + key, e );
+        }
+        return object;
+    }
+
+    /**
+     * Gets matching items from the cache.
+     * <p>
+     * @param pattern
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data in cache matching keys
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> processGetMatching( String pattern )
+    {
+        Map<K, ICacheElement<K, V>> elements = new HashMap<K, ICacheElement<K, V>>();
+        try
+        {
+            Set<K> keyArray = null;
+            storageLock.readLock().lock();
+            try
+            {
+                keyArray = new HashSet<K>(keyHash.keySet());
+            }
+            finally
+            {
+                storageLock.readLock().unlock();
+            }
+
+            Set<K> matchingKeys = getKeyMatcher().getMatchingKeysFromArray( pattern, keyArray );
+
+            for (K key : matchingKeys)
+            {
+                ICacheElement<K, V> element = processGet( key );
+                if ( element != null )
+                {
+                    elements.put( key, element );
+                }
+            }
+        }
+        catch ( Exception e )
+        {
+            log.error( logCacheName + "Failure getting matching from disk, pattern = " + pattern, e );
+        }
+        return elements;
+    }
+
+    /**
+     * Reads the item from disk.
+     * <p>
+     * @param key
+     * @return ICacheElement
+     * @throws IOException
+     */
+    private ICacheElement<K, V> readElement( K key )
+        throws IOException
+    {
+        ICacheElement<K, V> object = null;
+
+        IndexedDiskElementDescriptor ded = keyHash.get( key );
+
+        if ( ded != null )
+        {
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( logCacheName + "Found on disk, key: " + key );
+            }
+            try
+            {
+                ICacheElement<K, V> readObject = dataFile.readObject( ded );
+                object = readObject;
+                // TODO consider checking key equality and throwing if there is a failure
+            }
+            catch ( IOException e )
+            {
+                log.error( logCacheName + "IO Exception, Problem reading object from file", e );
+                throw e;
+            }
+            catch ( Exception e )
+            {
+                log.error( logCacheName + "Exception, Problem reading object from file", e );
+                throw new IOException( logCacheName + "Problem reading object from disk. " + e.getMessage() );
+            }
+        }
+
+        return object;
+    }
+
+    /**
+     * Return the keys in this cache.
+     * <p>
+     * @see org.apache.commons.jcs.auxiliary.disk.AbstractDiskCache#getKeySet()
+     */
+    @Override
+    public Set<K> getKeySet() throws IOException
+    {
+        HashSet<K> keys = new HashSet<K>();
+
+        storageLock.readLock().lock();
+
+        try
+        {
+            keys.addAll(this.keyHash.keySet());
+        }
+        finally
+        {
+            storageLock.readLock().unlock();
+        }
+
+        return keys;
+    }
+
+    /**
+     * Returns true if the removal was successful; or false if there is nothing to remove. Current
+     * implementation always result in a disk orphan.
+     * <p>
+     * @return true if at least one item was removed.
+     * @param key
+     */
+    @Override
+    protected boolean processRemove( K key )
+    {
+        if ( !alive )
+        {
+            log.error( logCacheName + "No longer alive so returning false for key = " + key );
+            return false;
+        }
+
+        if ( key == null )
+        {
+            return false;
+        }
+
+        boolean reset = false;
+        boolean removed = false;
+        try
+        {
+            storageLock.writeLock().lock();
+
+            if ( key instanceof String && key.toString().endsWith( CacheConstants.NAME_COMPONENT_DELIMITER ) )
+            {
+                removed = performPartialKeyRemoval( (String) key );
+            }
+            else if ( key instanceof GroupAttrName && ((GroupAttrName<?>)key).attrName == null )
+            {
+                removed = performGroupRemoval( ((GroupAttrName<?>)key).groupId );
+            }
+            else
+            {
+                removed = performSingleKeyRemoval( key );
+            }
+        }
+        catch ( Exception e )
+        {
+            log.error( logCacheName + "Problem removing element.", e );
+            reset = true;
+        }
+        finally
+        {
+            storageLock.writeLock().unlock();
+        }
+
+        if ( reset )
+        {
+            reset();
+        }
+
+        // this increments the remove count.
+        // there is no reason to call this if an item was not removed.
+        if ( removed )
+        {
+            doOptimizeRealTime();
+        }
+
+        return removed;
+    }
+
+    /**
+     * Iterates over the keyset. Builds a list of matches. Removes all the keys in the list. Does
+     * not remove via the iterator, since the map impl may not support it.
+     * <p>
+     * This operates under a lock obtained in doRemove().
+     * <p>
+     * @param key
+     * @return true if there was a match
+     */
+    private boolean performPartialKeyRemoval( String key )
+    {
+        boolean removed = false;
+
+        // remove all keys of the same name hierarchy.
+        List<K> itemsToRemove = new LinkedList<K>();
+
+        for (K k : keyHash.keySet())
+        {
+            if ( k instanceof String && k.toString().startsWith( key.toString() ) )
+            {
+                itemsToRemove.add( k );
+            }
+        }
+
+        // remove matches.
+        for (K fullKey : itemsToRemove)
+        {
+            // Don't add to recycle bin here
+            // https://issues.apache.org/jira/browse/JCS-67
+            performSingleKeyRemoval( fullKey );
+            removed = true;
+            // TODO this needs to update the remove count separately
+        }
+
+        return removed;
+    }
+
+    /**
+     * Remove all elements from the group. This does not use the iterator to remove. It builds a
+     * list of group elements and then removes them one by one.
+     * <p>
+     * This operates under a lock obtained in doRemove().
+     * <p>
+     * @param key
+     * @return true if an element was removed
+     */
+    private boolean performGroupRemoval( GroupId key )
+    {
+        boolean removed = false;
+
+        // remove all keys of the same name group.
+        List<K> itemsToRemove = new LinkedList<K>();
+
+        // remove all keys of the same name hierarchy.
+        for (K k : keyHash.keySet())
+        {
+            if ( k instanceof GroupAttrName && ( (GroupAttrName<?>) k ).groupId.equals( key ) )
+            {
+                itemsToRemove.add( k );
+            }
+        }
+
+        // remove matches.
+        for (K fullKey : itemsToRemove)
+        {
+            // Don't add to recycle bin here
+            // https://issues.apache.org/jira/browse/JCS-67
+            performSingleKeyRemoval( fullKey );
+            removed = true;
+            // TODO this needs to update the remove count separately
+        }
+
+        return removed;
+    }
+
+    /**
+     * Removes an individual key from the cache.
+     * <p>
+     * This operates under a lock obtained in doRemove().
+     * <p>
+     * @param key
+     * @return true if an item was removed.
+     */
+    private boolean performSingleKeyRemoval( K key )
+    {
+        boolean removed;
+        // remove single item.
+        IndexedDiskElementDescriptor ded = keyHash.remove( key );
+        removed = ded != null;
+        addToRecycleBin( ded );
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( logCacheName + "Disk removal: Removed from key hash, key [" + key + "] removed = " + removed );
+        }
+        return removed;
+    }
+
+    /**
+     * Remove all the items from the disk cache by reseting everything.
+     */
+    @Override
+    public void processRemoveAll()
+    {
+        ICacheEvent<String> cacheEvent = createICacheEvent( cacheName, "all", ICacheEventLogger.REMOVEALL_EVENT );
+        try
+        {
+            reset();
+        }
+        catch ( Exception e )
+        {
+            log.error( logCacheName + "Problem removing all.", e );
+            reset();
+        }
+        finally
+        {
+            logICacheEvent( cacheEvent );
+        }
+    }
+
+    /**
+     * Reset effectively clears the disk cache, creating new files, recyclebins, and keymaps.
+     * <p>
+     * It can be used to handle errors by last resort, force content update, or removeall.
+     */
+    private void reset()
+    {
+        if ( log.isWarnEnabled() )
+        {
+            log.warn( logCacheName + "Reseting cache" );
+        }
+
+        try
+        {
+            storageLock.writeLock().lock();
+
+            if ( dataFile != null )
+            {
+                dataFile.close();
+            }
+            File dataFileTemp = new File( rafDir, fileName + ".data" );
+            boolean result = dataFileTemp.delete();
+            if (!result && log.isDebugEnabled())
+            {
+                log.debug("Could not delete file " + dataFileTemp);
+            }
+
+            if ( keyFile != null )
+            {
+                keyFile.close();
+            }
+            File keyFileTemp = new File( rafDir, fileName + ".key" );
+            result = keyFileTemp.delete();
+            if (!result && log.isDebugEnabled())
+            {
+                log.debug("Could not delete file " + keyFileTemp);
+            }
+
+            dataFile = new IndexedDisk( new File( rafDir, fileName + ".data" ), getElementSerializer() );
+            keyFile = new IndexedDisk( new File( rafDir, fileName + ".key" ), getElementSerializer() );
+
+            initializeRecycleBin();
+
+            initializeKeyMap();
+        }
+        catch ( IOException e )
+        {
+            log.error( logCacheName + "Failure reseting state", e );
+        }
+        finally
+        {
+            storageLock.writeLock().unlock();
+        }
+    }
+
+    /**
+     * If the maxKeySize is < 0, use 5000, no way to have an unlimited recycle bin right now, or one
+     * less than the mazKeySize.
+     */
+    private void initializeRecycleBin()
+    {
+        int recycleBinSize = cattr.getMaxRecycleBinSize() >= 0 ? cattr.getMaxRecycleBinSize() : 0;
+        recycle = new SortedPreferentialArray<IndexedDiskElementDescriptor>( recycleBinSize );
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( logCacheName + "Set recycle max Size to MaxRecycleBinSize: '" + recycleBinSize + "'" );
+        }
+    }
+
+    /**
+     * Create the map for keys that contain the index position on disk.
+     */
+    private void initializeKeyMap()
+    {
+        keyHash = null;
+        if ( maxKeySize >= 0 )
+        {
+            if (this.diskLimitType.equals(DiskLimitType.COUNT)) {
+                keyHash = new LRUMapCountLimited( maxKeySize );
+            } else {
+                keyHash = new LRUMapSizeLimited(maxKeySize);
+            }
+
+            if ( log.isInfoEnabled() )
+            {
+                log.info( logCacheName + "Set maxKeySize to: '" + maxKeySize + "'" );
+            }
+        }
+        else
+        {
+            // If no max size, use a plain map for memory and processing efficiency.
+            keyHash = new HashMap<K, IndexedDiskElementDescriptor>();
+            // keyHash = Collections.synchronizedMap( new HashMap() );
+            if ( log.isInfoEnabled() )
+            {
+                log.info( logCacheName + "Set maxKeySize to unlimited'" );
+            }
+        }
+    }
+
+    /**
+     * Dispose of the disk cache in a background thread. Joins against this thread to put a cap on
+     * the disposal time.
+     * <p>
+     * TODO make dispose window configurable.
+     */
+    @Override
+    public void processDispose()
+    {
+        ICacheEvent<String> cacheEvent = createICacheEvent( cacheName, "none", ICacheEventLogger.DISPOSE_EVENT );
+        try
+        {
+            Runnable disR = new Runnable()
+            {
+                @Override
+                public void run()
+                {
+                    disposeInternal();
+                }
+            };
+            Thread t = new Thread( disR, "IndexedDiskCache-DisposalThread" );
+            t.start();
+            // wait up to 60 seconds for dispose and then quit if not done.
+            try
+            {
+                t.join( 60 * 1000 );
+            }
+            catch ( InterruptedException ex )
+            {
+                log.error( logCacheName + "Interrupted while waiting for disposal thread to finish.", ex );
+            }
+        }
+        finally
+        {
+            logICacheEvent( cacheEvent );
+        }
+    }
+
+    /**
+     * Internal method that handles the disposal.
+     */
+    protected void disposeInternal()
+    {
+        if ( !alive )
+        {
+            log.error( logCacheName + "Not alive and dispose was called, filename: " + fileName );
+            return;
+        }
+
+        // Prevents any interaction with the cache while we're shutting down.
+        alive = false;
+
+        Thread optimizationThread = currentOptimizationThread;
+        if ( isRealTimeOptimizationEnabled && optimizationThread != null )
+        {
+            // Join with the current optimization thread.
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( logCacheName + "In dispose, optimization already " + "in progress; waiting for completion." );
+            }
+            try
+            {
+                optimizationThread.join();
+            }
+            catch ( InterruptedException e )
+            {
+                log.error( logCacheName + "Unable to join current optimization thread.", e );
+            }
+        }
+        else if ( isShutdownOptimizationEnabled && this.getBytesFree() > 0 )
+        {
+            optimizeFile();
+        }
+
+        saveKeys();
+
+        try
+        {
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( logCacheName + "Closing files, base filename: " + fileName );
+            }
+            dataFile.close();
+            dataFile = null;
+            keyFile.close();
+            keyFile = null;
+        }
+        catch ( IOException e )
+        {
+            log.error( logCacheName + "Failure closing files in dispose, filename: " + fileName, e );
+        }
+
+        if ( log.isInfoEnabled() )
+        {
+            log.info( logCacheName + "Shutdown complete." );
+        }
+    }
+
+    /**
+     * Add descriptor to recycle bin if it is not null. Adds the length of the item to the bytes
+     * free.
+     * <p>
+     * This is called in three places: (1) When an item is removed. All item removals funnel down to
+     * the removeSingleItem method. (2) When an item on disk is updated with a value that will not
+     * fit in the previous slot. (3) When the max key size is reached, the freed slot will be added.
+     * <p>
+     * The recylebin is not a set. If a slot it added twice, it will result in the wrong data being
+     * returned.
+     * <p>
+     * @param ded
+     */
+    protected void addToRecycleBin( IndexedDiskElementDescriptor ded )
+    {
+        // reuse the spot
+        if ( ded != null )
+        {
+            this.adjustBytesFree( ded, true );
+
+            if ( doRecycle )
+            {
+                recycle.add( ded );
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( logCacheName + "recycled ded" + ded );
+                }
+
+            }
+        }
+    }
+
+    /**
+     * Performs the check for optimization, and if it is required, do it.
+     */
+    protected void doOptimizeRealTime()
+    {
+        if ( isRealTimeOptimizationEnabled && !isOptimizing && removeCount++ >= cattr.getOptimizeAtRemoveCount() )
+        {
+            isOptimizing = true;
+
+            if ( log.isInfoEnabled() )
+            {
+                log.info( logCacheName + "Optimizing file. removeCount [" + removeCount + "] OptimizeAtRemoveCount ["
+                    + cattr.getOptimizeAtRemoveCount() + "]" );
+            }
+
+            if ( currentOptimizationThread == null )
+            {
+                storageLock.writeLock().lock();
+
+                try
+                {
+                    if ( currentOptimizationThread == null )
+                    {
+                        currentOptimizationThread = new Thread( new Runnable()
+                        {
+                            @Override
+                            public void run()
+                            {
+                                optimizeFile();
+
+                                currentOptimizationThread = null;
+                            }
+                        }, "IndexedDiskCache-OptimizationThread" );
+                    }
+                }
+                finally
+                {
+                    storageLock.writeLock().unlock();
+                }
+
+                if ( currentOptimizationThread != null )
+                {
+                    currentOptimizationThread.start();
+                }
+            }
+        }
+    }
+
+    /**
+     * File optimization is handled by this method. It works as follows:
+     * <ol>
+     * <li>Shutdown recycling and turn on queuing of puts. </li> <li>Take a snapshot of the current
+     * descriptors. If there are any removes, ignore them, as they will be compacted during the next
+     * optimization.</li> <li>Optimize the snapshot. For each descriptor:
+     * <ol>
+     * <li>Obtain the write-lock.</li> <li>Shift the element on the disk, in order to compact out
+     * the free space. </li> <li>Release the write-lock. This allows elements to still be accessible
+     * during optimization.</li>
+     * </ol>
+     * </li> <li>Obtain the write-lock.</li> <li>All queued puts are made at the end of the file.
+     * Optimize these under a single write-lock.</li> <li>Truncate the file.</li> <li>Release the
+     * write-lock. </li> <li>Restore system to standard operation.</li>
+     * </ol>
+     */
+    protected void optimizeFile()
+    {
+        ElapsedTimer timer = new ElapsedTimer();
+        timesOptimized++;
+        if ( log.isInfoEnabled() )
+        {
+            log.info( logCacheName + "Beginning Optimization #" + timesOptimized );
+        }
+
+        // CREATE SNAPSHOT
+        IndexedDiskElementDescriptor[] defragList = null;
+
+        storageLock.writeLock().lock();
+
+        try
+        {
+            queueInput = true;
+            // shut off recycle while we're optimizing,
+            doRecycle = false;
+            defragList = createPositionSortedDescriptorList();
+        }
+        finally
+        {
+            // Release if I acquired.
+            storageLock.writeLock().unlock();
+        }
+
+        // Defrag the file outside of the write lock. This allows a move to be made,
+        // and yet have the element still accessible for reading or writing.
+        long expectedNextPos = defragFile( defragList, 0 );
+
+        // ADD THE QUEUED ITEMS to the end and then truncate
+        storageLock.writeLock().lock();
+
+        try
+        {
+            try
+            {
+                if ( !queuedPutList.isEmpty() )
+                {
+                    // This is perhaps unnecessary, but the list might not be as sorted as we think.
+                    defragList = new IndexedDiskElementDescriptor[queuedPutList.size()];
+                    queuedPutList.toArray( defragList );
+                    Arrays.sort( defragList, new PositionComparator() );
+
+                    // pack them at the end
+                    expectedNextPos = defragFile( defragList, expectedNextPos );
+                }
+                // TRUNCATE THE FILE
+                dataFile.truncate( expectedNextPos );
+            }
+            catch ( Exception e )
+            {
+                log.error( logCacheName + "Error optimizing queued puts.", e );
+            }
+
+            // RESTORE NORMAL OPERATION
+            removeCount = 0;
+            resetBytesFree();
+            initializeRecycleBin();
+            queuedPutList.clear();
+            queueInput = false;
+            // turn recycle back on.
+            doRecycle = true;
+            isOptimizing = false;
+        }
+        finally
+        {
+            storageLock.writeLock().unlock();
+        }
+
+        if ( log.isInfoEnabled() )
+        {
+            log.info( logCacheName + "Finished #" + timesOptimized + " Optimization took "
+                + timer.getElapsedTimeString() );
+        }
+    }
+
+    /**
+     * Defragments the file in place by compacting out the free space (i.e., moving records
+     * forward). If there were no gaps the resulting file would be the same size as the previous
+     * file. This must be supplied an ordered defragList.
+     * <p>
+     * @param defragList sorted list of descriptors for optimization
+     * @param startingPos the start position in the file
+     * @return this is the potential new file end
+     */
+    private long defragFile( IndexedDiskElementDescriptor[] defragList, long startingPos )
+    {
+        ElapsedTimer timer = new ElapsedTimer();
+        long preFileSize = 0;
+        long postFileSize = 0;
+        long expectedNextPos = 0;
+        try
+        {
+            preFileSize = this.dataFile.length();
+            // find the first gap in the disk and start defragging.
+            expectedNextPos = startingPos;
+            for ( int i = 0; i < defragList.length; i++ )
+            {
+                storageLock.writeLock().lock();
+                try
+                {
+                    if ( expectedNextPos != defragList[i].pos )
+                    {
+                        dataFile.move( defragList[i], expectedNextPos );
+                    }
+                    expectedNextPos = defragList[i].pos + IndexedDisk.HEADER_SIZE_BYTES + defragList[i].len;
+                }
+                finally
+                {
+                    storageLock.writeLock().unlock();
+                }
+            }
+
+            postFileSize = this.dataFile.length();
+
+            // this is the potential new file end
+            return expectedNextPos;
+        }
+        catch ( IOException e )
+        {
+            log.error( logCacheName + "Error occurred during defragmentation.", e );
+        }
+        finally
+        {
+            if ( log.isInfoEnabled() )
+            {
+                log.info( logCacheName + "Defragmentation took " + timer.getElapsedTimeString()
+                    + ". File Size (before=" + preFileSize + ") (after=" + postFileSize + ") (truncating to "
+                    + expectedNextPos + ")" );
+            }
+        }
+
+        return 0;
+    }
+
+    /**
+     * Creates a snapshot of the IndexedDiskElementDescriptors in the keyHash and returns them
+     * sorted by position in the dataFile.
+     * <p>
+     * TODO fix values() method on the LRU map.
+     * <p>
+     * @return IndexedDiskElementDescriptor[]
+     */
+    private IndexedDiskElementDescriptor[] createPositionSortedDescriptorList()
+    {
+        IndexedDiskElementDescriptor[] defragList = new IndexedDiskElementDescriptor[keyHash.size()];
+        Iterator<Map.Entry<K, IndexedDiskElementDescriptor>> iterator = keyHash.entrySet().iterator();
+        for ( int i = 0; iterator.hasNext(); i++ )
+        {
+            Map.Entry<K, IndexedDiskElementDescriptor> next = iterator.next();
+            defragList[i] = next.getValue();
+        }
+
+        Arrays.sort( defragList, new PositionComparator() );
+
+        return defragList;
+    }
+
+    /**
+     * Returns the current cache size.
+     * <p>
+     * @return The size value
+     */
+    @Override
+    public int getSize()
+    {
+        return keyHash.size();
+    }
+
+    /**
+     * Returns the size of the recyclebin in number of elements.
+     * <p>
+     * @return The number of items in the bin.
+     */
+    protected int getRecyleBinSize()
+    {
+        return this.recycle.size();
+    }
+
+    /**
+     * Returns the number of times we have used spots from the recycle bin.
+     * <p>
+     * @return The number of spots used.
+     */
+    protected int getRecyleCount()
+    {
+        return this.recycleCnt;
+    }
+
+    /**
+     * Returns the number of bytes that are free. When an item is removed, its length is recorded.
+     * When a spot is used form the recycle bin, the length of the item stored is recorded.
+     * <p>
+     * @return The number bytes free on the disk file.
+     */
+    protected synchronized long getBytesFree()
+    {
+        return this.bytesFree;
+    }
+
+    /**
+     * Resets the number of bytes that are free.
+     */
+    private synchronized void resetBytesFree()
+    {
+        this.bytesFree = 0;
+    }
+
+    /**
+     * To subtract you can pass in false for add..
+     * <p>
+     * @param ded
+     * @param add
+     */
+    private synchronized void adjustBytesFree( IndexedDiskElementDescriptor ded, boolean add )
+    {
+        if ( ded != null )
+        {
+            int amount = ded.len + IndexedDisk.HEADER_SIZE_BYTES;
+
+            if ( add )
+            {
+                this.bytesFree += amount;
+            }
+            else
+            {
+                this.bytesFree -= amount;
+            }
+        }
+    }
+
+    /**
+     * This is for debugging and testing.
+     * <p>
+     * @return the length of the data file.
+     * @throws IOException
+     */
+    protected long getDataFileSize()
+        throws IOException
+    {
+        long size = 0;
+
+        storageLock.readLock().lock();
+
+        try
+        {
+            if ( dataFile != null )
+            {
+                size = dataFile.length();
+            }
+        }
+        finally
+        {
+            storageLock.readLock().unlock();
+        }
+
+        return size;
+    }
+
+    /**
+     * For debugging. This dumps the values by default.
+     */
+    public void dump()
+    {
+        dump( true );
+    }
+
+    /**
+     * For debugging.
+     * <p>
+     * @param dumpValues A boolean indicating if values should be dumped.
+     */
+    public void dump( boolean dumpValues )
+    {
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( logCacheName + "[dump] Number of keys: " + keyHash.size() );
+
+            for (Map.Entry<K, IndexedDiskElementDescriptor> e : keyHash.entrySet())
+            {
+                K key = e.getKey();
+                IndexedDiskElementDescriptor ded = e.getValue();
+
+                log.debug( logCacheName + "[dump] Disk element, key: " + key + ", pos: " + ded.pos + ", ded.len"
+                    + ded.len + ( dumpValues ? ", val: " + get( key ) : "" ) );
+            }
+        }
+    }
+
+    /**
+     * @return Returns the AuxiliaryCacheAttributes.
+     */
+    @Override
+    public AuxiliaryCacheAttributes getAuxiliaryCacheAttributes()
+    {
+        return this.cattr;
+    }
+
+    /**
+     * Gets basic stats for the disk cache.
+     * <p>
+     * @return String
+     */
+    @Override
+    public String getStats()
+    {
+        return getStatistics().toString();
+    }
+
+    /**
+     * Returns info about the disk cache.
+     * <p>
+     * (non-Javadoc)
+     * @see org.apache.commons.jcs.auxiliary.AuxiliaryCache#getStatistics()
+     */
+    @Override
+    public synchronized IStats getStatistics()
+    {
+        IStats stats = new Stats();
+        stats.setTypeName( "Indexed Disk Cache" );
+
+        ArrayList<IStatElement<?>> elems = new ArrayList<IStatElement<?>>();
+
+        elems.add(new StatElement<Boolean>( "Is Alive", Boolean.valueOf(alive) ) );
+        elems.add(new StatElement<Integer>( "Key Map Size",
+                Integer.valueOf(this.keyHash != null ? this.keyHash.size() : -1) ) );
+        try
+        {
+            elems.add(new StatElement<Long>( "Data File Length",
+                    Long.valueOf(this.dataFile != null ? this.dataFile.length() : -1L) ) );
+        }
+        catch ( Exception e )
+        {
+            log.error( e );
+        }
+        elems.add(new StatElement<Integer>( "Max Key Size", this.maxKeySize));
+        elems.add(new StatElement<Integer>( "Hit Count", Integer.valueOf(this.hitCount.get()) ) );
+        elems.add(new StatElement<Long>( "Bytes Free", Long.valueOf(this.bytesFree) ) );
+        elems.add(new StatElement<Integer>( "Optimize Operation Count", Integer.valueOf(this.removeCount) ) );
+        elems.add(new StatElement<Integer>( "Times Optimized", Integer.valueOf(this.timesOptimized) ) );
+        elems.add(new StatElement<Integer>( "Recycle Count", Integer.valueOf(this.recycleCnt) ) );
+        elems.add(new StatElement<Integer>( "Recycle Bin Size", Integer.valueOf(this.recycle.size()) ) );
+        elems.add(new StatElement<Integer>( "Startup Size", Integer.valueOf(this.startupSize) ) );
+
+        // get the stats from the super too
+        IStats sStats = super.getStatistics();
+        elems.addAll(sStats.getStatElements());
+
+        stats.setStatElements( elems );
+
+        return stats;
+    }
+
+    /**
+     * This is exposed for testing.
+     * <p>
+     * @return Returns the timesOptimized.
+     */
+    protected int getTimesOptimized()
+    {
+        return timesOptimized;
+    }
+
+    /**
+     * This is used by the event logging.
+     * <p>
+     * @return the location of the disk, either path or ip.
+     */
+    @Override
+    protected String getDiskLocation()
+    {
+        return dataFile.getFilePath();
+    }
+
+    /**
+     * Compares IndexedDiskElementDescriptor based on their position.
+     * <p>
+     */
+    protected static final class PositionComparator
+        implements Comparator<IndexedDiskElementDescriptor>, Serializable
+    {
+        /** serialVersionUID */
+        private static final long serialVersionUID = -8387365338590814113L;
+
+        /**
+         * Compares two descriptors based on position.
+         * <p>
+         * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
+         */
+        @Override
+        public int compare( IndexedDiskElementDescriptor o1, IndexedDiskElementDescriptor o2 )
+        {
+            IndexedDiskElementDescriptor ded1 = o1;
+            IndexedDiskElementDescriptor ded2 = o2;
+
+            if ( ded1.pos < ded2.pos )
+            {
+                return -1;
+            }
+            else if ( ded1.pos == ded2.pos )
+            {
+                return 0;
+            }
+            else
+            {
+                return 1;
+            }
+        }
+    }
+
+    /**
+     * Class for recycling and lru. This implements the LRU overflow callback, so we can add items
+     * to the recycle bin. This class counts the size element to decide, when to throw away an element
+     */
+    public class LRUMapSizeLimited
+        extends AbstractLRUMap<K, IndexedDiskElementDescriptor>
+    {
+        /**
+         * <code>tag</code> tells us which map we are working on.
+         */
+        public String tag = "orig";
+        // size of the content in kB
+        private AtomicInteger contentSize = new AtomicInteger();
+        private int maxSize = -1;
+        /**
+         * Default
+         */
+        public LRUMapSizeLimited()
+        {
+            super();
+        }
+
+        /**
+         * @param maxKeySize
+         */
+        public LRUMapSizeLimited( int maxKeySize )
+        {
+            super();
+            this.maxSize = maxKeySize;
+        }
+
+        @Override
+        public IndexedDiskElementDescriptor put(K key, IndexedDiskElementDescriptor value) {
+            try {
+                return super.put(key, value);
+            } finally {
+                // keep the content size in kB, so 2^31 kB is reasonable value
+                contentSize.addAndGet((int) Math.ceil((value.len + IndexedDisk.HEADER_SIZE_BYTES) / 1024.0));
+            }
+        }
+
+        @Override
+        public IndexedDiskElementDescriptor remove(Object key ) {
+            IndexedDiskElementDescriptor value = null;
+
+            try {
+                value = super.remove(key);
+                return value;
+            } finally {
+                if (value != null) {
+                    // keep the content size in kB, so 2^31 kB is reasonable value
+                    contentSize.addAndGet((int) ((Math.ceil((value.len + IndexedDisk.HEADER_SIZE_BYTES) / 1024.0)) * -1));
+                }
+            }
+        }
+
+        /**
+         * This is called when the may key size is reached. The least recently used item will be
+         * passed here. We will store the position and size of the spot on disk in the recycle bin.
+         * <p>
+         * @param key
+         * @param value
+         */
+        @Override
+        protected void processRemovedLRU(K key, IndexedDiskElementDescriptor value )
+        {
+            if (value != null) {
+                // keep the content size in kB, so 2^31 kB is reasonable value
+                contentSize.addAndGet((int) ((Math.ceil(value.len / 1024.0)) * -1));
+            }
+            addToRecycleBin( value );
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( logCacheName + "Removing key: [" + key + "] from key store." );
+                log.debug( logCacheName + "Key store size: [" + this.size() + "]." );
+            }
+
+            doOptimizeRealTime();
+        }
+
+        @Override
+        protected boolean shouldRemove() {
+            return maxSize > 0 && contentSize.intValue() > maxSize && this.size() > 0;
+        }
+    }
+
+    /**
+     * Class for recycling and lru. This implements the LRU overflow callback, so we can add items
+     * to the recycle bin. This class counts the elements to decide, when to throw away an element
+     */
+
+    public class LRUMapCountLimited
+    extends LRUMap<K, IndexedDiskElementDescriptor>
+    // implements Serializable
+    {
+        public LRUMapCountLimited(int maxKeySize) {
+            super(maxKeySize);
+        }
+        /**
+         * This is called when the may key size is reached. The least recently used item will be
+         * passed here. We will store the position and size of the spot on disk in the recycle bin.
+         * <p>
+         * @param key
+         * @param value
+         */
+        @Override
+        protected void processRemovedLRU(K key, IndexedDiskElementDescriptor value )
+        {
+            addToRecycleBin( value );
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( logCacheName + "Removing key: [" + key + "] from key store." );
+                log.debug( logCacheName + "Key store size: [" + this.size() + "]." );
+            }
+
+            doOptimizeRealTime();
+        }
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/disk/indexed/IndexedDiskCacheAttributes.java b/src/org/apache/commons/jcs/auxiliary/disk/indexed/IndexedDiskCacheAttributes.java
new file mode 100644
index 0000000..1a22621
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/disk/indexed/IndexedDiskCacheAttributes.java
@@ -0,0 +1,209 @@
+package org.apache.commons.jcs.auxiliary.disk.indexed;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.AuxiliaryCacheAttributes;
+import org.apache.commons.jcs.auxiliary.disk.AbstractDiskCacheAttributes;
+
+/**
+ * Configuration class for the Indexed Disk Cache
+ */
+public class IndexedDiskCacheAttributes
+    extends AbstractDiskCacheAttributes
+{
+    /** Don't change. */
+    private static final long serialVersionUID = -2190863599358782950L;
+
+    /** default value */
+    private static final int DEFAULT_maxKeySize = 5000;
+
+    /** -1 means no limit. */
+    private int maxKeySize = DEFAULT_maxKeySize;
+
+    /** default value */
+    private static final int DEFAULT_maxRecycleBinSize = 5000;
+
+    /**
+     * Cannot be larger than the max size. If max is less than 0, this will be 5000
+     */
+    private int maxRecycleBinSize = DEFAULT_maxRecycleBinSize;
+
+    /** default to -1, i.e., don't optimize until shutdown */
+    private int optimizeAtRemoveCount = -1;
+
+    /** Should we optimize on shutdown. */
+    public static final boolean DEFAULT_OPTIMIZE_ON_SHUTDOWN = true;
+
+    /** Should we optimize on shutdown. */
+    private boolean optimizeOnShutdown = DEFAULT_OPTIMIZE_ON_SHUTDOWN;
+
+    /** Should we clear the disk on startup. */
+    public static final boolean DEFAULT_CLEAR_DISK_ON_STARTUP = false;
+
+    /** Should we clear the disk on startup. If true the congtents of disk are cleared. */
+    private boolean clearDiskOnStartup = DEFAULT_CLEAR_DISK_ON_STARTUP;
+
+    private DiskLimitType diskLimitType = DiskLimitType.COUNT;
+
+    /**
+     * Constructor for the DiskCacheAttributes object
+     */
+    public IndexedDiskCacheAttributes()
+    {
+        super();
+    }
+
+    /**
+     * Gets the maxKeySize attribute of the DiskCacheAttributes object
+     * <p>
+     * @return The maxKeySize value
+     */
+    public int getMaxKeySize()
+    {
+        return this.maxKeySize;
+    }
+
+    /**
+     * Sets the maxKeySize attribute of the DiskCacheAttributes object
+     * <p>
+     * @param maxKeySize The new maxKeySize value
+     */
+    public void setMaxKeySize( int maxKeySize )
+    {
+        this.maxKeySize = maxKeySize;
+
+        // make sure the sizes are in accord with our rule.
+        setMaxRecycleBinSize( maxRecycleBinSize );
+    }
+
+    /**
+     * Gets the optimizeAtRemoveCount attribute of the DiskCacheAttributes object
+     * <p>
+     * @return The optimizeAtRemoveCount value
+     */
+    public int getOptimizeAtRemoveCount()
+    {
+        return this.optimizeAtRemoveCount;
+    }
+
+    /**
+     * Sets the optimizeAtRemoveCount attribute of the DiskCacheAttributes object This number
+     * determines how often the disk cache should run real time optimizations.
+     * <p>
+     * @param cnt The new optimizeAtRemoveCount value
+     */
+    public void setOptimizeAtRemoveCount( int cnt )
+    {
+        this.optimizeAtRemoveCount = cnt;
+    }
+
+    /**
+     * This cannot be larger than the maxKeySize. It wouldn't hurt anything, but it makes the config
+     * necessary. The recycle bin entry willbe at least as large as a key.
+     * <p>
+     * If the maxKeySize is -1 this will be set tot he default, which is 5000.
+     * <p>
+     * @param maxRecycleBinSize The maxRecycleBinSize to set.
+     */
+    public void setMaxRecycleBinSize( int maxRecycleBinSize )
+    {
+        this.maxRecycleBinSize = maxRecycleBinSize;
+    }
+
+    /**
+     * @return Returns the maxRecycleBinSize.
+     */
+    public int getMaxRecycleBinSize()
+    {
+        return maxRecycleBinSize;
+    }
+
+    /**
+     * @param optimizeOnShutdown The optimizeOnShutdown to set.
+     */
+    public void setOptimizeOnShutdown( boolean optimizeOnShutdown )
+    {
+        this.optimizeOnShutdown = optimizeOnShutdown;
+    }
+
+    /**
+     * @return Returns the optimizeOnShutdown.
+     */
+    public boolean isOptimizeOnShutdown()
+    {
+        return optimizeOnShutdown;
+    }
+
+    /**
+     * @param clearDiskOnStartup the clearDiskOnStartup to set
+     */
+    public void setClearDiskOnStartup( boolean clearDiskOnStartup )
+    {
+        this.clearDiskOnStartup = clearDiskOnStartup;
+    }
+
+    /**
+     * @return the clearDiskOnStartup
+     */
+    public boolean isClearDiskOnStartup()
+    {
+        return clearDiskOnStartup;
+    }
+
+    /**
+     * Returns a copy of the attributes.
+     * <p>
+     * @return AuxiliaryCacheAttributes
+     */
+    @Override
+    public AuxiliaryCacheAttributes copy()
+    {
+        try
+        {
+            return (AuxiliaryCacheAttributes) this.clone();
+        }
+        catch ( Exception e )
+        {
+            // swallow
+        }
+        return this;
+    }
+
+    /**
+     * Write out the values for debugging purposes.
+     * <p>
+     * @return String
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder str = new StringBuilder();
+        str.append( "IndexedDiskCacheAttributes " );
+        str.append( "\n diskPath = " + super.getDiskPath() );
+        str.append( "\n maxPurgatorySize   = " + super.getMaxPurgatorySize() );
+        str.append( "\n maxKeySize  = " + maxKeySize );
+        str.append( "\n maxRecycleBinSize  = " + maxRecycleBinSize );
+        str.append( "\n optimizeAtRemoveCount  = " + optimizeAtRemoveCount );
+        str.append( "\n shutdownSpoolTimeLimit  = " + super.getShutdownSpoolTimeLimit() );
+        str.append( "\n optimizeOnShutdown  = " + optimizeOnShutdown );
+        str.append( "\n clearDiskOnStartup  = " + clearDiskOnStartup );
+        return str.toString();
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/disk/indexed/IndexedDiskCacheFactory.java b/src/org/apache/commons/jcs/auxiliary/disk/indexed/IndexedDiskCacheFactory.java
new file mode 100644
index 0000000..6c5888e
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/disk/indexed/IndexedDiskCacheFactory.java
@@ -0,0 +1,66 @@
+package org.apache.commons.jcs.auxiliary.disk.indexed;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.AbstractAuxiliaryCacheFactory;
+import org.apache.commons.jcs.auxiliary.AuxiliaryCacheAttributes;
+import org.apache.commons.jcs.engine.behavior.ICompositeCacheManager;
+import org.apache.commons.jcs.engine.behavior.IElementSerializer;
+import org.apache.commons.jcs.engine.logging.behavior.ICacheEventLogger;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Creates disk cache instances.
+ */
+public class IndexedDiskCacheFactory
+    extends AbstractAuxiliaryCacheFactory
+{
+    /** The logger. */
+    private static final Log log = LogFactory.getLog( IndexedDiskCacheFactory.class );
+
+    /**
+     * Create an instance of an IndexedDiskCache.
+     * <p>
+     * @param iaca cache attributes of this cache instance
+     * @param cacheMgr This allows auxiliaries to reference the manager without assuming that it is
+     *            a singleton. This will allow JCS to be a non-singleton. Also, it makes it easier to
+     *            test.
+     * @param cacheEventLogger
+     * @param elementSerializer
+     * @return IndexedDiskCache
+     */
+    @Override
+    public <K, V> IndexedDiskCache<K, V> createCache( AuxiliaryCacheAttributes iaca, ICompositeCacheManager cacheMgr,
+                                       ICacheEventLogger cacheEventLogger, IElementSerializer elementSerializer )
+    {
+        IndexedDiskCacheAttributes idca = (IndexedDiskCacheAttributes) iaca;
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Creating DiskCache for attributes = " + idca );
+        }
+
+        IndexedDiskCache<K, V> cache = new IndexedDiskCache<K, V>( idca );
+        cache.setCacheEventLogger( cacheEventLogger );
+        cache.setElementSerializer(elementSerializer);
+
+        return cache;
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/disk/indexed/IndexedDiskDumper.java b/src/org/apache/commons/jcs/auxiliary/disk/indexed/IndexedDiskDumper.java
new file mode 100644
index 0000000..94d9cfe
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/disk/indexed/IndexedDiskDumper.java
@@ -0,0 +1,57 @@
+package org.apache.commons.jcs.auxiliary.disk.indexed;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.Serializable;
+
+
+/**
+ * Used to dump out a Disk cache from disk for debugging. This is meant to be
+ * run as a command line utility for
+ */
+public class IndexedDiskDumper
+{
+    /**
+     * The main program for the DiskDumper class
+     * <p>
+     * Creates a disk cache and then calls dump, which write out the contents to
+     * a debug log.
+     * <p>
+     * @param args
+     *            The command line arguments
+     */
+    public static void main( String[] args )
+    {
+        if ( args.length != 1 )
+        {
+            System.out.println( "Usage: java org.apache.commons.jcs.auxiliary.disk.DiskDump <cache_name>" );
+            System.exit( 0 );
+        }
+
+        IndexedDiskCacheAttributes attr = new IndexedDiskCacheAttributes();
+
+        attr.setCacheName( args[0] );
+        attr.setDiskPath( args[0] );
+
+        IndexedDiskCache<Serializable, Serializable> dc = new IndexedDiskCache<Serializable, Serializable>( attr );
+        dc.dump( true );
+        System.exit( 0 );
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/disk/indexed/IndexedDiskElementDescriptor.java b/src/org/apache/commons/jcs/auxiliary/disk/indexed/IndexedDiskElementDescriptor.java
new file mode 100644
index 0000000..12435c1
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/disk/indexed/IndexedDiskElementDescriptor.java
@@ -0,0 +1,118 @@
+package org.apache.commons.jcs.auxiliary.disk.indexed;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.Serializable;
+
+/**
+ * Disk objects are located by descriptor entries. These are saved on shutdown and loaded into
+ * memory on startup.
+ */
+public class IndexedDiskElementDescriptor
+    implements Serializable, Comparable<IndexedDiskElementDescriptor>
+{
+    /** Don't change */
+    private static final long serialVersionUID = -3029163572847659450L;
+
+    /** Position of the cache data entry on disk. */
+    long pos;
+
+    /** Number of bytes the serialized form of the cache data takes. */
+    int len;
+
+    /**
+     * Constructs a usable disk element descriptor.
+     * <p>
+     * @param pos
+     * @param len
+     */
+    public IndexedDiskElementDescriptor( long pos, int len )
+    {
+        this.pos = pos;
+        this.len = len;
+    }
+
+    /**
+     * @return debug string
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder buf = new StringBuilder();
+        buf.append( "[DED: " );
+        buf.append( " pos = " + pos );
+        buf.append( " len = " + len );
+        buf.append( "]" );
+        return buf.toString();
+    }
+
+    /**
+     * @see java.lang.Object#hashCode()
+     */
+    @Override
+    public int hashCode()
+    {
+        return Long.valueOf(this.pos).hashCode() ^ Integer.valueOf(len).hashCode();
+    }
+
+    /**
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    @Override
+    public boolean equals(Object o)
+    {
+        if (o instanceof IndexedDiskElementDescriptor)
+        {
+            return compareTo((IndexedDiskElementDescriptor) o) == 0;
+        }
+
+        return false;
+    }
+
+    /**
+     * Compares based on length.
+     * <p>
+     * @param o Object
+     * @return int
+     */
+    @Override
+    public int compareTo( IndexedDiskElementDescriptor o )
+    {
+        if ( o == null )
+        {
+            return 1;
+        }
+
+        int oLen = o.len;
+        if ( oLen == len )
+        {
+            return 0;
+        }
+        else if ( oLen > len )
+        {
+            return -1;
+        }
+        else if ( oLen < len )
+        {
+            return 1;
+        }
+        return 0;
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCache.java b/src/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCache.java
new file mode 100644
index 0000000..efc5197
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCache.java
@@ -0,0 +1,1158 @@
+package org.apache.commons.jcs.auxiliary.disk.jdbc;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.commons.jcs.auxiliary.AuxiliaryCacheAttributes;
+import org.apache.commons.jcs.auxiliary.disk.AbstractDiskCache;
+import org.apache.commons.jcs.engine.CacheConstants;
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.behavior.ICompositeCacheManager;
+import org.apache.commons.jcs.engine.behavior.IElementSerializer;
+import org.apache.commons.jcs.engine.logging.behavior.ICacheEvent;
+import org.apache.commons.jcs.engine.logging.behavior.ICacheEventLogger;
+import org.apache.commons.jcs.engine.stats.StatElement;
+import org.apache.commons.jcs.engine.stats.behavior.IStatElement;
+import org.apache.commons.jcs.engine.stats.behavior.IStats;
+import org.apache.commons.jcs.utils.serialization.StandardSerializer;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * This is the jdbc disk cache plugin.
+ * <p>
+ * It expects a table created by the following script. The table name is configurable.
+ * <p>
+ *
+ * <pre>
+ *                       drop TABLE JCS_STORE;
+ *                       CREATE TABLE JCS_STORE
+ *                       (
+ *                       CACHE_KEY                  VARCHAR(250)          NOT NULL,
+ *                       REGION                     VARCHAR(250)          NOT NULL,
+ *                       ELEMENT                    BLOB,
+ *                       CREATE_TIME                TIMESTAMP,
+ *                       UPDATE_TIME_SECONDS        BIGINT,
+ *                       MAX_LIFE_SECONDS           BIGINT,
+ *                       SYSTEM_EXPIRE_TIME_SECONDS BIGINT,
+ *                       IS_ETERNAL                 CHAR(1),
+ *                       PRIMARY KEY (CACHE_KEY, REGION)
+ *                       );
+ * </pre>
+ * <p>
+ * The cleanup thread will delete non eternal items where (now - create time) > max life seconds *
+ * 1000
+ * <p>
+ * To speed up the deletion the SYSTEM_EXPIRE_TIME_SECONDS is used instead. It is recommended that
+ * an index be created on this column is you will have over a million records.
+ * <p>
+ * @author Aaron Smuts
+ */
+public class JDBCDiskCache<K, V>
+    extends AbstractDiskCache<K, V>
+{
+    /** The local logger. */
+    private static final Log log = LogFactory.getLog( JDBCDiskCache.class );
+
+    /** custom serialization */
+    private IElementSerializer elementSerializer = new StandardSerializer();
+
+    /** configuration */
+    private JDBCDiskCacheAttributes jdbcDiskCacheAttributes;
+
+    /** # of times update was called */
+    private int updateCount = 0;
+
+    /** # of times get was called */
+    private int getCount = 0;
+
+    /** # of times getMatching was called */
+    private int getMatchingCount = 0;
+
+    /** if count % interval == 0 then log */
+    private static final int LOG_INTERVAL = 100;
+
+    /** db connection pool */
+    private JDBCDiskCachePoolAccess poolAccess = null;
+
+    /** tracks optimization */
+    private TableState tableState;
+
+    /**
+     * Constructs a JDBC Disk Cache for the provided cache attributes. The table state object is
+     * used to mark deletions.
+     * <p>
+     * @param cattr
+     * @param tableState
+     * @param compositeCacheManager
+     * @throws SQLException if the pool access could not be set up
+     */
+    public JDBCDiskCache( JDBCDiskCacheAttributes cattr, TableState tableState,
+                          ICompositeCacheManager compositeCacheManager ) throws SQLException
+    {
+        super( cattr );
+
+        setTableState( tableState );
+        setJdbcDiskCacheAttributes( cattr );
+
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "jdbcDiskCacheAttributes = " + getJdbcDiskCacheAttributes() );
+        }
+
+        // This initializes the pool access.
+        this.poolAccess = initializePoolAccess( cattr, compositeCacheManager );
+
+        // Initialization finished successfully, so set alive to true.
+        alive = true;
+    }
+
+    /**
+     * Registers the driver and creates a poolAccess class.
+     * <p>
+     * @param cattr
+     * @param compositeCacheManager
+     * @return JDBCDiskCachePoolAccess for testing
+     * @throws SQLException if a database access error occurs
+     */
+    protected JDBCDiskCachePoolAccess initializePoolAccess( JDBCDiskCacheAttributes cattr,
+                                                            ICompositeCacheManager compositeCacheManager ) throws SQLException
+    {
+        JDBCDiskCachePoolAccess poolAccess1 = null;
+        if ( cattr.getConnectionPoolName() != null )
+        {
+            JDBCDiskCachePoolAccessManager manager = JDBCDiskCachePoolAccessManager.getInstance();
+            poolAccess1 = manager.getJDBCDiskCachePoolAccess(
+                    cattr.getConnectionPoolName(),
+                    compositeCacheManager.getConfigurationProperties() );
+        }
+        else
+        {
+            poolAccess1 = JDBCDiskCachePoolAccessManager.createPoolAccess( cattr );
+        }
+        return poolAccess1;
+    }
+
+    /**
+     * Inserts or updates. By default it will try to insert. If the item exists we will get an
+     * error. It will then update. This behavior is configurable. The cache can be configured to
+     * check before inserting.
+     * <p>
+     * @param ce
+     */
+    @Override
+    protected void processUpdate( ICacheElement<K, V> ce )
+    {
+        incrementUpdateCount();
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "updating, ce = " + ce );
+        }
+
+        Connection con;
+        try
+        {
+            con = getPoolAccess().getConnection();
+        }
+        catch ( SQLException e )
+        {
+            log.error( "Problem getting connection.", e );
+            return;
+        }
+
+        try
+        {
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Putting [" + ce.getKey() + "] on disk." );
+            }
+
+            byte[] element;
+
+            try
+            {
+                element = getElementSerializer().serialize( ce );
+            }
+            catch ( IOException e )
+            {
+                log.error( "Could not serialize element", e );
+                return;
+            }
+
+            insertOrUpdate( ce, con, element );
+        }
+        finally
+        {
+            try
+            {
+                con.close();
+            }
+            catch ( SQLException e )
+            {
+                log.error( "Problem closing connection.", e );
+            }
+        }
+
+        if ( log.isInfoEnabled() )
+        {
+            if ( updateCount % LOG_INTERVAL == 0 )
+            {
+                // TODO make a log stats method
+                log.info( "Update Count [" + updateCount + "]" );
+            }
+        }
+    }
+
+    /**
+     * If test before insert it true, we check to see if the element exists. If the element exists
+     * we will update. Otherwise, we try inserting.  If this fails because the item exists, we will
+     * update.
+     * <p>
+     * @param ce
+     * @param con
+     * @param element
+     */
+    private void insertOrUpdate( ICacheElement<K, V> ce, Connection con, byte[] element )
+    {
+        boolean exists = false;
+
+        // First do a query to determine if the element already exists
+        if ( this.getJdbcDiskCacheAttributes().isTestBeforeInsert() )
+        {
+            exists = doesElementExist( ce );
+        }
+
+        // If it doesn't exist, insert it, otherwise update
+        if ( !exists )
+        {
+            exists = insertRow( ce, con, element );
+        }
+
+        // update if it exists.
+        if ( exists )
+        {
+            updateRow( ce, con, element );
+        }
+    }
+
+    /**
+     * This inserts a new row in the database.
+     * <p>
+     * @param ce
+     * @param con
+     * @param element
+     * @return true if the insertion fails because the record exists.
+     */
+    private boolean insertRow( ICacheElement<K, V> ce, Connection con, byte[] element )
+    {
+        boolean exists = false;
+        try
+        {
+            String sqlI = "insert into "
+                + getJdbcDiskCacheAttributes().getTableName()
+                + " (CACHE_KEY, REGION, ELEMENT, MAX_LIFE_SECONDS, IS_ETERNAL, CREATE_TIME, UPDATE_TIME_SECONDS, SYSTEM_EXPIRE_TIME_SECONDS) "
+                + " values (?, ?, ?, ?, ?, ?, ?, ?)";
+
+            PreparedStatement psInsert = con.prepareStatement( sqlI );
+            psInsert.setString( 1, (String) ce.getKey() );
+            psInsert.setString( 2, this.getCacheName() );
+            psInsert.setBytes( 3, element );
+            psInsert.setLong( 4, ce.getElementAttributes().getMaxLife() );
+            if ( ce.getElementAttributes().getIsEternal() )
+            {
+                psInsert.setString( 5, "T" );
+            }
+            else
+            {
+                psInsert.setString( 5, "F" );
+            }
+            Timestamp createTime = new Timestamp( ce.getElementAttributes().getCreateTime() );
+            psInsert.setTimestamp( 6, createTime );
+
+            long now = System.currentTimeMillis() / 1000;
+            psInsert.setLong( 7, now );
+
+            long expireTime = now + ce.getElementAttributes().getMaxLife();
+            psInsert.setLong( 8, expireTime );
+
+            psInsert.execute();
+            psInsert.close();
+        }
+        catch ( SQLException e )
+        {
+            if ("23000".equals(e.getSQLState()))
+            {
+                exists = true;
+            }
+            else
+            {
+                log.error( "Could not insert element", e );
+            }
+
+            // see if it exists, if we didn't already
+            if ( !exists && !this.getJdbcDiskCacheAttributes().isTestBeforeInsert() )
+            {
+                exists = doesElementExist( ce );
+            }
+        }
+        return exists;
+    }
+
+    /**
+     * This updates a row in the database.
+     * <p>
+     * @param ce
+     * @param con
+     * @param element
+     */
+    private void updateRow( ICacheElement<K, V> ce, Connection con, byte[] element )
+    {
+        String sqlU = null;
+        try
+        {
+            sqlU = "update " + getJdbcDiskCacheAttributes().getTableName()
+                + " set ELEMENT  = ?, CREATE_TIME = ?, UPDATE_TIME_SECONDS = ?, " + " SYSTEM_EXPIRE_TIME_SECONDS = ? "
+                + " where CACHE_KEY = ? and REGION = ?";
+            PreparedStatement psUpdate = con.prepareStatement( sqlU );
+            psUpdate.setBytes( 1, element );
+
+            Timestamp createTime = new Timestamp( ce.getElementAttributes().getCreateTime() );
+            psUpdate.setTimestamp( 2, createTime );
+
+            long now = System.currentTimeMillis() / 1000;
+            psUpdate.setLong( 3, now );
+
+            long expireTime = now + ce.getElementAttributes().getMaxLife();
+            psUpdate.setLong( 4, expireTime );
+
+            psUpdate.setString( 5, (String) ce.getKey() );
+            psUpdate.setString( 6, this.getCacheName() );
+            psUpdate.execute();
+            psUpdate.close();
+
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "ran update " + sqlU );
+            }
+        }
+        catch ( SQLException e2 )
+        {
+            log.error( "e2 sql [" + sqlU + "] Exception: ", e2 );
+        }
+    }
+
+    /**
+     * Does an element exist for this key?
+     * <p>
+     * @param ce
+     * @return boolean
+     */
+    protected boolean doesElementExist( ICacheElement<K, V> ce )
+    {
+        boolean exists = false;
+
+        Connection con;
+        try
+        {
+            con = getPoolAccess().getConnection();
+        }
+        catch ( SQLException e )
+        {
+            log.error( "Problem getting connection.", e );
+            return exists;
+        }
+
+        PreparedStatement psSelect = null;
+        try
+        {
+            // don't select the element, since we want this to be fast.
+            String sqlS = "select CACHE_KEY from " + getJdbcDiskCacheAttributes().getTableName()
+                + " where REGION = ? and CACHE_KEY = ?";
+
+            psSelect = con.prepareStatement( sqlS );
+            psSelect.setString( 1, this.getCacheName() );
+            psSelect.setString( 2, (String) ce.getKey() );
+
+            ResultSet rs = psSelect.executeQuery();
+
+            if ( rs.next() )
+            {
+                exists = true;
+            }
+
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "[" + ce.getKey() + "] existing status is " + exists );
+            }
+
+            rs.close();
+        }
+        catch ( SQLException e )
+        {
+            log.error( "Problem looking for item before insert.", e );
+        }
+        finally
+        {
+            try
+            {
+                if ( psSelect != null )
+                {
+                    psSelect.close();
+                }
+            }
+            catch ( SQLException e1 )
+            {
+                log.error( "Problem closing statement.", e1 );
+            }
+
+            try
+            {
+                con.close();
+            }
+            catch ( SQLException e )
+            {
+                log.error( "Problem closing connection.", e );
+            }
+        }
+
+        return exists;
+    }
+
+    /**
+     * Queries the database for the value. If it gets a result, the value is deserialized.
+     * <p>
+     * @param key
+     * @return ICacheElement
+     * @see org.apache.commons.jcs.auxiliary.disk.AbstractDiskCache#doGet(java.io.Serializable)
+     */
+    @Override
+    protected ICacheElement<K, V> processGet( K key )
+    {
+        incrementGetCount();
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Getting [" + key + "] from disk" );
+        }
+
+        if ( !alive )
+        {
+            return null;
+        }
+
+        ICacheElement<K, V> obj = null;
+
+        byte[] data = null;
+        try
+        {
+            // region, key
+            String selectString = "select ELEMENT from " + getJdbcDiskCacheAttributes().getTableName()
+                + " where REGION = ? and CACHE_KEY = ?";
+
+            Connection con = getPoolAccess().getConnection();
+            try
+            {
+                PreparedStatement psSelect = null;
+                try
+                {
+                    psSelect = con.prepareStatement( selectString );
+                    psSelect.setString( 1, this.getCacheName() );
+                    psSelect.setString( 2, key.toString() );
+
+                    ResultSet rs = psSelect.executeQuery();
+                    try
+                    {
+                        if ( rs.next() )
+                        {
+                            data = rs.getBytes( 1 );
+                        }
+                        if ( data != null )
+                        {
+                            try
+                            {
+                                // USE THE SERIALIZER
+                                obj = getElementSerializer().deSerialize( data, null );
+                            }
+                            catch ( IOException ioe )
+                            {
+                                log.error( "Problem getting item for key [" + key + "]", ioe );
+                            }
+                            catch ( Exception e )
+                            {
+                                log.error( "Problem getting item for key [" + key + "]", e );
+                            }
+                        }
+                    }
+                    finally
+                    {
+                        if ( rs != null )
+                        {
+                            rs.close();
+                        }
+                    }
+                }
+                finally
+                {
+                    if ( psSelect != null )
+                    {
+                        psSelect.close();
+                    }
+                }
+            }
+            finally
+            {
+                if ( con != null )
+                {
+                    con.close();
+                }
+            }
+        }
+        catch ( SQLException sqle )
+        {
+            log.error( "Caught a SQL exception trying to get the item for key [" + key + "]", sqle );
+        }
+
+        if ( log.isInfoEnabled() )
+        {
+            if ( getCount % LOG_INTERVAL == 0 )
+            {
+                // TODO make a log stats method
+                log.info( "Get Count [" + getCount + "]" );
+            }
+        }
+        return obj;
+    }
+
+    /**
+     * This will run a like query. It will try to construct a usable query but different
+     * implementations will be needed to adjust the syntax.
+     * <p>
+     * @param pattern
+     * @return key,value map
+     */
+    @Override
+    protected Map<K, ICacheElement<K, V>> processGetMatching( String pattern )
+    {
+        incrementGetMatchingCount();
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Getting [" + pattern + "] from disk" );
+        }
+
+        if ( !alive )
+        {
+            return null;
+        }
+
+        Map<K, ICacheElement<K, V>> results = new HashMap<K, ICacheElement<K, V>>();
+
+        try
+        {
+            // region, key
+            String selectString = "select CACHE_KEY, ELEMENT from " + getJdbcDiskCacheAttributes().getTableName()
+                + " where REGION = ? and CACHE_KEY like ?";
+
+            Connection con = getPoolAccess().getConnection();
+            try
+            {
+                PreparedStatement psSelect = null;
+                try
+                {
+                    psSelect = con.prepareStatement( selectString );
+                    psSelect.setString( 1, this.getCacheName() );
+                    psSelect.setString( 2, constructLikeParameterFromPattern( pattern ) );
+
+                    ResultSet rs = psSelect.executeQuery();
+                    try
+                    {
+                        while ( rs.next() )
+                        {
+                            String key = rs.getString( 1 );
+                            byte[] data = rs.getBytes( 2 );
+                            if ( data != null )
+                            {
+                                try
+                                {
+                                    // USE THE SERIALIZER
+                                    ICacheElement<K, V> value = getElementSerializer().deSerialize( data, null );
+                                    results.put( (K) key, value );
+                                }
+                                catch ( IOException ioe )
+                                {
+                                    log.error( "Problem getting items for pattern [" + pattern + "]", ioe );
+                                }
+                                catch ( Exception e )
+                                {
+                                    log.error( "Problem getting items for pattern [" + pattern + "]", e );
+                                }
+                            }
+                        }
+                    }
+                    finally
+                    {
+                        if ( rs != null )
+                        {
+                            rs.close();
+                        }
+                    }
+                }
+                finally
+                {
+                    if ( psSelect != null )
+                    {
+                        psSelect.close();
+                    }
+                }
+            }
+            finally
+            {
+                if ( con != null )
+                {
+                    con.close();
+                }
+            }
+        }
+        catch ( SQLException sqle )
+        {
+            log.error( "Caught a SQL exception trying to get items for pattern [" + pattern + "]", sqle );
+        }
+
+        if ( log.isInfoEnabled() )
+        {
+            if ( getMatchingCount % LOG_INTERVAL == 0 )
+            {
+                // TODO make a log stats method
+                log.info( "Get Matching Count [" + getMatchingCount + "]" );
+            }
+        }
+        return results;
+    }
+
+    /**
+     * @param pattern
+     * @return String to use in the like query.
+     */
+    public String constructLikeParameterFromPattern( String pattern )
+    {
+        String likePattern = pattern.replaceAll( "\\.\\+", "%" );
+        likePattern = likePattern.replaceAll( "\\.", "_" );
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "pattern = [" + likePattern + "]" );
+        }
+
+        return likePattern;
+    }
+
+    /**
+     * Returns true if the removal was successful; or false if there is nothing to remove. Current
+     * implementation always results in a disk orphan.
+     * <p>
+     * @param key
+     * @return boolean
+     */
+    @Override
+    protected boolean processRemove( K key )
+    {
+        // remove single item.
+        String sql = "delete from " + getJdbcDiskCacheAttributes().getTableName()
+            + " where REGION = ? and CACHE_KEY = ?";
+
+        try
+        {
+            boolean partial = false;
+            if ( key instanceof String && key.toString().endsWith( CacheConstants.NAME_COMPONENT_DELIMITER ) )
+            {
+                // remove all keys of the same name group.
+                sql = "delete from " + getJdbcDiskCacheAttributes().getTableName()
+                    + " where REGION = ? and CACHE_KEY like ?";
+                partial = true;
+            }
+            Connection con = getPoolAccess().getConnection();
+            PreparedStatement psSelect = null;
+            try
+            {
+                psSelect = con.prepareStatement( sql );
+                psSelect.setString( 1, this.getCacheName() );
+                if ( partial )
+                {
+                    psSelect.setString( 2, key.toString() + "%" );
+                }
+                else
+                {
+                    psSelect.setString( 2, key.toString() );
+                }
+
+                psSelect.executeUpdate();
+
+                alive = true;
+            }
+            catch ( SQLException e )
+            {
+                log.error( "Problem creating statement. sql [" + sql + "]", e );
+                alive = false;
+            }
+            finally
+            {
+                try
+                {
+                    if ( psSelect != null )
+                    {
+                        psSelect.close();
+                    }
+                    con.close();
+                }
+                catch ( SQLException e1 )
+                {
+                    log.error( "Problem closing statement.", e1 );
+                }
+            }
+        }
+        catch ( SQLException e )
+        {
+            log.error( "Problem updating cache.", e );
+            reset();
+        }
+        return false;
+    }
+
+    /**
+     * This should remove all elements. The auxiliary can be configured to forbid this behavior. If
+     * remove all is not allowed, the method balks.
+     */
+    @Override
+    protected void processRemoveAll()
+    {
+        // it should never get here from the abstract disk cache.
+        if ( this.jdbcDiskCacheAttributes.isAllowRemoveAll() )
+        {
+            try
+            {
+                String sql = "delete from " + getJdbcDiskCacheAttributes().getTableName() + " where REGION = ?";
+                Connection con = getPoolAccess().getConnection();
+                PreparedStatement psDelete = null;
+                try
+                {
+                    psDelete = con.prepareStatement( sql );
+                    psDelete.setString( 1, this.getCacheName() );
+                    alive = true;
+                    psDelete.executeUpdate();
+                }
+                catch ( SQLException e )
+                {
+                    log.error( "Problem creating statement.", e );
+                    alive = false;
+                }
+                finally
+                {
+                    try
+                    {
+                        if ( psDelete != null )
+                        {
+                            psDelete.close();
+                        }
+                        con.close();
+                    }
+                    catch ( SQLException e1 )
+                    {
+                        log.error( "Problem closing statement.", e1 );
+                    }
+                }
+            }
+            catch ( Exception e )
+            {
+                log.error( "Problem removing all.", e );
+                reset();
+            }
+        }
+        else
+        {
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "RemoveAll was requested but the request was not fulfilled: allowRemoveAll is set to false." );
+            }
+        }
+    }
+
+    /**
+     * Removed the expired. (now - create time) > max life seconds * 1000
+     * <p>
+     * @return the number deleted
+     */
+    protected int deleteExpired()
+    {
+        int deleted = 0;
+
+        try
+        {
+            getTableState().setState( TableState.DELETE_RUNNING );
+
+            long now = System.currentTimeMillis() / 1000;
+
+            // This is to slow when we push over a million records
+            // String sql = "delete from " +
+            // getJdbcDiskCacheAttributes().getTableName() + " where REGION = '"
+            // + this.getCacheName() + "' and IS_ETERNAL = 'F' and (" + now
+            // + " - UPDATE_TIME_SECONDS) > MAX_LIFE_SECONDS";
+
+            String sql = "delete from " + getJdbcDiskCacheAttributes().getTableName()
+                + " where IS_ETERNAL = ? and REGION = ? and ? > SYSTEM_EXPIRE_TIME_SECONDS";
+
+            Connection con = getPoolAccess().getConnection();
+            PreparedStatement psDelete = null;
+            try
+            {
+                psDelete = con.prepareStatement( sql );
+                psDelete.setString( 1, "F" );
+                psDelete.setString( 2, this.getCacheName() );
+                psDelete.setLong( 3, now );
+
+                alive = true;
+
+                deleted = psDelete.executeUpdate();
+            }
+            catch ( SQLException e )
+            {
+                log.error( "Problem creating statement.", e );
+                alive = false;
+            }
+            finally
+            {
+                try
+                {
+                    if ( psDelete != null )
+                    {
+                        psDelete.close();
+                    }
+                    con.close();
+                }
+                catch ( SQLException e1 )
+                {
+                    log.error( "Problem closing statement.", e1 );
+                }
+            }
+            logApplicationEvent( getAuxiliaryCacheAttributes().getName(), "deleteExpired",
+                                 "Deleted expired elements.  URL: " + getDiskLocation() );
+        }
+        catch ( Exception e )
+        {
+            logError( getAuxiliaryCacheAttributes().getName(), "deleteExpired", e.getMessage() + " URL: "
+                + getDiskLocation() );
+            log.error( "Problem removing expired elements from the table.", e );
+            reset();
+        }
+        finally
+        {
+            getTableState().setState( TableState.FREE );
+        }
+
+        return deleted;
+    }
+
+    /**
+     * Typically this is used to handle errors by last resort, force content update, or removeall
+     */
+    public void reset()
+    {
+        // nothing
+    }
+
+    /** Shuts down the pool */
+    @Override
+    public void processDispose()
+    {
+        ICacheEvent<K> cacheEvent = createICacheEvent( cacheName, (K)"none", ICacheEventLogger.DISPOSE_EVENT );
+        try
+        {
+            try
+            {
+                getPoolAccess().shutdownDriver();
+            }
+            catch ( Exception e )
+            {
+                log.error( "Problem shutting down.", e );
+            }
+        }
+        finally
+        {
+            logICacheEvent( cacheEvent );
+        }
+    }
+
+    /**
+     * Returns the current cache size. Just does a count(*) for the region.
+     * <p>
+     * @return The size value
+     */
+    @Override
+    public int getSize()
+    {
+        int size = 0;
+
+        // region, key
+        String selectString = "select count(*) from " + getJdbcDiskCacheAttributes().getTableName()
+            + " where REGION = ?";
+
+        final JDBCDiskCachePoolAccess pool = getPoolAccess();
+        if (pool == null) {
+            return size;
+        }
+        Connection con;
+        try
+        {
+            con = pool.getConnection();
+        }
+        catch ( SQLException e1 )
+        {
+            log.error( "Problem getting connection.", e1 );
+            return size;
+        }
+        try
+        {
+            PreparedStatement psSelect = null;
+            try
+            {
+                psSelect = con.prepareStatement( selectString );
+                psSelect.setString( 1, this.getCacheName() );
+                ResultSet rs = null;
+
+                rs = psSelect.executeQuery();
+                try
+                {
+                    if ( rs.next() )
+                    {
+                        size = rs.getInt( 1 );
+                    }
+                }
+                finally
+                {
+                    if ( rs != null )
+                    {
+                        rs.close();
+                    }
+                }
+            }
+            finally
+            {
+                if ( psSelect != null )
+                {
+                    psSelect.close();
+                }
+            }
+        }
+        catch ( SQLException e )
+        {
+            log.error( "Problem getting size.", e );
+        }
+        finally
+        {
+            try
+            {
+                con.close();
+            }
+            catch ( SQLException e )
+            {
+                log.error( "Problem closing connection.", e );
+            }
+        }
+        return size;
+    }
+
+    /**
+     * Return the keys in this cache.
+     * <p>
+     * @see org.apache.commons.jcs.auxiliary.disk.AbstractDiskCache#getKeySet()
+     */
+    @Override
+    public Set<K> getKeySet() throws IOException
+    {
+        throw new UnsupportedOperationException( "Groups not implemented." );
+        // return null;
+    }
+
+    /**
+     * @param elementSerializer The elementSerializer to set.
+     */
+    @Override
+    public void setElementSerializer( IElementSerializer elementSerializer )
+    {
+        this.elementSerializer = elementSerializer;
+    }
+
+    /**
+     * @return Returns the elementSerializer.
+     */
+    @Override
+    public IElementSerializer getElementSerializer()
+    {
+        return elementSerializer;
+    }
+
+    /** safely increment */
+    private synchronized void incrementUpdateCount()
+    {
+        updateCount++;
+    }
+
+    /** safely increment */
+    private synchronized void incrementGetCount()
+    {
+        getCount++;
+    }
+
+    /** safely increment */
+    private synchronized void incrementGetMatchingCount()
+    {
+        getMatchingCount++;
+    }
+
+    /**
+     * @param jdbcDiskCacheAttributes The jdbcDiskCacheAttributes to set.
+     */
+    protected void setJdbcDiskCacheAttributes( JDBCDiskCacheAttributes jdbcDiskCacheAttributes )
+    {
+        this.jdbcDiskCacheAttributes = jdbcDiskCacheAttributes;
+    }
+
+    /**
+     * @return Returns the jdbcDiskCacheAttributes.
+     */
+    protected JDBCDiskCacheAttributes getJdbcDiskCacheAttributes()
+    {
+        return jdbcDiskCacheAttributes;
+    }
+
+    /**
+     * @return Returns the AuxiliaryCacheAttributes.
+     */
+    @Override
+    public AuxiliaryCacheAttributes getAuxiliaryCacheAttributes()
+    {
+        return this.getJdbcDiskCacheAttributes();
+    }
+
+    /**
+     * Extends the parent stats.
+     * <p>
+     * @return IStats
+     */
+    @Override
+    public IStats getStatistics()
+    {
+        IStats stats = super.getStatistics();
+        stats.setTypeName( "JDBC/Abstract Disk Cache" );
+
+        List<IStatElement<?>> elems = stats.getStatElements();
+
+        elems.add(new StatElement<Integer>( "Update Count", Integer.valueOf(updateCount) ) );
+        elems.add(new StatElement<Integer>( "Get Count", Integer.valueOf(getCount) ) );
+        elems.add(new StatElement<Integer>( "Get Matching Count", Integer.valueOf(getMatchingCount) ) );
+
+        final JDBCDiskCachePoolAccess pool = getPoolAccess();
+
+        elems.add(new StatElement<Integer>( "Size",
+                Integer.valueOf(pool != null ? getSize() : -1) ) );
+        elems.add(new StatElement<Integer>( "Active DB Connections",
+                Integer.valueOf(pool != null ? pool.getNumActiveInPool() : -1) ) );
+        elems.add(new StatElement<Integer>( "Idle DB Connections",
+                Integer.valueOf(pool != null ? pool.getNumIdleInPool() : -1) ) );
+        elems.add(new StatElement<String>( "DB URL",
+                pool != null ? pool.getPoolUrl() : getJdbcDiskCacheAttributes().getUrl()) );
+
+        stats.setStatElements( elems );
+
+        return stats;
+    }
+
+    /**
+     * Returns the name of the table.
+     * <p>
+     * @return the table name or UNDEFINED
+     */
+    protected String getTableName()
+    {
+        String name = "UNDEFINED";
+        if ( this.getJdbcDiskCacheAttributes() != null )
+        {
+            name = this.getJdbcDiskCacheAttributes().getTableName();
+        }
+        return name;
+    }
+
+    /**
+     * @param tableState The tableState to set.
+     */
+    public void setTableState( TableState tableState )
+    {
+        this.tableState = tableState;
+    }
+
+    /**
+     * @return Returns the tableState.
+     */
+    public TableState getTableState()
+    {
+        return tableState;
+    }
+
+    /**
+     * This is used by the event logging.
+     * <p>
+     * @return the location of the disk, either path or ip.
+     */
+    @Override
+    protected String getDiskLocation()
+    {
+        return this.jdbcDiskCacheAttributes.getUrl();
+    }
+
+    /**
+     * Public so managers can access it.
+     * @return the poolAccess
+     */
+    public JDBCDiskCachePoolAccess getPoolAccess()
+    {
+        return poolAccess;
+    }
+
+    /**
+     * For debugging.
+     * <p>
+     * @return this.getStats();
+     */
+    @Override
+    public String toString()
+    {
+        return this.getStats();
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCacheAttributes.java b/src/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCacheAttributes.java
new file mode 100644
index 0000000..a00622e
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCacheAttributes.java
@@ -0,0 +1,290 @@
+package org.apache.commons.jcs.auxiliary.disk.jdbc;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.disk.AbstractDiskCacheAttributes;
+
+/**
+ * The configurator will set these values based on what is in the cache.ccf file.
+ * <p>
+ * @author Aaron Smuts
+ */
+public class JDBCDiskCacheAttributes
+    extends AbstractDiskCacheAttributes
+{
+    /** Don't change */
+    private static final long serialVersionUID = -6535808344813320062L;
+
+    /** default */
+    private static final String DEFAULT_TABLE_NAME = "JCS_STORE";
+
+    /** DB username */
+    private String userName;
+
+    /** DB password */
+    private String password;
+
+    /** URL for the db */
+    private String url;
+
+    /** The name of the database. */
+    private String database = "";
+
+    /** The driver */
+    private String driverClassName;
+
+    /** The table name */
+    private String tableName = DEFAULT_TABLE_NAME;
+
+    /** If false we will insert and if it fails we will update. */
+    private boolean testBeforeInsert = true;
+
+    /** This is the default limit on the maximum number of active connections. */
+    public static final int DEFAULT_MAX_ACTIVE = 10;
+
+    /** Max connections allowed */
+    private int maxActive = DEFAULT_MAX_ACTIVE;
+
+    /** This is the default setting for the cleanup routine. */
+    public static final int DEFAULT_SHRINKER_INTERVAL_SECONDS = 300;
+
+    /** How often should we remove expired. */
+    private int shrinkerIntervalSeconds = DEFAULT_SHRINKER_INTERVAL_SECONDS;
+
+    /** Should we remove expired in the background. */
+    private boolean UseDiskShrinker = true;
+
+    /**
+     * If a pool name is supplied, the manager will attempt to load it. It should be configured in a
+     * separate section as follows. Assuming the name is "MyPool":
+     *
+     * <pre>
+     * jcs.jdbcconnectionpool.MyPool.attributes.userName=MyUserName
+     * jcs.jdbcconnectionpool.MyPool.attributes.password=MyPassword
+     * jcs.jdbcconnectionpool.MyPool.attributes.url=MyUrl
+     * jcs.jdbcconnectionpool.MyPool.attributes.maxActive=MyMaxActive
+     * jcs.jdbcconnectionpool.MyPool.attributes.driverClassName=MyDriverClassName
+     * </pre>
+     */
+    private String connectionPoolName;
+
+    /**
+     * @param userName The userName to set.
+     */
+    public void setUserName( String userName )
+    {
+        this.userName = userName;
+    }
+
+    /**
+     * @return Returns the userName.
+     */
+    public String getUserName()
+    {
+        return userName;
+    }
+
+    /**
+     * @param password The password to set.
+     */
+    public void setPassword( String password )
+    {
+        this.password = password;
+    }
+
+    /**
+     * @return Returns the password.
+     */
+    public String getPassword()
+    {
+        return password;
+    }
+
+    /**
+     * @param url The url to set.
+     */
+    public void setUrl( String url )
+    {
+        this.url = url;
+    }
+
+    /**
+     * @return Returns the url.
+     */
+    public String getUrl()
+    {
+        return url;
+    }
+
+    /**
+     * This is appended to the url.
+     * @param database The database to set.
+     */
+    public void setDatabase( String database )
+    {
+        this.database = database;
+    }
+
+    /**
+     * @return Returns the database.
+     */
+    public String getDatabase()
+    {
+        return database;
+    }
+
+    /**
+     * @param driverClassName The driverClassName to set.
+     */
+    public void setDriverClassName( String driverClassName )
+    {
+        this.driverClassName = driverClassName;
+    }
+
+    /**
+     * @return Returns the driverClassName.
+     */
+    public String getDriverClassName()
+    {
+        return driverClassName;
+    }
+
+    /**
+     * @param tableName The tableName to set.
+     */
+    public void setTableName( String tableName )
+    {
+        this.tableName = tableName;
+    }
+
+    /**
+     * @return Returns the tableName.
+     */
+    public String getTableName()
+    {
+        return tableName;
+    }
+
+    /**
+     * If this is true then the disk cache will check to see if the item already exists in the
+     * database. If it is false, it will try to insert. If the insert fails it will try to update.
+     * <p>
+     * @param testBeforeInsert The testBeforeInsert to set.
+     */
+    public void setTestBeforeInsert( boolean testBeforeInsert )
+    {
+        this.testBeforeInsert = testBeforeInsert;
+    }
+
+    /**
+     * @return Returns the testBeforeInsert.
+     */
+    public boolean isTestBeforeInsert()
+    {
+        return testBeforeInsert;
+    }
+
+    /**
+     * @param maxActive The maxActive to set.
+     */
+    public void setMaxActive( int maxActive )
+    {
+        this.maxActive = maxActive;
+    }
+
+    /**
+     * @return Returns the maxActive.
+     */
+    public int getMaxActive()
+    {
+        return maxActive;
+    }
+
+    /**
+     * @param shrinkerIntervalSecondsArg The shrinkerIntervalSeconds to set.
+     */
+    public void setShrinkerIntervalSeconds( int shrinkerIntervalSecondsArg )
+    {
+        this.shrinkerIntervalSeconds = shrinkerIntervalSecondsArg;
+    }
+
+    /**
+     * @return Returns the shrinkerIntervalSeconds.
+     */
+    public int getShrinkerIntervalSeconds()
+    {
+        return shrinkerIntervalSeconds;
+    }
+
+    /**
+     * @param useDiskShrinker The useDiskShrinker to set.
+     */
+    public void setUseDiskShrinker( boolean useDiskShrinker )
+    {
+        UseDiskShrinker = useDiskShrinker;
+    }
+
+    /**
+     * @return Returns the useDiskShrinker.
+     */
+    public boolean isUseDiskShrinker()
+    {
+        return UseDiskShrinker;
+    }
+
+    /**
+     * @param connectionPoolName the connectionPoolName to set
+     */
+    public void setConnectionPoolName( String connectionPoolName )
+    {
+        this.connectionPoolName = connectionPoolName;
+    }
+
+    /**
+     * @return the connectionPoolName
+     */
+    public String getConnectionPoolName()
+    {
+        return connectionPoolName;
+    }
+
+    /**
+     * For debugging.
+     * <p>
+     * @return debug string with most of the properties.
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder buf = new StringBuilder();
+        buf.append( "\nJDBCCacheAttributes" );
+        buf.append( "\n UserName [" + getUserName() + "]" );
+        buf.append( "\n Url [" + getUrl() + "]" );
+        buf.append( "\n Database [" + getDatabase() + "]" );
+        buf.append( "\n DriverClassName [" + getDriverClassName() + "]" );
+        buf.append( "\n TableName [" + getTableName() + "]" );
+        buf.append( "\n TestBeforeInsert [" + isTestBeforeInsert() + "]" );
+        buf.append( "\n MaxActive [" + getMaxActive() + "]" );
+        buf.append( "\n AllowRemoveAll [" + isAllowRemoveAll() + "]" );
+        buf.append( "\n ShrinkerIntervalSeconds [" + getShrinkerIntervalSeconds() + "]" );
+        buf.append( "\n UseDiskShrinker [" + isUseDiskShrinker() + "]" );
+        return buf.toString();
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCacheFactory.java b/src/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCacheFactory.java
new file mode 100644
index 0000000..70cd813
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCacheFactory.java
@@ -0,0 +1,182 @@
+package org.apache.commons.jcs.auxiliary.disk.jdbc;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.commons.jcs.auxiliary.AbstractAuxiliaryCacheFactory;
+import org.apache.commons.jcs.auxiliary.AuxiliaryCacheAttributes;
+import org.apache.commons.jcs.engine.behavior.ICompositeCacheManager;
+import org.apache.commons.jcs.engine.behavior.IElementSerializer;
+import org.apache.commons.jcs.engine.logging.behavior.ICacheEventLogger;
+import org.apache.commons.jcs.utils.threadpool.DaemonThreadFactory;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * This factory should create mysql disk caches.
+ * <p>
+ * @author Aaron Smuts
+ */
+public class JDBCDiskCacheFactory
+    extends AbstractAuxiliaryCacheFactory
+{
+    /** The logger */
+    private static final Log log = LogFactory.getLog( JDBCDiskCacheFactory.class );
+
+    /**
+     * A map of TableState objects to table names. Each cache has a table state object, which is
+     * used to determine if any long processes such as deletes or optimizations are running.
+     */
+    private Map<String, TableState> tableStates;
+
+    /** The background scheduler, one for all regions. */
+    protected ScheduledExecutorService scheduler; // TODO this is not accessed in a threadsafe way. Perhaps use IODH idiom?
+
+    /**
+     * A map of table name to shrinker threads. This allows each table to have a different setting.
+     * It assumes that there is only one jdbc disk cache auxiliary defined per table.
+     */
+    private Map<String, ShrinkerThread> shrinkerThreadMap;
+
+    /**
+     * This factory method should create an instance of the jdbc cache.
+     * <p>
+     * @param rawAttr
+     * @param compositeCacheManager
+     * @param cacheEventLogger
+     * @param elementSerializer
+     * @return JDBCDiskCache
+     * @throws SQLException if the cache instance could not be created
+     */
+    @Override
+    public <K, V> JDBCDiskCache<K, V> createCache( AuxiliaryCacheAttributes rawAttr,
+            ICompositeCacheManager compositeCacheManager,
+            ICacheEventLogger cacheEventLogger, IElementSerializer elementSerializer )
+            throws SQLException
+    {
+        JDBCDiskCacheAttributes cattr = (JDBCDiskCacheAttributes) rawAttr;
+        TableState tableState = getTableState( cattr.getTableName() );
+
+        JDBCDiskCache<K, V> cache = new JDBCDiskCache<K, V>( cattr, tableState, compositeCacheManager );
+        cache.setCacheEventLogger( cacheEventLogger );
+        cache.setElementSerializer( elementSerializer );
+
+        // create a shrinker if we need it.
+        createShrinkerWhenNeeded( cattr, cache );
+
+        return cache;
+    }
+
+    /**
+     * Initialize this factory
+     */
+    @Override
+    public void initialize()
+    {
+        super.initialize();
+        this.tableStates = new HashMap<String, TableState>();
+        this.shrinkerThreadMap = new HashMap<String, ShrinkerThread>();
+    }
+
+    /**
+     * Dispose of this factory, clean up shared resources
+     */
+    @Override
+    public void dispose()
+    {
+        if (this.scheduler != null)
+        {
+            this.scheduler.shutdownNow();
+            this.scheduler = null;
+        }
+        super.dispose();
+    }
+
+    /**
+     * Get a table state for a given table name
+     *
+     * @param tableName
+     * @return a cached instance of the table state
+     */
+    protected TableState getTableState(String tableName)
+    {
+        TableState tableState = tableStates.get( tableName );
+
+        if ( tableState == null )
+        {
+            tableState = new TableState( tableName );
+            tableStates.put(tableName, tableState);
+        }
+
+        return tableState;
+    }
+
+    /**
+     * Get the scheduler service (lazily loaded)
+     *
+     * @return the scheduler
+     */
+    protected ScheduledExecutorService getScheduledExecutorService()
+    {
+        if ( scheduler == null )
+        {
+            scheduler = Executors.newScheduledThreadPool(2,
+                    new DaemonThreadFactory("JCS-JDBCDiskCacheManager-", Thread.MIN_PRIORITY));
+        }
+
+        return scheduler;
+    }
+
+    /**
+     * If UseDiskShrinker is true then we will create a shrinker daemon if necessary.
+     * <p>
+     * @param cattr
+     * @param raf
+     */
+    protected void createShrinkerWhenNeeded( JDBCDiskCacheAttributes cattr, JDBCDiskCache<?, ?> raf )
+    {
+        // add cache to shrinker.
+        if ( cattr.isUseDiskShrinker() )
+        {
+            ScheduledExecutorService shrinkerService = getScheduledExecutorService();
+            ShrinkerThread shrinkerThread = shrinkerThreadMap.get( cattr.getTableName() );
+            if ( shrinkerThread == null )
+            {
+                shrinkerThread = new ShrinkerThread();
+                shrinkerThreadMap.put( cattr.getTableName(), shrinkerThread );
+
+                long intervalMillis = Math.max( 999, cattr.getShrinkerIntervalSeconds() * 1000 );
+                if ( log.isInfoEnabled() )
+                {
+                    log.info( "Setting the shrinker to run every [" + intervalMillis + "] ms. for table ["
+                        + cattr.getTableName() + "]" );
+                }
+                shrinkerService.scheduleAtFixedRate(shrinkerThread, 0, intervalMillis, TimeUnit.MILLISECONDS);
+            }
+            shrinkerThread.addDiskCacheToShrinkList( raf );
+        }
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCachePoolAccess.java b/src/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCachePoolAccess.java
new file mode 100644
index 0000000..52d1b5b
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCachePoolAccess.java
@@ -0,0 +1,271 @@
+package org.apache.commons.jcs.auxiliary.disk.jdbc;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.dbcp.ConnectionFactory;
+import org.apache.commons.dbcp.DriverManagerConnectionFactory;
+import org.apache.commons.dbcp.PoolableConnectionFactory;
+import org.apache.commons.dbcp.PoolingDriver;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.commons.pool.ObjectPool;
+import org.apache.commons.pool.impl.GenericObjectPool;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+
+/**
+ * This class provides access to the connection pool. It ensures that the various resources that
+ * need to access the tables will be able to use the same pool.
+ * <p>
+ * @author Aaron Smuts
+ */
+public class JDBCDiskCachePoolAccess
+{
+    /** The logger. */
+    private static final Log log = LogFactory.getLog( JDBCDiskCachePoolAccess.class );
+
+    /** The default Pool Name to which the connection pool will be keyed. */
+    public static final String DEFAULT_POOL_NAME = "jcs";
+
+    /** The name of the pool. */
+    private String poolName = DEFAULT_POOL_NAME;
+
+    /** default jdbc driver. */
+    private static final String DRIVER_NAME = "jdbc:apache:commons:dbcp:";
+
+    /**
+     * Configures the pool name to use for the pool access.
+     * <p>
+     * This pool name should be unique to the database. It is used as part of the URL each time we
+     * lookup a connection from the driver manager.
+     * <p>
+     * @param poolName
+     */
+    public JDBCDiskCachePoolAccess( String poolName )
+    {
+        // we can default to jcs if there is only one database in use.
+        if ( poolName != null )
+        {
+            setPoolName( poolName );
+        }
+        else
+        {
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "The pool name supplied was null. Using default instead." );
+            }
+        }
+    }
+
+    /**
+     * Gets a connection from the pool.
+     * <p>
+     * @return Connection
+     * @throws SQLException
+     */
+    public Connection getConnection()
+        throws SQLException
+    {
+        Connection con;
+        try
+        {
+            con = DriverManager.getConnection( getPoolUrl() );
+        }
+        catch ( SQLException e )
+        {
+            log.error( "Problem getting connection.", e );
+            throw e;
+        }
+
+        return con;
+    }
+
+    /**
+     * How many are idle in the pool.
+     * <p>
+     * @return number idle
+     */
+    public int getNumIdleInPool()
+    {
+        int numIdle = 0;
+        try
+        {
+            PoolingDriver driver = (PoolingDriver) DriverManager.getDriver( DRIVER_NAME );
+            ObjectPool connectionPool = driver.getConnectionPool( this.getPoolName() );
+
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( connectionPool );
+            }
+            numIdle = connectionPool.getNumIdle();
+        }
+        catch ( SQLException e )
+        {
+            log.error( e );
+        }
+        return numIdle;
+    }
+
+    /**
+     * How many are active in the pool.
+     * <p>
+     * @return number active
+     */
+    public int getNumActiveInPool()
+    {
+        int numActive = 0;
+        try
+        {
+            PoolingDriver driver = (PoolingDriver) DriverManager.getDriver( DRIVER_NAME );
+            ObjectPool connectionPool = driver.getConnectionPool( this.getPoolName() );
+
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( connectionPool );
+            }
+            numActive = connectionPool.getNumActive();
+        }
+        catch ( SQLException e )
+        {
+            log.error( e );
+        }
+        return numActive;
+    }
+
+    /**
+     * @throws Exception
+     */
+    public void shutdownDriver()
+        throws SQLException
+    {
+        PoolingDriver driver = (PoolingDriver) DriverManager.getDriver( DRIVER_NAME );
+        driver.closePool( this.getPoolName() );
+    }
+
+    /**
+     * @return Returns the poolUrl.
+     */
+    public String getPoolUrl()
+    {
+        return DRIVER_NAME + this.getPoolName();
+    }
+
+    /**
+     * @param poolName The poolName to set.
+     */
+    public void setPoolName( String poolName ) // TODO does it make sense to change the pool name after construction?
+    {
+        this.poolName = poolName;
+    }
+
+    /**
+     * @return Returns the poolName.
+     */
+    public String getPoolName()
+    {
+        return poolName;
+    }
+
+    /**
+     * @param connectURI
+     * @param userName
+     * @param password
+     * @param maxActive max connections
+     * @throws SQLException if a database access error occurs
+     */
+    public void setupDriver( String connectURI, String userName, String password, int maxActive )
+        throws SQLException
+    {
+        // First, we'll need a ObjectPool that serves as the
+        // actual pool of connections.
+        // We'll use a GenericObjectPool instance, although
+        // any ObjectPool implementation will suffice.
+        ObjectPool connectionPool = new GenericObjectPool( null, maxActive );
+
+        // TODO make configurable
+        // By default the size is 8!!!!!!!
+        ( (GenericObjectPool) connectionPool ).setMaxIdle( -1 );
+
+        // Next, we'll create a ConnectionFactory that the
+        // pool will use to create Connections.
+        // We'll use the DriverManagerConnectionFactory,
+        // using the connect string passed in the command line
+        // arguments.
+        // Properties props = new Properties();
+        // props.setProperty( "user", userName );
+        // props.setProperty( "password", password );
+        ConnectionFactory connectionFactory = new DriverManagerConnectionFactory( connectURI, userName, password );
+
+        // Now we'll create the PoolableConnectionFactory, which wraps
+        // the "real" Connections created by the ConnectionFactory with
+        // the classes that implement the pooling functionality.
+        // PoolableConnectionFactory poolableConnectionFactory =
+        new PoolableConnectionFactory( connectionFactory, connectionPool, null, null, false, true );
+
+        // Finally, we create the PoolingDriver itself...
+        try
+        {
+            // com.mysql.jdbc.Driver
+            Class.forName( "org.apache.commons.dbcp.PoolingDriver" );
+        }
+        catch ( ClassNotFoundException e )
+        {
+            throw new SQLException("Couldn't find class for driver [org.apache.commons.dbcp.PoolingDriver]", e );
+        }
+        PoolingDriver driver = (PoolingDriver) DriverManager.getDriver( DRIVER_NAME );
+
+        // ...and register our pool with it.
+        driver.registerPool( this.getPoolName(), connectionPool );
+
+        // Now we can just use the connect string
+        // "jdbc:apache:commons:dbcp:jcs"
+        // to access our pool of Connections.
+    }
+
+    /**
+     * @throws Exception
+     */
+    public void logDriverStats()
+        throws SQLException
+    {
+        PoolingDriver driver = (PoolingDriver) DriverManager.getDriver( DRIVER_NAME );
+        ObjectPool connectionPool = driver.getConnectionPool( this.getPoolName() );
+
+        if ( connectionPool != null )
+        {
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( connectionPool );
+            }
+
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "NumActive: " + getNumActiveInPool() );
+                log.info( "NumIdle: " + getNumIdleInPool() );
+            }
+        }
+        else
+        {
+            log.warn( "Could not find pool." );
+        }
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCachePoolAccessAttributes.java b/src/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCachePoolAccessAttributes.java
new file mode 100644
index 0000000..251bd21
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCachePoolAccessAttributes.java
@@ -0,0 +1,179 @@
+package org.apache.commons.jcs.auxiliary.disk.jdbc;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/** These are used to configure the JDBCDiskCachePoolAccess class. */
+public class JDBCDiskCachePoolAccessAttributes
+{
+    /** The name of the pool.  */
+    private String poolName;
+
+    /** URI to the db. */
+    private String url;
+
+    /** username for the db */
+    private String userName;
+
+    /** password for the database */
+    private String password;
+
+    /** This is the default limit on the maximum number of active connections. */
+    public static final int DEFAULT_MAX_ACTIVE = 10;
+
+    /** Max connections allowed */
+    private int maxActive = DEFAULT_MAX_ACTIVE;
+
+    /** The name of the database. */
+    private String database = "";
+
+    /** The driver */
+    private String driverClassName;
+
+    /**
+     * @param poolName the poolName to set
+     */
+    public void setPoolName( String poolName )
+    {
+        this.poolName = poolName;
+    }
+
+    /**
+     * @return the poolName
+     */
+    public String getPoolName()
+    {
+        return poolName;
+    }
+
+    /**
+     * @param connectURI the connectURI to set
+     */
+    public void setUrl( String connectURI )
+    {
+        this.url = connectURI;
+    }
+
+    /**
+     * @return the connectURI
+     */
+    public String getUrl()
+    {
+        return url;
+    }
+
+    /**
+     * @param userName the userName to set
+     */
+    public void setUserName( String userName )
+    {
+        this.userName = userName;
+    }
+
+    /**
+     * @return the userName
+     */
+    public String getUserName()
+    {
+        return userName;
+    }
+
+    /**
+     * @param password the password to set
+     */
+    public void setPassword( String password )
+    {
+        this.password = password;
+    }
+
+    /**
+     * @return the password
+     */
+    public String getPassword()
+    {
+        return password;
+    }
+
+    /**
+     * @param maxActive the maxActive to set
+     */
+    public void setMaxActive( int maxActive )
+    {
+        this.maxActive = maxActive;
+    }
+
+    /**
+     * @return the maxActive
+     */
+    public int getMaxActive()
+    {
+        return maxActive;
+    }
+
+    /**
+     * @param database the database to set
+     */
+    public void setDatabase( String database )
+    {
+        this.database = database;
+    }
+
+    /**
+     * @return the database
+     */
+    public String getDatabase()
+    {
+        return database;
+    }
+
+    /**
+     * @param driverClassName the driverClassName to set
+     */
+    public void setDriverClassName( String driverClassName )
+    {
+        this.driverClassName = driverClassName;
+    }
+
+    /**
+     * @return the driverClassName
+     */
+    public String getDriverClassName()
+    {
+        return driverClassName;
+    }
+
+    /**
+     * For debugging.
+     * <p>
+     * @return debug string with most of the properties.
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder buf = new StringBuilder();
+        buf.append( "\nJDBCDiskCachePoolAccessAttributes" );
+        buf.append( "\n UserName [" + getUserName() + "]" );
+        buf.append( "\n Url [" + getUrl() + "]" );
+        buf.append( "\n PoolName [" + getPoolName() + "]" );
+        buf.append( "\n Database [" + getDatabase() + "]" );
+        buf.append( "\n DriverClassName [" + getDriverClassName() + "]" );
+        buf.append( "\n MaxActive [" + getMaxActive() + "]" );
+        return buf.toString();
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCachePoolAccessManager.java b/src/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCachePoolAccessManager.java
new file mode 100644
index 0000000..f010cc3
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/disk/jdbc/JDBCDiskCachePoolAccessManager.java
@@ -0,0 +1,211 @@
+package org.apache.commons.jcs.auxiliary.disk.jdbc;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.sql.SQLException;
+import org.apache.commons.jcs.utils.config.PropertySetter;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+/**
+ * Manages JDBCDiskCachePoolAccess instances. If a connectionPoolName value is supplied, the JDBC
+ * disk cache will try to use this manager to create a pool. Assuming the name is "MyPool":
+ *
+ * <pre>
+ * jcs.jdbcconnectionpool.MyPool.attributes.userName=MyUserName
+ * jcs.jdbcconnectionpool.MyPool.attributes.password=MyPassword
+ * jcs.jdbcconnectionpool.MyPool.attributes.url=MyUrl
+ * jcs.jdbcconnectionpool.MyPool.attributes.maxActive=MyMaxActive
+ * jcs.jdbcconnectionpool.MyPool.attributes.driverClassName=MyDriverClassName
+ * </pre>
+ */
+public class JDBCDiskCachePoolAccessManager
+{
+    /** Singleton instance */
+    private static JDBCDiskCachePoolAccessManager instance;
+
+    /** Pool name to JDBCDiskCachePoolAccess */
+    private final Map<String, JDBCDiskCachePoolAccess> pools = new HashMap<String, JDBCDiskCachePoolAccess>();
+
+    /** props prefix */
+    public static final String POOL_CONFIGURATION_PREFIX = "jcs.jdbcconnectionpool.";
+
+    /** .attributes */
+    public static final String ATTRIBUTE_PREFIX = ".attributes";
+
+    /** The logger. */
+    private static final Log log = LogFactory.getLog( JDBCDiskCachePoolAccessManager.class );
+
+    /**
+     * Singleton, private
+     */
+    private JDBCDiskCachePoolAccessManager()
+    {
+        // empty
+    }
+
+    /**
+     * returns a singleton instance
+     * <p>
+     * @return JDBCDiskCachePoolAccessManager
+     */
+    public static synchronized JDBCDiskCachePoolAccessManager getInstance()
+    {
+        if ( instance == null )
+        {
+            instance = new JDBCDiskCachePoolAccessManager();
+        }
+        return instance;
+    }
+
+    /**
+     * Returns a pool for the name if one has been created. Otherwise it creates a pool.
+     * <p>
+     * @param poolName the name of the pool
+     * @param props the configuration properties for the pool
+     * @return JDBCDiskCachePoolAccess
+     * @throws SQLException if a database access error occurs
+     */
+    public synchronized JDBCDiskCachePoolAccess getJDBCDiskCachePoolAccess( String poolName, Properties props )
+        throws SQLException
+    {
+        JDBCDiskCachePoolAccess poolAccess = pools.get( poolName );
+
+        if ( poolAccess == null )
+        {
+            JDBCDiskCachePoolAccessAttributes poolAttributes = configurePoolAccessAttributes( poolName, props );
+            poolAccess = JDBCDiskCachePoolAccessManager.createPoolAccess( poolAttributes );
+
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "Created shared pooled access for pool name [" + poolName + "]." );
+            }
+            pools.put( poolName, poolAccess );
+        }
+
+        return poolAccess;
+    }
+
+
+
+    /**
+     * Configures the attributes using the properties.
+     * <p>
+     * @param poolName the name of the pool
+     * @param props the configuration properties for the pool
+     * @return JDBCDiskCachePoolAccessAttributes
+     */
+    protected JDBCDiskCachePoolAccessAttributes configurePoolAccessAttributes( String poolName, Properties props )
+    {
+        JDBCDiskCachePoolAccessAttributes poolAttributes = new JDBCDiskCachePoolAccessAttributes();
+
+        String poolAccessAttributePrefix = POOL_CONFIGURATION_PREFIX + poolName + ATTRIBUTE_PREFIX;
+        PropertySetter.setProperties( poolAttributes, props, poolAccessAttributePrefix + "." );
+
+        poolAttributes.setPoolName( poolName );
+
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "Configured attributes " + poolAttributes );
+        }
+        return poolAttributes;
+    }
+
+    /**
+     * Creates a pool access object and registers the driver.
+     * <p>
+     * @param driverClassName
+     * @param poolName
+     * @param fullURL = (url + database)
+     * @param userName
+     * @param password
+     * @param maxActive
+     * @return JDBCDiskCachePoolAccess
+     * @throws SQLException if a database access error occurs
+     */
+    public static JDBCDiskCachePoolAccess createPoolAccess( String driverClassName, String poolName, String fullURL,
+                                                            String userName, String password, int maxActive )
+       throws SQLException
+    {
+        JDBCDiskCachePoolAccess poolAccess = null;
+
+        if (driverClassName == null)
+        {
+            throw new SQLException("Driver class name is null");
+        }
+
+        try
+        {
+            // com.mysql.jdbc.Driver
+            Class.forName( driverClassName );
+        }
+        catch ( ClassNotFoundException e )
+        {
+            throw new SQLException("Couldn't find class for driver [" + driverClassName + "]", e );
+        }
+
+        poolAccess = new JDBCDiskCachePoolAccess( poolName );
+        poolAccess.setupDriver( fullURL, userName, password, maxActive );
+        poolAccess.logDriverStats();
+
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "Created: " + poolAccess );
+        }
+
+        return poolAccess;
+    }
+
+    /**
+     * Creates a JDBCDiskCachePoolAccess object from the JDBCDiskCacheAttributes. Use this when not
+     * using the connection pool manager.
+     * <p>
+     * @param cattr
+     * @return JDBCDiskCachePoolAccess
+     * @throws SQLException if a database access error occurs
+     */
+    public static JDBCDiskCachePoolAccess createPoolAccess( JDBCDiskCacheAttributes cattr )
+        throws SQLException
+    {
+        return JDBCDiskCachePoolAccessManager.createPoolAccess( cattr.getDriverClassName(), cattr.getName(), cattr.getUrl() + cattr.getDatabase(),
+                                 cattr.getUserName(), cattr.getPassword(), cattr.getMaxActive() );
+    }
+
+    /**
+     * Creates a JDBCDiskCachePoolAccess object from the JDBCDiskCachePoolAccessAttributes. This is
+     * used by the connection pool manager.
+     * <p>
+     * @param poolAttributes
+     * @return JDBCDiskCachePoolAccess
+     * @throws SQLException if a database access error occurs
+     */
+    public static JDBCDiskCachePoolAccess createPoolAccess( JDBCDiskCachePoolAccessAttributes poolAttributes )
+        throws SQLException
+    {
+        return JDBCDiskCachePoolAccessManager.createPoolAccess( poolAttributes.getDriverClassName(), poolAttributes.getPoolName(), poolAttributes
+            .getUrl()
+            + poolAttributes.getDatabase(), poolAttributes.getUserName(), poolAttributes.getPassword(), poolAttributes
+            .getMaxActive() );
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/disk/jdbc/ShrinkerThread.java b/src/org/apache/commons/jcs/auxiliary/disk/jdbc/ShrinkerThread.java
new file mode 100644
index 0000000..adcdb0e
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/disk/jdbc/ShrinkerThread.java
@@ -0,0 +1,169 @@
+package org.apache.commons.jcs.auxiliary.disk.jdbc;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * Calls delete expired on the disk caches. The shrinker is run by a clock daemon. The shrinker
+ * calls delete on each region. It pauses between calls.
+ * <p>
+ * @author Aaron Smuts
+ */
+public class ShrinkerThread
+    implements Runnable
+{
+    /** The logger. */
+    private static final Log log = LogFactory.getLog( ShrinkerThread.class );
+
+    /** A set of JDBCDiskCache objects to call deleteExpired on. */
+    private final Set<JDBCDiskCache<?, ?>> shrinkSet =
+        Collections.synchronizedSet( new HashSet<JDBCDiskCache<?, ?>>() );
+
+    /** Default time period to use. */
+    private static final long DEFAULT_PAUSE_BETWEEN_REGION_CALLS_MILLIS = 5000;
+
+    /**
+     * How long should we wait between calls to deleteExpired when we are iterating through the list
+     * of regions. Delete can lock the table. We want to give clients a chance to get some work
+     * done.
+     */
+    private long pauseBetweenRegionCallsMillis = DEFAULT_PAUSE_BETWEEN_REGION_CALLS_MILLIS;
+
+    /**
+     * Does nothing special.
+     */
+    protected ShrinkerThread()
+    {
+        super();
+    }
+
+    /**
+     * Adds a JDBC disk cache to the set of disk cache to shrink.
+     * <p>
+     * @param diskCache
+     */
+    public void addDiskCacheToShrinkList( JDBCDiskCache<?, ?> diskCache )
+    {
+        // the set will prevent dupes.
+        // we could also just add these to a hashmap by region name
+        // but that might cause a problem if you wanted to use two different
+        // jbdc disk caches for the same region.
+        shrinkSet.add( diskCache );
+    }
+
+    /**
+     * Calls deleteExpired on each item in the set. It pauses between each call.
+     */
+    @Override
+    public void run()
+    {
+        try
+        {
+            deleteExpiredFromAllRegisteredRegions();
+        }
+        catch ( Throwable e )
+        {
+            log.error( "Caught an expcetion while trying to delete expired items.", e );
+        }
+    }
+
+    /**
+     * Deletes the expired items from all the registered regions.
+     */
+    private void deleteExpiredFromAllRegisteredRegions()
+    {
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "Running JDBC disk cache shrinker.  Number of regions [" + shrinkSet.size() + "]" );
+        }
+
+        Object[] caches = null;
+
+        synchronized ( shrinkSet )
+        {
+            caches = this.shrinkSet.toArray();
+        }
+
+        if ( caches != null )
+        {
+            for ( int i = 0; i < caches.length; i++ )
+            {
+                JDBCDiskCache<?, ?> cache = (JDBCDiskCache<?, ?>) caches[i];
+
+                long start = System.currentTimeMillis();
+                int deleted = cache.deleteExpired();
+                long end = System.currentTimeMillis();
+
+                if ( log.isInfoEnabled() )
+                {
+                    log.info( "Deleted [" + deleted + "] expired for region [" + cache.getCacheName() + "] for table ["
+                        + cache.getTableName() + "] in " + ( end - start ) + " ms." );
+                }
+
+                // don't pause after the last call to delete expired.
+                if ( i < caches.length - 1 )
+                {
+                    if ( log.isInfoEnabled() )
+                    {
+                        log.info( "Pausing for [" + this.getPauseBetweenRegionCallsMillis()
+                            + "] ms. before shrinking the next region." );
+                    }
+
+                    try
+                    {
+                        Thread.sleep( this.getPauseBetweenRegionCallsMillis() );
+                    }
+                    catch ( InterruptedException e )
+                    {
+                        log.warn( "Interrupted while waiting to delete expired for the next region." );
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * How long should we wait between calls to deleteExpired when we are iterating through the list
+     * of regions.
+     * <p>
+     * @param pauseBetweenRegionCallsMillis The pauseBetweenRegionCallsMillis to set.
+     */
+    public void setPauseBetweenRegionCallsMillis( long pauseBetweenRegionCallsMillis )
+    {
+        this.pauseBetweenRegionCallsMillis = pauseBetweenRegionCallsMillis;
+    }
+
+    /**
+     * How long should we wait between calls to deleteExpired when we are iterating through the list
+     * of regions.
+     * <p>
+     * @return Returns the pauseBetweenRegionCallsMillis.
+     */
+    public long getPauseBetweenRegionCallsMillis()
+    {
+        return pauseBetweenRegionCallsMillis;
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/disk/jdbc/TableState.java b/src/org/apache/commons/jcs/auxiliary/disk/jdbc/TableState.java
new file mode 100644
index 0000000..a862660
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/disk/jdbc/TableState.java
@@ -0,0 +1,114 @@
+package org.apache.commons.jcs.auxiliary.disk.jdbc;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.Serializable;
+
+/**
+ * This is used by various elements of the JDBC disk cache to indicate the
+ * status of a table. The MySQL disk cache, for instance, marks the status as
+ * optimizing when a scheduled optimization is taking place. This allows the
+ * cache to balk rather than block during long running optimizations.
+ * <p>
+ * @author Aaron Smuts
+ */
+public class TableState
+    implements Serializable
+{
+    /** Don't change. */
+    private static final long serialVersionUID = -6625081552084964885L;
+
+    /** Name of the table whose state this reflects. */
+    private String tableName;
+
+    /**
+     * The table is free. It can be accessed and no potentially table locking
+     * jobs are running.
+     */
+    public static final int FREE = 0;
+
+    /** A potentially table locking deletion is running */
+    public static final int DELETE_RUNNING = 1;
+
+    /** A table locking optimization is running. */
+    public static final int OPTIMIZATION_RUNNING = 2;
+
+    /** we might want to add error */
+    private int state = FREE;
+
+    /**
+     * Construct a usable table state.
+     * <p>
+     * @param tableName
+     */
+    public TableState( String tableName )
+    {
+        this.setTableName( tableName );
+    }
+
+    /**
+     * @param tableName
+     *            The tableName to set.
+     */
+    public void setTableName( String tableName )
+    {
+        this.tableName = tableName;
+    }
+
+    /**
+     * @return Returns the tableName.
+     */
+    public String getTableName()
+    {
+        return tableName;
+    }
+
+    /**
+     * @param state
+     *            The state to set.
+     */
+    public void setState( int state )
+    {
+        this.state = state;
+    }
+
+    /**
+     * @return Returns the state.
+     */
+    public int getState()
+    {
+        return state;
+    }
+
+    /**
+     * Write out the values for debugging purposes.
+     * <p>
+     * @return String
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder str = new StringBuilder();
+        str.append( "TableState " );
+        str.append( "\n TableName = " + getTableName() );
+        str.append( "\n State = " + getState() );
+        return str.toString();
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/disk/jdbc/hsql/HSQLDiskCacheFactory.java b/src/org/apache/commons/jcs/auxiliary/disk/jdbc/hsql/HSQLDiskCacheFactory.java
new file mode 100644
index 0000000..c8649ee
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/disk/jdbc/hsql/HSQLDiskCacheFactory.java
@@ -0,0 +1,206 @@
+package org.apache.commons.jcs.auxiliary.disk.jdbc.hsql;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.commons.jcs.auxiliary.AuxiliaryCacheAttributes;
+import org.apache.commons.jcs.auxiliary.disk.jdbc.JDBCDiskCache;
+import org.apache.commons.jcs.auxiliary.disk.jdbc.JDBCDiskCacheAttributes;
+import org.apache.commons.jcs.auxiliary.disk.jdbc.JDBCDiskCacheFactory;
+import org.apache.commons.jcs.engine.behavior.ICompositeCacheManager;
+import org.apache.commons.jcs.engine.behavior.IElementSerializer;
+import org.apache.commons.jcs.engine.logging.behavior.ICacheEventLogger;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * This factory should create hsql disk caches.
+ * <p>
+ * @author Aaron Smuts
+ */
+public class HSQLDiskCacheFactory
+    extends JDBCDiskCacheFactory
+{
+    /** The logger */
+    private static final Log log = LogFactory.getLog( HSQLDiskCacheFactory.class );
+
+    /** The databases. */
+    private Set<String> databases;
+
+    /**
+     * This factory method should create an instance of the hsqlcache.
+     * <p>
+     * @param rawAttr
+     * @param compositeCacheManager
+     * @param cacheEventLogger
+     * @param elementSerializer
+     * @return JDBCDiskCache
+     * @throws SQLException if the creation of the cache instance fails
+     */
+    @Override
+    public <K, V> JDBCDiskCache<K, V> createCache( AuxiliaryCacheAttributes rawAttr,
+			ICompositeCacheManager compositeCacheManager,
+			ICacheEventLogger cacheEventLogger,
+			IElementSerializer elementSerializer )
+			throws SQLException
+    {
+        setupDatabase( (JDBCDiskCacheAttributes) rawAttr );
+        return super.createCache(rawAttr, compositeCacheManager, cacheEventLogger, elementSerializer);
+    }
+
+    /**
+     * Initialize this factory
+     */
+    @Override
+    public void initialize()
+    {
+        super.initialize();
+        this.databases = Collections.synchronizedSet( new HashSet<String>() );
+    }
+
+    /**
+     * Creates the database if it doesn't exist, registers the driver class, etc.
+     * <p>
+     * @param attributes
+     * @throws SQLException
+     */
+    protected void setupDatabase( JDBCDiskCacheAttributes attributes )
+        throws SQLException
+    {
+        if ( attributes == null )
+        {
+            throw new SQLException( "The attributes are null." );
+        }
+
+        // url should start with "jdbc:hsqldb:"
+        String database = attributes.getUrl() + attributes.getDatabase();
+
+        if ( databases.contains( database ) )
+        {
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "We already setup database [" + database + "]" );
+            }
+            return;
+        }
+
+        // TODO get this from the attributes.
+        System.setProperty( "hsqldb.cache_scale", "8" );
+
+        // "org.hsqldb.jdbcDriver"
+        String driver = attributes.getDriverClassName();
+        // "sa"
+        String user = attributes.getUserName();
+        // ""
+        String password = attributes.getPassword();
+
+        new org.hsqldb.jdbcDriver();
+
+        try
+        {
+            Class.forName( driver ).newInstance();
+        }
+        catch (Exception e)
+        {
+            throw new SQLException( "Could not initialize driver " + driver, e );
+        }
+
+        Connection cConn = DriverManager.getConnection( database, user, password );
+        setupTABLE( cConn, attributes.getTableName() );
+
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "Finished setting up database [" + database + "]" );
+        }
+
+        databases.add( database );
+    }
+
+    /**
+     * SETUP TABLE FOR CACHE
+     * <p>
+     * @param cConn
+     * @param tableName
+     */
+    private void setupTABLE( Connection cConn, String tableName ) throws SQLException
+    {
+        boolean newT = true;
+
+        // TODO make the cached nature of the table configurable
+        StringBuilder createSql = new StringBuilder();
+        createSql.append( "CREATE CACHED TABLE " + tableName );
+        createSql.append( "( " );
+        createSql.append( "CACHE_KEY             VARCHAR(250)          NOT NULL, " );
+        createSql.append( "REGION                VARCHAR(250)          NOT NULL, " );
+        createSql.append( "ELEMENT               BINARY, " );
+        createSql.append( "CREATE_TIME           DATE, " );
+        createSql.append( "CREATE_TIME_SECONDS   BIGINT, " );
+        createSql.append( "MAX_LIFE_SECONDS      BIGINT, " );
+        createSql.append( "SYSTEM_EXPIRE_TIME_SECONDS      BIGINT, " );
+        createSql.append( "IS_ETERNAL            CHAR(1), " );
+        createSql.append( "PRIMARY KEY (CACHE_KEY, REGION) " );
+        createSql.append( ");" );
+
+        Statement sStatement = cConn.createStatement();
+
+        try
+        {
+            sStatement.executeQuery( createSql.toString() );
+            sStatement.close();
+        }
+        catch ( SQLException e )
+        {
+            // FIXME: This is not reliable
+            if ( e.toString().indexOf( "already exists" ) != -1 )
+            {
+                newT = false;
+            }
+            else
+            {
+                throw e;
+            }
+        }
+
+        // TODO create an index on SYSTEM_EXPIRE_TIME_SECONDS
+        String setupData[] = { "create index iKEY on " + tableName + " (CACHE_KEY, REGION)" };
+
+        if ( newT )
+        {
+            for ( int i = 1; i < setupData.length; i++ )
+            {
+                try
+                {
+                    sStatement.executeQuery( setupData[i] );
+                }
+                catch ( SQLException e )
+                {
+                    log.error( "Exception caught when creating index." + e );
+                }
+            }
+        }
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/disk/jdbc/mysql/MySQLDiskCache.java b/src/org/apache/commons/jcs/auxiliary/disk/jdbc/mysql/MySQLDiskCache.java
new file mode 100644
index 0000000..81e5c4e
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/disk/jdbc/mysql/MySQLDiskCache.java
@@ -0,0 +1,168 @@
+package org.apache.commons.jcs.auxiliary.disk.jdbc.mysql;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.sql.SQLException;
+import java.util.Map;
+
+import org.apache.commons.jcs.auxiliary.disk.jdbc.JDBCDiskCache;
+import org.apache.commons.jcs.auxiliary.disk.jdbc.TableState;
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.behavior.ICompositeCacheManager;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * The MySQLDiskCache extends the core JDBCDiskCache.
+ * <p>
+ * Although the generic JDBC Disk Cache can be used for MySQL, the MySQL JDBC Disk Cache has
+ * additional features, such as table optimization that are particular to MySQL.
+ * <p>
+ * @author Aaron Smuts
+ */
+public class MySQLDiskCache<K, V>
+	extends JDBCDiskCache<K, V>
+{
+    /** local logger */
+    private static final Log log = LogFactory.getLog( MySQLDiskCache.class );
+
+    /** config attributes */
+    private final MySQLDiskCacheAttributes mySQLDiskCacheAttributes;
+
+    /**
+     * Delegates to the super and makes use of the MySQL specific parameters used for scheduled
+     * optimization.
+     * <p>
+     * @param attributes
+     * @param tableState
+     * @param compositeCacheManager
+     * @throws SQLException if the pool access could not be set up
+     */
+    public MySQLDiskCache( MySQLDiskCacheAttributes attributes, TableState tableState, ICompositeCacheManager compositeCacheManager ) throws SQLException
+    {
+        super( attributes, tableState, compositeCacheManager );
+
+        mySQLDiskCacheAttributes = attributes;
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "MySQLDiskCacheAttributes = " + attributes );
+        }
+    }
+
+    /**
+     * This delegates to the generic JDBC disk cache. If we are currently optimizing, then this
+     * method will balk and return null.
+     * <p>
+     * @param key Key to locate value for.
+     * @return An object matching key, or null.
+     */
+    @Override
+    protected ICacheElement<K, V> processGet( K key )
+    {
+        if ( this.getTableState().getState() == TableState.OPTIMIZATION_RUNNING )
+        {
+            if ( this.mySQLDiskCacheAttributes.isBalkDuringOptimization() )
+            {
+                return null;
+            }
+        }
+        return super.processGet( key );
+    }
+
+    /**
+     * This delegates to the generic JDBC disk cache. If we are currently optimizing, then this
+     * method will balk and return null.
+     * <p>
+     * @param pattern used for like query.
+     * @return An object matching key, or null.
+     */
+    @Override
+    protected Map<K, ICacheElement<K, V>> processGetMatching( String pattern )
+    {
+        if ( this.getTableState().getState() == TableState.OPTIMIZATION_RUNNING )
+        {
+            if ( this.mySQLDiskCacheAttributes.isBalkDuringOptimization() )
+            {
+                return null;
+            }
+        }
+        return super.processGetMatching( pattern );
+    }
+
+    /**
+     * @param pattern
+     * @return String to use in the like query.
+     */
+    @Override
+    public String constructLikeParameterFromPattern( String pattern )
+    {
+        String likePattern = pattern.replaceAll( "\\.\\+", "%" );
+        likePattern = likePattern.replaceAll( "\\.", "_" );
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "pattern = [" + likePattern + "]" );
+        }
+
+        return likePattern;
+    }
+
+    /**
+     * This delegates to the generic JDBC disk cache. If we are currently optimizing, then this
+     * method will balk and do nothing.
+     * <p>
+     * @param element
+     */
+    @Override
+    protected void processUpdate( ICacheElement<K, V> element )
+    {
+        if ( this.getTableState().getState() == TableState.OPTIMIZATION_RUNNING )
+        {
+            if ( this.mySQLDiskCacheAttributes.isBalkDuringOptimization() )
+            {
+                return;
+            }
+        }
+        super.processUpdate( element );
+    }
+
+    /**
+     * Removed the expired. (now - create time) > max life seconds * 1000
+     * <p>
+     * If we are currently optimizing, then this method will balk and do nothing.
+     * <p>
+     * TODO consider blocking and trying again.
+     * <p>
+     * @return the number deleted
+     */
+    @Override
+    protected int deleteExpired()
+    {
+        if ( this.getTableState().getState() == TableState.OPTIMIZATION_RUNNING )
+        {
+            if ( this.mySQLDiskCacheAttributes.isBalkDuringOptimization() )
+            {
+                return -1;
+            }
+        }
+        return super.deleteExpired();
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/disk/jdbc/mysql/MySQLDiskCacheAttributes.java b/src/org/apache/commons/jcs/auxiliary/disk/jdbc/mysql/MySQLDiskCacheAttributes.java
new file mode 100644
index 0000000..fca9702
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/disk/jdbc/mysql/MySQLDiskCacheAttributes.java
@@ -0,0 +1,107 @@
+package org.apache.commons.jcs.auxiliary.disk.jdbc.mysql;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.disk.jdbc.JDBCDiskCacheAttributes;
+
+/**
+ * This has additional attributes that are particular to the MySQL disk cache.
+ * <p>
+ * @author Aaron Smuts
+ */
+public class MySQLDiskCacheAttributes
+    extends JDBCDiskCacheAttributes
+{
+    /** Don't change. */
+    private static final long serialVersionUID = -6535808344813320061L;
+
+    /**
+     * For now this is a simple comma delimited list of HH:MM:SS times to optimize
+     * the table. If none is supplied, then no optimizations will be performed.
+     * <p>
+     * In the future we can add a chron like scheduling system. This is to meet
+     * a pressing current need.
+     * <p>
+     * 03:01,15:00 will cause the optimizer to run at 3 am and at 3 pm.
+     */
+    private String optimizationSchedule = null;
+
+    /**
+     * If true, we will balk, that is return null during optimization rather than block.
+     */
+    public static final boolean DEFAULT_BALK_DURING_OPTIMIZATION = true;
+
+    /**
+     * If true, we will balk, that is return null during optimization rather than block.
+     * <p>
+     * <a href="http://en.wikipedia.org/wiki/Balking_pattern">Balking</a>
+     */
+    private boolean balkDuringOptimization = DEFAULT_BALK_DURING_OPTIMIZATION;
+
+    /**
+     * @param optimizationSchedule The optimizationSchedule to set.
+     */
+    public void setOptimizationSchedule( String optimizationSchedule )
+    {
+        this.optimizationSchedule = optimizationSchedule;
+    }
+
+    /**
+     * @return Returns the optimizationSchedule.
+     */
+    public String getOptimizationSchedule()
+    {
+        return optimizationSchedule;
+    }
+
+    /**
+     * @param balkDuringOptimization The balkDuringOptimization to set.
+     */
+    public void setBalkDuringOptimization( boolean balkDuringOptimization )
+    {
+        this.balkDuringOptimization = balkDuringOptimization;
+    }
+
+    /**
+     * Should we return null while optimizing the table.
+     * <p>
+     * @return Returns the balkDuringOptimization.
+     */
+    public boolean isBalkDuringOptimization()
+    {
+        return balkDuringOptimization;
+    }
+
+    /**
+     * For debugging.
+     * <p>
+     * @return debug string
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder buf = new StringBuilder();
+        buf.append( "\nMySQLDiskCacheAttributes" );
+        buf.append( "\n OptimizationSchedule [" + getOptimizationSchedule() + "]" );
+        buf.append( "\n BalkDuringOptimization [" + isBalkDuringOptimization() + "]" );
+        buf.append( super.toString() );
+        return buf.toString();
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/disk/jdbc/mysql/MySQLDiskCacheFactory.java b/src/org/apache/commons/jcs/auxiliary/disk/jdbc/mysql/MySQLDiskCacheFactory.java
new file mode 100644
index 0000000..a73d70c
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/disk/jdbc/mysql/MySQLDiskCacheFactory.java
@@ -0,0 +1,193 @@
+package org.apache.commons.jcs.auxiliary.disk.jdbc.mysql;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.sql.SQLException;
+import java.text.ParseException;
+import java.util.Date;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.commons.jcs.auxiliary.AuxiliaryCacheAttributes;
+import org.apache.commons.jcs.auxiliary.disk.jdbc.JDBCDiskCacheFactory;
+import org.apache.commons.jcs.auxiliary.disk.jdbc.JDBCDiskCachePoolAccess;
+import org.apache.commons.jcs.auxiliary.disk.jdbc.TableState;
+import org.apache.commons.jcs.auxiliary.disk.jdbc.mysql.util.ScheduleParser;
+import org.apache.commons.jcs.engine.behavior.ICompositeCacheManager;
+import org.apache.commons.jcs.engine.behavior.IElementSerializer;
+import org.apache.commons.jcs.engine.logging.behavior.ICacheEventLogger;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * This factory should create mysql disk caches.
+ * <p>
+ * @author Aaron Smuts
+ */
+public class MySQLDiskCacheFactory
+    extends JDBCDiskCacheFactory
+{
+    /** The logger */
+    private static final Log log = LogFactory.getLog( MySQLDiskCacheFactory.class );
+
+    /**
+     * This factory method should create an instance of the mysqlcache.
+     * <p>
+     * @param rawAttr
+     * @param compositeCacheManager
+     * @param cacheEventLogger
+     * @param elementSerializer
+     * @return MySQLDiskCache
+     * @throws SQLException if the creation of the cache instance fails
+     */
+    @Override
+    public <K, V> MySQLDiskCache<K, V> createCache( AuxiliaryCacheAttributes rawAttr,
+            ICompositeCacheManager compositeCacheManager,
+            ICacheEventLogger cacheEventLogger, IElementSerializer elementSerializer )
+            throws SQLException
+    {
+        MySQLDiskCacheAttributes cattr = (MySQLDiskCacheAttributes) rawAttr;
+        TableState tableState = getTableState( cattr.getTableName() );
+
+        MySQLDiskCache<K, V> cache = new MySQLDiskCache<K, V>( cattr, tableState, compositeCacheManager );
+        cache.setCacheEventLogger( cacheEventLogger );
+        cache.setElementSerializer( elementSerializer );
+
+        // create a shrinker if we need it.
+        createShrinkerWhenNeeded( cattr, cache );
+        scheduleOptimizations( cattr, tableState, cache.getPoolAccess() );
+
+        return cache;
+
+    }
+
+    /**
+     * For each time in the optimization schedule, this calls schedule Optimization.
+     * <p>
+     * @param attributes configuration properties.
+     * @param tableState for noting optimization in progress, etc.
+     * @param poolAccess access to the pool
+     */
+    protected void scheduleOptimizations( MySQLDiskCacheAttributes attributes, TableState tableState, JDBCDiskCachePoolAccess poolAccess  )
+    {
+        if ( attributes != null )
+        {
+            if ( attributes.getOptimizationSchedule() != null )
+            {
+                if ( log.isInfoEnabled() )
+                {
+                    log.info( "Will try to configure optimization for table [" + attributes.getTableName()
+                        + "] on schedule [" + attributes.getOptimizationSchedule() + "]" );
+                }
+
+                MySQLTableOptimizer optimizer = new MySQLTableOptimizer( attributes, tableState, poolAccess );
+
+                // loop through the dates.
+                try
+                {
+                    Date[] dates = ScheduleParser.createDatesForSchedule( attributes.getOptimizationSchedule() );
+                    if ( dates != null )
+                    {
+                        for ( int i = 0; i < dates.length; i++ )
+                        {
+                            this.scheduleOptimization( dates[i], optimizer );
+                        }
+                    }
+                }
+                catch ( ParseException e )
+                {
+                    log.warn( "Problem creating optimization schedule for table [" + attributes.getTableName() + "]", e );
+                }
+            }
+            else
+            {
+                if ( log.isInfoEnabled() )
+                {
+                    log.info( "Optimization is not configured for table [" + attributes.getTableName() + "]" );
+                }
+            }
+        }
+    }
+
+    /**
+     * This takes in a single time and schedules the optimizer to be called at that time every day.
+     * <p>
+     * @param startTime -- HH:MM:SS format
+     * @param optimizer
+     */
+    protected void scheduleOptimization( Date startTime, MySQLTableOptimizer optimizer )
+    {
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "startTime [" + startTime + "] for optimizer " + optimizer );
+        }
+
+        // get the runnable from the factory
+        OptimizerTask runnable = new OptimizerTask( optimizer );
+        Date now = new Date();
+        long initialDelay = startTime.getTime() - now.getTime();
+
+        // have the daemon execute our runnable
+        getScheduledExecutorService().scheduleAtFixedRate(runnable, initialDelay, 86400000L, TimeUnit.MILLISECONDS );
+    }
+
+    /**
+     * This calls the optimizers' optimize table method. This is used by the timer.
+     * <p>
+     * @author Aaron Smuts
+     */
+    private static class OptimizerTask
+        implements Runnable
+    {
+        /** Handles optimization */
+        private MySQLTableOptimizer optimizer = null;
+
+        /**
+         * Get a handle on the optimizer.
+         * <p>
+         * @param optimizer
+         */
+        public OptimizerTask( MySQLTableOptimizer optimizer )
+        {
+            this.optimizer = optimizer;
+        }
+
+        /**
+         * This calls optimize on the optimizer.
+         * <p>
+         * @see java.lang.Runnable#run()
+         */
+        @Override
+        public void run()
+        {
+            if ( optimizer != null )
+            {
+                boolean success = optimizer.optimizeTable();
+                if ( log.isInfoEnabled() )
+                {
+                    log.info( "Optimization success status [" + success + "]" );
+                }
+            }
+            else
+            {
+                log.warn( "OptimizerRunner: The optimizer is null.  Could not optimize table." );
+            }
+        }
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/disk/jdbc/mysql/MySQLTableOptimizer.java b/src/org/apache/commons/jcs/auxiliary/disk/jdbc/mysql/MySQLTableOptimizer.java
new file mode 100644
index 0000000..02260c8
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/disk/jdbc/mysql/MySQLTableOptimizer.java
@@ -0,0 +1,325 @@
+package org.apache.commons.jcs.auxiliary.disk.jdbc.mysql;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.disk.jdbc.JDBCDiskCachePoolAccess;
+import org.apache.commons.jcs.auxiliary.disk.jdbc.TableState;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+/**
+ * The MySQL Table Optimizer can optimize MySQL tables. It knows how to optimize for MySQL datbases
+ * in particular and how to repair the table if it is corrupted in the process.
+ * <p>
+ * We will probably be able to abstract out a generic optimizer interface from this class in the
+ * future.
+ * <p>
+ * @author Aaron Smuts
+ */
+public class MySQLTableOptimizer
+{
+    /** The logger */
+    private static final Log log = LogFactory.getLog( MySQLTableOptimizer.class );
+
+    /** The pool */
+    private JDBCDiskCachePoolAccess poolAccess = null;
+
+    /** The name of the table. */
+    private String tableName = null;
+
+    /** optimizing, etc. */
+    private TableState tableState;
+
+    /**
+     * This constructs an optimizer with the disk cacn properties.
+     * <p>
+     * @param attributes
+     * @param tableState We mark the table status as optimizing when this is happening.
+     * @param poolAccess access to the database
+     */
+    public MySQLTableOptimizer( MySQLDiskCacheAttributes attributes, TableState tableState,
+                                JDBCDiskCachePoolAccess poolAccess )
+    {
+        setTableName( attributes.getTableName() );
+
+        this.tableState = tableState;
+
+        this.poolAccess = poolAccess;
+    }
+
+    /**
+     * A scheduler will call this method. When it is called the table state is marked as optimizing.
+     * TODO we need to verify that no deletions are running before we call optimize. We should wait
+     * if a deletion is in progress.
+     * <p>
+     * This restores when there is an optimization error. The error output looks like this:
+     *
+     * <pre>
+     *           mysql> optimize table JCS_STORE_FLIGHT_OPTION_ITINERARY;
+     *               +---------------------------------------------+----------+----------+---------------------+
+     *               | Table                                       | Op       | Msg_type | Msg_text            |
+     *               +---------------------------------------------+----------+----------+---------------------+
+     *               | jcs_cache.JCS_STORE_FLIGHT_OPTION_ITINERARY | optimize | error    | 2 when fixing table |
+     *               | jcs_cache.JCS_STORE_FLIGHT_OPTION_ITINERARY | optimize | status   | Operation failed    |
+     *               +---------------------------------------------+----------+----------+---------------------+
+     *               2 rows in set (51.78 sec)
+     * </pre>
+     *
+     * A successful repair response looks like this:
+     *
+     * <pre>
+     *        mysql> REPAIR TABLE JCS_STORE_FLIGHT_OPTION_ITINERARY;
+     *            +---------------------------------------------+--------+----------+----------------------------------------------+
+     *            | Table                                       | Op     | Msg_type | Msg_text                                     |
+     *            +---------------------------------------------+--------+----------+----------------------------------------------+
+     *            | jcs_cache.JCS_STORE_FLIGHT_OPTION_ITINERARY | repair | error    | 2 when fixing table                          |
+     *            | jcs_cache.JCS_STORE_FLIGHT_OPTION_ITINERARY | repair | warning  | Number of rows changed from 131276 to 260461 |
+     *            | jcs_cache.JCS_STORE_FLIGHT_OPTION_ITINERARY | repair | status   | OK                                           |
+     *            +---------------------------------------------+--------+----------+----------------------------------------------+
+     *            3 rows in set (3 min 5.94 sec)
+     * </pre>
+     *
+     * A successful optimization looks like this:
+     *
+     * <pre>
+     *       mysql> optimize table JCS_STORE_DEFAULT;
+     *           +-----------------------------+----------+----------+----------+
+     *           | Table                       | Op       | Msg_type | Msg_text |
+     *           +-----------------------------+----------+----------+----------+
+     *           | jcs_cache.JCS_STORE_DEFAULT | optimize | status   | OK       |
+     *           +-----------------------------+----------+----------+----------+
+     *           1 row in set (1.10 sec)
+     * </pre>
+     * @return true if it worked
+     */
+    public boolean optimizeTable()
+    {
+        long start = System.currentTimeMillis();
+        boolean success = false;
+
+        if ( tableState.getState() == TableState.OPTIMIZATION_RUNNING )
+        {
+            log
+                .warn( "Skipping optimization.  Optimize was called, but the table state indicates that an optimization is currently running." );
+            return false;
+        }
+
+        try
+        {
+            tableState.setState( TableState.OPTIMIZATION_RUNNING );
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "Optimizing table [" + this.getTableName() + "]" );
+            }
+
+            Connection con;
+            try
+            {
+                con = poolAccess.getConnection();
+            }
+            catch ( SQLException e )
+            {
+                log.error( "Problem getting connection.", e );
+                return false;
+            }
+
+            try
+            {
+                // TEST
+                Statement sStatement = null;
+                try
+                {
+                    sStatement = con.createStatement();
+
+                    ResultSet rs = sStatement.executeQuery( "optimize table " + this.getTableName() );
+
+                    // first row is error, then status
+                    // if there is only one row in the result set, everything
+                    // should be fine.
+                    // This may be mysql version specific.
+                    if ( rs.next() )
+                    {
+                        String status = rs.getString( "Msg_type" );
+                        String message = rs.getString( "Msg_text" );
+
+                        if ( log.isInfoEnabled() )
+                        {
+                            log.info( "Message Type: " + status );
+                            log.info( "Message: " + message );
+                        }
+
+                        if ( "error".equals( status ) )
+                        {
+                            log.warn( "Optimization was in erorr.  Will attempt to repair the table.  Message: "
+                                + message );
+
+                            // try to repair the table.
+                            success = repairTable( sStatement );
+                        }
+                        else
+                        {
+                            success = true;
+                        }
+                    }
+
+                    // log the table status
+                    String statusString = getTableStatus( sStatement );
+                    if ( log.isInfoEnabled() )
+                    {
+                        log.info( "Table status after optimizing table [" + this.getTableName() + "]\n" + statusString );
+                    }
+                }
+                catch ( SQLException e )
+                {
+                    log.error( "Problem optimizing table [" + this.getTableName() + "]", e );
+                    return false;
+                }
+                finally
+                {
+                    if (sStatement != null)
+                    {
+                        try
+                        {
+                            sStatement.close();
+                        }
+                        catch ( SQLException e )
+                        {
+                            log.error( "Problem closing statement.", e );
+                        }
+                    }
+                }
+            }
+            finally
+            {
+                try
+                {
+                    con.close();
+                }
+                catch ( SQLException e )
+                {
+                    log.error( "Problem closing connection.", e );
+                }
+            }
+        }
+        finally
+        {
+            tableState.setState( TableState.FREE );
+
+            long end = System.currentTimeMillis();
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "Optimization of table [" + this.getTableName() + "] took " + ( end - start ) + " ms." );
+            }
+        }
+
+        return success;
+    }
+
+    /**
+     * This calls show table status and returns the result as a String.
+     * <p>
+     * @param sStatement
+     * @return String
+     * @throws SQLException
+     */
+    protected String getTableStatus( Statement sStatement )
+        throws SQLException
+    {
+        ResultSet statusResultSet = sStatement.executeQuery( "show table status" );
+        StringBuilder statusString = new StringBuilder();
+        int numColumns = statusResultSet.getMetaData().getColumnCount();
+        while ( statusResultSet.next() )
+        {
+            statusString.append( "\n" );
+            for ( int i = 1; i <= numColumns; i++ )
+            {
+                statusString.append( statusResultSet.getMetaData().getColumnLabel( i ) + " ["
+                    + statusResultSet.getString( i ) + "]  |  " );
+            }
+        }
+        return statusString.toString();
+    }
+
+    /**
+     * This is called if the optimizatio is in error.
+     * <p>
+     * It looks for "OK" in response. If it find "OK" as a message in any result set row, it returns
+     * true. Otherwise we assume that the repair failed.
+     * <p>
+     * @param sStatement
+     * @return true if successful
+     * @throws SQLException
+     */
+    protected boolean repairTable( Statement sStatement )
+        throws SQLException
+    {
+        boolean success = false;
+
+        // if( message != null && message.indexOf( ) )
+        ResultSet repairResult = sStatement.executeQuery( "repair table " + this.getTableName() );
+        StringBuilder repairString = new StringBuilder();
+        int numColumns = repairResult.getMetaData().getColumnCount();
+        while ( repairResult.next() )
+        {
+            for ( int i = 1; i <= numColumns; i++ )
+            {
+                repairString.append( repairResult.getMetaData().getColumnLabel( i ) + " [" + repairResult.getString( i )
+                    + "]  |  " );
+            }
+
+            String message = repairResult.getString( "Msg_text" );
+            if ( "OK".equals( message ) )
+            {
+                success = true;
+            }
+        }
+        if ( log.isInfoEnabled() )
+        {
+            log.info( repairString );
+        }
+
+        if ( !success )
+        {
+            log.warn( "Failed to repair the table. " + repairString );
+        }
+        return success;
+    }
+
+    /**
+     * @param tableName The tableName to set.
+     */
+    public void setTableName( String tableName )
+    {
+        this.tableName = tableName;
+    }
+
+    /**
+     * @return Returns the tableName.
+     */
+    public String getTableName()
+    {
+        return tableName;
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/disk/jdbc/mysql/util/ScheduleParser.java b/src/org/apache/commons/jcs/auxiliary/disk/jdbc/mysql/util/ScheduleParser.java
new file mode 100644
index 0000000..4e973e2
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/disk/jdbc/mysql/util/ScheduleParser.java
@@ -0,0 +1,96 @@
+package org.apache.commons.jcs.auxiliary.disk.jdbc.mysql.util;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.StringTokenizer;
+
+/**
+ * Parses the very simple schedule format.
+ * <p>
+ * @author Aaron Smuts
+ */
+public class ScheduleParser
+{
+    /**
+     * For each date time that is separated by a comma in the
+     * OptimizationSchedule, create a date and add it to an array of dates.
+     * <p>
+     * @param schedule
+     * @return Date[]
+     * @throws ParseException
+     */
+    public static Date[] createDatesForSchedule( String schedule )
+        throws ParseException
+    {
+        if ( schedule == null )
+        {
+            throw new ParseException( "Cannot create schedules for a null String.", 0 );
+        }
+
+        StringTokenizer toker = new StringTokenizer( schedule, "," );
+        Date[] dates = new Date[toker.countTokens()];
+        int cnt = 0;
+        while ( toker.hasMoreTokens() )
+        {
+            String time = toker.nextToken();
+            dates[cnt] = getDateForSchedule( time );
+            cnt++;
+        }
+        return dates;
+    }
+
+    /**
+     * For a single string it creates a date that is the next time this hh:mm:ss
+     * combo will be seen.
+     * <p>
+     * @param startTime
+     * @return Date
+     * @throws ParseException
+     */
+    public static Date getDateForSchedule( String startTime )
+        throws ParseException
+    {
+        if ( startTime == null )
+        {
+            throw new ParseException( "Cannot create date for a null String.", 0 );
+        }
+
+        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
+        Date date = sdf.parse(startTime);
+        Calendar cal = Calendar.getInstance();
+        // This will result in a date of 1/1/1970
+        cal.setTime(date);
+
+        Calendar now = Calendar.getInstance();
+        cal.set(now.get(Calendar.YEAR), now.get(Calendar.MONTH), now.get(Calendar.DAY_OF_MONTH));
+
+        // if the date is less than now, add a day.
+        if ( cal.before( now ) )
+        {
+            cal.add( Calendar.DAY_OF_MONTH, 1 );
+        }
+
+        return cal.getTime();
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/disk/package.html b/src/org/apache/commons/jcs/auxiliary/disk/package.html
new file mode 100644
index 0000000..668a141
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/disk/package.html
@@ -0,0 +1,27 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<html>
+  <head>
+  </head>
+  <body>
+    The primary disk auxiliary. Objects are serialized to a file on disk.
+    This implementation uses memory keys and performs quite well.
+    Recomended for most cases.
+  </body>
+</html>
diff --git a/src/org/apache/commons/jcs/auxiliary/lateral/LateralCache.java b/src/org/apache/commons/jcs/auxiliary/lateral/LateralCache.java
new file mode 100644
index 0000000..e922680
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/lateral/LateralCache.java
@@ -0,0 +1,457 @@
+package org.apache.commons.jcs.auxiliary.lateral;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.AbstractAuxiliaryCacheEventLogging;
+import org.apache.commons.jcs.auxiliary.AuxiliaryCacheAttributes;
+import org.apache.commons.jcs.auxiliary.lateral.behavior.ILateralCacheAttributes;
+import org.apache.commons.jcs.engine.CacheInfo;
+import org.apache.commons.jcs.engine.CacheStatus;
+import org.apache.commons.jcs.engine.ZombieCacheServiceNonLocal;
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.behavior.ICacheServiceNonLocal;
+import org.apache.commons.jcs.engine.behavior.IZombie;
+import org.apache.commons.jcs.engine.stats.Stats;
+import org.apache.commons.jcs.engine.stats.behavior.IStats;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.IOException;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Lateral distributor. Returns null on get by default. Net search not implemented.
+ */
+public class LateralCache<K, V>
+    extends AbstractAuxiliaryCacheEventLogging<K, V>
+{
+    /** The logger. */
+    private static final Log log = LogFactory.getLog( LateralCache.class );
+
+    /** generalize this, use another interface */
+    private final ILateralCacheAttributes lateralCacheAttributes;
+
+    /** The region name */
+    final String cacheName;
+
+    /** either http, socket.udp, or socket.tcp can set in config */
+    private ICacheServiceNonLocal<K, V> lateralCacheService;
+
+    /** Monitors the connection. */
+    private LateralCacheMonitor monitor;
+
+    /**
+     * Constructor for the LateralCache object
+     * <p>
+     * @param cattr
+     * @param lateral
+     * @param monitor
+     */
+    public LateralCache( ILateralCacheAttributes cattr, ICacheServiceNonLocal<K, V> lateral, LateralCacheMonitor monitor )
+    {
+        this.cacheName = cattr.getCacheName();
+        this.lateralCacheAttributes = cattr;
+        this.lateralCacheService = lateral;
+        this.monitor = monitor;
+    }
+
+    /**
+     * Constructor for the LateralCache object
+     * <p>
+     * @param cattr
+     */
+    public LateralCache( ILateralCacheAttributes cattr )
+    {
+        this.cacheName = cattr.getCacheName();
+        this.lateralCacheAttributes = cattr;
+    }
+
+    /**
+     * Update lateral.
+     * <p>
+     * @param ce
+     * @throws IOException
+     */
+    @Override
+    protected void processUpdate( ICacheElement<K, V> ce )
+        throws IOException
+    {
+        try
+        {
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "update: lateral = [" + lateralCacheService + "], " + "CacheInfo.listenerId = "
+                    + CacheInfo.listenerId );
+            }
+            lateralCacheService.update( ce, CacheInfo.listenerId );
+        }
+        catch ( NullPointerException npe )
+        {
+            log.error( "Failure updating lateral. lateral = " + lateralCacheService, npe );
+            handleException( npe, "Failed to put [" + ce.getKey() + "] to " + ce.getCacheName() + "@" + lateralCacheAttributes );
+            return;
+        }
+        catch ( Exception ex )
+        {
+            handleException( ex, "Failed to put [" + ce.getKey() + "] to " + ce.getCacheName() + "@" + lateralCacheAttributes );
+        }
+    }
+
+    /**
+     * The performance costs are too great. It is not recommended that you enable lateral gets.
+     * <p>
+     * @param key
+     * @return ICacheElement<K, V> or null
+     * @throws IOException
+     */
+    @Override
+    protected ICacheElement<K, V> processGet( K key )
+        throws IOException
+    {
+        ICacheElement<K, V> obj = null;
+
+        if ( this.lateralCacheAttributes.getPutOnlyMode() )
+        {
+            return null;
+        }
+        try
+        {
+            obj = lateralCacheService.get( cacheName, key );
+        }
+        catch ( Exception e )
+        {
+            log.error( e );
+            handleException( e, "Failed to get [" + key + "] from " + lateralCacheAttributes.getCacheName() + "@" + lateralCacheAttributes );
+        }
+        return obj;
+    }
+
+    /**
+     * @param pattern
+     * @return A map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data in cache for any of these keys
+     * @throws IOException
+     */
+    @Override
+    protected Map<K, ICacheElement<K, V>> processGetMatching( String pattern )
+        throws IOException
+    {
+        if ( this.lateralCacheAttributes.getPutOnlyMode() )
+        {
+            return Collections.emptyMap();
+        }
+        try
+        {
+            return lateralCacheService.getMatching( cacheName, pattern );
+        }
+        catch ( IOException e )
+        {
+            log.error( e );
+            handleException( e, "Failed to getMatching [" + pattern + "] from " + lateralCacheAttributes.getCacheName() + "@" + lateralCacheAttributes );
+            return Collections.emptyMap();
+        }
+    }
+
+    /**
+     * Gets multiple items from the cache based on the given set of keys.
+     * <p>
+     * @param keys
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data in cache for any of these keys
+     * @throws IOException
+     */
+    @Override
+    protected Map<K, ICacheElement<K, V>> processGetMultiple( Set<K> keys )
+        throws IOException
+    {
+        Map<K, ICacheElement<K, V>> elements = new HashMap<K, ICacheElement<K, V>>();
+
+        if ( keys != null && !keys.isEmpty() )
+        {
+            for (K key : keys)
+            {
+                ICacheElement<K, V> element = get( key );
+
+                if ( element != null )
+                {
+                    elements.put( key, element );
+                }
+            }
+        }
+
+        return elements;
+    }
+
+    /**
+     * Return the keys in this cache.
+     * <p>
+     * @see org.apache.commons.jcs.auxiliary.AuxiliaryCache#getKeySet()
+     */
+    @Override
+    public Set<K> getKeySet() throws IOException
+    {
+        try
+        {
+            return lateralCacheService.getKeySet( cacheName );
+        }
+        catch ( Exception ex )
+        {
+            handleException( ex, "Failed to get key set from " + lateralCacheAttributes.getCacheName() + "@"
+                + lateralCacheAttributes );
+        }
+        return Collections.emptySet();
+    }
+
+    /**
+     * Synchronously remove from the remote cache; if failed, replace the remote handle with a
+     * zombie.
+     * <p>
+     * @param key
+     * @return false always
+     * @throws IOException
+     */
+    @Override
+    protected boolean processRemove( K key )
+        throws IOException
+    {
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "removing key:" + key );
+        }
+
+        try
+        {
+            lateralCacheService.remove( cacheName, key, CacheInfo.listenerId );
+        }
+        catch ( Exception ex )
+        {
+            handleException( ex, "Failed to remove " + key + " from " + lateralCacheAttributes.getCacheName() + "@" + lateralCacheAttributes );
+        }
+        return false;
+    }
+
+    /**
+     * Synchronously removeAll from the remote cache; if failed, replace the remote handle with a
+     * zombie.
+     * <p>
+     * @throws IOException
+     */
+    @Override
+    protected void processRemoveAll()
+        throws IOException
+    {
+        try
+        {
+            lateralCacheService.removeAll( cacheName, CacheInfo.listenerId );
+        }
+        catch ( Exception ex )
+        {
+            handleException( ex, "Failed to remove all from " + lateralCacheAttributes.getCacheName() + "@" + lateralCacheAttributes );
+        }
+    }
+
+    /**
+     * Synchronously dispose the cache. Not sure we want this.
+     * <p>
+     * @throws IOException
+     */
+    @Override
+    protected void processDispose()
+        throws IOException
+    {
+        log.debug( "Disposing of lateral cache" );
+
+        ///* HELP: This section did nothing but generate compilation warnings.
+        // TODO: may limit this functionality. It is dangerous.
+        // asmuts -- Added functionality to help with warnings. I'm not getting
+        // any.
+        try
+        {
+            lateralCacheService.dispose( this.lateralCacheAttributes.getCacheName() );
+            // Should remove connection
+        }
+        catch ( Exception ex )
+        {
+            log.error( "Couldn't dispose", ex );
+            handleException( ex, "Failed to dispose " + lateralCacheAttributes.getCacheName() );
+        }
+    }
+
+    /**
+     * Returns the cache status.
+     * <p>
+     * @return The status value
+     */
+    @Override
+    public CacheStatus getStatus()
+    {
+        return this.lateralCacheService instanceof IZombie ? CacheStatus.ERROR : CacheStatus.ALIVE;
+    }
+
+    /**
+     * Returns the current cache size.
+     * <p>
+     * @return The size value
+     */
+    @Override
+    public int getSize()
+    {
+        return 0;
+    }
+
+    /**
+     * Gets the cacheType attribute of the LateralCache object
+     * <p>
+     * @return The cacheType value
+     */
+    @Override
+    public CacheType getCacheType()
+    {
+        return CacheType.LATERAL_CACHE;
+    }
+
+    /**
+     * Gets the cacheName attribute of the LateralCache object
+     * <p>
+     * @return The cacheName value
+     */
+    @Override
+    public String getCacheName()
+    {
+        return cacheName;
+    }
+
+    /**
+     * Not yet sure what to do here.
+     * <p>
+     * @param ex
+     * @param msg
+     * @throws IOException
+     */
+    private void handleException( Exception ex, String msg )
+        throws IOException
+    {
+        log.error( "Disabling lateral cache due to error " + msg, ex );
+
+        lateralCacheService = new ZombieCacheServiceNonLocal<K, V>( lateralCacheAttributes.getZombieQueueMaxSize() );
+        // may want to flush if region specifies
+        // Notify the cache monitor about the error, and kick off the recovery
+        // process.
+        monitor.notifyError();
+
+        // could stop the net search if it is built and try to reconnect?
+        if ( ex instanceof IOException )
+        {
+            throw (IOException) ex;
+        }
+        throw new IOException( ex.getMessage() );
+    }
+
+    /**
+     * Replaces the current remote cache service handle with the given handle.
+     * <p>
+     * @param restoredLateral
+     */
+    public void fixCache( ICacheServiceNonLocal<K, V> restoredLateral )
+    {
+        if ( this.lateralCacheService != null && this.lateralCacheService instanceof ZombieCacheServiceNonLocal )
+        {
+            ZombieCacheServiceNonLocal<K, V> zombie = (ZombieCacheServiceNonLocal<K, V>) this.lateralCacheService;
+            this.lateralCacheService = restoredLateral;
+            try
+            {
+                zombie.propagateEvents( restoredLateral );
+            }
+            catch ( Exception e )
+            {
+                try
+                {
+                    handleException( e, "Problem propagating events from Zombie Queue to new Lateral Service." );
+                }
+                catch ( IOException e1 )
+                {
+                    // swallow, since this is just expected kick back.  Handle always throws
+                }
+            }
+        }
+        else
+        {
+            this.lateralCacheService = restoredLateral;
+        }
+    }
+
+    /**
+     * getStats
+     * <p>
+     * @return String
+     */
+    @Override
+    public String getStats()
+    {
+        return "";
+    }
+
+    /**
+     * @return Returns the AuxiliaryCacheAttributes.
+     */
+    @Override
+    public AuxiliaryCacheAttributes getAuxiliaryCacheAttributes()
+    {
+        return lateralCacheAttributes;
+    }
+
+    /**
+     * @return debugging data.
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder buf = new StringBuilder();
+        buf.append( "\n LateralCache " );
+        buf.append( "\n Cache Name [" + lateralCacheAttributes.getCacheName() + "]" );
+        buf.append( "\n cattr =  [" + lateralCacheAttributes + "]" );
+        return buf.toString();
+    }
+
+    /**
+     * @return extra data.
+     */
+    @Override
+    public String getEventLoggingExtraInfo()
+    {
+        return null;
+    }
+
+    /**
+     * The NoWait on top does not call out to here yet.
+     * <p>
+     * @return almost nothing
+     */
+    @Override
+    public IStats getStatistics()
+    {
+        IStats stats = new Stats();
+        stats.setTypeName( "LateralCache" );
+        return stats;
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/lateral/LateralCacheAttributes.java b/src/org/apache/commons/jcs/auxiliary/lateral/LateralCacheAttributes.java
new file mode 100644
index 0000000..a02ef37
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/lateral/LateralCacheAttributes.java
@@ -0,0 +1,313 @@
+package org.apache.commons.jcs.auxiliary.lateral;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.AbstractAuxiliaryCacheAttributes;
+import org.apache.commons.jcs.auxiliary.AuxiliaryCacheAttributes;
+import org.apache.commons.jcs.auxiliary.lateral.behavior.ILateralCacheAttributes;
+
+import java.io.Serializable;
+
+/**
+ * This class stores attributes for all of the available lateral cache auxiliaries.
+ */
+public class LateralCacheAttributes
+    extends AbstractAuxiliaryCacheAttributes
+    implements Serializable, ILateralCacheAttributes
+{
+    /** Don't change */
+    private static final long serialVersionUID = -3408449508837393660L;
+
+    /** Default receive setting */
+    private static final boolean DEFAULT_RECEIVE = true;
+
+    /** THe type of lateral */
+    private String transmissionTypeName = "UDP";
+
+    /** indicates the lateral type, this needs to change */
+    private Type transmissionType = Type.UDP;
+
+    /** The http servers */
+    private String httpServers;
+
+    /** used to identify the service that this manager will be operating on */
+    private String httpServer = "";
+
+    /** this needs to change */
+    private String udpMulticastAddr = "228.5.6.7";
+
+    /** this needs to change */
+    private int udpMulticastPort = 6789;
+
+    /** this needs to change */
+    private int httpListenerPort = 8080;
+
+    /** disables gets from laterals */
+    private boolean putOnlyMode = true;
+
+    /**
+     * do we receive and broadcast or only broadcast this is useful when you don't want to get any
+     * notifications
+     */
+    private boolean receive = DEFAULT_RECEIVE;
+
+    /** If the primary fails, we will queue items before reconnect.  This limits the number of items that can be queued. */
+    private int zombieQueueMaxSize = DEFAULT_ZOMBIE_QUEUE_MAX_SIZE;
+
+    /**
+     * Sets the httpServer attribute of the LateralCacheAttributes object
+     * <P>
+     * @param val The new httpServer value
+     */
+    @Override
+    public void setHttpServer( String val )
+    {
+        httpServer = val;
+    }
+
+    /**
+     * Gets the httpServer attribute of the LateralCacheAttributes object
+     * @return The httpServer value
+     */
+    @Override
+    public String getHttpServer()
+    {
+        return httpServer;
+    }
+
+    /**
+     * Sets the httpServers attribute of the LateralCacheAttributes object
+     * @param val The new httpServers value
+     */
+    @Override
+    public void setHttpServers( String val )
+    {
+        httpServers = val;
+    }
+
+    /**
+     * Gets the httpSrvers attribute of the LateralCacheAttributes object
+     * @return The httpServers value
+     */
+    @Override
+    public String getHttpServers()
+    {
+        return httpServers;
+    }
+
+    /**
+     * Sets the httpListenerPort attribute of the ILateralCacheAttributes object
+     * @param val The new tcpListenerPort value
+     */
+    @Override
+    public void setHttpListenerPort( int val )
+    {
+        this.httpListenerPort = val;
+    }
+
+    /**
+     * Gets the httpListenerPort attribute of the ILateralCacheAttributes object
+     * @return The httpListenerPort value
+     */
+    @Override
+    public int getHttpListenerPort()
+    {
+        return this.httpListenerPort;
+    }
+
+    /**
+     * Sets the udpMulticastAddr attribute of the LateralCacheAttributes object
+     * @param val The new udpMulticastAddr value
+     */
+    @Override
+    public void setUdpMulticastAddr( String val )
+    {
+        udpMulticastAddr = val;
+    }
+
+    /**
+     * Gets the udpMulticastAddr attribute of the LateralCacheAttributes object
+     * @return The udpMulticastAddr value
+     */
+    @Override
+    public String getUdpMulticastAddr()
+    {
+        return udpMulticastAddr;
+    }
+
+    /**
+     * Sets the udpMulticastPort attribute of the LateralCacheAttributes object
+     * @param val The new udpMulticastPort value
+     */
+    @Override
+    public void setUdpMulticastPort( int val )
+    {
+        udpMulticastPort = val;
+    }
+
+    /**
+     * Gets the udpMulticastPort attribute of the LateralCacheAttributes object
+     * @return The udpMulticastPort value
+     */
+    @Override
+    public int getUdpMulticastPort()
+    {
+        return udpMulticastPort;
+    }
+
+    /**
+     * Sets the transmissionType attribute of the LateralCacheAttributes object
+     * @param val The new transmissionType value
+     */
+    @Override
+    public void setTransmissionType( Type val )
+    {
+        this.transmissionType = val;
+        this.transmissionTypeName = val.toString();
+    }
+
+    /**
+     * Gets the transmissionType attribute of the LateralCacheAttributes object
+     * @return The transmissionType value
+     */
+    @Override
+    public Type getTransmissionType()
+    {
+        return this.transmissionType;
+    }
+
+    /**
+     * Sets the transmissionTypeName attribute of the LateralCacheAttributes object
+     * @param val The new transmissionTypeName value
+     */
+    @Override
+    public void setTransmissionTypeName( String val )
+    {
+        this.transmissionTypeName = val;
+        this.transmissionType = Type.valueOf(val);
+    }
+
+    /**
+     * Gets the transmissionTypeName attribute of the LateralCacheAttributes object
+     * @return The transmissionTypeName value
+     */
+    @Override
+    public String getTransmissionTypeName()
+    {
+        return this.transmissionTypeName;
+    }
+
+    /**
+     * Sets the outgoingOnlyMode attribute of the ILateralCacheAttributes. When this is true the
+     * lateral cache will only issue put and remove order and will not try to retrieve elements from
+     * other lateral caches.
+     * @param val The new transmissionTypeName value
+     */
+    @Override
+    public void setPutOnlyMode( boolean val )
+    {
+        this.putOnlyMode = val;
+    }
+
+    /**
+     * @return The outgoingOnlyMode value. Stops gets from going remote.
+     */
+    @Override
+    public boolean getPutOnlyMode()
+    {
+        return putOnlyMode;
+    }
+
+    /**
+     * Returns a clone of the attributes.
+     * @return Self
+     */
+    @Override
+    public AuxiliaryCacheAttributes copy()
+    {
+        try
+        {
+            return (AuxiliaryCacheAttributes) this.clone();
+        }
+        catch ( Exception e )
+        {
+            //noop
+        }
+        return this;
+    }
+
+    /**
+     * @param receive The receive to set.
+     */
+    @Override
+    public void setReceive( boolean receive )
+    {
+        this.receive = receive;
+    }
+
+    /**
+     * @return Returns the receive.
+     */
+    @Override
+    public boolean isReceive()
+    {
+        return receive;
+    }
+
+    /**
+     * The number of elements the zombie queue will hold. This queue is used to store events if we
+     * loose our connection with the server.
+     * <p>
+     * @param zombieQueueMaxSize The zombieQueueMaxSize to set.
+     */
+    @Override
+    public void setZombieQueueMaxSize( int zombieQueueMaxSize )
+    {
+        this.zombieQueueMaxSize = zombieQueueMaxSize;
+    }
+
+    /**
+     * The number of elements the zombie queue will hold. This queue is used to store events if we
+     * loose our connection with the server.
+     * <p>
+     * @return Returns the zombieQueueMaxSize.
+     */
+    @Override
+    public int getZombieQueueMaxSize()
+    {
+        return zombieQueueMaxSize;
+    }
+
+    /**
+     * @return debug string.
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder buf = new StringBuilder();
+        //buf.append( "cacheName=" + cacheName + "\n" );
+        //buf.append( "putOnlyMode=" + putOnlyMode + "\n" );
+        //buf.append( "transmissionTypeName=" + transmissionTypeName + "\n" );
+        //buf.append( "transmissionType=" + transmissionType + "\n" );
+        //buf.append( "tcpServer=" + tcpServer + "\n" );
+        buf.append( transmissionTypeName + httpServer + udpMulticastAddr + String.valueOf( udpMulticastPort ) );
+        return buf.toString();
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/lateral/LateralCacheMonitor.java b/src/org/apache/commons/jcs/auxiliary/lateral/LateralCacheMonitor.java
new file mode 100644
index 0000000..b2df388
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/lateral/LateralCacheMonitor.java
@@ -0,0 +1,285 @@
+package org.apache.commons.jcs.auxiliary.lateral;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.Serializable;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.commons.jcs.auxiliary.lateral.socket.tcp.LateralTCPCacheFactory;
+import org.apache.commons.jcs.auxiliary.lateral.socket.tcp.behavior.ITCPLateralCacheAttributes;
+import org.apache.commons.jcs.engine.CacheStatus;
+import org.apache.commons.jcs.engine.ZombieCacheServiceNonLocal;
+import org.apache.commons.jcs.engine.behavior.ICacheServiceNonLocal;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Used to monitor and repair any failed connection for the lateral cache service. By default the
+ * monitor operates in a failure driven mode. That is, it goes into a wait state until there is an
+ * error. Upon the notification of a connection error, the monitor changes to operate in a time
+ * driven mode. That is, it attempts to recover the connections on a periodic basis. When all failed
+ * connections are restored, it changes back to the failure driven mode.
+ */
+public class LateralCacheMonitor extends Thread
+{
+    /** The logger */
+    private static final Log log = LogFactory.getLog( LateralCacheMonitor.class );
+
+    /** How long to wait between runs */
+    private static long idlePeriod = 20 * 1000;
+
+    /**
+     * Must make sure LateralCacheMonitor is started before any lateral error can be detected!
+     */
+    private boolean allright = true;
+
+    /**
+     * Map of caches to monitor
+     */
+    private ConcurrentHashMap<String, LateralCacheNoWait<?, ?>> caches;
+
+    /**
+     * Reference to the factory
+     */
+    private LateralTCPCacheFactory factory;
+
+    /**
+     * shutdown flag
+     */
+    private boolean shutdown = false;
+
+    /** code for eror */
+    private static final int ERROR = 1;
+
+    /** The mode we are running in. Error driven */
+    private static int mode = ERROR;
+
+    /**
+     * Configures the idle period between repairs.
+     * <p>
+     * @param idlePeriod The new idlePeriod value
+     */
+    public static void setIdlePeriod( long idlePeriod )
+    {
+        if ( idlePeriod > LateralCacheMonitor.idlePeriod )
+        {
+            LateralCacheMonitor.idlePeriod = idlePeriod;
+        }
+    }
+
+    /**
+     * Allows close classes, ie testers to set the idle period to something testable.
+     * <p>
+     * @param idlePeriod
+     */
+    protected static void forceShortIdlePeriod( long idlePeriod )
+    {
+        LateralCacheMonitor.idlePeriod = idlePeriod;
+    }
+
+    /**
+     * Constructor for the LateralCacheMonitor object
+     * <p>
+     * It's the clients responsibility to decide how many of these there will be.
+     *
+     * @param factory a reference to the factory that manages the service instances
+     */
+    public LateralCacheMonitor(LateralTCPCacheFactory factory)
+    {
+        super("JCS-LateralCacheMonitor");
+        this.factory = factory;
+        this.caches = new ConcurrentHashMap<String, LateralCacheNoWait<?,?>>();
+    }
+
+    /**
+     * Add a cache to be monitored
+     *
+     * @param cache the cache
+     */
+    public void addCache(LateralCacheNoWait<?, ?> cache)
+    {
+        this.caches.put(cache.getCacheName(), cache);
+
+        // if not yet started, go ahead
+        if (this.getState() == Thread.State.NEW)
+        {
+            this.start();
+        }
+    }
+
+    /**
+     * Notifies the cache monitor that an error occurred, and kicks off the error recovery process.
+     */
+    public void notifyError()
+    {
+        bad();
+        synchronized ( this )
+        {
+            notify();
+        }
+    }
+
+    /**
+     * Notifies the cache monitor that the service shall shut down
+     */
+    public void notifyShutdown()
+    {
+        synchronized ( this )
+        {
+            this.shutdown = true;
+            notify();
+        }
+    }
+
+    /**
+     * Main processing method for the LateralCacheMonitor object
+     */
+    @Override
+    public void run()
+    {
+        do
+        {
+            if ( mode == ERROR )
+            {
+                if ( log.isDebugEnabled() )
+                {
+                    if ( allright )
+                    {
+                        log.debug( "ERROR DRIVEN MODE: allright = " + allright
+                            + ", connection monitor will wait for an error." );
+                    }
+                    else
+                    {
+                        log.debug( "ERROR DRIVEN MODE: allright = " + allright + " connection monitor running." );
+                    }
+                }
+
+                synchronized ( this )
+                {
+                    if ( allright )
+                    {
+                        // Failure driven mode.
+                        try
+                        {
+                            wait();
+                            // wake up only if there is an error.
+                        }
+                        catch ( InterruptedException ignore )
+                        {
+                            //no op, this is expected
+                        }
+                    }
+                }
+            }
+            else
+            {
+                log.debug( "TIME DRIVEN MODE: connection monitor will sleep for " + idlePeriod + " after this run." );
+                // Time driven mode: sleep between each round of recovery
+                // attempt.
+                // will need to test not just check status
+            }
+
+            // check for requested shutdown
+            synchronized ( this )
+            {
+                if (shutdown)
+                {
+                    log.info( "Shutting down cache monitor" );
+                    this.caches.clear();
+                    return;
+                }
+            }
+
+            // The "allright" flag must be false here.
+            // Simply presume we can fix all the errors until proven otherwise.
+            synchronized ( this )
+            {
+                allright = true;
+            }
+
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Cache monitor running." );
+            }
+
+            // Monitor each cache instance one after the other.
+            log.info( "Number of caches to monitor = " + caches.size() );
+            //for
+            for (Map.Entry<String, LateralCacheNoWait<?, ?>> entry : caches.entrySet())
+            {
+                String cacheName = entry.getKey();
+
+                @SuppressWarnings("unchecked") // Downcast to match service
+                LateralCacheNoWait<Serializable, Serializable> c =
+                        (LateralCacheNoWait<Serializable, Serializable>) entry.getValue();
+                if ( c.getStatus() == CacheStatus.ERROR )
+                {
+                    log.info( "Found LateralCacheNoWait in error, " + cacheName );
+
+                    ITCPLateralCacheAttributes lca = (ITCPLateralCacheAttributes)c.getAuxiliaryCacheAttributes();
+
+                    // Get service instance
+                    ICacheServiceNonLocal<Serializable, Serializable> cacheService = factory.getCSNLInstance(lca);
+
+                    // If we can't fix them, just skip and re-try in the
+                    // next round.
+                    if (cacheService instanceof ZombieCacheServiceNonLocal)
+                    {
+                        continue;
+                    }
+
+                    c.fixCache(cacheService);
+                }
+            }
+
+            try
+            {
+                // don't want to sleep after waking from an error
+                // run immediately and sleep here.
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "Lateral cache monitor sleeping for " + idlePeriod + " between runs." );
+                }
+
+                Thread.sleep( idlePeriod );
+            }
+            catch ( InterruptedException ex )
+            {
+                // ignore;
+            }
+        }
+        while ( true );
+    }
+
+    /**
+     * Sets the "allright" flag to false in a critical section.
+     */
+    private void bad()
+    {
+        if ( allright )
+        {
+            synchronized ( this )
+            {
+                allright = false;
+            }
+        }
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/lateral/LateralCacheNoWait.java b/src/org/apache/commons/jcs/auxiliary/lateral/LateralCacheNoWait.java
new file mode 100644
index 0000000..59a89fc
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/lateral/LateralCacheNoWait.java
@@ -0,0 +1,436 @@
+package org.apache.commons.jcs.auxiliary.lateral;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.AbstractAuxiliaryCache;
+import org.apache.commons.jcs.auxiliary.AuxiliaryCacheAttributes;
+import org.apache.commons.jcs.engine.CacheAdaptor;
+import org.apache.commons.jcs.engine.CacheEventQueueFactory;
+import org.apache.commons.jcs.engine.CacheInfo;
+import org.apache.commons.jcs.engine.CacheStatus;
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.behavior.ICacheEventQueue;
+import org.apache.commons.jcs.engine.behavior.ICacheServiceNonLocal;
+import org.apache.commons.jcs.engine.stats.StatElement;
+import org.apache.commons.jcs.engine.stats.Stats;
+import org.apache.commons.jcs.engine.stats.behavior.IStatElement;
+import org.apache.commons.jcs.engine.stats.behavior.IStats;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.IOException;
+import java.rmi.UnmarshalException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Used to queue up update requests to the underlying cache. These requests will be processed in
+ * their order of arrival via the cache event queue processor.
+ */
+public class LateralCacheNoWait<K, V>
+    extends AbstractAuxiliaryCache<K, V>
+{
+    /** The logger. */
+    private static final Log log = LogFactory.getLog( LateralCacheNoWait.class );
+
+    /** The cache */
+    private final LateralCache<K, V> cache;
+
+    /** The event queue */
+    private ICacheEventQueue<K, V> eventQueue;
+
+    /** times get called */
+    private int getCount = 0;
+
+    /** times remove called */
+    private int removeCount = 0;
+
+    /** times put called */
+    private int putCount = 0;
+
+    /**
+     * Constructs with the given lateral cache, and fires up an event queue for asynchronous
+     * processing.
+     * <p>
+     * @param cache
+     */
+    public LateralCacheNoWait( LateralCache<K, V> cache )
+    {
+        this.cache = cache;
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Constructing LateralCacheNoWait, LateralCache = [" + cache + "]" );
+        }
+
+        CacheEventQueueFactory<K, V> fact = new CacheEventQueueFactory<K, V>();
+        this.eventQueue = fact.createCacheEventQueue( new CacheAdaptor<K, V>( cache ), CacheInfo.listenerId, cache
+            .getCacheName(), cache.getAuxiliaryCacheAttributes().getEventQueuePoolName(), cache
+            .getAuxiliaryCacheAttributes().getEventQueueType() );
+
+        // need each no wait to handle each of its real updates and removes,
+        // since there may
+        // be more than one per cache? alternative is to have the cache
+        // perform updates using a different method that specifies the listener
+        // this.q = new CacheEventQueue(new CacheAdaptor(this),
+        // LateralCacheInfo.listenerId, cache.getCacheName());
+        if ( cache.getStatus() == CacheStatus.ERROR )
+        {
+            eventQueue.destroy();
+        }
+    }
+
+    /**
+     * @param ce
+     * @throws IOException
+     */
+    @Override
+    public void update( ICacheElement<K, V> ce )
+        throws IOException
+    {
+        putCount++;
+        try
+        {
+            eventQueue.addPutEvent( ce );
+        }
+        catch ( IOException ex )
+        {
+            log.error( ex );
+            eventQueue.destroy();
+        }
+    }
+
+    /**
+     * Synchronously reads from the lateral cache.
+     * <p>
+     * @param key
+     * @return ICacheElement<K, V> if found, else null
+     */
+    @Override
+    public ICacheElement<K, V> get( K key )
+    {
+        getCount++;
+        if ( this.getStatus() != CacheStatus.ERROR )
+        {
+            try
+            {
+                return cache.get( key );
+            }
+            catch ( UnmarshalException ue )
+            {
+                log.debug( "Retrying the get owing to UnmarshalException..." );
+                try
+                {
+                    return cache.get( key );
+                }
+                catch ( IOException ex )
+                {
+                    log.error( "Failed in retrying the get for the second time." );
+                    eventQueue.destroy();
+                }
+            }
+            catch ( IOException ex )
+            {
+                eventQueue.destroy();
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Gets multiple items from the cache based on the given set of keys.
+     * <p>
+     * @param keys
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data in cache for any of these keys
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> getMultiple(Set<K> keys)
+    {
+        Map<K, ICacheElement<K, V>> elements = new HashMap<K, ICacheElement<K, V>>();
+
+        if ( keys != null && !keys.isEmpty() )
+        {
+            for (K key : keys)
+            {
+                ICacheElement<K, V> element = get( key );
+
+                if ( element != null )
+                {
+                    elements.put( key, element );
+                }
+            }
+        }
+
+        return elements;
+    }
+
+    /**
+     * Synchronously reads from the lateral cache.
+     * <p>
+     * @param pattern
+     * @return ICacheElement<K, V> if found, else empty
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> getMatching(String pattern)
+    {
+        getCount++;
+        if ( this.getStatus() != CacheStatus.ERROR )
+        {
+            try
+            {
+                return cache.getMatching( pattern );
+            }
+            catch ( UnmarshalException ue )
+            {
+                log.debug( "Retrying the get owing to UnmarshalException." );
+                try
+                {
+                    return cache.getMatching( pattern );
+                }
+                catch ( IOException ex )
+                {
+                    log.error( "Failed in retrying the get for the second time." );
+                    eventQueue.destroy();
+                }
+            }
+            catch ( IOException ex )
+            {
+                eventQueue.destroy();
+            }
+        }
+        return Collections.emptyMap();
+    }
+
+    /**
+     * Return the keys in this cache.
+     * <p>
+     * @see org.apache.commons.jcs.auxiliary.AuxiliaryCache#getKeySet()
+     */
+    @Override
+    public Set<K> getKeySet() throws IOException
+    {
+        try
+        {
+            return cache.getKeySet();
+        }
+        catch ( IOException ex )
+        {
+            log.error( ex );
+            eventQueue.destroy();
+        }
+        return Collections.emptySet();
+    }
+
+    /**
+     * Adds a remove request to the lateral cache.
+     * <p>
+     * @param key
+     * @return always false
+     */
+    @Override
+    public boolean remove( K key )
+    {
+        removeCount++;
+        try
+        {
+            eventQueue.addRemoveEvent( key );
+        }
+        catch ( IOException ex )
+        {
+            log.error( ex );
+            eventQueue.destroy();
+        }
+        return false;
+    }
+
+    /** Adds a removeAll request to the lateral cache. */
+    @Override
+    public void removeAll()
+    {
+        try
+        {
+            eventQueue.addRemoveAllEvent();
+        }
+        catch ( IOException ex )
+        {
+            log.error( ex );
+            eventQueue.destroy();
+        }
+    }
+
+    /** Adds a dispose request to the lateral cache. */
+    @Override
+    public void dispose()
+    {
+        try
+        {
+            eventQueue.addDisposeEvent();
+        }
+        catch ( IOException ex )
+        {
+            log.error( ex );
+            eventQueue.destroy();
+        }
+    }
+
+    /**
+     * No lateral invocation.
+     * <p>
+     * @return The size value
+     */
+    @Override
+    public int getSize()
+    {
+        return cache.getSize();
+    }
+
+    /**
+     * No lateral invocation.
+     * <p>
+     * @return The cacheType value
+     */
+    @Override
+    public CacheType getCacheType()
+    {
+        return cache.getCacheType();
+    }
+
+    /**
+     * Returns the asyn cache status. An error status indicates either the lateral connection is not
+     * available, or the asyn queue has been unexpectedly destroyed. No lateral invocation.
+     * <p>
+     * @return The status value
+     */
+    @Override
+    public CacheStatus getStatus()
+    {
+        return eventQueue.isWorking() ? cache.getStatus() : CacheStatus.ERROR;
+    }
+
+    /**
+     * Gets the cacheName attribute of the LateralCacheNoWait object
+     * <p>
+     * @return The cacheName value
+     */
+    @Override
+    public String getCacheName()
+    {
+        return cache.getCacheName();
+    }
+
+    /**
+     * Replaces the lateral cache service handle with the given handle and reset the queue by
+     * starting up a new instance.
+     * <p>
+     * @param lateral
+     */
+    public void fixCache( ICacheServiceNonLocal<K, V> lateral )
+    {
+        cache.fixCache( lateral );
+        resetEventQ();
+    }
+
+    /**
+     * Resets the event q by first destroying the existing one and starting up new one.
+     */
+    public void resetEventQ()
+    {
+        if ( eventQueue.isWorking() )
+        {
+            eventQueue.destroy();
+        }
+        CacheEventQueueFactory<K, V> fact = new CacheEventQueueFactory<K, V>();
+        this.eventQueue = fact.createCacheEventQueue( new CacheAdaptor<K, V>( cache ), CacheInfo.listenerId, cache
+            .getCacheName(), cache.getAuxiliaryCacheAttributes().getEventQueuePoolName(), cache
+            .getAuxiliaryCacheAttributes().getEventQueueType() );
+    }
+
+    /**
+     * @return Returns the AuxiliaryCacheAttributes.
+     */
+    @Override
+    public AuxiliaryCacheAttributes getAuxiliaryCacheAttributes()
+    {
+        return cache.getAuxiliaryCacheAttributes();
+    }
+
+    /**
+     * getStats
+     * @return String
+     */
+    @Override
+    public String getStats()
+    {
+        return getStatistics().toString();
+    }
+
+    /**
+     * this won't be called since we don't do ICache logging here.
+     * <p>
+     * @return String
+     */
+    @Override
+    public String getEventLoggingExtraInfo()
+    {
+        return "Lateral Cache No Wait";
+    }
+
+    /**
+     * @return statistics about this communication
+     */
+    @Override
+    public IStats getStatistics()
+    {
+        IStats stats = new Stats();
+        stats.setTypeName( "Lateral Cache No Wait" );
+
+        ArrayList<IStatElement<?>> elems = new ArrayList<IStatElement<?>>();
+
+        // get the stats from the event queue too
+        IStats eqStats = this.eventQueue.getStatistics();
+        elems.addAll(eqStats.getStatElements());
+
+        elems.add(new StatElement<Integer>( "Get Count", Integer.valueOf(this.getCount) ) );
+        elems.add(new StatElement<Integer>( "Remove Count", Integer.valueOf(this.removeCount) ) );
+        elems.add(new StatElement<Integer>( "Put Count", Integer.valueOf(this.putCount) ) );
+        elems.add(new StatElement<AuxiliaryCacheAttributes>( "Attributes", cache.getAuxiliaryCacheAttributes() ) );
+
+        stats.setStatElements( elems );
+
+        return stats;
+    }
+
+    /**
+     * @return debugging info.
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder buf = new StringBuilder();
+        buf.append( " LateralCacheNoWait " );
+        buf.append( " Status = " + this.getStatus() );
+        buf.append( " cache = [" + cache.toString() + "]" );
+        return buf.toString();
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/lateral/LateralCacheNoWaitFacade.java b/src/org/apache/commons/jcs/auxiliary/lateral/LateralCacheNoWaitFacade.java
new file mode 100644
index 0000000..0a5d0b2
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/lateral/LateralCacheNoWaitFacade.java
@@ -0,0 +1,533 @@
+package org.apache.commons.jcs.auxiliary.lateral;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.AbstractAuxiliaryCache;
+import org.apache.commons.jcs.auxiliary.AuxiliaryCache;
+import org.apache.commons.jcs.auxiliary.AuxiliaryCacheAttributes;
+import org.apache.commons.jcs.auxiliary.lateral.behavior.ILateralCacheAttributes;
+import org.apache.commons.jcs.auxiliary.lateral.behavior.ILateralCacheListener;
+import org.apache.commons.jcs.engine.CacheStatus;
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.stats.StatElement;
+import org.apache.commons.jcs.engine.stats.Stats;
+import org.apache.commons.jcs.engine.stats.behavior.IStatElement;
+import org.apache.commons.jcs.engine.stats.behavior.IStats;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Used to provide access to multiple services under nowait protection. Composite factory should
+ * construct LateralCacheNoWaitFacade to give to the composite cache out of caches it constructs
+ * from the varies manager to lateral services. Perhaps the lateralcache factory should be able to
+ * do this.
+ */
+public class LateralCacheNoWaitFacade<K, V>
+    extends AbstractAuxiliaryCache<K, V>
+{
+    /** The logger */
+    private static final Log log = LogFactory.getLog( LateralCacheNoWaitFacade.class );
+
+    /** The queuing facade to the client. */
+    public LateralCacheNoWait<K, V>[] noWaits;
+
+    /** The region name */
+    private final String cacheName;
+
+    /** A cache listener */
+    private ILateralCacheListener<K, V> listener;
+
+    /** User configurable attributes. */
+    private final ILateralCacheAttributes lateralCacheAttributes;
+
+    /** Disposed state of this facade */
+    private boolean disposed = false;
+
+    /**
+     * Constructs with the given lateral cache, and fires events to any listeners.
+     * <p>
+     * @param noWaits
+     * @param cattr
+     */
+    public LateralCacheNoWaitFacade(ILateralCacheListener<K, V> listener, LateralCacheNoWait<K, V>[] noWaits, ILateralCacheAttributes cattr )
+    {
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "CONSTRUCTING NO WAIT FACADE" );
+        }
+        this.listener = listener;
+        this.noWaits = noWaits;
+        this.cacheName = cattr.getCacheName();
+        this.lateralCacheAttributes = cattr;
+    }
+
+    /**
+     * Tells you if the no wait is in the list or not.
+     * <p>
+     * @param noWait
+     * @return true if the noWait is in the list.
+     */
+    public boolean containsNoWait( LateralCacheNoWait<K, V> noWait )
+    {
+        for ( int i = 0; i < noWaits.length; i++ )
+        {
+            // we know noWait isn't null
+            if ( noWait.equals( noWaits[i] ) )
+            {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Adds a no wait to the list if it isn't already in the list.
+     * <p>
+     * @param noWait
+     * @return true if it wasn't already contained
+     */
+    public synchronized boolean addNoWait( LateralCacheNoWait<K, V> noWait )
+    {
+        if ( noWait == null )
+        {
+            return false;
+        }
+
+        if ( containsNoWait( noWait ) )
+        {
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "No Wait already contained, [" + noWait + "]" );
+            }
+            return false;
+        }
+
+        @SuppressWarnings("unchecked") // No generic arrays in java
+        LateralCacheNoWait<K, V>[] newArray = new LateralCacheNoWait[noWaits.length + 1];
+
+        System.arraycopy( noWaits, 0, newArray, 0, noWaits.length );
+
+        // set the last position to the new noWait
+        newArray[noWaits.length] = noWait;
+
+        noWaits = newArray;
+
+        return true;
+    }
+
+    /**
+     * Removes a no wait from the list if it is already there.
+     * <p>
+     * @param noWait
+     * @return true if it was already in the array
+     */
+    public synchronized boolean removeNoWait( LateralCacheNoWait<K, V> noWait )
+    {
+        if ( noWait == null )
+        {
+            return false;
+        }
+
+        int position = -1;
+        for ( int i = 0; i < noWaits.length; i++ )
+        {
+            // we know noWait isn't null
+            if ( noWait.equals( noWaits[i] ) )
+            {
+                position = i;
+                break;
+            }
+        }
+
+        if ( position == -1 )
+        {
+            return false;
+        }
+
+        @SuppressWarnings("unchecked") // No generic arrays in java
+        LateralCacheNoWait<K, V>[] newArray = new LateralCacheNoWait[noWaits.length - 1];
+
+        System.arraycopy( noWaits, 0, newArray, 0, position );
+        if ( noWaits.length != position )
+        {
+            System.arraycopy( noWaits, position + 1, newArray, position, noWaits.length - position - 1 );
+        }
+        noWaits = newArray;
+
+        return true;
+    }
+
+    /**
+     * @param ce
+     * @throws IOException
+     */
+    @Override
+    public void update( ICacheElement<K, V> ce )
+        throws IOException
+    {
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "updating through lateral cache facade, noWaits.length = " + noWaits.length );
+        }
+        try
+        {
+            for ( int i = 0; i < noWaits.length; i++ )
+            {
+                noWaits[i].update( ce );
+            }
+        }
+        catch ( Exception ex )
+        {
+            log.error( ex );
+        }
+    }
+
+    /**
+     * Synchronously reads from the lateral cache.
+     * <p>
+     * @param key
+     * @return ICacheElement
+     */
+    @Override
+    public ICacheElement<K, V> get( K key )
+    {
+        for ( int i = 0; i < noWaits.length; i++ )
+        {
+            try
+            {
+                ICacheElement<K, V> obj = noWaits[i].get( key );
+
+                if ( obj != null )
+                {
+                    // TODO: return after first success
+                    // could do this simultaneously
+                    // serious blocking risk here
+                    return obj;
+                }
+            }
+            catch ( Exception ex )
+            {
+                log.error( "Failed to get", ex );
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Gets multiple items from the cache based on the given set of keys.
+     * <p>
+     * @param keys
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data in cache for any of these keys
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> getMultiple(Set<K> keys)
+    {
+        Map<K, ICacheElement<K, V>> elements = new HashMap<K, ICacheElement<K, V>>();
+
+        if ( keys != null && !keys.isEmpty() )
+        {
+            for (K key : keys)
+            {
+                ICacheElement<K, V> element = get( key );
+
+                if ( element != null )
+                {
+                    elements.put( key, element );
+                }
+            }
+        }
+
+        return elements;
+    }
+
+    /**
+     * Synchronously reads from the lateral cache. Get a response from each! This will be slow.
+     * Merge them.
+     * <p>
+     * @param pattern
+     * @return ICacheElement
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> getMatching(String pattern)
+    {
+        Map<K, ICacheElement<K, V>> elements = new HashMap<K, ICacheElement<K, V>>();
+        for ( int i = 0; i < noWaits.length; i++ )
+        {
+            try
+            {
+                elements.putAll( noWaits[i].getMatching( pattern ) );
+            }
+            catch ( Exception ex )
+            {
+                log.error( "Failed to get", ex );
+            }
+        }
+        return elements;
+    }
+
+    /**
+     * Return the keys in this cache.
+     * <p>
+     * @see org.apache.commons.jcs.auxiliary.AuxiliaryCache#getKeySet()
+     */
+    @Override
+    public Set<K> getKeySet() throws IOException
+    {
+        HashSet<K> allKeys = new HashSet<K>();
+        for ( int i = 0; i < noWaits.length; i++ )
+        {
+            AuxiliaryCache<K, V> aux = noWaits[i];
+            if ( aux != null )
+            {
+                Set<K> keys = aux.getKeySet();
+                if(keys != null)
+                {
+                    allKeys.addAll( keys );
+                }
+            }
+        }
+        return allKeys;
+    }
+
+    /**
+     * Adds a remove request to the lateral cache.
+     * <p>
+     * @param key
+     * @return always false.
+     */
+    @Override
+    public boolean remove( K key )
+    {
+        try
+        {
+            for ( int i = 0; i < noWaits.length; i++ )
+            {
+                noWaits[i].remove( key );
+            }
+        }
+        catch ( Exception ex )
+        {
+            log.error( ex );
+        }
+        return false;
+    }
+
+    /**
+     * Adds a removeAll request to the lateral cache.
+     */
+    @Override
+    public void removeAll()
+    {
+        try
+        {
+            for ( int i = 0; i < noWaits.length; i++ )
+            {
+                noWaits[i].removeAll();
+            }
+        }
+        catch ( Exception ex )
+        {
+            log.error( ex );
+        }
+    }
+
+    /** Adds a dispose request to the lateral cache. */
+    @Override
+    public void dispose()
+    {
+        try
+        {
+            if ( listener != null )
+            {
+                listener.dispose();
+                listener = null;
+            }
+
+            for ( int i = 0; i < noWaits.length; i++ )
+            {
+                noWaits[i].dispose();
+            }
+        }
+        catch ( Exception ex )
+        {
+            log.error( ex );
+        }
+        finally
+        {
+            disposed = true;
+        }
+    }
+
+    /**
+     * No lateral invocation.
+     * @return The size value
+     */
+    @Override
+    public int getSize()
+    {
+        return 0;
+        //cache.getSize();
+    }
+
+    /**
+     * Gets the cacheType attribute of the LateralCacheNoWaitFacade object.
+     * <p>
+     * @return The cacheType value
+     */
+    @Override
+    public CacheType getCacheType()
+    {
+        return CacheType.LATERAL_CACHE;
+    }
+
+    /**
+     * Gets the cacheName attribute of the LateralCacheNoWaitFacade object.
+     * <p>
+     * @return The cacheName value
+     */
+    @Override
+    public String getCacheName()
+    {
+        return "";
+        //cache.getCacheName();
+    }
+
+    /**
+     * Gets the status attribute of the LateralCacheNoWaitFacade object
+     * @return The status value
+     */
+    @Override
+    public CacheStatus getStatus()
+    {
+        if (disposed)
+        {
+            return CacheStatus.DISPOSED;
+        }
+
+        if (noWaits.length == 0 || listener != null)
+        {
+            return CacheStatus.ALIVE;
+        }
+
+        CacheStatus[] statii = new CacheStatus[noWaits.length];
+        for (int i = 0; i < noWaits.length; i++)
+        {
+            statii[i] = noWaits[i].getStatus();
+        }
+        // It's alive if ANY of its nowaits is alive
+        for (int i = 0; i < noWaits.length; i++)
+        {
+            if (statii[i] == CacheStatus.ALIVE)
+            {
+                return CacheStatus.ALIVE;
+            }
+        }
+        // It's alive if ANY of its nowaits is in error, but
+        // none are alive, then it's in error
+        for (int i = 0; i < noWaits.length; i++)
+        {
+            if (statii[i] == CacheStatus.ERROR)
+            {
+                return CacheStatus.ERROR;
+            }
+        }
+
+        // Otherwise, it's been disposed, since it's the only status left
+        return CacheStatus.DISPOSED;
+    }
+
+    /**
+     * @return Returns the AuxiliaryCacheAttributes.
+     */
+    @Override
+    public AuxiliaryCacheAttributes getAuxiliaryCacheAttributes()
+    {
+        return this.lateralCacheAttributes;
+    }
+
+    /**
+     * @return "LateralCacheNoWaitFacade: " + cacheName;
+     */
+    @Override
+    public String toString()
+    {
+        return "LateralCacheNoWaitFacade: " + cacheName;
+    }
+
+    /**
+     * this won't be called since we don't do ICache logging here.
+     * <p>
+     * @return String
+     */
+    @Override
+    public String getEventLoggingExtraInfo()
+    {
+        return "Lateral Cache No Wait";
+    }
+
+    /**
+     * getStats
+     * @return String
+     */
+    @Override
+    public String getStats()
+    {
+        return getStatistics().toString();
+    }
+
+    /**
+     * @return IStats
+     */
+    @Override
+    public IStats getStatistics()
+    {
+        IStats stats = new Stats();
+        stats.setTypeName( "Lateral Cache No Wait Facade" );
+
+        ArrayList<IStatElement<?>> elems = new ArrayList<IStatElement<?>>();
+
+        if ( noWaits != null )
+        {
+            elems.add(new StatElement<Integer>( "Number of No Waits", Integer.valueOf(noWaits.length) ) );
+
+            for ( LateralCacheNoWait<K, V> lcnw : noWaits )
+            {
+                if ( lcnw != null )
+                {
+                    // get the stats from the super too
+                    IStats sStats = lcnw.getStatistics();
+                    elems.addAll(sStats.getStatElements());
+                }
+            }
+        }
+
+        stats.setStatElements( elems );
+
+        return stats;
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/lateral/LateralCommand.java b/src/org/apache/commons/jcs/auxiliary/lateral/LateralCommand.java
new file mode 100644
index 0000000..5c4ff57
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/lateral/LateralCommand.java
@@ -0,0 +1,47 @@
+package org.apache.commons.jcs.auxiliary.lateral;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Enumeration of the available lateral commands
+ */
+public enum LateralCommand
+{
+    /** The command for updates */
+    UPDATE,
+
+    /** The command for removes */
+    REMOVE,
+
+    /** The command instructing us to remove all */
+    REMOVEALL,
+
+    /** The command for disposing the cache. */
+    DISPOSE,
+
+    /** Command to return an object. */
+    GET,
+
+    /** Command to return an object. */
+    GET_MATCHING,
+
+    /** Command to get all keys */
+    GET_KEYSET
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/lateral/LateralElementDescriptor.java b/src/org/apache/commons/jcs/auxiliary/lateral/LateralElementDescriptor.java
new file mode 100644
index 0000000..85dced6
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/lateral/LateralElementDescriptor.java
@@ -0,0 +1,83 @@
+package org.apache.commons.jcs.auxiliary.lateral;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+
+import java.io.Serializable;
+
+/**
+ * This class wraps command to other laterals. It is essentially a
+ * JCS-TCP-Lateral packet. The headers specify the action the receiver should
+ * take.
+ */
+public class LateralElementDescriptor<K, V>
+    implements Serializable
+{
+    /** Don't change */
+    private static final long serialVersionUID = 5268222498076063575L;
+
+    /** The Cache Element that we are distributing. */
+    public ICacheElement<K, V> ce;
+
+    /**
+     * The id of the the source of the request. This is used to prevent infinite
+     * loops.
+     */
+    public long requesterId;
+
+    /** The operation has been requested by the client. */
+    public LateralCommand command = LateralCommand.UPDATE;
+
+    /**
+     * The hashcode value for this element.
+     */
+    public int valHashCode = -1;
+
+    /** Constructor for the LateralElementDescriptor object */
+    public LateralElementDescriptor()
+    {
+        super();
+    }
+
+    /**
+     * Constructor for the LateralElementDescriptor object
+     * <p>
+     * @param ce ICacheElement<K, V> payload
+     */
+    public LateralElementDescriptor( ICacheElement<K, V> ce )
+    {
+        this.ce = ce;
+    }
+
+    /**
+     * @return String, all the important values that can be configured
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder buf = new StringBuilder();
+        buf.append( "\n LateralElementDescriptor " );
+        buf.append( "\n command = [" + this.command + "]" );
+        buf.append( "\n valHashCode = [" + this.valHashCode + "]" );
+        buf.append( "\n ICacheElement = [" + this.ce + "]" );
+        return buf.toString();
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/lateral/behavior/ILateralCacheAttributes.java b/src/org/apache/commons/jcs/auxiliary/lateral/behavior/ILateralCacheAttributes.java
new file mode 100644
index 0000000..8c28981
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/lateral/behavior/ILateralCacheAttributes.java
@@ -0,0 +1,202 @@
+package org.apache.commons.jcs.auxiliary.lateral.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.AuxiliaryCacheAttributes;
+
+import java.io.Serializable;
+
+/**
+ * This interface defines configuration options common to lateral cache plugins.
+ * <p>
+ * TODO it needs to be trimmed down. The old version had features for every lateral. Now, the
+ * individual laterals have their own specific attributes interfaces.
+ */
+public interface ILateralCacheAttributes
+    extends Serializable, AuxiliaryCacheAttributes
+{
+    enum Type
+    {
+        /** HTTP type */
+        HTTP, // 1
+
+        /** UDP type */
+        UDP, // 2
+
+        /** TCP type */
+        TCP, // 3
+
+        /** XMLRPC type */
+        XMLRPC // 4
+    }
+
+    /**
+     * The number of elements the zombie queue will hold. This queue is used to store events if we
+     * loose our connection with the server.
+     */
+    int DEFAULT_ZOMBIE_QUEUE_MAX_SIZE = 1000;
+
+    /**
+     * Sets the httpServer attribute of the ILateralCacheAttributes object
+     * <p>
+     * @param val The new httpServer value
+     */
+    void setHttpServer( String val );
+
+    /**
+     * Gets the httpServer attribute of the ILateralCacheAttributes object
+     * <p>
+     * @return The httpServer value
+     */
+    String getHttpServer();
+
+    /**
+     * Sets the httpListenerPort attribute of the ILateralCacheAttributes object
+     * <p>
+     * @param val The new tcpListenerPort value
+     */
+    void setHttpListenerPort( int val );
+
+    /**
+     * Gets the httpListenerPort attribute of the ILateralCacheAttributes object
+     * <p>
+     * @return The httpListenerPort value
+     */
+    int getHttpListenerPort();
+
+    /**
+     * Sets the httpServers attribute of the LateralCacheAttributes object
+     * <p>
+     * @param val The new httpServers value
+     */
+    void setHttpServers( String val );
+
+    /**
+     * Gets the httpSrvers attribute of the LateralCacheAttributes object
+     * <p>
+     * @return The httpServers value
+     */
+    String getHttpServers();
+
+    /**
+     * Sets the udpMulticastAddr attribute of the ILateralCacheAttributes object
+     * <p>
+     * @param val The new udpMulticastAddr value
+     */
+    void setUdpMulticastAddr( String val );
+
+    /**
+     * Gets the udpMulticastAddr attribute of the ILateralCacheAttributes object
+     * <p>
+     * @return The udpMulticastAddr value
+     */
+    String getUdpMulticastAddr();
+
+    /**
+     * Sets the udpMulticastPort attribute of the ILateralCacheAttributes object
+     * <p>
+     * @param val The new udpMulticastPort value
+     */
+    void setUdpMulticastPort( int val );
+
+    /**
+     * Gets the udpMulticastPort attribute of the ILateralCacheAttributes object
+     * <p>
+     * @return The udpMulticastPort value
+     */
+    int getUdpMulticastPort();
+
+    /**
+     * Sets the transmissionType attribute of the ILateralCacheAttributes object
+     * <p>
+     * @param val The new transmissionType value
+     */
+    void setTransmissionType( Type val );
+
+    /**
+     * Gets the transmissionType attribute of the ILateralCacheAttributes object
+     * <p>
+     * @return The transmissionType value
+     */
+    Type getTransmissionType();
+
+    /**
+     * Sets the transmissionTypeName attribute of the ILateralCacheAttributes object
+     * <p>
+     * @param val The new transmissionTypeName value
+     */
+    void setTransmissionTypeName( String val );
+
+    /**
+     * Gets the transmissionTypeName attribute of the ILateralCacheAttributes object
+     * <p>
+     * @return The transmissionTypeName value
+     */
+    String getTransmissionTypeName();
+
+    /**
+     * Sets the putOnlyMode attribute of the ILateralCacheAttributes. When this is true the lateral
+     * cache will only issue put and remove order and will not try to retrieve elements from other
+     * lateral caches.
+     * <p>
+     * @param val The new transmissionTypeName value
+     */
+    void setPutOnlyMode( boolean val );
+
+    /**
+     * @return The outgoingOnlyMode value. Stops gets from going remote.
+     */
+    boolean getPutOnlyMode();
+
+    /**
+     * @param receive The receive to set.
+     */
+    void setReceive( boolean receive );
+
+    /**
+     * Should a listener be created. By default this is true.
+     * <p>
+     * If this is false the lateral will connect to others but it will not create a listener to
+     * receive.
+     * <p>
+     * It is possible if two laterals are misconfigured that lateral A may have a region R1 that is
+     * not configured for the lateral but another is. And if cache B has region R1 configured for
+     * lateral distribution, A will get messages for R1 but not send them.
+     * <p>
+     * @return true if we should have a listener connection
+     */
+    boolean isReceive();
+
+    /**
+     * The number of elements the zombie queue will hold. This queue is used to store events if we
+     * loose our connection with the server.
+     * <p>
+     * @param zombieQueueMaxSize The zombieQueueMaxSize to set.
+     */
+    void setZombieQueueMaxSize( int zombieQueueMaxSize );
+
+    /**
+     * The number of elements the zombie queue will hold. This queue is used to store events if we
+     * loose our connection with the server.
+     * <p>
+     * @return Returns the zombieQueueMaxSize.
+     */
+    int getZombieQueueMaxSize();
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/lateral/behavior/ILateralCacheListener.java b/src/org/apache/commons/jcs/auxiliary/lateral/behavior/ILateralCacheListener.java
new file mode 100644
index 0000000..581f593
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/lateral/behavior/ILateralCacheListener.java
@@ -0,0 +1,51 @@
+package org.apache.commons.jcs.auxiliary.lateral.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.behavior.ICacheListener;
+import org.apache.commons.jcs.engine.behavior.ICompositeCacheManager;
+
+/**
+ * Listens for lateral cache event notification.
+ */
+public interface ILateralCacheListener<K, V>
+    extends ICacheListener<K, V>
+{
+    /**
+     * Initialize this listener
+     */
+    void init();
+
+    /**
+     * @param cacheMgr
+     *            The cacheMgr to set.
+     */
+    void setCacheManager( ICompositeCacheManager cacheMgr );
+
+    /**
+     * @return Returns the cacheMgr.
+     */
+    ICompositeCacheManager getCacheManager();
+
+    /**
+     * Dispose this listener
+     */
+    void dispose();
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/lateral/package.html b/src/org/apache/commons/jcs/auxiliary/lateral/package.html
new file mode 100644
index 0000000..d38b4cc
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/lateral/package.html
@@ -0,0 +1,26 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<html>
+  <head>
+  </head>
+  <body>
+    Root package for the lateral cache family. Lateral caches broadcast puts
+    and removals to other local caches.
+  </body>
+</html>
diff --git a/src/org/apache/commons/jcs/auxiliary/lateral/socket/tcp/LateralTCPCacheFactory.java b/src/org/apache/commons/jcs/auxiliary/lateral/socket/tcp/LateralTCPCacheFactory.java
new file mode 100644
index 0000000..cb89348
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/lateral/socket/tcp/LateralTCPCacheFactory.java
@@ -0,0 +1,435 @@
+package org.apache.commons.jcs.auxiliary.lateral.socket.tcp;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.StringTokenizer;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.commons.jcs.auxiliary.AbstractAuxiliaryCacheFactory;
+import org.apache.commons.jcs.auxiliary.AuxiliaryCacheAttributes;
+import org.apache.commons.jcs.auxiliary.lateral.LateralCache;
+import org.apache.commons.jcs.auxiliary.lateral.LateralCacheMonitor;
+import org.apache.commons.jcs.auxiliary.lateral.LateralCacheNoWait;
+import org.apache.commons.jcs.auxiliary.lateral.LateralCacheNoWaitFacade;
+import org.apache.commons.jcs.auxiliary.lateral.behavior.ILateralCacheAttributes;
+import org.apache.commons.jcs.auxiliary.lateral.behavior.ILateralCacheListener;
+import org.apache.commons.jcs.auxiliary.lateral.socket.tcp.behavior.ITCPLateralCacheAttributes;
+import org.apache.commons.jcs.engine.CacheWatchRepairable;
+import org.apache.commons.jcs.engine.ZombieCacheServiceNonLocal;
+import org.apache.commons.jcs.engine.ZombieCacheWatch;
+import org.apache.commons.jcs.engine.behavior.ICache;
+import org.apache.commons.jcs.engine.behavior.ICacheServiceNonLocal;
+import org.apache.commons.jcs.engine.behavior.ICompositeCacheManager;
+import org.apache.commons.jcs.engine.behavior.IElementSerializer;
+import org.apache.commons.jcs.engine.behavior.IShutdownObserver;
+import org.apache.commons.jcs.engine.logging.behavior.ICacheEventLogger;
+import org.apache.commons.jcs.utils.discovery.UDPDiscoveryManager;
+import org.apache.commons.jcs.utils.discovery.UDPDiscoveryService;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Constructs a LateralCacheNoWaitFacade for the given configuration. Each lateral service / local
+ * relationship is managed by one manager. This manager can have multiple caches. The remote
+ * relationships are consolidated and restored via these managers.
+ * <p>
+ * The facade provides a front to the composite cache so the implementation is transparent.
+ */
+public class LateralTCPCacheFactory
+    extends AbstractAuxiliaryCacheFactory
+{
+    /** The logger */
+    private static final Log log = LogFactory.getLog( LateralTCPCacheFactory.class );
+
+    /** Address to service map. */
+    private ConcurrentHashMap<String, ICacheServiceNonLocal<?, ?>> csnlInstances;
+
+    /** Map of available discovery listener instances, keyed by port. */
+    private ConcurrentHashMap<String, LateralTCPDiscoveryListener> lTCPDLInstances;
+
+    /** Monitor thread */
+    private LateralCacheMonitor monitor;
+
+    /**
+     * Wrapper of the lateral cache watch service; or wrapper of a zombie
+     * service if failed to connect.
+     */
+    private CacheWatchRepairable lateralWatch;
+
+    /**
+     * Creates a TCP lateral.
+     * <p>
+     * @param iaca
+     * @param cacheMgr
+     * @param cacheEventLogger
+     * @param elementSerializer
+     * @return LateralCacheNoWaitFacade
+     */
+    @Override
+    public <K, V> LateralCacheNoWaitFacade<K, V> createCache(
+            AuxiliaryCacheAttributes iaca, ICompositeCacheManager cacheMgr,
+           ICacheEventLogger cacheEventLogger, IElementSerializer elementSerializer )
+    {
+        ITCPLateralCacheAttributes lac = (ITCPLateralCacheAttributes) iaca;
+        ArrayList<ICache<K, V>> noWaits = new ArrayList<ICache<K, V>>();
+
+        // pairs up the tcp servers and set the tcpServer value and
+        // get the manager and then get the cache
+        // no servers are required.
+        if ( lac.getTcpServers() != null )
+        {
+            StringTokenizer it = new StringTokenizer( lac.getTcpServers(), "," );
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Configured for [" + it.countTokens() + "]  servers." );
+            }
+            while ( it.hasMoreElements() )
+            {
+                String server = (String) it.nextElement();
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "tcp server = " + server );
+                }
+                ITCPLateralCacheAttributes lacC = (ITCPLateralCacheAttributes) lac.copy();
+                lacC.setTcpServer( server );
+
+                LateralCacheNoWait<K, V> lateralNoWait = createCacheNoWait(lacC, cacheEventLogger, elementSerializer);
+
+                addListenerIfNeeded( lacC, cacheMgr );
+                monitor.addCache(lateralNoWait);
+                noWaits.add( lateralNoWait );
+            }
+        }
+
+        ILateralCacheListener<K, V> listener = createListener( lac, cacheMgr );
+
+        // create the no wait facade.
+        @SuppressWarnings("unchecked") // No generic arrays in java
+        LateralCacheNoWait<K, V>[] lcnwArray = noWaits.toArray( new LateralCacheNoWait[0] );
+        LateralCacheNoWaitFacade<K, V> lcnwf =
+            new LateralCacheNoWaitFacade<K, V>(listener, lcnwArray, lac );
+
+        // create udp discovery if available.
+        createDiscoveryService( lac, lcnwf, cacheMgr, cacheEventLogger, elementSerializer );
+
+        return lcnwf;
+    }
+
+    protected <K, V> LateralCacheNoWait<K, V> createCacheNoWait( ITCPLateralCacheAttributes lca,
+            ICacheEventLogger cacheEventLogger, IElementSerializer elementSerializer )
+    {
+        ICacheServiceNonLocal<K, V> lateralService = getCSNLInstance(lca);
+
+        LateralCache<K, V> cache = new LateralCache<K, V>( lca, lateralService, this.monitor );
+        cache.setCacheEventLogger( cacheEventLogger );
+        cache.setElementSerializer( elementSerializer );
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Created cache for noWait, cache [" + cache + "]" );
+        }
+
+        LateralCacheNoWait<K, V> lateralNoWait = new LateralCacheNoWait<K, V>( cache );
+        lateralNoWait.setCacheEventLogger( cacheEventLogger );
+        lateralNoWait.setElementSerializer( elementSerializer );
+
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "Created LateralCacheNoWait for [" + lca + "] LateralCacheNoWait = [" + lateralNoWait
+                + "]" );
+        }
+
+        return lateralNoWait;
+    }
+
+    /**
+     * Initialize this factory
+     */
+    @Override
+    public void initialize()
+    {
+        this.csnlInstances = new ConcurrentHashMap<String, ICacheServiceNonLocal<?, ?>>();
+        this.lTCPDLInstances = new ConcurrentHashMap<String, LateralTCPDiscoveryListener>();
+
+        // Create the monitoring daemon thread
+        this.monitor = new LateralCacheMonitor(this);
+        this.monitor.setDaemon( true );
+
+        this.lateralWatch = new CacheWatchRepairable();
+        this.lateralWatch.setCacheWatch( new ZombieCacheWatch() );
+    }
+
+    /**
+     * Dispose of this factory, clean up shared resources
+     */
+    @Override
+    public void dispose()
+    {
+        for (ICacheServiceNonLocal<?, ?> service : this.csnlInstances.values())
+        {
+            try
+            {
+                service.dispose("");
+            }
+            catch (IOException e)
+            {
+                log.error("Could not dispose service " + service, e);
+            }
+        }
+
+        this.csnlInstances.clear();
+
+        // TODO: shut down discovery listeners
+        this.lTCPDLInstances.clear();
+
+        if (this.monitor != null)
+        {
+            this.monitor.notifyShutdown();
+            // this.monitor.join(5000);
+            this.monitor = null;
+        }
+    }
+
+    /**
+     * Returns an instance of the cache service.
+     * <p>
+     * @param lca configuration for the creation of a new service instance
+     *
+     * @return ICacheServiceNonLocal<K, V>
+     */
+    public <K, V> ICacheServiceNonLocal<K, V> getCSNLInstance( ITCPLateralCacheAttributes lca )
+    {
+        String key = lca.getTcpServer();
+        synchronized ( csnlInstances )
+        {
+            // Need to cast because of common map for all cache services
+            @SuppressWarnings("unchecked")
+            ICacheServiceNonLocal<K, V> service = (ICacheServiceNonLocal<K, V>)csnlInstances.get( key );
+
+            // If service creation did not succeed last time, force retry
+            if ( service instanceof ZombieCacheServiceNonLocal)
+            {
+                service = null;
+                log.info("Disposing of zombie service instance for [" + key + "]");
+            }
+
+            if ( service == null )
+            {
+                log.info( "Instance for [" + key + "] is null, creating" );
+
+                // Create the service
+                try
+                {
+                    if ( log.isInfoEnabled() )
+                    {
+                        log.info( "Creating TCP service, lca = " + lca );
+                    }
+
+                    service = new LateralTCPService<K, V>( lca );
+                }
+                catch ( IOException ex )
+                {
+                    // Failed to connect to the lateral server.
+                    // Configure this LateralCacheManager instance to use the
+                    // "zombie" services.
+                    log.error( "Failure, lateral instance will use zombie service", ex );
+
+                    service = new ZombieCacheServiceNonLocal<K, V>( lca.getZombieQueueMaxSize() );
+
+                    // Notify the cache monitor about the error, and kick off
+                    // the recovery process.
+                    monitor.notifyError();
+                }
+
+                csnlInstances.put( key, service );
+            }
+
+            return service;
+        }
+    }
+
+    /**
+     * Gets the instance attribute of the LateralCacheTCPListener class.
+     * <p>
+     * @param ilca ITCPLateralCacheAttributes
+     * @param cacheManager a reference to the global cache manager
+     *
+     * @return The instance value
+     */
+    private LateralTCPDiscoveryListener getDiscoveryListener( ITCPLateralCacheAttributes ilca, ICompositeCacheManager cacheManager )
+    {
+        String key = ilca.getUdpDiscoveryAddr() + ":" + ilca.getUdpDiscoveryPort();
+        LateralTCPDiscoveryListener ins = null;
+
+        LateralTCPDiscoveryListener newListener = new LateralTCPDiscoveryListener( this.getName(),  cacheManager);
+        ins = lTCPDLInstances.putIfAbsent(key, newListener );
+
+        if ( ins == null )
+        {
+            ins = newListener;
+
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "Created new discovery listener for " + key + " cacheName for request " + ilca.getCacheName() );
+            }
+        }
+
+        return ins;
+    }
+
+    /**
+     * Add listener for receivers
+     * <p>
+     * @param iaca cache configuration attributes
+     * @param cacheMgr the composite cache manager
+     */
+    private void addListenerIfNeeded( ITCPLateralCacheAttributes iaca, ICompositeCacheManager cacheMgr )
+    {
+        // don't create a listener if we are not receiving.
+        if ( iaca.isReceive() )
+        {
+            try
+            {
+                addLateralCacheListener( iaca.getCacheName(), LateralTCPListener.getInstance( iaca, cacheMgr ) );
+            }
+            catch ( IOException ioe )
+            {
+                log.error( "Problem creating lateral listener", ioe );
+            }
+        }
+        else
+        {
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Not creating a listener since we are not receiving." );
+            }
+        }
+    }
+
+    /**
+     * Adds the lateral cache listener to the underlying cache-watch service.
+     * <p>
+     * @param cacheName The feature to be added to the LateralCacheListener attribute
+     * @param listener The feature to be added to the LateralCacheListener attribute
+     * @throws IOException
+     */
+    private <K, V> void addLateralCacheListener( String cacheName, ILateralCacheListener<K, V> listener )
+        throws IOException
+    {
+        synchronized ( this.lateralWatch )
+        {
+            lateralWatch.addCacheListener( cacheName, listener );
+        }
+    }
+
+    /**
+     * Makes sure a listener gets created. It will get monitored as soon as it
+     * is used.
+     * <p>
+     * This should be called by create cache.
+     * <p>
+     * @param lac  ILateralCacheAttributes
+     * @param cacheMgr
+     *
+     * @return the listener if created, else null
+     */
+    private <K, V> ILateralCacheListener<K, V> createListener( ILateralCacheAttributes lac,
+            ICompositeCacheManager cacheMgr )
+    {
+        ITCPLateralCacheAttributes attr = (ITCPLateralCacheAttributes) lac;
+        ILateralCacheListener<K, V> listener = null;
+
+        // don't create a listener if we are not receiving.
+        if ( attr.isReceive() )
+        {
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "Getting listener for " + lac );
+            }
+
+            try
+            {
+                // make a listener. if one doesn't exist
+                listener = LateralTCPListener.getInstance( attr, cacheMgr );
+
+                // register for shutdown notification
+                cacheMgr.registerShutdownObserver( (IShutdownObserver) listener );
+            }
+            catch ( Exception e )
+            {
+                log.error( "Problem creating lateral listener", e );
+            }
+        }
+        else
+        {
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Not creating a listener since we are not receiving." );
+            }
+        }
+
+        return listener;
+    }
+
+    /**
+     * Creates the discovery service. Only creates this for tcp laterals right now.
+     * <p>
+     * @param lac ITCPLateralCacheAttributes
+     * @param lcnwf
+     * @param cacheMgr
+     * @param cacheEventLogger
+     * @param elementSerializer
+     * @return null if none is created.
+     */
+    private synchronized <K, V> UDPDiscoveryService createDiscoveryService(
+            ITCPLateralCacheAttributes lac,
+            LateralCacheNoWaitFacade<K, V> lcnwf,
+            ICompositeCacheManager cacheMgr,
+            ICacheEventLogger cacheEventLogger,
+            IElementSerializer elementSerializer )
+    {
+        UDPDiscoveryService discovery = null;
+
+        // create the UDP discovery for the TCP lateral
+        if ( lac.isUdpDiscoveryEnabled() )
+        {
+            // One can be used for all regions
+            LateralTCPDiscoveryListener discoveryListener = getDiscoveryListener( lac, cacheMgr );
+            discoveryListener.addNoWaitFacade( lac.getCacheName(), lcnwf );
+
+            // need a factory for this so it doesn't
+            // get dereferenced, also we don't want one for every region.
+            discovery = UDPDiscoveryManager.getInstance().getService( lac.getUdpDiscoveryAddr(),
+                                                                      lac.getUdpDiscoveryPort(),
+                                                                      lac.getTcpListenerPort(), cacheMgr);
+
+            discovery.addParticipatingCacheName( lac.getCacheName() );
+            discovery.addDiscoveryListener( discoveryListener );
+
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "Registered TCP lateral cache [" + lac.getCacheName() + "] with UDPDiscoveryService." );
+            }
+        }
+        return discovery;
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/lateral/socket/tcp/LateralTCPDiscoveryListener.java b/src/org/apache/commons/jcs/auxiliary/lateral/socket/tcp/LateralTCPDiscoveryListener.java
new file mode 100644
index 0000000..b0ceb2b
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/lateral/socket/tcp/LateralTCPDiscoveryListener.java
@@ -0,0 +1,343 @@
+package org.apache.commons.jcs.auxiliary.lateral.socket.tcp;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.AuxiliaryCache;
+import org.apache.commons.jcs.auxiliary.AuxiliaryCacheAttributes;
+import org.apache.commons.jcs.auxiliary.lateral.LateralCacheAttributes;
+import org.apache.commons.jcs.auxiliary.lateral.LateralCacheNoWait;
+import org.apache.commons.jcs.auxiliary.lateral.LateralCacheNoWaitFacade;
+import org.apache.commons.jcs.auxiliary.lateral.socket.tcp.behavior.ITCPLateralCacheAttributes;
+import org.apache.commons.jcs.engine.behavior.ICompositeCacheManager;
+import org.apache.commons.jcs.utils.discovery.DiscoveredService;
+import org.apache.commons.jcs.utils.discovery.behavior.IDiscoveryListener;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * This knows how to add and remove discovered services. It observes UDP discovery events.
+ * <p>
+ * We can have one listener per region, or one shared by all regions.
+ */
+public class LateralTCPDiscoveryListener
+    implements IDiscoveryListener
+{
+    /** The log factory */
+    private static final Log log = LogFactory.getLog( LateralTCPDiscoveryListener.class );
+
+    /**
+     * Map of no wait facades. these are used to determine which regions are locally configured to
+     * use laterals.
+     */
+    private final Map<String, LateralCacheNoWaitFacade<?, ?>> facades =
+        Collections.synchronizedMap( new HashMap<String, LateralCacheNoWaitFacade<?, ?>>() );
+
+    /**
+     * List of regions that are configured differently here than on another server. We keep track of
+     * this to limit the amount of info logging.
+     */
+    private final Set<String> knownDifferentlyConfiguredRegions =
+        Collections.synchronizedSet( new HashSet<String>() );
+
+    /** The name of the cache factory */
+    private String factoryName;
+
+    /** Reference to the cache manager for auxiliary cache access */
+    private ICompositeCacheManager cacheManager;
+
+    /**
+     * This plugs into the udp discovery system. It will receive add and remove events.
+     * <p>
+     * @param factoryName the name of the related cache factory
+     * @param cacheManager the global cache manager
+     */
+    protected LateralTCPDiscoveryListener( String factoryName, ICompositeCacheManager cacheManager )
+    {
+        this.factoryName = factoryName;
+        this.cacheManager = cacheManager;
+    }
+
+    /**
+     * Adds a nowait facade under this cachename. If one already existed, it will be overridden.
+     * <p>
+     * This adds nowaits to a facade for the region name. If the region has no facade, then it is
+     * not configured to use the lateral cache, and no facade will be created.
+     * <p>
+     * @param cacheName - the region name
+     * @param facade - facade (for region) => multiple lateral clients.
+     * @return true if the facade was not already registered.
+     */
+    public synchronized boolean addNoWaitFacade( String cacheName, LateralCacheNoWaitFacade<?, ?> facade )
+    {
+        boolean isNew = !containsNoWaitFacade( cacheName );
+
+        // override or put anew, it doesn't matter
+        facades.put( cacheName, facade );
+        knownDifferentlyConfiguredRegions.remove( cacheName );
+
+        return isNew;
+    }
+
+    /**
+     * Allows us to see if the facade is present.
+     * <p>
+     * @param cacheName - facades are for a region
+     * @return do we contain the no wait. true if so
+     */
+    public boolean containsNoWaitFacade( String cacheName )
+    {
+        return facades.containsKey( cacheName );
+    }
+
+    /**
+     * Allows us to see if the facade is present and if it has the no wait.
+     * <p>
+     * @param cacheName - facades are for a region
+     * @param noWait - is this no wait in the facade
+     * @return do we contain the no wait. true if so
+     */
+    public <K, V> boolean containsNoWait( String cacheName, LateralCacheNoWait<K, V> noWait )
+    {
+        @SuppressWarnings("unchecked") // Need to cast because of common map for all facades
+        LateralCacheNoWaitFacade<K, V> facade = (LateralCacheNoWaitFacade<K, V>)facades.get( noWait.getCacheName() );
+        if ( facade == null )
+        {
+            return false;
+        }
+
+        return facade.containsNoWait( noWait );
+    }
+
+    /**
+     * When a broadcast is received from the UDP Discovery receiver, for each cacheName in the
+     * message, the add no wait will be called here. To add a no wait, the facade is looked up for
+     * this cache name.
+     * <p>
+     * Each region has a facade. The facade contains a list of end points--the other tcp lateral
+     * services.
+     * <p>
+     * @param noWait
+     * @return true if we found the no wait and added it. False if the no wait was not present or it
+     *         we already had it.
+     */
+    protected <K, V> boolean addNoWait( LateralCacheNoWait<K, V> noWait )
+    {
+        @SuppressWarnings("unchecked") // Need to cast because of common map for all facades
+        LateralCacheNoWaitFacade<K, V> facade = (LateralCacheNoWaitFacade<K, V>)facades.get( noWait.getCacheName() );
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "addNoWait > Got facade for " + noWait.getCacheName() + " = " + facade );
+        }
+
+        if ( facade != null )
+        {
+            boolean isNew = facade.addNoWait( noWait );
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Called addNoWait, isNew = " + isNew );
+            }
+            return isNew;
+        }
+        else
+        {
+            if ( !knownDifferentlyConfiguredRegions.contains( noWait.getCacheName() ) )
+            {
+                if ( log.isInfoEnabled() )
+                {
+                    log.info( "addNoWait > Different nodes are configured differently or region ["
+                        + noWait.getCacheName() + "] is not yet used on this side.  " );
+                }
+                knownDifferentlyConfiguredRegions.add( noWait.getCacheName() );
+            }
+            return false;
+        }
+    }
+
+    /**
+     * Look up the facade for the name. If it doesn't exist, then the region is not configured for
+     * use with the lateral cache. If it is present, remove the item from the no wait list.
+     * <p>
+     * @param noWait
+     * @return true if we found the no wait and removed it. False if the no wait was not present.
+     */
+    protected <K, V> boolean removeNoWait( LateralCacheNoWait<K, V> noWait )
+    {
+        @SuppressWarnings("unchecked") // Need to cast because of common map for all facades
+        LateralCacheNoWaitFacade<K, V> facade = (LateralCacheNoWaitFacade<K, V>)facades.get( noWait.getCacheName() );
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "removeNoWait > Got facade for " + noWait.getCacheName() + " = " + facade );
+        }
+
+        if ( facade != null )
+        {
+            boolean removed = facade.removeNoWait( noWait );
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Called removeNoWait, removed " + removed );
+            }
+            return removed;
+        }
+        else
+        {
+            if ( !knownDifferentlyConfiguredRegions.contains( noWait.getCacheName() ) )
+            {
+                if ( log.isInfoEnabled() )
+                {
+                    log.info( "removeNoWait > Different nodes are configured differently or region ["
+                        + noWait.getCacheName() + "] is not yet used on this side.  " );
+                }
+                knownDifferentlyConfiguredRegions.add( noWait.getCacheName() );
+            }
+            return false;
+        }
+    }
+
+    /**
+     * Creates the lateral cache if needed.
+     * <p>
+     * We could go to the composite cache manager and get the the cache for the region. This would
+     * force a full configuration of the region. One advantage of this would be that the creation of
+     * the later would go through the factory, which would add the item to the no wait list. But we
+     * don't want to do this. This would force this client to have all the regions as the other.
+     * This might not be desired. We don't want to send or receive for a region here that is either
+     * not used or not configured to use the lateral.
+     * <p>
+     * Right now, I'm afraid that the region will get puts if another instance has the region
+     * configured to use the lateral and our address is configured. This might be a bug, but it
+     * shouldn't happen with discovery.
+     * <p>
+     * @param service
+     */
+    @Override
+    public void addDiscoveredService( DiscoveredService service )
+    {
+        // get a cache and add it to the no waits
+        // the add method should not add the same.
+        // we need the listener port from the original config.
+        ArrayList<String> regions = service.getCacheNames();
+        String serverAndPort = service.getServiceAddress() + ":" + service.getServicePort();
+
+        if ( regions != null )
+        {
+            // for each region get the cache
+            for (String cacheName : regions)
+            {
+                AuxiliaryCache<?, ?> ic = cacheManager.getAuxiliaryCache(factoryName, cacheName);
+
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "Got cache, ic = " + ic );
+                }
+
+                // add this to the nowaits for this cachename
+                if ( ic != null )
+                {
+                    AuxiliaryCacheAttributes aca = ic.getAuxiliaryCacheAttributes();
+                    if (aca instanceof ITCPLateralCacheAttributes)
+                    {
+                        ITCPLateralCacheAttributes lca = (ITCPLateralCacheAttributes)aca;
+                        if (lca.getTransmissionType() != LateralCacheAttributes.Type.TCP
+                            || !serverAndPort.equals(lca.getTcpServer()) )
+                        {
+                            // skip caches not belonging to this service
+                            continue;
+                        }
+                    }
+
+                    addNoWait( (LateralCacheNoWait<?, ?>) ic );
+                    if ( log.isDebugEnabled() )
+                    {
+                        log.debug( "Called addNoWait for cacheName [" + cacheName + "]" );
+                    }
+                }
+            }
+        }
+        else
+        {
+            log.warn( "No cache names found in message " + service );
+        }
+    }
+
+    /**
+     * Removes the lateral cache.
+     * <p>
+     * We need to tell the manager that this instance is bad, so it will reconnect the sender if it
+     * comes back.
+     * <p>
+     * @param service
+     */
+    @Override
+    public void removeDiscoveredService( DiscoveredService service )
+    {
+        // get a cache and add it to the no waits
+        // the add method should not add the same.
+        // we need the listener port from the original config.
+        ArrayList<String> regions = service.getCacheNames();
+        String serverAndPort = service.getServiceAddress() + ":" + service.getServicePort();
+
+        if ( regions != null )
+        {
+            // for each region get the cache
+            for (String cacheName : regions)
+            {
+                AuxiliaryCache<?, ?> ic = cacheManager.getAuxiliaryCache(factoryName, cacheName);
+
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "Got cache, ic = " + ic );
+                }
+
+                // remove this to the nowaits for this cachename
+                if ( ic != null )
+                {
+                    AuxiliaryCacheAttributes aca = ic.getAuxiliaryCacheAttributes();
+                    if (aca instanceof ITCPLateralCacheAttributes)
+                    {
+                        ITCPLateralCacheAttributes lca = (ITCPLateralCacheAttributes)aca;
+                        if (lca.getTransmissionType() != LateralCacheAttributes.Type.TCP
+                            || !serverAndPort.equals(lca.getTcpServer()) )
+                        {
+                            // skip caches not belonging to this service
+                            continue;
+                        }
+                    }
+
+                    removeNoWait( (LateralCacheNoWait<?, ?>) ic );
+                    if ( log.isDebugEnabled() )
+                    {
+                        log.debug( "Called removeNoWait for cacheName [" + cacheName + "]" );
+                    }
+                }
+            }
+        }
+        else
+        {
+            log.warn( "No cache names found in message " + service );
+        }
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/lateral/socket/tcp/LateralTCPListener.java b/src/org/apache/commons/jcs/auxiliary/lateral/socket/tcp/LateralTCPListener.java
new file mode 100644
index 0000000..aceaa1c
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/lateral/socket/tcp/LateralTCPListener.java
@@ -0,0 +1,774 @@
+package org.apache.commons.jcs.auxiliary.lateral.socket.tcp;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.access.exception.CacheException;
+import org.apache.commons.jcs.auxiliary.lateral.LateralElementDescriptor;
+import org.apache.commons.jcs.auxiliary.lateral.behavior.ILateralCacheListener;
+import org.apache.commons.jcs.auxiliary.lateral.socket.tcp.behavior.ITCPLateralCacheAttributes;
+import org.apache.commons.jcs.engine.CacheInfo;
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.behavior.ICompositeCacheManager;
+import org.apache.commons.jcs.engine.behavior.IShutdownObserver;
+import org.apache.commons.jcs.engine.control.CompositeCache;
+import org.apache.commons.jcs.engine.control.CompositeCacheManager;
+import org.apache.commons.jcs.io.ObjectInputStreamClassLoaderAware;
+import org.apache.commons.jcs.utils.threadpool.DaemonThreadFactory;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.net.InetAddress;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.net.SocketTimeoutException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+/**
+ * Listens for connections from other TCP lateral caches and handles them. The initialization method
+ * starts a listening thread, which creates a socket server. When messages are received they are
+ * passed to a pooled executor which then calls the appropriate handle method.
+ */
+public class LateralTCPListener<K, V>
+    implements ILateralCacheListener<K, V>, IShutdownObserver
+{
+    /** The logger */
+    private static final Log log = LogFactory.getLog( LateralTCPListener.class );
+
+    /** How long the server will block on an accept(). 0 is infinite. */
+    private static final int acceptTimeOut = 1000;
+
+    /** The CacheHub this listener is associated with */
+    private transient ICompositeCacheManager cacheManager;
+
+    /** Map of available instances, keyed by port */
+    private static final HashMap<String, ILateralCacheListener<?, ?>> instances =
+        new HashMap<String, ILateralCacheListener<?, ?>>();
+
+    /** The socket listener */
+    private ListenerThread receiver;
+
+    /** Configuration attributes */
+    private ITCPLateralCacheAttributes tcpLateralCacheAttributes;
+
+    /** Listening port */
+    private int port;
+
+    /** The processor. We should probably use an event queue here. */
+    private ExecutorService pooledExecutor;
+
+    /** put count */
+    private int putCnt = 0;
+
+    /** remove count */
+    private int removeCnt = 0;
+
+    /** get count */
+    private int getCnt = 0;
+
+    /**
+     * Use the vmid by default. This can be set for testing. If we ever need to run more than one
+     * per vm, then we need a new technique.
+     */
+    private long listenerId = CacheInfo.listenerId;
+
+    /** is this shut down? */
+    private boolean shutdown = false;
+
+    /** is this terminated? */
+    private boolean terminated = false;
+
+    /**
+     * Gets the instance attribute of the LateralCacheTCPListener class.
+     * <p>
+     * @param ilca ITCPLateralCacheAttributes
+     * @param cacheMgr
+     * @return The instance value
+     */
+    public synchronized static <K, V> LateralTCPListener<K, V>
+        getInstance( ITCPLateralCacheAttributes ilca, ICompositeCacheManager cacheMgr )
+    {
+        @SuppressWarnings("unchecked") // Need to cast because of common map for all instances
+        LateralTCPListener<K, V> ins = (LateralTCPListener<K, V>) instances.get( String.valueOf( ilca.getTcpListenerPort() ) );
+
+        if ( ins == null )
+        {
+            ins = new LateralTCPListener<K, V>( ilca );
+
+            ins.init();
+            ins.setCacheManager( cacheMgr );
+
+            instances.put( String.valueOf( ilca.getTcpListenerPort() ), ins );
+
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "Created new listener " + ilca.getTcpListenerPort() );
+            }
+        }
+
+        return ins;
+    }
+
+    /**
+     * Only need one since it does work for all regions, just reference by multiple region names.
+     * <p>
+     * @param ilca
+     */
+    protected LateralTCPListener( ITCPLateralCacheAttributes ilca )
+    {
+        this.setTcpLateralCacheAttributes( ilca );
+    }
+
+    /**
+     * This starts the ListenerThread on the specified port.
+     */
+    @Override
+    public synchronized void init()
+    {
+        try
+        {
+            this.port = getTcpLateralCacheAttributes().getTcpListenerPort();
+
+            pooledExecutor = Executors.newCachedThreadPool(
+                    new DaemonThreadFactory("JCS-LateralTCPListener-"));
+            terminated = false;
+            shutdown = false;
+
+            log.info( "Listening on port " + port );
+
+            ServerSocket serverSocket = new ServerSocket( port );
+            serverSocket.setSoTimeout( acceptTimeOut );
+
+            receiver = new ListenerThread(serverSocket);
+            receiver.setDaemon( true );
+            receiver.start();
+        }
+        catch ( Exception ex )
+        {
+            log.error( ex );
+            throw new IllegalStateException( ex.getMessage() );
+        }
+    }
+
+    /**
+     * Let the lateral cache set a listener_id. Since there is only one listener for all the
+     * regions and every region gets registered? the id shouldn't be set if it isn't zero. If it is
+     * we assume that it is a reconnect.
+     * <p>
+     * By default, the listener id is the vmid.
+     * <p>
+     * The service should set this value. This value will never be changed by a server we connect
+     * to. It needs to be non static, for unit tests.
+     * <p>
+     * The service will use the value it sets in all send requests to the sender.
+     * <p>
+     * @param id The new listenerId value
+     * @throws IOException
+     */
+    @Override
+    public void setListenerId( long id )
+        throws IOException
+    {
+        this.listenerId = id;
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "set listenerId = " + id );
+        }
+    }
+
+    /**
+     * Gets the listenerId attribute of the LateralCacheTCPListener object
+     * <p>
+     * @return The listenerId value
+     * @throws IOException
+     */
+    @Override
+    public long getListenerId()
+        throws IOException
+    {
+        return this.listenerId;
+    }
+
+    /**
+     * Increments the put count. Gets the cache that was injected by the lateral factory. Calls put
+     * on the cache.
+     * <p>
+     * @see org.apache.commons.jcs.engine.behavior.ICacheListener#handlePut(org.apache.commons.jcs.engine.behavior.ICacheElement)
+     */
+    @Override
+    public void handlePut( ICacheElement<K, V> element )
+        throws IOException
+    {
+        putCnt++;
+        if ( log.isInfoEnabled() )
+        {
+            if ( getPutCnt() % 100 == 0 )
+            {
+                log.info( "Put Count (port " + getTcpLateralCacheAttributes().getTcpListenerPort() + ") = "
+                    + getPutCnt() );
+            }
+        }
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "handlePut> cacheName=" + element.getCacheName() + ", key=" + element.getKey() );
+        }
+
+        getCache( element.getCacheName() ).localUpdate( element );
+    }
+
+    /**
+     * Increments the remove count. Gets the cache that was injected by the lateral factory. Calls
+     * remove on the cache.
+     * <p>
+     * @see org.apache.commons.jcs.engine.behavior.ICacheListener#handleRemove(java.lang.String,
+     *      Object)
+     */
+    @Override
+    public void handleRemove( String cacheName, K key )
+        throws IOException
+    {
+        removeCnt++;
+        if ( log.isInfoEnabled() )
+        {
+            if ( getRemoveCnt() % 100 == 0 )
+            {
+                log.info( "Remove Count = " + getRemoveCnt() );
+            }
+        }
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "handleRemove> cacheName=" + cacheName + ", key=" + key );
+        }
+
+        getCache( cacheName ).localRemove( key );
+    }
+
+    /**
+     * Gets the cache that was injected by the lateral factory. Calls removeAll on the cache.
+     * <p>
+     * @see org.apache.commons.jcs.engine.behavior.ICacheListener#handleRemoveAll(java.lang.String)
+     */
+    @Override
+    public void handleRemoveAll( String cacheName )
+        throws IOException
+    {
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "handleRemoveAll> cacheName=" + cacheName );
+        }
+
+        getCache( cacheName ).localRemoveAll();
+    }
+
+    /**
+     * Gets the cache that was injected by the lateral factory. Calls get on the cache.
+     * <p>
+     * @param cacheName
+     * @param key
+     * @return a ICacheElement
+     * @throws IOException
+     */
+    public ICacheElement<K, V> handleGet( String cacheName, K key )
+        throws IOException
+    {
+        getCnt++;
+        if ( log.isInfoEnabled() )
+        {
+            if ( getGetCnt() % 100 == 0 )
+            {
+                log.info( "Get Count (port " + getTcpLateralCacheAttributes().getTcpListenerPort() + ") = "
+                    + getGetCnt() );
+            }
+        }
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "handleGet> cacheName=" + cacheName + ", key = " + key );
+        }
+
+        return getCache( cacheName ).localGet( key );
+    }
+
+    /**
+     * Gets the cache that was injected by the lateral factory. Calls get on the cache.
+     * <p>
+     * @param cacheName the name of the cache
+     * @param pattern the matching pattern
+     * @return Map
+     * @throws IOException
+     */
+    public Map<K, ICacheElement<K, V>> handleGetMatching( String cacheName, String pattern )
+        throws IOException
+    {
+        getCnt++;
+        if ( log.isInfoEnabled() )
+        {
+            if ( getGetCnt() % 100 == 0 )
+            {
+                log.info( "GetMatching Count (port " + getTcpLateralCacheAttributes().getTcpListenerPort() + ") = "
+                    + getGetCnt() );
+            }
+        }
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "handleGetMatching> cacheName=" + cacheName + ", pattern = " + pattern );
+        }
+
+        return getCache( cacheName ).localGetMatching( pattern );
+    }
+
+    /**
+     * Gets the cache that was injected by the lateral factory. Calls getKeySet on the cache.
+     * <p>
+     * @param cacheName the name of the cache
+     * @return a set of keys
+     * @throws IOException
+     */
+    public Set<K> handleGetKeySet( String cacheName ) throws IOException
+    {
+    	return getCache( cacheName ).getKeySet(true);
+    }
+
+    /**
+     * This marks this instance as terminated.
+     * <p>
+     * @see org.apache.commons.jcs.engine.behavior.ICacheListener#handleDispose(java.lang.String)
+     */
+    @Override
+    public void handleDispose( String cacheName )
+        throws IOException
+    {
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "handleDispose > cacheName=" + cacheName + " | Ignoring message.  Do not dispose from remote." );
+        }
+
+        // TODO handle active deregistration, rather than passive detection
+        synchronized (this)
+        {
+            terminated = true;
+        }
+    }
+
+    @Override
+    public synchronized void dispose()
+    {
+        terminated = true;
+        notify();
+
+        pooledExecutor.shutdownNow();
+    }
+
+    /**
+     * Gets the cacheManager attribute of the LateralCacheTCPListener object.
+     * <p>
+     * Normally this is set by the factory. If it wasn't set the listener defaults to the expected
+     * singleton behavior of the cache manager.
+     * <p>
+     * @param name
+     * @return CompositeCache
+     */
+    protected CompositeCache<K, V> getCache( String name )
+    {
+        if ( getCacheManager() == null )
+        {
+            // revert to singleton on failure
+            try
+            {
+                setCacheManager( CompositeCacheManager.getInstance() );
+            }
+            catch (CacheException e)
+            {
+                throw new RuntimeException("Could not retrieve cache manager instance", e);
+            }
+
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "cacheMgr = " + getCacheManager() );
+            }
+        }
+
+        return getCacheManager().getCache( name );
+    }
+
+    /**
+     * This is roughly the number of updates the lateral has received.
+     * <p>
+     * @return Returns the putCnt.
+     */
+    public int getPutCnt()
+    {
+        return putCnt;
+    }
+
+    /**
+     * @return Returns the getCnt.
+     */
+    public int getGetCnt()
+    {
+        return getCnt;
+    }
+
+    /**
+     * @return Returns the removeCnt.
+     */
+    public int getRemoveCnt()
+    {
+        return removeCnt;
+    }
+
+    /**
+     * @param cacheMgr The cacheMgr to set.
+     */
+    @Override
+    public void setCacheManager( ICompositeCacheManager cacheMgr )
+    {
+        this.cacheManager = cacheMgr;
+    }
+
+    /**
+     * @return Returns the cacheMgr.
+     */
+    @Override
+    public ICompositeCacheManager getCacheManager()
+    {
+        return cacheManager;
+    }
+
+    /**
+     * @param tcpLateralCacheAttributes The tcpLateralCacheAttributes to set.
+     */
+    public void setTcpLateralCacheAttributes( ITCPLateralCacheAttributes tcpLateralCacheAttributes )
+    {
+        this.tcpLateralCacheAttributes = tcpLateralCacheAttributes;
+    }
+
+    /**
+     * @return Returns the tcpLateralCacheAttributes.
+     */
+    public ITCPLateralCacheAttributes getTcpLateralCacheAttributes()
+    {
+        return tcpLateralCacheAttributes;
+    }
+
+    /**
+     * Processes commands from the server socket. There should be one listener for each configured
+     * TCP lateral.
+     */
+    public class ListenerThread
+        extends Thread
+    {
+        /** The socket listener */
+        private final ServerSocket serverSocket;
+
+        /**
+         * Constructor
+         *
+         * @param serverSocket
+         */
+        public ListenerThread(ServerSocket serverSocket)
+        {
+            super();
+            this.serverSocket = serverSocket;
+        }
+
+        /** Main processing method for the ListenerThread object */
+        @SuppressWarnings("synthetic-access")
+        @Override
+        public void run()
+        {
+            try
+            {
+                ConnectionHandler handler;
+
+                outer: while ( true )
+                {
+                    if ( log.isDebugEnabled() )
+                    {
+                        log.debug( "Waiting for clients to connect " );
+                    }
+
+                    Socket socket = null;
+                    inner: while (true)
+                    {
+                        // Check to see if we've been asked to exit, and exit
+                        synchronized (LateralTCPListener.this)
+                        {
+                            if (terminated)
+                            {
+                                if (log.isDebugEnabled())
+                                {
+                                    log.debug("Thread terminated, exiting gracefully");
+                                }
+                                break outer;
+                            }
+                        }
+                        try
+                        {
+                            socket = serverSocket.accept();
+                            break inner;
+                        }
+                        catch (SocketTimeoutException e)
+                        {
+                            // No problem! We loop back up!
+                            continue inner;
+                        }
+                    }
+
+                    if ( socket != null && log.isDebugEnabled() )
+                    {
+                        InetAddress inetAddress = socket.getInetAddress();
+                        log.debug( "Connected to client at " + inetAddress );
+                    }
+
+                    handler = new ConnectionHandler( socket );
+                    pooledExecutor.execute( handler );
+                }
+            }
+            catch ( IOException e )
+            {
+                log.error( "Exception caught in TCP listener", e );
+            }
+            finally
+            {
+            	if (serverSocket != null)
+            	{
+            		try
+            		{
+						serverSocket.close();
+					}
+            		catch (IOException e)
+            		{
+                        log.error( "Exception caught closing socket", e );
+					}
+            	}
+            }
+        }
+    }
+
+    /**
+     * A Separate thread that runs when a command comes into the LateralTCPReceiver.
+     */
+    public class ConnectionHandler
+        implements Runnable
+    {
+        /** The socket connection, passed in via constructor */
+        private final Socket socket;
+
+        /**
+         * Construct for a given socket
+         * @param socket
+         */
+        public ConnectionHandler( Socket socket )
+        {
+            this.socket = socket;
+        }
+
+        /**
+         * Main processing method for the LateralTCPReceiverConnection object
+         */
+        @Override
+        @SuppressWarnings({"unchecked", // Need to cast from Object
+            "synthetic-access" })
+        public void run()
+        {
+            ObjectInputStream ois;
+
+            try
+            {
+                ois = new ObjectInputStreamClassLoaderAware( socket.getInputStream(), null );
+            }
+            catch ( Exception e )
+            {
+                log.error( "Could not open ObjectInputStream on " + socket, e );
+
+                return;
+            }
+
+            LateralElementDescriptor<K, V> led;
+
+            try
+            {
+                while ( true )
+                {
+                    led = (LateralElementDescriptor<K, V>) ois.readObject();
+
+                    if ( led == null )
+                    {
+                        log.debug( "LateralElementDescriptor is null" );
+                        continue;
+                    }
+                    if ( led.requesterId == getListenerId() )
+                    {
+                        log.debug( "from self" );
+                    }
+                    else
+                    {
+                        if ( log.isDebugEnabled() )
+                        {
+                            log.debug( "receiving LateralElementDescriptor from another" + "led = " + led
+                                + ", led.command = " + led.command + ", led.ce = " + led.ce );
+                        }
+
+                        handle( led );
+                    }
+                }
+            }
+            catch ( java.io.EOFException e )
+            {
+                log.info( "Caught java.io.EOFException closing connection." + e.getMessage() );
+            }
+            catch ( java.net.SocketException e )
+            {
+                log.info( "Caught java.net.SocketException closing connection." + e.getMessage() );
+            }
+            catch ( Exception e )
+            {
+                log.error( "Unexpected exception.", e );
+            }
+
+            try
+            {
+                ois.close();
+            }
+            catch ( IOException e )
+            {
+                log.error( "Could not close object input stream.", e );
+            }
+        }
+
+        /**
+         * This calls the appropriate method, based on the command sent in the Lateral element
+         * descriptor.
+         * <p>
+         * @param led
+         * @throws IOException
+         */
+        @SuppressWarnings("synthetic-access")
+        private void handle( LateralElementDescriptor<K, V> led )
+            throws IOException
+        {
+            String cacheName = led.ce.getCacheName();
+            K key = led.ce.getKey();
+            Serializable obj = null;
+
+            switch (led.command)
+            {
+                case UPDATE:
+                    handlePut( led.ce );
+                    break;
+
+                case REMOVE:
+                    // if a hashcode was given and filtering is on
+                    // check to see if they are the same
+                    // if so, then don't remove, otherwise issue a remove
+                    if ( led.valHashCode != -1 )
+                    {
+                        if ( getTcpLateralCacheAttributes().isFilterRemoveByHashCode() )
+                        {
+                            ICacheElement<K, V> test = getCache( cacheName ).localGet( key );
+                            if ( test != null )
+                            {
+                                if ( test.getVal().hashCode() == led.valHashCode )
+                                {
+                                    if ( log.isDebugEnabled() )
+                                    {
+                                        log.debug( "Filtering detected identical hashCode [" + led.valHashCode
+                                            + "], not issuing a remove for led " + led );
+                                    }
+                                    return;
+                                }
+                                else
+                                {
+                                    if ( log.isDebugEnabled() )
+                                    {
+                                        log.debug( "Different hashcodes, in cache [" + test.getVal().hashCode()
+                                            + "] sent [" + led.valHashCode + "]" );
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    handleRemove( cacheName, key );
+                    break;
+
+                case REMOVEALL:
+                    handleRemoveAll( cacheName );
+                    break;
+
+                case GET:
+                    obj = handleGet( cacheName, key );
+                    break;
+
+                case GET_MATCHING:
+                    obj = (Serializable) handleGetMatching( cacheName, (String) key );
+                    break;
+
+                case GET_KEYSET:
+                	obj = (Serializable) handleGetKeySet(cacheName);
+                    break;
+
+                default: break;
+            }
+
+            if (obj != null)
+            {
+                ObjectOutputStream oos = new ObjectOutputStream( socket.getOutputStream() );
+                oos.writeObject( obj );
+                oos.flush();
+            }
+        }
+    }
+
+    /**
+     * Shuts down the receiver.
+     */
+    @Override
+    public void shutdown()
+    {
+        if ( !shutdown )
+        {
+            shutdown = true;
+
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "Shutting down TCP Lateral receiver." );
+            }
+            receiver.interrupt();
+        }
+        else
+        {
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Shutdown already called." );
+            }
+        }
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/lateral/socket/tcp/LateralTCPSender.java b/src/org/apache/commons/jcs/auxiliary/lateral/socket/tcp/LateralTCPSender.java
new file mode 100644
index 0000000..445b65b
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/lateral/socket/tcp/LateralTCPSender.java
@@ -0,0 +1,272 @@
+package org.apache.commons.jcs.auxiliary.lateral.socket.tcp;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.lateral.LateralElementDescriptor;
+import org.apache.commons.jcs.auxiliary.lateral.socket.tcp.behavior.ITCPLateralCacheAttributes;
+import org.apache.commons.jcs.io.ObjectInputStreamClassLoaderAware;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.net.InetSocketAddress;
+import java.net.Socket;
+
+/**
+ * This class is based on the log4j SocketAppender class. I'm using a different repair structure, so
+ * it is significantly different.
+ */
+public class LateralTCPSender
+{
+    /** The logger */
+    private static final Log log = LogFactory.getLog( LateralTCPSender.class );
+
+    /** Config */
+    private int socketOpenTimeOut;
+    private int socketSoTimeOut;
+
+    /** The stream from the server connection. */
+    private ObjectOutputStream oos;
+
+    /** The socket connection with the server. */
+    private Socket socket;
+
+    /** how many messages sent */
+    private int sendCnt = 0;
+
+    /** Use to synchronize multiple threads that may be trying to get. */
+    private final Object getLock = new int[0];
+
+    /**
+     * Constructor for the LateralTCPSender object.
+     * <p>
+     * @param lca
+     * @throws IOException
+     */
+    public LateralTCPSender( ITCPLateralCacheAttributes lca )
+        throws IOException
+    {
+        this.socketOpenTimeOut = lca.getOpenTimeOut();
+        this.socketSoTimeOut = lca.getSocketTimeOut();
+
+        String p1 = lca.getTcpServer();
+        if ( p1 == null )
+        {
+            throw new IOException( "Invalid server (null)" );
+        }
+
+        String h2 = p1.substring( 0, p1.indexOf( ":" ) );
+        int po = Integer.parseInt( p1.substring( p1.indexOf( ":" ) + 1 ) );
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "h2 = " + h2 );
+            log.debug( "po = " + po );
+        }
+
+        if ( h2.length() == 0 )
+        {
+            throw new IOException( "Cannot connect to invalid address [" + h2 + ":" + po + "]" );
+        }
+
+        init( h2, po );
+    }
+
+    /**
+     * Creates a connection to a TCP server.
+     * <p>
+     * @param host
+     * @param port
+     * @throws IOException
+     */
+    protected void init( String host, int port )
+        throws IOException
+    {
+        try
+        {
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "Attempting connection to [" + host + "]" );
+            }
+
+            // have time out socket open do this for us
+            try
+            {
+                socket = new Socket();
+                socket.connect( new InetSocketAddress( host, port ), this.socketOpenTimeOut );
+            }
+            catch ( IOException ioe )
+            {
+                if (socket != null)
+                {
+                    socket.close();
+                }
+
+                throw new IOException( "Cannot connect to " + host + ":" + port, ioe );
+            }
+
+            socket.setSoTimeout( socketSoTimeOut );
+            synchronized ( this )
+            {
+                oos = new ObjectOutputStream( socket.getOutputStream() );
+            }
+        }
+        catch ( java.net.ConnectException e )
+        {
+            log.debug( "Remote host [" + host + "] refused connection." );
+            throw e;
+        }
+        catch ( IOException e )
+        {
+            log.debug( "Could not connect to [" + host + "]. Exception is " + e );
+            throw e;
+        }
+    }
+
+    /**
+     * Sends commands to the lateral cache listener.
+     * <p>
+     * @param led
+     * @throws IOException
+     */
+    public <K, V> void send( LateralElementDescriptor<K, V> led )
+        throws IOException
+    {
+        sendCnt++;
+        if ( log.isInfoEnabled() && sendCnt % 100 == 0 )
+        {
+            log.info( "Send Count (port " + socket.getPort() + ") = " + sendCnt );
+        }
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "sending LateralElementDescriptor" );
+        }
+
+        if ( led == null )
+        {
+            return;
+        }
+
+        if ( oos == null )
+        {
+            throw new IOException( "No remote connection is available for LateralTCPSender." );
+        }
+
+        synchronized ( this.getLock )
+        {
+            oos.writeUnshared( led );
+            oos.flush();
+        }
+    }
+
+    /**
+     * Sends commands to the lateral cache listener and gets a response. I'm afraid that we could
+     * get into a pretty bad blocking situation here. This needs work. I just wanted to get some
+     * form of get working. However, get is not recommended for performance reasons. If you have 10
+     * laterals, then you have to make 10 failed gets to find out none of the caches have the item.
+     * <p>
+     * @param led
+     * @return ICacheElement
+     * @throws IOException
+     */
+    public <K, V> Object sendAndReceive( LateralElementDescriptor<K, V> led )
+        throws IOException
+    {
+        if ( led == null )
+        {
+            return null;
+        }
+
+        if ( oos == null )
+        {
+            throw new IOException( "No remote connection is available for LateralTCPSender." );
+        }
+
+        Object response = null;
+
+        // Synchronized to insure that the get requests to server from this
+        // sender and the responses are processed in order, else you could
+        // return the wrong item from the cache.
+        // This is a big block of code. May need to re-think this strategy.
+        // This may not be necessary.
+        // Normal puts, etc to laterals do not have to be synchronized.
+        synchronized ( this.getLock )
+        {
+            try
+            {
+                // clean up input stream, nothing should be there yet.
+                if ( socket.getInputStream().available() > 0 )
+                {
+                    socket.getInputStream().read( new byte[socket.getInputStream().available()] );
+                }
+            }
+            catch ( IOException ioe )
+            {
+                log.error( "Problem cleaning socket before send " + socket, ioe );
+                throw ioe;
+            }
+
+            // write object to listener
+            oos.writeUnshared( led );
+            oos.flush();
+
+            try
+            {
+                socket.setSoTimeout( socketSoTimeOut );
+                ObjectInputStream ois = new ObjectInputStreamClassLoaderAware( socket.getInputStream(), null );
+                response = ois.readObject();
+            }
+            catch ( IOException ioe )
+            {
+                String message = "Could not open ObjectInputStream to " + socket;
+                message += " SoTimeout [" + socket.getSoTimeout() + "] Connected [" + socket.isConnected() + "]";
+                log.error( message, ioe );
+                throw ioe;
+            }
+            catch ( Exception e )
+            {
+                log.error( e );
+            }
+        }
+
+        return response;
+    }
+
+    /**
+     * Closes connection used by all LateralTCPSenders for this lateral connection. Dispose request
+     * should come into the facade and be sent to all lateral cache services. The lateral cache
+     * service will then call this method.
+     * <p>
+     * @throws IOException
+     */
+    public void dispose()
+        throws IOException
+    {
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "Dispose called" );
+        }
+        // WILL CLOSE CONNECTION USED BY ALL
+        oos.close();
+        socket.close();
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/lateral/socket/tcp/LateralTCPService.java b/src/org/apache/commons/jcs/auxiliary/lateral/socket/tcp/LateralTCPService.java
new file mode 100644
index 0000000..5b42bb9
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/lateral/socket/tcp/LateralTCPService.java
@@ -0,0 +1,458 @@
+package org.apache.commons.jcs.auxiliary.lateral.socket.tcp;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.lateral.LateralCommand;
+import org.apache.commons.jcs.auxiliary.lateral.LateralElementDescriptor;
+import org.apache.commons.jcs.auxiliary.lateral.socket.tcp.behavior.ITCPLateralCacheAttributes;
+import org.apache.commons.jcs.engine.CacheElement;
+import org.apache.commons.jcs.engine.CacheInfo;
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.behavior.ICacheServiceNonLocal;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * A lateral cache service implementation. Does not implement getGroupKey
+ * TODO: Remove generics
+ */
+public class LateralTCPService<K, V>
+    implements ICacheServiceNonLocal<K, V>
+{
+    /** The logger. */
+    private static final Log log = LogFactory.getLog( LateralTCPService.class );
+
+    /** special configuration */
+    private boolean allowPut;
+    private boolean allowGet;
+    private boolean issueRemoveOnPut;
+
+    /** Sends to another lateral. */
+    private LateralTCPSender sender;
+
+    /** use the vmid by default */
+    private long listenerId = CacheInfo.listenerId;
+
+    /**
+     * Constructor for the LateralTCPService object
+     * <p>
+     * @param lca ITCPLateralCacheAttributes
+     * @throws IOException
+     */
+    public LateralTCPService( ITCPLateralCacheAttributes lca )
+        throws IOException
+    {
+        this.allowGet = lca.isAllowGet();
+        this.allowPut = lca.isAllowPut();
+        this.issueRemoveOnPut = lca.isIssueRemoveOnPut();
+
+        try
+        {
+            sender = new LateralTCPSender( lca );
+
+            if ( log.isInfoEnabled() )
+            {
+                log.debug( "Created sender to [" + lca.getTcpServer() + "]" );
+            }
+        }
+        catch ( IOException e )
+        {
+            // log.error( "Could not create sender", e );
+            // This gets thrown over and over in recovery mode.
+            // The stack trace isn't useful here.
+            log.error( "Could not create sender to [" + lca.getTcpServer() + "] -- " + e.getMessage() );
+
+            throw e;
+        }
+    }
+
+    /**
+     * @param item
+     * @throws IOException
+     */
+    @Override
+    public void update( ICacheElement<K, V> item )
+        throws IOException
+    {
+        update( item, getListenerId() );
+    }
+
+    /**
+     * If put is allowed, we will issue a put. If issue put on remove is configured, we will issue a
+     * remove. Either way, we create a lateral element descriptor, which is essentially a JCS TCP
+     * packet. It describes what operation the receiver should take when it gets the packet.
+     * <p>
+     * @see org.apache.commons.jcs.engine.behavior.ICacheServiceNonLocal#update(org.apache.commons.jcs.engine.behavior.ICacheElement,
+     *      long)
+     */
+    @Override
+    public void update( ICacheElement<K, V> item, long requesterId )
+        throws IOException
+    {
+        // if we don't allow put, see if we should remove on put
+        if ( !this.allowPut &&
+            // if we can't remove on put, and we can't put then return
+            !this.issueRemoveOnPut )
+        {
+            return;
+        }
+
+        // if we shouldn't remove on put, then put
+        if ( !this.issueRemoveOnPut )
+        {
+            LateralElementDescriptor<K, V> led = new LateralElementDescriptor<K, V>( item );
+            led.requesterId = requesterId;
+            led.command = LateralCommand.UPDATE;
+            sender.send( led );
+        }
+        // else issue a remove with the hashcode for remove check on
+        // on the other end, this will be a server config option
+        else
+        {
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Issuing a remove for a put" );
+            }
+            // set the value to null so we don't send the item
+            CacheElement<K, V> ce = new CacheElement<K, V>( item.getCacheName(), item.getKey(), null );
+            LateralElementDescriptor<K, V> led = new LateralElementDescriptor<K, V>( ce );
+            led.requesterId = requesterId;
+            led.command = LateralCommand.REMOVE;
+            led.valHashCode = item.getVal().hashCode();
+            sender.send( led );
+        }
+    }
+
+    /**
+     * Uses the default listener id and calls the next remove method.
+     * <p>
+     * @see org.apache.commons.jcs.engine.behavior.ICacheService#remove(java.lang.String,
+     *      java.io.Serializable)
+     */
+    @Override
+    public void remove( String cacheName, K key )
+        throws IOException
+    {
+        remove( cacheName, key, getListenerId() );
+    }
+
+    /**
+     * Wraps the key in a LateralElementDescriptor.
+     * <p>
+     * @see org.apache.commons.jcs.engine.behavior.ICacheServiceNonLocal#remove(java.lang.String,
+     *      java.io.Serializable, long)
+     */
+    @Override
+    public void remove( String cacheName, K key, long requesterId )
+        throws IOException
+    {
+        CacheElement<K, V> ce = new CacheElement<K, V>( cacheName, key, null );
+        LateralElementDescriptor<K, V> led = new LateralElementDescriptor<K, V>( ce );
+        led.requesterId = requesterId;
+        led.command = LateralCommand.REMOVE;
+        sender.send( led );
+    }
+
+    /**
+     * Does nothing.
+     * <p>
+     * @throws IOException
+     */
+    @Override
+    public void release()
+        throws IOException
+    {
+        // nothing needs to be done
+    }
+
+    /**
+     * Will close the connection.
+     * <p>
+     * @param cacheName
+     * @throws IOException
+     */
+    @Override
+    public void dispose( String cacheName )
+        throws IOException
+    {
+        sender.dispose();
+    }
+
+    /**
+     * @param cacheName
+     * @param key
+     * @return ICacheElement<K, V> if found.
+     * @throws IOException
+     */
+    @Override
+    public ICacheElement<K, V> get( String cacheName, K key )
+        throws IOException
+    {
+        return get( cacheName, key, getListenerId() );
+    }
+
+    /**
+     * If get is allowed, we will issues a get request.
+     * <p>
+     * @param cacheName
+     * @param key
+     * @param requesterId
+     * @return ICacheElement<K, V> if found.
+     * @throws IOException
+     */
+    @Override
+    public ICacheElement<K, V> get( String cacheName, K key, long requesterId )
+        throws IOException
+    {
+        // if get is not allowed return
+        if ( this.allowGet )
+        {
+            CacheElement<K, V> ce = new CacheElement<K, V>( cacheName, key, null );
+            LateralElementDescriptor<K, V> led = new LateralElementDescriptor<K, V>( ce );
+            // led.requesterId = requesterId; // later
+            led.command = LateralCommand.GET;
+            @SuppressWarnings("unchecked") // Need to cast from Object
+            ICacheElement<K, V> response = (ICacheElement<K, V>)sender.sendAndReceive( led );
+            if ( response != null )
+            {
+                return response;
+            }
+            return null;
+        }
+        else
+        {
+            // nothing needs to be done
+            return null;
+        }
+    }
+
+    /**
+     * If allow get is true, we will issue a getmatching query.
+     * <p>
+     * @param cacheName
+     * @param pattern
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data in cache matching the pattern.
+     * @throws IOException
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> getMatching( String cacheName, String pattern )
+        throws IOException
+    {
+        return getMatching( cacheName, pattern, getListenerId() );
+    }
+
+    /**
+     * If allow get is true, we will issue a getmatching query.
+     * <p>
+     * @param cacheName
+     * @param pattern
+     * @param requesterId - our identity
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data in cache matching the pattern.
+     * @throws IOException
+     */
+    @Override
+    @SuppressWarnings("unchecked") // Need to cast from Object
+    public Map<K, ICacheElement<K, V>> getMatching( String cacheName, String pattern, long requesterId )
+        throws IOException
+    {
+        // if get is not allowed return
+        if ( this.allowGet )
+        {
+            CacheElement<String, String> ce = new CacheElement<String, String>( cacheName, pattern, null );
+            LateralElementDescriptor<String, String> led = new LateralElementDescriptor<String, String>( ce );
+            // led.requesterId = requesterId; // later
+            led.command = LateralCommand.GET_MATCHING;
+
+            Object response = sender.sendAndReceive( led );
+            if ( response != null )
+            {
+                return (Map<K, ICacheElement<K, V>>) response;
+            }
+            return Collections.emptyMap();
+        }
+        else
+        {
+            // nothing needs to be done
+            return null;
+        }
+    }
+
+    /**
+     * Gets multiple items from the cache based on the given set of keys.
+     * <p>
+     * @param cacheName
+     * @param keys
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data in cache for any of these keys
+     * @throws IOException
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> getMultiple( String cacheName, Set<K> keys )
+        throws IOException
+    {
+        return getMultiple( cacheName, keys, getListenerId() );
+    }
+
+    /**
+     * This issues a separate get for each item.
+     * <p>
+     * TODO We should change this. It should issue one request.
+     * <p>
+     * @param cacheName
+     * @param keys
+     * @param requesterId
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data in cache for any of these keys
+     * @throws IOException
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> getMultiple( String cacheName, Set<K> keys, long requesterId )
+        throws IOException
+    {
+        Map<K, ICacheElement<K, V>> elements = new HashMap<K, ICacheElement<K, V>>();
+
+        if ( keys != null && !keys.isEmpty() )
+        {
+            for (K key : keys)
+            {
+                ICacheElement<K, V> element = get( cacheName, key );
+
+                if ( element != null )
+                {
+                    elements.put( key, element );
+                }
+            }
+        }
+        return elements;
+    }
+
+    /**
+     * Return the keys in this cache.
+     * <p>
+     * @param cacheName the name of the cache region
+     * @see org.apache.commons.jcs.auxiliary.AuxiliaryCache#getKeySet()
+     */
+    @Override
+    @SuppressWarnings("unchecked") // Need cast from Object
+    public Set<K> getKeySet(String cacheName) throws IOException
+    {
+        CacheElement<String, String> ce = new CacheElement<String, String>(cacheName, null, null);
+        LateralElementDescriptor<String, String> led = new LateralElementDescriptor<String, String>(ce);
+        // led.requesterId = requesterId; // later
+        led.command = LateralCommand.GET_KEYSET;
+        Object response = sender.sendAndReceive(led);
+        if (response != null)
+        {
+            return (Set<K>) response;
+        }
+
+        return null;
+    }
+
+    /**
+     * @param cacheName
+     * @throws IOException
+     */
+    @Override
+    public void removeAll( String cacheName )
+        throws IOException
+    {
+        removeAll( cacheName, getListenerId() );
+    }
+
+    /**
+     * @param cacheName
+     * @param requesterId
+     * @throws IOException
+     */
+    @Override
+    public void removeAll( String cacheName, long requesterId )
+        throws IOException
+    {
+        CacheElement<String, String> ce = new CacheElement<String, String>( cacheName, "ALL", null );
+        LateralElementDescriptor<String, String> led = new LateralElementDescriptor<String, String>( ce );
+        led.requesterId = requesterId;
+        led.command = LateralCommand.REMOVEALL;
+        sender.send( led );
+    }
+
+    /**
+     * @param args
+     */
+    public static void main( String args[] )
+    {
+        try
+        {
+            LateralTCPSender sender = new LateralTCPSender( new TCPLateralCacheAttributes() );
+
+            // process user input till done
+            boolean notDone = true;
+            String message = null;
+            // wait to dispose
+            BufferedReader br = new BufferedReader( new InputStreamReader( System.in, "UTF-8" ) );
+
+            while ( notDone )
+            {
+                System.out.println( "enter message:" );
+                message = br.readLine();
+
+                if (message == null)
+                {
+                    notDone = false;
+                    continue;
+                }
+
+                CacheElement<String, String> ce = new CacheElement<String, String>( "test", "test", message );
+                LateralElementDescriptor<String, String> led = new LateralElementDescriptor<String, String>( ce );
+                sender.send( led );
+            }
+        }
+        catch ( IOException e )
+        {
+            System.out.println( e.toString() );
+        }
+    }
+
+    /**
+     * @param listernId The listernId to set.
+     */
+    protected void setListenerId( long listernId )
+    {
+        this.listenerId = listernId;
+    }
+
+    /**
+     * @return Returns the listernId.
+     */
+    protected long getListenerId()
+    {
+        return listenerId;
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/lateral/socket/tcp/TCPLateralCacheAttributes.java b/src/org/apache/commons/jcs/auxiliary/lateral/socket/tcp/TCPLateralCacheAttributes.java
new file mode 100644
index 0000000..5c6d55f
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/lateral/socket/tcp/TCPLateralCacheAttributes.java
@@ -0,0 +1,399 @@
+package org.apache.commons.jcs.auxiliary.lateral.socket.tcp;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.AuxiliaryCacheAttributes;
+import org.apache.commons.jcs.auxiliary.lateral.LateralCacheAttributes;
+import org.apache.commons.jcs.auxiliary.lateral.socket.tcp.behavior.ITCPLateralCacheAttributes;
+
+/**
+ * This interface defines functions that are particular to the TCP Lateral Cache plugin. It extends
+ * the generic LateralCacheAttributes interface which in turn extends the AuxiliaryCache interface.
+ */
+public class TCPLateralCacheAttributes
+    extends LateralCacheAttributes
+    implements ITCPLateralCacheAttributes
+{
+    /** Don't change. */
+    private static final long serialVersionUID = 1077889204513905220L;
+
+    /** default */
+    private static final String DEFAULT_UDP_DISCOVERY_ADDRESS = "228.5.6.7";
+
+    /** default */
+    private static final int DEFAULT_UDP_DISCOVERY_PORT = 6789;
+
+    /** default */
+    private static final boolean DEFAULT_UDP_DISCOVERY_ENABLED = true;
+
+    /** default */
+    private static final boolean DEFAULT_ALLOW_GET = true;
+
+    /** default */
+    private static final boolean DEFAULT_ALLOW_PUT = true;
+
+    /** default */
+    private static final boolean DEFAULT_ISSUE_REMOVE_FOR_PUT = false;
+
+    /** default */
+    private static final boolean DEFAULT_FILTER_REMOVE_BY_HASH_CODE = true;
+
+    /** default - Only block for 1 second before timing out on a read.*/
+    private static final int DEFAULT_SOCKET_TIME_OUT = 1000;
+
+    /** default - Only block for 2 seconds before timing out on startup.*/
+    private static final int DEFAULT_OPEN_TIMEOUT = 2000;
+
+    /** TCP -------------------------------------------- */
+    private String tcpServers = "";
+
+    /** used to identify the service that this manager will be operating on */
+    private String tcpServer = "";
+
+    /** The pot */
+    private int tcpListenerPort = 0;
+
+    /** udp discovery for tcp server */
+    private String udpDiscoveryAddr = DEFAULT_UDP_DISCOVERY_ADDRESS;
+
+    /** discovery port */
+    private int udpDiscoveryPort = DEFAULT_UDP_DISCOVERY_PORT;
+
+    /** discovery switch */
+    private boolean udpDiscoveryEnabled = DEFAULT_UDP_DISCOVERY_ENABLED;
+
+    /** can we put */
+    private boolean allowPut = DEFAULT_ALLOW_GET;
+
+    /** can we go laterally for a get */
+    private boolean allowGet = DEFAULT_ALLOW_PUT;
+
+    /** call remove when there is a put */
+    private boolean issueRemoveOnPut = DEFAULT_ISSUE_REMOVE_FOR_PUT;
+
+    /** don't remove it the hashcode is the same */
+    private boolean filterRemoveByHashCode = DEFAULT_FILTER_REMOVE_BY_HASH_CODE;
+
+    /** Only block for socketTimeOut seconds before timing out on a read.  */
+    private int socketTimeOut = DEFAULT_SOCKET_TIME_OUT;
+
+    /** Only block for openTimeOut seconds before timing out on startup. */
+    private int openTimeOut = DEFAULT_OPEN_TIMEOUT;
+
+    /**
+     * Sets the tcpServer attribute of the ILateralCacheAttributes object
+     * <p>
+     * @param val The new tcpServer value
+     */
+    @Override
+    public void setTcpServer( String val )
+    {
+        this.tcpServer = val;
+    }
+
+    /**
+     * Gets the tcpServer attribute of the ILateralCacheAttributes object
+     * <p>
+     * @return The tcpServer value
+     */
+    @Override
+    public String getTcpServer()
+    {
+        return this.tcpServer;
+    }
+
+    /**
+     * Sets the tcpServers attribute of the ILateralCacheAttributes object
+     * <p>
+     * @param val The new tcpServers value
+     */
+    @Override
+    public void setTcpServers( String val )
+    {
+        this.tcpServers = val;
+    }
+
+    /**
+     * Gets the tcpServers attribute of the ILateralCacheAttributes object
+     * <p>
+     * @return The tcpServers value
+     */
+    @Override
+    public String getTcpServers()
+    {
+        return this.tcpServers;
+    }
+
+    /**
+     * Sets the tcpListenerPort attribute of the ILateralCacheAttributes object
+     * <p>
+     * @param val The new tcpListenerPort value
+     */
+    @Override
+    public void setTcpListenerPort( int val )
+    {
+        this.tcpListenerPort = val;
+    }
+
+    /**
+     * Gets the tcpListenerPort attribute of the ILateralCacheAttributes object
+     * <p>
+     * @return The tcpListenerPort value
+     */
+    @Override
+    public int getTcpListenerPort()
+    {
+        return this.tcpListenerPort;
+    }
+
+    /**
+     * Can setup UDP Discovery. This only works for TCp laterals right now. It allows TCP laterals
+     * to find each other by broadcasting to a multicast port.
+     * <p>
+     * @param udpDiscoveryEnabled The udpDiscoveryEnabled to set.
+     */
+    @Override
+    public void setUdpDiscoveryEnabled( boolean udpDiscoveryEnabled )
+    {
+        this.udpDiscoveryEnabled = udpDiscoveryEnabled;
+    }
+
+    /**
+     * Whether or not TCP laterals can try to find each other by multicast communication.
+     * <p>
+     * @return Returns the udpDiscoveryEnabled.
+     */
+    @Override
+    public boolean isUdpDiscoveryEnabled()
+    {
+        return this.udpDiscoveryEnabled;
+    }
+
+    /**
+     * The port to use if UDPDiscovery is enabled.
+     * <p>
+     * @return Returns the udpDiscoveryPort.
+     */
+    @Override
+    public int getUdpDiscoveryPort()
+    {
+        return this.udpDiscoveryPort;
+    }
+
+    /**
+     * Sets the port to use if UDPDiscovery is enabled.
+     * <p>
+     * @param udpDiscoveryPort The udpDiscoveryPort to set.
+     */
+    @Override
+    public void setUdpDiscoveryPort( int udpDiscoveryPort )
+    {
+        this.udpDiscoveryPort = udpDiscoveryPort;
+    }
+
+    /**
+     * The address to broadcast to if UDPDiscovery is enabled.
+     * <p>
+     * @return Returns the udpDiscoveryAddr.
+     */
+    @Override
+    public String getUdpDiscoveryAddr()
+    {
+        return this.udpDiscoveryAddr;
+    }
+
+    /**
+     * Sets the address to broadcast to if UDPDiscovery is enabled.
+     * <p>
+     * @param udpDiscoveryAddr The udpDiscoveryAddr to set.
+     */
+    @Override
+    public void setUdpDiscoveryAddr( String udpDiscoveryAddr )
+    {
+        this.udpDiscoveryAddr = udpDiscoveryAddr;
+    }
+
+    /**
+     * Is the lateral allowed to try and get from other laterals.
+     * <p>
+     * This replaces the old putOnlyMode
+     * <p>
+     * @param allowGet
+     */
+    @Override
+    public void setAllowGet( boolean allowGet )
+    {
+        this.allowGet = allowGet;
+    }
+
+    /**
+     * Is the lateral allowed to try and get from other laterals.
+     * <p>
+     * @return true if the lateral will try to get
+     */
+    @Override
+    public boolean isAllowGet()
+    {
+        return this.allowGet;
+    }
+
+    /**
+     * Is the lateral allowed to put objects to other laterals.
+     * <p>
+     * @param allowPut
+     */
+    @Override
+    public void setAllowPut( boolean allowPut )
+    {
+        this.allowPut = allowPut;
+    }
+
+    /**
+     * Is the lateral allowed to put objects to other laterals.
+     * <p>
+     * @return true if puts are allowed
+     */
+    @Override
+    public boolean isAllowPut()
+    {
+        return this.allowPut;
+    }
+
+    /**
+     * Should the client send a remove command rather than a put when update is called. This is a
+     * client option, not a receiver option. This allows you to prevent the lateral from serializing
+     * objects.
+     * <p>
+     * @param issueRemoveOnPut
+     */
+    @Override
+    public void setIssueRemoveOnPut( boolean issueRemoveOnPut )
+    {
+        this.issueRemoveOnPut = issueRemoveOnPut;
+    }
+
+    /**
+     * Should the client send a remove command rather than a put when update is called. This is a
+     * client option, not a receiver option. This allows you to prevent the lateral from serializing
+     * objects.
+     * <p>
+     * @return true if updates will result in a remove command being sent.
+     */
+    @Override
+    public boolean isIssueRemoveOnPut()
+    {
+        return this.issueRemoveOnPut;
+    }
+
+    /**
+     * @return AuxiliaryCacheAttributes
+     */
+    @Override
+    public AuxiliaryCacheAttributes copy()
+    {
+        try
+        {
+            return (AuxiliaryCacheAttributes) this.clone();
+        }
+        catch ( Exception e )
+        {
+            //noop
+        }
+        return this;
+    }
+
+    /**
+     * Should the receiver try to match hashcodes. If true, the receiver will see if the client
+     * supplied a hshcode. If it did, then it will try to get the item locally. If the item exists,
+     * then it will compare the hashcode. if they are the same, it will not remove. This isn't
+     * perfect since different objects can have the same hashcode, but it is unlikely of objects of
+     * the same type.
+     * <p>
+     * @return boolean
+     */
+    @Override
+    public boolean isFilterRemoveByHashCode()
+    {
+        return this.filterRemoveByHashCode;
+    }
+
+    /**
+     * Should the receiver try to match hashcodes. If true, the receiver will see if the client
+     * supplied a hshcode. If it did, then it will try to get the item locally. If the item exists,
+     * then it will compare the hashcode. if they are the same, it will not remove. This isn't
+     * perfect since different objects can have the same hashcode, but it is unlikely of objects of
+     * the same type.
+     * <p>
+     * @param filter
+     */
+    @Override
+    public void setFilterRemoveByHashCode( boolean filter )
+    {
+        this.filterRemoveByHashCode = filter;
+    }
+
+    /**
+     * @param socketTimeOut the socketTimeOut to set
+     */
+    @Override
+    public void setSocketTimeOut( int socketTimeOut )
+    {
+        this.socketTimeOut = socketTimeOut;
+    }
+
+    /**
+     * @return the socketTimeOut
+     */
+    @Override
+    public int getSocketTimeOut()
+    {
+        return socketTimeOut;
+    }
+
+    /**
+     * @param openTimeOut the openTimeOut to set
+     */
+    @Override
+    public void setOpenTimeOut( int openTimeOut )
+    {
+        this.openTimeOut = openTimeOut;
+    }
+
+    /**
+     * @return the openTimeOut
+     */
+    @Override
+    public int getOpenTimeOut()
+    {
+        return openTimeOut;
+    }
+
+    /**
+     * Used to key the instance TODO create another method for this and use toString for debugging
+     * only.
+     * <p>
+     * @return String
+     */
+    @Override
+    public String toString()
+    {
+        return this.getTcpServer() + ":" + this.getTcpListenerPort();
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/lateral/socket/tcp/behavior/ITCPLateralCacheAttributes.java b/src/org/apache/commons/jcs/auxiliary/lateral/socket/tcp/behavior/ITCPLateralCacheAttributes.java
new file mode 100644
index 0000000..db12800
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/lateral/socket/tcp/behavior/ITCPLateralCacheAttributes.java
@@ -0,0 +1,218 @@
+package org.apache.commons.jcs.auxiliary.lateral.socket.tcp.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.lateral.behavior.ILateralCacheAttributes;
+
+/**
+ * This interface defines functions that are particular to the TCP Lateral Cache
+ * plugin. It extends the generic LateralCacheAttributes interface which in turn
+ * extends the AuxiliaryCache interface.
+ * <p>
+ * @author Aaron Smuts
+ */
+public interface ITCPLateralCacheAttributes
+    extends ILateralCacheAttributes
+{
+    /**
+     * Sets the tcpServer attribute of the ILateralCacheAttributes object
+     * <p>
+     * @param val
+     *            The new tcpServer value
+     */
+    void setTcpServer( String val );
+
+    /**
+     * Gets the tcpServer attribute of the ILateralCacheAttributes object
+     * <p>
+     * @return The tcpServer value
+     */
+    String getTcpServer();
+
+    /**
+     * Sets the tcpServers attribute of the ILateralCacheAttributes object
+     * <p>
+     * @param val
+     *            The new tcpServers value
+     */
+    void setTcpServers( String val );
+
+    /**
+     * Gets the tcpServers attribute of the ILateralCacheAttributes object
+     * <p>
+     * @return The tcpServers value
+     */
+    String getTcpServers();
+
+    /**
+     * Sets the tcpListenerPort attribute of the ILateralCacheAttributes object
+     * <p>
+     * @param val
+     *            The new tcpListenerPort value
+     */
+    void setTcpListenerPort( int val );
+
+    /**
+     * Gets the tcpListenerPort attribute of the ILateralCacheAttributes object
+     * <p>
+     * @return The tcpListenerPort value
+     */
+    int getTcpListenerPort();
+
+    /**
+     * Can setup UDP Discovery. This only works for TCp laterals right now. It
+     * allows TCP laterals to find each other by broadcasting to a multicast
+     * port.
+     * <p>
+     * @param udpDiscoveryEnabled
+     *            The udpDiscoveryEnabled to set.
+     */
+    void setUdpDiscoveryEnabled( boolean udpDiscoveryEnabled );
+
+    /**
+     * Whether or not TCP laterals can try to find each other by multicast
+     * communication.
+     * <p>
+     * @return Returns the udpDiscoveryEnabled.
+     */
+    boolean isUdpDiscoveryEnabled();
+
+    /**
+     * The port to use if UDPDiscovery is enabled.
+     * <p>
+     * @return Returns the udpDiscoveryPort.
+     */
+    int getUdpDiscoveryPort();
+
+    /**
+     * Sets the port to use if UDPDiscovery is enabled.
+     * <p>
+     * @param udpDiscoveryPort
+     *            The udpDiscoveryPort to set.
+     */
+    void setUdpDiscoveryPort( int udpDiscoveryPort );
+
+    /**
+     * The address to broadcast to if UDPDiscovery is enabled.
+     * <p>
+     * @return Returns the udpDiscoveryAddr.
+     */
+    String getUdpDiscoveryAddr();
+
+    /**
+     * Sets the address to broadcast to if UDPDiscovery is enabled.
+     * <p>
+     * @param udpDiscoveryAddr
+     *            The udpDiscoveryAddr to set.
+     */
+    void setUdpDiscoveryAddr( String udpDiscoveryAddr );
+
+    /**
+     * Is the lateral allowed to try and get from other laterals.
+     * <p>
+     * This replaces the old putOnlyMode
+     * <p>
+     * @param allowGet
+     */
+    void setAllowGet( boolean allowGet );
+
+    /**
+     * Is the lateral allowed to try and get from other laterals.
+     * <p>
+     * @return true if the lateral will try to get
+     */
+    boolean isAllowGet();
+
+    /**
+     * Is the lateral allowed to put objects to other laterals.
+     * <p>
+     * @param allowPut
+     */
+    void setAllowPut( boolean allowPut );
+
+    /**
+     * Is the lateral allowed to put objects to other laterals.
+     * <p>
+     * @return true if puts are allowed
+     */
+    boolean isAllowPut();
+
+    /**
+     * Should the client send a remove command rather than a put when update is
+     * called. This is a client option, not a receiver option. This allows you
+     * to prevent the lateral from serializing objects.
+     * <p>
+     * @param issueRemoveOnPut
+     */
+    void setIssueRemoveOnPut( boolean issueRemoveOnPut );
+
+    /**
+     * Should the client send a remove command rather than a put when update is
+     * called. This is a client option, not a receiver option. This allows you
+     * to prevent the lateral from serializing objects.
+     * <p>
+     * @return true if updates will result in a remove command being sent.
+     */
+    boolean isIssueRemoveOnPut();
+
+    /**
+     * Should the receiver try to match hashcodes. If true, the receiver will
+     * see if the client supplied a hashcode. If it did, then it will try to get
+     * the item locally. If the item exists, then it will compare the hashcode.
+     * if they are the same, it will not remove. This isn't perfect since
+     * different objects can have the same hashcode, but it is unlikely of
+     * objects of the same type.
+     * <p>
+     * @return boolean
+     */
+    boolean isFilterRemoveByHashCode();
+
+    /**
+     * Should the receiver try to match hashcodes. If true, the receiver will
+     * see if the client supplied a hashcode. If it did, then it will try to get
+     * the item locally. If the item exists, then it will compare the hashcode.
+     * if they are the same, it will not remove. This isn't perfect since
+     * different objects can have the same hashcode, but it is unlikely of
+     * objects of the same type.
+     * <p>
+     * @param filter
+     */
+    void setFilterRemoveByHashCode( boolean filter );
+
+    /**
+     * @param socketTimeOut the socketTimeOut to set
+     */
+    void setSocketTimeOut( int socketTimeOut );
+
+    /**
+     * @return the socketTimeOut
+     */
+    int getSocketTimeOut();
+
+    /**
+     * @param openTimeOut the openTimeOut to set
+     */
+    void setOpenTimeOut( int openTimeOut );
+
+    /**
+     * @return the openTimeOut
+     */
+    int getOpenTimeOut();
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/package.html b/src/org/apache/commons/jcs/auxiliary/package.html
new file mode 100644
index 0000000..d1d712f
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/package.html
@@ -0,0 +1,25 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<html>
+  <head>
+  </head>
+  <body>
+    Root package for auxiliary caches.
+  </body>
+</html>
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/AbstractRemoteAuxiliaryCache.java b/src/org/apache/commons/jcs/auxiliary/remote/AbstractRemoteAuxiliaryCache.java
new file mode 100644
index 0000000..bb4e805
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/AbstractRemoteAuxiliaryCache.java
@@ -0,0 +1,718 @@
+package org.apache.commons.jcs.auxiliary.remote;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.AbstractAuxiliaryCacheEventLogging;
+import org.apache.commons.jcs.auxiliary.AuxiliaryCacheAttributes;
+import org.apache.commons.jcs.auxiliary.remote.behavior.IRemoteCacheAttributes;
+import org.apache.commons.jcs.auxiliary.remote.behavior.IRemoteCacheClient;
+import org.apache.commons.jcs.auxiliary.remote.behavior.IRemoteCacheListener;
+import org.apache.commons.jcs.auxiliary.remote.server.behavior.RemoteType;
+import org.apache.commons.jcs.engine.CacheStatus;
+import org.apache.commons.jcs.engine.ZombieCacheServiceNonLocal;
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.behavior.ICacheElementSerialized;
+import org.apache.commons.jcs.engine.behavior.ICacheServiceNonLocal;
+import org.apache.commons.jcs.engine.behavior.IZombie;
+import org.apache.commons.jcs.engine.logging.behavior.ICacheEventLogger;
+import org.apache.commons.jcs.engine.stats.StatElement;
+import org.apache.commons.jcs.engine.stats.Stats;
+import org.apache.commons.jcs.engine.stats.behavior.IStatElement;
+import org.apache.commons.jcs.engine.stats.behavior.IStats;
+import org.apache.commons.jcs.utils.serialization.SerializationConversionUtil;
+import org.apache.commons.jcs.utils.threadpool.ThreadPoolManager;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+/** Abstract base for remote caches. I'm trying to break out and reuse common functionality. */
+public abstract class AbstractRemoteAuxiliaryCache<K, V>
+    extends AbstractAuxiliaryCacheEventLogging<K, V>
+    implements IRemoteCacheClient<K, V>
+{
+    /** The logger. */
+    private static final Log log = LogFactory.getLog( AbstractRemoteAuxiliaryCache.class );
+
+    /**
+     * This does the work. In an RMI instances, it will be a remote reference. In an http remote
+     * cache it will be an http client. In zombie mode it is replaced with a balking facade.
+     */
+    private ICacheServiceNonLocal<K, V> remoteCacheService;
+
+    /** The cacheName */
+    protected final String cacheName;
+
+    /** The listener. This can be null. */
+    private IRemoteCacheListener<K, V> remoteCacheListener;
+
+    /** The configuration values. TODO, we'll need a base here. */
+    private IRemoteCacheAttributes remoteCacheAttributes;
+
+    /** A thread pool for gets if configured. */
+    private ThreadPoolExecutor pool = null;
+
+    /** Should we get asynchronously using a pool. */
+    private boolean usePoolForGet = false;
+
+    /**
+     * Creates the base.
+     * <p>
+     * @param cattr
+     * @param remote
+     * @param listener
+     */
+    public AbstractRemoteAuxiliaryCache( IRemoteCacheAttributes cattr, ICacheServiceNonLocal<K, V> remote,
+                                         IRemoteCacheListener<K, V> listener )
+    {
+        this.setRemoteCacheAttributes( cattr );
+        this.cacheName = cattr.getCacheName();
+        this.setRemoteCacheService( remote );
+        this.setRemoteCacheListener( listener );
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Construct> cacheName=" + cattr.getCacheName() );
+            log.debug( "irca = " + getRemoteCacheAttributes() );
+            log.debug( "remote = " + remote );
+            log.debug( "listener = " + listener );
+        }
+
+        // use a pool if it is greater than 0
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "GetTimeoutMillis() = " + getRemoteCacheAttributes().getGetTimeoutMillis() );
+        }
+
+        if ( getRemoteCacheAttributes().getGetTimeoutMillis() > 0 )
+        {
+            pool = ThreadPoolManager.getInstance().getPool( getRemoteCacheAttributes().getThreadPoolName() );
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Thread Pool = " + pool );
+            }
+            if ( pool != null )
+            {
+                usePoolForGet = true;
+            }
+        }
+    }
+
+    /**
+     * Synchronously dispose the remote cache; if failed, replace the remote handle with a zombie.
+     * <p>
+     * @throws IOException
+     */
+    @Override
+    protected void processDispose()
+        throws IOException
+    {
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "Disposing of remote cache." );
+        }
+        try
+        {
+            if ( getRemoteCacheListener() != null )
+            {
+                getRemoteCacheListener().dispose();
+            }
+        }
+        catch ( Exception ex )
+        {
+            log.error( "Couldn't dispose", ex );
+            handleException( ex, "Failed to dispose [" + cacheName + "]", ICacheEventLogger.DISPOSE_EVENT );
+        }
+    }
+
+    /**
+     * Synchronously get from the remote cache; if failed, replace the remote handle with a zombie.
+     * <p>
+     * Use threadpool to timeout if a value is set for GetTimeoutMillis
+     * <p>
+     * If we are a cluster client, we need to leave the Element in its serialized form. Cluster
+     * clients cannot deserialize objects. Cluster clients get ICacheElementSerialized objects from
+     * other remote servers.
+     * <p>
+     * @param key
+     * @return ICacheElement, a wrapper around the key, value, and attributes
+     * @throws IOException
+     */
+    @Override
+    protected ICacheElement<K, V> processGet( K key )
+        throws IOException
+    {
+        ICacheElement<K, V> retVal = null;
+        try
+        {
+            if ( usePoolForGet )
+            {
+                retVal = getUsingPool( key );
+            }
+            else
+            {
+                retVal = getRemoteCacheService().get( cacheName, key, getListenerId() );
+            }
+
+            // Eventually the instance of will not be necessary.
+            if ( retVal != null && retVal instanceof ICacheElementSerialized )
+            {
+                // Never try to deserialize if you are a cluster client. Cluster
+                // clients are merely intra-remote cache communicators. Remote caches are assumed
+                // to have no ability to deserialize the objects.
+                if ( this.getRemoteCacheAttributes().getRemoteType() != RemoteType.CLUSTER )
+                {
+                    retVal = SerializationConversionUtil.getDeSerializedCacheElement( (ICacheElementSerialized<K, V>) retVal,
+                            super.getElementSerializer() );
+                }
+            }
+        }
+        catch ( Exception ex )
+        {
+            handleException( ex, "Failed to get [" + key + "] from [" + cacheName + "]", ICacheEventLogger.GET_EVENT );
+        }
+        return retVal;
+    }
+
+    /**
+     * This allows gets to timeout in case of remote server machine shutdown.
+     * <p>
+     * @param key
+     * @return ICacheElement
+     * @throws IOException
+     */
+    public ICacheElement<K, V> getUsingPool( final K key )
+        throws IOException
+    {
+        int timeout = getRemoteCacheAttributes().getGetTimeoutMillis();
+
+        try
+        {
+            Callable<ICacheElement<K, V>> command = new Callable<ICacheElement<K, V>>()
+            {
+                @Override
+                public ICacheElement<K, V> call()
+                    throws IOException
+                {
+                    return getRemoteCacheService().get( cacheName, key, getListenerId() );
+                }
+            };
+
+            // execute using the pool
+            Future<ICacheElement<K, V>> future = pool.submit(command);
+
+            // used timed get in order to timeout
+            ICacheElement<K, V> ice = future.get(timeout, TimeUnit.MILLISECONDS);
+
+            if ( log.isDebugEnabled() )
+            {
+                if ( ice == null )
+                {
+                    log.debug( "nothing found in remote cache" );
+                }
+                else
+                {
+                    log.debug( "found item in remote cache" );
+                }
+            }
+            return ice;
+        }
+        catch ( TimeoutException te )
+        {
+            log.warn( "TimeoutException, Get Request timed out after " + timeout );
+            throw new IOException( "Get Request timed out after " + timeout );
+        }
+        catch ( InterruptedException ex )
+        {
+            log.warn( "InterruptedException, Get Request timed out after " + timeout );
+            throw new IOException( "Get Request timed out after " + timeout );
+        }
+        catch (ExecutionException ex)
+        {
+            // assume that this is an IOException thrown by the callable.
+            log.error( "ExecutionException, Assuming an IO exception thrown in the background.", ex );
+            throw new IOException( "Get Request timed out after " + timeout );
+        }
+    }
+
+    /**
+     * Calls get matching on the server. Each entry in the result is unwrapped.
+     * <p>
+     * @param pattern
+     * @return Map
+     * @throws IOException
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> processGetMatching( String pattern )
+        throws IOException
+    {
+        Map<K, ICacheElement<K, V>> results = new HashMap<K, ICacheElement<K, V>>();
+        try
+        {
+            Map<K, ICacheElement<K, V>> rawResults = getRemoteCacheService().getMatching( cacheName, pattern, getListenerId() );
+
+            // Eventually the instance of will not be necessary.
+            if ( rawResults != null )
+            {
+                for (Map.Entry<K, ICacheElement<K, V>> entry : rawResults.entrySet())
+                {
+                    ICacheElement<K, V> unwrappedResult = null;
+                    if ( entry.getValue() instanceof ICacheElementSerialized )
+                    {
+                        // Never try to deserialize if you are a cluster client. Cluster
+                        // clients are merely intra-remote cache communicators. Remote caches are assumed
+                        // to have no ability to deserialize the objects.
+                        if ( this.getRemoteCacheAttributes().getRemoteType() != RemoteType.CLUSTER )
+                        {
+                            unwrappedResult = SerializationConversionUtil
+                                .getDeSerializedCacheElement( (ICacheElementSerialized<K, V>) entry.getValue(),
+                                        super.getElementSerializer() );
+                        }
+                    }
+                    else
+                    {
+                        unwrappedResult = entry.getValue();
+                    }
+                    results.put( entry.getKey(), unwrappedResult );
+                }
+            }
+        }
+        catch ( Exception ex )
+        {
+            handleException( ex, "Failed to getMatching [" + pattern + "] from [" + cacheName + "]",
+                             ICacheEventLogger.GET_EVENT );
+        }
+        return results;
+    }
+
+    /**
+     * Gets multiple items from the cache based on the given set of keys.
+     * <p>
+     * @param keys
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data in cache for any of these keys
+     * @throws IOException
+     */
+    @Override
+    protected Map<K, ICacheElement<K, V>> processGetMultiple( Set<K> keys )
+        throws IOException
+    {
+        Map<K, ICacheElement<K, V>> elements = new HashMap<K, ICacheElement<K, V>>();
+        if ( keys != null && !keys.isEmpty() )
+        {
+            for (K key : keys)
+            {
+                ICacheElement<K, V> element = get( key );
+
+                if ( element != null )
+                {
+                    elements.put( key, element );
+                }
+            }
+        }
+        return elements;
+    }
+
+    /**
+     * Synchronously remove from the remote cache; if failed, replace the remote handle with a
+     * zombie.
+     * <p>
+     * @param key
+     * @return boolean, whether or not the item was removed
+     * @throws IOException
+     */
+    @Override
+    protected boolean processRemove( K key )
+        throws IOException
+    {
+        if ( !this.getRemoteCacheAttributes().getGetOnly() )
+        {
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "remove> key=" + key );
+            }
+            try
+            {
+                getRemoteCacheService().remove( cacheName, key, getListenerId() );
+            }
+            catch ( Exception ex )
+            {
+                handleException( ex, "Failed to remove " + key + " from " + cacheName, ICacheEventLogger.REMOVE_EVENT );
+            }
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * Synchronously removeAll from the remote cache; if failed, replace the remote handle with a
+     * zombie.
+     * <p>
+     * @throws IOException
+     */
+    @Override
+    protected void processRemoveAll()
+        throws IOException
+    {
+        if ( !this.getRemoteCacheAttributes().getGetOnly() )
+        {
+            try
+            {
+                getRemoteCacheService().removeAll( cacheName, getListenerId() );
+            }
+            catch ( Exception ex )
+            {
+                handleException( ex, "Failed to remove all from " + cacheName, ICacheEventLogger.REMOVEALL_EVENT );
+            }
+        }
+    }
+
+    /**
+     * Serializes the object and then calls update on the remote server with the byte array. The
+     * byte array is wrapped in a ICacheElementSerialized. This allows the remote server to operate
+     * without any knowledge of caches classes.
+     * <p>
+     * @param ce
+     * @throws IOException
+     */
+    @Override
+    protected void processUpdate( ICacheElement<K, V> ce )
+        throws IOException
+    {
+        if ( !getRemoteCacheAttributes().getGetOnly() )
+        {
+            ICacheElementSerialized<K, V> serialized = null;
+            try
+            {
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "sending item to remote server" );
+                }
+
+                // convert so we don't have to know about the object on the
+                // other end.
+                serialized = SerializationConversionUtil.getSerializedCacheElement( ce, super.getElementSerializer() );
+
+                remoteCacheService.update( serialized, getListenerId() );
+            }
+            catch ( NullPointerException npe )
+            {
+                log.error( "npe for ce = " + ce + "ce.attr = " + ce.getElementAttributes(), npe );
+            }
+            catch ( Exception ex )
+            {
+                // event queue will wait and retry
+                handleException( ex, "Failed to put [" + ce.getKey() + "] to " + ce.getCacheName(),
+                                 ICacheEventLogger.UPDATE_EVENT );
+            }
+        }
+        else
+        {
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "get only mode, not sending to remote server" );
+            }
+        }
+    }
+
+    /**
+     * Return the keys in this cache.
+     * <p>
+     * @see org.apache.commons.jcs.auxiliary.AuxiliaryCache#getKeySet()
+     */
+    @Override
+    public Set<K> getKeySet()
+        throws java.rmi.RemoteException, IOException
+    {
+        return getRemoteCacheService().getKeySet(cacheName);
+    }
+
+    /**
+     * Allows other member of this package to access the listener. This is mainly needed for
+     * deregistering a listener.
+     * <p>
+     * @return IRemoteCacheListener, the listener for this remote server
+     */
+    @Override
+    public IRemoteCacheListener<K, V> getListener()
+    {
+        return getRemoteCacheListener();
+    }
+
+    /**
+     * let the remote cache set a listener_id. Since there is only one listener for all the regions
+     * and every region gets registered? the id shouldn't be set if it isn't zero. If it is we
+     * assume that it is a reconnect.
+     * <p>
+     * @param id The new listenerId value
+     */
+    public void setListenerId( long id )
+    {
+        if ( getRemoteCacheListener() != null )
+        {
+            try
+            {
+                getRemoteCacheListener().setListenerId( id );
+
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "set listenerId = " + id );
+                }
+            }
+            catch ( Exception e )
+            {
+                log.error( "Problem setting listenerId", e );
+            }
+        }
+    }
+
+    /**
+     * Gets the listenerId attribute of the RemoteCacheListener object
+     * <p>
+     * @return The listenerId value
+     */
+    @Override
+    public long getListenerId()
+    {
+        if ( getRemoteCacheListener() != null )
+        {
+            try
+            {
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "get listenerId = " + getRemoteCacheListener().getListenerId() );
+                }
+                return getRemoteCacheListener().getListenerId();
+            }
+            catch ( Exception e )
+            {
+                log.error( "Problem getting listenerId", e );
+            }
+        }
+        return -1;
+    }
+
+    /**
+     * Returns the current cache size.
+     * @return The size value
+     */
+    @Override
+    public int getSize()
+    {
+        return 0;
+    }
+
+    /**
+     * Custom exception handling some children.  This should be used to initiate failover.
+     * <p>
+     * @param ex
+     * @param msg
+     * @param eventName
+     * @throws IOException
+     */
+    protected abstract void handleException( Exception ex, String msg, String eventName )
+        throws IOException;
+
+    /**
+     * Gets the stats attribute of the RemoteCache object.
+     * <p>
+     * @return The stats value
+     */
+    @Override
+    public String getStats()
+    {
+        return getStatistics().toString();
+    }
+
+    /**
+     * @return IStats object
+     */
+    @Override
+    public IStats getStatistics()
+    {
+        IStats stats = new Stats();
+        stats.setTypeName( "AbstractRemoteAuxiliaryCache" );
+
+        ArrayList<IStatElement<?>> elems = new ArrayList<IStatElement<?>>();
+
+        elems.add(new StatElement<String>( "Remote Type", this.getRemoteCacheAttributes().getRemoteTypeName() ) );
+
+//      if ( this.getRemoteCacheAttributes().getRemoteType() == RemoteType.CLUSTER )
+//      {
+//          // something cluster specific
+//      }
+
+        elems.add(new StatElement<Boolean>( "UsePoolForGet", Boolean.valueOf(usePoolForGet) ) );
+
+        if ( pool != null )
+        {
+            elems.add(new StatElement<Integer>( "Pool Size", Integer.valueOf(pool.getPoolSize()) ) );
+            elems.add(new StatElement<Integer>( "Maximum Pool Size", Integer.valueOf(pool.getMaximumPoolSize()) ) );
+        }
+
+        if ( getRemoteCacheService() instanceof ZombieCacheServiceNonLocal )
+        {
+            elems.add(new StatElement<Integer>( "Zombie Queue Size",
+                    Integer.valueOf(( (ZombieCacheServiceNonLocal<K, V>) getRemoteCacheService() ).getQueueSize()) ) );
+        }
+
+        stats.setStatElements( elems );
+
+        return stats;
+    }
+
+    /**
+     * Returns the cache status. An error status indicates the remote connection is not available.
+     * <p>
+     * @return The status value
+     */
+    @Override
+    public CacheStatus getStatus()
+    {
+        return getRemoteCacheService() instanceof IZombie ? CacheStatus.ERROR : CacheStatus.ALIVE;
+    }
+
+    /**
+     * Replaces the current remote cache service handle with the given handle. If the current remote
+     * is a Zombie, then it propagates any events that are queued to the restored service.
+     * <p>
+     * @param restoredRemote ICacheServiceNonLocal -- the remote server or proxy to the remote server
+     */
+    @Override
+    public void fixCache( ICacheServiceNonLocal<?, ?> restoredRemote )
+    {
+        @SuppressWarnings("unchecked") // Don't know how to do this properly
+        ICacheServiceNonLocal<K, V> remote = (ICacheServiceNonLocal<K, V>)restoredRemote;
+        if ( getRemoteCacheService() != null && getRemoteCacheService() instanceof ZombieCacheServiceNonLocal )
+        {
+            ZombieCacheServiceNonLocal<K, V> zombie = (ZombieCacheServiceNonLocal<K, V>) getRemoteCacheService();
+            setRemoteCacheService( remote );
+            try
+            {
+                zombie.propagateEvents( remote );
+            }
+            catch ( Exception e )
+            {
+                try
+                {
+                    handleException( e, "Problem propagating events from Zombie Queue to new Remote Service.",
+                                     "fixCache" );
+                }
+                catch ( IOException e1 )
+                {
+                    // swallow, since this is just expected kick back.  Handle always throws
+                }
+            }
+        }
+        else
+        {
+            setRemoteCacheService( remote );
+        }
+    }
+
+
+    /**
+     * Gets the cacheType attribute of the RemoteCache object
+     * @return The cacheType value
+     */
+    @Override
+    public CacheType getCacheType()
+    {
+        return CacheType.REMOTE_CACHE;
+    }
+
+    /**
+     * Gets the cacheName attribute of the RemoteCache object.
+     * <p>
+     * @return The cacheName value
+     */
+    @Override
+    public String getCacheName()
+    {
+        return cacheName;
+    }
+
+    /**
+     * @param remote the remote to set
+     */
+    protected void setRemoteCacheService( ICacheServiceNonLocal<K, V> remote )
+    {
+        this.remoteCacheService = remote;
+    }
+
+    /**
+     * @return the remote
+     */
+    protected ICacheServiceNonLocal<K, V> getRemoteCacheService()
+    {
+        return remoteCacheService;
+    }
+
+    /**
+     * @return Returns the AuxiliaryCacheAttributes.
+     */
+    @Override
+    public AuxiliaryCacheAttributes getAuxiliaryCacheAttributes()
+    {
+        return getRemoteCacheAttributes();
+    }
+
+    /**
+     * @param remoteCacheAttributes the remoteCacheAttributes to set
+     */
+    protected void setRemoteCacheAttributes( IRemoteCacheAttributes remoteCacheAttributes )
+    {
+        this.remoteCacheAttributes = remoteCacheAttributes;
+    }
+
+    /**
+     * @return the remoteCacheAttributes
+     */
+    protected IRemoteCacheAttributes getRemoteCacheAttributes()
+    {
+        return remoteCacheAttributes;
+    }
+
+    /**
+     * @param remoteCacheListener the remoteCacheListener to set
+     */
+    protected void setRemoteCacheListener( IRemoteCacheListener<K, V> remoteCacheListener )
+    {
+        this.remoteCacheListener = remoteCacheListener;
+    }
+
+    /**
+     * @return the remoteCacheListener
+     */
+    protected IRemoteCacheListener<K, V> getRemoteCacheListener()
+    {
+        return remoteCacheListener;
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/AbstractRemoteCacheListener.java b/src/org/apache/commons/jcs/auxiliary/remote/AbstractRemoteCacheListener.java
new file mode 100644
index 0000000..1e79712
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/AbstractRemoteCacheListener.java
@@ -0,0 +1,350 @@
+package org.apache.commons.jcs.auxiliary.remote;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.access.exception.CacheException;
+import org.apache.commons.jcs.auxiliary.remote.behavior.IRemoteCacheAttributes;
+import org.apache.commons.jcs.auxiliary.remote.behavior.IRemoteCacheListener;
+import org.apache.commons.jcs.auxiliary.remote.server.behavior.RemoteType;
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.behavior.ICacheElementSerialized;
+import org.apache.commons.jcs.engine.behavior.ICompositeCacheManager;
+import org.apache.commons.jcs.engine.behavior.IElementSerializer;
+import org.apache.commons.jcs.engine.control.CompositeCache;
+import org.apache.commons.jcs.engine.control.CompositeCacheManager;
+import org.apache.commons.jcs.utils.net.HostNameUtil;
+import org.apache.commons.jcs.utils.serialization.SerializationConversionUtil;
+import org.apache.commons.jcs.utils.serialization.StandardSerializer;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.net.UnknownHostException;
+
+/** Shared listener base. */
+public abstract class AbstractRemoteCacheListener<K, V>
+    implements IRemoteCacheListener<K, V>, Serializable
+{
+    /** Don't change */
+    private static final long serialVersionUID = 32442324243243L;
+
+    /** The logger */
+    private static final Log log = LogFactory.getLog( AbstractRemoteCacheListener.class );
+
+    /** The cached name of the local host. The remote server gets this for logging purposes. */
+    private static String localHostName = null;
+
+    /**
+     * The cache manager used to put items in different regions. This is set lazily and should not
+     * be sent to the remote server.
+     */
+    private transient ICompositeCacheManager cacheMgr;
+
+    /** The remote cache configuration object. */
+    private final IRemoteCacheAttributes irca;
+
+    /** Number of put requests received. For debugging only. */
+    protected int puts = 0;
+
+    /** Number of remove requests received. For debugging only. */
+    protected int removes = 0;
+
+    /** This is set by the remote cache server. */
+    private long listenerId = 0;
+
+    /** Custom serializer. Standard by default. */
+    private transient IElementSerializer elementSerializer = new StandardSerializer();
+
+    /**
+     * Only need one since it does work for all regions, just reference by multiple region names.
+     * <p>
+     * The constructor exports this object, making it available to receive incoming calls. The
+     * callback port is anonymous unless a local port value was specified in the configuration.
+     * <p>
+     * @param irca
+     * @param cacheMgr
+     */
+    public AbstractRemoteCacheListener( IRemoteCacheAttributes irca, ICompositeCacheManager cacheMgr )
+    {
+        this.irca = irca;
+        this.cacheMgr = cacheMgr;
+    }
+
+    /**
+     * Let the remote cache set a listener_id. Since there is only one listener for all the regions
+     * and every region gets registered? the id shouldn't be set if it isn't zero. If it is we
+     * assume that it is a reconnect.
+     * <p>
+     * @param id The new listenerId value
+     * @throws IOException
+     */
+    @Override
+    public void setListenerId( long id )
+        throws IOException
+    {
+        listenerId = id;
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "set listenerId = [" + id + "]" );
+        }
+    }
+
+    /**
+     * Gets the listenerId attribute of the RemoteCacheListener object. This is stored in the
+     * object. The RemoteCache object contains a reference to the listener and get the id this way.
+     * <p>
+     * @return The listenerId value
+     * @throws IOException
+     */
+    @Override
+    public long getListenerId()
+        throws IOException
+    {
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "get listenerId = [" + listenerId + "]" );
+        }
+        return listenerId;
+
+    }
+
+    /**
+     * Gets the remoteType attribute of the RemoteCacheListener object <p.
+     * @return The remoteType value
+     * @throws IOException
+     */
+    @Override
+    public RemoteType getRemoteType()
+        throws IOException
+    {
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "getRemoteType = [" + irca.getRemoteType() + "]" );
+        }
+        return irca.getRemoteType();
+    }
+
+    /**
+     * If this is configured to remove on put, then remove the element since it has been updated
+     * elsewhere. cd should be incomplete for faster transmission. We don't want to pass data only
+     * invalidation. The next time it is used the local cache will get the new version from the
+     * remote store.
+     * <p>
+     * If remove on put is not configured, then update the item.
+     * @param cb
+     * @throws IOException
+     */
+    @Override
+    public void handlePut( ICacheElement<K, V> cb )
+        throws IOException
+    {
+        if ( irca.getRemoveUponRemotePut() )
+        {
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "PUTTING ELEMENT FROM REMOTE, (  invalidating ) " );
+            }
+            handleRemove( cb.getCacheName(), cb.getKey() );
+        }
+        else
+        {
+            puts++;
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "PUTTING ELEMENT FROM REMOTE, ( updating ) " );
+                log.debug( "cb = " + cb );
+
+                if ( puts % 100 == 0 )
+                {
+                    log.debug( "puts = " + puts );
+                }
+            }
+
+            CompositeCache<K, V> cache = getCacheManager().getCache( cb.getCacheName() );
+
+            // Eventually the instance of will not be necessary.
+            if ( cb instanceof ICacheElementSerialized )
+            {
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "Object needs to be deserialized." );
+                }
+                try
+                {
+                    cb = SerializationConversionUtil.getDeSerializedCacheElement(
+                            (ICacheElementSerialized<K, V>) cb, this.elementSerializer );
+                    if ( log.isDebugEnabled() )
+                    {
+                        log.debug( "Deserialized result = " + cb );
+                    }
+                }
+                catch ( IOException e )
+                {
+                    throw e;
+                }
+                catch ( ClassNotFoundException e )
+                {
+                    log.error( "Received a serialized version of a class that we don't know about.", e );
+                }
+            }
+
+            cache.localUpdate( cb );
+        }
+    }
+
+    /**
+     * Calls localRemove on the CompositeCache.
+     * <p>
+     * @param cacheName
+     * @param key
+     * @throws IOException
+     */
+    @Override
+    public void handleRemove( String cacheName, K key )
+        throws IOException
+    {
+        removes++;
+        if ( log.isDebugEnabled() )
+        {
+            if ( removes % 100 == 0 )
+            {
+                log.debug( "removes = " + removes );
+            }
+
+            log.debug( "handleRemove> cacheName=" + cacheName + ", key=" + key );
+        }
+
+        CompositeCache<K, V> cache = getCacheManager().getCache( cacheName );
+
+        cache.localRemove( key );
+    }
+
+    /**
+     * Calls localRemoveAll on the CompositeCache.
+     * <p>
+     * @param cacheName
+     * @throws IOException
+     */
+    @Override
+    public void handleRemoveAll( String cacheName )
+        throws IOException
+    {
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "handleRemoveAll> cacheName=" + cacheName );
+        }
+
+        CompositeCache<K, V> cache = getCacheManager().getCache( cacheName );
+        cache.localRemoveAll();
+    }
+
+    /**
+     * @param cacheName
+     * @throws IOException
+     */
+    @Override
+    public void handleDispose( String cacheName )
+        throws IOException
+    {
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "handleDispose> cacheName=" + cacheName );
+        }
+        // TODO consider what to do here, we really don't want to
+        // dispose, we just want to disconnect.
+        // just allow the cache to go into error recovery mode.
+        // getCacheManager().freeCache( cacheName, true );
+    }
+
+    /**
+     * Gets the cacheManager attribute of the RemoteCacheListener object. This is one of the few
+     * places that force the cache to be a singleton.
+     */
+    protected ICompositeCacheManager getCacheManager()
+    {
+        if ( cacheMgr == null )
+        {
+            try
+            {
+                cacheMgr = CompositeCacheManager.getInstance();
+
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "had to get cacheMgr" );
+                    log.debug( "cacheMgr = " + cacheMgr );
+                }
+            }
+            catch (CacheException e)
+            {
+                log.error( "Could not get cacheMgr", e );
+            }
+        }
+        else
+        {
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "already got cacheMgr = " + cacheMgr );
+            }
+        }
+
+        return cacheMgr;
+    }
+
+    /**
+     * This is for debugging. It allows the remote server to log the address of clients.
+     * <p>
+     * @return String
+     * @throws IOException
+     */
+    @Override
+    public synchronized String getLocalHostAddress()
+        throws IOException
+    {
+        if ( localHostName == null )
+        {
+            try
+            {
+                localHostName = HostNameUtil.getLocalHostAddress();
+            }
+            catch ( UnknownHostException uhe )
+            {
+                localHostName = "unknown";
+            }
+        }
+        return localHostName;
+    }
+
+    /**
+     * For easier debugging.
+     * <p>
+     * @return Basic info on this listener.
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder buf = new StringBuilder();
+        buf.append( "\n AbstractRemoteCacheListener: " );
+        buf.append( "\n RemoteHost = " + irca.getRemoteHost() );
+        buf.append( "\n RemotePort = " + irca.getRemotePort() );
+        buf.append( "\n ListenerId = " + listenerId );
+        return buf.toString();
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/AbstractRemoteCacheNoWaitFacade.java b/src/org/apache/commons/jcs/auxiliary/remote/AbstractRemoteCacheNoWaitFacade.java
new file mode 100644
index 0000000..623f3ed
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/AbstractRemoteCacheNoWaitFacade.java
@@ -0,0 +1,472 @@
+package org.apache.commons.jcs.auxiliary.remote;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.AbstractAuxiliaryCache;
+import org.apache.commons.jcs.auxiliary.AuxiliaryCache;
+import org.apache.commons.jcs.auxiliary.AuxiliaryCacheAttributes;
+import org.apache.commons.jcs.auxiliary.remote.behavior.IRemoteCacheAttributes;
+import org.apache.commons.jcs.engine.CacheStatus;
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.behavior.ICompositeCacheManager;
+import org.apache.commons.jcs.engine.behavior.IElementSerializer;
+import org.apache.commons.jcs.engine.logging.behavior.ICacheEventLogger;
+import org.apache.commons.jcs.engine.stats.StatElement;
+import org.apache.commons.jcs.engine.stats.Stats;
+import org.apache.commons.jcs.engine.stats.behavior.IStatElement;
+import org.apache.commons.jcs.engine.stats.behavior.IStats;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+/** An abstract base for the No Wait Facade.  Different implementations will failover differently. */
+public abstract class AbstractRemoteCacheNoWaitFacade<K, V>
+    extends AbstractAuxiliaryCache<K, V>
+{
+    /** log instance */
+    private static final Log log = LogFactory.getLog( AbstractRemoteCacheNoWaitFacade.class );
+
+    /** The connection to a remote server, or a zombie. */
+    public RemoteCacheNoWait<K, V>[] noWaits; // TODO privatise if possible
+
+    /** The cache name */
+    private final String cacheName;
+
+    /** holds failover and cluster information */
+    private IRemoteCacheAttributes remoteCacheAttributes;
+
+    /** A cache manager */
+    private ICompositeCacheManager compositeCacheManager;
+
+    /**
+     * Constructs with the given remote cache, and fires events to any listeners.
+     * <p>
+     * @param noWaits
+     * @param rca
+     * @param cacheMgr
+     * @param cacheEventLogger
+     * @param elementSerializer
+     */
+    public AbstractRemoteCacheNoWaitFacade( RemoteCacheNoWait<K, V>[] noWaits, RemoteCacheAttributes rca,
+                                    ICompositeCacheManager cacheMgr, ICacheEventLogger cacheEventLogger,
+                                    IElementSerializer elementSerializer )
+    {
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "CONSTRUCTING NO WAIT FACADE" );
+        }
+        this.noWaits = noWaits;
+        this.remoteCacheAttributes = rca;
+        this.cacheName = rca.getCacheName();
+        setCompositeCacheManager( cacheMgr );
+        setCacheEventLogger( cacheEventLogger );
+        setElementSerializer( elementSerializer );
+    }
+
+    /**
+     * Put an element in the cache.
+     * <p>
+     * @param ce
+     * @throws IOException
+     */
+    @Override
+    public void update( ICacheElement<K, V> ce )
+        throws IOException
+    {
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "updating through cache facade, noWaits.length = " + noWaits.length );
+        }
+        int i = 0;
+        try
+        {
+            for ( ; i < noWaits.length; i++ )
+            {
+                noWaits[i].update( ce );
+                // an initial move into a zombie will lock this to primary
+                // recovery. will not discover other servers until primary
+                // reconnect
+                // and subsequent error
+            }
+        }
+        catch ( Exception ex )
+        {
+            String message = "Problem updating no wait.  Will initiate failover if the noWait is in error.";
+            log.error( message, ex );
+
+            if ( getCacheEventLogger() != null )
+            {
+                getCacheEventLogger().logError(
+                                                "RemoteCacheNoWaitFacade",
+                                                ICacheEventLogger.UPDATE_EVENT,
+                                                message + ":" + ex.getMessage() + " REGION: " + ce.getCacheName()
+                                                    + " ELEMENT: " + ce );
+            }
+
+            // can handle failover here? Is it safe to try the others?
+            // check to see it the noWait is now a zombie
+            // if it is a zombie, then move to the next in the failover list
+            // will need to keep them in order or a count
+            failover( i );
+            // should start a failover thread
+            // should probably only failover if there is only one in the noWait
+            // list
+            // Should start a background thread to restore the original primary if we are in failover state.
+        }
+    }
+
+    /**
+     * Synchronously reads from the remote cache.
+     * <p>
+     * @param key
+     * @return Either an ICacheElement<K, V> or null if it is not found.
+     */
+    @Override
+    public ICacheElement<K, V> get( K key )
+    {
+        for ( int i = 0; i < noWaits.length; i++ )
+        {
+            try
+            {
+                ICacheElement<K, V> obj = noWaits[i].get( key );
+                if ( obj != null )
+                {
+                    return obj;
+                }
+            }
+            catch ( IOException ex )
+            {
+                log.debug( "Failed to get." );
+                return null;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Synchronously read from the remote cache.
+     * <p>
+     * @param pattern
+     * @return map
+     * @throws IOException
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> getMatching( String pattern )
+        throws IOException
+    {
+        for ( int i = 0; i < noWaits.length; i++ )
+        {
+            try
+            {
+                return noWaits[i].getMatching( pattern );
+            }
+            catch ( IOException ex )
+            {
+                log.debug( "Failed to getMatching." );
+            }
+        }
+        return Collections.emptyMap();
+    }
+
+    /**
+     * Gets multiple items from the cache based on the given set of keys.
+     * <p>
+     * @param keys
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data in cache for any of these keys
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> getMultiple( Set<K> keys )
+    {
+        if ( keys != null && !keys.isEmpty() )
+        {
+            for ( int i = 0; i < noWaits.length; i++ )
+            {
+                try
+                {
+                    return noWaits[i].getMultiple( keys );
+                }
+                catch ( IOException ex )
+                {
+                    log.debug( "Failed to get." );
+                }
+            }
+        }
+
+        return Collections.emptyMap();
+    }
+
+    /**
+     * Return the keys in this cache.
+     * <p>
+     * @see org.apache.commons.jcs.auxiliary.AuxiliaryCache#getKeySet()
+     */
+    @Override
+    public Set<K> getKeySet() throws IOException
+    {
+        HashSet<K> allKeys = new HashSet<K>();
+        for ( int i = 0; i < noWaits.length; i++ )
+        {
+            AuxiliaryCache<K, V> aux = noWaits[i];
+            if ( aux != null )
+            {
+                Set<K> keys = aux.getKeySet();
+                if(keys != null)
+                {
+                    allKeys.addAll( keys );
+                }
+            }
+        }
+        return allKeys;
+    }
+
+    /**
+     * Adds a remove request to the remote cache.
+     * <p>
+     * @param key
+     * @return whether or not it was removed, right now it return false.
+     */
+    @Override
+    public boolean remove( K key )
+    {
+        try
+        {
+            for ( int i = 0; i < noWaits.length; i++ )
+            {
+                noWaits[i].remove( key );
+            }
+        }
+        catch ( Exception ex )
+        {
+            log.error( ex );
+        }
+        return false;
+    }
+
+    /**
+     * Adds a removeAll request to the remote cache.
+     */
+    @Override
+    public void removeAll()
+    {
+        try
+        {
+            for ( int i = 0; i < noWaits.length; i++ )
+            {
+                noWaits[i].removeAll();
+            }
+        }
+        catch ( Exception ex )
+        {
+            log.error( ex );
+        }
+    }
+
+    /** Adds a dispose request to the remote cache. */
+    @Override
+    public void dispose()
+    {
+        try
+        {
+            for ( int i = 0; i < noWaits.length; i++ )
+            {
+                noWaits[i].dispose();
+            }
+        }
+        catch ( Exception ex )
+        {
+            log.error( "Problem in dispose.", ex );
+        }
+    }
+
+    /**
+     * No remote invocation.
+     * <p>
+     * @return The size value
+     */
+    @Override
+    public int getSize()
+    {
+        return 0;
+        // cache.getSize();
+    }
+
+    /**
+     * Gets the cacheType attribute of the RemoteCacheNoWaitFacade object.
+     * <p>
+     * @return The cacheType value
+     */
+    @Override
+    public CacheType getCacheType()
+    {
+        return CacheType.REMOTE_CACHE;
+    }
+
+    /**
+     * Gets the cacheName attribute of the RemoteCacheNoWaitFacade object.
+     * <p>
+     * @return The cacheName value
+     */
+    @Override
+    public String getCacheName()
+    {
+        return remoteCacheAttributes.getCacheName();
+    }
+
+    /**
+     * Gets the status attribute of the RemoteCacheNoWaitFacade object
+     * <p>
+     * Return ALIVE if any are alive.
+     * <p>
+     * @return The status value
+     */
+    @Override
+    public CacheStatus getStatus()
+    {
+        for ( int i = 0; i < noWaits.length; i++ )
+        {
+            if ( noWaits[i].getStatus() == CacheStatus.ALIVE )
+            {
+                return CacheStatus.ALIVE;
+            }
+        }
+
+        return CacheStatus.DISPOSED;
+    }
+
+    /**
+     * String form of some of the configuration information for the remote cache.
+     * <p>
+     * @return Some info for logging.
+     */
+    @Override
+    public String toString()
+    {
+        return "RemoteCacheNoWaitFacade: " + cacheName + ", rca = " + remoteCacheAttributes;
+    }
+
+    /**
+     * Begin the failover process if this is a local cache. Clustered remote caches do not failover.
+     * <p>
+     * @param i The no wait in error.
+     */
+    abstract void failover( int i );
+
+
+    /**
+     * @return Returns the AuxiliaryCacheAttributes.
+     */
+    @Override
+    public AuxiliaryCacheAttributes getAuxiliaryCacheAttributes()
+    {
+        return this.remoteCacheAttributes;
+    }
+
+    /**
+     * getStats
+     * @return String
+     */
+    @Override
+    public String getStats()
+    {
+        return getStatistics().toString();
+    }
+
+    /**
+     * @return statistics about the cache region
+     */
+    @Override
+    public IStats getStatistics()
+    {
+        IStats stats = new Stats();
+        stats.setTypeName( "Remote Cache No Wait Facade" );
+
+        ArrayList<IStatElement<?>> elems = new ArrayList<IStatElement<?>>();
+
+        if ( noWaits != null )
+        {
+            elems.add(new StatElement<Integer>( "Number of No Waits", Integer.valueOf(noWaits.length) ) );
+
+            for ( RemoteCacheNoWait<K, V> rcnw : noWaits )
+            {
+                // get the stats from the super too
+                IStats sStats = rcnw.getStatistics();
+                elems.addAll(sStats.getStatElements());
+            }
+        }
+
+        stats.setStatElements( elems );
+
+        return stats;
+    }
+
+    /**
+     * This typically returns end point info .
+     * <p>
+     * @return the name
+     */
+    @Override
+    public String getEventLoggingExtraInfo()
+    {
+        return "Remote Cache No Wait Facade";
+    }
+
+    /**
+     * Gets the remoteCacheAttributes attribute of the RemoteCacheNoWaitFacade object
+     * <p>
+     * @return The remoteCacheAttributes value
+     */
+    public IRemoteCacheAttributes getRemoteCacheAttributes()
+    {
+        return remoteCacheAttributes;
+    }
+
+    /**
+     * Sets the remoteCacheAttributes attribute of the RemoteCacheNoWaitFacade object.
+     * <p>
+     * @param rca The new remoteCacheAttributes value
+     */
+    public void setRemoteCacheAttributes( IRemoteCacheAttributes rca )
+    {
+        this.remoteCacheAttributes = rca;
+    }
+
+    /**
+     * @param compositeCacheManager the compositeCacheManager to set
+     */
+    protected void setCompositeCacheManager( ICompositeCacheManager compositeCacheManager )
+    {
+        this.compositeCacheManager = compositeCacheManager;
+    }
+
+    /**
+     * @return the compositeCacheManager
+     */
+    protected ICompositeCacheManager getCompositeCacheManager()
+    {
+        return compositeCacheManager;
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/CommonRemoteCacheAttributes.java b/src/org/apache/commons/jcs/auxiliary/remote/CommonRemoteCacheAttributes.java
new file mode 100644
index 0000000..59f74da
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/CommonRemoteCacheAttributes.java
@@ -0,0 +1,323 @@
+package org.apache.commons.jcs.auxiliary.remote;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.AbstractAuxiliaryCacheAttributes;
+import org.apache.commons.jcs.auxiliary.AuxiliaryCacheAttributes;
+import org.apache.commons.jcs.auxiliary.remote.behavior.ICommonRemoteCacheAttributes;
+import org.apache.commons.jcs.auxiliary.remote.behavior.IRemoteCacheConstants;
+import org.apache.commons.jcs.auxiliary.remote.server.behavior.RemoteType;
+
+/**
+ * Attributes common to remote cache client and server.
+ */
+public class CommonRemoteCacheAttributes
+    extends AbstractAuxiliaryCacheAttributes
+    implements ICommonRemoteCacheAttributes
+{
+    /** Don't change */
+    private static final long serialVersionUID = -1555143736942374000L;
+
+    /** The service name */
+    private String remoteServiceName = IRemoteCacheConstants.REMOTE_CACHE_SERVICE_VAL;
+
+    /** server host */
+    private String remoteHost;
+
+    /** server port */
+    private int remotePort;
+
+    /** Cluster chain */
+    private String clusterServers = "";
+
+    /** THe type of remote cache, local or cluster */
+    private RemoteType remoteType = RemoteType.LOCAL;
+
+    /** Should we issue a local remove if we get a put from a remote server */
+    private boolean removeUponRemotePut = true;
+
+    /** Can we receive from or put to the remote. this probably shouldn't be used. Use receive. */
+    private boolean getOnly = false;
+
+    /** Should we put and get from the clusters. */
+    private boolean localClusterConsistency = false;
+
+    /** read and connect timeout */
+    private int rmiSocketFactoryTimeoutMillis = DEFAULT_RMI_SOCKET_FACTORY_TIMEOUT_MILLIS;
+
+    /** Default constructor for the RemoteCacheAttributes object */
+    public CommonRemoteCacheAttributes()
+    {
+        super();
+    }
+
+    /**
+     * Gets the remoteTypeName attribute of the RemoteCacheAttributes object.
+     * <p>
+     * @return The remoteTypeName value
+     */
+    @Override
+    public String getRemoteTypeName()
+    {
+        return remoteType != null ? remoteType.toString() : RemoteType.LOCAL.toString();
+    }
+
+    /**
+     * Sets the remoteTypeName attribute of the RemoteCacheAttributes object.
+     * <p>
+     * @param s The new remoteTypeName value
+     */
+    @Override
+    public void setRemoteTypeName( String s )
+    {
+        RemoteType rt = RemoteType.valueOf(s);
+        if (rt != null)
+        {
+            this.remoteType = rt;
+        }
+    }
+
+    /**
+     * Gets the remoteType attribute of the RemoteCacheAttributes object.
+     * <p>
+     * @return The remoteType value
+     */
+    @Override
+    public RemoteType getRemoteType()
+    {
+        return remoteType;
+    }
+
+    /**
+     * Sets the remoteType attribute of the RemoteCacheAttributes object.
+     * <p>
+     * @param p The new remoteType value
+     */
+    @Override
+    public void setRemoteType( RemoteType p )
+    {
+        this.remoteType = p;
+    }
+
+    /**
+     * @return AuxiliaryCacheAttributes
+     */
+    @Override
+    public AuxiliaryCacheAttributes copy()
+    {
+        try
+        {
+            return (AuxiliaryCacheAttributes) this.clone();
+        }
+        catch ( Exception e )
+        {
+            // swallow
+        }
+        return this;
+    }
+
+    /**
+     * Gets the remoteServiceName attribute of the RemoteCacheAttributes object.
+     * <p>
+     * @return The remoteServiceName value
+     */
+    @Override
+    public String getRemoteServiceName()
+    {
+        return this.remoteServiceName;
+    }
+
+    /**
+     * Sets the remoteServiceName attribute of the RemoteCacheAttributes object.
+     * <p>
+     * @param s The new remoteServiceName value
+     */
+    @Override
+    public void setRemoteServiceName( String s )
+    {
+        this.remoteServiceName = s;
+    }
+
+    /**
+     * Gets the remoteHost attribute of the RemoteCacheAttributes object.
+     * <p>
+     * @return The remoteHost value
+     */
+    @Override
+    public String getRemoteHost()
+    {
+        return this.remoteHost;
+    }
+
+    /**
+     * Sets the remoteHost attribute of the RemoteCacheAttributes object.
+     * <p>
+     * @param s The new remoteHost value
+     */
+    @Override
+    public void setRemoteHost( String s )
+    {
+        this.remoteHost = s;
+    }
+
+    /**
+     * Gets the remotePort attribute of the RemoteCacheAttributes object.
+     * <p>
+     * @return The remotePort value
+     */
+    @Override
+    public int getRemotePort()
+    {
+        return this.remotePort;
+    }
+
+    /**
+     * Sets the remotePort attribute of the RemoteCacheAttributes object.
+     * <p>
+     * @param p The new remotePort value
+     */
+    @Override
+    public void setRemotePort( int p )
+    {
+        this.remotePort = p;
+    }
+
+    /**
+     * Gets the clusterServers attribute of the RemoteCacheAttributes object.
+     * <p>
+     * @return The clusterServers value
+     */
+    @Override
+    public String getClusterServers()
+    {
+        return this.clusterServers;
+    }
+
+    /**
+     * Sets the clusterServers attribute of the RemoteCacheAttributes object.
+     * <p>
+     * @param s The new clusterServers value
+     */
+    @Override
+    public void setClusterServers( String s )
+    {
+        this.clusterServers = s;
+    }
+
+    /**
+     * Gets the removeUponRemotePut attribute of the RemoteCacheAttributes object.
+     * <p>
+     * @return The removeUponRemotePut value
+     */
+    @Override
+    public boolean getRemoveUponRemotePut()
+    {
+        return this.removeUponRemotePut;
+    }
+
+    /**
+     * Sets the removeUponRemotePut attribute of the RemoteCacheAttributes object.
+     * <p>
+     * @param r The new removeUponRemotePut value
+     */
+    @Override
+    public void setRemoveUponRemotePut( boolean r )
+    {
+        this.removeUponRemotePut = r;
+    }
+
+    /**
+     * Gets the getOnly attribute of the RemoteCacheAttributes object.
+     * <p>
+     * @return The getOnly value
+     */
+    @Override
+    public boolean getGetOnly()
+    {
+        return this.getOnly;
+    }
+
+    /**
+     * Sets the getOnly attribute of the RemoteCacheAttributes object
+     * @param r The new getOnly value
+     */
+    @Override
+    public void setGetOnly( boolean r )
+    {
+        this.getOnly = r;
+    }
+
+    /**
+     * Should cluster updates be propagated to the locals.
+     * <p>
+     * @return The localClusterConsistency value
+     */
+    @Override
+    public boolean isLocalClusterConsistency()
+    {
+        return localClusterConsistency;
+    }
+
+    /**
+     * Should cluster updates be propagated to the locals.
+     * <p>
+     * @param r The new localClusterConsistency value
+     */
+    @Override
+    public void setLocalClusterConsistency( boolean r )
+    {
+        this.localClusterConsistency = r;
+    }
+
+    /**
+     * @param rmiSocketFactoryTimeoutMillis The rmiSocketFactoryTimeoutMillis to set.
+     */
+    @Override
+    public void setRmiSocketFactoryTimeoutMillis( int rmiSocketFactoryTimeoutMillis )
+    {
+        this.rmiSocketFactoryTimeoutMillis = rmiSocketFactoryTimeoutMillis;
+    }
+
+    /**
+     * @return Returns the rmiSocketFactoryTimeoutMillis.
+     */
+    @Override
+    public int getRmiSocketFactoryTimeoutMillis()
+    {
+        return rmiSocketFactoryTimeoutMillis;
+    }
+
+    /**
+     * @return String, all the important values that can be configured
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder buf = new StringBuilder();
+        buf.append( "\n RemoteCacheAttributes " );
+        buf.append( "\n remoteHost = [" + this.remoteHost + "]" );
+        buf.append( "\n remotePort = [" + this.remotePort + "]" );
+        buf.append( "\n cacheName = [" + super.getCacheName() + "]" );
+        buf.append( "\n remoteType = [" + remoteType + "]" );
+        buf.append( "\n removeUponRemotePut = [" + this.removeUponRemotePut + "]" );
+        buf.append( "\n getOnly = [" + getOnly + "]" );
+        return buf.toString();
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/RemoteCache.java b/src/org/apache/commons/jcs/auxiliary/remote/RemoteCache.java
new file mode 100644
index 0000000..8e341f3
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/RemoteCache.java
@@ -0,0 +1,186 @@
+package org.apache.commons.jcs.auxiliary.remote;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.remote.behavior.IRemoteCacheAttributes;
+import org.apache.commons.jcs.auxiliary.remote.behavior.IRemoteCacheListener;
+import org.apache.commons.jcs.auxiliary.remote.server.behavior.RemoteType;
+import org.apache.commons.jcs.engine.ZombieCacheServiceNonLocal;
+import org.apache.commons.jcs.engine.behavior.ICacheServiceNonLocal;
+import org.apache.commons.jcs.engine.stats.StatElement;
+import org.apache.commons.jcs.engine.stats.Stats;
+import org.apache.commons.jcs.engine.stats.behavior.IStatElement;
+import org.apache.commons.jcs.engine.stats.behavior.IStats;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.IOException;
+import java.util.ArrayList;
+
+/**
+ * Client proxy for an RMI remote cache.
+ * <p>
+ * This handles gets, updates, and removes. It also initiates failover recovery when an error is
+ * encountered.
+ */
+public class RemoteCache<K, V>
+    extends AbstractRemoteAuxiliaryCache<K, V>
+{
+    /** The logger. */
+    private static final Log log = LogFactory.getLog( RemoteCache.class );
+
+    /**
+     * Constructor for the RemoteCache object. This object communicates with a remote cache server.
+     * One of these exists for each region. This also holds a reference to a listener. The same
+     * listener is used for all regions for one remote server. Holding a reference to the listener
+     * allows this object to know the listener id assigned by the remote cache.
+     * <p>
+     * @param cattr
+     * @param remote
+     * @param listener
+     */
+    public RemoteCache( IRemoteCacheAttributes cattr, ICacheServiceNonLocal<K, V> remote, IRemoteCacheListener<K, V> listener )
+    {
+        super( cattr, remote, listener );
+
+        RemoteUtils.configureGlobalCustomSocketFactory( getRemoteCacheAttributes().getRmiSocketFactoryTimeoutMillis() );
+    }
+
+    /**
+     * @return IStats object
+     */
+    @Override
+    public IStats getStatistics()
+    {
+        IStats stats = new Stats();
+        stats.setTypeName( "Remote Cache" );
+
+        ArrayList<IStatElement<?>> elems = new ArrayList<IStatElement<?>>();
+
+        elems.add(new StatElement<String>( "Remote Host:Port", getIPAddressForService() ) );
+        elems.add(new StatElement<String>( "Remote Type", this.getRemoteCacheAttributes().getRemoteTypeName() ) );
+
+//      if ( this.getRemoteCacheAttributes().getRemoteType() == RemoteType.CLUSTER )
+//      {
+//          // something cluster specific
+//      }
+
+        // get the stats from the super too
+        IStats sStats = super.getStatistics();
+        elems.addAll(sStats.getStatElements());
+
+        stats.setStatElements( elems );
+
+        return stats;
+    }
+
+    /**
+     * Handles exception by disabling the remote cache service before re-throwing the exception in
+     * the form of an IOException.
+     * <p>
+     * @param ex
+     * @param msg
+     * @param eventName
+     * @throws IOException
+     */
+    @Override
+    protected void handleException( Exception ex, String msg, String eventName )
+        throws IOException
+    {
+        String message = "Disabling remote cache due to error: " + msg;
+
+        logError( cacheName, "", message );
+        log.error( message, ex );
+
+        // we should not switch if the existing is a zombie.
+        if ( getRemoteCacheService() == null || !( getRemoteCacheService() instanceof ZombieCacheServiceNonLocal ) )
+        {
+            // TODO make configurable
+            setRemoteCacheService( new ZombieCacheServiceNonLocal<K, V>( getRemoteCacheAttributes().getZombieQueueMaxSize() ) );
+        }
+        // may want to flush if region specifies
+        // Notify the cache monitor about the error, and kick off the recovery
+        // process.
+        RemoteCacheMonitor.getInstance().notifyError();
+
+        // initiate failover if local
+        @SuppressWarnings("unchecked") // Need to cast because of common map for all facades
+        RemoteCacheNoWaitFacade<K, V> rcnwf = (RemoteCacheNoWaitFacade<K, V>)RemoteCacheFactory.getFacades()
+            .get( getRemoteCacheAttributes().getCacheName() );
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Initiating failover, rcnf = " + rcnwf );
+        }
+
+        if ( rcnwf != null && rcnwf.getRemoteCacheAttributes().getRemoteType() == RemoteType.LOCAL )
+        {
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Found facade, calling failover" );
+            }
+            // may need to remove the noWait index here. It will be 0 if it is
+            // local since there is only 1 possible listener.
+            rcnwf.failover( 0 );
+        }
+
+        if ( ex instanceof IOException )
+        {
+            throw (IOException) ex;
+        }
+        throw new IOException( ex.getMessage() );
+    }
+
+    /**
+     * Debugging info.
+     * <p>
+     * @return basic info about the RemoteCache
+     */
+    @Override
+    public String toString()
+    {
+        return "RemoteCache: " + cacheName + " attributes = " + getRemoteCacheAttributes();
+    }
+
+    /**
+     * Gets the extra info for the event log.
+     * <p>
+     * @return disk location
+     */
+    @Override
+    public String getEventLoggingExtraInfo()
+    {
+        return getIPAddressForService();
+    }
+
+    /**
+     * IP address for the service, if one is stored.
+     * <p>
+     * Protected for testing.
+     * <p>
+     * @return String
+     */
+    protected String getIPAddressForService()
+    {
+        String ipAddress = this.getRemoteCacheAttributes().getRemoteHost() + ":"
+            + this.getRemoteCacheAttributes().getRemotePort();
+        return ipAddress;
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/RemoteCacheAttributes.java b/src/org/apache/commons/jcs/auxiliary/remote/RemoteCacheAttributes.java
new file mode 100644
index 0000000..491e810
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/RemoteCacheAttributes.java
@@ -0,0 +1,261 @@
+package org.apache.commons.jcs.auxiliary.remote;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.remote.behavior.IRemoteCacheAttributes;
+
+/**
+ * These objects are used to configure the remote cache client.
+ */
+public class RemoteCacheAttributes
+    extends CommonRemoteCacheAttributes
+    implements IRemoteCacheAttributes
+{
+    /** Don't change */
+    private static final long serialVersionUID = -1555143736942374000L;
+
+    /**
+     * Failover servers will be used by local caches one at a time. Listeners will be registered
+     * with all cluster servers. If we add a get from cluster attribute we will have the ability to
+     * chain clusters and have them get from each other.
+     */
+    private String failoverServers = "";
+
+    /** callback */
+    private int localPort = 0;
+
+    /** what failover server we are connected to. */
+    private int failoverIndex = 0;
+
+    /** Array of failover server addresses */
+    private String[] failovers;
+
+    /** default name is remote_cache_client */
+    private String threadPoolName = "remote_cache_client";
+
+    /** must be greater than 0 for a pool to be used. */
+    private int getTimeoutMillis = -1;
+
+    /**
+     * Can we receive from the server. You might have a 0 local store and keep everything on the
+     * remote. If so, you don't want to be notified of updates.
+     */
+    private boolean receive = DEFAULT_RECEIVE;
+
+    /** If the primary fails, we will queue items before reconnect.  This limits the number of items that can be queued. */
+    private int zombieQueueMaxSize = DEFAULT_ZOMBIE_QUEUE_MAX_SIZE;
+
+    /** Default constructor for the RemoteCacheAttributes object */
+    public RemoteCacheAttributes()
+    {
+        super();
+    }
+
+    /**
+     * Gets the failoverIndex attribute of the RemoteCacheAttributes object.
+     * <p>
+     * @return The failoverIndex value
+     */
+    @Override
+    public int getFailoverIndex()
+    {
+        return failoverIndex;
+    }
+
+    /**
+     * Sets the failoverIndex attribute of the RemoteCacheAttributes object.
+     * <p>
+     * @param p The new failoverIndex value
+     */
+    @Override
+    public void setFailoverIndex( int p )
+    {
+        this.failoverIndex = p;
+    }
+
+    /**
+     * Gets the failovers attribute of the RemoteCacheAttributes object.
+     * <p>
+     * @return The failovers value
+     */
+    @Override
+    public String[] getFailovers()
+    {
+        return this.failovers;
+    }
+
+    /**
+     * Sets the failovers attribute of the RemoteCacheAttributes object.
+     * <p>
+     * @param f The new failovers value
+     */
+    @Override
+    public void setFailovers( String[] f )
+    {
+        this.failovers = f;
+    }
+
+    /**
+     * Gets the failoverServers attribute of the RemoteCacheAttributes object.
+     * <p>
+     * @return The failoverServers value
+     */
+    @Override
+    public String getFailoverServers()
+    {
+        return this.failoverServers;
+    }
+
+    /**
+     * Sets the failoverServers attribute of the RemoteCacheAttributes object.
+     * <p>
+     * @param s The new failoverServers value
+     */
+    @Override
+    public void setFailoverServers( String s )
+    {
+        this.failoverServers = s;
+    }
+
+    /**
+     * Gets the localPort attribute of the RemoteCacheAttributes object.
+     * <p>
+     * @return The localPort value
+     */
+    @Override
+    public int getLocalPort()
+    {
+        return this.localPort;
+    }
+
+    /**
+     * Sets the localPort attribute of the RemoteCacheAttributes object
+     * @param p The new localPort value
+     */
+    @Override
+    public void setLocalPort( int p )
+    {
+        this.localPort = p;
+    }
+
+    /**
+     * @return the name of the pool
+     */
+    @Override
+    public String getThreadPoolName()
+    {
+        return threadPoolName;
+    }
+
+    /**
+     * @param name
+     */
+    @Override
+    public void setThreadPoolName( String name )
+    {
+        threadPoolName = name;
+    }
+
+    /**
+     * @return getTimeoutMillis
+     */
+    @Override
+    public int getGetTimeoutMillis()
+    {
+        return getTimeoutMillis;
+    }
+
+    /**
+     * @param millis
+     */
+    @Override
+    public void setGetTimeoutMillis( int millis )
+    {
+        getTimeoutMillis = millis;
+    }
+
+    /**
+     * By default this option is true. If you set it to false, you will not receive updates or
+     * removes from the remote server.
+     * <p>
+     * @param receive
+     */
+    @Override
+    public void setReceive( boolean receive )
+    {
+        this.receive = receive;
+    }
+
+    /**
+     * If RECEIVE is false then the remote cache will not register a listener with the remote
+     * server. This allows you to configure a remote server as a repository from which you can get
+     * and to which you put, but from which you do not receive any notifications. That is, you will
+     * not receive updates or removes.
+     * <p>
+     * If you set this option to false, you should set your local memory size to 0.
+     * <p>
+     * The remote cache manager uses this value to decide whether or not to register a listener.
+     * @return the receive value.
+     */
+    @Override
+    public boolean isReceive()
+    {
+        return this.receive;
+    }
+
+    /**
+     * The number of elements the zombie queue will hold. This queue is used to store events if we
+     * loose our connection with the server.
+     * <p>
+     * @param zombieQueueMaxSize The zombieQueueMaxSize to set.
+     */
+    @Override
+    public void setZombieQueueMaxSize( int zombieQueueMaxSize )
+    {
+        this.zombieQueueMaxSize = zombieQueueMaxSize;
+    }
+
+    /**
+     * The number of elements the zombie queue will hold. This queue is used to store events if we
+     * loose our connection with the server.
+     * <p>
+     * @return Returns the zombieQueueMaxSize.
+     */
+    @Override
+    public int getZombieQueueMaxSize()
+    {
+        return zombieQueueMaxSize;
+    }
+
+    /**
+     * @return String, all the important values that can be configured
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder buf = new StringBuilder(super.toString());
+        buf.append( "\n receive = [" + isReceive() + "]" );
+        buf.append( "\n getTimeoutMillis = [" + getGetTimeoutMillis() + "]" );
+        buf.append( "\n threadPoolName = [" + getThreadPoolName() + "]" );
+        buf.append( "\n localClusterConsistency = [" + isLocalClusterConsistency() + "]" );
+        buf.append( "\n zombieQueueMaxSize = [" + getZombieQueueMaxSize() + "]" );
+        return buf.toString();
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/RemoteCacheFactory.java b/src/org/apache/commons/jcs/auxiliary/remote/RemoteCacheFactory.java
new file mode 100644
index 0000000..31278ef
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/RemoteCacheFactory.java
@@ -0,0 +1,165 @@
+package org.apache.commons.jcs.auxiliary.remote;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.StringTokenizer;
+
+import org.apache.commons.jcs.auxiliary.AbstractAuxiliaryCacheFactory;
+import org.apache.commons.jcs.auxiliary.AuxiliaryCache;
+import org.apache.commons.jcs.auxiliary.AuxiliaryCacheAttributes;
+import org.apache.commons.jcs.auxiliary.remote.server.behavior.RemoteType;
+import org.apache.commons.jcs.engine.behavior.ICache;
+import org.apache.commons.jcs.engine.behavior.ICompositeCacheManager;
+import org.apache.commons.jcs.engine.behavior.IElementSerializer;
+import org.apache.commons.jcs.engine.logging.behavior.ICacheEventLogger;
+
+/**
+ * The RemoteCacheFactory creates remote caches for the cache hub. It returns a no wait facade which
+ * is a wrapper around a no wait. The no wait object is either an active connection to a remote
+ * cache or a balking zombie if the remote cache is not accessible. It should be transparent to the
+ * clients.
+ */
+public class RemoteCacheFactory
+    extends AbstractAuxiliaryCacheFactory
+{
+    /** store reference of facades to initiate failover */
+    private static final HashMap<String, RemoteCacheNoWaitFacade<?, ?>> facades =
+        new HashMap<String, RemoteCacheNoWaitFacade<?, ?>>();
+
+    /**
+     * For LOCAL clients we get a handle to all the failovers, but we do not register a listener
+     * with them. We create the RemoteCacheManager, but we do not get a cache.
+     * <p>
+     * The failover runner will get a cache from the manager. When the primary is restored it will
+     * tell the manager for the failover to deregister the listener.
+     * <p>
+     * @param iaca
+     * @param cacheMgr
+     * @param cacheEventLogger
+     * @param elementSerializer
+     * @return AuxiliaryCache
+     */
+    @Override
+    public <K, V> AuxiliaryCache<K, V> createCache(
+            AuxiliaryCacheAttributes iaca, ICompositeCacheManager cacheMgr,
+           ICacheEventLogger cacheEventLogger, IElementSerializer elementSerializer )
+    {
+        RemoteCacheAttributes rca = (RemoteCacheAttributes) iaca;
+
+        ArrayList<ICache<K, V>> noWaits = new ArrayList<ICache<K, V>>();
+
+        // if LOCAL
+        if ( rca.getRemoteType() == RemoteType.LOCAL )
+        {
+            // a list to be turned into an array of failover server information
+            ArrayList<String> failovers = new ArrayList<String>();
+
+            // not necessary if a failover list is defined
+            // REGISTER PRIMARY LISTENER
+            // if it is a primary
+            boolean primaryDefined = false;
+            if ( rca.getRemoteHost() != null )
+            {
+                primaryDefined = true;
+
+                failovers.add( rca.getRemoteHost() + ":" + rca.getRemotePort() );
+
+                RemoteCacheManager rcm = RemoteCacheManager.getInstance( rca, cacheMgr, cacheEventLogger,
+                                                                         elementSerializer );
+                ICache<K, V> ic = rcm.getCache( rca );
+                noWaits.add( ic );
+            }
+
+            // GET HANDLE BUT DONT REGISTER A LISTENER FOR FAILOVERS
+            String failoverList = rca.getFailoverServers();
+            if ( failoverList != null )
+            {
+                StringTokenizer fit = new StringTokenizer( failoverList, "," );
+                int fCnt = 0;
+                while ( fit.hasMoreTokens() )
+                {
+                    fCnt++;
+
+                    String server = fit.nextToken();
+                    failovers.add( server );
+
+                    RemoteUtils.parseServerAndPort(server, rca);
+                    RemoteCacheManager rcm = RemoteCacheManager.getInstance( rca, cacheMgr, cacheEventLogger,
+                                                                             elementSerializer );
+                    // add a listener if there are none, need to tell rca what
+                    // number it is at
+                    if ( ( !primaryDefined && fCnt == 1 ) || noWaits.size() <= 0 )
+                    {
+                        ICache<K, V> ic = rcm.getCache( rca );
+                        noWaits.add( ic );
+                    }
+                }
+                // end while
+            }
+            // end if failoverList != null
+
+            rca.setFailovers( failovers.toArray( new String[0] ) );
+
+            // if CLUSTER
+        }
+        else if ( rca.getRemoteType() == RemoteType.CLUSTER )
+        {
+            // REGISTER LISTENERS FOR EACH SYSTEM CLUSTERED CACHEs
+            StringTokenizer it = new StringTokenizer( rca.getClusterServers(), "," );
+            while ( it.hasMoreElements() )
+            {
+                // String server = (String)it.next();
+                String server = (String) it.nextElement();
+                // p( "tcp server = " + server );
+                rca.setRemoteHost( server.substring( 0, server.indexOf( ":" ) ) );
+                rca.setRemotePort( Integer.parseInt( server.substring( server.indexOf( ":" ) + 1 ) ) );
+                RemoteCacheManager rcm = RemoteCacheManager.getInstance( rca, cacheMgr, cacheEventLogger,
+                                                                         elementSerializer );
+                rca.setRemoteType( RemoteType.CLUSTER );
+                ICache<K, V> ic = rcm.getCache( rca );
+                noWaits.add( ic );
+            }
+
+        }
+        // end if CLUSTER
+
+        @SuppressWarnings("unchecked") // No generic arrays in java
+        RemoteCacheNoWait<K, V>[] rcnwArray = noWaits.toArray( new RemoteCacheNoWait[0] );
+        RemoteCacheNoWaitFacade<K, V> rcnwf =
+            new RemoteCacheNoWaitFacade<K, V>(rcnwArray, rca, cacheMgr, cacheEventLogger, elementSerializer );
+
+        getFacades().put( rca.getCacheName(), rcnwf );
+
+        return rcnwf;
+    }
+
+    // end createCache
+
+    /**
+     * The facades are what the cache hub talks to.
+     * @return Returns the facades.
+     */
+    public static HashMap<String, RemoteCacheNoWaitFacade<?, ?>> getFacades()
+    {
+        return facades;
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/RemoteCacheFailoverRunner.java b/src/org/apache/commons/jcs/auxiliary/remote/RemoteCacheFailoverRunner.java
new file mode 100644
index 0000000..2ce5c32
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/RemoteCacheFailoverRunner.java
@@ -0,0 +1,488 @@
+package org.apache.commons.jcs.auxiliary.remote;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+
+import org.apache.commons.jcs.engine.CacheStatus;
+import org.apache.commons.jcs.engine.behavior.ICache;
+import org.apache.commons.jcs.engine.behavior.ICompositeCacheManager;
+import org.apache.commons.jcs.engine.behavior.IElementSerializer;
+import org.apache.commons.jcs.engine.logging.behavior.ICacheEventLogger;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * The RemoteCacheFailoverRunner tries to establish a connection with a failover
+ * server, if any are defined. Once a failover connection is made, it will
+ * attempt to replace the failover with the primary remote server.
+ * <p>
+ * It works by switching out the RemoteCacheNoWait inside the Facade.
+ * <p>
+ * Client (i.e.) the CompositeCache has reference to a RemoteCacheNoWaitFacade.
+ * This facade is created by the RemoteCacheFactory. The factory maintains a set
+ * of managers, one for each remote server. Typically, there will only be one
+ * manager.
+ * <p>
+ * If you use multiple remote servers, you may want to set one or more as
+ * failovers. If a local cache cannot connect to the primary server, or looses
+ * its connection to the primary server, it will attempt to restore that
+ * Connection in the background. If failovers are defined, the Failover runner
+ * will try to connect to a failover until the primary is restored.
+ *
+ */
+public class RemoteCacheFailoverRunner<K, V>
+    implements Runnable
+{
+    /** The logger */
+    private static final Log log = LogFactory.getLog( RemoteCacheFailoverRunner.class );
+
+    /** The facade returned to the composite cache. */
+    private final RemoteCacheNoWaitFacade<K, V> facade;
+
+    /** How long to wait between reconnect attempts. */
+    private static long idlePeriod = 20 * 1000;
+
+    /** Have we reconnected. */
+    private boolean alright = true;
+
+    /** The cache manager */
+    private final ICompositeCacheManager cacheMgr;
+
+    /** The event logger. */
+    private final ICacheEventLogger cacheEventLogger;
+
+    /** The serializer. */
+    private final IElementSerializer elementSerializer;
+
+    /**
+     * Constructor for the RemoteCacheFailoverRunner object. This allows the
+     * FailoverRunner to modify the facade that the CompositeCache references.
+     *
+     * @param facade
+     *            the facade the CompositeCache talks to.
+     * @param cacheMgr
+     * @param cacheEventLogger
+     * @param elementSerializer
+     */
+    public RemoteCacheFailoverRunner( RemoteCacheNoWaitFacade<K, V> facade, ICompositeCacheManager cacheMgr,
+                                      ICacheEventLogger cacheEventLogger, IElementSerializer elementSerializer )
+    {
+        this.facade = facade;
+        this.cacheMgr = cacheMgr;
+        this.cacheEventLogger = cacheEventLogger;
+        this.elementSerializer = elementSerializer;
+    }
+
+    /**
+     * Notifies the cache monitor that an error occurred, and kicks off the
+     * error recovery process.
+     */
+    public void notifyError()
+    {
+        bad();
+        synchronized ( this )
+        {
+            notify();
+        }
+    }
+
+    /**
+     * Main processing method for the RemoteCacheFailoverRunner object.
+     * <p>
+     * If we do not have a connection with any failover server, this will try to
+     * connect one at a time. If no connection can be made, it goes to sleep for
+     * a while (20 seconds).
+     * <p>
+     * Once a connection with a failover is made, we will try to reconnect to
+     * the primary server.
+     * <p>
+     * The primary server is the first server defines in the FailoverServers
+     * list.
+     */
+    @Override
+    public void run()
+    {
+        // start the main work of connecting to a failover and then restoring
+        // the primary.
+        connectAndRestore();
+
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "Exiting failover runner. Failover index = " + facade.getRemoteCacheAttributes().getFailoverIndex() );
+            if ( facade.getRemoteCacheAttributes().getFailoverIndex() <= 0 )
+            {
+                log.info( "Failover index is <= 0, meaning we are not " + "connected to a failover server." );
+            }
+            else if ( facade.getRemoteCacheAttributes().getFailoverIndex() > 0 )
+            {
+                log.info( "Failover index is > 0, meaning we are " + "connected to a failover server." );
+            }
+            // log if we are alright or not.
+        }
+    }
+
+    /**
+     * This is the main loop. If there are failovers defined, then this will
+     * continue until the primary is re-connected. If no failovers are defined,
+     * this will exit automatically.
+     */
+    @SuppressWarnings("unchecked") // No generic arrays in java
+    private void connectAndRestore()
+    {
+        do
+        {
+            log.info( "Remote cache FAILOVER RUNNING." );
+
+            // there is no active listener
+            if ( !alright )
+            {
+                // Monitor each RemoteCacheManager instance one after the other.
+                // Each RemoteCacheManager corresponds to one remote connection.
+                String[] failovers = facade.getRemoteCacheAttributes().getFailovers();
+                // we should probably check to see if there are any failovers,
+                // even though the caller
+                // should have already.
+
+                if ( failovers == null )
+                {
+                    log.warn( "Remote is misconfigured, failovers was null." );
+                    return;
+                }
+                else if ( failovers.length == 1 )
+                {
+                    // if there is only the primary, return out of this
+                    if ( log.isInfoEnabled() )
+                    {
+                        log.info( "No failovers defined, exiting failover runner." );
+                        return;
+                    }
+                }
+
+                int fidx = facade.getRemoteCacheAttributes().getFailoverIndex();
+                log.debug( "fidx = " + fidx + " failovers.length = " + failovers.length );
+
+                // shouldn't we see if the primary is backup?
+                // If we don't check the primary, if it gets connected in the
+                // background,
+                // we will disconnect it only to put it right back
+                int i = fidx; // + 1; // +1 skips the primary
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "stating at failover i = " + i );
+                }
+
+                // try them one at a time until successful
+                for ( ; i < failovers.length && !alright; i++ )
+                {
+                    String server = failovers[i];
+                    if ( log.isDebugEnabled() )
+                    {
+                        log.debug( "Trying server [" + server + "] at failover index i = " + i );
+                    }
+
+                    RemoteCacheAttributes rca = null;
+                    try
+                    {
+                        rca = (RemoteCacheAttributes) facade.getRemoteCacheAttributes().copy();
+                        RemoteUtils.parseServerAndPort(server, rca);
+                        RemoteCacheManager rcm = RemoteCacheManager.getInstance( rca, cacheMgr, cacheEventLogger, elementSerializer );
+
+                        if ( log.isDebugEnabled() )
+                        {
+                            log.debug( "RemoteCacheAttributes for failover = " + rca.toString() );
+                        }
+
+                        // add a listener if there are none, need to tell rca
+                        // what number it is at
+                        ICache<K, V> ic = rcm.getCache( rca.getCacheName() );
+                        if ( ic.getStatus() == CacheStatus.ALIVE )
+                        {
+                            // may need to do this more gracefully
+                            log.debug( "resetting no wait" );
+                            facade.noWaits = new RemoteCacheNoWait[1];
+                            facade.noWaits[0] = (RemoteCacheNoWait<K, V>) ic;
+                            facade.getRemoteCacheAttributes().setFailoverIndex( i );
+
+                            synchronized ( this )
+                            {
+                                if ( log.isDebugEnabled() )
+                                {
+                                    log.debug( "setting ALRIGHT to true" );
+                                    if ( i > 0 )
+                                    {
+                                        log.debug( "Moving to Primary Recovery Mode, failover index = " + i );
+                                    }
+                                    else
+                                    {
+                                        if ( log.isInfoEnabled() )
+                                        {
+                                            String message = "No need to connect to failover, the primary server is back up.";
+                                            log.info( message );
+                                        }
+                                    }
+                                }
+
+                                alright = true;
+
+                                if ( log.isInfoEnabled() )
+                                {
+                                    log.info( "CONNECTED to host = [" + rca.getRemoteHost() + "] port = ["
+                                        + rca.getRemotePort() + "]" );
+                                }
+                            }
+                        }
+                    }
+                    catch ( Exception ex )
+                    {
+                        bad();
+                        // Problem encountered in fixing the caches managed by a
+                        // RemoteCacheManager instance.
+                        // Soldier on to the next RemoteCacheManager instance.
+                        String remoteHost = (rca == null) ? "null" : rca.getRemoteHost();
+                        int remotePort = (rca == null) ? 0 : rca.getRemotePort();
+                        if ( i == 0 )
+                        {
+                            log.warn( "FAILED to connect, as expected, to primary" + remoteHost + ":"
+                                + remotePort, ex );
+                        }
+                        else
+                        {
+                            log.error( "FAILED to connect to failover [" + remoteHost + ":"
+                                + remotePort + "]", ex );
+                        }
+                    }
+                }
+            }
+            // end if !alright
+            // get here if while index >0 and alright, meaning that we are
+            // connected to some backup server.
+            else
+            {
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "ALRIGHT is true " );
+                }
+                if ( log.isInfoEnabled() )
+                {
+                    log.info( "Failover runner is in primary recovery mode. Failover index = "
+                        + facade.getRemoteCacheAttributes().getFailoverIndex() + "\n" + "Will now try to reconnect to primary server." );
+                }
+            }
+
+            boolean primaryRestoredSuccessfully = false;
+            // if we are not connected to the primary, try.
+            if ( facade.getRemoteCacheAttributes().getFailoverIndex() > 0 )
+            {
+                primaryRestoredSuccessfully = restorePrimary();
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "Primary recovery success state = " + primaryRestoredSuccessfully );
+                }
+            }
+
+            if ( !primaryRestoredSuccessfully )
+            {
+                // Time driven mode: sleep between each round of recovery
+                // attempt.
+                try
+                {
+                    log.warn( "Failed to reconnect to primary server. Cache failover runner is going to sleep for "
+                        + idlePeriod + " milliseconds." );
+                    Thread.sleep( idlePeriod );
+                }
+                catch ( InterruptedException ex )
+                {
+                    // ignore;
+                }
+            }
+
+            // try to bring the listener back to the primary
+        }
+        while ( facade.getRemoteCacheAttributes().getFailoverIndex() > 0 || !alright );
+        // continue if the primary is not restored or if things are not alright.
+
+    }
+
+    /**
+     * Try to restore the primary server.
+     * <p>
+     * Once primary is restored the failover listener must be deregistered.
+     * <p>
+     * The primary server is the first server defines in the FailoverServers
+     * list.
+     *
+     * @return boolean value indicating whether the restoration was successful
+     */
+    @SuppressWarnings("unchecked") // No generic arrays in java
+    private boolean restorePrimary()
+    {
+        // try to move back to the primary
+        String[] failovers = facade.getRemoteCacheAttributes().getFailovers();
+        String server = failovers[0];
+
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "Trying to restore connection to primary remote server [" + server + "]" );
+        }
+
+        try
+        {
+            RemoteCacheAttributes rca = (RemoteCacheAttributes) facade.getRemoteCacheAttributes().copy();
+            RemoteUtils.parseServerAndPort(server, rca);
+            RemoteCacheManager rcm = RemoteCacheManager.getInstance( rca, cacheMgr, cacheEventLogger, elementSerializer );
+
+            // add a listener if there are none, need to tell rca what number it
+            // is at
+            ICache<K, V> ic = rcm.getCache( rca.getCacheName() );
+            // by default the listener id should be 0, else it will be the
+            // listener
+            // Originally associated with the remote cache. either way is fine.
+            // We just don't want the listener id from a failover being used.
+            // If the remote server was rebooted this could be a problem if new
+            // locals were also added.
+
+            if ( ic.getStatus() == CacheStatus.ALIVE )
+            {
+                try
+                {
+                    // we could have more than one listener registered right
+                    // now.
+                    // this will not result in a loop, only duplication
+                    // stop duplicate listening.
+                    if ( facade.noWaits[0] != null && facade.noWaits[0].getStatus() == CacheStatus.ALIVE )
+                    {
+                        int fidx = facade.getRemoteCacheAttributes().getFailoverIndex();
+
+                        if ( fidx > 0 )
+                        {
+                            String serverOld = failovers[fidx];
+
+                            if ( log.isDebugEnabled() )
+                            {
+                                log.debug( "Failover Index = " + fidx + " the server at that index is ["
+                                    + serverOld + "]" );
+                            }
+
+                            if ( serverOld != null )
+                            {
+                                // create attributes that reflect the
+                                // previous failed over configuration.
+                                RemoteCacheAttributes rcaOld = (RemoteCacheAttributes) facade.getRemoteCacheAttributes().copy();
+                                RemoteUtils.parseServerAndPort(serverOld, rcaOld);
+                                RemoteCacheManager rcmOld = RemoteCacheManager.getInstance( rcaOld, cacheMgr, cacheEventLogger, elementSerializer );
+
+                                if ( rcmOld != null )
+                                {
+                                    // manager can remove by name if
+                                    // necessary
+                                    rcmOld.removeRemoteCacheListener( rcaOld );
+                                }
+                                if ( log.isInfoEnabled() )
+                                {
+                                    log.info( "Successfully deregistered from FAILOVER remote server = "
+                                        + serverOld );
+                                }
+                            }
+                        }
+                        else if ( fidx == 0 )
+                        {
+                            // this should never happen. If there are no
+                            // failovers this shouldn't get called.
+                            if ( log.isDebugEnabled() )
+                            {
+                                log.debug( "No need to restore primary, it is already restored." );
+                                return true;
+                            }
+                        }
+                        else if ( fidx < 0 )
+                        {
+                            // this should never happen
+                            log.warn( "Failover index is less than 0, this shouldn't happen" );
+                        }
+                    }
+                }
+                catch ( IOException e )
+                {
+                    // TODO, should try again, or somehow stop the listener
+                    log.error(
+                               "Trouble trying to deregister old failover listener prior to restoring the primary = "
+                                   + server, e );
+                }
+
+                // Restore primary
+                // may need to do this more gracefully, letting the failover finish in the background
+                RemoteCacheNoWait<K, V> failoverNoWait = facade.noWaits[0];
+
+                // swap in a new one
+                facade.noWaits = new RemoteCacheNoWait[1];
+                facade.noWaits[0] = (RemoteCacheNoWait<K, V>) ic;
+                facade.getRemoteCacheAttributes().setFailoverIndex( 0 );
+
+                if ( log.isInfoEnabled() )
+                {
+                    String message = "Successfully reconnected to PRIMARY remote server.  Substituted primary for failoverNoWait [" + failoverNoWait + "]";
+                    log.info( message );
+
+                    if ( facade.getCacheEventLogger() != null )
+                    {
+                        facade.getCacheEventLogger().logApplicationEvent( "RemoteCacheFailoverRunner", "RestoredPrimary",
+                                                                          message );
+                    }
+                }
+                return true;
+            }
+
+            // else all right
+            // if the failover index was at 0 here, we would be in a bad
+            // situation, unless there were just
+            // no failovers configured.
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Primary server status in error, not connected." );
+            }
+        }
+        catch ( NumberFormatException ex )
+        {
+            log.error( ex );
+        }
+        return false;
+    }
+
+    /**
+     * Sets the "alright" flag to false in a critical section. This flag
+     * indicates whether or not we are connected to any server at all. If we are
+     * connected to a secondary server, then alright will be true, but we will
+     * continue to try to restore the connection with the primary server.
+     * <p>
+     * The primary server is the first server defines in the FailoverServers
+     * list.
+     */
+    private void bad()
+    {
+        if ( alright )
+        {
+            synchronized ( this )
+            {
+                alright = false;
+            }
+        }
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/RemoteCacheListener.java b/src/org/apache/commons/jcs/auxiliary/remote/RemoteCacheListener.java
new file mode 100644
index 0000000..ff79d7a
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/RemoteCacheListener.java
@@ -0,0 +1,121 @@
+package org.apache.commons.jcs.auxiliary.remote;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.remote.behavior.IRemoteCacheAttributes;
+import org.apache.commons.jcs.auxiliary.remote.behavior.IRemoteCacheConstants;
+import org.apache.commons.jcs.auxiliary.remote.behavior.IRemoteCacheListener;
+import org.apache.commons.jcs.engine.behavior.ICompositeCacheManager;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.rmi.RemoteException;
+import java.rmi.server.UnicastRemoteObject;
+
+/**
+ * Registered with RemoteCache server. The server updates the local caches via this listener. Each
+ * server assigns a unique listener id for a listener.
+ * <p>
+ * One listener is used per remote cache server. The same listener is used for all the regions that
+ * talk to a particular server.
+ */
+public class RemoteCacheListener<K, V>
+    extends AbstractRemoteCacheListener<K, V>
+    implements IRemoteCacheConstants, Serializable, IRemoteCacheListener<K, V>
+{
+    /** Don't change */
+    private static final long serialVersionUID = 25345252345322345L;
+
+    /** The logger */
+    private static final Log log = LogFactory.getLog( RemoteCacheListener.class );
+
+    /** Has this client been shutdown. */
+    private boolean disposed = false;
+
+    /**
+     * Only need one since it does work for all regions, just reference by multiple region names.
+     * <p>
+     * The constructor exports this object, making it available to receive incoming calls. The
+     * callback port is anonymous unless a local port value was specified in the configuration.
+     * <p>
+     * @param irca
+     * @param cacheMgr
+     */
+    public RemoteCacheListener( IRemoteCacheAttributes irca, ICompositeCacheManager cacheMgr )
+    {
+        super( irca, cacheMgr );
+
+        // Export this remote object to make it available to receive incoming
+        // calls.
+        try
+        {
+            UnicastRemoteObject.exportObject( this, irca.getLocalPort() );
+        }
+        catch ( RemoteException ex )
+        {
+            log.error( "Problem exporting object.", ex );
+            throw new IllegalStateException( ex.getMessage() );
+        }
+    }
+
+    /**
+     * Deregister itself.
+     * <p>
+     * @throws IOException
+     */
+    @Override
+    public synchronized void dispose()
+        throws IOException
+    {
+        if ( !disposed )
+        {
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "Unexporting listener." );
+            }
+            try
+            {
+                UnicastRemoteObject.unexportObject( this, true );
+            }
+            catch ( RemoteException ex )
+            {
+                log.error( "Problem unexporting the listener.", ex );
+                throw new IllegalStateException( ex.getMessage() );
+            }
+            disposed = true;
+        }
+    }
+
+    /**
+     * For easier debugging.
+     * <p>
+     * @return Basic info on this listener.
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder buf = new StringBuilder();
+        buf.append( "\n RemoteCacheListener: " );
+        buf.append( super.toString() );
+        return buf.toString();
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/RemoteCacheManager.java b/src/org/apache/commons/jcs/auxiliary/remote/RemoteCacheManager.java
new file mode 100644
index 0000000..0eb4097
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/RemoteCacheManager.java
@@ -0,0 +1,612 @@
+package org.apache.commons.jcs.auxiliary.remote;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.remote.behavior.IRemoteCacheAttributes;
+import org.apache.commons.jcs.auxiliary.remote.behavior.IRemoteCacheClient;
+import org.apache.commons.jcs.auxiliary.remote.behavior.IRemoteCacheListener;
+import org.apache.commons.jcs.engine.CacheWatchRepairable;
+import org.apache.commons.jcs.engine.ZombieCacheServiceNonLocal;
+import org.apache.commons.jcs.engine.ZombieCacheWatch;
+import org.apache.commons.jcs.engine.behavior.ICache;
+import org.apache.commons.jcs.engine.behavior.ICacheObserver;
+import org.apache.commons.jcs.engine.behavior.ICacheServiceNonLocal;
+import org.apache.commons.jcs.engine.behavior.ICompositeCacheManager;
+import org.apache.commons.jcs.engine.behavior.IElementSerializer;
+import org.apache.commons.jcs.engine.behavior.IShutdownObserver;
+import org.apache.commons.jcs.engine.logging.behavior.ICacheEventLogger;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.IOException;
+import java.rmi.Naming;
+import java.rmi.registry.Registry;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * An instance of RemoteCacheManager corresponds to one remote connection of a specific host and
+ * port. All RemoteCacheManager instances are monitored by the singleton RemoteCacheMonitor
+ * monitoring daemon for error detection and recovery.
+ * <p>
+ * Getting an instance of the remote cache has the effect of getting a handle on the remote server.
+ * Listeners are not registered with the server until a cache is requested from the manager.
+ */
+public class RemoteCacheManager
+    implements IShutdownObserver
+{
+    /** The logger */
+    private static final Log log = LogFactory.getLog( RemoteCacheManager.class );
+
+    /** Contains mappings of Location instance to RemoteCacheManager instance. */
+    static final Map<Location, RemoteCacheManager> instances = new HashMap<Location, RemoteCacheManager>();
+
+    /** Monitors connections. */
+    private static RemoteCacheMonitor monitor;
+
+    /** Not so useful. How many getCaches over releases were called. */
+    private int clients;
+
+    /** Contains instances of RemoteCacheNoWait managed by a RemoteCacheManager instance. */
+    final Map<String, RemoteCacheNoWait<?, ?>> caches =
+        new HashMap<String, RemoteCacheNoWait<?, ?>>();
+
+    /** The remote host */
+    final String host;
+
+    /** The remote port */
+    final int port;
+
+    /** The service name */
+    final String service;
+
+    /** The configuration attributes. */
+    private IRemoteCacheAttributes remoteCacheAttributes;
+
+    /** The event logger. */
+    private final ICacheEventLogger cacheEventLogger;
+
+    /** The serializer. */
+    private final IElementSerializer elementSerializer;
+
+    /** Handle to the remote cache service; or a zombie handle if failed to connect. */
+    private ICacheServiceNonLocal<?, ?> remoteService;
+
+    /**
+     * Wrapper of the remote cache watch service; or wrapper of a zombie service if failed to
+     * connect.
+     */
+    private CacheWatchRepairable remoteWatch;
+
+    /** The cache manager listeners will need to use to get a cache. */
+    private final ICompositeCacheManager cacheMgr;
+
+    /** The service found through lookup */
+    //private String registry;
+
+    /**
+     * Constructs an instance to with the given remote connection parameters. If the connection
+     * cannot be made, "zombie" services will be temporarily used until a successful re-connection
+     * is made by the monitoring daemon.
+     * <p>
+     * @param host
+     * @param port
+     * @param service
+     * @param cacheMgr
+     * @param cacheEventLogger
+     * @param elementSerializer
+     */
+    private RemoteCacheManager( String host, int port, String service, ICompositeCacheManager cacheMgr,
+                                ICacheEventLogger cacheEventLogger, IElementSerializer elementSerializer )
+    {
+        this.host = host;
+        this.port = port;
+        this.service = service;
+        this.cacheMgr = cacheMgr;
+        this.cacheEventLogger = cacheEventLogger;
+        this.elementSerializer = elementSerializer;
+
+        // register shutdown observer
+        this.cacheMgr.registerShutdownObserver( this );
+
+        String registry = RemoteUtils.getNamingURL(host, port, service);
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "Looking up server [" + registry + "]" );
+        }
+        try
+        {
+            Object obj = Naming.lookup( registry );
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "Server found: " + obj );
+            }
+
+            // Successful connection to the remote server.
+            remoteService = (ICacheServiceNonLocal<?, ?>) obj;
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "remoteService = " + remoteService );
+            }
+
+            ICacheObserver remoteObserver = (ICacheObserver) obj;
+            remoteWatch = new CacheWatchRepairable();
+            remoteWatch.setCacheWatch( remoteObserver );
+        }
+        catch ( Exception ex )
+        {
+            // Failed to connect to the remote server.
+            // Configure this RemoteCacheManager instance to use the "zombie"
+            // services.
+            log.error( "Problem finding server at [" + registry + "]", ex );
+            remoteService = new ZombieCacheServiceNonLocal<String, String>();
+            remoteWatch = new CacheWatchRepairable();
+            remoteWatch.setCacheWatch( new ZombieCacheWatch() );
+
+            // Notify the cache monitor about the error, and kick off the
+            // recovery process.
+            RemoteCacheMonitor.getInstance().notifyError();
+        }
+    }
+
+    /**
+     * Gets the defaultCattr attribute of the RemoteCacheManager object.
+     * <p>
+     * @return The defaultCattr value
+     */
+    public IRemoteCacheAttributes getDefaultCattr()
+    {
+        return this.remoteCacheAttributes;
+    }
+
+    /**
+     * Adds the remote cache listener to the underlying cache-watch service.
+     * <p>
+     * @param cattr The feature to be added to the RemoteCacheListener attribute
+     * @param listener The feature to be added to the RemoteCacheListener attribute
+     * @throws IOException
+     */
+    public <K, V> void addRemoteCacheListener( IRemoteCacheAttributes cattr, IRemoteCacheListener<K, V> listener )
+        throws IOException
+    {
+        if ( cattr.isReceive() )
+        {
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "The remote cache is configured to receive events from the remote server.  "
+                    + "We will register a listener. remoteWatch = " + remoteWatch + " | IRemoteCacheListener = "
+                    + listener + " | cacheName " + cattr.getCacheName() );
+            }
+
+            synchronized ( caches )
+            {
+                remoteWatch.addCacheListener( cattr.getCacheName(), listener );
+            }
+        }
+        else
+        {
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "The remote cache is configured to NOT receive events from the remote server.  "
+                    + "We will NOT register a listener." );
+            }
+        }
+    }
+
+    /**
+     * Removes a listener. When the primary recovers the failover must deregister itself for a
+     * region. The failover runner will call this method to de-register. We do not want to deregister
+     * all listeners to a remote server, in case a failover is a primary of another region. Having
+     * one regions failover act as another servers primary is not currently supported.
+     * <p>
+     * @param cattr
+     * @param listener
+     * @throws IOException
+     */
+    public <K, V> void removeRemoteCacheListener( IRemoteCacheAttributes cattr, IRemoteCacheListener<K, V> listener )
+        throws IOException
+    {
+        synchronized ( caches )
+        {
+            remoteWatch.removeCacheListener( cattr.getCacheName(), listener );
+        }
+    }
+
+    /**
+     * Stops a listener. This is used to deregister a failover after primary reconnection.
+     * <p>
+     * @param cattr
+     * @throws IOException
+     */
+    public void removeRemoteCacheListener( IRemoteCacheAttributes cattr )
+        throws IOException
+    {
+        synchronized ( caches )
+        {
+            RemoteCacheNoWait<?, ?> cache = caches.get( cattr.getCacheName() );
+            if ( cache != null )
+            {
+                IRemoteCacheClient<?, ?> rc = cache.getRemoteCache();
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "Found cache for[ " + cattr.getCacheName() + "], deregistering listener." );
+                }
+                // could also store the listener for a server in the manager.
+                IRemoteCacheListener<?, ?> listener = rc.getListener();
+                remoteWatch.removeCacheListener( cattr.getCacheName(), listener );
+            }
+            else
+            {
+                if ( cattr.isReceive() )
+                {
+                    log.warn( "Trying to deregister Cache Listener that was never registered." );
+                }
+                else
+                {
+                    if ( log.isDebugEnabled() )
+                    {
+                        log.debug( "Since the remote cache is configured to not receive, "
+                            + "there is no listener to deregister." );
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * Stops a listener. This is used to deregister a failover after primary reconnection.
+     * <p>
+     * @param cacheName
+     * @throws IOException
+     */
+    public void removeRemoteCacheListener( String cacheName )
+        throws IOException
+    {
+        synchronized ( caches )
+        {
+            RemoteCacheNoWait<?, ?> cache = caches.get( cacheName );
+            if ( cache != null )
+            {
+                IRemoteCacheClient<?, ?> rc = cache.getRemoteCache();
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "Found cache for [" + cacheName + "], deregistering listener." );
+                }
+                // could also store the listener for a server in the manager.
+                IRemoteCacheListener<?, ?> listener = rc.getListener();
+                remoteWatch.removeCacheListener( cacheName, listener );
+            }
+        }
+    }
+
+    /**
+     * Returns an instance of RemoteCacheManager for the given connection parameters.
+     * <p>
+     * Host and Port uniquely identify a manager instance.
+     * <p>
+     * Also starts up the monitoring daemon, if not already started.
+     * <p>
+     * If the connection cannot be established, zombie objects will be used for future recovery
+     * purposes.
+     * <p>
+     * @param cattr
+     * @param cacheMgr
+     * @param cacheEventLogger
+     * @param elementSerializer
+     * @return The instance value
+     */
+    public static RemoteCacheManager getInstance( IRemoteCacheAttributes cattr, ICompositeCacheManager cacheMgr,
+                                                  ICacheEventLogger cacheEventLogger,
+                                                  IElementSerializer elementSerializer )
+    {
+        String host = cattr.getRemoteHost();
+        int port = cattr.getRemotePort();
+        String service = cattr.getRemoteServiceName();
+        if ( host == null )
+        {
+            host = "";
+        }
+        if ( port < 1024 )
+        {
+            port = Registry.REGISTRY_PORT;
+        }
+        Location loc = new Location( host, port );
+
+        RemoteCacheManager ins = null;
+        synchronized ( instances )
+        {
+            ins = instances.get( loc );
+            if ( ins == null )
+            {
+                // Change to use cattr and to set defaults
+                ins = new RemoteCacheManager( host, port, service, cacheMgr, cacheEventLogger, elementSerializer );
+                ins.remoteCacheAttributes = cattr;
+                instances.put( loc, ins );
+            }
+        }
+
+        ins.clients++;
+        // Fires up the monitoring daemon.
+        if ( monitor == null )
+        {
+            monitor = RemoteCacheMonitor.getInstance();
+            // If the returned monitor is null, it means it's already started
+            // elsewhere.
+            if ( monitor != null )
+            {
+                Thread t = new Thread( monitor );
+                t.setDaemon( true );
+                t.start();
+            }
+        }
+        return ins;
+    }
+
+    /**
+     * Returns a remote cache for the given cache name.
+     * <p>
+     * @param cacheName
+     * @return The cache value
+     */
+    public <K, V> RemoteCacheNoWait<K, V> getCache( String cacheName )
+    {
+        IRemoteCacheAttributes ca = (IRemoteCacheAttributes) remoteCacheAttributes.copy();
+        ca.setCacheName( cacheName );
+        return getCache( ca );
+    }
+
+    /**
+     * Gets a RemoteCacheNoWait from the RemoteCacheManager. The RemoteCacheNoWait objects are
+     * identified by the cache name value of the RemoteCacheAttributes object.
+     * <p>
+     * If the client is configured to register a listener, this call results on a listener being
+     * created if one isn't already registered with the remote cache for this region.
+     * <p>
+     * @param cattr
+     * @return The cache value
+     */
+    public <K, V> RemoteCacheNoWait<K, V> getCache( IRemoteCacheAttributes cattr )
+    {
+        RemoteCacheNoWait<K, V> remoteCacheNoWait = null;
+
+        synchronized ( caches )
+        {
+            @SuppressWarnings("unchecked") // Need to cast because of common map for all caches
+            RemoteCacheNoWait<K, V> remoteCacheNoWait2 = (RemoteCacheNoWait<K, V>) caches.get( cattr.getCacheName() );
+            remoteCacheNoWait = remoteCacheNoWait2;
+            if ( remoteCacheNoWait == null )
+            {
+                // create a listener first and pass it to the remotecache
+                // sender.
+                RemoteCacheListener<K, V> listener = null;
+                try
+                {
+                    listener = new RemoteCacheListener<K, V>( cattr, cacheMgr );
+                    addRemoteCacheListener( cattr, listener );
+                }
+                catch ( IOException ioe )
+                {
+                    log.error( "IOException. Problem adding listener. Message: " + ioe.getMessage()
+                        + " | RemoteCacheListener = " + listener, ioe );
+                }
+                catch ( Exception e )
+                {
+                    log.error( "Problem adding listener. Message: " + e.getMessage() + " | RemoteCacheListener = "
+                        + listener, e );
+                }
+
+                @SuppressWarnings("unchecked") // Need to cast for specialized type
+                IRemoteCacheClient<K, V> remoteCacheClient = new RemoteCache<K, V>( cattr, (ICacheServiceNonLocal<K, V>) remoteService, listener );
+                remoteCacheClient.setCacheEventLogger( cacheEventLogger );
+                remoteCacheClient.setElementSerializer( elementSerializer );
+
+                remoteCacheNoWait = new RemoteCacheNoWait<K, V>( remoteCacheClient );
+                remoteCacheNoWait.setCacheEventLogger( cacheEventLogger );
+                remoteCacheNoWait.setElementSerializer( elementSerializer );
+
+                caches.put( cattr.getCacheName(), remoteCacheNoWait );
+            }
+
+            // might want to do some listener sanity checking here.
+        }
+
+        return remoteCacheNoWait;
+    }
+
+    /**
+     * Releases.
+     * <p>
+     * @param name
+     * @throws IOException
+     */
+    public void freeCache( String name )
+        throws IOException
+    {
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "freeCache [" + name + "]" );
+        }
+        ICache<?, ?> c = null;
+        synchronized ( caches )
+        {
+            c = caches.get( name );
+        }
+        if ( c != null )
+        {
+            this.removeRemoteCacheListener( name );
+            c.dispose();
+        }
+    }
+
+    /**
+     * Gets the stats attribute of the RemoteCacheManager object
+     * <p>
+     * @return The stats value
+     */
+    public String getStats()
+    {
+        StringBuilder stats = new StringBuilder();
+        for (RemoteCacheNoWait<?, ?> c : caches.values())
+        {
+            if ( c != null )
+            {
+                stats.append( c.getCacheName() );
+            }
+        }
+        return stats.toString();
+    }
+
+    /** Shutdown all. */
+    public void release()
+    {
+        // Wait until called by the last client
+        if ( --clients != 0 )
+        {
+            return;
+        }
+        synchronized ( caches )
+        {
+            for (RemoteCacheNoWait<?, ?> c : caches.values())
+            {
+                if ( c != null )
+                {
+                    try
+                    {
+                        // c.dispose();
+                        freeCache( c.getCacheName() );
+                    }
+                    catch ( IOException ex )
+                    {
+                        log.error( "Problem in release.", ex );
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * Fixes up all the caches managed by this cache manager.
+     * <p>
+     * @param remoteService
+     * @param remoteWatch
+     */
+    public void fixCaches( ICacheServiceNonLocal<?, ?> remoteService, ICacheObserver remoteWatch )
+    {
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "Fixing caches. ICacheServiceNonLocal " + remoteService + " | IRemoteCacheObserver " + remoteWatch );
+        }
+        synchronized ( caches )
+        {
+            this.remoteService = remoteService;
+            this.remoteWatch.setCacheWatch( remoteWatch );
+            for (RemoteCacheNoWait<?, ?> c : caches.values())
+            {
+                c.fixCache( remoteService );
+            }
+        }
+    }
+
+    /**
+     * Location of the RMI registry.
+     */
+    private static final class Location
+    {
+        /** Description of the Field */
+        public final String host;
+
+        /** Description of the Field */
+        public final int port;
+
+        /**
+         * Constructor for the Location object
+         * <p>
+         * @param host
+         * @param port
+         */
+        public Location( String host, int port )
+        {
+            this.host = host;
+            this.port = port;
+        }
+
+        /**
+         * @param obj
+         * @return true if the host and port are equal
+         */
+        @Override
+        public boolean equals( Object obj )
+        {
+            if ( obj == this )
+            {
+                return true;
+            }
+            if ( obj == null || !( obj instanceof Location ) )
+            {
+                return false;
+            }
+            Location l = (Location) obj;
+            if ( this.host == null )
+            {
+                return l.host == null && port == l.port;
+            }
+            return host.equals( l.host ) && port == l.port;
+        }
+
+        /**
+         * @return int
+         */
+        @Override
+        public int hashCode()
+        {
+            return host == null ? port : host.hashCode() ^ port;
+        }
+    }
+
+    /**
+     * Shutdown callback from composite cache manager.
+     * <p>
+     * @see org.apache.commons.jcs.engine.behavior.IShutdownObserver#shutdown()
+     */
+    @Override
+    public void shutdown()
+    {
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "Observed shutdown request." );
+        }
+        release();
+    }
+
+    /**
+     * Logs an event if an event logger is configured.
+     * <p>
+     * @param source
+     * @param eventName
+     * @param optionalDetails
+     */
+    protected void logApplicationEvent( String source, String eventName, String optionalDetails )
+    {
+        if ( cacheEventLogger != null )
+        {
+            cacheEventLogger.logApplicationEvent( source, eventName, optionalDetails );
+        }
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/RemoteCacheMonitor.java b/src/org/apache/commons/jcs/auxiliary/remote/RemoteCacheMonitor.java
new file mode 100644
index 0000000..cb6e6b5
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/RemoteCacheMonitor.java
@@ -0,0 +1,224 @@
+package org.apache.commons.jcs.auxiliary.remote;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.CacheStatus;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Used to monitor and repair any failed connection for the remote cache service. By default the
+ * monitor operates in a failure driven mode. That is, it goes into a wait state until there is an
+ * error. TODO consider moving this into an active monitoring mode. Upon the notification of a
+ * connection error, the monitor changes to operate in a time driven mode. That is, it attempts to
+ * recover the connections on a periodic basis. When all failed connections are restored, it changes
+ * back to the failure driven mode.
+ */
+public class RemoteCacheMonitor
+    implements Runnable
+{
+    /** The logger */
+    private static final Log log = LogFactory.getLog( RemoteCacheMonitor.class );
+
+    /** The remote cache that we are monitoring */
+    private static RemoteCacheMonitor instance;
+
+    /** Time between checks */
+    private static long idlePeriod = 30 * 1000;
+
+    // minimum 30 seconds.
+    //private static long idlePeriod = 3*1000; // for debugging.
+
+    /**
+     * Must make sure RemoteCacheMonitor is started before any remote error can be detected!
+     */
+    private boolean alright = true;
+
+    /** Time driven mode */
+    static final int TIME = 0;
+
+    /** Error driven mode -- only check on health if there is an error */
+    static final int ERROR = 1;
+
+    /** The mode to use */
+    static int mode = ERROR;
+
+    /**
+     * Configures the idle period between repairs.
+     * <p>
+     * @param idlePeriod The new idlePeriod value
+     */
+    public static void setIdlePeriod( long idlePeriod )
+    {
+        if ( idlePeriod > RemoteCacheMonitor.idlePeriod )
+        {
+            RemoteCacheMonitor.idlePeriod = idlePeriod;
+        }
+    }
+
+    /** Constructor for the RemoteCacheMonitor object */
+    private RemoteCacheMonitor()
+    {
+        super();
+    }
+
+    /**
+     * Returns the singleton instance.
+     * <p>
+     * @return The instance value
+     */
+    static RemoteCacheMonitor getInstance()
+    {
+        synchronized ( RemoteCacheMonitor.class )
+        {
+            if ( instance == null )
+            {
+                return instance = new RemoteCacheMonitor();
+            }
+        }
+        return instance;
+    }
+
+    /**
+     * Notifies the cache monitor that an error occurred, and kicks off the error recovery process.
+     */
+    public void notifyError()
+    {
+        log.debug( "Notified of an error." );
+        bad();
+        synchronized ( this )
+        {
+            notify();
+        }
+    }
+
+    // Run forever.
+
+    // Avoid the use of any synchronization in the process of monitoring for
+    // performance reason.
+    // If exception is thrown owing to synchronization,
+    // just skip the monitoring until the next round.
+    /** Main processing method for the RemoteCacheMonitor object */
+    @Override
+    public void run()
+    {
+        log.debug( "Monitoring daemon started" );
+        do
+        {
+            if ( mode == ERROR )
+            {
+                synchronized ( this )
+                {
+                    if ( alright )
+                    {
+                        // make this configurable, comment out wait to enter
+                        // time driven mode
+                        // Failure driven mode.
+                        try
+                        {
+                            if ( log.isDebugEnabled() )
+                            {
+                                log.debug( "FAILURE DRIVEN MODE: cache monitor waiting for error" );
+                            }
+                            wait();
+                            // wake up only if there is an error.
+                        }
+                        catch ( InterruptedException ignore )
+                        {
+                            // swallow
+                        }
+                    }
+                }
+            }
+            else
+            {
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "TIME DRIVEN MODE: cache monitor sleeping for " + idlePeriod );
+                }
+                // Time driven mode: sleep between each round of recovery
+                // attempt.
+                // will need to test not just check status
+            }
+
+            try
+            {
+                Thread.sleep( idlePeriod );
+            }
+            catch ( InterruptedException ex )
+            {
+                // ignore;
+            }
+
+            // The "alright" flag must be false here.
+            // Simply presume we can fix all the errors until proven otherwise.
+            synchronized ( this )
+            {
+                alright = true;
+            }
+            //p("cache monitor running.");
+            // Monitor each RemoteCacheManager instance one after the other.
+            // Each RemoteCacheManager corresponds to one remote connection.
+            for (RemoteCacheManager mgr : RemoteCacheManager.instances.values())
+            {
+                try
+                {
+                    // If any cache is in error, it strongly suggests all caches
+                    // managed by the
+                    // same RmicCacheManager instance are in error. So we fix
+                    // them once and for all.
+                    for (RemoteCacheNoWait<?, ?> c : mgr.caches.values())
+                    {
+                        if ( c.getStatus() == CacheStatus.ERROR )
+                        {
+                            RemoteCacheRestore repairer = new RemoteCacheRestore( mgr );
+                            // If we can't fix them, just skip and re-try in
+                            // the next round.
+                            if ( repairer.canFix() )
+                            {
+                                repairer.fix();
+                            }
+                            else
+                            {
+                                bad();
+                            }
+                            break;
+                        }
+                    }
+                }
+                catch ( Exception ex )
+                {
+                    bad();
+                    // Problem encountered in fixing the caches managed by a
+                    // RemoteCacheManager instance.
+                    // Soldier on to the next RemoteCacheManager instance.
+                    log.error( "Problem fixing caches for manager." + mgr, ex );
+                }
+            }
+        }
+        while ( true );
+    }
+
+    /** Sets the "aright" flag to false in a critical section. */
+    private synchronized void bad()
+    {
+        alright = false;
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/RemoteCacheNoWait.java b/src/org/apache/commons/jcs/auxiliary/remote/RemoteCacheNoWait.java
new file mode 100644
index 0000000..33e9f5a
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/RemoteCacheNoWait.java
@@ -0,0 +1,529 @@
+package org.apache.commons.jcs.auxiliary.remote;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.AbstractAuxiliaryCache;
+import org.apache.commons.jcs.auxiliary.AuxiliaryCacheAttributes;
+import org.apache.commons.jcs.auxiliary.remote.behavior.IRemoteCacheClient;
+import org.apache.commons.jcs.engine.CacheAdaptor;
+import org.apache.commons.jcs.engine.CacheEventQueueFactory;
+import org.apache.commons.jcs.engine.CacheStatus;
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.behavior.ICacheEventQueue;
+import org.apache.commons.jcs.engine.behavior.ICacheServiceNonLocal;
+import org.apache.commons.jcs.engine.stats.StatElement;
+import org.apache.commons.jcs.engine.stats.Stats;
+import org.apache.commons.jcs.engine.stats.behavior.IStatElement;
+import org.apache.commons.jcs.engine.stats.behavior.IStats;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.IOException;
+import java.rmi.UnmarshalException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * The RemoteCacheNoWait wraps the RemoteCacheClient. The client holds a handle on the
+ * RemoteCacheService.
+ * <p>
+ * Used to queue up update requests to the underlying cache. These requests will be processed in
+ * their order of arrival via the cache event queue processor.
+ * <p>
+ * Typically errors will be handled down stream. We only need to kill the queue if an error makes it
+ * to this level from the queue. That can only happen if the queue is damaged, since the events are
+ * Processed asynchronously.
+ * <p>
+ * There is no reason to create a queue on startup if the remote is not healthy.
+ * <p>
+ * If the remote cache encounters an error it will zombie--create a balking facade for the service.
+ * The Zombie will queue up items until the connection is restored. An alternative way to accomplish
+ * the same thing would be to stop, not destroy the queue at this level. That way items would be
+ * added to the queue and then when the connection is restored, we could start the worker threads
+ * again. This is a better long term solution, but it requires some significant changes to the
+ * complicated worker queues.
+ */
+public class RemoteCacheNoWait<K, V>
+    extends AbstractAuxiliaryCache<K, V>
+{
+    /** log instance */
+    private static final Log log = LogFactory.getLog( RemoteCacheNoWait.class );
+
+    /** The remote cache client */
+    private final IRemoteCacheClient<K, V> remoteCacheClient;
+
+    /** Event queue for queuing up calls like put and remove. */
+    private ICacheEventQueue<K, V> cacheEventQueue;
+
+    /** how many times get has been called. */
+    private int getCount = 0;
+
+    /** how many times getMatching has been called. */
+    private int getMatchingCount = 0;
+
+    /** how many times getMultiple has been called. */
+    private int getMultipleCount = 0;
+
+    /** how many times remove has been called. */
+    private int removeCount = 0;
+
+    /** how many times put has been called. */
+    private int putCount = 0;
+
+    /**
+     * Constructs with the given remote cache, and fires up an event queue for asynchronous
+     * processing.
+     * <p>
+     * @param cache
+     */
+    public RemoteCacheNoWait( IRemoteCacheClient<K, V> cache )
+    {
+        remoteCacheClient = cache;
+
+        CacheEventQueueFactory<K, V> factory = new CacheEventQueueFactory<K, V>();
+        this.cacheEventQueue = factory.createCacheEventQueue( new CacheAdaptor<K, V>( remoteCacheClient ), remoteCacheClient
+            .getListenerId(), remoteCacheClient.getCacheName(), remoteCacheClient.getAuxiliaryCacheAttributes()
+            .getEventQueuePoolName(), remoteCacheClient.getAuxiliaryCacheAttributes().getEventQueueType() );
+
+        if ( remoteCacheClient.getStatus() == CacheStatus.ERROR )
+        {
+            cacheEventQueue.destroy();
+        }
+    }
+
+    /**
+     * Adds a put event to the queue.
+     * <p>
+     * @param element
+     * @throws IOException
+     */
+    @Override
+    public void update( ICacheElement<K, V> element )
+        throws IOException
+    {
+        putCount++;
+        try
+        {
+            cacheEventQueue.addPutEvent( element );
+        }
+        catch ( IOException e )
+        {
+            log.error( "Problem adding putEvent to queue.", e );
+            cacheEventQueue.destroy();
+            throw e;
+        }
+    }
+
+    /**
+     * Synchronously reads from the remote cache.
+     * <p>
+     * @param key
+     * @return element from the remote cache, or null if not present
+     * @throws IOException
+     */
+    @Override
+    public ICacheElement<K, V> get( K key )
+        throws IOException
+    {
+        getCount++;
+        try
+        {
+            return remoteCacheClient.get( key );
+        }
+        catch ( UnmarshalException ue )
+        {
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Retrying the get owing to UnmarshalException." );
+            }
+
+            try
+            {
+                return remoteCacheClient.get( key );
+            }
+            catch ( IOException ex )
+            {
+                if ( log.isInfoEnabled() )
+                {
+                    log.info( "Failed in retrying the get for the second time. " + ex.getMessage() );
+                }
+            }
+        }
+        catch ( IOException ex )
+        {
+            // We don't want to destroy the queue on a get failure.
+            // The RemoteCache will Zombie and queue.
+            // Since get does not use the queue, I don't want to kill the queue.
+            throw ex;
+        }
+
+        return null;
+    }
+
+    /**
+     * @param pattern
+     * @return Map
+     * @throws IOException
+     *
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> getMatching( String pattern )
+        throws IOException
+    {
+        getMatchingCount++;
+        try
+        {
+            return remoteCacheClient.getMatching( pattern );
+        }
+        catch ( UnmarshalException ue )
+        {
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Retrying the getMatching owing to UnmarshalException." );
+            }
+
+            try
+            {
+                return remoteCacheClient.getMatching( pattern );
+            }
+            catch ( IOException ex )
+            {
+                if ( log.isInfoEnabled() )
+                {
+                    log.info( "Failed in retrying the getMatching for the second time. " + ex.getMessage() );
+                }
+            }
+        }
+        catch ( IOException ex )
+        {
+            // We don't want to destroy the queue on a get failure.
+            // The RemoteCache will Zombie and queue.
+            // Since get does not use the queue, I don't want to kill the queue.
+            throw ex;
+        }
+
+        return Collections.emptyMap();
+    }
+
+    /**
+     * Gets multiple items from the cache based on the given set of keys. Sends the getMultiple
+     * request on to the server rather than looping through the requested keys.
+     * <p>
+     * @param keys
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data in cache for any of these keys
+     * @throws IOException
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> getMultiple( Set<K> keys )
+        throws IOException
+    {
+        getMultipleCount++;
+        try
+        {
+            return remoteCacheClient.getMultiple( keys );
+        }
+        catch ( UnmarshalException ue )
+        {
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Retrying the getMultiple owing to UnmarshalException..." );
+            }
+
+            try
+            {
+                return remoteCacheClient.getMultiple( keys );
+            }
+            catch ( IOException ex )
+            {
+                if ( log.isInfoEnabled() )
+                {
+                    log.info( "Failed in retrying the getMultiple for the second time. " + ex.getMessage() );
+                }
+            }
+        }
+        catch ( IOException ex )
+        {
+            // We don't want to destroy the queue on a get failure.
+            // The RemoteCache will Zombie and queue.
+            // Since get does not use the queue, I don't want to kill the queue.
+            throw ex;
+        }
+
+        return new HashMap<K, ICacheElement<K, V>>();
+    }
+
+    /**
+     * Return the keys in this cache.
+     * <p>
+     * @see org.apache.commons.jcs.auxiliary.AuxiliaryCache#getKeySet()
+     */
+    @Override
+    public Set<K> getKeySet() throws IOException
+    {
+        return remoteCacheClient.getKeySet();
+    }
+
+    /**
+     * Adds a remove request to the remote cache.
+     * <p>
+     * @param key
+     * @return if this was successful
+     * @throws IOException
+     */
+    @Override
+    public boolean remove( K key )
+        throws IOException
+    {
+        removeCount++;
+        try
+        {
+            cacheEventQueue.addRemoveEvent( key );
+        }
+        catch ( IOException e )
+        {
+            log.error( "Problem adding RemoveEvent to queue.", e );
+            cacheEventQueue.destroy();
+            throw e;
+        }
+        return false;
+    }
+
+    /**
+     * Adds a removeAll request to the remote cache.
+     * <p>
+     * @throws IOException
+     */
+    @Override
+    public void removeAll()
+        throws IOException
+    {
+        try
+        {
+            cacheEventQueue.addRemoveAllEvent();
+        }
+        catch ( IOException e )
+        {
+            log.error( "Problem adding RemoveAllEvent to queue.", e );
+            cacheEventQueue.destroy();
+            throw e;
+        }
+    }
+
+    /** Adds a dispose request to the remote cache. */
+    @Override
+    public void dispose()
+    {
+        try
+        {
+            cacheEventQueue.addDisposeEvent();
+        }
+        catch ( IOException e )
+        {
+            log.error( "Problem adding DisposeEvent to queue.", e );
+            cacheEventQueue.destroy();
+        }
+    }
+
+    /**
+     * No remote invocation.
+     * <p>
+     * @return The size value
+     */
+    @Override
+    public int getSize()
+    {
+        return remoteCacheClient.getSize();
+    }
+
+    /**
+     * No remote invocation.
+     * <p>
+     * @return The cacheType value
+     */
+    @Override
+    public CacheType getCacheType()
+    {
+        return CacheType.REMOTE_CACHE;
+    }
+
+    /**
+     * Returns the asyn cache status. An error status indicates either the remote connection is not
+     * available, or the asyn queue has been unexpectedly destroyed. No remote invocation.
+     * <p>
+     * @return The status value
+     */
+    @Override
+    public CacheStatus getStatus()
+    {
+        return cacheEventQueue.isWorking() ? remoteCacheClient.getStatus() : CacheStatus.ERROR;
+    }
+
+    /**
+     * Gets the cacheName attribute of the RemoteCacheNoWait object
+     * <p>
+     * @return The cacheName value
+     */
+    @Override
+    public String getCacheName()
+    {
+        return remoteCacheClient.getCacheName();
+    }
+
+    /**
+     * Replaces the remote cache service handle with the given handle and reset the event queue by
+     * starting up a new instance.
+     * <p>
+     * @param remote
+     */
+    public void fixCache( ICacheServiceNonLocal<?, ?> remote )
+    {
+        remoteCacheClient.fixCache( remote );
+        resetEventQ();
+    }
+
+    /**
+     * Resets the event q by first destroying the existing one and starting up new one.
+     * <p>
+     * There may be no good reason to kill the existing queue. We will sometimes need to set a new
+     * listener id, so we should create a new queue. We should let the old queue drain. If we were
+     * Connected to the failover, it would be best to finish sending items.
+     */
+    public void resetEventQ()
+    {
+        ICacheEventQueue<K, V> previousQueue = cacheEventQueue;
+
+        CacheEventQueueFactory<K, V> fact = new CacheEventQueueFactory<K, V>();
+        this.cacheEventQueue = fact.createCacheEventQueue( new CacheAdaptor<K, V>( remoteCacheClient ), remoteCacheClient
+            .getListenerId(), remoteCacheClient.getCacheName(), remoteCacheClient.getAuxiliaryCacheAttributes()
+            .getEventQueuePoolName(), remoteCacheClient.getAuxiliaryCacheAttributes().getEventQueueType() );
+
+        if ( previousQueue.isWorking() )
+        {
+            // we don't expect anything, it would have all gone to the zombie
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "resetEventQ, previous queue has [" + previousQueue.size() + "] items queued up." );
+            }
+            previousQueue.destroy();
+        }
+    }
+
+    /**
+     * This is temporary. It allows the manager to get the lister.
+     * <p>
+     * @return the instance of the remote cache client used by this object
+     */
+    protected IRemoteCacheClient<K, V> getRemoteCache()
+    {
+        return remoteCacheClient;
+    }
+
+    /**
+     * @return Returns the AuxiliaryCacheAttributes.
+     */
+    @Override
+    public AuxiliaryCacheAttributes getAuxiliaryCacheAttributes()
+    {
+        return remoteCacheClient.getAuxiliaryCacheAttributes();
+    }
+
+    /**
+     * This is for testing only. It allows you to take a look at the event queue.
+     * <p>
+     * @return ICacheEventQueue
+     */
+    protected ICacheEventQueue<K, V> getCacheEventQueue()
+    {
+        return this.cacheEventQueue;
+    }
+
+    /**
+     * Returns the stats and the cache.toString().
+     * <p>
+     * (non-Javadoc)
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString()
+    {
+        return getStats() + "\n" + remoteCacheClient.toString();
+    }
+
+    /**
+     * Returns the statistics in String form.
+     * <p>
+     * @return String
+     */
+    @Override
+    public String getStats()
+    {
+        return getStatistics().toString();
+    }
+
+    /**
+     * @return statistics about this communication
+     */
+    @Override
+    public IStats getStatistics()
+    {
+        IStats stats = new Stats();
+        stats.setTypeName( "Remote Cache No Wait" );
+
+        ArrayList<IStatElement<?>> elems = new ArrayList<IStatElement<?>>();
+
+        elems.add(new StatElement<CacheStatus>( "Status", getStatus() ) );
+
+        // get the stats from the cache queue too
+        IStats cStats = this.remoteCacheClient.getStatistics();
+        if ( cStats != null )
+        {
+            elems.addAll(cStats.getStatElements());
+        }
+
+        // get the stats from the event queue too
+        IStats eqStats = this.cacheEventQueue.getStatistics();
+        elems.addAll(eqStats.getStatElements());
+
+        elems.add(new StatElement<Integer>( "Get Count", Integer.valueOf(this.getCount) ) );
+        elems.add(new StatElement<Integer>( "GetMatching Count", Integer.valueOf(this.getMatchingCount) ) );
+        elems.add(new StatElement<Integer>( "GetMultiple Count", Integer.valueOf(this.getMultipleCount) ) );
+        elems.add(new StatElement<Integer>( "Remove Count", Integer.valueOf(this.removeCount) ) );
+        elems.add(new StatElement<Integer>( "Put Count", Integer.valueOf(this.putCount) ) );
+
+        stats.setStatElements( elems );
+
+        return stats;
+    }
+
+    /**
+     * this won't be called since we don't do ICache logging here.
+     * <p>
+     * @return String
+     */
+    @Override
+    public String getEventLoggingExtraInfo()
+    {
+        return "Remote Cache No Wait";
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/RemoteCacheNoWaitFacade.java b/src/org/apache/commons/jcs/auxiliary/remote/RemoteCacheNoWaitFacade.java
new file mode 100644
index 0000000..74c71e7
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/RemoteCacheNoWaitFacade.java
@@ -0,0 +1,102 @@
+package org.apache.commons.jcs.auxiliary.remote;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.remote.server.behavior.RemoteType;
+import org.apache.commons.jcs.engine.CacheStatus;
+import org.apache.commons.jcs.engine.behavior.ICompositeCacheManager;
+import org.apache.commons.jcs.engine.behavior.IElementSerializer;
+import org.apache.commons.jcs.engine.logging.behavior.ICacheEventLogger;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Used to provide access to multiple services under nowait protection. Factory should construct
+ * NoWaitFacade to give to the composite cache out of caches it constructs from the varies manager
+ * to lateral services.
+ * <p>
+ * Typically, we only connect to one remote server per facade. We use a list of one
+ * RemoteCacheNoWait.
+ */
+public class RemoteCacheNoWaitFacade<K, V>
+    extends AbstractRemoteCacheNoWaitFacade<K, V>
+{
+    /** log instance */
+    private static final Log log = LogFactory.getLog( RemoteCacheNoWaitFacade.class );
+
+    /**
+     * Constructs with the given remote cache, and fires events to any listeners.
+     * <p>
+     * @param noWaits
+     * @param rca
+     * @param cacheMgr
+     * @param cacheEventLogger
+     * @param elementSerializer
+     */
+    public RemoteCacheNoWaitFacade( RemoteCacheNoWait<K, V>[] noWaits, RemoteCacheAttributes rca,
+                                    ICompositeCacheManager cacheMgr, ICacheEventLogger cacheEventLogger,
+                                    IElementSerializer elementSerializer )
+    {
+        super( noWaits, rca, cacheMgr, cacheEventLogger, elementSerializer );
+    }
+
+    /**
+     * Begin the failover process if this is a local cache. Clustered remote caches do not failover.
+     * <p>
+     * @param i The no wait in error.
+     */
+    @Override
+    protected void failover( int i )
+    {
+        if ( log.isDebugEnabled() )
+        {
+            log.info( "in failover for " + i );
+        }
+
+        if ( getRemoteCacheAttributes().getRemoteType() == RemoteType.LOCAL )
+        {
+            if ( noWaits[i].getStatus() == CacheStatus.ERROR )
+            {
+                // start failover, primary recovery process
+                RemoteCacheFailoverRunner<K, V> runner =
+                    new RemoteCacheFailoverRunner<K, V>( this, getCompositeCacheManager(),
+                      super.getCacheEventLogger(), super.getElementSerializer() );
+                runner.notifyError();
+                Thread t = new Thread( runner );
+                t.setDaemon( true );
+                t.start();
+
+                if ( getCacheEventLogger() != null )
+                {
+                    getCacheEventLogger().logApplicationEvent( "RemoteCacheNoWaitFacade", "InitiatedFailover",
+                                                               noWaits[i] + " was in error." );
+                }
+            }
+            else
+            {
+                if ( log.isInfoEnabled() )
+                {
+                    log.info( "The noWait is not in error" );
+                }
+            }
+        }
+    }
+
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/RemoteCacheRestore.java b/src/org/apache/commons/jcs/auxiliary/remote/RemoteCacheRestore.java
new file mode 100644
index 0000000..21525b2
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/RemoteCacheRestore.java
@@ -0,0 +1,129 @@
+package org.apache.commons.jcs.auxiliary.remote;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.behavior.ICacheObserver;
+import org.apache.commons.jcs.engine.behavior.ICacheRestore;
+import org.apache.commons.jcs.engine.behavior.ICacheServiceNonLocal;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.IOException;
+import java.rmi.Naming;
+import java.rmi.NotBoundException;
+
+/**
+ * Used to repair the remote caches managed by the associated instance of RemoteCacheManager.
+ * <p>
+ * When there is an error the monitor kicks off. The Failover runner starts looks for a manager with
+ * a connection to a remote cache that is not in error. If a manager's connection to a remote cache
+ * is found to be in error, the restorer kicks off and tries to reconnect. When it is successful, the
+ * status of the manager changes.
+ * <p>
+ * When the failover runner finds that the primary is in good shape, it will switch back. Switching
+ * back involves setting the first no wait on the no wait facade.
+ */
+public class RemoteCacheRestore
+    implements ICacheRestore
+{
+    /** The logger */
+    private static final Log log = LogFactory.getLog( RemoteCacheRestore.class );
+
+    /** The manager */
+    private final RemoteCacheManager remoteCacheManager;
+
+    /** can it be restored */
+    private boolean canFix = true;
+
+    /** The remote handle */
+    private Object remoteObj;
+
+    /**
+     * Constructs with the given instance of RemoteCacheManager.
+     * <p>
+     * @param rcm
+     */
+    public RemoteCacheRestore( RemoteCacheManager rcm )
+    {
+        this.remoteCacheManager = rcm;
+    }
+
+    /**
+     * Returns true if the connection to the remote host for the corresponding cache manager can be
+     * successfully re-established.
+     * <p>
+     * @return true if we found a failover server
+     */
+    @Override
+    public boolean canFix()
+    {
+        if ( !canFix )
+        {
+            return canFix;
+        }
+        String registry = RemoteUtils.getNamingURL(remoteCacheManager.host, remoteCacheManager.port, remoteCacheManager.service);
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "looking up server [" + registry + "]" );
+        }
+        try
+        {
+            remoteObj = Naming.lookup( registry );
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "Found server " + remoteObj );
+            }
+        }
+        catch (IOException e)
+        {
+            log.error( "host=" + remoteCacheManager.host + "; port" + remoteCacheManager.port + "; service=" + remoteCacheManager.service );
+            canFix = false;
+        }
+        catch (NotBoundException e)
+        {
+            log.error( "host=" + remoteCacheManager.host + "; port" + remoteCacheManager.port + "; service=" + remoteCacheManager.service );
+            canFix = false;
+        }
+
+        return canFix;
+    }
+
+    /**
+     * Fixes up all the caches managed by the associated cache manager.
+     */
+    @Override
+    public void fix()
+    {
+        if ( !canFix )
+        {
+            return;
+        }
+        remoteCacheManager.fixCaches( (ICacheServiceNonLocal<?, ?>) remoteObj, (ICacheObserver) remoteObj );
+
+        if ( log.isInfoEnabled() )
+        {
+            String msg = "Remote connection to "
+                    + RemoteUtils.getNamingURL(remoteCacheManager.host, remoteCacheManager.port, remoteCacheManager.service)
+                    + " resumed.";
+            remoteCacheManager.logApplicationEvent( "RemoteCacheRestore", "fix", msg );
+            log.info( msg );
+        }
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/RemoteUtils.java b/src/org/apache/commons/jcs/auxiliary/remote/RemoteUtils.java
new file mode 100644
index 0000000..3bfedfe
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/RemoteUtils.java
@@ -0,0 +1,251 @@
+package org.apache.commons.jcs.auxiliary.remote;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.InetSocketAddress;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.rmi.RemoteException;
+import java.rmi.registry.LocateRegistry;
+import java.rmi.registry.Registry;
+import java.rmi.server.RMISocketFactory;
+import java.util.Enumeration;
+import java.util.Properties;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * This class provides some basic utilities for doing things such as starting the registry properly.
+ */
+public class RemoteUtils
+{
+    /** The logger. */
+    private static final Log log = LogFactory.getLog( RemoteUtils.class );
+
+    /** No instances please. */
+    private RemoteUtils()
+    {
+        super();
+    }
+
+    /**
+     * Creates and exports a registry on the specified port of the local host.
+     * <p>
+     * @param port
+     * @return the registry
+     */
+    public static Registry createRegistry( int port )
+    {
+    	Registry registry = null;
+
+//        if ( log.isInfoEnabled() )
+//        {
+//            log.info( "createRegistry> Setting security manager" );
+//        }
+//
+//        System.setSecurityManager( new RMISecurityManager() );
+
+        if ( port < 1024 )
+        {
+            if ( log.isWarnEnabled() )
+            {
+                log.warn( "createRegistry> Port chosen was less than 1024, will use default [" + Registry.REGISTRY_PORT + "] instead." );
+            }
+            port = Registry.REGISTRY_PORT;
+        }
+
+        try
+        {
+            registry = LocateRegistry.createRegistry( port );
+            log.info("createRegistry> Created the registry on port " + port);
+        }
+        catch ( RemoteException e )
+        {
+            log.warn( "createRegistry> Problem creating registry. It may already be started. " + e.getMessage() );
+        }
+        catch ( Throwable t )
+        {
+            log.error( "createRegistry> Problem creating registry.", t );
+        }
+
+        if (registry == null)
+        {
+        	try
+        	{
+            	registry = LocateRegistry.getRegistry( port );
+			}
+        	catch (RemoteException e)
+        	{
+                log.error( "createRegistry> Problem getting a registry reference.", e );
+			}
+        }
+
+        return registry;
+    }
+
+    /**
+     * Loads properties for the named props file.
+     * <p>
+     * @param propFile
+     * @return The properties object for the file
+     * @throws IOException
+     */
+    public static Properties loadProps( String propFile )
+        throws IOException
+    {
+        InputStream is = RemoteUtils.class.getResourceAsStream( propFile );
+        Properties props = new Properties();
+        try
+        {
+            props.load( is );
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "props.size=" + props.size() );
+            }
+
+            if ( log.isDebugEnabled() )
+            {
+                Enumeration<Object> en = props.keys();
+                StringBuilder buf = new StringBuilder();
+                while ( en.hasMoreElements() )
+                {
+                    String key = (String) en.nextElement();
+                    buf.append( "\n" + key + " = " + props.getProperty( key ) );
+                }
+                log.debug( buf.toString() );
+            }
+
+        }
+        catch ( Exception ex )
+        {
+            log.error( "Error loading remote properties, for file name [" + propFile + "]", ex );
+        }
+        finally
+        {
+            if ( is != null )
+            {
+                is.close();
+            }
+        }
+        return props;
+    }
+
+    /**
+     * Configure a custom socket factory to set the timeout value. This sets the global socket
+     * factory. It's used only if a custom factory is not configured for the specific object.
+     * <p>
+     * @param timeoutMillis
+     */
+    public static void configureGlobalCustomSocketFactory( final int timeoutMillis )
+    {
+        try
+        {
+            // Don't set a socket factory if the setting is -1
+            if ( timeoutMillis > 0 )
+            {
+                if ( log.isInfoEnabled() )
+                {
+                    log.info( "RmiSocketFactoryTimeoutMillis [" + timeoutMillis + "]. "
+                        + " Configuring a custom socket factory." );
+                }
+
+                // use this socket factory to add a timeout.
+                RMISocketFactory.setSocketFactory( new RMISocketFactory()
+                {
+                    @Override
+                    public Socket createSocket( String host, int port )
+                        throws IOException
+                    {
+                        Socket socket = new Socket();
+                        socket.setSoTimeout( timeoutMillis );
+                        socket.setSoLinger( false, 0 );
+                        socket.connect( new InetSocketAddress( host, port ), timeoutMillis );
+                        return socket;
+                    }
+
+                    @Override
+                    public ServerSocket createServerSocket( int port )
+                        throws IOException
+                    {
+                        return new ServerSocket( port );
+                    }
+                } );
+            }
+        }
+        catch ( Exception e )
+        {
+            // Only try to do it once. Otherwise we
+            // Generate errors for each region on construction.
+            RMISocketFactory factoryInUse = RMISocketFactory.getSocketFactory();
+            if ( factoryInUse != null && !factoryInUse.getClass().getName().startsWith( "org.apache.commons.jcs" ) )
+            {
+                log.info( "Could not create new custom socket factory. " + e.getMessage() + " Factory in use = "
+                    + RMISocketFactory.getSocketFactory() );
+            }
+        }
+    }
+
+    /**
+     * Get the naming url used for RMI registration
+     *
+     * @param registryHost
+     * @param registryPort
+     * @param serviceName
+     * @return
+     */
+    public static String getNamingURL(final String registryHost, final int registryPort, final String serviceName)
+    {
+        if (registryHost.contains(":")) { // TODO improve this check? See also JCS-133
+            return "//[" + registryHost.replaceFirst("%", "%25") + "]:" + registryPort + "/" + serviceName;
+        }
+        final String registryURL = "//" + registryHost + ":" + registryPort + "/" + serviceName;
+        return registryURL;
+    }
+
+    /** Pattern for parsing server:port */
+    private static final Pattern SERVER_COLON_PORT = Pattern.compile("(\\S+)\\s*:\\s*(\\d+)");
+
+    /**
+     * Parse remote server and port from the string representation server:port and store them in
+     * the RemoteCacheAttributes
+     *
+     * @param server the input string
+     * @param rca the target attribute object
+     */
+    public static void parseServerAndPort(final String server, final RemoteCacheAttributes rca)
+    {
+        Matcher match = SERVER_COLON_PORT.matcher(server);
+
+        if (match.find() && match.groupCount() == 2)
+        {
+            rca.setRemoteHost( match.group(1) );
+            rca.setRemotePort( Integer.parseInt( match.group(2) ) );
+        }
+        else
+        {
+            log.error("Invalid server descriptor: " + server);
+        }
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/behavior/ICommonRemoteCacheAttributes.java b/src/org/apache/commons/jcs/auxiliary/remote/behavior/ICommonRemoteCacheAttributes.java
new file mode 100644
index 0000000..61e8bb8
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/behavior/ICommonRemoteCacheAttributes.java
@@ -0,0 +1,177 @@
+package org.apache.commons.jcs.auxiliary.remote.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.AuxiliaryCacheAttributes;
+import org.apache.commons.jcs.auxiliary.remote.server.behavior.RemoteType;
+
+/**
+ * This specifies what a remote cache configuration object should look like.
+ */
+public interface ICommonRemoteCacheAttributes
+    extends AuxiliaryCacheAttributes
+{
+    /** The default timeout for the custom RMI socket factory */
+    int DEFAULT_RMI_SOCKET_FACTORY_TIMEOUT_MILLIS = 10000;
+
+    /**
+     * Gets the remoteTypeName attribute of the IRemoteCacheAttributes object
+     * <p>
+     * @return The remoteTypeName value
+     */
+    String getRemoteTypeName();
+
+    /**
+     * Sets the remoteTypeName attribute of the IRemoteCacheAttributes object
+     * <p>
+     * @param s The new remoteTypeName value
+     */
+    void setRemoteTypeName( String s );
+
+    /**
+     * Gets the remoteType attribute of the IRemoteCacheAttributes object
+     * <p>
+     * @return The remoteType value
+     */
+    RemoteType getRemoteType();
+
+    /**
+     * Sets the remoteType attribute of the IRemoteCacheAttributes object
+     * <p>
+     * @param p The new remoteType value
+     */
+    void setRemoteType( RemoteType p );
+
+    /**
+     * Gets the remoteServiceName attribute of the IRemoteCacheAttributes object
+     * <p>
+     * @return The remoteServiceName value
+     */
+    String getRemoteServiceName();
+
+    /**
+     * Sets the remoteServiceName attribute of the IRemoteCacheAttributes object
+     * <p>
+     * @param s The new remoteServiceName value
+     */
+    void setRemoteServiceName( String s );
+
+    /**
+     * Gets the remoteHost attribute of the IRemoteCacheAttributes object
+     * <p>
+     * @return The remoteHost value
+     */
+    String getRemoteHost();
+
+    /**
+     * Sets the remoteHost attribute of the IRemoteCacheAttributes object
+     * <p>
+     * @param s The new remoteHost value
+     */
+    void setRemoteHost( String s );
+
+    /**
+     * Gets the remotePort attribute of the IRemoteCacheAttributes object
+     * <p>
+     * @return The remotePort value
+     */
+    int getRemotePort();
+
+    /**
+     * Sets the remotePort attribute of the IRemoteCacheAttributes object
+     * <p>
+     * @param p The new remotePort value
+     */
+    void setRemotePort( int p );
+
+    /**
+     * Gets the clusterServers attribute of the IRemoteCacheAttributes object
+     * <p>
+     * @return The clusterServers value
+     */
+    String getClusterServers();
+
+    /**
+     * Sets the clusterServers attribute of the IRemoteCacheAttributes object
+     * <p>
+     * @param s The new clusterServers value
+     */
+    void setClusterServers( String s );
+
+    /**
+     * Gets the removeUponRemotePut attribute of the IRemoteCacheAttributes object
+     * <p>
+     * @return The removeUponRemotePut value
+     */
+    boolean getRemoveUponRemotePut();
+
+    /**
+     * Sets the removeUponRemotePut attribute of the IRemoteCacheAttributes object
+     * <p>
+     * @param r The new removeUponRemotePut value
+     */
+    void setRemoveUponRemotePut( boolean r );
+
+    /**
+     * Gets the getOnly attribute of the IRemoteCacheAttributes object
+     * <p>
+     * @return The getOnly value
+     */
+    boolean getGetOnly();
+
+    /**
+     * Sets the getOnly attribute of the IRemoteCacheAttributes object
+     * <p>
+     * @param r The new getOnly value
+     */
+    void setGetOnly( boolean r );
+
+    /**
+     * Should cluster updates be propagated to the locals
+     * <p>
+     * @return The localClusterConsistency value
+     */
+    boolean isLocalClusterConsistency();
+
+    /**
+     * Should cluster updates be propagated to the locals
+     * <p>
+     * @param r The new localClusterConsistency value
+     */
+    void setLocalClusterConsistency( boolean r );
+
+    /**
+     * This sets a general timeout on the rmi socket factory. By default the socket factory will
+     * block forever.
+     * <p>
+     * We have a default setting. The default rmi behavior should never be used.
+     * <p>
+     * @return int milliseconds
+     */
+    int getRmiSocketFactoryTimeoutMillis();
+
+    /**
+     * This sets a general timeout on the RMI socket factory. By default the socket factory will
+     * block forever.
+     * <p>
+     * @param rmiSocketFactoryTimeoutMillis
+     */
+    void setRmiSocketFactoryTimeoutMillis( int rmiSocketFactoryTimeoutMillis );
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/behavior/IRemoteCacheAttributes.java b/src/org/apache/commons/jcs/auxiliary/remote/behavior/IRemoteCacheAttributes.java
new file mode 100644
index 0000000..e9c2c4b
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/behavior/IRemoteCacheAttributes.java
@@ -0,0 +1,178 @@
+package org.apache.commons.jcs.auxiliary.remote.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * This specifies what a remote cache configuration object should look like.
+ */
+public interface IRemoteCacheAttributes
+    extends ICommonRemoteCacheAttributes
+{
+    /**
+     * If RECEIVE is false then the remote cache will not register a listener with the remote
+     * server. This allows you to configure a remote server as a repository from which you can get
+     * and to which you put, but from which you do not receive any notifications. That is, you will
+     * not receive updates or removes.
+     * <p>
+     * If you set this option to false, you should set your local memory size to 0.
+     */
+    boolean DEFAULT_RECEIVE = true;
+
+    /**
+     * The number of elements the zombie queue will hold. This queue is used to store events if we
+     * loose our connection with the server.
+     */
+    int DEFAULT_ZOMBIE_QUEUE_MAX_SIZE = 1000;
+
+    /**
+     * Gets the failoverIndex attribute of the IRemoteCacheAttributes object.
+     * <p>
+     * This specifies which server in the list we are listening to if the number is greater than 0
+     * we will try to move to 0 position the primary is added as position 1 if it is present
+     * <p>
+     * @return The failoverIndex value
+     */
+    int getFailoverIndex();
+
+    /**
+     * Sets the failoverIndex attribute of the IRemoteCacheAttributes object
+     * <p>
+     * @param p The new failoverIndex value
+     */
+    void setFailoverIndex( int p );
+
+    /**
+     * Gets the failovers attribute of the IRemoteCacheAttributes object
+     * <p>
+     * @return The failovers value
+     */
+    String[] getFailovers();
+
+    /**
+     * Sets the failovers attribute of the IRemoteCacheAttributes object
+     * <p>
+     * @param f The new failovers value
+     */
+    void setFailovers( String[] f );
+
+    /**
+     * Gets the localPort attribute of the IRemoteCacheAttributes object
+     * <p>
+     * @return The localPort value
+     */
+    int getLocalPort();
+
+    /**
+     * Sets the localPort attribute of the IRemoteCacheAttributes object
+     * <p>
+     * @param p The new localPort value
+     */
+    void setLocalPort( int p );
+
+    /**
+     * Gets the failoverServers attribute of the IRemoteCacheAttributes object
+     * <p>
+     * @return The failoverServers value
+     */
+    String getFailoverServers();
+
+    /**
+     * Sets the failoverServers attribute of the IRemoteCacheAttributes object
+     * <p>
+     * @param s The new failoverServers value
+     */
+    void setFailoverServers( String s );
+
+    /**
+     * The thread pool the remote cache should use. At first this will only be for gets.
+     * <p>
+     * The default name is "remote_cache_client"
+     * <p>
+     * @return the name of the pool
+     */
+    String getThreadPoolName();
+
+    /**
+     * Set the name of the pool to use. Pools should be defined in the cache.ccf.
+     * <p>
+     * @param name
+     */
+    void setThreadPoolName( String name );
+
+    /**
+     * -1 and 0 mean no timeout, this is the default if the timeout is -1 or 0, no threadpool will
+     * be used.
+     * <p>
+     * @return the time in millis
+     */
+    int getGetTimeoutMillis();
+
+    /**
+     * -1 means no timeout, this is the default if the timeout is -1 or 0, no threadpool will be
+     * used. If the timeout is greater than 0 a threadpool will be used for get requests.
+     * <p>
+     * @param millis
+     */
+    void setGetTimeoutMillis( int millis );
+
+    /**
+     * By default this option is true. If you set it to false, you will not receive updates or
+     * removes from the remote server.
+     * <p>
+     * @param receive
+     */
+    void setReceive( boolean receive );
+
+    /**
+     * If RECEIVE is false then the remote cache will not register a listener with the remote
+     * server. This allows you to configure a remote server as a repository from which you can get
+     * and to which you put, but from which you do not receive any notifications. That is, you will
+     * not receive updates or removes.
+     * <p>
+     * If you set this option to false, you should set your local memory size to 0.
+     * <p>
+     * The remote cache manager uses this value to decide whether or not to register a listener.
+     * <p>
+     * It makes no sense to configure a cluster remote cache to no receive.
+     * <p>
+     * Since a non-receiving remote cache client will not register a listener, it will not have a
+     * listener id assigned from the server. As such the remote server cannot determine if it is a
+     * cluster or a normal client. It will assume that it is a normal client.
+     * <p>
+     * @return the receive value.
+     */
+    boolean isReceive();
+
+    /**
+     * The number of elements the zombie queue will hold. This queue is used to store events if we
+     * loose our connection with the server.
+     * <p>
+     * @param zombieQueueMaxSize The zombieQueueMaxSize to set.
+     */
+    void setZombieQueueMaxSize( int zombieQueueMaxSize );
+
+    /**
+     * The number of elements the zombie queue will hold. This queue is used to store events if we
+     * loose our connection with the server.
+     * <p>
+     * @return Returns the zombieQueueMaxSize.
+     */
+    int getZombieQueueMaxSize();
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/behavior/IRemoteCacheClient.java b/src/org/apache/commons/jcs/auxiliary/remote/behavior/IRemoteCacheClient.java
new file mode 100644
index 0000000..acb68f6
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/behavior/IRemoteCacheClient.java
@@ -0,0 +1,61 @@
+package org.apache.commons.jcs.auxiliary.remote.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.AuxiliaryCache;
+import org.apache.commons.jcs.engine.behavior.ICacheServiceNonLocal;
+
+/**
+ * This defines the behavior expected of a remote cache client. This extends Auxiliary cache which
+ * in turn extends ICache.
+ * <p>
+ * I'd like generalize this a bit.
+ * <p>
+ * @author Aaron Smuts
+ */
+public interface IRemoteCacheClient<K, V>
+    extends AuxiliaryCache<K, V>
+{
+    /**
+     * Replaces the current remote cache service handle with the given handle. If the current remote
+     * is a Zombie, the propagate the events that may be queued to the restored service.
+     * <p>
+     * @param remote ICacheServiceNonLocal -- the remote server or proxy to the remote server
+     */
+    void fixCache( ICacheServiceNonLocal<?, ?> remote );
+
+    /**
+     * Gets the listenerId attribute of the RemoteCacheListener object.
+     * <p>
+     * All requests to the remote cache must include a listener id. This allows the server to avoid
+     * sending updates the the listener associated with this client.
+     * <p>
+     * @return The listenerId value
+     */
+    long getListenerId();
+
+    /**
+     * This returns the listener associated with this remote cache. TODO we should try to get this
+     * out of the interface.
+     * <p>
+     * @return IRemoteCacheListener
+     */
+    IRemoteCacheListener<K, V> getListener();
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/behavior/IRemoteCacheConstants.java b/src/org/apache/commons/jcs/auxiliary/remote/behavior/IRemoteCacheConstants.java
new file mode 100644
index 0000000..0dd06a9
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/behavior/IRemoteCacheConstants.java
@@ -0,0 +1,70 @@
+package org.apache.commons.jcs.auxiliary.remote.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.behavior.ICacheServiceNonLocal;
+
+
+/**
+ * This holds constants that are used by the remote cache.
+ */
+public interface IRemoteCacheConstants
+{
+    /** Mapping to props file value */
+    String REMOTE_CACHE_SERVICE_VAL = ICacheServiceNonLocal.class.getName();
+
+    /** The prefix for cache server config. */
+    String CACHE_SERVER_PREFIX = "jcs.remotecache";
+
+    /**
+     * I'm trying to migrate everything to use this prefix. All those below will be replaced. Any of
+     * the RemoteCacheServerAttributes can be configured this way.
+     */
+    String CACHE_SERVER_ATTRIBUTES_PROPERTY_PREFIX = CACHE_SERVER_PREFIX + ".serverattributes";
+
+    /**
+     * This is the name of the class that will be used for an object specific socket factory.
+     */
+    String CUSTOM_RMI_SOCKET_FACTORY_PROPERTY_PREFIX = CACHE_SERVER_PREFIX + ".customrmisocketfactory";
+
+    /** Property prefix, should be jcs.remote but this would break existing config. */
+    String PROPERTY_PREFIX = "remote";
+
+    /** Mapping to props file value */
+    String SOCKET_TIMEOUT_MILLIS = PROPERTY_PREFIX + ".cache.rmiSocketFactoryTimeoutMillis";
+
+    /** Mapping to props file value */
+    String REMOTE_CACHE_SERVICE_NAME = PROPERTY_PREFIX + ".cache.service.name";
+
+    /** Mapping to props file value */
+    String TOMCAT_XML = PROPERTY_PREFIX + ".tomcat.xml";
+
+    /** Mapping to props file value */
+    String TOMCAT_ON = PROPERTY_PREFIX + ".tomcat.on";
+
+    /** Mapping to props file value */
+    String REMOTE_CACHE_SERVICE_PORT = PROPERTY_PREFIX + ".cache.service.port";
+
+    /** Mapping to props file value */
+    String REMOTE_LOCAL_CLUSTER_CONSISTENCY = PROPERTY_PREFIX + ".cluster.LocalClusterConsistency";
+
+    /** Mapping to props file value */
+    String REMOTE_ALLOW_CLUSTER_GET = PROPERTY_PREFIX + ".cluster.AllowClusterGet";
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/behavior/IRemoteCacheDispatcher.java b/src/org/apache/commons/jcs/auxiliary/remote/behavior/IRemoteCacheDispatcher.java
new file mode 100644
index 0000000..c5d0b0d
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/behavior/IRemoteCacheDispatcher.java
@@ -0,0 +1,46 @@
+package org.apache.commons.jcs.auxiliary.remote.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.remote.value.RemoteCacheRequest;
+import org.apache.commons.jcs.auxiliary.remote.value.RemoteCacheResponse;
+
+import java.io.IOException;
+
+/**
+ * In the future, this can be used as a generic dispatcher abstraction.
+ * <p>
+ * At the time of creation, only the http remote cache uses it. The RMI remote could be converted to
+ * use it as well.
+ */
+public interface IRemoteCacheDispatcher
+{
+    /**
+     * All requests will go through this method. The dispatcher implementation will send the request
+     * remotely.
+     * <p>
+     * @param remoteCacheRequest
+     * @return RemoteCacheResponse
+     * @throws IOException
+     */
+    <K, V, T>
+        RemoteCacheResponse<T> dispatchRequest( RemoteCacheRequest<K, V> remoteCacheRequest )
+            throws IOException;
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/behavior/IRemoteCacheListener.java b/src/org/apache/commons/jcs/auxiliary/remote/behavior/IRemoteCacheListener.java
new file mode 100644
index 0000000..b673383
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/behavior/IRemoteCacheListener.java
@@ -0,0 +1,81 @@
+package org.apache.commons.jcs.auxiliary.remote.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.remote.server.behavior.RemoteType;
+import org.apache.commons.jcs.engine.behavior.ICacheListener;
+
+import java.io.IOException;
+import java.rmi.Remote;
+
+/**
+ * Listens for remote cache event notification ( rmi callback ).
+ */
+public interface IRemoteCacheListener<K, V>
+    extends ICacheListener<K, V>, Remote
+{
+    /**
+     * Get the id to be used by this manager.
+     * <p>
+     * @return long
+     * @throws IOException
+     */
+    @Override
+    long getListenerId()
+        throws IOException;
+
+    /**
+     * Set the id to be used by this manager. The remote cache server identifies clients by this id.
+     * The value will be set by the server through the remote cache listener.
+     * <p>
+     * @param id
+     * @throws IOException
+     */
+    @Override
+    void setListenerId( long id )
+        throws IOException;
+
+    /**
+     * Gets the remoteType attribute of the IRemoteCacheListener object
+     * <p>
+     * @return The remoteType value
+     * @throws IOException
+     */
+    RemoteType getRemoteType()
+        throws IOException;
+
+    /**
+     * This is for debugging. It allows the remote cache server to log the address of any listeners
+     * that register.
+     * <p>
+     * @return the local host address.
+     * @throws IOException
+     */
+    String getLocalHostAddress()
+        throws IOException;
+
+    /**
+     * Deregisters itself.
+     * <p>
+     * @throws IOException
+     */
+    void dispose()
+        throws IOException;
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/http/behavior/IRemoteHttpCacheConstants.java b/src/org/apache/commons/jcs/auxiliary/remote/http/behavior/IRemoteHttpCacheConstants.java
new file mode 100644
index 0000000..49515f3
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/http/behavior/IRemoteHttpCacheConstants.java
@@ -0,0 +1,31 @@
+package org.apache.commons.jcs.auxiliary.remote.http.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/** Constants used throughout the HTTP remote cache. */
+public interface IRemoteHttpCacheConstants
+{
+    /** The prefix for cache server config. */
+    String HTTP_CACHE_SERVER_PREFIX = "jcs.remotehttpcache";
+
+    /** All of the RemoteHttpCacheServiceAttributes can be configured this way. */
+    String HTTP_CACHE_SERVER_ATTRIBUTES_PROPERTY_PREFIX = HTTP_CACHE_SERVER_PREFIX
+        + ".serverattributes";
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/http/client/AbstractHttpClient.java b/src/org/apache/commons/jcs/auxiliary/remote/http/client/AbstractHttpClient.java
new file mode 100644
index 0000000..a68f31a
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/http/client/AbstractHttpClient.java
@@ -0,0 +1,193 @@
+package org.apache.commons.jcs.auxiliary.remote.http.client;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.HttpMethod;
+import org.apache.commons.httpclient.HttpState;
+import org.apache.commons.httpclient.HttpVersion;
+import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
+import org.apache.commons.httpclient.cookie.CookiePolicy;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.IOException;
+
+/**
+ * This class simply configures the http multithreaded connection manager.
+ * <p>
+ * This is abstract because it can't do anything. Child classes can overwrite whatever they want.
+ */
+public abstract class AbstractHttpClient
+{
+    /** The connection manager. */
+    private MultiThreadedHttpConnectionManager connectionManager;
+
+    /** The client */
+    private HttpClient httpClient;
+
+    /** Configuration settings. */
+    private RemoteHttpCacheAttributes remoteHttpCacheAttributes;
+
+    /** The Logger. */
+    private static final Log log = LogFactory.getLog( AbstractHttpClient.class );
+
+    /**
+     * Sets the default Properties File and Heading, and creates the HttpClient and connection
+     * manager.
+     * <p>
+     * @param remoteHttpCacheAttributes
+     */
+    public AbstractHttpClient( RemoteHttpCacheAttributes remoteHttpCacheAttributes )
+    {
+        setRemoteHttpCacheAttributes( remoteHttpCacheAttributes );
+        setConnectionManager( new MultiThreadedHttpConnectionManager() );
+
+        // THIS IS NOT THREAD SAFE:
+        // setHttpClient( new HttpClient() );
+        // THIS IS:
+        setHttpClient( new HttpClient( getConnectionManager() ) );
+
+        configureClient();
+    }
+
+    /**
+     * Configures the http client.
+     */
+    public void configureClient()
+    {
+        if ( getRemoteHttpCacheAttributes().getMaxConnectionsPerHost() > 0 )
+        {
+            getConnectionManager().getParams().setMaxTotalConnections(
+                                                                       getRemoteHttpCacheAttributes()
+                                                                           .getMaxConnectionsPerHost() );
+        }
+
+        getConnectionManager().getParams().setSoTimeout( getRemoteHttpCacheAttributes().getSocketTimeoutMillis() );
+
+        String httpVersion = getRemoteHttpCacheAttributes().getHttpVersion();
+        if ( httpVersion != null )
+        {
+            if ( "1.1".equals( httpVersion ) )
+            {
+                getHttpClient().getParams().setParameter( "http.protocol.version", HttpVersion.HTTP_1_1 );
+            }
+            else if ( "1.0".equals( httpVersion ) )
+            {
+                getHttpClient().getParams().setParameter( "http.protocol.version", HttpVersion.HTTP_1_0 );
+            }
+            else
+            {
+                log.warn( "Unrecognized value for 'httpVersion': [" + httpVersion + "]" );
+            }
+        }
+
+        getConnectionManager().getParams().setConnectionTimeout(
+                                                                 getRemoteHttpCacheAttributes()
+                                                                     .getConnectionTimeoutMillis() );
+
+        // By default we instruct HttpClient to ignore cookies.
+        String cookiePolicy = CookiePolicy.IGNORE_COOKIES;
+        getHttpClient().getParams().setCookiePolicy( cookiePolicy );
+    }
+
+    /**
+     * Extracted method that can be overwritten to do additional things to the post before the call
+     * is made.
+     * <p>
+     * @param post the post that is about to get executed.
+     * @throws IOException on i/o error
+     */
+    protected final void doWebserviceCall( HttpMethod post )
+        throws IOException
+    {
+        HttpState httpState = preProcessWebserviceCall( post );
+        getHttpClient().executeMethod( null, post, httpState );
+        postProcessWebserviceCall( post, httpState );
+    }
+
+    /**
+     * Called before the executeMethod on the client.
+     * <p>
+     * @param post http method
+     * @return HttpState
+     * @throws IOException
+     */
+    public abstract HttpState preProcessWebserviceCall( HttpMethod post )
+        throws IOException;
+
+    /**
+     * Called after the executeMethod on the client.
+     * <p>
+     * @param post http method
+     * @param httpState state
+     * @throws IOException
+     */
+    public abstract void postProcessWebserviceCall( HttpMethod post, HttpState httpState )
+        throws IOException;
+
+    /**
+     * @return Returns the httpClient.
+     */
+    private HttpClient getHttpClient()
+    {
+        return httpClient;
+    }
+
+    /**
+     * @param httpClient The httpClient to set.
+     */
+    private void setHttpClient( HttpClient httpClient )
+    {
+        this.httpClient = httpClient;
+    }
+
+    /**
+     * @return Returns the connectionManager.
+     */
+    public MultiThreadedHttpConnectionManager getConnectionManager()
+    {
+        return connectionManager;
+    }
+
+    /**
+     * @param connectionManager The connectionManager to set.
+     */
+    public void setConnectionManager( MultiThreadedHttpConnectionManager connectionManager )
+    {
+        this.connectionManager = connectionManager;
+    }
+
+    /**
+     * @param remoteHttpCacheAttributes the remoteHttpCacheAttributes to set
+     */
+    public void setRemoteHttpCacheAttributes( RemoteHttpCacheAttributes remoteHttpCacheAttributes )
+    {
+        this.remoteHttpCacheAttributes = remoteHttpCacheAttributes;
+    }
+
+    /**
+     * @return the remoteHttpCacheAttributes
+     */
+    public RemoteHttpCacheAttributes getRemoteHttpCacheAttributes()
+    {
+        return remoteHttpCacheAttributes;
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/http/client/RemoteHttpCache.java b/src/org/apache/commons/jcs/auxiliary/remote/http/client/RemoteHttpCache.java
new file mode 100644
index 0000000..f156fab
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/http/client/RemoteHttpCache.java
@@ -0,0 +1,116 @@
+package org.apache.commons.jcs.auxiliary.remote.http.client;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.remote.AbstractRemoteAuxiliaryCache;
+import org.apache.commons.jcs.auxiliary.remote.behavior.IRemoteCacheListener;
+import org.apache.commons.jcs.engine.ZombieCacheServiceNonLocal;
+import org.apache.commons.jcs.engine.behavior.ICacheServiceNonLocal;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.IOException;
+
+/**
+ * This uses an http client as the service.
+ */
+public class RemoteHttpCache<K, V>
+    extends AbstractRemoteAuxiliaryCache<K, V>
+{
+    /** The logger. */
+    private static final Log log = LogFactory.getLog( RemoteHttpCache.class );
+
+    /** Keep the child copy here for the restore process. */
+    private RemoteHttpCacheAttributes remoteHttpCacheAttributes;
+
+    /**
+     * Constructor for the RemoteCache object. This object communicates with a remote cache server.
+     * One of these exists for each region. This also holds a reference to a listener. The same
+     * listener is used for all regions for one remote server. Holding a reference to the listener
+     * allows this object to know the listener id assigned by the remote cache.
+     * <p>
+     * @param remoteHttpCacheAttributes
+     * @param remote
+     * @param listener
+     */
+    public RemoteHttpCache( RemoteHttpCacheAttributes remoteHttpCacheAttributes, ICacheServiceNonLocal<K, V> remote,
+                            IRemoteCacheListener<K, V> listener )
+    {
+        super( remoteHttpCacheAttributes, remote, listener );
+
+        setRemoteHttpCacheAttributes( remoteHttpCacheAttributes );
+    }
+
+    /**
+     * Nothing right now. This should setup a zombie and initiate recovery.
+     * <p>
+     * @param ex
+     * @param msg
+     * @param eventName
+     * @throws IOException
+     */
+    @Override
+    protected void handleException( Exception ex, String msg, String eventName )
+        throws IOException
+    {
+        // we should not switch if the existing is a zombie.
+        if ( !( getRemoteCacheService() instanceof ZombieCacheServiceNonLocal ) )
+        {
+            String message = "Disabling remote cache due to error: " + msg;
+            logError( cacheName, "", message );
+            log.error( message, ex );
+
+            setRemoteCacheService( new ZombieCacheServiceNonLocal<K, V>( getRemoteCacheAttributes().getZombieQueueMaxSize() ) );
+
+            RemoteHttpCacheMonitor.getInstance().notifyError( this );
+        }
+
+        if ( ex instanceof IOException )
+        {
+            throw (IOException) ex;
+        }
+        throw new IOException( ex.getMessage() );
+    }
+
+    /**
+     * @return url of service
+     */
+    @Override
+    public String getEventLoggingExtraInfo()
+    {
+        return null;
+    }
+
+    /**
+     * @param remoteHttpCacheAttributes the remoteHttpCacheAttributes to set
+     */
+    public void setRemoteHttpCacheAttributes( RemoteHttpCacheAttributes remoteHttpCacheAttributes )
+    {
+        this.remoteHttpCacheAttributes = remoteHttpCacheAttributes;
+    }
+
+    /**
+     * @return the remoteHttpCacheAttributes
+     */
+    public RemoteHttpCacheAttributes getRemoteHttpCacheAttributes()
+    {
+        return remoteHttpCacheAttributes;
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/http/client/RemoteHttpCacheAttributes.java b/src/org/apache/commons/jcs/auxiliary/remote/http/client/RemoteHttpCacheAttributes.java
new file mode 100644
index 0000000..c68670d
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/http/client/RemoteHttpCacheAttributes.java
@@ -0,0 +1,228 @@
+package org.apache.commons.jcs.auxiliary.remote.http.client;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.remote.RemoteCacheAttributes;
+
+/** Http client specific settings. */
+public class RemoteHttpCacheAttributes
+    extends RemoteCacheAttributes
+{
+    /** Don't change. */
+    private static final long serialVersionUID = -5944327125140505212L;
+
+    /** http verison to use. */
+    private static final String DEFAULT_HTTP_VERSION = "1.1";
+
+    /** The max connections allowed per host */
+    private int maxConnectionsPerHost = 100;
+
+    /** The socket timeout. */
+    private int socketTimeoutMillis = 3000;
+
+    /** The socket connections timeout */
+    private int connectionTimeoutMillis = 5000;
+
+    /** http verison to use. */
+    private String httpVersion = DEFAULT_HTTP_VERSION;
+
+    /** The cache name will be included on the parameters */
+    private boolean includeCacheNameAsParameter = true;
+
+    /** keys and patterns will be included in the parameters */
+    private boolean includeKeysAndPatternsAsParameter = true;
+
+    /** keys and patterns will be included in the parameters */
+    private boolean includeRequestTypeasAsParameter = true;
+
+    /** The complete URL to the service. */
+    private String url;
+
+    /** The default classname for the client.  */
+    public static final String DEFAULT_REMOTE_HTTP_CLIENT_CLASS_NAME = RemoteHttpCacheClient.class.getName();
+
+    /** This allows users to inject their own client implementation. */
+    private String remoteHttpClientClassName = DEFAULT_REMOTE_HTTP_CLIENT_CLASS_NAME;
+
+    /**
+     * @param maxConnectionsPerHost the maxConnectionsPerHost to set
+     */
+    public void setMaxConnectionsPerHost( int maxConnectionsPerHost )
+    {
+        this.maxConnectionsPerHost = maxConnectionsPerHost;
+    }
+
+    /**
+     * @return the maxConnectionsPerHost
+     */
+    public int getMaxConnectionsPerHost()
+    {
+        return maxConnectionsPerHost;
+    }
+
+    /**
+     * @param socketTimeoutMillis the socketTimeoutMillis to set
+     */
+    public void setSocketTimeoutMillis( int socketTimeoutMillis )
+    {
+        this.socketTimeoutMillis = socketTimeoutMillis;
+    }
+
+    /**
+     * @return the socketTimeoutMillis
+     */
+    public int getSocketTimeoutMillis()
+    {
+        return socketTimeoutMillis;
+    }
+
+    /**
+     * @param httpVersion the httpVersion to set
+     */
+    public void setHttpVersion( String httpVersion )
+    {
+        this.httpVersion = httpVersion;
+    }
+
+    /**
+     * @return the httpVersion
+     */
+    public String getHttpVersion()
+    {
+        return httpVersion;
+    }
+
+    /**
+     * @param connectionTimeoutMillis the connectionTimeoutMillis to set
+     */
+    public void setConnectionTimeoutMillis( int connectionTimeoutMillis )
+    {
+        this.connectionTimeoutMillis = connectionTimeoutMillis;
+    }
+
+    /**
+     * @return the connectionTimeoutMillis
+     */
+    public int getConnectionTimeoutMillis()
+    {
+        return connectionTimeoutMillis;
+    }
+
+    /**
+     * @param includeCacheNameInURL the includeCacheNameInURL to set
+     */
+    public void setIncludeCacheNameAsParameter( boolean includeCacheNameInURL )
+    {
+        this.includeCacheNameAsParameter = includeCacheNameInURL;
+    }
+
+    /**
+     * @return the includeCacheNameInURL
+     */
+    public boolean isIncludeCacheNameAsParameter()
+    {
+        return includeCacheNameAsParameter;
+    }
+
+    /**
+     * @param includeKeysAndPatternsInURL the includeKeysAndPatternsInURL to set
+     */
+    public void setIncludeKeysAndPatternsAsParameter( boolean includeKeysAndPatternsInURL )
+    {
+        this.includeKeysAndPatternsAsParameter = includeKeysAndPatternsInURL;
+    }
+
+    /**
+     * @return the includeKeysAndPatternsInURL
+     */
+    public boolean isIncludeKeysAndPatternsAsParameter()
+    {
+        return includeKeysAndPatternsAsParameter;
+    }
+
+    /**
+     * @param includeRequestTypeasAsParameter the includeRequestTypeasAsParameter to set
+     */
+    public void setIncludeRequestTypeasAsParameter( boolean includeRequestTypeasAsParameter )
+    {
+        this.includeRequestTypeasAsParameter = includeRequestTypeasAsParameter;
+    }
+
+    /**
+     * @return the includeRequestTypeasAsParameter
+     */
+    public boolean isIncludeRequestTypeasAsParameter()
+    {
+        return includeRequestTypeasAsParameter;
+    }
+
+    /**
+     * @param url the url to set
+     */
+    public void setUrl( String url )
+    {
+        this.url = url;
+    }
+
+    /**
+     * @return the url
+     */
+    public String getUrl()
+    {
+        return url;
+    }
+
+    /**
+     * @param remoteHttpClientClassName the remoteHttpClientClassName to set
+     */
+    public void setRemoteHttpClientClassName( String remoteHttpClientClassName )
+    {
+        this.remoteHttpClientClassName = remoteHttpClientClassName;
+    }
+
+    /**
+     * @return the remoteHttpClientClassName
+     */
+    public String getRemoteHttpClientClassName()
+    {
+        return remoteHttpClientClassName;
+    }
+
+    /**
+     * @return String details
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder buf = new StringBuilder();
+        buf.append( "\n RemoteHttpCacheAttributes" );
+        buf.append( "\n maxConnectionsPerHost = [" + getMaxConnectionsPerHost() + "]" );
+        buf.append( "\n socketTimeoutMillis = [" + getSocketTimeoutMillis() + "]" );
+        buf.append( "\n httpVersion = [" + getHttpVersion() + "]" );
+        buf.append( "\n connectionTimeoutMillis = [" + getConnectionTimeoutMillis() + "]" );
+        buf.append( "\n includeCacheNameAsParameter = [" + isIncludeCacheNameAsParameter() + "]" );
+        buf.append( "\n includeKeysAndPatternsAsParameter = [" + isIncludeKeysAndPatternsAsParameter() + "]" );
+        buf.append( "\n includeRequestTypeasAsParameter = [" + isIncludeRequestTypeasAsParameter() + "]" );
+        buf.append( "\n url = [" + getUrl() + "]" );
+        buf.append( "\n remoteHttpClientClassName = [" + getRemoteHttpClientClassName() + "]" );
+        buf.append( super.toString() );
+        return buf.toString();
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/http/client/RemoteHttpCacheClient.java b/src/org/apache/commons/jcs/auxiliary/remote/http/client/RemoteHttpCacheClient.java
new file mode 100644
index 0000000..ba84d5d
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/http/client/RemoteHttpCacheClient.java
@@ -0,0 +1,496 @@
+package org.apache.commons.jcs.auxiliary.remote.http.client;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.remote.behavior.IRemoteCacheDispatcher;
+import org.apache.commons.jcs.auxiliary.remote.http.client.behavior.IRemoteHttpCacheClient;
+import org.apache.commons.jcs.auxiliary.remote.util.RemoteCacheRequestFactory;
+import org.apache.commons.jcs.auxiliary.remote.value.RemoteCacheRequest;
+import org.apache.commons.jcs.auxiliary.remote.value.RemoteCacheResponse;
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+
+/** This is the service used by the remote http auxiliary cache. */
+public class RemoteHttpCacheClient<K, V>
+    implements IRemoteHttpCacheClient<K, V>
+{
+    /** The Logger. */
+    private static final Log log = LogFactory.getLog( RemoteHttpCacheClient.class );
+
+    /** The internal client. */
+    private IRemoteCacheDispatcher remoteDispatcher;
+
+    /** The remote attributes */
+    private RemoteHttpCacheAttributes remoteHttpCacheAttributes;
+
+    /** Set to true when initialize is called */
+    private boolean initialized = false;
+
+    /** For factory construction. */
+    public RemoteHttpCacheClient()
+    {
+        // does nothing
+    }
+
+    /**
+     * Constructs a client.
+     * <p>
+     * @param attributes
+     */
+    public RemoteHttpCacheClient( RemoteHttpCacheAttributes attributes )
+    {
+        setRemoteHttpCacheAttributes( attributes );
+        initialize( attributes );
+    }
+
+    /**
+     * The provides an extension point. If you want to extend this and use a special dispatcher,
+     * here is the place to do it.
+     * <p>
+     * @param attributes
+     */
+    @Override
+    public void initialize( RemoteHttpCacheAttributes attributes )
+    {
+        setRemoteDispatcher( new RemoteHttpCacheDispatcher( attributes ) );
+
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "Created remote Dispatcher." + getRemoteDispatcher() );
+        }
+        setInitialized( true );
+    }
+
+    /**
+     * Create a request, process, extract the payload.
+     * <p>
+     * @param cacheName
+     * @param key
+     * @return ICacheElement
+     * @throws IOException
+     */
+    @Override
+    public ICacheElement<K, V> get( String cacheName, K key )
+        throws IOException
+    {
+        return get( cacheName, key, 0 );
+    }
+
+    /**
+     * Create a request, process, extract the payload.
+     * <p>
+     * @param cacheName
+     * @param key
+     * @param requesterId
+     * @return ICacheElement
+     * @throws IOException
+     */
+    @Override
+    public ICacheElement<K, V> get( String cacheName, K key, long requesterId )
+        throws IOException
+    {
+        if ( !isInitialized() )
+        {
+            String message = "The Remote Http Client is not initialized.  Cannot process request.";
+            log.warn( message );
+            throw new IOException( message );
+        }
+        RemoteCacheRequest<K, Serializable> remoteHttpCacheRequest =
+            RemoteCacheRequestFactory.createGetRequest( cacheName, key, requesterId );
+
+        RemoteCacheResponse<ICacheElement<K, V>> remoteHttpCacheResponse =
+            getRemoteDispatcher().dispatchRequest( remoteHttpCacheRequest );
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Get [" + key + "] = " + remoteHttpCacheResponse );
+        }
+
+        if ( remoteHttpCacheResponse != null)
+        {
+            return remoteHttpCacheResponse.getPayload();
+        }
+
+        return null;
+    }
+
+    /**
+     * Gets multiple items from the cache matching the pattern.
+     * <p>
+     * @param cacheName
+     * @param pattern
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data in cache matching the pattern.
+     * @throws IOException
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> getMatching( String cacheName, String pattern )
+        throws IOException
+    {
+        return getMatching( cacheName, pattern, 0 );
+    }
+
+    /**
+     * Gets multiple items from the cache matching the pattern.
+     * <p>
+     * @param cacheName
+     * @param pattern
+     * @param requesterId
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data in cache matching the pattern.
+     * @throws IOException
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> getMatching( String cacheName, String pattern, long requesterId )
+        throws IOException
+    {
+        if ( !isInitialized() )
+        {
+            String message = "The Remote Http Client is not initialized.  Cannot process request.";
+            log.warn( message );
+            throw new IOException( message );
+        }
+
+        RemoteCacheRequest<K, V> remoteHttpCacheRequest =
+            RemoteCacheRequestFactory.createGetMatchingRequest( cacheName, pattern, requesterId );
+
+        RemoteCacheResponse<Map<K, ICacheElement<K, V>>> remoteHttpCacheResponse =
+            getRemoteDispatcher().dispatchRequest( remoteHttpCacheRequest );
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "GetMatching [" + pattern + "] = " + remoteHttpCacheResponse );
+        }
+
+        return remoteHttpCacheResponse.getPayload();
+    }
+
+    /**
+     * Gets multiple items from the cache based on the given set of keys.
+     * <p>
+     * @param cacheName
+     * @param keys
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data in cache for any of these keys
+     * @throws IOException
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> getMultiple( String cacheName, Set<K> keys )
+        throws IOException
+    {
+        return getMultiple( cacheName, keys, 0 );
+    }
+
+    /**
+     * Gets multiple items from the cache based on the given set of keys.
+     * <p>
+     * @param cacheName
+     * @param keys
+     * @param requesterId
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data in cache for any of these keys
+     * @throws IOException
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> getMultiple( String cacheName, Set<K> keys, long requesterId )
+        throws IOException
+    {
+        if ( !isInitialized() )
+        {
+            String message = "The Remote Http Client is not initialized.  Cannot process request.";
+            log.warn( message );
+            throw new IOException( message );
+        }
+
+        RemoteCacheRequest<K, V> remoteHttpCacheRequest =
+            RemoteCacheRequestFactory.createGetMultipleRequest( cacheName, keys, requesterId );
+
+        RemoteCacheResponse<Map<K, ICacheElement<K, V>>> remoteHttpCacheResponse =
+            getRemoteDispatcher().dispatchRequest( remoteHttpCacheRequest );
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "GetMultiple [" + keys + "] = " + remoteHttpCacheResponse );
+        }
+
+        return remoteHttpCacheResponse.getPayload();
+    }
+
+    /**
+     * Removes the given key from the specified cache.
+     * <p>
+     * @param cacheName
+     * @param key
+     * @throws IOException
+     */
+    @Override
+    public void remove( String cacheName, K key )
+        throws IOException
+    {
+        remove( cacheName, key, 0 );
+    }
+
+    /**
+     * Removes the given key from the specified cache.
+     * <p>
+     * @param cacheName
+     * @param key
+     * @param requesterId
+     * @throws IOException
+     */
+    @Override
+    public void remove( String cacheName, K key, long requesterId )
+        throws IOException
+    {
+        if ( !isInitialized() )
+        {
+            String message = "The Remote Http Client is not initialized.  Cannot process request.";
+            log.warn( message );
+            throw new IOException( message );
+        }
+
+        RemoteCacheRequest<K, V> remoteHttpCacheRequest =
+            RemoteCacheRequestFactory.createRemoveRequest( cacheName, key, requesterId );
+
+        getRemoteDispatcher().dispatchRequest( remoteHttpCacheRequest );
+    }
+
+    /**
+     * Remove all keys from the specified cache.
+     * <p>
+     * @param cacheName
+     * @throws IOException
+     */
+    @Override
+    public void removeAll( String cacheName )
+        throws IOException
+    {
+        removeAll( cacheName, 0 );
+    }
+
+    /**
+     * Remove all keys from the sepcified cache.
+     * <p>
+     * @param cacheName
+     * @param requesterId
+     * @throws IOException
+     */
+    @Override
+    public void removeAll( String cacheName, long requesterId )
+        throws IOException
+    {
+        if ( !isInitialized() )
+        {
+            String message = "The Remote Http Client is not initialized.  Cannot process request.";
+            log.warn( message );
+            throw new IOException( message );
+        }
+
+        RemoteCacheRequest<K, V> remoteHttpCacheRequest =
+            RemoteCacheRequestFactory.createRemoveAllRequest( cacheName, requesterId );
+
+        getRemoteDispatcher().dispatchRequest( remoteHttpCacheRequest );
+    }
+
+    /**
+     * Puts a cache item to the cache.
+     * <p>
+     * @param item
+     * @throws IOException
+     */
+    @Override
+    public void update( ICacheElement<K, V> item )
+        throws IOException
+    {
+        update( item, 0 );
+    }
+
+    /**
+     * Puts a cache item to the cache.
+     * <p>
+     * @param cacheElement
+     * @param requesterId
+     * @throws IOException
+     */
+    @Override
+    public void update( ICacheElement<K, V> cacheElement, long requesterId )
+        throws IOException
+    {
+        if ( !isInitialized() )
+        {
+            String message = "The Remote Http Client is not initialized.  Cannot process request.";
+            log.warn( message );
+            throw new IOException( message );
+        }
+
+        RemoteCacheRequest<K, V> remoteHttpCacheRequest =
+            RemoteCacheRequestFactory.createUpdateRequest( cacheElement, requesterId );
+
+        getRemoteDispatcher().dispatchRequest( remoteHttpCacheRequest );
+    }
+
+    /**
+     * Frees the specified cache.
+     * <p>
+     * @param cacheName
+     * @throws IOException
+     */
+    @Override
+    public void dispose( String cacheName )
+        throws IOException
+    {
+        if ( !isInitialized() )
+        {
+            String message = "The Remote Http Client is not initialized.  Cannot process request.";
+            log.warn( message );
+            throw new IOException( message );
+        }
+
+        RemoteCacheRequest<K, V> remoteHttpCacheRequest =
+            RemoteCacheRequestFactory.createDisposeRequest( cacheName, 0 );
+
+        getRemoteDispatcher().dispatchRequest( remoteHttpCacheRequest );
+    }
+
+    /**
+     * Frees the specified cache.
+     * <p>
+     * @throws IOException
+     */
+    @Override
+    public void release()
+        throws IOException
+    {
+        // noop
+    }
+
+    /**
+     * Return the keys in this cache.
+     * <p>
+     * @param cacheName the name of the cache
+     * @see org.apache.commons.jcs.auxiliary.AuxiliaryCache#getKeySet()
+     */
+    @Override
+    public Set<K> getKeySet( String cacheName ) throws IOException
+    {
+        if ( !isInitialized() )
+        {
+            String message = "The Remote Http Client is not initialized.  Cannot process request.";
+            log.warn( message );
+            throw new IOException( message );
+        }
+
+        RemoteCacheRequest<String, String> remoteHttpCacheRequest =
+            RemoteCacheRequestFactory.createGetKeySetRequest(cacheName, 0 );
+
+        RemoteCacheResponse<Set<K>> remoteHttpCacheResponse = getRemoteDispatcher().dispatchRequest( remoteHttpCacheRequest );
+
+        if ( remoteHttpCacheResponse != null && remoteHttpCacheResponse.getPayload() != null )
+        {
+            return remoteHttpCacheResponse.getPayload();
+        }
+
+        return Collections.emptySet();
+    }
+
+    /**
+     * Make and alive request.
+     * <p>
+     * @return true if we make a successful alive request.
+     * @throws IOException
+     */
+    @Override
+    public boolean isAlive()
+        throws IOException
+    {
+        if ( !isInitialized() )
+        {
+            String message = "The Remote Http Client is not initialized.  Cannot process request.";
+            log.warn( message );
+            throw new IOException( message );
+        }
+
+        RemoteCacheRequest<K, V> remoteHttpCacheRequest = RemoteCacheRequestFactory.createAliveCheckRequest( 0 );
+        RemoteCacheResponse<String> remoteHttpCacheResponse =
+            getRemoteDispatcher().dispatchRequest( remoteHttpCacheRequest );
+
+        if ( remoteHttpCacheResponse != null )
+        {
+            return remoteHttpCacheResponse.isSuccess();
+        }
+
+        return false;
+    }
+
+    /**
+     * @param remoteDispatcher the remoteDispatcher to set
+     */
+    public void setRemoteDispatcher( IRemoteCacheDispatcher remoteDispatcher )
+    {
+        this.remoteDispatcher = remoteDispatcher;
+    }
+
+    /**
+     * @return the remoteDispatcher
+     */
+    public IRemoteCacheDispatcher getRemoteDispatcher()
+    {
+        return remoteDispatcher;
+    }
+
+    /**
+     * @param remoteHttpCacheAttributes the remoteHttpCacheAttributes to set
+     */
+    public void setRemoteHttpCacheAttributes( RemoteHttpCacheAttributes remoteHttpCacheAttributes )
+    {
+        this.remoteHttpCacheAttributes = remoteHttpCacheAttributes;
+    }
+
+    /**
+     * @return the remoteHttpCacheAttributes
+     */
+    public RemoteHttpCacheAttributes getRemoteHttpCacheAttributes()
+    {
+        return remoteHttpCacheAttributes;
+    }
+
+    /**
+     * @param initialized the initialized to set
+     */
+    protected void setInitialized( boolean initialized )
+    {
+        this.initialized = initialized;
+    }
+
+    /**
+     * @return the initialized
+     */
+    protected boolean isInitialized()
+    {
+        return initialized;
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/http/client/RemoteHttpCacheDispatcher.java b/src/org/apache/commons/jcs/auxiliary/remote/http/client/RemoteHttpCacheDispatcher.java
new file mode 100644
index 0000000..a427f26
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/http/client/RemoteHttpCacheDispatcher.java
@@ -0,0 +1,231 @@
+package org.apache.commons.jcs.auxiliary.remote.http.client;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.httpclient.HttpException;
+import org.apache.commons.httpclient.HttpMethod;
+import org.apache.commons.httpclient.HttpState;
+import org.apache.commons.httpclient.methods.ByteArrayRequestEntity;
+import org.apache.commons.httpclient.methods.PostMethod;
+import org.apache.commons.httpclient.methods.RequestEntity;
+import org.apache.commons.jcs.auxiliary.remote.behavior.IRemoteCacheDispatcher;
+import org.apache.commons.jcs.auxiliary.remote.value.RemoteCacheRequest;
+import org.apache.commons.jcs.auxiliary.remote.value.RemoteCacheResponse;
+import org.apache.commons.jcs.utils.serialization.StandardSerializer;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+
+/** Calls the service. */
+public class RemoteHttpCacheDispatcher
+    extends AbstractHttpClient
+    implements IRemoteCacheDispatcher
+{
+    /** Named of the parameter */
+    private static final String PARAMETER_REQUEST_TYPE = "RequestType";
+
+    /** Named of the parameter */
+    private static final String PARAMETER_KEY = "Key";
+
+    /** Named of the parameter */
+    private static final String PARAMETER_CACHE_NAME = "CacheName";
+
+    /** The Logger. */
+    private static final Log log = LogFactory.getLog( RemoteHttpCacheDispatcher.class );
+
+    /** This needs to be standard, since the other side is standard */
+    private StandardSerializer serializer = new StandardSerializer();
+
+    /**
+     * @param remoteHttpCacheAttributes
+     */
+    public RemoteHttpCacheDispatcher( RemoteHttpCacheAttributes remoteHttpCacheAttributes )
+    {
+        super( remoteHttpCacheAttributes );
+    }
+
+    /**
+     * All requests will go through this method.
+     * <p>
+     * TODO consider taking in a URL instead of using the one in the configuration.
+     * <p>
+     * @param remoteCacheRequest
+     * @return RemoteCacheResponse
+     * @throws IOException
+     */
+    @Override
+    public <K, V, T>
+        RemoteCacheResponse<T> dispatchRequest( RemoteCacheRequest<K, V> remoteCacheRequest )
+        throws IOException
+    {
+        try
+        {
+            byte[] requestAsByteArray = serializer.serialize( remoteCacheRequest );
+
+            String url = addParameters( remoteCacheRequest, getRemoteHttpCacheAttributes().getUrl() );
+
+            byte[] responseAsByteArray = processRequest( requestAsByteArray, url );
+
+            RemoteCacheResponse<T> remoteCacheResponse = null;
+            try
+            {
+                remoteCacheResponse = serializer.deSerialize( responseAsByteArray, null );
+            }
+            catch ( ClassNotFoundException e )
+            {
+                log.error( "Couldn't deserialize the response.", e );
+            }
+            return remoteCacheResponse;
+        }
+        catch ( Exception e )
+        {
+            log.error( "Problem dispatching request.", e );
+            throw new IOException( e.getMessage() );
+        }
+    }
+
+    /**
+     * @param requestAsByteArray
+     * @param url
+     * @return byte[] - the response
+     * @throws IOException
+     * @throws HttpException
+     */
+    protected byte[] processRequest( byte[] requestAsByteArray, String url )
+        throws IOException, HttpException
+    {
+        PostMethod post = new PostMethod( url );
+        RequestEntity requestEntity = new ByteArrayRequestEntity( requestAsByteArray );
+        post.setRequestEntity( requestEntity );
+        doWebserviceCall( post );
+        byte[] response = post.getResponseBody();
+        return response;
+    }
+
+    /**
+     * @param remoteCacheRequest
+     * @param baseUrl
+     * @return String
+     */
+    protected <K, V> String addParameters( RemoteCacheRequest<K, V> remoteCacheRequest, String baseUrl )
+    {
+        StringBuilder url = new StringBuilder( baseUrl );
+
+        try
+        {
+            if ( baseUrl != null && baseUrl.indexOf( "?" ) == -1 )
+            {
+                url.append( "?" );
+            }
+            else
+            {
+                url.append( "&" );
+            }
+
+            if ( getRemoteHttpCacheAttributes().isIncludeCacheNameAsParameter() )
+            {
+                if ( remoteCacheRequest.getCacheName() != null )
+                {
+                    url.append( PARAMETER_CACHE_NAME + "="
+                        + URLEncoder.encode( remoteCacheRequest.getCacheName(), "UTF-8" ) );
+                }
+            }
+            if ( getRemoteHttpCacheAttributes().isIncludeKeysAndPatternsAsParameter() )
+            {
+                String keyValue = "";
+                switch ( remoteCacheRequest.getRequestType() )
+                {
+                    case GET:
+                        keyValue = remoteCacheRequest.getKey() + "";
+                        break;
+                    case REMOVE:
+                        keyValue = remoteCacheRequest.getKey() + "";
+                        break;
+                    case GET_MATCHING:
+                        keyValue = remoteCacheRequest.getPattern();
+                        break;
+                    case GET_MULTIPLE:
+                        keyValue = remoteCacheRequest.getKeySet() + "";
+                        break;
+                    case GET_KEYSET:
+                        keyValue = remoteCacheRequest.getKey() + "";
+                        break;
+                    case UPDATE:
+                        keyValue = remoteCacheRequest.getCacheElement().getKey() + "";
+                        break;
+                    default:
+                        break;
+                }
+                String encodedKeyValue = URLEncoder.encode( keyValue, "UTF-8" );
+                url.append( "&" + PARAMETER_KEY + "=" + encodedKeyValue );
+            }
+            if ( getRemoteHttpCacheAttributes().isIncludeRequestTypeasAsParameter() )
+            {
+                url.append( "&"
+                    + PARAMETER_REQUEST_TYPE
+                    + "="
+                    + URLEncoder.encode( remoteCacheRequest.getRequestType().toString(), "UTF-8" ) );
+            }
+        }
+        catch ( UnsupportedEncodingException e )
+        {
+            log.error( "Couldn't encode URL.", e );
+        }
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Url: " + url.toString() );
+        }
+
+        return url.toString();
+    }
+
+    /**
+     * Called before the executeMethod on the client.
+     * <p>
+     * @param post http method
+     * @return HttpState
+     * @throws IOException
+     */
+    @Override
+    public HttpState preProcessWebserviceCall( HttpMethod post )
+        throws IOException
+    {
+        // do nothing. Child can override.
+        return null;
+    }
+
+    /**
+     * Called after the executeMethod on the client.
+     * <p>
+     * @param post http method
+     * @param httpState state
+     * @throws IOException
+     */
+    @Override
+    public void postProcessWebserviceCall( HttpMethod post, HttpState httpState )
+        throws IOException
+    {
+        // do nothing. Child can override.
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/http/client/RemoteHttpCacheFactory.java b/src/org/apache/commons/jcs/auxiliary/remote/http/client/RemoteHttpCacheFactory.java
new file mode 100644
index 0000000..ecb87ae
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/http/client/RemoteHttpCacheFactory.java
@@ -0,0 +1,94 @@
+package org.apache.commons.jcs.auxiliary.remote.http.client;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.AbstractAuxiliaryCacheFactory;
+import org.apache.commons.jcs.auxiliary.AuxiliaryCache;
+import org.apache.commons.jcs.auxiliary.AuxiliaryCacheAttributes;
+import org.apache.commons.jcs.auxiliary.remote.RemoteCacheNoWait;
+import org.apache.commons.jcs.auxiliary.remote.RemoteCacheNoWaitFacade;
+import org.apache.commons.jcs.auxiliary.remote.server.behavior.RemoteType;
+import org.apache.commons.jcs.engine.behavior.ICache;
+import org.apache.commons.jcs.engine.behavior.ICompositeCacheManager;
+import org.apache.commons.jcs.engine.behavior.IElementSerializer;
+import org.apache.commons.jcs.engine.logging.behavior.ICacheEventLogger;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+/**
+ * The RemoteCacheFactory creates remote caches for the cache hub. It returns a no wait facade which
+ * is a wrapper around a no wait. The no wait object is either an active connection to a remote
+ * cache or a balking zombie if the remote cache is not accessible. It should be transparent to the
+ * clients.
+ */
+public class RemoteHttpCacheFactory
+    extends AbstractAuxiliaryCacheFactory
+{
+    /** store reference of facades to initiate failover */
+    private static final HashMap<String, RemoteCacheNoWaitFacade<?, ?>> facades =
+        new HashMap<String, RemoteCacheNoWaitFacade<?, ?>>();
+
+    /**
+     * For LOCAL clients we get a handle to all the failovers, but we do not register a listener
+     * with them. We create the RemoteCacheManager, but we do not get a cache.
+     * <p>
+     * The failover runner will get a cache from the manager. When the primary is restored it will
+     * tell the manager for the failover to deregister the listener.
+     * <p>
+     * @param iaca
+     * @param cacheMgr
+     * @param cacheEventLogger
+     * @param elementSerializer
+     * @return AuxiliaryCache
+     */
+    @Override
+    public <K, V> AuxiliaryCache<K, V> createCache( AuxiliaryCacheAttributes iaca, ICompositeCacheManager cacheMgr,
+                                       ICacheEventLogger cacheEventLogger, IElementSerializer elementSerializer )
+    {
+        RemoteHttpCacheAttributes rca = (RemoteHttpCacheAttributes) iaca;
+
+        ArrayList<ICache<K, V>> noWaits = new ArrayList<ICache<K, V>>();
+
+        RemoteHttpCacheManager rcm = RemoteHttpCacheManager.getInstance( cacheMgr, cacheEventLogger, elementSerializer );
+        // TODO, use the configured value.
+        rca.setRemoteType( RemoteType.LOCAL );
+        ICache<K, V> ic = rcm.getCache( rca );
+        noWaits.add( ic );
+
+        @SuppressWarnings("unchecked") // No generic arrays in java
+        RemoteCacheNoWait<K, V>[] rcnwArray = noWaits.toArray( new RemoteCacheNoWait[0] );
+        RemoteCacheNoWaitFacade<K, V> rcnwf =
+            new RemoteCacheNoWaitFacade<K, V>(rcnwArray, rca, cacheMgr, cacheEventLogger, elementSerializer );
+
+        getFacades().put( rca.getCacheName(), rcnwf );
+
+        return rcnwf;
+    }
+
+    /**
+     * The facades are what the cache hub talks to.
+     * @return Returns the facades.
+     */
+    public static HashMap<String, RemoteCacheNoWaitFacade<?, ?>> getFacades()
+    {
+        return facades;
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/http/client/RemoteHttpCacheManager.java b/src/org/apache/commons/jcs/auxiliary/remote/http/client/RemoteHttpCacheManager.java
new file mode 100644
index 0000000..49b8920
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/http/client/RemoteHttpCacheManager.java
@@ -0,0 +1,266 @@
+package org.apache.commons.jcs.auxiliary.remote.http.client;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.remote.RemoteCacheNoWait;
+import org.apache.commons.jcs.auxiliary.remote.behavior.IRemoteCacheAttributes;
+import org.apache.commons.jcs.auxiliary.remote.behavior.IRemoteCacheClient;
+import org.apache.commons.jcs.auxiliary.remote.http.client.behavior.IRemoteHttpCacheClient;
+import org.apache.commons.jcs.engine.behavior.ICompositeCacheManager;
+import org.apache.commons.jcs.engine.behavior.IElementSerializer;
+import org.apache.commons.jcs.engine.behavior.IShutdownObserver;
+import org.apache.commons.jcs.engine.logging.behavior.ICacheEventLogger;
+import org.apache.commons.jcs.utils.config.OptionConverter;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * This is a very crude copy of the RMI remote manager. It needs a lot of work!
+ */
+public class RemoteHttpCacheManager
+    implements IShutdownObserver
+{
+    /** The logger */
+    private static final Log log = LogFactory.getLog( RemoteHttpCacheManager.class );
+
+    /** Contains mappings of Location instance to RemoteCacheManager instance. */
+    private static RemoteHttpCacheManager instance;
+
+    /** Contains instances of RemoteCacheNoWait managed by a RemoteCacheManager instance. */
+    static final Map<String, RemoteCacheNoWait<?, ?>> caches =
+        new HashMap<String, RemoteCacheNoWait<?, ?>>();
+
+    /** The configuration attributes. */
+    private IRemoteCacheAttributes remoteCacheAttributes;
+
+    /** The event logger. */
+    private final ICacheEventLogger cacheEventLogger;
+
+    /** The serializer. */
+    private final IElementSerializer elementSerializer;
+
+    /** The cache manager listeners will need to use to get a cache. */
+    private final ICompositeCacheManager cacheMgr;
+
+    /** Remote cache monitor. */
+    private static RemoteHttpCacheMonitor monitor;
+
+    /**
+     * Constructs an instance to with the given remote connection parameters. If the connection
+     * cannot be made, "zombie" services will be temporarily used until a successful re-connection
+     * is made by the monitoring daemon.
+     * <p>
+     * @param cacheMgr
+     * @param cacheEventLogger
+     * @param elementSerializer
+     */
+    private RemoteHttpCacheManager( ICompositeCacheManager cacheMgr, ICacheEventLogger cacheEventLogger,
+                                    IElementSerializer elementSerializer )
+    {
+        this.cacheMgr = cacheMgr;
+        this.cacheEventLogger = cacheEventLogger;
+        this.elementSerializer = elementSerializer;
+
+        // register shutdown observer
+        this.cacheMgr.registerShutdownObserver( this );
+    }
+
+    /**
+     * Gets the defaultCattr attribute of the RemoteCacheManager object.
+     * <p>
+     * @return The defaultCattr value
+     */
+    public IRemoteCacheAttributes getDefaultCattr()
+    {
+        return this.remoteCacheAttributes;
+    }
+
+    /** @return Returns an instance if it exists. else null. */
+    public synchronized static RemoteHttpCacheManager getInstance()
+    {
+        return instance;
+    }
+
+    /**
+     * Get the singleton instance.
+     * <p>
+     * @param cacheMgr
+     * @param cacheEventLogger
+     * @param elementSerializer
+     * @return The instance value
+     */
+    public synchronized static RemoteHttpCacheManager getInstance( ICompositeCacheManager cacheMgr,
+                                                                   ICacheEventLogger cacheEventLogger,
+                                                                   IElementSerializer elementSerializer )
+    {
+        if ( instance == null )
+        {
+            instance = new RemoteHttpCacheManager( cacheMgr, cacheEventLogger, elementSerializer );
+        }
+
+        // Fires up the monitoring daemon.
+        if ( monitor == null )
+        {
+            monitor = RemoteHttpCacheMonitor.getInstance();
+            // If the returned monitor is null, it means it's already started
+            // elsewhere.
+            if ( monitor != null )
+            {
+                Thread t = new Thread( monitor );
+                t.setDaemon( true );
+                t.start();
+            }
+        }
+
+        return instance;
+    }
+
+    /**
+     * Returns a remote cache for the given cache name.
+     * <p>
+     * @param cacheName
+     * @return The cache value
+     */
+    // @Override
+    public <K, V> RemoteCacheNoWait<K, V> getCache( String cacheName )
+    {
+        // TODO get some defaults!
+        // Perhaps we will need a manager per URL????
+        RemoteHttpCacheAttributes ca = new RemoteHttpCacheAttributes();
+        ca.setCacheName( cacheName );
+        return getCache( ca );
+    }
+
+    /**
+     * Gets a RemoteCacheNoWait from the RemoteCacheManager. The RemoteCacheNoWait objects are
+     * identified by the cache name value of the RemoteCacheAttributes object.
+     * <p>
+     * If the client is configured to register a listener, this call results on a listener being
+     * created if one isn't already registered with the remote cache for this region.
+     * <p>
+     * @param cattr
+     * @return The cache value
+     */
+    public <K, V> RemoteCacheNoWait<K, V> getCache( RemoteHttpCacheAttributes cattr )
+    {
+        RemoteCacheNoWait<K, V> remoteCacheNoWait = null;
+
+        synchronized ( caches )
+        {
+            @SuppressWarnings("unchecked") // Need to cast because of common map for all caches
+            RemoteCacheNoWait<K, V> remoteCacheNoWait2 = (RemoteCacheNoWait<K, V>) caches.get( cattr.getCacheName() + cattr.getUrl() );
+            remoteCacheNoWait = remoteCacheNoWait2;
+            if ( remoteCacheNoWait == null )
+            {
+                RemoteHttpClientListener<K, V> listener = new RemoteHttpClientListener<K, V>( cattr, cacheMgr );
+
+                IRemoteHttpCacheClient<K, V> remoteService = createRemoteHttpCacheClientForAttributes( cattr );
+
+                IRemoteCacheClient<K, V> remoteCacheClient = new RemoteHttpCache<K, V>( cattr, remoteService, listener );
+                remoteCacheClient.setCacheEventLogger( cacheEventLogger );
+                remoteCacheClient.setElementSerializer( elementSerializer );
+
+                remoteCacheNoWait = new RemoteCacheNoWait<K, V>( remoteCacheClient );
+                remoteCacheNoWait.setCacheEventLogger( cacheEventLogger );
+                remoteCacheNoWait.setElementSerializer( elementSerializer );
+
+                caches.put( cattr.getCacheName() + cattr.getUrl(), remoteCacheNoWait );
+            }
+            // might want to do some listener sanity checking here.
+        }
+
+        return remoteCacheNoWait;
+    }
+
+    /**
+     * This is an extension point. The manager and other classes will only create
+     * RemoteHttpCacheClient through this method.
+     * <p>
+     * @param cattr
+     * @return IRemoteHttpCacheClient
+     */
+    protected <K, V> IRemoteHttpCacheClient<K, V> createRemoteHttpCacheClientForAttributes( RemoteHttpCacheAttributes cattr )
+    {
+        IRemoteHttpCacheClient<K, V> client = OptionConverter.instantiateByClassName( cattr
+            .getRemoteHttpClientClassName(), null );
+
+        if ( client == null )
+        {
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "Creating the default client." );
+            }
+            client = new RemoteHttpCacheClient<K, V>( );
+        }
+        client.initialize( cattr );
+        return client;
+    }
+
+    /**
+     * Gets the stats attribute of the RemoteCacheManager object
+     * <p>
+     * @return The stats value
+     */
+    public String getStats()
+    {
+        StringBuilder stats = new StringBuilder();
+        for (RemoteCacheNoWait<?, ?> c : caches.values())
+        {
+            if ( c != null )
+            {
+                stats.append( c.getCacheName() );
+            }
+        }
+        return stats.toString();
+    }
+
+    /**
+     * Shutdown callback from composite cache manager.
+     * <p>
+     * @see org.apache.commons.jcs.engine.behavior.IShutdownObserver#shutdown()
+     */
+    @Override
+    public void shutdown()
+    {
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "Observed shutdown request." );
+        }
+        //release();
+    }
+
+    /**
+     * Logs an event if an event logger is configured.
+     * <p>
+     * @param source
+     * @param eventName
+     * @param optionalDetails
+     */
+    protected void logApplicationEvent( String source, String eventName, String optionalDetails )
+    {
+        if ( cacheEventLogger != null )
+        {
+            cacheEventLogger.logApplicationEvent( source, eventName, optionalDetails );
+        }
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/http/client/RemoteHttpCacheMonitor.java b/src/org/apache/commons/jcs/auxiliary/remote/http/client/RemoteHttpCacheMonitor.java
new file mode 100644
index 0000000..337eb1d
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/http/client/RemoteHttpCacheMonitor.java
@@ -0,0 +1,248 @@
+package org.apache.commons.jcs.auxiliary.remote.http.client;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.remote.http.client.behavior.IRemoteHttpCacheClient;
+import org.apache.commons.jcs.engine.CacheStatus;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.Serializable;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * Upon the notification of a connection error, the monitor changes to operate in a time driven
+ * mode. That is, it attempts to recover the connections on a periodic basis. When all failed
+ * connections are restored, it changes back to the failure driven mode.
+ */
+public class RemoteHttpCacheMonitor
+    implements Runnable
+{
+    /** The logger */
+    private static final Log log = LogFactory.getLog( RemoteHttpCacheMonitor.class );
+
+    /** The remote cache that we are monitoring */
+    private static RemoteHttpCacheMonitor instance;
+
+    /** Time between checks */
+    private static long idlePeriod = 3 * 1000;
+
+    /** Set of remote caches to monitor. This are added on error, if not before. */
+    private final Set<RemoteHttpCache<?, ?>> remoteHttpCaches = new HashSet<RemoteHttpCache<?, ?>>();
+
+    /**
+     * Must make sure RemoteCacheMonitor is started before any remote error can be detected!
+     */
+    private boolean alright = true;
+
+    /** Time driven mode */
+    static final int TIME = 0;
+
+    /** Error driven mode -- only check on health if there is an error */
+    static final int ERROR = 1;
+
+    /** The mode to use */
+    static int mode = ERROR;
+
+    /**
+     * Configures the idle period between repairs.
+     * <p>
+     * @param idlePeriod The new idlePeriod value
+     */
+    public static void setIdlePeriod( long idlePeriod )
+    {
+        if ( idlePeriod > RemoteHttpCacheMonitor.idlePeriod )
+        {
+            RemoteHttpCacheMonitor.idlePeriod = idlePeriod;
+        }
+    }
+
+    /** Constructor for the RemoteCacheMonitor object */
+    private RemoteHttpCacheMonitor()
+    {
+        super();
+    }
+
+    /**
+     * Returns the singleton instance.
+     * <p>
+     * @return The instance value
+     */
+    static RemoteHttpCacheMonitor getInstance()
+    {
+        synchronized ( RemoteHttpCacheMonitor.class )
+        {
+            if ( instance == null )
+            {
+                return instance = new RemoteHttpCacheMonitor();
+            }
+        }
+        return instance;
+    }
+
+    /**
+     * Notifies the cache monitor that an error occurred, and kicks off the error recovery process.
+     * <p>
+     * @param remoteCache
+     */
+    public void notifyError( RemoteHttpCache<?, ?> remoteCache )
+    {
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "Notified of an error. " + remoteCache );
+        }
+        bad();
+        synchronized ( this )
+        {
+            remoteHttpCaches.add( remoteCache );
+            notify();
+        }
+    }
+
+    // Run forever.
+
+    // Avoid the use of any synchronization in the process of monitoring for
+    // performance reasons.
+    // If exception is thrown owing to synchronization,
+    // just skip the monitoring until the next round.
+    /** Main processing method for the RemoteCacheMonitor object */
+    @Override
+    public void run()
+    {
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "Monitoring daemon started" );
+        }
+        do
+        {
+            if ( mode == ERROR )
+            {
+                synchronized ( this )
+                {
+                    if ( alright )
+                    {
+                        // make this configurable, comment out wait to enter
+                        // time driven mode
+                        // Failure driven mode.
+                        try
+                        {
+                            if ( log.isDebugEnabled() )
+                            {
+                                log.debug( "FAILURE DRIVEN MODE: cache monitor waiting for error" );
+                            }
+                            wait();
+                            // wake up only if there is an error.
+                        }
+                        catch ( InterruptedException ignore )
+                        {
+                            // swallow
+                        }
+                    }
+                }
+            }
+            else
+            {
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "TIME DRIVEN MODE: cache monitor sleeping for " + idlePeriod );
+                }
+                // Time driven mode: sleep between each round of recovery
+                // attempt.
+                // will need to test not just check status
+            }
+
+            try
+            {
+                Thread.sleep( idlePeriod );
+            }
+            catch ( InterruptedException ex )
+            {
+                // ignore;
+            }
+
+            // The "allright" flag must be false here.
+            // Simply presume we can fix all the errors until proven otherwise.
+            synchronized ( this )
+            {
+                alright = true;
+            }
+
+            // Make a copy
+            Set<RemoteHttpCache<?, ?>> remoteCachesToExamine =
+                new HashSet<RemoteHttpCache<?, ?>>();
+            synchronized ( this )
+            {
+                for (RemoteHttpCache<?, ?> remoteCache : this.remoteHttpCaches)
+                {
+                    remoteCachesToExamine.add( remoteCache );
+                }
+            }
+            // If any cache is in error, it strongly suggests all caches
+            // managed by the
+            // same RmicCacheManager instance are in error. So we fix
+            // them once and for all.
+            for (RemoteHttpCache<?, ?> remoteCache : remoteCachesToExamine)
+            {
+                try
+                {
+                    if ( remoteCache.getStatus() == CacheStatus.ERROR )
+                    {
+                        RemoteHttpCacheAttributes attributes = remoteCache.getRemoteHttpCacheAttributes();
+
+                        IRemoteHttpCacheClient<Serializable, Serializable> remoteService = RemoteHttpCacheManager.getInstance()
+                            .createRemoteHttpCacheClientForAttributes( attributes );
+
+                        if ( log.isInfoEnabled() )
+                        {
+                            log.info( "Performing Alive check on service " + remoteService );
+                        }
+                        // If we can't fix them, just skip and re-try in
+                        // the next round.
+                        if ( remoteService.isAlive() )
+                        {
+                            remoteCache.fixCache( remoteService );
+                        }
+                        else
+                        {
+                            bad();
+                        }
+                        break;
+                    }
+                }
+                catch ( Exception ex )
+                {
+                    bad();
+                    // Problem encountered in fixing the caches managed by a
+                    // RemoteCacheManager instance.
+                    // Soldier on to the next RemoteHttpCache.
+                    log.error( ex );
+                }
+            }
+        }
+        while ( true );
+    }
+
+    /** Sets the "aright" flag to false in a critical section. */
+    private synchronized void bad()
+    {
+        alright = false;
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/http/client/RemoteHttpClientListener.java b/src/org/apache/commons/jcs/auxiliary/remote/http/client/RemoteHttpClientListener.java
new file mode 100644
index 0000000..28ecd2e
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/http/client/RemoteHttpClientListener.java
@@ -0,0 +1,53 @@
+package org.apache.commons.jcs.auxiliary.remote.http.client;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.remote.AbstractRemoteCacheListener;
+import org.apache.commons.jcs.auxiliary.remote.behavior.IRemoteCacheAttributes;
+import org.apache.commons.jcs.engine.behavior.ICompositeCacheManager;
+
+/** Does nothing */
+public class RemoteHttpClientListener<K, V>
+    extends AbstractRemoteCacheListener<K, V>
+{
+    /** Serial version */
+    private static final long serialVersionUID = -9078366610772128010L;
+
+    /**
+     * Only need one since it does work for all regions, just reference by multiple region names.
+     * <p>
+     * The constructor exports this object, making it available to receive incoming calls. The
+     * callback port is anonymous unless a local port value was specified in the configuration.
+     * <p>
+     * @param irca
+     * @param cacheMgr
+     */
+    public RemoteHttpClientListener( IRemoteCacheAttributes irca, ICompositeCacheManager cacheMgr )
+    {
+        super( irca, cacheMgr );
+    }
+
+    /** Nothing */
+    @Override
+    public void dispose()
+    {
+        // noop
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/http/client/behavior/IRemoteHttpCacheClient.java b/src/org/apache/commons/jcs/auxiliary/remote/http/client/behavior/IRemoteHttpCacheClient.java
new file mode 100644
index 0000000..9949b7e
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/http/client/behavior/IRemoteHttpCacheClient.java
@@ -0,0 +1,51 @@
+package org.apache.commons.jcs.auxiliary.remote.http.client.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.remote.http.client.RemoteHttpCacheAttributes;
+import org.apache.commons.jcs.engine.behavior.ICacheServiceNonLocal;
+
+import java.io.IOException;
+
+
+/**
+ * It's not entirely clear that this interface is needed. I simply wanted the initialization method.
+ * This could be added to the ICacheSerice method.
+ */
+public interface IRemoteHttpCacheClient<K, V>
+    extends ICacheServiceNonLocal<K, V>
+{
+    /**
+     * The provides an extension point. If you want to extend this and use a special dispatcher,
+     * here is the place to do it.
+     * <p>
+     * @param attributes
+     */
+    void initialize( RemoteHttpCacheAttributes attributes );
+
+    /**
+     * Make and alive request.
+     * <p>
+     * @return true if we make a successful alive request.
+     * @throws IOException
+     */
+    boolean isAlive()
+        throws IOException;
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/http/server/AbstractRemoteCacheService.java b/src/org/apache/commons/jcs/auxiliary/remote/http/server/AbstractRemoteCacheService.java
new file mode 100644
index 0000000..866ce4e
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/http/server/AbstractRemoteCacheService.java
@@ -0,0 +1,603 @@
+package org.apache.commons.jcs.auxiliary.remote.http.server;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.behavior.ICacheServiceNonLocal;
+import org.apache.commons.jcs.engine.behavior.ICompositeCacheManager;
+import org.apache.commons.jcs.engine.control.CompositeCache;
+import org.apache.commons.jcs.engine.logging.CacheEvent;
+import org.apache.commons.jcs.engine.logging.behavior.ICacheEvent;
+import org.apache.commons.jcs.engine.logging.behavior.ICacheEventLogger;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * This class contains common methods for remote cache services. Eventually I hope to extract out
+ * much of the RMI server to use this as well. I'm starting with the Http service.
+ */
+public abstract class AbstractRemoteCacheService<K extends Serializable, V extends Serializable>
+    implements ICacheServiceNonLocal<K, V>
+{
+    /** An optional event logger */
+    private transient ICacheEventLogger cacheEventLogger;
+
+    /** The central hub */
+    private ICompositeCacheManager cacheManager;
+
+    /** Name of the event log source. */
+    private String eventLogSourceName = "AbstractRemoteCacheService";
+
+    /** Number of puts into the cache. */
+    private int puts = 0;
+
+    /** The interval at which we will log updates. */
+    private final int logInterval = 100;
+
+    /** log instance */
+    private static final Log log = LogFactory.getLog( AbstractRemoteCacheService.class );
+
+    /**
+     * Creates the super with the needed items.
+     * <p>
+     * @param cacheManager
+     * @param cacheEventLogger
+     */
+    public AbstractRemoteCacheService( ICompositeCacheManager cacheManager, ICacheEventLogger cacheEventLogger )
+    {
+        this.cacheManager = cacheManager;
+        this.cacheEventLogger = cacheEventLogger;
+    }
+
+    /**
+     * @param item
+     * @throws IOException
+     */
+    @Override
+    public void update( ICacheElement<K, V> item )
+        throws IOException
+    {
+        update( item, 0 );
+    }
+
+    /**
+     * The internal processing is wrapped in event logging calls.
+     * <p>
+     * @param item
+     * @param requesterId
+     * @throws IOException
+     */
+    @Override
+    public void update( ICacheElement<K, V> item, long requesterId )
+        throws IOException
+    {
+        ICacheEvent<ICacheElement<K, V>> cacheEvent = createICacheEvent( item, requesterId, ICacheEventLogger.UPDATE_EVENT );
+        try
+        {
+            logUpdateInfo( item );
+
+            processUpdate( item, requesterId );
+        }
+        finally
+        {
+            logICacheEvent( cacheEvent );
+        }
+    }
+
+    /**
+     * The internal processing is wrapped in event logging calls.
+     * <p>
+     * @param item
+     * @param requesterId
+     * @throws IOException
+     */
+    abstract void processUpdate( ICacheElement<K, V> item, long requesterId )
+        throws IOException;
+
+    /**
+     * Log some details.
+     * <p>
+     * @param item
+     */
+    private void logUpdateInfo( ICacheElement<K, V> item )
+    {
+        if ( log.isInfoEnabled() )
+        {
+            // not thread safe, but it doesn't have to be accurate
+            puts++;
+            if ( puts % logInterval == 0 )
+            {
+                log.info( "puts = " + puts );
+            }
+        }
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "In update, put [" + item.getKey() + "] in [" + item.getCacheName() + "]" );
+        }
+    }
+
+    /**
+     * Returns a cache value from the specified remote cache; or null if the cache or key does not
+     * exist.
+     * <p>
+     * @param cacheName
+     * @param key
+     * @return ICacheElement
+     * @throws IOException
+     */
+    @Override
+    public ICacheElement<K, V> get( String cacheName, K key )
+        throws IOException
+    {
+        return this.get( cacheName, key, 0 );
+    }
+
+    /**
+     * Returns a cache bean from the specified cache; or null if the key does not exist.
+     * <p>
+     * Adding the requestor id, allows the cache to determine the source of the get.
+     * <p>
+     * The internal processing is wrapped in event logging calls.
+     * <p>
+     * @param cacheName
+     * @param key
+     * @param requesterId
+     * @return ICacheElement
+     * @throws IOException
+     */
+    @Override
+    public ICacheElement<K, V> get( String cacheName, K key, long requesterId )
+        throws IOException
+    {
+        ICacheElement<K, V> element = null;
+        ICacheEvent<K> cacheEvent = createICacheEvent( cacheName, key, requesterId, ICacheEventLogger.GET_EVENT );
+        try
+        {
+            element = processGet( cacheName, key, requesterId );
+        }
+        finally
+        {
+            logICacheEvent( cacheEvent );
+        }
+        return element;
+    }
+
+    /**
+     * Returns a cache bean from the specified cache; or null if the key does not exist.
+     * <p>
+     * Adding the requestor id, allows the cache to determine the source of the get.
+     * <p>
+     * @param cacheName
+     * @param key
+     * @param requesterId
+     * @return ICacheElement
+     * @throws IOException
+     */
+    abstract ICacheElement<K, V> processGet( String cacheName, K key, long requesterId )
+        throws IOException;
+
+    /**
+     * Gets all matching items.
+     * <p>
+     * @param cacheName
+     * @param pattern
+     * @return Map of keys and wrapped objects
+     * @throws IOException
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> getMatching( String cacheName, String pattern )
+        throws IOException
+    {
+        return getMatching( cacheName, pattern, 0 );
+    }
+
+    /**
+     * Retrieves all matching keys.
+     * <p>
+     * @param cacheName
+     * @param pattern
+     * @param requesterId
+     * @return Map of keys and wrapped objects
+     * @throws IOException
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> getMatching( String cacheName, String pattern, long requesterId )
+        throws IOException
+    {
+        ICacheEvent<String> cacheEvent = createICacheEvent( cacheName, pattern, requesterId,
+                                                    ICacheEventLogger.GETMATCHING_EVENT );
+        try
+        {
+            return processGetMatching( cacheName, pattern, requesterId );
+        }
+        finally
+        {
+            logICacheEvent( cacheEvent );
+        }
+    }
+
+    /**
+     * Retrieves all matching keys.
+     * <p>
+     * @param cacheName
+     * @param pattern
+     * @param requesterId
+     * @return Map of keys and wrapped objects
+     * @throws IOException
+     */
+    abstract Map<K, ICacheElement<K, V>> processGetMatching( String cacheName, String pattern, long requesterId )
+        throws IOException;
+
+    /**
+     * Gets multiple items from the cache based on the given set of keys.
+     * <p>
+     * @param cacheName
+     * @param keys
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data in cache for any of these keys
+     * @throws IOException
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> getMultiple( String cacheName, Set<K> keys )
+        throws IOException
+    {
+        return this.getMultiple( cacheName, keys, 0 );
+    }
+
+    /**
+     * Gets multiple items from the cache based on the given set of keys.
+     * <p>
+     * The internal processing is wrapped in event logging calls.
+     * <p>
+     * @param cacheName
+     * @param keys
+     * @param requesterId
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data in cache for any of these keys
+     * @throws IOException
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> getMultiple( String cacheName, Set<K> keys, long requesterId )
+        throws IOException
+    {
+        ICacheEvent<Serializable> cacheEvent = createICacheEvent( cacheName, (Serializable) keys, requesterId,
+                                                    ICacheEventLogger.GETMULTIPLE_EVENT );
+        try
+        {
+            return processGetMultiple( cacheName, keys, requesterId );
+        }
+        finally
+        {
+            logICacheEvent( cacheEvent );
+        }
+    }
+
+    /**
+     * Gets multiple items from the cache based on the given set of keys.
+     * <p>
+     * @param cacheName
+     * @param keys
+     * @param requesterId
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data in cache for any of these keys
+     * @throws IOException
+     */
+    abstract Map<K, ICacheElement<K, V>> processGetMultiple( String cacheName, Set<K> keys, long requesterId )
+        throws IOException;
+
+    /**
+     * Return the keys in this cache.
+     * <p>
+     * @see org.apache.commons.jcs.auxiliary.AuxiliaryCache#getKeySet()
+     */
+    @Override
+    public Set<K> getKeySet( String cacheName )
+    {
+        return processGetKeySet( cacheName );
+    }
+
+    /**
+     * Gets the set of keys of objects currently in the cache.
+     * <p>
+     * @param cacheName
+     * @return Set
+     */
+    public Set<K> processGetKeySet( String cacheName )
+    {
+        CompositeCache<K, V> cache = getCacheManager().getCache( cacheName );
+
+        return cache.getKeySet();
+    }
+
+    /**
+     * Removes the given key from the specified remote cache. Defaults the listener id to 0.
+     * <p>
+     * @param cacheName
+     * @param key
+     * @throws IOException
+     */
+    @Override
+    public void remove( String cacheName, K key )
+        throws IOException
+    {
+        remove( cacheName, key, 0 );
+    }
+
+    /**
+     * Remove the key from the cache region and don't tell the source listener about it.
+     * <p>
+     * The internal processing is wrapped in event logging calls.
+     * <p>
+     * @param cacheName
+     * @param key
+     * @param requesterId
+     * @throws IOException
+     */
+    @Override
+    public void remove( String cacheName, K key, long requesterId )
+        throws IOException
+    {
+        ICacheEvent<K> cacheEvent = createICacheEvent( cacheName, key, requesterId, ICacheEventLogger.REMOVE_EVENT );
+        try
+        {
+            processRemove( cacheName, key, requesterId );
+        }
+        finally
+        {
+            logICacheEvent( cacheEvent );
+        }
+    }
+
+    /**
+     * Remove the key from the cache region and don't tell the source listener about it.
+     * <p>
+     * @param cacheName
+     * @param key
+     * @param requesterId
+     * @throws IOException
+     */
+    abstract void processRemove( String cacheName, K key, long requesterId )
+        throws IOException;
+
+    /**
+     * Remove all keys from the specified remote cache.
+     * <p>
+     * @param cacheName
+     * @throws IOException
+     */
+    @Override
+    public void removeAll( String cacheName )
+        throws IOException
+    {
+        removeAll( cacheName, 0 );
+    }
+
+    /**
+     * Remove all keys from the specified remote cache.
+     * <p>
+     * The internal processing is wrapped in event logging calls.
+     * <p>
+     * @param cacheName
+     * @param requesterId
+     * @throws IOException
+     */
+    @Override
+    public void removeAll( String cacheName, long requesterId )
+        throws IOException
+    {
+        ICacheEvent<String> cacheEvent = createICacheEvent( cacheName, "all", requesterId, ICacheEventLogger.REMOVEALL_EVENT );
+        try
+        {
+            processRemoveAll( cacheName, requesterId );
+        }
+        finally
+        {
+            logICacheEvent( cacheEvent );
+        }
+    }
+
+    /**
+     * Remove all keys from the specified remote cache.
+     * <p>
+     * @param cacheName
+     * @param requesterId
+     * @throws IOException
+     */
+    abstract void processRemoveAll( String cacheName, long requesterId )
+        throws IOException;
+
+    /**
+     * Frees the specified remote cache.
+     * <p>
+     * @param cacheName
+     * @throws IOException
+     */
+    @Override
+    public void dispose( String cacheName )
+        throws IOException
+    {
+        dispose( cacheName, 0 );
+    }
+
+    /**
+     * Frees the specified remote cache.
+     * <p>
+     * @param cacheName
+     * @param requesterId
+     * @throws IOException
+     */
+    public void dispose( String cacheName, long requesterId )
+        throws IOException
+    {
+        ICacheEvent<String> cacheEvent = createICacheEvent( cacheName, "none", requesterId, ICacheEventLogger.DISPOSE_EVENT );
+        try
+        {
+            processDispose( cacheName, requesterId );
+        }
+        finally
+        {
+            logICacheEvent( cacheEvent );
+        }
+    }
+
+    /**
+     * @param cacheName
+     * @param requesterId
+     * @throws IOException
+     */
+    abstract void processDispose( String cacheName, long requesterId )
+        throws IOException;
+
+    /**
+     * Gets the stats attribute of the RemoteCacheServer object.
+     * <p>
+     * @return The stats value
+     * @throws IOException
+     */
+    public String getStats()
+        throws IOException
+    {
+        return cacheManager.getStats();
+    }
+
+    /**
+     * Logs an event if an event logger is configured.
+     * <p>
+     * @param item
+     * @param requesterId
+     * @param eventName
+     * @return ICacheEvent
+     */
+    protected ICacheEvent<ICacheElement<K, V>> createICacheEvent( ICacheElement<K, V> item, long requesterId, String eventName )
+    {
+        if ( cacheEventLogger == null )
+        {
+            return new CacheEvent<ICacheElement<K, V>>();
+        }
+        String ipAddress = getExtraInfoForRequesterId( requesterId );
+        return cacheEventLogger.createICacheEvent( getEventLogSourceName(), item.getCacheName(), eventName, ipAddress,
+                                                   item );
+    }
+
+    /**
+     * Logs an event if an event logger is configured.
+     * <p>
+     * @param cacheName
+     * @param key
+     * @param requesterId
+     * @param eventName
+     * @return ICacheEvent
+     */
+    protected <T extends Serializable> ICacheEvent<T> createICacheEvent( String cacheName, T key, long requesterId, String eventName )
+    {
+        if ( cacheEventLogger == null )
+        {
+            return new CacheEvent<T>();
+        }
+        String ipAddress = getExtraInfoForRequesterId( requesterId );
+        return cacheEventLogger.createICacheEvent( getEventLogSourceName(), cacheName, eventName, ipAddress, key );
+    }
+
+    /**
+     * Logs an event if an event logger is configured.
+     * <p>
+     * @param source
+     * @param eventName
+     * @param optionalDetails
+     */
+    protected void logApplicationEvent( String source, String eventName, String optionalDetails )
+    {
+        if ( cacheEventLogger != null )
+        {
+            cacheEventLogger.logApplicationEvent( source, eventName, optionalDetails );
+        }
+    }
+
+    /**
+     * Logs an event if an event logger is configured.
+     * <p>
+     * @param cacheEvent
+     */
+    protected <T extends Serializable> void logICacheEvent( ICacheEvent<T> cacheEvent )
+    {
+        if ( cacheEventLogger != null )
+        {
+            cacheEventLogger.logICacheEvent( cacheEvent );
+        }
+    }
+
+    /**
+     * Ip address for the client, if one is stored.
+     * <p>
+     * Protected for testing.
+     * <p>
+     * @param requesterId
+     * @return String
+     */
+    protected abstract String getExtraInfoForRequesterId( long requesterId );
+
+    /**
+     * Allows it to be injected.
+     * <p>
+     * @param cacheEventLogger
+     */
+    public void setCacheEventLogger( ICacheEventLogger cacheEventLogger )
+    {
+        this.cacheEventLogger = cacheEventLogger;
+    }
+
+    /**
+     * @param cacheManager the cacheManager to set
+     */
+    protected void setCacheManager( ICompositeCacheManager cacheManager )
+    {
+        this.cacheManager = cacheManager;
+    }
+
+    /**
+     * @return the cacheManager
+     */
+    protected ICompositeCacheManager getCacheManager()
+    {
+        return cacheManager;
+    }
+
+    /**
+     * @param eventLogSourceName the eventLogSourceName to set
+     */
+    protected void setEventLogSourceName( String eventLogSourceName )
+    {
+        this.eventLogSourceName = eventLogSourceName;
+    }
+
+    /**
+     * @return the eventLogSourceName
+     */
+    protected String getEventLogSourceName()
+    {
+        return eventLogSourceName;
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/http/server/RemoteCacheServiceAdaptor.java b/src/org/apache/commons/jcs/auxiliary/remote/http/server/RemoteCacheServiceAdaptor.java
new file mode 100644
index 0000000..63a78f1
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/http/server/RemoteCacheServiceAdaptor.java
@@ -0,0 +1,174 @@
+package org.apache.commons.jcs.auxiliary.remote.http.server;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.remote.value.RemoteCacheRequest;
+import org.apache.commons.jcs.auxiliary.remote.value.RemoteCacheResponse;
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.behavior.ICacheServiceNonLocal;
+import org.apache.commons.jcs.engine.behavior.ICompositeCacheManager;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * The Servlet deserializes the request object. The request object is passed to the processor. The
+ * processor then calls the service which does the work of talking to the cache.
+ * <p>
+ * This is essentially an adaptor on top of the service.
+ */
+public class RemoteCacheServiceAdaptor<K extends Serializable, V extends Serializable>
+{
+    /** The Logger. */
+    private static final Log log = LogFactory.getLog( RemoteCacheServiceAdaptor.class );
+
+    /** The service that does the work. */
+    private ICacheServiceNonLocal<K, V> remoteCacheService;
+
+    /** This is for testing without the factory. */
+    protected RemoteCacheServiceAdaptor()
+    {
+        // for testing.
+    }
+
+    /**
+     * Create a process with a cache manager.
+     * <p>
+     * @param cacheManager
+     */
+    public RemoteCacheServiceAdaptor( ICompositeCacheManager cacheManager )
+    {
+        ICacheServiceNonLocal<K, V> rcs = RemoteHttpCacheSeviceFactory.createRemoteHttpCacheService( cacheManager );
+        setRemoteCacheService( rcs );
+    }
+
+    /**
+     * Processes the request. It will call the appropriate method on the service
+     * <p>
+     * @param request
+     * @return RemoteHttpCacheResponse, never null
+     */
+    @SuppressWarnings( "unchecked" ) // need to cast to correct return type
+    public <T> RemoteCacheResponse<T> processRequest( RemoteCacheRequest<K, V> request )
+    {
+        RemoteCacheResponse<Object> response = new RemoteCacheResponse<Object>();
+
+        if ( request == null )
+        {
+            String message = "The request is null. Cannot process";
+            log.warn( message );
+            response.setSuccess( false );
+            response.setErrorMessage( message );
+        }
+        else
+        {
+            try
+            {
+                switch ( request.getRequestType() )
+                {
+                    case GET:
+                        ICacheElement<K, V> element = getRemoteCacheService().get( request.getCacheName(), request.getKey(),
+                                                                             request.getRequesterId() );
+                        response.setPayload(element);
+                        break;
+                    case GET_MULTIPLE:
+                        Map<K, ICacheElement<K, V>> elementMap = getRemoteCacheService().getMultiple( request.getCacheName(),
+                                                                              request.getKeySet(),
+                                                                              request.getRequesterId() );
+                        if ( elementMap != null )
+                        {
+                            Map<K, ICacheElement<K, V>> map = new HashMap<K, ICacheElement<K,V>>();
+                            map.putAll(elementMap);
+                            response.setPayload(map);
+                        }
+                        break;
+                    case GET_MATCHING:
+                        Map<K, ICacheElement<K, V>> elementMapMatching = getRemoteCacheService().getMatching( request.getCacheName(),
+                                                                                      request.getPattern(),
+                                                                                      request.getRequesterId() );
+                        if ( elementMapMatching != null )
+                        {
+                            Map<K, ICacheElement<K, V>> map = new HashMap<K, ICacheElement<K,V>>();
+                            map.putAll(elementMapMatching);
+                            response.setPayload(map);
+                        }
+                        break;
+                    case REMOVE:
+                        getRemoteCacheService().remove( request.getCacheName(), request.getKey(),
+                                                        request.getRequesterId() );
+                        break;
+                    case REMOVE_ALL:
+                        getRemoteCacheService().removeAll( request.getCacheName(), request.getRequesterId() );
+                        break;
+                    case UPDATE:
+                        getRemoteCacheService().update( request.getCacheElement(), request.getRequesterId() );
+                        break;
+                    case ALIVE_CHECK:
+                        response.setSuccess( true );
+                        break;
+                    case DISPOSE:
+                        response.setSuccess( true );
+                        // DO NOTHING
+                        break;
+                    case GET_KEYSET:
+                        Set<K> keys = getRemoteCacheService().getKeySet( request.getCacheName() );
+                        response.setPayload( keys );
+                        break;
+                    default:
+                        String message = "Unknown event type.  Cannot process " + request;
+                        log.warn( message );
+                        response.setSuccess( false );
+                        response.setErrorMessage( message );
+                        break;
+                }
+            }
+            catch ( IOException e )
+            {
+                String message = "Problem processing request. " + request + " Error: " + e.getMessage();
+                log.error( message, e );
+                response.setSuccess( false );
+                response.setErrorMessage( message );
+            }
+        }
+
+        return (RemoteCacheResponse<T>)response;
+    }
+
+    /**
+     * @param remoteHttpCacheService the remoteHttpCacheService to set
+     */
+    public void setRemoteCacheService( ICacheServiceNonLocal<K, V> remoteHttpCacheService )
+    {
+        this.remoteCacheService = remoteHttpCacheService;
+    }
+
+    /**
+     * @return the remoteHttpCacheService
+     */
+    public ICacheServiceNonLocal<K, V> getRemoteCacheService()
+    {
+        return remoteCacheService;
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/http/server/RemoteHttpCacheServerAttributes.java b/src/org/apache/commons/jcs/auxiliary/remote/http/server/RemoteHttpCacheServerAttributes.java
new file mode 100644
index 0000000..8b80bcb
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/http/server/RemoteHttpCacheServerAttributes.java
@@ -0,0 +1,115 @@
+package org.apache.commons.jcs.auxiliary.remote.http.server;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.AbstractAuxiliaryCacheAttributes;
+import org.apache.commons.jcs.auxiliary.AuxiliaryCacheAttributes;
+
+/**
+ * Configuration for the RemoteHttpCacheServer. Most of these properties are used only by the
+ * service.
+ */
+public class RemoteHttpCacheServerAttributes
+    extends AbstractAuxiliaryCacheAttributes
+{
+    /** Don't change. */
+    private static final long serialVersionUID = -3987239306108780496L;
+
+    /** Can a cluster remote put to other remotes */
+    private boolean localClusterConsistency = true;
+
+    /** Can a cluster remote get from other remotes */
+    private boolean allowClusterGet = true;
+
+    /**
+     * clones
+     * <p>
+     * @return AuxiliaryCacheAttributes clone
+     */
+    @Override
+    public AuxiliaryCacheAttributes copy()
+    {
+        try
+        {
+            return (AuxiliaryCacheAttributes) this.clone();
+        }
+        catch ( Exception e )
+        {
+            // swallow
+        }
+        return this;
+    }
+
+    /**
+     * Should cluster updates be propagated to the locals
+     * <p>
+     * @return The localClusterConsistency value
+     */
+    public boolean isLocalClusterConsistency()
+    {
+        return localClusterConsistency;
+    }
+
+    /**
+     * Should cluster updates be propagated to the locals
+     * <p>
+     * @param r The new localClusterConsistency value
+     */
+    public void setLocalClusterConsistency( boolean r )
+    {
+        this.localClusterConsistency = r;
+    }
+
+    /**
+     * Should gets from non-cluster clients be allowed to get from other remote auxiliaries.
+     * <p>
+     * @return The localClusterConsistency value
+     */
+    public boolean isAllowClusterGet()
+    {
+        return allowClusterGet;
+    }
+
+    /**
+     * Should we try to get from other cluster servers if we don't find the items locally.
+     * <p>
+     * @param r The new localClusterConsistency value
+     */
+    public void setAllowClusterGet( boolean r )
+    {
+        allowClusterGet = r;
+    }
+
+    /**
+     * @return String details
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder buf = new StringBuilder();
+        buf.append( "\nRemoteHttpCacheServiceAttributes" );
+        buf.append( "\n cacheName = [" + this.getCacheName() + "]" );
+        buf.append( "\n allowClusterGet = [" + this.isAllowClusterGet() + "]" );
+        buf.append( "\n localClusterConsistency = [" + this.isLocalClusterConsistency() + "]" );
+        buf.append( "\n eventQueueType = [" + this.getEventQueueType() + "]" );
+        buf.append( "\n eventQueuePoolName = [" + this.getEventQueuePoolName() + "]" );
+        return buf.toString();
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/http/server/RemoteHttpCacheService.java b/src/org/apache/commons/jcs/auxiliary/remote/http/server/RemoteHttpCacheService.java
new file mode 100644
index 0000000..5c89014
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/http/server/RemoteHttpCacheService.java
@@ -0,0 +1,270 @@
+package org.apache.commons.jcs.auxiliary.remote.http.server;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.behavior.ICompositeCacheManager;
+import org.apache.commons.jcs.engine.control.CompositeCache;
+import org.apache.commons.jcs.engine.logging.behavior.ICacheEventLogger;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * This does the work. It's called by the processor. The base class wraps the processing calls in
+ * event logs, if an event logger is present.
+ * <p>
+ * For now we assume that all clients are non-cluster clients. And listener notification is not
+ * supported.
+ */
+public class RemoteHttpCacheService<K extends Serializable, V extends Serializable>
+    extends AbstractRemoteCacheService<K, V>
+{
+    /** The name used in the event logs. */
+    private static final String EVENT_LOG_SOURCE_NAME = "RemoteHttpCacheServer";
+
+    /** The configuration */
+    private final RemoteHttpCacheServerAttributes remoteHttpCacheServerAttributes;
+
+    /**
+     * Create a process with a cache manager.
+     * <p>
+     * @param cacheManager
+     * @param remoteHttpCacheServerAttributes
+     * @param cacheEventLogger
+     */
+    public RemoteHttpCacheService( ICompositeCacheManager cacheManager,
+                                   RemoteHttpCacheServerAttributes remoteHttpCacheServerAttributes,
+                                   ICacheEventLogger cacheEventLogger )
+    {
+        super( cacheManager, cacheEventLogger );
+        setEventLogSourceName( EVENT_LOG_SOURCE_NAME );
+        this.remoteHttpCacheServerAttributes = remoteHttpCacheServerAttributes;
+    }
+
+    /**
+     * Processes a get request.
+     * <p>
+     * If isAllowClusterGet is enabled we will treat this as a normal request or non-remote origins.
+     * <p>
+     * @param cacheName
+     * @param key
+     * @param requesterId
+     * @return ICacheElement
+     * @throws IOException
+     */
+    @Override
+    public ICacheElement<K, V> processGet( String cacheName, K key, long requesterId )
+        throws IOException
+    {
+        CompositeCache<K, V> cache = getCacheManager().getCache( cacheName );
+
+        boolean keepLocal = !remoteHttpCacheServerAttributes.isAllowClusterGet();
+        if ( keepLocal )
+        {
+            return cache.localGet( key );
+        }
+        else
+        {
+            return cache.get( key );
+        }
+    }
+
+    /**
+     * Processes a get request.
+     * <p>
+     * If isAllowClusterGet is enabled we will treat this as a normal request of non-remote
+     * origination.
+     * <p>
+     * @param cacheName
+     * @param keys
+     * @param requesterId
+     * @return Map
+     * @throws IOException
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> processGetMultiple( String cacheName, Set<K> keys, long requesterId )
+        throws IOException
+    {
+        CompositeCache<K, V> cache = getCacheManager().getCache( cacheName );
+
+        boolean keepLocal = !remoteHttpCacheServerAttributes.isAllowClusterGet();
+        if ( keepLocal )
+        {
+            return cache.localGetMultiple( keys );
+        }
+        else
+        {
+            return cache.getMultiple( keys );
+        }
+    }
+
+    /**
+     * Processes a get request.
+     * <p>
+     * If isAllowClusterGet is enabled we will treat this as a normal request of non-remote
+     * origination.
+     * <p>
+     * @param cacheName
+     * @param pattern
+     * @param requesterId
+     * @return Map
+     * @throws IOException
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> processGetMatching( String cacheName, String pattern, long requesterId )
+        throws IOException
+    {
+        CompositeCache<K, V> cache = getCacheManager().getCache( cacheName );
+
+        boolean keepLocal = !remoteHttpCacheServerAttributes.isAllowClusterGet();
+        if ( keepLocal )
+        {
+            return cache.localGetMatching( pattern );
+        }
+        else
+        {
+            return cache.getMatching( pattern );
+        }
+    }
+
+    /**
+     * Processes an update request.
+     * <p>
+     * If isLocalClusterConsistency is enabled we will treat this as a normal request of non-remote
+     * origination.
+     * <p>
+     * @param item
+     * @param requesterId
+     * @throws IOException
+     */
+    @Override
+    public void processUpdate( ICacheElement<K, V> item, long requesterId )
+        throws IOException
+    {
+        CompositeCache<K, V> cache = getCacheManager().getCache( item.getCacheName() );
+
+        boolean keepLocal = !remoteHttpCacheServerAttributes.isLocalClusterConsistency();
+        if ( keepLocal )
+        {
+            cache.localUpdate( item );
+        }
+        else
+        {
+            cache.update( item );
+        }
+    }
+
+    /**
+     * Processes a remove request.
+     * <p>
+     * If isLocalClusterConsistency is enabled we will treat this as a normal request of non-remote
+     * origination.
+     * <p>
+     * @param cacheName
+     * @param key
+     * @param requesterId
+     * @throws IOException
+     */
+    @Override
+    public void processRemove( String cacheName, K key, long requesterId )
+        throws IOException
+    {
+        CompositeCache<K, V> cache = getCacheManager().getCache( cacheName );
+
+        boolean keepLocal = !remoteHttpCacheServerAttributes.isLocalClusterConsistency();
+        if ( keepLocal )
+        {
+            cache.localRemove( key );
+        }
+        else
+        {
+            cache.remove( key );
+        }
+    }
+
+    /**
+     * Processes a removeAll request.
+     * <p>
+     * If isLocalClusterConsistency is enabled we will treat this as a normal request of non-remote
+     * origination.
+     * <p>
+     * @param cacheName
+     * @param requesterId
+     * @throws IOException
+     */
+    @Override
+    public void processRemoveAll( String cacheName, long requesterId )
+        throws IOException
+    {
+        CompositeCache<K, V> cache = getCacheManager().getCache( cacheName );
+
+        boolean keepLocal = !remoteHttpCacheServerAttributes.isLocalClusterConsistency();
+        if ( keepLocal )
+        {
+            cache.localRemoveAll();
+        }
+        else
+        {
+            cache.removeAll();
+        }
+    }
+
+    /**
+     * Processes a shutdown request.
+     * <p>
+     * @param cacheName
+     * @param requesterId
+     * @throws IOException
+     */
+    @Override
+    public void processDispose( String cacheName, long requesterId )
+        throws IOException
+    {
+        CompositeCache<K, V> cache = getCacheManager().getCache( cacheName );
+        cache.dispose();
+    }
+
+    /**
+     * This general method should be deprecated.
+     * <p>
+     * @throws IOException
+     */
+    @Override
+    public void release()
+        throws IOException
+    {
+        //nothing.
+    }
+
+    /**
+     * This is called by the event log.
+     * <p>
+     * @param requesterId
+     * @return requesterId + ""
+     */
+    @Override
+    protected String getExtraInfoForRequesterId( long requesterId )
+    {
+        return requesterId + "";
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/http/server/RemoteHttpCacheServlet.java b/src/org/apache/commons/jcs/auxiliary/remote/http/server/RemoteHttpCacheServlet.java
new file mode 100644
index 0000000..ed7946d
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/http/server/RemoteHttpCacheServlet.java
@@ -0,0 +1,264 @@
+package org.apache.commons.jcs.auxiliary.remote.http.server;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.access.exception.CacheException;
+import org.apache.commons.jcs.auxiliary.remote.value.RemoteCacheRequest;
+import org.apache.commons.jcs.auxiliary.remote.value.RemoteCacheResponse;
+import org.apache.commons.jcs.engine.control.CompositeCacheManager;
+import org.apache.commons.jcs.io.ObjectInputStreamClassLoaderAware;
+import org.apache.commons.jcs.utils.serialization.StandardSerializer;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.io.OutputStream;
+import java.io.Serializable;
+
+/**
+ * This servlet simply reads and writes objects. The requests are packaged in a general wrapper. The
+ * processor works on the wrapper object and returns a response wrapper.
+ */
+public class RemoteHttpCacheServlet
+    extends HttpServlet
+{
+    /** Don't change. */
+    private static final long serialVersionUID = 8752849397531933346L;
+
+    /** The Logger. */
+    private static final Log log = LogFactory.getLog( RemoteHttpCacheServlet.class );
+
+    /** The cache manager */
+    private static CompositeCacheManager cacheMgr;
+
+    /** Processes requests */
+    private RemoteCacheServiceAdaptor<Serializable, Serializable> remoteHttpCacheServiceAdaptor;
+
+    /** This needs to be standard, since the other side is standard */
+    private final StandardSerializer serializer = new StandardSerializer();
+
+    /** Number of service calls. */
+    private int serviceCalls = 0;
+
+    /** The interval at which we will log the count. */
+    private final int logInterval = 100;
+
+    /**
+     * Initializes the cache.
+     * <p>
+     * This provides an easy extension point. Simply extend this servlet and override the init
+     * method to change the way the properties are loaded.
+     * @param config
+     * @throws ServletException
+     */
+    @Override
+    public void init( ServletConfig config )
+        throws ServletException
+    {
+        try
+        {
+            ensureCacheManager();
+        }
+        catch (CacheException e)
+        {
+            throw new ServletException(e);
+        }
+
+        setRemoteHttpCacheServiceAdaptor( new RemoteCacheServiceAdaptor<Serializable, Serializable>( cacheMgr ) );
+
+        super.init( config );
+    }
+
+    /**
+     * Read the request, call the processor, write the response.
+     * <p>
+     * @param request
+     * @param response
+     * @throws ServletException
+     * @throws IOException
+     */
+    @Override
+    public void service( HttpServletRequest request, HttpServletResponse response )
+        throws ServletException, IOException
+    {
+        incrementServiceCallCount();
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Servicing a request. " + request );
+        }
+
+        RemoteCacheRequest<Serializable, Serializable> remoteRequest = readRequest( request );
+        RemoteCacheResponse<Serializable> cacheResponse =
+            getRemoteHttpCacheServiceAdaptor().processRequest( remoteRequest );
+
+        writeResponse( response, cacheResponse );
+    }
+
+    /**
+     * Read the request from the input stream.
+     * <p>
+     * @param request
+     * @return RemoteHttpCacheRequest
+     */
+    protected RemoteCacheRequest<Serializable, Serializable> readRequest( HttpServletRequest request )
+    {
+        RemoteCacheRequest<Serializable, Serializable> remoteRequest = null;
+        try
+        {
+            InputStream inputStream = request.getInputStream();
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "After getting input stream and before reading it" );
+            }
+
+            remoteRequest = readRequestFromStream( inputStream );
+        }
+        catch ( Exception e )
+        {
+            log.error( "Could not get a RemoteHttpCacheRequest object from the input stream.", e );
+        }
+        return remoteRequest;
+    }
+
+    /**
+     * Reads the response from the stream and then closes it.
+     * <p>
+     * @param inputStream
+     * @return RemoteHttpCacheRequest
+     * @throws IOException
+     * @throws ClassNotFoundException
+     */
+    protected RemoteCacheRequest<Serializable, Serializable> readRequestFromStream( InputStream inputStream )
+        throws IOException, ClassNotFoundException
+    {
+        ObjectInputStream ois = new ObjectInputStreamClassLoaderAware( inputStream, null );
+
+        @SuppressWarnings("unchecked") // Need to cast from Object
+        RemoteCacheRequest<Serializable, Serializable> remoteRequest
+            = (RemoteCacheRequest<Serializable, Serializable>) ois.readObject();
+        ois.close();
+        return remoteRequest;
+    }
+
+    /**
+     * Write the response to the output stream.
+     * <p>
+     * @param response
+     * @param cacheResponse
+     */
+    protected void writeResponse( HttpServletResponse response, RemoteCacheResponse<Serializable> cacheResponse )
+    {
+        try
+        {
+            response.setContentType( "application/octet-stream" );
+
+            byte[] responseAsByteAray = serializer.serialize( cacheResponse );
+            response.setContentLength( responseAsByteAray.length );
+
+            OutputStream outputStream = response.getOutputStream();
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Opened output stream.  Response size: " + responseAsByteAray.length );
+            }
+            // WRITE
+            outputStream.write( responseAsByteAray );
+            outputStream.flush();
+            outputStream.close();
+        }
+        catch ( Exception e )
+        {
+            log.error( "Problem writing response. " + cacheResponse, e );
+        }
+    }
+
+    /**
+     * Log some details.
+     */
+    private void incrementServiceCallCount()
+    {
+        // not thread safe, but it doesn't have to be accurate
+        serviceCalls++;
+        if ( log.isInfoEnabled() )
+        {
+            if ( serviceCalls % logInterval == 0 )
+            {
+                log.info( "serviceCalls = " + serviceCalls );
+            }
+        }
+    }
+
+    /**
+     * Make sure we have a cache manager. This should have happened in the init method.
+     *
+     * @throws CacheException if the configuration cannot be loaded
+     */
+    protected synchronized void ensureCacheManager() throws CacheException
+    {
+        if ( cacheMgr == null || !cacheMgr.isInitialized() )
+        {
+            cacheMgr = CompositeCacheManager.getInstance();
+        }
+    }
+
+    /** Release the cache manager. */
+    @Override
+    public void destroy()
+    {
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "Servlet Destroyed, shutting down JCS." );
+        }
+        cacheMgr.shutDown();
+    }
+
+    /**
+     * Get servlet information
+     * <p>
+     * @return basic info
+     */
+    @Override
+    public String getServletInfo()
+    {
+        return "RemoteHttpCacheServlet";
+    }
+
+    /**
+     * @param remoteHttpCacheProcessor the remoteHttpCacheProcessor to set
+     */
+    public void setRemoteHttpCacheServiceAdaptor( RemoteCacheServiceAdaptor<Serializable, Serializable> remoteHttpCacheProcessor )
+    {
+        this.remoteHttpCacheServiceAdaptor = remoteHttpCacheProcessor;
+    }
+
+    /**
+     * @return the remoteHttpCacheProcessor
+     */
+    public RemoteCacheServiceAdaptor<Serializable, Serializable> getRemoteHttpCacheServiceAdaptor()
+    {
+        return remoteHttpCacheServiceAdaptor;
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/http/server/RemoteHttpCacheSeviceFactory.java b/src/org/apache/commons/jcs/auxiliary/remote/http/server/RemoteHttpCacheSeviceFactory.java
new file mode 100644
index 0000000..af18ed8
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/http/server/RemoteHttpCacheSeviceFactory.java
@@ -0,0 +1,91 @@
+package org.apache.commons.jcs.auxiliary.remote.http.server;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.AuxiliaryCacheConfigurator;
+import org.apache.commons.jcs.auxiliary.remote.http.behavior.IRemoteHttpCacheConstants;
+import org.apache.commons.jcs.engine.behavior.ICompositeCacheManager;
+import org.apache.commons.jcs.engine.logging.behavior.ICacheEventLogger;
+import org.apache.commons.jcs.utils.config.PropertySetter;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.Serializable;
+import java.util.Properties;
+
+/** Creates the server. */
+public class RemoteHttpCacheSeviceFactory
+{
+    /** The logger */
+    private static final Log log = LogFactory.getLog( RemoteHttpCacheSeviceFactory.class );
+
+    /**
+     * Configures the attributes and the event logger and constructs a service.
+     * <p>
+     * @param cacheManager
+     * @return RemoteHttpCacheService
+     */
+    public static <K extends Serializable, V extends Serializable> RemoteHttpCacheService<K, V> createRemoteHttpCacheService( ICompositeCacheManager cacheManager )
+    {
+        Properties props = cacheManager.getConfigurationProperties();
+        ICacheEventLogger cacheEventLogger = configureCacheEventLogger( props );
+        RemoteHttpCacheServerAttributes attributes = configureRemoteHttpCacheServerAttributes( props );
+
+        RemoteHttpCacheService<K, V> service = new RemoteHttpCacheService<K, V>( cacheManager, attributes, cacheEventLogger );
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "Created new RemoteHttpCacheService " + service );
+        }
+        return service;
+    }
+
+    /**
+     * Tries to get the event logger.
+     * <p>
+     * @param props
+     * @return ICacheEventLogger
+     */
+    protected static ICacheEventLogger configureCacheEventLogger( Properties props )
+    {
+        ICacheEventLogger cacheEventLogger = AuxiliaryCacheConfigurator
+            .parseCacheEventLogger( props, IRemoteHttpCacheConstants.HTTP_CACHE_SERVER_PREFIX );
+
+        return cacheEventLogger;
+    }
+
+    /**
+     * Configure.
+     * <p>
+     * jcs.remotehttpcache.serverattributes.ATTRIBUTENAME=ATTRIBUTEVALUE
+     * <p>
+     * @param prop
+     * @return RemoteCacheServerAttributesconfigureRemoteCacheServerAttributes
+     */
+    protected static RemoteHttpCacheServerAttributes configureRemoteHttpCacheServerAttributes( Properties prop )
+    {
+        RemoteHttpCacheServerAttributes rcsa = new RemoteHttpCacheServerAttributes();
+
+        // configure automatically
+        PropertySetter.setProperties( rcsa, prop,
+                                      IRemoteHttpCacheConstants.HTTP_CACHE_SERVER_ATTRIBUTES_PROPERTY_PREFIX + "." );
+
+        return rcsa;
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/package.html b/src/org/apache/commons/jcs/auxiliary/remote/package.html
new file mode 100644
index 0000000..e002b4e
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/package.html
@@ -0,0 +1,25 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<html>
+  <head>
+  </head>
+  <body>
+    Root package for the remote auxiliary cache.
+  </body>
+</html>
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/server/RegistryKeepAliveRunner.java b/src/org/apache/commons/jcs/auxiliary/remote/server/RegistryKeepAliveRunner.java
new file mode 100644
index 0000000..0949c83
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/server/RegistryKeepAliveRunner.java
@@ -0,0 +1,189 @@
+package org.apache.commons.jcs.auxiliary.remote.server;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.remote.RemoteUtils;
+import org.apache.commons.jcs.engine.logging.behavior.ICacheEventLogger;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.rmi.Naming;
+import java.rmi.RemoteException;
+import java.rmi.registry.Registry;
+
+/**
+ * This class tries to keep the registry alive. If if is able to create a registry, it will also
+ * rebind the remote cache server.
+ */
+public class RegistryKeepAliveRunner
+    implements Runnable
+{
+    /** The logger */
+    private static final Log log = LogFactory.getLog( RegistryKeepAliveRunner.class );
+
+    /** The URL of the service to look for. */
+    private String namingURL;
+
+    /** the port on which to start the registry */
+    private int registryPort;
+
+    /** An optional event logger */
+    private ICacheEventLogger cacheEventLogger;
+
+    /**
+     * @param registryHost - Hostname of the registry
+     * @param registryPort - the port on which to start the registry
+     * @param serviceName
+     */
+    public RegistryKeepAliveRunner( String registryHost, int registryPort, String serviceName )
+    {
+        this.namingURL = RemoteUtils.getNamingURL(registryHost, registryPort, serviceName);
+        this.registryPort = registryPort;
+    }
+
+    /**
+     * Tries to lookup the server. If unsuccessful it will rebind the server using the factory
+     * rebind method.
+     * <p>
+     */
+    @Override
+    public void run()
+    {
+        checkAndRestoreIfNeeded();
+    }
+
+    /**
+     * Tries to lookup the server. If unsuccessful it will rebind the server using the factory
+     * rebind method.
+     */
+    protected void checkAndRestoreIfNeeded()
+    {
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "looking up server " + namingURL );
+        }
+        try
+        {
+            Object obj = Naming.lookup( namingURL );
+
+            // Successful connection to the remote server.
+            String message = "RMI registry looks fine.  Found [" + obj + "] in registry [" + namingURL + "]";
+            if ( cacheEventLogger != null )
+            {
+                cacheEventLogger.logApplicationEvent( "RegistryKeepAliveRunner", "Naming.lookup", message );
+            }
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( message );
+            }
+            obj = null;
+        }
+        catch ( Exception ex )
+        {
+            // Failed to connect to the remote server.
+            String message = "Problem finding server at [" + namingURL
+                + "].  Will attempt to start registry and rebind.";
+            log.error( message, ex );
+            if ( cacheEventLogger != null )
+            {
+                cacheEventLogger.logError( "RegistryKeepAliveRunner", "Naming.lookup", message + ":" + ex.getMessage() );
+            }
+            createAndRegister( namingURL );
+        }
+    }
+
+    /**
+     * Creates the registry and registers the server.
+     * <p>
+     * @param registry
+     */
+    protected void createAndRegister( String registry )
+    {
+        createReqistry( registry );
+        registerServer( registry );
+    }
+
+    /**
+     * Try to create the registry. Log errors
+     * <p>
+     * @param registry
+     */
+    protected void createReqistry( String registry )
+    {
+        Registry reg = RemoteUtils.createRegistry(registryPort);
+
+        if ( cacheEventLogger != null )
+        {
+            if (reg != null)
+            {
+                cacheEventLogger.logApplicationEvent( "RegistryKeepAliveRunner", "createRegistry",
+                        "Successfully created registry [" + registry + "]." );
+            }
+            else
+            {
+                cacheEventLogger.logError( "RegistryKeepAliveRunner", "createRegistry",
+                        "Could not start registry [" + registry + "]." );
+            }
+        }
+    }
+
+    /**
+     * Try to rebind the server.
+     * <p>
+     * @param registry
+     */
+    protected void registerServer( String registry )
+    {
+        try
+        {
+            // try to rebind anyway
+            RemoteCacheServerFactory.registerServer( registry, RemoteCacheServerFactory.getRemoteCacheServer() );
+            String message = "Successfully rebound server to registry [" + registry + "].";
+            if ( cacheEventLogger != null )
+            {
+                cacheEventLogger.logApplicationEvent( "RegistryKeepAliveRunner", "registerServer", message );
+            }
+            if ( log.isInfoEnabled() )
+            {
+                log.info( message );
+            }
+        }
+        catch ( RemoteException e )
+        {
+            String message = "Could not rebind server to registry [" + registry + "].";
+            log.error( message, e );
+            if ( cacheEventLogger != null )
+            {
+                cacheEventLogger.logError( "RegistryKeepAliveRunner", "registerServer", message + ":"
+                    + e.getMessage() );
+            }
+        }
+    }
+
+    /**
+     * Allows it to be injected.
+     * <p>
+     * @param cacheEventLogger
+     */
+    public void setCacheEventLogger( ICacheEventLogger cacheEventLogger )
+    {
+        this.cacheEventLogger = cacheEventLogger;
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/server/RemoteCacheServer.java b/src/org/apache/commons/jcs/auxiliary/remote/server/RemoteCacheServer.java
new file mode 100644
index 0000000..0c93d66
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/server/RemoteCacheServer.java
@@ -0,0 +1,1725 @@
+package org.apache.commons.jcs.auxiliary.remote.server;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.rmi.RemoteException;
+import java.rmi.registry.Registry;
+import java.rmi.server.RMISocketFactory;
+import java.rmi.server.UnicastRemoteObject;
+import java.rmi.server.Unreferenced;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.commons.jcs.access.exception.CacheException;
+import org.apache.commons.jcs.auxiliary.remote.behavior.IRemoteCacheListener;
+import org.apache.commons.jcs.auxiliary.remote.server.behavior.IRemoteCacheServer;
+import org.apache.commons.jcs.auxiliary.remote.server.behavior.IRemoteCacheServerAttributes;
+import org.apache.commons.jcs.auxiliary.remote.server.behavior.RemoteType;
+import org.apache.commons.jcs.engine.CacheEventQueueFactory;
+import org.apache.commons.jcs.engine.CacheListeners;
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.behavior.ICacheEventQueue;
+import org.apache.commons.jcs.engine.behavior.ICacheListener;
+import org.apache.commons.jcs.engine.control.CompositeCache;
+import org.apache.commons.jcs.engine.control.CompositeCacheManager;
+import org.apache.commons.jcs.engine.logging.CacheEvent;
+import org.apache.commons.jcs.engine.logging.behavior.ICacheEvent;
+import org.apache.commons.jcs.engine.logging.behavior.ICacheEventLogger;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * This class provides remote cache services. The remote cache server propagates events from local
+ * caches to other local caches. It can also store cached data, making it available to new clients.
+ * <p>
+ * Remote cache servers can be clustered. If the cache used by this remote cache is configured to
+ * use a remote cache of type cluster, the two remote caches will communicate with each other.
+ * Remote and put requests can be sent from one remote to another. If they are configured to
+ * broadcast such event to their client, then remove an puts can be sent to all locals in the
+ * cluster.
+ * <p>
+ * Get requests are made between clustered servers if AllowClusterGet is true. You can setup several
+ * clients to use one remote server and several to use another. The get local will be distributed
+ * between the two servers. Since caches are usually high get and low put, this should allow you to
+ * scale.
+ */
+public class RemoteCacheServer<K, V>
+    extends UnicastRemoteObject
+    implements IRemoteCacheServer<K, V>, Unreferenced
+{
+    /** For serialization. Don't change. */
+    private static final long serialVersionUID = -8072345435941473116L;
+
+    /** log instance */
+    private static final Log log = LogFactory.getLog( RemoteCacheServer.class );
+
+    /** timing -- if we should record operation times. */
+    private static final boolean timing = true;
+
+    /** Number of puts into the cache. */
+    private int puts = 0;
+
+    /** Maps cache name to CacheListeners object. association of listeners (regions). */
+    private final Map<String, CacheListeners<K, V>> cacheListenersMap =
+        new ConcurrentHashMap<String, CacheListeners<K, V>>();
+
+    /** maps cluster listeners to regions. */
+    private final Map<String, CacheListeners<K, V>> clusterListenersMap =
+        new ConcurrentHashMap<String, CacheListeners<K, V>>();
+
+    /** The central hub */
+    private transient CompositeCacheManager cacheManager;
+
+    /** relates listener id with a type */
+    private final Map<Long, RemoteType> idTypeMap = new ConcurrentHashMap<Long, RemoteType>();
+
+    /** relates listener id with an ip address */
+    private final Map<Long, String> idIPMap = new ConcurrentHashMap<Long, String>();
+
+    /** Used to get the next listener id. */
+    private final int[] listenerId = new int[1];
+
+    /** Configuration settings. */
+    // package protected for access by unit test code
+    final IRemoteCacheServerAttributes remoteCacheServerAttributes;
+
+    /** The interval at which we will log updates. */
+    private final int logInterval = 100;
+
+    /** An optional event logger */
+    private transient ICacheEventLogger cacheEventLogger;
+
+    /**
+     * Constructor for the RemoteCacheServer object. This initializes the server with the values
+     * from the config file.
+     * <p>
+     * @param rcsa
+     * @throws RemoteException
+     */
+    protected RemoteCacheServer( IRemoteCacheServerAttributes rcsa )
+        throws RemoteException
+    {
+        super( rcsa.getServicePort() );
+        this.remoteCacheServerAttributes = rcsa;
+        init( rcsa.getConfigFileName() );
+    }
+
+    /**
+     * Constructor for the RemoteCacheServer object. This initializes the server with the values
+     * from the config file.
+     * <p>
+     * @param rcsa
+     * @param customRMISocketFactory
+     * @throws RemoteException
+     */
+    protected RemoteCacheServer( IRemoteCacheServerAttributes rcsa, RMISocketFactory customRMISocketFactory )
+        throws RemoteException
+    {
+        super( rcsa.getServicePort(), customRMISocketFactory, customRMISocketFactory );
+        this.remoteCacheServerAttributes = rcsa;
+        init( rcsa.getConfigFileName() );
+    }
+
+    /**
+     * Initialize the RMI Cache Server from a properties file.
+     * <p>
+     * @param prop
+     * @throws RemoteException if the configuration of the cache manager instance fails
+     */
+    private void init( String prop ) throws RemoteException
+    {
+        try
+        {
+            cacheManager = createCacheManager( prop );
+        }
+        catch (CacheException e)
+        {
+            throw new RemoteException(e.getMessage(), e);
+        }
+
+        // cacheManager would have created a number of ICache objects.
+        // Use these objects to set up the cacheListenersMap.
+        String[] list = cacheManager.getCacheNames();
+        for ( int i = 0; i < list.length; i++ )
+        {
+            String name = list[i];
+            CompositeCache<K, V> cache = cacheManager.getCache( name );
+            cacheListenersMap.put( name, new CacheListeners<K, V>( cache ) );
+        }
+    }
+
+    /**
+     * Subclass can override this method to create the specific cache manager.
+     * <p>
+     * @param prop The name of the configuration file.
+     * @return The cache hub configured with this configuration file.
+     *
+     * @throws CacheException if the configuration cannot be loaded
+     */
+    private CompositeCacheManager createCacheManager( String prop ) throws CacheException
+    {
+        CompositeCacheManager hub = CompositeCacheManager.getUnconfiguredInstance();
+
+        if ( prop == null )
+        {
+            hub.configure( "/remote.cache.ccf" );
+        }
+        else
+        {
+            hub.configure( prop );
+        }
+        return hub;
+    }
+
+    /**
+     * Puts a cache bean to the remote cache and notifies all listeners which <br>
+     * <ol>
+     * <li>have a different listener id than the originating host; <li>are currently subscribed to
+     * the related cache.
+     * </ol>
+     * <p>
+     * @param item
+     * @throws IOException
+     */
+    public void put( ICacheElement<K, V> item )
+        throws IOException
+    {
+        update( item );
+    }
+
+    /**
+     * @param item
+     * @throws IOException
+     */
+    @Override
+    public void update( ICacheElement<K, V> item )
+        throws IOException
+    {
+        update( item, 0 );
+    }
+
+    /**
+     * The internal processing is wrapped in event logging calls.
+     * <p>
+     * @param item
+     * @param requesterId
+     * @throws IOException
+     */
+    @Override
+    public void update( ICacheElement<K, V> item, long requesterId )
+        throws IOException
+    {
+        ICacheEvent<ICacheElement<K, V>> cacheEvent = createICacheEvent( item, requesterId, ICacheEventLogger.UPDATE_EVENT );
+        try
+        {
+            processUpdate( item, requesterId );
+        }
+        finally
+        {
+            logICacheEvent( cacheEvent );
+        }
+    }
+
+    /**
+     * An update can come from either a local cache's remote auxiliary, or it can come from a remote
+     * server. A remote server is considered a a source of type cluster.
+     * <p>
+     * If the update came from a cluster, then we should tell the cache manager that this was a
+     * remote put. This way, any lateral and remote auxiliaries configured for the region will not
+     * be updated. This is basically how a remote listener works when plugged into a local cache.
+     * <p>
+     * If the cluster is configured to keep local cluster consistency, then all listeners will be
+     * updated. This allows cluster server A to update cluster server B and then B to update its
+     * clients if it is told to keep local cluster consistency. Otherwise, server A will update
+     * server B and B will not tell its clients. If you cluster using lateral caches for instance,
+     * this is how it will work. Updates to a cluster node, will never get to the leaves. The remote
+     * cluster, with local cluster consistency, allows you to update leaves. This basically allows
+     * you to have a failover remote server.
+     * <p>
+     * Since currently a cluster will not try to get from other cluster servers, you can scale a bit
+     * with a cluster configuration. Puts and removes will be broadcasted to all clients, but the
+     * get load on a remote server can be reduced.
+     * <p>
+     * @param item
+     * @param requesterId
+     */
+    private void processUpdate( ICacheElement<K, V> item, long requesterId )
+    {
+        long start = 0;
+        if ( timing )
+        {
+            start = System.currentTimeMillis();
+        }
+
+        logUpdateInfo( item );
+
+        try
+        {
+            CacheListeners<K, V> cacheDesc = getCacheListeners( item.getCacheName() );
+            /* Object val = */item.getVal();
+
+            boolean fromCluster = isRequestFromCluster( requesterId );
+
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "In update, requesterId = [" + requesterId + "] fromCluster = " + fromCluster );
+            }
+
+            // ordered cache item update and notification.
+            synchronized ( cacheDesc )
+            {
+                try
+                {
+                    CompositeCache<K, V> c = (CompositeCache<K, V>) cacheDesc.cache;
+
+                    // If the source of this request was not from a cluster,
+                    // then consider it a local update. The cache manager will
+                    // try to
+                    // update all auxiliaries.
+                    //
+                    // This requires that two local caches not be connected to
+                    // two clustered remote caches. The failover runner will
+                    // have to make sure of this. ALos, the local cache needs
+                    // avoid updating this source. Will need to pass the source
+                    // id somehow. The remote cache should update all local
+                    // caches
+                    // but not update the cluster source. Cluster remote caches
+                    // should only be updated by the server and not the
+                    // RemoteCache.
+                    if ( fromCluster )
+                    {
+                        if ( log.isDebugEnabled() )
+                        {
+                            log.debug( "Put FROM cluster, NOT updating other auxiliaries for region. "
+                                + " requesterId [" + requesterId + "]" );
+                        }
+                        c.localUpdate( item );
+                    }
+                    else
+                    {
+                        if ( log.isDebugEnabled() )
+                        {
+                            log.debug( "Put NOT from cluster, updating other auxiliaries for region. "
+                                + " requesterId [" + requesterId + "]" );
+                        }
+                        c.update( item );
+                    }
+                }
+                catch ( Exception ce )
+                {
+                    // swallow
+                    if ( log.isInfoEnabled() )
+                    {
+                        log.info( "Exception caught updating item. requesterId [" + requesterId + "] "
+                            + ce.getMessage() );
+                    }
+                }
+
+                // UPDATE LOCALS IF A REQUEST COMES FROM A CLUSTER
+                // IF LOCAL CLUSTER CONSISTENCY IS CONFIGURED
+                if ( !fromCluster || ( fromCluster && remoteCacheServerAttributes.isLocalClusterConsistency() ) )
+                {
+                    ICacheEventQueue<K, V>[] qlist = getEventQList( cacheDesc, requesterId );
+                    if ( log.isDebugEnabled() )
+                    {
+                        log.debug( "qlist.length = " + qlist.length );
+                    }
+                    for ( int i = 0; i < qlist.length; i++ )
+                    {
+                        qlist[i].addPutEvent( item );
+                    }
+                }
+            }
+        }
+        catch ( IOException e )
+        {
+            if ( cacheEventLogger != null )
+            {
+                cacheEventLogger.logError( "RemoteCacheServer", ICacheEventLogger.UPDATE_EVENT, e.getMessage()
+                    + " REGION: " + item.getCacheName() + " ITEM: " + item );
+            }
+
+            log.error( "Trouble in Update. requesterId [" + requesterId + "]", e );
+        }
+
+        // TODO use JAMON for timing
+        if ( timing )
+        {
+            long end = System.currentTimeMillis();
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "put took " + String.valueOf( end - start ) + " ms." );
+            }
+        }
+    }
+
+    /**
+     * Log some details.
+     * <p>
+     * @param item
+     */
+    private void logUpdateInfo( ICacheElement<K, V> item )
+    {
+        // not thread safe, but it doesn't have to be 100% accurate
+        puts++;
+
+        if ( log.isInfoEnabled() )
+        {
+            if ( puts % logInterval == 0 )
+            {
+                log.info( "puts = " + puts );
+            }
+        }
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "In update, put [" + item.getKey() + "] in [" + item.getCacheName() + "]" );
+        }
+    }
+
+    /**
+     * Returns a cache value from the specified remote cache; or null if the cache or key does not
+     * exist.
+     * <p>
+     * @param cacheName
+     * @param key
+     * @return ICacheElement
+     * @throws IOException
+     */
+    @Override
+    public ICacheElement<K, V> get( String cacheName, K key )
+        throws IOException
+    {
+        return this.get( cacheName, key, 0 );
+    }
+
+    /**
+     * Returns a cache bean from the specified cache; or null if the key does not exist.
+     * <p>
+     * Adding the requestor id, allows the cache to determine the source of the get.
+     * <p>
+     * The internal processing is wrapped in event logging calls.
+     * <p>
+     * @param cacheName
+     * @param key
+     * @param requesterId
+     * @return ICacheElement
+     * @throws IOException
+     */
+    @Override
+    public ICacheElement<K, V> get( String cacheName, K key, long requesterId )
+        throws IOException
+    {
+        ICacheElement<K, V> element = null;
+        ICacheEvent<K> cacheEvent = createICacheEvent( cacheName, key, requesterId, ICacheEventLogger.GET_EVENT );
+        try
+        {
+            element = processGet( cacheName, key, requesterId );
+        }
+        finally
+        {
+            logICacheEvent( cacheEvent );
+        }
+        return element;
+    }
+
+    /**
+     * Returns a cache bean from the specified cache; or null if the key does not exist.
+     * <p>
+     * Adding the requester id, allows the cache to determine the source of the get.
+     * <p>
+     * @param cacheName
+     * @param key
+     * @param requesterId
+     * @return ICacheElement
+     */
+    private ICacheElement<K, V> processGet( String cacheName, K key, long requesterId )
+    {
+        boolean fromCluster = isRequestFromCluster( requesterId );
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "get [" + key + "] from cache [" + cacheName + "] requesterId = [" + requesterId
+                + "] fromCluster = " + fromCluster );
+        }
+
+        CacheListeners<K, V> cacheDesc = null;
+        try
+        {
+            cacheDesc = getCacheListeners( cacheName );
+        }
+        catch ( Exception e )
+        {
+            log.error( "Problem getting listeners.", e );
+
+            if ( cacheEventLogger != null )
+            {
+                cacheEventLogger.logError( "RemoteCacheServer", ICacheEventLogger.GET_EVENT, e.getMessage() + cacheName
+                    + " KEY: " + key );
+            }
+        }
+
+        ICacheElement<K, V> element = null;
+
+        element = getFromCacheListeners( key, fromCluster, cacheDesc, element );
+        return element;
+    }
+
+    /**
+     * Gets the item from the associated cache listeners.
+     * <p>
+     * @param key
+     * @param fromCluster
+     * @param cacheDesc
+     * @param element
+     * @return ICacheElement
+     */
+    private ICacheElement<K, V> getFromCacheListeners( K key, boolean fromCluster, CacheListeners<K, V> cacheDesc,
+                                                 ICacheElement<K, V> element )
+    {
+        ICacheElement<K, V> returnElement = element;
+
+        if ( cacheDesc != null )
+        {
+            CompositeCache<K, V> c = (CompositeCache<K, V>) cacheDesc.cache;
+
+            // If we have a get come in from a client and we don't have the item
+            // locally, we will allow the cache to look in other non local sources,
+            // such as a remote cache or a lateral.
+            //
+            // Since remote servers never get from clients and clients never go
+            // remote from a remote call, this
+            // will not result in any loops.
+            //
+            // This is the only instance I can think of where we allow a remote get
+            // from a remote call. The purpose is to allow remote cache servers to
+            // talk to each other. If one goes down, you want it to be able to get
+            // data from those that were up when the failed server comes back o
+            // line.
+
+            if ( !fromCluster && this.remoteCacheServerAttributes.isAllowClusterGet() )
+            {
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "NonLocalGet. fromCluster [" + fromCluster + "] AllowClusterGet ["
+                        + this.remoteCacheServerAttributes.isAllowClusterGet() + "]" );
+                }
+                returnElement = c.get( key );
+            }
+            else
+            {
+                // Gets from cluster type remote will end up here.
+                // Gets from all clients will end up here if allow cluster get is
+                // false.
+
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "LocalGet.  fromCluster [" + fromCluster + "] AllowClusterGet ["
+                        + this.remoteCacheServerAttributes.isAllowClusterGet() + "]" );
+                }
+                returnElement = c.localGet( key );
+            }
+        }
+
+        return returnElement;
+    }
+
+    /**
+     * Gets all matching items.
+     * <p>
+     * @param cacheName
+     * @param pattern
+     * @return Map of keys and wrapped objects
+     * @throws IOException
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> getMatching( String cacheName, String pattern )
+        throws IOException
+    {
+        return getMatching( cacheName, pattern, 0 );
+    }
+
+    /**
+     * Retrieves all matching keys.
+     * <p>
+     * @param cacheName
+     * @param pattern
+     * @param requesterId
+     * @return Map of keys and wrapped objects
+     * @throws IOException
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> getMatching( String cacheName, String pattern, long requesterId )
+        throws IOException
+    {
+        ICacheEvent<String> cacheEvent = createICacheEvent( cacheName, pattern, requesterId,
+                                                    ICacheEventLogger.GETMATCHING_EVENT );
+        try
+        {
+            return processGetMatching( cacheName, pattern, requesterId );
+        }
+        finally
+        {
+            logICacheEvent( cacheEvent );
+        }
+    }
+
+    /**
+     * Retrieves all matching keys.
+     * <p>
+     * @param cacheName
+     * @param pattern
+     * @param requesterId
+     * @return Map of keys and wrapped objects
+     */
+    protected Map<K, ICacheElement<K, V>> processGetMatching( String cacheName, String pattern, long requesterId )
+    {
+        boolean fromCluster = isRequestFromCluster( requesterId );
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "getMatching [" + pattern + "] from cache [" + cacheName + "] requesterId = [" + requesterId
+                + "] fromCluster = " + fromCluster );
+        }
+
+        CacheListeners<K, V> cacheDesc = null;
+        try
+        {
+            cacheDesc = getCacheListeners( cacheName );
+        }
+        catch ( Exception e )
+        {
+            log.error( "Problem getting listeners.", e );
+
+            if ( cacheEventLogger != null )
+            {
+                cacheEventLogger.logError( "RemoteCacheServer", ICacheEventLogger.GETMATCHING_EVENT, e.getMessage()
+                    + cacheName + " pattern: " + pattern );
+            }
+        }
+
+        return getMatchingFromCacheListeners( pattern, fromCluster, cacheDesc );
+    }
+
+    /**
+     * Gets the item from the associated cache listeners.
+     * <p>
+     * @param pattern
+     * @param fromCluster
+     * @param cacheDesc
+     * @return Map of keys to results
+     */
+    private Map<K, ICacheElement<K, V>> getMatchingFromCacheListeners( String pattern, boolean fromCluster, CacheListeners<K, V> cacheDesc )
+    {
+        Map<K, ICacheElement<K, V>> elements = null;
+        if ( cacheDesc != null )
+        {
+            CompositeCache<K, V> c = (CompositeCache<K, V>) cacheDesc.cache;
+
+            // We always want to go remote and then merge the items.  But this can lead to inconsistencies after
+            // failover recovery.  Removed items may show up.  There is no good way to prevent this.
+            // We should make it configurable.
+
+            if ( !fromCluster && this.remoteCacheServerAttributes.isAllowClusterGet() )
+            {
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "NonLocalGetMatching. fromCluster [" + fromCluster + "] AllowClusterGet ["
+                        + this.remoteCacheServerAttributes.isAllowClusterGet() + "]" );
+                }
+                elements = c.getMatching( pattern );
+            }
+            else
+            {
+                // Gets from cluster type remote will end up here.
+                // Gets from all clients will end up here if allow cluster get is
+                // false.
+
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "LocalGetMatching.  fromCluster [" + fromCluster + "] AllowClusterGet ["
+                        + this.remoteCacheServerAttributes.isAllowClusterGet() + "]" );
+                }
+                elements = c.localGetMatching( pattern );
+            }
+        }
+        return elements;
+    }
+
+    /**
+     * Gets multiple items from the cache based on the given set of keys.
+     * <p>
+     * @param cacheName
+     * @param keys
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data in cache for any of these keys
+     * @throws IOException
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> getMultiple( String cacheName, Set<K> keys )
+        throws IOException
+    {
+        return this.getMultiple( cacheName, keys, 0 );
+    }
+
+    /**
+     * Gets multiple items from the cache based on the given set of keys.
+     * <p>
+     * The internal processing is wrapped in event logging calls.
+     * <p>
+     * @param cacheName
+     * @param keys
+     * @param requesterId
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data in cache for any of these keys
+     * @throws IOException
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> getMultiple( String cacheName, Set<K> keys, long requesterId )
+        throws IOException
+    {
+        ICacheEvent<Serializable> cacheEvent = createICacheEvent( cacheName, (Serializable) keys, requesterId,
+                                                    ICacheEventLogger.GETMULTIPLE_EVENT );
+        try
+        {
+            return processGetMultiple( cacheName, keys, requesterId );
+        }
+        finally
+        {
+            logICacheEvent( cacheEvent );
+        }
+    }
+
+    /**
+     * Gets multiple items from the cache based on the given set of keys.
+     * <p>
+     * @param cacheName
+     * @param keys
+     * @param requesterId
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data in cache for any of these keys
+     */
+    private Map<K, ICacheElement<K, V>> processGetMultiple( String cacheName, Set<K> keys, long requesterId )
+    {
+        Map<K, ICacheElement<K, V>> elements = null;
+
+        boolean fromCluster = isRequestFromCluster( requesterId );
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "getMultiple [" + keys + "] from cache [" + cacheName + "] requesterId = [" + requesterId
+                + "] fromCluster = " + fromCluster );
+        }
+
+        CacheListeners<K, V> cacheDesc = null;
+        try
+        {
+            cacheDesc = getCacheListeners( cacheName );
+        }
+        catch ( Exception e )
+        {
+            log.error( "Problem getting listeners.", e );
+        }
+
+        elements = getMultipleFromCacheListeners( keys, elements, fromCluster, cacheDesc );
+        return elements;
+    }
+
+    /**
+     * Since a non-receiving remote cache client will not register a listener, it will not have a
+     * listener id assigned from the server. As such the remote server cannot determine if it is a
+     * cluster or a normal client. It will assume that it is a normal client.
+     * <p>
+     * @param requesterId
+     * @return true is from a cluster.
+     */
+    private boolean isRequestFromCluster( long requesterId )
+    {
+        RemoteType remoteTypeL = idTypeMap.get( Long.valueOf( requesterId ) );
+        return remoteTypeL == RemoteType.CLUSTER;
+    }
+
+    /**
+     * Gets the items from the associated cache listeners.
+     * <p>
+     * @param keys
+     * @param elements
+     * @param fromCluster
+     * @param cacheDesc
+     * @return Map
+     */
+    private Map<K, ICacheElement<K, V>> getMultipleFromCacheListeners( Set<K> keys, Map<K, ICacheElement<K, V>> elements, boolean fromCluster, CacheListeners<K, V> cacheDesc )
+    {
+        Map<K, ICacheElement<K, V>> returnElements = elements;
+
+        if ( cacheDesc != null )
+        {
+            CompositeCache<K, V> c = (CompositeCache<K, V>) cacheDesc.cache;
+
+            // If we have a getMultiple come in from a client and we don't have the item
+            // locally, we will allow the cache to look in other non local sources,
+            // such as a remote cache or a lateral.
+            //
+            // Since remote servers never get from clients and clients never go
+            // remote from a remote call, this
+            // will not result in any loops.
+            //
+            // This is the only instance I can think of where we allow a remote get
+            // from a remote call. The purpose is to allow remote cache servers to
+            // talk to each other. If one goes down, you want it to be able to get
+            // data from those that were up when the failed server comes back on
+            // line.
+
+            if ( !fromCluster && this.remoteCacheServerAttributes.isAllowClusterGet() )
+            {
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "NonLocalGetMultiple. fromCluster [" + fromCluster + "] AllowClusterGet ["
+                        + this.remoteCacheServerAttributes.isAllowClusterGet() + "]" );
+                }
+
+                returnElements = c.getMultiple( keys );
+            }
+            else
+            {
+                // Gets from cluster type remote will end up here.
+                // Gets from all clients will end up here if allow cluster get is
+                // false.
+
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "LocalGetMultiple.  fromCluster [" + fromCluster + "] AllowClusterGet ["
+                        + this.remoteCacheServerAttributes.isAllowClusterGet() + "]" );
+                }
+
+                returnElements = c.localGetMultiple( keys );
+            }
+        }
+
+        return returnElements;
+    }
+
+    /**
+     * Return the keys in the cache.
+     * <p>
+     * @param cacheName the name of the cache region
+     * @see org.apache.commons.jcs.auxiliary.AuxiliaryCache#getKeySet()
+     */
+    @Override
+    public Set<K> getKeySet(String cacheName) throws IOException
+    {
+        return processGetKeySet( cacheName );
+    }
+
+    /**
+     * Gets the set of keys of objects currently in the cache.
+     * <p>
+     * @param cacheName
+     * @return Set
+     */
+    protected Set<K> processGetKeySet( String cacheName )
+    {
+        CacheListeners<K, V> cacheDesc = null;
+        try
+        {
+            cacheDesc = getCacheListeners( cacheName );
+        }
+        catch ( Exception e )
+        {
+            log.error( "Problem getting listeners.", e );
+        }
+
+        if ( cacheDesc == null )
+        {
+            return Collections.emptySet();
+        }
+
+        CompositeCache<K, V> c = (CompositeCache<K, V>) cacheDesc.cache;
+        return c.getKeySet();
+    }
+
+    /**
+     * Removes the given key from the specified remote cache. Defaults the listener id to 0.
+     * <p>
+     * @param cacheName
+     * @param key
+     * @throws IOException
+     */
+    @Override
+    public void remove( String cacheName, K key )
+        throws IOException
+    {
+        remove( cacheName, key, 0 );
+    }
+
+    /**
+     * Remove the key from the cache region and don't tell the source listener about it.
+     * <p>
+     * The internal processing is wrapped in event logging calls.
+     * <p>
+     * @param cacheName
+     * @param key
+     * @param requesterId
+     * @throws IOException
+     */
+    @Override
+    public void remove( String cacheName, K key, long requesterId )
+        throws IOException
+    {
+        ICacheEvent<K> cacheEvent = createICacheEvent( cacheName, key, requesterId, ICacheEventLogger.REMOVE_EVENT );
+        try
+        {
+            processRemove( cacheName, key, requesterId );
+        }
+        finally
+        {
+            logICacheEvent( cacheEvent );
+        }
+    }
+
+    /**
+     * Remove the key from the cache region and don't tell the source listener about it.
+     * <p>
+     * @param cacheName
+     * @param key
+     * @param requesterId
+     * @throws IOException
+     */
+    private void processRemove( String cacheName, K key, long requesterId )
+        throws IOException
+    {
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "remove [" + key + "] from cache [" + cacheName + "]" );
+        }
+
+        CacheListeners<K, V> cacheDesc = cacheListenersMap.get( cacheName );
+
+        boolean fromCluster = isRequestFromCluster( requesterId );
+
+        if ( cacheDesc != null )
+        {
+            // best attempt to achieve ordered cache item removal and
+            // notification.
+            synchronized ( cacheDesc )
+            {
+                boolean removeSuccess = false;
+
+                // No need to notify if it was not cached.
+                CompositeCache<K, V> c = (CompositeCache<K, V>) cacheDesc.cache;
+
+                if ( fromCluster )
+                {
+                    if ( log.isDebugEnabled() )
+                    {
+                        log.debug( "Remove FROM cluster, NOT updating other auxiliaries for region" );
+                    }
+                    removeSuccess = c.localRemove( key );
+                }
+                else
+                {
+                    if ( log.isDebugEnabled() )
+                    {
+                        log.debug( "Remove NOT from cluster, updating other auxiliaries for region" );
+                    }
+                    removeSuccess = c.remove( key );
+                }
+
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "remove [" + key + "] from cache [" + cacheName + "] success (was it found) = "
+                        + removeSuccess );
+                }
+
+                // UPDATE LOCALS IF A REQUEST COMES FROM A CLUSTER
+                // IF LOCAL CLUSTER CONSISTENCY IS CONFIGURED
+                if ( !fromCluster || ( fromCluster && remoteCacheServerAttributes.isLocalClusterConsistency() ) )
+                {
+                    ICacheEventQueue<K, V>[] qlist = getEventQList( cacheDesc, requesterId );
+
+                    for ( int i = 0; i < qlist.length; i++ )
+                    {
+                        qlist[i].addRemoveEvent( key );
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * Remove all keys from the specified remote cache.
+     * <p>
+     * @param cacheName
+     * @throws IOException
+     */
+    @Override
+    public void removeAll( String cacheName )
+        throws IOException
+    {
+        removeAll( cacheName, 0 );
+    }
+
+    /**
+     * Remove all keys from the specified remote cache.
+     * <p>
+     * The internal processing is wrapped in event logging calls.
+     * <p>
+     * @param cacheName
+     * @param requesterId
+     * @throws IOException
+     */
+    @Override
+    public void removeAll( String cacheName, long requesterId )
+        throws IOException
+    {
+        ICacheEvent<String> cacheEvent = createICacheEvent( cacheName, "all", requesterId, ICacheEventLogger.REMOVEALL_EVENT );
+        try
+        {
+            processRemoveAll( cacheName, requesterId );
+        }
+        finally
+        {
+            logICacheEvent( cacheEvent );
+        }
+    }
+
+    /**
+     * Remove all keys from the specified remote cache.
+     * <p>
+     * @param cacheName
+     * @param requesterId
+     * @throws IOException
+     */
+    private void processRemoveAll( String cacheName, long requesterId )
+        throws IOException
+    {
+        CacheListeners<K, V> cacheDesc = cacheListenersMap.get( cacheName );
+
+        boolean fromCluster = isRequestFromCluster( requesterId );
+
+        if ( cacheDesc != null )
+        {
+            // best attempt to achieve ordered cache item removal and
+            // notification.
+            synchronized ( cacheDesc )
+            {
+                // No need to broadcast, or notify if it was not cached.
+                CompositeCache<K, V> c = (CompositeCache<K, V>) cacheDesc.cache;
+
+                if ( fromCluster )
+                {
+                    if ( log.isDebugEnabled() )
+                    {
+                        log.debug( "RemoveALL FROM cluster, NOT updating other auxiliaries for region" );
+                    }
+                    c.localRemoveAll();
+                }
+                else
+                {
+                    if ( log.isDebugEnabled() )
+                    {
+                        log.debug( "RemoveALL NOT from cluster, updating other auxiliaries for region" );
+                    }
+                    c.removeAll();
+                }
+
+                // update registered listeners
+                if ( !fromCluster || ( fromCluster && remoteCacheServerAttributes.isLocalClusterConsistency() ) )
+                {
+                    ICacheEventQueue<K, V>[] qlist = getEventQList( cacheDesc, requesterId );
+
+                    for ( int i = 0; i < qlist.length; i++ )
+                    {
+                        qlist[i].addRemoveAllEvent();
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * How many put events have we received.
+     * <p>
+     * @return puts
+     */
+    // Currently only intended for use by unit tests
+    int getPutCount()
+    {
+        return puts;
+    }
+
+    /**
+     * Frees the specified remote cache.
+     * <p>
+     * @param cacheName
+     * @throws IOException
+     */
+    @Override
+    public void dispose( String cacheName )
+        throws IOException
+    {
+        dispose( cacheName, 0 );
+    }
+
+    /**
+     * Frees the specified remote cache.
+     * <p>
+     * @param cacheName
+     * @param requesterId
+     * @throws IOException
+     */
+    public void dispose( String cacheName, long requesterId )
+        throws IOException
+    {
+        ICacheEvent<String> cacheEvent = createICacheEvent( cacheName, "none", requesterId, ICacheEventLogger.DISPOSE_EVENT );
+        try
+        {
+            processDispose( cacheName, requesterId );
+        }
+        finally
+        {
+            logICacheEvent( cacheEvent );
+        }
+    }
+
+    /**
+     * @param cacheName
+     * @param requesterId
+     * @throws IOException
+     */
+    private void processDispose( String cacheName, long requesterId )
+        throws IOException
+    {
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "Dispose request received from listener [" + requesterId + "]" );
+        }
+
+        CacheListeners<K, V> cacheDesc = cacheListenersMap.get( cacheName );
+
+        // this is dangerous
+        if ( cacheDesc != null )
+        {
+            // best attempt to achieve ordered free-cache-op and notification.
+            synchronized ( cacheDesc )
+            {
+                ICacheEventQueue<K, V>[] qlist = getEventQList( cacheDesc, requesterId );
+
+                for ( int i = 0; i < qlist.length; i++ )
+                {
+                    qlist[i].addDisposeEvent();
+                }
+                cacheManager.freeCache( cacheName );
+            }
+        }
+    }
+
+    /**
+     * Frees all remote caches.
+     * <p>
+     * @throws IOException
+     */
+    @Override
+    public void release()
+        throws IOException
+    {
+        synchronized ( cacheListenersMap )
+        {
+            for (CacheListeners<K, V> cacheDesc : cacheListenersMap.values())
+            {
+                ICacheEventQueue<K, V>[] qlist = getEventQList( cacheDesc, 0 );
+
+                for ( int i = 0; i < qlist.length; i++ )
+                {
+                    qlist[i].addDisposeEvent();
+                }
+            }
+            cacheManager.release();
+        }
+    }
+
+    /**
+     * Returns the cache listener for the specified cache. Creates the cache and the cache
+     * descriptor if they do not already exist.
+     * <p>
+     * @param cacheName
+     * @return The cacheListeners value
+     */
+    protected CacheListeners<K, V> getCacheListeners( String cacheName )
+    {
+        CacheListeners<K, V> cacheListeners = cacheListenersMap.get( cacheName );
+        synchronized ( cacheListenersMap )
+        {
+            if ( cacheListeners == null )
+            {
+                cacheListeners = cacheListenersMap.get( cacheName );
+                if ( cacheListeners == null )
+                {
+                    CompositeCache<K, V> cache = cacheManager.getCache( cacheName );
+                    cacheListeners = new CacheListeners<K, V>( cache );
+                    cacheListenersMap.put( cacheName, cacheListeners );
+                }
+            }
+        }
+        return cacheListeners;
+    }
+
+    /**
+     * Gets the clusterListeners attribute of the RemoteCacheServer object.
+     * <p>
+     * TODO may be able to remove this
+     * @param cacheName
+     * @return The clusterListeners value
+     */
+    protected CacheListeners<K, V> getClusterListeners( String cacheName )
+    {
+        CacheListeners<K, V> cacheListeners = clusterListenersMap.get( cacheName );
+        synchronized ( clusterListenersMap )
+        {
+            if ( cacheListeners == null )
+            {
+                cacheListeners = clusterListenersMap.get( cacheName );
+                if ( cacheListeners == null )
+                {
+                    CompositeCache<K, V> cache = cacheManager.getCache( cacheName );
+                    cacheListeners = new CacheListeners<K, V>( cache );
+                    clusterListenersMap.put( cacheName, cacheListeners );
+                }
+            }
+        }
+        return cacheListeners;
+    }
+
+    /**
+     * Gets the eventQList attribute of the RemoteCacheServer object. This returns the event queues
+     * stored in the cacheListeners object for a particular region, if the queue is not for this
+     * requester.
+     * <p>
+     * Basically, this makes sure that a request from a particular local cache, identified by its
+     * listener id, does not result in a call to that same listener.
+     * <p>
+     * @param cacheListeners
+     * @param requesterId
+     * @return The eventQList value
+     */
+    @SuppressWarnings("unchecked") // No generic arrays in java
+    private ICacheEventQueue<K, V>[] getEventQList( CacheListeners<K, V> cacheListeners, long requesterId )
+    {
+        ICacheEventQueue<K, V>[] list = null;
+        synchronized ( cacheListeners.eventQMap )
+        {
+            list = cacheListeners.eventQMap.values().toArray( new ICacheEventQueue[0] );
+        }
+        int count = 0;
+        // Set those not qualified to null; Count those qualified.
+        for ( int i = 0; i < list.length; i++ )
+        {
+            ICacheEventQueue<K, V> q = list[i];
+            if ( q.isWorking() && q.getListenerId() != requesterId )
+            {
+                count++;
+            }
+            else
+            {
+                list[i] = null;
+            }
+        }
+        if ( count == list.length )
+        {
+            // All qualified.
+            return list;
+        }
+
+        // Returns only the qualified.
+        ICacheEventQueue<K, V>[] qq = new ICacheEventQueue[count];
+        count = 0;
+        for ( int i = 0; i < list.length; i++ )
+        {
+            if ( list[i] != null )
+            {
+                qq[count++] = list[i];
+            }
+        }
+        return qq;
+    }
+
+    /**
+     * Removes dead event queues. Should clean out deregistered listeners.
+     * <p>
+     * @param eventQMap
+     */
+    private static <KK, VV> void cleanupEventQMap( Map<Long, ICacheEventQueue<KK, VV>> eventQMap )
+    {
+        synchronized ( eventQMap )
+        {
+            for (Iterator<Map.Entry<Long, ICacheEventQueue<KK, VV>>> itr = eventQMap.entrySet().iterator(); itr.hasNext(); )
+            {
+                Map.Entry<Long, ICacheEventQueue<KK, VV>> e = itr.next();
+                ICacheEventQueue<KK, VV> q = e.getValue();
+
+                // this does not care if the q is alive (i.e. if
+                // there are active threads; it cares if the queue
+                // is working -- if it has not encountered errors
+                // above the failure threshold
+                if ( !q.isWorking() )
+                {
+                    itr.remove();
+                    log.warn( "Cache event queue " + q + " is not working and removed from cache server." );
+                }
+            }
+        }
+    }
+
+    /**
+     * Subscribes to the specified remote cache.
+     * <p>
+     * If the client id is 0, then the remote cache server will increment it's local count and
+     * assign an id to the client.
+     * <p>
+     * @param cacheName the specified remote cache.
+     * @param listener object to notify for cache changes. must be synchronized since there are
+     *            remote calls involved.
+     * @throws IOException
+     */
+    @Override
+    @SuppressWarnings("unchecked") // Need to cast to specific return type from getClusterListeners()
+    public <KK, VV> void addCacheListener( String cacheName, ICacheListener<KK, VV> listener )
+        throws IOException
+    {
+        if ( cacheName == null || listener == null )
+        {
+            throw new IllegalArgumentException( "cacheName and listener must not be null" );
+        }
+        CacheListeners<KK, VV> cacheListeners;
+
+        IRemoteCacheListener<KK, VV> ircl = (IRemoteCacheListener<KK, VV>) listener;
+
+        String listenerAddress = ircl.getLocalHostAddress();
+
+        RemoteType remoteType = ircl.getRemoteType();
+        if ( remoteType == RemoteType.CLUSTER )
+        {
+            log.debug( "adding cluster listener, listenerAddress [" + listenerAddress + "]" );
+            cacheListeners = (CacheListeners<KK, VV>)getClusterListeners( cacheName );
+        }
+        else
+        {
+            log.debug( "adding normal listener, listenerAddress [" + listenerAddress + "]" );
+            cacheListeners = (CacheListeners<KK, VV>)getCacheListeners( cacheName );
+        }
+        Map<Long, ICacheEventQueue<KK, VV>> eventQMap = cacheListeners.eventQMap;
+        cleanupEventQMap( eventQMap );
+
+        // synchronized ( listenerId )
+        synchronized ( ICacheListener.class )
+        {
+            long id = 0;
+            try
+            {
+                id = listener.getListenerId();
+                // clients probably shouldn't do this.
+                if ( id == 0 )
+                {
+                    // must start at one so the next gets recognized
+                    long listenerIdB = nextListenerId();
+                    if ( log.isDebugEnabled() )
+                    {
+                        log.debug( "listener id=" + ( listenerIdB & 0xff ) + " addded for cache [" + cacheName
+                            + "], listenerAddress [" + listenerAddress + "]" );
+                    }
+                    listener.setListenerId( listenerIdB );
+                    id = listenerIdB;
+
+                    // in case it needs synchronization
+                    String message = "Adding vm listener under new id = [" + listenerIdB + "], listenerAddress ["
+                        + listenerAddress + "]";
+                    logApplicationEvent( "RemoteCacheServer", "addCacheListener", message );
+                    if ( log.isInfoEnabled() )
+                    {
+                        log.info( message );
+                    }
+                }
+                else
+                {
+                    String message = "Adding listener under existing id = [" + id + "], listenerAddress ["
+                        + listenerAddress + "]";
+                    logApplicationEvent( "RemoteCacheServer", "addCacheListener", message );
+                    if ( log.isInfoEnabled() )
+                    {
+                        log.info( message );
+                    }
+                    // should confirm the the host is the same as we have on
+                    // record, just in case a client has made a mistake.
+                }
+
+                // relate the type to an id
+                this.idTypeMap.put( Long.valueOf( id ), remoteType);
+                if ( listenerAddress != null )
+                {
+                    this.idIPMap.put( Long.valueOf( id ), listenerAddress );
+                }
+            }
+            catch ( IOException ioe )
+            {
+                String message = "Problem setting listener id, listenerAddress [" + listenerAddress + "]";
+                log.error( message, ioe );
+
+                if ( cacheEventLogger != null )
+                {
+                    cacheEventLogger.logError( "RemoteCacheServer", "addCacheListener", message + " - "
+                        + ioe.getMessage() );
+                }
+            }
+
+            CacheEventQueueFactory<KK, VV> fact = new CacheEventQueueFactory<KK, VV>();
+            ICacheEventQueue<KK, VV> q = fact.createCacheEventQueue( listener, id, cacheName, remoteCacheServerAttributes
+                .getEventQueuePoolName(), remoteCacheServerAttributes.getEventQueueType() );
+
+            eventQMap.put(Long.valueOf(listener.getListenerId()), q);
+
+            if ( log.isInfoEnabled() )
+            {
+                log.info( cacheListeners );
+            }
+        }
+    }
+
+    /**
+     * Subscribes to all remote caches.
+     * <p>
+     * @param listener The feature to be added to the CacheListener attribute
+     * @throws IOException
+     */
+    @Override
+    public <KK, VV> void addCacheListener( ICacheListener<KK, VV> listener )
+        throws IOException
+    {
+        for (String cacheName : cacheListenersMap.keySet())
+        {
+            addCacheListener( cacheName, listener );
+
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Adding listener for cache [" + cacheName + "]" );
+            }
+        }
+    }
+
+    /**
+     * Unsubscribe this listener from this region. If the listener is registered, it will be removed
+     * from the event queue map list.
+     * <p>
+     * @param cacheName
+     * @param listener
+     * @throws IOException
+     */
+    @Override
+    public <KK, VV> void removeCacheListener( String cacheName, ICacheListener<KK, VV> listener )
+        throws IOException
+    {
+        removeCacheListener( cacheName, listener.getListenerId() );
+    }
+
+    /**
+     * Unsubscribe this listener from this region. If the listener is registered, it will be removed
+     * from the event queue map list.
+     * <p>
+     * @param cacheName
+     * @param listenerId
+     */
+    public void removeCacheListener( String cacheName, long listenerId )
+    {
+        String message = "Removing listener for cache region = [" + cacheName + "] and listenerId [" + listenerId + "]";
+        logApplicationEvent( "RemoteCacheServer", "removeCacheListener", message );
+        if ( log.isInfoEnabled() )
+        {
+            log.info( message );
+        }
+
+        boolean isClusterListener = isRequestFromCluster( listenerId );
+
+        CacheListeners<K, V> cacheDesc = null;
+
+        if ( isClusterListener )
+        {
+            cacheDesc = getClusterListeners( cacheName );
+        }
+        else
+        {
+            cacheDesc = getCacheListeners( cacheName );
+        }
+        Map<Long, ICacheEventQueue<K, V>> eventQMap = cacheDesc.eventQMap;
+        cleanupEventQMap( eventQMap );
+        ICacheEventQueue<K, V> q = eventQMap.remove( Long.valueOf( listenerId ) );
+
+        if ( q != null )
+        {
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Found queue for cache region = [" + cacheName + "] and listenerId  [" + listenerId + "]" );
+            }
+            q.destroy();
+            cleanupEventQMap( eventQMap );
+        }
+        else
+        {
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Did not find queue for cache region = [" + cacheName + "] and listenerId [" + listenerId
+                    + "]" );
+            }
+        }
+
+        // cleanup
+        idTypeMap.remove( Long.valueOf( listenerId ) );
+        idIPMap.remove( Long.valueOf( listenerId ) );
+
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "After removing listener [" + listenerId + "] cache region " + cacheName + "'s listener size ["
+                + cacheDesc.eventQMap.size() + "]" );
+        }
+    }
+
+    /**
+     * Unsubscribes from all remote caches.
+     * <p>
+     * @param listener
+     * @throws IOException
+     */
+    @Override
+    public <KK, VV> void removeCacheListener( ICacheListener<KK, VV> listener )
+        throws IOException
+    {
+        for (String cacheName : cacheListenersMap.keySet())
+        {
+            removeCacheListener( cacheName, listener );
+
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "Removing listener for cache [" + cacheName + "]" );
+            }
+        }
+    }
+
+    /**
+     * Shuts down the remote server.
+     * <p>
+     * @throws IOException
+     */
+    @Override
+    public void shutdown()
+        throws IOException
+    {
+        shutdown("", Registry.REGISTRY_PORT);
+    }
+
+    /**
+     * Shuts down a server at a particular host and port. Then it calls shutdown on the cache
+     * itself.
+     * <p>
+     * @param host
+     * @param port
+     * @throws IOException
+     */
+    @Override
+    public void shutdown( String host, int port )
+        throws IOException
+    {
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "Received shutdown request. Shutting down server." );
+        }
+
+        synchronized (listenerId)
+        {
+            for (String cacheName : cacheListenersMap.keySet())
+            {
+                for (int i = 0; i <= listenerId[0]; i++)
+                {
+                    removeCacheListener( cacheName, i );
+                }
+
+                if ( log.isInfoEnabled() )
+                {
+                    log.info( "Removing listener for cache [" + cacheName + "]" );
+                }
+            }
+
+            cacheListenersMap.clear();
+            clusterListenersMap.clear();
+        }
+        RemoteCacheServerFactory.shutdownImpl( host, port );
+        this.cacheManager.shutDown();
+    }
+
+    /**
+     * Called by the RMI runtime sometime after the runtime determines that the reference list, the
+     * list of clients referencing the remote object, becomes empty.
+     */
+    // TODO: test out the DGC.
+    @Override
+    public void unreferenced()
+    {
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "*** Server now unreferenced and subject to GC. ***" );
+        }
+    }
+
+    /**
+     * Returns the next generated listener id [0,255].
+     * <p>
+     * @return the listener id of a client. This should be unique for this server.
+     */
+    private long nextListenerId()
+    {
+        long id = 0;
+        if ( listenerId[0] == Integer.MAX_VALUE )
+        {
+            synchronized ( listenerId )
+            {
+                id = listenerId[0];
+                listenerId[0] = 0;
+                // TODO: record & check if the generated id is currently being
+                // used by a valid listener. Currently if the id wraps after
+                // Long.MAX_VALUE,
+                // we just assume it won't collide with an existing listener who
+                // is live.
+            }
+        }
+        else
+        {
+            synchronized ( listenerId )
+            {
+                id = ++listenerId[0];
+            }
+        }
+        return id;
+    }
+
+    /**
+     * Gets the stats attribute of the RemoteCacheServer object.
+     * <p>
+     * @return The stats value
+     * @throws IOException
+     */
+    @Override
+    public String getStats()
+        throws IOException
+    {
+        return cacheManager.getStats();
+    }
+
+    /**
+     * Logs an event if an event logger is configured.
+     * <p>
+     * @param item
+     * @param requesterId
+     * @param eventName
+     * @return ICacheEvent
+     */
+    private ICacheEvent<ICacheElement<K, V>> createICacheEvent( ICacheElement<K, V> item, long requesterId, String eventName )
+    {
+        if ( cacheEventLogger == null )
+        {
+            return new CacheEvent<ICacheElement<K, V>>();
+        }
+        String ipAddress = getExtraInfoForRequesterId( requesterId );
+        return cacheEventLogger
+            .createICacheEvent( "RemoteCacheServer", item.getCacheName(), eventName, ipAddress, item );
+    }
+
+    /**
+     * Logs an event if an event logger is configured.
+     * <p>
+     * @param cacheName
+     * @param key
+     * @param requesterId
+     * @param eventName
+     * @return ICacheEvent
+     */
+    private <T> ICacheEvent<T> createICacheEvent( String cacheName, T key, long requesterId, String eventName )
+    {
+        if ( cacheEventLogger == null )
+        {
+            return new CacheEvent<T>();
+        }
+        String ipAddress = getExtraInfoForRequesterId( requesterId );
+        return cacheEventLogger.createICacheEvent( "RemoteCacheServer", cacheName, eventName, ipAddress, key );
+    }
+
+    /**
+     * Logs an event if an event logger is configured.
+     * <p>
+     * @param source
+     * @param eventName
+     * @param optionalDetails
+     */
+    protected void logApplicationEvent( String source, String eventName, String optionalDetails )
+    {
+        if ( cacheEventLogger != null )
+        {
+            cacheEventLogger.logApplicationEvent( source, eventName, optionalDetails );
+        }
+    }
+
+    /**
+     * Logs an event if an event logger is configured.
+     * <p>
+     * @param cacheEvent
+     */
+    protected <T> void logICacheEvent( ICacheEvent<T> cacheEvent )
+    {
+        if ( cacheEventLogger != null )
+        {
+            cacheEventLogger.logICacheEvent( cacheEvent );
+        }
+    }
+
+    /**
+     * Ip address for the client, if one is stored.
+     * <p>
+     * Protected for testing.
+     * <p>
+     * @param requesterId
+     * @return String
+     */
+    protected String getExtraInfoForRequesterId( long requesterId )
+    {
+        String ipAddress = idIPMap.get( Long.valueOf( requesterId ) );
+        return ipAddress;
+    }
+
+    /**
+     * Allows it to be injected.
+     * <p>
+     * @param cacheEventLogger
+     */
+    public void setCacheEventLogger( ICacheEventLogger cacheEventLogger )
+    {
+        this.cacheEventLogger = cacheEventLogger;
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/server/RemoteCacheServerAttributes.java b/src/org/apache/commons/jcs/auxiliary/remote/server/RemoteCacheServerAttributes.java
new file mode 100644
index 0000000..351f5ac
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/server/RemoteCacheServerAttributes.java
@@ -0,0 +1,211 @@
+package org.apache.commons.jcs.auxiliary.remote.server;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.remote.CommonRemoteCacheAttributes;
+import org.apache.commons.jcs.auxiliary.remote.server.behavior.IRemoteCacheServerAttributes;
+
+/**
+ * These attributes are used to configure the remote cache server.
+ */
+public class RemoteCacheServerAttributes
+    extends CommonRemoteCacheAttributes
+    implements IRemoteCacheServerAttributes
+{
+    /** Don't change */
+    private static final long serialVersionUID = -2741662082869155365L;
+
+    /** port the server will listen to */
+    private int servicePort = 0;
+
+    /** Can a cluster remote get from other remotes */
+    private boolean allowClusterGet = true;
+
+    /** The config file, the initialization is multistage. Remote cache then composite cache. */
+    private String configFileName = "";
+
+    /** Should we start the registry */
+    private boolean DEFAULT_START_REGISTRY = true;
+
+    /** Should we start the registry */
+    private boolean startRegistry = DEFAULT_START_REGISTRY;
+
+    /** Should we try to keep the registry alive */
+    private boolean DEFAULT_USE_REGISTRY_KEEP_ALIVE = true;
+
+    /** Should we try to keep the registry alive */
+    private boolean useRegistryKeepAlive = DEFAULT_USE_REGISTRY_KEEP_ALIVE;
+
+    /** The delay between runs */
+    private long registryKeepAliveDelayMillis = 15 * 1000;
+
+    /** Default constructor for the RemoteCacheAttributes object */
+    public RemoteCacheServerAttributes()
+    {
+        super();
+    }
+
+    /**
+     * Gets the localPort attribute of the RemoteCacheAttributes object
+     * <p>
+     * @return The localPort value
+     */
+    @Override
+    public int getServicePort()
+    {
+        return this.servicePort;
+    }
+
+    /**
+     * Sets the localPort attribute of the RemoteCacheAttributes object
+     * <p>
+     * @param p The new localPort value
+     */
+    @Override
+    public void setServicePort( int p )
+    {
+        this.servicePort = p;
+    }
+
+    /**
+     * Should gets from non-cluster clients be allowed to get from other remote auxiliaries.
+     * <p>
+     * @return The localClusterConsistency value
+     */
+    @Override
+    public boolean isAllowClusterGet()
+    {
+        return allowClusterGet;
+    }
+
+    /**
+     * Should we try to get from other cluster servers if we don't find the items locally.
+     * <p>
+     * @param r The new localClusterConsistency value
+     */
+    @Override
+    public void setAllowClusterGet( boolean r )
+    {
+        allowClusterGet = r;
+    }
+
+    /**
+     * Gets the ConfigFileName attribute of the IRemoteCacheAttributes object
+     * <p>
+     * @return The clusterServers value
+     */
+    @Override
+    public String getConfigFileName()
+    {
+        return configFileName;
+    }
+
+    /**
+     * Sets the ConfigFileName attribute of the IRemoteCacheAttributes object
+     * <p>
+     * @param s The new clusterServers value
+     */
+    @Override
+    public void setConfigFileName( String s )
+    {
+        configFileName = s;
+    }
+
+    /**
+     * Should we try to keep the registry alive
+     * <p>
+     * @param useRegistryKeepAlive the useRegistryKeepAlive to set
+     */
+    @Override
+    public void setUseRegistryKeepAlive( boolean useRegistryKeepAlive )
+    {
+        this.useRegistryKeepAlive = useRegistryKeepAlive;
+    }
+
+    /**
+     * Should we start the registry
+     * <p>
+     * @param startRegistry the startRegistry to set
+     */
+    @Override
+    public void setStartRegistry( boolean startRegistry )
+    {
+        this.startRegistry = startRegistry;
+    }
+
+    /**
+     * Should we start the registry
+     * <p>
+     * @return the startRegistry
+     */
+    @Override
+    public boolean isStartRegistry()
+    {
+        return startRegistry;
+    }
+
+    /**
+     * Should we try to keep the registry alive
+     * <p>
+     * @return the useRegistryKeepAlive
+     */
+    @Override
+    public boolean isUseRegistryKeepAlive()
+    {
+        return useRegistryKeepAlive;
+    }
+
+    /**
+     * @param registryKeepAliveDelayMillis the registryKeepAliveDelayMillis to set
+     */
+    @Override
+    public void setRegistryKeepAliveDelayMillis( long registryKeepAliveDelayMillis )
+    {
+        this.registryKeepAliveDelayMillis = registryKeepAliveDelayMillis;
+    }
+
+    /**
+     * @return the registryKeepAliveDelayMillis
+     */
+    @Override
+    public long getRegistryKeepAliveDelayMillis()
+    {
+        return registryKeepAliveDelayMillis;
+    }
+
+    /**
+     * @return String details
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder buf = new StringBuilder(super.toString());
+        buf.append( "\n servicePort = [" + this.getServicePort() + "]" );
+        buf.append( "\n allowClusterGet = [" + this.isAllowClusterGet() + "]" );
+        buf.append( "\n configFileName = [" + this.getConfigFileName() + "]" );
+        buf.append( "\n rmiSocketFactoryTimeoutMillis = [" + this.getRmiSocketFactoryTimeoutMillis() + "]" );
+        buf.append( "\n startRegistry = [" + this.isStartRegistry() + "]" );
+        buf.append( "\n useRegistryKeepAlive = [" + this.isUseRegistryKeepAlive() + "]" );
+        buf.append( "\n registryKeepAliveDelayMillis = [" + this.getRegistryKeepAliveDelayMillis() + "]" );
+        buf.append( "\n eventQueueType = [" + this.getEventQueueType() + "]" );
+        buf.append( "\n eventQueuePoolName = [" + this.getEventQueuePoolName() + "]" );
+        return buf.toString();
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/server/RemoteCacheServerFactory.java b/src/org/apache/commons/jcs/auxiliary/remote/server/RemoteCacheServerFactory.java
new file mode 100644
index 0000000..e288386
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/server/RemoteCacheServerFactory.java
@@ -0,0 +1,539 @@
+package org.apache.commons.jcs.auxiliary.remote.server;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.AuxiliaryCacheConfigurator;
+import org.apache.commons.jcs.auxiliary.remote.RemoteUtils;
+import org.apache.commons.jcs.auxiliary.remote.behavior.IRemoteCacheConstants;
+import org.apache.commons.jcs.engine.behavior.ICacheServiceAdmin;
+import org.apache.commons.jcs.engine.logging.behavior.ICacheEventLogger;
+import org.apache.commons.jcs.utils.config.OptionConverter;
+import org.apache.commons.jcs.utils.config.PropertySetter;
+import org.apache.commons.jcs.utils.threadpool.DaemonThreadFactory;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.net.MalformedURLException;
+import java.rmi.Naming;
+import java.rmi.NotBoundException;
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+import java.rmi.registry.Registry;
+import java.rmi.server.RMISocketFactory;
+import java.rmi.server.UnicastRemoteObject;
+import java.util.Properties;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Provides remote cache services. This creates remote cache servers and can proxy command line
+ * requests to a running server.
+ */
+public class RemoteCacheServerFactory
+    implements IRemoteCacheConstants
+{
+    /** The logger */
+    private static final Log log = LogFactory.getLog( RemoteCacheServerFactory.class );
+
+    /** The single instance of the RemoteCacheServer object. */
+    private static RemoteCacheServer<? extends Serializable, ? extends Serializable> remoteCacheServer;
+
+    /** The name of the service. */
+    private static String serviceName = IRemoteCacheConstants.REMOTE_CACHE_SERVICE_VAL;
+
+    /** Executes the registry keep alive. */
+    private static ScheduledExecutorService keepAliveDaemon;
+
+    /** A reference to the registry. */
+    private static Registry registry = null;
+
+    /** Constructor for the RemoteCacheServerFactory object. */
+    private RemoteCacheServerFactory()
+    {
+        super();
+    }
+
+    /**
+     * This will allow you to get stats from the server, etc. Perhaps we should provide methods on
+     * the factory to do this instead.
+     * <p>
+     * A remote cache is either a local cache or a cluster cache.
+     * </p>
+     * @return Returns the remoteCacheServer.
+     */
+    @SuppressWarnings("unchecked") // Need cast to specific RemoteCacheServer
+    public static <K, V> RemoteCacheServer<K, V> getRemoteCacheServer()
+    {
+        return (RemoteCacheServer<K, V>)remoteCacheServer;
+    }
+
+    // ///////////////////// Startup/shutdown methods. //////////////////
+    /**
+     * Starts up the remote cache server on this JVM, and binds it to the registry on the given host
+     * and port.
+     * <p>
+     * A remote cache is either a local cache or a cluster cache.
+     * <p>
+     * @param host
+     * @param port
+     * @param propFile
+     * @throws IOException
+     */
+    public static void startup( String host, int port, String propFile )
+        throws IOException
+    {
+        if ( remoteCacheServer != null )
+        {
+            throw new IllegalArgumentException( "Server already started." );
+        }
+
+        synchronized ( RemoteCacheServer.class )
+        {
+            if ( remoteCacheServer != null )
+            {
+                return;
+            }
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "ConfigFileName = [" + propFile + "]" );
+            }
+            Properties props = RemoteUtils.loadProps( propFile );
+            startup(host, port, props, propFile);
+        }
+    }
+
+    /**
+     * Starts up the remote cache server on this JVM, and binds it to the registry on the given host
+     * and port.
+     * <p>
+     * A remote cache is either a local cache or a cluster cache.
+     * <p>
+     * @param host
+     * @param port
+     * @param props
+     * @throws IOException
+     */
+    public static void startup( String host, int port, Properties props, String propFile )
+        throws IOException
+    {
+        if ( remoteCacheServer != null )
+        {
+            throw new IllegalArgumentException( "Server already started." );
+        }
+
+        synchronized ( RemoteCacheServer.class )
+        {
+            if ( remoteCacheServer != null )
+            {
+                return;
+            }
+            if ( host == null )
+            {
+                host = "";
+            }
+
+            RemoteCacheServerAttributes rcsa = configureRemoteCacheServerAttributes(props);
+            rcsa.setConfigFileName( propFile );
+
+            // These should come from the file!
+            rcsa.setRemotePort( port );
+            rcsa.setRemoteHost( host );
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "Creating server with these attributes: " + rcsa );
+            }
+
+            setServiceName( rcsa.getRemoteServiceName() );
+
+            RMISocketFactory customRMISocketFactory = configureObjectSpecificCustomFactory( props );
+
+            RemoteUtils.configureGlobalCustomSocketFactory( rcsa.getRmiSocketFactoryTimeoutMillis() );
+
+            // CONFIGURE THE EVENT LOGGER
+            ICacheEventLogger cacheEventLogger = configureCacheEventLogger( props );
+
+            // CREATE SERVER
+            if ( customRMISocketFactory != null )
+            {
+                remoteCacheServer = new RemoteCacheServer<Serializable, Serializable>( rcsa, customRMISocketFactory );
+            }
+            else
+            {
+                remoteCacheServer = new RemoteCacheServer<Serializable, Serializable>( rcsa );
+            }
+
+            remoteCacheServer.setCacheEventLogger( cacheEventLogger );
+
+            // START THE REGISTRY
+            if (rcsa.isStartRegistry())
+            {
+            	registry = RemoteUtils.createRegistry(port);
+            }
+
+            // REGISTER THE SERVER
+            registerServer( RemoteUtils.getNamingURL(host, port, serviceName), remoteCacheServer );
+
+            // KEEP THE REGISTRY ALIVE
+            if ( rcsa.isUseRegistryKeepAlive() )
+            {
+                if ( keepAliveDaemon == null )
+                {
+                    keepAliveDaemon = Executors.newScheduledThreadPool(1,
+                            new DaemonThreadFactory("JCS-RemoteCacheServerFactory-"));
+                }
+                RegistryKeepAliveRunner runner = new RegistryKeepAliveRunner( host, port, serviceName );
+                runner.setCacheEventLogger( cacheEventLogger );
+                keepAliveDaemon.scheduleAtFixedRate(runner, 0, rcsa.getRegistryKeepAliveDelayMillis(), TimeUnit.MILLISECONDS);
+            }
+        }
+    }
+
+    /**
+     * Tries to get the event logger by new and old config styles.
+     * <p>
+     * @param props
+     * @return ICacheEventLogger
+     */
+    protected static ICacheEventLogger configureCacheEventLogger( Properties props )
+    {
+        ICacheEventLogger cacheEventLogger = AuxiliaryCacheConfigurator
+            .parseCacheEventLogger( props, IRemoteCacheConstants.CACHE_SERVER_PREFIX );
+
+        // try the old way
+        if ( cacheEventLogger == null )
+        {
+            cacheEventLogger = AuxiliaryCacheConfigurator.parseCacheEventLogger( props,
+                                                                                 IRemoteCacheConstants.PROPERTY_PREFIX );
+        }
+        return cacheEventLogger;
+    }
+
+    /**
+     * This configures an object specific custom factory. This will be configured for just this
+     * object in the registry. This can be null.
+     * <p>
+     * @param props
+     * @return RMISocketFactory
+     */
+    protected static RMISocketFactory configureObjectSpecificCustomFactory( Properties props )
+    {
+        RMISocketFactory customRMISocketFactory =
+            OptionConverter.instantiateByKey( props, CUSTOM_RMI_SOCKET_FACTORY_PROPERTY_PREFIX, null );
+
+        if ( customRMISocketFactory != null )
+        {
+            PropertySetter.setProperties( customRMISocketFactory, props, CUSTOM_RMI_SOCKET_FACTORY_PROPERTY_PREFIX
+                + "." );
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "Will use server specific custom socket factory. " + customRMISocketFactory );
+            }
+        }
+        else
+        {
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "No server specific custom socket factory defined." );
+            }
+        }
+        return customRMISocketFactory;
+    }
+
+    /**
+     * Registers the server with the registry. I broke this off because we might want to have code
+     * that will restart a dead registry. It will need to rebind the server.
+     * <p>
+     * @param namingURL
+     * @param server
+     * @throws RemoteException
+     */
+    protected static void registerServer( String namingURL, Remote server )
+        throws RemoteException
+    {
+        if ( server == null )
+        {
+            throw new RemoteException( "Cannot register the server until it is created." );
+        }
+
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "Binding server to " + namingURL );
+        }
+
+        try
+        {
+            Naming.rebind( namingURL, server );
+        }
+        catch ( MalformedURLException ex )
+        {
+            // impossible case.
+            throw new IllegalArgumentException( ex.getMessage() + "; url=" + namingURL );
+        }
+    }
+
+    /**
+     * Configure.
+     * <p>
+     * jcs.remotecache.serverattributes.ATTRIBUTENAME=ATTRIBUTEVALUE
+     * <p>
+     * @param prop
+     * @return RemoteCacheServerAttributesconfigureRemoteCacheServerAttributes
+     */
+    protected static RemoteCacheServerAttributes configureRemoteCacheServerAttributes( Properties prop )
+    {
+        RemoteCacheServerAttributes rcsa = new RemoteCacheServerAttributes();
+
+        // configure automatically
+        PropertySetter.setProperties( rcsa, prop, CACHE_SERVER_ATTRIBUTES_PROPERTY_PREFIX + "." );
+
+        configureManuallyIfValuesArePresent( prop, rcsa );
+
+        return rcsa;
+    }
+
+    /**
+     * This looks for the old config values.
+     * <p>
+     * @param prop
+     * @param rcsa
+     */
+    private static void configureManuallyIfValuesArePresent( Properties prop, RemoteCacheServerAttributes rcsa )
+    {
+        // DEPRECATED CONFIG
+        String servicePortStr = prop.getProperty( REMOTE_CACHE_SERVICE_PORT );
+        if ( servicePortStr != null )
+        {
+            try
+            {
+                int servicePort = Integer.parseInt( servicePortStr );
+                rcsa.setServicePort( servicePort );
+                log.debug( "Remote cache service uses port number " + servicePort + "." );
+            }
+            catch ( NumberFormatException ignore )
+            {
+                log.debug( "Remote cache service port property " + REMOTE_CACHE_SERVICE_PORT
+                    + " not specified.  An anonymous port will be used." );
+            }
+        }
+
+        String socketTimeoutMillisStr = prop.getProperty( SOCKET_TIMEOUT_MILLIS );
+        if ( socketTimeoutMillisStr != null )
+        {
+            try
+            {
+                int rmiSocketFactoryTimeoutMillis = Integer.parseInt( socketTimeoutMillisStr );
+                rcsa.setRmiSocketFactoryTimeoutMillis( rmiSocketFactoryTimeoutMillis );
+                log.debug( "Remote cache socket timeout " + rmiSocketFactoryTimeoutMillis + "ms." );
+            }
+            catch ( NumberFormatException ignore )
+            {
+                log.debug( "Remote cache socket timeout property " + SOCKET_TIMEOUT_MILLIS
+                    + " not specified.  The default will be used." );
+            }
+        }
+
+        String lccStr = prop.getProperty( REMOTE_LOCAL_CLUSTER_CONSISTENCY );
+        if ( lccStr != null )
+        {
+            boolean lcc = Boolean.valueOf( lccStr ).booleanValue();
+            rcsa.setLocalClusterConsistency( lcc );
+        }
+
+        String acgStr = prop.getProperty( REMOTE_ALLOW_CLUSTER_GET );
+        if ( acgStr != null )
+        {
+            boolean acg = Boolean.valueOf( acgStr ).booleanValue();
+            rcsa.setAllowClusterGet( acg );
+        }
+
+        // Register the RemoteCacheServer remote object in the registry.
+        rcsa.setRemoteServiceName( prop.getProperty( REMOTE_CACHE_SERVICE_NAME, REMOTE_CACHE_SERVICE_VAL ).trim() );
+    }
+
+    /**
+     * Unbinds the remote server.
+     * <p>
+     * @param host
+     * @param port
+     * @throws IOException
+     */
+    static void shutdownImpl( String host, int port )
+        throws IOException
+    {
+        synchronized ( RemoteCacheServer.class )
+        {
+            if ( remoteCacheServer == null )
+            {
+                return;
+            }
+            log.info( "Unbinding host=" + host + ", port=" + port + ", serviceName=" + getServiceName() );
+            try
+            {
+                Naming.unbind( RemoteUtils.getNamingURL(host, port, getServiceName()) );
+            }
+            catch ( MalformedURLException ex )
+            {
+                // impossible case.
+                throw new IllegalArgumentException( ex.getMessage() + "; host=" + host + ", port=" + port
+                    + ", serviceName=" + getServiceName() );
+            }
+            catch ( NotBoundException ex )
+            {
+                // ignore.
+            }
+            remoteCacheServer.release();
+            remoteCacheServer = null;
+
+            // Shut down keepalive scheduler
+            if ( keepAliveDaemon != null )
+            {
+                keepAliveDaemon.shutdownNow();
+                keepAliveDaemon = null;
+            }
+
+            // Try to release registry
+            if (registry != null)
+            {
+            	UnicastRemoteObject.unexportObject(registry, true);
+            	registry = null;
+            }
+        }
+    }
+
+    /**
+     * Creates an local RMI registry on the default port, starts up the remote cache server, and
+     * binds it to the registry.
+     * <p>
+     * A remote cache is either a local cache or a cluster cache.
+     * <p>
+     * @param args The command line arguments
+     * @throws Exception
+     */
+    public static void main( String[] args )
+        throws Exception
+    {
+        Properties prop = args.length > 0 ? RemoteUtils.loadProps( args[args.length - 1] ) : new Properties();
+
+        int port;
+        try
+        {
+            port = Integer.parseInt( prop.getProperty( "registry.port" ) );
+        }
+        catch ( NumberFormatException ex )
+        {
+            port = Registry.REGISTRY_PORT;
+        }
+
+        // shutdown
+        if ( args.length > 0 && args[0].toLowerCase().indexOf( "-shutdown" ) != -1 )
+        {
+            String remoteServiceName = prop.getProperty( REMOTE_CACHE_SERVICE_NAME, REMOTE_CACHE_SERVICE_VAL ).trim();
+            String registry = RemoteUtils.getNamingURL("", port, remoteServiceName);
+
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "looking up server " + registry );
+            }
+            Object obj = Naming.lookup( registry );
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "server found" );
+            }
+            ICacheServiceAdmin admin = (ICacheServiceAdmin) obj;
+            try
+            {
+                admin.shutdown();
+            }
+            catch ( Exception ex )
+            {
+                log.error( "Problem calling shutdown.", ex );
+            }
+            log.debug( "done." );
+            System.exit( 0 );
+        }
+
+        // STATS
+        if ( args.length > 0 && args[0].toLowerCase().indexOf( "-stats" ) != -1 )
+        {
+
+            log.debug( "getting cache stats" );
+
+            try
+            {
+                String sz = prop.getProperty( REMOTE_CACHE_SERVICE_NAME, REMOTE_CACHE_SERVICE_VAL ).trim();
+                String registry = RemoteUtils.getNamingURL("", port, sz);
+                log.debug( "looking up server " + registry );
+                Object obj = Naming.lookup( registry );
+                log.debug( "server found" );
+
+                log.debug( "obj = " + obj );
+                ICacheServiceAdmin admin = (ICacheServiceAdmin) obj;
+
+                try
+                {
+//                    System.out.println( admin.getStats().toString() );
+                    log.debug( admin.getStats() );
+                }
+                catch ( Exception es )
+                {
+                    log.error( es );
+                }
+
+            }
+            catch ( Exception ex )
+            {
+                log.error( "Problem getting stats.", ex );
+            }
+            log.debug( "done." );
+            System.exit( 0 );
+        }
+
+        // startup.
+        String host = prop.getProperty( "registry.host" );
+
+        if ( host == null || host.trim().equals( "" ) || host.trim().equals( "localhost" ) )
+        {
+            log.debug( "main> creating registry on the localhost" );
+            RemoteUtils.createRegistry( port );
+        }
+        log.debug( "main> starting up RemoteCacheServer" );
+        RemoteCacheServerFactory.startup( host, port, args.length > 0 ? args[0] : null );
+        log.debug( "main> done" );
+    }
+
+    /**
+     * @param serviceName the serviceName to set
+     */
+    protected static void setServiceName( String serviceName )
+    {
+        RemoteCacheServerFactory.serviceName = serviceName;
+    }
+
+    /**
+     * @return the serviceName
+     */
+    protected static String getServiceName()
+    {
+        return serviceName;
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/server/RemoteCacheStartupServlet.java b/src/org/apache/commons/jcs/auxiliary/remote/server/RemoteCacheStartupServlet.java
new file mode 100644
index 0000000..e20b1d1
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/server/RemoteCacheStartupServlet.java
@@ -0,0 +1,216 @@
+package org.apache.commons.jcs.auxiliary.remote.server;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.access.exception.CacheException;
+import org.apache.commons.jcs.engine.control.CompositeCacheManager;
+import org.apache.commons.jcs.utils.net.HostNameUtil;
+import org.apache.commons.jcs.utils.props.PropertyLoader;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.UnknownHostException;
+import java.util.Properties;
+
+/**
+ * This servlet can be used to startup the JCS remote cache. It is easy to deploy the remote server
+ * in a tomcat base. This give you an easy way to monitor its activity.
+ * <p>
+ * <code>
+ *  <servlet>
+        <servlet-name>JCSRemoteCacheStartupServlet</servlet-name>
+        <servlet-class>
+             org.apache.commons.jcs.auxiliary.remote.server.RemoteCacheStartupServlet
+        </servlet-class>
+        <load-on-startup>1</load-on-startup>
+    </servlet>
+
+
+    <servlet-mapping>
+        <servlet-name>JCSRemoteCacheStartupServlet</servlet-name>
+        <url-pattern>/jcs</url-pattern>
+    </servlet-mapping>
+ * </code>
+ * @author Aaron Smuts
+ */
+public class RemoteCacheStartupServlet
+    extends HttpServlet
+{
+    /** Don't change */
+    private static final long serialVersionUID = 1L;
+
+    /** The logger */
+    private static final Log log = LogFactory.getLog( RemoteCacheStartupServlet.class );
+
+    /** The default port to start the registry on.  */
+    private static final int DEFAULT_REGISTRY_PORT = 1101;
+
+    /** properties file name */
+    private static final String DEFAULT_PROPS_FILE_NAME = "cache";
+
+    /** properties file Suffix */
+    private static final String DEFAULT_PROPS_FILE_SUFFIX = "ccf";
+
+    /** properties file name, must set prior to calling get instance */
+    private final String propsFileName = DEFAULT_PROPS_FILE_NAME;
+
+    /** properties file name, must set prior to calling get instance */
+    private final String fullPropsFileName = DEFAULT_PROPS_FILE_NAME + "." + DEFAULT_PROPS_FILE_SUFFIX;
+
+    /**
+     * Starts the registry and then tries to bind to it.
+     * <p>
+     * Gets the port from a props file. Uses the local host name for the registry host. Tries to
+     * start the registry, ignoring failure. Starts the server.
+     * <p>
+     * @throws ServletException
+     */
+    @Override
+    public void init()
+        throws ServletException
+    {
+        super.init();
+        // TODO load from props file or get as init param or get from jndi, or
+        // all three
+        int registryPort = DEFAULT_REGISTRY_PORT;
+
+        Properties props = PropertyLoader.loadProperties( propsFileName );
+        if ( props != null )
+        {
+            String portS = props.getProperty( "registry.port", String.valueOf( DEFAULT_REGISTRY_PORT ) );
+
+            try
+            {
+                registryPort = Integer.parseInt( portS );
+            }
+            catch ( NumberFormatException e )
+            {
+                log.error( "Problem converting port to an int.", e );
+            }
+        }
+
+        // we will always use the local machine for the registry
+        String registryHost;
+        try
+        {
+            registryHost = HostNameUtil.getLocalHostAddress();
+
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "registryHost = [" + registryHost + "]" );
+            }
+
+            if ( "localhost".equals( registryHost ) || "127.0.0.1".equals( registryHost ) )
+            {
+                log.warn( "The local address [" + registryHost
+                    + "] is INVALID.  Other machines must be able to use the address to reach this server." );
+            }
+
+            try
+            {
+                RemoteCacheServerFactory.startup( registryHost, registryPort, "/" + fullPropsFileName );
+                if ( log.isInfoEnabled() )
+                {
+                    log.info( "Remote JCS Server started with properties from " + fullPropsFileName );
+                }
+            }
+            catch ( IOException e )
+            {
+                log.error( "Problem starting remote cache server.", e );
+            }
+        }
+        catch ( UnknownHostException e )
+        {
+            log.error( "Could not get local address to use for the registry!", e );
+        }
+    }
+
+    /**
+     * It just dumps the stats.
+     * <p>
+     * @param request
+     * @param response
+     * @throws ServletException
+     * @throws IOException
+     */
+    @Override
+    protected void service( HttpServletRequest request, HttpServletResponse response )
+        throws ServletException, IOException
+    {
+        String stats = "";
+
+        try
+        {
+            stats = CompositeCacheManager.getInstance().getStats();
+        }
+        catch (CacheException e)
+        {
+            throw new ServletException(e);
+        }
+
+        if ( log.isInfoEnabled() )
+        {
+            log.info( stats );
+        }
+
+        try
+        {
+            String characterEncoding = response.getCharacterEncoding();
+            if (characterEncoding == null)
+            {
+                characterEncoding = "UTF-8";
+                response.setCharacterEncoding(characterEncoding);
+            }
+            OutputStream os = response.getOutputStream();
+            os.write( stats.getBytes(characterEncoding) );
+            os.close();
+        }
+        catch ( IOException e )
+        {
+            log.error( "Problem writing response.", e );
+        }
+    }
+
+    /**
+     * shuts the cache down.
+     */
+    @Override
+    public void destroy()
+    {
+        super.destroy();
+
+        log.info( "Shutting down remote cache " );
+
+        try
+        {
+            CompositeCacheManager.getInstance().shutDown();
+        }
+        catch (CacheException e)
+        {
+            log.error("Could not retrieve cache manager instance", e);
+        }
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/server/TimeoutConfigurableRMISocketFactory.java b/src/org/apache/commons/jcs/auxiliary/remote/server/TimeoutConfigurableRMISocketFactory.java
new file mode 100644
index 0000000..7d1f31a
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/server/TimeoutConfigurableRMISocketFactory.java
@@ -0,0 +1,111 @@
+package org.apache.commons.jcs.auxiliary.remote.server;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.net.InetSocketAddress;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.rmi.server.RMISocketFactory;
+
+/**
+ * This can be injected into the the remote cache server as follows:
+ *
+ * <pre>
+ * jcs.remotecache.customrmisocketfactory=org.apache.commons.jcs.auxiliary.remote.server.TimeoutConfigurableRMISocketFactory
+ * jcs.remotecache.customrmisocketfactory.readTimeout=5000
+ * jcs.remotecache.customrmisocketfactory.openTimeout=5000
+ * </pre>
+ */
+public class TimeoutConfigurableRMISocketFactory
+    extends RMISocketFactory
+    implements Serializable
+{
+    /** Don't change. */
+    private static final long serialVersionUID = 1489909775271203334L;
+
+    /** The socket read timeout */
+    private int readTimeout = 5000;
+
+    /** The socket open timeout */
+    private int openTimeout = 5000;
+
+    /**
+     * @param port
+     * @return ServerSocket
+     * @throws IOException
+     */
+    @Override
+    public ServerSocket createServerSocket( int port )
+        throws IOException
+    {
+        return new ServerSocket( port );
+    }
+
+    /**
+     * @param host
+     * @param port
+     * @return Socket
+     * @throws IOException
+     */
+    @Override
+    public Socket createSocket( String host, int port )
+        throws IOException
+    {
+        Socket socket = new Socket();
+        socket.setSoTimeout( readTimeout );
+        socket.setSoLinger( false, 0 );
+        socket.connect( new InetSocketAddress( host, port ), openTimeout );
+        return socket;
+    }
+
+    /**
+     * @param readTimeout the readTimeout to set
+     */
+    public void setReadTimeout( int readTimeout )
+    {
+        this.readTimeout = readTimeout;
+    }
+
+    /**
+     * @return the readTimeout
+     */
+    public int getReadTimeout()
+    {
+        return readTimeout;
+    }
+
+    /**
+     * @param openTimeout the openTimeout to set
+     */
+    public void setOpenTimeout( int openTimeout )
+    {
+        this.openTimeout = openTimeout;
+    }
+
+    /**
+     * @return the openTimeout
+     */
+    public int getOpenTimeout()
+    {
+        return openTimeout;
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/server/behavior/IRemoteCacheServer.java b/src/org/apache/commons/jcs/auxiliary/remote/server/behavior/IRemoteCacheServer.java
new file mode 100644
index 0000000..8799b5a
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/server/behavior/IRemoteCacheServer.java
@@ -0,0 +1,37 @@
+package org.apache.commons.jcs.auxiliary.remote.server.behavior;
+
+import java.rmi.Remote;
+import org.apache.commons.jcs.engine.behavior.ICacheObserver;
+import org.apache.commons.jcs.engine.behavior.ICacheServiceAdmin;
+import org.apache.commons.jcs.engine.behavior.ICacheServiceNonLocal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Interface for managing Remote objects
+ *
+ * @author Thomas Vandahl
+ *
+ */
+public interface IRemoteCacheServer<K, V>
+    extends ICacheServiceNonLocal<K, V>, ICacheObserver, ICacheServiceAdmin, Remote
+{
+    // empty
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/server/behavior/IRemoteCacheServerAttributes.java b/src/org/apache/commons/jcs/auxiliary/remote/server/behavior/IRemoteCacheServerAttributes.java
new file mode 100644
index 0000000..2f968dc
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/server/behavior/IRemoteCacheServerAttributes.java
@@ -0,0 +1,118 @@
+package org.apache.commons.jcs.auxiliary.remote.server.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.remote.behavior.ICommonRemoteCacheAttributes;
+
+/**
+ * This defines the minimal behavior for the objects that are used to configure
+ * the remote cache server.
+ */
+public interface IRemoteCacheServerAttributes
+    extends ICommonRemoteCacheAttributes
+{
+    /**
+     * Gets the localPort attribute of the IRemoteCacheAttributes object.
+     * <p>
+     * @return The localPort value
+     */
+    int getServicePort();
+
+    /**
+     * Sets the localPort attribute of the IRemoteCacheAttributes object.
+     * <p>
+     * @param p
+     *            The new localPort value
+     */
+    void setServicePort( int p );
+
+    /**
+     * Should we try to get remotely when the request does not come in from a
+     * cluster. If local L1 asks remote server R1 for element A and R1 doesn't
+     * have it, should R1 look remotely? The difference is between a local and a
+     * remote update. The local update stays local. Normal updates, removes,
+     * etc, stay local when they come from a client. If this is set to true,
+     * then they can go remote.
+     * <p>
+     * @return The localClusterConsistency value
+     */
+    boolean isAllowClusterGet();
+
+    /**
+     * Should cluster updates be propagated to the locals.
+     * <p>
+     * @param r
+     *            The new localClusterConsistency value
+     */
+    void setAllowClusterGet( boolean r );
+
+    /**
+     * Gets the ConfigFileName attribute of the IRemoteCacheAttributes object.
+     * <p>
+     * @return The clusterServers value
+     */
+    String getConfigFileName();
+
+    /**
+     * Sets the ConfigFileName attribute of the IRemoteCacheAttributes object.
+     * <p>
+     * @param s
+     *            The new clusterServers value
+     */
+    void setConfigFileName( String s );
+
+    /**
+     * Should we try to keep the registry alive
+     * <p>
+     * @param useRegistryKeepAlive the useRegistryKeepAlive to set
+     */
+    void setUseRegistryKeepAlive( boolean useRegistryKeepAlive );
+
+    /**
+     * Should we start the registry
+     * <p>
+     * @param startRegistry the startRegistry to set
+     */
+    void setStartRegistry( boolean startRegistry );
+
+    /**
+     * Should we start the registry
+     * <p>
+     * @return the startRegistry
+     */
+    boolean isStartRegistry();
+
+    /**
+     * Should we try to keep the registry alive
+     * <p>
+     * @return the useRegistryKeepAlive
+     */
+    boolean isUseRegistryKeepAlive();
+
+    /**
+     * @param registryKeepAliveDelayMillis the registryKeepAliveDelayMillis to set
+     */
+    void setRegistryKeepAliveDelayMillis( long registryKeepAliveDelayMillis );
+
+    /**
+     * @return the registryKeepAliveDelayMillis
+     */
+    long getRegistryKeepAliveDelayMillis();
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/server/behavior/RemoteType.java b/src/org/apache/commons/jcs/auxiliary/remote/server/behavior/RemoteType.java
new file mode 100644
index 0000000..31c7cbf
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/server/behavior/RemoteType.java
@@ -0,0 +1,32 @@
+package org.apache.commons.jcs.auxiliary.remote.server.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Enum to describe the mode of the remote cache
+ */
+public enum RemoteType
+{
+    /** A remote cache is either a local cache or a cluster cache */
+    LOCAL,
+
+    /** A remote cache is either a local cache or a cluster cache */
+    CLUSTER
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/util/RemoteCacheRequestFactory.java b/src/org/apache/commons/jcs/auxiliary/remote/util/RemoteCacheRequestFactory.java
new file mode 100644
index 0000000..78c3941
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/util/RemoteCacheRequestFactory.java
@@ -0,0 +1,254 @@
+package org.apache.commons.jcs.auxiliary.remote.util;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.remote.value.RemoteCacheRequest;
+import org.apache.commons.jcs.auxiliary.remote.value.RemoteRequestType;
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.util.Set;
+
+/**
+ * This creates request objects. You could write your own client and use the objects from this
+ * factory.
+ */
+public class RemoteCacheRequestFactory
+{
+    /** The Logger. */
+    private static final Log log = LogFactory.getLog( RemoteCacheRequestFactory.class );
+
+    /**
+     * Creates a get Request.
+     * <p>
+     * @param cacheName
+     * @param key
+     * @param requesterId
+     * @return RemoteHttpCacheRequest
+     */
+    public static <K, V> RemoteCacheRequest<K, V> createGetRequest( String cacheName, K key, long requesterId )
+    {
+        RemoteCacheRequest<K, V> request = new RemoteCacheRequest<K, V>();
+        request.setCacheName( cacheName );
+        request.setKey( key );
+        request.setRequesterId( requesterId );
+        request.setRequestType( RemoteRequestType.GET );
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Created: " + request );
+        }
+
+        return request;
+    }
+
+    /**
+     * Creates a getMatching Request.
+     * <p>
+     * @param cacheName
+     * @param pattern
+     * @param requesterId
+     * @return RemoteHttpCacheRequest
+     */
+    public static <K, V> RemoteCacheRequest<K, V> createGetMatchingRequest( String cacheName, String pattern, long requesterId )
+    {
+        RemoteCacheRequest<K, V> request = new RemoteCacheRequest<K, V>();
+        request.setCacheName( cacheName );
+        request.setPattern( pattern );
+        request.setRequesterId( requesterId );
+        request.setRequestType( RemoteRequestType.GET_MATCHING );
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Created: " + request );
+        }
+
+        return request;
+    }
+
+    /**
+     * Creates a getMultiple Request.
+     * <p>
+     * @param cacheName
+     * @param keys
+     * @param requesterId
+     * @return RemoteHttpCacheRequest
+     */
+    public static <K, V> RemoteCacheRequest<K, V> createGetMultipleRequest( String cacheName, Set<K> keys, long requesterId )
+    {
+        RemoteCacheRequest<K, V> request = new RemoteCacheRequest<K, V>();
+        request.setCacheName( cacheName );
+        request.setKeySet( keys );
+        request.setRequesterId( requesterId );
+        request.setRequestType( RemoteRequestType.GET_MULTIPLE );
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Created: " + request );
+        }
+
+        return request;
+    }
+
+    /**
+     * Creates a remove Request.
+     * <p>
+     * @param cacheName
+     * @param key
+     * @param requesterId
+     * @return RemoteHttpCacheRequest
+     */
+    public static <K, V> RemoteCacheRequest<K, V> createRemoveRequest( String cacheName, K key, long requesterId )
+    {
+        RemoteCacheRequest<K, V> request = new RemoteCacheRequest<K, V>();
+        request.setCacheName( cacheName );
+        request.setKey( key );
+        request.setRequesterId( requesterId );
+        request.setRequestType( RemoteRequestType.REMOVE );
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Created: " + request );
+        }
+
+        return request;
+    }
+
+    /**
+     * Creates a GetKeySet Request.
+     * <p>
+     * @param cacheName
+     * @param requesterId
+     * @return RemoteHttpCacheRequest
+     */
+    public static RemoteCacheRequest<String, String> createGetKeySetRequest( String cacheName, long requesterId )
+    {
+        RemoteCacheRequest<String, String> request = new RemoteCacheRequest<String, String>();
+        request.setCacheName( cacheName );
+        request.setKey( cacheName );
+        request.setRequesterId( requesterId );
+        request.setRequestType( RemoteRequestType.GET_KEYSET );
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Created: " + request );
+        }
+
+        return request;
+    }
+
+    /**
+     * Creates a removeAll Request.
+     * <p>
+     * @param cacheName
+     * @param requesterId
+     * @return RemoteHttpCacheRequest
+     */
+    public static <K, V> RemoteCacheRequest<K, V> createRemoveAllRequest( String cacheName, long requesterId )
+    {
+        RemoteCacheRequest<K, V> request = new RemoteCacheRequest<K, V>();
+        request.setCacheName( cacheName );
+        request.setRequesterId( requesterId );
+        request.setRequestType( RemoteRequestType.REMOVE_ALL );
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Created: " + request );
+        }
+
+        return request;
+    }
+
+    /**
+     * Creates a dispose Request.
+     * <p>
+     * @param cacheName
+     * @param requesterId
+     * @return RemoteHttpCacheRequest
+     */
+    public static <K, V> RemoteCacheRequest<K, V> createDisposeRequest( String cacheName, long requesterId )
+    {
+        RemoteCacheRequest<K, V> request = new RemoteCacheRequest<K, V>();
+        request.setCacheName( cacheName );
+        request.setRequesterId( requesterId );
+        request.setRequestType( RemoteRequestType.DISPOSE );
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Created: " + request );
+        }
+
+        return request;
+    }
+
+    /**
+     * Creates an Update Request.
+     * <p>
+     * @param cacheElement
+     * @param requesterId
+     * @return RemoteHttpCacheRequest
+     */
+    public static <K, V> RemoteCacheRequest<K, V> createUpdateRequest( ICacheElement<K, V> cacheElement, long requesterId )
+    {
+        RemoteCacheRequest<K, V> request = new RemoteCacheRequest<K, V>();
+        if ( cacheElement != null )
+        {
+            request.setCacheName( cacheElement.getCacheName() );
+            request.setCacheElement( cacheElement );
+            request.setKey( cacheElement.getKey() );
+        }
+        else
+        {
+            log.error( "Can't create a proper update request for a null cache element." );
+        }
+        request.setRequesterId( requesterId );
+        request.setRequestType( RemoteRequestType.UPDATE );
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Created: " + request );
+        }
+
+        return request;
+    }
+
+    /**
+     * Creates an alive check Request.
+     * <p>
+     * @param requesterId
+     * @return RemoteHttpCacheRequest
+     */
+    public static <K, V> RemoteCacheRequest<K, V> createAliveCheckRequest( long requesterId )
+    {
+        RemoteCacheRequest<K, V> request = new RemoteCacheRequest<K, V>();
+        request.setRequesterId( requesterId );
+        request.setRequestType( RemoteRequestType.ALIVE_CHECK );
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Created: " + request );
+        }
+
+        return request;
+    }
+
+
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/value/RemoteCacheRequest.java b/src/org/apache/commons/jcs/auxiliary/remote/value/RemoteCacheRequest.java
new file mode 100644
index 0000000..b99ef2d
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/value/RemoteCacheRequest.java
@@ -0,0 +1,187 @@
+package org.apache.commons.jcs.auxiliary.remote.value;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+
+import java.io.Serializable;
+import java.util.Set;
+
+/**
+ * The basic request wrapper. The different types of requests are differentiated by their types.
+ * <p>
+ * Rather than creating sub object types, I created on object that has values for all types of
+ * requests.
+ */
+public class RemoteCacheRequest<K, V>
+    implements Serializable
+{
+    /** Don't change. */
+    private static final long serialVersionUID = -8858447417390442569L;
+
+    /** The request type specifies the type of request: get, put, remove, . . */
+    private RemoteRequestType requestType = null;
+
+    /** Used to identify the source. Same as listener id on the client side. */
+    private long requesterId = 0;
+
+    /** The name of the region */
+    private String cacheName;
+
+    /** The key, if this request has a key. */
+    private K key;
+
+    /** The keySet, if this request has a keySet. Only getMultiple requests. */
+    private Set<K> keySet;
+
+    /** The pattern, if this request uses a pattern. Only getMatching requests. */
+    private String pattern;
+
+    /** The ICacheEleemnt, if this request contains a value. Only update requests will have this. */
+    private ICacheElement<K, V> cacheElement;
+
+    /**
+     * @param requestType the requestType to set
+     */
+    public void setRequestType( RemoteRequestType requestType )
+    {
+        this.requestType = requestType;
+    }
+
+    /**
+     * @return the requestType
+     */
+    public RemoteRequestType getRequestType()
+    {
+        return requestType;
+    }
+
+    /**
+     * @param cacheName the cacheName to set
+     */
+    public void setCacheName( String cacheName )
+    {
+        this.cacheName = cacheName;
+    }
+
+    /**
+     * @return the cacheName
+     */
+    public String getCacheName()
+    {
+        return cacheName;
+    }
+
+    /**
+     * @param key the key to set
+     */
+    public void setKey( K key )
+    {
+        this.key = key;
+    }
+
+    /**
+     * @return the key
+     */
+    public K getKey()
+    {
+        return key;
+    }
+
+    /**
+     * @param pattern the pattern to set
+     */
+    public void setPattern( String pattern )
+    {
+        this.pattern = pattern;
+    }
+
+    /**
+     * @return the pattern
+     */
+    public String getPattern()
+    {
+        return pattern;
+    }
+
+    /**
+     * @param cacheElement the cacheElement to set
+     */
+    public void setCacheElement( ICacheElement<K, V> cacheElement )
+    {
+        this.cacheElement = cacheElement;
+    }
+
+    /**
+     * @return the cacheElement
+     */
+    public ICacheElement<K, V> getCacheElement()
+    {
+        return cacheElement;
+    }
+
+    /**
+     * @param requesterId the requesterId to set
+     */
+    public void setRequesterId( long requesterId )
+    {
+        this.requesterId = requesterId;
+    }
+
+    /**
+     * @return the requesterId
+     */
+    public long getRequesterId()
+    {
+        return requesterId;
+    }
+
+    /**
+     * @param keySet the keySet to set
+     */
+    public void setKeySet( Set<K> keySet )
+    {
+        this.keySet = keySet;
+    }
+
+    /**
+     * @return the keySet
+     */
+    public Set<K> getKeySet()
+    {
+        return keySet;
+    }
+
+    /** @return string */
+    @Override
+    public String toString()
+    {
+        StringBuilder buf = new StringBuilder();
+        buf.append( "\nRemoteHttpCacheRequest" );
+        buf.append( "\n requesterId [" + getRequesterId() + "]" );
+        buf.append( "\n requestType [" + getRequestType() + "]" );
+        buf.append( "\n cacheName [" + getCacheName() + "]" );
+        buf.append( "\n key [" + getKey() + "]" );
+        buf.append( "\n keySet [" + getKeySet() + "]" );
+        buf.append( "\n pattern [" + getPattern() + "]" );
+        buf.append( "\n cacheElement [" + getCacheElement() + "]" );
+        return buf.toString();
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/value/RemoteCacheResponse.java b/src/org/apache/commons/jcs/auxiliary/remote/value/RemoteCacheResponse.java
new file mode 100644
index 0000000..aaa94f3
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/value/RemoteCacheResponse.java
@@ -0,0 +1,105 @@
+package org.apache.commons.jcs.auxiliary.remote.value;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.Serializable;
+
+/**
+ * This is the response wrapper. The servlet wraps all different type of responses in one of these
+ * objects.
+ */
+public class RemoteCacheResponse<T>
+    implements Serializable
+{
+    /** Don't change. */
+    private static final long serialVersionUID = -8858447417390442568L;
+
+    /** Was the event processed without error */
+    private boolean success = true;
+
+    /** Simple error messaging */
+    private String errorMessage;
+
+    /**
+     * The payload. Typically a key / ICacheElement<K, V> map. A normal get will return a map with one
+     * record.
+     */
+    private T payload;
+
+    /**
+     * @param success the success to set
+     */
+    public void setSuccess( boolean success )
+    {
+        this.success = success;
+    }
+
+    /**
+     * @return the success
+     */
+    public boolean isSuccess()
+    {
+        return success;
+    }
+
+    /**
+     * @param errorMessage the errorMessage to set
+     */
+    public void setErrorMessage( String errorMessage )
+    {
+        this.errorMessage = errorMessage;
+    }
+
+    /**
+     * @return the errorMessage
+     */
+    public String getErrorMessage()
+    {
+        return errorMessage;
+    }
+
+    /**
+     * @param payload the payload to set
+     */
+    public void setPayload( T payload )
+    {
+        this.payload = payload;
+    }
+
+    /**
+     * @return the payload
+     */
+    public T getPayload()
+    {
+        return payload;
+    }
+
+    /** @return string */
+    @Override
+    public String toString()
+    {
+        StringBuilder buf = new StringBuilder();
+        buf.append( "\nRemoteHttpCacheResponse" );
+        buf.append( "\n success [" + isSuccess() + "]" );
+        buf.append( "\n payload [" + getPayload() + "]" );
+        buf.append( "\n errorMessage [" + getErrorMessage() + "]" );
+        return buf.toString();
+    }
+}
diff --git a/src/org/apache/commons/jcs/auxiliary/remote/value/RemoteRequestType.java b/src/org/apache/commons/jcs/auxiliary/remote/value/RemoteRequestType.java
new file mode 100644
index 0000000..ea6d4e1
--- /dev/null
+++ b/src/org/apache/commons/jcs/auxiliary/remote/value/RemoteRequestType.java
@@ -0,0 +1,53 @@
+package org.apache.commons.jcs.auxiliary.remote.value;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * The different types of requests
+ */
+public enum RemoteRequestType
+{
+    /** Alive check request type. */
+    ALIVE_CHECK,
+
+    /** Get request type. */
+    GET,
+
+    /** Get Multiple request type. */
+    GET_MULTIPLE,
+
+    /** Get Matching request type. */
+    GET_MATCHING,
+
+    /** Update request type. */
+    UPDATE,
+
+    /** Remove request type. */
+    REMOVE,
+
+    /** Remove All request type. */
+    REMOVE_ALL,
+
+    /** Get keys request type. */
+    GET_KEYSET,
+
+    /** Dispose request type. */
+    DISPOSE,
+}
diff --git a/src/org/apache/commons/jcs/engine/AbstractCacheEventQueue.java b/src/org/apache/commons/jcs/engine/AbstractCacheEventQueue.java
new file mode 100644
index 0000000..e421843
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/AbstractCacheEventQueue.java
@@ -0,0 +1,499 @@
+package org.apache.commons.jcs.engine;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.behavior.ICacheEventQueue;
+import org.apache.commons.jcs.engine.behavior.ICacheListener;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.IOException;
+
+/**
+ * An abstract base class to the different implementations
+ */
+public abstract class AbstractCacheEventQueue<K, V>
+    implements ICacheEventQueue<K, V>
+{
+    /** The logger. */
+    private static final Log log = LogFactory.getLog( AbstractCacheEventQueue.class );
+
+    /** default */
+    protected static final int DEFAULT_WAIT_TO_DIE_MILLIS = 10000;
+
+    /**
+     * time to wait for an event before snuffing the background thread if the queue is empty. make
+     * configurable later
+     */
+    private int waitToDieMillis = DEFAULT_WAIT_TO_DIE_MILLIS;
+
+    // TODO privatise the fields
+
+    /**
+     * When the events are pulled off the queue, the tell the listener to handle the specific event
+     * type. The work is done by the listener.
+     */
+    protected ICacheListener<K, V> listener;
+
+    /** Id of the listener registered with this queue */
+    protected long listenerId;
+
+    /** The cache region name, if applicable. */
+    protected String cacheName;
+
+    /** Maximum number of failures before we buy the farm. */
+    protected int maxFailure;
+
+    /** in milliseconds */
+    protected int waitBeforeRetry;
+
+    /** this is true if there is no worker thread. */
+    protected boolean destroyed = true;
+
+    /**
+     * This means that the queue is functional. If we reached the max number of failures, the queue
+     * is marked as non functional and will never work again.
+     */
+    private boolean working = true;
+
+    /**
+     * Returns the time to wait for events before killing the background thread.
+     * <p>
+     * @return int
+     */
+    public int getWaitToDieMillis()
+    {
+        return waitToDieMillis;
+    }
+
+    /**
+     * Sets the time to wait for events before killing the background thread.
+     * <p>
+     * @param wtdm the ms for the q to sit idle.
+     */
+    public void setWaitToDieMillis( int wtdm )
+    {
+        waitToDieMillis = wtdm;
+    }
+
+    /**
+     * Creates a brief string identifying the listener and the region.
+     * <p>
+     * @return String debugging info.
+     */
+    @Override
+    public String toString()
+    {
+        return "CacheEventQueue [listenerId=" + listenerId + ", cacheName=" + cacheName + "]";
+    }
+
+    /**
+     * If they queue has an active thread it is considered alive.
+     * <p>
+     * @return The alive value
+     */
+    @Override
+    public synchronized boolean isAlive()
+    {
+        return !destroyed;
+    }
+
+    /**
+     * Sets whether the queue is actively processing -- if there are working threads.
+     * <p>
+     * @param aState
+     */
+    public synchronized void setAlive( boolean aState )
+    {
+        destroyed = !aState;
+    }
+
+    /**
+     * @return The listenerId value
+     */
+    @Override
+    public long getListenerId()
+    {
+        return listenerId;
+    }
+
+    /**
+     * This adds a put event to the queue. When it is processed, the element will be put to the
+     * listener.
+     * <p>
+     * @param ce The feature to be added to the PutEvent attribute
+     * @throws IOException
+     */
+    @Override
+    public synchronized void addPutEvent( ICacheElement<K, V> ce )
+        throws IOException
+    {
+        if ( isWorking() )
+        {
+            put( new PutEvent( ce ) );
+        }
+        else
+        {
+            if ( log.isWarnEnabled() )
+            {
+                log.warn( "Not enqueuing Put Event for [" + this + "] because it's non-functional." );
+            }
+        }
+    }
+
+    /**
+     * This adds a remove event to the queue. When processed the listener's remove method will be
+     * called for the key.
+     * <p>
+     * @param key The feature to be added to the RemoveEvent attribute
+     * @throws IOException
+     */
+    @Override
+    public synchronized void addRemoveEvent( K key )
+        throws IOException
+    {
+        if ( isWorking() )
+        {
+            put( new RemoveEvent( key ) );
+        }
+        else
+        {
+            if ( log.isWarnEnabled() )
+            {
+                log.warn( "Not enqueuing Remove Event for [" + this + "] because it's non-functional." );
+            }
+        }
+    }
+
+    /**
+     * This adds a remove all event to the queue. When it is processed, all elements will be removed
+     * from the cache.
+     * <p>
+     * @throws IOException
+     */
+    @Override
+    public synchronized void addRemoveAllEvent()
+        throws IOException
+    {
+        if ( isWorking() )
+        {
+            put( new RemoveAllEvent() );
+        }
+        else
+        {
+            if ( log.isWarnEnabled() )
+            {
+                log.warn( "Not enqueuing RemoveAll Event for [" + this + "] because it's non-functional." );
+            }
+        }
+    }
+
+    /**
+     * @throws IOException
+     */
+    @Override
+    public synchronized void addDisposeEvent()
+        throws IOException
+    {
+        if ( isWorking() )
+        {
+            put( new DisposeEvent() );
+        }
+        else
+        {
+            if ( log.isWarnEnabled() )
+            {
+                log.warn( "Not enqueuing Dispose Event for [" + this + "] because it's non-functional." );
+            }
+        }
+    }
+
+    /**
+     * Adds an event to the queue.
+     * <p>
+     * @param event
+     */
+    protected abstract void put( AbstractCacheEvent event );
+
+
+    // /////////////////////////// Inner classes /////////////////////////////
+
+    /** The queue is composed of nodes. */
+    protected static class Node
+    {
+        /** Next node in the singly linked list. */
+        Node next = null;
+
+        /** The payload. */
+        AbstractCacheEventQueue<?, ?>.AbstractCacheEvent event = null;
+    }
+
+    /**
+     * Retries before declaring failure.
+     * <p>
+     * @author asmuts
+     */
+    protected abstract class AbstractCacheEvent
+        implements Runnable
+    {
+        /** Number of failures encountered processing this event. */
+        int failures = 0;
+
+        /**
+         * Main processing method for the AbstractCacheEvent object
+         */
+        @SuppressWarnings("synthetic-access")
+        @Override
+        public void run()
+        {
+            try
+            {
+                doRun();
+            }
+            catch ( IOException e )
+            {
+                if ( log.isWarnEnabled() )
+                {
+                    log.warn( e );
+                }
+                if ( ++failures >= maxFailure )
+                {
+                    if ( log.isWarnEnabled() )
+                    {
+                        log.warn( "Error while running event from Queue: " + this
+                            + ". Dropping Event and marking Event Queue as non-functional." );
+                    }
+                    setWorking( false );
+                    setAlive( false );
+                    return;
+                }
+                if ( log.isInfoEnabled() )
+                {
+                    log.info( "Error while running event from Queue: " + this + ". Retrying..." );
+                }
+                try
+                {
+                    Thread.sleep( waitBeforeRetry );
+                    run();
+                }
+                catch ( InterruptedException ie )
+                {
+                    if ( log.isErrorEnabled() )
+                    {
+                        log.warn( "Interrupted while sleeping for retry on event " + this + "." );
+                    }
+                    // TODO consider if this is best. maybe we should just
+                    // destroy
+                    setWorking( false );
+                    setAlive( false );
+                }
+            }
+        }
+
+        /**
+         * @throws IOException
+         */
+        protected abstract void doRun()
+            throws IOException;
+    }
+
+    /**
+     * An element should be put in the cache.
+     * <p>
+     * @author asmuts
+     */
+    protected class PutEvent
+        extends AbstractCacheEvent
+    {
+        /** The element to put to the listener */
+        private final ICacheElement<K, V> ice;
+
+        /**
+         * Constructor for the PutEvent object.
+         * <p>
+         * @param ice
+         * @throws IOException
+         */
+        PutEvent( ICacheElement<K, V> ice )
+            throws IOException
+        {
+            this.ice = ice;
+        }
+
+        /**
+         * Call put on the listener.
+         * <p>
+         * @throws IOException
+         */
+        @Override
+        protected void doRun()
+            throws IOException
+        {
+            listener.handlePut( ice );
+        }
+
+        /**
+         * For debugging.
+         * <p>
+         * @return Info on the key and value.
+         */
+        @Override
+        public String toString()
+        {
+            return new StringBuilder( "PutEvent for key: " ).append( ice.getKey() ).append( " value: " )
+                .append( ice.getVal() ).toString();
+        }
+
+    }
+
+    /**
+     * An element should be removed from the cache.
+     * <p>
+     * @author asmuts
+     */
+    protected class RemoveEvent
+        extends AbstractCacheEvent
+    {
+        /** The key to remove from the listener */
+        private final K key;
+
+        /**
+         * Constructor for the RemoveEvent object
+         * <p>
+         * @param key
+         * @throws IOException
+         */
+        RemoveEvent( K key )
+            throws IOException
+        {
+            this.key = key;
+        }
+
+        /**
+         * Call remove on the listener.
+         * <p>
+         * @throws IOException
+         */
+        @Override
+        protected void doRun()
+            throws IOException
+        {
+            listener.handleRemove( cacheName, key );
+        }
+
+        /**
+         * For debugging.
+         * <p>
+         * @return Info on the key to remove.
+         */
+        @Override
+        public String toString()
+        {
+            return new StringBuilder( "RemoveEvent for " ).append( key ).toString();
+        }
+
+    }
+
+    /**
+     * All elements should be removed from the cache when this event is processed.
+     * <p>
+     * @author asmuts
+     */
+    protected class RemoveAllEvent
+        extends AbstractCacheEvent
+    {
+        /**
+         * Call removeAll on the listener.
+         * <p>
+         * @throws IOException
+         */
+        @Override
+        protected void doRun()
+            throws IOException
+        {
+            listener.handleRemoveAll( cacheName );
+        }
+
+        /**
+         * For debugging.
+         * <p>
+         * @return The name of the event.
+         */
+        @Override
+        public String toString()
+        {
+            return "RemoveAllEvent";
+        }
+
+    }
+
+    /**
+     * The cache should be disposed when this event is processed.
+     * <p>
+     * @author asmuts
+     */
+    protected class DisposeEvent
+        extends AbstractCacheEvent
+    {
+        /**
+         * Called when gets to the end of the queue
+         * <p>
+         * @throws IOException
+         */
+        @Override
+        protected void doRun()
+            throws IOException
+        {
+            listener.handleDispose( cacheName );
+        }
+
+        /**
+         * For debugging.
+         * <p>
+         * @return The name of the event.
+         */
+        @Override
+        public String toString()
+        {
+            return "DisposeEvent";
+        }
+    }
+
+    /**
+     * @return whether the queue is functional.
+     */
+    @Override
+    public boolean isWorking()
+    {
+        return working;
+    }
+
+    /**
+     * This means that the queue is functional. If we reached the max number of failures, the queue
+     * is marked as non functional and will never work again.
+     * <p>
+     * @param b
+     */
+    public void setWorking( boolean b )
+    {
+        working = b;
+    }
+}
diff --git a/src/org/apache/commons/jcs/engine/CacheAdaptor.java b/src/org/apache/commons/jcs/engine/CacheAdaptor.java
new file mode 100644
index 0000000..7554a31
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/CacheAdaptor.java
@@ -0,0 +1,143 @@
+package org.apache.commons.jcs.engine;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.behavior.ICache;
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.behavior.ICacheListener;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.IOException;
+
+/**
+ * Used for Cache-to-Cache messaging purposes. These are used in the balking
+ * facades in the lateral and remote caches.
+ */
+public class CacheAdaptor<K, V>
+    implements ICacheListener<K, V>
+{
+    /** The logger */
+    private static final Log log = LogFactory.getLog( CacheAdaptor.class );
+
+    /** The cache we are adapting. */
+    private final ICache<K, V> cache;
+
+    /** The unique id of this listener. */
+    private long listenerId = 0;
+
+    /**
+     * Sets the listenerId attribute of the CacheAdaptor object
+     * <p>
+     * @param id
+     *            The new listenerId value
+     * @throws IOException
+     */
+    @Override
+    public void setListenerId( long id )
+        throws IOException
+    {
+        this.listenerId = id;
+        log.debug( "listenerId = " + id );
+    }
+
+    /**
+     * Gets the listenerId attribute of the CacheAdaptor object
+     * <p>
+     * @return The listenerId value
+     * @throws IOException
+     */
+    @Override
+    public long getListenerId()
+        throws IOException
+    {
+        return this.listenerId;
+    }
+
+    /**
+     * Constructor for the CacheAdaptor object
+     * <p>
+     * @param cache
+     */
+    public CacheAdaptor( ICache<K, V> cache )
+    {
+        this.cache = cache;
+    }
+
+    /**
+     * Puts an item into the cache.
+     * <p>
+     * @param item
+     * @throws IOException
+     */
+    @Override
+    public void handlePut( ICacheElement<K, V> item )
+        throws IOException
+    {
+        try
+        {
+            cache.update( item );
+        }
+        catch ( Exception e )
+        {
+            // swallow
+        }
+    }
+
+    /**
+     * Removes an item.
+     * <p>
+     * @param cacheName
+     * @param key
+     * @throws IOException
+     */
+    @Override
+    public void handleRemove( String cacheName, K key )
+        throws IOException
+    {
+        cache.remove( key );
+    }
+
+    /**
+     * Clears the region.
+     * <p>
+     * @param cacheName
+     * @throws IOException
+     */
+    @Override
+    public void handleRemoveAll( String cacheName )
+        throws IOException
+    {
+        cache.removeAll();
+    }
+
+    /**
+     * Shutdown call.
+     * <p>
+     * @param cacheName
+     * @throws IOException
+     */
+    @Override
+    public void handleDispose( String cacheName )
+        throws IOException
+    {
+        cache.dispose();
+    }
+}
diff --git a/src/org/apache/commons/jcs/engine/CacheConstants.java b/src/org/apache/commons/jcs/engine/CacheConstants.java
new file mode 100644
index 0000000..18ff42c
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/CacheConstants.java
@@ -0,0 +1,34 @@
+package org.apache.commons.jcs.engine;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Constants used throughout the JCS cache engine
+ * <p>
+ * @version $Id: CacheConstants.java 1590887 2014-04-29 07:07:32Z olamy $
+ */
+public interface CacheConstants
+{
+    /** This is the name of the config file that we will look for by default. */
+    String DEFAULT_CONFIG = "/cache.ccf";
+
+    /** Delimiter of a cache name component. This is used for hierarchical deletion */
+    String NAME_COMPONENT_DELIMITER = ":";
+}
diff --git a/src/org/apache/commons/jcs/engine/CacheElement.java b/src/org/apache/commons/jcs/engine/CacheElement.java
new file mode 100644
index 0000000..224b34d
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/CacheElement.java
@@ -0,0 +1,160 @@
+package org.apache.commons.jcs.engine;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.behavior.IElementAttributes;
+
+/**
+ * Generic element wrapper. Often stuffed inside another.
+ */
+public class CacheElement<K, V>
+    implements ICacheElement<K, V>
+{
+    /** Don't change */
+    private static final long serialVersionUID = -6062305728297627263L;
+
+    /** The name of the cache region. This is a namespace. */
+    private final String cacheName;
+
+    /** This is the cache key by which the value can be referenced. */
+    private final K key;
+
+    /** This is the cached value, reference by the key. */
+    private final V val;
+
+    /**
+     * These attributes hold information about the element and what it is
+     * allowed to do.
+     */
+    private IElementAttributes attr;
+
+    /**
+     * Constructor for the CacheElement object
+     * <p>
+     * @param cacheName
+     * @param key
+     * @param val
+     */
+    public CacheElement( String cacheName, K key, V val )
+    {
+        this.cacheName = cacheName;
+        this.key = key;
+        this.val = val;
+    }
+
+    /**
+     * Constructor for the CacheElement object
+     * <p>
+     * @param cacheName
+     * @param key
+     * @param val
+     * @param attrArg
+     */
+    public CacheElement( String cacheName, K key, V val, IElementAttributes attrArg )
+    {
+        this(cacheName, key, val);
+        this.attr = attrArg;
+    }
+
+    /**
+     * Gets the cacheName attribute of the CacheElement object
+     * <p>
+     * @return The cacheName value
+     */
+    @Override
+    public String getCacheName()
+    {
+        return this.cacheName;
+    }
+
+    /**
+     * Gets the key attribute of the CacheElement object
+     * <p>
+     * @return The key value
+     */
+    @Override
+    public K getKey()
+    {
+        return this.key;
+    }
+
+    /**
+     * Gets the val attribute of the CacheElement object
+     * <p>
+     * @return The val value
+     */
+    @Override
+    public V getVal()
+    {
+        return this.val;
+    }
+
+    /**
+     * Sets the attributes attribute of the CacheElement object
+     * <p>
+     * @param attr
+     *            The new IElementAttributes value
+     */
+    @Override
+    public void setElementAttributes( IElementAttributes attr )
+    {
+        this.attr = attr;
+    }
+
+    /**
+     * Gets the IElementAttributes attribute of the CacheElement object
+     * <p>
+     * @return The IElementAttributes value, never null
+     */
+    @Override
+    public IElementAttributes getElementAttributes()
+    {
+        // create default attributes if they are null
+        // this shouldn't happen, but could if a corrupt
+        // object was sent over the wire.
+        if ( this.attr == null )
+        {
+            this.attr = new ElementAttributes();
+        }
+        return this.attr;
+    }
+
+    /**
+     * @return a hash of the key only
+     */
+    @Override
+    public int hashCode()
+    {
+        return key.hashCode();
+    }
+
+    /**
+     * For debugging only.
+     * <p>
+     * @return String representation
+     */
+    @Override
+    public String toString()
+    {
+        return "[CacheElement: cacheName [" + cacheName + "], key [" + key + "], val [" + val + "], attr [" + attr
+            + "]";
+    }
+}
diff --git a/src/org/apache/commons/jcs/engine/CacheElementSerialized.java b/src/org/apache/commons/jcs/engine/CacheElementSerialized.java
new file mode 100644
index 0000000..8a3d253
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/CacheElementSerialized.java
@@ -0,0 +1,77 @@
+package org.apache.commons.jcs.engine;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.behavior.ICacheElementSerialized;
+import org.apache.commons.jcs.engine.behavior.IElementAttributes;
+
+import java.util.Arrays;
+
+/** Either serialized value or the value should be null; */
+public class CacheElementSerialized<K, V>
+    extends CacheElement<K, V>
+    implements ICacheElementSerialized<K, V>
+{
+    /** Don't change. */
+    private static final long serialVersionUID = -7265084818647601874L;
+
+    /** The serialized value. */
+    private final byte[] serializedValue;
+
+    /**
+     * Constructs a usable wrapper.
+     * <p>
+     * @param cacheNameArg
+     * @param keyArg
+     * @param serializedValueArg
+     * @param elementAttributesArg
+     */
+    public CacheElementSerialized( String cacheNameArg, K keyArg, byte[] serializedValueArg,
+                                   IElementAttributes elementAttributesArg )
+    {
+        super(cacheNameArg, keyArg, null, elementAttributesArg);
+        this.serializedValue = serializedValueArg;
+    }
+
+    /** @return byte[] */
+    @Override
+    public byte[] getSerializedValue()
+    {
+        return this.serializedValue;
+    }
+
+    /**
+     * For debugging only.
+     * <p>
+     * @return debugging string.
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder buf = new StringBuilder();
+        buf.append( "\n CacheElementSerialized: " );
+        buf.append( "\n CacheName = [" + getCacheName() + "]" );
+        buf.append( "\n Key = [" + getKey() + "]" );
+        buf.append( "\n SerializedValue = " + Arrays.toString(getSerializedValue()) );
+        buf.append( "\n ElementAttributes = " + getElementAttributes() );
+        return buf.toString();
+    }
+
+}
diff --git a/src/org/apache/commons/jcs/engine/CacheEventQueue.java b/src/org/apache/commons/jcs/engine/CacheEventQueue.java
new file mode 100644
index 0000000..230dd09
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/CacheEventQueue.java
@@ -0,0 +1,418 @@
+package org.apache.commons.jcs.engine;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.behavior.ICacheListener;
+import org.apache.commons.jcs.engine.stats.StatElement;
+import org.apache.commons.jcs.engine.stats.Stats;
+import org.apache.commons.jcs.engine.stats.behavior.IStatElement;
+import org.apache.commons.jcs.engine.stats.behavior.IStats;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.util.ArrayList;
+
+/**
+ * An event queue is used to propagate ordered cache events to one and only one target listener.
+ * <p>
+ * This is a modified version of the experimental version. It should lazy initialize the processor
+ * thread, and kill the thread if the queue goes empty for a specified period, now set to 1 minute.
+ * If something comes in after that a new processor thread should be created.
+ */
+public class CacheEventQueue<K, V>
+    extends AbstractCacheEventQueue<K, V>
+{
+    /** The logger. */
+    private static final Log log = LogFactory.getLog( CacheEventQueue.class );
+
+    /** The type of queue -- there are pooled and single */
+    private static final QueueType queueType = QueueType.SINGLE;
+
+    /** the thread that works the queue. */
+    private Thread processorThread;
+
+    /** sync */
+    private final Object queueLock = new Object();
+
+    /** the head of the queue */
+    private Node head = new Node();
+
+    /** the end of the queue */
+    private Node tail = head;
+
+    /** Number of items in the queue */
+    private int size = 0;
+
+    /**
+     * Constructs with the specified listener and the cache name.
+     * <p>
+     * @param listener
+     * @param listenerId
+     * @param cacheName
+     */
+    public CacheEventQueue( ICacheListener<K, V> listener, long listenerId, String cacheName )
+    {
+        this( listener, listenerId, cacheName, 10, 500 );
+    }
+
+    /**
+     * Constructor for the CacheEventQueue object
+     * <p>
+     * @param listener
+     * @param listenerId
+     * @param cacheName
+     * @param maxFailure
+     * @param waitBeforeRetry
+     */
+    public CacheEventQueue( ICacheListener<K, V> listener, long listenerId, String cacheName, int maxFailure,
+                            int waitBeforeRetry )
+    {
+        initialize( listener, listenerId, cacheName, maxFailure, waitBeforeRetry, null );
+    }
+
+    /**
+     * Initializes the queue.
+     * <p>
+     * @param listener
+     * @param listenerId
+     * @param cacheName
+     * @param maxFailure
+     * @param waitBeforeRetry
+     * @param threadPoolName
+     */
+    @Override
+    public void initialize( ICacheListener<K, V> listener, long listenerId, String cacheName, int maxFailure,
+                            int waitBeforeRetry, String threadPoolName )
+    {
+        if ( listener == null )
+        {
+            throw new IllegalArgumentException( "listener must not be null" );
+        }
+
+        this.listener = listener;
+        this.listenerId = listenerId;
+        this.cacheName = cacheName;
+        this.maxFailure = maxFailure <= 0 ? 3 : maxFailure;
+        this.waitBeforeRetry = waitBeforeRetry <= 0 ? 500 : waitBeforeRetry;
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Constructed: " + this );
+        }
+    }
+
+    /**
+     * What type of queue is this.
+     * <p>
+     * @return queueType
+     */
+    @Override
+    public QueueType getQueueType()
+    {
+        return queueType;
+    }
+
+    /**
+     * Kill the processor thread and indicate that the queue is destroyed and no longer alive, but it
+     * can still be working.
+     */
+    public void stopProcessing()
+    {
+        synchronized (queueLock)
+        {
+            destroyed = true;
+            processorThread = null;
+        }
+    }
+
+    /**
+     * Event Q is empty.
+     * <p>
+     * Calling destroy interrupts the processor thread.
+     */
+    @Override
+    public void destroy()
+    {
+        synchronized (queueLock)
+        {
+            if ( !destroyed )
+            {
+                destroyed = true;
+
+                if ( log.isInfoEnabled() )
+                {
+                    log.info( "Destroying queue, stats =  " + getStatistics() );
+                }
+
+                // Synchronize on queue so the thread will not wait forever,
+                // and then interrupt the QueueProcessor
+
+                if ( processorThread != null )
+                {
+                    processorThread.interrupt();
+                    processorThread = null;
+                }
+
+                if ( log.isInfoEnabled() )
+                {
+                    log.info( "Cache event queue destroyed: " + this );
+                }
+            }
+            else
+            {
+                if ( log.isInfoEnabled() )
+                {
+                    log.info( "Destroy was called after queue was destroyed.  Doing nothing.  Stats =  " + getStatistics() );
+                }
+            }
+        }
+    }
+
+    /**
+     * Adds an event to the queue.
+     * <p>
+     * @param event
+     */
+    @Override
+    protected void put( AbstractCacheEvent event )
+    {
+        Node newNode = new Node();
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Event entering Queue for " + cacheName + ": " + event );
+        }
+
+        newNode.event = event;
+
+        synchronized ( queueLock )
+        {
+            size++;
+            tail.next = newNode;
+            tail = newNode;
+            if ( isWorking() )
+            {
+                if ( !isAlive() )
+                {
+                    destroyed = false;
+                    processorThread = new QProcessor( this );
+                    processorThread.start();
+                    if ( log.isInfoEnabled() )
+                    {
+                        log.info( "Cache event queue created: " + this );
+                    }
+                }
+                else
+                {
+                    queueLock.notify();
+                }
+            }
+        }
+    }
+
+    // /////////////////////////// Inner classes /////////////////////////////
+
+    /**
+     * This is the thread that works the queue.
+     * <p>
+     * @author asmuts
+     * @created January 15, 2002
+     */
+    private class QProcessor
+        extends Thread
+    {
+        /** The queue to work */
+        CacheEventQueue<K, V> queue;
+
+        /**
+         * Constructor for the QProcessor object
+         * <p>
+         * @param aQueue the event queue to take items from.
+         */
+        QProcessor( CacheEventQueue<K, V> aQueue )
+        {
+            super( "CacheEventQueue.QProcessor-" + aQueue.cacheName );
+
+            setDaemon( true );
+            queue = aQueue;
+        }
+
+        /**
+         * Main processing method for the QProcessor object.
+         * <p>
+         * Waits for a specified time (waitToDieMillis) for something to come in and if no new
+         * events come in during that period the run method can exit and the thread is dereferenced.
+         */
+        @SuppressWarnings("synthetic-access")
+        @Override
+        public void run()
+        {
+            AbstractCacheEvent event = null;
+
+            while ( queue.isAlive() )
+            {
+                event = queue.take();
+
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "Event from queue = " + event );
+                }
+
+                if ( event == null )
+                {
+                    synchronized ( queueLock )
+                    {
+                        try
+                        {
+                            queueLock.wait( queue.getWaitToDieMillis() );
+                        }
+                        catch ( InterruptedException e )
+                        {
+                            log.warn( "Interrupted while waiting for another event to come in before we die." );
+                            return;
+                        }
+                        event = queue.take();
+                        if ( log.isDebugEnabled() )
+                        {
+                            log.debug( "Event from queue after sleep = " + event );
+                        }
+                    }
+                    if ( event == null )
+                    {
+                        queue.stopProcessing();
+                    }
+                }
+
+                if ( queue.isWorking() && queue.isAlive() && event != null )
+                {
+                    event.run();
+                }
+            }
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "QProcessor exiting for " + queue );
+            }
+        }
+    }
+
+    /**
+     * Returns the next cache event from the queue or null if there are no events in the queue.
+     * <p>
+     * We have an empty node at the head and the tail. When we take an item from the queue we move
+     * the next node to the head and then clear the value from that node. This value is returned.
+     * <p>
+     * When the queue is empty the head node is the same as the tail node.
+     * <p>
+     * @return An event to process.
+     */
+    protected AbstractCacheEvent take()
+    {
+        synchronized ( queueLock )
+        {
+            // wait until there is something to read
+            if ( head == tail )
+            {
+                return null;
+            }
+
+            Node node = head.next;
+
+            @SuppressWarnings("unchecked") // No generics for public fields
+            AbstractCacheEvent value = (AbstractCacheEvent) node.event;
+
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "head.event = " + head.event );
+                log.debug( "node.event = " + node.event );
+            }
+
+            // Node becomes the new head (head is always empty)
+
+            node.event = null;
+            head = node;
+
+            size--;
+            return value;
+        }
+    }
+
+    /**
+     * This method returns semi-structured data on this queue.
+     * <p>
+     * @see org.apache.commons.jcs.engine.behavior.ICacheEventQueue#getStatistics()
+     * @return information on the status and history of the queue
+     */
+    @Override
+    public IStats getStatistics()
+    {
+        IStats stats = new Stats();
+        stats.setTypeName( "Cache Event Queue" );
+
+        ArrayList<IStatElement<?>> elems = new ArrayList<IStatElement<?>>();
+
+        elems.add(new StatElement<Boolean>( "Working", Boolean.valueOf(super.isWorking()) ) );
+        elems.add(new StatElement<Boolean>( "Alive", Boolean.valueOf(this.isAlive()) ) );
+        elems.add(new StatElement<Boolean>( "Empty", Boolean.valueOf(this.isEmpty()) ) );
+
+        int sz = 0;
+        synchronized ( queueLock )
+        {
+            // wait until there is something to read
+            if ( head == tail )
+            {
+                sz = 0;
+            }
+            else
+            {
+                Node n = head;
+                while ( n != null )
+                {
+                    n = n.next;
+                    sz++;
+                }
+            }
+
+            elems.add(new StatElement<Integer>( "Size", Integer.valueOf(sz) ) );
+        }
+
+        stats.setStatElements( elems );
+
+        return stats;
+    }
+
+    /**
+     * @return whether there are any items in the queue.
+     */
+    @Override
+    public boolean isEmpty()
+    {
+        return tail == head;
+    }
+
+    /**
+     * Returns the number of elements in the queue.
+     * <p>
+     * @return number of items in the queue.
+     */
+    @Override
+    public int size()
+    {
+        return size;
+    }
+}
diff --git a/src/org/apache/commons/jcs/engine/CacheEventQueueFactory.java b/src/org/apache/commons/jcs/engine/CacheEventQueueFactory.java
new file mode 100644
index 0000000..24b5dc2
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/CacheEventQueueFactory.java
@@ -0,0 +1,88 @@
+package org.apache.commons.jcs.engine;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.behavior.ICacheEventQueue;
+import org.apache.commons.jcs.engine.behavior.ICacheListener;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * This class hands out event Queues. This allows us to change the implementation more easily. You
+ * can confugure the cache to use a custom type.
+ * <p>
+ * @author aaronsm
+ */
+public class CacheEventQueueFactory<K, V>
+{
+    /** The logger. */
+    private static final Log log = LogFactory.getLog( CacheEventQueueFactory.class );
+
+    /**
+     * The most commonly used factory method.
+     * <p>
+     * @param listener
+     * @param listenerId
+     * @param cacheName
+     * @param threadPoolName
+     * @param poolType - SINGLE, POOLED
+     * @return ICacheEventQueue
+     */
+    public ICacheEventQueue<K, V> createCacheEventQueue( ICacheListener<K, V> listener, long listenerId, String cacheName,
+                                                   String threadPoolName, ICacheEventQueue.QueueType poolType )
+    {
+        return createCacheEventQueue( listener, listenerId, cacheName, 10, 500, threadPoolName, poolType );
+    }
+
+    /**
+     * Fully configured event queue.
+     * <p>
+     * @param listener
+     * @param listenerId
+     * @param cacheName
+     * @param maxFailure
+     * @param waitBeforeRetry
+     * @param threadPoolName null is OK, if not a pooled event queue this is ignored
+     * @param poolType single or pooled
+     * @return ICacheEventQueue
+     */
+    public ICacheEventQueue<K, V> createCacheEventQueue( ICacheListener<K, V> listener, long listenerId, String cacheName,
+                                                   int maxFailure, int waitBeforeRetry, String threadPoolName,
+                                                   ICacheEventQueue.QueueType poolType )
+    {
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "threadPoolName = [" + threadPoolName + "] poolType = " + poolType + " " );
+        }
+
+        ICacheEventQueue<K, V> eventQueue = null;
+        if ( poolType == null || ICacheEventQueue.QueueType.SINGLE == poolType )
+        {
+            eventQueue = new CacheEventQueue<K, V>( listener, listenerId, cacheName, maxFailure, waitBeforeRetry );
+        }
+        else if ( ICacheEventQueue.QueueType.POOLED == poolType )
+        {
+            eventQueue = new PooledCacheEventQueue<K, V>( listener, listenerId, cacheName, maxFailure, waitBeforeRetry,
+                                                    threadPoolName );
+        }
+
+        return eventQueue;
+    }
+}
diff --git a/src/org/apache/commons/jcs/engine/CacheGroup.java b/src/org/apache/commons/jcs/engine/CacheGroup.java
new file mode 100644
index 0000000..0da5a6d
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/CacheGroup.java
@@ -0,0 +1,59 @@
+package org.apache.commons.jcs.engine;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.behavior.IElementAttributes;
+
+/**
+ * Holder for attributes specific to a group. The grouping functionality is on
+ * the way out.
+ */
+public class CacheGroup
+{
+    /** Element configuration. */
+    private IElementAttributes attr;
+
+    /** Constructor for the CacheGroup object */
+    public CacheGroup()
+    {
+        super();
+    }
+
+    /**
+     * Sets the attributes attribute of the CacheGroup object
+     * <p>
+     * @param attr
+     *            The new attributes value
+     */
+    public void setElementAttributes( IElementAttributes attr )
+    {
+        this.attr = attr;
+    }
+
+    /**
+     * Gets the attrributes attribute of the CacheGroup object
+     * <p>
+     * @return The attrributes value
+     */
+    public IElementAttributes getElementAttrributes()
+    {
+        return attr;
+    }
+}
diff --git a/src/org/apache/commons/jcs/engine/CacheInfo.java b/src/org/apache/commons/jcs/engine/CacheInfo.java
new file mode 100644
index 0000000..4115525
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/CacheInfo.java
@@ -0,0 +1,47 @@
+package org.apache.commons.jcs.engine;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.rmi.dgc.VMID;
+
+/**
+ * This is a static variable holder for the distribution auxiliaries that need something like a vmid.
+ */
+public final class CacheInfo
+{
+    /** shouldn't be instantiated */
+    private CacheInfo()
+    {
+        super();
+    }
+
+    /**
+     * Used to identify a client, so we can run multiple clients off one host.
+     * Need since there is no way to identify a client other than by host in
+     * rmi.
+     * <p>
+     * TODO: may have some trouble in failover mode if the cache keeps its old
+     * id. We may need to reset this when moving into failover.
+     */
+    protected static final VMID vmid = new VMID();
+
+    /** By default this is the hashcode of the VMID */
+    public static final long listenerId = vmid.hashCode();
+}
diff --git a/src/org/apache/commons/jcs/engine/CacheListeners.java b/src/org/apache/commons/jcs/engine/CacheListeners.java
new file mode 100644
index 0000000..41f3db6
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/CacheListeners.java
@@ -0,0 +1,82 @@
+package org.apache.commons.jcs.engine;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.behavior.ICache;
+import org.apache.commons.jcs.engine.behavior.ICacheEventQueue;
+
+import java.util.Iterator;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * Used to associates a set of [cache listener to cache event queue] for a
+ * cache.
+ */
+public class CacheListeners<K, V>
+{
+    /** The cache using the queue. */
+    public final ICache<K, V> cache;
+
+    /** Map ICacheListener to ICacheEventQueue */
+    public final Map<Long, ICacheEventQueue<K, V>> eventQMap =
+        new ConcurrentHashMap<Long, ICacheEventQueue<K, V>>();
+
+    /**
+     * Constructs with the given cache.
+     * <p>
+     * @param cache
+     */
+    public CacheListeners( ICache<K, V> cache )
+    {
+        if ( cache == null )
+        {
+            throw new IllegalArgumentException( "cache must not be null" );
+        }
+        this.cache = cache;
+    }
+
+    /** @return info on the listeners */
+    @Override
+    public String toString()
+    {
+        StringBuilder buffer = new StringBuilder();
+        buffer.append( "\n CacheListeners" );
+        if ( cache != null )
+        {
+            buffer.append( "\n Region = " + cache.getCacheName() );
+        }
+        if ( eventQMap != null )
+        {
+            buffer.append( "\n Event Queue Map " );
+            buffer.append( "\n size = " + eventQMap.size() );
+            Iterator<Map.Entry<Long, ICacheEventQueue<K, V>>> it = eventQMap.entrySet().iterator();
+            while ( it.hasNext() )
+            {
+                buffer.append( "\n Entry: " + it.next() );
+            }
+        }
+        else
+        {
+            buffer.append( "\n No Listeners. " );
+        }
+        return buffer.toString();
+    }
+}
diff --git a/src/org/apache/commons/jcs/engine/CacheStatus.java b/src/org/apache/commons/jcs/engine/CacheStatus.java
new file mode 100644
index 0000000..ab79e08
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/CacheStatus.java
@@ -0,0 +1,37 @@
+package org.apache.commons.jcs.engine;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Cache statuses
+ * <p>
+ * @version $Id: CacheStatus.java 1590887 2014-04-29 07:07:32Z olamy $
+ */
+public enum CacheStatus
+{
+    /** Cache alive status. */
+    ALIVE,
+
+    /** Cache disposed status. */
+    DISPOSED,
+
+    /** Cache in error. */
+    ERROR
+}
diff --git a/src/org/apache/commons/jcs/engine/CacheWatchRepairable.java b/src/org/apache/commons/jcs/engine/CacheWatchRepairable.java
new file mode 100644
index 0000000..c5654a2
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/CacheWatchRepairable.java
@@ -0,0 +1,200 @@
+package org.apache.commons.jcs.engine;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.behavior.ICacheListener;
+import org.apache.commons.jcs.engine.behavior.ICacheObserver;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Intercepts the requests to the underlying ICacheObserver object so that the listeners can be
+ * recorded locally for remote connection recovery purposes. (Durable subscription like those in JMS
+ * is not implemented at this stage for it can be too expensive.)
+ */
+public class CacheWatchRepairable
+    implements ICacheObserver
+{
+    /** The logger */
+    private static final Log log = LogFactory.getLog( CacheWatchRepairable.class );
+
+    /** the underlying ICacheObserver. */
+    private ICacheObserver cacheWatch;
+
+    /** Map of cache regions. */
+    private final Map<String, Set<ICacheListener<?, ?>>> cacheMap =
+        new HashMap<String, Set<ICacheListener<?, ?>>>();
+
+    /**
+     * Replaces the underlying cache watch service and reattached all existing listeners to the new
+     * cache watch.
+     * <p>
+     * @param cacheWatch The new cacheWatch value
+     */
+    public void setCacheWatch( ICacheObserver cacheWatch )
+    {
+        this.cacheWatch = cacheWatch;
+        synchronized ( cacheMap )
+        {
+            for (Map.Entry<String, Set<ICacheListener<?, ?>>> entry : cacheMap.entrySet())
+            {
+                String cacheName = entry.getKey();
+                for (ICacheListener<?, ?> listener : entry.getValue())
+                {
+                    try
+                    {
+                        if ( log.isInfoEnabled() )
+                        {
+                            log.info( "Adding listener to cache watch. ICacheListener = " + listener
+                                + " | ICacheObserver = " + cacheWatch );
+                        }
+                        cacheWatch.addCacheListener( cacheName, listener );
+                    }
+                    catch ( IOException ex )
+                    {
+                        log.error( "Problem adding listener. ICacheListener = " + listener + " | ICacheObserver = "
+                            + cacheWatch, ex );
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * Adds a feature to the CacheListener attribute of the CacheWatchRepairable object
+     * <p>
+     * @param cacheName The feature to be added to the CacheListener attribute
+     * @param obj The feature to be added to the CacheListener attribute
+     * @throws IOException
+     */
+    @Override
+    public <K, V> void addCacheListener( String cacheName, ICacheListener<K, V> obj )
+        throws IOException
+    {
+        // Record the added cache listener locally, regardless of whether the
+        // remote add-listener operation succeeds or fails.
+        synchronized ( cacheMap )
+        {
+            Set<ICacheListener<?, ?>> listenerSet = cacheMap.get( cacheName );
+            if ( listenerSet == null )
+            {
+                listenerSet = new HashSet<ICacheListener<?, ?>>();
+                cacheMap.put( cacheName, listenerSet );
+            }
+            listenerSet.add( obj );
+        }
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "Adding listener to cache watch. ICacheListener = " + obj
+                + " | ICacheObserver = " + cacheWatch + " | cacheName = " + cacheName );
+        }
+        cacheWatch.addCacheListener( cacheName, obj );
+    }
+
+    /**
+     * Adds a feature to the CacheListener attribute of the CacheWatchRepairable object
+     * <p>
+     * @param obj The feature to be added to the CacheListener attribute
+     * @throws IOException
+     */
+    @Override
+    public <K, V> void addCacheListener( ICacheListener<K, V> obj )
+        throws IOException
+    {
+        // Record the added cache listener locally, regardless of whether the
+        // remote add-listener operation succeeds or fails.
+        synchronized ( cacheMap )
+        {
+            for (Set<ICacheListener<?, ?>> listenerSet : cacheMap.values())
+            {
+                listenerSet.add( obj );
+            }
+        }
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "Adding listener to cache watch. ICacheListener = " + obj
+                + " | ICacheObserver = " + cacheWatch );
+        }
+        cacheWatch.addCacheListener( obj );
+    }
+
+    /**
+     * Tell the server to release us.
+     * <p>
+     * @param cacheName
+     * @param obj
+     * @throws IOException
+     */
+    @Override
+    public <K, V> void removeCacheListener( String cacheName, ICacheListener<K, V> obj )
+        throws IOException
+    {
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "removeCacheListener, cacheName [" + cacheName + "]" );
+        }
+        // Record the removal locally, regardless of whether the remote
+        // remove-listener operation succeeds or fails.
+        synchronized ( cacheMap )
+        {
+            Set<ICacheListener<?, ?>> listenerSet = cacheMap.get( cacheName );
+            if ( listenerSet != null )
+            {
+                listenerSet.remove( obj );
+            }
+        }
+        cacheWatch.removeCacheListener( cacheName, obj );
+    }
+
+    /**
+     * @param obj
+     * @throws IOException
+     */
+    @Override
+    public <K, V> void removeCacheListener( ICacheListener<K, V> obj )
+        throws IOException
+    {
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "removeCacheListener, ICacheListener [" + obj + "]" );
+        }
+
+        // Record the removal locally, regardless of whether the remote
+        // remove-listener operation succeeds or fails.
+        synchronized ( cacheMap )
+        {
+            for (Set<ICacheListener<?, ?>> listenerSet : cacheMap.values())
+            {
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "Before removing [" + obj + "] the listenerSet = " + listenerSet );
+                }
+                listenerSet.remove( obj );
+            }
+        }
+        cacheWatch.removeCacheListener( obj );
+    }
+}
diff --git a/src/org/apache/commons/jcs/engine/CompositeCacheAttributes.java b/src/org/apache/commons/jcs/engine/CompositeCacheAttributes.java
new file mode 100644
index 0000000..bce474e
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/CompositeCacheAttributes.java
@@ -0,0 +1,447 @@
+package org.apache.commons.jcs.engine;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.behavior.ICompositeCacheAttributes;
+
+/**
+ * The CompositeCacheAttributes defines the general cache region settings. If a region is not
+ * explicitly defined in the cache.ccf then it inherits the cache default settings.
+ * <p>
+ * If all the default attributes are not defined in the default region definition in the cache.ccf,
+ * the hard coded defaults will be used.
+ */
+public class CompositeCacheAttributes
+    implements ICompositeCacheAttributes, Cloneable
+{
+    /** Don't change */
+    private static final long serialVersionUID = 6754049978134196787L;
+
+    /** default lateral switch */
+    private static final boolean DEFAULT_USE_LATERAL = true;
+
+    /** default remote switch */
+    private static final boolean DEFAULT_USE_REMOTE = true;
+
+    /** default disk switch */
+    private static final boolean DEFAULT_USE_DISK = true;
+
+    /** default shrinker setting */
+    private static final boolean DEFAULT_USE_SHRINKER = false;
+
+    /** default max objects value */
+    private static final int DEFAULT_MAX_OBJECTS = 100;
+
+    /** default */
+    private static final int DEFAULT_MAX_MEMORY_IDLE_TIME_SECONDS = 60 * 120;
+
+    /** default interval to run the shrinker */
+    private static final int DEFAULT_SHRINKER_INTERVAL_SECONDS = 30;
+
+    /** default */
+    private static final int DEFAULT_MAX_SPOOL_PER_RUN = -1;
+
+    /** default */
+    private static final String DEFAULT_MEMORY_CACHE_NAME = "org.apache.commons.jcs.engine.memory.lru.LRUMemoryCache";
+
+    /** Default number to send to disk at a time when memory fills. */
+    private static final int DEFAULT_CHUNK_SIZE = 2;
+
+    /** allow lateral caches */
+    private boolean useLateral = DEFAULT_USE_LATERAL;
+
+    /** allow remote caches */
+    private boolean useRemote = DEFAULT_USE_REMOTE;
+
+    /** Whether we should use a disk cache if it is configured. */
+    private boolean useDisk = DEFAULT_USE_DISK;
+
+    /** Whether or not we should run the memory shrinker thread. */
+    private boolean useMemoryShrinker = DEFAULT_USE_SHRINKER;
+
+    /** The maximum objects that the memory cache will be allowed to hold. */
+    private int maxObjs = DEFAULT_MAX_OBJECTS;
+
+    /** maxMemoryIdleTimeSeconds */
+    private long maxMemoryIdleTimeSeconds = DEFAULT_MAX_MEMORY_IDLE_TIME_SECONDS;
+
+    /** shrinkerIntervalSeconds */
+    private long shrinkerIntervalSeconds = DEFAULT_SHRINKER_INTERVAL_SECONDS;
+
+    /** The maximum number the shrinker will spool to disk per run. */
+    private int maxSpoolPerRun = DEFAULT_MAX_SPOOL_PER_RUN;
+
+    /** The name of this cache region. */
+    private String cacheName;
+
+    /** The name of the memory cache implementation class. */
+    private String memoryCacheName;
+
+    /** Set via DISK_USAGE_PATTERN_NAME */
+    private DiskUsagePattern diskUsagePattern = DiskUsagePattern.SWAP;
+
+    /** How many to spool to disk at a time. */
+    private int spoolChunkSize = DEFAULT_CHUNK_SIZE;
+
+    /**
+     * Constructor for the CompositeCacheAttributes object
+     */
+    public CompositeCacheAttributes()
+    {
+        super();
+        // set this as the default so the configuration is a bit simpler
+        memoryCacheName = DEFAULT_MEMORY_CACHE_NAME;
+    }
+
+    /**
+     * Sets the maxObjects attribute of the CompositeCacheAttributes object
+     * <p>
+     * @param maxObjs The new maxObjects value
+     */
+    @Override
+    public void setMaxObjects( int maxObjs )
+    {
+        this.maxObjs = maxObjs;
+    }
+
+    /**
+     * Gets the maxObjects attribute of the CompositeCacheAttributes object
+     * <p>
+     * @return The maxObjects value
+     */
+    @Override
+    public int getMaxObjects()
+    {
+        return this.maxObjs;
+    }
+
+    /**
+     * Sets the useDisk attribute of the CompositeCacheAttributes object
+     * <p>
+     * @param useDisk The new useDisk value
+     */
+    @Override
+    public void setUseDisk( boolean useDisk )
+    {
+        this.useDisk = useDisk;
+    }
+
+    /**
+     * Gets the useDisk attribute of the CompositeCacheAttributes object
+     * <p>
+     * @return The useDisk value
+     */
+    @Override
+    public boolean isUseDisk()
+    {
+        return useDisk;
+    }
+
+    /**
+     * Sets the useLateral attribute of the CompositeCacheAttributes object
+     * <p>
+     * @param b The new useLateral value
+     */
+    @Override
+    public void setUseLateral( boolean b )
+    {
+        this.useLateral = b;
+    }
+
+    /**
+     * Gets the useLateral attribute of the CompositeCacheAttributes object
+     * <p>
+     * @return The useLateral value
+     */
+    @Override
+    public boolean isUseLateral()
+    {
+        return this.useLateral;
+    }
+
+    /**
+     * Sets the useRemote attribute of the CompositeCacheAttributes object
+     * <p>
+     * @param useRemote The new useRemote value
+     */
+    @Override
+    public void setUseRemote( boolean useRemote )
+    {
+        this.useRemote = useRemote;
+    }
+
+    /**
+     * Gets the useRemote attribute of the CompositeCacheAttributes object
+     * <p>
+     * @return The useRemote value
+     */
+    @Override
+    public boolean isUseRemote()
+    {
+        return this.useRemote;
+    }
+
+    /**
+     * Sets the cacheName attribute of the CompositeCacheAttributes object
+     * <p>
+     * @param s The new cacheName value
+     */
+    @Override
+    public void setCacheName( String s )
+    {
+        this.cacheName = s;
+    }
+
+    /**
+     * Gets the cacheName attribute of the CompositeCacheAttributes object
+     * <p>
+     * @return The cacheName value
+     */
+    @Override
+    public String getCacheName()
+    {
+        return this.cacheName;
+    }
+
+    /**
+     * Sets the memoryCacheName attribute of the CompositeCacheAttributes object
+     * <p>
+     * @param s The new memoryCacheName value
+     */
+    @Override
+    public void setMemoryCacheName( String s )
+    {
+        this.memoryCacheName = s;
+    }
+
+    /**
+     * Gets the memoryCacheName attribute of the CompositeCacheAttributes object
+     * <p>
+     * @return The memoryCacheName value
+     */
+    @Override
+    public String getMemoryCacheName()
+    {
+        return this.memoryCacheName;
+    }
+
+    /**
+     * Whether the memory cache should perform background memory shrinkage.
+     * <p>
+     * @param useShrinker The new UseMemoryShrinker value
+     */
+    @Override
+    public void setUseMemoryShrinker( boolean useShrinker )
+    {
+        this.useMemoryShrinker = useShrinker;
+    }
+
+    /**
+     * Whether the memory cache should perform background memory shrinkage.
+     * <p>
+     * @return The UseMemoryShrinker value
+     */
+    @Override
+    public boolean isUseMemoryShrinker()
+    {
+        return this.useMemoryShrinker;
+    }
+
+    /**
+     * If UseMemoryShrinker is true the memory cache should auto-expire elements to reclaim space.
+     * <p>
+     * @param seconds The new MaxMemoryIdleTimeSeconds value
+     */
+    @Override
+    public void setMaxMemoryIdleTimeSeconds( long seconds )
+    {
+        this.maxMemoryIdleTimeSeconds = seconds;
+    }
+
+    /**
+     * If UseMemoryShrinker is true the memory cache should auto-expire elements to reclaim space.
+     * <p>
+     * @return The MaxMemoryIdleTimeSeconds value
+     */
+    @Override
+    public long getMaxMemoryIdleTimeSeconds()
+    {
+        return this.maxMemoryIdleTimeSeconds;
+    }
+
+    /**
+     * If UseMemoryShrinker is true the memory cache should auto-expire elements to reclaim space.
+     * This sets the shrinker interval.
+     * <p>
+     * @param seconds The new ShrinkerIntervalSeconds value
+     */
+    @Override
+    public void setShrinkerIntervalSeconds( long seconds )
+    {
+        this.shrinkerIntervalSeconds = seconds;
+    }
+
+    /**
+     * If UseMemoryShrinker is true the memory cache should auto-expire elements to reclaim space.
+     * This gets the shrinker interval.
+     * <p>
+     * @return The ShrinkerIntervalSeconds value
+     */
+    @Override
+    public long getShrinkerIntervalSeconds()
+    {
+        return this.shrinkerIntervalSeconds;
+    }
+
+    /**
+     * If UseMemoryShrinker is true the memory cache should auto-expire elements to reclaim space.
+     * This sets the maximum number of items to spool per run.
+     * <p>
+     * If the value is -1, then there is no limit to the number of items to be spooled.
+     * <p>
+     * @param maxSpoolPerRun The new maxSpoolPerRun value
+     */
+    @Override
+    public void setMaxSpoolPerRun( int maxSpoolPerRun )
+    {
+        this.maxSpoolPerRun = maxSpoolPerRun;
+    }
+
+    /**
+     * If UseMemoryShrinker is true the memory cache should auto-expire elements to reclaim space.
+     * This gets the maximum number of items to spool per run.
+     * <p>
+     * @return The maxSpoolPerRun value
+     */
+    @Override
+    public int getMaxSpoolPerRun()
+    {
+        return this.maxSpoolPerRun;
+    }
+
+    /**
+     * By default this is SWAP_ONLY.
+     * <p>
+     * @param diskUsagePattern The diskUsagePattern to set.
+     */
+    @Override
+    public void setDiskUsagePattern( DiskUsagePattern diskUsagePattern )
+    {
+        this.diskUsagePattern = diskUsagePattern;
+    }
+
+    /**
+     * Translates the name to the disk usage pattern short value.
+     * <p>
+     * The allowed values are SWAP and UPDATE.
+     * <p>
+     * @param diskUsagePatternName The diskUsagePattern to set.
+     */
+    @Override
+    public void setDiskUsagePatternName( String diskUsagePatternName )
+    {
+        if ( diskUsagePatternName != null )
+        {
+            String name = diskUsagePatternName.toUpperCase().trim();
+            if ( name.startsWith( "SWAP" ) )
+            {
+                this.setDiskUsagePattern( DiskUsagePattern.SWAP );
+            }
+            else if ( name.startsWith( "UPDATE" ) )
+            {
+                this.setDiskUsagePattern( DiskUsagePattern.UPDATE );
+            }
+        }
+    }
+
+    /**
+     * Number to send to disk at at time when memory is full.
+     * <p>
+     * @return int
+     */
+    @Override
+    public int getSpoolChunkSize()
+    {
+        return spoolChunkSize;
+    }
+
+    /**
+     * Number to send to disk at a time.
+     * <p>
+     * @param spoolChunkSize
+     */
+    @Override
+    public void setSpoolChunkSize( int spoolChunkSize )
+    {
+        this.spoolChunkSize = spoolChunkSize;
+    }
+
+    /**
+     * @return Returns the diskUsagePattern.
+     */
+    @Override
+    public DiskUsagePattern getDiskUsagePattern()
+    {
+        return diskUsagePattern;
+    }
+
+    /**
+     * Description of the Method
+     * <p>
+     * @return ICompositeCacheAttributes a copy
+     */
+    @Override
+    public ICompositeCacheAttributes copy()
+    {
+        try
+        {
+            ICompositeCacheAttributes cattr = (CompositeCacheAttributes) this.clone();
+            return cattr;
+        }
+        catch ( Exception e )
+        {
+            System.err.println( e.toString() );
+            return new CompositeCacheAttributes();
+        }
+    }
+
+    /**
+     * Dumps the core attributes.
+     * <p>
+     * @return For debugging.
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder dump = new StringBuilder();
+
+        dump.append( "[ " );
+        dump.append( "useLateral = " ).append( useLateral );
+        dump.append( ", useRemote = " ).append( useRemote );
+        dump.append( ", useDisk = " ).append( useDisk );
+        dump.append( ", maxObjs = " ).append( maxObjs );
+        dump.append( ", maxSpoolPerRun = " ).append( maxSpoolPerRun );
+        dump.append( ", diskUsagePattern = " ).append( diskUsagePattern );
+        dump.append( ", spoolChunkSize = " ).append( spoolChunkSize );
+        dump.append( " ]" );
+
+        return dump.toString();
+    }
+}
diff --git a/src/org/apache/commons/jcs/engine/ElementAttributes.java b/src/org/apache/commons/jcs/engine/ElementAttributes.java
new file mode 100644
index 0000000..e0d302f
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/ElementAttributes.java
@@ -0,0 +1,469 @@
+package org.apache.commons.jcs.engine;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.behavior.IElementAttributes;
+import org.apache.commons.jcs.engine.control.event.behavior.IElementEventHandler;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * This it the element attribute descriptor class. Each element in the cache has an ElementAttribute
+ * object associated with it. An ElementAttributes object can be associated with an element in 3
+ * ways:
+ * <ol>
+ * <li>When the item is put into the cache, you can associate an element attributes object.</li>
+ * <li>If not attributes object is include when the element is put into the cache, then the default
+ * attributes for the region will be used.</li>
+ * <li>The element attributes can be reset. This effectively results in a retrieval followed by a
+ * put. Hence, this is the same as 1.</li>
+ * </ol>
+ */
+public class ElementAttributes
+    implements IElementAttributes, Serializable
+{
+    /** Don't change. */
+    private static final long serialVersionUID = 7814990748035017441L;
+
+    /** Can this item be flushed to disk */
+    private boolean IS_SPOOL = true;
+
+    /** Is this item laterally distributable */
+    private boolean IS_LATERAL = true;
+
+    /** Can this item be sent to the remote cache */
+    private boolean IS_REMOTE = true;
+
+    /**
+     * You can turn off expiration by setting this to true. This causes the cache to bypass both max
+     * life and idle time expiration.
+     */
+    private boolean IS_ETERNAL = true;
+
+    /** Max life seconds */
+    private long maxLife = -1;
+
+    /**
+     * The maximum time an entry can be idle. Setting this to -1 causes the idle time check to be
+     * ignored.
+     */
+    private long maxIdleTime = -1;
+
+    /** The byte size of the field. Must be manually set. */
+    private int size = 0;
+
+    /** The creation time. This is used to enforce the max life. */
+    private long createTime = 0;
+
+    /** The last access time. This is used to enforce the max idel time. */
+    private long lastAccessTime = 0;
+
+    /**
+     * The list of Event handlers to use. This is transient, since the event handlers cannot usually
+     * be serialized. This means that you cannot attach a post serialization event to an item.
+     * <p>
+     * TODO we need to check that when an item is passed to a non-local cache that if the local
+     * cache had a copy with event handlers, that those handlers are used.
+     */
+    private transient ArrayList<IElementEventHandler> eventHandlers;
+
+    private long timeFactor = 1000;
+
+    /**
+     * Constructor for the IElementAttributes object
+     */
+    public ElementAttributes()
+    {
+        this.createTime = System.currentTimeMillis();
+        this.lastAccessTime = this.createTime;
+    }
+
+    /**
+     * Constructor for the IElementAttributes object
+     * <p>
+     * @param attr
+     */
+    protected ElementAttributes( ElementAttributes attr )
+    {
+        IS_ETERNAL = attr.IS_ETERNAL;
+
+        // waterfall onto disk, for pure disk set memory to 0
+        IS_SPOOL = attr.IS_SPOOL;
+
+        // lateral
+        IS_LATERAL = attr.IS_LATERAL;
+
+        // central rmi store
+        IS_REMOTE = attr.IS_REMOTE;
+
+        maxLife = attr.maxLife;
+        // time-to-live
+        maxIdleTime = attr.maxIdleTime;
+        size = attr.size;
+    }
+
+    /**
+     * Copies the attributes, including references to event handlers.
+     * <p>
+     * @return a copy of the Attributes
+     */
+    @Override
+    public IElementAttributes copy()
+    {
+        try
+        {
+            // need to make this more efficient. Just want to insure
+            // a proper copy
+            ElementAttributes attr = new ElementAttributes();
+            attr.setIdleTime( this.getIdleTime() );
+            attr.setIsEternal( this.getIsEternal() );
+            attr.setIsLateral( this.getIsLateral() );
+            attr.setIsRemote( this.getIsRemote() );
+            attr.setIsSpool( this.getIsSpool() );
+            attr.setMaxLife(this.getMaxLife());
+            attr.addElementEventHandlers( this.eventHandlers );
+            return attr;
+        }
+        catch ( Exception e )
+        {
+            return new ElementAttributes();
+        }
+    }
+
+    /**
+     * Sets the maxLife attribute of the IAttributes object.
+     * <p>
+     * @param mls The new MaxLifeSeconds value
+     */
+    @Override
+    public void setMaxLife(long mls)
+    {
+        this.maxLife = mls;
+    }
+
+    /**
+     * Sets the maxLife attribute of the IAttributes object. How many seconds it can live after
+     * creation.
+     * <p>
+     * If this is exceeded the element will not be returned, instead it will be removed. It will be
+     * removed on retrieval, or removed actively if the memory shrinker is turned on.
+     * @return The MaxLifeSeconds value
+     */
+    @Override
+    public long getMaxLife()
+    {
+        return this.maxLife;
+    }
+
+    /**
+     * Sets the idleTime attribute of the IAttributes object. This is the maximum time the item can
+     * be idle in the cache, that is not accessed.
+     * <p>
+     * If this is exceeded the element will not be returned, instead it will be removed. It will be
+     * removed on retrieval, or removed actively if the memory shrinker is turned on.
+     * @param idle The new idleTime value
+     */
+    @Override
+    public void setIdleTime( long idle )
+    {
+        this.maxIdleTime = idle;
+    }
+
+    /**
+     * Size in bytes. This is not used except in the admin pages. It will be -1 by default.
+     * <p>
+     * @param size The new size value
+     */
+    @Override
+    public void setSize( int size )
+    {
+        this.size = size;
+    }
+
+    /**
+     * Gets the size attribute of the IAttributes object
+     * <p>
+     * @return The size value
+     */
+    @Override
+    public int getSize()
+    {
+        return size;
+    }
+
+    /**
+     * Gets the createTime attribute of the IAttributes object.
+     * <p>
+     * This should be the current time in milliseconds returned by the sysutem call when the element
+     * is put in the cache.
+     * <p>
+     * Putting an item in the cache overrides any existing items.
+     * @return The createTime value
+     */
+    @Override
+    public long getCreateTime()
+    {
+        return createTime;
+    }
+
+    /**
+     * Sets the createTime attribute of the IElementAttributes object
+     */
+    public void setCreateTime()
+    {
+        createTime = System.currentTimeMillis();
+    }
+
+    /**
+     * Gets the idleTime attribute of the IAttributes object.
+     * <p>
+     * @return The idleTime value
+     */
+    @Override
+    public long getIdleTime()
+    {
+        return this.maxIdleTime;
+    }
+
+    /**
+     * Gets the time left to live of the IAttributes object.
+     * <p>
+     * This is the (max life + create time) - current time.
+     * @return The TimeToLiveSeconds value
+     */
+    @Override
+    public long getTimeToLiveSeconds()
+    {
+        final long now = System.currentTimeMillis();
+        final long timeFactorForMilliseconds = getTimeFactorForMilliseconds();
+        return ( this.getCreateTime() + this.getMaxLife() * timeFactorForMilliseconds - now ) / 1000;
+    }
+
+    /**
+     * Gets the LastAccess attribute of the IAttributes object.
+     * <p>
+     * @return The LastAccess value.
+     */
+    @Override
+    public long getLastAccessTime()
+    {
+        return this.lastAccessTime;
+    }
+
+    /**
+     * Sets the LastAccessTime as now of the IElementAttributes object
+     */
+    @Override
+    public void setLastAccessTimeNow()
+    {
+        this.lastAccessTime = System.currentTimeMillis();
+    }
+
+    /**
+     * only for use from test code
+     */
+    public void setLastAccessTime(long time)
+    {
+        this.lastAccessTime = time;
+    }
+
+    /**
+     * Can this item be spooled to disk
+     * <p>
+     * By default this is true.
+     * @return The spoolable value
+     */
+    @Override
+    public boolean getIsSpool()
+    {
+        return this.IS_SPOOL;
+    }
+
+    /**
+     * Sets the isSpool attribute of the IElementAttributes object
+     * <p>
+     * By default this is true.
+     * @param val The new isSpool value
+     */
+    @Override
+    public void setIsSpool( boolean val )
+    {
+        this.IS_SPOOL = val;
+    }
+
+    /**
+     * Is this item laterally distributable. Can it be sent to auxiliaries of type lateral.
+     * <p>
+     * By default this is true.
+     * @return The isLateral value
+     */
+    @Override
+    public boolean getIsLateral()
+    {
+        return this.IS_LATERAL;
+    }
+
+    /**
+     * Sets the isLateral attribute of the IElementAttributes object
+     * <p>
+     * By default this is true.
+     * @param val The new isLateral value
+     */
+    @Override
+    public void setIsLateral( boolean val )
+    {
+        this.IS_LATERAL = val;
+    }
+
+    /**
+     * Can this item be sent to the remote cache
+     * @return true if the item can be sent to a remote auxiliary
+     */
+    @Override
+    public boolean getIsRemote()
+    {
+        return this.IS_REMOTE;
+    }
+
+    /**
+     * Sets the isRemote attribute of the ElementAttributes object
+     * @param val The new isRemote value
+     */
+    @Override
+    public void setIsRemote( boolean val )
+    {
+        this.IS_REMOTE = val;
+    }
+
+    /**
+     * You can turn off expiration by setting this to true. The max life value will be ignored.
+     * <p>
+     * @return true if the item cannot expire.
+     */
+    @Override
+    public boolean getIsEternal()
+    {
+        return this.IS_ETERNAL;
+    }
+
+    /**
+     * Sets the isEternal attribute of the ElementAttributes object. True means that the item should
+     * never expire. If can still be removed if it is the least recently used, and you are using the
+     * LRUMemory cache. it just will not be filtered for expiration by the cache hub.
+     * <p>
+     * @param val The new isEternal value
+     */
+    @Override
+    public void setIsEternal( boolean val )
+    {
+        this.IS_ETERNAL = val;
+    }
+
+    /**
+     * Adds a ElementEventHandler. Handler's can be registered for multiple events. A registered
+     * handler will be called at every recognized event.
+     * <p>
+     * The alternative would be to register handlers for each event. Or maybe The handler interface
+     * should have a method to return whether it cares about certain events.
+     * <p>
+     * @param eventHandler The ElementEventHandler to be added to the list.
+     */
+    @Override
+    public void addElementEventHandler( IElementEventHandler eventHandler )
+    {
+        // lazy here, no concurrency problems expected
+        if ( this.eventHandlers == null )
+        {
+            this.eventHandlers = new ArrayList<IElementEventHandler>();
+        }
+        this.eventHandlers.add( eventHandler );
+    }
+
+    /**
+     * Sets the eventHandlers of the IElementAttributes object.
+     * <p>
+     * This add the references to the local list. Subsequent changes in the caller's list will not
+     * be reflected.
+     * <p>
+     * @param eventHandlers List of IElementEventHandler objects
+     */
+    @Override
+    public void addElementEventHandlers( List<IElementEventHandler> eventHandlers )
+    {
+        if ( eventHandlers == null )
+        {
+            return;
+        }
+
+        for (IElementEventHandler handler : eventHandlers)
+        {
+            addElementEventHandler(handler);
+        }
+    }
+
+    @Override
+    public long getTimeFactorForMilliseconds()
+    {
+        return timeFactor;
+    }
+
+    @Override
+    public void setTimeFactorForMilliseconds(long factor)
+    {
+        this.timeFactor = factor;
+    }
+
+    /**
+     * Gets the elementEventHandlers. Returns null if none exist. Makes checking easy.
+     * <p>
+     * @return The elementEventHandlers List of IElementEventHandler objects
+     */
+    @Override
+    public ArrayList<IElementEventHandler> getElementEventHandlers()
+    {
+        return this.eventHandlers;
+    }
+
+    /**
+     * For logging and debugging the element IElementAttributes.
+     * <p>
+     * @return String info about the values.
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder dump = new StringBuilder();
+
+        dump.append( "[ IS_LATERAL = " ).append( IS_LATERAL );
+        dump.append( ", IS_SPOOL = " ).append( IS_SPOOL );
+        dump.append( ", IS_REMOTE = " ).append( IS_REMOTE );
+        dump.append( ", IS_ETERNAL = " ).append( IS_ETERNAL );
+        dump.append( ", MaxLifeSeconds = " ).append( this.getMaxLife() );
+        dump.append( ", IdleTime = " ).append( this.getIdleTime() );
+        dump.append( ", CreateTime = " ).append( this.getCreateTime() );
+        dump.append( ", LastAccessTime = " ).append( this.getLastAccessTime() );
+        dump.append( ", getTimeToLiveSeconds() = " ).append( String.valueOf( getTimeToLiveSeconds() ) );
+        dump.append( ", createTime = " ).append( String.valueOf( createTime ) ).append( " ]" );
+
+        return dump.toString();
+    }
+}
diff --git a/src/org/apache/commons/jcs/engine/PooledCacheEventQueue.java b/src/org/apache/commons/jcs/engine/PooledCacheEventQueue.java
new file mode 100644
index 0000000..56cc973
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/PooledCacheEventQueue.java
@@ -0,0 +1,228 @@
+package org.apache.commons.jcs.engine;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.behavior.ICacheListener;
+import org.apache.commons.jcs.engine.stats.StatElement;
+import org.apache.commons.jcs.engine.stats.Stats;
+import org.apache.commons.jcs.engine.stats.behavior.IStatElement;
+import org.apache.commons.jcs.engine.stats.behavior.IStats;
+import org.apache.commons.jcs.utils.threadpool.ThreadPoolManager;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.util.ArrayList;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+
+/**
+ * An event queue is used to propagate ordered cache events to one and only one target listener.
+ * <p>
+ * This is a modified version of the experimental version. It uses a PooledExecutor and a
+ * BoundedBuffer to queue up events and execute them as threads become available.
+ * <p>
+ * The PooledExecutor is static, because presumably these processes will be IO bound, so throwing
+ * more than a few threads at them will serve no purpose other than to saturate the IO interface. In
+ * light of this, having one thread per region seems unnecessary. This may prove to be false.
+ */
+public class PooledCacheEventQueue<K, V>
+    extends AbstractCacheEventQueue<K, V>
+{
+    /** The logger. */
+    private static final Log log = LogFactory.getLog( PooledCacheEventQueue.class );
+
+    /** The type of event queue */
+    private static final QueueType queueType = QueueType.POOLED;
+
+    /** The Thread Pool to execute events with. */
+    private ThreadPoolExecutor pool = null;
+
+    /**
+     * Constructor for the CacheEventQueue object
+     * <p>
+     * @param listener
+     * @param listenerId
+     * @param cacheName
+     * @param maxFailure
+     * @param waitBeforeRetry
+     * @param threadPoolName
+     */
+    public PooledCacheEventQueue( ICacheListener<K, V> listener, long listenerId, String cacheName, int maxFailure,
+                                  int waitBeforeRetry, String threadPoolName )
+    {
+        initialize( listener, listenerId, cacheName, maxFailure, waitBeforeRetry, threadPoolName );
+    }
+
+    /**
+     * Initializes the queue.
+     * <p>
+     * @param listener
+     * @param listenerId
+     * @param cacheName
+     * @param maxFailure
+     * @param waitBeforeRetry
+     * @param threadPoolName
+     */
+    @Override
+    public void initialize( ICacheListener<K, V> listener, long listenerId, String cacheName, int maxFailure,
+                            int waitBeforeRetry, String threadPoolName )
+    {
+        if ( listener == null )
+        {
+            throw new IllegalArgumentException( "listener must not be null" );
+        }
+
+        this.listener = listener;
+        this.listenerId = listenerId;
+        this.cacheName = cacheName;
+        this.maxFailure = maxFailure <= 0 ? 3 : maxFailure;
+        this.waitBeforeRetry = waitBeforeRetry <= 0 ? 500 : waitBeforeRetry;
+
+        // this will share the same pool with other event queues by default.
+        pool = ThreadPoolManager.getInstance().getPool(
+                (threadPoolName == null) ? "cache_event_queue" : threadPoolName );
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Initialized: " + this );
+        }
+    }
+
+    /**
+     * @return the queue type
+     */
+    @Override
+    public QueueType getQueueType()
+    {
+        return queueType;
+    }
+
+    /**
+     * Event Q is empty.
+     */
+    public synchronized void stopProcessing()
+    {
+        destroyed = true;
+    }
+
+    /**
+     * Destroy the queue. Interrupt all threads.
+     */
+    @Override
+    public synchronized void destroy()
+    {
+        if ( !destroyed )
+        {
+            destroyed = true;
+            pool.shutdownNow();
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "Cache event queue destroyed: " + this );
+            }
+        }
+    }
+
+    /**
+     * Adds an event to the queue.
+     * <p>
+     * @param event
+     */
+    @Override
+    protected void put( AbstractCacheEvent event )
+    {
+        pool.execute( event );
+    }
+
+    /**
+     * @return Statistics info
+     */
+    public String getStats()
+    {
+        return getStatistics().toString();
+    }
+
+    /**
+     * @return IStats
+     */
+    @Override
+    public IStats getStatistics()
+    {
+        IStats stats = new Stats();
+        stats.setTypeName( "Pooled Cache Event Queue" );
+
+        ArrayList<IStatElement<?>> elems = new ArrayList<IStatElement<?>>();
+
+        elems.add(new StatElement<Boolean>( "Working", Boolean.valueOf(super.isWorking()) ) );
+        elems.add(new StatElement<Boolean>( "Alive", Boolean.valueOf(this.isAlive()) ) );
+        elems.add(new StatElement<Boolean>( "Empty", Boolean.valueOf(this.isEmpty()) ) );
+
+        if ( pool.getQueue() != null )
+        {
+            BlockingQueue<Runnable> bb = pool.getQueue();
+            elems.add(new StatElement<Integer>( "Queue Size", Integer.valueOf(bb.size()) ) );
+            elems.add(new StatElement<Integer>( "Queue Capacity", Integer.valueOf(bb.remainingCapacity()) ) );
+        }
+
+        elems.add(new StatElement<Integer>( "Pool Size", Integer.valueOf(pool.getPoolSize()) ) );
+        elems.add(new StatElement<Integer>( "Maximum Pool Size", Integer.valueOf(pool.getMaximumPoolSize()) ) );
+
+        stats.setStatElements( elems );
+
+        return stats;
+    }
+
+    /**
+     * If the Queue is using a bounded channel we can determine the size. If it is zero or we can't
+     * determine the size, we return true.
+     * <p>
+     * @return whether or not there are items in the queue
+     */
+    @Override
+    public boolean isEmpty()
+    {
+        if ( pool.getQueue() == null )
+        {
+            return true;
+        }
+        else
+        {
+            return pool.getQueue().size() == 0;
+        }
+    }
+
+    /**
+     * Returns the number of elements in the queue. If the queue cannot determine the size
+     * accurately it will return 1.
+     * <p>
+     * @return number of items in the queue.
+     */
+    @Override
+    public int size()
+    {
+        if ( pool.getQueue() == null )
+        {
+            return 0;
+        }
+        else
+        {
+            return pool.getQueue().size();
+        }
+    }
+}
diff --git a/src/org/apache/commons/jcs/engine/ZombieCacheService.java b/src/org/apache/commons/jcs/engine/ZombieCacheService.java
new file mode 100644
index 0000000..dfa47fe
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/ZombieCacheService.java
@@ -0,0 +1,156 @@
+package org.apache.commons.jcs.engine;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.behavior.ICacheService;
+import org.apache.commons.jcs.engine.behavior.IZombie;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Zombie adapter for any cache service. Balks at every call.
+ */
+public class ZombieCacheService<K, V>
+    implements ICacheService<K, V>, IZombie
+{
+    /** The logger. */
+    private static final Log log = LogFactory.getLog( ZombieCacheService.class );
+
+    /**
+     * @param item
+     */
+    public void put( ICacheElement<K, V> item )
+    {
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Zombie put for item " + item );
+        }
+        // zombies have no inner life
+    }
+
+    /**
+     * Does nothing.
+     * <p>
+     * @param item
+     */
+    @Override
+    public void update( ICacheElement<K, V> item )
+    {
+        // zombies have no inner life
+    }
+
+    /**
+     * @param cacheName
+     * @param key
+     * @return null. zombies have no internal data
+     */
+    @Override
+    public ICacheElement<K, V> get( String cacheName, K key )
+    {
+        return null;
+    }
+
+    /**
+     * Returns an empty map. Zombies have no internal data.
+     * <p>
+     * @param cacheName
+     * @param keys
+     * @return Collections.EMPTY_MAP
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> getMultiple( String cacheName, Set<K> keys )
+    {
+        return Collections.emptyMap();
+    }
+
+    /**
+     * Returns an empty map. Zombies have no internal data.
+     * <p>
+     * @param cacheName
+     * @param pattern
+     * @return Collections.EMPTY_MAP
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> getMatching( String cacheName, String pattern )
+    {
+        return Collections.emptyMap();
+    }
+
+    /**
+     * Logs the get to debug, but always balks.
+     * <p>
+     * @param cacheName
+     * @param key
+     * @param container
+     * @return null always
+     */
+    public Serializable get( String cacheName, K key, boolean container )
+    {
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Zombie get for key [" + key + "] cacheName [" + cacheName + "] container [" + container + "]" );
+        }
+        // zombies have no inner life
+        return null;
+    }
+
+    /**
+     * @param cacheName
+     * @param key
+     */
+    @Override
+    public void remove( String cacheName, K key )
+    {
+        // zombies have no inner life
+    }
+
+    /**
+     * @param cacheName
+     */
+    @Override
+    public void removeAll( String cacheName )
+    {
+        // zombies have no inner life
+    }
+
+    /**
+     * @param cacheName
+     */
+    @Override
+    public void dispose( String cacheName )
+    {
+        // zombies have no inner life
+    }
+
+    /**
+     * Frees all caches.
+     */
+    @Override
+    public void release()
+    {
+        // zombies have no inner life
+    }
+}
diff --git a/src/org/apache/commons/jcs/engine/ZombieCacheServiceNonLocal.java b/src/org/apache/commons/jcs/engine/ZombieCacheServiceNonLocal.java
new file mode 100644
index 0000000..857fb08
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/ZombieCacheServiceNonLocal.java
@@ -0,0 +1,313 @@
+package org.apache.commons.jcs.engine;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.behavior.ICacheServiceNonLocal;
+import org.apache.commons.jcs.utils.struct.BoundedQueue;
+import org.apache.commons.jcs.utils.timing.ElapsedTimer;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.IOException;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Zombie adapter for the non local cache services. It just balks if there is no queue configured.
+ * <p>
+ * If a queue is configured, then events will be added to the queue. The idea is that when proper
+ * operation is restored, the non local cache will walk the queue. The queue must be bounded so it
+ * does not eat memory.
+ * <p>
+ * This originated in the remote cache.
+ */
+public class ZombieCacheServiceNonLocal<K, V>
+    extends ZombieCacheService<K, V>
+    implements ICacheServiceNonLocal<K, V>
+{
+    /** The logger */
+    private static final Log log = LogFactory.getLog( ZombieCacheServiceNonLocal.class );
+
+    /** How big can the queue grow. */
+    private int maxQueueSize = 0;
+
+    /** The queue */
+    private final BoundedQueue<ZombieEvent> queue;
+
+    /**
+     * Default.
+     */
+    public ZombieCacheServiceNonLocal()
+    {
+        queue = new BoundedQueue<ZombieEvent>( 0 );
+    }
+
+    /**
+     * Sets the maximum number of items that will be allowed on the queue.
+     * <p>
+     * @param maxQueueSize
+     */
+    public ZombieCacheServiceNonLocal( int maxQueueSize )
+    {
+        this.maxQueueSize = maxQueueSize;
+        queue = new BoundedQueue<ZombieEvent>( maxQueueSize );
+    }
+
+    /**
+     * Gets the number of items on the queue.
+     * <p>
+     * @return size of the queue.
+     */
+    public int getQueueSize()
+    {
+        return queue.size();
+    }
+
+    /**
+     * Adds an update event to the queue if the maxSize is greater than 0;
+     * <p>
+     * @param item ICacheElement
+     * @param listenerId - identifies the caller.
+     */
+    @Override
+    public void update( ICacheElement<K, V> item, long listenerId )
+    {
+        if ( maxQueueSize > 0 )
+        {
+            PutEvent<K, V> event = new PutEvent<K, V>( item, listenerId );
+            queue.add( event );
+        }
+        // Zombies have no inner life
+    }
+
+    /**
+     * Adds a removeAll event to the queue if the maxSize is greater than 0;
+     * <p>
+     * @param cacheName - region name
+     * @param key - item key
+     * @param listenerId - identifies the caller.
+     */
+    @Override
+    public void remove( String cacheName, K key, long listenerId )
+    {
+        if ( maxQueueSize > 0 )
+        {
+            RemoveEvent<K> event = new RemoveEvent<K>( cacheName, key, listenerId );
+            queue.add( event );
+        }
+        // Zombies have no inner life
+    }
+
+    /**
+     * Adds a removeAll event to the queue if the maxSize is greater than 0;
+     * <p>
+     * @param cacheName - name of the region
+     * @param listenerId - identifies the caller.
+     */
+    @Override
+    public void removeAll( String cacheName, long listenerId )
+    {
+        if ( maxQueueSize > 0 )
+        {
+            RemoveAllEvent event = new RemoveAllEvent( cacheName, listenerId );
+            queue.add( event );
+        }
+        // Zombies have no inner life
+    }
+
+    /**
+     * Does nothing. Gets are synchronous and cannot be added to a queue.
+     * <p>
+     * @param cacheName - region name
+     * @param key - item key
+     * @param requesterId - identifies the caller.
+     * @return null
+     * @throws IOException
+     */
+    @Override
+    public ICacheElement<K, V> get( String cacheName, K key, long requesterId )
+        throws IOException
+    {
+        // Zombies have no inner life
+        return null;
+    }
+
+    /**
+     * Does nothing.
+     * <p>
+     * @param cacheName
+     * @param pattern
+     * @param requesterId
+     * @return empty map
+     * @throws IOException
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> getMatching( String cacheName, String pattern, long requesterId )
+        throws IOException
+    {
+        return Collections.emptyMap();
+    }
+
+    /**
+     * @param cacheName - region name
+     * @param keys - item key
+     * @param requesterId - identity of the caller
+     * @return an empty map. zombies have no internal data
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> getMultiple( String cacheName, Set<K> keys, long requesterId )
+    {
+        return new HashMap<K, ICacheElement<K, V>>();
+    }
+
+    /**
+     * Does nothing.
+     * <p>
+     * @param cacheName - region name
+     * @return empty set
+     */
+    @Override
+    public Set<K> getKeySet( String cacheName )
+    {
+        return Collections.emptySet();
+    }
+
+    /**
+     * Walk the queue, calling the service for each queue operation.
+     * <p>
+     * @param service
+     * @throws Exception
+     */
+    public synchronized void propagateEvents( ICacheServiceNonLocal<K, V> service )
+        throws Exception
+    {
+        int cnt = 0;
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "Propagating events to the new ICacheServiceNonLocal." );
+        }
+        ElapsedTimer timer = new ElapsedTimer();
+        while ( !queue.isEmpty() )
+        {
+            cnt++;
+
+            // for each item, call the appropriate service method
+            ZombieEvent event = queue.take();
+
+            if ( event instanceof PutEvent )
+            {
+                @SuppressWarnings("unchecked") // Type checked by instanceof
+                PutEvent<K, V> putEvent = (PutEvent<K, V>) event;
+                service.update( putEvent.element, event.requesterId );
+            }
+            else if ( event instanceof RemoveEvent )
+            {
+                @SuppressWarnings("unchecked") // Type checked by instanceof
+                RemoveEvent<K> removeEvent = (RemoveEvent<K>) event;
+                service.remove( event.cacheName, removeEvent.key, event.requesterId );
+            }
+            else if ( event instanceof RemoveAllEvent )
+            {
+                service.removeAll( event.cacheName, event.requesterId );
+            }
+        }
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "Propagated " + cnt + " events to the new ICacheServiceNonLocal in "
+                + timer.getElapsedTimeString() );
+        }
+    }
+
+    /**
+     * Base of the other events.
+     */
+    protected static abstract class ZombieEvent
+    {
+        /** The name of the region. */
+        String cacheName;
+
+        /** The id of the requester */
+        long requesterId;
+    }
+
+    /**
+     * A basic put event.
+     */
+    private static class PutEvent<K, V>
+        extends ZombieEvent
+    {
+        /** The element to put */
+        ICacheElement<K, V> element;
+
+        /**
+         * Set the element
+         * @param element
+         * @param requesterId
+         */
+        public PutEvent( ICacheElement<K, V> element, long requesterId )
+        {
+            this.requesterId = requesterId;
+            this.element = element;
+        }
+    }
+
+    /**
+     * A basic Remove event.
+     */
+    private static class RemoveEvent<K>
+        extends ZombieEvent
+    {
+        /** The key to remove */
+        K key;
+
+        /**
+         * Set the element
+         * @param cacheName
+         * @param key
+         * @param requesterId
+         */
+        public RemoveEvent( String cacheName, K key, long requesterId )
+        {
+            this.cacheName = cacheName;
+            this.requesterId = requesterId;
+            this.key = key;
+        }
+    }
+
+    /**
+     * A basic RemoveAll event.
+     */
+    private static class RemoveAllEvent
+        extends ZombieEvent
+    {
+        /**
+         * @param cacheName
+         * @param requesterId
+         */
+        public RemoveAllEvent( String cacheName, long requesterId )
+        {
+            this.cacheName = cacheName;
+            this.requesterId = requesterId;
+        }
+    }
+}
diff --git a/src/org/apache/commons/jcs/engine/ZombieCacheWatch.java b/src/org/apache/commons/jcs/engine/ZombieCacheWatch.java
new file mode 100644
index 0000000..8a17e57
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/ZombieCacheWatch.java
@@ -0,0 +1,73 @@
+package org.apache.commons.jcs.engine;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.behavior.ICacheListener;
+import org.apache.commons.jcs.engine.behavior.ICacheObserver;
+import org.apache.commons.jcs.engine.behavior.IZombie;
+
+/**
+ * Zombie Observer.
+ */
+public class ZombieCacheWatch
+    implements ICacheObserver, IZombie
+{
+    /**
+     * Adds a feature to the CacheListener attribute of the ZombieCacheWatch object
+     * <p>
+     * @param cacheName The feature to be added to the CacheListener attribute
+     * @param obj The feature to be added to the CacheListener attribute
+     */
+    @Override
+    public <K, V> void addCacheListener( String cacheName, ICacheListener<K, V> obj )
+    {
+        // empty
+    }
+
+    /**
+     * Adds a feature to the CacheListener attribute of the ZombieCacheWatch object
+     * <p>
+     * @param obj The feature to be added to the CacheListener attribute
+     */
+    @Override
+    public <K, V> void addCacheListener( ICacheListener<K, V> obj )
+    {
+        // empty
+    }
+
+    /**
+     * @param cacheName
+     * @param obj
+     */
+    @Override
+    public <K, V> void removeCacheListener( String cacheName, ICacheListener<K, V> obj )
+    {
+        // empty
+    }
+
+    /**
+     * @param obj
+     */
+    @Override
+    public <K, V> void removeCacheListener( ICacheListener<K, V> obj )
+    {
+        // empty
+    }
+}
diff --git a/src/org/apache/commons/jcs/engine/behavior/ICache.java b/src/org/apache/commons/jcs/engine/behavior/ICache.java
new file mode 100644
index 0000000..3398336
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/behavior/ICache.java
@@ -0,0 +1,141 @@
+package org.apache.commons.jcs.engine.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.CacheStatus;
+import org.apache.commons.jcs.engine.match.behavior.IKeyMatcher;
+
+import java.io.IOException;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * This is the top level interface for all cache like structures. It defines the methods used
+ * internally by JCS to access, modify, and instrument such structures.
+ * <p>
+ * This allows for a suite of reusable components for accessing such structures, for example
+ * asynchronous access via an event queue.
+ */
+public interface ICache<K, V>
+    extends ICacheType
+{
+    /**
+     * Puts an item to the cache.
+     * <p>
+     * @param element
+     * @throws IOException
+     */
+    void update( ICacheElement<K, V> element )
+        throws IOException;
+
+    /**
+     * Gets an item from the cache.
+     * <p>
+     * @param key
+     * @return a cache element, or null if there is no data in cache for this key
+     * @throws IOException
+     */
+    ICacheElement<K, V> get( K key )
+        throws IOException;
+
+    /**
+     * Gets multiple items from the cache based on the given set of keys.
+     * <p>
+     * @param keys
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no data in cache for any of these keys
+     * @throws IOException
+     */
+    Map<K, ICacheElement<K, V>> getMultiple(Set<K> keys)
+        throws IOException;
+
+    /**
+     * Gets items from the cache matching the given pattern.  Items from memory will replace those from remote sources.
+     * <p>
+     * This only works with string keys.  It's too expensive to do a toString on every key.
+     * <p>
+     * Auxiliaries will do their best to handle simple expressions.  For instance, the JDBC disk cache will convert * to % and . to _
+     * <p>
+     * @param pattern
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no data matching the pattern.
+     * @throws IOException
+     */
+    Map<K, ICacheElement<K, V>> getMatching(String pattern)
+        throws IOException;
+
+    /**
+     * Removes an item from the cache.
+     * <p>
+     * @param key
+     * @return false if there was an error in removal
+     * @throws IOException
+     */
+    boolean remove( K key )
+        throws IOException;
+
+    /**
+     * Removes all cached items from the cache.
+     * <p>
+     * @throws IOException
+     */
+    void removeAll()
+        throws IOException;
+
+    /**
+     * Prepares for shutdown.
+     * @throws IOException
+     */
+    void dispose()
+        throws IOException;
+
+    /**
+     * Returns the current cache size in number of elements.
+     * <p>
+     * @return number of elements
+     */
+    int getSize();
+
+    /**
+     * Returns the cache status.
+     * <p>
+     * @return Alive or Error
+     */
+    CacheStatus getStatus();
+
+    /**
+     * Returns the cache stats.
+     * <p>
+     * @return String of important historical information.
+     */
+    String getStats();
+
+    /**
+     * Returns the cache name.
+     * <p>
+     * @return usually the region name.
+     */
+    String getCacheName();
+
+    /**
+     * Sets the key matcher used by get matching.
+     * <p>
+     * @param keyMatcher
+     */
+    void setKeyMatcher( IKeyMatcher<K> keyMatcher );
+}
diff --git a/src/org/apache/commons/jcs/engine/behavior/ICacheElement.java b/src/org/apache/commons/jcs/engine/behavior/ICacheElement.java
new file mode 100644
index 0000000..3ce48b0
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/behavior/ICacheElement.java
@@ -0,0 +1,74 @@
+package org.apache.commons.jcs.engine.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.Serializable;
+
+/**
+ * Every item is the cache is wrapped in an ICacheElement. This contains
+ * information about the element: the region name, the key, the value, and the
+ * element attributes.
+ * <p>
+ * The element attributes have lots of useful information about each element,
+ * such as when they were created, how long they have to live, and if they are
+ * allowed to be spooled, etc.
+ *
+ */
+public interface ICacheElement<K, V>
+    extends Serializable
+{
+
+    /**
+     * Gets the cacheName attribute of the ICacheElement<K, V> object. The cacheName
+     * is also known as the region name.
+     *
+     * @return The cacheName value
+     */
+    String getCacheName();
+
+    /**
+     * Gets the key attribute of the ICacheElement<K, V> object
+     *
+     * @return The key value
+     */
+    K getKey();
+
+    /**
+     * Gets the val attribute of the ICacheElement<K, V> object
+     *
+     * @return The val value
+     */
+    V getVal();
+
+    /**
+     * Gets the attributes attribute of the ICacheElement<K, V> object
+     *
+     * @return The attributes value
+     */
+    IElementAttributes getElementAttributes();
+
+    /**
+     * Sets the attributes attribute of the ICacheElement<K, V> object
+     *
+     * @param attr
+     *            The new attributes value
+     */
+    void setElementAttributes( IElementAttributes attr );
+}
diff --git a/src/org/apache/commons/jcs/engine/behavior/ICacheElementSerialized.java b/src/org/apache/commons/jcs/engine/behavior/ICacheElementSerialized.java
new file mode 100644
index 0000000..d4da08d
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/behavior/ICacheElementSerialized.java
@@ -0,0 +1,41 @@
+package org.apache.commons.jcs.engine.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * This interface defines the behavior of the serialized element wrapper.
+ * <p>
+ * The value is stored as a byte array. This should allow for a variety of serialization mechanisms.
+ * <p>
+ * This currently extends ICacheElement<K, V> for backward compatibility.
+ *<p>
+ * @author Aaron Smuts
+ */
+public interface ICacheElementSerialized<K, V>
+    extends ICacheElement<K, V>
+{
+    /**
+     * Gets the value attribute of the ICacheElementSerialized object. This is the value the client
+     * cached serialized by some mechanism.
+     *<p>
+     * @return The serialized value
+     */
+    byte[] getSerializedValue();
+}
diff --git a/src/org/apache/commons/jcs/engine/behavior/ICacheEventQueue.java b/src/org/apache/commons/jcs/engine/behavior/ICacheEventQueue.java
new file mode 100644
index 0000000..618bdc1
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/behavior/ICacheEventQueue.java
@@ -0,0 +1,147 @@
+package org.apache.commons.jcs.engine.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.stats.behavior.IStats;
+
+import java.io.IOException;
+
+/**
+ * Interface for a cache event queue. An event queue is used to propagate
+ * ordered cache events to one and only one target listener.
+ */
+public interface ICacheEventQueue<K, V>
+{
+    enum QueueType
+    {
+        /** Does not use a thread pool. */
+        SINGLE,
+
+        /** Uses a thread pool. */
+        POOLED
+    }
+
+    /**
+     * Initializes the queue.
+     * <,p>
+     * @param listener
+     * @param listenerId
+     * @param cacheName
+     * @param maxFailure
+     * @param waitBeforeRetry
+     * @param threadPoolName
+     */
+    void initialize( ICacheListener<K, V> listener, long listenerId, String cacheName, int maxFailure,
+                            int waitBeforeRetry, String threadPoolName );
+
+    /**
+     * Return the type of event queue we are using, either single or pooled.
+     * <p>
+     * @return the queue type: single or pooled
+     */
+    QueueType getQueueType();
+
+    /**
+     * Adds a feature to the PutEvent attribute of the ICacheEventQueue object
+     * <p>
+     * @param ce
+     *            The feature to be added to the PutEvent attribute
+     * @throws IOException
+     */
+    void addPutEvent( ICacheElement<K, V> ce )
+        throws IOException;
+
+    /**
+     * Adds a feature to the RemoveEvent attribute of the ICacheEventQueue
+     * object
+     * <p>
+     * @param key
+     *            The feature to be added to the RemoveEvent attribute
+     * @throws IOException
+     */
+    void addRemoveEvent( K key )
+        throws IOException;
+
+    /**
+     * Adds a feature to the RemoveAllEvent attribute of the ICacheEventQueue
+     * object
+     * <p>
+     * @throws IOException
+     */
+    void addRemoveAllEvent()
+        throws IOException;
+
+    /**
+     * Adds a feature to the DisposeEvent attribute of the ICacheEventQueue
+     * object
+     * <p>
+     * @throws IOException
+     */
+    void addDisposeEvent()
+        throws IOException;
+
+    /**
+     * Gets the listenerId attribute of the ICacheEventQueue object
+     *
+     * @return The listenerId value
+     */
+    long getListenerId();
+
+    /** Description of the Method */
+    void destroy();
+
+    /**
+     * Gets the alive attribute of the ICacheEventQueue object. Alive just
+     * indicates that there are active threads. This is less important that if
+     * the queue is working.
+     * <p>
+     * @return The alive value
+     */
+    boolean isAlive();
+
+    /**
+     * A Queue is working unless it has reached its max failure count.
+     * <p>
+     * @return boolean
+     */
+    boolean isWorking();
+
+    /**
+     * Returns the number of elements in the queue.  If the queue cannot
+     * determine the size accurately it will return 1.
+     * <p>
+     * @return number of items in the queue.
+     */
+    int size();
+
+    /**
+     * Are there elements in the queue.
+     * <p>
+     * @return true if there are stil elements.
+     */
+    boolean isEmpty();
+
+    /**
+     * Returns the historical and statistical data for an event queue cache.
+     * <p>
+     * @return IStats
+     */
+    IStats getStatistics();
+}
diff --git a/src/org/apache/commons/jcs/engine/behavior/ICacheListener.java b/src/org/apache/commons/jcs/engine/behavior/ICacheListener.java
new file mode 100644
index 0000000..5e15913
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/behavior/ICacheListener.java
@@ -0,0 +1,86 @@
+package org.apache.commons.jcs.engine.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+
+/**
+ * Used to receive a cache event notification.
+ * <p>
+ * Note: objects which implement this interface are local listeners to cache changes, whereas
+ * objects which implement IRmiCacheListener are remote listeners to cache changes.
+ */
+public interface ICacheListener<K, V>
+{
+    /**
+     * Notifies the subscribers for a cache entry update.
+     * <p>
+     * @param item
+     * @throws IOException
+     */
+    void handlePut( ICacheElement<K, V> item )
+        throws IOException;
+
+    /**
+     * Notifies the subscribers for a cache entry removal.
+     * <p>
+     * @param cacheName
+     * @param key
+     * @throws IOException
+     */
+    void handleRemove( String cacheName, K key )
+        throws IOException;
+
+    /**
+     * Notifies the subscribers for a cache remove-all.
+     * <p>
+     * @param cacheName
+     * @throws IOException
+     */
+    void handleRemoveAll( String cacheName )
+        throws IOException;
+
+    /**
+     * Notifies the subscribers for freeing up the named cache.
+     * <p>
+     * @param cacheName
+     * @throws IOException
+     */
+    void handleDispose( String cacheName )
+        throws IOException;
+
+    /**
+     * sets unique identifier of listener home
+     * <p>
+     * @param id The new listenerId value
+     * @throws IOException
+     */
+    void setListenerId( long id )
+        throws IOException;
+
+    /**
+     * Gets the listenerId attribute of the ICacheListener object
+     * <p>
+     * @return The listenerId value
+     * @throws IOException
+     */
+    long getListenerId()
+        throws IOException;
+}
diff --git a/src/org/apache/commons/jcs/engine/behavior/ICacheManager.java b/src/org/apache/commons/jcs/engine/behavior/ICacheManager.java
new file mode 100644
index 0000000..59bd073
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/behavior/ICacheManager.java
@@ -0,0 +1,42 @@
+package org.apache.commons.jcs.engine.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.Serializable;
+
+
+/**
+ * Interface implemented by a specific cache.
+ *
+ */
+public interface ICacheManager
+    extends ICacheType
+{
+
+    /**
+     * methods to get a cache region from a manager
+     * @param cacheName
+     *
+     * @return The cache value
+     */
+    <K extends Serializable, V extends Serializable> ICache<K, V> getCache( String cacheName );
+
+}
+// end interface
diff --git a/src/org/apache/commons/jcs/engine/behavior/ICacheObserver.java b/src/org/apache/commons/jcs/engine/behavior/ICacheObserver.java
new file mode 100644
index 0000000..11c9a05
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/behavior/ICacheObserver.java
@@ -0,0 +1,78 @@
+package org.apache.commons.jcs.engine.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+
+/**
+ * Used to register interest in receiving cache changes. <br>
+ * <br>
+ * Note: server which implements this interface provides a local cache event
+ * notification service, whereas server which implements IRmiCacheWatch provides
+ * a remote cache event notification service.
+ *
+ */
+public interface ICacheObserver
+{
+    /**
+     * Subscribes to the specified cache.
+     *
+     * @param cacheName
+     *            the specified cache.
+     * @param obj
+     *            object to notify for cache changes.
+     * @throws IOException
+     */
+    <K, V> void addCacheListener( String cacheName, ICacheListener<K, V> obj )
+        throws IOException;
+
+    //, CacheNotFoundException;
+
+    /**
+     * Subscribes to all caches.
+     *
+     * @param obj
+     *            object to notify for all cache changes.
+     * @throws IOException
+     */
+    <K, V> void addCacheListener( ICacheListener<K, V> obj )
+        throws IOException;
+
+    /**
+     * Unsubscribes from the specified cache.
+     * @param cacheName
+     *
+     * @param obj
+     *            existing subscriber.
+     * @throws IOException
+     */
+    <K, V> void removeCacheListener( String cacheName, ICacheListener<K, V> obj )
+        throws IOException;
+
+    /**
+     * Unsubscribes from all caches.
+     *
+     * @param obj
+     *            existing subscriber.
+     * @throws IOException
+     */
+    <K, V> void removeCacheListener( ICacheListener<K, V> obj )
+        throws IOException;
+}
diff --git a/src/org/apache/commons/jcs/engine/behavior/ICacheRestore.java b/src/org/apache/commons/jcs/engine/behavior/ICacheRestore.java
new file mode 100644
index 0000000..2e7efa3
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/behavior/ICacheRestore.java
@@ -0,0 +1,37 @@
+package org.apache.commons.jcs.engine.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * TODO: Description of the Interface
+ *
+ */
+public interface ICacheRestore
+{
+    /**
+     * Tries to fix the cache, returns true if successful.
+     *
+     * @return true if fixed
+     */
+    boolean canFix();
+
+    /** Fix the cache */
+    void fix();
+}
diff --git a/src/org/apache/commons/jcs/engine/behavior/ICacheService.java b/src/org/apache/commons/jcs/engine/behavior/ICacheService.java
new file mode 100644
index 0000000..f1f59c8
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/behavior/ICacheService.java
@@ -0,0 +1,117 @@
+package org.apache.commons.jcs.engine.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.access.exception.ObjectExistsException;
+import org.apache.commons.jcs.access.exception.ObjectNotFoundException;
+
+import java.io.IOException;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Used to retrieve and update the cache.
+ * <p>
+ * Note: server which implements this interface provides a local cache service, whereas server which
+ * implements IRmiCacheService provides a remote cache service.
+ */
+public interface ICacheService<K, V>
+{
+    /**
+     * Puts a cache item to the cache.
+     * <p>
+     * @param item
+     * @throws ObjectExistsException
+     * @throws IOException
+     */
+    void update( ICacheElement<K, V> item )
+        throws ObjectExistsException, IOException;
+
+    /**
+     * Returns a cache bean from the specified cache; or null if the key does not exist.
+     * <p>
+     * @param cacheName
+     * @param key
+     * @return the ICacheElement<K, V> or null if not found
+     * @throws ObjectNotFoundException
+     * @throws IOException
+     */
+    ICacheElement<K, V> get( String cacheName, K key )
+        throws ObjectNotFoundException, IOException;
+
+    /**
+     * Gets multiple items from the cache based on the given set of keys.
+     * <p>
+     * @param cacheName
+     * @param keys
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data in cache for any of these keys
+     * @throws ObjectNotFoundException
+     * @throws IOException
+     */
+    Map<K, ICacheElement<K, V>> getMultiple( String cacheName, Set<K> keys )
+        throws ObjectNotFoundException, IOException;
+
+    /**
+     * Gets multiple items from the cache matching the pattern.
+     * <p>
+     * @param cacheName
+     * @param pattern
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data in cache matching the pattern.
+     * @throws IOException
+     */
+    Map<K, ICacheElement<K, V>> getMatching( String cacheName, String pattern )
+        throws IOException;
+
+    /**
+     * Removes the given key from the specified cache.
+     * <p>
+     * @param cacheName
+     * @param key
+     * @throws IOException
+     */
+    void remove( String cacheName, K key )
+        throws IOException;
+
+    /**
+     * Remove all keys from the specified cache.
+     * @param cacheName
+     * @throws IOException
+     */
+    void removeAll( String cacheName )
+        throws IOException;
+
+    /**
+     * Frees the specified cache.
+     * <p>
+     * @param cacheName
+     * @throws IOException
+     */
+    void dispose( String cacheName )
+        throws IOException;
+
+    /**
+     * Frees all caches.
+     * @throws IOException
+     */
+    void release()
+        throws IOException;
+}
diff --git a/src/org/apache/commons/jcs/engine/behavior/ICacheServiceAdmin.java b/src/org/apache/commons/jcs/engine/behavior/ICacheServiceAdmin.java
new file mode 100644
index 0000000..856ff51
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/behavior/ICacheServiceAdmin.java
@@ -0,0 +1,51 @@
+package org.apache.commons.jcs.engine.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+
+/**
+ * Description of the Interface
+ *
+ */
+public interface ICacheServiceAdmin
+{
+
+    /**
+     * Gets the stats attribute of the ICacheServiceAdmin object
+     *
+     * @return The stats value
+     * @throws IOException
+     */
+    String getStats()
+        throws IOException;
+
+    /** Description of the Method
+     * @throws IOException*/
+    void shutdown()
+        throws IOException;
+
+    /** Description of the Method
+     * @param host
+     * @param port
+     * @throws IOException*/
+    void shutdown( String host, int port )
+        throws IOException;
+}
diff --git a/src/org/apache/commons/jcs/engine/behavior/ICacheServiceNonLocal.java b/src/org/apache/commons/jcs/engine/behavior/ICacheServiceNonLocal.java
new file mode 100644
index 0000000..a150b3b
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/behavior/ICacheServiceNonLocal.java
@@ -0,0 +1,118 @@
+package org.apache.commons.jcs.engine.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.rmi.Remote;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Used to retrieve and update non local caches, such as the remote and lateral caches. Unlike
+ * ICacheService, the methods here have a requester id. This allows us to avoid propagating events
+ * to ourself.
+ * <p>
+ * TODO consider not extending ICacheService
+ */
+public interface ICacheServiceNonLocal<K, V>
+    extends Remote, ICacheService<K, V>
+{
+    /**
+     * Puts a cache item to the cache.
+     * <p>
+     * @param item
+     * @param requesterId
+     * @throws IOException
+     */
+    void update( ICacheElement<K, V> item, long requesterId )
+        throws IOException;
+
+    /**
+     * Removes the given key from the specified cache.
+     * <p>
+     * @param cacheName
+     * @param key
+     * @param requesterId
+     * @throws IOException
+     */
+    void remove( String cacheName, K key, long requesterId )
+        throws IOException;
+
+    /**
+     * Remove all keys from the specified cache.
+     * <p>
+     * @param cacheName
+     * @param requesterId
+     * @throws IOException
+     */
+    void removeAll( String cacheName, long requesterId )
+        throws IOException;
+
+    /**
+     * Returns a cache bean from the specified cache; or null if the key does not exist.
+     * <p>
+     * Adding the requester id, allows the cache to determine the source of the get.
+     * <p>
+     * @param cacheName
+     * @param key
+     * @param requesterId
+     * @return ICacheElement
+     * @throws IOException
+     */
+    ICacheElement<K, V> get( String cacheName, K key, long requesterId )
+        throws IOException;
+
+    /**
+     * Gets multiple items from the cache based on the given set of keys.
+     * <p>
+     * @param cacheName
+     * @param keys
+     * @param requesterId
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data in cache for any of these keys
+     * @throws IOException
+     */
+    Map<K, ICacheElement<K, V>> getMultiple( String cacheName, Set<K> keys, long requesterId )
+        throws IOException;
+
+    /**
+     * Gets multiple items from the cache matching the pattern.
+     * <p>
+     * @param cacheName
+     * @param pattern
+     * @param requesterId
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data in cache matching the pattern.
+     * @throws IOException
+     */
+    Map<K, ICacheElement<K, V>> getMatching( String cacheName, String pattern, long requesterId )
+        throws IOException;
+
+    /**
+     * Get a set of the keys for all elements in the cache.
+     * <p>
+     * @param cacheName the name of the cache
+     * @return a set of the key type
+     * TODO This should probably be done in chunks with a range passed in. This
+     *       will be a problem if someone puts a 1,000,000 or so items in a
+     *       region.
+     */
+    Set<K> getKeySet( String cacheName ) throws IOException;
+}
diff --git a/src/org/apache/commons/jcs/engine/behavior/ICacheType.java b/src/org/apache/commons/jcs/engine/behavior/ICacheType.java
new file mode 100644
index 0000000..3828f3a
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/behavior/ICacheType.java
@@ -0,0 +1,49 @@
+package org.apache.commons.jcs.engine.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Interface implemented by a specific cache.
+ *
+ */
+public interface ICacheType
+{
+    enum CacheType {
+        /** Composite/ memory cache type, central hub. */
+        CACHE_HUB,
+
+        /** Disk cache type. */
+        DISK_CACHE,
+
+        /** Lateral cache type. */
+        LATERAL_CACHE,
+
+        /** Remote cache type. */
+        REMOTE_CACHE
+    }
+
+    /**
+     * Returns the cache type.
+     * <p>
+     * @return The cacheType value
+     */
+    CacheType getCacheType();
+
+}
diff --git a/src/org/apache/commons/jcs/engine/behavior/ICompositeCacheAttributes.java b/src/org/apache/commons/jcs/engine/behavior/ICompositeCacheAttributes.java
new file mode 100644
index 0000000..49e45cc
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/behavior/ICompositeCacheAttributes.java
@@ -0,0 +1,246 @@
+package org.apache.commons.jcs.engine.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.Serializable;
+
+/**
+ * This defines the minimal behavior for the Cache Configuration settings.
+ */
+public interface ICompositeCacheAttributes
+    extends Serializable
+{
+    enum DiskUsagePattern
+    {
+        /** Items will only go to disk when the memory limit is reached. This is the default. */
+        SWAP,
+
+        /**
+         * Items will go to disk on a normal put. If The disk usage pattern is UPDATE, the swap will be
+         * disabled.
+         */
+        UPDATE
+    }
+
+    /**
+     * SetMaxObjects is used to set the attribute to determine the maximum
+     * number of objects allowed in the memory cache. If the max number of
+     * objects or the cache size is set, the default for the one not set is
+     * ignored. If both are set, both are used to determine the capacity of the
+     * cache, i.e., object will be removed from the cache if either limit is
+     * reached. TODO: move to MemoryCache config file.
+     * <p>
+     * @param size
+     *            The new maxObjects value
+     */
+    void setMaxObjects( int size );
+
+    /**
+     * Gets the maxObjects attribute of the ICompositeCacheAttributes object
+     * <p>
+     * @return The maxObjects value
+     */
+    int getMaxObjects();
+
+    /**
+     * Sets the useDisk attribute of the ICompositeCacheAttributes object
+     * <p>
+     * @param useDisk
+     *            The new useDisk value
+     */
+    void setUseDisk( boolean useDisk );
+
+    /**
+     * Gets the useDisk attribute of the ICompositeCacheAttributes object
+     * <p>
+     * @return The useDisk value
+     */
+    boolean isUseDisk();
+
+    /**
+     * set whether the cache should use a lateral cache
+     * <p>
+     * @param d
+     *            The new useLateral value
+     */
+    void setUseLateral( boolean d );
+
+    /**
+     * Gets the useLateral attribute of the ICompositeCacheAttributes object
+     * <p>
+     * @return The useLateral value
+     */
+    boolean isUseLateral();
+
+    /**
+     * Sets whether the cache is remote enabled
+     * <p>
+     * @param isRemote
+     *            The new useRemote value
+     */
+    void setUseRemote( boolean isRemote );
+
+    /**
+     * returns whether the cache is remote enabled
+     * <p>
+     * @return The useRemote value
+     */
+    boolean isUseRemote();
+
+    /**
+     * Sets the name of the cache, referenced by the appropriate manager.
+     * <p>
+     * @param s
+     *            The new cacheName value
+     */
+    void setCacheName( String s );
+
+    /**
+     * Gets the cacheName attribute of the ICompositeCacheAttributes object
+     * <p>
+     * @return The cacheName value
+     */
+    String getCacheName();
+
+    /**
+     * Sets the name of the MemoryCache, referenced by the appropriate manager.
+     * TODO: create a separate memory cache attribute class.
+     * <p>
+     * @param s
+     *            The new memoryCacheName value
+     */
+    void setMemoryCacheName( String s );
+
+    /**
+     * Gets the memoryCacheName attribute of the ICompositeCacheAttributes
+     * object
+     * <p>
+     * @return The memoryCacheName value
+     */
+    String getMemoryCacheName();
+
+    /**
+     * Whether the memory cache should perform background memory shrinkage.
+     * <p>
+     * @param useShrinker
+     *            The new UseMemoryShrinker value
+     */
+    void setUseMemoryShrinker( boolean useShrinker );
+
+    /**
+     * Whether the memory cache should perform background memory shrinkage.
+     * <p>
+     * @return The UseMemoryShrinker value
+     */
+    boolean isUseMemoryShrinker();
+
+    /**
+     * If UseMemoryShrinker is true the memory cache should auto-expire elements
+     * to reclaim space.
+     * <p>
+     * @param seconds
+     *            The new MaxMemoryIdleTimeSeconds value
+     */
+    void setMaxMemoryIdleTimeSeconds( long seconds );
+
+    /**
+     * If UseMemoryShrinker is true the memory cache should auto-expire elements
+     * to reclaim space.
+     * <p>
+     * @return The MaxMemoryIdleTimeSeconds value
+     */
+    long getMaxMemoryIdleTimeSeconds();
+
+    /**
+     * If UseMemoryShrinker is true the memory cache should auto-expire elements
+     * to reclaim space. This sets the shrinker interval.
+     * <p>
+     * @param seconds
+     *            The new ShrinkerIntervalSeconds value
+     */
+    void setShrinkerIntervalSeconds( long seconds );
+
+    /**
+     * If UseMemoryShrinker is true the memory cache should auto-expire elements
+     * to reclaim space. This gets the shrinker interval.
+     * <p>
+     * @return The ShrinkerIntervalSeconds value
+     */
+    long getShrinkerIntervalSeconds();
+
+    /**
+     * If UseMemoryShrinker is true the memory cache should auto-expire elements
+     * to reclaim space. This sets the maximum number of items to spool per run.
+     * <p>
+     * @param maxSpoolPerRun
+     *            The new maxSpoolPerRun value
+     */
+    void setMaxSpoolPerRun( int maxSpoolPerRun );
+
+    /**
+     * If UseMemoryShrinker is true the memory cache should auto-expire elements
+     * to reclaim space. This gets the maximum number of items to spool per run.
+     * <p>
+     * @return The maxSpoolPerRun value
+     */
+    int getMaxSpoolPerRun();
+
+    /**
+     * Clones the attributes.
+     * <p>
+     * @return a new object with the same settings.
+     */
+    ICompositeCacheAttributes copy();
+
+    /**
+     * By default this is SWAP_ONLY.
+     * <p>
+     * @param diskUsagePattern The diskUsagePattern to set.
+     */
+    void setDiskUsagePattern( DiskUsagePattern diskUsagePattern );
+
+    /**
+     * Translates the name to the disk usage pattern short value.
+     * <p>
+     * The allowed values are SWAP and UPDATE.
+     * <p>
+     * @param diskUsagePatternName The diskUsagePattern to set.
+     */
+    void setDiskUsagePatternName( String diskUsagePatternName );
+
+    /**
+     * @return Returns the diskUsagePattern.
+     */
+    DiskUsagePattern getDiskUsagePattern();
+
+    /**
+     * Number to send to disk at at time when memory is full.
+     * <p>
+     * @return int
+     */
+    int getSpoolChunkSize();
+
+    /**
+     * Number to send to disk at a time.
+     * <p>
+     * @param spoolChunkSize
+     */
+    void setSpoolChunkSize( int spoolChunkSize );
+}
diff --git a/src/org/apache/commons/jcs/engine/behavior/ICompositeCacheManager.java b/src/org/apache/commons/jcs/engine/behavior/ICompositeCacheManager.java
new file mode 100644
index 0000000..caf499c
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/behavior/ICompositeCacheManager.java
@@ -0,0 +1,64 @@
+package org.apache.commons.jcs.engine.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.AuxiliaryCache;
+import org.apache.commons.jcs.engine.control.CompositeCache;
+
+import java.util.Properties;
+
+/**
+ * I need the interface so I can plug in mock managers for testing.
+ *
+ * @author Aaron Smuts
+ */
+public interface ICompositeCacheManager extends IShutdownObservable
+{
+    /**
+     * Gets the cache attribute of the CacheHub object
+     *
+     * @param cacheName
+     * @return CompositeCache
+     */
+    <K, V> CompositeCache<K, V>  getCache( String cacheName );
+
+    /**
+     * Gets the auxiliary cache attribute of the CacheHub object
+     *
+     * @param auxName
+     * @param cacheName
+     * @return AuxiliaryCache
+     */
+    <K, V> AuxiliaryCache<K, V>  getAuxiliaryCache( String auxName, String cacheName );
+
+    /**
+     * This is exposed so other manager can get access to the props.
+     * <p>
+     * @return the configurationProperties
+     */
+    Properties getConfigurationProperties();
+
+    /**
+     * Gets stats for debugging.
+     * <p>
+     * @return String
+     */
+    String getStats();
+}
diff --git a/src/org/apache/commons/jcs/engine/behavior/IElementAttributes.java b/src/org/apache/commons/jcs/engine/behavior/IElementAttributes.java
new file mode 100644
index 0000000..1786b1d
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/behavior/IElementAttributes.java
@@ -0,0 +1,203 @@
+package org.apache.commons.jcs.engine.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.control.event.behavior.IElementEventHandler;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Interface for cache element attributes classes. Every item is the cache is associated with an
+ * element attributes object. It is used to track the life of the object as well as to restrict its
+ * behavior. By default, elements get a clone of the region's attributes.
+ */
+public interface IElementAttributes
+{
+    /**
+     * Sets the maxLife attribute of the IAttributes object.
+     * <p>
+     * @param mls The new MaxLifeSeconds value
+     */
+    void setMaxLife(long mls);
+
+    /**
+     * Sets the maxLife attribute of the IAttributes object. How many seconds it can live after
+     * creation.
+     * <p>
+     * If this is exceeded the element will not be returned, instead it will be removed. It will be
+     * removed on retrieval, or removed actively if the memory shrinker is turned on.
+     * @return The MaxLifeSeconds value
+     */
+    long getMaxLife();
+
+    /**
+     * Sets the idleTime attribute of the IAttributes object. This is the maximum time the item can
+     * be idle in the cache, that is not accessed.
+     * <p>
+     * If this is exceeded the element will not be returned, instead it will be removed. It will be
+     * removed on retrieval, or removed actively if the memory shrinker is turned on.
+     * @param idle The new idleTime value
+     */
+    void setIdleTime( long idle );
+
+    /**
+     * Size in bytes. This is not used except in the admin pages. It will be -1 by default.
+     * <p>
+     * @param size The new size value
+     */
+    void setSize( int size );
+
+    /**
+     * Gets the size attribute of the IAttributes object
+     * <p>
+     * @return The size value
+     */
+    int getSize();
+
+    /**
+     * Gets the createTime attribute of the IAttributes object.
+     * <p>
+     * This should be the current time in milliseconds returned by the sysutem call when the element
+     * is put in the cache.
+     * <p>
+     * Putting an item in the cache overrides any existing items.
+     * @return The createTime value
+     */
+    long getCreateTime();
+
+    /**
+     * Gets the LastAccess attribute of the IAttributes object.
+     * <p>
+     * @return The LastAccess value.
+     */
+    long getLastAccessTime();
+
+    /**
+     * Sets the LastAccessTime as now of the IElementAttributes object
+     */
+    void setLastAccessTimeNow();
+
+    /**
+     * Gets the idleTime attribute of the IAttributes object
+     * @return The idleTime value
+     */
+    long getIdleTime();
+
+    /**
+     * Gets the time left to live of the IAttributes object.
+     * <p>
+     * This is the (max life + create time) - current time.
+     * @return The TimeToLiveSeconds value
+     */
+    long getTimeToLiveSeconds();
+
+    /**
+     * Returns a copy of the object.
+     * @return IElementAttributes
+     */
+    IElementAttributes copy();
+
+    /**
+     * Can this item be spooled to disk
+     * <p>
+     * By default this is true.
+     * @return The spoolable value
+     */
+    boolean getIsSpool();
+
+    /**
+     * Sets the isSpool attribute of the IElementAttributes object
+     * <p>
+     * By default this is true.
+     * @param val The new isSpool value
+     */
+    void setIsSpool( boolean val );
+
+    /**
+     * Is this item laterally distributable. Can it be sent to auxiliaries of type lateral.
+     * <p>
+     * By default this is true.
+     * @return The isLateral value
+     */
+    boolean getIsLateral();
+
+    /**
+     * Sets the isLateral attribute of the IElementAttributes object
+     * <p>
+     * By default this is true.
+     * @param val The new isLateral value
+     */
+    void setIsLateral( boolean val );
+
+    /**
+     * Can this item be sent to the remote cache.
+     * <p>
+     * By default this is true.
+     * @return The isRemote value
+     */
+    boolean getIsRemote();
+
+    /**
+     * Sets the isRemote attribute of the IElementAttributes object.
+     * <p>
+     * By default this is true.
+     * @param val The new isRemote value
+     */
+    void setIsRemote( boolean val );
+
+    /**
+     * This turns off expiration if it is true.
+     * @return The IsEternal value
+     */
+    boolean getIsEternal();
+
+    /**
+     * Sets the isEternal attribute of the IElementAttributes object
+     * @param val The new isEternal value
+     */
+    void setIsEternal( boolean val );
+
+    /**
+     * Adds a ElementEventHandler. Handler's can be registered for multiple events. A registered
+     * handler will be called at every recognized event.
+     * @param eventHandler The feature to be added to the ElementEventHandler
+     */
+    void addElementEventHandler( IElementEventHandler eventHandler );
+
+    /**
+     * Gets the elementEventHandlers.
+     * <p>
+     * Event handlers are transient. The only events defined are in memory events. All handlers are
+     * lost if the item goes to disk.
+     * @return The elementEventHandlers value, null if there are none
+     */
+    ArrayList<IElementEventHandler> getElementEventHandlers();
+
+    /**
+     * Sets the eventHandlers of the IElementAttributes object
+     * @param eventHandlers value
+     */
+    void addElementEventHandlers( List<IElementEventHandler> eventHandlers );
+
+    long getTimeFactorForMilliseconds();
+
+    void setTimeFactorForMilliseconds(long factor);
+}
diff --git a/src/org/apache/commons/jcs/engine/behavior/IElementSerializer.java b/src/org/apache/commons/jcs/engine/behavior/IElementSerializer.java
new file mode 100644
index 0000000..547cc1e
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/behavior/IElementSerializer.java
@@ -0,0 +1,50 @@
+package org.apache.commons.jcs.engine.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+
+/**
+ * Defines the behavior for cache element serializers. This layer of abstraction allows us to plug
+ * in different serialization mechanisms, such as a compressing standard serializer.
+ * <p>
+ * @author Aaron Smuts
+ */
+public interface IElementSerializer
+{
+    /**
+     * Turns an object into a byte array.
+     * @param obj
+     * @return byte[]
+     * @throws IOException
+     */
+    <T> byte[] serialize( T obj )
+        throws IOException;
+
+    /**
+     * Turns a byte array into an object.
+     * @param bytes
+     * @return Object
+     * @throws IOException
+     * @throws ClassNotFoundException thrown if we don't know the object.
+     */
+    <T> T deSerialize( byte[] bytes, ClassLoader loader )
+        throws IOException, ClassNotFoundException;
+}
diff --git a/src/org/apache/commons/jcs/engine/behavior/IProvideScheduler.java b/src/org/apache/commons/jcs/engine/behavior/IProvideScheduler.java
new file mode 100644
index 0000000..29ad9d2
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/behavior/IProvideScheduler.java
@@ -0,0 +1,38 @@
+package org.apache.commons.jcs.engine.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.concurrent.ScheduledExecutorService;
+
+
+/**
+ * Marker interface for providers of the central ScheduledExecutorService
+ * <p>
+ * @author Thomas Vandahl
+ *
+ */
+public interface IProvideScheduler
+{
+    /**
+     * Get an instance of a central ScheduledExecutorService
+     * @return the central scheduler
+     */
+    ScheduledExecutorService getScheduledExecutorService();
+}
diff --git a/src/org/apache/commons/jcs/engine/behavior/IRequireScheduler.java b/src/org/apache/commons/jcs/engine/behavior/IRequireScheduler.java
new file mode 100644
index 0000000..09ea8a7
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/behavior/IRequireScheduler.java
@@ -0,0 +1,39 @@
+package org.apache.commons.jcs.engine.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.concurrent.ScheduledExecutorService;
+
+
+/**
+ * Marker interface to allow the injection of a central ScheduledExecutorService
+ * for all modules requiring scheduled background operations.
+ * <p>
+ * @author Thomas Vandahl
+ *
+ */
+public interface IRequireScheduler
+{
+    /**
+     * Inject an instance of a central ScheduledExecutorService
+     * @param scheduledExecutor
+     */
+    void setScheduledExecutorService( ScheduledExecutorService scheduledExecutor );
+}
diff --git a/src/org/apache/commons/jcs/engine/behavior/IShutdownObservable.java b/src/org/apache/commons/jcs/engine/behavior/IShutdownObservable.java
new file mode 100644
index 0000000..c428037
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/behavior/IShutdownObservable.java
@@ -0,0 +1,55 @@
+package org.apache.commons.jcs.engine.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * ShutdownObservers can observe ShutdownObservable objects.
+ * The CacheManager is the primary observable that this is intended for.
+ * <p>
+ * Most shutdown operations will occur outside this framework for now.  The initial
+ * goal is to allow background threads that are not reachable through any reference
+ * that the cache manager maintains to be killed on shutdown.
+ * <p>
+ * Perhaps the composite cache itself should be the observable object.
+ * It doesn't make much of a difference.  There are some problems with
+ * region by region shutdown.  Some auxiliaries are local.  They will
+ * need to track when every region has shutdown before doing things like
+ * closing the socket with a lateral.
+ * <p>
+ * @author Aaron Smuts
+ *
+ */
+public interface IShutdownObservable
+{
+
+    /**
+     * Registers an observer with the observable object.
+     * @param observer
+     */
+    void registerShutdownObserver( IShutdownObserver observer );
+
+    /**
+     * Deregisters the observer with the observable.
+     *
+     * @param observer
+     */
+    void deregisterShutdownObserver( IShutdownObserver observer );
+
+}
diff --git a/src/org/apache/commons/jcs/engine/behavior/IShutdownObserver.java b/src/org/apache/commons/jcs/engine/behavior/IShutdownObserver.java
new file mode 100644
index 0000000..22b4052
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/behavior/IShutdownObserver.java
@@ -0,0 +1,41 @@
+package org.apache.commons.jcs.engine.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * This interface is required of all shutdown observers.  These observers
+ * can observer ShutdownObservable objects.  The CacheManager is the primary
+ * observable that this is intended for.
+ * <p>
+ * Most shutdown operations will occur outside this framework for now.  The initial
+ * goal is to allow background threads that are not reachable through any reference
+ * that the cache manager maintains to be killed on shutdown.
+ *
+ * @author Aaron Smuts
+ *
+ */
+public interface IShutdownObserver
+{
+    /**
+     * Tells the observer that the observable has received a shutdown command.
+     *
+     */
+    void shutdown();
+}
diff --git a/src/org/apache/commons/jcs/engine/behavior/IZombie.java b/src/org/apache/commons/jcs/engine/behavior/IZombie.java
new file mode 100644
index 0000000..2c726c6
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/behavior/IZombie.java
@@ -0,0 +1,30 @@
+package org.apache.commons.jcs.engine.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Interface to mark an object as zombie for error recovery purposes.
+ *
+ */
+public interface IZombie
+{
+    // Zombies have no inner life.
+    // No qaulia found.
+}
diff --git a/src/org/apache/commons/jcs/engine/behavior/package.html b/src/org/apache/commons/jcs/engine/behavior/package.html
new file mode 100644
index 0000000..9cb3956
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/behavior/package.html
@@ -0,0 +1,25 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<html>
+  <head>
+  </head>
+  <body>
+     Interfaces used by the core and the auxiliary caches.
+  </body>
+</html>
diff --git a/src/org/apache/commons/jcs/engine/control/CompositeCache.java b/src/org/apache/commons/jcs/engine/control/CompositeCache.java
new file mode 100644
index 0000000..7df0fab
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/control/CompositeCache.java
@@ -0,0 +1,1848 @@
+package org.apache.commons.jcs.engine.control;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.commons.jcs.access.exception.CacheException;
+import org.apache.commons.jcs.access.exception.ObjectNotFoundException;
+import org.apache.commons.jcs.auxiliary.AuxiliaryCache;
+import org.apache.commons.jcs.engine.CacheConstants;
+import org.apache.commons.jcs.engine.CacheStatus;
+import org.apache.commons.jcs.engine.behavior.ICache;
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.behavior.ICompositeCacheAttributes;
+import org.apache.commons.jcs.engine.behavior.ICompositeCacheAttributes.DiskUsagePattern;
+import org.apache.commons.jcs.engine.behavior.IElementAttributes;
+import org.apache.commons.jcs.engine.behavior.IRequireScheduler;
+import org.apache.commons.jcs.engine.control.event.ElementEvent;
+import org.apache.commons.jcs.engine.control.event.behavior.ElementEventType;
+import org.apache.commons.jcs.engine.control.event.behavior.IElementEvent;
+import org.apache.commons.jcs.engine.control.event.behavior.IElementEventHandler;
+import org.apache.commons.jcs.engine.control.event.behavior.IElementEventQueue;
+import org.apache.commons.jcs.engine.control.group.GroupId;
+import org.apache.commons.jcs.engine.match.KeyMatcherPatternImpl;
+import org.apache.commons.jcs.engine.match.behavior.IKeyMatcher;
+import org.apache.commons.jcs.engine.memory.behavior.IMemoryCache;
+import org.apache.commons.jcs.engine.memory.lru.LRUMemoryCache;
+import org.apache.commons.jcs.engine.memory.shrinking.ShrinkerThread;
+import org.apache.commons.jcs.engine.stats.CacheStats;
+import org.apache.commons.jcs.engine.stats.StatElement;
+import org.apache.commons.jcs.engine.stats.behavior.ICacheStats;
+import org.apache.commons.jcs.engine.stats.behavior.IStatElement;
+import org.apache.commons.jcs.engine.stats.behavior.IStats;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * This is the primary hub for a single cache/region. It controls the flow of items through the
+ * cache. The auxiliary and memory caches are plugged in here.
+ * <p>
+ * This is the core of a JCS region. Hence, this simple class is the core of JCS.
+ */
+public class CompositeCache<K, V>
+    implements ICache<K, V>, IRequireScheduler
+{
+    /** log instance */
+    private static final Log log = LogFactory.getLog( CompositeCache.class );
+
+    /**
+     * EventQueue for handling element events. Lazy initialized. One for each region. To be more efficient, the manager
+     * should pass a shared queue in.
+     */
+    private IElementEventQueue elementEventQ;
+
+    /** Auxiliary caches. */
+    @SuppressWarnings("unchecked") // OK because this is an empty array
+    private AuxiliaryCache<K, V>[] auxCaches = new AuxiliaryCache[0];
+
+    /** is this alive? */
+    private boolean alive = true;
+
+    /** Region Elemental Attributes, default. */
+    private IElementAttributes attr;
+
+    /** Cache Attributes, for hub and memory auxiliary. */
+    private ICompositeCacheAttributes cacheAttr;
+
+    /** How many times update was called. */
+    private int updateCount;
+
+    /** How many times remove was called. */
+    private int removeCount;
+
+    /** Memory cache hit count */
+    private int hitCountRam;
+
+    /** Auxiliary cache hit count (number of times found in ANY auxiliary) */
+    private int hitCountAux;
+
+    /** Count of misses where element was not found. */
+    private int missCountNotFound = 0;
+
+    /** Count of misses where element was expired. */
+    private int missCountExpired = 0;
+
+    /**
+     * The cache hub can only have one memory cache. This could be made more flexible in the future,
+     * but they are tied closely together. More than one doesn't make much sense.
+     */
+    private IMemoryCache<K, V> memCache;
+
+    /** Key matcher used by the getMatching API */
+    private IKeyMatcher<K> keyMatcher = new KeyMatcherPatternImpl<K>();
+
+    /**
+     * Constructor for the Cache object
+     * <p>
+     * @param cattr The cache attribute
+     * @param attr The default element attributes
+     */
+    public CompositeCache( ICompositeCacheAttributes cattr, IElementAttributes attr )
+    {
+        this.attr = attr;
+        this.cacheAttr = cattr;
+
+        createMemoryCache( cattr );
+
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "Constructed cache with name [" + cacheAttr.getCacheName() + "] and cache attributes " + cattr );
+        }
+    }
+
+    /**
+     * Injector for Element event queue
+     *
+     * @param queue
+     */
+    public void setElementEventQueue( IElementEventQueue queue )
+    {
+        this.elementEventQ = queue;
+    }
+
+    /**
+     * @see org.apache.commons.jcs.engine.behavior.IRequireScheduler#setScheduledExecutorService(java.util.concurrent.ScheduledExecutorService)
+     */
+    @Override
+    public void setScheduledExecutorService(ScheduledExecutorService scheduledExecutor)
+    {
+        if ( cacheAttr.isUseMemoryShrinker() )
+        {
+            scheduledExecutor.scheduleAtFixedRate(
+                    new ShrinkerThread<K, V>(this), 0, cacheAttr.getShrinkerIntervalSeconds(),
+                    TimeUnit.SECONDS);
+        }
+    }
+
+    /**
+     * This sets the list of auxiliary caches for this region.
+     * <p>
+     * @param auxCaches
+     */
+    public void setAuxCaches( AuxiliaryCache<K, V>[] auxCaches )
+    {
+        this.auxCaches = auxCaches;
+    }
+
+    /**
+     * Get the list of auxiliary caches for this region.
+     * <p>
+     * @return an array of auxiliary caches, may be empty, never null
+     */
+    public AuxiliaryCache<K, V>[] getAuxCaches()
+    {
+        return this.auxCaches;
+    }
+
+    /**
+     * Standard update method.
+     * <p>
+     * @param ce
+     * @throws IOException
+     */
+    @Override
+    public void update( ICacheElement<K, V> ce )
+        throws IOException
+    {
+        update( ce, false );
+    }
+
+    /**
+     * Standard update method.
+     * <p>
+     * @param ce
+     * @throws IOException
+     */
+    public void localUpdate( ICacheElement<K, V> ce )
+        throws IOException
+    {
+        update( ce, true );
+    }
+
+    /**
+     * Put an item into the cache. If it is localOnly, then do no notify remote or lateral
+     * auxiliaries.
+     * <p>
+     * @param cacheElement the ICacheElement<K, V>
+     * @param localOnly Whether the operation should be restricted to local auxiliaries.
+     * @throws IOException
+     */
+    protected void update( ICacheElement<K, V> cacheElement, boolean localOnly )
+        throws IOException
+    {
+
+        if ( cacheElement.getKey() instanceof String
+            && cacheElement.getKey().toString().endsWith( CacheConstants.NAME_COMPONENT_DELIMITER ) )
+        {
+            throw new IllegalArgumentException( "key must not end with " + CacheConstants.NAME_COMPONENT_DELIMITER
+                + " for a put operation" );
+        }
+        else if ( cacheElement.getKey() instanceof GroupId )
+        {
+            throw new IllegalArgumentException( "key cannot be a GroupId " + " for a put operation" );
+        }
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Updating memory cache " + cacheElement.getKey() );
+        }
+
+        synchronized ( this )
+        {
+            updateCount++;
+
+            memCache.update( cacheElement );
+
+            updateAuxiliaries( cacheElement, localOnly );
+
+            cacheElement.getElementAttributes().setLastAccessTimeNow();
+        }
+    }
+
+    /**
+     * This method is responsible for updating the auxiliaries if they are present. If it is local
+     * only, any lateral and remote auxiliaries will not be updated.
+     * <p>
+     * Before updating an auxiliary it checks to see if the element attributes permit the operation.
+     * <p>
+     * Disk auxiliaries are only updated if the disk cache is not merely used as a swap. If the disk
+     * cache is merely a swap, then items will only go to disk when they overflow from memory.
+     * <p>
+     * This is called by update( cacheElement, localOnly ) after it updates the memory cache.
+     * <p>
+     * This is protected to make it testable.
+     * <p>
+     * @param cacheElement
+     * @param localOnly
+     * @throws IOException
+     */
+    protected void updateAuxiliaries( ICacheElement<K, V> cacheElement, boolean localOnly )
+        throws IOException
+    {
+        // UPDATE AUXILLIARY CACHES
+        // There are 3 types of auxiliary caches: remote, lateral, and disk
+        // more can be added if future auxiliary caches don't fit the model
+        // You could run a database cache as either a remote or a local disk.
+        // The types would describe the purpose.
+
+        if ( log.isDebugEnabled() )
+        {
+            if ( auxCaches.length > 0 )
+            {
+                log.debug( "Updating auxiliary caches" );
+            }
+            else
+            {
+                log.debug( "No auxiliary cache to update" );
+            }
+        }
+
+        for ( int i = 0; i < auxCaches.length; i++ )
+        {
+            ICache<K, V> aux = auxCaches[i];
+
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Auxilliary cache type: " + aux.getCacheType() );
+            }
+
+            if ( aux == null )
+            {
+                continue;
+            }
+
+            // SEND TO REMOTE STORE
+            if ( aux.getCacheType() == CacheType.REMOTE_CACHE )
+            {
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "ce.getElementAttributes().getIsRemote() = "
+                        + cacheElement.getElementAttributes().getIsRemote() );
+                }
+
+                if ( cacheElement.getElementAttributes().getIsRemote() && !localOnly )
+                {
+                    try
+                    {
+                        // need to make sure the group cache understands that
+                        // the key is a group attribute on update
+                        aux.update( cacheElement );
+                        if ( log.isDebugEnabled() )
+                        {
+                            log.debug( "Updated remote store for " + cacheElement.getKey() + cacheElement );
+                        }
+                    }
+                    catch ( IOException ex )
+                    {
+                        log.error( "Failure in updateExclude", ex );
+                    }
+                }
+                // SEND LATERALLY
+            }
+            else if ( aux.getCacheType() == CacheType.LATERAL_CACHE )
+            {
+                // lateral can't do the checking since it is dependent on the
+                // cache region restrictions
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "lateralcache in aux list: cattr " + cacheAttr.isUseLateral() );
+                }
+                if ( cacheAttr.isUseLateral() && cacheElement.getElementAttributes().getIsLateral() && !localOnly )
+                {
+                    // DISTRIBUTE LATERALLY
+                    // Currently always multicast even if the value is
+                    // unchanged, to cause the cache item to move to the front.
+                    aux.update( cacheElement );
+                    if ( log.isDebugEnabled() )
+                    {
+                        log.debug( "updated lateral cache for " + cacheElement.getKey() );
+                    }
+                }
+            }
+            // update disk if the usage pattern permits
+            else if ( aux.getCacheType() == CacheType.DISK_CACHE )
+            {
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "diskcache in aux list: cattr " + cacheAttr.isUseDisk() );
+                }
+                if ( cacheAttr.isUseDisk()
+                    && cacheAttr.getDiskUsagePattern() == DiskUsagePattern.UPDATE
+                    && cacheElement.getElementAttributes().getIsSpool() )
+                {
+                    aux.update( cacheElement );
+                    if ( log.isDebugEnabled() )
+                    {
+                        log.debug( "updated disk cache for " + cacheElement.getKey() );
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * Writes the specified element to any disk auxiliaries. Might want to rename this "overflow" in
+     * case the hub wants to do something else.
+     * <p>
+     * If JCS is not configured to use the disk as a swap, that is if the the
+     * CompositeCacheAttribute diskUsagePattern is not SWAP_ONLY, then the item will not be spooled.
+     * <p>
+     * @param ce The CacheElement
+     */
+    public void spoolToDisk( ICacheElement<K, V> ce )
+    {
+        // if the item is not spoolable, return
+        if ( !ce.getElementAttributes().getIsSpool() )
+        {
+            // there is an event defined for this.
+            handleElementEvent( ce, ElementEventType.SPOOLED_NOT_ALLOWED );
+            return;
+        }
+
+        boolean diskAvailable = false;
+
+        // SPOOL TO DISK.
+        for ( int i = 0; i < auxCaches.length; i++ )
+        {
+            ICache<K, V> aux = auxCaches[i];
+
+            if ( aux != null && aux.getCacheType() == CacheType.DISK_CACHE )
+            {
+                diskAvailable = true;
+
+                if ( cacheAttr.getDiskUsagePattern() == DiskUsagePattern.SWAP )
+                {
+                    // write the last items to disk.2
+                    try
+                    {
+                        handleElementEvent( ce, ElementEventType.SPOOLED_DISK_AVAILABLE );
+                        aux.update( ce );
+                    }
+                    catch ( IOException ex )
+                    {
+                        // impossible case.
+                        log.error( "Problem spooling item to disk cache.", ex );
+                        throw new IllegalStateException( ex.getMessage() );
+                    }
+                    catch ( Exception oee )
+                    {
+                        // swallow
+                    }
+                    if ( log.isDebugEnabled() )
+                    {
+                        log.debug( "spoolToDisk done for: " + ce.getKey() + " on disk cache[" + i + "]" );
+                    }
+                }
+                else
+                {
+                    if ( log.isDebugEnabled() )
+                    {
+                        log.debug( "DiskCache avaialbe, but JCS is not configured to use the DiskCache as a swap." );
+                    }
+                }
+            }
+        }
+
+        if ( !diskAvailable )
+        {
+            try
+            {
+                handleElementEvent( ce, ElementEventType.SPOOLED_DISK_NOT_AVAILABLE );
+            }
+            catch ( Exception e )
+            {
+                log.error( "Trouble handling the ELEMENT_EVENT_SPOOLED_DISK_NOT_AVAILABLE  element event", e );
+            }
+        }
+    }
+
+    /**
+     * Gets an item from the cache.
+     * <p>
+     * @param key
+     * @return element from the cache, or null if not present
+     * @see org.apache.commons.jcs.engine.behavior.ICache#get(Object)
+     */
+    @Override
+    public ICacheElement<K, V> get( K key )
+    {
+        return get( key, false );
+    }
+
+    /**
+     * Do not try to go remote or laterally for this get.
+     * <p>
+     * @param key
+     * @return ICacheElement
+     */
+    public ICacheElement<K, V> localGet( K key )
+    {
+        return get( key, true );
+    }
+
+    /**
+     * Look in memory, then disk, remote, or laterally for this item. The order is dependent on the
+     * order in the cache.ccf file.
+     * <p>
+     * Do not try to go remote or laterally for this get if it is localOnly. Otherwise try to go
+     * remote or lateral if such an auxiliary is configured for this region.
+     * <p>
+     * @param key
+     * @param localOnly
+     * @return ICacheElement
+     */
+    protected ICacheElement<K, V> get( K key, boolean localOnly )
+    {
+        ICacheElement<K, V> element = null;
+
+        boolean found = false;
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "get: key = " + key + ", localOnly = " + localOnly );
+        }
+
+        synchronized (this)
+        {
+            try
+            {
+                // First look in memory cache
+                element = memCache.get( key );
+
+                if ( element != null )
+                {
+                    // Found in memory cache
+                    if ( isExpired( element ) )
+                    {
+                        if ( log.isDebugEnabled() )
+                        {
+                            log.debug( cacheAttr.getCacheName() + " - Memory cache hit, but element expired" );
+                        }
+
+                        missCountExpired++;
+
+                        remove( key );
+
+                        element = null;
+                    }
+                    else
+                    {
+                        if ( log.isDebugEnabled() )
+                        {
+                            log.debug( cacheAttr.getCacheName() + " - Memory cache hit" );
+                        }
+
+                        // Update counters
+                        hitCountRam++;
+                    }
+
+                    found = true;
+                }
+                else
+                {
+                    // Item not found in memory. If local invocation look in aux
+                    // caches, even if not local look in disk auxiliaries
+
+                    for ( int i = 0; i < auxCaches.length; i++ )
+                    {
+                        AuxiliaryCache<K, V> aux = auxCaches[i];
+
+                        if ( aux != null )
+                        {
+                            CacheType cacheType = aux.getCacheType();
+
+                            if ( !localOnly || cacheType == CacheType.DISK_CACHE )
+                            {
+                                if ( log.isDebugEnabled() )
+                                {
+                                    log.debug( "Attempting to get from aux [" + aux.getCacheName() + "] which is of type: "
+                                        + cacheType );
+                                }
+
+                                try
+                                {
+                                    element = aux.get( key );
+                                }
+                                catch ( IOException e )
+                                {
+                                    log.error( "Error getting from aux", e );
+                                }
+                            }
+
+                            if ( log.isDebugEnabled() )
+                            {
+                                log.debug( "Got CacheElement: " + element );
+                            }
+
+                            // Item found in one of the auxiliary caches.
+                            if ( element != null )
+                            {
+                                if ( isExpired( element ) )
+                                {
+                                    if ( log.isDebugEnabled() )
+                                    {
+                                        log.debug( cacheAttr.getCacheName() + " - Aux cache[" + i + "] hit, but element expired." );
+                                    }
+
+                                    missCountExpired++;
+
+                                    // This will tell the remotes to remove the item
+                                    // based on the element's expiration policy. The elements attributes
+                                    // associated with the item when it created govern its behavior
+                                    // everywhere.
+                                    remove( key );
+
+                                    element = null;
+                                }
+                                else
+                                {
+                                    if ( log.isDebugEnabled() )
+                                    {
+                                        log.debug( cacheAttr.getCacheName() + " - Aux cache[" + i + "] hit" );
+                                    }
+
+                                    // Update counters
+                                    hitCountAux++;
+                                    copyAuxiliaryRetrievedItemToMemory( element );
+                                }
+
+                                found = true;
+
+                                break;
+                            }
+                        }
+                    }
+                }
+            }
+            catch ( Exception e )
+            {
+                log.error( "Problem encountered getting element.", e );
+            }
+        }
+
+        if ( !found )
+        {
+            missCountNotFound++;
+
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( cacheAttr.getCacheName() + " - Miss" );
+            }
+        }
+
+        if (element != null)
+        {
+            element.getElementAttributes().setLastAccessTimeNow();
+        }
+
+        return element;
+    }
+
+    /**
+     * Gets multiple items from the cache based on the given set of keys.
+     * <p>
+     * @param keys
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data in cache for any of these keys
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> getMultiple( Set<K> keys )
+    {
+        return getMultiple( keys, false );
+    }
+
+    /**
+     * Gets multiple items from the cache based on the given set of keys. Do not try to go remote or
+     * laterally for this data.
+     * <p>
+     * @param keys
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data in cache for any of these keys
+     */
+    public Map<K, ICacheElement<K, V>> localGetMultiple( Set<K> keys )
+    {
+        return getMultiple( keys, true );
+    }
+
+    /**
+     * Look in memory, then disk, remote, or laterally for these items. The order is dependent on
+     * the order in the cache.ccf file. Keep looking in each cache location until either the element
+     * is found, or the method runs out of places to look.
+     * <p>
+     * Do not try to go remote or laterally for this get if it is localOnly. Otherwise try to go
+     * remote or lateral if such an auxiliary is configured for this region.
+     * <p>
+     * @param keys
+     * @param localOnly
+     * @return ICacheElement
+     */
+    protected Map<K, ICacheElement<K, V>> getMultiple( Set<K> keys, boolean localOnly )
+    {
+        Map<K, ICacheElement<K, V>> elements = new HashMap<K, ICacheElement<K, V>>();
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "get: key = " + keys + ", localOnly = " + localOnly );
+        }
+
+        try
+        {
+            // First look in memory cache
+            elements.putAll( getMultipleFromMemory( keys ) );
+
+            // If fewer than all items were found in memory, then keep looking.
+            if ( elements.size() != keys.size() )
+            {
+                Set<K> remainingKeys = pruneKeysFound( keys, elements );
+                elements.putAll( getMultipleFromAuxiliaryCaches( remainingKeys, localOnly ) );
+            }
+        }
+        catch ( Exception e )
+        {
+            log.error( "Problem encountered getting elements.", e );
+        }
+
+        // if we didn't find all the elements, increment the miss count by the number of elements not found
+        if ( elements.size() != keys.size() )
+        {
+            missCountNotFound += keys.size() - elements.size();
+
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( cacheAttr.getCacheName() + " - " + ( keys.size() - elements.size() ) + " Misses" );
+            }
+        }
+
+        return elements;
+    }
+
+    /**
+     * Gets items for the keys in the set. Returns a map: key -> result.
+     * <p>
+     * @param keys
+     * @return the elements found in the memory cache
+     * @throws IOException
+     */
+    private Map<K, ICacheElement<K, V>> getMultipleFromMemory( Set<K> keys )
+        throws IOException
+    {
+        Map<K, ICacheElement<K, V>> elementsFromMemory = memCache.getMultiple( keys );
+
+        Iterator<ICacheElement<K, V>> elementFromMemoryIterator = new HashMap<K, ICacheElement<K, V>>( elementsFromMemory ).values().iterator();
+
+        while ( elementFromMemoryIterator.hasNext() )
+        {
+            ICacheElement<K, V> element = elementFromMemoryIterator.next();
+
+            if ( element != null )
+            {
+                // Found in memory cache
+                if ( isExpired( element ) )
+                {
+                    if ( log.isDebugEnabled() )
+                    {
+                        log.debug( cacheAttr.getCacheName() + " - Memory cache hit, but element expired" );
+                    }
+
+                    missCountExpired++;
+
+                    remove( element.getKey() );
+                    elementsFromMemory.remove( element.getKey() );
+                }
+                else
+                {
+                    if ( log.isDebugEnabled() )
+                    {
+                        log.debug( cacheAttr.getCacheName() + " - Memory cache hit" );
+                    }
+
+                    // Update counters
+                    hitCountRam++;
+                }
+            }
+        }
+        return elementsFromMemory;
+    }
+
+    /**
+     * If local invocation look in aux caches, even if not local look in disk auxiliaries.
+     * <p>
+     * @param keys
+     * @param localOnly
+     * @return the elements found in the auxiliary caches
+     * @throws IOException
+     */
+    private Map<K, ICacheElement<K, V>> getMultipleFromAuxiliaryCaches( Set<K> keys, boolean localOnly )
+        throws IOException
+    {
+        Map<K, ICacheElement<K, V>> elements = new HashMap<K, ICacheElement<K, V>>();
+        Set<K> remainingKeys = new HashSet<K>( keys );
+
+        for ( int i = 0; i < auxCaches.length; i++ )
+        {
+            AuxiliaryCache<K, V> aux = auxCaches[i];
+
+            if ( aux != null )
+            {
+                Map<K, ICacheElement<K, V>> elementsFromAuxiliary =
+                    new HashMap<K, ICacheElement<K, V>>();
+
+                CacheType cacheType = aux.getCacheType();
+
+                if ( !localOnly || cacheType == CacheType.DISK_CACHE )
+                {
+                    if ( log.isDebugEnabled() )
+                    {
+                        log.debug( "Attempting to get from aux [" + aux.getCacheName() + "] which is of type: "
+                            + cacheType );
+                    }
+
+                    try
+                    {
+                        elementsFromAuxiliary.putAll( aux.getMultiple( remainingKeys ) );
+                    }
+                    catch ( IOException e )
+                    {
+                        log.error( "Error getting from aux", e );
+                    }
+                }
+
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "Got CacheElements: " + elementsFromAuxiliary );
+                }
+
+                processRetrievedElements( i, elementsFromAuxiliary );
+
+                elements.putAll( elementsFromAuxiliary );
+
+                if ( elements.size() == keys.size() )
+                {
+                    break;
+                }
+                else
+                {
+                    remainingKeys = pruneKeysFound( keys, elements );
+                }
+            }
+        }
+
+        return elements;
+    }
+
+    /**
+     * Build a map of all the matching elements in all of the auxiliaries and memory.
+     * <p>
+     * @param pattern
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data in cache for any matching keys
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> getMatching( String pattern )
+    {
+        return getMatching( pattern, false );
+    }
+
+    /**
+     * Build a map of all the matching elements in all of the auxiliaries and memory. Do not try to
+     * go remote or laterally for this data.
+     * <p>
+     * @param pattern
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data in cache for any matching keys
+     */
+    public Map<K, ICacheElement<K, V>> localGetMatching( String pattern )
+    {
+        return getMatching( pattern, true );
+    }
+
+    /**
+     * Build a map of all the matching elements in all of the auxiliaries and memory. Items in
+     * memory will replace from the auxiliaries in the returned map. The auxiliaries are accessed in
+     * opposite order. It's assumed that those closer to home are better.
+     * <p>
+     * Do not try to go remote or laterally for this get if it is localOnly. Otherwise try to go
+     * remote or lateral if such an auxiliary is configured for this region.
+     * <p>
+     * @param pattern
+     * @param localOnly
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data in cache for any matching keys
+     */
+    protected Map<K, ICacheElement<K, V>> getMatching( String pattern, boolean localOnly )
+    {
+        Map<K, ICacheElement<K, V>> elements = new HashMap<K, ICacheElement<K, V>>();
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "get: pattern [" + pattern + "], localOnly = " + localOnly );
+        }
+
+        try
+        {
+            // First look in auxiliaries
+            elements.putAll( getMatchingFromAuxiliaryCaches( pattern, localOnly ) );
+
+            // then look in memory, override aux with newer memory items.
+            elements.putAll( getMatchingFromMemory( pattern ) );
+        }
+        catch ( Exception e )
+        {
+            log.error( "Problem encountered getting elements.", e );
+        }
+
+        return elements;
+    }
+
+    /**
+     * Gets the key array from the memcache. Builds a set of matches. Calls getMultiple with the
+     * set. Returns a map: key -> result.
+     * <p>
+     * @param pattern
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data in cache for any matching keys
+     * @throws IOException
+     */
+    protected Map<K, ICacheElement<K, V>> getMatchingFromMemory( String pattern )
+        throws IOException
+    {
+        // find matches in key array
+        // this avoids locking the memory cache, but it uses more memory
+        Set<K> keyArray = memCache.getKeySet();
+
+        Set<K> matchingKeys = getKeyMatcher().getMatchingKeysFromArray( pattern, keyArray );
+
+        // call get multiple
+        return getMultipleFromMemory( matchingKeys );
+    }
+
+    /**
+     * If local invocation look in aux caches, even if not local look in disk auxiliaries.
+     * <p>
+     * Moves in reverse order of definition. This will allow you to override those that are from the
+     * remote with those on disk.
+     * <p>
+     * @param pattern
+     * @param localOnly
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data in cache for any matching keys
+     * @throws IOException
+     */
+    private Map<K, ICacheElement<K, V>> getMatchingFromAuxiliaryCaches( String pattern, boolean localOnly )
+        throws IOException
+    {
+        Map<K, ICacheElement<K, V>> elements = new HashMap<K, ICacheElement<K, V>>();
+
+        for ( int i = auxCaches.length - 1; i >= 0; i-- )
+        {
+            AuxiliaryCache<K, V> aux = auxCaches[i];
+
+            if ( aux != null )
+            {
+                Map<K, ICacheElement<K, V>> elementsFromAuxiliary =
+                    new HashMap<K, ICacheElement<K, V>>();
+
+                CacheType cacheType = aux.getCacheType();
+
+                if ( !localOnly || cacheType == CacheType.DISK_CACHE )
+                {
+                    if ( log.isDebugEnabled() )
+                    {
+                        log.debug( "Attempting to get from aux [" + aux.getCacheName() + "] which is of type: "
+                            + cacheType );
+                    }
+
+                    try
+                    {
+                        elementsFromAuxiliary.putAll( aux.getMatching( pattern ) );
+                    }
+                    catch ( IOException e )
+                    {
+                        log.error( "Error getting from aux", e );
+                    }
+
+                    if ( log.isDebugEnabled() )
+                    {
+                        log.debug( "Got CacheElements: " + elementsFromAuxiliary );
+                    }
+
+                    processRetrievedElements( i, elementsFromAuxiliary );
+
+                    elements.putAll( elementsFromAuxiliary );
+                }
+            }
+        }
+
+        return elements;
+    }
+
+    /**
+     * Remove expired elements retrieved from an auxiliary. Update memory with good items.
+     * <p>
+     * @param i - the aux index
+     * @param elementsFromAuxiliary
+     * @throws IOException
+     */
+    private void processRetrievedElements( int i, Map<K, ICacheElement<K, V>> elementsFromAuxiliary )
+        throws IOException
+    {
+        Iterator<ICacheElement<K, V>> elementFromAuxiliaryIterator = new HashMap<K, ICacheElement<K, V>>( elementsFromAuxiliary ).values().iterator();
+
+        while ( elementFromAuxiliaryIterator.hasNext() )
+        {
+            ICacheElement<K, V> element = elementFromAuxiliaryIterator.next();
+
+            // Item found in one of the auxiliary caches.
+            if ( element != null )
+            {
+                if ( isExpired( element ) )
+                {
+                    if ( log.isDebugEnabled() )
+                    {
+                        log.debug( cacheAttr.getCacheName() + " - Aux cache[" + i + "] hit, but element expired." );
+                    }
+
+                    missCountExpired++;
+
+                    // This will tell the remote caches to remove the item
+                    // based on the element's expiration policy. The elements attributes
+                    // associated with the item when it created govern its behavior
+                    // everywhere.
+                    remove( element.getKey() );
+                    elementsFromAuxiliary.remove( element.getKey() );
+                }
+                else
+                {
+                    if ( log.isDebugEnabled() )
+                    {
+                        log.debug( cacheAttr.getCacheName() + " - Aux cache[" + i + "] hit" );
+                    }
+
+                    // Update counters
+                    hitCountAux++;
+                    copyAuxiliaryRetrievedItemToMemory( element );
+                }
+            }
+        }
+    }
+
+    /**
+     * Copies the item to memory if the memory size is greater than 0. Only spool if the memory
+     * cache size is greater than 0, else the item will immediately get put into purgatory.
+     * <p>
+     * @param element
+     * @throws IOException
+     */
+    private void copyAuxiliaryRetrievedItemToMemory( ICacheElement<K, V> element )
+        throws IOException
+    {
+        if ( memCache.getCacheAttributes().getMaxObjects() > 0 )
+        {
+            memCache.update( element );
+        }
+        else
+        {
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Skipping memory update since no items are allowed in memory" );
+            }
+        }
+    }
+
+    /**
+     * Returns a set of keys that were not found.
+     * <p>
+     * @param keys
+     * @param foundElements
+     * @return the original set of cache keys, minus any cache keys present in the map keys of the
+     *         foundElements map
+     */
+    private Set<K> pruneKeysFound( Set<K> keys, Map<K, ICacheElement<K, V>> foundElements )
+    {
+        Set<K> remainingKeys = new HashSet<K>( keys );
+
+        for (K key : foundElements.keySet())
+        {
+            remainingKeys.remove( key );
+        }
+
+        return remainingKeys;
+    }
+
+    /**
+     * Get a set of the keys for all elements in the cache
+     * <p>
+     * @return A set of the key type
+     */
+    public Set<K> getKeySet()
+    {
+        return getKeySet(false);
+    }
+
+    /**
+     * Get a set of the keys for all elements in the cache
+     * <p>
+     * @param localOnly true if only memory keys are requested
+     *
+     * @return A set of the key type
+     */
+    public Set<K> getKeySet(boolean localOnly)
+    {
+        HashSet<K> allKeys = new HashSet<K>();
+
+        allKeys.addAll( memCache.getKeySet() );
+        for ( int i = 0; i < auxCaches.length; i++ )
+        {
+            AuxiliaryCache<K, V> aux = auxCaches[i];
+            if ( aux != null )
+            {
+                if(!localOnly || aux.getCacheType() == CacheType.DISK_CACHE)
+                {
+                    try
+                    {
+                        allKeys.addAll( aux.getKeySet() );
+                    }
+                    catch ( IOException e )
+                    {
+                        // ignore
+                    }
+                }
+            }
+        }
+        return allKeys;
+    }
+
+    /**
+     * Removes an item from the cache.
+     * <p>
+     * @param key
+     * @return true is it was removed
+     * @see org.apache.commons.jcs.engine.behavior.ICache#remove(Object)
+     */
+    @Override
+    public boolean remove( K key )
+    {
+        return remove( key, false );
+    }
+
+    /**
+     * Do not propagate removeall laterally or remotely.
+     * <p>
+     * @param key
+     * @return true if the item was already in the cache.
+     */
+    public boolean localRemove( K key )
+    {
+        return remove( key, true );
+    }
+
+    /**
+     * fromRemote: If a remove call was made on a cache with both, then the remote should have been
+     * called. If it wasn't then the remote is down. we'll assume it is down for all. If it did come
+     * from the remote then the cache is remotely configured and lateral removal is unnecessary. If
+     * it came laterally then lateral removal is unnecessary. Does this assume that there is only
+     * one lateral and remote for the cache? Not really, the initial removal should take care of the
+     * problem if the source cache was similarly configured. Otherwise the remote cache, if it had
+     * no laterals, would remove all the elements from remotely configured caches, but if those
+     * caches had some other weird laterals that were not remotely configured, only laterally
+     * propagated then they would go out of synch. The same could happen for multiple remotes. If
+     * this looks necessary we will need to build in an identifier to specify the source of a
+     * removal.
+     * <p>
+     * @param key
+     * @param localOnly
+     * @return true if the item was in the cache, else false
+     */
+    protected synchronized boolean remove( K key, boolean localOnly )
+    {
+        // not thread safe, but just for debugging and testing.
+        removeCount++;
+
+        boolean removed = false;
+
+        try
+        {
+            removed = memCache.remove( key );
+        }
+        catch ( IOException e )
+        {
+            log.error( e );
+        }
+
+        // Removes from all auxiliary caches.
+        for ( int i = 0; i < auxCaches.length; i++ )
+        {
+            ICache<K, V> aux = auxCaches[i];
+
+            if ( aux == null )
+            {
+                continue;
+            }
+
+            CacheType cacheType = aux.getCacheType();
+
+            // for now let laterals call remote remove but not vice versa
+
+            if ( localOnly && ( cacheType == CacheType.REMOTE_CACHE || cacheType == CacheType.LATERAL_CACHE ) )
+            {
+                continue;
+            }
+            try
+            {
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "Removing " + key + " from cacheType" + cacheType );
+                }
+
+                boolean b = aux.remove( key );
+
+                // Don't take the remote removal into account.
+                if ( !removed && cacheType != CacheType.REMOTE_CACHE )
+                {
+                    removed = b;
+                }
+            }
+            catch ( IOException ex )
+            {
+                log.error( "Failure removing from aux", ex );
+            }
+        }
+        return removed;
+    }
+
+    /**
+     * Clears the region. This command will be sent to all auxiliaries. Some auxiliaries, such as
+     * the JDBC disk cache, can be configured to not honor removeAll requests.
+     * <p>
+     * @see org.apache.commons.jcs.engine.behavior.ICache#removeAll()
+     */
+    @Override
+    public void removeAll()
+        throws IOException
+    {
+        removeAll( false );
+    }
+
+    /**
+     * Will not pass the remove message remotely.
+     * <p>
+     * @throws IOException
+     */
+    public void localRemoveAll()
+        throws IOException
+    {
+        removeAll( true );
+    }
+
+    /**
+     * Removes all cached items.
+     * <p>
+     * @param localOnly must pass in false to get remote and lateral aux's updated. This prevents
+     *            looping.
+     * @throws IOException
+     */
+    protected synchronized void removeAll( boolean localOnly )
+        throws IOException
+    {
+        try
+        {
+            memCache.removeAll();
+
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Removed All keys from the memory cache." );
+            }
+        }
+        catch ( IOException ex )
+        {
+            log.error( "Trouble updating memory cache.", ex );
+        }
+
+        // Removes from all auxiliary disk caches.
+        for ( int i = 0; i < auxCaches.length; i++ )
+        {
+            ICache<K, V> aux = auxCaches[i];
+
+            if ( aux != null && ( aux.getCacheType() == CacheType.DISK_CACHE || !localOnly ) )
+            {
+                try
+                {
+                    if ( log.isDebugEnabled() )
+                    {
+                        log.debug( "Removing All keys from cacheType" + aux.getCacheType() );
+                    }
+
+                    aux.removeAll();
+                }
+                catch ( IOException ex )
+                {
+                    log.error( "Failure removing all from aux", ex );
+                }
+            }
+        }
+    }
+
+    /**
+     * Flushes all cache items from memory to auxiliary caches and close the auxiliary caches.
+     */
+    @Override
+    public void dispose()
+    {
+        dispose( false );
+    }
+
+    /**
+     * Invoked only by CacheManager. This method disposes of the auxiliaries one by one. For the
+     * disk cache, the items in memory are freed, meaning that they will be sent through the
+     * overflow channel to disk. After the auxiliaries are disposed, the memory cache is disposed.
+     * <p>
+     * @param fromRemote
+     */
+    public synchronized void dispose( boolean fromRemote )
+    {
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "In DISPOSE, [" + this.cacheAttr.getCacheName() + "] fromRemote [" + fromRemote + "]" );
+        }
+
+        // If already disposed, return immediately
+        if ( !alive )
+        {
+            return;
+        }
+        alive = false;
+
+        // Now, shut down the event queue
+        if (elementEventQ != null)
+        {
+            elementEventQ.dispose();
+            elementEventQ = null;
+        }
+
+        // Dispose of each auxiliary cache, Remote auxiliaries will be
+        // skipped if 'fromRemote' is true.
+        for ( int i = 0; i < auxCaches.length; i++ )
+        {
+            try
+            {
+                ICache<K, V> aux = auxCaches[i];
+
+                // Skip this auxiliary if:
+                // - The auxiliary is null
+                // - The auxiliary is not alive
+                // - The auxiliary is remote and the invocation was remote
+
+                if ( aux == null || aux.getStatus() != CacheStatus.ALIVE
+                    || ( fromRemote && aux.getCacheType() == CacheType.REMOTE_CACHE ) )
+                {
+                    if ( log.isInfoEnabled() )
+                    {
+                        log.info( "In DISPOSE, [" + this.cacheAttr.getCacheName() + "] SKIPPING auxiliary [" + aux.getCacheName() + "] fromRemote ["
+                            + fromRemote + "]" );
+                    }
+                    continue;
+                }
+
+                if ( log.isInfoEnabled() )
+                {
+                    log.info( "In DISPOSE, [" + this.cacheAttr.getCacheName() + "] auxiliary [" + aux.getCacheName() + "]" );
+                }
+
+                // IT USED TO BE THE CASE THAT (If the auxiliary is not a lateral, or the cache
+                // attributes
+                // have 'getUseLateral' set, all the elements currently in
+                // memory are written to the lateral before disposing)
+                // I changed this. It was excessive. Only the disk cache needs the items, since only
+                // the disk cache
+                // is in a situation to not get items on a put.
+
+                if ( aux.getCacheType() == CacheType.DISK_CACHE )
+                {
+                    int numToFree = memCache.getSize();
+                    memCache.freeElements( numToFree );
+
+                    if ( log.isInfoEnabled() )
+                    {
+                        log.info( "In DISPOSE, [" + this.cacheAttr.getCacheName() + "] put " + numToFree + " into auxiliary " + aux.getCacheName() );
+                    }
+                }
+
+                // Dispose of the auxiliary
+                aux.dispose();
+            }
+            catch ( IOException ex )
+            {
+                log.error( "Failure disposing of aux.", ex );
+            }
+        }
+
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "In DISPOSE, [" + this.cacheAttr.getCacheName() + "] disposing of memory cache." );
+        }
+        try
+        {
+            memCache.dispose();
+        }
+        catch ( IOException ex )
+        {
+            log.error( "Failure disposing of memCache", ex );
+        }
+    }
+
+    /**
+     * Calling save cause the entire contents of the memory cache to be flushed to all auxiliaries.
+     * Though this put is extremely fast, this could bog the cache and should be avoided. The
+     * dispose method should call a version of this. Good for testing.
+     */
+    public void save()
+    {
+        synchronized ( this )
+        {
+            if ( !alive )
+            {
+                return;
+            }
+            alive = false;
+
+            for ( int i = 0; i < auxCaches.length; i++ )
+            {
+                try
+                {
+                    ICache<K, V> aux = auxCaches[i];
+
+                    if ( aux.getStatus() == CacheStatus.ALIVE )
+                    {
+                        for (K key : memCache.getKeySet())
+                        {
+                            ICacheElement<K, V> ce = memCache.get(key);
+
+                            if (ce != null)
+                            {
+                                aux.update( ce );
+                            }
+                        }
+                    }
+                }
+                catch ( IOException ex )
+                {
+                    log.error( "Failure saving aux caches.", ex );
+                }
+            }
+        }
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Called save for [" + cacheAttr.getCacheName() + "]" );
+        }
+    }
+
+    /**
+     * Gets the size attribute of the Cache object. This return the number of elements, not the byte
+     * size.
+     * <p>
+     * @return The size value
+     */
+    @Override
+    public int getSize()
+    {
+        return memCache.getSize();
+    }
+
+    /**
+     * Gets the cacheType attribute of the Cache object.
+     * <p>
+     * @return The cacheType value
+     */
+    @Override
+    public CacheType getCacheType()
+    {
+        return CacheType.CACHE_HUB;
+    }
+
+    /**
+     * Gets the status attribute of the Cache object.
+     * <p>
+     * @return The status value
+     */
+    @Override
+    public synchronized CacheStatus getStatus()
+    {
+        return alive ? CacheStatus.ALIVE : CacheStatus.DISPOSED;
+    }
+
+    /**
+     * Gets stats for debugging.
+     * <p>
+     * @return String
+     */
+    @Override
+    public String getStats()
+    {
+        return getStatistics().toString();
+    }
+
+    /**
+     * This returns data gathered for this region and all the auxiliaries it currently uses.
+     * <p>
+     * @return Statistics and Info on the Region.
+     */
+    public ICacheStats getStatistics()
+    {
+        ICacheStats stats = new CacheStats();
+        stats.setRegionName( this.getCacheName() );
+
+        // store the composite cache stats first
+        ArrayList<IStatElement<?>> elems = new ArrayList<IStatElement<?>>();
+
+        elems.add(new StatElement<Integer>( "HitCountRam", Integer.valueOf(getHitCountRam()) ) );
+        elems.add(new StatElement<Integer>( "HitCountAux", Integer.valueOf(getHitCountAux()) ) );
+
+        stats.setStatElements( elems );
+
+        // memory + aux, memory is not considered an auxiliary internally
+        int total = auxCaches.length + 1;
+        ArrayList<IStats> auxStats = new ArrayList<IStats>(total);
+
+        auxStats.add(getMemoryCache().getStatistics());
+
+        for ( AuxiliaryCache<K, V> aux : auxCaches )
+        {
+            auxStats.add(aux.getStatistics());
+        }
+
+        // store the auxiliary stats
+        stats.setAuxiliaryCacheStats( auxStats );
+
+        return stats;
+    }
+
+    /**
+     * Gets the cacheName attribute of the Cache object. This is also known as the region name.
+     * <p>
+     * @return The cacheName value
+     */
+    @Override
+    public String getCacheName()
+    {
+        return cacheAttr.getCacheName();
+    }
+
+    /**
+     * Gets the default element attribute of the Cache object This returns a copy. It does not
+     * return a reference to the attributes.
+     * <p>
+     * @return The attributes value
+     */
+    public IElementAttributes getElementAttributes()
+    {
+        if ( attr != null )
+        {
+            return attr.copy();
+        }
+        return null;
+    }
+
+    /**
+     * Sets the default element attribute of the Cache object.
+     * <p>
+     * @param attr
+     */
+    public void setElementAttributes( IElementAttributes attr )
+    {
+        this.attr = attr;
+    }
+
+    /**
+     * Gets the ICompositeCacheAttributes attribute of the Cache object.
+     * <p>
+     * @return The ICompositeCacheAttributes value
+     */
+    public ICompositeCacheAttributes getCacheAttributes()
+    {
+        return this.cacheAttr;
+    }
+
+    /**
+     * Sets the ICompositeCacheAttributes attribute of the Cache object.
+     * <p>
+     * @param cattr The new ICompositeCacheAttributes value
+     */
+    public void setCacheAttributes( ICompositeCacheAttributes cattr )
+    {
+        this.cacheAttr = cattr;
+        // need a better way to do this, what if it is in error
+        this.memCache.initialize( this );
+    }
+
+    /**
+     * Gets the elementAttributes attribute of the Cache object.
+     * <p>
+     * @param key
+     * @return The elementAttributes value
+     * @throws CacheException
+     * @throws IOException
+     */
+    public IElementAttributes getElementAttributes( K key )
+        throws CacheException, IOException
+    {
+        ICacheElement<K, V> ce = get( key );
+        if ( ce == null )
+        {
+            throw new ObjectNotFoundException( "key " + key + " is not found" );
+        }
+        return ce.getElementAttributes();
+    }
+
+    /**
+     * Determine if the element is expired based on the values of the element attributes
+     *
+     * @param element the element
+     *
+     * @return true if the element is expired
+     */
+    public boolean isExpired( ICacheElement<K, V> element)
+    {
+        return isExpired(element, System.currentTimeMillis(),
+                ElementEventType.EXCEEDED_MAXLIFE_ONREQUEST,
+                ElementEventType.EXCEEDED_IDLETIME_ONREQUEST );
+    }
+
+    /**
+     * Check if the element is expired based on the values of the element attributes
+     *
+     * @param element the element
+     * @param timestamp the timestamp to compare to
+     * @param eventMaxlife the event to fire in case the max life time is exceeded
+     * @param eventIdle the event to fire in case the idle time is exceeded
+     *
+     * @return true if the element is expired
+     */
+    public boolean isExpired(ICacheElement<K, V> element, long timestamp,
+            ElementEventType eventMaxlife, ElementEventType eventIdle)
+    {
+        try
+        {
+            IElementAttributes attributes = element.getElementAttributes();
+
+            if ( !attributes.getIsEternal() )
+            {
+                // Remove if maxLifeSeconds exceeded
+
+                long maxLifeSeconds = attributes.getMaxLife();
+                long createTime = attributes.getCreateTime();
+
+                final long timeFactorForMilliseconds = attributes.getTimeFactorForMilliseconds();
+
+                if ( maxLifeSeconds != -1 && ( timestamp - createTime ) > ( maxLifeSeconds * timeFactorForMilliseconds) )
+                {
+                    if ( log.isDebugEnabled() )
+                    {
+                        log.debug( "Exceeded maxLife: " + element.getKey() );
+                    }
+
+                    handleElementEvent( element, eventMaxlife );
+
+                    return true;
+                }
+                long idleTime = attributes.getIdleTime();
+                long lastAccessTime = attributes.getLastAccessTime();
+
+                // Remove if maxIdleTime exceeded
+                // If you have a 0 size memory cache, then the last access will
+                // not get updated.
+                // you will need to set the idle time to -1.
+
+                if ( ( idleTime != -1 ) && ( timestamp - lastAccessTime ) > idleTime * timeFactorForMilliseconds )
+                {
+                    if ( log.isDebugEnabled() )
+                    {
+                        log.info( "Exceeded maxIdle: " + element.getKey() );
+                    }
+
+                    handleElementEvent( element, eventIdle );
+
+                    return true;
+                }
+            }
+        }
+        catch ( Exception e )
+        {
+            log.error( "Error determining expiration period, expiring", e );
+
+            return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * If there are event handlers for the item, then create an event and queue it up.
+     * <p>
+     * This does not call handle directly; instead the handler and the event are put into a queue.
+     * This prevents the event handling from blocking normal cache operations.
+     * <p>
+     * @param element the item
+     * @param eventType the event type
+     */
+    public void handleElementEvent( ICacheElement<K, V> element, ElementEventType eventType )
+    {
+        ArrayList<IElementEventHandler> eventHandlers = element.getElementAttributes().getElementEventHandlers();
+        if ( eventHandlers != null )
+        {
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Element Handlers are registered.  Create event type " + eventType );
+            }
+            if ( elementEventQ == null )
+            {
+                log.warn("No element event queue available for cache " + getCacheName());
+                return;
+            }
+            IElementEvent<ICacheElement<K, V>> event = new ElementEvent<ICacheElement<K, V>>( element, eventType );
+            for (IElementEventHandler hand : eventHandlers)
+            {
+                try
+                {
+                   elementEventQ.addElementEvent( hand, event );
+                }
+                catch ( IOException e )
+                {
+                    log.error( "Trouble adding element event to queue", e );
+                }
+            }
+        }
+    }
+
+    /**
+     * Create the MemoryCache based on the config parameters.
+     * TODO: consider making this an auxiliary, despite its close tie to the CacheHub.
+     * TODO: might want to create a memory cache config file separate from that of the hub -- ICompositeCacheAttributes
+     * <p>
+     * @param cattr
+     */
+    private void createMemoryCache( ICompositeCacheAttributes cattr )
+    {
+        if ( memCache == null )
+        {
+            try
+            {
+                Class<?> c = Class.forName( cattr.getMemoryCacheName() );
+                @SuppressWarnings("unchecked") // Need cast
+                IMemoryCache<K, V> newInstance = (IMemoryCache<K, V>) c.newInstance();
+                memCache = newInstance;
+                memCache.initialize( this );
+            }
+            catch ( Exception e )
+            {
+                log.warn( "Failed to init mem cache, using: LRUMemoryCache", e );
+
+                this.memCache = new LRUMemoryCache<K, V>();
+                this.memCache.initialize( this );
+            }
+        }
+        else
+        {
+            log.warn( "Refusing to create memory cache -- already exists." );
+        }
+    }
+
+    /**
+     * Access to the memory cache for instrumentation.
+     * <p>
+     * @return the MemoryCache implementation
+     */
+    public IMemoryCache<K, V> getMemoryCache()
+    {
+        return memCache;
+    }
+
+    /**
+     * Number of times a requested item was found in the memory cache.
+     * <p>
+     * @return number of hits in memory
+     */
+    public int getHitCountRam()
+    {
+        return hitCountRam;
+    }
+
+    /**
+     * Number of times a requested item was found in and auxiliary cache.
+     * @return number of auxiliary hits.
+     */
+    public int getHitCountAux()
+    {
+        return hitCountAux;
+    }
+
+    /**
+     * Number of times a requested element was not found.
+     * @return number of misses.
+     */
+    public int getMissCountNotFound()
+    {
+        return missCountNotFound;
+    }
+
+    /**
+     * Number of times a requested element was found but was expired.
+     * @return number of found but expired gets.
+     */
+    public int getMissCountExpired()
+    {
+        return missCountExpired;
+    }
+
+    /**
+     * Sets the key matcher used by get matching.
+     * <p>
+     * @param keyMatcher
+     */
+    @Override
+    public void setKeyMatcher( IKeyMatcher<K> keyMatcher )
+    {
+        if ( keyMatcher != null )
+        {
+            this.keyMatcher = keyMatcher;
+        }
+    }
+
+    /**
+     * Returns the key matcher used by get matching.
+     * <p>
+     * @return keyMatcher
+     */
+    public IKeyMatcher<K> getKeyMatcher()
+    {
+        return this.keyMatcher;
+    }
+
+    /**
+     * @param updateCount The updateCount to set.
+     */
+    public synchronized void setUpdateCount( int updateCount )
+    {
+        this.updateCount = updateCount;
+    }
+
+    /**
+     * @return Returns the updateCount.
+     */
+    public synchronized int getUpdateCount()
+    {
+        return updateCount;
+    }
+
+    /**
+     * @param removeCount The removeCount to set.
+     */
+    public synchronized void setRemoveCount( int removeCount )
+    {
+        this.removeCount = removeCount;
+    }
+
+    /**
+     * @return Returns the removeCount.
+     */
+    public synchronized int getRemoveCount()
+    {
+        return removeCount;
+    }
+
+    /**
+     * This returns the stats.
+     * <p>
+     * @return getStats()
+     */
+    @Override
+    public String toString()
+    {
+        return getStats();
+    }
+}
diff --git a/src/org/apache/commons/jcs/engine/control/CompositeCacheConfigurator.java b/src/org/apache/commons/jcs/engine/control/CompositeCacheConfigurator.java
new file mode 100644
index 0000000..7e3530c
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/control/CompositeCacheConfigurator.java
@@ -0,0 +1,664 @@
+package org.apache.commons.jcs.engine.control;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.auxiliary.AuxiliaryCache;
+import org.apache.commons.jcs.auxiliary.AuxiliaryCacheAttributes;
+import org.apache.commons.jcs.auxiliary.AuxiliaryCacheConfigurator;
+import org.apache.commons.jcs.auxiliary.AuxiliaryCacheFactory;
+import org.apache.commons.jcs.engine.behavior.ICache;
+import org.apache.commons.jcs.engine.behavior.ICompositeCacheAttributes;
+import org.apache.commons.jcs.engine.behavior.IElementAttributes;
+import org.apache.commons.jcs.engine.behavior.IElementSerializer;
+import org.apache.commons.jcs.engine.behavior.IRequireScheduler;
+import org.apache.commons.jcs.engine.logging.behavior.ICacheEventLogger;
+import org.apache.commons.jcs.engine.match.KeyMatcherPatternImpl;
+import org.apache.commons.jcs.engine.match.behavior.IKeyMatcher;
+import org.apache.commons.jcs.utils.config.OptionConverter;
+import org.apache.commons.jcs.utils.config.PropertySetter;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.Properties;
+import java.util.StringTokenizer;
+
+/**
+ * This class configures JCS based on a properties object.
+ * <p>
+ * This class is based on the log4j class org.apache.log4j.PropertyConfigurator which was made by:
+ * "Luke Blanshard" <Luke at quiq.com>"Mark DONSZELMANN" <Mark.Donszelmann at cern.ch>"Anders Kristensen"
+ * <akristensen at dynamicsoft.com>
+ */
+public class CompositeCacheConfigurator
+{
+    /** The logger */
+    private static final Log log = LogFactory.getLog( CompositeCacheConfigurator.class );
+
+    /** default region prefix */
+    static final String DEFAULT_REGION = "jcs.default";
+
+    /** normal region prefix */
+    static final String REGION_PREFIX = "jcs.region.";
+
+    /** system region prefix. might not be used */
+    static final String SYSTEM_REGION_PREFIX = "jcs.system.";
+
+    /** auxiliary prefix */
+    static final String AUXILIARY_PREFIX = "jcs.auxiliary.";
+
+    /** .attributes */
+    static final String ATTRIBUTE_PREFIX = ".attributes";
+
+    /** .cacheattributes */
+    static final String CACHE_ATTRIBUTE_PREFIX = ".cacheattributes";
+
+    /** .elementattributes */
+    static final String ELEMENT_ATTRIBUTE_PREFIX = ".elementattributes";
+
+    /**
+     * jcs.auxiliary.NAME.keymatcher=CLASSNAME
+     * <p>
+     * jcs.auxiliary.NAME.keymatcher.attributes.CUSTOMPROPERTY=VALUE
+     */
+    public static final String KEY_MATCHER_PREFIX = ".keymatcher";
+
+    /** Can't operate on the interface. */
+    private final CompositeCacheManager compositeCacheManager;
+
+    /**
+     * Constructor for the CompositeCacheConfigurator object
+     *<p>
+     * @param ccMgr
+     */
+    public CompositeCacheConfigurator( CompositeCacheManager ccMgr )
+    {
+        this.compositeCacheManager = ccMgr;
+    }
+
+    /**
+     * Configure cached for file name.
+     * <p>
+     * This is only used for testing. The manager handles the translation of a file into a
+     * properties object.
+     * <p>
+     * @param configFileName
+     */
+    protected void doConfigure( String configFileName )
+    {
+        Properties props = new Properties();
+        FileInputStream istream = null;
+
+        try
+        {
+            istream = new FileInputStream( configFileName );
+            props.load( istream );
+        }
+        catch ( IOException e )
+        {
+            log.error( "Could not read configuration file, ignored: " + configFileName, e );
+            return;
+        }
+        finally
+        {
+            if (istream != null)
+            {
+                try
+                {
+                    istream.close();
+                }
+                catch (IOException e)
+                {
+                    log.error( "Could not close configuration file " + configFileName, e );
+                }
+            }
+        }
+
+        // If we reach here, then the config file is alright.
+        doConfigure( props );
+    }
+
+    /**
+     * Configure cache for properties object.
+     * <p>
+     * This method proceeds in several steps:
+     * <ul>
+     * <li>Store props for use by non configured caches.
+     * <li>Set default value list
+     * <li>Set default cache attr
+     * <li>Set default element attr
+     * <li>Setup system caches to be used
+     * <li>Setup preconfigured caches
+     * </ul>
+     * @param properties
+     */
+    public void doConfigure( Properties properties )
+    {
+        long start = System.currentTimeMillis();
+
+        // store props for use by non configured caches
+        compositeCacheManager.setConfigurationProperties( properties );
+
+        // set default value list
+        setDefaultAuxValues( properties );
+
+        // set default cache attr
+        setDefaultCompositeCacheAttributes( properties );
+
+        // set default element attr
+        setDefaultElementAttributes( properties );
+
+        // set up system caches to be used by non system caches
+        // need to make sure there is no circularity of reference
+        parseSystemRegions( properties );
+
+        // setup preconfigured caches
+        parseRegions( properties );
+
+        long end = System.currentTimeMillis();
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "Finished configuration in " + ( end - start ) + " ms." );
+        }
+
+    }
+
+    /**
+     * Set the default aux list for new caches.
+     * <p>
+     * @param props
+     */
+    protected void setDefaultAuxValues( Properties props )
+    {
+        String value = OptionConverter.findAndSubst( DEFAULT_REGION, props );
+        compositeCacheManager.setDefaultAuxValues(value);
+
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "Setting default auxiliaries to " + value );
+        }
+    }
+
+    /**
+     * Set the default CompositeCacheAttributes for new caches.
+     *<p>
+     * @param props
+     */
+    protected void setDefaultCompositeCacheAttributes( Properties props )
+    {
+        ICompositeCacheAttributes icca = parseCompositeCacheAttributes( props, "",
+                                                                        CompositeCacheConfigurator.DEFAULT_REGION );
+        compositeCacheManager.setDefaultCacheAttributes( icca );
+
+        log.info( "setting defaultCompositeCacheAttributes to " + icca );
+    }
+
+    /**
+     * Set the default ElementAttributes for new caches.
+     *<p>
+     * @param props
+     */
+    protected void setDefaultElementAttributes( Properties props )
+    {
+        IElementAttributes iea = parseElementAttributes( props, "", CompositeCacheConfigurator.DEFAULT_REGION );
+        compositeCacheManager.setDefaultElementAttributes( iea );
+
+        log.info( "setting defaultElementAttributes to " + iea );
+    }
+
+    /**
+     * Create caches used internally. System status gives them creation priority.
+     *<p>
+     * @param props
+     */
+    protected <K, V> void parseSystemRegions( Properties props )
+    {
+        Enumeration<?> en = props.propertyNames();
+        while ( en.hasMoreElements() )
+        {
+            String key = (String) en.nextElement();
+            if ( key.startsWith( SYSTEM_REGION_PREFIX ) && key.indexOf( "attributes" ) == -1 )
+            {
+                String regionName = key.substring( SYSTEM_REGION_PREFIX.length() );
+                String value = OptionConverter.findAndSubst( key, props );
+                ICache<K, V> cache;
+                synchronized ( regionName )
+                {
+                    cache = parseRegion( props, regionName, value, null, SYSTEM_REGION_PREFIX );
+                }
+
+                compositeCacheManager.addCache( regionName, cache );
+            }
+        }
+    }
+
+    /**
+     * Parse region elements.
+     *<p>
+     * @param props
+     */
+    protected <K, V> void parseRegions( Properties props )
+    {
+        List<String> regionNames = new ArrayList<String>();
+
+        Enumeration<?> en = props.propertyNames();
+        while ( en.hasMoreElements() )
+        {
+            String key = (String) en.nextElement();
+            if ( key.startsWith( REGION_PREFIX ) && key.indexOf( "attributes" ) == -1 )
+            {
+                String regionName = key.substring( REGION_PREFIX.length() );
+
+                regionNames.add( regionName );
+
+                String auxiliaryList = OptionConverter.findAndSubst( key, props );
+                ICache<K, V> cache;
+                synchronized ( regionName )
+                {
+                    cache = parseRegion( props, regionName, auxiliaryList );
+                }
+                compositeCacheManager.addCache( regionName, cache );
+            }
+        }
+
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "Parsed regions " + regionNames );
+        }
+    }
+
+    /**
+     * Create cache region.
+     *<p>
+     * @param props
+     * @param regName
+     * @param value
+     * @return CompositeCache
+     */
+    protected <K, V> CompositeCache<K, V> parseRegion(
+            Properties props, String regName, String value )
+    {
+        return parseRegion( props, regName, value, null, REGION_PREFIX );
+    }
+
+    /**
+     * Get all the properties for a region and configure its cache.
+     * <p>
+     * This method tells the other parse method the name of the region prefix.
+     *<p>
+     * @param props
+     * @param regName
+     * @param value
+     * @param cca
+     * @return CompositeCache
+     */
+    protected <K, V> CompositeCache<K, V> parseRegion(
+            Properties props, String regName, String value, ICompositeCacheAttributes cca )
+    {
+        return parseRegion( props, regName, value, cca, REGION_PREFIX );
+    }
+
+    /**
+     * Get all the properties for a region and configure its cache.
+     *<p>
+     * @param props
+     * @param regName
+     * @param value
+     * @param cca
+     * @param regionPrefix
+     * @return CompositeCache
+     */
+    protected <K, V> CompositeCache<K, V> parseRegion(
+            Properties props, String regName, String value,
+            ICompositeCacheAttributes cca, String regionPrefix )
+    {
+        // First, create or get the cache and element attributes, and create
+        // the cache.
+        IElementAttributes ea = parseElementAttributes( props, regName, regionPrefix );
+
+        CompositeCache<K, V> cache = ( cca == null )
+            ? new CompositeCache<K, V>( parseCompositeCacheAttributes( props, regName, regionPrefix ), ea )
+            : new CompositeCache<K, V>( cca, ea );
+
+        // Inject scheduler service
+        cache.setScheduledExecutorService(compositeCacheManager.getScheduledExecutorService());
+
+        // Inject element event queue
+        cache.setElementEventQueue(compositeCacheManager.getElementEventQueue());
+
+        if (cache.getMemoryCache() instanceof IRequireScheduler)
+        {
+            ((IRequireScheduler)cache.getMemoryCache()).setScheduledExecutorService(
+                    compositeCacheManager.getScheduledExecutorService());
+        }
+
+        if (value != null)
+        {
+            // Next, create the auxiliaries for the new cache
+            List<AuxiliaryCache<K, V>> auxList = new ArrayList<AuxiliaryCache<K, V>>();
+
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Parsing region name '" + regName + "', value '" + value + "'" );
+            }
+
+            // We must skip over ',' but not white space
+            StringTokenizer st = new StringTokenizer( value, "," );
+
+            // If value is not in the form ", appender.." or "", then we should set
+            // the priority of the category.
+
+            if ( !( value.startsWith( "," ) || value.equals( "" ) ) )
+            {
+                // just to be on the safe side...
+                if ( !st.hasMoreTokens() )
+                {
+                    return null;
+                }
+            }
+
+            AuxiliaryCache<K, V> auxCache;
+            String auxName;
+            while ( st.hasMoreTokens() )
+            {
+                auxName = st.nextToken().trim();
+                if ( auxName == null || auxName.equals( "," ) )
+                {
+                    continue;
+                }
+                log.debug( "Parsing auxiliary named \"" + auxName + "\"." );
+
+                auxCache = parseAuxiliary( props, auxName, regName );
+
+                if ( auxCache != null )
+                {
+                    if (auxCache instanceof IRequireScheduler)
+                    {
+                        ((IRequireScheduler)auxCache).setScheduledExecutorService(
+                                compositeCacheManager.getScheduledExecutorService());
+                    }
+
+                    auxList.add( auxCache );
+                }
+            }
+
+            // Associate the auxiliaries with the cache
+            @SuppressWarnings("unchecked") // No generic arrays in java
+            AuxiliaryCache<K, V>[] auxArray = auxList.toArray( new AuxiliaryCache[0] );
+            cache.setAuxCaches( auxArray );
+        }
+
+        // Return the new cache
+        return cache;
+    }
+
+    /**
+     * Get an ICompositeCacheAttributes for the listed region.
+     *<p>
+     * @param props
+     * @param regName
+     * @return ICompositeCacheAttributes
+     */
+    protected ICompositeCacheAttributes parseCompositeCacheAttributes( Properties props, String regName )
+    {
+        return parseCompositeCacheAttributes( props, regName, REGION_PREFIX );
+    }
+
+    /**
+     * Get the main attributes for a region.
+     *<p>
+     * @param props
+     * @param regName
+     * @param regionPrefix
+     * @return ICompositeCacheAttributes
+     */
+    protected ICompositeCacheAttributes parseCompositeCacheAttributes( Properties props, String regName,
+                                                                       String regionPrefix )
+    {
+        ICompositeCacheAttributes ccAttr;
+
+        String attrName = regionPrefix + regName + CACHE_ATTRIBUTE_PREFIX;
+
+        // auxFactory was not previously initialized.
+        // String prefix = regionPrefix + regName + ATTRIBUTE_PREFIX;
+        ccAttr = OptionConverter.instantiateByKey( props, attrName, null );
+
+        if ( ccAttr == null )
+        {
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "No special CompositeCacheAttributes class defined for key [" + attrName
+                    + "], using default class." );
+            }
+
+            ICompositeCacheAttributes ccAttr2 = compositeCacheManager.getDefaultCacheAttributes();
+            ccAttr = ccAttr2.copy();
+        }
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Parsing options for '" + attrName + "'" );
+        }
+
+        PropertySetter.setProperties( ccAttr, props, attrName + "." );
+        ccAttr.setCacheName( regName );
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "End of parsing for \"" + attrName + "\"." );
+        }
+
+        // GET CACHE FROM FACTORY WITH ATTRIBUTES
+        ccAttr.setCacheName( regName );
+        return ccAttr;
+    }
+
+    /**
+     * Create the element attributes from the properties object for a cache region.
+     *<p>
+     * @param props
+     * @param regName
+     * @param regionPrefix
+     * @return IElementAttributes
+     */
+    protected IElementAttributes parseElementAttributes( Properties props, String regName, String regionPrefix )
+    {
+        IElementAttributes eAttr;
+
+        String attrName = regionPrefix + regName + CompositeCacheConfigurator.ELEMENT_ATTRIBUTE_PREFIX;
+
+        // auxFactory was not previously initialized.
+        // String prefix = regionPrefix + regName + ATTRIBUTE_PREFIX;
+        eAttr = OptionConverter.instantiateByKey( props, attrName, null );
+        if ( eAttr == null )
+        {
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "No special ElementAttribute class defined for key [" + attrName + "], using default class." );
+            }
+
+            IElementAttributes eAttr2 = compositeCacheManager.getDefaultElementAttributes();
+            eAttr = eAttr2.copy();
+        }
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Parsing options for '" + attrName + "'" );
+        }
+
+        PropertySetter.setProperties( eAttr, props, attrName + "." );
+        // eAttr.setCacheName( regName );
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "End of parsing for \"" + attrName + "\"." );
+        }
+
+        // GET CACHE FROM FACTORY WITH ATTRIBUTES
+        // eAttr.setCacheName( regName );
+        return eAttr;
+    }
+
+    /**
+     * Get an aux cache for the listed aux for a region.
+     *<p>
+     * @param props the configuration properties
+     * @param auxName the name of the auxiliary cache
+     * @param regName the name of the region.
+     * @return AuxiliaryCache
+     */
+    protected <K, V> AuxiliaryCache<K, V> parseAuxiliary( Properties props, String auxName, String regName )
+    {
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "parseAuxiliary " + auxName );
+        }
+
+        // GET CACHE
+        @SuppressWarnings("unchecked") // Common map for all caches
+        AuxiliaryCache<K, V> auxCache = (AuxiliaryCache<K, V>)compositeCacheManager.getAuxiliaryCache(auxName, regName);
+
+        if (auxCache == null)
+        {
+            // GET FACTORY
+            AuxiliaryCacheFactory auxFac = compositeCacheManager.registryFacGet( auxName );
+            if ( auxFac == null )
+            {
+                // auxFactory was not previously initialized.
+                String prefix = AUXILIARY_PREFIX + auxName;
+                auxFac = OptionConverter.instantiateByKey( props, prefix, null );
+                if ( auxFac == null )
+                {
+                    log.error( "Could not instantiate auxFactory named \"" + auxName + "\"." );
+                    return null;
+                }
+
+                auxFac.setName( auxName );
+                auxFac.initialize();
+
+                compositeCacheManager.registryFacPut( auxFac );
+            }
+
+            // GET ATTRIBUTES
+            AuxiliaryCacheAttributes auxAttr = compositeCacheManager.registryAttrGet( auxName );
+            String attrName = AUXILIARY_PREFIX + auxName + ATTRIBUTE_PREFIX;
+            if ( auxAttr == null )
+            {
+                // auxFactory was not previously initialized.
+                String prefix = AUXILIARY_PREFIX + auxName + ATTRIBUTE_PREFIX;
+                auxAttr = OptionConverter.instantiateByKey( props, prefix, null );
+                if ( auxAttr == null )
+                {
+                    log.error( "Could not instantiate auxAttr named '" + attrName + "'" );
+                    return null;
+                }
+                auxAttr.setName( auxName );
+                compositeCacheManager.registryAttrPut( auxAttr );
+            }
+
+            auxAttr = auxAttr.copy();
+
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Parsing options for '" + attrName + "'" );
+            }
+
+            PropertySetter.setProperties( auxAttr, props, attrName + "." );
+            auxAttr.setCacheName( regName );
+
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "End of parsing for '" + attrName + "'" );
+            }
+
+            // GET CACHE FROM FACTORY WITH ATTRIBUTES
+            auxAttr.setCacheName( regName );
+
+            String auxPrefix = AUXILIARY_PREFIX + auxName;
+
+            // CONFIGURE THE EVENT LOGGER
+            ICacheEventLogger cacheEventLogger = AuxiliaryCacheConfigurator.parseCacheEventLogger( props, auxPrefix );
+
+            // CONFIGURE THE ELEMENT SERIALIZER
+            IElementSerializer elementSerializer = AuxiliaryCacheConfigurator.parseElementSerializer( props, auxPrefix );
+
+            // CONFIGURE THE KEYMATCHER
+            //IKeyMatcher keyMatcher = parseKeyMatcher( props, auxPrefix );
+            // TODO add to factory interface
+
+            // Consider putting the compositeCache back in the factory interface
+            // since the manager may not know about it at this point.
+            // need to make sure the manager already has the cache
+            // before the auxiliary is created.
+            try
+            {
+                auxCache = auxFac.createCache( auxAttr, compositeCacheManager, cacheEventLogger, elementSerializer );
+            }
+            catch (Exception e)
+            {
+                log.error( "Could not instantiate auxiliary cache named \"" + regName + "\"." );
+                return null;
+            }
+
+            compositeCacheManager.addAuxiliaryCache(auxName, regName, auxCache);
+        }
+
+        return auxCache;
+    }
+
+    /**
+     * Creates a custom key matcher if one is defined.  Else, it uses the default.
+     * <p>
+     * @param props
+     * @param auxPrefix - ex. AUXILIARY_PREFIX + auxName
+     * @return IKeyMatcher
+     */
+    public static <K> IKeyMatcher<K> parseKeyMatcher( Properties props, String auxPrefix )
+    {
+
+        // auxFactory was not previously initialized.
+        String keyMatcherClassName = auxPrefix + KEY_MATCHER_PREFIX;
+        IKeyMatcher<K> keyMatcher = OptionConverter.instantiateByKey( props, keyMatcherClassName, null );
+        if ( keyMatcher != null )
+        {
+            String attributePrefix = auxPrefix + KEY_MATCHER_PREFIX + ATTRIBUTE_PREFIX;
+            PropertySetter.setProperties( keyMatcher, props, attributePrefix + "." );
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "Using custom key matcher [" + keyMatcher + "] for auxiliary [" + auxPrefix
+                    + "]" );
+            }
+        }
+        else
+        {
+            // use the default standard serializer
+            keyMatcher = new KeyMatcherPatternImpl<K>();
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "Using standard key matcher [" + keyMatcher + "] for auxiliary [" + auxPrefix + "]" );
+            }
+        }
+        return keyMatcher;
+    }
+}
diff --git a/src/org/apache/commons/jcs/engine/control/CompositeCacheManager.java b/src/org/apache/commons/jcs/engine/control/CompositeCacheManager.java
new file mode 100644
index 0000000..d43f945
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/control/CompositeCacheManager.java
@@ -0,0 +1,1025 @@
+package org.apache.commons.jcs.engine.control;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.management.ManagementFactory;
+import java.security.AccessControlException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+
+import org.apache.commons.jcs.access.exception.CacheException;
+import org.apache.commons.jcs.admin.JCSAdminBean;
+import org.apache.commons.jcs.auxiliary.AuxiliaryCache;
+import org.apache.commons.jcs.auxiliary.AuxiliaryCacheAttributes;
+import org.apache.commons.jcs.auxiliary.AuxiliaryCacheFactory;
+import org.apache.commons.jcs.auxiliary.remote.behavior.IRemoteCacheConstants;
+import org.apache.commons.jcs.engine.CacheConstants;
+import org.apache.commons.jcs.engine.CompositeCacheAttributes;
+import org.apache.commons.jcs.engine.ElementAttributes;
+import org.apache.commons.jcs.engine.behavior.ICache;
+import org.apache.commons.jcs.engine.behavior.ICacheType.CacheType;
+import org.apache.commons.jcs.engine.behavior.ICompositeCacheAttributes;
+import org.apache.commons.jcs.engine.behavior.ICompositeCacheManager;
+import org.apache.commons.jcs.engine.behavior.IElementAttributes;
+import org.apache.commons.jcs.engine.behavior.IProvideScheduler;
+import org.apache.commons.jcs.engine.behavior.IShutdownObserver;
+import org.apache.commons.jcs.engine.control.event.ElementEventQueue;
+import org.apache.commons.jcs.engine.control.event.behavior.IElementEventQueue;
+import org.apache.commons.jcs.engine.stats.CacheStats;
+import org.apache.commons.jcs.engine.stats.behavior.ICacheStats;
+import org.apache.commons.jcs.utils.threadpool.DaemonThreadFactory;
+import org.apache.commons.jcs.utils.threadpool.ThreadPoolManager;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Manages a composite cache. This provides access to caches and is the primary way to shutdown the
+ * caching system as a whole.
+ * <p>
+ * The composite cache manager is responsible for creating / configuring cache regions. It serves as
+ * a factory for the ComositeCache class. The CompositeCache is the core of JCS, the hub for various
+ * auxiliaries.
+ */
+public class CompositeCacheManager
+    implements IRemoteCacheConstants, ICompositeCacheManager, IProvideScheduler
+{
+    /** The logger */
+    private static final Log log = LogFactory.getLog( CompositeCacheManager.class );
+
+    /** JMX object name */
+    public static final String JMX_OBJECT_NAME = "org.apache.commons.jcs:type=JCSAdminBean";
+
+    /** Caches managed by this cache manager */
+    private final Map<String, ICache<?, ?>> caches =
+        new ConcurrentHashMap<String, ICache<?, ?>>();
+
+    /** Number of clients accessing this cache manager */
+    private int clients;
+
+    /** Default cache attributes for this cache manager */
+    private ICompositeCacheAttributes defaultCacheAttr = new CompositeCacheAttributes();
+
+    /** Default element attributes for this cache manager */
+    private IElementAttributes defaultElementAttr = new ElementAttributes();
+
+    /** Used to keep track of configured auxiliaries */
+    private final Map<String, AuxiliaryCacheFactory> auxiliaryFactoryRegistry =
+        new ConcurrentHashMap<String, AuxiliaryCacheFactory>( 11 );
+
+    /** Used to keep track of attributes for auxiliaries. */
+    private final Map<String, AuxiliaryCacheAttributes> auxiliaryAttributeRegistry =
+        new ConcurrentHashMap<String, AuxiliaryCacheAttributes>( 11 );
+
+    /** Used to keep track of configured auxiliaries */
+    private final Map<String, AuxiliaryCache<?, ?>> auxiliaryCaches =
+        new ConcurrentHashMap<String, AuxiliaryCache<?, ?>>( 11 );
+
+    /** Properties with which this manager was configured. This is exposed for other managers. */
+    private Properties configurationProperties;
+
+    /** The default auxiliary caches to be used if not preconfigured */
+    private String defaultAuxValues;
+
+    /** The Singleton Instance */
+    private static CompositeCacheManager instance;
+
+    /** The prefix of relevant system properties */
+    private static final String SYSTEM_PROPERTY_KEY_PREFIX = "jcs";
+
+    /** Should we use system property substitutions. */
+    private static final boolean DEFAULT_USE_SYSTEM_PROPERTIES = true;
+
+    /** Once configured, you can force a reconfiguration of sorts. */
+    private static final boolean DEFAULT_FORCE_RECONFIGURATION = false;
+
+    /** Those waiting for notification of a shutdown. */
+    private final LinkedHashSet<IShutdownObserver> shutdownObservers = new LinkedHashSet<IShutdownObserver>();
+
+    /** The central background scheduler. */
+    private ScheduledExecutorService scheduledExecutor;
+
+    /** The central event queue. */
+    private IElementEventQueue elementEventQueue;
+
+    /** Shutdown hook thread instance */
+    private ShutdownHook shutdownHook;
+
+    /** Indicates whether the instance has been initialized. */
+    private boolean isInitialized = false;
+
+    /** Indicates whether configure has been called. */
+    private boolean isConfigured = false;
+
+    /** Indicates whether JMX bean has been registered. */
+    private boolean isJMXRegistered = false;
+
+    private String jmxName = JMX_OBJECT_NAME;
+
+    /**
+     * Gets the CacheHub instance. For backward compatibility, if this creates the instance it will
+     * attempt to configure it with the default configuration. If you want to configure from your
+     * own source, use {@link #getUnconfiguredInstance}and then call {@link #configure}
+     * <p>
+     * @return CompositeCacheManager
+     * @throws CacheException if the configuration cannot be loaded
+     */
+    public static synchronized CompositeCacheManager getInstance() throws CacheException
+    {
+        return getInstance( CacheConstants.DEFAULT_CONFIG );
+    }
+
+    /**
+     * Initializes the cache manager using the props file for the given name.
+     * <p>
+     * @param propsFilename
+     * @return CompositeCacheManager configured from the give propsFileName
+     * @throws CacheException if the configuration cannot be loaded
+     */
+    public static synchronized CompositeCacheManager getInstance( String propsFilename ) throws CacheException
+    {
+        if ( instance == null )
+        {
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "Instance is null, creating with config [" + propsFilename + "]" );
+            }
+
+            instance = createInstance();
+        }
+
+        if (!instance.isInitialized())
+        {
+            instance.initialize();
+        }
+
+        if (!instance.isConfigured())
+        {
+            instance.configure( propsFilename );
+        }
+
+        instance.incrementClients();
+
+        return instance;
+    }
+
+    /**
+     * Get a CacheHub instance which is not configured. If an instance already exists, it will be
+     * returned.
+     *<p>
+     * @return CompositeCacheManager
+     */
+    public static synchronized CompositeCacheManager getUnconfiguredInstance()
+    {
+        if ( instance == null )
+        {
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "Instance is null, returning unconfigured instance" );
+            }
+
+            instance = createInstance();
+        }
+
+        if (!instance.isInitialized())
+        {
+            instance.initialize();
+        }
+
+        instance.incrementClients();
+
+        return instance;
+    }
+
+    /**
+     * Simple factory method, must override in subclasses so getInstance creates / returns the
+     * correct object.
+     * <p>
+     * @return CompositeCacheManager
+     */
+    protected static CompositeCacheManager createInstance()
+    {
+        return new CompositeCacheManager();
+    }
+
+    /**
+     * Default constructor
+     */
+    protected CompositeCacheManager()
+    {
+        // empty
+    }
+
+    /** Creates a shutdown hook and starts the scheduler service */
+    protected void initialize()
+    {
+        if (!isInitialized)
+        {
+            this.shutdownHook = new ShutdownHook();
+            try
+            {
+                Runtime.getRuntime().addShutdownHook( shutdownHook );
+            }
+            catch ( AccessControlException e )
+            {
+                log.error( "Could not register shutdown hook.", e );
+            }
+
+            this.scheduledExecutor = Executors.newScheduledThreadPool(4,
+                    new DaemonThreadFactory("JCS-Scheduler-", Thread.MIN_PRIORITY));
+
+            // Register JMX bean
+            if (!isJMXRegistered && jmxName != null)
+            {
+                MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
+                JCSAdminBean adminBean = new JCSAdminBean(this);
+                try
+                {
+                    ObjectName jmxObjectName = new ObjectName(jmxName);
+                    mbs.registerMBean(adminBean, jmxObjectName);
+                    isJMXRegistered = true;
+                }
+                catch (Exception e)
+                {
+                    log.warn( "Could not register JMX bean.", e );
+                }
+            }
+
+            this.elementEventQueue = new ElementEventQueue();
+
+            isInitialized = true;
+        }
+    }
+
+    /**
+     * Get the element event queue
+     *
+     * @return the elementEventQueue
+     */
+    public IElementEventQueue getElementEventQueue()
+    {
+        return elementEventQueue;
+    }
+
+    /**
+     * Get the scheduler service
+     *
+     * @return the scheduledExecutor
+     */
+    @Override
+    public ScheduledExecutorService getScheduledExecutorService()
+    {
+        return scheduledExecutor;
+    }
+
+    /**
+     * Configure with default properties file
+     * @throws CacheException if the configuration cannot be loaded
+     */
+    public void configure() throws CacheException
+    {
+        configure( CacheConstants.DEFAULT_CONFIG );
+    }
+
+    /**
+     * Configure from specific properties file.
+     * <p>
+     * @param propFile Path <u>within classpath </u> to load configuration from
+     * @throws CacheException if the configuration cannot be loaded
+     */
+    public void configure( String propFile ) throws CacheException
+    {
+        log.info( "Creating cache manager from config file: " + propFile );
+
+        Properties props = new Properties();
+
+        InputStream is = getClass().getResourceAsStream( propFile );
+
+        if ( is != null )
+        {
+            try
+            {
+                props.load( is );
+
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "File [" + propFile + "] contained " + props.size() + " properties" );
+                }
+            }
+            catch ( IOException ex )
+            {
+                throw new CacheException("Failed to load properties for name [" + propFile + "]", ex);
+            }
+            finally
+            {
+                try
+                {
+                    is.close();
+                }
+                catch ( IOException ignore )
+                {
+                    // Ignored
+                }
+            }
+        }
+        else
+        {
+            throw new CacheException( "Failed to read configuration file [" + propFile + "]" );
+        }
+
+        configure( props );
+    }
+
+    /**
+     * Configure from properties object.
+     * <p>
+     * This method will call configure, instructing it to use system properties as a default.
+     * @param props
+     */
+    public void configure( Properties props )
+    {
+        configure( props, DEFAULT_USE_SYSTEM_PROPERTIES );
+    }
+
+    /**
+     * Configure from properties object, overriding with values from the system properties if
+     * instructed.
+     * <p>
+     * You can override a specific value by passing in a system property:
+     * <p>
+     * For example, you could override this value in the cache.ccf file by starting up your program
+     * with the argument: -Djcs.auxiliary.LTCP.attributes.TcpListenerPort=1111
+     * <p>
+     * @param props
+     * @param useSystemProperties -- if true, values starting with jcs will be put into the props
+     *            file prior to configuring the cache.
+     */
+    public void configure( Properties props, boolean useSystemProperties )
+    {
+        configure( props, useSystemProperties, DEFAULT_FORCE_RECONFIGURATION );
+    }
+
+    /**
+     * Configure from properties object, overriding with values from the system properties if
+     * instructed.
+     * <p>
+     * You can override a specific value by passing in a system property:
+     * <p>
+     * For example, you could override this value in the cache.ccf file by starting up your program
+     * with the argument: -Djcs.auxiliary.LTCP.attributes.TcpListenerPort=1111
+     * <p>
+     * @param props
+     * @param useSystemProperties -- if true, values starting with jcs will be put into the props
+     *            file prior to configuring the cache.
+     * @param forceReconfiguration - if the manager is already configured, we will try again. This
+     *            may not work properly.
+     */
+    public synchronized void configure( Properties props, boolean useSystemProperties, boolean forceReconfiguration )
+    {
+        if ( props == null )
+        {
+            log.error( "No properties found.  Please configure the cache correctly." );
+            return;
+        }
+
+        if ( isConfigured )
+        {
+            if ( !forceReconfiguration )
+            {
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "Configure called after the manager has been configured.  "
+                        + "Force reconfiguration is false.  Doing nothing" );
+                }
+                return;
+            }
+            else
+            {
+                if ( log.isInfoEnabled() )
+                {
+                    log.info( "Configure called after the manager has been configured.  "
+                        + "Force reconfiguration is true.  Reconfiguring as best we can." );
+                }
+            }
+        }
+        if ( useSystemProperties )
+        {
+            overrideWithSystemProperties( props );
+        }
+        doConfigure( props );
+    }
+
+    /**
+     * Any property values will be replaced with system property values that match the key.
+     * <p>
+     * TODO move to a utility.
+     * <p>
+     * @param props
+     */
+    private static void overrideWithSystemProperties( Properties props )
+    {
+        // override any setting with values from the system properties.
+        Properties sysProps = System.getProperties();
+        Set<Object> keys = sysProps.keySet();
+        Iterator<Object> keyIt = keys.iterator();
+        while ( keyIt.hasNext() )
+        {
+            String key = (String) keyIt.next();
+            if ( key.startsWith( SYSTEM_PROPERTY_KEY_PREFIX ) )
+            {
+                if ( log.isInfoEnabled() )
+                {
+                    log.info( "Using system property [[" + key + "] [" + sysProps.getProperty( key ) + "]]" );
+                }
+                props.put( key, sysProps.getProperty( key ) );
+            }
+        }
+    }
+
+    /**
+     * Configure the cache using the supplied properties.
+     * <p>
+     * @param props assumed not null
+     */
+    private void doConfigure( Properties props )
+    {
+        // We will expose this for managers that need raw properties.
+        this.configurationProperties = props;
+
+        // set the props value and then configure the ThreadPoolManager
+        ThreadPoolManager.setProps( props );
+        ThreadPoolManager poolMgr = ThreadPoolManager.getInstance();
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "ThreadPoolManager = " + poolMgr );
+        }
+
+        // configure the cache
+        CompositeCacheConfigurator configurator = new CompositeCacheConfigurator( this );
+
+        configurator.doConfigure( props );
+
+        isConfigured = true;
+    }
+
+    /**
+     * Gets the defaultCacheAttributes attribute of the CacheHub object
+     * <p>
+     * @return The defaultCacheAttributes value
+     */
+    public ICompositeCacheAttributes getDefaultCacheAttributes()
+    {
+        return this.defaultCacheAttr.copy();
+    }
+
+    /**
+     * Sets the defaultCacheAttributes attribute of the CacheHub object
+     * <p>
+     * @param icca The new defaultCacheAttributes value
+     */
+    public void setDefaultCacheAttributes( ICompositeCacheAttributes icca )
+    {
+        this.defaultCacheAttr = icca;
+    }
+
+    /**
+     * Sets the defaultElementAttributes attribute of the CacheHub object
+     * <p>
+     * @param iea The new defaultElementAttributes value
+     */
+    public void setDefaultElementAttributes( IElementAttributes iea )
+    {
+        this.defaultElementAttr = iea;
+    }
+
+    /**
+     * Gets the defaultElementAttributes attribute of the CacheHub object
+     * <p>
+     * @return The defaultElementAttributes value
+     */
+    public IElementAttributes getDefaultElementAttributes()
+    {
+        return this.defaultElementAttr.copy();
+    }
+
+    /**
+     * Gets the cache attribute of the CacheHub object
+     * <p>
+     * @param cacheName
+     * @return CompositeCache -- the cache region controller
+     */
+    @Override
+    public <K, V> CompositeCache<K, V>  getCache( String cacheName )
+    {
+        return getCache( cacheName, this.defaultCacheAttr.copy() );
+    }
+
+    /**
+     * Gets the cache attribute of the CacheHub object
+     * <p>
+     * @param cacheName
+     * @param cattr
+     * @return CompositeCache
+     */
+    public <K, V> CompositeCache<K, V> getCache( String cacheName, ICompositeCacheAttributes cattr )
+    {
+        cattr.setCacheName( cacheName );
+        return getCache( cattr, this.defaultElementAttr );
+    }
+
+    /**
+     * Gets the cache attribute of the CacheHub object
+     * <p>
+     * @param cacheName
+     * @param cattr
+     * @param attr
+     * @return CompositeCache
+     */
+    public <K, V> CompositeCache<K, V>  getCache( String cacheName, ICompositeCacheAttributes cattr, IElementAttributes attr )
+    {
+        cattr.setCacheName( cacheName );
+        return getCache( cattr, attr );
+    }
+
+    /**
+     * Gets the cache attribute of the CacheHub object
+     * <p>
+     * @param cattr
+     * @return CompositeCache
+     */
+    public <K, V> CompositeCache<K, V>  getCache( ICompositeCacheAttributes cattr )
+    {
+        return getCache( cattr, this.defaultElementAttr );
+    }
+
+    /**
+     * If the cache has already been created, then the CacheAttributes and the element Attributes
+     * will be ignored. Currently there is no overriding the CacheAttributes once it is set up. You
+     * can change the default ElementAttributes for a region later.
+     * <p>
+     * Overriding the default elemental attributes will require changing the way the attributes are
+     * assigned to elements. Get cache creates a cache with defaults if none are specified. We might
+     * want to create separate method for creating/getting. . .
+     * <p>
+     * @param cattr
+     * @param attr
+     * @return CompositeCache
+     */
+    @SuppressWarnings("unchecked") // Need to cast because of common map for all caches
+    public <K, V> CompositeCache<K, V>  getCache( ICompositeCacheAttributes cattr, IElementAttributes attr )
+    {
+        CompositeCache<K, V> cache;
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "attr = " + attr );
+        }
+
+        synchronized ( caches )
+        {
+            cache = (CompositeCache<K, V>) caches.get( cattr.getCacheName() );
+            if ( cache == null )
+            {
+                cattr.setCacheName( cattr.getCacheName() );
+
+                CompositeCacheConfigurator configurator = new CompositeCacheConfigurator( this );
+
+                cache = configurator.parseRegion( this.getConfigurationProperties(), cattr.getCacheName(),
+                                                  this.defaultAuxValues, cattr );
+
+                caches.put( cattr.getCacheName(), cache );
+            }
+        }
+
+        return cache;
+    }
+
+    /**
+     * @param name
+     */
+    public void freeCache( String name )
+    {
+        freeCache( name, false );
+    }
+
+    /**
+     * @param name
+     * @param fromRemote
+     */
+    public void freeCache( String name, boolean fromRemote )
+    {
+        CompositeCache<?, ?> cache = (CompositeCache<?, ?>) caches.remove( name );
+
+        if ( cache != null )
+        {
+            cache.dispose( fromRemote );
+        }
+    }
+
+    /**
+     * Calls freeCache on all regions
+     */
+    public void shutDown()
+    {
+        synchronized (CompositeCacheManager.class)
+        {
+            // shutdown element event queue
+            this.elementEventQueue.dispose();
+
+            // shutdown all scheduled jobs
+            this.scheduledExecutor.shutdownNow();
+
+            // shutdown all thread pools
+            ThreadPoolManager.dispose();
+
+            // notify any observers
+            synchronized ( shutdownObservers )
+            {
+                // We don't need to worry about locking the set.
+                // since this is a shutdown command, nor do we need
+                // to queue these up.
+                for (IShutdownObserver observer : shutdownObservers)
+                {
+                    observer.shutdown();
+                }
+            }
+
+            // Unregister JMX bean
+            if (isJMXRegistered)
+            {
+                MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
+                try
+                {
+                    ObjectName jmxObjectName = new ObjectName(jmxName);
+                    mbs.unregisterMBean(jmxObjectName);
+                }
+                catch (Exception e)
+                {
+                    log.warn( "Could not unregister JMX bean.", e );
+                }
+
+                isJMXRegistered = false;
+            }
+
+            // do the traditional shutdown of the regions.
+            for (String name : getCacheNames())
+            {
+                freeCache( name );
+            }
+
+            // shut down factories
+            for (AuxiliaryCacheFactory factory : auxiliaryFactoryRegistry.values())
+            {
+                factory.dispose();
+            }
+
+            auxiliaryAttributeRegistry.clear();
+            auxiliaryFactoryRegistry.clear();
+
+            if (shutdownHook != null)
+            {
+                try
+                {
+                    Runtime.getRuntime().removeShutdownHook(shutdownHook);
+                }
+                catch (IllegalStateException e)
+                {
+                    // May fail if the JVM is already shutting down
+                }
+
+                this.shutdownHook = null;
+            }
+
+            isConfigured = false;
+            isInitialized = false;
+        }
+    }
+
+    /** */
+    private void incrementClients()
+    {
+        clients++;
+    }
+
+    /** */
+    public void release()
+    {
+        release( false );
+    }
+
+    /**
+     * @param fromRemote
+     */
+    private void release( boolean fromRemote )
+    {
+        synchronized ( CompositeCacheManager.class )
+        {
+            // Wait until called by the last client
+            if ( --clients > 0 )
+            {
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "Release called, but " + clients + " remain" );
+                    return;
+                }
+            }
+
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Last client called release. There are " + caches.size() + " caches which will be disposed" );
+            }
+
+            for (ICache<?, ?> c : caches.values() )
+            {
+                CompositeCache<?, ?> cache = (CompositeCache<?, ?>) c;
+
+                if ( cache != null )
+                {
+                    cache.dispose( fromRemote );
+                }
+            }
+        }
+    }
+
+    /**
+     * Returns a list of the current cache names.
+     * @return String[]
+     */
+    public String[] getCacheNames()
+    {
+        return caches.keySet().toArray(new String[caches.size()]);
+    }
+
+    /**
+     * @return ICacheType.CACHE_HUB
+     */
+    public CacheType getCacheType()
+    {
+        return CacheType.CACHE_HUB;
+    }
+
+    /**
+     * @return ICompositeCacheAttributes
+     */
+    public ICompositeCacheAttributes getDefaultCattr()
+    {
+        return this.defaultCacheAttr;
+    }
+
+    /**
+     * @param auxFac
+     */
+    public void registryFacPut( AuxiliaryCacheFactory auxFac )
+    {
+        auxiliaryFactoryRegistry.put( auxFac.getName(), auxFac );
+    }
+
+    /**
+     * @param name
+     * @return AuxiliaryCacheFactory
+     */
+    public AuxiliaryCacheFactory registryFacGet( String name )
+    {
+        return auxiliaryFactoryRegistry.get( name );
+    }
+
+    /**
+     * @param auxAttr
+     */
+    public void registryAttrPut( AuxiliaryCacheAttributes auxAttr )
+    {
+        auxiliaryAttributeRegistry.put( auxAttr.getName(), auxAttr );
+    }
+
+    /**
+     * @param name
+     * @return AuxiliaryCacheAttributes
+     */
+    public AuxiliaryCacheAttributes registryAttrGet( String name )
+    {
+        return auxiliaryAttributeRegistry.get( name );
+    }
+
+    /**
+     * Add a cache to the map of registered caches
+     *
+     * @param cacheName the region name
+     * @param cache the cache instance
+     */
+    public void addCache(String cacheName, ICache<?, ?> cache)
+    {
+        caches.put(cacheName, cache);
+    }
+
+    /**
+     * Add a cache to the map of registered auxiliary caches
+     *
+     * @param auxName the auxiliary name
+     * @param cacheName the region name
+     * @param cache the cache instance
+     */
+    public void addAuxiliaryCache(String auxName, String cacheName, AuxiliaryCache<?, ?> cache)
+    {
+        String key = String.format("aux.%s.region.%s", auxName, cacheName);
+        auxiliaryCaches.put(key, cache);
+    }
+
+    /**
+     * Get a cache from the map of registered auxiliary caches
+     *
+     * @param auxName the auxiliary name
+     * @param cacheName the region name
+     *
+     * @return the cache instance
+     */
+    @Override
+    @SuppressWarnings("unchecked") // because of common map for all auxiliary caches
+    public <K, V> AuxiliaryCache<K, V> getAuxiliaryCache(String auxName, String cacheName)
+    {
+        String key = String.format("aux.%s.region.%s", auxName, cacheName);
+        return (AuxiliaryCache<K, V>) auxiliaryCaches.get(key);
+    }
+
+    /**
+     * @param defaultAuxValues the defaultAuxValues to set
+     */
+    public void setDefaultAuxValues(String defaultAuxValues)
+    {
+        this.defaultAuxValues = defaultAuxValues;
+    }
+
+    /**
+     * Gets stats for debugging. This calls gets statistics and then puts all the results in a
+     * string. This returns data for all regions.
+     * <p>
+     * @return String
+     */
+    @Override
+    public String getStats()
+    {
+        ICacheStats[] stats = getStatistics();
+        if ( stats == null )
+        {
+            return "NONE";
+        }
+
+        // force the array elements into a string.
+        StringBuilder buf = new StringBuilder();
+        int statsLen = stats.length;
+        for ( int i = 0; i < statsLen; i++ )
+        {
+            buf.append( "\n---------------------------\n" );
+            buf.append( stats[i] );
+        }
+        return buf.toString();
+    }
+
+    /**
+     * This returns data gathered for all regions and all the auxiliaries they currently uses.
+     * <p>
+     * @return ICacheStats[]
+     */
+    public ICacheStats[] getStatistics()
+    {
+        ArrayList<ICacheStats> cacheStats = new ArrayList<ICacheStats>();
+        for (ICache<?, ?> c :  caches.values())
+        {
+            CompositeCache<?, ?> cache = (CompositeCache<?, ?>) c;
+            if ( cache != null )
+            {
+                cacheStats.add( cache.getStatistics() );
+            }
+        }
+        ICacheStats[] stats = cacheStats.toArray( new CacheStats[0] );
+        return stats;
+    }
+
+    /**
+     * Perhaps the composite cache itself should be the observable object. It doesn't make much of a
+     * difference. There are some problems with region by region shutdown. Some auxiliaries are
+     * global. They will need to track when every region has shutdown before doing things like
+     * closing the socket with a lateral.
+     * <p>
+     * @param observer
+     */
+    @Override
+    public void registerShutdownObserver( IShutdownObserver observer )
+    {
+        // synchronized to take care of iteration safety
+        // during shutdown.
+        synchronized ( shutdownObservers )
+        {
+            // the set will take care of duplication protection
+            shutdownObservers.add( observer );
+        }
+    }
+
+    /**
+     * @param observer
+     */
+    @Override
+    public void deregisterShutdownObserver( IShutdownObserver observer )
+    {
+        synchronized ( shutdownObservers )
+        {
+            shutdownObservers.remove( observer );
+        }
+    }
+
+    /**
+     * This is exposed so other manager can get access to the props.
+     * <p>
+     * @param props
+     */
+    void setConfigurationProperties( Properties props )
+    {
+        this.configurationProperties = props;
+    }
+
+    /**
+     * This is exposed so other manager can get access to the props.
+     * <p>
+     * @return the configurationProperties
+     */
+    @Override
+    public Properties getConfigurationProperties()
+    {
+        return configurationProperties;
+    }
+
+    /**
+     * @return the isInitialized
+     */
+    public boolean isInitialized()
+    {
+        return isInitialized;
+    }
+
+    /**
+     * @return the isConfigured
+     */
+    public boolean isConfigured()
+    {
+        return isConfigured;
+    }
+
+    public void setJmxName(final String name) {
+        if (isJMXRegistered)
+        {
+            throw new IllegalStateException("Too late, MBean registration is done");
+        }
+        jmxName = name;
+    }
+
+    /**
+     * Called on shutdown. This gives use a chance to store the keys and to optimize even if the
+     * cache manager's shutdown method was not called manually.
+     */
+    class ShutdownHook
+        extends Thread
+    {
+        /**
+         * This will persist the keys on shutdown.
+         * <p>
+         * @see java.lang.Thread#run()
+         */
+        @SuppressWarnings("synthetic-access")
+        @Override
+        public void run()
+        {
+            if ( isInitialized() )
+            {
+                log.info( "Shutdown hook activated.  Shutdown was not called.  Shutting down JCS." );
+                shutDown();
+            }
+        }
+    }
+}
diff --git a/src/org/apache/commons/jcs/engine/control/event/ElementEvent.java b/src/org/apache/commons/jcs/engine/control/event/ElementEvent.java
new file mode 100644
index 0000000..e25a603
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/control/event/ElementEvent.java
@@ -0,0 +1,74 @@
+package org.apache.commons.jcs.engine.control.event;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.EventObject;
+
+import org.apache.commons.jcs.engine.control.event.behavior.ElementEventType;
+import org.apache.commons.jcs.engine.control.event.behavior.IElementEvent;
+
+/**
+ * Element events will trigger the creation of Element Event objects. This is a wrapper around the
+ * cache element that indicates the event triggered.
+ */
+public class ElementEvent<T>
+    extends EventObject
+    implements IElementEvent<T>
+{
+    /** Don't change */
+    private static final long serialVersionUID = -5364117411457467056L;
+
+    /** default event code */
+    private ElementEventType elementEvent = ElementEventType.EXCEEDED_MAXLIFE_BACKGROUND;
+
+    /**
+     * Constructor for the ElementEvent object
+     * <p>
+     * @param source The Cache Element
+     * @param elementEvent The event id defined in the enum class.
+     */
+    public ElementEvent( T source, ElementEventType elementEvent )
+    {
+        super( source );
+        this.elementEvent = elementEvent;
+    }
+
+    /**
+     * Gets the elementEvent attribute of the ElementEvent object
+     * <p>
+     * @return The elementEvent value. The List of values is defined in ElementEventType.
+     */
+    @Override
+    public ElementEventType getElementEvent()
+    {
+        return elementEvent;
+    }
+
+    /**
+     * @return the source of the event.
+     */
+    @SuppressWarnings("unchecked") // Generified
+    @Override
+    public T getSource()
+    {
+        return (T) super.getSource();
+
+    }
+}
diff --git a/src/org/apache/commons/jcs/engine/control/event/ElementEventQueue.java b/src/org/apache/commons/jcs/engine/control/event/ElementEventQueue.java
new file mode 100644
index 0000000..1a6e9bd
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/control/event/ElementEventQueue.java
@@ -0,0 +1,203 @@
+package org.apache.commons.jcs.engine.control.event;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.commons.jcs.engine.control.event.behavior.IElementEvent;
+import org.apache.commons.jcs.engine.control.event.behavior.IElementEventHandler;
+import org.apache.commons.jcs.engine.control.event.behavior.IElementEventQueue;
+import org.apache.commons.jcs.utils.threadpool.DaemonThreadFactory;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * An event queue is used to propagate ordered cache events to one and only one target listener.
+ */
+public class ElementEventQueue
+    implements IElementEventQueue
+{
+    private static final String THREAD_PREFIX = "JCS-ElementEventQueue-";
+
+    /** The logger */
+    private static final Log log = LogFactory.getLog( ElementEventQueue.class );
+
+    /** shutdown or not */
+    private boolean destroyed = false;
+
+    /** The event queue */
+    private LinkedBlockingQueue<Runnable> queue;
+
+    /** The worker thread pool. */
+    private ThreadPoolExecutor queueProcessor;
+
+    /**
+     * Constructor for the ElementEventQueue object
+     */
+    public ElementEventQueue()
+    {
+        queue = new LinkedBlockingQueue<Runnable>();
+        queueProcessor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS,
+                queue, new DaemonThreadFactory(THREAD_PREFIX));
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Constructed: " + this );
+        }
+    }
+
+    /**
+     * Dispose queue
+     */
+    @Override
+    public void dispose()
+    {
+        if ( !destroyed )
+        {
+            destroyed = true;
+
+            // synchronize on queue so the thread will not wait forever,
+            // and then interrupt the QueueProcessor
+            queueProcessor.shutdownNow();
+            queueProcessor = null;
+
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "Element event queue destroyed: " + this );
+            }
+        }
+    }
+
+    /**
+     * Adds an ElementEvent to be handled
+     * @param hand The IElementEventHandler
+     * @param event The IElementEventHandler IElementEvent event
+     * @throws IOException
+     */
+    @Override
+    public <T> void addElementEvent( IElementEventHandler hand, IElementEvent<T> event )
+        throws IOException
+    {
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Adding Event Handler to QUEUE, !destroyed = " + !destroyed );
+        }
+
+        if (destroyed)
+        {
+            log.warn("Event submitted to disposed element event queue " + event);
+        }
+        else
+        {
+            ElementEventRunner runner = new ElementEventRunner( hand, event );
+
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "runner = " + runner );
+            }
+
+            queueProcessor.execute(runner);
+        }
+    }
+
+    // /////////////////////////// Inner classes /////////////////////////////
+
+    /**
+     * Retries before declaring failure.
+     */
+    protected abstract class AbstractElementEventRunner
+        implements Runnable
+    {
+        /**
+         * Main processing method for the AbstractElementEvent object
+         */
+        @SuppressWarnings("synthetic-access")
+        @Override
+        public void run()
+        {
+            try
+            {
+                doRun();
+                // happy and done.
+            }
+            catch ( IOException e )
+            {
+                // Too bad. The handler has problems.
+                log.warn( "Giving up element event handling " + ElementEventQueue.this, e );
+            }
+        }
+
+        /**
+         * This will do the work or trigger the work to be done.
+         * <p>
+         * @throws IOException
+         */
+        protected abstract void doRun()
+            throws IOException;
+    }
+
+    /**
+     * ElementEventRunner.
+     */
+    private class ElementEventRunner
+        extends AbstractElementEventRunner
+    {
+        /** the handler */
+        private final IElementEventHandler hand;
+
+        /** event */
+        private final IElementEvent<?> event;
+
+        /**
+         * Constructor for the PutEvent object.
+         * <p>
+         * @param hand
+         * @param event
+         * @throws IOException
+         */
+        @SuppressWarnings("synthetic-access")
+        ElementEventRunner( IElementEventHandler hand, IElementEvent<?> event )
+            throws IOException
+        {
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Constructing " + this );
+            }
+            this.hand = hand;
+            this.event = event;
+        }
+
+        /**
+         * Tells the handler to handle the event.
+         * <p>
+         * @throws IOException
+         */
+        @Override
+        protected void doRun()
+            throws IOException
+        {
+            hand.handleElementEvent( event );
+        }
+    }
+}
diff --git a/src/org/apache/commons/jcs/engine/control/event/behavior/ElementEventType.java b/src/org/apache/commons/jcs/engine/control/event/behavior/ElementEventType.java
new file mode 100644
index 0000000..52b0fe8
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/control/event/behavior/ElementEventType.java
@@ -0,0 +1,54 @@
+package org.apache.commons.jcs.engine.control.event.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * This describes the events that an item can encounter.
+ */
+public enum ElementEventType
+{
+    /** Background expiration */
+    EXCEEDED_MAXLIFE_BACKGROUND,
+
+    /*** Expiration discovered on request */
+    EXCEEDED_MAXLIFE_ONREQUEST,
+
+    /** Background expiration */
+    EXCEEDED_IDLETIME_BACKGROUND,
+
+    /** Expiration discovered on request */
+    EXCEEDED_IDLETIME_ONREQUEST,
+
+    /** Moving from memory to disk (what if no disk?) */
+    SPOOLED_DISK_AVAILABLE,
+
+    /** Moving from memory to disk (what if no disk?) */
+    SPOOLED_DISK_NOT_AVAILABLE,
+
+    /** Moving from memory to disk, but item is not spoolable */
+    SPOOLED_NOT_ALLOWED //,
+
+    /** Removed actively by a remove command. (Could distinguish between local and remote) */
+    //REMOVED,
+    /**
+     * Element was requested from cache. Not sure we ever want to implement this.
+     */
+    //GET
+}
diff --git a/src/org/apache/commons/jcs/engine/control/event/behavior/IElementEvent.java b/src/org/apache/commons/jcs/engine/control/event/behavior/IElementEvent.java
new file mode 100644
index 0000000..74b9c7f
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/control/event/behavior/IElementEvent.java
@@ -0,0 +1,42 @@
+package org.apache.commons.jcs.engine.control.event.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.Serializable;
+
+/**
+ * Defines how an element event object should behave.
+ */
+public interface IElementEvent<T>
+    extends Serializable
+{
+    /**
+     * Gets the elementEvent attribute of the IElementEvent object. This code is Contained in the
+     * IElememtEventConstants class.
+     *<p>
+     * @return The elementEvent value
+     */
+    ElementEventType getElementEvent();
+
+    /**
+     * @return the source of the event.
+     */
+    T getSource();
+}
diff --git a/src/org/apache/commons/jcs/engine/control/event/behavior/IElementEventHandler.java b/src/org/apache/commons/jcs/engine/control/event/behavior/IElementEventHandler.java
new file mode 100644
index 0000000..3aed8b7
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/control/event/behavior/IElementEventHandler.java
@@ -0,0 +1,40 @@
+package org.apache.commons.jcs.engine.control.event.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * This interface defines the behavior for event handler. Event handlers are
+ * transient. They are not replicated and are not written to disk.
+ * <p>
+ * If you want an event handler by default for all elements in a region, then
+ * you can add it to the default element attributes. This way it will get created
+ * whenever an item gets put into the cache.
+ *
+ */
+public interface IElementEventHandler
+{
+    /**
+     * Handle events for this element. The events are typed.
+     *
+     * @param event
+     *            The event created by the cache.
+     */
+    <T> void handleElementEvent( IElementEvent<T> event );
+}
diff --git a/src/org/apache/commons/jcs/engine/control/event/behavior/IElementEventQueue.java b/src/org/apache/commons/jcs/engine/control/event/behavior/IElementEventQueue.java
new file mode 100644
index 0000000..fc5f84e
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/control/event/behavior/IElementEventQueue.java
@@ -0,0 +1,48 @@
+package org.apache.commons.jcs.engine.control.event.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+
+/**
+ * Interface for an element event queue. An event queue is used to propagate
+ * ordered element events in one region.
+ *
+ */
+public interface IElementEventQueue
+{
+    /**
+     * Adds an ElementEvent to be handled
+     *
+     * @param hand
+     *            The IElementEventHandler
+     * @param event
+     *            The IElementEventHandler IElementEvent event
+     * @throws IOException
+     */
+    <T> void addElementEvent( IElementEventHandler hand, IElementEvent<T> event )
+        throws IOException;
+
+    /**
+     * Destroy the event queue
+     *
+     */
+    void dispose();
+}
diff --git a/src/org/apache/commons/jcs/engine/control/group/GroupAttrName.java b/src/org/apache/commons/jcs/engine/control/group/GroupAttrName.java
new file mode 100644
index 0000000..8da08eb
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/control/group/GroupAttrName.java
@@ -0,0 +1,117 @@
+package org.apache.commons.jcs.engine.control.group;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.Serializable;
+
+/**
+ * Description of the Class
+ */
+public class GroupAttrName<T>
+    implements Serializable
+{
+    /** Don't change */
+    private static final long serialVersionUID = 1586079686300744198L;
+
+    /** Description of the Field */
+    public final GroupId groupId;
+
+    /** the name of the attribute */
+    public final T attrName;
+
+    /** Cached toString value */
+    private String toString;
+
+    /**
+     * Constructor for the GroupAttrName object
+     * @param groupId
+     * @param attrName
+     */
+    public GroupAttrName( GroupId groupId, T attrName )
+    {
+        this.groupId = groupId;
+        this.attrName = attrName;
+
+        if ( groupId == null )
+        {
+            throw new IllegalArgumentException( "groupId must not be null." );
+        }
+    }
+
+    /**
+     * Tests object equality.
+     * @param obj The <code>GroupAttrName</code> instance to test.
+     * @return Whether equal.
+     */
+    @Override
+    public boolean equals( Object obj )
+    {
+        if ( obj == null || !( obj instanceof GroupAttrName ) )
+        {
+            return false;
+        }
+        GroupAttrName<?> to = (GroupAttrName<?>) obj;
+
+        if (groupId.equals( to.groupId ))
+        {
+            if (attrName == null && to.attrName == null)
+            {
+                return true;
+            }
+            else if (attrName == null || to.attrName == null)
+            {
+                return false;
+            }
+
+            return  attrName.equals( to.attrName );
+        }
+
+        return false;
+    }
+
+    /**
+     * @return A hash code based on the hash code of @ #groupid} and {@link #attrName}.
+     */
+    @Override
+    public int hashCode()
+    {
+        if (attrName == null)
+        {
+            return groupId.hashCode();
+        }
+
+        return groupId.hashCode() ^ attrName.hashCode();
+    }
+
+    /**
+     * @return the cached value.
+     */
+    @Override
+    public String toString()
+    {
+        if ( toString == null )
+        {
+            toString = "[GAN: groupId=" + groupId + ", attrName=" + attrName + "]";
+        }
+
+        return toString;
+    }
+
+}
diff --git a/src/org/apache/commons/jcs/engine/control/group/GroupId.java b/src/org/apache/commons/jcs/engine/control/group/GroupId.java
new file mode 100644
index 0000000..7e243d5
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/control/group/GroupId.java
@@ -0,0 +1,103 @@
+package org.apache.commons.jcs.engine.control.group;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.Serializable;
+
+/**
+ * Used to avoid name conflict when group cache items are mixed with non-group cache items in the
+ * same cache.
+ */
+public class GroupId
+    implements Serializable
+{
+    /** Don't change. */
+    private static final long serialVersionUID = 4626368486444860133L;
+
+    /** Description of the Field */
+    public final String groupName;
+
+    /** the name of the region. */
+    public final String cacheName;
+
+    /** Cached toString value. */
+    private String toString;
+
+    /**
+     * Constructor for the GroupId object
+     * <p>
+     * @param cacheName
+     * @param groupName
+     */
+    public GroupId( String cacheName, String groupName )
+    {
+        this.cacheName = cacheName;
+        this.groupName = groupName;
+
+        if ( cacheName == null )
+        {
+            throw new IllegalArgumentException( "cacheName must not be null." );
+        }
+        if ( groupName == null )
+        {
+            throw new IllegalArgumentException( "groupName must not be null." );
+        }
+    }
+
+    /**
+     * @param obj
+     * @return cacheName.equals( g.cacheName ) && groupName.equals( g.groupName );
+     */
+    @Override
+    public boolean equals( Object obj )
+    {
+        if ( obj == null || !( obj instanceof GroupId ) )
+        {
+            return false;
+        }
+        GroupId g = (GroupId) obj;
+        return cacheName.equals( g.cacheName ) && groupName.equals( g.groupName );
+    }
+
+    /**
+     * @return cacheName.hashCode() + groupName.hashCode();
+     */
+    @Override
+    public int hashCode()
+    {
+        return cacheName.hashCode() + groupName.hashCode();
+    }
+
+    /**
+     * Caches the value.
+     * <p>
+     * @return debugging string.
+     */
+    @Override
+    public String toString()
+    {
+        if ( toString == null )
+        {
+            toString = "[groupId=" + cacheName + ", " + groupName + ']';
+        }
+
+        return toString;
+    }
+}
diff --git a/src/org/apache/commons/jcs/engine/control/package.html b/src/org/apache/commons/jcs/engine/control/package.html
new file mode 100644
index 0000000..82b9a4c
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/control/package.html
@@ -0,0 +1,25 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<html>
+  <head>
+  </head>
+  <body>
+      The primary cache classes and the hub.
+  </body>
+</html>
diff --git a/src/org/apache/commons/jcs/engine/logging/CacheEvent.java b/src/org/apache/commons/jcs/engine/logging/CacheEvent.java
new file mode 100644
index 0000000..c07ecac
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/logging/CacheEvent.java
@@ -0,0 +1,177 @@
+package org.apache.commons.jcs.engine.logging;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.logging.behavior.ICacheEvent;
+
+import java.util.Date;
+
+/** It's returned from create and passed into log. */
+public class CacheEvent<K>
+    implements ICacheEvent<K>
+{
+    /** Don't change. */
+    private static final long serialVersionUID = -5913139566421714330L;
+
+    /** The time at which this object was created. */
+    private final long createTime = System.currentTimeMillis();
+
+    /** The auxiliary or other source of the event. */
+    private String source;
+
+    /** The cache region */
+    private String region;
+
+    /** The event name: update, get, remove, etc. */
+    private String eventName;
+
+    /** disk location, ip, etc. */
+    private String optionalDetails;
+
+    /** The key that was put or retrieved. */
+    private K key;
+
+    /**
+     * @param source the source to set
+     */
+    @Override
+	public void setSource( String source )
+    {
+        this.source = source;
+    }
+
+    /**
+     * @return the source
+     */
+    @Override
+	public String getSource()
+    {
+        return source;
+    }
+
+    /**
+     * @param region the region to set
+     */
+    @Override
+	public void setRegion( String region )
+    {
+        this.region = region;
+    }
+
+    /**
+     * @return the region
+     */
+    @Override
+	public String getRegion()
+    {
+        return region;
+    }
+
+    /**
+     * @param eventName the eventName to set
+     */
+    @Override
+	public void setEventName( String eventName )
+    {
+        this.eventName = eventName;
+    }
+
+    /**
+     * @return the eventName
+     */
+    @Override
+	public String getEventName()
+    {
+        return eventName;
+    }
+
+    /**
+     * @param optionalDetails the optionalDetails to set
+     */
+    @Override
+	public void setOptionalDetails( String optionalDetails )
+    {
+        this.optionalDetails = optionalDetails;
+    }
+
+    /**
+     * @return the optionalDetails
+     */
+    @Override
+	public String getOptionalDetails()
+    {
+        return optionalDetails;
+    }
+
+    /**
+     * @param key the key to set
+     */
+    @Override
+	public void setKey( K key )
+    {
+        this.key = key;
+    }
+
+    /**
+     * @return the key
+     */
+    @Override
+	public K getKey()
+    {
+        return key;
+    }
+
+    /**
+     * The time at which this object was created.
+     * <p>
+     * @return the createTime
+     */
+    public long getCreateTime()
+    {
+        return createTime;
+    }
+
+    /**
+     * @return reflection toString
+     */
+    @Override
+    public String toString()
+    {
+    	StringBuilder sb = new StringBuilder();
+    	sb.append("CacheEvent: ").append(eventName).append(" Created: ").append(new Date(createTime));
+    	if (source != null)
+    	{
+        	sb.append(" Source: ").append(source);
+    	}
+    	if (region != null)
+    	{
+        	sb.append(" Region: ").append(region);
+    	}
+    	if (key != null)
+    	{
+        	sb.append(" Key: ").append(key);
+    	}
+    	if (optionalDetails != null)
+    	{
+        	sb.append(" Details: ").append(optionalDetails);
+    	}
+        return sb.toString();
+    }
+}
diff --git a/src/org/apache/commons/jcs/engine/logging/CacheEventLoggerDebugLogger.java b/src/org/apache/commons/jcs/engine/logging/CacheEventLoggerDebugLogger.java
new file mode 100644
index 0000000..e38a9c5
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/logging/CacheEventLoggerDebugLogger.java
@@ -0,0 +1,113 @@
+package org.apache.commons.jcs.engine.logging;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.logging.behavior.ICacheEvent;
+import org.apache.commons.jcs.engine.logging.behavior.ICacheEventLogger;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * This implementation simple logs to a commons logger at debug level, for all events. It's mainly
+ * for testing. It isn't very useful otherwise.
+ */
+public class CacheEventLoggerDebugLogger
+    implements ICacheEventLogger
+{
+    /** This is the name of the category. */
+    private String logCategoryName = CacheEventLoggerDebugLogger.class.getName();
+
+    /** The logger. This is recreated on set logCategoryName */
+    private Log log = LogFactory.getLog( logCategoryName );
+
+    /**
+     * @param source
+     * @param region
+     * @param eventName
+     * @param optionalDetails
+     * @param key
+     * @return ICacheEvent
+     */
+    @Override
+    public <T> ICacheEvent<T> createICacheEvent( String source, String region, String eventName,
+            String optionalDetails, T key )
+    {
+        ICacheEvent<T> event = new CacheEvent<T>();
+        event.setSource( source );
+        event.setRegion( region );
+        event.setEventName( eventName );
+        event.setOptionalDetails( optionalDetails );
+        event.setKey( key );
+
+        return event;
+    }
+
+    /**
+     * @param source
+     * @param eventName
+     * @param optionalDetails
+     */
+    @Override
+    public void logApplicationEvent( String source, String eventName, String optionalDetails )
+    {
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( source + " | " + eventName + " | " + optionalDetails );
+        }
+    }
+
+    /**
+     * @param source
+     * @param eventName
+     * @param errorMessage
+     */
+    @Override
+    public void logError( String source, String eventName, String errorMessage )
+    {
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( source + " | " + eventName + " | " + errorMessage );
+        }
+    }
+
+    /**
+     * @param event
+     */
+    @Override
+    public <T> void logICacheEvent( ICacheEvent<T> event )
+    {
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( event );
+        }
+    }
+
+    /**
+     * @param logCategoryName
+     */
+    public synchronized void setLogCategoryName( String logCategoryName )
+    {
+        if ( logCategoryName != null && !logCategoryName.equals( this.logCategoryName ) )
+        {
+            this.logCategoryName = logCategoryName;
+            log = LogFactory.getLog( logCategoryName );
+        }
+    }
+}
diff --git a/src/org/apache/commons/jcs/engine/logging/behavior/ICacheEvent.java b/src/org/apache/commons/jcs/engine/logging/behavior/ICacheEvent.java
new file mode 100644
index 0000000..82238f2
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/logging/behavior/ICacheEvent.java
@@ -0,0 +1,77 @@
+package org.apache.commons.jcs.engine.logging.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.Serializable;
+
+/** Defines the common fields required by a cache event. */
+public interface ICacheEvent<K>
+    extends Serializable
+{
+    /**
+     * @param source the source to set
+     */
+    void setSource( String source );
+
+    /**
+     * @return the source
+     */
+    String getSource();
+
+    /**
+     * @param region the region to set
+     */
+    void setRegion( String region );
+
+    /**
+     * @return the region
+     */
+    String getRegion();
+
+    /**
+     * @param eventName the eventName to set
+     */
+    void setEventName( String eventName );
+
+    /**
+     * @return the eventName
+     */
+    String getEventName();
+
+    /**
+     * @param optionalDetails the optionalDetails to set
+     */
+    void setOptionalDetails( String optionalDetails );
+
+    /**
+     * @return the optionalDetails
+     */
+    String getOptionalDetails();
+
+    /**
+     * @param key the key to set
+     */
+    void setKey( K key );
+
+    /**
+     * @return the key
+     */
+    K getKey();
+}
diff --git a/src/org/apache/commons/jcs/engine/logging/behavior/ICacheEventLogger.java b/src/org/apache/commons/jcs/engine/logging/behavior/ICacheEventLogger.java
new file mode 100644
index 0000000..986247b
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/logging/behavior/ICacheEventLogger.java
@@ -0,0 +1,91 @@
+package org.apache.commons.jcs.engine.logging.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * This defines the behavior for event logging. Auxiliaries will send events to injected event
+ * loggers.
+ * <p>
+ * In general all ICache interface methods should call the logger if one is configured. This will be
+ * done on an ad hoc basis for now. Various auxiliaries may have additional events.
+ */
+public interface ICacheEventLogger
+{
+    /** ICache update */
+    String UPDATE_EVENT = "update";
+
+    /** ICache get */
+    String GET_EVENT = "get";
+
+    /** ICache getMultiple */
+    String GETMULTIPLE_EVENT = "getMultiple";
+
+    /** ICache getMatching */
+    String GETMATCHING_EVENT = "getMatching";
+
+    /** ICache remove */
+    String REMOVE_EVENT = "remove";
+
+    /** ICache removeAll */
+    String REMOVEALL_EVENT = "removeAll";
+
+    /** ICache dispose */
+    String DISPOSE_EVENT = "dispose";
+
+    /** ICache enqueue. The time in the queue. */
+    //String ENQUEUE_EVENT = "enqueue";
+    /**
+     * Creates an event.
+     * <p>
+     * @param source - e.g. RemoteCacheServer
+     * @param region - the name of the region
+     * @param eventName - e.g. update, get, put, remove
+     * @param optionalDetails - any extra message
+     * @param key - the cache key
+     * @return ICacheEvent
+     */
+    <T> ICacheEvent<T> createICacheEvent( String source, String region,
+            String eventName, String optionalDetails, T key );
+
+    /**
+     * Logs an event.
+     * <p>
+     * @param event - the event created in createICacheEvent
+     */
+    <T> void logICacheEvent( ICacheEvent<T> event );
+
+    /**
+     * Logs an event. These are internal application events that do not correspond to ICache calls.
+     * <p>
+     * @param source - e.g. RemoteCacheServer
+     * @param eventName - e.g. update, get, put, remove
+     * @param optionalDetails - any extra message
+     */
+    void logApplicationEvent( String source, String eventName, String optionalDetails );
+
+    /**
+     * Logs an error.
+     * <p>
+     * @param source - e.g. RemoteCacheServer
+     * @param eventName - e.g. update, get, put, remove
+     * @param errorMessage - any error message
+     */
+    void logError( String source, String eventName, String errorMessage );
+}
diff --git a/src/org/apache/commons/jcs/engine/match/KeyMatcherPatternImpl.java b/src/org/apache/commons/jcs/engine/match/KeyMatcherPatternImpl.java
new file mode 100644
index 0000000..4bd235a
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/match/KeyMatcherPatternImpl.java
@@ -0,0 +1,66 @@
+package org.apache.commons.jcs.engine.match;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.match.behavior.IKeyMatcher;
+
+import java.util.HashSet;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/** This implementation of the KeyMatcher uses standard Java Pattern matching. */
+public class KeyMatcherPatternImpl<K>
+    implements IKeyMatcher<K>
+{
+    /** Serial version */
+    private static final long serialVersionUID = 6667352064144381264L;
+
+    /**
+     * Creates a pattern and find matches on the array.
+     * <p>
+     * @param pattern
+     * @param keyArray
+     * @return Set of the matching keys
+     */
+    @Override
+    public Set<K> getMatchingKeysFromArray( String pattern, Set<K> keyArray )
+    {
+        Pattern compiledPattern = Pattern.compile( pattern );
+
+        Set<K> matchingKeys = new HashSet<K>();
+
+        // Look for matches
+        for (K key : keyArray)
+        {
+            // TODO we might want to match on the toString.
+            if ( key instanceof String )
+            {
+                Matcher matcher = compiledPattern.matcher( (String) key );
+                if ( matcher.matches() )
+                {
+                    matchingKeys.add( key );
+                }
+            }
+        }
+
+        return matchingKeys;
+    }
+}
diff --git a/src/org/apache/commons/jcs/engine/match/behavior/IKeyMatcher.java b/src/org/apache/commons/jcs/engine/match/behavior/IKeyMatcher.java
new file mode 100644
index 0000000..74e9d01
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/match/behavior/IKeyMatcher.java
@@ -0,0 +1,36 @@
+package org.apache.commons.jcs.engine.match.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.Serializable;
+import java.util.Set;
+
+/** Key matchers need to implement this interface. */
+public interface IKeyMatcher<K> extends Serializable
+{
+    /**
+     * Creates a pattern and find matches on the array.
+     * <p>
+     * @param pattern
+     * @param keyArray
+     * @return Set of the matching keys
+     */
+    Set<K> getMatchingKeysFromArray( String pattern, Set<K> keyArray );
+}
diff --git a/src/org/apache/commons/jcs/engine/memory/AbstractDoubleLinkedListMemoryCache.java b/src/org/apache/commons/jcs/engine/memory/AbstractDoubleLinkedListMemoryCache.java
new file mode 100644
index 0000000..878c81d
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/memory/AbstractDoubleLinkedListMemoryCache.java
@@ -0,0 +1,805 @@
+package org.apache.commons.jcs.engine.memory;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.commons.jcs.engine.CacheConstants;
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.control.CompositeCache;
+import org.apache.commons.jcs.engine.control.group.GroupAttrName;
+import org.apache.commons.jcs.engine.memory.util.MemoryElementDescriptor;
+import org.apache.commons.jcs.engine.stats.StatElement;
+import org.apache.commons.jcs.engine.stats.Stats;
+import org.apache.commons.jcs.engine.stats.behavior.IStatElement;
+import org.apache.commons.jcs.engine.stats.behavior.IStats;
+import org.apache.commons.jcs.utils.struct.DoubleLinkedList;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * This class contains methods that are common to memory caches using the double linked list, such
+ * as the LRU, MRU, FIFO, and LIFO caches.
+ * <p>
+ * Children can control the expiration algorithm by controlling the update and get. The last item in
+ * the list will be the one removed when the list fills. For instance LRU should more items to the
+ * front as they are used. FIFO should simply add new items to the front of the list.
+ */
+public abstract class AbstractDoubleLinkedListMemoryCache<K, V>
+    extends AbstractMemoryCache<K, V>
+{
+    /** The logger. */
+    private static final Log log = LogFactory.getLog( AbstractDoubleLinkedListMemoryCache.class );
+
+    /** thread-safe double linked list for lru */
+    protected DoubleLinkedList<MemoryElementDescriptor<K, V>> list; // TODO privatise
+
+    /** number of hits */
+    private volatile int hitCnt = 0;
+
+    /** number of misses */
+    private volatile int missCnt = 0;
+
+    /** number of puts */
+    private volatile int putCnt = 0;
+
+    /**
+     * For post reflection creation initialization.
+     * <p>
+     * @param hub
+     */
+    @Override
+    public void initialize( CompositeCache<K, V> hub )
+    {
+        lock.lock();
+        try
+        {
+            super.initialize(hub);
+            list = new DoubleLinkedList<MemoryElementDescriptor<K, V>>();
+            log.info("initialized MemoryCache for " + cacheName);
+        }
+        finally
+        {
+            lock.unlock();
+        }
+    }
+
+    /**
+     * This is called by super initialize.
+     *
+     * NOTE: should return a thread safe map
+     *
+     * <p>
+     * @return new ConcurrentHashMap()
+     */
+    @Override
+    public Map<K, MemoryElementDescriptor<K, V>> createMap()
+    {
+        return new ConcurrentHashMap<K, MemoryElementDescriptor<K, V>>();
+    }
+
+    /**
+     * Calls the abstract method updateList.
+     * <p>
+     * If the max size is reached, an element will be put to disk.
+     * <p>
+     * @param ce The cache element, or entry wrapper
+     * @throws IOException
+     */
+    @Override
+    public final void update( ICacheElement<K, V> ce )
+        throws IOException
+    {
+        lock.lock();
+        try
+        {
+            putCnt++;
+
+            MemoryElementDescriptor<K, V> newNode = adjustListForUpdate(ce);
+
+            // this should be synchronized if we were not using a ConcurrentHashMap
+            MemoryElementDescriptor<K, V> oldNode = map.put(newNode.ce.getKey(), newNode);
+
+            // If the node was the same as an existing node, remove it.
+            if (oldNode != null && newNode.ce.getKey().equals(oldNode.ce.getKey())) {
+                list.remove(oldNode);
+            }
+        }
+        finally
+        {
+            lock.unlock();
+        }
+
+        // If we are over the max spool some
+        spoolIfNeeded();
+    }
+
+    /**
+     * Children implement this to control the cache expiration algorithm
+     * <p>
+     * @param ce
+     * @return MemoryElementDescriptor the new node
+     * @throws IOException
+     */
+    protected abstract MemoryElementDescriptor<K, V> adjustListForUpdate( ICacheElement<K, V> ce )
+        throws IOException;
+
+    /**
+     * If the max size has been reached, spool.
+     * <p>
+     * @throws Error
+     */
+    private void spoolIfNeeded()
+        throws Error
+    {
+        int size = map.size();
+        // If the element limit is reached, we need to spool
+
+        if ( size <= this.cacheAttributes.getMaxObjects() )
+        {
+            return;
+        }
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "In memory limit reached, spooling" );
+        }
+
+        // Write the last 'chunkSize' items to disk.
+        int chunkSizeCorrected = Math.min( size, chunkSize );
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "About to spool to disk cache, map size: " + size + ", max objects: "
+                + this.cacheAttributes.getMaxObjects() + ", items to spool: " + chunkSizeCorrected );
+        }
+
+        // The spool will put them in a disk event queue, so there is no
+        // need to pre-queue the queuing. This would be a bit wasteful
+        // and wouldn't save much time in this synchronous call.
+        for ( int i = 0; i < chunkSizeCorrected; i++ )
+        {
+            spoolLastElement();
+        }
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "update: After spool map size: " + map.size() + " linked list size = " + dumpCacheSize() );
+        }
+    }
+
+    /**
+     * Get an item from the cache If the item is found, it is removed from the list and added first.
+     * <p>
+     * @param key Identifies item to find
+     * @return ICacheElement<K, V> if found, else null
+     * @throws IOException
+     */
+    @Override
+    public final ICacheElement<K, V> get( K key )
+        throws IOException
+    {
+        ICacheElement<K, V> ce = null;
+
+        final boolean debugEnabled = log.isDebugEnabled();
+
+        if (debugEnabled)
+        {
+            log.debug( "getting item from cache " + cacheName + " for key " + key );
+        }
+
+        MemoryElementDescriptor<K, V> me = map.get( key );
+
+        if ( me != null )
+        {
+            lock.lock();
+            try
+            {
+                ce = me.ce;
+                hitCnt++;
+
+                // ABSTRACT
+                adjustListForGet( me );
+            }
+            finally
+            {
+                lock.unlock();
+            }
+
+            if (debugEnabled)
+            {
+                log.debug( cacheName + ": LRUMemoryCache hit for " + ce.getKey() );
+            }
+        }
+        else
+        {
+            lock.lock();
+            try
+            {
+                missCnt++;
+            }
+            finally
+            {
+                lock.unlock();
+            }
+
+            if (debugEnabled)
+            {
+                log.debug( cacheName + ": LRUMemoryCache miss for " + key );
+            }
+        }
+
+        verifyCache();
+        return ce;
+    }
+
+    /**
+     * Adjust the list as needed for a get. This allows children to control the algorithm
+     * <p>
+     * @param me
+     */
+    protected abstract void adjustListForGet( MemoryElementDescriptor<K, V> me );
+
+    /**
+     * This instructs the memory cache to remove the <i>numberToFree</i> according to its eviction
+     * policy. For example, the LRUMemoryCache will remove the <i>numberToFree</i> least recently
+     * used items. These will be spooled to disk if a disk auxiliary is available.
+     * <p>
+     * @param numberToFree
+     * @return the number that were removed. if you ask to free 5, but there are only 3, you will
+     *         get 3.
+     * @throws IOException
+     */
+    @Override
+    public int freeElements( int numberToFree )
+        throws IOException
+    {
+        int freed = 0;
+        for ( ; freed < numberToFree; freed++ )
+        {
+            ICacheElement<K, V> element = spoolLastElement();
+            if ( element == null )
+            {
+                break;
+            }
+        }
+        return freed;
+    }
+
+    /**
+     * This spools the last element in the LRU, if one exists.
+     * <p>
+     * @return ICacheElement<K, V> if there was a last element, else null.
+     * @throws Error
+     */
+    protected ICacheElement<K, V> spoolLastElement()
+        throws Error
+    {
+        ICacheElement<K, V> toSpool = null;
+        final MemoryElementDescriptor<K, V> last = list.getLast();
+        if ( last != null )
+        {
+            lock.lock();
+            try
+            {
+                toSpool = last.ce;
+                if (toSpool != null) {
+                    cache.spoolToDisk(last.ce);
+                    if (map.remove(last.ce.getKey()) == null) {
+                        log.warn("update: remove failed for key: "
+                                + last.ce.getKey());
+                        verifyCache();
+                    }
+                }
+                else
+                {
+                    throw new Error("update: last.ce is null!");
+                }
+                list.remove(last);
+            }
+            finally
+            {
+                lock.unlock();
+            }
+        }
+        else
+        {
+            verifyCache();
+            throw new Error( "update: last is null!" );
+        }
+
+        // If this is out of the sync block it can detect a mismatch
+        // where there is none.
+        if ( map.size() != dumpCacheSize() )
+        {
+            log.warn( "update: After spool, size mismatch: map.size() = " + map.size() + ", linked list size = "
+                + dumpCacheSize() );
+        }
+        return toSpool;
+    }
+
+    /**
+     * Removes an item from the cache. This method handles hierarchical removal. If the key is a
+     * String and ends with the CacheConstants.NAME_COMPONENT_DELIMITER, then all items with keys
+     * starting with the argument String will be removed.
+     * <p>
+     * @param key
+     * @return true if the removal was successful
+     * @throws IOException
+     */
+    @Override
+    public boolean remove( K key )
+        throws IOException
+    {
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "removing item for key: " + key );
+        }
+
+        boolean removed = false;
+
+        // handle partial removal
+        if ( key instanceof String && ( (String) key ).endsWith( CacheConstants.NAME_COMPONENT_DELIMITER ) )
+        {
+            // remove all keys of the same name hierarchy.
+            for (Iterator<Map.Entry<K, MemoryElementDescriptor<K, V>>> itr = map.entrySet().iterator(); itr.hasNext(); )
+            {
+                Map.Entry<K, MemoryElementDescriptor<K, V>> entry = itr.next();
+                K k = entry.getKey();
+
+                if (k instanceof String && ((String) k).startsWith(key.toString()))
+                {
+                    lock.lock();
+                    try
+                    {
+                        list.remove(entry.getValue());
+                        itr.remove();
+                        removed = true;
+                    }
+                    finally
+                    {
+                        lock.unlock();
+                    }
+                }
+            }
+        }
+        else if ( key instanceof GroupAttrName && ((GroupAttrName<?>)key).attrName == null)
+        {
+            // remove all keys of the same name hierarchy.
+            for (Iterator<Map.Entry<K, MemoryElementDescriptor<K, V>>> itr = map.entrySet().iterator(); itr.hasNext(); )
+            {
+                Map.Entry<K, MemoryElementDescriptor<K, V>> entry = itr.next();
+                K k = entry.getKey();
+
+                if ( k instanceof GroupAttrName &&
+                    ((GroupAttrName<?>)k).groupId.equals(((GroupAttrName<?>)key).groupId))
+                {
+                    lock.lock();
+                    try
+                    {
+                        list.remove(entry.getValue());
+                        itr.remove();
+                        removed = true;
+                    }
+                    finally
+                    {
+                        lock.unlock();
+                    }
+                }
+            }
+        }
+        else
+        {
+            // remove single item.
+            lock.lock();
+            try
+            {
+                MemoryElementDescriptor<K, V> me = map.remove(key);
+                if (me != null)
+                {
+                    list.remove(me);
+                    removed = true;
+                }
+            }
+            finally
+            {
+                lock.unlock();
+            }
+        }
+
+        return removed;
+    }
+
+    /**
+     * Remove all of the elements from both the Map and the linked list implementation. Overrides
+     * base class.
+     * <p>
+     * @throws IOException
+     */
+    @Override
+    public void removeAll()
+        throws IOException
+    {
+        lock.lock();
+        try
+        {
+            list.removeAll();
+            map.clear();
+        }
+        finally
+        {
+            lock.unlock();
+        }
+    }
+
+    // --------------------------- internal methods (linked list implementation)
+    /**
+     * Adds a new node to the start of the link list.
+     * <p>
+     * @param ce The feature to be added to the First
+     * @return MemoryElementDescriptor
+     */
+    protected MemoryElementDescriptor<K, V> addFirst( ICacheElement<K, V> ce )
+    {
+        lock.lock();
+        try
+        {
+            MemoryElementDescriptor<K, V> me = new MemoryElementDescriptor<K, V>(ce);
+            list.addFirst(me);
+            verifyCache(ce.getKey());
+            return me;
+        }
+        finally
+        {
+            lock.unlock();
+        }
+    }
+
+    /**
+     * Adds a new node to the end of the link list.
+     * <p>
+     * @param ce The feature to be added to the First
+     * @return MemoryElementDescriptor
+     */
+    protected MemoryElementDescriptor<K, V> addLast( ICacheElement<K, V> ce )
+    {
+        lock.lock();
+        try
+        {
+            MemoryElementDescriptor<K, V> me = new MemoryElementDescriptor<K, V>(ce);
+            list.addLast(me);
+            verifyCache(ce.getKey());
+            return me;
+        }
+        finally
+        {
+            lock.unlock();
+        }
+    }
+
+    // ---------------------------------------------------------- debug methods
+
+    /**
+     * Dump the cache entries from first to list for debugging.
+     */
+    @SuppressWarnings("unchecked") // No generics for public fields
+    public void dumpCacheEntries()
+    {
+        log.debug( "dumpingCacheEntries" );
+        for ( MemoryElementDescriptor<K, V> me = list.getFirst(); me != null; me = (MemoryElementDescriptor<K, V>) me.next )
+        {
+            log.debug( "dumpCacheEntries> key=" + me.ce.getKey() + ", val=" + me.ce.getVal() );
+        }
+    }
+
+    /**
+     * Returns the size of the list.
+     * <p>
+     * @return the number of items in the map.
+     */
+    protected int dumpCacheSize()
+    {
+        return list.size();
+    }
+
+    /**
+     * Checks to see if all the items that should be in the cache are. Checks consistency between
+     * List and map.
+     */
+    @SuppressWarnings("unchecked") // No generics for public fields
+    protected void verifyCache()
+    {
+        if ( !log.isDebugEnabled() )
+        {
+            return;
+        }
+
+        boolean found = false;
+        log.debug( "verifycache[" + cacheName + "]: mapContains " + map.size() + " elements, linked list contains "
+            + dumpCacheSize() + " elements" );
+        log.debug( "verifycache: checking linked list by key " );
+        for ( MemoryElementDescriptor<K, V> li = list.getFirst(); li != null; li = (MemoryElementDescriptor<K, V>) li.next )
+        {
+            Object key = li.ce.getKey();
+            if ( !map.containsKey( key ) )
+            {
+                log.error( "verifycache[" + cacheName + "]: map does not contain key : " + li.ce.getKey() );
+                log.error( "li.hashcode=" + li.ce.getKey().hashCode() );
+                log.error( "key class=" + key.getClass() );
+                log.error( "key hashcode=" + key.hashCode() );
+                log.error( "key toString=" + key.toString() );
+                if ( key instanceof GroupAttrName )
+                {
+                    GroupAttrName<?> name = (GroupAttrName<?>) key;
+                    log.error( "GroupID hashcode=" + name.groupId.hashCode() );
+                    log.error( "GroupID.class=" + name.groupId.getClass() );
+                    log.error( "AttrName hashcode=" + name.attrName.hashCode() );
+                    log.error( "AttrName.class=" + name.attrName.getClass() );
+                }
+                dumpMap();
+            }
+            else if ( map.get( li.ce.getKey() ) == null )
+            {
+                log.error( "verifycache[" + cacheName + "]: linked list retrieval returned null for key: "
+                    + li.ce.getKey() );
+            }
+        }
+
+        log.debug( "verifycache: checking linked list by value " );
+        for ( MemoryElementDescriptor<K, V> li3 = list.getFirst(); li3 != null; li3 = (MemoryElementDescriptor<K, V>) li3.next )
+        {
+            if ( map.containsValue( li3 ) == false )
+            {
+                log.error( "verifycache[" + cacheName + "]: map does not contain value : " + li3 );
+                dumpMap();
+            }
+        }
+
+        log.debug( "verifycache: checking via keysets!" );
+        for (Object val : map.keySet())
+        {
+            found = false;
+
+            for ( MemoryElementDescriptor<K, V> li2 = list.getFirst(); li2 != null; li2 = (MemoryElementDescriptor<K, V>) li2.next )
+            {
+                if ( val.equals( li2.ce.getKey() ) )
+                {
+                    found = true;
+                    break;
+                }
+            }
+            if ( !found )
+            {
+                log.error( "verifycache[" + cacheName + "]: key not found in list : " + val );
+                dumpCacheEntries();
+                if ( map.containsKey( val ) )
+                {
+                    log.error( "verifycache: map contains key" );
+                }
+                else
+                {
+                    log.error( "verifycache: map does NOT contain key, what the HECK!" );
+                }
+            }
+        }
+    }
+
+    /**
+     * Logs an error if an element that should be in the cache is not.
+     * <p>
+     * @param key
+     */
+    @SuppressWarnings("unchecked") // No generics for public fields
+    private void verifyCache( K key )
+    {
+        if ( !log.isDebugEnabled() )
+        {
+            return;
+        }
+
+        boolean found = false;
+
+        // go through the linked list looking for the key
+        for ( MemoryElementDescriptor<K, V> li = list.getFirst(); li != null; li = (MemoryElementDescriptor<K, V>) li.next )
+        {
+            if ( li.ce.getKey() == key )
+            {
+                found = true;
+                log.debug( "verifycache(key) key match: " + key );
+                break;
+            }
+        }
+        if ( !found )
+        {
+            log.error( "verifycache(key)[" + cacheName + "], couldn't find key! : " + key );
+        }
+    }
+
+    // --------------------------- iteration methods (iteration helpers)
+    /**
+     * iteration aid
+     */
+    public static class IteratorWrapper<K extends Serializable, V extends Serializable>
+        implements Iterator<Entry<K, MemoryElementDescriptor<K, V>>>
+    {
+        /** The internal iterator */
+        private final Iterator<Entry<K, MemoryElementDescriptor<K, V>>> i;
+
+        /**
+         * Wrapped to remove our wrapper object
+         * @param m
+         */
+        protected IteratorWrapper(Map<K, MemoryElementDescriptor<K, V>> m)
+        {
+            i = m.entrySet().iterator();
+        }
+
+        /** @return i.hasNext() */
+        @Override
+        public boolean hasNext()
+        {
+            return i.hasNext();
+        }
+
+        /** @return new MapEntryWrapper( (Map.Entry) i.next() ) */
+        @Override
+        public Entry<K, MemoryElementDescriptor<K, V>> next()
+        {
+            // return new MapEntryWrapper<Serializable>( i.next() );
+            return i.next();
+        }
+
+        /** i.remove(); */
+        @Override
+        public void remove()
+        {
+            i.remove();
+        }
+
+        /**
+         * @param o
+         * @return i.equals( o ))
+         */
+        @Override
+        public boolean equals( Object o )
+        {
+            return i.equals( o );
+        }
+
+        /** @return i.hashCode() */
+        @Override
+        public int hashCode()
+        {
+            return i.hashCode();
+        }
+    }
+
+    /**
+     * @author Aaron Smuts
+     */
+    public static class MapEntryWrapper<K extends Serializable, V extends Serializable>
+        implements Map.Entry<K, ICacheElement<K, V>>
+    {
+        /** The internal entry */
+        private final Map.Entry<K, MemoryElementDescriptor<K, V>> e;
+
+        /**
+         * @param e
+         */
+        private MapEntryWrapper( Map.Entry<K, MemoryElementDescriptor<K, V>> e )
+        {
+            this.e = e;
+        }
+
+        /**
+         * @param o
+         * @return e.equals( o )
+         */
+        @Override
+        public boolean equals( Object o )
+        {
+            return e.equals( o );
+        }
+
+        /** @return e.getKey() */
+        @Override
+        public K getKey()
+        {
+            return e.getKey();
+        }
+
+        /** @return ( (MemoryElementDescriptor) e.getValue() ).ce */
+        @Override
+        public ICacheElement<K, V> getValue()
+        {
+            return e.getValue().ce;
+        }
+
+        /** @return e.hashCode() */
+        @Override
+        public int hashCode()
+        {
+            return e.hashCode();
+        }
+
+        /**
+         * invalid
+         * @param value
+         * @return always throws
+         */
+        @Override
+        public ICacheElement<K, V> setValue(ICacheElement<K, V> value)
+        {
+            throw new UnsupportedOperationException( "Use normal cache methods"
+                + " to alter the contents of the cache." );
+        }
+    }
+
+    /**
+     * Get an Array of the keys for all elements in the memory cache
+     * @return An Object[]
+     */
+    @Override
+    public Set<K> getKeySet()
+    {
+        return new LinkedHashSet<K>(map.keySet());
+    }
+
+    /**
+     * This returns semi-structured information on the memory cache, such as the size, put count,
+     * hit count, and miss count.
+     * <p>
+     * @see org.apache.commons.jcs.engine.memory.behavior.IMemoryCache#getStatistics()
+     */
+    @Override
+    public IStats getStatistics()
+    {
+        IStats stats = new Stats();
+        stats.setTypeName( /*add algorithm name*/"Memory Cache" );
+
+        ArrayList<IStatElement<?>> elems = new ArrayList<IStatElement<?>>();
+
+        lock.lock(); // not sure that's really relevant here but not that important
+        try
+        {
+            elems.add(new StatElement<Integer>("List Size", Integer.valueOf(list.size())));
+            elems.add(new StatElement<Integer>("Map Size", Integer.valueOf(map.size())));
+            elems.add(new StatElement<Integer>("Put Count", Integer.valueOf(putCnt)));
+            elems.add(new StatElement<Integer>("Hit Count", Integer.valueOf(hitCnt)));
+            elems.add(new StatElement<Integer>("Miss Count", Integer.valueOf(missCnt)));
+        }
+        finally
+        {
+            lock.unlock();
+        }
+
+        stats.setStatElements( elems );
+
+        return stats;
+    }
+}
diff --git a/src/org/apache/commons/jcs/engine/memory/AbstractMemoryCache.java b/src/org/apache/commons/jcs/engine/memory/AbstractMemoryCache.java
new file mode 100644
index 0000000..8532cf4
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/memory/AbstractMemoryCache.java
@@ -0,0 +1,339 @@
+package org.apache.commons.jcs.engine.memory;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.CacheStatus;
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.behavior.ICompositeCacheAttributes;
+import org.apache.commons.jcs.engine.behavior.IElementAttributes;
+import org.apache.commons.jcs.engine.control.CompositeCache;
+import org.apache.commons.jcs.engine.memory.behavior.IMemoryCache;
+import org.apache.commons.jcs.engine.memory.util.MemoryElementDescriptor;
+import org.apache.commons.jcs.engine.stats.Stats;
+import org.apache.commons.jcs.engine.stats.behavior.IStats;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
+/**
+ * This base includes some common code for memory caches.
+ * <p>
+ * This keeps a static reference to a memory shrinker clock daemon. If this region is configured to
+ * use the shrinker, the clock daemon will be setup to run the shrinker on this region.
+ */
+public abstract class AbstractMemoryCache<K, V>
+    implements IMemoryCache<K, V>
+{
+    /** Log instance */
+    private static final Log log = LogFactory.getLog( AbstractMemoryCache.class );
+
+    /** The region name. This defines a namespace of sorts. */
+    protected String cacheName; // TODO privatise (mainly seems to be used externally for debugging)
+
+    /** Map where items are stored by key.  This is created by the concrete child class. */
+    public Map<K, MemoryElementDescriptor<K, V>> map;// TODO privatise
+
+    /** Region Elemental Attributes, used as a default and copied for each item. */
+    public IElementAttributes elementAttributes;// TODO privatise
+
+    /** Cache Attributes.  Regions settings. */
+    public ICompositeCacheAttributes cacheAttributes;// TODO privatise
+
+    /** The cache region this store is associated with */
+    public CompositeCache<K, V> cache;// TODO privatise
+
+    /** status */
+    private CacheStatus status;
+
+    /** How many to spool at a time. */
+    protected int chunkSize;
+
+    protected final Lock lock = new ReentrantLock();
+
+    /**
+     * For post reflection creation initialization
+     * <p>
+     * @param hub
+     */
+    @Override
+    public void initialize( CompositeCache<K, V> hub )
+    {
+        lock.lock();
+        try
+        {
+            this.cacheName = hub.getCacheName();
+            this.cacheAttributes = hub.getCacheAttributes();
+            this.cache = hub;
+            map = createMap();
+
+            chunkSize = cacheAttributes.getSpoolChunkSize();
+            status = CacheStatus.ALIVE;
+        }
+        finally
+        {
+            lock.unlock();
+        }
+    }
+
+    /**
+     * Children must implement this method. A FIFO implementation may use a tree map. An LRU might
+     * use a hashtable. The map returned should be threadsafe.
+     * <p>
+     * @return a threadsafe Map
+     */
+    public abstract Map<K, MemoryElementDescriptor<K, V>> createMap();
+
+    /**
+     * Removes an item from the cache
+     * <p>
+     * @param key Identifies item to be removed
+     * @return Description of the Return Value
+     * @throws IOException Description of the Exception
+     */
+    @Override
+    public abstract boolean remove( K key )
+        throws IOException;
+
+    /**
+     * Get an item from the cache
+     * <p>
+     * @param key Description of the Parameter
+     * @return Description of the Return Value
+     * @throws IOException Description of the Exception
+     */
+    @Override
+    public abstract ICacheElement<K, V> get( K key )
+        throws IOException;
+
+    /**
+     * Gets multiple items from the cache based on the given set of keys.
+     * <p>
+     * @param keys
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map if there is no
+     *         data in cache for any of these keys
+     * @throws IOException
+     */
+    @Override
+    public Map<K, ICacheElement<K, V>> getMultiple( Set<K> keys )
+        throws IOException
+    {
+        Map<K, ICacheElement<K, V>> elements = new HashMap<K, ICacheElement<K, V>>();
+
+        if ( keys != null && !keys.isEmpty() )
+        {
+            for (K key : keys)
+            {
+                ICacheElement<K, V> element = get( key );
+
+                if ( element != null )
+                {
+                    elements.put( key, element );
+                }
+            }
+        }
+
+        return elements;
+    }
+
+    /**
+     * Get an item from the cache without affecting its last access time or position. Not all memory
+     * cache implementations can get quietly.
+     * <p>
+     * @param key Identifies item to find
+     * @return Element matching key if found, or null
+     * @throws IOException
+     */
+    @Override
+    public ICacheElement<K, V> getQuiet( K key )
+        throws IOException
+    {
+        ICacheElement<K, V> ce = null;
+
+        MemoryElementDescriptor<K, V> me = map.get( key );
+        if ( me != null )
+        {
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( cacheName + ": MemoryCache quiet hit for " + key );
+            }
+
+            ce = me.ce;
+        }
+        else if ( log.isDebugEnabled() )
+        {
+            log.debug( cacheName + ": MemoryCache quiet miss for " + key );
+        }
+
+        return ce;
+    }
+
+    /**
+     * Puts an item to the cache.
+     * <p>
+     * @param ce Description of the Parameter
+     * @throws IOException Description of the Exception
+     */
+    @Override
+    public abstract void update( ICacheElement<K, V> ce )
+        throws IOException;
+
+    /**
+     * Get a set of the keys for all elements in the memory cache
+     * <p>
+     * @return A set of the key type
+     */
+    @Override
+    public abstract Set<K> getKeySet();
+
+    /**
+     * Removes all cached items from the cache.
+     * <p>
+     * @throws IOException
+     */
+    @Override
+    public void removeAll()
+        throws IOException
+    {
+        map.clear();
+    }
+
+    /**
+     * Prepares for shutdown.
+     * <p>
+     * @throws IOException
+     */
+    @Override
+    public void dispose()
+        throws IOException
+    {
+        log.info( "Memory Cache dispose called." );
+    }
+
+    /**
+     * @return statistics about the cache
+     */
+    @Override
+    public IStats getStatistics()
+    {
+        IStats stats = new Stats();
+        stats.setTypeName( "Abstract Memory Cache" );
+        return stats;
+    }
+
+    /**
+     * Returns the current cache size.
+     * <p>
+     * @return The size value
+     */
+    @Override
+    public int getSize()
+    {
+        return this.map.size();
+    }
+
+    /**
+     * Returns the cache status.
+     * <p>
+     * @return The status value
+     */
+    public CacheStatus getStatus()
+    {
+        return this.status;
+    }
+
+    /**
+     * Returns the cache (aka "region") name.
+     * <p>
+     * @return The cacheName value
+     */
+    public String getCacheName()
+    {
+        String attributeCacheName = this.cacheAttributes.getCacheName();
+        if(attributeCacheName != null)
+            return attributeCacheName;
+        return cacheName;
+    }
+
+    /**
+     * Puts an item to the cache.
+     * <p>
+     * @param ce
+     * @throws IOException
+     */
+    @Override
+    public void waterfal( ICacheElement<K, V> ce )
+        throws IOException
+    {
+        this.cache.spoolToDisk( ce );
+    }
+
+    // ---------------------------------------------------------- debug method
+    /**
+     * Dump the cache map for debugging.
+     */
+    public void dumpMap()
+    {
+        log.debug( "dumpingMap" );
+        for (Map.Entry<K, MemoryElementDescriptor<K, V>> e : map.entrySet())
+        {
+            MemoryElementDescriptor<K, V> me = e.getValue();
+            log.debug( "dumpMap> key=" + e.getKey() + ", val=" + me.ce.getVal() );
+        }
+    }
+
+    /**
+     * Returns the CacheAttributes.
+     * <p>
+     * @return The CacheAttributes value
+     */
+    @Override
+    public ICompositeCacheAttributes getCacheAttributes()
+    {
+        return this.cacheAttributes;
+    }
+
+    /**
+     * Sets the CacheAttributes.
+     * <p>
+     * @param cattr The new CacheAttributes value
+     */
+    @Override
+    public void setCacheAttributes( ICompositeCacheAttributes cattr )
+    {
+        this.cacheAttributes = cattr;
+    }
+
+    /**
+     * Gets the cache hub / region that the MemoryCache is used by
+     * <p>
+     * @return The cache value
+     */
+    @Override
+    public CompositeCache<K, V> getCompositeCache()
+    {
+        return this.cache;
+    }
+}
diff --git a/src/org/apache/commons/jcs/engine/memory/behavior/IMemoryCache.java b/src/org/apache/commons/jcs/engine/memory/behavior/IMemoryCache.java
new file mode 100644
index 0000000..fa21393
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/memory/behavior/IMemoryCache.java
@@ -0,0 +1,187 @@
+package org.apache.commons.jcs.engine.memory.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.behavior.ICompositeCacheAttributes;
+import org.apache.commons.jcs.engine.control.CompositeCache;
+import org.apache.commons.jcs.engine.stats.behavior.IStats;
+
+import java.io.IOException;
+import java.util.Map;
+import java.util.Set;
+
+/** For the framework. Insures methods a MemoryCache needs to access. */
+public interface IMemoryCache<K, V>
+{
+    /**
+     * Initialize the memory cache
+     * <p>
+     * @param cache The cache (region) this memory store is attached to.
+     */
+    void initialize( CompositeCache<K, V> cache );
+
+    /**
+     * Destroy the memory cache
+     * <p>
+     * @throws IOException
+     */
+    void dispose()
+        throws IOException;
+
+    /**
+     * Get the number of elements contained in the memory store
+     * <p>
+     * @return Element count
+     */
+    int getSize();
+
+    /**
+     * Returns the historical and statistical data for a region's memory cache.
+     * <p>
+     * @return Statistics and Info for the Memory Cache.
+     */
+    IStats getStatistics();
+
+    /**
+     * Get a set of the keys for all elements in the memory cache.
+     * <p>
+     * @return a set of the key type
+     * TODO This should probably be done in chunks with a range passed in. This
+     *       will be a problem if someone puts a 1,000,000 or so items in a
+     *       region.
+     */
+    Set<K> getKeySet();
+
+    /**
+     * Removes an item from the cache
+     * <p>
+     * @param key
+     *            Identifies item to be removed
+     * @return Description of the Return Value
+     * @throws IOException
+     *                Description of the Exception
+     */
+    boolean remove( K key )
+        throws IOException;
+
+    /**
+     * Removes all cached items from the cache.
+     * <p>
+     * @throws IOException
+     *                Description of the Exception
+     */
+    void removeAll()
+        throws IOException;
+
+    /**
+     * This instructs the memory cache to remove the <i>numberToFree</i>
+     * according to its eviction policy. For example, the LRUMemoryCache will
+     * remove the <i>numberToFree</i> least recently used items. These will be
+     * spooled to disk if a disk auxiliary is available.
+     * <p>
+     * @param numberToFree
+     * @return the number that were removed. if you ask to free 5, but there are
+     *         only 3, you will get 3.
+     * @throws IOException
+     */
+    int freeElements( int numberToFree )
+        throws IOException;
+
+    /**
+     * Get an item from the cache
+     * <p>
+     * @param key
+     *            Description of the Parameter
+     * @return Description of the Return Value
+     * @throws IOException
+     *                Description of the Exception
+     */
+    ICacheElement<K, V> get( K key )
+        throws IOException;
+
+    /**
+     * Gets multiple items from the cache based on the given set of keys.
+     * <p>
+     * @param keys
+     * @return a map of K key to ICacheElement<K, V> element, or an empty map
+     * if there is no data in cache for any of these keys
+     * @throws IOException
+     */
+    Map<K, ICacheElement<K, V>> getMultiple( Set<K> keys )
+        throws IOException;
+
+    /**
+     * Get an item from the cache without effecting its order or last access
+     * time
+     * <p>
+     * @param key
+     *            Description of the Parameter
+     * @return The quiet value
+     * @throws IOException
+     *                Description of the Exception
+     */
+    ICacheElement<K, V> getQuiet( K key )
+        throws IOException;
+
+    /**
+     * Spools the item contained in the provided element to disk
+     * <p>
+     * @param ce
+     *            Description of the Parameter
+     * @throws IOException
+     *                Description of the Exception
+     */
+    void waterfal( ICacheElement<K, V> ce )
+        throws IOException;
+
+    /**
+     * Puts an item to the cache.
+     * <p>
+     * @param ce
+     *            Description of the Parameter
+     * @throws IOException
+     *                Description of the Exception
+     */
+    void update( ICacheElement<K, V> ce )
+        throws IOException;
+
+    /**
+     * Returns the CacheAttributes for the region.
+     * <p>
+     * @return The cacheAttributes value
+     */
+    ICompositeCacheAttributes getCacheAttributes();
+
+    /**
+     * Sets the CacheAttributes of the region.
+     * <p>
+     * @param cattr
+     *            The new cacheAttributes value
+     */
+    void setCacheAttributes( ICompositeCacheAttributes cattr );
+
+    /**
+     * Gets the cache hub / region that uses the MemoryCache.
+     * <p>
+     * @return The cache value
+     */
+    CompositeCache<K, V> getCompositeCache();
+}
diff --git a/src/org/apache/commons/jcs/engine/memory/fifo/FIFOMemoryCache.java b/src/org/apache/commons/jcs/engine/memory/fifo/FIFOMemoryCache.java
new file mode 100644
index 0000000..c7e9746
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/memory/fifo/FIFOMemoryCache.java
@@ -0,0 +1,60 @@
+package org.apache.commons.jcs.engine.memory.fifo;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.memory.AbstractDoubleLinkedListMemoryCache;
+import org.apache.commons.jcs.engine.memory.util.MemoryElementDescriptor;
+
+import java.io.IOException;
+import java.io.Serializable;
+
+/**
+ * The items are spooled in the order they are added. No adjustments to the list are made on get.
+ */
+public class FIFOMemoryCache<K extends Serializable, V extends Serializable>
+    extends AbstractDoubleLinkedListMemoryCache<K, V>
+{
+    /**
+     * Puts an item to the cache. Removes any pre-existing entries of the same key from the linked
+     * list and adds this one first.
+     * <p>
+     * @param ce The cache element, or entry wrapper
+     * @return MemoryElementDescriptor the new node
+     * @throws IOException
+     */
+    @Override
+    protected MemoryElementDescriptor<K, V> adjustListForUpdate( ICacheElement<K, V> ce )
+        throws IOException
+    {
+        return addFirst( ce );
+    }
+
+    /**
+     * Does nothing.
+     * <p>
+     * @param me
+     */
+    @Override
+    protected void adjustListForGet( MemoryElementDescriptor<K, V> me )
+    {
+        // DO NOTHING
+    }
+}
diff --git a/src/org/apache/commons/jcs/engine/memory/lru/LHMLRUMemoryCache.java b/src/org/apache/commons/jcs/engine/memory/lru/LHMLRUMemoryCache.java
new file mode 100644
index 0000000..419064c
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/memory/lru/LHMLRUMemoryCache.java
@@ -0,0 +1,361 @@
+package org.apache.commons.jcs.engine.memory.lru;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.CacheConstants;
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.control.CompositeCache;
+import org.apache.commons.jcs.engine.control.group.GroupAttrName;
+import org.apache.commons.jcs.engine.memory.AbstractMemoryCache;
+import org.apache.commons.jcs.engine.memory.util.MemoryElementDescriptor;
+import org.apache.commons.jcs.engine.stats.StatElement;
+import org.apache.commons.jcs.engine.stats.Stats;
+import org.apache.commons.jcs.engine.stats.behavior.IStatElement;
+import org.apache.commons.jcs.engine.stats.behavior.IStats;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * This is a test memory manager using the jdk1.4 LinkedHashMap.
+ */
+public class LHMLRUMemoryCache<K extends Serializable, V extends Serializable>
+    extends AbstractMemoryCache<K, V>
+{
+    /** The Logger. */
+    private static final Log log = LogFactory.getLog( LRUMemoryCache.class );
+
+    /** number of hits */
+    private int hitCnt = 0; // TODO should these be long values?
+
+    /** number of misses */
+    private int missCnt = 0;
+
+    /** number of puts */
+    private int putCnt = 0;
+
+    /**
+     * For post reflection creation initialization
+     * <p>
+     * @param hub
+     */
+    @Override
+    public synchronized void initialize( CompositeCache<K, V> hub )
+    {
+        super.initialize( hub );
+        log.info( "initialized LHMLRUMemoryCache for " + cacheName );
+    }
+
+    /**
+     * Returns a synchronized LHMSpooler
+     * <p>
+     * @return Collections.synchronizedMap( new LHMSpooler() )
+     */
+    @Override
+    public Map<K, MemoryElementDescriptor<K, V>> createMap()
+    {
+        return Collections.synchronizedMap( new LHMSpooler() );
+    }
+
+    /**
+     * Puts an item to the cache.
+     * <p>
+     * @param ce Description of the Parameter
+     * @throws IOException
+     */
+    @Override
+    public void update( ICacheElement<K, V> ce )
+        throws IOException
+    {
+        putCnt++;
+        map.put( ce.getKey(), new MemoryElementDescriptor<K, V>(ce) );
+    }
+
+    /**
+     * Get an item from the cache without affecting its last access time or position. There is no
+     * way to do this with the LinkedHashMap!
+     * <p>
+     * @param key Identifies item to find
+     * @return Element matching key if found, or null
+     * @throws IOException
+     */
+    @Override
+    public ICacheElement<K, V> getQuiet( K key )
+        throws IOException
+    {
+        return map.get( key ).ce;
+    }
+
+    /**
+     * Get an item from the cache
+     * <p>
+     * @param key Identifies item to find
+     * @return ICacheElement<K, V> if found, else null
+     * @throws IOException
+     */
+    @Override
+    public synchronized ICacheElement<K, V> get( K key )
+        throws IOException
+    {
+        MemoryElementDescriptor<K, V> me = null;
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "getting item from cache " + cacheName + " for key " + key );
+        }
+
+        me = map.get( key );
+
+        if ( me != null )
+        {
+            hitCnt++;
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( cacheName + ": LRUMemoryCache hit for " + key );
+            }
+            return me.ce;
+        }
+        else
+        {
+            missCnt++;
+            log.debug( cacheName + ": LRUMemoryCache miss for " + key );
+        }
+
+        return null;
+    }
+
+    /**
+     * Removes an item from the cache. This method handles hierarchical removal. If the key is a
+     * String and ends with the CacheConstants.NAME_COMPONENT_DELIMITER, then all items with keys
+     * starting with the argument String will be removed.
+     * <p>
+     * @param key
+     * @return true if removed
+     * @throws IOException
+     */
+    @Override
+    public synchronized boolean remove( K key )
+        throws IOException
+    {
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "removing item for key: " + key );
+        }
+
+        boolean removed = false;
+
+        // handle partial removal
+        if ( key instanceof String && ( (String) key ).endsWith( CacheConstants.NAME_COMPONENT_DELIMITER ) )
+        {
+            // remove all keys of the same name hierarchy.
+            synchronized ( map )
+            {
+                for (Iterator<Map.Entry<K, MemoryElementDescriptor<K, V>>> itr = map.entrySet().iterator(); itr.hasNext(); )
+                {
+                    Map.Entry<K, MemoryElementDescriptor<K, V>> entry = itr.next();
+                    K k = entry.getKey();
+
+                    if ( k instanceof String && ( (String) k ).startsWith( key.toString() ) )
+                    {
+                        itr.remove();
+                        removed = true;
+                    }
+                }
+            }
+        }
+        else if ( key instanceof GroupAttrName && ((GroupAttrName<?>)key).attrName == null )
+        {
+            // remove all keys of the same name hierarchy.
+            synchronized ( map )
+            {
+                for (Iterator<Map.Entry<K, MemoryElementDescriptor<K, V>>> itr = map.entrySet().iterator(); itr.hasNext(); )
+                {
+                    Map.Entry<K, MemoryElementDescriptor<K, V>> entry = itr.next();
+                    K k = entry.getKey();
+
+                    if ( k instanceof GroupAttrName &&
+                        ((GroupAttrName<?>)k).groupId.equals(((GroupAttrName<?>)key).groupId) )
+                    {
+                        itr.remove();
+                        removed = true;
+                    }
+                }
+            }
+        }
+        else
+        {
+            // remove single item.
+            MemoryElementDescriptor<K, V> me = map.remove( key );
+            if ( me != null )
+            {
+                removed = true;
+            }
+        }
+
+        return removed;
+    }
+
+    /**
+     * Get an Array of the keys for all elements in the memory cache
+     * <p>
+     * @return An Object[]
+     */
+    @Override
+    public Set<K> getKeySet()
+    {
+        // need a better locking strategy here.
+        synchronized ( this )
+        {
+            // may need to lock to map here?
+            return new LinkedHashSet<K>(map.keySet());
+        }
+    }
+
+    /**
+     * This returns semi-structured information on the memory cache, such as the size, put count,
+     * hit count, and miss count.
+     * <p>
+     * @return IStats
+     */
+    @Override
+    public synchronized IStats getStatistics()
+    {
+        IStats stats = new Stats();
+        stats.setTypeName( "LHMLRU Memory Cache" );
+
+        ArrayList<IStatElement<?>> elems = new ArrayList<IStatElement<?>>();
+
+        elems.add(new StatElement<Integer>( "Map Size", Integer.valueOf(map.size()) ) );
+        elems.add(new StatElement<Integer>( "Put Count", Integer.valueOf(putCnt) ) );
+        elems.add(new StatElement<Integer>( "Hit Count", Integer.valueOf(hitCnt) ) );
+        elems.add(new StatElement<Integer>( "Miss Count", Integer.valueOf(missCnt) ) );
+
+        stats.setStatElements( elems );
+
+        // int rate = ((hitCnt + missCnt) * 100) / (hitCnt * 100) * 100;
+        // buf.append("\n Hit Rate = " + rate + " %" );
+
+        return stats;
+    }
+
+    // ---------------------------------------------------------- debug methods
+
+    /**
+     * Dump the cache entries from first to last for debugging.
+     */
+    public void dumpCacheEntries()
+    {
+        dumpMap();
+    }
+
+    /**
+     * This can't be implemented.
+     * <p>
+     * @param numberToFree
+     * @return 0
+     * @throws IOException
+     */
+    @Override
+    public int freeElements( int numberToFree )
+        throws IOException
+    {
+        // can't be implemented using the LHM
+        return 0;
+    }
+
+    // ---------------------------------------------------------- extended map
+
+    /**
+     * Implementation of removeEldestEntry in LinkedHashMap
+     */
+    public class LHMSpooler
+        extends java.util.LinkedHashMap<K, MemoryElementDescriptor<K, V>>
+    {
+        /** Don't change. */
+        private static final long serialVersionUID = -1255907868906762484L;
+
+        /**
+         * Initialize to a small size--for now, 1/2 of max 3rd variable "true" indicates that it
+         * should be access and not time governed. This could be configurable.
+         */
+        public LHMSpooler()
+        {
+            super( (int) ( cache.getCacheAttributes().getMaxObjects() * .5 ), .75F, true );
+        }
+
+        /**
+         * Remove eldest. Automatically called by LinkedHashMap.
+         * <p>
+         * @param eldest
+         * @return true if removed
+         */
+        @SuppressWarnings("synthetic-access")
+        @Override
+        protected boolean removeEldestEntry( Map.Entry<K, MemoryElementDescriptor<K, V>> eldest )
+        {
+            ICacheElement<K, V> element = eldest.getValue().ce;
+
+            if ( size() <= cache.getCacheAttributes().getMaxObjects() )
+            {
+                return false;
+            }
+            else
+            {
+
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "LHMLRU max size: " + cache.getCacheAttributes().getMaxObjects()
+                        + ".  Spooling element, key: " + element.getKey() );
+                }
+                spoolToDisk( element );
+
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "LHMLRU size: " + map.size() );
+                }
+            }
+            return true;
+        }
+
+        /**
+         * Puts the element in the DiskStore
+         * <p>
+         * @param element The CacheElement
+         */
+        @SuppressWarnings("synthetic-access")
+        private void spoolToDisk( ICacheElement<K, V> element )
+        {
+            cache.spoolToDisk( element );
+
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( cache.getCacheName() + "Spooled element to disk: " + element.getKey() );
+            }
+        }
+    }
+}
diff --git a/src/org/apache/commons/jcs/engine/memory/lru/LRUMemoryCache.java b/src/org/apache/commons/jcs/engine/memory/lru/LRUMemoryCache.java
new file mode 100644
index 0000000..ab36421
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/memory/lru/LRUMemoryCache.java
@@ -0,0 +1,67 @@
+package org.apache.commons.jcs.engine.memory.lru;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.memory.AbstractDoubleLinkedListMemoryCache;
+import org.apache.commons.jcs.engine.memory.util.MemoryElementDescriptor;
+
+import java.io.IOException;
+
+/**
+ * A fast reference management system. The least recently used items move to the end of the list and
+ * get spooled to disk if the cache hub is configured to use a disk cache. Most of the cache
+ * bottlenecks are in IO. There are no io bottlenecks here, it's all about processing power.
+ * <p>
+ * Even though there are only a few adjustments necessary to maintain the double linked list, we
+ * might want to find a more efficient memory manager for large cache regions.
+ * <p>
+ * The LRUMemoryCache is most efficient when the first element is selected. The smaller the region,
+ * the better the chance that this will be the case. < .04 ms per put, p3 866, 1/10 of that per get
+ */
+public class LRUMemoryCache<K, V>
+    extends AbstractDoubleLinkedListMemoryCache<K, V>
+{
+    /**
+     * Puts an item to the cache. Removes any pre-existing entries of the same key from the linked
+     * list and adds this one first.
+     * <p>
+     * @param ce The cache element, or entry wrapper
+     * @return MemoryElementDescriptor the new node
+     * @throws IOException
+     */
+    @Override
+    protected MemoryElementDescriptor<K, V> adjustListForUpdate( ICacheElement<K, V> ce )
+        throws IOException
+    {
+        return addFirst( ce );
+    }
+
+    /**
+     * Makes the item the first in the list.
+     * <p>
+     * @param me
+     */
+    @Override
+    protected void adjustListForGet( MemoryElementDescriptor<K, V> me )
+    {
+        list.makeFirst( me );
+    }
+}
diff --git a/src/org/apache/commons/jcs/engine/memory/lru/package.html b/src/org/apache/commons/jcs/engine/memory/lru/package.html
new file mode 100644
index 0000000..af2bde5
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/memory/lru/package.html
@@ -0,0 +1,25 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<html>
+  <head>
+  </head>
+  <body>
+    The primary memory plugin using a 'least recently used' removal policy.
+  </body>
+</html>
diff --git a/src/org/apache/commons/jcs/engine/memory/mru/MRUMemoryCache.java b/src/org/apache/commons/jcs/engine/memory/mru/MRUMemoryCache.java
new file mode 100644
index 0000000..4a2c936
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/memory/mru/MRUMemoryCache.java
@@ -0,0 +1,63 @@
+package org.apache.commons.jcs.engine.memory.mru;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.memory.AbstractDoubleLinkedListMemoryCache;
+import org.apache.commons.jcs.engine.memory.util.MemoryElementDescriptor;
+
+import java.io.IOException;
+import java.io.Serializable;
+
+/**
+ * The most recently used items move to the front of the list and get spooled to disk if the cache
+ * hub is configured to use a disk cache.
+ */
+public class MRUMemoryCache<K extends Serializable, V extends Serializable>
+    extends AbstractDoubleLinkedListMemoryCache<K, V>
+{
+    /**
+     * Adds the item to the front of the list. A put doesn't count as a usage.
+     * <p>
+     * It's not clear if the put operation should be different. Perhaps this should remove the oldest
+     * if full, and then put.
+     * <p>
+     * @param ce
+     * @return MemoryElementDescriptor the new node
+     * @throws IOException
+     */
+    @Override
+    protected MemoryElementDescriptor<K, V> adjustListForUpdate( ICacheElement<K, V> ce )
+        throws IOException
+    {
+        return addFirst( ce );
+    }
+
+    /**
+     * Makes the item the last in the list.
+     * <p>
+     * @param me
+     */
+    @Override
+    protected void adjustListForGet( MemoryElementDescriptor<K, V> me )
+    {
+        list.makeLast( me );
+    }
+}
diff --git a/src/org/apache/commons/jcs/engine/memory/mru/package.html b/src/org/apache/commons/jcs/engine/memory/mru/package.html
new file mode 100644
index 0000000..2377c2d
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/memory/mru/package.html
@@ -0,0 +1,26 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<html>
+  <head>
+  </head>
+  <body>
+     A memory plugin implemented using a 'most recently used' removal policy.
+     In general this is slow and should not be used.
+  </body>
+</html>
diff --git a/src/org/apache/commons/jcs/engine/memory/package.html b/src/org/apache/commons/jcs/engine/memory/package.html
new file mode 100644
index 0000000..47f02c2
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/memory/package.html
@@ -0,0 +1,25 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<html>
+  <head>
+  </head>
+  <body>
+    Parent package for memory type plugins.
+  </body>
+</html>
diff --git a/src/org/apache/commons/jcs/engine/memory/shrinking/ShrinkerThread.java b/src/org/apache/commons/jcs/engine/memory/shrinking/ShrinkerThread.java
new file mode 100644
index 0000000..883e935
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/memory/shrinking/ShrinkerThread.java
@@ -0,0 +1,222 @@
+package org.apache.commons.jcs.engine.memory.shrinking;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.behavior.IElementAttributes;
+import org.apache.commons.jcs.engine.control.CompositeCache;
+import org.apache.commons.jcs.engine.control.event.behavior.ElementEventType;
+import org.apache.commons.jcs.engine.memory.behavior.IMemoryCache;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.util.Set;
+
+/**
+ * A background memory shrinker. Memory problems and concurrent modification exception caused by
+ * acting directly on an iterator of the underlying memory cache should have been solved.
+ * @version $Id: ShrinkerThread.java 1593843 2014-05-11 19:43:30Z rmannibucau $
+ */
+public class ShrinkerThread<K, V>
+    implements Runnable
+{
+    /** The logger */
+    private static final Log log = LogFactory.getLog( ShrinkerThread.class );
+
+    /** The CompositeCache instance which this shrinker is watching */
+    private final CompositeCache<K, V> cache;
+
+    /** Maximum memory idle time for the whole cache */
+    private final long maxMemoryIdleTime;
+
+    /** Maximum number of items to spool per run. Default is -1, or no limit. */
+    private final int maxSpoolPerRun;
+
+    /** Should we limit the number spooled per run. If so, the maxSpoolPerRun will be used. */
+    private boolean spoolLimit = false;
+
+    /**
+     * Constructor for the ShrinkerThread object.
+     * <p>
+     * @param cache The MemoryCache which the new shrinker should watch.
+     */
+    public ShrinkerThread( CompositeCache<K, V> cache )
+    {
+        super();
+
+        this.cache = cache;
+
+        long maxMemoryIdleTimeSeconds = cache.getCacheAttributes().getMaxMemoryIdleTimeSeconds();
+
+        if ( maxMemoryIdleTimeSeconds < 0 )
+        {
+            this.maxMemoryIdleTime = -1;
+        }
+        else
+        {
+            this.maxMemoryIdleTime = maxMemoryIdleTimeSeconds * 1000;
+        }
+
+        this.maxSpoolPerRun = cache.getCacheAttributes().getMaxSpoolPerRun();
+        if ( this.maxSpoolPerRun != -1 )
+        {
+            this.spoolLimit = true;
+        }
+
+    }
+
+    /**
+     * Main processing method for the ShrinkerThread object
+     */
+    @Override
+    public void run()
+    {
+        shrink();
+    }
+
+    /**
+     * This method is called when the thread wakes up. First the method obtains an array of keys for
+     * the cache region. It iterates through the keys and tries to get the item from the cache
+     * without affecting the last access or position of the item. The item is checked for
+     * expiration, the expiration check has 3 parts:
+     * <ol>
+     * <li>Has the cacheattributes.MaxMemoryIdleTimeSeconds defined for the region been exceeded? If
+     * so, the item should be move to disk.</li> <li>Has the item exceeded MaxLifeSeconds defined in
+     * the element attributes? If so, remove it.</li> <li>Has the item exceeded IdleTime defined in
+     * the element attributes? If so, remove it. If there are event listeners registered for the
+     * cache element, they will be called.</li>
+     * </ol>
+     * TODO Change element event handling to use the queue, then move the queue to the region and
+     *       access via the Cache.
+     */
+    protected void shrink()
+    {
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Shrinking memory cache for: " + this.cache.getCacheName() );
+        }
+
+        IMemoryCache<K, V> memCache = cache.getMemoryCache();
+
+        try
+        {
+            Set<K> keys = memCache.getKeySet();
+            int size = keys.size();
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Keys size: " + size );
+            }
+
+            ICacheElement<K, V> cacheElement;
+            IElementAttributes attributes;
+
+            int spoolCount = 0;
+
+            for (K key : keys)
+            {
+                cacheElement = memCache.getQuiet( key );
+
+                if ( cacheElement == null )
+                {
+                    continue;
+                }
+
+                attributes = cacheElement.getElementAttributes();
+
+                boolean remove = false;
+
+                long now = System.currentTimeMillis();
+
+                // If the element is not eternal, check if it should be
+                // removed and remove it if so.
+                if ( !cacheElement.getElementAttributes().getIsEternal() )
+                {
+                    remove = cache.isExpired( cacheElement, now,
+                            ElementEventType.EXCEEDED_MAXLIFE_BACKGROUND,
+                            ElementEventType.EXCEEDED_IDLETIME_BACKGROUND );
+
+                    if ( remove )
+                    {
+                        memCache.remove( cacheElement.getKey() );
+                    }
+                }
+
+                // If the item is not removed, check is it has been idle
+                // long enough to be spooled.
+
+                if ( !remove && maxMemoryIdleTime != -1 )
+                {
+                    if ( !spoolLimit || spoolCount < this.maxSpoolPerRun )
+                    {
+                        final long lastAccessTime = attributes.getLastAccessTime();
+
+                        if ( lastAccessTime + maxMemoryIdleTime < now )
+                        {
+                            if ( log.isDebugEnabled() )
+                            {
+                                log.debug( "Exceeded memory idle time: " + cacheElement.getKey() );
+                            }
+
+                            // Shouldn't we ensure that the element is
+                            // spooled before removing it from memory?
+                            // No the disk caches have a purgatory. If it fails
+                            // to spool that does not affect the
+                            // responsibilities of the memory cache.
+
+                            spoolCount++;
+
+                            memCache.remove( cacheElement.getKey() );
+
+                            memCache.waterfal( cacheElement );
+
+                            key = null;
+                            cacheElement = null;
+                        }
+                    }
+                    else
+                    {
+                        if ( log.isDebugEnabled() )
+                        {
+                            log.debug( "spoolCount = '" + spoolCount + "'; " + "maxSpoolPerRun = '" + maxSpoolPerRun
+                                + "'" );
+                        }
+
+                        // stop processing if limit has been reached.
+                        if ( spoolLimit && spoolCount >= this.maxSpoolPerRun )
+                        {
+                            keys = null;
+                            return;
+                        }
+                    }
+                }
+            }
+        }
+        catch ( Throwable t )
+        {
+            log.info( "Unexpected trouble in shrink cycle", t );
+
+            // concurrent modifications should no longer be a problem
+            // It is up to the IMemoryCache to return an array of keys
+
+            // stop for now
+            return;
+        }
+    }
+}
diff --git a/src/org/apache/commons/jcs/engine/memory/util/MemoryElementDescriptor.java b/src/org/apache/commons/jcs/engine/memory/util/MemoryElementDescriptor.java
new file mode 100644
index 0000000..fbd24ea
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/memory/util/MemoryElementDescriptor.java
@@ -0,0 +1,47 @@
+package org.apache.commons.jcs.engine.memory.util;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.utils.struct.DoubleLinkedListNode;
+
+/**
+ * This wrapper is needed for double linked lists.
+ */
+public class MemoryElementDescriptor<K, V>
+    extends DoubleLinkedListNode<ICacheElement<K, V>>
+{
+    /** Don't change */
+    private static final long serialVersionUID = -1905161209035522460L;
+
+    /** The CacheElement wrapped by this descriptor */
+    public final ICacheElement<K, V> ce; // TODO privatise
+
+    /**
+     * Constructs a usable MemoryElementDescriptor.
+     * <p>
+     * @param ce
+     */
+    public MemoryElementDescriptor( ICacheElement<K, V> ce )
+    {
+        super( ce );
+        this.ce = ce;
+    }
+}
diff --git a/src/org/apache/commons/jcs/engine/package.html b/src/org/apache/commons/jcs/engine/package.html
new file mode 100644
index 0000000..9cb3956
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/package.html
@@ -0,0 +1,25 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<html>
+  <head>
+  </head>
+  <body>
+     Interfaces used by the core and the auxiliary caches.
+  </body>
+</html>
diff --git a/src/org/apache/commons/jcs/engine/stats/CacheStats.java b/src/org/apache/commons/jcs/engine/stats/CacheStats.java
new file mode 100644
index 0000000..eacede7
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/stats/CacheStats.java
@@ -0,0 +1,116 @@
+package org.apache.commons.jcs.engine.stats;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.stats.behavior.ICacheStats;
+import org.apache.commons.jcs.engine.stats.behavior.IStats;
+
+import java.util.List;
+
+/**
+ * This class stores cache historical and statistics data for a region.
+ * <p>
+ * Only the composite cache knows what the hit count across all auxiliaries is.
+ */
+public class CacheStats
+    extends Stats
+    implements ICacheStats
+{
+    /** Don't change. */
+    private static final long serialVersionUID = 529914708798168590L;
+
+    /** The region */
+    private String regionName = null;
+
+    /** What that auxiliaries are reporting. */
+    private List<IStats> auxStats = null;
+
+    /**
+     * Stats are for a region, though auxiliary data may be for more.
+     * <p>
+     * @return The region name
+     */
+    @Override
+    public String getRegionName()
+    {
+        return regionName;
+    }
+
+    /**
+     * Stats are for a region, though auxiliary data may be for more.
+     * <p>
+     * @param name - The region name
+     */
+    @Override
+    public void setRegionName( String name )
+    {
+        regionName = name;
+    }
+
+    /**
+     * @return IStats[]
+     */
+    @Override
+    public List<IStats> getAuxiliaryCacheStats()
+    {
+        return auxStats;
+    }
+
+    /**
+     * @param stats
+     */
+    @Override
+    public void setAuxiliaryCacheStats( List<IStats> stats )
+    {
+        auxStats = stats;
+    }
+
+    /**
+     * @return readable string that can be logged.
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder buf = new StringBuilder();
+
+        buf.append( "Region Name = " + regionName );
+
+        if ( getStatElements() != null )
+        {
+            for ( Object stat : getStatElements() )
+            {
+                buf.append( "\n" );
+                buf.append( stat );
+            }
+        }
+
+        if ( auxStats != null )
+        {
+            for ( Object auxStat : auxStats )
+            {
+                buf.append( "\n" );
+                buf.append( "---------------------------" );
+                buf.append( auxStat );
+            }
+        }
+
+        return buf.toString();
+    }
+}
diff --git a/src/org/apache/commons/jcs/engine/stats/StatElement.java b/src/org/apache/commons/jcs/engine/stats/StatElement.java
new file mode 100644
index 0000000..29e7b26
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/stats/StatElement.java
@@ -0,0 +1,104 @@
+package org.apache.commons.jcs.engine.stats;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.stats.behavior.IStatElement;
+
+/**
+ * This is a stat data holder.
+ */
+public class StatElement<V>
+    implements IStatElement<V>
+{
+    /** Don't change */
+    private static final long serialVersionUID = -2982373725267618092L;
+
+    /** name of the stat */
+    private String name = null;
+
+    /** the data */
+    private V data = null;
+
+    /**
+     * Constructor
+     *
+     * @param name
+     * @param data
+     */
+    public StatElement(String name, V data)
+    {
+        super();
+        this.name = name;
+        this.data = data;
+    }
+
+    /**
+     * Get the name of the stat element, ex. HitCount
+     * <p>
+     * @return the stat element name
+     */
+    @Override
+    public String getName()
+    {
+        return name;
+    }
+
+    /**
+     * @param name
+     */
+    @Override
+    public void setName( String name )
+    {
+        this.name = name;
+    }
+
+    /**
+     * Get the data, ex. for hit count you would get a value for some number.
+     * <p>
+     * @return data
+     */
+    @Override
+    public V getData()
+    {
+        return data;
+    }
+
+    /**
+     * Set the data for this element.
+     * <p>
+     * @param data
+     */
+    @Override
+    public void setData( V data )
+    {
+        this.data = data;
+    }
+
+    /**
+     * @return a readable string.
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder buf = new StringBuilder();
+        buf.append( name + " = " + data );
+        return buf.toString();
+    }
+}
diff --git a/src/org/apache/commons/jcs/engine/stats/Stats.java b/src/org/apache/commons/jcs/engine/stats/Stats.java
new file mode 100644
index 0000000..dfbf388
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/stats/Stats.java
@@ -0,0 +1,99 @@
+package org.apache.commons.jcs.engine.stats;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.stats.behavior.IStatElement;
+import org.apache.commons.jcs.engine.stats.behavior.IStats;
+
+import java.util.List;
+
+/**
+ * @author aaronsm
+ */
+public class Stats
+    implements IStats
+{
+    /** Don't change */
+    private static final long serialVersionUID = 227327902875154010L;
+
+    /** The stats */
+    private List<IStatElement<?>> stats = null;
+
+    /** The type of stat */
+    private String typeName = null;
+
+    /**
+     * @return IStatElement[]
+     */
+    @Override
+    public List<IStatElement<?>> getStatElements()
+    {
+        return stats;
+    }
+
+    /**
+     * @param stats
+     */
+    @Override
+    public void setStatElements( List<IStatElement<?>> stats )
+    {
+        this.stats = stats;
+    }
+
+    /**
+     * @return typeName
+     */
+    @Override
+    public String getTypeName()
+    {
+        return typeName;
+    }
+
+    /**
+     * @param name
+     */
+    @Override
+    public void setTypeName( String name )
+    {
+        typeName = name;
+    }
+
+    /**
+     * @return the stats in a readable string
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder buf = new StringBuilder();
+
+        buf.append( typeName );
+
+        if ( stats != null )
+        {
+            for (Object stat : stats)
+            {
+                buf.append( "\n" );
+                buf.append( stat );
+            }
+        }
+
+        return buf.toString();
+    }
+}
diff --git a/src/org/apache/commons/jcs/engine/stats/behavior/ICacheStats.java b/src/org/apache/commons/jcs/engine/stats/behavior/ICacheStats.java
new file mode 100644
index 0000000..4efd282
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/stats/behavior/ICacheStats.java
@@ -0,0 +1,51 @@
+package org.apache.commons.jcs.engine.stats.behavior;
+
+import java.util.List;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * This holds stat information on a region. It contains both auxiliary and core stats.
+ */
+public interface ICacheStats
+    extends IStats
+{
+    /**
+     * Stats are for a region, though auxiliary data may be for more.
+     * <p>
+     * @return The region name
+     */
+    String getRegionName();
+
+    /**
+     * @param name
+     */
+    void setRegionName( String name );
+
+    /**
+     * @return IStats[]
+     */
+    List<IStats> getAuxiliaryCacheStats();
+
+    /**
+     * @param stats
+     */
+    void setAuxiliaryCacheStats( List<IStats> stats );
+}
diff --git a/src/org/apache/commons/jcs/engine/stats/behavior/IStatElement.java b/src/org/apache/commons/jcs/engine/stats/behavior/IStatElement.java
new file mode 100644
index 0000000..64139df
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/stats/behavior/IStatElement.java
@@ -0,0 +1,54 @@
+package org.apache.commons.jcs.engine.stats.behavior;
+
+import java.io.Serializable;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * IAuxiliaryCacheStats will hold these IStatElements.
+ */
+public interface IStatElement<V> extends Serializable
+{
+    /**
+     * Get the name of the stat element, ex. HitCount
+     * <p>
+     * @return the stat element name
+     */
+    String getName();
+
+    /**
+     * @param name
+     */
+    void setName( String name );
+
+    /**
+     * Get the data, ex. for hit count you would get a value for some number.
+     * <p>
+     * @return data
+     */
+    V getData();
+
+    /**
+     * Set the data for this element.
+     * <p>
+     * @param data
+     */
+    void setData( V data );
+}
diff --git a/src/org/apache/commons/jcs/engine/stats/behavior/IStats.java b/src/org/apache/commons/jcs/engine/stats/behavior/IStats.java
new file mode 100644
index 0000000..352225a
--- /dev/null
+++ b/src/org/apache/commons/jcs/engine/stats/behavior/IStats.java
@@ -0,0 +1,63 @@
+package org.apache.commons.jcs.engine.stats.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * This interface defines the common behavior for a stats holder.
+ *
+ * @author aaronsm
+ *
+ */
+public interface IStats
+    extends Serializable
+{
+
+    /**
+     * Return generic statistical or historical data.
+     *
+     * @return list of IStatElements
+     */
+    List<IStatElement<?>> getStatElements();
+
+    /**
+     * Set the generic statistical or historical data.
+     *
+     * @param stats
+     */
+    void setStatElements( List<IStatElement<?>> stats );
+
+    /**
+     * Get the type name, such as "LRU Memory Cache." No formal type is defined.
+     *
+     * @return String
+     */
+    String getTypeName();
+
+    /**
+     * Set the type name, such as "LRU Memory Cache." No formal type is defined.
+     * If we need formal types, we can use the cachetype param
+     *
+     * @param name
+     */
+    void setTypeName( String name );
+}
diff --git a/src/org/apache/commons/jcs/io/ObjectInputStreamClassLoaderAware.java b/src/org/apache/commons/jcs/io/ObjectInputStreamClassLoaderAware.java
new file mode 100644
index 0000000..dcb142d
--- /dev/null
+++ b/src/org/apache/commons/jcs/io/ObjectInputStreamClassLoaderAware.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.commons.jcs.io;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectStreamClass;
+import java.lang.reflect.Proxy;
+
+public class ObjectInputStreamClassLoaderAware extends ObjectInputStream
+{
+    private final ClassLoader classLoader;
+
+    public ObjectInputStreamClassLoaderAware(final InputStream in, final ClassLoader classLoader) throws IOException
+    {
+        super(in);
+        this.classLoader = classLoader != null ? classLoader : Thread.currentThread().getContextClassLoader();
+    }
+
+    @Override
+    protected Class<?> resolveClass(final ObjectStreamClass desc) throws ClassNotFoundException
+    {
+        return Class.forName(desc.getName(), false, classLoader);
+    }
+
+    @Override
+    protected Class resolveProxyClass(final String[] interfaces) throws IOException, ClassNotFoundException
+    {
+        final Class[] cinterfaces = new Class[interfaces.length];
+        for (int i = 0; i < interfaces.length; i++)
+        {
+            cinterfaces[i] = Class.forName(interfaces[i], false, classLoader);
+        }
+
+        try
+        {
+            return Proxy.getProxyClass(classLoader, cinterfaces);
+        }
+        catch (IllegalArgumentException e)
+        {
+            throw new ClassNotFoundException(null, e);
+        }
+    }
+
+}
diff --git a/src/org/apache/commons/jcs/package.html b/src/org/apache/commons/jcs/package.html
new file mode 100644
index 0000000..bce936d
--- /dev/null
+++ b/src/org/apache/commons/jcs/package.html
@@ -0,0 +1,26 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<html>
+  <head>
+  </head>
+  <body>
+     Contains the class JCS which provides a simple interface for clients to use
+     JCS.
+  </body>
+</html>
diff --git a/src/org/apache/commons/jcs/utils/access/AbstractJCSWorkerHelper.java b/src/org/apache/commons/jcs/utils/access/AbstractJCSWorkerHelper.java
new file mode 100644
index 0000000..2c727a5
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/access/AbstractJCSWorkerHelper.java
@@ -0,0 +1,59 @@
+package org.apache.commons.jcs.utils.access;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * This is an abstract template for JCSWorkerHelper implementations. it simple has a convenience
+ * method for setting the finished flag.
+ * <p>
+ * @author tsavo
+ */
+public abstract class AbstractJCSWorkerHelper
+    implements JCSWorkerHelper
+{
+    /** finished flag. Can't we use wait notify? */
+    private boolean finished = false;
+
+    /**
+     * Default
+     */
+    public AbstractJCSWorkerHelper()
+    {
+        super();
+    }
+
+    /**
+     * @return finished
+     */
+    @Override
+    public boolean isFinished()
+    {
+        return finished;
+    }
+
+    /**
+     * @param isFinished
+     */
+    @Override
+    public void setFinished( boolean isFinished )
+    {
+        finished = isFinished;
+    }
+}
diff --git a/src/org/apache/commons/jcs/utils/access/JCSWorker.java b/src/org/apache/commons/jcs/utils/access/JCSWorker.java
new file mode 100644
index 0000000..dfe6417
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/access/JCSWorker.java
@@ -0,0 +1,306 @@
+package org.apache.commons.jcs.utils.access;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.JCS;
+import org.apache.commons.jcs.access.CacheAccess;
+import org.apache.commons.jcs.access.GroupCacheAccess;
+import org.apache.commons.jcs.access.exception.CacheException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Utility class to encapsulate doing a piece of work, and caching the results
+ * in JCS. Simply construct this class with the region name for the Cache and
+ * keep a static reference to it instead of the JCS itself. Then make a new
+ * org.apache.commons.jcs.utils.access.AbstractJCSWorkerHelper and implement Object
+ * doWork() and do the work in there, returning the object to be cached. Then
+ * call .getResult() with the key and the AbstractJCSWorkerHelper to get the
+ * result of the work. If the object isn't already in the Cache,
+ * AbstractJCSWorkerHelper.doWork() will get called, and the result will be put
+ * into the cache. If the object is already in cache, the cached result will be
+ * returned instead.
+ * <p>
+ * As an added bonus, multiple JCSWorkers with the same region, and key won't do
+ * the work multiple times: The first JCSWorker to get started will do the work,
+ * and all subsequent workers with the same region, group, and key will wait on
+ * the first one and use his resulting work instead of doing the work
+ * themselves.
+ * <p>
+ * This is ideal when the work being done is a query to the database where the
+ * results may take time to be retrieved.
+ * <p>
+ * For example:
+ *
+ * <pre>
+ *      public static JCSWorker cachingWorker = new JCSWorker("example region");
+ *   		public Object getSomething(Serializable aKey){
+ *        JCSWorkerHelper helper = new AbstractJCSWorkerHelper(){
+ *          public Object doWork(){
+ *            // Do some (DB?) work here which results in a list
+ *            // This only happens if the cache dosn't have a item in this region for aKey
+ *            // Note this is especially useful with Hibernate, which will cache indiviual
+ *            // Objects, but not entire query result sets.
+ *            List results = query.list();
+ *            // Whatever we return here get's cached with aKey, and future calls to
+ *            // getResult() on a CachedWorker with the same region and key will return that instead.
+ *            return results;
+ *        };
+ *        List result = worker.getResult(aKey, helper);
+ *      }
+ * </pre>
+ *
+ * This is essentially the same as doing:
+ *
+ * <pre>
+ * JCS jcs = JCS.getInstance( "exampleregion" );
+ * List results = (List) jcs.get( aKey );
+ * if ( results != null )
+ * {
+ *     //do the work here
+ *     results = query.list();
+ *     jcs.put( aKey, results );
+ * }
+ * </pre>
+ *
+ * <p>
+ * But has the added benefit of the work-load sharing; under normal
+ * circumstances if multiple threads all tried to do the same query at the same
+ * time, the same query would happen multiple times on the database, and the
+ * resulting object would get put into JCS multiple times.
+ * <p>
+ * @author Travis Savo
+ */
+public class JCSWorker<K extends Serializable, V extends Serializable>
+{
+    /** The logger */
+    private static final Log logger = LogFactory.getLog( JCSWorker.class );
+
+    /** The cache we are working with */
+    private CacheAccess<K, V> cache;
+
+    /** The cache we are working with */
+    private GroupCacheAccess<K, V> groupCache;
+
+    /**
+     * Map to hold who's doing work presently.
+     */
+    private static volatile Map<String, JCSWorkerHelper> map = new HashMap<String, JCSWorkerHelper>();
+
+    /**
+     * Region for the JCS cache.
+     */
+    private final String region;
+
+    /**
+     * Constructor which takes a region for the JCS cache.
+     * @param aRegion
+     *            The Region to use for the JCS cache.
+     */
+    public JCSWorker( final String aRegion )
+    {
+        region = aRegion;
+        try
+        {
+            cache = JCS.getInstance( aRegion );
+            groupCache = JCS.getGroupCacheInstance( aRegion );
+        }
+        catch ( CacheException e )
+        {
+            throw new RuntimeException( e.getMessage() );
+        }
+    }
+
+    /**
+     * Getter for the region of the JCS Cache.
+     * @return The JCS region in which the result will be cached.
+     */
+    public String getRegion()
+    {
+        return region;
+    }
+
+    /**
+     * Gets the cached result for this region/key OR does the work and caches
+     * the result, returning the result. If the result has not been cached yet,
+     * this calls doWork() on the JCSWorkerHelper to do the work and cache the
+     * result. This is also an opportunity to do any post processing of the
+     * result in your CachedWorker implementation.
+     * @param aKey
+     *            The key to get/put with on the Cache.
+     * @param aWorker
+     *            The JCSWorkerHelper implementing Object doWork(). This gets
+     *            called if the cache get misses, and the result is put into
+     *            cache.
+     * @return The result of doing the work, or the cached result.
+     * @throws Exception
+     *             Throws an exception if anything goes wrong while doing the
+     *             work.
+     */
+    public V getResult( K aKey, JCSWorkerHelper aWorker )
+        throws Exception
+    {
+        return run( aKey, null, aWorker );
+    }
+
+    /**
+     * Gets the cached result for this region/key OR does the work and caches
+     * the result, returning the result. If the result has not been cached yet,
+     * this calls doWork() on the JCSWorkerHelper to do the work and cache the
+     * result. This is also an opertunity to do any post processing of the
+     * result in your CachedWorker implementation.
+     * @param aKey
+     *            The key to get/put with on the Cache.
+     * @param aGroup
+     *            The cache group to put the result in.
+     * @param aWorker
+     *            The JCSWorkerHelper implementing Object doWork(). This gets
+     *            called if the cache get misses, and the result is put into
+     *            cache.
+     * @return The result of doing the work, or the cached result.
+     * @throws Exception
+     *             Throws an exception if anything goes wrong while doing the
+     *             work.
+     */
+    public V getResult( K aKey, String aGroup, JCSWorkerHelper aWorker )
+        throws Exception
+    {
+        return run( aKey, aGroup, aWorker );
+    }
+
+    /**
+     * Try and get the object from the cache, and if it's not there, do the work
+     * and cache it. This also ensures that only one CachedWorker is doing the
+     * work and subsequent calls to a CachedWorker with identical
+     * region/key/group will wait on the results of this call. It will call the
+     * JCSWorkerHelper.doWork() if the cache misses, and will put the result.
+     * @param aKey
+     * @param aGroup
+     * @param aHelper
+     * @return Either the result of doing the work, or the cached result.
+     * @throws Exception
+     *             If something goes wrong while doing the work, throw an
+     *             exception.
+     */
+    private V run( K aKey, String aGroup, JCSWorkerHelper aHelper )
+        throws Exception
+    {
+        V result = null;
+        // long start = 0;
+        // long dbTime = 0;
+        JCSWorkerHelper helper = null;
+
+        synchronized ( map )
+        {
+            // Check to see if we already have a thread doing this work.
+            helper = map.get( getRegion() + aKey );
+            if ( helper == null )
+            {
+                // If not, add ourselves as the Worker so
+                // calls in another thread will use this worker's result
+                map.put( getRegion() + aKey, aHelper );
+            }
+        }
+        if ( helper != null )
+        {
+            synchronized ( helper )
+            {
+                if ( logger.isDebugEnabled() )
+                {
+                    logger.debug( "Found a worker already doing this work (" + getRegion() + ":" + aKey + ")." );
+                }
+                if ( !helper.isFinished() )
+                {
+                    helper.wait();
+                }
+                if ( logger.isDebugEnabled() )
+                {
+                    logger.debug( "Another thread finished our work for us. Using those results instead. ("
+                        + getRegion() + ":" + aKey + ")." );
+                }
+            }
+        }
+        // Do the work
+        try
+        {
+            if ( logger.isDebugEnabled() )
+            {
+                logger.debug( getRegion() + " is doing the work." );
+            }
+
+            // Try to get the item from the cache
+            if ( aGroup != null )
+            {
+                result = groupCache.getFromGroup( aKey, aGroup );
+            }
+            else
+            {
+                result = cache.get( aKey );
+            }
+            // If the cache dosn't have it, do the work.
+            if ( result == null )
+            {
+                @SuppressWarnings("unchecked") // Need to cast from Object
+                V doWork = (V)aHelper.doWork();
+                result = doWork;
+                if ( logger.isDebugEnabled() )
+                {
+                    logger.debug( "Work Done, caching: key:" + aKey + ", group:" + aGroup + ", result:" + result + "." );
+                }
+                // Stick the result of the work in the cache.
+                if ( aGroup != null )
+                {
+                    groupCache.putInGroup( aKey, aGroup, result );
+                }
+                else
+                {
+                    cache.put( aKey, result );
+                }
+            }
+            // return the result
+            return result;
+        }
+        finally
+        {
+            if ( logger.isDebugEnabled() )
+            {
+                logger.debug( getRegion() + ":" + aKey + " entered finally." );
+            }
+            synchronized ( map )
+            {
+                // Remove ourselves as the worker.
+                if ( helper == null )
+                {
+                    map.remove( getRegion() + aKey );
+                }
+                synchronized ( aHelper )
+                {
+                    aHelper.setFinished( true );
+                    // Wake everyone waiting on us
+                    aHelper.notifyAll();
+                }
+            }
+        }
+    }
+}
diff --git a/src/org/apache/commons/jcs/utils/access/JCSWorkerHelper.java b/src/org/apache/commons/jcs/utils/access/JCSWorkerHelper.java
new file mode 100644
index 0000000..2fd2b10
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/access/JCSWorkerHelper.java
@@ -0,0 +1,61 @@
+package org.apache.commons.jcs.utils.access;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Interface for doing a piece of work which is expected to be cached. This is
+ * ment to be used in conjunction with JCSWorker.
+ * <p>
+ * Implement doWork() to return the work being done. isFinished() should return
+ * false until setFinished(true) is called, after which time it should return
+ * true.
+ * <p>
+ * @author tsavo
+ */
+public interface JCSWorkerHelper
+{
+    /**
+     * Tells us whether or not the work has been completed. This will be called
+     * automatically by JCSWorker. You should not call it yourself.
+     * <p>
+     * @return True if the work has already been done, otherwise false.
+     */
+    boolean isFinished();
+
+    /**
+     * Sets whether or not the work has been done.
+     * <p>
+     * @param isFinished
+     *            True if the work has already been done, otherwise false.
+     */
+    void setFinished( boolean isFinished );
+
+    /**
+     * The method to implement to do the work that should be cached. JCSWorker
+     * will call this itself! You should not call this directly.
+     * <p>
+     * @return The result of doing the work to be cached.
+     * @throws Exception
+     *             If anything goes wrong while doing the work, an Exception
+     *             should be thrown.
+     */
+    Object doWork()
+        throws Exception;
+}
diff --git a/src/org/apache/commons/jcs/utils/config/OptionConverter.java b/src/org/apache/commons/jcs/utils/config/OptionConverter.java
new file mode 100644
index 0000000..f95efb8
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/config/OptionConverter.java
@@ -0,0 +1,427 @@
+package org.apache.commons.jcs.utils.config;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.util.Properties;
+
+/**
+ * This class is based on the log4j class org.apache.log4j.helpers.OptionConverter that was made by
+ * Ceki Gülcü Simon Kitching; Avy Sharell (sharell at online.fr) Anders Kristensen Matthieu
+ * Verbert (mve at zurich.ibm.com) A convenience class to convert property values to specific types.
+ */
+public class OptionConverter
+{
+    /** The logger */
+    private static final Log log = LogFactory.getLog( OptionConverter.class );
+
+    /** System property delimter */
+    private static final String DELIM_START = "${";
+
+    /** System property delimter */
+    private static final char DELIM_STOP = '}';
+
+    /** System property delimter start length */
+    private static final int DELIM_START_LEN = 2;
+
+    /** System property delimter end length */
+    private static final int DELIM_STOP_LEN = 1;
+
+    /** No instances please. */
+    private OptionConverter()
+    {
+        super();
+    }
+
+    /**
+     * Combines two arrays.
+     * @param l
+     * @param r
+     * @return String[]
+     */
+    public static String[] concatanateArrays( String[] l, String[] r )
+    {
+        int len = l.length + r.length;
+        String[] a = new String[len];
+
+        System.arraycopy( l, 0, a, 0, l.length );
+        System.arraycopy( r, 0, a, l.length, r.length );
+
+        return a;
+    }
+
+    /**
+     * Escapes special characters.
+     * <p>
+     * @param s
+     * @return String
+     */
+    public static String convertSpecialChars( String s )
+    {
+        char c;
+        int len = s.length();
+        StringBuilder sb = new StringBuilder( len );
+
+        int i = 0;
+        while ( i < len )
+        {
+            c = s.charAt( i++ );
+            if ( c == '\\' )
+            {
+                c = s.charAt( i++ );
+                if ( c == 'n' )
+                {
+                    c = '\n';
+                }
+                else if ( c == 'r' )
+                {
+                    c = '\r';
+                }
+                else if ( c == 't' )
+                {
+                    c = '\t';
+                }
+                else if ( c == 'f' )
+                {
+                    c = '\f';
+                }
+                else if ( c == '\b' )
+                {
+                    c = '\b';
+                }
+                else if ( c == '\"' )
+                {
+                    c = '\"';
+                }
+                else if ( c == '\'' )
+                {
+                    c = '\'';
+                }
+                else if ( c == '\\' )
+                {
+                    c = '\\';
+                }
+            }
+            sb.append( c );
+        }
+        return sb.toString();
+    }
+
+    /**
+     * Very similar to <code>System.getProperty</code> except that the {@link SecurityException} is
+     * hidden.
+     * @param key The key to search for.
+     * @param def The default value to return.
+     * @return the string value of the system property, or the default value if there is no property
+     *         with that key.
+     * @since 1.1
+     */
+
+    public static String getSystemProperty( String key, String def )
+    {
+        try
+        {
+            return System.getProperty( key, def );
+        }
+        catch ( Throwable e )
+        {
+            // MS-Java throws com.ms.security.SecurityExceptionEx
+            log.debug( "Was not allowed to read system property \"" + key + "\"." );
+            return def;
+        }
+    }
+
+    /**
+     * Creates an object for the className value of the key.
+     * <p>
+     * @param props
+     * @param key
+     * @param defaultValue
+     * @return Object that was created
+     */
+    public static <T> T instantiateByKey( Properties props, String key, T defaultValue )
+    {
+
+        // Get the value of the property in string form
+        String className = findAndSubst( key, props );
+        if ( className == null )
+        {
+            if ( log.isTraceEnabled() )
+            {
+                log.info( "Could not find value for key " + key );
+            }
+            return defaultValue;
+        }
+        // Trim className to avoid trailing spaces that cause problems.
+        return OptionConverter.instantiateByClassName( className.trim(), defaultValue );
+    }
+
+    /**
+     * If <code>value</code> is "true", then <code>true</code> is returned. If <code>value</code> is
+     * "false", then <code>true</code> is returned. Otherwise, <code>default</code> is returned.
+     * <p>
+     * Case of value is unimportant.
+     * @param value
+     * @param dEfault
+     * @return Object
+     */
+
+    public static boolean toBoolean( String value, boolean dEfault )
+    {
+        if ( value == null )
+        {
+            return dEfault;
+        }
+        String trimmedVal = value.trim();
+        if ( "true".equalsIgnoreCase( trimmedVal ) )
+        {
+            return true;
+        }
+        if ( "false".equalsIgnoreCase( trimmedVal ) )
+        {
+            return false;
+        }
+        return dEfault;
+    }
+
+    /**
+     * Converts to int.
+     * <p>
+     * @param value
+     * @param dEfault
+     * @return int
+     */
+    public static int toInt( String value, int dEfault )
+    {
+        if ( value != null )
+        {
+            String s = value.trim();
+            try
+            {
+                return Integer.valueOf( s ).intValue();
+            }
+            catch ( NumberFormatException e )
+            {
+                log.error( "[" + s + "] is not in proper int form." );
+                e.printStackTrace();
+            }
+        }
+        return dEfault;
+    }
+
+    /**
+     * @param value
+     * @param dEfault
+     * @return long
+     */
+    public static long toFileSize( String value, long dEfault )
+    {
+        if ( value == null )
+        {
+            return dEfault;
+        }
+
+        String s = value.trim().toUpperCase();
+        long multiplier = 1;
+        int index;
+
+        if ( ( index = s.indexOf( "KB" ) ) != -1 )
+        {
+            multiplier = 1024;
+            s = s.substring( 0, index );
+        }
+        else if ( ( index = s.indexOf( "MB" ) ) != -1 )
+        {
+            multiplier = 1024 * 1024;
+            s = s.substring( 0, index );
+        }
+        else if ( ( index = s.indexOf( "GB" ) ) != -1 )
+        {
+            multiplier = 1024 * 1024 * 1024;
+            s = s.substring( 0, index );
+        }
+        if ( s != null )
+        {
+            try
+            {
+                return Long.valueOf( s ).longValue() * multiplier;
+            }
+            catch ( NumberFormatException e )
+            {
+                log.error( "[" + s + "] is not in proper int form" );
+                log.error( "[" + value + "] not in expected format", e );
+            }
+        }
+        return dEfault;
+    }
+
+    /**
+     * Find the value corresponding to <code>key</code> in <code>props</code>. Then perform variable
+     * substitution on the found value.
+     * <p>
+     * @param key
+     * @param props
+     * @return substituted string
+     */
+
+    public static String findAndSubst( String key, Properties props )
+    {
+        String value = props.getProperty( key );
+        if ( value == null )
+        {
+            return null;
+        }
+
+        try
+        {
+            return substVars( value, props );
+        }
+        catch ( IllegalArgumentException e )
+        {
+            log.error( "Bad option value [" + value + "]", e );
+            return value;
+        }
+    }
+
+    /**
+     * Instantiate an object given a class name. Check that the <code>className</code> is a subclass
+     * of <code>superClass</code>. If that test fails or the object could not be instantiated, then
+     * <code>defaultValue</code> is returned.
+     * <p>
+     * @param className The fully qualified class name of the object to instantiate.
+     * @param defaultValue The object to return in case of non-fulfillment
+     * @return instantiated object
+     */
+
+    public static <T> T instantiateByClassName( String className, T defaultValue )
+    {
+        if ( className != null )
+        {
+            try
+            {
+                Class<?> classObj = Class.forName( className );
+                Object o = classObj.newInstance();
+
+                try
+                {
+                    @SuppressWarnings("unchecked") // CCE catched
+                    T t = (T) o;
+                    return t;
+                }
+                catch (ClassCastException e)
+                {
+                    log.error( "A \"" + className + "\" object is not assignable to the generic variable." );
+                    return defaultValue;
+                }
+            }
+            catch ( Exception e )
+            {
+                log.error( "Could not instantiate class [" + className + "]", e );
+            }
+        }
+        return defaultValue;
+    }
+
+    /**
+     * Perform variable substitution in string <code>val</code> from the values of keys found in the
+     * system properties.
+     * <p>
+     * The variable substitution delimeters are <b>${ </b> and <b>} </b>.
+     * <p>
+     * For example, if the System properties contains "key=value", then the call
+     *
+     * <pre>
+     * String s = OptionConverter.substituteVars( "Value of key is ${key}." );
+     * </pre>
+     *
+     * will set the variable <code>s</code> to "Value of key is value.".
+     * <p>
+     * If no value could be found for the specified key, then the <code>props</code> parameter is
+     * searched, if the value could not be found there, then substitution defaults to the empty
+     * string.
+     * <p>
+     * For example, if system propeties contains no value for the key "inexistentKey", then the call
+     *
+     * <pre>
+     * String s = OptionConverter.subsVars( "Value of inexistentKey is [${inexistentKey}]" );
+     * </pre>
+     *
+     * will set <code>s</code> to "Value of inexistentKey is []"
+     * <p>
+     * An {@link java.lang.IllegalArgumentException}is thrown if <code>val</code> contains a start
+     * delimeter "${" which is not balanced by a stop delimeter "}".
+     * </p>
+     * <p>
+     * <b>Author </b> Avy Sharell </a>
+     * </p>
+     * @param val The string on which variable substitution is performed.
+     * @param props
+     * @return String
+     * @throws IllegalArgumentException if <code>val</code> is malformed.
+     */
+
+    public static String substVars( String val, Properties props )
+        throws IllegalArgumentException
+    {
+        StringBuilder sbuf = new StringBuilder();
+
+        int i = 0;
+        int j;
+        int k;
+
+        while ( true )
+        {
+            j = val.indexOf( DELIM_START, i );
+            if ( j == -1 )
+            {
+                if ( i == 0 )
+                {
+                    return val;
+                }
+                sbuf.append( val.substring( i, val.length() ) );
+                return sbuf.toString();
+            }
+            sbuf.append( val.substring( i, j ) );
+            k = val.indexOf( DELIM_STOP, j );
+            if ( k == -1 )
+            {
+                throw new IllegalArgumentException( '"' + val + "\" has no closing brace. Opening brace at position "
+                    + j + '.' );
+            }
+            j += DELIM_START_LEN;
+            String key = val.substring( j, k );
+            // first try in System properties
+            String replacement = getSystemProperty( key, null );
+            // then try props parameter
+            if ( replacement == null && props != null )
+            {
+                replacement = props.getProperty( key );
+            }
+
+            if ( replacement != null )
+            {
+                sbuf.append( replacement );
+            }
+            i = k + DELIM_STOP_LEN;
+        }
+    }
+}
diff --git a/src/org/apache/commons/jcs/utils/config/PropertySetter.java b/src/org/apache/commons/jcs/utils/config/PropertySetter.java
new file mode 100644
index 0000000..f33800d
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/config/PropertySetter.java
@@ -0,0 +1,300 @@
+package org.apache.commons.jcs.utils.config;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.beans.BeanInfo;
+import java.beans.IntrospectionException;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
+import java.io.File;
+import java.lang.reflect.Method;
+import java.util.Enumeration;
+import java.util.Properties;
+
+/**
+ * This class is based on the log4j class org.apache.log4j.config.PropertySetter that was made by
+ * Anders Kristensen
+ * <p>
+ * General purpose Object property setter. Clients repeatedly invokes {@link #setProperty
+ * setProperty(name,value)} in order to invoke setters on the Object specified in the constructor.
+ * This class relies on the JavaBeans {@link Introspector}to analyze the given Object Class using
+ * reflection.
+ * <p>
+ * Usage:
+ *
+ * <pre>
+ * PropertySetter ps = new PropertySetter( anObject );
+ * ps.set( "name", "Joe" );
+ * ps.set( "age", "32" );
+ * ps.set( "isMale", "true" );
+ * </pre>
+ *
+ * will cause the invocations anObject.setName("Joe"), anObject.setAge(32), and setMale(true) if
+ * such methods exist with those signatures. Otherwise an {@link IntrospectionException}are thrown.
+ */
+public class PropertySetter
+{
+    /** Logger */
+    private static final Log log = LogFactory.getLog( PropertySetter.class );
+
+    /** Description of the Field */
+    private final Object obj;
+
+    /** Description of the Field */
+    private PropertyDescriptor[] props;
+
+    /**
+     * Create a new PropertySetter for the specified Object. This is done in preparation for invoking
+     * {@link #setProperty}one or more times.
+     * @param obj the object for which to set properties
+     */
+    public PropertySetter( Object obj )
+    {
+        this.obj = obj;
+    }
+
+    /**
+     * Uses JavaBeans {@link Introspector}to compute setters of object to be configured.
+     */
+    protected void introspect()
+    {
+        try
+        {
+            BeanInfo bi = Introspector.getBeanInfo( obj.getClass() );
+            props = bi.getPropertyDescriptors();
+        }
+        catch ( IntrospectionException ex )
+        {
+            log.error( "Failed to introspect " + obj + ": " + ex.getMessage() );
+            props = new PropertyDescriptor[0];
+        }
+    }
+
+    /**
+     * Set the properties of an object passed as a parameter in one go. The <code>properties</code>
+     * are parsed relative to a <code>prefix</code>.
+     * <p>
+     * @param obj The object to configure.
+     * @param properties A java.util.Properties containing keys and values.
+     * @param prefix Only keys having the specified prefix will be set.
+     */
+    public static void setProperties( Object obj, Properties properties, String prefix )
+    {
+        new PropertySetter( obj ).setProperties( properties, prefix );
+    }
+
+    /**
+     * Set the properties for the object that match the <code>prefix</code> passed as parameter.
+     * <p>
+     * @param properties The new properties value
+     * @param prefix The new properties value
+     */
+    public void setProperties( Properties properties, String prefix )
+    {
+        int len = prefix.length();
+
+        for ( Enumeration<?> e = properties.propertyNames(); e.hasMoreElements(); )
+        {
+            String key = (String) e.nextElement();
+
+            // handle only properties that start with the desired prefix.
+            if ( key.startsWith( prefix ) )
+            {
+
+                // ignore key if it contains dots after the prefix
+                if ( key.indexOf( '.', len + 1 ) > 0 )
+                {
+                    //System.err.println("----------Ignoring---["+key
+                    //	     +"], prefix=["+prefix+"].");
+                    continue;
+                }
+
+                String value = OptionConverter.findAndSubst( key, properties );
+                key = key.substring( len );
+
+                setProperty( key, value );
+            }
+        }
+
+    }
+
+    /**
+     * Set a property on this PropertySetter's Object. If successful, this method will invoke a
+     * setter method on the underlying Object. The setter is the one for the specified property name
+     * and the value is determined partly from the setter argument type and partly from the value
+     * specified in the call to this method.
+     * <p>
+     * If the setter expects a String no conversion is necessary. If it expects an int, then an
+     * attempt is made to convert 'value' to an int using Integer.valueOf(value). If the setter expects
+     * a boolean, the conversion is by Boolean.valueOf(value).
+     * @param name name of the property
+     * @param value String value of the property
+     */
+
+    public void setProperty( String name, String value )
+    {
+        if ( value == null )
+        {
+            return;
+        }
+
+        name = Introspector.decapitalize( name );
+        PropertyDescriptor prop = getPropertyDescriptor( name );
+
+        //log.debug("---------Key: "+name+", type="+prop.getPropertyType());
+
+        if ( prop == null )
+        {
+            log.warn( "No such property [" + name + "] in " + obj.getClass().getName() + "." );
+        }
+        else
+        {
+            try
+            {
+                setProperty( prop, name, value );
+            }
+            catch ( PropertySetterException ex )
+            {
+                log.warn( "Failed to set property " + name + " to value \"" + value + "\". " + ex.getMessage() );
+            }
+        }
+    }
+
+    /**
+     * Set the named property given a {@link PropertyDescriptor}.
+     * @param prop A PropertyDescriptor describing the characteristics of the property to set.
+     * @param name The named of the property to set.
+     * @param value The value of the property.
+     * @throws PropertySetterException
+     */
+
+    public void setProperty( PropertyDescriptor prop, String name, String value )
+        throws PropertySetterException
+    {
+        Method setter = prop.getWriteMethod();
+        if ( setter == null )
+        {
+            throw new PropertySetterException( "No setter for property" );
+        }
+        Class<?>[] paramTypes = setter.getParameterTypes();
+        if ( paramTypes.length != 1 )
+        {
+            throw new PropertySetterException( "#params for setter != 1" );
+        }
+
+        Object arg;
+        try
+        {
+            arg = convertArg( value, paramTypes[0] );
+        }
+        catch ( Throwable t )
+        {
+            throw new PropertySetterException( "Conversion to type [" + paramTypes[0] + "] failed. Reason: " + t );
+        }
+        if ( arg == null )
+        {
+            throw new PropertySetterException( "Conversion to type [" + paramTypes[0] + "] failed." );
+        }
+        log.debug( "Setting property [" + name + "] to [" + arg + "]." );
+        try
+        {
+            setter.invoke( obj, new Object[] { arg } );
+        }
+        catch ( Exception ex )
+        {
+            throw new PropertySetterException( ex );
+        }
+    }
+
+    /**
+     * Convert <code>val</code> a String parameter to an object of a given type.
+     * @param val
+     * @param type
+     * @return Object
+     */
+    protected Object convertArg( String val, Class<?> type )
+    {
+        if ( val == null )
+        {
+            return null;
+        }
+
+        String v = val.trim();
+        if ( String.class.isAssignableFrom( type ) )
+        {
+            return val;
+        }
+        else if ( Integer.TYPE.isAssignableFrom( type ) )
+        {
+            return Integer.valueOf( v );
+        }
+        else if ( Long.TYPE.isAssignableFrom( type ) )
+        {
+            return Long.valueOf( v );
+        }
+        else if ( Boolean.TYPE.isAssignableFrom( type ) )
+        {
+            if ( "true".equalsIgnoreCase( v ) )
+            {
+                return Boolean.TRUE;
+            }
+            else if ( "false".equalsIgnoreCase( v ) )
+            {
+                return Boolean.FALSE;
+            }
+        }
+        else if( type.isEnum() )
+        {
+            @SuppressWarnings("unchecked") // type check in if()
+            Enum<?> en = Enum.valueOf(type.asSubclass(Enum.class), v );
+            return en;
+        }
+        else if ( File.class.isAssignableFrom( type ) )
+        {
+            return new File( v );
+        }
+        return null;
+    }
+
+    /**
+     * Gets the propertyDescriptor attribute of the PropertySetter object
+     * @param name
+     * @return The propertyDescriptor value
+     */
+    protected PropertyDescriptor getPropertyDescriptor( String name )
+    {
+        if ( props == null )
+        {
+            introspect();
+        }
+
+        for ( int i = 0; i < props.length; i++ )
+        {
+            if ( name.equals( props[i].getName() ) )
+            {
+                return props[i];
+            }
+        }
+        return null;
+    }
+}
diff --git a/src/org/apache/commons/jcs/utils/config/PropertySetterException.java b/src/org/apache/commons/jcs/utils/config/PropertySetterException.java
new file mode 100644
index 0000000..0898a54
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/config/PropertySetterException.java
@@ -0,0 +1,75 @@
+package org.apache.commons.jcs.utils.config;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * This class is based on the log4j class org.apache.log4j.config.PropertySetter that was made by
+ * Anders Kristensen
+ * <p>
+ * Thrown when an error is encountered whilst attempting to set a property using the
+ * {@link PropertySetter}utility class.
+ */
+public class PropertySetterException
+    extends Exception
+{
+    /** DOn't change */
+    private static final long serialVersionUID = -210271658004609028L;
+
+    /** Description of the Field */
+    private final Throwable rootCause;
+
+    /**
+     * Constructor for the PropertySetterException object
+     * <p>
+     * @param msg
+     */
+    public PropertySetterException( String msg )
+    {
+        super( msg );
+        this.rootCause = null;
+    }
+
+    /**
+     * Constructor for the PropertySetterException object
+     * <p>
+     * @param rootCause
+     */
+    public PropertySetterException( Throwable rootCause )
+    {
+        super();
+        this.rootCause = rootCause;
+    }
+
+    /**
+     * Returns descriptive text on the cause of this exception.
+     * <p>
+     * @return The message value
+     */
+    @Override
+    public String getMessage()
+    {
+        String msg = super.getMessage();
+        if ( msg == null && rootCause != null )
+        {
+            msg = rootCause.getMessage();
+        }
+        return msg;
+    }
+}
diff --git a/src/org/apache/commons/jcs/utils/config/package.html b/src/org/apache/commons/jcs/utils/config/package.html
new file mode 100644
index 0000000..1de5d40
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/config/package.html
@@ -0,0 +1,28 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<html>
+  <head>
+  </head>
+  <body>
+    This package contains utility classes that are used when configuring the
+    cache. <br/>
+    NOTE: It is likely that these classes will be removed in the future in favor
+    of commons-configuration.
+  </body>
+</html>
diff --git a/src/org/apache/commons/jcs/utils/discovery/DiscoveredService.java b/src/org/apache/commons/jcs/utils/discovery/DiscoveredService.java
new file mode 100644
index 0000000..cbfd737
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/discovery/DiscoveredService.java
@@ -0,0 +1,183 @@
+package org.apache.commons.jcs.utils.discovery;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.Serializable;
+import java.util.ArrayList;
+
+/**
+ * This contains info about a discovered service. These objects are stored in a set in the
+ * UDPDiscoveryService.
+ * <p>
+ * @author Aaron Smuts
+ */
+public class DiscoveredService
+    implements Serializable
+{
+    /** For serialization. Don't change. */
+    private static final long serialVersionUID = -7810164772089509751L;
+
+    /** region names */
+    private ArrayList<String> cacheNames;
+
+    /** service address */
+    private String serviceAddress;
+
+    /** service port */
+    private int servicePort;
+
+    /** last time we heard from this service? */
+    private long lastHearFromTime = 0;
+
+    /**
+     * @param cacheNames the cacheNames to set
+     */
+    public void setCacheNames( ArrayList<String> cacheNames )
+    {
+        this.cacheNames = cacheNames;
+    }
+
+    /**
+     * @return the cacheNames
+     */
+    public ArrayList<String> getCacheNames()
+    {
+        return cacheNames;
+    }
+
+    /**
+     * @param serviceAddress The serviceAddress to set.
+     */
+    public void setServiceAddress( String serviceAddress )
+    {
+        this.serviceAddress = serviceAddress;
+    }
+
+    /**
+     * @return Returns the serviceAddress.
+     */
+    public String getServiceAddress()
+    {
+        return serviceAddress;
+    }
+
+    /**
+     * @param servicePort The servicePort to set.
+     */
+    public void setServicePort( int servicePort )
+    {
+        this.servicePort = servicePort;
+    }
+
+    /**
+     * @return Returns the servicePort.
+     */
+    public int getServicePort()
+    {
+        return servicePort;
+    }
+
+    /**
+     * @param lastHearFromTime The lastHearFromTime to set.
+     */
+    public void setLastHearFromTime( long lastHearFromTime )
+    {
+        this.lastHearFromTime = lastHearFromTime;
+    }
+
+    /**
+     * @return Returns the lastHearFromTime.
+     */
+    public long getLastHearFromTime()
+    {
+        return lastHearFromTime;
+    }
+
+    /** @return hashcode based on address/port */
+	@Override
+	public int hashCode()
+	{
+		final int prime = 31;
+		int result = 1;
+		result = prime * result
+				+ ((serviceAddress == null) ? 0 : serviceAddress.hashCode());
+		result = prime * result + servicePort;
+		return result;
+	}
+
+	/**
+     * NOTE - this object is often put into sets, so equals needs to be overridden.
+     * <p>
+     * We can't use cache names as part of the equals unless we manually only use the address and
+     * port in a contains check. So that we can use normal set functionality, I've kept the cache
+     * names out.
+     * <p>
+     * @param otherArg other
+     * @return equality based on the address/port
+     */
+	@Override
+	public boolean equals(Object otherArg)
+	{
+		if (this == otherArg)
+		{
+			return true;
+		}
+		if (otherArg == null)
+		{
+			return false;
+		}
+		if (!(otherArg instanceof DiscoveredService))
+		{
+			return false;
+		}
+		DiscoveredService other = (DiscoveredService) otherArg;
+		if (serviceAddress == null)
+		{
+			if (other.serviceAddress != null)
+			{
+				return false;
+			}
+		} else if (!serviceAddress.equals(other.serviceAddress))
+		{
+			return false;
+		}
+		if (servicePort != other.servicePort)
+		{
+			return false;
+		}
+
+		return true;
+	}
+
+    /**
+     * @return string for debugging purposes.
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder buf = new StringBuilder();
+        buf.append( "\n DiscoveredService" );
+        buf.append( "\n CacheNames = [" + getCacheNames() + "]" );
+        buf.append( "\n ServiceAddress = [" + getServiceAddress() + "]" );
+        buf.append( "\n ServicePort = [" + getServicePort() + "]" );
+        buf.append( "\n LastHearFromTime = [" + getLastHearFromTime() + "]" );
+        return buf.toString();
+    }
+}
diff --git a/src/org/apache/commons/jcs/utils/discovery/UDPCleanupRunner.java b/src/org/apache/commons/jcs/utils/discovery/UDPCleanupRunner.java
new file mode 100644
index 0000000..d000f20
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/discovery/UDPCleanupRunner.java
@@ -0,0 +1,97 @@
+package org.apache.commons.jcs.utils.discovery;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * This class periodically check the lastHeardFrom time on the services.
+ * <p>
+ * If they exceed the configurable limit, it removes them from the set.
+ * <p>
+ * @author Aaron Smuts
+ */
+public class UDPCleanupRunner
+    implements Runnable
+{
+    /** log instance */
+    private static final Log log = LogFactory.getLog( UDPCleanupRunner.class );
+
+    /** UDP discovery service */
+    private final UDPDiscoveryService discoveryService;
+
+    /** default for max idle time, in seconds */
+    private static final long DEFAULT_MAX_IDLE_TIME_SECONDS = 180;
+
+    /** The configured max idle time, in seconds */
+    private final long maxIdleTimeSeconds = DEFAULT_MAX_IDLE_TIME_SECONDS;
+
+    /**
+     * @param service UDPDiscoveryService
+     */
+    public UDPCleanupRunner( UDPDiscoveryService service )
+    {
+        this.discoveryService = service;
+    }
+
+    /**
+     * This goes through the list of services and removes those that we haven't heard from in longer
+     * than the max idle time.
+     * <p>
+     * @see java.lang.Runnable#run()
+     */
+    @Override
+    public void run()
+    {
+        long now = System.currentTimeMillis();
+
+        // iterate through the set
+        // it is thread safe
+        // http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/CopyOnWriteArraySet.
+        // html
+        // TODO this should get a copy.  you can't simply remove from this.
+        // the listeners need to be notified.
+        Set<DiscoveredService> toRemove = new HashSet<DiscoveredService>();
+        // can't remove via the iterator. must remove directly
+        for (DiscoveredService service : discoveryService.getDiscoveredServices())
+        {
+            if ( ( now - service.getLastHearFromTime() ) > ( maxIdleTimeSeconds * 1000 ) )
+            {
+                if ( log.isInfoEnabled() )
+                {
+                    log.info( "Removing service, since we haven't heard from it in " + maxIdleTimeSeconds
+                        + " seconds.  service = " + service );
+                }
+                toRemove.add( service );
+            }
+        }
+
+        // remove the bad ones
+        for (DiscoveredService service : toRemove)
+        {
+            // call this so the listeners get notified
+            discoveryService.removeDiscoveredService( service );
+        }
+    }
+}
diff --git a/src/org/apache/commons/jcs/utils/discovery/UDPDiscoveryAttributes.java b/src/org/apache/commons/jcs/utils/discovery/UDPDiscoveryAttributes.java
new file mode 100644
index 0000000..996b5a8
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/discovery/UDPDiscoveryAttributes.java
@@ -0,0 +1,231 @@
+package org.apache.commons.jcs.utils.discovery;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Configuration properties for UDP discover service.
+ * <p>
+ * The service will allow out applications to find each other.
+ * <p>
+ * @author Aaron Smuts
+ */
+public final class UDPDiscoveryAttributes
+    implements Cloneable
+{
+    /** service name */
+    private String serviceName;
+
+    /** service address */
+    private String serviceAddress;
+
+    /** service port */
+    private int servicePort;
+
+    /**
+     * false -> this service instance is not ready to receive requests. true -> ready for use
+     */
+    private boolean isDark;
+
+    /** default udp discovery address */
+    private static final String DEFAULT_UDP_DISCOVERY_ADDRESS = "228.4.5.6";
+
+    /** default udp discovery port */
+    private static final int DEFAULT_UDP_DISCOVERY_PORT = 5678;
+
+    /** udp discovery address */
+    private String udpDiscoveryAddr = DEFAULT_UDP_DISCOVERY_ADDRESS;
+
+    /** udp discovery port */
+    private int udpDiscoveryPort = DEFAULT_UDP_DISCOVERY_PORT;
+
+    /** default delay between sending passive broadcasts */
+    private static final int DEFAULT_SEND_DELAY_SEC = 60;
+
+    /** delay between sending passive broadcasts */
+    private int sendDelaySec = DEFAULT_SEND_DELAY_SEC;
+
+    /** default amount of time before we remove services that we haven't heard from */
+    private static final int DEFAULT_MAX_IDLE_TIME_SEC = 180;
+
+    /** amount of time before we remove services that we haven't heard from */
+    private int maxIdleTimeSec = DEFAULT_MAX_IDLE_TIME_SEC;
+
+    /**
+     * @param serviceName The serviceName to set.
+     */
+    public void setServiceName( String serviceName )
+    {
+        this.serviceName = serviceName;
+    }
+
+    /**
+     * @return Returns the serviceName.
+     */
+    public String getServiceName()
+    {
+        return serviceName;
+    }
+
+    /**
+     * @param serviceAddress The serviceAddress to set.
+     */
+    public void setServiceAddress( String serviceAddress )
+    {
+        this.serviceAddress = serviceAddress;
+    }
+
+    /**
+     * @return Returns the serviceAddress.
+     */
+    public String getServiceAddress()
+    {
+        return serviceAddress;
+    }
+
+    /**
+     * @param servicePort The servicePort to set.
+     */
+    public void setServicePort( int servicePort )
+    {
+        this.servicePort = servicePort;
+    }
+
+    /**
+     * @return Returns the servicePort.
+     */
+    public int getServicePort()
+    {
+        return servicePort;
+    }
+
+    /**
+     * @param udpDiscoveryAddr The udpDiscoveryAddr to set.
+     */
+    public void setUdpDiscoveryAddr( String udpDiscoveryAddr )
+    {
+        this.udpDiscoveryAddr = udpDiscoveryAddr;
+    }
+
+    /**
+     * @return Returns the udpDiscoveryAddr.
+     */
+    public String getUdpDiscoveryAddr()
+    {
+        return udpDiscoveryAddr;
+    }
+
+    /**
+     * @param udpDiscoveryPort The udpDiscoveryPort to set.
+     */
+    public void setUdpDiscoveryPort( int udpDiscoveryPort )
+    {
+        this.udpDiscoveryPort = udpDiscoveryPort;
+    }
+
+    /**
+     * @return Returns the udpDiscoveryPort.
+     */
+    public int getUdpDiscoveryPort()
+    {
+        return udpDiscoveryPort;
+    }
+
+    /**
+     * @param sendDelaySec The sendDelaySec to set.
+     */
+    public void setSendDelaySec( int sendDelaySec )
+    {
+        this.sendDelaySec = sendDelaySec;
+    }
+
+    /**
+     * @return Returns the sendDelaySec.
+     */
+    public int getSendDelaySec()
+    {
+        return sendDelaySec;
+    }
+
+    /**
+     * @param maxIdleTimeSec The maxIdleTimeSec to set.
+     */
+    public void setMaxIdleTimeSec( int maxIdleTimeSec )
+    {
+        this.maxIdleTimeSec = maxIdleTimeSec;
+    }
+
+    /**
+     * @return Returns the maxIdleTimeSec.
+     */
+    public int getMaxIdleTimeSec()
+    {
+        return maxIdleTimeSec;
+    }
+
+    /**
+     * @return Returns the isDark.
+     */
+    public boolean isDark()
+    {
+        return isDark;
+    }
+
+    /**
+     * @param isDark The isDark to set.
+     */
+    public void setDark( boolean isDark )
+    {
+        this.isDark = isDark;
+    }
+
+    /** @return a clone of this object */
+    @Override
+    public Object clone()
+    {
+        UDPDiscoveryAttributes attributes = new UDPDiscoveryAttributes();
+        attributes.setSendDelaySec( this.getSendDelaySec() );
+        attributes.setMaxIdleTimeSec( this.getMaxIdleTimeSec() );
+        attributes.setServiceName( this.getServiceName() );
+        attributes.setServicePort( this.getServicePort() );
+        attributes.setUdpDiscoveryAddr( this.getUdpDiscoveryAddr() );
+        attributes.setUdpDiscoveryPort( this.getUdpDiscoveryPort() );
+        attributes.setDark( this.isDark() );
+        return attributes;
+    }
+
+    /**
+     * @return string for debugging purposes.
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder buf = new StringBuilder();
+        buf.append( "\n UDPDiscoveryAttributes" );
+        buf.append( "\n ServiceName = [" + getServiceName() + "]" );
+        buf.append( "\n ServiceAddress = [" + getServiceAddress() + "]" );
+        buf.append( "\n ServicePort = [" + getServicePort() + "]" );
+        buf.append( "\n UdpDiscoveryAddr = [" + getUdpDiscoveryAddr() + "]" );
+        buf.append( "\n UdpDiscoveryPort = [" + getUdpDiscoveryPort() + "]" );
+        buf.append( "\n SendDelaySec = [" + getSendDelaySec() + "]" );
+        buf.append( "\n MaxIdleTimeSec = [" + getMaxIdleTimeSec() + "]" );
+        buf.append( "\n IsDark = [" + isDark() + "]" );
+        return buf.toString();
+    }
+}
diff --git a/src/org/apache/commons/jcs/utils/discovery/UDPDiscoveryManager.java b/src/org/apache/commons/jcs/utils/discovery/UDPDiscoveryManager.java
new file mode 100644
index 0000000..521525d
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/discovery/UDPDiscoveryManager.java
@@ -0,0 +1,114 @@
+package org.apache.commons.jcs.utils.discovery;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.behavior.ICompositeCacheManager;
+import org.apache.commons.jcs.engine.behavior.IProvideScheduler;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * This manages UDPDiscovery Services. We should end up with one service per Lateral Cache Manager
+ * Instance. One service works for multiple regions. We don't want a connection for each region.
+ * <p>
+ * @author Aaron Smuts
+ */
+public class UDPDiscoveryManager
+{
+    /** The logger */
+    private static final Log log = LogFactory.getLog( UDPDiscoveryManager.class );
+
+    /** Singleton instance */
+    private static UDPDiscoveryManager INSTANCE = new UDPDiscoveryManager();
+
+    /** Known services */
+    private final Map<String, UDPDiscoveryService> services = new HashMap<String, UDPDiscoveryService>();
+
+    /** private for singleton */
+    private UDPDiscoveryManager()
+    {
+        // noopt
+    }
+
+    /**
+     * Singleton
+     * <p>
+     * @return UDPDiscoveryManager
+     */
+    public static UDPDiscoveryManager getInstance()
+    {
+        return INSTANCE;
+    }
+
+    /**
+     * Creates a service for the address and port if one doesn't exist already.
+     * <p>
+     * We need to key this using the listener port too. TODO think of making one discovery service
+     * work for multiple types of clients.
+     * <p>
+     * @param discoveryAddress
+     * @param discoveryPort
+     * @param servicePort
+     * @param cacheMgr
+     * @return UDPDiscoveryService
+     */
+    public synchronized UDPDiscoveryService getService( String discoveryAddress, int discoveryPort, int servicePort,
+                                                        ICompositeCacheManager cacheMgr )
+    {
+        String key = discoveryAddress + ":" + discoveryPort + ":" + servicePort;
+
+        UDPDiscoveryService service = services.get( key );
+        if ( service == null )
+        {
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "Creating service for address:port:servicePort [" + key + "]" );
+            }
+
+            UDPDiscoveryAttributes attributes = new UDPDiscoveryAttributes();
+            attributes.setUdpDiscoveryAddr( discoveryAddress );
+            attributes.setUdpDiscoveryPort( discoveryPort );
+            attributes.setServicePort( servicePort );
+
+            service = new UDPDiscoveryService( attributes );
+
+            // register for shutdown notification
+            cacheMgr.registerShutdownObserver( service );
+
+            // inject scheduler
+            if ( cacheMgr instanceof IProvideScheduler)
+            {
+                service.setScheduledExecutorService(((IProvideScheduler)cacheMgr).getScheduledExecutorService());
+            }
+
+            services.put( key, service );
+        }
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Returning service [" + service + "] for key [" + key + "]" );
+        }
+
+        return service;
+    }
+}
diff --git a/src/org/apache/commons/jcs/utils/discovery/UDPDiscoveryMessage.java b/src/org/apache/commons/jcs/utils/discovery/UDPDiscoveryMessage.java
new file mode 100644
index 0000000..efe424c
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/discovery/UDPDiscoveryMessage.java
@@ -0,0 +1,166 @@
+package org.apache.commons.jcs.utils.discovery;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.Serializable;
+import java.util.ArrayList;
+
+/**
+ * The message sent by the discovery mechanism.
+ */
+public class UDPDiscoveryMessage
+    implements Serializable
+{
+    /** Don't change */
+    private static final long serialVersionUID = -5332377899560951793L;
+
+    public enum BroadcastType
+    {
+        /**
+         * This is the periodic broadcast of a servers location. This type of message is also sent in
+         * response to a REQUEST_BROADCAST.
+         */
+        PASSIVE,
+
+        /**
+         * This asks recipients to broadcast their location. This is used on startup.
+         */
+        REQUEST,
+
+        /**
+         * This message instructs the receiver to remove this service from its list.
+         */
+        REMOVE
+    }
+
+    /** The message type */
+    private BroadcastType messageType = BroadcastType.PASSIVE;
+
+    /** udp port */
+    private int port = 6789;
+
+    /** UDP host */
+    private String host = "228.5.6.7";
+
+    /** Id of the requester, allows self-filtration */
+    private long requesterId;
+
+    /** Names of regions */
+    private ArrayList<String> cacheNames = new ArrayList<String>();
+
+    /**
+     * @param port The port to set.
+     */
+    public void setPort( int port )
+    {
+        this.port = port;
+    }
+
+    /**
+     * @return Returns the port.
+     */
+    public int getPort()
+    {
+        return port;
+    }
+
+    /**
+     * @param host The host to set.
+     */
+    public void setHost( String host )
+    {
+        this.host = host;
+    }
+
+    /**
+     * @return Returns the host.
+     */
+    public String getHost()
+    {
+        return host;
+    }
+
+    /**
+     * @param requesterId The requesterId to set.
+     */
+    public void setRequesterId( long requesterId )
+    {
+        this.requesterId = requesterId;
+    }
+
+    /**
+     * @return Returns the requesterId.
+     */
+    public long getRequesterId()
+    {
+        return requesterId;
+    }
+
+    /**
+     * @param messageType The messageType to set.
+     */
+    public void setMessageType( BroadcastType messageType )
+    {
+        this.messageType = messageType;
+    }
+
+    /**
+     * @return Returns the messageType.
+     */
+    public BroadcastType getMessageType()
+    {
+        return messageType;
+    }
+
+    /**
+     * @param cacheNames The cacheNames to set.
+     */
+    public void setCacheNames( ArrayList<String> cacheNames )
+    {
+        this.cacheNames = cacheNames;
+    }
+
+    /**
+     * @return Returns the cacheNames.
+     */
+    public ArrayList<String> getCacheNames()
+    {
+        return cacheNames;
+    }
+
+    /**
+     * @return debugging string
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder buf = new StringBuilder();
+        buf.append( "\n host = [" + host + "]" );
+        buf.append( "\n port = [" + port + "]" );
+        buf.append( "\n requesterId = [" + requesterId + "]" );
+        buf.append( "\n messageType = [" + messageType + "]" );
+        buf.append( "\n Cache Names" );
+        for (String name : cacheNames)
+        {
+            buf.append( " cacheName = [" + name + "]" );
+        }
+        return buf.toString();
+    }
+}
diff --git a/src/org/apache/commons/jcs/utils/discovery/UDPDiscoveryReceiver.java b/src/org/apache/commons/jcs/utils/discovery/UDPDiscoveryReceiver.java
new file mode 100644
index 0000000..8ecce5b
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/discovery/UDPDiscoveryReceiver.java
@@ -0,0 +1,380 @@
+package org.apache.commons.jcs.utils.discovery;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.CacheInfo;
+import org.apache.commons.jcs.engine.behavior.IShutdownObserver;
+import org.apache.commons.jcs.io.ObjectInputStreamClassLoaderAware;
+import org.apache.commons.jcs.utils.discovery.UDPDiscoveryMessage.BroadcastType;
+import org.apache.commons.jcs.utils.threadpool.DaemonThreadFactory;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.net.DatagramPacket;
+import java.net.InetAddress;
+import java.net.MulticastSocket;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadPoolExecutor;
+
+/** Receives UDP Discovery messages. */
+public class UDPDiscoveryReceiver
+    implements Runnable, IShutdownObserver
+{
+    /** The log factory */
+    private static final Log log = LogFactory.getLog( UDPDiscoveryReceiver.class );
+
+    /** buffer */
+    private final byte[] mBuffer = new byte[65536];
+
+    /** The socket used for communication. */
+    private MulticastSocket mSocket;
+
+    /**
+     * TODO: Consider using the threadpool manager to get this thread pool. For now place a tight
+     * restriction on the pool size
+     */
+    private static final int maxPoolSize = 2;
+
+    /** The processor */
+    private ThreadPoolExecutor pooledExecutor = null;
+
+    /** number of messages received. For debugging and testing. */
+    private int cnt = 0;
+
+    /** Service to get cache names and handle request broadcasts */
+    private UDPDiscoveryService service = null;
+
+    /** Address */
+    private String multicastAddressString = "";
+
+    /** The port */
+    private int multicastPort = 0;
+
+    /** Is it shutdown. */
+    private boolean shutdown = false;
+
+    /**
+     * Constructor for the LateralUDPReceiver object.
+     * <p>
+     * We determine out own host using InetAddress
+     *<p>
+     * @param service
+     * @param multicastAddressString
+     * @param multicastPort
+     * @throws IOException
+     */
+    public UDPDiscoveryReceiver( UDPDiscoveryService service, String multicastAddressString, int multicastPort )
+        throws IOException
+    {
+        this.service = service;
+        this.multicastAddressString = multicastAddressString;
+        this.multicastPort = multicastPort;
+
+        // create a small thread pool to handle a barrage
+        pooledExecutor = (ThreadPoolExecutor)Executors.newFixedThreadPool(maxPoolSize,
+                new DaemonThreadFactory("JCS-UDPDiscoveryReceiver-", Thread.MIN_PRIORITY));
+        pooledExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardOldestPolicy());
+        //pooledExecutor.setMinimumPoolSize(1);
+
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "Constructing listener, [" + this.multicastAddressString + ":" + this.multicastPort + "]" );
+        }
+
+        try
+        {
+            createSocket( this.multicastAddressString, this.multicastPort );
+        }
+        catch ( IOException ioe )
+        {
+            // consider eating this so we can go on, or constructing the socket
+            // later
+            throw ioe;
+        }
+    }
+
+    /**
+     * Creates the socket for this class.
+     * <p>
+     * @param multicastAddressString
+     * @param multicastPort
+     * @throws IOException
+     */
+    private void createSocket( String multicastAddressString, int multicastPort )
+        throws IOException
+    {
+        try
+        {
+            mSocket = new MulticastSocket( multicastPort );
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "Joining Group: [" + InetAddress.getByName( multicastAddressString ) + "]" );
+            }
+            mSocket.joinGroup( InetAddress.getByName( multicastAddressString ) );
+        }
+        catch ( IOException e )
+        {
+            log.error( "Could not bind to multicast address [" + InetAddress.getByName( multicastAddressString ) + ":" + multicastPort + "]", e );
+            throw e;
+        }
+    }
+
+    /**
+     * Highly unreliable. If it is processing one message while another comes in, the second
+     * message is lost. This is for low concurrency peppering.
+     * <p>
+     * @return the object message
+     * @throws IOException
+     */
+    public Object waitForMessage()
+        throws IOException
+    {
+        final DatagramPacket packet = new DatagramPacket( mBuffer, mBuffer.length );
+
+        Object obj = null;
+        try
+        {
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Waiting for message." );
+            }
+
+            mSocket.receive( packet );
+
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Received packet from address [" + packet.getSocketAddress() + "]" );
+            }
+
+            final ByteArrayInputStream byteStream = new ByteArrayInputStream( mBuffer, 0, packet.getLength() );
+            final ObjectInputStream objectStream = new ObjectInputStreamClassLoaderAware( byteStream, null );
+            obj = objectStream.readObject();
+
+            if ( obj != null && obj instanceof UDPDiscoveryMessage )
+            {
+            	// Ensure that the address we're supposed to send to is, indeed, the address
+            	// of the machine on the other end of this connection.  This guards against
+            	// instances where we don't exactly get the right local host address
+            	UDPDiscoveryMessage msg = (UDPDiscoveryMessage) obj;
+            	msg.setHost(packet.getAddress().getHostAddress());
+
+	            if ( log.isDebugEnabled() )
+	            {
+	                log.debug( "Read object from address [" + packet.getSocketAddress() + "], object=[" + obj + "]" );
+	            }
+            }
+        }
+        catch ( Exception e )
+        {
+            log.error( "Error receiving multicast packet", e );
+        }
+        return obj;
+    }
+
+    /** Main processing method for the LateralUDPReceiver object */
+    @Override
+    public void run()
+    {
+        try
+        {
+            while ( !shutdown )
+            {
+                Object obj = waitForMessage();
+
+                // not thread safe, but just for debugging
+                cnt++;
+
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( getCnt() + " messages received." );
+                }
+
+                UDPDiscoveryMessage message = null;
+
+                try
+                {
+                    message = (UDPDiscoveryMessage) obj;
+                    // check for null
+                    if ( message != null )
+                    {
+                        MessageHandler handler = new MessageHandler( message );
+
+                        pooledExecutor.execute( handler );
+
+                        if ( log.isDebugEnabled() )
+                        {
+                            log.debug( "Passed handler to executor." );
+                        }
+                    }
+                    else
+                    {
+                        log.warn( "message is null" );
+                    }
+                }
+                catch ( ClassCastException cce )
+                {
+                    log.warn( "Received unknown message type " + cce.getMessage() );
+                }
+            } // end while
+        }
+        catch ( Exception e )
+        {
+            log.error( "Unexpected exception in UDP receiver.", e );
+            try
+            {
+                Thread.sleep( 100 );
+                // TODO consider some failure count so we don't do this
+                // forever.
+            }
+            catch ( Exception e2 )
+            {
+                log.error( "Problem sleeping", e2 );
+            }
+        }
+    }
+
+    /**
+     * @param cnt The cnt to set.
+     */
+    public void setCnt( int cnt )
+    {
+        this.cnt = cnt;
+    }
+
+    /**
+     * @return Returns the cnt.
+     */
+    public int getCnt()
+    {
+        return cnt;
+    }
+
+    /**
+     * Separate thread run when a command comes into the UDPDiscoveryReceiver.
+     */
+    public class MessageHandler
+        implements Runnable
+    {
+        /** The message to handle. Passed in during construction. */
+        private UDPDiscoveryMessage message = null;
+
+        /**
+         * @param message
+         */
+        public MessageHandler( UDPDiscoveryMessage message )
+        {
+            this.message = message;
+        }
+
+        /**
+         * Process the message.
+         */
+        @SuppressWarnings("synthetic-access")
+        @Override
+        public void run()
+        {
+            // consider comparing ports here instead.
+            if ( message.getRequesterId() == CacheInfo.listenerId )
+            {
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "Ignoring message sent from self" );
+                }
+            }
+            else
+            {
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "Process message sent from another" );
+                    log.debug( "Message = " + message );
+                }
+
+                if ( message.getHost() == null || message.getCacheNames() == null || message.getCacheNames().isEmpty() )
+                {
+                    if ( log.isDebugEnabled() )
+                    {
+                        log.debug( "Ignoring invalid message: " + message );
+                    }
+                }
+                else
+                {
+                    processMessage();
+                }
+            }
+        }
+
+        /**
+         * Process the incoming message.
+         */
+        @SuppressWarnings("synthetic-access")
+        private void processMessage()
+        {
+            DiscoveredService discoveredService = new DiscoveredService();
+            discoveredService.setServiceAddress( message.getHost() );
+            discoveredService.setCacheNames( message.getCacheNames() );
+            discoveredService.setServicePort( message.getPort() );
+            discoveredService.setLastHearFromTime( System.currentTimeMillis() );
+
+            // if this is a request message, have the service handle it and
+            // return
+            if ( message.getMessageType() == BroadcastType.REQUEST )
+            {
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "Message is a Request Broadcast, will have the service handle it." );
+                }
+                service.serviceRequestBroadcast();
+                return;
+            }
+            else if ( message.getMessageType() == BroadcastType.REMOVE )
+            {
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "Removing service from set " + discoveredService );
+                }
+                service.removeDiscoveredService( discoveredService );
+            }
+            else
+            {
+                service.addOrUpdateService( discoveredService );
+            }
+        }
+    }
+
+    /** Shuts down the socket. */
+    @Override
+    public void shutdown()
+    {
+        try
+        {
+            shutdown = true;
+            mSocket.leaveGroup( InetAddress.getByName( multicastAddressString ) );
+            mSocket.close();
+            pooledExecutor.shutdownNow();
+        }
+        catch ( IOException e )
+        {
+            log.error( "Problem closing socket" );
+        }
+    }
+}
diff --git a/src/org/apache/commons/jcs/utils/discovery/UDPDiscoverySender.java b/src/org/apache/commons/jcs/utils/discovery/UDPDiscoverySender.java
new file mode 100644
index 0000000..6b8c9e7
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/discovery/UDPDiscoverySender.java
@@ -0,0 +1,292 @@
+package org.apache.commons.jcs.utils.discovery;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.CacheInfo;
+import org.apache.commons.jcs.utils.discovery.UDPDiscoveryMessage.BroadcastType;
+import org.apache.commons.jcs.utils.serialization.StandardSerializer;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.net.DatagramPacket;
+import java.net.InetAddress;
+import java.net.MulticastSocket;
+import java.util.ArrayList;
+
+/**
+ * This is a generic sender for the UDPDiscovery process.
+ * <p>
+ * @author Aaron Smuts
+ */
+public class UDPDiscoverySender
+{
+    /** The logger. */
+    private static final Log log = LogFactory.getLog( UDPDiscoverySender.class );
+
+    /** The socket */
+    private MulticastSocket localSocket;
+
+    /** The address */
+    private InetAddress multicastAddress;
+
+    /** The port */
+    private final int multicastPort;
+
+    /** Used to serialize messages */
+    private final StandardSerializer serializer = new StandardSerializer();
+
+    /**
+     * Constructor for the UDPDiscoverySender object
+     * <p>
+     * This sender can be used to send multiple messages.
+     * <p>
+     * When you are done sending, you should destroy the socket sender.
+     * <p>
+     * @param host
+     * @param port
+     * @throws IOException
+     */
+    public UDPDiscoverySender( String host, int port )
+        throws IOException
+    {
+        try
+        {
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Constructing socket for sender on port [" + port + "]" );
+            }
+            localSocket = new MulticastSocket( port );
+
+            // Remote address.
+            multicastAddress = InetAddress.getByName( host );
+        }
+        catch ( IOException e )
+        {
+            log.error( "Could not bind to multicast address [" + host + "]", e );
+
+            throw e;
+        }
+
+        multicastPort = port;
+    }
+
+    /**
+     * Closes the socket connection.
+     */
+    public void destroy()
+    {
+        try
+        {
+            if ( this.localSocket != null && !this.localSocket.isClosed() )
+            {
+                this.localSocket.close();
+            }
+        }
+        catch ( Exception e )
+        {
+            log.error( "Problem destrying sender", e );
+        }
+    }
+
+    /**
+     * Just being careful about closing the socket.
+     * <p>
+     * @throws Throwable
+     */
+    @Override
+    protected void finalize()
+        throws Throwable
+    {
+        super.finalize();
+        destroy();
+    }
+
+    /**
+     * Send messages.
+     * <p>
+     * @param message
+     * @throws IOException
+     */
+    public void send( UDPDiscoveryMessage message )
+        throws IOException
+    {
+        if ( this.localSocket == null )
+        {
+            throw new IOException( "Socket is null, cannot send message." );
+        }
+
+        if ( this.localSocket.isClosed() )
+        {
+            throw new IOException( "Socket is closed, cannot send message." );
+        }
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "sending UDPDiscoveryMessage, address [" + multicastAddress + "], port [" + multicastPort
+                + "], message = " + message );
+        }
+
+        try
+        {
+            final byte[] bytes = serializer.serialize( message );
+
+            // put the byte array in a packet
+            final DatagramPacket packet = new DatagramPacket( bytes, bytes.length, multicastAddress, multicastPort );
+
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Sending DatagramPacket. bytes.length [" + bytes.length + "] to " + multicastAddress + ":"
+                    + multicastPort );
+            }
+
+            localSocket.send( packet );
+        }
+        catch ( IOException e )
+        {
+            log.error( "Error sending message", e );
+            throw e;
+        }
+    }
+
+    /**
+     * Ask other to broadcast their info the the multicast address. If a lateral is non receiving it
+     * can use this. This is also called on startup so we can get info.
+     * <p>
+     * @throws IOException
+     */
+    public void requestBroadcast()
+        throws IOException
+    {
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "sending requestBroadcast " );
+        }
+
+        UDPDiscoveryMessage message = new UDPDiscoveryMessage();
+        message.setRequesterId( CacheInfo.listenerId );
+        message.setMessageType( BroadcastType.REQUEST );
+        send( message );
+    }
+
+    /**
+     * This sends a message broadcasting out that the host and port is available for connections.
+     * <p>
+     * It uses the vmid as the requesterDI
+     * @param host
+     * @param port
+     * @param cacheNames
+     * @throws IOException
+     */
+    public void passiveBroadcast( String host, int port, ArrayList<String> cacheNames )
+        throws IOException
+    {
+        passiveBroadcast( host, port, cacheNames, CacheInfo.listenerId );
+    }
+
+    /**
+     * This allows you to set the sender id. This is mainly for testing.
+     * <p>
+     * @param host
+     * @param port
+     * @param cacheNames names of the cache regions
+     * @param listenerId
+     * @throws IOException
+     */
+    protected void passiveBroadcast( String host, int port, ArrayList<String> cacheNames, long listenerId )
+        throws IOException
+    {
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "sending passiveBroadcast " );
+        }
+
+        UDPDiscoveryMessage message = new UDPDiscoveryMessage();
+        message.setHost( host );
+        message.setPort( port );
+        message.setCacheNames( cacheNames );
+        message.setRequesterId( listenerId );
+        message.setMessageType( BroadcastType.PASSIVE );
+        send( message );
+    }
+
+    /**
+     * This sends a message broadcasting our that the host and port is no longer available.
+     * <p>
+     * It uses the vmid as the requesterID
+     * <p>
+     * @param host host
+     * @param port port
+     * @param cacheNames names of the cache regions
+     * @throws IOException on error
+     */
+    public void removeBroadcast( String host, int port, ArrayList<String> cacheNames )
+        throws IOException
+    {
+        removeBroadcast( host, port, cacheNames, CacheInfo.listenerId );
+    }
+
+    /**
+     * This allows you to set the sender id. This is mainly for testing.
+     * <p>
+     * @param host host
+     * @param port port
+     * @param cacheNames names of the cache regions
+     * @param listenerId listener ID
+     * @throws IOException on error
+     */
+    protected void removeBroadcast( String host, int port, ArrayList<String> cacheNames, long listenerId )
+        throws IOException
+    {
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "sending removeBroadcast " );
+        }
+
+        UDPDiscoveryMessage message = new UDPDiscoveryMessage();
+        message.setHost( host );
+        message.setPort( port );
+        message.setCacheNames( cacheNames );
+        message.setRequesterId( listenerId );
+        message.setMessageType( BroadcastType.REMOVE );
+        send( message );
+    }
+}
+
+/**
+ * This allows us to get the byte array from an output stream.
+ * <p>
+ * @author asmuts
+ * @created January 15, 2002
+ */
+
+class MyByteArrayOutputStream
+    extends ByteArrayOutputStream
+{
+    /**
+     * Gets the bytes attribute of the MyByteArrayOutputStream object
+     * @return The bytes value
+     */
+    public byte[] getBytes()
+    {
+        return buf;
+    }
+}
diff --git a/src/org/apache/commons/jcs/utils/discovery/UDPDiscoverySenderThread.java b/src/org/apache/commons/jcs/utils/discovery/UDPDiscoverySenderThread.java
new file mode 100644
index 0000000..1332f3b
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/discovery/UDPDiscoverySenderThread.java
@@ -0,0 +1,199 @@
+package org.apache.commons.jcs.utils.discovery;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.util.ArrayList;
+
+/**
+ * Used to periodically broadcast our location to other caches that might be listening.
+ */
+public class UDPDiscoverySenderThread
+    implements Runnable
+{
+    /** The logger. */
+    private static final Log log = LogFactory.getLog( UDPDiscoverySenderThread.class );
+
+    /**
+     * details of the host, port, and service being advertised to listen for TCP socket connections
+     */
+    private final UDPDiscoveryAttributes attributes;
+
+    /** List of known regions. */
+    private ArrayList<String> cacheNames = new ArrayList<String>();
+
+    /**
+     * @param cacheNames The cacheNames to set.
+     */
+    protected void setCacheNames( ArrayList<String> cacheNames )
+    {
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "Resetting cacheNames = [" + cacheNames + "]" );
+        }
+        this.cacheNames = cacheNames;
+    }
+
+    /**
+     * @return Returns the cacheNames.
+     */
+    protected ArrayList<String> getCacheNames()
+    {
+        return cacheNames;
+    }
+
+    /**
+     * Constructs the sender with the port to tell others to connect to.
+     * <p>
+     * On construction the sender will request that the other caches let it know their addresses.
+     * @param attributes host, port, etc.
+     * @param cacheNames List of strings of the names of the region participating.
+     */
+    public UDPDiscoverySenderThread( UDPDiscoveryAttributes attributes, ArrayList<String> cacheNames )
+    {
+        this.attributes = attributes;
+
+        this.cacheNames = cacheNames;
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Creating sender thread for discoveryAddress = [" + attributes.getUdpDiscoveryAddr()
+                + "] and discoveryPort = [" + attributes.getUdpDiscoveryPort() + "] myHostName = ["
+                + attributes.getServiceAddress() + "] and port = [" + attributes.getServicePort() + "]" );
+        }
+
+        UDPDiscoverySender sender = null;
+        try
+        {
+            // move this to the run method and determine how often to call it.
+            sender = new UDPDiscoverySender( attributes.getUdpDiscoveryAddr(), attributes.getUdpDiscoveryPort() );
+            sender.requestBroadcast();
+
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Sent a request broadcast to the group" );
+            }
+        }
+        catch ( Exception e )
+        {
+            log.error( "Problem sending a Request Broadcast", e );
+        }
+        finally
+        {
+            try
+            {
+                if ( sender != null )
+                {
+                    sender.destroy();
+                }
+            }
+            catch ( Exception e )
+            {
+                log.error( "Problem closing Request Broadcast sender", e );
+            }
+        }
+    }
+
+    /**
+     * Send a message.
+     */
+    @Override
+    public void run()
+    {
+        UDPDiscoverySender sender = null;
+        try
+        {
+            // create this connection each time.
+            // more robust
+            sender = new UDPDiscoverySender( attributes.getUdpDiscoveryAddr(), attributes.getUdpDiscoveryPort() );
+
+            sender.passiveBroadcast( attributes.getServiceAddress(), attributes.getServicePort(), cacheNames );
+
+            // todo we should consider sending a request broadcast every so
+            // often.
+
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Called sender to issue a passive broadcast" );
+            }
+
+        }
+        catch ( Exception e )
+        {
+            log.error( "Problem calling the UDP Discovery Sender [" + attributes.getUdpDiscoveryAddr() + ":"
+                + attributes.getUdpDiscoveryPort() + "]", e );
+        }
+        finally
+        {
+            if (sender != null)
+            {
+                try
+                {
+                    sender.destroy();
+                }
+                catch ( Exception e )
+                {
+                    log.error( "Problem closing Passive Broadcast sender", e );
+                }
+            }
+        }
+    }
+
+    /**
+     * Issues a remove broadcast to the others.
+     */
+    protected void shutdown()
+    {
+        UDPDiscoverySender sender = null;
+        try
+        {
+            // create this connection each time.
+            // more robust
+            sender = new UDPDiscoverySender( attributes.getUdpDiscoveryAddr(), attributes.getUdpDiscoveryPort() );
+
+            sender.removeBroadcast( attributes.getServiceAddress(), attributes.getServicePort(), cacheNames );
+
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Called sender to issue a remove broadcast in shudown." );
+            }
+        }
+        catch ( Exception e )
+        {
+            log.error( "Problem calling the UDP Discovery Sender", e );
+        }
+        finally
+        {
+            try
+            {
+                if ( sender != null )
+                {
+                    sender.destroy();
+                }
+            }
+            catch ( Exception e )
+            {
+                log.error( "Problem closing Remote Broadcast sender", e );
+            }
+        }
+    }
+}
diff --git a/src/org/apache/commons/jcs/utils/discovery/UDPDiscoveryService.java b/src/org/apache/commons/jcs/utils/discovery/UDPDiscoveryService.java
new file mode 100644
index 0000000..312d8cf
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/discovery/UDPDiscoveryService.java
@@ -0,0 +1,438 @@
+package org.apache.commons.jcs.utils.discovery;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.behavior.IRequireScheduler;
+import org.apache.commons.jcs.engine.behavior.IShutdownObserver;
+import org.apache.commons.jcs.utils.discovery.behavior.IDiscoveryListener;
+import org.apache.commons.jcs.utils.net.HostNameUtil;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.concurrent.CopyOnWriteArraySet;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * This service creates a listener that can create lateral caches and add them to the no wait list.
+ * <p>
+ * It also creates a sender that periodically broadcasts its availability.
+ * <p>
+ * The sender also broadcasts a request for other caches to broadcast their addresses.
+ * <p>
+ * @author Aaron Smuts
+ */
+public class UDPDiscoveryService
+    implements IShutdownObserver, IRequireScheduler
+{
+    /** The logger */
+    private static final Log log = LogFactory.getLog( UDPDiscoveryService.class );
+
+    /** thread that listens for messages */
+    private Thread udpReceiverThread;
+
+    /** the runnable that the receiver thread runs */
+    private UDPDiscoveryReceiver receiver;
+
+    /** the runnable that sends messages via the clock daemon */
+    private UDPDiscoverySenderThread sender = null;
+
+    /** attributes */
+    private UDPDiscoveryAttributes udpDiscoveryAttributes = null;
+
+    /** is this shut down? */
+    private boolean shutdown = false;
+
+    /** This is a set of services that have been discovered. */
+    private Set<DiscoveredService> discoveredServices = new CopyOnWriteArraySet<DiscoveredService>();
+
+    /** This a list of regions that are configured to use discovery. */
+    private final Set<String> cacheNames = new CopyOnWriteArraySet<String>();
+
+    /** Set of listeners. */
+    private final Set<IDiscoveryListener> discoveryListeners = new CopyOnWriteArraySet<IDiscoveryListener>();
+
+    /**
+     * @param attributes
+     */
+    public UDPDiscoveryService( UDPDiscoveryAttributes attributes)
+    {
+        udpDiscoveryAttributes = (UDPDiscoveryAttributes) attributes.clone();
+
+        try
+        {
+            // todo, you should be able to set this
+            udpDiscoveryAttributes.setServiceAddress( HostNameUtil.getLocalHostAddress() );
+        }
+        catch ( UnknownHostException e1 )
+        {
+            log.error( "Couldn't get localhost address", e1 );
+        }
+
+        try
+        {
+            // todo need some kind of recovery here.
+            receiver = new UDPDiscoveryReceiver( this, getUdpDiscoveryAttributes().getUdpDiscoveryAddr(),
+                                                 getUdpDiscoveryAttributes().getUdpDiscoveryPort() );
+            udpReceiverThread = new Thread( receiver );
+            udpReceiverThread.setDaemon( true );
+            // udpReceiverThread.setName( t.getName() + "--UDPReceiver" );
+            udpReceiverThread.start();
+        }
+        catch ( Exception e )
+        {
+            log.error( "Problem creating UDPDiscoveryReceiver, address ["
+                + getUdpDiscoveryAttributes().getUdpDiscoveryAddr() + "] port ["
+                + getUdpDiscoveryAttributes().getUdpDiscoveryPort() + "] we won't be able to find any other caches", e );
+        }
+
+        // create a sender thread
+        sender = new UDPDiscoverySenderThread( getUdpDiscoveryAttributes(), getCacheNames() );
+    }
+
+    /**
+     * @see org.apache.commons.jcs.engine.behavior.IRequireScheduler#setScheduledExecutorService(java.util.concurrent.ScheduledExecutorService)
+     */
+    @Override
+    public void setScheduledExecutorService(ScheduledExecutorService scheduledExecutor)
+    {
+        if (sender != null)
+        {
+            scheduledExecutor.scheduleAtFixedRate(sender, 0, 15, TimeUnit.SECONDS);
+        }
+
+        /** removes things that have been idle for too long */
+        UDPCleanupRunner cleanup = new UDPCleanupRunner( this );
+        // I'm going to use this as both, but it could happen
+        // that something could hang around twice the time using this as the
+        // delay and the idle time.
+        scheduledExecutor.scheduleAtFixedRate(cleanup, 0, getUdpDiscoveryAttributes().getMaxIdleTimeSec(), TimeUnit.SECONDS);
+    }
+
+    /**
+     * Send a passive broadcast in response to a request broadcast. Never send a request for a
+     * request. We can respond to our own requests, since a request broadcast is not intended as a
+     * connection request. We might want to only send messages, so we would send a request, but
+     * never a passive broadcast.
+     */
+    protected void serviceRequestBroadcast()
+    {
+        UDPDiscoverySender sender1 = null;
+        try
+        {
+            // create this connection each time.
+            // more robust
+            sender1 = new UDPDiscoverySender( getUdpDiscoveryAttributes().getUdpDiscoveryAddr(),
+                                             getUdpDiscoveryAttributes().getUdpDiscoveryPort() );
+
+            sender1.passiveBroadcast( getUdpDiscoveryAttributes().getServiceAddress(), getUdpDiscoveryAttributes()
+                .getServicePort(), this.getCacheNames() );
+
+            // todo we should consider sending a request broadcast every so
+            // often.
+
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Called sender to issue a passive broadcast" );
+            }
+        }
+        catch ( Exception e )
+        {
+            log.error( "Problem calling the UDP Discovery Sender. address ["
+                + getUdpDiscoveryAttributes().getUdpDiscoveryAddr() + "] port ["
+                + getUdpDiscoveryAttributes().getUdpDiscoveryPort() + "]", e );
+        }
+        finally
+        {
+            try
+            {
+                if ( sender1 != null )
+                {
+                    sender1.destroy();
+                }
+            }
+            catch ( Exception e )
+            {
+                log.error( "Problem closing Passive Broadcast sender, while servicing a request broadcast.", e );
+            }
+        }
+    }
+
+    /**
+     * Adds a region to the list that is participating in discovery.
+     * <p>
+     * @param cacheName
+     */
+    public void addParticipatingCacheName( String cacheName )
+    {
+        cacheNames.add( cacheName );
+        sender.setCacheNames( getCacheNames() );
+    }
+
+    /**
+     * Removes the discovered service from the list and calls the discovery listener.
+     * <p>
+     * @param service
+     */
+    public void removeDiscoveredService( DiscoveredService service )
+    {
+        boolean contained = getDiscoveredServices().remove( service );
+
+        if ( contained )
+        {
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "Removing " + service );
+            }
+        }
+
+        for (IDiscoveryListener listener : getDiscoveryListeners())
+        {
+            listener.removeDiscoveredService( service );
+        }
+    }
+
+    /**
+     * Add a service to the list. Update the held copy if we already know about it.
+     * <p>
+     * @param discoveredService discovered service
+     */
+    protected void addOrUpdateService( DiscoveredService discoveredService )
+    {
+        synchronized ( getDiscoveredServices() )
+        {
+            // Since this is a set we can add it over an over.
+            // We want to replace the old one, since we may add info that is not part of the equals.
+            // The equals method on the object being added is intentionally restricted.
+            if ( !getDiscoveredServices().contains( discoveredService ) )
+            {
+                if ( log.isInfoEnabled() )
+                {
+                    log.info( "Set does not contain service. I discovered " + discoveredService );
+                }
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "Adding service in the set " + discoveredService );
+                }
+                getDiscoveredServices().add( discoveredService );
+            }
+            else
+            {
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "Set contains service." );
+                }
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "Updating service in the set " + discoveredService );
+                }
+
+                // Update the list of cache names if it has changed.
+                DiscoveredService theOldServiceInformation = null;
+                // need to update the time this sucks. add has no effect convert to a map
+                for (DiscoveredService service1 : getDiscoveredServices())
+                {
+                    if ( discoveredService.equals( service1 ) )
+                    {
+                        theOldServiceInformation = service1;
+                        break;
+                    }
+                }
+                if ( theOldServiceInformation != null )
+                {
+                    if ( !theOldServiceInformation.getCacheNames().equals( discoveredService.getCacheNames() ) )
+                    {
+                        if ( log.isInfoEnabled() )
+                        {
+                            log.info( "List of cache names changed for service: " + discoveredService );
+                        }
+                    }
+                }
+
+                // replace it, we want to reset the payload and the last heard from time.
+                getDiscoveredServices().remove( discoveredService );
+                getDiscoveredServices().add( discoveredService );
+            }
+        }
+        // Always Notify the listeners
+        // If we don't do this, then if a region using the default config is initialized after notification,
+        // it will never get the service in it's no wait list.
+        // Leave it to the listeners to decide what to do.
+        for (IDiscoveryListener listener : getDiscoveryListeners())
+        {
+            listener.addDiscoveredService( discoveredService );
+        }
+
+    }
+
+    /**
+     * Get all the cache names we have facades for.
+     * <p>
+     * @return ArrayList
+     */
+    protected ArrayList<String> getCacheNames()
+    {
+        ArrayList<String> names = new ArrayList<String>();
+        names.addAll( cacheNames );
+        return names;
+    }
+
+    /**
+     * @param attr The UDPDiscoveryAttributes to set.
+     */
+    public void setUdpDiscoveryAttributes( UDPDiscoveryAttributes attr )
+    {
+        this.udpDiscoveryAttributes = attr;
+    }
+
+    /**
+     * @return Returns the lca.
+     */
+    public UDPDiscoveryAttributes getUdpDiscoveryAttributes()
+    {
+        return this.udpDiscoveryAttributes;
+    }
+
+    /**
+     * Shuts down the receiver.
+     */
+    @Override
+    public void shutdown()
+    {
+        if ( !shutdown )
+        {
+            shutdown = true;
+
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "Shutting down UDP discovery service receiver." );
+            }
+
+            try
+            {
+                // no good way to do this right now.
+                receiver.shutdown();
+                udpReceiverThread.interrupt();
+            }
+            catch ( Exception e )
+            {
+                log.error( "Problem interrupting UDP receiver thread." );
+            }
+
+            if ( log.isInfoEnabled() )
+            {
+                log.info( "Shutting down UDP discovery service sender." );
+            }
+
+            // also call the shutdown on the sender thread itself, which
+            // will result in a remove command.
+            try
+            {
+                sender.shutdown();
+            }
+            catch ( Exception e )
+            {
+                log.error( "Problem issuing remove broadcast via UDP sender." );
+            }
+        }
+        else
+        {
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Shutdown already called." );
+            }
+        }
+    }
+
+    /**
+     * Call shutdown to be safe.
+     * <p>
+     * @throws Throwable on error
+     */
+    @Override
+    protected void finalize()
+        throws Throwable
+    {
+        super.finalize();
+
+        // TODO reconsider this, since it uses the logger
+        shutdown();
+    }
+
+    /**
+     * @param discoveredServices The discoveredServices to set.
+     */
+    public synchronized void setDiscoveredServices( Set<DiscoveredService> discoveredServices )
+    {
+        this.discoveredServices = discoveredServices;
+    }
+
+    /**
+     * @return Returns the discoveredServices.
+     */
+    public synchronized Set<DiscoveredService> getDiscoveredServices()
+    {
+        return discoveredServices;
+    }
+
+    /**
+     * @return the discoveryListeners
+     */
+    private Set<IDiscoveryListener> getDiscoveryListeners()
+    {
+        return discoveryListeners;
+    }
+
+    /**
+     * @return the discoveryListeners
+     */
+    public Set<IDiscoveryListener> getCopyOfDiscoveryListeners()
+    {
+        Set<IDiscoveryListener> copy = new HashSet<IDiscoveryListener>();
+        copy.addAll( getDiscoveryListeners() );
+        return copy;
+    }
+
+    /**
+     * Adds a listener.
+     * <p>
+     * @param listener
+     * @return true if it wasn't already in the set
+     */
+    public boolean addDiscoveryListener( IDiscoveryListener listener )
+    {
+        return getDiscoveryListeners().add( listener );
+    }
+
+    /**
+     * Removes a listener.
+     * <p>
+     * @param listener
+     * @return true if it was in the set
+     */
+    public boolean removeDiscoveryListener( IDiscoveryListener listener )
+    {
+        return getDiscoveryListeners().remove( listener );
+    }
+}
diff --git a/src/org/apache/commons/jcs/utils/discovery/behavior/IDiscoveryListener.java b/src/org/apache/commons/jcs/utils/discovery/behavior/IDiscoveryListener.java
new file mode 100644
index 0000000..8a0d9d9
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/discovery/behavior/IDiscoveryListener.java
@@ -0,0 +1,44 @@
+package org.apache.commons.jcs.utils.discovery.behavior;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.utils.discovery.DiscoveredService;
+
+/**
+ * Interface for things that want to listen to discovery events. This will allow discovery to be
+ * used outside of the TCP lateral.
+ */
+public interface IDiscoveryListener
+{
+    /**
+     * Add the service if needed. This does not necessarily mean that the service is not already
+     * added. This can be called if there is a change in service information, such as the cacheNames.
+     * <p>
+     * @param service the service to add
+     */
+    void addDiscoveredService( DiscoveredService service );
+
+    /**
+     * Remove the service from the list.
+     * <p>
+     * @param service the service to remove
+     */
+    void removeDiscoveredService( DiscoveredService service );
+}
diff --git a/src/org/apache/commons/jcs/utils/net/HostNameUtil.java b/src/org/apache/commons/jcs/utils/net/HostNameUtil.java
new file mode 100644
index 0000000..7d80df5
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/net/HostNameUtil.java
@@ -0,0 +1,147 @@
+package org.apache.commons.jcs.utils.net;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.net.InetAddress;
+import java.net.NetworkInterface;
+import java.net.UnknownHostException;
+import java.util.Enumeration;
+
+/**
+ * Simple utility for getting the local host name.
+ * <p>
+ * @author Aaron Smuts
+ */
+public class HostNameUtil
+{
+    /** The logger. */
+    private static final Log log = LogFactory.getLog( HostNameUtil.class );
+
+    /**
+     * Gets the address for the local machine.
+     * <p>
+     * @return InetAddress.getLocalHost().getHostAddress()
+     * @throws UnknownHostException
+     */
+    public static String getLocalHostAddress() throws UnknownHostException
+    {
+        try
+        {
+            String hostAddress = getLocalHostLANAddress().getHostAddress();
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "hostAddress = [" + hostAddress + "]" );
+            }
+            return hostAddress;
+        }
+        catch ( UnknownHostException e1 )
+        {
+            log.error( "Couldn't get localhost address", e1 );
+            throw e1;
+        }
+    }
+
+    /**
+     * Returns an <code>InetAddress</code> object encapsulating what is most likely the machine's
+     * LAN IP address.
+     * <p>
+     * This method is intended for use as a replacement of JDK method
+     * <code>InetAddress.getLocalHost</code>, because that method is ambiguous on Linux systems.
+     * Linux systems enumerate the loopback network interface the same way as regular LAN network
+     * interfaces, but the JDK <code>InetAddress.getLocalHost</code> method does not specify the
+     * algorithm used to select the address returned under such circumstances, and will often return
+     * the loopback address, which is not valid for network communication. Details <a
+     * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4665037">here</a>.
+     * <p>
+     * This method will scan all IP addresses on all network interfaces on the host machine to
+     * determine the IP address most likely to be the machine's LAN address. If the machine has
+     * multiple IP addresses, this method will prefer a site-local IP address (e.g. 192.168.x.x or
+     * 10.10.x.x, usually IPv4) if the machine has one (and will return the first site-local address
+     * if the machine has more than one), but if the machine does not hold a site-local address,
+     * this method will return simply the first non-loopback address found (IPv4 or IPv6). <p/> If
+     * this method cannot find a non-loopback address using this selection algorithm, it will fall
+     * back to calling and returning the result of JDK method <code>InetAddress.getLocalHost</code>.
+     * <p>
+     * <a href="http://issues.apache.org/jira/browse/JCS-40">JIR ISSUE JCS-40</a>
+     * <p>
+     * @return InetAddress
+     * @throws UnknownHostException If the LAN address of the machine cannot be found.
+     */
+    public static InetAddress getLocalHostLANAddress()
+        throws UnknownHostException
+    {
+        try
+        {
+            InetAddress candidateAddress = null;
+            // Iterate all NICs (network interface cards)...
+            for ( Enumeration<NetworkInterface> ifaces = NetworkInterface.getNetworkInterfaces(); ifaces.hasMoreElements(); )
+            {
+                NetworkInterface iface = ifaces.nextElement();
+                // Iterate all IP addresses assigned to each card...
+                for ( Enumeration<InetAddress> inetAddrs = iface.getInetAddresses(); inetAddrs.hasMoreElements(); )
+                {
+                    InetAddress inetAddr = inetAddrs.nextElement();
+                    if ( !inetAddr.isLoopbackAddress() )
+                    {
+                        if ( inetAddr.isSiteLocalAddress() )
+                        {
+                            // Found non-loopback site-local address. Return it immediately...
+                            return inetAddr;
+                        }
+                        else if ( candidateAddress == null )
+                        {
+                            // Found non-loopback address, but not necessarily site-local.
+                            // Store it as a candidate to be returned if site-local address is not subsequently found...
+                            candidateAddress = inetAddr;
+                            // Note that we don't repeatedly assign non-loopback non-site-local addresses as candidates,
+                            // only the first. For subsequent iterations, candidate will be non-null.
+                        }
+                    }
+                }
+            }
+            if ( candidateAddress != null )
+            {
+                // We did not find a site-local address, but we found some other non-loopback address.
+                // Server might have a non-site-local address assigned to its NIC (or it might be running
+                // IPv6 which deprecates the "site-local" concept).
+                // Return this non-loopback candidate address...
+                return candidateAddress;
+            }
+            // At this point, we did not find a non-loopback address.
+            // Fall back to returning whatever InetAddress.getLocalHost() returns...
+            InetAddress jdkSuppliedAddress = InetAddress.getLocalHost();
+            if ( jdkSuppliedAddress == null )
+            {
+                throw new UnknownHostException( "The JDK InetAddress.getLocalHost() method unexpectedly returned null." );
+            }
+            return jdkSuppliedAddress;
+        }
+        catch ( Exception e )
+        {
+            UnknownHostException unknownHostException = new UnknownHostException( "Failed to determine LAN address: "
+                + e );
+            unknownHostException.initCause( e );
+            throw unknownHostException;
+        }
+    }
+}
diff --git a/src/org/apache/commons/jcs/utils/props/AbstractPropertyContainer.java b/src/org/apache/commons/jcs/utils/props/AbstractPropertyContainer.java
new file mode 100644
index 0000000..0c5f293
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/props/AbstractPropertyContainer.java
@@ -0,0 +1,190 @@
+package org.apache.commons.jcs.utils.props;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.access.exception.ConfigurationException;
+
+import java.util.Properties;
+
+/**
+ * Provides a mechanism to load properties into objects.
+ * <p>
+ * Functions that depend on properties should call ensureProperties() before it uses any properties.
+ */
+public abstract class AbstractPropertyContainer
+{
+    /** File, db, etc */
+    private static final PropertiesFactory DEFAULT_PROPERTIES_FACTORY = new PropertiesFactoryFileImpl();
+
+    /**
+     * A property group is a subsection of properties. It's sent to the properties factory to
+     * specify which group of properties to pull back. This will probably mean different things to
+     * different property factories. For PropertiesFactoryFileImpl, the propertiesGroup maps to a
+     * filename.
+     */
+    private String propertiesGroup;
+
+    /**
+     * The property heading is used to specify a starting point in the properties object. This is
+     * used so that settings can be relative to this propertiesHeading, as opposed to being
+     * statically coded. There's no enforcement of this, but users are encouraged to call
+     * getProperties().get( getPropertiesHeading() + ".foo" );
+     */
+    private String propertiesHeading;
+
+    /** The factory to use. */
+    private PropertiesFactory propertiesFactory;
+
+    /** The loaded properties. */
+    private Properties properties;
+
+    /**
+     * Makes sure an AbstractPropertyClass has all the properties it needs.
+     * <p>
+     * Synchronized mutators so multiple threads cannot cause problems. We wouldn't want the
+     * properties heading to get changed as we were processing the properties.
+     * <p>
+     * @throws ConfigurationException on configuration failure
+     */
+    public synchronized void ensureProperties()
+        throws ConfigurationException
+    {
+        if ( getProperties() == null )
+        {
+            initializeProperties();
+        }
+    }
+
+    /**
+     * Loads the properties and then calls handleProperties. Typically, you don't need to call this.
+     * This is primarily intended for reinitialization.
+     * <p>
+     * If the properties object is null, when you call ensureProperties initialize will be called.
+     * <p>
+     * @throws ConfigurationException on configuration failure
+     */
+    public synchronized void initializeProperties()
+        throws ConfigurationException
+    {
+        loadProperties();
+
+        handleProperties();
+    }
+
+    /**
+     * This loads the properties regardless of whether or not they have already been loaded.
+     * <p>
+     * @throws ConfigurationException on configuration failure
+     */
+    private void loadProperties()
+        throws ConfigurationException
+    {
+        if ( getPropertiesGroup() == null )
+        {
+            throw new ConfigurationException( "Properties group is null and it shouldn't be" );
+        }
+
+        if ( getPropertiesHeading() == null )
+        {
+            throw new ConfigurationException( "Properties heading is null and it shouldn't be" );
+        }
+
+        if ( getPropertiesFactory() == null )
+        {
+            setProperties( DEFAULT_PROPERTIES_FACTORY.getProperties( getPropertiesGroup() ) );
+        }
+        else
+        {
+            setProperties( getPropertiesFactory().getProperties( getPropertiesGroup() ) );
+        }
+    }
+
+    /**
+     * Sets fields for properties, and verifies that all necessary properties are there.
+     * <p>
+     * @throws ConfigurationException on configuration failure
+     */
+    protected abstract void handleProperties()
+        throws ConfigurationException;
+
+    /**
+     * @return Returns the properties.
+     */
+    public synchronized Properties getProperties()
+    {
+        return properties;
+    }
+
+    /**
+     * @param properties The properties to set.
+     */
+    public synchronized void setProperties( Properties properties )
+    {
+        this.properties = properties;
+    }
+
+    /**
+     * @return Returns the propertiesHeading.
+     */
+    public synchronized String getPropertiesHeading()
+    {
+        return propertiesHeading;
+    }
+
+    /**
+     * @param propertiesHeading The propertiesHeading to set.
+     */
+    public synchronized void setPropertiesHeading( String propertiesHeading )
+    {
+        this.propertiesHeading = propertiesHeading;
+    }
+
+    /**
+     * @return Returns the propertiesFactory.
+     */
+    public PropertiesFactory getPropertiesFactory()
+    {
+        return propertiesFactory;
+    }
+
+    /**
+     * @param propertiesFactory The propertiesFactory to set.
+     */
+    public void setPropertiesFactory( PropertiesFactory propertiesFactory )
+    {
+        this.propertiesFactory = propertiesFactory;
+    }
+
+    /**
+     * @return Returns the propertiesGroup.
+     */
+    public String getPropertiesGroup()
+    {
+        return propertiesGroup;
+    }
+
+    /**
+     * @param propertiesGroup The propertiesGroup to set.
+     */
+    public void setPropertiesGroup( String propertiesGroup )
+    {
+        this.propertiesGroup = propertiesGroup;
+    }
+}
diff --git a/src/org/apache/commons/jcs/utils/props/PropertiesFactory.java b/src/org/apache/commons/jcs/utils/props/PropertiesFactory.java
new file mode 100644
index 0000000..96e40de
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/props/PropertiesFactory.java
@@ -0,0 +1,36 @@
+package org.apache.commons.jcs.utils.props;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Properties;
+
+/**
+ * Retrieves properties from a configurable source.
+ */
+public interface PropertiesFactory
+{
+    /**
+     * Fetches a set of properties for the specified group.
+     * <p>
+     * @param groupName the group to pull properties from.
+     * @return a properties object.
+     */
+    Properties getProperties( String groupName );
+}
diff --git a/src/org/apache/commons/jcs/utils/props/PropertiesFactoryFileImpl.java b/src/org/apache/commons/jcs/utils/props/PropertiesFactoryFileImpl.java
new file mode 100644
index 0000000..5630ca4
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/props/PropertiesFactoryFileImpl.java
@@ -0,0 +1,40 @@
+package org.apache.commons.jcs.utils.props;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Properties;
+
+/**
+ * Goes to the file system to load a properties file.
+ */
+public class PropertiesFactoryFileImpl
+    implements PropertiesFactory
+{
+    /**
+     * Loads the properties using the property loader.
+     * @param groupName property group name
+     * @return Properties
+     */
+    @Override
+    public Properties getProperties( String groupName )
+    {
+        return PropertyLoader.loadProperties( groupName );
+    }
+}
diff --git a/src/org/apache/commons/jcs/utils/props/PropertyLoader.java b/src/org/apache/commons/jcs/utils/props/PropertyLoader.java
new file mode 100644
index 0000000..1baaf0a
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/props/PropertyLoader.java
@@ -0,0 +1,174 @@
+package org.apache.commons.jcs.utils.props;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.InputStream;
+import java.util.Properties;
+
+/**
+ * I modified this class to work with .ccf files in particular. I also removed
+ * the resource bundle functionality.
+ * <p>
+ * A simple class for loading java.util.Properties backed by .ccf files deployed
+ * as classpath resources. See individual methods for details.
+ * <p>
+ * The original source is from:
+ * <p>
+ * @author (C) <a
+ *         href="http://www.javaworld.com/columns/jw-qna-index.shtml">Vlad
+ *         Roubtsov </a>, 2003
+ */
+public abstract class PropertyLoader
+{
+    /** throw an error if we can load the file */
+    private static final boolean THROW_ON_LOAD_FAILURE = true;
+
+    /** File suffix. */
+    private static final String SUFFIX = ".ccf";
+
+    /** property suffix */
+    private static final String SUFFIX_PROPERTIES = ".properties";
+
+    /**
+     * Looks up a resource named 'name' in the classpath. The resource must map
+     * to a file with .ccf extention. The name is assumed to be absolute and can
+     * use either "/" or "." for package segment separation with an optional
+     * leading "/" and optional ".ccf" suffix.
+     * <p>
+     * The suffix ".ccf" will be appended if it is not set. This can also handle
+     * .properties files
+     * <p>
+     * Thus, the following names refer to the same resource:
+     *
+     * <pre>
+     *
+     *       some.pkg.Resource
+     *       some.pkg.Resource.ccf
+     *       some/pkg/Resource
+     *       some/pkg/Resource.ccf
+     *       /some/pkg/Resource
+     *       /some/pkg/Resource.ccf
+     * </pre>
+     *
+     * @param name
+     *            classpath resource name [may not be null]
+     * @param loader
+     *            classloader through which to load the resource [null is
+     *            equivalent to the application loader]
+     * @return resource converted to java.util.properties [may be null if the
+     *         resource was not found and THROW_ON_LOAD_FAILURE is false]
+     * @throws IllegalArgumentException
+     *             if the resource was not found and THROW_ON_LOAD_FAILURE is
+     *             true
+     */
+    public static Properties loadProperties( String name, ClassLoader loader )
+    {
+        boolean isCCFSuffix = true;
+
+        if ( name == null )
+            throw new IllegalArgumentException( "null input: name" );
+
+        ClassLoader classLoader = ( loader == null ) ? ClassLoader.getSystemClassLoader() : loader;
+
+        String fileName = name.startsWith( "/" ) ? name.substring( 1 ) : name;
+
+        if ( fileName.endsWith( SUFFIX ) )
+        {
+            fileName = fileName.substring( 0, fileName.length() - SUFFIX.length() );
+        }
+
+        if ( fileName.endsWith( SUFFIX_PROPERTIES ) )
+        {
+            fileName = fileName.substring( 0, fileName.length() - SUFFIX_PROPERTIES.length() );
+            isCCFSuffix = false;
+        }
+
+        Properties result = null;
+
+        InputStream in = null;
+        try
+        {
+            fileName = fileName.replace( '.', '/' );
+
+            if ( !fileName.endsWith( SUFFIX ) && isCCFSuffix )
+            {
+                fileName = fileName.concat( SUFFIX );
+            }
+            else if ( !fileName.endsWith( SUFFIX_PROPERTIES ) && !isCCFSuffix )
+            {
+                fileName = fileName.concat( SUFFIX_PROPERTIES );
+            }
+
+            // returns null on lookup failures:
+            in = classLoader.getResourceAsStream( fileName );
+            if ( in != null )
+            {
+                result = new Properties();
+                result.load( in ); // can throw IOException
+            }
+        }
+        catch ( Exception e )
+        {
+            result = null;
+        }
+        finally
+        {
+            if ( in != null )
+                try
+                {
+                    in.close();
+                }
+                catch ( Throwable ignore )
+                {
+                    // swallow
+                }
+        }
+
+        if ( THROW_ON_LOAD_FAILURE && result == null )
+        {
+            throw new IllegalArgumentException( "could not load [" + fileName + "]" + " as " + "a classloader resource" );
+        }
+
+        return result;
+    }
+
+    /**
+     * A convenience overload of {@link #loadProperties(String, ClassLoader)}
+     * that uses the current thread's context classloader. A better strategy
+     * would be to use techniques shown in
+     * http://www.javaworld.com/javaworld/javaqa/2003-06/01-qa-0606-load.html
+     * <p>
+     * @param name
+     * @return Properties
+     */
+    public static Properties loadProperties( final String name )
+    {
+        return loadProperties( name, Thread.currentThread().getContextClassLoader() );
+    }
+
+    /**
+     * Can't use this one.
+     */
+    private PropertyLoader()
+    {
+        super();
+    } // this class is not extentible
+
+}
diff --git a/src/org/apache/commons/jcs/utils/serialization/CompressingSerializer.java b/src/org/apache/commons/jcs/utils/serialization/CompressingSerializer.java
new file mode 100644
index 0000000..e9f6af6
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/serialization/CompressingSerializer.java
@@ -0,0 +1,126 @@
+package org.apache.commons.jcs.utils.serialization;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.behavior.IElementSerializer;
+import org.apache.commons.jcs.io.ObjectInputStreamClassLoaderAware;
+import org.apache.commons.jcs.utils.zip.CompressionUtil;
+
+import java.io.BufferedInputStream;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+
+/**
+ * Performs default serialization and de-serialization. It gzips the value.
+ */
+public class CompressingSerializer
+    implements IElementSerializer
+{
+    /**
+     * Serializes an object using default serialization. Compresses the byte array.
+     * <p>
+     * @param obj object
+     * @return byte[]
+     * @throws IOException on i/o problem
+     */
+    @Override
+    public <T> byte[] serialize( T obj )
+        throws IOException
+    {
+        byte[] uncompressed = serializeObject( obj );
+        byte[] compressed = CompressionUtil.compressByteArray( uncompressed );
+        return compressed;
+    }
+
+    /**
+     * Does the basic serialization.
+     * <p>
+     * @param obj object
+     * @return byte[]
+     * @throws IOException on i/o problem
+     */
+    protected <T> byte[] serializeObject( T obj )
+        throws IOException
+    {
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        ObjectOutputStream oos = new ObjectOutputStream( baos );
+        try
+        {
+            oos.writeObject( obj );
+        }
+        finally
+        {
+            oos.close();
+        }
+        byte[] uncompressed = baos.toByteArray();
+        return uncompressed;
+    }
+
+    /**
+     * Uses default de-serialization to turn a byte array into an object. Decompresses the value
+     * first. All exceptions are converted into IOExceptions.
+     * <p>
+     * @param data bytes of data
+     * @return Object
+     * @throws IOException on i/o problem
+     * @throws ClassNotFoundException if class is not found during deserialization
+     */
+    @Override
+    public <T> T deSerialize( byte[] data, ClassLoader loader )
+        throws IOException, ClassNotFoundException
+    {
+        if ( data == null )
+        {
+            return null;
+        }
+        byte[] decompressedByteArray = CompressionUtil.decompressByteArray( data );
+        return deserializeObject( decompressedByteArray );
+    }
+
+    /**
+     * Does the standard deserialization.
+     * <p>
+     * @param decompressedByteArray array of decompressed bytes
+     * @return Object
+     * @throws IOException on i/o error
+     * @throws ClassNotFoundException if class is not found during deserialization
+     */
+    protected <T> T deserializeObject( byte[] decompressedByteArray )
+        throws IOException, ClassNotFoundException
+    {
+        ByteArrayInputStream bais = new ByteArrayInputStream( decompressedByteArray );
+        BufferedInputStream bis = new BufferedInputStream( bais );
+        ObjectInputStream ois = new ObjectInputStreamClassLoaderAware( bis, null );
+
+        try
+        {
+            @SuppressWarnings("unchecked") // Need to cast from Object
+            T readObject = (T) ois.readObject();
+            return readObject;
+        }
+        finally
+        {
+            ois.close();
+        }
+    }
+}
diff --git a/src/org/apache/commons/jcs/utils/serialization/SerializationConversionUtil.java b/src/org/apache/commons/jcs/utils/serialization/SerializationConversionUtil.java
new file mode 100644
index 0000000..35c945c
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/serialization/SerializationConversionUtil.java
@@ -0,0 +1,147 @@
+package org.apache.commons.jcs.utils.serialization;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.CacheElement;
+import org.apache.commons.jcs.engine.CacheElementSerialized;
+import org.apache.commons.jcs.engine.behavior.ICacheElement;
+import org.apache.commons.jcs.engine.behavior.ICacheElementSerialized;
+import org.apache.commons.jcs.engine.behavior.IElementSerializer;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.IOException;
+
+/**
+ * This uses a supplied Serializer to convert to and from cache elements.
+ * <p>
+ * @author Aaron Smuts
+ */
+public class SerializationConversionUtil
+{
+    /** The logger */
+    private static final Log log = LogFactory.getLog( SerializationConversionUtil.class );
+
+    /**
+     * This returns a wrapper that has a serialized version of the value instead
+     * of the value.
+     * <p>
+     * @param element
+     * @param elementSerializer
+     *            the serializer to be used.
+     * @return null for null;
+     * @throws IOException
+     */
+    public static <K, V> ICacheElementSerialized<K, V> getSerializedCacheElement( ICacheElement<K, V> element,
+                                                                    IElementSerializer elementSerializer )
+        throws IOException
+    {
+        if ( element == null )
+        {
+            return null;
+        }
+
+        byte[] serializedValue = null;
+
+        // if it has already been serialized, don't do it again.
+        if ( element instanceof ICacheElementSerialized )
+        {
+            serializedValue = ( (ICacheElementSerialized<K, V>) element ).getSerializedValue();
+        }
+        else
+        {
+            if ( elementSerializer != null )
+            {
+                try
+                {
+                    serializedValue = elementSerializer.serialize( element.getVal() );
+                }
+                catch ( IOException e )
+                {
+                    log.error( "Problem serializing object.", e );
+                    throw e;
+                }
+            }
+            else
+            {
+                // we could just use the default.
+                log.warn( "ElementSerializer is null.  Could not serialize object." );
+                throw new IOException( "Could not serialize object.  The ElementSerializer is null." );
+            }
+        }
+        ICacheElementSerialized<K, V> serialized = new CacheElementSerialized<K, V>(
+                element.getCacheName(), element.getKey(), serializedValue, element.getElementAttributes() );
+
+        return serialized;
+    }
+
+    /**
+     * This returns a wrapper that has a de-serialized version of the value
+     * instead of the serialized value.
+     * <p>
+     * @param serialized
+     * @param elementSerializer
+     *            the serializer to be used.
+     * @return null for null;
+     * @throws IOException
+     * @throws ClassNotFoundException
+     */
+    public static <K, V> ICacheElement<K, V> getDeSerializedCacheElement( ICacheElementSerialized<K, V> serialized,
+                                                            IElementSerializer elementSerializer )
+        throws IOException, ClassNotFoundException
+    {
+        if ( serialized == null )
+        {
+            return null;
+        }
+
+        V deSerializedValue = null;
+
+        if ( elementSerializer != null )
+        {
+            try
+            {
+                try
+                {
+                    deSerializedValue = elementSerializer.deSerialize( serialized.getSerializedValue(), null );
+                }
+                catch ( ClassNotFoundException e )
+                {
+                    log.error( "Problem de-serializing object.", e );
+                    throw e;
+                }
+            }
+            catch ( IOException e )
+            {
+                log.error( "Problem de-serializing object.", e );
+                throw e;
+            }
+        }
+        else
+        {
+            // we could just use the default.
+            log.warn( "ElementSerializer is null.  Could not serialize object." );
+        }
+        ICacheElement<K, V> deSerialized = new CacheElement<K, V>( serialized.getCacheName(), serialized.getKey(), deSerializedValue );
+        deSerialized.setElementAttributes( serialized.getElementAttributes() );
+
+        return deSerialized;
+    }
+}
diff --git a/src/org/apache/commons/jcs/utils/serialization/StandardSerializer.java b/src/org/apache/commons/jcs/utils/serialization/StandardSerializer.java
new file mode 100644
index 0000000..455b962
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/serialization/StandardSerializer.java
@@ -0,0 +1,91 @@
+package org.apache.commons.jcs.utils.serialization;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.engine.behavior.IElementSerializer;
+import org.apache.commons.jcs.io.ObjectInputStreamClassLoaderAware;
+
+import java.io.BufferedInputStream;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+
+/**
+ * Performs default serialization and de-serialization.
+ * <p>
+ * @author Aaron Smuts
+ */
+public class StandardSerializer
+    implements IElementSerializer
+{
+    /**
+     * Serializes an object using default serialization.
+     * <p>
+     * @param obj
+     * @return byte[]
+     * @throws IOException
+     */
+    @Override
+    public <T> byte[] serialize( T obj )
+        throws IOException
+    {
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        ObjectOutputStream oos = new ObjectOutputStream( baos );
+        try
+        {
+            oos.writeObject( obj );
+        }
+        finally
+        {
+            oos.close();
+        }
+        return baos.toByteArray();
+    }
+
+    /**
+     * Uses default de-serialization to turn a byte array into an object. All exceptions are
+     * converted into IOExceptions.
+     * <p>
+     * @param data
+     * @return Object
+     * @throws IOException
+     * @throws ClassNotFoundException
+     */
+    @Override
+    public <T> T deSerialize( byte[] data, ClassLoader loader )
+        throws IOException, ClassNotFoundException
+    {
+        ByteArrayInputStream bais = new ByteArrayInputStream( data );
+        BufferedInputStream bis = new BufferedInputStream( bais );
+        ObjectInputStream ois = new ObjectInputStreamClassLoaderAware( bis, loader );
+        try
+        {
+            @SuppressWarnings("unchecked") // Need to cast from Object
+            T readObject = (T) ois.readObject();
+            return readObject;
+        }
+        finally
+        {
+            ois.close();
+        }
+    }
+}
diff --git a/src/org/apache/commons/jcs/utils/servlet/JCSServletContextListener.java b/src/org/apache/commons/jcs/utils/servlet/JCSServletContextListener.java
new file mode 100644
index 0000000..08eb14e
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/servlet/JCSServletContextListener.java
@@ -0,0 +1,87 @@
+package org.apache.commons.jcs.utils.servlet;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.jcs.access.exception.CacheException;
+import org.apache.commons.jcs.engine.control.CompositeCacheManager;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
+
+/**
+ * If you add this to the context listeners section of your web.xml file, this will shutdown JCS
+ * gracefully.
+ * <p>
+ * Add the following to the top of your web.xml file.
+ *
+ * <pre>
+ *  <listener>
+ *  <listener-class>
+ *  org.apache.commons.jcs.utils.servlet.JCSServletContextListener
+ *  </listener-class>
+ *  </listener>
+ * </pre>
+ * @author Aaron Smuts
+ */
+public class JCSServletContextListener
+    implements ServletContextListener
+{
+    /** The logger */
+    private static final Log log = LogFactory.getLog( JCSServletContextListener.class );
+
+    /**
+     * This does nothing. We don't want to initialize the cache here.
+     * <p>
+     * @see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent)
+     */
+    @Override
+    public void contextInitialized( ServletContextEvent arg0 )
+    {
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "contextInitialized" );
+        }
+    }
+
+    /**
+     * This gets the singleton instance of the CompositeCacheManager and calls shutdown.
+     * <p>
+     * @see javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.ServletContextEvent)
+     */
+    @Override
+    public void contextDestroyed( ServletContextEvent arg0 )
+    {
+        if ( log.isInfoEnabled() )
+        {
+            log.info( "contextDestroyed, shutting down JCS." );
+        }
+
+        try
+        {
+            CompositeCacheManager.getInstance().shutDown();
+        }
+        catch (CacheException e)
+        {
+            log.error( "Could not retrieve cache manager instance", e );
+        }
+    }
+}
diff --git a/src/org/apache/commons/jcs/utils/struct/AbstractLRUMap.java b/src/org/apache/commons/jcs/utils/struct/AbstractLRUMap.java
new file mode 100644
index 0000000..62faf66
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/struct/AbstractLRUMap.java
@@ -0,0 +1,671 @@
+package org.apache.commons.jcs.utils.struct;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
+import org.apache.commons.jcs.engine.control.group.GroupAttrName;
+import org.apache.commons.jcs.engine.stats.StatElement;
+import org.apache.commons.jcs.engine.stats.Stats;
+import org.apache.commons.jcs.engine.stats.behavior.IStatElement;
+import org.apache.commons.jcs.engine.stats.behavior.IStats;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * This is a simple LRUMap. It implements most of the map methods. It is not recommended that you
+ * use any but put, get, remove, and clear.
+ * <p>
+ * Children can implement the processRemovedLRU method if they want to handle the removal of the
+ * lest recently used item.
+ * <p>
+ * This class was abstracted out of the LRU Memory cache. Put, remove, and get should be thread
+ * safe. It uses a hashtable and our own double linked list.
+ * <p>
+ * Locking is done on the instance.
+ * <p>
+ * @author aaron smuts
+ */
+public abstract class AbstractLRUMap<K, V>
+    implements Map<K, V>
+{
+    /** The logger */
+    private static final Log log = LogFactory.getLog( AbstractLRUMap.class );
+
+    /** double linked list for lru */
+    private final DoubleLinkedList<LRUElementDescriptor<K, V>> list;
+
+    /** Map where items are stored by key. */
+    private Map<K, LRUElementDescriptor<K, V>> map;
+
+    /** stats */
+    int hitCnt = 0;
+
+    /** stats */
+    int missCnt = 0;
+
+    /** stats */
+    int putCnt = 0;
+
+    /** make configurable */
+    private int chunkSize = 1;
+
+    private final Lock lock = new ReentrantLock();
+
+    /**
+     * This creates an unbounded version. Setting the max objects will result in spooling on
+     * subsequent puts.
+     */
+    public AbstractLRUMap()
+    {
+        list = new DoubleLinkedList<LRUElementDescriptor<K, V>>();
+
+        // normal hshtable is faster for
+        // sequential keys.
+        map = new ConcurrentHashMap<K, LRUElementDescriptor<K, V>>();
+        // map = new ConcurrentHashMap();
+    }
+
+
+    /**
+     * This simply returned the number of elements in the map.
+     * <p>
+     * @see java.util.Map#size()
+     */
+    @Override
+    public int size()
+    {
+        return map.size();
+    }
+
+    /**
+     * This removes all the items. It clears the map and the double linked list.
+     * <p>
+     * @see java.util.Map#clear()
+     */
+    @Override
+    public void clear()
+    {
+        lock.lock();
+        try
+        {
+            map.clear();
+            list.removeAll();
+        }
+        finally
+        {
+            lock.unlock();
+        }
+    }
+
+    /**
+     * Returns true if the map is empty.
+     * <p>
+     * @see java.util.Map#isEmpty()
+     */
+    @Override
+    public boolean isEmpty()
+    {
+        return map.size() == 0;
+    }
+
+    /**
+     * Returns true if the map contains an element for the supplied key.
+     * <p>
+     * @see java.util.Map#containsKey(java.lang.Object)
+     */
+    @Override
+    public boolean containsKey( Object key )
+    {
+        return map.containsKey( key );
+    }
+
+    /**
+     * This is an expensive operation that determines if the object supplied is mapped to any key.
+     * <p>
+     * @see java.util.Map#containsValue(java.lang.Object)
+     */
+    @Override
+    public boolean containsValue( Object value )
+    {
+        return map.containsValue( value );
+    }
+
+    /**
+     * @return map.values();
+     */
+    @Override
+    public Collection<V> values()
+    {
+        List<V> valueList = new ArrayList<V>(map.size());
+
+        for (LRUElementDescriptor<K, V> value : map.values())
+        {
+            valueList.add(value.getPayload());
+        }
+
+        return valueList;
+    }
+
+    /**
+     * @param source
+     */
+    @Override
+    public void putAll( Map<? extends K, ? extends V> source )
+    {
+        if ( source != null )
+        {
+            for (Map.Entry<? extends K, ? extends V> entry : source.entrySet())
+            {
+                this.put( entry.getKey(), entry.getValue() );
+            }
+        }
+    }
+
+    /**
+     * @param key
+     * @return Object
+     */
+    @Override
+    public V get( Object key )
+    {
+        V retVal = null;
+
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "getting item  for key " + key );
+        }
+
+        LRUElementDescriptor<K, V> me = map.get( key );
+
+        if ( me != null )
+        {
+            hitCnt++;
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "LRUMap hit for " + key );
+            }
+
+            retVal = me.getPayload();
+
+            list.makeFirst( me );
+        }
+        else
+        {
+            missCnt++;
+            log.debug( "LRUMap miss for " + key );
+        }
+
+        // verifyCache();
+        return retVal;
+    }
+
+    /**
+     * This gets an element out of the map without adjusting it's posisiton in the LRU. In other
+     * words, this does not count as being used. If the element is the last item in the list, it
+     * will still be the last itme in the list.
+     * <p>
+     * @param key
+     * @return Object
+     */
+    public V getQuiet( Object key )
+    {
+        V ce = null;
+
+        LRUElementDescriptor<K, V> me = map.get( key );
+        if ( me != null )
+        {
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "LRUMap quiet hit for " + key );
+            }
+
+            ce = me.getPayload();
+        }
+        else if ( log.isDebugEnabled() )
+        {
+            log.debug( "LRUMap quiet miss for " + key );
+        }
+
+        return ce;
+    }
+
+    /**
+     * @param key
+     * @return Object removed
+     */
+    @Override
+    public V remove( Object key )
+    {
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "removing item for key: " + key );
+        }
+
+        // remove single item.
+        lock.lock();
+        try
+        {
+            LRUElementDescriptor<K, V> me = map.remove(key);
+
+            if (me != null)
+            {
+                list.remove(me);
+                return me.getPayload();
+            }
+        }
+        finally
+        {
+            lock.unlock();
+        }
+
+        return null;
+    }
+
+    /**
+     * @param key
+     * @param value
+     * @return Object
+     */
+    @Override
+    public V put(K key, V value)
+    {
+        putCnt++;
+
+        LRUElementDescriptor<K, V> old = null;
+        lock.lock();
+        try
+        {
+            // TODO address double synchronization of addFirst, use write lock
+            addFirst( key, value );
+            // this must be synchronized
+            LRUElementDescriptor<K, V> first = list.getFirst();
+            old = map.put(first.getKey(), first);
+
+            // If the node was the same as an existing node, remove it.
+            if ( old != null && first.getKey().equals(old.getKey()))
+            {
+                list.remove( old );
+            }
+        }
+        finally
+        {
+            lock.unlock();
+        }
+
+        // If the element limit is reached, we need to spool
+
+        if (shouldRemove())
+        {
+            final boolean debugEnabled = log.isDebugEnabled();
+            if (debugEnabled)
+            {
+                log.debug( "In memory limit reached, removing least recently used." );
+            }
+
+            // The spool will put them in a disk event queue, so there is no
+            // need to pre-queue the queuing. This would be a bit wasteful
+            // and wouldn't save much time in this synchronous call.
+
+            while ( shouldRemove() )
+            {
+                lock.lock();
+                try
+                {
+                    LRUElementDescriptor<K, V> last = list.getLast();
+                    if (last != null)
+                    {
+                        processRemovedLRU(last.getKey(), last.getPayload());
+                        if (map.remove(last.getKey()) == null)
+                        {
+                            log.warn("update: remove failed for key: "
+                                    + last.getKey());
+                            verifyCache();
+                        }
+                        list.removeLast();
+                    }
+                    else
+                    {
+                        verifyCache();
+                        throw new Error("update: last is null!");
+                    }
+                }
+                finally
+                {
+                    lock.unlock();
+                }
+            }
+
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "update: After spool map size: " + map.size() );
+            }
+            if ( map.size() != dumpCacheSize() )
+            {
+                log.error("update: After spool, size mismatch: map.size() = " + map.size() + ", linked list size = "
+                        + dumpCacheSize());
+            }
+        }
+
+        if ( old != null )
+        {
+            return old.getPayload();
+        }
+        return null;
+    }
+
+    protected abstract boolean shouldRemove();
+
+
+    /**
+     * Adds a new node to the start of the link list.
+     * <p>
+     * @param key
+     * @param val The feature to be added to the First
+     */
+    private void addFirst(K key, V val)
+    {
+        lock.lock();
+        try
+        {
+            LRUElementDescriptor<K, V> me = new LRUElementDescriptor<K, V>(key, val);
+            list.addFirst( me );
+        }
+        finally
+        {
+            lock.unlock();
+        }
+    }
+
+    /**
+     * Returns the size of the list.
+     * <p>
+     * @return int
+     */
+    private int dumpCacheSize()
+    {
+        return list.size();
+    }
+
+    /**
+     * Dump the cache entries from first to list for debugging.
+     */
+    @SuppressWarnings("unchecked") // No generics for public fields
+    public void dumpCacheEntries()
+    {
+        log.debug( "dumpingCacheEntries" );
+        for ( LRUElementDescriptor<K, V> me = list.getFirst(); me != null; me = (LRUElementDescriptor<K, V>) me.next )
+        {
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "dumpCacheEntries> key=" + me.getKey() + ", val=" + me.getPayload() );
+            }
+        }
+    }
+
+    /**
+     * Dump the cache map for debugging.
+     */
+    public void dumpMap()
+    {
+        log.debug( "dumpingMap" );
+        for (Map.Entry<K, LRUElementDescriptor<K, V>> e : map.entrySet())
+        {
+            LRUElementDescriptor<K, V> me = e.getValue();
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "dumpMap> key=" + e.getKey() + ", val=" + me.getPayload() );
+            }
+        }
+    }
+
+    /**
+     * Checks to see if all the items that should be in the cache are. Checks consistency between
+     * List and map.
+     */
+    @SuppressWarnings("unchecked") // No generics for public fields
+    protected void verifyCache()
+    {
+        if ( !log.isDebugEnabled() )
+        {
+            return;
+        }
+
+        boolean found = false;
+        log.debug( "verifycache: mapContains " + map.size() + " elements, linked list contains " + dumpCacheSize()
+            + " elements" );
+        log.debug( "verifycache: checking linked list by key " );
+        for (LRUElementDescriptor<K, V> li = list.getFirst(); li != null; li = (LRUElementDescriptor<K, V>) li.next )
+        {
+            K key = li.getKey();
+            if ( !map.containsKey( key ) )
+            {
+                log.error( "verifycache: map does not contain key : " + li.getKey() );
+                log.error( "li.hashcode=" + li.getKey().hashCode() );
+                log.error( "key class=" + key.getClass() );
+                log.error( "key hashcode=" + key.hashCode() );
+                log.error( "key toString=" + key.toString() );
+                if ( key instanceof GroupAttrName )
+                {
+                    GroupAttrName<?> name = (GroupAttrName<?>) key;
+                    log.error( "GroupID hashcode=" + name.groupId.hashCode() );
+                    log.error( "GroupID.class=" + name.groupId.getClass() );
+                    log.error( "AttrName hashcode=" + name.attrName.hashCode() );
+                    log.error( "AttrName.class=" + name.attrName.getClass() );
+                }
+                dumpMap();
+            }
+            else if ( map.get( li.getKey() ) == null )
+            {
+                log.error( "verifycache: linked list retrieval returned null for key: " + li.getKey() );
+            }
+        }
+
+        log.debug( "verifycache: checking linked list by value " );
+        for (LRUElementDescriptor<K, V> li3 = list.getFirst(); li3 != null; li3 = (LRUElementDescriptor<K, V>) li3.next )
+        {
+            if ( map.containsValue( li3 ) == false )
+            {
+                log.error( "verifycache: map does not contain value : " + li3 );
+                dumpMap();
+            }
+        }
+
+        log.debug( "verifycache: checking via keysets!" );
+        for (Iterator<K> itr2 = map.keySet().iterator(); itr2.hasNext(); )
+        {
+            found = false;
+            Serializable val = null;
+            try
+            {
+                val = (Serializable) itr2.next();
+            }
+            catch ( NoSuchElementException nse )
+            {
+                log.error( "verifycache: no such element exception" );
+                continue;
+            }
+
+            for (LRUElementDescriptor<K, V> li2 = list.getFirst(); li2 != null; li2 = (LRUElementDescriptor<K, V>) li2.next )
+            {
+                if ( val.equals( li2.getKey() ) )
+                {
+                    found = true;
+                    break;
+                }
+            }
+            if ( !found )
+            {
+                log.error( "verifycache: key not found in list : " + val );
+                dumpCacheEntries();
+                if ( map.containsKey( val ) )
+                {
+                    log.error( "verifycache: map contains key" );
+                }
+                else
+                {
+                    log.error( "verifycache: map does NOT contain key, what the HECK!" );
+                }
+            }
+        }
+    }
+
+    /**
+     * Logs an error is an element that should be in the cache is not.
+     * <p>
+     * @param key
+     */
+    @SuppressWarnings("unchecked") // No generics for public fields
+    protected void verifyCache( Object key )
+    {
+        if ( !log.isDebugEnabled() )
+        {
+            return;
+        }
+
+        boolean found = false;
+
+        // go through the linked list looking for the key
+        for (LRUElementDescriptor<K, V> li = list.getFirst(); li != null; li = (LRUElementDescriptor<K, V>) li.next )
+        {
+            if ( li.getKey() == key )
+            {
+                found = true;
+                log.debug( "verifycache(key) key match: " + key );
+                break;
+            }
+        }
+        if ( !found )
+        {
+            log.error( "verifycache(key), couldn't find key! : " + key );
+        }
+    }
+
+    /**
+     * This is called when an item is removed from the LRU. We just log some information.
+     * <p>
+     * Children can implement this method for special behavior.
+     * @param key
+     * @param value
+     */
+    protected void processRemovedLRU(K key, V value )
+    {
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Removing key: [" + key + "] from LRUMap store, value = [" + value + "]" );
+            log.debug( "LRUMap store size: '" + this.size() + "'." );
+        }
+    }
+
+    /**
+     * The chunk size is the number of items to remove when the max is reached. By default it is 1.
+     * <p>
+     * @param chunkSize The chunkSize to set.
+     */
+    public void setChunkSize( int chunkSize )
+    {
+        this.chunkSize = chunkSize;
+    }
+
+    /**
+     * @return Returns the chunkSize.
+     */
+    public int getChunkSize()
+    {
+        return chunkSize;
+    }
+
+    /**
+     * @return IStats
+     */
+    public IStats getStatistics()
+    {
+        IStats stats = new Stats();
+        stats.setTypeName( "LRUMap" );
+
+        ArrayList<IStatElement<?>> elems = new ArrayList<IStatElement<?>>();
+
+        elems.add(new StatElement<Integer>( "List Size", Integer.valueOf(list.size()) ) );
+        elems.add(new StatElement<Integer>( "Map Size", Integer.valueOf(map.size()) ) );
+        elems.add(new StatElement<Integer>( "Put Count", Integer.valueOf(putCnt) ) );
+        elems.add(new StatElement<Integer>( "Hit Count", Integer.valueOf(hitCnt) ) );
+        elems.add(new StatElement<Integer>( "Miss Count", Integer.valueOf(missCnt) ) );
+
+        stats.setStatElements( elems );
+
+        return stats;
+    }
+
+    /**
+     * This returns a set of entries. Our LRUMapEntry is used since the value stored in the
+     * underlying map is a node in the double linked list. We wouldn't want to return this to the
+     * client, so we construct a new entry with the payload of the node.
+     * <p>
+     * TODO we should return out own set wrapper, so we can avoid the extra object creation if it
+     * isn't necessary.
+     * <p>
+     * @see java.util.Map#entrySet()
+     */
+    @Override
+    public Set<Map.Entry<K, V>> entrySet()
+    {
+        lock.lock();
+        try
+        {
+            // todo, we should return a defensive copy
+            Set<Map.Entry<K, LRUElementDescriptor<K, V>>> entries = map.entrySet();
+
+            Set<Map.Entry<K, V>> unWrapped = new HashSet<Map.Entry<K, V>>();
+
+            for (Map.Entry<K, LRUElementDescriptor<K, V>> pre : entries) {
+                Map.Entry<K, V> post = new LRUMapEntry<K, V>(pre.getKey(), pre.getValue().getPayload());
+                unWrapped.add(post);
+            }
+
+            return unWrapped;
+        }
+        finally
+        {
+            lock.unlock();
+        }
+    }
+
+    /**
+     * @return map.keySet();
+     */
+    @Override
+    public Set<K> keySet()
+    {
+        // TODO fix this, it needs to return the keys inside the wrappers.
+        return map.keySet();
+    }
+
+}
diff --git a/src/org/apache/commons/jcs/utils/struct/BoundedQueue.java b/src/org/apache/commons/jcs/utils/struct/BoundedQueue.java
new file mode 100644
index 0000000..73e4cd5
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/struct/BoundedQueue.java
@@ -0,0 +1,94 @@
+package org.apache.commons.jcs.utils.struct;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * This is a bounded queue. It only allows maxSize items.
+ * <p>
+ * @author Aaron Smuts
+ */
+public class BoundedQueue<T>
+{
+    /** Queue size limit. */
+    private final int maxSize;
+
+    /** The list backing the queue */
+    private final DoubleLinkedList<DoubleLinkedListNode<T>> list =
+        new DoubleLinkedList<DoubleLinkedListNode<T>>();
+
+    /**
+     * Initialize the bounded queue.
+     * <p>
+     * @param maxSize
+     */
+    public BoundedQueue( int maxSize )
+    {
+        this.maxSize = maxSize;
+    }
+
+    /**
+     * Adds an item to the end of the queue, which is the front of the list.
+     * <p>
+     * @param object
+     */
+    public void add( T object )
+    {
+        if ( list.size() >= maxSize )
+        {
+            list.removeLast();
+        }
+        list.addFirst( new DoubleLinkedListNode<T>( object ) );
+    }
+
+    /**
+     * Takes the last of the underlying double linked list.
+     * <p>
+     * @return null if it is epmpty.
+     */
+    public T take()
+    {
+        DoubleLinkedListNode<T> node = list.removeLast();
+        if ( node != null )
+        {
+            return node.getPayload();
+        }
+        return null;
+    }
+
+    /**
+     * Return the number of items in the queue.
+     * <p>
+     * @return size
+     */
+    public int size()
+    {
+        return list.size();
+    }
+
+    /**
+     * Return true if the size is <= 0;
+     * <p>
+     * @return true is size <= 0;
+     */
+    public boolean isEmpty()
+    {
+        return list.size() <= 0;
+    }
+}
diff --git a/src/org/apache/commons/jcs/utils/struct/DoubleLinkedList.java b/src/org/apache/commons/jcs/utils/struct/DoubleLinkedList.java
new file mode 100644
index 0000000..e83a82c
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/struct/DoubleLinkedList.java
@@ -0,0 +1,303 @@
+package org.apache.commons.jcs.utils.struct;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * This is a generic thread safe double linked list. It's very simple and all the operations are so
+ * quick that course grained synchronization is more than acceptable.
+ */
+ at SuppressWarnings({ "unchecked", "rawtypes" }) // Don't know how to resolve this with generics
+public class DoubleLinkedList<T extends DoubleLinkedListNode>
+{
+    /** record size to avoid having to iterate */
+    private int size = 0;
+
+    /** The logger */
+    private static final Log log = LogFactory.getLog( DoubleLinkedList.class );
+
+    /** LRU double linked list head node */
+    private T first;
+
+    /** LRU double linked list tail node */
+    private T last;
+
+    /**
+     * Default constructor.
+     */
+    public DoubleLinkedList()
+    {
+        super();
+    }
+
+    /**
+     * Adds a new node to the end of the link list.
+     * <p>
+     * @param me The feature to be added to the Last
+     */
+    public synchronized void addLast(T me)
+    {
+        if ( first == null )
+        {
+            // empty list.
+            first = me;
+        }
+        else
+        {
+            last.next = me;
+            me.prev = last;
+        }
+        last = me;
+        size++;
+    }
+
+    /**
+     * Adds a new node to the start of the link list.
+     * <p>
+     * @param me The feature to be added to the First
+     */
+    public synchronized void addFirst(T me)
+    {
+        if ( last == null )
+        {
+            // empty list.
+            last = me;
+        }
+        else
+        {
+            first.prev = me;
+            me.next = first;
+        }
+        first = me;
+        size++;
+    }
+
+    /**
+     * Returns the last node from the link list, if there are any nodes.
+     * <p>
+     * @return The last node.
+     */
+    public synchronized T getLast()
+    {
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "returning last node" );
+        }
+        return last;
+    }
+
+    /**
+     * Removes the specified node from the link list.
+     * <p>
+     * @return DoubleLinkedListNode, the first node.
+     */
+    public synchronized T getFirst()
+    {
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "returning first node" );
+        }
+        return first;
+    }
+
+    /**
+     * Moves an existing node to the start of the link list.
+     * <p>
+     * @param ln The node to set as the head.
+     */
+    public synchronized void makeFirst(T ln)
+    {
+        if ( ln.prev == null )
+        {
+            // already the first node. or not a node
+            return;
+        }
+        // splice: remove it from the list
+        ln.prev.next = ln.next;
+
+        if ( ln.next == null )
+        {
+            // last but not the first.
+            last = (T) ln.prev;
+            last.next = null;
+        }
+        else
+        {
+            // neither the last nor the first.
+            ln.next.prev = ln.prev;
+        }
+        first.prev = ln;
+        ln.next = first;
+        ln.prev = null;
+        first = ln;
+    }
+
+    /**
+     * Moves an existing node to the end of the link list.
+     * <p>
+     * @param ln The node to set as the head.
+     */
+    public synchronized void makeLast(T ln)
+    {
+        if ( ln.next == null )
+        {
+            // already the last node. or not a node
+            return;
+        }
+        // splice: remove it from the list
+        if ( ln.prev != null )
+        {
+            ln.prev.next = ln.next;
+        }
+        else
+        {
+            // first
+            first = last;
+        }
+
+        if ( last != null )
+        {
+            last.next = ln;
+        }
+        ln.prev = last;
+        ln.next = null;
+        last = ln;
+    }
+
+    /**
+     * Remove all of the elements from the linked list implementation.
+     */
+    public synchronized void removeAll()
+    {
+        for (T me = first; me != null; )
+        {
+            if ( me.prev != null )
+            {
+                me.prev = null;
+            }
+            T next = (T) me.next;
+            me = next;
+        }
+        first = last = null;
+        // make sure this will work, could be add while this is happening.
+        size = 0;
+    }
+
+    /**
+     * Removes the specified node from the link list.
+     * <p>
+     * @param me Description of the Parameter
+     * @return true if an element was removed.
+     */
+    public synchronized boolean remove(T me)
+    {
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "removing node" );
+        }
+
+        if ( me.next == null )
+        {
+            if ( me.prev == null )
+            {
+                // Make sure it really is the only node before setting head and
+                // tail to null. It is possible that we will be passed a node
+                // which has already been removed from the list, in which case
+                // we should ignore it
+
+                if ( me == first && me == last )
+                {
+                    first = last = null;
+                }
+            }
+            else
+            {
+                // last but not the first.
+                last = (T) me.prev;
+                last.next = null;
+                me.prev = null;
+            }
+        }
+        else if ( me.prev == null )
+        {
+            // first but not the last.
+            first = (T) me.next;
+            first.prev = null;
+            me.next = null;
+        }
+        else
+        {
+            // neither the first nor the last.
+            me.prev.next = me.next;
+            me.next.prev = me.prev;
+            me.prev = me.next = null;
+        }
+        size--;
+
+        return true;
+    }
+
+    /**
+     * Removes the specified node from the link list.
+     * <p>
+     * @return The last node if there was one to remove.
+     */
+    public synchronized T removeLast()
+    {
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "removing last node" );
+        }
+        T temp = last;
+        if ( last != null )
+        {
+            remove( last );
+        }
+        return temp;
+    }
+
+    /**
+     * Returns the size of the list.
+     * <p>
+     * @return int
+     */
+    public synchronized int size()
+    {
+        return size;
+    }
+
+    // ///////////////////////////////////////////////////////////////////
+    /**
+     * Dump the cache entries from first to list for debugging.
+     */
+    public synchronized void debugDumpEntries()
+    {
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "dumping Entries" );
+            for (T me = first; me != null; me = (T) me.next)
+            {
+                log.debug( "dump Entries> payload= '" + me.getPayload() + "'" );
+            }
+        }
+    }
+}
diff --git a/src/org/apache/commons/jcs/utils/struct/DoubleLinkedListNode.java b/src/org/apache/commons/jcs/utils/struct/DoubleLinkedListNode.java
new file mode 100644
index 0000000..26d080e
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/struct/DoubleLinkedListNode.java
@@ -0,0 +1,62 @@
+package org.apache.commons.jcs.utils.struct;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.Serializable;
+
+/**
+ * This serves as a placeholder in a double linked list. You can extend this to
+ * add functionality. This allows you to remove in constant time from a linked
+ * list.
+ * <p>
+ * It simply holds the payload and a reference to the items before and after it
+ * in the list.
+ */
+public class DoubleLinkedListNode<T>
+    implements Serializable
+{
+    /** Dont' change. */
+    private static final long serialVersionUID = -1114934407695836097L;
+
+    /** The object in the node. */
+    private final T payload;
+
+    /** Double Linked list references */
+    public DoubleLinkedListNode<T> prev;
+
+    /** Double Linked list references */
+    public DoubleLinkedListNode<T> next;
+
+    /**
+     * @param payloadP
+     */
+    public DoubleLinkedListNode(T payloadP)
+    {
+        payload = payloadP;
+    }
+
+    /**
+     * @return Object
+     */
+    public T getPayload()
+    {
+        return payload;
+    }
+}
diff --git a/src/org/apache/commons/jcs/utils/struct/LRUElementDescriptor.java b/src/org/apache/commons/jcs/utils/struct/LRUElementDescriptor.java
new file mode 100644
index 0000000..f728466
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/struct/LRUElementDescriptor.java
@@ -0,0 +1,60 @@
+package org.apache.commons.jcs.utils.struct;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * This is a node in the double linked list. It is stored as the value in the underlying map used by
+ * the LRUMap class.
+ */
+public class LRUElementDescriptor<K, V>
+    extends DoubleLinkedListNode<V>
+{
+    /** Don't change. */
+    private static final long serialVersionUID = 8249555756363020156L;
+
+    /** The key value */
+    private K key;
+
+    /**
+     * @param key
+     * @param payloadP
+     */
+    public LRUElementDescriptor(K key, V payloadP)
+    {
+        super(payloadP);
+        this.setKey(key);
+    }
+
+    /**
+     * @param key The key to set.
+     */
+    public void setKey(K key)
+    {
+        this.key = key;
+    }
+
+    /**
+     * @return Returns the key.
+     */
+    public K getKey()
+    {
+        return key;
+    }
+}
diff --git a/src/org/apache/commons/jcs/utils/struct/LRUMap.java b/src/org/apache/commons/jcs/utils/struct/LRUMap.java
new file mode 100644
index 0000000..b6cb65b
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/struct/LRUMap.java
@@ -0,0 +1,60 @@
+package org.apache.commons.jcs.utils.struct;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ *
+ * @author Wiktor Niesiobędzki
+ *
+ * Simple LRUMap implementation that keeps the number of the objects below or equal maxObjects
+ *
+ * @param <K>
+ * @param <V>
+ */
+public class LRUMap<K, V> extends AbstractLRUMap<K, V> {
+
+    /** if the max is less than 0, there is no limit! */
+    int maxObjects = -1;
+    AtomicInteger counter = new AtomicInteger(0);
+
+    public LRUMap() {
+        super();
+    }
+
+    /**
+     *
+     * @param maxObjects maximum number to keep in the map
+     */
+    public LRUMap(int maxObjects) {
+        super();
+        this.maxObjects = maxObjects;
+    }
+
+    @Override
+    public boolean shouldRemove() {
+    	return maxObjects > 0 && this.size() > maxObjects; 
+    }
+
+    public Object getMaxCounter() {
+		return maxObjects;
+	}
+}
diff --git a/src/org/apache/commons/jcs/utils/struct/LRUMapEntry.java b/src/org/apache/commons/jcs/utils/struct/LRUMapEntry.java
new file mode 100644
index 0000000..5747244
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/struct/LRUMapEntry.java
@@ -0,0 +1,82 @@
+package org.apache.commons.jcs.utils.struct;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.Serializable;
+import java.util.Map.Entry;
+
+/**
+ * Entry for the LRUMap.
+ * <p>
+ * @author Aaron Smuts
+ */
+public class LRUMapEntry<K, V>
+    implements Entry<K, V>, Serializable
+{
+    /** Don't change */
+    private static final long serialVersionUID = -8176116317739129331L;
+
+    /** key */
+    private final K key;
+
+    /** value */
+    private V value;
+
+    /**
+     * S
+     * @param key
+     * @param value
+     */
+    public LRUMapEntry(K key, V value)
+    {
+        this.key = key;
+        this.value = value;
+    }
+
+    /**
+     * @return key
+     */
+    @Override
+    public K getKey()
+    {
+        return this.key;
+    }
+
+    /**
+     * @return value
+     */
+    @Override
+    public V getValue()
+    {
+        return this.value;
+    }
+
+    /**
+     * @param valueArg
+     * @return the old value
+     */
+    @Override
+    public V setValue(V valueArg)
+    {
+        V old = this.value;
+        this.value = valueArg;
+        return old;
+    }
+}
diff --git a/src/org/apache/commons/jcs/utils/struct/SingleLinkedList.java b/src/org/apache/commons/jcs/utils/struct/SingleLinkedList.java
new file mode 100644
index 0000000..0e0f5f3
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/struct/SingleLinkedList.java
@@ -0,0 +1,137 @@
+package org.apache.commons.jcs.utils.struct;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * This is an basic thread safe single linked list. It provides very limited functionality. It is
+ * small and fast.
+ * <p>
+ * @author Aaron Smuts
+ */
+public class SingleLinkedList<T>
+{
+    /** The logger */
+    private static final Log log = LogFactory.getLog( SingleLinkedList.class );
+
+    /** for sync */
+    private final Object lock = new Object();
+
+    /** the head of the queue */
+    private Node<T> head = new Node<T>();
+
+    /** the end of the queue */
+    private Node<T> tail = head;
+
+    /** The size of the list */
+    private int size = 0;
+
+    /**
+     * Takes the first item off the list.
+     * <p>
+     * @return null if the list is empty.
+     */
+    public T takeFirst()
+    {
+        synchronized ( lock )
+        {
+            // wait until there is something to read
+            if ( head == tail )
+            {
+                return null;
+            }
+
+            Node<T> node = head.next;
+
+            T value = node.payload;
+
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "head.payload = " + head.payload );
+                log.debug( "node.payload = " + node.payload );
+            }
+
+            // Node becomes the new head (head is always empty)
+
+            node.payload = null;
+            head = node;
+
+            size--;
+            return value;
+        }
+    }
+
+    /**
+     * Adds an item to the end of the list.
+     * <p>
+     * @param payload
+     */
+    public void addLast( T payload )
+    {
+        Node<T> newNode = new Node<T>();
+
+        newNode.payload = payload;
+
+        synchronized ( lock )
+        {
+            size++;
+            tail.next = newNode;
+            tail = newNode;
+        }
+    }
+
+    /**
+     * Removes everything.
+     */
+    public void clear()
+    {
+        synchronized ( lock )
+        {
+            head = tail;
+            size = 0;
+        }
+    }
+
+    /**
+     * The list is composed of nodes.
+     * <p>
+     * @author Aaron Smuts
+     */
+    protected static class Node<T>
+    {
+        /** next in the list */
+        Node<T> next = null;
+
+        /** The data in this node */
+        T payload;
+    }
+
+    /**
+     * Returns the number of elements in the list.
+     * <p>
+     * @return number of items in the list.
+     */
+    public int size()
+    {
+        return size;
+    }
+}
diff --git a/src/org/apache/commons/jcs/utils/struct/SortedPreferentialArray.java b/src/org/apache/commons/jcs/utils/struct/SortedPreferentialArray.java
new file mode 100644
index 0000000..165cf29
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/struct/SortedPreferentialArray.java
@@ -0,0 +1,612 @@
+package org.apache.commons.jcs.utils.struct;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * This maintains a sorted array with a preferential replacement policy when full.
+ * <p>
+ * Insertion time is n, search is log(n)
+ * <p>
+ * Clients must manage thread safety on previous version. I synchronized the public methods to add
+ * easy thread safety. I synchronized all public methods that make modifications.
+ */
+public class SortedPreferentialArray<T extends Comparable<? super T>>
+{
+    /** The logger */
+    private static final Log log = LogFactory.getLog( SortedPreferentialArray.class );
+
+    /** prefer large means that the smallest will be removed when full. */
+    private boolean preferLarge = true;
+
+    /** maximum number allowed */
+    private int maxSize = 0;
+
+    /** The currency number */
+    private int curSize = 0;
+
+    /** The primary array */
+    private final T[] array;
+
+    /** the number that have been inserted. */
+    private int insertCnt = 0;
+
+    /**
+     * Construct the array with the maximum size.
+     * <p>
+     * @param maxSize int
+     */
+    public SortedPreferentialArray( int maxSize )
+    {
+        this.maxSize = maxSize;
+        @SuppressWarnings("unchecked") // No generic arrays in java
+        T[] ts = (T[]) new Comparable<?>[maxSize];
+        array = ts;
+    }
+
+    /**
+     * If the array is full this will remove the smallest if preferLarge==true and if obj is bigger,
+     * or the largest if preferLarge=false and obj is smaller than the largest.
+     * <p>
+     * @param obj Object
+     */
+    public synchronized void add(T obj)
+    {
+        if ( obj == null )
+        {
+            return;
+        }
+
+        if ( curSize < maxSize )
+        {
+            insert( obj );
+            return;
+        }
+        if ( preferLarge )
+        {
+            // insert if obj is larger than the smallest
+            T sma = getSmallest();
+            if ( obj.compareTo( sma ) > 0 )
+            {
+                insert( obj );
+                return;
+            }
+            // obj is less than or equal to the smallest.
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "New object is smaller than or equal to the smallest" );
+            }
+            return;
+        }
+        // Not preferLarge
+        T lar = getLargest();
+        // insert if obj is smaller than the largest
+        int diff = obj.compareTo( lar );
+        if ( diff > 0 || diff == 0 )
+        {
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "New object is larger than or equal to the largest" );
+            }
+            return;
+        }
+        // obj is less than the largest.
+        insert( obj );
+    }
+
+    /**
+     * Returns the largest without removing it from the array.
+     * <p>
+     * @return Comparable
+     */
+    public synchronized T getLargest()
+    {
+        return array[curSize - 1];
+    }
+
+    /**
+     * Returns the smallest element without removing it from the array.
+     * <p>
+     * @return Comparable
+     */
+    public synchronized T getSmallest()
+    {
+        return array[0];
+    }
+
+    /**
+     * Insert looks for the nearest largest. It then determines which way to shuffle depending on
+     * the preference.
+     * <p>
+     * @param obj Comparable
+     */
+    private void insert(T obj)
+    {
+        try
+        {
+            int nLar = findNearestLargerEqualOrLastPosition( obj );
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "nLar = " + nLar + " obj = " + obj );
+            }
+
+            if ( nLar == curSize )
+            {
+                // this next check should be unnecessary
+                // findNearestLargerPosition should only return the curSize if
+                // there is
+                // room left. Check to be safe
+                if ( curSize < maxSize )
+                {
+                    array[nLar] = obj;
+                    curSize++;
+                    if ( log.isDebugEnabled() )
+                    {
+                        log.debug( this.dumpArray() );
+                    }
+                    if ( log.isDebugEnabled() )
+                    {
+                        log.debug( "Inserted object at the end of the array" );
+                    }
+                    return;
+                } // end if not full
+            }
+
+            boolean isFull = false;
+            if ( curSize == maxSize )
+            {
+                isFull = true;
+            }
+
+            // The array is full, we must replace
+            // remove smallest or largest to determine whether to
+            // shuffle left or right to insert
+            if ( preferLarge )
+            {
+                if ( isFull )
+                {
+                    // is full, prefer larger, remove smallest by shifting left
+                    int pnt = nLar - 1; // set iteration stop point
+                    for ( int i = 0; i < pnt; i++ )
+                    {
+                        array[i] = array[i + 1];
+                    }
+                    // use nLar-1 for insertion point
+                    array[nLar - 1] = obj;
+                    if ( log.isDebugEnabled() )
+                    {
+                        log.debug( "Inserted object at " + ( nLar - 1 ) );
+                    }
+                }
+                else
+                {
+                    // not full, shift right from spot
+                    int pnt = nLar; // set iteration stop point
+                    for ( int i = curSize; i > pnt; i-- )
+                    {
+                        array[i] = array[i - 1];
+                    }
+                    // use nLar-1 for insertion point
+                    array[nLar] = obj;
+                    curSize++;
+                    if ( log.isDebugEnabled() )
+                    {
+                        log.debug( "Inserted object at " + ( nLar ) );
+                    }
+                }
+            }
+            else
+            {
+                // prefer smaller, remove largest by shifting right
+                // use nLar for insertion point
+                int pnt = nLar + 1;
+                if ( !isFull )
+                {
+                    pnt = nLar;
+                }
+                for ( int i = curSize; i > pnt; i-- )
+                {
+                    array[i] = array[i - 1];
+                }
+                array[nLar] = obj;
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "Inserted object at " + nLar );
+                }
+            }
+
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( this.dumpArray() );
+            }
+        }
+        catch ( Exception e )
+        {
+            log.error( "Insertion problem" + this.dumpArray(), e );
+        }
+
+        insertCnt++;
+        if ( insertCnt % 100 == 0 )
+        {
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( this.dumpArray() );
+            }
+        }
+    }
+
+    /**
+     * Determines whether the preference is for large or small.
+     * <p>
+     * @param pref boolean
+     */
+    public synchronized void setPreferLarge( boolean pref )
+    {
+        preferLarge = pref;
+    }
+
+    /**
+     * Returns and removes the nearer larger or equal object from the aray.
+     * <p>
+     * @param obj Comparable
+     * @return Comparable, null if arg is null or none was found.
+     */
+    public synchronized T takeNearestLargerOrEqual( T obj )
+    {
+        if ( obj == null )
+        {
+            return null;
+        }
+
+        T retVal = null;
+        try
+        {
+            int pos = findNearestOccupiedLargerOrEqualPosition( obj );
+            if ( pos == -1 )
+            {
+                return null;
+            }
+
+            try
+            {
+                retVal = array[pos];
+                remove( pos );
+            }
+            catch ( Exception e )
+            {
+                log.error( "Problem removing from array. pos [" + pos + "] " + obj, e );
+            }
+
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "obj = " + obj + " || retVal = " + retVal );
+            }
+        }
+        catch ( Exception e )
+        {
+            log.error( "Take problem" + this.dumpArray(), e );
+        }
+        return retVal;
+    }
+
+    /**
+     * Returns the current size of the array.
+     * <p>
+     * @return int
+     */
+    public synchronized int size()
+    {
+        return this.curSize;
+    }
+
+    /**
+     * This determines the position in the array that is occupied by an object that is larger or
+     * equal to the argument. If none exists, -1 is returned.
+     * <p>
+     * @param obj Object
+     * @return Object
+     */
+    private int findNearestOccupiedLargerOrEqualPosition(T obj)
+    {
+        if ( curSize == 0 )
+        {
+            // nothing in the array
+            return -1;
+        }
+
+        // this gives us an insert position.
+        int pos = findNearestLargerEqualOrLastPosition( obj );
+
+        // see if the previous will do to handle the empty insert spot position
+        if ( pos == curSize )
+        { // && curSize < maxSize ) {
+            // pos will be > 0 if it equals curSize, we check for this above.
+            if ( obj.compareTo(array[pos - 1] ) <= 0 )
+            {
+                pos = pos - 1;
+            }
+            else
+            {
+                pos = -1;
+            }
+        }
+        else
+        {
+            // the find nearest, returns the last, since it is used by insertion.
+            if ( obj.compareTo(array[pos] ) > 0 )
+            {
+                return -1;
+            }
+        }
+
+        return pos;
+    }
+
+    /**
+     * This method determines the position where an insert should take place for a given object.
+     * With some additional checking, this can also be used to find an object matching or greater
+     * than the argument.
+     * <p>
+     * If the array is not full and the current object is larger than all the rest the first open
+     * slot at the end will be returned.
+     * <p>
+     * NOTE: If the object is larger than the largest and it is full, it will return the last position.
+     * <p>
+     * If the array is empty, the first spot is returned.
+     * <p>
+     * If the object is smaller than all the rests, the first position is returned. The caller must
+     * decide what to do given the preference.
+     * <p>
+     * Returns the position of the object nearest to or equal to the larger object.
+     * <p>
+     * If you want to find the takePosition, you have to calculate it.
+     * findNearestOccupiedLargerOrEqualPosition will calculate this for you.
+     * <p>
+     * @param obj Comparable
+     * @return int
+     */
+    private int findNearestLargerEqualOrLastPosition(T obj)
+    {
+        // do nothing if a null was passed in
+        if ( obj == null )
+        {
+            return -1;
+        }
+
+        // return the first spot if the array is empty
+        if ( curSize <= 0 )
+        {
+            return 0;
+        }
+
+        // mark the numer to be returned, the greaterPos as unset
+        int greaterPos = -1;
+        // prepare for a binary search
+        int curPos = ( curSize - 1 ) / 2;
+        int prevPos = -1;
+
+        try
+        {
+            // set the loop exit flag to false
+            boolean done = false;
+
+            // check the ends
+            // return insert position 0 if obj is smaller
+            // than the smallest. the caller can determine what to
+            // do with this, depending on the preference setting
+            if ( obj.compareTo( getSmallest() ) <= 0 )
+            {
+                // LESS THAN OR EQUAL TO SMALLEST
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( obj + " is smaller than or equal to " + getSmallest() );
+                }
+                greaterPos = 0;
+                done = true;
+                // return greaterPos;
+            }
+            else
+            {
+                // GREATER THAN SMALLEST
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( obj + " is bigger than " + getSmallest() );
+                }
+
+                // return the largest position if obj is larger
+                // than the largest. the caller can determine what to
+                // do with this, depending on the preference setting
+                if ( obj.compareTo( getLargest() ) >= 0 )
+                {
+                    if ( curSize == maxSize )
+                    {
+                        // there is no room left in the array, return the last
+                        // spot
+                        greaterPos = curSize - 1;
+                        done = true;
+                    }
+                    else
+                    {
+                        // there is room left in the array
+                        greaterPos = curSize;
+                        done = true;
+                    }
+                }
+                else
+                {
+                    // the obj is less than or equal to the largest, so we know that the
+                    // last item is larger or equal
+                    greaterPos = curSize - 1;
+                }
+            }
+
+            // /////////////////////////////////////////////////////////////////////
+            // begin binary search for insertion spot
+            while ( !done )
+            {
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "\n curPos = " + curPos + "; greaterPos = " + greaterPos + "; prevpos = " + prevPos );
+                }
+
+                // get out of loop if we have come to the end or passed it
+                if ( curPos == prevPos || curPos >= curSize )
+                {
+                    done = true;
+                    break;
+                }
+                else
+
+                // EQUAL TO
+                // object at current position is equal to the obj, use this,
+                // TODO could avoid some shuffling if I found a lower pos.
+                if (array[curPos].compareTo( obj ) == 0 )
+                {
+                    if ( log.isDebugEnabled() )
+                    {
+                        log.debug( array[curPos] + " is equal to " + obj );
+                    }
+                    greaterPos = curPos;
+                    done = true;
+                    break;
+                }
+                else
+
+                // GREATER THAN
+                // array object at current position is greater than the obj, go
+                // left
+                if (array[curPos].compareTo( obj ) > 0 )
+                {
+                    if ( log.isDebugEnabled() )
+                    {
+                        log.debug( array[curPos] + " is greater than " + obj );
+                    }
+                    // set the smallest greater equal to the current position
+                    greaterPos = curPos;
+                    // set the current position to
+                    // set the previous position to the current position
+                    // We could have an integer overflow, but this array could
+                    // never get that large.
+                    int newPos = Math.min( curPos, ( curPos + prevPos ) / 2 );
+                    prevPos = curPos;
+                    curPos = newPos;
+                }
+                else
+
+                // LESS THAN
+                // the object at the current position is smaller, go right
+                if (array[curPos].compareTo( obj ) < 0 )
+                {
+                    if ( log.isDebugEnabled() )
+                    {
+                        log.debug( array[curPos] + " is less than " + obj );
+                    }
+                    if ( ( greaterPos != -1 ) && greaterPos - curPos < 0 )
+                    {
+                        done = true;
+                        break; // return greaterPos;
+                    }
+                    else
+                    {
+                        int newPos = 0;
+                        if ( prevPos > curPos )
+                        {
+                            newPos = Math.min( ( curPos + prevPos ) / 2, curSize );
+                        }
+                        else if ( prevPos == -1 )
+                        {
+                            newPos = Math.min( ( curSize + curPos ) / 2, curSize );
+                        }
+                        prevPos = curPos;
+                        curPos = newPos;
+                    }
+                }
+            } // end while
+            // /////////////////////////////////////////////////////////////////////
+
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Greater Position is [" + greaterPos + "]" + " array[greaterPos] [" + array[greaterPos]
+                    + "]" );
+            }
+        }
+        catch ( Exception e )
+        {
+            log.error( "\n curPos = " + curPos + "; greaterPos = " + greaterPos + "; prevpos = " + prevPos + " "
+                + this.dumpArray(), e );
+        }
+
+        return greaterPos;
+    }
+
+    /**
+     * Removes the item from the array at the specified position. The remaining items to the right
+     * are shifted left.
+     * <p>
+     * @param position int
+     * @throw IndexOutOfBoundsException if position is out of range.
+     */
+    private void remove( int position )
+    {
+        if ( position >= curSize || position < 0 )
+        {
+            throw new IndexOutOfBoundsException( "position=" + position + " must be less than curSize=" + curSize );
+        }
+        curSize--;
+
+        if ( position < curSize )
+        {
+            try
+            {
+                System.arraycopy( array, position + 1, array, position, ( curSize - position ) );
+            }
+            catch ( IndexOutOfBoundsException ibe )
+            {
+                // throw this, log details for debugging. This shouldn't happen.
+                log.warn( "Caught index out of bounds exception. "
+                    + "called 'System.arraycopy( array, position + 1, array, position, (curSize - position) );'  "
+                    + "array.lengh [" + array.length + "] position [" + position + "] curSize [" + curSize + "]" );
+                throw ibe;
+            }
+        }
+    }
+
+    /**
+     * Debugging method to return a human readable display of array data.
+     * <p>
+     * @return String representation of the contents.
+     */
+    protected synchronized String dumpArray()
+    {
+        StringBuilder buf = new StringBuilder();
+        buf.append( "\n ---------------------------" );
+        buf.append( "\n curSize = " + curSize );
+        buf.append( "\n array.length = " + array.length );
+        buf.append( "\n ---------------------------" );
+        buf.append( "\n Dump:" );
+        for ( int i = 0; i < curSize; i++ )
+        {
+            buf.append( "\n " + i + "=" + array[i] );
+        }
+        return buf.toString();
+    }
+}
diff --git a/src/org/apache/commons/jcs/utils/threadpool/DaemonThreadFactory.java b/src/org/apache/commons/jcs/utils/threadpool/DaemonThreadFactory.java
new file mode 100644
index 0000000..e1ec271
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/threadpool/DaemonThreadFactory.java
@@ -0,0 +1,74 @@
+package org.apache.commons.jcs.utils.threadpool;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.concurrent.ThreadFactory;
+
+/**
+ * Allows us to set the daemon status on the threads.
+ * <p>
+ * @author aaronsm
+ */
+public class DaemonThreadFactory
+    implements ThreadFactory
+{
+    private String prefix;
+    private boolean threadIsDaemon = true;
+    private int threadPriority = Thread.NORM_PRIORITY;
+
+    /**
+     * Constructor
+     *
+     * @param prefix thread name prefix
+     */
+    public DaemonThreadFactory(String prefix)
+    {
+        this(prefix, Thread.NORM_PRIORITY);
+    }
+
+    /**
+     * Constructor
+     *
+     * @param prefix thread name prefix
+     * @param threadPriority set thread priority
+     */
+    public DaemonThreadFactory(String prefix, int threadPriority)
+    {
+        this.prefix = prefix;
+        this.threadPriority = threadPriority;
+    }
+
+    /**
+     * Sets the thread to daemon.
+     * <p>
+     * @param runner
+     * @return a daemon thread
+     */
+    @Override
+    public Thread newThread( Runnable runner )
+    {
+        Thread t = new Thread( runner );
+        String oldName = t.getName();
+        t.setName( prefix + oldName );
+        t.setDaemon(threadIsDaemon);
+        t.setPriority(threadPriority);
+        return t;
+    }
+}
\ No newline at end of file
diff --git a/src/org/apache/commons/jcs/utils/threadpool/PoolConfiguration.java b/src/org/apache/commons/jcs/utils/threadpool/PoolConfiguration.java
new file mode 100644
index 0000000..4c425f4
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/threadpool/PoolConfiguration.java
@@ -0,0 +1,268 @@
+package org.apache.commons.jcs.utils.threadpool;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * This object holds configuration data for a thread pool.
+ * <p>
+ * @author Aaron Smuts
+ */
+public final class PoolConfiguration
+    implements Cloneable
+{
+    /** Should we bound the queue */
+    private boolean useBoundary = true;
+
+    /** If the queue is bounded, how big can it get */
+    private int boundarySize = 2000;
+
+    /** only has meaning if a boundary is used */
+    private int maximumPoolSize = 150;
+
+    /**
+     * the exact number that will be used in a boundless queue. If the queue has a boundary, more
+     * will be created if the queue fills.
+     */
+    private int minimumPoolSize = 4;
+
+    /** How long idle threads above the minimum should be kept alive. */
+    private int keepAliveTime = 1000 * 60 * 5;
+
+    public enum WhenBlockedPolicy {
+        /** abort when queue is full and max threads is reached. */
+        ABORT,
+
+        /** block when queue is full and max threads is reached. */
+        BLOCK,
+
+        /** run in current thread when queue is full and max threads is reached. */
+        RUN,
+
+        /** wait when queue is full and max threads is reached. */
+        WAIT,
+
+        /** discard oldest when queue is full and max threads is reached. */
+        DISCARDOLDEST
+    }
+
+    /** should be ABORT, BLOCK, RUN, WAIT, DISCARDOLDEST, */
+    private WhenBlockedPolicy whenBlockedPolicy = WhenBlockedPolicy.RUN;
+
+    /** The number of threads to create on startup */
+    private int startUpSize = 4;
+
+    /**
+     * @param useBoundary The useBoundary to set.
+     */
+    public void setUseBoundary( boolean useBoundary )
+    {
+        this.useBoundary = useBoundary;
+    }
+
+    /**
+     * @return Returns the useBoundary.
+     */
+    public boolean isUseBoundary()
+    {
+        return useBoundary;
+    }
+
+    /**
+     * Default
+     */
+    public PoolConfiguration()
+    {
+        // nop
+    }
+
+    /**
+     * Construct a completely configured instance.
+     * <p>
+     * @param useBoundary
+     * @param boundarySize
+     * @param maximumPoolSize
+     * @param minimumPoolSize
+     * @param keepAliveTime
+     * @param whenBlockedPolicy
+     * @param startUpSize
+     */
+    public PoolConfiguration( boolean useBoundary, int boundarySize, int maximumPoolSize, int minimumPoolSize,
+                              int keepAliveTime, WhenBlockedPolicy whenBlockedPolicy, int startUpSize )
+    {
+        setUseBoundary( useBoundary );
+        setBoundarySize( boundarySize );
+        setMaximumPoolSize( maximumPoolSize );
+        setMinimumPoolSize( minimumPoolSize );
+        setKeepAliveTime( keepAliveTime );
+        setWhenBlockedPolicy( whenBlockedPolicy );
+        setStartUpSize( startUpSize );
+    }
+
+    /**
+     * @param boundarySize The boundarySize to set.
+     */
+    public void setBoundarySize( int boundarySize )
+    {
+        this.boundarySize = boundarySize;
+    }
+
+    /**
+     * @return Returns the boundarySize.
+     */
+    public int getBoundarySize()
+    {
+        return boundarySize;
+    }
+
+    /**
+     * @param maximumPoolSize The maximumPoolSize to set.
+     */
+    public void setMaximumPoolSize( int maximumPoolSize )
+    {
+        this.maximumPoolSize = maximumPoolSize;
+    }
+
+    /**
+     * @return Returns the maximumPoolSize.
+     */
+    public int getMaximumPoolSize()
+    {
+        return maximumPoolSize;
+    }
+
+    /**
+     * @param minimumPoolSize The minimumPoolSize to set.
+     */
+    public void setMinimumPoolSize( int minimumPoolSize )
+    {
+        this.minimumPoolSize = minimumPoolSize;
+    }
+
+    /**
+     * @return Returns the minimumPoolSize.
+     */
+    public int getMinimumPoolSize()
+    {
+        return minimumPoolSize;
+    }
+
+    /**
+     * @param keepAliveTime The keepAliveTime to set.
+     */
+    public void setKeepAliveTime( int keepAliveTime )
+    {
+        this.keepAliveTime = keepAliveTime;
+    }
+
+    /**
+     * @return Returns the keepAliveTime.
+     */
+    public int getKeepAliveTime()
+    {
+        return keepAliveTime;
+    }
+
+    /**
+     * @param whenBlockedPolicy The whenBlockedPolicy to set.
+     */
+    public void setWhenBlockedPolicy( String whenBlockedPolicy )
+    {
+        if ( whenBlockedPolicy != null )
+        {
+            WhenBlockedPolicy policy = WhenBlockedPolicy.valueOf(whenBlockedPolicy.trim().toUpperCase());
+            setWhenBlockedPolicy(policy);
+        }
+        else
+        {
+            // the value is null, default to RUN
+            this.whenBlockedPolicy = WhenBlockedPolicy.RUN;
+        }
+    }
+
+    /**
+     * @param whenBlockedPolicy The whenBlockedPolicy to set.
+     */
+    public void setWhenBlockedPolicy( WhenBlockedPolicy whenBlockedPolicy )
+    {
+        if ( whenBlockedPolicy != null )
+        {
+            this.whenBlockedPolicy = whenBlockedPolicy;
+        }
+        else
+        {
+            // the value is null, default to RUN
+            this.whenBlockedPolicy = WhenBlockedPolicy.RUN;
+        }
+    }
+
+    /**
+     * @return Returns the whenBlockedPolicy.
+     */
+    public WhenBlockedPolicy getWhenBlockedPolicy()
+    {
+        return whenBlockedPolicy;
+    }
+
+    /**
+     * @param startUpSize The startUpSize to set.
+     */
+    public void setStartUpSize( int startUpSize )
+    {
+        this.startUpSize = startUpSize;
+    }
+
+    /**
+     * @return Returns the startUpSize.
+     */
+    public int getStartUpSize()
+    {
+        return startUpSize;
+    }
+
+    /**
+     * To string for debugging purposes.
+     * @return String
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder buf = new StringBuilder();
+        buf.append( "useBoundary = [" + isUseBoundary() + "] " );
+        buf.append( "boundarySize = [" + boundarySize + "] " );
+        buf.append( "maximumPoolSize = [" + maximumPoolSize + "] " );
+        buf.append( "minimumPoolSize = [" + minimumPoolSize + "] " );
+        buf.append( "keepAliveTime = [" + keepAliveTime + "] " );
+        buf.append( "whenBlockedPolicy = [" + getWhenBlockedPolicy() + "] " );
+        buf.append( "startUpSize = [" + startUpSize + "]" );
+        return buf.toString();
+    }
+
+    /**
+     * Copies the instance variables to another instance.
+     * <p>
+     * @return PoolConfiguration
+     */
+    @Override
+    public Object clone()
+    {
+        return new PoolConfiguration( isUseBoundary(), boundarySize, maximumPoolSize, minimumPoolSize, keepAliveTime,
+                                      getWhenBlockedPolicy(), startUpSize );
+    }
+}
diff --git a/src/org/apache/commons/jcs/utils/threadpool/ThreadPoolManager.java b/src/org/apache/commons/jcs/utils/threadpool/ThreadPoolManager.java
new file mode 100644
index 0000000..5000f9e
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/threadpool/ThreadPoolManager.java
@@ -0,0 +1,465 @@
+package org.apache.commons.jcs.utils.threadpool;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Properties;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.commons.jcs.utils.props.PropertyLoader;
+import org.apache.commons.jcs.utils.threadpool.PoolConfiguration.WhenBlockedPolicy;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * This manages threadpools for an application using Doug Lea's Util Concurrent package.
+ * http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/intro.html
+ * <p>
+ * It is a singleton since threads need to be managed vm wide.
+ * <p>
+ * This manager forces you to use a bounded queue. By default it uses the current thread for
+ * execution when the buffer is full and no free threads can be created.
+ * <p>
+ * You can specify the props file to use or pass in a properties object prior to configuration. By
+ * default it looks for configuration information in thread_pool.properties.
+ * <p>
+ * If set, the Properties object will take precedence.
+ * <p>
+ * If a value is not set for a particular pool, the hard coded defaults will be used.
+ *
+ * <pre>
+ * int boundarySize_DEFAULT = 2000;
+ *
+ * int maximumPoolSize_DEFAULT = 150;
+ *
+ * int minimumPoolSize_DEFAULT = 4;
+ *
+ * int keepAliveTime_DEFAULT = 1000 * 60 * 5;
+ *
+ * boolean abortWhenBlocked = false;
+ *
+ * String whenBlockedPolicy_DEFAULT = IPoolConfiguration.POLICY_RUN;
+ *
+ * int startUpSize_DEFAULT = 4;
+ * </pre>
+ *
+ * You can configure default settings by specifying a default pool in the properties, ie "cache.ccf"
+ * <p>
+ * @author Aaron Smuts
+ */
+public class ThreadPoolManager
+{
+    /** The logger */
+    private static final Log log = LogFactory.getLog( ThreadPoolManager.class );
+
+    /**
+     * DEFAULT SETTINGS, these are not final since they can be set via the properties file or object
+     */
+    private static boolean useBoundary_DEFAULT = true;
+
+    /** Default queue size limit */
+    private static int boundarySize_DEFAULT = 2000;
+
+    /** Default max size */
+    private static int maximumPoolSize_DEFAULT = 150;
+
+    /** Default min */
+    private static int minimumPoolSize_DEFAULT = 4;
+
+    /** Default keep alive */
+    private static int keepAliveTime_DEFAULT = 1000 * 60 * 5;
+
+    /** Default when blocked */
+    private static WhenBlockedPolicy whenBlockedPolicy_DEFAULT = WhenBlockedPolicy.RUN;
+
+    /** Default startup size */
+    private static int startUpSize_DEFAULT = 4;
+
+    /** The default config, created using property defaults if present, else those above. */
+    private static PoolConfiguration defaultConfig;
+
+    /** Setting this after initialization will have no effect.  */
+    private static String propsFileName = null;
+
+    /** the root property name */
+    private static final String PROP_NAME_ROOT = "thread_pool";
+
+    /** default property file name */
+    private static final String DEFAULT_PROP_NAME_ROOT = "thread_pool.default";
+
+    /**
+     * You can specify the properties to be used to configure the thread pool. Setting this post
+     * initialization will have no effect.
+     */
+    private static volatile Properties props = null;
+
+    /** Map of names to pools. */
+    private static HashMap<String, ThreadPoolExecutor> pools = new HashMap<String, ThreadPoolExecutor>();
+
+    /** singleton instance */
+    private static ThreadPoolManager INSTANCE = null;
+
+    /**
+     * No instances please. This is a singleton.
+     */
+    private ThreadPoolManager()
+    {
+        configure();
+    }
+
+    /**
+     * Creates a pool based on the configuration info.
+     * <p>
+     * @param config
+     * @return A ThreadPoll wrapper
+     */
+    private ThreadPoolExecutor createPool( PoolConfiguration config )
+    {
+        ThreadPoolExecutor pool = null;
+        BlockingQueue<Runnable> queue = null;
+        if ( config.isUseBoundary() )
+        {
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Creating a Bounded Buffer to use for the pool" );
+            }
+
+            queue = new LinkedBlockingQueue<Runnable>(config.getBoundarySize());
+        }
+        else
+        {
+            if ( log.isDebugEnabled() )
+            {
+                log.debug( "Creating a non bounded Linked Queue to use for the pool" );
+            }
+            queue = new LinkedBlockingQueue<Runnable>();
+        }
+
+        pool = new ThreadPoolExecutor(config.getStartUpSize(), config.getMaximumPoolSize(),
+                config.getKeepAliveTime(), TimeUnit.MILLISECONDS,
+                queue, new DaemonThreadFactory("JCS-ThreadPoolManager-"));
+
+        // when blocked policy
+        switch (config.getWhenBlockedPolicy())
+        {
+            case ABORT:
+                pool.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());
+                break;
+
+            case RUN:
+                pool.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+                break;
+
+            case WAIT:
+                throw new RuntimeException("POLICY_WAIT no longer supported");
+
+            case DISCARDOLDEST:
+                pool.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardOldestPolicy());
+                break;
+
+            default:
+                break;
+        }
+
+        pool.prestartAllCoreThreads();
+
+        return pool;
+    }
+
+    /**
+     * Returns a configured instance of the ThreadPoolManger To specify a configuration file or
+     * Properties object to use call the appropriate setter prior to calling getInstance.
+     * <p>
+     * @return The single instance of the ThreadPoolManager
+     */
+    public static synchronized ThreadPoolManager getInstance()
+    {
+        if ( INSTANCE == null )
+        {
+            INSTANCE = new ThreadPoolManager();
+        }
+        return INSTANCE;
+    }
+
+    /**
+     * Dispose of the instance of the ThreadPoolManger and shut down all thread pools
+     */
+    public static synchronized void dispose()
+    {
+        if ( INSTANCE != null )
+        {
+            for ( String poolName : INSTANCE.getPoolNames())
+            {
+                try
+                {
+                    INSTANCE.getPool(poolName).shutdownNow();
+                }
+                catch (Throwable t)
+                {
+                    log.warn("Failed to close pool " + poolName, t);
+                }
+            }
+
+            INSTANCE = null;
+        }
+    }
+
+    /**
+     * Returns a pool by name. If a pool by this name does not exist in the configuration file or
+     * properties, one will be created using the default values.
+     * <p>
+     * Pools are lazily created.
+     * <p>
+     * @param name
+     * @return The thread pool configured for the name.
+     */
+    public ThreadPoolExecutor getPool( String name )
+    {
+        ThreadPoolExecutor pool = null;
+
+        synchronized ( pools )
+        {
+            pool = pools.get( name );
+            if ( pool == null )
+            {
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "Creating pool for name [" + name + "]" );
+                }
+                PoolConfiguration config = this.loadConfig( PROP_NAME_ROOT + "." + name );
+                pool = createPool( config );
+
+                if ( pool != null )
+                {
+                    pools.put( name, pool );
+                }
+
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "PoolName = " + getPoolNames() );
+                }
+            }
+        }
+
+        return pool;
+    }
+
+    /**
+     * Returns the names of all configured pools.
+     * <p>
+     * @return ArrayList of string names
+     */
+    public ArrayList<String> getPoolNames()
+    {
+        ArrayList<String> poolNames = new ArrayList<String>();
+        synchronized ( pools )
+        {
+            poolNames.addAll(pools.keySet());
+        }
+        return poolNames;
+    }
+
+    /**
+     * Setting this post initialization will have no effect.
+     * <p>
+     * @param propsFileName The propsFileName to set.
+     */
+    public static void setPropsFileName( String propsFileName )
+    {
+        ThreadPoolManager.propsFileName = propsFileName;
+    }
+
+    /**
+     * Returns the name of the properties file that we used to initialize the pools. If the value
+     * was set post-initialization, then it may not be the file used.
+     * <p>
+     * @return Returns the propsFileName.
+     */
+    public static String getPropsFileName()
+    {
+        return propsFileName;
+    }
+
+    /**
+     * This will be used if it is not null on initialization. Setting this post initialization will
+     * have no effect.
+     * <p>
+     * @param props The props to set.
+     */
+    public static void setProps( Properties props )
+    {
+        ThreadPoolManager.props = props;
+    }
+
+    /**
+     * @return Returns the props.
+     */
+    public static Properties getProps()
+    {
+        return props;
+    }
+
+    /**
+     * Initialize the ThreadPoolManager and create all the pools defined in the configuration.
+     */
+    protected void configure()
+    {
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "Initializing ThreadPoolManager" );
+        }
+
+        if ( props == null )
+        {
+            try
+            {
+                props = PropertyLoader.loadProperties( propsFileName );
+
+                if ( log.isDebugEnabled() )
+                {
+                    log.debug( "File contained " + props.size() + " properties" );
+                }
+            }
+            catch ( Exception e )
+            {
+                log.error( "Problem loading properties. propsFileName [" + propsFileName + "]", e );
+            }
+        }
+
+        if ( props == null )
+        {
+            log.warn( "No configuration settings found.  Using hardcoded default values for all pools." );
+            props = new Properties();
+        }
+
+        // set intial default and then override if new
+        // settings are available
+        defaultConfig = new PoolConfiguration( useBoundary_DEFAULT, boundarySize_DEFAULT, maximumPoolSize_DEFAULT,
+                                               minimumPoolSize_DEFAULT, keepAliveTime_DEFAULT,
+                                               whenBlockedPolicy_DEFAULT, startUpSize_DEFAULT );
+
+        defaultConfig = loadConfig( DEFAULT_PROP_NAME_ROOT );
+    }
+
+    /**
+     * Configures the default PoolConfiguration settings.
+     * <p>
+     * @param root
+     * @return PoolConfiguration
+     */
+    protected PoolConfiguration loadConfig( String root )
+    {
+        PoolConfiguration config = (PoolConfiguration) defaultConfig.clone();
+
+        if ( props.containsKey( root + ".useBoundary" ) )
+        {
+            try
+            {
+                config.setUseBoundary( Boolean.valueOf( (String) props.get( root + ".useBoundary" ) ).booleanValue() );
+            }
+            catch ( NumberFormatException nfe )
+            {
+                log.error( "useBoundary not a boolean.", nfe );
+            }
+        }
+
+        // load default if they exist
+        if ( props.containsKey( root + ".boundarySize" ) )
+        {
+            try
+            {
+                config.setBoundarySize( Integer.parseInt( (String) props.get( root + ".boundarySize" ) ) );
+            }
+            catch ( NumberFormatException nfe )
+            {
+                log.error( "boundarySize not a number.", nfe );
+            }
+        }
+
+        // maximum pool size
+        if ( props.containsKey( root + ".maximumPoolSize" ) )
+        {
+            try
+            {
+                config.setMaximumPoolSize( Integer.parseInt( (String) props.get( root + ".maximumPoolSize" ) ) );
+            }
+            catch ( NumberFormatException nfe )
+            {
+                log.error( "maximumPoolSize not a number.", nfe );
+            }
+        }
+
+        // minimum pool size
+        if ( props.containsKey( root + ".minimumPoolSize" ) )
+        {
+            try
+            {
+                config.setMinimumPoolSize( Integer.parseInt( (String) props.get( root + ".minimumPoolSize" ) ) );
+            }
+            catch ( NumberFormatException nfe )
+            {
+                log.error( "minimumPoolSize not a number.", nfe );
+            }
+        }
+
+        // keep alive
+        if ( props.containsKey( root + ".keepAliveTime" ) )
+        {
+            try
+            {
+                config.setKeepAliveTime( Integer.parseInt( (String) props.get( root + ".keepAliveTime" ) ) );
+            }
+            catch ( NumberFormatException nfe )
+            {
+                log.error( "keepAliveTime not a number.", nfe );
+            }
+        }
+
+        // when blocked
+        if ( props.containsKey( root + ".whenBlockedPolicy" ) )
+        {
+            config.setWhenBlockedPolicy( (String) props.get( root + ".whenBlockedPolicy" ) );
+        }
+
+        // startupsize
+        if ( props.containsKey( root + ".startUpSize" ) )
+        {
+            try
+            {
+                config.setStartUpSize( Integer.parseInt( (String) props.get( root + ".startUpSize" ) ) );
+            }
+            catch ( NumberFormatException nfe )
+            {
+                log.error( "startUpSize not a number.", nfe );
+            }
+        }
+
+        if ( log.isInfoEnabled() )
+        {
+            log.info( root + " PoolConfiguration = " + config );
+        }
+
+        return config;
+    }
+}
diff --git a/src/org/apache/commons/jcs/utils/timing/ElapsedTimer.java b/src/org/apache/commons/jcs/utils/timing/ElapsedTimer.java
new file mode 100644
index 0000000..bd728e9
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/timing/ElapsedTimer.java
@@ -0,0 +1,58 @@
+package org.apache.commons.jcs.utils.timing;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * This is a simple timer utility.
+ */
+public class ElapsedTimer
+{
+    /** display suffix describing the unit of measure. */
+    private static final String SUFFIX = "ms.";
+
+    /**
+     * Sets the start time when created.
+     */
+    private long timeStamp = System.currentTimeMillis();
+
+    /**
+     * Gets the time elapsed between the start time and now. The start time is reset to now.
+     * Subsequent calls will get the time between then and now.
+     * <p>
+     * @return the elapsed time
+     */
+    public long getElapsedTime()
+    {
+        long now = System.currentTimeMillis();
+        long elapsed = now - timeStamp;
+        timeStamp = now;
+        return elapsed;
+    }
+
+    /**
+     * Returns the elapsed time with the display suffix.
+     * <p>
+     * @return formatted elapsed Time
+     */
+    public String getElapsedTimeString()
+    {
+        return String.valueOf( getElapsedTime() ) + SUFFIX;
+    }
+}
diff --git a/src/org/apache/commons/jcs/utils/timing/SleepUtil.java b/src/org/apache/commons/jcs/utils/timing/SleepUtil.java
new file mode 100644
index 0000000..e1c09cd
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/timing/SleepUtil.java
@@ -0,0 +1,50 @@
+package org.apache.commons.jcs.utils.timing;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Utility methods to help deal with thread issues.
+ */
+public class SleepUtil
+{
+    /**
+     * Sleep for a specified duration in milliseconds. This method is a
+     * platform-specific workaround for Windows due to its inability to resolve
+     * durations of time less than approximately 10 - 16 ms.
+     * <p>
+     * @param milliseconds the number of milliseconds to sleep
+     */
+    public static void sleepAtLeast( long milliseconds )
+    {
+        long endTime = System.currentTimeMillis() + milliseconds;
+
+        while ( System.currentTimeMillis() <= endTime )
+        {
+            try
+            {
+                Thread.sleep( milliseconds );
+            }
+            catch ( InterruptedException e )
+            {
+                // TODO - Do something here?
+            }
+        }
+    }
+}
diff --git a/src/org/apache/commons/jcs/utils/zip/CompressionUtil.java b/src/org/apache/commons/jcs/utils/zip/CompressionUtil.java
new file mode 100644
index 0000000..93f05fa
--- /dev/null
+++ b/src/org/apache/commons/jcs/utils/zip/CompressionUtil.java
@@ -0,0 +1,203 @@
+package org.apache.commons.jcs.utils.zip;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.zip.DataFormatException;
+import java.util.zip.Deflater;
+import java.util.zip.GZIPInputStream;
+import java.util.zip.Inflater;
+
+/** Compress / Decompress. */
+public final class CompressionUtil
+{
+    /** The logger */
+    private static final Log log = LogFactory.getLog( CompressionUtil.class );
+
+    /**
+     * no instances.
+     */
+    private CompressionUtil()
+    {
+        // NO OP
+    }
+
+    /**
+     * Decompress the byte array passed using a default buffer length of 1024.
+     * <p>
+     * @param input compressed byte array webservice response
+     * @return uncompressed byte array
+     */
+    public static byte[] decompressByteArray( final byte[] input )
+    {
+        return decompressByteArray( input, 1024 );
+    }
+
+    /**
+     * Decompress the byte array passed
+     * <p>
+     * @param input compressed byte array webservice response
+     * @param bufferLength buffer length
+     * @return uncompressed byte array
+     */
+    public static byte[] decompressByteArray( final byte[] input, final int bufferLength )
+    {
+        if ( null == input )
+        {
+            throw new IllegalArgumentException( "Input was null" );
+        }
+
+        // Create the decompressor and give it the data to compress
+        final Inflater decompressor = new Inflater();
+
+        decompressor.setInput( input );
+
+        // Create an expandable byte array to hold the decompressed data
+        final ByteArrayOutputStream baos = new ByteArrayOutputStream( input.length );
+
+        // Decompress the data
+        final byte[] buf = new byte[bufferLength];
+
+        try
+        {
+            while ( !decompressor.finished() )
+            {
+                int count = decompressor.inflate( buf );
+                baos.write( buf, 0, count );
+            }
+        }
+        catch ( DataFormatException ex )
+        {
+            log.error( "Problem decompressing.", ex );
+        }
+
+        decompressor.end();
+
+        try
+        {
+            baos.close();
+        }
+        catch ( IOException ex )
+        {
+            log.error( "Problem closing stream.", ex );
+        }
+
+        return baos.toByteArray();
+    }
+
+    /**
+     * Compress the byte array passed
+     * <p>
+     * @param input byte array
+     * @return compressed byte array
+     * @throws IOException thrown if we can't close the output stream
+     */
+    public static byte[] compressByteArray( byte[] input )
+        throws IOException
+    {
+        return compressByteArray( input, 1024 );
+    }
+
+    /**
+     * Compress the byte array passed
+     * <p>
+     * @param input byte array
+     * @param bufferLength buffer length
+     * @return compressed byte array
+     * @throws IOException thrown if we can't close the output stream
+     */
+    public static byte[] compressByteArray( byte[] input, int bufferLength )
+        throws IOException
+    {
+        // Compressor with highest level of compression
+        Deflater compressor = new Deflater();
+        compressor.setLevel( Deflater.BEST_COMPRESSION );
+
+        // Give the compressor the data to compress
+        compressor.setInput( input );
+        compressor.finish();
+
+        // Create an expandable byte array to hold the compressed data.
+        // It is not necessary that the compressed data will be smaller than
+        // the uncompressed data.
+        ByteArrayOutputStream bos = new ByteArrayOutputStream( input.length );
+
+        // Compress the data
+        byte[] buf = new byte[bufferLength];
+        while ( !compressor.finished() )
+        {
+            int count = compressor.deflate( buf );
+            bos.write( buf, 0, count );
+        }
+
+        // JCS-136 ( Details here : http://www.devguli.com/blog/eng/java-deflater-and-outofmemoryerror/ )
+        compressor.end();
+        bos.close();
+
+        // Get the compressed data
+        return bos.toByteArray();
+
+    }
+
+    /**
+     * decompress a gzip byte array, using a default buffer length of 1024
+     * <p>
+     * @param compressedByteArray gzip-compressed byte array
+     * @return decompressed byte array
+     * @throws IOException thrown if there was a failure to construct the GzipInputStream
+     */
+    public static byte[] decompressGzipByteArray( byte[] compressedByteArray )
+        throws IOException
+    {
+        return decompressGzipByteArray( compressedByteArray, 1024 );
+    }
+
+    /**
+     * decompress a gzip byte array, using a default buffer length of 1024
+     * <p>
+     * @param compressedByteArray gzip-compressed byte array
+     * @param bufferlength size of the buffer in bytes
+     * @return decompressed byte array
+     * @throws IOException thrown if there was a failure to construct the GzipInputStream
+     */
+    public static byte[] decompressGzipByteArray( byte[] compressedByteArray, int bufferlength )
+        throws IOException
+    {
+        ByteArrayOutputStream uncompressedStream = new ByteArrayOutputStream();
+
+        GZIPInputStream compressedStream = new GZIPInputStream( new ByteArrayInputStream( compressedByteArray ) );
+
+        byte[] buffer = new byte[bufferlength];
+
+        int index = -1;
+
+        while ( ( index = compressedStream.read( buffer ) ) != -1 )
+        {
+            uncompressedStream.write( buffer, 0, index );
+        }
+
+        return uncompressedStream.toByteArray();
+    }
+}
diff --git a/src/org/openstreetmap/josm/Main.java b/src/org/openstreetmap/josm/Main.java
index 041e9a2..af6b9b9 100644
--- a/src/org/openstreetmap/josm/Main.java
+++ b/src/org/openstreetmap/josm/Main.java
@@ -27,6 +27,7 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
@@ -159,14 +160,14 @@ public abstract class Main {
     /**
      * Command-line arguments used to run the application.
      */
-    public static String[] commandLineArgs;
+    protected static final List<String> COMMAND_LINE_ARGS = new ArrayList<>();
 
     /**
      * The worker thread slave. This is for executing all long and intensive
      * calculations. The executed runnables are guaranteed to be executed separately
      * and sequential.
      */
-    public static final ExecutorService worker = new ProgressMonitorExecutor();
+    public static final ExecutorService worker = new ProgressMonitorExecutor("main-worker-%d", Thread.NORM_PRIORITY);
 
     /**
      * Global application preferences
@@ -499,11 +500,11 @@ public abstract class Main {
             panel.add(gettingStarted, BorderLayout.CENTER);
         }
         panel.setVisible(true);
-        redoUndoListener.commandChanged(0,0);
+        redoUndoListener.commandChanged(0, 0);
 
         Main.map = map;
 
-        for (MapFrameListener listener : mapFrameListeners ) {
+        for (MapFrameListener listener : mapFrameListeners) {
             listener.mapFrameInitialized(old, map);
         }
         if (map == null && currentProgressMonitor != null) {
@@ -527,12 +528,15 @@ public abstract class Main {
 
     private static volatile InitStatusListener initListener = null;
 
-    public static interface InitStatusListener {
+    public interface InitStatusListener {
 
-        void updateStatus(String event);
+        Object updateStatus(String event);
+
+        void finish(Object status);
     }
 
     public static void setInitStatusListener(InitStatusListener listener) {
+        CheckParameterUtil.ensureParameterNotNull(listener);
         initListener = listener;
     }
 
@@ -541,19 +545,24 @@ public abstract class Main {
      */
     public Main() {
         main = this;
-        isOpenjdk = System.getProperty("java.vm.name").toUpperCase().indexOf("OPENJDK") != -1;
+        isOpenjdk = System.getProperty("java.vm.name").toUpperCase(Locale.ENGLISH).indexOf("OPENJDK") != -1;
 
-        if (initListener != null) {
-            initListener.updateStatus(tr("Executing platform startup hook"));
-        }
-        platform.startupHook();
+        new InitializationTask(tr("Executing platform startup hook")) {
+            @Override
+            public void initialize() {
+                platform.startupHook();
+            }
+        }.call();
 
-        if (initListener != null) {
-            initListener.updateStatus(tr("Building main menu"));
-        }
-        contentPanePrivate.add(panel, BorderLayout.CENTER);
-        panel.add(gettingStarted, BorderLayout.CENTER);
-        menu = new MainMenu();
+        new InitializationTask(tr("Building main menu")) {
+
+            @Override
+            public void initialize() {
+                contentPanePrivate.add(panel, BorderLayout.CENTER);
+                panel.add(gettingStarted, BorderLayout.CENTER);
+                menu = new MainMenu();
+            }
+        }.call();
 
         undoRedo.addCommandQueueListener(redoUndoListener);
 
@@ -569,7 +578,7 @@ public abstract class Main {
         tasks.add(new InitializationTask(tr("Initializing OSM API")) {
 
             @Override
-            public void initialize() throws Exception {
+            public void initialize() {
                 // We try to establish an API connection early, so that any API
                 // capabilities are already known to the editor instance. However
                 // if it goes wrong that's not critical at this stage.
@@ -584,7 +593,7 @@ public abstract class Main {
         tasks.add(new InitializationTask(tr("Initializing validator")) {
 
             @Override
-            public void initialize() throws Exception {
+            public void initialize() {
                 validator = new OsmValidator();
                 MapView.addLayerChangeListener(validator);
             }
@@ -593,7 +602,7 @@ public abstract class Main {
         tasks.add(new InitializationTask(tr("Initializing presets")) {
 
             @Override
-            public void initialize() throws Exception {
+            public void initialize() {
                 TaggingPresets.initialize();
             }
         });
@@ -601,7 +610,7 @@ public abstract class Main {
         tasks.add(new InitializationTask(tr("Initializing map styles")) {
 
             @Override
-            public void initialize() throws Exception {
+            public void initialize() {
                 MapPaintPreference.initialize();
             }
         });
@@ -609,16 +618,18 @@ public abstract class Main {
         tasks.add(new InitializationTask(tr("Loading imagery preferences")) {
 
             @Override
-            public void initialize() throws Exception {
+            public void initialize() {
                 ImageryPreference.initialize();
             }
         });
 
         try {
-            for (Future<Void> i : Executors.newFixedThreadPool(
-                    Runtime.getRuntime().availableProcessors()).invokeAll(tasks)) {
+            final ExecutorService service = Executors.newFixedThreadPool(
+                    Runtime.getRuntime().availableProcessors(), Utils.newThreadFactory("main-init-%d", Thread.NORM_PRIORITY));
+            for (Future<Void> i : service.invokeAll(tasks)) {
                 i.get();
             }
+            service.shutdown();
         } catch (Exception ex) {
             throw new RuntimeException(ex);
         }
@@ -668,14 +679,15 @@ public abstract class Main {
             }
         });
 
-        if (initListener != null) {
-            initListener.updateStatus(tr("Updating user interface"));
-        }
-
-        toolbar.refreshToolbarControl();
+        new InitializationTask(tr("Updating user interface")) {
 
-        toolbar.control.updateUI();
-        contentPanePrivate.updateUI();
+            @Override
+            public void initialize() {
+                toolbar.refreshToolbarControl();
+                toolbar.control.updateUI();
+                contentPanePrivate.updateUI();
+            }
+        }.call();
     }
 
     private abstract class InitializationTask implements Callable<Void> {
@@ -686,18 +698,17 @@ public abstract class Main {
             this.name = name;
         }
 
-        public abstract void initialize() throws Exception;
+        public abstract void initialize();
 
         @Override
-        public Void call() throws Exception {
+        public Void call() {
+            Object status = null;
             if (initListener != null) {
-                initListener.updateStatus(name);
+                status = initListener.updateStatus(name);
             }
-            final long startTime = System.currentTimeMillis();
             initialize();
-            if (isDebugEnabled()) {
-                final long elapsedTime = System.currentTimeMillis() - startTime;
-                Main.debug(tr("{0} completed in {1}", name, Utils.getDurationString(elapsedTime)));
+            if (initListener != null) {
+                initListener.finish(status);
             }
             return null;
         }
@@ -759,7 +770,7 @@ public abstract class Main {
         MapFrame mapFrame = new MapFrame(contentPanePrivate, viewportData);
         setMapFrame(mapFrame);
         if (firstLayer != null) {
-            mapFrame.selectMapMode((MapMode)mapFrame.getDefaultButtonAction(), firstLayer);
+            mapFrame.selectMapMode((MapMode) mapFrame.getDefaultButtonAction(), firstLayer);
         }
         mapFrame.initializeDialogsPane();
         // bootstrapping problem: make sure the layer list dialog is going to
@@ -895,7 +906,7 @@ public abstract class Main {
     protected static volatile WindowGeometry geometry;
     protected static int windowState = JFrame.NORMAL;
 
-    private final CommandQueueListener redoUndoListener = new CommandQueueListener(){
+    private final CommandQueueListener redoUndoListener = new CommandQueueListener() {
         @Override
         public void commandChanged(final int queueSize, final int redoSize) {
             menu.undo.setEnabled(queueSize > 0);
@@ -915,8 +926,7 @@ public abstract class Main {
             String laf = Main.pref.get("laf", defaultlaf);
             try {
                 UIManager.setLookAndFeel(laf);
-            }
-            catch (final NoClassDefFoundError | ClassNotFoundException e) {
+            } catch (final NoClassDefFoundError | ClassNotFoundException e) {
                 // Try to find look and feel in plugin classloaders
                 Class<?> klass = null;
                 for (ClassLoader cl : PluginHandler.getResourceClassLoaders()) {
@@ -925,6 +935,9 @@ public abstract class Main {
                         break;
                     } catch (ClassNotFoundException ex) {
                         // Do nothing
+                        if (Main.isTraceEnabled()) {
+                            Main.trace(ex.getMessage());
+                        }
                     }
                 }
                 if (klass != null && LookAndFeel.class.isAssignableFrom(klass)) {
@@ -937,8 +950,7 @@ public abstract class Main {
                     info("Look and Feel not found: " + laf);
                     Main.pref.put("laf", defaultlaf);
                 }
-            }
-            catch (final UnsupportedLookAndFeelException e) {
+            } catch (final UnsupportedLookAndFeelException e) {
                 info("Look and Feel not supported: " + laf);
                 Main.pref.put("laf", defaultlaf);
             }
@@ -964,7 +976,7 @@ public abstract class Main {
         }
 
         geometry = WindowGeometry.mainWindow("gui.geometry",
-            (args.containsKey(Option.GEOMETRY) ? args.get(Option.GEOMETRY).iterator().next() : null),
+            args.containsKey(Option.GEOMETRY) ? args.get(Option.GEOMETRY).iterator().next() : null,
             !args.containsKey(Option.NO_MAXIMIZE) && Main.pref.getBoolean("gui.maximized", false));
     }
 
@@ -991,7 +1003,7 @@ public abstract class Main {
                                 JOptionPane.WARNING_MESSAGE
                                 );
                     }
-                    if (f!=null) {
+                    if (f != null) {
                         fileList.add(f);
                     }
                     break;
@@ -1001,8 +1013,7 @@ public abstract class Main {
                     break;
                 }
             }
-            if(!fileList.isEmpty())
-            {
+            if (!fileList.isEmpty()) {
                 OpenFileAction.openFiles(fileList, true);
             }
         }
@@ -1034,8 +1045,10 @@ public abstract class Main {
     }
 
     /**
-     * Asks user to perform "save layer" operations (save on disk and/or upload data to server) for all {@link AbstractModifiableLayer} before JOSM exits.
-     * @return {@code true} if there was nothing to save, or if the user wants to proceed to save operations. {@code false} if the user cancels.
+     * Asks user to perform "save layer" operations (save on disk and/or upload data to server) for all
+     * {@link AbstractModifiableLayer} before JOSM exits.
+     * @return {@code true} if there was nothing to save, or if the user wants to proceed to save operations.
+     *         {@code false} if the user cancels.
      * @since 2025
      */
     public static boolean saveUnsavedModifications() {
@@ -1048,7 +1061,8 @@ public abstract class Main {
      *
      * @param selectedLayers The layers to check. Only instances of {@link AbstractModifiableLayer} are considered.
      * @param exit {@code true} if JOSM is exiting, {@code false} otherwise.
-     * @return {@code true} if there was nothing to save, or if the user wants to proceed to save operations. {@code false} if the user cancels.
+     * @return {@code true} if there was nothing to save, or if the user wants to proceed to save operations.
+     *         {@code false} if the user cancels.
      * @since 5519
      */
     public static boolean saveUnsavedModifications(Iterable<? extends Layer> selectedLayers, boolean exit) {
@@ -1058,7 +1072,7 @@ public abstract class Main {
             if (!(l instanceof AbstractModifiableLayer)) {
                 continue;
             }
-            AbstractModifiableLayer odl = (AbstractModifiableLayer)l;
+            AbstractModifiableLayer odl = (AbstractModifiableLayer) l;
             if ((odl.requiresSaveToFile() || (odl.requiresUploadToServer() && !odl.isUploadDiscouraged())) && odl.isModified()) {
                 layersWithUnmodifiedChanges.add(odl);
             }
@@ -1082,15 +1096,18 @@ public abstract class Main {
     }
 
     /**
-     * Closes JOSM and optionally terminates the Java Virtual Machine (JVM). If there are some unsaved data layers, asks first for user confirmation.
+     * Closes JOSM and optionally terminates the Java Virtual Machine (JVM).
+     * If there are some unsaved data layers, asks first for user confirmation.
      * @param exit If {@code true}, the JVM is terminated by running {@link System#exit} with a given return code.
      * @param exitCode The return code
      * @return {@code true} if JOSM has been closed, {@code false} if the user has cancelled the operation.
      * @since 3378
      */
     public static boolean exitJosm(boolean exit, int exitCode) {
-        JCSCacheManager.shutdown();
         if (Main.saveUnsavedModifications()) {
+            worker.shutdown();
+            ImageProvider.shutdown(false);
+            JCSCacheManager.shutdown();
             geometry.remember("gui.geometry");
             if (map != null) {
                 map.rememberToggleDialogWidth();
@@ -1103,6 +1120,9 @@ public abstract class Main {
                     Main.main.removeLayer(l);
                 }
             }
+            worker.shutdownNow();
+            ImageProvider.shutdown(true);
+
             if (exit) {
                 System.exit(exitCode);
             }
@@ -1115,18 +1135,18 @@ public abstract class Main {
      * The type of a command line parameter, to be used in switch statements.
      * @see #paramType
      */
-    private enum DownloadParamType { httpUrl, fileUrl, bounds, fileName }
+    enum DownloadParamType { httpUrl, fileUrl, bounds, fileName }
 
     /**
      * Guess the type of a parameter string specified on the command line with --download= or --downloadgps.
      * @param s A parameter string
      * @return The guessed parameter type
      */
-    private static DownloadParamType paramType(String s) {
-        if(s.startsWith("http:") || s.startsWith("https:")) return DownloadParamType.httpUrl;
-        if(s.startsWith("file:")) return DownloadParamType.fileUrl;
+    static DownloadParamType paramType(String s) {
+        if (s.startsWith("http:") || s.startsWith("https:")) return DownloadParamType.httpUrl;
+        if (s.startsWith("file:")) return DownloadParamType.fileUrl;
         String coorPattern = "\\s*[+-]?[0-9]+(\\.[0-9]+)?\\s*";
-        if(s.matches(coorPattern+"(,"+coorPattern+"){3}")) return DownloadParamType.bounds;
+        if (s.matches(coorPattern+"(,"+coorPattern+"){3}")) return DownloadParamType.bounds;
         // everything else must be a file name
         return DownloadParamType.fileName;
     }
@@ -1159,8 +1179,8 @@ public abstract class Main {
         final StringTokenizer st = new StringTokenizer(s, ",");
         if (st.countTokens() == 4) {
             Bounds b = new Bounds(
-                    new LatLon(Double.parseDouble(st.nextToken()),Double.parseDouble(st.nextToken())),
-                    new LatLon(Double.parseDouble(st.nextToken()),Double.parseDouble(st.nextToken()))
+                    new LatLon(Double.parseDouble(st.nextToken()), Double.parseDouble(st.nextToken())),
+                    new LatLon(Double.parseDouble(st.nextToken()), Double.parseDouble(st.nextToken()))
                     );
             downloadFromParamBounds(rawGps, b);
         }
@@ -1190,13 +1210,13 @@ public abstract class Main {
         if (os == null) {
             warn("Your operating system has no name, so I'm guessing its some kind of *nix.");
             platform = new PlatformHookUnixoid();
-        } else if (os.toLowerCase().startsWith("windows")) {
+        } else if (os.toLowerCase(Locale.ENGLISH).startsWith("windows")) {
             platform = new PlatformHookWindows();
         } else if ("Linux".equals(os) || "Solaris".equals(os) ||
                 "SunOS".equals(os) || "AIX".equals(os) ||
                 "FreeBSD".equals(os) || "NetBSD".equals(os) || "OpenBSD".equals(os)) {
             platform = new PlatformHookUnixoid();
-        } else if (os.toLowerCase().startsWith("mac os x")) {
+        } else if (os.toLowerCase(Locale.ENGLISH).startsWith("mac os x")) {
             platform = new PlatformHookOsx();
         } else {
             warn("I don't know your operating system '"+os+"', so I'm guessing its some kind of *nix.");
@@ -1232,7 +1252,7 @@ public abstract class Main {
         private void handleComponentEvent(ComponentEvent e) {
             Component c = e.getComponent();
             if (c instanceof JFrame && c.isVisible()) {
-                if(Main.windowState == JFrame.NORMAL) {
+                if (Main.windowState == JFrame.NORMAL) {
                     Main.geometry = new WindowGeometry((JFrame) c);
                 } else {
                     Main.geometry.fixScreen((JFrame) c);
@@ -1243,7 +1263,7 @@ public abstract class Main {
 
     protected static void addListener() {
         parent.addComponentListener(new WindowPositionSizeListener());
-        ((JFrame)parent).addWindowStateListener(new WindowPositionSizeListener());
+        ((JFrame) parent).addWindowStateListener(new WindowPositionSizeListener());
     }
 
     /**
@@ -1341,9 +1361,9 @@ public abstract class Main {
         if (newValue == null ^ oldValue == null
                 || (newValue != null && oldValue != null && !Objects.equals(newValue.toCode(), oldValue.toCode()))) {
 
-            synchronized(Main.class) {
+            synchronized (Main.class) {
                 Iterator<WeakReference<ProjectionChangeListener>> it = listeners.iterator();
-                while (it.hasNext()){
+                while (it.hasNext()) {
                     WeakReference<ProjectionChangeListener> wr = it.next();
                     ProjectionChangeListener listener = wr.get();
                     if (listener == null) {
@@ -1383,9 +1403,9 @@ public abstract class Main {
      */
     public static void removeProjectionChangeListener(ProjectionChangeListener listener) {
         if (listener == null) return;
-        synchronized(Main.class){
+        synchronized (Main.class) {
             Iterator<WeakReference<ProjectionChangeListener>> it = listeners.iterator();
-            while (it.hasNext()){
+            while (it.hasNext()) {
                 WeakReference<ProjectionChangeListener> wr = it.next();
                 // remove the listener - and any other listener which got garbage
                 // collected in the meantime
@@ -1403,7 +1423,7 @@ public abstract class Main {
      * or comes back to JOSM. Window switches from one JOSM window to another
      * are not reported.
      */
-    public static interface WindowSwitchListener {
+    public interface WindowSwitchListener {
         /**
          * Called when the user activates a window of another application.
          */
@@ -1447,9 +1467,9 @@ public abstract class Main {
      */
     public static void removeWindowSwitchListener(WindowSwitchListener listener) {
         if (listener == null) return;
-        synchronized (Main.class){
+        synchronized (Main.class) {
             Iterator<WeakReference<WindowSwitchListener>> it = windowSwitchListeners.iterator();
-            while (it.hasNext()){
+            while (it.hasNext()) {
                 WeakReference<WindowSwitchListener> wr = it.next();
                 // remove the listener - and any other listener which got garbage
                 // collected in the meantime
@@ -1521,7 +1541,7 @@ public abstract class Main {
                 // fire WindowSwitchListeners
                 synchronized (Main.class) {
                     Iterator<WeakReference<WindowSwitchListener>> it = windowSwitchListeners.iterator();
-                    while (it.hasNext()){
+                    while (it.hasNext()) {
                         WeakReference<WindowSwitchListener> wr = it.next();
                         WindowSwitchListener listener = wr.get();
                         if (listener == null) {
@@ -1550,7 +1570,7 @@ public abstract class Main {
                 // fire WindowSwitchListeners
                 synchronized (Main.class) {
                     Iterator<WeakReference<WindowSwitchListener>> it = windowSwitchListeners.iterator();
-                    while (it.hasNext()){
+                    while (it.hasNext()) {
                         WeakReference<WindowSwitchListener> wr = it.next();
                         WindowSwitchListener listener = wr.get();
                         if (listener == null) {
@@ -1646,6 +1666,15 @@ public abstract class Main {
     }
 
     /**
+     * Returns the command-line arguments used to run the application.
+     * @return the command-line arguments used to run the application
+     * @since 8356
+     */
+    public static List<String> getCommandLineArgs() {
+        return Collections.unmodifiableList(COMMAND_LINE_ARGS);
+    }
+
+    /**
      * Returns the JOSM website URL.
      * @return the josm website URL
      * @since 6897
@@ -1738,6 +1767,16 @@ public abstract class Main {
     }
 
     /**
+     * Sets the given online resource to online state.
+     * @param r the online resource
+     * @return {@code true} if {@code r} was offline
+     * @since 8506
+     */
+    public static boolean setOnline(OnlineResource r) {
+        return OFFLINE_RESOURCES.remove(r);
+    }
+
+    /**
      * Replies the set of online resources currently offline.
      * @return the set of online resources currently offline
      * @since 7434
diff --git a/src/org/openstreetmap/josm/actions/AboutAction.java b/src/org/openstreetmap/josm/actions/AboutAction.java
index 6f81b94..6c04dc3 100644
--- a/src/org/openstreetmap/josm/actions/AboutAction.java
+++ b/src/org/openstreetmap/josm/actions/AboutAction.java
@@ -1,14 +1,16 @@
-//License: GPL. For details, see LICENSE file.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.actions;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.awt.Dimension;
 import java.awt.GridBagLayout;
+import java.awt.Image;
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
 
 import javax.swing.BorderFactory;
+import javax.swing.ImageIcon;
 import javax.swing.JLabel;
 import javax.swing.JOptionPane;
 import javax.swing.JPanel;
@@ -29,10 +31,9 @@ import org.openstreetmap.josm.tools.Shortcut;
 import org.openstreetmap.josm.tools.Utils;
 
 /**
- * Nice about screen. I guess every application need one these days.. *sigh*
+ * Nice about screen.
  *
- * The REVISION resource is read and if present, it shows the revision
- * information of the jar-file.
+ * The REVISION resource is read and if present, it shows the revision information of the jar-file.
  *
  * @author imi
  */
@@ -85,11 +86,12 @@ public class AboutAction extends JosmAction {
                 "<p style='font-size:50%'></p>" +
                 "</html>");
         info.add(label, GBC.eol().fill(GBC.HORIZONTAL).insets(10, 0, 0, 0));
-        info.add(new JLabel(tr("Homepage")), GBC.std().insets(10,0,10,0));
-        info.add(new UrlLabel(Main.getJOSMWebsite(),2), GBC.eol().fill(GBC.HORIZONTAL));
-        info.add(GBC.glue(0,5), GBC.eol());
-        info.add(new JLabel(tr("Bug Reports")), GBC.std().insets(10,0,10,0));
-        info.add(BugReportExceptionHandler.getBugReportUrlLabel(Utils.strip(ShowStatusReportAction.getReportHeader())), GBC.eol().fill(GBC.HORIZONTAL));
+        info.add(new JLabel(tr("Homepage")), GBC.std().insets(10, 0, 10, 0));
+        info.add(new UrlLabel(Main.getJOSMWebsite(), 2), GBC.eol().fill(GBC.HORIZONTAL));
+        info.add(GBC.glue(0, 5), GBC.eol());
+        info.add(new JLabel(tr("Bug Reports")), GBC.std().insets(10, 0, 10, 0));
+        info.add(BugReportExceptionHandler.getBugReportUrlLabel(Utils.strip(ShowStatusReportAction.getReportHeader())),
+                GBC.eol().fill(GBC.HORIZONTAL));
 
         about.addTab(tr("Info"), info);
         about.addTab(tr("Readme"), createScrollPane(readme));
@@ -104,12 +106,12 @@ public class AboutAction extends JosmAction {
         panel.add(about, GBC.std().fill());
 
         GuiHelper.prepareResizeableOptionPane(panel, panel.getPreferredSize());
-        JOptionPane.showMessageDialog(Main.parent, panel, tr("About JOSM..."),
-                JOptionPane.INFORMATION_MESSAGE, ImageProvider.get("logo"));
+        JOptionPane.showMessageDialog(Main.parent, panel, tr("About JOSM..."), JOptionPane.INFORMATION_MESSAGE,
+                new ImageIcon(ImageProvider.get("logo.svg").getImage().getScaledInstance(256, 258, Image.SCALE_SMOOTH)));
     }
 
     private JScrollPane createScrollPane(JosmTextArea area) {
-        area.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        area.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
         area.setOpaque(false);
         JScrollPane sp = new JScrollPane(area);
         sp.setBorder(null);
diff --git a/src/org/openstreetmap/josm/actions/AbstractInfoAction.java b/src/org/openstreetmap/josm/actions/AbstractInfoAction.java
index f128387..1a89904 100644
--- a/src/org/openstreetmap/josm/actions/AbstractInfoAction.java
+++ b/src/org/openstreetmap/josm/actions/AbstractInfoAction.java
@@ -13,6 +13,7 @@ import java.util.List;
 import javax.swing.JOptionPane;
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.notes.Note;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane.ButtonSpec;
@@ -27,7 +28,8 @@ public abstract class AbstractInfoAction extends JosmAction {
         super(installAdapters);
     }
 
-    public AbstractInfoAction(String name, String iconName, String tooltip, Shortcut shortcut, boolean register, String toolbarId, boolean installAdapters) {
+    public AbstractInfoAction(String name, String iconName, String tooltip, Shortcut shortcut, boolean register,
+            String toolbarId, boolean installAdapters) {
         super(name, iconName, tooltip, shortcut, register, toolbarId, installAdapters);
     }
 
@@ -44,7 +46,8 @@ public abstract class AbstractInfoAction extends JosmAction {
                 new ButtonSpec(
                         tr("Continue"),
                         ImageProvider.get("ok"),
-                        trn("Click to continue and to open {0} browser", "Click to continue and to open {0} browsers", numBrowsers, numBrowsers),
+                        trn("Click to continue and to open {0} browser", "Click to continue and to open {0} browsers",
+                                numBrowsers, numBrowsers),
                         null // no specific help topic
                 ),
                 new ButtonSpec(
@@ -67,19 +70,24 @@ public abstract class AbstractInfoAction extends JosmAction {
         return ret == 0;
     }
 
-    protected void launchInfoBrowsersForSelectedPrimitives() {
-        List<OsmPrimitive> primitivesToShow = new ArrayList<>(getCurrentDataSet().getAllSelected());
+    protected void launchInfoBrowsersForSelectedPrimitivesAndNote() {
+        List<OsmPrimitive> primitivesToShow = new ArrayList<>();
+        if (getCurrentDataSet() != null) {
+            primitivesToShow.addAll(getCurrentDataSet().getAllSelected());
+        }
+
+        Note noteToShow = Main.isDisplayingMapView() ? Main.map.noteDialog.getSelectedNote() : null;
 
         // filter out new primitives which are not yet uploaded to the server
         //
         Iterator<OsmPrimitive> it = primitivesToShow.iterator();
-        while(it.hasNext()) {
+        while (it.hasNext()) {
             if (it.next().isNew()) {
                 it.remove();
             }
         }
 
-        if (primitivesToShow.isEmpty()) {
+        if (primitivesToShow.isEmpty() && noteToShow == null) {
             JOptionPane.showMessageDialog(
                     Main.parent,
                     tr("Please select at least one already uploaded node, way, or relation."),
@@ -92,16 +100,30 @@ public abstract class AbstractInfoAction extends JosmAction {
         // don't launch more than 10 browser instances / browser windows
         //
         int max = Math.min(10, primitivesToShow.size());
-        if (primitivesToShow.size() > max && ! confirmLaunchMultiple(primitivesToShow.size()))
+        if (primitivesToShow.size() > max && !confirmLaunchMultiple(primitivesToShow.size()))
             return;
-        for(int i = 0; i < max; i++) {
-            OpenBrowser.displayUrl(createInfoUrl(primitivesToShow.get(i)));
+        for (int i = 0; i < max; i++) {
+            launchInfoBrowser(primitivesToShow.get(i));
+        }
+
+        if (noteToShow != null) {
+            launchInfoBrowser(noteToShow);
+        }
+    }
+
+    protected final void launchInfoBrowser(Object o) {
+        String url = createInfoUrl(o);
+        if (url != null) {
+            String result = OpenBrowser.displayUrl(url);
+            if (result != null) {
+                Main.warn(result);
+            }
         }
     }
 
     @Override
     public void actionPerformed(ActionEvent e) {
-        launchInfoBrowsersForSelectedPrimitives();
+        launchInfoBrowsersForSelectedPrimitivesAndNote();
     }
 
     protected abstract String createInfoUrl(Object infoObject);
diff --git a/src/org/openstreetmap/josm/actions/AbstractMergeAction.java b/src/org/openstreetmap/josm/actions/AbstractMergeAction.java
index c209c0a..98acfe3 100644
--- a/src/org/openstreetmap/josm/actions/AbstractMergeAction.java
+++ b/src/org/openstreetmap/josm/actions/AbstractMergeAction.java
@@ -67,8 +67,8 @@ public abstract class AbstractMergeAction extends JosmAction {
 
         ExtendedDialog ed = new ExtendedDialog(Main.parent,
                 tr("Select target layer"),
-                new String[] { tr("Merge"), tr("Cancel") });
-        ed.setButtonIcons(new String[] { "dialogs/mergedown", "cancel" });
+                new String[] {tr("Merge"), tr("Cancel")});
+        ed.setButtonIcons(new String[] {"dialogs/mergedown", "cancel"});
         ed.setContent(pnl);
         ed.showDialog();
         if (ed.getValue() != 1)
diff --git a/src/org/openstreetmap/josm/actions/AbstractSelectAction.java b/src/org/openstreetmap/josm/actions/AbstractSelectAction.java
index 7f0e6e5..a975073 100644
--- a/src/org/openstreetmap/josm/actions/AbstractSelectAction.java
+++ b/src/org/openstreetmap/josm/actions/AbstractSelectAction.java
@@ -1,24 +1,24 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.actions;
-
-import static org.openstreetmap.josm.tools.I18n.tr;
-
-import javax.swing.AbstractAction;
-
-import org.openstreetmap.josm.tools.ImageProvider;
-
-/**
- * Superclass of "Select" actions in various parts of JOSM.
- * @since 7949
- */
-public abstract class AbstractSelectAction extends AbstractAction {
-
-    /**
-     * Constructs a new {@code AbstractSelectAction}.
-     */
-    public AbstractSelectAction() {
-        putValue(NAME, tr("Select"));
-        putValue(SHORT_DESCRIPTION,  tr("Set the selected elements on the map to the selected items in the list above."));
-        putValue(SMALL_ICON, ImageProvider.get("dialogs", "select"));
-    }
-}
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.actions;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import javax.swing.AbstractAction;
+
+import org.openstreetmap.josm.tools.ImageProvider;
+
+/**
+ * Superclass of "Select" actions in various parts of JOSM.
+ * @since 7949
+ */
+public abstract class AbstractSelectAction extends AbstractAction {
+
+    /**
+     * Constructs a new {@code AbstractSelectAction}.
+     */
+    public AbstractSelectAction() {
+        putValue(NAME, tr("Select"));
+        putValue(SHORT_DESCRIPTION,  tr("Set the selected elements on the map to the selected items in the list above."));
+        putValue(SMALL_ICON, ImageProvider.get("dialogs", "select"));
+    }
+}
diff --git a/src/org/openstreetmap/josm/actions/AddImageryLayerAction.java b/src/org/openstreetmap/josm/actions/AddImageryLayerAction.java
index 422e840..ee09a2d 100644
--- a/src/org/openstreetmap/josm/actions/AddImageryLayerAction.java
+++ b/src/org/openstreetmap/josm/actions/AddImageryLayerAction.java
@@ -9,6 +9,8 @@ import java.awt.GridBagLayout;
 import java.awt.event.ActionEvent;
 import java.io.IOException;
 import java.net.MalformedURLException;
+import java.util.HashSet;
+import java.util.Set;
 
 import javax.swing.JComboBox;
 import javax.swing.JOptionPane;
@@ -19,11 +21,12 @@ import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.imagery.ImageryInfo;
 import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryType;
 import org.openstreetmap.josm.gui.ExtendedDialog;
-import org.openstreetmap.josm.gui.actionsupport.AlignImageryPanel;
+import org.openstreetmap.josm.gui.layer.AlignImageryPanel;
 import org.openstreetmap.josm.gui.layer.ImageryLayer;
 import org.openstreetmap.josm.gui.preferences.imagery.WMSLayerTree;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.io.imagery.WMSImagery;
+import org.openstreetmap.josm.io.imagery.WMSImagery.LayerDetails;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.ImageProvider.ImageResourceCallback;
@@ -42,7 +45,7 @@ public class AddImageryLayerAction extends JosmAction implements AdaptableAction
      * @param info The imagery info
      */
     public AddImageryLayerAction(ImageryInfo info) {
-        super(info.getMenuName(), /* ICON */"imagery_menu", tr("Add imagery layer {0}",info.getName()), null, false, false);
+        super(info.getMenuName(), /* ICON */"imagery_menu", tr("Add imagery layer {0}", info.getName()), null, false, false);
         putValue("toolbar", "imagery_" + info.getToolbarName());
         putValue("help", ht("/Preferences/Imagery"));
         this.info = info;
@@ -94,7 +97,7 @@ public class AddImageryLayerAction extends JosmAction implements AdaptableAction
 
     protected ImageryInfo getWMSLayerInfo() {
         try {
-            assert (ImageryType.WMS_ENDPOINT.equals(info.getImageryType()));
+            assert ImageryType.WMS_ENDPOINT.equals(info.getImageryType());
             final WMSImagery wms = new WMSImagery();
             wms.attemptGetCapabilities(info.getUrl());
 
@@ -104,22 +107,39 @@ public class AddImageryLayerAction extends JosmAction implements AdaptableAction
             formats.setSelectedItem(wms.getPreferredFormats());
             formats.setToolTipText(tr("Select image format for WMS layer"));
 
-            if (1 != new ExtendedDialog(Main.parent, tr("Select WMS layers"), new String[]{tr("Add layers"), tr("Cancel")}) {{
+            if (1 != new ExtendedDialog(Main.parent, tr("Select WMS layers"), new String[]{tr("Add layers"), tr("Cancel")}) { {
                 final JScrollPane scrollPane = new JScrollPane(tree.getLayerTree());
                 scrollPane.setPreferredSize(new Dimension(400, 400));
                 final JPanel panel = new JPanel(new GridBagLayout());
                 panel.add(scrollPane, GBC.eol().fill());
                 panel.add(formats, GBC.eol().fill(GBC.HORIZONTAL));
                 setContent(panel);
-            }}.showDialog().getValue()) {
+            } }.showDialog().getValue()) {
                 return null;
             }
 
             final String url = wms.buildGetMapUrl(
                     tree.getSelectedLayers(), (String) formats.getSelectedItem());
-            return new ImageryInfo(info.getName(), url, "wms", info.getEulaAcceptanceRequired(), info.getCookies());
-        } // exception handling from AddWMSLayerPanel.java
-        catch (MalformedURLException ex) {
+            Set<String> supportedCrs = new HashSet<>();
+            boolean first = true;
+            StringBuilder layersString = new StringBuilder();
+            for (LayerDetails layer: tree.getSelectedLayers()) {
+                if (first) {
+                    supportedCrs.addAll(layer.getProjections());
+                    first = false;
+                }
+                layersString.append(layer.name);
+                layersString.append(", ");
+                supportedCrs.retainAll(layer.getProjections());
+            }
+
+            ImageryInfo ret = new ImageryInfo(info.getName(), url, "wms", info.getEulaAcceptanceRequired(), info.getCookies());
+            if (layersString.length() > 2) {
+                ret.setName(ret.getName() + " " + layersString.substring(0, layersString.length() - 2));
+            }
+            ret.setServerProjections(supportedCrs);
+            return ret;
+        } catch (MalformedURLException ex) {
             JOptionPane.showMessageDialog(Main.parent, tr("Invalid service URL."),
                     tr("WMS Error"), JOptionPane.ERROR_MESSAGE);
         } catch (IOException ex) {
@@ -146,10 +166,12 @@ public class AddImageryLayerAction extends JosmAction implements AdaptableAction
 
     @Override
     protected void updateEnabledState() {
+        ImageryType type = info.getImageryType();
         // never enable blacklisted entries. Do not add same imagery layer twice (fix #2519)
-        if (info.isBlacklisted() /*|| isLayerAlreadyPresent()*/) { // FIXME check disabled to allow several instances with different settings (see #7981)
+        if (info.isBlacklisted() /*|| isLayerAlreadyPresent()*/) {
+            // FIXME check disabled to allow several instances with different settings (see #7981)
             setEnabled(false);
-        } else if (info.getImageryType() == ImageryType.TMS || info.getImageryType() == ImageryType.BING || info.getImageryType() == ImageryType.SCANEX) {
+        } else if (type == ImageryType.TMS || type == ImageryType.BING || type == ImageryType.SCANEX) {
             setEnabled(true);
         } else if (Main.isDisplayingMapView() && !Main.map.mapView.getAllLayers().isEmpty()) {
             setEnabled(true);
diff --git a/src/org/openstreetmap/josm/actions/AddNodeAction.java b/src/org/openstreetmap/josm/actions/AddNodeAction.java
index fbb0bd3..4d59411 100644
--- a/src/org/openstreetmap/josm/actions/AddNodeAction.java
+++ b/src/org/openstreetmap/josm/actions/AddNodeAction.java
@@ -6,11 +6,13 @@ import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
+import java.util.Collections;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.command.AddCommand;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.gui.dialogs.LatLonDialog;
 import org.openstreetmap.josm.tools.Shortcut;
 
@@ -63,7 +65,11 @@ public final class AddNodeAction extends JosmAction {
         // add the node
         Main.main.undoRedo.add(new AddCommand(nnew));
         getCurrentDataSet().setSelected(nnew);
-        Main.map.mapView.repaint();
+        if (Main.map.mapView.getRealBounds().contains(nnew.getCoor())) {
+            Main.map.mapView.repaint();
+        } else {
+            AutoScaleAction.zoomTo(Collections.<OsmPrimitive>singleton(nnew));
+        }
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/actions/AlignInCircleAction.java b/src/org/openstreetmap/josm/actions/AlignInCircleAction.java
index e6b6b83..b116384 100644
--- a/src/org/openstreetmap/josm/actions/AlignInCircleAction.java
+++ b/src/org/openstreetmap/josm/actions/AlignInCircleAction.java
@@ -1,4 +1,4 @@
-//License: GPL. For details, see LICENSE file.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.actions;
 
 import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
@@ -31,12 +31,12 @@ import org.openstreetmap.josm.tools.Shortcut;
 /**
  * Aligns all selected nodes within a circle. (Useful for roundabouts)
  *
- * @since 146
- *
  * @author Matthew Newton
  * @author Petr Dlouhý
  * @author Teemu Koskinen
  * @author Alain Delplanque
+ *
+ * @since 146
  */
 public final class AlignInCircleAction extends JosmAction {
 
@@ -109,12 +109,12 @@ public final class AlignInCircleAction extends JosmAction {
      * All other nodes are uniformly distributed.
      *
      * Case 1: One unclosed way.
-     * --> allow action, and align selected way nodes
+     * --> allow action, and align selected way nodes
      * If nodes contained by this way are selected, there are fix.
      * If nodes outside from the way are selected there are ignored.
      *
      * Case 2: One or more ways are selected and can be joined into a polygon
-     * --> allow action, and align selected ways nodes
+     * --> allow action, and align selected ways nodes
      * If 1 node outside of way is selected, it became center
      * If 1 node outside and 1 node inside are selected there define center and radius
      * If no outside node and 2 inside nodes are selected those 2 nodes define diameter
@@ -123,7 +123,7 @@ public final class AlignInCircleAction extends JosmAction {
      * (first referrer is the selected way)
      *
      * Case 3: Only nodes are selected
-     * --> Align these nodes, all are fix
+     * --> Align these nodes, all are fix
      */
     @Override
     public void actionPerformed(ActionEvent e) {
@@ -146,7 +146,7 @@ public final class AlignInCircleAction extends JosmAction {
             }
         }
 
-        if (ways.size() == 1 && ways.get(0).firstNode() != ways.get(0).lastNode()) {
+        if (ways.size() == 1 && !ways.get(0).isClosed()) {
             // Case 1
             Way w = ways.get(0);
             fixNodes.add(w.firstNode());
@@ -164,26 +164,26 @@ public final class AlignInCircleAction extends JosmAction {
             List<Node> inside = new ArrayList<>();
             List<Node> outside = new ArrayList<>();
 
-            for(Node n: nodes) {
+            for (Node n: nodes) {
                 boolean isInside = false;
-                for(Way w: ways) {
-                    if(w.getNodes().contains(n)) {
+                for (Way w: ways) {
+                    if (w.getNodes().contains(n)) {
                         isInside = true;
                         break;
                     }
                 }
-                if(isInside)
+                if (isInside)
                     inside.add(n);
                 else
                     outside.add(n);
             }
 
-            if(outside.size() == 1 && inside.isEmpty()) {
+            if (outside.size() == 1 && inside.isEmpty()) {
                 center = outside.get(0).getEastNorth();
-            } else if(outside.size() == 1 && inside.size() == 1) {
+            } else if (outside.size() == 1 && inside.size() == 1) {
                 center = outside.get(0).getEastNorth();
                 radius = distance(center, inside.get(0).getEastNorth());
-            } else if(inside.size() == 2 && outside.isEmpty()) {
+            } else if (inside.size() == 2 && outside.isEmpty()) {
                 // 2 nodes inside, define diameter
                 EastNorth en0 = inside.get(0).getEastNorth();
                 EastNorth en1 = inside.get(1).getEastNorth();
@@ -238,7 +238,7 @@ public final class AlignInCircleAction extends JosmAction {
             radius = radius / nodes.size();
         }
 
-        if(!actionAllowed(nodes)) return;
+        if (!actionAllowed(nodes)) return;
 
         Collection<Command> cmds = new LinkedList<>();
 
@@ -247,29 +247,33 @@ public final class AlignInCircleAction extends JosmAction {
         int nodeCount = nodes.size();
         // Search first fixed node
         int startPosition = 0;
-        for(startPosition = 0; startPosition < nodeCount; startPosition++)
-            if(fixNodes.contains(nodes.get(startPosition % nodeCount))) break;
+        for (startPosition = 0; startPosition < nodeCount; startPosition++) {
+            if (fixNodes.contains(nodes.get(startPosition % nodeCount)))
+                break;
+        }
         int i = startPosition; // Start position for current arc
         int j; // End position for current arc
-        while(i < startPosition + nodeCount) {
-            for(j = i + 1; j < startPosition + nodeCount; j++)
-                if(fixNodes.contains(nodes.get(j % nodeCount))) break;
+        while (i < startPosition + nodeCount) {
+            for (j = i + 1; j < startPosition + nodeCount; j++) {
+                if (fixNodes.contains(nodes.get(j % nodeCount)))
+                    break;
+            }
             Node first = nodes.get(i % nodeCount);
             PolarCoor pcFirst = new PolarCoor(first.getEastNorth(), center, 0);
             pcFirst.radius = radius;
             cmds.add(pcFirst.createMoveCommand(first));
-            if(j > i + 1) {
+            if (j > i + 1) {
                 double delta;
-                if(j == i + nodeCount) {
+                if (j == i + nodeCount) {
                     delta = 2 * Math.PI / nodeCount;
                 } else {
                     PolarCoor pcLast = new PolarCoor(nodes.get(j % nodeCount).getEastNorth(), center, 0);
                     delta = pcLast.angle - pcFirst.angle;
-                    if(delta < 0) // Assume each PolarCoor.angle is in range ]-pi; pi]
+                    if (delta < 0) // Assume each PolarCoor.angle is in range ]-pi; pi]
                         delta +=  2*Math.PI;
                     delta /= j - i;
                 }
-                for(int k = i+1; k < j; k++) {
+                for (int k = i+1; k < j; k++) {
                     PolarCoor p = new PolarCoor(radius, pcFirst.angle + (k-i)*delta, center, 0);
                     cmds.add(p.createMoveCommand(nodes.get(k % nodeCount)));
                 }
@@ -288,10 +292,13 @@ public final class AlignInCircleAction extends JosmAction {
      */
     private List<Node> collectNodesWithExternReferers(List<Way> ways) {
         List<Node> withReferrers = new ArrayList<>();
-        for(Way w: ways)
-            for(Node n: w.getNodes())
-                if(n.getReferrers().size() > 1)
+        for (Way w: ways) {
+            for (Node n: w.getNodes()) {
+                if (n.getReferrers().size() > 1) {
                     withReferrers.add(n);
+                }
+            }
+        }
         return withReferrers;
     }
 
@@ -305,22 +312,24 @@ public final class AlignInCircleAction extends JosmAction {
         Node firstNode = ways.get(0).firstNode();
         Node lastNode = null;
         Way lastWay = null;
-        while(firstNode != lastNode) {
-            if(lastNode == null) lastNode = firstNode;
-            for(Way way: ways) {
-                if(way == lastWay) continue;
-                if(way.firstNode() == lastNode) {
+        while (firstNode != lastNode) {
+            if (lastNode == null) lastNode = firstNode;
+            for (Way way: ways) {
+                if (way == lastWay) continue;
+                if (way.firstNode() == lastNode) {
                     List<Node> wayNodes = way.getNodes();
-                    for(int i = 0; i < wayNodes.size() - 1; i++)
+                    for (int i = 0; i < wayNodes.size() - 1; i++) {
                         nodes.add(wayNodes.get(i));
+                    }
                     lastNode = way.lastNode();
                     lastWay = way;
                     break;
                 }
-                if(way.lastNode() == lastNode) {
+                if (way.lastNode() == lastNode) {
                     List<Node> wayNodes = way.getNodes();
-                    for(int i = wayNodes.size() - 1; i > 0; i--)
+                    for (int i = wayNodes.size() - 1; i > 0; i--) {
                         nodes.add(wayNodes.get(i));
+                    }
                     lastNode = way.firstNode();
                     lastWay = way;
                     break;
@@ -330,12 +339,12 @@ public final class AlignInCircleAction extends JosmAction {
         // Check if nodes are in anticlockwise order
         int nc = nodes.size();
         double area = 0;
-        for(int i = 0; i < nc; i++) {
+        for (int i = 0; i < nc; i++) {
             EastNorth p1 = nodes.get(i).getEastNorth();
             EastNorth p2 = nodes.get((i+1) % nc).getEastNorth();
             area += p1.east()*p2.north() - p2.east()*p1.north();
         }
-        if(area < 0)
+        if (area < 0)
             Collections.reverse(nodes);
         return nodes;
     }
@@ -347,12 +356,13 @@ public final class AlignInCircleAction extends JosmAction {
      */
     private boolean actionAllowed(Collection<Node> nodes) {
         boolean outside = false;
-        for(Node n: nodes)
-            if(n.isOutsideDownloadArea()) {
+        for (Node n: nodes) {
+            if (n.isOutsideDownloadArea()) {
                 outside = true;
                 break;
             }
-        if(outside)
+        }
+        if (outside)
             new Notification(
                     tr("One or more nodes involved in this action is outside of the downloaded area."))
                     .setIcon(JOptionPane.WARNING_MESSAGE)
@@ -378,12 +388,12 @@ public final class AlignInCircleAction extends JosmAction {
      */
     protected static boolean checkWaysArePolygon(Collection<Way> ways) {
         // For each way, nodes strictly between first and last should't be reference by an other way
-        for(Way way: ways) {
-            for(Node node: way.getNodes()) {
-                if(node == way.firstNode() || node == way.lastNode()) continue;
-                for(Way wayOther: ways) {
-                    if(way == wayOther) continue;
-                    if(node.getReferrers().contains(wayOther)) return false;
+        for (Way way: ways) {
+            for (Node node: way.getNodes()) {
+                if (way.isFirstLastNode(node)) continue;
+                for (Way wayOther: ways) {
+                    if (way == wayOther) continue;
+                    if (node.getReferrers().contains(wayOther)) return false;
                 }
             }
         }
@@ -391,32 +401,32 @@ public final class AlignInCircleAction extends JosmAction {
         Way currentWay = null;
         Node startNode = null, endNode = null;
         int used = 0;
-        while(true) {
+        while (true) {
             Way nextWay = null;
-            for(Way w: ways) {
-                if(w.firstNode() == w.lastNode()) return ways.size() == 1;
-                if(w == currentWay) continue;
-                if(currentWay == null) {
+            for (Way w: ways) {
+                if (w.isClosed()) return ways.size() == 1;
+                if (w == currentWay) continue;
+                if (currentWay == null) {
                     nextWay = w;
                     startNode = w.firstNode();
                     endNode = w.lastNode();
                     break;
                 }
-                if(w.firstNode() == endNode) {
+                if (w.firstNode() == endNode) {
                     nextWay = w;
                     endNode = w.lastNode();
                     break;
                 }
-                if(w.lastNode() == endNode) {
+                if (w.lastNode() == endNode) {
                     nextWay = w;
                     endNode = w.firstNode();
                     break;
                 }
             }
-            if(nextWay == null) return false;
+            if (nextWay == null) return false;
             used += 1;
             currentWay = nextWay;
-            if(endNode == startNode) return used == ways.size();
+            if (endNode == startNode) return used == ways.size();
         }
     }
 }
diff --git a/src/org/openstreetmap/josm/actions/AlignInLineAction.java b/src/org/openstreetmap/josm/actions/AlignInLineAction.java
index 0df49af..e881624 100644
--- a/src/org/openstreetmap/josm/actions/AlignInLineAction.java
+++ b/src/org/openstreetmap/josm/actions/AlignInLineAction.java
@@ -37,10 +37,8 @@ import org.openstreetmap.josm.tools.Shortcut;
  * Case 3: Single node and ways selected: align this node relative to selected ways.
  * Case 4.1: Only nodes selected, part of a non-closed way: align these nodes on the line passing through the
  *   extremity nodes (most distant in the way sequence). See https://josm.openstreetmap.de/ticket/9605#comment:3
- * Case 4.2: Only nodes selected, part of a closed way: align these nodes on the line passing through the most distant
- *   nodes.
- * Case 4.3: Only nodes selected, part of multiple ways: align these nodes on the line passing through the most distant
- *   nodes.
+ * Case 4.2: Only nodes selected, part of a closed way: align these nodes on the line passing through the most distant nodes.
+ * Case 4.3: Only nodes selected, part of multiple ways: align these nodes on the line passing through the most distant nodes.
  * </pre>
  *
  * @author Matthew Newton
@@ -84,16 +82,13 @@ public final class AlignInLineAction extends JosmAction {
      * @return A array of two nodes.
      */
     private Node[] nodePairFurthestApart(List<Node> nodes) {
-        Node nodea = null;
-        Node nodeb = null;
-
         // Detect if selected nodes are on the same way.
 
         // Get ways passing though all selected nodes.
         Set<Way> waysRef = null;
-        for(Node n: nodes) {
+        for (Node n: nodes) {
             Collection<Way> ref = OsmPrimitive.getFilteredList(n.getReferrers(), Way.class);
-            if(waysRef == null)
+            if (waysRef == null)
                 waysRef = new HashSet<>(ref);
             else
                 waysRef.retainAll(ref);
@@ -111,6 +106,9 @@ public final class AlignInLineAction extends JosmAction {
             return nodeFurthestAppart(nodes);
         }
 
+        Node nodea = null;
+        Node nodeb = null;
+
         // The way is open, align nodes on the line passing through the extremity nodes (most distant in the way
         // sequence). See #9605#comment:3.
         Set<Node> remainNodes = new HashSet<>(nodes);
@@ -126,7 +124,7 @@ public final class AlignInLineAction extends JosmAction {
             remainNodes.remove(n);
         }
 
-        return new Node[] { nodea, nodeb };
+        return new Node[] {nodea, nodeb};
     }
 
     /**
@@ -154,7 +152,7 @@ public final class AlignInLineAction extends JosmAction {
             }
         }
 
-        return new Node[] { node1, node2 };
+        return new Node[] {node1, node2};
     }
 
     /**
@@ -170,33 +168,30 @@ public final class AlignInLineAction extends JosmAction {
 
         try {
             Command cmd = null;
-            //// Decide what to align based on selection:
+            // Decide what to align based on selection:
 
-            /// Only ways selected -> For each way align their nodes taking care of intersection
-            if(selectedNodes.isEmpty() && !selectedWays.isEmpty()) {
+            if (selectedNodes.isEmpty() && !selectedWays.isEmpty()) {
+                // Only ways selected -> For each way align their nodes taking care of intersection
                 cmd = alignMultiWay(selectedWays);
-            }
-            /// Only 1 node selected -> align this node relative to referers way
-            else if(selectedNodes.size() == 1) {
+            } else if (selectedNodes.size() == 1) {
+                // Only 1 node selected -> align this node relative to referers way
                 Node selectedNode = selectedNodes.get(0);
                 List<Way> involvedWays = null;
-                if(selectedWays.isEmpty())
-                    /// No selected way, all way containing this node are used
+                if (selectedWays.isEmpty())
+                    // No selected way, all way containing this node are used
                     involvedWays = OsmPrimitive.getFilteredList(selectedNode.getReferrers(), Way.class);
                 else
-                    /// Selected way, use only these ways
+                    // Selected way, use only these ways
                     involvedWays = selectedWays;
                 List<Line> lines = getInvolvedLines(selectedNode, involvedWays);
-                if(lines.size() > 2 || lines.isEmpty())
+                if (lines.size() > 2 || lines.isEmpty())
                     throw new InvalidSelection();
                 cmd = alignSingleNode(selectedNodes.get(0), lines);
-            }
-            // More than 3 nodes and way(s) selected -> align selected nodes. Don't care of way(s).
-            else if(selectedNodes.size() >= 3) {
+            } else if (selectedNodes.size() >= 3) {
+                // More than 3 nodes and way(s) selected -> align selected nodes. Don't care of way(s).
                 cmd = alignOnlyNodes(selectedNodes);
-            }
-            /// All others cases are invalid
-            else {
+            } else {
+                // All others cases are invalid
                 throw new InvalidSelection();
             }
 
@@ -223,9 +218,10 @@ public final class AlignInLineAction extends JosmAction {
         Node[] anchors = nodePairFurthestApart(nodes);
         Collection<Command> cmds = new ArrayList<>(nodes.size());
         Line line = new Line(anchors[0], anchors[1]);
-        for(Node node: nodes)
-            if(node != anchors[0] && node != anchors[1])
+        for (Node node: nodes) {
+            if (node != anchors[0] && node != anchors[1])
                 cmds.add(line.projectionCommand(node));
+        }
         return new SequenceCommand(tr("Align Nodes in Line"), cmds);
     }
 
@@ -233,35 +229,34 @@ public final class AlignInLineAction extends JosmAction {
      * Align way in case of multiple way #6819
      * @param ways Collection of way to align
      * @return Command that perform action
-     * @throws InvalidSelection
+     * @throws InvalidSelection if a polygon is selected, or if a node is used by 3 or more ways
      */
     private Command alignMultiWay(Collection<Way> ways) throws InvalidSelection {
         // Collect all nodes and compute line equation
         Set<Node> nodes = new HashSet<>();
         Map<Way, Line> lines = new HashMap<>();
-        for(Way w: ways) {
-            if(w.firstNode() == w.lastNode())
+        for (Way w: ways) {
+            if (w.isClosed())
                 throw new InvalidSelection(tr("Can not align a polygon. Abort."));
             nodes.addAll(w.getNodes());
             lines.put(w, new Line(w));
         }
         Collection<Command> cmds = new ArrayList<>(nodes.size());
         List<Way> referers = new ArrayList<>(ways.size());
-        for(Node n: nodes) {
+        for (Node n: nodes) {
             referers.clear();
-            for(OsmPrimitive o: n.getReferrers())
-                if(ways.contains(o))
+            for (OsmPrimitive o: n.getReferrers()) {
+                if (ways.contains(o))
                     referers.add((Way) o);
-            if(referers.size() == 1) {
+            }
+            if (referers.size() == 1) {
                 Way way = referers.get(0);
-                if(n == way.firstNode() || n == way.lastNode()) continue;
+                if (way.isFirstLastNode(n)) continue;
                 cmds.add(lines.get(way).projectionCommand(n));
-            }
-            else if(referers.size() == 2) {
+            } else if (referers.size() == 2) {
                 Command cmd = lines.get(referers.get(0)).intersectionCommand(n, lines.get(referers.get(1)));
                 cmds.add(cmd);
-            }
-            else
+            } else
                 throw new InvalidSelection(tr("Intersection of three or more ways can not be solved. Abort."));
         }
         return new SequenceCommand(tr("Align Nodes in Line"), cmds);
@@ -272,43 +267,44 @@ public final class AlignInLineAction extends JosmAction {
      * @param node Node to be aligned
      * @param refWays Ways where useful lines will be searched
      * @return List of useful lines
-     * @throws InvalidSelection
+     * @throws InvalidSelection if a node got more than 4 neighbours (self-crossing way)
      */
     private List<Line> getInvolvedLines(Node node, List<Way> refWays) throws InvalidSelection {
         List<Line> lines = new ArrayList<>();
         List<Node> neighbors = new ArrayList<>();
-        for(Way way: refWays) {
+        for (Way way: refWays) {
             List<Node> nodes = way.getNodes();
             neighbors.clear();
-            for(int i = 1; i < nodes.size()-1; i++)
-                if(nodes.get(i) == node) {
+            for (int i = 1; i < nodes.size()-1; i++) {
+                if (nodes.get(i) == node) {
                     neighbors.add(nodes.get(i-1));
                     neighbors.add(nodes.get(i+1));
                 }
-            if(neighbors.isEmpty())
+            }
+            if (neighbors.isEmpty())
                 continue;
-            else if(neighbors.size() == 2)
+            else if (neighbors.size() == 2)
                 // Non self crossing
                 lines.add(new Line(neighbors.get(0), neighbors.get(1)));
-            else if(neighbors.size() == 4) {
+            else if (neighbors.size() == 4) {
                 // Self crossing, have to make 2 lines with 4 neighbors
                 // see #9081 comment 6
                 EastNorth c = node.getEastNorth();
                 double[] angle = new double[4];
-                for(int i = 0; i < 4; i++) {
+                for (int i = 0; i < 4; i++) {
                     EastNorth p = neighbors.get(i).getEastNorth();
                     angle[i] = Math.atan2(p.north() - c.north(), p.east() - c.east());
                 }
                 double[] deltaAngle = new double[3];
-                for(int i = 0; i < 3; i++) {
+                for (int i = 0; i < 3; i++) {
                     deltaAngle[i] = angle[i+1] - angle[0];
-                    if(deltaAngle[i] < 0)
+                    if (deltaAngle[i] < 0)
                         deltaAngle[i] += 2*Math.PI;
                 }
                 int nb = 0;
-                if(deltaAngle[1] < deltaAngle[0]) nb++;
-                if(deltaAngle[2] < deltaAngle[0]) nb++;
-                if(nb == 1) {
+                if (deltaAngle[1] < deltaAngle[0]) nb++;
+                if (deltaAngle[2] < deltaAngle[0]) nb++;
+                if (nb == 1) {
                     // Align along [neighbors[0], neighbors[1]] and [neighbors[0], neighbors[2]]
                     lines.add(new Line(neighbors.get(0), neighbors.get(1)));
                     lines.add(new Line(neighbors.get(2), neighbors.get(3)));
@@ -318,7 +314,7 @@ public final class AlignInLineAction extends JosmAction {
                     lines.add(new Line(neighbors.get(1), neighbors.get(3)));
                 }
             } else
-                throw new InvalidSelection();
+                throw new InvalidSelection("cannot treat more than 4 neighbours, got "+neighbors.size());
         }
         return lines;
     }
@@ -328,12 +324,12 @@ public final class AlignInLineAction extends JosmAction {
      * @param node Node to be aligned
      * @param lines Lines to align node on
      * @return Command that perform action
-     * @throws InvalidSelection
+     * @throws InvalidSelection if more than 2 lines
      */
     private Command alignSingleNode(Node node, List<Line> lines) throws InvalidSelection {
-        if(lines.size() == 1)
+        if (lines.size() == 1)
             return lines.get(0).projectionCommand(node);
-        else if(lines.size() == 2)
+        else if (lines.size() == 2)
             return lines.get(0).intersectionCommand(node,  lines.get(1));
         throw new InvalidSelection();
     }
@@ -341,7 +337,7 @@ public final class AlignInLineAction extends JosmAction {
     /**
      * Class that represent a line
      */
-    private class Line {
+    private static class Line {
 
         /**
          * Line equation ax + by + c = 0
@@ -355,9 +351,9 @@ public final class AlignInLineAction extends JosmAction {
 
         /**
          * Init a line by 2 nodes.
-         * @param first On point of the line
+         * @param first One point of the line
          * @param last Other point of the line
-         * @throws InvalidSelection
+         * @throws InvalidSelection if nodes have same coordinates
          */
         public Line(Node first, Node last) throws InvalidSelection {
             xM = first.getEastNorth().getX();
@@ -368,8 +364,7 @@ public final class AlignInLineAction extends JosmAction {
             b = xM - xB;
             double norm = Math.sqrt(a*a + b*b);
             if (norm == 0)
-                // Nodes have same coordinates !
-                throw new InvalidSelection();
+                throw new InvalidSelection("Nodes have same coordinates!");
             a /= norm;
             b /= norm;
             c = -(a*xM + b*yM);
@@ -378,7 +373,7 @@ public final class AlignInLineAction extends JosmAction {
         /**
          * Init a line equation from a way.
          * @param way Use extremity of this way to compute line equation
-         * @throws InvalidSelection
+         * @throws InvalidSelection if nodes have same coordinates
          */
         public Line(Way way) throws InvalidSelection {
             this(way.firstNode(), way.lastNode());
@@ -399,11 +394,11 @@ public final class AlignInLineAction extends JosmAction {
          * @param n Node to move to the intersection
          * @param other Second line for intersection
          * @return The command that move the node
-         * @throws InvalidSelection
+         * @throws InvalidSelection if two parallels ways found
          */
         public Command intersectionCommand(Node n, Line other) throws InvalidSelection {
             double d = this.a * other.b - other.a * this.b;
-            if(Math.abs(d) < 10e-6)
+            if (Math.abs(d) < 10e-6)
                 // parallels lines
                 throw new InvalidSelection(tr("Two parallels ways found. Abort."));
             double x = (this.b * other.c - other.b * this.c) / d;
diff --git a/src/org/openstreetmap/josm/actions/AutoScaleAction.java b/src/org/openstreetmap/josm/actions/AutoScaleAction.java
index 1251393..2128505 100644
--- a/src/org/openstreetmap/josm/actions/AutoScaleAction.java
+++ b/src/org/openstreetmap/josm/actions/AutoScaleAction.java
@@ -102,6 +102,8 @@ public class AutoScaleAction extends JosmAction {
         int shortcut = -1;
 
         // TODO: convert this to switch/case and make sure the parsing still works
+        // CHECKSTYLE.OFF: LeftCurly
+        // CHECKSTYLE.OFF: RightCurly
         /* leave as single line for shortcut overview parsing! */
         if (mode.equals("data")) { shortcut = KeyEvent.VK_1; }
         else if (mode.equals("layer")) { shortcut = KeyEvent.VK_2; }
@@ -111,6 +113,8 @@ public class AutoScaleAction extends JosmAction {
         else if (mode.equals("problem")) { shortcut = KeyEvent.VK_6; }
         else if (mode.equals("previous")) { shortcut = KeyEvent.VK_8; }
         else if (mode.equals("next")) { shortcut = KeyEvent.VK_9; }
+        // CHECKSTYLE.ON: LeftCurly
+        // CHECKSTYLE.ON: RightCurly
 
         return shortcut;
     }
@@ -248,7 +252,7 @@ public class AutoScaleAction extends JosmAction {
             if (sel.isEmpty()) {
                 JOptionPane.showMessageDialog(
                         Main.parent,
-                        ("selection".equals(mode) ? tr("Nothing selected to zoom to.") : tr("No conflicts to zoom to")),
+                        "selection".equals(mode) ? tr("Nothing selected to zoom to.") : tr("No conflicts to zoom to"),
                         tr("Information"),
                         JOptionPane.INFORMATION_MESSAGE);
                 return null;
@@ -269,14 +273,14 @@ public class AutoScaleAction extends JosmAction {
                 lastZoomTime = -1;
             }
             DataSet dataset = Main.main.getCurrentDataSet();
-            if(dataset != null) {
+            if (dataset != null) {
                 List<DataSource> dataSources = new ArrayList<>(dataset.getDataSources());
                 int s = dataSources.size();
-                if(s > 0) {
-                    if(lastZoomTime == -1 || lastZoomArea == -1 || lastZoomArea > s) {
+                if (s > 0) {
+                    if (lastZoomTime == -1 || lastZoomArea == -1 || lastZoomArea > s) {
                         lastZoomArea = s-1;
                         v.visit(dataSources.get(lastZoomArea).bounds);
-                    } else if(lastZoomArea > 0) {
+                    } else if (lastZoomArea > 0) {
                         lastZoomArea -= 1;
                         v.visit(dataSources.get(lastZoomArea).bounds);
                     } else {
diff --git a/src/org/openstreetmap/josm/actions/CloseChangesetAction.java b/src/org/openstreetmap/josm/actions/CloseChangesetAction.java
index 52219c3..937f0e2 100644
--- a/src/org/openstreetmap/josm/actions/CloseChangesetAction.java
+++ b/src/org/openstreetmap/josm/actions/CloseChangesetAction.java
@@ -47,6 +47,7 @@ public class CloseChangesetAction extends JosmAction {
         setEnabled(!Main.isOffline(OnlineResource.OSM_API));
 
     }
+
     @Override
     public void actionPerformed(ActionEvent e) {
         Main.worker.submit(new DownloadOpenChangesetsTask());
@@ -75,7 +76,7 @@ public class CloseChangesetAction extends JosmAction {
         Main.worker.submit(closeChangesetTask);
     }
 
-    private class DownloadOpenChangesetsTask extends PleaseWaitRunnable {
+    private final class DownloadOpenChangesetsTask extends PleaseWaitRunnable {
 
         private boolean canceled;
         private OsmServerChangesetReader reader;
@@ -83,8 +84,8 @@ public class CloseChangesetAction extends JosmAction {
         private Exception lastException;
         private UserInfo userInfo;
 
-        public DownloadOpenChangesetsTask() {
-            super(tr("Downloading open changesets ...", false /* don't ignore exceptions */));
+        private DownloadOpenChangesetsTask() {
+            super(tr("Downloading open changesets ..."), false /* don't ignore exceptions */);
         }
 
         @Override
@@ -135,7 +136,7 @@ public class CloseChangesetAction extends JosmAction {
                         query,
                         getProgressMonitor().createSubTaskMonitor(1, false /* not internal */)
                 );
-            } catch(Exception e) {
+            } catch (Exception e) {
                 if (canceled)
                     return;
                 lastException = e;
diff --git a/src/org/openstreetmap/josm/actions/CombineWayAction.java b/src/org/openstreetmap/josm/actions/CombineWayAction.java
index caebcb8..385050f 100644
--- a/src/org/openstreetmap/josm/actions/CombineWayAction.java
+++ b/src/org/openstreetmap/josm/actions/CombineWayAction.java
@@ -95,9 +95,8 @@ public class CombineWayAction extends JosmAction {
     /**
      * Combine multiple ways into one.
      * @param ways the way to combine to one way
-     * @return null if ways cannot be combined. Otherwise returns the combined
-     *              ways and the commands to combine
-     * @throws UserCancelException
+     * @return null if ways cannot be combined. Otherwise returns the combined ways and the commands to combine
+     * @throws UserCancelException if the user cancelled a dialog.
      */
     public static Pair<Way, Command> combineWaysWorker(Collection<Way> ways) throws UserCancelException {
 
@@ -110,8 +109,7 @@ public class CombineWayAction extends JosmAction {
         // remove duplicates, preserving order
         ways = new LinkedHashSet<>(ways);
 
-        // try to build a new way which includes all the combined
-        // ways
+        // try to build a new way which includes all the combined ways
         //
         NodeGraph graph = NodeGraph.createNearlyUndirectedGraphFromNodeWays(ways);
         List<Node> path = graph.buildSpanningPath();
@@ -221,8 +219,7 @@ public class CombineWayAction extends JosmAction {
             return;
         final Way selectedWay = combineResult.a;
         Main.main.undoRedo.add(combineResult.b);
-        if(selectedWay != null)
-        {
+        if (selectedWay != null) {
             Runnable guiTask = new Runnable() {
                 @Override
                 public void run() {
@@ -246,10 +243,11 @@ public class CombineWayAction extends JosmAction {
     @Override
     protected void updateEnabledState(Collection<? extends OsmPrimitive> selection) {
         int numWays = 0;
-        for (OsmPrimitive osm : selection)
+        for (OsmPrimitive osm : selection) {
             if (osm instanceof Way) {
                 numWays++;
             }
+        }
         setEnabled(numWays >= 2);
     }
 
@@ -274,7 +272,7 @@ public class CombineWayAction extends JosmAction {
          * Constructs a new {@code NodePair}.
          * @param pair An existing {@code Pair} of nodes
          */
-        public NodePair(Pair<Node,Node> pair) {
+        public NodePair(Pair<Node, Node> pair) {
             this(pair.a, pair.b);
         }
 
@@ -319,17 +317,17 @@ public class CombineWayAction extends JosmAction {
         }
 
         public NodePair swap() {
-            return new NodePair(b,a);
+            return new NodePair(b, a);
         }
 
         @Override
         public String toString() {
             return new StringBuilder()
-            .append("[")
+            .append('[')
             .append(a.getId())
-            .append(",")
+            .append(',')
             .append(b.getId())
-            .append("]")
+            .append(']')
             .toString();
         }
 
@@ -377,7 +375,7 @@ public class CombineWayAction extends JosmAction {
     public static class NodeGraph {
         public static List<NodePair> buildNodePairs(Way way, boolean directed) {
             List<NodePair> pairs = new ArrayList<>();
-            for (Pair<Node,Node> pair: way.getNodePairs(false /* don't sort */)) {
+            for (Pair<Node, Node> pair: way.getNodePairs(false /* don't sort */)) {
                 pairs.add(new NodePair(pair));
                 if (!directed) {
                     pairs.add(new NodePair(pair).swap());
@@ -396,7 +394,7 @@ public class CombineWayAction extends JosmAction {
 
         public static List<NodePair> eliminateDuplicateNodePairs(List<NodePair> pairs) {
             List<NodePair> cleaned = new ArrayList<>();
-            for(NodePair p: pairs) {
+            for (NodePair p: pairs) {
                 if (!cleaned.contains(p) && !cleaned.contains(p.swap())) {
                     cleaned.add(p);
                 }
@@ -421,8 +419,8 @@ public class CombineWayAction extends JosmAction {
         }
 
         /**
-         * Create an undirected graph from the given ways.
-         * @param ways Ways to build the graph from
+         * Create an undirected graph from the given node pairs.
+         * @param pairs Node pairs to build the graph from
          * @return node graph structure
          */
         public static NodeGraph createUndirectedGraphFromNodeList(List<NodePair> pairs) {
@@ -453,7 +451,7 @@ public class CombineWayAction extends JosmAction {
             boolean dir = true;
             NodeGraph graph = new NodeGraph();
             for (Way w: ways) {
-                if(!w.isNew()) {
+                if (!w.isNew()) {
                     /* let the first non-new way give the direction (see #5880) */
                     graph.add(buildNodePairs(w, dir));
                     dir = false;
@@ -511,7 +509,7 @@ public class CombineWayAction extends JosmAction {
             predecessors = new LinkedHashMap<>();
 
             for (NodePair pair: edges) {
-                if (!undirectedEdges.contains(pair) && ! undirectedEdges.contains(pair.swap())) {
+                if (!undirectedEdges.contains(pair) && !undirectedEdges.contains(pair.swap())) {
                     undirectedEdges.add(pair);
                 }
                 rememberSuccessor(pair);
@@ -542,7 +540,7 @@ public class CombineWayAction extends JosmAction {
         protected Node getStartNode() {
             Set<Node> nodes = getNodes();
             for (Node n: nodes) {
-                if (successors.get(n) != null && successors.get(n).size() ==1)
+                if (successors.get(n) != null && successors.get(n).size() == 1)
                     return n;
             }
             return null;
@@ -614,10 +612,10 @@ public class CombineWayAction extends JosmAction {
             Stack<NodePair> path = new Stack<>();
             Stack<NodePair> nextPairs  = new Stack<>();
             nextPairs.addAll(getOutboundPairs(startNode));
-            while(!nextPairs.isEmpty()) {
-                NodePair cur= nextPairs.pop();
-                if (! path.contains(cur) && ! path.contains(cur.swap())) {
-                    while(!path.isEmpty() && !path.peek().isPredecessorOf(cur)) {
+            while (!nextPairs.isEmpty()) {
+                NodePair cur = nextPairs.pop();
+                if (!path.contains(cur) && !path.contains(cur.swap())) {
+                    while (!path.isEmpty() && !path.peek().isPredecessorOf(cur)) {
                         path.pop();
                     }
                     path.push(cur);
@@ -641,8 +639,7 @@ public class CombineWayAction extends JosmAction {
             // two directed edges in opposite direction) to the graph. A
             // graph built up from way segments is likely to include such
             // nodes, unless all ways are closed.
-            // In the worst case this loops over all nodes which is
-            // very slow for large ways.
+            // In the worst case this loops over all nodes which is very slow for large ways.
             //
             Set<Node> nodes = getTerminalNodes();
             nodes = nodes.isEmpty() ? getNodes() : nodes;
diff --git a/src/org/openstreetmap/josm/actions/CopyAction.java b/src/org/openstreetmap/josm/actions/CopyAction.java
index 94f3cdc..344dc4a 100644
--- a/src/org/openstreetmap/josm/actions/CopyAction.java
+++ b/src/org/openstreetmap/josm/actions/CopyAction.java
@@ -42,7 +42,7 @@ public final class CopyAction extends JosmAction {
 
     @Override
     public void actionPerformed(ActionEvent e) {
-        if(isEmptySelection()) return;
+        if (isEmptySelection()) return;
         Collection<OsmPrimitive> selection = getCurrentDataSet().getSelected();
 
         copy(getEditLayer(), selection);
@@ -66,8 +66,7 @@ public final class CopyAction extends JosmAction {
     public static String getCopyString(Collection<? extends OsmPrimitive> primitives) {
         StringBuilder idsBuilder = new StringBuilder();
         for (OsmPrimitive p : primitives) {
-            idsBuilder.append(OsmPrimitiveType.from(p).getAPIName()).append(" ");
-            idsBuilder.append(p.getId()).append(",");
+            idsBuilder.append(OsmPrimitiveType.from(p).getAPIName()).append(' ').append(p.getId()).append(',');
         }
         return idsBuilder.substring(0, idsBuilder.length() - 1);
     }
diff --git a/src/org/openstreetmap/josm/actions/CopyCoordinatesAction.java b/src/org/openstreetmap/josm/actions/CopyCoordinatesAction.java
index 5160ea2..ede14dc 100644
--- a/src/org/openstreetmap/josm/actions/CopyCoordinatesAction.java
+++ b/src/org/openstreetmap/josm/actions/CopyCoordinatesAction.java
@@ -31,7 +31,7 @@ public class CopyCoordinatesAction extends JosmAction {
             s.append(n.getCoor().lat());
             s.append(", ");
             s.append(n.getCoor().lon());
-            s.append("\n");
+            s.append('\n');
         }
         Utils.copyToClipboard(s.toString().trim());
     }
diff --git a/src/org/openstreetmap/josm/actions/CreateCircleAction.java b/src/org/openstreetmap/josm/actions/CreateCircleAction.java
index 80f9d15..3e1fa3e 100644
--- a/src/org/openstreetmap/josm/actions/CreateCircleAction.java
+++ b/src/org/openstreetmap/josm/actions/CreateCircleAction.java
@@ -44,11 +44,11 @@ import org.openstreetmap.josm.tools.Shortcut;
  *     to achieve the desired number of nodes (`createcircle.nodecount`).
  * BTW: Someone might want to implement projection corrections for this...
  *
- * @since 996
- *
  * @author Henry Loenwind
  * @author Sebastian Masch
  * @author Alain Delplanque
+ *
+ * @since 996
  */
 public final class CreateCircleAction extends JosmAction {
 
@@ -72,23 +72,24 @@ public final class CreateCircleAction extends JosmAction {
         int[] count = new int[angles.length];
         double[] width = new double[angles.length];
         double[] remainder = new double[angles.length];
-        for(int i = 0; i < angles.length; i++) {
+        for (int i = 0; i < angles.length; i++) {
             width[i] = angles[(i+1) % angles.length].a - angles[i].a;
-            if(width[i] < 0)
+            if (width[i] < 0)
                 width[i] += 2*Math.PI;
         }
         int assign = 0;
-        for(int i = 0; i < angles.length; i++) {
+        for (int i = 0; i < angles.length; i++) {
             double part = width[i] / 2.0 / Math.PI * nodesCount;
             count[i] = (int) Math.floor(part);
             remainder[i] = part - count[i];
             assign += count[i];
         }
-        while(assign < nodesCount) {
+        while (assign < nodesCount) {
             int imax = 0;
-            for(int i = 1; i < angles.length; i++)
-                if(remainder[i] > remainder[imax])
+            for (int i = 1; i < angles.length; i++) {
+                if (remainder[i] > remainder[imax])
                     imax = i;
+            }
             count[imax]++;
             remainder[imax] = 0;
             assign++;
@@ -115,6 +116,7 @@ public final class CreateCircleAction extends JosmAction {
      */
     private static class PolarNodeComparator implements Comparator<PolarNode>, Serializable {
         private static final long serialVersionUID = 1L;
+
         @Override
         public int compare(PolarNode pc1, PolarNode pc2) {
             return Double.compare(pc1.a, pc2.a);
@@ -144,7 +146,7 @@ public final class CreateCircleAction extends JosmAction {
         if (nodes.isEmpty() && (ways.size() == 1)) {
             existingWay = ways.get(0);
             for (Node n : existingWay.getNodes()) {
-                if(!nodes.contains(n)) {
+                if (!nodes.contains(n)) {
                     nodes.add(n);
                 }
             }
@@ -187,12 +189,12 @@ public final class CreateCircleAction extends JosmAction {
 
         // calculate the radius (r)
         EastNorth n1 = nodes.get(0).getEastNorth();
-        double r = Math.sqrt(Math.pow(center.east()-n1.east(),2) +
-                Math.pow(center.north()-n1.north(),2));
+        double r = Math.sqrt(Math.pow(center.east()-n1.east(), 2) +
+                Math.pow(center.north()-n1.north(), 2));
 
         // Order nodes by angle
         PolarNode[] angles = new PolarNode[nodes.size()];
-        for(int i = 0; i < nodes.size(); i++) {
+        for (int i = 0; i < nodes.size(); i++) {
             angles[i] = new PolarNode(center, nodes.get(i));
         }
         Arrays.sort(angles, new PolarNodeComparator());
@@ -201,16 +203,16 @@ public final class CreateCircleAction extends JosmAction {
 
         // build a way for the circle
         List<Node> nodesToAdd = new ArrayList<>();
-        for(int i = 0; i < nodes.size(); i++) {
+        for (int i = 0; i < nodes.size(); i++) {
             nodesToAdd.add(angles[i].node);
             double delta = angles[(i+1) % nodes.size()].a - angles[i].a;
-            if(delta < 0)
+            if (delta < 0)
                 delta += 2*Math.PI;
-            for(int j = 0; j < count[i]; j++) {
+            for (int j = 0; j < count[i]; j++) {
                 double alpha = angles[i].a + (j+1)*delta/(count[i]+1);
                 double x = center.east() + r*Math.cos(alpha);
                 double y = center.north() + r*Math.sin(alpha);
-                LatLon ll = Main.getProjection().eastNorth2latlon(new EastNorth(x,y));
+                LatLon ll = Main.getProjection().eastNorth2latlon(new EastNorth(x, y));
                 if (ll.isOutSideWorld()) {
                     notifyNodesNotOnCircle();
                     return;
diff --git a/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java b/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java
index 600d485..659a162 100644
--- a/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java
+++ b/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java
@@ -82,7 +82,7 @@ public class CreateMultipolygonAction extends JosmAction {
         return update ? tr("Update multipolygon") : tr("Create multipolygon");
     }
 
-    private static class CreateUpdateMultipolygonTask implements Runnable {
+    private static final class CreateUpdateMultipolygonTask implements Runnable {
         private final Collection<Way> selectedWays;
         private final Relation multipolygonRelation;
 
@@ -189,6 +189,9 @@ public class CreateMultipolygonAction extends JosmAction {
 
     /**
      * Returns a {@link Pair} of the old multipolygon {@link Relation} (or null) and the newly created/modified multipolygon {@link Relation}.
+     * @param selectedWays selected ways
+     * @param selectedMultipolygonRelation selected multipolygon relation
+     * @return pair of old and new multipolygon relation
      */
     public static Pair<Relation, Relation> updateMultipolygonRelation(Collection<Way> selectedWays, Relation selectedMultipolygonRelation) {
 
@@ -200,12 +203,15 @@ public class CreateMultipolygonAction extends JosmAction {
         if (polygon == null) {
             return null; //could not make multipolygon.
         } else {
-            return Pair.create(selectedMultipolygonRelation, createRelation(polygon, new Relation(selectedMultipolygonRelation)));
+            return Pair.create(selectedMultipolygonRelation, createRelation(polygon, selectedMultipolygonRelation));
         }
     }
 
     /**
      * Returns a {@link Pair} null and the newly created/modified multipolygon {@link Relation}.
+     * @param selectedWays selected ways
+     * @param showNotif if {@code true}, shows a notification if an error occurs
+     * @return pair of null and new multipolygon relation
      */
     public static Pair<Relation, Relation> createMultipolygonRelation(Collection<Way> selectedWays, boolean showNotif) {
 
@@ -213,14 +219,18 @@ public class CreateMultipolygonAction extends JosmAction {
         if (polygon == null) {
             return null; //could not make multipolygon.
         } else {
-            return Pair.create(null, createRelation(polygon, new Relation()));
+            return Pair.create(null, createRelation(polygon, null));
         }
     }
 
     /**
      * Returns a {@link Pair} of a multipolygon creating/modifying {@link Command} as well as the multipolygon {@link Relation}.
+     * @param selectedWays selected ways
+     * @param selectedMultipolygonRelation selected multipolygon relation
+     * @return pair of command and multipolygon relation
      */
-    public static Pair<SequenceCommand, Relation> createMultipolygonCommand(Collection<Way> selectedWays, Relation selectedMultipolygonRelation) {
+    public static Pair<SequenceCommand, Relation> createMultipolygonCommand(Collection<Way> selectedWays,
+            Relation selectedMultipolygonRelation) {
 
         final Pair<Relation, Relation> rr = selectedMultipolygonRelation == null
                 ? createMultipolygonRelation(selectedWays, true)
@@ -260,7 +270,9 @@ public class CreateMultipolygonAction extends JosmAction {
       */
     @Override
     protected void updateEnabledState(Collection<? extends OsmPrimitive> selection) {
-        if (update) {
+        if (getCurrentDataSet() == null) {
+            setEnabled(false);
+        } else if (update) {
             setEnabled(getSelectedMultipolygonRelation() != null);
         } else {
             setEnabled(!getCurrentDataSet().getSelectedWays().isEmpty());
@@ -270,6 +282,7 @@ public class CreateMultipolygonAction extends JosmAction {
     /**
      * This method analyzes ways and creates multipolygon.
      * @param selectedWays list of selected ways
+     * @param showNotif if {@code true}, shows a notification if an error occurs
      * @return <code>null</code>, if there was a problem with the ways.
      */
     private static MultipolygonBuilder analyzeWays(Collection<Way> selectedWays, boolean showNotif) {
@@ -297,10 +310,12 @@ public class CreateMultipolygonAction extends JosmAction {
     /**
      * Builds a relation from polygon ways.
      * @param pol data storage class containing polygon information
+     * @param clone relation to clone, can be null
      * @return multipolygon relation
      */
-    private static Relation createRelation(MultipolygonBuilder pol, final Relation rel) {
+    private static Relation createRelation(MultipolygonBuilder pol, Relation clone) {
         // Create new relation
+        Relation rel = clone != null ? new Relation(clone) : new Relation();
         rel.put("type", "multipolygon");
         // Add ways to it
         for (JoinedPolygon jway:pol.outerWays) {
@@ -328,7 +343,7 @@ public class CreateMultipolygonAction extends JosmAction {
         }
     }
 
-    public static final List<String> DEFAULT_LINEAR_TAGS = Arrays.asList("barrier", "fence_type", "source");
+    private static final List<String> DEFAULT_LINEAR_TAGS = Arrays.asList("barrier", "fence_type", "source");
 
     /**
      * This method removes tags/value pairs from inner and outer ways and put them on relation if necessary
@@ -344,13 +359,13 @@ public class CreateMultipolygonAction extends JosmAction {
 
         Set<String> conflictingKeys = new TreeSet<>();
 
-        for( RelationMember m : relation.getMembers() ) {
+        for (RelationMember m : relation.getMembers()) {
 
-            if( m.hasRole() && "inner".equals(m.getRole()) && m.isWay() && m.getWay().hasKeys() ) {
+            if (m.hasRole() && "inner".equals(m.getRole()) && m.isWay() && m.getWay().hasKeys()) {
                 innerWays.add(m.getWay());
             }
 
-            if( m.hasRole() && "outer".equals(m.getRole()) && m.isWay() && m.getWay().hasKeys() ) {
+            if (m.hasRole() && "outer".equals(m.getRole()) && m.isWay() && m.getWay().hasKeys()) {
                 Way way = m.getWay();
                 outerWays.add(way);
 
@@ -365,18 +380,25 @@ public class CreateMultipolygonAction extends JosmAction {
         }
 
         // filter out empty key conflicts - we need second iteration
-        if (!Main.pref.getBoolean("multipoly.alltags", false))
-            for (RelationMember m : relation.getMembers())
-                if (m.hasRole() && "outer".equals(m.getRole()) && m.isWay())
-                    for (String key : values.keySet())
-                        if (!m.getWay().hasKey(key) && !relation.hasKey(key))
+        if (!Main.pref.getBoolean("multipoly.alltags", false)) {
+            for (RelationMember m : relation.getMembers()) {
+                if (m.hasRole() && "outer".equals(m.getRole()) && m.isWay()) {
+                    for (String key : values.keySet()) {
+                        if (!m.getWay().hasKey(key) && !relation.hasKey(key)) {
                             conflictingKeys.add(key);
+                        }
+                    }
+                }
+            }
+        }
 
-        for (String key : conflictingKeys)
+        for (String key : conflictingKeys) {
             values.remove(key);
+        }
 
-        for (String linearTag : Main.pref.getCollection("multipoly.lineartagstokeep", DEFAULT_LINEAR_TAGS))
+        for (String linearTag : Main.pref.getCollection("multipoly.lineartagstokeep", DEFAULT_LINEAR_TAGS)) {
             values.remove(linearTag);
+        }
 
         if ("coastline".equals(values.get("natural")))
             values.remove("natural");
@@ -399,8 +421,8 @@ public class CreateMultipolygonAction extends JosmAction {
 
             if (moveTags) {
                 // remove duplicated tags from outer ways
-                for( Way way : outerWays ) {
-                    if( way.hasKey(key) ) {
+                for (Way way : outerWays) {
+                    if (way.hasKey(key)) {
                         affectedWays.add(way);
                     }
                 }
@@ -418,7 +440,7 @@ public class CreateMultipolygonAction extends JosmAction {
             Relation r2 = new Relation(relation);
             for (Entry<String, String> entry : values.entrySet()) {
                 String key = entry.getKey();
-                if (!r2.hasKey(key) && !"area".equals(key) ) {
+                if (!r2.hasKey(key) && !"area".equals(key)) {
                     if (relation.isNew())
                         relation.put(key, entry.getValue());
                     else
diff --git a/src/org/openstreetmap/josm/actions/DialogsToggleAction.java b/src/org/openstreetmap/josm/actions/DialogsToggleAction.java
index 484d409..5eaa1eb 100644
--- a/src/org/openstreetmap/josm/actions/DialogsToggleAction.java
+++ b/src/org/openstreetmap/josm/actions/DialogsToggleAction.java
@@ -25,7 +25,7 @@ public class DialogsToggleAction extends ToggleAction {
         super(tr("Toggle dialogs panel"),
               (ImageProvider) null, /* no icon */
               tr("Toggle dialogs panel, maximize mapview"),
-              Shortcut.registerShortcut("menu:view:dialogspanel", tr("Toggle dialogs panel"),KeyEvent.VK_TAB, Shortcut.DIRECT),
+              Shortcut.registerShortcut("menu:view:dialogspanel", tr("Toggle dialogs panel"), KeyEvent.VK_TAB, Shortcut.DIRECT),
               true, "dialogspanel", /* register in toolbar */
               false
         );
diff --git a/src/org/openstreetmap/josm/actions/DiskAccessAction.java b/src/org/openstreetmap/josm/actions/DiskAccessAction.java
index cbd4777..c09fb2b 100644
--- a/src/org/openstreetmap/josm/actions/DiskAccessAction.java
+++ b/src/org/openstreetmap/josm/actions/DiskAccessAction.java
@@ -41,7 +41,8 @@ public abstract class DiskAccessAction extends JosmAction {
      * @param installAdapters False, if you don't want to install layer changed and selection changed adapters
      * @since 5438
      */
-    public DiskAccessAction(String name, String iconName, String tooltip, Shortcut shortcut, boolean register, String toolbarId, boolean installAdapters) {
+    public DiskAccessAction(String name, String iconName, String tooltip, Shortcut shortcut, boolean register,
+            String toolbarId, boolean installAdapters) {
         super(name, iconName, tooltip, shortcut, register, toolbarId, installAdapters);
     }
 
@@ -83,12 +84,15 @@ public abstract class DiskAccessAction extends JosmAction {
      * @param allTypes If true, all the files types known by JOSM will be proposed in the "file type" combobox.
      *                 If false, only the file filters that include {@code extension} will be proposed
      * @param lastDirProperty The name of the property used to setup the AbstractFileChooser initial directory.
-     *        This property will then be updated to the new "last directory" chosen by the user. If null, the default property "lastDirectory" will be used.
+     *        This property will then be updated to the new "last directory" chosen by the user.
+     *        If null, the default property "lastDirectory" will be used.
      * @return The {@code AbstractFileChooser}.
      * @since 5438
      */
-    public static AbstractFileChooser createAndOpenFileChooser(boolean open, boolean multiple, String title, String extension, int selectionMode, boolean allTypes, String lastDirProperty) {
-        return new FileChooserManager(open, lastDirProperty).createFileChooser(multiple, title, extension, allTypes, selectionMode).openFileChooser();
+    public static AbstractFileChooser createAndOpenFileChooser(boolean open, boolean multiple, String title, String extension,
+            int selectionMode, boolean allTypes, String lastDirProperty) {
+        return new FileChooserManager(open, lastDirProperty)
+            .createFileChooser(multiple, title, extension, allTypes, selectionMode).openFileChooser();
     }
 
     /**
@@ -101,11 +105,13 @@ public abstract class DiskAccessAction extends JosmAction {
      *                      <li>just select files ({@code JFileChooser.FILES_ONLY})</li>
      *                      <li>just select directories ({@code JFileChooser.DIRECTORIES_ONLY})</li>
      *                      <li>select both files and directories ({@code JFileChooser.FILES_AND_DIRECTORIES})</li></ul>
-     * @param lastDirProperty The name of the property used to setup the AbstractFileChooser initial directory. This property will then be updated to the new "last directory" chosen by the user
+     * @param lastDirProperty The name of the property used to setup the AbstractFileChooser initial directory.
+     * This property will then be updated to the new "last directory" chosen by the user
      * @return The {@code AbstractFileChooser}.
      * @since 5438
      */
-    public static AbstractFileChooser createAndOpenFileChooser(boolean open, boolean multiple, String title, FileFilter filter, int selectionMode, String lastDirProperty) {
+    public static AbstractFileChooser createAndOpenFileChooser(boolean open, boolean multiple, String title, FileFilter filter,
+            int selectionMode, String lastDirProperty) {
         return new FileChooserManager(open, lastDirProperty).createFileChooser(multiple, title, filter, selectionMode).openFileChooser();
     }
 
@@ -120,12 +126,14 @@ public abstract class DiskAccessAction extends JosmAction {
      *                      <li>just select files ({@code JFileChooser.FILES_ONLY})</li>
      *                      <li>just select directories ({@code JFileChooser.DIRECTORIES_ONLY})</li>
      *                      <li>select both files and directories ({@code JFileChooser.FILES_AND_DIRECTORIES})</li></ul>
-     * @param lastDirProperty The name of the property used to setup the JFileChooser initial directory. This property will then be updated to the new "last directory" chosen by the user
+     * @param lastDirProperty The name of the property used to setup the JFileChooser initial directory.
+     * This property will then be updated to the new "last directory" chosen by the user
      * @return The {@code AbstractFileChooser}.
      * @since 5438
      */
     public static AbstractFileChooser createAndOpenFileChooser(boolean open, boolean multiple, String title,
             Collection<? extends FileFilter> filters, FileFilter defaultFilter, int selectionMode, String lastDirProperty) {
-        return new FileChooserManager(open, lastDirProperty).createFileChooser(multiple, title, filters, defaultFilter, selectionMode).openFileChooser();
+        return new FileChooserManager(open, lastDirProperty).createFileChooser(multiple, title, filters, defaultFilter, selectionMode)
+                .openFileChooser();
     }
 }
diff --git a/src/org/openstreetmap/josm/actions/DistributeAction.java b/src/org/openstreetmap/josm/actions/DistributeAction.java
index 9afc5fb..f5831cf 100644
--- a/src/org/openstreetmap/josm/actions/DistributeAction.java
+++ b/src/org/openstreetmap/josm/actions/DistributeAction.java
@@ -2,6 +2,7 @@
 package org.openstreetmap.josm.actions;
 
 import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
+import static org.openstreetmap.josm.tools.I18n.marktr;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.awt.event.ActionEvent;
@@ -32,7 +33,7 @@ import org.openstreetmap.josm.tools.Shortcut;
  */
 public final class DistributeAction extends JosmAction {
 
-    private static final String ACTION_SHORT_NAME = "Distribute Nodes";
+    private static final String ACTION_SHORT_NAME = marktr("Distribute Nodes");
 
     /**
      * Constructs a new {@code DistributeAction}.
@@ -64,10 +65,10 @@ public final class DistributeAction extends JosmAction {
         Collection<OsmPrimitive> selected = getCurrentDataSet().getSelected();
         Collection<Way> ways = new LinkedList<>();
         Collection<Node> nodes = new HashSet<>();
-        for(OsmPrimitive osm : selected) {
-            if(osm instanceof Node) {
+        for (OsmPrimitive osm : selected) {
+            if (osm instanceof Node) {
                 nodes.add((Node) osm);
-            } else if(osm instanceof Way) {
+            } else if (osm instanceof Way) {
                 ways.add((Way) osm);
             }
         }
@@ -80,9 +81,9 @@ public final class DistributeAction extends JosmAction {
 
         // Switch between algorithms
         Collection<Command> cmds;
-        if(checkDistributeWay(ways, nodes)) {
+        if (checkDistributeWay(ways, nodes)) {
             cmds = distributeWay(ways, nodes);
-        } else if(checkDistributeNodes(ways, nodes)) {
+        } else if (checkDistributeNodes(ways, nodes)) {
             cmds = distributeNodes(nodes);
         } else {
             new Notification(
@@ -95,7 +96,7 @@ public final class DistributeAction extends JosmAction {
             return;
         }
 
-        if(cmds.isEmpty()) {
+        if (cmds.isEmpty()) {
             return;
         }
 
@@ -110,16 +111,16 @@ public final class DistributeAction extends JosmAction {
      * @param nodes Selected nodes
      * @return true in this case
      */
-    private Boolean checkDistributeWay(Collection<Way> ways, Collection<Node> nodes) {
-        if(ways.size() == 1 && nodes.size() <= 2) {
+    private boolean checkDistributeWay(Collection<Way> ways, Collection<Node> nodes) {
+        if (ways.size() == 1 && nodes.size() <= 2) {
             Way w = ways.iterator().next();
             Set<Node> unduplicated = new HashSet<>(w.getNodes());
-            if(unduplicated.size() != w.getNodesCount()) {
+            if (unduplicated.size() != w.getNodesCount()) {
                 // No self crossing way
                 return false;
             }
-            for(Node node: nodes) {
-                if(!w.containsNode(node)) {
+            for (Node node: nodes) {
+                if (!w.containsNode(node)) {
                     return false;
                 }
             }
@@ -140,14 +141,14 @@ public final class DistributeAction extends JosmAction {
         Way w = ways.iterator().next();
         Collection<Command> cmds = new LinkedList<>();
 
-        if(w.getNodesCount() == nodes.size() || w.getNodesCount() <= 2) {
+        if (w.getNodesCount() == nodes.size() || w.getNodesCount() <= 2) {
             // Nothing to do
             return cmds;
         }
 
         double xa, ya; // Start point
         double dx, dy; // Segment increment
-        if(nodes.isEmpty()) {
+        if (nodes.isEmpty()) {
             Node na = w.firstNode();
             nodes.add(na);
             Node nb = w.lastNode();
@@ -156,7 +157,7 @@ public final class DistributeAction extends JosmAction {
             ya = na.getEastNorth().north();
             dx = (nb.getEastNorth().east() - xa) / (w.getNodesCount() - 1);
             dy = (nb.getEastNorth().north() - ya) / (w.getNodesCount() - 1);
-        } else if(nodes.size() == 1) {
+        } else if (nodes.size() == 1) {
             Node n = nodes.iterator().next();
             int nIdx = w.getNodes().indexOf(n);
             Node na = w.firstNode();
@@ -180,7 +181,7 @@ public final class DistributeAction extends JosmAction {
             ya = na.getEastNorth().north() - dy * naIdx;
         }
 
-        for(int i = 0; i < w.getNodesCount(); i++) {
+        for (int i = 0; i < w.getNodesCount(); i++) {
             Node n = w.getNode(i);
             if (!n.isLatLonKnown() || nodes.contains(n)) {
                 continue;
@@ -208,9 +209,10 @@ public final class DistributeAction extends JosmAction {
      * The general algorithm here is to find the two selected nodes
      * that are furthest apart, and then to distribute all other selected
      * nodes along the straight line between these nodes.
+     * @param nodes nodes to distribute
      * @return Commands to execute to perform action
      */
-    private Collection<Command> distributeNodes(Collection<Node> nodes) {
+    private static Collection<Command> distributeNodes(Collection<Node> nodes) {
         // Find from the selected nodes two that are the furthest apart.
         // Let's call them A and B.
         double distance = 0;
diff --git a/src/org/openstreetmap/josm/actions/DownloadAction.java b/src/org/openstreetmap/josm/actions/DownloadAction.java
index 652effe..37867d1 100644
--- a/src/org/openstreetmap/josm/actions/DownloadAction.java
+++ b/src/org/openstreetmap/josm/actions/DownloadAction.java
@@ -32,7 +32,9 @@ public class DownloadAction extends JosmAction {
      */
     public DownloadAction() {
         super(tr("Download from OSM..."), "download", tr("Download map data from the OSM server."),
+                // CHECKSTYLE.OFF: LineLength
                 Shortcut.registerShortcut("file:download", tr("File: {0}", tr("Download from OSM...")), KeyEvent.VK_DOWN, Shortcut.CTRL_SHIFT), true);
+                // CHECKSTYLE.ON: LineLength
         putValue("help", ht("/Action/Download"));
     }
 
@@ -41,7 +43,7 @@ public class DownloadAction extends JosmAction {
         DownloadDialog dialog = DownloadDialog.getInstance();
         dialog.restoreSettings();
         dialog.setVisible(true);
-        if (! dialog.isCanceled()) {
+        if (!dialog.isCanceled()) {
             dialog.rememberSettings();
             Bounds area = dialog.getSelectedDownloadArea();
             if (dialog.isDownloadOsmData()) {
@@ -51,7 +53,7 @@ public class DownloadAction extends JosmAction {
             }
             if (dialog.isDownloadGpxData()) {
                 DownloadGpsTask task = new DownloadGpsTask();
-                Future<?> future = task.download(dialog.isNewLayerRequired(),area, null);
+                Future<?> future = task.download(dialog.isNewLayerRequired(), area, null);
                 Main.worker.submit(new PostDownloadHandler(task, future));
             }
             if (dialog.isDownloadNotes()) {
diff --git a/src/org/openstreetmap/josm/actions/DownloadAlongAction.java b/src/org/openstreetmap/josm/actions/DownloadAlongAction.java
index 70bff88..1cbb188 100644
--- a/src/org/openstreetmap/josm/actions/DownloadAlongAction.java
+++ b/src/org/openstreetmap/josm/actions/DownloadAlongAction.java
@@ -43,7 +43,7 @@ public abstract class DownloadAlongAction extends JosmAction {
     public DownloadAlongAction(String name, String iconName, String tooltip, Shortcut shortcut, boolean registerInToolbar) {
         super(name, iconName, tooltip, shortcut, registerInToolbar);
     }
-    
+
     protected static void addToDownload(Area a, Rectangle2D r, Collection<Rectangle2D> results, double maxArea) {
         Area tmp = new Area(r);
         // intersect with sought-after area
@@ -73,7 +73,7 @@ public abstract class DownloadAlongAction extends JosmAction {
             results.add(bounds);
         }
     }
-    
+
     /**
      * Area "a" contains the hull that we would like to download data for. however we
      * can only download rectangles, so the following is an attempt at finding a number of
@@ -91,15 +91,19 @@ public abstract class DownloadAlongAction extends JosmAction {
      * This functions calculates the rectangles, asks the user to continue and downloads
      * the areas if applicable.
      */
-    protected static void confirmAndDownloadAreas(Area a, double maxArea, boolean osmDownload, boolean gpxDownload, String title, ProgressMonitor progressMonitor) {
+    protected static void confirmAndDownloadAreas(Area a, double maxArea, boolean osmDownload, boolean gpxDownload, String title,
+            ProgressMonitor progressMonitor) {
         List<Rectangle2D> toDownload = new ArrayList<>();
         addToDownload(a, a.getBounds(), toDownload, maxArea);
         if (toDownload.isEmpty()) {
             return;
         }
         JPanel msg = new JPanel(new GridBagLayout());
-        msg.add(new JLabel(tr("<html>This action will require {0} individual<br>" + "download requests. Do you wish<br>to continue?</html>", toDownload.size())), GBC.eol());
-        if (JOptionPane.OK_OPTION != JOptionPane.showConfirmDialog(Main.parent, msg, title, JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE)) {
+        msg.add(new JLabel(
+                tr("<html>This action will require {0} individual<br>" + "download requests. Do you wish<br>to continue?</html>",
+                        toDownload.size())), GBC.eol());
+        if (JOptionPane.OK_OPTION != JOptionPane.showConfirmDialog(Main.parent, msg, title,
+                JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE)) {
             return;
         }
         final PleaseWaitProgressMonitor monitor = new PleaseWaitProgressMonitor(tr("Download data"));
diff --git a/src/org/openstreetmap/josm/actions/DownloadNotesInViewAction.java b/src/org/openstreetmap/josm/actions/DownloadNotesInViewAction.java
index 324f8d9..4803523 100644
--- a/src/org/openstreetmap/josm/actions/DownloadNotesInViewAction.java
+++ b/src/org/openstreetmap/josm/actions/DownloadNotesInViewAction.java
@@ -17,10 +17,11 @@ import org.openstreetmap.josm.io.OnlineResource;
  *
  * No interaction is required.
  */
-public class DownloadNotesInViewAction extends JosmAction {
+public final class DownloadNotesInViewAction extends JosmAction {
 
     private DownloadNotesInViewAction(String iconName) {
-        super(tr("Download notes in current view"), iconName, tr("Download notes in current view"), null, false);
+        super(tr("Download notes in current view"), iconName, tr("Download notes in current view"), null, false,
+                "dialogs/notes/download_in_view", true);
     }
 
     public static DownloadNotesInViewAction newActionWithNoteIcon() {
diff --git a/src/org/openstreetmap/josm/actions/DownloadPrimitiveAction.java b/src/org/openstreetmap/josm/actions/DownloadPrimitiveAction.java
index 832d5fa..506a5d8 100644
--- a/src/org/openstreetmap/josm/actions/DownloadPrimitiveAction.java
+++ b/src/org/openstreetmap/josm/actions/DownloadPrimitiveAction.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.actions;
 
 import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
@@ -27,7 +27,8 @@ public class DownloadPrimitiveAction extends JosmAction {
      */
     public DownloadPrimitiveAction() {
         super(tr("Download object..."), "downloadprimitive", tr("Download OSM object by ID."),
-                Shortcut.registerShortcut("system:download_primitive", tr("File: {0}", tr("Download object...")), KeyEvent.VK_O, Shortcut.CTRL_SHIFT), true);
+                Shortcut.registerShortcut("system:download_primitive", tr("File: {0}", tr("Download object...")),
+                        KeyEvent.VK_O, Shortcut.CTRL_SHIFT), true);
         putValue("help", ht("/Action/DownloadObject"));
     }
 
@@ -43,7 +44,8 @@ public class DownloadPrimitiveAction extends JosmAction {
     /**
      * @param newLayer if the data should be downloaded into a new layer
      * @param ids List of primitive id to download
-     * @param downloadReferrers if the referrers of the object should be downloaded as well, i.e., parent relations, and for nodes, additionally, parent ways
+     * @param downloadReferrers if the referrers of the object should be downloaded as well, i.e., parent relations, and for nodes,
+     * additionally, parent ways
      * @param full if the members of a relation should be downloaded as well
      */
     public static void processItems(boolean newLayer, final List<PrimitiveId> ids, boolean downloadReferrers, boolean full) {
@@ -54,7 +56,7 @@ public class DownloadPrimitiveAction extends JosmAction {
             @Override
             public void run() {
                 final List<PrimitiveId> downloaded = task.getDownloadedId();
-                if(downloaded != null) {
+                if (downloaded != null) {
                     GuiHelper.runInEDT(new Runnable() {
                         @Override
                         public void run() {
diff --git a/src/org/openstreetmap/josm/actions/DownloadReferrersAction.java b/src/org/openstreetmap/josm/actions/DownloadReferrersAction.java
index cd7efb4..f456da4 100644
--- a/src/org/openstreetmap/josm/actions/DownloadReferrersAction.java
+++ b/src/org/openstreetmap/josm/actions/DownloadReferrersAction.java
@@ -89,7 +89,7 @@ public class DownloadReferrersAction extends JosmAction {
         if (layer == null)
             return;
         Collection<OsmPrimitive> primitives = layer.data.getSelected();
-        downloadReferrers(layer,primitives);
+        downloadReferrers(layer, primitives);
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/actions/ExtensionFileFilter.java b/src/org/openstreetmap/josm/actions/ExtensionFileFilter.java
index 3e811ec..df273c0 100644
--- a/src/org/openstreetmap/josm/actions/ExtensionFileFilter.java
+++ b/src/org/openstreetmap/josm/actions/ExtensionFileFilter.java
@@ -17,6 +17,7 @@ import org.openstreetmap.josm.gui.widgets.AbstractFileChooser;
 import org.openstreetmap.josm.io.AllFormatsImporter;
 import org.openstreetmap.josm.io.FileExporter;
 import org.openstreetmap.josm.io.FileImporter;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
  * A file filter that filters after the extension. Also includes a list of file
@@ -102,7 +103,7 @@ public class ExtensionFileFilter extends FileFilter implements java.io.FileFilte
 
         for (String classname : exporterNames) {
             try {
-                FileExporter exporter = (FileExporter)Class.forName(classname).newInstance();
+                FileExporter exporter = (FileExporter) Class.forName(classname).newInstance();
                 exporters.add(exporter);
                 MapView.addLayerChangeListener(exporter);
             } catch (Exception e) {
@@ -146,8 +147,8 @@ public class ExtensionFileFilter extends FileFilter implements java.io.FileFilte
      * @since 5131
      */
     public static void updateAllFormatsImporter() {
-        for(int i=0; i < importers.size(); i++) {
-            if(importers.get(i) instanceof AllFormatsImporter) {
+        for (int i = 0; i < importers.size(); i++) {
+            if (importers.get(i) instanceof AllFormatsImporter) {
                 importers.set(i, new AllFormatsImporter());
             }
         }
@@ -281,11 +282,7 @@ public class ExtensionFileFilter extends FileFilter implements java.io.FileFilte
      * @since 1169
      */
     public boolean acceptName(String filename) {
-        String name = filename.toLowerCase();
-        for (String ext : extensions.split(","))
-            if (name.endsWith("."+ext))
-                return true;
-        return false;
+        return Utils.hasExtension(filename, extensions.split(","));
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/actions/FullscreenToggleAction.java b/src/org/openstreetmap/josm/actions/FullscreenToggleAction.java
index f730b8b..72b98eb 100644
--- a/src/org/openstreetmap/josm/actions/FullscreenToggleAction.java
+++ b/src/org/openstreetmap/josm/actions/FullscreenToggleAction.java
@@ -37,7 +37,7 @@ public class FullscreenToggleAction extends ToggleAction {
         super(tr("Fullscreen view"),
               null, /* no icon */
               tr("Toggle fullscreen view"),
-              Shortcut.registerShortcut("menu:view:fullscreen", tr("Toggle fullscreen view"),KeyEvent.VK_F11, Shortcut.DIRECT),
+              Shortcut.registerShortcut("menu:view:fullscreen", tr("Toggle fullscreen view"), KeyEvent.VK_F11, Shortcut.DIRECT),
               false /* register */
         );
         putValue("help", ht("/Action/FullscreenView"));
diff --git a/src/org/openstreetmap/josm/actions/GpxExportAction.java b/src/org/openstreetmap/josm/actions/GpxExportAction.java
index a9b3c8f..237ce17 100644
--- a/src/org/openstreetmap/josm/actions/GpxExportAction.java
+++ b/src/org/openstreetmap/josm/actions/GpxExportAction.java
@@ -42,7 +42,7 @@ public class GpxExportAction extends DiskAccessAction {
      * @return The layer to export, either a {@link GpxLayer} or {@link OsmDataLayer}.
      */
     protected Layer getLayer() {
-        if(!Main.isDisplayingMapView())
+        if (!Main.isDisplayingMapView())
             return null;
         Layer layer = Main.map.mapView.getActiveLayer();
         return (layer instanceof GpxLayer || layer instanceof OsmDataLayer) ? layer : null;
@@ -78,8 +78,9 @@ public class GpxExportAction extends DiskAccessAction {
      */
     public void export(Layer layer) {
         CheckParameterUtil.ensureParameterNotNull(layer, "layer");
-        if (! (layer instanceof OsmDataLayer) && ! (layer instanceof GpxLayer))
-            throw new IllegalArgumentException(MessageFormat.format("Expected instance of OsmDataLayer or GpxLayer. Got ''{0}''.", layer.getClass().getName()));
+        if (!(layer instanceof OsmDataLayer) && !(layer instanceof GpxLayer))
+            throw new IllegalArgumentException(MessageFormat.format("Expected instance of OsmDataLayer or GpxLayer. Got ''{0}''.",
+                    layer.getClass().getName()));
 
         File file = createAndOpenSaveFileChooser(tr("Export GPX file"), GpxImporter.FILE_FILTER);
         if (file == null)
diff --git a/src/org/openstreetmap/josm/actions/HelpAction.java b/src/org/openstreetmap/josm/actions/HelpAction.java
index 5c2ae6a..1239309 100644
--- a/src/org/openstreetmap/josm/actions/HelpAction.java
+++ b/src/org/openstreetmap/josm/actions/HelpAction.java
@@ -37,7 +37,7 @@ public class HelpAction extends AbstractAction {
         if (e.getActionCommand() == null) {
             String topic;
             if (e.getSource() instanceof Component) {
-                Component c = SwingUtilities.getRoot((Component)e.getSource());
+                Component c = SwingUtilities.getRoot((Component) e.getSource());
                 Point mouse = c.getMousePosition();
                 if (mouse != null) {
                     c = SwingUtilities.getDeepestComponentAt(c, mouse.x, mouse.y);
diff --git a/src/org/openstreetmap/josm/actions/HistoryInfoWebAction.java b/src/org/openstreetmap/josm/actions/HistoryInfoWebAction.java
index 7527279..1c7f631 100644
--- a/src/org/openstreetmap/josm/actions/HistoryInfoWebAction.java
+++ b/src/org/openstreetmap/josm/actions/HistoryInfoWebAction.java
@@ -1,4 +1,4 @@
-//License: GPL. For details, see LICENSE file.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.actions;
 
 import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
@@ -13,6 +13,9 @@ import org.openstreetmap.josm.tools.Shortcut;
 
 public class HistoryInfoWebAction extends AbstractInfoAction {
 
+    /**
+     * Constructs a new {@code HistoryInfoWebAction}.
+     */
     public HistoryInfoWebAction() {
         super(tr("History (web)"), "dialogs/history",
                 tr("Display history information about OSM ways, nodes, or relations in web browser."),
@@ -24,7 +27,11 @@ public class HistoryInfoWebAction extends AbstractInfoAction {
 
     @Override
     protected  String createInfoUrl(Object infoObject) {
-        OsmPrimitive primitive = (OsmPrimitive) infoObject;
-        return Main.getBaseBrowseUrl() + "/" + OsmPrimitiveType.from(primitive).getAPIName() + "/" + primitive.getId() + "/history";
+        if (infoObject instanceof OsmPrimitive) {
+            OsmPrimitive primitive = (OsmPrimitive) infoObject;
+            return Main.getBaseBrowseUrl() + "/" + OsmPrimitiveType.from(primitive).getAPIName() + "/" + primitive.getId() + "/history";
+        } else {
+            return null;
+        }
     }
 }
diff --git a/src/org/openstreetmap/josm/actions/ImageryAdjustAction.java b/src/org/openstreetmap/josm/actions/ImageryAdjustAction.java
index 993ee57..9e18b04 100644
--- a/src/org/openstreetmap/josm/actions/ImageryAdjustAction.java
+++ b/src/org/openstreetmap/josm/actions/ImageryAdjustAction.java
@@ -56,7 +56,7 @@ public class ImageryAdjustAction extends MapMode implements MouseListener, Mouse
         super(tr("New offset"), "adjustimg",
                 tr("Adjust the position of this imagery layer"), Main.map,
                 cursor);
-        putValue("toolbar", false);
+        putValue("toolbar", Boolean.FALSE);
         this.layer = layer;
     }
 
@@ -118,7 +118,7 @@ public class ImageryAdjustAction extends MapMode implements MouseListener, Mouse
           || (offsetDialog != null && offsetDialog.areFieldsInFocus())) {
             return;
         }
-        KeyEvent kev = (KeyEvent)event;
+        KeyEvent kev = (KeyEvent) event;
         int dx = 0, dy = 0;
         switch (kev.getKeyCode()) {
         case KeyEvent.VK_UP : dy = +1; break;
@@ -132,6 +132,9 @@ public class ImageryAdjustAction extends MapMode implements MouseListener, Mouse
             if (offsetDialog != null) {
                 offsetDialog.updateOffset();
             }
+            if (Main.isDebugEnabled()) {
+                Main.debug(getClass().getName()+" consuming event "+kev);
+            }
             kev.consume();
             Main.map.repaint();
         }
@@ -144,7 +147,7 @@ public class ImageryAdjustAction extends MapMode implements MouseListener, Mouse
 
         if (layer.isVisible()) {
             requestFocusInMapView();
-            prevEastNorth=Main.map.mapView.getEastNorth(e.getX(),e.getY());
+            prevEastNorth = Main.map.mapView.getEastNorth(e.getX(), e.getY());
             Main.map.mapView.setNewCursor(Cursor.MOVE_CURSOR, this);
         }
     }
@@ -153,7 +156,7 @@ public class ImageryAdjustAction extends MapMode implements MouseListener, Mouse
     public void mouseDragged(MouseEvent e) {
         if (layer == null || prevEastNorth == null) return;
         EastNorth eastNorth =
-            Main.map.mapView.getEastNorth(e.getX(),e.getY());
+            Main.map.mapView.getEastNorth(e.getX(), e.getY());
         double dx = layer.getDx()+eastNorth.east()-prevEastNorth.east();
         double dy = layer.getDy()+eastNorth.north()-prevEastNorth.north();
         layer.setOffset(dx, dy);
@@ -190,19 +193,19 @@ public class ImageryAdjustAction extends MapMode implements MouseListener, Mouse
         public ImageryOffsetDialog() {
             super(Main.parent,
                     tr("Adjust imagery offset"),
-                    new String[] { tr("OK"),tr("Cancel") },
+                    new String[] {tr("OK"), tr("Cancel")},
                     false);
-            setButtonIcons(new String[] { "ok", "cancel" });
+            setButtonIcons(new String[] {"ok", "cancel"});
             contentInsets = new Insets(10, 15, 5, 15);
             JPanel pnl = new JPanel(new GridBagLayout());
             pnl.add(new JMultilineLabel(tr("Use arrow keys or drag the imagery layer with mouse to adjust the imagery offset.\n" +
                     "You can also enter east and north offset in the {0} coordinates.\n" +
                     "If you want to save the offset as bookmark, enter the bookmark name below",
                     Main.getProjection().toString())), GBC.eop());
-            pnl.add(new JLabel(tr("Offset: ")),GBC.std());
-            pnl.add(tOffset,GBC.eol().fill(GBC.HORIZONTAL).insets(0,0,0,5));
-            pnl.add(new JLabel(tr("Bookmark name: ")),GBC.std());
-            pnl.add(tBookmarkName,GBC.eol().fill(GBC.HORIZONTAL));
+            pnl.add(new JLabel(tr("Offset: ")), GBC.std());
+            pnl.add(tOffset, GBC.eol().fill(GBC.HORIZONTAL).insets(0, 0, 0, 5));
+            pnl.add(new JLabel(tr("Bookmark name: ")), GBC.std());
+            pnl.add(tBookmarkName, GBC.eol().fill(GBC.HORIZONTAL));
             tOffset.setColumns(16);
             updateOffsetIntl();
             tOffset.addFocusListener(this);
@@ -225,7 +228,7 @@ public class ImageryAdjustAction extends MapMode implements MouseListener, Mouse
             if (ignoreListener) return;
             String ostr = tOffset.getText();
             int semicolon = ostr.indexOf(';');
-            if( semicolon >= 0 && semicolon + 1 < ostr.length() ) {
+            if (semicolon >= 0 && semicolon + 1 < ostr.length()) {
                 try {
                     // here we assume that Double.parseDouble() needs '.' as a decimal separator
                     String easting = ostr.substring(0, semicolon).trim().replace(',', '.');
@@ -235,6 +238,9 @@ public class ImageryAdjustAction extends MapMode implements MouseListener, Mouse
                     layer.setOffset(dx, dy);
                 } catch (NumberFormatException nfe) {
                     // we repaint offset numbers in any case
+                    if (Main.isTraceEnabled()) {
+                        Main.trace(nfe.getMessage());
+                    }
                 }
             }
             updateOffsetIntl();
@@ -243,13 +249,13 @@ public class ImageryAdjustAction extends MapMode implements MouseListener, Mouse
             }
         }
 
-        private final void updateOffset() {
+        private void updateOffset() {
             ignoreListener = true;
             updateOffsetIntl();
             ignoreListener = false;
         }
 
-        private final void updateOffsetIntl() {
+        private void updateOffsetIntl() {
             // Support projections with very small numbers (e.g. 4326)
             int precision = Main.getProjection().getDefaultZoomInPPD() >= 1.0 ? 2 : 7;
             // US locale to force decimal separator to be '.'
@@ -265,9 +271,9 @@ public class ImageryAdjustAction extends MapMode implements MouseListener, Mouse
                     Main.parent,
                     tr("Overwrite"),
                     new String[] {tr("Overwrite"), tr("Cancel")}
-            ) {{
+            ) { {
                 contentInsets = new Insets(10, 15, 10, 15);
-            }};
+            } };
             dialog.setContent(tr("Offset bookmark already exists. Overwrite?"));
             dialog.setButtonIcons(new String[] {"ok.png", "cancel.png"});
             dialog.setupDialog();
diff --git a/src/org/openstreetmap/josm/actions/InfoWebAction.java b/src/org/openstreetmap/josm/actions/InfoWebAction.java
index 3de4175..984a301 100644
--- a/src/org/openstreetmap/josm/actions/InfoWebAction.java
+++ b/src/org/openstreetmap/josm/actions/InfoWebAction.java
@@ -1,12 +1,14 @@
-//License: GPL. For details, see LICENSE file.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.actions;
 
 import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.awt.event.KeyEvent;
+import java.util.Collection;
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.notes.Note;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
 import org.openstreetmap.josm.tools.Shortcut;
@@ -30,8 +32,45 @@ public class InfoWebAction extends AbstractInfoAction {
     }
 
     @Override
-    protected  String createInfoUrl(Object infoObject) {
-        OsmPrimitive primitive = (OsmPrimitive)infoObject;
-        return Main.getBaseBrowseUrl() + "/" + OsmPrimitiveType.from(primitive).getAPIName() + "/" + primitive.getId();
+    protected String createInfoUrl(Object infoObject) {
+        if (infoObject instanceof OsmPrimitive) {
+            OsmPrimitive primitive = (OsmPrimitive) infoObject;
+            return Main.getBaseBrowseUrl() + "/" + OsmPrimitiveType.from(primitive).getAPIName() + "/" + primitive.getId();
+        } else if (infoObject instanceof Note) {
+            Note note = (Note) infoObject;
+            return Main.getBaseBrowseUrl() + "/note/" + note.getId();
+        } else {
+            return null;
+        }
+    }
+
+    @Override
+    protected void updateEnabledState() {
+        super.updateEnabledState();
+        updateEnabledStateWithNotes();
+    }
+
+    @Override
+    protected void updateEnabledState(Collection<? extends OsmPrimitive> selection) {
+        super.updateEnabledState(selection);
+        updateEnabledStateWithNotes();
+    }
+
+    private void updateEnabledStateWithNotes() {
+        // Allows enabling if a note is selected, even if no OSM object is selected
+        if (!isEnabled() && Main.isDisplayingMapView()) {
+            if (Main.map.noteDialog.getSelectedNote() != null) {
+                setEnabled(true);
+            }
+        }
+    }
+
+    /**
+     * Called when the note selection has changed.
+     * TODO: make a proper listener mechanism to handle change of note selection
+     * @since 8475
+     */
+    public final void noteSelectionChanged() {
+        updateEnabledState();
     }
 }
diff --git a/src/org/openstreetmap/josm/actions/JoinAreasAction.java b/src/org/openstreetmap/josm/actions/JoinAreasAction.java
index bc7fdfa..745adac 100644
--- a/src/org/openstreetmap/josm/actions/JoinAreasAction.java
+++ b/src/org/openstreetmap/josm/actions/JoinAreasAction.java
@@ -45,6 +45,7 @@ import org.openstreetmap.josm.gui.conflict.tags.CombinePrimitiveResolverDialog;
 import org.openstreetmap.josm.tools.Geometry;
 import org.openstreetmap.josm.tools.Pair;
 import org.openstreetmap.josm.tools.Shortcut;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
  * Join Areas (i.e. closed ways and multipolygons).
@@ -82,6 +83,7 @@ public class JoinAreasAction extends JosmAction {
     private static class RelationRole {
         public final Relation rel;
         public final String role;
+
         public RelationRole(Relation rel, String role) {
             this.rel = rel;
             this.role = role;
@@ -100,7 +102,6 @@ public class JoinAreasAction extends JosmAction {
         }
     }
 
-
     /**
      * HelperClass - saves a way and the "inside" side.
      *
@@ -149,8 +150,7 @@ public class JoinAreasAction extends JosmAction {
                     for (int pos = 0; pos < way.way.getNodesCount() - 1; pos++) {
                         nodes.add(way.way.getNode(pos));
                     }
-                }
-                else {
+                } else {
                     for (int pos = way.way.getNodesCount() - 1; pos > 0; pos--) {
                         nodes.add(way.way.getNode(pos));
                     }
@@ -164,8 +164,9 @@ public class JoinAreasAction extends JosmAction {
          * Inverse inside and outside
          */
         public void reverse() {
-            for(WayInPolygon way: ways)
+            for (WayInPolygon way: ways) {
                 way.insideToTheRight = !way.insideToTheRight;
+            }
             Collections.reverse(ways);
         }
     }
@@ -265,10 +266,12 @@ public class JoinAreasAction extends JosmAction {
             EastNorth en3 = N3.getEastNorth();
             double angle = Math.atan2(en3.getY() - en1.getY(), en3.getX() - en1.getX()) -
                     Math.atan2(en2.getY() - en1.getY(), en2.getX() - en1.getX());
-            while(angle >= 2*Math.PI)
+            while (angle >= 2*Math.PI) {
                 angle -= 2*Math.PI;
-            while(angle < 0)
+            }
+            while (angle < 0) {
                 angle += 2*Math.PI;
+            }
             return angle;
         }
 
@@ -300,7 +303,7 @@ public class JoinAreasAction extends JosmAction {
                     continue;
                 }
 
-                if(nextNode == prevNode) {
+                if (nextNode == prevNode) {
                     // go back
                     lastWay = way;
                     lastWayReverse = !way.insideToTheRight;
@@ -309,9 +312,9 @@ public class JoinAreasAction extends JosmAction {
 
                 double angle = Math.atan2(nextNode.getEastNorth().east() - headNode.getEastNorth().east(),
                         nextNode.getEastNorth().north() - headNode.getEastNorth().north()) - headAngle;
-                if(angle > Math.PI)
+                if (angle > Math.PI)
                     angle -= 2*Math.PI;
-                if(angle <= -Math.PI)
+                if (angle <= -Math.PI)
                     angle += 2*Math.PI;
 
                 // Now we have a valid candidate way, is it better than the previous one ?
@@ -344,20 +347,20 @@ public class JoinAreasAction extends JosmAction {
                 boolean candidateComingToHead;
                 Node candidatePrevNode;
 
-                if(candidateWay.way.firstNode().equals(headNode)) {
+                if (candidateWay.way.firstNode().equals(headNode)) {
                     candidateComingToHead = !candidateWay.insideToTheRight;
                     candidatePrevNode = candidateWay.way.getNode(1);
-                } else if(candidateWay.way.lastNode().equals(headNode)) {
+                } else if (candidateWay.way.lastNode().equals(headNode)) {
                      candidateComingToHead = candidateWay.insideToTheRight;
                      candidatePrevNode = candidateWay.way.getNode(candidateWay.way.getNodesCount() - 2);
                 } else
                     continue;
-                if(candidateWay.equals(lastWay) && candidateComingToHead)
+                if (candidateWay.equals(lastWay) && candidateComingToHead)
                     continue;
 
                 double candidateAngle = getAngle(headNode, candidatePrevNode, prevNode);
 
-                if(mostLeft == null || candidateAngle < angle || (candidateAngle == angle && !candidateComingToHead)) {
+                if (mostLeft == null || candidateAngle < angle || (Utils.equalsEpsilon(candidateAngle, angle) && !candidateComingToHead)) {
                     // Candidate is most left
                     mostLeft = candidateWay;
                     comingToHead = candidateComingToHead;
@@ -440,7 +443,7 @@ public class JoinAreasAction extends JosmAction {
                     + tr("Please abort if you are not sure"),
                 tr("The selected area is incomplete. Continue?"),
                 allNodes, null);
-        if(!ok) return;
+        if (!ok) return;
 
         //analyze multipolygon relations and collect all areas
         List<Multipolygon> areas = collectMultipolygons(ways);
@@ -524,6 +527,7 @@ public class JoinAreasAction extends JosmAction {
      * Will join two or more overlapping areas
      * @param areas list of areas to join
      * @return new area formed.
+     * @throws UserCancelException if user cancels the operation
      */
     private JoinAreasResult joinAreas(List<Multipolygon> areas) throws UserCancelException {
 
@@ -599,7 +603,7 @@ public class JoinAreasAction extends JosmAction {
             Multipolygon resultPol = joinPolygon(pol);
 
             //create multipolygon relation, if necessary.
-            RelationRole ownMultipolygonRelation = addOwnMultigonRelation(resultPol.innerWays, resultPol.outerWay);
+            RelationRole ownMultipolygonRelation = addOwnMultipolygonRelation(resultPol.innerWays);
 
             //add back the original relations, merged with our new multipolygon relation
             fixRelations(relations, resultPol.outerWay, ownMultipolygonRelation, relationsToDelete);
@@ -613,7 +617,7 @@ public class JoinAreasAction extends JosmAction {
 
         commitCommands(marktr("Assemble new polygons"));
 
-        for(Relation rel: relationsToDelete) {
+        for (Relation rel: relationsToDelete) {
             cmds.add(new DeleteCommand(rel));
         }
 
@@ -700,14 +704,14 @@ public class JoinAreasAction extends JosmAction {
                     if (prevNode != node) {
                         newNodes.add(node);
                     } else {
-                        nodesRemoved ++;
+                        nodesRemoved++;
                     }
                 } else {
                     //node with same coordinates already exists, substitute with existing node
                     Node representator = nodeMap.get(node);
 
                     if (representator != node) {
-                        nodesRemoved ++;
+                        nodesRemoved++;
                     }
 
                     //avoid duplicate node
@@ -724,7 +728,7 @@ public class JoinAreasAction extends JosmAction {
                     newNodes.add(newNodes.get(0));
                 }
 
-                Way newWay=new Way(way);
+                Way newWay = new Way(way);
                 newWay.setNodes(newNodes);
                 cmds.add(new ChangeCommand(way, newWay));
                 totalNodesRemoved += nodesRemoved;
@@ -765,17 +769,15 @@ public class JoinAreasAction extends JosmAction {
 
         List<WayInPolygon> result = new ArrayList<>();
 
-        //prepare prev and next maps
+        //prepare next map
         Map<Way, Way> nextWayMap = new HashMap<>();
-        Map<Way, Way> prevWayMap = new HashMap<>();
 
-        for (int pos = 0; pos < parts.size(); pos ++) {
+        for (int pos = 0; pos < parts.size(); pos++) {
 
             if (!parts.get(pos).lastNode().equals(parts.get((pos + 1) % parts.size()).firstNode()))
                 throw new RuntimeException("Way not circular");
 
             nextWayMap.put(parts.get(pos), parts.get((pos + 1) % parts.size()));
-            prevWayMap.put(parts.get(pos), parts.get((pos + parts.size() - 1) % parts.size()));
         }
 
         //find the node with minimum y - it's guaranteed to be outer. (What about the south pole?)
@@ -785,7 +787,7 @@ public class JoinAreasAction extends JosmAction {
         double minY = Double.POSITIVE_INFINITY;
 
         for (Way way : parts) {
-            for (int pos = 0; pos < way.getNodesCount(); pos ++) {
+            for (int pos = 0; pos < way.getNodesCount(); pos++) {
                 Node node = way.getNode(pos);
 
                 if (node.getEastNorth().getY() < minY) {
@@ -910,7 +912,7 @@ public class JoinAreasAction extends JosmAction {
                     boolean wayBToTheRight = Geometry.isToTheRightSideOfLine(prevNode, headNode, nextNode, wayBNode);
 
                     if (wayAToTheRight != wayBToTheRight) {
-                        intersectionCount ++;
+                        intersectionCount++;
                     }
                 }
             }
@@ -1003,8 +1005,8 @@ public class JoinAreasAction extends JosmAction {
     /**
      * Collects outer way and corresponding inner ways from all boundaries.
      * @param level depth level
-     * @param boundaryWays
-     * @return the outermostWay.
+     * @param boundaryWays list of joined boundaries to search in
+     * @return the outermost Way.
      */
     private List<PolygonLevel> findOuterWaysImpl(int level, Collection<AssembledPolygon> boundaryWays) {
 
@@ -1071,24 +1073,25 @@ public class JoinAreasAction extends JosmAction {
         // This seems to appear when is apply over invalid way like #9911 test-case
         // Remove all of these way to make the next work.
         List<WayInPolygon> cleanMultigonWays = new ArrayList<>();
-        for(WayInPolygon way: multigonWays)
-            if(way.way.getNodesCount() == 2 && way.way.firstNode() == way.way.lastNode())
+        for (WayInPolygon way: multigonWays) {
+            if (way.way.getNodesCount() == 2 && way.way.isClosed())
                 discardedWays.add(way);
             else
                 cleanMultigonWays.add(way);
+        }
 
         WayTraverser traverser = new WayTraverser(cleanMultigonWays);
         List<AssembledPolygon> result = new ArrayList<>();
 
         WayInPolygon startWay;
-        while((startWay = traverser.startNewWay()) != null) {
+        while ((startWay = traverser.startNewWay()) != null) {
             List<WayInPolygon> path = new ArrayList<>();
             List<WayInPolygon> startWays = new ArrayList<>();
             path.add(startWay);
-            while(true) {
+            while (true) {
                 WayInPolygon leftComing;
-                while((leftComing = traverser.leftComingWay()) != null) {
-                    if(startWays.contains(leftComing))
+                while ((leftComing = traverser.leftComingWay()) != null) {
+                    if (startWays.contains(leftComing))
                         break;
                     // Need restart traverser walk
                     path.clear();
@@ -1098,16 +1101,17 @@ public class JoinAreasAction extends JosmAction {
                     break;
                 }
                 WayInPolygon nextWay = traverser.walk();
-                if(nextWay == null)
+                if (nextWay == null)
                     throw new RuntimeException("Join areas internal error.");
-                if(path.get(0) == nextWay) {
+                if (path.get(0) == nextWay) {
                     // path is closed -> stop here
                     AssembledPolygon ring = new AssembledPolygon(path);
-                    if(ring.getNodes().size() <= 2) {
+                    if (ring.getNodes().size() <= 2) {
                         // Invalid ring (2 nodes) -> remove
                         traverser.removeWays(path);
-                        for(WayInPolygon way: path)
+                        for (WayInPolygon way: path) {
                             discardedResult.add(way.way);
+                        }
                     } else {
                         // Close ring -> add
                         result.add(ring);
@@ -1115,10 +1119,10 @@ public class JoinAreasAction extends JosmAction {
                     }
                     break;
                 }
-                if(path.contains(nextWay)) {
+                if (path.contains(nextWay)) {
                     // Inner loop -> remove
                     int index = path.indexOf(nextWay);
-                    while(path.size() > index) {
+                    while (path.size() > index) {
                         WayInPolygon currentWay = path.get(index);
                         discardedResult.add(currentWay.way);
                         traverser.removeWay(currentWay);
@@ -1146,12 +1150,12 @@ public class JoinAreasAction extends JosmAction {
             WayTraverser traverser = new WayTraverser(ring.ways);
             WayInPolygon startWay;
 
-            while((startWay = traverser.startNewWay()) != null) {
+            while ((startWay = traverser.startNewWay()) != null) {
                 List<WayInPolygon> simpleRingWays = new ArrayList<>();
                 simpleRingWays.add(startWay);
                 WayInPolygon nextWay;
-                while((nextWay = traverser.walk()) != startWay) {
-                    if(nextWay == null)
+                while ((nextWay = traverser.walk()) != startWay) {
+                    if (nextWay == null)
                         throw new RuntimeException("Join areas internal error.");
                     simpleRingWays.add(nextWay);
                 }
@@ -1190,6 +1194,7 @@ public class JoinAreasAction extends JosmAction {
      * Joins the lists of ways.
      * @param polygon The list of outer ways that belong to that multigon.
      * @return The newly created outer way
+     * @throws UserCancelException if user cancels the operation
      */
     private Multipolygon  joinPolygon(AssembledMultipolygon polygon) throws UserCancelException {
         Multipolygon result = new Multipolygon(joinWays(polygon.outerWay.ways));
@@ -1205,6 +1210,7 @@ public class JoinAreasAction extends JosmAction {
      * Joins the outer ways and deletes all short ways that can't be part of a multipolygon anyway.
      * @param ways The list of outer ways that belong to that multigon.
      * @return The newly created outer way
+     * @throws UserCancelException if user cancels the operation
      */
     private Way joinWays(List<WayInPolygon> ways) throws UserCancelException {
 
@@ -1233,8 +1239,9 @@ public class JoinAreasAction extends JosmAction {
      * Joins a list of ways (using CombineWayAction and ReverseWayAction as specified in WayInPath)
      * @param ways The list of ways to join and reverse
      * @return The newly created way
+     * @throws UserCancelException if user cancels the operation
      */
-    private Way joinOrientedWays(List<WayInPolygon> ways) throws UserCancelException{
+    private Way joinOrientedWays(List<WayInPolygon> ways) throws UserCancelException {
         if (ways.size() < 2)
             return ways.get(0).way;
 
@@ -1257,7 +1264,7 @@ public class JoinAreasAction extends JosmAction {
         Pair<Way, Command> result = CombineWayAction.combineWaysWorker(actionWays);
 
         Main.main.undoRedo.add(result.b);
-        cmdsCount ++;
+        cmdsCount++;
 
         return result.a;
     }
@@ -1291,8 +1298,7 @@ public class JoinAreasAction extends JosmAction {
                 if ("outer".equalsIgnoreCase(rm.getRole())) {
                     outerWays.add(rm.getWay());
                     hasKnownOuter |= selectedWays.contains(rm.getWay());
-                }
-                else if ("inner".equalsIgnoreCase(rm.getRole())) {
+                } else if ("inner".equalsIgnoreCase(rm.getRole())) {
                     innerWays.add(rm.getWay());
                 }
             }
@@ -1330,8 +1336,7 @@ public class JoinAreasAction extends JosmAction {
                 return null;
             }
 
-            for (Way way :innerWays)
-            {
+            for (Way way :innerWays) {
                 if (processedOuterWays.contains(way)) {
                     new Notification(
                             tr("Sorry. Cannot handle way that is both inner and outer in multipolygon relations."))
@@ -1373,10 +1378,9 @@ public class JoinAreasAction extends JosmAction {
     /**
      * Will add own multipolygon relation to the "previously existing" relations. Fixup is done by fixRelations
      * @param inner List of already closed inner ways
-     * @param outer The outer way
      * @return The list of relation with roles to add own relation to
      */
-    private RelationRole addOwnMultigonRelation(Collection<Way> inner, Way outer) {
+    private RelationRole addOwnMultipolygonRelation(Collection<Way> inner) {
         if (inner.isEmpty()) return null;
         // Create new multipolygon relation and add all inner ways to it
         Relation newRel = new Relation();
@@ -1469,10 +1473,11 @@ public class JoinAreasAction extends JosmAction {
             newRel = new Relation();
             for (RelationRole r : multiouters) {
                 // Add members
-                for (RelationMember rm : r.rel.getMembers())
+                for (RelationMember rm : r.rel.getMembers()) {
                     if (!newRel.getMembers().contains(rm)) {
                         newRel.addMember(rm);
                     }
+                }
                 // Add tags
                 for (String key : r.rel.keySet()) {
                     newRel.put(key, r.rel.get(key));
diff --git a/src/org/openstreetmap/josm/actions/JoinNodeWayAction.java b/src/org/openstreetmap/josm/actions/JoinNodeWayAction.java
index 3ba72da..20e10c1 100644
--- a/src/org/openstreetmap/josm/actions/JoinNodeWayAction.java
+++ b/src/org/openstreetmap/josm/actions/JoinNodeWayAction.java
@@ -1,4 +1,4 @@
-//License: GPL. For details, see LICENSE file.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.actions;
 
 import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
@@ -139,7 +139,11 @@ public class JoinNodeWayAction extends JosmAction {
                         EastNorth newPosition = Geometry.closestPointToSegment(w.getNode(segmentIndex).getEastNorth(),
                                                                             w.getNode(segmentIndex+1).getEastNorth(),
                                                                             node.getEastNorth());
-                        cmds.add(new MoveCommand(node, Projections.inverseProject(newPosition)));
+                        MoveCommand c = new MoveCommand(node, Projections.inverseProject(newPosition));
+                        // Avoid moving a given node several times at the same position in case of overlapping ways
+                        if (!cmds.contains(c)) {
+                            cmds.add(c);
+                        }
                     }
                 }
                 List<Node> nodesToAdd = new LinkedList<>();
@@ -178,11 +182,13 @@ public class JoinNodeWayAction extends JosmAction {
         private final EastNorth refPoint;
         private EastNorth refPoint2;
         private final boolean projectToSegment;
+
         NodeDistanceToRefNodeComparator(Node referenceNode, Node referenceNode2, boolean projectFirst) {
             refPoint = referenceNode.getEastNorth();
             refPoint2 = referenceNode2.getEastNorth();
             projectToSegment = projectFirst;
         }
+
         @Override
         public int compare(Node first, Node second) {
             EastNorth firstPosition = first.getEastNorth();
diff --git a/src/org/openstreetmap/josm/actions/JosmAction.java b/src/org/openstreetmap/josm/actions/JosmAction.java
index 7dc9c8b..8839de8 100644
--- a/src/org/openstreetmap/josm/actions/JosmAction.java
+++ b/src/org/openstreetmap/josm/actions/JosmAction.java
@@ -72,9 +72,10 @@ public abstract class JosmAction extends AbstractAction implements Destroyable {
      * @param installAdapters false, if you don't want to install layer changed and selection changed adapters
      * TODO: do not pass Icon, pass ImageProvider instead
      */
-    public JosmAction(String name, ImageProvider icon, String tooltip, Shortcut shortcut, boolean registerInToolbar, String toolbarId, boolean installAdapters) {
+    public JosmAction(String name, ImageProvider icon, String tooltip, Shortcut shortcut, boolean registerInToolbar,
+            String toolbarId, boolean installAdapters) {
         super(name);
-        if(icon != null)
+        if (icon != null)
             icon.getResource().getImageIcon(this);
         setHelpId();
         sc = shortcut;
@@ -110,7 +111,8 @@ public abstract class JosmAction extends AbstractAction implements Destroyable {
      * @param toolbarId identifier for the toolbar preferences. The iconName is used, if this parameter is null
      * @param installAdapters false, if you don't want to install layer changed and selection changed adapters
      */
-    public JosmAction(String name, String iconName, String tooltip, Shortcut shortcut, boolean registerInToolbar, String toolbarId, boolean installAdapters) {
+    public JosmAction(String name, String iconName, String tooltip, Shortcut shortcut, boolean registerInToolbar,
+            String toolbarId, boolean installAdapters) {
         this(name, iconName == null ? null : new ImageProvider(iconName), tooltip, shortcut, registerInToolbar,
                 toolbarId == null ? iconName : toolbarId, installAdapters);
     }
@@ -279,6 +281,7 @@ public abstract class JosmAction extends AbstractAction implements Destroyable {
                 }
             });
         }
+
         @Override
         public void activeLayerChange(Layer oldLayer, Layer newLayer) {
             updateEnabledStateInEDT();
diff --git a/src/org/openstreetmap/josm/actions/JumpToAction.java b/src/org/openstreetmap/josm/actions/JumpToAction.java
index 356c9bf..426d108 100644
--- a/src/org/openstreetmap/josm/actions/JumpToAction.java
+++ b/src/org/openstreetmap/josm/actions/JumpToAction.java
@@ -21,6 +21,7 @@ import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.gui.MapFrame;
 import org.openstreetmap.josm.gui.MapFrameListener;
 import org.openstreetmap.josm.gui.MapView;
+import org.openstreetmap.josm.gui.dialogs.LatLonDialog;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
@@ -49,15 +50,37 @@ public class JumpToAction extends JosmAction {
     private final JosmTextField zm = new JosmTextField();
 
     class OsmURLListener implements DocumentListener {
-        @Override public void changedUpdate(DocumentEvent e) { parseURL(); }
-        @Override public void insertUpdate(DocumentEvent e) { parseURL(); }
-        @Override public void removeUpdate(DocumentEvent e) { parseURL(); }
+        @Override
+        public void changedUpdate(DocumentEvent e) {
+            parseURL();
+        }
+
+        @Override
+        public void insertUpdate(DocumentEvent e) {
+            parseURL();
+        }
+
+        @Override
+        public void removeUpdate(DocumentEvent e) {
+            parseURL();
+        }
     }
 
     class OsmLonLatListener implements DocumentListener {
-        @Override public void changedUpdate(DocumentEvent e) { updateUrl(false); }
-        @Override public void insertUpdate(DocumentEvent e) { updateUrl(false); }
-        @Override public void removeUpdate(DocumentEvent e) { updateUrl(false); }
+        @Override
+        public void changedUpdate(DocumentEvent e) {
+            updateUrl(false);
+        }
+
+        @Override
+        public void insertUpdate(DocumentEvent e) {
+            updateUrl(false);
+        }
+
+        @Override
+        public void removeUpdate(DocumentEvent e) {
+            updateUrl(false);
+        }
     }
 
     /**
@@ -108,10 +131,10 @@ public class JumpToAction extends JosmAction {
         p.add(new JLabel(tr("URL")), GBC.eol());
         p.add(url, GBC.eol().fill(GBC.HORIZONTAL));
 
-        Object[] buttons = { tr("Jump there"), tr("Cancel") };
+        Object[] buttons = {tr("Jump there"), tr("Cancel")};
         LatLon ll = null;
         double zoomLvl = 100;
-        while(ll == null) {
+        while (ll == null) {
             int option = JOptionPane.showOptionDialog(
                             Main.parent,
                             panel,
@@ -127,7 +150,13 @@ public class JumpToAction extends JosmAction {
                 zoomLvl = Double.parseDouble(zm.getText());
                 ll = new LatLon(Double.parseDouble(lat.getText()), Double.parseDouble(lon.getText()));
             } catch (NumberFormatException ex) {
-                JOptionPane.showMessageDialog(Main.parent, tr("Could not parse Latitude, Longitude or Zoom. Please check."), tr("Unable to parse Lon/Lat"), JOptionPane.ERROR_MESSAGE);
+                try {
+                    ll = LatLonDialog.parseLatLon(lat.getText() + "; " + lon.getText());
+                } catch (IllegalArgumentException ex2) {
+                    JOptionPane.showMessageDialog(Main.parent,
+                            tr("Could not parse Latitude, Longitude or Zoom. Please check."),
+                            tr("Unable to parse Lon/Lat"), JOptionPane.ERROR_MESSAGE);
+                }
             }
         }
 
@@ -163,17 +192,16 @@ public class JumpToAction extends JosmAction {
     }
 
     private void updateUrl(boolean force) {
-        if(!lat.hasFocus() && !lon.hasFocus() && !zm.hasFocus() && !force) return;
+        if (!lat.hasFocus() && !lon.hasFocus() && !zm.hasFocus() && !force) return;
         try {
             double dlat = Double.parseDouble(lat.getText());
             double dlon = Double.parseDouble(lon.getText());
             double m = Double.parseDouble(zm.getText());
             // Inverse function to the one above. 18 is the current maximum zoom
-            // available on standard renderers, so choose this is in case m
-            // should be zero
+            // available on standard renderers, so choose this is in case m should be zero
             int zoomLvl = 18;
-            if(m > 0)
-                zoomLvl = (int)Math.round((-1) * Math.log(m/10000000)/Math.log(2));
+            if (m > 0)
+                zoomLvl = (int) Math.round((-1) * Math.log(m/10000000)/Math.log(2));
 
             url.setText(OsmUrlToBounds.getURL(dlat, dlon, zoomLvl));
         } catch (NumberFormatException x) {
diff --git a/src/org/openstreetmap/josm/actions/MapRectifierWMSmenuAction.java b/src/org/openstreetmap/josm/actions/MapRectifierWMSmenuAction.java
index 135c5ca..d029658 100644
--- a/src/org/openstreetmap/josm/actions/MapRectifierWMSmenuAction.java
+++ b/src/org/openstreetmap/josm/actions/MapRectifierWMSmenuAction.java
@@ -128,22 +128,22 @@ public class MapRectifierWMSmenuAction extends JosmAction {
         ButtonGroup group = new ButtonGroup();
 
         JRadioButton firstBtn = null;
-        for(RectifierService s : services) {
+        for (RectifierService s : services) {
             JRadioButton serviceBtn = new JRadioButton(s.name);
-            if(firstBtn == null) {
+            if (firstBtn == null) {
                 firstBtn = serviceBtn;
             }
             // Checks clipboard contents against current service if no match has been found yet.
             // If the contents match, they will be inserted into the text field and the corresponding
             // service will be pre-selected.
-            if(!clip.isEmpty() && tfWmsUrl.getText().isEmpty()
+            if (!clip.isEmpty() && tfWmsUrl.getText().isEmpty()
                     && (s.urlRegEx.matcher(clip).find() || s.idValidator.matcher(clip).matches())) {
                 serviceBtn.setSelected(true);
                 tfWmsUrl.setText(clip);
             }
             s.btn = serviceBtn;
             group.add(serviceBtn);
-            if(!s.url.isEmpty()) {
+            if (!s.url.isEmpty()) {
                 panel.add(serviceBtn, GBC.std());
                 panel.add(new UrlLabel(s.url, tr("Visit Homepage")), GBC.eol().anchor(GridBagConstraints.EAST));
             } else {
@@ -152,7 +152,7 @@ public class MapRectifierWMSmenuAction extends JosmAction {
         }
 
         // Fallback in case no match was found
-        if(tfWmsUrl.getText().isEmpty() && firstBtn != null) {
+        if (tfWmsUrl.getText().isEmpty() && firstBtn != null) {
             firstBtn.setSelected(true);
         }
 
@@ -168,24 +168,24 @@ public class MapRectifierWMSmenuAction extends JosmAction {
 
         // This repeatedly shows the dialog in case there has been an error.
         // The loop is break;-ed if the users cancels
-        outer: while(true) {
+        outer: while (true) {
             diag.showDialog();
             int answer = diag.getValue();
             // Break loop when the user cancels
-            if(answer != 1) {
+            if (answer != 1) {
                 break;
             }
 
             String text = tfWmsUrl.getText().trim();
             // Loop all services until we find the selected one
-            for(RectifierService s : services) {
-                if(!s.isSelected()) {
+            for (RectifierService s : services) {
+                if (!s.isSelected()) {
                     continue;
                 }
 
                 // We've reached the custom WMS URL service
                 // Just set the URL and hope everything works out
-                if(s.wmsUrl.isEmpty()) {
+                if (s.wmsUrl.isEmpty()) {
                     try {
                         addWMSLayer(s.name + " (" + text + ")", text);
                         break outer;
@@ -196,7 +196,7 @@ public class MapRectifierWMSmenuAction extends JosmAction {
 
                 // First try to match if the entered string as an URL
                 Matcher m = s.urlRegEx.matcher(text);
-                if(m.find()) {
+                if (m.find()) {
                     String id = m.group(1);
                     String newURL = s.wmsUrl.replaceAll("__s__", id);
                     String title = s.name + " (" + id + ")";
@@ -204,7 +204,7 @@ public class MapRectifierWMSmenuAction extends JosmAction {
                     break outer;
                 }
                 // If not, look if it's a valid ID for the selected service
-                if(s.idValidator.matcher(text).matches()) {
+                if (s.idValidator.matcher(text).matches()) {
                     String newURL = s.wmsUrl.replaceAll("__s__", text);
                     String title = s.name + " (" + text + ")";
                     addWMSLayer(title, newURL);
@@ -216,7 +216,7 @@ public class MapRectifierWMSmenuAction extends JosmAction {
                 break;
             }
 
-            // and display an error message. The while(true) ensures that the dialog pops up again
+            // and display an error message. The while (true) ensures that the dialog pops up again
             JOptionPane.showMessageDialog(Main.parent,
                     tr("Couldn''t match the entered link or id to the selected service. Please try again."),
                     tr("No valid WMS URL or id"),
@@ -234,7 +234,6 @@ public class MapRectifierWMSmenuAction extends JosmAction {
      */
     private void addWMSLayer(String title, String url) {
         WMSLayer layer = new WMSLayer(new ImageryInfo(title, url));
-        layer.checkGrabberType();
         Main.main.addLayer(layer);
     }
 
diff --git a/src/org/openstreetmap/josm/actions/MergeLayerAction.java b/src/org/openstreetmap/josm/actions/MergeLayerAction.java
index a68009f..fa80ced 100644
--- a/src/org/openstreetmap/josm/actions/MergeLayerAction.java
+++ b/src/org/openstreetmap/josm/actions/MergeLayerAction.java
@@ -47,7 +47,7 @@ public class MergeLayerAction extends AbstractMergeAction {
                 for (final Layer sourceLayer: sourceLayers) {
                     if (sourceLayer != null && !sourceLayer.equals(targetLayer)) {
                         if (sourceLayer instanceof OsmDataLayer && targetLayer instanceof OsmDataLayer
-                                && ((OsmDataLayer)sourceLayer).isUploadDiscouraged() != ((OsmDataLayer)targetLayer).isUploadDiscouraged()) {
+                                && ((OsmDataLayer) sourceLayer).isUploadDiscouraged() != ((OsmDataLayer) targetLayer).isUploadDiscouraged()) {
                             if (warnMergingUploadDiscouragedLayers(sourceLayer, targetLayer)) {
                                 break;
                             }
diff --git a/src/org/openstreetmap/josm/actions/MergeNodesAction.java b/src/org/openstreetmap/josm/actions/MergeNodesAction.java
index e40ea01..7c7b5c1 100644
--- a/src/org/openstreetmap/josm/actions/MergeNodesAction.java
+++ b/src/org/openstreetmap/josm/actions/MergeNodesAction.java
@@ -1,4 +1,4 @@
-//License: GPL. For details, see LICENSE file.. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.actions;
 
 import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
@@ -197,7 +197,7 @@ public class MergeNodesAction extends JosmAction {
         for (Way w: OsmPrimitive.getFilteredList(OsmPrimitive.getReferrer(nodesToDelete), Way.class)) {
             List<Node> newNodes = new ArrayList<>(w.getNodesCount());
             for (Node n: w.getNodes()) {
-                if (! nodesToDelete.contains(n) && !n.equals(targetNode)) {
+                if (!nodesToDelete.contains(n) && !n.equals(targetNode)) {
                     newNodes.add(n);
                 } else if (newNodes.isEmpty()) {
                     newNodes.add(targetNode);
@@ -205,9 +205,8 @@ public class MergeNodesAction extends JosmAction {
                     // make sure we collapse a sequence of deleted nodes
                     // to exactly one occurrence of the merged target node
                     newNodes.add(targetNode);
-                } else {
-                    // drop the node
                 }
+                // else: drop the node
             }
             if (newNodes.size() < 2) {
                 if (w.getReferrers().isEmpty()) {
@@ -235,7 +234,7 @@ public class MergeNodesAction extends JosmAction {
                     );
                     return null;
                 }
-            } else if(newNodes.size() < 2 && w.getReferrers().isEmpty()) {
+            } else if (newNodes.size() < 2 && w.getReferrers().isEmpty()) {
                 waysToDelete.add(w);
             } else {
                 cmds.add(new ChangeNodesCommand(w, newNodes));
diff --git a/src/org/openstreetmap/josm/actions/MergeSelectionAction.java b/src/org/openstreetmap/josm/actions/MergeSelectionAction.java
index 051d7a9..39647d6 100644
--- a/src/org/openstreetmap/josm/actions/MergeSelectionAction.java
+++ b/src/org/openstreetmap/josm/actions/MergeSelectionAction.java
@@ -49,13 +49,13 @@ public class MergeSelectionAction extends AbstractMergeAction {
         if (targetLayer == null)
             return;
         if (getEditLayer().isUploadDiscouraged() && targetLayer instanceof OsmDataLayer
-                && !((OsmDataLayer)targetLayer).isUploadDiscouraged()
+                && !((OsmDataLayer) targetLayer).isUploadDiscouraged()
                 && getEditLayer().data.getAllSelected().size() > 1
                 && warnMergingUploadDiscouragedObjects(targetLayer)) {
             return;
         }
         MergeSourceBuildingVisitor builder = new MergeSourceBuildingVisitor(getEditLayer().data);
-        ((OsmDataLayer)targetLayer).mergeFrom(builder.build());
+        ((OsmDataLayer) targetLayer).mergeFrom(builder.build());
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/actions/MirrorAction.java b/src/org/openstreetmap/josm/actions/MirrorAction.java
index 94ed2ee..6020e02 100644
--- a/src/org/openstreetmap/josm/actions/MirrorAction.java
+++ b/src/org/openstreetmap/josm/actions/MirrorAction.java
@@ -49,9 +49,9 @@ public final class MirrorAction extends JosmAction {
 
         for (OsmPrimitive osm : sel) {
             if (osm instanceof Node) {
-                nodes.add((Node)osm);
+                nodes.add((Node) osm);
             } else if (osm instanceof Way) {
-                nodes.addAll(((Way)osm).getNodes());
+                nodes.addAll(((Way) osm).getNodes());
             }
         }
 
diff --git a/src/org/openstreetmap/josm/actions/MoveAction.java b/src/org/openstreetmap/josm/actions/MoveAction.java
index f5872fc..318881e 100644
--- a/src/org/openstreetmap/josm/actions/MoveAction.java
+++ b/src/org/openstreetmap/josm/actions/MoveAction.java
@@ -1,4 +1,4 @@
-//License: GPL. For details, see LICENSE file.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.actions;
 
 import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
@@ -120,8 +120,8 @@ public class MoveAction extends JosmAction {
         ? Main.main.undoRedo.commands.getLast() : null;
 
         getCurrentDataSet().beginUpdate();
-        if (c instanceof MoveCommand && affectedNodes.equals(((MoveCommand)c).getParticipatingPrimitives())) {
-            ((MoveCommand)c).moveAgain(distx, disty);
+        if (c instanceof MoveCommand && affectedNodes.equals(((MoveCommand) c).getParticipatingPrimitives())) {
+            ((MoveCommand) c).moveAgain(distx, disty);
         } else {
             c = new MoveCommand(selection, distx, disty);
             Main.main.undoRedo.add(c);
diff --git a/src/org/openstreetmap/josm/actions/MoveNodeAction.java b/src/org/openstreetmap/josm/actions/MoveNodeAction.java
index 535da43..60f900c 100644
--- a/src/org/openstreetmap/josm/actions/MoveNodeAction.java
+++ b/src/org/openstreetmap/josm/actions/MoveNodeAction.java
@@ -66,7 +66,7 @@ public final class MoveNodeAction extends JosmAction {
             setEnabled(false);
             return;
         }
-        if ((selection.size()) == 1 && (selection.toArray()[0] instanceof Node) ) {
+        if ((selection.size()) == 1 && (selection.toArray()[0] instanceof Node)) {
             setEnabled(true);
         } else {
             setEnabled(false);
diff --git a/src/org/openstreetmap/josm/actions/OpenFileAction.java b/src/org/openstreetmap/josm/actions/OpenFileAction.java
index 3e00348..d6c0c6d 100644
--- a/src/org/openstreetmap/josm/actions/OpenFileAction.java
+++ b/src/org/openstreetmap/josm/actions/OpenFileAction.java
@@ -109,12 +109,13 @@ public class OpenFileAction extends DiskAccessAction {
             for (final File file : files) {
                 if (file.exists()) {
                     this.files.add(file);
-                } else {
+                } else if (file.getParentFile() != null) {
                     // try to guess an extension using the specified fileFilter
                     final File[] matchingFiles = file.getParentFile().listFiles(new FilenameFilter() {
                         @Override
                         public boolean accept(File dir, String name) {
-                            return name.startsWith(file.getName()) && fileFilter.accept(new File(dir, name));
+                            return name.startsWith(file.getName())
+                                    && fileFilter != null && fileFilter.accept(new File(dir, name));
                         }
                     });
                     if (matchingFiles != null && matchingFiles.length == 1) {
@@ -156,8 +157,7 @@ public class OpenFileAction extends DiskAccessAction {
 
         protected void alertFilesNotMatchingWithImporter(Collection<File> files, FileImporter importer) {
             final StringBuilder msg = new StringBuilder();
-            msg.append("<html>");
-            msg.append(
+            msg.append("<html>").append(
                     trn(
                             "Cannot open {0} file with the file importer ''{1}''.",
                             "Cannot open {0} files with the file importer ''{1}''.",
@@ -165,8 +165,7 @@ public class OpenFileAction extends DiskAccessAction {
                             files.size(),
                             importer.filter.getDescription()
                     )
-            ).append("<br>");
-            msg.append("<ul>");
+            ).append("<br><ul>");
             for (File f: files) {
                 msg.append("<li>").append(f.getAbsolutePath()).append("</li>");
             }
@@ -183,22 +182,18 @@ public class OpenFileAction extends DiskAccessAction {
 
         protected void alertFilesWithUnknownImporter(Collection<File> files) {
             final StringBuilder msg = new StringBuilder();
-            msg.append("<html>");
-            msg.append(
+            msg.append("<html>").append(
                     trn(
                             "Cannot open {0} file because file does not exist or no suitable file importer is available.",
                             "Cannot open {0} files because files do not exist or no suitable file importer is available.",
                             files.size(),
                             files.size()
                     )
-            ).append("<br>");
-            msg.append("<ul>");
+            ).append("<br><ul>");
             for (File f: files) {
-                msg.append("<li>");
-                msg.append(f.getAbsolutePath());
-                msg.append(" (<i>");
-                msg.append(f.exists() ? tr("no importer") : tr("does not exist"));
-                msg.append("</i>)</li>");
+                msg.append("<li>").append(f.getAbsolutePath()).append(" (<i>")
+                   .append(f.exists() ? tr("no importer") : tr("does not exist"))
+                   .append("</i>)</li>");
             }
             msg.append("</ul>");
 
diff --git a/src/org/openstreetmap/josm/actions/OpenLocationAction.java b/src/org/openstreetmap/josm/actions/OpenLocationAction.java
index 7a19b12..6b025be 100644
--- a/src/org/openstreetmap/josm/actions/OpenLocationAction.java
+++ b/src/org/openstreetmap/josm/actions/OpenLocationAction.java
@@ -79,7 +79,7 @@ public class OpenLocationAction extends JosmAction {
     /**
      * Restore the current history from the preferences
      *
-     * @param cbHistory
+     * @param cbHistory the history combo box
      */
     protected void restoreUploadAddressHistory(HistoryComboBox cbHistory) {
         List<String> cmtHistory = new LinkedList<>(Main.pref.getCollection(getClass().getName() + ".uploadAddressHistory",
@@ -92,7 +92,7 @@ public class OpenLocationAction extends JosmAction {
 
     /**
      * Remind the current history in the preferences
-     * @param cbHistory
+     * @param cbHistory the history combo box
      */
     protected void remindUploadAddressHistory(HistoryComboBox cbHistory) {
         cbHistory.addCurrentItemToHistory();
@@ -217,13 +217,14 @@ public class OpenLocationAction extends JosmAction {
     Collection<DownloadTask> askWhichTasksToLoad(final Collection<DownloadTask> tasks) {
         final JList<DownloadTask> list = new JList<>(tasks.toArray(new DownloadTask[tasks.size()]));
         list.addSelectionInterval(0, tasks.size() - 1);
-        final ExtendedDialog dialog = new ExtendedDialog(Main.parent, tr("Which tasks to perform?"), new String[]{tr("Ok"), tr("Cancel")}, true) {{
+        final ExtendedDialog dialog = new ExtendedDialog(Main.parent,
+                tr("Which tasks to perform?"), new String[]{tr("Ok"), tr("Cancel")}, true) { {
             setButtonIcons(new String[]{"ok", "cancel"});
             final JPanel pane = new JPanel(new GridLayout(2, 1));
             pane.add(new JLabel(tr("Which tasks to perform?")));
             pane.add(list);
             setContent(pane);
-        }};
+        } };
         dialog.showDialog();
         return dialog.getValue() == 1 ? list.getSelectedValuesList() : Collections.<DownloadTask>emptyList();
     }
diff --git a/src/org/openstreetmap/josm/actions/OrthogonalizeAction.java b/src/org/openstreetmap/josm/actions/OrthogonalizeAction.java
index c835a7c..e132ac5 100644
--- a/src/org/openstreetmap/josm/actions/OrthogonalizeAction.java
+++ b/src/org/openstreetmap/josm/actions/OrthogonalizeAction.java
@@ -1,5 +1,4 @@
-// License: GPL. See LICENSE file for details.
-//
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.actions;
 
 import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
@@ -93,6 +92,7 @@ public final class OrthogonalizeAction extends JosmAction {
                             Shortcut.SHIFT),
                     true, "action/orthogonalize/undo", true);
         }
+
         @Override
         public void actionPerformed(ActionEvent e) {
             if (!isEnabled())
@@ -101,20 +101,21 @@ public final class OrthogonalizeAction extends JosmAction {
             final Collection<OsmPrimitive> sel = getCurrentDataSet().getSelected();
             try {
                 for (OsmPrimitive p : sel) {
-                    if (! (p instanceof Node)) throw new InvalidUserInputException();
+                    if (!(p instanceof Node)) throw new InvalidUserInputException("selected object is not a node");
                     Node n = (Node) p;
                     if (rememberMovements.containsKey(n)) {
                         EastNorth tmp = rememberMovements.get(n);
-                        commands.add(new MoveCommand(n, - tmp.east(), - tmp.north()));
+                        commands.add(new MoveCommand(n, -tmp.east(), -tmp.north()));
                         rememberMovements.remove(n);
                     }
                 }
                 if (!commands.isEmpty()) {
                     Main.main.undoRedo.add(new SequenceCommand(tr("Orthogonalize / Undo"), commands));
                     Main.map.repaint();
-                } else throw new InvalidUserInputException();
-            }
-            catch (InvalidUserInputException ex) {
+                } else {
+                    throw new InvalidUserInputException("Commands are empty");
+                }
+            } catch (InvalidUserInputException ex) {
                 new Notification(
                         tr("Orthogonalize Shape / Undo<br>"+
                         "Please select nodes that were moved by the previous Orthogonalize Shape action!"))
@@ -153,8 +154,7 @@ public final class OrthogonalizeAction extends JosmAction {
             for (OsmPrimitive p : sel) {
                 if (p instanceof Node) {
                     nodeList.add((Node) p);
-                }
-                else if (p instanceof Way) {
+                } else if (p instanceof Way) {
                     wayDataList.add(new WayData((Way) p));
                 } else
                     throw new InvalidUserInputException(tr("Selection must consist only of ways and nodes."));
@@ -168,8 +168,7 @@ public final class OrthogonalizeAction extends JosmAction {
 
                     if (nodeList.size() == 2) {  // fixed direction
                         commands.addAll(orthogonalize(wayDataList, nodeList));
-                    }
-                    else if (nodeList.isEmpty()) {
+                    } else if (nodeList.isEmpty()) {
                         List<List<WayData>> groups = buildGroups(wayDataList);
                         for (List<WayData> g: groups) {
                             commands.addAll(orthogonalize(g, nodeList));
@@ -266,8 +265,7 @@ public final class OrthogonalizeAction extends JosmAction {
                     totSum = EN.sum(totSum, w.segSum);
                 }
                 headingAll = EN.polar(new EastNorth(0., 0.), totSum);
-            }
-            else {
+            } else {
                 headingAll = EN.polar(headingNodes.get(0).getEastNorth(), headingNodes.get(1).getEastNorth());
                 for (WayData w : wayDataList) {
                     w.calcDirections(Direction.RIGHT);
@@ -303,7 +301,7 @@ public final class OrthogonalizeAction extends JosmAction {
 
         // rotate
         for (Node n: allNodes) {
-            EastNorth tmp = EN.rotateCC(pivot, n.getEastNorth(), - headingAll);
+            EastNorth tmp = EN.rotateCC(pivot, n.getEastNorth(), -headingAll);
             nX.put(n, tmp.east());
             nY.put(n, tmp.north());
         }
@@ -312,7 +310,7 @@ public final class OrthogonalizeAction extends JosmAction {
         final Direction[] HORIZONTAL = {Direction.RIGHT, Direction.LEFT};
         final Direction[] VERTICAL = {Direction.UP, Direction.DOWN};
         final Direction[][] ORIENTATIONS = {HORIZONTAL, VERTICAL};
-        for (Direction[] orientation : ORIENTATIONS){
+        for (Direction[] orientation : ORIENTATIONS) {
             final Set<Node> s = new HashSet<>(allNodes);
             int s_size = s.size();
             for (int dummy = 0; dummy < s_size; ++dummy) {
@@ -328,15 +326,15 @@ public final class OrthogonalizeAction extends JosmAction {
                 while (somethingHappened) {
                     somethingHappened = false;
                     for (WayData w : wayDataList) {
-                        for (int i=0; i < w.nSeg; ++i) {
+                        for (int i = 0; i < w.nSeg; ++i) {
                             Node n1 = w.way.getNodes().get(i);
                             Node n2 = w.way.getNodes().get(i+1);
                             if (Arrays.asList(orientation).contains(w.segDirections[i])) {
-                                if (cs.contains(n1) && ! cs.contains(n2)) {
+                                if (cs.contains(n1) && !cs.contains(n2)) {
                                     cs.add(n2);
                                     somethingHappened = true;
                                 }
-                                if (cs.contains(n2) && ! cs.contains(n1)) {
+                                if (cs.contains(n2) && !cs.contains(n1)) {
                                     cs.add(n1);
                                     somethingHappened = true;
                                 }
@@ -391,8 +389,7 @@ public final class OrthogonalizeAction extends JosmAction {
                 if (Math.abs(dx) > Math.abs(EPSILON * tmp.east()) ||
                         Math.abs(dy) > Math.abs(EPSILON * tmp.east()))
                     throw new AssertionError();
-            }
-            else {
+            } else {
                 OrthogonalizeAction.rememberMovements.put(n, new EastNorth(dx, dy));
                 commands.add(new MoveCommand(n, dx, dy));
             }
@@ -412,6 +409,7 @@ public final class OrthogonalizeAction extends JosmAction {
         public EastNorth segSum;          // (Vector-)sum of all horizontal segments plus the sum of all vertical
         // segments turned by 90 degrees
         public double heading;            // heading of segSum == approximate heading of the way
+
         public WayData(Way pWay) {
             way = pWay;
             nNode = way.getNodes().size();
@@ -424,19 +422,19 @@ public final class OrthogonalizeAction extends JosmAction {
          * Then sum up all horizontal / vertical segments to have a good guess for the
          * heading of the entire way.
          * @param pInitialDirection initial direction
-         * @throws InvalidUserInputException
+         * @throws InvalidUserInputException if selected ways have an angle different from 90 or 180 degrees
          */
         public void calcDirections(Direction pInitialDirection) throws InvalidUserInputException {
             final EastNorth[] en = new EastNorth[nNode]; // alias: way.getNodes().get(i).getEastNorth() ---> en[i]
-            for (int i=0; i < nNode; i++) {
+            for (int i = 0; i < nNode; i++) {
                 en[i] = new EastNorth(way.getNodes().get(i).getEastNorth().east(), way.getNodes().get(i).getEastNorth().north());
             }
             segDirections = new Direction[nSeg];
             Direction direction = pInitialDirection;
             segDirections[0] = direction;
-            for (int i=0; i < nSeg - 1; i++) {
-                double h1 = EN.polar(en[i],en[i+1]);
-                double h2 = EN.polar(en[i+1],en[i+2]);
+            for (int i = 0; i < nSeg - 1; i++) {
+                double h1 = EN.polar(en[i], en[i+1]);
+                double h2 = EN.polar(en[i+1], en[i+2]);
                 try {
                     direction = direction.changeBy(angleToDirectionChange(h2 - h1, TOLERANCE1));
                 } catch (RejectedAngleException ex) {
@@ -446,18 +444,18 @@ public final class OrthogonalizeAction extends JosmAction {
             }
 
             // sum up segments
-            EastNorth h = new EastNorth(0.,0.);
-            EastNorth v = new EastNorth(0.,0.);
+            EastNorth h = new EastNorth(0., 0.);
+            EastNorth v = new EastNorth(0., 0.);
             for (int i = 0; i < nSeg; ++i) {
                 EastNorth segment = EN.diff(en[i+1], en[i]);
                 if      (segDirections[i] == Direction.RIGHT) {
-                    h = EN.sum(h,segment);
+                    h = EN.sum(h, segment);
                 } else if (segDirections[i] == Direction.UP) {
-                    v = EN.sum(v,segment);
+                    v = EN.sum(v, segment);
                 } else if (segDirections[i] == Direction.LEFT) {
-                    h = EN.diff(h,segment);
+                    h = EN.diff(h, segment);
                 } else if (segDirections[i] == Direction.DOWN) {
-                    v = EN.diff(v,segment);
+                    v = EN.diff(v, segment);
                 } else throw new IllegalStateException();
                 /**
                  * When summing up the length of the sum vector should increase.
@@ -473,9 +471,9 @@ public final class OrthogonalizeAction extends JosmAction {
                 //                }
             }
             // rotate the vertical vector by 90 degrees (clockwise) and add it to the horizontal vector
-            segSum = EN.sum(h, new EastNorth(v.north(), - v.east()));
+            segSum = EN.sum(h, new EastNorth(v.north(), -v.east()));
             //            if (EN.abs(segSum) < lh) throw new AssertionError();
-            this.heading = EN.polar(new EastNorth(0.,0.), segSum);
+            this.heading = EN.polar(new EastNorth(0., 0.), segSum);
         }
     }
 
@@ -510,7 +508,7 @@ public final class OrthogonalizeAction extends JosmAction {
         while (a > Math.PI) {
             a -= 2 * Math.PI;
         }
-        while (a <= - Math.PI) {
+        while (a <= -Math.PI) {
             a += 2 * Math.PI;
         }
         return a;
@@ -523,6 +521,7 @@ public final class OrthogonalizeAction extends JosmAction {
         private EN() {
             // Hide implicit public constructor for utility class
         }
+
         /**
          * Rotate counter-clock-wise.
          */
@@ -535,12 +534,15 @@ public final class OrthogonalizeAction extends JosmAction {
             double ny =  sinPhi * x + cosPhi * y + pivot.north();
             return new EastNorth(nx, ny);
         }
+
         public static EastNorth sum(EastNorth en1, EastNorth en2) {
             return new EastNorth(en1.east() + en2.east(), en1.north() + en2.north());
         }
+
         public static EastNorth diff(EastNorth en1, EastNorth en2) {
             return new EastNorth(en1.east() - en2.east(), en1.north() - en2.north());
         }
+
         public static double polar(EastNorth en1, EastNorth en2) {
             return Math.atan2(en2.north() - en1.north(), en2.east() -  en1.east());
         }
@@ -580,13 +582,12 @@ public final class OrthogonalizeAction extends JosmAction {
         InvalidUserInputException(String message) {
             super(message);
         }
+
         InvalidUserInputException(String message, Throwable cause) {
             super(message, cause);
         }
-        InvalidUserInputException() {
-            super();
-        }
     }
+
     /**
      * Exception: angle cannot be recognized as 0, 90, 180 or 270 degrees
      */
diff --git a/src/org/openstreetmap/josm/actions/OsmPrimitiveAction.java b/src/org/openstreetmap/josm/actions/OsmPrimitiveAction.java
index 1655936..97a23fd 100644
--- a/src/org/openstreetmap/josm/actions/OsmPrimitiveAction.java
+++ b/src/org/openstreetmap/josm/actions/OsmPrimitiveAction.java
@@ -17,5 +17,5 @@ public interface OsmPrimitiveAction extends Action {
      * Specifies the working set of primitives.
      * @param primitives The new working set of primitives. Can be null or empty
      */
-    public abstract void setPrimitives(Collection<? extends OsmPrimitive> primitives);
+    void setPrimitives(Collection<? extends OsmPrimitive> primitives);
 }
diff --git a/src/org/openstreetmap/josm/actions/OverpassDownloadAction.java b/src/org/openstreetmap/josm/actions/OverpassDownloadAction.java
new file mode 100644
index 0000000..31bba44
--- /dev/null
+++ b/src/org/openstreetmap/josm/actions/OverpassDownloadAction.java
@@ -0,0 +1,249 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.actions;
+
+import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.GridLayout;
+import java.awt.Rectangle;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Deque;
+import java.util.LinkedList;
+import java.util.concurrent.Future;
+
+import javax.swing.AbstractAction;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
+import javax.swing.JScrollPane;
+import javax.swing.plaf.basic.BasicArrowButton;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.actions.downloadtasks.DownloadOsmTask;
+import org.openstreetmap.josm.actions.downloadtasks.PostDownloadHandler;
+import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.preferences.CollectionProperty;
+import org.openstreetmap.josm.data.preferences.IntegerProperty;
+import org.openstreetmap.josm.data.preferences.StringProperty;
+import org.openstreetmap.josm.gui.HelpAwareOptionPane;
+import org.openstreetmap.josm.gui.download.DownloadDialog;
+import org.openstreetmap.josm.gui.util.GuiHelper;
+import org.openstreetmap.josm.gui.widgets.HistoryComboBox;
+import org.openstreetmap.josm.gui.widgets.JosmTextArea;
+import org.openstreetmap.josm.io.OverpassDownloadReader;
+import org.openstreetmap.josm.tools.GBC;
+import org.openstreetmap.josm.tools.OverpassTurboQueryWizard;
+import org.openstreetmap.josm.tools.Shortcut;
+import org.openstreetmap.josm.tools.Utils;
+
+/**
+ * Download map data from Overpass API server.
+ * @since 8684
+ */
+public class OverpassDownloadAction extends JosmAction {
+
+    /**
+     * Constructs a new {@code OverpassDownloadAction}.
+     */
+    public OverpassDownloadAction() {
+        super(tr("Download from Overpass API ..."), "download-overpass", tr("Download map data from Overpass API server."),
+                // CHECKSTYLE.OFF: LineLength
+                Shortcut.registerShortcut("file:download-overpass", tr("File: {0}", tr("Download from Overpass API ...")), KeyEvent.VK_DOWN, Shortcut.ALT_SHIFT),
+                // CHECKSTYLE.ON: LineLength
+                true, "overpassdownload/download", true);
+        putValue("help", ht("/Action/OverpassDownload"));
+    }
+
+    @Override
+    public void actionPerformed(ActionEvent e) {
+        OverpassDownloadDialog dialog = OverpassDownloadDialog.getInstance();
+        dialog.restoreSettings();
+        dialog.setVisible(true);
+        if (!dialog.isCanceled()) {
+            dialog.rememberSettings();
+            Bounds area = dialog.getSelectedDownloadArea();
+            DownloadOsmTask task = new DownloadOsmTask();
+            Future<?> future = task.download(
+                    new OverpassDownloadReader(area, dialog.getOverpassServer(), dialog.getOverpassQuery()),
+                    dialog.isNewLayerRequired(), area, null);
+            Main.worker.submit(new PostDownloadHandler(task, future));
+        }
+    }
+
+    static final class OverpassDownloadDialog extends DownloadDialog {
+
+        protected HistoryComboBox overpassServer;
+        protected HistoryComboBox overpassWizard;
+        protected JosmTextArea overpassQuery;
+        private static OverpassDownloadDialog instance;
+        static final StringProperty OVERPASS_SERVER = new StringProperty("download.overpass.server", "http://overpass-api.de/api/");
+        static final CollectionProperty OVERPASS_SERVER_HISTORY = new CollectionProperty("download.overpass.servers",
+                Arrays.asList("http://overpass-api.de/api/", "http://overpass.osm.rambler.ru/cgi/"));
+        static final CollectionProperty OVERPASS_WIZARD_HISTORY = new CollectionProperty("download.overpass.wizard", new ArrayList<String>());
+
+        private OverpassDownloadDialog(Component parent) {
+            super(parent, ht("/Action/OverpassDownload"));
+            cbDownloadOsmData.setEnabled(false);
+            cbDownloadOsmData.setSelected(false);
+            cbDownloadGpxData.setVisible(false);
+            cbDownloadNotes.setVisible(false);
+            cbStartup.setVisible(false);
+        }
+
+        public static OverpassDownloadDialog getInstance() {
+            if (instance == null) {
+                instance = new OverpassDownloadDialog(Main.parent);
+            }
+            return instance;
+        }
+
+        @Override
+        protected void buildMainPanelAboveDownloadSelections(JPanel pnl) {
+
+            pnl.add(new JLabel(), GBC.eol()); // needed for the invisible checkboxes cbDownloadGpxData, cbDownloadNotes
+
+            final String tooltip = tr("Builds an Overpass query using the Overpass Turbo query wizard");
+            overpassWizard = new HistoryComboBox();
+            overpassWizard.setToolTipText(tooltip);
+            final JButton buildQuery = new JButton(tr("Build query"));
+            buildQuery.addActionListener(new AbstractAction() {
+                @Override
+                public void actionPerformed(ActionEvent e) {
+                    final String overpassWizardText = overpassWizard.getText();
+                    try {
+                        overpassQuery.setText(OverpassTurboQueryWizard.getInstance().constructQuery(overpassWizardText));
+                    } catch (OverpassTurboQueryWizard.ParseException ex) {
+                        HelpAwareOptionPane.showOptionDialog(
+                                Main.parent,
+                                tr("<html>The Overpass wizard could not parse the following query:"
+                                        + Utils.joinAsHtmlUnorderedList(Collections.singleton(overpassWizardText))),
+                                tr("Parse error"),
+                                JOptionPane.ERROR_MESSAGE,
+                                null
+                        );
+                    }
+                }
+            });
+            buildQuery.setToolTipText(tooltip);
+            pnl.add(buildQuery, GBC.std().insets(5, 5, 5, 5));
+            pnl.add(overpassWizard, GBC.eol().fill(GBC.HORIZONTAL));
+
+            overpassQuery = new JosmTextArea("", 8, 80);
+            overpassQuery.setFont(GuiHelper.getMonospacedFont(overpassQuery));
+            JScrollPane scrollPane = new JScrollPane(overpassQuery);
+            final JPanel pane = new JPanel(new BorderLayout());
+            final BasicArrowButton arrowButton = new BasicArrowButton(BasicArrowButton.SOUTH);
+            arrowButton.addActionListener(new AbstractAction() {
+                @Override
+                public void actionPerformed(ActionEvent e) {
+                    OverpassQueryHistoryPopup.show(arrowButton, OverpassDownloadDialog.this);
+                }
+            });
+            pane.add(scrollPane, BorderLayout.CENTER);
+            pane.add(arrowButton, BorderLayout.EAST);
+            pnl.add(new JLabel(tr("Overpass query: ")), GBC.std().insets(5, 5, 5, 5));
+            GBC gbc = GBC.eol().fill(GBC.HORIZONTAL);
+            gbc.ipady = 200;
+            pnl.add(pane, gbc);
+
+            overpassServer = new HistoryComboBox();
+            pnl.add(new JLabel(tr("Overpass server: ")), GBC.std().insets(5, 5, 5, 5));
+            pnl.add(overpassServer, GBC.eol().fill(GBC.HORIZONTAL));
+
+        }
+
+        public String getOverpassServer() {
+            return overpassServer.getText();
+        }
+
+        public String getOverpassQuery() {
+            return overpassQuery.getText();
+        }
+
+        public void setOverpassQuery(String text) {
+            overpassQuery.setText(text);
+        }
+
+        @Override
+        public void restoreSettings() {
+            super.restoreSettings();
+            overpassServer.setPossibleItems(OVERPASS_SERVER_HISTORY.get());
+            overpassServer.setText(OVERPASS_SERVER.get());
+            overpassWizard.setPossibleItems(OVERPASS_WIZARD_HISTORY.get());
+        }
+
+        @Override
+        public void rememberSettings() {
+            super.rememberSettings();
+            overpassWizard.addCurrentItemToHistory();
+            OVERPASS_SERVER.put(getOverpassServer());
+            OVERPASS_SERVER_HISTORY.put(overpassServer.getHistory());
+            OVERPASS_WIZARD_HISTORY.put(overpassWizard.getHistory());
+            OverpassQueryHistoryPopup.addToHistory(getOverpassQuery());
+        }
+
+    }
+
+    static class OverpassQueryHistoryPopup extends JPopupMenu {
+
+        static final CollectionProperty OVERPASS_QUERY_HISTORY = new CollectionProperty("download.overpass.query", new ArrayList<String>());
+        static final IntegerProperty OVERPASS_QUERY_HISTORY_SIZE = new IntegerProperty("download.overpass.query.size", 12);
+
+        OverpassQueryHistoryPopup(final OverpassDownloadDialog dialog) {
+            final Collection<String> history = OVERPASS_QUERY_HISTORY.get();
+            setLayout(new GridLayout((int) Math.ceil(history.size() / 2.), 2));
+            for (final String i : history) {
+                add(new OverpassQueryHistoryItem(i, dialog));
+            }
+        }
+
+        static void show(final JComponent parent, final OverpassDownloadDialog dialog) {
+            final OverpassQueryHistoryPopup menu = new OverpassQueryHistoryPopup(dialog);
+            final Rectangle r = parent.getBounds();
+            menu.show(parent.getParent(), r.x + r.width - (int) menu.getPreferredSize().getWidth(), r.y + r.height);
+        }
+
+        static void addToHistory(final String query) {
+            final Deque<String> history = new LinkedList<>(OVERPASS_QUERY_HISTORY.get());
+            if (!history.contains(query)) {
+                history.add(query);
+            }
+            while (history.size() > OVERPASS_QUERY_HISTORY_SIZE.get()) {
+                history.removeFirst();
+            }
+            OVERPASS_QUERY_HISTORY.put(history);
+        }
+    }
+
+    static class OverpassQueryHistoryItem extends JMenuItem implements ActionListener {
+
+        final String query;
+        final OverpassDownloadDialog dialog;
+
+        OverpassQueryHistoryItem(final String query, final OverpassDownloadDialog dialog) {
+            this.query = query;
+            this.dialog = dialog;
+            setText("<html><pre style='width:300px;'>" +
+                    Utils.escapeReservedCharactersHTML(Utils.restrictStringLines(query, 7)));
+            addActionListener(this);
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            dialog.setOverpassQuery(query);
+        }
+    }
+
+}
diff --git a/src/org/openstreetmap/josm/actions/ParameterizedAction.java b/src/org/openstreetmap/josm/actions/ParameterizedAction.java
index 051abc6..988c724 100644
--- a/src/org/openstreetmap/josm/actions/ParameterizedAction.java
+++ b/src/org/openstreetmap/josm/actions/ParameterizedAction.java
@@ -8,6 +8,6 @@ import java.util.Map;
 public interface ParameterizedAction extends AdaptableAction {
 
     List<ActionParameter<?>> getActionParameters();
-    void actionPerformed(ActionEvent e, Map<String, Object> parameters);
 
+    void actionPerformed(ActionEvent e, Map<String, Object> parameters);
 }
diff --git a/src/org/openstreetmap/josm/actions/ParameterizedActionDecorator.java b/src/org/openstreetmap/josm/actions/ParameterizedActionDecorator.java
index ca41429..fb3d07a 100644
--- a/src/org/openstreetmap/josm/actions/ParameterizedActionDecorator.java
+++ b/src/org/openstreetmap/josm/actions/ParameterizedActionDecorator.java
@@ -22,26 +22,32 @@ public class ParameterizedActionDecorator implements Action {
     public void addPropertyChangeListener(PropertyChangeListener listener) {
         action.addPropertyChangeListener(listener);
     }
+
     @Override
     public Object getValue(String key) {
         return action.getValue(key);
     }
+
     @Override
     public boolean isEnabled() {
         return action.isEnabled();
     }
+
     @Override
     public void putValue(String key, Object value) {
         action.putValue(key, value);
     }
+
     @Override
     public void removePropertyChangeListener(PropertyChangeListener listener) {
         action.removePropertyChangeListener(listener);
     }
+
     @Override
     public void setEnabled(boolean b) {
         action.setEnabled(b);
     }
+
     @Override
     public void actionPerformed(ActionEvent e) {
         action.actionPerformed(e, parameters);
@@ -50,5 +56,4 @@ public class ParameterizedActionDecorator implements Action {
     public Map<String, Object> getParameters() {
         return parameters;
     }
-
 }
diff --git a/src/org/openstreetmap/josm/actions/PasteAction.java b/src/org/openstreetmap/josm/actions/PasteAction.java
index a0c270f..96e5873 100644
--- a/src/org/openstreetmap/josm/actions/PasteAction.java
+++ b/src/org/openstreetmap/josm/actions/PasteAction.java
@@ -67,14 +67,22 @@ public final class PasteAction extends JosmAction implements PasteBufferChangedL
         boolean incomplete = false;
         for (PrimitiveData data : pasteBuffer.getAll()) {
             if (data instanceof NodeData) {
-                NodeData n = (NodeData)data;
+                NodeData n = (NodeData) data;
                 if (n.getEastNorth() != null) {
                     double east = n.getEastNorth().east();
                     double north = n.getEastNorth().north();
-                    if (east > maxEast) { maxEast = east; }
-                    if (east < minEast) { minEast = east; }
-                    if (north > maxNorth) { maxNorth = north; }
-                    if (north < minNorth) { minNorth = north; }
+                    if (east > maxEast) {
+                        maxEast = east;
+                    }
+                    if (east < minEast) {
+                        minEast = east;
+                    }
+                    if (north > maxNorth) {
+                        maxNorth = north;
+                    }
+                    if (north < minNorth) {
+                        minNorth = north;
+                    }
                 }
             }
             if (data.isIncomplete()) {
@@ -96,7 +104,7 @@ public final class PasteAction extends JosmAction implements PasteBufferChangedL
             final Point mp = MouseInfo.getPointerInfo().getLocation();
             final Point tl = Main.map.mapView.getLocationOnScreen();
             final Point pos = new Point(mp.x-tl.x, mp.y-tl.y);
-            if(Main.map.mapView.contains(pos)) {
+            if (Main.map.mapView.contains(pos)) {
                 mPosition = Main.map.mapView.getEastNorth(pos.x, pos.y);
             }
         }
@@ -132,22 +140,22 @@ public final class PasteAction extends JosmAction implements PasteBufferChangedL
         // Update references in copied buffer
         for (PrimitiveData data:bufferCopy) {
             if (data instanceof NodeData) {
-                NodeData nodeData = (NodeData)data;
+                NodeData nodeData = (NodeData) data;
                 if (Main.main.getEditLayer() == source) {
                     nodeData.setEastNorth(nodeData.getEastNorth().add(offsetEast, offsetNorth));
                 }
             } else if (data instanceof WayData) {
                 List<Long> newNodes = new ArrayList<>();
-                for (Long oldNodeId: ((WayData)data).getNodes()) {
+                for (Long oldNodeId: ((WayData) data).getNodes()) {
                     Long newNodeId = newNodeIds.get(oldNodeId);
                     if (newNodeId != null) {
                         newNodes.add(newNodeId);
                     }
                 }
-                ((WayData)data).setNodes(newNodes);
+                ((WayData) data).setNodes(newNodes);
             } else if (data instanceof RelationData) {
                 List<RelationMemberData> newMembers = new ArrayList<>();
-                for (RelationMemberData member: ((RelationData)data).getMembers()) {
+                for (RelationMemberData member: ((RelationData) data).getMembers()) {
                     OsmPrimitiveType memberType = member.getMemberType();
                     Long newId = null;
                     switch (memberType) {
@@ -165,12 +173,11 @@ public final class PasteAction extends JosmAction implements PasteBufferChangedL
                         newMembers.add(new RelationMemberData(member.getRole(), memberType, newId));
                     }
                 }
-                ((RelationData)data).setMembers(newMembers);
+                ((RelationData) data).setMembers(newMembers);
             }
         }
 
         /* Now execute the commands to add the duplicated contents of the paste buffer to the map */
-
         Main.main.undoRedo.add(new AddPrimitivesCommand(bufferCopy, toSelect));
         Main.map.mapView.repaint();
     }
diff --git a/src/org/openstreetmap/josm/actions/PasteTagsAction.java b/src/org/openstreetmap/josm/actions/PasteTagsAction.java
index 4cfe5a9..89a8246 100644
--- a/src/org/openstreetmap/josm/actions/PasteTagsAction.java
+++ b/src/org/openstreetmap/josm/actions/PasteTagsAction.java
@@ -9,7 +9,7 @@ import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.HashMap;
+import java.util.EnumMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -77,11 +77,10 @@ public final class PasteTagsAction extends JosmAction {
         /**
          * Replies all primitives of type <code>type</code> in the current selection.
          *
-         * @param <T>
          * @param type  the type
          * @return all primitives of type <code>type</code> in the current selection.
          */
-        protected <T extends PrimitiveData> Collection<? extends PrimitiveData> getSourcePrimitivesByType(OsmPrimitiveType type) {
+        protected Collection<? extends PrimitiveData> getSourcePrimitivesByType(OsmPrimitiveType type) {
             return PrimitiveData.getFilteredList(source, type);
         }
 
@@ -89,12 +88,11 @@ public final class PasteTagsAction extends JosmAction {
          * Replies the collection of tags for all primitives of type <code>type</code> in the current
          * selection
          *
-         * @param <T>
          * @param type  the type
          * @return the collection of tags for all primitives of type <code>type</code> in the current
          * selection
          */
-        protected <T extends OsmPrimitive> TagCollection getSourceTagsByType(OsmPrimitiveType type) {
+        protected TagCollection getSourceTagsByType(OsmPrimitiveType type) {
             return TagCollection.unionOfAllPrimitives(getSourcePrimitivesByType(type));
         }
 
@@ -102,13 +100,12 @@ public final class PasteTagsAction extends JosmAction {
          * Replies true if there is at least one tag in the current selection for primitives of
          * type <code>type</code>
          *
-         * @param <T>
          * @param type the type
          * @return true if there is at least one tag in the current selection for primitives of
          * type <code>type</code>
          */
-        protected <T extends OsmPrimitive> boolean hasSourceTagsByType(OsmPrimitiveType type) {
-            return ! getSourceTagsByType(type).isEmpty();
+        protected boolean hasSourceTagsByType(OsmPrimitiveType type) {
+            return !getSourceTagsByType(type).isEmpty();
         }
 
         protected void buildChangeCommand(Collection<? extends OsmPrimitive> selection, TagCollection tc) {
@@ -118,7 +115,7 @@ public final class PasteTagsAction extends JosmAction {
         }
 
         protected Map<OsmPrimitiveType, Integer> getSourceStatistics() {
-            Map<OsmPrimitiveType, Integer> ret = new HashMap<>();
+            Map<OsmPrimitiveType, Integer> ret = new EnumMap<>(OsmPrimitiveType.class);
             for (OsmPrimitiveType type: OsmPrimitiveType.dataValues()) {
                 if (!getSourceTagsByType(type).isEmpty()) {
                     ret.put(type, getSourcePrimitivesByType(type).size());
@@ -128,7 +125,7 @@ public final class PasteTagsAction extends JosmAction {
         }
 
         protected Map<OsmPrimitiveType, Integer> getTargetStatistics() {
-            Map<OsmPrimitiveType, Integer> ret = new HashMap<>();
+            Map<OsmPrimitiveType, Integer> ret = new EnumMap<>(OsmPrimitiveType.class);
             for (OsmPrimitiveType type: OsmPrimitiveType.dataValues()) {
                 int count = OsmPrimitive.getFilteredList(target, type.getOsmClass()).size();
                 if (count > 0) {
@@ -176,12 +173,11 @@ public final class PasteTagsAction extends JosmAction {
          * Replies true if there is at least one primitive of type <code>type</code>
          * is in the target collection
          *
-         * @param <T>
          * @param type  the type to look for
          * @return true if there is at least one primitive of type <code>type</code> in the collection
          * <code>selection</code>
          */
-        protected <T extends OsmPrimitive> boolean hasTargetPrimitives(Class<T> type) {
+        protected boolean hasTargetPrimitives(Class<? extends OsmPrimitive> type) {
             return !OsmPrimitive.getFilteredList(target, type).isEmpty();
         }
 
@@ -195,7 +191,7 @@ public final class PasteTagsAction extends JosmAction {
             for (OsmPrimitiveType type : OsmPrimitiveType.dataValues()) {
                 if (hasTargetPrimitives(type.getOsmClass())) {
                     TagCollection tc = TagCollection.unionOfAllPrimitives(getSourcePrimitivesByType(type));
-                    if (!tc.isEmpty() && ! tc.isApplicableToPrimitive())
+                    if (!tc.isEmpty() && !tc.isApplicableToPrimitive())
                         return false;
                 }
             }
@@ -266,7 +262,7 @@ public final class PasteTagsAction extends JosmAction {
      */
     public static boolean pasteTagsFromText(Collection<OsmPrimitive> selection, String text) {
         Map<String, String> tags = TextTagParser.readTagsFromText(text);
-        if (tags==null || tags.isEmpty()) {
+        if (tags == null || tags.isEmpty()) {
             TextTagParser.showBadBufferMessage(help);
             return false;
         }
@@ -275,7 +271,7 @@ public final class PasteTagsAction extends JosmAction {
         List<Command> commands = new ArrayList<>(tags.size());
         for (Entry<String, String> entry: tags.entrySet()) {
             String v = entry.getValue();
-            commands.add(new ChangePropertyCommand(selection, entry.getKey(), "".equals(v)?null:v));
+            commands.add(new ChangePropertyCommand(selection, entry.getKey(), "".equals(v) ? null : v));
         }
         commitCommands(selection, commands);
         return !commands.isEmpty();
@@ -287,7 +283,7 @@ public final class PasteTagsAction extends JosmAction {
      */
     public static boolean pasteTagsFromJOSMBuffer(Collection<OsmPrimitive> selection) {
         List<PrimitiveData> directlyAdded = Main.pasteBuffer.getDirectlyAdded();
-        if (directlyAdded==null || directlyAdded.isEmpty()) return false;
+        if (directlyAdded == null || directlyAdded.isEmpty()) return false;
 
         PasteTagsAction.TagPaster tagPaster = new PasteTagsAction.TagPaster(directlyAdded, selection);
         List<Command> commands = new ArrayList<>();
@@ -300,7 +296,7 @@ public final class PasteTagsAction extends JosmAction {
 
     /**
      * Create and execute SequenceCommand with descriptive title
-     * @param commands
+     * @param commands the commands to perform in a sequential command
      */
     private static void commitCommands(Collection<OsmPrimitive> selection, List<Command> commands) {
         if (!commands.isEmpty()) {
@@ -326,6 +322,6 @@ public final class PasteTagsAction extends JosmAction {
 
     @Override
     protected void updateEnabledState(Collection<? extends OsmPrimitive> selection) {
-        setEnabled(selection!= null && !selection.isEmpty());
+        setEnabled(selection != null && !selection.isEmpty());
     }
 }
diff --git a/src/org/openstreetmap/josm/actions/PreferencesAction.java b/src/org/openstreetmap/josm/actions/PreferencesAction.java
index ba20cbe..a81709a 100644
--- a/src/org/openstreetmap/josm/actions/PreferencesAction.java
+++ b/src/org/openstreetmap/josm/actions/PreferencesAction.java
@@ -106,7 +106,7 @@ public class PreferencesAction extends JosmAction implements Runnable {
         final PreferenceDialog p = new PreferenceDialog(Main.parent);
         if (tab != null) {
             p.selectPreferencesTabByClass(tab);
-        } else if( subTab != null) {
+        } else if (subTab != null) {
             p.selectSubPreferencesTabByClass(subTab);
         }
         p.setVisible(true);
diff --git a/src/org/openstreetmap/josm/actions/PurgeAction.java b/src/org/openstreetmap/josm/actions/PurgeAction.java
index 2ea561e..bde3f96 100644
--- a/src/org/openstreetmap/josm/actions/PurgeAction.java
+++ b/src/org/openstreetmap/josm/actions/PurgeAction.java
@@ -180,7 +180,7 @@ public class PurgeAction extends JosmAction {
              * Add higher level relations (list gets extended while looping over it)
              */
             List<Relation> relLst = new ArrayList<>(relSet);
-            for (int i=0; i<relLst.size(); ++i) {
+            for (int i = 0; i < relLst.size(); ++i) {
                 for (OsmPrimitive parent : relLst.get(i).getReferrers()) {
                     if (!(toPurgeChecked.contains(parent))
                             && hasOnlyIncompleteMembers((Relation) parent, toPurgeChecked, relLst)) {
@@ -222,7 +222,7 @@ public class PurgeAction extends JosmAction {
     private JPanel buildPanel(boolean modified) {
         JPanel pnl = new JPanel(new GridBagLayout());
 
-        pnl.add(Box.createRigidArea(new Dimension(400,0)), GBC.eol().fill(GBC.HORIZONTAL));
+        pnl.add(Box.createRigidArea(new Dimension(400, 0)), GBC.eol().fill(GBC.HORIZONTAL));
 
         pnl.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
         pnl.add(new JLabel("<html>"+
@@ -232,7 +232,7 @@ public class PurgeAction extends JosmAction {
                         ImageProvider.get("purge"), JLabel.LEFT), GBC.eol().fill(GBC.HORIZONTAL));
 
         if (!toPurgeAdditionally.isEmpty()) {
-            pnl.add(new JSeparator(), GBC.eol().fill(GBC.HORIZONTAL).insets(0,5,0,5));
+            pnl.add(new JSeparator(), GBC.eol().fill(GBC.HORIZONTAL).insets(0, 5, 0, 5));
             pnl.add(new JLabel("<html>"+
                     tr("The following dependent objects will be purged<br> " +
                             "in addition to the selected objects:")+"</html>",
@@ -244,7 +244,7 @@ public class PurgeAction extends JosmAction {
                     int type = o2.getType().compareTo(o1.getType());
                     if (type != 0)
                         return type;
-                    return (Long.valueOf(o1.getUniqueId())).compareTo(o2.getUniqueId());
+                    return Long.compare(o1.getUniqueId(), o2.getUniqueId());
                 }
             });
             JList<OsmPrimitive> list = new JList<>(toPurgeAdditionally.toArray(new OsmPrimitive[toPurgeAdditionally.size()]));
@@ -267,7 +267,7 @@ public class PurgeAction extends JosmAction {
             JButton addToSelection = new JButton(new AbstractAction() {
                 {
                     putValue(SHORT_DESCRIPTION,   tr("Add to selection"));
-                    putValue(SMALL_ICON, ImageProvider.get("dialogs","select"));
+                    putValue(SMALL_ICON, ImageProvider.get("dialogs", "select"));
                 }
 
                 @Override
@@ -275,12 +275,12 @@ public class PurgeAction extends JosmAction {
                     layer.data.addSelected(toPurgeAdditionally);
                 }
             });
-            addToSelection.setMargin(new Insets(0,0,0,0));
-            pnl.add(addToSelection, GBC.eol().anchor(GBC.SOUTHWEST).weight(0.0, 1.0).insets(2,0,0,3));
+            addToSelection.setMargin(new Insets(0, 0, 0, 0));
+            pnl.add(addToSelection, GBC.eol().anchor(GBC.SOUTHWEST).weight(0.0, 1.0).insets(2, 0, 0, 3));
         }
 
         if (modified) {
-            pnl.add(new JSeparator(), GBC.eol().fill(GBC.HORIZONTAL).insets(0,5,0,5));
+            pnl.add(new JSeparator(), GBC.eol().fill(GBC.HORIZONTAL).insets(0, 5, 0, 5));
             pnl.add(new JLabel("<html>"+tr("Some of the objects are modified.<br> " +
                     "Proceed, if these changes should be discarded."+"</html>"),
                     ImageProvider.get("warning-small"), JLabel.LEFT),
@@ -290,7 +290,7 @@ public class PurgeAction extends JosmAction {
         cbClearUndoRedo = new JCheckBox(tr("Clear Undo/Redo buffer"));
         cbClearUndoRedo.setSelected(Main.pref.getBoolean("purge.clear_undo_redo", false));
 
-        pnl.add(new JSeparator(), GBC.eol().fill(GBC.HORIZONTAL).insets(0,5,0,5));
+        pnl.add(new JSeparator(), GBC.eol().fill(GBC.HORIZONTAL).insets(0, 5, 0, 5));
         pnl.add(cbClearUndoRedo, GBC.eol());
         return pnl;
     }
diff --git a/src/org/openstreetmap/josm/actions/RenameLayerAction.java b/src/org/openstreetmap/josm/actions/RenameLayerAction.java
index 94c1317..fa4022e 100644
--- a/src/org/openstreetmap/josm/actions/RenameLayerAction.java
+++ b/src/org/openstreetmap/josm/actions/RenameLayerAction.java
@@ -53,7 +53,7 @@ public class RenameLayerAction extends AbstractAction {
             filerename.setSelected(Main.pref.getBoolean("layer.rename-file", true));
         }
 
-        final JOptionPane optionPane = new JOptionPane(panel, JOptionPane.QUESTION_MESSAGE, JOptionPane.OK_CANCEL_OPTION){
+        final JOptionPane optionPane = new JOptionPane(panel, JOptionPane.QUESTION_MESSAGE, JOptionPane.OK_CANCEL_OPTION) {
             @Override public void selectInitialValue() {
                 name.requestFocusInWindow();
                 name.selectAll();
@@ -65,7 +65,7 @@ public class RenameLayerAction extends AbstractAction {
 
         Object answer = optionPane.getValue();
         if (answer == null || answer == JOptionPane.UNINITIALIZED_VALUE ||
-                (answer instanceof Integer && (Integer)answer != JOptionPane.OK_OPTION))
+                (answer instanceof Integer && (Integer) answer != JOptionPane.OK_OPTION))
             return;
 
         String nameText = name.getText();
diff --git a/src/org/openstreetmap/josm/actions/RestartAction.java b/src/org/openstreetmap/josm/actions/RestartAction.java
index de7b9e4..5de9a7a 100644
--- a/src/org/openstreetmap/josm/actions/RestartAction.java
+++ b/src/org/openstreetmap/josm/actions/RestartAction.java
@@ -11,6 +11,7 @@ import java.io.IOException;
 import java.lang.management.ManagementFactory;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.List;
 
 import org.openstreetmap.josm.Main;
@@ -21,7 +22,8 @@ import org.openstreetmap.josm.tools.Shortcut;
 /**
  * Restarts JOSM as it was launched. Comes from "restart" plugin, originally written by Upliner.
  * <br><br>
- * Mechanisms have been improved based on #8561 discussions and <a href="http://lewisleo.blogspot.jp/2012/08/programmatically-restart-java.html">this article</a>.
+ * Mechanisms have been improved based on #8561 discussions and
+ * <a href="http://lewisleo.blogspot.jp/2012/08/programmatically-restart-java.html">this article</a>.
  * @since 5857
  */
 public class RestartAction extends JosmAction {
@@ -75,68 +77,17 @@ public class RestartAction extends JosmAction {
 
     /**
      * Restarts the current Java application
-     * @throws IOException
+     * @throws IOException in case of any error
      */
     public static void restartJOSM() throws IOException {
         if (isRestartSupported() && !Main.exitJosm(false, 0)) return;
+        final List<String> cmd;
         try {
-            final List<String> cmd = new ArrayList<>();
             // special handling for OSX .app package
             if (Main.isPlatformOsx() && System.getProperty("java.library.path").contains("/JOSM.app/Contents/MacOS")) {
-                cmd.add("/usr/bin/osascript");
-                for (String line : RESTART_APPLE_SCRIPT.split("\n")) {
-                    cmd.add("-e");
-                    cmd.add(line);
-                }
+                cmd = getAppleCommands();
             } else {
-                // java binary
-                final String java = System.getProperty("java.home") + File.separator + "bin" + File.separator +
-                        (Main.isPlatformWindows() ? "java.exe" : "java");
-                if (!new File(java).isFile()) {
-                    throw new IOException("Unable to find suitable java runtime at "+java);
-                }
-                cmd.add(java);
-                // vm arguments
-                List<String> arguments = ManagementFactory.getRuntimeMXBean().getInputArguments();
-                if (Main.isDebugEnabled()) {
-                    Main.debug("VM arguments: "+arguments.toString());
-                }
-                for (String arg : arguments) {
-                    // When run from jp2launcher.exe, jnlpx.remove is true, while it is not when run from javaws
-                    // Always set it to false to avoid error caused by a missing jnlp file on the second restart
-                    arg = arg.replace("-Djnlpx.remove=true", "-Djnlpx.remove=false");
-                    // if it's the agent argument : we ignore it otherwise the
-                    // address of the old application and the new one will be in conflict
-                    if (!arg.contains("-agentlib")) {
-                        cmd.add(arg);
-                    }
-                }
-                // program main and program arguments (be careful a sun property. might not be supported by all JVM)
-                String[] mainCommand = System.getProperty("sun.java.command").split(" ");
-                // look for a .jar in all chunks to support paths with spaces (fix #9077)
-                String jarPath = mainCommand[0];
-                for (int i = 1; i < mainCommand.length && !jarPath.endsWith(".jar"); i++) {
-                    jarPath += " " + mainCommand[i];
-                }
-                // program main is a jar
-                if (jarPath.endsWith(".jar")) {
-                    // if it's a jar, add -jar mainJar
-                    cmd.add("-jar");
-                    cmd.add(new File(jarPath).getPath());
-                } else {
-                    // else it's a .class, add the classpath and mainClass
-                    cmd.add("-cp");
-                    cmd.add("\"" + System.getProperty("java.class.path") + "\"");
-                    cmd.add(mainCommand[0]);
-                }
-                // if it's webstart add JNLP file. Use jnlpx.origFilenameArg instead of jnlp.application.href,
-                // because only this one is present when run from j2plauncher.exe (see #10795)
-                String jnlp = System.getProperty("jnlpx.origFilenameArg");
-                if (jnlp != null) {
-                    cmd.add(jnlp);
-                }
-                // finally add program arguments
-                cmd.addAll(Arrays.asList(Main.commandLineArgs));
+                cmd = getCommands();
             }
             Main.info("Restart "+cmd);
             if (Main.isDebugEnabled() && Main.pref.getBoolean("restart.debug.simulation")) {
@@ -145,7 +96,7 @@ public class RestartAction extends JosmAction {
             }
             // execute the command in a shutdown hook, to be sure that all the
             // resources have been disposed before restarting the application
-            Runtime.getRuntime().addShutdownHook(new Thread() {
+            Runtime.getRuntime().addShutdownHook(new Thread("josm-restarter") {
                 @Override
                 public void run() {
                     try {
@@ -163,6 +114,88 @@ public class RestartAction extends JosmAction {
         }
     }
 
+    private static List<String> getAppleCommands() {
+        final List<String> cmd = new ArrayList<>();
+        cmd.add("/usr/bin/osascript");
+        for (String line : RESTART_APPLE_SCRIPT.split("\n")) {
+            cmd.add("-e");
+            cmd.add(line);
+        }
+        return cmd;
+    }
+
+    private static List<String> getCommands() throws IOException {
+        final List<String> cmd = new ArrayList<>();
+        // java binary
+        cmd.add(getJavaRuntime());
+        // vm arguments
+        addVMArguments(cmd);
+        // Determine webstart JNLP file. Use jnlpx.origFilenameArg instead of jnlp.application.href,
+        // because only this one is present when run from j2plauncher.exe (see #10795)
+        final String jnlp = System.getProperty("jnlpx.origFilenameArg");
+        // program main and program arguments (be careful a sun property. might not be supported by all JVM)
+        final String javaCommand = System.getProperty("sun.java.command");
+        String[] mainCommand = javaCommand.split(" ");
+        if (javaCommand.endsWith(".jnlp") && jnlp == null) {
+            // see #11751 - jnlp on Linux
+            if (Main.isDebugEnabled()) {
+                Main.debug("Detected jnlp without jnlpx.origFilenameArg property set");
+            }
+            cmd.addAll(Arrays.asList(mainCommand));
+        } else {
+            // look for a .jar in all chunks to support paths with spaces (fix #9077)
+            StringBuilder sb = new StringBuilder(mainCommand[0]);
+            for (int i = 1; i < mainCommand.length && !mainCommand[i-1].endsWith(".jar"); i++) {
+                sb.append(' ').append(mainCommand[i]);
+            }
+            String jarPath = sb.toString();
+            // program main is a jar
+            if (jarPath.endsWith(".jar")) {
+                // if it's a jar, add -jar mainJar
+                cmd.add("-jar");
+                cmd.add(new File(jarPath).getPath());
+            } else {
+                // else it's a .class, add the classpath and mainClass
+                cmd.add("-cp");
+                cmd.add("\"" + System.getProperty("java.class.path") + "\"");
+                cmd.add(mainCommand[0]);
+            }
+            // add JNLP file.
+            if (jnlp != null) {
+                cmd.add(jnlp);
+            }
+        }
+        // finally add program arguments
+        cmd.addAll(Main.getCommandLineArgs());
+        return cmd;
+    }
+
+    private static String getJavaRuntime() throws IOException {
+        final String java = System.getProperty("java.home") + File.separator + "bin" + File.separator +
+                (Main.isPlatformWindows() ? "java.exe" : "java");
+        if (!new File(java).isFile()) {
+            throw new IOException("Unable to find suitable java runtime at "+java);
+        }
+        return java;
+    }
+
+    private static void addVMArguments(Collection<String> cmd) {
+        List<String> arguments = ManagementFactory.getRuntimeMXBean().getInputArguments();
+        if (Main.isDebugEnabled()) {
+            Main.debug("VM arguments: "+arguments);
+        }
+        for (String arg : arguments) {
+            // When run from jp2launcher.exe, jnlpx.remove is true, while it is not when run from javaws
+            // Always set it to false to avoid error caused by a missing jnlp file on the second restart
+            arg = arg.replace("-Djnlpx.remove=true", "-Djnlpx.remove=false");
+            // if it's the agent argument : we ignore it otherwise the
+            // address of the old application and the new one will be in conflict
+            if (!arg.contains("-agentlib")) {
+                cmd.add(arg);
+            }
+        }
+    }
+
     /**
      * Returns a new {@code ButtonSpec} instance that performs this action.
      * @return A new {@code ButtonSpec} instance that performs this action.
diff --git a/src/org/openstreetmap/josm/actions/ReverseWayAction.java b/src/org/openstreetmap/josm/actions/ReverseWayAction.java
index 8352dc7..96f7c43 100644
--- a/src/org/openstreetmap/josm/actions/ReverseWayAction.java
+++ b/src/org/openstreetmap/josm/actions/ReverseWayAction.java
@@ -73,7 +73,7 @@ public final class ReverseWayAction extends JosmAction {
 
     @Override
     public void actionPerformed(ActionEvent e) {
-        if (! isEnabled())
+        if (!isEnabled())
             return;
         if (getCurrentDataSet() == null)
             return;
diff --git a/src/org/openstreetmap/josm/actions/SaveAction.java b/src/org/openstreetmap/josm/actions/SaveAction.java
index c3b6fde..17f55cf 100644
--- a/src/org/openstreetmap/josm/actions/SaveAction.java
+++ b/src/org/openstreetmap/josm/actions/SaveAction.java
@@ -36,13 +36,13 @@ public final class SaveAction extends SaveActionBase {
 
     @Override public File getFile(Layer layer) {
         File f = layer.getAssociatedFile();
-        if(f != null && ! f.exists()) {
-            f=null;
+        if (f != null && !f.exists()) {
+            f = null;
         }
 
         // Ask for overwrite in case of GpxLayer: GpxLayers usually are imports
         // and modifying is an error most of the time.
-        if(f != null && layer instanceof GpxLayer) {
+        if (f != null && layer instanceof GpxLayer) {
             ExtendedDialog dialog = new ExtendedDialog(
                     Main.parent,
                     tr("Overwrite"),
diff --git a/src/org/openstreetmap/josm/actions/SaveActionBase.java b/src/org/openstreetmap/josm/actions/SaveActionBase.java
index 74cfa08..4123720 100644
--- a/src/org/openstreetmap/josm/actions/SaveActionBase.java
+++ b/src/org/openstreetmap/josm/actions/SaveActionBase.java
@@ -1,4 +1,4 @@
-//License: GPL. For details, see LICENSE file.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.actions;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -51,7 +51,7 @@ public abstract class SaveActionBase extends DiskAccessAction {
     }
 
     public boolean doSave(Layer layer) {
-        if(!layer.checkSaveConditions())
+        if (!layer.checkSaveConditions())
             return false;
         file = getFile(layer);
         return doInternalSave(layer, file);
@@ -118,7 +118,7 @@ public abstract class SaveActionBase extends DiskAccessAction {
     protected void updateEnabledState() {
         boolean check = Main.isDisplayingMapView()
         && Main.map.mapView.getActiveLayer() != null;
-        if(!check) {
+        if (!check) {
             setEnabled(false);
             return;
         }
@@ -133,8 +133,8 @@ public abstract class SaveActionBase extends DiskAccessAction {
      * @param title The dialog title
      * @param filter The dialog file filter
      * @return The output {@code File}
-     * @since 5456
      * @see DiskAccessAction#createAndOpenFileChooser(boolean, boolean, String, FileFilter, int, String)
+     * @since 5456
      */
     public static File createAndOpenSaveFileChooser(String title, ExtensionFileFilter filter) {
         AbstractFileChooser fc = createAndOpenFileChooser(false, false, title, filter, JFileChooser.FILES_ONLY, null);
@@ -171,7 +171,7 @@ public abstract class SaveActionBase extends DiskAccessAction {
             // No filefilter accepts current filename, add default extension
             String fn = file.getPath();
             if (ff instanceof ExtensionFileFilter) {
-                fn += "." + ((ExtensionFileFilter)ff).getDefaultExtension();
+                fn += "." + ((ExtensionFileFilter) ff).getDefaultExtension();
             } else if (extension != null) {
                 fn += "." + extension;
             }
@@ -193,7 +193,7 @@ public abstract class SaveActionBase extends DiskAccessAction {
             dialog.setContent(tr("File exists. Overwrite?"));
             dialog.setButtonIcons(new String[] {"save_as", "cancel"});
             dialog.showDialog();
-            return (dialog.getValue() == 1);
+            return dialog.getValue() == 1;
         }
         return true;
     }
diff --git a/src/org/openstreetmap/josm/actions/SearchNotesDownloadAction.java b/src/org/openstreetmap/josm/actions/SearchNotesDownloadAction.java
index 3c9c19c..d3d2a16 100644
--- a/src/org/openstreetmap/josm/actions/SearchNotesDownloadAction.java
+++ b/src/org/openstreetmap/josm/actions/SearchNotesDownloadAction.java
@@ -72,7 +72,6 @@ public class SearchNotesDownloadAction extends JosmAction {
         Main.pref.putCollection(HISTORY_KEY, searchTermBox.getHistory());
 
         performSearch(searchTerm);
-
     }
 
     public void performSearch(String searchTerm) {
@@ -84,19 +83,22 @@ public class SearchNotesDownloadAction extends JosmAction {
             new DownloadNotesTask().download(false, id, null);
             return;
         } catch (NumberFormatException ignore) {
+            if (Main.isTraceEnabled()) {
+                Main.trace(ignore.getMessage());
+            }
         }
 
         int noteLimit = Main.pref.getInteger("osm.notes.downloadLimit", 1000);
         int closedLimit = Main.pref.getInteger("osm.notes.daysCloased", 7);
 
         StringBuilder sb = new StringBuilder();
-        sb.append(OsmApi.getOsmApi().getBaseUrl());
-        sb.append("notes/search?limit=");
-        sb.append(noteLimit);
-        sb.append("&closed=");
-        sb.append(closedLimit);
-        sb.append("&q=");
-        sb.append(Utils.encodeUrl(searchTerm));
+        sb.append(OsmApi.getOsmApi().getBaseUrl())
+            .append("notes/search?limit=")
+            .append(noteLimit)
+            .append("&closed=")
+            .append(closedLimit)
+            .append("&q=")
+            .append(Utils.encodeUrl(searchTerm));
 
         new DownloadNotesTask().loadUrl(false, sb.toString(), null);
     }
diff --git a/src/org/openstreetmap/josm/actions/SelectAllAction.java b/src/org/openstreetmap/josm/actions/SelectAllAction.java
index 9237799..128d119 100644
--- a/src/org/openstreetmap/josm/actions/SelectAllAction.java
+++ b/src/org/openstreetmap/josm/actions/SelectAllAction.java
@@ -1,8 +1,8 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.actions;
 
-import static org.openstreetmap.josm.tools.I18n.tr;
 import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
+import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
@@ -11,8 +11,11 @@ import org.openstreetmap.josm.tools.Shortcut;
 
 public class SelectAllAction extends JosmAction {
 
+    /**
+     * Constructs a new {@code SelectAllAction}.
+     */
     public SelectAllAction() {
-        super(tr("Select All"),"selectall", tr("Select all undeleted objects in the data layer. This selects incomplete objects too."),
+        super(tr("Select All"), "selectall", tr("Select all undeleted objects in the data layer. This selects incomplete objects too."),
                 Shortcut.registerShortcut("system:selectall", tr("Edit: {0}", tr("Select All")), KeyEvent.VK_A, Shortcut.CTRL), true);
         putValue("help", ht("/Action/SelectAll"));
     }
diff --git a/src/org/openstreetmap/josm/actions/SelectNonBranchingWaySequences.java b/src/org/openstreetmap/josm/actions/SelectNonBranchingWaySequences.java
index 2ec9371..7ba0867 100644
--- a/src/org/openstreetmap/josm/actions/SelectNonBranchingWaySequences.java
+++ b/src/org/openstreetmap/josm/actions/SelectNonBranchingWaySequences.java
@@ -40,8 +40,9 @@ public class SelectNonBranchingWaySequences {
             nodes = new TreeSet<>();
             outerNodes = new TreeSet<>();
 
-            for (Way way : ways)
+            for (Way way : ways) {
                 addNodes(way);
+            }
         }
     }
 
@@ -90,6 +91,7 @@ public class SelectNonBranchingWaySequences {
         for (Way way : OsmPrimitive.getFilteredList(node.getReferrers(),
                 Way.class)) {
             if (way.getNodesCount() < 2 || !way.isFirstLastNode(node)
+                    || !way.isSelectable()
                     || selection.contains(way))
                 continue;
 
@@ -149,8 +151,9 @@ public class SelectNonBranchingWaySequences {
             return;
 
         selection = new LinkedList<>();
-        for (OsmPrimitive primitive : currentSelection)
+        for (OsmPrimitive primitive : currentSelection) {
             selection.add(primitive);
+        }
 
         do {
             if (!selection.add(way))
diff --git a/src/org/openstreetmap/josm/actions/SessionLoadAction.java b/src/org/openstreetmap/josm/actions/SessionLoadAction.java
index d9f219a..2c6dbbe 100644
--- a/src/org/openstreetmap/josm/actions/SessionLoadAction.java
+++ b/src/org/openstreetmap/josm/actions/SessionLoadAction.java
@@ -52,7 +52,7 @@ public class SessionLoadAction extends DiskAccessAction {
                 SessionImporter.FILE_FILTER, JFileChooser.FILES_ONLY, "lastDirectory");
         if (fc == null) return;
         File file = fc.getSelectedFile();
-        boolean zip = file.getName().toLowerCase().endsWith(".joz");
+        boolean zip = Utils.hasExtension(file, "joz");
         Main.worker.submit(new Loader(file, zip));
     }
 
@@ -183,7 +183,8 @@ public class SessionLoadAction extends DiskAccessAction {
             Main.error(e);
             HelpAwareOptionPane.showMessageDialogInEDT(
                     Main.parent,
-                    tr("<html>Could not load session file ''{0}''.<br>Error is:<br>{1}</html>", uri != null ? uri : file.getName(), e.getMessage()),
+                    tr("<html>Could not load session file ''{0}''.<br>Error is:<br>{1}</html>",
+                            uri != null ? uri : file.getName(), e.getMessage()),
                     dialogTitle,
                     JOptionPane.ERROR_MESSAGE,
                     null
diff --git a/src/org/openstreetmap/josm/actions/SessionSaveAsAction.java b/src/org/openstreetmap/josm/actions/SessionSaveAsAction.java
index 41feb41..8bea0c6 100644
--- a/src/org/openstreetmap/josm/actions/SessionSaveAsAction.java
+++ b/src/org/openstreetmap/josm/actions/SessionSaveAsAction.java
@@ -40,6 +40,7 @@ import org.openstreetmap.josm.io.session.SessionLayerExporter;
 import org.openstreetmap.josm.io.session.SessionWriter;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.MultiMap;
+import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.WindowGeometry;
 
 /**
@@ -87,7 +88,8 @@ public class SessionSaveAsAction extends DiskAccessAction {
         if (zipRequired) {
             fc = createAndOpenFileChooser(false, false, tr("Save session"), joz, JFileChooser.FILES_ONLY, "lastDirectory");
         } else {
-            fc = createAndOpenFileChooser(false, false, tr("Save session"), Arrays.asList(new FileFilter[]{jos, joz}), jos, JFileChooser.FILES_ONLY, "lastDirectory");
+            fc = createAndOpenFileChooser(false, false, tr("Save session"), Arrays.asList(new FileFilter[]{jos, joz}), jos,
+                    JFileChooser.FILES_ONLY, "lastDirectory");
         }
 
         if (fc == null)
@@ -105,7 +107,7 @@ public class SessionSaveAsAction extends DiskAccessAction {
         } else if (jos.equals(ff)) {
             zip = false;
         } else {
-            if (fn.toLowerCase().endsWith(".joz")) {
+            if (Utils.hasExtension(fn, "joz")) {
                 zip = true;
             } else {
                 zip = false;
@@ -190,7 +192,7 @@ public class SessionSaveAsAction extends DiskAccessAction {
             }
 
             int numNoExporter = 0;
-            WHILE:while (numNoExporter != noExporter.size()) {
+            WHILE: while (numNoExporter != noExporter.size()) {
                 numNoExporter = noExporter.size();
                 for (Layer layer : layers) {
                     if (noExporter.contains(layer)) continue;
@@ -220,9 +222,9 @@ public class SessionSaveAsAction extends DiskAccessAction {
                     exportPanel = exporter.getExportPanel();
                 }
                 wrapper.add(exportPanel, GBC.std().fill(GBC.HORIZONTAL));
-                ip.add(wrapper, GBC.eol().fill(GBC.HORIZONTAL).insets(2,2,4,2));
+                ip.add(wrapper, GBC.eol().fill(GBC.HORIZONTAL).insets(2, 2, 4, 2));
             }
-            ip.add(GBC.glue(0,1), GBC.eol().fill(GBC.VERTICAL));
+            ip.add(GBC.glue(0, 1), GBC.eol().fill(GBC.VERTICAL));
             JScrollPane sp = new JScrollPane(ip);
             sp.setBorder(BorderFactory.createEmptyBorder());
             p.add(sp, GBC.eol().fill());
@@ -237,10 +239,11 @@ public class SessionSaveAsAction extends DiskAccessAction {
             include.setEnabled(false);
             JLabel lbl = new JLabel(layer.getName(), layer.getIcon(), SwingConstants.LEFT);
             lbl.setToolTipText(tr("No exporter for this layer"));
+            lbl.setLabelFor(include);
             lbl.setEnabled(false);
             p.add(include, GBC.std());
             p.add(lbl, GBC.std());
-            p.add(GBC.glue(1,0), GBC.std().fill(GBC.HORIZONTAL));
+            p.add(GBC.glue(1, 0), GBC.std().fill(GBC.HORIZONTAL));
             return p;
         }
     }
diff --git a/src/org/openstreetmap/josm/actions/ShowStatusReportAction.java b/src/org/openstreetmap/josm/actions/ShowStatusReportAction.java
index 03a27fd..107c7e5 100644
--- a/src/org/openstreetmap/josm/actions/ShowStatusReportAction.java
+++ b/src/org/openstreetmap/josm/actions/ShowStatusReportAction.java
@@ -14,6 +14,7 @@ import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
 import java.util.ListIterator;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
@@ -68,35 +69,33 @@ public final class ShowStatusReportAction extends JosmAction {
      */
     public static String getReportHeader() {
         StringBuilder text = new StringBuilder();
-        text.append(Version.getInstance().getReleaseAttributes());
-        text.append("\n");
-        text.append("Identification: " + Version.getInstance().getAgentString());
-        text.append("\n");
-        text.append("Memory Usage: ");
-        text.append(Runtime.getRuntime().totalMemory()/1024/1024);
-        text.append(" MB / ");
-        text.append(Runtime.getRuntime().maxMemory()/1024/1024);
-        text.append(" MB (");
-        text.append(Runtime.getRuntime().freeMemory()/1024/1024);
-        text.append(" MB allocated, but free)");
-        text.append("\n");
-        text.append("Java version: " + System.getProperty("java.version") + ", " + System.getProperty("java.vendor") + ", " + System.getProperty("java.vm.name"));
-        text.append("\n");
+        text.append(Version.getInstance().getReleaseAttributes())
+            .append("\nIdentification: ").append(Version.getInstance().getAgentString())
+            .append("\nMemory Usage: ")
+            .append(Runtime.getRuntime().totalMemory()/1024/1024)
+            .append(" MB / ")
+            .append(Runtime.getRuntime().maxMemory()/1024/1024)
+            .append(" MB (")
+            .append(Runtime.getRuntime().freeMemory()/1024/1024)
+            .append(" MB allocated, but free)\nJava version: ")
+            .append(System.getProperty("java.version")).append(", ")
+            .append(System.getProperty("java.vendor")).append(", ")
+            .append(System.getProperty("java.vm.name")).append('\n');
         if (Main.platform.getClass() == PlatformHookUnixoid.class) {
             // Add Java package details
             String packageDetails = ((PlatformHookUnixoid) Main.platform).getJavaPackageDetails();
             if (packageDetails != null) {
-                text.append("Java package: ");
-                text.append(packageDetails);
-                text.append("\n");
+                text.append("Java package: ")
+                    .append(packageDetails)
+                    .append('\n');
             }
             // Add WebStart package details if run from JNLP
             if (Package.getPackage("javax.jnlp") != null) {
                 String webStartDetails = ((PlatformHookUnixoid) Main.platform).getWebStartPackageDetails();
                 if (webStartDetails != null) {
-                    text.append("WebStart package: ");
-                    text.append(webStartDetails);
-                    text.append("\n");
+                    text.append("WebStart package: ")
+                        .append(webStartDetails)
+                        .append('\n');
                 }
             }
         }
@@ -107,12 +106,12 @@ public final class ShowStatusReportAction extends JosmAction {
             final String propJavaHomeAlt = "<java.home>";
             // Build a new list of VM parameters to modify it below if needed (default implementation returns an UnmodifiableList instance)
             List<String> vmArguments = new ArrayList<>(ManagementFactory.getRuntimeMXBean().getInputArguments());
-            for (ListIterator<String> it = vmArguments.listIterator(); it.hasNext(); ) {
+            for (ListIterator<String> it = vmArguments.listIterator(); it.hasNext();) {
                 String value = it.next();
                 if (value.contains("=")) {
                     String[] param = value.split("=");
                     // Hide some parameters for privacy concerns
-                    if (param[0].toLowerCase().startsWith("-dproxy")) {
+                    if (param[0].toLowerCase(Locale.ENGLISH).startsWith("-dproxy")) {
                         it.set(param[0]+"=xxx");
                     // Shorten some parameters for readability concerns
                     } else {
@@ -125,38 +124,38 @@ public final class ShowStatusReportAction extends JosmAction {
                 }
             }
             if (!vmArguments.isEmpty()) {
-                text.append("VM arguments: "+ vmArguments.toString().replace("\\\\", "\\"));
-                text.append("\n");
+                text.append("VM arguments: ").append(vmArguments.toString().replace("\\\\", "\\")).append('\n');
             }
         } catch (SecurityException e) {
             // Ignore exception
+            if (Main.isTraceEnabled()) {
+                Main.trace(e.getMessage());
+            }
         }
-        if (Main.commandLineArgs.length > 0) {
-            text.append("Program arguments: "+ Arrays.toString(Main.commandLineArgs));
-            text.append("\n");
+        List<String> commandLineArgs = Main.getCommandLineArgs();
+        if (!commandLineArgs.isEmpty()) {
+            text.append("Program arguments: ").append(Arrays.toString(commandLineArgs.toArray())).append('\n');
         }
         if (Main.main != null) {
             DataSet dataset = Main.main.getCurrentDataSet();
             if (dataset != null) {
                 String result = DatasetConsistencyTest.runTests(dataset);
-                if (result.length() == 0) {
+                if (result.isEmpty()) {
                     text.append("Dataset consistency test: No problems found\n");
                 } else {
-                    text.append("\nDataset consistency test:\n"+result+"\n");
+                    text.append("\nDataset consistency test:\n").append(result).append('\n');
                 }
             }
         }
-        text.append("\n");
-        text.append(PluginHandler.getBugReportText());
-        text.append("\n");
+        text.append('\n').append(PluginHandler.getBugReportText()).append('\n');
 
         Collection<String> errorsWarnings = Main.getLastErrorAndWarnings();
         if (!errorsWarnings.isEmpty()) {
             text.append("Last errors/warnings:\n");
             for (String s : errorsWarnings) {
-                text.append("- ").append(s).append("\n");
+                text.append("- ").append(s).append('\n');
             }
-            text.append("\n");
+            text.append('\n');
         }
 
         return text.toString();
@@ -177,7 +176,7 @@ public final class ShowStatusReportAction extends JosmAction {
                 }
             }
             for (Entry<String, Setting<?>> entry : settings.entrySet()) {
-                text.append(entry.getKey()).append("=").append(entry.getValue().getValue().toString()).append("\n");
+                text.append(entry.getKey()).append('=').append(entry.getValue().getValue()).append('\n');
             }
         } catch (Exception x) {
             Main.error(x);
@@ -199,7 +198,7 @@ public final class ShowStatusReportAction extends JosmAction {
 
         switch (ed.showDialog().getValue()) {
             case 1: Utils.copyToClipboard(text.toString()); break;
-            case 2: ReportBugAction.reportBug(reportHeader) ; break;
+            case 2: ReportBugAction.reportBug(reportHeader); break;
         }
     }
 }
diff --git a/src/org/openstreetmap/josm/actions/SimplifyWayAction.java b/src/org/openstreetmap/josm/actions/SimplifyWayAction.java
index 3740abe..22ff54a 100644
--- a/src/org/openstreetmap/josm/actions/SimplifyWayAction.java
+++ b/src/org/openstreetmap/josm/actions/SimplifyWayAction.java
@@ -43,8 +43,8 @@ public class SimplifyWayAction extends JosmAction {
      * Constructs a new {@code SimplifyWayAction}.
      */
     public SimplifyWayAction() {
-        super(tr("Simplify Way"), "simplify", tr("Delete unnecessary nodes from a way."), Shortcut.registerShortcut("tools:simplify", tr("Tool: {0}", tr("Simplify Way")),
-                KeyEvent.VK_Y, Shortcut.SHIFT), true);
+        super(tr("Simplify Way"), "simplify", tr("Delete unnecessary nodes from a way."),
+                Shortcut.registerShortcut("tools:simplify", tr("Tool: {0}", tr("Simplify Way")), KeyEvent.VK_Y, Shortcut.SHIFT), true);
         putValue("help", ht("/Action/SimplifyWay"));
     }
 
@@ -138,7 +138,7 @@ public class SimplifyWayAction extends JosmAction {
      */
     protected boolean isRequiredNode(Way way, Node node) {
         boolean isRequired =  Collections.frequency(way.getNodes(), node) > 1;
-        if (! isRequired) {
+        if (!isRequired) {
             List<OsmPrimitive> parents = new LinkedList<>();
             parents.addAll(node.getReferrers());
             parents.remove(way);
@@ -165,6 +165,7 @@ public class SimplifyWayAction extends JosmAction {
      * Simplifies a way with a given threshold.
      *
      * @param w the way to simplify
+     * @param threshold the max error threshold
      * @return The sequence of commands to run
      * @since 6411
      */
@@ -172,8 +173,8 @@ public class SimplifyWayAction extends JosmAction {
         int lower = 0;
         int i = 0;
         List<Node> newNodes = new ArrayList<>(w.getNodesCount());
-        while(i < w.getNodesCount()){
-            if (isRequiredNode(w,w.getNode(i))) {
+        while (i < w.getNodesCount()) {
+            if (isRequiredNode(w, w.getNode(i))) {
                 // copy a required node to the list of new nodes. Simplify not possible
                 newNodes.add(w.getNode(i));
                 i++;
@@ -182,12 +183,12 @@ public class SimplifyWayAction extends JosmAction {
             }
             i++;
             // find the longest sequence of not required nodes ...
-            while(i<w.getNodesCount() && !isRequiredNode(w,w.getNode(i))) {
+            while (i < w.getNodesCount() && !isRequiredNode(w, w.getNode(i))) {
                 i++;
             }
             // ... and simplify them
-            buildSimplifiedNodeList(w.getNodes(), lower, Math.min(w.getNodesCount()-1, i), threshold,newNodes);
-            lower=i;
+            buildSimplifiedNodeList(w.getNodes(), lower, Math.min(w.getNodesCount()-1, i), threshold, newNodes);
+            lower = i;
             i++;
         }
 
@@ -203,7 +204,8 @@ public class SimplifyWayAction extends JosmAction {
         cmds.add(new ChangeCommand(w, newWay));
         cmds.add(new DeleteCommand(delNodes));
         w.getDataSet().clearSelection(delNodes);
-        return new SequenceCommand(trn("Simplify Way (remove {0} node)", "Simplify Way (remove {0} nodes)", delNodes.size(), delNodes.size()), cmds);
+        return new SequenceCommand(
+                trn("Simplify Way (remove {0} node)", "Simplify Way (remove {0} nodes)", delNodes.size(), delNodes.size()), cmds);
     }
 
     /**
@@ -213,7 +215,7 @@ public class SimplifyWayAction extends JosmAction {
      * @param wnew the way to simplify
      * @param from the lower index
      * @param to the upper index
-     * @param threshold
+     * @param threshold the max error threshold
      */
     protected void buildSimplifiedNodeList(List<Node> wnew, int from, int to, double threshold, List<Node> simplifiedNodes) {
 
@@ -237,8 +239,8 @@ public class SimplifyWayAction extends JosmAction {
 
         if (imax != -1 && xtemax >= threshold) {
             // Segment cannot be simplified - try shorter segments
-            buildSimplifiedNodeList(wnew, from, imax,threshold,simplifiedNodes);
-            buildSimplifiedNodeList(wnew, imax, to, threshold,simplifiedNodes);
+            buildSimplifiedNodeList(wnew, from, imax, threshold, simplifiedNodes);
+            buildSimplifiedNodeList(wnew, imax, to, threshold, simplifiedNodes);
         } else {
             // Simplify segment
             if (simplifiedNodes.isEmpty() || simplifiedNodes.get(simplifiedNodes.size()-1) != fromN) {
diff --git a/src/org/openstreetmap/josm/actions/SplitWayAction.java b/src/org/openstreetmap/josm/actions/SplitWayAction.java
index 13a12e5..2fd7f2f 100644
--- a/src/org/openstreetmap/josm/actions/SplitWayAction.java
+++ b/src/org/openstreetmap/josm/actions/SplitWayAction.java
@@ -57,10 +57,10 @@ public class SplitWayAction extends JosmAction {
         private List<Way> newWays;
 
         /**
-         * @param command The command to be performed to split the way (which is saved for later retrieval by the {@link #getCommand} method)
-         * @param newSelection The new list of selected primitives ids (which is saved for later retrieval by the {@link #getNewSelection} method)
-         * @param originalWay The original way being split (which is saved for later retrieval by the {@link #getOriginalWay} method)
-         * @param newWays The resulting new ways (which is saved for later retrieval by the {@link #getOriginalWay} method)
+         * @param command The command to be performed to split the way (which is saved for later retrieval with {@link #getCommand})
+         * @param newSelection The new list of selected primitives ids (which is saved for later retrieval with {@link #getNewSelection})
+         * @param originalWay The original way being split (which is saved for later retrieval with {@link #getOriginalWay})
+         * @param newWays The resulting new ways (which is saved for later retrieval with {@link #getOriginalWay})
          */
         public SplitWayResult(Command command, List<? extends PrimitiveId> newSelection, Way originalWay, List<Way> newWays) {
             this.command = command;
@@ -125,7 +125,7 @@ public class SplitWayAction extends JosmAction {
         List<Node> selectedNodes = OsmPrimitive.getFilteredList(selection, Node.class);
         List<Way> selectedWays = OsmPrimitive.getFilteredList(selection, Way.class);
         List<Relation> selectedRelations =
-            OsmPrimitive.getFilteredList( selection, Relation.class);
+            OsmPrimitive.getFilteredList(selection, Relation.class);
         List<Way> applicableWays = getApplicableWays(selectedWays, selectedNodes);
 
         if (applicableWays == null) {
@@ -182,7 +182,7 @@ public class SplitWayAction extends JosmAction {
             List<OsmPrimitive> sel = new ArrayList<>(selectedWays.size() + selectedRelations.size());
             sel.addAll(selectedWays);
             sel.addAll(selectedRelations);
-            SplitWayResult result = splitWay(getEditLayer(),selectedWay, wayChunks, sel);
+            SplitWayResult result = splitWay(getEditLayer(), selectedWay, wayChunks, sel);
             Main.main.undoRedo.add(result.getCommand());
             getCurrentDataSet().setSelected(result.getNewSelection());
         }
@@ -225,9 +225,9 @@ public class SplitWayAction extends JosmAction {
         List<Way> result =
             new ArrayList<>(OsmPrimitive.getFilteredList(selectedNodes.get(0).getReferrers(),
                                                          Way.class));
-        for (int i=1; i<selectedNodes.size(); i++) {
+        for (int i = 1; i < selectedNodes.size(); i++) {
             List<OsmPrimitive> ref = selectedNodes.get(i).getReferrers();
-            for (Iterator<Way> it = result.iterator(); it.hasNext(); ) {
+            for (Iterator<Way> it = result.iterator(); it.hasNext();) {
                 if (!ref.contains(it.next())) {
                     it.remove();
                 }
@@ -235,7 +235,7 @@ public class SplitWayAction extends JosmAction {
         }
 
         // Remove broken ways
-        for (Iterator<Way> it = result.iterator(); it.hasNext(); ) {
+        for (Iterator<Way> it = result.iterator(); it.hasNext();) {
             if (it.next().getNodesCount() <= 2) {
                 it.remove();
             }
@@ -245,7 +245,7 @@ public class SplitWayAction extends JosmAction {
             return result;
         else {
             // Return only selected ways
-            for (Iterator<Way> it = result.iterator(); it.hasNext(); ) {
+            for (Iterator<Way> it = result.iterator(); it.hasNext();) {
                 if (!selectedWays.contains(it.next())) {
                     it.remove();
                 }
@@ -267,7 +267,7 @@ public class SplitWayAction extends JosmAction {
      * @param splitPoints the nodes where the way is split. Must not be null.
      * @return the list of chunks
      */
-    public static List<List<Node>> buildSplitChunks(Way wayToSplit, List<Node> splitPoints){
+    public static List<List<Node>> buildSplitChunks(Way wayToSplit, List<Node> splitPoints) {
         CheckParameterUtil.ensureParameterNotNull(wayToSplit, "wayToSplit");
         CheckParameterUtil.ensureParameterNotNull(splitPoints, "splitPoints");
 
@@ -341,7 +341,8 @@ public class SplitWayAction extends JosmAction {
      * @param selection The list of currently selected primitives
      * @return the result from the split operation
      */
-    public static SplitWayResult splitWay(OsmDataLayer layer, Way way, List<List<Node>> wayChunks, Collection<? extends OsmPrimitive> selection) {
+    public static SplitWayResult splitWay(OsmDataLayer layer, Way way, List<List<Node>> wayChunks,
+            Collection<? extends OsmPrimitive> selection) {
         // build a list of commands, and also a new selection list
         Collection<Command> commandList = new ArrayList<>(wayChunks.size());
         List<OsmPrimitive> newSelection = new ArrayList<>(selection.size() + wayChunks.size());
@@ -391,32 +392,32 @@ public class SplitWayAction extends JosmAction {
                     if ("restriction".equals(type)) {
                         /* this code assumes the restriction is correct. No real error checking done */
                         String role = rm.getRole();
-                        if("from".equals(role) || "to".equals(role)) {
+                        if ("from".equals(role) || "to".equals(role)) {
                             OsmPrimitive via = null;
                             for (RelationMember rmv : r.getMembers()) {
-                                if ("via".equals(rmv.getRole())){
+                                if ("via".equals(rmv.getRole())) {
                                     via = rmv.getMember();
                                 }
                             }
                             List<Node> nodes = new ArrayList<>();
                             if (via != null) {
                                 if (via instanceof Node) {
-                                    nodes.add((Node)via);
+                                    nodes.add((Node) via);
                                 } else if (via instanceof Way) {
-                                    nodes.add(((Way)via).lastNode());
-                                    nodes.add(((Way)via).firstNode());
+                                    nodes.add(((Way) via).lastNode());
+                                    nodes.add(((Way) via).firstNode());
                                 }
                             }
                             Way res = null;
                             for (Node n : nodes) {
-                                if(changedWay.isFirstLastNode(n)) {
+                                if (changedWay.isFirstLastNode(n)) {
                                     res = way;
                                 }
                             }
                             if (res == null) {
                                 for (Way wayToAdd : newWays) {
-                                    for(Node n : nodes) {
-                                        if(wayToAdd.isFirstLastNode(n)) {
+                                    for (Node n : nodes) {
+                                        if (wayToAdd.isFirstLastNode(n)) {
                                             res = wayToAdd;
                                         }
                                     }
@@ -432,7 +433,7 @@ public class SplitWayAction extends JosmAction {
                             } else {
                                 insert = false;
                             }
-                        } else if(!"via".equals(role)) {
+                        } else if (!"via".equals(role)) {
                             warnme = true;
                         }
                     } else if (!("route".equals(type)) && !("multipolygon".equals(type))) {
@@ -450,7 +451,7 @@ public class SplitWayAction extends JosmAction {
                         Boolean backwards = null;
                         int k = 1;
                         while (i_r - k >= 0 || i_r + k < relationMembers.size()) {
-                            if ((i_r - k >= 0) && relationMembers.get(i_r - k).isWay()){
+                            if ((i_r - k >= 0) && relationMembers.get(i_r - k).isWay()) {
                                 Way w = relationMembers.get(i_r - k).getWay();
                                 if ((w.lastNode() == way.firstNode()) || w.firstNode() == way.firstNode()) {
                                     backwards = false;
@@ -459,7 +460,7 @@ public class SplitWayAction extends JosmAction {
                                 }
                                 break;
                             }
-                            if ((i_r + k < relationMembers.size()) && relationMembers.get(i_r + k).isWay()){
+                            if ((i_r + k < relationMembers.size()) && relationMembers.get(i_r + k).isWay()) {
                                 Way w = relationMembers.get(i_r + k).getWay();
                                 if ((w.lastNode() == way.firstNode()) || w.firstNode() == way.firstNode()) {
                                     backwards = true;
@@ -536,7 +537,7 @@ public class SplitWayAction extends JosmAction {
     public static SplitWayResult split(OsmDataLayer layer, Way way, List<Node> atNodes, Collection<? extends OsmPrimitive> selection) {
         List<List<Node>> chunks = buildSplitChunks(way, atNodes);
         if (chunks == null) return null;
-        return splitWay(layer,way, chunks, selection);
+        return splitWay(layer, way, chunks, selection);
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/actions/ToggleAction.java b/src/org/openstreetmap/josm/actions/ToggleAction.java
index c8d2adf..b2d9784 100644
--- a/src/org/openstreetmap/josm/actions/ToggleAction.java
+++ b/src/org/openstreetmap/josm/actions/ToggleAction.java
@@ -2,8 +2,8 @@
 package org.openstreetmap.josm.actions;
 
 import java.awt.event.ActionEvent;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.HashSet;
+import java.util.Set;
 
 import javax.swing.ButtonModel;
 import javax.swing.JCheckBox;
@@ -22,7 +22,7 @@ import org.openstreetmap.josm.tools.Shortcut;
  */
 public abstract class ToggleAction extends JosmAction {
 
-    private final transient List<ButtonModel> buttonModels = new ArrayList<>();
+    private final transient Set<ButtonModel> buttonModels = new HashSet<>();
 
     /**
      * Constructs a {@code ToggleAction}.
@@ -39,7 +39,8 @@ public abstract class ToggleAction extends JosmAction {
      * @param toolbarId identifier for the toolbar preferences. The iconName is used, if this parameter is null
      * @param installAdapters false, if you don't want to install layer changed and selection changed adapters
      */
-    public ToggleAction(String name, ImageProvider icon, String tooltip, Shortcut shortcut, boolean registerInToolbar, String toolbarId, boolean installAdapters) {
+    public ToggleAction(String name, ImageProvider icon, String tooltip, Shortcut shortcut, boolean registerInToolbar,
+            String toolbarId, boolean installAdapters) {
         super(name, icon, tooltip, shortcut, registerInToolbar, toolbarId, installAdapters);
         // It is required to set the SELECTED_KEY to a non-null value in order to let Swing components update it
         setSelected(false);
@@ -77,7 +78,8 @@ public abstract class ToggleAction extends JosmAction {
         if (selected instanceof Boolean) {
             return (Boolean) selected;
         } else {
-            Main.warn(getClass().getName()+" does not define a boolean for SELECTED_KEY but "+selected+". You should report it to JOSM developers.");
+            Main.warn(getClass().getName() + " does not define a boolean for SELECTED_KEY but " + selected +
+                    ". You should report it to JOSM developers.");
             return false;
         }
     }
@@ -114,8 +116,10 @@ public abstract class ToggleAction extends JosmAction {
 
     /**
      * Toggles the selcted action state, if needed according to the ActionEvent that trigerred the action.
-     * This method will do nothing if the action event comes from a Swing component supporting the SELECTED_KEY property because the component already set the selected state.
+     * This method will do nothing if the action event comes from a Swing component supporting the SELECTED_KEY property because
+     * the component already set the selected state.
      * This method needs to be called especially if the action is associated with a keyboard shortcut to ensure correct selected state.
+     * @param e ActionEvent that trigerred the action
      * @see <a href="https://weblogs.java.net/blog/zixle/archive/2005/11/changes_to_acti.html">Changes to Actions in 1.6</a>
      * @see <a href="http://docs.oracle.com/javase/6/docs/api/javax/swing/Action.html">Interface Action</a>
      */
diff --git a/src/org/openstreetmap/josm/actions/UnGlueAction.java b/src/org/openstreetmap/josm/actions/UnGlueAction.java
index d91bfa3..dce5cb6 100644
--- a/src/org/openstreetmap/josm/actions/UnGlueAction.java
+++ b/src/org/openstreetmap/josm/actions/UnGlueAction.java
@@ -148,7 +148,7 @@ public class UnGlueAction extends JosmAction {
                 "own copy and all nodes will be selected.");
         }
 
-        if(errMsg != null) {
+        if (errMsg != null) {
             new Notification(
                     errMsg)
                     .setIcon(JOptionPane.ERROR_MESSAGE)
@@ -176,7 +176,7 @@ public class UnGlueAction extends JosmAction {
         Node n = new Node(selectedNode, true);
 
         // If this wasn't called from menu, place it where the cursor is/was
-        if(e.getSource() instanceof JPanel) {
+        if (e.getSource() instanceof JPanel) {
             MapView mv = Main.map.mapView;
             n.setCoor(mv.getLatLon(mv.lastMEvent.getX(), mv.lastMEvent.getY()));
         }
@@ -410,10 +410,11 @@ public class UnGlueAction extends JosmAction {
         // According to previous check, only one valid way through that node
         List<Command> cmds = new LinkedList<>();
         Way way = null;
-        for (Way w: OsmPrimitive.getFilteredList(selectedNode.getReferrers(), Way.class))
+        for (Way w: OsmPrimitive.getFilteredList(selectedNode.getReferrers(), Way.class)) {
             if (w.isUsable() && w.getNodesCount() >= 1) {
                 way = w;
             }
+        }
         List<Node> oldNodes = way.getNodes();
         List<Node> newNodes = new ArrayList<>(oldNodes.size());
         List<Node> addNodes = new ArrayList<>();
@@ -463,7 +464,8 @@ public class UnGlueAction extends JosmAction {
         cmds.add(new ChangeCommand(selectedWay, tmpWay)); // only one changeCommand for a way, else garbage will happen
 
         Main.main.undoRedo.add(new SequenceCommand(
-                trn("Dupe {0} node into {1} nodes", "Dupe {0} nodes into {1} nodes", selectedNodes.size(), selectedNodes.size(), selectedNodes.size()+allNewNodes.size()), cmds));
+                trn("Dupe {0} node into {1} nodes", "Dupe {0} nodes into {1} nodes",
+                        selectedNodes.size(), selectedNodes.size(), selectedNodes.size()+allNewNodes.size()), cmds));
         getCurrentDataSet().setSelected(allNewNodes);
     }
 
diff --git a/src/org/openstreetmap/josm/actions/UnJoinNodeWayAction.java b/src/org/openstreetmap/josm/actions/UnJoinNodeWayAction.java
index 6ae45cd..c85297b 100644
--- a/src/org/openstreetmap/josm/actions/UnJoinNodeWayAction.java
+++ b/src/org/openstreetmap/josm/actions/UnJoinNodeWayAction.java
@@ -1,4 +1,4 @@
-//License: GPL. For details, see LICENSE file.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.actions;
 
 import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
@@ -154,9 +154,9 @@ public class UnJoinNodeWayAction extends JosmAction {
 
         // List of ways shared by all nodes
         List<Way> result = new ArrayList<>(OsmPrimitive.getFilteredList(selectedNodes.get(0).getReferrers(), Way.class));
-        for (int i=1; i<selectedNodes.size(); i++) {
+        for (int i = 1; i < selectedNodes.size(); i++) {
             List<OsmPrimitive> ref = selectedNodes.get(i).getReferrers();
-            for (Iterator<Way> it = result.iterator(); it.hasNext(); ) {
+            for (Iterator<Way> it = result.iterator(); it.hasNext();) {
                 if (!ref.contains(it.next())) {
                     it.remove();
                 }
@@ -164,7 +164,7 @@ public class UnJoinNodeWayAction extends JosmAction {
         }
 
         // Remove broken ways
-        for (Iterator<Way> it = result.iterator(); it.hasNext(); ) {
+        for (Iterator<Way> it = result.iterator(); it.hasNext();) {
             if (it.next().getNodesCount() <= 2) {
                 it.remove();
             }
@@ -174,7 +174,7 @@ public class UnJoinNodeWayAction extends JosmAction {
             return result;
         else {
             // Return only selected ways
-            for (Iterator<Way> it = result.iterator(); it.hasNext(); ) {
+            for (Iterator<Way> it = result.iterator(); it.hasNext();) {
                 if (!selectedWays.contains(it.next())) {
                     it.remove();
                 }
diff --git a/src/org/openstreetmap/josm/actions/UpdateDataAction.java b/src/org/openstreetmap/josm/actions/UpdateDataAction.java
index 7e028d4..183fbcf 100644
--- a/src/org/openstreetmap/josm/actions/UpdateDataAction.java
+++ b/src/org/openstreetmap/josm/actions/UpdateDataAction.java
@@ -44,13 +44,13 @@ public class UpdateDataAction extends JosmAction {
 
     @Override
     public void actionPerformed(ActionEvent e) {
-        if (! isEnabled())
+        if (!isEnabled())
             return;
         if (getEditLayer() == null)
             return;
 
         List<Area> areas = new ArrayList<>();
-        for(DataSource ds : getEditLayer().data.dataSources) {
+        for (DataSource ds : getEditLayer().data.dataSources) {
             areas.add(new Area(ds.bounds.asRect()));
         }
 
@@ -58,27 +58,27 @@ public class UpdateDataAction extends JosmAction {
         // This prevents downloading the same data numerous times at intersections
         // and also skips smaller bounding boxes that are contained within larger ones
         // entirely.
-        for(int i = 0; i < areas.size(); i++) {
-            for(int j = i+1; j < areas.size(); j++) {
+        for (int i = 0; i < areas.size(); i++) {
+            for (int j = i+1; j < areas.size(); j++) {
                 areas.get(i).subtract(areas.get(j));
             }
         }
 
-        for(int i = areas.size()-1; i > 0 ; i--) {
-            for(int j = i-1; j > 0; j--) {
+        for (int i = areas.size()-1; i > 0; i--) {
+            for (int j = i-1; j > 0; j--) {
                 areas.get(i).subtract(areas.get(j));
             }
         }
 
         List<Area> areasToDownload = new ArrayList<>();
-        for(Area a : areas) {
-            if(a.isEmpty()) {
+        for (Area a : areas) {
+            if (a.isEmpty()) {
                 continue;
             }
             areasToDownload.add(a);
         }
 
-        if(areasToDownload.isEmpty()) {
+        if (areasToDownload.isEmpty()) {
             // no bounds defined in the dataset? we update all primitives in the data set
             // using a series of multi fetch requests
             //
@@ -94,7 +94,7 @@ public class UpdateDataAction extends JosmAction {
                         public void run() {
                             try {
                                 future.get();
-                            } catch(Exception e) {
+                            } catch (Exception e) {
                                 Main.error(e);
                                 return;
                             }
diff --git a/src/org/openstreetmap/josm/actions/UpdateSelectionAction.java b/src/org/openstreetmap/josm/actions/UpdateSelectionAction.java
index d904af3..248aad9 100644
--- a/src/org/openstreetmap/josm/actions/UpdateSelectionAction.java
+++ b/src/org/openstreetmap/josm/actions/UpdateSelectionAction.java
@@ -34,7 +34,8 @@ public class UpdateSelectionAction extends JosmAction {
      * handle an exception thrown because a primitive was deleted on the server
      *
      * @param id the primitive id
-     * @param type The primitive type. Must be one of {@link OsmPrimitiveType#NODE NODE}, {@link OsmPrimitiveType#WAY WAY}, {@link OsmPrimitiveType#RELATION RELATION}
+     * @param type The primitive type. Must be one of {@link OsmPrimitiveType#NODE NODE},
+     * {@link OsmPrimitiveType#WAY WAY}, {@link OsmPrimitiveType#RELATION RELATION}
      */
     public static void handlePrimitiveGoneException(long id, OsmPrimitiveType type) {
         MultiFetchServerObjectReader reader = new MultiFetchServerObjectReader();
@@ -42,7 +43,7 @@ public class UpdateSelectionAction extends JosmAction {
         try {
             DataSet ds = reader.parseOsm(NullProgressMonitor.INSTANCE);
             Main.main.getEditLayer().mergeFrom(ds);
-        } catch(Exception e) {
+        } catch (Exception e) {
             ExceptionDialogUtil.explainException(e);
         }
     }
@@ -55,7 +56,7 @@ public class UpdateSelectionAction extends JosmAction {
      *
      */
     public static void updatePrimitives(final Collection<OsmPrimitive> selection) {
-        UpdatePrimitivesTask task = new UpdatePrimitivesTask(Main.main.getEditLayer(),selection);
+        UpdatePrimitivesTask task = new UpdatePrimitivesTask(Main.main.getEditLayer(), selection);
         Main.worker.submit(task);
     }
 
@@ -125,7 +126,7 @@ public class UpdateSelectionAction extends JosmAction {
 
     @Override
     public void actionPerformed(ActionEvent e) {
-        if (! isEnabled())
+        if (!isEnabled())
             return;
         Collection<OsmPrimitive> toUpdate = getData();
         if (toUpdate.isEmpty()) {
diff --git a/src/org/openstreetmap/josm/actions/UploadAction.java b/src/org/openstreetmap/josm/actions/UploadAction.java
index afc06e0..99b7807 100644
--- a/src/org/openstreetmap/josm/actions/UploadAction.java
+++ b/src/org/openstreetmap/josm/actions/UploadAction.java
@@ -56,6 +56,7 @@ public class UploadAction extends JosmAction{
      */
     private static final List<UploadHook> uploadHooks = new LinkedList<>();
     private static final List<UploadHook> lateUploadHooks = new LinkedList<>();
+
     static {
         /**
          * Calls validator before upload.
@@ -101,7 +102,7 @@ public class UploadAction extends JosmAction{
      * abort the upload.
      */
     public static void registerUploadHook(UploadHook hook, boolean late) {
-        if(hook == null) return;
+        if (hook == null) return;
         if (late) {
             if (!lateUploadHooks.contains(hook)) {
                 lateUploadHooks.add(0, hook);
@@ -119,7 +120,7 @@ public class UploadAction extends JosmAction{
      * @param hook the upload hook. Ignored if null.
      */
     public static void unregisterUploadHook(UploadHook hook) {
-        if(hook == null) return;
+        if (hook == null) return;
         if (uploadHooks.contains(hook)) {
             uploadHooks.remove(hook);
         }
@@ -145,7 +146,7 @@ public class UploadAction extends JosmAction{
 
     public static boolean checkPreUploadConditions(AbstractModifiableLayer layer) {
         return checkPreUploadConditions(layer,
-                layer instanceof OsmDataLayer ? new APIDataSet(((OsmDataLayer)layer).data) : null);
+                layer instanceof OsmDataLayer ? new APIDataSet(((OsmDataLayer) layer).data) : null);
     }
 
     protected static void alertUnresolvedConflicts(OsmDataLayer layer) {
diff --git a/src/org/openstreetmap/josm/actions/UploadNotesAction.java b/src/org/openstreetmap/josm/actions/UploadNotesAction.java
index 188777d..b30f061 100644
--- a/src/org/openstreetmap/josm/actions/UploadNotesAction.java
+++ b/src/org/openstreetmap/josm/actions/UploadNotesAction.java
@@ -22,8 +22,8 @@ import org.openstreetmap.josm.tools.ImageProvider;
 public class UploadNotesAction extends JosmAction {
 
     /** Create a new action to upload notes */
-    public UploadNotesAction () {
-        putValue(SHORT_DESCRIPTION,tr("Upload note changes to server"));
+    public UploadNotesAction() {
+        putValue(SHORT_DESCRIPTION, tr("Upload note changes to server"));
         putValue(NAME, tr("Upload notes"));
         putValue(SMALL_ICON, ImageProvider.get("upload"));
     }
@@ -46,13 +46,12 @@ public class UploadNotesAction extends JosmAction {
         }
         NoteData noteData = layer.getNoteData();
 
-        if(noteData == null || !noteData.isModified()) {
+        if (noteData == null || !noteData.isModified()) {
             if (Main.isDebugEnabled()) {
                 Main.debug("No changed notes to upload");
             }
             return;
         }
-        UploadNotesTask uploadTask = new UploadNotesTask();
-        uploadTask.uploadNotes(noteData, new PleaseWaitProgressMonitor(tr("Uploading notes to server")));
+        new UploadNotesTask().uploadNotes(noteData, new PleaseWaitProgressMonitor(tr("Uploading notes to server")));
     }
 }
diff --git a/src/org/openstreetmap/josm/actions/UploadSelectionAction.java b/src/org/openstreetmap/josm/actions/UploadSelectionAction.java
index 7bbeec5..d1c7b9f 100644
--- a/src/org/openstreetmap/josm/actions/UploadSelectionAction.java
+++ b/src/org/openstreetmap/josm/actions/UploadSelectionAction.java
@@ -48,7 +48,9 @@ public class UploadSelectionAction extends JosmAction {
                 tr("Upload selection"),
                 "uploadselection",
                 tr("Upload all changes in the current selection to the OSM server."),
+                // CHECKSTYLE.OFF: LineLength
                 Shortcut.registerShortcut("file:uploadSelection", tr("File: {0}", tr("Upload selection")), KeyEvent.VK_U, Shortcut.ALT_CTRL_SHIFT),
+                // CHECKSTYLE.ON: LineLength
                 true);
         putValue("help", ht("/Action/UploadSelection"));
     }
@@ -140,9 +142,10 @@ public class UploadSelectionAction extends JosmAction {
      * <code>primitives</code>
      */
     protected boolean hasPrimitivesToDelete(Collection<OsmPrimitive> primitives) {
-        for (OsmPrimitive p: primitives)
+        for (OsmPrimitive p: primitives) {
             if (p.isDeleted() && p.isModified() && !p.isNew())
                 return true;
+        }
         return false;
     }
 
@@ -189,7 +192,7 @@ public class UploadSelectionAction extends JosmAction {
     static class UploadHullBuilder implements Visitor {
         private Set<OsmPrimitive> hull;
 
-        public UploadHullBuilder(){
+        public UploadHullBuilder() {
             hull = new HashSet<>();
         }
 
@@ -320,15 +323,15 @@ public class UploadSelectionAction extends JosmAction {
                 Stack<OsmPrimitive> toCheck = new Stack<>();
                 toCheck.addAll(getPrimitivesToCheckForParents());
                 Set<OsmPrimitive> checked = new HashSet<>();
-                while(!toCheck.isEmpty()) {
+                while (!toCheck.isEmpty()) {
                     if (canceled) return;
                     OsmPrimitive current = toCheck.pop();
-                    synchronized(this) {
+                    synchronized (this) {
                         reader = new OsmServerBackreferenceReader(current);
                     }
                     getProgressMonitor().subTask(tr("Reading parents of ''{0}''", current.getDisplayName(DefaultNameFormatter.getInstance())));
                     DataSet ds = reader.parseOsm(getProgressMonitor().createSubTaskMonitor(1, false));
-                    synchronized(this) {
+                    synchronized (this) {
                         reader = null;
                     }
                     checked.add(current);
@@ -349,7 +352,7 @@ public class UploadSelectionAction extends JosmAction {
                         }
                     }
                 }
-            } catch(Exception e) {
+            } catch (Exception e) {
                 if (canceled)
                     // ignore exception
                     return;
diff --git a/src/org/openstreetmap/josm/actions/ValidateAction.java b/src/org/openstreetmap/josm/actions/ValidateAction.java
index 3c9bcdb..b8b5e74 100644
--- a/src/org/openstreetmap/josm/actions/ValidateAction.java
+++ b/src/org/openstreetmap/josm/actions/ValidateAction.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.actions;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -123,7 +123,8 @@ public class ValidateAction extends JosmAction {
          * @param validatedPrimitives the collection of primitives to validate.
          * @param formerValidatedPrimitives the last collection of primitives being validates. May be null.
          */
-        public ValidationTask(Collection<Test> tests, Collection<OsmPrimitive> validatedPrimitives, Collection<OsmPrimitive> formerValidatedPrimitives) {
+        public ValidationTask(Collection<Test> tests, Collection<OsmPrimitive> validatedPrimitives,
+                Collection<OsmPrimitive> formerValidatedPrimitives) {
             super(tr("Validating"), false /*don't ignore exceptions */);
             this.validatedPrimitives  = validatedPrimitives;
             this.formerValidatedPrimitives = formerValidatedPrimitives;
@@ -163,7 +164,7 @@ public class ValidateAction extends JosmAction {
                 if (canceled)
                     return;
                 testCounter++;
-                getProgressMonitor().setCustomText(tr("Test {0}/{1}: Starting {2}", testCounter, tests.size(),test.getName()));
+                getProgressMonitor().setCustomText(tr("Test {0}/{1}: Starting {2}", testCounter, tests.size(), test.getName()));
                 test.setPartialSelection(formerValidatedPrimitives != null);
                 test.startTest(getProgressMonitor().createSubTaskMonitor(validatedPrimitives.size(), false));
                 test.visit(validatedPrimitives);
diff --git a/src/org/openstreetmap/josm/actions/WireframeToggleAction.java b/src/org/openstreetmap/josm/actions/WireframeToggleAction.java
index 15d5ebf..474cb7e 100644
--- a/src/org/openstreetmap/josm/actions/WireframeToggleAction.java
+++ b/src/org/openstreetmap/josm/actions/WireframeToggleAction.java
@@ -25,7 +25,7 @@ public class WireframeToggleAction extends ToggleAction {
         super(tr("Wireframe View"),
               null, /* no icon */
               tr("Enable/disable rendering the map as wireframe only"),
-              Shortcut.registerShortcut("menu:view:wireframe", tr("Toggle Wireframe view"),KeyEvent.VK_W, Shortcut.CTRL),
+              Shortcut.registerShortcut("menu:view:wireframe", tr("Toggle Wireframe view"), KeyEvent.VK_W, Shortcut.CTRL),
               false /* register toolbar */
         );
         putValue("toolbar", "wireframe");
diff --git a/src/org/openstreetmap/josm/actions/ZoomInAction.java b/src/org/openstreetmap/josm/actions/ZoomInAction.java
index adebc46..3b32f49 100644
--- a/src/org/openstreetmap/josm/actions/ZoomInAction.java
+++ b/src/org/openstreetmap/josm/actions/ZoomInAction.java
@@ -25,7 +25,7 @@ public final class ZoomInAction extends JosmAction {
                 "dialogs/zoomin",
                 tr("Zoom In"),
                 // Although it might be possible on few custom keyboards, the vast majority of layouts do not have a direct '+' key, see below
-                Shortcut.registerShortcut("view:zoomin", tr("View: {0}", tr("Zoom In")),KeyEvent.VK_PLUS, Shortcut.DIRECT),
+                Shortcut.registerShortcut("view:zoomin", tr("View: {0}", tr("Zoom In")), KeyEvent.VK_PLUS, Shortcut.DIRECT),
                 true
         );
         putValue("help", ht("/Action/ZoomIn"));
diff --git a/src/org/openstreetmap/josm/actions/ZoomToAction.java b/src/org/openstreetmap/josm/actions/ZoomToAction.java
index c76a2e0..42d82ff 100644
--- a/src/org/openstreetmap/josm/actions/ZoomToAction.java
+++ b/src/org/openstreetmap/josm/actions/ZoomToAction.java
@@ -23,11 +23,11 @@ import org.openstreetmap.josm.tools.CheckParameterUtil;
 public class ZoomToAction extends AbstractAction implements LayerChangeListener, ListSelectionListener {
 
     private final OsmPrimitivesTable table;
-    
+
     private final String descriptionNominal;
     private final String descriptionInactiveLayer;
     private final String descriptionNoSelection;
-    
+
     public ZoomToAction(OsmPrimitivesTable table, String descriptionNominal, String descriptionInactiveLayer, String descriptionNoSelection) {
         CheckParameterUtil.ensureParameterNotNull(table);
         this.table = table;
@@ -38,23 +38,23 @@ public class ZoomToAction extends AbstractAction implements LayerChangeListener,
         putValue(SHORT_DESCRIPTION, descriptionNominal);
         updateEnabledState();
     }
-    
+
     public ZoomToAction(MemberTable table) {
-        this(table, 
+        this(table,
                 tr("Zoom to the object the first selected member refers to"),
                 tr("Zooming disabled because layer of this relation is not active"),
                 tr("Zooming disabled because there is no selected member"));
     }
-    
+
     public ZoomToAction(RelationMemberTable table) {
-        this(table, 
+        this(table,
                 tr("Zoom to the object the first selected member refers to"),
                 tr("Zooming disabled because layer of this relation is not active"),
                 tr("Zooming disabled because there is no selected member"));
     }
-    
+
     public ZoomToAction(NodeListTable table) {
-        this(table, 
+        this(table,
                 tr("Zoom to the first selected node"),
                 tr("Zooming disabled because layer of this way is not active"),
                 tr("Zooming disabled because there is no selected node"));
@@ -62,7 +62,7 @@ public class ZoomToAction extends AbstractAction implements LayerChangeListener,
 
     @Override
     public void actionPerformed(ActionEvent e) {
-        if (! isEnabled())
+        if (!isEnabled())
             return;
         int[] rows = this.table.getSelectedRows();
         if (rows == null || rows.length == 0)
diff --git a/src/org/openstreetmap/josm/actions/audio/AudioFastSlowAction.java b/src/org/openstreetmap/josm/actions/audio/AudioFastSlowAction.java
index 8274a60..124255f 100644
--- a/src/org/openstreetmap/josm/actions/audio/AudioFastSlowAction.java
+++ b/src/org/openstreetmap/josm/actions/audio/AudioFastSlowAction.java
@@ -28,7 +28,7 @@ public abstract class AudioFastSlowAction extends JosmAction {
     public AudioFastSlowAction(String name, String iconName, String tooltip, Shortcut shortcut, boolean fast) {
         super(name, iconName, tooltip, shortcut, true);
         multiplier = Main.pref.getDouble("audio.fastfwdmultiplier", 1.3);
-        if (! fast)
+        if (!fast)
             multiplier = 1.0 / multiplier;
     }
 
diff --git a/src/org/openstreetmap/josm/actions/audio/AudioPlayPauseAction.java b/src/org/openstreetmap/josm/actions/audio/AudioPlayPauseAction.java
index 5be4b0b..e755507 100644
--- a/src/org/openstreetmap/josm/actions/audio/AudioPlayPauseAction.java
+++ b/src/org/openstreetmap/josm/actions/audio/AudioPlayPauseAction.java
@@ -13,6 +13,7 @@ import org.openstreetmap.josm.gui.layer.markerlayer.AudioMarker;
 import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
 import org.openstreetmap.josm.tools.AudioPlayer;
 import org.openstreetmap.josm.tools.Shortcut;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
  * If not playing, play the sound track from the first Audio Marker, or from the point at which it was paused.<br>
@@ -36,8 +37,8 @@ public class AudioPlayPauseAction extends JosmAction {
         try {
             if (AudioPlayer.paused() && url != null) {
                 AudioPlayer.play(url);
-            } else if (AudioPlayer.playing()){
-                if (AudioPlayer.speed() != 1.0)
+            } else if (AudioPlayer.playing()) {
+                if (!Utils.equalsEpsilon(AudioPlayer.speed(), 1.0))
                     AudioPlayer.play(url, AudioPlayer.position());
                 else
                     AudioPlayer.pause();
diff --git a/src/org/openstreetmap/josm/actions/downloadtasks/AbstractDownloadTask.java b/src/org/openstreetmap/josm/actions/downloadtasks/AbstractDownloadTask.java
index 11d9e93..01ab834 100644
--- a/src/org/openstreetmap/josm/actions/downloadtasks/AbstractDownloadTask.java
+++ b/src/org/openstreetmap/josm/actions/downloadtasks/AbstractDownloadTask.java
@@ -3,6 +3,7 @@ package org.openstreetmap.josm.actions.downloadtasks;
 
 import java.util.ArrayList;
 import java.util.List;
+
 import org.openstreetmap.josm.io.XmlWriter;
 
 /**
@@ -49,26 +50,26 @@ public abstract class AbstractDownloadTask implements DownloadTask {
 
     @Override
     public String acceptsDocumentationSummary() {
-        StringBuilder buf = new StringBuilder("<tr><td>");
-        buf.append(getTitle());
-        buf.append(":</td><td>");
+        StringBuilder buff = new StringBuilder("<tr><td>");
+        buff.append(getTitle())
+            .append(":</td><td>");
         String[] patterns = getPatterns();
-        if (patterns.length>0) {
-            buf.append("<ul>");
+        if (patterns.length > 0) {
+            buff.append("<ul>");
             for (String pattern: patterns) {
-                buf.append("<li>");
-                buf.append(XmlWriter.encode(pattern));
-                buf.append("</li>");
+                buff.append("<li>")
+                    .append(XmlWriter.encode(pattern))
+                    .append("</li>");
             }
-            buf.append("</ul>");
+            buff.append("</ul>");
         }
-        buf.append("</td></tr>");
-        return buf.toString();
+        buff.append("</td></tr>");
+        return buff.toString();
     }
 
     // Can be overridden for more complex checking logic
     public boolean acceptsUrl(String url) {
-        if (url==null) return false;
+        if (url == null) return false;
         for (String p: getPatterns()) {
             if (url.matches(p)) {
                 return true;
@@ -79,15 +80,15 @@ public abstract class AbstractDownloadTask implements DownloadTask {
 
     /**
      * Check / decide if the task is safe for remotecontrol.
-     * 
+     *
      * Keep in mind that a potential attacker has full control over the content
      * of the file that will be downloaded.
      * If it is possible to run arbitrary code or write to the local file
      * system, then the task is (obviously) not save for remote execution.
-     * 
+     *
      * The default value is false = unsafe. Override in a subclass to
      * allow running the task via remotecontol.
-     * 
+     *
      * @return true if it is safe to download and open any file of the
      * corresponding format, false otherwise
      */
diff --git a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadGpsTask.java b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadGpsTask.java
index 63c783e..07fa832 100644
--- a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadGpsTask.java
+++ b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadGpsTask.java
@@ -81,8 +81,8 @@ public class DownloadGpsTask extends AbstractDownloadTask {
 
         } else if (url.matches(PATTERN_TRACKPOINTS_BBOX)) {
             String[] table = url.split("\\?|=|&");
-            for (int i = 0; i<table.length; i++) {
-                if ("bbox".equals(table[i]) && i<table.length-1 )
+            for (int i = 0; i < table.length; i++) {
+                if ("bbox".equals(table[i]) && i < table.length-1)
                     return download(newLayer, new Bounds(table[i+1], ",", ParseMethod.LEFT_BOTTOM_RIGHT_TOP), progressMonitor);
             }
         }
@@ -114,7 +114,7 @@ public class DownloadGpsTask extends AbstractDownloadTask {
                     return;
                 ProgressMonitor subMonitor = progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false);
                 rawData = reader.parseRawGps(subMonitor);
-            } catch(Exception e) {
+            } catch (Exception e) {
                 if (isCanceled())
                     return;
                 if (e instanceof OsmTransferException) {
@@ -159,7 +159,7 @@ public class DownloadGpsTask extends AbstractDownloadTask {
                 return null;
             boolean merge = Main.pref.getBoolean("download.gps.mergeWithLocal", false);
             Layer active = Main.map.mapView.getActiveLayer();
-            if (active instanceof GpxLayer && (merge || ((GpxLayer)active).data.fromServer))
+            if (active instanceof GpxLayer && (merge || ((GpxLayer) active).data.fromServer))
                 return (GpxLayer) active;
             for (GpxLayer l : Main.map.mapView.getLayersOfType(GpxLayer.class)) {
                 if (merge || l.data.fromServer)
diff --git a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadNotesUrlBoundsTask.java b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadNotesUrlBoundsTask.java
index 764ef76..25001ca 100644
--- a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadNotesUrlBoundsTask.java
+++ b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadNotesUrlBoundsTask.java
@@ -1,12 +1,12 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.actions.downloadtasks;
 
-import org.openstreetmap.josm.gui.progress.ProgressMonitor;
-import org.openstreetmap.josm.tools.OsmUrlToBounds;
+import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.util.concurrent.Future;
 
-import static org.openstreetmap.josm.tools.I18n.tr;
+import org.openstreetmap.josm.gui.progress.ProgressMonitor;
+import org.openstreetmap.josm.tools.OsmUrlToBounds;
 
 public class DownloadNotesUrlBoundsTask extends DownloadNotesTask {
 
@@ -20,6 +20,7 @@ public class DownloadNotesUrlBoundsTask extends DownloadNotesTask {
         return new String[]{
                 "https?://www\\.(osm|openstreetmap)\\.org/(.*)?#map=\\p{Digit}+/.*/.*&layers=[A-MO-Z]*N[A-MO-Z]*"};
     }
+
     @Override
     public String getTitle() {
         return tr("Download OSM Notes within Bounds");
diff --git a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadNotesUrlIdTask.java b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadNotesUrlIdTask.java
index 5fc6be5..544c31d 100644
--- a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadNotesUrlIdTask.java
+++ b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadNotesUrlIdTask.java
@@ -11,7 +11,7 @@ import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 
 public class DownloadNotesUrlIdTask extends DownloadNotesTask {
 
-    private final String URL_ID_PATTERN = "https?://www\\.(osm|openstreetmap)\\.org/note/(\\p{Digit}+).*";
+    private static final String URL_ID_PATTERN = "https?://www\\.(osm|openstreetmap)\\.org/note/(\\p{Digit}+).*";
 
     @Override
     public Future<?> loadUrl(boolean newLayer, String url, ProgressMonitor progressMonitor) {
diff --git a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmChangeTask.java b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmChangeTask.java
index f0d3ea8..2adc733 100644
--- a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmChangeTask.java
+++ b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmChangeTask.java
@@ -124,7 +124,7 @@ public class DownloadOsmChangeTask extends DownloadOsmTask {
     /**
      * Loads history and updates incomplete primitives.
      */
-    private static class HistoryLoaderAndListener extends HistoryLoadTask implements HistoryDataSetListener {
+    private static final class HistoryLoaderAndListener extends HistoryLoadTask implements HistoryDataSetListener {
 
         private final Map<OsmPrimitive, Date> toLoad;
 
@@ -153,12 +153,12 @@ public class DownloadOsmChangeTask extends DownloadOsmTask {
                         switch (p.getType()) {
                         case NODE:
                             data = new NodeData();
-                            ((NodeData)data).setCoor(((HistoryNode)hp).getCoords());
+                            ((NodeData) data).setCoor(((HistoryNode) hp).getCoords());
                             break;
                         case WAY:
                             data = new WayData();
-                            List<Long> nodeIds = ((HistoryWay)hp).getNodes();
-                            ((WayData)data).setNodes(nodeIds);
+                            List<Long> nodeIds = ((HistoryWay) hp).getNodes();
+                            ((WayData) data).setNodes(nodeIds);
                             // Find incomplete nodes to load at next run
                             for (Long nodeId : nodeIds) {
                                 if (p.getDataSet().getPrimitiveById(nodeId, OsmPrimitiveType.NODE) == null) {
@@ -170,8 +170,8 @@ public class DownloadOsmChangeTask extends DownloadOsmTask {
                             break;
                         case RELATION:
                             data = new RelationData();
-                            List<RelationMemberData> members = ((HistoryRelation)hp).getMembers();
-                            ((RelationData)data).setMembers(members);
+                            List<RelationMemberData> members = ((HistoryRelation) hp).getMembers();
+                            ((RelationData) data).setMembers(members);
                             break;
                         default: throw new AssertionError("Unknown primitive type");
                         }
diff --git a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java
index 70ca3c5..7f5972d 100644
--- a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java
+++ b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java
@@ -312,7 +312,7 @@ public class DownloadOsmTask extends AbstractDownloadTask {
                 if (isCanceled())
                     return;
                 dataSet = parseDataSet();
-            } catch(Exception e) {
+            } catch (Exception e) {
                 if (isCanceled()) {
                     Main.info(tr("Ignoring exception because download has been canceled. Exception was: {0}", e.toString()));
                     return;
@@ -337,9 +337,9 @@ public class DownloadOsmTask extends AbstractDownloadTask {
                 return; // user canceled download or error occurred
             if (dataSet.allPrimitives().isEmpty()) {
                 rememberErrorMessage(tr("No data found in this area."));
-                // need to synthesize a download bounds lest the visual indication of downloaded
-                // area doesn't work
-                dataSet.dataSources.add(new DataSource(currentBounds != null ? currentBounds : new Bounds(new LatLon(0, 0)), "OpenStreetMap server"));
+                // need to synthesize a download bounds lest the visual indication of downloaded area doesn't work
+                dataSet.dataSources.add(new DataSource(currentBounds != null ? currentBounds :
+                    new Bounds(new LatLon(0, 0)), "OpenStreetMap server"));
             }
 
             rememberDownloadedData(dataSet);
diff --git a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadReferrersTask.java b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadReferrersTask.java
index 8c34351..deca8fd 100644
--- a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadReferrersTask.java
+++ b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadReferrersTask.java
@@ -63,7 +63,7 @@ public class DownloadReferrersTask extends PleaseWaitRunnable {
         this.children = new HashMap<>();
         if (children != null) {
             for (OsmPrimitive p: children) {
-                if (! p.isNew()) {
+                if (!p.isNew()) {
                     this.children.put(p.getId(), OsmPrimitiveType.from(p));
                 }
             }
@@ -156,7 +156,7 @@ public class DownloadReferrersTask extends PleaseWaitRunnable {
     @Override
     protected void cancel() {
         canceled = true;
-        synchronized(this) {
+        synchronized (this) {
             if (reader != null) {
                 reader.cancel();
             }
@@ -179,7 +179,7 @@ public class DownloadReferrersTask extends PleaseWaitRunnable {
                     @Override
                     public void run() {
                         targetLayer.onPostDownloadFromServer();
-                        if(Main.map != null)
+                        if (Main.map != null)
                             Main.map.mapView.repaint();
                     }
                 }
@@ -201,10 +201,10 @@ public class DownloadReferrersTask extends PleaseWaitRunnable {
         Main.map.repaint();
     }
 
-    protected void downloadParents(long id, OsmPrimitiveType type, ProgressMonitor progressMonitor) throws OsmTransferException{
+    protected void downloadParents(long id, OsmPrimitiveType type, ProgressMonitor progressMonitor) throws OsmTransferException {
         reader = new OsmServerBackreferenceReader(id, type);
         DataSet ds = reader.parseOsm(progressMonitor.createSubTaskMonitor(1, false));
-        synchronized(this) { // avoid race condition in cancel()
+        synchronized (this) { // avoid race condition in cancel()
             reader = null;
         }
         Collection<Way> ways = ds.getWays();
@@ -220,9 +220,9 @@ public class DownloadReferrersTask extends PleaseWaitRunnable {
             nodes.removeAll(targetLayer.data.getNodes());
             if (!nodes.isEmpty()) {
                 reader = new MultiFetchServerObjectReader();
-                ((MultiFetchServerObjectReader)reader).append(nodes);
+                ((MultiFetchServerObjectReader) reader).append(nodes);
                 DataSet wayNodes = reader.parseOsm(progressMonitor.createSubTaskMonitor(1, false));
-                synchronized(this) { // avoid race condition in cancel()
+                synchronized (this) { // avoid race condition in cancel()
                     reader = null;
                 }
                 merger = new DataSetMerger(ds, wayNodes);
@@ -237,21 +237,21 @@ public class DownloadReferrersTask extends PleaseWaitRunnable {
     protected void realRun() throws SAXException, IOException, OsmTransferException {
         try {
             progressMonitor.setTicksCount(children.size());
-            int i=1;
+            int i = 1;
             for (Entry<Long, OsmPrimitiveType> entry: children.entrySet()) {
                 if (canceled)
                     return;
                 String msg = "";
                 switch(entry.getValue()) {
-                case NODE: msg = tr("({0}/{1}) Loading parents of node {2}", i+1,children.size(), entry.getKey()); break;
-                case WAY: msg = tr("({0}/{1}) Loading parents of way {2}", i+1,children.size(), entry.getKey()); break;
-                case RELATION: msg = tr("({0}/{1}) Loading parents of relation {2}", i+1,children.size(), entry.getKey()); break;
+                case NODE: msg = tr("({0}/{1}) Loading parents of node {2}", i+1, children.size(), entry.getKey()); break;
+                case WAY: msg = tr("({0}/{1}) Loading parents of way {2}", i+1, children.size(), entry.getKey()); break;
+                case RELATION: msg = tr("({0}/{1}) Loading parents of relation {2}", i+1, children.size(), entry.getKey()); break;
                 }
                 progressMonitor.subTask(msg);
                 downloadParents(entry.getKey(), entry.getValue(), progressMonitor);
                 i++;
             }
-        } catch(Exception e) {
+        } catch (Exception e) {
             if (canceled)
                 return;
             lastException = e;
diff --git a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadSessionTask.java b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadSessionTask.java
index 0a9d1a1..a7630d0 100644
--- a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadSessionTask.java
+++ b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadSessionTask.java
@@ -21,14 +21,8 @@ import org.openstreetmap.josm.tools.Utils;
 public class DownloadSessionTask extends AbstractDownloadTask {
 
     private static final String PATTERN_SESSION =  "https?://.*/.*\\.jo(s|z)";
-    
+
     private Loader loader;
-    
-    /**
-     * Constructs a new {@code DownloadSessionTask}.
-     */
-    public DownloadSessionTask() {
-    }
 
     @Override
     public String getTitle() {
@@ -74,7 +68,7 @@ public class DownloadSessionTask extends AbstractDownloadTask {
 
     /**
      * Do not allow to load a session file via remotecontrol.
-     * 
+     *
      * Session importers can be added by plugins and there is currently
      * no way to ensure that these are safe for remotecontol.
      * @return <code>true</code> if session import is allowed
diff --git a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadTask.java b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadTask.java
index 99f2578..d391735 100644
--- a/src/org/openstreetmap/josm/actions/downloadtasks/DownloadTask.java
+++ b/src/org/openstreetmap/josm/actions/downloadtasks/DownloadTask.java
@@ -118,7 +118,7 @@ public interface DownloadTask {
      * Cancels the asynchronous download task.
      *
      */
-    public void cancel();
+    void cancel();
 
     /**
      * Replies the HTML-formatted confirmation message to be shown to user when the given URL needs to be confirmed before loading.
@@ -126,5 +126,5 @@ public interface DownloadTask {
      * @return The HTML-formatted confirmation message to be shown to user
      * @since
      */
-    public String getConfirmationMessage(URL url);
+    String getConfirmationMessage(URL url);
 }
diff --git a/src/org/openstreetmap/josm/actions/downloadtasks/PostDownloadHandler.java b/src/org/openstreetmap/josm/actions/downloadtasks/PostDownloadHandler.java
index 359a4f5..0a4122b 100644
--- a/src/org/openstreetmap/josm/actions/downloadtasks/PostDownloadHandler.java
+++ b/src/org/openstreetmap/josm/actions/downloadtasks/PostDownloadHandler.java
@@ -15,6 +15,7 @@ import javax.swing.SwingUtilities;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.ExceptionDialogUtil;
+import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.tools.ExceptionUtil;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -63,13 +64,12 @@ public class PostDownloadHandler implements Runnable {
 
     @Override
     public void run() {
-        // wait for all downloads task to finish (by waiting for the futures
-        // to return a value)
+        // wait for all downloads task to finish (by waiting for the futures to return a value)
         //
         for (Future<?> future: futures) {
             try {
                 future.get();
-            } catch(Exception e) {
+            } catch (Exception e) {
                 Main.error(e);
                 return;
             }
@@ -90,7 +90,9 @@ public class PostDownloadHandler implements Runnable {
                 @Override
                 public void run() {
                     if (error instanceof Exception) {
-                        ExceptionDialogUtil.explainException((Exception)error);
+                        ExceptionDialogUtil.explainException((Exception) error);
+                    } else if (tr("No data found in this area.").equals(error)) {
+                        new Notification(error.toString()).setIcon(JOptionPane.WARNING_MESSAGE).show();
                     } else {
                         JOptionPane.showMessageDialog(
                                 Main.parent,
@@ -111,7 +113,7 @@ public class PostDownloadHandler implements Runnable {
                 if (error instanceof String) {
                     items.add((String) error);
                 } else if (error instanceof Exception) {
-                    items.add(ExceptionUtil.explainException((Exception)error));
+                    items.add(ExceptionUtil.explainException((Exception) error));
                 }
             }
 
diff --git a/src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java b/src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java
index 1b7902a..1e50d76 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java
@@ -34,8 +34,7 @@ import org.openstreetmap.josm.tools.Shortcut;
  * A map mode that enables the user to delete nodes and other objects.
  *
  * The user can click on an object, which gets deleted if possible. When Ctrl is
- * pressed when releasing the button, the objects and all its references are
- * deleted.
+ * pressed when releasing the button, the objects and all its references are deleted.
  *
  * If the user did not press Ctrl and the object has any references, the user
  * is informed and nothing is deleted.
@@ -46,8 +45,7 @@ import org.openstreetmap.josm.tools.Shortcut;
  * @author imi
  */
 public class DeleteAction extends MapMode implements ModifierListener {
-    // Cache previous mouse event (needed when only the modifier keys are
-    // pressed but the mouse isn't moved)
+    // Cache previous mouse event (needed when only the modifier keys are pressed but the mouse isn't moved)
     private MouseEvent oldEvent = null;
 
     /**
@@ -71,7 +69,7 @@ public class DeleteAction extends MapMode implements ModifierListener {
 
         private final Cursor c;
 
-        private DeleteMode(String cursorName) {
+        DeleteMode(String cursorName) {
             c = ImageProvider.getCursor("normal", cursorName);
         }
 
@@ -94,7 +92,7 @@ public class DeleteAction extends MapMode implements ModifierListener {
         super(tr("Delete Mode"),
                 "delete",
                 tr("Delete nodes or ways."),
-                Shortcut.registerShortcut("mapmode:delete", tr("Mode: {0}",tr("Delete")),
+                Shortcut.registerShortcut("mapmode:delete", tr("Mode: {0}", tr("Delete")),
                 KeyEvent.VK_DELETE, Shortcut.CTRL),
                 mapFrame,
                 ImageProvider.getCursor("normal", "delete"));
@@ -136,13 +134,13 @@ public class DeleteAction extends MapMode implements ModifierListener {
         if (!Main.map.mapView.isActiveLayerDrawable())
             return;
         boolean ctrl = (e.getModifiers() & ActionEvent.CTRL_MASK) != 0;
-        boolean alt = (e.getModifiers() & (ActionEvent.ALT_MASK|InputEvent.ALT_GRAPH_MASK)) != 0;
+        boolean alt = (e.getModifiers() & (ActionEvent.ALT_MASK | InputEvent.ALT_GRAPH_MASK)) != 0;
 
         Command c;
         if (ctrl) {
-            c = DeleteCommand.deleteWithReferences(getEditLayer(),getCurrentDataSet().getSelected());
+            c = DeleteCommand.deleteWithReferences(getEditLayer(), getCurrentDataSet().getSelected());
         } else {
-            c = DeleteCommand.delete(getEditLayer(),getCurrentDataSet().getSelected(), !alt /* also delete nodes in way */);
+            c = DeleteCommand.delete(getEditLayer(), getCurrentDataSet().getSelected(), !alt /* also delete nodes in way */);
         }
         // if c is null, an error occurred or the user aborted. Don't do anything in that case.
         if (c != null) {
@@ -173,26 +171,25 @@ public class DeleteAction extends MapMode implements ModifierListener {
     private void removeHighlighting() {
         highlightHelper.clear();
         DataSet ds = getCurrentDataSet();
-        if(ds != null) {
+        if (ds != null) {
             ds.clearHighlightedWaySegments();
         }
     }
 
     /**
      * handles everything related to highlighting primitives and way
-     * segments for the given pointer position (via MouseEvent) and
-     * modifiers.
-     * @param e
-     * @param modifiers
+     * segments for the given pointer position (via MouseEvent) and modifiers.
+     * @param e current mouse event
+     * @param modifiers mouse modifiers, not necessarly taken from the given mouse event
      */
     private void addHighlighting(MouseEvent e, int modifiers) {
-        if(!drawTargetHighlight)
+        if (!drawTargetHighlight)
             return;
 
         Set<OsmPrimitive> newHighlights = new HashSet<>();
         DeleteParameters parameters = getDeleteParameters(e, modifiers);
 
-        if(parameters.mode == DeleteMode.segment) {
+        if (parameters.mode == DeleteMode.segment) {
             // deleting segments is the only action not working on OsmPrimitives
             // so we have to handle them separately.
             repaintIfRequired(newHighlights, parameters.nearestSegment);
@@ -200,10 +197,9 @@ public class DeleteAction extends MapMode implements ModifierListener {
             // don't call buildDeleteCommands for DeleteMode.segment because it doesn't support
             // silent operation and SplitWayAction will show dialogs. A lot.
             Command delCmd = buildDeleteCommands(e, modifiers, true);
-            if(delCmd != null) {
-                // all other cases delete OsmPrimitives directly, so we can
-                // safely do the following
-                for(OsmPrimitive osm : delCmd.getParticipatingPrimitives()) {
+            if (delCmd != null) {
+                // all other cases delete OsmPrimitives directly, so we can safely do the following
+                for (OsmPrimitive osm : delCmd.getParticipatingPrimitives()) {
                     newHighlights.add(osm);
                 }
             }
@@ -215,36 +211,35 @@ public class DeleteAction extends MapMode implements ModifierListener {
         boolean needsRepaint = false;
         DataSet ds = getCurrentDataSet();
 
-        if(newHighlightedWaySegment == null && oldHighlightedWaySegment != null) {
-            if(ds != null) {
+        if (newHighlightedWaySegment == null && oldHighlightedWaySegment != null) {
+            if (ds != null) {
                 ds.clearHighlightedWaySegments();
                 needsRepaint = true;
             }
             oldHighlightedWaySegment = null;
-        } else if(newHighlightedWaySegment != null && !newHighlightedWaySegment.equals(oldHighlightedWaySegment)) {
-            if(ds != null) {
+        } else if (newHighlightedWaySegment != null && !newHighlightedWaySegment.equals(oldHighlightedWaySegment)) {
+            if (ds != null) {
                 ds.setHighlightedWaySegments(Collections.singleton(newHighlightedWaySegment));
                 needsRepaint = true;
             }
             oldHighlightedWaySegment = newHighlightedWaySegment;
         }
         needsRepaint |= highlightHelper.highlightOnly(newHighlights);
-        if(needsRepaint) {
+        if (needsRepaint) {
             Main.map.mapView.repaint();
         }
     }
 
     /**
-     * This function handles all work related to updating the cursor and
-     * highlights
+     * This function handles all work related to updating the cursor and highlights
      *
-     * @param e
-     * @param modifiers
+     * @param e current mouse event
+     * @param modifiers mouse modifiers, not necessarly taken from the given mouse event
      */
     private void updateCursor(MouseEvent e, int modifiers) {
         if (!Main.isDisplayingMapView())
             return;
-        if(!Main.map.mapView.isActiveLayerVisible() || e == null)
+        if (!Main.map.mapView.isActiveLayerVisible() || e == null)
             return;
 
         DeleteParameters parameters = getDeleteParameters(e, modifiers);
@@ -259,8 +254,7 @@ public class DeleteAction extends MapMode implements ModifierListener {
      * Normally the mouse event also contains the modifiers. However, when the
      * mouse is not moved and only modifier keys are pressed, no mouse event
      * occurs. We can use AWTEvent to catch those but still lack a proper
-     * mouseevent. Instead we copy the previous event and only update the
-     * modifiers.
+     * mouseevent. Instead we copy the previous event and only update the modifiers.
      */
     private void giveUserFeedback(MouseEvent e, int modifiers) {
         updateCursor(e, modifiers);
@@ -278,13 +272,12 @@ public class DeleteAction extends MapMode implements ModifierListener {
 
     /**
      * If user clicked with the left button, delete the nearest object.
-     * position.
      */
     @Override
     public void mouseReleased(MouseEvent e) {
         if (e.getButton() != MouseEvent.BUTTON1)
             return;
-        if(!Main.map.mapView.isActiveLayerVisible())
+        if (!Main.map.mapView.isActiveLayerVisible())
             return;
 
         // request focus in order to enable the expected keyboard shortcuts
@@ -302,7 +295,9 @@ public class DeleteAction extends MapMode implements ModifierListener {
 
     @Override
     public String getModeHelpText() {
+        // CHECKSTYLE.OFF: LineLength
         return tr("Click to delete. Shift: delete way segment. Alt: do not delete unused nodes when deleting a way. Ctrl: delete referring objects.");
+        // CHECKSTYLE.ON: LineLength
     }
 
     @Override
@@ -352,7 +347,7 @@ public class DeleteAction extends MapMode implements ModifierListener {
                 } else if (ctrl) {
                     result.mode = DeleteMode.way_with_references;
                 } else {
-                    result.mode = alt?DeleteMode.way:DeleteMode.way_with_nodes;
+                    result.mode = alt ? DeleteMode.way : DeleteMode.way_with_nodes;
                 }
             } else {
                 result.mode = DeleteMode.none;
@@ -371,17 +366,16 @@ public class DeleteAction extends MapMode implements ModifierListener {
      * that should be deleted but does not actually delete them.
      * @param e MouseEvent from which modifiers and position are taken
      * @param modifiers For explanation, see {@link #updateCursor}
-     * @param silent Set to true if the user should not be bugged with additional
-     *        dialogs
+     * @param silent Set to true if the user should not be bugged with additional dialogs
      * @return delete command
      */
     private Command buildDeleteCommands(MouseEvent e, int modifiers, boolean silent) {
         DeleteParameters parameters = getDeleteParameters(e, modifiers);
         switch (parameters.mode) {
         case node:
-            return DeleteCommand.delete(getEditLayer(),Collections.singleton(parameters.nearestNode), false, silent);
+            return DeleteCommand.delete(getEditLayer(), Collections.singleton(parameters.nearestNode), false, silent);
         case node_with_references:
-            return DeleteCommand.deleteWithReferences(getEditLayer(),Collections.singleton(parameters.nearestNode), silent);
+            return DeleteCommand.deleteWithReferences(getEditLayer(), Collections.singleton(parameters.nearestNode), silent);
         case segment:
             return DeleteCommand.deleteWaySegment(getEditLayer(), parameters.nearestSegment);
         case way:
diff --git a/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java b/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
index c349e89..75efd1d 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.actions.mapmode;
 
 import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
@@ -72,11 +72,14 @@ import org.openstreetmap.josm.tools.Utils;
  * Mapmode to add nodes, create and extend ways.
  */
 public class DrawAction extends MapMode implements MapViewPaintable, SelectionChangedListener, KeyPressReleaseListener, ModifierListener {
+
+    private static final Color ORANGE_TRANSPARENT = new Color(Color.ORANGE.getRed(), Color.ORANGE.getGreen(), Color.ORANGE.getBlue(), 128);
+    private static final double PHI = Math.toRadians(90);
+
     private final Cursor cursorJoinNode;
     private final Cursor cursorJoinWay;
 
     private transient Node lastUsedNode = null;
-    private static final double PHI = Math.toRadians(90);
     private double toleranceMultiplier;
 
     private transient Node mouseOnExistingNode;
@@ -115,6 +118,10 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
 
     private static int snapToIntersectionThreshold;
 
+    /**
+     * Constructs a new {@code DrawAction}.
+     * @param mapFrame Map frame
+     */
     public DrawAction(MapFrame mapFrame) {
         super(tr("Draw"), "node/autonode", tr("Draw nodes"),
                 Shortcut.registerShortcut("mapmode:draw", tr("Mode: {0}", tr("Draw")), KeyEvent.VK_A, Shortcut.DIRECT),
@@ -136,10 +143,10 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
     }
 
     private JCheckBoxMenuItem addMenuItem() {
-        int n=Main.main.menu.editMenu.getItemCount();
-        for (int i=n-1;i>0;i--) {
+        int n = Main.main.menu.editMenu.getItemCount();
+        for (int i = n-1; i > 0; i--) {
             JMenuItem item = Main.main.menu.editMenu.getItem(i);
-            if (item!=null && item.getAction() !=null && item.getAction() instanceof SnapChangeAction) {
+            if (item != null && item.getAction() != null && item.getAction() instanceof SnapChangeAction) {
                 Main.main.menu.editMenu.remove(i);
             }
         }
@@ -153,17 +160,17 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
         updateStatusLine();
         // repaint required if the helper line is active.
         boolean needsRepaint = drawHelperLine && !wayIsFinished;
-        if(drawTargetHighlight) {
+        if (drawTargetHighlight) {
             // move newHighlights to oldHighlights; only update changed primitives
-            for(OsmPrimitive x : newHighlights) {
-                if(oldHighlights.contains(x)) {
+            for (OsmPrimitive x : newHighlights) {
+                if (oldHighlights.contains(x)) {
                     continue;
                 }
                 x.setHighlighted(true);
                 needsRepaint = true;
             }
             oldHighlights.removeAll(newHighlights);
-            for(OsmPrimitive x : oldHighlights) {
+            for (OsmPrimitive x : oldHighlights) {
                 x.setHighlighted(false);
                 needsRepaint = true;
             }
@@ -187,7 +194,7 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
             }
         }
 
-        if(needsRepaint) {
+        if (needsRepaint) {
             Main.map.mapView.repaint();
         }
         return needsRepaint;
@@ -236,10 +243,10 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
         rubberLineColor = Main.pref.getColor(marktr("helper line"), null);
         if (rubberLineColor == null) rubberLineColor = PaintColors.SELECTED.get();
 
-        rubberLineStroke = GuiHelper.getCustomizedStroke(Main.pref.get("draw.stroke.helper-line","3"));
+        rubberLineStroke = GuiHelper.getCustomizedStroke(Main.pref.get("draw.stroke.helper-line", "3"));
         drawHelperLine = Main.pref.getBoolean("draw.helper-line", true);
         drawTargetHighlight = Main.pref.getBoolean("draw.target-highlight", true);
-        snapToIntersectionThreshold = Main.pref.getInteger("edit.snap-intersection-threshold",10);
+        snapToIntersectionThreshold = Main.pref.getInteger("edit.snap-intersection-threshold", 10);
     }
 
     @Override
@@ -264,7 +271,7 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
         // primitives
         //
         DataSet ds = getCurrentDataSet();
-        if(ds != null) {
+        if (ds != null) {
             ds.fireSelectionChanged();
         }
     }
@@ -308,7 +315,7 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
      */
     @Override
     public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
-        if(!Main.map.mapView.isActiveLayerDrawable())
+        if (!Main.map.mapView.isActiveLayerDrawable())
             return;
         computeHelperLine();
         addHighlighting();
@@ -364,13 +371,13 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
         }
         if (e.getButton() != MouseEvent.BUTTON1)
             return;
-        if(!Main.map.mapView.isActiveLayerDrawable())
+        if (!Main.map.mapView.isActiveLayerDrawable())
             return;
         // request focus in order to enable the expected keyboard shortcuts
         //
         Main.map.mapView.requestFocus();
 
-        if(e.getClickCount() > 1 && mousePos != null && mousePos.equals(oldMousePos)) {
+        if (e.getClickCount() > 1 && mousePos != null && mousePos.equals(oldMousePos)) {
             // A double click equals "user clicked last node again, finish way"
             // Change draw tool only if mouse position is nearly the same, as
             // otherwise fast clicks will count as a double click
@@ -402,7 +409,7 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
                 // ctrl-click on node of selected way = reuse node despite of ctrl
                 if (!it.next().containsNode(n)) n = null;
             } else {
-                n=null; // ctrl-click + no selected way = new node
+                n = null; // ctrl-click + no selected way = new node
             }
         }
 
@@ -426,7 +433,7 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
             }
         } else {
             EastNorth newEN;
-            if (n!=null) {
+            if (n != null) {
                 EastNorth foundPoint = n.getEastNorth();
                 // project found node to snapping line
                 newEN = snapHelper.getSnapPoint(foundPoint);
@@ -462,15 +469,14 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
                 List<WaySegment> wss = Main.map.mapView.getNearestWaySegments(
                         Main.map.mapView.getPoint(n), OsmPrimitive.isSelectablePredicate);
                 if (snapHelper.isActive()) {
-                    tryToMoveNodeOnIntersection(wss,n);
+                    tryToMoveNodeOnIntersection(wss, n);
                 }
                 insertNodeIntoAllNearbySegments(wss, n, newSelection, cmds, replacedWays, reuseWays);
             }
         }
         // now "n" is newly created or reused node that shoud be added to some way
 
-        // This part decides whether or not a "segment" (i.e. a connection) is made to an
-        // existing node.
+        // This part decides whether or not a "segment" (i.e. a connection) is made to an existing node.
 
         // For a connection to be made, the user must either have a node selected (connection
         // is made to that node), or he must have a way selected *and* one of the endpoints
@@ -509,16 +515,16 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
             // the node from which we make a connection
             Node n0 = findNodeToContinueFrom(selectedNode, selectedWay);
             // We have a selection but it isn't suitable. Try again.
-            if(n0 == null) {
+            if (n0 == null) {
                 tryAgain(e);
                 return;
             }
-            if(!wayIsFinishedTemp){
-                if(isSelfContainedWay(selectedWay, n0, n))
+            if (!wayIsFinishedTemp) {
+                if (isSelfContainedWay(selectedWay, n0, n))
                     return;
 
                 // User clicked last node again, finish way
-                if(n0 == n) {
+                if (n0 == n) {
                     finishDrawing();
                     return;
                 }
@@ -530,13 +536,14 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
                 Way wayToSelect;
 
                 // Don't allow creation of self-overlapping ways
-                if(way != null) {
-                    int nodeCount=0;
-                    for (Node p : way.getNodes())
-                        if(p.equals(n0)) {
+                if (way != null) {
+                    int nodeCount = 0;
+                    for (Node p : way.getNodes()) {
+                        if (p.equals(n0)) {
                             nodeCount++;
                         }
-                    if(nodeCount > 1) {
+                    }
+                    if (nodeCount > 1) {
                         way = null;
                     }
                 }
@@ -560,7 +567,7 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
                 }
 
                 // Connected to a node that's already in the way
-                if(way.containsNode(n)) {
+                if (way.containsNode(n)) {
                     wayIsFinished = true;
                     selection.clear();
                 }
@@ -603,7 +610,7 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
         Command c = new SequenceCommand(title, cmds);
 
         Main.main.undoRedo.add(c);
-        if(!wayIsFinished) {
+        if (!wayIsFinished) {
             lastUsedNode = n;
         }
 
@@ -618,7 +625,8 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
         removeHighlighting();
     }
 
-    private void insertNodeIntoAllNearbySegments(List<WaySegment> wss, Node n, Collection<OsmPrimitive> newSelection, Collection<Command> cmds, List<Way> replacedWays, List<Way> reuseWays) {
+    private void insertNodeIntoAllNearbySegments(List<WaySegment> wss, Node n, Collection<OsmPrimitive> newSelection,
+            Collection<Command> cmds, List<Way> replacedWays, List<Way> reuseWays) {
         Map<Way, List<Integer>> insertPoints = new HashMap<>();
         for (WaySegment ws : wss) {
             List<Integer> is;
@@ -632,7 +640,7 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
             is.add(ws.lowerIndex);
         }
 
-        Set<Pair<Node,Node>> segSet = new HashSet<>();
+        Set<Pair<Node, Node>> segSet = new HashSet<>();
 
         for (Map.Entry<Way, List<Integer>> insertPoint : insertPoints.entrySet()) {
             Way w = insertPoint.getKey();
@@ -653,7 +661,7 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
             // are already selected. This is the case when creating a self-overlapping way
             // but pressing ALT prevents this. Therefore we must de-select the way manually
             // here so /only/ the new way will be selected after this method finishes.
-            if(alt) {
+            if (alt) {
                 newSelection.add(insertPoint.getKey());
             }
 
@@ -681,9 +689,9 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
      * @return {@code true} if this would create a selfcontaining way, {@code false} otherwise.
      */
     private boolean isSelfContainedWay(Way selectedWay, Node currentNode, Node targetNode) {
-        if(selectedWay != null) {
+        if (selectedWay != null) {
             int posn0 = selectedWay.getNodes().indexOf(currentNode);
-            if( posn0 != -1 && // n0 is part of way
+            if (posn0 != -1 && // n0 is part of way
                     (posn0 >= 1                             && targetNode.equals(selectedWay.getNode(posn0-1))) || // previous node
                     (posn0 < selectedWay.getNodesCount()-1) && targetNode.equals(selectedWay.getNode(posn0+1))) {  // next node
                 getCurrentDataSet().setSelected(targetNode);
@@ -704,7 +712,7 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
     private Node findNodeToContinueFrom(Node selectedNode, Way selectedWay) {
         // No nodes or ways have been selected, this occurs when a relation
         // has been selected or the selection is empty
-        if(selectedNode == null && selectedWay == null)
+        if (selectedNode == null && selectedWay == null)
             return null;
 
         if (selectedNode == null) {
@@ -732,7 +740,7 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
 
     @Override
     public void mouseMoved(MouseEvent e) {
-        if(!Main.map.mapView.isActiveLayerDrawable())
+        if (!Main.map.mapView.isActiveLayerDrawable())
             return;
 
         // we copy ctrl/alt/shift from the event just in case our global
@@ -752,7 +760,7 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
      */
     private void tryToSetBaseSegmentForAngleSnap() {
         WaySegment seg = Main.map.mapView.getNearestWaySegment(mousePos, OsmPrimitive.isSelectablePredicate);
-        if (seg!=null) {
+        if (seg != null) {
             snapHelper.setBaseSegment(seg);
         }
     }
@@ -785,9 +793,9 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
 
         // We need this for highlighting and we'll only do so if we actually want to re-use
         // *and* there is no node nearby (because nodes beat ways when re-using)
-        if(!ctrl && currentMouseNode == null) {
+        if (!ctrl && currentMouseNode == null) {
             List<WaySegment> wss = mv.getNearestWaySegments(mousePos, OsmPrimitive.isSelectablePredicate);
-            for(WaySegment ws : wss) {
+            for (WaySegment ws : wss) {
                 mouseOnExistingWays.add(ws.way);
             }
         }
@@ -813,13 +821,15 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
 
         double curHdg = Math.toDegrees(getCurrentBaseNode().getEastNorth()
                 .heading(currentMouseEastNorth));
-        double baseHdg=-1;
+        double baseHdg = -1;
         if (previousNode != null) {
-            baseHdg =  Math.toDegrees(previousNode.getEastNorth()
-                    .heading(getCurrentBaseNode().getEastNorth()));
+            EastNorth en = previousNode.getEastNorth();
+            if (en != null) {
+                baseHdg = Math.toDegrees(en.heading(getCurrentBaseNode().getEastNorth()));
+            }
         }
 
-        snapHelper.checkAngleSnapping(currentMouseEastNorth,baseHdg, curHdg);
+        snapHelper.checkAngleSnapping(currentMouseEastNorth, baseHdg, curHdg);
 
         // status bar was filled by snapHelper
     }
@@ -862,8 +872,8 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
         if (selectedWay == null && selectedNode != null) {
             for (OsmPrimitive p: selectedNode.getReferrers()) {
                 if (p.isUsable() && p instanceof Way && ((Way) p).isFirstLastNode(selectedNode)) {
-                    if (selectedWay!=null) { // two uncontinued ways, nothing to take as reference
-                        selectedWay=null;
+                    if (selectedWay != null) { // two uncontinued ways, nothing to take as reference
+                        selectedWay = null;
                         break;
                     } else {
                         // set us ~continue this way (measure angle from it)
@@ -890,12 +900,12 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
      */
     private void continueWayFromNode(Way way, Node node) {
         int n = way.getNodesCount();
-        if (node == way.firstNode()){
+        if (node == way.firstNode()) {
             currentBaseNode = node;
-            if (n>1) previousNode = way.getNode(1);
+            if (n > 1) previousNode = way.getNode(1);
         } else if (node == way.lastNode()) {
             currentBaseNode = node;
-            if (n>1) previousNode = way.getNode(n-2);
+            if (n > 1) previousNode = way.getNode(n-2);
         }
     }
 
@@ -904,14 +914,14 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
      */
     @Override
     public void mouseExited(MouseEvent e) {
-        if(!Main.map.mapView.isActiveLayerDrawable())
+        if (!Main.map.mapView.isActiveLayerDrawable())
             return;
         mousePos = e.getPoint();
         snapHelper.noSnapNow();
         boolean repaintIssued = removeHighlighting();
         // force repaint in case snapHelper needs one. If removeHighlighting
         // caused one already, don’t do it again.
-        if(!repaintIssued) {
+        if (!repaintIssued) {
             Main.map.mapView.repaint();
         }
     }
@@ -976,23 +986,22 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
      * @param segs the segments to use as a reference when adjusting
      * @param n the node to adjust
      */
-    private static void adjustNode(Collection<Pair<Node,Node>> segs, Node n) {
+    private static void adjustNode(Collection<Pair<Node, Node>> segs, Node n) {
 
         switch (segs.size()) {
         case 0:
             return;
         case 2:
-            // This computes the intersection between
-            // the two segments and adjusts the node position.
-            Iterator<Pair<Node,Node>> i = segs.iterator();
-            Pair<Node,Node> seg = i.next();
+            // This computes the intersection between the two segments and adjusts the node position.
+            Iterator<Pair<Node, Node>> i = segs.iterator();
+            Pair<Node, Node> seg = i.next();
             EastNorth A = seg.a.getEastNorth();
             EastNorth B = seg.b.getEastNorth();
             seg = i.next();
             EastNorth C = seg.a.getEastNorth();
             EastNorth D = seg.b.getEastNorth();
 
-            double u=det(B.east() - A.east(), B.north() - A.north(), C.east() - D.east(), C.north() - D.north());
+            double u = det(B.east() - A.east(), B.north() - A.north(), C.east() - D.east(), C.north() - D.north());
 
             // Check for parallel segments and do nothing if they are
             // In practice this will probably only happen when a way has been duplicated
@@ -1039,12 +1048,12 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
         if (wss.isEmpty())
             return;
         WaySegment ws = wss.get(0);
-        EastNorth p1=ws.getFirstNode().getEastNorth();
-        EastNorth p2=ws.getSecondNode().getEastNorth();
+        EastNorth p1 = ws.getFirstNode().getEastNorth();
+        EastNorth p2 = ws.getSecondNode().getEastNorth();
         if (snapHelper.dir2 != null && getCurrentBaseNode() != null) {
             EastNorth xPoint = Geometry.getSegmentSegmentIntersection(p1, p2, snapHelper.dir2,
                     getCurrentBaseNode().getEastNorth());
-            if (xPoint!=null) {
+            if (xPoint != null) {
                 n.setEastNorth(xPoint);
             }
         }
@@ -1115,7 +1124,7 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
             return;
 
         Graphics2D g2 = g;
-        snapHelper.drawIfNeeded(g2,mv);
+        snapHelper.drawIfNeeded(g2, mv);
         if (!drawHelperLine || wayIsFinished || shift)
             return;
 
@@ -1125,17 +1134,18 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
         } else if (!snapHelper.drawConstructionGeometry)
             return;
         GeneralPath b = new GeneralPath();
-        Point p1=mv.getPoint(getCurrentBaseNode());
-        Point p2=mv.getPoint(currentMouseEastNorth);
+        Point p1 = mv.getPoint(getCurrentBaseNode());
+        Point p2 = mv.getPoint(currentMouseEastNorth);
 
         double t = Math.atan2(p2.y-p1.y, p2.x-p1.x) + Math.PI;
 
-        b.moveTo(p1.x,p1.y); b.lineTo(p2.x, p2.y);
+        b.moveTo(p1.x, p1.y);
+        b.lineTo(p2.x, p2.y);
 
         // if alt key is held ("start new way"), draw a little perpendicular line
         if (alt) {
-            b.moveTo((int)(p1.x + 8*Math.cos(t+PHI)), (int)(p1.y + 8*Math.sin(t+PHI)));
-            b.lineTo((int)(p1.x + 8*Math.cos(t-PHI)), (int)(p1.y + 8*Math.sin(t-PHI)));
+            b.moveTo((int) (p1.x + 8*Math.cos(t+PHI)), (int) (p1.y + 8*Math.sin(t+PHI)));
+            b.lineTo((int) (p1.x + 8*Math.cos(t-PHI)), (int) (p1.y + 8*Math.sin(t-PHI)));
         }
 
         g2.draw(b);
@@ -1184,12 +1194,12 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
          */
         if (getCurrentBaseNode() != null && !wayIsFinished) {
             if (alt) {
-                rv.append(" ").append(tr("Start new way from last node."));
+                rv.append(' ').append(tr("Start new way from last node."));
             } else {
-                rv.append(" ").append(tr("Continue way from last node."));
+                rv.append(' ').append(tr("Continue way from last node."));
             }
             if (snapHelper.isSnapOn()) {
-                rv.append(" ").append(tr("Angle snapping active."));
+                rv.append(' ').append(tr("Angle snapping active."));
             }
         }
 
@@ -1212,7 +1222,7 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
             Way w = getCurrentDataSet().getSelectedWays().iterator().next();
             for (Node m : w.getNodes()) {
                 if (m.equals(mouseOnExistingNode) || mouseOnExistingWays.contains(w)) {
-                    rv.append(" ").append(tr("Finish drawing."));
+                    rv.append(' ').append(tr("Finish drawing."));
                     break;
                 }
             }
@@ -1261,30 +1271,104 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
         @Override
         public void actionPerformed(ActionEvent e) {
             Main.main.undoRedo.undo();
-            Node n=null;
-            Command lastCmd=Main.main.undoRedo.commands.peekLast();
-            if (lastCmd==null) return;
+            Node n = null;
+            Command lastCmd = Main.main.undoRedo.commands.peekLast();
+            if (lastCmd == null) return;
             for (OsmPrimitive p: lastCmd.getParticipatingPrimitives()) {
                 if (p instanceof Node) {
-                    if (n==null) {
-                        n=(Node) p; // found one node
-                        wayIsFinished=false;
+                    if (n == null) {
+                        n = (Node) p; // found one node
+                        wayIsFinished = false;
                     }  else {
                         // if more than 1 node were affected by previous command,
                         // we have no way to continue, so we forget about found node
-                        n=null;
+                        n = null;
                         break;
                     }
                 }
             }
             // select last added node - maybe we will continue drawing from it
-            if (n!=null) {
+            if (n != null) {
                 getCurrentDataSet().addSelected(n);
             }
         }
     }
 
     private class SnapHelper {
+        private final class AnglePopupMenu extends JPopupMenu {
+
+            private final JCheckBoxMenuItem repeatedCb = new JCheckBoxMenuItem(
+                    new AbstractAction(tr("Toggle snapping by {0}", getShortcut().getKeyText())) {
+                @Override
+                public void actionPerformed(ActionEvent e) {
+                    boolean sel = ((JCheckBoxMenuItem) e.getSource()).getState();
+                    Main.pref.put("draw.anglesnap.toggleOnRepeatedA", sel);
+                    init();
+                }
+            });
+
+            private final JCheckBoxMenuItem helperCb = new JCheckBoxMenuItem(
+                    new AbstractAction(tr("Show helper geometry")) {
+                @Override
+                public void actionPerformed(ActionEvent e) {
+                    boolean sel = ((JCheckBoxMenuItem) e.getSource()).getState();
+                    Main.pref.put("draw.anglesnap.drawConstructionGeometry", sel);
+                    Main.pref.put("draw.anglesnap.drawProjectedPoint", sel);
+                    Main.pref.put("draw.anglesnap.showAngle", sel);
+                    init();
+                    enableSnapping();
+                }
+            });
+
+            private final JCheckBoxMenuItem projectionCb = new JCheckBoxMenuItem(
+                    new AbstractAction(tr("Snap to node projections")) {
+                @Override
+                public void actionPerformed(ActionEvent e) {
+                    boolean sel = ((JCheckBoxMenuItem) e.getSource()).getState();
+                    Main.pref.put("draw.anglesnap.projectionsnap", sel);
+                    init();
+                    enableSnapping();
+                }
+            });
+
+            private AnglePopupMenu() {
+                helperCb.setState(Main.pref.getBoolean("draw.anglesnap.drawConstructionGeometry", true));
+                projectionCb.setState(Main.pref.getBoolean("draw.anglesnap.projectionsnapgvff", true));
+                repeatedCb.setState(Main.pref.getBoolean("draw.anglesnap.toggleOnRepeatedA", true));
+                add(repeatedCb);
+                add(helperCb);
+                add(projectionCb);
+                add(new AbstractAction(tr("Disable")) {
+                    @Override public void actionPerformed(ActionEvent e) {
+                        saveAngles("180");
+                        init();
+                        enableSnapping();
+                    }
+                });
+                add(new AbstractAction(tr("0,90,...")) {
+                    @Override public void actionPerformed(ActionEvent e) {
+                        saveAngles("0", "90", "180");
+                        init();
+                        enableSnapping();
+                    }
+                });
+                add(new AbstractAction(tr("0,45,90,...")) {
+                    @Override public void actionPerformed(ActionEvent e) {
+                        saveAngles("0", "45", "90", "135", "180");
+                        init();
+                        enableSnapping();
+                    }
+                });
+                add(new AbstractAction(tr("0,30,45,60,90,...")) {
+                    @Override public void actionPerformed(ActionEvent e) {
+                        saveAngles("0", "30", "45", "60", "90", "120", "135", "150", "180");
+                        init();
+                        enableSnapping();
+                    }
+                });
+            }
+        }
+
         private boolean snapOn; // snapping is turned on
 
         private boolean active; // snapping is active for current mouse position
@@ -1302,7 +1386,7 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
         private String labelText;
         private double lastAngle;
 
-        private double customBaseHeading=-1; // angle of base line, if not last segment)
+        private double customBaseHeading = -1; // angle of base line, if not last segment)
         private EastNorth segmentPoint1; // remembered first point of base segment
         private EastNorth segmentPoint2; // remembered second point of base segment
         private EastNorth projectionSource; // point that we are projecting to the line
@@ -1310,10 +1394,10 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
         private double[] snapAngles;
         private double snapAngleTolerance;
 
-        private double pe,pn; // (pe,pn) - direction of snapping line
-        private double e0,n0; // (e0,n0) - origin of snapping line
+        private double pe, pn; // (pe, pn) - direction of snapping line
+        private double e0, n0; // (e0, n0) - origin of snapping line
 
-        private final String fixFmt="%d "+tr("FIX");
+        private final String fixFmt = "%d "+tr("FIX");
         private Color snapHelperColor;
         private Color highlightColor;
 
@@ -1322,26 +1406,37 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
         private Stroke highlightStroke;
 
         private JCheckBoxMenuItem checkBox;
-        public final Color ORANGE_TRANSPARENT = new Color(Color.ORANGE.getRed(),Color.ORANGE.getGreen(),Color.ORANGE.getBlue(),128);
+
+        private MouseListener anglePopupListener = new PopupMenuLauncher(new AnglePopupMenu()) {
+            @Override
+            public void mouseClicked(MouseEvent e) {
+                super.mouseClicked(e);
+                if (e.getButton() == MouseEvent.BUTTON1) {
+                    toggleSnapping();
+                    updateStatusLine();
+                }
+            }
+        };
 
         public void init() {
-            snapOn=false;
+            snapOn = false;
             checkBox.setState(snapOn);
-            fixed=false; absoluteFix=false;
+            fixed = false;
+            absoluteFix = false;
 
             Collection<String> angles = Main.pref.getCollection("draw.anglesnap.angles",
-                    Arrays.asList("0","30","45","60","90","120","135","150","180"));
+                    Arrays.asList("0", "30", "45", "60", "90", "120", "135", "150", "180"));
 
             snapAngles = new double[2*angles.size()];
-            int i=0;
+            int i = 0;
             for (String s: angles) {
                 try {
                     snapAngles[i] = Double.parseDouble(s); i++;
                     snapAngles[i] = 360-Double.parseDouble(s); i++;
                 } catch (NumberFormatException e) {
                     Main.warn("Incorrect number in draw.anglesnap.angles preferences: "+s);
-                    snapAngles[i]=0;i++;
-                    snapAngles[i]=0;i++;
+                    snapAngles[i] = 0; i++;
+                    snapAngles[i] = 0; i++;
                 }
             }
             snapAngleTolerance = Main.pref.getDouble("draw.anglesnap.tolerance", 5.0);
@@ -1356,24 +1451,24 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
             snapHelperColor = Main.pref.getColor(marktr("draw angle snap"), Color.ORANGE);
 
             highlightColor = Main.pref.getColor(marktr("draw angle snap highlight"), ORANGE_TRANSPARENT);
-            highlightStroke = GuiHelper.getCustomizedStroke(Main.pref.get("draw.anglesnap.stroke.highlight","10"));
-            helperStroke = GuiHelper.getCustomizedStroke(Main.pref.get("draw.anglesnap.stroke.helper","1 4"));
+            highlightStroke = GuiHelper.getCustomizedStroke(Main.pref.get("draw.anglesnap.stroke.highlight", "10"));
+            helperStroke = GuiHelper.getCustomizedStroke(Main.pref.get("draw.anglesnap.stroke.helper", "1 4"));
         }
 
         public void saveAngles(String ... angles) {
             Main.pref.putCollection("draw.anglesnap.angles", Arrays.asList(angles));
         }
 
-        public  void setMenuCheckBox(JCheckBoxMenuItem checkBox) {
+        public void setMenuCheckBox(JCheckBoxMenuItem checkBox) {
             this.checkBox = checkBox;
         }
 
-        public  void drawIfNeeded(Graphics2D g2, MapView mv) {
+        public void drawIfNeeded(Graphics2D g2, MapView mv) {
             if (!snapOn || !active)
                 return;
-            Point p1=mv.getPoint(getCurrentBaseNode());
-            Point p2=mv.getPoint(dir2);
-            Point p3=mv.getPoint(projected);
+            Point p1 = mv.getPoint(getCurrentBaseNode());
+            Point p2 = mv.getPoint(dir2);
+            Point p3 = mv.getPoint(projected);
             GeneralPath b;
             if (drawConstructionGeometry) {
                 g2.setColor(snapHelperColor);
@@ -1381,11 +1476,11 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
 
                 b = new GeneralPath();
                 if (absoluteFix) {
-                    b.moveTo(p2.x,p2.y);
-                    b.lineTo(2*p1.x-p2.x,2*p1.y-p2.y); // bi-directional line
+                    b.moveTo(p2.x, p2.y);
+                    b.lineTo(2*p1.x-p2.x, 2*p1.y-p2.y); // bi-directional line
                 } else {
-                    b.moveTo(p2.x,p2.y);
-                    b.lineTo(p3.x,p3.y);
+                    b.moveTo(p2.x, p2.y);
+                    b.lineTo(p3.x, p3.y);
                 }
                 g2.draw(b);
             }
@@ -1393,9 +1488,9 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
                 g2.setColor(snapHelperColor);
                 g2.setStroke(helperStroke);
                 b = new GeneralPath();
-                b.moveTo(p3.x,p3.y);
-                Point pp=mv.getPoint(projectionSource);
-                b.lineTo(pp.x,pp.y);
+                b.moveTo(p3.x, p3.y);
+                Point pp = mv.getPoint(projectionSource);
+                b.lineTo(pp.x, pp.y);
                 g2.draw(b);
             }
 
@@ -1403,18 +1498,18 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
                 g2.setColor(highlightColor);
                 g2.setStroke(highlightStroke);
                 b = new GeneralPath();
-                Point pp1=mv.getPoint(segmentPoint1);
-                Point pp2=mv.getPoint(segmentPoint2);
-                b.moveTo(pp1.x,pp1.y);
-                b.lineTo(pp2.x,pp2.y);
+                Point pp1 = mv.getPoint(segmentPoint1);
+                Point pp2 = mv.getPoint(segmentPoint2);
+                b.moveTo(pp1.x, pp1.y);
+                b.lineTo(pp2.x, pp2.y);
                 g2.draw(b);
             }
 
             g2.setColor(rubberLineColor);
             g2.setStroke(normalStroke);
             b = new GeneralPath();
-            b.moveTo(p1.x,p1.y);
-            b.lineTo(p3.x,p3.y);
+            b.moveTo(p1.x, p1.y);
+            b.lineTo(p3.x, p3.y);
             g2.draw(b);
 
             g2.drawString(labelText, p3.x-5, p3.y+20);
@@ -1434,15 +1529,15 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
             EastNorth snapPoint = currentEN;
             double angle = -1;
 
-            double activeBaseHeading = (customBaseHeading>=0)? customBaseHeading : baseHeading;
+            double activeBaseHeading = (customBaseHeading >= 0) ? customBaseHeading : baseHeading;
 
-            if (snapOn && (activeBaseHeading>=0)) {
+            if (snapOn && (activeBaseHeading >= 0)) {
                 angle = curHeading - activeBaseHeading;
                 if (angle < 0) {
-                    angle+=360;
+                    angle += 360;
                 }
                 if (angle > 360) {
-                    angle=0;
+                    angle = 0;
                 }
 
                 double nearestAngle;
@@ -1452,11 +1547,11 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
                 } else {
                     nearestAngle = getNearestAngle(angle);
                     if (getAngleDelta(nearestAngle, angle) < snapAngleTolerance) {
-                        active = (customBaseHeading>=0)? true : Math.abs(nearestAngle - 180) > 1e-3;
+                        active = (customBaseHeading >= 0) ? true : Math.abs(nearestAngle - 180) > 1e-3;
                         // if angle is to previous segment, exclude 180 degrees
                         lastAngle = nearestAngle;
                     } else {
-                        active=false;
+                        active = false;
                     }
                 }
 
@@ -1464,7 +1559,7 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
                     double phi;
                     e0 = p0.east();
                     n0 = p0.north();
-                    buildLabelText((nearestAngle<=180) ? nearestAngle : nearestAngle-360);
+                    buildLabelText((nearestAngle <= 180) ? nearestAngle : nearestAngle-360);
 
                     phi = (nearestAngle + activeBaseHeading) * Math.PI / 180;
                     // (pe,pn) - direction of snapping line
@@ -1484,13 +1579,13 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
             double hdg = Math.toDegrees(p0.heading(snapPoint));
             // heading of segment from current to calculated point, not to mouse position
 
-            if (baseHeading >=0 ) { // there is previous line segment with some heading
+            if (baseHeading >= 0) { // there is previous line segment with some heading
                 angle = hdg - baseHeading;
                 if (angle < 0) {
-                    angle+=360;
+                    angle += 360;
                 }
                 if (angle > 360) {
-                    angle=0;
+                    angle = 0;
                 }
             }
             showStatusInfo(angle, hdg, distance, isSnapOn());
@@ -1520,46 +1615,46 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
             }
         }
 
-        public  EastNorth getSnapPoint(EastNorth p) {
+        public EastNorth getSnapPoint(EastNorth p) {
             if (!active)
                 return p;
-            double de=p.east()-e0;
-            double dn=p.north()-n0;
+            double de = p.east()-e0;
+            double dn = p.north()-n0;
             double l = de*pe+dn*pn;
             double delta = Main.map.mapView.getDist100Pixel()/20;
-            if (!absoluteFix && l<delta) {
-                active=false;
+            if (!absoluteFix && l < delta) {
+                active = false;
                 return p;
             } //  do not go backward!
 
-            projectionSource=null;
+            projectionSource = null;
             if (snapToProjections) {
                 DataSet ds = getCurrentDataSet();
                 Collection<Way> selectedWays = ds.getSelectedWays();
-                if (selectedWays.size()==1) {
+                if (selectedWays.size() == 1) {
                     Way w = selectedWays.iterator().next();
-                    Collection <EastNorth> pointsToProject = new ArrayList<>();
-                    if (w.getNodesCount()<1000) {
+                    Collection<EastNorth> pointsToProject = new ArrayList<>();
+                    if (w.getNodesCount() < 1000) {
                         for (Node n: w.getNodes()) {
                             pointsToProject.add(n.getEastNorth());
                         }
                     }
-                    if (customBaseHeading >=0 ) {
+                    if (customBaseHeading >= 0) {
                         pointsToProject.add(segmentPoint1);
                         pointsToProject.add(segmentPoint2);
                     }
-                    EastNorth enOpt=null;
-                    double dOpt=1e5;
+                    EastNorth enOpt = null;
+                    double dOpt = 1e5;
                     for (EastNorth en: pointsToProject) { // searching for besht projection
                         double l1 = (en.east()-e0)*pe+(en.north()-n0)*pn;
                         double d1 = Math.abs(l1-l);
                         if (d1 < delta && d1 < dOpt) {
-                            l=l1;
+                            l = l1;
                             enOpt = en;
                             dOpt = d1;
                         }
                     }
-                    if (enOpt!=null) {
+                    if (enOpt != null) {
                         projectionSource =  enOpt;
                     }
                 }
@@ -1567,69 +1662,71 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
             return projected = new EastNorth(e0+l*pe, n0+l*pn);
         }
 
-
         public void noSnapNow() {
-            active=false;
-            dir2=null; projected=null;
-            labelText=null;
+            active = false;
+            dir2 = null;
+            projected = null;
+            labelText = null;
         }
 
         public void setBaseSegment(WaySegment seg) {
-            if (seg==null) return;
-            segmentPoint1=seg.getFirstNode().getEastNorth();
-            segmentPoint2=seg.getSecondNode().getEastNorth();
+            if (seg == null) return;
+            segmentPoint1 = seg.getFirstNode().getEastNorth();
+            segmentPoint2 = seg.getSecondNode().getEastNorth();
 
             double hdg = segmentPoint1.heading(segmentPoint2);
-            hdg=Math.toDegrees(hdg);
-            if (hdg<0) {
-                hdg+=360;
+            hdg = Math.toDegrees(hdg);
+            if (hdg < 0) {
+                hdg += 360;
             }
-            if (hdg>360) {
-                hdg-=360;
+            if (hdg > 360) {
+                hdg -= 360;
             }
-            customBaseHeading=hdg;
+            customBaseHeading = hdg;
         }
 
         private void nextSnapMode() {
             if (snapOn) {
                 // turn off snapping if we are in fixed mode or no actile snapping line exist
-                if (fixed || !active) { snapOn=false; unsetFixedMode(); } else {
+                if (fixed || !active) {
+                    snapOn = false;
+                    unsetFixedMode();
+                } else {
                     setFixedMode();
                 }
             } else {
-                snapOn=true;
+                snapOn = true;
                 unsetFixedMode();
             }
             checkBox.setState(snapOn);
-            customBaseHeading=-1;
+            customBaseHeading = -1;
         }
 
         private void enableSnapping() {
             snapOn = true;
             checkBox.setState(snapOn);
-            customBaseHeading=-1;
+            customBaseHeading = -1;
             unsetFixedMode();
         }
 
         private void toggleSnapping() {
             snapOn = !snapOn;
             checkBox.setState(snapOn);
-            customBaseHeading=-1;
+            customBaseHeading = -1;
             unsetFixedMode();
         }
 
         public void setFixedMode() {
             if (active) {
-                fixed=true;
+                fixed = true;
             }
         }
 
-
         public  void unsetFixedMode() {
-            fixed=false;
-            absoluteFix=false;
-            lastAngle=0;
-            active=false;
+            fixed = false;
+            absoluteFix = false;
+            lastAngle = 0;
+            active = false;
         }
 
         public  boolean isActive() {
@@ -1641,7 +1738,7 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
         }
 
         private double getNearestAngle(double angle) {
-            double delta,minDelta=1e5, bestAngle=0.0;
+            double delta, minDelta = 1e5, bestAngle = 0.0;
             for (double snapAngle : snapAngles) {
                 delta = getAngleDelta(angle, snapAngle);
                 if (delta < minDelta) {
@@ -1650,14 +1747,14 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
                 }
             }
             if (Math.abs(bestAngle-360) < 1e-3) {
-                bestAngle=0;
+                bestAngle = 0;
             }
             return bestAngle;
         }
 
         private double getAngleDelta(double a, double b) {
             double delta = Math.abs(a-b);
-            if (delta>180)
+            if (delta > 180)
                 return 360-delta;
             else
                 return delta;
@@ -1670,85 +1767,12 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
                 toggleSnapping();
             }
         }
-
-        private MouseListener anglePopupListener = new PopupMenuLauncher(new JPopupMenu() {
-            private JCheckBoxMenuItem repeatedCb = new JCheckBoxMenuItem(
-                    new AbstractAction(tr("Toggle snapping by {0}", getShortcut().getKeyText())) {
-                @Override public void actionPerformed(ActionEvent e) {
-                    boolean sel=((JCheckBoxMenuItem) e.getSource()).getState();
-                    Main.pref.put("draw.anglesnap.toggleOnRepeatedA", sel);
-                    init();
-                }
-            });
-            private JCheckBoxMenuItem helperCb = new JCheckBoxMenuItem(
-                    new AbstractAction(tr("Show helper geometry")) {
-                @Override public void actionPerformed(ActionEvent e) {
-                    boolean sel=((JCheckBoxMenuItem) e.getSource()).getState();
-                    Main.pref.put("draw.anglesnap.drawConstructionGeometry", sel);
-                    Main.pref.put("draw.anglesnap.drawProjectedPoint", sel);
-                    Main.pref.put("draw.anglesnap.showAngle", sel);
-                    init();
-                    enableSnapping();
-                }
-            });
-            private JCheckBoxMenuItem projectionCb = new JCheckBoxMenuItem(
-                    new AbstractAction(tr("Snap to node projections")) {
-                @Override public void actionPerformed(ActionEvent e) {
-                    boolean sel=((JCheckBoxMenuItem) e.getSource()).getState();
-                    Main.pref.put("draw.anglesnap.projectionsnap", sel);
-                    init();
-                    enableSnapping();
-                }
-            });
-            {
-                helperCb.setState(Main.pref.getBoolean("draw.anglesnap.drawConstructionGeometry",true));
-                projectionCb.setState(Main.pref.getBoolean("draw.anglesnap.projectionsnapgvff",true));
-                repeatedCb.setState(Main.pref.getBoolean("draw.anglesnap.toggleOnRepeatedA",true));
-                add(repeatedCb);
-                add(helperCb);
-                add(projectionCb);
-                add(new AbstractAction(tr("Disable")) {
-                    @Override public void actionPerformed(ActionEvent e) {
-                        saveAngles("180");
-                        init();
-                        enableSnapping();
-                    }
-                });
-                add(new AbstractAction(tr("0,90,...")) {
-                    @Override public void actionPerformed(ActionEvent e) {
-                        saveAngles("0","90","180");
-                        init();
-                        enableSnapping();
-                    }
-                });
-                add(new AbstractAction(tr("0,45,90,...")) {
-                    @Override public void actionPerformed(ActionEvent e) {
-                        saveAngles("0","45","90","135","180");
-                        init();
-                        enableSnapping();
-                    }
-                });
-                add(new AbstractAction(tr("0,30,45,60,90,...")) {
-                    @Override public void actionPerformed(ActionEvent e) {
-                        saveAngles("0","30","45","60","90","120","135","150","180");
-                        init();
-                        enableSnapping();
-                    }
-                });
-            }
-        }) {
-            @Override
-            public void mouseClicked(MouseEvent e) {
-                super.mouseClicked(e);
-                if (e.getButton() == MouseEvent.BUTTON1) {
-                    toggleSnapping();
-                    updateStatusLine();
-                }
-            }
-        };
     }
 
     private class SnapChangeAction extends JosmAction {
+        /**
+         * Constructs a new {@code SnapChangeAction}.
+         */
         public SnapChangeAction() {
             super(tr("Angle snapping"), /* ICON() */ "anglesnap",
                     tr("Switch angle snapping mode while drawing"), null, false);
@@ -1757,7 +1781,7 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
 
         @Override
         public void actionPerformed(ActionEvent e) {
-            if (snapHelper!=null) {
+            if (snapHelper != null) {
                 snapHelper.toggleSnapping();
             }
         }
diff --git a/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java b/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java
index bdd244c..d61bb61 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java
@@ -173,7 +173,8 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
     // Dual alignment mode stuff
     /** {@code true}, if dual alignment mode is enabled. User wants following extrude to be dual aligned. */
     private boolean dualAlignEnabled;
-    /** {@code true}, if dual alignment is active. User is dragging the mouse, required conditions are met. Treat {@link #mode} (extrude/translate/create_new) as dual aligned. */
+    /** {@code true}, if dual alignment is active. User is dragging the mouse, required conditions are met.
+     * Treat {@link #mode} (extrude/translate/create_new) as dual aligned. */
     private boolean dualAlignActive;
     /** Dual alignment reference segments */
     private transient ReferenceSegment dualAlignSegment1, dualAlignSegment2;
@@ -231,7 +232,7 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
 
     private JCheckBoxMenuItem addDualAlignMenuItem() {
         int n = Main.main.menu.editMenu.getItemCount();
-        for (int i = n-1; i>0; i--) {
+        for (int i = n-1; i > 0; i--) {
             JMenuItem item = Main.main.menu.editMenu.getItem(i);
             if (item != null && item.getAction() != null && item.getAction() instanceof DualAlignChangeAction) {
                 Main.main.menu.editMenu.remove(i);
@@ -251,9 +252,9 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
             rv = new StringBuilder(tr("Drag a way segment to make a rectangle. Ctrl-drag to move a segment along its normal, " +
                 "Alt-drag to create a new rectangle, double click to add a new node."));
             if (dualAlignEnabled) {
-                rv.append(" ").append(tr("Dual alignment active."));
+                rv.append(' ').append(tr("Dual alignment active."));
                 if (dualAlignSegmentCollapsed)
-                    rv.append(" ").append(tr("Segment collapsed due to its direction reversing."));
+                    rv.append(' ').append(tr("Segment collapsed due to its direction reversing."));
             }
         } else {
             if (mode == Mode.translate)
@@ -269,9 +270,9 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
                 rv = new StringBuilder();
             }
             if (dualAlignActive) {
-                rv.append(" ").append(tr("Dual alignment active."));
+                rv.append(' ').append(tr("Dual alignment active."));
                 if (dualAlignSegmentCollapsed) {
-                    rv.append(" ").append(tr("Segment collapsed due to its direction reversing."));
+                    rv.append(' ').append(tr("Segment collapsed due to its direction reversing."));
                 }
             }
         }
@@ -295,7 +296,7 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
     }
 
     private void readPreferences() {
-        initialMoveDelay = Main.pref.getInteger("edit.initial-move-delay",200);
+        initialMoveDelay = Main.pref.getInteger("edit.initial-move-delay", 200);
         initialMoveThreshold = Main.pref.getInteger("extrude.initial-move-threshold", 1);
         mainColor = Main.pref.getColor(marktr("Extrude: main line"), null);
         if (mainColor == null) mainColor = PaintColors.SELECTED.get();
@@ -339,7 +340,7 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
         if (mode == Mode.select) {
             Main.map.mapView.setNewCursor(ctrl ? cursorTranslate : alt ? cursorCreateNew : shift ? cursorCreateNodes : cursor, this);
         }
-    };
+    }
 
     @Override
     public void doKeyPressed(KeyEvent e) {
@@ -368,13 +369,13 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
      * If the left mouse button is pressed over a segment or a node, switches
      * to appropriate {@link #mode}, depending on Ctrl/Alt/Shift modifiers and
      * {@link #dualAlignEnabled}.
-     * @param e
+     * @param e current mouse event
      */
     @Override
     public void mousePressed(MouseEvent e) {
-        if(!Main.map.mapView.isActiveLayerVisible())
+        if (!Main.map.mapView.isActiveLayerVisible())
             return;
-        if (!(Boolean)this.getValue("active"))
+        if (!(Boolean) this.getValue("active"))
             return;
         if (e.getButton() != MouseEvent.BUTTON1)
             return;
@@ -447,11 +448,11 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
 
     /**
      * Performs action depending on what {@link #mode} we're in.
-     * @param e
+     * @param e current mouse event
      */
     @Override
     public void mouseDragged(MouseEvent e) {
-        if(!Main.map.mapView.isActiveLayerVisible())
+        if (!Main.map.mapView.isActiveLayerVisible())
             return;
 
         // do not count anything as a drag if it lasts less than 100 milliseconds.
@@ -472,8 +473,8 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
                 if (mode == Mode.extrude || mode == Mode.create_new) {
                     // nothing here
                 } else if (mode == Mode.translate) {
-                    EastNorth movement1 = initialN1en.sub(newN1en);
-                    EastNorth movement2 = initialN2en.sub(newN2en);
+                    EastNorth movement1 = newN1en.subtract(initialN1en);
+                    EastNorth movement2 = newN2en.subtract(initialN2en);
                     // move nodes to new position
                     if (moveCommand == null || moveCommand2 == null) {
                         // make a new move commands
@@ -509,12 +510,12 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
 
     /**
      * Does anything that needs to be done, then switches back to select mode.
-     * @param e
+     * @param e current mouse event
      */
     @Override
     public void mouseReleased(MouseEvent e) {
 
-        if(!Main.map.mapView.isActiveLayerVisible())
+        if (!Main.map.mapView.isActiveLayerVisible())
             return;
 
         if (mode == Mode.select) {
@@ -525,11 +526,10 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
                     createNewRectangle();
                 }
             } else if (mode == Mode.extrude) {
-                if( e.getClickCount() == 2 && e.getPoint().equals(initialMousePos) ) {
+                if (e.getClickCount() == 2 && e.getPoint().equals(initialMousePos)) {
                     // double click adds a new node
                     addNewNode(e);
-                }
-                else if (e.getPoint().distance(initialMousePos) > initialMoveThreshold && newN1en != null && selectedSegment != null) {
+                } else if (e.getPoint().distance(initialMousePos) > initialMoveThreshold && newN1en != null && selectedSegment != null) {
                     // main extrusion commands
                     performExtrusion();
                 }
@@ -622,7 +622,8 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
         //find if the new points overlap existing segments (in case of 90 degree angles)
         Node prevNode = getPreviousNode(selectedSegment.lowerIndex);
         boolean nodeOverlapsSegment = prevNode != null && Geometry.segmentsParallel(initialN1en, prevNode.getEastNorth(), initialN1en, newN1en);
-        // segmentAngleZero marks subset of nodeOverlapsSegment. nodeOverlapsSegment is true if angle between segments is 0 or PI, segmentAngleZero only if angle is 0
+        // segmentAngleZero marks subset of nodeOverlapsSegment.
+        // nodeOverlapsSegment is true if angle between segments is 0 or PI, segmentAngleZero only if angle is 0
         boolean segmentAngleZero = prevNode != null && Math.abs(Geometry.getCornerAngle(prevNode.getEastNorth(), initialN1en, newN1en)) < 1e-5;
         boolean hasOtherWays = hasNodeOtherWays(selectedSegment.getFirstNode(), selectedSegment.way);
         List<Node> changedNodes = new ArrayList<>();
@@ -645,7 +646,7 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
             Node n1New = new Node(Main.getProjection().eastNorth2latlon(newN1en));
             wnew.addNode(insertionPoint, n1New);
             wayWasModified = true;
-            insertionPoint ++;
+            insertionPoint++;
             cmds.add(new AddCommand(n1New));
             changedNodes.add(n1New);
         }
@@ -675,7 +676,7 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
             Node n2New = new Node(Main.getProjection().eastNorth2latlon(newN2en));
             wnew.addNode(insertionPoint, n2New);
             wayWasModified = true;
-            insertionPoint ++;
+            insertionPoint++;
             cmds.add(new AddCommand(n2New));
             changedNodes.add(n2New);
         }
@@ -701,7 +702,7 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
         Node targetNode = MergeNodesAction.selectTargetNode(changedNodes);
         Node locNode = MergeNodesAction.selectTargetLocationNode(changedNodes);
         Command mergeCmd = MergeNodesAction.mergeNodes(Main.main.getEditLayer(), changedNodes, targetNode, locNode);
-        if (mergeCmd!=null) {
+        if (mergeCmd != null) {
             Main.main.undoRedo.add(mergeCmd);
         } else {
             // undo extruding command itself
@@ -711,8 +712,8 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
 
     /**
      * This method tests if {@code node} has other ways apart from the given one.
-     * @param node
-     * @param myWay
+     * @param node node to test
+     * @param myWay way known to contain this node
      * @return {@code true} if {@code node} belongs only to {@code myWay}, false if there are more ways.
      */
     private static boolean hasNodeOtherWays(Node node, Way myWay) {
@@ -732,7 +733,7 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
     private EastNorth calculateBestMovement(EastNorth mouseEn) {
 
         EastNorth initialMouseEn = Main.map.mapView.getEastNorth(initialMousePos.x, initialMousePos.y);
-        EastNorth mouseMovement = initialMouseEn.sub(mouseEn);
+        EastNorth mouseMovement = mouseEn.subtract(initialMouseEn);
 
         double bestDistance = Double.POSITIVE_INFINITY;
         EastNorth bestMovement = null;
@@ -770,7 +771,7 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
     private static EastNorth calculateSegmentOffset(EastNorth segmentP1, EastNorth segmentP2, EastNorth moveDirection,
             EastNorth targetPos) {
         EastNorth intersectionPoint;
-        if (segmentP1.distanceSq(segmentP2)>1e-7) {
+        if (segmentP1.distanceSq(segmentP2) > 1e-7) {
             intersectionPoint = Geometry.getLineLineIntersection(segmentP1, segmentP2, targetPos, targetPos.add(moveDirection));
         } else {
             intersectionPoint = Geometry.closestPointToLine(targetPos, targetPos.add(moveDirection), segmentP1);
@@ -780,7 +781,7 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
             return null;
         else
             //return distance form base to target position
-            return intersectionPoint.sub(targetPos);
+            return targetPos.subtract(intersectionPoint);
     }
 
     /**
@@ -856,8 +857,8 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
 
         EastNorth n1en = selectedSegment.getFirstNode().getEastNorth();
         EastNorth n2en = selectedSegment.getSecondNode().getEastNorth();
-        if (n1en.distance(prevNode.getEastNorth())<1e-4 ||
-            n2en.distance(nextNode.getEastNorth())<1e-4 ) {
+        if (n1en.distance(prevNode.getEastNorth()) < 1e-4 ||
+            n2en.distance(nextNode.getEastNorth()) < 1e-4) {
             return false;
         }
 
@@ -913,7 +914,8 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
         EastNorth n1movedEn = initialN1en.add(bestMovement), n2movedEn;
 
         // find out the movement distance, in metres
-        double distance = Main.getProjection().eastNorth2latlon(initialN1en).greatCircleDistance(Main.getProjection().eastNorth2latlon(n1movedEn));
+        double distance = Main.getProjection().eastNorth2latlon(initialN1en).greatCircleDistance(
+                Main.getProjection().eastNorth2latlon(n1movedEn));
         Main.map.statusLine.setDist(distance);
         updateStatusLine();
 
@@ -927,7 +929,8 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
             newN2en = Geometry.getLineLineIntersection(n1movedEn, n2movedEn, dualAlignSegment2.p1, dualAlignSegment2.p2);
             if (newN1en == null || newN2en == null) return bestMovement;
             if (keepSegmentDirection && isOppositeDirection(newN1en, newN2en, initialN1en, initialN2en)) {
-                EastNorth collapsedSegmentPosition = Geometry.getLineLineIntersection(dualAlignSegment1.p1, dualAlignSegment1.p2, dualAlignSegment2.p1, dualAlignSegment2.p2);
+                EastNorth collapsedSegmentPosition = Geometry.getLineLineIntersection(dualAlignSegment1.p1, dualAlignSegment1.p2,
+                        dualAlignSegment2.p1, dualAlignSegment2.p2);
                 newN1en = collapsedSegmentPosition;
                 newN2en = collapsedSegmentPosition;
                 dualAlignSegmentCollapsed = true;
@@ -1050,8 +1053,8 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
                     g2.setColor(mainColor);
                     if (p1.distance(p2) < 3) {
                         g2.setStroke(mainStroke);
-                        g2.drawOval((int)(p1.x-symbolSize/2), (int)(p1.y-symbolSize/2),
-                                (int)(symbolSize), (int)(symbolSize));
+                        g2.drawOval((int) (p1.x-symbolSize/2), (int) (p1.y-symbolSize/2),
+                                (int) (symbolSize), (int) (symbolSize));
                     } else {
                         Line2D oldline = new Line2D.Double(p1, p2);
                         g2.setStroke(oldLineStroke);
@@ -1125,15 +1128,15 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
         double raoffsety = symbolSize*factor*normal.getY();
 
         double cx = center.getX(), cy = center.getY();
-        double k = (mirror ? -1 : 1);
+        double k = mirror ? -1 : 1;
         Point2D ra1 = new Point2D.Double(cx + raoffsetx, cy + raoffsety);
         Point2D ra3 = new Point2D.Double(cx - raoffsety*k, cy + raoffsetx*k);
         Point2D ra2 = new Point2D.Double(ra1.getX() - raoffsety*k, ra1.getY() + raoffsetx*k);
 
         GeneralPath ra = new GeneralPath();
-        ra.moveTo((float)ra1.getX(), (float)ra1.getY());
-        ra.lineTo((float)ra2.getX(), (float)ra2.getY());
-        ra.lineTo((float)ra3.getX(), (float)ra3.getY());
+        ra.moveTo((float) ra1.getX(), (float) ra1.getY());
+        ra.lineTo((float) ra2.getX(), (float) ra2.getY());
+        ra.lineTo((float) ra3.getX(), (float) ra3.getY());
         g2.setStroke(helperStrokeRA);
         g2.draw(ra);
     }
@@ -1141,11 +1144,10 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
     /**
      * Draws given reference segment.
      * @param g2 the Graphics2D object used to draw on
-     * @param mv
+     * @param mv map view
      * @param seg the reference segment
      */
-    private void drawReferenceSegment(Graphics2D g2, MapView mv, ReferenceSegment seg)
-    {
+    private void drawReferenceSegment(Graphics2D g2, MapView mv, ReferenceSegment seg) {
         Point p1 = mv.getPoint(seg.p1);
         Point p2 = mv.getPoint(seg.p2);
         GeneralPath b = new GeneralPath();
@@ -1167,18 +1169,20 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
         Rectangle bounds = g.getDeviceConfiguration().getBounds();
         try {
             AffineTransform invtrans = g.getTransform().createInverse();
-            Point2D widthpoint = invtrans.deltaTransform(new Point2D.Double(bounds.width,0), null);
-            Point2D heightpoint = invtrans.deltaTransform(new Point2D.Double(0,bounds.height), null);
+            Point2D widthpoint = invtrans.deltaTransform(new Point2D.Double(bounds.width, 0), null);
+            Point2D heightpoint = invtrans.deltaTransform(new Point2D.Double(0, bounds.height), null);
 
             // Here we should end up with a gross overestimate of the maximum viewport diagonal in what
             // Graphics2D calls 'user space'. Essentially a manhattan distance of manhattan distances.
             // This can be used as a safe length of line to generate which will always go off-viewport.
-            double linelength = Math.abs(widthpoint.getX()) + Math.abs(widthpoint.getY()) + Math.abs(heightpoint.getX()) + Math.abs(heightpoint.getY());
-
-            return new Line2D.Double(start, new Point2D.Double(start.getX() + (unitvector.getX() * linelength) , start.getY() + (unitvector.getY() * linelength)));
-        }
-        catch (NoninvertibleTransformException e) {
-            return new Line2D.Double(start, new Point2D.Double(start.getX() + (unitvector.getX() * 10) , start.getY() + (unitvector.getY() * 10)));
+            double linelength = Math.abs(widthpoint.getX()) + Math.abs(widthpoint.getY())
+                    + Math.abs(heightpoint.getX()) + Math.abs(heightpoint.getY());
+
+            return new Line2D.Double(start, new Point2D.Double(start.getX() + (unitvector.getX() * linelength) , start.getY()
+                    + (unitvector.getY() * linelength)));
+        } catch (NoninvertibleTransformException e) {
+            return new Line2D.Double(start, new Point2D.Double(start.getX() + (unitvector.getX() * 10) , start.getY()
+                    + (unitvector.getY() * 10)));
         }
     }
 }
diff --git a/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java b/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java
index 99efc4b..72cf5cf 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.actions.mapmode;
 
 import static org.openstreetmap.josm.tools.I18n.marktr;
@@ -148,7 +148,7 @@ public class ImproveWayAccuracyAction extends MapMode implements MapViewPaintabl
         moveNodeStroke = GuiHelper.getCustomizedStroke(Main.pref.get("improvewayaccuracy.stroke.move-node", "1 6"));
         addNodeStroke = GuiHelper.getCustomizedStroke(Main.pref.get("improvewayaccuracy.stroke.add-node", "1"));
         deleteNodeStroke = GuiHelper.getCustomizedStroke(Main.pref.get("improvewayaccuracy.stroke.delete-node", "1"));
-        dotSize = Main.pref.getInteger("improvewayaccuracy.dot-size",6);
+        dotSize = Main.pref.getInteger("improvewayaccuracy.dot-size", 6);
     }
 
     @Override
@@ -411,8 +411,11 @@ public class ImproveWayAccuracyAction extends MapMode implements MapViewPaintabl
                         int i = -1;
                         for (Pair<Node, Node> wpp : wpps) {
                             ++i;
-                            if ((wpp.a.equals(candidateSegment.getFirstNode())
-                                    && wpp.b.equals(candidateSegment.getSecondNode()) || (wpp.b.equals(candidateSegment.getFirstNode()) && wpp.a.equals(candidateSegment.getSecondNode())))) {
+                            boolean ab = wpp.a.equals(candidateSegment.getFirstNode())
+                                    && wpp.b.equals(candidateSegment.getSecondNode());
+                            boolean ba = wpp.b.equals(candidateSegment.getFirstNode())
+                                    && wpp.a.equals(candidateSegment.getSecondNode());
+                            if (ab || ba) {
                                 virtualSegments.add(new WaySegment(w, i));
                             }
                         }
diff --git a/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyHelper.java b/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyHelper.java
index ef33a27..c90e493 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyHelper.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyHelper.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.actions.mapmode;
 
 import java.awt.Point;
@@ -56,10 +56,7 @@ final class ImproveWayAccuracyHelper {
             }
         }
 
-        candidate = Main.map.mapView.getNearestWay(p,
-                OsmPrimitive.isSelectablePredicate);
-
-        return candidate;
+        return Main.map.mapView.getNearestWay(p, OsmPrimitive.isSelectablePredicate);
     }
 
     /**
@@ -88,6 +85,12 @@ final class ImproveWayAccuracyHelper {
         mainLoop:
         for (Node n : w.getNodes()) {
             EastNorth nEN = n.getEastNorth();
+
+            if (nEN == null) {
+                // Might happen if lat/lon for that point are not known.
+                continue;
+            }
+
             currentDistance = pEN.distance(nEN);
 
             if (currentDistance < bestDistance) {
@@ -144,11 +147,11 @@ final class ImproveWayAccuracyHelper {
 
             EastNorth a = wpp.a.getEastNorth();
             EastNorth b = wpp.b.getEastNorth();
-            
+
             // Finding intersection of the segment with its altitude from p
             EastNorth altitudeIntersection = Geometry.closestPointToSegment(a, b, pEN);
             currentDistance = pEN.distance(altitudeIntersection);
-            
+
             if (!altitudeIntersection.equals(a) && !altitudeIntersection.equals(b)) {
                 // If the segment intersects with the altitude from p,
                 // make an angle too big to let this candidate win any others
diff --git a/src/org/openstreetmap/josm/actions/mapmode/MapMode.java b/src/org/openstreetmap/josm/actions/mapmode/MapMode.java
index 78212bc..fb9e7fc 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/MapMode.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/MapMode.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.actions.mapmode;
 
 import java.awt.Cursor;
@@ -35,7 +35,7 @@ public abstract class MapMode extends JosmAction implements MouseListener, Mouse
     public MapMode(String name, String iconName, String tooltip, Shortcut shortcut, MapFrame mapFrame, Cursor cursor) {
         super(name, "mapmode/"+iconName, tooltip, shortcut, false);
         this.cursor = cursor;
-        putValue("active", false);
+        putValue("active", Boolean.FALSE);
     }
 
     /**
@@ -52,7 +52,7 @@ public abstract class MapMode extends JosmAction implements MouseListener, Mouse
      * Makes this map mode active.
      */
     public void enterMode() {
-        putValue("active", true);
+        putValue("active", Boolean.TRUE);
         Main.map.mapView.setNewCursor(cursor, this);
         updateStatusLine();
     }
@@ -61,7 +61,7 @@ public abstract class MapMode extends JosmAction implements MouseListener, Mouse
      * Makes this map mode inactive.
      */
     public void exitMode() {
-        putValue("active", false);
+        putValue("active", Boolean.FALSE);
         Main.map.mapView.resetCursor(this);
     }
 
@@ -99,7 +99,7 @@ public abstract class MapMode extends JosmAction implements MouseListener, Mouse
 
     protected void updateKeyModifiers(int modifiers) {
         ctrl = (modifiers & ActionEvent.CTRL_MASK) != 0;
-        alt = (modifiers & (ActionEvent.ALT_MASK|InputEvent.ALT_GRAPH_MASK)) != 0;
+        alt = (modifiers & (ActionEvent.ALT_MASK | InputEvent.ALT_GRAPH_MASK)) != 0;
         shift = (modifiers & ActionEvent.SHIFT_MASK) != 0;
     }
 
@@ -111,17 +111,37 @@ public abstract class MapMode extends JosmAction implements MouseListener, Mouse
     }
 
     @Override
-    public void mouseReleased(MouseEvent e) {requestFocusInMapView();}
+    public void mouseReleased(MouseEvent e) {
+        requestFocusInMapView();
+    }
+
     @Override
-    public void mouseExited(MouseEvent e) {}
+    public void mouseExited(MouseEvent e) {
+        // Do nothing
+    }
+
     @Override
-    public void mousePressed(MouseEvent e) {requestFocusInMapView();}
+    public void mousePressed(MouseEvent e) {
+        requestFocusInMapView();
+    }
+
     @Override
-    public void mouseClicked(MouseEvent e) {}
+    public void mouseClicked(MouseEvent e) {
+        // Do nothing
+    }
+
     @Override
-    public void mouseEntered(MouseEvent e) {}
+    public void mouseEntered(MouseEvent e) {
+        // Do nothing
+    }
+
     @Override
-    public void mouseMoved(MouseEvent e) {}
+    public void mouseMoved(MouseEvent e) {
+        // Do nothing
+    }
+
     @Override
-    public void mouseDragged(MouseEvent e) {}
+    public void mouseDragged(MouseEvent e) {
+        // Do nothing
+    }
 }
diff --git a/src/org/openstreetmap/josm/actions/mapmode/ModifiersSpec.java b/src/org/openstreetmap/josm/actions/mapmode/ModifiersSpec.java
index 46d3434..3598bc6 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/ModifiersSpec.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/ModifiersSpec.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.actions.mapmode;
 
 /**
@@ -16,10 +16,10 @@ public class ModifiersSpec {
      *  'A' = Alt, 'S' = Shift, 'C' = Ctrl
      *  Lowercase signifies off and '?' means unknown/optional.
      *  Order is Alt, Shift, Ctrl
-     * @param str
+     * @param str 3 letters string defining modifiers
      */
     public ModifiersSpec(String str) {
-        assert (str.length() == 3);
+        assert str.length() == 3;
         char a = str.charAt(0);
         char s = str.charAt(1);
         char c = str.charAt(2);
@@ -45,7 +45,7 @@ public class ModifiersSpec {
     }
 
     private boolean match(final int a, final int knownValue) {
-        assert (knownValue == ON | knownValue == OFF);
+        assert knownValue == ON | knownValue == OFF;
         return a == knownValue || a == UNKNOWN;
     }
 
diff --git a/src/org/openstreetmap/josm/actions/mapmode/ParallelWayAction.java b/src/org/openstreetmap/josm/actions/mapmode/ParallelWayAction.java
index ffecc43..f09880b 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/ParallelWayAction.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/ParallelWayAction.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.actions.mapmode;
 
 import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
@@ -31,7 +31,6 @@ import org.openstreetmap.josm.data.osm.WaySegment;
 import org.openstreetmap.josm.data.osm.visitor.paint.PaintColors;
 import org.openstreetmap.josm.gui.MapFrame;
 import org.openstreetmap.josm.gui.MapView;
-import org.openstreetmap.josm.gui.NavigatableComponent;
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.MapViewPaintable;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
@@ -155,7 +154,7 @@ public class ParallelWayAction extends MapMode implements ModifierListener, MapV
         mv.addMouseMotionListener(this);
         mv.addTemporaryLayer(this);
 
-        helpLineStroke = GuiHelper.getCustomizedStroke(getStringPref("stroke.hepler-line", "1" ));
+        helpLineStroke = GuiHelper.getCustomizedStroke(getStringPref("stroke.hepler-line", "1"));
         refLineStroke = GuiHelper.getCustomizedStroke(getStringPref("stroke.ref-line", "1 2 2"));
         mainColor = Main.pref.getColor(marktr("make parallel helper line"), null);
         if (mainColor == null) mainColor = PaintColors.SELECTED.get();
@@ -191,7 +190,9 @@ public class ParallelWayAction extends MapMode implements ModifierListener, MapV
         // TODO: dynamic messages based on preferences. (Could be problematic translation wise)
         switch (mode) {
         case normal:
+            // CHECKSTYLE.OFF: LineLength
             return tr("Select ways as in Select mode. Drag selected ways or a single way to create a parallel copy (Alt toggles tag preservation)");
+            // CHECKSTYLE.ON: LineLength
         case dragging:
             return tr("Hold Ctrl to toggle snapping");
         }
@@ -207,7 +208,7 @@ public class ParallelWayAction extends MapMode implements ModifierListener, MapV
 
     private void updateModeLocalPreferences() {
         // @formatter:off
-        snapThreshold        = Main.pref.getDouble (prefKey("snap-threshold-percent"), 0.70);
+        snapThreshold        = Main.pref.getDouble(prefKey("snap-threshold-percent"), 0.70);
         snapDefault          = Main.pref.getBoolean(prefKey("snap-default"),      true);
         copyTagsDefault      = Main.pref.getBoolean(prefKey("copy-tags-default"), true);
         initialMoveDelay     = Main.pref.getInteger(prefKey("initial-move-delay"), 200);
@@ -244,7 +245,7 @@ public class ParallelWayAction extends MapMode implements ModifierListener, MapV
     private boolean updateModifiersState(int modifiers) {
         boolean oldAlt = alt, oldShift = shift, oldCtrl = ctrl;
         updateKeyModifiers(modifiers);
-        return (oldAlt != alt || oldShift != shift || oldCtrl != ctrl);
+        return oldAlt != alt || oldShift != shift || oldCtrl != ctrl;
     }
 
     private void updateCursor() {
@@ -257,8 +258,9 @@ public class ParallelWayAction extends MapMode implements ModifierListener, MapV
                 newCursor = ImageProvider.getCursor("normal", "parallel"); // FIXME
             } else if (matchesCurrentModifiers(toggleSelectedModifierCombo)) {
                 newCursor = ImageProvider.getCursor("normal", "parallel"); // FIXME
-            } else {
+            } else if (Main.isDebugEnabled()) {
                 // TODO: set to a cursor indicating an error
+                Main.debug("TODO: set an error cursor");
             }
             break;
         case dragging:
@@ -287,7 +289,7 @@ public class ParallelWayAction extends MapMode implements ModifierListener, MapV
             mv.isActiveLayerDrawable() &&
             ((Boolean) this.getValue("active"));
         // @formatter:on
-        assert (areWeSane); // mad == bad
+        assert areWeSane; // mad == bad
         return areWeSane;
     }
 
@@ -420,7 +422,7 @@ public class ParallelWayAction extends MapMode implements ModifierListener, MapV
             // TODO: Very simple snapping
             // - Snap steps relative to the distance?
             double snapDistance;
-            SystemOfMeasurement som = NavigatableComponent.getSystemOfMeasurement();
+            SystemOfMeasurement som = SystemOfMeasurement.getSystemOfMeasurement();
             if (som.equals(SystemOfMeasurement.CHINESE)) {
                 snapDistance = snapDistanceChinese * SystemOfMeasurement.CHINESE.aValue;
             } else if (som.equals(SystemOfMeasurement.IMPERIAL)) {
@@ -497,21 +499,21 @@ public class ParallelWayAction extends MapMode implements ModifierListener, MapV
 
     //// We keep the source ways and the selection in sync so the user can see the source way's tags
     private void addSourceWay(Way w) {
-        assert (sourceWays != null);
+        assert sourceWays != null;
         getCurrentDataSet().addSelected(w);
         w.setHighlighted(true);
         sourceWays.add(w);
     }
 
     private void removeSourceWay(Way w) {
-        assert (sourceWays != null);
+        assert sourceWays != null;
         getCurrentDataSet().clearSelection(w);
         w.setHighlighted(false);
         sourceWays.remove(w);
     }
 
     private void clearSourceWays() {
-        assert (sourceWays != null);
+        assert sourceWays != null;
         getCurrentDataSet().clearSelection(sourceWays);
         for (Way w : sourceWays) {
             w.setHighlighted(false);
diff --git a/src/org/openstreetmap/josm/actions/mapmode/ParallelWays.java b/src/org/openstreetmap/josm/actions/mapmode/ParallelWays.java
index dabf145..8301ec3 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/ParallelWays.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/ParallelWays.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.actions.mapmode;
 
 import java.util.ArrayList;
@@ -78,8 +78,9 @@ public class ParallelWays {
             if (i < sortedNodesPath.size()-1) {
                 if (sortedNodesPath.get(i+1).getCoor().equals(n.getCoor())) {
                     removedNodes.add(n);
-                    for (Way w : ways)
+                    for (Way w : ways) {
                         w.removeNode(n);
+                    }
                     continue;
                 }
             }
@@ -88,7 +89,7 @@ public class ParallelWays {
             }
         }
 
-        // Ugly method of ensuring that the offset isn't inverted. I'm sure there is a better and more elegant way, but I'm starting to get sleepy, so I do this for now.
+        // Ugly method of ensuring that the offset isn't inverted. I'm sure there is a better and more elegant way
         Way refWay = ways.get(refWayIndex);
         boolean refWayReversed = true;
         for (int i = 0; i < sortedNodes.size() - 1; i++) {
@@ -125,7 +126,7 @@ public class ParallelWays {
 
     /**
      * Offsets the way(s) d units. Positive d means to the left (relative to the reference way)
-     * @param d
+     * @param d offset
      */
     public void changeOffset(double d) {
         // This is the core algorithm:
diff --git a/src/org/openstreetmap/josm/actions/mapmode/PlayHeadDragMode.java b/src/org/openstreetmap/josm/actions/mapmode/PlayHeadDragMode.java
index 258ad6b..869b043 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/PlayHeadDragMode.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/PlayHeadDragMode.java
@@ -54,7 +54,7 @@ public class PlayHeadDragMode extends MapMode {
         if (mouseStart == null || mousePos == null) return;
         if ((ev.getModifiersEx() & MouseEvent.BUTTON1_DOWN_MASK) == 0) return;
         Point p = ev.getPoint();
-        if (! dragging) {
+        if (!dragging) {
             if (p.distance(mouseStart) < 3) return;
             playHeadMarker.startDrag();
             dragging = true;
@@ -67,14 +67,14 @@ public class PlayHeadDragMode extends MapMode {
     @Override public void mouseReleased(MouseEvent ev) {
         Point p = ev.getPoint();
         mouseStart = null;
-        if (ev.getButton() != MouseEvent.BUTTON1 || p == null || ! dragging)
+        if (ev.getButton() != MouseEvent.BUTTON1 || p == null || !dragging)
             return;
 
         requestFocusInMapView();
         updateKeyModifiers(ev);
 
         EastNorth en = Main.map.mapView.getEastNorth(ev.getX(), ev.getY());
-        if (! shift) {
+        if (!shift) {
             playHeadMarker.reposition(en);
         } else {
             playHeadMarker.synchronize(en);
diff --git a/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java b/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
index 8e5077f..8b7b9d2 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
@@ -102,12 +102,14 @@ public class SelectAction extends MapMode implements ModifierListener, KeyPressR
         move(Cursor.MOVE_CURSOR);
 
         private final Cursor c;
-        private SelectActionCursor(String main, String sub) {
+        SelectActionCursor(String main, String sub) {
             c = ImageProvider.getCursor(main, sub);
         }
-        private SelectActionCursor(int systemCursor) {
+
+        SelectActionCursor(int systemCursor) {
             c = Cursor.getPredefinedCursor(systemCursor);
         }
+
         public Cursor cursor() {
             return c;
         }
@@ -217,8 +219,8 @@ public class SelectAction extends MapMode implements ModifierListener, KeyPressR
 
     @Override
     public void modifiersChanged(int modifiers) {
-        if (!Main.isDisplayingMapView() || oldEvent==null) return;
-        if(giveUserFeedback(oldEvent, modifiers)) {
+        if (!Main.isDisplayingMapView() || oldEvent == null) return;
+        if (giveUserFeedback(oldEvent, modifiers)) {
             mv.repaint();
         }
     }
@@ -250,7 +252,7 @@ public class SelectAction extends MapMode implements ModifierListener, KeyPressR
         Set<OsmPrimitive> newHighlights = new HashSet<>();
 
         virtualManager.clear();
-        if(mode == Mode.MOVE) {
+        if (mode == Mode.MOVE) {
             if (!dragInProgress() && virtualManager.activateVirtualNodeNearPoint(e.getPoint())) {
                 DataSet ds = getCurrentDataSet();
                 if (ds != null && drawTargetHighlight) {
@@ -265,16 +267,16 @@ public class SelectAction extends MapMode implements ModifierListener, KeyPressR
         mv.setNewCursor(getCursor(c), this);
 
         // return early if there can't be any highlights
-        if(!drawTargetHighlight || mode != Mode.MOVE || c.isEmpty())
+        if (!drawTargetHighlight || mode != Mode.MOVE || c.isEmpty())
             return repaintIfRequired(newHighlights);
 
         // CTRL toggles selection, but if while dragging CTRL means merge
         final boolean isToggleMode = ctrl && !dragInProgress();
-        for(OsmPrimitive x : c) {
+        for (OsmPrimitive x : c) {
             // only highlight primitives that will change the selection
             // when clicked. I.e. don't highlight selected elements unless
             // we are in toggle mode.
-            if(isToggleMode || !x.isSelected()) {
+            if (isToggleMode || !x.isSelected()) {
                 newHighlights.add(x);
             }
         }
@@ -292,17 +294,17 @@ public class SelectAction extends MapMode implements ModifierListener, KeyPressR
         String c = "rect";
         switch(mode) {
         case MOVE:
-            if(virtualManager.hasVirtualNode()) {
+            if (virtualManager.hasVirtualNode()) {
                 c = "virtual_node";
                 break;
             }
             final Iterator<OsmPrimitive> it = nearbyStuff.iterator();
             final OsmPrimitive osm = it.hasNext() ? it.next() : null;
 
-            if(dragInProgress()) {
+            if (dragInProgress()) {
                 // only consider merge if ctrl is pressed and there are nodes in
                 // the selection that could be merged
-                if(!ctrl || getCurrentDataSet().getSelectedNodes().isEmpty()) {
+                if (!ctrl || getCurrentDataSet().getSelectedNodes().isEmpty()) {
                     c = "move";
                     break;
                 }
@@ -315,9 +317,9 @@ public class SelectAction extends MapMode implements ModifierListener, KeyPressR
 
             c = (osm instanceof Node) ? "node" : c;
             c = (osm instanceof Way) ? "way" : c;
-            if(shift) {
+            if (shift) {
                 c += "_add";
-            } else if(ctrl) {
+            } else if (ctrl) {
                 c += osm == null || osm.isSelected() ? "_rm" : "_add";
             }
             break;
@@ -345,14 +347,14 @@ public class SelectAction extends MapMode implements ModifierListener, KeyPressR
     private boolean removeHighlighting() {
         boolean needsRepaint = false;
         DataSet ds = getCurrentDataSet();
-        if(ds != null && !ds.getHighlightedVirtualNodes().isEmpty()) {
+        if (ds != null && !ds.getHighlightedVirtualNodes().isEmpty()) {
             needsRepaint = true;
             ds.clearHighlightedVirtualNodes();
         }
-        if(oldHighlights.isEmpty())
+        if (oldHighlights.isEmpty())
             return needsRepaint;
 
-        for(OsmPrimitive prim : oldHighlights) {
+        for (OsmPrimitive prim : oldHighlights) {
             prim.setHighlighted(false);
         }
         oldHighlights = new HashSet<>();
@@ -360,19 +362,19 @@ public class SelectAction extends MapMode implements ModifierListener, KeyPressR
     }
 
     private boolean repaintIfRequired(Set<OsmPrimitive> newHighlights) {
-        if(!drawTargetHighlight)
+        if (!drawTargetHighlight)
             return false;
 
         boolean needsRepaint = false;
-        for(OsmPrimitive x : newHighlights) {
-            if(oldHighlights.contains(x)) {
+        for (OsmPrimitive x : newHighlights) {
+            if (oldHighlights.contains(x)) {
                 continue;
             }
             needsRepaint = true;
             x.setHighlighted(true);
         }
         oldHighlights.removeAll(newHighlights);
-        for(OsmPrimitive x : oldHighlights) {
+        for (OsmPrimitive x : oldHighlights) {
             x.setHighlighted(false);
             needsRepaint = true;
         }
@@ -411,13 +413,13 @@ public class SelectAction extends MapMode implements ModifierListener, KeyPressR
         initialMoveThresholdExceeded = false;
         mouseDownTime = System.currentTimeMillis();
         lastMousePos = e.getPoint();
-        startEN = mv.getEastNorth(lastMousePos.x,lastMousePos.y);
+        startEN = mv.getEastNorth(lastMousePos.x, lastMousePos.y);
 
         // primitives under cursor are stored in c collection
 
         OsmPrimitive nearestPrimitive = mv.getNearestNodeOrWay(e.getPoint(), mv.isSelectablePredicate, true);
 
-        determineMapMode(nearestPrimitive!=null);
+        determineMapMode(nearestPrimitive != null);
 
         switch(mode) {
         case ROTATE:
@@ -472,7 +474,7 @@ public class SelectAction extends MapMode implements ModifierListener, KeyPressR
             return;
         }
         oldEvent = e;
-        if(giveUserFeedback(e)) {
+        if (giveUserFeedback(e)) {
             mv.repaint();
         }
     }
@@ -508,10 +510,9 @@ public class SelectAction extends MapMode implements ModifierListener, KeyPressR
         if ((mode == Mode.MOVE) && (System.currentTimeMillis() - mouseDownTime < initialMoveDelay))
             return;
 
-        if (mode != Mode.ROTATE && mode != Mode.SCALE) // button is pressed in rotate mode
-        {
-            if ((e.getModifiersEx() & MouseEvent.BUTTON1_DOWN_MASK) == 0)
-                return;
+        if (mode != Mode.ROTATE && mode != Mode.SCALE && (e.getModifiersEx() & MouseEvent.BUTTON1_DOWN_MASK) == 0) {
+            // button is pressed in rotate mode
+            return;
         }
 
         if (mode == Mode.MOVE) {
@@ -520,7 +521,7 @@ public class SelectAction extends MapMode implements ModifierListener, KeyPressR
             final boolean canMerge = ctrl && !getCurrentDataSet().getSelectedNodes().isEmpty();
             final OsmPrimitive p = canMerge ? findNodeToMergeTo(e.getPoint()) : null;
             boolean needsRepaint = removeHighlighting();
-            if(p != null) {
+            if (p != null) {
                 p.setHighlighted(true);
                 oldHighlights.add(p);
                 needsRepaint = true;
@@ -529,7 +530,7 @@ public class SelectAction extends MapMode implements ModifierListener, KeyPressR
             // also update the stored mouse event, so we can display the correct cursor
             // when dragging a node onto another one and then press CTRL to merge
             oldEvent = e;
-            if(needsRepaint) {
+            if (needsRepaint) {
                 mv.repaint();
             }
         }
@@ -538,7 +539,7 @@ public class SelectAction extends MapMode implements ModifierListener, KeyPressR
             startingDraggingPos = new Point(e.getX(), e.getY());
         }
 
-        if( lastMousePos == null ) {
+        if (lastMousePos == null) {
             lastMousePos = e.getPoint();
             return;
         }
@@ -570,7 +571,7 @@ public class SelectAction extends MapMode implements ModifierListener, KeyPressR
 
     @Override
     public void mouseExited(MouseEvent e) {
-        if(removeHighlighting()) {
+        if (removeHighlighting()) {
             mv.repaint();
         }
     }
@@ -584,6 +585,10 @@ public class SelectAction extends MapMode implements ModifierListener, KeyPressR
         mouseReleaseTime = System.currentTimeMillis();
 
         if (mode == Mode.SELECT) {
+            if (e.getButton() != MouseEvent.BUTTON1) {
+                return;
+            }
+            selectionManager.endSelecting(e);
             selectionManager.unregister(mv);
 
             // Select Draw Tool if no selection has been made
@@ -629,7 +634,7 @@ public class SelectAction extends MapMode implements ModifierListener, KeyPressR
         // the highlights don't depend on the cursor position there. If something was
         // selected beforehand this would put us into move mode as well, which breaks
         // the cycling through primitives on top of each other (see #6739).
-        if(e.getButton() == MouseEvent.BUTTON2) {
+        if (e.getButton() == MouseEvent.BUTTON2) {
             removeHighlighting();
         } else {
             giveUserFeedback(e);
@@ -647,6 +652,9 @@ public class SelectAction extends MapMode implements ModifierListener, KeyPressR
     public void doKeyPressed(KeyEvent e) {
         if (!Main.isDisplayingMapView() ||
                 !repeatedKeySwitchLassoOption || !getShortcut().isEvent(e)) return;
+        if (Main.isDebugEnabled()) {
+            Main.debug(getClass().getName()+" consuming event "+e);
+        }
         e.consume();
         if (!lassoMode) {
             Main.map.selectMapMode(Main.map.mapModeSelectLasso);
@@ -663,7 +671,7 @@ public class SelectAction extends MapMode implements ModifierListener, KeyPressR
      * sets the mapmode according to key modifiers and if there are any
      * selectables nearby. Everything has to be pre-determined for this
      * function; its main purpose is to centralize what the modifiers do.
-     * @param hasSelectionNearby
+     * @param hasSelectionNearby {@code true} if some primitves are selectable nearby
      */
     private void determineMapMode(boolean hasSelectionNearby) {
         if (shift && ctrl) {
@@ -681,7 +689,7 @@ public class SelectAction extends MapMode implements ModifierListener, KeyPressR
      * thresholds have been exceeded) and is still in progress (i.e. mouse button
      * still pressed)
      */
-    private final boolean dragInProgress() {
+    private boolean dragInProgress() {
         return didMouseDrag && startingDraggingPos != null;
     }
 
@@ -822,10 +830,9 @@ public class SelectAction extends MapMode implements ModifierListener, KeyPressR
             ed.setButtonIcons(new String[]{"reorder", "cancel"});
             ed.setContent(
                     /* for correct i18n of plural forms - see #9110 */
-                    trn(
-                            "You moved more than {0} element. " + "Moving a large number of elements is often an error.\n" + "Really move them?",
-                            "You moved more than {0} elements. " + "Moving a large number of elements is often an error.\n" + "Really move them?",
-                            max, max));
+                    trn("You moved more than {0} element. " + "Moving a large number of elements is often an error.\n" + "Really move them?",
+                        "You moved more than {0} elements. " + "Moving a large number of elements is often an error.\n" + "Really move them?",
+                        max, max));
             ed.setCancelButton(2);
             ed.toggleEnable("movedManyElements");
             ed.showDialog();
@@ -846,7 +853,7 @@ public class SelectAction extends MapMode implements ModifierListener, KeyPressR
      * key is pressed. If there is no such node, no action will be done and no error will be
      * reported. If there is, it will execute the merge and add it to the undo buffer.
      */
-    private final void mergePrims(Point p) {
+    private void mergePrims(Point p) {
         Collection<Node> selNodes = getCurrentDataSet().getSelectedNodes();
         if (selNodes.isEmpty())
             return;
@@ -855,16 +862,46 @@ public class SelectAction extends MapMode implements ModifierListener, KeyPressR
         if (target == null)
             return;
 
+        if (selNodes.size() == 1) {
+            // Move all selected primitive to preserve shape #10748
+            Collection<OsmPrimitive> selection =
+                getCurrentDataSet().getSelectedNodesAndWays();
+            Collection<Node> affectedNodes = AllNodesVisitor.getAllNodes(selection);
+            Command c = getLastCommand();
+            getCurrentDataSet().beginUpdate();
+            if (c instanceof MoveCommand
+                && affectedNodes.equals(((MoveCommand) c).getParticipatingPrimitives())) {
+                Node selectedNode = selNodes.iterator().next();
+                EastNorth selectedEN = selectedNode.getEastNorth();
+                EastNorth targetEN = target.getEastNorth();
+                ((MoveCommand) c).moveAgain(targetEN.getX() - selectedEN.getX(),
+                                            targetEN.getY() - selectedEN.getY());
+            }
+            getCurrentDataSet().endUpdate();
+        }
+
         Collection<Node> nodesToMerge = new LinkedList<>(selNodes);
         nodesToMerge.add(target);
-        MergeNodesAction.doMergeNodes(Main.main.getEditLayer(), nodesToMerge, target);
+        mergeNodes(Main.main.getEditLayer(), nodesToMerge, target);
+    }
+
+    /**
+     * Merge nodes using {@code MergeNodesAction}.
+     * Can be overridden for testing purpose.
+     * @param layer layer the reference data layer. Must not be null
+     * @param nodes the collection of nodes. Ignored if null
+     * @param targetLocationNode this node's location will be used for the target node
+     */
+    public void mergeNodes(OsmDataLayer layer, Collection<Node> nodes,
+                           Node targetLocationNode) {
+        MergeNodesAction.doMergeNodes(layer, nodes, targetLocationNode);
     }
 
     /**
      * Tries to find a node to merge to when in move-merge mode for the current mouse
      * position. Either returns the node or null, if no suitable one is nearby.
      */
-    private final Node findNodeToMergeTo(Point p) {
+    private Node findNodeToMergeTo(Point p) {
         Collection<Node> target = mv.getNearestNodes(p,
                 getCurrentDataSet().getSelectedNodes(),
                 mv.isSelectablePredicate);
@@ -921,15 +958,16 @@ public class SelectAction extends MapMode implements ModifierListener, KeyPressR
             if (mode == Mode.SELECT)
                 return tr("Release the mouse button to select the objects in the rectangle.");
             else if (mode == Mode.MOVE && (System.currentTimeMillis() - mouseDownTime >= initialMoveDelay)) {
-                final boolean canMerge = getCurrentDataSet()!=null && !getCurrentDataSet().getSelectedNodes().isEmpty();
-                final String mergeHelp = canMerge ? (" " + tr("Ctrl to merge with nearest node.")) : "";
+                final boolean canMerge = getCurrentDataSet() != null && !getCurrentDataSet().getSelectedNodes().isEmpty();
+                final String mergeHelp = canMerge ? " " + tr("Ctrl to merge with nearest node.") : "";
                 return tr("Release the mouse button to stop moving.") + mergeHelp;
             } else if (mode == Mode.ROTATE)
                 return tr("Release the mouse button to stop rotating.");
             else if (mode == Mode.SCALE)
                 return tr("Release the mouse button to stop scaling.");
         }
-        return tr("Move objects by dragging; Shift to add to selection (Ctrl to toggle); Shift-Ctrl to rotate selected; Alt-Ctrl to scale selected; or change selection");
+        return tr("Move objects by dragging; Shift to add to selection (Ctrl to toggle); Shift-Ctrl to rotate selected; " +
+                  "Alt-Ctrl to scale selected; or change selection");
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/actions/relation/AbstractRelationAction.java b/src/org/openstreetmap/josm/actions/relation/AbstractRelationAction.java
index afde66d..74ccf02 100644
--- a/src/org/openstreetmap/josm/actions/relation/AbstractRelationAction.java
+++ b/src/org/openstreetmap/josm/actions/relation/AbstractRelationAction.java
@@ -23,7 +23,7 @@ public abstract class AbstractRelationAction extends AbstractAction implements O
         if (primitives == null || primitives.isEmpty()) {
             return Collections.<Relation>emptySet();
         } else {
-            return new SubclassFilteredCollection<>(
+            return new SubclassFilteredCollection<OsmPrimitive, Relation>(
                     primitives, OsmPrimitive.relationPredicate);
         }
     }
diff --git a/src/org/openstreetmap/josm/actions/relation/DeleteRelationsAction.java b/src/org/openstreetmap/josm/actions/relation/DeleteRelationsAction.java
index d342d79..896f028 100644
--- a/src/org/openstreetmap/josm/actions/relation/DeleteRelationsAction.java
+++ b/src/org/openstreetmap/josm/actions/relation/DeleteRelationsAction.java
@@ -20,7 +20,7 @@ public class DeleteRelationsAction extends AbstractRelationAction {
      * Constructs a new <code>DeleteRelationsAction</code>.
      */
     public DeleteRelationsAction() {
-        putValue(SHORT_DESCRIPTION,tr("Delete the selected relation"));
+        putValue(SHORT_DESCRIPTION, tr("Delete the selected relation"));
         putValue(NAME, tr("Delete"));
         putValue(SMALL_ICON, ImageProvider.get("dialogs", "delete"));
     }
@@ -29,9 +29,9 @@ public class DeleteRelationsAction extends AbstractRelationAction {
         if (toDelete == null)
             return;
         org.openstreetmap.josm.actions.mapmode.DeleteAction
-                .deleteRelation( Main.main.getEditLayer(), toDelete );
+                .deleteRelation(Main.main.getEditLayer(), toDelete);
         // clear selection after deletion
-        if (Main.map.relationListDialog!=null)
+        if (Main.map.relationListDialog != null)
                 Main.map.relationListDialog.selectRelations(null);
     }
 
diff --git a/src/org/openstreetmap/josm/actions/relation/DownloadMembersAction.java b/src/org/openstreetmap/josm/actions/relation/DownloadMembersAction.java
index 4fbe9a3..ad3ea12 100644
--- a/src/org/openstreetmap/josm/actions/relation/DownloadMembersAction.java
+++ b/src/org/openstreetmap/josm/actions/relation/DownloadMembersAction.java
@@ -41,7 +41,7 @@ public class DownloadMembersAction extends AbstractRelationAction {
     @Override
     public void setPrimitives(Collection<? extends OsmPrimitive> primitives) {
         // selected non-new relations
-        this.relations = Utils.filter(getRelations(primitives), new Predicate<Relation>(){
+        this.relations = Utils.filter(getRelations(primitives), new Predicate<Relation>() {
             @Override public boolean evaluate(Relation r) {
                 return !r.isNew();
             }});
diff --git a/src/org/openstreetmap/josm/actions/relation/DownloadSelectedIncompleteMembersAction.java b/src/org/openstreetmap/josm/actions/relation/DownloadSelectedIncompleteMembersAction.java
index 8898b38..5a86555 100644
--- a/src/org/openstreetmap/josm/actions/relation/DownloadSelectedIncompleteMembersAction.java
+++ b/src/org/openstreetmap/josm/actions/relation/DownloadSelectedIncompleteMembersAction.java
@@ -64,7 +64,7 @@ public class DownloadSelectedIncompleteMembersAction extends AbstractRelationAct
     @Override
     public void setPrimitives(Collection<? extends OsmPrimitive> primitives) {
         // selected relations with incomplete members
-        this.relations = Utils.filter(getRelations(primitives), new Predicate<Relation>(){
+        this.relations = Utils.filter(getRelations(primitives), new Predicate<Relation>() {
             @Override
             public boolean evaluate(Relation r) {
                 return r.hasIncompleteMembers();
@@ -75,6 +75,6 @@ public class DownloadSelectedIncompleteMembersAction extends AbstractRelationAct
 
     @Override
     protected void updateEnabledState() {
-        setEnabled(!relations.isEmpty() &&!incompleteMembers.isEmpty() && !Main.isOffline(OnlineResource.OSM_API));
+        setEnabled(!relations.isEmpty() && !incompleteMembers.isEmpty() && !Main.isOffline(OnlineResource.OSM_API));
     }
 }
diff --git a/src/org/openstreetmap/josm/actions/relation/DuplicateRelationAction.java b/src/org/openstreetmap/josm/actions/relation/DuplicateRelationAction.java
index 739ba25..1c2c82d 100644
--- a/src/org/openstreetmap/josm/actions/relation/DuplicateRelationAction.java
+++ b/src/org/openstreetmap/josm/actions/relation/DuplicateRelationAction.java
@@ -51,6 +51,6 @@ public class DuplicateRelationAction extends AbstractRelationAction {
     @Override
     protected void updateEnabledState() {
         // only one selected relation can be edited
-        setEnabled( relations.size()==1 );
+        setEnabled(relations.size() == 1);
     }
 }
diff --git a/src/org/openstreetmap/josm/actions/relation/SelectInRelationListAction.java b/src/org/openstreetmap/josm/actions/relation/SelectInRelationListAction.java
index b69eebb..9bf3b07 100644
--- a/src/org/openstreetmap/josm/actions/relation/SelectInRelationListAction.java
+++ b/src/org/openstreetmap/josm/actions/relation/SelectInRelationListAction.java
@@ -25,7 +25,7 @@ public class SelectInRelationListAction extends AbstractRelationAction {
 
     @Override
     public void actionPerformed(ActionEvent e) {
-        if (!isEnabled() || relations.isEmpty() || Main.map==null || Main.map.relationListDialog==null) return;
+        if (!isEnabled() || relations.isEmpty() || Main.map == null || Main.map.relationListDialog == null) return;
         Main.map.relationListDialog.unfurlDialog();
         Main.map.relationListDialog.selectRelations(relations);
     }
diff --git a/src/org/openstreetmap/josm/actions/relation/SelectMembersAction.java b/src/org/openstreetmap/josm/actions/relation/SelectMembersAction.java
index 5e3d83c..9ffefbb 100644
--- a/src/org/openstreetmap/josm/actions/relation/SelectMembersAction.java
+++ b/src/org/openstreetmap/josm/actions/relation/SelectMembersAction.java
@@ -22,10 +22,11 @@ public class SelectMembersAction extends AbstractRelationAction {
 
     /**
      * Constructs a new <code>SelectMembersAction</code>.
-     * @param add if <code>true</code>, the members will be added to current selection. If <code>false</code>, the members will replace the current selection.
+     * @param add if <code>true</code>, the members will be added to current selection.
+     * If <code>false</code>, the members will replace the current selection.
      */
     public SelectMembersAction(boolean add) {
-        putValue(SHORT_DESCRIPTION,add ? tr("Add the members of all selected relations to current selection")
+        putValue(SHORT_DESCRIPTION, add ? tr("Add the members of all selected relations to current selection")
                 : tr("Select the members of all selected relations"));
         putValue(SMALL_ICON, ImageProvider.get("selectall"));
         putValue(NAME, add ? tr("Select members (add)") : tr("Select members"));
diff --git a/src/org/openstreetmap/josm/actions/relation/SelectRelationAction.java b/src/org/openstreetmap/josm/actions/relation/SelectRelationAction.java
index 9134dd7..20eb34b 100644
--- a/src/org/openstreetmap/josm/actions/relation/SelectRelationAction.java
+++ b/src/org/openstreetmap/josm/actions/relation/SelectRelationAction.java
@@ -19,10 +19,12 @@ public class SelectRelationAction extends AbstractRelationAction {
 
     /**
      * Constructs a new <code>SelectRelationAction</code>.
-     * @param add if <code>true</code>, the relation will be added to current selection. If <code>false</code>, the relation will replace the current selection.
+     * @param add if <code>true</code>, the relation will be added to current selection.
+     * If <code>false</code>, the relation will replace the current selection.
      */
     public SelectRelationAction(boolean add) {
-        putValue(SHORT_DESCRIPTION, add ? tr("Add the selected relations to the current selection") : tr("Set the current selection to the list of selected relations"));
+        putValue(SHORT_DESCRIPTION, add ? tr("Add the selected relations to the current selection") :
+            tr("Set the current selection to the list of selected relations"));
         putValue(SMALL_ICON, ImageProvider.get("dialogs", "select"));
         putValue(NAME, add ? tr("Select relation (add)") : tr("Select relation"));
         this.add = add;
@@ -32,7 +34,7 @@ public class SelectRelationAction extends AbstractRelationAction {
     public void actionPerformed(ActionEvent e) {
         if (!isEnabled() || relations.isEmpty()) return;
         OsmDataLayer editLayer = Main.main.getEditLayer();
-        if (editLayer==null || editLayer.data==null) return;
+        if (editLayer == null || editLayer.data == null) return;
         if (add) {
             editLayer.data.addSelected(relations);
         } else {
diff --git a/src/org/openstreetmap/josm/actions/search/PushbackTokenizer.java b/src/org/openstreetmap/josm/actions/search/PushbackTokenizer.java
index 0a31189..c89955c 100644
--- a/src/org/openstreetmap/josm/actions/search/PushbackTokenizer.java
+++ b/src/org/openstreetmap/josm/actions/search/PushbackTokenizer.java
@@ -57,7 +57,7 @@ public class PushbackTokenizer {
         KEY(marktr("<key>")), QUESTION_MARK(marktr("<question mark>")),
         EOF(marktr("<end-of-file>")), LESS_THAN("<less-than>"), GREATER_THAN("<greater-than>");
 
-        private Token(String name) {
+        Token(String name) {
             this.name = name;
         }
 
@@ -69,7 +69,6 @@ public class PushbackTokenizer {
         }
     }
 
-
     private void getChar() {
         try {
             c = search.read();
@@ -85,11 +84,11 @@ public class PushbackTokenizer {
         List<Character> sChars = quoted ? specialCharsQuoted : specialChars;
         StringBuilder s = new StringBuilder();
         boolean escape = false;
-        while (c != -1 && (escape || (!sChars.contains((char)c) && (quoted || !Character.isWhitespace(c))))) {
+        while (c != -1 && (escape || (!sChars.contains((char) c) && (quoted || !Character.isWhitespace(c))))) {
             if (c == '\\' && !escape) {
                 escape = true;
             } else {
-                s.append((char)c);
+                s.append((char) c);
                 escape = false;
             }
             getChar();
@@ -176,7 +175,7 @@ public class PushbackTokenizer {
                 return nextToken();
             // try parsing number
             try {
-                currentNumber = Long.parseLong(currentText);
+                currentNumber = Long.valueOf(currentText);
             } catch (NumberFormatException e) {
                 currentNumber = null;
             }
@@ -185,12 +184,12 @@ public class PushbackTokenizer {
             isRange = pos > 0;
             if (isRange) {
                 try {
-                    currentNumber = Long.parseLong(currentText.substring(0, pos));
+                    currentNumber = Long.valueOf(currentText.substring(0, pos));
                 } catch (NumberFormatException e) {
                     currentNumber = null;
                 }
                 try {
-                    currentRange = Long.parseLong(currentText.substring(pos + 1));
+                    currentRange = Long.valueOf(currentText.substring(pos + 1));
                 } catch (NumberFormatException e) {
                     currentRange = null;
                     }
diff --git a/src/org/openstreetmap/josm/actions/search/SearchAction.java b/src/org/openstreetmap/josm/actions/search/SearchAction.java
index 5c782cb..56b0a24 100644
--- a/src/org/openstreetmap/josm/actions/search/SearchAction.java
+++ b/src/org/openstreetmap/josm/actions/search/SearchAction.java
@@ -98,7 +98,7 @@ public class SearchAction extends JosmAction implements ParameterizedAction {
     }
 
     public static void saveToHistory(SearchSetting s) {
-        if(searchHistory.isEmpty() || !s.equals(searchHistory.getFirst())) {
+        if (searchHistory.isEmpty() || !s.equals(searchHistory.getFirst())) {
             searchHistory.addFirst(new SearchSetting(s));
         } else if (searchHistory.contains(s)) {
             // move existing entry to front, fixes #8032 - search history loses entries when re-using queries
@@ -223,17 +223,17 @@ public class SearchAction extends JosmAction implements ParameterizedAction {
         }
         // -- prepare the combo box with the search expressions
         //
-        JLabel label = new JLabel( initialValues instanceof Filter ? tr("Filter string:") : tr("Search string:"));
+        JLabel label = new JLabel(initialValues instanceof Filter ? tr("Filter string:") : tr("Search string:"));
         final HistoryComboBox hcbSearchString = new HistoryComboBox();
         hcbSearchString.setText(initialValues.text);
         hcbSearchString.setToolTipText(tr("Enter the search expression"));
-        // we have to reverse the history, because ComboBoxHistory will reverse it again
-        // in addElement()
+        // we have to reverse the history, because ComboBoxHistory will reverse it again in addElement()
         //
         List<String> searchExpressionHistory = getSearchExpressionHistory();
         Collections.reverse(searchExpressionHistory);
         hcbSearchString.setPossibleItems(searchExpressionHistory);
         hcbSearchString.setPreferredSize(new Dimension(40, hcbSearchString.getPreferredSize().height));
+        label.setLabelFor(hcbSearchString);
 
         JRadioButton replace = new JRadioButton(tr("replace selection"), initialValues.mode == SearchMode.replace);
         JRadioButton add = new JRadioButton(tr("add to selection"), initialValues.mode == SearchMode.add);
@@ -260,8 +260,7 @@ public class SearchAction extends JosmAction implements ParameterizedAction {
         left.add(remove, GBC.eol());
         left.add(in_selection, GBC.eop());
         left.add(caseSensitive, GBC.eol());
-        if(Main.pref.getBoolean("expert", false))
-        {
+        if (Main.pref.getBoolean("expert", false)) {
             left.add(allElements, GBC.eol());
             left.add(regexSearch, GBC.eol());
             left.add(addOnToolbar, GBC.eol());
@@ -306,7 +305,7 @@ public class SearchAction extends JosmAction implements ParameterizedAction {
         dialog.showDialog();
         int result = dialog.getValue();
 
-        if(result != 1) return null;
+        if (result != 1) return null;
 
         // User pressed OK - let's perform the search
         SearchMode mode = replace.isSelected() ? SearchAction.SearchMode.replace
@@ -322,7 +321,8 @@ public class SearchAction extends JosmAction implements ParameterizedAction {
             ToolbarPreferences.ActionDefinition aDef =
                     new ToolbarPreferences.ActionDefinition(Main.main.menu.search);
             aDef.getParameters().put(SEARCH_EXPRESSION, initialValues);
-            aDef.setName(Utils.shortenString(initialValues.text, MAX_LENGTH_SEARCH_EXPRESSION_DISPLAY)); // Display search expression as tooltip instead of generic one
+            // Display search expression as tooltip instead of generic one
+            aDef.setName(Utils.shortenString(initialValues.text, MAX_LENGTH_SEARCH_EXPRESSION_DISPLAY));
             // parametrized action definition is now composed
             ActionParser actionParser = new ToolbarPreferences.ActionParser(null);
             String res = actionParser.saveAction(aDef);
@@ -341,14 +341,18 @@ public class SearchAction extends JosmAction implements ParameterizedAction {
                 , GBC.eol());
         right.add(new SearchKeywordRow(hcbSearchString)
                 .addTitle(tr("basics"))
-                .addKeyword("<i>key</i>:<i>valuefragment</i>", null, tr("''valuefragment'' anywhere in ''key''"), "name:str matches name=Bakerstreet")
+                .addKeyword("<i>key</i>:<i>valuefragment</i>", null,
+                        tr("''valuefragment'' anywhere in ''key''"), "name:str matches name=Bakerstreet")
                 .addKeyword("-<i>key</i>:<i>valuefragment</i>", null, tr("''valuefragment'' nowhere in ''key''"))
                 .addKeyword("<i>key</i>=<i>value</i>", null, tr("''key'' with exactly ''value''"))
                 .addKeyword("<i>key</i>=*", null, tr("''key'' with any value"))
                 .addKeyword("*=<i>value</i>", null, tr("''value'' in any key"))
                 .addKeyword("<i>key</i>=", null, tr("matches if ''key'' exists"))
                 .addKeyword("<i>key</i>><i>value</i>", null, tr("matches if ''key'' is greater than ''value'' (analogously, less than)"))
-                .addKeyword("\"key\"=\"value\"", "\"\"=\"\"", tr("to quote operators.<br>Within quoted strings the <b>\"</b> and <b>\\</b> characters need to be escaped by a preceding <b>\\</b> (e.g. <b>\\\"</b> and <b>\\\\</b>)."), "\"addr:street\"")
+                .addKeyword("\"key\"=\"value\"", "\"\"=\"\"",
+                        tr("to quote operators.<br>Within quoted strings the <b>\"</b> and <b>\\</b> characters need to be escaped " +
+                           "by a preceding <b>\\</b> (e.g. <b>\\\"</b> and <b>\\\\</b>)."),
+                        "\"addr:street\"")
                 , GBC.eol());
         right.add(new SearchKeywordRow(hcbSearchString)
                 .addTitle(tr("combinators"))
@@ -373,8 +377,10 @@ public class SearchAction extends JosmAction implements ParameterizedAction {
                 .addKeyword("user:", "user:", tr("objects changed by user", "user:anonymous"))
                 .addKeyword("id:", "id:", tr("objects with given ID"), "id:0 (new objects)")
                 .addKeyword("version:", "version:", tr("objects with given version"), "version:0 (objects without an assigned version)")
-                .addKeyword("changeset:", "changeset:", tr("objects with given changeset ID"), "changeset:0 (objects without an assigned changeset)")
-                .addKeyword("timestamp:", "timestamp:", tr("objects with last modification timestamp within range"), "timestamp:2012/", "timestamp:2008/2011-02-04T12")
+                .addKeyword("changeset:", "changeset:", tr("objects with given changeset ID"),
+                        "changeset:0 (objects without an assigned changeset)")
+                .addKeyword("timestamp:", "timestamp:", tr("objects with last modification timestamp within range"), "timestamp:2012/",
+                        "timestamp:2008/2011-02-04T12")
                 , GBC.eol());
             right.add(new SearchKeywordRow(hcbSearchString)
                 .addTitle(tr("properties"))
@@ -396,26 +402,28 @@ public class SearchAction extends JosmAction implements ParameterizedAction {
                 .addTitle(tr("related objects"))
                 .addKeyword("child <i>expr</i>", "child ", tr("all children of objects matching the expression"), "child building")
                 .addKeyword("parent <i>expr</i>", "parent ", tr("all parents of objects matching the expression"), "parent bus_stop")
-                .addKeyword("nth:<i>7</i>", "nth: ", tr("n-th member of relation and/or n-th node of way"), "nth:5 (child type:relation)", "nth:-1")
-                .addKeyword("nth%:<i>7</i>", "nth%: ", tr("every n-th member of relation and/or every n-th node of way"), "nth%:100 (child waterway)")
+                .addKeyword("nth:<i>7</i>", "nth: ",
+                        tr("n-th member of relation and/or n-th node of way"), "nth:5 (child type:relation)", "nth:-1")
+                .addKeyword("nth%:<i>7</i>", "nth%: ",
+                        tr("every n-th member of relation and/or every n-th node of way"), "nth%:100 (child waterway)")
                 , GBC.eol());
             right.add(new SearchKeywordRow(hcbSearchString)
                 .addTitle(tr("view"))
                 .addKeyword("inview", "inview ", tr("objects in current view"))
                 .addKeyword("allinview", "allinview ", tr("objects (and all its way nodes / relation members) in current view"))
                 .addKeyword("indownloadedarea", "indownloadedarea ", tr("objects in downloaded area"))
-                .addKeyword("allindownloadedarea", "allindownloadedarea ", tr("objects (and all its way nodes / relation members) in downloaded area"))
+                .addKeyword("allindownloadedarea", "allindownloadedarea ",
+                        tr("objects (and all its way nodes / relation members) in downloaded area"))
                 , GBC.eol());
         }
     }
 
     /**
-     * Launches the dialog for specifying search criteria and runs
-     * a search
+     * Launches the dialog for specifying search criteria and runs a search
      */
     public static void search() {
         SearchSetting se = showSearchDialog(lastSearch);
-        if(se != null) {
+        if (se != null) {
             searchWithHistory(se);
         }
     }
@@ -424,7 +432,7 @@ public class SearchAction extends JosmAction implements ParameterizedAction {
      * Adds the search specified by the settings in <code>s</code> to the
      * search history and performs the search.
      *
-     * @param s
+     * @param s search settings
      */
     public static void searchWithHistory(SearchSetting s) {
         saveToHistory(s);
@@ -432,6 +440,11 @@ public class SearchAction extends JosmAction implements ParameterizedAction {
         search(s);
     }
 
+    /**
+     * Performs the search specified by the settings in <code>s</code> without saving it to search history.
+     *
+     * @param s search settings
+     */
     public static void searchWithoutHistory(SearchSetting s) {
         lastSearch = new SearchSetting(s);
         search(s);
@@ -450,7 +463,7 @@ public class SearchAction extends JosmAction implements ParameterizedAction {
             }
 
             Collection<OsmPrimitive> all;
-            if(s.allElements) {
+            if (s.allElements) {
                 all = Main.main.getCurrentDataSet().allPrimitives();
             } else {
                 all = Main.main.getCurrentDataSet().allNonDeletedCompletePrimitives();
@@ -486,8 +499,7 @@ public class SearchAction extends JosmAction implements ParameterizedAction {
     }
 
     /**
-     * Version of getSelection that is customized for filter, but should
-     * also work in other context.
+     * Version of getSelection that is customized for filter, but should also work in other context.
      *
      * @param s the search settings
      * @param all the collection of all the primitives that should be considered
@@ -496,7 +508,7 @@ public class SearchAction extends JosmAction implements ParameterizedAction {
     public static void getSelection(SearchSetting s, Collection<OsmPrimitive> all, Property<OsmPrimitive, Boolean> p) {
         try {
             String searchText = s.text;
-            if (s instanceof Filter && ((Filter)s).inverted) {
+            if (s instanceof Filter && ((Filter) s).inverted) {
                 searchText = String.format("-(%s)", searchText);
             }
             SearchCompiler.Match matcher = SearchCompiler.compile(searchText, s.caseSensitive, s.regexSearch);
@@ -504,16 +516,16 @@ public class SearchAction extends JosmAction implements ParameterizedAction {
             for (OsmPrimitive osm : all) {
                 if (s.mode == SearchMode.replace) {
                     if (matcher.match(osm)) {
-                        p.set(osm, true);
+                        p.set(osm, Boolean.TRUE);
                     } else {
-                        p.set(osm, false);
+                        p.set(osm, Boolean.FALSE);
                     }
                 } else if (s.mode == SearchMode.add && !p.get(osm) && matcher.match(osm)) {
-                    p.set(osm, true);
+                    p.set(osm, Boolean.TRUE);
                 } else if (s.mode == SearchMode.remove && p.get(osm) && matcher.match(osm)) {
-                    p.set(osm, false);
+                    p.set(osm, Boolean.FALSE);
                 } else if (s.mode == SearchMode.in_selection && p.get(osm) && !matcher.match(osm)) {
-                    p.set(osm, false);
+                    p.set(osm, Boolean.FALSE);
                 }
             }
         } catch (SearchCompiler.ParseError e) {
@@ -522,7 +534,6 @@ public class SearchAction extends JosmAction implements ParameterizedAction {
                     e.getMessage(),
                     tr("Error"),
                     JOptionPane.ERROR_MESSAGE
-
             );
         }
     }
@@ -535,9 +546,9 @@ public class SearchAction extends JosmAction implements ParameterizedAction {
 
         final DataSet ds = Main.main.getCurrentDataSet();
         Collection<OsmPrimitive> sel = new HashSet<>(ds.getAllSelected());
-        int foundMatches = getSelection(s, sel, new Predicate<OsmPrimitive>(){
+        int foundMatches = getSelection(s, sel, new Predicate<OsmPrimitive>() {
             @Override
-            public boolean evaluate(OsmPrimitive o){
+            public boolean evaluate(OsmPrimitive o) {
                 return ds.isSelected(o);
             }
         });
@@ -600,23 +611,23 @@ public class SearchAction extends JosmAction implements ParameterizedAction {
             String cs = caseSensitive ?
                     /*case sensitive*/  trc("search", "CS") :
                         /*case insensitive*/  trc("search", "CI");
-                    String rx = regexSearch ? (", " +
-                            /*regex search*/ trc("search", "RX")) : "";
-                    String all = allElements ? (", " +
-                            /*all elements*/ trc("search", "A")) : "";
+                    String rx = regexSearch ? ", " +
+                            /*regex search*/ trc("search", "RX") : "";
+                    String all = allElements ? ", " +
+                            /*all elements*/ trc("search", "A") : "";
                     return "\"" + text + "\" (" + cs + rx + all + ", " + mode + ")";
         }
 
         @Override
         public boolean equals(Object other) {
-            if(!(other instanceof SearchSetting))
+            if (!(other instanceof SearchSetting))
                 return false;
             SearchSetting o = (SearchSetting) other;
-            return (o.caseSensitive == this.caseSensitive
+            return o.caseSensitive == this.caseSensitive
                     && o.regexSearch == this.regexSearch
                     && o.allElements == this.allElements
                     && o.mode.equals(this.mode)
-                    && o.text.equals(this.text));
+                    && o.text.equals(this.text);
         }
 
         @Override
@@ -625,7 +636,7 @@ public class SearchAction extends JosmAction implements ParameterizedAction {
         }
 
         public static SearchSetting readFromString(String s) {
-            if (s.length() == 0)
+            if (s.isEmpty())
                 return null;
 
             SearchSetting result = new SearchSetting();
@@ -664,7 +675,7 @@ public class SearchAction extends JosmAction implements ParameterizedAction {
         }
 
         public String writeToString() {
-            if (text == null || text.length() == 0)
+            if (text == null || text.isEmpty())
                 return "";
 
             StringBuilder result = new StringBuilder();
@@ -678,8 +689,8 @@ public class SearchAction extends JosmAction implements ParameterizedAction {
             if (allElements) {
                 result.append('A');
             }
-            result.append(' ');
-            result.append(text);
+            result.append(' ')
+                  .append(text);
             return result.toString();
         }
     }
diff --git a/src/org/openstreetmap/josm/actions/search/SearchCompiler.java b/src/org/openstreetmap/josm/actions/search/SearchCompiler.java
index 5e64226..d143cd0 100644
--- a/src/org/openstreetmap/josm/actions/search/SearchCompiler.java
+++ b/src/org/openstreetmap/josm/actions/search/SearchCompiler.java
@@ -10,6 +10,7 @@ import java.text.Normalizer;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.Locale;
 import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -81,17 +82,17 @@ public class SearchCompiler {
 
     /**
      * Add (register) MatchFactory with SearchCompiler
-     * @param factory
+     * @param factory match factory
      */
     public static void addMatchFactory(MatchFactory factory) {
         for (String keyword : factory.getKeywords()) {
             // TODO: check for keyword collisions
             if (factory instanceof SimpleMatchFactory) {
-                simpleMatchFactoryMap.put(keyword, (SimpleMatchFactory)factory);
+                simpleMatchFactoryMap.put(keyword, (SimpleMatchFactory) factory);
             } else if (factory instanceof UnaryMatchFactory) {
-                unaryMatchFactoryMap.put(keyword, (UnaryMatchFactory)factory);
+                unaryMatchFactoryMap.put(keyword, (UnaryMatchFactory) factory);
             } else if (factory instanceof BinaryMatchFactory) {
-                binaryMatchFactoryMap.put(keyword, (BinaryMatchFactory)factory);
+                binaryMatchFactoryMap.put(keyword, (BinaryMatchFactory) factory);
             } else
                 throw new AssertionError("Unknown match factory");
         }
@@ -201,19 +202,19 @@ public class SearchCompiler {
      * Classes implementing this interface can provide Match operators.
      */
     private interface MatchFactory {
-        public Collection<String> getKeywords();
+        Collection<String> getKeywords();
     }
 
     public interface SimpleMatchFactory extends MatchFactory {
-        public Match get(String keyword, PushbackTokenizer tokenizer) throws ParseError;
+        Match get(String keyword, PushbackTokenizer tokenizer) throws ParseError;
     }
 
     public interface UnaryMatchFactory extends MatchFactory {
-        public UnaryMatch get(String keyword, Match matchOperand, PushbackTokenizer tokenizer) throws ParseError;
+        UnaryMatch get(String keyword, Match matchOperand, PushbackTokenizer tokenizer) throws ParseError;
     }
 
     public interface BinaryMatchFactory extends MatchFactory {
-        public BinaryMatch get(String keyword, Match lhs, Match rhs, PushbackTokenizer tokenizer) throws ParseError;
+        BinaryMatch get(String keyword, Match lhs, Match rhs, PushbackTokenizer tokenizer) throws ParseError;
     }
 
     /**
@@ -301,7 +302,8 @@ public class SearchCompiler {
     public static class Always extends Match {
         /** The unique instance/ */
         public static final Always INSTANCE = new Always();
-        @Override public boolean match(OsmPrimitive osm) {
+        @Override
+        public boolean match(OsmPrimitive osm) {
             return true;
         }
     }
@@ -320,11 +322,20 @@ public class SearchCompiler {
      * Inverts the match.
      */
     public static class Not extends UnaryMatch {
-        public Not(Match match) {super(match);}
-        @Override public boolean match(OsmPrimitive osm) {
+        public Not(Match match) {
+            super(match);
+        }
+
+        @Override
+        public boolean match(OsmPrimitive osm) {
             return !match.match(osm);
         }
-        @Override public String toString() {return "!"+match;}
+
+        @Override
+        public String toString() {
+            return "!" + match;
+        }
+
         public Match getMatch() {
             return match;
         }
@@ -341,6 +352,7 @@ public class SearchCompiler {
             this.key = key;
             this.defaultValue = defaultValue;
         }
+
         @Override
         public boolean match(OsmPrimitive osm) {
             Boolean ret = OsmUtils.getOsmBoolean(osm.get(key));
@@ -349,17 +361,28 @@ public class SearchCompiler {
             else
                 return ret;
         }
+
+        @Override
+        public String toString() {
+            return key + "?";
+        }
     }
 
     /**
      * Matches if both left and right expressions match.
      */
     public static class And extends BinaryMatch {
-    public And(Match lhs, Match rhs) {super(lhs, rhs);}
-        @Override public boolean match(OsmPrimitive osm) {
+        public And(Match lhs, Match rhs) {
+            super(lhs, rhs);
+        }
+
+        @Override
+        public boolean match(OsmPrimitive osm) {
             return lhs.match(osm) && rhs.match(osm);
         }
-        @Override public String toString() {
+
+        @Override
+        public String toString() {
             return lhs + " && " + rhs;
         }
     }
@@ -368,11 +391,17 @@ public class SearchCompiler {
      * Matches if the left OR the right expression match.
      */
     public static class Or extends BinaryMatch {
-    public Or(Match lhs, Match rhs) {super(lhs, rhs);}
-        @Override public boolean match(OsmPrimitive osm) {
+        public Or(Match lhs, Match rhs) {
+            super(lhs, rhs);
+        }
+
+        @Override
+        public boolean match(OsmPrimitive osm) {
             return lhs.match(osm) || rhs.match(osm);
         }
-        @Override public String toString() {
+
+        @Override
+        public String toString() {
             return lhs + " || " + rhs;
         }
     }
@@ -381,11 +410,17 @@ public class SearchCompiler {
      * Matches if the left OR the right expression match, but not both.
      */
     public static class Xor extends BinaryMatch {
-    public Xor(Match lhs, Match rhs) {super(lhs, rhs);}
-        @Override public boolean match(OsmPrimitive osm) {
+        public Xor(Match lhs, Match rhs) {
+            super(lhs, rhs);
+        }
+
+        @Override
+        public boolean match(OsmPrimitive osm) {
             return lhs.match(osm) ^ rhs.match(osm);
         }
-        @Override public String toString() {
+
+        @Override
+        public String toString() {
             return lhs + " ^ " + rhs;
         }
     }
@@ -394,14 +429,21 @@ public class SearchCompiler {
      * Matches objects with ID in the given range.
      */
     private static class Id extends RangeMatch {
-        public Id(Range range) {super(range);}
+        public Id(Range range) {
+            super(range);
+        }
+
         public Id(PushbackTokenizer tokenizer) throws ParseError {
             this(tokenizer.readRange(tr("Range of primitive ids expected")));
         }
-        @Override protected Long getNumber(OsmPrimitive osm) {
+
+        @Override
+        protected Long getNumber(OsmPrimitive osm) {
             return osm.isNew() ? 0 : osm.getUniqueId();
         }
-        @Override protected String getString() {
+
+        @Override
+        protected String getString() {
             return "id";
         }
     }
@@ -410,14 +452,21 @@ public class SearchCompiler {
      * Matches objects with a changeset ID in the given range.
      */
     private static class ChangesetId extends RangeMatch {
-        public ChangesetId(Range range) {super(range);}
+        public ChangesetId(Range range) {
+            super(range);
+        }
+
         public ChangesetId(PushbackTokenizer tokenizer) throws ParseError {
             this(tokenizer.readRange(tr("Range of changeset ids expected")));
         }
-        @Override protected Long getNumber(OsmPrimitive osm) {
+
+        @Override
+        protected Long getNumber(OsmPrimitive osm) {
             return (long) osm.getChangesetId();
         }
-        @Override protected String getString() {
+
+        @Override
+        protected String getString() {
             return "changeset";
         }
     }
@@ -426,14 +475,21 @@ public class SearchCompiler {
      * Matches objects with a version number in the given range.
      */
     private static class Version extends RangeMatch {
-        public Version(Range range) {super(range);}
+        public Version(Range range) {
+            super(range);
+        }
+
         public Version(PushbackTokenizer tokenizer) throws ParseError {
             this(tokenizer.readRange(tr("Range of versions expected")));
         }
-        @Override protected Long getNumber(OsmPrimitive osm) {
+
+        @Override
+        protected Long getNumber(OsmPrimitive osm) {
             return (long) osm.getVersion();
         }
-        @Override protected String getString() {
+
+        @Override
+        protected String getString() {
             return "version";
         }
     }
@@ -449,7 +505,7 @@ public class SearchCompiler {
         private final boolean caseSensitive;
 
         public KeyValue(String key, String value, boolean regexSearch, boolean caseSensitive) throws ParseError {
-            this.caseSensitive = caseSensitive;
+        this.caseSensitive = caseSensitive;
             if (regexSearch) {
                 int searchFlags = regexFlags(caseSensitive);
 
@@ -476,14 +532,15 @@ public class SearchCompiler {
                 this.keyPattern = null;
                 this.valuePattern = null;
             } else {
-                this.key = key.toLowerCase();
+                this.key = key;
                 this.value = value;
                 this.keyPattern = null;
                 this.valuePattern = null;
             }
         }
 
-        @Override public boolean match(OsmPrimitive osm) {
+        @Override
+        public boolean match(OsmPrimitive osm) {
 
             if (keyPattern != null) {
                 if (!osm.hasKeys())
@@ -514,16 +571,24 @@ public class SearchCompiler {
                 String mv = null;
 
                 if ("timestamp".equals(key)) {
-                    mv = DateUtils.fromDate(osm.getTimestamp());
+                    mv = DateUtils.fromTimestamp(osm.getRawTimestamp());
                 } else {
                     mv = osm.get(key);
+                    if (!caseSensitive && mv == null) {
+                        for (String k: osm.keySet()) {
+                            if (key.equalsIgnoreCase(k)) {
+                                mv = osm.get(k);
+                                break;
+                            }
+                        }
+                    }
                 }
 
                 if (mv == null)
                     return false;
 
-                String v1 = caseSensitive ? mv : mv.toLowerCase();
-                String v2 = caseSensitive ? value : value.toLowerCase();
+                String v1 = caseSensitive ? mv : mv.toLowerCase(Locale.ENGLISH);
+                String v2 = caseSensitive ? value : value.toLowerCase(Locale.ENGLISH);
 
                 v1 = Normalizer.normalize(v1, Normalizer.Form.NFC);
                 v2 = Normalizer.normalize(v2, Normalizer.Form.NFC);
@@ -532,7 +597,11 @@ public class SearchCompiler {
 
             return false;
         }
-        @Override public String toString() {return key+"="+value;}
+
+        @Override
+        public String toString() {
+            return key + "=" + value;
+        }
     }
 
     public static class ValueComparison extends Match {
@@ -561,6 +630,11 @@ public class SearchCompiler {
             }
             return compareMode < 0 ? compareResult < 0 : compareMode > 0 ? compareResult > 0 : compareResult == 0;
         }
+
+        @Override
+        public String toString() {
+            return key + (compareMode == -1 ? "<" : compareMode == +1 ? ">" : "") + referenceValue;
+        }
     }
 
     /**
@@ -583,7 +657,7 @@ public class SearchCompiler {
             if ("".equals(key))
                 throw new ParseError(tr("Key cannot be empty when tag operator is used. Sample use: key=value"));
             this.key = key;
-            this.value = value == null?"":value;
+            this.value = value == null ? "" : value;
             if ("".equals(this.value) && "*".equals(key)) {
                 mode = Mode.NONE;
             } else if ("".equals(this.value)) {
@@ -614,24 +688,24 @@ public class SearchCompiler {
                 }
             }
 
-            if (regexp && key.length() > 0 && !"*".equals(key)) {
+            if (regexp && !key.isEmpty() && !"*".equals(key)) {
                 try {
                     keyPattern = Pattern.compile(key, regexFlags(false));
                 } catch (PatternSyntaxException e) {
-                    throw new ParseError(tr(rxErrorMsg, e.getPattern(), e.getIndex(), e.getMessage()));
+                    throw new ParseError(tr(rxErrorMsg, e.getPattern(), e.getIndex(), e.getMessage()), e);
                 } catch (Exception e) {
-                    throw new ParseError(tr(rxErrorMsgNoPos, key, e.getMessage()));
+                    throw new ParseError(tr(rxErrorMsgNoPos, key, e.getMessage()), e);
                 }
             } else {
                 keyPattern = null;
             }
-            if (regexp && this.value.length() > 0 && !"*".equals(this.value)) {
+            if (regexp && !this.value.isEmpty() && !"*".equals(this.value)) {
                 try {
                     valuePattern = Pattern.compile(this.value, regexFlags(false));
                 } catch (PatternSyntaxException e) {
-                    throw new ParseError(tr(rxErrorMsg, e.getPattern(), e.getIndex(), e.getMessage()));
+                    throw new ParseError(tr(rxErrorMsg, e.getPattern(), e.getIndex(), e.getMessage()), e);
                 } catch (Exception e) {
-                    throw new ParseError(tr(rxErrorMsgNoPos, value, e.getMessage()));
+                    throw new ParseError(tr(rxErrorMsgNoPos, value, e.getMessage()), e);
                 }
             } else {
                 valuePattern = null;
@@ -691,7 +765,6 @@ public class SearchCompiler {
         public String toString() {
             return key + '=' + value;
         }
-
     }
 
     /**
@@ -718,12 +791,13 @@ public class SearchCompiler {
                 this.search = s;
                 this.searchRegex = null;
             } else {
-                this.search = s.toLowerCase();
+                this.search = s.toLowerCase(Locale.ENGLISH);
                 this.searchRegex = null;
             }
         }
 
-        @Override public boolean match(OsmPrimitive osm) {
+        @Override
+        public boolean match(OsmPrimitive osm) {
             if (!osm.hasKeys() && osm.getUser() == null)
                 return search.isEmpty();
 
@@ -743,8 +817,8 @@ public class SearchCompiler {
                         return true;
                 } else {
                     if (!caseSensitive) {
-                        key = key.toLowerCase();
-                        value = value.toLowerCase();
+                        key = key.toLowerCase(Locale.ENGLISH);
+                        value = value.toLowerCase(Locale.ENGLISH);
                     }
 
                     value = Normalizer.normalize(value, Normalizer.Form.NFC);
@@ -755,23 +829,32 @@ public class SearchCompiler {
             }
             return false;
         }
-        @Override public String toString() {
+
+        @Override
+        public String toString() {
             return search;
         }
     }
 
     private static class ExactType extends Match {
         private final OsmPrimitiveType type;
+
         public ExactType(String type) throws ParseError {
             this.type = OsmPrimitiveType.from(type);
             if (this.type == null)
                 throw new ParseError(tr("Unknown primitive type: {0}. Allowed values are node, way or relation",
                         type));
         }
-        @Override public boolean match(OsmPrimitive osm) {
+
+        @Override
+        public boolean match(OsmPrimitive osm) {
             return type.equals(osm.getType());
         }
-        @Override public String toString() {return "type="+type;}
+
+        @Override
+        public String toString() {
+            return "type=" + type;
+        }
     }
 
     /**
@@ -779,6 +862,7 @@ public class SearchCompiler {
      */
     private static class UserMatch extends Match {
         private String user;
+
         public UserMatch(String user) {
             if ("anonymous".equals(user)) {
                 this.user = null;
@@ -787,14 +871,16 @@ public class SearchCompiler {
             }
         }
 
-        @Override public boolean match(OsmPrimitive osm) {
+        @Override
+        public boolean match(OsmPrimitive osm) {
             if (osm.getUser() == null)
                 return user == null;
             else
                 return osm.getUser().hasName(user);
         }
 
-        @Override public String toString() {
+        @Override
+        public String toString() {
             return "user=" + (user == null ? "" : user);
         }
     }
@@ -804,6 +890,7 @@ public class SearchCompiler {
      */
     private static class RoleMatch extends Match {
         private String role;
+
         public RoleMatch(String role) {
             if (role == null) {
                 this.role = "";
@@ -812,13 +899,14 @@ public class SearchCompiler {
             }
         }
 
-        @Override public boolean match(OsmPrimitive osm) {
+        @Override
+        public boolean match(OsmPrimitive osm) {
             for (OsmPrimitive ref: osm.getReferrers()) {
                 if (ref instanceof Relation && !ref.isIncomplete() && !ref.isDeleted()) {
                     for (RelationMember m : ((Relation) ref).getMembers()) {
                         if (m.getMember() == osm) {
                             String testRole = m.getRole();
-                            if(role.equals(testRole == null ? "" : testRole))
+                            if (role.equals(testRole == null ? "" : testRole))
                                 return true;
                         }
                     }
@@ -827,7 +915,8 @@ public class SearchCompiler {
             return false;
         }
 
-        @Override public String toString() {
+        @Override
+        public String toString() {
             return "role=" + role;
         }
     }
@@ -915,7 +1004,6 @@ public class SearchCompiler {
         }
     }
 
-
     /**
      * Matches ways with a number of nodes in given range
      */
@@ -1008,24 +1096,26 @@ public class SearchCompiler {
 
         @Override
         protected Long getNumber(OsmPrimitive osm) {
-            return osm.getTimestamp().getTime();
+            return osm.getRawTimestamp() * 1000L;
         }
 
         @Override
         protected String getString() {
             return "timestamp";
         }
-
     }
 
     /**
      * Matches objects that are new (i.e. have not been uploaded to the server)
      */
     private static class New extends Match {
-        @Override public boolean match(OsmPrimitive osm) {
+        @Override
+        public boolean match(OsmPrimitive osm) {
             return osm.isNew();
         }
-        @Override public String toString() {
+
+        @Override
+        public String toString() {
             return "new";
         }
     }
@@ -1034,20 +1124,30 @@ public class SearchCompiler {
      * Matches all objects that have been modified, created, or undeleted
      */
     private static class Modified extends Match {
-        @Override public boolean match(OsmPrimitive osm) {
+        @Override
+        public boolean match(OsmPrimitive osm) {
             return osm.isModified() || osm.isNewOrUndeleted();
         }
-        @Override public String toString() {return "modified";}
+
+        @Override
+        public String toString() {
+            return "modified";
+        }
     }
 
     /**
      * Matches all objects currently selected
      */
     private static class Selected extends Match {
-        @Override public boolean match(OsmPrimitive osm) {
+        @Override
+        public boolean match(OsmPrimitive osm) {
             return Main.main.getCurrentDataSet().isSelected(osm);
         }
-        @Override public String toString() {return "selected";}
+
+        @Override
+        public String toString() {
+            return "selected";
+        }
     }
 
     /**
@@ -1056,10 +1156,15 @@ public class SearchCompiler {
      * fetched from the server.
      */
     private static class Incomplete extends Match {
-        @Override public boolean match(OsmPrimitive osm) {
+        @Override
+        public boolean match(OsmPrimitive osm) {
             return osm.isIncomplete();
         }
-        @Override public String toString() {return "incomplete";}
+
+        @Override
+        public String toString() {
+            return "incomplete";
+        }
     }
 
     /**
@@ -1068,20 +1173,30 @@ public class SearchCompiler {
      * org.openstreetmap.josm.data.osm.OsmPrimitive.getUninterestingKeys()
      */
     private static class Untagged extends Match {
-        @Override public boolean match(OsmPrimitive osm) {
+        @Override
+        public boolean match(OsmPrimitive osm) {
             return !osm.isTagged() && !osm.isIncomplete();
         }
-        @Override public String toString() {return "untagged";}
+
+        @Override
+        public String toString() {
+            return "untagged";
+        }
     }
 
     /**
      * Matches ways which are closed (i.e. first and last node are the same)
      */
     private static class Closed extends Match {
-        @Override public boolean match(OsmPrimitive osm) {
+        @Override
+        public boolean match(OsmPrimitive osm) {
             return osm instanceof Way && ((Way) osm).isClosed();
         }
-        @Override public String toString() {return "closed";}
+
+        @Override
+        public String toString() {
+            return "closed";
+        }
     }
 
     /**
@@ -1091,21 +1206,27 @@ public class SearchCompiler {
         public Parent(Match m) {
             super(m);
         }
-        @Override public boolean match(OsmPrimitive osm) {
+
+        @Override
+        public boolean match(OsmPrimitive osm) {
             boolean isParent = false;
 
             if (osm instanceof Way) {
-                for (Node n : ((Way)osm).getNodes()) {
+                for (Node n : ((Way) osm).getNodes()) {
                     isParent |= match.match(n);
                 }
             } else if (osm instanceof Relation) {
-                for (RelationMember member : ((Relation)osm).getMembers()) {
+                for (RelationMember member : ((Relation) osm).getMembers()) {
                     isParent |= match.match(member.getMember());
                 }
             }
             return isParent;
         }
-        @Override public String toString() {return "parent(" + match + ")";}
+
+        @Override
+        public String toString() {
+            return "parent(" + match + ")";
+        }
     }
 
     /**
@@ -1117,14 +1238,19 @@ public class SearchCompiler {
             super(m);
         }
 
-        @Override public boolean match(OsmPrimitive osm) {
+        @Override
+        public boolean match(OsmPrimitive osm) {
             boolean isChild = false;
             for (OsmPrimitive p : osm.getReferrers()) {
                 isChild |= match.match(p);
             }
             return isChild;
         }
-        @Override public String toString() {return "child(" + match + ")";}
+
+        @Override
+        public String toString() {
+            return "child(" + match + ")";
+        }
     }
 
     /**
@@ -1188,7 +1314,6 @@ public class SearchCompiler {
      */
     private abstract static class InArea extends Match {
 
-        protected abstract Bounds getBounds();
         protected final boolean all;
 
         /**
@@ -1198,6 +1323,8 @@ public class SearchCompiler {
             this.all = all;
         }
 
+        protected abstract Bounds getBounds();
+
         @Override
         public boolean match(OsmPrimitive osm) {
             if (!osm.isUsable())
@@ -1219,7 +1346,7 @@ public class SearchCompiler {
     /**
      * Matches objects within source area ("downloaded area").
      */
-    private static class InDataSourceArea extends InArea {
+    public static class InDataSourceArea extends InArea {
 
         public InDataSourceArea(boolean all) {
             super(all);
@@ -1227,7 +1354,13 @@ public class SearchCompiler {
 
         @Override
         protected Bounds getBounds() {
-            return new Bounds(Main.main.getCurrentDataSet().getDataSourceArea().getBounds2D());
+            return Main.main.getCurrentDataSet() == null || Main.main.getCurrentDataSet().getDataSourceArea() == null
+                    ? null : new Bounds(Main.main.getCurrentDataSet().getDataSourceArea().getBounds2D());
+        }
+
+        @Override
+        public String toString() {
+            return all ? "allindownloadedarea" : "indownloadedarea";
         }
     }
 
@@ -1247,15 +1380,22 @@ public class SearchCompiler {
             }
             return Main.map.mapView.getRealBounds();
         }
+
+        @Override
+        public String toString() {
+            return all ? "allinview" : "inview";
+        }
     }
 
     public static class ParseError extends Exception {
         public ParseError(String msg) {
             super(msg);
         }
+
         public ParseError(String msg, Throwable cause) {
             super(msg, cause);
         }
+
         public ParseError(Token expected, Token found) {
             this(tr("Unexpected token. Expected {0}, found {1}", expected, found));
         }
@@ -1272,14 +1412,15 @@ public class SearchCompiler {
      * Parse search string.
      *
      * @return match determined by search string
-     * @throws org.openstreetmap.josm.actions.search.SearchCompiler.ParseError
+     * @throws org.openstreetmap.josm.actions.search.SearchCompiler.ParseError if search expression cannot be parsed
      */
     public Match parse() throws ParseError {
         Match m = parseExpression();
         if (!tokenizer.readIfEqual(Token.EOF))
             throw new ParseError(tr("Unexpected token: {0}", tokenizer.nextToken()));
         if (m == null)
-            return new Always();
+            m = new Always();
+        Main.debug("Parsed search expression is {0}", m);
         return m;
     }
 
@@ -1287,7 +1428,7 @@ public class SearchCompiler {
      * Parse expression. This is a recursive method.
      *
      * @return match determined by parsing expression
-     * @throws org.openstreetmap.josm.actions.search.SearchCompiler.ParseError
+     * @throws org.openstreetmap.josm.actions.search.SearchCompiler.ParseError if search expression cannot be parsed
      */
     private Match parseExpression() throws ParseError {
         Match factor = parseFactor();
@@ -1314,7 +1455,7 @@ public class SearchCompiler {
      *
      * @param errorMessage to display if parsing error occurs
      * @return match determined by parsing expression
-     * @throws org.openstreetmap.josm.actions.search.SearchCompiler.ParseError
+     * @throws org.openstreetmap.josm.actions.search.SearchCompiler.ParseError if search expression cannot be parsed
      * @see #parseExpression()
      */
     private Match parseExpression(String errorMessage) throws ParseError {
@@ -1329,7 +1470,7 @@ public class SearchCompiler {
      * Parse next factor (a search operator or search term).
      *
      * @return match determined by parsing factor string
-     * @throws org.openstreetmap.josm.actions.search.SearchCompiler.ParseError
+     * @throws org.openstreetmap.josm.actions.search.SearchCompiler.ParseError if search expression cannot be parsed
      */
     private Match parseFactor() throws ParseError {
         if (tokenizer.readIfEqual(Token.LEFT_PARENT)) {
diff --git a/src/org/openstreetmap/josm/actions/upload/ApiPreconditionCheckerHook.java b/src/org/openstreetmap/josm/actions/upload/ApiPreconditionCheckerHook.java
index 2440de3..d7040de 100644
--- a/src/org/openstreetmap/josm/actions/upload/ApiPreconditionCheckerHook.java
+++ b/src/org/openstreetmap/josm/actions/upload/ApiPreconditionCheckerHook.java
@@ -33,11 +33,11 @@ public class ApiPreconditionCheckerHook implements UploadHook {
             api.initialize(NullProgressMonitor.INSTANCE);
             long maxNodes = api.getCapabilities().getMaxWayNodes();
             if (maxNodes > 0) {
-                if( !checkMaxNodes(apiData.getPrimitivesToAdd(), maxNodes))
+                if (!checkMaxNodes(apiData.getPrimitivesToAdd(), maxNodes))
                     return false;
-                if( !checkMaxNodes(apiData.getPrimitivesToUpdate(), maxNodes))
+                if (!checkMaxNodes(apiData.getPrimitivesToUpdate(), maxNodes))
                     return false;
-                if( !checkMaxNodes(apiData.getPrimitivesToDelete(), maxNodes))
+                if (!checkMaxNodes(apiData.getPrimitivesToDelete(), maxNodes))
                     return false;
             }
         } catch (OsmTransferCanceledException e) {
@@ -78,11 +78,11 @@ public class ApiPreconditionCheckerHook implements UploadHook {
             }
 
             if (osmPrimitive instanceof Way &&
-                    ((Way)osmPrimitive).getNodesCount() > maxNodes) {
+                    ((Way) osmPrimitive).getNodesCount() > maxNodes) {
                 JOptionPane.showMessageDialog(
                         Main.parent,
                         tr("{0} nodes in way {1} exceed the max. allowed number of nodes {2}",
-                                ((Way)osmPrimitive).getNodesCount(),
+                                ((Way) osmPrimitive).getNodesCount(),
                                 Long.toString(osmPrimitive.getId()),
                                 maxNodes
                         ),
diff --git a/src/org/openstreetmap/josm/actions/upload/CyclicUploadDependencyException.java b/src/org/openstreetmap/josm/actions/upload/CyclicUploadDependencyException.java
index 057b2ea..3484aea 100644
--- a/src/org/openstreetmap/josm/actions/upload/CyclicUploadDependencyException.java
+++ b/src/org/openstreetmap/josm/actions/upload/CyclicUploadDependencyException.java
@@ -19,7 +19,7 @@ public class CyclicUploadDependencyException extends Exception {
     protected String formatRelation(Relation r) {
         StringBuilder sb = new StringBuilder();
         if (r.getName() != null) {
-            sb.append("'").append(r.getName()).append("'");
+            sb.append('\'').append(r.getName()).append('\'');
         } else if (!r.isNew()) {
             sb.append(r.getId());
         } else {
@@ -31,15 +31,15 @@ public class CyclicUploadDependencyException extends Exception {
     @Override
     public String getMessage() {
         StringBuilder sb = new StringBuilder();
-        sb.append(tr("Cyclic dependency between relations:"));
-        sb.append("[");
-        for (int i=0; i< cycle.size(); i++) {
-            if (i >0 ) {
-                sb.append(",");
+        sb.append(tr("Cyclic dependency between relations:"))
+          .append('[');
+        for (int i = 0; i < cycle.size(); i++) {
+            if (i > 0) {
+                sb.append(',');
             }
             sb.append(formatRelation(cycle.get(i)));
         }
-        sb.append("]");
+        sb.append(']');
         return sb.toString();
     }
 
diff --git a/src/org/openstreetmap/josm/actions/upload/FixDataHook.java b/src/org/openstreetmap/josm/actions/upload/FixDataHook.java
index 60fb5e8..5711213 100644
--- a/src/org/openstreetmap/josm/actions/upload/FixDataHook.java
+++ b/src/org/openstreetmap/josm/actions/upload/FixDataHook.java
@@ -34,7 +34,7 @@ public class FixDataHook implements UploadHook {
     /**
      * Constructor for data initialization
      */
-    public FixDataHook () {
+    public FixDataHook() {
         deprecated.add(new FixDataSpace());
         deprecated.add(new FixDataKey("color",            "colour"));
         deprecated.add(new FixDataTag("highway", "ford",  "ford",    "yes"));
@@ -46,7 +46,7 @@ public class FixDataHook implements UploadHook {
         deprecated.add(new FixData() {
             @Override
             public boolean fixKeys(Map<String, String> keys, OsmPrimitive osm) {
-                if(osm instanceof Relation && "multipolygon".equals(keys.get("type")) && "administrative".equals(keys.get("boundary"))) {
+                if (osm instanceof Relation && "multipolygon".equals(keys.get("type")) && "administrative".equals(keys.get("boundary"))) {
                     keys.put("type", "boundary");
                     return true;
                 }
@@ -66,7 +66,7 @@ public class FixDataHook implements UploadHook {
          * @param osm the object for type validation, don't use keys of it!
          * @return <code>true</code> if keys have been modified
          */
-        public boolean fixKeys(Map<String, String> keys, OsmPrimitive osm);
+        boolean fixKeys(Map<String, String> keys, OsmPrimitive osm);
     }
 
     /**
@@ -80,13 +80,13 @@ public class FixDataHook implements UploadHook {
                 String v = Tag.removeWhiteSpaces(e.getValue());
                 String k = Tag.removeWhiteSpaces(e.getKey());
                 boolean drop = k.isEmpty() || v.isEmpty();
-                if(!e.getKey().equals(k)) {
-                    if(drop || !keys.containsKey(k)) {
+                if (!e.getKey().equals(k)) {
+                    if (drop || !keys.containsKey(k)) {
                         newKeys.put(e.getKey(), null);
-                        if(!drop)
+                        if (!drop)
                             newKeys.put(k, v);
                     }
-                } else if(!e.getValue().equals(v)) {
+                } else if (!e.getValue().equals(v)) {
                     newKeys.put(k, v.isEmpty() ? null : v);
                 } else if (drop) {
                     newKeys.put(e.getKey(), null);
@@ -123,11 +123,11 @@ public class FixDataHook implements UploadHook {
 
         @Override
         public boolean fixKeys(Map<String, String> keys, OsmPrimitive osm) {
-            if(keys.containsKey(oldKey) && !keys.containsKey(newKey)) {
+            if (keys.containsKey(oldKey) && !keys.containsKey(newKey)) {
                 keys.put(newKey, keys.get(oldKey));
                 keys.put(oldKey, null);
                 return true;
-            } else if(keys.containsKey(oldKey) && keys.containsKey(newKey) && keys.get(oldKey).equals(keys.get(newKey))) {
+            } else if (keys.containsKey(oldKey) && keys.containsKey(newKey) && keys.get(oldKey).equals(keys.get(newKey))) {
                 keys.put(oldKey, null);
                 return true;
             }
@@ -165,10 +165,10 @@ public class FixDataHook implements UploadHook {
 
         @Override
         public boolean fixKeys(Map<String, String> keys, OsmPrimitive osm) {
-            if(oldValue.equals(keys.get(oldKey)) && (newKey.equals(oldKey)
+            if (oldValue.equals(keys.get(oldKey)) && (newKey.equals(oldKey)
             || !keys.containsKey(newKey) || keys.get(newKey).equals(newValue))) {
                 keys.put(newKey, newValue);
-                if(!newKey.equals(oldKey))
+                if (!newKey.equals(oldKey))
                     keys.put(oldKey, null);
                 return true;
             }
@@ -182,7 +182,7 @@ public class FixDataHook implements UploadHook {
      */
     @Override
     public boolean checkUpload(APIDataSet apiDataSet) {
-        if(!Main.pref.getBoolean("fix.data.on.upload", true))
+        if (!Main.pref.getBoolean("fix.data.on.upload", true))
             return true;
 
         List<OsmPrimitive> objectsToUpload = apiDataSet.getPrimitives();
@@ -190,18 +190,18 @@ public class FixDataHook implements UploadHook {
 
         for (OsmPrimitive osm : objectsToUpload) {
             Map<String, String> keys = new HashMap<>(osm.getKeys());
-            if(!keys.isEmpty()) {
+            if (!keys.isEmpty()) {
                 boolean modified = false;
                 for (FixData fix : deprecated) {
-                    if(fix.fixKeys(keys, osm))
+                    if (fix.fixKeys(keys, osm))
                         modified = true;
                 }
-                if(modified)
+                if (modified)
                     cmds.add(new ChangePropertyCommand(Collections.singleton(osm), keys));
             }
         }
 
-        if(!cmds.isEmpty())
+        if (!cmds.isEmpty())
             Main.main.undoRedo.add(new SequenceCommand(tr("Fix deprecated tags"), cmds));
         return true;
     }
diff --git a/src/org/openstreetmap/josm/actions/upload/RelationUploadOrderHook.java b/src/org/openstreetmap/josm/actions/upload/RelationUploadOrderHook.java
index 4c892d3..740f02c 100644
--- a/src/org/openstreetmap/josm/actions/upload/RelationUploadOrderHook.java
+++ b/src/org/openstreetmap/josm/actions/upload/RelationUploadOrderHook.java
@@ -47,10 +47,10 @@ public class RelationUploadOrderHook implements UploadHook {
         DefaultTableModel model = new DefaultTableModel();
         model.addColumn(tr("Relation ..."));
         model.addColumn(tr("... refers to relation"));
-        for (int i=0; i<dep.size()-1;i++) {
+        for (int i = 0; i < dep.size()-1; i++) {
             Relation r1 = dep.get(i);
             Relation r2 = dep.get(i+1);
-            model.addRow(new Relation[] {r1,r2});
+            model.addRow(new Relation[] {r1, r2});
         }
         JTable tbl = new JTable(model);
         OsmPrimitivRenderer renderer = new OsmPrimitivRenderer();
@@ -69,7 +69,7 @@ public class RelationUploadOrderHook implements UploadHook {
         List<Relation> dep = e.getCyclicUploadDependency();
         Relation last = dep.get(dep.size() -1);
         Iterator<Relation> it = dep.iterator();
-        while(it.hasNext()) {
+        while (it.hasNext()) {
             if (it.next() != last) {
                 it.remove();
             } else {
@@ -96,7 +96,7 @@ public class RelationUploadOrderHook implements UploadHook {
         try {
             apiDataSet.adjustRelationUploadOrder();
             return true;
-        } catch(CyclicUploadDependencyException e) {
+        } catch (CyclicUploadDependencyException e) {
             warnCyclicUploadDependency(e);
             return false;
         }
diff --git a/src/org/openstreetmap/josm/actions/upload/UploadHook.java b/src/org/openstreetmap/josm/actions/upload/UploadHook.java
index 92e129e..9585329 100644
--- a/src/org/openstreetmap/josm/actions/upload/UploadHook.java
+++ b/src/org/openstreetmap/josm/actions/upload/UploadHook.java
@@ -8,5 +8,5 @@ public interface UploadHook {
      * Checks the upload.
      * @param apiDataSet the data to upload
      */
-    public boolean checkUpload(APIDataSet apiDataSet);
+    boolean checkUpload(APIDataSet apiDataSet);
 }
diff --git a/src/org/openstreetmap/josm/actions/upload/UploadNotesTask.java b/src/org/openstreetmap/josm/actions/upload/UploadNotesTask.java
index 3783edd..3556043 100644
--- a/src/org/openstreetmap/josm/actions/upload/UploadNotesTask.java
+++ b/src/org/openstreetmap/josm/actions/upload/UploadNotesTask.java
@@ -24,7 +24,6 @@ import org.xml.sax.SAXException;
  */
 public class UploadNotesTask {
 
-    private UploadTask uploadTask;
     private NoteData noteData;
 
     /**
@@ -34,8 +33,7 @@ public class UploadNotesTask {
      */
     public void uploadNotes(NoteData noteData, ProgressMonitor progressMonitor) {
         this.noteData = noteData;
-        uploadTask = new UploadTask(tr("Uploading modified notes"), progressMonitor);
-        Main.worker.submit(uploadTask);
+        Main.worker.submit(new UploadTask(tr("Uploading modified notes"), progressMonitor));
     }
 
     private class UploadTask extends PleaseWaitRunnable {
@@ -66,12 +64,12 @@ public class UploadNotesTask {
             ProgressMonitor monitor = progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false);
             OsmApi api = OsmApi.getOsmApi();
             for (Note note : noteData.getNotes()) {
-                if(isCanceled) {
+                if (isCanceled) {
                     Main.info("Note upload interrupted by user");
                     break;
                 }
                 for (NoteComment comment : note.getComments()) {
-                    if (comment.getIsNew()) {
+                    if (comment.isNew()) {
                         if (Main.isDebugEnabled()) {
                             Main.debug("found note change to upload");
                         }
@@ -90,7 +88,6 @@ public class UploadNotesTask {
                         Main.debug("opening new note");
                     }
                     newNote = api.createNote(note.getLatLon(), comment.getText(), monitor);
-                    note.setId(newNote.getId());
                     break;
                 case closed:
                     if (Main.isDebugEnabled()) {
@@ -132,13 +129,11 @@ public class UploadNotesTask {
                 StringBuilder sb = new StringBuilder();
                 for (Map.Entry<Note, Exception> entry : failedNotes.entrySet()) {
                     sb.append(tr("Note {0} failed: {1}", entry.getKey().getId(), entry.getValue().getMessage()));
-                    sb.append("\n");
+                    sb.append('\n');
                 }
                 Main.error("Notes failed to upload: " + sb.toString());
                 JOptionPane.showMessageDialog(Main.map, sb.toString(), tr("Notes failed to upload"), JOptionPane.ERROR_MESSAGE);
             }
         }
-
     }
-
 }
diff --git a/src/org/openstreetmap/josm/actions/upload/ValidateUploadHook.java b/src/org/openstreetmap/josm/actions/upload/ValidateUploadHook.java
index ee128d0..b85875d 100644
--- a/src/org/openstreetmap/josm/actions/upload/ValidateUploadHook.java
+++ b/src/org/openstreetmap/josm/actions/upload/ValidateUploadHook.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.actions.upload;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -91,7 +91,7 @@ public class ValidateUploadHook implements UploadHook {
                         error.setIgnored(true);
                     }
                 }
-                if (!error.getIgnored()) {
+                if (!error.isIgnored()) {
                     ++nume;
                 }
             }
diff --git a/src/org/openstreetmap/josm/command/AddCommand.java b/src/org/openstreetmap/josm/command/AddCommand.java
index 5986796..77306de 100644
--- a/src/org/openstreetmap/josm/command/AddCommand.java
+++ b/src/org/openstreetmap/josm/command/AddCommand.java
@@ -51,7 +51,7 @@ public class AddCommand extends Command {
     protected static final void checkNodeStyles(OsmPrimitive osm) {
         if (osm instanceof Way) {
             // Fix #10557 - node icon not updated after undoing/redoing addition of a way
-            ((Way)osm).clearCachedNodeStyles();
+            ((Way) osm).clearCachedNodeStyles();
         }
     }
 
@@ -95,4 +95,29 @@ public class AddCommand extends Command {
     public Collection<OsmPrimitive> getParticipatingPrimitives() {
         return Collections.singleton(osm);
     }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = super.hashCode();
+        result = prime * result + ((osm == null) ? 0 : osm.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (!super.equals(obj))
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        AddCommand other = (AddCommand) obj;
+        if (osm == null) {
+            if (other.osm != null)
+                return false;
+        } else if (!osm.equals(other.osm))
+            return false;
+        return true;
+    }
 }
diff --git a/src/org/openstreetmap/josm/command/AddPrimitivesCommand.java b/src/org/openstreetmap/josm/command/AddPrimitivesCommand.java
index 8b149b7..51975a8 100644
--- a/src/org/openstreetmap/josm/command/AddPrimitivesCommand.java
+++ b/src/org/openstreetmap/josm/command/AddPrimitivesCommand.java
@@ -7,6 +7,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
+
 import javax.swing.Icon;
 
 import org.openstreetmap.josm.data.osm.DataSet;
@@ -59,7 +60,7 @@ public class AddPrimitivesCommand extends Command {
         init(data, toSelect);
     }
 
-    private final void init(List<PrimitiveData> data, List<PrimitiveData> toSelect) {
+    private void init(List<PrimitiveData> data, List<PrimitiveData> toSelect) {
         CheckParameterUtil.ensureParameterNotNull(data, "data");
         this.data.addAll(data);
         if (toSelect != null) {
@@ -67,7 +68,8 @@ public class AddPrimitivesCommand extends Command {
         }
     }
 
-    @Override public boolean executeCommand() {
+    @Override
+    public boolean executeCommand() {
         Collection<OsmPrimitive> primitivesToSelect;
         if (createdPrimitives == null) { // first time execution
             List<OsmPrimitive> newPrimitives = new ArrayList<>(data.size());
@@ -92,7 +94,7 @@ public class AddPrimitivesCommand extends Command {
             }
 
             // Then load ways and relations
-            for (int i=0; i<newPrimitives.size(); i++) {
+            for (int i = 0; i < newPrimitives.size(); i++) {
                 if (!(newPrimitives.get(i) instanceof Node)) {
                     newPrimitives.get(i).load(data.get(i));
                 }
@@ -170,4 +172,47 @@ public class AddPrimitivesCommand extends Command {
         }
         return prims;
     }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = super.hashCode();
+        result = prime * result + ((createdPrimitives == null) ? 0 : createdPrimitives.hashCode());
+        result = prime * result + ((createdPrimitivesToSelect == null) ? 0 : createdPrimitivesToSelect.hashCode());
+        result = prime * result + ((data == null) ? 0 : data.hashCode());
+        result = prime * result + ((toSelect == null) ? 0 : toSelect.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (!super.equals(obj))
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        AddPrimitivesCommand other = (AddPrimitivesCommand) obj;
+        if (createdPrimitives == null) {
+            if (other.createdPrimitives != null)
+                return false;
+        } else if (!createdPrimitives.equals(other.createdPrimitives))
+            return false;
+        if (createdPrimitivesToSelect == null) {
+            if (other.createdPrimitivesToSelect != null)
+                return false;
+        } else if (!createdPrimitivesToSelect.equals(other.createdPrimitivesToSelect))
+            return false;
+        if (data == null) {
+            if (other.data != null)
+                return false;
+        } else if (!data.equals(other.data))
+            return false;
+        if (toSelect == null) {
+            if (other.toSelect != null)
+                return false;
+        } else if (!toSelect.equals(other.toSelect))
+            return false;
+        return true;
+    }
 }
diff --git a/src/org/openstreetmap/josm/command/ChangeCommand.java b/src/org/openstreetmap/josm/command/ChangeCommand.java
index 9337130..6e3b7e3 100644
--- a/src/org/openstreetmap/josm/command/ChangeCommand.java
+++ b/src/org/openstreetmap/josm/command/ChangeCommand.java
@@ -53,7 +53,7 @@ public class ChangeCommand extends Command {
     private void sanityChecks() {
         CheckParameterUtil.ensureParameterNotNull(osm, "osm");
         CheckParameterUtil.ensureParameterNotNull(newOsm, "newOsm");
-        if (newOsm instanceof Way && ((Way)newOsm).getNodesCount() == 0) {
+        if (newOsm instanceof Way && ((Way) newOsm).getNodesCount() == 0) {
             // Do not allow to create empty ways (see #7465)
             throw new IllegalArgumentException(tr("New way {0} has 0 nodes", newOsm));
         }
@@ -87,4 +87,35 @@ public class ChangeCommand extends Command {
     public Icon getDescriptionIcon() {
         return ImageProvider.get(osm.getDisplayType());
     }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = super.hashCode();
+        result = prime * result + ((newOsm == null) ? 0 : newOsm.hashCode());
+        result = prime * result + ((osm == null) ? 0 : osm.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (!super.equals(obj))
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        ChangeCommand other = (ChangeCommand) obj;
+        if (newOsm == null) {
+            if (other.newOsm != null)
+                return false;
+        } else if (!newOsm.equals(other.newOsm))
+            return false;
+        if (osm == null) {
+            if (other.osm != null)
+                return false;
+        } else if (!osm.equals(other.osm))
+            return false;
+        return true;
+    }
 }
diff --git a/src/org/openstreetmap/josm/command/ChangeNodesCommand.java b/src/org/openstreetmap/josm/command/ChangeNodesCommand.java
index a40417e..35be9f6 100644
--- a/src/org/openstreetmap/josm/command/ChangeNodesCommand.java
+++ b/src/org/openstreetmap/josm/command/ChangeNodesCommand.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.command;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -60,4 +60,35 @@ public class ChangeNodesCommand extends Command {
     public Icon getDescriptionIcon() {
         return ImageProvider.get(OsmPrimitiveType.WAY);
     }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = super.hashCode();
+        result = prime * result + ((newNodes == null) ? 0 : newNodes.hashCode());
+        result = prime * result + ((way == null) ? 0 : way.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (!super.equals(obj))
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        ChangeNodesCommand other = (ChangeNodesCommand) obj;
+        if (newNodes == null) {
+            if (other.newNodes != null)
+                return false;
+        } else if (!newNodes.equals(other.newNodes))
+            return false;
+        if (way == null) {
+            if (other.way != null)
+                return false;
+        } else if (!way.equals(other.way))
+            return false;
+        return true;
+    }
 }
diff --git a/src/org/openstreetmap/josm/command/ChangePropertyCommand.java b/src/org/openstreetmap/josm/command/ChangePropertyCommand.java
index 0efa609..28f7d44 100644
--- a/src/org/openstreetmap/josm/command/ChangePropertyCommand.java
+++ b/src/org/openstreetmap/josm/command/ChangePropertyCommand.java
@@ -96,8 +96,7 @@ public class ChangePropertyCommand extends Command {
                     if (oldVal != null)
                         // new value is null and tag exists (will delete tag)
                         modified = true;
-                }
-                else if (oldVal == null || !newVal.equals(oldVal))
+                } else if (oldVal == null || !newVal.equals(oldVal))
                     // new value is not null and is different from current value
                     modified = true;
             }
@@ -120,8 +119,7 @@ public class ChangePropertyCommand extends Command {
                     if (newVal == null || newVal.isEmpty()) {
                         if (oldVal != null)
                             osm.remove(tag.getKey());
-                    }
-                    else if (oldVal == null || !newVal.equals(oldVal))
+                    } else if (oldVal == null || !newVal.equals(oldVal))
                         osm.put(tag.getKey(), newVal);
                 }
                 // init() only keeps modified primitives. Therefore the modified
@@ -129,8 +127,7 @@ public class ChangePropertyCommand extends Command {
                 osm.setModified(true);
             }
             return true;
-        }
-        finally {
+        } finally {
             Main.main.getCurrentDataSet().endUpdate();
         }
     }
@@ -168,10 +165,10 @@ public class ChangePropertyCommand extends Command {
                 text = trn("Remove \"{0}\" for {1} object", "Remove \"{0}\" for {1} objects", objects.size(), entry.getKey(), objects.size());
             } else {
                 /* I18n: plural form for objects, but value < 2 not possible! */
-                text = trn("Set {0}={1} for {2} object", "Set {0}={1} for {2} objects", objects.size(), entry.getKey(), entry.getValue(), objects.size());
+                text = trn("Set {0}={1} for {2} object", "Set {0}={1} for {2} objects",
+                        objects.size(), entry.getKey(), entry.getValue(), objects.size());
             }
-        }
-        else {
+        } else {
             boolean allnull = true;
             for (Map.Entry<String, String> tag : this.tags.entrySet()) {
                 if (tag.getValue() != null) {
@@ -226,4 +223,35 @@ public class ChangePropertyCommand extends Command {
     public Map<String, String> getTags() {
         return Collections.unmodifiableMap(tags);
     }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = super.hashCode();
+        result = prime * result + ((objects == null) ? 0 : objects.hashCode());
+        result = prime * result + ((tags == null) ? 0 : tags.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (!super.equals(obj))
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        ChangePropertyCommand other = (ChangePropertyCommand) obj;
+        if (objects == null) {
+            if (other.objects != null)
+                return false;
+        } else if (!objects.equals(other.objects))
+            return false;
+        if (tags == null) {
+            if (other.tags != null)
+                return false;
+        } else if (!tags.equals(other.tags))
+            return false;
+        return true;
+    }
 }
diff --git a/src/org/openstreetmap/josm/command/ChangePropertyKeyCommand.java b/src/org/openstreetmap/josm/command/ChangePropertyKeyCommand.java
index 7cb4719..c8d41d7 100644
--- a/src/org/openstreetmap/josm/command/ChangePropertyKeyCommand.java
+++ b/src/org/openstreetmap/josm/command/ChangePropertyKeyCommand.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.command;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -9,6 +9,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
+
 import javax.swing.Icon;
 
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -23,7 +24,7 @@ public class ChangePropertyKeyCommand extends Command {
     /**
      * All primitives, that are affected with this command.
      */
-    private final List<OsmPrimitive> objects;
+    private final List<? extends OsmPrimitive> objects;
     /**
      * The key that is subject to change.
      */
@@ -80,13 +81,13 @@ public class ChangePropertyKeyCommand extends Command {
 
     @Override
     public String getDescriptionText() {
-        String text = tr( "Replace \"{0}\" by \"{1}\" for", key, newKey);
+        String text = tr("Replace \"{0}\" by \"{1}\" for", key, newKey);
         if (objects.size() == 1) {
             NameVisitor v = new NameVisitor();
             objects.iterator().next().accept(v);
             text += " "+tr(v.className)+" "+v.name;
         } else {
-            text += " "+objects.size()+" "+trn("object","objects",objects.size());
+            text += " "+objects.size()+" "+trn("object", "objects", objects.size());
         }
         return text;
     }
@@ -110,10 +111,12 @@ public class ChangePropertyKeyCommand extends Command {
                 public String getDescriptionText() {
                     return v.name;
                 }
+
                 @Override
                 public Icon getDescriptionIcon() {
                     return v.icon;
                 }
+
                 @Override
                 public Collection<? extends OsmPrimitive> getParticipatingPrimitives() {
                     return Collections.singleton(osm);
@@ -122,4 +125,41 @@ public class ChangePropertyKeyCommand extends Command {
         }
         return children;
     }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = super.hashCode();
+        result = prime * result + ((key == null) ? 0 : key.hashCode());
+        result = prime * result + ((newKey == null) ? 0 : newKey.hashCode());
+        result = prime * result + ((objects == null) ? 0 : objects.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (!super.equals(obj))
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        ChangePropertyKeyCommand other = (ChangePropertyKeyCommand) obj;
+        if (key == null) {
+            if (other.key != null)
+                return false;
+        } else if (!key.equals(other.key))
+            return false;
+        if (newKey == null) {
+            if (other.newKey != null)
+                return false;
+        } else if (!newKey.equals(other.newKey))
+            return false;
+        if (objects == null) {
+            if (other.objects != null)
+                return false;
+        } else if (!objects.equals(other.objects))
+            return false;
+        return true;
+    }
 }
diff --git a/src/org/openstreetmap/josm/command/ChangeRelationMemberRoleCommand.java b/src/org/openstreetmap/josm/command/ChangeRelationMemberRoleCommand.java
index 319688a..2a5a2ef 100644
--- a/src/org/openstreetmap/josm/command/ChangeRelationMemberRoleCommand.java
+++ b/src/org/openstreetmap/josm/command/ChangeRelationMemberRoleCommand.java
@@ -80,4 +80,50 @@ public class ChangeRelationMemberRoleCommand extends Command {
     public Icon getDescriptionIcon() {
         return ImageProvider.get(relation.getDisplayType());
     }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = super.hashCode();
+        result = prime * result + ((newRole == null) ? 0 : newRole.hashCode());
+        result = prime * result + ((oldModified == null) ? 0 : oldModified.hashCode());
+        result = prime * result + ((oldRole == null) ? 0 : oldRole.hashCode());
+        result = prime * result + position;
+        result = prime * result + ((relation == null) ? 0 : relation.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (!super.equals(obj))
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        ChangeRelationMemberRoleCommand other = (ChangeRelationMemberRoleCommand) obj;
+        if (newRole == null) {
+            if (other.newRole != null)
+                return false;
+        } else if (!newRole.equals(other.newRole))
+            return false;
+        if (oldModified == null) {
+            if (other.oldModified != null)
+                return false;
+        } else if (!oldModified.equals(other.oldModified))
+            return false;
+        if (oldRole == null) {
+            if (other.oldRole != null)
+                return false;
+        } else if (!oldRole.equals(other.oldRole))
+            return false;
+        if (position != other.position)
+            return false;
+        if (relation == null) {
+            if (other.relation != null)
+                return false;
+        } else if (!relation.equals(other.relation))
+            return false;
+        return true;
+    }
 }
diff --git a/src/org/openstreetmap/josm/command/Command.java b/src/org/openstreetmap/josm/command/Command.java
index aae9f60..dbfb04c 100644
--- a/src/org/openstreetmap/josm/command/Command.java
+++ b/src/org/openstreetmap/josm/command/Command.java
@@ -1,4 +1,4 @@
-//License: GPL. For details, see LICENSE file.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.command;
 
 import java.awt.GridBagLayout;
@@ -44,10 +44,12 @@ public abstract class Command extends PseudoCommand {
         public void visit(Node n) {
             orig.put(n, n.save());
         }
+
         @Override
         public void visit(Way w) {
             orig.put(w, w.save());
         }
+
         @Override
         public void visit(Relation e) {
             orig.put(e, e.save());
@@ -67,7 +69,7 @@ public abstract class Command extends PseudoCommand {
          * Constructs a new {@code OldNodeState} for the given node.
          * @param node The node whose state has to be remembered
          */
-        public OldNodeState(Node node){
+        public OldNodeState(Node node) {
             latlon = node.getCoor();
             eastNorth = node.getEastNorth();
             modified = node.isModified();
@@ -99,6 +101,40 @@ public abstract class Command extends PseudoCommand {
         public final boolean isModified() {
             return modified;
         }
+
+        @Override
+        public int hashCode() {
+            final int prime = 31;
+            int result = 1;
+            result = prime * result + ((eastNorth == null) ? 0 : eastNorth.hashCode());
+            result = prime * result + ((latlon == null) ? 0 : latlon.hashCode());
+            result = prime * result + (modified ? 1231 : 1237);
+            return result;
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj)
+                return true;
+            if (obj == null)
+                return false;
+            if (getClass() != obj.getClass())
+                return false;
+            OldNodeState other = (OldNodeState) obj;
+            if (eastNorth == null) {
+                if (other.eastNorth != null)
+                    return false;
+            } else if (!eastNorth.equals(other.eastNorth))
+                return false;
+            if (latlon == null) {
+                if (other.latlon != null)
+                    return false;
+            } else if (!latlon.equals(other.latlon))
+                return false;
+            if (modified != other.modified)
+                return false;
+            return true;
+        }
     }
 
     /** the map of OsmPrimitives in the original state to OsmPrimitives in cloned state */
@@ -245,7 +281,7 @@ public abstract class Command extends PseudoCommand {
                     JOptionPane.YES_NO_OPTION,
                     JOptionPane.QUESTION_MESSAGE,
                     JOptionPane.YES_OPTION);
-            if(!answer)
+            if (!answer)
                 return false;
         }
         if (incomplete) {
@@ -259,10 +295,40 @@ public abstract class Command extends PseudoCommand {
                     JOptionPane.YES_NO_OPTION,
                     JOptionPane.QUESTION_MESSAGE,
                     JOptionPane.YES_OPTION);
-            if(!answer)
+            if (!answer)
                 return false;
         }
         return true;
     }
 
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((cloneMap == null) ? 0 : cloneMap.hashCode());
+        result = prime * result + ((layer == null) ? 0 : layer.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null)
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        Command other = (Command) obj;
+        if (cloneMap == null) {
+            if (other.cloneMap != null)
+                return false;
+        } else if (!cloneMap.equals(other.cloneMap))
+            return false;
+        if (layer == null) {
+            if (other.layer != null)
+                return false;
+        } else if (!layer.equals(other.layer))
+            return false;
+        return true;
+    }
 }
diff --git a/src/org/openstreetmap/josm/command/DeleteCommand.java b/src/org/openstreetmap/josm/command/DeleteCommand.java
index d60e0a0..dc7322a 100644
--- a/src/org/openstreetmap/josm/command/DeleteCommand.java
+++ b/src/org/openstreetmap/josm/command/DeleteCommand.java
@@ -9,6 +9,7 @@ import java.awt.GridBagLayout;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.EnumSet;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -34,7 +35,7 @@ import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.osm.WaySegment;
 import org.openstreetmap.josm.gui.ConditionalOptionPaneUtil;
 import org.openstreetmap.josm.gui.DefaultNameFormatter;
-import org.openstreetmap.josm.gui.actionsupport.DeleteFromRelationConfirmationDialog;
+import org.openstreetmap.josm.gui.dialogs.DeleteFromRelationConfirmationDialog;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
@@ -122,7 +123,7 @@ public class DeleteCommand extends Command {
         // Make copy and remove all references (to prevent inconsistent dataset (delete referenced) while command is executed)
         for (OsmPrimitive osm: toDelete) {
             if (osm.isDeleted())
-                throw new IllegalArgumentException(osm.toString() + " is already deleted");
+                throw new IllegalArgumentException(osm + " is already deleted");
             clonedPrimitives.put(osm, osm.save());
 
             if (osm instanceof Way) {
@@ -156,7 +157,7 @@ public class DeleteCommand extends Command {
     }
 
     private Set<OsmPrimitiveType> getTypesToDelete() {
-        Set<OsmPrimitiveType> typesToDelete = new HashSet<>();
+        Set<OsmPrimitiveType> typesToDelete = EnumSet.noneOf(OsmPrimitiveType.class);
         for (OsmPrimitive osm : toDelete) {
             typesToDelete.add(OsmPrimitiveType.from(osm));
         }
@@ -257,7 +258,7 @@ public class DeleteCommand extends Command {
             return null;
         if (!silent && !checkAndConfirmOutlyingDelete(parents, null))
             return null;
-        return new DeleteCommand(layer,parents);
+        return new DeleteCommand(layer, parents);
     }
 
     /**
@@ -367,7 +368,7 @@ public class DeleteCommand extends Command {
         if (selection == null || selection.isEmpty())
             return null;
 
-        Set<OsmPrimitive> primitivesToDelete = new HashSet<>(selection);
+        Set<OsmPrimitive> primitivesToDelete = new HashSet<OsmPrimitive>(selection);
 
         Collection<Relation> relationsToDelete = Utils.filteredCollection(primitivesToDelete, Relation.class);
         if (!relationsToDelete.isEmpty() && !silent && !confirmRelationDeletion(relationsToDelete))
@@ -403,7 +404,7 @@ public class DeleteCommand extends Command {
         if (!silent) {
             Set<RelationToChildReference> references = RelationToChildReference.getRelationToChildReferences(primitivesToDelete);
             Iterator<RelationToChildReference> it = references.iterator();
-            while(it.hasNext()) {
+            while (it.hasNext()) {
                 RelationToChildReference ref = it.next();
                 if (ref.getParent().isDeleted()) {
                     it.remove();
@@ -429,7 +430,7 @@ public class DeleteCommand extends Command {
         // build the delete command
         //
         if (!primitivesToDelete.isEmpty()) {
-            cmds.add(new DeleteCommand(layer,primitivesToDelete));
+            cmds.add(new DeleteCommand(layer, primitivesToDelete));
         }
 
         return new SequenceCommand(tr("Delete"), cmds);
@@ -439,9 +440,8 @@ public class DeleteCommand extends Command {
         if (ws.way.getNodesCount() < 3)
             return delete(layer, Collections.singleton(ws.way), false);
 
-        if (ws.way.firstNode() == ws.way.lastNode()) {
-            // If the way is circular (first and last nodes are the same),
-            // the way shouldn't be splitted
+        if (ws.way.isClosed()) {
+            // If the way is circular (first and last nodes are the same), the way shouldn't be splitted
 
             List<Node> n = new ArrayList<>();
 
@@ -454,7 +454,8 @@ public class DeleteCommand extends Command {
             return new ChangeCommand(ws.way, wnew);
         }
 
-        List<Node> n1 = new ArrayList<>(), n2 = new ArrayList<>();
+        List<Node> n1 = new ArrayList<>();
+        List<Node> n2 = new ArrayList<>();
 
         n1.addAll(ws.way.getNodes().subList(0, ws.lowerIndex + 1));
         n2.addAll(ws.way.getNodes().subList(ws.lowerIndex + 1, ws.way.getNodesCount()));
@@ -471,11 +472,12 @@ public class DeleteCommand extends Command {
             List<List<Node>> chunks = new ArrayList<>(2);
             chunks.add(n1);
             chunks.add(n2);
-            return SplitWayAction.splitWay(layer,ws.way, chunks, Collections.<OsmPrimitive>emptyList()).getCommand();
+            return SplitWayAction.splitWay(layer, ws.way, chunks, Collections.<OsmPrimitive>emptyList()).getCommand();
         }
     }
 
-    public static boolean checkAndConfirmOutlyingDelete(Collection<? extends OsmPrimitive> primitives, Collection<? extends OsmPrimitive> ignore) {
+    public static boolean checkAndConfirmOutlyingDelete(Collection<? extends OsmPrimitive> primitives,
+            Collection<? extends OsmPrimitive> ignore) {
         return Command.checkAndConfirmOutlyingOperation("delete",
                 tr("Delete confirmation"),
                 tr("You are about to delete nodes outside of the area you have downloaded."
@@ -514,4 +516,35 @@ public class DeleteCommand extends Command {
                 JOptionPane.QUESTION_MESSAGE,
                 JOptionPane.YES_OPTION);
     }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = super.hashCode();
+        result = prime * result + ((clonedPrimitives == null) ? 0 : clonedPrimitives.hashCode());
+        result = prime * result + ((toDelete == null) ? 0 : toDelete.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (!super.equals(obj))
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        DeleteCommand other = (DeleteCommand) obj;
+        if (clonedPrimitives == null) {
+            if (other.clonedPrimitives != null)
+                return false;
+        } else if (!clonedPrimitives.equals(other.clonedPrimitives))
+            return false;
+        if (toDelete == null) {
+            if (other.toDelete != null)
+                return false;
+        } else if (!toDelete.equals(other.toDelete))
+            return false;
+        return true;
+    }
 }
diff --git a/src/org/openstreetmap/josm/command/MoveCommand.java b/src/org/openstreetmap/josm/command/MoveCommand.java
index aae3996..23ab370 100644
--- a/src/org/openstreetmap/josm/command/MoveCommand.java
+++ b/src/org/openstreetmap/josm/command/MoveCommand.java
@@ -65,9 +65,10 @@ public class MoveCommand extends Command {
     /**
      * Constructs a new {@code MoveCommand} to move a node.
      * @param node The node to move
+     * @param position The new location (lat/lon)
      */
     public MoveCommand(Node node, LatLon position) {
-        this(Collections.singleton((OsmPrimitive) node), node.getEastNorth().sub(Projections.project(position)));
+        this(Collections.singleton((OsmPrimitive) node), Projections.project(position).subtract(node.getEastNorth()));
     }
 
     /**
@@ -96,11 +97,23 @@ public class MoveCommand extends Command {
         }
     }
 
+    /**
+     * Constructs a new {@code MoveCommand} to move a collection of primitives.
+     * @param objects The primitives to move
+     * @param start The starting position (northern/eastern)
+     * @param end The ending position (northern/eastern)
+     */
     public MoveCommand(Collection<OsmPrimitive> objects, EastNorth start, EastNorth end) {
         this(objects, end.getX()-start.getX(), end.getY()-start.getY());
         startEN =  start;
     }
 
+    /**
+     * Constructs a new {@code MoveCommand} to move a primitive.
+     * @param p The primitive to move
+     * @param start The starting position (northern/eastern)
+     * @param end The ending position (northern/eastern)
+     */
     public MoveCommand(OsmPrimitive p, EastNorth start, EastNorth end) {
         this(Collections.singleton(p), end.getX()-start.getX(), end.getY()-start.getY());
         startEN =  start;
@@ -222,4 +235,58 @@ public class MoveCommand extends Command {
     public Collection<Node> getParticipatingPrimitives() {
         return nodes;
     }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = super.hashCode();
+        long temp;
+        temp = Double.doubleToLongBits(backupX);
+        result = prime * result + (int) (temp ^ (temp >>> 32));
+        temp = Double.doubleToLongBits(backupY);
+        result = prime * result + (int) (temp ^ (temp >>> 32));
+        result = prime * result + ((nodes == null) ? 0 : nodes.hashCode());
+        result = prime * result + ((oldState == null) ? 0 : oldState.hashCode());
+        result = prime * result + ((startEN == null) ? 0 : startEN.hashCode());
+        temp = Double.doubleToLongBits(x);
+        result = prime * result + (int) (temp ^ (temp >>> 32));
+        temp = Double.doubleToLongBits(y);
+        result = prime * result + (int) (temp ^ (temp >>> 32));
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (!super.equals(obj))
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        MoveCommand other = (MoveCommand) obj;
+        if (Double.doubleToLongBits(backupX) != Double.doubleToLongBits(other.backupX))
+            return false;
+        if (Double.doubleToLongBits(backupY) != Double.doubleToLongBits(other.backupY))
+            return false;
+        if (nodes == null) {
+            if (other.nodes != null)
+                return false;
+        } else if (!nodes.equals(other.nodes))
+            return false;
+        if (oldState == null) {
+            if (other.oldState != null)
+                return false;
+        } else if (!oldState.equals(other.oldState))
+            return false;
+        if (startEN == null) {
+            if (other.startEN != null)
+                return false;
+        } else if (!startEN.equals(other.startEN))
+            return false;
+        if (Double.doubleToLongBits(x) != Double.doubleToLongBits(other.x))
+            return false;
+        if (Double.doubleToLongBits(y) != Double.doubleToLongBits(other.y))
+            return false;
+        return true;
+    }
 }
diff --git a/src/org/openstreetmap/josm/command/PseudoCommand.java b/src/org/openstreetmap/josm/command/PseudoCommand.java
index df5d395..ad3b821 100644
--- a/src/org/openstreetmap/josm/command/PseudoCommand.java
+++ b/src/org/openstreetmap/josm/command/PseudoCommand.java
@@ -16,11 +16,13 @@ public abstract class PseudoCommand {
 
     /**
      * Provides a description text representing this command.
+     * @return description text representing this command
      */
     public abstract String getDescriptionText();
 
     /**
      * Provides a descriptive icon of this command.
+     * @return descriptive icon of this command
      */
     public Icon getDescriptionIcon() {
         return null;
@@ -28,6 +30,7 @@ public abstract class PseudoCommand {
 
     /**
      * Return the primitives that take part in this command.
+     * @return primitives that take part in this command
      */
     public abstract Collection<? extends OsmPrimitive> getParticipatingPrimitives();
 
diff --git a/src/org/openstreetmap/josm/command/PurgeCommand.java b/src/org/openstreetmap/josm/command/PurgeCommand.java
index 7a2ba4d..8bb4220 100644
--- a/src/org/openstreetmap/josm/command/PurgeCommand.java
+++ b/src/org/openstreetmap/josm/command/PurgeCommand.java
@@ -37,7 +37,7 @@ public class PurgeCommand extends Command {
     protected List<OsmPrimitive> toPurge;
     protected Storage<PrimitiveData> makeIncompleteData;
 
-    protected Map<PrimitiveId, PrimitiveData> makeIncompleteData_byPrimId;
+    protected Map<PrimitiveId, PrimitiveData> makeIncompleteDataByPrimId;
 
     protected final ConflictCollection purgedConflicts = new ConflictCollection();
 
@@ -68,7 +68,7 @@ public class PurgeCommand extends Command {
 
     protected final void saveIncomplete(Collection<OsmPrimitive> makeIncomplete) {
         makeIncompleteData = new Storage<>(new Storage.PrimitiveIdHash());
-        makeIncompleteData_byPrimId = makeIncompleteData.foreignKey(new Storage.PrimitiveIdHash());
+        makeIncompleteDataByPrimId = makeIncompleteData.foreignKey(new Storage.PrimitiveIdHash());
 
         for (OsmPrimitive osm : makeIncomplete) {
             makeIncompleteData.add(osm.save());
@@ -83,9 +83,9 @@ public class PurgeCommand extends Command {
             /**
              * Loop from back to front to keep referential integrity.
              */
-            for (int i=toPurge.size()-1; i>=0; --i) {
+            for (int i = toPurge.size()-1; i >= 0; --i) {
                 OsmPrimitive osm = toPurge.get(i);
-                if (makeIncompleteData_byPrimId.containsKey(osm)) {
+                if (makeIncompleteDataByPrimId.containsKey(osm)) {
                     // we could simply set the incomplete flag
                     // but that would not free memory in case the
                     // user clears undo/redo buffer after purge
@@ -120,10 +120,11 @@ public class PurgeCommand extends Command {
             return;
 
         for (OsmPrimitive osm : toPurge) {
-            PrimitiveData data = makeIncompleteData_byPrimId.get(osm);
+            PrimitiveData data = makeIncompleteDataByPrimId.get(osm);
             if (data != null) {
                 if (ds.getPrimitiveById(osm) != osm)
-                    throw new AssertionError(String.format("Primitive %s has been made incomplete when purging, but it cannot be found on undo.", osm));
+                    throw new AssertionError(
+                            String.format("Primitive %s has been made incomplete when purging, but it cannot be found on undo.", osm));
                 osm.load(data);
             } else {
                 if (ds.getPrimitiveById(osm) != null)
@@ -212,7 +213,7 @@ public class PurgeCommand extends Command {
                     throw new AssertionError();
                 Integer i = numChilds.get(parent);
                 if (i != null) {
-                    numChilds.put((Relation)parent, i+1);
+                    numChilds.put((Relation) parent, i+1);
                 }
             }
         }
@@ -269,4 +270,53 @@ public class PurgeCommand extends Command {
     @Override
     public void fillModifiedData(Collection<OsmPrimitive> modified, Collection<OsmPrimitive> deleted, Collection<OsmPrimitive> added) {
     }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = super.hashCode();
+        result = prime * result + ((ds == null) ? 0 : ds.hashCode());
+        result = prime * result + ((makeIncompleteData == null) ? 0 : makeIncompleteData.hashCode());
+        result = prime * result + ((makeIncompleteDataByPrimId == null) ? 0 : makeIncompleteDataByPrimId.hashCode());
+        result = prime * result + ((purgedConflicts == null) ? 0 : purgedConflicts.hashCode());
+        result = prime * result + ((toPurge == null) ? 0 : toPurge.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (!super.equals(obj))
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        PurgeCommand other = (PurgeCommand) obj;
+        if (ds == null) {
+            if (other.ds != null)
+                return false;
+        } else if (!ds.equals(other.ds))
+            return false;
+        if (makeIncompleteData == null) {
+            if (other.makeIncompleteData != null)
+                return false;
+        } else if (!makeIncompleteData.equals(other.makeIncompleteData))
+            return false;
+        if (makeIncompleteDataByPrimId == null) {
+            if (other.makeIncompleteDataByPrimId != null)
+                return false;
+        } else if (!makeIncompleteDataByPrimId.equals(other.makeIncompleteDataByPrimId))
+            return false;
+        if (purgedConflicts == null) {
+            if (other.purgedConflicts != null)
+                return false;
+        } else if (!purgedConflicts.equals(other.purgedConflicts))
+            return false;
+        if (toPurge == null) {
+            if (other.toPurge != null)
+                return false;
+        } else if (!toPurge.equals(other.toPurge))
+            return false;
+        return true;
+    }
 }
diff --git a/src/org/openstreetmap/josm/command/RemoveNodesCommand.java b/src/org/openstreetmap/josm/command/RemoveNodesCommand.java
index 7bfc414..60df8f5 100644
--- a/src/org/openstreetmap/josm/command/RemoveNodesCommand.java
+++ b/src/org/openstreetmap/josm/command/RemoveNodesCommand.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.command;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -61,4 +61,35 @@ public class RemoveNodesCommand extends Command {
     public Icon getDescriptionIcon() {
         return ImageProvider.get(OsmPrimitiveType.WAY);
     }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = super.hashCode();
+        result = prime * result + ((rmNodes == null) ? 0 : rmNodes.hashCode());
+        result = prime * result + ((way == null) ? 0 : way.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (!super.equals(obj))
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        RemoveNodesCommand other = (RemoveNodesCommand) obj;
+        if (rmNodes == null) {
+            if (other.rmNodes != null)
+                return false;
+        } else if (!rmNodes.equals(other.rmNodes))
+            return false;
+        if (way == null) {
+            if (other.way != null)
+                return false;
+        } else if (!way.equals(other.way))
+            return false;
+        return true;
+    }
 }
diff --git a/src/org/openstreetmap/josm/command/RotateCommand.java b/src/org/openstreetmap/josm/command/RotateCommand.java
index e66c8ec..07c088c 100644
--- a/src/org/openstreetmap/josm/command/RotateCommand.java
+++ b/src/org/openstreetmap/josm/command/RotateCommand.java
@@ -5,12 +5,9 @@ import static org.openstreetmap.josm.tools.I18n.trn;
 
 import java.util.Collection;
 
-import javax.swing.Icon;
-
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
-import org.openstreetmap.josm.tools.ImageProvider;
 
 /**
  * RotateCommand rotates a number of objects around their centre.
@@ -52,7 +49,7 @@ public class RotateCommand extends TransformNodesCommand {
      * Get angle between the horizontal axis and the line formed by the pivot and give points.
      **/
     protected final double getAngle(EastNorth currentEN) {
-        if ( pivot == null )
+        if (pivot == null)
             return 0.0; // should never happen by contract
         return Math.atan2(currentEN.east()-pivot.east(), currentEN.north()-pivot.north());
     }
@@ -90,7 +87,36 @@ public class RotateCommand extends TransformNodesCommand {
     }
 
     @Override
-    public Icon getDescriptionIcon() {
-        return ImageProvider.get("data", "node");
+    public int hashCode() {
+        final int prime = 31;
+        int result = super.hashCode();
+        result = prime * result + ((pivot == null) ? 0 : pivot.hashCode());
+        long temp;
+        temp = Double.doubleToLongBits(rotationAngle);
+        result = prime * result + (int) (temp ^ (temp >>> 32));
+        temp = Double.doubleToLongBits(startAngle);
+        result = prime * result + (int) (temp ^ (temp >>> 32));
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (!super.equals(obj))
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        RotateCommand other = (RotateCommand) obj;
+        if (pivot == null) {
+            if (other.pivot != null)
+                return false;
+        } else if (!pivot.equals(other.pivot))
+            return false;
+        if (Double.doubleToLongBits(rotationAngle) != Double.doubleToLongBits(other.rotationAngle))
+            return false;
+        if (Double.doubleToLongBits(startAngle) != Double.doubleToLongBits(other.startAngle))
+            return false;
+        return true;
     }
 }
diff --git a/src/org/openstreetmap/josm/command/ScaleCommand.java b/src/org/openstreetmap/josm/command/ScaleCommand.java
index 601cd65..41f051a 100644
--- a/src/org/openstreetmap/josm/command/ScaleCommand.java
+++ b/src/org/openstreetmap/josm/command/ScaleCommand.java
@@ -5,12 +5,9 @@ import static org.openstreetmap.josm.tools.I18n.trn;
 
 import java.util.Collection;
 
-import javax.swing.Icon;
-
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
-import org.openstreetmap.josm.tools.ImageProvider;
 
 public class ScaleCommand extends TransformNodesCommand {
     /**
@@ -82,7 +79,38 @@ public class ScaleCommand extends TransformNodesCommand {
     }
 
     @Override
-    public Icon getDescriptionIcon() {
-        return ImageProvider.get("data", "node");
+    public int hashCode() {
+        final int prime = 31;
+        int result = super.hashCode();
+        result = prime * result + ((pivot == null) ? 0 : pivot.hashCode());
+        long temp;
+        temp = Double.doubleToLongBits(scalingFactor);
+        result = prime * result + (int) (temp ^ (temp >>> 32));
+        result = prime * result + ((startEN == null) ? 0 : startEN.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (!super.equals(obj))
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        ScaleCommand other = (ScaleCommand) obj;
+        if (pivot == null) {
+            if (other.pivot != null)
+                return false;
+        } else if (!pivot.equals(other.pivot))
+            return false;
+        if (Double.doubleToLongBits(scalingFactor) != Double.doubleToLongBits(other.scalingFactor))
+            return false;
+        if (startEN == null) {
+            if (other.startEN != null)
+                return false;
+        } else if (!startEN.equals(other.startEN))
+            return false;
+        return true;
     }
 }
diff --git a/src/org/openstreetmap/josm/command/SelectCommand.java b/src/org/openstreetmap/josm/command/SelectCommand.java
index 325d1b9..1466898 100644
--- a/src/org/openstreetmap/josm/command/SelectCommand.java
+++ b/src/org/openstreetmap/josm/command/SelectCommand.java
@@ -50,4 +50,35 @@ public class SelectCommand extends Command {
         int size = newSelection != null ? newSelection.size() : 0;
         return trn("Selected {0} object", "Selected {0} objects", size, size);
     }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = super.hashCode();
+        result = prime * result + ((newSelection == null) ? 0 : newSelection.hashCode());
+        result = prime * result + ((oldSelection == null) ? 0 : oldSelection.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (!super.equals(obj))
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        SelectCommand other = (SelectCommand) obj;
+        if (newSelection == null) {
+            if (other.newSelection != null)
+                return false;
+        } else if (!newSelection.equals(other.newSelection))
+            return false;
+        if (oldSelection == null) {
+            if (other.oldSelection != null)
+                return false;
+        } else if (!oldSelection.equals(other.oldSelection))
+            return false;
+        return true;
+    }
 }
diff --git a/src/org/openstreetmap/josm/command/SequenceCommand.java b/src/org/openstreetmap/josm/command/SequenceCommand.java
index 34cdf04..d14503a 100644
--- a/src/org/openstreetmap/josm/command/SequenceCommand.java
+++ b/src/org/openstreetmap/josm/command/SequenceCommand.java
@@ -49,7 +49,7 @@ public class SequenceCommand extends Command {
     }
 
     @Override public boolean executeCommand() {
-        for (int i=0; i < sequence.length; i++) {
+        for (int i = 0; i < sequence.length; i++) {
             boolean result = sequence[i].executeCommand();
             if (!result && !continueOnError) {
                 undoCommands(i-1);
@@ -122,4 +122,38 @@ public class SequenceCommand extends Command {
     protected final void setSequenceComplete(boolean sequenceComplete) {
         this.sequenceComplete = sequenceComplete;
     }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = super.hashCode();
+        result = prime * result + (continueOnError ? 1231 : 1237);
+        result = prime * result + ((name == null) ? 0 : name.hashCode());
+        result = prime * result + Arrays.hashCode(sequence);
+        result = prime * result + (sequenceComplete ? 1231 : 1237);
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (!super.equals(obj))
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        SequenceCommand other = (SequenceCommand) obj;
+        if (continueOnError != other.continueOnError)
+            return false;
+        if (name == null) {
+            if (other.name != null)
+                return false;
+        } else if (!name.equals(other.name))
+            return false;
+        if (!Arrays.equals(sequence, other.sequence))
+            return false;
+        if (sequenceComplete != other.sequenceComplete)
+            return false;
+        return true;
+    }
 }
diff --git a/src/org/openstreetmap/josm/command/TransformNodesCommand.java b/src/org/openstreetmap/josm/command/TransformNodesCommand.java
index 45b0d2b..53725a3 100644
--- a/src/org/openstreetmap/josm/command/TransformNodesCommand.java
+++ b/src/org/openstreetmap/josm/command/TransformNodesCommand.java
@@ -28,7 +28,6 @@ public abstract class TransformNodesCommand extends Command {
      */
     protected Collection<Node> nodes = new LinkedList<>();
 
-
     /**
      * List of all old states of the nodes.
      */
@@ -130,13 +129,44 @@ public abstract class TransformNodesCommand extends Command {
      * @see org.openstreetmap.josm.tools.Geometry#getCentroid(java.util.List)
      */
     public EastNorth getNodesCenter() {
-        EastNorth sum = new EastNorth(0,0);
+        EastNorth sum = new EastNorth(0, 0);
 
-        for (Node n : nodes ) {
+        for (Node n : nodes) {
             EastNorth en = n.getEastNorth();
             sum = sum.add(en.east(), en.north());
         }
         return new EastNorth(sum.east()/this.nodes.size(), sum.north()/this.nodes.size());
 
     }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = super.hashCode();
+        result = prime * result + ((nodes == null) ? 0 : nodes.hashCode());
+        result = prime * result + ((oldStates == null) ? 0 : oldStates.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (!super.equals(obj))
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        TransformNodesCommand other = (TransformNodesCommand) obj;
+        if (nodes == null) {
+            if (other.nodes != null)
+                return false;
+        } else if (!nodes.equals(other.nodes))
+            return false;
+        if (oldStates == null) {
+            if (other.oldStates != null)
+                return false;
+        } else if (!oldStates.equals(other.oldStates))
+            return false;
+        return true;
+    }
 }
diff --git a/src/org/openstreetmap/josm/command/conflict/ConflictAddCommand.java b/src/org/openstreetmap/josm/command/conflict/ConflictAddCommand.java
index 1def373..3e6a6ee 100644
--- a/src/org/openstreetmap/josm/command/conflict/ConflictAddCommand.java
+++ b/src/org/openstreetmap/josm/command/conflict/ConflictAddCommand.java
@@ -51,7 +51,7 @@ public class ConflictAddCommand extends Command {
     public boolean executeCommand() {
         try {
             getLayer().getConflicts().add(conflict);
-        } catch(IllegalStateException e) {
+        } catch (IllegalStateException e) {
             Main.error(e);
             warnBecauseOfDoubleConflict();
         }
@@ -60,7 +60,7 @@ public class ConflictAddCommand extends Command {
 
     @Override
     public void undoCommand() {
-        if (! Main.map.mapView.hasLayer(getLayer())) {
+        if (!Main.map.mapView.hasLayer(getLayer())) {
             Main.warn(tr("Layer ''{0}'' does not exist any more. Cannot remove conflict for object ''{1}''.",
                     getLayer().getName(),
                     conflict.getMy().getDisplayName(DefaultNameFormatter.getInstance())
@@ -85,4 +85,29 @@ public class ConflictAddCommand extends Command {
     public Icon getDescriptionIcon() {
         return ImageProvider.get(conflict.getMy().getDisplayType());
     }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = super.hashCode();
+        result = prime * result + ((conflict == null) ? 0 : conflict.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (!super.equals(obj))
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        ConflictAddCommand other = (ConflictAddCommand) obj;
+        if (conflict == null) {
+            if (other.conflict != null)
+                return false;
+        } else if (!conflict.equals(other.conflict))
+            return false;
+        return true;
+    }
 }
diff --git a/src/org/openstreetmap/josm/command/conflict/ConflictResolveCommand.java b/src/org/openstreetmap/josm/command/conflict/ConflictResolveCommand.java
index 1dc5529..d83504d 100644
--- a/src/org/openstreetmap/josm/command/conflict/ConflictResolveCommand.java
+++ b/src/org/openstreetmap/josm/command/conflict/ConflictResolveCommand.java
@@ -44,7 +44,7 @@ public abstract class ConflictResolveCommand extends Command {
      * @param c the remembered conflict
      */
     protected void rememberConflict(Conflict<?> c) {
-        if (! resolvedConflicts.hasConflictForMy(c.getMy())) {
+        if (!resolvedConflicts.hasConflictForMy(c.getMy())) {
             resolvedConflicts.add(c);
         }
     }
@@ -56,7 +56,7 @@ public abstract class ConflictResolveCommand extends Command {
      */
     protected void reconstituteConflicts() {
         OsmDataLayer editLayer = getLayer();
-        for(Conflict<?> c : resolvedConflicts) {
+        for (Conflict<?> c : resolvedConflicts) {
             if (!editLayer.getConflicts().hasConflictForMy(c.getMy())) {
                 editLayer.getConflicts().add(c);
             }
@@ -67,7 +67,7 @@ public abstract class ConflictResolveCommand extends Command {
     public void undoCommand() {
         super.undoCommand();
 
-        if (! Main.map.mapView.hasLayer(getLayer())) {
+        if (!Main.map.mapView.hasLayer(getLayer())) {
             Main.warn(tr("Cannot undo command ''{0}'' because layer ''{1}'' is not present any more",
                     this.toString(),
                     getLayer().toString()
@@ -78,4 +78,29 @@ public abstract class ConflictResolveCommand extends Command {
         Main.map.mapView.setActiveLayer(getLayer());
         reconstituteConflicts();
     }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = super.hashCode();
+        result = prime * result + ((resolvedConflicts == null) ? 0 : resolvedConflicts.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (!super.equals(obj))
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        ConflictResolveCommand other = (ConflictResolveCommand) obj;
+        if (resolvedConflicts == null) {
+            if (other.resolvedConflicts != null)
+                return false;
+        } else if (!resolvedConflicts.equals(other.resolvedConflicts))
+            return false;
+        return true;
+    }
 }
diff --git a/src/org/openstreetmap/josm/command/conflict/CoordinateConflictResolveCommand.java b/src/org/openstreetmap/josm/command/conflict/CoordinateConflictResolveCommand.java
index 423eba9..258b500 100644
--- a/src/org/openstreetmap/josm/command/conflict/CoordinateConflictResolveCommand.java
+++ b/src/org/openstreetmap/josm/command/conflict/CoordinateConflictResolveCommand.java
@@ -48,23 +48,20 @@ public class CoordinateConflictResolveCommand extends ConflictResolveCommand {
 
     @Override
     public boolean executeCommand() {
-        // remember the current state of modified primitives, i.e. of
-        // OSM primitive 'my'
-        //
+        // remember the current state of modified primitives, i.e. of OSM primitive 'my'
         super.executeCommand();
 
         if (decision.equals(MergeDecisionType.KEEP_MINE)) {
             // do nothing
         } else if (decision.equals(MergeDecisionType.KEEP_THEIR)) {
-            Node my = (Node)conflict.getMy();
-            Node their = (Node)conflict.getTheir();
+            Node my = (Node) conflict.getMy();
+            Node their = (Node) conflict.getTheir();
             my.setCoor(their.getCoor());
         } else
             // should not happen
             throw new IllegalStateException(tr("Cannot resolve undecided conflict."));
 
         // remember the layer this command was applied to
-        //
         rememberConflict(conflict);
 
         return true;
@@ -75,4 +72,32 @@ public class CoordinateConflictResolveCommand extends ConflictResolveCommand {
             Collection<OsmPrimitive> added) {
         modified.add(conflict.getMy());
     }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = super.hashCode();
+        result = prime * result + ((conflict == null) ? 0 : conflict.hashCode());
+        result = prime * result + ((decision == null) ? 0 : decision.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (!super.equals(obj))
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        CoordinateConflictResolveCommand other = (CoordinateConflictResolveCommand) obj;
+        if (conflict == null) {
+            if (other.conflict != null)
+                return false;
+        } else if (!conflict.equals(other.conflict))
+            return false;
+        if (decision != other.decision)
+            return false;
+        return true;
+    }
 }
diff --git a/src/org/openstreetmap/josm/command/conflict/DeletedStateConflictResolveCommand.java b/src/org/openstreetmap/josm/command/conflict/DeletedStateConflictResolveCommand.java
index 12bc0a4..459093c 100644
--- a/src/org/openstreetmap/josm/command/conflict/DeletedStateConflictResolveCommand.java
+++ b/src/org/openstreetmap/josm/command/conflict/DeletedStateConflictResolveCommand.java
@@ -87,4 +87,32 @@ public class DeletedStateConflictResolveCommand extends ConflictResolveCommand {
         modified.add(conflict.getMy());
         modified.addAll(conflict.getMy().getReferrers());
     }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = super.hashCode();
+        result = prime * result + ((conflict == null) ? 0 : conflict.hashCode());
+        result = prime * result + ((decision == null) ? 0 : decision.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (!super.equals(obj))
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        DeletedStateConflictResolveCommand other = (DeletedStateConflictResolveCommand) obj;
+        if (conflict == null) {
+            if (other.conflict != null)
+                return false;
+        } else if (!conflict.equals(other.conflict))
+            return false;
+        if (decision != other.decision)
+            return false;
+        return true;
+    }
 }
diff --git a/src/org/openstreetmap/josm/command/conflict/ModifiedConflictResolveCommand.java b/src/org/openstreetmap/josm/command/conflict/ModifiedConflictResolveCommand.java
index fccda21..767d131 100644
--- a/src/org/openstreetmap/josm/command/conflict/ModifiedConflictResolveCommand.java
+++ b/src/org/openstreetmap/josm/command/conflict/ModifiedConflictResolveCommand.java
@@ -39,7 +39,7 @@ public class ModifiedConflictResolveCommand extends ConflictResolveCommand {
         case WAY: msg = marktr("Set the ''modified'' flag for way {0}"); break;
         case RELATION: msg = marktr("Set the ''modified'' flag for relation {0}"); break;
         }
-        return tr(msg,conflict.getMy().getId());
+        return tr(msg, conflict.getMy().getId());
     }
 
     @Override
@@ -63,4 +63,29 @@ public class ModifiedConflictResolveCommand extends ConflictResolveCommand {
             Collection<OsmPrimitive> added) {
         modified.add(conflict.getMy());
     }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = super.hashCode();
+        result = prime * result + ((conflict == null) ? 0 : conflict.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (!super.equals(obj))
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        ModifiedConflictResolveCommand other = (ModifiedConflictResolveCommand) obj;
+        if (conflict == null) {
+            if (other.conflict != null)
+                return false;
+        } else if (!conflict.equals(other.conflict))
+            return false;
+        return true;
+    }
 }
diff --git a/src/org/openstreetmap/josm/command/conflict/RelationMemberConflictResolverCommand.java b/src/org/openstreetmap/josm/command/conflict/RelationMemberConflictResolverCommand.java
index 483b57c..3875c73 100644
--- a/src/org/openstreetmap/josm/command/conflict/RelationMemberConflictResolverCommand.java
+++ b/src/org/openstreetmap/josm/command/conflict/RelationMemberConflictResolverCommand.java
@@ -73,7 +73,7 @@ public class RelationMemberConflictResolverCommand extends ConflictResolveComman
     @Override
     public void undoCommand() {
         OsmDataLayer layer = getLayer();
-        if (! Main.map.mapView.hasLayer(layer)) {
+        if (!Main.map.mapView.hasLayer(layer)) {
             Main.warn(tr("Cannot undo command ''{0}'' because layer ''{1}'' is not present any more",
                     this.toString(),
                     layer.toString()
@@ -91,7 +91,44 @@ public class RelationMemberConflictResolverCommand extends ConflictResolveComman
         // restore a conflict if necessary
         //
         if (!editLayer.getConflicts().hasConflictForMy(my)) {
-            editLayer.getConflicts().add(my,their);
+            editLayer.getConflicts().add(my, their);
         }
     }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = super.hashCode();
+        result = prime * result + ((mergedMembers == null) ? 0 : mergedMembers.hashCode());
+        result = prime * result + ((my == null) ? 0 : my.hashCode());
+        result = prime * result + ((their == null) ? 0 : their.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (!super.equals(obj))
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        RelationMemberConflictResolverCommand other = (RelationMemberConflictResolverCommand) obj;
+        if (mergedMembers == null) {
+            if (other.mergedMembers != null)
+                return false;
+        } else if (!mergedMembers.equals(other.mergedMembers))
+            return false;
+        if (my == null) {
+            if (other.my != null)
+                return false;
+        } else if (!my.equals(other.my))
+            return false;
+        if (their == null) {
+            if (other.their != null)
+                return false;
+        } else if (!their.equals(other.their))
+            return false;
+        return true;
+    }
 }
diff --git a/src/org/openstreetmap/josm/command/conflict/TagConflictResolveCommand.java b/src/org/openstreetmap/josm/command/conflict/TagConflictResolveCommand.java
index 6932e28..8d63078 100644
--- a/src/org/openstreetmap/josm/command/conflict/TagConflictResolveCommand.java
+++ b/src/org/openstreetmap/josm/command/conflict/TagConflictResolveCommand.java
@@ -57,13 +57,16 @@ public class TagConflictResolveCommand extends ConflictResolveCommand {
         switch (OsmPrimitiveType.from(conflict.getMy())) {
             case NODE:
                 /* for correct i18n of plural forms - see #9110 */
-                return trn("Resolve {0} tag conflict in node {1}", "Resolve {0} tag conflicts in node {1}", getNumDecidedConflicts(), getNumDecidedConflicts(), conflict.getMy().getId());
+                return trn("Resolve {0} tag conflict in node {1}", "Resolve {0} tag conflicts in node {1}",
+                        getNumDecidedConflicts(), getNumDecidedConflicts(), conflict.getMy().getId());
             case WAY:
                 /* for correct i18n of plural forms - see #9110 */
-                return trn("Resolve {0} tag conflict in way {1}", "Resolve {0} tag conflicts in way {1}", getNumDecidedConflicts(), getNumDecidedConflicts(), conflict.getMy().getId());
+                return trn("Resolve {0} tag conflict in way {1}", "Resolve {0} tag conflicts in way {1}",
+                        getNumDecidedConflicts(), getNumDecidedConflicts(), conflict.getMy().getId());
             case RELATION:
                 /* for correct i18n of plural forms - see #9110 */
-                return trn("Resolve {0} tag conflict in relation {1}", "Resolve {0} tag conflicts in relation {1}", getNumDecidedConflicts(), getNumDecidedConflicts(), conflict.getMy().getId());
+                return trn("Resolve {0} tag conflict in relation {1}", "Resolve {0} tag conflicts in relation {1}",
+                        getNumDecidedConflicts(), getNumDecidedConflicts(), conflict.getMy().getId());
         }
         return "";
     }
@@ -83,7 +86,7 @@ public class TagConflictResolveCommand extends ConflictResolveCommand {
         // apply the merge decisions to OSM primitive 'my'
         //
         for (TagMergeItem item: mergeItems) {
-            if (! item.getMergeDecision().equals(MergeDecisionType.UNDECIDED)) {
+            if (!item.getMergeDecision().equals(MergeDecisionType.UNDECIDED)) {
                 item.applyToMyPrimitive(conflict.getMy());
             }
         }
@@ -96,4 +99,35 @@ public class TagConflictResolveCommand extends ConflictResolveCommand {
             Collection<OsmPrimitive> added) {
         modified.add(conflict.getMy());
     }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = super.hashCode();
+        result = prime * result + ((conflict == null) ? 0 : conflict.hashCode());
+        result = prime * result + ((mergeItems == null) ? 0 : mergeItems.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (!super.equals(obj))
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        TagConflictResolveCommand other = (TagConflictResolveCommand) obj;
+        if (conflict == null) {
+            if (other.conflict != null)
+                return false;
+        } else if (!conflict.equals(other.conflict))
+            return false;
+        if (mergeItems == null) {
+            if (other.mergeItems != null)
+                return false;
+        } else if (!mergeItems.equals(other.mergeItems))
+            return false;
+        return true;
+    }
 }
diff --git a/src/org/openstreetmap/josm/command/conflict/VersionConflictResolveCommand.java b/src/org/openstreetmap/josm/command/conflict/VersionConflictResolveCommand.java
index f9666de..4016d78 100644
--- a/src/org/openstreetmap/josm/command/conflict/VersionConflictResolveCommand.java
+++ b/src/org/openstreetmap/josm/command/conflict/VersionConflictResolveCommand.java
@@ -55,7 +55,7 @@ public class VersionConflictResolveCommand extends ConflictResolveCommand {
             long theirVersion = conflict.getTheir().getVersion();
             conflict.getMy().setOsmId(
                     conflict.getMy().getId(),
-                    (int)Math.max(myVersion, theirVersion)
+                    (int) Math.max(myVersion, theirVersion)
             );
             // update visiblity state
             if (theirVersion >= myVersion) {
@@ -72,4 +72,29 @@ public class VersionConflictResolveCommand extends ConflictResolveCommand {
             Collection<OsmPrimitive> added) {
         modified.add(conflict.getMy());
     }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = super.hashCode();
+        result = prime * result + ((conflict == null) ? 0 : conflict.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (!super.equals(obj))
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        VersionConflictResolveCommand other = (VersionConflictResolveCommand) obj;
+        if (conflict == null) {
+            if (other.conflict != null)
+                return false;
+        } else if (!conflict.equals(other.conflict))
+            return false;
+        return true;
+    }
 }
diff --git a/src/org/openstreetmap/josm/command/conflict/WayNodesConflictResolverCommand.java b/src/org/openstreetmap/josm/command/conflict/WayNodesConflictResolverCommand.java
index 80fa9b3..2c95656 100644
--- a/src/org/openstreetmap/josm/command/conflict/WayNodesConflictResolverCommand.java
+++ b/src/org/openstreetmap/josm/command/conflict/WayNodesConflictResolverCommand.java
@@ -57,7 +57,7 @@ public class WayNodesConflictResolverCommand extends ConflictResolveCommand {
         // replace the list of nodes of 'my' way by the list of merged nodes
         //
         for (Node n:mergedNodeList) {
-            if (! getLayer().data.getNodes().contains(n)) {
+            if (!getLayer().data.getNodes().contains(n)) {
                 Main.warn(tr("Main dataset does not include node {0}", n.toString()));
             }
         }
@@ -71,4 +71,35 @@ public class WayNodesConflictResolverCommand extends ConflictResolveCommand {
             Collection<OsmPrimitive> added) {
         modified.add(conflict.getMy());
     }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = super.hashCode();
+        result = prime * result + ((conflict == null) ? 0 : conflict.hashCode());
+        result = prime * result + ((mergedNodeList == null) ? 0 : mergedNodeList.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (!super.equals(obj))
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        WayNodesConflictResolverCommand other = (WayNodesConflictResolverCommand) obj;
+        if (conflict == null) {
+            if (other.conflict != null)
+                return false;
+        } else if (!conflict.equals(other.conflict))
+            return false;
+        if (mergedNodeList == null) {
+            if (other.mergedNodeList != null)
+                return false;
+        } else if (!mergedNodeList.equals(other.mergedNodeList))
+            return false;
+        return true;
+    }
 }
diff --git a/src/org/openstreetmap/josm/corrector/CorrectionTable.java b/src/org/openstreetmap/josm/corrector/CorrectionTable.java
index b6d372e..7e94b0f 100644
--- a/src/org/openstreetmap/josm/corrector/CorrectionTable.java
+++ b/src/org/openstreetmap/josm/corrector/CorrectionTable.java
@@ -25,7 +25,7 @@ public abstract class CorrectionTable<T extends CorrectionTableModel<?>>
             Font f = getFont();
             setFont(new Font(f.getName(), f.getStyle() | Font.BOLD, f.getSize()));
 
-            setText((String)value);
+            setText((String) value);
 
             return this;
         }
@@ -58,7 +58,6 @@ public abstract class CorrectionTable<T extends CorrectionTableModel<?>>
 
     @SuppressWarnings("unchecked")
     public T getCorrectionTableModel() {
-        return (T)getModel();
+        return (T) getModel();
     }
-
 }
diff --git a/src/org/openstreetmap/josm/corrector/CorrectionTableModel.java b/src/org/openstreetmap/josm/corrector/CorrectionTableModel.java
index fe2cc58..3c52f15 100644
--- a/src/org/openstreetmap/josm/corrector/CorrectionTableModel.java
+++ b/src/org/openstreetmap/josm/corrector/CorrectionTableModel.java
@@ -25,7 +25,9 @@ public abstract class CorrectionTableModel<C extends Correction> extends Abstrac
     public abstract int getColumnCount();
 
     protected abstract boolean isBoldCell(int row, int column);
+
     public abstract String getCorrectionColumnName(int colIndex);
+
     public abstract Object getCorrectionValueAt(int rowIndex, int colIndex);
 
     public List<C> getCorrections() {
@@ -68,7 +70,7 @@ public abstract class CorrectionTableModel<C extends Correction> extends Abstrac
     @Override
     public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
         if (columnIndex == applyColumn && aValue instanceof Boolean)
-            apply[rowIndex] = (Boolean)aValue;
+            apply[rowIndex] = (Boolean) aValue;
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/corrector/ReverseWayNoTagCorrector.java b/src/org/openstreetmap/josm/corrector/ReverseWayNoTagCorrector.java
index dee6353..720b741 100644
--- a/src/org/openstreetmap/josm/corrector/ReverseWayNoTagCorrector.java
+++ b/src/org/openstreetmap/josm/corrector/ReverseWayNoTagCorrector.java
@@ -38,6 +38,7 @@ public final class ReverseWayNoTagCorrector {
             new Tag("barrier", "guard_rail"),
             new Tag("barrier", "kerb"),
             new Tag("barrier", "retaining_wall"),
+            new Tag("man_made", "embankment"),
             new Tag("waterway", "stream"),
             new Tag("waterway", "river"),
             new Tag("waterway", "ditch"),
@@ -50,7 +51,7 @@ public final class ReverseWayNoTagCorrector {
      * @param way The way to look for
      * @return tags that imply a semantic meaning from <code>way</code> direction and cannot be changed
      */
-    public static final TagCollection getDirectionalTags(Way way) {
+    public static TagCollection getDirectionalTags(Way way) {
         return directionalTags.intersect(TagCollection.from(way));
     }
 
diff --git a/src/org/openstreetmap/josm/corrector/ReverseWayTagCorrector.java b/src/org/openstreetmap/josm/corrector/ReverseWayTagCorrector.java
index e95f08b..eff5645 100644
--- a/src/org/openstreetmap/josm/corrector/ReverseWayTagCorrector.java
+++ b/src/org/openstreetmap/josm/corrector/ReverseWayTagCorrector.java
@@ -7,6 +7,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -32,11 +33,11 @@ public class ReverseWayTagCorrector extends TagCorrector<Way> {
 
     private static final String SEPARATOR = "[:_]";
 
-    private static final Pattern getPatternFor(String s) {
+    private static Pattern getPatternFor(String s) {
         return getPatternFor(s, false);
     }
 
-    private static final Pattern getPatternFor(String s, boolean exactMatch) {
+    private static Pattern getPatternFor(String s, boolean exactMatch) {
         if (exactMatch) {
             return Pattern.compile("(^)(" + s + ")($)");
         } else {
@@ -74,12 +75,12 @@ public class ReverseWayTagCorrector extends TagCorrector<Way> {
             Matcher m = pattern.matcher(text);
 
             if (m.lookingAt()) {
-                String leftRight = m.group(2).toLowerCase();
+                String leftRight = m.group(2).toLowerCase(Locale.ENGLISH);
 
                 StringBuilder result = new StringBuilder();
-                result.append(text.substring(0, m.start(2)));
-                result.append(leftRight.equals(a) ? b : a);
-                result.append(text.substring(m.end(2)));
+                result.append(text.substring(0, m.start(2)))
+                      .append(leftRight.equals(a) ? b : a)
+                      .append(text.substring(m.end(2)));
 
                 return result.toString();
             }
@@ -102,7 +103,7 @@ public class ReverseWayTagCorrector extends TagCorrector<Way> {
          * @param tag The tag to reverse
          * @return The reversed tag (is equal to <code>tag</code> if no change is needed)
          */
-        public static final Tag apply(final Tag tag) {
+        public static Tag apply(final Tag tag) {
             return apply(tag.getKey(), tag.getValue());
         }
 
@@ -112,7 +113,7 @@ public class ReverseWayTagCorrector extends TagCorrector<Way> {
          * @param value The tag value
          * @return The reversed tag (is equal to <code>key=value</code> if no change is needed)
          */
-        public static final Tag apply(final String key, final String value) {
+        public static Tag apply(final String key, final String value) {
             String newKey = key;
             String newValue = value;
 
@@ -167,7 +168,7 @@ public class ReverseWayTagCorrector extends TagCorrector<Way> {
     /**
      * Tests whether way can be reversed without semantic change, i.e., whether tags have to be changed.
      * Looks for keys like oneway, oneway:bicycle, cycleway:right:oneway, left/right.
-     * @param way
+     * @param way way to test
      * @return false if tags should be changed to keep semantic, true otherwise.
      */
     public static boolean isReversible(Way way) {
@@ -231,10 +232,10 @@ public class ReverseWayTagCorrector extends TagCorrector<Way> {
 
         Collection<OsmPrimitive> referrers = oldway.getReferrers();
         for (OsmPrimitive referrer: referrers) {
-            if (! (referrer instanceof Relation)) {
+            if (!(referrer instanceof Relation)) {
                 continue;
             }
-            Relation relation = (Relation)referrer;
+            Relation relation = (Relation) referrer;
             int position = 0;
             for (RelationMember member : relation.getMembers()) {
                 if (!member.getMember().hasEqualSemanticAttributes(oldway)
diff --git a/src/org/openstreetmap/josm/corrector/TagCorrector.java b/src/org/openstreetmap/josm/corrector/TagCorrector.java
index b9ec15c..7b98a20 100644
--- a/src/org/openstreetmap/josm/corrector/TagCorrector.java
+++ b/src/org/openstreetmap/josm/corrector/TagCorrector.java
@@ -11,8 +11,8 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 import java.util.Map.Entry;
+import java.util.Set;
 
 import javax.swing.JLabel;
 import javax.swing.JOptionPane;
@@ -114,10 +114,12 @@ public abstract class TagCorrector<P extends OsmPrimitive> {
                         JLabel.LEFT
                 );
                 p.add(primitiveLabel, GBC.eol());
+                rolesLabel.setLabelFor(primitiveLabel);
 
                 final RoleCorrectionTable table = new RoleCorrectionTable(roleCorrections);
                 final JScrollPane scrollPane = new JScrollPane(table);
                 p.add(scrollPane, GBC.eop().fill(GBC.HORIZONTAL));
+                primitiveLabel.setLabelFor(table);
 
                 roleTableMap.put(primitive, table);
             }
@@ -141,11 +143,11 @@ public abstract class TagCorrector<P extends OsmPrimitive> {
                     // create the clone
                     OsmPrimitive clone = null;
                     if (primitive instanceof Way) {
-                        clone = new Way((Way)primitive);
+                        clone = new Way((Way) primitive);
                     } else if (primitive instanceof Node) {
-                        clone = new Node((Node)primitive);
+                        clone = new Node((Node) primitive);
                     } else if (primitive instanceof Relation) {
-                        clone = new Relation((Relation)primitive);
+                        clone = new Relation((Relation) primitive);
                     } else
                         throw new AssertionError();
 
@@ -177,7 +179,8 @@ public abstract class TagCorrector<P extends OsmPrimitive> {
                     for (int i = 0; i < roleCorrections.size(); i++) {
                         RoleCorrection roleCorrection = roleCorrections.get(i);
                         if (roleTableMap.get(primitive).getCorrectionTableModel().getApply(i)) {
-                            commands.add(new ChangeRelationMemberRoleCommand(roleCorrection.relation, roleCorrection.position, roleCorrection.newRole));
+                            commands.add(new ChangeRelationMemberRoleCommand(
+                                    roleCorrection.relation, roleCorrection.position, roleCorrection.newRole));
                         }
                     }
                 }
diff --git a/src/org/openstreetmap/josm/data/APIDataSet.java b/src/org/openstreetmap/josm/data/APIDataSet.java
index 02b777b..4a07e77 100644
--- a/src/org/openstreetmap/josm/data/APIDataSet.java
+++ b/src/org/openstreetmap/josm/data/APIDataSet.java
@@ -216,7 +216,7 @@ public class APIDataSet {
      *
      * @throws CyclicUploadDependencyException if a cyclic dependency is detected
      */
-    public void adjustRelationUploadOrder() throws CyclicUploadDependencyException{
+    public void adjustRelationUploadOrder() throws CyclicUploadDependencyException {
         List<OsmPrimitive> newToAdd = new LinkedList<>();
         newToAdd.addAll(Utils.filteredCollection(toAdd, Node.class));
         newToAdd.addAll(Utils.filteredCollection(toAdd, Way.class));
@@ -282,14 +282,14 @@ public class APIDataSet {
 
         public final void build(Collection<Relation> relations) {
             this.relations = new HashSet<>();
-            for(Relation relation: relations) {
+            for (Relation relation: relations) {
                 if (newOrUndeleted ? !relation.isNewOrUndeleted() : !relation.isDeleted()) {
                     continue;
                 }
                 this.relations.add(relation);
                 for (RelationMember m: relation.getMembers()) {
                     if (m.isRelation() && (newOrUndeleted ? m.getMember().isNewOrUndeleted() : m.getMember().isDeleted())) {
-                        addDependency(relation, (Relation)m.getMember());
+                        addDependency(relation, (Relation) m.getMember());
                     }
                 }
             }
@@ -308,7 +308,7 @@ public class APIDataSet {
             getChildren(relation).add(child);
         }
 
-        protected void visit(Stack<Relation> path, Relation current) throws CyclicUploadDependencyException{
+        protected void visit(Stack<Relation> path, Relation current) throws CyclicUploadDependencyException {
             if (path.contains(current)) {
                 path.push(current);
                 throw new CyclicUploadDependencyException(path);
@@ -317,7 +317,7 @@ public class APIDataSet {
                 path.push(current);
                 visited.add(current);
                 for (Relation dependent : getChildren(current)) {
-                    visit(path,dependent);
+                    visit(path, dependent);
                 }
                 uploadOrder.add(current);
                 path.pop();
@@ -337,7 +337,7 @@ public class APIDataSet {
                     new Comparator<Relation>() {
                         @Override
                         public int compare(Relation o1, Relation o2) {
-                            return Integer.valueOf(uploadOrder.indexOf(o1)).compareTo(uploadOrder.indexOf(o2));
+                            return Integer.compare(uploadOrder.indexOf(o1), uploadOrder.indexOf(o2));
                         }
                     }
                     );
diff --git a/src/org/openstreetmap/josm/data/AutosaveTask.java b/src/org/openstreetmap/josm/data/AutosaveTask.java
index 3bab840..9f4eb01 100644
--- a/src/org/openstreetmap/josm/data/AutosaveTask.java
+++ b/src/org/openstreetmap/josm/data/AutosaveTask.java
@@ -58,7 +58,7 @@ import org.openstreetmap.josm.io.OsmImporter;
  */
 public class AutosaveTask extends TimerTask implements LayerChangeListener, Listener {
 
-    private static final char[] ILLEGAL_CHARACTERS = { '/', '\n', '\r', '\t', '\0', '\f', '`', '?', '*', '\\', '<', '>', '|', '\"', ':' };
+    private static final char[] ILLEGAL_CHARACTERS = {'/', '\n', '\r', '\t', '\0', '\f', '`', '?', '*', '\\', '<', '>', '|', '\"', ':'};
     private static final String AUTOSAVE_DIR = "autosave";
     private static final String DELETED_LAYERS_DIR = "autosave/deleted_layers";
 
@@ -196,7 +196,10 @@ public class AutosaveTask extends TimerTask implements LayerChangeListener, List
             if (!oldFile.delete()) {
                 Main.warn(tr("Unable to delete old backup file {0}", oldFile.getAbsolutePath()));
             } else {
-                getPidFile(oldFile).delete();
+                File pidFile = getPidFile(oldFile);
+                if (!pidFile.delete()) {
+                    Main.warn(tr("Unable to delete old backup file {0}", pidFile.getAbsolutePath()));
+                }
             }
         }
     }
@@ -286,7 +289,7 @@ public class AutosaveTask extends TimerTask implements LayerChangeListener, List
         changedDatasets.add(event.getDataset());
     }
 
-    private final File getPidFile(File osmFile) {
+    private File getPidFile(File osmFile) {
         return new File(autosaveDir, osmFile.getName().replaceFirst("[.][^.]+$", ".pid"));
     }
 
diff --git a/src/org/openstreetmap/josm/data/Bounds.java b/src/org/openstreetmap/josm/data/Bounds.java
index 209e08d..f132a67 100644
--- a/src/org/openstreetmap/josm/data/Bounds.java
+++ b/src/org/openstreetmap/josm/data/Bounds.java
@@ -142,11 +142,11 @@ public class Bounds {
         }
     }
 
-    public Bounds(double [] coords) {
+    public Bounds(double[] coords) {
         this(coords, true);
     }
 
-    public Bounds(double [] coords, boolean roundToOsmPrecision) {
+    public Bounds(double[] coords, boolean roundToOsmPrecision) {
         CheckParameterUtil.ensureParameterNotNull(coords, "coords");
         if (coords.length != 4)
             throw new IllegalArgumentException(MessageFormat.format("Expected array of length 4, got {0}", coords.length));
@@ -175,12 +175,13 @@ public class Bounds {
         CheckParameterUtil.ensureParameterNotNull(asString, "asString");
         String[] components = asString.split(separator);
         if (components.length != 4)
-            throw new IllegalArgumentException(MessageFormat.format("Exactly four doubles expected in string, got {0}: {1}", components.length, asString));
+            throw new IllegalArgumentException(
+                    MessageFormat.format("Exactly four doubles expected in string, got {0}: {1}", components.length, asString));
         double[] values = new double[4];
-        for (int i=0; i<4; i++) {
+        for (int i = 0; i < 4; i++) {
             try {
                 values[i] = Double.parseDouble(components[i]);
-            } catch(NumberFormatException e) {
+            } catch (NumberFormatException e) {
                 throw new IllegalArgumentException(MessageFormat.format("Illegal double value ''{0}''", components[i]), e);
             }
         }
@@ -279,7 +280,7 @@ public class Bounds {
         if (crosses180thMeridian()) {
             double lat = (minLat + maxLat) / 2;
             double lon = (minLon + maxLon - 360.0) / 2;
-            if (lon < -180.0){
+            if (lon < -180.0) {
                 lon += 360.0;
             }
             return new LatLon(lat, lon);
diff --git a/src/org/openstreetmap/josm/data/CustomConfigurator.java b/src/org/openstreetmap/josm/data/CustomConfigurator.java
index eb76773..33dd90f 100644
--- a/src/org/openstreetmap/josm/data/CustomConfigurator.java
+++ b/src/org/openstreetmap/josm/data/CustomConfigurator.java
@@ -18,6 +18,7 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
@@ -74,7 +75,7 @@ public final class CustomConfigurator {
 
     public static void log(String s) {
         summary.append(s);
-        summary.append("\n");
+        summary.append('\n');
     }
 
     public static String getLog() {
@@ -91,13 +92,13 @@ public final class CustomConfigurator {
      * @param prefs - arbitrary Preferences object to modify by script
      */
     public static void readXML(final File file, final Preferences prefs) {
-        synchronized(CustomConfigurator.class) {
-            busy=true;
+        synchronized (CustomConfigurator.class) {
+            busy = true;
         }
         new XMLCommandProcessor(prefs).openAndReadXML(file);
-        synchronized(CustomConfigurator.class) {
+        synchronized (CustomConfigurator.class) {
             CustomConfigurator.class.notifyAll();
-            busy=false;
+            busy = false;
         }
     }
 
@@ -157,7 +158,7 @@ public final class CustomConfigurator {
      * @param text - message to display, HTML allowed
      */
     public static void messageBox(String type, String text) {
-        if (type==null || type.isEmpty()) type="plain";
+        if (type == null || type.isEmpty()) type = "plain";
 
         switch (type.charAt(0)) {
             case 'i': JOptionPane.showMessageDialog(Main.parent, text, tr("Information"), JOptionPane.INFORMATION_MESSAGE); break;
@@ -176,18 +177,20 @@ public final class CustomConfigurator {
      */
     public static int askForOption(String text, String opts) {
         Integer answer;
-        if (opts.length()>0) {
+        if (!opts.isEmpty()) {
             String[] options = opts.split(";");
-            answer = JOptionPane.showOptionDialog(Main.parent, text, "Question", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, 0);
+            answer = JOptionPane.showOptionDialog(Main.parent, text, "Question",
+                    JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, 0);
         } else {
-            answer = JOptionPane.showOptionDialog(Main.parent, text, "Question", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, null, 2);
+            answer = JOptionPane.showOptionDialog(Main.parent, text, "Question",
+                    JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, null, 2);
         }
-        if (answer==null) return -1; else return answer;
+        if (answer == null) return -1; else return answer;
     }
 
     public static String askForText(String text) {
         String s = JOptionPane.showInputDialog(Main.parent, text, tr("Enter text"), JOptionPane.QUESTION_MESSAGE);
-        if (s!=null && (s=s.trim()).length()>0) {
+        if (s != null && !(s = s.trim()).isEmpty()) {
             return s;
         } else {
             return "";
@@ -227,7 +230,8 @@ public final class CustomConfigurator {
     /**
      * Export specified preferences keys to configuration file
      * @param filename - name of file
-     * @param append - will the preferences be appended to existing ones when file is imported later. Elsewhere preferences from file will replace existing keys.
+     * @param append - will the preferences be appended to existing ones when file is imported later.
+     * Elsewhere preferences from file will replace existing keys.
      * @param keys - collection of preferences key names to save
      */
     public static void exportPreferencesKeysToFile(String filename, boolean append, Collection<String> keys) {
@@ -248,19 +252,19 @@ public final class CustomConfigurator {
         } catch (Exception ex) {
             Main.warn("Error getting preferences to save:" +ex.getMessage());
         }
-        if (root==null) return;
+        if (root == null) return;
         try {
 
             Element newRoot = exportDocument.createElement("config");
             exportDocument.appendChild(newRoot);
 
             Element prefElem = exportDocument.createElement("preferences");
-            prefElem.setAttribute("operation", append?"append":"replace");
+            prefElem.setAttribute("operation", append ? "append" : "replace");
             newRoot.appendChild(prefElem);
 
             NodeList childNodes = root.getChildNodes();
             int n = childNodes.getLength();
-            for (int i = 0; i < n ; i++) {
+            for (int i = 0; i < n; i++) {
                 Node item = childNodes.item(i);
                 if (item.getNodeType() == Node.ELEMENT_NODE) {
                     String currentKey = ((Element) item).getAttribute("key");
@@ -280,10 +284,9 @@ public final class CustomConfigurator {
         }
     }
 
-
     public static void deleteFile(String path, String base) {
         String dir = getDirectoryByAbbr(base);
-        if (dir==null) {
+        if (dir == null) {
             log("Error: Can not find base, use base=cache, base=prefs or base=plugins attribute.");
             return;
         }
@@ -317,17 +320,18 @@ public final class CustomConfigurator {
         }
     }
 
-    private static boolean busy=false;
-
+    private static boolean busy = false;
 
     public static void pluginOperation(String install, String uninstall, String delete)  {
         final List<String> installList = new ArrayList<>();
         final List<String> removeList = new ArrayList<>();
         final List<String> deleteList = new ArrayList<>();
-        Collections.addAll(installList, install.toLowerCase().split(";"));
-        Collections.addAll(removeList, uninstall.toLowerCase().split(";"));
-        Collections.addAll(deleteList, delete.toLowerCase().split(";"));
-        installList.remove("");removeList.remove("");deleteList.remove("");
+        Collections.addAll(installList, install.toLowerCase(Locale.ENGLISH).split(";"));
+        Collections.addAll(removeList, uninstall.toLowerCase(Locale.ENGLISH).split(";"));
+        Collections.addAll(deleteList, delete.toLowerCase(Locale.ENGLISH).split(";"));
+        installList.remove("");
+        removeList.remove("");
+        deleteList.remove("");
 
         if (!installList.isEmpty()) {
             log("Plugins install: "+installList);
@@ -345,48 +349,48 @@ public final class CustomConfigurator {
             public void run() {
                 if (task.isCanceled()) return;
                 synchronized (CustomConfigurator.class) {
-                try { // proceed only after all other tasks were finished
-                    while (busy) CustomConfigurator.class.wait();
-                } catch (InterruptedException ex) {
-                    Main.warn("InterruptedException while reading local plugin information");
-                }
+                    try { // proceed only after all other tasks were finished
+                        while (busy) CustomConfigurator.class.wait();
+                    } catch (InterruptedException ex) {
+                        Main.warn("InterruptedException while reading local plugin information");
+                    }
 
-                SwingUtilities.invokeLater(new Runnable() {
-                    @Override
-                    public void run() {
-                        List<PluginInformation> availablePlugins = task.getAvailablePlugins();
-                        List<PluginInformation> toInstallPlugins = new ArrayList<>();
-                        List<PluginInformation> toRemovePlugins = new ArrayList<>();
-                        List<PluginInformation> toDeletePlugins = new ArrayList<>();
-                        for (PluginInformation pi: availablePlugins) {
-                            String name = pi.name.toLowerCase();
-                            if (installList.contains(name)) toInstallPlugins.add(pi);
-                            if (removeList.contains(name)) toRemovePlugins.add(pi);
-                            if (deleteList.contains(name)) toDeletePlugins.add(pi);
-                        }
-                        if (!installList.isEmpty()) {
-                            PluginDownloadTask pluginDownloadTask = new PluginDownloadTask(Main.parent, toInstallPlugins, tr ("Installing plugins"));
-                            Main.worker.submit(pluginDownloadTask);
-                        }
-                        Collection<String> pls = new ArrayList<>(Main.pref.getCollection("plugins"));
-                        for (PluginInformation pi: toInstallPlugins) {
-                            if (!pls.contains(pi.name)) {
-                                pls.add(pi.name);
+                    SwingUtilities.invokeLater(new Runnable() {
+                        @Override
+                        public void run() {
+                            List<PluginInformation> availablePlugins = task.getAvailablePlugins();
+                            List<PluginInformation> toInstallPlugins = new ArrayList<>();
+                            List<PluginInformation> toRemovePlugins = new ArrayList<>();
+                            List<PluginInformation> toDeletePlugins = new ArrayList<>();
+                            for (PluginInformation pi: availablePlugins) {
+                                String name = pi.name.toLowerCase(Locale.ENGLISH);
+                                if (installList.contains(name)) toInstallPlugins.add(pi);
+                                if (removeList.contains(name)) toRemovePlugins.add(pi);
+                                if (deleteList.contains(name)) toDeletePlugins.add(pi);
                             }
+                            if (!installList.isEmpty()) {
+                                PluginDownloadTask pluginDownloadTask =
+                                        new PluginDownloadTask(Main.parent, toInstallPlugins, tr("Installing plugins"));
+                                Main.worker.submit(pluginDownloadTask);
+                            }
+                            Collection<String> pls = new ArrayList<>(Main.pref.getCollection("plugins"));
+                            for (PluginInformation pi: toInstallPlugins) {
+                                if (!pls.contains(pi.name)) {
+                                    pls.add(pi.name);
+                                }
+                            }
+                            for (PluginInformation pi: toRemovePlugins) {
+                                pls.remove(pi.name);
+                            }
+                            for (PluginInformation pi: toDeletePlugins) {
+                                pls.remove(pi.name);
+                                new File(Main.pref.getPluginsDirectory(), pi.name+".jar").deleteOnExit();
+                            }
+                            Main.pref.putCollection("plugins", pls);
                         }
-                        for (PluginInformation pi: toRemovePlugins) {
-                            pls.remove(pi.name);
-                        }
-                        for (PluginInformation pi: toDeletePlugins) {
-                            pls.remove(pi.name);
-                            new File(Main.pref.getPluginsDirectory(), pi.name+".jar").deleteOnExit();
-                        }
-                        Main.pref.putCollection("plugins",pls);
-                    }
-                });
-            }
+                    });
+                }
             }
-
         };
         Main.worker.submit(task);
         Main.worker.submit(r);
@@ -410,16 +414,15 @@ public final class CustomConfigurator {
         Preferences tmp = new Preferences();
         tmp.settingsMap.putAll(pref.settingsMap);
         tmp.defaultsMap.putAll(pref.defaultsMap);
-        tmp.colornames.putAll( pref.colornames );
+        tmp.colornames.putAll(pref.colornames);
 
         return tmp;
     }
 
-
     public static class XMLCommandProcessor {
 
         private Preferences mainPrefs;
-        private Map<String,Element> tasksMap = new HashMap<>();
+        private Map<String, Element> tasksMap = new HashMap<>();
 
         private boolean lastV; // last If condition result
 
@@ -429,7 +432,7 @@ public final class CustomConfigurator {
             log("-- Reading custom preferences from " + file.getAbsolutePath() + " --");
             try {
                 String fileDir = file.getParentFile().getAbsolutePath();
-                if (fileDir!=null) engine.eval("scriptDir='"+normalizeDirName(fileDir) +"';");
+                if (fileDir != null) engine.eval("scriptDir='"+normalizeDirName(fileDir) +"';");
                 try (InputStream is = new BufferedInputStream(new FileInputStream(file))) {
                     openAndReadXML(is);
                 }
@@ -557,7 +560,7 @@ public final class CustomConfigurator {
             Preferences tmpPref = readPreferencesFromDOMElement(item);
             PreferencesUtils.showPrefs(tmpPref);
 
-            if (id.length()>0) {
+            if (!id.isEmpty()) {
                 try {
                     String fragmentVar = "API.fragments['"+id+"']";
                     engine.eval(fragmentVar+"={};");
@@ -595,7 +598,7 @@ public final class CustomConfigurator {
 
             String base = evalVars(item.getAttribute("base"));
             String dir = getDirectoryByAbbr(base);
-            if (dir==null) {
+            if (dir == null) {
                 log("Error: Can not find directory to place file, use base=cache, base=prefs or base=plugins attribute.");
                 return;
             }
@@ -603,7 +606,7 @@ public final class CustomConfigurator {
             if (path.contains("..") || path.startsWith("/") || path.contains(":")) {
                 return; // some basic protection
             }
-            if (address == null || path == null || address.length() == 0 || path.length() == 0) {
+            if (address == null || path == null || address.isEmpty() || path.isEmpty()) {
                 log("Error: Please specify url=\"where to get file\" and path=\"where to place it\"");
                 return;
             }
@@ -620,7 +623,7 @@ public final class CustomConfigurator {
         private void processMsgBoxElement(Element elem) {
             String text = evalVars(elem.getAttribute("text"));
             String locText = evalVars(elem.getAttribute(LanguageInfo.getJOSMLocaleCode()+".text"));
-            if (locText!=null && locText.length()>0) text=locText;
+            if (locText != null && !locText.isEmpty()) text = locText;
 
             String type = evalVars(elem.getAttribute("type"));
             messageBox(type, text);
@@ -629,9 +632,9 @@ public final class CustomConfigurator {
         private void processAskElement(Element elem) {
             String text = evalVars(elem.getAttribute("text"));
             String locText = evalVars(elem.getAttribute(LanguageInfo.getJOSMLocaleCode()+".text"));
-            if (locText.length()>0) text=locText;
+            if (!locText.isEmpty()) text = locText;
             String var = elem.getAttribute("var");
-            if (var.isEmpty()) var="result";
+            if (var.isEmpty()) var = "result";
 
             String input = evalVars(elem.getAttribute("input"));
             if ("true".equals(input)) {
@@ -639,7 +642,7 @@ public final class CustomConfigurator {
             } else {
                 String opts = evalVars(elem.getAttribute("options"));
                 String locOpts = evalVars(elem.getAttribute(LanguageInfo.getJOSMLocaleCode()+".options"));
-                if (locOpts.length()>0) opts=locOpts;
+                if (!locOpts.isEmpty()) opts = locOpts;
                 setVar(var, String.valueOf(askForOption(text, opts)));
             }
         }
@@ -654,14 +657,14 @@ public final class CustomConfigurator {
 
         private void processIfElement(Element elem) {
             String realValue = evalVars(elem.getAttribute("test"));
-            boolean v=false;
-            if ("true".equals(realValue)) v=true; else
-            if ("fales".equals(realValue)) v=true; else
-            {
+            boolean v = false;
+            if ("true".equals(realValue) || "false".equals(realValue)) {
+                processXmlFragment(elem);
+                v = true;
+            } else {
                 log("Error: Illegal test expression in if: %s=%s\n", elem.getAttribute("test"), realValue);
             }
 
-            if (v) processXmlFragment(elem);
             lastV = v;
         }
 
@@ -674,7 +677,7 @@ public final class CustomConfigurator {
         private boolean processRunTaskElement(Element elem) {
             String taskName = elem.getAttribute("name");
             Element task = tasksMap.get(taskName);
-            if (task!=null) {
+            if (task != null) {
                 log("EXECUTING TASK "+taskName);
                 processXmlFragment(task); // process task recursively
             } else {
@@ -724,7 +727,7 @@ public final class CustomConfigurator {
 
                 xformer.transform(new DOMSource(item), out);
 
-                String fragmentWithReplacedVars= evalVars(outputWriter.toString());
+                String fragmentWithReplacedVars = evalVars(outputWriter.toString());
 
                 CharArrayReader reader = new CharArrayReader(fragmentWithReplacedVars.toCharArray());
                 tmpPref.fromXML(reader);
@@ -737,7 +740,7 @@ public final class CustomConfigurator {
 
         private String normalizeDirName(String dir) {
             String s = dir.replace("\\", "/");
-            if (s.endsWith("/")) s=s.substring(0,s.length()-1);
+            if (s.endsWith("/")) s = s.substring(0, s.length()-1);
             return s;
         }
     }
@@ -934,7 +937,9 @@ public final class CustomConfigurator {
         log("Warning: Unknown default value of %s , skipped\n", key);
         JOptionPane.showMessageDialog(
                 Main.parent,
-                tr("<html>Settings file asks to append preferences to <b>{0}</b>,<br/> but its default value is unknown at this moment.<br/> Please activate corresponding function manually and retry importing.", key),
+                tr("<html>Settings file asks to append preferences to <b>{0}</b>,<br/> "+
+                        "but its default value is unknown at this moment.<br/> " +
+                        "Please activate corresponding function manually and retry importing.", key),
                 tr("Warning"),
                 JOptionPane.WARNING_MESSAGE);
     }
@@ -954,7 +959,7 @@ public final class CustomConfigurator {
      * @param engine - JS engine to put object
      * @param tmpPref - preferences to fill from JS
      * @param varInJS - JS variable name, where preferences are stored
-     * @throws ScriptException
+     * @throws ScriptException if the evaluation fails
      */
     public static void readPrefsFromJS(ScriptEngine engine, Preferences tmpPref, String varInJS) throws ScriptException {
         String finish =
@@ -1003,11 +1008,11 @@ public final class CustomConfigurator {
         @SuppressWarnings("unchecked")
         Map<String, String> stringMap =  (Map<String, String>) engine.get("stringMap");
         @SuppressWarnings("unchecked")
-        Map<String, List<String>> listMap = (SortedMap<String, List<String>> ) engine.get("listMap");
+        Map<String, List<String>> listMap = (SortedMap<String, List<String>>) engine.get("listMap");
         @SuppressWarnings("unchecked")
         Map<String, List<Collection<String>>> listlistMap = (SortedMap<String, List<Collection<String>>>) engine.get("listlistMap");
         @SuppressWarnings("unchecked")
-        Map<String, List<Map<String, String>>> listmapMap = (SortedMap<String, List<Map<String,String>>>) engine.get("listmapMap");
+        Map<String, List<Map<String, String>>> listmapMap = (SortedMap<String, List<Map<String, String>>>) engine.get("listmapMap");
 
         tmpPref.settingsMap.clear();
 
@@ -1021,7 +1026,7 @@ public final class CustomConfigurator {
 
         for (Entry<String, List<Collection<String>>> e : listlistMap.entrySet()) {
             @SuppressWarnings("unchecked")
-            List<List<String>> value = (List)e.getValue();
+            List<List<String>> value = (List) e.getValue();
             tmp.put(e.getKey(), new ListListSetting(value));
         }
         for (Entry<String, List<Map<String, String>>> e : listmapMap.entrySet()) {
@@ -1039,9 +1044,10 @@ public final class CustomConfigurator {
      * @param tmpPref - preferences to convert
      * @param whereToPutInJS - variable name to store preferences in JS
      * @param includeDefaults - include known default values to JS objects
-     * @throws ScriptException
+     * @throws ScriptException if the evaluation fails
      */
-    public static void loadPrefsToJS(ScriptEngine engine, Preferences tmpPref, String whereToPutInJS, boolean includeDefaults) throws ScriptException {
+    public static void loadPrefsToJS(ScriptEngine engine, Preferences tmpPref, String whereToPutInJS, boolean includeDefaults)
+            throws ScriptException {
         Map<String, String> stringMap =  new TreeMap<>();
         Map<String, List<String>> listMap = new TreeMap<>();
         Map<String, List<List<String>>> listlistMap = new TreeMap<>();
diff --git a/src/org/openstreetmap/josm/data/Data.java b/src/org/openstreetmap/josm/data/Data.java
index 32bfeeb..3b51479 100644
--- a/src/org/openstreetmap/josm/data/Data.java
+++ b/src/org/openstreetmap/josm/data/Data.java
@@ -15,13 +15,13 @@ public interface Data {
      * Returns the collection of data sources.
      * @return the collection of data sources.
      */
-    public Collection<DataSource> getDataSources();
+    Collection<DataSource> getDataSources();
 
     /**
      * Returns the total area of downloaded data (the "yellow rectangles").
      * @return Area object encompassing downloaded data.
      */
-    public Area getDataSourceArea();
+    Area getDataSourceArea();
 
     /**
      * <p>Replies the list of data source bounds.</p>
@@ -35,5 +35,5 @@ public interface Data {
      * @return the list of data source bounds. An empty list, if no non-null data source
      * bounds are defined.
      */
-    public List<Bounds> getDataSourceBounds();
+    List<Bounds> getDataSourceBounds();
 }
diff --git a/src/org/openstreetmap/josm/data/Preferences.java b/src/org/openstreetmap/josm/data/Preferences.java
index a686728..701b458 100644
--- a/src/org/openstreetmap/josm/data/Preferences.java
+++ b/src/org/openstreetmap/josm/data/Preferences.java
@@ -13,6 +13,8 @@ import java.io.InputStream;
 import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
 import java.io.Reader;
+import java.io.StringReader;
+import java.io.StringWriter;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.reflect.Field;
@@ -21,6 +23,7 @@ import java.nio.file.Files;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
@@ -37,6 +40,13 @@ import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import javax.json.Json;
+import javax.json.JsonObject;
+import javax.json.JsonObjectBuilder;
+import javax.json.JsonReader;
+import javax.json.JsonString;
+import javax.json.JsonValue;
+import javax.json.JsonWriter;
 import javax.swing.JOptionPane;
 import javax.swing.UIManager;
 import javax.xml.XMLConstants;
@@ -52,6 +62,8 @@ import javax.xml.validation.Validator;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.preferences.ColorProperty;
 import org.openstreetmap.josm.io.CachedFile;
+import org.openstreetmap.josm.io.OfflineAccessException;
+import org.openstreetmap.josm.io.OnlineResource;
 import org.openstreetmap.josm.io.XmlWriter;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.ColorHelper;
@@ -182,14 +194,17 @@ public class Preferences {
         public AbstractSetting(T value) {
             this.value = value;
         }
+
         @Override
         public T getValue() {
             return value;
         }
+
         @Override
         public String toString() {
             return value != null ? value.toString() : "null";
         }
+
         @Override
         public int hashCode() {
             final int prime = 31;
@@ -197,6 +212,7 @@ public class Preferences {
             result = prime * result + ((value == null) ? 0 : value.hashCode());
             return result;
         }
+
         @Override
         public boolean equals(Object obj) {
             if (this == obj)
@@ -226,19 +242,28 @@ public class Preferences {
         public StringSetting(String value) {
             super(value);
         }
-        @Override public boolean equalVal(String otherVal) {
+
+        @Override
+        public boolean equalVal(String otherVal) {
             if (value == null) return otherVal == null;
             return value.equals(otherVal);
         }
-        @Override public StringSetting copy() {
+
+        @Override
+        public StringSetting copy() {
             return new StringSetting(value);
         }
-        @Override public void visit(SettingVisitor visitor) {
+
+        @Override
+        public void visit(SettingVisitor visitor) {
             visitor.visit(this);
         }
-        @Override public StringSetting getNullInstance() {
+
+        @Override
+        public StringSetting getNullInstance() {
             return new StringSetting(null);
         }
+
         @Override
         public boolean equals(Object other) {
             if (!(other instanceof StringSetting)) return false;
@@ -258,6 +283,7 @@ public class Preferences {
             super(value);
             consistencyTest();
         }
+
         /**
          * Convenience factory method.
          * @param value the value
@@ -266,9 +292,12 @@ public class Preferences {
         public static ListSetting create(Collection<String> value) {
             return new ListSetting(value == null ? null : Collections.unmodifiableList(new ArrayList<>(value)));
         }
-        @Override public boolean equalVal(List<String> otherVal) {
+
+        @Override
+        public boolean equalVal(List<String> otherVal) {
             return equalCollection(value, otherVal);
         }
+
         public static boolean equalCollection(Collection<String> a, Collection<String> b) {
             if (a == null) return b == null;
             if (b == null) return false;
@@ -278,23 +307,31 @@ public class Preferences {
             while (itA.hasNext()) {
                 String aStr = itA.next();
                 String bStr = itB.next();
-                if (!Objects.equals(aStr,bStr)) return false;
+                if (!Objects.equals(aStr, bStr)) return false;
             }
             return true;
         }
-        @Override public ListSetting copy() {
+
+        @Override
+        public ListSetting copy() {
             return ListSetting.create(value);
         }
+
         private void consistencyTest() {
             if (value != null && value.contains(null))
                 throw new RuntimeException("Error: Null as list element in preference setting");
         }
-        @Override public void visit(SettingVisitor visitor) {
+
+        @Override
+        public void visit(SettingVisitor visitor) {
             visitor.visit(this);
         }
-        @Override public ListSetting getNullInstance() {
+
+        @Override
+        public ListSetting getNullInstance() {
             return new ListSetting(null);
         }
+
         @Override
         public boolean equals(Object other) {
             if (!(other instanceof ListSetting)) return false;
@@ -458,14 +495,19 @@ public class Preferences {
 
     public interface SettingVisitor {
         void visit(StringSetting setting);
+
         void visit(ListSetting value);
+
         void visit(ListListSetting value);
+
         void visit(MapListSetting value);
     }
 
     public interface PreferenceChangeEvent {
         String getKey();
+
         Setting<?> getOldValue();
+
         Setting<?> getNewValue();
     }
 
@@ -502,7 +544,9 @@ public class Preferences {
 
     public interface ColorKey {
         String getColorName();
+
         String getSpecialName();
+
         Color getDefaultValue();
     }
 
@@ -695,8 +739,8 @@ public class Preferences {
     }
 
     public synchronized Map<String, String> getAllPrefix(final String prefix) {
-        final Map<String,String> all = new TreeMap<>();
-        for (final Entry<String,Setting<?>> e : settingsMap.entrySet()) {
+        final Map<String, String> all = new TreeMap<>();
+        for (final Entry<String, Setting<?>> e : settingsMap.entrySet()) {
             if (e.getKey().startsWith(prefix) && (e.getValue() instanceof StringSetting)) {
                 all.put(e.getKey(), ((StringSetting) e.getValue()).getValue());
             }
@@ -715,8 +759,8 @@ public class Preferences {
     }
 
     public synchronized Map<String, String> getAllColors() {
-        final Map<String,String> all = new TreeMap<>();
-        for (final Entry<String,Setting<?>> e : defaultsMap.entrySet()) {
+        final Map<String, String> all = new TreeMap<>();
+        for (final Entry<String, Setting<?>> e : defaultsMap.entrySet()) {
             if (e.getKey().startsWith("color.") && e.getValue() instanceof StringSetting) {
                 StringSetting d = (StringSetting) e.getValue();
                 if (d.getValue() != null) {
@@ -724,7 +768,7 @@ public class Preferences {
                 }
             }
         }
-        for (final Entry<String,Setting<?>> e : settingsMap.entrySet()) {
+        for (final Entry<String, Setting<?>> e : settingsMap.entrySet()) {
             if (e.getKey().startsWith("color.") && (e.getValue() instanceof StringSetting)) {
                 all.put(e.getKey().substring(6), ((StringSetting) e.getValue()).getValue());
             }
@@ -746,7 +790,7 @@ public class Preferences {
         String skey = key+"."+specName;
         Setting<?> prop = settingsMap.get(skey);
         if (prop instanceof StringSetting)
-            return Boolean.parseBoolean(((StringSetting)prop).getValue());
+            return Boolean.parseBoolean(((StringSetting) prop).getValue());
         else
             return generic;
     }
@@ -759,7 +803,7 @@ public class Preferences {
      * @return true, if something has changed (i.e. value is different than before)
      */
     public boolean put(final String key, String value) {
-        if(value != null && value.length() == 0) {
+        if (value != null && value.isEmpty()) {
             value = null;
         }
         return putSetting(key, value == null ? null : new StringSetting(value));
@@ -805,18 +849,30 @@ public class Preferences {
 
         File tmpFile = new File(prefFile + "_tmp");
         Utils.copyFile(tmpFile, prefFile);
-        tmpFile.delete();
+        if (!tmpFile.delete()) {
+            Main.warn(tr("Unable to delete temporary file {0}", tmpFile.getAbsolutePath()));
+        }
 
         setCorrectPermissions(prefFile);
         setCorrectPermissions(backupFile);
     }
 
     private void setCorrectPermissions(File file) {
-        file.setReadable(false, false);
-        file.setWritable(false, false);
-        file.setExecutable(false, false);
-        file.setReadable(true, true);
-        file.setWritable(true, true);
+        if (!file.setReadable(false, false) && Main.isDebugEnabled()) {
+            Main.debug(tr("Unable to set file non-readable {0}", file.getAbsolutePath()));
+        }
+        if (!file.setWritable(false, false) && Main.isDebugEnabled()) {
+            Main.debug(tr("Unable to set file non-writable {0}", file.getAbsolutePath()));
+        }
+        if (!file.setExecutable(false, false) && Main.isDebugEnabled()) {
+            Main.debug(tr("Unable to set file non-executable {0}", file.getAbsolutePath()));
+        }
+        if (!file.setReadable(true, true) && Main.isDebugEnabled()) {
+            Main.debug(tr("Unable to set file readable {0}", file.getAbsolutePath()));
+        }
+        if (!file.setWritable(true, true) && Main.isDebugEnabled()) {
+            Main.debug(tr("Unable to set file writable {0}", file.getAbsolutePath()));
+        }
     }
 
     /**
@@ -846,22 +902,26 @@ public class Preferences {
         // get the preferences.
         File prefDir = getPreferencesDirectory();
         if (prefDir.exists()) {
-            if(!prefDir.isDirectory()) {
-                Main.warn(tr("Failed to initialize preferences. Preference directory ''{0}'' is not a directory.", prefDir.getAbsoluteFile()));
+            if (!prefDir.isDirectory()) {
+                Main.warn(tr("Failed to initialize preferences. Preference directory ''{0}'' is not a directory.",
+                        prefDir.getAbsoluteFile()));
                 JOptionPane.showMessageDialog(
                         Main.parent,
-                        tr("<html>Failed to initialize preferences.<br>Preference directory ''{0}'' is not a directory.</html>", prefDir.getAbsoluteFile()),
+                        tr("<html>Failed to initialize preferences.<br>Preference directory ''{0}'' is not a directory.</html>",
+                                prefDir.getAbsoluteFile()),
                         tr("Error"),
                         JOptionPane.ERROR_MESSAGE
                 );
                 return;
             }
         } else {
-            if (! prefDir.mkdirs()) {
-                Main.warn(tr("Failed to initialize preferences. Failed to create missing preference directory: {0}", prefDir.getAbsoluteFile()));
+            if (!prefDir.mkdirs()) {
+                Main.warn(tr("Failed to initialize preferences. Failed to create missing preference directory: {0}",
+                        prefDir.getAbsoluteFile()));
                 JOptionPane.showMessageDialog(
                         Main.parent,
-                        tr("<html>Failed to initialize preferences.<br>Failed to create missing preference directory: {0}</html>",prefDir.getAbsoluteFile()),
+                        tr("<html>Failed to initialize preferences.<br>Failed to create missing preference directory: {0}</html>",
+                                prefDir.getAbsoluteFile()),
                         tr("Error"),
                         JOptionPane.ERROR_MESSAGE
                 );
@@ -880,11 +940,12 @@ public class Preferences {
                 resetToDefault();
                 save();
             }
-        } catch(IOException e) {
+        } catch (IOException e) {
             Main.error(e);
             JOptionPane.showMessageDialog(
                     Main.parent,
-                    tr("<html>Failed to initialize preferences.<br>Failed to reset preference file to default: {0}</html>",getPreferenceFile().getAbsoluteFile()),
+                    tr("<html>Failed to initialize preferences.<br>Failed to reset preference file to default: {0}</html>",
+                            getPreferenceFile().getAbsoluteFile()),
                     tr("Error"),
                     JOptionPane.ERROR_MESSAGE
             );
@@ -894,10 +955,12 @@ public class Preferences {
             load();
         } catch (Exception e) {
             Main.error(e);
-            File backupFile = new File(prefDir,"preferences.xml.bak");
+            File backupFile = new File(prefDir, "preferences.xml.bak");
             JOptionPane.showMessageDialog(
                     Main.parent,
-                    tr("<html>Preferences file had errors.<br> Making backup of old one to <br>{0}<br> and creating a new default preference file.</html>", backupFile.getAbsoluteFile()),
+                    tr("<html>Preferences file had errors.<br> Making backup of old one to <br>{0}<br> " +
+                            "and creating a new default preference file.</html>",
+                            backupFile.getAbsoluteFile()),
                     tr("Error"),
                     JOptionPane.ERROR_MESSAGE
             );
@@ -905,14 +968,14 @@ public class Preferences {
             try {
                 resetToDefault();
                 save();
-            } catch(IOException e1) {
+            } catch (IOException e1) {
                 Main.error(e1);
                 Main.warn(tr("Failed to initialize preferences. Failed to reset preference file to default: {0}", getPreferenceFile()));
             }
         }
     }
 
-    public final void resetToDefault(){
+    public final void resetToDefault() {
         settingsMap.clear();
     }
 
@@ -971,7 +1034,7 @@ public class Preferences {
      */
     public synchronized Color getColor(String colName, String specName, Color def) {
         String colKey = ColorProperty.getColorKey(colName);
-        if(!colKey.equals(colName)) {
+        if (!colKey.equals(colName)) {
             colornames.put(colKey, colName);
         }
         String colStr = specName != null ? get("color."+specName) : "";
@@ -997,54 +1060,66 @@ public class Preferences {
 
     public synchronized int getInteger(String key, int def) {
         String v = get(key, Integer.toString(def));
-        if(v.isEmpty())
+        if (v.isEmpty())
             return def;
 
         try {
             return Integer.parseInt(v);
-        } catch(NumberFormatException e) {
+        } catch (NumberFormatException e) {
             // fall out
+            if (Main.isTraceEnabled()) {
+                Main.trace(e.getMessage());
+            }
         }
         return def;
     }
 
     public synchronized int getInteger(String key, String specName, int def) {
         String v = get(key+"."+specName);
-        if(v.isEmpty())
-            v = get(key,Integer.toString(def));
-        if(v.isEmpty())
+        if (v.isEmpty())
+            v = get(key, Integer.toString(def));
+        if (v.isEmpty())
             return def;
 
         try {
             return Integer.parseInt(v);
-        } catch(NumberFormatException e) {
+        } catch (NumberFormatException e) {
             // fall out
+            if (Main.isTraceEnabled()) {
+                Main.trace(e.getMessage());
+            }
         }
         return def;
     }
 
     public synchronized long getLong(String key, long def) {
         String v = get(key, Long.toString(def));
-        if(null == v)
+        if (null == v)
             return def;
 
         try {
             return Long.parseLong(v);
-        } catch(NumberFormatException e) {
+        } catch (NumberFormatException e) {
             // fall out
+            if (Main.isTraceEnabled()) {
+                Main.trace(e.getMessage());
+            }
         }
         return def;
     }
 
     public synchronized double getDouble(String key, double def) {
         String v = get(key, Double.toString(def));
-        if(null == v)
+        if (null == v)
             return def;
 
         try {
             return Double.parseDouble(v);
-        } catch(NumberFormatException e) {
+        } catch (NumberFormatException e) {
             // fall out
+            if (Main.isTraceEnabled()) {
+                Main.trace(e.getMessage());
+            }
         }
         return def;
     }
@@ -1109,7 +1184,7 @@ public class Preferences {
             if (saveOnPut) {
                 try {
                     save();
-                } catch (IOException e){
+                } catch (IOException e) {
                     Main.warn(tr("Failed to persist preferences to ''{0}''", getPreferenceFile().getAbsoluteFile()));
                 }
             }
@@ -1223,12 +1298,12 @@ public class Preferences {
      * same as above, but returns def if nothing was found
      */
     public <T> List<T> getListOfStructs(String key, Collection<T> def, Class<T> klass) {
-        Collection<Map<String,String>> prop =
+        Collection<Map<String, String>> prop =
             getListOfStructs(key, def == null ? null : serializeListOfStructs(def, klass));
         if (prop == null)
             return def == null ? null : new ArrayList<>(def);
         List<T> lst = new ArrayList<>();
-        for (Map<String,String> entries : prop) {
+        for (Map<String, String> entries : prop) {
             T struct = deserializeStruct(entries, klass);
             lst.add(struct);
         }
@@ -1252,10 +1327,10 @@ public class Preferences {
         return putListOfStructs(key, serializeListOfStructs(val, klass));
     }
 
-    private <T> Collection<Map<String,String>> serializeListOfStructs(Collection<T> l, Class<T> klass) {
+    private <T> Collection<Map<String, String>> serializeListOfStructs(Collection<T> l, Class<T> klass) {
         if (l == null)
             return null;
-        Collection<Map<String,String>> vals = new ArrayList<>();
+        Collection<Map<String, String>> vals = new ArrayList<>();
         for (T struct : l) {
             if (struct == null) {
                 continue;
@@ -1265,7 +1340,40 @@ public class Preferences {
         return vals;
     }
 
-    public static <T> Map<String,String> serializeStruct(T struct, Class<T> klass) {
+    @SuppressWarnings("rawtypes")
+    private static String mapToJson(Map map) {
+        StringWriter stringWriter = new StringWriter();
+        try (JsonWriter writer = Json.createWriter(stringWriter)) {
+            JsonObjectBuilder object = Json.createObjectBuilder();
+            for (Object o: map.entrySet()) {
+                Entry e = (Entry) o;
+                object.add(e.getKey().toString(), e.getValue().toString());
+            }
+            writer.writeObject(object.build());
+        }
+        return stringWriter.toString();
+    }
+
+    @SuppressWarnings({ "rawtypes", "unchecked" })
+    private static Map mapFromJson(String s) {
+        Map ret = null;
+        try (JsonReader reader = Json.createReader(new StringReader(s))) {
+            JsonObject object = reader.readObject();
+            ret = new HashMap(object.size());
+            for (Entry<String, JsonValue> e: object.entrySet()) {
+                JsonValue value = e.getValue();
+                if (value instanceof JsonString) {
+                    // in some cases, when JsonValue.toString() is called, then additional quotation marks are left in value
+                    ret.put(e.getKey(), ((JsonString) value).getString());
+                } else {
+                    ret.put(e.getKey(), e.getValue().toString());
+                }
+            }
+        }
+        return ret;
+    }
+
+    public static <T> Map<String, String> serializeStruct(T struct, Class<T> klass) {
         T structPrototype;
         try {
             structPrototype = klass.newInstance();
@@ -1273,7 +1381,7 @@ public class Preferences {
             throw new RuntimeException(ex);
         }
 
-        Map<String,String> hash = new LinkedHashMap<>();
+        Map<String, String> hash = new LinkedHashMap<>();
         for (Field f : klass.getDeclaredFields()) {
             if (f.getAnnotation(pref.class) == null) {
                 continue;
@@ -1284,7 +1392,12 @@ public class Preferences {
                 Object defaultFieldValue = f.get(structPrototype);
                 if (fieldValue != null) {
                     if (f.getAnnotation(writeExplicitly.class) != null || !Objects.equals(fieldValue, defaultFieldValue)) {
-                        hash.put(f.getName().replace("_", "-"), fieldValue.toString());
+                        String key = f.getName().replace("_", "-");
+                        if (fieldValue instanceof Map) {
+                            hash.put(key, mapToJson((Map) fieldValue));
+                        } else {
+                            hash.put(key, fieldValue.toString());
+                        }
                     }
                 }
             } catch (IllegalArgumentException | IllegalAccessException ex) {
@@ -1294,14 +1407,14 @@ public class Preferences {
         return hash;
     }
 
-    public static <T> T deserializeStruct(Map<String,String> hash, Class<T> klass) {
+    public static <T> T deserializeStruct(Map<String, String> hash, Class<T> klass) {
         T struct = null;
         try {
             struct = klass.newInstance();
         } catch (InstantiationException | IllegalAccessException ex) {
             throw new RuntimeException(ex);
         }
-        for (Entry<String,String> key_value : hash.entrySet()) {
+        for (Entry<String, String> key_value : hash.entrySet()) {
             Object value = null;
             Field f;
             try {
@@ -1316,21 +1429,23 @@ public class Preferences {
             }
             f.setAccessible(true);
             if (f.getType() == Boolean.class || f.getType() == boolean.class) {
-                value = Boolean.parseBoolean(key_value.getValue());
+                value = Boolean.valueOf(key_value.getValue());
             } else if (f.getType() == Integer.class || f.getType() == int.class) {
                 try {
-                    value = Integer.parseInt(key_value.getValue());
+                    value = Integer.valueOf(key_value.getValue());
                 } catch (NumberFormatException nfe) {
                     continue;
                 }
             } else if (f.getType() == Double.class || f.getType() == double.class) {
                 try {
-                    value = Double.parseDouble(key_value.getValue());
+                    value = Double.valueOf(key_value.getValue());
                 } catch (NumberFormatException nfe) {
                     continue;
                 }
             } else  if (f.getType() == String.class) {
                 value = key_value.getValue();
+            } else if (f.getType().isAssignableFrom(Map.class)) {
+                value = mapFromJson(key_value.getValue());
             } else
                 throw new RuntimeException("unsupported preference primitive type");
 
@@ -1358,9 +1473,9 @@ public class Preferences {
      *
      */
     public void updateSystemProperties() {
-        if("true".equals(get("prefer.ipv6", "auto"))) {
+        if ("true".equals(get("prefer.ipv6", "auto"))) {
             // never set this to false, only true!
-            if(!"true".equals(Utils.updateSystemProperty("java.net.preferIPv6Addresses", "true"))) {
+            if (!"true".equals(Utils.updateSystemProperty("java.net.preferIPv6Addresses", "true"))) {
                 Main.info(tr("Try enabling IPv6 network, prefering IPv6 over IPv4 (only works on early startup)."));
             }
         }
@@ -1375,6 +1490,9 @@ public class Preferences {
             field.set(null, ResourceBundle.getBundle("sun.awt.resources.awt"));
         } catch (Exception e) {
             // Ignore all exceptions
+            if (Main.isTraceEnabled()) {
+                Main.trace(e.getMessage());
+            }
         }
         // Workaround to fix a Java "feature"
         // See http://stackoverflow.com/q/7615645/2257172 and #9875
@@ -1393,12 +1511,31 @@ public class Preferences {
     /**
      * Replies the collection of plugin site URLs from where plugin lists can be downloaded.
      * @return the collection of plugin site URLs
+     * @see #getOnlinePluginSites
      */
     public Collection<String> getPluginSites() {
         return getCollection("pluginmanager.sites", Collections.singleton(Main.getJOSMWebsite()+"/pluginicons%<?plugins=>"));
     }
 
     /**
+     * Returns the list of plugin sites available according to offline mode settings.
+     * @return the list of available plugin sites
+     * @since 8471
+     */
+    public Collection<String> getOnlinePluginSites() {
+        Collection<String> pluginSites = new ArrayList<>(getPluginSites());
+        for (Iterator<String> it = pluginSites.iterator(); it.hasNext();) {
+            try {
+                OnlineResource.JOSM_WEBSITE.checkOfflineAccess(it.next(), Main.getJOSMWebsite());
+            } catch (OfflineAccessException ex) {
+                Main.warn(ex, false);
+                it.remove();
+            }
+        }
+        return pluginSites;
+    }
+
+    /**
      * Sets the collection of plugin site URLs.
      *
      * @param sites the site URLs
@@ -1569,7 +1706,8 @@ public class Preferences {
     }
 
     protected void throwException(String msg) {
-        throw new RuntimeException(msg + tr(" (at line {0}, column {1})", parser.getLocation().getLineNumber(), parser.getLocation().getColumnNumber()));
+        throw new RuntimeException(msg + tr(" (at line {0}, column {1})",
+                parser.getLocation().getLineNumber(), parser.getLocation().getColumnNumber()));
     }
 
     private class SettingToXml implements SettingVisitor {
@@ -1634,7 +1772,8 @@ public class Preferences {
             for (Map<String, String> struct : setting.getValue()) {
                 b.append("    <map>\n");
                 for (Entry<String, String> e : struct.entrySet()) {
-                    b.append("      <tag key='").append(XmlWriter.encode(e.getKey())).append("' value='").append(XmlWriter.encode(e.getValue())).append("'/>\n");
+                    b.append("      <tag key='").append(XmlWriter.encode(e.getKey()))
+                     .append("' value='").append(XmlWriter.encode(e.getValue())).append("'/>\n");
                 }
                 b.append("    </map>\n");
             }
@@ -1644,9 +1783,9 @@ public class Preferences {
 
     public String toXML(boolean nopass) {
         StringBuilder b = new StringBuilder(
-                "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
-                "<preferences xmlns=\""+Main.getXMLBase()+"/preferences-1.0\" version=\""+
-                Version.getInstance().getVersion() + "\">\n");
+                "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<preferences xmlns=\"")
+                .append(Main.getXMLBase()).append("/preferences-1.0\" version=\"")
+                .append(Version.getInstance().getVersion()).append("\">\n");
         SettingToXml toXml = new SettingToXml(b, nopass);
         for (Entry<String, Setting<?>> e : settingsMap.entrySet()) {
             toXml.setKey(e.getKey());
@@ -1665,14 +1804,13 @@ public class Preferences {
         // drop this block end of 2015
         // update old style JOSM server links to use zip now, see #10581
         // actually also cache and mirror entries should be cleared
-        if(getInteger("josm.version", Version.getInstance().getVersion()) < 8099) {
-            for(String key: new String[]{"mappaint.style.entries", "taggingpreset.entries"}) {
+        if (getInteger("josm.version", Version.getInstance().getVersion()) < 8099) {
+            for (String key: new String[]{"mappaint.style.entries", "taggingpreset.entries"}) {
                 Collection<Map<String, String>> data = getListOfStructs(key, (Collection<Map<String, String>>) null);
                 if (data != null) {
                     List<Map<String, String>> newlist = new ArrayList<Map<String, String>>();
                     boolean modified = false;
-                    for(Map<String, String> map : data)
-                    {
+                    for (Map<String, String> map : data) {
                          Map<String, String> newmap = new LinkedHashMap<String, String>();
                          for (Entry<String, String> entry : map.entrySet()) {
                              String val = entry.getValue();
diff --git a/src/org/openstreetmap/josm/data/ProjectionBounds.java b/src/org/openstreetmap/josm/data/ProjectionBounds.java
index 6ace11d..6cd739a 100644
--- a/src/org/openstreetmap/josm/data/ProjectionBounds.java
+++ b/src/org/openstreetmap/josm/data/ProjectionBounds.java
@@ -2,6 +2,7 @@
 package org.openstreetmap.josm.data;
 
 import org.openstreetmap.josm.data.coor.EastNorth;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
  * This is a simple data class for "rectangular" areas of the world, given in
@@ -24,24 +25,27 @@ public class ProjectionBounds {
         this.maxEast = max.east();
         this.maxNorth = max.north();
     }
+
     public ProjectionBounds(EastNorth p) {
         this.minEast = this.maxEast = p.east();
         this.minNorth = this.maxNorth = p.north();
     }
+
     public ProjectionBounds(EastNorth center, double east, double north) {
         this.minEast = center.east()-east/2.0;
         this.minNorth = center.north()-north/2.0;
         this.maxEast = center.east()+east/2.0;
         this.maxNorth = center.north()+north/2.0;
     }
+
     public ProjectionBounds(double minEast, double minNorth, double maxEast, double maxNorth) {
         this.minEast = minEast;
         this.minNorth = minNorth;
         this.maxEast = maxEast;
         this.maxNorth = maxNorth;
     }
-    public void extend(EastNorth e)
-    {
+
+    public void extend(EastNorth e) {
         if (e.east() < minEast) {
             minEast = e.east();
         }
@@ -55,12 +59,13 @@ public class ProjectionBounds {
             maxNorth = e.north();
         }
     }
-    public EastNorth getCenter()
-    {
+
+    public EastNorth getCenter() {
         return new EastNorth((minEast + maxEast) / 2.0, (minNorth + maxNorth) / 2.0);
     }
 
-    @Override public String toString() {
+    @Override
+    public String toString() {
         return "ProjectionBounds["+minEast+","+minNorth+","+maxEast+","+maxNorth+"]";
     }
 
@@ -84,6 +89,6 @@ public class ProjectionBounds {
     }
 
     public boolean hasExtend() {
-        return minEast != maxEast || minNorth != maxNorth;
+        return !Utils.equalsEpsilon(minEast, maxEast) || !Utils.equalsEpsilon(minNorth, maxNorth);
     }
 }
diff --git a/src/org/openstreetmap/josm/data/SelectionChangedListener.java b/src/org/openstreetmap/josm/data/SelectionChangedListener.java
index 74ff89e..ddb41a0 100644
--- a/src/org/openstreetmap/josm/data/SelectionChangedListener.java
+++ b/src/org/openstreetmap/josm/data/SelectionChangedListener.java
@@ -22,5 +22,5 @@ public interface SelectionChangedListener {
      * Informs the listener that the selection in the dataset has changed.
      * @param newSelection The new selection.
      */
-    public void selectionChanged(Collection<? extends OsmPrimitive> newSelection);
+    void selectionChanged(Collection<? extends OsmPrimitive> newSelection);
 }
diff --git a/src/org/openstreetmap/josm/data/SystemOfMeasurement.java b/src/org/openstreetmap/josm/data/SystemOfMeasurement.java
index 076572e..737b20d 100644
--- a/src/org/openstreetmap/josm/data/SystemOfMeasurement.java
+++ b/src/org/openstreetmap/josm/data/SystemOfMeasurement.java
@@ -7,17 +7,34 @@ import java.text.NumberFormat;
 import java.util.LinkedHashMap;
 import java.util.Locale;
 import java.util.Map;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.gui.preferences.projection.ProjectionPreference;
 
 /**
  * A system of units used to express length and area measurements.
+ * <p>
+ * This class also manages one globally set system of measurement stored in the {@link ProjectionPreference}
  * @since 3406 (creation)
- * @since 6992 (extraction in this package) 
+ * @since 6992 (extraction in this package)
  */
 public class SystemOfMeasurement {
 
     /**
+     * Interface to notify listeners of the change of the system of measurement.
+     * @since 8554
+     */
+    public interface SoMChangeListener {
+        /**
+         * The current SoM has changed.
+         * @param oldSoM The old system of measurement
+         * @param newSoM The new (current) system of measurement
+         */
+        void systemOfMeasurementChanged(String oldSoM, String newSoM);
+    }
+
+    /**
      * Metric system (international standard).
      * @since 3406
      */
@@ -40,7 +57,7 @@ public class SystemOfMeasurement {
      * @since 5549
      */
     public static final SystemOfMeasurement NAUTICAL_MILE = new SystemOfMeasurement(185.2, "kbl", 1852, "NM");
-    
+
     /**
      * Known systems of measurement.
      * @since 3406
@@ -53,7 +70,65 @@ public class SystemOfMeasurement {
         ALL_SYSTEMS.put(marktr("Imperial"), IMPERIAL);
         ALL_SYSTEMS.put(marktr("Nautical Mile"), NAUTICAL_MILE);
     }
-    
+
+    private static final CopyOnWriteArrayList<SoMChangeListener> somChangeListeners = new CopyOnWriteArrayList<>();
+
+    /**
+     * Removes a global SoM change listener.
+     *
+     * @param listener the listener. Ignored if null or already absent
+     * @since 8554
+     */
+    public static void removeSoMChangeListener(SoMChangeListener listener) {
+        somChangeListeners.remove(listener);
+    }
+
+    /**
+     * Adds a SoM change listener.
+     *
+     * @param listener the listener. Ignored if null or already registered.
+     * @since 8554
+     */
+    public static void addSoMChangeListener(SoMChangeListener listener) {
+        if (listener != null) {
+            somChangeListeners.addIfAbsent(listener);
+        }
+    }
+
+    protected static void fireSoMChanged(String oldSoM, String newSoM) {
+        for (SoMChangeListener l : somChangeListeners) {
+            l.systemOfMeasurementChanged(oldSoM, newSoM);
+        }
+    }
+
+    /**
+     * Returns the current global system of measurement.
+     * @return The current system of measurement (metric system by default).
+     * @since 8554
+     */
+    public static SystemOfMeasurement getSystemOfMeasurement() {
+        SystemOfMeasurement som = SystemOfMeasurement.ALL_SYSTEMS.get(ProjectionPreference.PROP_SYSTEM_OF_MEASUREMENT.get());
+        if (som == null)
+            return SystemOfMeasurement.METRIC;
+        return som;
+    }
+
+    /**
+     * Sets the current global system of measurement.
+     * @param somKey The system of measurement key. Must be defined in {@link SystemOfMeasurement#ALL_SYSTEMS}.
+     * @throws IllegalArgumentException if {@code somKey} is not known
+     * @since 8554
+     */
+    public static void setSystemOfMeasurement(String somKey) {
+        if (!SystemOfMeasurement.ALL_SYSTEMS.containsKey(somKey)) {
+            throw new IllegalArgumentException("Invalid system of measurement: "+somKey);
+        }
+        String oldKey = ProjectionPreference.PROP_SYSTEM_OF_MEASUREMENT.get();
+        if (ProjectionPreference.PROP_SYSTEM_OF_MEASUREMENT.put(somKey)) {
+            fireSoMChanged(oldKey, somKey);
+        }
+    }
+
     /** First value, in meters, used to translate unit according to above formula. */
     public final double aValue;
     /** Second value, in meters, used to translate unit according to above formula. */
@@ -158,7 +233,8 @@ public class SystemOfMeasurement {
         double a = area / (aValue*aValue);
         boolean lowerOnly = Main.pref.getBoolean("system_of_measurement.use_only_lower_unit", false);
         boolean customAreaOnly = Main.pref.getBoolean("system_of_measurement.use_only_custom_area_unit", false);
-        if ((!lowerOnly && areaCustomValue > 0 && a > areaCustomValue / (aValue*aValue) && a < (bValue*bValue) / (aValue*aValue)) || customAreaOnly)
+        if ((!lowerOnly && areaCustomValue > 0 && a > areaCustomValue / (aValue*aValue)
+                && a < (bValue*bValue) / (aValue*aValue)) || customAreaOnly)
             return formatText(area / areaCustomValue, areaCustomName, format);
         else if (!lowerOnly && a >= (bValue*bValue) / (aValue*aValue))
             return formatText(area / (bValue * bValue), bName + "\u00b2", format);
@@ -172,6 +248,6 @@ public class SystemOfMeasurement {
         if (format != null) {
             return format.format(v) + " " + unit;
         }
-        return String.format(Locale.US, "%." + (v<9.999999 ? 2 : 1) + "f %s", v, unit);
+        return String.format(Locale.US, "%." + (v < 9.999999 ? 2 : 1) + "f %s", v, unit);
     }
 }
diff --git a/src/org/openstreetmap/josm/data/UndoRedoHandler.java b/src/org/openstreetmap/josm/data/UndoRedoHandler.java
index 29a6659..bb07a61 100644
--- a/src/org/openstreetmap/josm/data/UndoRedoHandler.java
+++ b/src/org/openstreetmap/josm/data/UndoRedoHandler.java
@@ -1,4 +1,4 @@
-//License: GPL. For details, see LICENSE file.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data;
 
 import java.util.Collection;
@@ -87,7 +87,7 @@ public class UndoRedoHandler implements MapView.LayerChangeListener {
         Collection<? extends OsmPrimitive> oldSelection = Main.main.getCurrentDataSet().getSelected();
         Main.main.getCurrentDataSet().beginUpdate();
         try {
-            for (int i=1; i<=num; ++i) {
+            for (int i = 1; i <= num; ++i) {
                 final Command c = commands.removeLast();
                 c.undoCommand();
                 redoCommands.addFirst(c);
@@ -95,8 +95,7 @@ public class UndoRedoHandler implements MapView.LayerChangeListener {
                     break;
                 }
             }
-        }
-        finally {
+        } finally {
             Main.main.getCurrentDataSet().endUpdate();
         }
         fireCommandsChanged();
@@ -121,7 +120,7 @@ public class UndoRedoHandler implements MapView.LayerChangeListener {
         if (redoCommands.isEmpty())
             return;
         Collection<? extends OsmPrimitive> oldSelection = Main.main.getCurrentDataSet().getSelected();
-        for (int i=0; i<num; ++i) {
+        for (int i = 0; i < num; ++i) {
             final Command c = redoCommands.removeFirst();
             c.executeCommand();
             commands.add(c);
@@ -175,9 +174,14 @@ public class UndoRedoHandler implements MapView.LayerChangeListener {
     }
 
     @Override
-    public void layerAdded(Layer newLayer) {}
+    public void layerAdded(Layer newLayer) {
+        // Do nothing
+    }
+
     @Override
-    public void activeLayerChange(Layer oldLayer, Layer newLayer) {}
+    public void activeLayerChange(Layer oldLayer, Layer newLayer) {
+        // Do nothing
+    }
 
     /**
      * Removes a command queue listener.
diff --git a/src/org/openstreetmap/josm/data/Version.java b/src/org/openstreetmap/josm/data/Version.java
index 65081da..5728be1 100644
--- a/src/org/openstreetmap/josm/data/Version.java
+++ b/src/org/openstreetmap/josm/data/Version.java
@@ -40,7 +40,7 @@ public class Version {
             StringBuilder sb = new StringBuilder();
             try (BufferedReader in = Utils.openURLReader(resource)) {
                 for (String line = in.readLine(); line != null; line = in.readLine()) {
-                    sb.append(line).append("\n");
+                    sb.append(line).append('\n');
                 }
             }
             s = sb.toString();
@@ -108,7 +108,7 @@ public class Version {
             value = value.trim();
             try {
                 version = Integer.parseInt(value);
-            } catch(NumberFormatException e) {
+            } catch (NumberFormatException e) {
                 version = 0;
                 Main.warn(tr("Unexpected JOSM version number in revision file, value is ''{0}''", value));
             }
@@ -142,8 +142,8 @@ public class Version {
         // the revision info
         //
         StringBuilder sb = new StringBuilder();
-        for(Entry<String,String> property: properties.entrySet()) {
-            sb.append(property.getKey()).append(":").append(property.getValue()).append("\n");
+        for (Entry<String, String> property: properties.entrySet()) {
+            sb.append(property.getKey()).append(':').append(property.getValue()).append('\n');
         }
         releaseDescription = sb.toString();
     }
diff --git a/src/org/openstreetmap/josm/data/cache/BufferedImageCacheEntry.java b/src/org/openstreetmap/josm/data/cache/BufferedImageCacheEntry.java
index 63a765f..8420b71 100644
--- a/src/org/openstreetmap/josm/data/cache/BufferedImageCacheEntry.java
+++ b/src/org/openstreetmap/josm/data/cache/BufferedImageCacheEntry.java
@@ -7,7 +7,6 @@ import java.io.IOException;
 
 import javax.imageio.ImageIO;
 
-
 /**
  * Cache Entry that has methods to get the BufferedImage, that will be cached along in memory
  * but will be not serialized when saved to the disk (to avoid duplication of data)
@@ -19,6 +18,9 @@ public class BufferedImageCacheEntry extends CacheEntry {
     // transient to avoid serialization, volatile to avoid synchronization of whole getImage() method
     private transient volatile BufferedImage img = null;
     private transient volatile boolean writtenToDisk = false;
+    // we need to have separate control variable, to know, if we already tried to load the image, as img might be null
+    // after we loaded image, as for example, when image file is malformed (eg. HTML file)
+    private transient volatile boolean imageLoaded = false;
 
     /**
      *
@@ -33,17 +35,18 @@ public class BufferedImageCacheEntry extends CacheEntry {
      * to reduce overhead of ImageIO
      *
      * @return BufferedImage of cache entry content
-     * @throws IOException
+     * @throws IOException if an error occurs during reading.
      */
     public BufferedImage getImage() throws IOException {
-        if (img != null)
+        if (imageLoaded)
             return img;
-        synchronized(this) {
-            if (img != null)
+        synchronized (this) {
+            if (imageLoaded)
                 return img;
             byte[] content = getContent();
-            if (content != null) {
+            if (content != null && content.length > 0) {
                 img = ImageIO.read(new ByteArrayInputStream(content));
+                imageLoaded = true;
 
                 if (writtenToDisk)
                     content = null;
@@ -53,7 +56,6 @@ public class BufferedImageCacheEntry extends CacheEntry {
         return img;
     }
 
-
     private void writeObject(java.io.ObjectOutputStream out) throws IOException {
         /*
          * This method below will be needed, if Apache Commons JCS (or any other caching system), will update
@@ -76,7 +78,8 @@ public class BufferedImageCacheEntry extends CacheEntry {
          */
         synchronized (this) {
             if (content == null && img != null) {
-                throw new AssertionError("Trying to serialize (save to disk?) an BufferedImageCacheEntry that was converted to BufferedImage and no raw data is present anymore");
+                throw new AssertionError("Trying to serialize (save to disk?) an BufferedImageCacheEntry " +
+                        "that was converted to BufferedImage and no raw data is present anymore");
             }
             out.writeObject(this);
             // ugly hack to wait till element will get to disk to clean the memory
@@ -85,7 +88,6 @@ public class BufferedImageCacheEntry extends CacheEntry {
             if (img != null) {
                 content = null;
             }
-
         }
     }
 }
diff --git a/src/org/openstreetmap/josm/data/cache/CacheEntry.java b/src/org/openstreetmap/josm/data/cache/CacheEntry.java
index afaad0f..b9360a7 100644
--- a/src/org/openstreetmap/josm/data/cache/CacheEntry.java
+++ b/src/org/openstreetmap/josm/data/cache/CacheEntry.java
@@ -2,6 +2,7 @@
 package org.openstreetmap.josm.data.cache;
 
 import java.io.Serializable;
+import java.util.Arrays;
 
 /**
  * @author Wiktor Niesiobędzki
@@ -17,13 +18,16 @@ public class CacheEntry implements Serializable {
      * @param content of the cache entry
      */
     public CacheEntry(byte[] content) {
-        this.content = content;
+        this.content = Arrays.copyOf(content, content.length);
     }
 
     /**
      * @return cache entry content
      */
     public byte[] getContent() {
-        return content;
+        if (content == null) {
+            return new byte[]{};
+        }
+        return Arrays.copyOf(content, content.length);
     }
 }
diff --git a/src/org/openstreetmap/josm/data/cache/CacheEntryAttributes.java b/src/org/openstreetmap/josm/data/cache/CacheEntryAttributes.java
index 673f3d9..65b3891 100644
--- a/src/org/openstreetmap/josm/data/cache/CacheEntryAttributes.java
+++ b/src/org/openstreetmap/josm/data/cache/CacheEntryAttributes.java
@@ -1,24 +1,43 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.cache;
 
-import java.util.HashMap;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
 import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.commons.jcs.engine.ElementAttributes;
+import org.openstreetmap.josm.Main;
 
 /**
- * Class that contains attirubtes for JCS cache entries. Parameters are used to properly handle HTTP caching
+ * Class that contains attributes for JCS cache entries. Parameters are used to properly handle HTTP caching,
+ * and metadata structures, that should be stored together with the cache entry
  *
  * @author Wiktor Niesiobędzki
  * @since 8168
  */
 public class CacheEntryAttributes extends ElementAttributes {
     private static final long serialVersionUID = 1L; //version
-    private final Map<String, String> attrs = new HashMap<String, String>();
+    private final Map<String, String> attrs = new ConcurrentHashMap<String, String>(RESERVED_KEYS.size());
     private static final String NO_TILE_AT_ZOOM = "noTileAtZoom";
     private static final String ETAG = "Etag";
     private static final String LAST_MODIFICATION = "lastModification";
     private static final String EXPIRATION_TIME = "expirationTime";
+    private static final String HTTP_RESPONSE_CODE = "httpResponceCode";
+    private static final String ERROR_MESSAGE = "errorMessage";
+    // this contains all of the above
+    private static final Set<String> RESERVED_KEYS = new HashSet<>(Arrays.asList(new String[]{
+        NO_TILE_AT_ZOOM,
+        ETAG,
+        LAST_MODIFICATION,
+        EXPIRATION_TIME,
+        HTTP_RESPONSE_CODE,
+        ERROR_MESSAGE
+    }));
+
 
     /**
      * Constructs a new {@code CacheEntryAttributes}.
@@ -26,44 +45,151 @@ public class CacheEntryAttributes extends ElementAttributes {
     public CacheEntryAttributes() {
         super();
         attrs.put(NO_TILE_AT_ZOOM, "false");
-        attrs.put(ETAG, null);
         attrs.put(LAST_MODIFICATION, "0");
         attrs.put(EXPIRATION_TIME, "0");
+        attrs.put(HTTP_RESPONSE_CODE, "200");
     }
 
+    /**
+     * @return if the entry is marked as "no tile at this zoom level"
+     */
     public boolean isNoTileAtZoom() {
         return Boolean.toString(true).equals(attrs.get(NO_TILE_AT_ZOOM));
     }
+
+    /**
+     * Sets the marker for "no tile at this zoom level"
+     * @param noTileAtZoom true if this entry is "no tile at this zoom level"
+     */
     public void setNoTileAtZoom(boolean noTileAtZoom) {
         attrs.put(NO_TILE_AT_ZOOM, Boolean.toString(noTileAtZoom));
     }
+
+    /**
+     * @return ETag header value, that was returned for this entry.
+     */
     public String getEtag() {
         return attrs.get(ETAG);
     }
+
+    /**
+     * Sets the ETag header that was set with this entry
+     * @param etag Etag header
+     */
     public void setEtag(String etag) {
-        attrs.put(ETAG, etag);
+        if (etag != null) {
+            attrs.put(ETAG, etag);
+        }
     }
 
+    /**
+     * Utility for conversion from String to int, with default to 0, in case of any errors
+     *
+     * @param key - integer as string
+     * @return int value of the string
+     */
     private long getLongAttr(String key) {
+        String val = attrs.get(key);
+        if (val == null) {
+            attrs.put(key,  "0");
+            return 0;
+        }
         try {
-            return Long.parseLong(attrs.get(key));
+            return Long.parseLong(val);
         } catch (NumberFormatException e) {
             attrs.put(key, "0");
             return 0;
         }
     }
 
+    /**
+     * @return last modification of the object in cache in milliseconds from Epoch
+     */
     public long getLastModification() {
         return getLongAttr(LAST_MODIFICATION);
     }
+
+    /**
+     * sets last modification of the object in cache
+     *
+     * @param lastModification time in format of milliseconds from Epoch
+     */
     public void setLastModification(long lastModification) {
         attrs.put(LAST_MODIFICATION, Long.toString(lastModification));
     }
+
+    /**
+     * @return when the object expires in milliseconds from Epoch
+     */
     public long getExpirationTime() {
         return getLongAttr(EXPIRATION_TIME);
     }
+
+    /**
+     * sets expiration time for the object in cache
+     *
+     * @param expirationTime in format of milliseconds from epoch
+     */
     public void setExpirationTime(long expirationTime) {
         attrs.put(EXPIRATION_TIME, Long.toString(expirationTime));
     }
 
+    /**
+     * Sets the HTTP response code that was sent with the cache entry
+     *
+     * @param responseCode http status code
+     * @since 8389
+     */
+    public void setResponseCode(int responseCode) {
+        attrs.put(HTTP_RESPONSE_CODE, Integer.toString(responseCode));
+    }
+
+    /**
+     * @return http status code
+     * @since 8389
+     */
+    public int getResponseCode() {
+        return (int) getLongAttr(HTTP_RESPONSE_CODE);
+    }
+
+    /**
+     * Sets the metadata about cache entry. As it stores all data together, with other attributes
+     * in common map, some keys might not be stored.
+     *
+     * @param map metadata to save
+     * @since 8418
+     */
+    public void setMetadata(Map<String, String> map) {
+        for (Entry<String, String> e: map.entrySet()) {
+            if (RESERVED_KEYS.contains(e.getKey())) {
+                Main.info("Metadata key configuration contains key {0} which is reserved for internal use");
+            } else {
+                attrs.put(e.getKey(), e.getValue());
+            }
+        }
+    }
+
+    /**
+     * Returns an unmodifiable Map containing all metadata. Unmodifiable prevents access to metadata within attributes.
+     *
+     * @return unmodifiable Map with cache element metadata
+     * @since 8418
+     */
+    public Map<String, String> getMetadata() {
+        return Collections.unmodifiableMap(attrs);
+    }
+
+    /**
+     * @return error message returned while retrieving this object
+     */
+    public String getErrorMessage() {
+        return attrs.get(ERROR_MESSAGE);
+    }
+
+    /**
+     * @param message error message related to this object
+     */
+    public void setErrorMessage(String message) {
+        attrs.put(ERROR_MESSAGE, message);
+    }
 }
diff --git a/src/org/openstreetmap/josm/data/cache/HostLimitQueue.java b/src/org/openstreetmap/josm/data/cache/HostLimitQueue.java
new file mode 100644
index 0000000..2be6489
--- /dev/null
+++ b/src/org/openstreetmap/josm/data/cache/HostLimitQueue.java
@@ -0,0 +1,165 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.cache;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.LinkedBlockingDeque;
+import java.util.concurrent.Semaphore;
+import java.util.concurrent.TimeUnit;
+
+import org.openstreetmap.josm.Main;
+
+/**
+ * @author Wiktor Niesiobędzki
+ *
+ * Queue for ThreadPoolExecutor that implements per-host limit. It will acquire a semaphore for each task
+ * and it will set a runnable task with semaphore release, when job has finished.
+ *
+ * This implementation doesn't guarantee to have at most hostLimit connections per host[1], and it doesn't
+ * guarantee that all threads will be busy, when there is work for them[2].
+ *
+ * [1] More connection per host may happen, when ThreadPoolExecutor is growing its pool, and thus
+ *     tasks do not go through the Queue
+ * [2] If we have a queue, and for all hosts in queue we will fail to acquire semaphore, the thread
+ *     take the first available job and wait for semaphore. It might be the case, that semaphore was released
+ *     for some task further in queue, but this implementation doesn't try to detect such situation
+ *
+ *
+ */
+public class HostLimitQueue extends LinkedBlockingDeque<Runnable> {
+    private static final long serialVersionUID = 1L;
+
+    private final Map<String, Semaphore> hostSemaphores = new ConcurrentHashMap<>();
+    private final int hostLimit;
+
+    /**
+     * Creates an unbounded queue
+     * @param hostLimit how many parallel calls to host to allow
+     */
+    public HostLimitQueue(int hostLimit) {
+        super(); // create unbounded queue
+        this.hostLimit = hostLimit;
+    }
+
+    private JCSCachedTileLoaderJob<?, ?> findJob() {
+        for (Iterator<Runnable> it = iterator(); it.hasNext();) {
+            Runnable r = it.next();
+            if (r instanceof JCSCachedTileLoaderJob) {
+                JCSCachedTileLoaderJob<?, ?> job = (JCSCachedTileLoaderJob<?, ?>) r;
+                if (tryAcquireSemaphore(job)) {
+                    if (remove(job)) {
+                        return job;
+                    } else {
+                        // we have acquired the semaphore, but we didn't manage to remove it, as someone else did
+                        // release the semaphore and look for another candidate
+                        releaseSemaphore(job);
+                    }
+                } else {
+                    URL url = null;
+                    try {
+                        url = job.getUrl();
+                    } catch (IOException e) {
+                        if (Main.isDebugEnabled()) {
+                            Main.debug(e.getMessage());
+                        }
+                    }
+                    Main.debug("TMS - Queuing job {0} because host limit reached", url);
+                }
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public Runnable poll(long timeout, TimeUnit unit) throws InterruptedException {
+        Runnable job = findJob();
+        if (job != null) {
+            return job;
+        }
+        job = pollFirst(timeout, unit);
+        if (job != null) {
+            acquireSemaphore(job);
+        }
+        return job;
+    }
+
+    @Override
+    public Runnable take() throws InterruptedException {
+        Runnable job = findJob();
+        if (job != null) {
+            return job;
+        }
+        job = takeFirst();
+        if (job != null) {
+            acquireSemaphore(job);
+        }
+        return job;
+    }
+
+    private  Semaphore getSemaphore(JCSCachedTileLoaderJob<?, ?> job) {
+        String host;
+        try {
+            host = job.getUrl().getHost();
+        } catch (IOException e) {
+            // do not pass me illegal URL's
+            throw new IllegalArgumentException(e);
+        }
+        Semaphore limit = hostSemaphores.get(host);
+        if (limit == null) {
+            synchronized (hostSemaphores) {
+                limit = hostSemaphores.get(host);
+                if (limit == null) {
+                    limit = new Semaphore(hostLimit);
+                    hostSemaphores.put(host, limit);
+                }
+            }
+        }
+        return limit;
+    }
+
+    private void acquireSemaphore(Runnable job) throws InterruptedException {
+        if (job instanceof JCSCachedTileLoaderJob) {
+            final JCSCachedTileLoaderJob<?, ?> jcsJob = (JCSCachedTileLoaderJob<?, ?>) job;
+            Semaphore limit = getSemaphore(jcsJob);
+            if (limit != null) {
+                limit.acquire();
+                jcsJob.setFinishedTask(new Runnable() {
+                    @Override
+                    public void run() {
+                        releaseSemaphore(jcsJob);
+                    }
+                });
+            }
+        }
+    }
+
+    private boolean tryAcquireSemaphore(final JCSCachedTileLoaderJob<?, ?> job) {
+        boolean ret = true;
+        Semaphore limit = getSemaphore(job);
+        if (limit != null) {
+            ret = limit.tryAcquire();
+            if (ret) {
+                job.setFinishedTask(new Runnable() {
+                    @Override
+                    public void run() {
+                        releaseSemaphore(job);
+                    }
+                });
+            }
+        }
+        return ret;
+    }
+
+    private void releaseSemaphore(JCSCachedTileLoaderJob<?, ?> job) {
+        Semaphore limit = getSemaphore(job);
+        if (limit != null) {
+            limit.release();
+            if (limit.availablePermits() > hostLimit) {
+                Main.warn("More permits than it should be");
+            }
+        }
+    }
+}
diff --git a/src/org/openstreetmap/josm/data/cache/ICachedLoaderJob.java b/src/org/openstreetmap/josm/data/cache/ICachedLoaderJob.java
index 4fd24c4..16afa3f 100644
--- a/src/org/openstreetmap/josm/data/cache/ICachedLoaderJob.java
+++ b/src/org/openstreetmap/josm/data/cache/ICachedLoaderJob.java
@@ -1,11 +1,11 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.cache;
 
+import java.io.IOException;
 import java.net.URL;
 
-
 /**
- * 
+ *
  * @author Wiktor Niesiobędzki
  *
  * @param <K> cache key type
@@ -13,35 +13,37 @@ import java.net.URL;
 public interface ICachedLoaderJob<K> {
     /**
      * returns cache entry key
-     * 
-     * @param tile
+     *
      * @return cache key for tile
      */
-    public K getCacheKey();
+    K getCacheKey();
 
     /**
      * method to get download URL for Job
      * @return URL that should be fetched
-     * 
+     * @throws IOException when could not determine the URL of the tile
+     *
      */
-    public URL getUrl();
+    URL getUrl() throws IOException;
+
     /**
      * implements the main algorithm for fetching
      */
-    public void run();
+    void run();
 
     /**
      * fetches object from cache, or returns null when object is not found
-     * 
+     *
      * @return filled tile with data or null when no cache entry found
      */
-    public CacheEntry get();
+    CacheEntry get();
 
     /**
-     * Submit job for background fetch, and listener will be
-     * fed with value object
-     * 
-     * @param listener
+     * Submit job for background fetch, and listener will be fed with value object
+     *
+     * @param listener cache loader listener
+     * @param force true if the load should skip all the caches (local & remote)
+     * @throws IOException on failure from getUrl() call
      */
-    public void submit(ICachedLoaderListener listener);
+    void submit(ICachedLoaderListener listener, boolean force) throws IOException;
 }
diff --git a/src/org/openstreetmap/josm/data/cache/ICachedLoaderListener.java b/src/org/openstreetmap/josm/data/cache/ICachedLoaderListener.java
index fe26c09..ef1d9d5 100644
--- a/src/org/openstreetmap/josm/data/cache/ICachedLoaderListener.java
+++ b/src/org/openstreetmap/josm/data/cache/ICachedLoaderListener.java
@@ -5,22 +5,22 @@ public interface ICachedLoaderListener {
 
     /**
      * Result of download
-     *
      */
     enum LoadResult {
         SUCCESS,
         FAILURE,
-        REJECTED
+        CANCELED
     }
+
     /**
      * Will be called when K object processed. The result might be:
      * LoadResult.SUCCESS when object was fetched
      * LoadResult.FAILURE when there was a failure during download
      * LoadResult.REJECTED when job was rejected because of full queue
      *
-     * @param data
-     * @param result
+     * @param data cache entry contents
+     * @param attributes cache entry attributes
+     * @param result load result (success, failure, canceled)
      */
-    public void loadingFinished(CacheEntry data, LoadResult result);
-
+    void loadingFinished(CacheEntry data, CacheEntryAttributes attributes, LoadResult result);
 }
diff --git a/src/org/openstreetmap/josm/data/cache/JCSCacheManager.java b/src/org/openstreetmap/josm/data/cache/JCSCacheManager.java
index 234b128..c9456bc 100644
--- a/src/org/openstreetmap/josm/data/cache/JCSCacheManager.java
+++ b/src/org/openstreetmap/josm/data/cache/JCSCacheManager.java
@@ -14,7 +14,8 @@ import java.util.logging.Logger;
 
 import org.apache.commons.jcs.access.CacheAccess;
 import org.apache.commons.jcs.auxiliary.AuxiliaryCache;
-import org.apache.commons.jcs.auxiliary.disk.indexed.IndexedDiskCache;
+import org.apache.commons.jcs.auxiliary.AuxiliaryCacheFactory;
+import org.apache.commons.jcs.auxiliary.disk.behavior.IDiskCacheAttributes;
 import org.apache.commons.jcs.auxiliary.disk.indexed.IndexedDiskCacheAttributes;
 import org.apache.commons.jcs.auxiliary.disk.indexed.IndexedDiskCacheFactory;
 import org.apache.commons.jcs.engine.CompositeCacheAttributes;
@@ -33,13 +34,13 @@ import org.openstreetmap.josm.data.preferences.IntegerProperty;
  * Static configuration for now assumes some small LRU cache in memory and larger LRU cache on disk
  * @since 8168
  */
-public class JCSCacheManager {
-    private static final Logger log = FeatureAdapter.getLogger(JCSCacheManager.class.getCanonicalName());
+public final class JCSCacheManager {
+    private static final Logger LOG = FeatureAdapter.getLogger(JCSCacheManager.class.getCanonicalName());
 
     private static volatile CompositeCacheManager cacheManager = null;
-    private static long maxObjectTTL        = Long.MAX_VALUE;
+    private static long maxObjectTTL        = -1;
     private static final String PREFERENCE_PREFIX = "jcs.cache";
-    private static final IndexedDiskCacheFactory diskCacheFactory = new IndexedDiskCacheFactory();
+    private static final AuxiliaryCacheFactory diskCacheFactory = new IndexedDiskCacheFactory();
     private static FileLock cacheDirLock = null;
 
     /**
@@ -47,28 +48,32 @@ public class JCSCacheManager {
      */
     public static final IntegerProperty DEFAULT_MAX_OBJECTS_IN_MEMORY  = new IntegerProperty(PREFERENCE_PREFIX + ".max_objects_in_memory", 1000);
 
+    private JCSCacheManager() {
+        // Hide implicit public constructor for utility classes
+    }
+
     @SuppressWarnings("resource")
     private static void initialize() throws IOException {
         File cacheDir = new File(Main.pref.getCacheDirectory(), "jcs");
 
-        if ((!cacheDir.exists() && !cacheDir.mkdirs()))
+        if (!cacheDir.exists() && !cacheDir.mkdirs())
             throw new IOException("Cannot access cache directory");
 
         File cacheDirLockPath = new File(cacheDir, ".lock");
-        if (!cacheDirLockPath.exists())
-            cacheDirLockPath.createNewFile();
+        if (!cacheDirLockPath.exists() && !cacheDirLockPath.createNewFile()) {
+            LOG.log(Level.WARNING, "Cannot create cache dir lock file");
+        }
         cacheDirLock = new FileOutputStream(cacheDirLockPath).getChannel().tryLock();
 
         if (cacheDirLock == null)
-            log.log(Level.WARNING, "Cannot lock cache directory. Will not use disk cache");
+            LOG.log(Level.WARNING, "Cannot lock cache directory. Will not use disk cache");
 
         // raising logging level gives ~500x performance gain
         // http://westsworld.dk/blog/2008/01/jcs-and-performance/
-        Logger jcsLog = Logger.getLogger("org.apache.commons.jcs");
+        final Logger jcsLog = Logger.getLogger("org.apache.commons.jcs");
         jcsLog.setLevel(Level.INFO);
         jcsLog.setUseParentHandlers(false);
-        //Logger.getLogger("org.apache.common").setUseParentHandlers(false);
-        // we need a separate handler from Main's, as we  downgrade LEVEL.INFO to DEBUG level
+        // we need a separate handler from Main's, as we downgrade LEVEL.INFO to DEBUG level
         jcsLog.addHandler(new Handler() {
             @Override
             public void publish(LogRecord record) {
@@ -87,31 +92,31 @@ public class JCSCacheManager {
 
             @Override
             public void flush() {
+                // nothing to be done on flush
             }
 
             @Override
             public void close() {
+                // nothing to be done on close
             }
         });
 
-
-        CompositeCacheManager cm  = CompositeCacheManager.getUnconfiguredInstance();
         // this could be moved to external file
         Properties props = new Properties();
         // these are default common to all cache regions
         // use of auxiliary cache and sizing of the caches is done with giving proper geCache(...) params
-        props.setProperty("jcs.default.cacheattributes",                            org.apache.commons.jcs.engine.CompositeCacheAttributes.class.getCanonicalName());
-        props.setProperty("jcs.default.cacheattributes.MaxObjects",                 DEFAULT_MAX_OBJECTS_IN_MEMORY.get().toString());
-        props.setProperty("jcs.default.cacheattributes.UseMemoryShrinker",          "true");
-        props.setProperty("jcs.default.cacheattributes.DiskUsagePatternName",       "UPDATE"); // store elements on disk on put
-        props.setProperty("jcs.default.elementattributes",                          CacheEntryAttributes.class.getCanonicalName());
-        props.setProperty("jcs.default.elementattributes.IsEternal",                "false");
-        props.setProperty("jcs.default.elementattributes.MaxLife",                  Long.toString(maxObjectTTL));
-        props.setProperty("jcs.default.elementattributes.IdleTime",                 Long.toString(maxObjectTTL));
-        props.setProperty("jcs.default.elementattributes.IsSpool",                  "true");
+        props.setProperty("jcs.default.cacheattributes",                      CompositeCacheAttributes.class.getCanonicalName());
+        props.setProperty("jcs.default.cacheattributes.MaxObjects",           DEFAULT_MAX_OBJECTS_IN_MEMORY.get().toString());
+        props.setProperty("jcs.default.cacheattributes.UseMemoryShrinker",    "true");
+        props.setProperty("jcs.default.cacheattributes.DiskUsagePatternName", "UPDATE"); // store elements on disk on put
+        props.setProperty("jcs.default.elementattributes",                    CacheEntryAttributes.class.getCanonicalName());
+        props.setProperty("jcs.default.elementattributes.IsEternal",          "false");
+        props.setProperty("jcs.default.elementattributes.MaxLife",            Long.toString(maxObjectTTL));
+        props.setProperty("jcs.default.elementattributes.IdleTime",           Long.toString(maxObjectTTL));
+        props.setProperty("jcs.default.elementattributes.IsSpool",            "true");
+        CompositeCacheManager cm = CompositeCacheManager.getUnconfiguredInstance();
         cm.configure(props);
         cacheManager = cm;
-
     }
 
     /**
@@ -120,7 +125,7 @@ public class JCSCacheManager {
      * @return cache access object
      * @throws IOException if directory is not found
      */
-    public static <K,V> CacheAccess<K, V> getCache(String cacheName) throws IOException {
+    public static <K, V> CacheAccess<K, V> getCache(String cacheName) throws IOException {
         return getCache(cacheName, DEFAULT_MAX_OBJECTS_IN_MEMORY.get().intValue(), 0, null);
     }
 
@@ -128,12 +133,13 @@ public class JCSCacheManager {
      * Returns configured cache object with defined limits of memory cache and disk cache
      * @param cacheName         region name
      * @param maxMemoryObjects  number of objects to keep in memory
-     * @param maxDiskObjects    number of objects to keep on disk (if cachePath provided)
+     * @param maxDiskObjects    maximum size of the objects stored on disk in kB
      * @param cachePath         path to disk cache. if null, no disk cache will be created
      * @return cache access object
      * @throws IOException if directory is not found
      */
-    public static <K,V> CacheAccess<K, V> getCache(String cacheName, int maxMemoryObjects, int maxDiskObjects, String cachePath) throws IOException {
+    public static <K, V> CacheAccess<K, V> getCache(String cacheName, int maxMemoryObjects, int maxDiskObjects, String cachePath)
+            throws IOException {
         if (cacheManager != null)
             return getCacheInner(cacheName, maxMemoryObjects, maxDiskObjects, cachePath);
 
@@ -144,17 +150,21 @@ public class JCSCacheManager {
         }
     }
 
-
     @SuppressWarnings("unchecked")
-    private static <K,V> CacheAccess<K, V> getCacheInner(String cacheName, int maxMemoryObjects, int maxDiskObjects, String cachePath) {
+    private static <K, V> CacheAccess<K, V> getCacheInner(String cacheName, int maxMemoryObjects, int maxDiskObjects, String cachePath) {
         CompositeCache<K, V> cc = cacheManager.getCache(cacheName, getCacheAttributes(maxMemoryObjects));
 
         if (cachePath != null && cacheDirLock != null) {
-            IndexedDiskCacheAttributes diskAttributes = getDiskCacheAttributes(maxDiskObjects, cachePath);
+            IDiskCacheAttributes diskAttributes = getDiskCacheAttributes(maxDiskObjects, cachePath);
             diskAttributes.setCacheName(cacheName);
-            IndexedDiskCache<K, V> diskCache = diskCacheFactory.createCache(diskAttributes, cacheManager, null, new StandardSerializer());
-
-            cc.setAuxCaches(new AuxiliaryCache[]{diskCache});
+            try {
+                if (cc.getAuxCaches().length == 0) {
+                    AuxiliaryCache<K, V> diskCache = diskCacheFactory.createCache(diskAttributes, cacheManager, null, new StandardSerializer());
+                    cc.setAuxCaches(new AuxiliaryCache[]{diskCache});
+                }
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
         }
         return new CacheAccess<K, V>(cc);
     }
@@ -170,13 +180,14 @@ public class JCSCacheManager {
         }
     }
 
-    private static IndexedDiskCacheAttributes getDiskCacheAttributes(int maxDiskObjects, String cachePath) {
+    private static IDiskCacheAttributes getDiskCacheAttributes(int maxDiskObjects, String cachePath) {
         IndexedDiskCacheAttributes ret = new IndexedDiskCacheAttributes();
+        ret.setDiskLimitType(IDiskCacheAttributes.DiskLimitType.SIZE);
         ret.setMaxKeySize(maxDiskObjects);
         if (cachePath != null) {
             File path = new File(cachePath);
             if (!path.exists() && !path.mkdirs()) {
-                log.log(Level.WARNING, "Failed to create cache path: {0}", cachePath);
+                LOG.log(Level.WARNING, "Failed to create cache path: {0}", cachePath);
             } else {
                 ret.setDiskPath(path);
             }
diff --git a/src/org/openstreetmap/josm/data/cache/JCSCachedTileLoaderJob.java b/src/org/openstreetmap/josm/data/cache/JCSCachedTileLoaderJob.java
index b4a0fbd..b3c560e 100644
--- a/src/org/openstreetmap/josm/data/cache/JCSCachedTileLoaderJob.java
+++ b/src/org/openstreetmap/josm/data/cache/JCSCachedTileLoaderJob.java
@@ -1,22 +1,19 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.cache;
 
-import java.io.ByteArrayOutputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
-import java.io.InputStream;
 import java.net.HttpURLConnection;
 import java.net.URL;
 import java.net.URLConnection;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
 import java.util.Random;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.Executor;
 import java.util.concurrent.LinkedBlockingDeque;
-import java.util.concurrent.RejectedExecutionException;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 import java.util.logging.Level;
@@ -28,11 +25,13 @@ import org.openstreetmap.gui.jmapviewer.FeatureAdapter;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.cache.ICachedLoaderListener.LoadResult;
 import org.openstreetmap.josm.data.preferences.IntegerProperty;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
  * @author Wiktor Niesiobędzki
  *
  * @param <K> cache entry key type
+ * @param <V> cache value type
  *
  * Generic loader for HTTP based tiles. Uses custom attribute, to check, if entry has expired
  * according to HTTP headers sent with tile. If so, it tries to verify using Etags
@@ -53,55 +52,39 @@ public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements
     protected static final long EXPIRE_TIME_SERVER_LIMIT = 1000L * 60 * 60 * 24 * 28; // 4 weeks
     // Absolute expire time limit. Cached tiles that are older will not be used,
     // even if the refresh from the server fails.
-    protected static final long ABSOLUTE_EXPIRE_TIME_LIMIT = Long.MAX_VALUE; // unlimited
+    protected static final long ABSOLUTE_EXPIRE_TIME_LIMIT = 1000L * 60 * 60 * 24 * 365; // 1 year
 
     /**
      * maximum download threads that will be started
      */
     public static final IntegerProperty THREAD_LIMIT = new IntegerProperty("cache.jcs.max_threads", 10);
 
-    public static class LIFOQueue extends LinkedBlockingDeque<Runnable> {
-        public LIFOQueue(int capacity) {
-            super(capacity);
-        }
-
-        @Override
-        public boolean offer(Runnable t) {
-            return super.offerFirst(t);
-        }
-
-        @Override
-        public Runnable remove() {
-            return super.removeFirst();
-        }
-    }
-
-
     /*
-     * ThreadPoolExecutor starts new threads, until THREAD_LIMIT is reached. Then it puts tasks into LIFOQueue, which is fairly
-     * small, but we do not want a lot of outstanding tasks queued, but rather prefer the class consumer to resubmit the task, which are
-     * important right now.
+     * ThreadPoolExecutor starts new threads, until THREAD_LIMIT is reached. Then it puts tasks into LinkedBlockingDeque.
      *
-     * This way, if some task gets outdated (for example - user paned the map, and we do not want to download this tile any more),
-     * the task will not be resubmitted, and thus - never queued.
+     * The queue works FIFO, so one needs to take care about ordering of the entries submitted
      *
      * There is no point in canceling tasks, that are already taken by worker threads (if we made so much effort, we can at least cache
      * the response, so later it could be used). We could actually cancel what is in LIFOQueue, but this is a tradeoff between simplicity
      * and performance (we do want to have something to offer to worker threads before tasks will be resubmitted by class consumer)
      */
-    private static Executor DOWNLOAD_JOB_DISPATCHER = new ThreadPoolExecutor(
+
+    private static ThreadPoolExecutor DEFAULT_DOWNLOAD_JOB_DISPATCHER = new ThreadPoolExecutor(
             2, // we have a small queue, so threads will be quickly started (threads are started only, when queue is full)
             THREAD_LIMIT.get().intValue(), // do not this number of threads
             30, // keepalive for thread
             TimeUnit.SECONDS,
             // make queue of LIFO type - so recently requested tiles will be loaded first (assuming that these are which user is waiting to see)
-            new LIFOQueue(5)
+            new LinkedBlockingDeque<Runnable>(),
+            Utils.newThreadFactory("JCS-downloader-%d", Thread.NORM_PRIORITY)
             );
 
-    private static ConcurrentMap<String,Set<ICachedLoaderListener>> inProgress = new ConcurrentHashMap<>();
+
+
+    private static ConcurrentMap<String, Set<ICachedLoaderListener>> inProgress = new ConcurrentHashMap<>();
     private static ConcurrentMap<String, Boolean> useHead = new ConcurrentHashMap<>();
 
-    private long now; // when the job started
+    protected long now; // when the job started
 
     private ICacheAccess<K, V> cache;
     private ICacheElement<K, V> cacheElement;
@@ -112,22 +95,41 @@ public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements
     private int connectTimeout;
     private int readTimeout;
     private Map<String, String> headers;
+    private ThreadPoolExecutor downloadJobExecutor;
+    private Runnable finishTask;
+    private boolean force = false;
 
     /**
      * @param cache cache instance that we will work on
-     * @param headers
-     * @param readTimeout
-     * @param connectTimeout
+     * @param headers HTTP headers to be sent together with request
+     * @param readTimeout when connecting to remote resource
+     * @param connectTimeout when connecting to remote resource
+     * @param downloadJobExecutor that will be executing the jobs
      */
-    public JCSCachedTileLoaderJob(ICacheAccess<K,V> cache,
+    public JCSCachedTileLoaderJob(ICacheAccess<K, V> cache,
             int connectTimeout, int readTimeout,
-            Map<String, String> headers) {
+            Map<String, String> headers,
+            ThreadPoolExecutor downloadJobExecutor) {
 
         this.cache = cache;
         this.now = System.currentTimeMillis();
         this.connectTimeout = connectTimeout;
         this.readTimeout = readTimeout;
         this.headers = headers;
+        this.downloadJobExecutor = downloadJobExecutor;
+    }
+
+    /**
+     * @param cache cache instance that we will work on
+     * @param headers HTTP headers to be sent together with request
+     * @param readTimeout when connecting to remote resource
+     * @param connectTimeout when connecting to remote resource
+     */
+    public JCSCachedTileLoaderJob(ICacheAccess<K, V> cache,
+            int connectTimeout, int readTimeout,
+            Map<String, String> headers) {
+        this(cache, connectTimeout, readTimeout,
+                headers, DEFAULT_DOWNLOAD_JOB_DISPATCHER);
     }
 
     private void ensureCacheElement() {
@@ -146,7 +148,8 @@ public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements
     }
 
     @Override
-    public void submit(ICachedLoaderListener listener) {
+    public void submit(ICachedLoaderListener listener, boolean force) throws IOException {
+        this.force = force;
         boolean first = false;
         URL url = getUrl();
         String deduplicationKey = null;
@@ -156,7 +159,7 @@ public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements
         }
         if (deduplicationKey == null) {
             log.log(Level.WARNING, "No url returned for: {0}, skipping", getCacheKey());
-            return;
+            throw new IllegalArgumentException("No url returned");
         }
         synchronized (inProgress) {
             Set<ICachedLoaderListener> newListeners = inProgress.get(deduplicationKey);
@@ -168,46 +171,19 @@ public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements
             newListeners.add(listener);
         }
 
-        if (first) {
-            ensureCacheElement();
-            if (cacheElement != null && isCacheElementValid() && (isObjectLoadable())) {
-                // we got something in cache, and it's valid, so lets return it
-                log.log(Level.FINE, "JCS - Returning object from cache: {0}", getCacheKey());
-                finishLoading(LoadResult.SUCCESS);
-                return;
-            }
-            // object not in cache, so submit work to separate thread
-            try {
-                if (executionGuard()) {
-                    // use getter method, so subclasses may override executors, to get separate thread pool
-                    getDownloadExecutor().execute(this);
-                } else {
-                    log.log(Level.FINE, "JCS - guard rejected job for: {0}", getCacheKey());
-                    finishLoading(LoadResult.REJECTED);
-                }
-            } catch (RejectedExecutionException e) {
-                // queue was full, try again later
-                log.log(Level.FINE, "JCS - rejected job for: {0}", getCacheKey());
-                finishLoading(LoadResult.REJECTED);
-            }
+        if (first || force) {
+            // submit all jobs to separate thread, so calling thread is not blocked with IO when loading from disk
+            downloadJobExecutor.execute(this);
         }
     }
 
     /**
-     * Guard method for execution. If guard returns true, the execution of download task will commence
-     * otherwise, execution will finish with result LoadResult.REJECTED
-     *
-     * It is responsibility of the overriding class, to handle properly situation in finishLoading class
-     * @return
-     */
-    protected boolean executionGuard() {
-        return true;
-    }
-
-    /**
      * This method is run when job has finished
      */
     protected void executionFinished() {
+        if (finishTask != null) {
+            finishTask.run();
+        }
     }
 
     /**
@@ -215,38 +191,45 @@ public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements
      * @return checks if object from cache has sufficient data to be returned
      */
     protected boolean isObjectLoadable() {
+        if (cacheData == null) {
+            return false;
+        }
         byte[] content = cacheData.getContent();
         return content != null && content.length > 0;
     }
 
     /**
+     * Simple implementation. All errors should be cached as empty. Though some JDK (JDK8 on Windows for example)
+     * doesn't return 4xx error codes, instead they do throw an FileNotFoundException or IOException
      *
-     * @return cache object as empty, regardless of what remote resource has returned (ex. based on headers)
+     * @return true if we should put empty object into cache, regardless of what remote resource has returned
      */
     protected boolean cacheAsEmpty() {
-        return false;
+        return attributes.getResponseCode() < 500;
     }
 
     /**
      * @return key under which discovered server settings will be kept
      */
     protected String getServerKey() {
-        return getUrl().getHost();
+        return getUrlNoException().getHost();
     }
 
-    /**
-     * this needs to be non-static, so it can be overridden by subclasses
-     */
-    protected Executor getDownloadExecutor() {
-        return DOWNLOAD_JOB_DISPATCHER;
-    }
-
-
+    @Override
     public void run() {
         final Thread currentThread = Thread.currentThread();
         final String oldName = currentThread.getName();
-        currentThread.setName("JCS Downloading: " + getUrl());
+        currentThread.setName("JCS Downloading: " + getUrlNoException());
+        ensureCacheElement();
         try {
+            // try to fetch from cache
+            if (!force && cacheElement != null && isCacheElementValid() && isObjectLoadable()) {
+                // we got something in cache, and it's valid, so lets return it
+                log.log(Level.FINE, "JCS - Returning object from cache: {0}", getCacheKey());
+                finishLoading(LoadResult.SUCCESS);
+                return;
+            }
+
             // try to load object from remote resource
             if (loadObject()) {
                 finishLoading(LoadResult.SUCCESS);
@@ -255,7 +238,7 @@ public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements
                 if (isObjectLoadable()) {
                     // try to get stale entry in cache
                     finishLoading(LoadResult.SUCCESS);
-                    log.log(Level.FINE, "JCS - found stale object in cache: {0}", getUrl());
+                    log.log(Level.FINE, "JCS - found stale object in cache: {0}", getUrlNoException());
                 } else {
                     // failed completely
                     finishLoading(LoadResult.FAILURE);
@@ -267,32 +250,21 @@ public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements
         }
     }
 
-
     private void finishLoading(LoadResult result) {
         Set<ICachedLoaderListener> listeners = null;
         synchronized (inProgress) {
-            listeners = inProgress.remove(getUrl().toString());
+            listeners = inProgress.remove(getUrlNoException().toString());
         }
         if (listeners == null) {
-            log.log(Level.WARNING, "Listener not found for URL: {0}. Listener not notified!", getUrl());
+            log.log(Level.WARNING, "Listener not found for URL: {0}. Listener not notified!", getUrlNoException());
             return;
         }
-        try {
-            for (ICachedLoaderListener l: listeners) {
-                l.loadingFinished(cacheData, result);
-            }
-        } catch (Exception e) {
-            log.log(Level.WARNING, "JCS - Error while loading object from cache: {0}; {1}", new Object[]{e.getMessage(), getUrl()});
-            Main.warn(e);
-            for (ICachedLoaderListener l: listeners) {
-                l.loadingFinished(cacheData, LoadResult.FAILURE);
-            }
-
+        for (ICachedLoaderListener l: listeners) {
+            l.loadingFinished(cacheData, attributes, result);
         }
-
     }
 
-    private boolean isCacheElementValid() {
+    protected boolean isCacheElementValid() {
         long expires = attributes.getExpirationTime();
 
         // check by expire date set by server
@@ -301,15 +273,18 @@ public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements
             // that is too large)
             expires = Math.min(expires, attributes.getCreateTime() + EXPIRE_TIME_SERVER_LIMIT);
             if (now > expires) {
-                log.log(Level.FINE, "JCS - Object {0} has expired -> valid to {1}, now is: {2}", new Object[]{getUrl(), Long.toString(expires), Long.toString(now)});
+                log.log(Level.FINE, "JCS - Object {0} has expired -> valid to {1}, now is: {2}",
+                        new Object[]{getUrlNoException(), Long.toString(expires), Long.toString(now)});
                 return false;
             }
-        } else {
+        } else if (attributes.getLastModification() > 0 &&
+                now - attributes.getLastModification() > DEFAULT_EXPIRE_TIME) {
             // check by file modification date
-            if (now - attributes.getLastModification() > DEFAULT_EXPIRE_TIME) {
-                log.log(Level.FINE, "JCS - Object has expired, maximum file age reached {0}", getUrl());
-                return false;
-            }
+            log.log(Level.FINE, "JCS - Object has expired, maximum file age reached {0}", getUrlNoException());
+            return false;
+        } else if (now - attributes.getCreateTime() > DEFAULT_EXPIRE_TIME) {
+            log.log(Level.FINE, "JCS - Object has expired, maximum time since object creation reached {0}", getUrlNoException());
+            return false;
         }
         return true;
     }
@@ -319,6 +294,9 @@ public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements
      */
 
     private boolean loadObject() {
+        if (attributes == null) {
+            attributes = new CacheEntryAttributes();
+        }
         try {
             // if we have object in cache, and host doesn't support If-Modified-Since nor If-None-Match
             // then just use HEAD request and check returned values
@@ -328,7 +306,8 @@ public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements
                 log.log(Level.FINE, "JCS - cache entry verified using HEAD request: {0}", getUrl());
                 return true;
             }
-            URLConnection urlConn = getURLConnection();
+
+            HttpURLConnection urlConn = getURLConnection(getUrl());
 
             if (isObjectLoadable()  &&
                     (now - attributes.getLastModification()) <= ABSOLUTE_EXPIRE_TIME_LIMIT) {
@@ -337,69 +316,122 @@ public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements
             if (isObjectLoadable() && attributes.getEtag() != null) {
                 urlConn.addRequestProperty("If-None-Match", attributes.getEtag());
             }
-            if (urlConn instanceof HttpURLConnection && ((HttpURLConnection)urlConn).getResponseCode() == 304) {
+
+            log.log(Level.INFO, "GET {0} -> {1}", new Object[]{getUrl(), urlConn.getResponseCode()});
+
+            // follow redirects
+            for (int i = 0; i < 5; i++) {
+                if (urlConn.getResponseCode() == 302) {
+                    urlConn = getURLConnection(new URL(urlConn.getHeaderField("Location")));
+                } else {
+                    break;
+                }
+            }
+            if (urlConn.getResponseCode() == 304) {
                 // If isModifiedSince or If-None-Match has been set
                 // and the server answers with a HTTP 304 = "Not Modified"
                 log.log(Level.FINE, "JCS - IfModifiedSince/Etag test: local version is up to date: {0}", getUrl());
                 return true;
-            } else if (isObjectLoadable()) {
-                // we have an object in cache, but we haven't received 304 resposne code
-                // check if we should use HEAD request to verify
-                if((attributes.getEtag() != null && attributes.getEtag().equals(urlConn.getRequestProperty("ETag"))) ||
-                        attributes.getLastModification() == urlConn.getLastModified()) {
-                    // we sent ETag or If-Modified-Since, but didn't get 304 response code
-                    // for further requests - use HEAD
-                    String serverKey = getServerKey();
-                    log.log(Level.INFO, "JCS - Host: {0} found not to return 304 codes for If-Modifed-Since or If-None-Match headers", serverKey);
-                    useHead.put(serverKey, Boolean.TRUE);
-                }
+            } else if (isObjectLoadable() // we have an object in cache, but we haven't received 304 resposne code
+                    && (
+                            (attributes.getEtag() != null && attributes.getEtag().equals(urlConn.getRequestProperty("ETag"))) ||
+                            attributes.getLastModification() == urlConn.getLastModified())
+                    ) {
+                // we sent ETag or If-Modified-Since, but didn't get 304 response code
+                // for further requests - use HEAD
+                String serverKey = getServerKey();
+                log.log(Level.INFO, "JCS - Host: {0} found not to return 304 codes for If-Modifed-Since or If-None-Match headers",
+                        serverKey);
+                useHead.put(serverKey, Boolean.TRUE);
             }
 
+
             attributes = parseHeaders(urlConn);
 
             for (int i = 0; i < 5; ++i) {
-                if (urlConn instanceof HttpURLConnection && ((HttpURLConnection)urlConn).getResponseCode() == 503) {
+                if (urlConn.getResponseCode() == 503) {
                     Thread.sleep(5000+(new Random()).nextInt(5000));
                     continue;
                 }
-                byte[] raw = read(urlConn);
 
-                if (!cacheAsEmpty() && raw != null && raw.length > 0) {
+                attributes.setResponseCode(urlConn.getResponseCode());
+                byte[] raw;
+                if (urlConn.getResponseCode() == 200) {
+                    raw = Utils.readBytesFromStream(urlConn.getInputStream());
+                } else {
+                    raw = new byte[]{};
+                }
+
+                if (isResponseLoadable(urlConn.getHeaderFields(), urlConn.getResponseCode(), raw)) {
+                    // we need to check cacheEmpty, so for cases, when data is returned, but we want to store
+                    // as empty (eg. empty tile images) to save some space
                     cacheData = createCacheEntry(raw);
                     cache.put(getCacheKey(), cacheData, attributes);
                     log.log(Level.FINE, "JCS - downloaded key: {0}, length: {1}, url: {2}",
                             new Object[] {getCacheKey(), raw.length, getUrl()});
                     return true;
-                } else  {
+                } else if (cacheAsEmpty()) {
                     cacheData = createCacheEntry(new byte[]{});
                     cache.put(getCacheKey(), cacheData, attributes);
                     log.log(Level.FINE, "JCS - Caching empty object {0}", getUrl());
                     return true;
+                } else {
+                    log.log(Level.FINE, "JCS - failure during load - reponse is not loadable nor cached as empty");
+                    return false;
                 }
             }
         } catch (FileNotFoundException e) {
-            log.log(Level.FINE, "JCS - Caching empty object as server returned 404 for: {0}", getUrl());
-            cache.put(getCacheKey(), createCacheEntry(new byte[]{}), attributes);
-            return handleNotFound();
+            log.log(Level.FINE, "JCS - Caching empty object as server returned 404 for: {0}", getUrlNoException());
+            attributes.setResponseCode(404);
+            attributes.setErrorMessage(e.toString());
+            boolean doCache = isResponseLoadable(null, 404, null) || cacheAsEmpty();
+            if (doCache) {
+                cacheData = createCacheEntry(new byte[]{});
+                cache.put(getCacheKey(), cacheData, attributes);
+            }
+            return doCache;
+        } catch (IOException e) {
+            log.log(Level.FINE, "JCS - IOExecption during communication with server for: {0}", getUrlNoException());
+            attributes.setErrorMessage(e.toString());
+            attributes.setResponseCode(499); // set dummy error code
+            boolean doCache = isResponseLoadable(null, 499, null) || cacheAsEmpty(); //generic 499 error code returned
+            if (doCache) {
+                cacheData = createCacheEntry(new byte[]{});
+                cache.put(getCacheKey(), createCacheEntry(new byte[]{}), attributes);
+            }
+            return doCache;
         } catch (Exception e) {
-            log.log(Level.WARNING, "JCS - Exception during download {0}",  getUrl());
+            attributes.setErrorMessage(e.toString());
+            log.log(Level.WARNING, "JCS - Exception during download {0}",  getUrlNoException());
             Main.warn(e);
         }
-        log.log(Level.WARNING, "JCS - Silent failure during download: {0}", getUrl());
+        log.log(Level.WARNING, "JCS - Silent failure during download: {0}", getUrlNoException());
         return false;
 
     }
 
     /**
-     *  @return if we should treat this object as properly loaded
+     * Check if the object is loadable. This means, if the data will be parsed, and if this response
+     * will finish as successful retrieve.
+     *
+     * This simple implementation doesn't load empty response, nor client (4xx) and server (5xx) errors
+     *
+     * @param headerFields headers sent by server
+     * @param responseCode http status code
+     * @param raw data read from server
+     * @return true if object should be cached and returned to listener
      */
-    protected abstract boolean handleNotFound();
+    protected boolean isResponseLoadable(Map<String, List<String>> headerFields, int responseCode, byte[] raw) {
+        if (raw == null || raw.length == 0 || responseCode >= 400) {
+            return false;
+        }
+        return true;
+    }
 
     protected abstract V createCacheEntry(byte[] content);
 
-    private CacheEntryAttributes parseHeaders(URLConnection urlConn) {
+    protected CacheEntryAttributes parseHeaders(URLConnection urlConn) {
         CacheEntryAttributes ret = new CacheEntryAttributes();
-        ret.setNoTileAtZoom("no-tile".equals(urlConn.getHeaderField("X-VE-Tile-Info")));
 
         Long lng = urlConn.getExpiration();
         if (lng.equals(0L)) {
@@ -413,7 +445,12 @@ public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements
                         }
                     }
                 }
-            } catch (NumberFormatException e) {} //ignore malformed Cache-Control headers
+            } catch (NumberFormatException e) {
+                // ignore malformed Cache-Control headers
+                if (Main.isTraceEnabled()) {
+                    Main.trace(e.getMessage());
+                }
+            }
         }
 
         ret.setExpirationTime(lng);
@@ -422,46 +459,71 @@ public abstract class JCSCachedTileLoaderJob<K, V extends CacheEntry> implements
         return ret;
     }
 
-    private HttpURLConnection getURLConnection() throws IOException {
-        HttpURLConnection urlConn = (HttpURLConnection) getUrl().openConnection();
+    private HttpURLConnection getURLConnection(URL url) throws IOException {
+        HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
         urlConn.setRequestProperty("Accept", "text/html, image/png, image/jpeg, image/gif, */*");
         urlConn.setReadTimeout(readTimeout); // 30 seconds read timeout
         urlConn.setConnectTimeout(connectTimeout);
-        for(Map.Entry<String, String> e: headers.entrySet()) {
-            urlConn.setRequestProperty(e.getKey(), e.getValue());
+        if (headers != null) {
+            for (Map.Entry<String, String> e: headers.entrySet()) {
+                urlConn.setRequestProperty(e.getKey(), e.getValue());
+            }
+        }
+
+        if (force) {
+            urlConn.setUseCaches(false);
         }
         return urlConn;
     }
 
     private boolean isCacheValidUsingHead() throws IOException {
-        HttpURLConnection urlConn = (HttpURLConnection) getUrl().openConnection();
+        HttpURLConnection urlConn = getURLConnection(getUrl());
         urlConn.setRequestMethod("HEAD");
+        for (int i = 0; i < 5; i++) {
+            if (urlConn.getResponseCode() == 302) {
+                urlConn = getURLConnection(new URL(urlConn.getHeaderField("Location")));
+            } else {
+                break;
+            }
+        }
         long lastModified = urlConn.getLastModified();
-        return (
-                (attributes.getEtag() != null && attributes.getEtag().equals(urlConn.getRequestProperty("ETag"))) ||
-                (lastModified != 0 && lastModified <= attributes.getLastModification())
-                );
+        return (attributes.getEtag() != null && attributes.getEtag().equals(urlConn.getRequestProperty("ETag"))) ||
+                (lastModified != 0 && lastModified <= attributes.getLastModification());
+    }
+
+    /**
+     * TODO: move to JobFactory
+     * cancels all outstanding tasks in the queue.
+     */
+    public void cancelOutstandingTasks() {
+        for (Runnable r: downloadJobExecutor.getQueue()) {
+            if (downloadJobExecutor.remove(r) && r instanceof JCSCachedTileLoaderJob) {
+                ((JCSCachedTileLoaderJob<?, ?>) r).handleJobCancellation();
+            }
+        }
     }
 
-    private static byte[] read(URLConnection urlConn) throws IOException {
-        InputStream input = urlConn.getInputStream();
+    /**
+     * Sets a job, that will be run, when job will finish execution
+     * @param runnable that will be executed
+     */
+    public void setFinishedTask(Runnable runnable) {
+        this.finishTask = runnable;
+
+    }
+
+    /**
+     * Marks this job as canceled
+     */
+    public void handleJobCancellation() {
+        finishLoading(LoadResult.CANCELED);
+    }
+
+    private URL getUrlNoException() {
         try {
-            ByteArrayOutputStream bout = new ByteArrayOutputStream(input.available());
-            byte[] buffer = new byte[2048];
-            boolean finished = false;
-            do {
-                int read = input.read(buffer);
-                if (read >= 0) {
-                    bout.write(buffer, 0, read);
-                } else {
-                    finished = true;
-                }
-            } while (!finished);
-            if (bout.size() == 0)
-                return null;
-            return bout.toByteArray();
-        } finally {
-            input.close();
+            return getUrl();
+        } catch (IOException e) {
+            return null;
         }
     }
 }
diff --git a/src/org/openstreetmap/josm/data/conflict/Conflict.java b/src/org/openstreetmap/josm/data/conflict/Conflict.java
index a8518aa..73d023a 100644
--- a/src/org/openstreetmap/josm/data/conflict/Conflict.java
+++ b/src/org/openstreetmap/josm/data/conflict/Conflict.java
@@ -102,7 +102,7 @@ public class  Conflict<T extends OsmPrimitive> {
         Conflict<T> other = (Conflict<T>) obj;
         if (my != other.my)
             return false;
-        if(their != other.their)
+        if (their != other.their)
             return false;
         return true;
     }
diff --git a/src/org/openstreetmap/josm/data/conflict/ConflictCollection.java b/src/org/openstreetmap/josm/data/conflict/ConflictCollection.java
index e8a97c9..aa5eaa2 100644
--- a/src/org/openstreetmap/josm/data/conflict/ConflictCollection.java
+++ b/src/org/openstreetmap/josm/data/conflict/ConflictCollection.java
@@ -25,7 +25,7 @@ import org.openstreetmap.josm.tools.Utils;
  * <pre>
  *    ConflictCollection conflictCollection = ....
  *
- *    for(Conflict c : conflictCollection) {
+ *    for (Conflict c : conflictCollection) {
  *      // do something
  *    }
  * </pre>
@@ -37,7 +37,7 @@ import org.openstreetmap.josm.tools.Utils;
  *   <li>{@link #removeConflictListener(IConflictListener)}</li>
  * </ul>
  */
-public class ConflictCollection implements Iterable<Conflict<? extends OsmPrimitive>>{
+public class ConflictCollection implements Iterable<Conflict<? extends OsmPrimitive>> {
     private final List<Conflict<? extends OsmPrimitive>> conflicts;
     private CopyOnWriteArrayList<IConflictListener> listeners;
 
@@ -131,7 +131,7 @@ public class ConflictCollection implements Iterable<Conflict<? extends OsmPrimit
      */
     public void add(Collection<Conflict<?>> otherConflicts) {
         if (otherConflicts == null) return;
-        for(Conflict<?> c : otherConflicts) {
+        for (Conflict<?> c : otherConflicts) {
             addConflict(c);
         }
         fireConflictAdded();
@@ -166,7 +166,7 @@ public class ConflictCollection implements Iterable<Conflict<? extends OsmPrimit
      */
     public void remove(OsmPrimitive my) {
         Iterator<Conflict<?>> it = iterator();
-        while(it.hasNext()) {
+        while (it.hasNext()) {
             if (it.next().isMatchingMy(my)) {
                 it.remove();
             }
@@ -183,7 +183,7 @@ public class ConflictCollection implements Iterable<Conflict<? extends OsmPrimit
      * if no such conflict exists.
      */
     public Conflict<?> getConflictForMy(OsmPrimitive my) {
-        for(Conflict<?> c : conflicts) {
+        for (Conflict<?> c : conflicts) {
             if (c.isMatchingMy(my))
                 return c;
         }
@@ -198,7 +198,7 @@ public class ConflictCollection implements Iterable<Conflict<? extends OsmPrimit
      * if no such conflict exists.
      */
     public Conflict<?> getConflictForTheir(OsmPrimitive their) {
-        for(Conflict<?> c : conflicts) {
+        for (Conflict<?> c : conflicts) {
             if (c.isMatchingTheir(their))
                 return c;
         }
@@ -242,7 +242,7 @@ public class ConflictCollection implements Iterable<Conflict<? extends OsmPrimit
      */
     public void removeForMy(OsmPrimitive my) {
         Iterator<Conflict<?>> it = iterator();
-        while(it.hasNext()) {
+        while (it.hasNext()) {
             if (it.next().isMatchingMy(my)) {
                 it.remove();
             }
@@ -256,7 +256,7 @@ public class ConflictCollection implements Iterable<Conflict<? extends OsmPrimit
      */
     public void removeForTheir(OsmPrimitive their) {
         Iterator<Conflict<?>> it = iterator();
-        while(it.hasNext()) {
+        while (it.hasNext()) {
             if (it.next().isMatchingTheir(their)) {
                 it.remove();
             }
@@ -381,4 +381,35 @@ public class ConflictCollection implements Iterable<Conflict<? extends OsmPrimit
     public final Collection<Conflict<? extends OsmPrimitive>> getRelationConflicts() {
         return Utils.filter(conflicts, RELATION_FILTER_PREDICATE);
     }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((conflicts == null) ? 0 : conflicts.hashCode());
+        result = prime * result + ((listeners == null) ? 0 : listeners.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null)
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        ConflictCollection other = (ConflictCollection) obj;
+        if (conflicts == null) {
+            if (other.conflicts != null)
+                return false;
+        } else if (!conflicts.equals(other.conflicts))
+            return false;
+        if (listeners == null) {
+            if (other.listeners != null)
+                return false;
+        } else if (!listeners.equals(other.listeners))
+            return false;
+        return true;
+    }
 }
diff --git a/src/org/openstreetmap/josm/data/conflict/IConflictListener.java b/src/org/openstreetmap/josm/data/conflict/IConflictListener.java
index b4843a1..d1466e5 100644
--- a/src/org/openstreetmap/josm/data/conflict/IConflictListener.java
+++ b/src/org/openstreetmap/josm/data/conflict/IConflictListener.java
@@ -2,6 +2,7 @@
 package org.openstreetmap.josm.data.conflict;
 
 public interface IConflictListener {
-    public void onConflictsAdded(ConflictCollection conflicts);
-    public void onConflictsRemoved(ConflictCollection conflicts);
+    void onConflictsAdded(ConflictCollection conflicts);
+
+    void onConflictsRemoved(ConflictCollection conflicts);
 }
diff --git a/src/org/openstreetmap/josm/data/coor/CachedLatLon.java b/src/org/openstreetmap/josm/data/coor/CachedLatLon.java
index 4f318f9..33497b1 100644
--- a/src/org/openstreetmap/josm/data/coor/CachedLatLon.java
+++ b/src/org/openstreetmap/josm/data/coor/CachedLatLon.java
@@ -8,24 +8,39 @@ import org.openstreetmap.josm.data.projection.Projection;
  * LatLon class that maintains a cache of projected EastNorth coordinates.
  *
  * This class is convenient to use, but has relatively high memory costs.
- * It keeps a pointer to the last known projection in order to detect projection
- * changes.
+ * It keeps a pointer to the last known projection in order to detect projection changes.
  *
  * Node and WayPoint have another, optimized, cache for projected coordinates.
  */
 public class CachedLatLon extends LatLon {
+
+    private static final long serialVersionUID = 1L;
+
     private EastNorth eastNorth;
     private transient Projection proj;
 
+    /**
+     * Constructs a new {@code CachedLatLon}.
+     * @param lat latitude
+     * @param lon longitude
+     */
     public CachedLatLon(double lat, double lon) {
         super(lat, lon);
     }
 
+    /**
+     * Constructs a new {@code CachedLatLon}.
+     * @param coor lat/lon
+     */
     public CachedLatLon(LatLon coor) {
         super(coor.lat(), coor.lon());
         proj = null;
     }
 
+    /**
+     * Constructs a new {@code CachedLatLon}.
+     * @param eastNorth easting/northing
+     */
     public CachedLatLon(EastNorth eastNorth) {
         super(Main.getProjection().eastNorth2latlon(eastNorth));
         proj = Main.getProjection();
@@ -38,19 +53,15 @@ public class CachedLatLon extends LatLon {
      * @return the internally cached east/north coordinates. null, if the globally defined projection is null
      */
     public final EastNorth getEastNorth() {
-        if(proj != Main.getProjection())
-        {
+        if (proj != Main.getProjection()) {
             proj = Main.getProjection();
             eastNorth = proj.latlon2eastNorth(this);
         }
         return eastNorth;
     }
-    @Override public String toString() {
-        return "CachedLatLon[lat="+lat()+",lon="+lon()+"]";
-    }
 
-    // Only for Node.get3892DebugInfo()
-    public Projection getProjection() {
-        return proj;
+    @Override
+    public String toString() {
+        return "CachedLatLon[lat="+lat()+",lon="+lon()+"]";
     }
 }
diff --git a/src/org/openstreetmap/josm/data/coor/CoordinateFormat.java b/src/org/openstreetmap/josm/data/coor/CoordinateFormat.java
index 1261e8e..c55226e 100644
--- a/src/org/openstreetmap/josm/data/coor/CoordinateFormat.java
+++ b/src/org/openstreetmap/josm/data/coor/CoordinateFormat.java
@@ -30,7 +30,7 @@ public enum CoordinateFormat {
     EAST_NORTH (tr("Projected Coordinates"));
 
     private String displayName;
-    private CoordinateFormat(String displayName) {
+    CoordinateFormat(String displayName) {
         this.displayName = displayName;
     }
 
diff --git a/src/org/openstreetmap/josm/data/coor/EastNorth.java b/src/org/openstreetmap/josm/data/coor/EastNorth.java
index fad7c92..6dba118 100644
--- a/src/org/openstreetmap/josm/data/coor/EastNorth.java
+++ b/src/org/openstreetmap/josm/data/coor/EastNorth.java
@@ -13,7 +13,7 @@ public class EastNorth extends Coordinate {
     private static final long serialVersionUID = 1L;
 
     public EastNorth(double east, double north) {
-        super(east,north);
+        super(east, north);
     }
 
     public double east() {
@@ -24,23 +24,67 @@ public class EastNorth extends Coordinate {
         return y;
     }
 
-    public EastNorth add(double dx, double dy) {
-        return new EastNorth(x+dx, y+dy);
+    /**
+     * Adds an offset to this {@link EastNorth} instance and returns the result.
+     * @param dEast The offset to add in east direction.
+     * @param dNorth The offset to add in north direction.
+     * @return The result.
+     */
+    public EastNorth add(double dEast, double dNorth) {
+        return new EastNorth(east()+dEast, north()+dNorth);
     }
 
+    /**
+     * Adds the coordinates of an other EastNorth instance to this one.
+     * @param other The other instance.
+     * @return The new EastNorth position.
+     */
     public EastNorth add(EastNorth other) {
         return new EastNorth(x+other.x, y+other.y);
     }
 
+    /**
+     * Subtracts the coordinates of this EastNorth instance from the other one.
+     * <p>
+     * This produces result = en2 - this.
+     * @param en2 The instance to subtract this one from.
+     * @return The new EastNorth position.
+     * @deprecated use {@code subtract} on the other EastNorth instead
+     */
+    @Deprecated
+    public EastNorth sub(EastNorth en2) {
+        return en2.subtract(this);
+    }
+
+    /**
+     * Subtracts an east/north value from this point.
+     * @param other The other value to subtract from this.
+     * @return A point with the new coordinates.
+     */
+    public EastNorth subtract(EastNorth other) {
+        return new EastNorth(x-other.x, y-other.y);
+    }
+
     public EastNorth scale(double s) {
         return new EastNorth(s * x, s * y);
     }
 
+    /**
+     * Does a linear interpolation between two EastNorth instances.
+     * @param en2 The other EstNort instance.
+     * @param proportion The proportion the other instance influences the result.
+     * @return The new {@link EastNorth} position.
+     */
     public EastNorth interpolate(EastNorth en2, double proportion) {
         return new EastNorth(this.x + proportion * (en2.x - this.x),
                 this.y + proportion * (en2.y - this.y));
     }
 
+    /**
+     * Gets the center between two {@link EastNorth} instances.
+     * @param en2 The other instance.
+     * @return The center between this and the other instance.
+     */
     public EastNorth getCenter(EastNorth en2) {
         return new EastNorth((this.x + en2.x)/2.0, (this.y + en2.y)/2.0);
     }
@@ -72,7 +116,7 @@ public class EastNorth extends Coordinate {
      *
      * @return length of this
      */
-    public double length(){
+    public double length() {
         return Math.sqrt(x*x + y*y);
     }
 
@@ -85,7 +129,7 @@ public class EastNorth extends Coordinate {
      */
     public double heading(EastNorth other) {
         double hd = Math.atan2(other.east() - east(), other.north() - north());
-        if(hd < 0) {
+        if (hd < 0) {
             hd = 2 * Math.PI + hd;
         }
         return hd;
@@ -100,10 +144,6 @@ public class EastNorth extends Coordinate {
         return !Double.isNaN(x) && !Double.isNaN(y) && !Double.isInfinite(x) && !Double.isInfinite(y);
     }
 
-    public EastNorth sub(EastNorth en) {
-        return new EastNorth(en.east() - east(), en.north() - north());
-    }
-
     /**
      * Returns an EastNorth representing the this EastNorth rotated around
      * a given EastNorth by a given angle
@@ -131,6 +171,6 @@ public class EastNorth extends Coordinate {
      * @return true if "x" and "y" values are within 1E-6 of each other
      */
     public boolean equalsEpsilon(EastNorth other, double e) {
-        return (Math.abs(x - other.x) < e && Math.abs(y - other.y) < e);
+        return Math.abs(x - other.x) < e && Math.abs(y - other.y) < e;
     }
 }
diff --git a/src/org/openstreetmap/josm/data/coor/LatLon.java b/src/org/openstreetmap/josm/data/coor/LatLon.java
index 7a0aeb0..af90583 100644
--- a/src/org/openstreetmap/josm/data/coor/LatLon.java
+++ b/src/org/openstreetmap/josm/data/coor/LatLon.java
@@ -16,6 +16,7 @@ import java.text.NumberFormat;
 import java.util.Arrays;
 import java.util.Locale;
 
+import org.openstreetmap.gui.jmapviewer.interfaces.ICoordinate;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.tools.Utils;
@@ -29,7 +30,7 @@ import org.openstreetmap.josm.tools.Utils;
  * <b>Longitude</b> specifies the east-west position in degrees
  * where valid values are in the [-180,180] and positive values specify positions east of the prime meridian.
  * <br>
- * <img alt="lat/lon" src="https://upload.wikimedia.org/wikipedia/commons/thumb/6/62/Latitude_and_Longitude_of_the_Earth.svg/500px-Latitude_and_Longitude_of_the_Earth.svg.png">
+ * <img alt="lat/lon" src="https://upload.wikimedia.org/wikipedia/commons/6/62/Latitude_and_Longitude_of_the_Earth.svg">
  * <br>
  * This class is immutable.
  *
@@ -68,9 +69,9 @@ public class LatLon extends Coordinate {
     }
 
     private static final String cDms60 = cDmsSecondFormatter.format(60.0);
-    private static final String cDms00 = cDmsSecondFormatter.format( 0.0);
+    private static final String cDms00 = cDmsSecondFormatter.format(0.0);
     private static final String cDm60 = cDmMinuteFormatter.format(60.0);
-    private static final String cDm00 = cDmMinuteFormatter.format( 0.0);
+    private static final String cDm00 = cDmMinuteFormatter.format(0.0);
 
     /**
      * Replies true if lat is in the range [-90,90]
@@ -187,6 +188,11 @@ public class LatLon extends Coordinate {
         super(coor.lon(), coor.lat());
     }
 
+    public LatLon(ICoordinate coor) {
+        this(coor.getLat(), coor.getLon());
+    }
+
+
     /**
      * Returns the latitude, i.e., the north-south position in degrees.
      * @return the latitude
@@ -197,6 +203,7 @@ public class LatLon extends Coordinate {
 
     public static final String SOUTH = trc("compass", "S");
     public static final String NORTH = trc("compass", "N");
+
     public String latToString(CoordinateFormat d) {
         switch(d) {
         case DECIMAL_DEGREES: return cDdFormatter.format(y);
@@ -217,6 +224,7 @@ public class LatLon extends Coordinate {
 
     public static final String WEST = trc("compass", "W");
     public static final String EAST = trc("compass", "E");
+
     public String lonToString(CoordinateFormat d) {
         switch(d) {
         case DECIMAL_DEGREES: return cDdFormatter.format(x);
@@ -431,4 +439,8 @@ public class LatLon extends Coordinate {
             return false;
         return true;
     }
+
+    public ICoordinate toCoordinate() {
+        return new org.openstreetmap.gui.jmapviewer.Coordinate(lat(), lon());
+    }
 }
diff --git a/src/org/openstreetmap/josm/data/coor/QuadTiling.java b/src/org/openstreetmap/josm/data/coor/QuadTiling.java
index c35dec3..3dcf366 100644
--- a/src/org/openstreetmap/josm/data/coor/QuadTiling.java
+++ b/src/org/openstreetmap/josm/data/coor/QuadTiling.java
@@ -1,6 +1,8 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.coor;
 
+import org.openstreetmap.josm.tools.Utils;
+
 public final class QuadTiling {
 
     private QuadTiling() {
@@ -8,10 +10,10 @@ public final class QuadTiling {
     }
 
     public static final int NR_LEVELS = 24;
-    public static final double WORLD_PARTS = (1 << NR_LEVELS);
+    public static final double WORLD_PARTS = 1 << NR_LEVELS;
 
     public static final int TILES_PER_LEVEL_SHIFT = 2; // Has to be 2. Other parts of QuadBuckets code rely on it
-    public static final int TILES_PER_LEVEL = 1<<TILES_PER_LEVEL_SHIFT;
+    public static final int TILES_PER_LEVEL = 1 << TILES_PER_LEVEL_SHIFT;
     public static final int X_PARTS = 360;
     public static final int X_BIAS = -180;
 
@@ -50,13 +52,12 @@ public final class QuadTiling {
     static long xy2tile(long x, long y) {
         long tile = 0;
         int i;
-        for (i = NR_LEVELS-1; i >= 0; i--)
-        {
-            long xbit = ((x >> i) & 1);
-            long ybit = ((y >> i) & 1);
+        for (i = NR_LEVELS-1; i >= 0; i--) {
+            long xbit = (x >> i) & 1;
+            long ybit = (y >> i) & 1;
             tile <<= 2;
             // Note that x is the MSB
-            tile |= (xbit<<1) | ybit;
+            tile |= (xbit << 1) | ybit;
         }
         return tile;
     }
@@ -66,16 +67,16 @@ public final class QuadTiling {
     }
 
     static long lon2x(double lon) {
-        long ret = (long)((lon + 180.0) * WORLD_PARTS / 360.0);
-        if (ret == WORLD_PARTS) {
+        long ret = (long) ((lon + 180.0) * WORLD_PARTS / 360.0);
+        if (Utils.equalsEpsilon(ret, WORLD_PARTS)) {
             ret--;
         }
         return ret;
     }
 
     static long lat2y(double lat) {
-        long ret = (long)((lat + 90.0) * WORLD_PARTS / 180.0);
-        if (ret == WORLD_PARTS) {
+        long ret = (long) ((lat + 90.0) * WORLD_PARTS / 180.0);
+        if (Utils.equalsEpsilon(ret, WORLD_PARTS)) {
             ret--;
         }
         return ret;
@@ -88,7 +89,7 @@ public final class QuadTiling {
     public static int index(int level, long quad) {
         long mask = 0x00000003;
         int total_shift = TILES_PER_LEVEL_SHIFT*(NR_LEVELS-level-1);
-        return (int)(mask & (quad >> total_shift));
+        return (int) (mask & (quad >> total_shift));
     }
 
     /**
@@ -123,6 +124,6 @@ public final class QuadTiling {
         long x = lon2x(lon);
         long y = lat2y(lat);
         int shift = NR_LEVELS-level-1;
-        return (int)((x >> shift & 1) * 2 + (y >> shift & 1));
+        return (int) ((x >> shift & 1) * 2 + (y >> shift & 1));
     }
 }
diff --git a/src/org/openstreetmap/josm/data/gpx/GpxConstants.java b/src/org/openstreetmap/josm/data/gpx/GpxConstants.java
index f070f44..72b6344 100644
--- a/src/org/openstreetmap/josm/data/gpx/GpxConstants.java
+++ b/src/org/openstreetmap/josm/data/gpx/GpxConstants.java
@@ -15,91 +15,91 @@ public interface GpxConstants {
     /** GPS name of the element. This field will be transferred to and from the GPS.
      *  GPX does not place restrictions on the length of this field or the characters contained in it.
      *  It is up to the receiving application to validate the field before sending it to the GPS. */
-    public static final String GPX_NAME = "name";
+    String GPX_NAME = "name";
 
     /** GPS element comment. Sent to GPS as comment. */
-    public static final String GPX_CMT = "cmt";
+    String GPX_CMT = "cmt";
 
     /** Text description of the element. Holds additional information about the element intended for the user, not the GPS. */
-    public static final String GPX_DESC = "desc";
+    String GPX_DESC = "desc";
 
     /** Source of data. Included to give user some idea of reliability and accuracy of data. */
-    public static final String GPX_SRC = "src";
-
-    public static final String META_PREFIX = "meta.";
-    public static final String META_AUTHOR_NAME = META_PREFIX + "author.name";
-    public static final String META_AUTHOR_EMAIL = META_PREFIX + "author.email";
-    public static final String META_AUTHOR_LINK = META_PREFIX + "author.link";
-    public static final String META_COPYRIGHT_AUTHOR = META_PREFIX + "copyright.author";
-    public static final String META_COPYRIGHT_LICENSE = META_PREFIX + "copyright.license";
-    public static final String META_COPYRIGHT_YEAR = META_PREFIX + "copyright.year";
-    public static final String META_DESC = META_PREFIX + "desc";
-    public static final String META_KEYWORDS = META_PREFIX + "keywords";
-    public static final String META_LINKS = META_PREFIX + "links";
-    public static final String META_NAME = META_PREFIX + "name";
-    public static final String META_TIME = META_PREFIX + "time";
-    public static final String META_BOUNDS = META_PREFIX + "bounds";
-    public static final String META_EXTENSIONS = META_PREFIX + "extensions";
-
-    public static final String JOSM_EXTENSIONS_NAMESPACE_URI = Main.getXMLBase() + "/gpx-extensions-1.0";
+    String GPX_SRC = "src";
+
+    String META_PREFIX = "meta.";
+    String META_AUTHOR_NAME = META_PREFIX + "author.name";
+    String META_AUTHOR_EMAIL = META_PREFIX + "author.email";
+    String META_AUTHOR_LINK = META_PREFIX + "author.link";
+    String META_COPYRIGHT_AUTHOR = META_PREFIX + "copyright.author";
+    String META_COPYRIGHT_LICENSE = META_PREFIX + "copyright.license";
+    String META_COPYRIGHT_YEAR = META_PREFIX + "copyright.year";
+    String META_DESC = META_PREFIX + "desc";
+    String META_KEYWORDS = META_PREFIX + "keywords";
+    String META_LINKS = META_PREFIX + "links";
+    String META_NAME = META_PREFIX + "name";
+    String META_TIME = META_PREFIX + "time";
+    String META_BOUNDS = META_PREFIX + "bounds";
+    String META_EXTENSIONS = META_PREFIX + "extensions";
+
+    String JOSM_EXTENSIONS_NAMESPACE_URI = Main.getXMLBase() + "/gpx-extensions-1.0";
 
     /** Elevation (in meters) of the point. */
-    public static final String PT_ELE = "ele";
+    String PT_ELE = "ele";
 
     /** Creation/modification timestamp for the point.
      *  Date and time in are in Univeral Coordinated Time (UTC), not local time!
      *  Conforms to ISO 8601 specification for date/time representation.
      *  Fractional seconds are allowed for millisecond timing in tracklogs. */
-    public static final String PT_TIME = "time";
+    String PT_TIME = "time";
 
-    /** Magnetic variation (in degrees) at the point. 0.0 <= value < 360.0 */
-    public static final String PT_MAGVAR = "magvar";
+    /** Magnetic variation (in degrees) at the point. 0.0 <= value < 360.0 */
+    String PT_MAGVAR = "magvar";
 
     /** Height, in meters, of geoid (mean sea level) above WGS-84 earth ellipsoid. (NMEA GGA message) */
-    public static final String PT_GEOIDHEIGHT = "geoidheight";
+    String PT_GEOIDHEIGHT = "geoidheight";
 
     /** Text of GPS symbol name. For interchange with other programs, use the exact spelling of the symbol on the GPS, if known. */
-    public static final String PT_SYM = "sym";
+    String PT_SYM = "sym";
 
     /** Type (textual classification) of element. */
-    public static final String PT_TYPE = "type";
+    String PT_TYPE = "type";
 
     /** Type of GPS fix. none means GPS had no fix. Value comes from list: {'none'|'2d'|'3d'|'dgps'|'pps'} */
-    public static final String PT_FIX = "fix";
+    String PT_FIX = "fix";
 
     /** Number of satellites used to calculate the GPS fix. (not number of satellites in view). */
-    public static final String PT_SAT = "sat";
+    String PT_SAT = "sat";
 
     /** Horizontal dilution of precision. */
-    public static final String PT_HDOP = "hdop";
+    String PT_HDOP = "hdop";
 
     /** Vertical dilution of precision. */
-    public static final String PT_VDOP = "vdop";
+    String PT_VDOP = "vdop";
 
     /** Position dilution of precision. */
-    public static final String PT_PDOP = "pdop";
+    String PT_PDOP = "pdop";
 
     /** Number of seconds since last DGPS update. */
-    public static final String PT_AGEOFDGPSDATA = "ageofdgpsdata";
+    String PT_AGEOFDGPSDATA = "ageofdgpsdata";
 
-    /** Represents a differential GPS station. 0 <= value <= 1023 */
-    public static final String PT_DGPSID = "dgpsid";
+    /** Represents a differential GPS station. 0 <= value <= 1023 */
+    String PT_DGPSID = "dgpsid";
 
     /**
      * Ordered list of all possible waypoint keys.
      */
-    public static List<String> WPT_KEYS = Arrays.asList(PT_ELE, PT_TIME, PT_MAGVAR, PT_GEOIDHEIGHT,
+    List<String> WPT_KEYS = Arrays.asList(PT_ELE, PT_TIME, PT_MAGVAR, PT_GEOIDHEIGHT,
             GPX_NAME, GPX_CMT, GPX_DESC, GPX_SRC, META_LINKS, PT_SYM, PT_TYPE,
             PT_FIX, PT_SAT, PT_HDOP, PT_VDOP, PT_PDOP, PT_AGEOFDGPSDATA, PT_DGPSID, META_EXTENSIONS);
 
     /**
      * Ordered list of all possible route and track keys.
      */
-    public static List<String> RTE_TRK_KEYS = Arrays.asList(
+    List<String> RTE_TRK_KEYS = Arrays.asList(
             GPX_NAME, GPX_CMT, GPX_DESC, GPX_SRC, META_LINKS, "number", PT_TYPE, META_EXTENSIONS);
 
     /**
      * Possible fix values.
      */
-    public static Collection<String> FIX_VALUES = Arrays.asList("none","2d","3d","dgps","pps");
+    Collection<String> FIX_VALUES = Arrays.asList("none", "2d", "3d", "dgps", "pps");
 }
diff --git a/src/org/openstreetmap/josm/data/gpx/GpxData.java b/src/org/openstreetmap/josm/data/gpx/GpxData.java
index 45d31d5..44e802e 100644
--- a/src/org/openstreetmap/josm/data/gpx/GpxData.java
+++ b/src/org/openstreetmap/josm/data/gpx/GpxData.java
@@ -17,6 +17,7 @@ import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.Data;
 import org.openstreetmap.josm.data.DataSource;
 import org.openstreetmap.josm.data.coor.EastNorth;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
  * Objects of this class represent a gpx file with tracks, waypoints and routes.
@@ -53,7 +54,7 @@ public class GpxData extends WithAttributes implements Data {
         for (Map.Entry<String, Object> ent : other.attr.entrySet()) {
             // TODO: Detect conflicts.
             String k = ent.getKey();
-            if (k.equals(META_LINKS) && attr.containsKey(META_LINKS)) {
+            if (META_LINKS.equals(k) && attr.containsKey(META_LINKS)) {
                 Collection<GpxLink> my = super.<GpxLink>getCollection(META_LINKS);
                 @SuppressWarnings("unchecked")
                 Collection<GpxLink> their = (Collection<GpxLink>) ent.getValue();
@@ -198,7 +199,7 @@ public class GpxData extends WithAttributes implements Data {
                 }
             }
         }
-        if (earliest==null || latest==null) return null;
+        if (earliest == null || latest == null) return null;
         return new Date[]{earliest.getTime(), latest.getTime()};
     }
 
@@ -210,21 +211,22 @@ public class GpxData extends WithAttributes implements Data {
      * @return minimum and maximum dates in array of 2 elements
     */
     public Date[] getMinMaxTimeForAllTracks() {
-        double min=1e100, max=-1e100, t;
+        double min = 1e100;
+        double max = -1e100;
         double now = System.currentTimeMillis()/1000.0;
         for (GpxTrack trk: tracks) {
             for (GpxTrackSegment seg : trk.getSegments()) {
                 for (WayPoint pnt : seg.getWayPoints()) {
-                    t = pnt.time;
-                    if (t>0 && t<=now) {
-                        if (t>max) max=t;
-                        if (t<min) min=t;
+                    double t = pnt.time;
+                    if (t > 0 && t <= now) {
+                        if (t > max) max = t;
+                        if (t < min) min = t;
                     }
                 }
             }
         }
-        if (min==1e100 || max==-1e100) return null;
-        return new Date[]{new Date((long) (min * 1000)), new Date((long) (max * 1000)), };
+        if (Utils.equalsEpsilon(min, 1e100) || Utils.equalsEpsilon(max, -1e100)) return new Date[0];
+        return new Date[]{new Date((long) (min * 1000)), new Date((long) (max * 1000))};
     }
 
      /**
@@ -292,7 +294,7 @@ public class GpxData extends WithAttributes implements Data {
                         double B = rx - sx;
                         double C = -A * rx - B * ry;
                         double RSsq = A * A + B * B;
-                        if (RSsq == 0.0) {
+                        if (RSsq == 0) {
                             continue;
                         }
                         double PNsq = A * px + B * py + C;
@@ -360,11 +362,11 @@ public class GpxData extends WithAttributes implements Data {
 
     public void resetEastNorthCache() {
         if (waypoints != null) {
-            for (WayPoint wp : waypoints){
+            for (WayPoint wp : waypoints) {
                 wp.invalidateEastNorthCache();
             }
         }
-        if (tracks != null){
+        if (tracks != null) {
             for (GpxTrack track: tracks) {
                 for (GpxTrackSegment segment: track.getSegments()) {
                     for (WayPoint wp: segment.getWayPoints()) {
@@ -433,8 +435,7 @@ public class GpxData extends WithAttributes implements Data {
                             return itTrackSegments.next().getWayPoints();
                         }
                     }
-                    // if we get here, all the Tracks are finished; Continue with
-                    // Routes
+                    // if we get here, all the Tracks are finished; Continue with Routes
                     itTracks = null;
                 }
             }
diff --git a/src/org/openstreetmap/josm/data/gpx/GpxTrack.java b/src/org/openstreetmap/josm/data/gpx/GpxTrack.java
index 7d11537..c8c58d6 100644
--- a/src/org/openstreetmap/josm/data/gpx/GpxTrack.java
+++ b/src/org/openstreetmap/josm/data/gpx/GpxTrack.java
@@ -13,8 +13,11 @@ import org.openstreetmap.josm.data.Bounds;
 public interface GpxTrack extends IWithAttributes {
 
     Collection<GpxTrackSegment> getSegments();
+
     Map<String, Object> getAttributes();
+
     Bounds getBounds();
+
     double length();
 
     /**
diff --git a/src/org/openstreetmap/josm/data/gpx/GpxTrackSegment.java b/src/org/openstreetmap/josm/data/gpx/GpxTrackSegment.java
index a9ae7fd..6e44f8e 100644
--- a/src/org/openstreetmap/josm/data/gpx/GpxTrackSegment.java
+++ b/src/org/openstreetmap/josm/data/gpx/GpxTrackSegment.java
@@ -12,8 +12,11 @@ import org.openstreetmap.josm.data.Bounds;
 public interface GpxTrackSegment {
 
     Bounds getBounds();
+
     Collection<WayPoint> getWayPoints();
+
     double length();
+
     /**
      *
      * @return Number of times this track has been changed. Always 0 for read-only segments
diff --git a/src/org/openstreetmap/josm/data/gpx/ImmutableGpxTrack.java b/src/org/openstreetmap/josm/data/gpx/ImmutableGpxTrack.java
index 41a4d5a..bbae29f 100644
--- a/src/org/openstreetmap/josm/data/gpx/ImmutableGpxTrack.java
+++ b/src/org/openstreetmap/josm/data/gpx/ImmutableGpxTrack.java
@@ -29,7 +29,7 @@ public class ImmutableGpxTrack extends WithAttributes implements GpxTrack {
         this.bounds = calculateBounds();
     }
 
-    private double calculateLength(){
+    private double calculateLength() {
         double result = 0.0; // in meters
 
         for (GpxTrackSegment trkseg : segments) {
diff --git a/src/org/openstreetmap/josm/data/gpx/ImmutableGpxTrackSegment.java b/src/org/openstreetmap/josm/data/gpx/ImmutableGpxTrackSegment.java
index 418846b..6b9ae6e 100644
--- a/src/org/openstreetmap/josm/data/gpx/ImmutableGpxTrackSegment.java
+++ b/src/org/openstreetmap/josm/data/gpx/ImmutableGpxTrackSegment.java
@@ -35,9 +35,9 @@ public class ImmutableGpxTrackSegment implements GpxTrackSegment {
         double result = 0.0; // in meters
         WayPoint last = null;
         for (WayPoint tpt : wayPoints) {
-            if(last != null){
+            if (last != null) {
                 Double d = last.getCoor().greatCircleDistance(tpt.getCoor());
-                if(!d.isNaN() && !d.isInfinite()) {
+                if (!d.isNaN() && !d.isInfinite()) {
                     result += d;
                 }
             }
diff --git a/src/org/openstreetmap/josm/data/gpx/WayPoint.java b/src/org/openstreetmap/josm/data/gpx/WayPoint.java
index 6ce464d..dedf7c4 100644
--- a/src/org/openstreetmap/josm/data/gpx/WayPoint.java
+++ b/src/org/openstreetmap/josm/data/gpx/WayPoint.java
@@ -66,7 +66,7 @@ public class WayPoint extends WithAttributes implements Comparable<WayPoint>, Te
     }
 
     public final LatLon getCoor() {
-        return new LatLon(lat,lon);
+        return new LatLon(lat, lon);
     }
 
     /**
@@ -94,7 +94,7 @@ public class WayPoint extends WithAttributes implements Comparable<WayPoint>, Te
 
     @Override
     public String toString() {
-        return "WayPoint (" + (attr.containsKey(GPX_NAME) ? get(GPX_NAME) + ", " :"") + getCoor().toString() + ", " + attr + ")";
+        return "WayPoint (" + (attr.containsKey(GPX_NAME) ? get(GPX_NAME) + ", " : "") + getCoor() + ", " + attr + ")";
     }
 
     /**
@@ -104,7 +104,7 @@ public class WayPoint extends WithAttributes implements Comparable<WayPoint>, Te
         if (attr.containsKey(PT_TIME)) {
             try {
                 time = dateParser.get().parse(get(PT_TIME).toString()).getTime() / 1000.; /* ms => seconds */
-            } catch(Exception e) {
+            } catch (Exception e) {
                 time = 0;
             }
         }
diff --git a/src/org/openstreetmap/josm/data/gpx/WithAttributes.java b/src/org/openstreetmap/josm/data/gpx/WithAttributes.java
index febc1fa..21ddaf0 100644
--- a/src/org/openstreetmap/josm/data/gpx/WithAttributes.java
+++ b/src/org/openstreetmap/josm/data/gpx/WithAttributes.java
@@ -43,7 +43,7 @@ public class WithAttributes implements IWithAttributes, GpxConstants {
     @Override
     public String getString(String key) {
         Object value = attr.get(key);
-        return (value instanceof String) ? (String)value : null;
+        return (value instanceof String) ? (String) value : null;
     }
 
     /**
@@ -59,7 +59,7 @@ public class WithAttributes implements IWithAttributes, GpxConstants {
     @Override
     public <T> Collection<T> getCollection(String key) {
         Object value = attr.get(key);
-        return (value instanceof Collection) ? (Collection<T>)value : null;
+        return (value instanceof Collection) ? (Collection<T>) value : null;
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/data/imagery/CachedAttributionBingAerialTileSource.java b/src/org/openstreetmap/josm/data/imagery/CachedAttributionBingAerialTileSource.java
new file mode 100644
index 0000000..3ed35ba
--- /dev/null
+++ b/src/org/openstreetmap/josm/data/imagery/CachedAttributionBingAerialTileSource.java
@@ -0,0 +1,91 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.imagery;
+
+import java.io.IOException;
+import java.io.StringReader;
+import java.net.URL;
+import java.util.List;
+import java.util.Scanner;
+import java.util.concurrent.Callable;
+
+import org.openstreetmap.gui.jmapviewer.tilesources.BingAerialTileSource;
+import org.openstreetmap.gui.jmapviewer.tilesources.TileSourceInfo;
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.gui.util.GuiHelper;
+import org.openstreetmap.josm.io.CacheCustomContent;
+import org.openstreetmap.josm.io.UTFInputStreamReader;
+import org.openstreetmap.josm.tools.Utils;
+import org.xml.sax.InputSource;
+
+/**
+ * Bing TileSource with cached attribution
+ *
+ * @author Wiktor Niesiobędzki
+ * @since 8526
+ */
+public class CachedAttributionBingAerialTileSource extends BingAerialTileSource {
+    private Runnable attributionDownloadedTask;
+
+    /**
+     * Creates tile source
+     * @param info ImageryInfo description of this tile source
+     */
+    public CachedAttributionBingAerialTileSource(ImageryInfo info) {
+        super(info);
+    }
+
+    /**
+     * Creates tile source
+     * @param info ImageryInfo description of this tile source
+     * @param attributionDownloadedTask runnable to be executed once attribution is loaded
+     */
+
+    public CachedAttributionBingAerialTileSource(TileSourceInfo info, Runnable attributionDownloadedTask) {
+        super(info);
+        this.attributionDownloadedTask = attributionDownloadedTask;
+    }
+
+    class BingAttributionData extends CacheCustomContent<IOException> {
+
+        public BingAttributionData() {
+            super("bing.attribution.xml", CacheCustomContent.INTERVAL_HOURLY);
+        }
+
+        @Override
+        protected byte[] updateData() throws IOException {
+            URL u = getAttributionUrl();
+            try (Scanner scanner = new Scanner(UTFInputStreamReader.create(Utils.openURL(u)))) {
+                String r = scanner.useDelimiter("\\A").next();
+                Main.info("Successfully loaded Bing attribution data.");
+                return r.getBytes("UTF-8");
+            }
+        }
+    }
+
+    @Override
+    protected Callable<List<Attribution>> getAttributionLoaderCallable() {
+        return new Callable<List<Attribution>>() {
+
+            @Override
+            public List<Attribution> call() throws Exception {
+                BingAttributionData attributionLoader = new BingAttributionData();
+                int waitTimeSec = 1;
+                while (true) {
+                    try {
+                        String xml = attributionLoader.updateIfRequiredString();
+                        List<Attribution> ret = parseAttributionText(new InputSource(new StringReader((xml))));
+                        if (attributionDownloadedTask != null) {
+                            GuiHelper.runInEDT(attributionDownloadedTask);
+                            attributionDownloadedTask = null;
+                        }
+                        return ret;
+                    } catch (IOException ex) {
+                        Main.warn("Could not connect to Bing API. Will retry in " + waitTimeSec + " seconds.");
+                        Thread.sleep(waitTimeSec * 1000L);
+                        waitTimeSec *= 2;
+                    }
+                }
+            }
+        };
+    }
+}
diff --git a/src/org/openstreetmap/josm/data/imagery/CachedTileLoaderFactory.java b/src/org/openstreetmap/josm/data/imagery/CachedTileLoaderFactory.java
new file mode 100644
index 0000000..1770095
--- /dev/null
+++ b/src/org/openstreetmap/josm/data/imagery/CachedTileLoaderFactory.java
@@ -0,0 +1,95 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.imagery;
+
+import java.io.File;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.commons.jcs.access.behavior.ICacheAccess;
+import org.openstreetmap.gui.jmapviewer.interfaces.TileLoader;
+import org.openstreetmap.gui.jmapviewer.interfaces.TileLoaderListener;
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.Version;
+import org.openstreetmap.josm.data.cache.BufferedImageCacheEntry;
+import org.openstreetmap.josm.data.preferences.StringProperty;
+
+/**
+ * TileLoaderFactory creating JCS cached TileLoaders
+ *
+ * @author Wiktor Niesiobędzki
+ * @since 8526
+ */
+public class CachedTileLoaderFactory implements TileLoaderFactory {
+    /**
+     * Keeps the cache directory where
+     */
+    public static final StringProperty PROP_TILECACHE_DIR = getTileCacheDir();
+    private ICacheAccess<String, BufferedImageCacheEntry> cache;
+    private Constructor<? extends TileLoader> tileLoaderConstructor;
+
+    /**
+     * @param cache cache instance which will be used by tile loaders created by this tile loader
+     * @param tileLoaderClass tile loader class that will be created
+     *
+     */
+    public CachedTileLoaderFactory(ICacheAccess<String, BufferedImageCacheEntry> cache, Class<? extends TileLoader> tileLoaderClass) {
+        this.cache = cache;
+        try {
+            tileLoaderConstructor = tileLoaderClass.getConstructor(
+                    TileLoaderListener.class,
+                    ICacheAccess.class,
+                    int.class,
+                    int.class,
+                    Map.class);
+        } catch (NoSuchMethodException | SecurityException e) {
+            Main.warn(e);
+            throw new RuntimeException(e);
+        }
+    }
+
+    private static StringProperty getTileCacheDir() {
+        String defPath = null;
+        try {
+            defPath = new File(Main.pref.getCacheDirectory(), "tiles").getAbsolutePath();
+        } catch (SecurityException e) {
+            Main.warn(e);
+        }
+        return new StringProperty("imagery.generic.loader.cachedir", defPath);
+    }
+
+    @Override
+    public TileLoader makeTileLoader(TileLoaderListener listener) {
+        return makeTileLoader(listener, null);
+    }
+
+    @Override
+    public TileLoader makeTileLoader(TileLoaderListener listener, Map<String, String> inputHeaders) {
+        Map<String, String> headers = new ConcurrentHashMap<>();
+        headers.put("User-Agent", Version.getInstance().getFullAgentString());
+        headers.put("Accept", "text/html, image/png, image/jpeg, image/gif, */*");
+        if (inputHeaders != null)
+            headers.putAll(inputHeaders);
+
+        return getLoader(listener, cache,
+                Main.pref.getInteger("socket.timeout.connect", 15) * 1000,
+                Main.pref.getInteger("socket.timeout.read", 30) * 1000,
+                headers);
+    }
+
+    protected TileLoader getLoader(TileLoaderListener listener, ICacheAccess<String, BufferedImageCacheEntry> cache,
+            int connectTimeout, int readTimeout, Map<String, String> headers) {
+        try {
+            return tileLoaderConstructor.newInstance(
+                    listener,
+                    cache,
+                    connectTimeout,
+                    readTimeout,
+                    headers);
+        } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
+            Main.warn(e);
+            throw new RuntimeException(e);
+        }
+    }
+}
diff --git a/src/org/openstreetmap/josm/data/imagery/GeorefImage.java b/src/org/openstreetmap/josm/data/imagery/GeorefImage.java
deleted file mode 100644
index 228ece2..0000000
--- a/src/org/openstreetmap/josm/data/imagery/GeorefImage.java
+++ /dev/null
@@ -1,256 +0,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.data.imagery;
-
-import static org.openstreetmap.josm.tools.I18n.tr;
-
-import java.awt.Color;
-import java.awt.Font;
-import java.awt.Graphics;
-import java.awt.Image;
-import java.awt.Transparency;
-import java.awt.image.BufferedImage;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
-import java.lang.ref.SoftReference;
-
-import javax.imageio.ImageIO;
-
-import org.openstreetmap.josm.data.coor.EastNorth;
-import org.openstreetmap.josm.gui.NavigatableComponent;
-import org.openstreetmap.josm.gui.layer.ImageryLayer;
-import org.openstreetmap.josm.gui.layer.WMSLayer;
-import org.openstreetmap.josm.tools.ImageProvider;
-
-public class GeorefImage implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    public enum State { IMAGE, NOT_IN_CACHE, FAILED, PARTLY_IN_CACHE}
-
-    private WMSLayer layer;
-    private State state;
-
-    private BufferedImage image;
-    private SoftReference<BufferedImage> reImg;
-    private int xIndex;
-    private int yIndex;
-
-    private static final Color transparentColor = new Color(0,0,0,0);
-    private Color fadeColor = transparentColor;
-
-    public EastNorth getMin() {
-        return layer.getEastNorth(xIndex, yIndex);
-    }
-
-    public EastNorth getMax() {
-        return layer.getEastNorth(xIndex+1, yIndex+1);
-    }
-
-    public GeorefImage(WMSLayer layer) {
-        this.layer = layer;
-    }
-
-    public void changePosition(int xIndex, int yIndex) {
-        if (!equalPosition(xIndex, yIndex)) {
-            this.xIndex = xIndex;
-            this.yIndex = yIndex;
-            this.image = null;
-            flushResizedCachedInstance();
-        }
-    }
-
-    public boolean equalPosition(int xIndex, int yIndex) {
-        return this.xIndex == xIndex && this.yIndex == yIndex;
-    }
-
-    /**
-     * Resets this image to initial state and release all resources being used.
-     * @since 7132
-     */
-    public void resetImage() {
-        if (image != null) {
-            image.flush();
-        }
-        changeImage(null, null, null);
-    }
-
-    public void changeImage(State state, BufferedImage image, String errorMsg) {
-        flushResizedCachedInstance();
-        this.image = image;
-        this.state = state;
-        if (state == null)
-            return;
-        switch (state) {
-        case FAILED:
-            BufferedImage imgFailed = createImage();
-            layer.drawErrorTile(imgFailed, errorMsg);
-            this.image = imgFailed;
-            break;
-        case NOT_IN_CACHE:
-            BufferedImage img = createImage();
-            Graphics g = img.getGraphics();
-            g.setColor(Color.GRAY);
-            g.fillRect(0, 0, img.getWidth(), img.getHeight());
-            Font font = g.getFont();
-            Font tempFont = font.deriveFont(Font.PLAIN).deriveFont(36.0f);
-            g.setFont(tempFont);
-            g.setColor(Color.BLACK);
-            String text = tr("Not in cache");
-            g.drawString(text, (img.getWidth() - g.getFontMetrics().stringWidth(text)) / 2, img.getHeight()/2);
-            g.setFont(font);
-            this.image = img;
-            break;
-        default:
-            if (this.image != null) {
-                this.image = layer.sharpenImage(this.image);
-            }
-            break;
-        }
-    }
-
-    private BufferedImage createImage() {
-        return new BufferedImage(layer.getImageSize(), layer.getImageSize(), BufferedImage.TYPE_INT_RGB);
-    }
-
-    public boolean paint(Graphics g, NavigatableComponent nc, int xIndex, int yIndex, int leftEdge, int bottomEdge) {
-        if (getImage() == null)
-            return false;
-
-        if(!(this.xIndex == xIndex && this.yIndex == yIndex))
-            return false;
-
-        int left = layer.getImageX(xIndex);
-        int bottom = layer.getImageY(yIndex);
-        int width = layer.getImageWidth(xIndex);
-        int height = layer.getImageHeight(yIndex);
-
-        int x = left - leftEdge;
-        int y = nc.getHeight() - (bottom - bottomEdge) - height;
-
-        // This happens if you zoom outside the world
-        if(width == 0 || height == 0)
-            return false;
-
-        // TODO: implement per-layer fade color
-        Color newFadeColor;
-        if (ImageryLayer.PROP_FADE_AMOUNT.get() == 0) {
-            newFadeColor = transparentColor;
-        } else {
-            newFadeColor = ImageryLayer.getFadeColorWithAlpha();
-        }
-
-        BufferedImage img = reImg == null?null:reImg.get();
-        if(img != null && img.getWidth() == width && img.getHeight() == height && fadeColor.equals(newFadeColor)) {
-            g.drawImage(img, x, y, null);
-            return true;
-        }
-
-        fadeColor = newFadeColor;
-
-        boolean alphaChannel = WMSLayer.PROP_ALPHA_CHANNEL.get() && getImage().getTransparency() != Transparency.OPAQUE;
-
-        try {
-            if(img != null) {
-                img.flush();
-            }
-            long freeMem = Runtime.getRuntime().maxMemory() - Runtime.getRuntime().totalMemory();
-            // Notice that this value can get negative due to integer overflows
-
-            int multipl = alphaChannel ? 4 : 3;
-            // This happens when requesting images while zoomed out and then zooming in
-            // Storing images this large in memory will certainly hang up JOSM. Luckily
-            // traditional rendering is as fast at these zoom levels, so it's no loss.
-            // Also prevent caching if we're out of memory soon
-            if(width > 2000 || height > 2000 || width*height*multipl > freeMem) {
-                fallbackDraw(g, getImage(), x, y, width, height, alphaChannel);
-            } else {
-                // We haven't got a saved resized copy, so resize and cache it
-                img = new BufferedImage(width, height, alphaChannel?BufferedImage.TYPE_INT_ARGB:BufferedImage.TYPE_3BYTE_BGR);
-                img.getGraphics().drawImage(getImage(),
-                        0, 0, width, height, // dest
-                        0, 0, getImage().getWidth(null), getImage().getHeight(null), // src
-                        null);
-                if (!alphaChannel) {
-                    drawFadeRect(img.getGraphics(), 0, 0, width, height);
-                }
-                img.getGraphics().dispose();
-                g.drawImage(img, x, y, null);
-                reImg = new SoftReference<>(img);
-            }
-        } catch(Exception e) {
-            fallbackDraw(g, getImage(), x, y, width, height, alphaChannel);
-        }
-        return true;
-    }
-
-    private void fallbackDraw(Graphics g, Image img, int x, int y, int width, int height, boolean alphaChannel) {
-        flushResizedCachedInstance();
-        g.drawImage(
-                img, x, y, x + width, y + height,
-                0, 0, img.getWidth(null), img.getHeight(null),
-                null);
-        if (!alphaChannel) { //FIXME: fading for layers with alpha channel currently is not supported
-            drawFadeRect(g, x, y, width, height);
-        }
-    }
-
-    private void drawFadeRect(Graphics g, int x, int y, int width, int height) {
-        if (fadeColor != transparentColor) {
-            g.setColor(fadeColor);
-            g.fillRect(x, y, width, height);
-        }
-    }
-
-    private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
-        state = (State) in.readObject();
-        boolean hasImage = in.readBoolean();
-        if (hasImage) {
-            image = ImageProvider.read(ImageIO.createImageInputStream(in), true, WMSLayer.PROP_ALPHA_CHANNEL.get());
-        } else {
-            in.readObject(); // read null from input stream
-            image = null;
-        }
-    }
-
-    private void writeObject(ObjectOutputStream out) throws IOException {
-        out.writeObject(state);
-        if(getImage() == null) {
-            out.writeBoolean(false);
-            out.writeObject(null);
-        } else {
-            out.writeBoolean(true);
-            ImageIO.write(getImage(), "png", ImageIO.createImageOutputStream(out));
-        }
-    }
-
-    public void flushResizedCachedInstance() {
-        if (reImg != null) {
-            BufferedImage img = reImg.get();
-            if (img != null) {
-                img.flush();
-            }
-        }
-        reImg = null;
-    }
-
-    public BufferedImage getImage() {
-        return image;
-    }
-
-    public State getState() {
-        return state;
-    }
-
-    public int getXIndex() {
-        return xIndex;
-    }
-
-    public int getYIndex() {
-        return yIndex;
-    }
-
-    public void setLayer(WMSLayer layer) {
-        this.layer = layer;
-    }
-}
diff --git a/src/org/openstreetmap/josm/data/imagery/ImageryInfo.java b/src/org/openstreetmap/josm/data/imagery/ImageryInfo.java
index e3c813f..f2e715f 100644
--- a/src/org/openstreetmap/josm/data/imagery/ImageryInfo.java
+++ b/src/org/openstreetmap/josm/data/imagery/ImageryInfo.java
@@ -9,6 +9,8 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
+import java.util.Locale;
+import java.util.Map;
 import java.util.Objects;
 import java.util.TreeSet;
 import java.util.regex.Matcher;
@@ -16,10 +18,12 @@ import java.util.regex.Pattern;
 
 import javax.swing.ImageIcon;
 
-import org.openstreetmap.gui.jmapviewer.Coordinate;
+import org.openstreetmap.gui.jmapviewer.OsmMercator;
 import org.openstreetmap.gui.jmapviewer.interfaces.Attributed;
+import org.openstreetmap.gui.jmapviewer.interfaces.ICoordinate;
 import org.openstreetmap.gui.jmapviewer.tilesources.AbstractTileSource;
 import org.openstreetmap.gui.jmapviewer.tilesources.OsmTileSource.Mapnik;
+import org.openstreetmap.gui.jmapviewer.tilesources.TileSourceInfo;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.Preferences.pref;
@@ -34,7 +38,7 @@ import org.openstreetmap.josm.tools.LanguageInfo;
  *
  * @author Frederik Ramm
  */
-public class ImageryInfo implements Comparable<ImageryInfo>, Attributed {
+public class ImageryInfo extends TileSourceInfo implements Comparable<ImageryInfo>, Attributed {
 
     /**
      * Type of imagery entry.
@@ -51,11 +55,14 @@ public class ImageryInfo implements Comparable<ImageryInfo>, Attributed {
         /** TMS entry for Russian company <a href="https://wiki.openstreetmap.org/wiki/WikiProject_Russia/kosmosnimki">ScanEx</a>. **/
         SCANEX("scanex"),
         /** A WMS endpoint entry only stores the WMS server info, without layer, which are chosen later by the user. **/
-        WMS_ENDPOINT("wms_endpoint");
+        WMS_ENDPOINT("wms_endpoint"),
+        /** WMTS stores GetCapabilities URL. Does not store any information about the layer **/
+        WMTS("wmts");
+
 
         private final String typeString;
 
-        private ImageryType(String urlString) {
+        ImageryType(String urlString) {
             this.typeString = urlString;
         }
 
@@ -150,16 +157,11 @@ public class ImageryInfo implements Comparable<ImageryInfo>, Attributed {
         }
     }
 
-    /** name of the imagery entry (gets translated by josm usually) */
-    private String name;
+
     /** original name of the imagery entry in case of translation call, for multiple languages English when possible */
     private String origName;
     /** (original) language of the translated name entry */
     private String langName;
-    /** id for this imagery entry, optional at the moment */
-    private String id;
-    /** URL of the imagery service */
-    private String url = null;
     /** whether this is a entry activated by default or not */
     private boolean defaultEntry = false;
     /** The data part of HTTP cookies header in case the service requires cookies to work */
@@ -197,7 +199,7 @@ public class ImageryInfo implements Comparable<ImageryInfo>, Attributed {
     private String countryCode = "";
     /** icon used in menu */
     private String icon;
-    // when adding a field, also adapt the ImageryInfo(ImageryInfo) constructor
+    // when adding a field, also adapt the ImageryInfo(ImageryInfo) constructor, equals method, and ImageryPreferenceEntry
 
     /**
      * Auxiliary class to save an {@link ImageryInfo} object in the preferences.
@@ -224,6 +226,9 @@ public class ImageryInfo implements Comparable<ImageryInfo>, Attributed {
         @pref String projections;
         @pref String icon;
         @pref String description;
+        @pref Map<String, String> noTileHeaders;
+        @pref int tileSize = OsmMercator.DEFAUL_TILE_SIZE;
+        @pref Map<String, String> metadataHeaders;
 
         /**
          * Constructs a new empty WMS {@code ImageryPreferenceEntry}.
@@ -259,7 +264,7 @@ public class ImageryInfo implements Comparable<ImageryInfo>, Attributed {
                 StringBuilder shapesString = new StringBuilder();
                 for (Shape s : i.bounds.getShapes()) {
                     if (shapesString.length() > 0) {
-                        shapesString.append(";");
+                        shapesString.append(';');
                     }
                     shapesString.append(s.encodeAsString(","));
                 }
@@ -271,12 +276,21 @@ public class ImageryInfo implements Comparable<ImageryInfo>, Attributed {
                 StringBuilder val = new StringBuilder();
                 for (String p : i.serverProjections) {
                     if (val.length() > 0) {
-                        val.append(",");
+                        val.append(',');
                     }
                     val.append(p);
                 }
                 projections = val.toString();
             }
+            if (i.noTileHeaders != null && !i.noTileHeaders.isEmpty()) {
+                noTileHeaders = i.noTileHeaders;
+            }
+
+            if (i.metadataHeaders != null && !i.metadataHeaders.isEmpty()) {
+                metadataHeaders = i.metadataHeaders;
+            }
+
+            tileSize = i.getTileSize();
         }
 
         @Override
@@ -294,6 +308,7 @@ public class ImageryInfo implements Comparable<ImageryInfo>, Attributed {
      * Constructs a new WMS {@code ImageryInfo}.
      */
     public ImageryInfo() {
+        super();
     }
 
     /**
@@ -301,7 +316,7 @@ public class ImageryInfo implements Comparable<ImageryInfo>, Attributed {
      * @param name The entry name
      */
     public ImageryInfo(String name) {
-        this.name=name;
+        super(name);
     }
 
     /**
@@ -310,7 +325,7 @@ public class ImageryInfo implements Comparable<ImageryInfo>, Attributed {
      * @param url The entry extended URL
      */
     public ImageryInfo(String name, String url) {
-        this.name=name;
+        this(name);
         setExtendedUrl(url);
     }
 
@@ -321,7 +336,7 @@ public class ImageryInfo implements Comparable<ImageryInfo>, Attributed {
      * @param eulaAcceptanceRequired The EULA URL
      */
     public ImageryInfo(String name, String url, String eulaAcceptanceRequired) {
-        this.name=name;
+        this(name);
         setExtendedUrl(url);
         this.eulaAcceptanceRequired = eulaAcceptanceRequired;
     }
@@ -336,10 +351,10 @@ public class ImageryInfo implements Comparable<ImageryInfo>, Attributed {
      * @throws IllegalArgumentException if type refers to an unknown imagery type
      */
     public ImageryInfo(String name, String url, String type, String eulaAcceptanceRequired, String cookies) {
-        this.name=name;
+        this(name);
         setExtendedUrl(url);
         ImageryType t = ImageryType.fromString(type);
-        this.cookies=cookies;
+        this.cookies = cookies;
         this.eulaAcceptanceRequired = eulaAcceptanceRequired;
         if (t != null) {
             this.imageryType = t;
@@ -348,16 +363,19 @@ public class ImageryInfo implements Comparable<ImageryInfo>, Attributed {
         }
     }
 
+    public ImageryInfo(String name, String url, String type, String eulaAcceptanceRequired, String cookies, String id) {
+        this(name, url, type, eulaAcceptanceRequired, cookies);
+        setId(id);
+    }
+
     /**
      * Constructs a new {@code ImageryInfo} from an imagery preference entry.
      * @param e The imagery preference entry
      */
     public ImageryInfo(ImageryPreferenceEntry e) {
+        super(e.name, e.url, e.id);
         CheckParameterUtil.ensureParameterNotNull(e.name, "name");
         CheckParameterUtil.ensureParameterNotNull(e.url, "url");
-        name = e.name;
-        id = e.id;
-        url = e.url;
         description = e.description;
         cookies = e.cookies;
         eulaAcceptanceRequired = e.eula;
@@ -389,6 +407,11 @@ public class ImageryInfo implements Comparable<ImageryInfo>, Attributed {
         termsOfUseURL = e.terms_of_use_url;
         countryCode = e.country_code;
         icon = e.icon;
+        if (e.noTileHeaders != null) {
+            noTileHeaders = e.noTileHeaders;
+        }
+        setTileSize(e.tileSize);
+        metadataHeaders = e.metadataHeaders;
     }
 
     /**
@@ -396,9 +419,7 @@ public class ImageryInfo implements Comparable<ImageryInfo>, Attributed {
      * @param i The other imagery info
      */
     public ImageryInfo(ImageryInfo i) {
-        this.name = i.name;
-        this.id = i.id;
-        this.url = i.url;
+        super(i.name, i.url, i.id);
         this.defaultEntry = i.defaultEntry;
         this.cookies = i.cookies;
         this.eulaAcceptanceRequired = null;
@@ -417,6 +438,8 @@ public class ImageryInfo implements Comparable<ImageryInfo>, Attributed {
         this.countryCode = i.countryCode;
         this.icon = i.icon;
         this.description = i.description;
+        this.noTileHeaders = i.noTileHeaders;
+        this.metadataHeaders = i.metadataHeaders;
     }
 
     @Override
@@ -446,64 +469,29 @@ public class ImageryInfo implements Comparable<ImageryInfo>, Attributed {
         if (other == null) {
             return false;
         }
-        if (!Objects.equals(this.name, other.name)) {
-            return false;
-        }
-        if (!Objects.equals(this.id, other.id)) {
-            return false;
-        }
-        if (!Objects.equals(this.url, other.url)) {
-            return false;
-        }
-        if (!Objects.equals(this.cookies, other.cookies)) {
-            return false;
-        }
-        if (!Objects.equals(this.eulaAcceptanceRequired, other.eulaAcceptanceRequired)) {
-            return false;
-        }
-        if (this.imageryType != other.imageryType) {
-            return false;
-        }
-        if (this.defaultMaxZoom != other.defaultMaxZoom) {
-            return false;
-        }
-        if (this.defaultMinZoom != other.defaultMinZoom) {
-            return false;
-        }
-        if (!Objects.equals(this.bounds, other.bounds)) {
-            return false;
-        }
-        if (!Objects.equals(this.serverProjections, other.serverProjections)) {
-            return false;
-        }
-        if (!Objects.equals(this.attributionText, other.attributionText)) {
-            return false;
-        }
-        if (!Objects.equals(this.attributionLinkURL, other.attributionLinkURL)) {
-            return false;
-        }
-        if (!Objects.equals(this.attributionImage, other.attributionImage)) {
-            return false;
-        }
-        if (!Objects.equals(this.attributionImageURL, other.attributionImageURL)) {
-            return false;
-        }
-        if (!Objects.equals(this.termsOfUseText, other.termsOfUseText)) {
-            return false;
-        }
-        if (!Objects.equals(this.termsOfUseURL, other.termsOfUseURL)) {
-            return false;
-        }
-        if (!Objects.equals(this.countryCode, other.countryCode)) {
-            return false;
-        }
-        if (!Objects.equals(this.icon, other.icon)) {
-            return false;
-        }
-        if (!Objects.equals(this.description, other.description)) {
-            return false;
-        }
-        return true;
+
+        return
+                Objects.equals(this.name, other.name) &&
+                Objects.equals(this.id, other.id) &&
+                Objects.equals(this.url, other.url) &&
+                Objects.equals(this.cookies, other.cookies) &&
+                Objects.equals(this.eulaAcceptanceRequired, other.eulaAcceptanceRequired) &&
+                Objects.equals(this.imageryType, other.imageryType) &&
+                Objects.equals(this.defaultMaxZoom, other.defaultMaxZoom) &&
+                Objects.equals(this.defaultMinZoom, other.defaultMinZoom) &&
+                Objects.equals(this.bounds, other.bounds) &&
+                Objects.equals(this.serverProjections, other.serverProjections) &&
+                Objects.equals(this.attributionText, other.attributionText) &&
+                Objects.equals(this.attributionLinkURL, other.attributionLinkURL) &&
+                Objects.equals(this.attributionImageURL, other.attributionImageURL) &&
+                Objects.equals(this.attributionImage, other.attributionImage) &&
+                Objects.equals(this.termsOfUseText, other.termsOfUseText) &&
+                Objects.equals(this.termsOfUseURL, other.termsOfUseURL) &&
+                Objects.equals(this.countryCode, other.countryCode) &&
+                Objects.equals(this.icon, other.icon) &&
+                Objects.equals(this.description, other.description) &&
+                Objects.equals(this.noTileHeaders, other.noTileHeaders) &&
+                Objects.equals(this.metadataHeaders, other.metadataHeaders);
     }
 
     @Override
@@ -527,7 +515,7 @@ public class ImageryInfo implements Comparable<ImageryInfo>, Attributed {
     public int compareTo(ImageryInfo in) {
         int i = countryCode.compareTo(in.countryCode);
         if (i == 0) {
-            i = name.toLowerCase().compareTo(in.name.toLowerCase());
+            i = name.toLowerCase(Locale.ENGLISH).compareTo(in.name.toLowerCase(Locale.ENGLISH));
         }
         if (i == 0) {
             i = url.compareTo(in.url);
@@ -584,7 +572,7 @@ public class ImageryInfo implements Comparable<ImageryInfo>, Attributed {
     }
 
     @Override
-    public String getAttributionText(int zoom, Coordinate topLeft, Coordinate botRight) {
+    public String getAttributionText(int zoom, ICoordinate topLeft, ICoordinate botRight) {
         return attributionText;
     }
 
@@ -660,10 +648,10 @@ public class ImageryInfo implements Comparable<ImageryInfo>, Attributed {
                 this.url = m.group(3);
                 this.imageryType = type;
                 if (m.group(2) != null) {
-                    defaultMaxZoom = Integer.valueOf(m.group(2));
+                    defaultMaxZoom = Integer.parseInt(m.group(2));
                 }
                 if (m.group(1) != null) {
-                    defaultMinZoom = Integer.valueOf(m.group(1));
+                    defaultMinZoom = Integer.parseInt(m.group(1));
                 }
                 break;
             }
@@ -672,10 +660,11 @@ public class ImageryInfo implements Comparable<ImageryInfo>, Attributed {
         if (serverProjections == null || serverProjections.isEmpty()) {
             try {
                 serverProjections = new ArrayList<>();
-                Matcher m = Pattern.compile(".*\\{PROJ\\(([^)}]+)\\)\\}.*").matcher(url.toUpperCase());
-                if(m.matches()) {
-                    for(String p : m.group(1).split(","))
+                Matcher m = Pattern.compile(".*\\{PROJ\\(([^)}]+)\\)\\}.*").matcher(url.toUpperCase(Locale.ENGLISH));
+                if (m.matches()) {
+                    for (String p : m.group(1).split(",")) {
                         serverProjections.add(p);
+                    }
                 }
             } catch (Exception e) {
                 Main.warn(e);
@@ -686,14 +675,6 @@ public class ImageryInfo implements Comparable<ImageryInfo>, Attributed {
     /**
      * Returns the entry name.
      * @return The entry name
-     */
-    public String getName() {
-        return this.name;
-    }
-
-    /**
-     * Returns the entry name.
-     * @return The entry name
      * @since 6968
      */
     public String getOriginalName() {
@@ -701,14 +682,6 @@ public class ImageryInfo implements Comparable<ImageryInfo>, Attributed {
     }
 
     /**
-     * Sets the entry name.
-     * @param name The entry name
-     */
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    /**
      * Sets the entry name and handle translation.
      * @param language The used language
      * @param name The entry name
@@ -716,58 +689,22 @@ public class ImageryInfo implements Comparable<ImageryInfo>, Attributed {
      */
     public void setName(String language, String name) {
         boolean isdefault = LanguageInfo.getJOSMLocaleCode(null).equals(language);
-        if(LanguageInfo.isBetterLanguage(langName, language)) {
+        if (LanguageInfo.isBetterLanguage(langName, language)) {
             this.name = isdefault ? tr(name) : name;
             this.langName = language;
         }
-        if(origName == null || isdefault) {
+        if (origName == null || isdefault) {
             this.origName = name;
         }
     }
 
-    /**
-     * Gets the entry id.
-     *
-     * Id can be null. This gets the configured id as is. Due to a user error,
-     * this may not be unique. Use {@link ImageryLayerInfo#getUniqueId} to ensure
-     * a unique value.
-     * @return the id
-     */
-    public String getId() {
-        return this.id;
-    }
-
-    /**
-     * Sets the entry id.
-     * @param id the entry id
-     */
-    public void setId(String id) {
-        this.id = id;
-    }
-
     public void clearId() {
         if (this.id != null) {
             Collection<String> newAddedIds = new TreeSet<>(Main.pref.getCollection("imagery.layers.addedIds"));
             newAddedIds.add(this.id);
             Main.pref.putCollection("imagery.layers.addedIds", newAddedIds);
         }
-        this.id = null;
-    }
-
-    /**
-     * Returns the entry URL.
-     * @return The entry URL
-     */
-    public String getUrl() {
-        return this.url;
-    }
-
-    /**
-     * Sets the entry URL.
-     * @param url The entry URL
-     */
-    public void setUrl(String url) {
-        this.url = url;
+        setId(null);
     }
 
     /**
@@ -790,6 +727,7 @@ public class ImageryInfo implements Comparable<ImageryInfo>, Attributed {
      * Return the data part of HTTP cookies header in case the service requires cookies to work
      * @return the cookie data part
      */
+    @Override
     public String getCookies() {
         return this.cookies;
     }
@@ -802,6 +740,7 @@ public class ImageryInfo implements Comparable<ImageryInfo>, Attributed {
      * Returns the maximum zoom level.
      * @return The maximum zoom level
      */
+    @Override
     public int getMaxZoom() {
         return this.defaultMaxZoom;
     }
@@ -810,6 +749,7 @@ public class ImageryInfo implements Comparable<ImageryInfo>, Attributed {
      * Returns the minimum zoom level.
      * @return The minimum zoom level
      */
+    @Override
     public int getMinZoom() {
         return this.defaultMinZoom;
     }
@@ -831,7 +771,7 @@ public class ImageryInfo implements Comparable<ImageryInfo>, Attributed {
      */
     public void setDescription(String language, String description) {
         boolean isdefault = LanguageInfo.getJOSMLocaleCode(null).equals(language);
-        if(LanguageInfo.isBetterLanguage(langDescription, language)) {
+        if (LanguageInfo.isBetterLanguage(langDescription, language)) {
             this.description = isdefault ? tr(description) : description;
             this.langDescription = language;
         }
@@ -920,12 +860,12 @@ public class ImageryInfo implements Comparable<ImageryInfo>, Attributed {
      */
     public String getExtendedUrl() {
         return imageryType.getTypeString() + (defaultMaxZoom != 0
-            ? "["+(defaultMinZoom != 0 ? defaultMinZoom+",":"")+defaultMaxZoom+"]" : "") + ":" + url;
+            ? "["+(defaultMinZoom != 0 ? defaultMinZoom+"," : "")+defaultMaxZoom+"]" : "") + ":" + url;
     }
 
     public String getToolbarName() {
         String res = name;
-        if(pixelPerDegree != 0.0) {
+        if (pixelPerDegree != 0) {
             res += "#PPD="+pixelPerDegree;
         }
         return res;
@@ -933,7 +873,7 @@ public class ImageryInfo implements Comparable<ImageryInfo>, Attributed {
 
     public String getMenuName() {
         String res = name;
-        if(pixelPerDegree != 0.0) {
+        if (pixelPerDegree != 0) {
             res += " ("+pixelPerDegree+")";
         }
         return res;
@@ -1025,4 +965,31 @@ public class ImageryInfo implements Comparable<ImageryInfo>, Attributed {
         Capabilities capabilities = OsmApi.getOsmApi().getCapabilities();
         return capabilities != null && capabilities.isOnImageryBlacklist(this.url);
     }
+
+    /**
+     * Sets the map of <header name, header value> that if any of this header
+     * will be returned, then this tile will be treated as "no tile at this zoom level"
+     *
+     * @param noTileHeaders Map of <header name, header value> which will be treated as "no tile at this zoom level"
+     * @since 8344
+     */
+    public void setNoTileHeaders(Map<String, String> noTileHeaders) {
+       this.noTileHeaders = noTileHeaders;
+    }
+
+    @Override
+    public Map<String, String> getNoTileHeaders() {
+        return noTileHeaders;
+    }
+
+    /**
+     * Returns the map of <header name, metadata key> indicating, which HTTP headers should
+     * be moved to metadata
+     *
+     * @param metadataHeaders map of <header name, metadata key> indicating, which HTTP headers should be moved to metadata
+     * @since 8418
+     */
+    public void setMetadataHeaders(Map<String, String> metadataHeaders) {
+        this.metadataHeaders = metadataHeaders;
+    }
 }
diff --git a/src/org/openstreetmap/josm/data/imagery/ImageryLayerInfo.java b/src/org/openstreetmap/josm/data/imagery/ImageryLayerInfo.java
index 96f8b50..fcfb213 100644
--- a/src/org/openstreetmap/josm/data/imagery/ImageryLayerInfo.java
+++ b/src/org/openstreetmap/josm/data/imagery/ImageryLayerInfo.java
@@ -108,7 +108,9 @@ public class ImageryLayerInfo {
                 Main.error(ex);
             }
         }
-        while (defaultLayers.remove(null));
+        while (defaultLayers.remove(null)) {
+            // Do nothing
+        }
         Collections.sort(defaultLayers);
         buildIdMap(defaultLayers, defaultLayerIds);
         updateEntriesFromDefaults();
@@ -148,6 +150,24 @@ public class ImageryLayerInfo {
         Collection<String> knownDefaults = Main.pref.getCollection("imagery.layers.default");
         Collection<String> newKnownDefaults = new TreeSet<>(knownDefaults);
         for (ImageryInfo def : defaultLayers) {
+            // temporary migration code, so all user preferences will get updated with new settings from JOSM site (can be removed ~Dez. 2015)
+            if (def.getNoTileHeaders() != null || def.getTileSize() > 0 || def.getMetadataHeaders() != null) {
+                for (ImageryInfo i: layers) {
+                    if (isSimilar(def,  i)) {
+                        if (def.getNoTileHeaders() != null) {
+                            i.setNoTileHeaders(def.getNoTileHeaders());
+                        }
+                        if (def.getTileSize() > 0) {
+                            i.setTileSize(def.getTileSize());
+                        }
+                        if (def.getMetadataHeaders() != null && def.getMetadataHeaders().size() > 0) {
+                            i.setMetadataHeaders(def.getMetadataHeaders());
+                        }
+                        changed = true;
+                    }
+                }
+            }
+
             if (def.isDefaultEntry()) {
                 boolean isKnownDefault = false;
                 for (String url : knownDefaults) {
@@ -199,7 +219,7 @@ public class ImageryLayerInfo {
         Main.pref.putCollection("imagery.layers.addedIds", newAddedIds);
 
         // automatically update user entries with same id as a default entry
-        for (int i=0; i<layers.size(); i++) {
+        for (int i = 0; i < layers.size(); i++) {
             ImageryInfo info = layers.get(i);
             if (info.getId() == null) {
                 continue;
diff --git a/src/org/openstreetmap/josm/data/imagery/OffsetBookmark.java b/src/org/openstreetmap/josm/data/imagery/OffsetBookmark.java
index 614b343..19c7905 100644
--- a/src/org/openstreetmap/josm/data/imagery/OffsetBookmark.java
+++ b/src/org/openstreetmap/josm/data/imagery/OffsetBookmark.java
@@ -70,7 +70,7 @@ public class OffsetBookmark {
         res.add(name);
         res.add(String.valueOf(dx));
         res.add(String.valueOf(dy));
-        if (this.centerX != 0 || this.centerY != 0) {
+        if (centerX != 0 || centerY != 0) {
             res.add(String.valueOf(centerX));
             res.add(String.valueOf(centerY));
         }
@@ -78,7 +78,7 @@ public class OffsetBookmark {
     }
 
     public static void loadBookmarks() {
-        for(Collection<String> c : Main.pref.getArray("imagery.offsets",
+        for (Collection<String> c : Main.pref.getArray("imagery.offsets",
                 Collections.<Collection<String>>emptySet())) {
             allBookmarks.add(new OffsetBookmark(c));
         }
@@ -105,12 +105,12 @@ public class OffsetBookmark {
         if (Main.isDisplayingMapView()) {
             center = Main.getProjection().eastNorth2latlon(Main.map.mapView.getCenter());
         } else {
-            center = new LatLon(0,0);
+            center = new LatLon(0, 0);
         }
         OffsetBookmark nb = new OffsetBookmark(
                 Main.getProjection().toCode(), layer.getInfo().getName(),
                 name, layer.getDx(), layer.getDy(), center.lon(), center.lat());
-        for (ListIterator<OffsetBookmark> it = allBookmarks.listIterator();it.hasNext();) {
+        for (ListIterator<OffsetBookmark> it = allBookmarks.listIterator(); it.hasNext();) {
             OffsetBookmark b = it.next();
             if (b.isUsable(layer) && name.equals(b.name)) {
                 it.set(nb);
diff --git a/src/org/openstreetmap/josm/data/imagery/Shape.java b/src/org/openstreetmap/josm/data/imagery/Shape.java
index 1e3f267..641fd97 100644
--- a/src/org/openstreetmap/josm/data/imagery/Shape.java
+++ b/src/org/openstreetmap/josm/data/imagery/Shape.java
@@ -20,19 +20,24 @@ import org.openstreetmap.josm.tools.Geometry;
  */
 public class Shape {
 
-    private List<Coordinate> coords = new ArrayList<>();
+    private final List<Coordinate> coords = new ArrayList<>();
 
     public Shape(String asString, String separator) {
         CheckParameterUtil.ensureParameterNotNull(asString, "asString");
         String[] components = asString.split(separator);
         if (components.length % 2 != 0)
-            throw new IllegalArgumentException(MessageFormat.format("Even number of doubles expected in string, got {0}: {1}", components.length, asString));
-        for (int i=0; i<components.length; i+=2) {
+            throw new IllegalArgumentException(MessageFormat.format("Even number of doubles expected in string, got {0}: {1}",
+                    components.length, asString));
+        for (int i = 0; i < components.length; i += 2) {
             addPoint(components[i], components[i+1]);
         }
     }
 
+    /**
+     * Constructs a new empty {@code Shape}.
+     */
     public Shape() {
+        // shape contents can be set later with addPoint()
     }
 
     public String encodeAsString(String separator) {
@@ -71,7 +76,7 @@ public class Shape {
             if (!LatLon.isValidLat(lat))
                 throw new IllegalArgumentException(tr("Illegal latitude value ''{0}''", lat));
         } catch (NumberFormatException e) {
-            throw new IllegalArgumentException(MessageFormat.format("Illegal double value ''{0}''", sLat));
+            throw new IllegalArgumentException(MessageFormat.format("Illegal double value ''{0}''", sLat), e);
         }
 
         try {
@@ -79,7 +84,7 @@ public class Shape {
             if (!LatLon.isValidLon(lon))
                 throw new IllegalArgumentException(tr("Illegal longitude value ''{0}''", lon));
         } catch (NumberFormatException e) {
-            throw new IllegalArgumentException(MessageFormat.format("Illegal double value ''{0}''", sLon));
+            throw new IllegalArgumentException(MessageFormat.format("Illegal double value ''{0}''", sLon), e);
         }
 
         coords.add(new Coordinate(LatLon.roundToOsmPrecision(lat), LatLon.roundToOsmPrecision(lon)));
@@ -106,6 +111,4 @@ public class Shape {
         }
         return true;
     }
-
-
 }
diff --git a/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoader.java b/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoader.java
index 3fd09b4..61d036d 100644
--- a/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoader.java
+++ b/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoader.java
@@ -3,6 +3,8 @@ package org.openstreetmap.josm.data.imagery;
 
 import java.io.IOException;
 import java.util.Map;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
 
 import org.apache.commons.jcs.access.behavior.ICacheAccess;
 import org.openstreetmap.gui.jmapviewer.Tile;
@@ -13,8 +15,9 @@ import org.openstreetmap.gui.jmapviewer.interfaces.TileLoader;
 import org.openstreetmap.gui.jmapviewer.interfaces.TileLoaderListener;
 import org.openstreetmap.gui.jmapviewer.interfaces.TileSource;
 import org.openstreetmap.josm.data.cache.BufferedImageCacheEntry;
-import org.openstreetmap.josm.data.cache.JCSCacheManager;
+import org.openstreetmap.josm.data.cache.HostLimitQueue;
 import org.openstreetmap.josm.data.preferences.IntegerProperty;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
  * @author Wiktor Niesiobędzki
@@ -24,50 +27,89 @@ import org.openstreetmap.josm.data.preferences.IntegerProperty;
  */
 public class TMSCachedTileLoader implements TileLoader, CachedTileLoader, TileCache {
 
-    private ICacheAccess<String, BufferedImageCacheEntry> cache;
-    private int connectTimeout;
-    private int readTimeout;
-    private Map<String, String> headers;
-    private TileLoaderListener listener;
-    public static final String PREFERENCE_PREFIX   = "imagery.tms.cache.";
-    // average tile size is about 20kb
-    public static final IntegerProperty MAX_OBJECTS_ON_DISK = new IntegerProperty(PREFERENCE_PREFIX + "max_objects_disk", 25000); // 25000 is around 500MB under this assumptions
+    protected final ICacheAccess<String, BufferedImageCacheEntry> cache;
+    protected final int connectTimeout;
+    protected final int readTimeout;
+    protected final Map<String, String> headers;
+    protected final TileLoaderListener listener;
 
+    /**
+     * overrides the THREAD_LIMIT in superclass, as we want to have separate limit and pool for TMS
+     */
+
+    public static final IntegerProperty THREAD_LIMIT = new IntegerProperty("imagery.tms.tmsloader.maxjobs", 25);
+
+    /**
+     * Limit definition for per host concurrent connections
+     */
+    public static final IntegerProperty HOST_LIMIT = new IntegerProperty("imagery.tms.tmsloader.maxjobsperhost", 6);
+
+
+    /**
+     * separate from JCS thread pool for TMS loader, so we can have different thread pools for default JCS
+     * and for TMS imagery
+     */
+    private static ThreadPoolExecutor DEFAULT_DOWNLOAD_JOB_DISPATCHER = getNewThreadPoolExecutor("TMS-downloader-%d");
+
+
+    private ThreadPoolExecutor downloadExecutor = DEFAULT_DOWNLOAD_JOB_DISPATCHER;
 
     /**
      * Constructor
      * @param listener          called when tile loading has finished
-     * @param name              of the cache
+     * @param cache              of the cache
      * @param connectTimeout    to remote resource
      * @param readTimeout       to remote resource
-     * @param headers           to be sent along with request
-     * @param cacheDir          where cache file shall reside
+     * @param headers           HTTP headers to be sent along with request
      * @throws IOException      when cache initialization fails
      */
-    public TMSCachedTileLoader(TileLoaderListener listener, String name, int connectTimeout, int readTimeout, Map<String, String> headers, String cacheDir) throws IOException {
-        this.cache = JCSCacheManager.getCache(name,
-                200, // use fairly small memory cache, as cached objects are quite big, as they contain BufferedImages
-                MAX_OBJECTS_ON_DISK.get(),
-                cacheDir);
+    public TMSCachedTileLoader(TileLoaderListener listener, ICacheAccess<String, BufferedImageCacheEntry> cache,
+            int connectTimeout, int readTimeout, Map<String, String> headers) throws IOException {
+        this.cache = cache;
         this.connectTimeout = connectTimeout;
         this.readTimeout = readTimeout;
         this.headers = headers;
         this.listener = listener;
     }
 
+    /**
+     * @param nameFormat see {@link Utils#newThreadFactory(String, int)}
+     * @param workers number of worker thread to keep
+     * @return new ThreadPoolExecutor that will use a @see HostLimitQueue based queue
+     */
+    public static ThreadPoolExecutor getNewThreadPoolExecutor(String nameFormat, int workers) {
+        return new ThreadPoolExecutor(
+                workers, // keep the thread number constant
+                workers, // do not this number of threads
+                30, // keepalive for thread
+                TimeUnit.SECONDS,
+                new HostLimitQueue(HOST_LIMIT.get().intValue()),
+                Utils.newThreadFactory(nameFormat, Thread.NORM_PRIORITY)
+                );
+    }
+
+    /**
+     * @param name name of threads
+     * @return new ThreadPoolExecutor that will use a @see HostLimitQueue based queue, with default number of threads
+     */
+    public static ThreadPoolExecutor getNewThreadPoolExecutor(String name) {
+        return getNewThreadPoolExecutor(name, THREAD_LIMIT.get().intValue());
+    }
+
     @Override
     public TileJob createTileLoaderJob(Tile tile) {
-        return new TMSCachedTileLoaderJob(listener, tile, cache, connectTimeout, readTimeout, headers);
+        return new TMSCachedTileLoaderJob(listener, tile, cache,
+                connectTimeout, readTimeout, headers, getDownloadExecutor());
     }
 
     @Override
     public void clearCache(TileSource source) {
-        this.cache.clear();
+        this.cache.remove(source.getName() + ":");
     }
 
     @Override
     public Tile getTile(TileSource source, int x, int y, int z) {
-        return createTileLoaderJob(new Tile(source,x, y, z)).getTile();
+        return createTileLoaderJob(new Tile(source, x, y, z)).getTile();
     }
 
     @Override
@@ -85,7 +127,41 @@ public class TMSCachedTileLoader implements TileLoader, CachedTileLoader, TileCa
         cache.clear();
     }
 
+    /**
+     * @return cache statistics as string
+     */
     public String getStats() {
         return cache.getStats();
     }
+
+    /**
+     * cancels all outstanding tasks in the queue. This rollbacks the state of the tiles in the queue
+     * to loading = false / loaded = false
+     */
+    @Override
+    public void cancelOutstandingTasks() {
+        for (Runnable r: downloadExecutor.getQueue()) {
+            if (downloadExecutor.remove(r) && r instanceof TMSCachedTileLoaderJob) {
+                ((TMSCachedTileLoaderJob) r).handleJobCancellation();
+            }
+        }
+    }
+
+    /**
+     * Sets the download executor that will be used to download tiles instead of default one.
+     * You can use {@link #getNewThreadPoolExecutor} to create a new download executor with separate
+     * queue from default.
+     *
+     * @param downloadExecutor download executor that will be used to download tiles
+     */
+    public void setDownloadExecutor(ThreadPoolExecutor downloadExecutor) {
+        this.downloadExecutor = downloadExecutor;
+    }
+
+    /**
+     * @return download executor that is used by this factory
+     */
+    public ThreadPoolExecutor getDownloadExecutor() {
+        return downloadExecutor;
+    }
 }
diff --git a/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoaderJob.java b/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoaderJob.java
index a627c90..75e05ed 100644
--- a/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoaderJob.java
+++ b/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoaderJob.java
@@ -1,18 +1,20 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.imagery;
 
+import static org.openstreetmap.josm.tools.I18n.tr;
+
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.net.URL;
+import java.net.URLConnection;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.Executor;
-import java.util.concurrent.Semaphore;
 import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -23,12 +25,11 @@ import org.openstreetmap.gui.jmapviewer.interfaces.TileJob;
 import org.openstreetmap.gui.jmapviewer.interfaces.TileLoaderListener;
 import org.openstreetmap.gui.jmapviewer.interfaces.TileSource;
 import org.openstreetmap.gui.jmapviewer.tilesources.AbstractTMSTileSource;
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.cache.BufferedImageCacheEntry;
 import org.openstreetmap.josm.data.cache.CacheEntry;
+import org.openstreetmap.josm.data.cache.CacheEntryAttributes;
 import org.openstreetmap.josm.data.cache.ICachedLoaderListener;
 import org.openstreetmap.josm.data.cache.JCSCachedTileLoaderJob;
-import org.openstreetmap.josm.data.preferences.IntegerProperty;
 
 /**
  * @author Wiktor Niesiobędzki
@@ -37,106 +38,31 @@ import org.openstreetmap.josm.data.preferences.IntegerProperty;
  * @since 8168
  */
 public class TMSCachedTileLoaderJob extends JCSCachedTileLoaderJob<String, BufferedImageCacheEntry> implements TileJob, ICachedLoaderListener  {
-    private static final Logger log = FeatureAdapter.getLogger(TMSCachedTileLoaderJob.class.getCanonicalName());
+    private static final Logger LOG = FeatureAdapter.getLogger(TMSCachedTileLoaderJob.class.getCanonicalName());
+    private static final long MAXIMUM_EXPIRES = 30 /*days*/ * 24 /*hours*/ * 60 /*minutes*/ * 60 /*seconds*/ *1000L /*milliseconds*/;
+    private static final long MINIMUM_EXPIRES = 1 /*hour*/ * 60 /*minutes*/ * 60 /*seconds*/ *1000L /*milliseconds*/;
     private Tile tile;
     private volatile URL url;
 
     // we need another deduplication of Tile Loader listeners, as for each submit, new TMSCachedTileLoaderJob was created
     // that way, we reduce calls to tileLoadingFinished, and general CPU load due to surplus Map repaints
-    private static final ConcurrentMap<String,Set<TileLoaderListener>> inProgress = new ConcurrentHashMap<>();
-
-    /**
-     * Limit definition for per host concurrent connections
-     */
-    public static final IntegerProperty HOST_LIMIT = new IntegerProperty("imagery.tms.tmsloader.maxjobsperhost", 6);
-
-     /*
-     * Host limit guards the area - between submission to the queue up to loading is finished. It uses executionGuard method
-     * from JCSCachedTileLoaderJob to acquire the semaphore, and releases it - when loadingFinished is called (but not when
-     * LoadResult.GUARD_REJECTED is set)
-     *
-     */
-
-    private Semaphore getSemaphore() {
-        String host = getUrl().getHost();
-        Semaphore limit = HOST_LIMITS.get(host);
-        if (limit == null) {
-            synchronized(HOST_LIMITS) {
-                limit = HOST_LIMITS.get(host);
-                if (limit == null) {
-                    limit = new Semaphore(HOST_LIMIT.get().intValue());
-                    HOST_LIMITS.put(host, limit);
-                }
-            }
-        }
-        return limit;
-    }
-
-    private boolean acquireSemaphore() {
-        boolean ret = true;
-        Semaphore limit = getSemaphore();
-        if (limit != null) {
-            ret = limit.tryAcquire();
-            if (!ret) {
-                Main.debug("rejecting job because of per host limit");
-            }
-        }
-        return ret;
-    }
-
-    private void releaseSemaphore() {
-        Semaphore limit = getSemaphore();
-        if (limit != null) {
-            limit.release();
-        }
-    }
-
-    private static Map<String, Semaphore> HOST_LIMITS = new ConcurrentHashMap<>();
-
-    /**
-     * overrides the THREAD_LIMIT in superclass, as we want to have separate limit and pool for TMS
-     */
-    public static final IntegerProperty THREAD_LIMIT = new IntegerProperty("imagery.tms.tmsloader.maxjobs", 25);
-
-    /**
-     * separate from JCS thread pool for TMS loader, so we can have different thread pools for default JCS
-     * and for TMS imagery
-     */
-    private static ThreadPoolExecutor DOWNLOAD_JOB_DISPATCHER = getThreadPoolExecutor();
-
-    private static ThreadPoolExecutor getThreadPoolExecutor() {
-        return new ThreadPoolExecutor(
-                THREAD_LIMIT.get().intValue(), // keep the thread number constant
-                THREAD_LIMIT.get().intValue(), // do not this number of threads
-                30, // keepalive for thread
-                TimeUnit.SECONDS,
-                // make queue of LIFO type - so recently requested tiles will be loaded first (assuming that these are which user is waiting to see)
-                new LIFOQueue(5)
-                    /* keep the queue size fairly small, we do not want to
-                     download a lot of tiles, that user is not seeing anyway */
-                );
-    }
-
-    /**
-     * Reconfigures download dispatcher using current values of THREAD_LIMIT and HOST_LIMIT
-     */
-    public static final void reconfigureDownloadDispatcher() {
-        HOST_LIMITS = new ConcurrentHashMap<>();
-        DOWNLOAD_JOB_DISPATCHER = getThreadPoolExecutor();
-    }
+    private static final ConcurrentMap<String, Set<TileLoaderListener>> inProgress = new ConcurrentHashMap<>();
 
     /**
      * Constructor for creating a job, to get a specific tile from cache
-     * @param listener
+     * @param listener Tile loader listener
      * @param tile to be fetched from cache
      * @param cache object
      * @param connectTimeout when connecting to remote resource
      * @param readTimeout when connecting to remote resource
-     * @param headers to be sent together with request
+     * @param headers HTTP headers to be sent together with request
+     * @param downloadExecutor that will be executing the jobs
      */
-    public TMSCachedTileLoaderJob(TileLoaderListener listener, Tile tile, ICacheAccess<String, BufferedImageCacheEntry> cache, int connectTimeout, int readTimeout,
-            Map<String, String> headers) {
-        super(cache, connectTimeout, readTimeout, headers);
+    public TMSCachedTileLoaderJob(TileLoaderListener listener, Tile tile,
+            ICacheAccess<String, BufferedImageCacheEntry> cache,
+            int connectTimeout, int readTimeout, Map<String, String> headers,
+            ThreadPoolExecutor downloadExecutor) {
+        super(cache, connectTimeout, readTimeout, headers, downloadExecutor);
         this.tile = tile;
         if (listener != null) {
             String deduplicationKey = getCacheKey();
@@ -158,8 +84,14 @@ public class TMSCachedTileLoaderJob extends JCSCachedTileLoaderJob<String, Buffe
 
     @Override
     public String getCacheKey() {
-        if (tile != null)
-            return tile.getKey();
+        if (tile != null) {
+            TileSource tileSource = tile.getTileSource();
+            String tsName = tileSource.getName();
+            if (tsName == null) {
+                tsName = "";
+            }
+            return tsName.replace(":", "_") + ":" + tileSource.getTileId(tile.getZoom(), tile.getXtile(), tile.getYtile());
+        }
         return null;
     }
 
@@ -173,16 +105,11 @@ public class TMSCachedTileLoaderJob extends JCSCachedTileLoaderJob<String, Buffe
      *
      */
     @Override
-    public URL getUrl() {
+    public URL getUrl() throws IOException {
         if (url == null) {
-            try {
-                synchronized (this) {
-                    if (url == null)
-                        url = new URL(tile.getUrl());
-                }
-            } catch (IOException e) {
-                log.log(Level.WARNING, "JCS TMS Cache - error creating URL for tile {0}: {1}", new Object[] {tile.getKey(), e.getMessage()});
-                log.log(Level.INFO, "Exception: ", e);
+            synchronized (this) {
+                if (url == null)
+                    url = new URL(tile.getUrl());
             }
         }
         return url;
@@ -193,93 +120,105 @@ public class TMSCachedTileLoaderJob extends JCSCachedTileLoaderJob<String, Buffe
         if (cacheData != null) {
             byte[] content = cacheData.getContent();
             try {
-                return content != null  || cacheData.getImage() != null || cacheAsEmpty();
+                return content != null  || cacheData.getImage() != null || isNoTileAtZoom();
             } catch (IOException e) {
-                log.log(Level.WARNING, "JCS TMS - error loading from cache for tile {0}: {1}", new Object[] {tile.getKey(), e.getMessage()});
+                LOG.log(Level.WARNING, "JCS TMS - error loading from cache for tile {0}: {1}", new Object[] {tile.getKey(), e.getMessage()});
             }
         }
         return false;
     }
 
-    private boolean isNoTileAtZoom() {
-        return attributes != null && attributes.isNoTileAtZoom();
-    }
-
     @Override
-    protected boolean cacheAsEmpty() {
-        return isNoTileAtZoom();
-    }
-
-    private boolean handleNoTileAtZoom() {
-        if (isNoTileAtZoom()) {
-            log.log(Level.FINE, "JCS TMS - Tile valid, but no file, as no tiles at this level {0}", tile);
-            tile.setError("No tile at this zoom level");
-            tile.putValue("tile-info", "no-tile");
-            return true;
+    protected boolean isResponseLoadable(Map<String, List<String>> headers, int statusCode, byte[] content) {
+        attributes.setMetadata(tile.getTileSource().getMetadata(headers));
+        if (tile.getTileSource().isNoTileAtZoom(headers, statusCode, content)) {
+            attributes.setNoTileAtZoom(true);
+            return false; // do no try to load data from no-tile at zoom, cache empty object instead
         }
-        return false;
+        return super.isResponseLoadable(headers, statusCode, content);
     }
 
     @Override
-    protected Executor getDownloadExecutor() {
-        return DOWNLOAD_JOB_DISPATCHER;
-    }
-
-    @Override
-    protected boolean executionGuard() {
-        return acquireSemaphore();
+    protected boolean cacheAsEmpty() {
+        return isNoTileAtZoom() || super.cacheAsEmpty();
     }
 
     @Override
-    protected void executionFinished() {
-        releaseSemaphore();
-    }
-
-    public void submit() {
+    public void submit(boolean force) {
         tile.initLoading();
-        super.submit(this);
+        try {
+            super.submit(this, force);
+        } catch (Exception e) {
+            // if we fail to submit the job, mark tile as loaded and set error message
+            tile.finishLoading();
+            tile.setError(e.getMessage());
+        }
     }
 
     @Override
-    public void loadingFinished(CacheEntry object, LoadResult result) {
+    public void loadingFinished(CacheEntry object, CacheEntryAttributes attributes, LoadResult result) {
+        this.attributes = attributes; // as we might get notification from other object than our selfs, pass attributes along
         Set<TileLoaderListener> listeners;
         synchronized (inProgress) {
             listeners = inProgress.remove(getCacheKey());
         }
+        boolean status = result.equals(LoadResult.SUCCESS);
 
         try {
-            if(!tile.isLoaded()) { //if someone else already loaded tile, skip all the handling
+            if (!tile.isLoaded()) { //if someone else already loaded tile, skip all the handling
                 tile.finishLoading(); // whatever happened set that loading has finished
-                switch(result){
-                case FAILURE:
-                    tile.setError("Problem loading tile");
-                    // no break intentional here
+                // set tile metadata
+                if (this.attributes != null) {
+                    for (Entry<String, String> e: this.attributes.getMetadata().entrySet()) {
+                        tile.putValue(e.getKey(), e.getValue());
+                    }
+                }
+
+                switch(result) {
                 case SUCCESS:
                     handleNoTileAtZoom();
                     if (object != null) {
                         byte[] content = object.getContent();
                         if (content != null && content.length > 0) {
                             tile.loadImage(new ByteArrayInputStream(content));
+                            if (tile.getImage() == null) {
+                                tile.setError(tr("Could not load image from tile server"));
+                                status = false;
+                            }
                         }
                     }
+                    int httpStatusCode = attributes.getResponseCode();
+                    if (!isNoTileAtZoom() && httpStatusCode >= 400) {
+                        if (attributes.getErrorMessage() == null) {
+                            tile.setError(tr("HTTP error {0} when loading tiles", httpStatusCode));
+                        } else {
+                            tile.setError(tr("Error downloading tiles: {0}", attributes.getErrorMessage()));
+                        }
+                        status = false;
+                    }
+                    break;
+                case FAILURE:
+                    tile.setError("Problem loading tile");
                     // no break intentional here
-                case REJECTED:
+                    break;
+                case CANCELED:
+                    tile.loadingCanceled();
                     // do nothing
                 }
             }
 
             // always check, if there is some listener interested in fact, that tile has finished loading
             if (listeners != null) { // listeners might be null, if some other thread notified already about success
-                for(TileLoaderListener l: listeners) {
-                    l.tileLoadingFinished(tile, result.equals(LoadResult.SUCCESS));
+                for (TileLoaderListener l: listeners) {
+                    l.tileLoadingFinished(tile, status);
                 }
             }
         } catch (IOException e) {
-            log.log(Level.WARNING, "JCS TMS - error loading object for tile {0}: {1}", new Object[] {tile.getKey(), e.getMessage()});
-            tile.setError(e.getMessage());
+            LOG.log(Level.WARNING, "JCS TMS - error loading object for tile {0}: {1}", new Object[] {tile.getKey(), e.getMessage()});
+            tile.setError(e.toString());
             tile.setLoaded(false);
             if (listeners != null) { // listeners might be null, if some other thread notified already about success
-                for(TileLoaderListener l: listeners) {
+                for (TileLoaderListener l: listeners) {
                     l.tileLoadingFinished(tile, false);
                 }
             }
@@ -287,24 +226,81 @@ public class TMSCachedTileLoaderJob extends JCSCachedTileLoaderJob<String, Buffe
     }
 
     /**
+     * For TMS use BaseURL as settings discovery, so for different paths, we will have different settings (useful for developer servers)
+     *
+     * @return base URL of TMS or server url as defined in super class
+     */
+    @Override
+    protected String getServerKey() {
+        TileSource ts = tile.getSource();
+        if (ts instanceof AbstractTMSTileSource) {
+            return ((AbstractTMSTileSource) ts).getBaseUrl();
+        }
+        return super.getServerKey();
+    }
+
+    @Override
+    protected BufferedImageCacheEntry createCacheEntry(byte[] content) {
+        return new BufferedImageCacheEntry(content);
+    }
+
+    @Override
+    public void submit() {
+        submit(false);
+    }
+
+    @Override
+    protected CacheEntryAttributes parseHeaders(URLConnection urlConn) {
+        CacheEntryAttributes ret = super.parseHeaders(urlConn);
+        // keep the expiration time between MINIMUM_EXPIRES and MAXIMUM_EXPIRES, so we will cache the tiles
+        // at least for some short period of time, but not too long
+        if (ret.getExpirationTime() < now + MINIMUM_EXPIRES) {
+            ret.setExpirationTime(now + MINIMUM_EXPIRES);
+        }
+        if (ret.getExpirationTime() > now + MAXIMUM_EXPIRES) {
+            ret.setExpirationTime(now + MAXIMUM_EXPIRES);
+        }
+        return ret;
+    }
+
+    /**
      * Method for getting the tile from cache only, without trying to reach remote resource
      * @return tile or null, if nothing (useful) was found in cache
      */
     public Tile getCachedTile() {
         BufferedImageCacheEntry data = get();
-        if (isObjectLoadable()) {
+        if (isObjectLoadable() && isCacheElementValid()) {
             try {
-                if (data != null && data.getImage() != null) {
-                    tile.setImage(data.getImage());
-                    tile.finishLoading();
+                // set tile metadata
+                if (this.attributes != null) {
+                    for (Entry<String, String> e: this.attributes.getMetadata().entrySet()) {
+                        tile.putValue(e.getKey(), e.getValue());
+                    }
+                }
+
+                if (data != null) {
+                    if (data.getImage() != null) {
+                        tile.setImage(data.getImage());
+                        tile.finishLoading();
+                    } else {
+                        // we had some data, but we didn't get any image. Malformed image?
+                        tile.setError(tr("Could not load image from tile server"));
+                    }
                 }
                 if (isNoTileAtZoom()) {
                     handleNoTileAtZoom();
                     tile.finishLoading();
                 }
+                if (attributes != null && attributes.getResponseCode() >= 400) {
+                    if (attributes.getErrorMessage() == null) {
+                        tile.setError(tr("HTTP error {0} when loading tiles", attributes.getResponseCode()));
+                    } else {
+                        tile.setError(tr("Error downloading tiles: {0}", attributes.getErrorMessage()));
+                    }
+                }
                 return tile;
             } catch (IOException e) {
-                log.log(Level.WARNING, "JCS TMS - error loading object for tile {0}: {1}", new Object[] {tile.getKey(), e.getMessage()});
+                LOG.log(Level.WARNING, "JCS TMS - error loading object for tile {0}: {1}", new Object[] {tile.getKey(), e.getMessage()});
                 return null;
             }
 
@@ -313,29 +309,22 @@ public class TMSCachedTileLoaderJob extends JCSCachedTileLoaderJob<String, Buffe
         }
     }
 
-    @Override
-    protected boolean handleNotFound() {
-        tile.setError("No tile at this zoom level");
-        tile.putValue("tile-info", "no-tile");
-        return true;
+    private boolean handleNoTileAtZoom() {
+        if (isNoTileAtZoom()) {
+            LOG.log(Level.FINE, "JCS TMS - Tile valid, but no file, as no tiles at this level {0}", tile);
+            tile.setError("No tile at this zoom level");
+            tile.putValue("tile-info", "no-tile");
+            return true;
+        }
+        return false;
     }
 
-    /**
-     * For TMS use BaseURL as settings discovery, so for different paths, we will have different settings (useful for developer servers)
-     *
-     * @return base URL of TMS or server url as defined in super class
-     */
-    @Override
-    protected String getServerKey() {
-        TileSource ts = tile.getSource();
-        if (ts instanceof AbstractTMSTileSource) {
-            return ((AbstractTMSTileSource) ts).getBaseUrl();
+    private boolean isNoTileAtZoom() {
+        if (attributes == null) {
+            LOG.warning("Cache attributes are null");
         }
-        return super.getServerKey();
+        return attributes != null && attributes.isNoTileAtZoom();
     }
 
-    @Override
-    protected BufferedImageCacheEntry createCacheEntry(byte[] content) {
-        return new BufferedImageCacheEntry(content);
-    }
+
 }
diff --git a/src/org/openstreetmap/josm/data/imagery/TemplatedWMSTileSource.java b/src/org/openstreetmap/josm/data/imagery/TemplatedWMSTileSource.java
new file mode 100644
index 0000000..dd6c37c
--- /dev/null
+++ b/src/org/openstreetmap/josm/data/imagery/TemplatedWMSTileSource.java
@@ -0,0 +1,378 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.imagery;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.Point;
+import java.text.DecimalFormat;
+import java.text.DecimalFormatSymbols;
+import java.text.NumberFormat;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.openstreetmap.gui.jmapviewer.OsmMercator;
+import org.openstreetmap.gui.jmapviewer.Tile;
+import org.openstreetmap.gui.jmapviewer.TileXY;
+import org.openstreetmap.gui.jmapviewer.interfaces.ICoordinate;
+import org.openstreetmap.gui.jmapviewer.interfaces.TemplatedTileSource;
+import org.openstreetmap.gui.jmapviewer.tilesources.TMSTileSource;
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.coor.EastNorth;
+import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.projection.Projection;
+import org.openstreetmap.josm.gui.layer.WMSLayer;
+import org.openstreetmap.josm.tools.CheckParameterUtil;
+
+/**
+ * Tile Source handling WMS providers
+ *
+ * @author Wiktor Niesiobędzki
+ * @since 8526
+ */
+public class TemplatedWMSTileSource extends TMSTileSource implements TemplatedTileSource {
+    private final Map<String, String> headers = new ConcurrentHashMap<>();
+    private final Set<String> serverProjections;
+    private EastNorth topLeftCorner;
+    private Bounds worldBounds;
+    private int[] tileXMax;
+    private int[] tileYMax;
+    private double[] degreesPerTile;
+
+    private static final Pattern PATTERN_HEADER  = Pattern.compile("\\{header\\(([^,]+),([^}]+)\\)\\}");
+    private static final Pattern PATTERN_PROJ    = Pattern.compile("\\{proj\\}");
+    private static final Pattern PATTERN_BBOX    = Pattern.compile("\\{bbox\\}");
+    private static final Pattern PATTERN_W       = Pattern.compile("\\{w\\}");
+    private static final Pattern PATTERN_S       = Pattern.compile("\\{s\\}");
+    private static final Pattern PATTERN_E       = Pattern.compile("\\{e\\}");
+    private static final Pattern PATTERN_N       = Pattern.compile("\\{n\\}");
+    private static final Pattern PATTERN_WIDTH   = Pattern.compile("\\{width\\}");
+    private static final Pattern PATTERN_HEIGHT  = Pattern.compile("\\{height\\}");
+    private static final Pattern PATTERN_PARAM   = Pattern.compile("\\{([^}]+)\\}");
+
+    private static final NumberFormat latLonFormat = new DecimalFormat("###0.0000000", new DecimalFormatSymbols(Locale.US));
+
+    private static final Pattern[] ALL_PATTERNS = {
+        PATTERN_HEADER, PATTERN_PROJ, PATTERN_BBOX, PATTERN_W, PATTERN_S, PATTERN_E, PATTERN_N, PATTERN_WIDTH, PATTERN_HEIGHT
+    };
+
+    /*
+     * Constant taken from OGC WMTS Implementation Specification (http://www.opengeospatial.org/standards/wmts)
+     * From table E.4 - Definition of Well-known scale set GoogleMapsCompatibile
+     *
+     *  As higher zoom levels have denominator divided by 2, we keep only zoom level 1 in the code
+     */
+    private static final float SCALE_DENOMINATOR_ZOOM_LEVEL_1 = 559082264.0287178f;
+
+    /**
+     * Creates a tile source based on imagery info
+     * @param info imagery info
+     */
+    public TemplatedWMSTileSource(ImageryInfo info) {
+        super(info);
+        this.serverProjections = new TreeSet<>(info.getServerProjections());
+        handleTemplate();
+        initProjection();
+        // FIXME: remove in September 2015, when ImageryPreferenceEntry.tileSize will be initialized to -1 instead to 256
+        // need to leave it as it is to keep compatibility between tested and latest JOSM versions
+        tileSize = WMSLayer.PROP_IMAGE_SIZE.get();
+    }
+
+    /**
+     * Initializes class with current projection in JOSM. This call is needed every time projection changes.
+     */
+    public void initProjection() {
+        initProjection(Main.getProjection());
+    }
+
+    /**
+     * Initializes class with projection in JOSM. This call is needed every time projection changes.
+     * @param proj new projection that shall be used for computations
+     */
+    public void initProjection(Projection proj) {
+        this.worldBounds = getWorldBounds();
+        EastNorth min = proj.latlon2eastNorth(worldBounds.getMin());
+        EastNorth max = proj.latlon2eastNorth(worldBounds.getMax());
+        this.topLeftCorner = new EastNorth(min.east(), max.north());
+
+        LatLon bottomRight = new LatLon(worldBounds.getMinLat(), worldBounds.getMaxLon());
+
+        // use 256 as "tile size" to keep the scale in line with default tiles in Mercator projection
+        double crsScale = 256 * 0.28e-03 / proj.getMetersPerUnit();
+        tileXMax = new int[getMaxZoom() + 1];
+        tileYMax = new int[getMaxZoom() + 1];
+        degreesPerTile = new double[getMaxZoom() + 1];
+
+        for (int zoom = 1; zoom <= getMaxZoom(); zoom++) {
+            // use well known scale set "GoogleCompatibile" from OGC WMTS spec to calculate number of tiles per zoom level
+            // this makes the zoom levels "glued" to standard TMS zoom levels
+            degreesPerTile[zoom] = (SCALE_DENOMINATOR_ZOOM_LEVEL_1 / Math.pow(2, zoom - 1)) * crsScale;
+            TileXY maxTileIndex = latLonToTileXY(bottomRight.toCoordinate(), zoom);
+            tileXMax[zoom] = maxTileIndex.getXIndex();
+            tileYMax[zoom] = maxTileIndex.getYIndex();
+        }
+    }
+
+    @Override
+    public int getDefaultTileSize() {
+        return WMSLayer.PROP_IMAGE_SIZE.get();
+    }
+
+    @Override
+    public String getTileUrl(int zoom, int tilex, int tiley) {
+        String myProjCode = Main.getProjection().toCode();
+
+        EastNorth nw = getTileEastNorth(tilex, tiley, zoom);
+        EastNorth se = getTileEastNorth(tilex + 1, tiley + 1, zoom);
+
+        double w = nw.getX();
+        double n = nw.getY();
+
+        double s = se.getY();
+        double e = se.getX();
+
+        if (!serverProjections.contains(myProjCode) && serverProjections.contains("EPSG:4326") && "EPSG:3857".equals(myProjCode)) {
+            LatLon swll = Main.getProjection().eastNorth2latlon(new EastNorth(w, s));
+            LatLon nell = Main.getProjection().eastNorth2latlon(new EastNorth(e, n));
+            myProjCode = "EPSG:4326";
+            s = swll.lat();
+            w = swll.lon();
+            n = nell.lat();
+            e = nell.lon();
+        }
+
+        if ("EPSG:4326".equals(myProjCode) && !serverProjections.contains(myProjCode) && serverProjections.contains("CRS:84")) {
+            myProjCode = "CRS:84";
+        }
+
+        // Bounding box coordinates have to be switched for WMS 1.3.0 EPSG:4326.
+        //
+        // Background:
+        //
+        // bbox=x_min,y_min,x_max,y_max
+        //
+        //      SRS=... is WMS 1.1.1
+        //      CRS=... is WMS 1.3.0
+        //
+        // The difference:
+        //      For SRS x is east-west and y is north-south
+        //      For CRS x and y are as specified by the EPSG
+        //          E.g. [1] lists lat as first coordinate axis and lot as second, so it is switched for EPSG:4326.
+        //          For most other EPSG code there seems to be no difference.
+        // CHECKSTYLE.OFF: LineLength
+        // [1] https://www.epsg-registry.org/report.htm?type=selection&entity=urn:ogc:def:crs:EPSG::4326&reportDetail=short&style=urn:uuid:report-style:default-with-code&style_name=OGP%20Default%20With%20Code&title=EPSG:4326
+        // CHECKSTYLE.ON: LineLength
+        boolean switchLatLon = false;
+        if (baseUrl.toLowerCase(Locale.US).contains("crs=epsg:4326")) {
+            switchLatLon = true;
+        } else if (baseUrl.toLowerCase(Locale.US).contains("crs=")) {
+            // assume WMS 1.3.0
+            switchLatLon = Main.getProjection().switchXY();
+        }
+        String bbox;
+        if (switchLatLon) {
+            bbox = String.format("%s,%s,%s,%s", latLonFormat.format(s), latLonFormat.format(w), latLonFormat.format(n), latLonFormat.format(e));
+        } else {
+            bbox = String.format("%s,%s,%s,%s", latLonFormat.format(w), latLonFormat.format(s), latLonFormat.format(e), latLonFormat.format(n));
+        }
+
+        // Using StringBuffer and generic PATTERN_PARAM matcher gives 2x performance improvement over replaceAll
+        StringBuffer url = new StringBuffer(baseUrl.length());
+        Matcher matcher = PATTERN_PARAM.matcher(baseUrl);
+        while (matcher.find()) {
+            String replacement;
+            switch (matcher.group(1)) {
+            case "proj":
+                replacement = myProjCode;
+                break;
+            case "bbox":
+                replacement = bbox;
+                break;
+            case "w":
+                replacement = latLonFormat.format(w);
+                break;
+            case "s":
+                replacement = latLonFormat.format(s);
+                break;
+            case "e":
+                replacement = latLonFormat.format(e);
+                break;
+            case "n":
+                replacement = latLonFormat.format(n);
+                break;
+            case "width":
+            case "height":
+                replacement = String.valueOf(getTileSize());
+                break;
+            default:
+                replacement = "{" + matcher.group(1) + "}";
+            }
+            matcher.appendReplacement(url, replacement);
+        }
+        matcher.appendTail(url);
+        return url.toString().replace(" ", "%20");
+    }
+
+    @Override
+    public String getTileId(int zoom, int tilex, int tiley) {
+        return getTileUrl(zoom, tilex, tiley);
+    }
+
+    @Override
+    public ICoordinate tileXYToLatLon(Tile tile) {
+        return tileXYToLatLon(tile.getXtile(), tile.getYtile(), tile.getZoom());
+    }
+
+    @Override
+    public ICoordinate tileXYToLatLon(TileXY xy, int zoom) {
+        return tileXYToLatLon(xy.getXIndex(), xy.getYIndex(), zoom);
+    }
+
+    @Override
+    public ICoordinate tileXYToLatLon(int x, int y, int zoom) {
+        return Main.getProjection().eastNorth2latlon(getTileEastNorth(x, y, zoom)).toCoordinate();
+    }
+
+    @Override
+    public TileXY latLonToTileXY(double lat, double lon, int zoom) {
+        Projection proj = Main.getProjection();
+        EastNorth enPoint = proj.latlon2eastNorth(new LatLon(lat, lon));
+        double scale = getDegreesPerTile(zoom);
+        return new TileXY(
+                (enPoint.east() - topLeftCorner.east()) / scale,
+                (topLeftCorner.north() - enPoint.north()) / scale
+                );
+    }
+
+    @Override
+    public TileXY latLonToTileXY(ICoordinate point, int zoom) {
+        return latLonToTileXY(point.getLat(),  point.getLon(), zoom);
+    }
+
+    @Override
+    public int getTileXMax(int zoom) {
+        return tileXMax[zoom];
+    }
+
+    @Override
+    public int getTileXMin(int zoom) {
+        return 0;
+    }
+
+    @Override
+    public int getTileYMax(int zoom) {
+        return tileYMax[zoom];
+    }
+
+    @Override
+    public int getTileYMin(int zoom) {
+        return 0;
+    }
+
+    @Override
+    public Point latLonToXY(double lat, double lon, int zoom) {
+        double scale = getDegreesPerTile(zoom) / getTileSize();
+        EastNorth point = Main.getProjection().latlon2eastNorth(new LatLon(lat, lon));
+        return new Point(
+                    (int) Math.round((point.east() - topLeftCorner.east())   / scale),
+                    (int) Math.round((topLeftCorner.north() - point.north()) / scale)
+                );
+    }
+
+    @Override
+    public Point latLonToXY(ICoordinate point, int zoom) {
+        return latLonToXY(point.getLat(), point.getLon(), zoom);
+    }
+
+    @Override
+    public ICoordinate xyToLatLon(Point point, int zoom) {
+        return xyToLatLon(point.x, point.y, zoom);
+    }
+
+    @Override
+    public ICoordinate xyToLatLon(int x, int y, int zoom) {
+        double scale = getDegreesPerTile(zoom) / getTileSize();
+        Projection proj = Main.getProjection();
+        EastNorth ret = new EastNorth(
+                topLeftCorner.east() + x * scale,
+                topLeftCorner.north() - y * scale
+                );
+        return proj.eastNorth2latlon(ret).toCoordinate();
+    }
+
+    @Override
+    public Map<String, String> getHeaders() {
+        return headers;
+    }
+
+    /**
+     * Checks if url is acceptable by this Tile Source
+     * @param url URL to check
+     */
+    public static void checkUrl(String url) {
+        CheckParameterUtil.ensureParameterNotNull(url, "url");
+        Matcher m = PATTERN_PARAM.matcher(url);
+        while (m.find()) {
+            boolean isSupportedPattern = false;
+            for (Pattern pattern : ALL_PATTERNS) {
+                if (pattern.matcher(m.group()).matches()) {
+                    isSupportedPattern = true;
+                    break;
+                }
+            }
+            if (!isSupportedPattern) {
+                throw new IllegalArgumentException(
+                        tr("{0} is not a valid WMS argument. Please check this server URL:\n{1}", m.group(), url));
+            }
+        }
+    }
+
+    private void handleTemplate() {
+        // Capturing group pattern on switch values
+        StringBuffer output = new StringBuffer();
+        Matcher matcher = PATTERN_HEADER.matcher(this.baseUrl);
+        while (matcher.find()) {
+            headers.put(matcher.group(1), matcher.group(2));
+            matcher.appendReplacement(output, "");
+        }
+        matcher.appendTail(output);
+        this.baseUrl = output.toString();
+    }
+
+    protected EastNorth getTileEastNorth(int x, int y, int z) {
+        double scale = getDegreesPerTile(z);
+        return new EastNorth(
+                        topLeftCorner.east() + x * scale,
+                        topLeftCorner.north() - y * scale
+                        );
+    }
+
+    private double getDegreesPerTile(int zoom) {
+        return degreesPerTile[zoom];
+    }
+
+    /**
+     * returns world bounds, but detect situation, when default bounds are provided (-90, -180, 90, 180), and projection
+     * returns very close values for both min and max X. To work around this problem, cap this projection on north and south
+     * pole, the same way they are capped in Mercator projection, so conversions should work properly
+     */
+    private static Bounds getWorldBounds() {
+        Projection proj = Main.getProjection();
+        Bounds bounds = proj.getWorldBoundsLatLon();
+        EastNorth min = proj.latlon2eastNorth(bounds.getMin());
+        EastNorth max = proj.latlon2eastNorth(bounds.getMax());
+
+        if (Math.abs(min.getX() - max.getX()) < 1 && bounds.equals(new Bounds(new LatLon(-90, -180), new LatLon(90, 180)))) {
+            return new Bounds(
+                    new LatLon(OsmMercator.MIN_LAT, bounds.getMinLon()),
+                    new LatLon(OsmMercator.MAX_LAT, bounds.getMaxLon())
+                    );
+        }
+        return bounds;
+    }
+}
diff --git a/src/org/openstreetmap/josm/data/imagery/TileLoaderFactory.java b/src/org/openstreetmap/josm/data/imagery/TileLoaderFactory.java
new file mode 100644
index 0000000..7818d65
--- /dev/null
+++ b/src/org/openstreetmap/josm/data/imagery/TileLoaderFactory.java
@@ -0,0 +1,29 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.imagery;
+
+import java.util.Map;
+
+import org.openstreetmap.gui.jmapviewer.interfaces.TileLoader;
+import org.openstreetmap.gui.jmapviewer.interfaces.TileLoaderListener;
+
+/**
+ * Factory creating TileLoaders for layers
+ *
+ * @author Wiktor Niesiobędzki
+ * @since 8526
+ */
+public interface TileLoaderFactory {
+
+    /**
+     * @param listener that will be notified, when tile has finished loading
+     * @return TileLoader that notifies specified listener
+     */
+    TileLoader makeTileLoader(TileLoaderListener listener);
+
+    /**
+     * @param listener that will be notified, when tile has finished loading
+     * @param headers that will be sent with requests to TileSource
+     * @return TileLoader that uses both of above
+     */
+    TileLoader makeTileLoader(TileLoaderListener listener, Map<String, String> headers);
+}
diff --git a/src/org/openstreetmap/josm/data/imagery/WMSCachedTileLoader.java b/src/org/openstreetmap/josm/data/imagery/WMSCachedTileLoader.java
new file mode 100644
index 0000000..419e760
--- /dev/null
+++ b/src/org/openstreetmap/josm/data/imagery/WMSCachedTileLoader.java
@@ -0,0 +1,43 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.imagery;
+
+import java.io.IOException;
+import java.util.Map;
+
+import org.apache.commons.jcs.access.behavior.ICacheAccess;
+import org.openstreetmap.gui.jmapviewer.Tile;
+import org.openstreetmap.gui.jmapviewer.interfaces.TileJob;
+import org.openstreetmap.gui.jmapviewer.interfaces.TileLoaderListener;
+import org.openstreetmap.josm.data.cache.BufferedImageCacheEntry;
+
+/**
+ * Tileloader for WMS based imagery. It is separate to use different ThreadPoolExecutor, as we want
+ * to define number of simultaneous downloads for WMS separately
+ *
+ * @author Wiktor Niesiobędzki
+ * @since 8526
+ */
+public class WMSCachedTileLoader extends TMSCachedTileLoader {
+
+    /**
+     * Creates a TileLoader with separate WMS downloader.
+     *
+     * @param listener that will be notified when tile is loaded
+     * @param cache reference
+     * @param connectTimeout to tile source
+     * @param readTimeout from tile source
+     * @param headers to be sent with requests
+     * @throws IOException when there is a problem creating cache repository
+     */
+    public WMSCachedTileLoader(TileLoaderListener listener, ICacheAccess<String, BufferedImageCacheEntry> cache,
+            int connectTimeout, int readTimeout, Map<String, String> headers) throws IOException {
+
+        super(listener, cache, connectTimeout, readTimeout, headers);
+        setDownloadExecutor(TMSCachedTileLoader.getNewThreadPoolExecutor("WMS-downloader-%d", THREAD_LIMIT.get()));
+    }
+
+    @Override
+    public TileJob createTileLoaderJob(Tile tile) {
+        return new WMSCachedTileLoaderJob(listener, tile, cache, connectTimeout, readTimeout, headers, getDownloadExecutor());
+    }
+}
diff --git a/src/org/openstreetmap/josm/data/imagery/WMSCachedTileLoaderJob.java b/src/org/openstreetmap/josm/data/imagery/WMSCachedTileLoaderJob.java
new file mode 100644
index 0000000..76fb7e1
--- /dev/null
+++ b/src/org/openstreetmap/josm/data/imagery/WMSCachedTileLoaderJob.java
@@ -0,0 +1,46 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.imagery;
+
+import java.util.Map;
+import java.util.concurrent.ThreadPoolExecutor;
+
+import org.apache.commons.jcs.access.behavior.ICacheAccess;
+import org.openstreetmap.gui.jmapviewer.Tile;
+import org.openstreetmap.gui.jmapviewer.interfaces.TileLoaderListener;
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.cache.BufferedImageCacheEntry;
+
+/**
+ * Separate class to handle WMS jobs, as it needs to react differently to HTTP response codes from WMS server
+ *
+ * @author Wiktor Niesiobędzki
+ * @since 8526
+ */
+public class WMSCachedTileLoaderJob extends TMSCachedTileLoaderJob {
+
+    /**
+     * Creates a job - that will download specific tile
+     * @param listener will be notified, when tile has loaded
+     * @param tile to load
+     * @param cache to use (get/put)
+     * @param connectTimeout to tile source
+     * @param readTimeout to tile source
+     * @param headers to be sent with request
+     * @param downloadExecutor that will execute the download task (if needed)
+     */
+    public WMSCachedTileLoaderJob(TileLoaderListener listener, Tile tile,
+            ICacheAccess<String, BufferedImageCacheEntry> cache, int connectTimeout, int readTimeout,
+            Map<String, String> headers, ThreadPoolExecutor downloadExecutor) {
+        super(listener, tile, cache, connectTimeout, readTimeout, headers, downloadExecutor);
+    }
+
+    @Override
+    public String getCacheKey() {
+        // include projection in cache key, as with different projections different response will be returned from server
+        String key = super.getCacheKey();
+        if (key != null) {
+            return key + Main.getProjection().toCode();
+        }
+        return null;
+    }
+}
diff --git a/src/org/openstreetmap/josm/data/imagery/WMTSTileSource.java b/src/org/openstreetmap/josm/data/imagery/WMTSTileSource.java
new file mode 100644
index 0000000..43e7f31
--- /dev/null
+++ b/src/org/openstreetmap/josm/data/imagery/WMTSTileSource.java
@@ -0,0 +1,687 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.imagery;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.Dimension;
+import java.awt.GridBagLayout;
+import java.awt.Point;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.swing.JPanel;
+import javax.swing.JTable;
+import javax.swing.ListSelectionModel;
+import javax.swing.table.AbstractTableModel;
+import javax.xml.XMLConstants;
+import javax.xml.namespace.QName;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathExpression;
+import javax.xml.xpath.XPathExpressionException;
+import javax.xml.xpath.XPathFactory;
+
+import org.openstreetmap.gui.jmapviewer.Coordinate;
+import org.openstreetmap.gui.jmapviewer.Tile;
+import org.openstreetmap.gui.jmapviewer.TileXY;
+import org.openstreetmap.gui.jmapviewer.interfaces.ICoordinate;
+import org.openstreetmap.gui.jmapviewer.interfaces.TemplatedTileSource;
+import org.openstreetmap.gui.jmapviewer.tilesources.TMSTileSource;
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.coor.EastNorth;
+import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.projection.Projection;
+import org.openstreetmap.josm.data.projection.Projections;
+import org.openstreetmap.josm.gui.ExtendedDialog;
+import org.openstreetmap.josm.io.CachedFile;
+import org.openstreetmap.josm.tools.CheckParameterUtil;
+import org.openstreetmap.josm.tools.GBC;
+import org.openstreetmap.josm.tools.Utils;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+/**
+ * Tile Source handling WMS providers
+ *
+ * @author Wiktor Niesiobędzki
+ * @since 8526
+ */
+public class WMTSTileSource extends TMSTileSource implements TemplatedTileSource {
+    private static final String PATTERN_HEADER  = "\\{header\\(([^,]+),([^}]+)\\)\\}";
+
+    private static final String URL_GET_ENCODING_PARAMS = "SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER={layer}&STYLE={Style}&"
+            + "FORMAT={format}&tileMatrixSet={TileMatrixSet}&tileMatrix={TileMatrix}&tileRow={TileRow}&tileCol={TileCol}";
+
+    private static final String[] ALL_PATTERNS = {
+        PATTERN_HEADER,
+    };
+
+    private static class TileMatrix {
+        private String identifier;
+        private double scaleDenominator;
+        private EastNorth topLeftCorner;
+        private int tileWidth;
+        private int tileHeight;
+        private int matrixWidth = -1;
+        private int matrixHeight = -1;
+    }
+
+    private static class TileMatrixSet {
+        SortedSet<TileMatrix> tileMatrix = new TreeSet<>(new Comparator<TileMatrix>() {
+            @Override
+            public int compare(TileMatrix o1, TileMatrix o2) {
+                // reverse the order, so it will be from greatest (lowest zoom level) to lowest value (highest zoom level)
+                return -1 * Double.compare(o1.scaleDenominator, o2.scaleDenominator);
+            }
+        }); // sorted by zoom level
+        private String crs;
+        private String identifier;
+    }
+
+    private static class Layer {
+        private String format;
+        private String name;
+        private TileMatrixSet tileMatrixSet;
+        private String baseUrl;
+        private String style;
+    }
+
+    private enum TransferMode {
+        KVP("KVP"),
+        REST("RESTful");
+
+        private final String typeString;
+
+        TransferMode(String urlString) {
+            this.typeString = urlString;
+        }
+
+        private String getTypeString() {
+            return typeString;
+        }
+
+        private static TransferMode fromString(String s) {
+            for (TransferMode type : TransferMode.values()) {
+                if (type.getTypeString().equals(s)) {
+                    return type;
+                }
+            }
+            return null;
+        }
+    }
+
+    private static final class SelectLayerDialog extends ExtendedDialog {
+        private final Layer[] layers;
+        private final JTable list;
+
+        public SelectLayerDialog(Collection<Layer> layers) {
+            super(Main.parent, tr("Select WMTS layer"), new String[]{tr("Add layers"), tr("Cancel")});
+            this.layers = layers.toArray(new Layer[]{});
+            //getLayersTable(layers, Main.getProjection())
+            this.list = new JTable(
+                    new AbstractTableModel() {
+                        @Override
+                        public Object getValueAt(int rowIndex, int columnIndex) {
+                            switch (columnIndex) {
+                            case 0:
+                                return SelectLayerDialog.this.layers[rowIndex].name;
+                            case 1:
+                                return SelectLayerDialog.this.layers[rowIndex].tileMatrixSet.crs;
+                            case 2:
+                                return SelectLayerDialog.this.layers[rowIndex].tileMatrixSet.identifier;
+                            default:
+                                throw new IllegalArgumentException();
+                            }
+                        }
+
+                        @Override
+                        public int getRowCount() {
+                            return SelectLayerDialog.this.layers.length;
+                        }
+
+                        @Override
+                        public int getColumnCount() {
+                            return 3;
+                        }
+
+                        @Override
+                        public String getColumnName(int column) {
+                            switch (column) {
+                            case 0: return tr("Layer name");
+                            case 1: return tr("Projection");
+                            case 2: return tr("Matrix set identifier");
+                            default:
+                                throw new IllegalArgumentException();
+                            }
+                        }
+
+                        @Override
+                        public boolean isCellEditable(int row, int column) {
+                            return false;
+                        }
+                    });
+            this.list.setPreferredSize(new Dimension(400, 400));
+            this.list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+            this.list.setRowSelectionAllowed(true);
+            this.list.setColumnSelectionAllowed(false);
+            JPanel panel = new JPanel(new GridBagLayout());
+            panel.add(this.list, GBC.eol().fill());
+            setContent(panel);
+        }
+
+        public Layer getSelectedLayer() {
+            int index = list.getSelectedRow();
+            if (index < 0) {
+                return null; //nothing selected
+            }
+            return layers[index];
+        }
+    }
+
+    private final Map<String, String> headers = new ConcurrentHashMap<>();
+    private Collection<Layer> layers;
+    private Layer currentLayer;
+    private TileMatrixSet currentTileMatrixSet;
+    private double crsScale;
+    private TransferMode transferMode;
+
+    /**
+     * Creates a tile source based on imagery info
+     * @param info imagery info
+     * @throws IOException if any I/O error occurs
+     */
+    public WMTSTileSource(ImageryInfo info) throws IOException {
+        super(info);
+        this.baseUrl = normalizeCapabilitiesUrl(handleTemplate(info.getUrl()));
+        this.layers = getCapabilities();
+        if (this.layers.isEmpty())
+            throw new IllegalArgumentException(tr("No layers defined by getCapabilities document: {0}", info.getUrl()));
+
+        // Not needed ? initProjection();
+    }
+
+    private Layer userSelectLayer(Collection<Layer> layers) {
+        if (layers.size() == 1)
+            return layers.iterator().next();
+        Layer ret = null;
+
+        final SelectLayerDialog layerSelection = new SelectLayerDialog(layers);
+        if (layerSelection.showDialog().getValue() == 1) {
+            ret = layerSelection.getSelectedLayer();
+            // TODO: save layer information into ImageryInfo / ImageryPreferences?
+        }
+        if (ret == null) {
+            // user canceled operation or did not choose any layer
+            throw new IllegalArgumentException(tr("No layer selected"));
+        }
+        return ret;
+    }
+
+    private String handleTemplate(String url) {
+        Pattern pattern = Pattern.compile(PATTERN_HEADER);
+        StringBuffer output = new StringBuffer();
+        Matcher matcher = pattern.matcher(url);
+        while (matcher.find()) {
+            this.headers.put(matcher.group(1), matcher.group(2));
+            matcher.appendReplacement(output, "");
+        }
+        matcher.appendTail(output);
+        return output.toString();
+    }
+
+    private Collection<Layer> getCapabilities() throws IOException {
+        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
+        builderFactory.setValidating(false);
+        builderFactory.setNamespaceAware(false);
+        try {
+            builderFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
+        } catch (ParserConfigurationException e) {
+            //this should not happen
+            throw new IllegalArgumentException(e);
+        }
+        DocumentBuilder builder = null;
+        InputStream in = new CachedFile(baseUrl).
+                setHttpHeaders(headers).
+                setMaxAge(7 * CachedFile.DAYS).
+                setCachingStrategy(CachedFile.CachingStrategy.IfModifiedSince).
+                getInputStream();
+        try {
+            builder = builderFactory.newDocumentBuilder();
+            byte[] data = Utils.readBytesFromStream(in);
+            if (data == null || data.length == 0) {
+                throw new IllegalArgumentException("Could not read data from: " + baseUrl);
+            }
+            Document document = builder.parse(new ByteArrayInputStream(data));
+            Node getTileOperation = getByXpath(document,
+                    "/Capabilities/OperationsMetadata/Operation[@name=\"GetTile\"]/DCP/HTTP/Get").item(0);
+            this.baseUrl = getStringByXpath(getTileOperation, "@href");
+            this.transferMode = TransferMode.fromString(getStringByXpath(getTileOperation,
+                    "Constraint[@name=\"GetEncoding\"]/AllowedValues/Value"));
+            NodeList layersNodeList = getByXpath(document, "/Capabilities/Contents/Layer");
+            Map<String, TileMatrixSet> matrixSetById = parseMatrices(getByXpath(document, "/Capabilities/Contents/TileMatrixSet"));
+            return parseLayer(layersNodeList, matrixSetById);
+        } catch (Exception e) {
+            throw new IllegalArgumentException(e);
+        }
+    }
+
+    private static String normalizeCapabilitiesUrl(String url) throws MalformedURLException {
+        URL inUrl = new URL(url);
+        URL ret = new URL(inUrl.getProtocol(), inUrl.getHost(), inUrl.getPort(), inUrl.getFile());
+        return ret.toExternalForm();
+    }
+
+    private Collection<Layer> parseLayer(NodeList nodeList, Map<String, TileMatrixSet> matrixSetById) throws XPathExpressionException {
+        Collection<Layer> ret = new ArrayList<>();
+        for (int layerId = 0; layerId < nodeList.getLength(); layerId++) {
+            Node layerNode = nodeList.item(layerId);
+            NodeList tileMatrixSetLinks = getByXpath(layerNode, "TileMatrixSetLink");
+
+            // we add an layer for all matrix sets to allow user to choose, with which tileset he wants to work
+            for (int tileMatrixId = 0; tileMatrixId < tileMatrixSetLinks.getLength(); tileMatrixId++) {
+                Layer layer = new Layer();
+                layer.format = getStringByXpath(layerNode, "Format");
+                layer.name = getStringByXpath(layerNode, "Identifier");
+                layer.baseUrl = getStringByXpath(layerNode, "ResourceURL[@resourceType='tile']/@template");
+                layer.style = getStringByXpath(layerNode, "Style[@isDefault='true']/Identifier");
+                if (layer.style == null) {
+                    layer.style = "";
+                }
+                Node tileMatrixLink = tileMatrixSetLinks.item(tileMatrixId);
+                TileMatrixSet tms = matrixSetById.get(getStringByXpath(tileMatrixLink, "TileMatrixSet"));
+                layer.tileMatrixSet = tms;
+                ret.add(layer);
+            }
+        }
+        return ret;
+
+    }
+
+    private Map<String, TileMatrixSet> parseMatrices(NodeList nodeList) throws XPathExpressionException {
+        Map<String, TileMatrixSet> ret = new ConcurrentHashMap<>();
+        for (int matrixSetId = 0; matrixSetId < nodeList.getLength(); matrixSetId++) {
+            Node matrixSetNode = nodeList.item(matrixSetId);
+            TileMatrixSet matrixSet = new TileMatrixSet();
+            matrixSet.identifier = getStringByXpath(matrixSetNode, "Identifier");
+            matrixSet.crs = crsToCode(getStringByXpath(matrixSetNode, "SupportedCRS"));
+            NodeList tileMatrixList = getByXpath(matrixSetNode, "TileMatrix");
+            Projection matrixProj = Projections.getProjectionByCode(matrixSet.crs);
+            if (matrixProj == null) {
+                // use current projection if none found. Maybe user is using custom string
+                matrixProj = Main.getProjection();
+            }
+            for (int matrixId = 0; matrixId < tileMatrixList.getLength(); matrixId++) {
+                Node tileMatrixNode = tileMatrixList.item(matrixId);
+                TileMatrix tileMatrix = new TileMatrix();
+                tileMatrix.identifier = getStringByXpath(tileMatrixNode, "Identifier");
+                tileMatrix.scaleDenominator = Double.parseDouble(getStringByXpath(tileMatrixNode, "ScaleDenominator"));
+                String[] topLeftCorner = getStringByXpath(tileMatrixNode, "TopLeftCorner").split(" ");
+
+                if (matrixProj.switchXY()) {
+                    tileMatrix.topLeftCorner = new EastNorth(Double.parseDouble(topLeftCorner[1]), Double.parseDouble(topLeftCorner[0]));
+                } else {
+                    tileMatrix.topLeftCorner = new EastNorth(Double.parseDouble(topLeftCorner[0]), Double.parseDouble(topLeftCorner[1]));
+                }
+                tileMatrix.tileHeight = Integer.parseInt(getStringByXpath(tileMatrixNode, "TileHeight"));
+                tileMatrix.tileWidth = Integer.parseInt(getStringByXpath(tileMatrixNode, "TileHeight"));
+                tileMatrix.matrixWidth = getOptionalIntegerByXpath(tileMatrixNode, "MatrixWidth");
+                tileMatrix.matrixHeight = getOptionalIntegerByXpath(tileMatrixNode, "MatrixHeight");
+                if (tileMatrix.tileHeight != tileMatrix.tileWidth) {
+                    throw new AssertionError(tr("Only square tiles are supported. {0}x{1} returned by server for TileMatrix identifier {2}",
+                            tileMatrix.tileHeight, tileMatrix.tileWidth, tileMatrix.identifier));
+                }
+
+                matrixSet.tileMatrix.add(tileMatrix);
+            }
+            ret.put(matrixSet.identifier, matrixSet);
+        }
+        return ret;
+    }
+
+    private static String crsToCode(String crsIdentifier) {
+        if (crsIdentifier.startsWith("urn:ogc:def:crs:")) {
+            return crsIdentifier.replaceFirst("urn:ogc:def:crs:([^:]*):.*:(.*)$", "$1:$2");
+        }
+        return crsIdentifier;
+    }
+
+    private static int getOptionalIntegerByXpath(Node document, String xpathQuery) throws XPathExpressionException {
+        String ret = getStringByXpath(document, xpathQuery);
+        if (ret == null || "".equals(ret)) {
+            return -1;
+        }
+        return Integer.parseInt(ret);
+    }
+
+    private static String getStringByXpath(Node document, String xpathQuery) throws XPathExpressionException {
+        return (String) getByXpath(document, xpathQuery, XPathConstants.STRING);
+    }
+
+    private static NodeList getByXpath(Node document, String xpathQuery) throws XPathExpressionException {
+        return (NodeList) getByXpath(document, xpathQuery, XPathConstants.NODESET);
+    }
+
+    private static Object getByXpath(Node document, String xpathQuery, QName returnType) throws XPathExpressionException {
+        XPath xpath = XPathFactory.newInstance().newXPath();
+        XPathExpression expr = xpath.compile(xpathQuery);
+        return expr.evaluate(document, returnType);
+    }
+
+    /**
+     * Initializes projection for this TileSource with current projection
+     */
+    protected void initProjection() {
+        initProjection(Main.getProjection());
+    }
+
+    /**
+     * Initializes projection for this TileSource with projection
+     * @param proj projection to be used by this TileSource
+     */
+    public void initProjection(Projection proj) {
+        String layerName = null;
+        if (currentLayer != null) {
+            layerName = currentLayer.name;
+        }
+        Collection<Layer> candidates = getLayers(layerName, proj.toCode());
+        if (!candidates.isEmpty()) {
+            Layer newLayer = userSelectLayer(candidates);
+            if (newLayer != null) {
+                this.currentTileMatrixSet = newLayer.tileMatrixSet;
+                this.currentLayer = newLayer;
+            }
+        }
+
+        this.crsScale = getTileSize() * 0.28e-03 / proj.getMetersPerUnit();
+    }
+
+    private Collection<Layer> getLayers(String name, String projectionCode) {
+        Collection<Layer> ret = new ArrayList<>();
+        for (Layer layer: this.layers) {
+            if ((name == null || name.equals(layer.name)) && (projectionCode == null || projectionCode.equals(layer.tileMatrixSet.crs))) {
+                ret.add(layer);
+            }
+        }
+        return ret;
+    }
+
+    @Override
+    public int getDefaultTileSize() {
+        return getTileSize();
+    }
+
+    // FIXME: remove in September 2015, when ImageryPreferenceEntry.tileSize will be initialized to -1 instead to 256
+    // need to leave it as it is to keep compatiblity between tested and latest JOSM versions
+    @Override
+    public int getTileSize() {
+        TileMatrix matrix = getTileMatrix(1);
+        if (matrix == null) {
+            return 1;
+        }
+        return matrix.tileHeight;
+    }
+
+    @Override
+    public String getTileUrl(int zoom, int tilex, int tiley) {
+        String url;
+        if (currentLayer == null) {
+            return "";
+        }
+
+        switch (transferMode) {
+        case KVP:
+            url = baseUrl + URL_GET_ENCODING_PARAMS;
+            break;
+        case REST:
+            url = currentLayer.baseUrl;
+            break;
+        default:
+            url = "";
+            break;
+        }
+
+        TileMatrix tileMatrix = getTileMatrix(zoom);
+
+        if (tileMatrix == null) {
+            return ""; // no matrix, probably unsupported CRS selected.
+        }
+
+        return url.replaceAll("\\{layer\\}", this.currentLayer.name)
+                .replaceAll("\\{format\\}", this.currentLayer.format)
+                .replaceAll("\\{TileMatrixSet\\}", this.currentTileMatrixSet.identifier)
+                .replaceAll("\\{TileMatrix\\}", tileMatrix.identifier)
+                .replaceAll("\\{TileRow\\}", Integer.toString(tiley))
+                .replaceAll("\\{TileCol\\}", Integer.toString(tilex))
+                .replaceAll("\\{Style\\}", this.currentLayer.style);
+    }
+
+    /**
+     *
+     * @param zoom zoom level
+     * @return TileMatrix that's working on this zoom level
+     */
+    private TileMatrix getTileMatrix(int zoom) {
+        if (zoom > getMaxZoom()) {
+            return null;
+        }
+        if (zoom < 1) {
+            return null;
+        }
+        return this.currentTileMatrixSet.tileMatrix.toArray(new TileMatrix[]{})[zoom - 1];
+    }
+
+    @Override
+    public double getDistance(double lat1, double lon1, double lat2, double lon2) {
+        throw new UnsupportedOperationException("Not implemented");
+    }
+
+    @Override
+    public ICoordinate tileXYToLatLon(Tile tile) {
+        return tileXYToLatLon(tile.getXtile(), tile.getYtile(), tile.getZoom());
+    }
+
+    @Override
+    public ICoordinate tileXYToLatLon(TileXY xy, int zoom) {
+        return tileXYToLatLon(xy.getXIndex(), xy.getYIndex(), zoom);
+    }
+
+    @Override
+    public ICoordinate tileXYToLatLon(int x, int y, int zoom) {
+        TileMatrix matrix = getTileMatrix(zoom);
+        if (matrix == null) {
+            return Main.getProjection().getWorldBoundsLatLon().getCenter().toCoordinate();
+        }
+        double scale = matrix.scaleDenominator * this.crsScale;
+        EastNorth ret = new EastNorth(matrix.topLeftCorner.east() + x * scale, matrix.topLeftCorner.north() - y * scale);
+        return Main.getProjection().eastNorth2latlon(ret).toCoordinate();
+    }
+
+    @Override
+    public TileXY latLonToTileXY(double lat, double lon, int zoom) {
+        TileMatrix matrix = getTileMatrix(zoom);
+        if (matrix == null) {
+            return new TileXY(0, 0);
+        }
+
+        Projection proj = Main.getProjection();
+        EastNorth enPoint = proj.latlon2eastNorth(new LatLon(lat, lon));
+        double scale = matrix.scaleDenominator * this.crsScale;
+        return new TileXY(
+                (enPoint.east() - matrix.topLeftCorner.east()) / scale,
+                (matrix.topLeftCorner.north() - enPoint.north()) / scale
+                );
+    }
+
+    @Override
+    public TileXY latLonToTileXY(ICoordinate point, int zoom) {
+        return latLonToTileXY(point.getLat(),  point.getLon(), zoom);
+    }
+
+    @Override
+    public int getTileXMax(int zoom) {
+        return getTileXMax(zoom, Main.getProjection());
+    }
+
+    @Override
+    public int getTileXMin(int zoom) {
+        return 0;
+    }
+
+    @Override
+    public int getTileYMax(int zoom) {
+        return getTileYMax(zoom, Main.getProjection());
+    }
+
+    @Override
+    public int getTileYMin(int zoom) {
+        return 0;
+    }
+
+    @Override
+    public Point latLonToXY(double lat, double lon, int zoom) {
+        TileMatrix matrix = getTileMatrix(zoom);
+        if (matrix == null) {
+            return new Point(0, 0);
+        }
+        double scale = matrix.scaleDenominator * this.crsScale;
+        EastNorth point = Main.getProjection().latlon2eastNorth(new LatLon(lat, lon));
+        return new Point(
+                    (int) Math.round((point.east() - matrix.topLeftCorner.east())   / scale),
+                    (int) Math.round((matrix.topLeftCorner.north() - point.north()) / scale)
+                );
+    }
+
+    @Override
+    public Point latLonToXY(ICoordinate point, int zoom) {
+        return latLonToXY(point.getLat(), point.getLon(), zoom);
+    }
+
+    @Override
+    public Coordinate xyToLatLon(Point point, int zoom) {
+        return xyToLatLon(point.x, point.y, zoom);
+    }
+
+    @Override
+    public Coordinate xyToLatLon(int x, int y, int zoom) {
+        TileMatrix matrix = getTileMatrix(zoom);
+        if (matrix == null) {
+            return new Coordinate(0, 0);
+        }
+        double scale = matrix.scaleDenominator * this.crsScale;
+        Projection proj = Main.getProjection();
+        EastNorth ret = new EastNorth(
+                matrix.topLeftCorner.east() + x * scale,
+                matrix.topLeftCorner.north() - y * scale
+                );
+        LatLon ll = proj.eastNorth2latlon(ret);
+        return new Coordinate(ll.lat(), ll.lon());
+    }
+
+    @Override
+    public Map<String, String> getHeaders() {
+        return headers;
+    }
+
+    @Override
+    public int getMaxZoom() {
+        if (this.currentTileMatrixSet != null) {
+            return this.currentTileMatrixSet.tileMatrix.size();
+        }
+        return 0;
+    }
+
+    @Override
+    public String getTileId(int zoom, int tilex, int tiley) {
+        return getTileUrl(zoom, tilex, tiley);
+    }
+
+    /**
+     * Checks if url is acceptable by this Tile Source
+     * @param url URL to check
+     */
+    public static void checkUrl(String url) {
+        CheckParameterUtil.ensureParameterNotNull(url, "url");
+        Matcher m = Pattern.compile("\\{[^}]*\\}").matcher(url);
+        while (m.find()) {
+            boolean isSupportedPattern = false;
+            for (String pattern : ALL_PATTERNS) {
+                if (m.group().matches(pattern)) {
+                    isSupportedPattern = true;
+                    break;
+                }
+            }
+            if (!isSupportedPattern) {
+                throw new IllegalArgumentException(
+                        tr("{0} is not a valid WMS argument. Please check this server URL:\n{1}", m.group(), url));
+            }
+        }
+    }
+
+    /**
+     * @return set of projection codes that this TileSource supports
+     */
+    public Set<String> getSupportedProjections() {
+        Set<String> ret = new HashSet<>();
+        if (currentLayer == null) {
+            for (Layer layer: this.layers) {
+                ret.add(layer.tileMatrixSet.crs);
+            }
+        } else {
+            for (Layer layer: this.layers) {
+                if (currentLayer.name.equals(layer.name)) {
+                    ret.add(layer.tileMatrixSet.crs);
+                }
+            }
+        }
+        return ret;
+    }
+
+    private int getTileYMax(int zoom, Projection proj) {
+        TileMatrix matrix = getTileMatrix(zoom);
+        if (matrix == null) {
+            return 0;
+        }
+
+        if (matrix.matrixHeight != -1) {
+            return matrix.matrixHeight;
+        }
+
+        double scale = matrix.scaleDenominator * this.crsScale;
+        EastNorth min = matrix.topLeftCorner;
+        EastNorth max = proj.latlon2eastNorth(proj.getWorldBoundsLatLon().getMax());
+        return (int) Math.ceil(Math.abs(max.north() - min.north()) / scale);
+    }
+
+    private int getTileXMax(int zoom, Projection proj) {
+        TileMatrix matrix = getTileMatrix(zoom);
+        if (matrix == null) {
+            return 0;
+        }
+        if (matrix.matrixWidth != -1) {
+            return matrix.matrixWidth;
+        }
+
+        double scale = matrix.scaleDenominator * this.crsScale;
+        EastNorth min = matrix.topLeftCorner;
+        EastNorth max = proj.latlon2eastNorth(proj.getWorldBoundsLatLon().getMax());
+        return (int) Math.ceil(Math.abs(max.east() - min.east()) / scale);
+    }
+}
diff --git a/src/org/openstreetmap/josm/data/imagery/WmsCache.java b/src/org/openstreetmap/josm/data/imagery/WmsCache.java
deleted file mode 100644
index e7fa2d7..0000000
--- a/src/org/openstreetmap/josm/data/imagery/WmsCache.java
+++ /dev/null
@@ -1,586 +0,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.data.imagery;
-
-import java.awt.Graphics2D;
-import java.awt.image.BufferedImage;
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.lang.ref.SoftReference;
-import java.net.URLConnection;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-
-import javax.imageio.ImageIO;
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.Marshaller;
-import javax.xml.bind.Unmarshaller;
-
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.ProjectionBounds;
-import org.openstreetmap.josm.data.SystemOfMeasurement;
-import org.openstreetmap.josm.data.coor.EastNorth;
-import org.openstreetmap.josm.data.coor.LatLon;
-import org.openstreetmap.josm.data.imagery.types.EntryType;
-import org.openstreetmap.josm.data.imagery.types.ProjectionType;
-import org.openstreetmap.josm.data.imagery.types.WmsCacheType;
-import org.openstreetmap.josm.data.preferences.StringProperty;
-import org.openstreetmap.josm.data.projection.Projection;
-import org.openstreetmap.josm.gui.layer.WMSLayer;
-import org.openstreetmap.josm.tools.ImageProvider;
-import org.openstreetmap.josm.tools.Utils;
-import org.openstreetmap.josm.tools.date.DateUtils;
-
-public class WmsCache {
-    //TODO Property for maximum cache size
-    //TODO Property for maximum age of tile, automatically remove old tiles
-    //TODO Measure time for partially loading from cache, compare with time to download tile. If slower, disable partial cache
-    //TODO Do loading from partial cache and downloading at the same time, don't wait for partial cache to load
-
-    private static final StringProperty PROP_CACHE_PATH = new StringProperty("imagery.wms-cache.path", "wms");
-    private static final String INDEX_FILENAME = "index.xml";
-    private static final String LAYERS_INDEX_FILENAME = "layers.properties";
-
-    private static class CacheEntry {
-        private final double pixelPerDegree;
-        private final double east;
-        private final double north;
-        private final ProjectionBounds bounds;
-        private final String filename;
-
-        private long lastUsed;
-        private long lastModified;
-
-        CacheEntry(double pixelPerDegree, double east, double north, int tileSize, String filename) {
-            this.pixelPerDegree = pixelPerDegree;
-            this.east = east;
-            this.north = north;
-            this.bounds = new ProjectionBounds(east, north, east + tileSize / pixelPerDegree, north + tileSize / pixelPerDegree);
-            this.filename = filename;
-        }
-
-        @Override
-        public String toString() {
-            return "CacheEntry [pixelPerDegree=" + pixelPerDegree + ", east=" + east + ", north=" + north + ", bounds="
-                    + bounds + ", filename=" + filename + ", lastUsed=" + lastUsed + ", lastModified=" + lastModified
-                    + "]";
-        }
-    }
-
-    private static class ProjectionEntries {
-        private final String projection;
-        private final String cacheDirectory;
-        private final List<CacheEntry> entries = new ArrayList<>();
-
-        ProjectionEntries(String projection, String cacheDirectory) {
-            this.projection = projection;
-            this.cacheDirectory = cacheDirectory;
-        }
-    }
-
-    private final Map<String, ProjectionEntries> entries = new HashMap<>();
-    private final File cacheDir;
-    private final int tileSize; // Should be always 500
-    private int totalFileSize;
-    private boolean totalFileSizeDirty; // Some file was missing - size needs to be recalculated
-    // No need for hashCode/equals on CacheEntry, object identity is enough. Comparing by values can lead to error - CacheEntry for wrong projection could be found
-    private Map<CacheEntry, SoftReference<BufferedImage>> memoryCache = new HashMap<>();
-    private Set<ProjectionBounds> areaToCache;
-
-    protected String cacheDirPath() {
-        String cPath = PROP_CACHE_PATH.get();
-        if (!(new File(cPath).isAbsolute())) {
-            cPath = Main.pref.getCacheDirectory() + File.separator + cPath;
-        }
-        return cPath;
-    }
-
-    public WmsCache(String url, int tileSize) {
-        File globalCacheDir = new File(cacheDirPath());
-        globalCacheDir.mkdirs();
-        cacheDir = new File(globalCacheDir, getCacheDirectory(url));
-        cacheDir.mkdirs();
-        this.tileSize = tileSize;
-    }
-
-    private String getCacheDirectory(String url) {
-        String cacheDirName = null;
-        Properties layersIndex = new Properties();
-        File layerIndexFile = new File(cacheDirPath(), LAYERS_INDEX_FILENAME);
-        try (InputStream fis = new FileInputStream(layerIndexFile)) {
-            layersIndex.load(fis);
-        } catch (FileNotFoundException e) {
-            Main.error("Unable to load layers index for wms cache (file " + layerIndexFile + " not found)");
-        } catch (IOException e) {
-            Main.error("Unable to load layers index for wms cache");
-            Main.error(e);
-        }
-
-        for (Object propKey: layersIndex.keySet()) {
-            String s = (String)propKey;
-            if (url.equals(layersIndex.getProperty(s))) {
-                cacheDirName = s;
-                break;
-            }
-        }
-
-        if (cacheDirName == null) {
-            int counter = 0;
-            while (true) {
-                counter++;
-                if (!layersIndex.keySet().contains(String.valueOf(counter))) {
-                    break;
-                }
-            }
-            cacheDirName = String.valueOf(counter);
-            layersIndex.setProperty(cacheDirName, url);
-            try (OutputStream fos = new FileOutputStream(layerIndexFile)) {
-                layersIndex.store(fos, "");
-            } catch (IOException e) {
-                Main.error("Unable to save layer index for wms cache");
-                Main.error(e);
-            }
-        }
-
-        return cacheDirName;
-    }
-
-    private ProjectionEntries getProjectionEntries(Projection projection) {
-        return getProjectionEntries(projection.toCode(), projection.getCacheDirectoryName());
-    }
-
-    private ProjectionEntries getProjectionEntries(String projection, String cacheDirectory) {
-        ProjectionEntries result = entries.get(projection);
-        if (result == null) {
-            result = new ProjectionEntries(projection, cacheDirectory);
-            entries.put(projection, result);
-        }
-
-        return result;
-    }
-
-    public synchronized void loadIndex() {
-        File indexFile = new File(cacheDir, INDEX_FILENAME);
-        try {
-            JAXBContext context = JAXBContext.newInstance(
-                    WmsCacheType.class.getPackage().getName(),
-                    WmsCacheType.class.getClassLoader());
-            Unmarshaller unmarshaller = context.createUnmarshaller();
-            WmsCacheType cacheEntries;
-            try (InputStream is = new FileInputStream(indexFile)) {
-                cacheEntries = (WmsCacheType)unmarshaller.unmarshal(is);
-            }
-            totalFileSize = cacheEntries.getTotalFileSize();
-            if (cacheEntries.getTileSize() != tileSize) {
-                Main.info("Cache created with different tileSize, cache will be discarded");
-                return;
-            }
-            for (ProjectionType projectionType: cacheEntries.getProjection()) {
-                ProjectionEntries projection = getProjectionEntries(projectionType.getName(), projectionType.getCacheDirectory());
-                for (EntryType entry: projectionType.getEntry()) {
-                    CacheEntry ce = new CacheEntry(entry.getPixelPerDegree(), entry.getEast(), entry.getNorth(), tileSize, entry.getFilename());
-                    ce.lastUsed = entry.getLastUsed().getTimeInMillis();
-                    ce.lastModified = entry.getLastModified().getTimeInMillis();
-                    projection.entries.add(ce);
-                }
-            }
-        } catch (Exception e) {
-            if (indexFile.exists()) {
-                Main.error(e);
-                Main.info("Unable to load index for wms-cache, new file will be created");
-            } else {
-                Main.info("Index for wms-cache doesn't exist, new file will be created");
-            }
-        }
-
-        removeNonReferencedFiles();
-    }
-
-    private void removeNonReferencedFiles() {
-
-        Set<String> usedProjections = new HashSet<>();
-
-        for (ProjectionEntries projectionEntries: entries.values()) {
-
-            usedProjections.add(projectionEntries.cacheDirectory);
-
-            File projectionDir = new File(cacheDir, projectionEntries.cacheDirectory);
-            if (projectionDir.exists()) {
-                Set<String> referencedFiles = new HashSet<>();
-
-                for (CacheEntry ce: projectionEntries.entries) {
-                    referencedFiles.add(ce.filename);
-                }
-
-                File[] files = projectionDir.listFiles();
-                if (files != null) {
-                    for (File file: files) {
-                        if (!referencedFiles.contains(file.getName())) {
-                            file.delete();
-                        }
-                    }
-                }
-            }
-        }
-
-        File[] files = cacheDir.listFiles();
-        if (files != null) {
-            for (File projectionDir: files) {
-                if (projectionDir.isDirectory() && !usedProjections.contains(projectionDir.getName())) {
-                    Utils.deleteDirectory(projectionDir);
-                }
-            }
-        }
-    }
-
-    private int calculateTotalFileSize() {
-        int result = 0;
-        for (ProjectionEntries projectionEntries: entries.values()) {
-            Iterator<CacheEntry> it = projectionEntries.entries.iterator();
-            while (it.hasNext()) {
-                CacheEntry entry = it.next();
-                File imageFile = getImageFile(projectionEntries, entry);
-                if (!imageFile.exists()) {
-                    it.remove();
-                } else {
-                    result += imageFile.length();
-                }
-            }
-        }
-        return result;
-    }
-
-    public synchronized void saveIndex() {
-        WmsCacheType index = new WmsCacheType();
-
-        if (totalFileSizeDirty) {
-            totalFileSize = calculateTotalFileSize();
-        }
-
-        index.setTileSize(tileSize);
-        index.setTotalFileSize(totalFileSize);
-        for (ProjectionEntries projectionEntries: entries.values()) {
-            if (!projectionEntries.entries.isEmpty()) {
-                ProjectionType projectionType = new ProjectionType();
-                projectionType.setName(projectionEntries.projection);
-                projectionType.setCacheDirectory(projectionEntries.cacheDirectory);
-                index.getProjection().add(projectionType);
-                for (CacheEntry ce: projectionEntries.entries) {
-                    EntryType entry = new EntryType();
-                    entry.setPixelPerDegree(ce.pixelPerDegree);
-                    entry.setEast(ce.east);
-                    entry.setNorth(ce.north);
-                    Calendar c = Calendar.getInstance();
-                    c.setTimeInMillis(ce.lastUsed);
-                    entry.setLastUsed(c);
-                    c = Calendar.getInstance();
-                    c.setTimeInMillis(ce.lastModified);
-                    entry.setLastModified(c);
-                    entry.setFilename(ce.filename);
-                    projectionType.getEntry().add(entry);
-                }
-            }
-        }
-        try {
-            JAXBContext context = JAXBContext.newInstance(
-                    WmsCacheType.class.getPackage().getName(),
-                    WmsCacheType.class.getClassLoader());
-            Marshaller marshaller = context.createMarshaller();
-            try (OutputStream fos = new FileOutputStream(new File(cacheDir, INDEX_FILENAME))) {
-                marshaller.marshal(index, fos);
-            }
-        } catch (Exception e) {
-            Main.error("Failed to save wms-cache file");
-            Main.error(e);
-        }
-    }
-
-    private File getImageFile(ProjectionEntries projection, CacheEntry entry) {
-        return new File(cacheDir, projection.cacheDirectory + "/" + entry.filename);
-    }
-
-    private BufferedImage loadImage(ProjectionEntries projectionEntries, CacheEntry entry, boolean enforceTransparency) throws IOException {
-        synchronized (this) {
-            entry.lastUsed = System.currentTimeMillis();
-
-            SoftReference<BufferedImage> memCache = memoryCache.get(entry);
-            if (memCache != null) {
-                BufferedImage result = memCache.get();
-                if (result != null) {
-                    if (enforceTransparency == ImageProvider.isTransparencyForced(result)) {
-                        return result;
-                    } else if (Main.isDebugEnabled()) {
-                        Main.debug("Skipping "+entry+" from memory cache (transparency enforcement)");
-                    }
-                }
-            }
-        }
-
-        try {
-            // Reading can't be in synchronized section, it's too slow
-            BufferedImage result = ImageProvider.read(getImageFile(projectionEntries, entry), true, enforceTransparency);
-            synchronized (this) {
-                if (result == null) {
-                    projectionEntries.entries.remove(entry);
-                    totalFileSizeDirty = true;
-                }
-                return result;
-            }
-        } catch (IOException e) {
-            synchronized (this) {
-                projectionEntries.entries.remove(entry);
-                totalFileSizeDirty = true;
-                throw e;
-            }
-        }
-    }
-
-    private CacheEntry findEntry(ProjectionEntries projectionEntries, double pixelPerDegree, double east, double north) {
-        for (CacheEntry entry: projectionEntries.entries) {
-            if (entry.pixelPerDegree == pixelPerDegree && entry.east == east && entry.north == north)
-                return entry;
-        }
-        return null;
-    }
-
-    public synchronized boolean hasExactMatch(Projection projection, double pixelPerDegree, double east, double north) {
-        ProjectionEntries projectionEntries = getProjectionEntries(projection);
-        CacheEntry entry = findEntry(projectionEntries, pixelPerDegree, east, north);
-        return (entry != null);
-    }
-
-    public BufferedImage getExactMatch(Projection projection, double pixelPerDegree, double east, double north) {
-        CacheEntry entry = null;
-        ProjectionEntries projectionEntries = null;
-        synchronized (this) {
-            projectionEntries = getProjectionEntries(projection);
-            entry = findEntry(projectionEntries, pixelPerDegree, east, north);
-        }
-        if (entry != null) {
-            try {
-                return loadImage(projectionEntries, entry, WMSLayer.PROP_ALPHA_CHANNEL.get());
-            } catch (IOException e) {
-                Main.error("Unable to load file from wms cache");
-                Main.error(e);
-                return null;
-            }
-        }
-        return null;
-    }
-
-    public BufferedImage getPartialMatch(Projection projection, double pixelPerDegree, double east, double north) {
-        ProjectionEntries projectionEntries;
-        List<CacheEntry> matches;
-        synchronized (this) {
-            matches = new ArrayList<>();
-
-            double minPPD = pixelPerDegree / 5;
-            double maxPPD = pixelPerDegree * 5;
-            projectionEntries = getProjectionEntries(projection);
-
-            double size2 = tileSize / pixelPerDegree;
-            double border = tileSize * 0.01; // Make sure not to load neighboring tiles that intersects this tile only slightly
-            ProjectionBounds bounds = new ProjectionBounds(east + border, north + border,
-                    east + size2 - border, north + size2 - border);
-
-            //TODO Do not load tile if it is completely overlapped by other tile with better ppd
-            for (CacheEntry entry: projectionEntries.entries) {
-                if (entry.pixelPerDegree >= minPPD && entry.pixelPerDegree <= maxPPD && entry.bounds.intersects(bounds)) {
-                    entry.lastUsed = System.currentTimeMillis();
-                    matches.add(entry);
-                }
-            }
-
-            if (matches.isEmpty())
-                return null;
-
-            Collections.sort(matches, new Comparator<CacheEntry>() {
-                @Override
-                public int compare(CacheEntry o1, CacheEntry o2) {
-                    return Double.compare(o2.pixelPerDegree, o1.pixelPerDegree);
-                }
-            });
-        }
-
-        // Use alpha layer only when enabled on wms layer
-        boolean alpha = WMSLayer.PROP_ALPHA_CHANNEL.get();
-        BufferedImage result = new BufferedImage(tileSize, tileSize,
-                alpha ? BufferedImage.TYPE_4BYTE_ABGR : BufferedImage.TYPE_3BYTE_BGR);
-        Graphics2D g = result.createGraphics();
-
-        boolean drawAtLeastOnce = false;
-        Map<CacheEntry, SoftReference<BufferedImage>> localCache = new HashMap<>();
-        for (CacheEntry ce: matches) {
-            BufferedImage img;
-            try {
-                // Enforce transparency only when alpha enabled on wms layer too
-                img = loadImage(projectionEntries, ce, alpha);
-                localCache.put(ce, new SoftReference<>(img));
-            } catch (IOException e) {
-                continue;
-            }
-
-            drawAtLeastOnce = true;
-
-            int xDiff = (int)((ce.east - east) * pixelPerDegree);
-            int yDiff = (int)((ce.north - north) * pixelPerDegree);
-            int size = (int)(pixelPerDegree / ce.pixelPerDegree  * tileSize);
-
-            int x = xDiff;
-            int y = -size + tileSize - yDiff;
-
-            g.drawImage(img, x, y, size, size, null);
-        }
-
-        if (drawAtLeastOnce) {
-            synchronized (this) {
-                memoryCache.putAll(localCache);
-            }
-            return result;
-        } else
-            return null;
-    }
-
-    private String generateFileName(ProjectionEntries projectionEntries, double pixelPerDegree, Projection projection, double east, double north, String mimeType) {
-        LatLon ll1 = projection.eastNorth2latlon(new EastNorth(east, north));
-        LatLon ll2 = projection.eastNorth2latlon(new EastNorth(east + 100 / pixelPerDegree, north));
-        LatLon ll3 = projection.eastNorth2latlon(new EastNorth(east + tileSize / pixelPerDegree, north + tileSize / pixelPerDegree));
-
-        double deltaLat = Math.abs(ll3.lat() - ll1.lat());
-        double deltaLon = Math.abs(ll3.lon() - ll1.lon());
-        int precisionLat = Math.max(0, -(int)Math.ceil(Math.log10(deltaLat)) + 1);
-        int precisionLon = Math.max(0, -(int)Math.ceil(Math.log10(deltaLon)) + 1);
-
-        String zoom = SystemOfMeasurement.METRIC.getDistText(ll1.greatCircleDistance(ll2));
-        String extension = "dat";
-        if (mimeType != null) {
-            switch(mimeType) {
-            case "image/jpeg":
-            case "image/jpg":
-                extension = "jpg";
-                break;
-            case "image/png":
-                extension = "png";
-                break;
-            case "image/gif":
-                extension = "gif";
-                break;
-            default:
-                Main.warn("Unrecognized MIME type: "+mimeType);
-            }
-        }
-
-        int counter = 0;
-        FILENAME_LOOP:
-            while (true) {
-                String result = String.format("%s_%." + precisionLat + "f_%." + precisionLon +"f%s.%s", zoom, ll1.lat(), ll1.lon(), counter==0?"":"_" + counter, extension);
-                for (CacheEntry entry: projectionEntries.entries) {
-                    if (entry.filename.equals(result)) {
-                        counter++;
-                        continue FILENAME_LOOP;
-                    }
-                }
-                return result;
-            }
-    }
-
-    /**
-     *
-     * @param img Used only when overlapping is used, when not used, used raw from imageData
-     * @param imageData
-     * @param projection
-     * @param pixelPerDegree
-     * @param east
-     * @param north
-     * @throws IOException
-     */
-    public synchronized void saveToCache(BufferedImage img, InputStream imageData, Projection projection, double pixelPerDegree, double east, double north) throws IOException {
-        ProjectionEntries projectionEntries = getProjectionEntries(projection);
-        CacheEntry entry = findEntry(projectionEntries, pixelPerDegree, east, north);
-        File imageFile;
-        if (entry == null) {
-
-            String mimeType;
-            if (img != null) {
-                mimeType = "image/png";
-            } else {
-                mimeType = URLConnection.guessContentTypeFromStream(imageData);
-            }
-            entry = new CacheEntry(pixelPerDegree, east, north, tileSize,generateFileName(projectionEntries, pixelPerDegree, projection, east, north, mimeType));
-            entry.lastUsed = System.currentTimeMillis();
-            entry.lastModified = entry.lastUsed;
-            projectionEntries.entries.add(entry);
-            imageFile = getImageFile(projectionEntries, entry);
-        } else {
-            imageFile = getImageFile(projectionEntries, entry);
-            totalFileSize -= imageFile.length();
-        }
-
-        imageFile.getParentFile().mkdirs();
-
-        if (img != null) {
-            BufferedImage copy = new BufferedImage(tileSize, tileSize, img.getType());
-            copy.createGraphics().drawImage(img, 0, 0, tileSize, tileSize, 0, img.getHeight() - tileSize, tileSize, img.getHeight(), null);
-            ImageIO.write(copy, "png", imageFile);
-            totalFileSize += imageFile.length();
-        } else {
-            try (OutputStream os = new BufferedOutputStream(new FileOutputStream(imageFile))) {
-                totalFileSize += Utils.copyStream(imageData, os);
-            }
-        }
-    }
-
-    public synchronized void cleanSmallFiles(int size) {
-        for (ProjectionEntries projectionEntries: entries.values()) {
-            Iterator<CacheEntry> it = projectionEntries.entries.iterator();
-            while (it.hasNext()) {
-                File file = getImageFile(projectionEntries, it.next());
-                long length = file.length();
-                if (length <= size) {
-                    if (length == 0) {
-                        totalFileSizeDirty = true; // File probably doesn't exist
-                    }
-                    totalFileSize -= size;
-                    file.delete();
-                    it.remove();
-                }
-            }
-        }
-    }
-
-    public static String printDate(Calendar c) {
-        return DateUtils.newIsoDateFormat().format(c.getTime());
-    }
-
-    private boolean isInsideAreaToCache(CacheEntry cacheEntry) {
-        for (ProjectionBounds b: areaToCache) {
-            if (cacheEntry.bounds.intersects(b))
-                return true;
-        }
-        return false;
-    }
-
-    public synchronized void setAreaToCache(Set<ProjectionBounds> areaToCache) {
-        this.areaToCache = areaToCache;
-        Iterator<CacheEntry> it = memoryCache.keySet().iterator();
-        while (it.hasNext()) {
-            if (!isInsideAreaToCache(it.next())) {
-                it.remove();
-            }
-        }
-    }
-}
diff --git a/src/org/openstreetmap/josm/data/notes/NoteComment.java b/src/org/openstreetmap/josm/data/notes/NoteComment.java
index e38b365..9846c91 100644
--- a/src/org/openstreetmap/josm/data/notes/NoteComment.java
+++ b/src/org/openstreetmap/josm/data/notes/NoteComment.java
@@ -17,7 +17,7 @@ public class NoteComment {
     private Action action;
 
     //not currently used. I'm planning on using this to keep track of new actions that need to be uploaded
-    private Boolean isNew;
+    private boolean isNew;
 
     /**
      * Every comment has an associated action. Some comments are just comments
@@ -32,7 +32,7 @@ public class NoteComment {
      * @param action The action associated with this comment
      * @param isNew Whether or not this comment is new and needs to be uploaded
      */
-    public NoteComment(Date createDate, User user, String commentText, Action action, Boolean isNew) {
+    public NoteComment(Date createDate, User user, String commentText, Action action, boolean isNew) {
         this.text = commentText;
         this.user = user;
         this.commentTimestamp = createDate;
@@ -60,12 +60,12 @@ public class NoteComment {
         return action;
     }
 
-    public void setIsNew(Boolean isNew) {
+    public void setNew(boolean isNew) {
         this.isNew = isNew;
     }
 
     /** @return true if this is a new comment/action and needs to be uploaded to the API */
-    public Boolean getIsNew() {
+    public boolean isNew() {
         return isNew;
     }
 }
diff --git a/src/org/openstreetmap/josm/data/oauth/OAuthParameters.java b/src/org/openstreetmap/josm/data/oauth/OAuthParameters.java
index 23777cb..b044adb 100644
--- a/src/org/openstreetmap/josm/data/oauth/OAuthParameters.java
+++ b/src/org/openstreetmap/josm/data/oauth/OAuthParameters.java
@@ -78,6 +78,9 @@ public class OAuthParameters {
                 }
             } catch (MalformedURLException e) {
                 // Ignored
+                if (Main.isTraceEnabled()) {
+                    Main.trace(e.getMessage());
+                }
             }
         }
         return parameters;
@@ -112,6 +115,7 @@ public class OAuthParameters {
      * @see #createFromPreferences
      */
     public OAuthParameters() {
+        // contents can be set later with setters
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/data/oauth/OsmPrivileges.java b/src/org/openstreetmap/josm/data/oauth/OsmPrivileges.java
index 6c782e0..3f4774b 100644
--- a/src/org/openstreetmap/josm/data/oauth/OsmPrivileges.java
+++ b/src/org/openstreetmap/josm/data/oauth/OsmPrivileges.java
@@ -12,30 +12,39 @@ public class OsmPrivileges {
     public boolean isAllowWriteApi() {
         return allowWriteApi;
     }
+
     public void setAllowWriteApi(boolean allowWriteApi) {
         this.allowWriteApi = allowWriteApi;
     }
+
     public boolean isAllowWriteGpx() {
         return allowWriteGpx;
     }
+
     public void setAllowWriteGpx(boolean allowWriteGpx) {
         this.allowWriteGpx = allowWriteGpx;
     }
+
     public boolean isAllowReadGpx() {
         return allowReadGpx;
     }
+
     public void setAllowReadGpx(boolean allowReadGpx) {
         this.allowReadGpx = allowReadGpx;
     }
+
     public boolean isAllowReadPrefs() {
         return allowReadPrefs;
     }
+
     public void setAllowReadPrefs(boolean allowReadPrefs) {
         this.allowReadPrefs = allowReadPrefs;
     }
+
     public boolean isAllowWritePrefs() {
         return allowWritePrefs;
     }
+
     public void setAllowWritePrefs(boolean allowWritePrefs) {
         this.allowWritePrefs = allowWritePrefs;
     }
diff --git a/src/org/openstreetmap/josm/data/osm/AbstractPrimitive.java b/src/org/openstreetmap/josm/data/osm/AbstractPrimitive.java
index 678366f..c20afc1 100644
--- a/src/org/openstreetmap/josm/data/osm/AbstractPrimitive.java
+++ b/src/org/openstreetmap/josm/data/osm/AbstractPrimitive.java
@@ -26,6 +26,24 @@ import org.openstreetmap.josm.tools.Utils;
 */
 public abstract class AbstractPrimitive implements IPrimitive {
 
+    /**
+     * This is a visitor that can be used to loop over the keys/values of this primitive.
+     *
+     * @author Michael Zangl
+     * @since 8742
+     */
+    public interface KeyValueVisitor {
+
+        /**
+         * This method gets called for every tag received.
+         *
+         * @param primitive This primitive
+         * @param key   The key
+         * @param value The value
+         */
+        void visitKeyValue(AbstractPrimitive primitive, String key, String value);
+    }
+
     private static final AtomicLong idCounter = new AtomicLong(0);
 
     static long generateUniqueId() {
@@ -106,7 +124,7 @@ public abstract class AbstractPrimitive implements IPrimitive {
     public void cloneFrom(AbstractPrimitive other) {
         setKeys(other.getKeys());
         id = other.id;
-        if (id <=0) {
+        if (id <= 0) {
             // reset version and changeset id
             version = 0;
             changesetId = 0;
@@ -116,7 +134,7 @@ public abstract class AbstractPrimitive implements IPrimitive {
             version = other.version;
         }
         flags = other.flags;
-        user= other.user;
+        user = other.user;
         if (id > 0 && other.changesetId > 0) {
             // #4208: sometimes we cloned from other with id < 0 *and*
             // an assigned changeset id. Don't know why yet. For primitives
@@ -145,7 +163,7 @@ public abstract class AbstractPrimitive implements IPrimitive {
     @Override
     public long getId() {
         long id = this.id;
-        return id >= 0?id:0;
+        return id >= 0 ? id : 0;
     }
 
     /**
@@ -288,7 +306,12 @@ public abstract class AbstractPrimitive implements IPrimitive {
 
     @Override
     public void setTimestamp(Date timestamp) {
-        this.timestamp = (int)(timestamp.getTime() / 1000);
+        this.timestamp = (int) (timestamp.getTime() / 1000);
+    }
+
+    @Override
+    public void setRawTimestamp(int timestamp) {
+        this.timestamp = timestamp;
     }
 
     /**
@@ -304,6 +327,11 @@ public abstract class AbstractPrimitive implements IPrimitive {
     }
 
     @Override
+    public int getRawTimestamp() {
+        return timestamp;
+    }
+
+    @Override
     public boolean isTimestampEmpty() {
         return timestamp == 0;
     }
@@ -434,16 +462,16 @@ public abstract class AbstractPrimitive implements IPrimitive {
         StringBuilder builder = new StringBuilder();
 
         if (isIncomplete()) {
-            builder.append("I");
+            builder.append('I');
         }
         if (isModified()) {
-            builder.append("M");
+            builder.append('M');
         }
         if (isVisible()) {
-            builder.append("V");
+            builder.append('V');
         }
         if (isDeleted()) {
-            builder.append("D");
+            builder.append('D');
         }
         return builder.toString();
     }
@@ -458,7 +486,6 @@ public abstract class AbstractPrimitive implements IPrimitive {
 
     /**
      * The key/value list for this primitive.
-     *
      */
     protected String[] keys;
 
@@ -467,13 +494,15 @@ public abstract class AbstractPrimitive implements IPrimitive {
      *
      * @return tags of this primitive. Changes made in returned map are not mapped
      * back to the primitive, use setKeys() to modify the keys
+     * @see #visitKeys(KeyValueVisitor)
      */
     @Override
     public Map<String, String> getKeys() {
-        Map<String, String> result = new HashMap<>();
         String[] keys = this.keys;
+        final Map<String, String> result = new HashMap<>(
+                Utils.hashMapInitialCapacity(keys == null ? 0 : keys.length / 2));
         if (keys != null) {
-            for (int i=0; i<keys.length ; i+=2) {
+            for (int i = 0; i < keys.length; i += 2) {
                 result.put(keys[i], keys[i + 1]);
             }
         }
@@ -481,6 +510,22 @@ public abstract class AbstractPrimitive implements IPrimitive {
     }
 
     /**
+     * Calls the visitor for every key/value pair of this primitive.
+     *
+     * @param visitor The visitor to call.
+     * @see #getKeys()
+     * @since 8742
+     */
+    public void visitKeys(KeyValueVisitor visitor) {
+        final String[] keys = this.keys;
+        if (keys != null) {
+            for (int i = 0; i < keys.length; i += 2) {
+                visitor.visitKeyValue(this, keys[i], keys[i + 1]);
+            }
+        }
+    }
+
+    /**
      * Sets the keys of this primitives to the key/value pairs in <code>keys</code>.
      * Old key/value pairs are removed.
      * If <code>keys</code> is null, clears existing key/value pairs.
@@ -521,22 +566,19 @@ public abstract class AbstractPrimitive implements IPrimitive {
             return;
         else if (value == null) {
             remove(key);
-        } else if (keys == null){
+        } else if (keys == null) {
             keys = new String[] {key, value};
             keysChangedImpl(originalKeys);
         } else {
-            for (int i=0; i<keys.length;i+=2) {
+            for (int i = 0; i < keys.length; i += 2) {
                 if (keys[i].equals(key)) {
-                    keys[i+1] = value;  // This modifies the keys array but it doesn't make it invalidate for any time so its ok (see note no top)
+                    // This modifies the keys array but it doesn't make it invalidate for any time so its ok (see note no top)
+                    keys[i+1] = value;
                     keysChangedImpl(originalKeys);
                     return;
                 }
             }
-            String[] newKeys = new String[keys.length + 2];
-            for (int i=0; i< keys.length;i+=2) {
-                newKeys[i] = keys[i];
-                newKeys[i+1] = keys[i+1];
-            }
+            String[] newKeys = Arrays.copyOf(keys, keys.length + 2);
             newKeys[keys.length] = key;
             newKeys[keys.length + 1] = value;
             keys = newKeys;
@@ -561,8 +603,8 @@ public abstract class AbstractPrimitive implements IPrimitive {
             return;
         }
         String[] newKeys = new String[keys.length - 2];
-        int j=0;
-        for (int i=0; i < keys.length; i+=2) {
+        int j = 0;
+        for (int i = 0; i < keys.length; i += 2) {
             if (!keys[i].equals(key)) {
                 newKeys[j++] = keys[i];
                 newKeys[j++] = keys[i+1];
@@ -598,7 +640,7 @@ public abstract class AbstractPrimitive implements IPrimitive {
             return null;
         if (keys == null)
             return null;
-        for (int i=0; i<keys.length;i+=2) {
+        for (int i = 0; i < keys.length; i += 2) {
             if (keys[i].equals(key)) return keys[i+1];
         }
         return null;
@@ -626,7 +668,7 @@ public abstract class AbstractPrimitive implements IPrimitive {
             return null;
         if (keys == null)
             return null;
-        for (int i=0; i<keys.length;i+=2) {
+        for (int i = 0; i < keys.length; i += 2) {
             if (keys[i].equalsIgnoreCase(key)) return keys[i+1];
         }
         return null;
@@ -638,11 +680,16 @@ public abstract class AbstractPrimitive implements IPrimitive {
 
     @Override
     public final Collection<String> keySet() {
-        String[] keys = this.keys;
-        if (keys == null)
+        final String[] keys = this.keys;
+        if (keys == null) {
             return Collections.emptySet();
-        Set<String> result = new HashSet<>(keys.length / 2);
-        for (int i=0; i<keys.length; i+=2) {
+        }
+        if (keys.length == 1) {
+            return Collections.singleton(keys[0]);
+        }
+
+        final Set<String> result = new HashSet<>(Utils.hashMapInitialCapacity(keys.length / 2));
+        for (int i = 0; i < keys.length; i += 2) {
             result.add(keys[i]);
         }
         return result;
@@ -669,7 +716,7 @@ public abstract class AbstractPrimitive implements IPrimitive {
         String[] keys = this.keys;
         if (key == null) return false;
         if (keys == null) return false;
-        for (int i=0; i< keys.length;i+=2) {
+        for (int i = 0; i < keys.length; i += 2) {
             if (keys[i].equals(key)) return true;
         }
         return false;
@@ -695,12 +742,12 @@ public abstract class AbstractPrimitive implements IPrimitive {
      * Replies a localized name for this primitive given by the value of the name tags
      * accessed from very specific (language variant) to more generic (default name).
      *
-     * @see LanguageInfo#getLanguageCodes()
+     * @see LanguageInfo#getLanguageCodes
      * @return the name of this primitive, <code>null</code> if no name exists
      */
     @Override
     public String getLocalName() {
-        for(String s : LanguageInfo.getLanguageCodes(null)) {
+        for (String s : LanguageInfo.getLanguageCodes(null)) {
             String val = get("name:" + s);
             if (val != null)
                 return val;
diff --git a/src/org/openstreetmap/josm/data/osm/BBox.java b/src/org/openstreetmap/josm/data/osm/BBox.java
index 7cebbb4..f4e4b01 100644
--- a/src/org/openstreetmap/josm/data/osm/BBox.java
+++ b/src/org/openstreetmap/josm/data/osm/BBox.java
@@ -32,8 +32,8 @@ public class BBox {
      * Constructs a new {@code BBox} defined by points <code>a</code> and <code>b</code>.
      * Result is minimal BBox containing both points.
      *
-     * @param a
-     * @param b
+     * @param a first point
+     * @param b second point
      */
     public BBox(LatLon a, LatLon b) {
         this(a.lon(), a.lat(), b.lon(), b.lat());
@@ -266,22 +266,22 @@ public class BBox {
 
     @Override
     public int hashCode() {
-        return (int)(ymin * xmin);
+        return (int) (ymin * xmin);
     }
 
     @Override
     public boolean equals(Object o) {
         if (o instanceof BBox) {
-            BBox b = (BBox)o;
-            return b.xmax == xmax && b.ymax == ymax && b.xmin == xmin && b.ymin == ymin;
+            BBox b = (BBox) o;
+            return b.xmax == xmax && b.ymax == ymax
+                    && b.xmin == xmin && b.ymin == ymin;
         } else
             return false;
     }
 
     @Override
     public String toString() {
-        return "[ x: " + xmin + " -> " + xmax +
-        ", y: " + ymin + " -> " + ymax + " ]";
+        return "[ x: " + xmin + " -> " + xmax + ", y: " + ymin + " -> " + ymax + " ]";
     }
 
     public String toStringCSV(String separator) {
diff --git a/src/org/openstreetmap/josm/data/osm/Changeset.java b/src/org/openstreetmap/josm/data/osm/Changeset.java
index 06d7b5e..e16b65a 100644
--- a/src/org/openstreetmap/josm/data/osm/Changeset.java
+++ b/src/org/openstreetmap/josm/data/osm/Changeset.java
@@ -41,7 +41,7 @@ public final class Changeset implements Tagged {
     /** the number of comments for this changeset */
     private int commentsCount;
     /** the map of tags */
-    private Map<String,String> tags;
+    private Map<String, String> tags;
     /** indicates whether this changeset is incomplete. For an incomplete changeset we only know its id */
     private boolean incomplete;
     /** the changeset content */
@@ -92,7 +92,7 @@ public final class Changeset implements Tagged {
     }
 
     public int compareTo(Changeset other) {
-        return Integer.valueOf(getId()).compareTo(other.getId());
+        return Integer.compare(getId(), other.getId());
     }
 
     public String getName() {
@@ -158,7 +158,7 @@ public final class Changeset implements Tagged {
 
     public Bounds getBounds() {
         if (min != null && max != null)
-            return new Bounds(min,max);
+            return new Bounds(min, max);
         return null;
     }
 
@@ -171,7 +171,7 @@ public final class Changeset implements Tagged {
      * @return the number of comments for this changeset
      * @since 7700
      */
-    public final int getCommentsCount() {
+    public int getCommentsCount() {
         return commentsCount;
     }
 
@@ -180,7 +180,7 @@ public final class Changeset implements Tagged {
      * @param commentsCount the number of comments for this changeset
      * @since 7700
      */
-    public final void setCommentsCount(int commentsCount) {
+    public void setCommentsCount(int commentsCount) {
         this.commentsCount = commentsCount;
     }
 
@@ -348,7 +348,7 @@ public final class Changeset implements Tagged {
      * @return the list of comments in the changeset discussion. May be empty but never null
      * @since 7704
      */
-    public final synchronized List<ChangesetDiscussionComment> getDiscussion() {
+    public synchronized List<ChangesetDiscussionComment> getDiscussion() {
         if (discussion == null) {
             return Collections.emptyList();
         }
@@ -360,7 +360,7 @@ public final class Changeset implements Tagged {
      * @param comment the comment to add. Ignored if null
      * @since 7704
      */
-    public final synchronized void addDiscussionComment(ChangesetDiscussionComment comment) {
+    public synchronized void addDiscussionComment(ChangesetDiscussionComment comment) {
         if (comment == null) {
             return;
         }
diff --git a/src/org/openstreetmap/josm/data/osm/ChangesetCache.java b/src/org/openstreetmap/josm/data/osm/ChangesetCache.java
index 57d9be2..54f69f0 100644
--- a/src/org/openstreetmap/josm/data/osm/ChangesetCache.java
+++ b/src/org/openstreetmap/josm/data/osm/ChangesetCache.java
@@ -68,7 +68,7 @@ public final class ChangesetCache implements PreferenceChangedListener{
     protected void fireChangesetCacheEvent(final ChangesetCacheEvent e) {
         GuiHelper.runInEDT(new Runnable() {
             @Override public void run() {
-                for(ChangesetCacheListener l: listeners) {
+                for (ChangesetCacheListener l: listeners) {
                     l.changesetCacheUpdated(e);
                 }
             }
@@ -104,7 +104,7 @@ public final class ChangesetCache implements PreferenceChangedListener{
     }
 
     public boolean contains(int id) {
-        if (id <=0) return false;
+        if (id <= 0) return false;
         return cache.get(id) != null;
     }
 
@@ -133,7 +133,7 @@ public final class ChangesetCache implements PreferenceChangedListener{
     public void remove(int id) {
         DefaultChangesetCacheEvent e = new DefaultChangesetCacheEvent(this);
         remove(id, e);
-        if (! e.isEmpty()) {
+        if (!e.isEmpty()) {
             fireChangesetCacheEvent(e);
         }
     }
@@ -159,7 +159,7 @@ public final class ChangesetCache implements PreferenceChangedListener{
             }
             remove(cs.getId(), evt);
         }
-        if (! evt.isEmpty()) {
+        if (!evt.isEmpty()) {
             fireChangesetCacheEvent(evt);
         }
     }
diff --git a/src/org/openstreetmap/josm/data/osm/ChangesetCacheEvent.java b/src/org/openstreetmap/josm/data/osm/ChangesetCacheEvent.java
index 95e197f..6ddbe95 100644
--- a/src/org/openstreetmap/josm/data/osm/ChangesetCacheEvent.java
+++ b/src/org/openstreetmap/josm/data/osm/ChangesetCacheEvent.java
@@ -5,8 +5,10 @@ import java.util.Collection;
 
 public interface ChangesetCacheEvent {
     ChangesetCache getSource();
+
     Collection<Changeset> getAddedChangesets();
+
     Collection<Changeset> getRemovedChangesets();
-    Collection<Changeset> getUpdatedChangesets();
 
+    Collection<Changeset> getUpdatedChangesets();
 }
diff --git a/src/org/openstreetmap/josm/data/osm/ChangesetDataSet.java b/src/org/openstreetmap/josm/data/osm/ChangesetDataSet.java
index cf6bd07..1885f1d 100644
--- a/src/org/openstreetmap/josm/data/osm/ChangesetDataSet.java
+++ b/src/org/openstreetmap/josm/data/osm/ChangesetDataSet.java
@@ -22,9 +22,10 @@ public class ChangesetDataSet {
         DELETED
     }
 
-    public static interface ChangesetDataSetEntry {
-        public ChangesetModificationType getModificationType();
-        public HistoryOsmPrimitive getPrimitive();
+    public interface ChangesetDataSetEntry {
+        ChangesetModificationType getModificationType();
+
+        HistoryOsmPrimitive getPrimitive();
     }
 
     private final Map<PrimitiveId, HistoryOsmPrimitive> primitives = new HashMap<>();
@@ -39,8 +40,8 @@ public class ChangesetDataSet {
      * @throws IllegalArgumentException if cmt is null
      */
     public void put(HistoryOsmPrimitive primitive, ChangesetModificationType cmt) {
-        CheckParameterUtil.ensureParameterNotNull(primitive,"primitive");
-        CheckParameterUtil.ensureParameterNotNull(cmt,"cmt");
+        CheckParameterUtil.ensureParameterNotNull(primitive, "primitive");
+        CheckParameterUtil.ensureParameterNotNull(cmt, "cmt");
         primitives.put(primitive.getPrimitiveId(), primitive);
         modificationTypes.put(primitive.getPrimitiveId(), cmt);
     }
@@ -114,7 +115,7 @@ public class ChangesetDataSet {
      * @throws IllegalArgumentException if cmt is null
      */
     public Set<HistoryOsmPrimitive> getPrimitivesByModificationType(ChangesetModificationType cmt) {
-        CheckParameterUtil.ensureParameterNotNull(cmt,"cmt");
+        CheckParameterUtil.ensureParameterNotNull(cmt, "cmt");
         Set<HistoryOsmPrimitive> ret = new HashSet<>();
         for (Entry<PrimitiveId, ChangesetModificationType> entry: modificationTypes.entrySet()) {
             if (entry.getValue().equals(cmt)) {
diff --git a/src/org/openstreetmap/josm/data/osm/DataSet.java b/src/org/openstreetmap/josm/data/osm/DataSet.java
index 495ae46..76556df 100644
--- a/src/org/openstreetmap/josm/data/osm/DataSet.java
+++ b/src/org/openstreetmap/josm/data/osm/DataSet.java
@@ -219,7 +219,7 @@ public final class DataSet implements Data, Cloneable, ProjectionChangeListener
      * @return {@code true} if upload is being discouraged, {@code false} otherwise
      * @see #setUploadDiscouraged
      */
-    public final boolean isUploadDiscouraged() {
+    public boolean isUploadDiscouraged() {
         return uploadDiscouraged;
     }
 
@@ -228,7 +228,7 @@ public final class DataSet implements Data, Cloneable, ProjectionChangeListener
      * @param uploadDiscouraged {@code true} if this dataset contains private data which should not be uploaded
      * @see #isUploadDiscouraged
      */
-    public final void setUploadDiscouraged(boolean uploadDiscouraged) {
+    public void setUploadDiscouraged(boolean uploadDiscouraged) {
         this.uploadDiscouraged = uploadDiscouraged;
     }
 
@@ -253,7 +253,7 @@ public final class DataSet implements Data, Cloneable, ProjectionChangeListener
      * @see #getChangeSetTags
      */
     public void addChangeSetTag(String k, String v) {
-        this.changeSetTags.put(k,v);
+        this.changeSetTags.put(k, v);
     }
 
     /**
@@ -525,7 +525,7 @@ public final class DataSet implements Data, Cloneable, ProjectionChangeListener
      * @param listener The selection listener to add
      */
     public static void addSelectionListener(SelectionChangedListener listener) {
-        ((CopyOnWriteArrayList<SelectionChangedListener>)selListeners).addIfAbsent(listener);
+        ((CopyOnWriteArrayList<SelectionChangedListener>) selListeners).addIfAbsent(listener);
     }
 
     /**
@@ -541,7 +541,7 @@ public final class DataSet implements Data, Cloneable, ProjectionChangeListener
      * this dataset.
      *
      */
-    public void fireSelectionChanged(){
+    public void fireSelectionChanged() {
         Collection<? extends OsmPrimitive> currentSelection = getAllSelected();
         for (SelectionChangedListener l : selListeners) {
             l.selectionChanged(currentSelection);
@@ -697,7 +697,7 @@ public final class DataSet implements Data, Cloneable, ProjectionChangeListener
      * @param waySegments Collection of way segments
      */
     public void setHighlightedVirtualNodes(Collection<WaySegment> waySegments) {
-        if(highlightedVirtualNodes.isEmpty() && waySegments.isEmpty())
+        if (highlightedVirtualNodes.isEmpty() && waySegments.isEmpty())
             return;
 
         highlightedVirtualNodes = waySegments;
@@ -710,7 +710,7 @@ public final class DataSet implements Data, Cloneable, ProjectionChangeListener
      * @param waySegments Collection of way segments
      */
     public void setHighlightedWaySegments(Collection<WaySegment> waySegments) {
-        if(highlightedWaySegments.isEmpty() && waySegments.isEmpty())
+        if (highlightedWaySegments.isEmpty() && waySegments.isEmpty())
             return;
 
         highlightedWaySegments = waySegments;
@@ -888,7 +888,7 @@ public final class DataSet implements Data, Cloneable, ProjectionChangeListener
                 primMap.put(w, newWay);
                 List<Node> newNodes = new ArrayList<>();
                 for (Node n: w.getNodes()) {
-                    newNodes.add((Node)primMap.get(n));
+                    newNodes.add((Node) primMap.get(n));
                 }
                 newWay.setNodes(newNodes);
                 ds.addPrimitive(newWay);
@@ -902,7 +902,7 @@ public final class DataSet implements Data, Cloneable, ProjectionChangeListener
                 ds.addPrimitive(newRelation);
             }
             for (Relation r : relations) {
-                Relation newRelation = (Relation)primMap.get(r);
+                Relation newRelation = (Relation) primMap.get(r);
                 List<RelationMember> newMembers = new ArrayList<>();
                 for (RelationMember rm: r.getMembers()) {
                     newMembers.add(new RelationMember(rm.getRole(), primMap.get(rm.getMember())));
@@ -953,7 +953,7 @@ public final class DataSet implements Data, Cloneable, ProjectionChangeListener
 
     /**
      * Show message and stack trace in log in case primitive is not found
-     * @param primitiveId
+     * @param primitiveId primitive id to look for
      * @return Primitive by id.
      */
     private OsmPrimitive getPrimitiveByIdChecked(PrimitiveId primitiveId) {
@@ -1015,7 +1015,7 @@ public final class DataSet implements Data, Cloneable, ProjectionChangeListener
 
                 Iterator<RelationMember> it = members.iterator();
                 boolean removed = false;
-                while(it.hasNext()) {
+                while (it.hasNext()) {
                     RelationMember member = it.next();
                     if (member.getMember().equals(primitive)) {
                         it.remove();
@@ -1045,7 +1045,7 @@ public final class DataSet implements Data, Cloneable, ProjectionChangeListener
         beginUpdate();
         try {
             if (referencedPrimitive instanceof Node) {
-                result.addAll(unlinkNodeFromWays((Node)referencedPrimitive));
+                result.addAll(unlinkNodeFromWays((Node) referencedPrimitive));
             }
             result.addAll(unlinkPrimitiveFromRelations(referencedPrimitive));
         } finally {
@@ -1077,7 +1077,7 @@ public final class DataSet implements Data, Cloneable, ProjectionChangeListener
             throw new RuntimeException("Reindexing node failed to add");
         for (OsmPrimitive primitive: node.getReferrers()) {
             if (primitive instanceof Way) {
-                reindexWay((Way)primitive);
+                reindexWay((Way) primitive);
             } else {
                 reindexRelation((Relation) primitive);
             }
@@ -1093,7 +1093,7 @@ public final class DataSet implements Data, Cloneable, ProjectionChangeListener
             throw new RuntimeException("Reindexing way failed to add");
         if (!way.getBBox().equals(before)) {
             for (OsmPrimitive primitive: way.getReferrers()) {
-                reindexRelation((Relation)primitive);
+                reindexRelation((Relation) primitive);
             }
         }
     }
diff --git a/src/org/openstreetmap/josm/data/osm/DataSetMerger.java b/src/org/openstreetmap/josm/data/osm/DataSetMerger.java
index eecbc4c..5503dd6 100644
--- a/src/org/openstreetmap/josm/data/osm/DataSetMerger.java
+++ b/src/org/openstreetmap/josm/data/osm/DataSetMerger.java
@@ -78,7 +78,7 @@ public class DataSetMerger {
      * @param candidates a set of possible candidates for a new primitive
      */
     protected void mergePrimitive(OsmPrimitive source, Collection<? extends OsmPrimitive> candidates) {
-        if (!source.isNew() ) {
+        if (!source.isNew()) {
             // try to merge onto a matching primitive with the same defined id
             //
             if (mergeById(source))
@@ -99,7 +99,7 @@ public class DataSetMerger {
                     // copy the technical attributes from other version
                     target.setVisible(source.isVisible());
                     target.setUser(source.getUser());
-                    target.setTimestamp(source.getTimestamp());
+                    target.setRawTimestamp(source.getRawTimestamp());
                     target.setModified(source.isModified());
                     objectsWithChildrenToMerge.add(source.getPrimitiveId());
                     return;
@@ -140,7 +140,7 @@ public class DataSetMerger {
     }
 
     protected void fixIncomplete(Way other) {
-        Way myWay = (Way)getMergeTarget(other);
+        Way myWay = (Way) getMergeTarget(other);
         if (myWay == null)
             throw new RuntimeException(tr("Missing merge target for way with id {0}", other.getUniqueId()));
     }
@@ -173,11 +173,12 @@ public class DataSetMerger {
         boolean flag;
         do {
             flag = false;
-            for (Iterator<OsmPrimitive> it = objectsToDelete.iterator();it.hasNext();) {
+            for (Iterator<OsmPrimitive> it = objectsToDelete.iterator(); it.hasNext();) {
                 OsmPrimitive target = it.next();
                 OsmPrimitive source = sourceDataSet.getPrimitiveById(target.getPrimitiveId());
                 if (source == null)
-                    throw new RuntimeException(tr("Object of type {0} with id {1} was marked to be deleted, but it''s missing in the source dataset",
+                    throw new RuntimeException(
+                            tr("Object of type {0} with id {1} was marked to be deleted, but it''s missing in the source dataset",
                             target.getType(), target.getUniqueId()));
 
                 List<OsmPrimitive> referrers = target.getReferrers();
@@ -216,7 +217,7 @@ public class DataSetMerger {
         }
     }
 
-    private final void resetPrimitive(OsmPrimitive osm) {
+    private void resetPrimitive(OsmPrimitive osm) {
         if (osm instanceof Way) {
             ((Way) osm).setNodes(null);
         } else if (osm instanceof Relation) {
@@ -233,13 +234,13 @@ public class DataSetMerger {
      *
      */
     private void mergeNodeList(Way source) {
-        Way target = (Way)getMergeTarget(source);
+        Way target = (Way) getMergeTarget(source);
         if (target == null)
             throw new IllegalStateException(tr("Missing merge target for way with id {0}", source.getUniqueId()));
 
         List<Node> newNodes = new ArrayList<>(source.getNodesCount());
         for (Node sourceNode : source.getNodes()) {
-            Node targetNode = (Node)getMergeTarget(sourceNode);
+            Node targetNode = (Node) getMergeTarget(sourceNode);
             if (targetNode != null) {
                 newNodes.add(targetNode);
                 if (targetNode.isDeleted() && !conflicts.hasConflictForMy(targetNode)) {
@@ -267,7 +268,8 @@ public class DataSetMerger {
         for (RelationMember sourceMember : source.getMembers()) {
             OsmPrimitive targetMember = getMergeTarget(sourceMember.getMember());
             if (targetMember == null)
-                throw new IllegalStateException(tr("Missing merge target of type {0} with id {1}", sourceMember.getType(), sourceMember.getUniqueId()));
+                throw new IllegalStateException(tr("Missing merge target of type {0} with id {1}",
+                        sourceMember.getType(), sourceMember.getUniqueId()));
             RelationMember newMember = new RelationMember(sourceMember.getRole(), targetMember);
             newMembers.add(newMember);
             if (targetMember.isDeleted() && !conflicts.hasConflictForMy(targetMember)) {
@@ -311,14 +313,15 @@ public class DataSetMerger {
             // target and source are incomplete. Doesn't matter which one to
             // take. We take target.
             //
-        } else if (!target.isModified() && !source.isModified() && target.isVisible() != source.isVisible() && target.getVersion() == source.getVersion())
+        } else if (!target.isModified() && !source.isModified() && target.isVisible() != source.isVisible()
+                && target.getVersion() == source.getVersion())
             // Same version, but different "visible" attribute and neither of them are modified.
             // It indicates a serious problem in datasets.
             // For example, datasets can be fetched from different OSM servers or badly hand-modified.
             // We shouldn't merge that datasets.
             throw new DataIntegrityProblemException(tr("Conflict in ''visible'' attribute for object of type {0} with id {1}",
                     target.getType(), target.getId()));
-        else if (target.isDeleted() && ! source.isDeleted() && target.getVersion() == source.getVersion()) {
+        else if (target.isDeleted() && !source.isDeleted() && target.getVersion() == source.getVersion()) {
             // same version, but target is deleted. Assume target takes precedence
             // otherwise too many conflicts when refreshing from the server
             // but, if source has a referrer that is not in the target dataset there is a conflict
@@ -330,27 +333,27 @@ public class DataSetMerger {
                     break;
                 }
             }
-        } else if (! target.isModified() && source.isDeleted()) {
+        } else if (!target.isModified() && source.isDeleted()) {
             // target not modified. We can assume that source is the most recent version,
             // so mark it to be deleted.
             //
             objectsToDelete.add(target);
-        } else if (! target.isModified() && source.isModified()) {
+        } else if (!target.isModified() && source.isModified()) {
             // target not modified. We can assume that source is the most recent version.
             // clone it into target.
             target.mergeFrom(source);
             objectsWithChildrenToMerge.add(source.getPrimitiveId());
-        } else if (! target.isModified() && !source.isModified() && target.getVersion() == source.getVersion()) {
+        } else if (!target.isModified() && !source.isModified() && target.getVersion() == source.getVersion()) {
             // both not modified. Merge nevertheless.
             // This helps when updating "empty" relations, see #4295
             target.mergeFrom(source);
             objectsWithChildrenToMerge.add(source.getPrimitiveId());
-        } else if (! target.isModified() && !source.isModified() && target.getVersion() < source.getVersion()) {
+        } else if (!target.isModified() && !source.isModified() && target.getVersion() < source.getVersion()) {
             // my not modified but other is newer. clone other onto mine.
             //
             target.mergeFrom(source);
             objectsWithChildrenToMerge.add(source.getPrimitiveId());
-        } else if (target.isModified() && ! source.isModified() && target.getVersion() == source.getVersion()) {
+        } else if (target.isModified() && !source.isModified() && target.getVersion() == source.getVersion()) {
             // target is same as source but target is modified
             // => keep target and reset modified flag if target and source are semantically equal
             if (target.hasEqualSemanticAttributes(source)) {
@@ -360,12 +363,12 @@ public class DataSetMerger {
             // target is modified and deleted state differs.
             // this have to be resolved manually.
             //
-            addConflict(target,source);
-        } else if (! target.hasEqualSemanticAttributes(source)) {
+            addConflict(target, source);
+        } else if (!target.hasEqualSemanticAttributes(source)) {
             // target is modified and is not semantically equal with source. Can't automatically
             // resolve the differences
             // =>  create a conflict
-            addConflict(target,source);
+            addConflict(target, source);
         } else {
             // clone from other. mergeFrom will mainly copy
             // technical attributes like timestamp or user information. Semantic
diff --git a/src/org/openstreetmap/josm/data/osm/DefaultChangesetCacheEvent.java b/src/org/openstreetmap/josm/data/osm/DefaultChangesetCacheEvent.java
index d35f494..fd78d0e 100644
--- a/src/org/openstreetmap/josm/data/osm/DefaultChangesetCacheEvent.java
+++ b/src/org/openstreetmap/josm/data/osm/DefaultChangesetCacheEvent.java
@@ -24,14 +24,17 @@ public class DefaultChangesetCacheEvent implements ChangesetCacheEvent{
     public Collection<Changeset> getAddedChangesets() {
         return Collections.unmodifiableCollection(added);
     }
+
     @Override
     public Collection<Changeset> getRemovedChangesets() {
         return Collections.unmodifiableCollection(removed);
     }
+
     @Override
     public ChangesetCache getSource() {
         return source;
     }
+
     @Override
     public Collection<Changeset> getUpdatedChangesets() {
         return Collections.unmodifiableCollection(modified);
diff --git a/src/org/openstreetmap/josm/data/osm/FilterMatcher.java b/src/org/openstreetmap/josm/data/osm/FilterMatcher.java
index 052f68a..1bf8e6e 100644
--- a/src/org/openstreetmap/josm/data/osm/FilterMatcher.java
+++ b/src/org/openstreetmap/josm/data/osm/FilterMatcher.java
@@ -84,7 +84,7 @@ public class FilterMatcher {
             }
 
             Match compiled = SearchCompiler.compile(filter.text, filter.caseSensitive, filter.regexSearch);
-            this.match = filter.inverted?new Not(compiled):compiled;
+            this.match = filter.inverted ? new Not(compiled) : compiled;
             this.isInverted = filter.inverted;
         }
     }
diff --git a/src/org/openstreetmap/josm/data/osm/Hash.java b/src/org/openstreetmap/josm/data/osm/Hash.java
index bd33a89..e652085 100644
--- a/src/org/openstreetmap/josm/data/osm/Hash.java
+++ b/src/org/openstreetmap/josm/data/osm/Hash.java
@@ -10,7 +10,7 @@ package org.openstreetmap.josm.data.osm;
  * For use cases, see {@link Storage}.
  * @author nenik
  */
-public interface Hash<K,T> {
+public interface Hash<K, T> {
 
     /**
      * Get hashcode for given instance, based on some inner state of the
@@ -20,7 +20,7 @@ public interface Hash<K,T> {
      * @param k the object to compute hashcode for
      * @return computed hashcode
      */
-    public int getHashCode(K k);
+    int getHashCode(K k);
 
     /**
      * Compare two instances for semantic or lookup equality. For use cases
@@ -31,5 +31,5 @@ public interface Hash<K,T> {
      * @return true if the objects are semantically equivalent, or if k
      * uniquely identifies t in given class.
      */
-    public boolean equals(K k, T t);
+    boolean equals(K k, T t);
 }
diff --git a/src/org/openstreetmap/josm/data/osm/INode.java b/src/org/openstreetmap/josm/data/osm/INode.java
index 40d6cc1..845fa60 100644
--- a/src/org/openstreetmap/josm/data/osm/INode.java
+++ b/src/org/openstreetmap/josm/data/osm/INode.java
@@ -7,7 +7,10 @@ import org.openstreetmap.josm.data.coor.LatLon;
 public interface INode extends IPrimitive {
 
     LatLon getCoor();
+
     void setCoor(LatLon coor);
+
     EastNorth getEastNorth();
+
     void setEastNorth(EastNorth eastNorth);
 }
diff --git a/src/org/openstreetmap/josm/data/osm/IPrimitive.java b/src/org/openstreetmap/josm/data/osm/IPrimitive.java
index f2f1fad..49768c5 100644
--- a/src/org/openstreetmap/josm/data/osm/IPrimitive.java
+++ b/src/org/openstreetmap/josm/data/osm/IPrimitive.java
@@ -11,27 +11,50 @@ import org.openstreetmap.josm.data.osm.visitor.PrimitiveVisitor;
 public interface IPrimitive extends Tagged, PrimitiveId {
 
     boolean isModified();
+
     void setModified(boolean modified);
+
     boolean isVisible();
+
     void setVisible(boolean visible);
+
     boolean isDeleted();
+
     void setDeleted(boolean deleted);
+
     boolean isIncomplete();
+
     boolean isNewOrUndeleted();
+
     long getId();
+
     PrimitiveId getPrimitiveId();
+
     int getVersion();
+
     void setOsmId(long id, int version);
+
     User getUser();
+
     void setUser(User user);
+
     Date getTimestamp();
+
+    int getRawTimestamp();
+
     void setTimestamp(Date timestamp);
+
+    void setRawTimestamp(int timestamp);
+
     boolean isTimestampEmpty();
+
     int getChangesetId();
+
     void setChangesetId(int changesetId);
 
     void accept(PrimitiveVisitor visitor);
+
     String getName();
-    String getLocalName();
 
+    String getLocalName();
 }
diff --git a/src/org/openstreetmap/josm/data/osm/IRelation.java b/src/org/openstreetmap/josm/data/osm/IRelation.java
index 4be43fd..5465bc0 100644
--- a/src/org/openstreetmap/josm/data/osm/IRelation.java
+++ b/src/org/openstreetmap/josm/data/osm/IRelation.java
@@ -4,8 +4,10 @@ package org.openstreetmap.josm.data.osm;
 public interface IRelation extends IPrimitive {
 
     int getMembersCount();
+
     long getMemberId(int idx);
+
     String getRole(int idx);
-    OsmPrimitiveType getMemberType(int idx);
 
+    OsmPrimitiveType getMemberType(int idx);
 }
diff --git a/src/org/openstreetmap/josm/data/osm/IWay.java b/src/org/openstreetmap/josm/data/osm/IWay.java
index c68ca67..972421b 100644
--- a/src/org/openstreetmap/josm/data/osm/IWay.java
+++ b/src/org/openstreetmap/josm/data/osm/IWay.java
@@ -4,7 +4,8 @@ package org.openstreetmap.josm.data.osm;
 public interface IWay extends IPrimitive {
 
     int getNodesCount();
+
     long getNodeId(int idx);
-    boolean isClosed();
 
+    boolean isClosed();
 }
diff --git a/src/org/openstreetmap/josm/data/osm/MultipolygonBuilder.java b/src/org/openstreetmap/josm/data/osm/MultipolygonBuilder.java
index e7d7e98..678fe8d 100644
--- a/src/org/openstreetmap/josm/data/osm/MultipolygonBuilder.java
+++ b/src/org/openstreetmap/josm/data/osm/MultipolygonBuilder.java
@@ -31,7 +31,7 @@ import org.openstreetmap.josm.tools.Utils;
 public class MultipolygonBuilder {
 
     private static final Pair<Integer, ExecutorService> THREAD_POOL =
-            Utils.newThreadPool("multipolygon_creation.numberOfThreads");
+            Utils.newThreadPool("multipolygon_creation.numberOfThreads", "multipolygon-builder-%d", Thread.NORM_PRIORITY);
 
     /**
      * Represents one polygon that consists of multiple ways.
@@ -70,7 +70,7 @@ public class MultipolygonBuilder {
         public List<Node> getNodes() {
             List<Node> nodes = new ArrayList<>();
 
-            for (int waypos = 0; waypos < this.ways.size(); waypos ++) {
+            for (int waypos = 0; waypos < this.ways.size(); waypos++) {
                 Way way = this.ways.get(waypos);
                 boolean reversed = this.reversed.get(waypos).booleanValue();
 
@@ -202,7 +202,7 @@ public class MultipolygonBuilder {
             //find polygon ways
             while (true) {
                 boolean curWayReverse = prevNode == curWay.lastNode();
-                Node nextNode = (curWayReverse) ? curWay.firstNode(): curWay.lastNode();
+                Node nextNode = (curWayReverse) ? curWay.firstNode() : curWay.lastNode();
 
                 //add cur way to the list
                 collectedWays.add(curWay);
@@ -221,7 +221,7 @@ public class MultipolygonBuilder {
                 }
 
                 Way nextWay = null;
-                for(Way way: adjacentWays) {
+                for (Way way: adjacentWays) {
                     if (way != curWay) {
                         nextWay = way;
                     }
@@ -305,7 +305,7 @@ public class MultipolygonBuilder {
         final int bucketsize = Math.max(32, boundaryWays.size()/THREAD_POOL.a/3);
         final int noBuckets = (boundaryWays.size() + bucketsize - 1) / bucketsize;
         final boolean singleThread = THREAD_POOL.a == 1 || noBuckets == 1;
-        for (int i=0; i<noBuckets; i++) {
+        for (int i = 0; i < noBuckets; i++) {
             int from = i*bucketsize;
             int to = Math.min((i+1)*bucketsize, boundaryWays.size());
             List<PolygonLevel> target = singleThread ? result : new ArrayList<PolygonLevel>(to - from);
@@ -368,7 +368,8 @@ public class MultipolygonBuilder {
             return result;
         }
 
-        private static List<PolygonLevel> processOuterWay(int level, List<JoinedPolygon> boundaryWays, final List<PolygonLevel> result, JoinedPolygon outerWay) {
+        private static List<PolygonLevel> processOuterWay(int level, List<JoinedPolygon> boundaryWays,
+                final List<PolygonLevel> result, JoinedPolygon outerWay) {
             Pair<Boolean, List<JoinedPolygon>> p = findInnerWaysCandidates(outerWay, boundaryWays);
             if (p == null) {
                 // ways intersect
@@ -402,7 +403,7 @@ public class MultipolygonBuilder {
 
         @Override
         public List<PolygonLevel> call() throws Exception {
-            for (int i = from; i<to; i++) {
+            for (int i = from; i < to; i++) {
                 if (processOuterWay(0, input, output, input.get(i)) == null) {
                     return null;
                 }
diff --git a/src/org/openstreetmap/josm/data/osm/NameFormatter.java b/src/org/openstreetmap/josm/data/osm/NameFormatter.java
index dc1fed2..0bf2282 100644
--- a/src/org/openstreetmap/josm/data/osm/NameFormatter.java
+++ b/src/org/openstreetmap/josm/data/osm/NameFormatter.java
@@ -5,11 +5,16 @@ import java.util.Comparator;
 
 public interface NameFormatter {
     String format(Node node);
+
     String format(Way way);
+
     String format(Relation relation);
+
     String format(Changeset changeset);
 
     Comparator<Node> getNodeComparator();
+
     Comparator<Way> getWayComparator();
+
     Comparator<Relation> getRelationComparator();
 }
diff --git a/src/org/openstreetmap/josm/data/osm/Node.java b/src/org/openstreetmap/josm/data/osm/Node.java
index 7f01ffd..964122f 100644
--- a/src/org/openstreetmap/josm/data/osm/Node.java
+++ b/src/org/openstreetmap/josm/data/osm/Node.java
@@ -39,17 +39,17 @@ public final class Node extends OsmPrimitive implements INode {
      * @return {@code true} if this node has valid coordinates
      * @since 7828
      */
-    public final boolean isLatLonKnown() {
+    public boolean isLatLonKnown() {
         return !Double.isNaN(lat) && !Double.isNaN(lon);
     }
 
     @Override
-    public final void setCoor(LatLon coor) {
+    public void setCoor(LatLon coor) {
         updateCoor(coor, null);
     }
 
     @Override
-    public final void setEastNorth(EastNorth eastNorth) {
+    public void setEastNorth(EastNorth eastNorth) {
         updateCoor(null, eastNorth);
     }
 
@@ -67,9 +67,9 @@ public final class Node extends OsmPrimitive implements INode {
     }
 
     @Override
-    public final LatLon getCoor() {
+    public LatLon getCoor() {
         if (!isLatLonKnown()) return null;
-        return new LatLon(lat,lon);
+        return new LatLon(lat, lon);
     }
 
     /**
@@ -88,7 +88,7 @@ public final class Node extends OsmPrimitive implements INode {
      *
      */
     @Override
-    public final EastNorth getEastNorth() {
+    public EastNorth getEastNorth() {
         if (!isLatLonKnown()) return null;
 
         if (getDataSet() == null)
@@ -163,7 +163,8 @@ public final class Node extends OsmPrimitive implements INode {
     /**
      * Constructs an identical clone of the argument.
      * @param clone The node to clone
-     * @param clearMetadata If {@code true}, clears the OSM id and other metadata as defined by {@link #clearOsmMetadata}. If {@code false}, does nothing
+     * @param clearMetadata If {@code true}, clears the OSM id and other metadata as defined by {@link #clearOsmMetadata}.
+     * If {@code false}, does nothing
      */
     public Node(Node clone, boolean clearMetadata) {
         super(clone.getUniqueId(), true /* allow negative IDs */);
@@ -221,7 +222,7 @@ public final class Node extends OsmPrimitive implements INode {
         boolean locked = writeLock();
         try {
             super.cloneFrom(osm);
-            setCoor(((Node)osm).getCoor());
+            setCoor(((Node) osm).getCoor());
         } finally {
             writeUnlock(locked);
         }
@@ -244,7 +245,7 @@ public final class Node extends OsmPrimitive implements INode {
         try {
             super.mergeFrom(other);
             if (!other.isIncomplete()) {
-                setCoor(((Node)other).getCoor());
+                setCoor(((Node) other).getCoor());
             }
         } finally {
             writeUnlock(locked);
@@ -255,7 +256,7 @@ public final class Node extends OsmPrimitive implements INode {
         boolean locked = writeLock();
         try {
             super.load(data);
-            setCoor(((NodeData)data).getCoor());
+            setCoor(((NodeData) data).getCoor());
         } finally {
             writeUnlock(locked);
         }
@@ -280,9 +281,9 @@ public final class Node extends OsmPrimitive implements INode {
     public boolean hasEqualSemanticAttributes(OsmPrimitive other) {
         if (!(other instanceof Node))
             return false;
-        if (! super.hasEqualSemanticAttributes(other))
+        if (!super.hasEqualSemanticAttributes(other))
             return false;
-        Node n = (Node)other;
+        Node n = (Node) other;
         LatLon coor = getCoor();
         LatLon otherCoor = n.getCoor();
         if (coor == null && otherCoor == null)
@@ -295,7 +296,7 @@ public final class Node extends OsmPrimitive implements INode {
 
     @Override
     public int compareTo(OsmPrimitive o) {
-        return o instanceof Node ? Long.valueOf(getUniqueId()).compareTo(o.getUniqueId()) : 1;
+        return o instanceof Node ? Long.compare(getUniqueId(), o.getUniqueId()) : 1;
     }
 
     @Override
@@ -372,7 +373,8 @@ public final class Node extends OsmPrimitive implements INode {
                 for (final Node n : w.getNodes()) {
                     final boolean containsN = visited.contains(n);
                     visited.add(n);
-                    if (!containsN && (predicate == null || predicate.evaluate(n)) && n.isConnectedTo(otherNodes, hops - 1, predicate, visited)) {
+                    if (!containsN && (predicate == null || predicate.evaluate(n))
+                            && n.isConnectedTo(otherNodes, hops - 1, predicate, visited)) {
                         return true;
                     }
                 }
diff --git a/src/org/openstreetmap/josm/data/osm/NodeData.java b/src/org/openstreetmap/josm/data/osm/NodeData.java
index 3a01229..943cc35 100644
--- a/src/org/openstreetmap/josm/data/osm/NodeData.java
+++ b/src/org/openstreetmap/josm/data/osm/NodeData.java
@@ -14,8 +14,17 @@ public class NodeData extends PrimitiveData implements INode {
     private double lat = Double.NaN;
     private double lon = Double.NaN;
 
-    public NodeData() {}
+    /**
+     * Constructs a new {@code NodeData}.
+     */
+    public NodeData() {
+        // contents can be set later with setters
+    }
 
+    /**
+     * Constructs a new {@code NodeData}.
+     * @param data node data to copy
+     */
     public NodeData(NodeData data) {
         super(data);
         setCoor(data.getCoor());
@@ -27,7 +36,7 @@ public class NodeData extends PrimitiveData implements INode {
 
     @Override
     public LatLon getCoor() {
-        return isLatLonKnown() ? new LatLon(lat,lon) : null;
+        return isLatLonKnown() ? new LatLon(lat, lon) : null;
     }
 
     @Override
@@ -43,17 +52,14 @@ public class NodeData extends PrimitiveData implements INode {
 
     @Override
     public EastNorth getEastNorth() {
-        /*
-         * No internal caching of projected coordinates needed. In contrast to getEastNorth()
-         * on Node, this method is rarely used. Caching would be overkill.
-         */
+        // No internal caching of projected coordinates needed. In contrast to getEastNorth()
+        // on Node, this method is rarely used. Caching would be overkill.
         return Projections.project(getCoor());
     }
 
     @Override
     public void setEastNorth(EastNorth eastNorth) {
-        LatLon ll = Projections.inverseProject(eastNorth);
-        setCoor(ll);
+        setCoor(Projections.inverseProject(eastNorth));
     }
 
     @Override
@@ -75,5 +81,4 @@ public class NodeData extends PrimitiveData implements INode {
     public void accept(PrimitiveVisitor visitor) {
         visitor.visit(this);
     }
-
 }
diff --git a/src/org/openstreetmap/josm/data/osm/NoteData.java b/src/org/openstreetmap/josm/data/osm/NoteData.java
index dd2a814..ef5274d 100644
--- a/src/org/openstreetmap/josm/data/osm/NoteData.java
+++ b/src/org/openstreetmap/josm/data/osm/NoteData.java
@@ -51,7 +51,7 @@ public class NoteData {
             if (n1.getState() == State.open && n2.getState() == State.closed) {
                 return -1;
             }
-            return Long.valueOf(Math.abs(n1.getId())).compareTo(Long.valueOf(Math.abs(n2.getId())));
+            return Long.compare(Math.abs(n1.getId()), Math.abs(n2.getId()));
         }
     };
 
@@ -148,7 +148,7 @@ public class NoteData {
                 return true;
             }
             for (NoteComment comment : note.getComments()) {
-                if (comment.getIsNew()) {
+                if (comment.isNew()) {
                     return true;
                 }
             }
@@ -169,7 +169,7 @@ public class NoteData {
                 final boolean isDirty = Utils.exists(existingNote.getComments(), new Predicate<NoteComment>() {
                     @Override
                     public boolean evaluate(NoteComment object) {
-                        return object.getIsNew();
+                        return object.isNew();
                     }
                 });
                 if (!isDirty) {
@@ -192,7 +192,7 @@ public class NoteData {
      * @param text Required comment with which to open the note
      */
     public synchronized void createNote(LatLon location, String text) {
-        if(text == null || text.isEmpty()) {
+        if (text == null || text.isEmpty()) {
             throw new IllegalArgumentException("Comment can not be blank when creating a note");
         }
         Note note = new Note(location);
@@ -272,8 +272,10 @@ public class NoteData {
     }
 
     private void dataUpdated() {
-        Main.map.noteDialog.setNotes(getSortedNotes());
-        Main.map.mapView.repaint();
+        if (Main.isDisplayingMapView()) {
+            Main.map.noteDialog.setNotes(getSortedNotes());
+            Main.map.mapView.repaint();
+        }
     }
 
     private User getCurrentUser() {
@@ -290,7 +292,14 @@ public class NoteData {
         for (Map.Entry<Note, Note> entry : updatedNotes.entrySet()) {
             Note oldNote = entry.getKey();
             Note newNote = entry.getValue();
+            boolean reindex = oldNote.hashCode() != newNote.hashCode();
+            if (reindex) {
+                noteList.removeElem(oldNote);
+            }
             oldNote.updateWith(newNote);
+            if (reindex) {
+                noteList.add(oldNote);
+            }
         }
         dataUpdated();
     }
diff --git a/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java b/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
index 86df1e9..3c44301 100644
--- a/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
+++ b/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
@@ -14,6 +14,7 @@ import java.util.HashSet;
 import java.util.LinkedHashSet;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
 
@@ -43,7 +44,6 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
     private static final String SPECIAL_VALUE_ID = "id";
     private static final String SPECIAL_VALUE_LOCAL_NAME = "localname";
 
-
     /**
      * An object can be disabled by the filter mechanism.
      * Then it will show in a shade of gray on the map or it is completely
@@ -113,15 +113,15 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
      *
      * If <code>list</code> is null, replies an empty list.
      *
-     * @param <T>
+     * @param <T> type of data (must be one of the {@link OsmPrimitive} types
      * @param list  the original list
      * @param type the type to filter for
      * @return the sub-list of OSM primitives of type <code>type</code>
      */
-    public static <T extends OsmPrimitive>  List<T> getFilteredList(Collection<OsmPrimitive> list, Class<T> type) {
+    public static <T extends OsmPrimitive> List<T> getFilteredList(Collection<OsmPrimitive> list, Class<T> type) {
         if (list == null) return Collections.emptyList();
         List<T> ret = new LinkedList<>();
-        for(OsmPrimitive p: list) {
+        for (OsmPrimitive p: list) {
             if (type.isInstance(p)) {
                 ret.add(type.cast(p));
             }
@@ -143,7 +143,7 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
     public static <T extends OsmPrimitive> Set<T> getFilteredSet(Collection<OsmPrimitive> set, Class<T> type) {
         Set<T> ret = new LinkedHashSet<>();
         if (set != null) {
-            for(OsmPrimitive p: set) {
+            for (OsmPrimitive p: set) {
                 if (type.isInstance(p)) {
                     ret.add(type.cast(p));
                 }
@@ -247,7 +247,7 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
      * positive number.
      *
      * @param id the id
-     * @param allowNegativeId
+     * @param allowNegativeId {@code true} to allow negative id
      * @throws IllegalArgumentException if id < 0 and allowNegativeId is false
      */
     protected OsmPrimitive(long id, boolean allowNegativeId) {
@@ -276,9 +276,9 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
      *
      * If id is not > 0 version is ignored and set to 0.
      *
-     * @param id
-     * @param version
-     * @param allowNegativeId
+     * @param id the id
+     * @param version the version (positive integer)
+     * @param allowNegativeId {@code true} to allow negative id
      * @throws IllegalArgumentException if id < 0 and allowNegativeId is false
      */
     protected OsmPrimitive(long id, int version, boolean allowNegativeId) {
@@ -287,7 +287,6 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
         setIncomplete(id > 0 && version == 0);
     }
 
-
     /*----------
      * MAPPAINT
      *--------*/
@@ -297,8 +296,7 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
     /* This should not be called from outside. Fixing the UI to add relevant
        get/set functions calling this implicitely is preferred, so we can have
        transparent cache handling in the future. */
-    public void clearCachedStyle()
-    {
+    public void clearCachedStyle() {
         mappaintStyle = null;
     }
     /* end of mappaint data */
@@ -312,7 +310,7 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
 
     /**
      * This method should never ever by called from somewhere else than Dataset.addPrimitive or removePrimitive methods
-     * @param dataSet
+     * @param dataSet the parent dataset
      */
     void setDataset(DataSet dataSet) {
         if (this.dataSet != null && dataSet != null && this.dataSet != dataSet)
@@ -346,7 +344,8 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
 
     protected void writeUnlock(boolean locked) {
         if (locked) {
-            // It shouldn't be possible for dataset to become null because method calling setDataset would need write lock which is owned by this thread
+            // It shouldn't be possible for dataset to become null because
+            // method calling setDataset would need write lock which is owned by this thread
             dataSet.endUpdate();
         }
     }
@@ -440,7 +439,7 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
     /* FLAGS
     /* ------*/
 
-    private void updateFlagsNoLock (int flag, boolean value) {
+    private void updateFlagsNoLock(int flag, boolean value) {
         super.updateFlags(flag, value);
     }
 
@@ -518,7 +517,7 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
      * completely hidden on the map.
      */
     public boolean isDisabledAndHidden() {
-        return (((flags & FLAG_DISABLED) != 0) && ((flags & FLAG_HIDE_IF_DISABLED) != 0));
+        return ((flags & FLAG_DISABLED) != 0) && ((flags & FLAG_HIDE_IF_DISABLED) != 0);
     }
 
     /**
@@ -626,8 +625,8 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
     }
 
     private boolean isOuterMemberOfMultipolygon(OsmPrimitive ref) {
-        if (ref instanceof Relation && ref.isSelected() && ((Relation)ref).isMultipolygon()) {
-            for (RelationMember rm : ((Relation)ref).getMembersFor(Collections.singleton(this))) {
+        if (ref instanceof Relation && ref.isSelected() && ((Relation) ref).isMultipolygon()) {
+            for (RelationMember rm : ((Relation) ref).getMembersFor(Collections.singleton(this))) {
                 if ("outer".equals(rm.getRole())) {
                     return true;
                 }
@@ -789,9 +788,10 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
         String reversedDirectionDefault = "oneway=\"-1\"";
 
         String directionDefault = "oneway? | (aerialway=* aerialway!=station) | "+
-                "waterway=stream | waterway=river | waterway=canal | waterway=drain | waterway=rapids | "+
+                "waterway=stream | waterway=river | waterway=canal | waterway=drain | "+
                 "\"piste:type\"=downhill | \"piste:type\"=sled | man_made=\"piste:halfpipe\" | "+
-                "junction=roundabout | (highway=motorway_link & -oneway=no)";
+                "junction=roundabout | (highway=motorway & -oneway=no & -oneway=reversible) | "+
+                "(highway=motorway_link & -oneway=no & -oneway=reversible)";
 
         try {
             reversedDirectionKeys = SearchCompiler.compile(Main.pref.get("tags.reversed_direction", reversedDirectionDefault), false, false);
@@ -965,14 +965,14 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
             referrers = referrer;
         } else if (referrers instanceof OsmPrimitive) {
             if (referrers != referrer) {
-                referrers = new OsmPrimitive[] { (OsmPrimitive)referrers, referrer };
+                referrers = new OsmPrimitive[] {(OsmPrimitive) referrers, referrer};
             }
         } else {
-            for (OsmPrimitive primitive:(OsmPrimitive[])referrers) {
+            for (OsmPrimitive primitive:(OsmPrimitive[]) referrers) {
                 if (primitive == referrer)
                     return;
             }
-            referrers = Utils.addInArrayCopy((OsmPrimitive[])referrers, referrer);
+            referrers = Utils.addInArrayCopy((OsmPrimitive[]) referrers, referrer);
         }
     }
 
@@ -986,9 +986,9 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
                 referrers = null;
             }
         } else if (referrers instanceof OsmPrimitive[]) {
-            OsmPrimitive[] orig = (OsmPrimitive[])referrers;
+            OsmPrimitive[] orig = (OsmPrimitive[]) referrers;
             int idx = -1;
-            for (int i=0; i<orig.length; i++) {
+            for (int i = 0; i < orig.length; i++) {
                 if (orig[i] == referrer) {
                     idx = i;
                     break;
@@ -1034,12 +1034,12 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
         List<OsmPrimitive> result = new ArrayList<>();
         if (referrers != null) {
             if (referrers instanceof OsmPrimitive) {
-                OsmPrimitive ref = (OsmPrimitive)referrers;
+                OsmPrimitive ref = (OsmPrimitive) referrers;
                 if (ref.dataSet == dataSet) {
                     result.add(ref);
                 }
             } else {
-                for (OsmPrimitive o:(OsmPrimitive[])referrers) {
+                for (OsmPrimitive o:(OsmPrimitive[]) referrers) {
                     if (dataSet == o.dataSet) {
                         result.add(o);
                     }
@@ -1058,7 +1058,7 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
      *
      * @param visitor the visitor. Ignored, if null.
      */
-    public void visitReferrers(Visitor visitor){
+    public void visitReferrers(Visitor visitor) {
         if (visitor == null) return;
         if (this.referrers == null)
             return;
@@ -1088,10 +1088,10 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
         if (referrers == null) return false;
         checkDataset();
         if (referrers instanceof OsmPrimitive)
-            return n<=1 && referrers instanceof Way && ((OsmPrimitive)referrers).dataSet == dataSet;
+            return n <= 1 && referrers instanceof Way && ((OsmPrimitive) referrers).dataSet == dataSet;
         else {
-            int counter=0;
-            for (OsmPrimitive o : (OsmPrimitive[])referrers) {
+            int counter = 0;
+            for (OsmPrimitive o : (OsmPrimitive[]) referrers) {
                 if (dataSet == o.dataSet && o instanceof Way) {
                     if (++counter >= n)
                         return true;
@@ -1101,7 +1101,6 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
         }
     }
 
-
     /*-----------------
      * OTHER METHODS
      *----------------*/
@@ -1142,16 +1141,18 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
         try {
             CheckParameterUtil.ensureParameterNotNull(other, "other");
             if (other.isNew() ^ isNew())
-                throw new DataIntegrityProblemException(tr("Cannot merge because either of the participating primitives is new and the other is not"));
-            if (! other.isNew() && other.getId() != id)
-                throw new DataIntegrityProblemException(tr("Cannot merge primitives with different ids. This id is {0}, the other is {1}", id, other.getId()));
+                throw new DataIntegrityProblemException(
+                        tr("Cannot merge because either of the participating primitives is new and the other is not"));
+            if (!other.isNew() && other.getId() != id)
+                throw new DataIntegrityProblemException(
+                        tr("Cannot merge primitives with different ids. This id is {0}, the other is {1}", id, other.getId()));
 
             setKeys(other.getKeys());
             timestamp = other.timestamp;
             version = other.version;
             setIncomplete(other.isIncomplete());
             flags = other.flags;
-            user= other.user;
+            user = other.user;
             changesetId = other.changesetId;
         } finally {
             writeUnlock(locked);
@@ -1174,16 +1175,14 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
     }
 
     /**
-     * Replies true if this primitive and other are equal with respect to their
-     * semantic attributes.
+     * Replies true if this primitive and other are equal with respect to their semantic attributes.
      * <ol>
      *   <li>equal id</li>
      *   <li>both are complete or both are incomplete</li>
      *   <li>both have the same tags</li>
      * </ol>
-     * @param other
-     * @return true if this primitive and other are equal with respect to their
-     * semantic attributes.
+     * @param other other primitive to compare
+     * @return true if this primitive and other are equal with respect to their semantic attributes.
      */
     public boolean hasEqualSemanticAttributes(OsmPrimitive other) {
         if (!isNew() &&  id != other.id)
@@ -1196,8 +1195,8 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
     }
 
     /**
-     * Replies true if this primitive and other are equal with respect to their
-     * technical attributes. The attributes:
+     * Replies true if this primitive and other are equal with respect to their technical attributes.
+     * The attributes:
      * <ol>
      *   <li>deleted</li>
      *   <li>modified</li>
@@ -1208,19 +1207,17 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
      * </ol>
      * have to be equal
      * @param other the other primitive
-     * @return true if this primitive and other are equal with respect to their
-     * technical attributes
+     * @return true if this primitive and other are equal with respect to their technical attributes
      */
     public boolean hasEqualTechnicalAttributes(OsmPrimitive other) {
         if (other == null) return false;
 
-        return
-                isDeleted() == other.isDeleted()
+        return  isDeleted() == other.isDeleted()
                 && isModified() == other.isModified()
                 && timestamp == other.timestamp
                 && version == other.version
                 && isVisible() == other.isVisible()
-                && (user == null ? other.user==null : user==other.user)
+                && (user == null ? other.user == null : user == other.user)
                 && changesetId == other.changesetId;
     }
 
@@ -1231,7 +1228,7 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
     public void load(PrimitiveData data) {
         // Write lock is provided by subclasses
         setKeys(data.getKeys());
-        setTimestamp(data.getTimestamp());
+        setRawTimestamp(data.getRawTimestamp());
         user = data.getUser();
         setChangesetId(data.getChangesetId());
         setDeleted(data.isDeleted());
@@ -1253,7 +1250,7 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
     protected void saveCommonAttributes(PrimitiveData data) {
         data.setId(id);
         data.setKeys(getKeys());
-        data.setTimestamp(getTimestamp());
+        data.setRawTimestamp(getRawTimestamp());
         data.setUser(user);
         data.setDeleted(isDeleted());
         data.setModified(isModified());
@@ -1284,19 +1281,19 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
 
         if (isDisabled()) {
             if (isDisabledAndHidden()) {
-                builder.append("h");
+                builder.append('h');
             } else {
-                builder.append("d");
+                builder.append('d');
             }
         }
         if (isTagged()) {
-            builder.append("T");
+            builder.append('T');
         }
         if (hasDirectionKeys()) {
             if (reversedDirection()) {
-                builder.append("<");
+                builder.append('<');
             } else {
-                builder.append(">");
+                builder.append('>');
             }
         }
         return builder.toString();
@@ -1307,9 +1304,10 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
      *
      * An primitive is equal to its incomplete counter part.
      */
-    @Override public boolean equals(Object obj) {
+    @Override
+    public boolean equals(Object obj) {
         if (obj instanceof OsmPrimitive)
-            return ((OsmPrimitive)obj).id == id && obj.getClass() == getClass();
+            return ((OsmPrimitive) obj).id == id && obj.getClass() == getClass();
         return false;
     }
 
@@ -1318,8 +1316,9 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
      *
      * An primitive has the same hashcode as its incomplete counterpart.
      */
-    @Override public final int hashCode() {
-        return (int)id;
+    @Override
+    public final int hashCode() {
+        return (int) id;
     }
 
     /**
@@ -1342,7 +1341,7 @@ public abstract class OsmPrimitive extends AbstractPrimitive implements Comparab
     @Override
     public Object getTemplateValue(String name, boolean special) {
         if (special) {
-            String lc = name.toLowerCase();
+            String lc = name.toLowerCase(Locale.ENGLISH);
             if (SPECIAL_VALUE_ID.equals(lc))
                 return getId();
             else if (SPECIAL_VALUE_LOCAL_NAME.equals(lc))
diff --git a/src/org/openstreetmap/josm/data/osm/OsmPrimitiveType.java b/src/org/openstreetmap/josm/data/osm/OsmPrimitiveType.java
index 0953431..d1ce8d0 100644
--- a/src/org/openstreetmap/josm/data/osm/OsmPrimitiveType.java
+++ b/src/org/openstreetmap/josm/data/osm/OsmPrimitiveType.java
@@ -65,7 +65,7 @@ public enum OsmPrimitiveType {
 
     public static OsmPrimitiveType from(String value) {
         if (value == null) return null;
-        for (OsmPrimitiveType type: values()){
+        for (OsmPrimitiveType type: values()) {
             if (type.getAPIName().equalsIgnoreCase(value))
                 return type;
         }
diff --git a/src/org/openstreetmap/josm/data/osm/OsmUtils.java b/src/org/openstreetmap/josm/data/osm/OsmUtils.java
index c752a17..6c04ef7 100644
--- a/src/org/openstreetmap/josm/data/osm/OsmUtils.java
+++ b/src/org/openstreetmap/josm/data/osm/OsmUtils.java
@@ -1,11 +1,11 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.osm;
 
-import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.List;
+import java.util.HashSet;
 import java.util.Locale;
 import java.util.Map;
+import java.util.Set;
 
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
@@ -13,23 +13,23 @@ import org.openstreetmap.josm.tools.TextTagParser;
 
 public final class OsmUtils {
 
-    private OsmUtils() {
-        // Hide default constructor for utils classes
-    }
-
-    private static final List<String> TRUE_VALUES = new ArrayList<>(Arrays
-            .asList(new String[] { "true", "yes", "1", "on" }));
-    private static final List<String> FALSE_VALUES = new ArrayList<>(Arrays
-            .asList(new String[] { "false", "no", "0", "off" }));
-    private static final List<String> REVERSE_VALUES = new ArrayList<>(Arrays
-            .asList(new String[] { "reverse", "-1" }));
+    private static final Set<String> TRUE_VALUES = new HashSet<>(Arrays
+            .asList("true", "yes", "1", "on"));
+    private static final Set<String> FALSE_VALUES = new HashSet<>(Arrays
+            .asList("false", "no", "0", "off"));
+    private static final Set<String> REVERSE_VALUES = new HashSet<>(Arrays
+            .asList("reverse", "-1"));
 
     public static final String trueval = "yes";
     public static final String falseval = "no";
     public static final String reverseval = "-1";
 
+    private OsmUtils() {
+        // Hide default constructor for utils classes
+    }
+
     public static Boolean getOsmBoolean(String value) {
-        if(value == null) return null;
+        if (value == null) return null;
         String lowerValue = value.toLowerCase(Locale.ENGLISH);
         if (TRUE_VALUES.contains(lowerValue)) return Boolean.TRUE;
         if (FALSE_VALUES.contains(lowerValue)) return Boolean.FALSE;
diff --git a/src/org/openstreetmap/josm/data/osm/PrimitiveData.java b/src/org/openstreetmap/josm/data/osm/PrimitiveData.java
index b18d064..620da44 100644
--- a/src/org/openstreetmap/josm/data/osm/PrimitiveData.java
+++ b/src/org/openstreetmap/josm/data/osm/PrimitiveData.java
@@ -55,9 +55,9 @@ public abstract class PrimitiveData extends AbstractPrimitive {
     @SuppressWarnings("unchecked")
     public static <T extends PrimitiveData> List<T> getFilteredList(Collection<T> list, OsmPrimitiveType type) {
         List<T> ret = new ArrayList<>();
-        for(PrimitiveData p: list) {
+        for (PrimitiveData p: list) {
             if (type.getDataClass().isInstance(p)) {
-                ret.add((T)p);
+                ret.add((T) p);
             }
         }
         return ret;
diff --git a/src/org/openstreetmap/josm/data/osm/PrimitiveDeepCopy.java b/src/org/openstreetmap/josm/data/osm/PrimitiveDeepCopy.java
index 91f8f5c..7962678 100644
--- a/src/org/openstreetmap/josm/data/osm/PrimitiveDeepCopy.java
+++ b/src/org/openstreetmap/josm/data/osm/PrimitiveDeepCopy.java
@@ -63,6 +63,7 @@ public class PrimitiveDeepCopy {
                     return;
                 (firstIteration ? directlyAdded : referenced).add(n.save());
             }
+
             @Override
             public void visit(Way w) {
                 if (!visitedWayIds.add(w.getUniqueId()))
@@ -73,6 +74,7 @@ public class PrimitiveDeepCopy {
                     visit(n);
                 }
             }
+
             @Override
             public void visit(Relation r) {
                 if (!visitedRelationIds.add(r.getUniqueId()))
diff --git a/src/org/openstreetmap/josm/data/osm/PrimitiveId.java b/src/org/openstreetmap/josm/data/osm/PrimitiveId.java
index ab72f3c..d479f43 100644
--- a/src/org/openstreetmap/josm/data/osm/PrimitiveId.java
+++ b/src/org/openstreetmap/josm/data/osm/PrimitiveId.java
@@ -18,10 +18,10 @@ public interface PrimitiveId {
     /**
      * Gets the type of object represented by this object.
      *
+     * @return the object type
      * @see Node
      * @see Way
      * @see Relation
-     * @return the object type
      */
     OsmPrimitiveType getType();
 
diff --git a/src/org/openstreetmap/josm/data/osm/QuadBuckets.java b/src/org/openstreetmap/josm/data/osm/QuadBuckets.java
index e9c836e..fd1bbb5 100644
--- a/src/org/openstreetmap/josm/data/osm/QuadBuckets.java
+++ b/src/org/openstreetmap/josm/data/osm/QuadBuckets.java
@@ -170,18 +170,16 @@ public class QuadBuckets<T extends OsmPrimitive> implements Collection<T> {
         }
 
         boolean __add_content(T o) {
-            boolean ret = false;
             // The split_lock will keep two concurrent calls from overwriting content
             if (content == null) {
                 content = new ArrayList<>();
             }
-            ret = content.add(o);
-            return ret;
+            return content.add(o);
         }
 
         boolean matches(final T o, final BBox search_bbox) {
-            if (o instanceof Node){
-                final LatLon latLon = ((Node)o).getCoor();
+            if (o instanceof Node) {
+                final LatLon latLon = ((Node) o).getCoor();
                 // node without coords -> bbox[0,0,0,0]
                 return search_bbox.bounds(latLon != null ? latLon : LatLon.ZERO);
             }
@@ -228,9 +226,8 @@ public class QuadBuckets<T extends OsmPrimitive> implements Collection<T> {
         QBLevel<T> nextSibling() {
             QBLevel<T> next = this;
             QBLevel<T> sibling = next.next_sibling();
-            // Walk back up the tree to find the
-            // next sibling node.  It may be either
-            // a leaf or branch.
+            // Walk back up the tree to find the next sibling node.
+            // It may be either a leaf or branch.
             while (sibling == null) {
                 next = next.parent;
                 if (next == null) {
@@ -238,8 +235,7 @@ public class QuadBuckets<T extends OsmPrimitive> implements Collection<T> {
                 }
                 sibling = next.next_sibling();
             }
-            next = sibling;
-            return next;
+            return sibling;
         }
 
         QBLevel<T> firstChild() {
@@ -303,7 +299,7 @@ public class QuadBuckets<T extends OsmPrimitive> implements Collection<T> {
             if (!this.bbox().intersects(search_bbox))
                 return;
             else if (bbox().bounds(search_bbox)) {
-                buckets.search_cache = this;
+                buckets.searchCache = this;
             }
 
             if (this.hasContent()) {
@@ -392,7 +388,7 @@ public class QuadBuckets<T extends OsmPrimitive> implements Collection<T> {
     }
 
     private QBLevel<T> root;
-    private QBLevel<T> search_cache;
+    private QBLevel<T> searchCache;
     private int size;
 
     /**
@@ -405,7 +401,7 @@ public class QuadBuckets<T extends OsmPrimitive> implements Collection<T> {
     @Override
     public final void clear() {
         root = new QBLevel<>(this);
-        search_cache = null;
+        searchCache = null;
         size = 0;
     }
 
@@ -459,7 +455,7 @@ public class QuadBuckets<T extends OsmPrimitive> implements Collection<T> {
     public boolean remove(Object o) {
         @SuppressWarnings("unchecked")
         T t = (T) o;
-        search_cache = null; // Search cache might point to one of removed buckets
+        searchCache = null; // Search cache might point to one of removed buckets
         QBLevel<T> bucket = root.findBucket(t.getBBox());
         if (bucket.remove_content(t)) {
             size--;
@@ -495,9 +491,9 @@ public class QuadBuckets<T extends OsmPrimitive> implements Collection<T> {
     }
 
     class QuadBucketIterator implements Iterator<T> {
-        private QBLevel<T> current_node;
-        private int content_index;
-        private int iterated_over;
+        private QBLevel<T> currentNode;
+        private int contentIndex;
+        private int iteratedOver;
 
         final QBLevel<T> next_content_node(QBLevel<T> q) {
             if (q == null)
@@ -513,11 +509,11 @@ public class QuadBuckets<T extends OsmPrimitive> implements Collection<T> {
 
         public QuadBucketIterator(QuadBuckets<T> qb) {
             if (!qb.root.hasChildren() || qb.root.hasContent()) {
-                current_node = qb.root;
+                currentNode = qb.root;
             } else {
-                current_node = next_content_node(qb.root);
+                currentNode = next_content_node(qb.root);
             }
-            iterated_over = 0;
+            iteratedOver = 0;
         }
 
         @Override
@@ -528,25 +524,25 @@ public class QuadBuckets<T extends OsmPrimitive> implements Collection<T> {
         }
 
         T peek() {
-            if (current_node == null)
+            if (currentNode == null)
                 return null;
-            while ((current_node.content == null) || (content_index >= current_node.content.size())) {
-                content_index = 0;
-                current_node = next_content_node(current_node);
-                if (current_node == null) {
+            while ((currentNode.content == null) || (contentIndex >= currentNode.content.size())) {
+                contentIndex = 0;
+                currentNode = next_content_node(currentNode);
+                if (currentNode == null) {
                     break;
                 }
             }
-            if (current_node == null || current_node.content == null)
+            if (currentNode == null || currentNode.content == null)
                 return null;
-            return current_node.content.get(content_index);
+            return currentNode.content.get(contentIndex);
         }
 
         @Override
         public T next() {
             T ret = peek();
-            content_index++;
-            iterated_over++;
+            contentIndex++;
+            iteratedOver++;
             return ret;
         }
 
@@ -556,9 +552,9 @@ public class QuadBuckets<T extends OsmPrimitive> implements Collection<T> {
             // 1. Back up to the thing we just returned
             // 2. move the index back since we removed
             //    an element
-            content_index--;
+            contentIndex--;
             T object = peek();
-            current_node.remove_content(object);
+            currentNode.remove_content(object);
         }
     }
 
@@ -580,23 +576,23 @@ public class QuadBuckets<T extends OsmPrimitive> implements Collection<T> {
     public List<T> search(BBox search_bbox) {
         List<T> ret = new ArrayList<>();
         // Doing this cuts down search cost on a real-life data set by about 25%
-        if (search_cache == null) {
-            search_cache = root;
+        if (searchCache == null) {
+            searchCache = root;
         }
         // Walk back up the tree when the last search spot can not cover the current search
-        while (search_cache != null && !search_cache.bbox().bounds(search_bbox)) {
-            search_cache = search_cache.parent;
+        while (searchCache != null && !searchCache.bbox().bounds(search_bbox)) {
+            searchCache = searchCache.parent;
         }
 
-        if (search_cache == null) {
-            search_cache = root;
+        if (searchCache == null) {
+            searchCache = root;
             Main.info("bbox: " + search_bbox + " is out of the world");
         }
 
-        // Save parent because search_cache might change during search call
-        QBLevel<T> tmp = search_cache.parent;
+        // Save parent because searchCache might change during search call
+        QBLevel<T> tmp = searchCache.parent;
 
-        search_cache.search(search_bbox, ret);
+        searchCache.search(search_bbox, ret);
 
         // A way that spans this bucket may be stored in one
         // of the nodes which is a parent of the search cache
diff --git a/src/org/openstreetmap/josm/data/osm/Relation.java b/src/org/openstreetmap/josm/data/osm/Relation.java
index e7e5b01..0586e60 100644
--- a/src/org/openstreetmap/josm/data/osm/Relation.java
+++ b/src/org/openstreetmap/josm/data/osm/Relation.java
@@ -108,8 +108,8 @@ public final class Relation extends OsmPrimitive implements IRelation {
 
     /**
      * Replace member at position specified by index.
-     * @param index
-     * @param member
+     * @param index index (positive integer)
+     * @param member relation member to set
      * @return Member that was at the position
      */
     public RelationMember setMember(int index, RelationMember member) {
@@ -132,7 +132,7 @@ public final class Relation extends OsmPrimitive implements IRelation {
 
     /**
      * Removes member at specified position.
-     * @param index
+     * @param index index (positive integer)
      * @return Member that was at the position
      */
     public RelationMember removeMember(int index) {
@@ -186,7 +186,8 @@ public final class Relation extends OsmPrimitive implements IRelation {
     /**
      * Constructs an identical clone of the argument.
      * @param clone The relation to clone
-     * @param clearMetadata If {@code true}, clears the OSM id and other metadata as defined by {@link #clearOsmMetadata}. If {@code false}, does nothing
+     * @param clearMetadata If {@code true}, clears the OSM id and other metadata as defined by {@link #clearOsmMetadata}.
+     * If {@code false}, does nothing
      */
     public Relation(Relation clone, boolean clearMetadata) {
         super(clone.getUniqueId(), true);
@@ -217,8 +218,8 @@ public final class Relation extends OsmPrimitive implements IRelation {
 
     /**
      * Creates new relation
-     * @param id
-     * @param version
+     * @param id the id
+     * @param version version number (positive integer)
      */
     public Relation(long id, int version) {
         super(id, version, false);
@@ -230,7 +231,7 @@ public final class Relation extends OsmPrimitive implements IRelation {
         try {
             super.cloneFrom(osm);
             // It's not necessary to clone members as RelationMember class is immutable
-            setMembers(((Relation)osm).getMembers());
+            setMembers(((Relation) osm).getMembers());
         } finally {
             writeUnlock(locked);
         }
@@ -266,24 +267,24 @@ public final class Relation extends OsmPrimitive implements IRelation {
         return data;
     }
 
-    @Override public String toString() {
+    @Override
+    public String toString() {
         StringBuilder result = new StringBuilder();
-        result.append("{Relation id=");
-        result.append(getUniqueId());
-        result.append(" version=");
-        result.append(getVersion());
-        result.append(" ");
-        result.append(getFlagsAsString());
-        result.append(" [");
+        result.append("{Relation id=")
+              .append(getUniqueId())
+              .append(" version=")
+              .append(getVersion())
+              .append(' ')
+              .append(getFlagsAsString())
+              .append(" [");
         for (RelationMember rm:getMembers()) {
-            result.append(OsmPrimitiveType.from(rm.getMember()));
-            result.append(" ");
-            result.append(rm.getMember().getUniqueId());
-            result.append(", ");
+            result.append(OsmPrimitiveType.from(rm.getMember()))
+                  .append(' ')
+                  .append(rm.getMember().getUniqueId())
+                  .append(", ");
         }
-        result.delete(result.length()-2, result.length());
-        result.append("]");
-        result.append("}");
+        result.delete(result.length()-2, result.length())
+              .append("]}");
         return result.toString();
     }
 
@@ -291,28 +292,31 @@ public final class Relation extends OsmPrimitive implements IRelation {
     public boolean hasEqualSemanticAttributes(OsmPrimitive other) {
         if (!(other instanceof Relation))
             return false;
-        if (! super.hasEqualSemanticAttributes(other))
+        if (!super.hasEqualSemanticAttributes(other))
             return false;
-        Relation r = (Relation)other;
+        Relation r = (Relation) other;
         return Arrays.equals(members, r.members);
     }
 
     @Override
     public int compareTo(OsmPrimitive o) {
-        return o instanceof Relation ? Long.valueOf(getUniqueId()).compareTo(o.getUniqueId()) : -1;
+        return o instanceof Relation ? Long.compare(getUniqueId(), o.getUniqueId()) : -1;
     }
 
+    /**
+     * Returns the first member.
+     * @return first member, or {@code null}
+     */
     public RelationMember firstMember() {
-        if (isIncomplete()) return null;
-
-        RelationMember[] members = this.members;
-        return (members.length == 0) ? null : members[0];
+        return (isIncomplete() || members.length == 0) ? null : members[0];
     }
-    public RelationMember lastMember() {
-        if (isIncomplete()) return null;
 
-        RelationMember[] members = this.members;
-        return (members.length == 0) ? null : members[members.length - 1];
+    /**
+     * Returns the last member.
+     * @return last member, or {@code null}
+     */
+    public RelationMember lastMember() {
+        return (isIncomplete() || members.length == 0) ? null : members[members.length - 1];
     }
 
     /**
@@ -455,7 +459,7 @@ public final class Relation extends OsmPrimitive implements IRelation {
         else {
             BBox result = null;
             for (RelationMember rm:members) {
-                BBox box = rm.isRelation()?rm.getRelation().calculateBBox(visitedRelations):rm.getMember().getBBox();
+                BBox box = rm.isRelation() ? rm.getRelation().calculateBBox(visitedRelations) : rm.getMember().getBBox();
                 if (box != null) {
                     if (result == null) {
                         result = box;
@@ -486,7 +490,9 @@ public final class Relation extends OsmPrimitive implements IRelation {
             RelationMember[] members = this.members;
             for (RelationMember rm: members) {
                 if (rm.getMember().getDataSet() != dataSet)
-                    throw new DataIntegrityProblemException(String.format("Relation member must be part of the same dataset as relation(%s, %s)", getPrimitiveId(), rm.getMember().getPrimitiveId()));
+                    throw new DataIntegrityProblemException(
+                            String.format("Relation member must be part of the same dataset as relation(%s, %s)",
+                                    getPrimitiveId(), rm.getMember().getPrimitiveId()));
             }
             if (Main.pref.getBoolean("debug.checkDeleteReferenced", true)) {
                 for (RelationMember rm: members) {
diff --git a/src/org/openstreetmap/josm/data/osm/RelationData.java b/src/org/openstreetmap/josm/data/osm/RelationData.java
index 771b91a..1f8eec6 100644
--- a/src/org/openstreetmap/josm/data/osm/RelationData.java
+++ b/src/org/openstreetmap/josm/data/osm/RelationData.java
@@ -10,10 +10,17 @@ public class RelationData extends PrimitiveData implements IRelation {
 
     private List<RelationMemberData> members = new ArrayList<>();
 
+    /**
+     * Constructs a new {@code RelationData}.
+     */
     public RelationData() {
-
+        // contents can be set later with setters
     }
 
+    /**
+     * Constructs a new {@code RelationData}.
+     * @param data relation data to copy
+     */
     public RelationData(RelationData data) {
         super(data);
         members.addAll(data.members);
diff --git a/src/org/openstreetmap/josm/data/osm/RelationMember.java b/src/org/openstreetmap/josm/data/osm/RelationMember.java
index acb6f69..63995aa 100644
--- a/src/org/openstreetmap/josm/data/osm/RelationMember.java
+++ b/src/org/openstreetmap/josm/data/osm/RelationMember.java
@@ -93,7 +93,7 @@ public class RelationMember implements PrimitiveId {
      * @since 1937
      */
     public Relation getRelation() {
-        return (Relation)member;
+        return (Relation) member;
     }
 
     /**
@@ -102,7 +102,7 @@ public class RelationMember implements PrimitiveId {
      * @since 1937
      */
     public Way getWay() {
-        return (Way)member;
+        return (Way) member;
     }
 
     /**
@@ -111,7 +111,7 @@ public class RelationMember implements PrimitiveId {
      * @since 1937
      */
     public Node getNode() {
-        return (Node)member;
+        return (Node) member;
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/data/osm/RelationMemberData.java b/src/org/openstreetmap/josm/data/osm/RelationMemberData.java
index b7ceb84..1784776 100644
--- a/src/org/openstreetmap/josm/data/osm/RelationMemberData.java
+++ b/src/org/openstreetmap/josm/data/osm/RelationMemberData.java
@@ -8,7 +8,7 @@ public class RelationMemberData implements PrimitiveId {
     private final OsmPrimitiveType memberType;
 
     public RelationMemberData(String role, OsmPrimitiveType type, long id) {
-        this.role = role == null?"":role;
+        this.role = role == null ? "" : role;
         this.memberType = type;
         this.memberId = id;
     }
diff --git a/src/org/openstreetmap/josm/data/osm/RelationToChildReference.java b/src/org/openstreetmap/josm/data/osm/RelationToChildReference.java
index 3106171..d054b66 100644
--- a/src/org/openstreetmap/josm/data/osm/RelationToChildReference.java
+++ b/src/org/openstreetmap/josm/data/osm/RelationToChildReference.java
@@ -17,7 +17,7 @@ public class RelationToChildReference {
         Set<Relation> parents = OsmPrimitive.getFilteredSet(child.getReferrers(), Relation.class);
         Set<RelationToChildReference> references = new HashSet<>();
         for (Relation parent: parents) {
-            for (int i=0; i < parent.getMembersCount(); i++) {
+            for (int i = 0; i < parent.getMembersCount(); i++) {
                 if (parent.getMember(i).refersTo(child)) {
                     references.add(new RelationToChildReference(parent, i, parent.getMember(i)));
                 }
@@ -86,6 +86,7 @@ public class RelationToChildReference {
         result = prime * result + ((role == null) ? 0 : role.hashCode());
         return result;
     }
+
     @Override
     public boolean equals(Object obj) {
         if (this == obj)
diff --git a/src/org/openstreetmap/josm/data/osm/SimplePrimitiveId.java b/src/org/openstreetmap/josm/data/osm/SimplePrimitiveId.java
index 6bf4779..57051f1 100644
--- a/src/org/openstreetmap/josm/data/osm/SimplePrimitiveId.java
+++ b/src/org/openstreetmap/josm/data/osm/SimplePrimitiveId.java
@@ -4,6 +4,7 @@ package org.openstreetmap.josm.data.osm;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.regex.MatchResult;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -14,7 +15,9 @@ public class SimplePrimitiveId implements PrimitiveId, Serializable {
     private final long id;
     private final OsmPrimitiveType type;
 
-    public static final Pattern ID_PATTERN = Pattern.compile("((n(ode)?|w(ay)?|r(el(ation)?)?)[ /]?)(\\d+)");
+    public static final Pattern ID_PATTERN = Pattern.compile("(n|node|w|way|r|rel|relation)[ /]?(\\d+)");
+
+    public static final Pattern MULTIPLE_IDS_PATTERN = Pattern.compile(ID_PATTERN.pattern() + "(-(\\d+))?");
 
     public SimplePrimitiveId(long id, OsmPrimitiveType type) {
         this.id = id;
@@ -79,34 +82,64 @@ public class SimplePrimitiveId implements PrimitiveId, Serializable {
     public static SimplePrimitiveId fromString(String s) {
         final Matcher m = ID_PATTERN.matcher(s);
         if (m.matches()) {
-            return new SimplePrimitiveId(Long.parseLong(m.group(m.groupCount())),
-                    s.charAt(0) == 'n'
-                            ? OsmPrimitiveType.NODE
-                            : s.charAt(0) == 'w'
-                            ? OsmPrimitiveType.WAY
-                            : OsmPrimitiveType.RELATION);
+            return new SimplePrimitiveId(Long.parseLong(m.group(m.groupCount())), getOsmPrimitiveType(s.charAt(0)));
         } else {
             throw new IllegalArgumentException("The string " + s + " does not match the pattern " + ID_PATTERN);
         }
     }
 
     /**
+     * Parses a range {@code SimplePrimitiveId} from the string {@code s}.
+     * @param s the string to be parsed, e.g., {@code node1}, {@code node1-7}, {@code node70-7}.
+     * @return the parsed {@code SimplePrimitiveId}s
+     * @throws IllegalArgumentException if the string does not match the pattern
+     */
+    public static List<SimplePrimitiveId> multipleFromString(String s) {
+        final Matcher m = MULTIPLE_IDS_PATTERN.matcher(s);
+        if (m.matches()) {
+            return extractIdsInto(m, new ArrayList<SimplePrimitiveId>());
+        } else {
+            throw new IllegalArgumentException("The string " + s + " does not match the pattern " + MULTIPLE_IDS_PATTERN);
+        }
+    }
+
+    /**
      * Attempts to parse extract any primitive id from the string {@code s}.
-     * @param s the string to be parsed, e.g., {@code n1, w1}, {@code node1 and rel2}.
+     * @param s the string to be parsed, e.g., {@code "n1, w1"}, {@code "node1 and rel2"}, {@code "node 123-29"}.
      * @return the parsed list of {@code OsmPrimitiveType}s.
      */
     public static List<SimplePrimitiveId> fuzzyParse(String s) {
         final List<SimplePrimitiveId> ids = new ArrayList<>();
-        final Matcher m = ID_PATTERN.matcher(s);
+        final Matcher m = MULTIPLE_IDS_PATTERN.matcher(s);
         while (m.find()) {
-            final char firstChar = s.charAt(m.start());
-            ids.add(new SimplePrimitiveId(Long.parseLong(m.group(m.groupCount())),
-                    firstChar == 'n'
-                            ? OsmPrimitiveType.NODE
-                            : firstChar == 'w'
-                            ? OsmPrimitiveType.WAY
-                            : OsmPrimitiveType.RELATION));
+            extractIdsInto(m, ids);
+        }
+        return ids;
+    }
+
+    private static List<SimplePrimitiveId> extractIdsInto(MatchResult m, List<SimplePrimitiveId> ids) {
+        final OsmPrimitiveType type = getOsmPrimitiveType(m.group(1).charAt(0));
+        final String firstId = m.group(2);
+        final String lastId = m.group(4);
+        if (lastId != null) {
+            final long lastIdParsed;
+            if (lastId.length() < firstId.length()) {
+                // parse ranges such as 123-25 or 123-5
+                lastIdParsed = Long.parseLong(firstId.substring(0, firstId.length() - lastId.length()) + lastId);
+            } else {
+                // parse ranges such as 123-125 or 998-1001
+                lastIdParsed = Long.parseLong(lastId);
+            }
+            for (long i = Long.parseLong(firstId); i <= lastIdParsed; i++) {
+                ids.add(new SimplePrimitiveId(i, type));
+            }
+        } else {
+            ids.add(new SimplePrimitiveId(Long.parseLong(firstId), type));
         }
         return ids;
     }
+
+    private static OsmPrimitiveType getOsmPrimitiveType(char firstChar) {
+        return firstChar == 'n' ? OsmPrimitiveType.NODE : firstChar == 'w' ? OsmPrimitiveType.WAY : OsmPrimitiveType.RELATION;
+    }
 }
diff --git a/src/org/openstreetmap/josm/data/osm/Storage.java b/src/org/openstreetmap/josm/data/osm/Storage.java
index 5a5cb3b..2c42aa4 100644
--- a/src/org/openstreetmap/josm/data/osm/Storage.java
+++ b/src/org/openstreetmap/josm/data/osm/Storage.java
@@ -74,7 +74,7 @@ public class Storage<T> extends AbstractSet<T> {
 
         @Override
         public int getHashCode(PrimitiveId k) {
-            return (int)k.getUniqueId() ^ k.getType().hashCode();
+            return (int) k.getUniqueId() ^ k.getType().hashCode();
         }
 
         @Override
@@ -84,12 +84,12 @@ public class Storage<T> extends AbstractSet<T> {
         }
     }
 
-    private final Hash<? super T,? super T> hash;
+    private final Hash<? super T, ? super T> hash;
     private T[] data;
     private int mask;
     private int size;
     private volatile int modCount = 0;
-    private float loadFactor = 0.6f;
+    private double loadFactor = 0.6d;
     private static final int DEFAULT_CAPACITY = 16;
     private final boolean safeIterator;
     private boolean arrayCopyNecessary;
@@ -108,7 +108,7 @@ public class Storage<T> extends AbstractSet<T> {
         this(Storage.<T>defaultHash(), capacity, false);
     }
 
-    public Storage(Hash<? super T,? super T> ha) {
+    public Storage(Hash<? super T, ? super T> ha) {
         this(ha, DEFAULT_CAPACITY, false);
     }
 
@@ -120,7 +120,7 @@ public class Storage<T> extends AbstractSet<T> {
         this(Storage.<T>defaultHash(), capacity, safeIterator);
     }
 
-    public Storage(Hash<? super T,? super T> ha, boolean safeIterator) {
+    public Storage(Hash<? super T, ? super T> ha, boolean safeIterator) {
         this(ha, DEFAULT_CAPACITY, safeIterator);
     }
 
@@ -129,8 +129,8 @@ public class Storage<T> extends AbstractSet<T> {
     }
     /**
      * constructor
-     * @param ha
-     * @param capacity
+     * @param ha hash
+     * @param capacity capacity
      * @param safeIterator If set to false, you must not modify the Storage
      *          while iterating over it. If set to true, you can safely
      *          modify, but the read-only iteration will happen on a copy
@@ -139,7 +139,7 @@ public class Storage<T> extends AbstractSet<T> {
      */
     public Storage(Hash<? super T, ? super T> ha, int capacity, boolean safeIterator) {
         this.hash = ha;
-        int cap = 1 << (int)(Math.ceil(Math.log(capacity/loadFactor) / Math.log(2)));
+        int cap = 1 << (int) (Math.ceil(Math.log(capacity/loadFactor) / Math.log(2)));
         @SuppressWarnings("unchecked") T[] newData = (T[]) new Object[cap];
         data = newData;
         mask = data.length - 1;
@@ -194,7 +194,7 @@ public class Storage<T> extends AbstractSet<T> {
         copyArray();
         modCount++;
         size = 0;
-        for (int i = 0; i<data.length; i++) {
+        for (int i = 0; i < data.length; i++) {
             data[i] = null;
         }
     }
@@ -256,7 +256,7 @@ public class Storage<T> extends AbstractSet<T> {
         return bucket < 0 ? null : doRemove(bucket);
     }
 
-    public <K> Map<K,T> foreignKey(Hash<K,? super T> h) {
+    public <K> Map<K, T> foreignKey(Hash<K, ? super T> h) {
         return new FMap<>(h);
     }
 
@@ -277,7 +277,7 @@ public class Storage<T> extends AbstractSet<T> {
      * @return the bucket equivalent to the key or -(bucket) as an empty slot
      * where such an entry can be stored.
      */
-    private <K> int getBucket(Hash<K,? super T> ha, K key) {
+    private <K> int getBucket(Hash<K, ? super T> ha, K key) {
         T entry;
         int hcode = rehash(ha.getHashCode(key));
         int bucket = hcode & mask;
@@ -308,7 +308,7 @@ public class Storage<T> extends AbstractSet<T> {
             // we can't move it. The move can be proved safe otherwise,
             // because the entry safely belongs to <previous_null+1,hole>
             if ((bucket < right && (right <= hole || hole <= bucket)) ||
-                    (right <=hole && hole <= bucket)) {
+                    (right <= hole && hole <= bucket)) {
 
                 data[hole] = data[bucket];
                 hole = bucket;
@@ -347,12 +347,13 @@ public class Storage<T> extends AbstractSet<T> {
      * @return a hash implementation that just delegates to object's own
      * hashCode and equals.
      */
-    public static <O> Hash<O,O> defaultHash() {
-        return new Hash<O,O>() {
+    public static <O> Hash<O, O> defaultHash() {
+        return new Hash<O, O>() {
             @Override
             public int getHashCode(O t) {
                 return t.hashCode();
             }
+
             @Override
             public boolean equals(O t1, O t2) {
                 return t1.equals(t2);
@@ -372,10 +373,10 @@ public class Storage<T> extends AbstractSet<T> {
     }
      */
 
-    private final class FMap<K> implements Map<K,T> {
-        private Hash<K,? super T> fHash;
+    private final class FMap<K> implements Map<K, T> {
+        private Hash<K, ? super T> fHash;
 
-        private FMap(Hash<K,? super T> h) {
+        private FMap(Hash<K, ? super T> h) {
             fHash = h;
         }
 
@@ -487,7 +488,6 @@ public class Storage<T> extends AbstractSet<T> {
         }
     }
 
-
     private final class Iter implements Iterator<T> {
         private final int mods;
         private int slot = 0;
diff --git a/src/org/openstreetmap/josm/data/osm/Tag.java b/src/org/openstreetmap/josm/data/osm/Tag.java
index 639cc7c..369766c 100644
--- a/src/org/openstreetmap/josm/data/osm/Tag.java
+++ b/src/org/openstreetmap/josm/data/osm/Tag.java
@@ -101,9 +101,9 @@ public class Tag {
 
     /**
      * This constructs a {@link Tag} by splitting {@code s} on the first equality sign.
-     * @see org.openstreetmap.josm.tools.TextTagParser
      * @param s the string to convert
      * @return the constructed tag
+     * @see org.openstreetmap.josm.tools.TextTagParser
      */
     public static Tag ofString(String s) {
         CheckParameterUtil.ensureParameterNotNull(s, "s");
diff --git a/src/org/openstreetmap/josm/data/osm/TagCollection.java b/src/org/openstreetmap/josm/data/osm/TagCollection.java
index 7976178..255c069 100644
--- a/src/org/openstreetmap/josm/data/osm/TagCollection.java
+++ b/src/org/openstreetmap/josm/data/osm/TagCollection.java
@@ -26,19 +26,23 @@ import org.openstreetmap.josm.tools.Utils;
  *
  * A TagCollection can be created:
  * <ul>
- *  <li>from the tags managed by a specific {@link org.openstreetmap.josm.data.osm.OsmPrimitive} with {@link #from(org.openstreetmap.josm.data.osm.Tagged)}</li>
- *  <li>from the union of all tags managed by a collection of {@link org.openstreetmap.josm.data.osm.OsmPrimitive}s with {@link #unionOfAllPrimitives(java.util.Collection)}</li>
- *  <li>from the union of all tags managed by a {@link org.openstreetmap.josm.data.osm.DataSet} with {@link #unionOfAllPrimitives(org.openstreetmap.josm.data.osm.DataSet)}</li>
- *  <li>from the intersection of all tags managed by a collection of primitives with {@link #commonToAllPrimitives(java.util.Collection)}</li>
+ *  <li>from the tags managed by a specific {@link org.openstreetmap.josm.data.osm.OsmPrimitive}
+ *  with {@link #from(org.openstreetmap.josm.data.osm.Tagged)}</li>
+ *  <li>from the union of all tags managed by a collection of {@link org.openstreetmap.josm.data.osm.OsmPrimitive}s
+ *  with {@link #unionOfAllPrimitives(java.util.Collection)}</li>
+ *  <li>from the union of all tags managed by a {@link org.openstreetmap.josm.data.osm.DataSet}
+ *  with {@link #unionOfAllPrimitives(org.openstreetmap.josm.data.osm.DataSet)}</li>
+ *  <li>from the intersection of all tags managed by a collection of primitives
+ *  with {@link #commonToAllPrimitives(java.util.Collection)}</li>
  * </ul>
  *
  * It  provides methods to query the collection, like {@link #size()}, {@link #hasTagsFor(String)}, etc.
  *
  * Basic set operations allow to create the union, the intersection and  the difference
- * of tag collections, see {@link #union(org.openstreetmap.josm.data.osm.TagCollection)}, {@link #intersect(org.openstreetmap.josm.data.osm.TagCollection)},
- * and {@link #minus(org.openstreetmap.josm.data.osm.TagCollection)}.
- *
+ * of tag collections, see {@link #union(org.openstreetmap.josm.data.osm.TagCollection)},
+ * {@link #intersect(org.openstreetmap.josm.data.osm.TagCollection)}, and {@link #minus(org.openstreetmap.josm.data.osm.TagCollection)}.
  *
+ * @since 2008
  */
 public class TagCollection implements Iterable<Tag> {
 
@@ -68,13 +72,13 @@ public class TagCollection implements Iterable<Tag> {
      * @param tags  the key/value-pairs
      * @return the tag collection
      */
-    public static TagCollection from(Map<String,String> tags) {
+    public static TagCollection from(Map<String, String> tags) {
         TagCollection ret = new TagCollection();
         if (tags == null) return ret;
-        for (Entry<String,String> entry: tags.entrySet()) {
-            String key = entry.getKey() == null? "" : entry.getKey();
+        for (Entry<String, String> entry: tags.entrySet()) {
+            String key = entry.getKey() == null ? "" : entry.getKey();
             String value = entry.getValue() == null ? "" : entry.getValue();
-            ret.add(new Tag(key,value));
+            ret.add(new Tag(key, value));
         }
         return ret;
     }
@@ -144,9 +148,10 @@ public class TagCollection implements Iterable<Tag> {
     private final Set<Tag> tags = new HashSet<>();
 
     /**
-     * Creates an empty tag collection
+     * Creates an empty tag collection.
      */
     public TagCollection() {
+        // contents can be set later with add()
     }
 
     /**
@@ -193,7 +198,7 @@ public class TagCollection implements Iterable<Tag> {
      *
      * @param tag the tag to add
      */
-    public final void add(Tag tag){
+    public final void add(Tag tag) {
         if (tag == null) return;
         if (tags.contains(tag)) return;
         tags.add(tag);
@@ -207,7 +212,7 @@ public class TagCollection implements Iterable<Tag> {
      */
     public final void add(Collection<Tag> tags) {
         if (tags == null) return;
-        for (Tag tag: tags){
+        for (Tag tag: tags) {
             add(tag);
         }
     }
@@ -263,9 +268,9 @@ public class TagCollection implements Iterable<Tag> {
      * @param key the key to be removed
      */
     public void removeByKey(String key) {
-        if (key  == null) return;
+        if (key == null) return;
         Iterator<Tag> it = tags.iterator();
-        while(it.hasNext()) {
+        while (it.hasNext()) {
             if (it.next().matchesKey(key)) {
                 it.remove();
             }
@@ -335,7 +340,7 @@ public class TagCollection implements Iterable<Tag> {
             if (key == null) {
                 continue;
             }
-            if (! containsKey(key)) return false;
+            if (!containsKey(key)) return false;
         }
         return true;
     }
@@ -393,7 +398,7 @@ public class TagCollection implements Iterable<Tag> {
     public boolean hasUniqueNonEmptyValue(String key) {
         if (key == null) return false;
         Set<String> values = getTagsFor(key).getValues();
-        return values.size() == 1 && ! values.contains("");
+        return values.size() == 1 && !values.contains("");
     }
 
     /**
@@ -455,7 +460,7 @@ public class TagCollection implements Iterable<Tag> {
         TagCollection ret = new TagCollection();
         if (keys == null)
             return ret;
-        for(String key : keys) {
+        for (String key : keys) {
             if (key != null) {
                 ret.add(getTagsFor(key));
             }
@@ -514,7 +519,7 @@ public class TagCollection implements Iterable<Tag> {
         Map<String, Integer> counters = new HashMap<>();
         for (Tag tag: tags) {
             Integer v = counters.get(tag.getKey());
-            counters.put(tag.getKey(),(v==null) ? 1 : v+1);
+            counters.put(tag.getKey(), (v == null) ? 1 : v+1);
         }
         Set<String> ret = new HashSet<>();
         for (Entry<String, Integer> e : counters.entrySet()) {
@@ -601,7 +606,7 @@ public class TagCollection implements Iterable<Tag> {
      */
     public void applyTo(Tagged primitive) {
         if (primitive == null) return;
-        if (! isApplicableToPrimitive())
+        if (!isApplicableToPrimitive())
             throw new IllegalStateException(tr("Tag collection cannot be applied to a primitive because there are keys with multiple values."));
         for (Tag tag: tags) {
             if (tag.getValue() == null || tag.getValue().isEmpty()) {
@@ -622,7 +627,7 @@ public class TagCollection implements Iterable<Tag> {
      */
     public void applyTo(Collection<? extends Tagged> primitives) {
         if (primitives == null) return;
-        if (! isApplicableToPrimitive())
+        if (!isApplicableToPrimitive())
             throw new IllegalStateException(tr("Tag collection cannot be applied to a primitive because there are keys with multiple values."));
         for (Tagged primitive: primitives) {
             applyTo(primitive);
@@ -639,7 +644,7 @@ public class TagCollection implements Iterable<Tag> {
      */
     public void replaceTagsOf(Tagged primitive) {
         if (primitive == null) return;
-        if (! isApplicableToPrimitive())
+        if (!isApplicableToPrimitive())
             throw new IllegalStateException(tr("Tag collection cannot be applied to a primitive because there are keys with multiple values."));
         primitive.removeAll();
         for (Tag tag: tags) {
@@ -657,7 +662,7 @@ public class TagCollection implements Iterable<Tag> {
      */
     public void replaceTagsOf(Collection<? extends Tagged> primitives) {
         if (primitives == null) return;
-        if (! isApplicableToPrimitive())
+        if (!isApplicableToPrimitive())
             throw new IllegalStateException(tr("Tag collection cannot be applied to a primitive because there are keys with multiple values."));
         for (Tagged primitive: primitives) {
             replaceTagsOf(primitive);
@@ -712,7 +717,7 @@ public class TagCollection implements Iterable<Tag> {
 
     public TagCollection emptyTagsForKeysMissingIn(TagCollection other) {
         TagCollection ret = new TagCollection();
-        for(String key: this.minus(other).getKeys()) {
+        for (String key: this.minus(other).getKeys()) {
             ret.add(new Tag(key));
         }
         return ret;
@@ -772,7 +777,6 @@ public class TagCollection implements Iterable<Tag> {
         return Integer.toString(result);
     }
 
-
     @Override
     public String toString() {
         return tags.toString();
diff --git a/src/org/openstreetmap/josm/data/osm/Tagged.java b/src/org/openstreetmap/josm/data/osm/Tagged.java
index 9b42edf..fb9cf44 100644
--- a/src/org/openstreetmap/josm/data/osm/Tagged.java
+++ b/src/org/openstreetmap/josm/data/osm/Tagged.java
@@ -16,14 +16,14 @@ public interface Tagged {
      *
      * @param keys the map of key value pairs. If null, reset to the empty map.
      */
-    void setKeys(Map<String,String> keys);
+    void setKeys(Map<String, String> keys);
 
     /**
      * Replies the map of key/value pairs. Never null, but may be the empty map.
      *
      * @return the map of key/value pairs
      */
-    Map<String,String> getKeys();
+    Map<String, String> getKeys();
 
     /**
      * Sets a key/value pairs
diff --git a/src/org/openstreetmap/josm/data/osm/TigerUtils.java b/src/org/openstreetmap/josm/data/osm/TigerUtils.java
index 8722257..56a3b4c 100644
--- a/src/org/openstreetmap/josm/data/osm/TigerUtils.java
+++ b/src/org/openstreetmap/josm/data/osm/TigerUtils.java
@@ -59,7 +59,7 @@ public final class TigerUtils {
         StringBuilder combined = new StringBuilder();
         for (Object part : resultSet) {
             if (combined.length() > 0) {
-                combined.append(":");
+                combined.append(':');
             }
             combined.append(part);
         }
diff --git a/src/org/openstreetmap/josm/data/osm/User.java b/src/org/openstreetmap/josm/data/osm/User.java
index 7a373d1..ce25fd5 100644
--- a/src/org/openstreetmap/josm/data/osm/User.java
+++ b/src/org/openstreetmap/josm/data/osm/User.java
@@ -19,7 +19,7 @@ import org.openstreetmap.josm.tools.Utils;
  * a reference to an user object, and make sure that for each username there
  * is only one user object.
  *
- *
+ * @since 227
  */
 public final class User {
 
@@ -28,7 +28,7 @@ public final class User {
     /**
      * the map of known users
      */
-    private static Map<Long,User> userMap = new HashMap<>();
+    private static Map<Long, User> userMap = new HashMap<>();
 
     /**
      * The anonymous user is a local user used in places where no user is known.
@@ -48,10 +48,9 @@ public final class User {
      * @return a new local user with the given name
      */
     public static synchronized User createLocalUser(String name) {
-        for(long i = -1; i >= uidCounter; --i)
-        {
+        for (long i = -1; i >= uidCounter; --i) {
             User olduser = getById(i);
-            if(olduser != null && olduser.hasName(name))
+            if (olduser != null && olduser.hasName(name))
                 return olduser;
         }
         User user = new User(getNextLocalUid(), name);
@@ -59,6 +58,8 @@ public final class User {
         return user;
     }
 
+    private static User lastUser = null;
+
     /**
      * Creates a user known to the OSM server
      *
@@ -67,12 +68,21 @@ public final class User {
      * @return a new OSM user with the given name and uid
      */
     public static synchronized User createOsmUser(long uid, String name) {
-        User user = userMap.get(uid);
+
+        if (lastUser != null && lastUser.getId() == uid) {
+            return lastUser;
+        }
+
+        Long ouid = uid;
+        User user = userMap.get(ouid);
         if (user == null) {
             user = new User(uid, name);
-            userMap.put(user.getId(), user);
+            userMap.put(ouid, user);
         }
         if (name != null) user.addName(name);
+
+        lastUser = user;
+
         return user;
     }
 
@@ -148,7 +158,7 @@ public final class User {
     /**
      * Adds a user name to the list if it is not there, yet.
      *
-     * @param name
+     * @param name User name
      */
     public void addName(String name) {
         names.add(name);
@@ -157,7 +167,7 @@ public final class User {
     /**
      * Returns true if the name is in the names list
      *
-     * @param name
+     * @param name User name
      * @return <code>true</code> if the name is in the names list
      */
     public boolean hasName(String name) {
@@ -213,7 +223,7 @@ public final class User {
 
     @Override
     public boolean equals(Object obj) {
-        if (! (obj instanceof User))
+        if (!(obj instanceof User))
             return false;
         User other = (User) obj;
         if (uid != other.uid)
@@ -227,8 +237,7 @@ public final class User {
         s.append("id:").append(uid);
         if (names.size() == 1) {
             s.append(" name:").append(getName());
-        }
-        else if (names.size() > 1) {
+        } else if (names.size() > 1) {
             s.append(String.format(" %d names:%s", names.size(), getName()));
         }
         return s.toString();
diff --git a/src/org/openstreetmap/josm/data/osm/UserInfo.java b/src/org/openstreetmap/josm/data/osm/UserInfo.java
index 6c38215..7505691 100644
--- a/src/org/openstreetmap/josm/data/osm/UserInfo.java
+++ b/src/org/openstreetmap/josm/data/osm/UserInfo.java
@@ -34,36 +34,47 @@ public class UserInfo {
     public int getId() {
         return id;
     }
+
     public void setId(int id) {
         this.id = id;
     }
+
     public String getDisplayName() {
         return displayName;
     }
+
     public void setDisplayName(String displayName) {
         this.displayName = displayName;
     }
+
     public Date getAccountCreated() {
         return accountCreated;
     }
+
     public void setAccountCreated(Date accountCreated) {
         this.accountCreated = accountCreated;
     }
+
     public LatLon getHome() {
         return home;
     }
+
     public void setHome(LatLon home) {
         this.home = home;
     }
+
     public String getDescription() {
         return description;
     }
+
     public void setDescription(String description) {
         this.description = description;
     }
+
     public List<String> getLanguages() {
         return languages;
     }
+
     public void setLanguages(List<String> languages) {
         this.languages = languages;
     }
diff --git a/src/org/openstreetmap/josm/data/osm/Way.java b/src/org/openstreetmap/josm/data/osm/Way.java
index 41c2c2c..7ad07b4 100644
--- a/src/org/openstreetmap/josm/data/osm/Way.java
+++ b/src/org/openstreetmap/josm/data/osm/Way.java
@@ -83,9 +83,9 @@ public final class Way extends OsmPrimitive implements IWay {
     private List<Node> removeDouble(List<Node> nodes) {
         Node last = null;
         int count = nodes.size();
-        for(int i = 0; i < count && count > 2;) {
+        for (int i = 0; i < count && count > 2;) {
             Node n = nodes.get(i);
-            if(last == n) {
+            if (last == n) {
                 nodes.remove(i);
                 --count;
             } else {
@@ -111,10 +111,10 @@ public final class Way extends OsmPrimitive implements IWay {
      * Replies the real number of nodes in this way (full number of nodes minus one if this way is closed)
      *
      * @return the real number of nodes in this way.
-     * @since 5847
      *
      * @see #getNodesCount()
      * @see #isClosed()
+     * @since 5847
      */
     public int getRealNodesCount() {
         int count = getNodesCount();
@@ -172,7 +172,7 @@ public final class Way extends OsmPrimitive implements IWay {
         if (node == null) return neigh;
 
         Node[] nodes = this.nodes;
-        for (int i=0; i<nodes.length; i++) {
+        for (int i = 0; i < nodes.length; i++) {
             if (nodes[i].equals(node)) {
                 if (i > 0)
                     neigh.add(nodes[i-1]);
@@ -186,12 +186,13 @@ public final class Way extends OsmPrimitive implements IWay {
     /**
      * Replies the ordered {@link List} of chunks of this way. Each chunk is replied as a {@link Pair} of {@link Node nodes}.
      * @param sort If true, the nodes of each pair are sorted as defined by {@link Pair#sort}.
-     *             If false, Pair.a and Pair.b are in the way order (i.e for a given Pair(n), Pair(n-1).b == Pair(n).a, Pair(n).b == Pair(n+1).a, etc.)
+     *             If false, Pair.a and Pair.b are in the way order
+     *             (i.e for a given Pair(n), Pair(n-1).b == Pair(n).a, Pair(n).b == Pair(n+1).a, etc.)
      * @return The ordered list of chunks of this way.
      * @since 3348
      */
-    public List<Pair<Node,Node>> getNodePairs(boolean sort) {
-        List<Pair<Node,Node>> chunkSet = new ArrayList<>();
+    public List<Pair<Node, Node>> getNodePairs(boolean sort) {
+        List<Pair<Node, Node>> chunkSet = new ArrayList<>();
         if (isIncomplete()) return chunkSet;
         Node lastN = null;
         Node[] nodes = this.nodes;
@@ -200,7 +201,7 @@ public final class Way extends OsmPrimitive implements IWay {
                 lastN = n;
                 continue;
             }
-            Pair<Node,Node> np = new Pair<>(lastN, n);
+            Pair<Node, Node> np = new Pair<>(lastN, n);
             if (sort) {
                 Pair.sort(np);
             }
@@ -233,7 +234,8 @@ public final class Way extends OsmPrimitive implements IWay {
     /**
      * Contructs a new {@code Way} from an existing {@code Way}.
      * @param original The original {@code Way} to be identically cloned. Must not be null
-     * @param clearMetadata If {@code true}, clears the OSM id and other metadata as defined by {@link #clearOsmMetadata}. If {@code false}, does nothing
+     * @param clearMetadata If {@code true}, clears the OSM id and other metadata as defined by {@link #clearOsmMetadata}.
+     * If {@code false}, does nothing
      * @since 2410
      */
     public Way(Way original, boolean clearMetadata) {
@@ -290,7 +292,7 @@ public final class Way extends OsmPrimitive implements IWay {
 
             List<Node> newNodes = new ArrayList<>(wayData.getNodes().size());
             for (Long nodeId : wayData.getNodes()) {
-                Node node = (Node)getDataSet().getPrimitiveById(nodeId, OsmPrimitiveType.NODE);
+                Node node = (Node) getDataSet().getPrimitiveById(nodeId, OsmPrimitiveType.NODE);
                 if (node != null) {
                     newNodes.add(node);
                 } else {
@@ -318,7 +320,7 @@ public final class Way extends OsmPrimitive implements IWay {
         boolean locked = writeLock();
         try {
             super.cloneFrom(osm);
-            Way otherWay = (Way)osm;
+            Way otherWay = (Way) osm;
             setNodes(otherWay.getNodes());
         } finally {
             writeUnlock(locked);
@@ -327,7 +329,7 @@ public final class Way extends OsmPrimitive implements IWay {
 
     @Override
     public String toString() {
-        String nodesDesc = isIncomplete()?"(incomplete)":"nodes=" + Arrays.toString(nodes);
+        String nodesDesc = isIncomplete() ? "(incomplete)" : "nodes=" + Arrays.toString(nodes);
         return "{Way id=" + getUniqueId() + " version=" + getVersion()+ " " + getFlagsAsString()  + " " + nodesDesc + "}";
     }
 
@@ -335,12 +337,12 @@ public final class Way extends OsmPrimitive implements IWay {
     public boolean hasEqualSemanticAttributes(OsmPrimitive other) {
         if (!(other instanceof Way))
             return false;
-        if (! super.hasEqualSemanticAttributes(other))
+        if (!super.hasEqualSemanticAttributes(other))
             return false;
-        Way w = (Way)other;
+        Way w = (Way) other;
         if (getNodesCount() != w.getNodesCount()) return false;
-        for (int i=0;i<getNodesCount();i++) {
-            if (! getNode(i).hasEqualSemanticAttributes(w.getNode(i)))
+        for (int i = 0; i < getNodesCount(); i++) {
+            if (!getNode(i).hasEqualSemanticAttributes(w.getNode(i)))
                 return false;
         }
         return true;
@@ -350,7 +352,7 @@ public final class Way extends OsmPrimitive implements IWay {
     public int compareTo(OsmPrimitive o) {
         if (o instanceof Relation)
             return 1;
-        return o instanceof Way ? Long.valueOf(getUniqueId()).compareTo(o.getUniqueId()) : -1;
+        return o instanceof Way ? Long.compare(getUniqueId(), o.getUniqueId()) : -1;
     }
 
     /**
@@ -362,7 +364,7 @@ public final class Way extends OsmPrimitive implements IWay {
         if (n == null || isIncomplete()) return;
         boolean locked = writeLock();
         try {
-            boolean closed = (lastNode() == n && firstNode() == n);
+            boolean closed = lastNode() == n && firstNode() == n;
             int i;
             List<Node> copy = getNodes();
             while ((i = copy.indexOf(n)) >= 0) {
@@ -390,7 +392,7 @@ public final class Way extends OsmPrimitive implements IWay {
         if (selection == null || isIncomplete()) return;
         boolean locked = writeLock();
         try {
-            boolean closed = (lastNode() == firstNode() && selection.contains(lastNode()));
+            boolean closed = isClosed() && selection.contains(lastNode());
             List<Node> copy = new ArrayList<>();
 
             for (Node n: nodes) {
@@ -423,7 +425,7 @@ public final class Way extends OsmPrimitive implements IWay {
      * @since 1313
      */
     public void addNode(Node n) {
-        if (n==null) return;
+        if (n == null) return;
 
         boolean locked = writeLock();
         try {
@@ -450,7 +452,7 @@ public final class Way extends OsmPrimitive implements IWay {
      * @since 1313
      */
     public void addNode(int offs, Node n) throws IndexOutOfBoundsException {
-        if (n==null) return;
+        if (n == null) return;
 
         boolean locked = writeLock();
         try {
@@ -507,7 +509,7 @@ public final class Way extends OsmPrimitive implements IWay {
     public boolean isArea() {
         if (this.nodes.length >= 4 && isClosed()) {
             Node distinctNode = null;
-            for (int i=1; i<nodes.length-1; i++) {
+            for (int i = 1; i < nodes.length-1; i++) {
                 if (distinctNode == null && nodes[i] != nodes[0]) {
                     distinctNode = nodes[i];
                 } else if (distinctNode != null && nodes[i] != nodes[0] && nodes[i] != distinctNode) {
@@ -596,7 +598,8 @@ public final class Way extends OsmPrimitive implements IWay {
                             tr("Nodes in way must be in the same dataset"));
                 if (n.isDeleted())
                     throw new DataIntegrityProblemException("Deleted node referenced: " + toString(),
-                            "<html>" + tr("Deleted node referenced by {0}", DefaultNameFormatter.getInstance().formatAsHtmlUnorderedList(this)) + "</html>");
+                            "<html>" + tr("Deleted node referenced by {0}",
+                                    DefaultNameFormatter.getInstance().formatAsHtmlUnorderedList(this)) + "</html>");
             }
             if (Main.pref.getBoolean("debug.checkNullCoor", true)) {
                 for (Node n: nodes) {
@@ -770,7 +773,7 @@ public final class Way extends OsmPrimitive implements IWay {
         clearCachedNodeStyles();
     }
 
-    public final void clearCachedNodeStyles() {
+    public void clearCachedNodeStyles() {
         for (final Node n : nodes) {
             n.clearCachedStyle();
         }
diff --git a/src/org/openstreetmap/josm/data/osm/WayData.java b/src/org/openstreetmap/josm/data/osm/WayData.java
index 65c55f5..eecd1d4 100644
--- a/src/org/openstreetmap/josm/data/osm/WayData.java
+++ b/src/org/openstreetmap/josm/data/osm/WayData.java
@@ -10,10 +10,17 @@ public class WayData extends PrimitiveData implements IWay {
 
     private List<Long> nodes = new ArrayList<>();
 
+    /**
+     * Constructs a new {@code NodeData}.
+     */
     public WayData() {
-
+        // contents can be set later with setters
     }
 
+    /**
+     * Constructs a new {@code WayData}.
+     * @param data way data to copy
+     */
     public WayData(WayData data) {
         super(data);
         nodes.addAll(data.getNodes());
@@ -50,7 +57,7 @@ public class WayData extends PrimitiveData implements IWay {
 
     @Override
     public String toString() {
-        return super.toString() + " WAY" + nodes.toString();
+        return super.toString() + " WAY" + nodes;
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/data/osm/WaySegment.java b/src/org/openstreetmap/josm/data/osm/WaySegment.java
index 4ce603e..fea5779 100644
--- a/src/org/openstreetmap/josm/data/osm/WaySegment.java
+++ b/src/org/openstreetmap/josm/data/osm/WaySegment.java
@@ -41,7 +41,7 @@ public final class WaySegment implements Comparable<WaySegment> {
      * Returns the second (last) node of the way segment.
      * @return the second node
      */
-    public Node getSecondNode(){
+    public Node getSecondNode() {
         return way.getNode(lowerIndex + 1);
     }
 
diff --git a/src/org/openstreetmap/josm/data/osm/event/DataSetListener.java b/src/org/openstreetmap/josm/data/osm/event/DataSetListener.java
index 85285f4..1150a23 100644
--- a/src/org/openstreetmap/josm/data/osm/event/DataSetListener.java
+++ b/src/org/openstreetmap/josm/data/osm/event/DataSetListener.java
@@ -4,8 +4,8 @@ package org.openstreetmap.josm.data.osm.event;
 /**
  * A listener listening for all DataSet changes.
  *
- * @see DataSetListenerAdapter
  * @author nenik
+ * @see DataSetListenerAdapter
  */
 public interface DataSetListener {
     /**
diff --git a/src/org/openstreetmap/josm/data/osm/event/DatasetEventManager.java b/src/org/openstreetmap/josm/data/osm/event/DatasetEventManager.java
index a1fd461..7a6bc03 100644
--- a/src/org/openstreetmap/josm/data/osm/event/DatasetEventManager.java
+++ b/src/org/openstreetmap/josm/data/osm/event/DatasetEventManager.java
@@ -28,6 +28,66 @@ public class DatasetEventManager implements MapView.EditLayerChangeListener, Lis
 
     private static final DatasetEventManager instance = new DatasetEventManager();
 
+    private final class EdtRunnable implements Runnable {
+        @Override
+        public void run() {
+            while (!eventsInEDT.isEmpty()) {
+                DataSet dataSet = null;
+                AbstractDatasetChangedEvent consolidatedEvent = null;
+                AbstractDatasetChangedEvent event = null;
+
+                while ((event = eventsInEDT.poll()) != null) {
+                    fireEvents(inEDTListeners, event);
+
+                    // DataSet changed - fire consolidated event early
+                    if (consolidatedEvent != null && dataSet != event.getDataset()) {
+                        fireConsolidatedEvents(inEDTListeners, consolidatedEvent);
+                        consolidatedEvent = null;
+                    }
+
+                    dataSet = event.getDataset();
+
+                    // Build consolidated event
+                    if (event instanceof DataChangedEvent) {
+                        // DataChangeEvent can contains other events, so it gets special handling
+                        DataChangedEvent dataEvent = (DataChangedEvent) event;
+                        if (dataEvent.getEvents() == null) {
+                            consolidatedEvent = dataEvent; // Dataset was completely changed, we can ignore older events
+                        } else {
+                            if (consolidatedEvent == null) {
+                                consolidatedEvent = new DataChangedEvent(dataSet, dataEvent.getEvents());
+                            } else if (consolidatedEvent instanceof DataChangedEvent) {
+                                List<AbstractDatasetChangedEvent> evts = ((DataChangedEvent) consolidatedEvent).getEvents();
+                                if (evts != null) {
+                                    evts.addAll(dataEvent.getEvents());
+                                }
+                            } else {
+                                AbstractDatasetChangedEvent oldConsolidateEvent = consolidatedEvent;
+                                consolidatedEvent = new DataChangedEvent(dataSet, dataEvent.getEvents());
+                                ((DataChangedEvent) consolidatedEvent).getEvents().add(oldConsolidateEvent);
+                            }
+                        }
+                    } else {
+                        // Normal events
+                        if (consolidatedEvent == null) {
+                            consolidatedEvent = event;
+                        } else if (consolidatedEvent instanceof DataChangedEvent) {
+                            List<AbstractDatasetChangedEvent> evs = ((DataChangedEvent) consolidatedEvent).getEvents();
+                            if (evs != null) {
+                                evs.add(event);
+                            }
+                        } else {
+                            consolidatedEvent = new DataChangedEvent(dataSet, new ArrayList<>(Arrays.asList(consolidatedEvent)));
+                        }
+                    }
+                }
+
+                // Fire consolidated event
+                fireConsolidatedEvents(inEDTListeners, consolidatedEvent);
+            }
+        }
+    }
+
     public enum FireMode {
         /**
          * Fire in calling thread immediately.
@@ -59,10 +119,14 @@ public class DatasetEventManager implements MapView.EditLayerChangeListener, Lis
 
         @Override
         public boolean equals(Object o) {
-            return o instanceof ListenerInfo && ((ListenerInfo)o).listener == listener;
+            return o instanceof ListenerInfo && ((ListenerInfo) o).listener == listener;
         }
     }
 
+    /**
+     * Replies the unique instance.
+     * @return the unique instance
+     */
     public static DatasetEventManager getInstance() {
         return instance;
     }
@@ -71,6 +135,7 @@ public class DatasetEventManager implements MapView.EditLayerChangeListener, Lis
     private final CopyOnWriteArrayList<ListenerInfo> inEDTListeners = new CopyOnWriteArrayList<>();
     private final CopyOnWriteArrayList<ListenerInfo> normalListeners = new CopyOnWriteArrayList<>();
     private final DataSetListener myListener = new DataSetListenerAdapter(this);
+    private final Runnable edtRunnable = new EdtRunnable();
 
     /**
      * Constructs a new {@code DatasetEventManager}.
@@ -136,68 +201,4 @@ public class DatasetEventManager implements MapView.EditLayerChangeListener, Lis
         eventsInEDT.add(event);
         SwingUtilities.invokeLater(edtRunnable);
     }
-
-    private final Runnable edtRunnable = new Runnable() {
-        @Override
-        public void run() {
-            while (!eventsInEDT.isEmpty()) {
-                List<AbstractDatasetChangedEvent> events = new ArrayList<>();
-                events.addAll(eventsInEDT);
-
-                DataSet dataSet = null;
-                AbstractDatasetChangedEvent consolidatedEvent = null;
-                AbstractDatasetChangedEvent event = null;
-
-                while ((event = eventsInEDT.poll()) != null) {
-                    fireEvents(inEDTListeners, event);
-
-                    // DataSet changed - fire consolidated event early
-                    if (consolidatedEvent != null && dataSet != event.getDataset()) {
-                        fireConsolidatedEvents(inEDTListeners, consolidatedEvent);
-                        consolidatedEvent = null;
-                    }
-
-                    dataSet = event.getDataset();
-
-                    // Build consolidated event
-                    if (event instanceof DataChangedEvent) {
-                        // DataChangeEvent can contains other events, so it gets special handling
-                        DataChangedEvent dataEvent = (DataChangedEvent) event;
-                        if (dataEvent.getEvents() == null) {
-                            consolidatedEvent = dataEvent; // Dataset was completely changed, we can ignore older events
-                        } else {
-                            if (consolidatedEvent == null) {
-                                consolidatedEvent = new DataChangedEvent(dataSet, dataEvent.getEvents());
-                            } else if (consolidatedEvent instanceof DataChangedEvent) {
-                                List<AbstractDatasetChangedEvent> evts = ((DataChangedEvent) consolidatedEvent).getEvents();
-                                if (evts != null) {
-                                    evts.addAll(dataEvent.getEvents());
-                                }
-                            } else {
-                                AbstractDatasetChangedEvent oldConsolidateEvent = consolidatedEvent;
-                                consolidatedEvent = new DataChangedEvent(dataSet, dataEvent.getEvents());
-                                ((DataChangedEvent) consolidatedEvent).getEvents().add(oldConsolidateEvent);
-                            }
-                        }
-                    } else {
-                        // Normal events
-                        if (consolidatedEvent == null) {
-                            consolidatedEvent = event;
-                        } else if (consolidatedEvent instanceof DataChangedEvent) {
-                            List<AbstractDatasetChangedEvent> evs = ((DataChangedEvent) consolidatedEvent).getEvents();
-                            if (evs != null) {
-                                evs.add(event);
-                            }
-                        } else {
-                            consolidatedEvent = new DataChangedEvent(dataSet, new ArrayList<>(Arrays.asList(consolidatedEvent)));
-                        }
-
-                    }
-                }
-
-                // Fire consolidated event
-                fireConsolidatedEvents(inEDTListeners, consolidatedEvent);
-            }
-        }
-    };
 }
diff --git a/src/org/openstreetmap/josm/data/osm/event/SelectionEventManager.java b/src/org/openstreetmap/josm/data/osm/event/SelectionEventManager.java
index 0797b72..3f65359 100644
--- a/src/org/openstreetmap/josm/data/osm/event/SelectionEventManager.java
+++ b/src/org/openstreetmap/josm/data/osm/event/SelectionEventManager.java
@@ -39,7 +39,7 @@ public class SelectionEventManager implements SelectionChangedListener {
 
         @Override
         public boolean equals(Object o) {
-            return o instanceof ListenerInfo && ((ListenerInfo)o).listener == listener;
+            return o instanceof ListenerInfo && ((ListenerInfo) o).listener == listener;
         }
     }
 
diff --git a/src/org/openstreetmap/josm/data/osm/history/History.java b/src/org/openstreetmap/josm/data/osm/history/History.java
index b285843..37d1057 100644
--- a/src/org/openstreetmap/josm/data/osm/history/History.java
+++ b/src/org/openstreetmap/josm/data/osm/history/History.java
@@ -20,7 +20,7 @@ import org.openstreetmap.josm.tools.CheckParameterUtil;
  */
 public class History {
 
-    private static interface FilterPredicate {
+    private interface FilterPredicate {
         boolean matches(HistoryOsmPrimitive primitive);
     }
 
@@ -31,7 +31,7 @@ public class History {
                 out.add(primitive);
             }
         }
-        return new History(history.id, history.type,out);
+        return new History(history.id, history.type, out);
     }
 
     /** the list of object snapshots */
@@ -95,7 +95,7 @@ public class History {
                     }
                 }
             );
-        return new History(id, type,copy);
+        return new History(id, type, copy);
     }
 
     /**
@@ -231,7 +231,7 @@ public class History {
      */
     public boolean contains(long version) {
         for (HistoryOsmPrimitive primitive: versions) {
-            if (primitive.matches(id,version))
+            if (primitive.matches(id, version))
                 return true;
         }
         return false;
@@ -246,7 +246,7 @@ public class History {
      */
     public HistoryOsmPrimitive getByVersion(long version) {
         for (HistoryOsmPrimitive primitive: versions) {
-            if (primitive.matches(id,version))
+            if (primitive.matches(id, version))
                 return primitive;
         }
         return null;
@@ -264,9 +264,9 @@ public class History {
 
         if (h.versions.isEmpty())
             return null;
-        if (h.get(0).getTimestamp().compareTo(date)> 0)
+        if (h.get(0).getTimestamp().compareTo(date) > 0)
             return null;
-        for (int i = 1; i < h.versions.size();i++) {
+        for (int i = 1; i < h.versions.size(); i++) {
             if (h.get(i-1).getTimestamp().compareTo(date) <= 0
                     && h.get(i).getTimestamp().compareTo(date) >= 0)
                 return h.get(i);
@@ -340,10 +340,10 @@ public class History {
         if (versions != null) {
             result.append(", versions=\n");
             for (HistoryOsmPrimitive v : versions) {
-                result.append("\t").append(v).append(",\n");
+                result.append('\t').append(v).append(",\n");
             }
         }
-        result.append("]");
+        result.append(']');
         return result.toString();
     }
 }
diff --git a/src/org/openstreetmap/josm/data/osm/history/HistoryDataSet.java b/src/org/openstreetmap/josm/data/osm/history/HistoryDataSet.java
index d3a57c5..1570a9c 100644
--- a/src/org/openstreetmap/josm/data/osm/history/HistoryDataSet.java
+++ b/src/org/openstreetmap/josm/data/osm/history/HistoryDataSet.java
@@ -89,7 +89,7 @@ public class HistoryDataSet implements LayerChangeListener{
      * @return the history primitive for the primitive with id <code>id</code>,
      * type <code>type</code>, and version <code>version</code>
      */
-    public HistoryOsmPrimitive get(long id, OsmPrimitiveType type, long version){
+    public HistoryOsmPrimitive get(long id, OsmPrimitiveType type, long version) {
         if (id <= 0)
             throw new IllegalArgumentException(MessageFormat.format("Parameter ''{0}'' > 0 expected, got {1}", "id", id));
         CheckParameterUtil.ensureParameterNotNull(type, "type");
@@ -200,9 +200,15 @@ public class HistoryDataSet implements LayerChangeListener{
     /* interface LayerChangeListener                                                  */
     /* ------------------------------------------------------------------------------ */
     @Override
-    public void activeLayerChange(Layer oldLayer, Layer newLayer) {/* irrelevant in this context */}
+    public void activeLayerChange(Layer oldLayer, Layer newLayer) {
+        /* irrelevant in this context */
+    }
+
     @Override
-    public void layerAdded(Layer newLayer) {/* irrelevant in this context */}
+    public void layerAdded(Layer newLayer) {
+        /* irrelevant in this context */
+    }
+
     @Override
     public void layerRemoved(Layer oldLayer) {
         if (!Main.isDisplayingMapView()) return;
diff --git a/src/org/openstreetmap/josm/data/osm/history/HistoryNameFormatter.java b/src/org/openstreetmap/josm/data/osm/history/HistoryNameFormatter.java
index ac3200d..53d2d54 100644
--- a/src/org/openstreetmap/josm/data/osm/history/HistoryNameFormatter.java
+++ b/src/org/openstreetmap/josm/data/osm/history/HistoryNameFormatter.java
@@ -3,6 +3,8 @@ package org.openstreetmap.josm.data.osm.history;
 
 public interface HistoryNameFormatter {
     String format(HistoryNode node);
+
     String format(HistoryWay node);
+
     String format(HistoryRelation node);
 }
diff --git a/src/org/openstreetmap/josm/data/osm/history/HistoryNode.java b/src/org/openstreetmap/josm/data/osm/history/HistoryNode.java
index e77be9c..465fa09 100644
--- a/src/org/openstreetmap/josm/data/osm/history/HistoryNode.java
+++ b/src/org/openstreetmap/josm/data/osm/history/HistoryNode.java
@@ -49,7 +49,8 @@ public class HistoryNode extends HistoryOsmPrimitive {
      * @throws IllegalArgumentException if preconditions are violated
      * @since 5440
      */
-    public HistoryNode(long id, long version, boolean visible, User user, long changesetId, Date timestamp, LatLon coords, boolean checkHistoricParams) {
+    public HistoryNode(long id, long version, boolean visible, User user, long changesetId, Date timestamp, LatLon coords,
+            boolean checkHistoricParams) {
         super(id, version, visible, user, changesetId, timestamp, checkHistoricParams);
         setCoords(coords);
     }
diff --git a/src/org/openstreetmap/josm/data/osm/history/HistoryOsmPrimitive.java b/src/org/openstreetmap/josm/data/osm/history/HistoryOsmPrimitive.java
index 3f26e6e..7d9ed51 100644
--- a/src/org/openstreetmap/josm/data/osm/history/HistoryOsmPrimitive.java
+++ b/src/org/openstreetmap/josm/data/osm/history/HistoryOsmPrimitive.java
@@ -74,7 +74,8 @@ public abstract class HistoryOsmPrimitive implements Comparable<HistoryOsmPrimit
      * @throws IllegalArgumentException if preconditions are violated
      * @since 5440
      */
-    public HistoryOsmPrimitive(long id, long version, boolean visible, User user, long changesetId, Date timestamp, boolean checkHistoricParams) {
+    public HistoryOsmPrimitive(long id, long version, boolean visible, User user, long changesetId, Date timestamp,
+            boolean checkHistoricParams) {
         ensurePositiveLong(id, "id");
         ensurePositiveLong(version, "version");
         CheckParameterUtil.ensureParameterNotNull(user, "user");
@@ -127,12 +128,15 @@ public abstract class HistoryOsmPrimitive implements Comparable<HistoryOsmPrimit
     public boolean isVisible() {
         return visible;
     }
+
     public User getUser() {
         return user;
     }
+
     public long getChangesetId() {
         return changesetId;
     }
+
     public Date getTimestamp() {
         return timestamp;
     }
@@ -155,7 +159,7 @@ public abstract class HistoryOsmPrimitive implements Comparable<HistoryOsmPrimit
     public int compareTo(HistoryOsmPrimitive o) {
         if (this.id != o.id)
             throw new ClassCastException(tr("Cannot compare primitive with ID ''{0}'' to primitive with ID ''{1}''.", o.id, this.id));
-        return Long.valueOf(this.version).compareTo(o.version);
+        return Long.compare(this.version, o.version);
     }
 
     public void put(String key, String value) {
@@ -170,7 +174,7 @@ public abstract class HistoryOsmPrimitive implements Comparable<HistoryOsmPrimit
         return tags.get(key) != null;
     }
 
-    public Map<String,String> getTags() {
+    public Map<String, String> getTags() {
         return Collections.unmodifiableMap(tags);
     }
 
@@ -188,7 +192,7 @@ public abstract class HistoryOsmPrimitive implements Comparable<HistoryOsmPrimit
      *
      * @param tags the tags. May be null.
      */
-    public void setTags(Map<String,String> tags) {
+    public void setTags(Map<String, String> tags) {
         if (tags == null) {
             this.tags = new HashMap<>();
         } else {
@@ -230,7 +234,7 @@ public abstract class HistoryOsmPrimitive implements Comparable<HistoryOsmPrimit
      * @return the name of this primitive
      */
     public String getLocalName() {
-        String key = "name:" + Locale.getDefault().toString();
+        String key = "name:" + Locale.getDefault();
         if (get(key) != null)
             return get(key);
         key = "name:" + Locale.getDefault().getLanguage() + "_" + Locale.getDefault().getCountry();
diff --git a/src/org/openstreetmap/josm/data/osm/history/HistoryRelation.java b/src/org/openstreetmap/josm/data/osm/history/HistoryRelation.java
index 83ff159..8f87c16 100644
--- a/src/org/openstreetmap/josm/data/osm/history/HistoryRelation.java
+++ b/src/org/openstreetmap/josm/data/osm/history/HistoryRelation.java
@@ -69,7 +69,8 @@ public class HistoryRelation extends HistoryOsmPrimitive{
      *
      * @throws IllegalArgumentException if preconditions are violated
      */
-    public HistoryRelation(long id, long version, boolean visible, User user, long changesetId, Date timestamp, List<RelationMemberData> members) {
+    public HistoryRelation(long id, long version, boolean visible, User user, long changesetId, Date timestamp,
+            List<RelationMemberData> members) {
         this(id, version, visible, user, changesetId, timestamp);
         if (members != null) {
             this.members.addAll(members);
@@ -111,7 +112,8 @@ public class HistoryRelation extends HistoryOsmPrimitive{
      */
     public RelationMemberData getRelationMember(int idx) throws IndexOutOfBoundsException  {
         if (idx < 0 || idx >= members.size())
-            throw new IndexOutOfBoundsException(MessageFormat.format("Parameter {0} not in range 0..{1}. Got ''{2}''.", "idx", members.size(),idx));
+            throw new IndexOutOfBoundsException(
+                    MessageFormat.format("Parameter {0} not in range 0..{1}. Got ''{2}''.", "idx", members.size(), idx));
         return members.get(idx);
     }
 
diff --git a/src/org/openstreetmap/josm/data/osm/history/HistoryWay.java b/src/org/openstreetmap/josm/data/osm/history/HistoryWay.java
index b52595d..25b354c 100644
--- a/src/org/openstreetmap/josm/data/osm/history/HistoryWay.java
+++ b/src/org/openstreetmap/josm/data/osm/history/HistoryWay.java
@@ -98,7 +98,7 @@ public class HistoryWay extends HistoryOsmPrimitive {
      */
     public long getNodeId(int idx) throws IndexOutOfBoundsException {
         if (idx < 0 || idx >= nodeIds.size())
-            throw new IndexOutOfBoundsException(tr("Parameter {0} not in range 0..{1}. Got ''{2}''.", "idx", nodeIds.size(),idx));
+            throw new IndexOutOfBoundsException(tr("Parameter {0} not in range 0..{1}. Got ''{2}''.", "idx", nodeIds.size(), idx));
         return nodeIds.get(idx);
     }
 
diff --git a/src/org/openstreetmap/josm/data/osm/visitor/AllNodesVisitor.java b/src/org/openstreetmap/josm/data/osm/visitor/AllNodesVisitor.java
index 0822973..5ab1c70 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/AllNodesVisitor.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/AllNodesVisitor.java
@@ -36,8 +36,9 @@ public class AllNodesVisitor extends AbstractVisitor {
     @Override
     public void visit(Way w) {
         if (w.isIncomplete()) return;
-        for (Node n : w.getNodes())
+        for (Node n : w.getNodes()) {
             visit(n);
+        }
     }
 
     /**
@@ -47,8 +48,9 @@ public class AllNodesVisitor extends AbstractVisitor {
      */
     @Override
     public void visit(Relation e) {
-        for (RelationMember m : e.getMembers())
+        for (RelationMember m : e.getMembers()) {
             if (m.isNode()) visit(m.getNode());
+        }
     }
 
     /**
@@ -58,8 +60,9 @@ public class AllNodesVisitor extends AbstractVisitor {
      */
     public static Collection<Node> getAllNodes(Collection<? extends OsmPrimitive> osms) {
         AllNodesVisitor v = new AllNodesVisitor();
-        for (OsmPrimitive osm : osms)
+        for (OsmPrimitive osm : osms) {
             osm.accept(v);
+        }
         return v.nodes;
     }
 }
diff --git a/src/org/openstreetmap/josm/data/osm/visitor/BoundingXYVisitor.java b/src/org/openstreetmap/josm/data/osm/visitor/BoundingXYVisitor.java
index 3c45b28..232c03f 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/BoundingXYVisitor.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/BoundingXYVisitor.java
@@ -48,26 +48,23 @@ public class BoundingXYVisitor extends AbstractVisitor {
     }
 
     public void visit(Bounds b) {
-        if(b != null)
-        {
+        if (b != null) {
             visit(b.getMin());
             visit(b.getMax());
         }
     }
 
     public void visit(ProjectionBounds b) {
-        if(b != null)
-        {
+        if (b != null) {
             visit(b.getMin());
             visit(b.getMax());
         }
     }
 
     public void visit(LatLon latlon) {
-        if(latlon != null)
-        {
-            if(latlon instanceof CachedLatLon) {
-                visit(((CachedLatLon)latlon).getEastNorth());
+        if (latlon != null) {
+            if (latlon instanceof CachedLatLon) {
+                visit(((CachedLatLon) latlon).getEastNorth());
             } else {
                 visit(Main.getProjection().latlon2eastNorth(latlon));
             }
@@ -109,7 +106,7 @@ public class BoundingXYVisitor extends AbstractVisitor {
      * If the bounding box has not been set (<code>min</code> or <code>max</code>
      * equal <code>null</code>) this method does not do anything.
      *
-     * @param enlargeDegree
+     * @param enlargeDegree number of degrees to enlarge on each side
      */
     public void enlargeBoundingBox(double enlargeDegree) {
         if (bounds == null)
@@ -143,7 +140,7 @@ public class BoundingXYVisitor extends AbstractVisitor {
      * If the bounding box has not been set (<code>min</code> or <code>max</code>
      * equal <code>null</code>) this method does not do anything.
      *
-     * @param maxEnlargePercent
+     * @param maxEnlargePercent maximum enlargement in percentage (100.0 for 100%)
      */
     public void enlargeBoundingBoxLogarithmically(double maxEnlargePercent) {
         if (bounds == null)
@@ -181,8 +178,8 @@ public class BoundingXYVisitor extends AbstractVisitor {
         visit(bounds.getMax().add(+en_size/2, +en_size/2));
     }
 
-
-    @Override public String toString() {
+    @Override
+    public String toString() {
         return "BoundingXYVisitor["+bounds+"]";
     }
 
diff --git a/src/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitor.java b/src/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitor.java
index ff01fe2..599a0e5 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitor.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitor.java
@@ -94,7 +94,7 @@ public class MergeSourceBuildingVisitor extends AbstractVisitor {
     protected void rememberRelation(Relation r) {
         RelationData clone;
         if (isAlreadyRemembered(r)) {
-            clone = (RelationData)mappedPrimitives.get(r);
+            clone = (RelationData) mappedPrimitives.get(r);
         } else {
             clone = r.save();
             mappedPrimitives.put(r, clone);
diff --git a/src/org/openstreetmap/josm/data/osm/visitor/paint/AbstractMapRenderer.java b/src/org/openstreetmap/josm/data/osm/visitor/paint/AbstractMapRenderer.java
index c2317b9..205323e 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/paint/AbstractMapRenderer.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/paint/AbstractMapRenderer.java
@@ -87,6 +87,7 @@ public abstract class AbstractMapRenderer implements Rendering {
      * @param p1 First point of the way segment.
      * @param p2 Second point of the way segment.
      * @param orderNumber The number of the segment in the way.
+     * @param clr The color to use for drawing the text.
      */
     protected void drawOrderNumber(Point p1, Point p2, int orderNumber, Color clr) {
         if (isSegmentVisible(p1, p2) && isLargeSegment(p1, p2, segmentNumberSpace)) {
@@ -126,8 +127,7 @@ public abstract class AbstractMapRenderer implements Rendering {
         g.draw(path);
         try {
             // print highlighted virtual nodes. Since only the color changes, simply
-            // drawing them over the existing ones works fine (at least in their current
-            // simple style)
+            // drawing them over the existing ones works fine (at least in their current simple style)
             path = new GeneralPath();
             for (WaySegment wseg: data.getHighlightedVirtualNodes()) {
                 if (wseg.way.isUsable() && !wseg.way.isDisabled()) {
@@ -140,9 +140,13 @@ public abstract class AbstractMapRenderer implements Rendering {
             // Silently ignore any ArrayIndexOutOfBoundsException that may be raised
             // if the way has changed while being rendered (fix #7979)
             // TODO: proper solution ?
-            // Idea from bastiK: avoid the WaySegment class and add another data class with { Way way; Node firstNode, secondNode; int firstIdx; }.
-            // On read, it would first check, if the way still has firstIdx+2 nodes, then check if the corresponding way nodes are still the same
-            // and report changes in a more controlled manner.
+            // Idea from bastiK:
+            // avoid the WaySegment class and add another data class with { Way way; Node firstNode, secondNode; int firstIdx; }.
+            // On read, it would first check, if the way still has firstIdx+2 nodes, then check if the corresponding way nodes are still
+            // the same and report changes in a more controlled manner.
+            if (Main.isTraceEnabled()) {
+                Main.trace(e.getMessage());
+            }
         }
     }
 
@@ -183,7 +187,7 @@ public abstract class AbstractMapRenderer implements Rendering {
     public static boolean isLargeSegment(Point2D p1, Point2D p2, int space) {
         double xd = Math.abs(p1.getX()-p2.getX());
         double yd = Math.abs(p1.getY()-p2.getY());
-        return (xd+yd > space);
+        return xd + yd > space;
     }
 
     /**
@@ -211,11 +215,9 @@ public abstract class AbstractMapRenderer implements Rendering {
         Iterator<Node> it = w.getNodes().iterator();
         if (it.hasNext()) {
             Point lastP = nc.getPoint(it.next());
-            while (it.hasNext())
-            {
+            while (it.hasNext()) {
                 Point p = nc.getPoint(it.next());
-                if (isSegmentVisible(lastP, p) && isLargeSegment(lastP, p, virtualNodeSpace))
-                {
+                if (isSegmentVisible(lastP, p) && isLargeSegment(lastP, p, virtualNodeSpace)) {
                     int x = (p.x+lastP.x)/2;
                     int y = (p.y+lastP.y)/2;
                     path.moveTo(x-virtualNodeSize, y);
diff --git a/src/org/openstreetmap/josm/data/osm/visitor/paint/LineClip.java b/src/org/openstreetmap/josm/data/osm/visitor/paint/LineClip.java
index ef5e980..09e8ed0 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/paint/LineClip.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/paint/LineClip.java
@@ -37,7 +37,8 @@ public class LineClip {
         if (clipBounds == null) {
             return false;
         }
-        return cohenSutherland(p1.x, p1.y, p2.x, p2.y, clipBounds.x , clipBounds.y, clipBounds.x + clipBounds.width, clipBounds.y + clipBounds.height);
+        return cohenSutherland(p1.x, p1.y, p2.x, p2.y, clipBounds.x , clipBounds.y,
+                clipBounds.x + clipBounds.width, clipBounds.y + clipBounds.height);
     }
 
     /**
@@ -59,38 +60,33 @@ public class LineClip {
      * See <a href="https://en.wikipedia.org/wiki/Cohen%E2%80%93Sutherland_algorithm">Wikipedia article</a>
      * @return true, if line is visible in the given clip region
      */
-    private boolean cohenSutherland( long x1, long y1, long x2, long y2, long xmin, long ymin, long xmax, long ymax) {
+    private boolean cohenSutherland(long x1, long y1, long x2, long y2, long xmin, long ymin, long xmax, long ymax) {
         int outcode0, outcode1, outcodeOut;
         boolean accept = false;
         boolean done = false;
 
-        outcode0 = computeOutCode (x1, y1, xmin, ymin, xmax, ymax);
-        outcode1 = computeOutCode (x2, y2, xmin, ymin, xmax, ymax);
+        outcode0 = computeOutCode(x1, y1, xmin, ymin, xmax, ymax);
+        outcode1 = computeOutCode(x2, y2, xmin, ymin, xmax, ymax);
 
         do {
-            if ((outcode0 | outcode1) == 0 ) {
+            if ((outcode0 | outcode1) == 0) {
                 accept = true;
                 done = true;
-            }
-            else if ( (outcode0 & outcode1) > 0 ) {
+            } else if ((outcode0 & outcode1) > 0) {
                 done = true;
-            }
-            else {
+            } else {
                 long x = 0, y = 0;
-                outcodeOut = outcode0 != 0 ? outcode0: outcode1;
-                if ( (outcodeOut & OUT_TOP) > 0 ) {
+                outcodeOut = outcode0 != 0 ? outcode0 : outcode1;
+                if ((outcodeOut & OUT_TOP) > 0) {
                     x = x1 + (x2 - x1) * (ymax - y1)/(y2 - y1);
                     y = ymax;
-                }
-                else if ((outcodeOut & OUT_BOTTOM) > 0 ) {
+                } else if ((outcodeOut & OUT_BOTTOM) > 0) {
                     x = x1 + (x2 - x1) * (ymin - y1)/(y2 - y1);
                     y = ymin;
-                }
-                else if ((outcodeOut & OUT_RIGHT)> 0) {
+                } else if ((outcodeOut & OUT_RIGHT) > 0) {
                     y = y1 + (y2 - y1) * (xmax - x1)/(x2 - x1);
                     x = xmax;
-                }
-                else if ((outcodeOut & OUT_LEFT) > 0) {
+                } else if ((outcodeOut & OUT_LEFT) > 0) {
                     y = y1 + (y2 - y1) * (xmin - x1)/(x2 - x1);
                     x = xmin;
                 }
@@ -107,7 +103,7 @@ public class LineClip {
         }
         while (!done);
 
-        if(accept) {
+        if (accept) {
             p1 = new Point((int) x1, (int) y1);
             p2 = new Point((int) x2, (int) y2);
             return true;
@@ -119,18 +115,16 @@ public class LineClip {
      * The outcode of the point.
      * We cannot use Rectangle.outcode since it does not work with long ints.
      */
-    private static int computeOutCode (long x, long y, long xmin, long ymin, long xmax, long ymax) {
+    private static int computeOutCode(long x, long y, long xmin, long ymin, long xmax, long ymax) {
         int code = 0;
         if (y > ymax) {
             code |= OUT_TOP;
-        }
-        else if (y < ymin) {
+        } else if (y < ymin) {
             code |= OUT_BOTTOM;
         }
         if (x > xmax) {
             code |= OUT_RIGHT;
-        }
-        else if (x < xmin) {
+        } else if (x < xmin) {
             code |= OUT_LEFT;
         }
         return code;
diff --git a/src/org/openstreetmap/josm/data/osm/visitor/paint/MapRendererFactory.java b/src/org/openstreetmap/josm/data/osm/visitor/paint/MapRendererFactory.java
index efbb6be..0aa2175 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/paint/MapRendererFactory.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/paint/MapRendererFactory.java
@@ -34,7 +34,7 @@ import org.openstreetmap.josm.tools.CheckParameterUtil;
  * factory.activate(MyMapRenderer.class);
  *
  * </pre>
- *
+ * @since 4087
  */
 public final class MapRendererFactory {
 
@@ -44,8 +44,6 @@ public final class MapRendererFactory {
     public static final String PREF_KEY_RENDERER_CLASS_NAME = "mappaint.renderer-class-name";
 
     public static class MapRendererFactoryException extends RuntimeException {
-        public MapRendererFactoryException() {
-        }
 
         public MapRendererFactoryException(String message, Throwable cause) {
             super(message, cause);
@@ -122,19 +120,20 @@ public final class MapRendererFactory {
         }
     }
 
-    private void activateMapRenderer(String rendererClassName){
+    private void activateMapRenderer(String rendererClassName) {
         Class<?> c = loadRendererClass(rendererClassName);
-        if (c == null){
+        if (c == null) {
             Main.error(tr("Can''t activate map renderer class ''{0}'', because the class wasn''t found.", rendererClassName));
             Main.error(tr("Activating the standard map renderer instead."));
             activateDefault();
-        } else if (! AbstractMapRenderer.class.isAssignableFrom(c)) {
-            Main.error(tr("Can''t activate map renderer class ''{0}'', because it isn''t a subclass of ''{1}''.", rendererClassName, AbstractMapRenderer.class.getName()));
+        } else if (!AbstractMapRenderer.class.isAssignableFrom(c)) {
+            Main.error(tr("Can''t activate map renderer class ''{0}'', because it isn''t a subclass of ''{1}''.",
+                    rendererClassName, AbstractMapRenderer.class.getName()));
             Main.error(tr("Activating the standard map renderer instead."));
             activateDefault();
         } else {
             Class<? extends AbstractMapRenderer> renderer = c.asSubclass(AbstractMapRenderer.class);
-            if (! isRegistered(renderer)) {
+            if (!isRegistered(renderer)) {
                 Main.error(tr("Can''t activate map renderer class ''{0}'', because it isn''t registered as map renderer.", rendererClassName));
                 Main.error(tr("Activating the standard map renderer instead."));
                 activateDefault();
@@ -208,7 +207,7 @@ public final class MapRendererFactory {
         if (renderer == null) return;
         if (!isRegistered(renderer)) return;
         Iterator<Descriptor> it = descriptors.iterator();
-        while(it.hasNext()) {
+        while (it.hasNext()) {
             Descriptor d = it.next();
             if (d.getRenderer().getName().equals(renderer.getName())) {
                 it.remove();
@@ -250,7 +249,8 @@ public final class MapRendererFactory {
         Class<? extends AbstractMapRenderer> defaultRenderer = StyledMapRenderer.class;
         if (!isRegistered(defaultRenderer))
             throw new IllegalStateException(
-                    MessageFormat.format("Class ''{0}'' not registered as renderer. Can''t activate default renderer.", defaultRenderer.getName())
+                    MessageFormat.format("Class ''{0}'' not registered as renderer. Can''t activate default renderer.",
+                            defaultRenderer.getName())
             );
         activate(defaultRenderer);
     }
@@ -261,11 +261,12 @@ public final class MapRendererFactory {
      * @throws MapRendererFactoryException if creating an instance fails
      * @see AbstractMapRenderer#AbstractMapRenderer(Graphics2D, NavigatableComponent, boolean)
      */
-    public AbstractMapRenderer createActiveRenderer(Graphics2D g, NavigatableComponent viewport, boolean isInactiveMode) throws MapRendererFactoryException{
+    public AbstractMapRenderer createActiveRenderer(Graphics2D g, NavigatableComponent viewport, boolean isInactiveMode)
+            throws MapRendererFactoryException {
         try {
             Constructor<?> c = activeRenderer.getConstructor(new Class<?>[]{Graphics2D.class, NavigatableComponent.class, boolean.class});
             return AbstractMapRenderer.class.cast(c.newInstance(g, viewport, isInactiveMode));
-        } catch(NoSuchMethodException | IllegalArgumentException | InstantiationException | IllegalAccessException e){
+        } catch (NoSuchMethodException | IllegalArgumentException | InstantiationException | IllegalAccessException e) {
             throw new MapRendererFactoryException(e);
         } catch (InvocationTargetException e) {
             throw new MapRendererFactoryException(e.getCause());
diff --git a/src/org/openstreetmap/josm/data/osm/visitor/paint/PaintColors.java b/src/org/openstreetmap/josm/data/osm/visitor/paint/PaintColors.java
index 5fa3e80..fe9973d 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/paint/PaintColors.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/paint/PaintColors.java
@@ -20,14 +20,14 @@ public enum PaintColors implements ColorKey {
     NODE(marktr("Node: standard"), Color.yellow),
     CONNECTION(marktr("Node: connection"), Color.yellow),
     TAGGED(marktr("Node: tagged"), new Color(204, 255, 255)), // light cyan
-    DEFAULT_WAY(marktr("way"),  new Color(0,0,128)), // dark blue
-    RELATION(marktr("relation"), new Color(0,128,128)), // teal
-    UNTAGGED_WAY(marktr("untagged way"), new Color(0,128,0)), // dark green
+    DEFAULT_WAY(marktr("way"),  new Color(0, 0, 128)), // dark blue
+    RELATION(marktr("relation"), new Color(0, 128, 128)), // teal
+    UNTAGGED_WAY(marktr("untagged way"), new Color(0, 128, 0)), // dark green
     BACKGROUND(marktr("background"), Color.BLACK),
     HIGHLIGHT(marktr("highlight"), SELECTED.get()),
     HIGHLIGHT_WIREFRAME(marktr("highlight wireframe"), Color.orange),
 
-    UNTAGGED(marktr("untagged"),Color.GRAY),
+    UNTAGGED(marktr("untagged"), Color.GRAY),
     TEXT(marktr("text"), Color.WHITE),
     AREA_TEXT(marktr("areatext"), Color.LIGHT_GRAY);
 
@@ -53,7 +53,7 @@ public enum PaintColors implements ColorKey {
         MapPaintStyles.addMapPaintSylesUpdateListener(styleOverrideListener);
     }
 
-    private PaintColors(String name, Color defaultColor) {
+    PaintColors(String name, Color defaultColor) {
         this.name = name;
         this.defaultColor = defaultColor;
     }
diff --git a/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java b/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java
index 3df88d8..46ea1d6 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java
@@ -86,7 +86,7 @@ import org.openstreetmap.josm.tools.Utils;
 public class StyledMapRenderer extends AbstractMapRenderer {
 
     private static final Pair<Integer, ExecutorService> THREAD_POOL =
-            Utils.newThreadPool("mappaint.StyledMapRenderer.style_creation.numberOfThreads");
+            Utils.newThreadPool("mappaint.StyledMapRenderer.style_creation.numberOfThreads", "styled-map-renderer-%d", Thread.NORM_PRIORITY);
 
     /**
      * Iterates over a list of Way Nodes and returns screen coordinates that
@@ -98,8 +98,8 @@ public class StyledMapRenderer extends AbstractMapRenderer {
      */
     private class OffsetIterator implements Iterator<Point> {
 
-        private List<Node> nodes;
-        private float offset;
+        private final List<Node> nodes;
+        private final double offset;
         private int idx;
 
         private Point prev = null;
@@ -107,9 +107,9 @@ public class StyledMapRenderer extends AbstractMapRenderer {
          * line from 'prev' to 'prev0' is perpendicular to the way segment from
          * 'prev' to the next point.
          */
-        private int x_prev0, y_prev0;
+        private int xPrev0, yPrev0;
 
-        public OffsetIterator(List<Node> nodes, float offset) {
+        public OffsetIterator(List<Node> nodes, double offset) {
             this.nodes = nodes;
             this.offset = offset;
             idx = 0;
@@ -122,14 +122,14 @@ public class StyledMapRenderer extends AbstractMapRenderer {
 
         @Override
         public Point next() {
-            if (Math.abs(offset) < 0.1f) return nc.getPoint(nodes.get(idx++));
+            if (Math.abs(offset) < 0.1d) return nc.getPoint(nodes.get(idx++));
 
             Point current = nc.getPoint(nodes.get(idx));
 
             if (idx == nodes.size() - 1) {
                 ++idx;
                 if (prev != null) {
-                    return new Point(x_prev0 + current.x - prev.x, y_prev0 + current.y - prev.y);
+                    return new Point(xPrev0 + current.x - prev.x, yPrev0 + current.y - prev.y);
                 } else {
                     return current;
                 }
@@ -137,48 +137,47 @@ public class StyledMapRenderer extends AbstractMapRenderer {
 
             Point next = nc.getPoint(nodes.get(idx+1));
 
-            int dx_next = next.x - current.x;
-            int dy_next = next.y - current.y;
-            double len_next = Math.sqrt(dx_next*dx_next + dy_next*dy_next);
+            int dxNext = next.x - current.x;
+            int dyNext = next.y - current.y;
+            double lenNext = Math.sqrt(dxNext*dxNext + dyNext*dyNext);
 
-            if (len_next == 0) {
-                len_next = 1; // value does not matter, because dy_next and dx_next is 0
+            if (lenNext == 0) {
+                lenNext = 1; // value does not matter, because dy_next and dx_next is 0
             }
 
-            int x_current0 = current.x + (int) Math.round(offset * dy_next / len_next);
-            int y_current0 = current.y - (int) Math.round(offset * dx_next / len_next);
+            int xCurrent0 = current.x + (int) Math.round(offset * dyNext / lenNext);
+            int yCurrent0 = current.y - (int) Math.round(offset * dxNext / lenNext);
 
-            if (idx==0) {
+            if (idx == 0) {
                 ++idx;
                 prev = current;
-                x_prev0 = x_current0;
-                y_prev0 = y_current0;
-                return new Point(x_current0, y_current0);
+                xPrev0 = xCurrent0;
+                yPrev0 = yCurrent0;
+                return new Point(xCurrent0, yCurrent0);
             } else {
-                int dx_prev = current.x - prev.x;
-                int dy_prev = current.y - prev.y;
+                int dxPrev = current.x - prev.x;
+                int dyPrev = current.y - prev.y;
 
-                // determine intersection of the lines parallel to the two
-                // segments
-                int det = dx_next*dy_prev - dx_prev*dy_next;
+                // determine intersection of the lines parallel to the two segments
+                int det = dxNext*dyPrev - dxPrev*dyNext;
 
                 if (det == 0) {
                     ++idx;
                     prev = current;
-                    x_prev0 = x_current0;
-                    y_prev0 = y_current0;
-                    return new Point(x_current0, y_current0);
+                    xPrev0 = xCurrent0;
+                    yPrev0 = yCurrent0;
+                    return new Point(xCurrent0, yCurrent0);
                 }
 
-                int m = dx_next*(y_current0 - y_prev0) - dy_next*(x_current0 - x_prev0);
+                int m = dxNext*(yCurrent0 - yPrev0) - dyNext*(xCurrent0 - xPrev0);
 
-                int cx_ = x_prev0 + Math.round((float)m * dx_prev / det);
-                int cy_ = y_prev0 + Math.round((float)m * dy_prev / det);
+                int cx = xPrev0 + (int) Math.round((double) m * dxPrev / det);
+                int cy = yPrev0 + (int) Math.round((double) m * dyPrev / det);
                 ++idx;
                 prev = current;
-                x_prev0 = x_current0;
-                y_prev0 = y_current0;
-                return new Point(cx_, cy_);
+                xPrev0 = xCurrent0;
+                yPrev0 = yCurrent0;
+                return new Point(cx, cy);
             }
         }
 
@@ -206,7 +205,7 @@ public class StyledMapRenderer extends AbstractMapRenderer {
             if ((this.flags & FLAG_DISABLED) == 0 && (other.flags & FLAG_DISABLED) != 0)
                 return 1;
 
-            int d0 = Float.compare(this.style.major_z_index, other.style.major_z_index);
+            int d0 = Float.compare(this.style.majorZIndex, other.style.majorZIndex);
             if (d0 != 0)
                 return d0;
 
@@ -217,7 +216,7 @@ public class StyledMapRenderer extends AbstractMapRenderer {
             if (this.flags < other.flags)
                 return -1;
 
-            int dz = Float.compare(this.style.z_index, other.style.z_index);
+            int dz = Float.compare(this.style.zIndex, other.style.zIndex);
             if (dz != 0)
                 return dz;
 
@@ -234,11 +233,11 @@ public class StyledMapRenderer extends AbstractMapRenderer {
             if (id < 0)
                 return -1;
 
-            return Float.compare(this.style.object_z_index, other.style.object_z_index);
+            return Float.compare(this.style.objectZIndex, other.style.objectZIndex);
         }
     }
 
-    private static Map<Font,Boolean> IS_GLYPH_VECTOR_DOUBLE_TRANSLATION_BUG = new HashMap<>();
+    private static Map<Font, Boolean> IS_GLYPH_VECTOR_DOUBLE_TRANSLATION_BUG = new HashMap<>();
 
     /**
      * Check, if this System has the GlyphVector double translation bug.
@@ -258,6 +257,7 @@ public class StyledMapRenderer extends AbstractMapRenderer {
      * this case, but the method has been changed to simply return false by default.
      * (This can be changed with a setting in the advanced preferences.)
      *
+     * @param font The font to check.
      * @return false by default, but depends on the value of the advanced
      * preference glyph-bug=false|true|auto, where auto is the automatic detection
      * method which apparently no longer gives a useful result for Java 7.
@@ -291,10 +291,27 @@ public class StyledMapRenderer extends AbstractMapRenderer {
 
     private Color highlightColorTransparent;
 
+    /**
+     * Flags used to store the primitive state along with the style. This is the normal style.
+     * <p>
+     * Not used in any public interfaces.
+     */
     private static final int FLAG_NORMAL = 0;
+    /**
+     * A primitive with {@link OsmPrimitive#isDisabled()}
+     */
     private static final int FLAG_DISABLED = 1;
+    /**
+     * A primitive with {@link OsmPrimitive#isMemberOfSelected()}
+     */
     private static final int FLAG_MEMBER_OF_SELECTED = 2;
+    /**
+     * A primitive with {@link OsmPrimitive#isSelected()}
+     */
     private static final int FLAG_SELECTED = 4;
+    /**
+     * A primitive with {@link OsmPrimitive#isOuterMemberOfSelected()}
+     */
     private static final int FLAG_OUTERMEMBER_OF_SELECTED = 8;
 
     private static final double PHI = Math.toRadians(20);
@@ -335,7 +352,7 @@ public class StyledMapRenderer extends AbstractMapRenderer {
     public StyledMapRenderer(Graphics2D g, NavigatableComponent nc, boolean isInactiveMode) {
         super(g, nc, isInactiveMode);
 
-        if (nc!=null) {
+        if (nc != null) {
             Component focusOwner = FocusManager.getCurrentManager().getFocusOwner();
             useWiderHighlight = !(focusOwner instanceof AbstractButton || focusOwner == nc);
         }
@@ -364,7 +381,7 @@ public class StyledMapRenderer extends AbstractMapRenderer {
         }
         g.draw(path);
 
-        if(!isInactiveMode && useStrokes && dashes != null) {
+        if (!isInactiveMode && useStrokes && dashes != null) {
             g.setColor(dashedColor);
             g.setStroke(dashes);
             g.draw(path);
@@ -451,7 +468,7 @@ public class StyledMapRenderer extends AbstractMapRenderer {
                         new Rectangle(0, 0, fillImage.getWidth(), fillImage.getHeight()));
                 g.setPaint(texture);
                 Float alpha = fillImage.getAlphaFloat();
-                if (alpha != 1f) {
+                if (!Utils.equalsEpsilon(alpha, 1f)) {
                     g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha));
                 }
                 g.fill(area);
@@ -486,8 +503,8 @@ public class StyledMapRenderer extends AbstractMapRenderer {
                 final double w = pb.width  - nb.getWidth();
                 final double h = pb.height - nb.getHeight();
 
-                final int x2 = pb.x + (int)(w/2.0);
-                final int y2 = pb.y + (int)(h/2.0);
+                final int x2 = pb.x + (int) (w/2.0);
+                final int y2 = pb.y + (int) (h/2.0);
 
                 final int nbw = (int) nb.getWidth();
                 final int nbh = (int) nb.getHeight();
@@ -498,10 +515,10 @@ public class StyledMapRenderer extends AbstractMapRenderer {
                 boolean labelOK = area.contains(centeredNBounds);
                 if (!labelOK) {
                     // if center position (C) is not inside osm shape, try naively some other positions as follows:
-                    final int x1 = pb.x + (int)(  w/4.0);
-                    final int x3 = pb.x + (int)(3*w/4.0);
-                    final int y1 = pb.y + (int)(  h/4.0);
-                    final int y3 = pb.y + (int)(3*h/4.0);
+                    final int x1 = pb.x + (int)   (w/4.0);
+                    final int x3 = pb.x + (int) (3*w/4.0);
+                    final int y1 = pb.y + (int)   (h/4.0);
+                    final int y3 = pb.y + (int) (3*h/4.0);
                     // +-----------+
                     // |  5  1  6  |
                     // |  4  C  2  |
@@ -526,8 +543,8 @@ public class StyledMapRenderer extends AbstractMapRenderer {
                 }
                 if (labelOK) {
                     Font defaultFont = g.getFont();
-                    int x = (int)(centeredNBounds.getMinX() - nb.getMinX());
-                    int y = (int)(centeredNBounds.getMinY() - nb.getMinY());
+                    int x = (int) (centeredNBounds.getMinX() - nb.getMinX());
+                    int y = (int) (centeredNBounds.getMinY() - nb.getMinY());
                     displayText(null, name, x, y, osm.isDisabled(), text);
                     g.setFont(defaultFont);
                 } else if (Main.isDebugEnabled()) {
@@ -537,6 +554,14 @@ public class StyledMapRenderer extends AbstractMapRenderer {
         }
     }
 
+    /**
+     * Draws a multipolygon area.
+     * @param r The multipolygon relation
+     * @param color The color to fill the area with.
+     * @param fillImage The image to fill the area with. Overrides color.
+     * @param disabled If this should be drawn with a special disabled style.
+     * @param text The text to write on the area.
+     */
     public void drawArea(Relation r, Color color, MapImage fillImage, boolean disabled, TextElement text) {
         Multipolygon multipolygon = MultipolygonCache.getInstance().get(nc, r);
         if (!r.isDisabled() && !multipolygon.getOuterWays().isEmpty()) {
@@ -552,6 +577,14 @@ public class StyledMapRenderer extends AbstractMapRenderer {
         }
     }
 
+    /**
+     * Draws an area defined by a way. They way does not need to be closed, but it should.
+     * @param w The way.
+     * @param color The color to fill the area with.
+     * @param fillImage The image to fill the area with. Overrides color.
+     * @param disabled If this should be drawn with a special disabled style.
+     * @param text The text to write on the area.
+     */
     public void drawArea(Way w, Color color, MapImage fillImage, boolean disabled, TextElement text) {
         drawArea(w, getPath(w), color, fillImage, disabled, text);
     }
@@ -591,7 +624,7 @@ public class StyledMapRenderer extends AbstractMapRenderer {
             if (bs.hAlign == HorizontalTextAlignment.CENTER) {
                 x -= textWidth / 2;
             } else if (bs.hAlign == HorizontalTextAlignment.LEFT) {
-                x -= - box.x + 4 + textWidth;
+                x -= -box.x + 4 + textWidth;
             } else throw new AssertionError();
         }
 
@@ -601,9 +634,9 @@ public class StyledMapRenderer extends AbstractMapRenderer {
             FontRenderContext frc = g.getFontRenderContext();
             LineMetrics metrics = text.font.getLineMetrics(s, frc);
             if (bs.vAlign == VerticalTextAlignment.ABOVE) {
-                y -= - box.y + metrics.getDescent();
+                y -= -box.y + metrics.getDescent();
             } else if (bs.vAlign == VerticalTextAlignment.TOP) {
-                y -= - box.y - metrics.getAscent();
+                y -= -box.y - metrics.getAscent();
             } else if (bs.vAlign == VerticalTextAlignment.CENTER) {
                 y += (metrics.getAscent() - metrics.getDescent()) / 2;
             } else if (bs.vAlign == VerticalTextAlignment.BELOW) {
@@ -619,13 +652,14 @@ public class StyledMapRenderer extends AbstractMapRenderer {
      *
      * @param way the way
      * @param pattern the image
+     * @param disabled If this should be drawn with a special disabled style.
      * @param offset offset from the way
      * @param spacing spacing between two images
      * @param phase initial spacing
-     * @param align alignment of the image. The top, center or bottom edge
-     * can be aligned with the way.
+     * @param align alignment of the image. The top, center or bottom edge can be aligned with the way.
      */
-    public void drawRepeatImage(Way way, MapImage pattern, boolean disabled, float offset, float spacing, float phase, LineImageAlignment align) {
+    public void drawRepeatImage(Way way, MapImage pattern, boolean disabled, double offset, double spacing, double phase,
+            LineImageAlignment align) {
         final int imgWidth = pattern.getWidth();
         final double repeat = imgWidth + spacing;
         final int imgHeight = pattern.getHeight();
@@ -643,7 +677,7 @@ public class StyledMapRenderer extends AbstractMapRenderer {
                 dy2 = imgHeight;
                 break;
             case CENTER:
-                dy1 = - imgHeight / 2;
+                dy1 = -imgHeight / 2;
                 dy2 = imgHeight + dy1;
                 break;
             case BOTTOM:
@@ -707,12 +741,12 @@ public class StyledMapRenderer extends AbstractMapRenderer {
 
     @Override
     public void drawNode(Node n, Color color, int size, boolean fill) {
-        if(size <= 0 && !n.isHighlighted())
+        if (size <= 0 && !n.isHighlighted())
             return;
 
         Point p = nc.getPoint(n);
 
-        if(n.isHighlighted()) {
+        if (n.isHighlighted()) {
             drawPointHighlight(p, size);
         }
 
@@ -737,21 +771,20 @@ public class StyledMapRenderer extends AbstractMapRenderer {
         Point p = nc.getPoint(n);
 
         final int w = img.getWidth(), h = img.getHeight();
-        if(n.isHighlighted()) {
+        if (n.isHighlighted()) {
             drawPointHighlight(p, Math.max(w, h));
         }
 
         float alpha = img.getAlphaFloat();
 
-        if (alpha != 1f) {
+        if (!Utils.equalsEpsilon(alpha, 1f)) {
             g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha));
         }
         g.rotate(theta, p.x, p.y);
         g.drawImage(img.getImage(disabled), p.x - w/2 + img.offsetX, p.y - h/2 + img.offsetY, nc);
         g.rotate(-theta, p.x, p.y);
         g.setPaintMode();
-        if (selected || member)
-        {
+        if (selected || member) {
             Color color;
             if (disabled) {
                 color = inactiveColor;
@@ -769,7 +802,7 @@ public class StyledMapRenderer extends AbstractMapRenderer {
         Point p = nc.getPoint(n);
         int radius = s.size / 2;
 
-        if(n.isHighlighted()) {
+        if (n.isHighlighted()) {
             drawPointHighlight(p, s.size);
         }
 
@@ -848,26 +881,31 @@ public class StyledMapRenderer extends AbstractMapRenderer {
     /**
      * Draw a number of the order of the two consecutive nodes within the
      * parents way
+     *
+     * @param n1 First node of the way segment.
+     * @param n2 Second node of the way segment.
+     * @param orderNumber The number of the segment in the way.
+     * @param clr The color to use for drawing the text.
      */
     public void drawOrderNumber(Node n1, Node n2, int orderNumber, Color clr) {
         Point p1 = nc.getPoint(n1);
         Point p2 = nc.getPoint(n2);
-        StyledMapRenderer.this.drawOrderNumber(p1, p2, orderNumber, clr);
+        drawOrderNumber(p1, p2, orderNumber, clr);
     }
 
     /**
      * highlights a given GeneralPath using the settings from BasicStroke to match the line's
      * style. Width of the highlight is hard coded.
-     * @param path
-     * @param line
+     * @param path path to draw
+     * @param line line style
      */
     private void drawPathHighlight(GeneralPath path, BasicStroke line) {
-        if(path == null)
+        if (path == null)
             return;
         g.setColor(highlightColorTransparent);
-        float w = (line.getLineWidth() + highlightLineWidth);
-        if (useWiderHighlight) w+=widerHighlight;
-        while(w >= line.getLineWidth()) {
+        float w = line.getLineWidth() + highlightLineWidth;
+        if (useWiderHighlight) w += widerHighlight;
+        while (w >= line.getLineWidth()) {
             g.setStroke(new BasicStroke(w, line.getEndCap(), line.getLineJoin(), line.getMiterLimit()));
             g.draw(path);
             w -= highlightStep;
@@ -880,9 +918,9 @@ public class StyledMapRenderer extends AbstractMapRenderer {
     private void drawPointHighlight(Point p, int size) {
         g.setColor(highlightColorTransparent);
         int s = size + highlightPointRadius;
-        if (useWiderHighlight) s+=widerHighlight;
-        while(s >= size) {
-            int r = (int) Math.floor(s/2);
+        if (useWiderHighlight) s += widerHighlight;
+        while (s >= size) {
+            int r = (int) Math.floor(s/2d);
             g.fillRoundRect(p.x-r, p.y-r, s, s, r, r);
             s -= highlightStep;
         }
@@ -891,12 +929,12 @@ public class StyledMapRenderer extends AbstractMapRenderer {
     public void drawRestriction(Image img, Point pVia, double vx, double vx2, double vy, double vy2, double angle, boolean selected) {
         // rotate image with direction last node in from to, and scale down image to 16*16 pixels
         Image smallImg = ImageProvider.createRotatedImage(img, angle, new Dimension(16, 16));
-        int w = smallImg.getWidth(null), h=smallImg.getHeight(null);
-        g.drawImage(smallImg, (int)(pVia.x+vx+vx2)-w/2, (int)(pVia.y+vy+vy2)-h/2, nc);
+        int w = smallImg.getWidth(null), h = smallImg.getHeight(null);
+        g.drawImage(smallImg, (int) (pVia.x+vx+vx2)-w/2, (int) (pVia.y+vy+vy2)-h/2, nc);
 
         if (selected) {
             g.setColor(isInactiveMode ? inactiveColor : relationSelectedColor);
-            g.drawRect((int)(pVia.x+vx+vx2)-w/2-2,(int)(pVia.y+vy+vy2)-h/2-2, w+4, h+4);
+            g.drawRect((int) (pVia.x+vx+vx2)-w/2-2, (int) (pVia.y+vy+vy2)-h/2-2, w+4, h+4);
         }
     }
 
@@ -907,34 +945,34 @@ public class StyledMapRenderer extends AbstractMapRenderer {
 
         /* find the "from", "via" and "to" elements */
         for (RelationMember m : r.getMembers()) {
-            if(m.getMember().isIncomplete())
+            if (m.getMember().isIncomplete())
                 return;
             else {
-                if(m.isWay()) {
+                if (m.isWay()) {
                     Way w = m.getWay();
-                    if(w.getNodesCount() < 2) {
+                    if (w.getNodesCount() < 2) {
                         continue;
                     }
 
                     switch(m.getRole()) {
                     case "from":
-                        if(fromWay == null) {
+                        if (fromWay == null) {
                             fromWay = w;
                         }
                         break;
                     case "to":
-                        if(toWay == null) {
+                        if (toWay == null) {
                             toWay = w;
                         }
                         break;
                     case "via":
-                        if(via == null) {
+                        if (via == null) {
                             via = w;
                         }
                     }
-                } else if(m.isNode()) {
+                } else if (m.isNode()) {
                     Node n = m.getNode();
-                    if("via".equals(m.getRole()) && via == null) {
+                    if ("via".equals(m.getRole()) && via == null) {
                         via = n;
                     }
                 }
@@ -945,36 +983,32 @@ public class StyledMapRenderer extends AbstractMapRenderer {
             return;
 
         Node viaNode;
-        if(via instanceof Node)
-        {
+        if (via instanceof Node) {
             viaNode = (Node) via;
-            if(!fromWay.isFirstLastNode(viaNode))
+            if (!fromWay.isFirstLastNode(viaNode))
                 return;
-        }
-        else
-        {
+        } else {
             Way viaWay = (Way) via;
             Node firstNode = viaWay.firstNode();
             Node lastNode = viaWay.lastNode();
-            Boolean onewayvia = false;
+            Boolean onewayvia = Boolean.FALSE;
 
             String onewayviastr = viaWay.get("oneway");
-            if(onewayviastr != null)
-            {
-                if("-1".equals(onewayviastr)) {
-                    onewayvia = true;
+            if (onewayviastr != null) {
+                if ("-1".equals(onewayviastr)) {
+                    onewayvia = Boolean.TRUE;
                     Node tmp = firstNode;
                     firstNode = lastNode;
                     lastNode = tmp;
                 } else {
                     onewayvia = OsmUtils.getOsmBoolean(onewayviastr);
                     if (onewayvia == null) {
-                        onewayvia = false;
+                        onewayvia = Boolean.FALSE;
                     }
                 }
             }
 
-            if(fromWay.isFirstLastNode(firstNode)) {
+            if (fromWay.isFirstLastNode(firstNode)) {
                 viaNode = firstNode;
             } else if (!onewayvia && fromWay.isFirstLastNode(lastNode)) {
                 viaNode = lastNode;
@@ -984,7 +1018,7 @@ public class StyledMapRenderer extends AbstractMapRenderer {
 
         /* find the "direct" nodes before the via node */
         Node fromNode;
-        if(fromWay.firstNode() == via) {
+        if (fromWay.firstNode() == via) {
             fromNode = fromWay.getNode(1);
         } else {
             fromNode = fromWay.getNode(fromWay.getNodesCount()-2);
@@ -997,12 +1031,12 @@ public class StyledMapRenderer extends AbstractMapRenderer {
            (calculate the vector vx/vy with the specified length and the direction
            away from the "via" node along the first segment of the "from" way)
          */
-        double distanceFromVia=14;
-        double dx = (pFrom.x >= pVia.x) ? (pFrom.x - pVia.x) : (pVia.x - pFrom.x);
-        double dy = (pFrom.y >= pVia.y) ? (pFrom.y - pVia.y) : (pVia.y - pFrom.y);
+        double distanceFromVia = 14;
+        double dx = pFrom.x >= pVia.x ? pFrom.x - pVia.x : pVia.x - pFrom.x;
+        double dy = pFrom.y >= pVia.y ? pFrom.y - pVia.y : pVia.y - pFrom.y;
 
         double fromAngle;
-        if(dx == 0.0) {
+        if (dx == 0) {
             fromAngle = Math.PI/2;
         } else {
             fromAngle = Math.atan(dy / dx);
@@ -1012,10 +1046,10 @@ public class StyledMapRenderer extends AbstractMapRenderer {
         double vx = distanceFromVia * Math.cos(fromAngle);
         double vy = distanceFromVia * Math.sin(fromAngle);
 
-        if(pFrom.x < pVia.x) {
+        if (pFrom.x < pVia.x) {
             vx = -vx;
         }
-        if(pFrom.y < pVia.y) {
+        if (pFrom.y < pVia.y) {
             vy = -vy;
         }
 
@@ -1023,13 +1057,13 @@ public class StyledMapRenderer extends AbstractMapRenderer {
            (calculate the vx2/vy2 vector with the specified length and the direction
            90degrees away from the first segment of the "from" way)
          */
-        double distanceFromWay=10;
+        double distanceFromWay = 10;
         double vx2 = 0;
         double vy2 = 0;
         double iconAngle = 0;
 
-        if(pFrom.x >= pVia.x && pFrom.y >= pVia.y) {
-            if(!leftHandTraffic) {
+        if (pFrom.x >= pVia.x && pFrom.y >= pVia.y) {
+            if (!leftHandTraffic) {
                 vx2 = distanceFromWay * Math.cos(Math.toRadians(fromAngleDeg - 90));
                 vy2 = distanceFromWay * Math.sin(Math.toRadians(fromAngleDeg - 90));
             } else {
@@ -1038,8 +1072,8 @@ public class StyledMapRenderer extends AbstractMapRenderer {
             }
             iconAngle = 270+fromAngleDeg;
         }
-        if(pFrom.x < pVia.x && pFrom.y >= pVia.y) {
-            if(!leftHandTraffic) {
+        if (pFrom.x < pVia.x && pFrom.y >= pVia.y) {
+            if (!leftHandTraffic) {
                 vx2 = distanceFromWay * Math.sin(Math.toRadians(fromAngleDeg));
                 vy2 = distanceFromWay * Math.cos(Math.toRadians(fromAngleDeg));
             } else {
@@ -1048,8 +1082,8 @@ public class StyledMapRenderer extends AbstractMapRenderer {
             }
             iconAngle = 90-fromAngleDeg;
         }
-        if(pFrom.x < pVia.x && pFrom.y < pVia.y) {
-            if(!leftHandTraffic) {
+        if (pFrom.x < pVia.x && pFrom.y < pVia.y) {
+            if (!leftHandTraffic) {
                 vx2 = distanceFromWay * Math.cos(Math.toRadians(fromAngleDeg + 90));
                 vy2 = distanceFromWay * Math.sin(Math.toRadians(fromAngleDeg + 90));
             } else {
@@ -1058,8 +1092,8 @@ public class StyledMapRenderer extends AbstractMapRenderer {
             }
             iconAngle = 90+fromAngleDeg;
         }
-        if(pFrom.x >= pVia.x && pFrom.y < pVia.y) {
-            if(!leftHandTraffic) {
+        if (pFrom.x >= pVia.x && pFrom.y < pVia.y) {
+            if (!leftHandTraffic) {
                 vx2 = distanceFromWay * Math.sin(Math.toRadians(fromAngleDeg + 180));
                 vy2 = distanceFromWay * Math.cos(Math.toRadians(fromAngleDeg + 180));
             } else {
@@ -1073,6 +1107,11 @@ public class StyledMapRenderer extends AbstractMapRenderer {
                 pVia, vx, vx2, vy, vy2, iconAngle, r.isSelected());
     }
 
+    /**
+     * Draws a text along a given way.
+     * @param way The way to draw the text on.
+     * @param text The text definition (font/.../text content) to draw.
+     */
     public void drawTextOnPath(Way way, TextElement text) {
         if (way == null || text == null)
             return;
@@ -1091,8 +1130,7 @@ public class StyledMapRenderer extends AbstractMapRenderer {
         double pathLength = 0;
         long dx, dy;
 
-        // find half segments that are long enough to draw text on
-        // (don't draw text over the cross hair in the center of each segment)
+        // find half segments that are long enough to draw text on (don't draw text over the cross hair in the center of each segment)
         List<Double> longHalfSegmentStart = new ArrayList<>(); // start point of half segment (as length along the way)
         List<Double> longHalfSegmentEnd = new ArrayList<>(); // end point of half segment (as length along the way)
         List<Double> longHalfsegmentQuality = new ArrayList<>(); // quality factor (off screen / partly on screen / fully on screen)
@@ -1102,7 +1140,7 @@ public class StyledMapRenderer extends AbstractMapRenderer {
             Point p = nc.getPoint(n);
             poly.addPoint(p.x, p.y);
 
-            if(lastPoint != null) {
+            if (lastPoint != null) {
                 dx = p.x - lastPoint.x;
                 dy = p.y - lastPoint.y;
                 double segmentLength = Math.sqrt(dx*dx + dy*dy);
@@ -1144,8 +1182,7 @@ public class StyledMapRenderer extends AbstractMapRenderer {
 
         if (!longHalfSegmentStart.isEmpty()) {
             if (way.getNodesCount() == 2) {
-                // For 2 node ways, the two half segments are exactly
-                // the same size and distance from the center.
+                // For 2 node ways, the two half segments are exactly the same size and distance from the center.
                 // Prefer the first one for consistency.
                 longHalfsegmentQuality.set(0, longHalfsegmentQuality.get(0) + 0.5);
             }
@@ -1156,11 +1193,12 @@ public class StyledMapRenderer extends AbstractMapRenderer {
             double bestEnd = Double.NaN;
             double bestDistanceToCenter = Double.MAX_VALUE;
             double bestQuality = -1;
-            for (int i=0; i<longHalfSegmentStart.size(); i++) {
+            for (int i = 0; i < longHalfSegmentStart.size(); i++) {
                 double start = longHalfSegmentStart.get(i);
                 double end = longHalfSegmentEnd.get(i);
                 double dist = Math.abs(0.5 * (end + start) - 0.5 * pathLength);
-                if (longHalfsegmentQuality.get(i) > bestQuality || (dist < bestDistanceToCenter && longHalfsegmentQuality.get(i) == bestQuality)) {
+                if (longHalfsegmentQuality.get(i) > bestQuality
+                        || (dist < bestDistanceToCenter && Utils.equalsEpsilon(longHalfsegmentQuality.get(i), bestQuality))) {
                     bestStart = start;
                     bestEnd = end;
                     bestDistanceToCenter = dist;
@@ -1218,11 +1256,10 @@ public class StyledMapRenderer extends AbstractMapRenderer {
                 dirFlag = Bidi.DIRECTION_RIGHT_TO_LEFT;
             }
         }
-        // only works for text that is completely left-to-right or completely
-        // right-to-left, not bi-directional text
+        // only works for text that is completely left-to-right or completely right-to-left, not bi-directional text
         GlyphVector gv = text.font.layoutGlyphVector(frc, chars, 0, chars.length, dirFlag);
 
-        for (int i=0; i<gv.getNumGlyphs(); ++i) {
+        for (int i = 0; i < gv.getNumGlyphs(); ++i) {
             Rectangle2D rect = gv.getGlyphLogicalBounds(i).getBounds2D();
             double t = tStart + offsetSign * (rect.getX() + rect.getWidth()/2) / pathLength;
             double[] p = pointAt(t, poly, pathLength);
@@ -1244,9 +1281,16 @@ public class StyledMapRenderer extends AbstractMapRenderer {
     }
 
     /**
-     * draw way
+     * draw way. This method allows for two draw styles (line using color, dashes using dashedColor) to be passed.
+     * @param way The way to draw
+     * @param color The base color to draw the way in
+     * @param line The line style to use. This is drawn using color.
+     * @param dashes The dash style to use. This is drawn using dashedColor. <code>null</code> if unused.
+     * @param dashedColor The color of the dashes.
+     * @param offset The offset
      * @param showOrientation show arrows that indicate the technical orientation of
      *              the way (defined by order of nodes)
+     * @param showHeadArrowOnly True if only the arrow at the end of the line but not those on the segments should be displayed.
      * @param showOneway show symbols that indicate the direction of the feature,
      *              e.g. oneway street or waterway
      * @param onewayReversed for oneway=-1 and similar
@@ -1278,7 +1322,7 @@ public class StyledMapRenderer extends AbstractMapRenderer {
                 if (ws.way != way || ws.lowerIndex < offset) {
                     continue;
                 }
-                if(highlightSegs == null) {
+                if (highlightSegs == null) {
                     highlightSegs = new GeneralPath();
                 }
 
@@ -1318,20 +1362,20 @@ public class StyledMapRenderer extends AbstractMapRenderer {
                     /* draw arrow */
                     if (showHeadArrowOnly ? !it.hasNext() : showOrientation) {
                         final double segmentLength = p1.distance(p2);
-                        if (segmentLength != 0.0) {
+                        if (segmentLength != 0) {
                             final double l =  (10. + line.getLineWidth()) / segmentLength;
 
                             final double sx = l * (p1.x - p2.x);
                             final double sy = l * (p1.y - p2.y);
 
-                            orientationArrows.moveTo (p2.x + cosPHI * sx - sinPHI * sy, p2.y + sinPHI * sx + cosPHI * sy);
+                            orientationArrows.moveTo(p2.x + cosPHI * sx - sinPHI * sy, p2.y + sinPHI * sx + cosPHI * sy);
                             orientationArrows.lineTo(p2.x, p2.y);
-                            orientationArrows.lineTo (p2.x + cosPHI * sx + sinPHI * sy, p2.y - sinPHI * sx + cosPHI * sy);
+                            orientationArrows.lineTo(p2.x + cosPHI * sx + sinPHI * sy, p2.y - sinPHI * sx + cosPHI * sy);
                         }
                     }
                     if (showOneway) {
                         final double segmentLength = p1.distance(p2);
-                        if (segmentLength != 0.0) {
+                        if (segmentLength != 0) {
                             final double nx = (p2.x - p1.x) / segmentLength;
                             final double ny = (p2.y - p1.y) / segmentLength;
 
@@ -1340,12 +1384,12 @@ public class StyledMapRenderer extends AbstractMapRenderer {
                             double dist = interval - (wayLength % interval);
 
                             while (dist < segmentLength) {
-                                for (int i=0; i<2; ++i) {
+                                for (int i = 0; i < 2; ++i) {
                                     float onewaySize = i == 0 ? 3f : 2f;
                                     GeneralPath onewayPath = i == 0 ? onewayArrowsCasing : onewayArrows;
 
                                     // scale such that border is 1 px
-                                    final double fac = - (onewayReversed ? -1 : 1) * onewaySize * (1 + sinPHI) / (sinPHI * cosPHI);
+                                    final double fac = -(onewayReversed ? -1 : 1) * onewaySize * (1 + sinPHI) / (sinPHI * cosPHI);
                                     final double sx = nx * fac;
                                     final double sy = ny * fac;
 
@@ -1355,8 +1399,8 @@ public class StyledMapRenderer extends AbstractMapRenderer {
                                     final double y = p1.y + ny * (dist + (onewayReversed ? -1 : 1) * (onewaySize / sinPHI));
 
                                     onewayPath.moveTo(x, y);
-                                    onewayPath.lineTo (x + cosPHI * sx - sinPHI * sy, y + sinPHI * sx + cosPHI * sy);
-                                    onewayPath.lineTo (x + cosPHI * sx + sinPHI * sy, y - sinPHI * sx + cosPHI * sy);
+                                    onewayPath.lineTo(x + cosPHI * sx - sinPHI * sy, y + sinPHI * sx + cosPHI * sy);
+                                    onewayPath.lineTo(x + cosPHI * sx + sinPHI * sy, y - sinPHI * sx + cosPHI * sy);
                                     onewayPath.lineTo(x, y);
                                 }
                                 dist += interval;
@@ -1368,12 +1412,16 @@ public class StyledMapRenderer extends AbstractMapRenderer {
             }
             lastPoint = p;
         }
-        if(way.isHighlighted()) {
+        if (way.isHighlighted()) {
             drawPathHighlight(path, line);
         }
         displaySegments(path, orientationArrows, onewayArrows, onewayArrowsCasing, color, line, dashes, dashedColor);
     }
 
+    /**
+     * Gets the "circum". This is the distance on the map in meters that 100 screen pixels represent.
+     * @return The "circum"
+     */
     public double getCircum() {
         return circum;
     }
@@ -1475,6 +1523,26 @@ public class StyledMapRenderer extends AbstractMapRenderer {
         return null;
     }
 
+    /**
+     * Computes the flags for a given OSM primitive.
+     * @param primitive The primititve to compute the flags for.
+     * @param checkOuterMember <code>true</code> if we should also add {@link #FLAG_OUTERMEMBER_OF_SELECTED}
+     * @return The flag.
+     */
+    public static int computeFlags(OsmPrimitive primitive, boolean checkOuterMember) {
+        if (primitive.isDisabled()) {
+            return FLAG_DISABLED;
+        } else if (primitive.isSelected()) {
+            return FLAG_SELECTED;
+        } else if (checkOuterMember && primitive.isOuterMemberOfSelected()) {
+            return FLAG_OUTERMEMBER_OF_SELECTED;
+        } else if (primitive.isMemberOfSelected()) {
+            return FLAG_MEMBER_OF_SELECTED;
+        } else {
+            return FLAG_NORMAL;
+        }
+    }
+
     private class ComputeStyleListWorker implements Callable<List<StyleRecord>>, Visitor {
         private final List<? extends OsmPrimitive> input;
         private final int from;
@@ -1506,7 +1574,7 @@ public class StyledMapRenderer extends AbstractMapRenderer {
         public List<StyleRecord> call() throws Exception {
             MapCSSStyleSource.STYLE_SOURCE_LOCK.readLock().lock();
             try {
-                for (int i = from; i<to; i++) {
+                for (int i = from; i < to; i++) {
                     OsmPrimitive osm = input.get(i);
                     if (osm.isDrawable()) {
                         osm.accept(this);
@@ -1520,45 +1588,17 @@ public class StyledMapRenderer extends AbstractMapRenderer {
 
         @Override
         public void visit(Node n) {
-            if (n.isDisabled()) {
-                add(n, FLAG_DISABLED);
-            } else if (n.isSelected()) {
-                add(n, FLAG_SELECTED);
-            } else if (n.isMemberOfSelected()) {
-                add(n, FLAG_MEMBER_OF_SELECTED);
-            } else {
-                add(n, FLAG_NORMAL);
-            }
+            add(n, computeFlags(n, false));
         }
 
         @Override
         public void visit(Way w) {
-            if (w.isDisabled()) {
-                add(w, FLAG_DISABLED);
-            } else if (w.isSelected()) {
-                add(w, FLAG_SELECTED);
-            } else if (w.isOuterMemberOfSelected()) {
-                add(w, FLAG_OUTERMEMBER_OF_SELECTED);
-            } else if (w.isMemberOfSelected()) {
-                add(w, FLAG_MEMBER_OF_SELECTED);
-            } else {
-                add(w, FLAG_NORMAL);
-            }
+            add(w, computeFlags(w, true));
         }
 
         @Override
         public void visit(Relation r) {
-            if (r.isDisabled()) {
-                add(r, FLAG_DISABLED);
-            } else if (r.isSelected()) {
-                add(r, FLAG_SELECTED);
-            } else if (r.isOuterMemberOfSelected()) {
-                add(r, FLAG_OUTERMEMBER_OF_SELECTED);
-            } else if (r.isMemberOfSelected()) {
-                add(r, FLAG_MEMBER_OF_SELECTED);
-            } else {
-                add(r, FLAG_NORMAL);
-            }
+            add(r, computeFlags(r, true));
         }
 
         @Override
@@ -1608,7 +1648,7 @@ public class StyledMapRenderer extends AbstractMapRenderer {
             final int bucketsize = Math.max(100, prims.size()/THREAD_POOL.a/3);
             final int noBuckets = (prims.size() + bucketsize - 1) / bucketsize;
             final boolean singleThread = THREAD_POOL.a == 1 || noBuckets == 1;
-            for (int i=0; i<noBuckets; i++) {
+            for (int i = 0; i < noBuckets; i++) {
                 int from = i*bucketsize;
                 int to = Math.min((i+1)*bucketsize, prims.size());
                 List<StyleRecord> target = singleThread ? allStyleElems : new ArrayList<StyleRecord>(to - from);
@@ -1638,13 +1678,14 @@ public class StyledMapRenderer extends AbstractMapRenderer {
     public void render(final DataSet data, boolean renderVirtualNodes, Bounds bounds) {
         BBox bbox = bounds.toBBox();
         getSettings(renderVirtualNodes);
+        boolean benchmark = Main.isTraceEnabled() || Main.pref.getBoolean("mappaint.render.benchmark", false);
 
         data.getReadLock().lock();
         try {
             highlightWaySegments = data.getHighlightedWaySegments();
 
-            long timeStart=0, timePhase1=0, timeFinished;
-            if (Main.isTraceEnabled()) {
+            long timeStart = 0, timePhase1 = 0, timeFinished;
+            if (benchmark) {
                 timeStart = System.currentTimeMillis();
                 System.err.print("BENCHMARK: rendering ");
             }
@@ -1665,9 +1706,9 @@ public class StyledMapRenderer extends AbstractMapRenderer {
             helper.process(relations);
             helper.process(new CompositeList<>(nodes, ways));
 
-            if (Main.isTraceEnabled()) {
+            if (benchmark) {
                 timePhase1 = System.currentTimeMillis();
-                System.err.print("phase 1 (calculate styles): " + (timePhase1 - timeStart) + " ms");
+                System.err.print("phase 1 (calculate styles): " + Utils.getDurationString(timePhase1 - timeStart));
             }
 
             Collections.sort(allStyleElems); // TODO: try parallel sort when switching to Java 8
@@ -1683,9 +1724,10 @@ public class StyledMapRenderer extends AbstractMapRenderer {
                 );
             }
 
-            if (Main.isTraceEnabled()) {
+            if (benchmark) {
                 timeFinished = System.currentTimeMillis();
-                System.err.println("; phase 2 (draw): " + (timeFinished - timePhase1) + " ms; total: " + (timeFinished - timeStart) + " ms" +
+                System.err.println("; phase 2 (draw): " + Utils.getDurationString(timeFinished - timePhase1) +
+                    "; total: " + Utils.getDurationString(timeFinished - timeStart) +
                     " (scale: " + circum + " zoom level: " + Selector.GeneralSelector.scale2level(circum) + ")");
             }
 
diff --git a/src/org/openstreetmap/josm/data/osm/visitor/paint/WireframeMapRenderer.java b/src/org/openstreetmap/josm/data/osm/visitor/paint/WireframeMapRenderer.java
index 46e4df2..ec5b049 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/paint/WireframeMapRenderer.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/paint/WireframeMapRenderer.java
@@ -1,4 +1,4 @@
-/* License: GPL. For details, see LICENSE file. */
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.osm.visitor.paint;
 
 import java.awt.BasicStroke;
@@ -169,7 +169,7 @@ public class WireframeMapRenderer extends AbstractMapRenderer implements Visitor
         List<Way> highlightedWays = new ArrayList<>();
         List<Way> untaggedWays = new ArrayList<>();
 
-        for (final Way way : data.searchWays(bbox)){
+        for (final Way way : data.searchWays(bbox)) {
             if (way.isDrawable() && !ds.isSelected(way) && !way.isDisabledAndHidden()) {
                 if (way.isHighlighted()) {
                     highlightedWays.add(way);
@@ -185,7 +185,7 @@ public class WireframeMapRenderer extends AbstractMapRenderer implements Visitor
         // Display highlighted ways after the other ones (fix #8276)
         List<Way> specialWays = new ArrayList<>(untaggedWays);
         specialWays.addAll(highlightedWays);
-        for (final Way way : specialWays){
+        for (final Way way : specialWays) {
             way.accept(this);
         }
         specialWays.clear();
@@ -199,8 +199,7 @@ public class WireframeMapRenderer extends AbstractMapRenderer implements Visitor
         displaySegments();
 
         for (final OsmPrimitive osm: data.searchNodes(bbox)) {
-            if (osm.isDrawable() && !ds.isSelected(osm) && !osm.isDisabledAndHidden())
-            {
+            if (osm.isDrawable() && !ds.isSelected(osm) && !osm.isDisabledAndHidden()) {
                 osm.accept(this);
             }
         }
@@ -224,7 +223,7 @@ public class WireframeMapRenderer extends AbstractMapRenderer implements Visitor
      * @param c Third value
      * @param d Fourth value
      */
-    private static final int max(int a, int b, int c, int d) {
+    private static int max(int a, int b, int c, int d) {
         return Math.max(Math.max(a, b), Math.max(c, d));
     }
 
@@ -263,9 +262,9 @@ public class WireframeMapRenderer extends AbstractMapRenderer implements Visitor
                 }
             }
 
-            final int size = max((ds.isSelected(n) ? selectedNodeSize : 0),
-                    (isNodeTagged(n) ? taggedNodeSize : 0),
-                    (n.isConnectionNode() ? connectionNodeSize : 0),
+            final int size = max(ds.isSelected(n) ? selectedNodeSize : 0,
+                    isNodeTagged(n) ? taggedNodeSize : 0,
+                    n.isConnectionNode() ? connectionNodeSize : 0,
                     unselectedNodeSize);
 
             final boolean fill = (ds.isSelected(n) && fillSelectedNode) ||
@@ -432,8 +431,8 @@ public class WireframeMapRenderer extends AbstractMapRenderer implements Visitor
                 final double sx = l * (p1.x - p2.x);
                 final double sy = l * (p1.y - p2.y);
 
-                path.lineTo (p2.x + (int) Math.round(cosPHI * sx - sinPHI * sy), p2.y + (int) Math.round(sinPHI * sx + cosPHI * sy));
-                path.moveTo (p2.x + (int) Math.round(cosPHI * sx + sinPHI * sy), p2.y + (int) Math.round(- sinPHI * sx + cosPHI * sy));
+                path.lineTo(p2.x + (int) Math.round(cosPHI * sx - sinPHI * sy), p2.y + (int) Math.round(sinPHI * sx + cosPHI * sy));
+                path.moveTo(p2.x + (int) Math.round(cosPHI * sx + sinPHI * sy), p2.y + (int) Math.round(-sinPHI * sx + cosPHI * sy));
                 path.lineTo(p2.x, p2.y);
             }
         }
diff --git a/src/org/openstreetmap/josm/data/osm/visitor/paint/relations/Multipolygon.java b/src/org/openstreetmap/josm/data/osm/visitor/paint/relations/Multipolygon.java
index 0423dcf..6eef2ea 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/paint/relations/Multipolygon.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/paint/relations/Multipolygon.java
@@ -94,19 +94,19 @@ public class Multipolygon {
             if (Main.pref == null) return;
             Collection<String> literals;
             literals = Main.pref.getCollection(PREF_KEY_OUTER_ROLES);
-            if (literals != null && !literals.isEmpty()){
+            if (literals != null && !literals.isEmpty()) {
                 setNormalized(literals, outerExactRoles);
             }
             literals = Main.pref.getCollection(PREF_KEY_OUTER_ROLE_PREFIXES);
-            if (literals != null && !literals.isEmpty()){
+            if (literals != null && !literals.isEmpty()) {
                 setNormalized(literals, outerRolePrefixes);
             }
             literals = Main.pref.getCollection(PREF_KEY_INNER_ROLES);
-            if (literals != null && !literals.isEmpty()){
+            if (literals != null && !literals.isEmpty()) {
                 setNormalized(literals, innerExactRoles);
             }
             literals = Main.pref.getCollection(PREF_KEY_INNER_ROLE_PREFIXES);
-            if (literals != null && !literals.isEmpty()){
+            if (literals != null && !literals.isEmpty()) {
                 setNormalized(literals, innerRolePrefixes);
             }
         }
@@ -116,7 +116,7 @@ public class Multipolygon {
             if (PREF_KEY_INNER_ROLE_PREFIXES.equals(evt.getKey()) ||
                     PREF_KEY_INNER_ROLES.equals(evt.getKey()) ||
                     PREF_KEY_OUTER_ROLE_PREFIXES.equals(evt.getKey()) ||
-                    PREF_KEY_OUTER_ROLES.equals(evt.getKey())){
+                    PREF_KEY_OUTER_ROLES.equals(evt.getKey())) {
                 initFromPreferences();
             }
         }
@@ -148,10 +148,11 @@ public class Multipolygon {
      * Init a private global matcher object which will listen to preference changes.
      */
     private static MultipolygonRoleMatcher roleMatcher;
+
     private static synchronized MultipolygonRoleMatcher getMultipolygonRoleMatcher() {
         if (roleMatcher == null) {
             roleMatcher = new MultipolygonRoleMatcher();
-            if (Main.pref != null){
+            if (Main.pref != null) {
                 roleMatcher.initFromPreferences();
                 Main.pref.addPreferenceChangeListener(roleMatcher);
             }
@@ -295,13 +296,14 @@ public class Multipolygon {
             if (!nodes.isEmpty()) {
                 DataSet ds = dataSet;
                 // Find DataSet (can be null for several nodes when undoing nodes creation, see #7162)
-                for (Iterator<Node> it = nodes.iterator(); it.hasNext() && ds == null; ) {
+                for (Iterator<Node> it = nodes.iterator(); it.hasNext() && ds == null;) {
                     ds = it.next().getDataSet();
                 }
                 nodes.clear();
                 if (ds == null) {
                     // DataSet still not found. This should not happen, but a warning does no harm
-                    Main.warn("DataSet not found while resetting nodes in Multipolygon. This should not happen, you may report it to JOSM developers.");
+                    Main.warn("DataSet not found while resetting nodes in Multipolygon. " +
+                            "This should not happen, you may report it to JOSM developers.");
                 } else if (wayIds.size() == 1) {
                     Way w = (Way) ds.getPrimitiveById(wayIds.iterator().next(), OsmPrimitiveType.WAY);
                     nodes.addAll(w.getNodes());
@@ -367,7 +369,7 @@ public class Multipolygon {
         load(r);
     }
 
-    private final void load(Relation r) {
+    private void load(Relation r) {
         MultipolygonRoleMatcher matcher = getMultipolygonRoleMatcher();
 
         // Fill inner and outer list with valid ways
@@ -553,7 +555,7 @@ public class Multipolygon {
         return result;
     }
 
-    private final void addInnerToOuters(List<PolyData> innerPolygons, List<PolyData> outerPolygons)  {
+    private void addInnerToOuters(List<PolyData> innerPolygons, List<PolyData> outerPolygons)  {
 
         if (innerPolygons.isEmpty()) {
             combinedPolygons.addAll(outerPolygons);
diff --git a/src/org/openstreetmap/josm/data/osm/visitor/paint/relations/MultipolygonCache.java b/src/org/openstreetmap/josm/data/osm/visitor/paint/relations/MultipolygonCache.java
index 063f045..20874d4 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/paint/relations/MultipolygonCache.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/paint/relations/MultipolygonCache.java
@@ -3,10 +3,10 @@ package org.openstreetmap.josm.data.osm.visitor.paint.relations;
 
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.SelectionChangedListener;
@@ -46,7 +46,7 @@ public final class MultipolygonCache implements DataSetListener, LayerChangeList
     private final Collection<PolyData> selectedPolyData;
 
     private MultipolygonCache() {
-        this.cache = new HashMap<>();
+        this.cache = new ConcurrentHashMap<>(); // see ticket 11833
         this.selectedPolyData = new ArrayList<>();
         Main.addProjectionChangeListener(this);
         DataSet.addSelectionListener(this);
@@ -57,7 +57,7 @@ public final class MultipolygonCache implements DataSetListener, LayerChangeList
      * Replies the unique instance.
      * @return the unique instance
      */
-    public static final MultipolygonCache getInstance() {
+    public static MultipolygonCache getInstance() {
         return INSTANCE;
     }
 
@@ -67,7 +67,7 @@ public final class MultipolygonCache implements DataSetListener, LayerChangeList
      * @param r The multipolygon relation
      * @return A multipolygon object for the given relation, or {@code null}
      */
-    public final Multipolygon get(NavigatableComponent nc, Relation r) {
+    public Multipolygon get(NavigatableComponent nc, Relation r) {
         return get(nc, r, false);
     }
 
@@ -78,16 +78,16 @@ public final class MultipolygonCache implements DataSetListener, LayerChangeList
      * @param forceRefresh if {@code true}, a new object will be created even of present in cache
      * @return A multipolygon object for the given relation, or {@code null}
      */
-    public final Multipolygon get(NavigatableComponent nc, Relation r, boolean forceRefresh) {
+    public Multipolygon get(NavigatableComponent nc, Relation r, boolean forceRefresh) {
         Multipolygon multipolygon = null;
         if (nc != null && r != null) {
             Map<DataSet, Map<Relation, Multipolygon>> map1 = cache.get(nc);
             if (map1 == null) {
-                cache.put(nc, map1 = new HashMap<>());
+                cache.put(nc, map1 = new ConcurrentHashMap<>());
             }
             Map<Relation, Multipolygon> map2 = map1.get(r.getDataSet());
             if (map2 == null) {
-                map1.put(r.getDataSet(), map2 = new HashMap<>());
+                map1.put(r.getDataSet(), map2 = new ConcurrentHashMap<>());
             }
             multipolygon = map2.get(r);
             if (multipolygon == null || forceRefresh) {
@@ -106,7 +106,7 @@ public final class MultipolygonCache implements DataSetListener, LayerChangeList
      * Clears the cache for the given navigatable component.
      * @param nc the navigatable component
      */
-    public final void clear(NavigatableComponent nc) {
+    public void clear(NavigatableComponent nc) {
         Map<DataSet, Map<Relation, Multipolygon>> map = cache.remove(nc);
         if (map != null) {
             map.clear();
@@ -118,7 +118,7 @@ public final class MultipolygonCache implements DataSetListener, LayerChangeList
      * Clears the cache for the given dataset.
      * @param ds the data set
      */
-    public final void clear(DataSet ds) {
+    public void clear(DataSet ds) {
         for (Map<DataSet, Map<Relation, Multipolygon>> map1 : cache.values()) {
             Map<Relation, Multipolygon> map2 = map1.remove(ds);
             if (map2 != null) {
@@ -131,11 +131,11 @@ public final class MultipolygonCache implements DataSetListener, LayerChangeList
     /**
      * Clears the whole cache.
      */
-    public final void clear() {
+    public void clear() {
         cache.clear();
     }
 
-    private final Collection<Map<Relation, Multipolygon>> getMapsFor(DataSet ds) {
+    private Collection<Map<Relation, Multipolygon>> getMapsFor(DataSet ds) {
         List<Map<Relation, Multipolygon>> result = new ArrayList<>();
         for (Map<DataSet, Map<Relation, Multipolygon>> map : cache.values()) {
             Map<Relation, Multipolygon> map2 = map.get(ds);
@@ -146,20 +146,20 @@ public final class MultipolygonCache implements DataSetListener, LayerChangeList
         return result;
     }
 
-    private static final boolean isMultipolygon(OsmPrimitive p) {
+    private static boolean isMultipolygon(OsmPrimitive p) {
         return p instanceof Relation && ((Relation) p).isMultipolygon();
     }
 
-    private final void updateMultipolygonsReferringTo(AbstractDatasetChangedEvent event) {
+    private void updateMultipolygonsReferringTo(AbstractDatasetChangedEvent event) {
         updateMultipolygonsReferringTo(event, event.getPrimitives(), event.getDataset());
     }
 
-    private final void updateMultipolygonsReferringTo(
+    private void updateMultipolygonsReferringTo(
             final AbstractDatasetChangedEvent event, Collection<? extends OsmPrimitive> primitives, DataSet ds) {
         updateMultipolygonsReferringTo(event, primitives, ds, null);
     }
 
-    private final Collection<Map<Relation, Multipolygon>> updateMultipolygonsReferringTo(
+    private Collection<Map<Relation, Multipolygon>> updateMultipolygonsReferringTo(
             AbstractDatasetChangedEvent event, Collection<? extends OsmPrimitive> primitives,
             DataSet ds, Collection<Map<Relation, Multipolygon>> initialMaps) {
         Collection<Map<Relation, Multipolygon>> maps = initialMaps;
@@ -188,7 +188,7 @@ public final class MultipolygonCache implements DataSetListener, LayerChangeList
         return maps;
     }
 
-    private final void processEvent(AbstractDatasetChangedEvent event, Relation r, Collection<Map<Relation, Multipolygon>> maps) {
+    private void processEvent(AbstractDatasetChangedEvent event, Relation r, Collection<Map<Relation, Multipolygon>> maps) {
         if (event instanceof NodeMovedEvent || event instanceof WayNodesChangedEvent) {
             dispatchEvent(event, r, maps);
         } else if (event instanceof PrimitivesRemovedEvent) {
@@ -201,7 +201,7 @@ public final class MultipolygonCache implements DataSetListener, LayerChangeList
         }
     }
 
-    private final void dispatchEvent(AbstractDatasetChangedEvent event, Relation r, Collection<Map<Relation, Multipolygon>> maps) {
+    private void dispatchEvent(AbstractDatasetChangedEvent event, Relation r, Collection<Map<Relation, Multipolygon>> maps) {
         for (Map<Relation, Multipolygon> map : maps) {
             Multipolygon m = map.get(r);
             if (m != null) {
@@ -209,14 +209,14 @@ public final class MultipolygonCache implements DataSetListener, LayerChangeList
                     if (event instanceof NodeMovedEvent) {
                         pd.nodeMoved((NodeMovedEvent) event);
                     } else if (event instanceof WayNodesChangedEvent) {
-                        pd.wayNodesChanged((WayNodesChangedEvent)event);
+                        pd.wayNodesChanged((WayNodesChangedEvent) event);
                     }
                 }
             }
         }
     }
 
-    private final void removeMultipolygonFrom(Relation r, Collection<Map<Relation, Multipolygon>> maps) {
+    private void removeMultipolygonFrom(Relation r, Collection<Map<Relation, Multipolygon>> maps) {
         for (Map<Relation, Multipolygon> map : maps) {
             map.remove(r);
         }
diff --git a/src/org/openstreetmap/josm/data/preferences/ColorProperty.java b/src/org/openstreetmap/josm/data/preferences/ColorProperty.java
index fbdf3ae..8c1794b 100644
--- a/src/org/openstreetmap/josm/data/preferences/ColorProperty.java
+++ b/src/org/openstreetmap/josm/data/preferences/ColorProperty.java
@@ -2,6 +2,7 @@
 package org.openstreetmap.josm.data.preferences;
 
 import java.awt.Color;
+import java.util.Locale;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Preferences.ColorKey;
@@ -13,7 +14,7 @@ import org.openstreetmap.josm.data.Preferences.ColorKey;
 public class ColorProperty extends AbstractProperty<Color> implements ColorKey {
 
     private final String name;
-    
+
     /**
      * Constructs a new {@code ColorProperty}.
      * @param colName The color name
@@ -23,7 +24,7 @@ public class ColorProperty extends AbstractProperty<Color> implements ColorKey {
         super(getColorKey(colName), defaultValue);
         this.name = colName;
     }
-    
+
     @Override
     public Color get() {
         return Main.pref.getColor(this);
@@ -33,14 +34,14 @@ public class ColorProperty extends AbstractProperty<Color> implements ColorKey {
     public boolean put(Color value) {
         return Main.pref.putColor(getColorKey(name), value);
     }
-    
+
     /**
      * Replies the color key used in JOSM preferences for this property.
      * @param colName The color name
      * @return The color key for this property
      */
     public static String getColorKey(String colName) {
-        return colName == null ? null : colName.toLowerCase().replaceAll("[^a-z0-9]+",".");
+        return colName == null ? null : colName.toLowerCase(Locale.ENGLISH).replaceAll("[^a-z0-9]+", ".");
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/data/preferences/IntegerProperty.java b/src/org/openstreetmap/josm/data/preferences/IntegerProperty.java
index b5962e1..342b3ba 100644
--- a/src/org/openstreetmap/josm/data/preferences/IntegerProperty.java
+++ b/src/org/openstreetmap/josm/data/preferences/IntegerProperty.java
@@ -5,6 +5,7 @@ import org.openstreetmap.josm.Main;
 
 /**
  * A property containing an {@code Integer} value.
+ * @since 3246
  */
 public class IntegerProperty extends AbstractProperty<Integer> {
 
@@ -34,12 +35,10 @@ public class IntegerProperty extends AbstractProperty<Integer> {
      *         false - parsing failed or preference value has not changed
      */
     public boolean parseAndPut(String value) {
-        Integer intVal;
         try {
-            intVal = Integer.parseInt(value);
+            return put(Integer.valueOf(value));
         } catch (NumberFormatException ex) {
             return false;
         }
-        return put(intVal);
     }
 }
diff --git a/src/org/openstreetmap/josm/data/projection/AbstractProjection.java b/src/org/openstreetmap/josm/data/projection/AbstractProjection.java
index d6483d8..ef1e217 100644
--- a/src/org/openstreetmap/josm/data/projection/AbstractProjection.java
+++ b/src/org/openstreetmap/josm/data/projection/AbstractProjection.java
@@ -25,10 +25,10 @@ public abstract class AbstractProjection implements Projection {
     protected Ellipsoid ellps;
     protected Datum datum;
     protected Proj proj;
-    protected double x_0 = 0.0;     /* false easting (in meters) */
-    protected double y_0 = 0.0;     /* false northing (in meters) */
-    protected double lon_0 = 0.0;   /* central meridian */
-    protected double k_0 = 1.0;     /* general scale factor */
+    protected double x0 = 0.0;     /* false easting (in meters) */
+    protected double y0 = 0.0;     /* false northing (in meters) */
+    protected double lon0 = 0.0;   /* central meridian */
+    protected double k0 = 1.0;     /* general scale factor */
 
     public final Ellipsoid getEllipsoid() {
         return ellps;
@@ -47,32 +47,32 @@ public abstract class AbstractProjection implements Projection {
     }
 
     public final double getFalseEasting() {
-        return x_0;
+        return x0;
     }
 
     public final double getFalseNorthing() {
-        return y_0;
+        return y0;
     }
 
     public final double getCentralMeridian() {
-        return lon_0;
+        return lon0;
     }
 
     public final double getScaleFactor() {
-        return k_0;
+        return k0;
     }
 
     @Override
     public EastNorth latlon2eastNorth(LatLon ll) {
         ll = datum.fromWGS84(ll);
-        double[] en = proj.project(Math.toRadians(ll.lat()), Math.toRadians(ll.lon() - lon_0));
-        return new EastNorth(ellps.a * k_0 * en[0] + x_0, ellps.a * k_0 * en[1] + y_0);
+        double[] en = proj.project(Math.toRadians(ll.lat()), Math.toRadians(ll.lon() - lon0));
+        return new EastNorth(ellps.a * k0 * en[0] + x0, ellps.a * k0 * en[1] + y0);
     }
 
     @Override
     public LatLon eastNorth2latlon(EastNorth en) {
-        double[] latlon_rad = proj.invproject((en.east() - x_0) / ellps.a / k_0, (en.north() - y_0) / ellps.a / k_0);
-        LatLon ll = new LatLon(Math.toDegrees(latlon_rad[0]), Math.toDegrees(latlon_rad[1]) + lon_0);
+        double[] latlon_rad = proj.invproject((en.east() - x0) / ellps.a / k0, (en.north() - y0) / ellps.a / k0);
+        LatLon ll = new LatLon(Math.toDegrees(latlon_rad[0]), Math.toDegrees(latlon_rad[1]) + lon0);
         return datum.toWGS84(ll);
     }
 
diff --git a/src/org/openstreetmap/josm/data/projection/CustomProjection.java b/src/org/openstreetmap/josm/data/projection/CustomProjection.java
index b9140ad..3aa378f 100644
--- a/src/org/openstreetmap/josm/data/projection/CustomProjection.java
+++ b/src/org/openstreetmap/josm/data/projection/CustomProjection.java
@@ -7,6 +7,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -34,6 +35,9 @@ import org.openstreetmap.josm.tools.Utils;
  */
 public class CustomProjection extends AbstractProjection {
 
+    private static final double METER_PER_UNIT_DEGREE = 2 * Math.PI * 6370997 / 360;
+    private static final Map<String, Double> UNITS_TO_METERS = getUnitsToMeters();
+
     /**
      * pref String that defines the projection
      *
@@ -44,6 +48,8 @@ public class CustomProjection extends AbstractProjection {
     protected String code;
     protected String cacheDir;
     protected Bounds bounds;
+    private double metersPerUnit = METER_PER_UNIT_DEGREE; // default to degrees
+    private String axis = "enu"; // default axis orientation is East, North, Up
 
     /**
      * Proj4-like projection parameters. See <a href="https://trac.osgeo.org/proj/wiki/GenParms">reference</a>.
@@ -88,10 +94,18 @@ public class CustomProjection extends AbstractProjection {
         /** the exact proj.4 string will be preserved in the WKT representation */
         wktext("wktext", false),  // ignored
         /** meters, US survey feet, etc. */
-        units("units", true),     // ignored
+        units("units", true),
         /** Don't use the /usr/share/proj/proj_def.dat defaults file */
         no_defs("no_defs", false),
         init("init", true),
+        /** crs units to meter multiplier */
+        to_meter("to_meter", true),
+        /** definition of axis for projection */
+        axis("axis", true),
+        /** UTM zone */
+        zone("zone", true),
+        /** indicate southern hemisphere for UTM */
+        south("south", false),
         // JOSM extensions, not present in PROJ.4
         wmssrs("wmssrs", true),
         bounds("bounds", true);
@@ -102,7 +116,7 @@ public class CustomProjection extends AbstractProjection {
         public final boolean hasValue;
 
         /** Map of all parameters by key */
-        public static final Map<String, Param> paramsByKey = new HashMap<>();
+        static final Map<String, Param> paramsByKey = new ConcurrentHashMap<>();
         static {
             for (Param p : Param.values()) {
                 paramsByKey.put(p.key, p);
@@ -119,11 +133,13 @@ public class CustomProjection extends AbstractProjection {
      * Constructs a new empty {@code CustomProjection}.
      */
     public CustomProjection() {
+        // contents can be set later with update()
     }
 
     /**
      * Constructs a new {@code CustomProjection} with given parameters.
-     * @param pref String containing projection parameters (ex: "+proj=tmerc +lon_0=-3 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=-8,-5,2,85")
+     * @param pref String containing projection parameters
+     * (ex: "+proj=tmerc +lon_0=-3 +k_0=0.9996 +x_0=500000 +ellps=WGS84 +datum=WGS84 +bounds=-8,-5,2,85")
      */
     public CustomProjection(String pref) {
         this(null, null, pref, null);
@@ -171,22 +187,43 @@ public class CustomProjection extends AbstractProjection {
             Map<String, String> parameters = parseParameterList(pref);
             ellps = parseEllipsoid(parameters);
             datum = parseDatum(parameters, ellps);
+            if (ellps == null) {
+                ellps = datum.getEllipsoid();
+            }
             proj = parseProjection(parameters, ellps);
+            // "utm" is a shortcut for a set of parameters
+            if ("utm".equals(parameters.get(Param.proj.key))) {
+                String zoneStr = parameters.get(Param.zone.key);
+                Integer zone;
+                if (zoneStr == null)
+                    throw new ProjectionConfigurationException(tr("UTM projection (''+proj=utm'') requires ''+zone=...'' parameter."));
+                try {
+                    zone = Integer.parseInt(zoneStr);
+                } catch (NumberFormatException e) {
+                    zone = null;
+                }
+                if (zone == null || zone < 1 || zone > 60)
+                    throw new ProjectionConfigurationException(tr("Expected integer value in range 1-60 for ''+zone=...'' parameter."));
+                this.lon0 = 6 * zone - 183;
+                this.k0 = 0.9996;
+                this.x0 = 500000;
+                this.y0 = parameters.containsKey(Param.south.key) ? 10000000 : 0;
+            }
             String s = parameters.get(Param.x_0.key);
             if (s != null) {
-                this.x_0 = parseDouble(s, Param.x_0.key);
+                this.x0 = parseDouble(s, Param.x_0.key);
             }
             s = parameters.get(Param.y_0.key);
             if (s != null) {
-                this.y_0 = parseDouble(s, Param.y_0.key);
+                this.y0 = parseDouble(s, Param.y_0.key);
             }
             s = parameters.get(Param.lon_0.key);
             if (s != null) {
-                this.lon_0 = parseAngle(s, Param.lon_0.key);
+                this.lon0 = parseAngle(s, Param.lon_0.key);
             }
             s = parameters.get(Param.k_0.key);
             if (s != null) {
-                this.k_0 = parseDouble(s, Param.k_0.key);
+                this.k0 = parseDouble(s, Param.k_0.key);
             }
             s = parameters.get(Param.bounds.key);
             if (s != null) {
@@ -196,6 +233,23 @@ public class CustomProjection extends AbstractProjection {
             if (s != null) {
                 this.code = s;
             }
+            s = parameters.get(Param.units.key);
+            if (s != null) {
+                s = Utils.strip(s, "\"");
+                if (UNITS_TO_METERS.containsKey(s)) {
+                    this.metersPerUnit = UNITS_TO_METERS.get(s);
+                } else {
+                    Main.warn("No metersPerUnit found for: " + s);
+                }
+            }
+            s = parameters.get(Param.to_meter.key);
+            if (s != null) {
+                this.metersPerUnit = parseDouble(s, Param.to_meter.key);
+            }
+            s = parameters.get(Param.axis.key);
+            if (s != null) {
+                this.axis  = s;
+            }
         }
     }
 
@@ -291,13 +345,23 @@ public class CustomProjection extends AbstractProjection {
                 parameters.containsKey(Param.f.key) ||
                 parameters.containsKey(Param.b.key))
             throw new ProjectionConfigurationException(tr("Combination of ellipsoid parameters is not supported."));
-        if (parameters.containsKey(Param.no_defs.key))
-            throw new ProjectionConfigurationException(tr("Ellipsoid required (+ellps=* or +a=*, +b=*)"));
-        // nothing specified, use WGS84 as default
-        return Ellipsoid.WGS84;
+        return null;
     }
 
     public Datum parseDatum(Map<String, String> parameters, Ellipsoid ellps) throws ProjectionConfigurationException {
+        String datumId = parameters.get(Param.datum.key);
+        if (datumId != null) {
+            Datum datum = Projections.getDatum(datumId);
+            if (datum == null) throw new ProjectionConfigurationException(tr("Unknown datum identifier: ''{0}''", datumId));
+            return datum;
+        }
+        if (ellps == null) {
+            if (parameters.containsKey(Param.no_defs.key))
+                throw new ProjectionConfigurationException(tr("Ellipsoid required (+ellps=* or +a=*, +b=*)"));
+            // nothing specified, use WGS84 as default
+            ellps = Ellipsoid.WGS84;
+        }
+
         String nadgridsId = parameters.get(Param.nadgrids.key);
         if (nadgridsId != null) {
             if (nadgridsId.startsWith("@")) {
@@ -315,12 +379,6 @@ public class CustomProjection extends AbstractProjection {
         if (towgs84 != null)
             return parseToWGS84(towgs84, ellps);
 
-        String datumId = parameters.get(Param.datum.key);
-        if (datumId != null) {
-            Datum datum = Projections.getDatum(datumId);
-            if (datum == null) throw new ProjectionConfigurationException(tr("Unknown datum identifier: ''{0}''", datumId));
-            return datum;
-        }
         if (parameters.containsKey(Param.no_defs.key))
             throw new ProjectionConfigurationException(tr("Datum required (+datum=*, +towgs84=* or +nadgrids=*)"));
         return new CentricDatum(null, null, ellps);
@@ -334,14 +392,14 @@ public class CustomProjection extends AbstractProjection {
         List<Double> towgs84Param = new ArrayList<>();
         for (String str : numStr) {
             try {
-                towgs84Param.add(Double.parseDouble(str));
+                towgs84Param.add(Double.valueOf(str));
             } catch (NumberFormatException e) {
                 throw new ProjectionConfigurationException(tr("Unable to parse value of parameter ''towgs84'' (''{0}'')", str), e);
             }
         }
         boolean isCentric = true;
         for (Double param : towgs84Param) {
-            if (param != 0.0) {
+            if (param != 0) {
                 isCentric = false;
                 break;
             }
@@ -349,8 +407,8 @@ public class CustomProjection extends AbstractProjection {
         if (isCentric)
             return new CentricDatum(null, null, ellps);
         boolean is3Param = true;
-        for (int i = 3; i<towgs84Param.size(); i++) {
-            if (towgs84Param.get(i) != 0.0) {
+        for (int i = 3; i < towgs84Param.size(); i++) {
+            if (towgs84Param.get(i) != 0) {
                 is3Param = false;
                 break;
             }
@@ -375,6 +433,10 @@ public class CustomProjection extends AbstractProjection {
         String id = parameters.get(Param.proj.key);
         if (id == null) throw new ProjectionConfigurationException(tr("Projection required (+proj=*)"));
 
+        // "utm" is not a real projection, but a shortcut for a set of parameters
+        if ("utm".equals(id)) {
+            id = "tmerc";
+        }
         Proj proj =  Projections.getBaseProjection(id);
         if (proj == null) throw new ProjectionConfigurationException(tr("Unknown projection identifier: ''{0}''", id));
 
@@ -385,15 +447,15 @@ public class CustomProjection extends AbstractProjection {
         String s;
         s = parameters.get(Param.lat_0.key);
         if (s != null) {
-            projParams.lat_0 = parseAngle(s, Param.lat_0.key);
+            projParams.lat0 = parseAngle(s, Param.lat_0.key);
         }
         s = parameters.get(Param.lat_1.key);
         if (s != null) {
-            projParams.lat_1 = parseAngle(s, Param.lat_1.key);
+            projParams.lat1 = parseAngle(s, Param.lat_1.key);
         }
         s = parameters.get(Param.lat_2.key);
         if (s != null) {
-            projParams.lat_2 = parseAngle(s, Param.lat_2.key);
+            projParams.lat2 = parseAngle(s, Param.lat_2.key);
         }
         proj.initialize(projParams);
         return proj;
@@ -411,7 +473,7 @@ public class CustomProjection extends AbstractProjection {
 
     public static double parseDouble(Map<String, String> parameters, String parameterName) throws ProjectionConfigurationException {
         if (!parameters.containsKey(parameterName))
-            throw new IllegalArgumentException(tr("Unknown parameter ''{0}''", parameterName));
+            throw new ProjectionConfigurationException(tr("Unknown parameter ''{0}''", parameterName));
         String doubleStr = parameters.get(parameterName);
         if (doubleStr == null)
             throw new ProjectionConfigurationException(
@@ -495,7 +557,7 @@ public class CustomProjection extends AbstractProjection {
     public Integer getEpsgCode() {
         if (code != null && code.startsWith("EPSG:")) {
             try {
-                return Integer.parseInt(code.substring(5));
+                return Integer.valueOf(code.substring(5));
             } catch (NumberFormatException e) {
                 Main.warn(e);
             }
@@ -525,4 +587,42 @@ public class CustomProjection extends AbstractProjection {
     public String toString() {
         return name != null ? name : tr("Custom Projection");
     }
+
+    @Override
+    public double getMetersPerUnit() {
+        return metersPerUnit;
+    }
+
+    @Override
+    public boolean switchXY() {
+        // TODO: support for other axis orientation such as West South, and Up Down
+        return this.axis.startsWith("ne");
+    }
+
+    private static Map<String, Double> getUnitsToMeters() {
+        Map<String, Double> ret = new ConcurrentHashMap<>();
+        ret.put("km", 1000d);
+        ret.put("m", 1d);
+        ret.put("dm", 1d/10);
+        ret.put("cm", 1d/100);
+        ret.put("mm", 1d/1000);
+        ret.put("kmi", 1852.0);
+        ret.put("in", 0.0254);
+        ret.put("ft", 0.3048);
+        ret.put("yd", 0.9144);
+        ret.put("mi", 1609.344);
+        ret.put("fathom", 1.8288);
+        ret.put("chain", 20.1168);
+        ret.put("link", 0.201168);
+        ret.put("us-in", 1d/39.37);
+        ret.put("us-ft", 0.304800609601219);
+        ret.put("us-yd", 0.914401828803658);
+        ret.put("us-ch", 20.11684023368047);
+        ret.put("us-mi", 1609.347218694437);
+        ret.put("ind-yd", 0.91439523);
+        ret.put("ind-ft", 0.30479841);
+        ret.put("ind-ch", 20.11669506);
+        ret.put("degree", METER_PER_UNIT_DEGREE);
+        return ret;
+    }
 }
diff --git a/src/org/openstreetmap/josm/data/projection/Ellipsoid.java b/src/org/openstreetmap/josm/data/projection/Ellipsoid.java
index 7cca737..1f51a5d 100644
--- a/src/org/openstreetmap/josm/data/projection/Ellipsoid.java
+++ b/src/org/openstreetmap/josm/data/projection/Ellipsoid.java
@@ -4,7 +4,6 @@
  * License: GPL. For details, see LICENSE file.
  * Copyright (C) 2002 Johan Montagnat (johan at creatis.insa-lyon.fr)
  */
-
 package org.openstreetmap.josm.data.projection;
 
 import org.openstreetmap.josm.data.coor.LatLon;
@@ -15,25 +14,40 @@ import org.openstreetmap.josm.data.coor.LatLon;
 public final class Ellipsoid {
 
     /**
-     * Clarke 1866 ellipsoid
+     * Airy 1830
      */
-    public static final Ellipsoid clarke1866 = Ellipsoid.create_a_b(6378206.4, 6356583.8);
+    public static final Ellipsoid Airy = Ellipsoid.create_a_b(6377563.396, 6356256.910);
 
     /**
-     * Clarke 1880 IGN (French national geographic institute)
+     * Modified Airy 1849
      */
-    public static final Ellipsoid clarkeIGN = Ellipsoid.create_a_b(6378249.2, 6356515.0);
+    public static final Ellipsoid AiryMod = Ellipsoid.create_a_b(6377340.189, 6356034.446);
 
     /**
-     * Hayford's ellipsoid 1909 (ED50 system)<br>
-     * Proj.4 code: intl
+     * Australian National Spheroid (Australian Natl & S. Amer. 1969)
+     * same as GRS67 Modified
+     */
+    public static final Ellipsoid AustSA = Ellipsoid.create_a_rf(6378160.0, 298.25);
+
+    /**
+     * Bessel 1841 ellipsoid
+     */
+    public static final Ellipsoid Bessel1841 = Ellipsoid.create_a_rf(6377397.155, 299.1528128);
+
+    /**
+     * Clarke 1866 ellipsoid
+     */
+    public static final Ellipsoid Clarke1866 = Ellipsoid.create_a_b(6378206.4, 6356583.8);
+
+    /**
+     * Clarke 1880 IGN (French national geographic institute)
      */
-    public static final Ellipsoid hayford = Ellipsoid.create_a_rf(6378388.0, 297.0);
+    public static final Ellipsoid ClarkeIGN = Ellipsoid.create_a_b(6378249.2, 6356515.0);
 
     /**
      * GRS67 ellipsoid
      */
-    public static final Ellipsoid GRS67 = Ellipsoid.create_a_rf(6378160.0, 298.247167472);
+    public static final Ellipsoid GRS67 = Ellipsoid.create_a_rf(6378160.0, 298.247167427);
 
     /**
      * GRS80 ellipsoid
@@ -41,14 +55,32 @@ public final class Ellipsoid {
     public static final Ellipsoid GRS80 = Ellipsoid.create_a_rf(6378137.0, 298.257222101);
 
     /**
-     * WGS84 ellipsoid
+     * Hayford's ellipsoid 1909 (ED50 system)
+     * Also known as International 1924
+     * Proj.4 code: intl
      */
-    public static final Ellipsoid WGS84 = Ellipsoid.create_a_rf(6378137.0, 298.257223563);
+    public static final Ellipsoid Hayford = Ellipsoid.create_a_rf(6378388.0, 297.0);
 
     /**
-     * Bessel 1841 ellipsoid
+     * Helmert 1906
      */
-    public static final Ellipsoid Bessel1841 = Ellipsoid.create_a_rf(6377397.155, 299.1528128);
+    public static final Ellipsoid Helmert = Ellipsoid.create_a_rf(6378200.0, 298.3);
+
+    /**
+     * Krassowsky 1940 ellipsoid
+     */
+    public static final Ellipsoid Krassowsky = Ellipsoid.create_a_rf(6378245.0, 298.3);
+
+    /**
+     * WGS72 ellipsoid
+     */
+    public static final Ellipsoid WGS72 = Ellipsoid.create_a_rf(6378135.0, 298.26);
+
+    /**
+     * WGS84 ellipsoid
+     */
+    public static final Ellipsoid WGS84 = Ellipsoid.create_a_rf(6378137.0, 298.257223563);
+
 
     /**
      * half long axis
@@ -218,7 +250,7 @@ public final class Ellipsoid {
     public double latitudeIsometric(double phi, double e) {
         double v1 = 1-e*Math.sin(phi);
         double v2 = 1+e*Math.sin(phi);
-        return Math.log(Math.tan(Math.PI/4+phi/2)*Math.pow(v1/v2,e/2));
+        return Math.log(Math.tan(Math.PI/4+phi/2)*Math.pow(v1/v2, e/2));
     }
 
     /**
@@ -229,7 +261,7 @@ public final class Ellipsoid {
     public double latitudeIsometric(double phi) {
         double v1 = 1-e*Math.sin(phi);
         double v2 = 1+e*Math.sin(phi);
-        return Math.log(Math.tan(Math.PI/4+phi/2)*Math.pow(v1/v2,e/2));
+        return Math.log(Math.tan(Math.PI/4+phi/2)*Math.pow(v1/v2, e/2));
     }
 
     /**
@@ -242,11 +274,11 @@ public final class Ellipsoid {
         double lat0 = 2*Math.atan(Math.exp(latIso))-Math.PI/2;
         double lati = lat0;
         double lati1 = 1.0; // random value to start the iterative processus
-        while(Math.abs(lati1-lati)>=epsilon) {
+        while (Math.abs(lati1-lati) >= epsilon) {
             lati = lati1;
             double v1 = 1+e*Math.sin(lati);
             double v2 = 1-e*Math.sin(lati);
-            lati1 = 2*Math.atan(Math.pow(v1/v2,e/2)*Math.exp(latIso))-Math.PI/2;
+            lati1 = 2*Math.atan(Math.pow(v1/v2, e/2)*Math.exp(latIso))-Math.PI/2;
         }
         return lati1;
     }
diff --git a/src/org/openstreetmap/josm/data/projection/Projection.java b/src/org/openstreetmap/josm/data/projection/Projection.java
index e0e8227..606be80 100644
--- a/src/org/openstreetmap/josm/data/projection/Projection.java
+++ b/src/org/openstreetmap/josm/data/projection/Projection.java
@@ -67,4 +67,23 @@ public interface Projection {
      * @return the supported lat/lon rectangle for this projection
      */
     Bounds getWorldBoundsLatLon();
+
+    /**
+     * Get the number of meters per unit of this projection. This more
+     * defines the scale of the map, than real conversion of unit to meters
+     * as this value is more less correct only along great circles.
+     *
+     * Used by WMTS to properly scale tiles
+     * @return meters per unit of projection
+     *
+     */
+    double getMetersPerUnit();
+
+    /**
+     * Does this projection natural order of coordinates is North East,
+     * instead of East North
+     *
+     * @return true if natural order of coordinates is North East, false if East North
+     */
+    boolean switchXY();
 }
diff --git a/src/org/openstreetmap/josm/data/projection/ProjectionConfigurationException.java b/src/org/openstreetmap/josm/data/projection/ProjectionConfigurationException.java
index 49b04e0..008a83c 100644
--- a/src/org/openstreetmap/josm/data/projection/ProjectionConfigurationException.java
+++ b/src/org/openstreetmap/josm/data/projection/ProjectionConfigurationException.java
@@ -1,22 +1,43 @@
-//License: GPL. For details, see LICENSE file.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.projection;
 
 public class ProjectionConfigurationException extends Exception {
 
+    /**
+     * Constructs a new {@code ProjectionConfigurationException}.
+     */
     public ProjectionConfigurationException() {
         super();
     }
 
+    /**
+     * Constructs a new {@code ProjectionConfigurationException}.
+     * @param  message the detail message (which is saved for later retrieval
+     *         by the {@link #getMessage()} method).
+     * @param  cause the cause (which is saved for later retrieval by the
+     *         {@link #getCause()} method).  (A <tt>null</tt> value is
+     *         permitted, and indicates that the cause is nonexistent or unknown.)
+     */
     public ProjectionConfigurationException(String message, Throwable cause) {
         super(message, cause);
     }
 
+    /**
+     * Constructs a new {@code ProjectionConfigurationException}.
+     * @param   message   the detail message. The detail message is saved for
+     *          later retrieval by the {@link #getMessage()} method.
+     */
     public ProjectionConfigurationException(String message) {
         super(message);
     }
 
+    /**
+     * Constructs a new {@code ProjectionConfigurationException}.
+     * @param  cause the cause (which is saved for later retrieval by the
+     *         {@link #getCause()} method).  (A <tt>null</tt> value is
+     *         permitted, and indicates that the cause is nonexistent or unknown.)
+     */
     public ProjectionConfigurationException(Throwable cause) {
         super(cause);
     }
-
 }
diff --git a/src/org/openstreetmap/josm/data/projection/Projections.java b/src/org/openstreetmap/josm/data/projection/Projections.java
index bcbc513..d8621b8 100644
--- a/src/org/openstreetmap/josm/data/projection/Projections.java
+++ b/src/org/openstreetmap/josm/data/projection/Projections.java
@@ -6,10 +6,13 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
 import java.util.regex.Matcher;
@@ -34,6 +37,7 @@ import org.openstreetmap.josm.gui.preferences.projection.ProjectionChoice;
 import org.openstreetmap.josm.gui.preferences.projection.ProjectionPreference;
 import org.openstreetmap.josm.io.CachedFile;
 import org.openstreetmap.josm.tools.Pair;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
  * Class to handle projections
@@ -60,11 +64,11 @@ public final class Projections {
      *
      * should be compatible to PROJ.4
      */
-    public static final Map<String, ProjFactory> projs = new HashMap<>();
-    public static final Map<String, Ellipsoid> ellipsoids = new HashMap<>();
-    public static final Map<String, Datum> datums = new HashMap<>();
-    public static final Map<String, NTV2GridShiftFileWrapper> nadgrids = new HashMap<>();
-    public static final Map<String, Pair<String, String>> inits = new HashMap<>();
+    static final Map<String, ProjFactory> projs = new HashMap<>();
+    static final Map<String, Ellipsoid> ellipsoids = new HashMap<>();
+    static final Map<String, Datum> datums = new HashMap<>();
+    static final Map<String, NTV2GridShiftFileWrapper> nadgrids = new HashMap<>();
+    static final Map<String, Pair<String, String>> inits = new HashMap<>();
 
     static {
         registerBaseProjection("lonlat", LonLat.class, "core");
@@ -73,13 +77,19 @@ public final class Projections {
         registerBaseProjection("somerc", SwissObliqueMercator.class, "core");
         registerBaseProjection("tmerc", TransverseMercator.class, "core");
 
-        ellipsoids.put("clrk66", Ellipsoid.clarke1866);
-        ellipsoids.put("clarkeIGN", Ellipsoid.clarkeIGN);
-        ellipsoids.put("intl", Ellipsoid.hayford);
+        ellipsoids.put("airy", Ellipsoid.Airy);
+        ellipsoids.put("mod_airy", Ellipsoid.AiryMod);
+        ellipsoids.put("aust_SA", Ellipsoid.AustSA);
+        ellipsoids.put("bessel", Ellipsoid.Bessel1841);
+        ellipsoids.put("clrk66", Ellipsoid.Clarke1866);
+        ellipsoids.put("clarkeIGN", Ellipsoid.ClarkeIGN);
+        ellipsoids.put("intl", Ellipsoid.Hayford);
+        ellipsoids.put("helmert", Ellipsoid.Helmert);
+        ellipsoids.put("krass", Ellipsoid.Krassowsky);
         ellipsoids.put("GRS67", Ellipsoid.GRS67);
         ellipsoids.put("GRS80", Ellipsoid.GRS80);
+        ellipsoids.put("WGS72", Ellipsoid.WGS72);
         ellipsoids.put("WGS84", Ellipsoid.WGS84);
-        ellipsoids.put("bessel", Ellipsoid.Bessel1841);
 
         datums.put("WGS84", WGS84Datum.INSTANCE);
         datums.put("GRS80", GRS80Datum.INSTANCE);
@@ -132,7 +142,7 @@ public final class Projections {
      * Null, if the id isn't supported.
      */
     public static String getInit(String id) {
-        Pair<String, String> r = inits.get(id.toUpperCase());
+        Pair<String, String> r = inits.get(id.toUpperCase(Locale.ENGLISH));
         if (r == null) return null;
         return r.b;
     }
@@ -208,4 +218,46 @@ public final class Projections {
     public static Collection<String> getAllProjectionCodes() {
         return Collections.unmodifiableCollection(allCodes);
     }
+
+    private static String listKeys(Map<String, ?> map) {
+        List<String> keys = new ArrayList<>(map.keySet());
+        Collections.sort(keys);
+        return Utils.join(", ", keys);
+    }
+
+    /**
+     * Replies the list of projections as string (comma separated).
+     * @return the list of projections as string (comma separated)
+     * @since 8533
+     */
+    public static String listProjs() {
+        return listKeys(projs);
+    }
+
+    /**
+     * Replies the list of ellipsoids as string (comma separated).
+     * @return the list of ellipsoids as string (comma separated)
+     * @since 8533
+     */
+    public static String listEllipsoids() {
+        return listKeys(ellipsoids);
+    }
+
+    /**
+     * Replies the list of datums as string (comma separated).
+     * @return the list of datums as string (comma separated)
+     * @since 8533
+     */
+    public static String listDatums() {
+        return listKeys(datums);
+    }
+
+    /**
+     * Replies the list of nadgrids as string (comma separated).
+     * @return the list of nadgrids as string (comma separated)
+     * @since 8533
+     */
+    public static String listNadgrids() {
+        return listKeys(nadgrids);
+    }
 }
diff --git a/src/org/openstreetmap/josm/data/projection/datum/NTV2GridShift.java b/src/org/openstreetmap/josm/data/projection/datum/NTV2GridShift.java
index 0eb7195..407cf46 100644
--- a/src/org/openstreetmap/josm/data/projection/datum/NTV2GridShift.java
+++ b/src/org/openstreetmap/josm/data/projection/datum/NTV2GridShift.java
@@ -54,8 +54,13 @@ public class NTV2GridShift implements Serializable {
      * Constructs a new {@code NTV2GridShift}.
      */
     public NTV2GridShift() {
+        // contents can be set later with setters
     }
 
+    /**
+     * Constructs a new {@code NTV2GridShift} from a {@code LatLon}.
+     * @param p lat/lon
+     */
     public NTV2GridShift(LatLon p) {
         setLatDegrees(p.lat());
         setLonPositiveEastDegrees(p.lon());
diff --git a/src/org/openstreetmap/josm/data/projection/datum/NTV2GridShiftFile.java b/src/org/openstreetmap/josm/data/projection/datum/NTV2GridShiftFile.java
index fb8efd4..4905db6 100644
--- a/src/org/openstreetmap/josm/data/projection/datum/NTV2GridShiftFile.java
+++ b/src/org/openstreetmap/josm/data/projection/datum/NTV2GridShiftFile.java
@@ -82,12 +82,6 @@ public class NTV2GridShiftFile implements Serializable {
     private NTV2SubGrid[] topLevelSubGrid;
     private NTV2SubGrid lastSubGrid;
 
-    /**
-     * Constructs a new {@code NTV2GridShiftFile}.
-     */
-    public NTV2GridShiftFile() {
-    }
-
     private void readBytes(InputStream in, byte[] b) throws IOException {
         if (in.read(b) < b.length) {
             Main.error("Failed to read expected amount of bytes ("+ b.length +") from stream");
@@ -104,7 +98,7 @@ public class NTV2GridShiftFile implements Serializable {
      *
      * @param in Grid Shift File InputStream
      * @param loadAccuracy is Accuracy data to be loaded as well as shift data?
-     * @throws IOException
+     * @throws IOException if any I/O error occurs
      */
     public void loadGridShiftFile(InputStream in, boolean loadAccuracy) throws IOException {
         byte[] b8 = new byte[8];
@@ -275,7 +269,7 @@ public class NTV2GridShiftFile implements Serializable {
     }
 
     public boolean isLoaded() {
-        return (topLevelSubGrid != null);
+        return topLevelSubGrid != null;
     }
 
     public void unload() {
@@ -284,29 +278,29 @@ public class NTV2GridShiftFile implements Serializable {
 
     @Override
     public String toString() {
-        StringBuilder buf = new StringBuilder("Headers  : ");
-        buf.append(overviewHeaderCount);
-        buf.append("\nSub Hdrs : ");
-        buf.append(subGridHeaderCount);
-        buf.append("\nSub Grids: ");
-        buf.append(subGridCount);
-        buf.append("\nType     : ");
-        buf.append(shiftType);
-        buf.append("\nVersion  : ");
-        buf.append(version);
-        buf.append("\nFr Ellpsd: ");
-        buf.append(fromEllipsoid);
-        buf.append("\nTo Ellpsd: ");
-        buf.append(toEllipsoid);
-        buf.append("\nFr Maj Ax: ");
-        buf.append(fromSemiMajorAxis);
-        buf.append("\nFr Min Ax: ");
-        buf.append(fromSemiMinorAxis);
-        buf.append("\nTo Maj Ax: ");
-        buf.append(toSemiMajorAxis);
-        buf.append("\nTo Min Ax: ");
-        buf.append(toSemiMinorAxis);
-        return buf.toString();
+        StringBuilder buff = new StringBuilder("Headers  : ");
+        buff.append(overviewHeaderCount)
+            .append("\nSub Hdrs : ")
+            .append(subGridHeaderCount)
+            .append("\nSub Grids: ")
+            .append(subGridCount)
+            .append("\nType     : ")
+            .append(shiftType)
+            .append("\nVersion  : ")
+            .append(version)
+            .append("\nFr Ellpsd: ")
+            .append(fromEllipsoid)
+            .append("\nTo Ellpsd: ")
+            .append(toEllipsoid)
+            .append("\nFr Maj Ax: ")
+            .append(fromSemiMajorAxis)
+            .append("\nFr Min Ax: ")
+            .append(fromSemiMinorAxis)
+            .append("\nTo Maj Ax: ")
+            .append(toSemiMajorAxis)
+            .append("\nTo Min Ax: ")
+            .append(toSemiMinorAxis);
+        return buff.toString();
     }
 
     /**
@@ -317,7 +311,7 @@ public class NTV2GridShiftFile implements Serializable {
     public NTV2SubGrid[] getSubGridTree() {
         NTV2SubGrid[] clone = new NTV2SubGrid[topLevelSubGrid.length];
         for (int i = 0; i < topLevelSubGrid.length; i++) {
-            clone[i] = (NTV2SubGrid)topLevelSubGrid[i].clone();
+            clone[i] = (NTV2SubGrid) topLevelSubGrid[i].clone();
         }
         return clone;
     }
diff --git a/src/org/openstreetmap/josm/data/projection/datum/NTV2GridShiftFileWrapper.java b/src/org/openstreetmap/josm/data/projection/datum/NTV2GridShiftFileWrapper.java
index 6af5614..70606b7 100644
--- a/src/org/openstreetmap/josm/data/projection/datum/NTV2GridShiftFileWrapper.java
+++ b/src/org/openstreetmap/josm/data/projection/datum/NTV2GridShiftFileWrapper.java
@@ -13,6 +13,8 @@ import org.openstreetmap.josm.io.CachedFile;
  */
 public class NTV2GridShiftFileWrapper {
 
+    // CHECKSTYLE.OFF: LineLength
+
     /**
      * Used in Germany to convert coordinates between the DHDN (<i>Deutsches Hauptdreiecksnetz</i>)
      * and ETRS89 (<i>European Terrestrial Reference System 1989</i>) datums.
@@ -29,6 +31,8 @@ public class NTV2GridShiftFileWrapper {
      */
     public static final NTV2GridShiftFileWrapper ntf_rgf93 = new NTV2GridShiftFileWrapper("resource://data/projection/ntf_r93_b.gsb");
 
+    // CHECKSTYLE.ON: LineLength
+
     private NTV2GridShiftFile instance = null;
     private String gridFileName;
 
diff --git a/src/org/openstreetmap/josm/data/projection/datum/NTV2SubGrid.java b/src/org/openstreetmap/josm/data/projection/datum/NTV2SubGrid.java
index bd7c3f7..daa14b4 100644
--- a/src/org/openstreetmap/josm/data/projection/datum/NTV2SubGrid.java
+++ b/src/org/openstreetmap/josm/data/projection/datum/NTV2SubGrid.java
@@ -68,7 +68,7 @@ public class NTV2SubGrid implements Cloneable, Serializable {
      * @param in GridShiftFile InputStream
      * @param bigEndian is the file bigEndian?
      * @param loadAccuracy is the node Accuracy data to be loaded?
-     * @throws IOException
+     * @throws IOException if any I/O error occurs
      */
     public NTV2SubGrid(InputStream in, boolean bigEndian, boolean loadAccuracy) throws IOException {
         byte[] b8 = new byte[8];
@@ -104,8 +104,8 @@ public class NTV2SubGrid implements Cloneable, Serializable {
         readBytes(in, b8);
         readBytes(in, b8);
         lonInterval = NTV2Util.getDouble(b8, bigEndian);
-        lonColumnCount = 1 + (int)((maxLon - minLon) / lonInterval);
-        latRowCount = 1 + (int)((maxLat - minLat) / latInterval);
+        lonColumnCount = 1 + (int) ((maxLon - minLon) / lonInterval);
+        latRowCount = 1 + (int) ((maxLat - minLat) / latInterval);
         readBytes(in, b8);
         readBytes(in, b8);
         nodeCount = NTV2Util.getInt(b8, bigEndian);
@@ -120,8 +120,7 @@ public class NTV2SubGrid implements Cloneable, Serializable {
 
         for (int i = 0; i < nodeCount; i++) {
             // Read the grid file byte after byte. This is a workaround about a bug in
-            // certain VM which are not able to read byte blocks when the resource file is
-            // in a .jar file (Pieren)
+            // certain VM which are not able to read byte blocks when the resource file is in a .jar file (Pieren)
             readBytes(in, b1); b4[0] = b1[0];
             readBytes(in, b1); b4[1] = b1[0];
             readBytes(in, b1); b4[2] = b1[0];
@@ -209,9 +208,9 @@ public class NTV2SubGrid implements Cloneable, Serializable {
      * @param y Latitude factor
      * @return interpolated value
      */
-    private final double interpolate(float a, float b, float c, float d, double x, double y) {
-        return a + (((double)b - (double)a) * x) + (((double)c - (double)a) * y) +
-        (((double)a + (double)d - b - c) * x * y);
+    private double interpolate(float a, float b, float c, float d, double x, double y) {
+        return a + (((double) b - (double) a) * x) + (((double) c - (double) a) * y) +
+        (((double) a + (double) d - b - c) * x * y);
     }
 
     /**
@@ -222,14 +221,13 @@ public class NTV2SubGrid implements Cloneable, Serializable {
      * Geomatics Department of the University of Melbourne</a>
      * <p>This method is thread safe for both memory based and file based node data.
      * @param gs GridShift object containing the coordinate to shift and the shift values
-     * @return the GridShift object supplied, with values updated.
      */
-    public NTV2GridShift interpolateGridShift(NTV2GridShift gs) {
-        int lonIndex = (int)((gs.getLonPositiveWestSeconds() - minLon) / lonInterval);
-        int latIndex = (int)((gs.getLatSeconds() - minLat) / latInterval);
+    public void interpolateGridShift(NTV2GridShift gs) {
+        int lonIndex = (int) ((gs.getLonPositiveWestSeconds() - minLon) / lonInterval);
+        int latIndex = (int) ((gs.getLatSeconds() - minLat) / latInterval);
 
-        double X = (gs.getLonPositiveWestSeconds() - (minLon + (lonInterval * lonIndex))) / lonInterval;
-        double Y = (gs.getLatSeconds() - (minLat + (latInterval * latIndex))) / latInterval;
+        double x = (gs.getLonPositiveWestSeconds() - (minLon + (lonInterval * lonIndex))) / lonInterval;
+        double y = (gs.getLatSeconds() - (minLat + (latInterval * latIndex))) / latInterval;
 
         // Find the nodes at the four corners of the cell
 
@@ -239,17 +237,17 @@ public class NTV2SubGrid implements Cloneable, Serializable {
         int indexD = indexC + 1;
 
         gs.setLonShiftPositiveWestSeconds(interpolate(
-                lonShift[indexA], lonShift[indexB], lonShift[indexC], lonShift[indexD], X, Y));
+                lonShift[indexA], lonShift[indexB], lonShift[indexC], lonShift[indexD], x, y));
 
         gs.setLatShiftSeconds(interpolate(
-                latShift[indexA], latShift[indexB], latShift[indexC], latShift[indexD], X, Y));
+                latShift[indexA], latShift[indexB], latShift[indexC], latShift[indexD], x, y));
 
         if (lonAccuracy == null) {
             gs.setLonAccuracyAvailable(false);
         } else {
             gs.setLonAccuracyAvailable(true);
             gs.setLonAccuracySeconds(interpolate(
-                    lonAccuracy[indexA], lonAccuracy[indexB], lonAccuracy[indexC], lonAccuracy[indexD], X, Y));
+                    lonAccuracy[indexA], lonAccuracy[indexB], lonAccuracy[indexC], lonAccuracy[indexD], x, y));
         }
 
         if (latAccuracy == null) {
@@ -257,9 +255,8 @@ public class NTV2SubGrid implements Cloneable, Serializable {
         } else {
             gs.setLatAccuracyAvailable(true);
             gs.setLatAccuracySeconds(interpolate(
-                    latAccuracy[indexA], latAccuracy[indexB], latAccuracy[indexC], latAccuracy[indexD], X, Y));
+                    latAccuracy[indexA], latAccuracy[indexB], latAccuracy[indexC], latAccuracy[indexD], x, y));
         }
-        return gs;
     }
 
     public String getParentSubGridName() {
@@ -284,7 +281,7 @@ public class NTV2SubGrid implements Cloneable, Serializable {
 
     /**
      * Set an array of Sub Grids of this sub grid
-     * @param subGrid
+     * @param subGrid subgrids
      */
     public void setSubGridArray(NTV2SubGrid[] subGrid) {
         this.subGrid = Utils.copyArray(subGrid);
@@ -300,29 +297,29 @@ public class NTV2SubGrid implements Cloneable, Serializable {
      * @return textual details about the sub grid
      */
     public String getDetails() {
-        StringBuilder buf = new StringBuilder("Sub Grid : ");
-        buf.append(subGridName);
-        buf.append("\nParent   : ");
-        buf.append(parentSubGridName);
-        buf.append("\nCreated  : ");
-        buf.append(created);
-        buf.append("\nUpdated  : ");
-        buf.append(updated);
-        buf.append("\nMin Lat  : ");
-        buf.append(minLat);
-        buf.append("\nMax Lat  : ");
-        buf.append(maxLat);
-        buf.append("\nMin Lon  : ");
-        buf.append(minLon);
-        buf.append("\nMax Lon  : ");
-        buf.append(maxLon);
-        buf.append("\nLat Intvl: ");
-        buf.append(latInterval);
-        buf.append("\nLon Intvl: ");
-        buf.append(lonInterval);
-        buf.append("\nNode Cnt : ");
-        buf.append(nodeCount);
-        return buf.toString();
+        StringBuilder buff = new StringBuilder("Sub Grid : ");
+        buff.append(subGridName)
+            .append("\nParent   : ")
+            .append(parentSubGridName)
+            .append("\nCreated  : ")
+            .append(created)
+            .append("\nUpdated  : ")
+            .append(updated)
+            .append("\nMin Lat  : ")
+            .append(minLat)
+            .append("\nMax Lat  : ")
+            .append(maxLat)
+            .append("\nMin Lon  : ")
+            .append(minLon)
+            .append("\nMax Lon  : ")
+            .append(maxLon)
+            .append("\nLat Intvl: ")
+            .append(latInterval)
+            .append("\nLon Intvl: ")
+            .append(lonInterval)
+            .append("\nNode Cnt : ")
+            .append(nodeCount);
+        return buff.toString();
     }
 
     /**
@@ -332,12 +329,12 @@ public class NTV2SubGrid implements Cloneable, Serializable {
     public Object clone() {
         NTV2SubGrid clone = null;
         try {
-            clone = (NTV2SubGrid)super.clone();
+            clone = (NTV2SubGrid) super.clone();
             // Do a deep clone of the sub grids
             if (subGrid != null) {
                 clone.subGrid = new NTV2SubGrid[subGrid.length];
                 for (int i = 0; i < subGrid.length; i++) {
-                    clone.subGrid[i] = (NTV2SubGrid)subGrid[i].clone();
+                    clone.subGrid[i] = (NTV2SubGrid) subGrid[i].clone();
                 }
             }
         } catch (CloneNotSupportedException cnse) {
@@ -345,6 +342,7 @@ public class NTV2SubGrid implements Cloneable, Serializable {
         }
         return clone;
     }
+
     /**
      * Get maximum latitude value
      * @return maximum latitude
diff --git a/src/org/openstreetmap/josm/data/projection/datum/NTV2Util.java b/src/org/openstreetmap/josm/data/projection/datum/NTV2Util.java
index a831146..b7a6c0f 100644
--- a/src/org/openstreetmap/josm/data/projection/datum/NTV2Util.java
+++ b/src/org/openstreetmap/josm/data/projection/datum/NTV2Util.java
@@ -37,7 +37,7 @@ public final class NTV2Util {
      * @param i the index of the first data byte in the array
      * @return the int
      */
-    public static final int getIntLE(byte[] b, int i) {
+    public static int getIntLE(byte[] b, int i) {
         return (b[i++] & 0x000000FF) | ((b[i++] << 8) & 0x0000FF00) | ((b[i++] << 16) & 0x00FF0000) | (b[i] << 24);
     }
 
@@ -47,7 +47,7 @@ public final class NTV2Util {
      * @param i the index of the first data byte in the array
      * @return the int
      */
-    public static final int getIntBE(byte[] b, int i) {
+    public static int getIntBE(byte[] b, int i) {
         return (b[i++] << 24) | ((b[i++] << 16) & 0x00FF0000) | ((b[i++] << 8) & 0x0000FF00) | (b[i] & 0x000000FF);
     }
 
@@ -58,7 +58,7 @@ public final class NTV2Util {
      * @param bigEndian is the byte array Big Endian?
      * @return the int
      */
-    public static final int getInt(byte[] b, boolean bigEndian) {
+    public static int getInt(byte[] b, boolean bigEndian) {
         if (bigEndian)
             return getIntBE(b, 0);
         else
@@ -72,7 +72,7 @@ public final class NTV2Util {
      * @param bigEndian is the byte array Big Endian?
      * @return the float
      */
-    public static final float getFloat(byte[] b, boolean bigEndian) {
+    public static float getFloat(byte[] b, boolean bigEndian) {
         int i = 0;
         if (bigEndian) {
             i = getIntBE(b, 0);
@@ -89,7 +89,7 @@ public final class NTV2Util {
      * @param bigEndian is the byte array Big Endian?
      * @return the double
      */
-    public static final double getDouble(byte[] b, boolean bigEndian) {
+    public static double getDouble(byte[] b, boolean bigEndian) {
         int i = 0;
         int j = 0;
         if (bigEndian) {
@@ -99,7 +99,7 @@ public final class NTV2Util {
             i = getIntLE(b, 4);
             j = getIntLE(b, 0);
         }
-        long l = ((long)i << 32) |
+        long l = ((long) i << 32) |
         (j & 0x00000000FFFFFFFFL);
         return Double.longBitsToDouble(l);
     }
diff --git a/src/org/openstreetmap/josm/data/projection/datum/SevenParameterDatum.java b/src/org/openstreetmap/josm/data/projection/datum/SevenParameterDatum.java
index 09ebc1c..efd967b 100644
--- a/src/org/openstreetmap/josm/data/projection/datum/SevenParameterDatum.java
+++ b/src/org/openstreetmap/josm/data/projection/datum/SevenParameterDatum.java
@@ -32,7 +32,8 @@ public class SevenParameterDatum extends AbstractDatum {
      * @param rz rotational parameter in seconds of arc
      * @param s scale change in parts per million
      */
-    public SevenParameterDatum(String name, String proj4Id, Ellipsoid ellps, double dx, double dy, double dz, double rx, double ry, double rz, double s) {
+    public SevenParameterDatum(String name, String proj4Id, Ellipsoid ellps, double dx, double dy, double dz,
+            double rx, double ry, double rz, double s) {
         super(name, proj4Id, ellps);
         this.dx = dx;
         this.dy = dy;
@@ -49,7 +50,7 @@ public class SevenParameterDatum extends AbstractDatum {
         double x = dx + xyz[0]*(1+s) + xyz[2]*ry - xyz[1]*rz;
         double y = dy + xyz[1]*(1+s) + xyz[0]*rz - xyz[2]*rx;
         double z = dz + xyz[2]*(1+s) + xyz[1]*rx - xyz[0]*ry;
-        return Ellipsoid.WGS84.cart2LatLon(new double[] { x, y, z });
+        return Ellipsoid.WGS84.cart2LatLon(new double[] {x, y, z});
     }
 
     @Override
@@ -58,7 +59,6 @@ public class SevenParameterDatum extends AbstractDatum {
         double x = (1-s)*(-dx + xyz[0] + ((-dz+xyz[2])*(-ry) - (-dy+xyz[1])*(-rz)));
         double y = (1-s)*(-dy + xyz[1] + ((-dx+xyz[0])*(-rz) - (-dz+xyz[2])*(-rx)));
         double z = (1-s)*(-dz + xyz[2] + ((-dy+xyz[1])*(-rx) - (-dx+xyz[0])*(-ry)));
-        return this.ellps.cart2LatLon(new double[] { x, y, z });
+        return this.ellps.cart2LatLon(new double[] {x, y, z});
     }
-
 }
diff --git a/src/org/openstreetmap/josm/data/projection/proj/LambertConformalConic.java b/src/org/openstreetmap/josm/data/projection/proj/LambertConformalConic.java
index fb64022..aecdae2 100644
--- a/src/org/openstreetmap/josm/data/projection/proj/LambertConformalConic.java
+++ b/src/org/openstreetmap/josm/data/projection/proj/LambertConformalConic.java
@@ -14,6 +14,7 @@ import static java.lang.Math.tan;
 import static java.lang.Math.toRadians;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
+import org.openstreetmap.josm.data.projection.CustomProjection.Param;
 import org.openstreetmap.josm.data.projection.Ellipsoid;
 import org.openstreetmap.josm.data.projection.ProjectionConfigurationException;
 
@@ -29,6 +30,7 @@ public class LambertConformalConic implements Proj {
 
     public abstract static class Parameters {
         public final double latitudeOrigin;
+
         public Parameters(double latitudeOrigin) {
             this.latitudeOrigin = latitudeOrigin;
         }
@@ -43,6 +45,7 @@ public class LambertConformalConic implements Proj {
     public static class Parameters2SP extends Parameters {
         public final double standardParallel1;
         public final double standardParallel2;
+
         public Parameters2SP(double latitudeOrigin, double standardParallel1, double standardParallel2) {
             super(latitudeOrigin);
             this.standardParallel1 = standardParallel1;
@@ -59,7 +62,7 @@ public class LambertConformalConic implements Proj {
     /**
      * projection factor
      */
-    protected double F;
+    protected double f;
     /**
      * radius of the parallel of latitude of the false origin (2SP) or at
      * natural origin (1SP)
@@ -75,12 +78,12 @@ public class LambertConformalConic implements Proj {
     public void initialize(ProjParameters params) throws ProjectionConfigurationException {
         ellps = params.ellps;
         e = ellps.e;
-        if (params.lat_0 == null)
-            throw new ProjectionConfigurationException(tr("Parameter ''{0}'' required.", "lat_0"));
-        if (params.lat_1 != null && params.lat_2 != null) {
-            initialize2SP(params.lat_0, params.lat_1, params.lat_2);
+        if (params.lat0 == null)
+            throw new ProjectionConfigurationException(tr("Parameter ''{0}'' required.", Param.lat_0.key));
+        if (params.lat1 != null && params.lat2 != null) {
+            initialize2SP(params.lat0, params.lat1, params.lat2);
         } else {
-            initialize1SP(params.lat_0);
+            initialize1SP(params.lat0);
         }
     }
 
@@ -102,8 +105,8 @@ public class LambertConformalConic implements Proj {
         final double tf = t(toRadians(lat_0));
 
         n  = (log(m1) - log(m2)) / (log(t1) - log(t2));
-        F  = m1 / (n * pow(t1, n));
-        r0 = F * pow(tf, n);
+        f  = m1 / (n * pow(t1, n));
+        r0 = f * pow(tf, n);
     }
 
     /**
@@ -119,8 +122,8 @@ public class LambertConformalConic implements Proj {
         final double t0 = t(lat_0_rad);
 
         n = sin(lat_0_rad);
-        F  = m0 / (n * pow(t0, n));
-        r0 = F * pow(t0, n);
+        f  = m0 / (n * pow(t0, n));
+        r0 = f * pow(t0, n);
     }
 
     /**
@@ -128,7 +131,7 @@ public class LambertConformalConic implements Proj {
      */
     protected double t(double lat_rad) {
         return tan(PI/4 - lat_rad / 2.0)
-            / pow(( (1.0 - e * sin(lat_rad)) / (1.0 + e * sin(lat_rad))) , e/2);
+            / pow((1.0 - e * sin(lat_rad)) / (1.0 + e * sin(lat_rad)), e/2);
     }
 
     /**
@@ -151,22 +154,22 @@ public class LambertConformalConic implements Proj {
     @Override
     public double[] project(double phi, double lambda) {
         double sinphi = sin(phi);
-        double L = (0.5*log((1+sinphi)/(1-sinphi))) - e/2*log((1+e*sinphi)/(1-e*sinphi));
-        double r = F*exp(-n*L);
+        double l = (0.5*log((1+sinphi)/(1-sinphi))) - e/2*log((1+e*sinphi)/(1-e*sinphi));
+        double r = f*exp(-n*l);
         double gamma = n*lambda;
-        double X = r*sin(gamma);
-        double Y = r0 - r*cos(gamma);
-        return new double[] { X, Y };
+        double x = r*sin(gamma);
+        double y = r0 - r*cos(gamma);
+        return new double[] {x, y};
     }
 
     @Override
     public double[] invproject(double east, double north) {
-        double r = sqrt(pow(east,2) + pow(north-r0, 2));
+        double r = sqrt(pow(east, 2) + pow(north-r0, 2));
         double gamma = atan(east / (r0-north));
         double lambda = gamma/n;
-        double latIso = (-1/n) * log(abs(r/F));
+        double latIso = (-1/n) * log(abs(r/f));
         double phi = ellps.latitude(latIso, e, epsilon);
-        return new double[] { phi, lambda };
+        return new double[] {phi, lambda};
     }
 
     public final Parameters getParameters() {
diff --git a/src/org/openstreetmap/josm/data/projection/proj/LonLat.java b/src/org/openstreetmap/josm/data/projection/proj/LonLat.java
index 223a48b..e7f4bb6 100644
--- a/src/org/openstreetmap/josm/data/projection/proj/LonLat.java
+++ b/src/org/openstreetmap/josm/data/projection/proj/LonLat.java
@@ -29,11 +29,11 @@ public class LonLat implements Proj {
 
     @Override
     public double[] project(double lat_rad, double lon_rad) {
-        return new double[] { Math.toDegrees(lon_rad) / a, Math.toDegrees(lat_rad) / a };
+        return new double[] {Math.toDegrees(lon_rad) / a, Math.toDegrees(lat_rad) / a};
     }
 
     @Override
     public double[] invproject(double east, double north) {
-        return new double[] { Math.toRadians(north * a), Math.toRadians(east * a) };
+        return new double[] {Math.toRadians(north * a), Math.toRadians(east * a)};
     }
 }
diff --git a/src/org/openstreetmap/josm/data/projection/proj/Mercator.java b/src/org/openstreetmap/josm/data/projection/proj/Mercator.java
index 6b88aa9..9c6aa59 100644
--- a/src/org/openstreetmap/josm/data/projection/proj/Mercator.java
+++ b/src/org/openstreetmap/josm/data/projection/proj/Mercator.java
@@ -31,12 +31,11 @@ public class Mercator implements Proj {
 
     @Override
     public double[] project(double lat_rad, double lon_rad) {
-        return new double[] { lon_rad, log(tan(PI/4 + lat_rad/2)) };
+        return new double[] {lon_rad, log(tan(PI/4 + lat_rad/2))};
     }
 
     @Override
     public double[] invproject(double east, double north) {
-        return new double[] { atan(sinh(north)), east };
+        return new double[] {atan(sinh(north)), east};
     }
-
 }
diff --git a/src/org/openstreetmap/josm/data/projection/proj/Proj.java b/src/org/openstreetmap/josm/data/projection/proj/Proj.java
index b12df9d..2ec8973 100644
--- a/src/org/openstreetmap/josm/data/projection/proj/Proj.java
+++ b/src/org/openstreetmap/josm/data/projection/proj/Proj.java
@@ -63,5 +63,4 @@ public interface Proj {
      * @return array of length 2, containing lat and lon in radians.
      */
     double[] invproject(double east, double north);
-
 }
diff --git a/src/org/openstreetmap/josm/data/projection/proj/ProjParameters.java b/src/org/openstreetmap/josm/data/projection/proj/ProjParameters.java
index 2a8b196..b0070e4 100644
--- a/src/org/openstreetmap/josm/data/projection/proj/ProjParameters.java
+++ b/src/org/openstreetmap/josm/data/projection/proj/ProjParameters.java
@@ -10,8 +10,7 @@ public class ProjParameters {
 
     public Ellipsoid ellps;
 
-    public Double lat_0;
-    public Double lat_1;
-    public Double lat_2;
-
+    public Double lat0;
+    public Double lat1;
+    public Double lat2;
 }
diff --git a/src/org/openstreetmap/josm/data/projection/proj/SwissObliqueMercator.java b/src/org/openstreetmap/josm/data/projection/proj/SwissObliqueMercator.java
index 88ada94..5d673d2 100644
--- a/src/org/openstreetmap/josm/data/projection/proj/SwissObliqueMercator.java
+++ b/src/org/openstreetmap/josm/data/projection/proj/SwissObliqueMercator.java
@@ -1,4 +1,4 @@
-//License: GPL. For details, see LICENSE file.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.projection.proj;
 
 import static java.lang.Math.PI;
@@ -19,31 +19,37 @@ import static org.openstreetmap.josm.tools.I18n.tr;
 import org.openstreetmap.josm.data.projection.Ellipsoid;
 import org.openstreetmap.josm.data.projection.ProjectionConfigurationException;
 
+// CHECKSTYLE.OFF: LineLength
+
 /**
  * Projection for the SwissGrid CH1903 / L03, see <a href="https://en.wikipedia.org/wiki/Swiss_coordinate_system">Wikipedia article</a>.<br>
  *
- * Calculations were originally based on <a href="http://www.swisstopo.admin.ch/internet/swisstopo/en/home/topics/survey/sys/refsys/switzerland.parsysrelated1.37696.downloadList.12749.DownloadFile.tmp/ch1903wgs84en.pdf">
+ * Calculations were originally based on
+ * <a href="http://www.swisstopo.admin.ch/internet/swisstopo/en/home/topics/survey/sys/refsys/switzerland.parsysrelated1.37696.downloadList.12749.DownloadFile.tmp/ch1903wgs84en.pdf">
  * simple formula</a>.<br>
  *
- * August 2010 update to <a href="http://www.swisstopo.admin.ch/internet/swisstopo/en/home/topics/survey/sys/refsys/switzerland.parsysrelated1.37696.downloadList.97912.DownloadFile.tmp/swissprojectionen.pdf">
+ * August 2010 update to
+ * <a href="http://www.swisstopo.admin.ch/internet/swisstopo/en/home/topics/survey/sys/refsys/switzerland.parsysrelated1.37696.downloadList.97912.DownloadFile.tmp/swissprojectionen.pdf">
  * this formula (rigorous formulas)</a>.
  */
 public class SwissObliqueMercator implements Proj {
 
+    // CHECKSTYLE.ON: LineLength
+
     private Ellipsoid ellps;
     private double kR;
     private double alpha;
     private double b0;
-    private double K;
+    private double k;
 
     private static final double EPSILON = 1e-11;
 
     @Override
     public void initialize(ProjParameters params) throws ProjectionConfigurationException {
-        if (params.lat_0 == null)
+        if (params.lat0 == null)
             throw new ProjectionConfigurationException(tr("Parameter ''{0}'' required.", "lat_0"));
         ellps = params.ellps;
-        initialize(params.lat_0);
+        initialize(params.lat0);
     }
 
     private void initialize(double lat_0) {
@@ -51,7 +57,7 @@ public class SwissObliqueMercator implements Proj {
         kR = sqrt(1 - ellps.e2) / (1 - (ellps.e2 * pow(sin(phi0), 2)));
         alpha = sqrt(1 + (ellps.eb2 * pow(cos(phi0), 4)));
         b0 = asin(sin(phi0) / alpha);
-        K = log(tan(PI / 4 + b0 / 2)) - alpha
+        k = log(tan(PI / 4 + b0 / 2)) - alpha
             * log(tan(PI / 4 + phi0 / 2)) + alpha * ellps.e / 2
             * log((1 + ellps.e * sin(phi0)) / (1 - ellps.e * sin(phi0)));
     }
@@ -70,7 +76,7 @@ public class SwissObliqueMercator implements Proj {
     public double[] project(double phi, double lambda) {
 
         double S = alpha * log(tan(PI / 4 + phi / 2)) - alpha * ellps.e / 2
-            * log((1 + ellps.e * sin(phi)) / (1 - ellps.e * sin(phi))) + K;
+            * log((1 + ellps.e * sin(phi)) / (1 - ellps.e * sin(phi))) + k;
         double b = 2 * (atan(exp(S)) - PI / 4);
         double l = alpha * lambda;
 
@@ -80,7 +86,7 @@ public class SwissObliqueMercator implements Proj {
         double y = kR * lb;
         double x = kR / 2 * log((1 + sin(bb)) / (1 - sin(bb)));
 
-        return new double[] { y, x };
+        return new double[] {y, x};
     }
 
     @Override
@@ -93,7 +99,7 @@ public class SwissObliqueMercator implements Proj {
 
         double lambda = l / alpha;
         double phi = b;
-        double S = 0;
+        double s = 0;
 
         double prevPhi = -1000;
         int iteration = 0;
@@ -102,10 +108,10 @@ public class SwissObliqueMercator implements Proj {
             if (++iteration > 30)
                 throw new RuntimeException("Two many iterations");
             prevPhi = phi;
-            S = 1 / alpha * (log(tan(PI / 4 + b / 2)) - K) + ellps.e
+            s = 1 / alpha * (log(tan(PI / 4 + b / 2)) - k) + ellps.e
             * log(tan(PI / 4 + asin(ellps.e * sin(phi)) / 2));
-            phi = 2 * atan(exp(S)) - PI / 2;
+            phi = 2 * atan(exp(s)) - PI / 2;
         }
-        return new double[] { phi, lambda };
+        return new double[] {phi, lambda};
     }
 }
diff --git a/src/org/openstreetmap/josm/data/projection/proj/TransverseMercator.java b/src/org/openstreetmap/josm/data/projection/proj/TransverseMercator.java
index f13f8a8..225b82a 100644
--- a/src/org/openstreetmap/josm/data/projection/proj/TransverseMercator.java
+++ b/src/org/openstreetmap/josm/data/projection/proj/TransverseMercator.java
@@ -94,7 +94,7 @@ public class TransverseMercator implements Proj {
                 + (N_a / 120.0 * pow(cos(phi), 5.0) * l5coef * pow(l, 5.0))
                 + (N_a / 5040.0 * pow(cos(phi), 7.0) * l7coef * pow(l, 7.0)),
                 /* Calculate northing (y) */
-                ArcLengthOfMeridian (phi) / a
+                ArcLengthOfMeridian(phi) / a
                 + (t / 2.0 * N_a * pow(cos(phi), 2.0) * pow(l, 2.0))
                 + (t / 24.0 * N_a * pow(cos(phi), 4.0) * l4coef * pow(l, 4.0))
                 + (t / 720.0 * N_a * pow(cos(phi), 6.0) * l6coef * pow(l, 6.0))
@@ -228,7 +228,7 @@ public class TransverseMercator implements Proj {
             + (105.0 * pow(n, 5.0) / 256.0);
 
         /* Precalculate epsilon */
-        double epsilon = (315.0 * pow(n, 4.0) / 512.0);
+        double epsilon = 315.0 * pow(n, 4.0) / 512.0;
 
         /* Now calculate the sum of the series and return */
         return alpha
@@ -275,7 +275,7 @@ public class TransverseMercator implements Proj {
             + (-417.0 * pow(n, 5.0) / 128.0);
 
         /* Precalculate epsilon_ (Eq. 10.22) */
-        double epsilon_ = (1097.0 * pow(n, 4.0) / 512.0);
+        double epsilon_ = 1097.0 * pow(n, 4.0) / 512.0;
 
         /* Now calculate the sum of the series (Eq. 10.21) */
         return y_ + (beta_ * sin(2.0 * y_))
@@ -283,5 +283,4 @@ public class TransverseMercator implements Proj {
             + (delta_ * sin(6.0 * y_))
             + (epsilon_ * sin(8.0 * y_));
     }
-
 }
diff --git a/src/org/openstreetmap/josm/data/validation/FixableTestError.java b/src/org/openstreetmap/josm/data/validation/FixableTestError.java
index 3602100..458a3bb 100644
--- a/src/org/openstreetmap/josm/data/validation/FixableTestError.java
+++ b/src/org/openstreetmap/josm/data/validation/FixableTestError.java
@@ -1,11 +1,11 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.validation;
 
+import java.util.Collection;
+
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 
-import java.util.Collection;
-
 /**
  * Validation error easily fixable right at its detection. The fix can be given when constructing the error.
  * @since 6377
@@ -13,33 +13,100 @@ import java.util.Collection;
 public class FixableTestError extends TestError {
     protected final Command fix;
 
+    /**
+     * Constructs a new {@code FixableTestError} for a single primitive.
+     * @param tester The tester
+     * @param severity The severity of this error
+     * @param message The error message
+     * @param code The test error reference code
+     * @param primitive The affected primitive
+     * @param fix The command used to fix the error
+     */
     public FixableTestError(Test tester, Severity severity, String message, int code, OsmPrimitive primitive, Command fix) {
         super(tester, severity, message, code, primitive);
         this.fix = fix;
     }
 
-    public FixableTestError(Test tester, Severity severity, String message, int code, Collection<? extends OsmPrimitive> primitives, Command fix) {
+    /**
+     * Constructs a new {@code FixableTestError} for multiple primitives.
+     * @param tester The tester
+     * @param severity The severity of this error
+     * @param message The error message
+     * @param code The test error reference code
+     * @param primitives The affected primitives
+     * @param fix The command used to fix the error
+     */
+    public FixableTestError(Test tester, Severity severity, String message, int code, Collection<? extends OsmPrimitive> primitives,
+            Command fix) {
         super(tester, severity, message, code, primitives);
         this.fix = fix;
     }
 
-    public FixableTestError(Test tester, Severity severity, String message, int code, Collection<? extends OsmPrimitive> primitives, Collection<?> highlighted, Command fix) {
+    /**
+     * Constructs a new {@code FixableTestError} for multiple primitives.
+     * @param tester The tester
+     * @param severity The severity of this error
+     * @param message The error message
+     * @param code The test error reference code
+     * @param primitives The affected primitives
+     * @param highlighted OSM primitives to highlight
+     * @param fix The command used to fix the error
+     */
+    public FixableTestError(Test tester, Severity severity, String message, int code, Collection<? extends OsmPrimitive> primitives,
+            Collection<?> highlighted, Command fix) {
         super(tester, severity, message, code, primitives, highlighted);
         this.fix = fix;
     }
 
-    public FixableTestError(Test tester, Severity severity, String message, String description, String description_en, int code, OsmPrimitive primitive, Command fix) {
-        super(tester, severity, message, description, description_en, code, primitive);
+    /**
+     * Constructs a new {@code FixableTestError} for a single primitive.
+     * @param tester The tester
+     * @param severity The severity of this error
+     * @param message The error message
+     * @param description The translated description
+     * @param descriptionEn The English description
+     * @param code The test error reference code
+     * @param primitive The affected primitive
+     * @param fix The command used to fix the error
+     */
+    public FixableTestError(Test tester, Severity severity, String message, String description, String descriptionEn, int code,
+            OsmPrimitive primitive, Command fix) {
+        super(tester, severity, message, description, descriptionEn, code, primitive);
         this.fix = fix;
     }
 
-    public FixableTestError(Test tester, Severity severity, String message, String description, String description_en, int code, Collection<? extends OsmPrimitive> primitives, Command fix) {
-        super(tester, severity, message, description, description_en, code, primitives);
+    /**
+     * Constructs a new {@code FixableTestError} for multiple primitives.
+     * @param tester The tester
+     * @param severity The severity of this error
+     * @param message The error message
+     * @param description The translated description
+     * @param descriptionEn The English description
+     * @param code The test error reference code
+     * @param primitives The affected primitives
+     * @param fix The command used to fix the error
+     */
+    public FixableTestError(Test tester, Severity severity, String message, String description, String descriptionEn, int code,
+            Collection<? extends OsmPrimitive> primitives, Command fix) {
+        super(tester, severity, message, description, descriptionEn, code, primitives);
         this.fix = fix;
     }
 
-    public FixableTestError(Test tester, Severity severity, String message, String description, String description_en, int code, Collection<? extends OsmPrimitive> primitives, Collection<?> highlighted, Command fix) {
-        super(tester, severity, message, description, description_en, code, primitives, highlighted);
+    /**
+     * Constructs a new {@code FixableTestError} for multiple primitives.
+     * @param tester The tester
+     * @param severity The severity of this error
+     * @param message The error message
+     * @param description The translated description
+     * @param descriptionEn The English description
+     * @param code The test error reference code
+     * @param primitives The affected primitives
+     * @param highlighted OSM primitives to highlight
+     * @param fix The command used to fix the error
+     */
+    public FixableTestError(Test tester, Severity severity, String message, String description, String descriptionEn, int code,
+            Collection<? extends OsmPrimitive> primitives, Collection<?> highlighted, Command fix) {
+        super(tester, severity, message, description, descriptionEn, code, primitives, highlighted);
         this.fix = fix;
     }
 
diff --git a/src/org/openstreetmap/josm/data/validation/OsmValidator.java b/src/org/openstreetmap/josm/data/validation/OsmValidator.java
index 0ed6ffb..4049796 100644
--- a/src/org/openstreetmap/josm/data/validation/OsmValidator.java
+++ b/src/org/openstreetmap/josm/data/validation/OsmValidator.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.validation;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -167,7 +167,7 @@ public class OsmValidator implements LayerChangeListener {
             if (!pathDir.exists()) {
                 pathDir.mkdirs();
             }
-        } catch (Exception e){
+        } catch (Exception e) {
             Main.error(e);
         }
     }
@@ -241,7 +241,7 @@ public class OsmValidator implements LayerChangeListener {
     }
 
     private static void applyPrefs(Map<String, Test> tests, boolean beforeUpload) {
-        for(String testName : Main.pref.getCollection(beforeUpload
+        for (String testName : Main.pref.getCollection(beforeUpload
         ? ValidatorPreference.PREF_SKIP_TESTS_BEFORE_UPLOAD : ValidatorPreference.PREF_SKIP_TESTS)) {
             Test test = tests.get(testName);
             if (test != null) {
diff --git a/src/org/openstreetmap/josm/data/validation/PaintVisitor.java b/src/org/openstreetmap/josm/data/validation/PaintVisitor.java
index e6b9344..aa0d917 100644
--- a/src/org/openstreetmap/josm/data/validation/PaintVisitor.java
+++ b/src/org/openstreetmap/josm/data/validation/PaintVisitor.java
@@ -111,7 +111,7 @@ public class PaintVisitor extends AbstractVisitor implements ValidatorVisitor {
 
     @Override
     public void visit(TestError error) {
-        if (error != null && !error.getIgnored()) {
+        if (error != null && !error.isIgnored()) {
             color = error.getSeverity().getColor();
             selected = error.isSelected();
             error.visitHighlighted(this);
@@ -161,10 +161,10 @@ public class PaintVisitor extends AbstractVisitor implements ValidatorVisitor {
         double sinT = 5 * Math.sin(t);
         int deg = (int) Math.toDegrees(t);
         if (selected) {
-            int[] x = new int[] { (int) (p1.x + cosT), (int) (p2.x + cosT),
-                                  (int) (p2.x - cosT), (int) (p1.x - cosT) };
-            int[] y = new int[] { (int) (p1.y - sinT), (int) (p2.y - sinT),
-                                  (int) (p2.y + sinT), (int) (p1.y + sinT) };
+            int[] x = new int[] {(int) (p1.x + cosT), (int) (p2.x + cosT),
+                                 (int) (p2.x - cosT), (int) (p1.x - cosT)};
+            int[] y = new int[] {(int) (p1.y - sinT), (int) (p2.y - sinT),
+                                 (int) (p2.y + sinT), (int) (p1.y + sinT)};
             g.fillPolygon(x, y, 4);
             g.fillArc(p1.x - 5, p1.y - 5, 10, 10, deg,  180);
             g.fillArc(p2.x - 5, p2.y - 5, 10, 10, deg, -180);
diff --git a/src/org/openstreetmap/josm/data/validation/Severity.java b/src/org/openstreetmap/josm/data/validation/Severity.java
index 1afc5e2..a00627c 100644
--- a/src/org/openstreetmap/josm/data/validation/Severity.java
+++ b/src/org/openstreetmap/josm/data/validation/Severity.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.validation;
 
 import static org.openstreetmap.josm.tools.I18n.marktr;
diff --git a/src/org/openstreetmap/josm/data/validation/Test.java b/src/org/openstreetmap/josm/data/validation/Test.java
index a9d97a5..64dc6ef 100644
--- a/src/org/openstreetmap/josm/data/validation/Test.java
+++ b/src/org/openstreetmap/josm/data/validation/Test.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.validation;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -182,7 +182,8 @@ public class Test extends AbstractVisitor {
         progressMonitor.finishTask();
         progressMonitor = null;
         if (startTime > 0) {
-            long elapsedTime = System.currentTimeMillis() - startTime;
+            // fix #11567 where elapsedTime is < 0
+            long elapsedTime = Math.max(0, System.currentTimeMillis() - startTime);
             Main.debug(tr("Test ''{0}'' completed in {1}", getName(), Utils.getDurationString(elapsedTime)));
         }
     }
@@ -194,12 +195,16 @@ public class Test extends AbstractVisitor {
      * @param selection The primitives to be tested
      */
     public void visit(Collection<OsmPrimitive> selection) {
-        progressMonitor.setTicksCount(selection.size());
+        if (progressMonitor != null) {
+            progressMonitor.setTicksCount(selection.size());
+        }
         for (OsmPrimitive p : selection) {
             if (isPrimitiveUsable(p)) {
                 p.accept(this);
             }
-            progressMonitor.worked(1);
+            if (progressMonitor != null) {
+                progressMonitor.worked(1);
+            }
         }
     }
 
@@ -250,7 +255,7 @@ public class Test extends AbstractVisitor {
     /**
      * Fixes the error with the appropriate command
      *
-     * @param testError
+     * @param testError error to fix
      * @return The command to fix the error
      */
     public Command fixError(TestError testError) {
diff --git a/src/org/openstreetmap/josm/data/validation/TestError.java b/src/org/openstreetmap/josm/data/validation/TestError.java
index 12a95e1..498abff 100644
--- a/src/org/openstreetmap/josm/data/validation/TestError.java
+++ b/src/org/openstreetmap/josm/data/validation/TestError.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.validation;
 
 import java.util.ArrayList;
@@ -32,14 +32,14 @@ import org.openstreetmap.josm.tools.AlphanumComparator;
  */
 public class TestError implements Comparable<TestError>, DataSetListener {
     /** is this error on the ignore list */
-    private Boolean ignored = false;
+    private boolean ignored = false;
     /** Severity */
     private Severity severity;
     /** The error message */
     private String message;
     /** Deeper error description */
     private String description;
-    private String description_en;
+    private String descriptionEn;
     /** The affected primitives */
     private Collection<? extends OsmPrimitive> primitives;
     /** The primitives or way segments to be highlighted */
@@ -56,43 +56,91 @@ public class TestError implements Comparable<TestError>, DataSetListener {
      * @param tester The tester
      * @param severity The severity of this error
      * @param message The error message
+     * @param description The translated description
+     * @param descriptionEn The English description
      * @param primitives The affected primitives
      * @param code The test error reference code
+     * @param highlighted OSM primitives to highlight
      */
-    public TestError(Test tester, Severity severity, String message, String description, String description_en,
+    public TestError(Test tester, Severity severity, String message, String description, String descriptionEn,
             int code, Collection<? extends OsmPrimitive> primitives, Collection<?> highlighted) {
         this.tester = tester;
         this.severity = severity;
         this.message = message;
         this.description = description;
-        this.description_en = description_en;
+        this.descriptionEn = descriptionEn;
         this.primitives = primitives;
         this.highlighted = highlighted;
         this.code = code;
     }
 
+    /**
+     * Constructs a new {@code TestError} without description.
+     * @param tester The tester
+     * @param severity The severity of this error
+     * @param message The error message
+     * @param primitives The affected primitives
+     * @param code The test error reference code
+     * @param highlighted OSM primitives to highlight
+     */
     public TestError(Test tester, Severity severity, String message, int code, Collection<? extends OsmPrimitive> primitives,
             Collection<?> highlighted) {
         this(tester, severity, message, null, null, code, primitives, highlighted);
     }
 
-    public TestError(Test tester, Severity severity, String message, String description, String description_en,
+    /**
+     * Constructs a new {@code TestError}.
+     * @param tester The tester
+     * @param severity The severity of this error
+     * @param message The error message
+     * @param description The translated description
+     * @param descriptionEn The English description
+     * @param primitives The affected primitives
+     * @param code The test error reference code
+     */
+    public TestError(Test tester, Severity severity, String message, String description, String descriptionEn,
             int code, Collection<? extends OsmPrimitive> primitives) {
-        this(tester, severity, message, description, description_en, code, primitives, primitives);
+        this(tester, severity, message, description, descriptionEn, code, primitives, primitives);
     }
 
+    /**
+     * Constructs a new {@code TestError} without description.
+     * @param tester The tester
+     * @param severity The severity of this error
+     * @param message The error message
+     * @param primitives The affected primitives
+     * @param code The test error reference code
+     */
     public TestError(Test tester, Severity severity, String message, int code, Collection<? extends OsmPrimitive> primitives) {
         this(tester, severity, message, null, null, code, primitives, primitives);
     }
 
+    /**
+     * Constructs a new {@code TestError} without description, for a single primitive.
+     * @param tester The tester
+     * @param severity The severity of this error
+     * @param message The error message
+     * @param primitive The affected primitive
+     * @param code The test error reference code
+     */
     public TestError(Test tester, Severity severity, String message, int code, OsmPrimitive primitive) {
         this(tester, severity, message, null, null, code, Collections.singletonList(primitive), Collections
                 .singletonList(primitive));
     }
 
-    public TestError(Test tester, Severity severity, String message, String description, String description_en,
+    /**
+     * Constructs a new {@code TestError} for a single primitive.
+     * @param tester The tester
+     * @param severity The severity of this error
+     * @param message The error message
+     * @param description The translated description
+     * @param descriptionEn The English description
+     * @param primitive The affected primitive
+     * @param code The test error reference code
+     */
+    public TestError(Test tester, Severity severity, String message, String description, String descriptionEn,
             int code, OsmPrimitive primitive) {
-        this(tester, severity, message, description, description_en, code, Collections.singletonList(primitive));
+        this(tester, severity, message, description, descriptionEn, code, Collections.singletonList(primitive));
     }
 
     /**
@@ -145,7 +193,7 @@ public class TestError implements Comparable<TestError>, DataSetListener {
      * Sets the list of primitives affected by this error
      * @param primitives the list of primitives affected by this error
      */
-    public void setPrimitives(List<OsmPrimitive> primitives) {
+    public void setPrimitives(List<? extends OsmPrimitive> primitives) {
         this.primitives = primitives;
     }
 
@@ -186,15 +234,15 @@ public class TestError implements Comparable<TestError>, DataSetListener {
             strings.add(type + "_" + o.getId());
         }
         for (String o : strings) {
-            ignorestring.append(":").append(o);
+            ignorestring.append(':').append(o);
         }
         return ignorestring.toString();
     }
 
     public String getIgnoreSubGroup() {
         String ignorestring = getIgnoreGroup();
-        if (description_en != null) {
-            ignorestring += "_" + description_en;
+        if (descriptionEn != null) {
+            ignorestring += "_" + descriptionEn;
         }
         return ignorestring;
     }
@@ -207,7 +255,7 @@ public class TestError implements Comparable<TestError>, DataSetListener {
         ignored = state;
     }
 
-    public Boolean getIgnored() {
+    public boolean isIgnored() {
         return ignored;
     }
 
@@ -268,7 +316,7 @@ public class TestError implements Comparable<TestError>, DataSetListener {
             } else if (o instanceof WaySegment) {
                 v.visit((WaySegment) o);
             } else if (o instanceof List<?>) {
-                v.visit((List<Node>)o);
+                v.visit((List<Node>) o);
             }
         }
     }
@@ -317,11 +365,17 @@ public class TestError implements Comparable<TestError>, DataSetListener {
     }
 
     @Override public void primitivesAdded(PrimitivesAddedEvent event) {}
+
     @Override public void tagsChanged(TagsChangedEvent event) {}
+
     @Override public void nodeMoved(NodeMovedEvent event) {}
+
     @Override public void wayNodesChanged(WayNodesChangedEvent event) {}
+
     @Override public void relationMembersChanged(RelationMembersChangedEvent event) {}
+
     @Override public void otherDatasetChange(AbstractDatasetChangedEvent event) {}
+
     @Override public void dataChanged(DataChangedEvent event) {}
 
     @Override
diff --git a/src/org/openstreetmap/josm/data/validation/ValidatorVisitor.java b/src/org/openstreetmap/josm/data/validation/ValidatorVisitor.java
index 2c316d8..13a792b 100644
--- a/src/org/openstreetmap/josm/data/validation/ValidatorVisitor.java
+++ b/src/org/openstreetmap/josm/data/validation/ValidatorVisitor.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.validation;
 
 import java.util.List;
@@ -9,7 +9,10 @@ import org.openstreetmap.josm.data.osm.WaySegment;
 
 public interface ValidatorVisitor {
     void visit(TestError error);
+
     void visit(OsmPrimitive p);
+
     void visit(WaySegment ws);
+
     void visit(List<Node> nodes);
 }
diff --git a/src/org/openstreetmap/josm/data/validation/routines/DomainValidator.java b/src/org/openstreetmap/josm/data/validation/routines/DomainValidator.java
index 3b7b804..f0bd540 100644
--- a/src/org/openstreetmap/josm/data/validation/routines/DomainValidator.java
+++ b/src/org/openstreetmap/josm/data/validation/routines/DomainValidator.java
@@ -17,6 +17,7 @@
 package org.openstreetmap.josm.data.validation.routines;
 
 import java.util.Arrays;
+import java.util.Locale;
 
 /**
  * <p><b>Domain name</b> validation routines.</p>
@@ -60,7 +61,7 @@ import java.util.Arrays;
  * @version $Revision: 1640271 $ $Date: 2014-11-18 02:32:15 2014 UTC (Tue, 18 Nov 2014) $
  * @since Validator 1.4
  */
-public class DomainValidator extends AbstractValidator {
+public final class DomainValidator extends AbstractValidator {
 
     // Regular expression strings for hostnames (derived from RFC2396 and RFC 1123)
     private static final String DOMAIN_LABEL_REGEX = "\\p{Alnum}(?>[\\p{Alnum}-]*\\p{Alnum})*";
@@ -113,7 +114,7 @@ public class DomainValidator extends AbstractValidator {
      * @return the singleton instance of this validator
      */
     public static DomainValidator getInstance(boolean allowLocal) {
-       if(allowLocal) {
+       if (allowLocal) {
           return DOMAIN_VALIDATOR_WITH_LOCAL;
        }
        return DOMAIN_VALIDATOR;
@@ -136,7 +137,7 @@ public class DomainValidator extends AbstractValidator {
         String[] groups = domainRegex.match(domain);
         if (groups != null && groups.length > 0) {
             return isValidTld(groups[0]);
-        } else if(allowLocal) {
+        } else if (allowLocal) {
             if (hostnameRegex.isValid(domain)) {
                return true;
             }
@@ -152,7 +153,7 @@ public class DomainValidator extends AbstractValidator {
      * @return true if the parameter is a TLD
      */
     public boolean isValidTld(String tld) {
-        if(allowLocal && isValidLocalTld(tld)) {
+        if (allowLocal && isValidLocalTld(tld)) {
            return true;
         }
         return isValidInfrastructureTld(tld)
@@ -169,7 +170,7 @@ public class DomainValidator extends AbstractValidator {
      * @return true if the parameter is an infrastructure TLD
      */
     public boolean isValidInfrastructureTld(String iTld) {
-        return Arrays.binarySearch(INFRASTRUCTURE_TLDS, (chompLeadingDot(iTld.toLowerCase()))) >= 0;
+        return Arrays.binarySearch(INFRASTRUCTURE_TLDS, chompLeadingDot(iTld.toLowerCase(Locale.ENGLISH))) >= 0;
     }
 
     /**
@@ -180,7 +181,7 @@ public class DomainValidator extends AbstractValidator {
      * @return true if the parameter is a generic TLD
      */
     public boolean isValidGenericTld(String gTld) {
-        return Arrays.binarySearch(GENERIC_TLDS, chompLeadingDot(gTld.toLowerCase())) >= 0;
+        return Arrays.binarySearch(GENERIC_TLDS, chompLeadingDot(gTld.toLowerCase(Locale.ENGLISH))) >= 0;
     }
 
     /**
@@ -191,7 +192,7 @@ public class DomainValidator extends AbstractValidator {
      * @return true if the parameter is an IDN TLD
      */
     public boolean isValidIdnTld(String iTld) {
-        return Arrays.binarySearch(IDN_TLDS, chompLeadingDot(iTld.toUpperCase())) >= 0;
+        return Arrays.binarySearch(IDN_TLDS, chompLeadingDot(iTld.toUpperCase(Locale.ENGLISH))) >= 0;
     }
 
     /**
@@ -202,7 +203,7 @@ public class DomainValidator extends AbstractValidator {
      * @return true if the parameter is a country code TLD
      */
     public boolean isValidCountryCodeTld(String ccTld) {
-        return Arrays.binarySearch(COUNTRY_CODE_TLDS, chompLeadingDot(ccTld.toLowerCase())) >= 0;
+        return Arrays.binarySearch(COUNTRY_CODE_TLDS, chompLeadingDot(ccTld.toLowerCase(Locale.ENGLISH))) >= 0;
     }
 
     /**
@@ -213,7 +214,7 @@ public class DomainValidator extends AbstractValidator {
      * @return true if the parameter is an local TLD
      */
     public boolean isValidLocalTld(String iTld) {
-        return Arrays.binarySearch(LOCAL_TLDS, chompLeadingDot(iTld.toLowerCase())) >= 0;
+        return Arrays.binarySearch(LOCAL_TLDS, chompLeadingDot(iTld.toLowerCase(Locale.ENGLISH))) >= 0;
     }
 
     private String chompLeadingDot(String str) {
diff --git a/src/org/openstreetmap/josm/data/validation/routines/EmailValidator.java b/src/org/openstreetmap/josm/data/validation/routines/EmailValidator.java
index 8a41ef6..d36606b 100644
--- a/src/org/openstreetmap/josm/data/validation/routines/EmailValidator.java
+++ b/src/org/openstreetmap/josm/data/validation/routines/EmailValidator.java
@@ -87,7 +87,7 @@ public class EmailValidator extends AbstractValidator {
      * @return singleton instance of this validator
      */
     public static EmailValidator getInstance(boolean allowLocal) {
-        if(allowLocal) {
+        if (allowLocal) {
            return EMAIL_VALIDATOR_WITH_LOCAL;
         }
         return EMAIL_VALIDATOR;
diff --git a/src/org/openstreetmap/josm/data/validation/routines/InetAddressValidator.java b/src/org/openstreetmap/josm/data/validation/routines/InetAddressValidator.java
index 098c4cb..9154bdc 100644
--- a/src/org/openstreetmap/josm/data/validation/routines/InetAddressValidator.java
+++ b/src/org/openstreetmap/josm/data/validation/routines/InetAddressValidator.java
@@ -73,7 +73,7 @@ public class InetAddressValidator extends AbstractValidator {
         // verify that address subgroups are legal
         for (int i = 0; i <= 3; i++) {
             String ipSegment = groups[i];
-            if (ipSegment == null || ipSegment.length() <= 0) {
+            if (ipSegment == null || ipSegment.isEmpty()) {
                 return false;
             }
 
@@ -81,7 +81,7 @@ public class InetAddressValidator extends AbstractValidator {
 
             try {
                 iIpSegment = Integer.parseInt(ipSegment);
-            } catch(NumberFormatException e) {
+            } catch (NumberFormatException e) {
                 return false;
             }
 
diff --git a/src/org/openstreetmap/josm/data/validation/routines/RegexValidator.java b/src/org/openstreetmap/josm/data/validation/routines/RegexValidator.java
index 3b1d49a..035d2f0 100644
--- a/src/org/openstreetmap/josm/data/validation/routines/RegexValidator.java
+++ b/src/org/openstreetmap/josm/data/validation/routines/RegexValidator.java
@@ -33,18 +33,18 @@ import java.util.regex.Pattern;
  * </pre>
  * <p>
  * <ul>
- *   <li>Validate <code>true</code> or <code>false</code>:</li>
+ *   <li>Validate <code>true</code> or <code>false</code>:
  *   <ul>
  *     <li><code>boolean valid = validator.isValid(value);</code></li>
- *   </ul>
- *   <li>Validate returning an aggregated String of the matched groups:</li>
+ *   </ul></li>
+ *   <li>Validate returning an aggregated String of the matched groups:
  *   <ul>
  *     <li><code>String result = validator.validate(value);</code></li>
- *   </ul>
- *   <li>Validate returning the matched groups:</li>
+ *   </ul></li>
+ *   <li>Validate returning the matched groups:
  *   <ul>
  *     <li><code>String[] result = validator.match(value);</code></li>
- *   </ul>
+ *   </ul></li>
  * </ul>
  * <p>
  * Cached instances pre-compile and re-use {@link Pattern}(s) - which according
@@ -106,9 +106,9 @@ public class RegexValidator extends AbstractValidator {
             throw new IllegalArgumentException("Regular expressions are missing");
         }
         patterns = new Pattern[regexs.length];
-        int flags =  (caseSensitive ? 0: Pattern.CASE_INSENSITIVE);
+        int flags = caseSensitive ? 0 : Pattern.CASE_INSENSITIVE;
         for (int i = 0; i < regexs.length; i++) {
-            if (regexs[i] == null || regexs[i].length() == 0) {
+            if (regexs[i] == null || regexs[i].isEmpty()) {
                 throw new IllegalArgumentException("Regular expression[" + i + "] is missing");
             }
             patterns[i] =  Pattern.compile(regexs[i], flags);
@@ -181,7 +181,7 @@ public class RegexValidator extends AbstractValidator {
                 if (count == 1) {
                     return matcher.group(1);
                 }
-                StringBuffer buffer = new StringBuffer();
+                StringBuilder buffer = new StringBuilder();
                 for (int j = 0; j < count; j++) {
                     String component = matcher.group(j+1);
                     if (component != null) {
@@ -200,16 +200,15 @@ public class RegexValidator extends AbstractValidator {
      */
     @Override
     public String toString() {
-        StringBuffer buffer = new StringBuffer();
+        StringBuilder buffer = new StringBuilder();
         buffer.append("RegexValidator{");
         for (int i = 0; i < patterns.length; i++) {
             if (i > 0) {
-                buffer.append(",");
+                buffer.append(',');
             }
             buffer.append(patterns[i].pattern());
         }
-        buffer.append("}");
+        buffer.append('}');
         return buffer.toString();
     }
-
 }
diff --git a/src/org/openstreetmap/josm/data/validation/routines/UrlValidator.java b/src/org/openstreetmap/josm/data/validation/routines/UrlValidator.java
index dbf587f..ff77e04 100644
--- a/src/org/openstreetmap/josm/data/validation/routines/UrlValidator.java
+++ b/src/org/openstreetmap/josm/data/validation/routines/UrlValidator.java
@@ -27,14 +27,14 @@ import java.util.regex.Pattern;
 
 /**
  * <p><b>URL Validation</b> routines.</p>
- * Behavior of validation is modified by passing in options:
+ * Behavior of validation is modified by passing in options:<ul>
  * <li>ALLOW_2_SLASHES - [FALSE]  Allows double '/' characters in the path
  * component.</li>
  * <li>NO_FRAGMENT- [FALSE]  By default fragments are allowed, if this option is
  * included then fragments are flagged as illegal.</li>
  * <li>ALLOW_ALL_SCHEMES - [FALSE] By default only http, https, and ftp are
  * considered valid schemes.  Enabling this option will let any scheme pass validation.</li>
- *
+ * </ul>
  * <p>Originally based in on php script by Debbie Dyer, validation.php v1.2b, Date: 03/07/02,
  * http://javascript.internet.com. However, this validation now bears little resemblance
  * to the php original.</p>
@@ -63,12 +63,12 @@ import java.util.regex.Pattern;
  *   prints out "url is valid"
  *  </pre>
  *
+ * @version $Revision: 1640269 $ $Date: 2014-11-18 02:28:56 UTC (Tue, 18 Nov 2014) $
  * @see
  * <a href="http://www.ietf.org/rfc/rfc2396.txt">
  *  Uniform Resource Identifiers (URI): Generic Syntax
  * </a>
  *
- * @version $Revision: 1640269 $ $Date: 2014-11-18 02:28:56 UTC (Tue, 18 Nov 2014) $
  * @since Validator 1.4
  */
 public class UrlValidator extends AbstractValidator {
@@ -404,7 +404,7 @@ public class UrlValidator extends AbstractValidator {
         }
 
         String extra = authorityMatcher.group(PARSE_AUTHORITY_EXTRA);
-        if (extra != null && extra.trim().length() > 0){
+        if (extra != null && !extra.trim().isEmpty()) {
             return false;
         }
 
diff --git a/src/org/openstreetmap/josm/data/validation/tests/Addresses.java b/src/org/openstreetmap/josm/data/validation/tests/Addresses.java
index 1c467ab..c5fcb0e 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/Addresses.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/Addresses.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.validation.tests;
 
 import static org.openstreetmap.josm.tools.I18n.marktr;
@@ -11,6 +11,7 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
@@ -53,12 +54,15 @@ public class Addresses extends Test {
         public AddressError(int code, OsmPrimitive p, String message) {
             this(code, Collections.singleton(p), message);
         }
+
         public AddressError(int code, Collection<OsmPrimitive> collection, String message) {
             this(code, collection, message, null, null);
         }
+
         public AddressError(int code, Collection<OsmPrimitive> collection, String message, String description, String englishDescription) {
             this(code, Severity.WARNING, collection, message, description, englishDescription);
         }
+
         public AddressError(int code, Severity severity, Collection<OsmPrimitive> collection, String message, String description,
                 String englishDescription) {
             super(Addresses.this, severity, message, description, englishDescription, code, collection);
@@ -150,7 +154,7 @@ public class Addresses extends Test {
                     houses.add(p);
                     String number = p.get(ADDR_HOUSE_NUMBER);
                     if (number != null) {
-                        number = number.trim().toUpperCase();
+                        number = number.trim().toUpperCase(Locale.ENGLISH);
                         List<OsmPrimitive> list = map.get(number);
                         if (list == null) {
                             map.put(number, list = new ArrayList<>());
@@ -205,7 +209,7 @@ public class Addresses extends Test {
         if (house instanceof Node) {
             centroid = ((Node) house).getEastNorth();
         } else if (house instanceof Way) {
-            List<Node> nodes = ((Way)house).getNodes();
+            List<Node> nodes = ((Way) house).getNodes();
             if (house.hasKey(ADDR_INTERPOLATION)) {
                 for (Node n : nodes) {
                     if (n.hasKey(ADDR_HOUSE_NUMBER)) {
diff --git a/src/org/openstreetmap/josm/data/validation/tests/BarriersEntrances.java b/src/org/openstreetmap/josm/data/validation/tests/BarriersEntrances.java
index 3fcdca5..3ebc8fa 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/BarriersEntrances.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/BarriersEntrances.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.validation.tests;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -14,7 +14,7 @@ import org.openstreetmap.josm.data.validation.TestError;
  * @since 6192
  */
 public class BarriersEntrances extends Test {
-    
+
     protected static final int BARRIER_ENTRANCE_WITHOUT_BARRIER = 2801;
 
     /**
diff --git a/src/org/openstreetmap/josm/data/validation/tests/Coastlines.java b/src/org/openstreetmap/josm/data/validation/tests/Coastlines.java
index 7d5e18f..88674e4 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/Coastlines.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/Coastlines.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.validation.tests;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -188,8 +188,7 @@ public class Coastlines extends Test {
 
                 errors.add(new TestError(this, Severity.ERROR, tr("Unordered coastline"),
                         UNORDERED_COASTLINE, primitives, highlight));
-            }
-            else if (reversed) {
+            } else if (reversed) {
                 errors.add(new TestError(this, Severity.ERROR, tr("Reversed coastline"),
                         REVERSED_COASTLINE, primitives));
             }
@@ -237,7 +236,7 @@ public class Coastlines extends Test {
     @Override
     public boolean isFixable(TestError testError) {
         if (testError.getTester() instanceof Coastlines)
-            return (testError.getCode() == REVERSED_COASTLINE);
+            return testError.getCode() == REVERSED_COASTLINE;
 
         return false;
     }
diff --git a/src/org/openstreetmap/josm/data/validation/tests/ConditionalKeys.java b/src/org/openstreetmap/josm/data/validation/tests/ConditionalKeys.java
index d4f0eb2..ffcc2a4 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/ConditionalKeys.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/ConditionalKeys.java
@@ -16,6 +16,7 @@ import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.validation.Severity;
 import org.openstreetmap.josm.data.validation.Test;
 import org.openstreetmap.josm.data.validation.TestError;
+import org.openstreetmap.josm.tools.LanguageInfo;
 import org.openstreetmap.josm.tools.Predicates;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -26,8 +27,9 @@ import org.openstreetmap.josm.tools.Utils;
 public class ConditionalKeys extends Test.TagTest {
 
     private final OpeningHourTest openingHourTest = new OpeningHourTest();
-    private static final Set<String> RESTRICTION_TYPES = new HashSet<>(Arrays.asList("oneway", "toll", "noexit", "maxspeed", "minspeed", "maxstay",
-            "maxweight", "maxaxleload", "maxheight", "maxwidth", "maxlength", "overtaking", "maxgcweight", "maxgcweightrating", "fee"));
+    private static final Set<String> RESTRICTION_TYPES = new HashSet<>(Arrays.asList("oneway", "toll", "noexit", "maxspeed", "minspeed",
+            "maxstay", "maxweight", "maxaxleload", "maxheight", "maxwidth", "maxlength", "overtaking", "maxgcweight", "maxgcweightrating",
+            "fee"));
     private static final Set<String> RESTRICTION_VALUES = new HashSet<>(Arrays.asList("yes", "official", "designated", "destination",
             "delivery", "permissive", "private", "agricultural", "forestry", "no"));
     private static final Set<String> TRANSPORT_MODES = new HashSet<>(Arrays.asList("access", "foot", "ski", "inline_skates", "ice_skates",
@@ -101,7 +103,8 @@ public class ConditionalKeys extends Test.TagTest {
         public static List<ConditionalValue> parse(String value) throws ConditionalParsingException {
             // <restriction-value> @ <condition>[;<restriction-value> @ <condition>]
             final List<ConditionalValue> r = new ArrayList<>();
-            final Pattern part = Pattern.compile("([^@\\p{Space}][^@]*?)" + "\\s*@\\s*" + "(\\([^)\\p{Space}][^)]+?\\)|[^();\\p{Space}][^();]*?)\\s*");
+            final Pattern part = Pattern.compile("([^@\\p{Space}][^@]*?)"
+                    + "\\s*@\\s*" + "(\\([^)\\p{Space}][^)]+?\\)|[^();\\p{Space}][^();]*?)\\s*");
             final Matcher m = Pattern.compile("(" + part + ")(;\\s*" + part + ")*").matcher(value);
             if (!m.matches()) {
                 throw new ConditionalParsingException(tr("Does not match pattern ''restriction value @ condition''"));
@@ -129,7 +132,7 @@ public class ConditionalKeys extends Test.TagTest {
                 for (final String condition : conditional.conditions) {
                     if (condition.matches(".*[0-9]:[0-9]{2}.*")) {
                         final List<OpeningHourTest.OpeningHoursTestError> errors = openingHourTest.checkOpeningHourSyntax(
-                                "", condition, OpeningHourTest.CheckMode.TIME_RANGE, true);
+                                "", condition, OpeningHourTest.CheckMode.TIME_RANGE, true, LanguageInfo.getJOSMLocaleCode());
                         if (!errors.isEmpty()) {
                             return errors.get(0).getMessage();
                         }
diff --git a/src/org/openstreetmap/josm/data/validation/tests/CrossingWays.java b/src/org/openstreetmap/josm/data/validation/tests/CrossingWays.java
index 491f2d7..4eddf32 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/CrossingWays.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/CrossingWays.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.validation.tests;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -39,7 +39,7 @@ public abstract class CrossingWays extends Test {
     private static final String WATERWAY = "waterway";
 
     /** All way segments, grouped by cells */
-    private Map<Point2D,List<WaySegment>> cellSegments;
+    private Map<Point2D, List<WaySegment>> cellSegments;
     /** The already detected errors */
     private Set<WaySegment> errorSegments;
     /** The already detected ways in error */
@@ -180,7 +180,8 @@ public abstract class CrossingWays extends Test {
      * @since 6691
      */
     public CrossingWays(String title) {
-        super(title, tr("This test checks if two roads, railways, waterways or buildings crosses in the same layer, but are not connected by a node."));
+        super(title, tr("This test checks if two roads, railways, waterways or buildings crosses in the same layer, " +
+                "but are not connected by a node."));
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/data/validation/tests/DuplicateNode.java b/src/org/openstreetmap/josm/data/validation/tests/DuplicateNode.java
index 6c9ed09..35b6bd1 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/DuplicateNode.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/DuplicateNode.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.validation.tests;
 
 import static org.openstreetmap.josm.tools.I18n.marktr;
@@ -58,14 +58,14 @@ public class DuplicateNode extends Test {
                 LatLon coor = ((Node) o).getCoor();
                 if (coor == null)
                     return null;
-                if (precision==0)
+                if (precision == 0)
                     return coor.getRoundedToOsmPrecision();
                 return roundCoord(coor);
             } else if (o instanceof List<?>) {
                 LatLon coor = ((List<Node>) o).get(0).getCoor();
                 if (coor == null)
                     return null;
-                if (precision==0)
+                if (precision == 0)
                     return coor.getRoundedToOsmPrecision();
                 return roundCoord(coor);
             } else
@@ -120,7 +120,6 @@ public class DuplicateNode extends Test {
         potentialDuplicates = new Storage<>(new NodeHash());
     }
 
-
     @SuppressWarnings("unchecked")
     @Override
     public void endTest() {
@@ -162,20 +161,17 @@ public class DuplicateNode extends Test {
     public List<TestError> buildTestErrors(Test parentTest, List<Node> nodes) {
         List<TestError> errors = new ArrayList<>();
 
-        MultiMap<Map<String,String>, OsmPrimitive> mm = new MultiMap<>();
+        MultiMap<Map<String, String>, OsmPrimitive> mm = new MultiMap<>();
         for (Node n: nodes) {
             mm.put(n.getKeys(), n);
         }
 
-        Map<String,Boolean> typeMap=new HashMap<>();
+        Map<String, Boolean> typeMap = new HashMap<>();
         String[] types = {"none", "highway", "railway", "waterway", "boundary", "power", "natural", "landuse", "building"};
 
-
-        // check whether we have multiple nodes at the same position with
-        // the same tag set
-        //
-        for (Iterator<Map<String,String>> it = mm.keySet().iterator(); it.hasNext();) {
-            Map<String,String> tagSet = it.next();
+        // check whether we have multiple nodes at the same position with the same tag set
+        for (Iterator<Map<String, String>> it = mm.keySet().iterator(); it.hasNext();) {
+            Map<String, String> tagSet = it.next();
             if (mm.get(tagSet).size() > 1) {
 
                 for (String type: types) {
@@ -183,18 +179,18 @@ public class DuplicateNode extends Test {
                 }
 
                 for (OsmPrimitive p : mm.get(tagSet)) {
-                    if (p.getType()==OsmPrimitiveType.NODE) {
+                    if (p.getType() == OsmPrimitiveType.NODE) {
                         Node n = (Node) p;
-                        List<OsmPrimitive> lp=n.getReferrers();
+                        List<OsmPrimitive> lp = n.getReferrers();
                         for (OsmPrimitive sp: lp) {
-                            if (sp.getType()==OsmPrimitiveType.WAY) {
+                            if (sp.getType() == OsmPrimitiveType.WAY) {
                                 boolean typed = false;
-                                Way w=(Way) sp;
+                                Way w = (Way) sp;
                                 Map<String, String> keys = w.getKeys();
                                 for (String type: typeMap.keySet()) {
                                     if (keys.containsKey(type)) {
                                         typeMap.put(type, true);
-                                        typed=true;
+                                        typed = true;
                                     }
                                 }
                                 if (!typed) {
@@ -206,14 +202,14 @@ public class DuplicateNode extends Test {
                     }
                 }
 
-                int nbType=0;
+                int nbType = 0;
                 for (Entry<String, Boolean> entry: typeMap.entrySet()) {
                     if (entry.getValue()) {
                         nbType++;
                     }
                 }
 
-                if (nbType>1) {
+                if (nbType > 1) {
                     String msg = marktr("Mixed type duplicated nodes");
                     errors.add(new TestError(
                             parentTest,
@@ -363,7 +359,7 @@ public class DuplicateNode extends Test {
                 // we have an additional node at the same position. Create an extra
                 // object to keep track of the nodes at this position.
                 //
-                Node n1 = (Node)potentialDuplicates.get(n);
+                Node n1 = (Node) potentialDuplicates.get(n);
                 List<Node> nodes = new ArrayList<>(2);
                 nodes.add(n1);
                 nodes.add(n);
@@ -371,7 +367,7 @@ public class DuplicateNode extends Test {
             } else if (potentialDuplicates.get(n) instanceof List<?>) {
                 // we have multiple nodes at the same position.
                 //
-                List<Node> nodes = (List<Node>)potentialDuplicates.get(n);
+                List<Node> nodes = (List<Node>) potentialDuplicates.get(n);
                 nodes.add(n);
             }
         }
@@ -384,7 +380,7 @@ public class DuplicateNode extends Test {
     @Override
     public Command fixError(TestError testError) {
         if (!isFixable(testError)) return null;
-        Collection<OsmPrimitive> sel = new LinkedList<>(testError.getPrimitives());
+        Collection<OsmPrimitive> sel = new LinkedList<OsmPrimitive>(testError.getPrimitives());
         Set<Node> nodes = new LinkedHashSet<>(OsmPrimitive.getFilteredList(sel, Node.class));
 
         // Filter nodes that have already been deleted (see #5764 and #5773)
@@ -412,7 +408,7 @@ public class DuplicateNode extends Test {
                 return MergeNodesAction.mergeNodes(Main.main.getEditLayer(), nodes, target);
         }
 
-        return null;// undoRedo handling done in mergeNodes
+        return null; // undoRedo handling done in mergeNodes
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/data/validation/tests/DuplicateRelation.java b/src/org/openstreetmap/josm/data/validation/tests/DuplicateRelation.java
index 86cd489..4ce148a 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/DuplicateRelation.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/DuplicateRelation.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.validation.tests;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -54,14 +54,14 @@ public class DuplicateRelation extends Test {
 
         @Override
         public int hashCode() {
-            return role.hashCode()+(int)relId+tags.hashCode()+type.hashCode()+coor.hashCode();
+            return role.hashCode()+(int) relId+tags.hashCode()+type.hashCode()+coor.hashCode();
         }
 
         @Override
         public boolean equals(Object obj) {
             if (!(obj instanceof RelMember)) return false;
             RelMember rm = (RelMember) obj;
-            return rm.role.equals(role) && rm.type.equals(type) && rm.relId==relId && rm.tags.equals(tags) && rm.coor.equals(coor);
+            return rm.role.equals(role) && rm.type.equals(type) && rm.relId == relId && rm.tags.equals(tags) && rm.coor.equals(coor);
         }
 
         /** Extract and store relation information based on the relation member
@@ -130,7 +130,7 @@ public class DuplicateRelation extends Test {
     /**
      * Class to store relation data (keys are usually cleanup and may not be equal to original relation)
      */
-    private class RelationPair {
+    private static class RelationPair {
         /** Member objects of the relation */
         private RelationMembers members;
         /** Tags of the relation */
@@ -168,7 +168,7 @@ public class DuplicateRelation extends Test {
     private MultiMap<RelationPair, OsmPrimitive> relations;
 
     /** MultiMap of all relations, regardless of keys */
-    private MultiMap<List<RelationMember>, OsmPrimitive> relations_nokeys;
+    private MultiMap<List<RelationMember>, OsmPrimitive> relationsNoKeys;
 
     /** List of keys without useful information */
     private final Set<String> ignoreKeys = new HashSet<>(OsmPrimitive.getUninterestingKeys());
@@ -185,7 +185,7 @@ public class DuplicateRelation extends Test {
     public void startTest(ProgressMonitor monitor) {
         super.startTest(monitor);
         relations = new MultiMap<>(1000);
-        relations_nokeys = new MultiMap<>(1000);
+        relationsNoKeys = new MultiMap<>(1000);
     }
 
     @Override
@@ -194,17 +194,17 @@ public class DuplicateRelation extends Test {
         for (Set<OsmPrimitive> duplicated : relations.values()) {
             if (duplicated.size() > 1) {
                 TestError testError = new TestError(this, Severity.ERROR, tr("Duplicated relations"), DUPLICATE_RELATION, duplicated);
-                errors.add( testError );
+                errors.add(testError);
             }
         }
         relations = null;
-        for (Set<OsmPrimitive> duplicated : relations_nokeys.values()) {
+        for (Set<OsmPrimitive> duplicated : relationsNoKeys.values()) {
             if (duplicated.size() > 1) {
                 TestError testError = new TestError(this, Severity.WARNING, tr("Relations with same members"), SAME_RELATION, duplicated);
-                errors.add( testError );
+                errors.add(testError);
             }
         }
-        relations_nokeys = null;
+        relationsNoKeys = null;
     }
 
     @Override
@@ -213,11 +213,12 @@ public class DuplicateRelation extends Test {
             return;
         List<RelationMember> rMembers = r.getMembers();
         Map<String, String> rkeys = r.getKeys();
-        for (String key : ignoreKeys)
+        for (String key : ignoreKeys) {
             rkeys.remove(key);
+        }
         RelationPair rKey = new RelationPair(rMembers, rkeys);
         relations.put(rKey, r);
-        relations_nokeys.put(rMembers, r);
+        relationsNoKeys.put(rMembers, r);
     }
 
     /**
@@ -230,10 +231,11 @@ public class DuplicateRelation extends Test {
         Collection<? extends OsmPrimitive> sel = testError.getPrimitives();
         Set<Relation> relFix = new HashSet<>();
 
-        for (OsmPrimitive osm : sel)
+        for (OsmPrimitive osm : sel) {
             if (osm instanceof Relation && !osm.isDeleted()) {
-                relFix.add((Relation)osm);
+                relFix.add((Relation) osm);
             }
+        }
 
         if (relFix.size() < 2)
             return null;
@@ -293,10 +295,11 @@ public class DuplicateRelation extends Test {
         Collection<? extends OsmPrimitive> sel = testError.getPrimitives();
         Set<Relation> relations = new HashSet<>();
 
-        for (OsmPrimitive osm : sel)
+        for (OsmPrimitive osm : sel) {
             if (osm instanceof Relation) {
-                relations.add((Relation)osm);
+                relations.add((Relation) osm);
             }
+        }
 
         if (relations.size() < 2)
             return false;
@@ -308,6 +311,6 @@ public class DuplicateRelation extends Test {
                 ++relationsWithRelations;
             }
         }
-        return (relationsWithRelations <= 1);
+        return relationsWithRelations <= 1;
     }
 }
diff --git a/src/org/openstreetmap/josm/data/validation/tests/DuplicateWay.java b/src/org/openstreetmap/josm/data/validation/tests/DuplicateWay.java
index 3d3e34d..1a03c29 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/DuplicateWay.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/DuplicateWay.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.validation.tests;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -66,13 +66,16 @@ public class DuplicateWay extends Test {
       */
     private static class WayPairNoTags {
         private final List<LatLon> coor;
+
         public WayPairNoTags(List<LatLon> coor) {
             this.coor = coor;
         }
+
         @Override
         public int hashCode() {
             return coor.hashCode();
         }
+
         @Override
         public boolean equals(Object obj) {
             if (!(obj instanceof WayPairNoTags)) return false;
@@ -124,18 +127,18 @@ public class DuplicateWay extends Test {
         for (Set<OsmPrimitive> sameway : waysNoTags.values()) {
             if (sameway.size() > 1) {
                 //Report error only if at least some tags are different, as otherwise the error was already reported as duplicated ways
-                Map<String, String> tags0=null;
-                boolean skip=true;
+                Map<String, String> tags0 = null;
+                boolean skip = true;
 
                 for (OsmPrimitive o : sameway) {
-                    if (tags0==null) {
-                        tags0=o.getKeys();
+                    if (tags0 == null) {
+                        tags0 = o.getKeys();
                         removeUninterestingKeys(tags0);
                     } else {
-                        Map<String, String> tagsCmp=o.getKeys();
+                        Map<String, String> tagsCmp = o.getKeys();
                         removeUninterestingKeys(tagsCmp);
                         if (!tagsCmp.equals(tags0)) {
-                            skip=false;
+                            skip = false;
                             break;
                         }
                     }
@@ -157,7 +160,7 @@ public class DuplicateWay extends Test {
      * @param wkeys The tags of the way, obtained by {@code Way#getKeys}
      */
     public void removeUninterestingKeys(Map<String, String> wkeys) {
-        for(String key : OsmPrimitive.getDiscardableKeys()) {
+        for (String key : OsmPrimitive.getDiscardableKeys()) {
             wkeys.remove(key);
         }
     }
@@ -206,16 +209,16 @@ public class DuplicateWay extends Test {
         if (w.isClosed()) {
             int lowestIndex = 0;
             long lowestNodeId = wNodes.get(0).getUniqueId();
-            for (int i=1; i<wNodes.size(); i++) {
+            for (int i = 1; i < wNodes.size(); i++) {
                 if (wNodes.get(i).getUniqueId() < lowestNodeId) {
                     lowestNodeId = wNodes.get(i).getUniqueId();
                     lowestIndex = i;
                 }
             }
-            for (int i=lowestIndex; i<wNodes.size()-1; i++) {
+            for (int i = lowestIndex; i < wNodes.size()-1; i++) {
                 wNodesToUse.add(wNodes.get(i));
             }
-            for (int i=0; i<lowestIndex; i++) {
+            for (int i = 0; i < lowestIndex; i++) {
                 wNodesToUse.add(wNodes.get(i));
             }
             wNodesToUse.add(wNodes.get(lowestIndex));
@@ -240,7 +243,7 @@ public class DuplicateWay extends Test {
 
         for (OsmPrimitive osm : sel) {
             if (osm instanceof Way && !osm.isDeleted()) {
-                ways.add((Way)osm);
+                ways.add((Way) osm);
             }
         }
 
@@ -300,7 +303,7 @@ public class DuplicateWay extends Test {
             return false;
 
         //Do not automatically fix same ways with different tags
-        if (testError.getCode()!=DUPLICATE_WAY) return false;
+        if (testError.getCode() != DUPLICATE_WAY) return false;
 
         // We fix it only if there is no more than one way that is relation member.
         Collection<? extends OsmPrimitive> sel = testError.getPrimitives();
@@ -308,7 +311,7 @@ public class DuplicateWay extends Test {
 
         for (OsmPrimitive osm : sel) {
             if (osm instanceof Way) {
-                ways.add((Way)osm);
+                ways.add((Way) osm);
             }
         }
 
@@ -322,6 +325,6 @@ public class DuplicateWay extends Test {
                 ++waysWithRelations;
             }
         }
-        return (waysWithRelations <= 1);
+        return waysWithRelations <= 1;
     }
 }
diff --git a/src/org/openstreetmap/josm/data/validation/tests/DuplicatedWayNodes.java b/src/org/openstreetmap/josm/data/validation/tests/DuplicatedWayNodes.java
index de3354a..6ed6b81 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/DuplicatedWayNodes.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/DuplicatedWayNodes.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.validation.tests;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
diff --git a/src/org/openstreetmap/josm/data/validation/tests/Highways.java b/src/org/openstreetmap/josm/data/validation/tests/Highways.java
index a692b70..468c607 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/Highways.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/Highways.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.validation.tests;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -42,7 +42,7 @@ public class Highways extends Test {
     /**
      * Classified highways in order of importance
      */
-    protected static final List<String> CLASSIFIED_HIGHWAYS = Arrays.asList(
+    private static final List<String> CLASSIFIED_HIGHWAYS = Arrays.asList(
             "motorway",  "motorway_link",
             "trunk",     "trunk_link",
             "primary",   "primary_link",
@@ -52,10 +52,10 @@ public class Highways extends Test {
             "residential",
             "living_street");
 
-    protected static final List<String> KNOWN_SOURCE_MAXSPEED_CONTEXTS = Arrays.asList(
-            "urban", "rural", "zone", "zone30", "zone:30", "nsl_single", "nsl_dual", "motorway", "trunk", "living_street", "bicycle_road");
+    private static final Set<String> KNOWN_SOURCE_MAXSPEED_CONTEXTS = new HashSet<>(Arrays.asList(
+            "urban", "rural", "zone", "zone30", "zone:30", "nsl_single", "nsl_dual", "motorway", "trunk", "living_street", "bicycle_road"));
 
-    protected static final List<String> ISO_COUNTRIES = Arrays.asList(Locale.getISOCountries());
+    private static final Set<String> ISO_COUNTRIES = new HashSet<>(Arrays.asList(Locale.getISOCountries()));
 
     private boolean leftByPedestrians = false;
     private boolean leftByCyclists = false;
@@ -92,7 +92,8 @@ public class Highways extends Test {
                 testMissingPedestrianCrossing(n);
             }
             if (n.hasKey("source:maxspeed")) {
-                // Check maxspeed but not context against highway for nodes as maxspeed is not set on highways here but on signs, speed cameras, etc.
+                // Check maxspeed but not context against highway for nodes
+                // as maxspeed is not set on highways here but on signs, speed cameras, etc.
                 testSourceMaxspeed(n, false);
             }
         }
@@ -101,7 +102,8 @@ public class Highways extends Test {
     @Override
     public void visit(Way w) {
         if (w.isUsable()) {
-            if (w.hasKey("highway") && CLASSIFIED_HIGHWAYS.contains(w.get("highway")) && w.hasKey("junction") && "roundabout".equals(w.get("junction"))) {
+            if (w.hasKey("highway") && CLASSIFIED_HIGHWAYS.contains(w.get("highway"))
+                    && w.hasKey("junction") && "roundabout".equals(w.get("junction"))) {
                 testWrongRoundabout(w);
             }
             if (w.hasKey("source:maxspeed")) {
@@ -207,7 +209,8 @@ public class Highways extends Test {
                     handleCarWay(n, w);
                 }
                 if ((leftByPedestrians || leftByCyclists) && leftByCars) {
-                    errors.add(new TestError(this, Severity.OTHER, tr("Missing pedestrian crossing information"), MISSING_PEDESTRIAN_CROSSING, n));
+                    errors.add(new TestError(this, Severity.OTHER, tr("Missing pedestrian crossing information"),
+                            MISSING_PEDESTRIAN_CROSSING, n));
                     return;
                 }
             }
@@ -242,12 +245,14 @@ public class Highways extends Test {
             // Check country
             String country = value.substring(0, index);
             if (!ISO_COUNTRIES.contains(country)) {
-                errors.add(new TestError(this, Severity.WARNING, tr("Unknown country code: {0}", country), SOURCE_MAXSPEED_UNKNOWN_COUNTRY_CODE, p));
+                errors.add(new TestError(this, Severity.WARNING,
+                        tr("Unknown country code: {0}", country), SOURCE_MAXSPEED_UNKNOWN_COUNTRY_CODE, p));
             }
             // Check context
             String context = value.substring(index+1);
             if (!KNOWN_SOURCE_MAXSPEED_CONTEXTS.contains(context)) {
-                errors.add(new TestError(this, Severity.WARNING, tr("Unknown source:maxspeed context: {0}", context), SOURCE_MAXSPEED_UNKNOWN_CONTEXT, p));
+                errors.add(new TestError(this, Severity.WARNING,
+                        tr("Unknown source:maxspeed context: {0}", context), SOURCE_MAXSPEED_UNKNOWN_CONTEXT, p));
             }
             // TODO: Check coherence of context against maxspeed
             // TODO: Check coherence of context against highway
diff --git a/src/org/openstreetmap/josm/data/validation/tests/InternetTags.java b/src/org/openstreetmap/josm/data/validation/tests/InternetTags.java
index 700fb4f..48ce8f0 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/InternetTags.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/InternetTags.java
@@ -131,7 +131,7 @@ public class InternetTags extends Test {
         if (!validator.isValid(value)) {
             String errMsg = validator.getErrorMessage();
             // Special treatment to allow URLs without protocol. See UrlValidator#isValid
-            if (tr("URL contains an invalid protocol: {0}", (String)null).equals(errMsg)) {
+            if (tr("URL contains an invalid protocol: {0}", (String) null).equals(errMsg)) {
                 String proto = validator instanceof EmailValidator ? "mailto://" : "http://";
                 return doValidateTag(p, k, proto+value, validator, code);
             }
diff --git a/src/org/openstreetmap/josm/data/validation/tests/Lanes.java b/src/org/openstreetmap/josm/data/validation/tests/Lanes.java
index aadc8cf..1720f20 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/Lanes.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/Lanes.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.validation.tests;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
diff --git a/src/org/openstreetmap/josm/data/validation/tests/LongSegment.java b/src/org/openstreetmap/josm/data/validation/tests/LongSegment.java
index a297a9a..8b717db 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/LongSegment.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/LongSegment.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.validation.tests;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -34,9 +34,12 @@ public class LongSegment extends Test {
     @Override
     public void visit(Way w) {
         Double length = w.getLongestSegmentLength();
-        if(length > maxlength) {
+        if (length > maxlength) {
             length /= 1000.0;
-            errors.add(new TestError(this, Severity.WARNING, tr("Very long segment of {0} kilometers", length.intValue()), LONG_SEGMENT, w));
+            errors.add(new TestError(this, Severity.WARNING, tr("Long segments"),
+                    tr("Very long segment of {0} kilometers", length.intValue()),
+                    String.format("Very long segment of %d kilometers", length.intValue()),
+                    LONG_SEGMENT, w));
         }
     }
 
diff --git a/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java b/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java
index f3af884..ba7ea45 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java
@@ -20,6 +20,7 @@ import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
 import java.util.regex.Matcher;
@@ -146,13 +147,14 @@ public class MapCSSTagChecker extends Test.TagTest {
      */
     abstract static class FixCommand {
         /**
-         * Creates the fixing {@link Command} for the given primitive. The {@code matchingSelector} is used to
-         * evaluate placeholders (cf. {@link org.openstreetmap.josm.data.validation.tests.MapCSSTagChecker.TagCheck#insertArguments(Selector, String, OsmPrimitive)}).
+         * Creates the fixing {@link Command} for the given primitive. The {@code matchingSelector} is used to evaluate placeholders
+         * (cf. {@link org.openstreetmap.josm.data.validation.tests.MapCSSTagChecker.TagCheck#insertArguments(Selector, String, OsmPrimitive)}).
          */
         abstract Command createCommand(final OsmPrimitive p, final Selector matchingSelector);
 
         private static void checkObject(final Object obj) {
-            CheckParameterUtil.ensureThat(obj instanceof Expression || obj instanceof String, "instance of Exception or String expected, but got " + obj);
+            CheckParameterUtil.ensureThat(obj instanceof Expression || obj instanceof String,
+                    "instance of Exception or String expected, but got " + obj);
         }
 
         /**
@@ -161,7 +163,7 @@ public class MapCSSTagChecker extends Test.TagTest {
         private static String evaluateObject(final Object obj, final OsmPrimitive p, final Selector matchingSelector) {
             final String s;
             if (obj instanceof Expression) {
-                s = (String) ((Expression) obj).evaluate(new Environment().withPrimitive(p));
+                s = (String) ((Expression) obj).evaluate(new Environment(p));
             } else if (obj instanceof String) {
                 s = (String) obj;
             } else {
@@ -216,7 +218,9 @@ public class MapCSSTagChecker extends Test.TagTest {
             return new FixCommand() {
                 @Override
                 Command createCommand(OsmPrimitive p, Selector matchingSelector) {
-                    return new ChangePropertyKeyCommand(p, oldKey, newKey);
+                    return new ChangePropertyKeyCommand(p,
+                            TagCheck.insertArguments(matchingSelector, oldKey, p),
+                            TagCheck.insertArguments(matchingSelector, newKey, p));
                 }
 
                 @Override
@@ -245,14 +249,14 @@ public class MapCSSTagChecker extends Test.TagTest {
         private static final String POSSIBLE_THROWS = possibleThrows();
 
         static final String possibleThrows() {
-            StringBuffer sb = new StringBuffer();
+            StringBuilder sb = new StringBuilder();
             for (Severity s : Severity.values()) {
                 if (sb.length() > 0) {
                     sb.append('/');
                 }
                 sb.append("throw")
                 .append(s.name().charAt(0))
-                .append(s.name().substring(1).toLowerCase());
+                .append(s.name().substring(1).toLowerCase(Locale.ENGLISH));
             }
             return sb.toString();
         }
@@ -275,7 +279,7 @@ public class MapCSSTagChecker extends Test.TagTest {
                             : null;
                     if (ai.key.startsWith("throw")) {
                         try {
-                            final Severity severity = Severity.valueOf(ai.key.substring("throw".length()).toUpperCase());
+                            final Severity severity = Severity.valueOf(ai.key.substring("throw".length()).toUpperCase(Locale.ENGLISH));
                             check.errors.put(ai, severity);
                         } catch (IllegalArgumentException e) {
                             Main.warn("Unsupported "+ai.key+" instruction. Allowed instructions are "+POSSIBLE_THROWS);
@@ -291,7 +295,7 @@ public class MapCSSTagChecker extends Test.TagTest {
                         final String[] x = val.split("=>", 2);
                         check.fixCommands.add(FixCommand.fixChangeKey(Tag.removeWhiteSpaces(x[0]), Tag.removeWhiteSpaces(x[1])));
                     } else if ("fixDeleteObject".equals(ai.key) && val != null) {
-                        CheckParameterUtil.ensureThat(val.equals("this"), "fixDeleteObject must be followed by 'this'");
+                        CheckParameterUtil.ensureThat("this".equals(val), "fixDeleteObject must be followed by 'this'");
                         check.deletion = true;
                     } else if ("suggestAlternative".equals(ai.key) && val != null) {
                         check.alternatives.add(val);
@@ -351,7 +355,7 @@ public class MapCSSTagChecker extends Test.TagTest {
         }
 
         private static void removeMetaRules(MapCSSStyleSource source) {
-            for (Iterator<MapCSSRule> it = source.rules.iterator(); it.hasNext(); ) {
+            for (Iterator<MapCSSRule> it = source.rules.iterator(); it.hasNext();) {
                 MapCSSRule x = it.next();
                 if (x.selector instanceof GeneralSelector) {
                     GeneralSelector gs = (GeneralSelector) x.selector;
@@ -369,7 +373,7 @@ public class MapCSSTagChecker extends Test.TagTest {
         }
 
         Selector whichSelectorMatchesPrimitive(OsmPrimitive primitive) {
-            return whichSelectorMatchesEnvironment(new Environment().withPrimitive(primitive));
+            return whichSelectorMatchesEnvironment(new Environment(primitive));
         }
 
         Selector whichSelectorMatchesEnvironment(Environment env) {
@@ -419,14 +423,15 @@ public class MapCSSTagChecker extends Test.TagTest {
          */
         static String insertArguments(Selector matchingSelector, String s, OsmPrimitive p) {
             if (s != null && matchingSelector instanceof Selector.ChildOrParentSelector) {
-                return insertArguments(((Selector.ChildOrParentSelector)matchingSelector).right, s, p);
+                return insertArguments(((Selector.ChildOrParentSelector) matchingSelector).right, s, p);
             } else if (s == null || !(matchingSelector instanceof GeneralSelector)) {
                 return s;
             }
             final Matcher m = Pattern.compile("\\{(\\d+)\\.(key|value|tag)\\}").matcher(s);
             final StringBuffer sb = new StringBuffer();
             while (m.find()) {
-                final String argument = determineArgument((Selector.GeneralSelector) matchingSelector, Integer.parseInt(m.group(1)), m.group(2), p);
+                final String argument = determineArgument((Selector.GeneralSelector) matchingSelector,
+                        Integer.parseInt(m.group(1)), m.group(2), p);
                 try {
                     // Perform replacement with null-safe + regex-safe handling
                     m.appendReplacement(sb, String.valueOf(argument).replace("^(", "").replace(")$", ""));
@@ -473,7 +478,7 @@ public class MapCSSTagChecker extends Test.TagTest {
                 final Object val = errors.keySet().iterator().next().val;
                 return String.valueOf(
                         val instanceof Expression
-                                ? ((Expression) val).evaluate(new Environment().withPrimitive(p))
+                                ? ((Expression) val).evaluate(new Environment(p))
                                 : val
                 );
             }
@@ -520,7 +525,7 @@ public class MapCSSTagChecker extends Test.TagTest {
          * @return an instance of {@link TestError}, or returns null if the primitive does not give rise to an error.
          */
         TestError getErrorForPrimitive(OsmPrimitive p) {
-            final Environment env = new Environment().withPrimitive(p);
+            final Environment env = new Environment(p);
             return getErrorForPrimitive(p, whichSelectorMatchesEnvironment(env), env);
         }
 
@@ -578,7 +583,7 @@ public class MapCSSTagChecker extends Test.TagTest {
             Set<String> result = new HashSet<>();
             for (Selector s : rule.selectors) {
                 if (s instanceof AbstractSelector) {
-                    for (Condition c : ((AbstractSelector)s).getConditions()) {
+                    for (Condition c : ((AbstractSelector) s).getConditions()) {
                         if (c instanceof ClassCondition) {
                             result.add(((ClassCondition) c).id);
                         }
diff --git a/src/org/openstreetmap/josm/data/validation/tests/MultipolygonTest.java b/src/org/openstreetmap/josm/data/validation/tests/MultipolygonTest.java
index 552ba38..557e5ba 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/MultipolygonTest.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/MultipolygonTest.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.validation.tests;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -78,7 +78,7 @@ public class MultipolygonTest extends Test {
         keysCheckedByAnotherTest.clear();
         for (Test t : OsmValidator.getEnabledTests(false)) {
             if (t instanceof UnclosedWays) {
-                keysCheckedByAnotherTest.addAll(((UnclosedWays)t).getCheckedKeys());
+                keysCheckedByAnotherTest.addAll(((UnclosedWays) t).getCheckedKeys());
                 break;
             }
         }
@@ -93,7 +93,7 @@ public class MultipolygonTest extends Test {
     private GeneralPath createPath(List<Node> nodes) {
         GeneralPath result = new GeneralPath();
         result.moveTo((float) nodes.get(0).getCoor().lat(), (float) nodes.get(0).getCoor().lon());
-        for (int i=1; i<nodes.size(); i++) {
+        for (int i = 1; i < nodes.size(); i++) {
             Node n = nodes.get(i);
             result.lineTo((float) n.getCoor().lat(), (float) n.getCoor().lon());
         }
@@ -197,7 +197,8 @@ public class MultipolygonTest extends Test {
                         /* old style multipolygon - solve: copy tags from outer way to multipolygon */
                         addError(r, new TestError(this, Severity.WARNING,
                                 trn("Multipolygon relation should be tagged with area tags and not the outer way",
-                                        "Multipolygon relation should be tagged with area tags and not the outer ways", polygon.getOuterWays().size()),
+                                        "Multipolygon relation should be tagged with area tags and not the outer ways",
+                                        polygon.getOuterWays().size()),
                            NO_STYLE_POLYGON, r));
                     }
                 }
@@ -210,7 +211,8 @@ public class MultipolygonTest extends Test {
                             List<OsmPrimitive> l = new ArrayList<>();
                             l.add(r);
                             l.add(wInner);
-                            addError(r, new TestError(this, Severity.OTHER, tr("With the currently used mappaint style the style for inner way equals the multipolygon style"),
+                            addError(r, new TestError(this, Severity.OTHER,
+                                    tr("With the currently used mappaint style the style for inner way equals the multipolygon style"),
                                     INNER_STYLE_MISMATCH, l, Collections.singletonList(wInner)));
                         }
                     }
@@ -262,10 +264,12 @@ public class MultipolygonTest extends Test {
                     List<List<Node>> highlights = new ArrayList<>();
                     highlights.add(pdInner.getNodes());
                     if (outside) {
-                        addError(r, new TestError(this, Severity.WARNING, tr("Multipolygon inner way is outside"), INNER_WAY_OUTSIDE, Collections.singletonList(r), highlights));
+                        addError(r, new TestError(this, Severity.WARNING, tr("Multipolygon inner way is outside"),
+                                INNER_WAY_OUTSIDE, Collections.singletonList(r), highlights));
                     } else {
                         highlights.add(outerWay.getNodes());
-                        addError(r, new TestError(this, Severity.WARNING, tr("Intersection between multipolygon ways"), CROSSING_WAYS, Collections.singletonList(r), highlights));
+                        addError(r, new TestError(this, Severity.WARNING, tr("Intersection between multipolygon ways"),
+                                CROSSING_WAYS, Collections.singletonList(r), highlights));
                     }
                 }
             }
@@ -276,7 +280,8 @@ public class MultipolygonTest extends Test {
         for (RelationMember rm : r.getMembers()) {
             if (rm.isWay()) {
                 if (!(rm.hasRole("inner", "outer") || !rm.hasRole())) {
-                    addError(r, new TestError(this, Severity.WARNING, tr("No useful role for multipolygon member"), WRONG_MEMBER_ROLE, rm.getMember()));
+                    addError(r, new TestError(this, Severity.WARNING, tr("No useful role for multipolygon member"),
+                            WRONG_MEMBER_ROLE, rm.getMember()));
                 }
             } else {
                 if (!rm.hasRole("admin_centre", "label", "subarea", "land_area")) {
@@ -296,7 +301,7 @@ public class MultipolygonTest extends Test {
                     return;
                 }
             }
-            List<OsmPrimitive> newPrimitives = new ArrayList<>(primitives);
+            List<OsmPrimitive> newPrimitives = new ArrayList<OsmPrimitive>(primitives);
             newPrimitives.add(0, r);
             error.setPrimitives(newPrimitives);
         }
diff --git a/src/org/openstreetmap/josm/data/validation/tests/NameMismatch.java b/src/org/openstreetmap/josm/data/validation/tests/NameMismatch.java
index 7d6fe75..112f943 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/NameMismatch.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/NameMismatch.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.validation.tests;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -39,7 +39,8 @@ public class NameMismatch extends Test.TagTest {
      */
     public NameMismatch() {
         super(tr("Missing name:* translation"),
-            tr("This test finds multilingual objects whose ''name'' attribute is not equal to some ''name:*'' attribute and not a composition of ''name:*'' attributes, e.g., Italia - Italien - Italy."));
+            tr("This test finds multilingual objects whose ''name'' attribute is not equal to some ''name:*'' attribute " +
+                    "and not a composition of ''name:*'' attributes, e.g., Italia - Italien - Italy."));
     }
 
     /**
@@ -50,7 +51,9 @@ public class NameMismatch extends Test.TagTest {
      */
     private void missingTranslation(OsmPrimitive p, String name) {
         errors.add(new TestError(this, Severity.OTHER,
-                tr("Missing name:*={0}. Add tag with correct language key.", name), NAME_TRANSLATION_MISSING, p));
+                tr("Missing name:* translation"),
+                tr("Missing name:*={0}. Add tag with correct language key.", name),
+                String.format("Missing name:*=%s. Add tag with correct language key.", name), NAME_TRANSLATION_MISSING, p));
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/data/validation/tests/OpeningHourTest.java b/src/org/openstreetmap/josm/data/validation/tests/OpeningHourTest.java
index e0c7326..e124672 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/OpeningHourTest.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/OpeningHourTest.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.validation.tests;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -24,6 +24,7 @@ import org.openstreetmap.josm.data.validation.Severity;
 import org.openstreetmap.josm.data.validation.Test;
 import org.openstreetmap.josm.data.validation.TestError;
 import org.openstreetmap.josm.io.CachedFile;
+import org.openstreetmap.josm.tools.LanguageInfo;
 
 /**
  * Tests the correct usage of the opening hour syntax of the tags
@@ -54,15 +55,16 @@ public class OpeningHourTest extends Test.TagTest {
             try (Reader reader = new InputStreamReader(
                     new CachedFile("resource://data/validator/opening_hours.js").getInputStream(), StandardCharsets.UTF_8)) {
                 ENGINE.eval(reader);
+                ENGINE.eval("var opening_hours = require('opening_hours');");
                 // fake country/state to not get errors on holidays
                 ENGINE.eval("var nominatimJSON = {address: {state: 'Bayern', country_code: 'de'}};");
                 ENGINE.eval(
-                        "var oh = function (value, mode) {" +
+                        "var oh = function (value, mode, locale) {" +
                         " try {" +
-                        "    var r= new opening_hours(value, nominatimJSON, mode);" +
+                        "    var r = new opening_hours(value, nominatimJSON, {mode: mode, locale: locale});" +
                         "    r.getErrors = function() {return [];};" +
                         "    return r;" +
-                        "  } catch(err) {" +
+                        "  } catch (err) {" +
                         "    return {" +
                         "      getWarnings: function() {return [];}," +
                         "      getErrors: function() {return [err.toString()]}" +
@@ -84,8 +86,8 @@ public class OpeningHourTest extends Test.TagTest {
         }
     }
 
-    protected Object parse(String value, CheckMode mode) throws ScriptException, NoSuchMethodException {
-        return ((Invocable) ENGINE).invokeFunction("oh", value, mode.code);
+    protected Object parse(String value, CheckMode mode, String locale) throws ScriptException, NoSuchMethodException {
+        return ((Invocable) ENGINE).invokeFunction("oh", value, mode.code, locale);
     }
 
     @SuppressWarnings("unchecked")
@@ -178,7 +180,7 @@ public class OpeningHourTest extends Test.TagTest {
      * @return a list of {@link TestError} or an empty list
      */
     public List<OpeningHoursTestError> checkOpeningHourSyntax(final String key, final String value, CheckMode mode) {
-        return checkOpeningHourSyntax(key, value, mode, false);
+        return checkOpeningHourSyntax(key, value, mode, false, LanguageInfo.getJOSMLocaleCode());
     }
 
     /**
@@ -189,15 +191,17 @@ public class OpeningHourTest extends Test.TagTest {
      * @param value the opening hour value to be checked.
      * @param mode whether to validate {@code value} as a time range, or points in time, or both.
      * @param ignoreOtherSeverity whether to ignore errors with {@link Severity#OTHER}.
+     * @param locale the locale code used for localizing messages
      * @return a list of {@link TestError} or an empty list
      */
-    public List<OpeningHoursTestError> checkOpeningHourSyntax(final String key, final String value, CheckMode mode, boolean ignoreOtherSeverity) {
+    public List<OpeningHoursTestError> checkOpeningHourSyntax(final String key, final String value, CheckMode mode,
+            boolean ignoreOtherSeverity, String locale) {
         if (ENGINE == null || value == null || value.trim().isEmpty()) {
             return Collections.emptyList();
         }
         final List<OpeningHoursTestError> errors = new ArrayList<>();
         try {
-            final Object r = parse(value, mode);
+            final Object r = parse(value, mode, locale);
             String prettifiedValue = null;
             try {
                 prettifiedValue = (String) ((Invocable) ENGINE).invokeMethod(r, "prettifyValue");
diff --git a/src/org/openstreetmap/josm/data/validation/tests/OverlappingWays.java b/src/org/openstreetmap/josm/data/validation/tests/OverlappingWays.java
index ef44ee1..e16d8d4 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/OverlappingWays.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/OverlappingWays.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.validation.tests;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -39,7 +39,7 @@ import org.openstreetmap.josm.tools.Utils;
 public class OverlappingWays extends Test {
 
     /** Bag of all way segments */
-    private MultiMap<Pair<Node,Node>, WaySegment> nodePairs;
+    private MultiMap<Pair<Node, Node>, WaySegment> nodePairs;
 
     protected static final int OVERLAPPING_HIGHWAY = 101;
     protected static final int OVERLAPPING_RAILWAY = 102;
@@ -51,7 +51,7 @@ public class OverlappingWays extends Test {
     protected static final int DUPLICATE_WAY_SEGMENT = 121;
 
     protected static final CollectionProperty IGNORED_KEYS = new CollectionProperty(
-            "overlapping-ways.ignored-keys", Arrays.asList("barrier", "building", "historic:building"));
+            "overlapping-ways.ignored-keys", Arrays.asList("barrier", "building", "historic:building", "man_made"));
 
     /** Constructor */
     public OverlappingWays() {
@@ -68,7 +68,7 @@ public class OverlappingWays extends Test {
 
     private boolean parentMultipolygonConcernsArea(OsmPrimitive p) {
         for (Relation r : OsmPrimitive.getFilteredList(p.getReferrers(), Relation.class)) {
-            if (r.concernsArea() ) {
+            if (r.concernsArea()) {
                 return true;
             }
         }
@@ -131,8 +131,7 @@ public class OverlappingWays extends Test {
                             errortype = tr("Ways share segment with area");
                             type = OVERLAPPING_WAY_AREA;
                         }
-                    }
-                    else if (highway == ways) {
+                    } else if (highway == ways) {
                         errortype = tr("Overlapping highways");
                         type = OVERLAPPING_HIGHWAY;
                     } else if (railway == ways) {
diff --git a/src/org/openstreetmap/josm/data/validation/tests/PowerLines.java b/src/org/openstreetmap/josm/data/validation/tests/PowerLines.java
index a93264a..217d135 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/PowerLines.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/PowerLines.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.validation.tests;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -121,7 +121,7 @@ public class PowerLines extends Test {
         for (OsmPrimitive station : powerStations) {
             List<List<Node>> nodesLists = new ArrayList<>();
             if (station instanceof Way) {
-                nodesLists.add(((Way)station).getNodes());
+                nodesLists.add(((Way) station).getNodes());
             } else if (station instanceof Relation) {
                 Multipolygon polygon = MultipolygonCache.getInstance().get(Main.map.mapView, (Relation) station);
                 if (polygon != null) {
@@ -146,7 +146,7 @@ public class PowerLines extends Test {
             Iterator<? extends OsmPrimitive> it = testError.getPrimitives().iterator();
             if (it.hasNext()) {
                 return new ChangePropertyCommand(it.next(),
-                        "power", towerPoleTagMap.get(((PowerLineError)testError).line));
+                        "power", towerPoleTagMap.get(((PowerLineError) testError).line));
             }
         }
         return null;
@@ -154,7 +154,7 @@ public class PowerLines extends Test {
 
     @Override
     public boolean isFixable(TestError testError) {
-        return testError instanceof PowerLineError && towerPoleTagMap.containsKey(((PowerLineError)testError).line);
+        return testError instanceof PowerLineError && towerPoleTagMap.containsKey(((PowerLineError) testError).line);
     }
 
     /**
@@ -199,18 +199,20 @@ public class PowerLines extends Test {
      * @param values List of possible values
      * @return {@code true} if power key is set and equal to possible values
      */
-    private static final boolean isPowerIn(OsmPrimitive p, Collection<String> values) {
+    private static boolean isPowerIn(OsmPrimitive p, Collection<String> values) {
         String v = p.get("power");
         return v != null && values != null && values.contains(v);
     }
 
     protected class PowerLineError extends TestError {
         private final Way line;
+
         public PowerLineError(Node n, Way line) {
             super(PowerLines.this, Severity.WARNING,
                     tr("Missing power tower/pole within power line"), POWER_LINES, n);
             this.line = line;
         }
+
         public final Node getNode() {
             // primitives list can be empty if all primitives have been purged
             Iterator<? extends OsmPrimitive> it = getPrimitives().iterator();
diff --git a/src/org/openstreetmap/josm/data/validation/tests/RelationChecker.java b/src/org/openstreetmap/josm/data/validation/tests/RelationChecker.java
index 403f47d..4109432 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/RelationChecker.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/RelationChecker.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.validation.tests;
 
 import static org.openstreetmap.josm.tools.I18n.marktr;
@@ -84,12 +84,13 @@ public class RelationChecker extends Test {
     }
 
     private static class RolePreset {
+        private final List<Role> roles;
+        private final String name;
+
         public RolePreset(List<Role> roles, String name) {
             this.roles = roles;
             this.name = name;
         }
-        private final List<Role> roles;
-        private final String name;
     }
 
     private static class RoleInfo {
@@ -117,7 +118,7 @@ public class RelationChecker extends Test {
     }
 
     private Map<String, RoleInfo> buildRoleInfoMap(Relation n) {
-        Map<String,RoleInfo> map = new HashMap<>();
+        Map<String, RoleInfo> map = new HashMap<>();
         for (RelationMember m : n.getMembers()) {
             String role = m.getRole();
             RoleInfo ri = map.get(role);
@@ -149,7 +150,7 @@ public class RelationChecker extends Test {
                 }
             }
             if (matches && r != null) {
-                for(Role role: r.roles) {
+                for (Role role: r.roles) {
                     String key = role.key;
                     List<Role> roleGroup = null;
                     if (allroles.containsKey(key)) {
@@ -212,13 +213,13 @@ public class RelationChecker extends Test {
                 } else {
                     // verify if preset accepts such member
                     OsmPrimitive primitive = member.getMember();
-                    if(!primitive.isUsable()) {
+                    if (!primitive.isUsable()) {
                         // if member is not usable (i.e. not present in working set)
                         // we can't verify expression - so we just skip it
                         return true;
                     } else {
                         // verify expression
-                        if(r.memberExpression.match(primitive)) {
+                        if (r.memberExpression.match(primitive)) {
                             return true;
                         } else {
                             // possible match error
@@ -282,7 +283,7 @@ public class RelationChecker extends Test {
         }
 
         // verify role counts based on whole role sets
-        for(RolePreset rp: allroles.values()) {
+        for (RolePreset rp: allroles.values()) {
             for (Role r: rp.roles) {
                 String keyname = r.key;
                 if (keyname.isEmpty()) {
@@ -300,11 +301,11 @@ public class RelationChecker extends Test {
                     }
                 }));
 
-                if (key.length() > 0) {
+                if (!key.isEmpty()) {
                     String s = marktr("Role {0} unknown in templates {1}");
 
                     errors.add(new TestError(this, Severity.WARNING, ROLE_VERIF_PROBLEM_MSG,
-                            tr(s, key, templates.toString()), MessageFormat.format(s, key), ROLE_UNKNOWN, n));
+                            tr(s, key, templates), MessageFormat.format(s, key), ROLE_UNKNOWN, n));
                 } else {
                     String s = marktr("Empty role type found when expecting one of {0}");
                     errors.add(new TestError(this, Severity.WARNING, ROLE_VERIF_PROBLEM_MSG,
@@ -322,8 +323,7 @@ public class RelationChecker extends Test {
                 String s = marktr("Role {0} missing");
                 errors.add(new TestError(this, Severity.WARNING, ROLE_VERIF_PROBLEM_MSG,
                         tr(s, keyname), MessageFormat.format(s, keyname), ROLE_MISSING, n));
-            }
-            else if (vc > count) {
+            } else if (vc > count) {
                 String s = marktr("Number of {0} roles too low ({1})");
                 errors.add(new TestError(this, Severity.WARNING, ROLE_VERIF_PROBLEM_MSG,
                         tr(s, keyname, count), MessageFormat.format(s, keyname, count), LOW_COUNT, n));
diff --git a/src/org/openstreetmap/josm/data/validation/tests/SelfIntersectingWay.java b/src/org/openstreetmap/josm/data/validation/tests/SelfIntersectingWay.java
index 447e4c9..e28082c 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/SelfIntersectingWay.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/SelfIntersectingWay.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.validation.tests;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
diff --git a/src/org/openstreetmap/josm/data/validation/tests/SimilarNamedWays.java b/src/org/openstreetmap/josm/data/validation/tests/SimilarNamedWays.java
index 8c89d3d..7f715ea 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/SimilarNamedWays.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/SimilarNamedWays.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.validation.tests;
 
 import static java.util.regex.Pattern.CASE_INSENSITIVE;
@@ -10,6 +10,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -35,7 +36,7 @@ public class SimilarNamedWays extends Test {
     protected static final int SIMILAR_NAMED = 701;
 
     /** All ways, grouped by cells */
-    private Map<Point2D,List<Way>> cellWays;
+    private Map<Point2D, List<Way>> cellWays;
     /** The already detected errors */
     private MultiMap<Way, Way> errorWays;
 
@@ -128,7 +129,7 @@ public class SimilarNamedWays extends Test {
             return m;
         if (m == 0)
             return n;
-        d = new int[n + 1][m + 1];
+        d = new int[n+1][m+1];
 
         // Step 2
         for (i = 0; i <= n; i++) {
@@ -196,7 +197,7 @@ public class SimilarNamedWays extends Test {
     public boolean similaryName(String name, String name2) {
         // check plain strings
         int distance = getLevenshteinDistance(name, name2);
-        boolean similar = distance>0 && distance<=2;
+        boolean similar = distance > 0 && distance <= 2;
 
         // try all rules
         for (NormalizeRule rule : rules) {
@@ -222,7 +223,7 @@ public class SimilarNamedWays extends Test {
         String normalize(String name);
     }
 
-    public class RegExprRule implements NormalizeRule {
+    public static class RegExprRule implements NormalizeRule {
         private final Pattern regExpr;
         private final String replacement;
 
@@ -242,14 +243,14 @@ public class SimilarNamedWays extends Test {
         }
     }
 
-    public class SynonymRule implements NormalizeRule {
+    public static class SynonymRule implements NormalizeRule {
 
         private final String[] words;
         private final Pattern regExpr;
         private final String replacement;
 
         public SynonymRule(String replacement, String[] words) {
-            this.replacement = replacement.toLowerCase();
+            this.replacement = replacement.toLowerCase(Locale.ENGLISH);
             this.words = words;
 
             // build regular expression for other words (for fast match)
@@ -260,7 +261,7 @@ public class SimilarNamedWays extends Test {
                     maxLength = words[i].length();
                 }
                 if (expression.length() > 0) {
-                    expression.append("|");
+                    expression.append('|');
                 }
                 expression.append(Pattern.quote(words[i]));
             }
diff --git a/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java b/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java
index 450a101..304a1f9 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.validation.tests;
 
 import static org.openstreetmap.josm.tools.I18n.marktr;
@@ -8,7 +8,6 @@ import java.awt.GridBagConstraints;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.io.BufferedReader;
-import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.text.MessageFormat;
@@ -17,6 +16,7 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
@@ -37,8 +37,9 @@ import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
 import org.openstreetmap.josm.data.osm.OsmUtils;
 import org.openstreetmap.josm.data.osm.Tag;
+import org.openstreetmap.josm.data.validation.FixableTestError;
 import org.openstreetmap.josm.data.validation.Severity;
-import org.openstreetmap.josm.data.validation.Test;
+import org.openstreetmap.josm.data.validation.Test.TagTest;
 import org.openstreetmap.josm.data.validation.TestError;
 import org.openstreetmap.josm.data.validation.util.Entities;
 import org.openstreetmap.josm.gui.preferences.validator.ValidatorPreference;
@@ -54,23 +55,23 @@ import org.openstreetmap.josm.io.CachedFile;
 import org.openstreetmap.josm.io.UTFInputStreamReader;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.MultiMap;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
  * Check for misspelled or wrong tags
  *
  * @author frsantos
+ * @since 3669
  */
-public class TagChecker extends Test.TagTest {
+public class TagChecker extends TagTest {
 
-    /** The default data file of tagchecker rules */
-    //public static final String DATA_FILE = "resource://data/validator/tagchecker.cfg";
     /** The config file of ignored tags */
     public static final String IGNORE_FILE = "resource://data/validator/ignoretags.cfg";
     /** The config file of dictionary words */
     public static final String SPELL_FILE = "resource://data/validator/words.cfg";
 
-    /** The spell check key substitutions: the key should be substituted by the value */
-    private static volatile Map<String, String> spellCheckKeyData;
+    /** Normalized keys: the key should be substituted by the value if the key was not found in presets */
+    private static final Map<String, String> harmonizedKeys = new HashMap<>();
     /** The spell check preset values */
     private static volatile MultiMap<String, String> presetsValueData;
     /** The TagChecker data */
@@ -123,6 +124,8 @@ public class TagChecker extends Test.TagTest {
     protected static final int LONG_KEY          = 1209;
     protected static final int LOW_CHAR_VALUE    = 1210;
     protected static final int LOW_CHAR_KEY      = 1211;
+    protected static final int MISSPELLED_VALUE  = 1212;
+    protected static final int MISSPELLED_KEY    = 1213;
     /** 1250 and up is used by tagcheck */
 
     protected EditableList sourcesList;
@@ -150,8 +153,7 @@ public class TagChecker extends Test.TagTest {
      * the word is valid, but if it starts with -, the word should be replaced
      * by the nearest + word before this.
      *
-     * @throws FileNotFoundException
-     * @throws IOException
+     * @throws IOException if any I/O error occurs
      */
     private static void initializeData() throws IOException {
         checkerData.clear();
@@ -159,8 +161,7 @@ public class TagChecker extends Test.TagTest {
         ignoreDataEquals.clear();
         ignoreDataEndsWith.clear();
         ignoreDataKeyPair.clear();
-
-        spellCheckKeyData = new HashMap<>();
+        harmonizedKeys.clear();
 
         String errorSources = "";
         for (String source : Main.pref.getCollection(PREF_SOURCES, DEFAULT_SOURCES)) {
@@ -173,7 +174,7 @@ public class TagChecker extends Test.TagTest {
                 boolean ignorefile = false;
                 boolean isFirstLine = true;
                 String line;
-                while ((line = reader.readLine()) != null && (tagcheckerfile || line.length() != 0)) {
+                while ((line = reader.readLine()) != null && (tagcheckerfile || !line.isEmpty())) {
                     if (line.startsWith("#")) {
                         if (line.startsWith("# JOSM TagChecker")) {
                             tagcheckerfile = true;
@@ -214,7 +215,7 @@ public class TagChecker extends Test.TagTest {
                             ignoreDataKeyPair.add(tmp);
                         }
                     } else if (tagcheckerfile) {
-                        if (line.length() > 0) {
+                        if (!line.isEmpty()) {
                             CheckerData d = new CheckerData();
                             String err = d.getData(line);
 
@@ -227,7 +228,7 @@ public class TagChecker extends Test.TagTest {
                     } else if (line.charAt(0) == '+') {
                         okValue = line.substring(1);
                     } else if (line.charAt(0) == '-' && okValue != null) {
-                        spellCheckKeyData.put(line.substring(1), okValue);
+                        harmonizedKeys.put(harmonizeKey(line.substring(1)), okValue);
                     } else {
                         Main.error(tr("Invalid spellcheck line: {0}", line));
                     }
@@ -243,8 +244,8 @@ public class TagChecker extends Test.TagTest {
             }
         }
 
-        if (errorSources.length() > 0)
-            throw new IOException( tr("Could not access data file(s):\n{0}", errorSources) );
+        if (!errorSources.isEmpty())
+            throw new IOException(tr("Could not access data file(s):\n{0}", errorSources));
     }
 
     /**
@@ -263,7 +264,7 @@ public class TagChecker extends Test.TagTest {
                 presetsValueData.putVoid(a);
             }
             // TODO directionKeys are no longer in OsmPrimitive (search pattern is used instead)
-            /*  for(String a : OsmPrimitive.getDirectionKeys())
+            /*  for (String a : OsmPrimitive.getDirectionKeys())
                 presetsValueData.add(a);
              */
             for (String a : Main.pref.getCollection(ValidatorPreference.PREFIX + ".knownkeys",
@@ -289,6 +290,7 @@ public class TagChecker extends Test.TagTest {
         if (ky.key != null && values != null) {
             try {
                 presetsValueData.putAll(ky.key, values);
+                harmonizedKeys.put(harmonizeKey(ky.key), ky.key);
             } catch (NullPointerException e) {
                 Main.error(p+": Unable to initialize "+ky);
             }
@@ -322,8 +324,8 @@ public class TagChecker extends Test.TagTest {
             Map<String, String> keys = p.getKeys();
             for (CheckerData d : checkerData) {
                 if (d.match(p, keys)) {
-                    errors.add( new TestError(this, d.getSeverity(), tr("Suspicious tag/value combinations"),
-                            d.getDescription(), d.getDescriptionOrig(), d.getCode(), p) );
+                    errors.add(new TestError(this, d.getSeverity(), tr("Suspicious tag/value combinations"),
+                            d.getDescription(), d.getDescriptionOrig(), d.getCode(), p));
                     withErrors.put(p, "TC");
                 }
             }
@@ -334,51 +336,46 @@ public class TagChecker extends Test.TagTest {
             String key = prop.getKey();
             String value = prop.getValue();
             if (checkValues && (containsLow(value)) && !withErrors.contains(p, "ICV")) {
-                errors.add( new TestError(this, Severity.WARNING, tr("Tag value contains character with code less than 0x20"),
-                        tr(s, key), MessageFormat.format(s, key), LOW_CHAR_VALUE, p) );
+                errors.add(new TestError(this, Severity.WARNING, tr("Tag value contains character with code less than 0x20"),
+                        tr(s, key), MessageFormat.format(s, key), LOW_CHAR_VALUE, p));
                 withErrors.put(p, "ICV");
             }
             if (checkKeys && (containsLow(key)) && !withErrors.contains(p, "ICK")) {
-                errors.add( new TestError(this, Severity.WARNING, tr("Tag key contains character with code less than 0x20"),
-                        tr(s, key), MessageFormat.format(s, key), LOW_CHAR_KEY, p) );
+                errors.add(new TestError(this, Severity.WARNING, tr("Tag key contains character with code less than 0x20"),
+                        tr(s, key), MessageFormat.format(s, key), LOW_CHAR_KEY, p));
                 withErrors.put(p, "ICK");
             }
-            if (checkValues && (value!=null && value.length() > 255) && !withErrors.contains(p, "LV")) {
-                errors.add( new TestError(this, Severity.ERROR, tr("Tag value longer than allowed"),
-                        tr(s, key), MessageFormat.format(s, key), LONG_VALUE, p) );
+            if (checkValues && (value != null && value.length() > 255) && !withErrors.contains(p, "LV")) {
+                errors.add(new TestError(this, Severity.ERROR, tr("Tag value longer than allowed"),
+                        tr(s, key), MessageFormat.format(s, key), LONG_VALUE, p));
                 withErrors.put(p, "LV");
             }
-            if (checkKeys && (key!=null && key.length() > 255) && !withErrors.contains(p, "LK")) {
-                errors.add( new TestError(this, Severity.ERROR, tr("Tag key longer than allowed"),
-                        tr(s, key), MessageFormat.format(s, key), LONG_KEY, p) );
+            if (checkKeys && (key != null && key.length() > 255) && !withErrors.contains(p, "LK")) {
+                errors.add(new TestError(this, Severity.ERROR, tr("Tag key longer than allowed"),
+                        tr(s, key), MessageFormat.format(s, key), LONG_KEY, p));
                 withErrors.put(p, "LK");
             }
-            if (checkValues && (value==null || value.trim().length() == 0) && !withErrors.contains(p, "EV")) {
-                errors.add( new TestError(this, Severity.WARNING, tr("Tags with empty values"),
-                        tr(s, key), MessageFormat.format(s, key), EMPTY_VALUES, p) );
+            if (checkValues && (value == null || value.trim().isEmpty()) && !withErrors.contains(p, "EV")) {
+                errors.add(new TestError(this, Severity.WARNING, tr("Tags with empty values"),
+                        tr(s, key), MessageFormat.format(s, key), EMPTY_VALUES, p));
                 withErrors.put(p, "EV");
             }
-            if (checkKeys && spellCheckKeyData.containsKey(key) && !withErrors.contains(p, "IPK")) {
-                errors.add( new TestError(this, Severity.WARNING, tr("Invalid property key"),
-                        tr(s, key), MessageFormat.format(s, key), INVALID_KEY, p) );
-                withErrors.put(p, "IPK");
-            }
             if (checkKeys && key != null && key.indexOf(' ') >= 0 && !withErrors.contains(p, "IPK")) {
-                errors.add( new TestError(this, Severity.WARNING, tr("Invalid white space in property key"),
-                        tr(s, key), MessageFormat.format(s, key), INVALID_KEY_SPACE, p) );
+                errors.add(new TestError(this, Severity.WARNING, tr("Invalid white space in property key"),
+                        tr(s, key), MessageFormat.format(s, key), INVALID_KEY_SPACE, p));
                 withErrors.put(p, "IPK");
             }
             if (checkValues && value != null && (value.startsWith(" ") || value.endsWith(" ")) && !withErrors.contains(p, "SPACE")) {
-                errors.add( new TestError(this, Severity.WARNING, tr("Property values start or end with white space"),
-                        tr(s, key), MessageFormat.format(s, key), INVALID_SPACE, p) );
+                errors.add(new TestError(this, Severity.WARNING, tr("Property values start or end with white space"),
+                        tr(s, key), MessageFormat.format(s, key), INVALID_SPACE, p));
                 withErrors.put(p, "SPACE");
             }
             if (checkValues && value != null && !value.equals(entities.unescape(value)) && !withErrors.contains(p, "HTML")) {
-                errors.add( new TestError(this, Severity.OTHER, tr("Property values contain HTML entity"),
-                        tr(s, key), MessageFormat.format(s, key), INVALID_HTML, p) );
+                errors.add(new TestError(this, Severity.OTHER, tr("Property values contain HTML entity"),
+                        tr(s, key), MessageFormat.format(s, key), INVALID_HTML, p));
                 withErrors.put(p, "HTML");
             }
-            if (checkValues && key != null && value != null && value.length() > 0 && presetsValueData != null) {
+            if (checkValues && key != null && value != null && !value.isEmpty() && presetsValueData != null) {
                 final Set<String> values = presetsValueData.get(key);
                 final boolean keyInPresets = values != null;
                 final boolean tagInPresets = values != null && (values.isEmpty() || values.contains(prop.getValue()));
@@ -390,12 +387,12 @@ public class TagChecker extends Test.TagTest {
                     }
                 }
                 for (String a : ignoreDataEquals) {
-                    if(key.equals(a)) {
+                    if (key.equals(a)) {
                         ignore = true;
                     }
                 }
                 for (String a : ignoreDataEndsWith) {
-                    if(key.endsWith(a)) {
+                    if (key.endsWith(a)) {
                         ignore = true;
                     }
                 }
@@ -410,22 +407,48 @@ public class TagChecker extends Test.TagTest {
 
                 if (!ignore) {
                     if (!keyInPresets) {
-                        String i = marktr("Key ''{0}'' not in presets.");
-                        errors.add( new TestError(this, Severity.OTHER, tr("Presets do not contain property key"),
-                                tr(i, key), MessageFormat.format(i, key), INVALID_VALUE, p) );
-                        withErrors.put(p, "UPK");
+                        String prettifiedKey = harmonizeKey(key);
+                        String fixedKey = harmonizedKeys.get(prettifiedKey);
+                        if (fixedKey != null && !"".equals(fixedKey)) {
+                            // misspelled preset key
+                            String i = marktr("Key ''{0}'' looks like ''{1}''.");
+                            errors.add(new FixableTestError(this, Severity.WARNING, tr("Misspelled property key"),
+                                    tr(i, key, fixedKey),
+                                    MessageFormat.format(i, key, fixedKey), MISSPELLED_KEY, p,
+                                    new ChangePropertyKeyCommand(p, key, fixedKey)));
+                            withErrors.put(p, "WPK");
+                        } else {
+                            String i = marktr("Key ''{0}'' not in presets.");
+                            errors.add(new TestError(this, Severity.OTHER, tr("Presets do not contain property key"),
+                                    tr(i, key), MessageFormat.format(i, key), INVALID_VALUE, p));
+                            withErrors.put(p, "UPK");
+                        }
                     } else if (!tagInPresets) {
-                        String i = marktr("Value ''{0}'' for key ''{1}'' not in presets.");
-                        errors.add( new TestError(this, Severity.OTHER, tr("Presets do not contain property value"),
-                                tr(i, prop.getValue(), key), MessageFormat.format(i, prop.getValue(), key), INVALID_VALUE, p) );
-                        withErrors.put(p, "UPV");
+                        // try to fix common typos and check again if value is still unknown
+                        String fixedValue = harmonizeValue(prop.getValue());
+                        Map<String, String> possibleValues = getPossibleValues(values);
+                        if (possibleValues.containsKey(fixedValue)) {
+                            fixedValue = possibleValues.get(fixedValue);
+                            // misspelled preset value
+                            String i = marktr("Value ''{0}'' for key ''{1}'' looks like ''{2}''.");
+                            errors.add(new FixableTestError(this, Severity.WARNING, tr("Misspelled property value"),
+                                    tr(i, prop.getValue(), key, fixedValue), MessageFormat.format(i, prop.getValue(), fixedValue),
+                                    MISSPELLED_VALUE, p, new ChangePropertyCommand(p, key, fixedValue)));
+                            withErrors.put(p, "WPV");
+                        } else {
+                            // unknown preset value
+                            String i = marktr("Value ''{0}'' for key ''{1}'' not in presets.");
+                            errors.add(new TestError(this, Severity.OTHER, tr("Presets do not contain property value"),
+                                    tr(i, prop.getValue(), key), MessageFormat.format(i, prop.getValue(), key), INVALID_VALUE, p));
+                            withErrors.put(p, "UPV");
+                        }
                     }
                 }
             }
-            if (checkFixmes && key != null && value != null && value.length() > 0) {
-                if ((value.toLowerCase().contains("fixme")
+            if (checkFixmes && key != null && value != null && !value.isEmpty()) {
+                if ((value.toLowerCase(Locale.ENGLISH).contains("fixme")
                         || value.contains("check and delete")
-                        || key.contains("todo") || key.toLowerCase().contains("fixme"))
+                        || key.contains("todo") || key.toLowerCase(Locale.ENGLISH).contains("fixme"))
                         && !withErrors.contains(p, "FIXME")) {
                     errors.add(new TestError(this, Severity.OTHER,
                             tr("FIXMES"), FIXME, p));
@@ -435,6 +458,30 @@ public class TagChecker extends Test.TagTest {
         }
     }
 
+    private Map<String, String> getPossibleValues(Set<String> values) {
+        // generate a map with common typos
+        Map<String, String> map = new HashMap<>();
+        if (values != null) {
+            for (String value : values) {
+                map.put(value, value);
+                if (value.contains("_")) {
+                    map.put(value.replace("_", ""), value);
+                }
+            }
+        }
+        return map;
+    }
+
+    private static String harmonizeKey(String key) {
+        key = key.toLowerCase(Locale.ENGLISH).replace('-', '_').replace(':', '_').replace(' ', '_');
+        return Utils.strip(key, "-_;:,");
+    }
+
+    private static String harmonizeValue(String value) {
+        value = value.toLowerCase(Locale.ENGLISH).replace('-', '_').replace(' ', '_');
+        return Utils.strip(value, "-_;:,");
+    }
+
     @Override
     public void startTest(ProgressMonitor monitor) {
         super.startTest(monitor);
@@ -471,11 +518,11 @@ public class TagChecker extends Test.TagTest {
         GBC a = GBC.eol();
         a.anchor = GridBagConstraints.EAST;
 
-        testPanel.add(new JLabel(name+" :"), GBC.eol().insets(3,0,0,0));
+        testPanel.add(new JLabel(name+" :"), GBC.eol().insets(3, 0, 0, 0));
 
         prefCheckKeys = new JCheckBox(tr("Check property keys."), Main.pref.getBoolean(PREF_CHECK_KEYS, true));
         prefCheckKeys.setToolTipText(tr("Validate that property keys are valid checking against list of words."));
-        testPanel.add(prefCheckKeys, GBC.std().insets(20,0,0,0));
+        testPanel.add(prefCheckKeys, GBC.std().insets(20, 0, 0, 0));
 
         prefCheckKeysBeforeUpload = new JCheckBox();
         prefCheckKeysBeforeUpload.setSelected(Main.pref.getBoolean(PREF_CHECK_KEYS_BEFORE_UPLOAD, true));
@@ -483,7 +530,7 @@ public class TagChecker extends Test.TagTest {
 
         prefCheckComplex = new JCheckBox(tr("Use complex property checker."), Main.pref.getBoolean(PREF_CHECK_COMPLEX, true));
         prefCheckComplex.setToolTipText(tr("Validate property values and tags using complex rules."));
-        testPanel.add(prefCheckComplex, GBC.std().insets(20,0,0,0));
+        testPanel.add(prefCheckComplex, GBC.std().insets(20, 0, 0, 0));
 
         prefCheckComplexBeforeUpload = new JCheckBox();
         prefCheckComplexBeforeUpload.setSelected(Main.pref.getBoolean(PREF_CHECK_COMPLEX_BEFORE_UPLOAD, true));
@@ -510,7 +557,7 @@ public class TagChecker extends Test.TagTest {
 
         prefCheckValues = new JCheckBox(tr("Check property values."), Main.pref.getBoolean(PREF_CHECK_VALUES, true));
         prefCheckValues.setToolTipText(tr("Validate that property values are valid checking against presets."));
-        testPanel.add(prefCheckValues, GBC.std().insets(20,0,0,0));
+        testPanel.add(prefCheckValues, GBC.std().insets(20, 0, 0, 0));
 
         prefCheckValuesBeforeUpload = new JCheckBox();
         prefCheckValuesBeforeUpload.setSelected(Main.pref.getBoolean(PREF_CHECK_VALUES_BEFORE_UPLOAD, true));
@@ -518,7 +565,7 @@ public class TagChecker extends Test.TagTest {
 
         prefCheckFixmes = new JCheckBox(tr("Check for FIXMES."), Main.pref.getBoolean(PREF_CHECK_FIXMES, true));
         prefCheckFixmes.setToolTipText(tr("Looks for nodes or ways with FIXME in any property value."));
-        testPanel.add(prefCheckFixmes, GBC.std().insets(20,0,0,0));
+        testPanel.add(prefCheckFixmes, GBC.std().insets(20, 0, 0, 0));
 
         prefCheckFixmesBeforeUpload = new JCheckBox();
         prefCheckFixmesBeforeUpload.setSelected(Main.pref.getBoolean(PREF_CHECK_FIXMES_BEFORE_UPLOAD, true));
@@ -552,30 +599,29 @@ public class TagChecker extends Test.TagTest {
     public Command fixError(TestError testError) {
         List<Command> commands = new ArrayList<>(50);
 
-        Collection<? extends OsmPrimitive> primitives = testError.getPrimitives();
-        for (OsmPrimitive p : primitives) {
-            Map<String, String> tags = p.getKeys();
-            if (tags == null || tags.isEmpty()) {
-                continue;
-            }
+        if (testError instanceof FixableTestError) {
+            commands.add(testError.getFix());
+        } else {
+            Collection<? extends OsmPrimitive> primitives = testError.getPrimitives();
+            for (OsmPrimitive p : primitives) {
+                Map<String, String> tags = p.getKeys();
+                if (tags == null || tags.isEmpty()) {
+                    continue;
+                }
 
-            for (Entry<String, String> prop: tags.entrySet()) {
-                String key = prop.getKey();
-                String value = prop.getValue();
-                if (value == null || value.trim().length() == 0) {
-                    commands.add(new ChangePropertyCommand(p, key, null));
-                } else if (value.startsWith(" ") || value.endsWith(" ")) {
-                    commands.add(new ChangePropertyCommand(p, key, Tag.removeWhiteSpaces(value)));
-                } else if (key.startsWith(" ") || key.endsWith(" ")) {
-                    commands.add(new ChangePropertyKeyCommand(p, key, Tag.removeWhiteSpaces(key)));
-                } else {
-                    String evalue = entities.unescape(value);
-                    if (!evalue.equals(value)) {
-                        commands.add(new ChangePropertyCommand(p, key, evalue));
+                for (Entry<String, String> prop: tags.entrySet()) {
+                    String key = prop.getKey();
+                    String value = prop.getValue();
+                    if (value == null || value.trim().isEmpty()) {
+                        commands.add(new ChangePropertyCommand(p, key, null));
+                    } else if (value.startsWith(" ") || value.endsWith(" ")) {
+                        commands.add(new ChangePropertyCommand(p, key, Tag.removeWhiteSpaces(value)));
+                    } else if (key.startsWith(" ") || key.endsWith(" ")) {
+                        commands.add(new ChangePropertyKeyCommand(p, key, Tag.removeWhiteSpaces(key)));
                     } else {
-                        String replacementKey = spellCheckKeyData.get(key);
-                        if (replacementKey != null) {
-                            commands.add(new ChangePropertyKeyCommand(p, key, replacementKey));
+                        String evalue = entities.unescape(value);
+                        if (!evalue.equals(value)) {
+                            commands.add(new ChangePropertyCommand(p, key, evalue));
                         }
                     }
                 }
@@ -594,7 +640,8 @@ public class TagChecker extends Test.TagTest {
     public boolean isFixable(TestError testError) {
         if (testError.getTester() instanceof TagChecker) {
             int code = testError.getCode();
-            return code == INVALID_KEY || code == EMPTY_VALUES || code == INVALID_SPACE || code == INVALID_KEY_SPACE || code == INVALID_HTML;
+            return code == INVALID_KEY || code == EMPTY_VALUES || code == INVALID_SPACE ||
+                   code == INVALID_KEY_SPACE || code == INVALID_HTML || code == MISSPELLED_VALUE;
         }
 
         return false;
@@ -625,12 +672,13 @@ public class TagChecker extends Test.TagTest {
 
             private Pattern getPattern(String str) throws PatternSyntaxException {
                 if (str.endsWith("/i"))
-                    return Pattern.compile(str.substring(1,str.length()-2), Pattern.CASE_INSENSITIVE);
+                    return Pattern.compile(str.substring(1, str.length()-2), Pattern.CASE_INSENSITIVE);
                 if (str.endsWith("/"))
-                    return Pattern.compile(str.substring(1,str.length()-1));
+                    return Pattern.compile(str.substring(1, str.length()-1));
 
                 throw new IllegalStateException();
             }
+
             public CheckerElement(String exp) throws PatternSyntaxException {
                 Matcher m = Pattern.compile("(.+)([!=]=)(.+)").matcher(exp);
                 m.matches();
@@ -678,7 +726,7 @@ public class TagChecker extends Test.TagTest {
             String trimmed = m.replaceFirst("").trim();
             try {
                 description = m.group(1);
-                if (description != null && description.length() == 0) {
+                if (description != null && description.isEmpty()) {
                     description = null;
                 }
             } catch (IllegalStateException e) {
diff --git a/src/org/openstreetmap/josm/data/validation/tests/TurnrestrictionTest.java b/src/org/openstreetmap/josm/data/validation/tests/TurnrestrictionTest.java
index 2173d78..74278c5 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/TurnrestrictionTest.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/TurnrestrictionTest.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.validation.tests;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -177,19 +177,22 @@ public class TurnrestrictionTest extends Test {
             }
             checkIfConnected((Way) via.get(via.size() - 1), toWay,
                     tr("The last \"via\" and the \"to\" way are not connected."), TO_VIA_WAY);
-
         }
     }
 
+    private static boolean isFullOneway(Way w) {
+        return w.isOneway() != 0 && !"no".equals(w.get("oneway:bicycle"));
+    }
+
     private void checkIfConnected(Way previous, Way current, String msg, int code) {
         boolean c;
-        if (previous.isOneway() != 0 && current.isOneway() != 0) {
+        if (isFullOneway(previous) && isFullOneway(current)) {
             // both oneways: end/start node must be equal
             c = previous.lastNode(true).equals(current.firstNode(true));
-        } else if (previous.isOneway() != 0) {
+        } else if (isFullOneway(previous)) {
             // previous way is oneway: end of previous must be start/end of current
             c = current.isFirstLastNode(previous.lastNode(true));
-        } else if (current.isOneway() != 0) {
+        } else if (isFullOneway(current)) {
             // current way is oneway: start of current must be start/end of previous
             c = previous.isFirstLastNode(current.firstNode(true));
         } else {
diff --git a/src/org/openstreetmap/josm/data/validation/tests/UnclosedWays.java b/src/org/openstreetmap/josm/data/validation/tests/UnclosedWays.java
index 1c6721e..4c76a09 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/UnclosedWays.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/UnclosedWays.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.validation.tests;
 
 import static org.openstreetmap.josm.tools.I18n.marktr;
@@ -8,7 +8,6 @@ import java.text.MessageFormat;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
-import java.util.List;
 import java.util.Set;
 
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -46,7 +45,7 @@ public class UnclosedWays extends Test {
         /** The English message */
         private final String engMessage;
         /** The special values, to be ignored if ignore is set to true; to be considered only if ignore is set to false */
-        private final List<String> specialValues;
+        private final Set<String> specialValues;
         /** The boolean indicating if special values must be ignored or considered only */
         private final boolean ignore;
 
@@ -57,7 +56,7 @@ public class UnclosedWays extends Test {
          * @param engMessage The English message
          */
         public UnclosedWaysCheck(int code, String key, String engMessage) {
-            this(code, key, engMessage, Collections.<String>emptyList());
+            this(code, key, engMessage, Collections.<String>emptySet());
         }
 
         /**
@@ -67,7 +66,7 @@ public class UnclosedWays extends Test {
          * @param engMessage The English message
          * @param ignoredValues The ignored values.
          */
-        public UnclosedWaysCheck(int code, String key, String engMessage, List<String> ignoredValues) {
+        public UnclosedWaysCheck(int code, String key, String engMessage, Set<String> ignoredValues) {
             this(code, key, engMessage, ignoredValues, true);
         }
 
@@ -79,7 +78,7 @@ public class UnclosedWays extends Test {
          * @param specialValues The special values, to be ignored if ignore is set to true; to be considered only if ignore is set to false
          * @param ignore indicates if special values must be ignored or considered only
          */
-        public UnclosedWaysCheck(int code, String key, String engMessage, List<String> specialValues, boolean ignore) {
+        public UnclosedWaysCheck(int code, String key, String engMessage, Set<String> specialValues, boolean ignore) {
             this.code = code;
             this.key = key;
             this.engMessage = engMessage;
@@ -136,14 +135,19 @@ public class UnclosedWays extends Test {
     }
 
     private final UnclosedWaysCheck[] checks = {
-        new UnclosedWaysCheck(1101, "natural",   marktr("natural type {0}"), Arrays.asList("coastline", "cliff", "tree_row", "ridge", "arete", "gorge")),
+        new UnclosedWaysCheck(1101, "natural",   marktr("natural type {0}"),
+                new HashSet<>(Arrays.asList("coastline", "cliff", "tree_row", "ridge", "valley", "arete", "gorge"))),
         new UnclosedWaysCheck(1102, "landuse",   marktr("landuse type {0}")),
         new UnclosedWaysCheck(1103, "amenities", marktr("amenities type {0}")),
-        new UnclosedWaysCheck(1104, "sport",     marktr("sport type {0}"), Arrays.asList("water_slide", "climbing")),
-        new UnclosedWaysCheck(1105, "tourism",   marktr("tourism type {0}"), Arrays.asList("attraction")),
+        new UnclosedWaysCheck(1104, "sport",     marktr("sport type {0}"),
+                new HashSet<>(Arrays.asList("water_slide", "climbing"))),
+        new UnclosedWaysCheck(1105, "tourism",   marktr("tourism type {0}"),
+                new HashSet<>(Arrays.asList("attraction", "artwork"))),
         new UnclosedWaysCheck(1106, "shop",      marktr("shop type {0}")),
-        new UnclosedWaysCheck(1107, "leisure",   marktr("leisure type {0}"), Arrays.asList("track", "slipway")),
-        new UnclosedWaysCheck(1108, "waterway",  marktr("waterway type {0}"), Arrays.asList("riverbank"), false),
+        new UnclosedWaysCheck(1107, "leisure",   marktr("leisure type {0}"),
+                new HashSet<>(Arrays.asList("track", "slipway"))),
+        new UnclosedWaysCheck(1108, "waterway",  marktr("waterway type {0}"),
+                new HashSet<>(Arrays.asList("riverbank")), false),
         new UnclosedWaysCheck(1109, "boundary", marktr("boundary type {0}")),
         new UnclosedWaysBooleanCheck(1120, "building", marktr("building")),
         new UnclosedWaysBooleanCheck(1130, "area",     marktr("area")),
@@ -169,7 +173,7 @@ public class UnclosedWays extends Test {
             return;
 
         for (OsmPrimitive parent: w.getReferrers()) {
-            if (parent instanceof Relation && ((Relation)parent).isMultipolygon())
+            if (parent instanceof Relation && ((Relation) parent).isMultipolygon())
                 return;
         }
 
diff --git a/src/org/openstreetmap/josm/data/validation/tests/UnconnectedWays.java b/src/org/openstreetmap/josm/data/validation/tests/UnconnectedWays.java
index b4305bb..dd62681 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/UnconnectedWays.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/UnconnectedWays.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.validation.tests;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -136,7 +136,7 @@ public abstract class UnconnectedWays extends Test {
 
     private Set<MyWaySegment> ways;
     private QuadBuckets<Node> endnodes; // nodes at end of way
-    private QuadBuckets<Node> endnodes_highway; // nodes at end of way
+    private QuadBuckets<Node> endnodesHighway; // nodes at end of way
     private QuadBuckets<Node> middlenodes; // nodes in middle of way
     private Set<Node> othernodes; // nodes appearing at least twice
     private Area dsArea;
@@ -158,7 +158,7 @@ public abstract class UnconnectedWays extends Test {
         super.startTest(monitor);
         ways = new HashSet<>();
         endnodes = new QuadBuckets<>();
-        endnodes_highway = new QuadBuckets<>();
+        endnodesHighway = new QuadBuckets<>();
         middlenodes = new QuadBuckets<>();
         othernodes = new HashSet<>();
         mindist = Main.pref.getDouble(PREFIX + ".node_way_distance", 10.0);
@@ -175,7 +175,7 @@ public abstract class UnconnectedWays extends Test {
                     return map;
                 }
                 for (Node en : s.nearbyNodes(mindist)) {
-                    if (en == null || !s.highway || !endnodes_highway.contains(en)) {
+                    if (en == null || !s.highway || !endnodesHighway.contains(en)) {
                         continue;
                     }
                     if (en.hasTag("highway", "turning_circle", "bus_stop")
@@ -208,7 +208,7 @@ public abstract class UnconnectedWays extends Test {
                 if (en.isConnectedTo(s.w.getNodes(), 3 /* hops */, null)) {
                     continue;
                 }
-                if (endnodes_highway.contains(en) && !s.highway && !s.w.concernsArea()) {
+                if (endnodesHighway.contains(en) && !s.highway && !s.w.concernsArea()) {
                     map.put(en, s.w);
                 } else if (endnodes.contains(en) && !s.w.concernsArea()) {
                     map.put(en, s.w);
@@ -277,7 +277,7 @@ public abstract class UnconnectedWays extends Test {
         }
         ways = null;
         endnodes = null;
-        endnodes_highway = null;
+        endnodesHighway = null;
         middlenodes = null;
         othernodes = null;
         dsArea = null;
@@ -388,7 +388,7 @@ public abstract class UnconnectedWays extends Test {
             // overlap a bit and can return duplicate nodes.
             nearbyNodeCache = null;
             List<LatLon> bounds = this.getBounds(dist);
-            List<Node> found_nodes = endnodes_highway.search(new BBox(bounds.get(0), bounds.get(1)));
+            List<Node> found_nodes = endnodesHighway.search(new BBox(bounds.get(0), bounds.get(1)));
             found_nodes.addAll(endnodes.search(new BBox(bounds.get(0), bounds.get(1))));
 
             for (Node n : found_nodes) {
@@ -422,7 +422,7 @@ public abstract class UnconnectedWays extends Test {
         if (size < 2)
             return ret;
         for (int i = 1; i < size; ++i) {
-            if(i < size-1) {
+            if (i < size-1) {
                 addNode(w.getNode(i), middlenodes);
             }
             Node a = w.getNode(i-1);
@@ -441,13 +441,14 @@ public abstract class UnconnectedWays extends Test {
     @Override
     public void visit(Way w) {
         if (w.getNodesCount() > 0 // do not consider empty ways
-                && !w.hasKey("addr:interpolation") // ignore addr:interpolation ways as they are not physical features and most of the time very near the associated highway, which is perfectly normal, see #9332
+                && !w.hasKey("addr:interpolation") // ignore addr:interpolation ways as they are not physical features and most of
+                                                   // the time very near the associated highway, which is perfectly normal, see #9332
                 && !w.hasTag("highway", "platform") && !w.hasTag("railway", "platform") // similarly for public transport platforms
                 ) {
             ways.addAll(getWaySegments(w));
             QuadBuckets<Node> set = endnodes;
             if (w.hasKey("highway") || w.hasKey("railway")) {
-                set = endnodes_highway;
+                set = endnodesHighway;
             }
             addNode(w.firstNode(), set);
             addNode(w.lastNode(), set);
@@ -457,7 +458,7 @@ public abstract class UnconnectedWays extends Test {
     private void addNode(Node n, QuadBuckets<Node> s) {
         boolean m = middlenodes.contains(n);
         boolean e = endnodes.contains(n);
-        boolean eh = endnodes_highway.contains(n);
+        boolean eh = endnodesHighway.contains(n);
         boolean o = othernodes.contains(n);
         if (!m && !e && !o && !eh) {
             s.add(n);
@@ -466,7 +467,7 @@ public abstract class UnconnectedWays extends Test {
             if (e) {
                 endnodes.remove(n);
             } else if (eh) {
-                endnodes_highway.remove(n);
+                endnodesHighway.remove(n);
             } else {
                 middlenodes.remove(n);
             }
diff --git a/src/org/openstreetmap/josm/data/validation/tests/UntaggedNode.java b/src/org/openstreetmap/josm/data/validation/tests/UntaggedNode.java
index 51a6e6e..1ebf777 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/UntaggedNode.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/UntaggedNode.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.validation.tests;
 
 import static org.openstreetmap.josm.tools.I18n.marktr;
@@ -8,6 +8,7 @@ import java.util.Collection;
 import java.util.Map;
 
 import org.openstreetmap.josm.command.Command;
+import org.openstreetmap.josm.data.osm.AbstractPrimitive;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.validation.Severity;
@@ -19,7 +20,7 @@ import org.openstreetmap.josm.data.validation.TestError;
  *
  * @author frsantos
  */
-public class UntaggedNode extends Test {
+public class UntaggedNode extends Test implements AbstractPrimitive.KeyValueVisitor {
 
     protected static final int UNTAGGED_NODE_BLANK = 201;
     protected static final int UNTAGGED_NODE_FIXME = 202;
@@ -28,6 +29,7 @@ public class UntaggedNode extends Test {
     protected static final int UNTAGGED_NODE_WATCH = 205;
     protected static final int UNTAGGED_NODE_SOURCE = 206;
     protected static final int UNTAGGED_NODE_OTHER = 207;
+    protected static final String ERROR_MESSAGE = tr("Unconnected nodes without physical tags");
 
     /**
      * Constructor
@@ -49,48 +51,50 @@ public class UntaggedNode extends Test {
     @Override
     public void visit(Node n) {
         if (n.isUsable() && !n.isTagged() && n.getReferrers().isEmpty()) {
-            String errorMessage = tr("Unconnected nodes without physical tags");
+
             if (!n.hasKeys()) {
                 String msg = marktr("No tags");
-                errors.add(new TestError(this, Severity.WARNING, errorMessage, tr(msg), msg, UNTAGGED_NODE_BLANK, n));
+                errors.add(new TestError(this, Severity.WARNING, ERROR_MESSAGE, tr(msg), msg, UNTAGGED_NODE_BLANK, n));
                 return;
             }
-            for (Map.Entry<String, String> tag : n.getKeys().entrySet()) {
-                String key = tag.getKey();
-                if (contains(tag, "fixme") || contains(tag, "FIXME")) {
-                    /* translation note: don't translate quoted words */
-                    String msg = marktr("Has tag containing ''fixme'' or ''FIXME''");
-                    errors.add(new TestError(this, Severity.WARNING, errorMessage, tr(msg), msg, UNTAGGED_NODE_FIXME, n));
-                    return;
-                }
+            n.visitKeys(this);
+        }
+    }
 
-                String msg = null;
-                int code = 0;
-                if (key.startsWith("note") || key.startsWith("comment") || key.startsWith("description")) {
-                    /* translation note: don't translate quoted words */
-                    msg = marktr("Has key ''note'' or ''comment'' or ''description''");
-                    code = UNTAGGED_NODE_NOTE;
-                } else if (key.startsWith("created_by") || key.startsWith("converted_by")) {
-                    /* translation note: don't translate quoted words */
-                    msg = marktr("Has key ''created_by'' or ''converted_by''");
-                    code = UNTAGGED_NODE_CREATED_BY;
-                } else if (key.startsWith("watch")) {
-                    /* translation note: don't translate quoted words */
-                    msg = marktr("Has key ''watch''");
-                    code = UNTAGGED_NODE_WATCH;
-                } else if (key.startsWith("source")) {
-                    /* translation note: don't translate quoted words */
-                    msg = marktr("Has key ''source''");
-                    code = UNTAGGED_NODE_SOURCE;
-                }
-                if (msg != null) {
-                    errors.add(new TestError(this, Severity.WARNING, errorMessage, tr(msg), msg, code, n));
-                    return;
-                }
-            }
-            // Does not happen, but just to be sure. Maybe definition of uninteresting tags changes in future.
-            errors.add(new TestError(this, Severity.WARNING, errorMessage, tr("Other"), "Other", UNTAGGED_NODE_OTHER, n));
+    @Override
+    public void visitKeyValue(AbstractPrimitive n, String key, String value) {
+        if (key.toLowerCase().contains("fixme") || value.toLowerCase().contains("fixme")) {
+            /* translation note: don't translate quoted words */
+            String msg = marktr("Has tag containing ''fixme'' or ''FIXME''");
+            errors.add(new TestError(this, Severity.WARNING, ERROR_MESSAGE, tr(msg), msg, UNTAGGED_NODE_FIXME, (OsmPrimitive) n));
+            return;
+        }
+
+        String msg = null;
+        int code = 0;
+        if (key.startsWith("note") || key.startsWith("comment") || key.startsWith("description")) {
+            /* translation note: don't translate quoted words */
+            msg = marktr("Has key ''note'' or ''comment'' or ''description''");
+            code = UNTAGGED_NODE_NOTE;
+        } else if (key.startsWith("created_by") || key.startsWith("converted_by")) {
+            /* translation note: don't translate quoted words */
+            msg = marktr("Has key ''created_by'' or ''converted_by''");
+            code = UNTAGGED_NODE_CREATED_BY;
+        } else if (key.startsWith("watch")) {
+            /* translation note: don't translate quoted words */
+            msg = marktr("Has key ''watch''");
+            code = UNTAGGED_NODE_WATCH;
+        } else if (key.startsWith("source")) {
+            /* translation note: don't translate quoted words */
+            msg = marktr("Has key ''source''");
+            code = UNTAGGED_NODE_SOURCE;
+        }
+        if (msg != null) {
+            errors.add(new TestError(this, Severity.WARNING, ERROR_MESSAGE, tr(msg), msg, code, (OsmPrimitive) n));
+            return;
         }
+        // Does not happen, but just to be sure. Maybe definition of uninteresting tags changes in future.
+        errors.add(new TestError(this, Severity.WARNING, ERROR_MESSAGE, tr("Other"), "Other", UNTAGGED_NODE_OTHER, (OsmPrimitive) n));
     }
 
     private boolean contains(Map.Entry<String, String> tag, String s) {
diff --git a/src/org/openstreetmap/josm/data/validation/tests/UntaggedWay.java b/src/org/openstreetmap/josm/data/validation/tests/UntaggedWay.java
index dedbce2..3f76218 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/UntaggedWay.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/UntaggedWay.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.validation.tests;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -43,23 +43,23 @@ public class UntaggedWay extends Test {
     /** Ways that must have a name */
     public static final Set<String> NAMED_WAYS = new HashSet<>();
     static {
-        NAMED_WAYS.add( "motorway" );
-        NAMED_WAYS.add( "trunk" );
-        NAMED_WAYS.add( "primary" );
-        NAMED_WAYS.add( "secondary" );
-        NAMED_WAYS.add( "tertiary" );
-        NAMED_WAYS.add( "residential" );
-        NAMED_WAYS.add( "pedestrian" );
+        NAMED_WAYS.add("motorway");
+        NAMED_WAYS.add("trunk");
+        NAMED_WAYS.add("primary");
+        NAMED_WAYS.add("secondary");
+        NAMED_WAYS.add("tertiary");
+        NAMED_WAYS.add("residential");
+        NAMED_WAYS.add("pedestrian");
     }
 
     /** Whitelist of roles allowed to reference an untagged way */
     public static final Set<String> WHITELIST = new HashSet<>();
     static {
-        WHITELIST.add( "outer" );
-        WHITELIST.add( "inner" );
-        WHITELIST.add( "perimeter" );
-        WHITELIST.add( "edge" );
-        WHITELIST.add( "outline" );
+        WHITELIST.add("outer");
+        WHITELIST.add("inner");
+        WHITELIST.add("perimeter");
+        WHITELIST.add("edge");
+        WHITELIST.add("outline");
     }
 
     /**
@@ -82,7 +82,7 @@ public class UntaggedWay extends Test {
                     && !"yes".equals(tags.get("noname"))) {
                 boolean isJunction = false;
                 boolean hasName = false;
-                for (String key : w.keySet()) {
+                for (String key : tags.keySet()) {
                     hasName = key.startsWith("name:") || key.endsWith("_name") || key.endsWith("_ref");
                     if (hasName) {
                         break;
@@ -126,7 +126,7 @@ public class UntaggedWay extends Test {
                     if (r.isMultipolygon() || WHITELIST.contains(m.getRole())) {
                         OsmPrimitive member = m.getMember();
                         if (member instanceof Way && member.isUsable() && !member.isTagged()) {
-                            waysUsedInRelations.add((Way)member);
+                            waysUsedInRelations.add((Way) member);
                         }
                     }
                 }
diff --git a/src/org/openstreetmap/josm/data/validation/tests/WayConnectedToArea.java b/src/org/openstreetmap/josm/data/validation/tests/WayConnectedToArea.java
index 8325afd..0fa70f8 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/WayConnectedToArea.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/WayConnectedToArea.java
@@ -39,7 +39,7 @@ public class WayConnectedToArea extends Test {
         boolean hasway = false;
         List<OsmPrimitive> r = w.firstNode().getReferrers();
         for (OsmPrimitive p : r) {
-            if(p != w && p.hasKey("highway")) {
+            if (p != w && p.hasKey("highway")) {
                 hasway = true;
                 break;
             }
@@ -52,7 +52,7 @@ public class WayConnectedToArea extends Test {
         hasway = false;
         r = w.lastNode().getReferrers();
         for (OsmPrimitive p : r) {
-            if(p != w && p.hasKey("highway")) {
+            if (p != w && p.hasKey("highway")) {
                 hasway = true;
                 break;
             }
diff --git a/src/org/openstreetmap/josm/data/validation/tests/WronglyOrderedWays.java b/src/org/openstreetmap/josm/data/validation/tests/WronglyOrderedWays.java
index 162a96d..e30ed11 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/WronglyOrderedWays.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/WronglyOrderedWays.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.validation.tests;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
diff --git a/src/org/openstreetmap/josm/data/validation/util/AggregatePrimitivesVisitor.java b/src/org/openstreetmap/josm/data/validation/util/AggregatePrimitivesVisitor.java
index 324a127..1779b97 100644
--- a/src/org/openstreetmap/josm/data/validation/util/AggregatePrimitivesVisitor.java
+++ b/src/org/openstreetmap/josm/data/validation/util/AggregatePrimitivesVisitor.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.validation.util;
 
 import java.util.Collection;
diff --git a/src/org/openstreetmap/josm/data/validation/util/Entities.java b/src/org/openstreetmap/josm/data/validation/util/Entities.java
index 7441192..72d964f 100644
--- a/src/org/openstreetmap/josm/data/validation/util/Entities.java
+++ b/src/org/openstreetmap/josm/data/validation/util/Entities.java
@@ -381,11 +381,11 @@ public class Entities {
                             }
                         }
                     } else { // escaped value content is an entity name
-                        if(mapNameToValue == null)
-                        {
+                        if (mapNameToValue == null) {
                             mapNameToValue = new HashMap<>();
-                            for (String[] pair : ARRAY)
+                            for (String[] pair : ARRAY) {
                                 mapNameToValue.put(pair[0], pair[1]);
+                            }
                         }
                         String value = mapNameToValue.get(entityContent);
                         entityValue = (value == null ? -1 : Integer.parseInt(value));
diff --git a/src/org/openstreetmap/josm/data/validation/util/MultipleNameVisitor.java b/src/org/openstreetmap/josm/data/validation/util/MultipleNameVisitor.java
index d1ec495..36ed5e4 100644
--- a/src/org/openstreetmap/josm/data/validation/util/MultipleNameVisitor.java
+++ b/src/org/openstreetmap/josm/data/validation/util/MultipleNameVisitor.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.validation.util;
 
 import static org.openstreetmap.josm.tools.I18n.trn;
@@ -16,8 +16,8 @@ import org.openstreetmap.josm.tools.ImageProvider;
  *
  * @author frsantos
  */
-public class MultipleNameVisitor extends NameVisitor
-{
+public class MultipleNameVisitor extends NameVisitor {
+
     public static final int MULTIPLE_NAME_MAX_LENGTH = 80;
 
     /** The class name of the combined primitives */
diff --git a/src/org/openstreetmap/josm/data/validation/util/NameVisitor.java b/src/org/openstreetmap/josm/data/validation/util/NameVisitor.java
index c7306dc..982092b 100644
--- a/src/org/openstreetmap/josm/data/validation/util/NameVisitor.java
+++ b/src/org/openstreetmap/josm/data/validation/util/NameVisitor.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.validation.util;
 
 import static org.openstreetmap.josm.tools.I18n.trn;
@@ -18,7 +18,8 @@ import org.openstreetmap.josm.tools.ImageProvider;
  *
  * @author imi
  */
-//TODO This class used to be in JOSM but it was removed. MultipleNameVisitor depends on it so I copied it here, but MultipleNameVisitor should be refactored instead of using this class
+//TODO This class used to be in JOSM but it was removed. MultipleNameVisitor depends on it so I copied it here,
+// but MultipleNameVisitor should be refactored instead of using this class
 public class NameVisitor extends AbstractVisitor {
 
     /**
diff --git a/src/org/openstreetmap/josm/data/validation/util/ValUtil.java b/src/org/openstreetmap/josm/data/validation/util/ValUtil.java
index 19d8adf..17960f7 100644
--- a/src/org/openstreetmap/josm/data/validation/util/ValUtil.java
+++ b/src/org/openstreetmap/josm/data/validation/util/ValUtil.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.validation.util;
 
 import java.awt.geom.Point2D;
@@ -32,7 +32,7 @@ public final class ValUtil {
      * @param cellWays The map with all cells
      * @return A list with all the cells the way starts or ends
      */
-    public static List<List<Way>> getWaysInCell(Way w, Map<Point2D,List<Way>> cellWays) {
+    public static List<List<Way>> getWaysInCell(Way w, Map<Point2D, List<Way>> cellWays) {
         if (w.getNodesCount() == 0)
             return Collections.emptyList();
 
@@ -63,7 +63,7 @@ public final class ValUtil {
         cell = new Point2D.Double(x1, y1);
         if (!cellNodes.contains(cell)) {
             cellNodes.add(cell);
-            ways = cellWays.get( cell );
+            ways = cellWays.get(cell);
             if (ways == null) {
                 ways = new ArrayList<>();
                 cellWays.put(cell, ways);
@@ -156,7 +156,7 @@ public final class ValUtil {
 
         long maxSteps = (gridX1 - gridX0) + Math.abs(gridY1 - gridY0) + 1;
         while ((gridX0 <= gridX1 && (gridY0 - gridY1)*stepY <= 0) && maxSteps-- > 0) {
-            cells.add( new Point2D.Double(gridX0, gridY0));
+            cells.add(new Point2D.Double(gridX0, gridY0));
 
             // Is the cross between the segment and next vertical line nearer than the cross with next horizontal line?
             // Note: segment line formula: y=dy/dx(x-x1)+y1
diff --git a/src/org/openstreetmap/josm/gui/ConditionalOptionPaneUtil.java b/src/org/openstreetmap/josm/gui/ConditionalOptionPaneUtil.java
index 2264454..be26cfe 100644
--- a/src/org/openstreetmap/josm/gui/ConditionalOptionPaneUtil.java
+++ b/src/org/openstreetmap/josm/gui/ConditionalOptionPaneUtil.java
@@ -35,11 +35,11 @@ public final class ConditionalOptionPaneUtil {
     public static final int DIALOG_DISABLED_OPTION = Integer.MIN_VALUE;
 
     /** (preference key => return value) mappings valid for the current operation (no, those two maps cannot be combined) */
-    protected static final Map<String, Integer> sessionChoices = new HashMap<>();
+    private static final Map<String, Integer> sessionChoices = new HashMap<>();
     /** (preference key => return value) mappings valid for the current session */
-    protected static final Map<String, Integer> immediateChoices = new HashMap<>();
+    private static final Map<String, Integer> immediateChoices = new HashMap<>();
     /** a set indication that (preference key) is or may be stored for the currently active bulk operation */
-    protected static final Set<String> immediateActive = new HashSet<>();
+    private static final Set<String> immediateActive = new HashSet<>();
 
     /**
      * this is a static utility class only
@@ -70,7 +70,8 @@ public final class ConditionalOptionPaneUtil {
     }
 
     /**
-     * Determines whether the key has been marked to be part of a bulk operation (in order to provide a "Do not show again (this operation)" option).
+     * Determines whether the key has been marked to be part of a bulk operation
+     * (in order to provide a "Do not show again (this operation)" option).
      * @param prefKey the preference key
      */
     public static boolean isInBulkOperation(final String prefKey) {
@@ -112,7 +113,8 @@ public final class ConditionalOptionPaneUtil {
      *
      * @return the option selected by user. {@link JOptionPane#CLOSED_OPTION} if the dialog was closed.
      */
-    public static int showOptionDialog(String preferenceKey, Component parent, Object message, String title, int optionType, int messageType, Object [] options, Object defaultOption) throws HeadlessException {
+    public static int showOptionDialog(String preferenceKey, Component parent, Object message, String title, int optionType,
+            int messageType, Object[] options, Object defaultOption) throws HeadlessException {
         int ret = getDialogReturnValue(preferenceKey);
         if (isYesOrNo(ret))
             return ret;
@@ -155,13 +157,14 @@ public final class ConditionalOptionPaneUtil {
      * @see JOptionPane#WARNING_MESSAGE
      * @see JOptionPane#ERROR_MESSAGE
      */
-    public static boolean showConfirmationDialog(String preferenceKey, Component parent, Object message, String title, int optionType, int messageType, int trueOption) throws HeadlessException {
+    public static boolean showConfirmationDialog(String preferenceKey, Component parent, Object message, String title,
+            int optionType, int messageType, int trueOption) throws HeadlessException {
         int ret = getDialogReturnValue(preferenceKey);
         if (isYesOrNo(ret))
             return ret == trueOption;
         MessagePanel pnl = new MessagePanel(message, isInBulkOperation(preferenceKey));
         ret = JOptionPane.showConfirmDialog(parent, pnl, title, optionType, messageType);
-        if ((isYesOrNo(ret))) {
+        if (isYesOrNo(ret)) {
             pnl.getNotShowAgain().store(preferenceKey, ret);
         }
         return ret == trueOption;
@@ -189,7 +192,7 @@ public final class ConditionalOptionPaneUtil {
      * @see JOptionPane#WARNING_MESSAGE
      * @see JOptionPane#ERROR_MESSAGE
      */
-    public static void showMessageDialog(String preferenceKey, Component parent, Object message, String title,int messageType) {
+    public static void showMessageDialog(String preferenceKey, Component parent, Object message, String title, int messageType) {
         if (getDialogReturnValue(preferenceKey) == Integer.MAX_VALUE)
             return;
         MessagePanel pnl = new MessagePanel(message, isInBulkOperation(preferenceKey));
@@ -241,14 +244,12 @@ public final class ConditionalOptionPaneUtil {
     }
 
     /**
-     * This is a message panel used in dialogs which can be enabled/disabled with a preference
-     * setting.
+     * This is a message panel used in dialogs which can be enabled/disabled with a preference setting.
      * In addition to the normal message any {@link JOptionPane} would display it includes
      * a checkbox for enabling/disabling this particular dialog.
      *
      */
     static class MessagePanel extends JPanel {
-        private final ButtonGroup group = new ButtonGroup();
         private final JRadioButton cbShowPermanentDialog = new JRadioButton(NotShowAgain.PERMANENT.getLabel());
         private final JRadioButton cbShowSessionDialog = new JRadioButton(NotShowAgain.SESSION.getLabel());
         private final JRadioButton cbShowImmediateDialog = new JRadioButton(NotShowAgain.OPERATION.getLabel());
@@ -256,11 +257,13 @@ public final class ConditionalOptionPaneUtil {
 
         /**
          * Constructs a new panel.
-         * @param message the the message (null to add no message, Component instances are added directly, otherwise a JLabel with the string representation is added)
+         * @param message the the message (null to add no message, Component instances are added directly,
+         *                otherwise a JLabel with the string representation is added)
          * @param displayImmediateOption whether to provide "Do not show again (this session)"
          */
         public MessagePanel(Object message, boolean displayImmediateOption) {
             cbStandard.setSelected(true);
+            ButtonGroup group = new ButtonGroup();
             group.add(cbShowPermanentDialog);
             group.add(cbShowSessionDialog);
             group.add(cbShowImmediateDialog);
diff --git a/src/org/openstreetmap/josm/gui/DefaultNameFormatter.java b/src/org/openstreetmap/josm/gui/DefaultNameFormatter.java
index 48e328f..e63ba24 100644
--- a/src/org/openstreetmap/josm/gui/DefaultNameFormatter.java
+++ b/src/org/openstreetmap/josm/gui/DefaultNameFormatter.java
@@ -74,7 +74,7 @@ public class DefaultNameFormatter implements NameFormatter, HistoryNameFormatter
     public static void registerFormatHook(NameFormatterHook hook) {
         if (hook == null) return;
         if (!formatHooks.contains(hook)) {
-            formatHooks.add(0,hook);
+            formatHooks.add(0, hook);
         }
     }
 
@@ -154,21 +154,19 @@ public class DefaultNameFormatter implements NameFormatter, HistoryNameFormatter
                 } else {
                     n = node.getName();
                 }
-                if(n == null)
-                {
+                if (n == null) {
                     String s;
-                    if((s = node.get("addr:housename")) != null) {
+                    if ((s = node.get("addr:housename")) != null) {
                         /* I18n: name of house as parameter */
                         n = tr("House {0}", s);
                     }
-                    if(n == null && (s = node.get("addr:housenumber")) != null) {
+                    if (n == null && (s = node.get("addr:housenumber")) != null) {
                         String t = node.get("addr:street");
-                        if(t != null) {
+                        if (t != null) {
                             /* I18n: house number, street as parameter, number should remain
                         before street for better visibility */
                             n =  tr("House number {0} at {1}", s, t);
-                        }
-                        else {
+                        } else {
                             /* I18n: house number as parameter */
                             n = tr("House number {0}", s);
                         }
@@ -183,7 +181,8 @@ public class DefaultNameFormatter implements NameFormatter, HistoryNameFormatter
                 preset.nameTemplate.appendText(name, node);
             }
             if (node.getCoor() != null) {
-                name.append(" \u200E(").append(node.getCoor().latToString(CoordinateFormat.getDefaultFormat())).append(", ").append(node.getCoor().lonToString(CoordinateFormat.getDefaultFormat())).append(")");
+                name.append(" \u200E(").append(node.getCoor().latToString(CoordinateFormat.getDefaultFormat())).append(", ")
+                    .append(node.getCoor().lonToString(CoordinateFormat.getDefaultFormat())).append(')');
             }
         }
         decorateNameWithId(name, node);
@@ -256,25 +255,24 @@ public class DefaultNameFormatter implements NameFormatter, HistoryNameFormatter
                 }
                 if (n == null) {
                     String s;
-                    if((s = way.get("addr:housename")) != null) {
+                    if ((s = way.get("addr:housename")) != null) {
                         /* I18n: name of house as parameter */
                         n = tr("House {0}", s);
                     }
-                    if(n == null && (s = way.get("addr:housenumber")) != null) {
+                    if (n == null && (s = way.get("addr:housenumber")) != null) {
                         String t = way.get("addr:street");
-                        if(t != null) {
+                        if (t != null) {
                             /* I18n: house number, street as parameter, number should remain
                         before street for better visibility */
                             n =  tr("House number {0} at {1}", s, t);
-                        }
-                        else {
+                        } else {
                             /* I18n: house number as parameter */
                             n = tr("House number {0}", s);
                         }
                     }
                 }
-                if(n == null && way.get("building") != null) n = tr("building");
-                if(n == null || n.length() == 0) {
+                if (n == null && way.get("building") != null) n = tr("building");
+                if (n == null || n.isEmpty()) {
                     n = String.valueOf(way.getId());
                 }
 
@@ -288,7 +286,7 @@ public class DefaultNameFormatter implements NameFormatter, HistoryNameFormatter
                nevertheless, who knows what future brings */
             /* I18n: count of nodes as parameter */
             String nodes = trn("{0} node", "{0} nodes", nodesNo, nodesNo);
-            name.append(mark).append(" (").append(nodes).append(")");
+            name.append(mark).append(" (").append(nodes).append(')');
         }
         decorateNameWithId(name, way);
 
@@ -338,7 +336,7 @@ public class DefaultNameFormatter implements NameFormatter, HistoryNameFormatter
                 name.append(", ").append(tr("incomplete"));
             }
 
-            name.append(")");
+            name.append(')');
         }
         decorateNameWithId(name, relation);
 
@@ -364,7 +362,7 @@ public class DefaultNameFormatter implements NameFormatter, HistoryNameFormatter
             result.append(" (").append(relationName).append(", ");
         } else {
             preset.nameTemplate.appendText(result, relation);
-            result.append("(");
+            result.append('(');
         }
     }
 
@@ -403,7 +401,7 @@ public class DefaultNameFormatter implements NameFormatter, HistoryNameFormatter
             }
 
             if (r1.getMembersCount() != r2.getMembersCount())
-                return (r1.getMembersCount() > r2.getMembersCount())?1:-1;
+                return (r1.getMembersCount() > r2.getMembersCount()) ? 1 : -1;
 
             int comp = Boolean.valueOf(r1.hasIncompleteMembers()).compareTo(Boolean.valueOf(r2.hasIncompleteMembers()));
             if (comp != 0)
@@ -432,8 +430,7 @@ public class DefaultNameFormatter implements NameFormatter, HistoryNameFormatter
             String building  = relation.get("building");
             if (OsmUtils.isTrue(building)) {
                 name = tr("building");
-            } else if(building != null)
-            {
+            } else if (building != null) {
                 name = tr(building); // translate tag!
             }
         }
@@ -498,7 +495,7 @@ public class DefaultNameFormatter implements NameFormatter, HistoryNameFormatter
      */
     @Override
     public String format(Changeset changeset) {
-        return tr("Changeset {0}",changeset.getId());
+        return tr("Changeset {0}", changeset.getId());
     }
 
     /**
@@ -513,10 +510,9 @@ public class DefaultNameFormatter implements NameFormatter, HistoryNameFormatter
 
     private String buildDefaultToolTip(long id, Map<String, String> tags) {
         StringBuilder sb = new StringBuilder();
-        sb.append("<html>");
-        sb.append("<strong>id</strong>=")
-        .append(id)
-        .append("<br>");
+        sb.append("<html><strong>id</strong>=")
+          .append(id)
+          .append("<br>");
         List<String> keyList = new ArrayList<>(tags.keySet());
         Collections.sort(keyList);
         for (int i = 0; i < keyList.size(); i++) {
@@ -525,12 +521,11 @@ public class DefaultNameFormatter implements NameFormatter, HistoryNameFormatter
             }
             String key = keyList.get(i);
             sb.append("<strong>")
-            .append(key)
-            .append("</strong>")
-            .append("=");
+              .append(key)
+              .append("</strong>=");
             String value = tags.get(key);
-            while(value.length() != 0) {
-                sb.append(value.substring(0,Math.min(50, value.length())));
+            while (!value.isEmpty()) {
+                sb.append(value.substring(0, Math.min(50, value.length())));
                 if (value.length() > 50) {
                     sb.append("<br>");
                     value = value.substring(50);
@@ -584,7 +579,7 @@ public class DefaultNameFormatter implements NameFormatter, HistoryNameFormatter
             .append(coord.latToString(CoordinateFormat.getDefaultFormat()))
             .append(", ")
             .append(coord.lonToString(CoordinateFormat.getDefaultFormat()))
-            .append(")");
+            .append(')');
         }
         decorateNameWithId(sb, node);
         return sb.toString();
@@ -622,7 +617,7 @@ public class DefaultNameFormatter implements NameFormatter, HistoryNameFormatter
 
         int nodesNo = way.isClosed() ? way.getNumNodes() -1 : way.getNumNodes();
         String nodes = trn("{0} node", "{0} nodes", nodesNo, nodesNo);
-        if(sb.length() == 0 ) {
+        if (sb.length() == 0) {
             sb.append(way.getId());
         }
         /* note: length == 0 should no longer happen, but leave the bracket code
@@ -672,7 +667,7 @@ public class DefaultNameFormatter implements NameFormatter, HistoryNameFormatter
         }
 
         int mbno = relation.getNumMembers();
-        sb.append(trn("{0} member", "{0} members", mbno, mbno)).append(")");
+        sb.append(trn("{0} member", "{0} members", mbno, mbno)).append(')');
 
         decorateNameWithId(sb, relation);
         return sb.toString();
diff --git a/src/org/openstreetmap/josm/gui/ExceptionDialogUtil.java b/src/org/openstreetmap/josm/gui/ExceptionDialogUtil.java
index 6a70e7d..42070be 100644
--- a/src/org/openstreetmap/josm/gui/ExceptionDialogUtil.java
+++ b/src/org/openstreetmap/josm/gui/ExceptionDialogUtil.java
@@ -187,7 +187,7 @@ public final class ExceptionDialogUtil {
      * @param e the exception
      */
     public static void explainNestedInvocationTargetException(Exception e) {
-        InvocationTargetException ex = getNestedException(e, InvocationTargetException.class);
+        InvocationTargetException ex = ExceptionUtil.getNestedException(e, InvocationTargetException.class);
         if (ex != null) {
             // Users should be able to submit a bug report for an invocation target exception
             //
@@ -403,54 +403,32 @@ public final class ExceptionDialogUtil {
     }
 
     /**
-     * Replies the first nested exception of type <code>nestedClass</code> (including
-     * the root exception <code>e</code>) or null, if no such exception is found.
-     *
-     * @param <T>
-     * @param e the root exception
-     * @param nestedClass the type of the nested exception
-     * @return the first nested exception of type <code>nestedClass</code> (including
-     * the root exception <code>e</code>) or null, if no such exception is found.
-     */
-    protected static <T> T getNestedException(Exception e, Class<T> nestedClass) {
-        Throwable t = e;
-        while (t != null && !(nestedClass.isInstance(t))) {
-            t = t.getCause();
-        }
-        if (t == null)
-            return null;
-        else if (nestedClass.isInstance(t))
-            return nestedClass.cast(t);
-        return null;
-    }
-
-    /**
      * Explains an {@link OsmTransferException} to the user.
      *
      * @param e the {@link OsmTransferException}
      */
     public static void explainOsmTransferException(OsmTransferException e) {
-        if (getNestedException(e, SecurityException.class) != null) {
+        if (ExceptionUtil.getNestedException(e, SecurityException.class) != null) {
             explainSecurityException(e);
             return;
         }
-        if (getNestedException(e, SocketException.class) != null) {
+        if (ExceptionUtil.getNestedException(e, SocketException.class) != null) {
             explainNestedSocketException(e);
             return;
         }
-        if (getNestedException(e, UnknownHostException.class) != null) {
+        if (ExceptionUtil.getNestedException(e, UnknownHostException.class) != null) {
             explainNestedUnkonwnHostException(e);
             return;
         }
-        if (getNestedException(e, IOException.class) != null) {
+        if (ExceptionUtil.getNestedException(e, IOException.class) != null) {
             explainNestedIOException(e);
             return;
         }
-        if (getNestedException(e, IllegalDataException.class) != null) {
+        if (ExceptionUtil.getNestedException(e, IllegalDataException.class) != null) {
             explainNestedIllegalDataException(e);
             return;
         }
-        if (getNestedException(e, OfflineAccessException.class) != null) {
+        if (ExceptionUtil.getNestedException(e, OfflineAccessException.class) != null) {
             explainNestedOfflineAccessException(e);
             return;
         }
@@ -460,12 +438,12 @@ public final class ExceptionDialogUtil {
         }
 
         if (e instanceof ChangesetClosedException) {
-            explainChangesetClosedException((ChangesetClosedException)e);
+            explainChangesetClosedException((ChangesetClosedException) e);
             return;
         }
 
         if (e instanceof MissingOAuthAccessTokenException) {
-            explainMissingOAuthAccessTokenException((MissingOAuthAccessTokenException)e);
+            explainMissingOAuthAccessTokenException((MissingOAuthAccessTokenException) e);
             return;
         }
 
@@ -533,7 +511,7 @@ public final class ExceptionDialogUtil {
      * @param e the {@link Exception}
      */
     public static void explainException(Exception e) {
-        if (getNestedException(e, InvocationTargetException.class) != null) {
+        if (ExceptionUtil.getNestedException(e, InvocationTargetException.class) != null) {
             explainNestedInvocationTargetException(e);
             return;
         }
diff --git a/src/org/openstreetmap/josm/gui/ExtendedDialog.java b/src/org/openstreetmap/josm/gui/ExtendedDialog.java
index a8e316d..51d6590 100644
--- a/src/org/openstreetmap/josm/gui/ExtendedDialog.java
+++ b/src/org/openstreetmap/josm/gui/ExtendedDialog.java
@@ -14,7 +14,9 @@ import java.awt.event.KeyEvent;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 import javax.swing.AbstractAction;
 import javax.swing.Action;
@@ -72,7 +74,7 @@ import org.openstreetmap.josm.tools.WindowGeometry;
  */
 public class ExtendedDialog extends JDialog {
     private final boolean disposeOnClose;
-    private int result = 0;
+    private volatile int result = 0;
     public static final int DialogClosedOtherwise = 0;
     private boolean toggleable = false;
     private String rememberSizePref = "";
@@ -85,7 +87,7 @@ public class ExtendedDialog extends JDialog {
     private final String[] bTexts;
     private String[] bToolTipTexts;
     private transient Icon[] bIcons;
-    private transient List<Integer> cancelButtonIdx = Collections.emptyList();
+    private Set<Integer> cancelButtonIdx = Collections.emptySet();
     private int defaultButtonIdx = 1;
     protected JButton defaultButton = null;
     private transient Icon icon;
@@ -104,8 +106,8 @@ public class ExtendedDialog extends JDialog {
     private boolean placeContentInScrollPane;
 
     // For easy access when inherited
-    protected transient Insets contentInsets = new Insets(10,5,0,5);
-    protected transient List<JButton> buttons = new ArrayList<>();
+    protected transient Insets contentInsets = new Insets(10, 5, 0, 5);
+    protected List<JButton> buttons = new ArrayList<>();
 
     /**
      * This method sets up the most basic options for the dialog. Add more
@@ -171,7 +173,7 @@ public class ExtendedDialog extends JDialog {
      */
     public ExtendedDialog setButtonIcons(String[] buttonIcons) {
         bIcons = new Icon[buttonIcons.length];
-        for (int i=0; i<buttonIcons.length; ++i) {
+        for (int i = 0; i < buttonIcons.length; ++i) {
             bIcons[i] = ImageProvider.get(buttonIcons[i]);
         }
         return this;
@@ -317,10 +319,11 @@ public class ExtendedDialog extends JDialog {
         JButton button;
         JPanel buttonsPanel = new JPanel(new GridBagLayout());
 
-        for (int i=0; i < bTexts.length; i++) {
+        for (int i = 0; i < bTexts.length; i++) {
             final int final_i = i;
             Action action = new AbstractAction(bTexts[i]) {
-                @Override public void actionPerformed(ActionEvent evt) {
+                @Override
+                public void actionPerformed(ActionEvent evt) {
                     buttonAction(final_i, evt);
                 }
             };
@@ -329,19 +332,19 @@ public class ExtendedDialog extends JDialog {
             if (i == defaultButtonIdx-1) {
                 defaultButton = button;
             }
-            if(bIcons != null && bIcons[i] != null) {
+            if (bIcons != null && bIcons[i] != null) {
                 button.setIcon(bIcons[i]);
             }
             if (bToolTipTexts != null && i < bToolTipTexts.length && bToolTipTexts[i] != null) {
                 button.setToolTipText(bToolTipTexts[i]);
             }
 
-            buttonsPanel.add(button, GBC.std().insets(2,2,2,2));
+            buttonsPanel.add(button, GBC.std().insets(2, 2, 2, 2));
             buttons.add(button);
         }
         if (showHelpButton) {
-            buttonsPanel.add(new JButton(new HelpAction()), GBC.std().insets(2,2,2,2));
-            HelpUtil.setHelpContext(getRootPane(),helpTopic);
+            buttonsPanel.add(new JButton(new HelpAction()), GBC.std().insets(2, 2, 2, 2));
+            HelpUtil.setHelpContext(getRootPane(), helpTopic);
         }
 
         JPanel cp = new JPanel(new GridBagLayout());
@@ -355,7 +358,7 @@ public class ExtendedDialog extends JDialog {
 
         if (icon != null) {
             JLabel iconLbl = new JLabel(icon);
-            gc.insets = new Insets(10,10,10,10);
+            gc.insets = new Insets(10, 10, 10, 10);
             gc.anchor = GridBagConstraints.NORTH;
             gc.weighty = 1.0;
             cp.add(iconLbl, gc);
@@ -379,13 +382,13 @@ public class ExtendedDialog extends JDialog {
             gc.gridx = icon != null ? 1 : 0;
             gc.gridy = y++;
             gc.anchor = GridBagConstraints.LINE_START;
-            gc.insets = new Insets(5,contentInsets.left,5,contentInsets.right);
+            gc.insets = new Insets(5, contentInsets.left, 5, contentInsets.right);
             cp.add(togglePanel, gc);
         }
 
         gc.gridy = y++;
         gc.anchor = GridBagConstraints.CENTER;
-            gc.insets = new Insets(5,5,5,5);
+            gc.insets = new Insets(5, 5, 5, 5);
         cp.add(buttonsPanel, gc);
         if (placeContentInScrollPane) {
             JScrollPane pane = new JScrollPane(cp);
@@ -403,15 +406,15 @@ public class ExtendedDialog extends JDialog {
         boolean limitedInWidth = d.width > x.width;
         boolean limitedInHeight = d.height > x.height;
 
-        if(x.width  > 0 && d.width  > x.width) {
+        if (x.width  > 0 && d.width  > x.width) {
             d.width  = x.width;
         }
-        if(x.height > 0 && d.height > x.height) {
+        if (x.height > 0 && d.height > x.height) {
             d.height = x.height;
         }
 
         // We have a vertical scrollbar and enough space to prevent a horizontal one
-        if(!limitedInWidth && limitedInHeight) {
+        if (!limitedInWidth && limitedInHeight) {
             d.width += new JScrollBar().getPreferredSize().width;
         }
 
@@ -453,6 +456,9 @@ public class ExtendedDialog extends JDialog {
                 // We need to set it to zero again, in case the dialog has been re-used
                 // and the result differs from its default value
                 result = ExtendedDialog.DialogClosedOtherwise;
+                if (Main.isDebugEnabled()) {
+                    Main.debug(getClass().getName()+" ESC action performed ("+actionEvent+") from "+new Exception().getStackTrace()[1]);
+                }
                 setVisible(false);
             }
         };
@@ -481,9 +487,13 @@ public class ExtendedDialog extends JDialog {
             repaint();
         }
 
+        if (Main.isDebugEnabled()) {
+            Main.debug(getClass().getName()+".setVisible("+visible+") from "+new Exception().getStackTrace()[1]);
+        }
+
         // Ensure all required variables are available
-        if(rememberSizePref.length() != 0 && defaultWindowGeometry != null) {
-            if(visible) {
+        if (!rememberSizePref.isEmpty() && defaultWindowGeometry != null) {
+            if (visible) {
                 initWindowGeometry().applySafe(this);
             } else if (isShowing()) { // should fix #6438, #6981, #8295
                 rememberWindowGeometry(new WindowGeometry(this));
@@ -560,7 +570,7 @@ public class ExtendedDialog extends JDialog {
      * @return {@code this}
      */
     public ExtendedDialog setCancelButton(Integer... cancelButtonIdx) {
-        this.cancelButtonIdx = Arrays.<Integer>asList(cancelButtonIdx);
+        this.cancelButtonIdx = new HashSet<>(Arrays.<Integer>asList(cancelButtonIdx));
         return this;
     }
 
@@ -643,6 +653,9 @@ public class ExtendedDialog extends JDialog {
     }
 
     class HelpAction extends AbstractAction {
+        /**
+         * Constructs a new {@code HelpAction}.
+         */
         public HelpAction() {
             putValue(SHORT_DESCRIPTION, tr("Show help information"));
             putValue(NAME, tr("Help"));
diff --git a/src/org/openstreetmap/josm/gui/FileDrop.java b/src/org/openstreetmap/josm/gui/FileDrop.java
index edef7c2..0be6f55 100644
--- a/src/org/openstreetmap/josm/gui/FileDrop.java
+++ b/src/org/openstreetmap/josm/gui/FileDrop.java
@@ -34,6 +34,8 @@ import javax.swing.border.Border;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.OpenFileAction;
 
+// CHECKSTYLE.OFF: HideUtilityClassConstructor
+
 /**
  * This class makes it easy to drag and drop files from the operating
  * system to a Java program. Any {@link java.awt.Component} can be
@@ -74,8 +76,10 @@ import org.openstreetmap.josm.actions.OpenFileAction;
  * @version 1.0.1
  * @since 1231
  */
-public class FileDrop
-{
+public class FileDrop {
+
+    // CHECKSTYLE.ON: HideUtilityClassConstructor
+
     private Border normalBorder;
     private DropTargetListener dropListener;
 
@@ -83,20 +87,20 @@ public class FileDrop
     private static Boolean supportsDnD;
 
     // Default border color
-    private static Color defaultBorderColor = new Color( 0f, 0f, 1f, 0.25f );
+    private static Color defaultBorderColor = new Color(0f, 0f, 1f, 0.25f);
 
     /**
      * Constructor for JOSM file drop
      * @param c The drop target
      */
-    public FileDrop(final Component c){
+    public FileDrop(final Component c) {
         this(
                 c,     // Drop target
-                BorderFactory.createMatteBorder( 2, 2, 2, 2, defaultBorderColor ), // Drag border
+                BorderFactory.createMatteBorder(2, 2, 2, 2, defaultBorderColor), // Drag border
                 true, // Recursive
-                new FileDrop.Listener(){
+                new FileDrop.Listener() {
                     @Override
-                    public void filesDropped( File[] files ){
+                    public void filesDropped(File[] files) {
                         // start asynchronous loading of files
                         OpenFileAction.OpenFileTask task = new OpenFileAction.OpenFileTask(Arrays.asList(files), null);
                         task.setRecordHistory(true);
@@ -122,182 +126,37 @@ public class FileDrop
             final Component c,
             final Border dragBorder,
             final boolean recursive,
-            final Listener listener)
-    {
-
-        if( supportsDnD() )
-        {   // Make a drop listener
-            dropListener = new DropTargetListener()
-            {   @Override
-                public void dragEnter( DropTargetDragEvent evt )
-            {       Main.trace("FileDrop: dragEnter event." );
-
-            // Is this an acceptable drag event?
-            if( isDragOk( evt ) )
-            {
-                // If it's a Swing component, set its border
-                if( c instanceof JComponent )
-                {   JComponent jc = (JComponent) c;
-                normalBorder = jc.getBorder();
-                Main.trace("FileDrop: normal border saved." );
-                jc.setBorder( dragBorder );
-                Main.trace("FileDrop: drag border set." );
-                }   // end if: JComponent
-
-                // Acknowledge that it's okay to enter
-                evt.acceptDrag( DnDConstants.ACTION_COPY );
-                Main.trace("FileDrop: event accepted." );
-            }   // end if: drag ok
-            else
-            {   // Reject the drag event
-                evt.rejectDrag();
-                Main.trace("FileDrop: event rejected." );
-            }   // end else: drag not ok
-            }   // end dragEnter
-
-            @Override
-            public void dragOver( DropTargetDragEvent evt )
-            {   // This is called continually as long as the mouse is
-                // over the drag target.
-            }   // end dragOver
-
-            @Override
-            public void drop( DropTargetDropEvent evt )
-            {   Main.trace("FileDrop: drop event." );
-            try
-            {   // Get whatever was dropped
-                Transferable tr = evt.getTransferable();
-
-                // Is it a file list?
-                if (tr.isDataFlavorSupported (DataFlavor.javaFileListFlavor))
-                {
-                    // Say we'll take it.
-                    evt.acceptDrop ( DnDConstants.ACTION_COPY );
-                    Main.trace("FileDrop: file list accepted." );
-
-                    // Get a useful list
-                    List<?> fileList = (List<?>)tr.getTransferData(DataFlavor.javaFileListFlavor);
-
-                    // Convert list to array
-                    final File[] files = fileList.toArray(new File[fileList.size()]);
-
-                    // Alert listener to drop.
-                    if( listener != null ) {
-                        listener.filesDropped( files );
-                    }
-
-                    // Mark that drop is completed.
-                    evt.getDropTargetContext().dropComplete(true);
-                    Main.trace("FileDrop: drop complete." );
-                }   // end if: file list
-                else // this section will check for a reader flavor.
-                {
-                    // Thanks, Nathan!
-                    // BEGIN 2007-09-12 Nathan Blomquist -- Linux (KDE/Gnome) support added.
-                    DataFlavor[] flavors = tr.getTransferDataFlavors();
-                    boolean handled = false;
-                    for (DataFlavor flavor : flavors) {
-                        if (flavor.isRepresentationClassReader()) {
-                            // Say we'll take it.
-                            evt.acceptDrop(DnDConstants.ACTION_COPY);
-                            Main.trace("FileDrop: reader accepted.");
-
-                            Reader reader = flavor.getReaderForText(tr);
-
-                            BufferedReader br = new BufferedReader(reader);
-
-                            if (listener != null) {
-                                listener.filesDropped(createFileArray(br));
-                            }
-
-                            // Mark that drop is completed.
-                            evt.getDropTargetContext().dropComplete(true);
-                            Main.trace("FileDrop: drop complete.");
-                            handled = true;
-                            break;
-                        }
-                    }
-                    if(!handled){
-                        Main.trace("FileDrop: not a file list or reader - abort." );
-                        evt.rejectDrop();
-                    }
-                    // END 2007-09-12 Nathan Blomquist -- Linux (KDE/Gnome) support added.
-                }   // end else: not a file list
-            }   // end try
-            catch (IOException | UnsupportedFlavorException e) {
-                Main.warn("FileDrop: "+e.getClass().getSimpleName()+" - abort:" );
-                Main.error(e);
-                try {
-                    evt.rejectDrop();
-                } catch (InvalidDnDOperationException ex) {
-                    // Catch InvalidDnDOperationException to fix #11259
-                    Main.error(ex);
-                }
-            } finally {
-                // If it's a Swing component, reset its border
-                if( c instanceof JComponent )
-                {   JComponent jc = (JComponent) c;
-                jc.setBorder( normalBorder );
-                Main.debug("FileDrop: normal border restored." );
-                }   // end if: JComponent
-            }   // end finally
-            }   // end drop
+            final Listener listener) {
 
-            @Override
-            public void dragExit( DropTargetEvent evt )
-            {   Main.debug("FileDrop: dragExit event." );
-            // If it's a Swing component, reset its border
-            if( c instanceof JComponent )
-            {   JComponent jc = (JComponent) c;
-            jc.setBorder( normalBorder );
-            Main.debug("FileDrop: normal border restored." );
-            }   // end if: JComponent
-            }   // end dragExit
-
-            @Override
-            public void dropActionChanged( DropTargetDragEvent evt )
-            {   Main.debug("FileDrop: dropActionChanged event." );
-            // Is this an acceptable drag event?
-            if( isDragOk( evt ) )
-            {
-                evt.acceptDrag( DnDConstants.ACTION_COPY );
-                Main.debug("FileDrop: event accepted." );
-            }   // end if: drag ok
-            else
-            {   evt.rejectDrag();
-            Main.debug("FileDrop: event rejected." );
-            }   // end else: drag not ok
-            }   // end dropActionChanged
-            }; // end DropTargetListener
+        if (supportsDnD()) {
+            // Make a drop listener
+            dropListener = new DropListener(listener, dragBorder, c);
 
             // Make the component (and possibly children) drop targets
-            makeDropTarget( c, recursive );
-        }   // end if: supports dnd
-        else
-        {   Main.info("FileDrop: Drag and drop is not supported with this JVM" );
-        }   // end else: does not support DnD
-    }   // end constructor
-
-    private static synchronized boolean supportsDnD()
-    {   // Static Boolean
-        if( supportsDnD == null )
-        {
+            makeDropTarget(c, recursive);
+        } else {
+            Main.info("FileDrop: Drag and drop is not supported with this JVM");
+        }
+    }
+
+    private static synchronized boolean supportsDnD() {
+        if (supportsDnD == null) {
             boolean support = false;
             try {
-                Class.forName( "java.awt.dnd.DnDConstants" );
+                Class.forName("java.awt.dnd.DnDConstants");
                 support = true;
-            } catch( Exception e ) {
+            } catch (Exception e) {
                 support = false;
             }
             supportsDnD = support;
-        }   // end if: first time through
+        }
         return supportsDnD.booleanValue();
-    }   // end supportsDnD
+    }
 
     // BEGIN 2007-09-12 Nathan Blomquist -- Linux (KDE/Gnome) support added.
-    private static final String ZERO_CHAR_STRING = "" + (char)0;
-    private static File[] createFileArray(BufferedReader bReader)
-    {
+    private static final String ZERO_CHAR_STRING = "" + (char) 0;
+
+    private static File[] createFileArray(BufferedReader bReader) {
         try {
             List<File> list = new ArrayList<>();
             String line = null;
@@ -323,40 +182,36 @@ public class FileDrop
     }
     // END 2007-09-12 Nathan Blomquist -- Linux (KDE/Gnome) support added.
 
-    private void makeDropTarget( final Component c, boolean recursive )
-    {
+    private void makeDropTarget(final Component c, boolean recursive) {
         // Make drop target
         final DropTarget dt = new DropTarget();
-        try
-        {   dt.addDropTargetListener( dropListener );
-        }   // end try
-        catch( TooManyListenersException e )
-        {   Main.error(e);
-        Main.warn("FileDrop: Drop will not work due to previous error. Do you have another listener attached?" );
-        }   // end catch
+        try {
+            dt.addDropTargetListener(dropListener);
+        } catch (TooManyListenersException e) {
+            Main.error(e);
+            Main.warn("FileDrop: Drop will not work due to previous error. Do you have another listener attached?");
+        }
 
         // Listen for hierarchy changes and remove the drop target when the parent gets cleared out.
-        c.addHierarchyListener( new HierarchyListener()
-        {   @Override
-            public void hierarchyChanged( HierarchyEvent evt )
-        {   Main.trace("FileDrop: Hierarchy changed." );
-        Component parent = c.getParent();
-        if( parent == null )
-        {   c.setDropTarget( null );
-        Main.trace("FileDrop: Drop target cleared from component." );
-        }   // end if: null parent
-        else
-        {   new DropTarget(c, dropListener);
-        Main.trace("FileDrop: Drop target added to component." );
-        }   // end else: parent not null
-        }   // end hierarchyChanged
-        }); // end hierarchy listener
-        if( c.getParent() != null ) {
+        c.addHierarchyListener(new HierarchyListener() {
+            @Override
+            public void hierarchyChanged(HierarchyEvent evt) {
+                Main.trace("FileDrop: Hierarchy changed.");
+                Component parent = c.getParent();
+                if (parent == null) {
+                    c.setDropTarget(null);
+                    Main.trace("FileDrop: Drop target cleared from component.");
+                } else {
+                    new DropTarget(c, dropListener);
+                    Main.trace("FileDrop: Drop target added to component.");
+                }
+            }
+        });
+        if (c.getParent() != null) {
             new DropTarget(c, dropListener);
         }
 
-        if( recursive && (c instanceof Container ) )
-        {
+        if (recursive && (c instanceof Container)) {
             // Get the container
             Container cont = (Container) c;
 
@@ -365,43 +220,42 @@ public class FileDrop
 
             // Set it's components as listeners also
             for (Component comp : comps) {
-                makeDropTarget( comp, recursive);
+                makeDropTarget(comp, recursive);
             }
-        }   // end if: recursively set components as listener
-    }   // end dropListener
+        }
+    }
 
     /** Determine if the dragged data is a file list. */
-    private boolean isDragOk( final DropTargetDragEvent evt )
-    {   boolean ok = false;
-
-    // Get data flavors being dragged
-    DataFlavor[] flavors = evt.getCurrentDataFlavors();
-
-    // See if any of the flavors are a file list
-    int i = 0;
-    while( !ok && i < flavors.length )
-    {
-        // BEGIN 2007-09-12 Nathan Blomquist -- Linux (KDE/Gnome) support added.
-        // Is the flavor a file list?
-        final DataFlavor curFlavor = flavors[i];
-        if( curFlavor.equals( DataFlavor.javaFileListFlavor ) ||
-                curFlavor.isRepresentationClassReader()){
-            ok = true;
+    private boolean isDragOk(final DropTargetDragEvent evt) {
+        boolean ok = false;
+
+        // Get data flavors being dragged
+        DataFlavor[] flavors = evt.getCurrentDataFlavors();
+
+        // See if any of the flavors are a file list
+        int i = 0;
+        while (!ok && i < flavors.length) {
+            // BEGIN 2007-09-12 Nathan Blomquist -- Linux (KDE/Gnome) support added.
+            // Is the flavor a file list?
+            final DataFlavor curFlavor = flavors[i];
+            if (curFlavor.equals(DataFlavor.javaFileListFlavor) ||
+                    curFlavor.isRepresentationClassReader()) {
+                ok = true;
+            }
+            // END 2007-09-12 Nathan Blomquist -- Linux (KDE/Gnome) support added.
+            i++;
         }
-        // END 2007-09-12 Nathan Blomquist -- Linux (KDE/Gnome) support added.
-        i++;
-    }   // end while: through flavors
 
-    // show data flavors
-    if( flavors.length == 0 ) {
-        Main.trace("FileDrop: no data flavors." );
-    }
-    for( i = 0; i < flavors.length; i++ ) {
-        Main.trace(flavors[i].toString() );
-    }
+        // show data flavors
+        if (flavors.length == 0) {
+            Main.trace("FileDrop: no data flavors.");
+        }
+        for (i = 0; i < flavors.length; i++) {
+            Main.trace(flavors[i].toString());
+        }
 
-    return ok;
-    }   // end isDragOk
+        return ok;
+    }
 
     /**
      * Removes the drag-and-drop hooks from the component and optionally
@@ -413,9 +267,9 @@ public class FileDrop
      * @param c The component to unregister as a drop target
      * @return {@code true} if at least one item has been removed, {@code false} otherwise
      */
-    public static boolean remove( Component c)
-    {   return remove( c, true );
-    }   // end remove
+    public static boolean remove(Component c) {
+        return remove(c, true);
+    }
 
     /**
      * Removes the drag-and-drop hooks from the component and optionally
@@ -426,8 +280,8 @@ public class FileDrop
      * @param recursive Recursively unregister components within a container
      * @return {@code true} if at least one item has been removed, {@code false} otherwise
      */
-    public static boolean remove( Component c, boolean recursive )
-    {   // Make sure we support dnd.
+    public static boolean remove(Component c, boolean recursive) {
+        // Make sure we support dnd.
         if (supportsDnD()) {
             Main.trace("FileDrop: Removing drag-and-drop hooks.");
             c.setDropTarget(null);
@@ -436,14 +290,160 @@ public class FileDrop
                     remove(comp, recursive);
                 }
                 return true;
-            }   // end if: recursive
-            else return false;
-        }   // end if: supports DnD
-        else return false;
-    }   // end remove
+            } else
+                return false;
+        } else
+            return false;
+    }
 
     /* ********  I N N E R   I N T E R F A C E   L I S T E N E R  ******** */
 
+    private final class DropListener implements DropTargetListener {
+        private final Listener listener;
+        private final Border dragBorder;
+        private final Component c;
+
+        private DropListener(Listener listener, Border dragBorder, Component c) {
+            this.listener = listener;
+            this.dragBorder = dragBorder;
+            this.c = c;
+        }
+
+        @Override
+        public void dragEnter(DropTargetDragEvent evt) {
+            Main.trace("FileDrop: dragEnter event.");
+
+            // Is this an acceptable drag event?
+            if (isDragOk(evt)) {
+                // If it's a Swing component, set its border
+                if (c instanceof JComponent) {
+                   JComponent jc = (JComponent) c;
+                    normalBorder = jc.getBorder();
+                    Main.trace("FileDrop: normal border saved.");
+                    jc.setBorder(dragBorder);
+                    Main.trace("FileDrop: drag border set.");
+                }
+
+                // Acknowledge that it's okay to enter
+                evt.acceptDrag(DnDConstants.ACTION_COPY);
+                Main.trace("FileDrop: event accepted.");
+            } else {
+                // Reject the drag event
+                evt.rejectDrag();
+                Main.trace("FileDrop: event rejected.");
+            }
+        }
+
+        @Override
+        public void dragOver(DropTargetDragEvent evt) {
+            // This is called continually as long as the mouse is over the drag target.
+        }
+
+        @Override
+        public void drop(DropTargetDropEvent evt) {
+           Main.trace("FileDrop: drop event.");
+            try {
+                // Get whatever was dropped
+                Transferable tr = evt.getTransferable();
+
+                // Is it a file list?
+                if (tr.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
+
+                    // Say we'll take it.
+                    evt.acceptDrop(DnDConstants.ACTION_COPY);
+                    Main.trace("FileDrop: file list accepted.");
+
+                    // Get a useful list
+                    List<?> fileList = (List<?>) tr.getTransferData(DataFlavor.javaFileListFlavor);
+
+                    // Convert list to array
+                    final File[] files = fileList.toArray(new File[fileList.size()]);
+
+                    // Alert listener to drop.
+                    if (listener != null) {
+                        listener.filesDropped(files);
+                    }
+
+                    // Mark that drop is completed.
+                    evt.getDropTargetContext().dropComplete(true);
+                    Main.trace("FileDrop: drop complete.");
+                } else {
+                    // this section will check for a reader flavor.
+                    // Thanks, Nathan!
+                    // BEGIN 2007-09-12 Nathan Blomquist -- Linux (KDE/Gnome) support added.
+                    DataFlavor[] flavors = tr.getTransferDataFlavors();
+                    boolean handled = false;
+                    for (DataFlavor flavor : flavors) {
+                        if (flavor.isRepresentationClassReader()) {
+                            // Say we'll take it.
+                            evt.acceptDrop(DnDConstants.ACTION_COPY);
+                            Main.trace("FileDrop: reader accepted.");
+
+                            Reader reader = flavor.getReaderForText(tr);
+
+                            BufferedReader br = new BufferedReader(reader);
+
+                            if (listener != null) {
+                                listener.filesDropped(createFileArray(br));
+                            }
+
+                            // Mark that drop is completed.
+                            evt.getDropTargetContext().dropComplete(true);
+                            Main.trace("FileDrop: drop complete.");
+                            handled = true;
+                            break;
+                        }
+                    }
+                    if (!handled) {
+                        Main.trace("FileDrop: not a file list or reader - abort.");
+                        evt.rejectDrop();
+                    }
+                    // END 2007-09-12 Nathan Blomquist -- Linux (KDE/Gnome) support added.
+                }
+            } catch (IOException | UnsupportedFlavorException e) {
+                Main.warn("FileDrop: "+e.getClass().getSimpleName()+" - abort:");
+                Main.error(e);
+                try {
+                    evt.rejectDrop();
+                } catch (InvalidDnDOperationException ex) {
+                    // Catch InvalidDnDOperationException to fix #11259
+                    Main.error(ex);
+                }
+            } finally {
+                // If it's a Swing component, reset its border
+                if (c instanceof JComponent) {
+                   JComponent jc = (JComponent) c;
+                    jc.setBorder(normalBorder);
+                    Main.debug("FileDrop: normal border restored.");
+                }
+            }
+        }
+
+        @Override
+        public void dragExit(DropTargetEvent evt) {
+            Main.debug("FileDrop: dragExit event.");
+            // If it's a Swing component, reset its border
+            if (c instanceof JComponent) {
+                JComponent jc = (JComponent) c;
+                jc.setBorder(normalBorder);
+                Main.debug("FileDrop: normal border restored.");
+            }
+        }
+
+        @Override
+        public void dropActionChanged(DropTargetDragEvent evt) {
+            Main.debug("FileDrop: dropActionChanged event.");
+            // Is this an acceptable drag event?
+            if (isDragOk(evt)) {
+                evt.acceptDrag(DnDConstants.ACTION_COPY);
+                Main.debug("FileDrop: event accepted.");
+            } else {
+                evt.rejectDrag();
+                Main.debug("FileDrop: event rejected.");
+            }
+        }
+    }
+
     /**
      * Implement this inner interface to listen for when files are dropped. For example
      * your class declaration may begin like this:
@@ -457,16 +457,15 @@ public class FileDrop
      *      ...
      * </code>
      */
-    public static interface Listener {
+    public interface Listener {
 
         /**
          * This method is called when files have been successfully dropped.
          *
          * @param files An array of <tt>File</tt>s that were dropped.
          */
-        public abstract void filesDropped( File[] files );
-
-    }   // end inner-interface Listener
+        void filesDropped(File[] files);
+    }
 
     /* ********  I N N E R   C L A S S  ******** */
 
@@ -491,7 +490,7 @@ public class FileDrop
      *      final MyCoolClass myObj = new MyCoolClass();
      *
      *      TransferableObject.Fetcher fetcher = new TransferableObject.Fetcher()
-     *      {   public Object getObject(){ return myObj; }
+     *      {   public Object getObject() { return myObj; }
      *      }; // end fetcher
      *
      *      Transferable xfer = new TransferableObject( fetcher );
@@ -528,7 +527,7 @@ public class FileDrop
          * <tt>application/x-net.iharder.dnd.TransferableObject</tt>.
          */
         public static final DataFlavor DATA_FLAVOR =
-            new DataFlavor( FileDrop.TransferableObject.class, MIME_TYPE );
+            new DataFlavor(TransferableObject.class, MIME_TYPE);
 
         private Fetcher fetcher;
         private Object data;
@@ -544,10 +543,10 @@ public class FileDrop
          *
          * @param data The data to transfer
          */
-        public TransferableObject( Object data )
-        {   this.data = data;
-            this.customFlavor = new DataFlavor( data.getClass(), MIME_TYPE );
-        }   // end constructor
+        public TransferableObject(Object data) {
+            this.data = data;
+            this.customFlavor = new DataFlavor(data.getClass(), MIME_TYPE);
+        }
 
         /**
          * Creates a new {@link TransferableObject} that will return the
@@ -555,12 +554,12 @@ public class FileDrop
          * No custom data flavor is set other than the default
          * {@link #DATA_FLAVOR}.
          *
-         * @see Fetcher
          * @param fetcher The {@link Fetcher} that will return the data object
+         * @see Fetcher
          */
-        public TransferableObject( Fetcher fetcher )
-        {   this.fetcher = fetcher;
-        }   // end constructor
+        public TransferableObject(Fetcher fetcher) {
+            this.fetcher = fetcher;
+        }
 
         /**
          * Creates a new {@link TransferableObject} that will return the
@@ -570,14 +569,14 @@ public class FileDrop
          * and the MIME type
          * <tt>application/x-net.iharder.dnd.TransferableObject</tt>.
          *
-         * @see Fetcher
          * @param dataClass The {@link java.lang.Class} to use in the custom data flavor
          * @param fetcher The {@link Fetcher} that will return the data object
+         * @see Fetcher
          */
-        public TransferableObject(Class<?> dataClass, Fetcher fetcher )
-        {   this.fetcher = fetcher;
-        this.customFlavor = new DataFlavor( dataClass, MIME_TYPE );
-        }   // end constructor
+        public TransferableObject(Class<?> dataClass, Fetcher fetcher) {
+            this.fetcher = fetcher;
+            this.customFlavor = new DataFlavor(dataClass, MIME_TYPE);
+        }
 
         /**
          * Returns the custom {@link java.awt.datatransfer.DataFlavor} associated
@@ -586,9 +585,9 @@ public class FileDrop
          *
          * @return The custom data flavor for the encapsulated object
          */
-        public DataFlavor getCustomDataFlavor()
-        {   return customFlavor;
-        }   // end getCustomDataFlavor
+        public DataFlavor getCustomDataFlavor() {
+            return customFlavor;
+        }
 
         /* ********  T R A N S F E R A B L E   M E T H O D S  ******** */
 
@@ -602,20 +601,17 @@ public class FileDrop
          * @return An array of supported data flavors
          */
         @Override
-        public DataFlavor[] getTransferDataFlavors()
-        {
-            if( customFlavor != null )
-                return new DataFlavor[]
-                                                            {   customFlavor,
+        public DataFlavor[] getTransferDataFlavors() {
+            if (customFlavor != null)
+                return new DataFlavor[] {
+                    customFlavor,
                     DATA_FLAVOR,
-                    DataFlavor.stringFlavor
-                                                            };  // end flavors array
+                    DataFlavor.stringFlavor};
             else
-                return new DataFlavor[]
-                                                            {   DATA_FLAVOR,
-                    DataFlavor.stringFlavor
-                                                            };  // end flavors array
-        }   // end getTransferDataFlavors
+                return new DataFlavor[] {
+                    DATA_FLAVOR,
+                    DataFlavor.stringFlavor};
+        }
 
         /**
          * Returns the data encapsulated in this {@link TransferableObject}.
@@ -628,20 +624,19 @@ public class FileDrop
          * @return The dropped data
          */
         @Override
-        public Object getTransferData( DataFlavor flavor )
-        throws UnsupportedFlavorException, IOException
-        {
+        public Object getTransferData(DataFlavor flavor)
+        throws UnsupportedFlavorException, IOException {
             // Native object
-            if( flavor.equals( DATA_FLAVOR ) )
+            if (flavor.equals(DATA_FLAVOR))
                 return fetcher == null ? data : fetcher.getObject();
 
             // String
-            if( flavor.equals( DataFlavor.stringFlavor ) )
+            if (flavor.equals(DataFlavor.stringFlavor))
                 return fetcher == null ? data.toString() : fetcher.getObject().toString();
 
-                // We can't do anything else
-                throw new UnsupportedFlavorException(flavor);
-        }   // end getTransferData
+            // We can't do anything else
+            throw new UnsupportedFlavorException(flavor);
+        }
 
         /**
          * Returns <tt>true</tt> if <var>flavor</var> is one of the supported
@@ -651,19 +646,18 @@ public class FileDrop
          * @return Whether or not the flavor is supported
          */
         @Override
-        public boolean isDataFlavorSupported( DataFlavor flavor )
-        {
+        public boolean isDataFlavorSupported(DataFlavor flavor) {
             // Native object
-            if( flavor.equals( DATA_FLAVOR ) )
+            if (flavor.equals(DATA_FLAVOR))
                 return true;
 
             // String
-            if( flavor.equals( DataFlavor.stringFlavor ) )
+            if (flavor.equals(DataFlavor.stringFlavor))
                 return true;
 
             // We can't do anything else
             return false;
-        }   // end isDataFlavorSupported
+        }
 
         /* ********  I N N E R   I N T E R F A C E   F E T C H E R  ******** */
 
@@ -677,17 +671,14 @@ public class FileDrop
          *
          * @author Robert Harder
          */
-        public static interface Fetcher
-        {
+        public interface Fetcher {
             /**
              * Return the object being encapsulated in the
              * {@link TransferableObject}.
              *
              * @return The dropped object
              */
-            public abstract Object getObject();
-        }   // end inner interface Fetcher
-
-    }   // end class TransferableObject
-
-}   // end class FileDrop
+            Object getObject();
+        }
+    }
+}
diff --git a/src/org/openstreetmap/josm/gui/GettingStarted.java b/src/org/openstreetmap/josm/gui/GettingStarted.java
index 816811f..5d959a1 100644
--- a/src/org/openstreetmap/josm/gui/GettingStarted.java
+++ b/src/org/openstreetmap/josm/gui/GettingStarted.java
@@ -1,5 +1,4 @@
-// License: GPL. See LICENSE file for details.
-
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -177,7 +176,7 @@ public final class GettingStarted extends JPanel implements ProxyPreferenceListe
             String im = m.group(1);
             URL u = getClass().getResource(im);
             if (u != null) {
-                m.appendReplacement(sb, Matcher.quoteReplacement("src=\"" + u.toString() + "\""));
+                m.appendReplacement(sb, Matcher.quoteReplacement("src=\"" + u + "\""));
             }
         }
         m.appendTail(sb);
diff --git a/src/org/openstreetmap/josm/gui/HelpAwareOptionPane.java b/src/org/openstreetmap/josm/gui/HelpAwareOptionPane.java
index 7000488..e42420e 100644
--- a/src/org/openstreetmap/josm/gui/HelpAwareOptionPane.java
+++ b/src/org/openstreetmap/josm/gui/HelpAwareOptionPane.java
@@ -100,7 +100,7 @@ public final class HelpAwareOptionPane {
             }
         }
 
-        private final boolean addChangeListener(ChangeListener listener) {
+        private boolean addChangeListener(ChangeListener listener) {
             return listener != null ? listeners.add(listener) : false;
         }
     }
@@ -143,7 +143,7 @@ public final class HelpAwareOptionPane {
             for (final ButtonSpec spec: options) {
                 final JButton b = new JButton(spec.text);
                 b.setIcon(spec.icon);
-                b.setToolTipText(spec.tooltipText == null? "" : spec.tooltipText);
+                b.setToolTipText(spec.tooltipText == null ? "" : spec.tooltipText);
                 if (helpTopic != null) {
                     HelpUtil.setHelpContext(b, helpTopic);
                 }
@@ -219,7 +219,7 @@ public final class HelpAwareOptionPane {
 
         JButton defaultButton = null;
         if (options != null && defaultOption != null) {
-            for (int i=0; i< options.length; i++) {
+            for (int i = 0; i < options.length; i++) {
                 if (options[i] == defaultOption) {
                     defaultButton = buttons.get(i);
                     break;
@@ -243,7 +243,6 @@ public final class HelpAwareOptionPane {
                 defaultButton
         );
 
-        pane.getValue();
         final JDialog dialog = new JDialog(
                 JOptionPane.getFrameForComponent(parentComponent),
                 title,
@@ -261,7 +260,7 @@ public final class HelpAwareOptionPane {
             public void windowOpened(WindowEvent e) {
                 if (defaultOption != null && options != null && options.length > 0) {
                     int i;
-                    for (i=0; i<options.length;i++) {
+                    for (i = 0; i < options.length; i++) {
                         if (options[i] == defaultOption) {
                             break;
                         }
@@ -275,7 +274,8 @@ public final class HelpAwareOptionPane {
                 }
             }
         });
-        dialog.getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE,0), "close");
+        dialog.getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(
+                KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "close");
         dialog.getRootPane().getActionMap().put("close", new AbstractAction() {
             @Override
             public void actionPerformed(ActionEvent e) {
@@ -285,16 +285,16 @@ public final class HelpAwareOptionPane {
         );
 
         if (options != null) {
-            for (int i=0; i < options.length;i++) {
+            for (int i = 0; i < options.length; i++) {
                 final DefaultAction action = new DefaultAction(dialog, pane, i);
                 buttons.get(i).addActionListener(action);
-                buttons.get(i).getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0), "enter");
+                buttons.get(i).getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "enter");
                 buttons.get(i).getActionMap().put("enter", action);
             }
         } else {
             final DefaultAction action = new DefaultAction(dialog, pane, 0);
             buttons.get(0).addActionListener(action);
-            buttons.get(0).getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0), "enter");
+            buttons.get(0).getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "enter");
             buttons.get(0).getActionMap().put("enter", action);
         }
 
@@ -304,7 +304,7 @@ public final class HelpAwareOptionPane {
             HelpUtil.setHelpContext(dialog.getRootPane(), helpTopic);
         }
         dialog.setVisible(true);
-        return (Integer)pane.getValue();
+        return (Integer) pane.getValue();
     }
 
     /**
@@ -335,7 +335,8 @@ public final class HelpAwareOptionPane {
      * @param messageType the message type (see {@link JOptionPane})
      * @param helpTopic the help topic. Can be null.
      */
-    public static void showMessageDialogInEDT(final Component parentComponent, final Object msg, final String title, final int messageType, final String helpTopic)  {
+    public static void showMessageDialogInEDT(final Component parentComponent, final Object msg, final String title,
+            final int messageType, final String helpTopic)  {
         GuiHelper.runInEDT(new Runnable() {
             @Override
             public void run() {
diff --git a/src/org/openstreetmap/josm/gui/HideableButton.java b/src/org/openstreetmap/josm/gui/HideableButton.java
index 0be5fc5..bb8f9a9 100644
--- a/src/org/openstreetmap/josm/gui/HideableButton.java
+++ b/src/org/openstreetmap/josm/gui/HideableButton.java
@@ -9,11 +9,18 @@ import javax.swing.Icon;
  */
 interface HideableButton {
     void applyButtonHiddenPreferences();
+
     void setButtonHidden(boolean b);
+
     void showButton();
+
     void hideButton();
+
     String getActionName();
+
     Icon getIcon();
+
     boolean isButtonVisible();
+
     void setShowHideButtonListener(ShowHideButtonListener l);
 }
diff --git a/src/org/openstreetmap/josm/gui/IconToggleButton.java b/src/org/openstreetmap/josm/gui/IconToggleButton.java
index 5284c13..8550570 100644
--- a/src/org/openstreetmap/josm/gui/IconToggleButton.java
+++ b/src/org/openstreetmap/josm/gui/IconToggleButton.java
@@ -50,7 +50,7 @@ public class IconToggleButton extends JToggleButton implements HideableButton, P
 
         action.addPropertyChangeListener(this);
 
-        addMouseListener(new MouseAdapter(){
+        addMouseListener(new MouseAdapter() {
             @Override public void mousePressed(MouseEvent e) {
                 groupbutton = e.getX() > getWidth()/2 && e.getY() > getHeight()/2;
             }
@@ -62,10 +62,10 @@ public class IconToggleButton extends JToggleButton implements HideableButton, P
     @Override
     public void propertyChange(PropertyChangeEvent evt) {
         if ("active".equals(evt.getPropertyName())) {
-            setSelected((Boolean)evt.getNewValue());
+            setSelected((Boolean) evt.getNewValue());
             requestFocusInWindow();
         } else if ("selected".equals(evt.getPropertyName())) {
-            setSelected((Boolean)evt.getNewValue());
+            setSelected((Boolean) evt.getNewValue());
         }
     }
 
@@ -83,7 +83,7 @@ public class IconToggleButton extends JToggleButton implements HideableButton, P
     String getPreferenceKey() {
         String s = (String) getSafeActionValue("toolbar");
         if (s == null) {
-            if (getAction()!=null) {
+            if (getAction() != null) {
                 s = getAction().getClass().getName();
             }
         }
@@ -111,14 +111,14 @@ public class IconToggleButton extends JToggleButton implements HideableButton, P
             } else {
                 hiddenFlag = Boolean.parseBoolean(hiddenFlagStr);
             }
-            setVisible( !hiddenFlag ); // show or hide, do what preferences say
+            setVisible(!hiddenFlag); // show or hide, do what preferences say
         }
     }
 
     @Override
     public void setButtonHidden(boolean b) {
         setVisible(!b);
-        if (listener!=null) { // if someone wants to know about changes of visibility
+        if (listener != null) { // if someone wants to know about changes of visibility
             if (!b) listener.buttonShown(); else listener.buttonHidden();
         }
         if ((b && isExpert && !ExpertToggleAction.isExpert()) ||
diff --git a/src/org/openstreetmap/josm/gui/ImageryMenu.java b/src/org/openstreetmap/josm/gui/ImageryMenu.java
index 023d478..76866ac 100644
--- a/src/org/openstreetmap/josm/gui/ImageryMenu.java
+++ b/src/org/openstreetmap/josm/gui/ImageryMenu.java
@@ -14,6 +14,7 @@ import java.util.Collections;
 import java.util.Comparator;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Locale;
 
 import javax.swing.Action;
 import javax.swing.JComponent;
@@ -53,7 +54,7 @@ public class ImageryMenu extends JMenu implements LayerChangeListener {
     public static final Comparator<ImageryInfo> alphabeticImageryComparator = new Comparator<ImageryInfo>() {
         @Override
         public int compare(ImageryInfo ii1, ImageryInfo ii2) {
-            return ii1.getName().toLowerCase().compareTo(ii2.getName().toLowerCase());
+            return ii1.getName().toLowerCase(Locale.ENGLISH).compareTo(ii2.getName().toLowerCase(Locale.ENGLISH));
         }
     };
 
@@ -63,6 +64,7 @@ public class ImageryMenu extends JMenu implements LayerChangeListener {
             putValue("toolbar", "imagery-offset");
             Main.toolbar.register(this);
         }
+
         @Override
         public void actionPerformed(ActionEvent e) {
             Collection<ImageryLayer> layers = Main.map.mapView.getLayersOfType(ImageryLayer.class);
@@ -72,7 +74,7 @@ public class ImageryMenu extends JMenu implements LayerChangeListener {
             }
             Component source = null;
             if (e.getSource() instanceof Component) {
-                source = (Component)e.getSource();
+                source = (Component) e.getSource();
             }
             JPopupMenu popup = new JPopupMenu();
             if (layers.size() == 1) {
@@ -105,7 +107,7 @@ public class ImageryMenu extends JMenu implements LayerChangeListener {
      * @param subMenu submenu in that contains plugin-managed additional imagery layers
      */
     public ImageryMenu(JMenu subMenu) {
-        super(tr("Imagery"));
+        super(trc("menu", "Imagery"));
         setupMenuScroller();
         MapView.addLayerChangeListener(this);
         // build dynamically
@@ -167,11 +169,11 @@ public class ImageryMenu extends JMenu implements LayerChangeListener {
             inViewLayers.removeAll(ImageryLayerInfo.instance.getLayers());
             // For layers containing complex shapes, check that center is in one
             // of its shapes (fix #7910)
-            for (Iterator<ImageryInfo> iti = inViewLayers.iterator(); iti.hasNext(); ) {
+            for (Iterator<ImageryInfo> iti = inViewLayers.iterator(); iti.hasNext();) {
                 List<Shape> shapes = iti.next().getBounds().getShapes();
                 if (shapes != null && !shapes.isEmpty()) {
                     boolean found = false;
-                    for (Iterator<Shape> its = shapes.iterator(); its.hasNext() && !found; ) {
+                    for (Iterator<Shape> its = shapes.iterator(); its.hasNext() && !found;) {
                         found = its.next().contains(pos);
                     }
                     if (!found) {
@@ -194,7 +196,7 @@ public class ImageryMenu extends JMenu implements LayerChangeListener {
         if (heightUnrolled < Main.panel.getHeight()) {
             // add all items of submenu if they will fit on screen
             int n = subMenu.getItemCount();
-            for (int i=0; i<n; i++) {
+            for (int i = 0; i < n; i++) {
                 addDynamic(subMenu.getItem(i).getAction());
             }
         } else {
@@ -203,7 +205,7 @@ public class ImageryMenu extends JMenu implements LayerChangeListener {
         }
     }
 
-    private JMenuItem getNewOffsetMenu(){
+    private JMenuItem getNewOffsetMenu() {
         if (!Main.isDisplayingMapView()) {
             offsetAction.setEnabled(false);
             return singleOffset;
@@ -214,11 +216,11 @@ public class ImageryMenu extends JMenu implements LayerChangeListener {
             return singleOffset;
         }
         offsetAction.setEnabled(true);
-        JMenu newMenu = new JMenu(trc("layer","Offset"));
+        JMenu newMenu = new JMenu(trc("layer", "Offset"));
         newMenu.setIcon(ImageProvider.get("mapmode", "adjustimg"));
         newMenu.setAction(offsetAction);
         if (layers.size() == 1)
-            return (JMenuItem)layers.iterator().next().getOffsetMenuItem(newMenu);
+            return (JMenuItem) layers.iterator().next().getOffsetMenuItem(newMenu);
         for (ImageryLayer layer : layers) {
             JMenuItem layerMenu = layer.getOffsetMenuItem();
             layerMenu.setText(layer.getName());
@@ -255,7 +257,7 @@ public class ImageryMenu extends JMenu implements LayerChangeListener {
      * (and possibly recreated) when refreshImageryMenu() is called.
      * @since 5803
      */
-    private transient List <Object> dynamicItems = new ArrayList<>(20);
+    private List<Object> dynamicItems = new ArrayList<>(20);
 
     /**
      * Remove all the items in @field dynamicItems collection
@@ -264,13 +266,13 @@ public class ImageryMenu extends JMenu implements LayerChangeListener {
     private void removeDynamicItems() {
         for (Object item : dynamicItems) {
             if (item instanceof JMenuItem) {
-                remove((JMenuItem)item);
+                remove((JMenuItem) item);
             }
             if (item instanceof MenuComponent) {
-                remove((MenuComponent)item);
+                remove((MenuComponent) item);
             }
             if (item instanceof Component) {
-                remove((Component)item);
+                remove((Component) item);
             }
         }
         dynamicItems.clear();
@@ -283,10 +285,10 @@ public class ImageryMenu extends JMenu implements LayerChangeListener {
     }
 
     private void addDynamic(Action a) {
-        dynamicItems.add( this.add(a) );
+        dynamicItems.add(this.add(a));
     }
 
     private void addDynamic(JMenuItem it) {
-        dynamicItems.add( this.add(it) );
+        dynamicItems.add(this.add(it));
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/JosmUserIdentityManager.java b/src/org/openstreetmap/josm/gui/JosmUserIdentityManager.java
index faacda2..dc01bc2 100644
--- a/src/org/openstreetmap/josm/gui/JosmUserIdentityManager.java
+++ b/src/org/openstreetmap/josm/gui/JosmUserIdentityManager.java
@@ -105,7 +105,8 @@ public final class JosmUserIdentityManager implements PreferenceChangedListener{
     public void setPartiallyIdentified(String userName) {
         CheckParameterUtil.ensureParameterNotNull(userName, "userName");
         if (userName.trim().isEmpty())
-            throw new IllegalArgumentException(MessageFormat.format("Expected non-empty value for parameter ''{0}'', got ''{1}''", "userName", userName));
+            throw new IllegalArgumentException(
+                    MessageFormat.format("Expected non-empty value for parameter ''{0}'', got ''{1}''", "userName", userName));
         this.userName = userName;
         userInfo = null;
     }
@@ -200,10 +201,9 @@ public final class JosmUserIdentityManager implements PreferenceChangedListener{
         } else {
             if (userName != null && !userName.equals(this.userName)) {
                 setPartiallyIdentified(userName);
-            } else {
-                // same name in the preferences as JOSM already knows about.
-                // keep the state, be it partially or fully identified
             }
+            // else: same name in the preferences as JOSM already knows about.
+            // keep the state, be it partially or fully identified
         }
     }
 
diff --git a/src/org/openstreetmap/josm/gui/MainApplication.java b/src/org/openstreetmap/josm/gui/MainApplication.java
index 876048f..4cc50ff 100644
--- a/src/org/openstreetmap/josm/gui/MainApplication.java
+++ b/src/org/openstreetmap/josm/gui/MainApplication.java
@@ -3,8 +3,6 @@ package org.openstreetmap.josm.gui;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
 import static org.openstreetmap.josm.tools.I18n.trn;
-import gnu.getopt.Getopt;
-import gnu.getopt.LongOpt;
 
 import java.awt.Dimension;
 import java.awt.Image;
@@ -15,9 +13,11 @@ import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.Authenticator;
-import java.net.InetAddress;
 import java.net.Inet6Address;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
 import java.net.ProxySelector;
+import java.net.Socket;
 import java.net.URL;
 import java.security.AllPermission;
 import java.security.CodeSource;
@@ -30,12 +30,14 @@ import java.security.cert.CertificateException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
-import java.util.HashMap;
+import java.util.EnumMap;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
 import java.util.TreeSet;
+import java.util.concurrent.Callable;
 
 import javax.swing.JFrame;
 import javax.swing.JOptionPane;
@@ -51,7 +53,6 @@ import org.openstreetmap.josm.data.Version;
 import org.openstreetmap.josm.gui.download.DownloadDialog;
 import org.openstreetmap.josm.gui.preferences.server.OAuthAccessTokenHolder;
 import org.openstreetmap.josm.gui.preferences.server.ProxyPreference;
-import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.io.DefaultProxySelector;
 import org.openstreetmap.josm.io.MessageNotifier;
@@ -69,16 +70,22 @@ import org.openstreetmap.josm.tools.OsmUrlToBounds;
 import org.openstreetmap.josm.tools.PlatformHookWindows;
 import org.openstreetmap.josm.tools.Utils;
 
+import gnu.getopt.Getopt;
+import gnu.getopt.LongOpt;
+
 /**
  * Main window class application.
  *
  * @author imi
  */
 public class MainApplication extends Main {
+
     /**
-     * Allow subclassing (see JOSM.java)
+     * Constructs a new {@code MainApplication}.
      */
-    public MainApplication() {}
+    public MainApplication() {
+       // Allow subclassing (see JOSM.java)
+    }
 
     /**
      * Constructs a main frame, ready sized and operating. Does not display the frame.
@@ -98,7 +105,7 @@ public class MainApplication extends Main {
         l.add(ImageProvider.get("logo_48x48x8").getImage());
         l.add(ImageProvider.get("logo").getImage());
         mainFrame.setIconImages(l);
-        mainFrame.addWindowListener(new WindowAdapter(){
+        mainFrame.addWindowListener(new WindowAdapter() {
             @Override
             public void windowClosing(final WindowEvent arg0) {
                 Main.exitJosm(true, 0);
@@ -198,15 +205,14 @@ public class MainApplication extends Main {
         /** --offline=<osm_api|josm_website|all> Disable access to the given resource(s), delimited by comma */
         OFFLINE(true),
         /** --skip-plugins */
-        SKIP_PLUGINS(false),
-        ;
+        SKIP_PLUGINS(false);
 
-        private String name;
-        private boolean requiresArgument;
+        private final String name;
+        private final boolean requiresArg;
 
-        private Option(boolean requiresArgument) {
-            this.name = name().toLowerCase().replace("_", "-");
-            this.requiresArgument = requiresArgument;
+        Option(boolean requiresArgument) {
+            this.name = name().toLowerCase(Locale.ENGLISH).replace("_", "-");
+            this.requiresArg = requiresArgument;
         }
 
         /**
@@ -222,18 +228,7 @@ public class MainApplication extends Main {
          * @return {@code true} if this option requires an argument, {@code false} otherwise
          */
         public boolean requiresArgument() {
-            return requiresArgument;
-        }
-
-        public static Map<Option, Collection<String>> fromStringMap(Map<String, Collection<String>> opts) {
-            Map<Option, Collection<String>> res = new HashMap<>();
-            for (Map.Entry<String, Collection<String>> e : opts.entrySet()) {
-                Option o = Option.valueOf(e.getKey().toUpperCase().replace("-", "_"));
-                if (o != null) {
-                    res.put(o, e.getValue());
-                }
-            }
-            return res;
+            return requiresArg;
         }
     }
 
@@ -246,10 +241,10 @@ public class MainApplication extends Main {
 
         Getopt g = new Getopt("JOSM", args, "hv", los.toArray(new LongOpt[los.size()]));
 
-        Map<Option, Collection<String>> argMap = new HashMap<>();
+        Map<Option, Collection<String>> argMap = new EnumMap<>(Option.class);
 
         int c;
-        while ((c = g.getopt()) != -1 ) {
+        while ((c = g.getopt()) != -1) {
             Option opt = null;
             switch (c) {
                 case 'h':
@@ -320,9 +315,6 @@ public class MainApplication extends Main {
             }
 
             @Override
-            public void refresh() { }
-
-            @Override
             public PermissionCollection getPermissions(CodeSource codesource) {
                 return pc;
             }
@@ -335,7 +327,7 @@ public class MainApplication extends Main {
         // call the really early hook before we do anything else
         Main.platform.preStartupHook();
 
-        Main.commandLineArgs = Utils.copyArray(argArray);
+        Main.COMMAND_LINE_ARGS.addAll(Arrays.asList(argArray));
 
         if (args.containsKey(Option.VERSION)) {
             System.out.println(Version.getInstance().getAgentString());
@@ -348,7 +340,7 @@ public class MainApplication extends Main {
             Main.info(tr("Printing debugging messages to console"));
         }
 
-        Boolean skipLoadingPlugins = false;
+        boolean skipLoadingPlugins = false;
         if (args.containsKey(Option.SKIP_PLUGINS)) {
             skipLoadingPlugins = true;
             Main.info(tr("Plugin loading skipped"));
@@ -413,15 +405,33 @@ public class MainApplication extends Main {
         ProxySelector.setDefault(proxySelector);
         OAuthAccessTokenHolder.getInstance().init(Main.pref, CredentialsManager.getInstance());
 
-        final SplashScreen splash = new SplashScreen();
-        final ProgressMonitor monitor = splash.getProgressMonitor();
+        final SplashScreen splash = GuiHelper.runInEDTAndWaitAndReturn(new Callable<SplashScreen>() {
+            @Override
+            public SplashScreen call() {
+                return new SplashScreen();
+            }
+        });
+        final SplashScreen.SplashProgressMonitor monitor = splash.getProgressMonitor();
         monitor.beginTask(tr("Initializing"));
-        splash.setVisible(Main.pref.getBoolean("draw.splashscreen", true));
+        GuiHelper.runInEDT(new Runnable() {
+            @Override
+            public void run() {
+                splash.setVisible(Main.pref.getBoolean("draw.splashscreen", true));
+            }
+        });
         Main.setInitStatusListener(new InitStatusListener() {
 
             @Override
-            public void updateStatus(String event) {
-                monitor.indeterminateSubTask(event);
+            public Object updateStatus(String event) {
+                monitor.beginTask(event);
+                return event;
+            }
+
+            @Override
+            public void finish(Object status) {
+                if (status instanceof String) {
+                    monitor.finishTask((String) status);
+                }
             }
         });
 
@@ -485,7 +495,8 @@ public class MainApplication extends Main {
         if (Main.isPlatformWindows()) {
             try {
                 // Check for insecure certificates to remove.
-                // This is Windows-dependant code but it can't go to preStartupHook (need i18n) neither startupHook (need to be called before remote control)
+                // This is Windows-dependant code but it can't go to preStartupHook (need i18n)
+                // neither startupHook (need to be called before remote control)
                 PlatformHookWindows.removeInsecureCertificates();
             } catch (NoSuchAlgorithmException | CertificateException | KeyStoreException | IOException e) {
                 error(e);
@@ -501,7 +512,8 @@ public class MainApplication extends Main {
         }
 
         if (Main.pref.getBoolean("debug.edt-checker.enable", Version.getInstance().isLocalBuild())) {
-            // Repaint manager is registered so late for a reason - there is lots of violation during startup process but they don't seem to break anything and are difficult to fix
+            // Repaint manager is registered so late for a reason - there is lots of violation during startup process
+            // but they don't seem to break anything and are difficult to fix
             info("Enabled EDT checker, wrongful access to gui from non EDT thread will be printed to console");
             RepaintManager.setCurrentManager(new CheckThreadViolationRepaintManager());
         }
@@ -511,10 +523,10 @@ public class MainApplication extends Main {
         if (args.containsKey(Option.OFFLINE)) {
             for (String s : args.get(Option.OFFLINE).iterator().next().split(",")) {
                 try {
-                    Main.setOffline(OnlineResource.valueOf(s.toUpperCase()));
+                    Main.setOffline(OnlineResource.valueOf(s.toUpperCase(Locale.ENGLISH)));
                 } catch (IllegalArgumentException e) {
                     Main.error(tr("''{0}'' is not a valid value for argument ''{1}''. Possible values are {2}, possibly delimited by commas.",
-                            s.toUpperCase(), Option.OFFLINE.getName(), Arrays.toString(OnlineResource.values())));
+                            s.toUpperCase(Locale.ENGLISH), Option.OFFLINE.getName(), Arrays.toString(OnlineResource.values())));
                     System.exit(1);
                     return;
                 }
@@ -533,7 +545,7 @@ public class MainApplication extends Main {
      * disabling or enabling IPV6 may only be done with next start.
      */
     private static void checkIPv6() {
-        if("auto".equals(Main.pref.get("prefer.ipv6", "auto"))) {
+        if ("auto".equals(Main.pref.get("prefer.ipv6", "auto"))) {
              new Thread(new Runnable() { /* this may take some time (DNS, Connect) */
                 public void run() {
                     boolean hasv6 = false;
@@ -541,14 +553,18 @@ public class MainApplication extends Main {
                     try {
                         /* Use the check result from last run of the software, as after the test, value
                            changes have no effect anymore */
-                        if(wasv6) {
+                        if (wasv6) {
                             Utils.updateSystemProperty("java.net.preferIPv6Addresses", "true");
                         }
-                        for(InetAddress a : InetAddress.getAllByName("josm.openstreetmap.de")) {
-                            if(a instanceof Inet6Address) {
-                                if(a.isReachable(1000)) {
+                        for (InetAddress a : InetAddress.getAllByName("josm.openstreetmap.de")) {
+                            if (a instanceof Inet6Address) {
+                                if (a.isReachable(1000)) {
+                                    /* be sure it REALLY works */
+                                    Socket s = new Socket();
+                                    s.connect(new InetSocketAddress(a, 80), 1000);
+                                    s.close();
                                     Utils.updateSystemProperty("java.net.preferIPv6Addresses", "true");
-                                    if(!wasv6) {
+                                    if (!wasv6) {
                                         Main.info(tr("Detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."));
                                     } else {
                                         Main.info(tr("Detected useable IPv6 network, prefering IPv6 over IPv4."));
@@ -558,17 +574,20 @@ public class MainApplication extends Main {
                                 break; /* we're done */
                             }
                         }
-                    } catch (Exception e) {
+                    } catch (IOException | SecurityException e) {
+                        if (Main.isDebugEnabled()) {
+                            Main.debug("Exception while checking IPv6 connectivity: "+e);
+                        }
                     }
-                    if(wasv6 && !hasv6) {
+                    if (wasv6 && !hasv6) {
                         Main.info(tr("Detected no useable IPv6 network, prefering IPv4 over IPv6 after next restart."));
                     }
                     Main.pref.put("validated.ipv6", hasv6);
                 }
-            }).start();
+            }, "IPv6-checker").start();
         }
     }
-    
+
     private static class GuiFinalizationWorker implements Runnable {
 
         private final Map<Option, Collection<String>> args;
diff --git a/src/org/openstreetmap/josm/gui/MainMenu.java b/src/org/openstreetmap/josm/gui/MainMenu.java
index 62cce67..12598f8 100644
--- a/src/org/openstreetmap/josm/gui/MainMenu.java
+++ b/src/org/openstreetmap/josm/gui/MainMenu.java
@@ -1,9 +1,9 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui;
 
 import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
-import static org.openstreetmap.josm.tools.I18n.marktr;
 import static org.openstreetmap.josm.tools.I18n.tr;
+import static org.openstreetmap.josm.tools.I18n.trc;
 
 import java.awt.Component;
 import java.awt.DefaultFocusTraversalPolicy;
@@ -15,6 +15,7 @@ import java.awt.event.KeyListener;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 
 import javax.swing.Action;
@@ -80,6 +81,7 @@ import org.openstreetmap.josm.actions.OpenFileAction;
 import org.openstreetmap.josm.actions.OpenLocationAction;
 import org.openstreetmap.josm.actions.OrthogonalizeAction;
 import org.openstreetmap.josm.actions.OrthogonalizeAction.Undo;
+import org.openstreetmap.josm.actions.OverpassDownloadAction;
 import org.openstreetmap.josm.actions.PasteAction;
 import org.openstreetmap.josm.actions.PasteTagsAction;
 import org.openstreetmap.josm.actions.PreferenceToggleAction;
@@ -144,6 +146,8 @@ import org.openstreetmap.josm.tools.Shortcut;
  */
 public class MainMenu extends JMenuBar {
 
+    public static enum WINDOW_MENU_GROUP { ALWAYS, TOGGLE_DIALOG, VOLATILE }
+
     /* File menu */
     /** File / New Layer **/
     public final NewAction newAction = new NewAction();
@@ -165,6 +169,8 @@ public class MainMenu extends JMenuBar {
     public final GpxExportAction gpxExport = new GpxExportAction();
     /** File / Download from OSM... **/
     public final DownloadAction download = new DownloadAction();
+    /** File / Download from Overpass API... **/
+    public final OverpassDownloadAction overpassDownload = new OverpassDownloadAction();
     /** File / Download object... **/
     public final DownloadPrimitiveAction downloadPrimitive = new DownloadPrimitiveAction();
     /** File / Download notes in current view **/
@@ -231,7 +237,7 @@ public class MainMenu extends JMenuBar {
     /** View / History (web) */
     public final HistoryInfoWebAction historyinfoweb = new HistoryInfoWebAction();
     /** View / "Zoom to"... actions */
-    public final transient Map<String, AutoScaleAction> autoScaleActions = new HashMap<>();
+    public final Map<String, AutoScaleAction> autoScaleActions = new HashMap<>();
     /** View / Jump to position */
     public final JumpToAction jumpToAct = new JumpToAction();
 
@@ -322,7 +328,7 @@ public class MainMenu extends JMenuBar {
     /**
      * fileMenu contains I/O actions
      */
-    public final JMenu fileMenu = addMenu(marktr("File"), KeyEvent.VK_F, 0, ht("/Menu/File"));
+    public final JMenu fileMenu = addMenu("File", /* I18N: mnemonic: F */ trc("menu", "File"), KeyEvent.VK_F, 0, ht("/Menu/File"));
     /**
      * sessionMenu is a submenu of File menu containing all session actions
      */
@@ -330,36 +336,36 @@ public class MainMenu extends JMenuBar {
     /**
      * editMenu contains editing actions
      */
-    public final JMenu editMenu = addMenu(marktr("Edit"), KeyEvent.VK_E, 1, ht("/Menu/Edit"));
+    public final JMenu editMenu = addMenu("Edit", /* I18N: mnemonic: E */ trc("menu", "Edit"), KeyEvent.VK_E, 1, ht("/Menu/Edit"));
     /**
      * viewMenu contains display actions (zoom, map styles, etc.)
      */
-    public final JMenu viewMenu = addMenu(marktr("View"), KeyEvent.VK_V, 2, ht("/Menu/View"));
+    public final JMenu viewMenu = addMenu("View", /* I18N: mnemonic: V */ trc("menu", "View"), KeyEvent.VK_V, 2, ht("/Menu/View"));
     /**
      * toolsMenu contains different geometry manipulation actions from JOSM core (most used)
      * The plugins should use other menus
      */
-    public final JMenu toolsMenu = addMenu(marktr("Tools"), KeyEvent.VK_T, 3, ht("/Menu/Tools"));
+    public final JMenu toolsMenu = addMenu("Tools", /* I18N: mnemonic: T */ trc("menu", "Tools"), KeyEvent.VK_T, 3, ht("/Menu/Tools"));
     /**
      * moreToolsMenu contains geometry-related actions from all the plugins
      * @since 6082 (moved from Utilsplugin2)
      */
-    public final JMenu moreToolsMenu = addMenu(marktr("More tools"), KeyEvent.VK_M, 4, ht("/Menu/MoreTools"));
+    public final JMenu moreToolsMenu = addMenu("More tools", /* I18N: mnemonic: M */ trc("menu", "More tools"), KeyEvent.VK_M, 4, ht("/Menu/MoreTools"));
     /**
      * dataMenu contains plugin actions that are related to certain tagging schemes (addressing opening hours),
      * importing external data and using external web APIs
      * @since 6082
      */
-    public final JMenu dataMenu = addMenu(marktr("Data"), KeyEvent.VK_D, 5, ht("/Menu/Data"));
+    public final JMenu dataMenu = addMenu("Data", /* I18N: mnemonic: D */ trc("menu", "Data"), KeyEvent.VK_D, 5, ht("/Menu/Data"));
     /**
      * selectionMenu contains all actions related to selecting different objects
      * @since 6082 (moved from Utilsplugin2)
      */
-    public final JMenu selectionMenu = addMenu(marktr("Selection"), KeyEvent.VK_N, 6, ht("/Menu/Selection"));
+    public final JMenu selectionMenu = addMenu("Selection", /* I18N: mnemonic: N */ trc("menu", "Selection"), KeyEvent.VK_N, 6, ht("/Menu/Selection"));
     /**
      * presetsMenu contains presets actions (search, presets tree)
      */
-    public final JMenu presetsMenu = addMenu(marktr("Presets"), KeyEvent.VK_P, 7, ht("/Menu/Presets"));
+    public final JMenu presetsMenu = addMenu("Presets", /* I18N: mnemonic: P */ trc("menu", "Presets"), KeyEvent.VK_P, 7, ht("/Menu/Presets"));
     /**
      * submenu in Imagery menu that contains plugin-managed additional imagery layers
      * @since 6097
@@ -368,20 +374,21 @@ public class MainMenu extends JMenuBar {
     /**
      * imageryMenu contains all imagery-related actions
      */
-    public final ImageryMenu imageryMenu = addMenu(new ImageryMenu(imagerySubMenu), marktr("Imagery"), KeyEvent.VK_I, 8, ht("/Menu/Imagery"));
+    // CHECKSTYLE.OFF: LineLength
+    public final ImageryMenu imageryMenu = addMenu(new ImageryMenu(imagerySubMenu), /* I18N: mnemonic: I */ "Imagery", KeyEvent.VK_I, 8, ht("/Menu/Imagery"));
+    // CHECKSTYLE.ON: LineLength
     /**
      * gpsMenu contains all plugin actions that are related
      * to using GPS data, including opening, uploading and real-time tracking
      * @since 6082
      */
-    public final JMenu gpsMenu = addMenu(marktr("GPS"), KeyEvent.VK_G, 9, ht("/Menu/GPS"));
+    public final JMenu gpsMenu = addMenu("GPS", /* I18N: mnemonic: G */ trc("menu", "GPS"), KeyEvent.VK_G, 9, ht("/Menu/GPS"));
     /** the window menu is split into several groups. The first is for windows that can be opened from
      * this menu any time, e.g. the changeset editor. The second group is for toggle dialogs and the third
      * group is for currently open windows that cannot be toggled, e.g. relation editors. It's recommended
      * to use WINDOW_MENU_GROUP to determine the group integer.
      */
-    public final JMenu windowMenu = addMenu(marktr("Windows"), KeyEvent.VK_W, 10, ht("/Menu/Windows"));
-    public static enum WINDOW_MENU_GROUP { ALWAYS, TOGGLE_DIALOG, VOLATILE }
+    public final JMenu windowMenu = addMenu("Windows", /* I18N: mnemonic: W */ trc("menu", "Windows"), KeyEvent.VK_W, 10, ht("/Menu/Windows"));
 
     /**
      * audioMenu contains all audio-related actions. Be careful, this menu is not guaranteed to be displayed at all
@@ -390,7 +397,7 @@ public class MainMenu extends JMenuBar {
     /**
      * helpMenu contains JOSM general actions (Help, About, etc.)
      */
-    public final JMenu helpMenu = addMenu(marktr("Help"), KeyEvent.VK_H, 11, ht("/Menu/Help"));
+    public final JMenu helpMenu = addMenu("Help", /* I18N: mnemonic: H */ trc("menu", "Help"), KeyEvent.VK_H, 11, ht("/Menu/Help"));
 
     private static final int defaultMenuPos = 11;
 
@@ -416,31 +423,33 @@ public class MainMenu extends JMenuBar {
      */
     public static final MenuListener menuSeparatorHandler = new MenuListener() {
         @Override
-        public void menuCanceled(MenuEvent arg0) {}
+        public void menuCanceled(MenuEvent e) {}
+
         @Override
-        public void menuDeselected(MenuEvent arg0) {}
+        public void menuDeselected(MenuEvent e) {}
+
         @Override
         public void menuSelected(MenuEvent a) {
-            if(!(a.getSource() instanceof JMenu))
+            if (!(a.getSource() instanceof JMenu))
                 return;
             final JPopupMenu m = ((JMenu) a.getSource()).getPopupMenu();
-            for(int i=0; i < m.getComponentCount()-1; i++) {
-                if(!(m.getComponent(i) instanceof JSeparator)) {
+            for (int i = 0; i < m.getComponentCount()-1; i++) {
+                if (!(m.getComponent(i) instanceof JSeparator)) {
                     continue;
                 }
                 // hide separator if the next menu item is one as well
                 ((JSeparator) m.getComponent(i)).setVisible(!(m.getComponent(i+1) instanceof JSeparator));
             }
             // hide separator at the end of the menu
-            if(m.getComponent(m.getComponentCount()-1) instanceof JSeparator) {
+            if (m.getComponent(m.getComponentCount()-1) instanceof JSeparator) {
                 ((JSeparator) m.getComponent(m.getComponentCount()-1)).setVisible(false);
             }
         }
     };
 
     /**
-     * @since 6088
      * @return the default position of tnew top-level menus
+     * @since 6088
      */
     public int getDefaultMenuPos() {
          return defaultMenuPos;
@@ -485,7 +494,7 @@ public class MainMenu extends JMenuBar {
      * @return the created menu item
      */
     public static JMenuItem add(JMenu menu, JosmAction action, boolean isExpert, Integer index) {
-        if (action.getShortcut().getAutomatic())
+        if (action.getShortcut().isAutomatic())
             return null;
         final JMenuItem menuitem;
         if (index == null) {
@@ -513,7 +522,8 @@ public class MainMenu extends JMenuBar {
      * @param menu the menu to add the action to
      * @param actionToBeInserted the action that should get a menu item directly below {@code existingMenuEntryAction}
      * @param isExpert whether the entry should only be visible if the expert mode is activated
-     * @param existingMenuEntryAction an action already added to the menu {@code menu}, the action {@code actionToBeInserted} is added directly below
+     * @param existingMenuEntryAction an action already added to the menu {@code menu},
+     * the action {@code actionToBeInserted} is added directly below
      * @return the created menu item
      */
     public static JMenuItem addAfter(JMenu menu, JosmAction actionToBeInserted, boolean isExpert, JosmAction existingMenuEntryAction) {
@@ -539,7 +549,7 @@ public class MainMenu extends JMenuBar {
      * @return The created menu item
      */
     public static <E extends Enum<E>> JMenuItem add(JMenu menu, JosmAction action, Enum<E> group) {
-        if (action.getShortcut().getAutomatic())
+        if (action.getShortcut().isAutomatic())
             return null;
         int i = getInsertionIndexForGroup(menu, group.ordinal());
         JMenuItem menuitem = (JMenuItem) menu.add(new JMenuItem(action), i);
@@ -572,21 +582,21 @@ public class MainMenu extends JMenuBar {
 
     /** finds the correct insertion index for a given group and adds separators if necessary */
     private static int getInsertionIndexForGroup(JMenu menu, int group) {
-        if(group < 0)
+        if (group < 0)
             return -1;
         // look for separator that *ends* the group (or stop at end of menu)
         int i;
-        for(i=0; i < menu.getItemCount() && group >= 0; i++) {
-            if(menu.getItem(i) == null) {
+        for (i = 0; i < menu.getItemCount() && group >= 0; i++) {
+            if (menu.getItem(i) == null) {
                 group--;
             }
         }
         // insert before separator that ends the group
-        if(group < 0) {
+        if (group < 0) {
             i--;
         }
         // not enough separators have been found, add them
-        while(group > 0) {
+        while (group > 0) {
             menu.addSeparator();
             group--;
             i++;
@@ -594,16 +604,45 @@ public class MainMenu extends JMenuBar {
         return i;
     }
 
+    /**
+     * @deprecated Use {@link #addMenu(String, String, int, int, String)} instead.
+     */
+    // Kept for compatibility with plugins
+    @Deprecated
     public JMenu addMenu(String name, int mnemonicKey, int position, String relativeHelpTopic) {
-        final JMenu menu = new JMenu(tr(name));
+        return addMenu(name, tr(name), mnemonicKey, position, relativeHelpTopic);
+    }
+
+    /**
+     * Creates a menu and adds it on the given position to the main menu.
+     *
+     * @param name              the untranslated name (used as identifier for shortcut registration)
+     * @param translatedName    the translated menu name (use {@code I18n.trc("menu", name)} to allow better internationalization
+     * @param mnemonicKey       the mnemonic key to register
+     * @param position          the position in the main menu
+     * @param relativeHelpTopic the relative help topic
+     * @return the newly created menu
+     */
+    public JMenu addMenu(String name, String translatedName, int mnemonicKey, int position, String relativeHelpTopic) {
+        final JMenu menu = new JMenu(translatedName);
         if (!GraphicsEnvironment.isHeadless()) {
             MenuScroller.setScrollerFor(menu);
         }
         return addMenu(menu, name, mnemonicKey, position, relativeHelpTopic);
     }
 
+    /**
+     * Adds the given menu on the given position to the main menu.
+     *
+     * @param menu              the menu to add
+     * @param name              the untranslated name (used as identifier for shortcut registration)
+     * @param mnemonicKey       the mnemonic key to register
+     * @param position          the position in the main menu
+     * @param relativeHelpTopic the relative help topic
+     * @return the given {@code }menu}
+     */
     public <T extends JMenu> T addMenu(T menu, String name, int mnemonicKey, int position, String relativeHelpTopic) {
-        Shortcut.registerShortcut("menu:" + name, tr("Menu: {0}", tr(name)), mnemonicKey,
+        Shortcut.registerShortcut("menu:" + name, tr("Menu: {0}", getName()), mnemonicKey,
                 Shortcut.MNEMONIC).setMnemonic(menu);
         add(menu, position);
         menu.putClientProperty("help", relativeHelpTopic);
@@ -614,8 +653,6 @@ public class MainMenu extends JMenuBar {
      * Constructs a new {@code MainMenu}.
      */
     public MainMenu() {
-        JMenuItem current;
-
         moreToolsMenu.setVisible(false);
         dataMenu.setVisible(false);
         gpsMenu.setVisible(false);
@@ -638,6 +675,7 @@ public class MainMenu extends JMenuBar {
         add(fileMenu, gpxExport, true);
         fileMenu.addSeparator();
         add(fileMenu, download);
+        add(fileMenu, overpassDownload, true);
         add(fileMenu, downloadPrimitive);
         add(fileMenu, searchNotes);
         add(fileMenu, downloadNotesInView);
@@ -669,8 +707,8 @@ public class MainMenu extends JMenuBar {
         add(editMenu, delete);
         add(editMenu, purge, true);
         editMenu.addSeparator();
-        add(editMenu,merge);
-        add(editMenu,mergeSelected);
+        add(editMenu, merge);
+        add(editMenu, mergeSelected);
         editMenu.addSeparator();
         add(editMenu, search);
         add(editMenu, presetSearchPrimitiveAction);
@@ -702,7 +740,7 @@ public class MainMenu extends JMenuBar {
         vft.setAccelerator(viewportFollowToggleAction.getShortcut().getKeyStroke());
         viewportFollowToggleAction.addButtonModel(vft.getModel());
 
-        if(Main.platform.canFullscreen()) {
+        if (Main.platform.canFullscreen()) {
             // -- fullscreen toggle action
             fullscreenToggleAction = new FullscreenToggleAction();
             final JCheckBoxMenuItem fullscreen = new JCheckBoxMenuItem(fullscreenToggleAction);
@@ -795,8 +833,8 @@ public class MainMenu extends JMenuBar {
         helpMenu.add(reportbug);
         helpMenu.addSeparator();
 
-        current = helpMenu.add(help); // FIXME why is help not a JosmAction?
-        current.setAccelerator(Shortcut.registerShortcut("system:help", tr("Help"), KeyEvent.VK_F1,
+        // FIXME why is help not a JosmAction?
+        helpMenu.add(help).setAccelerator(Shortcut.registerShortcut("system:help", tr("Help"), KeyEvent.VK_F1,
                 Shortcut.DIRECT).getKeyStroke());
         add(helpMenu, about);
         add(Box.createHorizontalGlue());
@@ -841,10 +879,12 @@ public class MainMenu extends JMenuBar {
                         helpMenu.getPreferredSize().height);
             }
         };
+        Shortcut searchFieldShortcut = Shortcut.registerShortcut("menu:search-field", tr("Search menu items"), KeyEvent.VK_R, Shortcut.MNEMONIC);
+        searchFieldShortcut.setFocusAccelerator(searchField);
         searchField.setEditable(true);
         searchField.setMaximumSize(new Dimension(200, helpMenu.getPreferredSize().height));
         searchField.setHint(tr("Search menu items"));
-        searchField.setToolTipText(tr("Search menu items"));
+        searchField.setToolTipText(Main.platform.makeTooltip(tr("Search menu items"), searchFieldShortcut));
         searchField.addKeyListener(new SearchFieldKeyListener());
         searchField.getDocument().addDocumentListener(new SearchFieldTextListener(this, searchField));
         return searchField;
@@ -856,15 +896,16 @@ public class MainMenu extends JMenuBar {
      * @return not null list of found menu items.
      */
     private List<JMenuItem> findMenuItems(String textToFind) {
-        textToFind = textToFind.toLowerCase();
+        // Explicitely use default locale in this case, because we're looking for translated strings
+        textToFind = textToFind.toLowerCase(Locale.getDefault());
         List<JMenuItem> result = new ArrayList<>();
 
         // Iterate over main menus
         for (MenuElement menuElement : getSubElements()) {
-            if( !(menuElement instanceof JMenu)) continue;
+            if (!(menuElement instanceof JMenu)) continue;
 
             JMenu mainMenuItem = (JMenu) menuElement;
-            if(mainMenuItem.getAction()!=null && mainMenuItem.getText().toLowerCase().contains(textToFind)) {
+            if (mainMenuItem.getAction() != null && mainMenuItem.getText().toLowerCase(Locale.getDefault()).contains(textToFind)) {
                 result.add(mainMenuItem);
             }
 
@@ -882,11 +923,12 @@ public class MainMenu extends JMenuBar {
      * @param result resulting list ofmenu items
      */
     private void findMenuItems(final JMenu menu, final String textToFind, final List<JMenuItem> result) {
-        for (int i=0; i<menu.getItemCount(); i++) {
+        for (int i = 0; i < menu.getItemCount(); i++) {
             JMenuItem menuItem = menu.getItem(i);
             if (menuItem == null) continue;
 
-            if (menuItem.getAction()!=null && menuItem.getText().toLowerCase().contains(textToFind)) {
+            // Explicitely use default locale in this case, because we're looking for translated strings
+            if (menuItem.getAction() != null && menuItem.getText().toLowerCase(Locale.getDefault()).contains(textToFind)) {
                 result.add(menuItem);
             }
 
@@ -899,7 +941,7 @@ public class MainMenu extends JMenuBar {
 
     protected void showAudioMenu(boolean showMenu) {
         if (showMenu && audioMenu == null) {
-            audioMenu = addMenu(marktr("Audio"), KeyEvent.VK_U, defaultMenuPos, ht("/Menu/Audio"));
+            audioMenu = addMenu("Audio", /* I18N: mnemonic: U */ trc("menu", "Audio"), KeyEvent.VK_U, defaultMenuPos, ht("/Menu/Audio"));
             add(audioMenu, audioPlayPause);
             add(audioMenu, audioNext);
             add(audioMenu, audioPrev);
@@ -918,6 +960,7 @@ public class MainMenu extends JMenuBar {
 
     static class PresetsMenuEnabler implements MapView.LayerChangeListener {
         private JMenu presetsMenu;
+
         public PresetsMenuEnabler(JMenu presetsMenu) {
             MapView.addLayerChangeListener(this);
             this.presetsMenu = presetsMenu;
@@ -949,19 +992,22 @@ public class MainMenu extends JMenuBar {
      * This listener is designed to handle ENTER key pressed in menu search field.
      * When user presses Enter key then selected item of "searchResultsMenu" is triggered.
      */
-    private class SearchFieldKeyListener implements KeyListener {
+    private static class SearchFieldKeyListener implements KeyListener {
 
         @Override
         public void keyPressed(KeyEvent e) {
             if (e.getKeyCode() == KeyEvent.VK_ENTER) {
                 // On ENTER selected menu item must be triggered
                 MenuElement[] selection = MenuSelectionManager.defaultManager().getSelectedPath();
-                if(selection.length > 1) {
+                if (selection.length > 1) {
                     MenuElement selectedElement = selection[selection.length-1];
-                    if(selectedElement instanceof JMenuItem) {
+                    if (selectedElement instanceof JMenuItem) {
                         JMenuItem selectedItem = (JMenuItem) selectedElement;
                         Action menuAction = selectedItem.getAction();
                         menuAction.actionPerformed(new ActionEvent(this, ActionEvent.ACTION_PERFORMED, null));
+                        if (Main.isDebugEnabled()) {
+                            Main.debug(getClass().getName()+" consuming event "+e);
+                        }
                         e.consume();
                     }
                 }
@@ -969,10 +1015,14 @@ public class MainMenu extends JMenuBar {
         }
 
         @Override
-        public void keyTyped(KeyEvent e) { }
+        public void keyTyped(KeyEvent e) {
+            // Not used
+        }
 
         @Override
-        public void keyReleased(KeyEvent e) { }
+        public void keyReleased(KeyEvent e) {
+            // Not used
+        }
     }
 
     private class SearchFieldTextListener implements DocumentListener {
@@ -1002,26 +1052,27 @@ public class MainMenu extends JMenuBar {
 
         //TODO: perform some delay (maybe 200 ms) before actual searching.
         void doSearch(String searchTerm) {
-            searchTerm = searchTerm.trim().toLowerCase();
+            // Explicitely use default locale in this case, because we're looking for translated strings
+            searchTerm = searchTerm.trim().toLowerCase(Locale.getDefault());
 
             if (searchTerm.equals(currentSearchText)) {
                 return;
             }
             currentSearchText = searchTerm;
-            if (searchTerm.length() == 0) {
+            if (searchTerm.isEmpty()) {
                 // No text to search
                 hideMenu();
                 return;
             }
 
             List<JMenuItem> searchResult = mainMenu.findMenuItems(currentSearchText);
-            if(searchResult.isEmpty()) {
+            if (searchResult.isEmpty()) {
                 // Nothing found
                 hideMenu();
                 return;
             }
 
-            if(searchResult.size() > 20) {
+            if (searchResult.size() > 20) {
                 // Too many items found...
                 searchResult = searchResult.subList(0, 20);
             }
diff --git a/src/org/openstreetmap/josm/gui/MapFrame.java b/src/org/openstreetmap/josm/gui/MapFrame.java
index 9aeec0a..723ebd9 100644
--- a/src/org/openstreetmap/josm/gui/MapFrame.java
+++ b/src/org/openstreetmap/josm/gui/MapFrame.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -66,6 +66,7 @@ import org.openstreetmap.josm.gui.dialogs.DialogsPanel;
 import org.openstreetmap.josm.gui.dialogs.FilterDialog;
 import org.openstreetmap.josm.gui.dialogs.LayerListDialog;
 import org.openstreetmap.josm.gui.dialogs.MapPaintDialog;
+import org.openstreetmap.josm.gui.dialogs.MinimapDialog;
 import org.openstreetmap.josm.gui.dialogs.NotesDialog;
 import org.openstreetmap.josm.gui.dialogs.RelationListDialog;
 import org.openstreetmap.josm.gui.dialogs.SelectionListDialog;
@@ -113,15 +114,16 @@ public class MapFrame extends JPanel implements Destroyable, LayerChangeListener
     private final JToolBar toolBarActions = new JToolBar(JToolBar.VERTICAL);
     private final JToolBar toolBarToggle = new JToolBar(JToolBar.VERTICAL);
 
-    private final transient List<ToggleDialog> allDialogs = new ArrayList<>();
-    private final transient List<MapMode> mapModes = new ArrayList<>();
-    private final transient List<IconToggleButton> allDialogButtons = new ArrayList<>();
-    public final transient List<IconToggleButton> allMapModeButtons = new ArrayList<>();
+    private final List<ToggleDialog> allDialogs = new ArrayList<>();
+    private final List<MapMode> mapModes = new ArrayList<>();
+    private final List<IconToggleButton> allDialogButtons = new ArrayList<>();
+    public final List<IconToggleButton> allMapModeButtons = new ArrayList<>();
 
     private final ListAllButtonsAction listAllDialogsAction = new ListAllButtonsAction(allDialogButtons);
     private final ListAllButtonsAction listAllMapModesAction = new ListAllButtonsAction(allMapModeButtons);
     private final JButton listAllToggleDialogsButton = new JButton(listAllDialogsAction);
     private final JButton listAllMapModesButton = new JButton(listAllMapModesAction);
+
     {
         listAllDialogsAction.setButton(listAllToggleDialogsButton);
         listAllMapModesAction.setButton(listAllMapModesButton);
@@ -169,7 +171,7 @@ public class MapFrame extends JPanel implements Destroyable, LayerChangeListener
      * the viewport is derived from the layer data.
      */
     public MapFrame(JPanel contentPane, ViewportData viewportData) {
-        setSize(400,400);
+        setSize(400, 400);
         setLayout(new BorderLayout());
 
         mapView = new MapView(contentPane, viewportData);
@@ -215,9 +217,9 @@ public class MapFrame extends JPanel implements Destroyable, LayerChangeListener
         add(splitPane, BorderLayout.CENTER);
 
         dialogsPanel.setLayout(new BoxLayout(dialogsPanel, BoxLayout.Y_AXIS));
-        dialogsPanel.setPreferredSize(new Dimension(Main.pref.getInteger("toggleDialogs.width",DEF_TOGGLE_DLG_WIDTH), 0));
+        dialogsPanel.setPreferredSize(new Dimension(Main.pref.getInteger("toggleDialogs.width", DEF_TOGGLE_DLG_WIDTH), 0));
         dialogsPanel.setMinimumSize(new Dimension(24, 0));
-        mapView.setMinimumSize(new Dimension(10,0));
+        mapView.setMinimumSize(new Dimension(10, 0));
 
         // toolBarActions, map mode buttons
         addMapMode(new IconToggleButton(mapModeSelect = new SelectAction(this)));
@@ -237,6 +239,7 @@ public class MapFrame extends JPanel implements Destroyable, LayerChangeListener
         addToggleDialog(propertiesDialog = new PropertiesDialog());
         addToggleDialog(selectionListDialog = new SelectionListDialog());
         addToggleDialog(relationListDialog = new RelationListDialog());
+        addToggleDialog(new MinimapDialog());
         addToggleDialog(new CommandStackDialog());
         addToggleDialog(new UserListDialog());
         addToggleDialog(conflictDialog = new ConflictDialog());
@@ -251,31 +254,33 @@ public class MapFrame extends JPanel implements Destroyable, LayerChangeListener
         statusLine = new MapStatus(this);
         MapView.addLayerChangeListener(this);
 
-        boolean unregisterTab = Shortcut.findShortcut(KeyEvent.VK_TAB, 0)!=null;
+        boolean unregisterTab = Shortcut.findShortcut(KeyEvent.VK_TAB, 0) != null;
         if (unregisterTab) {
             for (JComponent c: allDialogButtons) c.setFocusTraversalKeysEnabled(false);
             for (JComponent c: allMapModeButtons) c.setFocusTraversalKeysEnabled(false);
         }
 
-        keyDetector.register();
+        if (Main.pref.getBoolean("debug.advanced-keypress-detector.enable", true)) {
+            keyDetector.register();
+        }
     }
 
     public boolean selectSelectTool(boolean onlyIfModeless) {
-        if(onlyIfModeless && !Main.pref.getBoolean("modeless", false))
+        if (onlyIfModeless && !Main.pref.getBoolean("modeless", false))
             return false;
 
         return selectMapMode(mapModeSelect);
     }
 
     public boolean selectDrawTool(boolean onlyIfModeless) {
-        if(onlyIfModeless && !Main.pref.getBoolean("modeless", false))
+        if (onlyIfModeless && !Main.pref.getBoolean("modeless", false))
             return false;
 
         return selectMapMode(mapModeDraw);
     }
 
     public boolean selectZoomTool(boolean onlyIfModeless) {
-        if(onlyIfModeless && !Main.pref.getBoolean("modeless", false))
+        if (onlyIfModeless && !Main.pref.getBoolean("modeless", false))
             return false;
 
         return selectMapMode(mapModeZoom);
@@ -292,12 +297,12 @@ public class MapFrame extends JPanel implements Destroyable, LayerChangeListener
         Main.pref.removePreferenceChangeListener(sidetoolbarPreferencesChangedListener);
         for (int i = 0; i < toolBarActions.getComponentCount(); ++i) {
             if (toolBarActions.getComponent(i) instanceof Destroyable) {
-                ((Destroyable)toolBarActions.getComponent(i)).destroy();
+                ((Destroyable) toolBarActions.getComponent(i)).destroy();
             }
         }
         for (int i = 0; i < toolBarToggle.getComponentCount(); ++i) {
             if (toolBarToggle.getComponent(i) instanceof Destroyable) {
-                ((Destroyable)toolBarToggle.getComponent(i)).destroy();
+                ((Destroyable) toolBarToggle.getComponent(i)).destroy();
             }
         }
 
@@ -307,7 +312,7 @@ public class MapFrame extends JPanel implements Destroyable, LayerChangeListener
     }
 
     public Action getDefaultButtonAction() {
-        return ((AbstractButton)toolBarActions.getComponent(0)).getAction();
+        return ((AbstractButton) toolBarActions.getComponent(0)).getAction();
     }
 
     /**
@@ -340,8 +345,6 @@ public class MapFrame extends JPanel implements Destroyable, LayerChangeListener
         return button;
     }
 
-
-
     public void addMapMode(IconToggleButton b) {
         if (b.getAction() instanceof MapMode) {
             mapModes.add((MapMode) b.getAction());
@@ -430,7 +433,7 @@ public class MapFrame extends JPanel implements Destroyable, LayerChangeListener
          * sideToolBar: add toggle dialogs icons
          */
         if (Main.pref.getBoolean("sidetoolbar.toggledialogs.visible", true)) {
-            ((JToolBar)sideToolBar).addSeparator(new Dimension(0,18));
+            ((JToolBar) sideToolBar).addSeparator(new Dimension(0, 18));
             toolBarToggle.setAlignmentX(0.5f);
             toolBarToggle.setBorder(null);
             toolBarToggle.setInheritsPopupMenu(true);
@@ -445,62 +448,14 @@ public class MapFrame extends JPanel implements Destroyable, LayerChangeListener
         /**
          * sideToolBar: add dynamic popup menu
          */
-        sideToolBar.setComponentPopupMenu(new JPopupMenu() {
-            private static final int staticMenuEntryCount = 2;
-            private JCheckBoxMenuItem doNotHide = new JCheckBoxMenuItem(new AbstractAction(tr("Do not hide toolbar")) {
-                @Override
-                public void actionPerformed(ActionEvent e) {
-                    boolean sel = ((JCheckBoxMenuItem) e.getSource()).getState();
-                    Main.pref.put("sidetoolbar.always-visible", sel);
-                }
-            });
-            {
-                addPopupMenuListener(new PopupMenuListener() {
-                    @Override
-                    public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
-                        final Object src = ((JPopupMenu)e.getSource()).getInvoker();
-                        if (src instanceof IconToggleButton) {
-                            insert(new Separator(), 0);
-                            insert(new AbstractAction() {
-                                {
-                                    putValue(NAME, tr("Hide this button"));
-                                    putValue(SHORT_DESCRIPTION, tr("Click the arrow at the bottom to show it again."));
-        }
-                                @Override
-                                public void actionPerformed(ActionEvent e) {
-                                    ((IconToggleButton)src).setButtonHidden(true);
-                                    validateToolBarsVisibility();
-                                }
-                            }, 0);
-                        }
-                        doNotHide.setSelected(Main.pref.getBoolean("sidetoolbar.always-visible", true));
-                    }
-                    @Override
-                    public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
-                        while (getComponentCount() > staticMenuEntryCount) {
-                            remove(0);
-                        }
-                    }
-                    @Override
-                    public void popupMenuCanceled(PopupMenuEvent e) {}
-                });
-
-                add(new AbstractAction(tr("Hide edit toolbar")) {
-                    @Override
-                    public void actionPerformed(ActionEvent e) {
-                        Main.pref.put("sidetoolbar.visible", false);
-                    }
-                });
-                add(doNotHide);
-            }
-        });
-        ((JToolBar)sideToolBar).setFloatable(false);
-        sideToolBar.setBorder(BorderFactory.createEmptyBorder(0,1,0,1));
+        sideToolBar.setComponentPopupMenu(new SideToolbarPopupMenu());
+        ((JToolBar) sideToolBar).setFloatable(false);
+        sideToolBar.setBorder(BorderFactory.createEmptyBorder(0, 1, 0, 1));
 
         /**
          * sideToolBar: decide scroll- and visibility
          */
-        if(Main.pref.getBoolean("sidetoolbar.scrollable", true)) {
+        if (Main.pref.getBoolean("sidetoolbar.scrollable", true)) {
             final ScrollViewport svp = new ScrollViewport(sideToolBar, ScrollViewport.VERTICAL_DIRECTION);
             svp.addMouseWheelListener(new MouseWheelListener() {
                 @Override
@@ -534,12 +489,64 @@ public class MapFrame extends JPanel implements Destroyable, LayerChangeListener
         }
     }
 
+    private final class SideToolbarPopupMenu extends JPopupMenu {
+        private static final int staticMenuEntryCount = 2;
+        private JCheckBoxMenuItem doNotHide = new JCheckBoxMenuItem(new AbstractAction(tr("Do not hide toolbar")) {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                boolean sel = ((JCheckBoxMenuItem) e.getSource()).getState();
+                Main.pref.put("sidetoolbar.always-visible", sel);
+            }
+        });
+        {
+            addPopupMenuListener(new PopupMenuListener() {
+                @Override
+                public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
+                    final Object src = ((JPopupMenu) e.getSource()).getInvoker();
+                    if (src instanceof IconToggleButton) {
+                        insert(new Separator(), 0);
+                        insert(new AbstractAction() {
+                            {
+                                putValue(NAME, tr("Hide this button"));
+                                putValue(SHORT_DESCRIPTION, tr("Click the arrow at the bottom to show it again."));
+                            }
+
+                            @Override
+                            public void actionPerformed(ActionEvent e) {
+                                ((IconToggleButton) src).setButtonHidden(true);
+                                validateToolBarsVisibility();
+                            }
+                        }, 0);
+                    }
+                    doNotHide.setSelected(Main.pref.getBoolean("sidetoolbar.always-visible", true));
+                }
+
+                @Override
+                public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
+                    while (getComponentCount() > staticMenuEntryCount) {
+                        remove(0);
+                    }
+                }
+
+                @Override
+                public void popupMenuCanceled(PopupMenuEvent e) {}
+            });
+
+            add(new AbstractAction(tr("Hide edit toolbar")) {
+                @Override
+                public void actionPerformed(ActionEvent e) {
+                    Main.pref.put("sidetoolbar.visible", false);
+                }
+            });
+            add(doNotHide);
+        }
+    }
+
     class ListAllButtonsAction extends AbstractAction {
 
         private JButton button;
         private transient Collection<? extends HideableButton> buttons;
 
-
         public ListAllButtonsAction(Collection<? extends HideableButton> buttons) {
             this.buttons = buttons;
         }
@@ -563,6 +570,7 @@ public class MapFrame extends JPanel implements Destroyable, LayerChangeListener
                         putValue(SELECTED_KEY, t.isButtonVisible());
                         putValue(SHORT_DESCRIPTION, tr("Hide or show this toggle button"));
                     }
+
                     @Override
                     public void actionPerformed(ActionEvent e) {
                         if ((Boolean) getValue(SELECTED_KEY)) {
@@ -591,10 +599,9 @@ public class MapFrame extends JPanel implements Destroyable, LayerChangeListener
     }
 
     /**
-     * Replies the instance of a toggle dialog of type <code>type</code> managed by this
-     * map frame
+     * Replies the instance of a toggle dialog of type <code>type</code> managed by this map frame
      *
-     * @param <T>
+     * @param <T> toggle dialog type
      * @param type the class of the toggle dialog, i.e. UserListDialog.class
      * @return the instance of a toggle dialog of type <code>type</code> managed by this
      * map frame; null, if no such dialog exists
@@ -607,8 +614,8 @@ public class MapFrame extends JPanel implements Destroyable, LayerChangeListener
     public void setDialogsPanelVisible(boolean visible) {
         rememberToggleDialogWidth();
         dialogsPanel.setVisible(visible);
-        splitPane.setDividerLocation(visible?splitPane.getWidth()-Main.pref.getInteger("toggleDialogs.width",DEF_TOGGLE_DLG_WIDTH):0);
-        splitPane.setDividerSize(visible?5:0);
+        splitPane.setDividerLocation(visible ? splitPane.getWidth()-Main.pref.getInteger("toggleDialogs.width", DEF_TOGGLE_DLG_WIDTH) : 0);
+        splitPane.setDividerSize(visible ? 5 : 0);
     }
 
     /**
@@ -617,7 +624,7 @@ public class MapFrame extends JPanel implements Destroyable, LayerChangeListener
     public void rememberToggleDialogWidth() {
         if (dialogsPanel.isVisible()) {
             Main.pref.putInteger("toggleDialogs.width", splitPane.getWidth()-splitPane.getDividerLocation());
-    }
+        }
     }
 
     /**
@@ -625,7 +632,7 @@ public class MapFrame extends JPanel implements Destroyable, LayerChangeListener
      */
     public void removeTopPanel(Class<?> type) {
         int n = leftPanel.getComponentCount();
-        for (int i=0; i<n; i++) {
+        for (int i = 0; i < n; i++) {
             Component c = leftPanel.getComponent(i);
             if (type.isInstance(c)) {
                 leftPanel.remove(i);
@@ -640,7 +647,7 @@ public class MapFrame extends JPanel implements Destroyable, LayerChangeListener
      */
     public <T> T getTopPanel(Class<T> type) {
         int n = leftPanel.getComponentCount();
-        for (int i=0; i<n; i++) {
+        for (int i = 0; i < n; i++) {
             Component c = leftPanel.getComponent(i);
             if (type.isInstance(c))
                 return type.cast(c);
@@ -702,7 +709,9 @@ public class MapFrame extends JPanel implements Destroyable, LayerChangeListener
             MapMode newMapMode = getLastMapMode(newLayer);
             modeChanged = newMapMode != mapMode;
             if (newMapMode != null) {
-                selectMapMode(newMapMode, newLayer); // it would be nice to select first supported mode when layer is first selected, but it don't work well with for example editgpx layer
+                // it would be nice to select first supported mode when layer is first selected,
+                // but it don't work well with for example editgpx layer
+                selectMapMode(newMapMode, newLayer);
             } else if (mapMode != null) {
                 mapMode.exitMode(); // if new mode is null - simply exit from previous mode
             }
@@ -727,13 +736,12 @@ public class MapFrame extends JPanel implements Destroyable, LayerChangeListener
         });
     }
 
-
     private MapMode getLastMapMode(Layer newLayer) {
         MapMode mode = lastMapMode.get(newLayer);
         if (mode == null) {
             // if no action is selected - try to select default action
             Action defaultMode = getDefaultButtonAction();
-            if (defaultMode instanceof MapMode && ((MapMode)defaultMode).layerIsSupported(newLayer)) {
+            if (defaultMode instanceof MapMode && ((MapMode) defaultMode).layerIsSupported(newLayer)) {
                 mode = (MapMode) defaultMode;
             }
         }
diff --git a/src/org/openstreetmap/josm/gui/MapFrameListener.java b/src/org/openstreetmap/josm/gui/MapFrameListener.java
index b28037a..fd4c719 100644
--- a/src/org/openstreetmap/josm/gui/MapFrameListener.java
+++ b/src/org/openstreetmap/josm/gui/MapFrameListener.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui;
 
 /**
@@ -14,5 +14,5 @@ public interface MapFrameListener {
      * @param oldFrame The old MapFrame
      * @param newFrame The new MapFrame
      */
-    public abstract void mapFrameInitialized(MapFrame oldFrame, MapFrame newFrame);
+    void mapFrameInitialized(MapFrame oldFrame, MapFrame newFrame);
 }
diff --git a/src/org/openstreetmap/josm/gui/MapMover.java b/src/org/openstreetmap/josm/gui/MapMover.java
index 09c5c4e..d8ea39a 100644
--- a/src/org/openstreetmap/josm/gui/MapMover.java
+++ b/src/org/openstreetmap/josm/gui/MapMover.java
@@ -36,15 +36,17 @@ public class MapMover extends MouseAdapter implements MouseMotionListener, Mouse
 
     private final class ZoomerAction extends AbstractAction {
         private final String action;
+
         public ZoomerAction(String action) {
             this.action = action;
         }
+
         @Override
         public void actionPerformed(ActionEvent e) {
             if (".".equals(action) || ",".equals(action)) {
                 Point mouse = nc.getMousePosition();
                 if (mouse == null)
-                    mouse = new Point((int)nc.getBounds().getCenterX(), (int)nc.getBounds().getCenterY());
+                    mouse = new Point((int) nc.getBounds().getCenterX(), (int) nc.getBounds().getCenterY());
                 MouseWheelEvent we = new MouseWheelEvent(nc, e.getID(), e.getWhen(), e.getModifiers(), mouse.x, mouse.y, 0, false,
                         MouseWheelEvent.WHEEL_UNIT_SCROLL, 1, ",".equals(action) ? -1 : 1);
                 mouseWheelMoved(we);
@@ -95,6 +97,7 @@ public class MapMover extends MouseAdapter implements MouseMotionListener, Mouse
         nc.addMouseWheelListener(this);
 
         if (contentPane != null) {
+            // CHECKSTYLE.OFF: LineLength
             contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
                 Shortcut.registerShortcut("system:movefocusright", tr("Map: {0}", tr("Move right")), KeyEvent.VK_RIGHT, Shortcut.CTRL).getKeyStroke(),
                 "MapMover.Zoomer.right");
@@ -114,16 +117,19 @@ public class MapMover extends MouseAdapter implements MouseMotionListener, Mouse
                 Shortcut.registerShortcut("system:movefocusdown", tr("Map: {0}", tr("Move down")), KeyEvent.VK_DOWN, Shortcut.CTRL).getKeyStroke(),
                 "MapMover.Zoomer.down");
             contentPane.getActionMap().put("MapMover.Zoomer.down", new ZoomerAction("down"));
+            // CHECKSTYLE.ON: LineLength
 
             // see #10592 - Disable these alternate shortcuts on OS X because of conflict with system shortcut
             if (!Main.isPlatformOsx()) {
                 contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
-                    Shortcut.registerShortcut("view:zoominalternate", tr("Map: {0}", tr("Zoom in")), KeyEvent.VK_COMMA, Shortcut.CTRL).getKeyStroke(),
+                    Shortcut.registerShortcut("view:zoominalternate",
+                            tr("Map: {0}", tr("Zoom in")), KeyEvent.VK_COMMA, Shortcut.CTRL).getKeyStroke(),
                     "MapMover.Zoomer.in");
                 contentPane.getActionMap().put("MapMover.Zoomer.in", new ZoomerAction(","));
 
                 contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
-                    Shortcut.registerShortcut("view:zoomoutalternate", tr("Map: {0}", tr("Zoom out")), KeyEvent.VK_PERIOD, Shortcut.CTRL).getKeyStroke(),
+                    Shortcut.registerShortcut("view:zoomoutalternate",
+                            tr("Map: {0}", tr("Zoom out")), KeyEvent.VK_PERIOD, Shortcut.CTRL).getKeyStroke(),
                     "MapMover.Zoomer.out");
                 contentPane.getActionMap().put("MapMover.Zoomer.out", new ZoomerAction("."));
             }
@@ -242,7 +248,7 @@ public class MapMover extends MouseAdapter implements MouseMotionListener, Mouse
             if (inputKeys != null) {
                 for (KeyStroke key : inputKeys) {
                     Object binding = inputMap.get(key);
-                    if (binding instanceof String && ((String)binding).startsWith("MapMover.")) {
+                    if (binding instanceof String && ((String) binding).startsWith("MapMover.")) {
                         inputMap.remove(key);
                     }
                 }
@@ -251,7 +257,7 @@ public class MapMover extends MouseAdapter implements MouseMotionListener, Mouse
             Object[] actionsKeys = actionMap.keys();
             if (actionsKeys != null) {
                 for (Object key : actionsKeys) {
-                    if (key instanceof String && ((String)key).startsWith("MapMover.")) {
+                    if (key instanceof String && ((String) key).startsWith("MapMover.")) {
                         actionMap.remove(key);
                     }
                 }
diff --git a/src/org/openstreetmap/josm/gui/MapScaler.java b/src/org/openstreetmap/josm/gui/MapScaler.java
index 62efdf2..d3656a7 100644
--- a/src/org/openstreetmap/josm/gui/MapScaler.java
+++ b/src/org/openstreetmap/josm/gui/MapScaler.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui;
 
 import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
@@ -21,7 +21,7 @@ public class MapScaler extends JComponent implements Helpful {
 
     public MapScaler(NavigatableComponent mv) {
         this.mv = mv;
-        setSize(100+PADDING_RIGHT,30);
+        setSize(100+PADDING_RIGHT, 30);
         setOpaque(false);
     }
 
@@ -36,7 +36,7 @@ public class MapScaler extends JComponent implements Helpful {
         g.drawLine(49, 3, 49, 7);
         g.drawLine(24, 3, 24, 7);
         g.drawLine(74, 3, 74, 7);
-        g.drawString(text, (int)(100-bound.getWidth()/2), 23);
+        g.drawString(text, (int) (100-bound.getWidth()/2), 23);
         g.drawString("0", 0, 23);
     }
 
diff --git a/src/org/openstreetmap/josm/gui/MapSlider.java b/src/org/openstreetmap/josm/gui/MapSlider.java
index 8c42df6..abaf934 100644
--- a/src/org/openstreetmap/josm/gui/MapSlider.java
+++ b/src/org/openstreetmap/josm/gui/MapSlider.java
@@ -41,17 +41,17 @@ class MapSlider extends JSlider implements PropertyChangeListener, ChangeListene
         double n = world.maxNorth-world.minNorth;
         int zoom = 0;
 
-        while(zoom <= 150) {
+        while (zoom <= 150) {
             e /= 1.1;
             n /= 1.1;
-            if(e < cur_e && n < cur_n) {
+            if (e < cur_e && n < cur_n) {
                 break;
             }
             ++zoom;
         }
-        preventChange=true;
+        preventChange = true;
         setValue(zoom);
-        preventChange=false;
+        preventChange = false;
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/gui/MapStatus.java b/src/org/openstreetmap/josm/gui/MapStatus.java
index d9d015d..51e87e2 100644
--- a/src/org/openstreetmap/josm/gui/MapStatus.java
+++ b/src/org/openstreetmap/josm/gui/MapStatus.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui;
 
 import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
@@ -53,13 +53,13 @@ import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
 import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.data.SystemOfMeasurement;
+import org.openstreetmap.josm.data.SystemOfMeasurement.SoMChangeListener;
 import org.openstreetmap.josm.data.coor.CoordinateFormat;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.preferences.ColorProperty;
-import org.openstreetmap.josm.gui.NavigatableComponent.SoMChangeListener;
 import org.openstreetmap.josm.gui.help.Helpful;
 import org.openstreetmap.josm.gui.preferences.projection.ProjectionPreference;
 import org.openstreetmap.josm.gui.progress.PleaseWaitProgressMonitor;
@@ -217,7 +217,7 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
 
         @Override
         public boolean equals(Object obj) {
-            return obj instanceof StatusTextHistory && ((StatusTextHistory)obj).id == id;
+            return obj instanceof StatusTextHistory && ((StatusTextHistory) obj).id == id;
         }
 
         @Override
@@ -227,12 +227,109 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
     }
 
     /**
-     * The collector class that waits for notification and then update
-     * the display objects.
+     * The collector class that waits for notification and then update the display objects.
      *
      * @author imi
      */
     private final class Collector implements Runnable {
+        private final class CollectorWorker implements Runnable {
+            private final MouseState ms;
+
+            private CollectorWorker(MouseState ms) {
+                this.ms = ms;
+            }
+
+            @Override
+            public void run() {
+                // Freeze display when holding down CTRL
+                if ((ms.modifiers & MouseEvent.CTRL_DOWN_MASK) != 0) {
+                    // update the information popup's labels though, because the selection might have changed from the outside
+                    popupUpdateLabels();
+                    return;
+                }
+
+                // This try/catch is a hack to stop the flooding bug reports about this.
+                // The exception needed to handle with in the first place, means that this
+                // access to the data need to be restarted, if the main thread modifies the data.
+                DataSet ds = null;
+                // The popup != null check is required because a left-click produces several events as well,
+                // which would make this variable true. Of course we only want the popup to show
+                // if the middle mouse button has been pressed in the first place
+                boolean mouseNotMoved = oldMousePos != null
+                        && oldMousePos.equals(ms.mousePos);
+                boolean isAtOldPosition = mouseNotMoved && popup != null;
+                boolean middleMouseDown = (ms.modifiers & MouseEvent.BUTTON2_DOWN_MASK) != 0;
+                try {
+                    ds = mv.getCurrentDataSet();
+                    if (ds != null) {
+                        // This is not perfect, if current dataset was changed during execution, the lock would be useless
+                        if (isAtOldPosition && middleMouseDown) {
+                            // Write lock is necessary when selecting in popupCycleSelection
+                            // locks can not be upgraded -> if do read lock here and write lock later
+                            // (in OsmPrimitive.updateFlags) then always occurs deadlock (#5814)
+                            ds.beginUpdate();
+                        } else {
+                            ds.getReadLock().lock();
+                        }
+                    }
+
+                    // Set the text label in the bottom status bar
+                    // "if mouse moved only" was added to stop heap growing
+                    if (!mouseNotMoved) {
+                        statusBarElementUpdate(ms);
+                    }
+
+                    // Popup Information
+                    // display them if the middle mouse button is pressed and keep them until the mouse is moved
+                    if (middleMouseDown || isAtOldPosition) {
+                        Collection<OsmPrimitive> osms = mv.getAllNearest(ms.mousePos, OsmPrimitive.isUsablePredicate);
+
+                        final JPanel c = new JPanel(new GridBagLayout());
+                        final JLabel lbl = new JLabel(
+                                "<html>"+tr("Middle click again to cycle through.<br>"+
+                                        "Hold CTRL to select directly from this list with the mouse.<hr>")+"</html>",
+                                        null,
+                                        JLabel.HORIZONTAL
+                                );
+                        lbl.setHorizontalAlignment(JLabel.LEFT);
+                        c.add(lbl, GBC.eol().insets(2, 0, 2, 0));
+
+                        // Only cycle if the mouse has not been moved and the middle mouse button has been pressed at least
+                        // twice (the reason for this is the popup != null check for isAtOldPosition, see above.
+                        // This is a nice side effect though, because it does not change selection of the first middle click)
+                        if (isAtOldPosition && middleMouseDown) {
+                            // Hand down mouse modifiers so the SHIFT mod can be handled correctly (see function)
+                            popupCycleSelection(osms, ms.modifiers);
+                        }
+
+                        // These labels may need to be updated from the outside so collect them
+                        List<JLabel> lbls = new ArrayList<>(osms.size());
+                        for (final OsmPrimitive osm : osms) {
+                            JLabel l = popupBuildPrimitiveLabels(osm);
+                            lbls.add(l);
+                            c.add(l, GBC.eol().fill(GBC.HORIZONTAL).insets(2, 0, 2, 2));
+                        }
+
+                        popupShowPopup(popupCreatePopup(c, ms), lbls);
+                    } else {
+                        popupHidePopup();
+                    }
+
+                    oldMousePos = ms.mousePos;
+                } catch (ConcurrentModificationException x) {
+                    Main.warn(x);
+                } finally {
+                    if (ds != null) {
+                        if (isAtOldPosition && middleMouseDown) {
+                            ds.endUpdate();
+                        } else {
+                            ds.getReadLock().unlock();
+                        }
+                    }
+                }
+            }
+        }
+
         /**
          * the mouse position of the previous iteration. This is used to show
          * the popup until the cursor is moved.
@@ -279,112 +376,12 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
                         return; // exit, if new parent.
 
                     // Do nothing, if required data is missing
-                    if(ms.mousePos == null || mv.center == null) {
+                    if (ms.mousePos == null || mv.center == null) {
                         continue;
                     }
 
                     try {
-                        EventQueue.invokeAndWait(new Runnable() {
-
-                            @Override
-                            public void run() {
-                                // Freeze display when holding down CTRL
-                                if ((ms.modifiers & MouseEvent.CTRL_DOWN_MASK) != 0) {
-                                    // update the information popup's labels though, because
-                                    // the selection might have changed from the outside
-                                    popupUpdateLabels();
-                                    return;
-                                }
-
-                                // This try/catch is a hack to stop the flooding bug reports about this.
-                                // The exception needed to handle with in the first place, means that this
-                                // access to the data need to be restarted, if the main thread modifies
-                                // the data.
-                                DataSet ds = null;
-                                // The popup != null check is required because a left-click
-                                // produces several events as well, which would make this
-                                // variable true. Of course we only want the popup to show
-                                // if the middle mouse button has been pressed in the first place
-                                boolean mouseNotMoved = oldMousePos != null
-                                        && oldMousePos.equals(ms.mousePos);
-                                boolean isAtOldPosition = mouseNotMoved && popup != null;
-                                boolean middleMouseDown = (ms.modifiers & MouseEvent.BUTTON2_DOWN_MASK) != 0;
-                                try {
-                                    ds = mv.getCurrentDataSet();
-                                    if (ds != null) {
-                                        // This is not perfect, if current dataset was changed during execution, the lock would be useless
-                                        if(isAtOldPosition && middleMouseDown) {
-                                            // Write lock is necessary when selecting in popupCycleSelection
-                                            // locks can not be upgraded -> if do read lock here and write lock later (in OsmPrimitive.updateFlags)
-                                            // then always occurs deadlock (#5814)
-                                            ds.beginUpdate();
-                                        } else {
-                                            ds.getReadLock().lock();
-                                        }
-                                    }
-
-                                    // Set the text label in the bottom status bar
-                                    // "if mouse moved only" was added to stop heap growing
-                                    if (!mouseNotMoved) {
-                                        statusBarElementUpdate(ms);
-                                    }
-
-                                    // Popup Information
-                                    // display them if the middle mouse button is pressed and
-                                    // keep them until the mouse is moved
-                                    if (middleMouseDown || isAtOldPosition) {
-                                        Collection<OsmPrimitive> osms = mv.getAllNearest(ms.mousePos, OsmPrimitive.isUsablePredicate);
-
-                                        final JPanel c = new JPanel(new GridBagLayout());
-                                        final JLabel lbl = new JLabel(
-                                                "<html>"+tr("Middle click again to cycle through.<br>"+
-                                                        "Hold CTRL to select directly from this list with the mouse.<hr>")+"</html>",
-                                                        null,
-                                                        JLabel.HORIZONTAL
-                                                );
-                                        lbl.setHorizontalAlignment(JLabel.LEFT);
-                                        c.add(lbl, GBC.eol().insets(2, 0, 2, 0));
-
-                                        // Only cycle if the mouse has not been moved and the
-                                        // middle mouse button has been pressed at least twice
-                                        // (the reason for this is the popup != null check for
-                                        // isAtOldPosition, see above. This is a nice side
-                                        // effect though, because it does not change selection
-                                        // of the first middle click)
-                                        if(isAtOldPosition && middleMouseDown) {
-                                            // Hand down mouse modifiers so the SHIFT mod can be
-                                            // handled correctly (see funcion)
-                                            popupCycleSelection(osms, ms.modifiers);
-                                        }
-
-                                        // These labels may need to be updated from the outside
-                                        // so collect them
-                                        List<JLabel> lbls = new ArrayList<>(osms.size());
-                                        for (final OsmPrimitive osm : osms) {
-                                            JLabel l = popupBuildPrimitiveLabels(osm);
-                                            lbls.add(l);
-                                            c.add(l, GBC.eol().fill(GBC.HORIZONTAL).insets(2, 0, 2, 2));
-                                        }
-
-                                        popupShowPopup(popupCreatePopup(c, ms), lbls);
-                                    } else {
-                                        popupHidePopup();
-                                    }
-
-                                    oldMousePos = ms.mousePos;
-                                } catch (ConcurrentModificationException x) {
-                                    Main.warn(x);
-                                } finally {
-                                    if (ds != null) {
-                                        if(isAtOldPosition && middleMouseDown) {
-                                            ds.endUpdate();
-                                        } else {
-                                            ds.getReadLock().unlock();
-                                        }
-                                    }
-                                }
-                            }
-                        });
+                        EventQueue.invokeAndWait(new CollectorWorker(ms));
                     } catch (InterruptedException e) {
                         // Occurs frequently during JOSM shutdown, log set to trace only
                         Main.trace("InterruptedException in "+MapStatus.class.getSimpleName());
@@ -401,8 +398,8 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
          * Creates a popup for the given content next to the cursor. Tries to
          * keep the popup on screen and shows a vertical scrollbar, if the
          * screen is too small.
-         * @param content
-         * @param ms
+         * @param content popup content
+         * @param ms mouse state
          * @return popup
          */
         private Popup popupCreatePopup(Component content, MouseState ms) {
@@ -421,13 +418,13 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
             int xPos = p.x + ms.mousePos.x + 16;
             // Display the popup to the left of the cursor if it would be cut
             // off on its right, but only if more space is available
-            if(xPos + w > scrn.width && xPos > scrn.width/2) {
+            if (xPos + w > scrn.width && xPos > scrn.width/2) {
                 xPos = p.x + ms.mousePos.x - 4 - w;
             }
             int yPos = p.y + ms.mousePos.y + 16;
             // Move the popup up if it would be cut off at its bottom but do not
             // move it off screen on the top
-            if(yPos + h > scrn.height - 5) {
+            if (yPos + h > scrn.height - 5) {
                 yPos = Math.max(5, scrn.height - h - 5);
             }
 
@@ -437,7 +434,7 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
 
         /**
          * Calls this to update the element that is shown in the statusbar
-         * @param ms
+         * @param ms mouse state
          */
         private void statusBarElementUpdate(MouseState ms) {
             final OsmPrimitive osmNearest = mv.getNearestNodeOrWay(ms.mousePos, OsmPrimitive.isUsablePredicate, false);
@@ -461,13 +458,13 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
             OsmPrimitive firstSelected = null;
             OsmPrimitive nextSelected = null;
             for (final OsmPrimitive osm : osms) {
-                if(firstItem == null) {
+                if (firstItem == null) {
                     firstItem = osm;
                 }
-                if(firstSelected != null && nextSelected == null) {
+                if (firstSelected != null && nextSelected == null) {
                     nextSelected = osm;
                 }
-                if(firstSelected == null && ds.isSelected(osm)) {
+                if (firstSelected == null && ds.isSelected(osm)) {
                     firstSelected = osm;
                 }
             }
@@ -475,14 +472,14 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
             // Clear previous selection if SHIFT (add to selection) is not
             // pressed. Cannot use "setSelected()" because it will cause a
             // fireSelectionChanged event which is unnecessary at this point.
-            if((mods & MouseEvent.SHIFT_DOWN_MASK) == 0) {
+            if ((mods & MouseEvent.SHIFT_DOWN_MASK) == 0) {
                 ds.clearSelection();
             }
 
             // This will cycle through the available items.
             if (firstSelected != null) {
                 ds.clearSelection(firstSelected);
-                if(nextSelected != null) {
+                if (nextSelected != null) {
                     ds.addSelected(nextSelected);
                 }
             } else if (firstItem != null) {
@@ -495,11 +492,11 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
          */
         private void popupHidePopup() {
             popupLabels = null;
-            if(popup == null)
+            if (popup == null)
                 return;
             final Popup staticPopup = popup;
             popup = null;
-            EventQueue.invokeLater(new Runnable(){
+            EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                     staticPopup.hide();
@@ -514,20 +511,23 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
          */
         private void popupShowPopup(Popup newPopup, List<JLabel> lbls) {
             final Popup staticPopup = newPopup;
-            if(this.popup != null) {
-                // If an old popup exists, remove it when the new popup has been
-                // drawn to keep flickering to a minimum
+            if (this.popup != null) {
+                // If an old popup exists, remove it when the new popup has been drawn to keep flickering to a minimum
                 final Popup staticOldPopup = this.popup;
-                EventQueue.invokeLater(new Runnable(){
-                    @Override public void run() {
+                EventQueue.invokeLater(new Runnable() {
+                    @Override
+                    public void run() {
                         staticPopup.show();
                         staticOldPopup.hide();
                     }
                 });
             } else {
                 // There is no old popup
-                EventQueue.invokeLater(new Runnable(){
-                     @Override public void run() { staticPopup.show(); }});
+                EventQueue.invokeLater(new Runnable() {
+                     @Override
+                     public void run() {
+                         staticPopup.show();
+                     }});
             }
             this.popupLabels = lbls;
             this.popup = newPopup;
@@ -539,9 +539,9 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
          * user clicks on the map instead of the popup.
          */
         private void popupUpdateLabels() {
-            if(this.popup == null || this.popupLabels == null)
+            if (this.popup == null || this.popupLabels == null)
                 return;
-            for(JLabel l : this.popupLabels) {
+            for (JLabel l : this.popupLabels) {
                 l.validate();
             }
         }
@@ -555,7 +555,7 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
          */
         private void popupSetLabelColors(JLabel lbl, OsmPrimitive osm) {
             DataSet ds = Main.main.getCurrentDataSet();
-            if(ds.isSelected(osm)) {
+            if (ds.isSelected(osm)) {
                 lbl.setBackground(SystemColor.textHighlight);
                 lbl.setForeground(SystemColor.textHighlightText);
             } else {
@@ -571,7 +571,7 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
          * @return labels for info popup
          */
         private JLabel popupBuildPrimitiveLabels(final OsmPrimitive osm) {
-            final StringBuilder text = new StringBuilder();
+            final StringBuilder text = new StringBuilder(32);
             String name = osm.getDisplayName(DefaultNameFormatter.getInstance());
             if (osm.isNewOrUndeleted() || osm.isModified()) {
                 name = "<i><b>"+ name + "*</b></i>";
@@ -582,25 +582,26 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
             // fix #7557 - do not show ID twice
 
             if (!osm.isNew() && !idShown) {
-                text.append(" [id="+osm.getId()+"]");
+                text.append(" [id=").append(osm.getId()).append(']');
             }
 
-            if(osm.getUser() != null) {
-                text.append(" [" + tr("User:") + " " + osm.getUser().getName() + "]");
+            if (osm.getUser() != null) {
+                text.append(" [").append(tr("User:")).append(' ').append(osm.getUser().getName()).append(']');
             }
 
             for (String key : osm.keySet()) {
-                text.append("<br>" + key + "=" + osm.get(key));
+                text.append("<br>").append(key).append('=').append(osm.get(key));
             }
 
             final JLabel l = new JLabel(
-                    "<html>" +text.toString() + "</html>",
+                    "<html>" + text.toString() + "</html>",
                     ImageProvider.get(osm.getDisplayType()),
                     JLabel.HORIZONTAL
                     ) {
                 // This is necessary so the label updates its colors when the
                 // selection is changed from the outside
-                @Override public void validate() {
+                @Override
+                public void validate() {
                     super.validate();
                     popupSetLabelColors(this, osm);
                 }
@@ -611,15 +612,20 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
             l.setVerticalTextPosition(JLabel.TOP);
             l.setHorizontalAlignment(JLabel.LEFT);
             l.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
-            l.addMouseListener(new MouseAdapter(){
-                @Override public void mouseEntered(MouseEvent e) {
+            l.addMouseListener(new MouseAdapter() {
+                @Override
+                public void mouseEntered(MouseEvent e) {
                     l.setBackground(SystemColor.info);
                     l.setForeground(SystemColor.infoText);
                 }
-                @Override public void mouseExited(MouseEvent e) {
+
+                @Override
+                public void mouseExited(MouseEvent e) {
                     popupSetLabelColors(l, osm);
                 }
-                @Override public void mouseClicked(MouseEvent e) {
+
+                @Override
+                public void mouseClicked(MouseEvent e) {
                     DataSet ds = Main.main.getCurrentDataSet();
                     // Let the user toggle the selection
                     ds.toggleSelected(osm);
@@ -627,17 +633,19 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
                 }
             });
             // Sometimes the mouseEntered event is not catched, thus the label
-            // will not be highlighted, making it confusing. The MotionListener
-            // can correct this defect.
+            // will not be highlighted, making it confusing. The MotionListener can correct this defect.
             l.addMouseMotionListener(new MouseMotionListener() {
-                 @Override public void mouseMoved(MouseEvent e) {
+                 @Override
+                 public void mouseMoved(MouseEvent e) {
                     l.setBackground(SystemColor.info);
                     l.setForeground(SystemColor.infoText);
-                }
-                 @Override public void mouseDragged(MouseEvent e) {
+                 }
+
+                 @Override
+                 public void mouseDragged(MouseEvent e) {
                     l.setBackground(SystemColor.info);
                     l.setForeground(SystemColor.infoText);
-                }
+                 }
             });
             return l;
         }
@@ -660,11 +668,11 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
          @Override
          public void eventDispatched(AWTEvent event) {
             if (event instanceof InputEvent &&
-                    ((InputEvent)event).getComponent() == mv) {
+                    ((InputEvent) event).getComponent() == mv) {
                 synchronized (collector) {
-                    mouseState.modifiers = ((InputEvent)event).getModifiersEx();
+                    mouseState.modifiers = ((InputEvent) event).getModifiersEx();
                     if (event instanceof MouseEvent) {
-                        mouseState.mousePos = ((MouseEvent)event).getPoint();
+                        mouseState.mousePos = ((MouseEvent) event).getPoint();
                     }
                     collector.notifyAll();
                 }
@@ -718,6 +726,9 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
             Toolkit.getDefaultToolkit().removeAWTEventListener(awtListener);
         } catch (SecurityException e) {
             // Don't care, awtListener probably wasn't registered anyway
+            if (Main.isTraceEnabled()) {
+                Main.trace(e.getMessage());
+            }
         }
         mv.removeMouseMotionListener(mouseMotionListener);
         mv.removeKeyListener(keyAdapter);
@@ -727,7 +738,7 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
 
         private final JMenuItem jumpButton = add(Main.main.menu.jumpToAct);
 
-        private final transient Collection<JCheckBoxMenuItem> somItems = new ArrayList<>();
+        private final Collection<JCheckBoxMenuItem> somItems = new ArrayList<>();
 
         private final JSeparator separator = new JSeparator();
 
@@ -757,7 +768,7 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
             addPopupMenuListener(new PopupMenuListener() {
                 @Override
                 public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
-                    Component invoker = ((JPopupMenu)e.getSource()).getInvoker();
+                    Component invoker = ((JPopupMenu) e.getSource()).getInvoker();
                     jumpButton.setVisible(latText.equals(invoker) || lonText.equals(invoker));
                     String currentSOM = ProjectionPreference.PROP_SYSTEM_OF_MEASUREMENT.get();
                     for (JMenuItem item : somItems) {
@@ -767,10 +778,12 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
                     separator.setVisible(distText.equals(invoker));
                     doNotHide.setSelected(Main.pref.getBoolean("statusbar.always-visible", true));
                 }
+
                 @Override
                 public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
                     // Do nothing
                 }
+
                 @Override
                 public void popupMenuCanceled(PopupMenuEvent e) {
                     // Do nothing
@@ -801,11 +814,12 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
         };
 
         // Listen for mouse movements and set the position text field
-        mv.addMouseMotionListener(new MouseMotionListener(){
+        mv.addMouseMotionListener(new MouseMotionListener() {
             @Override
             public void mouseDragged(MouseEvent e) {
                 mouseMoved(e);
             }
+
             @Override
             public void mouseMoved(MouseEvent e) {
                 if (mv.center == null)
@@ -813,7 +827,7 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
                 // Do not update the view if ctrl is pressed.
                 if ((e.getModifiersEx() & MouseEvent.CTRL_DOWN_MASK) == 0) {
                     CoordinateFormat mCord = CoordinateFormat.getDefaultFormat();
-                    LatLon p = mv.getLatLon(e.getX(),e.getY());
+                    LatLon p = mv.getLatLon(e.getX(), e.getY());
                     latText.setText(p.latToString(mCord));
                     lonText.setText(p.lonToString(mCord));
                 }
@@ -821,7 +835,7 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
         });
 
         setLayout(new GridBagLayout());
-        setBorder(BorderFactory.createEmptyBorder(1,2,1,2));
+        setBorder(BorderFactory.createEmptyBorder(1, 2, 1, 2));
 
         latText.setInheritsPopupMenu(true);
         lonText.setInheritsPopupMenu(true);
@@ -830,10 +844,10 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
         nameText.setInheritsPopupMenu(true);
 
         add(latText, GBC.std());
-        add(lonText, GBC.std().insets(3,0,0,0));
-        add(headingText, GBC.std().insets(3,0,0,0));
-        add(angleText, GBC.std().insets(3,0,0,0));
-        add(distText, GBC.std().insets(3,0,0,0));
+        add(lonText, GBC.std().insets(3, 0, 0, 0));
+        add(headingText, GBC.std().insets(3, 0, 0, 0));
+        add(angleText, GBC.std().insets(3, 0, 0, 0));
+        add(distText, GBC.std().insets(3, 0, 0, 0));
 
         if (Main.pref.getBoolean("statusbar.change-system-of-measurement-on-click", true)) {
             distText.addMouseListener(new MouseAdapter() {
@@ -843,14 +857,14 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
                 public void mouseClicked(MouseEvent e) {
                     if (!e.isPopupTrigger() && e.getButton() == MouseEvent.BUTTON1) {
                         String som = ProjectionPreference.PROP_SYSTEM_OF_MEASUREMENT.get();
-                        String newsom = soms.get((soms.indexOf(som)+1)%soms.size());
+                        String newsom = soms.get((soms.indexOf(som)+1) % soms.size());
                         updateSystemOfMeasurement(newsom);
                     }
                 }
             });
         }
 
-        NavigatableComponent.addSoMChangeListener(somListener = new SoMChangeListener() {
+        SystemOfMeasurement.addSoMChangeListener(somListener = new SoMChangeListener() {
             @Override
             public void systemOfMeasurementChanged(String oldSoM, String newSoM) {
                 setDist(distValue);
@@ -861,14 +875,14 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
         lonText.addMouseListener(jumpToOnLeftClick);
 
         helpText.setEditable(false);
-        add(nameText, GBC.std().insets(3,0,0,0));
-        add(helpText, GBC.std().insets(3,0,0,0).fill(GBC.HORIZONTAL));
+        add(nameText, GBC.std().insets(3, 0, 0, 0));
+        add(helpText, GBC.std().insets(3, 0, 0, 0).fill(GBC.HORIZONTAL));
 
         progressBar.setMaximum(PleaseWaitProgressMonitor.PROGRESS_BAR_MAX);
         progressBar.setVisible(false);
         GBC gbc = GBC.eol();
         gbc.ipadx = 100;
-        add(progressBar,gbc);
+        add(progressBar, gbc);
         progressBar.addMouseListener(new MouseAdapter() {
             @Override
             public void mouseClicked(MouseEvent e) {
@@ -893,7 +907,7 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
      * @since 6960
      */
     public void updateSystemOfMeasurement(String newsom) {
-        NavigatableComponent.setSystemOfMeasurement(newsom);
+        SystemOfMeasurement.setSystemOfMeasurement(newsom);
         if (Main.pref.getBoolean("statusbar.notify.change-system-of-measurement", true)) {
             new Notification(tr("System of measurement changed to {0}", newsom))
                 .setDuration(Notification.TIME_SHORT)
@@ -1005,7 +1019,7 @@ public class MapStatus extends JPanel implements Helpful, Destroyable, Preferenc
 
     @Override
     public void destroy() {
-        NavigatableComponent.removeSoMChangeListener(somListener);
+        SystemOfMeasurement.removeSoMChangeListener(somListener);
         Main.pref.removePreferenceChangeListener(this);
 
         // MapFrame gets destroyed when the last layer is removed, but the status line background
diff --git a/src/org/openstreetmap/josm/gui/MapView.java b/src/org/openstreetmap/josm/gui/MapView.java
index 280d2d0..eff7bb6 100644
--- a/src/org/openstreetmap/josm/gui/MapView.java
+++ b/src/org/openstreetmap/josm/gui/MapView.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -22,16 +22,20 @@ import java.awt.image.BufferedImage;
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.Comparator;
-import java.util.LinkedList;
+import java.util.EnumSet;
+import java.util.LinkedHashSet;
 import java.util.List;
+import java.util.ListIterator;
+import java.util.Set;
 import java.util.concurrent.CopyOnWriteArrayList;
 
 import javax.swing.AbstractButton;
 import javax.swing.ActionMap;
 import javax.swing.InputMap;
+import javax.swing.JComponent;
 import javax.swing.JFrame;
 import javax.swing.JPanel;
 
@@ -48,6 +52,7 @@ import org.openstreetmap.josm.data.imagery.ImageryInfo;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.visitor.paint.PaintColors;
+import org.openstreetmap.josm.data.osm.visitor.paint.Rendering;
 import org.openstreetmap.josm.data.osm.visitor.paint.relations.MultipolygonCache;
 import org.openstreetmap.josm.gui.layer.GpxLayer;
 import org.openstreetmap.josm.gui.layer.ImageryLayer;
@@ -75,7 +80,8 @@ import org.openstreetmap.josm.tools.Utils;
  *
  * @author imi
  */
-public class MapView extends NavigatableComponent implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.LayerStateChangeListener {
+public class MapView extends NavigatableComponent
+implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.LayerStateChangeListener {
 
     /**
      * Interface to notify listeners of a layer change.
@@ -103,7 +109,16 @@ public class MapView extends NavigatableComponent implements PropertyChangeListe
         void layerRemoved(Layer oldLayer);
     }
 
+    /**
+     * An interface that needs to be implemented in order to listen for changes to the active edit layer.
+     */
     public interface EditLayerChangeListener {
+
+        /**
+         * Called after the active edit layer was changed.
+         * @param oldLayer The old edit layer
+         * @param newLayer The current (new) edit layer
+         */
         void editLayerChanged(OsmDataLayer oldLayer, OsmDataLayer newLayer);
     }
 
@@ -178,44 +193,62 @@ public class MapView extends NavigatableComponent implements PropertyChangeListe
         }
     }
 
-    protected static void fireActiveLayerChanged(Layer oldLayer, Layer newLayer) {
+    /**
+     * Calls the {@link LayerChangeListener#activeLayerChange(Layer, Layer)} method of all listeners.
+     *
+     * @param oldLayer The old layer
+     * @param newLayer The new active layer.
+     */
+    protected void fireActiveLayerChanged(Layer oldLayer, Layer newLayer) {
         for (LayerChangeListener l : layerChangeListeners) {
             l.activeLayerChange(oldLayer, newLayer);
         }
     }
 
-    protected static void fireLayerAdded(Layer newLayer) {
+    protected void fireLayerAdded(Layer newLayer) {
         for (MapView.LayerChangeListener l : MapView.layerChangeListeners) {
             l.layerAdded(newLayer);
         }
     }
 
-    protected static void fireLayerRemoved(Layer layer) {
+    protected void fireLayerRemoved(Layer layer) {
         for (MapView.LayerChangeListener l : MapView.layerChangeListeners) {
             l.layerRemoved(layer);
         }
     }
 
-    protected static void fireEditLayerChanged(OsmDataLayer oldLayer, OsmDataLayer newLayer) {
+    protected void fireEditLayerChanged(OsmDataLayer oldLayer, OsmDataLayer newLayer) {
         for (EditLayerChangeListener l : editLayerChangeListeners) {
             l.editLayerChanged(oldLayer, newLayer);
         }
     }
 
     /**
-     * A list of all layers currently loaded.
+     * A list of all layers currently loaded. Locked by {@link #layerLock}.
      */
     private final transient List<Layer> layers = new ArrayList<>();
+
+    /**
+     * This lock manages concurrent access to {@link #layers},
+     * {@link #editLayer} and {@link #activeLayer}.
+     * <p>
+     * The read lock is always held while those fields are read or while layer change listeners are fired.
+     */
+    //private final ReentrantReadWriteLock layerLock = new ReentrantReadWriteLock();
+
     /**
      * The play head marker: there is only one of these so it isn't in any specific layer
      */
     public transient PlayHeadMarker playHeadMarker = null;
 
     /**
-     * The layer from the layers list that is currently active.
+     * The layer from the layers list that is currently active. Locked by {@link #layerLock}.
      */
     private transient Layer activeLayer;
 
+    /**
+     * The edit layer is the current active data layer. Locked by {@link #layerLock}.
+     */
     private transient OsmDataLayer editLayer;
 
     /**
@@ -223,7 +256,12 @@ public class MapView extends NavigatableComponent implements PropertyChangeListe
      */
     public MouseEvent lastMEvent = new MouseEvent(this, 0, 0, 0, 0, 0, 0, false); // In case somebody reads it before first mouse move
 
-    private final transient List<MapViewPaintable> temporaryLayers = new LinkedList<>();
+    /**
+     * Temporary layers (selection rectangle, etc.) that are never cached and
+     * drawn on top of regular layers.
+     * Access must be synchronized.
+     */
+    private final transient Set<MapViewPaintable> temporaryLayers = new LinkedHashSet<>();
 
     private transient BufferedImage nonChangedLayersBuffer;
     private transient BufferedImage offscreenBuffer;
@@ -245,20 +283,14 @@ public class MapView extends NavigatableComponent implements PropertyChangeListe
     public MapView(final JPanel contentPane, final ViewportData viewportData) {
         initialViewport = viewportData;
         Main.pref.addPreferenceChangeListener(this);
-        final boolean unregisterTab = Shortcut.findShortcut(KeyEvent.VK_TAB, 0)!=null;
 
-        addComponentListener(new ComponentAdapter(){
+        addComponentListener(new ComponentAdapter() {
             @Override public void componentResized(ComponentEvent e) {
                 removeComponentListener(this);
 
-                MapSlider zoomSlider = new MapSlider(MapView.this);
-                add(zoomSlider);
-                zoomSlider.setBounds(3, 0, 114, 30);
-                zoomSlider.setFocusTraversalKeysEnabled(!unregisterTab);
-
-                MapScaler scaler = new MapScaler(MapView.this);
-                add(scaler);
-                scaler.setLocation(10,30);
+                for (JComponent c : getMapNavigationComponents(MapView.this)) {
+                    MapView.this.add(c);
+                }
 
                 mapMover = new MapMover(MapView.this, contentPane);
             }
@@ -269,10 +301,13 @@ public class MapView extends NavigatableComponent implements PropertyChangeListe
 
         //store the last mouse action
         this.addMouseMotionListener(new MouseMotionListener() {
-            @Override public void mouseDragged(MouseEvent e) {
+            @Override
+            public void mouseDragged(MouseEvent e) {
                 mouseMoved(e);
             }
-            @Override public void mouseMoved(MouseEvent e) {
+
+            @Override
+            public void mouseMoved(MouseEvent e) {
                 lastMEvent = e;
             }
         });
@@ -284,16 +319,32 @@ public class MapView extends NavigatableComponent implements PropertyChangeListe
             }
         });
 
-        if (Shortcut.findShortcut(KeyEvent.VK_TAB, 0)!=null) {
+        if (Shortcut.findShortcut(KeyEvent.VK_TAB, 0) != null) {
             setFocusTraversalKeysEnabled(false);
         }
     }
 
+    /**
+     * Adds the map navigation components to a
+     * @param forMapView The map view to get the components for.
+     * @return A list containing the correctly positioned map navigation components.
+     */
+    public static List<? extends JComponent> getMapNavigationComponents(MapView forMapView) {
+        MapSlider zoomSlider = new MapSlider(forMapView);
+        zoomSlider.setBounds(3, 0, 114, 30);
+        zoomSlider.setFocusTraversalKeysEnabled(Shortcut.findShortcut(KeyEvent.VK_TAB, 0) == null);
+
+        MapScaler scaler = new MapScaler(forMapView);
+        scaler.setLocation(10, 30);
+
+        return Arrays.asList(zoomSlider, scaler);
+    }
+
     // remebered geometry of the component
     private Dimension oldSize = null;
     private Point oldLoc = null;
 
-    /*
+    /**
      * Call this method to keep map position on screen during next repaint
      */
     public void rememberLastPositionOnScreen() {
@@ -303,25 +354,29 @@ public class MapView extends NavigatableComponent implements PropertyChangeListe
 
     /**
      * Adds a GPX layer. A GPX layer is added below the lowest data layer.
+     * <p>
+     * Does not call {@link #fireLayerAdded(Layer)}.
      *
      * @param layer the GPX layer
      */
     protected void addGpxLayer(GpxLayer layer) {
-        if (layers.isEmpty()) {
-            layers.add(layer);
-            return;
-        }
-        for (int i=layers.size()-1; i>= 0; i--) {
-            if (layers.get(i) instanceof OsmDataLayer) {
-                if (i == layers.size()-1) {
-                    layers.add(layer);
-                } else {
-                    layers.add(i+1, layer);
-                }
+        synchronized (layers) {
+            if (layers.isEmpty()) {
+                layers.add(layer);
                 return;
             }
+            for (int i = layers.size()-1; i >= 0; i--) {
+                if (layers.get(i) instanceof OsmDataLayer) {
+                    if (i == layers.size()-1) {
+                        layers.add(layer);
+                    } else {
+                        layers.add(i+1, layer);
+                    }
+                    return;
+                }
+            }
+            layers.add(0, layer);
         }
-        layers.add(0, layer);
     }
 
     /**
@@ -330,67 +385,83 @@ public class MapView extends NavigatableComponent implements PropertyChangeListe
      * @param layer The layer to add
      */
     public void addLayer(Layer layer) {
-        if (layer instanceof MarkerLayer && playHeadMarker == null) {
-            playHeadMarker = PlayHeadMarker.create();
-        }
-
-        if (layer instanceof GpxLayer) {
-            addGpxLayer((GpxLayer)layer);
-        } else if (layers.isEmpty()) {
-            layers.add(layer);
-        } else if (layer.isBackgroundLayer()) {
-            int i = 0;
-            for (; i < layers.size(); i++) {
-                if (layers.get(i).isBackgroundLayer()) {
-                    break;
+        boolean isOsmDataLayer = layer instanceof OsmDataLayer;
+        EnumSet<LayerListenerType> listenersToFire = EnumSet.noneOf(LayerListenerType.class);
+        Layer oldActiveLayer = activeLayer;
+        OsmDataLayer oldEditLayer = editLayer;
+
+        synchronized (layers) {
+            if (layer instanceof MarkerLayer && playHeadMarker == null) {
+                playHeadMarker = PlayHeadMarker.create();
+            }
+
+            if (layer instanceof GpxLayer) {
+                addGpxLayer((GpxLayer) layer);
+            } else if (layers.isEmpty()) {
+                layers.add(layer);
+            } else if (layer.isBackgroundLayer()) {
+                int i = 0;
+                for (; i < layers.size(); i++) {
+                    if (layers.get(i).isBackgroundLayer()) {
+                        break;
+                    }
                 }
+                layers.add(i, layer);
+            } else {
+                layers.add(0, layer);
             }
-            layers.add(i, layer);
-        } else {
-            layers.add(0, layer);
+
+            if (isOsmDataLayer || oldActiveLayer == null) {
+                // autoselect the new layer
+                listenersToFire.addAll(setActiveLayer(layer, true));
+            }
+
+            if (isOsmDataLayer) {
+                ((OsmDataLayer) layer).addLayerStateChangeListener(this);
+            }
+
+            layer.addPropertyChangeListener(this);
+            Main.addProjectionChangeListener(layer);
+            AudioPlayer.reset();
         }
         fireLayerAdded(layer);
-        boolean isOsmDataLayer = layer instanceof OsmDataLayer;
-        if (isOsmDataLayer) {
-            ((OsmDataLayer)layer).addLayerStateChangeListener(this);
-        }
-        boolean callSetActiveLayer = isOsmDataLayer || activeLayer == null;
-        if (callSetActiveLayer) {
-            // autoselect the new layer
-            setActiveLayer(layer); // also repaints this MapView
-        }
-        layer.addPropertyChangeListener(this);
-        Main.addProjectionChangeListener(layer);
-        AudioPlayer.reset();
-        if (!callSetActiveLayer) {
+        onActiveEditLayerChanged(oldActiveLayer, oldEditLayer, listenersToFire);
+
+        if (!listenersToFire.isEmpty()) {
             repaint();
         }
     }
 
     @Override
     protected DataSet getCurrentDataSet() {
-        if (editLayer != null)
-            return editLayer.data;
-        else
-            return null;
+        synchronized (layers) {
+            if (editLayer != null)
+                return editLayer.data;
+            else
+                return null;
+        }
     }
 
     /**
-     * Replies true if the active layer is drawable.
+     * Replies true if the active data layer (edit layer) is drawable.
      *
-     * @return true if the active layer is drawable, false otherwise
+     * @return true if the active data layer (edit layer) is drawable, false otherwise
      */
     public boolean isActiveLayerDrawable() {
-        return editLayer != null;
+        synchronized (layers) {
+            return editLayer != null;
+        }
     }
 
     /**
-     * Replies true if the active layer is visible.
+     * Replies true if the active data layer (edit layer) is visible.
      *
-     * @return true if the active layer is visible, false otherwise
+     * @return true if the active data layer (edit layer) is visible, false otherwise
      */
     public boolean isActiveLayerVisible() {
-        return isActiveLayerDrawable() && editLayer.isVisible();
+        synchronized (layers) {
+            return isActiveLayerDrawable() && editLayer.isVisible();
+        }
     }
 
     /**
@@ -426,38 +497,57 @@ public class MapView extends NavigatableComponent implements PropertyChangeListe
      * @param layer The layer to remove
      */
     public void removeLayer(Layer layer) {
-        List<Layer> layersList = new ArrayList<>(layers);
+        EnumSet<LayerListenerType> listenersToFire = EnumSet.noneOf(LayerListenerType.class);
+        Layer oldActiveLayer = activeLayer;
+        OsmDataLayer oldEditLayer = editLayer;
 
-        if (!layersList.remove(layer))
-            return;
+        synchronized (layers) {
+            List<Layer> layersList = new ArrayList<>(layers);
 
-        setEditLayer(layersList);
+            if (!layersList.remove(layer))
+                return;
 
-        if (layer == activeLayer) {
-            setActiveLayer(determineNextActiveLayer(layersList), false);
-        }
+            listenersToFire = setEditLayer(layersList);
 
-        if (layer instanceof OsmDataLayer) {
-            ((OsmDataLayer)layer).removeLayerPropertyChangeListener(this);
-        }
+            if (layer == activeLayer) {
+                listenersToFire.addAll(setActiveLayer(determineNextActiveLayer(layersList), false));
+            }
+
+            if (layer instanceof OsmDataLayer) {
+                ((OsmDataLayer) layer).removeLayerPropertyChangeListener(this);
+            }
 
-        layers.remove(layer);
-        Main.removeProjectionChangeListener(layer);
+            layers.remove(layer);
+            Main.removeProjectionChangeListener(layer);
+            layer.removePropertyChangeListener(this);
+            layer.destroy();
+            AudioPlayer.reset();
+        }
+        onActiveEditLayerChanged(oldActiveLayer, oldEditLayer, listenersToFire);
         fireLayerRemoved(layer);
-        layer.removePropertyChangeListener(this);
-        layer.destroy();
-        AudioPlayer.reset();
+
         repaint();
     }
 
+    private void onEditLayerChanged(OsmDataLayer oldEditLayer) {
+        fireEditLayerChanged(oldEditLayer, editLayer);
+        refreshTitle();
+    }
+
     private boolean virtualNodesEnabled = false;
 
     public void setVirtualNodesEnabled(boolean enabled) {
-        if(virtualNodesEnabled != enabled) {
+        if (virtualNodesEnabled != enabled) {
             virtualNodesEnabled = enabled;
             repaint();
         }
     }
+
+    /**
+     * Checks if virtual nodes should be drawn. Default is <code>false</code>
+     * @return The virtual nodes property.
+     * @see Rendering#render(DataSet, boolean, Bounds)
+     */
     public boolean isVirtualNodesEnabled() {
         return virtualNodesEnabled;
     }
@@ -470,24 +560,41 @@ public class MapView extends NavigatableComponent implements PropertyChangeListe
      * @param pos       The new position of the layer
      */
     public void moveLayer(Layer layer, int pos) {
-        int curLayerPos = layers.indexOf(layer);
-        if (curLayerPos == -1)
-            throw new IllegalArgumentException(tr("Layer not in list."));
-        if (pos == curLayerPos)
-            return; // already in place.
-        layers.remove(curLayerPos);
-        if (pos >= layers.size()) {
-            layers.add(layer);
-        } else {
-            layers.add(pos, layer);
+        EnumSet<LayerListenerType> listenersToFire;
+        Layer oldActiveLayer = activeLayer;
+        OsmDataLayer oldEditLayer = editLayer;
+
+        synchronized (layers) {
+            int curLayerPos = layers.indexOf(layer);
+            if (curLayerPos == -1)
+                throw new IllegalArgumentException(tr("Layer not in list."));
+            if (pos == curLayerPos)
+                return; // already in place.
+            layers.remove(curLayerPos);
+            if (pos >= layers.size()) {
+                layers.add(layer);
+            } else {
+                layers.add(pos, layer);
+            }
+            listenersToFire = setEditLayer(layers);
+            AudioPlayer.reset();
         }
-        setEditLayer(layers);
-        AudioPlayer.reset();
+        onActiveEditLayerChanged(oldActiveLayer, oldEditLayer, listenersToFire);
+
         repaint();
     }
 
+    /**
+     * Gets the index of the layer in the layer list.
+     * @param layer The layer to search for.
+     * @return The index in the list.
+     * @throws IllegalArgumentException if that layer does not belong to this view.
+     */
     public int getLayerPos(Layer layer) {
-        int curLayerPos = layers.indexOf(layer);
+        int curLayerPos;
+        synchronized (layers) {
+            curLayerPos = layers.indexOf(layer);
+        }
         if (curLayerPos == -1)
             throw new IllegalArgumentException(tr("Layer not in list."));
         return curLayerPos;
@@ -496,41 +603,44 @@ public class MapView extends NavigatableComponent implements PropertyChangeListe
     /**
      * Creates a list of the visible layers in Z-Order, the layer with the lowest Z-Order
      * first, layer with the highest Z-Order last.
+     * <p>
+     * The active data layer is pulled above all adjacent data layers.
      *
      * @return a list of the visible in Z-Order, the layer with the lowest Z-Order
      * first, layer with the highest Z-Order last.
      */
-    protected List<Layer> getVisibleLayersInZOrder() {
-        List<Layer> ret = new ArrayList<>();
-        for (Layer l: layers) {
-            if (l.isVisible()) {
-                ret.add(l);
-            }
-        }
-        // sort according to position in the list of layers, with one exception:
-        // an active data layer always becomes a higher Z-Order than all other
-        // data layers
-        //
-        Collections.sort(
-                ret,
-                new Comparator<Layer>() {
-                    @Override public int compare(Layer l1, Layer l2) {
-                        if (l1 instanceof OsmDataLayer && l2 instanceof OsmDataLayer) {
-                            if (l1 == getActiveLayer()) return -1;
-                            if (l2 == getActiveLayer()) return 1;
-                            return Integer.valueOf(layers.indexOf(l1)).compareTo(layers.indexOf(l2));
-                        } else
-                            return Integer.valueOf(layers.indexOf(l1)).compareTo(layers.indexOf(l2));
+    public List<Layer> getVisibleLayersInZOrder() {
+        synchronized (layers) {
+            List<Layer> ret = new ArrayList<>();
+            // This is set while we delay the addition of the active layer.
+            boolean activeLayerDelayed = false;
+            for (ListIterator<Layer> iterator = layers.listIterator(layers.size()); iterator.hasPrevious();) {
+                Layer l = iterator.previous();
+                if (!l.isVisible()) {
+                    // ignored
+                } else if (l == activeLayer && l instanceof OsmDataLayer) {
+                    // delay and add after the current block of OsmDataLayer
+                    activeLayerDelayed = true;
+                } else {
+                    if (activeLayerDelayed && !(l instanceof OsmDataLayer)) {
+                        // add active layer before the current one.
+                        ret.add(activeLayer);
+                        activeLayerDelayed = false;
                     }
+                    // Add this layer now
+                    ret.add(l);
                 }
-        );
-        Collections.reverse(ret);
-        return ret;
+            }
+            if (activeLayerDelayed) {
+                ret.add(activeLayer);
+            }
+            return ret;
+        }
     }
 
     private void paintLayer(Layer layer, Graphics2D g, Bounds box) {
         if (layer.getOpacity() < 1) {
-            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,(float)layer.getOpacity()));
+            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, (float) layer.getOpacity()));
         }
         layer.paint(g, this, box);
         g.setPaintMode();
@@ -539,26 +649,10 @@ public class MapView extends NavigatableComponent implements PropertyChangeListe
     /**
      * Draw the component.
      */
-    @Override public void paint(Graphics g) {
-        if (initialViewport != null) {
-            zoomTo(initialViewport);
-            initialViewport = null;
-        }
-        if (BugReportExceptionHandler.exceptionHandlingInProgress())
+    @Override
+    public void paint(Graphics g) {
+        if (!prepareToDraw()) {
             return;
-
-        if (center == null)
-            return; // no data loaded yet.
-
-        // if the position was remembered, we need to adjust center once before repainting
-        if (oldLoc != null && oldSize != null) {
-            Point l1  = getLocationOnScreen();
-            final EastNorth newCenter = new EastNorth(
-                    center.getX()+ (l1.x-oldLoc.x - (oldSize.width-getWidth())/2.0)*getScale(),
-                    center.getY()+ (oldLoc.y-l1.y + (oldSize.height-getHeight())/2.0)*getScale()
-                    );
-            oldLoc = null; oldSize = null;
-            zoomTo(newCenter);
         }
 
         List<Layer> visibleLayers = getVisibleLayersInZOrder();
@@ -581,7 +675,7 @@ public class MapView extends NavigatableComponent implements PropertyChangeListe
         canUseBuffer = canUseBuffer && nonChangedLayers.size() <= nonChangedLayersCount &&
         lastViewID == getViewID() && lastClipBounds.contains(g.getClipBounds());
         if (canUseBuffer) {
-            for (int i=0; i<nonChangedLayers.size(); i++) {
+            for (int i = 0; i < nonChangedLayers.size(); i++) {
                 if (visibleLayers.get(i) != nonChangedLayers.get(i)) {
                     canUseBuffer = false;
                     break;
@@ -598,7 +692,8 @@ public class MapView extends NavigatableComponent implements PropertyChangeListe
         Bounds box = getLatLonBounds(g.getClipBounds());
 
         if (!canUseBuffer || nonChangedLayersBuffer == null) {
-            if (null == nonChangedLayersBuffer || nonChangedLayersBuffer.getWidth() != getWidth() || nonChangedLayersBuffer.getHeight() != getHeight()) {
+            if (null == nonChangedLayersBuffer
+                    || nonChangedLayersBuffer.getWidth() != getWidth() || nonChangedLayersBuffer.getHeight() != getHeight()) {
                 nonChangedLayersBuffer = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_3BYTE_BGR);
             }
             Graphics2D g2 = nonChangedLayersBuffer.createGraphics();
@@ -606,23 +701,23 @@ public class MapView extends NavigatableComponent implements PropertyChangeListe
             g2.setColor(PaintColors.getBackgroundColor());
             g2.fillRect(0, 0, getWidth(), getHeight());
 
-            for (int i=0; i<nonChangedLayersCount; i++) {
-                paintLayer(visibleLayers.get(i),g2, box);
+            for (int i = 0; i < nonChangedLayersCount; i++) {
+                paintLayer(visibleLayers.get(i), g2, box);
             }
         } else {
             // Maybe there were more unchanged layers then last time - draw them to buffer
             if (nonChangedLayers.size() != nonChangedLayersCount) {
                 Graphics2D g2 = nonChangedLayersBuffer.createGraphics();
                 g2.setClip(g.getClip());
-                for (int i=nonChangedLayers.size(); i<nonChangedLayersCount; i++) {
-                    paintLayer(visibleLayers.get(i),g2, box);
+                for (int i = nonChangedLayers.size(); i < nonChangedLayersCount; i++) {
+                    paintLayer(visibleLayers.get(i), g2, box);
                 }
             }
         }
 
         nonChangedLayers.clear();
         changedLayer = null;
-        for (int i=0; i<nonChangedLayersCount; i++) {
+        for (int i = 0; i < nonChangedLayersCount; i++) {
             nonChangedLayers.add(visibleLayers.get(i));
         }
         lastViewID = getViewID();
@@ -630,12 +725,14 @@ public class MapView extends NavigatableComponent implements PropertyChangeListe
 
         tempG.drawImage(nonChangedLayersBuffer, 0, 0, null);
 
-        for (int i=nonChangedLayersCount; i<visibleLayers.size(); i++) {
-            paintLayer(visibleLayers.get(i),tempG, box);
+        for (int i = nonChangedLayersCount; i < visibleLayers.size(); i++) {
+            paintLayer(visibleLayers.get(i), tempG, box);
         }
 
-        for (MapViewPaintable mvp : temporaryLayers) {
-            mvp.paint(tempG, this, box);
+        synchronized (temporaryLayers) {
+            for (MapViewPaintable mvp : temporaryLayers) {
+                mvp.paint(tempG, this, box);
+            }
         }
 
         // draw world borders
@@ -650,26 +747,22 @@ public class MapView extends NavigatableComponent implements PropertyChangeListe
 
         path.moveTo(p.x, p.y);
         double max = b.getMax().lat();
-        for(; lat <= max; lat += 1.0)
-        {
+        for (; lat <= max; lat += 1.0) {
             p = getPoint(new LatLon(lat >= max ? max : lat, lon));
             path.lineTo(p.x, p.y);
         }
         lat = max; max = b.getMax().lon();
-        for(; lon <= max; lon += 1.0)
-        {
+        for (; lon <= max; lon += 1.0) {
             p = getPoint(new LatLon(lat, lon >= max ? max : lon));
             path.lineTo(p.x, p.y);
         }
         lon = max; max = b.getMinLat();
-        for(; lat >= max; lat -= 1.0)
-        {
+        for (; lat >= max; lat -= 1.0) {
             p = getPoint(new LatLon(lat <= max ? max : lat, lon));
             path.lineTo(p.x, p.y);
         }
         lat = max; max = b.getMinLon();
-        for(; lon >= max; lon -= 1.0)
-        {
+        for (; lon >= max; lon -= 1.0) {
             p = getPoint(new LatLon(lat, lon <= max ? max : lon));
             path.lineTo(p.x, p.y);
         }
@@ -698,17 +791,50 @@ public class MapView extends NavigatableComponent implements PropertyChangeListe
     }
 
     /**
+     * Sets up the viewport to prepare for drawing the view.
+     * @return <code>true</code> if the view can be drawn, <code>false</code> otherwise.
+     */
+    public boolean prepareToDraw() {
+        if (initialViewport != null) {
+            zoomTo(initialViewport);
+            initialViewport = null;
+        }
+        if (BugReportExceptionHandler.exceptionHandlingInProgress())
+            return false;
+
+        if (getCenter() == null)
+            return false; // no data loaded yet.
+
+        // if the position was remembered, we need to adjust center once before repainting
+        if (oldLoc != null && oldSize != null) {
+            Point l1  = getLocationOnScreen();
+            final EastNorth newCenter = new EastNorth(
+                    getCenter().getX()+ (l1.x-oldLoc.x - (oldSize.width-getWidth())/2.0)*getScale(),
+                    getCenter().getY()+ (oldLoc.y-l1.y + (oldSize.height-getHeight())/2.0)*getScale()
+                    );
+            oldLoc = null; oldSize = null;
+            zoomTo(newCenter);
+        }
+
+        return true;
+    }
+
+    /**
      * @return An unmodifiable collection of all layers
      */
     public Collection<Layer> getAllLayers() {
-        return Collections.unmodifiableCollection(new ArrayList<>(layers));
+        synchronized (layers) {
+            return Collections.unmodifiableCollection(new ArrayList<>(layers));
+        }
     }
 
     /**
      * @return An unmodifiable ordered list of all layers
      */
     public List<Layer> getAllLayersAsList() {
-        return Collections.unmodifiableList(new ArrayList<>(layers));
+        synchronized (layers) {
+            return Collections.unmodifiableList(new ArrayList<>(layers));
+        }
     }
 
     /**
@@ -719,6 +845,7 @@ public class MapView extends NavigatableComponent implements PropertyChangeListe
      *     List<WMSLayer> wmsLayers = getLayersOfType(WMSLayer.class);
      * </pre>
      *
+     * @param ofType The layer type.
      * @return an unmodifiable list of layers of a certain type.
      */
     public <T extends Layer> List<T> getLayersOfType(Class<T> ofType) {
@@ -726,12 +853,14 @@ public class MapView extends NavigatableComponent implements PropertyChangeListe
     }
 
     /**
-     * Replies the number of layers managed by this mav view
+     * Replies the number of layers managed by this map view
      *
-     * @return the number of layers managed by this mav view
+     * @return the number of layers managed by this map view
      */
     public int getNumLayers() {
-        return layers.size();
+        synchronized (layers) {
+            return layers.size();
+        }
     }
 
     /**
@@ -743,10 +872,33 @@ public class MapView extends NavigatableComponent implements PropertyChangeListe
         return getNumLayers() > 0;
     }
 
-    private void setEditLayer(List<Layer> layersList) {
-        OsmDataLayer newEditLayer = layersList.contains(editLayer)?editLayer:null;
-        OsmDataLayer oldEditLayer = editLayer;
+    /**
+     * Sets the active edit layer.
+     * <p>
+     * You must own a write {@link #layerLock} when calling this method.
+     * @param layersList A list to select that layer from.
+     * @return A list of change listeners that should be fired using {@link #onActiveEditLayerChanged(Layer, OsmDataLayer, EnumSet)}
+     */
+    private EnumSet<LayerListenerType> setEditLayer(List<Layer> layersList) {
+        final OsmDataLayer newEditLayer = findNewEditLayer(layersList);
+
+        // Set new edit layer
+        if (newEditLayer != editLayer) {
+            if (newEditLayer == null) {
+                // Note: Unsafe to call while layer write lock is held.
+                getCurrentDataSet().setSelected();
+            }
+
+            editLayer = newEditLayer;
+            return EnumSet.of(LayerListenerType.EDIT_LAYER_CHANGE);
+        } else {
+            return EnumSet.noneOf(LayerListenerType.class);
+        }
+
+    }
 
+    private OsmDataLayer findNewEditLayer(List<Layer> layersList) {
+        OsmDataLayer newEditLayer = layersList.contains(editLayer) ? editLayer : null;
         // Find new edit layer
         if (activeLayer != editLayer || !layersList.contains(editLayer)) {
             if (activeLayer instanceof OsmDataLayer && layersList.contains(activeLayer)) {
@@ -760,18 +912,7 @@ public class MapView extends NavigatableComponent implements PropertyChangeListe
                 }
             }
         }
-
-        // Set new edit layer
-        if (newEditLayer != editLayer) {
-            if (newEditLayer == null) {
-                getCurrentDataSet().setSelected();
-            }
-
-            editLayer = newEditLayer;
-            fireEditLayerChanged(oldEditLayer, newEditLayer);
-            refreshTitle();
-        }
-
+        return newEditLayer;
     }
 
     /**
@@ -782,65 +923,107 @@ public class MapView extends NavigatableComponent implements PropertyChangeListe
      * @throws IllegalArgumentException if layer is not in the lis of layers
      */
     public void setActiveLayer(Layer layer) {
-        setActiveLayer(layer, true);
+        EnumSet<LayerListenerType> listenersToFire;
+        Layer oldActiveLayer;
+        OsmDataLayer oldEditLayer;
+
+        synchronized (layers) {
+            oldActiveLayer = activeLayer;
+            oldEditLayer = editLayer;
+            listenersToFire = setActiveLayer(layer, true);
+        }
+        onActiveEditLayerChanged(oldActiveLayer, oldEditLayer, listenersToFire);
+
+        repaint();
     }
 
-    private void setActiveLayer(Layer layer, boolean setEditLayer) {
+    /**
+     * Sets the active layer. Propagates this change to all map buttons.
+     * @param layer The layer to be active.
+     * @param setEditLayer if this is <code>true</code>, the edit layer is also set.
+     * @return A list of change listeners that should be fired using {@link #onActiveEditLayerChanged(Layer, OsmDataLayer, EnumSet)}
+     */
+    private EnumSet<LayerListenerType> setActiveLayer(final Layer layer, boolean setEditLayer) {
         if (layer != null && !layers.contains(layer))
             throw new IllegalArgumentException(tr("Layer ''{0}'' must be in list of layers", layer.toString()));
 
         if (layer == activeLayer)
-            return;
+            return EnumSet.noneOf(LayerListenerType.class);
 
-        Layer old = activeLayer;
         activeLayer = layer;
+        EnumSet<LayerListenerType> listenersToFire = EnumSet.of(LayerListenerType.ACTIVE_LAYER_CHANGE);
         if (setEditLayer) {
-            setEditLayer(layers);
+            listenersToFire.addAll(setEditLayer(layers));
         }
-        fireActiveLayerChanged(old, layer);
+
+        return listenersToFire;
+    }
+
+    /**
+     * Replies the currently active layer
+     *
+     * @return the currently active layer (may be null)
+     */
+    public Layer getActiveLayer() {
+        synchronized (layers) {
+            return activeLayer;
+        }
+    }
+
+    private enum LayerListenerType {
+        ACTIVE_LAYER_CHANGE,
+        EDIT_LAYER_CHANGE
+    }
+
+    /**
+     * This is called whenever one of active layer/edit layer or both may have been changed,
+     * @param oldActive The old active layer
+     * @param oldEdit The old edit layer.
+     * @param listenersToFire A mask of listeners to fire using {@link LayerListenerType}s
+     */
+    private void onActiveEditLayerChanged(final Layer oldActive, final OsmDataLayer oldEdit, EnumSet<LayerListenerType> listenersToFire) {
+        if (listenersToFire.contains(LayerListenerType.EDIT_LAYER_CHANGE)) {
+            onEditLayerChanged(oldEdit);
+        }
+        if (listenersToFire.contains(LayerListenerType.ACTIVE_LAYER_CHANGE)) {
+            onActiveLayerChanged(oldActive);
+        }
+    }
+
+    private void onActiveLayerChanged(final Layer old) {
+        fireActiveLayerChanged(old, activeLayer);
 
         /* This only makes the buttons look disabled. Disabling the actions as well requires
          * the user to re-select the tool after i.e. moving a layer. While testing I found
          * that I switch layers and actions at the same time and it was annoying to mind the
          * order. This way it works as visual clue for new users */
         for (final AbstractButton b: Main.map.allMapModeButtons) {
-            MapMode mode = (MapMode)b.getAction();
-            if (mode.layerIsSupported(layer)) {
+            MapMode mode = (MapMode) b.getAction();
+            final boolean activeLayerSupported = mode.layerIsSupported(activeLayer);
+            if (activeLayerSupported) {
                 Main.registerActionShortcut(mode, mode.getShortcut()); //fix #6876
-                GuiHelper.runInEDTAndWait(new Runnable() {
-                    @Override public void run() {
-                        b.setEnabled(true);
-                    }
-                });
             } else {
                 Main.unregisterShortcut(mode.getShortcut());
-                GuiHelper.runInEDTAndWait(new Runnable() {
-                    @Override public void run() {
-                        b.setEnabled(false);
-                    }
-                });
             }
+            GuiHelper.runInEDTAndWait(new Runnable() {
+                @Override public void run() {
+                    b.setEnabled(activeLayerSupported);
+                }
+            });
         }
         AudioPlayer.reset();
         repaint();
     }
 
     /**
-     * Replies the currently active layer
-     *
-     * @return the currently active layer (may be null)
-     */
-    public Layer getActiveLayer() {
-        return activeLayer;
-    }
-
-    /**
      * Replies the current edit layer, if any
      *
      * @return the current edit layer. May be null.
      */
     public OsmDataLayer getEditLayer() {
-        return editLayer;
+        synchronized (layers) {
+            return editLayer;
+        }
     }
 
     /**
@@ -850,43 +1033,78 @@ public class MapView extends NavigatableComponent implements PropertyChangeListe
      * @return true if the list of layers managed by this map view contain layer
      */
     public boolean hasLayer(Layer layer) {
-        return layers.contains(layer);
+        synchronized (layers) {
+            return layers.contains(layer);
+        }
     }
 
+    /**
+     * Adds a new temporary layer.
+     * <p>
+     * A temporary layer is a layer that is painted above all normal layers. Layers are painted in the order they are added.
+     *
+     * @param mvp The layer to paint.
+     * @return <code>true</code> if the layer was added.
+     */
     public boolean addTemporaryLayer(MapViewPaintable mvp) {
-        if (temporaryLayers.contains(mvp)) return false;
-        return temporaryLayers.add(mvp);
+        synchronized (temporaryLayers) {
+            return temporaryLayers.add(mvp);
+        }
     }
 
+    /**
+     * Removes a layer previously added as temporary layer.
+     * @param mvp The layer to remove.
+     * @return <code>true</code> if that layer was removed.
+     */
     public boolean removeTemporaryLayer(MapViewPaintable mvp) {
-        return temporaryLayers.remove(mvp);
+        synchronized (temporaryLayers) {
+            return temporaryLayers.remove(mvp);
+        }
+    }
+
+    /**
+     * Gets a list of temporary layers.
+     * @return The layers in the order they are added.
+     */
+    public List<MapViewPaintable> getTemporaryLayers() {
+        synchronized (temporaryLayers) {
+            return Collections.unmodifiableList(new ArrayList<>(temporaryLayers));
+        }
     }
 
     @Override
     public void propertyChange(PropertyChangeEvent evt) {
         if (evt.getPropertyName().equals(Layer.VISIBLE_PROP)) {
             repaint();
-        } else if (evt.getPropertyName().equals(Layer.OPACITY_PROP)) {
-            Layer l = (Layer)evt.getSource();
+        } else if (evt.getPropertyName().equals(Layer.OPACITY_PROP) ||
+                evt.getPropertyName().equals(Layer.FILTER_STATE_PROP)) {
+            Layer l = (Layer) evt.getSource();
             if (l.isVisible()) {
                 changedLayer = l;
                 repaint();
             }
         } else if (evt.getPropertyName().equals(OsmDataLayer.REQUIRES_SAVE_TO_DISK_PROP)
                 || evt.getPropertyName().equals(OsmDataLayer.REQUIRES_UPLOAD_TO_SERVER_PROP)) {
-            OsmDataLayer layer = (OsmDataLayer)evt.getSource();
+            OsmDataLayer layer = (OsmDataLayer) evt.getSource();
             if (layer == getEditLayer()) {
                 refreshTitle();
             }
         }
     }
 
+    /**
+     * Sets the title of the JOSM main window, adding a star if there are dirty layers.
+     * @see Main#parent
+     */
     protected void refreshTitle() {
         if (Main.parent != null) {
-            boolean dirty = editLayer != null &&
-                    (editLayer.requiresSaveToFile() || (editLayer.requiresUploadToServer() && !editLayer.isUploadDiscouraged()));
-            ((JFrame) Main.parent).setTitle((dirty ? "* " : "") + tr("Java OpenStreetMap Editor"));
-            ((JFrame) Main.parent).getRootPane().putClientProperty("Window.documentModified", dirty);
+            synchronized (layers) {
+                boolean dirty = editLayer != null &&
+                        (editLayer.requiresSaveToFile() || (editLayer.requiresUploadToServer() && !editLayer.isUploadDiscouraged()));
+                ((JFrame) Main.parent).setTitle((dirty ? "* " : "") + tr("Java OpenStreetMap Editor"));
+                ((JFrame) Main.parent).getRootPane().putClientProperty("Window.documentModified", dirty);
+            }
         }
     }
 
@@ -897,7 +1115,7 @@ public class MapView extends NavigatableComponent implements PropertyChangeListe
         }
     }
 
-    private transient SelectionChangedListener repaintSelectionChangedListener = new SelectionChangedListener(){
+    private transient SelectionChangedListener repaintSelectionChangedListener = new SelectionChangedListener() {
         @Override
         public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
             repaint();
@@ -911,12 +1129,16 @@ public class MapView extends NavigatableComponent implements PropertyChangeListe
         if (mapMover != null) {
             mapMover.destroy();
         }
-        activeLayer = null;
-        changedLayer = null;
-        editLayer = null;
-        layers.clear();
-        nonChangedLayers.clear();
-        temporaryLayers.clear();
+        synchronized (layers) {
+            activeLayer = null;
+            changedLayer = null;
+            editLayer = null;
+            layers.clear();
+            nonChangedLayers.clear();
+        }
+        synchronized (temporaryLayers) {
+            temporaryLayers.clear();
+        }
     }
 
     @Override
@@ -928,6 +1150,7 @@ public class MapView extends NavigatableComponent implements PropertyChangeListe
 
     /**
      * Get a string representation of all layers suitable for the {@code source} changeset tag.
+     * @return A String of sources separated by ';'
      */
     public String getLayerInformationForSourceTag() {
         final Collection<String> layerInfo = new ArrayList<>();
@@ -943,4 +1166,53 @@ public class MapView extends NavigatableComponent implements PropertyChangeListe
         }
         return Utils.join("; ", layerInfo);
     }
+
+    /**
+     * This is a listener that gets informed whenever repaint is called for this MapView.
+     * <p>
+     * This is the only safe method to find changes to the map view, since many components call MapView.repaint() directly.
+     * @author Michael Zangl
+     */
+    public interface RepaintListener {
+        /**
+         * Called when any repaint method is called (using default arguments if required).
+         * @param tm see {@link JComponent#repaint(long, int, int, int, int)}
+         * @param x see {@link JComponent#repaint(long, int, int, int, int)}
+         * @param y see {@link JComponent#repaint(long, int, int, int, int)}
+         * @param width see {@link JComponent#repaint(long, int, int, int, int)}
+         * @param height see {@link JComponent#repaint(long, int, int, int, int)}
+         */
+        void repaint(long tm, int x, int y, int width, int height);
+    }
+
+    private final CopyOnWriteArrayList<RepaintListener> repaintListeners = new CopyOnWriteArrayList<>();
+
+    /**
+     * Adds a listener that gets informed whenever repaint() is called for this class.
+     * @param l The listener.
+     */
+    public void addRepaintListener(RepaintListener l) {
+        repaintListeners.add(l);
+    }
+
+    /**
+     * Removes a registered repaint listener.
+     * @param l The listener.
+     */
+    public void removeRepaintListener(RepaintListener l) {
+        repaintListeners.remove(l);
+    }
+
+    @Override
+    public void repaint(long tm, int x, int y, int width, int height) {
+        // This is the main repaint method, all other methods are convenience methods and simply call this method.
+        // This is just an observation, not a must, but seems to be true for all implementations I found so far.
+        if (repaintListeners != null) {
+            // Might get called early in super constructor
+            for (RepaintListener l : repaintListeners) {
+                l.repaint(tm, x, y, width, height);
+            }
+        }
+        super.repaint(tm, x, y, width, height);
+    }
 }
diff --git a/src/org/openstreetmap/josm/gui/MenuScroller.java b/src/org/openstreetmap/josm/gui/MenuScroller.java
index 7c28db1..5eff228 100644
--- a/src/org/openstreetmap/josm/gui/MenuScroller.java
+++ b/src/org/openstreetmap/josm/gui/MenuScroller.java
@@ -57,7 +57,7 @@ public class MenuScroller {
         int result = 15;
         if (menu != null) {
             // Compute max height of current screen
-            int maxHeight = WindowGeometry.getMaxDimensionOnScreen(menu).height - ((JFrame)Main.parent).getInsets().top;
+            int maxHeight = WindowGeometry.getMaxDimensionOnScreen(menu).height - ((JFrame) Main.parent).getInsets().top;
 
             // Remove top fixed part height
             if (topFixedCount > 0) {
@@ -86,7 +86,7 @@ public class MenuScroller {
             } else {
                 // Increase scroll count to take into account upper items that will be displayed
                 // after firstIndex is updated
-                for (int i=startIndex-1; i >= 0 && height <= maxHeight; i--, result++) {
+                for (int i = startIndex-1; i >= 0 && height <= maxHeight; i--, result++) {
                     height += menuItems[i].getPreferredSize().height;
                 }
                 if (height > maxHeight) {
@@ -150,9 +150,9 @@ public class MenuScroller {
      * @param menu the menu
      * @param interval the scroll interval, in milliseconds
      * @param topFixedCount the number of items to fix at the top.  May be 0.
+     * @return the MenuScroller
      * @throws IllegalArgumentException if scrollCount or interval is 0 or
      * negative or if topFixedCount is negative
-     * @return the MenuScroller
      * @since 7463
      */
     public static MenuScroller setScrollerFor(JMenu menu, int interval, int topFixedCount) {
@@ -166,9 +166,9 @@ public class MenuScroller {
      * @param menu the popup menu
      * @param interval the scroll interval, in milliseconds
      * @param topFixedCount the number of items to fix at the top. May be 0
+     * @return the MenuScroller
      * @throws IllegalArgumentException if scrollCount or interval is 0 or
      * negative or if topFixedCount is negative
-     * @return the MenuScroller
      * @since 7463
      */
     public static MenuScroller setScrollerFor(JPopupMenu menu, int interval, int topFixedCount) {
@@ -350,7 +350,7 @@ public class MenuScroller {
                 allItemsHeight += item.getPreferredSize().height;
             }
 
-            int allowedHeight = WindowGeometry.getMaxDimensionOnScreen(menu).height - ((JFrame)Main.parent).getInsets().top;
+            int allowedHeight = WindowGeometry.getMaxDimensionOnScreen(menu).height - ((JFrame) Main.parent).getInsets().top;
 
             boolean mustSCroll = allItemsHeight > allowedHeight;
 
@@ -506,6 +506,9 @@ public class MenuScroller {
         public void mouseWheelMoved(MouseWheelEvent mwe) {
             firstIndex += mwe.getWheelRotation();
             refreshMenu();
+            if (Main.isDebugEnabled()) {
+                Main.debug(getClass().getName()+" consuming event "+mwe);
+            }
             mwe.consume();
         }
     }
diff --git a/src/org/openstreetmap/josm/gui/NameFormatterHook.java b/src/org/openstreetmap/josm/gui/NameFormatterHook.java
index 766cf57..193393f 100644
--- a/src/org/openstreetmap/josm/gui/NameFormatterHook.java
+++ b/src/org/openstreetmap/josm/gui/NameFormatterHook.java
@@ -13,7 +13,7 @@ public interface NameFormatterHook {
      * @param defaultName The default name generated by core.
      * @return The corrected type name if needed, null otherwise.
      */
-    public String checkRelationTypeName(IRelation relation, String defaultName);
+    String checkRelationTypeName(IRelation relation, String defaultName);
 
     /**
      * Check the node format. Return the corrected format if needed, null otherwise.
@@ -21,7 +21,7 @@ public interface NameFormatterHook {
      * @param defaultName The default name generated by core.
      * @return The corrected format if needed, null otherwise.
      */
-    public String checkFormat(INode node, String defaultName);
+    String checkFormat(INode node, String defaultName);
 
     /**
      * Check the way format. Return the corrected format if needed, null otherwise.
@@ -29,7 +29,7 @@ public interface NameFormatterHook {
      * @param defaultName The default name generated by core.
      * @return The corrected format if needed, null otherwise.
      */
-    public String checkFormat(IWay way, String defaultName);
+    String checkFormat(IWay way, String defaultName);
 
     /**
      * Check the relation format. Return the corrected format if needed, null otherwise.
@@ -37,5 +37,5 @@ public interface NameFormatterHook {
      * @param defaultName The default name generated by core.
      * @return The corrected format if needed, null otherwise.
      */
-    public String checkFormat(IRelation relation, String defaultName);
+    String checkFormat(IRelation relation, String defaultName);
 }
diff --git a/src/org/openstreetmap/josm/gui/NavigatableComponent.java b/src/org/openstreetmap/josm/gui/NavigatableComponent.java
index 3fe62c0..d9d8810 100644
--- a/src/org/openstreetmap/josm/gui/NavigatableComponent.java
+++ b/src/org/openstreetmap/josm/gui/NavigatableComponent.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui;
 
 import java.awt.Cursor;
@@ -51,7 +51,7 @@ import org.openstreetmap.josm.gui.download.DownloadDialog;
 import org.openstreetmap.josm.gui.help.Helpful;
 import org.openstreetmap.josm.gui.mappaint.MapPaintStyles;
 import org.openstreetmap.josm.gui.mappaint.mapcss.MapCSSStyleSource;
-import org.openstreetmap.josm.gui.preferences.projection.ProjectionPreference;
+import org.openstreetmap.josm.gui.util.CursorManager;
 import org.openstreetmap.josm.tools.Predicate;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -77,14 +77,10 @@ public class NavigatableComponent extends JComponent implements Helpful {
     /**
      * Interface to notify listeners of the change of the system of measurement.
      * @since 6056
+     * @deprecated use {@link org.openstreetmap.josm.data.SystemOfMeasurement.SoMChangeListener} instead.
      */
-    public interface SoMChangeListener {
-        /**
-         * The current SoM has changed.
-         * @param oldSoM The old system of measurement
-         * @param newSoM The new (current) system of measurement
-         */
-        void systemOfMeasurementChanged(String oldSoM, String newSoM);
+    @Deprecated
+    public interface SoMChangeListener extends SystemOfMeasurement.SoMChangeListener {
     }
 
     public transient Predicate<OsmPrimitive> isSelectablePredicate = new Predicate<OsmPrimitive>() {
@@ -137,16 +133,17 @@ public class NavigatableComponent extends JComponent implements Helpful {
         }
     }
 
-    private static final CopyOnWriteArrayList<SoMChangeListener> somChangeListeners = new CopyOnWriteArrayList<>();
 
     /**
-     * Removes a SoM change listener
+     * Removes a SoM change listener.
      *
      * @param listener the listener. Ignored if null or already absent
      * @since 6056
+     * @deprecated use {@link SystemOfMeasurement#removeSoMChangeListener} instead.
      */
+    @Deprecated
     public static void removeSoMChangeListener(NavigatableComponent.SoMChangeListener listener) {
-        somChangeListeners.remove(listener);
+        SystemOfMeasurement.removeSoMChangeListener(listener);
     }
 
     /**
@@ -154,26 +151,37 @@ public class NavigatableComponent extends JComponent implements Helpful {
      *
      * @param listener the listener. Ignored if null or already registered.
      * @since 6056
+     * @deprecated use {@link SystemOfMeasurement#addSoMChangeListener} instead.
      */
+    @Deprecated
     public static void addSoMChangeListener(NavigatableComponent.SoMChangeListener listener) {
-        if (listener != null) {
-            somChangeListeners.addIfAbsent(listener);
-        }
+        SystemOfMeasurement.addSoMChangeListener(listener);
     }
 
-    protected static void fireSoMChanged(String oldSoM, String newSoM) {
-        for (SoMChangeListener l : somChangeListeners) {
-            l.systemOfMeasurementChanged(oldSoM, newSoM);
-        }
+    /**
+     * Returns the current system of measurement.
+     * @return The current system of measurement (metric system by default).
+     * @since 3490
+     * @deprecated use {@link SystemOfMeasurement#getSystemOfMeasurement} instead.
+     */
+    @Deprecated
+    public static SystemOfMeasurement getSystemOfMeasurement() {
+        return SystemOfMeasurement.getSystemOfMeasurement();
     }
 
     /**
-     * The scale factor in x or y-units per pixel. This means, if scale = 10,
-     * every physical pixel on screen are 10 x or 10 y units in the
-     * northing/easting space of the projection.
+     * Sets the current system of measurement.
+     * @param somKey The system of measurement key. Must be defined in {@link SystemOfMeasurement#ALL_SYSTEMS}.
+     * @throws IllegalArgumentException if {@code somKey} is not known
+     * @since 6056
+     * @deprecated use {@link SystemOfMeasurement#setSystemOfMeasurement} instead.
      */
-    private double scale = Main.getProjection().getDefaultZoomInPPD();
+    @Deprecated
+    public static void setSystemOfMeasurement(String somKey) {
+        SystemOfMeasurement.setSystemOfMeasurement(somKey);
+    }
 
+    private double scale = Main.getProjection().getDefaultZoomInPPD();
     /**
      * Center n/e coordinate of the desired screen center.
      */
@@ -185,6 +193,8 @@ public class NavigatableComponent extends JComponent implements Helpful {
 
     protected transient ViewportData initialViewport;
 
+    protected final transient CursorManager cursorManager = new CursorManager(this);
+
     /**
      * Constructs a new {@code NavigatableComponent}.
      */
@@ -211,7 +221,7 @@ public class NavigatableComponent extends JComponent implements Helpful {
      * @since 3406
      */
     public static String getDistText(double dist) {
-        return getSystemOfMeasurement().getDistText(dist);
+        return SystemOfMeasurement.getSystemOfMeasurement().getDistText(dist);
     }
 
     /**
@@ -223,7 +233,7 @@ public class NavigatableComponent extends JComponent implements Helpful {
      * @since 7135
      */
     public static String getDistText(final double dist, final NumberFormat format, final double threshold) {
-        return getSystemOfMeasurement().getDistText(dist, format, threshold);
+        return SystemOfMeasurement.getSystemOfMeasurement().getDistText(dist, format, threshold);
     }
 
     /**
@@ -233,7 +243,7 @@ public class NavigatableComponent extends JComponent implements Helpful {
      * @since 5560
      */
     public static String getAreaText(double area) {
-        return getSystemOfMeasurement().getAreaText(area);
+        return SystemOfMeasurement.getSystemOfMeasurement().getAreaText(area);
     }
 
     /**
@@ -245,7 +255,7 @@ public class NavigatableComponent extends JComponent implements Helpful {
      * @since 7135
      */
     public static String getAreaText(final double area, final NumberFormat format, final double threshold) {
-        return getSystemOfMeasurement().getAreaText(area, format, threshold);
+        return SystemOfMeasurement.getSystemOfMeasurement().getAreaText(area, format, threshold);
     }
 
     public String getDist100PixelText() {
@@ -255,8 +265,8 @@ public class NavigatableComponent extends JComponent implements Helpful {
     public double getDist100Pixel() {
         int w = getWidth()/2;
         int h = getHeight()/2;
-        LatLon ll1 = getLatLon(w-50,h);
-        LatLon ll2 = getLatLon(w+50,h);
+        LatLon ll1 = getLatLon(w-50, h);
+        LatLon ll2 = getLatLon(w+50, h);
         return ll1.greatCircleDistance(ll2);
     }
 
@@ -324,11 +334,11 @@ public class NavigatableComponent extends JComponent implements Helpful {
     }
 
     public LatLon getLatLon(double x, double y) {
-        return getLatLon((int)x, (int)y);
+        return getLatLon((int) x, (int) y);
     }
 
     /**
-     * @param r
+     * @param r rectangle
      * @return Minimum bounds that will cover rectangle
      */
     public Bounds getLatLonBounds(Rectangle r) {
@@ -345,7 +355,7 @@ public class NavigatableComponent extends JComponent implements Helpful {
         double deltaEast = (eastMax - eastMin) / 10;
         double deltaNorth = (northMax - northMin) / 10;
 
-        for (int i=0; i < 10; i++) {
+        for (int i = 0; i < 10; i++) {
             result.extend(Main.getProjection().eastNorth2latlon(new EastNorth(eastMin + i * deltaEast, northMin)));
             result.extend(Main.getProjection().eastNorth2latlon(new EastNorth(eastMin + i * deltaEast, northMax)));
             result.extend(Main.getProjection().eastNorth2latlon(new EastNorth(eastMin, northMin  + i * deltaNorth)));
@@ -369,8 +379,8 @@ public class NavigatableComponent extends JComponent implements Helpful {
     public Point2D getPoint2D(EastNorth p) {
         if (null == p)
             return new Point();
-        double x = (p.east()-center.east())/scale + getWidth()/2;
-        double y = (center.north()-p.north())/scale + getHeight()/2;
+        double x = (p.east()-center.east())/scale + getWidth()/2d;
+        double y = (center.north()-p.north())/scale + getHeight()/2d;
         return new Point2D.Double(x, y);
     }
 
@@ -378,7 +388,7 @@ public class NavigatableComponent extends JComponent implements Helpful {
         if (latlon == null)
             return new Point();
         else if (latlon instanceof CachedLatLon)
-            return getPoint2D(((CachedLatLon)latlon).getEastNorth());
+            return getPoint2D(((CachedLatLon) latlon).getEastNorth());
         else
             return getPoint2D(getProjection().latlon2eastNorth(latlon));
     }
@@ -431,12 +441,22 @@ public class NavigatableComponent extends JComponent implements Helpful {
         boolean changed = false;
         double lat = cl.lat();
         double lon = cl.lon();
-        if(lat < b.getMinLat()) {changed = true; lat = b.getMinLat(); }
-        else if(lat > b.getMaxLat()) {changed = true; lat = b.getMaxLat(); }
-        if(lon < b.getMinLon()) {changed = true; lon = b.getMinLon(); }
-        else if(lon > b.getMaxLon()) {changed = true; lon = b.getMaxLon(); }
-        if(changed) {
-            newCenter = Projections.project(new LatLon(lat,lon));
+        if (lat < b.getMinLat()) {
+            changed = true;
+            lat = b.getMinLat();
+        } else if (lat > b.getMaxLat()) {
+            changed = true;
+            lat = b.getMaxLat();
+        }
+        if (lon < b.getMinLon()) {
+            changed = true;
+            lon = b.getMinLon();
+        } else if (lon > b.getMaxLon()) {
+            changed = true;
+            lon = b.getMaxLon();
+        }
+        if (changed) {
+            newCenter = Projections.project(new LatLon(lat, lon));
         }
         int width = getWidth()/2;
         int height = getHeight()/2;
@@ -460,7 +480,7 @@ public class NavigatableComponent extends JComponent implements Helpful {
             }
         }
 
-        if (!newCenter.equals(center) || (scale != newScale)) {
+        if (!newCenter.equals(center) || !Utils.equalsEpsilon(scale, newScale)) {
             if (!initial) {
                 pushZoomUndo(center, scale);
             }
@@ -483,7 +503,7 @@ public class NavigatableComponent extends JComponent implements Helpful {
                 firePropertyChange(PROPNAME_CENTER, oldCenter, newCenter);
             }
         }
-        if (scale != newScale) {
+        if (!Utils.equalsEpsilon(scale, newScale)) {
             double oldScale = scale;
             scale = newScale;
             if (!initial) {
@@ -524,10 +544,10 @@ public class NavigatableComponent extends JComponent implements Helpful {
             final double frames = milliseconds * fps / 1000;
             final EastNorth finalNewCenter = newCenter;
 
-            new Thread(){
+            new Thread("smooth-scroller") {
                 @Override
                 public void run() {
-                    for (int i=0; i<frames; i++) {
+                    for (int i = 0; i < frames; i++) {
                         // FIXME - not use zoom history here
                         zoomTo(oldCenter.interpolate(finalNewCenter, (i+1) / frames));
                         try {
@@ -692,8 +712,7 @@ public class NavigatableComponent extends JComponent implements Helpful {
 
             for (Node n : ds.searchNodes(getBBox(p, PROP_SNAP_DISTANCE.get()))) {
                 if (predicate.evaluate(n)
-                        && (dist = getPoint2D(n).distanceSq(p)) < snapDistanceSq)
-                {
+                        && (dist = getPoint2D(n).distanceSq(p)) < snapDistanceSq) {
                     List<Node> nlist;
                     if (nearestMap.containsKey(dist)) {
                         nlist = nearestMap.get(dist);
@@ -714,13 +733,13 @@ public class NavigatableComponent extends JComponent implements Helpful {
      * neither does the result *order*.
      * It solely depends on the distance to point p.
      *
-     * @return All nodes nearest to point p that are in a belt from
-     *      dist(nearest) to dist(nearest)+4px around p and
-     *      that are not in ignore.
-     *
      * @param p the point for which to search the nearest segment.
      * @param ignore a collection of nodes which are not to be returned.
      * @param predicate the returned objects have to fulfill certain properties.
+     *
+     * @return All nodes nearest to point p that are in a belt from
+     *      dist(nearest) to dist(nearest)+4px around p and
+     *      that are not in ignore.
      */
     public final List<Node> getNearestNodes(Point p,
             Collection<Node> ignore, Predicate<OsmPrimitive> predicate) {
@@ -761,12 +780,12 @@ public class NavigatableComponent extends JComponent implements Helpful {
      * neither does the result *order*.
      * It solely depends on the distance to point p.
      *
+     * @param p the point for which to search the nearest segment.
+     * @param predicate the returned objects have to fulfill certain properties.
+     *
      * @return All nodes nearest to point p that are in a belt from
      *      dist(nearest) to dist(nearest)+4px around p.
      * @see #getNearestNodes(Point, Collection, Predicate)
-     *
-     * @param p the point for which to search the nearest segment.
-     * @param predicate the returned objects have to fulfill certain properties.
      */
     public final List<Node> getNearestNodes(Point p, Predicate<OsmPrimitive> predicate) {
         return getNearestNodes(p, null, predicate);
@@ -786,12 +805,12 @@ public class NavigatableComponent extends JComponent implements Helpful {
      *
      * Finally, if a node is not found at all, null is returned.
      *
-     * @return A node within snap-distance to point p,
-     *      that is chosen by the algorithm described.
-     *
      * @param p the screen point
      * @param predicate this parameter imposes a condition on the returned object, e.g.
      *        give the nearest node that is tagged.
+     *
+     * @return A node within snap-distance to point p,
+     *      that is chosen by the algorithm described.
      */
     public final Node getNearestNode(Point p, Predicate<OsmPrimitive> predicate, boolean useSelected) {
         return getNearestNode(p, predicate, useSelected, null);
@@ -812,14 +831,15 @@ public class NavigatableComponent extends JComponent implements Helpful {
      * node to p is returned.
      *
      * Finally, if a node is not found at all, null is returned.
-     * @since 6065
-     * @return A node within snap-distance to point p,
-     *      that is chosen by the algorithm described.
      *
      * @param p the screen point
      * @param predicate this parameter imposes a condition on the returned object, e.g.
      *        give the nearest node that is tagged.
      * @param preferredRefs primitives, whose nodes we prefer
+     *
+     * @return A node within snap-distance to point p,
+     *      that is chosen by the algorithm described.
+     * @since 6065
      */
     public final Node getNearestNode(Point p, Predicate<OsmPrimitive> predicate,
             boolean useSelected, Collection<OsmPrimitive> preferredRefs) {
@@ -842,9 +862,9 @@ public class NavigatableComponent extends JComponent implements Helpful {
                     // that is selected. This is required in order to drag
                     // the selected node if multiple nodes have the same
                     // coordinates (e.g. after unglue)
-                    useNtsel |= (distSq == minDistSq);
+                    useNtsel |= Utils.equalsEpsilon(distSq, minDistSq);
                 }
-                if (ntref == null && preferredRefs != null && distSq == minDistSq) {
+                if (ntref == null && preferredRefs != null && Utils.equalsEpsilon(distSq, minDistSq)) {
                     List<OsmPrimitive> ndRefs = nd.getReferrers();
                     for (OsmPrimitive ref: preferredRefs) {
                         if (ndRefs.contains(ref)) {
@@ -928,7 +948,7 @@ public class NavigatableComponent extends JComponent implements Helpful {
                      * -- zero out least significant 32 dual digits of mantissa..
                      */
                     double perDistSq = Double.longBitsToDouble(
-                            Double.doubleToLongBits( a - (a - b + c) * (a - b + c) / 4 / c )
+                            Double.doubleToLongBits(a - (a - b + c) * (a - b + c) / 4 / c)
                             >> 32 << 32); // resolution in numbers with large exponent not needed here..
 
                     if (perDistSq < snapDistanceSq && a < c + snapDistanceSq && b < c + snapDistanceSq) {
@@ -955,12 +975,12 @@ public class NavigatableComponent extends JComponent implements Helpful {
      * Segments within 10px of p are searched and sorted by their distance to @param p,
      * then, within groups of equally distant segments, prefer those that are selected.
      *
-     * @return all segments within 10px of p that are not in ignore,
-     *          sorted by their perpendicular distance.
-     *
      * @param p the point for which to search the nearest segments.
      * @param ignore a collection of segments which are not to be returned.
      * @param predicate the returned objects have to fulfill certain properties.
+     *
+     * @return all segments within 10px of p that are not in ignore,
+     *          sorted by their perpendicular distance.
      */
     public final List<WaySegment> getNearestWaySegments(Point p,
             Collection<WaySegment> ignore, Predicate<OsmPrimitive> predicate) {
@@ -986,11 +1006,11 @@ public class NavigatableComponent extends JComponent implements Helpful {
     /**
      * The result *order* depends on the current map selection state.
      *
-     * @return all segments within 10px of p, sorted by their perpendicular distance.
-     * @see #getNearestWaySegments(Point, Collection, Predicate)
-     *
      * @param p the point for which to search the nearest segments.
      * @param predicate the returned objects have to fulfill certain properties.
+     *
+     * @return all segments within 10px of p, sorted by their perpendicular distance.
+     * @see #getNearestWaySegments(Point, Collection, Predicate)
      */
     public final List<WaySegment> getNearestWaySegments(Point p, Predicate<OsmPrimitive> predicate) {
         return getNearestWaySegments(p, null, predicate);
@@ -999,13 +1019,13 @@ public class NavigatableComponent extends JComponent implements Helpful {
     /**
      * The *result* depends on the current map selection state IF use_selected is true.
      *
-     * @return The nearest way segment to point p,
-     *      and, depending on use_selected, prefers a selected way segment, if found.
-     * @see #getNearestWaySegments(Point, Collection, Predicate)
-     *
      * @param p the point for which to search the nearest segment.
      * @param predicate the returned object has to fulfill certain properties.
      * @param useSelected whether selected way segments should be preferred.
+     *
+     * @return The nearest way segment to point p,
+     *      and, depending on use_selected, prefers a selected way segment, if found.
+     * @see #getNearestWaySegments(Point, Collection, Predicate)
      */
     public final WaySegment getNearestWaySegment(Point p, Predicate<OsmPrimitive> predicate, boolean useSelected) {
         WaySegment wayseg = null, ntsel = null;
@@ -1030,15 +1050,17 @@ public class NavigatableComponent extends JComponent implements Helpful {
      /**
      * The *result* depends on the current map selection state IF use_selected is true.
      *
+     * @param p the point for which to search the nearest segment.
+     * @param predicate the returned object has to fulfill certain properties.
+     * @param use_selected whether selected way segments should be preferred.
+     * @param preferredRefs - prefer segments related to these primitives, may be null
+     *
      * @return The nearest way segment to point p,
      *      and, depending on use_selected, prefers a selected way segment, if found.
      * Also prefers segments of ways that are related to one of preferredRefs primitives
+     *
      * @see #getNearestWaySegments(Point, Collection, Predicate)
      * @since 6065
-     * @param p the point for which to search the nearest segment.
-     * @param predicate the returned object has to fulfill certain properties.
-     * @param use_selected whether selected way segments should be preferred.
-     * @param preferredRefs - prefer segments related to these primitives, may be null
      */
     public final WaySegment getNearestWaySegment(Point p, Predicate<OsmPrimitive> predicate,
             boolean use_selected,  Collection<OsmPrimitive> preferredRefs) {
@@ -1096,12 +1118,12 @@ public class NavigatableComponent extends JComponent implements Helpful {
      * neither does the result *order*.
      * It solely depends on the perpendicular distance to point p.
      *
-     * @return all nearest ways to the screen point given that are not in ignore.
-     * @see #getNearestWaySegments(Point, Collection, Predicate)
-     *
      * @param p the point for which to search the nearest ways.
      * @param ignore a collection of ways which are not to be returned.
      * @param predicate the returned object has to fulfill certain properties.
+     *
+     * @return all nearest ways to the screen point given that are not in ignore.
+     * @see #getNearestWaySegments(Point, Collection, Predicate)
      */
     public final List<Way> getNearestWays(Point p,
             Collection<Way> ignore, Predicate<OsmPrimitive> predicate) {
@@ -1127,11 +1149,11 @@ public class NavigatableComponent extends JComponent implements Helpful {
      * neither does the result *order*.
      * It solely depends on the perpendicular distance to point p.
      *
-     * @return all nearest ways to the screen point given.
-     * @see #getNearestWays(Point, Collection, Predicate)
-     *
      * @param p the point for which to search the nearest ways.
      * @param predicate the returned object has to fulfill certain properties.
+     *
+     * @return all nearest ways to the screen point given.
+     * @see #getNearestWays(Point, Collection, Predicate)
      */
     public final List<Way> getNearestWays(Point p, Predicate<OsmPrimitive> predicate) {
         return getNearestWays(p, null, predicate);
@@ -1140,12 +1162,11 @@ public class NavigatableComponent extends JComponent implements Helpful {
     /**
      * The *result* depends on the current map selection state.
      *
-     * @return The nearest way to point p,
-     *      prefer a selected way if there are multiple nearest.
-     * @see #getNearestWaySegment(Point, Predicate)
-     *
      * @param p the point for which to search the nearest segment.
      * @param predicate the returned object has to fulfill certain properties.
+     *
+     * @return The nearest way to point p, prefer a selected way if there are multiple nearest.
+     * @see #getNearestWaySegment(Point, Predicate)
      */
     public final Way getNearestWay(Point p, Predicate<OsmPrimitive> predicate) {
         WaySegment nearestWaySeg = getNearestWaySegment(p, predicate);
@@ -1165,13 +1186,13 @@ public class NavigatableComponent extends JComponent implements Helpful {
      *
      * If nothing is found, return an empty collection.
      *
-     * @return Primitives nearest to the given screen point that are not in ignore.
-     * @see #getNearestNodes(Point, Collection, Predicate)
-     * @see #getNearestWays(Point, Collection, Predicate)
-     *
      * @param p The point on screen.
      * @param ignore a collection of ways which are not to be returned.
      * @param predicate the returned object has to fulfill certain properties.
+     *
+     * @return Primitives nearest to the given screen point that are not in ignore.
+     * @see #getNearestNodes(Point, Collection, Predicate)
+     * @see #getNearestWays(Point, Collection, Predicate)
      */
     public final List<OsmPrimitive> getNearestNodesOrWays(Point p,
             Collection<OsmPrimitive> ignore, Predicate<OsmPrimitive> predicate) {
@@ -1197,11 +1218,10 @@ public class NavigatableComponent extends JComponent implements Helpful {
      * neither does the result *order*.
      * It solely depends on the distance to point p.
      *
-     * @return Primitives nearest to the given screen point.
-     * @see #getNearestNodesOrWays(Point, Collection, Predicate)
-     *
      * @param p The point on screen.
      * @param predicate the returned object has to fulfill certain properties.
+     * @return Primitives nearest to the given screen point.
+     * @see #getNearestNodesOrWays(Point, Collection, Predicate)
      */
     public final List<OsmPrimitive> getNearestNodesOrWays(Point p, Predicate<OsmPrimitive> predicate) {
         return getNearestNodesOrWays(p, null, predicate);
@@ -1211,11 +1231,10 @@ public class NavigatableComponent extends JComponent implements Helpful {
      * This is used as a helper routine to {@link #getNearestNodeOrWay(Point, Predicate, boolean)}
      * It decides, whether to yield the node to be tested or look for further (way) candidates.
      *
-     * @return true, if the node fulfills the properties of the function body
-     *
      * @param osm node to check
      * @param p point clicked
      * @param use_selected whether to prefer selected nodes
+     * @return true, if the node fulfills the properties of the function body
      */
     private boolean isPrecedenceNode(Node osm, Point p, boolean use_selected) {
         if (osm != null) {
@@ -1241,26 +1260,26 @@ public class NavigatableComponent extends JComponent implements Helpful {
      *
      * Finally, if no nearest primitive is found at all, return null.
      *
+     * @param p The point on screen.
+     * @param predicate the returned object has to fulfill certain properties.
+     * @param use_selected whether to prefer primitives that are currently selected or referred by selected primitives
+     *
      * @return A primitive within snap-distance to point p,
      *      that is chosen by the algorithm described.
      * @see #getNearestNode(Point, Predicate)
      * @see #getNearestWay(Point, Predicate)
-     *
-     * @param p The point on screen.
-     * @param predicate the returned object has to fulfill certain properties.
-     * @param use_selected whether to prefer primitives that are currently selected or referred by selected primitives
      */
     public final OsmPrimitive getNearestNodeOrWay(Point p, Predicate<OsmPrimitive> predicate, boolean use_selected) {
         Collection<OsmPrimitive> sel;
         DataSet ds = getCurrentDataSet();
-        if (use_selected && ds!=null) {
+        if (use_selected && ds != null) {
             sel = ds.getSelected();
         } else {
             sel = null;
         }
         OsmPrimitive osm = getNearestNode(p, predicate, use_selected, sel);
 
-        if (isPrecedenceNode((Node)osm, p, use_selected)) return osm;
+        if (isPrecedenceNode((Node) osm, p, use_selected)) return osm;
         WaySegment ws;
         if (use_selected) {
             ws = getNearestWaySegment(p, predicate, use_selected, sel);
@@ -1282,7 +1301,7 @@ public class NavigatableComponent extends JComponent implements Helpful {
             // is wayseg shorter than maxWaySegLenSq and
             // is p closer to the middle of wayseg  than  to the nearest node?
             if (wp1.distanceSq(wp2) < maxWaySegLenSq &&
-                    p.distanceSq(project(0.5, wp1, wp2)) < p.distanceSq(getPoint2D((Node)osm))) {
+                    p.distanceSq(project(0.5, wp1, wp2)) < p.distanceSq(getPoint2D((Node) osm))) {
                 osm = ws.way;
             }
         }
@@ -1291,9 +1310,9 @@ public class NavigatableComponent extends JComponent implements Helpful {
 
     public static double perDist(Point2D pt, Point2D a, Point2D b) {
         if (pt != null && a != null && b != null) {
-            double pd = (
+            double pd =
                     (a.getX()-pt.getX())*(b.getX()-a.getX()) -
-                    (a.getY()-pt.getY())*(b.getY()-a.getY()) );
+                    (a.getY()-pt.getY())*(b.getY()-a.getY());
             return Math.abs(pd) / a.distance(b);
         }
         return 0d;
@@ -1309,10 +1328,10 @@ public class NavigatableComponent extends JComponent implements Helpful {
      */
     public static Point2D project(Point2D pt, Point2D a, Point2D b) {
         if (pt != null && a != null && b != null) {
-            double r = ((
+            double r = (
                     (pt.getX()-a.getX())*(b.getX()-a.getX()) +
-                    (pt.getY()-a.getY())*(b.getY()-a.getY()) )
-                    / a.distanceSq(b));
+                    (pt.getY()-a.getY())*(b.getY()-a.getY()))
+                    / a.distanceSq(b);
             return project(r, a, b);
         }
         return null;
@@ -1338,16 +1357,15 @@ public class NavigatableComponent extends JComponent implements Helpful {
     }
 
     /**
-     * The *result* does not depend on the current map selection state,
-     * neither does the result *order*.
+     * The *result* does not depend on the current map selection state, neither does the result *order*.
      * It solely depends on the distance to point p.
      *
-     * @return a list of all objects that are nearest to point p and
-     *          not in ignore or an empty list if nothing was found.
-     *
      * @param p The point on screen.
      * @param ignore a collection of ways which are not to be returned.
      * @param predicate the returned object has to fulfill certain properties.
+     *
+     * @return a list of all objects that are nearest to point p and
+     *          not in ignore or an empty list if nothing was found.
      */
     public final List<OsmPrimitive> getAllNearest(Point p,
             Collection<OsmPrimitive> ignore, Predicate<OsmPrimitive> predicate) {
@@ -1387,16 +1405,15 @@ public class NavigatableComponent extends JComponent implements Helpful {
     }
 
     /**
-     * The *result* does not depend on the current map selection state,
-     * neither does the result *order*.
+     * The *result* does not depend on the current map selection state, neither does the result *order*.
      * It solely depends on the distance to point p.
      *
+     * @param p The point on screen.
+     * @param predicate the returned object has to fulfill certain properties.
+     *
      * @return a list of all objects that are nearest to point p
      *          or an empty list if nothing was found.
      * @see #getAllNearest(Point, Collection, Predicate)
-     *
-     * @param p The point on screen.
-     * @param predicate the returned object has to fulfill certain properties.
      */
     public final List<OsmPrimitive> getAllNearest(Point p, Predicate<OsmPrimitive> predicate) {
         return getAllNearest(p, null, predicate);
@@ -1424,60 +1441,14 @@ public class NavigatableComponent extends JComponent implements Helpful {
                 getWidth() + "_" + getHeight() + "_" + getProjection().toString();
         CRC32 id = new CRC32();
         id.update(x.getBytes(StandardCharsets.UTF_8));
-        return (int)id.getValue();
+        return (int) id.getValue();
     }
 
     /**
-     * Returns the current system of measurement.
-     * @return The current system of measurement (metric system by default).
-     * @since 3490
-     */
-    public static SystemOfMeasurement getSystemOfMeasurement() {
-        SystemOfMeasurement som = SystemOfMeasurement.ALL_SYSTEMS.get(ProjectionPreference.PROP_SYSTEM_OF_MEASUREMENT.get());
-        if (som == null)
-            return SystemOfMeasurement.METRIC;
-        return som;
-    }
-
-    /**
-     * Sets the current system of measurement.
-     * @param somKey The system of measurement key. Must be defined in {@link SystemOfMeasurement#ALL_SYSTEMS}.
-     * @since 6056
-     * @throws IllegalArgumentException if {@code somKey} is not known
-     */
-    public static void setSystemOfMeasurement(String somKey) {
-        if (!SystemOfMeasurement.ALL_SYSTEMS.containsKey(somKey)) {
-            throw new IllegalArgumentException("Invalid system of measurement: "+somKey);
-        }
-        String oldKey = ProjectionPreference.PROP_SYSTEM_OF_MEASUREMENT.get();
-        if (ProjectionPreference.PROP_SYSTEM_OF_MEASUREMENT.put(somKey)) {
-            fireSoMChanged(oldKey, somKey);
-        }
-    }
-
-    private static class CursorInfo {
-        private final Cursor cursor;
-        private final Object object;
-        public CursorInfo(Cursor c, Object o) {
-            cursor = c;
-            object = o;
-        }
-    }
-
-    private LinkedList<CursorInfo> cursors = new LinkedList<>();
-
-    /**
      * Set new cursor.
      */
     public void setNewCursor(Cursor cursor, Object reference) {
-        if (!cursors.isEmpty()) {
-            CursorInfo l = cursors.getLast();
-            if(l != null && l.cursor == cursor && l.object == reference)
-                return;
-            stripCursors(reference);
-        }
-        cursors.add(new CursorInfo(cursor, reference));
-        setCursor(cursor);
+        cursorManager.setNewCursor(cursor, reference);
     }
 
     public void setNewCursor(int cursor, Object reference) {
@@ -1488,29 +1459,15 @@ public class NavigatableComponent extends JComponent implements Helpful {
      * Remove the new cursor and reset to previous
      */
     public void resetCursor(Object reference) {
-        if (cursors.isEmpty()) {
-            setCursor(null);
-            return;
-        }
-        CursorInfo l = cursors.getLast();
-        stripCursors(reference);
-        if (l != null && l.object == reference) {
-            if (cursors.isEmpty()) {
-                setCursor(null);
-            } else {
-                setCursor(cursors.getLast().cursor);
-            }
-        }
+        cursorManager.resetCursor(reference);
     }
 
-    private void stripCursors(Object reference) {
-        LinkedList<CursorInfo> c = new LinkedList<>();
-        for(CursorInfo i : cursors) {
-            if(i.object != reference) {
-                c.add(i);
-            }
-        }
-        cursors = c;
+    /**
+     * Gets the cursor manager that is used for this NavigatableComponent.
+     * @return The cursor manager.
+     */
+    public CursorManager getCursorManager() {
+        return cursorManager;
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/gui/NoteInputDialog.java b/src/org/openstreetmap/josm/gui/NoteInputDialog.java
index 4f8a075..04f6606 100644
--- a/src/org/openstreetmap/josm/gui/NoteInputDialog.java
+++ b/src/org/openstreetmap/josm/gui/NoteInputDialog.java
@@ -40,7 +40,6 @@ public class NoteInputDialog extends ExtendedDialog {
      * @param icon Icon to display in the action button
      */
     public void showNoteDialog(String message, Icon icon) {
-        JLabel label = new JLabel(message);
         textArea.setRows(6);
         textArea.setColumns(30);
         textArea.setLineWrap(true);
@@ -48,6 +47,9 @@ public class NoteInputDialog extends ExtendedDialog {
         JScrollPane scrollPane = new JScrollPane(textArea);
         scrollPane.setAlignmentX(Component.LEFT_ALIGNMENT); //without this the label gets pushed to the right
 
+        JLabel label = new JLabel(message);
+        label.setLabelFor(textArea);
+
         JPanel contentPanel = new JPanel();
         contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.Y_AXIS));
         contentPanel.add(label);
diff --git a/src/org/openstreetmap/josm/gui/Notification.java b/src/org/openstreetmap/josm/gui/Notification.java
index 7fbc709..2dd0b4a 100644
--- a/src/org/openstreetmap/josm/gui/Notification.java
+++ b/src/org/openstreetmap/josm/gui/Notification.java
@@ -81,8 +81,8 @@ public class Notification {
      *
      * @param content any Component to be shown
      *
-     * @see #setContent(java.lang.String)
      * @return the current Object, for convenience
+     * @see #setContent(java.lang.String)
      */
     public Notification setContent(Component content) {
         this.content = content;
@@ -95,8 +95,8 @@ public class Notification {
      * @param msg the message String. Will be wrapped in <html>, so
      * you can use <br> and other markup directly.
      *
-     * @see #Notification(java.lang.String)
      * @return the current Object, for convenience
+     * @see #Notification(java.lang.String)
      */
     public Notification setContent(String msg) {
         JMultilineLabel lbl = new JMultilineLabel(msg);
diff --git a/src/org/openstreetmap/josm/gui/NotificationManager.java b/src/org/openstreetmap/josm/gui/NotificationManager.java
index bed0dba..a2a73b7 100644
--- a/src/org/openstreetmap/josm/gui/NotificationManager.java
+++ b/src/org/openstreetmap/josm/gui/NotificationManager.java
@@ -72,8 +72,8 @@ class NotificationManager {
 
     private static NotificationManager INSTANCE = null;
 
-    private final Color PANEL_SEMITRANSPARENT = new Color(224, 236, 249, 230);
-    private final Color PANEL_OPAQUE = new Color(224, 236, 249);
+    private static final Color PANEL_SEMITRANSPARENT = new Color(224, 236, 249, 230);
+    private static final Color PANEL_OPAQUE = new Color(224, 236, 249);
 
     public static synchronized NotificationManager getInstance() {
         if (INSTANCE == null) {
@@ -301,7 +301,7 @@ class NotificationManager {
         private void addMouseListenerToAllChildComponents(Component comp, MouseListener listener) {
             comp.addMouseListener(listener);
             if (comp instanceof Container) {
-                for (Component c: ((Container)comp).getComponents()) {
+                for (Component c: ((Container) comp).getComponents()) {
                     addMouseListenerToAllChildComponents(c, listener);
                 }
             }
@@ -356,11 +356,11 @@ class NotificationManager {
                     RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
             g.setColor(getBackground());
             float lineWidth = 1.4f;
-            Shape rect = new RoundRectangle2D.Float(
-                    lineWidth/2 + getInsets().left,
-                    lineWidth/2 + getInsets().top,
-                    getWidth() - lineWidth/2 - getInsets().left - getInsets().right,
-                    getHeight() - lineWidth/2 - getInsets().top - getInsets().bottom,
+            Shape rect = new RoundRectangle2D.Double(
+                    lineWidth/2d + getInsets().left,
+                    lineWidth/2d + getInsets().top,
+                    getWidth() - lineWidth/2d - getInsets().left - getInsets().right,
+                    getHeight() - lineWidth/2d - getInsets().top - getInsets().bottom,
                     20, 20);
 
             g.fill(rect);
diff --git a/src/org/openstreetmap/josm/gui/OsmPrimitivRenderer.java b/src/org/openstreetmap/josm/gui/OsmPrimitivRenderer.java
index e7846e9..48bfb5a 100644
--- a/src/org/openstreetmap/josm/gui/OsmPrimitivRenderer.java
+++ b/src/org/openstreetmap/josm/gui/OsmPrimitivRenderer.java
@@ -42,7 +42,8 @@ public class OsmPrimitivRenderer implements ListCellRenderer<OsmPrimitive>, Tabl
      * Adapter method supporting the ListCellRenderer interface.
      */
     @Override
-    public Component getListCellRendererComponent(JList<? extends OsmPrimitive> list, OsmPrimitive value, int index, boolean isSelected, boolean cellHasFocus) {
+    public Component getListCellRendererComponent(JList<? extends OsmPrimitive> list, OsmPrimitive value, int index,
+            boolean isSelected, boolean cellHasFocus) {
         Component def = defaultListCellRenderer.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
         return renderer(def, value);
     }
@@ -70,14 +71,14 @@ public class OsmPrimitivRenderer implements ListCellRenderer<OsmPrimitive>, Tabl
      */
     private Component renderer(Component def, OsmPrimitive value) {
         if (value != null && def instanceof JLabel) {
-            ((JLabel)def).setText(getComponentText(value));
+            ((JLabel) def).setText(getComponentText(value));
             ImageIcon icon = ImageProvider.get(value.getDisplayType());
             if (icon != null) {
-                ((JLabel)def).setIcon(icon);
+                ((JLabel) def).setIcon(icon);
             } else {
                 Main.warn("Null icon for "+value.getDisplayType());
             }
-            ((JLabel)def).setToolTipText(getComponentToolTipText(value));
+            ((JLabel) def).setToolTipText(getComponentToolTipText(value));
         }
         return def;
     }
@@ -91,9 +92,9 @@ public class OsmPrimitivRenderer implements ListCellRenderer<OsmPrimitive>, Tabl
      */
     private Component renderer(Component def, HistoryOsmPrimitive value) {
         if (value != null && def instanceof JLabel) {
-            ((JLabel)def).setText(value.getDisplayName(DefaultNameFormatter.getInstance()));
-            ((JLabel)def).setIcon(ImageProvider.get(value.getType()));
-            ((JLabel)def).setToolTipText(formatter.buildDefaultToolTip(value));
+            ((JLabel) def).setText(value.getDisplayName(DefaultNameFormatter.getInstance()));
+            ((JLabel) def).setIcon(ImageProvider.get(value.getType()));
+            ((JLabel) def).setToolTipText(formatter.buildDefaultToolTip(value));
         }
         return def;
     }
diff --git a/src/org/openstreetmap/josm/gui/PleaseWaitDialog.java b/src/org/openstreetmap/josm/gui/PleaseWaitDialog.java
index 80f1327..3f6b084 100644
--- a/src/org/openstreetmap/josm/gui/PleaseWaitDialog.java
+++ b/src/org/openstreetmap/josm/gui/PleaseWaitDialog.java
@@ -31,19 +31,19 @@ public class PleaseWaitDialog extends JDialog implements ProgressMonitorDialog {
 
     private final JProgressBar progressBar = new JProgressBar();
 
-    public final JLabel currentAction = new JLabel("");
+    private final JLabel currentAction = new JLabel("");
     private final JLabel customText = new JLabel("");
     public final transient BoundedRangeModel progress = progressBar.getModel();
     private JButton btnCancel;
     private JButton btnInBackground;
     /** the text area and the scroll pane for the log */
-    private JosmTextArea taLog = new JosmTextArea(5,50);
+    private final JosmTextArea taLog = new JosmTextArea(5, 50);
     private  JScrollPane spLog;
 
     private void initDialog() {
         setLayout(new GridBagLayout());
         JPanel pane = new JPanel(new GridBagLayout());
-        pane.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
+        pane.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
         pane.add(currentAction, GBC.eol().fill(GBC.HORIZONTAL));
         pane.add(customText, GBC.eol().fill(GBC.HORIZONTAL));
         pane.add(progressBar, GBC.eop().fill(GBC.HORIZONTAL));
@@ -68,15 +68,18 @@ public class PleaseWaitDialog extends JDialog implements ProgressMonitorDialog {
         addComponentListener(new ComponentListener() {
             @Override
             public void componentHidden(ComponentEvent e) {}
+
             @Override
             public void componentMoved(ComponentEvent e) {}
+
             @Override
             public void componentShown(ComponentEvent e) {}
+
             @Override
             public void componentResized(ComponentEvent ev) {
                 int w = getWidth();
-                if(w > 200) {
-                    Main.pref.putInteger("progressdialog.size",w);
+                if (w > 200) {
+                    Main.pref.putInteger("progressdialog.size", w);
                 }
             }
         });
@@ -106,11 +109,11 @@ public class PleaseWaitDialog extends JDialog implements ProgressMonitorDialog {
 
     /**
      * Sets a custom text line below currentAction. Can be used to display additional information
-     * @param text
+     * @param text custom text
      */
     @Override
     public void setCustomText(String text) {
-        if(text == null || text.trim().length() == 0) {
+        if (text == null || text.trim().isEmpty()) {
             customText.setVisible(false);
             adjustLayout();
             return;
@@ -135,7 +138,7 @@ public class PleaseWaitDialog extends JDialog implements ProgressMonitorDialog {
      */
     @Override
     public void appendLogMessage(String message) {
-        if (message == null || message.trim().length() ==0 )
+        if (message == null || message.trim().isEmpty())
             return;
         if (!spLog.isVisible()) {
             spLog.setVisible(true);
@@ -199,5 +202,4 @@ public class PleaseWaitDialog extends JDialog implements ProgressMonitorDialog {
         this.progress.setValue(progress);
         this.progressBar.repaint();
     }
-
 }
diff --git a/src/org/openstreetmap/josm/gui/PleaseWaitRunnable.java b/src/org/openstreetmap/josm/gui/PleaseWaitRunnable.java
index 2ef62f7..3eb1ad3 100644
--- a/src/org/openstreetmap/josm/gui/PleaseWaitRunnable.java
+++ b/src/org/openstreetmap/josm/gui/PleaseWaitRunnable.java
@@ -77,7 +77,7 @@ public abstract class PleaseWaitRunnable implements Runnable, CancelListener {
      */
     public PleaseWaitRunnable(String title, ProgressMonitor progressMonitor, boolean ignoreException) {
         this.title = title;
-        this.progressMonitor = progressMonitor == null?new PleaseWaitProgressMonitor(title):progressMonitor;
+        this.progressMonitor = progressMonitor == null ? new PleaseWaitProgressMonitor(title) : progressMonitor;
         this.ignoreException = ignoreException;
     }
 
@@ -108,7 +108,7 @@ public abstract class PleaseWaitRunnable implements Runnable, CancelListener {
                 progressMonitor.removeCancelListener(this);
                 progressMonitor.setProgressTaskId(oldTaskId);
                 if (progressMonitor instanceof PleaseWaitProgressMonitor) {
-                    ((PleaseWaitProgressMonitor)progressMonitor).close();
+                    ((PleaseWaitProgressMonitor) progressMonitor).close();
                 }
                 if (EventQueue.isDispatchThread()) {
                     afterFinish();
@@ -156,7 +156,7 @@ public abstract class PleaseWaitRunnable implements Runnable, CancelListener {
                 public void run() {
                     doRealRun();
                 }
-            }).start();
+            }, getClass().getName()).start();
         } else {
             doRealRun();
         }
@@ -176,6 +176,9 @@ public abstract class PleaseWaitRunnable implements Runnable, CancelListener {
      * Called in the worker thread to do the actual work. When any of the
      * exception is thrown, a message box will be displayed and closeDialog
      * is called. finish() is called in any case.
+     * @throws SAXException if a SAX error occurs
+     * @throws IOException if an I/O error occurs
+     * @throws OsmTransferException if a communication error with the OSM server occurs
      */
     protected abstract void realRun() throws SAXException, IOException, OsmTransferException;
 
@@ -196,7 +199,8 @@ public abstract class PleaseWaitRunnable implements Runnable, CancelListener {
     /**
      * Task can run in background if returned value != null. Note that it's tasks responsibility
      * to ensure proper synchronization, PleaseWaitRunnable doesn't with it.
-     * @return If returned value is != null then task can run in background. TaskId could be used in future for "Always run in background" checkbox
+     * @return If returned value is != null then task can run in background.
+     * TaskId could be used in future for "Always run in background" checkbox
      */
     public ProgressTaskId canRunInBackground() {
         return null;
diff --git a/src/org/openstreetmap/josm/gui/PopupMenuHandler.java b/src/org/openstreetmap/josm/gui/PopupMenuHandler.java
index feaadde..5f9cb80 100644
--- a/src/org/openstreetmap/josm/gui/PopupMenuHandler.java
+++ b/src/org/openstreetmap/josm/gui/PopupMenuHandler.java
@@ -25,10 +25,10 @@ public class PopupMenuHandler {
     private final Set<OsmPrimitiveAction> primitiveActions = new HashSet<>();
     // Managed menu
     private final JPopupMenu menu;
-    
+
     /**
      * Constructs a new {@code RelationActionMenuHandler} for the specified popup menu.
-     * 
+     *
      * @param menu The menu to be managed
      */
     public PopupMenuHandler(JPopupMenu menu) {
@@ -45,7 +45,7 @@ public class PopupMenuHandler {
 
     /**
      * Appends a new menu item to the end of the menu which dispatches the specified <code>Action</code> object.
-     * 
+     *
      * @param a the <code>Action</code> to add to the menu
      * @return the new menu item
      * @see JPopupMenu#add(Action)
@@ -62,7 +62,7 @@ public class PopupMenuHandler {
 
     /**
      * Removes the menu item which dispatches the specified <code>Action</code> object.
-     * 
+     *
      * @param a the <code>Action</code> to remove from the menu
      * @see JPopupMenu#remove(int)
      */
@@ -72,7 +72,7 @@ public class PopupMenuHandler {
                 primitiveActions.remove(a);
             }
             MenuElement[] elements = menu.getSubElements();
-            for (int i=0; i<elements.length; i++) {
+            for (int i = 0; i < elements.length; i++) {
                 if (elements[i] instanceof JMenuItem) {
                     if (((JMenuItem) elements[i]).getAction() == a) {
                         menu.remove(i);
@@ -102,7 +102,7 @@ public class PopupMenuHandler {
     public void removeListener(PopupMenuListener l) {
         menu.removePopupMenuListener(l);
     }
-    
+
     /**
      * Returns all enabled primitive actions.
      * @return All primitive actions that have been added.
@@ -111,7 +111,7 @@ public class PopupMenuHandler {
     public Collection<OsmPrimitiveAction> getPrimitiveActions() {
         return Collections.unmodifiableCollection(primitiveActions);
     }
-    
+
     /**
      * Specifies the working set of primitives for all primitive actions.
      * @param primitives The new working set of primitives. Can be null or empty
diff --git a/src/org/openstreetmap/josm/gui/ScrollViewport.java b/src/org/openstreetmap/josm/gui/ScrollViewport.java
index ce950b5..5e708d1 100644
--- a/src/org/openstreetmap/josm/gui/ScrollViewport.java
+++ b/src/org/openstreetmap/josm/gui/ScrollViewport.java
@@ -65,7 +65,7 @@ public class ScrollViewport extends JPanel {
     private JViewport vp = new JViewport();
     private JComponent component = null;
 
-    private transient List<JButton> buttons = new ArrayList<>();
+    private List<JButton> buttons = new ArrayList<>();
 
     private Timer timer = new Timer(100, new ActionListener() {
         @Override
@@ -90,7 +90,7 @@ public class ScrollViewport extends JPanel {
         if ((direction & UP_DIRECTION) > 0) {
             button = new JButton();
             button.addMouseListener(new ScrollViewPortMouseListener(UP_DIRECTION));
-            button.setPreferredSize(new Dimension(10,10));
+            button.setPreferredSize(new Dimension(10, 10));
             button.setIcon(ImageProvider.get("svpUp"));
             add(button, BorderLayout.NORTH);
             buttons.add(button);
@@ -100,7 +100,7 @@ public class ScrollViewport extends JPanel {
         if ((direction & DOWN_DIRECTION) > 0) {
             button = new JButton();
             button.addMouseListener(new ScrollViewPortMouseListener(DOWN_DIRECTION));
-            button.setPreferredSize(new Dimension(10,10));
+            button.setPreferredSize(new Dimension(10, 10));
             button.setIcon(ImageProvider.get("svpDown"));
             add(button, BorderLayout.SOUTH);
             buttons.add(button);
@@ -110,7 +110,7 @@ public class ScrollViewport extends JPanel {
         if ((direction & LEFT_DIRECTION) > 0) {
             button = new JButton();
             button.addMouseListener(new ScrollViewPortMouseListener(LEFT_DIRECTION));
-            button.setPreferredSize(new Dimension(10,10));
+            button.setPreferredSize(new Dimension(10, 10));
             button.setIcon(ImageProvider.get("svpLeft"));
             add(button, BorderLayout.WEST);
             buttons.add(button);
@@ -120,7 +120,7 @@ public class ScrollViewport extends JPanel {
         if ((direction & RIGHT_DIRECTION) > 0) {
             button = new JButton();
             button.addMouseListener(new ScrollViewPortMouseListener(RIGHT_DIRECTION));
-            button.setPreferredSize(new Dimension(10,10));
+            button.setPreferredSize(new Dimension(10, 10));
             button.setIcon(ImageProvider.get("svpRight"));
             add(button, BorderLayout.EAST);
             buttons.add(button);
@@ -168,6 +168,7 @@ public class ScrollViewport extends JPanel {
 
         scroll(deltaX, deltaY);
     }
+
     public synchronized void scroll(int deltaX, int deltaY) {
         if (component == null)
             return;
diff --git a/src/org/openstreetmap/josm/gui/SelectionManager.java b/src/org/openstreetmap/josm/gui/SelectionManager.java
index da9a2d6..f7fc904 100644
--- a/src/org/openstreetmap/josm/gui/SelectionManager.java
+++ b/src/org/openstreetmap/josm/gui/SelectionManager.java
@@ -1,7 +1,8 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui;
 
-import java.awt.Component;
+import java.awt.Color;
+import java.awt.Graphics2D;
 import java.awt.Point;
 import java.awt.Polygon;
 import java.awt.Rectangle;
@@ -16,24 +17,30 @@ import java.util.LinkedList;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.SelectByInternalPointAction;
+import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.data.osm.visitor.paint.PaintColors;
+import org.openstreetmap.josm.gui.layer.MapViewPaintable;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
- * Manages the selection of a rectangle. Listening to left and right mouse button
+ * Manages the selection of a rectangle or a lasso loop. Listening to left and right mouse button
  * presses and to mouse motions and draw the rectangle accordingly.
  *
  * Left mouse button selects a rectangle from the press until release. Pressing
- * right mouse button while left is still pressed enable the rectangle to move
+ * right mouse button while left is still pressed enable the selection area to move
  * around. Releasing the left button fires an action event to the listener given
  * at constructor, except if the right is still pressed, which just remove the
  * selection rectangle and does nothing.
  *
+ * It is possible to switch between lasso selection and rectangle selection by using {@link #setLassoMode(boolean)}.
+ *
  * The point where the left mouse button was pressed and the current mouse
  * position are two opposite corners of the selection rectangle.
  *
- * It is possible to specify an aspect ratio (width per height) which the
+ * For rectangle mode, it is possible to specify an aspect ratio (width per height) which the
  * selection rectangle always must have. In this case, the selection rectangle
  * will be the largest window with this aspect ratio, where the position the left
  * mouse button was pressed and the corner of the current mouse position are at
@@ -55,38 +62,67 @@ public class SelectionManager implements MouseListener, MouseMotionListener, Pro
     public interface SelectionEnded {
         /**
          * Called, when the left mouse button was released.
-         * @param r The rectangle that is currently the selection.
+         * @param r The rectangle that encloses the current selection.
          * @param e The mouse event.
          * @see InputEvent#getModifiersEx()
+         * @see SelectionManager#getSelectedObjects(boolean)
          */
-        public void selectionEnded(Rectangle r, MouseEvent e);
+        void selectionEnded(Rectangle r, MouseEvent e);
+
         /**
          * Called to register the selection manager for "active" property.
          * @param listener The listener to register
          */
-        public void addPropertyChangeListener(PropertyChangeListener listener);
+        void addPropertyChangeListener(PropertyChangeListener listener);
+
         /**
          * Called to remove the selection manager from the listener list
          * for "active" property.
          * @param listener The listener to register
          */
-        public void removePropertyChangeListener(PropertyChangeListener listener);
+        void removePropertyChangeListener(PropertyChangeListener listener);
     }
+
+    /**
+     * This draws the selection hint (rectangle or lasso polygon) on the screen.
+     *
+     * @author Michael Zangl
+     */
+    private class SelectionHintLayer implements MapViewPaintable {
+        @Override
+        public void paint(Graphics2D g, MapView mv, Bounds bbox) {
+            if (mousePos == null || mousePosStart == null || mousePos == mousePosStart)
+                return;
+            Color color = Utils.complement(PaintColors.getBackgroundColor());
+            g.setColor(color);
+            if (lassoMode) {
+                g.drawPolygon(lasso);
+
+                g.setColor(new Color(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha() / 8));
+                g.fillPolygon(lasso);
+            } else {
+                Rectangle paintRect = getSelectionRectangle();
+                g.drawRect(paintRect.x, paintRect.y, paintRect.width, paintRect.height);
+            }
+        }
+    }
+
     /**
      * The listener that receives the events after left mouse button is released.
      */
     private final SelectionEnded selectionEndedListener;
     /**
      * Position of the map when the mouse button was pressed.
-     * If this is not <code>null</code>, a rectangle is drawn on screen.
+     * If this is not <code>null</code>, a rectangle/lasso line is drawn on screen.
+     * If this is <code>null</code>, no selection is active.
      */
     private Point mousePosStart;
     /**
-     * Position of the map when the selection rectangle was last drawn.
+     * The last position of the mouse while the mouse button was pressed.
      */
     private Point mousePos;
     /**
-     * The Component, the selection rectangle is drawn onto.
+     * The Component that provides us with OSM data and the aspect is taken from.
      */
     private final NavigatableComponent nc;
     /**
@@ -95,17 +131,30 @@ public class SelectionManager implements MouseListener, MouseMotionListener, Pro
      */
     private boolean aspectRatio;
 
+    /**
+     * <code>true</code> if we should paint a lasso instead of a rectangle.
+     */
     private boolean lassoMode;
+    /**
+     * The polygon to store the selection outline if {@link #lassoMode} is used.
+     */
     private Polygon lasso = new Polygon();
 
     /**
+     * The result of the last selection.
+     */
+    private Polygon selectionResult = new Polygon();
+
+    private final SelectionHintLayer selectionHintLayer = new SelectionHintLayer();
+
+    /**
      * Create a new SelectionManager.
      *
      * @param selectionEndedListener The action listener that receives the event when
      *      the left button is released.
      * @param aspectRatio If true, the selection window must obtain the aspect
      *      ratio of the drawComponent.
-     * @param navComp The component, the rectangle is drawn onto.
+     * @param navComp The component that provides us with OSM data and the aspect is taken from.
      */
     public SelectionManager(SelectionEnded selectionEndedListener, boolean aspectRatio, NavigatableComponent navComp) {
         this.selectionEndedListener = selectionEndedListener;
@@ -114,32 +163,31 @@ public class SelectionManager implements MouseListener, MouseMotionListener, Pro
     }
 
     /**
-     * Register itself at the given event source.
+     * Register itself at the given event source and add a hint layer.
      * @param eventSource The emitter of the mouse events.
      * @param lassoMode {@code true} to enable lasso mode, {@code false} to disable it.
      */
-    public void register(NavigatableComponent eventSource, boolean lassoMode) {
+    public void register(MapView eventSource, boolean lassoMode) {
        this.lassoMode = lassoMode;
         eventSource.addMouseListener(this);
         eventSource.addMouseMotionListener(this);
         selectionEndedListener.addPropertyChangeListener(this);
-        eventSource.addPropertyChangeListener("scale", new PropertyChangeListener(){
+        eventSource.addPropertyChangeListener("scale", new PropertyChangeListener() {
             @Override
             public void propertyChange(PropertyChangeEvent evt) {
-                if (mousePosStart != null) {
-                    paintRect();
-                    mousePos = mousePosStart = null;
-                }
+                abortSelecting();
             }
         });
+        eventSource.addTemporaryLayer(selectionHintLayer);
     }
     /**
-     * Unregister itself from the given event source. If a selection rectangle is
-     * shown, hide it first.
+     * Unregister itself from the given event source and hide the selection hint layer.
      *
      * @param eventSource The emitter of the mouse events.
      */
-    public void unregister(Component eventSource) {
+    public void unregister(MapView eventSource) {
+        abortSelecting();
+        eventSource.removeTemporaryLayer(selectionHintLayer);
         eventSource.removeMouseListener(this);
         eventSource.removeMouseMotionListener(this);
         selectionEndedListener.removePropertyChangeListener(this);
@@ -173,70 +221,69 @@ public class SelectionManager implements MouseListener, MouseMotionListener, Pro
             if (mousePosStart == null) {
                 mousePosStart = mousePos = e.getPoint();
             }
-            if (!lassoMode) {
-                paintRect();
-            }
+            selectionAreaChanged();
         }
 
         if (buttonPressed == MouseEvent.BUTTON1_DOWN_MASK) {
             mousePos = e.getPoint();
-            if (lassoMode) {
-                paintLasso();
-            } else {
-                paintRect();
-            }
+            addLassoPoint(e.getPoint());
+            selectionAreaChanged();
         } else if (buttonPressed == (MouseEvent.BUTTON1_DOWN_MASK | MouseEvent.BUTTON3_DOWN_MASK)) {
-            mousePosStart.x += e.getX()-mousePos.x;
-            mousePosStart.y += e.getY()-mousePos.y;
+            moveSelection(e.getX()-mousePos.x, e.getY()-mousePos.y);
             mousePos = e.getPoint();
-            paintRect();
+            selectionAreaChanged();
         }
     }
 
     /**
+     * Moves the current selection by some pixels.
+     * @param dx How much to move it in x direction.
+     * @param dy How much to move it in y direction.
+     */
+    private void moveSelection(int dx, int dy) {
+        mousePosStart.x += dx;
+        mousePosStart.y += dy;
+        lasso.translate(dx, dy);
+    }
+
+    /**
      * Check the state of the keys and buttons and set the selection accordingly.
      */
     @Override
     public void mouseReleased(MouseEvent e) {
-        if (e.getButton() != MouseEvent.BUTTON1)
-            return;
-        if (mousePos == null || mousePosStart == null)
-            return; // injected release from outside
-        // disable the selection rect
-        Rectangle r;
-        if (!lassoMode) {
-            nc.requestClearRect();
-            r = getSelectionRectangle();
-
-            lasso = rectToPolygon(r);
-        } else {
-            nc.requestClearPoly();
-            lasso.addPoint(mousePos.x, mousePos.y);
-            r = lasso.getBounds();
-        }
-        mousePosStart = null;
-        mousePos = null;
-
-        if ((e.getModifiersEx() & MouseEvent.BUTTON3_DOWN_MASK) == 0) {
-            selectionEndedListener.selectionEnded(r, e);
+        if (e.getButton() == MouseEvent.BUTTON1) {
+            endSelecting(e);
         }
     }
 
     /**
-     * Draws a selection rectangle on screen.
+     * Ends the selection of the current area. This simulates a release of mouse button 1.
+     * @param e A mouse event that caused this. Needed for backward compatibility.
      */
-    private void paintRect() {
-        if (mousePos == null || mousePosStart == null || mousePos == mousePosStart)
-            return;
-        nc.requestPaintRect(getSelectionRectangle());
+    public void endSelecting(MouseEvent e) {
+        mousePos = e.getPoint();
+        if (lassoMode) {
+            addLassoPoint(e.getPoint());
+        }
+
+        // Left mouse was released while right is still pressed.
+        boolean rightMouseStillPressed = (e.getModifiersEx() & MouseEvent.BUTTON3_DOWN_MASK) != 0;
+
+        if (!rightMouseStillPressed) {
+            selectingDone(e);
+        }
+        abortSelecting();
     }
 
-    private void paintLasso() {
-        if (mousePos == null || mousePosStart == null || mousePos == mousePosStart) {
+    private void addLassoPoint(Point point) {
+        if (isNoSelection()) {
             return;
         }
-        lasso.addPoint(mousePos.x, mousePos.y);
-        nc.requestPaintPoly(lasso);
+        lasso.addPoint(point.x, point.y);
+    }
+
+    private boolean isNoSelection() {
+        return mousePos == null || mousePosStart == null || mousePos == mousePosStart;
     }
 
     /**
@@ -260,15 +307,15 @@ public class SelectionManager implements MouseListener, MouseMotionListener, Pro
         if (aspectRatio) {
             /* Keep the aspect ratio by growing the rectangle; the
              * rectangle is always under the cursor. */
-            double aspectRatio = (double)nc.getWidth()/nc.getHeight();
-            if ((double)w/h < aspectRatio) {
-                int neww = (int)(h*aspectRatio);
+            double aspectRatio = (double) nc.getWidth()/nc.getHeight();
+            if ((double) w/h < aspectRatio) {
+                int neww = (int) (h*aspectRatio);
                 if (mousePos.x < mousePosStart.x) {
                     x += w - neww;
                 }
                 w = neww;
             } else {
-                int newh = (int)(w/aspectRatio);
+                int newh = (int) (w/aspectRatio);
                 if (mousePos.y < mousePosStart.y) {
                     y += h - newh;
                 }
@@ -276,7 +323,7 @@ public class SelectionManager implements MouseListener, MouseMotionListener, Pro
             }
         }
 
-        return new Rectangle(x,y,w,h);
+        return new Rectangle(x, y, w, h);
     }
 
     /**
@@ -284,15 +331,50 @@ public class SelectionManager implements MouseListener, MouseMotionListener, Pro
      */
     @Override
     public void propertyChange(PropertyChangeEvent evt) {
-        if ("active".equals(evt.getPropertyName()) && !(Boolean)evt.getNewValue() && mousePosStart != null) {
-            paintRect();
-            mousePosStart = null;
-            mousePos = null;
+        if ("active".equals(evt.getPropertyName()) && !(Boolean) evt.getNewValue()) {
+            abortSelecting();
+        }
+    }
+
+    /**
+     * Stores the  current selection and stores the result in {@link #selectionResult} to  be retrieved by
+     * {@link #getSelectedObjects(boolean)} later.
+     * @param e The mouse event that caused the selection to be finished.
+     */
+    private void selectingDone(MouseEvent e) {
+        if (isNoSelection()) {
+            // Nothing selected.
+            return;
         }
+        Rectangle r;
+        if (lassoMode) {
+            r = lasso.getBounds();
+
+            selectionResult = new Polygon(lasso.xpoints, lasso.ypoints, lasso.npoints);
+        } else {
+            r = getSelectionRectangle();
+
+            selectionResult = rectToPolygon(r);
+        }
+        selectionEndedListener.selectionEnded(r, e);
+    }
+
+    private void abortSelecting() {
+        if (mousePosStart != null) {
+            mousePos = mousePosStart = null;
+            lasso.reset();
+            selectionAreaChanged();
+        }
+    }
+
+    private void selectionAreaChanged() {
+        // Trigger a redraw of the map view.
+        // A nicer way would be to provide change events for the temporary layer.
+        Main.map.mapView.repaint();
     }
 
     /**
-     * Return a list of all objects in the selection, respecting the different
+     * Return a list of all objects in the active/last selection, respecting the different
      * modifier.
      *
      * @param alt Whether the alt key was pressed, which means select all
@@ -305,13 +387,13 @@ public class SelectionManager implements MouseListener, MouseMotionListener, Pro
 
         // whether user only clicked, not dragged.
         boolean clicked = false;
-        Rectangle bounding = lasso.getBounds();
+        Rectangle bounding = selectionResult.getBounds();
         if (bounding.height <= 2 && bounding.width <= 2) {
             clicked = true;
         }
 
         if (clicked) {
-            Point center = new Point(lasso.xpoints[0], lasso.ypoints[0]);
+            Point center = new Point(selectionResult.xpoints[0], selectionResult.ypoints[0]);
             OsmPrimitive osm = nc.getNearestNodeOrWay(center, OsmPrimitive.isSelectablePredicate, false);
             if (osm != null) {
                 selection.add(osm);
@@ -319,7 +401,7 @@ public class SelectionManager implements MouseListener, MouseMotionListener, Pro
         } else {
             // nodes
             for (Node n : nc.getCurrentDataSet().getNodes()) {
-                if (n.isSelectable() && lasso.contains(nc.getPoint2D(n))) {
+                if (n.isSelectable() && selectionResult.contains(nc.getPoint2D(n))) {
                     selection.add(n);
                 }
             }
@@ -331,7 +413,7 @@ public class SelectionManager implements MouseListener, MouseMotionListener, Pro
                 }
                 if (alt) {
                     for (Node n : w.getNodes()) {
-                        if (!n.isIncomplete() && lasso.contains(nc.getPoint2D(n))) {
+                        if (!n.isIncomplete() && selectionResult.contains(nc.getPoint2D(n))) {
                             selection.add(w);
                             break;
                         }
@@ -339,7 +421,7 @@ public class SelectionManager implements MouseListener, MouseMotionListener, Pro
                 } else {
                     boolean allIn = true;
                     for (Node n : w.getNodes()) {
-                        if (!n.isIncomplete() && !lasso.contains(nc.getPoint(n))) {
+                        if (!n.isIncomplete() && !selectionResult.contains(nc.getPoint(n))) {
                             allIn = false;
                             break;
                         }
@@ -374,10 +456,13 @@ public class SelectionManager implements MouseListener, MouseMotionListener, Pro
 
     @Override
     public void mouseClicked(MouseEvent e) {}
+
     @Override
     public void mouseEntered(MouseEvent e) {}
+
     @Override
     public void mouseExited(MouseEvent e) {}
+
     @Override
     public void mouseMoved(MouseEvent e) {}
 }
diff --git a/src/org/openstreetmap/josm/gui/ShowHideButtonListener.java b/src/org/openstreetmap/josm/gui/ShowHideButtonListener.java
index a17ec93..9b8cea6 100644
--- a/src/org/openstreetmap/josm/gui/ShowHideButtonListener.java
+++ b/src/org/openstreetmap/josm/gui/ShowHideButtonListener.java
@@ -7,6 +7,7 @@ package org.openstreetmap.josm.gui;
  * is used, setting the listener should be implemented by @class HideableButton
  */
 public interface ShowHideButtonListener {
-    public void buttonShown();
-    public void buttonHidden();
+    void buttonShown();
+
+    void buttonHidden();
 }
diff --git a/src/org/openstreetmap/josm/gui/SideButton.java b/src/org/openstreetmap/josm/gui/SideButton.java
index 5885c07..ce75642 100644
--- a/src/org/openstreetmap/josm/gui/SideButton.java
+++ b/src/org/openstreetmap/josm/gui/SideButton.java
@@ -36,7 +36,7 @@ public class SideButton extends JButton implements Destroyable {
 
     public SideButton(Action action, boolean usename) {
         super(action);
-        if(!usename) {
+        if (!usename) {
             setText(null);
             fixIcon(action);
             doStyle();
@@ -82,11 +82,11 @@ public class SideButton extends JButton implements Destroyable {
     private void doStyle() {
         setLayout(new BorderLayout());
         setIconTextGap(2);
-        setMargin(new Insets(-1,0,-1,0));
+        setMargin(new Insets(0, 0, 0, 0));
     }
 
     public void createArrow(ActionListener listener) {
-        setMargin(new Insets(0,0,0,0));
+        setMargin(new Insets(0, 0, 0, 0));
         BasicArrowButton arrowButton = new BasicArrowButton(SwingConstants.SOUTH, null, null, Color.BLACK, null);
         arrowButton.setBorder(BorderFactory.createEmptyBorder());
         add(arrowButton, BorderLayout.EAST);
diff --git a/src/org/openstreetmap/josm/gui/SplashScreen.java b/src/org/openstreetmap/josm/gui/SplashScreen.java
index 7cdcf37..834714f 100644
--- a/src/org/openstreetmap/josm/gui/SplashScreen.java
+++ b/src/org/openstreetmap/josm/gui/SplashScreen.java
@@ -4,6 +4,7 @@ package org.openstreetmap.josm.gui;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.awt.Color;
+import java.awt.Component;
 import java.awt.Dimension;
 import java.awt.GridBagConstraints;
 import java.awt.GridBagLayout;
@@ -11,25 +12,34 @@ import java.awt.Image;
 import java.awt.Insets;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
-import java.util.Arrays;
-import java.util.LinkedList;
+import java.util.List;
+import java.util.Objects;
+import java.util.concurrent.CopyOnWriteArrayList;
 
+import javax.swing.BorderFactory;
 import javax.swing.ImageIcon;
 import javax.swing.JFrame;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
 import javax.swing.JProgressBar;
+import javax.swing.JScrollPane;
 import javax.swing.JSeparator;
+import javax.swing.ScrollPaneConstants;
 import javax.swing.border.Border;
 import javax.swing.border.EmptyBorder;
 import javax.swing.border.EtchedBorder;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
 
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Version;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
-import org.openstreetmap.josm.gui.progress.ProgressRenderer;
-import org.openstreetmap.josm.gui.progress.SwingRenderingProgressMonitor;
+import org.openstreetmap.josm.gui.progress.ProgressTaskId;
 import org.openstreetmap.josm.gui.util.GuiHelper;
+import org.openstreetmap.josm.gui.widgets.JosmEditorPane;
+import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.Predicates;
 import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.WindowGeometry;
 
@@ -37,9 +47,10 @@ import org.openstreetmap.josm.tools.WindowGeometry;
  * Show a splash screen so the user knows what is happening during startup.
  * @since 976
  */
-public class SplashScreen extends JFrame {
+public class SplashScreen extends JFrame implements ChangeListener {
 
-    private final transient SwingRenderingProgressMonitor progressMonitor;
+    private final SplashProgressMonitor progressMonitor;
+    private final SplashScreenProgressRenderer progressRenderer;
 
     /**
      * Constructs a new {@code SplashScreen}.
@@ -48,7 +59,7 @@ public class SplashScreen extends JFrame {
         setUndecorated(true);
 
         // Add a nice border to the main splash screen
-        JPanel contentPane = (JPanel)this.getContentPane();
+        JPanel contentPane = (JPanel) this.getContentPane();
         Border margin = new EtchedBorder(1, Color.white, Color.gray);
         contentPane.setBorder(margin);
 
@@ -59,7 +70,7 @@ public class SplashScreen extends JFrame {
         innerContentPane.setLayout(new GridBagLayout());
 
         // Add the logo
-        JLabel logo = new JLabel(new ImageIcon(ImageProvider.get("logo.png").getImage().getScaledInstance(128, 129, Image.SCALE_SMOOTH)));
+        JLabel logo = new JLabel(new ImageIcon(ImageProvider.get("logo.svg").getImage().getScaledInstance(128, 129, Image.SCALE_SMOOTH)));
         GridBagConstraints gbc = new GridBagConstraints();
         gbc.gridheight = 2;
         gbc.insets = new Insets(0, 0, 0, 70);
@@ -89,11 +100,11 @@ public class SplashScreen extends JFrame {
         innerContentPane.add(separator, gbc);
 
         // Add a status message
-        SplashScreenProgressRenderer progressRenderer = new SplashScreenProgressRenderer();
+        progressRenderer = new SplashScreenProgressRenderer();
         gbc.gridy = 3;
         gbc.insets = new Insets(0, 0, 10, 0);
         innerContentPane.add(progressRenderer, gbc);
-        progressMonitor = new SwingRenderingProgressMonitor(progressRenderer);
+        progressMonitor = new SplashProgressMonitor(null, this);
 
         pack();
 
@@ -108,121 +119,277 @@ public class SplashScreen extends JFrame {
         });
     }
 
+    @Override
+    public void stateChanged(ChangeEvent ignore) {
+        GuiHelper.runInEDT(new Runnable() {
+            @Override
+            public void run() {
+                progressRenderer.setTasks(progressMonitor.toString());
+            }
+        });
+    }
+
     /**
-     * Returns the progress monitor.
-     * @return The progress monitor
+     * A task (of a {@link ProgressMonitor}).
      */
-    public ProgressMonitor getProgressMonitor() {
-        return progressMonitor;
+    private abstract static class Task {
+
+        /**
+         * Returns a HTML representation for this task.
+         */
+        public abstract StringBuilder toHtml(StringBuilder sb);
+
+        @Override
+        public final String toString() {
+            return toHtml(new StringBuilder(1024)).toString();
+        }
     }
 
-    private static class SplashScreenProgressRenderer extends JPanel implements ProgressRenderer {
-        private JLabel lblTaskTitle;
-        private JLabel lblCustomText;
-        private JProgressBar progressBar;
+    /**
+     * A single task (of a {@link ProgressMonitor}) which keeps track of its execution duration
+     * (requires a call to {@link #finish()}).
+     */
+    private static class MeasurableTask extends Task {
+        private final String name;
+        private final long start;
+        private String duration = "";
 
-        protected void build() {
-            setLayout(new GridBagLayout());
-            GridBagConstraints gc = new GridBagConstraints();
-            gc.gridx = 0;
-            gc.gridy = 0;
-            gc.fill = GridBagConstraints.HORIZONTAL;
-            gc.weightx = 1.0;
-            gc.weighty = 0.0;
-            gc.insets = new Insets(5,0,0,0);
-            add(lblTaskTitle = new JLabel(" "), gc);
-
-            gc.gridx = 0;
-            gc.gridy = 1;
-            gc.fill = GridBagConstraints.HORIZONTAL;
-            gc.weightx = 1.0;
-            gc.weighty = 0.0;
-            gc.insets = new Insets(5,0,0,0);
-            add(lblCustomText = new JLabel(" ") {
-                @Override
-                public Dimension getPreferredSize() {
-                    Dimension d = super.getPreferredSize();
-                    if(d.width < 600) d.width = 600;
-                    d.height *= MAX_NUMBER_OF_MESSAGES;
-                    return d;
+        public MeasurableTask(String name) {
+            this.name = name;
+            this.start = System.currentTimeMillis();
+        }
+
+        public void finish() {
+            if (!"".equals(duration)) {
+                throw new IllegalStateException("This tasks has already been finished");
+            }
+            duration = tr(" ({0})", Utils.getDurationString(System.currentTimeMillis() - start));
+        }
+
+        @Override
+        public StringBuilder toHtml(StringBuilder sb) {
+            return sb.append(name).append("<i style='color: #666666;'>").append(duration).append("</i>");
+        }
+
+        @Override
+        public boolean equals(Object o) {
+            if (this == o) return true;
+            if (o == null || getClass() != o.getClass()) return false;
+            MeasurableTask that = (MeasurableTask) o;
+            return Objects.equals(name, that.name);
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hashCode(name);
+        }
+    }
+
+    /**
+     * A {@link ProgressMonitor} which stores the (sub)tasks in a tree.
+     */
+    public static class SplashProgressMonitor extends Task implements ProgressMonitor {
+
+        private final String name;
+        private final ChangeListener listener;
+        private final List<Task> tasks = new CopyOnWriteArrayList<>();
+        private SplashProgressMonitor latestSubtask;
+
+        public SplashProgressMonitor(String name, ChangeListener listener) {
+            this.name = name;
+            this.listener = listener;
+        }
+
+        @Override
+        public StringBuilder toHtml(StringBuilder sb) {
+            sb.append(Utils.firstNonNull(name, ""));
+            if (!tasks.isEmpty()) {
+                sb.append("<ul>");
+                for (Task i : tasks) {
+                    sb.append("<li>");
+                    i.toHtml(sb);
+                    sb.append("</li>");
                 }
-            }, gc);
+                sb.append("</ul>");
+            }
+            return sb;
+        }
 
-            gc.gridx = 0;
-            gc.gridy = 2;
-            gc.fill = GridBagConstraints.HORIZONTAL;
-            gc.weightx = 1.0;
-            gc.weighty = 0.0;
-            gc.insets = new Insets(5,0,0,0);
-            add(progressBar = new JProgressBar(JProgressBar.HORIZONTAL), gc);
+        @Override
+        public void beginTask(String title) {
+            if (title != null) {
+                final MeasurableTask task = new MeasurableTask(title);
+                tasks.add(task);
+                listener.stateChanged(null);
+            }
         }
 
-        public SplashScreenProgressRenderer() {
-            build();
+        @Override
+        public void beginTask(String title, int ticks) {
+            this.beginTask(title);
+        }
+
+        @Override
+        public void setCustomText(String text) {
+            this.beginTask(text);
         }
 
         @Override
-        public void setCustomText(String message) {
-            if(message.isEmpty())
-                message = " "; // prevent killing of additional line
-            lblCustomText.setText(message);
-            repaint();
+        public void setExtraText(String text) {
+            this.beginTask(text);
         }
 
         @Override
-        public void setIndeterminate(boolean indeterminate) {
-            progressBar.setIndeterminate(indeterminate);
-            repaint();
+        public void indeterminateSubTask(String title) {
+            this.subTask(title);
         }
 
         @Override
-        public void setMaximum(int maximum) {
-            progressBar.setMaximum(maximum);
-            repaint();
+        public void subTask(String title) {
+            latestSubtask = new SplashProgressMonitor(title, listener);
+            tasks.add(latestSubtask);
+            listener.stateChanged(null);
         }
 
-        private static final int MAX_NUMBER_OF_MESSAGES = 3;
-        private LinkedList<String> messages = new LinkedList<>(Arrays.asList("", "", "")); //update when changing MAX_NUMBER_OF_MESSAGES
-        private long time = System.currentTimeMillis();
+        @Override
+        public ProgressMonitor createSubTaskMonitor(int ticks, boolean internal) {
+            return latestSubtask;
+        }
 
         /**
-         * Stores and displays the {@code MAX_NUMBER_OF_MESSAGES} most recent
-         * task titles together with their execution time.
+         * @deprecated Use {@link #finishTask(String)} instead.
          */
         @Override
-        public void setTaskTitle(String taskTitle) {
+        @Deprecated
+        public void finishTask() {
+            // Not used
+        }
 
-            while (messages.size() >= MAX_NUMBER_OF_MESSAGES) {
-                messages.removeFirst();
-            }
-            long now = System.currentTimeMillis();
-            String prevMessageTitle = messages.getLast();
-            // now should always be >= time but if can be inferior sometimes, see #10287
-            if (!prevMessageTitle.isEmpty() && now >= time) {
-                messages.removeLast();
-                messages.add(tr("{0} ({1})", prevMessageTitle, Utils.getDurationString(now - time)));
-            }
-            time = now;
-            if (!taskTitle.isEmpty()) {
-                messages.add(taskTitle);
-            }
-            StringBuilder html = new StringBuilder();
-            int i = 0;
-            for (String m : messages) {
-                html.append("<p class=\"entry").append(++i).append("\">").append(m).append("</p>");
+        /**
+         * Displays the given task as finished.
+         * @param title the task title
+         */
+        public void finishTask(String title) {
+            final Task task = Utils.find(tasks, Predicates.<Task>equalTo(new MeasurableTask(title)));
+            if (task instanceof MeasurableTask) {
+                ((MeasurableTask) task).finish();
+                Main.debug(tr("{0} completed in {1}", title, ((MeasurableTask) task).duration));
+                listener.stateChanged(null);
             }
+        }
 
-            lblTaskTitle.setText("<html><style>"
-                    + ".entry1{color:#CCCCCC;}"
-                    + ".entry2{color:#999999;}"
-                    + ".entry3{color:#000000;}</style>" + html + "</html>");  //update when changing MAX_NUMBER_OF_MESSAGES
-            repaint();
+        @Override
+        public void invalidate() {
+            // Not used
         }
 
         @Override
-        public void setValue(int value) {
-            progressBar.setValue(value);
-            repaint();
+        public void setTicksCount(int ticks) {
+            // Not used
+        }
+
+        @Override
+        public int getTicksCount() {
+            return 0;
+        }
+
+        @Override
+        public void setTicks(int ticks) {
+        }
+
+        @Override
+        public int getTicks() {
+            return 0;
+        }
+
+        @Override
+        public void worked(int ticks) {
+            // Not used
+        }
+
+        @Override
+        public boolean isCanceled() {
+            return false;
+        }
+
+        @Override
+        public void cancel() {
+            // Not used
+        }
+
+        @Override
+        public void addCancelListener(CancelListener listener) {
+            // Not used
+        }
+
+        @Override
+        public void removeCancelListener(CancelListener listener) {
+            // Not used
+        }
+
+        @Override
+        public void appendLogMessage(String message) {
+            // Not used
+        }
+
+        @Override
+        public void setProgressTaskId(ProgressTaskId taskId) {
+            // Not used
+        }
+
+        @Override
+        public ProgressTaskId getProgressTaskId() {
+            return null;
+        }
+
+        @Override
+        public Component getWindowParent() {
+            return Main.parent;
+        }
+    }
+
+    /**
+     * Returns the progress monitor.
+     * @return The progress monitor
+     */
+    public SplashProgressMonitor getProgressMonitor() {
+        return progressMonitor;
+    }
+
+    private static class SplashScreenProgressRenderer extends JPanel {
+        private final JosmEditorPane lblTaskTitle = new JosmEditorPane();
+        private final JProgressBar progressBar = new JProgressBar(JProgressBar.HORIZONTAL);
+        private static final String LABEL_HTML = "<html>"
+                + "<style>ul {margin-top: 0; margin-bottom: 0; padding: 0;} li {margin: 0; padding: 0;}</style>";
+
+        protected void build() {
+            setLayout(new GridBagLayout());
+
+            JosmEditorPane.makeJLabelLike(lblTaskTitle, false);
+            lblTaskTitle.setText(LABEL_HTML);
+            final JScrollPane scrollPane = new JScrollPane(lblTaskTitle,
+                    ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
+            scrollPane.setPreferredSize(new Dimension(0, 320));
+            scrollPane.setBorder(BorderFactory.createEmptyBorder());
+            add(scrollPane, GBC.eol().insets(5, 5, 0, 0).fill(GridBagConstraints.HORIZONTAL));
+
+            progressBar.setIndeterminate(true);
+            add(progressBar, GBC.eol().insets(5, 15, 0, 0).fill(GridBagConstraints.HORIZONTAL));
+        }
+
+        /**
+         * Constructs a new {@code SplashScreenProgressRenderer}.
+         */
+        public SplashScreenProgressRenderer() {
+            build();
+        }
+
+        /**
+         * Sets the tasks to displayed. A HTML formatted list is expected.
+         */
+        public void setTasks(String tasks) {
+            lblTaskTitle.setText(LABEL_HTML + tasks);
+            lblTaskTitle.setCaretPosition(lblTaskTitle.getDocument().getLength());
         }
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/actionsupport/AlignImageryPanel.java b/src/org/openstreetmap/josm/gui/actionsupport/AlignImageryPanel.java
deleted file mode 100644
index e591108..0000000
--- a/src/org/openstreetmap/josm/gui/actionsupport/AlignImageryPanel.java
+++ /dev/null
@@ -1,80 +0,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui.actionsupport;
-
-import static org.openstreetmap.josm.tools.I18n.tr;
-
-import java.awt.Color;
-import java.awt.Font;
-import java.awt.GridBagLayout;
-import java.awt.Toolkit;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-import javax.swing.JButton;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.border.CompoundBorder;
-import javax.swing.border.EmptyBorder;
-import javax.swing.border.EtchedBorder;
-
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.gui.widgets.UrlLabel;
-import org.openstreetmap.josm.tools.GBC;
-import org.openstreetmap.josm.tools.ImageProvider;
-
-/**
- * The panel to nag a user ONCE that he/she has to align imagery.
- *
- * @author zverik
- */
-public class AlignImageryPanel extends JPanel {
-    private static final String PREF = "imagery.offsetnagging";
-
-    public AlignImageryPanel(boolean oneLine) {
-        super();
-
-        Font font = getFont().deriveFont(Font.PLAIN, 14.0f);
-        JLabel nagLabel = new JLabel(tr("Aerial imagery might be misaligned. Please check its offset using GPS tracks!"));
-        UrlLabel detailsList = new UrlLabel(tr("http://wiki.openstreetmap.org/wiki/Using_Imagery"), tr("Details..."));
-        nagLabel.setFont(font);
-        detailsList.setFont(font);
-
-        JButton closeButton = new JButton(ImageProvider.get("misc", "black_x"));
-        closeButton.setContentAreaFilled(false);
-        closeButton.setRolloverEnabled(true);
-        closeButton.setBorderPainted(false);
-        closeButton.setToolTipText(tr("Hide this message and never show it again"));
-        closeButton.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed( ActionEvent e ) {
-                if (Main.isDisplayingMapView()) {
-                    Main.map.removeTopPanel(AlignImageryPanel.class);
-                    Main.pref.put(PREF, false);
-                }
-            }
-        });
-
-        setLayout(new GridBagLayout());
-        if (!oneLine) { // tune for small screens
-            add(nagLabel, GBC.std(1, 1).fill());
-            add(detailsList, GBC.std(1, 2).fill());
-            add(closeButton, GBC.std(2, 1).span(1,2).anchor(GBC.EAST));
-        } else {
-            add(nagLabel, GBC.std(1,1).fill());
-            add(detailsList, GBC.std(2,1).fill());
-            add(closeButton, GBC.std(3,1).anchor(GBC.EAST));
-        }
-        setBorder(new CompoundBorder(new EtchedBorder(EtchedBorder.LOWERED), new EmptyBorder(12, 12, 12, 12)));
-        setBackground(new Color(224, 236, 249));
-    }
-
-    public static void addNagPanelIfNeeded() {
-        if (Main.isDisplayingMapView() && !Main.pref.getBoolean("expert") && Main.pref.getBoolean(PREF, true) ) {
-            if (Main.map.getTopPanel(AlignImageryPanel.class) == null) {
-                double w = Toolkit.getDefaultToolkit().getScreenSize().getWidth();
-                AlignImageryPanel p = new AlignImageryPanel(w>1300);
-                Main.map.addTopPanel(p);
-            }
-        }
-    }
-}
diff --git a/src/org/openstreetmap/josm/gui/actionsupport/DeleteFromRelationConfirmationDialog.java b/src/org/openstreetmap/josm/gui/actionsupport/DeleteFromRelationConfirmationDialog.java
deleted file mode 100644
index a4585d8..0000000
--- a/src/org/openstreetmap/josm/gui/actionsupport/DeleteFromRelationConfirmationDialog.java
+++ /dev/null
@@ -1,360 +0,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui.actionsupport;
-
-import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
-import static org.openstreetmap.josm.tools.I18n.tr;
-import static org.openstreetmap.josm.tools.I18n.trn;
-
-import java.awt.BorderLayout;
-import java.awt.Dimension;
-import java.awt.FlowLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import javax.swing.AbstractAction;
-import javax.swing.JDialog;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JTable;
-import javax.swing.event.TableModelEvent;
-import javax.swing.event.TableModelListener;
-import javax.swing.table.DefaultTableColumnModel;
-import javax.swing.table.DefaultTableModel;
-import javax.swing.table.TableColumn;
-
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.osm.NameFormatter;
-import org.openstreetmap.josm.data.osm.OsmPrimitive;
-import org.openstreetmap.josm.data.osm.RelationToChildReference;
-import org.openstreetmap.josm.gui.DefaultNameFormatter;
-import org.openstreetmap.josm.gui.OsmPrimitivRenderer;
-import org.openstreetmap.josm.gui.SideButton;
-import org.openstreetmap.josm.gui.help.ContextSensitiveHelpAction;
-import org.openstreetmap.josm.gui.help.HelpUtil;
-import org.openstreetmap.josm.gui.widgets.HtmlPanel;
-import org.openstreetmap.josm.tools.ImageProvider;
-import org.openstreetmap.josm.tools.WindowGeometry;
-
-/**
- * This dialog is used to get a user confirmation that a collection of primitives can be removed
- * from their parent relations.
- * @since 2308
- */
-public class DeleteFromRelationConfirmationDialog extends JDialog implements TableModelListener {
-    /** the unique instance of this dialog */
-    private static DeleteFromRelationConfirmationDialog instance;
-
-    /**
-     * Replies the unique instance of this dialog
-     *
-     * @return The unique instance of this dialog
-     */
-    public static synchronized DeleteFromRelationConfirmationDialog getInstance() {
-        if (instance == null) {
-            instance = new DeleteFromRelationConfirmationDialog();
-        }
-        return instance;
-    }
-
-    /** the data model */
-    private RelationMemberTableModel model;
-    private HtmlPanel htmlPanel;
-    private boolean canceled;
-    private SideButton btnOK;
-
-    protected JPanel buildRelationMemberTablePanel() {
-        JTable table = new JTable(model, new RelationMemberTableColumnModel());
-        JPanel pnl = new JPanel();
-        pnl.setLayout(new BorderLayout());
-        pnl.add(new JScrollPane(table));
-        return pnl;
-    }
-
-    protected JPanel buildButtonPanel() {
-        JPanel pnl = new JPanel();
-        pnl.setLayout(new FlowLayout());
-        pnl.add(btnOK = new SideButton(new OKAction()));
-        btnOK.setFocusable(true);
-        pnl.add(new SideButton(new CancelAction()));
-        pnl.add(new SideButton(new ContextSensitiveHelpAction(ht("/Action/Delete#DeleteFromRelations"))));
-        return pnl;
-    }
-
-    protected final void build() {
-        model = new RelationMemberTableModel();
-        model.addTableModelListener(this);
-        getContentPane().setLayout(new BorderLayout());
-        getContentPane().add(htmlPanel = new HtmlPanel(), BorderLayout.NORTH);
-        getContentPane().add(buildRelationMemberTablePanel(), BorderLayout.CENTER);
-        getContentPane().add(buildButtonPanel(), BorderLayout.SOUTH);
-
-        HelpUtil.setHelpContext(this.getRootPane(), ht("/Action/Delete#DeleteFromRelations"));
-
-        addWindowListener(new WindowEventHandler());
-    }
-
-    protected void updateMessage() {
-        int numObjectsToDelete = model.getNumObjectsToDelete();
-        int numParentRelations = model.getNumParentRelations();
-        String msg;
-        if (numObjectsToDelete == 1 && numParentRelations == 1) {
-            msg = tr("<html>Please confirm to remove <strong>1 object</strong> from <strong>1 relation</strong>.</html>");
-        } else if (numObjectsToDelete == 1 && numParentRelations > 1) {
-            msg = tr("<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} relations</strong>.</html>", numParentRelations);
-        } else if (numObjectsToDelete > 1 && numParentRelations == 1) {
-            msg = tr("<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} relations</strong>.</html>", numParentRelations);
-        } else {
-            msg = tr("<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} relations</strong>.</html>", numObjectsToDelete,numParentRelations);
-        }
-        htmlPanel.getEditorPane().setText(msg);
-        invalidate();
-    }
-
-    protected void updateTitle() {
-        int numObjectsToDelete = model.getNumObjectsToDelete();
-        if (numObjectsToDelete > 0) {
-            setTitle(trn("Deleting {0} object", "Deleting {0} objects", numObjectsToDelete, numObjectsToDelete));
-        } else {
-            setTitle(tr("Delete objects"));
-        }
-    }
-
-    /**
-     * Constructs a new {@code DeleteFromRelationConfirmationDialog}.
-     */
-    public DeleteFromRelationConfirmationDialog() {
-        super(JOptionPane.getFrameForComponent(Main.parent), "", ModalityType.DOCUMENT_MODAL);
-        build();
-    }
-
-    /**
-     * Replies the data model used in this dialog
-     *
-     * @return the data model
-     */
-    public RelationMemberTableModel getModel() {
-        return model;
-    }
-
-    /**
-     * Replies true if the dialog was canceled
-     *
-     * @return true if the dialog was canceled
-     */
-    public boolean isCanceled() {
-        return canceled;
-    }
-
-    protected void setCanceled(boolean canceled) {
-        this.canceled = canceled;
-    }
-
-    @Override
-    public void setVisible(boolean visible) {
-        if (visible) {
-            new WindowGeometry(
-                    getClass().getName()  + ".geometry",
-                    WindowGeometry.centerInWindow(
-                            Main.parent,
-                            new Dimension(400,200)
-                    )
-            ).applySafe(this);
-            setCanceled(false);
-        } else if (isShowing()) { // Avoid IllegalComponentStateException like in #8775
-            new WindowGeometry(this).remember(getClass().getName() + ".geometry");
-        }
-        super.setVisible(visible);
-    }
-
-    @Override
-    public void tableChanged(TableModelEvent e) {
-        updateMessage();
-        updateTitle();
-    }
-
-    /**
-     * The table model which manages the list of relation-to-child references
-     *
-     */
-    public static class RelationMemberTableModel extends DefaultTableModel {
-        private transient List<RelationToChildReference> data;
-
-        /**
-         * Constructs a new {@code RelationMemberTableModel}.
-         */
-        public RelationMemberTableModel() {
-            data = new ArrayList<>();
-        }
-
-        @Override
-        public int getRowCount() {
-            if (data == null) return 0;
-            return data.size();
-        }
-
-        protected void sort() {
-            Collections.sort(
-                    data,
-                    new Comparator<RelationToChildReference>() {
-                        private NameFormatter nf = DefaultNameFormatter.getInstance();
-                        @Override
-                        public int compare(RelationToChildReference o1, RelationToChildReference o2) {
-                            int cmp = o1.getChild().getDisplayName(nf).compareTo(o2.getChild().getDisplayName(nf));
-                            if (cmp != 0) return cmp;
-                            cmp = o1.getParent().getDisplayName(nf).compareTo(o2.getParent().getDisplayName(nf));
-                            if (cmp != 0) return cmp;
-                            return Integer.valueOf(o1.getPosition()).compareTo(o2.getPosition());
-                        }
-                    }
-            );
-        }
-
-        public void populate(Collection<RelationToChildReference> references) {
-            data.clear();
-            if (references != null) {
-                data.addAll(references);
-            }
-            sort();
-            fireTableDataChanged();
-        }
-
-        public Set<OsmPrimitive> getObjectsToDelete() {
-            Set<OsmPrimitive> ret = new HashSet<>();
-            for (RelationToChildReference ref: data) {
-                ret.add(ref.getChild());
-            }
-            return ret;
-        }
-
-        public int getNumObjectsToDelete() {
-            return getObjectsToDelete().size();
-        }
-
-        public Set<OsmPrimitive> getParentRelations() {
-            Set<OsmPrimitive> ret = new HashSet<>();
-            for (RelationToChildReference ref: data) {
-                ret.add(ref.getParent());
-            }
-            return ret;
-        }
-
-        public int getNumParentRelations() {
-            return getParentRelations().size();
-        }
-
-        @Override
-        public Object getValueAt(int rowIndex, int columnIndex) {
-            if (data == null) return null;
-            RelationToChildReference ref = data.get(rowIndex);
-            switch(columnIndex) {
-            case 0: return ref.getChild();
-            case 1: return ref.getParent();
-            case 2: return ref.getPosition()+1;
-            case 3: return ref.getRole();
-            default:
-                assert false: "Illegal column index";
-            }
-            return null;
-        }
-
-        @Override
-        public boolean isCellEditable(int row, int column) {
-            return false;
-        }
-    }
-
-    private static class RelationMemberTableColumnModel extends DefaultTableColumnModel{
-
-        protected final void createColumns() {
-            TableColumn col = null;
-
-            // column 0 - To Delete
-            col = new TableColumn(0);
-            col.setHeaderValue(tr("To delete"));
-            col.setResizable(true);
-            col.setWidth(100);
-            col.setPreferredWidth(100);
-            col.setCellRenderer(new OsmPrimitivRenderer());
-            addColumn(col);
-
-            // column 0 - From Relation
-            col = new TableColumn(1);
-            col.setHeaderValue(tr("From Relation"));
-            col.setResizable(true);
-            col.setWidth(100);
-            col.setPreferredWidth(100);
-            col.setCellRenderer(new OsmPrimitivRenderer());
-            addColumn(col);
-
-            // column 1 - Pos.
-            col = new TableColumn(2);
-            col.setHeaderValue(tr("Pos."));
-            col.setResizable(true);
-            col.setWidth(30);
-            col.setPreferredWidth(30);
-            addColumn(col);
-
-            // column 2 - Role
-            col = new TableColumn(3);
-            col.setHeaderValue(tr("Role"));
-            col.setResizable(true);
-            col.setWidth(50);
-            col.setPreferredWidth(50);
-            addColumn(col);
-        }
-
-        public RelationMemberTableColumnModel() {
-            createColumns();
-        }
-    }
-
-    class OKAction extends AbstractAction {
-        public OKAction() {
-            putValue(NAME, tr("OK"));
-            putValue(SMALL_ICON, ImageProvider.get("ok"));
-            putValue(SHORT_DESCRIPTION, tr("Click to close the dialog and remove the object from the relations"));
-        }
-
-        @Override
-        public void actionPerformed(ActionEvent e) {
-            setCanceled(false);
-            setVisible(false);
-        }
-    }
-
-    class CancelAction extends AbstractAction {
-        public CancelAction() {
-            putValue(NAME, tr("Cancel"));
-            putValue(SMALL_ICON, ImageProvider.get("cancel"));
-            putValue(SHORT_DESCRIPTION, tr("Click to close the dialog and to abort deleting the objects"));
-        }
-
-        @Override
-        public void actionPerformed(ActionEvent e) {
-            setCanceled(true);
-            setVisible(false);
-        }
-    }
-
-    class WindowEventHandler extends WindowAdapter {
-
-        @Override
-        public void windowClosing(WindowEvent e) {
-            setCanceled(true);
-        }
-
-        @Override
-        public void windowOpened(WindowEvent e) {
-            btnOK.requestFocusInWindow();
-        }
-    }
-}
diff --git a/src/org/openstreetmap/josm/gui/actionsupport/LogShowDialog.java b/src/org/openstreetmap/josm/gui/actionsupport/LogShowDialog.java
deleted file mode 100644
index b96ace0..0000000
--- a/src/org/openstreetmap/josm/gui/actionsupport/LogShowDialog.java
+++ /dev/null
@@ -1,53 +0,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui.actionsupport;
-
-import static org.openstreetmap.josm.tools.I18n.tr;
-
-import java.awt.Dimension;
-import java.awt.GridBagLayout;
-
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.gui.ExtendedDialog;
-import org.openstreetmap.josm.gui.widgets.JosmEditorPane;
-import org.openstreetmap.josm.tools.GBC;
-
-/**
- * Generic dialog with message and scrolling area
- * @author Alexei
- */
-public class LogShowDialog extends ExtendedDialog {
-
-
-    public LogShowDialog (String title, String msg, String log) {
-        super(Main.parent, title, new String[] {tr("OK")});
-        setButtonIcons(new String[] {"ok.png"});
-        setContent(build(msg, log));
-    }
-
-    protected final JPanel build(String msg, String log) {
-        JPanel p = new JPanel(new GridBagLayout());
-        JLabel lbl = new JLabel(msg);
-        
-        lbl.setFont(lbl.getFont().deriveFont(0, 14));
-        
-        p.add(lbl, GBC.eol().insets(5,0,5,0));
-        JosmEditorPane txt = new JosmEditorPane();
-        txt.setContentType("text/html");
-        txt.setText(log);
-        txt.setEditable(false);
-        txt.setOpaque(false);
-        
-        JScrollPane sp = new JScrollPane(txt);
-        sp.setOpaque(false);
-        sp.setPreferredSize(new Dimension(600,300));
-        
-        
-        p.add(sp, GBC.eop().insets(5,15,0,0).fill(GBC.HORIZONTAL));
-
-        return p;
-    }
-}
diff --git a/src/org/openstreetmap/josm/gui/bbox/BBoxChooser.java b/src/org/openstreetmap/josm/gui/bbox/BBoxChooser.java
index 33e2456..12404a8 100644
--- a/src/org/openstreetmap/josm/gui/bbox/BBoxChooser.java
+++ b/src/org/openstreetmap/josm/gui/bbox/BBoxChooser.java
@@ -22,7 +22,7 @@ public interface BBoxChooser {
      *
      * @param bbox the bounding box
      */
-    public void setBoundingBox(Bounds bbox);
+    void setBoundingBox(Bounds bbox);
 
     /**
      * Replies the currently selected bounding box in this BBoxChooser.
@@ -31,5 +31,5 @@ public interface BBoxChooser {
      *
      * @return the currently selected bounding box
      */
-    public Bounds getBoundingBox();
+    Bounds getBoundingBox();
 }
diff --git a/src/org/openstreetmap/josm/gui/bbox/SizeButton.java b/src/org/openstreetmap/josm/gui/bbox/SizeButton.java
index 01897c9..b5ccad2 100644
--- a/src/org/openstreetmap/josm/gui/bbox/SizeButton.java
+++ b/src/org/openstreetmap/josm/gui/bbox/SizeButton.java
@@ -1,6 +1,8 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.bbox;
 
+import static org.openstreetmap.josm.tools.I18n.tr;
+
 import java.awt.Dimension;
 import java.awt.Graphics;
 import java.awt.Point;
@@ -25,13 +27,13 @@ public class SizeButton extends JComponent {
     private boolean isEnlarged = false;
     private final SlippyMapBBoxChooser slippyMapBBoxChooser;
 
-    public SizeButton(SlippyMapBBoxChooser slippyMapBBoxChooser){
-        super();
+    public SizeButton(SlippyMapBBoxChooser slippyMapBBoxChooser) {
         this.slippyMapBBoxChooser = slippyMapBBoxChooser;
         enlargeImage = ImageProvider.get("view-fullscreen");
         shrinkImage = ImageProvider.get("view-fullscreen-revert");
         setPreferredSize(new Dimension(enlargeImage.getIconWidth(), enlargeImage.getIconHeight()));
         addMouseListener(mouseListener);
+        setToolTipText(tr("Enlarge"));
     }
 
     private final transient MouseAdapter mouseListener = new MouseAdapter() {
@@ -44,20 +46,20 @@ public class SizeButton extends JComponent {
         }
     };
 
-
     @Override
     protected void paintComponent(Graphics g) {
-        if(isEnlarged) {
-            if(shrinkImage != null)
-                g.drawImage(shrinkImage.getImage(),x,y, null);
+        if (isEnlarged) {
+            if (shrinkImage != null)
+                g.drawImage(shrinkImage.getImage(), x, y, null);
         } else {
-            if(enlargeImage != null)
-                g.drawImage(enlargeImage.getImage(),x,y, null);
+            if (enlargeImage != null)
+                g.drawImage(enlargeImage.getImage(), x, y, null);
         }
     }
 
     public void toggle() {
         isEnlarged = !isEnlarged;
+        setToolTipText(isEnlarged ? tr("Shrink") : tr("Enlarge"));
     }
 
     public boolean isEnlarged() {
@@ -65,8 +67,8 @@ public class SizeButton extends JComponent {
     }
 
     public boolean hit(Point point) {
-        if(x < point.x && point.x < x + enlargeImage.getIconWidth()) {
-            if(y < point.y && point.y < y + enlargeImage.getIconHeight()) {
+        if (x < point.x && point.x < x + enlargeImage.getIconWidth()) {
+            if (y < point.y && point.y < y + enlargeImage.getIconHeight()) {
                 return true;
             }
         }
diff --git a/src/org/openstreetmap/josm/gui/bbox/SlippyMapBBoxChooser.java b/src/org/openstreetmap/josm/gui/bbox/SlippyMapBBoxChooser.java
index 7b41c59..c237a81 100644
--- a/src/org/openstreetmap/josm/gui/bbox/SlippyMapBBoxChooser.java
+++ b/src/org/openstreetmap/josm/gui/bbox/SlippyMapBBoxChooser.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.bbox;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -26,6 +26,7 @@ import org.openstreetmap.gui.jmapviewer.JMapViewer;
 import org.openstreetmap.gui.jmapviewer.MapMarkerDot;
 import org.openstreetmap.gui.jmapviewer.MemoryTileCache;
 import org.openstreetmap.gui.jmapviewer.OsmTileLoader;
+import org.openstreetmap.gui.jmapviewer.interfaces.ICoordinate;
 import org.openstreetmap.gui.jmapviewer.interfaces.MapMarker;
 import org.openstreetmap.gui.jmapviewer.interfaces.TileLoader;
 import org.openstreetmap.gui.jmapviewer.interfaces.TileSource;
@@ -38,7 +39,9 @@ import org.openstreetmap.josm.data.Version;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.imagery.ImageryInfo;
 import org.openstreetmap.josm.data.imagery.ImageryLayerInfo;
+import org.openstreetmap.josm.data.imagery.TMSCachedTileLoader;
 import org.openstreetmap.josm.data.preferences.StringProperty;
+import org.openstreetmap.josm.gui.layer.AbstractCachedTileSourceLayer;
 import org.openstreetmap.josm.gui.layer.TMSLayer;
 
 public class SlippyMapBBoxChooser extends JMapViewer implements BBoxChooser {
@@ -69,7 +72,7 @@ public class SlippyMapBBoxChooser extends JMapViewer implements BBoxChooser {
                     continue;
                 }
                 try {
-                    TileSource source = TMSLayer.getTileSource(info);
+                    TileSource source = TMSLayer.getTileSourceStatic(info);
                     if (source != null) {
                         sources.add(source);
                     }
@@ -91,14 +94,13 @@ public class SlippyMapBBoxChooser extends JMapViewer implements BBoxChooser {
 
     /**
      * Plugins that wish to add custom tile sources to slippy map choose should call this method
-     * @param tileSourceProvider
+     * @param tileSourceProvider new tile source provider
      */
     public static void addTileSourceProvider(TileSourceProvider tileSourceProvider) {
         providers.addIfAbsent(tileSourceProvider);
     }
 
     private static CopyOnWriteArrayList<TileSourceProvider> providers = new CopyOnWriteArrayList<>();
-
     static {
         addTileSourceProvider(new TileSourceProvider() {
             @Override
@@ -124,8 +126,8 @@ public class SlippyMapBBoxChooser extends JMapViewer implements BBoxChooser {
     private transient Bounds bbox;
 
     // upper left and lower right corners of the selection rectangle (x/y on ZOOM_MAX)
-    private Point iSelectionRectStart;
-    private Point iSelectionRectEnd;
+    private ICoordinate iSelectionRectStart;
+    private ICoordinate iSelectionRectEnd;
 
     /**
      * Constructs a new {@code SlippyMapBBoxChooser}.
@@ -138,11 +140,11 @@ public class SlippyMapBBoxChooser extends JMapViewer implements BBoxChooser {
         Map<String, String> headers = new HashMap<>();
         headers.put("User-Agent", Version.getInstance().getFullAgentString());
 
-        cachedLoader = TMSLayer.loaderFactory.makeTileLoader(this, headers);
+        cachedLoader = AbstractCachedTileSourceLayer.getTileLoaderFactory("TMS", TMSCachedTileLoader.class).makeTileLoader(this,  headers);
 
         uncachedLoader = new OsmTileLoader(this);
         uncachedLoader.headers.putAll(headers);
-        setZoomContolsVisible(Main.pref.getBoolean("slippy_map_chooser.zoomcontrols",false));
+        setZoomContolsVisible(Main.pref.getBoolean("slippy_map_chooser.zoomcontrols", false));
         setMapMarkerVisible(false);
         setMinimumSize(new Dimension(350, 350 / 2));
         // We need to set an initial size - this prevents a wrong zoom selection
@@ -209,21 +211,14 @@ public class SlippyMapBBoxChooser extends JMapViewer implements BBoxChooser {
 
             // draw selection rectangle
             if (iSelectionRectStart != null && iSelectionRectEnd != null) {
+                Rectangle box = new Rectangle(getMapPosition(iSelectionRectStart, false));
+                box.add(getMapPosition(iSelectionRectEnd, false));
 
-                int zoomDiff = MAX_ZOOM - zoom;
-                Point tlc = getTopLeftCoordinates();
-                int x_min = (iSelectionRectStart.x >> zoomDiff) - tlc.x;
-                int y_min = (iSelectionRectStart.y >> zoomDiff) - tlc.y;
-                int x_max = (iSelectionRectEnd.x >> zoomDiff) - tlc.x;
-                int y_max = (iSelectionRectEnd.y >> zoomDiff) - tlc.y;
-
-                int w = x_max - x_min;
-                int h = y_max - y_min;
                 g.setColor(new Color(0.9f, 0.7f, 0.7f, 0.6f));
-                g.fillRect(x_min, y_min, w, h);
+                g.fillRect(box.x, box.y, box.width, box.height);
 
                 g.setColor(Color.BLACK);
-                g.drawRect(x_min, y_min, w, h);
+                g.drawRect(box.x, box.y, box.width, box.height);
             }
         } catch (Exception e) {
             Main.error(e);
@@ -243,11 +238,10 @@ public class SlippyMapBBoxChooser extends JMapViewer implements BBoxChooser {
     }
 
     /**
-     * Callback for the OsmMapControl. (Re-)Sets the start and end point of the
-     * selection rectangle.
+     * Callback for the OsmMapControl. (Re-)Sets the start and end point of the selection rectangle.
      *
-     * @param aStart
-     * @param aEnd
+     * @param aStart selection start
+     * @param aEnd selection end
      */
     public void setSelection(Point aStart, Point aEnd) {
         if (aStart == null || aEnd == null || aStart.x == aEnd.x || aStart.y == aEnd.y)
@@ -256,29 +250,17 @@ public class SlippyMapBBoxChooser extends JMapViewer implements BBoxChooser {
         Point p_max = new Point(Math.max(aEnd.x, aStart.x), Math.max(aEnd.y, aStart.y));
         Point p_min = new Point(Math.min(aEnd.x, aStart.x), Math.min(aEnd.y, aStart.y));
 
-        Point tlc = getTopLeftCoordinates();
-        int zoomDiff = MAX_ZOOM - zoom;
-        Point pEnd = new Point(p_max.x + tlc.x, p_max.y + tlc.y);
-        Point pStart = new Point(p_min.x + tlc.x, p_min.y + tlc.y);
-
-        pEnd.x <<= zoomDiff;
-        pEnd.y <<= zoomDiff;
-        pStart.x <<= zoomDiff;
-        pStart.y <<= zoomDiff;
-
-        iSelectionRectStart = pStart;
-        iSelectionRectEnd = pEnd;
+        iSelectionRectStart = getPosition(p_min);
+        iSelectionRectEnd =   getPosition(p_max);
 
-        Coordinate l1 = getPosition(p_max); // lon may be outside [-180,180]
-        Coordinate l2 = getPosition(p_min); // lon may be outside [-180,180]
         Bounds b = new Bounds(
                 new LatLon(
-                        Math.min(l2.getLat(), l1.getLat()),
-                        LatLon.toIntervalLon(Math.min(l1.getLon(), l2.getLon()))
+                        Math.min(iSelectionRectStart.getLat(), iSelectionRectEnd.getLat()),
+                        LatLon.toIntervalLon(Math.min(iSelectionRectStart.getLon(), iSelectionRectEnd.getLon()))
                         ),
                         new LatLon(
-                                Math.max(l2.getLat(), l1.getLat()),
-                                LatLon.toIntervalLon(Math.max(l1.getLon(), l2.getLon())))
+                                Math.max(iSelectionRectStart.getLat(), iSelectionRectEnd.getLat()),
+                                LatLon.toIntervalLon(Math.max(iSelectionRectStart.getLon(), iSelectionRectEnd.getLon())))
                 );
         Bounds oldValue = this.bbox;
         this.bbox = b;
@@ -314,8 +296,8 @@ public class SlippyMapBBoxChooser extends JMapViewer implements BBoxChooser {
      */
     @Override
     public void setBoundingBox(Bounds bbox) {
-        if (bbox == null || (bbox.getMinLat() == 0.0 && bbox.getMinLon() == 0.0
-                && bbox.getMaxLat() == 0.0 && bbox.getMaxLon() == 0.0)) {
+        if (bbox == null || (bbox.getMinLat() == 0 && bbox.getMinLon() == 0
+                && bbox.getMaxLat() == 0 && bbox.getMaxLon() == 0)) {
             this.bbox = null;
             iSelectionRectStart = null;
             iSelectionRectEnd = null;
@@ -324,28 +306,16 @@ public class SlippyMapBBoxChooser extends JMapViewer implements BBoxChooser {
         }
 
         this.bbox = bbox;
-        double minLon = bbox.getMinLon();
-        double maxLon = bbox.getMaxLon();
-
-        if (bbox.crosses180thMeridian()) {
-            minLon -= 360.0;
-        }
-
-        int y1 = tileSource.LatToY(bbox.getMinLat(), MAX_ZOOM);
-        int y2 = tileSource.LatToY(bbox.getMaxLat(), MAX_ZOOM);
-        int x1 = tileSource.LonToX(minLon, MAX_ZOOM);
-        int x2 = tileSource.LonToX(maxLon, MAX_ZOOM);
-
-        iSelectionRectStart = new Point(Math.min(x1, x2), Math.min(y1, y2));
-        iSelectionRectEnd = new Point(Math.max(x1, x2), Math.max(y1, y2));
+        iSelectionRectStart = new Coordinate(bbox.getMinLat(), bbox.getMinLon());
+        iSelectionRectEnd = new Coordinate(bbox.getMaxLat(), bbox.getMaxLon());
 
         // calc the screen coordinates for the new selection rectangle
-        MapMarkerDot xmin_ymin = new MapMarkerDot(bbox.getMinLat(), bbox.getMinLon());
-        MapMarkerDot xmax_ymax = new MapMarkerDot(bbox.getMaxLat(), bbox.getMaxLon());
+        MapMarkerDot min = new MapMarkerDot(bbox.getMinLat(), bbox.getMinLon());
+        MapMarkerDot max = new MapMarkerDot(bbox.getMaxLat(), bbox.getMaxLon());
 
         List<MapMarker> marker = new ArrayList<>(2);
-        marker.add(xmin_ymin);
-        marker.add(xmax_ymax);
+        marker.add(min);
+        marker.add(max);
         setMapMarkerList(marker);
         setDisplayToFitMapMarkers();
         zoomOut();
@@ -353,6 +323,15 @@ public class SlippyMapBBoxChooser extends JMapViewer implements BBoxChooser {
     }
 
     /**
+     * Enables or disables painting of the shrink/enlarge button
+     *
+     * @param visible {@code true} to enable painting of the shrink/enlarge button
+     */
+    public void setSizeButtonVisible(boolean visible) {
+        iSizeButton.setVisible(visible);
+    }
+
+    /**
      * Refreshes the tile sources
      * @since 6364
      */
diff --git a/src/org/openstreetmap/josm/gui/bbox/SlippyMapControler.java b/src/org/openstreetmap/josm/gui/bbox/SlippyMapControler.java
index efa5789..d2b9de1 100644
--- a/src/org/openstreetmap/josm/gui/bbox/SlippyMapControler.java
+++ b/src/org/openstreetmap/josm/gui/bbox/SlippyMapControler.java
@@ -64,9 +64,8 @@ public class SlippyMapControler extends MouseAdapter implements MouseMotionListe
         iSlippyMapChooser.addMouseListener(this);
         iSlippyMapChooser.addMouseMotionListener(this);
 
-        String[] n = { ",", ".", "up", "right", "down", "left" };
-        int[] k = { KeyEvent.VK_COMMA, KeyEvent.VK_PERIOD, KeyEvent.VK_UP, KeyEvent.VK_RIGHT, KeyEvent.VK_DOWN,
-                KeyEvent.VK_LEFT };
+        String[] n = {",", ".", "up", "right", "down", "left"};
+        int[] k = {KeyEvent.VK_COMMA, KeyEvent.VK_PERIOD, KeyEvent.VK_UP, KeyEvent.VK_RIGHT, KeyEvent.VK_DOWN, KeyEvent.VK_LEFT};
 
         if (contentPane != null) {
             for (int i = 0; i < n.length; ++i) {
diff --git a/src/org/openstreetmap/josm/gui/bbox/SourceButton.java b/src/org/openstreetmap/josm/gui/bbox/SourceButton.java
index 4feebfa..51088af 100644
--- a/src/org/openstreetmap/josm/gui/bbox/SourceButton.java
+++ b/src/org/openstreetmap/josm/gui/bbox/SourceButton.java
@@ -50,7 +50,7 @@ public class SourceButton extends JComponent {
         enlargeImage = ImageProvider.get("layer-switcher-maximize");
         shrinkImage = ImageProvider.get("layer-switcher-minimize");
 
-        hiddenDimension= new Dimension(enlargeImage.getIconWidth(), enlargeImage.getIconHeight());
+        hiddenDimension = new Dimension(enlargeImage.getIconWidth(), enlargeImage.getIconHeight());
         setPreferredSize(hiddenDimension);
 
         addMouseListener(mouseListener);
@@ -101,11 +101,13 @@ public class SourceButton extends JComponent {
                 int radioButtonSize = 10;
 
                 g.setColor(new Color(0, 0, 139, 179));
-                g.fillRoundRect(0, 0, barWidth + shrinkImage.getIconWidth(), sources.length * LAYER_HEIGHT + TOP_PADDING + BOTTOM_PADDING, 10, 10);
-                for (int i=0; i<sources.length; i++) {
+                g.fillRoundRect(0, 0, barWidth + shrinkImage.getIconWidth(),
+                        sources.length * LAYER_HEIGHT + TOP_PADDING + BOTTOM_PADDING, 10, 10);
+                for (int i = 0; i < sources.length; i++) {
                     g.setColor(Color.WHITE);
                     g.fillOval(LEFT_PADDING, TOP_PADDING + i * LAYER_HEIGHT + 6, radioButtonSize, radioButtonSize);
-                    g.drawString(sources[i].getName(), LEFT_PADDING + radioButtonSize + LEFT_PADDING, TOP_PADDING + i * LAYER_HEIGHT + g.getFontMetrics().getHeight());
+                    g.drawString(sources[i].getName(), LEFT_PADDING + radioButtonSize + LEFT_PADDING,
+                            TOP_PADDING + i * LAYER_HEIGHT + g.getFontMetrics().getHeight());
                     if (currentMap == i) {
                         g.setColor(Color.BLACK);
                         g.fillOval(LEFT_PADDING + 1, TOP_PADDING + 7 + i * LAYER_HEIGHT, radioButtonSize - 2, radioButtonSize - 2);
@@ -124,13 +126,12 @@ public class SourceButton extends JComponent {
     public void toggle() {
         this.isEnlarged = !this.isEnlarged;
         calculateShownDimension();
-        setPreferredSize(isEnlarged?shownDimension:hiddenDimension);
+        setPreferredSize(isEnlarged ? shownDimension : hiddenDimension);
         revalidate();
     }
 
-
     public void setCurrentMap(TileSource tileSource) {
-        for (int i=0; i<sources.length; i++) {
+        for (int i = 0; i < sources.length; i++) {
             if (sources[i].equals(tileSource)) {
                 currentMap = i;
                 return;
diff --git a/src/org/openstreetmap/josm/gui/bbox/TileSelectionBBoxChooser.java b/src/org/openstreetmap/josm/gui/bbox/TileSelectionBBoxChooser.java
index d0fca92..a28193e 100644
--- a/src/org/openstreetmap/josm/gui/bbox/TileSelectionBBoxChooser.java
+++ b/src/org/openstreetmap/josm/gui/bbox/TileSelectionBBoxChooser.java
@@ -113,7 +113,7 @@ public class TileSelectionBBoxChooser extends JPanel implements BBoxChooser{
         gc.weightx = 1.0;
         gc.weighty = 1.0;
         gc.fill = GridBagConstraints.BOTH;
-        gc.insets = new Insets(2,2,2,2);
+        gc.insets = new Insets(2, 2, 2, 2);
         add(mapViewer = new TileBoundsMapView(), gc);
         mapViewer.setFocusable(false);
         mapViewer.setZoomContolsVisible(false);
@@ -201,7 +201,7 @@ public class TileSelectionBBoxChooser extends JPanel implements BBoxChooser{
         @Override
         public void propertyChange(PropertyChangeEvent evt) {
             if (!evt.getPropertyName().equals(TileGridInputPanel.TILE_BOUNDS_PROP)) return;
-            TileBounds tb = (TileBounds)evt.getNewValue();
+            TileBounds tb = (TileBounds) evt.getNewValue();
             Bounds oldValue = TileSelectionBBoxChooser.this.bbox;
             TileSelectionBBoxChooser.this.bbox = convertTileBoundsToBoundingBox(tb);
             firePropertyChange(BBOX_PROP, oldValue, TileSelectionBBoxChooser.this.bbox);
@@ -242,7 +242,7 @@ public class TileSelectionBBoxChooser extends JPanel implements BBoxChooser{
         protected JPanel buildZoomLevelPanel() {
             JPanel pnl = new JPanel(new FlowLayout(FlowLayout.LEFT));
             pnl.add(new JLabel(tr("Zoom level:")));
-            pnl.add(spZoomLevel = new JSpinner(new SpinnerNumberModel(0,0,18,1)));
+            pnl.add(spZoomLevel = new JSpinner(new SpinnerNumberModel(0, 0, 18, 1)));
             spZoomLevel.addChangeListener(new ZomeLevelChangeHandler());
             spZoomLevel.addChangeListener(tileBoundsBuilder);
             return pnl;
@@ -250,7 +250,7 @@ public class TileSelectionBBoxChooser extends JPanel implements BBoxChooser{
 
         protected JPanel buildTileGridInputPanel() {
             JPanel pnl = new JPanel(new GridBagLayout());
-            pnl.setBorder(BorderFactory.createEmptyBorder(2,2,2,2));
+            pnl.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
             GridBagConstraints gc = new GridBagConstraints();
             gc.anchor = GridBagConstraints.NORTHWEST;
             gc.insets = new Insets(0, 0, 2, 2);
@@ -323,13 +323,13 @@ public class TileSelectionBBoxChooser extends JPanel implements BBoxChooser{
 
         protected void build() {
             setLayout(new BorderLayout());
-            setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+            setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
             add(buildTextPanel(), BorderLayout.NORTH);
             add(buildTileGridInputPanel(), BorderLayout.CENTER);
 
             Set<AWTKeyStroke> forwardKeys = new HashSet<>(getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS));
             forwardKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0));
-            setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS,forwardKeys);
+            setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, forwardKeys);
         }
 
         public TileGridInputPanel() {
@@ -342,12 +342,12 @@ public class TileSelectionBBoxChooser extends JPanel implements BBoxChooser{
             TileBounds tb = new TileBounds();
             tb.zoomLevel = (Integer) spZoomLevel.getValue();
             tb.min = new Point(
-                    Math.max(0,lonToTileX(tb.zoomLevel, bbox.getMinLon())),
-                    Math.max(0,latToTileY(tb.zoomLevel, bbox.getMaxLat() - 0.00001))
+                    Math.max(0, lonToTileX(tb.zoomLevel, bbox.getMinLon())),
+                    Math.max(0, latToTileY(tb.zoomLevel, bbox.getMaxLat() - 0.00001))
             );
             tb.max = new Point(
-                    Math.max(0,lonToTileX(tb.zoomLevel, bbox.getMaxLon())),
-                    Math.max(0,latToTileY(tb.zoomLevel, bbox.getMinLat() - 0.00001))
+                    Math.max(0, lonToTileX(tb.zoomLevel, bbox.getMaxLon())),
+                    Math.max(0, latToTileY(tb.zoomLevel, bbox.getMinLat() - 0.00001))
             );
             doFireTileBoundChanged = false;
             setTileBounds(tb);
@@ -358,12 +358,12 @@ public class TileSelectionBBoxChooser extends JPanel implements BBoxChooser{
             if ((zoom < 3) || (zoom > 18)) return -1;
             double l = lat / 180 * Math.PI;
             double pf = Math.log(Math.tan(l) + (1/Math.cos(l)));
-            return (int) ((1<<(zoom-1)) * (Math.PI - pf) / Math.PI);
+            return (int) ((1 << (zoom-1)) * (Math.PI - pf) / Math.PI);
         }
 
         public static int lonToTileX(int zoom, double lon) {
             if ((zoom < 3) || (zoom > 18)) return -1;
-            return (int) ((1<<(zoom-3)) * (lon + 180.0) / 45.0);
+            return (int) ((1 << (zoom-3)) * (lon + 180.0) / 45.0);
         }
 
         public void setTileBounds(TileBounds tileBounds) {
@@ -377,7 +377,7 @@ public class TileSelectionBBoxChooser extends JPanel implements BBoxChooser{
         @Override
         public void propertyChange(PropertyChangeEvent evt) {
             if (evt.getPropertyName().equals(TileAddressInputPanel.TILE_BOUNDS_PROP)) {
-                TileBounds tb = (TileBounds)evt.getNewValue();
+                TileBounds tb = (TileBounds) evt.getNewValue();
                 setTileBounds(tb);
                 fireTileBoundsChanged(tb);
             }
@@ -391,7 +391,7 @@ public class TileSelectionBBoxChooser extends JPanel implements BBoxChooser{
         class ZomeLevelChangeHandler implements ChangeListener {
             @Override
             public void stateChanged(ChangeEvent e) {
-                int zoomLevel = (Integer)spZoomLevel.getValue();
+                int zoomLevel = (Integer) spZoomLevel.getValue();
                 valMaxX.setZoomLevel(zoomLevel);
                 valMaxY.setZoomLevel(zoomLevel);
                 valMinX.setZoomLevel(zoomLevel);
@@ -407,13 +407,15 @@ public class TileSelectionBBoxChooser extends JPanel implements BBoxChooser{
                 if (!valMinY.isValid()) return;
                 Point min = new Point(valMinX.getTileIndex(), valMinY.getTileIndex());
                 Point max = new Point(valMaxX.getTileIndex(), valMaxY.getTileIndex());
-                int zoomlevel = (Integer)spZoomLevel.getValue();
+                int zoomlevel = (Integer) spZoomLevel.getValue();
                 TileBounds tb = new TileBounds(min, max, zoomlevel);
                 fireTileBoundsChanged(tb);
             }
 
             @Override
-            public void focusGained(FocusEvent e) {/* irrelevant */}
+            public void focusGained(FocusEvent e) {
+                /* irrelevant */
+            }
 
             @Override
             public void focusLost(FocusEvent e) {
@@ -440,7 +442,6 @@ public class TileSelectionBBoxChooser extends JPanel implements BBoxChooser{
 
         public static final String TILE_BOUNDS_PROP = TileAddressInputPanel.class.getName() + ".tileBounds";
 
-        private JosmTextField tfTileAddress;
         private transient TileAddressValidator valTileAddress;
 
         protected JPanel buildTextPanel() {
@@ -459,12 +460,13 @@ public class TileSelectionBBoxChooser extends JPanel implements BBoxChooser{
             gc.anchor = GridBagConstraints.NORTHWEST;
             gc.fill = GridBagConstraints.HORIZONTAL;
             gc.weightx = 0.0;
-            gc.insets = new Insets(0,0,2,2);
+            gc.insets = new Insets(0, 0, 2, 2);
             pnl.add(new JLabel(tr("Tile address:")), gc);
 
             gc.weightx = 1.0;
             gc.gridx = 1;
-            pnl.add(tfTileAddress = new JosmTextField(), gc);
+            JosmTextField tfTileAddress = new JosmTextField();
+            pnl.add(tfTileAddress, gc);
             valTileAddress = new TileAddressValidator(tfTileAddress);
             SelectAllOnFocusGainedDecorator.decorate(tfTileAddress);
 
@@ -472,7 +474,7 @@ public class TileSelectionBBoxChooser extends JPanel implements BBoxChooser{
             gc.gridx = 2;
             ApplyTileAddressAction applyTileAddressAction = new ApplyTileAddressAction();
             JButton btn = new JButton(applyTileAddressAction);
-            btn.setBorder(BorderFactory.createEmptyBorder(1,1,1,1));
+            btn.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
             pnl.add(btn, gc);
             tfTileAddress.addActionListener(applyTileAddressAction);
             return pnl;
@@ -484,7 +486,7 @@ public class TileSelectionBBoxChooser extends JPanel implements BBoxChooser{
             gc.anchor = GridBagConstraints.NORTHWEST;
             gc.fill = GridBagConstraints.HORIZONTAL;
             gc.weightx = 1.0;
-            gc.insets = new Insets(0,0,5,0);
+            gc.insets = new Insets(0, 0, 5, 0);
             add(buildTextPanel(), gc);
 
             gc.gridy = 1;
@@ -498,11 +500,11 @@ public class TileSelectionBBoxChooser extends JPanel implements BBoxChooser{
         }
 
         public TileAddressInputPanel() {
-            setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+            setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
             build();
         }
 
-        protected void fireTileBoundsChanged(TileBounds tb){
+        protected void fireTileBoundsChanged(TileBounds tb) {
             firePropertyChange(TILE_BOUNDS_PROP, null, tb);
         }
 
@@ -542,7 +544,7 @@ public class TileSelectionBBoxChooser extends JPanel implements BBoxChooser{
             int zoom;
             try {
                 zoom = Integer.parseInt(m.group(1));
-            } catch(NumberFormatException e){
+            } catch (NumberFormatException e) {
                 return false;
             }
             if (zoom < 0 || zoom > 18) return false;
@@ -550,19 +552,19 @@ public class TileSelectionBBoxChooser extends JPanel implements BBoxChooser{
             int x;
             try {
                 x = Integer.parseInt(m.group(2));
-            } catch(NumberFormatException e){
+            } catch (NumberFormatException e) {
                 return false;
             }
             if (x < 0 || x >= Math.pow(2, zoom)) return false;
             int y;
             try {
                 y = Integer.parseInt(m.group(3));
-            } catch(NumberFormatException e){
+            } catch (NumberFormatException e) {
                 return false;
             }
             if (y < 0 || y >= Math.pow(2, zoom)) return false;
 
-            tileBounds = new TileBounds(new Point(x,y), new Point(x,y), zoom);
+            tileBounds = new TileBounds(new Point(x, y), new Point(x, y), zoom);
             return true;
         }
 
@@ -606,7 +608,7 @@ public class TileSelectionBBoxChooser extends JPanel implements BBoxChooser{
                 } else {
                     tileIndex = Integer.parseInt(value);
                 }
-            } catch(NumberFormatException e) {
+            } catch (NumberFormatException e) {
                 return false;
             }
             if (tileIndex < 0 || tileIndex >= Math.pow(2, zoomLevel)) return false;
@@ -630,20 +632,19 @@ public class TileSelectionBBoxChooser extends JPanel implements BBoxChooser{
 
     /**
      * Represents a rectangular area of tiles at a given zoom level.
-     *
      */
-    private static class TileBounds {
-        public Point min;
-        public Point max;
-        public int zoomLevel;
+    private static final class TileBounds {
+        private Point min;
+        private Point max;
+        private int zoomLevel;
 
-        public TileBounds() {
+        private TileBounds() {
             zoomLevel = 0;
-            min = new Point(0,0);
-            max = new Point(0,0);
+            min = new Point(0, 0);
+            max = new Point(0, 0);
         }
 
-        public TileBounds(Point min, Point max, int zoomLevel) {
+        private TileBounds(Point min, Point max, int zoomLevel) {
             this.min = min;
             this.max = max;
             this.zoomLevel = zoomLevel;
@@ -651,10 +652,10 @@ public class TileSelectionBBoxChooser extends JPanel implements BBoxChooser{
 
         @Override
         public String toString() {
-            StringBuilder sb = new StringBuilder();
-            sb.append("min=").append(min.x).append(",").append(min.y).append(",");
-            sb.append("max=").append(max.x).append(",").append(max.y).append(",");
-            sb.append("zoom=").append(zoomLevel);
+            StringBuilder sb = new StringBuilder(24);
+            sb.append("min=").append(min.x).append(',').append(min.y)
+              .append(",max=").append(max.x).append(',').append(max.y)
+              .append(",zoom=").append(zoomLevel);
             return sb.toString();
         }
     }
@@ -662,30 +663,28 @@ public class TileSelectionBBoxChooser extends JPanel implements BBoxChooser{
     /**
      * The map view used in this bounding box chooser
      */
-    private static class TileBoundsMapView extends JMapViewer {
+    private static final class TileBoundsMapView extends JMapViewer {
         private Point min;
         private Point max;
 
-        public TileBoundsMapView() {
+        private TileBoundsMapView() {
             setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY));
             TileLoader loader = tileController.getTileLoader();
             if (loader instanceof OsmTileLoader) {
-                ((OsmTileLoader)loader).headers.put("User-Agent", Version.getInstance().getFullAgentString());
+                ((OsmTileLoader) loader).headers.put("User-Agent", Version.getInstance().getFullAgentString());
             }
         }
 
-        public void setBoundingBox(Bounds bbox){
+        public void setBoundingBox(Bounds bbox) {
             if (bbox == null) {
                 min = null;
                 max = null;
             } else {
-                int y1 = tileSource.LatToY(bbox.getMinLat(), MAX_ZOOM);
-                int y2 = tileSource.LatToY(bbox.getMaxLat(), MAX_ZOOM);
-                int x1 = tileSource.LonToX(bbox.getMinLon(), MAX_ZOOM);
-                int x2 = tileSource.LonToX(bbox.getMaxLon(), MAX_ZOOM);
+                Point p1 = tileSource.latLonToXY(bbox.getMinLat(), bbox.getMinLon(), MAX_ZOOM);
+                Point p2 = tileSource.latLonToXY(bbox.getMaxLat(), bbox.getMaxLon(), MAX_ZOOM);
 
-                min = new Point(Math.min(x1, x2), Math.min(y1, y2));
-                max = new Point(Math.max(x1, x2), Math.max(y1, y2));
+                min = new Point(Math.min(p1.x, p2.x), Math.min(p1.y, p2.y));
+                max = new Point(Math.max(p1.x, p2.x), Math.max(p1.y, p2.y));
             }
             repaint();
         }
diff --git a/src/org/openstreetmap/josm/gui/bbox/package-info.java b/src/org/openstreetmap/josm/gui/bbox/package-info.java
new file mode 100644
index 0000000..97062c6
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/bbox/package-info.java
@@ -0,0 +1,6 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Provides GUI classes for displaying a customizable and interactive bounding box.
+ */
+package org.openstreetmap.josm.gui.bbox;
diff --git a/src/org/openstreetmap/josm/gui/conflict/ConflictColors.java b/src/org/openstreetmap/josm/gui/conflict/ConflictColors.java
index 941a94d..c8cbe6e 100644
--- a/src/org/openstreetmap/josm/gui/conflict/ConflictColors.java
+++ b/src/org/openstreetmap/josm/gui/conflict/ConflictColors.java
@@ -10,39 +10,39 @@ import org.openstreetmap.josm.data.Preferences.ColorKey;
 
 public enum ConflictColors implements ColorKey {
 
-    BGCOLOR_NO_CONFLICT(marktr("Conflict background: no conflict"), new Color(234,234,234)),
-    BGCOLOR_DECIDED(marktr("Conflict background: decided"), new Color(217,255,217)),
-    BGCOLOR_UNDECIDED(marktr("Conflict background: undecided"), new Color(255,197,197)),
+    BGCOLOR_NO_CONFLICT(marktr("Conflict background: no conflict"), new Color(234, 234, 234)),
+    BGCOLOR_DECIDED(marktr("Conflict background: decided"), new Color(217, 255, 217)),
+    BGCOLOR_UNDECIDED(marktr("Conflict background: undecided"), new Color(255, 197, 197)),
     BGCOLOR_DROP(marktr("Conflict background: drop"), Color.white),
-    BGCOLOR_KEEP(marktr("Conflict background: keep"), new Color(217,255,217)),
-    BGCOLOR_COMBINED(marktr("Conflict background: combined"), new Color(217,255,217)),
-    BGCOLOR_SELECTED(marktr("Conflict background: selected"), new Color(143,170,255)),
+    BGCOLOR_KEEP(marktr("Conflict background: keep"), new Color(217, 255, 217)),
+    BGCOLOR_COMBINED(marktr("Conflict background: combined"), new Color(217, 255, 217)),
+    BGCOLOR_SELECTED(marktr("Conflict background: selected"), new Color(143, 170, 255)),
 
     FGCOLOR_UNDECIDED(marktr("Conflict foreground: undecided"), Color.black),
     FGCOLOR_DROP(marktr("Conflict foreground: drop"), Color.lightGray),
     FGCOLOR_KEEP(marktr("Conflict foreground: keep"), Color.black),
 
-    BGCOLOR_EMPTY_ROW(marktr("Conflict background: empty row"), new Color(234,234,234)),
-    BGCOLOR_FROZEN(marktr("Conflict background: frozen"), new Color(234,234,234)),
+    BGCOLOR_EMPTY_ROW(marktr("Conflict background: empty row"), new Color(234, 234, 234)),
+    BGCOLOR_FROZEN(marktr("Conflict background: frozen"), new Color(234, 234, 234)),
     BGCOLOR_PARTICIPATING_IN_COMPARISON(marktr("Conflict background: in comparison"), Color.black),
     FGCOLOR_PARTICIPATING_IN_COMPARISON(marktr("Conflict foreground: in comparison"), Color.white),
     BGCOLOR(marktr("Conflict background"), Color.white),
     FGCOLOR(marktr("Conflict foreground"), Color.black),
 
-    BGCOLOR_NOT_IN_OPPOSITE(marktr("Conflict background: not in opposite"), new Color(255,197,197)),
-    BGCOLOR_IN_OPPOSITE(marktr("Conflict background: in opposite"), new Color(255,234,213)),
-    BGCOLOR_SAME_POSITION_IN_OPPOSITE(marktr("Conflict background: same position in opposite"), new Color(217,255,217)),
+    BGCOLOR_NOT_IN_OPPOSITE(marktr("Conflict background: not in opposite"), new Color(255, 197, 197)),
+    BGCOLOR_IN_OPPOSITE(marktr("Conflict background: in opposite"), new Color(255, 234, 213)),
+    BGCOLOR_SAME_POSITION_IN_OPPOSITE(marktr("Conflict background: same position in opposite"), new Color(217, 255, 217)),
 
-    BGCOLOR_TAG_KEEP_ONE (marktr("Conflict background: keep one tag"), new Color(217,255,217)),
+    BGCOLOR_TAG_KEEP_ONE (marktr("Conflict background: keep one tag"), new Color(217, 255, 217)),
     FGCOLOR_TAG_KEEP_ONE (marktr("Conflict foreground: keep one tag"), Color.black),
     BGCOLOR_TAG_KEEP_NONE(marktr("Conflict background: drop tag"), Color.lightGray),
     FGCOLOR_TAG_KEEP_NONE(marktr("Conflict foreground: drop tag"), Color.black),
-    BGCOLOR_TAG_KEEP_ALL (marktr("Conflict background: keep all tags"), new Color(255,234,213)),
+    BGCOLOR_TAG_KEEP_ALL (marktr("Conflict background: keep all tags"), new Color(255, 234, 213)),
     FGCOLOR_TAG_KEEP_ALL (marktr("Conflict foreground: keep all tags"), Color.black),
-    BGCOLOR_TAG_SUM_ALL_NUM(marktr("Conflict background: sum all numeric tags"), new Color(255,234,213)),
+    BGCOLOR_TAG_SUM_ALL_NUM(marktr("Conflict background: sum all numeric tags"), new Color(255, 234, 213)),
     FGCOLOR_TAG_SUM_ALL_NUM(marktr("Conflict foreground: sum all numeric tags"), Color.black),
 
-    BGCOLOR_MEMBER_KEEP  (marktr("Conflict background: keep member"), new Color(217,255,217)),
+    BGCOLOR_MEMBER_KEEP  (marktr("Conflict background: keep member"), new Color(217, 255, 217)),
     FGCOLOR_MEMBER_KEEP  (marktr("Conflict foreground: keep member"), Color.black),
     BGCOLOR_MEMBER_REMOVE(marktr("Conflict background: remove member"), Color.lightGray),
     FGCOLOR_MEMBER_REMOVE(marktr("Conflict foreground: remove member"), Color.black);
@@ -50,7 +50,7 @@ public enum ConflictColors implements ColorKey {
     private final String name;
     private final Color defaultColor;
 
-    private ConflictColors(String name, Color defaultColor) {
+    ConflictColors(String name, Color defaultColor) {
         this.name = name;
         this.defaultColor = defaultColor;
     }
diff --git a/src/org/openstreetmap/josm/gui/conflict/pair/ConflictResolver.java b/src/org/openstreetmap/josm/gui/conflict/pair/ConflictResolver.java
index 5794a01..bdcc627 100644
--- a/src/org/openstreetmap/josm/gui/conflict/pair/ConflictResolver.java
+++ b/src/org/openstreetmap/josm/gui/conflict/pair/ConflictResolver.java
@@ -86,8 +86,8 @@ public class ConflictResolver extends JPanel implements PropertyChangeListener
      * loads the required icons
      */
     protected final void loadIcons() {
-        mergeComplete = ImageProvider.get("dialogs", "valid" );
-        mergeIncomplete = ImageProvider.get("dialogs/conflict", "mergeincomplete" );
+        mergeComplete = ImageProvider.get("dialogs", "valid");
+        mergeIncomplete = ImageProvider.get("dialogs/conflict", "mergeincomplete");
     }
 
     /**
@@ -170,19 +170,20 @@ public class ConflictResolver extends JPanel implements PropertyChangeListener
     @Override
     public void propertyChange(PropertyChangeEvent evt) {
         if (evt.getPropertyName().equals(TagMergeModel.PROP_NUM_UNDECIDED_TAGS)) {
-            int newValue = (Integer)evt.getNewValue();
+            int newValue = (Integer) evt.getNewValue();
             if (newValue == 0) {
                 tabbedPane.setTitleAt(1, tr("Tags"));
                 tabbedPane.setToolTipTextAt(1, tr("No pending tag conflicts to be resolved"));
                 tabbedPane.setIconAt(1, mergeComplete);
             } else {
                 tabbedPane.setTitleAt(1, trn("Tags({0} conflict)", "Tags({0} conflicts)", newValue, newValue));
-                tabbedPane.setToolTipTextAt(1, trn("{0} pending tag conflict to be resolved", "{0} pending tag conflicts to be resolved", newValue, newValue));
+                tabbedPane.setToolTipTextAt(1,
+                        trn("{0} pending tag conflict to be resolved", "{0} pending tag conflicts to be resolved", newValue, newValue));
                 tabbedPane.setIconAt(1, mergeIncomplete);
             }
             updateResolvedCompletely();
         } else if (evt.getPropertyName().equals(ListMergeModel.FROZEN_PROP)) {
-            boolean frozen = (Boolean)evt.getNewValue();
+            boolean frozen = (Boolean) evt.getNewValue();
             if (evt.getSource() == nodeListMerger.getModel() && my instanceof Way) {
                 if (frozen) {
                     tabbedPane.setTitleAt(2, tr("Nodes(resolved)"));
@@ -190,7 +191,7 @@ public class ConflictResolver extends JPanel implements PropertyChangeListener
                     tabbedPane.setIconAt(2, mergeComplete);
                 } else {
                     tabbedPane.setTitleAt(2, tr("Nodes(with conflicts)"));
-                    tabbedPane.setToolTipTextAt(2,tr("Pending conflicts in the node list of this way"));
+                    tabbedPane.setToolTipTextAt(2, tr("Pending conflicts in the node list of this way"));
                     tabbedPane.setIconAt(2, mergeIncomplete);
                 }
             } else if (evt.getSource() == relationMemberMerger.getModel() && my instanceof Relation) {
@@ -206,7 +207,7 @@ public class ConflictResolver extends JPanel implements PropertyChangeListener
             }
             updateResolvedCompletely();
         } else if (evt.getPropertyName().equals(PropertiesMergeModel.RESOLVED_COMPLETELY_PROP)) {
-            boolean resolved = (Boolean)evt.getNewValue();
+            boolean resolved = (Boolean) evt.getNewValue();
             if (resolved) {
                 tabbedPane.setTitleAt(0, tr("Properties"));
                 tabbedPane.setToolTipTextAt(0, tr("No pending property conflicts"));
@@ -240,18 +241,18 @@ public class ConflictResolver extends JPanel implements PropertyChangeListener
         tabbedPane.setEnabledAt(1, true);
 
         if (my instanceof Node) {
-            tabbedPane.setEnabledAt(2,false);
-            tabbedPane.setEnabledAt(3,false);
+            tabbedPane.setEnabledAt(2, false);
+            tabbedPane.setEnabledAt(3, false);
         } else if (my instanceof Way) {
             nodeListMerger.populate(conflict);
             tabbedPane.setEnabledAt(2, true);
             tabbedPane.setEnabledAt(3, false);
-            tabbedPane.setTitleAt(3,tr("Members"));
+            tabbedPane.setTitleAt(3, tr("Members"));
             tabbedPane.setIconAt(3, null);
         } else if (my instanceof Relation) {
             relationMemberMerger.populate(conflict);
             tabbedPane.setEnabledAt(2, false);
-            tabbedPane.setTitleAt(2,tr("Nodes"));
+            tabbedPane.setTitleAt(2, tr("Nodes"));
             tabbedPane.setIconAt(2, null);
             tabbedPane.setEnabledAt(3, true);
         }
diff --git a/src/org/openstreetmap/josm/gui/conflict/pair/IConflictResolver.java b/src/org/openstreetmap/josm/gui/conflict/pair/IConflictResolver.java
index 9a6201c..6811425 100644
--- a/src/org/openstreetmap/josm/gui/conflict/pair/IConflictResolver.java
+++ b/src/org/openstreetmap/josm/gui/conflict/pair/IConflictResolver.java
@@ -7,6 +7,6 @@ import org.openstreetmap.josm.data.osm.OsmPrimitive;
 public interface IConflictResolver {
 
     void deletePrimitive(boolean deleted);
-    void populate(Conflict<? extends OsmPrimitive> conflict);
 
+    void populate(Conflict<? extends OsmPrimitive> conflict);
 }
diff --git a/src/org/openstreetmap/josm/gui/conflict/pair/ListMergeModel.java b/src/org/openstreetmap/josm/gui/conflict/pair/ListMergeModel.java
index 053b3a0..7ca19bb 100644
--- a/src/org/openstreetmap/josm/gui/conflict/pair/ListMergeModel.java
+++ b/src/org/openstreetmap/josm/gui/conflict/pair/ListMergeModel.java
@@ -12,10 +12,12 @@ import static org.openstreetmap.josm.tools.I18n.tr;
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.util.ArrayList;
-import java.util.HashMap;
+import java.util.EnumMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Observable;
+import java.util.Set;
 
 import javax.swing.AbstractListModel;
 import javax.swing.ComboBoxModel;
@@ -84,7 +86,7 @@ public abstract class ListMergeModel<T extends PrimitiveId> extends Observable {
     protected EntriesSelectionModel theirEntriesSelectionModel;
     protected EntriesSelectionModel mergedEntriesSelectionModel;
 
-    private final List<PropertyChangeListener> listeners;
+    private final Set<PropertyChangeListener> listeners;
     private boolean isFrozen = false;
     private final ComparePairListModel comparePairListModel;
 
@@ -123,8 +125,8 @@ public abstract class ListMergeModel<T extends PrimitiveId> extends Observable {
     protected abstract void setValueAt(DefaultTableModel model, Object value, int row, int col);
 
     /**
-     *
-     * @param entry
+     * Replies primitive from my dataset referenced by entry
+     * @param entry entry
      * @return Primitive from my dataset referenced by entry
      */
     public OsmPrimitive getMyPrimitive(T entry) {
@@ -136,7 +138,7 @@ public abstract class ListMergeModel<T extends PrimitiveId> extends Observable {
         if (result == null && mergedMap != null) {
             PrimitiveId id = mergedMap.get(entry);
             if (id == null && entry instanceof OsmPrimitive) {
-                id = mergedMap.get(((OsmPrimitive)entry).getPrimitiveId());
+                id = mergedMap.get(((OsmPrimitive) entry).getPrimitiveId());
             }
             if (id != null) {
                 result = myDataset.getPrimitiveById(id);
@@ -181,8 +183,11 @@ public abstract class ListMergeModel<T extends PrimitiveId> extends Observable {
         return getTheirEntries().size();
     }
 
+    /**
+     * Constructs a new {@code ListMergeModel}.
+     */
     public ListMergeModel() {
-        entries = new HashMap<>();
+        entries = new EnumMap<>(ListRole.class);
         for (ListRole role : ListRole.values()) {
             entries.put(role, new ArrayList<T>());
         }
@@ -195,22 +200,22 @@ public abstract class ListMergeModel<T extends PrimitiveId> extends Observable {
         theirEntriesSelectionModel = new EntriesSelectionModel(entries.get(THEIR_ENTRIES));
         mergedEntriesSelectionModel =  new EntriesSelectionModel(entries.get(MERGED_ENTRIES));
 
-        listeners = new ArrayList<>();
+        listeners = new HashSet<>();
         comparePairListModel = new ComparePairListModel();
 
         setFrozen(true);
     }
 
     public void addPropertyChangeListener(PropertyChangeListener listener) {
-        synchronized(listeners) {
-            if (listener != null && ! listeners.contains(listener)) {
+        synchronized (listeners) {
+            if (listener != null && !listeners.contains(listener)) {
                 listeners.add(listener);
             }
         }
     }
 
     public void removePropertyChangeListener(PropertyChangeListener listener) {
-        synchronized(listeners) {
+        synchronized (listeners) {
             if (listener != null && listeners.contains(listener)) {
                 listeners.remove(listener);
             }
@@ -218,7 +223,7 @@ public abstract class ListMergeModel<T extends PrimitiveId> extends Observable {
     }
 
     protected void fireFrozenChanged(boolean oldValue, boolean newValue) {
-        synchronized(listeners) {
+        synchronized (listeners) {
             PropertyChangeEvent evt = new PropertyChangeEvent(this, FROZEN_PROP, oldValue, newValue);
             for (PropertyChangeListener listener: listeners) {
                 listener.propertyChange(evt);
@@ -268,7 +273,7 @@ public abstract class ListMergeModel<T extends PrimitiveId> extends Observable {
         notifyObservers();
     }
 
-    protected void copyToTop(ListRole role, int []rows) {
+    protected void copyToTop(ListRole role, int[] rows) {
         copy(role, rows, 0);
         mergedEntriesSelectionModel.setSelectionInterval(0, rows.length -1);
     }
@@ -280,7 +285,7 @@ public abstract class ListMergeModel<T extends PrimitiveId> extends Observable {
      *
      * @param rows the indices
      */
-    public void copyMyToTop(int [] rows) {
+    public void copyMyToTop(int[] rows) {
         copyToTop(MY_ENTRIES, rows);
     }
 
@@ -291,7 +296,7 @@ public abstract class ListMergeModel<T extends PrimitiveId> extends Observable {
      *
      * @param rows the indices
      */
-    public void copyTheirToTop(int [] rows) {
+    public void copyTheirToTop(int[] rows) {
         copyToTop(THEIR_ENTRIES, rows);
     }
 
@@ -304,7 +309,7 @@ public abstract class ListMergeModel<T extends PrimitiveId> extends Observable {
      * @param rows the indices
      */
 
-    public void copyToEnd(ListRole source, int [] rows) {
+    public void copyToEnd(ListRole source, int[] rows) {
         copy(source, rows, getMergedEntriesSize());
         mergedEntriesSelectionModel.setSelectionInterval(getMergedEntriesSize()-rows.length, getMergedEntriesSize() -1);
 
@@ -317,7 +322,7 @@ public abstract class ListMergeModel<T extends PrimitiveId> extends Observable {
      *
      * @param rows the indices
      */
-    public void copyMyToEnd(int [] rows) {
+    public void copyMyToEnd(int[] rows) {
         copyToEnd(MY_ENTRIES, rows);
     }
 
@@ -328,7 +333,7 @@ public abstract class ListMergeModel<T extends PrimitiveId> extends Observable {
      *
      * @param rows the indices
      */
-    public void copyTheirToEnd(int [] rows) {
+    public void copyTheirToEnd(int[] rows) {
         copyToEnd(THEIR_ENTRIES, rows);
     }
 
@@ -349,17 +354,17 @@ public abstract class ListMergeModel<T extends PrimitiveId> extends Observable {
 
     protected void alertCopyFailedForDeletedPrimitives(List<PrimitiveId> deletedIds) {
         List<String> items = new ArrayList<>();
-        for (int i=0; i<Math.min(MAX_DELETED_PRIMITIVE_IN_DIALOG, deletedIds.size()); i++) {
+        for (int i = 0; i < Math.min(MAX_DELETED_PRIMITIVE_IN_DIALOG, deletedIds.size()); i++) {
             items.add(deletedIds.get(i).toString());
         }
         if (deletedIds.size() > MAX_DELETED_PRIMITIVE_IN_DIALOG) {
             items.add(tr("{0} more...", deletedIds.size() - MAX_DELETED_PRIMITIVE_IN_DIALOG));
         }
         StringBuilder sb = new StringBuilder();
-        sb.append("<html>");
-        sb.append(tr("The following objects could not be copied to the target object<br>because they are deleted in the target dataset:"));
-        sb.append(Utils.joinAsHtmlUnorderedList(items));
-        sb.append("</html>");
+        sb.append("<html>")
+          .append(tr("The following objects could not be copied to the target object<br>because they are deleted in the target dataset:"))
+          .append(Utils.joinAsHtmlUnorderedList(items))
+          .append("</html>");
         HelpAwareOptionPane.showOptionDialog(
                 Main.parent,
                 sb.toString(),
@@ -396,7 +401,7 @@ public abstract class ListMergeModel<T extends PrimitiveId> extends Observable {
         getMergedEntries().clear();
 
         int[] rows = new int[entries.get(source).size()];
-        for (int i=0; i<rows.length; i++) {
+        for (int i = 0; i < rows.length; i++) {
             rows[i] = i;
         }
         copy(source, rows, 0);
@@ -411,7 +416,7 @@ public abstract class ListMergeModel<T extends PrimitiveId> extends Observable {
      * @param current the row index before which the nodes are inserted
      * @throws IllegalArgumentException if current < 0 or >= #nodes in list of merged nodes
      */
-    protected void copyBeforeCurrent(ListRole source, int [] rows, int current) {
+    protected void copyBeforeCurrent(ListRole source, int[] rows, int current) {
         copy(source, rows, current);
         mergedEntriesSelectionModel.setSelectionInterval(current, current + rows.length-1);
     }
@@ -424,8 +429,8 @@ public abstract class ListMergeModel<T extends PrimitiveId> extends Observable {
      * @param current the row index before which the nodes are inserted
      * @throws IllegalArgumentException if current < 0 or >= #nodes in list of merged nodes
      */
-    public void copyMyBeforeCurrent(int [] rows, int current) {
-        copyBeforeCurrent(MY_ENTRIES,rows,current);
+    public void copyMyBeforeCurrent(int[] rows, int current) {
+        copyBeforeCurrent(MY_ENTRIES, rows, current);
     }
 
     /**
@@ -436,8 +441,8 @@ public abstract class ListMergeModel<T extends PrimitiveId> extends Observable {
      * @param current the row index before which the nodes are inserted
      * @throws IllegalArgumentException if current < 0 or >= #nodes in list of merged nodes
      */
-    public void copyTheirBeforeCurrent(int [] rows, int current) {
-        copyBeforeCurrent(THEIR_ENTRIES,rows,current);
+    public void copyTheirBeforeCurrent(int[] rows, int current) {
+        copyBeforeCurrent(THEIR_ENTRIES, rows, current);
     }
 
     /**
@@ -449,7 +454,7 @@ public abstract class ListMergeModel<T extends PrimitiveId> extends Observable {
      * @param current the row index after which the nodes are inserted
      * @throws IllegalArgumentException if current < 0 or >= #nodes in list of merged nodes
      */
-    protected void copyAfterCurrent(ListRole source, int [] rows, int current) {
+    protected void copyAfterCurrent(ListRole source, int[] rows, int current) {
         copy(source, rows, current + 1);
         mergedEntriesSelectionModel.setSelectionInterval(current+1, current + rows.length-1);
         notifyObservers();
@@ -463,7 +468,7 @@ public abstract class ListMergeModel<T extends PrimitiveId> extends Observable {
      * @param current the row index after which the nodes are inserted
      * @throws IllegalArgumentException if current < 0 or >= #nodes in list of merged nodes
      */
-    public void copyMyAfterCurrent(int [] rows, int current) {
+    public void copyMyAfterCurrent(int[] rows, int current) {
         copyAfterCurrent(MY_ENTRIES, rows, current);
     }
 
@@ -475,7 +480,7 @@ public abstract class ListMergeModel<T extends PrimitiveId> extends Observable {
      * @param current the row index after which the nodes are inserted
      * @throws IllegalArgumentException if current < 0 or >= #nodes in list of merged nodes
      */
-    public void copyTheirAfterCurrent(int [] rows, int current) {
+    public void copyTheirAfterCurrent(int[] rows, int current) {
         copyAfterCurrent(THEIR_ENTRIES, rows, current);
     }
 
@@ -486,7 +491,7 @@ public abstract class ListMergeModel<T extends PrimitiveId> extends Observable {
      * @param rows the indices
      *
      */
-    public void moveUpMerged(int [] rows) {
+    public void moveUpMerged(int[] rows) {
         if (rows == null || rows.length == 0)
             return;
         if (rows[0] == 0)
@@ -512,14 +517,14 @@ public abstract class ListMergeModel<T extends PrimitiveId> extends Observable {
      *
      * @param rows the indices
      */
-    public void moveDownMerged(int [] rows) {
+    public void moveDownMerged(int[] rows) {
         if (rows == null || rows.length == 0)
             return;
         List<T> mergedEntries = getMergedEntries();
         if (rows[rows.length -1] == mergedEntries.size() -1)
             // can't move down
             return;
-        for (int i = rows.length-1; i>=0;i--) {
+        for (int i = rows.length-1; i >= 0; i--) {
             int row = rows[i];
             T n = mergedEntries.get(row);
             mergedEntries.remove(row);
@@ -539,13 +544,13 @@ public abstract class ListMergeModel<T extends PrimitiveId> extends Observable {
      *
      * @param rows the indices
      */
-    public void removeMerged(int [] rows) {
+    public void removeMerged(int[] rows) {
         if (rows == null || rows.length == 0)
             return;
 
         List<T> mergedEntries = getMergedEntries();
 
-        for (int i = rows.length-1; i>=0;i--) {
+        for (int i = rows.length-1; i >= 0; i--) {
             mergedEntries.remove(rows[i]);
         }
         fireModelDataChanged();
@@ -563,8 +568,8 @@ public abstract class ListMergeModel<T extends PrimitiveId> extends Observable {
 
         if (getMyEntriesSize() != getTheirEntriesSize())
             return false;
-        for (int i=0; i < getMyEntriesSize(); i++) {
-            if (! isEqualEntry(getMyEntries().get(i), getTheirEntries().get(i)))
+        for (int i = 0; i < getMyEntriesSize(); i++) {
+            if (!isEqualEntry(getMyEntries().get(i), getTheirEntries().get(i)))
                 return false;
         }
         return true;
@@ -594,8 +599,7 @@ public abstract class ListMergeModel<T extends PrimitiveId> extends Observable {
         @Override
         public int getRowCount() {
             int count = Math.max(getMyEntries().size(), getMergedEntries().size());
-            count = Math.max(count, getTheirEntries().size());
-            return count;
+            return Math.max(count, getTheirEntries().size());
         }
 
         @Override
@@ -612,7 +616,7 @@ public abstract class ListMergeModel<T extends PrimitiveId> extends Observable {
 
         @Override
         public void setValueAt(Object value, int row, int col) {
-            ListMergeModel.this.setValueAt(this, value,row,col);
+            ListMergeModel.this.setValueAt(this, value, row, col);
         }
 
         public ListMergeModel<T> getListMergeModel() {
@@ -707,7 +711,7 @@ public abstract class ListMergeModel<T extends PrimitiveId> extends Observable {
             if (value instanceof OsmPrimitive) {
                 return (OsmPrimitive) value;
             } else if (value instanceof RelationMember) {
-                return ((RelationMember)value).getMember();
+                return ((RelationMember) value).getMember();
             } else {
                 Main.error("Unknown object type: "+value);
                 return null;
@@ -822,7 +826,7 @@ public abstract class ListMergeModel<T extends PrimitiveId> extends Observable {
     public class ComparePairListModel extends AbstractListModel<ComparePairType> implements ComboBoxModel<ComparePairType> {
 
         private int selectedIdx;
-        private final transient List<ComparePairType> compareModes;
+        private final List<ComparePairType> compareModes;
 
         /**
          * Constructs a new {@code ComparePairListModel}.
diff --git a/src/org/openstreetmap/josm/gui/conflict/pair/ListMerger.java b/src/org/openstreetmap/josm/gui/conflict/pair/ListMerger.java
index 5ccc7f7..d6aa74a 100644
--- a/src/org/openstreetmap/josm/gui/conflict/pair/ListMerger.java
+++ b/src/org/openstreetmap/josm/gui/conflict/pair/ListMerger.java
@@ -44,8 +44,9 @@ import org.openstreetmap.josm.tools.ImageProvider;
 /**
  * A UI component for resolving conflicts in two lists of entries of type T.
  *
- * @param <T>  the type of the entries
+ * @param <T> the type of the entries
  * @see ListMergeModel
+ * @since 1631
  */
 public abstract class ListMerger<T extends PrimitiveId> extends JPanel implements PropertyChangeListener, Observer {
     protected OsmPrimitivesTable myEntriesTable;
@@ -73,14 +74,16 @@ public abstract class ListMerger<T extends PrimitiveId> extends JPanel implement
 
     private transient AdjustmentSynchronizer adjustmentSynchronizer;
 
-    private  JLabel lblMyVersion;
-    private  JLabel lblMergedVersion;
-    private  JLabel lblTheirVersion;
+    private JLabel lblMyVersion;
+    private JLabel lblMergedVersion;
+    private JLabel lblTheirVersion;
 
-    private  JLabel lblFrozenState;
+    private JLabel lblFrozenState;
 
     protected abstract JScrollPane buildMyElementsTable();
+
     protected abstract JScrollPane buildMergedElementsTable();
+
     protected abstract JScrollPane buildTheirElementsTable();
 
     protected JScrollPane embeddInScrollPane(JTable table) {
@@ -123,8 +126,7 @@ public abstract class ListMerger<T extends PrimitiveId> extends JPanel implement
     }
 
     protected JPanel buildLeftButtonPanel() {
-        JPanel pnl = new JPanel();
-        pnl.setLayout(new GridBagLayout());
+        JPanel pnl = new JPanel(new GridBagLayout());
         GridBagConstraints gc = new GridBagConstraints();
 
         gc.gridx = 0;
@@ -166,8 +168,7 @@ public abstract class ListMerger<T extends PrimitiveId> extends JPanel implement
     }
 
     protected JPanel buildRightButtonPanel() {
-        JPanel pnl = new JPanel();
-        pnl.setLayout(new GridBagLayout());
+        JPanel pnl = new JPanel(new GridBagLayout());
         GridBagConstraints gc = new GridBagConstraints();
 
         gc.gridx = 0;
@@ -199,8 +200,7 @@ public abstract class ListMerger<T extends PrimitiveId> extends JPanel implement
     }
 
     protected JPanel buildMergedListControlButtons() {
-        JPanel pnl = new JPanel();
-        pnl.setLayout(new GridBagLayout());
+        JPanel pnl = new JPanel(new GridBagLayout());
         GridBagConstraints gc = new GridBagConstraints();
 
         gc.gridx = 0;
@@ -228,16 +228,14 @@ public abstract class ListMerger<T extends PrimitiveId> extends JPanel implement
     }
 
     protected JPanel buildAdjustmentLockControlPanel(JCheckBox cb) {
-        JPanel panel = new JPanel();
-        panel.setLayout(new FlowLayout(FlowLayout.RIGHT));
+        JPanel panel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
         panel.add(new JLabel(tr("lock scrolling")));
         panel.add(cb);
         return panel;
     }
 
     protected JPanel buildComparePairSelectionPanel() {
-        JPanel p = new JPanel();
-        p.setLayout(new FlowLayout(FlowLayout.LEFT));
+        JPanel p = new JPanel(new FlowLayout(FlowLayout.LEFT));
         p.add(new JLabel(tr("Compare ")));
         JosmComboBox<ComparePairType> cbComparePair = new JosmComboBox<>(model.getComparePairListModel());
         cbComparePair.setRenderer(new ComparePairListCellRenderer());
@@ -246,8 +244,7 @@ public abstract class ListMerger<T extends PrimitiveId> extends JPanel implement
     }
 
     protected JPanel buildFrozeStateControlPanel() {
-        JPanel p = new JPanel();
-        p.setLayout(new FlowLayout(FlowLayout.LEFT));
+        JPanel p = new JPanel(new FlowLayout(FlowLayout.LEFT));
         lblFrozenState = new JLabel();
         p.add(lblFrozenState);
         freezeAction = new FreezeAction();
@@ -272,7 +269,7 @@ public abstract class ListMerger<T extends PrimitiveId> extends JPanel implement
         gc.anchor = GridBagConstraints.CENTER;
         gc.weightx = 0.0;
         gc.weighty = 0.0;
-        gc.insets = new Insets(10,0,0,0);
+        gc.insets = new Insets(10, 0, 0, 0);
         lblMyVersion = new JLabel(tr("My version"));
         lblMyVersion.setToolTipText(tr("List of elements in my dataset, i.e. the local dataset"));
         add(lblMyVersion, gc);
@@ -280,7 +277,8 @@ public abstract class ListMerger<T extends PrimitiveId> extends JPanel implement
         gc.gridx = 2;
         gc.gridy = 0;
         lblMergedVersion = new JLabel(tr("Merged version"));
-        lblMergedVersion.setToolTipText(tr("List of merged elements. They will replace the list of my elements when the merge decisions are applied."));
+        lblMergedVersion.setToolTipText(
+                tr("List of merged elements. They will replace the list of my elements when the merge decisions are applied."));
         add(lblMergedVersion, gc);
 
         gc.gridx = 4;
@@ -298,7 +296,7 @@ public abstract class ListMerger<T extends PrimitiveId> extends JPanel implement
         gc.anchor = GridBagConstraints.FIRST_LINE_START;
         gc.weightx = 0.33;
         gc.weighty = 0.0;
-        gc.insets = new Insets(0,0,0,0);
+        gc.insets = new Insets(0, 0, 0, 0);
         JCheckBox cbLockMyScrolling = new JCheckBox();
         cbLockMyScrolling.setName("checkbox.lockmyscrolling");
         add(buildAdjustmentLockControlPanel(cbLockMyScrolling), gc);
@@ -324,8 +322,9 @@ public abstract class ListMerger<T extends PrimitiveId> extends JPanel implement
         gc.anchor = GridBagConstraints.FIRST_LINE_START;
         gc.weightx = 0.33;
         gc.weighty = 1.0;
-        gc.insets = new Insets(0,0,0,0);
+        gc.insets = new Insets(0, 0, 0, 0);
         JScrollPane pane = buildMyElementsTable();
+        lblMyVersion.setLabelFor(pane);
         adjustmentSynchronizer.adapt(cbLockMyScrolling, pane.getVerticalScrollBar());
         add(pane, gc);
 
@@ -344,6 +343,7 @@ public abstract class ListMerger<T extends PrimitiveId> extends JPanel implement
         gc.weightx = 0.33;
         gc.weighty = 0.0;
         pane = buildMergedElementsTable();
+        lblMergedVersion.setLabelFor(pane);
         adjustmentSynchronizer.adapt(cbLockMergedScrolling, pane.getVerticalScrollBar());
         add(pane, gc);
 
@@ -362,6 +362,7 @@ public abstract class ListMerger<T extends PrimitiveId> extends JPanel implement
         gc.weightx = 0.33;
         gc.weighty = 0.0;
         pane = buildTheirElementsTable();
+        lblTheirVersion.setLabelFor(pane);
         adjustmentSynchronizer.adapt(cbLockTheirScrolling, pane.getVerticalScrollBar());
         add(pane, gc);
 
@@ -402,7 +403,7 @@ public abstract class ListMerger<T extends PrimitiveId> extends JPanel implement
 
     /**
      * Constructs a new {@code ListMerger}.
-     * @param model
+     * @param model list merger model
      */
     public ListMerger(ListMergeModel<T> model) {
         this.model = model;
@@ -484,10 +485,10 @@ public abstract class ListMerger<T extends PrimitiveId> extends JPanel implement
 
         @Override
         public void actionPerformed(ActionEvent e) {
-            int [] mergedRows = mergedEntriesTable.getSelectedRows();
+            int[] mergedRows = mergedEntriesTable.getSelectedRows();
             if (mergedRows == null || mergedRows.length == 0)
                 return;
-            int [] myRows = myEntriesTable.getSelectedRows();
+            int[] myRows = myEntriesTable.getSelectedRows();
             int current = mergedRows[0];
             model.copyMyBeforeCurrent(myRows, current);
         }
@@ -514,10 +515,10 @@ public abstract class ListMerger<T extends PrimitiveId> extends JPanel implement
 
         @Override
         public void actionPerformed(ActionEvent e) {
-            int [] mergedRows = mergedEntriesTable.getSelectedRows();
+            int[] mergedRows = mergedEntriesTable.getSelectedRows();
             if (mergedRows == null || mergedRows.length == 0)
                 return;
-            int [] myRows = myEntriesTable.getSelectedRows();
+            int[] myRows = myEntriesTable.getSelectedRows();
             int current = mergedRows[0];
             model.copyMyAfterCurrent(myRows, current);
         }
@@ -576,10 +577,10 @@ public abstract class ListMerger<T extends PrimitiveId> extends JPanel implement
 
         @Override
         public void actionPerformed(ActionEvent e) {
-            int [] mergedRows = mergedEntriesTable.getSelectedRows();
+            int[] mergedRows = mergedEntriesTable.getSelectedRows();
             if (mergedRows == null || mergedRows.length == 0)
                 return;
-            int [] myRows = theirEntriesTable.getSelectedRows();
+            int[] myRows = theirEntriesTable.getSelectedRows();
             int current = mergedRows[0];
             model.copyTheirBeforeCurrent(myRows, current);
         }
@@ -602,10 +603,10 @@ public abstract class ListMerger<T extends PrimitiveId> extends JPanel implement
 
         @Override
         public void actionPerformed(ActionEvent e) {
-            int [] mergedRows = mergedEntriesTable.getSelectedRows();
+            int[] mergedRows = mergedEntriesTable.getSelectedRows();
             if (mergedRows == null || mergedRows.length == 0)
                 return;
-            int [] myRows = theirEntriesTable.getSelectedRows();
+            int[] myRows = theirEntriesTable.getSelectedRows();
             int current = mergedRows[0];
             model.copyTheirAfterCurrent(myRows, current);
         }
@@ -691,13 +692,13 @@ public abstract class ListMerger<T extends PrimitiveId> extends JPanel implement
 
         @Override
         public void actionPerformed(ActionEvent arg0) {
-            int [] rows = mergedEntriesTable.getSelectedRows();
+            int[] rows = mergedEntriesTable.getSelectedRows();
             model.moveUpMerged(rows);
         }
 
         @Override
         public void valueChanged(ListSelectionEvent e) {
-            int [] rows = mergedEntriesTable.getSelectedRows();
+            int[] rows = mergedEntriesTable.getSelectedRows();
             setEnabled(
                     rows != null
                     && rows.length > 0
@@ -725,13 +726,13 @@ public abstract class ListMerger<T extends PrimitiveId> extends JPanel implement
 
         @Override
         public void actionPerformed(ActionEvent arg0) {
-            int [] rows = mergedEntriesTable.getSelectedRows();
+            int[] rows = mergedEntriesTable.getSelectedRows();
             model.moveDownMerged(rows);
         }
 
         @Override
         public void valueChanged(ListSelectionEvent e) {
-            int [] rows = mergedEntriesTable.getSelectedRows();
+            int[] rows = mergedEntriesTable.getSelectedRows();
             setEnabled(
                     rows != null
                     && rows.length > 0
@@ -759,13 +760,13 @@ public abstract class ListMerger<T extends PrimitiveId> extends JPanel implement
 
         @Override
         public void actionPerformed(ActionEvent arg0) {
-            int [] rows = mergedEntriesTable.getSelectedRows();
+            int[] rows = mergedEntriesTable.getSelectedRows();
             model.removeMerged(rows);
         }
 
         @Override
         public void valueChanged(ListSelectionEvent e) {
-            int [] rows = mergedEntriesTable.getSelectedRows();
+            int[] rows = mergedEntriesTable.getSelectedRows();
             setEnabled(
                     rows != null
                     && rows.length > 0
@@ -773,7 +774,7 @@ public abstract class ListMerger<T extends PrimitiveId> extends JPanel implement
         }
     }
 
-    public static interface FreezeActionProperties {
+    private interface FreezeActionProperties {
         String PROP_SELECTED = FreezeActionProperties.class.getName() + ".selected";
     }
 
@@ -781,12 +782,12 @@ public abstract class ListMerger<T extends PrimitiveId> extends JPanel implement
      * Action for freezing the current state of the list merger
      *
      */
-    class FreezeAction extends AbstractAction implements ItemListener, FreezeActionProperties  {
+    private final class FreezeAction extends AbstractAction implements ItemListener, FreezeActionProperties  {
 
-        public FreezeAction() {
+        private FreezeAction() {
             putValue(Action.NAME, tr("Freeze"));
             putValue(Action.SHORT_DESCRIPTION, tr("Freeze the current list of merged elements."));
-            putValue(PROP_SELECTED, false);
+            putValue(PROP_SELECTED, Boolean.FALSE);
             setEnabled(true);
         }
 
@@ -809,7 +810,7 @@ public abstract class ListMerger<T extends PrimitiveId> extends JPanel implement
                         @Override
                         public void propertyChange(PropertyChangeEvent evt) {
                             if (evt.getPropertyName().equals(PROP_SELECTED)) {
-                                btn.setSelected((Boolean)evt.getNewValue());
+                                btn.setSelected((Boolean) evt.getNewValue());
                             }
                         }
                     }
@@ -828,7 +829,7 @@ public abstract class ListMerger<T extends PrimitiveId> extends JPanel implement
                 putValue(Action.SHORT_DESCRIPTION, tr("Freeze the current list of merged elements."));
                 model.setFrozen(false);
             }
-            boolean isSelected = (Boolean)getValue(PROP_SELECTED);
+            boolean isSelected = (Boolean) getValue(PROP_SELECTED);
             if (isSelected != (e.getStateChange() == ItemEvent.SELECTED)) {
                 putValue(PROP_SELECTED, e.getStateChange() == ItemEvent.SELECTED);
             }
@@ -860,7 +861,7 @@ public abstract class ListMerger<T extends PrimitiveId> extends JPanel implement
     @Override
     public void propertyChange(PropertyChangeEvent evt) {
         if (evt.getPropertyName().equals(ListMergeModel.FROZEN_PROP)) {
-            handlePropertyChangeFrozen((Boolean)evt.getOldValue(), (Boolean)evt.getNewValue());
+            handlePropertyChangeFrozen((Boolean) evt.getOldValue(), (Boolean) evt.getNewValue());
         }
     }
 
diff --git a/src/org/openstreetmap/josm/gui/conflict/pair/PairTable.java b/src/org/openstreetmap/josm/gui/conflict/pair/PairTable.java
index e28af69..3a6f18b 100644
--- a/src/org/openstreetmap/josm/gui/conflict/pair/PairTable.java
+++ b/src/org/openstreetmap/josm/gui/conflict/pair/PairTable.java
@@ -15,7 +15,8 @@ public abstract class PairTable extends OsmPrimitivesTable {
 
     private final transient ListMergeModel<? extends PrimitiveId> model;
 
-    public PairTable(String name, ListMergeModel<? extends PrimitiveId> model, OsmPrimitivesTableModel dm, TableColumnModel cm, ListSelectionModel sm) {
+    public PairTable(String name, ListMergeModel<? extends PrimitiveId> model,
+            OsmPrimitivesTableModel dm, TableColumnModel cm, ListSelectionModel sm) {
         super(dm, cm, sm);
         this.model = model;
         setName(name);
diff --git a/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListMergeModel.java b/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListMergeModel.java
index a584c10..1b3597c 100644
--- a/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListMergeModel.java
+++ b/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListMergeModel.java
@@ -17,7 +17,7 @@ import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.gui.conflict.pair.ListMergeModel;
 import org.openstreetmap.josm.gui.conflict.pair.ListRole;
 
-public class NodeListMergeModel extends ListMergeModel<Node>{
+public class NodeListMergeModel extends ListMergeModel<Node> {
 
     /**
      * Populates the model with the nodes in the two {@link Way}s <code>my</code> and
@@ -56,7 +56,7 @@ public class NodeListMergeModel extends ListMergeModel<Node>{
      * @throws IllegalStateException if the merge is not yet frozen
      */
     public WayNodesConflictResolverCommand buildResolveCommand(Conflict<? extends OsmPrimitive> conflict) {
-        if (! isFrozen())
+        if (!isFrozen())
             throw new IllegalArgumentException(tr("Merged nodes not frozen yet. Cannot build resolution command."));
         return new WayNodesConflictResolverCommand(conflict, getMergedEntries());
     }
diff --git a/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListMerger.java b/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListMerger.java
index 306c2c8..11c4d64 100644
--- a/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListMerger.java
+++ b/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListMerger.java
@@ -12,9 +12,13 @@ import org.openstreetmap.josm.gui.conflict.pair.ListMerger;
 
 /**
  * A UI component for resolving conflicts in the node lists of two {@link Way}s.
- *
+ * @since 1622
  */
 public class NodeListMerger extends ListMerger<Node> implements IConflictResolver {
+
+    /**
+     * Constructs a new {@code NodeListMerger}.
+     */
     public NodeListMerger() {
         super(new NodeListMergeModel());
     }
@@ -54,9 +58,9 @@ public class NodeListMerger extends ListMerger<Node> implements IConflictResolve
 
     @Override
     public void populate(Conflict<? extends OsmPrimitive> conflict) {
-        Way myWay = (Way)conflict.getMy();
-        Way theirWay = (Way)conflict.getTheir();
-        ((NodeListMergeModel)model).populate(myWay, theirWay, conflict.getMergedMap());
+        Way myWay = (Way) conflict.getMy();
+        Way theirWay = (Way) conflict.getTheir();
+        ((NodeListMergeModel) model).populate(myWay, theirWay, conflict.getMergedMap());
         myEntriesTable.setLayer(findLayerFor(myWay));
         theirEntriesTable.setLayer(findLayerFor(theirWay));
     }
diff --git a/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListTableCellRenderer.java b/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListTableCellRenderer.java
index 77ef071..52c8ef6 100644
--- a/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListTableCellRenderer.java
+++ b/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListTableCellRenderer.java
@@ -31,7 +31,7 @@ public  class NodeListTableCellRenderer extends JLabel implements TableCellRende
      */
     public NodeListTableCellRenderer() {
         icon = ImageProvider.get("data", "node");
-        rowNumberBorder = BorderFactory.createEmptyBorder(0,4,0,0);
+        rowNumberBorder = BorderFactory.createEmptyBorder(0, 4, 0, 0);
         setOpaque(true);
     }
 
@@ -87,7 +87,7 @@ public  class NodeListTableCellRenderer extends JLabel implements TableCellRende
      * @param row the row index
      * @param isSelected true, if the current row is selected
      */
-    protected  void renderRowId( ListMergeModel<Node>.EntriesTableModel model, int row, boolean isSelected) {
+    protected  void renderRowId(ListMergeModel<Node>.EntriesTableModel model, int row, boolean isSelected) {
         setIcon(null);
         setBorder(rowNumberBorder);
         if (model.getListMergeModel().isFrozen()) {
@@ -103,14 +103,14 @@ public  class NodeListTableCellRenderer extends JLabel implements TableCellRende
     public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
             int row, int column) {
 
-        Node node = (Node)value;
+        Node node = (Node) value;
         reset();
         if (node == null) {
             renderEmptyRow();
         } else {
             switch(column) {
             case 0:
-                renderRowId(getModel(table),row, isSelected);
+                renderRowId(getModel(table), row, isSelected);
                 break;
             case 1:
                 renderNode(getModel(table), node, row, isSelected);
@@ -125,11 +125,11 @@ public  class NodeListTableCellRenderer extends JLabel implements TableCellRende
 
     /**
      * replies the model
-     * @param table  the table
+     * @param table the table
      * @return the table model
      */
     @SuppressWarnings("unchecked")
     protected ListMergeModel<Node>.EntriesTableModel getModel(JTable table) {
-        return (ListMergeModel<Node>.EntriesTableModel)table.getModel();
+        return (ListMergeModel<Node>.EntriesTableModel) table.getModel();
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMergeModel.java b/src/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMergeModel.java
index a614921..90e3645 100644
--- a/src/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMergeModel.java
+++ b/src/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMergeModel.java
@@ -69,6 +69,9 @@ public class PropertiesMergeModel extends Observable {
         support.firePropertyChange(RESOLVED_COMPLETELY_PROP, oldValue, resolvedCompletely);
     }
 
+    /**
+     * Constructs a new {@code PropertiesMergeModel}.
+     */
     public PropertiesMergeModel() {
         coordMergeDecision = UNDECIDED;
         deletedMergeDecision = UNDECIDED;
@@ -77,25 +80,22 @@ public class PropertiesMergeModel extends Observable {
     }
 
     /**
-     * replies true if there is a coordinate conflict and if this conflict is
-     * resolved
+     * replies true if there is a coordinate conflict and if this conflict is resolved
      *
-     * @return true if there is a coordinate conflict and if this conflict is
-     * resolved; false, otherwise
+     * @return true if there is a coordinate conflict and if this conflict is resolved; false, otherwise
      */
     public boolean isDecidedCoord() {
-        return ! coordMergeDecision.equals(UNDECIDED);
+        return !coordMergeDecision.equals(UNDECIDED);
     }
 
     /**
-     * replies true if there is a  conflict in the deleted state and if this conflict is
-     * resolved
+     * replies true if there is a  conflict in the deleted state and if this conflict is resolved
      *
      * @return true if there is a conflict in the deleted state and if this conflict is
      * resolved; false, otherwise
      */
     public boolean isDecidedDeletedState() {
-        return ! deletedMergeDecision.equals(UNDECIDED);
+        return !deletedMergeDecision.equals(UNDECIDED);
     }
 
     /**
@@ -127,8 +127,8 @@ public class PropertiesMergeModel extends Observable {
         this.my = conflict.getMy();
         OsmPrimitive their = conflict.getTheir();
         if (my instanceof Node) {
-            myCoords = ((Node)my).getCoor();
-            theirCoords = ((Node)their).getCoor();
+            myCoords = ((Node) my).getCoor();
+            theirCoords = ((Node) their).getCoor();
         } else {
             myCoords = null;
             theirCoords = null;
@@ -137,8 +137,8 @@ public class PropertiesMergeModel extends Observable {
         myDeletedState =  conflict.isMyDeleted() || my.isDeleted();
         theirDeletedState = their.isDeleted();
 
-        myReferrers = my.getDataSet() == null?Collections.<OsmPrimitive>emptyList():my.getReferrers();
-        theirReferrers = their.getDataSet() == null?Collections.<OsmPrimitive>emptyList():their.getReferrers();
+        myReferrers = my.getDataSet() == null ? Collections.<OsmPrimitive>emptyList() : my.getReferrers();
+        theirReferrers = their.getDataSet() == null ? Collections.<OsmPrimitive>emptyList() : their.getReferrers();
 
         coordMergeDecision = UNDECIDED;
         deletedMergeDecision = UNDECIDED;
@@ -310,10 +310,10 @@ public class PropertiesMergeModel extends Observable {
     public boolean isResolvedCompletely() {
         boolean ret = true;
         if (hasCoordConflict()) {
-            ret = ret && ! coordMergeDecision.equals(UNDECIDED);
+            ret = ret && !coordMergeDecision.equals(UNDECIDED);
         }
         if (hasDeletedStateConflict()) {
-            ret = ret && ! deletedMergeDecision.equals(UNDECIDED);
+            ret = ret && !deletedMergeDecision.equals(UNDECIDED);
         }
         return ret;
     }
diff --git a/src/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMerger.java b/src/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMerger.java
index 4461466..3ccdff6 100644
--- a/src/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMerger.java
+++ b/src/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMerger.java
@@ -29,9 +29,8 @@ import org.openstreetmap.josm.gui.conflict.pair.MergeDecisionType;
 import org.openstreetmap.josm.tools.ImageProvider;
 
 /**
- * This class represents a UI component for resolving conflicts in some properties
- * of {@link OsmPrimitive}.
- *
+ * This class represents a UI component for resolving conflicts in some properties of {@link OsmPrimitive}.
+ * @since 1654
  */
 public class PropertiesMerger extends JPanel implements Observer, IConflictResolver {
     private static final DecimalFormat COORD_FORMATTER = new DecimalFormat("###0.0000000");
@@ -49,6 +48,15 @@ public class PropertiesMerger extends JPanel implements Observer, IConflictResol
 
     private final transient PropertiesMergeModel model;
 
+    /**
+     * Constructs a new {@code PropertiesMerger}.
+     */
+    public PropertiesMerger() {
+        model = new PropertiesMergeModel();
+        model.addObserver(this);
+        build();
+    }
+
     protected JLabel buildValueLabel(String name) {
         JLabel lbl = new JLabel();
         lbl.setName(name);
@@ -69,7 +77,7 @@ public class PropertiesMerger extends JPanel implements Observer, IConflictResol
         gc.anchor = GridBagConstraints.CENTER;
         gc.weightx = 0.0;
         gc.weighty = 0.0;
-        gc.insets = new Insets(10,0,10,0);
+        gc.insets = new Insets(10, 0, 10, 0);
         JLabel lblMyVersion = new JLabel(tr("My version"));
         lblMyVersion.setToolTipText(tr("Properties in my dataset, i.e. the local dataset"));
         add(lblMyVersion, gc);
@@ -77,7 +85,8 @@ public class PropertiesMerger extends JPanel implements Observer, IConflictResol
         gc.gridx = 3;
         gc.gridy = 0;
         JLabel lblMergedVersion = new JLabel(tr("Merged version"));
-        lblMergedVersion.setToolTipText(tr("Properties in the merged element. They will replace properties in my elements when merge decisions are applied."));
+        lblMergedVersion.setToolTipText(
+                tr("Properties in the merged element. They will replace properties in my elements when merge decisions are applied."));
         add(lblMergedVersion, gc);
 
         gc.gridx = 5;
@@ -98,7 +107,7 @@ public class PropertiesMerger extends JPanel implements Observer, IConflictResol
         gc.anchor = GridBagConstraints.LINE_START;
         gc.weightx = 0.0;
         gc.weighty = 0.0;
-        gc.insets = new Insets(0,5,0,5);
+        gc.insets = new Insets(0, 5, 0, 5);
         add(new JLabel(tr("Coordinates:")), gc);
 
         gc.gridx = 1;
@@ -172,7 +181,7 @@ public class PropertiesMerger extends JPanel implements Observer, IConflictResol
         gc.anchor = GridBagConstraints.LINE_START;
         gc.weightx = 0.0;
         gc.weighty = 0.0;
-        gc.insets = new Insets(0,5,0,5);
+        gc.insets = new Insets(0, 5, 0, 5);
         add(new JLabel(tr("Deleted State:")), gc);
 
         gc.gridx = 1;
@@ -248,7 +257,7 @@ public class PropertiesMerger extends JPanel implements Observer, IConflictResol
         gc.anchor = GridBagConstraints.LINE_START;
         gc.weightx = 0.0;
         gc.weighty = 0.0;
-        gc.insets = new Insets(0,5,0,5);
+        gc.insets = new Insets(0, 5, 0, 5);
         add(new JLabel(tr("Referenced by:")), gc);
 
         gc.gridx = 1;
@@ -276,24 +285,15 @@ public class PropertiesMerger extends JPanel implements Observer, IConflictResol
         buildReferrersRow();
     }
 
-    /**
-     * Constructs a new {@code PropertiesMerger}.
-     */
-    public PropertiesMerger() {
-        model = new PropertiesMergeModel();
-        model.addObserver(this);
-        build();
-    }
-
     public String coordToString(LatLon coord) {
         if (coord == null)
             return tr("(none)");
         StringBuilder sb = new StringBuilder();
-        sb.append("(")
+        sb.append('(')
         .append(COORD_FORMATTER.format(coord.lat()))
-        .append(",")
+        .append(',')
         .append(COORD_FORMATTER.format(coord.lon()))
-        .append(")");
+        .append(')');
         return sb.toString();
     }
 
@@ -321,7 +321,7 @@ public class PropertiesMerger extends JPanel implements Observer, IConflictResol
         lblMyCoordinates.setText(coordToString(model.getMyCoords()));
         lblMergedCoordinates.setText(coordToString(model.getMergedCoords()));
         lblTheirCoordinates.setText(coordToString(model.getTheirCoords()));
-        if (! model.hasCoordConflict()) {
+        if (!model.hasCoordConflict()) {
             lblMyCoordinates.setBackground(ConflictColors.BGCOLOR_NO_CONFLICT.get());
             lblMergedCoordinates.setBackground(ConflictColors.BGCOLOR_NO_CONFLICT.get());
             lblTheirCoordinates.setBackground(ConflictColors.BGCOLOR_NO_CONFLICT.get());
@@ -349,7 +349,7 @@ public class PropertiesMerger extends JPanel implements Observer, IConflictResol
         lblMergedDeletedState.setText(deletedStateToString(model.getMergedDeletedState()));
         lblTheirDeletedState.setText(deletedStateToString(model.getTheirDeletedState()));
 
-        if (! model.hasDeletedStateConflict()) {
+        if (!model.hasDeletedStateConflict()) {
             lblMyDeletedState.setBackground(ConflictColors.BGCOLOR_NO_CONFLICT.get());
             lblMergedDeletedState.setBackground(ConflictColors.BGCOLOR_NO_CONFLICT.get());
             lblTheirDeletedState.setBackground(ConflictColors.BGCOLOR_NO_CONFLICT.get());
@@ -403,7 +403,7 @@ public class PropertiesMerger extends JPanel implements Observer, IConflictResol
 
         @Override
         public void update(Observable o, Object arg) {
-            setEnabled(model.hasCoordConflict() && ! model.isDecidedCoord());
+            setEnabled(model.hasCoordConflict() && !model.isDecidedCoord() && model.getMyCoords() != null);
         }
     }
 
@@ -420,7 +420,7 @@ public class PropertiesMerger extends JPanel implements Observer, IConflictResol
 
         @Override
         public void update(Observable o, Object arg) {
-            setEnabled(model.hasCoordConflict() && ! model.isDecidedCoord());
+            setEnabled(model.hasCoordConflict() && !model.isDecidedCoord() && model.getTheirCoords() != null);
         }
     }
 
@@ -454,7 +454,7 @@ public class PropertiesMerger extends JPanel implements Observer, IConflictResol
 
         @Override
         public void update(Observable o, Object arg) {
-            setEnabled(model.hasDeletedStateConflict() && ! model.isDecidedDeletedState());
+            setEnabled(model.hasDeletedStateConflict() && !model.isDecidedDeletedState());
         }
     }
 
@@ -471,7 +471,7 @@ public class PropertiesMerger extends JPanel implements Observer, IConflictResol
 
         @Override
         public void update(Observable o, Object arg) {
-            setEnabled(model.hasDeletedStateConflict() && ! model.isDecidedDeletedState());
+            setEnabled(model.hasDeletedStateConflict() && !model.isDecidedDeletedState());
         }
     }
 
diff --git a/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberListMergeModel.java b/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberListMergeModel.java
index 5726617..3f209e6 100644
--- a/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberListMergeModel.java
+++ b/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberListMergeModel.java
@@ -20,7 +20,7 @@ import org.openstreetmap.josm.tools.CheckParameterUtil;
  * The model for merging two lists of relation members
  *
  */
-public class RelationMemberListMergeModel extends ListMergeModel<RelationMember>{
+public class RelationMemberListMergeModel extends ListMergeModel<RelationMember> {
 
     @Override
     public boolean isEqualEntry(RelationMember e1, RelationMember e2) {
@@ -47,9 +47,9 @@ public class RelationMemberListMergeModel extends ListMergeModel<RelationMember>
     protected void setValueAt(DefaultTableModel model, Object value, int row, int col) {
         if (model == getMergedTableModel() && col == 1) {
             RelationMember memberOld = getMergedEntries().get(row);
-            RelationMember memberNew = new RelationMember((String)value,memberOld.getMember());
+            RelationMember memberNew = new RelationMember((String) value, memberOld.getMember());
             getMergedEntries().remove(row);
-            getMergedEntries().add(row,memberNew);
+            getMergedEntries().add(row, memberNew);
             fireModelDataChanged();
         }
     }
@@ -108,7 +108,7 @@ public class RelationMemberListMergeModel extends ListMergeModel<RelationMember>
     public RelationMemberConflictResolverCommand buildResolveCommand(Relation my, Relation their) {
         CheckParameterUtil.ensureParameterNotNull(my, "my");
         CheckParameterUtil.ensureParameterNotNull(their, "their");
-        if (! isFrozen())
+        if (!isFrozen())
             throw new IllegalArgumentException(tr("Merged nodes not frozen yet. Cannot build resolution command"));
         List<RelationMember> entries = getMergedEntries();
         return new RelationMemberConflictResolverCommand(my, their, entries);
diff --git a/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberMerger.java b/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberMerger.java
index 59f4855..0d9c6f8 100644
--- a/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberMerger.java
+++ b/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberMerger.java
@@ -11,9 +11,18 @@ import org.openstreetmap.josm.gui.conflict.pair.IConflictResolver;
 import org.openstreetmap.josm.gui.conflict.pair.ListMerger;
 
 /**
- * A UI component for resolving conflicts in the member lists of two {@link Relation}
+ * A UI component for resolving conflicts in the member lists of two {@link Relation}s.
+ * @since 1631
  */
 public class RelationMemberMerger extends ListMerger<RelationMember> implements IConflictResolver {
+
+    /**
+     * Constructs a new {@code RelationMemberMerger}.
+     */
+    public RelationMemberMerger() {
+        super(new RelationMemberListMergeModel());
+    }
+
     @Override
     protected JScrollPane buildMyElementsTable() {
         myEntriesTable  = new RelationMemberTable(
@@ -50,17 +59,13 @@ public class RelationMemberMerger extends ListMerger<RelationMember> implements
 
     @Override
     public void populate(Conflict<? extends OsmPrimitive> conflict) {
-        Relation myRel = (Relation)conflict.getMy();
-        Relation theirRel = (Relation)conflict.getTheir();
-        ((RelationMemberListMergeModel)model).populate(myRel, theirRel, conflict.getMergedMap());
+        Relation myRel = (Relation) conflict.getMy();
+        Relation theirRel = (Relation) conflict.getTheir();
+        ((RelationMemberListMergeModel) model).populate(myRel, theirRel, conflict.getMergedMap());
         myEntriesTable.setLayer(findLayerFor(myRel));
         theirEntriesTable.setLayer(findLayerFor(theirRel));
     }
 
-    public RelationMemberMerger() {
-        super(new RelationMemberListMergeModel());
-    }
-
     @Override
     public void deletePrimitive(boolean deleted) {
         if (deleted) {
diff --git a/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberTableCellEditor.java b/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberTableCellEditor.java
index f8cbdea..d104bbd 100644
--- a/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberTableCellEditor.java
+++ b/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberTableCellEditor.java
@@ -41,7 +41,7 @@ public class RelationMemberTableCellEditor extends AbstractCellEditor implements
         if (value == null)
             return null;
 
-        RelationMember member = (RelationMember)value;
+        RelationMember member = (RelationMember) value;
 
         editor.setText(member.getRole());
         editor.selectAll();
diff --git a/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberTableCellRenderer.java b/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberTableCellRenderer.java
index 7d2e2d1..16e8e37 100644
--- a/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberTableCellRenderer.java
+++ b/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberTableCellRenderer.java
@@ -30,7 +30,7 @@ public  class RelationMemberTableCellRenderer extends JLabel implements TableCel
     public RelationMemberTableCellRenderer() {
         setIcon(null);
         setOpaque(true);
-        rowNumberBorder = BorderFactory.createEmptyBorder(0,4,0,0);
+        rowNumberBorder = BorderFactory.createEmptyBorder(0, 4, 0, 0);
     }
 
     /**
@@ -78,7 +78,7 @@ public  class RelationMemberTableCellRenderer extends JLabel implements TableCel
 
     protected void renderForeground(ListMergeModel<Node>.EntriesTableModel model, RelationMember member, int row, int col, boolean isSelected) {
         Color fgc = ConflictColors.FGCOLOR.get();
-        if (col == 0 && model.isParticipatingInCurrentComparePair() && ! model.getListMergeModel().isFrozen()) {
+        if (col == 0 && model.isParticipatingInCurrentComparePair() && !model.getListMergeModel().isFrozen()) {
             fgc = ConflictColors.FGCOLOR_PARTICIPATING_IN_COMPARISON.get();
         }
         setForeground(fgc);
@@ -115,7 +115,7 @@ public  class RelationMemberTableCellRenderer extends JLabel implements TableCel
     public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
             int row, int column) {
 
-        RelationMember member = (RelationMember)value;
+        RelationMember member = (RelationMember) value;
         reset();
         if (member == null) {
             renderEmptyRow();
@@ -146,6 +146,6 @@ public  class RelationMemberTableCellRenderer extends JLabel implements TableCel
      */
     @SuppressWarnings("unchecked")
     protected ListMergeModel<Node>.EntriesTableModel getModel(JTable table) {
-        return (ListMergeModel<Node>.EntriesTableModel)table.getModel();
+        return (ListMergeModel<Node>.EntriesTableModel) table.getModel();
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/conflict/pair/tags/MergedTableCellRenderer.java b/src/org/openstreetmap/josm/gui/conflict/pair/tags/MergedTableCellRenderer.java
index d384da4..bd465f8 100644
--- a/src/org/openstreetmap/josm/gui/conflict/pair/tags/MergedTableCellRenderer.java
+++ b/src/org/openstreetmap/josm/gui/conflict/pair/tags/MergedTableCellRenderer.java
@@ -23,7 +23,7 @@ public class MergedTableCellRenderer extends TagMergeTableCellRenderer {
 
     @Override
     protected void renderKey(TagMergeItem item, boolean isSelected) {
-        setBackgroundColor(item,isSelected);
+        setBackgroundColor(item, isSelected);
         if (MergeDecisionType.KEEP_MINE.equals(item.getMergeDecision()) && item.getMyTagValue() == null) {
             setText(tr("<undefined>"));
             setToolTipText(tr("The merged dataset will not include a tag with key {0}", item.getKey()));
@@ -40,7 +40,7 @@ public class MergedTableCellRenderer extends TagMergeTableCellRenderer {
 
     @Override
     protected void renderValue(TagMergeItem item, boolean isSelected) {
-        setBackgroundColor(item,isSelected);
+        setBackgroundColor(item, isSelected);
         if (MergeDecisionType.KEEP_MINE.equals(item.getMergeDecision()) && item.getMyTagValue() == null) {
             setText(tr("<undefined>"));
             setToolTipText(tr("The merged dataset will not include a tag with key {0}", item.getKey()));
@@ -56,10 +56,7 @@ public class MergedTableCellRenderer extends TagMergeTableCellRenderer {
             } else if (MergeDecisionType.KEEP_THEIR.equals(item.getMergeDecision())) {
                 setText(item.getTheirTagValue());
                 setToolTipText(item.getTheirTagValue());
-            } else {
-                // should not happen
             }
         }
     }
-
 }
diff --git a/src/org/openstreetmap/josm/gui/conflict/pair/tags/MineTableCellRenderer.java b/src/org/openstreetmap/josm/gui/conflict/pair/tags/MineTableCellRenderer.java
index 8572ab6..37570b1 100644
--- a/src/org/openstreetmap/josm/gui/conflict/pair/tags/MineTableCellRenderer.java
+++ b/src/org/openstreetmap/josm/gui/conflict/pair/tags/MineTableCellRenderer.java
@@ -47,7 +47,7 @@ public class MineTableCellRenderer extends TagMergeTableCellRenderer {
 
     @Override
     protected void renderValue(TagMergeItem item, boolean isSelected) {
-        setBackgroundColor(item,isSelected);
+        setBackgroundColor(item, isSelected);
         setTextColor(item);
         if (item.getMyTagValue() == null) {
             setText(tr("<undefined>"));
diff --git a/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMergeItem.java b/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMergeItem.java
index 581673f..cbd35eb 100644
--- a/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMergeItem.java
+++ b/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMergeItem.java
@@ -108,8 +108,6 @@ public class TagMergeItem {
             } else {
                 primitive.put(key, myTagValue);
             }
-        } else {
-           // should not happen
         }
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMergeModel.java b/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMergeModel.java
index 1a66a93..2d1b6a1 100644
--- a/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMergeModel.java
+++ b/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMergeModel.java
@@ -35,7 +35,7 @@ public class TagMergeModel extends DefaultTableModel {
     private final transient List<TagMergeItem> tagMergeItems;
 
     /** the property change listeners */
-    private final transient List<PropertyChangeListener> listeners;
+    private final transient Set<PropertyChangeListener> listeners;
 
     private int numUndecidedTags = 0;
 
@@ -44,11 +44,11 @@ public class TagMergeModel extends DefaultTableModel {
      */
     public TagMergeModel() {
         tagMergeItems = new ArrayList<>();
-        listeners = new ArrayList<>();
+        listeners = new HashSet<>();
     }
 
     public void addPropertyChangeListener(PropertyChangeListener listener) {
-        synchronized(listeners) {
+        synchronized (listeners) {
             if (listener == null) return;
             if (listeners.contains(listener)) return;
             listeners.add(listener);
@@ -56,7 +56,7 @@ public class TagMergeModel extends DefaultTableModel {
     }
 
     public void removePropertyChangeListener(PropertyChangeListener listener) {
-        synchronized(listeners) {
+        synchronized (listeners) {
             if (listener == null) return;
             if (!listeners.contains(listener)) return;
             listeners.remove(listener);
@@ -70,9 +70,9 @@ public class TagMergeModel extends DefaultTableModel {
      * @param newValue the new value
      */
     protected void fireNumUndecidedTagsChanged(int oldValue, int newValue) {
-        PropertyChangeEvent evt = new PropertyChangeEvent(this,PROP_NUM_UNDECIDED_TAGS,oldValue, newValue);
-        synchronized(listeners) {
-            for(PropertyChangeListener l : listeners) {
+        PropertyChangeEvent evt = new PropertyChangeEvent(this, PROP_NUM_UNDECIDED_TAGS, oldValue, newValue);
+        synchronized (listeners) {
+            for (PropertyChangeListener l : listeners) {
                 l.propertyChange(evt);
             }
         }
@@ -84,8 +84,8 @@ public class TagMergeModel extends DefaultTableModel {
      *
      */
     protected void refreshNumUndecidedTags() {
-        int newValue=0;
-        for(TagMergeItem item: tagMergeItems) {
+        int newValue = 0;
+        for (TagMergeItem item: tagMergeItems) {
             if (MergeDecisionType.UNDECIDED.equals(item.getMergeDecision())) {
                 newValue++;
             }
@@ -109,10 +109,10 @@ public class TagMergeModel extends DefaultTableModel {
         Set<String> keys = new HashSet<>();
         keys.addAll(my.keySet());
         keys.addAll(their.keySet());
-        for(String key : keys) {
+        for (String key : keys) {
             String myValue = my.get(key);
             String theirValue = their.get(key);
-            if (myValue == null || theirValue == null || ! myValue.equals(theirValue)) {
+            if (myValue == null || theirValue == null || !myValue.equals(theirValue)) {
                 tagMergeItems.add(
                         new TagMergeItem(key, my, their)
                 );
@@ -160,7 +160,7 @@ public class TagMergeModel extends DefaultTableModel {
      * @param rows the array of row indices
      * @param decision the decision
      */
-    public void decide(int [] rows, MergeDecisionType decision) {
+    public void decide(int[] rows, MergeDecisionType decision) {
         if (rows == null || rows.length == 0)
             return;
         for (int row : rows) {
@@ -213,7 +213,7 @@ public class TagMergeModel extends DefaultTableModel {
     }
 
     public int getFirstUndecided(int startIndex) {
-        for (int i=startIndex; i<tagMergeItems.size(); i++) {
+        for (int i = startIndex; i < tagMergeItems.size(); i++) {
             if (tagMergeItems.get(i).getMergeDecision() == MergeDecisionType.UNDECIDED)
                 return i;
         }
diff --git a/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMergeTableCellRenderer.java b/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMergeTableCellRenderer.java
index 29e3a20..41af1d6 100644
--- a/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMergeTableCellRenderer.java
+++ b/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMergeTableCellRenderer.java
@@ -12,7 +12,7 @@ import org.openstreetmap.josm.gui.conflict.ConflictColors;
 
 public abstract class TagMergeTableCellRenderer extends JLabel implements TableCellRenderer {
 
-    protected  abstract void renderKey(TagMergeItem item, boolean isSelected );
+    protected abstract void renderKey(TagMergeItem item, boolean isSelected);
 
     protected abstract void renderValue(TagMergeItem item, boolean isSelected);
 
@@ -30,7 +30,7 @@ public abstract class TagMergeTableCellRenderer extends JLabel implements TableC
         if (value == null)
             return this;
 
-        TagMergeItem item = (TagMergeItem)value;
+        TagMergeItem item = (TagMergeItem) value;
         switch(col) {
         case 0:
             renderKey(item, isSelected);
@@ -44,5 +44,4 @@ public abstract class TagMergeTableCellRenderer extends JLabel implements TableC
         }
         return this;
     }
-
 }
diff --git a/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMerger.java b/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMerger.java
index 4d8349d..af7f2f5 100644
--- a/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMerger.java
+++ b/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMerger.java
@@ -12,8 +12,8 @@ import java.awt.event.AdjustmentEvent;
 import java.awt.event.AdjustmentListener;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.HashSet;
+import java.util.Set;
 
 import javax.swing.AbstractAction;
 import javax.swing.Action;
@@ -31,9 +31,10 @@ import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.gui.conflict.pair.IConflictResolver;
 import org.openstreetmap.josm.gui.conflict.pair.MergeDecisionType;
 import org.openstreetmap.josm.tools.ImageProvider;
+
 /**
  * UI component for resolving conflicts in the tag sets of two {@link OsmPrimitive}s.
- *
+ * @since 1622
  */
 public class TagMerger extends JPanel implements IConflictResolver {
 
@@ -44,6 +45,14 @@ public class TagMerger extends JPanel implements IConflictResolver {
     private transient AdjustmentSynchronizer adjustmentSynchronizer;
 
     /**
+     * Constructs a new {@code TagMerger}.
+     */
+    public TagMerger() {
+        model = new TagMergeModel();
+        build();
+    }
+
+    /**
      * embeds table in a new {@link JScrollPane} and returns th scroll pane
      *
      * @param table the table
@@ -61,7 +70,7 @@ public class TagMerger extends JPanel implements IConflictResolver {
      * @return the table (embedded in a scroll pane)
      */
     protected JScrollPane buildMineTagTable() {
-        mineTable  = new JTable(
+        mineTable = new JTable(
                 model,
                 new TagMergeColumnModel(
                         new MineTableCellRenderer()
@@ -77,7 +86,7 @@ public class TagMerger extends JPanel implements IConflictResolver {
      * @return the table (embedded in a scroll pane)
      */
     protected JScrollPane buildTheirTable() {
-        theirTable  = new JTable(
+        theirTable = new JTable(
                 model,
                 new TagMergeColumnModel(
                         new TheirTableCellRenderer()
@@ -94,7 +103,7 @@ public class TagMerger extends JPanel implements IConflictResolver {
      */
 
     protected JScrollPane buildMergedTable() {
-        mergedTable  = new JTable(
+        mergedTable = new JTable(
                 model,
                 new TagMergeColumnModel(
                         new MergedTableCellRenderer()
@@ -121,9 +130,9 @@ public class TagMerger extends JPanel implements IConflictResolver {
         gc.anchor = GridBagConstraints.CENTER;
         gc.weightx = 0.0;
         gc.weighty = 0.0;
-        gc.insets = new Insets(10,0,10,0);
-        JLabel lbl = new JLabel(tr("My version (local dataset)"));
-        add(lbl, gc);
+        gc.insets = new Insets(10, 0, 10, 0);
+        JLabel lblMy = new JLabel(tr("My version (local dataset)"));
+        add(lblMy, gc);
 
         gc.gridx = 2;
         gc.gridy = 0;
@@ -133,8 +142,8 @@ public class TagMerger extends JPanel implements IConflictResolver {
         gc.anchor = GridBagConstraints.CENTER;
         gc.weightx = 0.0;
         gc.weighty = 0.0;
-        lbl = new JLabel(tr("Merged version"));
-        add(lbl, gc);
+        JLabel lblMerge = new JLabel(tr("Merged version"));
+        add(lblMerge, gc);
 
         gc.gridx = 4;
         gc.gridy = 0;
@@ -144,9 +153,9 @@ public class TagMerger extends JPanel implements IConflictResolver {
         gc.anchor = GridBagConstraints.CENTER;
         gc.weightx = 0.0;
         gc.weighty = 0.0;
-        gc.insets = new Insets(0,0,0,0);
-        lbl = new JLabel(tr("Their version (server dataset)"));
-        add(lbl, gc);
+        gc.insets = new Insets(0, 0, 0, 0);
+        JLabel lblTheir = new JLabel(tr("Their version (server dataset)"));
+        add(lblTheir, gc);
 
         gc.gridx = 0;
         gc.gridy = 1;
@@ -156,7 +165,9 @@ public class TagMerger extends JPanel implements IConflictResolver {
         gc.anchor = GridBagConstraints.FIRST_LINE_START;
         gc.weightx = 0.3;
         gc.weighty = 1.0;
-        add(buildMineTagTable(), gc);
+        JScrollPane tabMy = buildMineTagTable();
+        lblMy.setLabelFor(tabMy);
+        add(tabMy, gc);
 
         gc.gridx = 1;
         gc.gridy = 1;
@@ -180,7 +191,9 @@ public class TagMerger extends JPanel implements IConflictResolver {
         gc.anchor = GridBagConstraints.FIRST_LINE_START;
         gc.weightx = 0.3;
         gc.weighty = 1.0;
-        add(buildMergedTable(), gc);
+        JScrollPane tabMerge = buildMergedTable();
+        lblMerge.setLabelFor(tabMerge);
+        add(tabMerge, gc);
 
         gc.gridx = 3;
         gc.gridy = 1;
@@ -203,7 +216,9 @@ public class TagMerger extends JPanel implements IConflictResolver {
         gc.anchor = GridBagConstraints.FIRST_LINE_START;
         gc.weightx = 0.3;
         gc.weighty = 1.0;
-        add(buildTheirTable(), gc);
+        JScrollPane tabTheir = buildTheirTable();
+        lblTheir.setLabelFor(tabTheir);
+        add(tabTheir, gc);
         theirTable.getSelectionModel().addListSelectionListener(keepTheirAction);
 
         DoubleClickAdapter dblClickAdapter = new DoubleClickAdapter();
@@ -223,15 +238,6 @@ public class TagMerger extends JPanel implements IConflictResolver {
         JButton btnUndecide = new JButton(undecidedAction);
         btnUndecide.setName("button.undecide");
         add(btnUndecide, gc);
-
-    }
-
-    /**
-     * Constructs a new {@code TagMerger}.
-     */
-    public TagMerger() {
-        model = new TagMergeModel();
-        build();
     }
 
     /**
@@ -330,10 +336,10 @@ public class TagMerger extends JPanel implements IConflictResolver {
      *
      */
     static class AdjustmentSynchronizer implements AdjustmentListener {
-        private final List<Adjustable> synchronizedAdjustables;
+        private final Set<Adjustable> synchronizedAdjustables;
 
         public AdjustmentSynchronizer() {
-            synchronizedAdjustables = new ArrayList<>();
+            synchronizedAdjustables = new HashSet<>();
         }
 
         public void synchronizeAdjustment(Adjustable adjustable) {
@@ -422,8 +428,8 @@ public class TagMerger extends JPanel implements IConflictResolver {
     @Override
     public void deletePrimitive(boolean deleted) {
         // Use my entries, as it doesn't really matter
-        MergeDecisionType decision = deleted?MergeDecisionType.KEEP_MINE:MergeDecisionType.UNDECIDED;
-        for (int i=0; i<model.getRowCount(); i++) {
+        MergeDecisionType decision = deleted ? MergeDecisionType.KEEP_MINE : MergeDecisionType.UNDECIDED;
+        for (int i = 0; i < model.getRowCount(); i++) {
             model.decide(i, decision);
         }
     }
diff --git a/src/org/openstreetmap/josm/gui/conflict/pair/tags/TheirTableCellRenderer.java b/src/org/openstreetmap/josm/gui/conflict/pair/tags/TheirTableCellRenderer.java
index e521021..65d72a0 100644
--- a/src/org/openstreetmap/josm/gui/conflict/pair/tags/TheirTableCellRenderer.java
+++ b/src/org/openstreetmap/josm/gui/conflict/pair/tags/TheirTableCellRenderer.java
@@ -47,7 +47,7 @@ public class TheirTableCellRenderer extends TagMergeTableCellRenderer {
 
     @Override
     protected void renderValue(TagMergeItem item, boolean isSelected) {
-        setBackgroundColor(item,isSelected);
+        setBackgroundColor(item, isSelected);
         setTextColor(item);
         if (item.getTheirTagValue() == null) {
             setText(tr("<undefined>"));
diff --git a/src/org/openstreetmap/josm/gui/conflict/tags/CombinePrimitiveResolverDialog.java b/src/org/openstreetmap/josm/gui/conflict/tags/CombinePrimitiveResolverDialog.java
index e7133993..1f4b6bb 100644
--- a/src/org/openstreetmap/josm/gui/conflict/tags/CombinePrimitiveResolverDialog.java
+++ b/src/org/openstreetmap/josm/gui/conflict/tags/CombinePrimitiveResolverDialog.java
@@ -279,7 +279,7 @@ public class CombinePrimitiveResolverDialog extends JDialog {
         if (!allResolutions.isEmpty()) {
             cmds.addAll(buildTagChangeCommand(targetPrimitive, allResolutions));
         }
-        for(String p : OsmPrimitive.getDiscardableKeys()) {
+        for (String p : OsmPrimitive.getDiscardableKeys()) {
             if (targetPrimitive.get(p) != null) {
                 cmds.add(new ChangePropertyCommand(targetPrimitive, p, null));
             }
@@ -318,7 +318,8 @@ public class CombinePrimitiveResolverDialog extends JDialog {
             }
 
             final Integer keepResolutions = numberOfKeepResolutions.get(r);
-            final Collection<Relation> resolvedRelations = Utils.firstNonNull(resolvedRelationsPerPrimitive.get(p), Collections.<Relation>emptyList());
+            final Collection<Relation> resolvedRelations = Utils.firstNonNull(
+                    resolvedRelationsPerPrimitive.get(p), Collections.<Relation>emptyList());
             if (keepResolutions <= Utils.filter(resolvedRelations, Predicates.equalTo(r)).size()) {
                 // old relation contains one primitive more often than the current resolution => keep the current member
                 decision.decide(RelationMemberConflictDecisionType.KEEP);
@@ -481,7 +482,7 @@ public class CombinePrimitiveResolverDialog extends JDialog {
 
         @Override
         public void propertyChange(PropertyChangeEvent evt) {
-            if (evt.getPropertyName().equals(JSplitPane.DIVIDER_LOCATION_PROPERTY)) {
+            if (JSplitPane.DIVIDER_LOCATION_PROPERTY.equals(evt.getPropertyName())) {
                 int newVal = (Integer) evt.getNewValue();
                 if (getHeight() != 0) {
                     dividerLocation = (double) newVal / (double) getHeight();
@@ -606,12 +607,12 @@ public class CombinePrimitiveResolverDialog extends JDialog {
     protected static void informAboutTagConflicts(
             final Collection<? extends OsmPrimitive> primitives,
             final TagCollection normalizedTags) throws UserCancelException {
-        String conflicts = Utils.joinAsHtmlUnorderedList(Utils.transform(normalizedTags.getKeysWithMultipleValues(), new Function<String, String>() {
-
+        String conflicts = Utils.joinAsHtmlUnorderedList(Utils.transform(normalizedTags.getKeysWithMultipleValues(),
+                new Function<String, String>() {
             @Override
             public String apply(String key) {
-                return tr("{0} ({1})", key, Utils.join(tr(", "), Utils.transform(normalizedTags.getValues(key), new Function<String, String>() {
-
+                return tr("{0} ({1})", key, Utils.join(tr(", "), Utils.transform(normalizedTags.getValues(key),
+                        new Function<String, String>() {
                     @Override
                     public String apply(String x) {
                         return x == null || x.isEmpty() ? tr("<i>missing</i>") : x;
diff --git a/src/org/openstreetmap/josm/gui/conflict/tags/MultiValueCellEditor.java b/src/org/openstreetmap/josm/gui/conflict/tags/MultiValueCellEditor.java
index 54e78a9..54aea99 100644
--- a/src/org/openstreetmap/josm/gui/conflict/tags/MultiValueCellEditor.java
+++ b/src/org/openstreetmap/josm/gui/conflict/tags/MultiValueCellEditor.java
@@ -40,7 +40,7 @@ public class MultiValueCellEditor extends AbstractCellEditor implements TableCel
     /**
      * Defines the interface for an object implementing navigation between rows
      */
-    public static interface NavigationListener {
+    public interface NavigationListener {
         /** Call when need to go to next row */
         void gotoNextDecision();
         /** Call when need to go to previous row */
@@ -90,20 +90,21 @@ public class MultiValueCellEditor extends AbstractCellEditor implements TableCel
         editor = new JosmComboBox<Object>(editorModel) {
             @Override
             public void processKeyEvent(KeyEvent e) {
-                if (e.getID() == KeyEvent.KEY_PRESSED && e.getKeyCode() == KeyEvent.VK_ENTER) {
+                int keyCode = e.getKeyCode();
+                if (e.getID() == KeyEvent.KEY_PRESSED && keyCode == KeyEvent.VK_ENTER) {
                     fireGotoNextDecision();
-                } else if (e.getID() == KeyEvent.KEY_PRESSED && e.getKeyCode() == KeyEvent.VK_TAB) {
+                } else if (e.getID() == KeyEvent.KEY_PRESSED && keyCode == KeyEvent.VK_TAB) {
                     if (e.isShiftDown()) {
                         fireGotoPreviousDecision();
                     } else {
                         fireGotoNextDecision();
                     }
-                } else if ( e.getID() == KeyEvent.KEY_PRESSED && e.getKeyCode() == KeyEvent.VK_DELETE  || e.getKeyCode() == KeyEvent.VK_BACK_SPACE) {
+                } else if (e.getID() == KeyEvent.KEY_PRESSED && keyCode == KeyEvent.VK_DELETE || keyCode == KeyEvent.VK_BACK_SPACE) {
                     if (editorModel.getIndexOf(MultiValueDecisionType.KEEP_NONE) > 0) {
                         editorModel.setSelectedItem(MultiValueDecisionType.KEEP_NONE);
                         fireGotoNextDecision();
                     }
-                } else if (e.getID() == KeyEvent.KEY_PRESSED && e.getKeyCode() == KeyEvent.VK_ESCAPE) {
+                } else if (e.getID() == KeyEvent.KEY_PRESSED && keyCode == KeyEvent.VK_ESCAPE) {
                     cancelCellEditing();
                 }
                 super.processKeyEvent(e);
@@ -121,7 +122,7 @@ public class MultiValueCellEditor extends AbstractCellEditor implements TableCel
                 new ItemListener() {
                     @Override
                     public void itemStateChanged(ItemEvent e) {
-                        if(e.getStateChange() == ItemEvent.SELECTED)
+                        if (e.getStateChange() == ItemEvent.SELECTED)
                             fireEditingStopped();
                     }
                 }
@@ -174,7 +175,7 @@ public class MultiValueCellEditor extends AbstractCellEditor implements TableCel
 
     @Override
     public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
-        MultiValueResolutionDecision decision = (MultiValueResolutionDecision)value;
+        MultiValueResolutionDecision decision = (MultiValueResolutionDecision) value;
         initEditor(decision);
         editor.requestFocus();
         return editor;
diff --git a/src/org/openstreetmap/josm/gui/conflict/tags/MultiValueCellRenderer.java b/src/org/openstreetmap/josm/gui/conflict/tags/MultiValueCellRenderer.java
index 9f31579..a72774d 100644
--- a/src/org/openstreetmap/josm/gui/conflict/tags/MultiValueCellRenderer.java
+++ b/src/org/openstreetmap/josm/gui/conflict/tags/MultiValueCellRenderer.java
@@ -116,16 +116,19 @@ public class MultiValueCellRenderer extends JLabel implements TableCellRenderer
             toolTipText = tr("Please decide which values to keep");
             break;
         case KEEP_ONE:
-            toolTipText = tr("Value ''{0}'' is going to be applied for key ''{1}''", decision.getChosenValue(), decision.getKey());
+            toolTipText = tr("Value ''{0}'' is going to be applied for key ''{1}''",
+                    decision.getChosenValue(), decision.getKey());
             break;
         case SUM_ALL_NUMERIC:
-            toolTipText = tr("All numeric values sumed as ''{0}'' are going to be applied for key ''{1}''", decision.getChosenValue(), decision.getKey());
+            toolTipText = tr("All numeric values sumed as ''{0}'' are going to be applied for key ''{1}''",
+                    decision.getChosenValue(), decision.getKey());
             break;
         case KEEP_NONE:
             toolTipText = tr("The key ''{0}'' and all its values are going to be removed", decision.getKey());
             break;
         case KEEP_ALL:
-            toolTipText = tr("All values joined as ''{0}'' are going to be applied for key ''{1}''", decision.getChosenValue(), decision.getKey());
+            toolTipText = tr("All values joined as ''{0}'' are going to be applied for key ''{1}''",
+                    decision.getChosenValue(), decision.getKey());
             break;
         }
         setToolTipText(toolTipText);
@@ -145,7 +148,7 @@ public class MultiValueCellRenderer extends JLabel implements TableCellRenderer
         if (value == null)
             return this;
 
-        MultiValueResolutionDecision decision = (MultiValueResolutionDecision)value;
+        MultiValueResolutionDecision decision = (MultiValueResolutionDecision) value;
         TagConflictResolverModel tagModel = (TagConflictResolverModel) table.getModel();
         boolean conflict = tagModel.getKeysWithConflicts().contains(tagModel.getKey(row));
         renderColors(decision, isSelected, conflict);
diff --git a/src/org/openstreetmap/josm/gui/conflict/tags/MultiValueResolutionDecision.java b/src/org/openstreetmap/josm/gui/conflict/tags/MultiValueResolutionDecision.java
index 9af8a27..78f439c 100644
--- a/src/org/openstreetmap/josm/gui/conflict/tags/MultiValueResolutionDecision.java
+++ b/src/org/openstreetmap/josm/gui/conflict/tags/MultiValueResolutionDecision.java
@@ -56,7 +56,8 @@ public class MultiValueResolutionDecision {
         if (tags.isEmpty())
             throw new IllegalArgumentException(MessageFormat.format("Parameter ''{0}'' must not be empty.", "tags"));
         if (tags.getKeys().size() != 1)
-            throw new IllegalArgumentException(MessageFormat.format("Parameter ''{0}'' with tags for exactly one key expected. Got {1}.", "tags", tags.getKeys().size()));
+            throw new IllegalArgumentException(MessageFormat.format("Parameter ''{0}'' with tags for exactly one key expected. Got {1}.",
+                    "tags", tags.getKeys().size()));
         this.tags = tags;
         autoDecide();
     }
@@ -305,7 +306,7 @@ public class MultiValueResolutionDecision {
         switch(type) {
         case SUM_ALL_NUMERIC: return new Tag(getKey(), tags.getSummedValues(getKey()));
         case KEEP_ALL: return new Tag(getKey(), tags.getJoinedValues(getKey()));
-        case KEEP_ONE: return new Tag(getKey(),value);
+        case KEEP_ONE: return new Tag(getKey(), value);
         case KEEP_NONE: return new Tag(getKey(), "");
         case UNDECIDED:
         default: return null;
diff --git a/src/org/openstreetmap/josm/gui/conflict/tags/PasteTagsConflictResolverDialog.java b/src/org/openstreetmap/josm/gui/conflict/tags/PasteTagsConflictResolverDialog.java
index b70181e..b279fc1 100644
--- a/src/org/openstreetmap/josm/gui/conflict/tags/PasteTagsConflictResolverDialog.java
+++ b/src/org/openstreetmap/josm/gui/conflict/tags/PasteTagsConflictResolverDialog.java
@@ -16,6 +16,7 @@ import java.awt.event.ActionEvent;
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.util.ArrayList;
+import java.util.EnumMap;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -45,7 +46,7 @@ import org.openstreetmap.josm.tools.WindowGeometry;
 public class PasteTagsConflictResolverDialog extends JDialog  implements PropertyChangeListener {
     private static final Map<OsmPrimitiveType, String> PANE_TITLES;
     static {
-        PANE_TITLES = new HashMap<>();
+        PANE_TITLES = new EnumMap<>(OsmPrimitiveType.class);
         PANE_TITLES.put(OsmPrimitiveType.NODE, tr("Tags from nodes"));
         PANE_TITLES.put(OsmPrimitiveType.WAY, tr("Tags from ways"));
         PANE_TITLES.put(OsmPrimitiveType.RELATION, tr("Tags from relations"));
@@ -62,8 +63,8 @@ public class PasteTagsConflictResolverDialog extends JDialog  implements Propert
     private Mode mode;
     private boolean canceled = false;
 
-    private ImageIcon iconResolved;
-    private ImageIcon iconUnresolved;
+    private final ImageIcon iconResolved;
+    private final ImageIcon iconUnresolved;
     private StatisticsTableModel statisticsModel;
     private JPanel pnlTagResolver;
 
@@ -81,7 +82,7 @@ public class PasteTagsConflictResolverDialog extends JDialog  implements Propert
     protected final void build() {
         setTitle(tr("Conflicts in pasted tags"));
         allPrimitivesResolver = new TagConflictResolver();
-        resolvers = new HashMap<>();
+        resolvers = new EnumMap<>(OsmPrimitiveType.class);
         for (OsmPrimitiveType type: OsmPrimitiveType.dataValues()) {
             resolvers.put(type, new TagConflictResolver());
             resolvers.get(type).getModel().addPropertyChangeListener(this);
@@ -144,8 +145,8 @@ public class PasteTagsConflictResolverDialog extends JDialog  implements Propert
      * @param tc the tags belonging to this type of primitives
      * @param targetStatistics histogram of paste targets, number of primitives of each type in the paste target
      */
-    protected void initResolver(OsmPrimitiveType type, TagCollection tc, Map<OsmPrimitiveType,Integer> targetStatistics) {
-        resolvers.get(type).getModel().populate(tc,tc.getKeysWithMultipleValues());
+    protected void initResolver(OsmPrimitiveType type, TagCollection tc, Map<OsmPrimitiveType, Integer> targetStatistics) {
+        resolvers.get(type).getModel().populate(tc, tc.getKeysWithMultipleValues());
         resolvers.get(type).getModel().prepareDefaultTagDecisions();
         if (!tc.isEmpty() && targetStatistics.get(type) != null && targetStatistics.get(type) > 0) {
             tpResolvers.add(PANE_TITLES.get(type), resolvers.get(type));
@@ -159,15 +160,16 @@ public class PasteTagsConflictResolverDialog extends JDialog  implements Propert
      * @param sourceStatistics histogram of tag source, number of primitives of each type in the source
      * @param targetStatistics histogram of paste targets, number of primitives of each type in the paste target
      */
-    public void populate(TagCollection tagsForAllPrimitives, Map<OsmPrimitiveType, Integer> sourceStatistics, Map<OsmPrimitiveType,Integer> targetStatistics) {
+    public void populate(TagCollection tagsForAllPrimitives, Map<OsmPrimitiveType, Integer> sourceStatistics,
+            Map<OsmPrimitiveType, Integer> targetStatistics) {
         mode = Mode.RESOLVING_ONE_TAGCOLLECTION_ONLY;
-        tagsForAllPrimitives = tagsForAllPrimitives == null? new TagCollection() : tagsForAllPrimitives;
-        sourceStatistics = sourceStatistics == null ? new HashMap<OsmPrimitiveType, Integer>() :sourceStatistics;
+        tagsForAllPrimitives = tagsForAllPrimitives == null ? new TagCollection() : tagsForAllPrimitives;
+        sourceStatistics = sourceStatistics == null ? new HashMap<OsmPrimitiveType, Integer>() : sourceStatistics;
         targetStatistics = targetStatistics == null ? new HashMap<OsmPrimitiveType, Integer>() : targetStatistics;
 
         // init the resolver
         //
-        allPrimitivesResolver.getModel().populate(tagsForAllPrimitives,tagsForAllPrimitives.getKeysWithMultipleValues());
+        allPrimitivesResolver.getModel().populate(tagsForAllPrimitives, tagsForAllPrimitives.getKeysWithMultipleValues());
         allPrimitivesResolver.getModel().prepareDefaultTagDecisions();
 
         // prepare the dialog with one tag resolver
@@ -189,7 +191,7 @@ public class PasteTagsConflictResolverDialog extends JDialog  implements Propert
     }
 
     protected TagConflictResolver getResolver(int idx) {
-        return (TagConflictResolver)tpResolvers.getComponentAt(idx);
+        return (TagConflictResolver) tpResolvers.getComponentAt(idx);
     }
 
     /**
@@ -201,18 +203,19 @@ public class PasteTagsConflictResolverDialog extends JDialog  implements Propert
      * @param sourceStatistics histogram of tag source, number of primitives of each type in the source
      * @param targetStatistics histogram of paste targets, number of primitives of each type in the paste target
      */
-    public void populate(TagCollection tagsForNodes, TagCollection tagsForWays, TagCollection tagsForRelations, Map<OsmPrimitiveType,Integer> sourceStatistics, Map<OsmPrimitiveType, Integer> targetStatistics) {
+    public void populate(TagCollection tagsForNodes, TagCollection tagsForWays, TagCollection tagsForRelations,
+            Map<OsmPrimitiveType, Integer> sourceStatistics, Map<OsmPrimitiveType, Integer> targetStatistics) {
         tagsForNodes = (tagsForNodes == null) ? new TagCollection() : tagsForNodes;
         tagsForWays = (tagsForWays == null) ? new TagCollection() : tagsForWays;
         tagsForRelations = (tagsForRelations == null) ? new TagCollection() : tagsForRelations;
         if (tagsForNodes.isEmpty() && tagsForWays.isEmpty() && tagsForRelations.isEmpty()) {
-            populate(null,null,null);
+            populate(null, null, null);
             return;
         }
         tpResolvers.removeAll();
-        initResolver(OsmPrimitiveType.NODE,tagsForNodes, targetStatistics);
-        initResolver(OsmPrimitiveType.WAY,tagsForWays, targetStatistics);
-        initResolver(OsmPrimitiveType.RELATION,tagsForRelations, targetStatistics);
+        initResolver(OsmPrimitiveType.NODE, tagsForNodes, targetStatistics);
+        initResolver(OsmPrimitiveType.WAY, tagsForWays, targetStatistics);
+        initResolver(OsmPrimitiveType.RELATION, tagsForRelations, targetStatistics);
 
         pnlTagResolver.setLayout(new BorderLayout());
         pnlTagResolver.removeAll();
@@ -251,7 +254,7 @@ public class PasteTagsConflictResolverDialog extends JDialog  implements Propert
             }
         }
 
-        for (int i =0; i < getNumResolverTabs(); i++) {
+        for (int i = 0; i < getNumResolverTabs(); i++) {
             if (!getResolver(i).getModel().isResolvedCompletely()) {
                 tpResolvers.setSelectedIndex(i);
                 break;
@@ -267,7 +270,7 @@ public class PasteTagsConflictResolverDialog extends JDialog  implements Propert
         return this.canceled;
     }
 
-    class CancelAction extends AbstractAction {
+    final class CancelAction extends AbstractAction {
 
         private CancelAction() {
             putValue(Action.SHORT_DESCRIPTION, tr("Cancel conflict resolution"));
@@ -283,7 +286,7 @@ public class PasteTagsConflictResolverDialog extends JDialog  implements Propert
         }
     }
 
-    class ApplyAction extends AbstractAction implements PropertyChangeListener {
+    final class ApplyAction extends AbstractAction implements PropertyChangeListener {
 
         private ApplyAction() {
             putValue(Action.SHORT_DESCRIPTION, tr("Apply resolved conflicts"));
@@ -304,8 +307,8 @@ public class PasteTagsConflictResolverDialog extends JDialog  implements Propert
                 setEnabled(allPrimitivesResolver.getModel().isResolvedCompletely());
             } else {
                 boolean enabled = true;
-                for (OsmPrimitiveType type: resolvers.keySet()) {
-                    enabled &= resolvers.get(type).getModel().isResolvedCompletely();
+                for (TagConflictResolver val: resolvers.values()) {
+                    enabled &= val.getModel().isResolvedCompletely();
                 }
                 setEnabled(enabled);
             }
@@ -324,7 +327,7 @@ public class PasteTagsConflictResolverDialog extends JDialog  implements Propert
         if (visible) {
             new WindowGeometry(
                     getClass().getName() + ".geometry",
-                    WindowGeometry.centerOnScreen(new Dimension(400,300))
+                    WindowGeometry.centerOnScreen(new Dimension(400, 300))
             ).applySafe(this);
         } else if (isShowing()) { // Avoid IllegalComponentStateException like in #8775
             new WindowGeometry(this).remember(getClass().getName() + ".geometry");
@@ -344,12 +347,12 @@ public class PasteTagsConflictResolverDialog extends JDialog  implements Propert
     @Override
     public void propertyChange(PropertyChangeEvent evt) {
         if (evt.getPropertyName().equals(TagConflictResolverModel.NUM_CONFLICTS_PROP)) {
-            TagConflictResolverModel model = (TagConflictResolverModel)evt.getSource();
-            for (int i=0; i < tpResolvers.getTabCount();i++) {
-                TagConflictResolver resolver = (TagConflictResolver)tpResolvers.getComponentAt(i);
+            TagConflictResolverModel model = (TagConflictResolverModel) evt.getSource();
+            for (int i = 0; i < tpResolvers.getTabCount(); i++) {
+                TagConflictResolver resolver = (TagConflictResolver) tpResolvers.getComponentAt(i);
                 if (model == resolver.getModel()) {
                     tpResolvers.setIconAt(i,
-                            (Boolean)evt.getNewValue() ? iconResolved : iconUnresolved
+                            (Boolean) evt.getNewValue() ? iconResolved : iconUnresolved
 
                     );
                 }
@@ -357,7 +360,7 @@ public class PasteTagsConflictResolverDialog extends JDialog  implements Propert
         }
     }
 
-    private static class StatisticsInfo {
+    private static final class StatisticsInfo {
         public int numTags;
         public Map<OsmPrimitiveType, Integer> sourceInfo;
         public Map<OsmPrimitiveType, Integer> targetInfo;
@@ -368,7 +371,7 @@ public class PasteTagsConflictResolverDialog extends JDialog  implements Propert
         }
     }
 
-    private static class StatisticsTableColumnModel extends DefaultTableColumnModel {
+    private static final class StatisticsTableColumnModel extends DefaultTableColumnModel {
         private StatisticsTableColumnModel() {
             TableCellRenderer renderer = new StatisticsInfoRenderer();
             TableColumn col = null;
@@ -396,7 +399,7 @@ public class PasteTagsConflictResolverDialog extends JDialog  implements Propert
         }
     }
 
-    private static class StatisticsTableModel extends DefaultTableModel {
+    private static final class StatisticsTableModel extends DefaultTableModel {
         private static final String[] HEADERS = new String[] {tr("Paste ..."), tr("From ..."), tr("To ...") };
         private transient List<StatisticsInfo> data;
 
@@ -441,6 +444,7 @@ public class PasteTagsConflictResolverDialog extends JDialog  implements Propert
             setText("");
             setFont(UIManager.getFont("Table.font"));
         }
+
         protected void renderNumTags(StatisticsInfo info) {
             if (info == null) return;
             setText(trn("{0} tag", "{0} tags", info.numTags, info.numTags));
@@ -463,7 +467,7 @@ public class PasteTagsConflictResolverDialog extends JDialog  implements Propert
                 }
                 String msg = "";
                 switch(type) {
-                case NODE: msg = trn("{0} node", "{0} nodes", numPrimitives,numPrimitives); break;
+                case NODE: msg = trn("{0} node", "{0} nodes", numPrimitives, numPrimitives); break;
                 case WAY: msg = trn("{0} way", "{0} ways", numPrimitives, numPrimitives); break;
                 case RELATION: msg = trn("{0} relation", "{0} relations", numPrimitives, numPrimitives); break;
                 }
@@ -492,7 +496,7 @@ public class PasteTagsConflictResolverDialog extends JDialog  implements Propert
 
             if (row == 0) {
                 setFont(getFont().deriveFont(Font.BOLD));
-                setText((String)value);
+                setText((String) value);
             } else {
                 StatisticsInfo info = (StatisticsInfo) value;
 
@@ -506,12 +510,10 @@ public class PasteTagsConflictResolverDialog extends JDialog  implements Propert
         }
     }
 
-    private static class StatisticsInfoTable extends JPanel {
-
-        private JTable infoTable;
+    private static final class StatisticsInfoTable extends JPanel {
 
-        protected void build(StatisticsTableModel model) {
-            infoTable = new JTable(model, new StatisticsTableColumnModel());
+        private StatisticsInfoTable(StatisticsTableModel model) {
+            JTable infoTable = new JTable(model, new StatisticsTableColumnModel());
             infoTable.setShowHorizontalLines(true);
             infoTable.setShowVerticalLines(false);
             infoTable.setEnabled(false);
@@ -519,10 +521,6 @@ public class PasteTagsConflictResolverDialog extends JDialog  implements Propert
             add(infoTable, BorderLayout.CENTER);
         }
 
-        private StatisticsInfoTable(StatisticsTableModel model) {
-            build(model);
-        }
-
         @Override
         public Insets getInsets() {
             Insets insets = super.getInsets();
diff --git a/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictDecision.java b/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictDecision.java
index 9e794ea..df720bc 100644
--- a/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictDecision.java
+++ b/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictDecision.java
@@ -21,11 +21,12 @@ public class RelationMemberConflictDecision {
         CheckParameterUtil.ensureParameterNotNull(relation, "relation");
         RelationMember member = relation.getMember(pos);
         if (member == null)
-            throw new IndexOutOfBoundsException(tr("Position {0} is out of range. Current number of members is {1}.", pos, relation.getMembersCount()));
+            throw new IndexOutOfBoundsException(
+                    tr("Position {0} is out of range. Current number of members is {1}.", pos, relation.getMembersCount()));
         this.relation = relation;
         this.pos  = pos;
         this.originalPrimitive = member.getMember();
-        this.role = member.hasRole()? member.getRole() : "";
+        this.role = member.hasRole() ? member.getRole() : "";
         this.decision = UNDECIDED;
     }
 
@@ -61,7 +62,7 @@ public class RelationMemberConflictDecision {
     }
 
     public boolean isDecided() {
-        return ! UNDECIDED.equals(decision);
+        return !UNDECIDED.equals(decision);
     }
 
     public boolean matches(Relation relation, int pos) {
diff --git a/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictDecisionEditor.java b/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictDecisionEditor.java
index d1872c9..849ae3e 100644
--- a/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictDecisionEditor.java
+++ b/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictDecisionEditor.java
@@ -29,7 +29,7 @@ public class RelationMemberConflictDecisionEditor extends JosmComboBox<RelationM
     @Override
     public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
         setSelectedItem(value);
-        this.originalValue = (RelationMemberConflictDecisionType)value;
+        this.originalValue = (RelationMemberConflictDecisionType) value;
         return this;
     }
 
diff --git a/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictDecisionRenderer.java b/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictDecisionRenderer.java
index 9353a56..1c69e61 100644
--- a/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictDecisionRenderer.java
+++ b/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictDecisionRenderer.java
@@ -13,7 +13,8 @@ import javax.swing.table.TableCellRenderer;
 
 import org.openstreetmap.josm.gui.widgets.JosmComboBox;
 
-public class RelationMemberConflictDecisionRenderer extends JLabel implements TableCellRenderer, ListCellRenderer<RelationMemberConflictDecisionType> {
+public class RelationMemberConflictDecisionRenderer extends JLabel
+implements TableCellRenderer, ListCellRenderer<RelationMemberConflictDecisionType> {
 
     private JosmComboBox<RelationMemberConflictDecisionType> cbDecisionTypes;
 
@@ -53,7 +54,7 @@ public class RelationMemberConflictDecisionRenderer extends JLabel implements Ta
             setBackground(UIManager.getColor("Table.selectionBackground"));
             setForeground(UIManager.getColor("Table.selectionForeground"));
         }
-        RelationMemberConflictDecisionType decision = (RelationMemberConflictDecisionType)value;
+        RelationMemberConflictDecisionType decision = (RelationMemberConflictDecisionType) value;
         cbDecisionTypes.setSelectedItem(decision);
         return cbDecisionTypes;
     }
diff --git a/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolver.java b/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolver.java
index 376c619..f0ea47e 100644
--- a/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolver.java
+++ b/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolver.java
@@ -56,13 +56,13 @@ public class RelationMemberConflictResolver extends JPanel {
         gc.fill = GridBagConstraints.HORIZONTAL;
         gc.weighty = 0.0;
         gc.weightx = 1.0;
-        gc.insets = new Insets(5,5,5,5);
+        gc.insets = new Insets(5, 5, 5, 5);
         add(pnl, gc);
 
         gc.gridy = 1;
         gc.weighty = 1.0;
         gc.fill = GridBagConstraints.BOTH;
-        gc.insets = new Insets(0,0,0,0);
+        gc.insets = new Insets(0, 0, 0, 0);
         add(new JScrollPane(tblResolver = new RelationMemberConflictResolverTable(model)), gc);
         pnl = new JPanel();
         pnl.setLayout(new BoxLayout(pnl, BoxLayout.Y_AXIS));
@@ -71,7 +71,7 @@ public class RelationMemberConflictResolver extends JPanel {
         gc.gridy = 2;
         gc.weighty = 0.0;
         gc.fill = GridBagConstraints.HORIZONTAL;
-        add(pnl,gc);
+        add(pnl, gc);
     }
 
     protected JPanel buildRoleEditingPanel() {
diff --git a/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolverModel.java b/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolverModel.java
index 19ef1b0..4963dd3 100644
--- a/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolverModel.java
+++ b/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolverModel.java
@@ -116,10 +116,10 @@ public class RelationMemberConflictResolverModel extends DefaultTableModel {
         RelationMemberConflictDecision d = decisions.get(row);
         switch(column) {
         case 2: /* role */
-            d.setRole((String)value);
+            d.setRole((String) value);
             break;
         case 4: /* decision */
-            d.decide((RelationMemberConflictDecisionType)value);
+            d.decide((RelationMemberConflictDecisionType) value);
             refresh();
             break;
         }
@@ -134,7 +134,7 @@ public class RelationMemberConflictResolverModel extends DefaultTableModel {
      * @param primitive the child primitive
      */
     protected void populate(Relation relation, OsmPrimitive primitive) {
-        for (int i =0; i<relation.getMembersCount();i++) {
+        for (int i = 0; i < relation.getMembersCount(); i++) {
             if (relation.getMember(i).refersTo(primitive)) {
                 decisions.add(new RelationMemberConflictDecision(relation, i));
             }
@@ -154,7 +154,7 @@ public class RelationMemberConflictResolverModel extends DefaultTableModel {
         memberPrimitives = memberPrimitives == null ? new LinkedList<OsmPrimitive>() : memberPrimitives;
         for (Relation r : relations) {
             for (OsmPrimitive p: memberPrimitives) {
-                populate(r,p);
+                populate(r, p);
             }
         }
         this.relations = relations;
@@ -181,7 +181,7 @@ public class RelationMemberConflictResolverModel extends DefaultTableModel {
     /**
      * Replies the decision at position <code>row</code>
      *
-     * @param row
+     * @param row position
      * @return the decision at position <code>row</code>
      */
     public RelationMemberConflictDecision getDecision(int row) {
@@ -225,7 +225,7 @@ public class RelationMemberConflictResolverModel extends DefaultTableModel {
     }
 
     protected RelationMemberConflictDecision getDecision(Relation relation, int pos) {
-        for(RelationMemberConflictDecision decision: decisions) {
+        for (RelationMemberConflictDecision decision: decisions) {
             if (decision.matches(relation, pos)) return decision;
         }
         return null;
@@ -235,7 +235,7 @@ public class RelationMemberConflictResolverModel extends DefaultTableModel {
         final Relation modifiedRelation = new Relation(relation);
         modifiedRelation.setMembers(null);
         boolean isChanged = false;
-        for (int i=0; i < relation.getMembersCount(); i++) {
+        for (int i = 0; i < relation.getMembersCount(); i++) {
             final RelationMember member = relation.getMember(i);
             RelationMemberConflictDecision decision = getDecision(relation, i);
             if (decision == null) {
@@ -243,9 +243,9 @@ public class RelationMemberConflictResolverModel extends DefaultTableModel {
             } else {
                 switch(decision.getDecision()) {
                 case KEEP:
-                    final RelationMember newMember = new RelationMember(decision.getRole(),newPrimitive);
+                    final RelationMember newMember = new RelationMember(decision.getRole(), newPrimitive);
                     modifiedRelation.addMember(newMember);
-                    isChanged |= ! member.equals(newMember);
+                    isChanged |= !member.equals(newMember);
                     break;
                 case REMOVE:
                     isChanged = true;
@@ -280,7 +280,7 @@ public class RelationMemberConflictResolverModel extends DefaultTableModel {
     }
 
     protected boolean isChanged(Relation relation, OsmPrimitive newPrimitive) {
-        for (int i=0; i < relation.getMembersCount(); i++) {
+        for (int i = 0; i < relation.getMembersCount(); i++) {
             RelationMemberConflictDecision decision = getDecision(relation, i);
             if (decision == null) {
                 continue;
diff --git a/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolverTable.java b/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolverTable.java
index 01ea8c4..70411af 100644
--- a/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolverTable.java
+++ b/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolverTable.java
@@ -39,7 +39,7 @@ public class RelationMemberConflictResolverTable extends JTable implements Multi
         getActionMap().put("selectNextColumnCell", selectNextColumnCellAction);
         getActionMap().put("selectPreviousColumnCell", selectPreviousColumnCellAction);
 
-        setRowHeight((int)new JosmComboBox<String>().getPreferredSize().getHeight());
+        setRowHeight((int) new JosmComboBox<String>().getPreferredSize().getHeight());
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolutionUtil.java b/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolutionUtil.java
index 6a9d8b7..86df3e1 100644
--- a/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolutionUtil.java
+++ b/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolutionUtil.java
@@ -15,17 +15,18 @@ import org.openstreetmap.josm.data.osm.TigerUtils;
  */
 public final class TagConflictResolutionUtil {
 
-    /** no constructor, just static utility methods */
-    private TagConflictResolutionUtil() {}
+    private TagConflictResolutionUtil() {
+        // no constructor, just static utility methods
+    }
 
     /**
      * Normalizes the tags in the tag collection <code>tc</code> before resolving tag conflicts.
      *
-     *  Removes irrelevant tags like "created_by".
+     * Removes irrelevant tags like "created_by".
      *
-     *  For tags which are not present on at least one of the merged nodes, the empty value ""
-     *  is added to the list of values for this tag, but only if there are at least two
-     *  primitives with tags, and at least one tagged primitive do not have this tag.
+     * For tags which are not present on at least one of the merged nodes, the empty value ""
+     * is added to the list of values for this tag, but only if there are at least two
+     * primitives with tags, and at least one tagged primitive do not have this tag.
      *
      * @param tc the tag collection
      * @param merged the collection of merged primitives
@@ -33,7 +34,7 @@ public final class TagConflictResolutionUtil {
     public static void normalizeTagCollectionBeforeEditing(TagCollection tc, Collection<? extends OsmPrimitive> merged) {
         // remove irrelevant tags
         //
-        for(String key : OsmPrimitive.getDiscardableKeys()) {
+        for (String key : OsmPrimitive.getDiscardableKeys()) {
             tc.removeByKey(key);
         }
 
@@ -84,7 +85,7 @@ public final class TagConflictResolutionUtil {
             // make sure the empty value is in the tag set such that we can delete the tag
             // in the conflict dialog if necessary
             //
-            tc.add(new Tag(key,""));
+            tc.add(new Tag(key, ""));
         }
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolver.java b/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolver.java
index b56ad1f..64f41a1 100644
--- a/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolver.java
+++ b/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolver.java
@@ -33,7 +33,7 @@ public class TagConflictResolver extends JPanel {
 
     protected JPanel buildInfoPanel() {
         JPanel pnl = new JPanel();
-        pnl.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        pnl.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
         pnl.setLayout(new GridBagLayout());
         GridBagConstraints gc = new GridBagConstraints();
         gc.fill = GridBagConstraints.BOTH;
diff --git a/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolverModel.java b/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolverModel.java
index fba2775..9236add 100644
--- a/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolverModel.java
+++ b/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolverModel.java
@@ -22,8 +22,8 @@ public class TagConflictResolverModel extends DefaultTableModel {
     public static final String NUM_CONFLICTS_PROP = TagConflictResolverModel.class.getName() + ".numConflicts";
 
     private transient TagCollection tags;
-    private transient List<String> displayedKeys;
-    private transient Set<String> keysWithConflicts;
+    private List<String> displayedKeys;
+    private Set<String> keysWithConflicts;
     private transient Map<String, MultiValueResolutionDecision> decisions;
     private int numConflicts;
     private PropertyChangeSupport support;
@@ -70,7 +70,7 @@ public class TagConflictResolverModel extends DefaultTableModel {
                 new Comparator<String>() {
                     @Override
                     public int compare(String key1, String key2) {
-                        if (decisions.get(key1).isDecided() && ! decisions.get(key2).isDecided())
+                        if (decisions.get(key1).isDecided() && !decisions.get(key2).isDecided())
                             return 1;
                         else if (!decisions.get(key1).isDecided() && decisions.get(key2).isDecided())
                             return -1;
@@ -86,10 +86,10 @@ public class TagConflictResolverModel extends DefaultTableModel {
      */
     public void rebuild() {
         if (tags == null) return;
-        for(String key: tags.getKeys()) {
+        for (String key: tags.getKeys()) {
             MultiValueResolutionDecision decision = new MultiValueResolutionDecision(tags.getTagsFor(key));
             if (decisions.get(key) == null) {
-                decisions.put(key,decision);
+                decisions.put(key, decision);
             }
         }
         displayedKeys.clear();
@@ -167,9 +167,9 @@ public class TagConflictResolverModel extends DefaultTableModel {
     public void setValueAt(Object value, int row, int column) {
         MultiValueResolutionDecision decision = getDecision(row);
         if (value instanceof String) {
-            decision.keepOne((String)value);
+            decision.keepOne((String) value);
         } else if (value instanceof MultiValueDecisionType) {
-            MultiValueDecisionType type = (MultiValueDecisionType)value;
+            MultiValueDecisionType type = (MultiValueDecisionType) value;
             switch(type) {
             case KEEP_NONE:
                 decision.keepNone();
@@ -263,11 +263,11 @@ public class TagConflictResolverModel extends DefaultTableModel {
             List<String> values = decision.getValues();
             values.remove("");
             if (values.size() == 1) {
-                // TODO: Do not suggest to keep the single value in order to avoid long highways to become tunnels+bridges+... (only if both primitives are tagged)
+                // TODO: Do not suggest to keep the single value in order to avoid long highways to become tunnels+bridges+...
+                // (only if both primitives are tagged)
                 decision.keepOne(values.get(0));
-            } else {
-                // Do not suggest to keep all values in order to reduce the wrong usage of semicolon values, see #9104!
             }
+            // else: Do not suggest to keep all values in order to reduce the wrong usage of semicolon values, see #9104!
         }
         rebuild();
     }
diff --git a/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolverTable.java b/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolverTable.java
index c22d524..dbca23b 100644
--- a/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolverTable.java
+++ b/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolverTable.java
@@ -39,9 +39,9 @@ public class TagConflictResolverTable extends JTable implements MultiValueCellEd
         getActionMap().put("selectNextColumnCell", selectNextColumnCellAction);
         getActionMap().put("selectPreviousColumnCell", selectPreviousColumnCellAction);
 
-        ((MultiValueCellEditor)getColumnModel().getColumn(2).getCellEditor()).addNavigationListener(this);
+        ((MultiValueCellEditor) getColumnModel().getColumn(2).getCellEditor()).addNavigationListener(this);
 
-        setRowHeight((int)new JosmComboBox<String>().getPreferredSize().getHeight());
+        setRowHeight((int) new JosmComboBox<String>().getPreferredSize().getHeight());
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/gui/dialogs/ChangesetDialog.java b/src/org/openstreetmap/josm/gui/dialogs/ChangesetDialog.java
index 0ff6077..5cce5e9 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/ChangesetDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/ChangesetDialog.java
@@ -321,7 +321,7 @@ public class ChangesetDialog extends ToggleDialog{
                 return;
 
             DataSet ds = Main.main.getEditLayer().data;
-            selectObjectsByChangesetIds(ds,sel);
+            selectObjectsByChangesetIds(ds, sel);
         }
 
         protected void updateEnabledState() {
@@ -430,7 +430,7 @@ public class ChangesetDialog extends ToggleDialog{
             Set<Changeset> sel = getCurrentChangesetListModel().getSelectedChangesets();
             if (sel.isEmpty())
                 return;
-            if (sel.size() > 10 && ! AbstractInfoAction.confirmLaunchMultiple(sel.size()))
+            if (sel.size() > 10 && !AbstractInfoAction.confirmLaunchMultiple(sel.size()))
                 return;
             String baseUrl = Main.getBaseBrowseUrl();
             for (Changeset cs: sel) {
@@ -478,7 +478,11 @@ public class ChangesetDialog extends ToggleDialog{
     /**
      * A utility class to fetch changesets and display the changeset dialog.
      */
-    public static class LaunchChangesetManager {
+    public static final class LaunchChangesetManager {
+
+        private LaunchChangesetManager() {
+            // Hide implicit public constructor for utility classes
+        }
 
         protected static void launchChangesetManager(Collection<Integer> toSelect) {
             ChangesetCacheManager cm = ChangesetCacheManager.getInstance();
@@ -526,9 +530,9 @@ public class ChangesetDialog extends ToggleDialog{
                     if (future != null) {
                         try {
                             future.get();
-                        } catch(InterruptedException e) {
+                        } catch (InterruptedException e) {
                             Main.warn("InterruptedException in "+getClass().getSimpleName()+" while downloading changeset header");
-                        } catch(ExecutionException e) {
+                        } catch (ExecutionException e) {
                             Main.error(e);
                             BugReportExceptionHandler.handleException(e.getCause());
                             return;
diff --git a/src/org/openstreetmap/josm/gui/dialogs/CommandStackDialog.java b/src/org/openstreetmap/josm/gui/dialogs/CommandStackDialog.java
index 159447a..cd10095 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/CommandStackDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/CommandStackDialog.java
@@ -125,7 +125,7 @@ public class CommandStackDialog extends ToggleDialog implements CommandQueueList
         UndoRedoAction redoAction = new UndoRedoAction(UndoRedoType.REDO);
         wireUpdateEnabledStateUpdater(redoAction, redoTree);
 
-        scrollPane = (JScrollPane)createLayout(treesPanel, true, Arrays.asList(new SideButton[] {
+        scrollPane = (JScrollPane) createLayout(treesPanel, true, Arrays.asList(new SideButton[] {
             new SideButton(selectAction),
             new SideButton(undoAction),
             new SideButton(redoAction)
@@ -137,11 +137,12 @@ public class CommandStackDialog extends ToggleDialog implements CommandQueueList
 
     private static class CommandCellRenderer extends DefaultTreeCellRenderer {
         @Override
-        public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
+        public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row,
+                boolean hasFocus) {
             super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
-            DefaultMutableTreeNode v = (DefaultMutableTreeNode)value;
+            DefaultMutableTreeNode v = (DefaultMutableTreeNode) value;
             if (v.getUserObject() instanceof JLabel) {
-                JLabel l = (JLabel)v.getUserObject();
+                JLabel l = (JLabel) v.getUserObject();
                 setIcon(l.getIcon());
                 setText(l.getText());
             }
@@ -269,14 +270,14 @@ public class CommandStackDialog extends ToggleDialog implements CommandQueueList
 
         List<Command> undoCommands = Main.main.undoRedo.commands;
         DefaultMutableTreeNode undoRoot = new DefaultMutableTreeNode();
-        for (int i=0; i<undoCommands.size(); ++i) {
+        for (int i = 0; i < undoCommands.size(); ++i) {
             undoRoot.add(getNodeForCommand(undoCommands.get(i), i));
         }
         undoTreeModel.setRoot(undoRoot);
 
         List<Command> redoCommands = Main.main.undoRedo.redoCommands;
         DefaultMutableTreeNode redoRoot = new DefaultMutableTreeNode();
-        for (int i=0; i<redoCommands.size(); ++i) {
+        for (int i = 0; i < redoCommands.size(); ++i) {
             redoRoot.add(getNodeForCommand(redoCommands.get(i), i));
         }
         redoTreeModel.setRoot(redoRoot);
@@ -324,7 +325,7 @@ public class CommandStackDialog extends ToggleDialog implements CommandQueueList
         CommandListMutableTreeNode node = new CommandListMutableTreeNode(c, idx);
         if (c.getChildren() != null) {
             List<PseudoCommand> children = new ArrayList<>(c.getChildren());
-            for (int i=0; i<children.size(); ++i) {
+            for (int i = 0; i < children.size(); ++i) {
                 node.add(getNodeForCommand(children.get(i), i));
             }
         }
@@ -336,12 +337,12 @@ public class CommandStackDialog extends ToggleDialog implements CommandQueueList
      * @param path GUI elements
      * @return collection of affected primitives, onluy usable ones
      */
-    protected static FilteredCollection<OsmPrimitive> getAffectedPrimitives(TreePath path) {
+    protected static FilteredCollection<? extends OsmPrimitive> getAffectedPrimitives(TreePath path) {
         PseudoCommand c = ((CommandListMutableTreeNode) path.getLastPathComponent()).getCommand();
         final OsmDataLayer currentLayer = Main.main.getEditLayer();
         return new FilteredCollection<>(
                 c.getParticipatingPrimitives(),
-                new Predicate<OsmPrimitive>(){
+                new Predicate<OsmPrimitive>() {
                     @Override
                     public boolean evaluate(OsmPrimitive o) {
                         OsmPrimitive p = currentLayer.data.getPrimitiveById(o);
@@ -367,15 +368,14 @@ public class CommandStackDialog extends ToggleDialog implements CommandQueueList
          * Constructs a new {@code SelectAction}.
          */
         public SelectAction() {
-            putValue(NAME,tr("Select"));
+            putValue(NAME, tr("Select"));
             putValue(SHORT_DESCRIPTION, tr("Selects the objects that take part in this command (unless currently deleted)"));
-            putValue(SMALL_ICON, ImageProvider.get("dialogs","select"));
+            putValue(SMALL_ICON, ImageProvider.get("dialogs", "select"));
         }
 
         @Override
         public void actionPerformed(ActionEvent e) {
             TreePath path;
-            undoTree.getSelectionPath();
             if (!undoTree.isSelectionEmpty()) {
                 path = undoTree.getSelectionPath();
             } else if (!redoTree.isSelectionEmpty()) {
@@ -385,7 +385,7 @@ public class CommandStackDialog extends ToggleDialog implements CommandQueueList
 
             OsmDataLayer editLayer = Main.main.getEditLayer();
             if (editLayer == null) return;
-            editLayer.data.setSelected( getAffectedPrimitives(path));
+            editLayer.data.setSelected(getAffectedPrimitives(path));
         }
 
         @Override
@@ -402,9 +402,10 @@ public class CommandStackDialog extends ToggleDialog implements CommandQueueList
          * Constructs a new {@code SelectAndZoomAction}.
          */
         public SelectAndZoomAction() {
-            putValue(NAME,tr("Select and zoom"));
-            putValue(SHORT_DESCRIPTION, tr("Selects the objects that take part in this command (unless currently deleted), then and zooms to it"));
-            putValue(SMALL_ICON, ImageProvider.get("dialogs/autoscale","selection"));
+            putValue(NAME, tr("Select and zoom"));
+            putValue(SHORT_DESCRIPTION,
+                    tr("Selects the objects that take part in this command (unless currently deleted), then and zooms to it"));
+            putValue(SMALL_ICON, ImageProvider.get("dialogs/autoscale", "selection"));
         }
 
         @Override
@@ -437,13 +438,13 @@ public class CommandStackDialog extends ToggleDialog implements CommandQueueList
             switch (type) {
             case UNDO:
                 tree = undoTree;
-                putValue(NAME,tr("Undo"));
+                putValue(NAME, tr("Undo"));
                 putValue(SHORT_DESCRIPTION, tr("Undo the selected and all later commands"));
                 putValue(SMALL_ICON, ImageProvider.get("undo"));
                 break;
             case REDO:
                 tree = redoTree;
-                putValue(NAME,tr("Redo"));
+                putValue(NAME, tr("Redo"));
                 putValue(SHORT_DESCRIPTION, tr("Redo the selected and all earlier commands"));
                 putValue(SMALL_ICON, ImageProvider.get("redo"));
                 break;
@@ -478,7 +479,7 @@ public class CommandStackDialog extends ToggleDialog implements CommandQueueList
         @Override
         public void updateEnabledState() {
             // do not allow execution if nothing is selected or a sub command was selected
-            setEnabled(!tree.isSelectionEmpty() && tree.getSelectionPath().getPathCount()==2);
+            setEnabled(!tree.isSelectionEmpty() && tree.getSelectionPath().getPathCount() == 2);
         }
     }
 
@@ -497,7 +498,7 @@ public class CommandStackDialog extends ToggleDialog implements CommandQueueList
     }
 
     private class CommandStackPopup extends JPopupMenu {
-        public CommandStackPopup(){
+        public CommandStackPopup() {
             add(selectAction);
             add(selectAndZoomAction);
         }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java b/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java
index e163122..fe42550 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.dialogs;
 
 import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
@@ -68,8 +68,8 @@ public final class ConflictDialog extends ToggleDialog implements MapView.EditLa
      * Replies the color used to paint conflicts.
      *
      * @return the color used to paint conflicts
-     * @since 1221
      * @see #paintConflicts
+     * @since 1221
      */
     public static Color getColor() {
         return Main.pref.getColor(marktr("conflict"), Color.gray);
@@ -99,7 +99,7 @@ public final class ConflictDialog extends ToggleDialog implements MapView.EditLa
         lstConflicts.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
         lstConflicts.setCellRenderer(new OsmPrimitivRenderer());
         lstConflicts.addMouseListener(new MouseEventHandler());
-        addListSelectionListener(new ListSelectionListener(){
+        addListSelectionListener(new ListSelectionListener() {
             @Override
             public void valueChanged(ListSelectionEvent e) {
                 Main.map.mapView.repaint();
@@ -175,7 +175,7 @@ public final class ConflictDialog extends ToggleDialog implements MapView.EditLa
      * Launches a conflict resolution dialog for the first selected conflict
      *
      */
-    private final void resolve() {
+    private void resolve() {
         if (conflicts == null || model.getSize() == 0) return;
 
         int index = lstConflicts.getSelectedIndex();
@@ -196,7 +196,7 @@ public final class ConflictDialog extends ToggleDialog implements MapView.EditLa
     /**
      * refreshes the view of this dialog
      */
-    public final void refreshView() {
+    public void refreshView() {
         OsmDataLayer editLayer =  Main.main.getEditLayer();
         conflicts = (editLayer == null ? new ConflictCollection() : editLayer.getConflicts());
         GuiHelper.runInEDT(new Runnable() {
@@ -241,11 +241,13 @@ public final class ConflictDialog extends ToggleDialog implements MapView.EditLa
                 Point p = nc.getPoint(n);
                 g.drawRect(p.x-1, p.y-1, 2, 2);
             }
+
             public void visit(Node n1, Node n2) {
                 Point p1 = nc.getPoint(n1);
                 Point p2 = nc.getPoint(n2);
                 g.drawLine(p1.x, p1.y, p2.x, p2.y);
             }
+
             @Override
             public void visit(Way w) {
                 Node lastN = null;
@@ -258,6 +260,7 @@ public final class ConflictDialog extends ToggleDialog implements MapView.EditLa
                     lastN = n;
                 }
             }
+
             @Override
             public void visit(Relation e) {
                 if (!visited.contains(e)) {
@@ -345,9 +348,13 @@ public final class ConflictDialog extends ToggleDialog implements MapView.EditLa
     }
 
     class MouseEventHandler extends PopupMenuLauncher {
+        /**
+         * Constructs a new {@code MouseEventHandler}.
+         */
         public MouseEventHandler() {
             super(popupMenu);
         }
+
         @Override public void mouseClicked(MouseEvent e) {
             if (isDoubleClick(e)) {
                 resolve();
@@ -361,8 +368,11 @@ public final class ConflictDialog extends ToggleDialog implements MapView.EditLa
      */
     class ConflictListModel implements ListModel<OsmPrimitive> {
 
-        private CopyOnWriteArrayList<ListDataListener> listeners;
+        private final CopyOnWriteArrayList<ListDataListener> listeners;
 
+        /**
+         * Constructs a new {@code ConflictListModel}.
+         */
         public ConflictListModel() {
             listeners = new CopyOnWriteArrayList<>();
         }
@@ -406,7 +416,7 @@ public final class ConflictDialog extends ToggleDialog implements MapView.EditLa
 
         public int indexOf(OsmPrimitive my) {
             if (conflicts == null) return -1;
-            for (int i=0; i < conflicts.size();i++) {
+            for (int i = 0; i < conflicts.size(); i++) {
                 if (conflicts.get(i).isMatchingMy(my))
                     return i;
             }
@@ -434,14 +444,14 @@ public final class ConflictDialog extends ToggleDialog implements MapView.EditLa
 
         @Override
         public void valueChanged(ListSelectionEvent e) {
-            ListSelectionModel model = (ListSelectionModel)e.getSource();
+            ListSelectionModel model = (ListSelectionModel) e.getSource();
             boolean enabled = model.getMinSelectionIndex() >= 0
             && model.getMaxSelectionIndex() >= model.getMinSelectionIndex();
             setEnabled(enabled);
         }
     }
 
-    class SelectAction extends AbstractSelectAction implements ListSelectionListener {
+    final class SelectAction extends AbstractSelectAction implements ListSelectionListener {
         private SelectAction() {
             putValue("help", ht("/Dialog/ConflictList#SelectAction"));
         }
@@ -460,7 +470,7 @@ public final class ConflictDialog extends ToggleDialog implements MapView.EditLa
 
         @Override
         public void valueChanged(ListSelectionEvent e) {
-            ListSelectionModel model = (ListSelectionModel)e.getSource();
+            ListSelectionModel model = (ListSelectionModel) e.getSource();
             boolean enabled = model.getMinSelectionIndex() >= 0
             && model.getMaxSelectionIndex() >= model.getMinSelectionIndex();
             setEnabled(enabled);
diff --git a/src/org/openstreetmap/josm/gui/dialogs/ConflictResolutionDialog.java b/src/org/openstreetmap/josm/gui/dialogs/ConflictResolutionDialog.java
index a7fed57..f0c3981 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/ConflictResolutionDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/ConflictResolutionDialog.java
@@ -52,7 +52,7 @@ public class ConflictResolutionDialog extends JDialog implements PropertyChangeL
     @Override
     public void setVisible(boolean isVisible) {
         String geom = getClass().getName() + ".geometry";
-        if (isVisible){
+        if (isVisible) {
             toFront();
             new WindowGeometry(geom, WindowGeometry.centerInWindow(Main.parent,
                 new Dimension(600, 400))).applySafe(this);
@@ -202,7 +202,7 @@ public class ConflictResolutionDialog extends JDialog implements PropertyChangeL
 
         @Override
         public void actionPerformed(ActionEvent arg0) {
-            if (! resolver.isResolvedCompletely()) {
+            if (!resolver.isResolvedCompletely()) {
                 Object[] options = {
                         tr("Close anyway"),
                         tr("Continue resolving")};
@@ -266,7 +266,7 @@ public class ConflictResolutionDialog extends JDialog implements PropertyChangeL
     @Override
     public void propertyChange(PropertyChangeEvent evt) {
         if (evt.getPropertyName().equals(ConflictResolver.MY_PRIMITIVE_PROP)) {
-            updateTitle((OsmPrimitive)evt.getNewValue());
+            updateTitle((OsmPrimitive) evt.getNewValue());
         }
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/DeleteFromRelationConfirmationDialog.java b/src/org/openstreetmap/josm/gui/dialogs/DeleteFromRelationConfirmationDialog.java
new file mode 100644
index 0000000..78eca1d
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/dialogs/DeleteFromRelationConfirmationDialog.java
@@ -0,0 +1,363 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.dialogs;
+
+import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
+import static org.openstreetmap.josm.tools.I18n.tr;
+import static org.openstreetmap.josm.tools.I18n.trn;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import javax.swing.AbstractAction;
+import javax.swing.JDialog;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
+import javax.swing.table.DefaultTableColumnModel;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableColumn;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.osm.NameFormatter;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.RelationToChildReference;
+import org.openstreetmap.josm.gui.DefaultNameFormatter;
+import org.openstreetmap.josm.gui.OsmPrimitivRenderer;
+import org.openstreetmap.josm.gui.SideButton;
+import org.openstreetmap.josm.gui.help.ContextSensitiveHelpAction;
+import org.openstreetmap.josm.gui.help.HelpUtil;
+import org.openstreetmap.josm.gui.widgets.HtmlPanel;
+import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.WindowGeometry;
+
+/**
+ * This dialog is used to get a user confirmation that a collection of primitives can be removed
+ * from their parent relations.
+ * @since 2308
+ */
+public class DeleteFromRelationConfirmationDialog extends JDialog implements TableModelListener {
+    /** the unique instance of this dialog */
+    private static DeleteFromRelationConfirmationDialog instance;
+
+    /**
+     * Replies the unique instance of this dialog
+     *
+     * @return The unique instance of this dialog
+     */
+    public static synchronized DeleteFromRelationConfirmationDialog getInstance() {
+        if (instance == null) {
+            instance = new DeleteFromRelationConfirmationDialog();
+        }
+        return instance;
+    }
+
+    /** the data model */
+    private RelationMemberTableModel model;
+    private HtmlPanel htmlPanel;
+    private boolean canceled;
+    private SideButton btnOK;
+
+    protected JPanel buildRelationMemberTablePanel() {
+        JTable table = new JTable(model, new RelationMemberTableColumnModel());
+        JPanel pnl = new JPanel();
+        pnl.setLayout(new BorderLayout());
+        pnl.add(new JScrollPane(table));
+        return pnl;
+    }
+
+    protected JPanel buildButtonPanel() {
+        JPanel pnl = new JPanel();
+        pnl.setLayout(new FlowLayout());
+        pnl.add(btnOK = new SideButton(new OKAction()));
+        btnOK.setFocusable(true);
+        pnl.add(new SideButton(new CancelAction()));
+        pnl.add(new SideButton(new ContextSensitiveHelpAction(ht("/Action/Delete#DeleteFromRelations"))));
+        return pnl;
+    }
+
+    protected final void build() {
+        model = new RelationMemberTableModel();
+        model.addTableModelListener(this);
+        getContentPane().setLayout(new BorderLayout());
+        getContentPane().add(htmlPanel = new HtmlPanel(), BorderLayout.NORTH);
+        getContentPane().add(buildRelationMemberTablePanel(), BorderLayout.CENTER);
+        getContentPane().add(buildButtonPanel(), BorderLayout.SOUTH);
+
+        HelpUtil.setHelpContext(this.getRootPane(), ht("/Action/Delete#DeleteFromRelations"));
+
+        addWindowListener(new WindowEventHandler());
+    }
+
+    protected void updateMessage() {
+        int numObjectsToDelete = model.getNumObjectsToDelete();
+        int numParentRelations = model.getNumParentRelations();
+        String msg;
+        if (numObjectsToDelete == 1 && numParentRelations == 1) {
+            msg = tr("<html>Please confirm to remove <strong>1 object</strong> from <strong>1 relation</strong>.</html>");
+        } else if (numObjectsToDelete == 1 && numParentRelations > 1) {
+            msg = tr("<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} relations</strong>.</html>",
+                    numParentRelations);
+        } else if (numObjectsToDelete > 1 && numParentRelations == 1) {
+            msg = tr("<html>Please confirm to remove <strong>1 object</strong> from <strong>{0} relations</strong>.</html>",
+                    numParentRelations);
+        } else {
+            msg = tr("<html>Please confirm to remove <strong>{0} objects</strong> from <strong>{1} relations</strong>.</html>",
+                    numObjectsToDelete, numParentRelations);
+        }
+        htmlPanel.getEditorPane().setText(msg);
+        invalidate();
+    }
+
+    protected void updateTitle() {
+        int numObjectsToDelete = model.getNumObjectsToDelete();
+        if (numObjectsToDelete > 0) {
+            setTitle(trn("Deleting {0} object", "Deleting {0} objects", numObjectsToDelete, numObjectsToDelete));
+        } else {
+            setTitle(tr("Delete objects"));
+        }
+    }
+
+    /**
+     * Constructs a new {@code DeleteFromRelationConfirmationDialog}.
+     */
+    public DeleteFromRelationConfirmationDialog() {
+        super(JOptionPane.getFrameForComponent(Main.parent), "", ModalityType.DOCUMENT_MODAL);
+        build();
+    }
+
+    /**
+     * Replies the data model used in this dialog
+     *
+     * @return the data model
+     */
+    public RelationMemberTableModel getModel() {
+        return model;
+    }
+
+    /**
+     * Replies true if the dialog was canceled
+     *
+     * @return true if the dialog was canceled
+     */
+    public boolean isCanceled() {
+        return canceled;
+    }
+
+    protected void setCanceled(boolean canceled) {
+        this.canceled = canceled;
+    }
+
+    @Override
+    public void setVisible(boolean visible) {
+        if (visible) {
+            new WindowGeometry(
+                    getClass().getName()  + ".geometry",
+                    WindowGeometry.centerInWindow(
+                            Main.parent,
+                            new Dimension(400, 200)
+                    )
+            ).applySafe(this);
+            setCanceled(false);
+        } else if (isShowing()) { // Avoid IllegalComponentStateException like in #8775
+            new WindowGeometry(this).remember(getClass().getName() + ".geometry");
+        }
+        super.setVisible(visible);
+    }
+
+    @Override
+    public void tableChanged(TableModelEvent e) {
+        updateMessage();
+        updateTitle();
+    }
+
+    /**
+     * The table model which manages the list of relation-to-child references
+     *
+     */
+    public static class RelationMemberTableModel extends DefaultTableModel {
+        private transient List<RelationToChildReference> data;
+
+        /**
+         * Constructs a new {@code RelationMemberTableModel}.
+         */
+        public RelationMemberTableModel() {
+            data = new ArrayList<>();
+        }
+
+        @Override
+        public int getRowCount() {
+            if (data == null) return 0;
+            return data.size();
+        }
+
+        protected void sort() {
+            Collections.sort(
+                    data,
+                    new Comparator<RelationToChildReference>() {
+                        private NameFormatter nf = DefaultNameFormatter.getInstance();
+                        @Override
+                        public int compare(RelationToChildReference o1, RelationToChildReference o2) {
+                            int cmp = o1.getChild().getDisplayName(nf).compareTo(o2.getChild().getDisplayName(nf));
+                            if (cmp != 0) return cmp;
+                            cmp = o1.getParent().getDisplayName(nf).compareTo(o2.getParent().getDisplayName(nf));
+                            if (cmp != 0) return cmp;
+                            return Integer.compare(o1.getPosition(), o2.getPosition());
+                        }
+                    }
+            );
+        }
+
+        public void populate(Collection<RelationToChildReference> references) {
+            data.clear();
+            if (references != null) {
+                data.addAll(references);
+            }
+            sort();
+            fireTableDataChanged();
+        }
+
+        public Set<OsmPrimitive> getObjectsToDelete() {
+            Set<OsmPrimitive> ret = new HashSet<>();
+            for (RelationToChildReference ref: data) {
+                ret.add(ref.getChild());
+            }
+            return ret;
+        }
+
+        public int getNumObjectsToDelete() {
+            return getObjectsToDelete().size();
+        }
+
+        public Set<OsmPrimitive> getParentRelations() {
+            Set<OsmPrimitive> ret = new HashSet<>();
+            for (RelationToChildReference ref: data) {
+                ret.add(ref.getParent());
+            }
+            return ret;
+        }
+
+        public int getNumParentRelations() {
+            return getParentRelations().size();
+        }
+
+        @Override
+        public Object getValueAt(int rowIndex, int columnIndex) {
+            if (data == null) return null;
+            RelationToChildReference ref = data.get(rowIndex);
+            switch(columnIndex) {
+            case 0: return ref.getChild();
+            case 1: return ref.getParent();
+            case 2: return ref.getPosition()+1;
+            case 3: return ref.getRole();
+            default:
+                assert false : "Illegal column index";
+            }
+            return null;
+        }
+
+        @Override
+        public boolean isCellEditable(int row, int column) {
+            return false;
+        }
+    }
+
+    private static class RelationMemberTableColumnModel extends DefaultTableColumnModel{
+
+        protected final void createColumns() {
+            TableColumn col = null;
+
+            // column 0 - To Delete
+            col = new TableColumn(0);
+            col.setHeaderValue(tr("To delete"));
+            col.setResizable(true);
+            col.setWidth(100);
+            col.setPreferredWidth(100);
+            col.setCellRenderer(new OsmPrimitivRenderer());
+            addColumn(col);
+
+            // column 0 - From Relation
+            col = new TableColumn(1);
+            col.setHeaderValue(tr("From Relation"));
+            col.setResizable(true);
+            col.setWidth(100);
+            col.setPreferredWidth(100);
+            col.setCellRenderer(new OsmPrimitivRenderer());
+            addColumn(col);
+
+            // column 1 - Pos.
+            col = new TableColumn(2);
+            col.setHeaderValue(tr("Pos."));
+            col.setResizable(true);
+            col.setWidth(30);
+            col.setPreferredWidth(30);
+            addColumn(col);
+
+            // column 2 - Role
+            col = new TableColumn(3);
+            col.setHeaderValue(tr("Role"));
+            col.setResizable(true);
+            col.setWidth(50);
+            col.setPreferredWidth(50);
+            addColumn(col);
+        }
+
+        public RelationMemberTableColumnModel() {
+            createColumns();
+        }
+    }
+
+    class OKAction extends AbstractAction {
+        public OKAction() {
+            putValue(NAME, tr("OK"));
+            putValue(SMALL_ICON, ImageProvider.get("ok"));
+            putValue(SHORT_DESCRIPTION, tr("Click to close the dialog and remove the object from the relations"));
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            setCanceled(false);
+            setVisible(false);
+        }
+    }
+
+    class CancelAction extends AbstractAction {
+        public CancelAction() {
+            putValue(NAME, tr("Cancel"));
+            putValue(SMALL_ICON, ImageProvider.get("cancel"));
+            putValue(SHORT_DESCRIPTION, tr("Click to close the dialog and to abort deleting the objects"));
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            setCanceled(true);
+            setVisible(false);
+        }
+    }
+
+    class WindowEventHandler extends WindowAdapter {
+
+        @Override
+        public void windowClosing(WindowEvent e) {
+            setCanceled(true);
+        }
+
+        @Override
+        public void windowOpened(WindowEvent e) {
+            btnOK.requestFocusInWindow();
+        }
+    }
+}
diff --git a/src/org/openstreetmap/josm/gui/dialogs/DialogsPanel.java b/src/org/openstreetmap/josm/gui/dialogs/DialogsPanel.java
index 54a2462..461ad53 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/DialogsPanel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/DialogsPanel.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.dialogs;
 
 import java.awt.Dimension;
@@ -18,16 +18,17 @@ import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.Destroyable;
 
 public class DialogsPanel extends JPanel implements Destroyable {
-    protected transient List<ToggleDialog> allDialogs = new ArrayList<>();
+    protected List<ToggleDialog> allDialogs = new ArrayList<>();
     protected MultiSplitPane mSpltPane = new MultiSplitPane();
     protected static final int DIVIDER_SIZE = 5;
 
     /**
      * Panels that are added to the multisplitpane.
      */
-    private transient List<JPanel> panels = new ArrayList<>();
+    private List<JPanel> panels = new ArrayList<>();
 
     private final JSplitPane parent;
+
     public DialogsPanel(JSplitPane parent) {
         this.parent = parent;
     }
@@ -124,8 +125,8 @@ public class DialogsPanel extends JPanel implements Destroyable {
          * in the last panel anyway.
          */
         JPanel p = panels.get(N-1); // current Panel (start with last one)
-        int k = -1;                 // indicates that the current Panel index is N-1, but no default-view-Dialog has been added to this Panel yet.
-        for (int i=N-1; i >= 0 ; --i) {
+        int k = -1;                 // indicates that current Panel index is N-1, but no default-view-Dialog has been added to this Panel yet.
+        for (int i = N-1; i >= 0; --i) {
             final ToggleDialog dlg = allDialogs.get(i);
             if (dlg.isDialogInDefaultView()) {
                 if (k == -1) {
@@ -136,8 +137,7 @@ public class DialogsPanel extends JPanel implements Destroyable {
                 }
                 p.add(dlg, 0);
                 p.setVisible(true);
-            }
-            else if (dlg.isDialogInCollapsedView()) {
+            } else if (dlg.isDialogInCollapsedView()) {
                 p.add(dlg, 0);
                 p.setVisible(true);
             }
@@ -152,12 +152,12 @@ public class DialogsPanel extends JPanel implements Destroyable {
          * Determine the panel geometry
          */
         if (action == Action.ELEMENT_SHRINKS) {
-            for (int i=0; i<N; ++i) {
+            for (int i = 0; i < N; ++i) {
                 final ToggleDialog dlg = allDialogs.get(i);
                 if (dlg.isDialogInDefaultView()) {
                     final int ph = dlg.getPreferredHeight();
                     final int ah = dlg.getSize().height;
-                    dlg.setPreferredSize(new Dimension(Integer.MAX_VALUE, (ah < 20 ? ph : ah)));
+                    dlg.setPreferredSize(new Dimension(Integer.MAX_VALUE, ah < 20 ? ph : ah));
                 }
             }
         } else {
@@ -209,7 +209,7 @@ public class DialogsPanel extends JPanel implements Destroyable {
              */
             int D_m = 0;        // additional space needed by the small dialogs
             int D_p = 0;        // available space from the large dialogs
-            for (int i=0; i<N; ++i) {
+            for (int i = 0; i < N; ++i) {
                 final ToggleDialog dlg = allDialogs.get(i);
                 if (dlg.isDialogInDefaultView() && dlg != triggeredBy) {
                     final int ha = dlg.getSize().height;                              // current
@@ -224,7 +224,7 @@ public class DialogsPanel extends JPanel implements Destroyable {
                 }
             }
             /** adjust, without changing the sum */
-            for (int i=0; i<N; ++i) {
+            for (int i = 0; i < N; ++i) {
                 final ToggleDialog dlg = allDialogs.get(i);
                 if (dlg.isDialogInDefaultView() && dlg != triggeredBy) {
                     final int ha = dlg.getHeight();
@@ -277,8 +277,7 @@ public class DialogsPanel extends JPanel implements Destroyable {
         /**
          * Hide the Panel, if there is nothing to show
          */
-        if (numPanels == 1 && panels.get(N-1).getComponents().length == 0)
-        {
+        if (numPanels == 1 && panels.get(N-1).getComponents().length == 0) {
             parent.setDividerSize(0);
             this.setVisible(false);
         } else {
@@ -302,7 +301,7 @@ public class DialogsPanel extends JPanel implements Destroyable {
      * Replies the instance of a toggle dialog of type <code>type</code> managed by this
      * map frame
      *
-     * @param <T>
+     * @param <T> toggle dialog type
      * @param type the class of the toggle dialog, i.e. UserListDialog.class
      * @return the instance of a toggle dialog of type <code>type</code> managed by this
      * map frame; null, if no such dialog exists
diff --git a/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java b/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java
index 3973c01..b245b6a 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java
@@ -97,7 +97,6 @@ public class FilterDialog extends ToggleDialog implements DataSetListener {
     = Shortcut.registerShortcut("core_multikey:hidingFilter", tr("Multikey: {0}", tr("Hide filter")),
             KeyEvent.VK_H, Shortcut.ALT_CTRL);
 
-
     protected final String[] columnToolTips = {
             Main.platform.makeTooltip(tr("Enable filter"), ENABLE_FILTER_SHORTCUT),
             Main.platform.makeTooltip(tr("Hiding filter"), HIDING_FILTER_SHORTCUT),
@@ -107,7 +106,7 @@ public class FilterDialog extends ToggleDialog implements DataSetListener {
     };
 
     protected void build() {
-        userTable = new JTable(filterModel){
+        userTable = new JTable(filterModel) {
             @Override
             protected JTableHeader createDefaultTableHeader() {
                 return new JTableHeader(columnModel) {
@@ -141,12 +140,13 @@ public class FilterDialog extends ToggleDialog implements DataSetListener {
             {
                 putValue(NAME, tr("Add"));
                 putValue(SHORT_DESCRIPTION,  tr("Add filter."));
-                putValue(SMALL_ICON, ImageProvider.get("dialogs","add"));
+                putValue(SMALL_ICON, ImageProvider.get("dialogs", "add"));
             }
+
             @Override
             public void actionPerformed(ActionEvent e) {
-                Filter filter = (Filter)SearchAction.showSearchDialog(new Filter());
-                if(filter != null){
+                Filter filter = (Filter) SearchAction.showSearchDialog(new Filter());
+                if (filter != null) {
                     filterModel.addFilter(filter);
                 }
             }});
@@ -156,13 +156,14 @@ public class FilterDialog extends ToggleDialog implements DataSetListener {
                 putValue(SHORT_DESCRIPTION, tr("Edit filter."));
                 putValue(SMALL_ICON, ImageProvider.get("dialogs", "edit"));
             }
+
             @Override
             public void actionPerformed(ActionEvent e) {
                 int index = userTable.getSelectionModel().getMinSelectionIndex();
-                if(index < 0) return;
+                if (index < 0) return;
                 Filter f = filterModel.getFilter(index);
-                Filter filter = (Filter)SearchAction.showSearchDialog(f);
-                if(filter != null){
+                Filter filter = (Filter) SearchAction.showSearchDialog(f);
+                if (filter != null) {
                     filterModel.setFilter(index, filter);
                 }
             }
@@ -173,10 +174,11 @@ public class FilterDialog extends ToggleDialog implements DataSetListener {
                 putValue(SHORT_DESCRIPTION, tr("Delete filter."));
                 putValue(SMALL_ICON, ImageProvider.get("dialogs", "delete"));
             }
+
             @Override
             public void actionPerformed(ActionEvent e) {
                 int index = userTable.getSelectionModel().getMinSelectionIndex();
-                if(index < 0) return;
+                if (index < 0) return;
                 filterModel.removeFilter(index);
             }
         });
@@ -186,10 +188,11 @@ public class FilterDialog extends ToggleDialog implements DataSetListener {
                 putValue(SHORT_DESCRIPTION, tr("Move filter up."));
                 putValue(SMALL_ICON, ImageProvider.get("dialogs", "up"));
             }
+
             @Override
             public void actionPerformed(ActionEvent e) {
                 int index = userTable.getSelectionModel().getMinSelectionIndex();
-                if(index < 0) return;
+                if (index < 0) return;
                 filterModel.moveUpFilter(index);
                 userTable.getSelectionModel().setSelectionInterval(index-1, index-1);
             }
@@ -201,10 +204,11 @@ public class FilterDialog extends ToggleDialog implements DataSetListener {
                 putValue(SHORT_DESCRIPTION, tr("Move filter down."));
                 putValue(SMALL_ICON, ImageProvider.get("dialogs", "down"));
             }
+
             @Override
             public void actionPerformed(ActionEvent e) {
                 int index = userTable.getSelectionModel().getMinSelectionIndex();
-                if(index < 0) return;
+                if (index < 0) return;
                 filterModel.moveDownFilter(index);
                 userTable.getSelectionModel().setSelectionInterval(index+1, index+1);
             }
@@ -215,7 +219,7 @@ public class FilterDialog extends ToggleDialog implements DataSetListener {
             @Override
             public void actionPerformed(ActionEvent e) {
                 int index = userTable.getSelectedRow();
-                if (index<0) return;
+                if (index < 0) return;
                 Filter filter = filterModel.getFilter(index);
                 filterModel.setValueAt(!filter.enable, index, FilterTableModel.COL_ENABLED);
             }
@@ -226,7 +230,7 @@ public class FilterDialog extends ToggleDialog implements DataSetListener {
             @Override
             public void actionPerformed(ActionEvent e) {
                 int index = userTable.getSelectedRow();
-                if (index<0) return;
+                if (index < 0) return;
                 Filter filter = filterModel.getFilter(index);
                 filterModel.setValueAt(!filter.hiding, index, FilterTableModel.COL_HIDING);
             }
@@ -246,8 +250,8 @@ public class FilterDialog extends ToggleDialog implements DataSetListener {
 
     static class StringRenderer extends DefaultTableCellRenderer {
         @Override
-        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,int row,int column) {
-            FilterTableModel model = (FilterTableModel)table.getModel();
+        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
+            FilterTableModel model = (FilterTableModel) table.getModel();
             Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
             cell.setEnabled(model.isCellEnabled(row, column));
             return cell;
@@ -256,9 +260,9 @@ public class FilterDialog extends ToggleDialog implements DataSetListener {
 
     static class BooleanRenderer extends JCheckBox implements TableCellRenderer {
         @Override
-        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,int row,int column) {
-            FilterTableModel model = (FilterTableModel)table.getModel();
-            setSelected(value != null && (Boolean)value);
+        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
+            FilterTableModel model = (FilterTableModel) table.getModel();
+            setSelected(value != null && (Boolean) value);
             setEnabled(model.isCellEnabled(row, column));
             setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
             return this;
@@ -299,11 +303,11 @@ public class FilterDialog extends ToggleDialog implements DataSetListener {
             result.add(p);
 
             if (p instanceof Way) {
-                for (OsmPrimitive n: ((Way)p).getNodes()) {
+                for (OsmPrimitive n: ((Way) p).getNodes()) {
                     stack.push(n);
                 }
             } else if (p instanceof Relation) {
-                for (RelationMember rm: ((Relation)p).getMembers()) {
+                for (RelationMember rm: ((Relation) p).getMembers()) {
                     stack.push(rm.getMember());
                 }
             }
@@ -361,7 +365,7 @@ public class FilterDialog extends ToggleDialog implements DataSetListener {
      * add a new filter.
      * @return the filtermodel
      */
-    public FilterTableModel getFilterModel(){
+    public FilterTableModel getFilterModel() {
         return filterModel;
     }
 
@@ -378,7 +382,7 @@ public class FilterDialog extends ToggleDialog implements DataSetListener {
         public List<MultikeyInfo> getMultikeyCombinations() {
             List<MultikeyInfo> result = new ArrayList<>();
 
-            for (int i=0; i<filterModel.getRowCount(); i++) {
+            for (int i = 0; i < filterModel.getRowCount(); i++) {
                 Filter filter = filterModel.getFilter(i);
                 MultikeyInfo info = new MultikeyInfo(i, filter.text);
                 result.add(info);
@@ -398,7 +402,6 @@ public class FilterDialog extends ToggleDialog implements DataSetListener {
             else
                 return null;
         }
-
     }
 
     private class EnableFilterAction extends AbstractFilterAction  {
diff --git a/src/org/openstreetmap/josm/gui/dialogs/FilterTableModel.java b/src/org/openstreetmap/josm/gui/dialogs/FilterTableModel.java
index 2f0720c..6b33179 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/FilterTableModel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/FilterTableModel.java
@@ -126,7 +126,7 @@ public class FilterTableModel extends AbstractTableModel {
 
         ds.beginUpdate();
         try {
-            for (int i=0; i<2; i++) {
+            for (int i = 0; i < 2; i++) {
                 for (OsmPrimitive primitive: primitives) {
 
                     if (i == 0 && primitive instanceof Node) {
@@ -251,18 +251,18 @@ public class FilterTableModel extends AbstractTableModel {
 
     @Override
     public String getColumnName(int column) {
-        String[] names = { /* translators notes must be in front */
+        String[] names = {/* translators notes must be in front */
                 /* column header: enable filter */trc("filter", "E"),
                 /* column header: hide filter */trc("filter", "H"),
                 /* column header: filter text */trc("filter", "Text"),
                 /* column header: inverted filter */trc("filter", "I"),
-                /* column header: filter mode */trc("filter", "M") };
+                /* column header: filter mode */trc("filter", "M")};
         return names[column];
     }
 
     @Override
     public Class<?> getColumnClass(int column) {
-        Class<?>[] classes = { Boolean.class, Boolean.class, String.class, Boolean.class, String.class };
+        Class<?>[] classes = {Boolean.class, Boolean.class, String.class, Boolean.class, String.class};
         return classes[column];
     }
 
diff --git a/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDialog.java b/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDialog.java
index 5c16369..93327f0 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDialog.java
@@ -6,11 +6,15 @@ import static org.openstreetmap.josm.tools.I18n.trn;
 
 import java.awt.Dimension;
 import java.awt.GridBagLayout;
+import java.text.Collator;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
+import java.util.Locale;
+import java.util.Map;
 import java.util.Map.Entry;
+import java.util.TreeMap;
 
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
@@ -61,8 +65,8 @@ public class InspectPrimitiveDialog extends ExtendedDialog {
 
     protected transient List<OsmPrimitive> primitives;
     protected transient OsmDataLayer layer;
-    private JosmTextArea txtMappaint;
     private boolean mappaintTabLoaded;
+    private boolean editcountTabLoaded;
 
     public InspectPrimitiveDialog(Collection<OsmPrimitive> primitives, OsmDataLayer layer) {
         super(Main.parent, tr("Advanced object info"), new String[] {tr("Close")});
@@ -73,8 +77,9 @@ public class InspectPrimitiveDialog extends ExtendedDialog {
 
         setButtonIcons(new String[]{"ok.png"});
         final JTabbedPane tabs = new JTabbedPane();
-        JPanel pData = buildDataPanel();
-        tabs.addTab(tr("data"), pData);
+
+        tabs.addTab(tr("data"), genericMonospacePanel(new JPanel(), buildDataText()));
+
         final JPanel pMapPaint = new JPanel();
         tabs.addTab(tr("map style"), pMapPaint);
         tabs.getModel().addChangeListener(new ChangeListener() {
@@ -83,26 +88,34 @@ public class InspectPrimitiveDialog extends ExtendedDialog {
             public void stateChanged(ChangeEvent e) {
                 if (!mappaintTabLoaded && ((SingleSelectionModel) e.getSource()).getSelectedIndex() == 1) {
                     mappaintTabLoaded = true;
-                    buildMapPaintPanel(pMapPaint);
-                    createMapPaintText();
+                    genericMonospacePanel(pMapPaint, buildMapPaintText());
                 }
             }
         });
-        setContent(tabs, false);
-    }
 
-    protected JPanel buildDataPanel() {
-        JPanel p = new JPanel(new GridBagLayout());
-        JosmTextArea txtData = new JosmTextArea();
-        txtData.setFont(GuiHelper.getMonospacedFont(txtData));
-        txtData.setEditable(false);
-        txtData.setText(buildDataText());
-        txtData.setSelectionStart(0);
-        txtData.setSelectionEnd(0);
+        final JPanel pEditCounts = new JPanel();
+        tabs.addTab(tr("edit counts"), pEditCounts);
+        tabs.getModel().addChangeListener(new ChangeListener() {
+
+            @Override
+            public void stateChanged(ChangeEvent e) {
+                if (!editcountTabLoaded && ((SingleSelectionModel) e.getSource()).getSelectedIndex() == 2) {
+                    editcountTabLoaded = true;
+                    genericMonospacePanel(pEditCounts, buildListOfEditorsText());
+                }
+            }
+        });
 
-        JScrollPane scroll = new JScrollPane(txtData);
+        setContent(tabs, false);
+    }
 
-        p.add(scroll, GBC.std().fill());
+    protected JPanel genericMonospacePanel(JPanel p, String s) {
+        p.setLayout(new GridBagLayout());
+        JosmTextArea jte = new JosmTextArea();
+        jte.setFont(GuiHelper.getMonospacedFont(jte));
+        jte.setEditable(false);
+        jte.append(s);
+        p.add(new JScrollPane(jte), GBC.std().fill());
         return p;
     }
 
@@ -219,7 +232,7 @@ public class InspectPrimitiveDialog extends ExtendedDialog {
         void addCommon(OsmPrimitive o) {
             add(tr("Data Set: "), Integer.toHexString(o.getDataSet().hashCode()));
             add(tr("Edited at: "), o.isTimestampEmpty() ? tr("<new object>")
-                    : DateUtils.fromDate(o.getTimestamp()));
+                    : DateUtils.fromTimestamp(o.getRawTimestamp()));
             add(tr("Edited by: "), o.getUser() == null ? tr("<new object>")
                     : getNameAndId(o.getUser().getName(), o.getUser().getId()));
             add(tr("Version: "), Integer.toString(o.getVersion()));
@@ -321,21 +334,13 @@ public class InspectPrimitiveDialog extends ExtendedDialog {
         }
     }
 
-    protected void buildMapPaintPanel(JPanel p) {
-        p.setLayout(new GridBagLayout());
-        txtMappaint = new JosmTextArea();
-        txtMappaint.setFont(GuiHelper.getMonospacedFont(txtMappaint));
-        txtMappaint.setEditable(false);
-
-        p.add(new JScrollPane(txtMappaint), GBC.std().fill());
-    }
-
-    protected void createMapPaintText() {
+    protected String buildMapPaintText() {
         final Collection<OsmPrimitive> sel = Main.main.getCurrentDataSet().getAllSelected();
         ElemStyles elemstyles = MapPaintStyles.getStyles();
         NavigatableComponent nc = Main.map.mapView;
         double scale = nc.getDist100Pixel();
 
+        final StringBuilder txtMappaint = new StringBuilder();
         MapCSSStyleSource.STYLE_SOURCE_LOCK.readLock().lock();
         try {
             for (OsmPrimitive osm : sel) {
@@ -349,7 +354,7 @@ public class InspectPrimitiveDialog extends ExtendedDialog {
                         s.apply(mc, osm, scale, false);
                         txtMappaint.append(tr("\nRange:{0}", mc.range));
                         for (Entry<String, Cascade> e : mc.getLayers()) {
-                            txtMappaint.append("\n " + e.getKey() + ": \n" + e.getValue());
+                            txtMappaint.append("\n ").append(e.getKey()).append(": \n").append(e.getValue());
                         }
                     } else {
                         txtMappaint.append(tr("\n\n> skipping \"{0}\" (not active)", s.getDisplayString()));
@@ -358,7 +363,7 @@ public class InspectPrimitiveDialog extends ExtendedDialog {
                 txtMappaint.append(tr("\n\nList of generated Styles:\n"));
                 StyleList sl = elemstyles.get(osm, scale, nc);
                 for (ElemStyle s : sl) {
-                    txtMappaint.append(" * " + s + "\n");
+                    txtMappaint.append(" * ").append(s).append("\n");
                 }
                 txtMappaint.append("\n\n");
             }
@@ -379,6 +384,41 @@ public class InspectPrimitiveDialog extends ExtendedDialog {
                 txtMappaint.append(tr("Warning: The 2 selected objects have equal, but not identical style caches."));
             }
         }
+        return txtMappaint.toString();
+    }
+
+    /*  Future Ideas:
+        Calculate the most recent edit date from o.getTimestamp().
+        Sort by the count for presentation, so the most active editors are on top.
+        Count only tagged nodes (so empty way nodes don't inflate counts).
+    */
+    protected String buildListOfEditorsText() {
+        final StringBuilder s = new StringBuilder();
+        final Map<String, Integer> editCountByUser = new TreeMap<>(Collator.getInstance(Locale.getDefault()));
+
+        // Count who edited each selected object
+        for (OsmPrimitive o : primitives) {
+            if (o.getUser() != null) {
+                String username = o.getUser().getName();
+                Integer oldCount = editCountByUser.get(username);
+                if (oldCount == null) {
+                    editCountByUser.put(username, 1);
+                } else {
+                    editCountByUser.put(username, oldCount + 1);
+                }
+            }
+        }
+
+        // Print the count in sorted order
+        s.append(trn("{0} user last edited the selection:", "{0} users last edited the selection:",
+                editCountByUser.size(), editCountByUser.size()));
+        s.append("\n\n");
+        for (Map.Entry<String, Integer> entry : editCountByUser.entrySet()) {
+            final String username = entry.getKey();
+            final Integer editCount = entry.getValue();
+            s.append(String.format("%6d  %s%n", editCount, username));
+        }
+        return s.toString();
     }
 
     private String getSort(StyleSource s) {
diff --git a/src/org/openstreetmap/josm/gui/dialogs/LatLonDialog.java b/src/org/openstreetmap/josm/gui/dialogs/LatLonDialog.java
index 521caaf..1a83dae 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/LatLonDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/LatLonDialog.java
@@ -11,6 +11,7 @@ import java.awt.event.FocusListener;
 import java.text.NumberFormat;
 import java.text.ParsePosition;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Locale;
 import java.util.regex.Matcher;
@@ -35,17 +36,18 @@ import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.widgets.HtmlPanel;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
 import org.openstreetmap.josm.tools.GBC;
+import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.WindowGeometry;
 
 public class LatLonDialog extends ExtendedDialog {
-    private static final Color BG_COLOR_ERROR = new Color(255,224,224);
+    private static final Color BG_COLOR_ERROR = new Color(255, 224, 224);
 
     public JTabbedPane tabs;
     private JosmTextField tfLatLon, tfEastNorth;
     private LatLon latLonCoordinates;
     private EastNorth eastNorthCoordinates;
 
-    private static final double ZERO = 0.0;
+    private static final Double ZERO = 0.0;
     private static final String DEG = "\u00B0";
     private static final String MIN = "\u2032";
     private static final String SEC = "\u2033";
@@ -55,7 +57,7 @@ public class LatLonDialog extends ExtendedDialog {
     private static final char E_TR = LatLon.EAST.charAt(0);
     private static final char W_TR = LatLon.WEST.charAt(0);
 
-    private static final Pattern p = Pattern.compile(
+    private static final Pattern P = Pattern.compile(
             "([+|-]?\\d+[.,]\\d+)|"             // (1)
             + "([+|-]?\\d+)|"                   // (2)
             + "("+DEG+"|o|deg)|"                // (3)
@@ -66,43 +68,62 @@ public class LatLonDialog extends ExtendedDialog {
             + "\\s+|"
             + "(.+)");
 
+    private static final Pattern P_XML = Pattern.compile(
+            "lat=[\"']([+|-]?\\d+[.,]\\d+)[\"']\\s+lon=[\"']([+|-]?\\d+[.,]\\d+)[\"']");
+
     protected JPanel buildLatLon() {
         JPanel pnl = new JPanel(new GridBagLayout());
-        pnl.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        pnl.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
 
-        pnl.add(new JLabel(tr("Coordinates:")), GBC.std().insets(0,10,5,0));
+        pnl.add(new JLabel(tr("Coordinates:")), GBC.std().insets(0, 10, 5, 0));
         tfLatLon = new JosmTextField(24);
-        pnl.add(tfLatLon, GBC.eol().insets(0,10,0,0).fill(GBC.HORIZONTAL).weight(1.0, 0.0));
+        pnl.add(tfLatLon, GBC.eol().insets(0, 10, 0, 0).fill(GBC.HORIZONTAL).weight(1.0, 0.0));
 
-        pnl.add(new JSeparator(), GBC.eol().fill(GBC.HORIZONTAL).insets(0,5,0,5));
+        pnl.add(new JSeparator(), GBC.eol().fill(GBC.HORIZONTAL).insets(0, 5, 0, 5));
 
         pnl.add(new HtmlPanel(
-                tr("Enter the coordinates for the new node.<br/>You can separate longitude and latitude with space, comma or semicolon.<br/>" +
-                        "Use positive numbers or N, E characters to indicate North or East cardinal direction.<br/>" +
-                        "For South and West cardinal directions you can use either negative numbers or S, W characters.<br/>" +
-                        "Coordinate value can be in one of three formats:<ul>" +
-                        "<li><i>degrees</i><tt>°</tt></li>" +
-                        "<li><i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt></li>" +
-                        "<li><i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt></li>" +
-                        "</ul>" +
-                        "Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, <tt>″</tt> are optional.<br/><br/>" +
-                        "Some examples:<ul>{0}</ul>",
-                        "<li>49.29918° 19.24788°</li>" +
-                        "<li>N 49.29918 E 19.24788</li>" +
-                        "<li>W 49°29.918' S 19°24.788'</li>" +
-                        "<li>N 49°29'04" E 19°24'43"</li>" +
-                        "<li>49.29918 N, 19.24788 E</li>" +
-                        "<li>49°29'21" N 19°24'38" E</li>" +
-                        "<li>49 29 51, 19 24 18</li>" +
-                        "<li>49 29, 19 24</li>" +
-                        "<li>E 49 29, N 19 24</li>" +
-                        "<li>49° 29; 19° 24</li>" +
-                        "<li>N 49° 29, W 19° 24</li>" +
-                        "<li>49° 29.5 S, 19° 24.6 E</li>" +
-                        "<li>N 49 29.918 E 19 15.88</li>" +
-                        "<li>49 29.4 19 24.5</li>" +
-                        "<li>-49 29.4 N -19 24.5 W</li>" +
-                        "<li>48 deg 42' 52.13\" N, 21 deg 11' 47.60\" E</li>")),
+                Utils.join("<br/>", Arrays.asList(
+                        tr("Enter the coordinates for the new node."),
+                        tr("You can separate longitude and latitude with space, comma or semicolon."),
+                        tr("Use positive numbers or N, E characters to indicate North or East cardinal direction."),
+                        tr("For South and West cardinal directions you can use either negative numbers or S, W characters."),
+                        tr("Coordinate value can be in one of three formats:")
+                      )) +
+                Utils.joinAsHtmlUnorderedList(Arrays.asList(
+                        tr("<i>degrees</i><tt>°</tt>"),
+                        tr("<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt>"),
+                        tr("<i>degrees</i><tt>°</tt> <i>minutes</i><tt>'</tt> <i>seconds</i><tt>&quot</tt>")
+                      )) +
+                Utils.join("<br/><br/>", Arrays.asList(
+                        tr("Symbols <tt>°</tt>, <tt>'</tt>, <tt>′</tt>, <tt>"</tt>, <tt>″</tt> are optional."),
+                        tr("You can also use the syntax <tt>lat=\"...\" lon=\"...\"</tt> or <tt>lat=''...'' lon=''...''</tt>."),
+                        tr("Some examples:")
+                      )) +
+                "<table><tr><td>" +
+                Utils.joinAsHtmlUnorderedList(Arrays.asList(
+                        "49.29918° 19.24788°",
+                        "N 49.29918 E 19.24788",
+                        "W 49°29.918' S 19°24.788'",
+                        "N 49°29'04" E 19°24'43"",
+                        "49.29918 N, 19.24788 E",
+                        "49°29'21" N 19°24'38" E",
+                        "49 29 51, 19 24 18",
+                        "49 29, 19 24",
+                        "E 49 29, N 19 24"
+                      )) +
+                "</td><td>" +
+                Utils.joinAsHtmlUnorderedList(Arrays.asList(
+                        "49° 29; 19° 24",
+                        "N 49° 29, W 19° 24",
+                        "49° 29.5 S, 19° 24.6 E",
+                        "N 49 29.918 E 19 15.88",
+                        "49 29.4 19 24.5",
+                        "-49 29.4 N -19 24.5 W",
+                        "48 deg 42' 52.13\" N, 21 deg 11' 47.60\" E",
+                        "lat=\"49.29918\" lon=\"19.24788\"",
+                        "lat='49.29918' lon='19.24788'"
+                    )) +
+                "</td></tr></table>"),
                 GBC.eol().fill().weight(1.0, 1.0));
 
         // parse and verify input on the fly
@@ -119,14 +140,14 @@ public class LatLonDialog extends ExtendedDialog {
 
     private JPanel buildEastNorth() {
         JPanel pnl = new JPanel(new GridBagLayout());
-        pnl.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        pnl.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
 
-        pnl.add(new JLabel(tr("Projected coordinates:")), GBC.std().insets(0,10,5,0));
+        pnl.add(new JLabel(tr("Projected coordinates:")), GBC.std().insets(0, 10, 5, 0));
         tfEastNorth = new JosmTextField(24);
 
-        pnl.add(tfEastNorth, GBC.eol().insets(0,10,0,0).fill(GBC.HORIZONTAL).weight(1.0, 0.0));
+        pnl.add(tfEastNorth, GBC.eol().insets(0, 10, 0, 0).fill(GBC.HORIZONTAL).weight(1.0, 0.0));
 
-        pnl.add(new JSeparator(), GBC.eol().fill(GBC.HORIZONTAL).insets(0,5,0,5));
+        pnl.add(new JSeparator(), GBC.eol().fill(GBC.HORIZONTAL).insets(0, 5, 0, 5));
 
         pnl.add(new HtmlPanel(
                 tr("Enter easting and northing (x and y) separated by space, comma or semicolon.")),
@@ -161,8 +182,8 @@ public class LatLonDialog extends ExtendedDialog {
     }
 
     public LatLonDialog(Component parent, String title, String help) {
-        super(parent, title, new String[] { tr("Ok"), tr("Cancel") });
-        setButtonIcons(new String[] { "ok", "cancel" });
+        super(parent, title, new String[] {tr("Ok"), tr("Cancel")});
+        setButtonIcons(new String[] {"ok", "cancel"});
         configureContextsensitiveHelp(help, true);
 
         build();
@@ -175,7 +196,7 @@ public class LatLonDialog extends ExtendedDialog {
 
     public void setCoordinates(LatLon ll) {
         if (ll == null) {
-            ll = new LatLon(0,0);
+            ll = new LatLon(0, 0);
         }
         this.latLonCoordinates = ll;
         tfLatLon.setText(ll.latToString(CoordinateFormat.getDefaultFormat()) + " " + ll.lonToString(CoordinateFormat.getDefaultFormat()));
@@ -223,19 +244,19 @@ public class LatLonDialog extends ExtendedDialog {
         // try to parse using the current locale
         //
         NumberFormat f = NumberFormat.getNumberInstance();
-        Number n=null;
+        Number n = null;
         ParsePosition pp = new ParsePosition(0);
-        n = f.parse(input,pp);
-        if (pp.getErrorIndex() >= 0 || pp.getIndex()<input.length()) {
+        n = f.parse(input, pp);
+        if (pp.getErrorIndex() >= 0 || pp.getIndex() < input.length()) {
             // fall back - try to parse with the english locale
             //
             pp = new ParsePosition(0);
             f = NumberFormat.getNumberInstance(Locale.ENGLISH);
             n = f.parse(input, pp);
-            if (pp.getErrorIndex() >= 0 || pp.getIndex()<input.length())
+            if (pp.getErrorIndex() >= 0 || pp.getIndex() < input.length())
                 return null;
         }
-        return n== null ? null : n.doubleValue();
+        return n == null ? null : n.doubleValue();
     }
 
     protected void parseLatLonUserInput() {
@@ -253,7 +274,7 @@ public class LatLonDialog extends ExtendedDialog {
             latLonCoordinates = null;
             setOkEnabled(false);
         } else {
-            clearErrorFeedback(tfLatLon,tr("Please enter a GPS coordinates"));
+            clearErrorFeedback(tfLatLon, tr("Please enter a GPS coordinates"));
             latLonCoordinates = latLon;
             setOkEnabled(true);
         }
@@ -271,7 +292,7 @@ public class LatLonDialog extends ExtendedDialog {
             latLonCoordinates = null;
             setOkEnabled(false);
         } else {
-            clearErrorFeedback(tfEastNorth,tr("Please enter a Easting and Northing"));
+            clearErrorFeedback(tfEastNorth, tr("Please enter a Easting and Northing"));
             eastNorthCoordinates = en;
             setOkEnabled(true);
         }
@@ -330,92 +351,102 @@ public class LatLonDialog extends ExtendedDialog {
         public void focusGained(FocusEvent e) {
             Component c = e.getComponent();
             if (c instanceof JosmTextField) {
-                JosmTextField tf = (JosmTextField)c;
+                JosmTextField tf = (JosmTextField) c;
                 tf.selectAll();
             }
         }
+
         @Override
-        public void focusLost(FocusEvent e) {}
+        public void focusLost(FocusEvent e) {
+            // Not used
+        }
     }
 
     public static LatLon parseLatLon(final String coord) {
-        final Matcher m = p.matcher(coord);
-
-        final StringBuilder sb = new StringBuilder();
-        final List<Object> list = new ArrayList<>();
-
-        while (m.find()) {
-            if (m.group(1) != null) {
-                sb.append('R');     // floating point number
-                list.add(Double.parseDouble(m.group(1).replace(',', '.')));
-            } else if (m.group(2) != null) {
-                sb.append('Z');     // integer number
-                list.add(Double.parseDouble(m.group(2)));
-            } else if (m.group(3) != null) {
-                sb.append('o');     // degree sign
-            } else if (m.group(4) != null) {
-                sb.append('\'');    // seconds sign
-            } else if (m.group(5) != null) {
-                sb.append('"');     // minutes sign
-            } else if (m.group(6) != null) {
-                sb.append(',');     // separator
-            } else if (m.group(7) != null) {
-                sb.append("x");     // cardinal direction
-                String c = m.group(7).toUpperCase();
-                if ("N".equals(c) || "S".equals(c) || "E".equals(c) || "W".equals(c)) {
-                    list.add(c);
-                } else {
-                    list.add(c.replace(N_TR, 'N').replace(S_TR, 'S')
-                            .replace(E_TR, 'E').replace(W_TR, 'W'));
-                }
-            } else if (m.group(8) != null) {
-                throw new IllegalArgumentException("invalid token: " + m.group(8));
-            }
-        }
-
-        final String pattern = sb.toString();
-
-        final Object[] params = list.toArray();
         final LatLonHolder latLon = new LatLonHolder();
-
-        if (pattern.matches("Ro?,?Ro?")) {
-            setLatLonObj(latLon,
-                    params[0], ZERO, ZERO, "N",
-                    params[1], ZERO, ZERO, "E");
-        } else if (pattern.matches("xRo?,?xRo?")) {
-            setLatLonObj(latLon,
-                    params[1], ZERO, ZERO, params[0],
-                    params[3], ZERO, ZERO, params[2]);
-        } else if (pattern.matches("Ro?x,?Ro?x")) {
+        final Matcher mXml = P_XML.matcher(coord);
+        if (mXml.matches()) {
             setLatLonObj(latLon,
-                    params[0], ZERO, ZERO, params[1],
-                    params[2], ZERO, ZERO, params[3]);
-        } else if (pattern.matches("Zo[RZ]'?,?Zo[RZ]'?|Z[RZ],?Z[RZ]")) {
-            setLatLonObj(latLon,
-                    params[0], params[1], ZERO, "N",
-                    params[2], params[3], ZERO, "E");
-        } else if (pattern.matches("xZo[RZ]'?,?xZo[RZ]'?|xZo?[RZ],?xZo?[RZ]")) {
-            setLatLonObj(latLon,
-                    params[1], params[2], ZERO, params[0],
-                    params[4], params[5], ZERO, params[3]);
-        } else if (pattern.matches("Zo[RZ]'?x,?Zo[RZ]'?x|Zo?[RZ]x,?Zo?[RZ]x")) {
-            setLatLonObj(latLon,
-                    params[0], params[1], ZERO, params[2],
-                    params[3], params[4], ZERO, params[5]);
-        } else if (pattern.matches("ZoZ'[RZ]\"?x,?ZoZ'[RZ]\"?x|ZZ[RZ]x,?ZZ[RZ]x")) {
-            setLatLonObj(latLon,
-                    params[0], params[1], params[2], params[3],
-                    params[4], params[5], params[6], params[7]);
-        } else if (pattern.matches("xZoZ'[RZ]\"?,?xZoZ'[RZ]\"?|xZZ[RZ],?xZZ[RZ]")) {
-            setLatLonObj(latLon,
-                    params[1], params[2], params[3], params[0],
-                    params[5], params[6], params[7], params[4]);
-        } else if (pattern.matches("ZZ[RZ],?ZZ[RZ]")) {
-            setLatLonObj(latLon,
-                    params[0], params[1], params[2], "N",
-                    params[3], params[4], params[5], "E");
+                    Double.valueOf(mXml.group(1).replace(',', '.')), ZERO, ZERO, "N",
+                    Double.valueOf(mXml.group(2).replace(',', '.')), ZERO, ZERO, "E");
         } else {
-            throw new IllegalArgumentException("invalid format: " + pattern);
+            final Matcher m = P.matcher(coord);
+
+            final StringBuilder sb = new StringBuilder();
+            final List<Object> list = new ArrayList<>();
+
+            while (m.find()) {
+                if (m.group(1) != null) {
+                    sb.append('R');     // floating point number
+                    list.add(Double.valueOf(m.group(1).replace(',', '.')));
+                } else if (m.group(2) != null) {
+                    sb.append('Z');     // integer number
+                    list.add(Double.valueOf(m.group(2)));
+                } else if (m.group(3) != null) {
+                    sb.append('o');     // degree sign
+                } else if (m.group(4) != null) {
+                    sb.append('\'');    // seconds sign
+                } else if (m.group(5) != null) {
+                    sb.append('"');     // minutes sign
+                } else if (m.group(6) != null) {
+                    sb.append(',');     // separator
+                } else if (m.group(7) != null) {
+                    sb.append('x');     // cardinal direction
+                    String c = m.group(7).toUpperCase(Locale.ENGLISH);
+                    if ("N".equals(c) || "S".equals(c) || "E".equals(c) || "W".equals(c)) {
+                        list.add(c);
+                    } else {
+                        list.add(c.replace(N_TR, 'N').replace(S_TR, 'S')
+                                .replace(E_TR, 'E').replace(W_TR, 'W'));
+                    }
+                } else if (m.group(8) != null) {
+                    throw new IllegalArgumentException("invalid token: " + m.group(8));
+                }
+            }
+
+            final String pattern = sb.toString();
+
+            final Object[] params = list.toArray();
+
+            if (pattern.matches("Ro?,?Ro?")) {
+                setLatLonObj(latLon,
+                        params[0], ZERO, ZERO, "N",
+                        params[1], ZERO, ZERO, "E");
+            } else if (pattern.matches("xRo?,?xRo?")) {
+                setLatLonObj(latLon,
+                        params[1], ZERO, ZERO, params[0],
+                        params[3], ZERO, ZERO, params[2]);
+            } else if (pattern.matches("Ro?x,?Ro?x")) {
+                setLatLonObj(latLon,
+                        params[0], ZERO, ZERO, params[1],
+                        params[2], ZERO, ZERO, params[3]);
+            } else if (pattern.matches("Zo[RZ]'?,?Zo[RZ]'?|Z[RZ],?Z[RZ]")) {
+                setLatLonObj(latLon,
+                        params[0], params[1], ZERO, "N",
+                        params[2], params[3], ZERO, "E");
+            } else if (pattern.matches("xZo[RZ]'?,?xZo[RZ]'?|xZo?[RZ],?xZo?[RZ]")) {
+                setLatLonObj(latLon,
+                        params[1], params[2], ZERO, params[0],
+                        params[4], params[5], ZERO, params[3]);
+            } else if (pattern.matches("Zo[RZ]'?x,?Zo[RZ]'?x|Zo?[RZ]x,?Zo?[RZ]x")) {
+                setLatLonObj(latLon,
+                        params[0], params[1], ZERO, params[2],
+                        params[3], params[4], ZERO, params[5]);
+            } else if (pattern.matches("ZoZ'[RZ]\"?x,?ZoZ'[RZ]\"?x|ZZ[RZ]x,?ZZ[RZ]x")) {
+                setLatLonObj(latLon,
+                        params[0], params[1], params[2], params[3],
+                        params[4], params[5], params[6], params[7]);
+            } else if (pattern.matches("xZoZ'[RZ]\"?,?xZoZ'[RZ]\"?|xZZ[RZ],?xZZ[RZ]")) {
+                setLatLonObj(latLon,
+                        params[1], params[2], params[3], params[0],
+                        params[5], params[6], params[7], params[4]);
+            } else if (pattern.matches("ZZ[RZ],?ZZ[RZ]")) {
+                setLatLonObj(latLon,
+                        params[0], params[1], params[2], "N",
+                        params[3], params[4], params[5], "E");
+            } else {
+                throw new IllegalArgumentException("invalid format: " + pattern);
+            }
         }
 
         return new LatLon(latLon.lat, latLon.lon);
@@ -455,7 +486,8 @@ public class LatLonDialog extends ExtendedDialog {
         setLatLon(latLon, coord2deg, coord2min, coord2sec, card2);
     }
 
-    private static void setLatLon(final LatLonHolder latLon, final double coordDeg, final double coordMin, final double coordSec, final String card) {
+    private static void setLatLon(final LatLonHolder latLon, final double coordDeg, final double coordMin, final double coordSec,
+            final String card) {
         if (coordDeg < -180 || coordDeg > 180 || coordMin < 0 || coordMin >= 60 || coordSec < 0 || coordSec > 60) {
             throw new IllegalArgumentException("out of range");
         }
@@ -484,5 +516,4 @@ public class LatLonDialog extends ExtendedDialog {
     public void setEastNorthText(String text) {
         tfEastNorth.setText(text);
     }
-
 }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java b/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java
index ed5ba3b..5a97dd3 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java
@@ -55,6 +55,7 @@ import org.openstreetmap.josm.gui.MapFrame;
 import org.openstreetmap.josm.gui.MapView;
 import org.openstreetmap.josm.gui.SideButton;
 import org.openstreetmap.josm.gui.help.HelpUtil;
+import org.openstreetmap.josm.gui.layer.ImageryLayer;
 import org.openstreetmap.josm.gui.layer.JumpToMarkerActions;
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.Layer.LayerAction;
@@ -70,6 +71,7 @@ import org.openstreetmap.josm.tools.MultikeyActionsHandler;
 import org.openstreetmap.josm.tools.MultikeyShortcutAction;
 import org.openstreetmap.josm.tools.MultikeyShortcutAction.MultikeyInfo;
 import org.openstreetmap.josm.tools.Shortcut;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
  * This is a toggle dialog which displays the list of layers. Actions allow to
@@ -112,6 +114,7 @@ public class LayerListDialog extends ToggleDialog {
     private LayerList layerList;
 
     private SideButton opacityButton;
+    private SideButton gammaButton;
 
     private ActivateLayerAction activateLayerAction;
     private ShowHideLayerAction showHideLayerAction;
@@ -120,9 +123,11 @@ public class LayerListDialog extends ToggleDialog {
     /** stores which layer index to toggle and executes the ShowHide action if the layer is present */
     private final class ToggleLayerIndexVisibility extends AbstractAction {
         private int layerIndex = -1;
+
         public ToggleLayerIndexVisibility(int layerIndex) {
             this.layerIndex = layerIndex;
         }
+
         @Override
         public void actionPerformed(ActionEvent e) {
             final Layer l = model.getLayer(model.getRowCount() - layerIndex - 1);
@@ -139,14 +144,14 @@ public class LayerListDialog extends ToggleDialog {
      * registers (shortcut to toggle right hand side toggle dialogs)+(number keys) shortcuts
      * to toggle the visibility of the first ten layers.
      */
-    private final void createVisibilityToggleShortcuts() {
-        final int[] k = { KeyEvent.VK_1, KeyEvent.VK_2, KeyEvent.VK_3, KeyEvent.VK_4,
-                KeyEvent.VK_5, KeyEvent.VK_6, KeyEvent.VK_7, KeyEvent.VK_8,
-                KeyEvent.VK_9, KeyEvent.VK_0 };
+    private void createVisibilityToggleShortcuts() {
+        final int[] k = {
+                KeyEvent.VK_1, KeyEvent.VK_2, KeyEvent.VK_3, KeyEvent.VK_4, KeyEvent.VK_5,
+                KeyEvent.VK_6, KeyEvent.VK_7, KeyEvent.VK_8, KeyEvent.VK_9, KeyEvent.VK_0};
 
-        for(int i=0; i < 10; i++) {
+        for (int i = 0; i < 10; i++) {
             visibilityToggleShortcuts[i] = Shortcut.registerShortcut("subwindow:layers:toggleLayer" + (i+1),
-                    tr("Toggle visibility of layer: {0}", (i+1)), k[i], Shortcut.ALT);
+                    tr("Toggle visibility of layer: {0}", i+1), k[i], Shortcut.ALT);
             visibilityToggleActions[i] = new ToggleLayerIndexVisibility(i);
             Main.registerActionShortcut(visibilityToggleActions[i], visibilityToggleShortcuts[i]);
         }
@@ -172,8 +177,8 @@ public class LayerListDialog extends ToggleDialog {
         layerList.setSelectionModel(selectionModel);
         layerList.addMouseListener(new PopupMenuHandler());
         layerList.setBackground(UIManager.getColor("Button.background"));
-        layerList.putClientProperty("terminateEditOnFocusLost", true);
-        layerList.putClientProperty("JTable.autoStartsEdit", false);
+        layerList.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
+        layerList.putClientProperty("JTable.autoStartsEdit", Boolean.FALSE);
         layerList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
         layerList.setTableHeader(null);
         layerList.setShowGrid(false);
@@ -206,8 +211,7 @@ public class LayerListDialog extends ToggleDialog {
                 KeyStroke.getKeyStroke(KeyEvent.VK_PAGE_DOWN, 0),
                 KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0),
                 KeyStroke.getKeyStroke(KeyEvent.VK_F8, 0),
-        })
-        {
+        }) {
             layerList.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(ks, new Object());
         }
 
@@ -223,6 +227,7 @@ public class LayerListDialog extends ToggleDialog {
                         layerList.scrollToVisible(row, 0);
                         layerList.repaint();
                     }
+
                     @Override
                     public void refresh() {
                         layerList.repaint();
@@ -233,12 +238,12 @@ public class LayerListDialog extends ToggleDialog {
         // -- move up action
         MoveUpAction moveUpAction = new MoveUpAction();
         adaptTo(moveUpAction, model);
-        adaptTo(moveUpAction,selectionModel);
+        adaptTo(moveUpAction, selectionModel);
 
         // -- move down action
         MoveDownAction moveDownAction = new MoveDownAction();
         adaptTo(moveDownAction, model);
-        adaptTo(moveDownAction,selectionModel);
+        adaptTo(moveDownAction, selectionModel);
 
         // -- activate action
         activateLayerAction = new ActivateLayerAction();
@@ -258,22 +263,17 @@ public class LayerListDialog extends ToggleDialog {
         adaptTo(layerOpacityAction, selectionModel);
         opacityButton = new SideButton(layerOpacityAction, false);
 
-        // -- merge layer action
-        MergeAction mergeLayerAction = new MergeAction();
-        adaptTo(mergeLayerAction, model);
-        adaptTo(mergeLayerAction,selectionModel);
-
-        // -- duplicate layer action
-        DuplicateAction duplicateLayerAction = new DuplicateAction();
-        adaptTo(duplicateLayerAction, model);
-        adaptTo(duplicateLayerAction, selectionModel);
+        // -- layer gamma action
+        LayerGammaAction layerGammaAction = new LayerGammaAction();
+        adaptTo(layerGammaAction, selectionModel);
+        gammaButton = new SideButton(layerGammaAction, false);
 
         // -- delete layer action
         DeleteLayerAction deleteLayerAction = new DeleteLayerAction();
         layerList.getActionMap().put("deleteLayer", deleteLayerAction);
         adaptTo(deleteLayerAction, selectionModel);
         getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(
-                KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0),"delete"
+                KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0), "delete"
                 );
         getActionMap().put("delete", deleteLayerAction);
 
@@ -289,16 +289,15 @@ public class LayerListDialog extends ToggleDialog {
         // Show/Activate layer on Enter key press
         InputMapUtils.addSpacebarAction(layerList, showHideLayerAction);
 
-        createLayout(layerList, true, Arrays.asList(new SideButton[] {
+        createLayout(layerList, true, Arrays.asList(
                 new SideButton(moveUpAction, false),
                 new SideButton(moveDownAction, false),
                 new SideButton(activateLayerAction, false),
                 new SideButton(showHideLayerAction, false),
                 opacityButton,
-                new SideButton(mergeLayerAction, false),
-                new SideButton(duplicateLayerAction, false),
+                gammaButton,
                 new SideButton(deleteLayerAction, false)
-        }));
+        ));
 
         createVisibilityToggleShortcuts();
     }
@@ -369,7 +368,7 @@ public class LayerListDialog extends ToggleDialog {
 
     @Override
     public void destroy() {
-        for(int i=0; i < 10; i++) {
+        for (int i = 0; i < 10; i++) {
             Main.unregisterActionShortcut(visibilityToggleActions[i], visibilityToggleShortcuts[i]);
         }
         MultikeyActionsHandler.getInstance().removeAction(activateLayerAction);
@@ -389,7 +388,7 @@ public class LayerListDialog extends ToggleDialog {
          * selected layers in the layer dialog.
          */
         public DeleteLayerAction() {
-            putValue(SMALL_ICON,ImageProvider.get("dialogs", "delete"));
+            putValue(SMALL_ICON, ImageProvider.get("dialogs", "delete"));
             putValue(SHORT_DESCRIPTION, tr("Delete the selected layers."));
             putValue(NAME, tr("Delete"));
             putValue("help", HelpUtil.ht("/Dialog/LayerList#DeleteLayer"));
@@ -410,7 +409,7 @@ public class LayerListDialog extends ToggleDialog {
 
         @Override
         public void updateEnabledState() {
-            setEnabled(! getModel().getSelectedLayers().isEmpty());
+            setEnabled(!getModel().getSelectedLayers().isEmpty());
         }
 
         @Override
@@ -464,7 +463,7 @@ public class LayerListDialog extends ToggleDialog {
 
         @Override
         public void actionPerformed(ActionEvent e) {
-            for(Layer l : model.getSelectedLayers()) {
+            for (Layer l : model.getSelectedLayers()) {
                 l.toggleVisible();
             }
         }
@@ -522,12 +521,61 @@ public class LayerListDialog extends ToggleDialog {
     }
 
     /**
+     * Abstract action which allows to adjust a double value using a slider
+     */
+    public abstract static class AbstractLayerPropertySliderAction extends AbstractAction implements IEnabledStateUpdating, LayerAction {
+        protected final JPopupMenu popup;
+        protected final JSlider slider;
+        private final double factor;
+
+        public AbstractLayerPropertySliderAction(String name, final double factor) {
+            super(name);
+            this.factor = factor;
+            updateEnabledState();
+
+            popup = new JPopupMenu();
+            slider = new JSlider(JSlider.VERTICAL);
+            slider.addChangeListener(new ChangeListener() {
+                @Override
+                public void stateChanged(ChangeEvent e) {
+                    setValue(slider.getValue() / factor);
+                }
+            });
+            popup.add(slider);
+
+        }
+
+        protected abstract void setValue(double value);
+
+        protected abstract double getValue();
+
+        protected abstract SideButton getCorrespondingSideButton();
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            final SideButton sideButton = getCorrespondingSideButton();
+            slider.setValue((int) (getValue() * factor));
+            if (e.getSource() == sideButton) {
+                popup.show(sideButton, 0, sideButton.getHeight());
+            } else {
+                // Action can be trigger either by opacity button or by popup menu (in case toggle buttons are hidden).
+                // In that case, show it in the middle of screen (because opacityButton is not visible)
+                popup.show(Main.parent, Main.parent.getWidth() / 2, (Main.parent.getHeight() - popup.getHeight()) / 2);
+            }
+        }
+
+        @Override
+        public Component createMenuComponent() {
+            return new JMenuItem(this);
+        }
+
+    }
+
+    /**
      * Action which allows to change the opacity of one or more layers.
      */
-    public final class LayerOpacityAction extends AbstractAction implements IEnabledStateUpdating, LayerAction {
+    public final class LayerOpacityAction extends AbstractLayerPropertySliderAction {
         private transient Layer layer;
-        private JPopupMenu popup;
-        private JSlider slider = new JSlider(JSlider.VERTICAL);
 
         /**
          * Creates a {@link LayerOpacityAction} which allows to change the
@@ -538,7 +586,6 @@ public class LayerListDialog extends ToggleDialog {
          */
         public LayerOpacityAction(Layer layer) {
             this();
-            putValue(NAME, tr("Opacity"));
             CheckParameterUtil.ensureParameterNotNull(layer, "layer");
             this.layer = layer;
             updateEnabledState();
@@ -550,39 +597,31 @@ public class LayerListDialog extends ToggleDialog {
          *
          */
         public LayerOpacityAction() {
-            putValue(NAME, tr("Opacity"));
+            super(tr("Opacity"), 100);
             putValue(SHORT_DESCRIPTION, tr("Adjust opacity of the layer."));
             putValue(SMALL_ICON, ImageProvider.get("dialogs/layerlist", "transparency"));
-            updateEnabledState();
-
-            popup = new JPopupMenu();
-            slider.addChangeListener(new ChangeListener() {
-                @Override
-                public void stateChanged(ChangeEvent e) {
-                    setOpacity((double)slider.getValue()/100);
-                }
-            });
-            popup.add(slider);
         }
 
-        private void setOpacity(double value) {
+        @Override
+        protected void setValue(double value) {
             if (!isEnabled()) return;
             if (layer != null) {
                 layer.setOpacity(value);
             } else {
-                for(Layer layer: model.getSelectedLayers()) {
+                for (Layer layer: model.getSelectedLayers()) {
                     layer.setOpacity(value);
                 }
             }
         }
 
-        private double getOpacity() {
+        @Override
+        protected double getValue() {
             if (layer != null)
                 return layer.getOpacity();
             else {
                 double opacity = 0;
                 List<Layer> layers = model.getSelectedLayers();
-                for(Layer layer: layers) {
+                for (Layer layer: layers) {
                     opacity += layer.getOpacity();
                 }
                 return opacity / layers.size();
@@ -590,44 +629,61 @@ public class LayerListDialog extends ToggleDialog {
         }
 
         @Override
-        public void actionPerformed(ActionEvent e) {
-            slider.setValue((int)Math.round(getOpacity()*100));
-            if (e.getSource() == opacityButton) {
-                popup.show(opacityButton, 0, opacityButton.getHeight());
-            } else {
-                // Action can be trigger either by opacity button or by popup menu (in case toggle buttons are hidden).
-                // In that case, show it in the middle of screen (because opacityButton is not visible)
-                popup.show(Main.parent, Main.parent.getWidth() / 2, (Main.parent.getHeight() - popup.getHeight()) / 2);
-            }
+        protected SideButton getCorrespondingSideButton() {
+            return opacityButton;
         }
 
         @Override
         public void updateEnabledState() {
             if (layer == null) {
-                setEnabled(! getModel().getSelectedLayers().isEmpty());
+                setEnabled(!getModel().getSelectedLayers().isEmpty());
             } else {
                 setEnabled(true);
             }
         }
 
         @Override
-        public Component createMenuComponent() {
-            return new JMenuItem(this);
+        public boolean supportLayers(List<Layer> layers) {
+            return true;
+        }
+    }
+
+    /**
+     * Action which allows to change the gamma of one imagery layer.
+     */
+    public final class LayerGammaAction extends AbstractLayerPropertySliderAction {
+
+        public LayerGammaAction() {
+            super(tr("Gamma"), 50);
+            putValue(SHORT_DESCRIPTION, tr("Adjust gamma value of the layer."));
+            putValue(SMALL_ICON, ImageProvider.get("dialogs/layerlist", "gamma"));
         }
 
         @Override
-        public boolean supportLayers(List<Layer> layers) {
-            return true;
+        protected void setValue(double value) {
+            for (ImageryLayer imageryLayer : Utils.filteredCollection(model.getSelectedLayers(), ImageryLayer.class)) {
+                imageryLayer.setGamma(value);
+            }
         }
 
         @Override
-        public boolean equals(Object obj) {
-            return obj instanceof LayerOpacityAction;
+        protected double getValue() {
+            return Utils.filteredCollection(model.getSelectedLayers(), ImageryLayer.class).iterator().next().getGamma();
         }
 
         @Override
-        public int hashCode() {
-            return getClass().hashCode();
+        protected SideButton getCorrespondingSideButton() {
+            return gammaButton;
+        }
+
+        @Override
+        public void updateEnabledState() {
+            setEnabled(!Utils.filteredCollection(model.getSelectedLayers(), ImageryLayer.class).isEmpty());
+        }
+
+        @Override
+        public boolean supportLayers(List<Layer> layers) {
+            return !Utils.filteredCollection(layers, ImageryLayer.class).isEmpty();
         }
     }
 
@@ -635,7 +691,8 @@ public class LayerListDialog extends ToggleDialog {
      * The action to activate the currently selected layer
      */
 
-    public final class ActivateLayerAction extends AbstractAction implements IEnabledStateUpdating, MapView.LayerChangeListener, MultikeyShortcutAction{
+    public final class ActivateLayerAction extends AbstractAction
+    implements IEnabledStateUpdating, MapView.LayerChangeListener, MultikeyShortcutAction{
         private transient Layer layer;
         private transient Shortcut multikeyShortcut;
 
@@ -747,8 +804,9 @@ public class LayerListDialog extends ToggleDialog {
     /**
      * The action to merge the currently selected layer into another layer.
      */
-    public final class MergeAction extends AbstractAction implements IEnabledStateUpdating {
+    public final class MergeAction extends AbstractAction implements IEnabledStateUpdating, LayerAction, Layer.MultiLayerAction {
         private transient Layer layer;
+        private transient List<Layer> layers;
 
         /**
          * Constructs a new {@code MergeAction}.
@@ -756,17 +814,26 @@ public class LayerListDialog extends ToggleDialog {
          * @throws IllegalArgumentException if {@code layer} is null
          */
         public MergeAction(Layer layer) {
-            this();
+            this(layer, null);
             CheckParameterUtil.ensureParameterNotNull(layer, "layer");
-            this.layer = layer;
-            putValue(NAME, tr("Merge"));
-            updateEnabledState();
+        }
+
+        /**
+         * Constructs a new {@code MergeAction}.
+         * @param layers the layer list
+         * @throws IllegalArgumentException if {@code layers} is null
+         */
+        public MergeAction(List<Layer> layers) {
+            this(null, layers);
+            CheckParameterUtil.ensureParameterNotNull(layers, "layers");
         }
 
         /**
          * Constructs a new {@code MergeAction}.
          */
-        public MergeAction() {
+        private MergeAction(Layer layer, List<Layer> layers) {
+            this.layer = layer;
+            this.layers = layers;
             putValue(NAME, tr("Merge"));
             putValue(SMALL_ICON, ImageProvider.get("dialogs", "mergedown"));
             putValue(SHORT_DESCRIPTION, tr("Merge this layer into another layer"));
@@ -778,6 +845,8 @@ public class LayerListDialog extends ToggleDialog {
         public void actionPerformed(ActionEvent e) {
             if (layer != null) {
                 Main.main.menu.merge.merge(layer);
+            } else if (layers != null) {
+                Main.main.menu.merge.merge(layers);
             } else {
                 if (getModel().getSelectedLayers().size() == 1) {
                     Layer selectedLayer = getModel().getSelectedLayers().get(0);
@@ -788,14 +857,9 @@ public class LayerListDialog extends ToggleDialog {
             }
         }
 
-        protected boolean isActiveLayer(Layer layer) {
-            if (!Main.isDisplayingMapView()) return false;
-            return Main.map.mapView.getActiveLayer() == layer;
-        }
-
         @Override
         public void updateEnabledState() {
-            if (layer == null) {
+            if (layer == null && layers == null) {
                 if (getModel().getSelectedLayers().isEmpty()) {
                     setEnabled(false);
                 } else  if (getModel().getSelectedLayers().size() > 1) {
@@ -812,10 +876,32 @@ public class LayerListDialog extends ToggleDialog {
                     List<Layer> targets = getModel().getPossibleMergeTargets(selectedLayer);
                     setEnabled(!targets.isEmpty());
                 }
-            } else {
+            } else if (layer != null) {
                 List<Layer> targets = getModel().getPossibleMergeTargets(layer);
                 setEnabled(!targets.isEmpty());
+            } else {
+                setEnabled(supportLayers(layers));
+            }
+        }
+
+        @Override
+        public boolean supportLayers(List<Layer> layers) {
+            for (Layer l : layers) {
+                if (!(l instanceof OsmDataLayer)) {
+                    return false;
+                }
             }
+            return true;
+        }
+
+        @Override
+        public Component createMenuComponent() {
+            return new JMenuItem(this);
+        }
+
+        @Override
+        public MergeAction getMultiLayerAction(List<Layer> layers) {
+            return new MergeAction(layers);
         }
     }
 
@@ -857,7 +943,7 @@ public class LayerListDialog extends ToggleDialog {
                 layerNames.add(l.getName());
             }
             if (layer instanceof OsmDataLayer) {
-                OsmDataLayer oldLayer = (OsmDataLayer)layer;
+                OsmDataLayer oldLayer = (OsmDataLayer) layer;
                 // Translators: "Copy of {layer name}"
                 String newName = tr("Copy of {0}", oldLayer.getName());
                 int i = 2;
@@ -916,6 +1002,10 @@ public class LayerListDialog extends ToggleDialog {
         private final ImageIcon iconEye;
         private final ImageIcon iconEyeTranslucent;
         private boolean isTranslucent;
+
+        /**
+         * Constructs a new {@code LayerVisibleCheckBox}.
+         */
         public LayerVisibleCheckBox() {
             setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
             iconEye = ImageProvider.get("dialogs/layerlist", "eye");
@@ -939,13 +1029,19 @@ public class LayerListDialog extends ToggleDialog {
         public void updateStatus(Layer layer) {
             boolean visible = layer.isVisible();
             setSelected(visible);
-            setTranslucent(layer.getOpacity()<1.0);
-            setToolTipText(visible ? tr("layer is currently visible (click to hide layer)") : tr("layer is currently hidden (click to show layer)"));
+            setTranslucent(layer.getOpacity() < 1.0);
+            setToolTipText(visible ?
+                tr("layer is currently visible (click to hide layer)") :
+                tr("layer is currently hidden (click to show layer)"));
         }
     }
 
     private static class ActiveLayerCellRenderer implements TableCellRenderer {
         private final JCheckBox cb;
+
+        /**
+         * Constructs a new {@code ActiveLayerCellRenderer}.
+         */
         public ActiveLayerCellRenderer() {
             cb = new ActiveLayerCheckBox();
         }
@@ -961,6 +1057,10 @@ public class LayerListDialog extends ToggleDialog {
 
     private static class LayerVisibleCellRenderer implements TableCellRenderer {
         private final LayerVisibleCheckBox cb;
+
+        /**
+         * Constructs a new {@code LayerVisibleCellRenderer}.
+         */
         public LayerVisibleCellRenderer() {
             this.cb = new LayerVisibleCheckBox();
         }
@@ -968,7 +1068,7 @@ public class LayerListDialog extends ToggleDialog {
         @Override
         public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
             if (value != null) {
-                cb.updateStatus((Layer)value);
+                cb.updateStatus((Layer) value);
             }
             return cb;
         }
@@ -976,6 +1076,7 @@ public class LayerListDialog extends ToggleDialog {
 
     private static class LayerVisibleCellEditor extends DefaultCellEditor {
         private final LayerVisibleCheckBox cb;
+
         public LayerVisibleCellEditor(LayerVisibleCheckBox cb) {
             super(cb);
             this.cb = cb;
@@ -983,7 +1084,7 @@ public class LayerListDialog extends ToggleDialog {
 
         @Override
         public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
-            cb.updateStatus((Layer)value);
+            cb.updateStatus((Layer) value);
             return cb;
         }
     }
@@ -999,20 +1100,20 @@ public class LayerListDialog extends ToggleDialog {
         public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
             if (value == null)
                 return this;
-            Layer layer = (Layer)value;
-            JLabel label = (JLabel)super.getTableCellRendererComponent(table,
+            Layer layer = (Layer) value;
+            JLabel label = (JLabel) super.getTableCellRendererComponent(table,
                     layer.getName(), isSelected, hasFocus, row, column);
             if (isActiveLayer(layer)) {
                 label.setFont(label.getFont().deriveFont(Font.BOLD));
             }
-            if(Main.pref.getBoolean("dialog.layer.colorname", true)) {
+            if (Main.pref.getBoolean("dialog.layer.colorname", true)) {
                 Color c = layer.getColor(false);
-                if(c != null) {
+                if (c != null) {
                     Color oc = null;
-                    for(Layer l : model.getLayers()) {
+                    for (Layer l : model.getLayers()) {
                         oc = l.getColor(false);
-                        if(oc != null) {
-                            if(oc.equals(c)) {
+                        if (oc != null) {
+                            if (oc.equals(c)) {
                                 oc = null;
                             } else {
                                 break;
@@ -1020,11 +1121,11 @@ public class LayerListDialog extends ToggleDialog {
                         }
                     }
                     /* not more than one color, don't use coloring */
-                    if(oc == null) {
+                    if (oc == null) {
                         c = null;
                     }
                 }
-                if(c == null) {
+                if (c == null) {
                     c = Main.pref.getUIColor(isSelected ? "Table.selectionForeground" : "Table.foreground");
                 }
                 label.setForeground(c);
@@ -1111,13 +1212,13 @@ public class LayerListDialog extends ToggleDialog {
          * @param index the layer index
          * @param layer the layer
          */
-        public void makeVisible(int index, Layer layer);
+        void makeVisible(int index, Layer layer);
 
 
         /**
          * Fired when something has changed in the layer list model.
          */
-        public void refresh();
+        void refresh();
     }
 
     /**
@@ -1228,7 +1329,7 @@ public class LayerListDialog extends ToggleDialog {
         public List<Layer> getSelectedLayers() {
             List<Layer> selected = new ArrayList<>();
             List<Layer> layers = getLayers();
-            for (int i=0; i<layers.size(); i++) {
+            for (int i = 0; i < layers.size(); i++) {
                 if (selectionModel.isSelectedIndex(i)) {
                     selected.add(layers.get(i));
                 }
@@ -1237,15 +1338,13 @@ public class LayerListDialog extends ToggleDialog {
         }
 
         /**
-         * Replies a the list of indices of the selected rows. Never null,
-         * but may be empty.
+         * Replies a the list of indices of the selected rows. Never null, but may be empty.
          *
-         * @return  the list of indices of the selected rows. Never null,
-         * but may be empty.
+         * @return  the list of indices of the selected rows. Never null, but may be empty.
          */
         public List<Integer> getSelectedRows() {
             List<Integer> selected = new ArrayList<>();
-            for (int i=0; i<getLayers().size();i++) {
+            for (int i = 0; i < getLayers().size(); i++) {
                 if (selectionModel.isSelectedIndex(i)) {
                     selected.add(i);
                 }
@@ -1531,14 +1630,14 @@ public class LayerListDialog extends ToggleDialog {
                     if (oldLayer != null) {
                         int idx = getLayers().indexOf(oldLayer);
                         if (idx >= 0) {
-                            fireTableRowsUpdated(idx,idx);
+                            fireTableRowsUpdated(idx, idx);
                         }
                     }
 
                     if (newLayer != null) {
                         int idx = getLayers().indexOf(newLayer);
                         if (idx >= 0) {
-                            fireTableRowsUpdated(idx,idx);
+                            fireTableRowsUpdated(idx, idx);
                         }
                     }
                     ensureActiveSelected();
@@ -1562,7 +1661,7 @@ public class LayerListDialog extends ToggleDialog {
         @Override
         public void propertyChange(PropertyChangeEvent evt) {
             if (evt.getSource() instanceof Layer) {
-                Layer layer = (Layer)evt.getSource();
+                Layer layer = (Layer) evt.getSource();
                 final int idx = getLayers().indexOf(layer);
                 if (idx < 0) return;
                 fireRefresh();
@@ -1629,6 +1728,17 @@ public class LayerListDialog extends ToggleDialog {
     }
 
     /**
+     * Creates a {@link DuplicateAction} for <code>layer</code> in the
+     * context of this {@link LayerListDialog}.
+     *
+     * @param layer the layer
+     * @return the action
+     */
+    public DuplicateAction createDuplicateLayerAction(Layer layer) {
+        return new DuplicateAction(layer);
+    }
+
+    /**
      * Returns the layer at given index, or {@code null}.
      * @param index the index
      * @return the layer at given index, or {@code null} if index out of range
diff --git a/src/org/openstreetmap/josm/gui/dialogs/LayerListPopup.java b/src/org/openstreetmap/josm/gui/dialogs/LayerListPopup.java
index e761034..61ff74b 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/LayerListPopup.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/LayerListPopup.java
@@ -79,19 +79,19 @@ public class LayerListPopup extends JPopupMenu {
                 if (!separatorAdded && a instanceof SeparatorLayerAction) {
                     separatorAdded = true;
                     actions.add(a);
-                } else if (a instanceof LayerAction && ((LayerAction)a).supportLayers(selectedLayers)) {
+                } else if (a instanceof LayerAction && ((LayerAction) a).supportLayers(selectedLayers)) {
                     separatorAdded = false;
-                    if(a instanceof MultiLayerAction)
-                        a = ((MultiLayerAction)a).getMultiLayerAction(selectedLayers);
+                    if (a instanceof MultiLayerAction)
+                        a = ((MultiLayerAction) a).getMultiLayerAction(selectedLayers);
                     actions.add(a);
                 }
             }
             // This will usually add no action, because if some action support all selected layers then it was probably used also in first layer
-            for (int i=1; i<selectedLayers.size(); i++) {
+            for (int i = 1; i < selectedLayers.size(); i++) {
                 separatorAdded = false;
                 for (Action a: selectedLayers.get(i).getMenuEntries()) {
                     if (a instanceof LayerAction && !(a instanceof MultiLayerAction)
-                    && ((LayerAction)a).supportLayers(selectedLayers) && !actions.contains(a)) {
+                    && ((LayerAction) a).supportLayers(selectedLayers) && !actions.contains(a)) {
                         if (!separatorAdded) {
                             separatorAdded = true;
                             actions.add(SeparatorLayerAction.INSTANCE);
@@ -106,7 +106,7 @@ public class LayerListPopup extends JPopupMenu {
         }
         for (Action a : actions) {
             if (a instanceof LayerAction) {
-                add (((LayerAction) a).createMenuComponent());
+                add(((LayerAction) a).createMenuComponent());
             } else {
                 add(new JMenuItem(a));
             }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/LogShowDialog.java b/src/org/openstreetmap/josm/gui/dialogs/LogShowDialog.java
new file mode 100644
index 0000000..ec68bdb
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/dialogs/LogShowDialog.java
@@ -0,0 +1,60 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.dialogs;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.Dimension;
+import java.awt.GridBagLayout;
+
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.gui.ExtendedDialog;
+import org.openstreetmap.josm.gui.widgets.JosmEditorPane;
+import org.openstreetmap.josm.tools.GBC;
+
+/**
+ * Generic dialog with message and scrolling area
+ * @author Alexei
+ * @since 5114
+ */
+public class LogShowDialog extends ExtendedDialog {
+
+    /**
+     * Constructs a new {@code LogShowDialog}.
+     * @param title The text that will be shown in the window titlebar
+     * @param msg Single-line Label
+     * @param log Multi-line log
+     */
+    public LogShowDialog(String title, String msg, String log) {
+        super(Main.parent, title, new String[] {tr("OK")});
+        setButtonIcons(new String[] {"ok.png"});
+        setContent(build(msg, log));
+    }
+
+    protected final JPanel build(String msg, String log) {
+        JPanel p = new JPanel(new GridBagLayout());
+        JLabel lbl = new JLabel(msg);
+
+        lbl.setFont(lbl.getFont().deriveFont(0, 14));
+
+        p.add(lbl, GBC.eol().insets(5, 0, 5, 0));
+        JosmEditorPane txt = new JosmEditorPane();
+        txt.setContentType("text/html");
+        txt.setText(log);
+        txt.setEditable(false);
+        txt.setOpaque(false);
+
+        lbl.setLabelFor(txt);
+
+        JScrollPane sp = new JScrollPane(txt);
+        sp.setOpaque(false);
+        sp.setPreferredSize(new Dimension(600, 300));
+
+        p.add(sp, GBC.eop().insets(5, 15, 0, 0).fill(GBC.HORIZONTAL));
+
+        return p;
+    }
+}
diff --git a/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java b/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java
index ea8a8f9..bf61a53 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java
@@ -98,6 +98,9 @@ public class MapPaintDialog extends ToggleDialog {
     protected MoveUpDownAction downAction;
     protected JCheckBox cbWireframe;
 
+    /**
+     * Action that opens the map paint preferences.
+     */
     public static final JosmAction PREFERENCE_ACTION = PreferencesAction.forPreferenceSubTab(
             tr("Map paint preferences"), null, MapPaintPreference.class, /* ICON */ "dialogs/mappaintpreference");
 
@@ -117,6 +120,7 @@ public class MapPaintDialog extends ToggleDialog {
         cbWireframe = new JCheckBox();
         JLabel wfLabel = new JLabel(tr("Wireframe View"), ImageProvider.get("dialogs/mappaint", "wireframe_small"), JLabel.HORIZONTAL);
         wfLabel.setFont(wfLabel.getFont().deriveFont(Font.PLAIN));
+        wfLabel.setLabelFor(cbWireframe);
 
         cbWireframe.setModel(new DefaultButtonModel() {
             @Override
@@ -134,12 +138,12 @@ public class MapPaintDialog extends ToggleDialog {
                 Main.main.menu.wireFrameToggleAction.actionPerformed(null);
             }
         });
-        cbWireframe.setBorder(new EmptyBorder(new Insets(1,1,1,1)));
+        cbWireframe.setBorder(new EmptyBorder(new Insets(1, 1, 1, 1)));
 
         tblStyles = new StylesTable(model);
-        tblStyles.setSelectionModel(selectionModel= new DefaultListSelectionModel());
+        tblStyles.setSelectionModel(selectionModel = new DefaultListSelectionModel());
         tblStyles.addMouseListener(new PopupMenuHandler());
-        tblStyles.putClientProperty("terminateEditOnFocusLost", true);
+        tblStyles.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
         tblStyles.setBackground(UIManager.getColor("Panel.background"));
         tblStyles.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
         tblStyles.setTableHeader(null);
@@ -207,8 +211,13 @@ public class MapPaintDialog extends ToggleDialog {
 
     protected class StylesModel extends AbstractTableModel implements MapPaintSylesUpdateListener {
 
+        private final Class<?>[] columnClasses = {Boolean.class, StyleSource.class};
+
         private transient List<StyleSource> data = new ArrayList<>();
 
+        /**
+         * Constructs a new {@code StylesModel}.
+         */
         public StylesModel() {
             data = new ArrayList<>(MapPaintStyles.getStyles().getStyleSources());
         }
@@ -240,8 +249,6 @@ public class MapPaintDialog extends ToggleDialog {
             return column == 0;
         }
 
-        private Class<?>[] columnClasses = {Boolean.class, StyleSource.class};
-
         @Override
         public Class<?> getColumnClass(int column) {
             return columnClasses[column];
@@ -285,13 +292,16 @@ public class MapPaintDialog extends ToggleDialog {
 
     private class MyCheckBoxRenderer extends JCheckBox implements TableCellRenderer {
 
+        /**
+         * Constructs a new {@code MyCheckBoxRenderer}.
+         */
         public MyCheckBoxRenderer() {
             setHorizontalAlignment(SwingConstants.CENTER);
             setVerticalAlignment(SwingConstants.CENTER);
         }
 
         @Override
-        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,int row,int column) {
+        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
             if (value == null)
                 return this;
             boolean b = (Boolean) value;
@@ -307,7 +317,7 @@ public class MapPaintDialog extends ToggleDialog {
             if (value == null)
                 return this;
             StyleSource s = (StyleSource) value;
-            JLabel label = (JLabel)super.getTableCellRendererComponent(table,
+            JLabel label = (JLabel) super.getTableCellRendererComponent(table,
                     s.getDisplayString(), isSelected, hasFocus, row, column);
             label.setIcon(s.getIcon());
             label.setToolTipText(s.getToolTipText());
@@ -317,6 +327,9 @@ public class MapPaintDialog extends ToggleDialog {
     }
 
     protected class OnOffAction extends AbstractAction implements ListSelectionListener {
+        /**
+         * Constructs a new {@code OnOffAction}.
+         */
         public OnOffAction() {
             putValue(NAME, tr("On/Off"));
             putValue(SHORT_DESCRIPTION, tr("Turn selected styles on or off"));
@@ -351,9 +364,13 @@ public class MapPaintDialog extends ToggleDialog {
 
         private final int increment;
 
+        /**
+         * Constructs a new {@code MoveUpDownAction}.
+         * @param isDown {@code true} to move the entry down, {@code false} to move it up
+         */
         public MoveUpDownAction(boolean isDown) {
             increment = isDown ? 1 : -1;
-            putValue(NAME, isDown?tr("Down"):tr("Up"));
+            putValue(NAME, isDown ? tr("Down") : tr("Up"));
             putValue(SMALL_ICON, isDown ? ImageProvider.get("dialogs", "down") : ImageProvider.get("dialogs", "up"));
             putValue(SHORT_DESCRIPTION, isDown ? tr("Move the selected entry one row down.") : tr("Move the selected entry one row up."));
             updateEnabledState();
@@ -383,6 +400,9 @@ public class MapPaintDialog extends ToggleDialog {
     }
 
     protected class ReloadAction extends AbstractAction implements ListSelectionListener {
+        /**
+         * Constructs a new {@code ReloadAction}.
+         */
         public ReloadAction() {
             putValue(NAME, tr("Reload from file"));
             putValue(SHORT_DESCRIPTION, tr("reload selected styles from file"));
@@ -424,7 +444,6 @@ public class MapPaintDialog extends ToggleDialog {
                             }
                         }
                     });
-
                 }
             });
         }
@@ -432,6 +451,9 @@ public class MapPaintDialog extends ToggleDialog {
 
     protected class SaveAsAction extends AbstractAction {
 
+        /**
+         * Constructs a new {@code SaveAsAction}.
+         */
         public SaveAsAction() {
             putValue(NAME, tr("Save as..."));
             putValue(SHORT_DESCRIPTION, tr("Save a copy of this Style to file and add it to the list"));
@@ -522,11 +544,17 @@ public class MapPaintDialog extends ToggleDialog {
         }
     }
 
+    /**
+     * Displays information about selected paint style in a new dialog.
+     */
     protected class InfoAction extends AbstractAction {
 
         private boolean errorsTabLoaded;
         private boolean sourceTabLoaded;
 
+        /**
+         * Constructs a new {@code InfoAction}.
+         */
         public InfoAction() {
             putValue(NAME, tr("Info"));
             putValue(SHORT_DESCRIPTION, tr("view meta information, error log and source definition"));
@@ -605,8 +633,8 @@ public class MapPaintDialog extends ToggleDialog {
             if (s.getBackgroundColorOverride() != null) {
                 text.append(tableRow(tr("Background:"), Utils.toString(s.getBackgroundColorOverride())));
             }
-            text.append(tableRow(tr("Style is currently active?"), s.active ? tr("Yes") : tr("No")));
-            text.append("</table>");
+            text.append(tableRow(tr("Style is currently active?"), s.active ? tr("Yes") : tr("No")))
+                .append("</table>");
             p.add(new JScrollPane(new HtmlPanel(text.toString())), GBC.eol().fill(GBC.BOTH));
             return p;
         }
@@ -642,7 +670,7 @@ public class MapPaintDialog extends ToggleDialog {
             txtErrors.setEditable(false);
             p.add(new JScrollPane(txtErrors), GBC.std().fill());
             for (Throwable t : s.getErrors()) {
-                txtErrors.append(t.toString() + "\n");
+                txtErrors.append(t + "\n");
             }
         }
     }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/MinimapDialog.java b/src/org/openstreetmap/josm/gui/dialogs/MinimapDialog.java
new file mode 100644
index 0000000..d6dbd1c
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/dialogs/MinimapDialog.java
@@ -0,0 +1,71 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.dialogs;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.util.Collections;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.gui.MapView;
+import org.openstreetmap.josm.gui.NavigatableComponent;
+import org.openstreetmap.josm.gui.SideButton;
+import org.openstreetmap.josm.gui.bbox.BBoxChooser;
+import org.openstreetmap.josm.gui.bbox.SlippyMapBBoxChooser;
+
+/**
+ * A small map of the current edit location implemented as {@link ToggleDialog}.
+ */
+public class MinimapDialog extends ToggleDialog implements NavigatableComponent.ZoomChangeListener, PropertyChangeListener {
+
+    protected final SlippyMapBBoxChooser slippyMap = new SlippyMapBBoxChooser();
+    protected boolean skipEvents;
+
+    /**
+     * Constructs a new {@code MinimapDialog}.
+     */
+    public MinimapDialog() {
+        super(tr("Mini map"), "minimap", tr("Displays a small map of the current edit location"), null, 150);
+        createLayout(slippyMap, false, Collections.<SideButton>emptyList());
+        slippyMap.setSizeButtonVisible(false);
+        slippyMap.addPropertyChangeListener(BBoxChooser.BBOX_PROP, this);
+    }
+
+    @Override
+    public void showDialog() {
+        NavigatableComponent.addZoomChangeListener(this);
+        super.showDialog();
+    }
+
+    @Override
+    public void hideDialog() {
+        NavigatableComponent.removeZoomChangeListener(this);
+        super.hideDialog();
+    }
+
+    @Override
+    public void zoomChanged() {
+        if (Main.isDisplayingMapView() && !skipEvents) {
+            MapView mv = Main.map.mapView;
+            final Bounds currentBounds = new Bounds(
+                    mv.getLatLon(0, mv.getHeight()),
+                    mv.getLatLon(mv.getWidth(), 0)
+            );
+            skipEvents = true;
+            slippyMap.setBoundingBox(currentBounds);
+            slippyMap.zoomOut(); // to give a better overview
+            skipEvents = false;
+        }
+    }
+
+    @Override
+    public void propertyChange(PropertyChangeEvent evt) {
+        if (!skipEvents) {
+            skipEvents = true;
+            Main.map.mapView.zoomTo(slippyMap.getBoundingBox());
+            skipEvents = false;
+        }
+    }
+}
diff --git a/src/org/openstreetmap/josm/gui/dialogs/NotesDialog.java b/src/org/openstreetmap/josm/gui/dialogs/NotesDialog.java
index c7cdec5..7b4018e 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/NotesDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/NotesDialog.java
@@ -146,7 +146,7 @@ public class NotesDialog extends ToggleDialog implements LayerChangeListener {
             closeAction.setEnabled(false);
             addCommentAction.setEnabled(false);
             reopenAction.setEnabled(false);
-        } else if (noteData.getSelectedNote().getState() == State.open){
+        } else if (noteData.getSelectedNote().getState() == State.open) {
             closeAction.setEnabled(true);
             addCommentAction.setEnabled(true);
             reopenAction.setEnabled(false);
@@ -155,7 +155,7 @@ public class NotesDialog extends ToggleDialog implements LayerChangeListener {
             addCommentAction.setEnabled(false);
             reopenAction.setEnabled(true);
         }
-        if(noteData == null || !noteData.isModified()) {
+        if (noteData == null || !noteData.isModified()) {
             uploadAction.setEnabled(false);
         } else {
             uploadAction.setEnabled(true);
@@ -169,18 +169,14 @@ public class NotesDialog extends ToggleDialog implements LayerChangeListener {
     }
 
     @Override
-    public void showNotify() { }
-
-    @Override
-    public void hideNotify() { }
-
-    @Override
-    public void activeLayerChange(Layer oldLayer, Layer newLayer) { }
+    public void activeLayerChange(Layer oldLayer, Layer newLayer) {
+        // Do nothing
+    }
 
     @Override
     public void layerAdded(Layer newLayer) {
         if (newLayer instanceof NoteLayer) {
-            noteData = ((NoteLayer)newLayer).getNoteData();
+            noteData = ((NoteLayer) newLayer).getNoteData();
             model.setData(noteData.getNotes());
             setNotes(noteData.getSortedNotes());
         }
@@ -219,9 +215,20 @@ public class NotesDialog extends ToggleDialog implements LayerChangeListener {
             displayList.setSelectedValue(noteData.getSelectedNote(), true);
         }
         updateButtonStates();
+        // TODO make a proper listener mechanism to handle change of note selection
+        Main.main.menu.infoweb.noteSelectionChanged();
+    }
+
+    /**
+     * Returns the currently selected note, if any.
+     * @return currently selected note, or null
+     * @since 8475
+     */
+    public Note getSelectedNote() {
+        return noteData != null ? noteData.getSelectedNote() : null;
     }
 
-    private class NoteRenderer implements ListCellRenderer<Note> {
+    private static class NoteRenderer implements ListCellRenderer<Note> {
 
         private DefaultListCellRenderer defaultListCellRenderer = new DefaultListCellRenderer();
         private final DateFormat dateFormat = DateUtils.getDateTimeFormat(DateFormat.MEDIUM, DateFormat.SHORT);
@@ -237,7 +244,7 @@ public class NotesDialog extends ToggleDialog implements LayerChangeListener {
                     userName = "<Anonymous>";
                 }
                 String toolTipText = userName + " @ " + dateFormat.format(note.getCreatedAt());
-                JLabel jlabel = (JLabel)comp;
+                JLabel jlabel = (JLabel) comp;
                 jlabel.setText(note.getId() + ": " +text);
                 ImageIcon icon;
                 if (note.getId() < 0) {
@@ -257,6 +264,9 @@ public class NotesDialog extends ToggleDialog implements LayerChangeListener {
     class NoteTableModel extends AbstractListModel<Note> {
         private transient List<Note> data;
 
+        /**
+         * Constructs a new {@code NoteTableModel}.
+         */
         public NoteTableModel() {
             data = new ArrayList<>();
         }
@@ -289,8 +299,11 @@ public class NotesDialog extends ToggleDialog implements LayerChangeListener {
 
     class AddCommentAction extends AbstractAction {
 
+        /**
+         * Constructs a new {@code AddCommentAction}.
+         */
         public AddCommentAction() {
-            putValue(SHORT_DESCRIPTION,tr("Add comment"));
+            putValue(SHORT_DESCRIPTION, tr("Add comment"));
             putValue(NAME, tr("Comment"));
             putValue(SMALL_ICON, ICON_COMMENT);
         }
@@ -318,8 +331,11 @@ public class NotesDialog extends ToggleDialog implements LayerChangeListener {
 
     class CloseAction extends AbstractAction {
 
+        /**
+         * Constructs a new {@code CloseAction}.
+         */
         public CloseAction() {
-            putValue(SHORT_DESCRIPTION,tr("Close note"));
+            putValue(SHORT_DESCRIPTION, tr("Close note"));
             putValue(NAME, tr("Close"));
             putValue(SMALL_ICON, ICON_CLOSED);
         }
@@ -340,8 +356,11 @@ public class NotesDialog extends ToggleDialog implements LayerChangeListener {
 
     class NewAction extends AbstractAction {
 
+        /**
+         * Constructs a new {@code NewAction}.
+         */
         public NewAction() {
-            putValue(SHORT_DESCRIPTION,tr("Create a new note"));
+            putValue(SHORT_DESCRIPTION, tr("Create a new note"));
             putValue(NAME, tr("Create"));
             putValue(SMALL_ICON, ICON_NEW);
         }
@@ -357,8 +376,11 @@ public class NotesDialog extends ToggleDialog implements LayerChangeListener {
 
     class ReopenAction extends AbstractAction {
 
+        /**
+         * Constructs a new {@code ReopenAction}.
+         */
         public ReopenAction() {
-            putValue(SHORT_DESCRIPTION,tr("Reopen note"));
+            putValue(SHORT_DESCRIPTION, tr("Reopen note"));
             putValue(NAME, tr("Reopen"));
             putValue(SMALL_ICON, ICON_OPEN);
         }
@@ -380,6 +402,9 @@ public class NotesDialog extends ToggleDialog implements LayerChangeListener {
 
     class SortAction extends AbstractAction {
 
+        /**
+         * Constructs a new {@code SortAction}.
+         */
         public SortAction() {
             putValue(SHORT_DESCRIPTION, tr("Sort notes"));
             putValue(NAME, tr("Sort"));
diff --git a/src/org/openstreetmap/josm/gui/dialogs/OsmIdSelectionDialog.java b/src/org/openstreetmap/josm/gui/dialogs/OsmIdSelectionDialog.java
index c873886..cdf244a 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/OsmIdSelectionDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/OsmIdSelectionDialog.java
@@ -70,10 +70,12 @@ public class OsmIdSelectionDialog extends ExtendedDialog implements WindowListen
         layout.setAutoCreateContainerGaps(true);
 
         JLabel lbl1 = new JLabel(tr("Object type:"));
+        lbl1.setLabelFor(cbType);
 
         cbType.addItem(trc("osm object types", "mixed"));
         cbType.setToolTipText(tr("Choose the OSM object type"));
         JLabel lbl2 = new JLabel(tr("Object ID:"));
+        lbl2.setLabelFor(cbId);
 
         cbId.setEditor(new BasicComboBoxEditor() {
             @Override
@@ -88,15 +90,17 @@ public class OsmIdSelectionDialog extends ExtendedDialog implements WindowListen
         tfId.getKeymap().removeKeyStrokeBinding(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0, false));
         tfId.setPreferredSize(new Dimension(400, tfId.getPreferredSize().height));
 
-        HtmlPanel help = new HtmlPanel(/* I18n: {0} and {1} contains example strings not meant for translation. {2}=n, {3}=w, {4}=r. */
-                tr("Object IDs can be separated by comma or space.<br/>"
-                        + "Examples: {0}<br/>"
-                        + "In mixed mode, specify objects like this: {1}<br/>"
-                        + "({2} stands for <i>node</i>, {3} for <i>way</i>, and {4} for <i>relation</i>)",
-                        "<b>" + Utils.joinAsHtmlUnorderedList(Arrays.asList("1 2 5", "1,2,5")) + "</b>",
-                        "<b>w123, n110, w12, r15</b>",
-                        "<b>n</b>", "<b>w</b>", "<b>r</b>"
-                ));
+        final String help1 = /* I18n: {0} and contains example strings not meant for translation. */
+                tr("Object IDs can be separated by comma or space, for instance: {0}",
+                        "<b>" + Utils.joinAsHtmlUnorderedList(Arrays.asList("1 2 5", "1,2,5")) + "</b>");
+        final String help2 = /* I18n: {0} and contains example strings not meant for translation. {1}=n, {2}=w, {3}=r. */
+                tr("In mixed mode, specify objects like this: {0}<br/>"
+                                + "({1} stands for <i>node</i>, {2} for <i>way</i>, and {3} for <i>relation</i>)",
+                        "<b>w123, n110, w12, r15</b>", "<b>n</b>", "<b>w</b>", "<b>r</b>");
+        final String help3 = /* I18n: {0} and contains example strings not meant for translation. */
+                tr("Ranges of object IDs are specified with a hyphen, for instance: {0}",
+                        "<b>" + Utils.joinAsHtmlUnorderedList(Arrays.asList("w1-5", "n30-37", "r501-5")) + "</b>");
+        HtmlPanel help = new HtmlPanel(help1 + "<br/>" + help2 + "<br/><br/>" + help3);
         help.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED));
 
         cbType.addItemListener(new ItemListener() {
@@ -157,7 +161,8 @@ public class OsmIdSelectionDialog extends ExtendedDialog implements WindowListen
      * @param cbHistory the {@link HistoryComboBox} to which the history is restored to
      */
     protected void restorePrimitivesHistory(HistoryComboBox cbHistory) {
-        java.util.List<String> cmtHistory = new LinkedList<>(Main.pref.getCollection(getClass().getName() + ".primitivesHistory", new LinkedList<String>()));
+        java.util.List<String> cmtHistory = new LinkedList<>(
+                Main.pref.getCollection(getClass().getName() + ".primitivesHistory", new LinkedList<String>()));
         // we have to reverse the history, because ComboBoxHistory will reverse it again in addElement()
         Collections.reverse(cmtHistory);
         cbHistory.setPossibleItems(cmtHistory);
@@ -246,9 +251,14 @@ public class OsmIdSelectionDialog extends ExtendedDialog implements WindowListen
     }
 
     @Override public void windowOpened(WindowEvent e) {}
+
     @Override public void windowClosing(WindowEvent e) {}
+
     @Override public void windowIconified(WindowEvent e) {}
+
     @Override public void windowDeiconified(WindowEvent e) {}
+
     @Override public void windowActivated(WindowEvent e) {}
+
     @Override public void windowDeactivated(WindowEvent e) {}
 }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java b/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
index 392a357..8f4eb02 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
@@ -107,7 +107,8 @@ public class RelationListDialog extends ToggleDialog implements DataSetListener
     /** the duplicate action */
     private final DuplicateRelationAction duplicateAction = new DuplicateRelationAction();
     private final DownloadMembersAction downloadMembersAction = new DownloadMembersAction();
-    private final DownloadSelectedIncompleteMembersAction downloadSelectedIncompleteMembersAction = new DownloadSelectedIncompleteMembersAction();
+    private final DownloadSelectedIncompleteMembersAction downloadSelectedIncompleteMembersAction =
+            new DownloadSelectedIncompleteMembersAction();
     private final SelectMembersAction selectMembersAction = new SelectMembersAction(false);
     private final SelectMembersAction addMembersToSelectionAction = new SelectMembersAction(true);
     private final SelectRelationAction selectRelationAction = new SelectRelationAction(false);
@@ -195,7 +196,7 @@ public class RelationListDialog extends ToggleDialog implements DataSetListener
         Component focused = FocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
 
         //update highlights
-        if (highlightEnabled && focused==displaylist && Main.isDisplayingMapView()) {
+        if (highlightEnabled && focused == displaylist && Main.isDisplayingMapView()) {
             if (highlightHelper.highlightOnly(sel)) {
                 Main.map.mapView.repaint();
             }
@@ -235,7 +236,7 @@ public class RelationListDialog extends ToggleDialog implements DataSetListener
             model.setRelations(null);
             return;
         }
-        OsmDataLayer l = (OsmDataLayer)layer;
+        OsmDataLayer l = (OsmDataLayer) layer;
         model.setRelations(l.data.getRelations());
         model.updateTitle();
         updateActionsRelationLists();
@@ -270,7 +271,9 @@ public class RelationListDialog extends ToggleDialog implements DataSetListener
         } else {
             model.setSelectedRelations(relations);
             Integer i = model.getVisibleRelationIndex(relations.iterator().next());
-            if (i != null) { // Not all relations have to be in the list (for example when the relation list is hidden, it's not updated with new relations)
+            if (i != null) {
+                // Not all relations have to be in the list
+                // (for example when the relation list is hidden, it's not updated with new relations)
                 displaylist.scrollRectToVisible(displaylist.getCellBounds(i, i));
             }
         }
@@ -349,14 +352,14 @@ public class RelationListDialog extends ToggleDialog implements DataSetListener
      */
     static class NewAction extends AbstractAction implements LayerChangeListener{
         public NewAction() {
-            putValue(SHORT_DESCRIPTION,tr("Create a new relation"));
+            putValue(SHORT_DESCRIPTION, tr("Create a new relation"));
             putValue(NAME, tr("New"));
             putValue(SMALL_ICON, ImageProvider.get("dialogs", "addrelation"));
             updateEnabledState();
         }
 
         public void run() {
-            RelationEditor.getEditor(Main.main.getEditLayer(),null, null).setVisible(true);
+            RelationEditor.getEditor(Main.main.getEditLayer(), null, null).setVisible(true);
         }
 
         @Override
@@ -415,7 +418,7 @@ public class RelationListDialog extends ToggleDialog implements DataSetListener
             this.filteredRelations = null;
             if (relations == null) {
                 selectionModel.clearSelection();
-                fireContentsChanged(this,0,getSize());
+                fireContentsChanged(this, 0, getSize());
                 return;
             }
             for (Relation r: relations) {
@@ -439,11 +442,11 @@ public class RelationListDialog extends ToggleDialog implements DataSetListener
         public void addRelations(Collection<? extends OsmPrimitive> addedPrimitives) {
             boolean added = false;
             for (OsmPrimitive p: addedPrimitives) {
-                if (! (p instanceof Relation)) {
+                if (!(p instanceof Relation)) {
                     continue;
                 }
 
-                Relation r = (Relation)p;
+                Relation r = (Relation) p;
                 if (relations.contains(r)) {
                     continue;
                 }
@@ -473,10 +476,10 @@ public class RelationListDialog extends ToggleDialog implements DataSetListener
             //
             Set<Relation> removedRelations = new HashSet<>();
             for (OsmPrimitive p: removedPrimitives) {
-                if (! (p instanceof Relation)) {
+                if (!(p instanceof Relation)) {
                     continue;
                 }
-                removedRelations.add((Relation)p);
+                removedRelations.add((Relation) p);
             }
             if (removedRelations.isEmpty())
                 return;
@@ -542,7 +545,7 @@ public class RelationListDialog extends ToggleDialog implements DataSetListener
          */
         public List<Relation> getSelectedRelations() {
             List<Relation> ret = new ArrayList<>();
-            for (int i=0; i<getSize();i++) {
+            for (int i = 0; i < getSize(); i++) {
                 if (!selectionModel.isSelectedIndex(i)) {
                     continue;
                 }
@@ -566,14 +569,14 @@ public class RelationListDialog extends ToggleDialog implements DataSetListener
             for (Relation r: sel) {
                 Integer i = getVisibleRelationIndex(r);
                 if (i != null) {
-                    selectionModel.addSelectionInterval(i,i);
+                    selectionModel.addSelectionInterval(i, i);
                 }
             }
         }
 
         private Integer getVisibleRelationIndex(Relation rel) {
             int i = getVisibleRelations().indexOf(rel);
-            if (i<0)
+            if (i < 0)
                 return null;
             return i;
         }
@@ -589,7 +592,7 @@ public class RelationListDialog extends ToggleDialog implements DataSetListener
         }
     }
 
-    private final void setupPopupMenuHandler() {
+    private void setupPopupMenuHandler() {
 
         // -- select action
         popupMenuHandler.addAction(selectRelationAction);
@@ -639,10 +642,14 @@ public class RelationListDialog extends ToggleDialog implements DataSetListener
     /* ---------------------------------------------------------------------------------- */
 
     @Override
-    public void nodeMoved(NodeMovedEvent event) {/* irrelevant in this context */}
+    public void nodeMoved(NodeMovedEvent event) {
+        /* irrelevant in this context */
+    }
 
     @Override
-    public void wayNodesChanged(WayNodesChangedEvent event) {/* irrelevant in this context */}
+    public void wayNodesChanged(WayNodesChangedEvent event) {
+        /* irrelevant in this context */
+    }
 
     @Override
     public void primitivesAdded(final PrimitivesAddedEvent event) {
diff --git a/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java b/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java
index 9cc19ab..74fc754 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java
@@ -198,6 +198,7 @@ public class SelectionListDialog extends ToggleDialog  {
     class MouseEventHandler extends PopupMenuLauncher {
         private final HighlightHelper helper = new HighlightHelper();
         private boolean highlightEnabled = Main.pref.getBoolean("draw.target-highlight", true);
+
         public MouseEventHandler() {
             super(popupMenu);
         }
@@ -294,7 +295,7 @@ public class SelectionListDialog extends ToggleDialog  {
         public SearchAction() {
             putValue(NAME, tr("Search"));
             putValue(SHORT_DESCRIPTION,   tr("Search for objects"));
-            putValue(SMALL_ICON, ImageProvider.get("dialogs","search"));
+            putValue(SMALL_ICON, ImageProvider.get("dialogs", "search"));
             updateEnabledState();
         }
 
@@ -329,7 +330,7 @@ public class SelectionListDialog extends ToggleDialog  {
         @Override
         public void actionPerformed(ActionEvent e) {
             Collection<OsmPrimitive> sel = model.getSelected();
-            if (sel.isEmpty())return;
+            if (sel.isEmpty()) return;
             OsmDataLayer editLayer = Main.main.getEditLayer();
             if (editLayer == null) return;
             editLayer.data.setSelected(sel);
@@ -394,7 +395,7 @@ public class SelectionListDialog extends ToggleDialog  {
     class ZoomToJOSMSelectionAction extends AbstractAction implements ListDataListener {
 
         public ZoomToJOSMSelectionAction() {
-            putValue(NAME,tr("Zoom to selection"));
+            putValue(NAME, tr("Zoom to selection"));
             putValue(SHORT_DESCRIPTION, tr("Zoom to selection"));
             putValue(SMALL_ICON, ImageProvider.get("dialogs/autoscale", "selection"));
             updateEnabledState();
@@ -470,7 +471,8 @@ public class SelectionListDialog extends ToggleDialog  {
      * JOSM selection.
      *
      */
-    private static class SelectionListModel extends AbstractListModel<OsmPrimitive> implements EditLayerChangeListener, SelectionChangedListener, DataSetListener{
+    private static class SelectionListModel extends AbstractListModel<OsmPrimitive>
+    implements EditLayerChangeListener, SelectionChangedListener, DataSetListener {
 
         private static final int SELECTION_HISTORY_SIZE = 10;
 
@@ -492,7 +494,7 @@ public class SelectionListDialog extends ToggleDialog  {
          *
          * @return a summary of the current JOSM selection
          */
-        public String getJOSMSelectionSummary() {
+        public synchronized String getJOSMSelectionSummary() {
             if (selection.isEmpty()) return tr("Selection");
             int numNodes = 0;
             int numWays = 0;
@@ -513,8 +515,8 @@ public class SelectionListDialog extends ToggleDialog  {
          * @param selection the JOSM selection. Ignored if null or empty.
          */
         public void remember(Collection<? extends OsmPrimitive> selection) {
-            if (selection == null)return;
-            if (selection.isEmpty())return;
+            if (selection == null) return;
+            if (selection.isEmpty()) return;
             if (history == null) return;
             if (history.isEmpty()) {
                 history.add(selection);
@@ -522,8 +524,8 @@ public class SelectionListDialog extends ToggleDialog  {
             }
             if (history.getFirst().equals(selection)) return;
             history.addFirst(selection);
-            for(int i = 1; i < history.size(); ++i) {
-                if(history.get(i).equals(selection)) {
+            for (int i = 1; i < history.size(); ++i) {
+                if (history.get(i).equals(selection)) {
                     history.remove(i);
                     break;
                 }
@@ -544,12 +546,12 @@ public class SelectionListDialog extends ToggleDialog  {
         }
 
         @Override
-        public OsmPrimitive getElementAt(int index) {
+        public synchronized OsmPrimitive getElementAt(int index) {
             return selection.get(index);
         }
 
         @Override
-        public int getSize() {
+        public synchronized int getSize() {
             return selection.size();
         }
 
@@ -559,9 +561,9 @@ public class SelectionListDialog extends ToggleDialog  {
          *
          * @return choosen elements in the view
          */
-        public Collection<OsmPrimitive> getSelected() {
+        public synchronized Collection<OsmPrimitive> getSelected() {
             Set<OsmPrimitive> sel = new HashSet<>();
-            for(int i=0; i< getSize();i++) {
+            for (int i = 0; i < getSize(); i++) {
                 if (selectionModel.isSelectedIndex(i)) {
                     sel.add(selection.get(i));
                 }
@@ -574,12 +576,12 @@ public class SelectionListDialog extends ToggleDialog  {
          *
          * @param sel the collection of primitives to select
          */
-        public void setSelected(Collection<OsmPrimitive> sel) {
+        public synchronized void setSelected(Collection<OsmPrimitive> sel) {
             selectionModel.clearSelection();
             if (sel == null) return;
-            for (OsmPrimitive p: sel){
+            for (OsmPrimitive p: sel) {
                 int i = selection.indexOf(p);
-                if (i >= 0){
+                if (i >= 0) {
                     selectionModel.addSelectionInterval(i, i);
                 }
             }
@@ -598,10 +600,12 @@ public class SelectionListDialog extends ToggleDialog  {
          * @param selection the collection of currently selected OSM objects
          */
         public void setJOSMSelection(final Collection<? extends OsmPrimitive> selection) {
-            this.selection.clear();
-            if (selection != null) {
-                this.selection.addAll(selection);
-                sort();
+            synchronized (this) {
+                this.selection.clear();
+                if (selection != null) {
+                    this.selection.addAll(selection);
+                    sort();
+                }
             }
             GuiHelper.runInEDTAndWait(new Runnable() {
                 @Override public void run() {
@@ -635,14 +639,14 @@ public class SelectionListDialog extends ToggleDialog  {
          *
          * @param toUpdate the collection of primitives to update
          */
-        public void update(Collection<? extends OsmPrimitive> toUpdate) {
+        public synchronized void update(Collection<? extends OsmPrimitive> toUpdate) {
             if (toUpdate == null) return;
             if (toUpdate.isEmpty()) return;
             Collection<OsmPrimitive> sel = getSelected();
-            for (OsmPrimitive p: toUpdate){
+            for (OsmPrimitive p: toUpdate) {
                 int i = selection.indexOf(p);
                 if (i >= 0) {
-                    super.fireContentsChanged(this, i,i);
+                    super.fireContentsChanged(this, i, i);
                 }
             }
             setSelected(sel);
@@ -651,7 +655,7 @@ public class SelectionListDialog extends ToggleDialog  {
         /**
          * Sorts the current elements in the selection
          */
-        public void sort() {
+        public synchronized void sort() {
             if (this.selection.size() <= Main.pref.getInteger("selection.no_sort_above", 100000)) {
                 boolean quick = this.selection.size() > Main.pref.getInteger("selection.fast_sort_above", 10000);
                 Collections.sort(this.selection, new OsmPrimitiveComparator(quick, false));
@@ -764,6 +768,9 @@ public class SelectionListDialog extends ToggleDialog  {
             menu.show(parent, r.x, r.y + r.height);
         }
 
+        /**
+         * Constructs a new {@code SearchPopupMenu}.
+         */
         public SearchPopupMenu() {
             for (SearchSetting ss: org.openstreetmap.josm.actions.search.SearchAction.getSearchHistory()) {
                 add(new SearchMenuItem(ss));
@@ -777,17 +784,15 @@ public class SelectionListDialog extends ToggleDialog  {
      * @author Jan Peter Stotz
      */
     protected static class SelectionMenuItem extends JMenuItem implements ActionListener {
-        private final transient DefaultNameFormatter df = DefaultNameFormatter.getInstance();
         protected transient Collection<? extends OsmPrimitive> sel;
 
         public SelectionMenuItem(Collection<? extends OsmPrimitive> sel) {
-            super();
             this.sel = sel;
             int ways = 0;
             int nodes = 0;
             int relations = 0;
             for (OsmPrimitive o : sel) {
-                if (! o.isSelectable()) continue; // skip unselectable primitives
+                if (!o.isSelectable()) continue; // skip unselectable primitives
                 if (o instanceof Way) {
                     ways++;
                 } else if (o instanceof Node) {
@@ -797,26 +802,26 @@ public class SelectionListDialog extends ToggleDialog  {
                 }
             }
             StringBuilder text = new StringBuilder();
-            if(ways != 0) {
+            if (ways != 0) {
                 text.append(text.length() > 0 ? ", " : "")
                 .append(trn("{0} way", "{0} ways", ways, ways));
             }
-            if(nodes != 0) {
+            if (nodes != 0) {
                 text.append(text.length() > 0 ? ", " : "")
                 .append(trn("{0} node", "{0} nodes", nodes, nodes));
             }
-            if(relations != 0) {
+            if (relations != 0) {
                 text.append(text.length() > 0 ? ", " : "")
                 .append(trn("{0} relation", "{0} relations", relations, relations));
             }
-            if(ways + nodes + relations == 0) {
+            if (ways + nodes + relations == 0) {
                 text.append(tr("Unselectable now"));
-                this.sel=new ArrayList<>(); // empty selection
+                this.sel = new ArrayList<>(); // empty selection
             }
-            if(ways + nodes + relations == 1)
-            {
+            DefaultNameFormatter df = DefaultNameFormatter.getInstance();
+            if (ways + nodes + relations == 1) {
                 text.append(": ");
-                for(OsmPrimitive o : sel) {
+                for (OsmPrimitive o : sel) {
                     text.append(o.getDisplayName(df));
                 }
                 setText(text.toString());
diff --git a/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java b/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java
index af13948..c9bfe3c 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.dialogs;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -72,7 +72,7 @@ import org.openstreetmap.josm.tools.WindowGeometry.WindowGeometryException;
 
 /**
  * This class is a toggle dialog that can be turned on and off.
- *
+ * @since 8
  */
 public class ToggleDialog extends JPanel implements ShowHideButtonListener, Helpful, AWTEventListener, Destroyable, PreferenceChangedListener {
 
@@ -94,19 +94,20 @@ public class ToggleDialog extends JPanel implements ShowHideButtonListener, Help
      */
     public static final BooleanProperty PROP_DYNAMIC_BUTTONS = new BooleanProperty("dialog.dynamic.buttons", false);
 
-    private final transient ParametrizedEnumProperty<ButtonHidingType> PROP_BUTTON_HIDING = new ParametrizedEnumProperty<ToggleDialog.ButtonHidingType>(
-            ButtonHidingType.class, ButtonHidingType.DYNAMIC) {
+    private final transient ParametrizedEnumProperty<ButtonHidingType> propButtonHiding =
+            new ParametrizedEnumProperty<ToggleDialog.ButtonHidingType>(ButtonHidingType.class, ButtonHidingType.DYNAMIC) {
         @Override
         protected String getKey(String... params) {
             return preferencePrefix + ".buttonhiding";
         }
+
         @Override
         protected ButtonHidingType parse(String s) {
             try {
                 return super.parse(s);
             } catch (IllegalArgumentException e) {
                 // Legacy settings
-                return Boolean.parseBoolean(s)?ButtonHidingType.DYNAMIC:ButtonHidingType.ALWAYS_SHOWN;
+                return Boolean.parseBoolean(s) ? ButtonHidingType.DYNAMIC : ButtonHidingType.ALWAYS_SHOWN;
             }
         }
     };
@@ -222,7 +223,8 @@ public class ToggleDialog extends JPanel implements ShowHideButtonListener, Help
      * @param defShow if the dialog should be shown by default, if there is no preference
      * @param prefClass the preferences settings class, or null if not applicable
      */
-    public ToggleDialog(String name, String iconName, String tooltip, Shortcut shortcut, int preferredHeight, boolean defShow, Class<? extends PreferenceSetting> prefClass) {
+    public ToggleDialog(String name, String iconName, String tooltip, Shortcut shortcut, int preferredHeight, boolean defShow,
+            Class<? extends PreferenceSetting> prefClass) {
         super(new BorderLayout());
         this.preferencePrefix = iconName;
         this.name = name;
@@ -231,7 +233,7 @@ public class ToggleDialog extends JPanel implements ShowHideButtonListener, Help
         /** Use the full width of the parent element */
         setPreferredSize(new Dimension(0, preferredHeight));
         /** Override any minimum sizes of child elements so the user can resize freely */
-        setMinimumSize(new Dimension(0,0));
+        setMinimumSize(new Dimension(0, 0));
         this.preferredHeight = preferredHeight;
         toggleAction = new ToggleDialogAction(name, "dialogs/"+iconName, tooltip, shortcut);
         String helpId = "Dialog/"+getClass().getName().substring(getClass().getName().lastIndexOf('.')+1);
@@ -240,7 +242,7 @@ public class ToggleDialog extends JPanel implements ShowHideButtonListener, Help
         isShowing = Main.pref.getBoolean(preferencePrefix+".visible", defShow);
         isDocked = Main.pref.getBoolean(preferencePrefix+".docked", true);
         isCollapsed = Main.pref.getBoolean(preferencePrefix+".minimized", false);
-        buttonHiding = PROP_BUTTON_HIDING.get();
+        buttonHiding = propButtonHiding.get();
 
         /** show the minimize button */
         titleBar = new TitleBar(name, iconName);
@@ -311,8 +313,8 @@ public class ToggleDialog extends JPanel implements ShowHideButtonListener, Help
         // toggling the selected value in order to enforce PropertyChangeEvents
         setIsShowing(true);
         windowMenuItem.setState(true);
-        toggleAction.putValue("selected", false);
-        toggleAction.putValue("selected", true);
+        toggleAction.putValue("selected", Boolean.FALSE);
+        toggleAction.putValue("selected", Boolean.TRUE);
     }
 
     /**
@@ -394,12 +396,12 @@ public class ToggleDialog extends JPanel implements ShowHideButtonListener, Help
         if (isDialogInDefaultView()) {
             setContentVisible(false);
             setIsCollapsed(true);
-            setPreferredSize(new Dimension(0,20));
-            setMaximumSize(new Dimension(Integer.MAX_VALUE,20));
-            setMinimumSize(new Dimension(Integer.MAX_VALUE,20));
+            setPreferredSize(new Dimension(0, 20));
+            setMaximumSize(new Dimension(Integer.MAX_VALUE, 20));
+            setMinimumSize(new Dimension(Integer.MAX_VALUE, 20));
             titleBar.lblMinimized.setIcon(ImageProvider.get("misc", "minimized"));
-        }
-        else throw new IllegalStateException();
+        } else
+            throw new IllegalStateException();
     }
 
     /**
@@ -409,11 +411,11 @@ public class ToggleDialog extends JPanel implements ShowHideButtonListener, Help
         if (isDialogInCollapsedView()) {
             setContentVisible(true);
             setIsCollapsed(false);
-            setPreferredSize(new Dimension(0,preferredHeight));
+            setPreferredSize(new Dimension(0, preferredHeight));
             setMaximumSize(new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE));
             titleBar.lblMinimized.setIcon(ImageProvider.get("misc", "normal"));
-        }
-        else throw new IllegalStateException();
+        } else
+            throw new IllegalStateException();
     }
 
     /**
@@ -442,7 +444,7 @@ public class ToggleDialog extends JPanel implements ShowHideButtonListener, Help
 
     private void destroyComponents(Component component, boolean destroyItself) {
         if (component instanceof Container) {
-            for (Component c: ((Container)component).getComponents()) {
+            for (Component c: ((Container) component).getComponents()) {
                 destroyComponents(c, true);
             }
         }
@@ -452,8 +454,7 @@ public class ToggleDialog extends JPanel implements ShowHideButtonListener, Help
     }
 
     /**
-     * Closes the detached dialog if this toggle dialog is currently displayed
-     * in a detached dialog.
+     * Closes the detached dialog if this toggle dialog is currently displayed in a detached dialog.
      *
      */
     public void closeDetachedDialog() {
@@ -489,7 +490,7 @@ public class ToggleDialog extends JPanel implements ShowHideButtonListener, Help
         private final JLabel lblMinimized;
         /** the label which displays the dialog's title **/
         private final JLabel lblTitle;
-        private final JComponent lblTitle_weak;
+        private final JComponent lblTitleWeak;
         /** the button which shows whether buttons are dynamic or not */
         private final JButton buttonsHide;
         /** the contextual menu **/
@@ -511,15 +512,15 @@ public class ToggleDialog extends JPanel implements ShowHideButtonListener, Help
             add(conceal, GBC.std());
 
             // Cannot add the label directly since it would displace other elements on resize
-            lblTitle_weak = new JComponent() {
+            lblTitleWeak = new JComponent() {
                 @Override
                 public void paintComponent(Graphics g) {
                     lblTitle.paint(g);
                 }
             };
-            lblTitle_weak.setPreferredSize(new Dimension(Integer.MAX_VALUE,20));
-            lblTitle_weak.setMinimumSize(new Dimension(0,20));
-            add(lblTitle_weak, GBC.std().fill(GBC.HORIZONTAL));
+            lblTitleWeak.setPreferredSize(new Dimension(Integer.MAX_VALUE, 20));
+            lblTitleWeak.setMinimumSize(new Dimension(0, 20));
+            add(lblTitleWeak, GBC.std().fill(GBC.HORIZONTAL));
 
             buttonsHide = new JButton(ImageProvider.get("misc", buttonHiding != ButtonHidingType.ALWAYS_SHOWN
                 ? /* ICON(misc/)*/ "buttonhide" :  /* ICON(misc/)*/ "buttonshow"));
@@ -543,7 +544,7 @@ public class ToggleDialog extends JPanel implements ShowHideButtonListener, Help
                 pref.setToolTipText(tr("Open preferences for this panel"));
                 pref.setBorder(BorderFactory.createEmptyBorder());
                 pref.addActionListener(
-                        new ActionListener(){
+                        new ActionListener() {
                             @Override
                             @SuppressWarnings("unchecked")
                             public void actionPerformed(ActionEvent e) {
@@ -565,7 +566,7 @@ public class ToggleDialog extends JPanel implements ShowHideButtonListener, Help
             sticky.setToolTipText(tr("Undock the panel"));
             sticky.setBorder(BorderFactory.createEmptyBorder());
             sticky.addActionListener(
-                    new ActionListener(){
+                    new ActionListener() {
                         @Override
                         public void actionPerformed(ActionEvent e) {
                             detach();
@@ -580,7 +581,7 @@ public class ToggleDialog extends JPanel implements ShowHideButtonListener, Help
             close.setToolTipText(tr("Close this panel. You can reopen it with the buttons in the left toolbar."));
             close.setBorder(BorderFactory.createEmptyBorder());
             close.addActionListener(
-                    new ActionListener(){
+                    new ActionListener() {
                         @Override
                         public void actionPerformed(ActionEvent e) {
                             hideDialog();
@@ -596,7 +597,7 @@ public class ToggleDialog extends JPanel implements ShowHideButtonListener, Help
 
         public void setTitle(String title) {
             lblTitle.setText(title);
-            lblTitle_weak.repaint();
+            lblTitleWeak.repaint();
         }
 
         public String getTitle() {
@@ -604,13 +605,16 @@ public class ToggleDialog extends JPanel implements ShowHideButtonListener, Help
         }
 
         public class DialogPopupMenu extends JPopupMenu {
-            private final ButtonGroup buttonHidingGroup = new ButtonGroup();
-            private final JMenu buttonHidingMenu = new JMenu(tr("Side buttons"));
 
+            /**
+             * Constructs a new {@code DialogPopupMenu}.
+             */
             public DialogPopupMenu() {
                 alwaysShown.setSelected(buttonHiding == ButtonHidingType.ALWAYS_SHOWN);
                 dynamic.setSelected(buttonHiding == ButtonHidingType.DYNAMIC);
                 alwaysHidden.setSelected(buttonHiding == ButtonHidingType.ALWAYS_HIDDEN);
+                ButtonGroup buttonHidingGroup = new ButtonGroup();
+                JMenu buttonHidingMenu = new JMenu(tr("Side buttons"));
                 for (JRadioButtonMenuItem rb : new JRadioButtonMenuItem[]{alwaysShown, dynamic, alwaysHidden}) {
                     buttonHidingGroup.add(rb);
                     buttonHidingMenu.add(rb);
@@ -628,9 +632,13 @@ public class ToggleDialog extends JPanel implements ShowHideButtonListener, Help
         }
 
         class MouseEventHandler extends PopupMenuLauncher {
+            /**
+             * Constructs a new {@code MouseEventHandler}.
+             */
             public MouseEventHandler() {
                 super(popupMenu);
             }
+
             @Override
             public void mouseClicked(MouseEvent e) {
                 if (SwingUtilities.isLeftMouseButton(e)) {
@@ -654,7 +662,7 @@ public class ToggleDialog extends JPanel implements ShowHideButtonListener, Help
         public DetachedDialog() {
             super(JOptionPane.getFrameForComponent(Main.parent));
             getContentPane().add(ToggleDialog.this);
-            addWindowListener(new WindowAdapter(){
+            addWindowListener(new WindowAdapter() {
                 @Override public void windowClosing(WindowEvent e) {
                     rememberGeometry();
                     getContentPane().removeAll();
@@ -672,10 +680,13 @@ public class ToggleDialog extends JPanel implements ShowHideButtonListener, Help
                 }
             });
             addComponentListener(new ComponentAdapter() {
-                @Override public void componentMoved(ComponentEvent e) {
+                @Override
+                public void componentMoved(ComponentEvent e) {
                     rememberGeometry();
                 }
-                @Override public void componentResized(ComponentEvent e) {
+
+                @Override
+                public void componentResized(ComponentEvent e) {
                     rememberGeometry();
                 }
             });
@@ -766,7 +777,7 @@ public class ToggleDialog extends JPanel implements ShowHideButtonListener, Help
 
     protected void setIsButtonHiding(ButtonHidingType val) {
         buttonHiding = val;
-        PROP_BUTTON_HIDING.put(val);
+        propButtonHiding.put(val);
         refreshHidingButtons();
     }
 
@@ -803,7 +814,7 @@ public class ToggleDialog extends JPanel implements ShowHideButtonListener, Help
      * @return {@code true} if this dialog is docked and expanded
      */
     public boolean isDialogInDefaultView() {
-        return isShowing && isDocked && (! isCollapsed);
+        return isShowing && isDocked && (!isCollapsed);
     }
 
     /**
@@ -863,7 +874,8 @@ public class ToggleDialog extends JPanel implements ShowHideButtonListener, Help
     }
 
     @SafeVarargs
-    protected final Component createLayout(Component data, boolean scroll, Collection<SideButton> firstButtons, Collection<SideButton>... nextButtons) {
+    protected final Component createLayout(Component data, boolean scroll, Collection<SideButton> firstButtons,
+            Collection<SideButton>... nextButtons) {
         if (scroll) {
             data = new JScrollPane(data);
         }
@@ -907,12 +919,12 @@ public class ToggleDialog extends JPanel implements ShowHideButtonListener, Help
 
     @Override
     public void eventDispatched(AWTEvent event) {
-        if(isShowing() && !isCollapsed && isDocked && buttonHiding == ButtonHidingType.DYNAMIC) {
+        if (isShowing() && !isCollapsed && isDocked && buttonHiding == ButtonHidingType.DYNAMIC) {
             if (buttonsPanel != null) {
                 Rectangle b = this.getBounds();
                 b.setLocation(getLocationOnScreen());
-                if (b.contains(((MouseEvent)event).getLocationOnScreen())) {
-                    if(!buttonsPanel.isVisible()) {
+                if (b.contains(((MouseEvent) event).getLocationOnScreen())) {
+                    if (!buttonsPanel.isVisible()) {
                         buttonsPanel.setVisible(true);
                     }
                 } else if (buttonsPanel.isVisible()) {
diff --git a/src/org/openstreetmap/josm/gui/dialogs/UserListDialog.java b/src/org/openstreetmap/josm/gui/dialogs/UserListDialog.java
index 240b028..7eab854 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/UserListDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/UserListDialog.java
@@ -149,7 +149,7 @@ public class UserListDialog extends ToggleDialog implements SelectionChangedList
         super.showDialog();
         Layer layer = Main.main.getActiveLayer();
         if (layer instanceof OsmDataLayer) {
-            refresh(((OsmDataLayer)layer).data.getAllSelected());
+            refresh(((OsmDataLayer) layer).data.getAllSelected());
         }
 
     }
@@ -207,7 +207,7 @@ public class UserListDialog extends ToggleDialog implements SelectionChangedList
             }
             int num = Math.min(10, users.size());
             Iterator<User> it = users.iterator();
-            while(it.hasNext() && num > 0) {
+            while (it.hasNext() && num > 0) {
                 String url = createInfoUrl(it.next());
                 if (url == null) {
                     break;
@@ -219,8 +219,12 @@ public class UserListDialog extends ToggleDialog implements SelectionChangedList
 
         @Override
         protected String createInfoUrl(Object infoObject) {
-            User user = (User)infoObject;
-            return Main.getBaseUserUrl() + "/" + Utils.encodeUrl(user.getName()).replaceAll("\\+", "%20");
+            if (infoObject instanceof User) {
+                User user = (User) infoObject;
+                return Main.getBaseUserUrl() + "/" + Utils.encodeUrl(user.getName()).replaceAll("\\+", "%20");
+            } else {
+                return null;
+            }
         }
 
         @Override
@@ -237,31 +241,32 @@ public class UserListDialog extends ToggleDialog implements SelectionChangedList
     class DoubleClickAdapter extends MouseAdapter {
         @Override
         public void mouseClicked(MouseEvent e) {
-            if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount()==2) {
+            if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 2) {
                 selectionUsersPrimitivesAction.select();
             }
         }
     }
 
     /**
-     * Action for selecting the primitives contributed by the currently selected
-     * users.
+     * Action for selecting the primitives contributed by the currently selected users.
      *
      */
     private static class UserInfo implements Comparable<UserInfo> {
         public User user;
         public int count;
         public double percent;
+
         UserInfo(User user, int count, double percent) {
-            this.user=user;
-            this.count=count;
+            this.user = user;
+            this.count = count;
             this.percent = percent;
         }
+
         @Override
         public int compareTo(UserInfo o) {
             if (count < o.count) return 1;
             if (count > o.count) return -1;
-            if (user== null || user.getName() == null) return 1;
+            if (user == null || user.getName() == null) return 1;
             if (o.user == null || o.user.getName() == null) return -1;
             return user.getName().compareTo(o.user.getName());
         }
@@ -281,7 +286,7 @@ public class UserListDialog extends ToggleDialog implements SelectionChangedList
         private transient List<UserInfo> data;
 
         public UserTableModel() {
-            setColumnIdentifiers(new String[]{tr("Author"),tr("# Objects"),"%"});
+            setColumnIdentifiers(new String[]{tr("Author"), tr("# Objects"), "%"});
             data = new ArrayList<>();
         }
 
@@ -299,11 +304,11 @@ public class UserListDialog extends ToggleDialog implements SelectionChangedList
         }
 
         public void populate(Collection<? extends OsmPrimitive> primitives) {
-            Map<User,Integer> statistics = computeStatistics(primitives);
+            Map<User, Integer> statistics = computeStatistics(primitives);
             data.clear();
             if (primitives != null) {
                 for (Map.Entry<User, Integer> entry: statistics.entrySet()) {
-                    data.add(new UserInfo(entry.getKey(), entry.getValue(), (double)entry.getValue() /  (double)primitives.size()));
+                    data.add(new UserInfo(entry.getKey(), entry.getValue(), (double) entry.getValue() /  (double) primitives.size()));
                 }
             }
             Collections.sort(data);
@@ -337,8 +342,8 @@ public class UserListDialog extends ToggleDialog implements SelectionChangedList
             return false;
         }
 
-        public void selectPrimitivesOwnedBy(int [] rows) {
-            Set<User> users= new HashSet<>();
+        public void selectPrimitivesOwnedBy(int[] rows) {
+            Set<User> users = new HashSet<>();
             for (int index: rows) {
                 users.add(data.get(index).user);
             }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java b/src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java
index 3cde0b2..e976497 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.dialogs;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -24,6 +24,7 @@ import javax.swing.SwingUtilities;
 import javax.swing.event.TreeSelectionEvent;
 import javax.swing.event.TreeSelectionListener;
 import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.TreeNode;
 import javax.swing.tree.TreePath;
 
 import org.openstreetmap.josm.Main;
@@ -75,6 +76,8 @@ public class ValidatorDialog extends ToggleDialog implements SelectionChangedLis
     private SideButton ignoreButton;
     /** The select button */
     private SideButton selectButton;
+    /** The lookup button */
+    private SideButton lookupButton;
 
     private final JPopupMenu popupMenu = new JPopupMenu();
     private final transient PopupMenuHandler popupMenuHandler = new PopupMenuHandler(popupMenu);
@@ -113,13 +116,32 @@ public class ValidatorDialog extends ToggleDialog implements SelectionChangedLis
         selectButton.setEnabled(false);
         buttons.add(selectButton);
 
+        lookupButton = new SideButton(new AbstractAction() {
+            {
+                putValue(NAME, tr("Lookup"));
+                putValue(SHORT_DESCRIPTION, tr("Looks up the selected primitives in the error list."));
+                putValue(SMALL_ICON, ImageProvider.get("dialogs", "search"));
+            }
+
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                final DataSet ds = Main.main.getCurrentDataSet();
+                if (ds == null) {
+                    return;
+                }
+                tree.selectRelatedErrors(ds.getSelected());
+            }
+        });
+
+        buttons.add(lookupButton);
+
         buttons.add(new SideButton(Main.main.validator.validateAction));
 
         fixButton = new SideButton(new AbstractAction() {
             {
                 putValue(NAME, tr("Fix"));
                 putValue(SHORT_DESCRIPTION,  tr("Fix the selected issue."));
-                putValue(SMALL_ICON, ImageProvider.get("dialogs","fix"));
+                putValue(SMALL_ICON, ImageProvider.get("dialogs", "fix"));
             }
             @Override
             public void actionPerformed(ActionEvent e) {
@@ -134,7 +156,7 @@ public class ValidatorDialog extends ToggleDialog implements SelectionChangedLis
                 {
                     putValue(NAME, tr("Ignore"));
                     putValue(SHORT_DESCRIPTION,  tr("Ignore the selected issue next time."));
-                    putValue(SMALL_ICON, ImageProvider.get("dialogs","fix"));
+                    putValue(SMALL_ICON, ImageProvider.get("dialogs", "fix"));
                 }
                 @Override
                 public void actionPerformed(ActionEvent e) {
@@ -196,9 +218,9 @@ public class ValidatorDialog extends ToggleDialog implements SelectionChangedLis
                 continue;
             }
 
-            Enumeration<DefaultMutableTreeNode> children = node.breadthFirstEnumeration();
+            Enumeration<TreeNode> children = node.breadthFirstEnumeration();
             while (children.hasMoreElements()) {
-                DefaultMutableTreeNode childNode = children.nextElement();
+                DefaultMutableTreeNode childNode = (DefaultMutableTreeNode) children.nextElement();
                 if (processedNodes.contains(childNode)) {
                     continue;
                 }
@@ -206,7 +228,7 @@ public class ValidatorDialog extends ToggleDialog implements SelectionChangedLis
                 processedNodes.add(childNode);
                 Object nodeInfo = childNode.getUserObject();
                 if (nodeInfo instanceof TestError) {
-                    errorsToFix.add((TestError)nodeInfo);
+                    errorsToFix.add((TestError) nodeInfo);
                 }
             }
         }
@@ -240,15 +262,15 @@ public class ValidatorDialog extends ToggleDialog implements SelectionChangedLis
                 Set<String> state = new HashSet<>();
                 // ask if the whole set should be ignored
                 if (asked == JOptionPane.DEFAULT_OPTION) {
-                    String[] a = new String[] { tr("Whole group"), tr("Single elements"), tr("Nothing") };
+                    String[] a = new String[] {tr("Whole group"), tr("Single elements"), tr("Nothing")};
                     asked = JOptionPane.showOptionDialog(Main.parent, tr("Ignore whole group or individual elements?"),
                             tr("Ignoring elements"), JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE, null,
                             a, a[1]);
                 }
                 if (asked == JOptionPane.YES_NO_OPTION) {
-                    Enumeration<DefaultMutableTreeNode> children = node.breadthFirstEnumeration();
+                    Enumeration<TreeNode> children = node.breadthFirstEnumeration();
                     while (children.hasMoreElements()) {
-                        DefaultMutableTreeNode childNode = children.nextElement();
+                        DefaultMutableTreeNode childNode = (DefaultMutableTreeNode) children.nextElement();
                         if (processedNodes.contains(childNode)) {
                             continue;
                         }
@@ -271,9 +293,9 @@ public class ValidatorDialog extends ToggleDialog implements SelectionChangedLis
                 }
             }
 
-            Enumeration<DefaultMutableTreeNode> children = node.breadthFirstEnumeration();
+            Enumeration<TreeNode> children = node.breadthFirstEnumeration();
             while (children.hasMoreElements()) {
-                DefaultMutableTreeNode childNode = children.nextElement();
+                DefaultMutableTreeNode childNode = (DefaultMutableTreeNode) children.nextElement();
                 if (processedNodes.contains(childNode)) {
                     continue;
                 }
@@ -314,9 +336,9 @@ public class ValidatorDialog extends ToggleDialog implements SelectionChangedLis
 
         for (TreePath path : selectedPaths) {
             DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent();
-            Enumeration<DefaultMutableTreeNode> children = node.breadthFirstEnumeration();
+            Enumeration<TreeNode> children = node.breadthFirstEnumeration();
             while (children.hasMoreElements()) {
-                DefaultMutableTreeNode childNode = children.nextElement();
+                DefaultMutableTreeNode childNode = (DefaultMutableTreeNode) children.nextElement();
                 Object nodeInfo = childNode.getUserObject();
                 if (nodeInfo instanceof TestError) {
                     TestError error = (TestError) nodeInfo;
@@ -346,9 +368,9 @@ public class ValidatorDialog extends ToggleDialog implements SelectionChangedLis
 
         DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
         if (lastSelectedNode != null && !lastSelectedNode.equals(node)) {
-            Enumeration<DefaultMutableTreeNode> children = lastSelectedNode.breadthFirstEnumeration();
+            Enumeration<TreeNode> children = lastSelectedNode.breadthFirstEnumeration();
             while (children.hasMoreElements()) {
-                DefaultMutableTreeNode childNode = children.nextElement();
+                DefaultMutableTreeNode childNode = (DefaultMutableTreeNode) children.nextElement();
                 Object nodeInfo = childNode.getUserObject();
                 if (nodeInfo instanceof TestError) {
                     TestError error = (TestError) nodeInfo;
@@ -361,9 +383,9 @@ public class ValidatorDialog extends ToggleDialog implements SelectionChangedLis
         if (node == null)
             return hasFixes;
 
-        Enumeration<DefaultMutableTreeNode> children = node.breadthFirstEnumeration();
+        Enumeration<TreeNode> children = node.breadthFirstEnumeration();
         while (children.hasMoreElements()) {
-            DefaultMutableTreeNode childNode = children.nextElement();
+            DefaultMutableTreeNode childNode = (DefaultMutableTreeNode) children.nextElement();
             Object nodeInfo = childNode.getUserObject();
             if (nodeInfo instanceof TestError) {
                 TestError error = (TestError) nodeInfo;
@@ -386,13 +408,15 @@ public class ValidatorDialog extends ToggleDialog implements SelectionChangedLis
     @Override
     public void activeLayerChange(Layer oldLayer, Layer newLayer) {
         if (newLayer instanceof OsmDataLayer) {
-            linkedLayer = (OsmDataLayer)newLayer;
+            linkedLayer = (OsmDataLayer) newLayer;
             tree.setErrorList(linkedLayer.validationErrors);
         }
     }
 
     @Override
-    public void layerAdded(Layer newLayer) {}
+    public void layerAdded(Layer newLayer) {
+        // Do nothing
+    }
 
     @Override
     public void layerRemoved(Layer oldLayer) {
@@ -436,7 +460,7 @@ public class ValidatorDialog extends ToggleDialog implements SelectionChangedLis
     public TestError getSelectedError() {
         Object comp = tree.getLastSelectedPathComponent();
         if (comp instanceof DefaultMutableTreeNode) {
-            Object object = ((DefaultMutableTreeNode)comp).getUserObject();
+            Object object = ((DefaultMutableTreeNode) comp).getUserObject();
             if (object instanceof TestError) {
                 return (TestError) object;
             }
@@ -566,7 +590,7 @@ public class ValidatorDialog extends ToggleDialog implements SelectionChangedLis
 
         public FixTask(Collection<TestError> testErrors) {
             super(tr("Fixing errors ..."), false /* don't ignore exceptions */);
-            this.testErrors = testErrors == null ? new ArrayList<TestError> (): testErrors;
+            this.testErrors = testErrors == null ? new ArrayList<TestError>() : testErrors;
         }
 
         @Override
@@ -591,7 +615,8 @@ public class ValidatorDialog extends ToggleDialog implements SelectionChangedLis
                     });
                 }
                 // It is wanted to ignore an error if it said fixable, even if fixCommand was null
-                // This is to fix #5764 and #5773: a delete command, for example, may be null if all concerned primitives have already been deleted
+                // This is to fix #5764 and #5773:
+                // a delete command, for example, may be null if all concerned primitives have already been deleted
                 error.setIgnored(true);
             }
         }
@@ -602,7 +627,7 @@ public class ValidatorDialog extends ToggleDialog implements SelectionChangedLis
             ProgressMonitor monitor = getProgressMonitor();
             try {
                 monitor.setTicksCount(testErrors.size());
-                int i=0;
+                int i = 0;
                 SwingUtilities.invokeAndWait(new Runnable() {
                     @Override
                     public void run() {
@@ -612,7 +637,7 @@ public class ValidatorDialog extends ToggleDialog implements SelectionChangedLis
                 try {
                     for (TestError error: testErrors) {
                         i++;
-                        monitor.subTask(tr("Fixing ({0}/{1}): ''{2}''", i, testErrors.size(),error.getMessage()));
+                        monitor.subTask(tr("Fixing ({0}/{1}): ''{2}''", i, testErrors.size(), error.getMessage()));
                         if (this.canceled)
                             return;
                         fixError(error);
@@ -636,7 +661,7 @@ public class ValidatorDialog extends ToggleDialog implements SelectionChangedLis
                         Main.main.getCurrentDataSet().fireSelectionChanged();
                     }
                 });
-            } catch(InterruptedException | InvocationTargetException e) {
+            } catch (InterruptedException | InvocationTargetException e) {
                 // FIXME: signature of realRun should have a generic checked exception we
                 // could throw here
                 throw new RuntimeException(e);
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManager.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManager.java
index 724a68f..a92bb5d 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManager.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManager.java
@@ -261,12 +261,12 @@ public class ChangesetCacheManager extends JFrame {
                 model.getSelectionModel()
         );
         tblChangesets.addMouseListener(new MouseEventHandler());
-        tblChangesets.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0), "showDetails");
+        tblChangesets.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "showDetails");
         tblChangesets.getActionMap().put("showDetails", new ShowDetailAction());
         model.getSelectionModel().addListSelectionListener(new ChangesetDetailViewSynchronizer());
 
         // activate DEL on the table
-        tblChangesets.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE,0), "removeFromCache");
+        tblChangesets.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0), "removeFromCache");
         tblChangesets.getActionMap().put("removeFromCache", actRemoveFromCacheAction);
 
         pnl.add(new JScrollPane(tblChangesets), BorderLayout.CENTER);
@@ -290,7 +290,8 @@ public class ChangesetCacheManager extends JFrame {
         HelpUtil.setHelpContext(getRootPane(), HelpUtil.ht("/Dialog/ChangesetManager"));
 
         // make the dialog respond to ESC
-        getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE,0), "cancelAndClose");
+        getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(
+                KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "cancelAndClose");
         getRootPane().getActionMap().put("cancelAndClose", new CancelAction());
 
         // install a window event handler
@@ -311,7 +312,7 @@ public class ChangesetCacheManager extends JFrame {
                     getClass().getName() + ".geometry",
                     WindowGeometry.centerInWindow(
                             getParent(),
-                            new Dimension(1000,600)
+                            new Dimension(1000, 600)
                     )
             ).applySafe(this);
             needsSplitPaneAdjustment = true;
@@ -369,7 +370,7 @@ public class ChangesetCacheManager extends JFrame {
     class QueryAction extends AbstractAction {
         public QueryAction() {
             putValue(NAME, tr("Query"));
-            putValue(SMALL_ICON, ImageProvider.get("dialogs","search"));
+            putValue(SMALL_ICON, ImageProvider.get("dialogs", "search"));
             putValue(SHORT_DESCRIPTION, tr("Launch the dialog for querying changesets"));
             setEnabled(!Main.isOffline(OnlineResource.OSM_API));
         }
@@ -479,7 +480,7 @@ public class ChangesetCacheManager extends JFrame {
         @Override
         public void actionPerformed(ActionEvent arg0) {
             List<Changeset> selected = model.getSelectedChangesets();
-            ChangesetHeaderDownloadTask task =ChangesetHeaderDownloadTask.buildTaskForChangesets(ChangesetCacheManager.this,selected);
+            ChangesetHeaderDownloadTask task = ChangesetHeaderDownloadTask.buildTaskForChangesets(ChangesetCacheManager.this, selected);
             ChangesetCacheManager.getInstance().runDownloadTask(task);
         }
 
@@ -507,7 +508,7 @@ public class ChangesetCacheManager extends JFrame {
 
         @Override
         public void actionPerformed(ActionEvent arg0) {
-            ChangesetContentDownloadTask task = new ChangesetContentDownloadTask(ChangesetCacheManager.this,model.getSelectedChangesetIds());
+            ChangesetContentDownloadTask task = new ChangesetContentDownloadTask(ChangesetCacheManager.this, model.getSelectedChangesetIds());
             ChangesetCacheManager.getInstance().runDownloadTask(task);
         }
 
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManagerModel.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManagerModel.java
index 93c5399..ae835f4 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManagerModel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManagerModel.java
@@ -76,7 +76,7 @@ public class ChangesetCacheManagerModel extends AbstractTableModel implements Ch
      */
     public List<Changeset> getSelectedChangesets() {
         List<Changeset> ret = new ArrayList<>();
-        for (int i =0; i< data.size();i++) {
+        for (int i = 0; i < data.size(); i++) {
             Changeset cs = data.get(i);
             if (selectionModel.isSelectedIndex(i)) {
                 ret.add(cs);
@@ -116,7 +116,7 @@ public class ChangesetCacheManagerModel extends AbstractTableModel implements Ch
             if (idx >= 0) {
                 GuiHelper.runInEDTAndWait(new Runnable() {
                     @Override public void run() {
-                        selectionModel.addSelectionInterval(idx,idx);
+                        selectionModel.addSelectionInterval(idx, idx);
                     }
                 });
             }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheTableCellRenderer.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheTableCellRenderer.java
index 70f4cca..84bc2ba 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheTableCellRenderer.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheTableCellRenderer.java
@@ -50,7 +50,7 @@ public class ChangesetCacheTableCellRenderer extends AbstractCellRenderer {
             return this;
         reset();
         renderColors(isSelected);
-        Changeset cs = (Changeset)value;
+        Changeset cs = (Changeset) value;
         switch(column) {
         case 0: /* id */ renderId(cs.getId()); break;
         case 1: /* upload comment */ renderUploadComment(cs); break;
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentDownloadTask.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentDownloadTask.java
index 8baecd1..8911b0d 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentDownloadTask.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentDownloadTask.java
@@ -68,7 +68,8 @@ public class ChangesetContentDownloadTask extends PleaseWaitRunnable implements
     public ChangesetContentDownloadTask(int changesetId) {
         super(tr("Downloading changeset content"), false /* don't ignore exceptions */);
         if (changesetId <= 0)
-            throw new IllegalArgumentException(MessageFormat.format("Expected integer value > 0 for parameter ''{0}'', got ''{1}''", "changesetId", changesetId));
+            throw new IllegalArgumentException(
+                    MessageFormat.format("Expected integer value > 0 for parameter ''{0}'', got ''{1}''", "changesetId", changesetId));
         init(Collections.singleton(changesetId));
     }
 
@@ -94,7 +95,8 @@ public class ChangesetContentDownloadTask extends PleaseWaitRunnable implements
     public ChangesetContentDownloadTask(Component parent, int changesetId) {
         super(parent, tr("Downloading changeset content"), false /* don't ignore exceptions */);
         if (changesetId <= 0)
-            throw new IllegalArgumentException(MessageFormat.format("Expected integer value > 0 for parameter ''{0}'', got ''{1}''", "changesetId", changesetId));
+            throw new IllegalArgumentException(
+                    MessageFormat.format("Expected integer value > 0 for parameter ''{0}'', got ''{1}''", "changesetId", changesetId));
         init(Collections.singleton(changesetId));
     }
 
@@ -131,11 +133,11 @@ public class ChangesetContentDownloadTask extends PleaseWaitRunnable implements
      * @throws OsmTransferException if something went wrong
      */
     protected void downloadChangeset(int changesetId) throws OsmTransferException {
-        synchronized(this) {
+        synchronized (this) {
             reader = new OsmServerChangesetReader();
         }
         Changeset cs = reader.readChangeset(changesetId, false, getProgressMonitor().createSubTaskMonitor(0, false));
-        synchronized(this) {
+        synchronized (this) {
             reader = null;
         }
         ChangesetCache.getInstance().update(cs);
@@ -163,7 +165,7 @@ public class ChangesetContentDownloadTask extends PleaseWaitRunnable implements
     protected void realRun() throws SAXException, IOException, OsmTransferException {
         try {
             getProgressMonitor().setTicksCount(toDownload.size());
-            int i=0;
+            int i = 0;
             for (int id: toDownload) {
                 i++;
                 if (!isAvailableLocally(id)) {
@@ -171,12 +173,12 @@ public class ChangesetContentDownloadTask extends PleaseWaitRunnable implements
                     downloadChangeset(id);
                 }
                 if (canceled) return;
-                synchronized(this) {
+                synchronized (this) {
                     reader = new OsmServerChangesetReader();
                 }
                 getProgressMonitor().setCustomText(tr("({0}/{1}) Downloading content for changeset {2}...", i, toDownload.size(), id));
                 ChangesetDataSet ds = reader.downloadChangeset(id, getProgressMonitor().createSubTaskMonitor(0, false));
-                synchronized(this) {
+                synchronized (this) {
                     reader = null;
                 }
                 Changeset cs = ChangesetCache.getInstance().get(id);
@@ -185,13 +187,13 @@ public class ChangesetContentDownloadTask extends PleaseWaitRunnable implements
                 downloadedChangesets.add(cs);
                 getProgressMonitor().worked(1);
             }
-        } catch(OsmTransferCanceledException e) {
+        } catch (OsmTransferCanceledException e) {
             // the download was canceled by the user. This exception is caught if the
             // user canceled the authentication dialog.
             //
             canceled = true;
             return;
-        } catch(OsmTransferException e) {
+        } catch (OsmTransferException e) {
             if (canceled)
                 return;
             lastException = e;
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentPanel.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentPanel.java
index 3ffd3bc..d674364 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentPanel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentPanel.java
@@ -71,7 +71,7 @@ public class ChangesetContentPanel extends JPanel implements PropertyChangeListe
     private final HeaderPanel pnlHeader = new HeaderPanel();
 
     protected void buildModels() {
-        DefaultListSelectionModel selectionModel =new DefaultListSelectionModel();
+        DefaultListSelectionModel selectionModel = new DefaultListSelectionModel();
         model = new ChangesetContentTableModel(selectionModel);
         actDownloadContentAction = new DownloadChangesetContentAction();
         actDownloadContentAction.initProperties(currentChangeset);
@@ -126,7 +126,7 @@ public class ChangesetContentPanel extends JPanel implements PropertyChangeListe
     }
 
     protected final void build() {
-        setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
         setLayout(new BorderLayout());
         buildModels();
 
@@ -166,13 +166,13 @@ public class ChangesetContentPanel extends JPanel implements PropertyChangeListe
     /* ---------------------------------------------------------------------------- */
     @Override
     public void propertyChange(PropertyChangeEvent evt) {
-        if(!evt.getPropertyName().equals(ChangesetCacheManagerModel.CHANGESET_IN_DETAIL_VIEW_PROP))
+        if (!evt.getPropertyName().equals(ChangesetCacheManagerModel.CHANGESET_IN_DETAIL_VIEW_PROP))
             return;
-        Changeset cs = (Changeset)evt.getNewValue();
+        Changeset cs = (Changeset) evt.getNewValue();
         setCurrentChangeset(cs);
     }
 
-    private final void alertNoPrimitivesTo(Collection<HistoryOsmPrimitive> primitives, String title, String helpTopic) {
+    private void alertNoPrimitivesTo(Collection<HistoryOsmPrimitive> primitives, String title, String helpTopic) {
         HelpAwareOptionPane.showOptionDialog(
                 ChangesetContentPanel.this,
                 trn("<html>The selected object is not available in the current<br>"
@@ -200,7 +200,7 @@ public class ChangesetContentPanel extends JPanel implements PropertyChangeListe
         @Override
         public void actionPerformed(ActionEvent evt) {
             if (currentChangeset == null) return;
-            ChangesetContentDownloadTask task = new ChangesetContentDownloadTask(ChangesetContentPanel.this,currentChangeset.getId());
+            ChangesetContentDownloadTask task = new ChangesetContentDownloadTask(ChangesetContentPanel.this, currentChangeset.getId());
             ChangesetCacheManager.getInstance().runDownloadTask(task);
         }
 
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentTableCellRenderer.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentTableCellRenderer.java
index de5c119..223c8f8 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentTableCellRenderer.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentTableCellRenderer.java
@@ -34,11 +34,11 @@ public class ChangesetContentTableCellRenderer extends AbstractCellRenderer {
         renderColors(isSelected);
         switch(column) {
         case 0:
-            ChangesetModificationType type = (ChangesetModificationType)value;
+            ChangesetModificationType type = (ChangesetModificationType) value;
             renderModificationType(type);
             break;
         case 1:
-            HistoryOsmPrimitive primitive = (HistoryOsmPrimitive)value;
+            HistoryOsmPrimitive primitive = (HistoryOsmPrimitive) value;
             renderId(primitive.getId());
             break;
         default:
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentTableModel.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentTableModel.java
index f09642f..dd62ad8 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentTableModel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentTableModel.java
@@ -53,7 +53,7 @@ public class ChangesetContentTableModel extends AbstractTableModel {
 
     public Set<HistoryOsmPrimitive> getSelectedPrimitives() {
         Set<HistoryOsmPrimitive> ret = new HashSet<>();
-        for (int i=0;i < data.size();i++) {
+        for (int i = 0; i < data.size(); i++) {
             if (selectionModel.isSelectedIndex(i)) {
                 ret.add(data.get(i).getPrimitive());
             }
@@ -155,6 +155,7 @@ public class ChangesetContentTableModel extends AbstractTableModel {
         public ChangesetModificationType getModificationType() {
             return modificationType;
         }
+
         @Override
         public HistoryOsmPrimitive getPrimitive() {
             return primitive;
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDetailPanel.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDetailPanel.java
index 4d53a0e..efc5c13 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDetailPanel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDetailPanel.java
@@ -51,7 +51,7 @@ import org.openstreetmap.josm.tools.date.DateUtils;
 public class ChangesetDetailPanel extends JPanel implements PropertyChangeListener {
 
     private final JosmTextField tfID        = new JosmTextField(10);
-    private final JosmTextArea  taComment   = new JosmTextArea(5,40);
+    private final JosmTextArea  taComment   = new JosmTextArea(5, 40);
     private final JosmTextField tfOpen      = new JosmTextField(10);
     private final JosmTextField tfUser      = new JosmTextField("");
     private final JosmTextField tfCreatedOn = new JosmTextField(20);
@@ -110,7 +110,7 @@ public class ChangesetDetailPanel extends JPanel implements PropertyChangeListen
 
         GridBagConstraints gc = new GridBagConstraints();
         gc.anchor = GridBagConstraints.FIRST_LINE_START;
-        gc.insets = new Insets(0,0,2,3);
+        gc.insets = new Insets(0, 0, 2, 3);
 
         //-- id
         gc.fill = GridBagConstraints.HORIZONTAL;
@@ -192,7 +192,7 @@ public class ChangesetDetailPanel extends JPanel implements PropertyChangeListen
 
     protected final void build() {
         setLayout(new BorderLayout());
-        setBorder(BorderFactory.createEmptyBorder(3,3,3,3));
+        setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
         add(buildDetailViewPanel(), BorderLayout.CENTER);
         add(buildActionButtonPanel(), BorderLayout.WEST);
     }
@@ -258,9 +258,9 @@ public class ChangesetDetailPanel extends JPanel implements PropertyChangeListen
     /* ---------------------------------------------------------------------------- */
     @Override
     public void propertyChange(PropertyChangeEvent evt) {
-        if (! evt.getPropertyName().equals(ChangesetCacheManagerModel.CHANGESET_IN_DETAIL_VIEW_PROP))
+        if (!evt.getPropertyName().equals(ChangesetCacheManagerModel.CHANGESET_IN_DETAIL_VIEW_PROP))
             return;
-        setCurrentChangeset((Changeset)evt.getNewValue());
+        setCurrentChangeset((Changeset) evt.getNewValue());
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDiscussionPanel.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDiscussionPanel.java
index c05c6d2..bde8f38 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDiscussionPanel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDiscussionPanel.java
@@ -104,7 +104,7 @@ public class ChangesetDiscussionPanel extends JPanel implements PropertyChangeLi
 
     protected final void build() {
         setLayout(new BorderLayout());
-        setBorder(BorderFactory.createEmptyBorder(3,3,3,3));
+        setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
         add(buildActionButtonPanel(), BorderLayout.WEST);
         add(buildDiscussionPanel(), BorderLayout.CENTER);
     }
@@ -154,8 +154,8 @@ public class ChangesetDiscussionPanel extends JPanel implements PropertyChangeLi
     /* ---------------------------------------------------------------------------- */
     @Override
     public void propertyChange(PropertyChangeEvent evt) {
-        if (! evt.getPropertyName().equals(ChangesetCacheManagerModel.CHANGESET_IN_DETAIL_VIEW_PROP))
+        if (!evt.getPropertyName().equals(ChangesetCacheManagerModel.CHANGESET_IN_DETAIL_VIEW_PROP))
             return;
-        setCurrentChangeset((Changeset)evt.getNewValue());
+        setCurrentChangeset((Changeset) evt.getNewValue());
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDiscussionTableCellRenderer.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDiscussionTableCellRenderer.java
index 23c5009..53aed30 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDiscussionTableCellRenderer.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDiscussionTableCellRenderer.java
@@ -26,15 +26,15 @@ public class ChangesetDiscussionTableCellRenderer extends AbstractCellRenderer {
         renderColors(comp, isSelected);
         switch(column) {
         case 0:
-            renderDate((Date)value);
+            renderDate((Date) value);
             break;
         case 1:
-            renderUser((User)value);
+            renderUser((User) value);
             break;
         case 2:
             comp = new JosmTextArea((String) value);
-            ((JosmTextArea)comp).setLineWrap(true);
-            ((JosmTextArea)comp).setWrapStyleWord(true);
+            ((JosmTextArea) comp).setLineWrap(true);
+            ((JosmTextArea) comp).setWrapStyleWord(true);
             reset(comp, false);
             renderColors(comp, isSelected);
         }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDownloadTask.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDownloadTask.java
index a5e6847..b42e415 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDownloadTask.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDownloadTask.java
@@ -7,6 +7,8 @@ import org.openstreetmap.josm.data.osm.Changeset;
 
 public interface ChangesetDownloadTask extends Runnable{
     Set<Changeset> getDownloadedChangesets();
+
     boolean isCanceled();
+
     boolean isFailed();
 }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetHeaderDownloadTask.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetHeaderDownloadTask.java
index f134820..23c3649 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetHeaderDownloadTask.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetHeaderDownloadTask.java
@@ -176,13 +176,13 @@ public class ChangesetHeaderDownloadTask extends PleaseWaitRunnable implements C
         } else {
             try {
                 SwingUtilities.invokeAndWait(r);
-            } catch(InterruptedException e) {
+            } catch (InterruptedException e) {
                 Main.warn("InterruptedException in "+getClass().getSimpleName()+" while updating changeset cache");
-            } catch(InvocationTargetException e) {
+            } catch (InvocationTargetException e) {
                 Throwable t = e.getTargetException();
                 if (t instanceof RuntimeException) {
                     BugReportExceptionHandler.handleException(t);
-                } else if (t instanceof Exception){
+                } else if (t instanceof Exception) {
                     ExceptionUtil.explainException(e);
                 } else {
                     BugReportExceptionHandler.handleException(t);
@@ -200,7 +200,7 @@ public class ChangesetHeaderDownloadTask extends PleaseWaitRunnable implements C
             downloadedChangesets = new HashSet<>();
             downloadedChangesets.addAll(reader.readChangesets(idsToDownload, includeDiscussion,
                     getProgressMonitor().createSubTaskMonitor(0, false)));
-        } catch(OsmTransferException e) {
+        } catch (OsmTransferException e) {
             if (canceled)
                 // ignore exception if canceled
                 return;
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetListCellRenderer.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetListCellRenderer.java
index dfe7a95..2f07471 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetListCellRenderer.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetListCellRenderer.java
@@ -39,18 +39,19 @@ public class ChangesetListCellRenderer extends JLabel implements ListCellRendere
             sb.append(tr("{0} [incomplete]", cs.getId()));
         } else {
             String comment = cs.get("comment");
-            sb.append(cs.getId());
-            sb.append(" - ");
-            sb.append(cs.isOpen() ? tr("open") : tr("closed"));
+            sb.append(cs.getId())
+              .append(" - ")
+              .append(cs.isOpen() ? tr("open") : tr("closed"));
             if (comment != null) {
-                sb.append(" - ").append("'").append(comment).append("'");
+                sb.append(" - '").append(comment).append('\'');
             }
         }
         setText(sb.toString());
     }
 
     @Override
-    public Component getListCellRendererComponent(JList<? extends Changeset> list, Changeset cs, int index, boolean isSelected, boolean cellHasFocus) {
+    public Component getListCellRendererComponent(JList<? extends Changeset> list, Changeset cs, int index, boolean isSelected,
+            boolean cellHasFocus) {
         renderColors(isSelected);
         renderLabel(cs);
         return this;
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetListModel.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetListModel.java
index 296cac5..ab0665b 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetListModel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetListModel.java
@@ -31,7 +31,7 @@ public class ChangesetListModel extends DefaultListModel<Changeset> implements C
 
     public Set<Changeset> getSelectedChangesets() {
         Set<Changeset> ret = new HashSet<>();
-        for (int i=0; i < getSize(); i++) {
+        for (int i = 0; i < getSize(); i++) {
             if (selectionModel.isSelectedIndex(i)) {
                 ret.add(data.get(i));
             }
@@ -41,7 +41,7 @@ public class ChangesetListModel extends DefaultListModel<Changeset> implements C
 
     public Set<Integer> getSelectedChangesetIds() {
         Set<Integer> ret = new HashSet<>();
-        for (int i=0; i < getSize(); i++) {
+        for (int i = 0; i < getSize(); i++) {
             if (selectionModel.isSelectedIndex(i)) {
                 ret.add(data.get(i).getId());
             }
@@ -57,7 +57,7 @@ public class ChangesetListModel extends DefaultListModel<Changeset> implements C
             if (idx < 0) {
                 continue;
             }
-            selectionModel.addSelectionInterval(idx,idx);
+            selectionModel.addSelectionInterval(idx, idx);
         }
     }
 
@@ -121,7 +121,7 @@ public class ChangesetListModel extends DefaultListModel<Changeset> implements C
         }
         Set<Changeset> changesets = new HashSet<>();
         for (OsmPrimitive p: ds.allPrimitives()) {
-            if (p.getChangesetId() <=0 ) {
+            if (p.getChangesetId() <= 0) {
                 continue;
             }
             changesets.add(new Changeset(p.getChangesetId()));
@@ -169,7 +169,7 @@ public class ChangesetListModel extends DefaultListModel<Changeset> implements C
      */
     public List<Changeset> getSelectedOpenChangesets() {
         List<Changeset> ret = new ArrayList<>();
-        for (int i=0; i< getSize(); i++) {
+        for (int i = 0; i < getSize(); i++) {
             if (selectionModel.isSelectedIndex(i)) {
                 Changeset cs = data.get(i);
                 if (cs.isOpen()) {
@@ -186,19 +186,19 @@ public class ChangesetListModel extends DefaultListModel<Changeset> implements C
     @Override
     public void changesetCacheUpdated(ChangesetCacheEvent event) {
         Set<Changeset> sel = getSelectedChangesets();
-        for(Changeset cs: event.getAddedChangesets()) {
+        for (Changeset cs: event.getAddedChangesets()) {
             int idx = data.indexOf(cs);
             if (idx >= 0 && data.get(idx) != cs) {
                 data.get(idx).mergeFrom(cs);
             }
         }
-        for(Changeset cs: event.getUpdatedChangesets()) {
+        for (Changeset cs: event.getUpdatedChangesets()) {
             int idx = data.indexOf(cs);
             if (idx >= 0 && data.get(idx) != cs) {
                 data.get(idx).mergeFrom(cs);
             }
         }
-        for(Changeset cs: event.getRemovedChangesets()) {
+        for (Changeset cs: event.getRemovedChangesets()) {
             int idx = data.indexOf(cs);
             if (idx >= 0) {
                 // replace with an incomplete changeset
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetTagsPanel.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetTagsPanel.java
index 23b4e0b..4f540ec 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetTagsPanel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetTagsPanel.java
@@ -23,9 +23,9 @@ public class ChangesetTagsPanel extends JPanel implements PropertyChangeListener
 
     protected void build() {
         setLayout(new BorderLayout());
-        setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
         model = new TagEditorModel();
-        TagTable tblTags = new TagTable(model);
+        TagTable tblTags = new TagTable(model, 0);
         tblTags.setEnabled(false);
         add(new JScrollPane(tblTags), BorderLayout.CENTER);
     }
@@ -52,7 +52,7 @@ public class ChangesetTagsPanel extends JPanel implements PropertyChangeListener
     public void propertyChange(PropertyChangeEvent evt) {
         if (!evt.getPropertyName().equals(ChangesetCacheManagerModel.CHANGESET_IN_DETAIL_VIEW_PROP))
             return;
-        Changeset cs = (Changeset)evt.getNewValue();
+        Changeset cs = (Changeset) evt.getNewValue();
         if (cs == null) {
             model.clear();
         } else {
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetsInActiveDataLayerListModel.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetsInActiveDataLayerListModel.java
index b5ec5f3..8c92208 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetsInActiveDataLayerListModel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetsInActiveDataLayerListModel.java
@@ -34,25 +34,39 @@ public class ChangesetsInActiveDataLayerListModel extends ChangesetListModel imp
     }
 
     @Override
-    public void primitivesAdded(PrimitivesAddedEvent event) {/* ignored */}
+    public void primitivesAdded(PrimitivesAddedEvent event) {
+        // ignored
+    }
 
     @Override
-    public void primitivesRemoved(PrimitivesRemovedEvent event) {/* ignored */}
+    public void primitivesRemoved(PrimitivesRemovedEvent event) {
+        // ignored
+    }
 
     @Override
-    public void otherDatasetChange(AbstractDatasetChangedEvent event) {/* ignored */}
+    public void otherDatasetChange(AbstractDatasetChangedEvent event) {
+        // ignored
+    }
 
     @Override
-    public void nodeMoved(NodeMovedEvent event) {/* ignored */}
+    public void nodeMoved(NodeMovedEvent event) {
+        // ignored
+    }
 
     @Override
-    public void relationMembersChanged(RelationMembersChangedEvent event) {/* ignored */}
+    public void relationMembersChanged(RelationMembersChangedEvent event) {
+        // ignored
+    }
 
     @Override
-    public void tagsChanged(TagsChangedEvent event) {/* ignored */}
+    public void tagsChanged(TagsChangedEvent event) {
+        // ignored
+    }
 
     @Override
-    public void wayNodesChanged(WayNodesChangedEvent event) {/* ignored */}
+    public void wayNodesChanged(WayNodesChangedEvent event) {
+        // ignored
+    }
 
     /* ------------------------------------------------------------------------------ */
     /* interface EditLayerListener                                                    */
@@ -60,8 +74,7 @@ public class ChangesetsInActiveDataLayerListModel extends ChangesetListModel imp
     @Override
     public void editLayerChanged(OsmDataLayer oldLayer, OsmDataLayer newLayer) {
         // just init the model content. Don't register as DataSetListener. The mode
-        // is already registered to receive DataChangedEvents from the current
-        // edit layer
+        // is already registered to receive DataChangedEvents from the current edit layer
         if (newLayer != null) {
             initFromDataSet(newLayer.data);
         } else {
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/SingleChangesetDownloadPanel.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/SingleChangesetDownloadPanel.java
index 1777a60..65d58b0 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/SingleChangesetDownloadPanel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/SingleChangesetDownloadPanel.java
@@ -29,14 +29,13 @@ import org.openstreetmap.josm.io.OnlineResource;
 public class SingleChangesetDownloadPanel extends JPanel {
 
     private ChangesetIdTextField tfChangesetId;
-    private DownloadAction actDownload;
 
     protected void build() {
-        setLayout(new FlowLayout(FlowLayout.LEFT,0,0));
+        setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
         setBorder(
                 BorderFactory.createCompoundBorder(
                         BorderFactory.createLineBorder(Color.GRAY),
-                        BorderFactory.createEmptyBorder(0,3,0,3)
+                        BorderFactory.createEmptyBorder(0, 3, 0, 3)
                 )
         );
 
@@ -45,7 +44,7 @@ public class SingleChangesetDownloadPanel extends JPanel {
         tfChangesetId.setToolTipText(tr("Enter a changeset id"));
         SelectAllOnFocusGainedDecorator.decorate(tfChangesetId);
 
-        actDownload = new DownloadAction();
+        DownloadAction actDownload = new DownloadAction();
         SideButton btn = new SideButton(actDownload);
         tfChangesetId.addActionListener(actDownload);
         tfChangesetId.getDocument().addDocumentListener(actDownload);
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/package-info.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/package-info.java
new file mode 100644
index 0000000..918e6e3
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/package-info.java
@@ -0,0 +1,6 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Standalone dialog allowing to handle OSM changesets (query and display them).
+ */
+package org.openstreetmap.josm.gui.dialogs.changeset;
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/query/AdvancedChangesetQueryPanel.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/query/AdvancedChangesetQueryPanel.java
index 1652e3b..a1e1d57 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/query/AdvancedChangesetQueryPanel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/query/AdvancedChangesetQueryPanel.java
@@ -59,7 +59,7 @@ public class AdvancedChangesetQueryPanel extends JPanel {
     protected JPanel buildQueryPanel() {
         ItemListener stateChangeHandler = new RestrictionGroupStateChangeHandler();
         JPanel pnl  = new VerticallyScrollablePanel();
-        pnl.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        pnl.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
         pnl.setLayout(new GridBagLayout());
         GridBagConstraints gc = new GridBagConstraints();
 
@@ -73,7 +73,7 @@ public class AdvancedChangesetQueryPanel extends JPanel {
 
         gc.gridx = 1;
         gc.weightx = 1.0;
-        pnl.add(new JMultilineLabel(tr("Select changesets owned by specific users")),gc);
+        pnl.add(new JMultilineLabel(tr("Select changesets owned by specific users")), gc);
 
         gc.gridy = 1;
         gc.gridx = 1;
@@ -92,7 +92,7 @@ public class AdvancedChangesetQueryPanel extends JPanel {
 
         gc.gridx = 1;
         gc.weightx = 1.0;
-        pnl.add(new JMultilineLabel(tr("Select changesets depending on whether they are open or closed")),gc);
+        pnl.add(new JMultilineLabel(tr("Select changesets depending on whether they are open or closed")), gc);
 
         gc.gridy = 3;
         gc.gridx = 1;
@@ -111,7 +111,7 @@ public class AdvancedChangesetQueryPanel extends JPanel {
 
         gc.gridx = 1;
         gc.weightx = 1.0;
-        pnl.add(new JMultilineLabel(tr("Select changesets based on the date/time they have been created or closed")),gc);
+        pnl.add(new JMultilineLabel(tr("Select changesets based on the date/time they have been created or closed")), gc);
 
         gc.gridy = 5;
         gc.gridx = 1;
@@ -131,7 +131,7 @@ public class AdvancedChangesetQueryPanel extends JPanel {
 
         gc.gridx = 1;
         gc.weightx = 1.0;
-        pnl.add(new JMultilineLabel(tr("Select only changesets related to a specific bounding box")),gc);
+        pnl.add(new JMultilineLabel(tr("Select only changesets related to a specific bounding box")), gc);
 
         gc.gridy = 7;
         gc.gridx = 1;
@@ -142,7 +142,7 @@ public class AdvancedChangesetQueryPanel extends JPanel {
         gc.gridy = 8;
         gc.gridx = 0;
         gc.gridwidth = 2;
-        gc.fill  =GridBagConstraints.BOTH;
+        gc.fill = GridBagConstraints.BOTH;
         gc.weightx = 1.0;
         gc.weighty = 1.0;
         pnl.add(new JPanel(), gc);
@@ -176,7 +176,7 @@ public class AdvancedChangesetQueryPanel extends JPanel {
 
     public void displayMessageIfInvalid() {
         if (cbUserRestriction.isSelected()) {
-            if (! pnlUserRestriction.isValidChangesetQuery()) {
+            if (!pnlUserRestriction.isValidChangesetQuery()) {
                 pnlUserRestriction.displayMessageIfInvalid();
             }
         } else if (cbTimeRestrictions.isSelected()) {
@@ -199,7 +199,7 @@ public class AdvancedChangesetQueryPanel extends JPanel {
     public ChangesetQuery buildChangesetQuery() {
         ChangesetQuery query = new ChangesetQuery();
         if (cbUserRestriction.isSelected()) {
-            if (! pnlUserRestriction.isValidChangesetQuery())
+            if (!pnlUserRestriction.isValidChangesetQuery())
                 return null;
             pnlUserRestriction.fillInQuery(query);
         }
@@ -288,10 +288,10 @@ public class AdvancedChangesetQueryPanel extends JPanel {
         protected void build() {
             setLayout(new GridBagLayout());
             setBorder(BorderFactory.createCompoundBorder(
-                    BorderFactory.createEmptyBorder(3,3,3,3),
+                    BorderFactory.createEmptyBorder(3, 3, 3, 3),
                     BorderFactory.createCompoundBorder(
                             BorderFactory.createLineBorder(Color.GRAY),
-                            BorderFactory.createEmptyBorder(5,5,5,5)
+                            BorderFactory.createEmptyBorder(5, 5, 5, 5)
                     )
             ));
             GridBagConstraints gc = new GridBagConstraints();
@@ -388,11 +388,11 @@ public class AdvancedChangesetQueryPanel extends JPanel {
             GridBagConstraints gc = new GridBagConstraints();
             gc.fill = GridBagConstraints.HORIZONTAL;
             gc.weightx = 0.0;
-            gc.insets = new Insets(0,0,0,3);
+            gc.insets = new Insets(0, 0, 0, 3);
             pnl.add(new JLabel(tr("User ID:")), gc);
 
             gc.gridx = 1;
-            pnl.add(tfUid = new JosmTextField(10),gc);
+            pnl.add(tfUid = new JosmTextField(10), gc);
             SelectAllOnFocusGainedDecorator.decorate(tfUid);
             valUid = UidInputFieldValidator.decorate(tfUid);
 
@@ -408,11 +408,11 @@ public class AdvancedChangesetQueryPanel extends JPanel {
             GridBagConstraints gc = new GridBagConstraints();
             gc.fill = GridBagConstraints.HORIZONTAL;
             gc.weightx = 0.0;
-            gc.insets = new Insets(0,0,0,3);
+            gc.insets = new Insets(0, 0, 0, 3);
             pnl.add(new JLabel(tr("User name:")), gc);
 
             gc.gridx = 1;
-            pnl.add(tfUserName = new JosmTextField(10),gc);
+            pnl.add(tfUserName = new JosmTextField(10), gc);
             SelectAllOnFocusGainedDecorator.decorate(tfUserName);
             valUserName = UserNameInputValidator.decorate(tfUserName);
 
@@ -426,10 +426,10 @@ public class AdvancedChangesetQueryPanel extends JPanel {
         protected void build() {
             setLayout(new GridBagLayout());
             setBorder(BorderFactory.createCompoundBorder(
-                    BorderFactory.createEmptyBorder(3,3,3,3),
+                    BorderFactory.createEmptyBorder(3, 3, 3, 3),
                     BorderFactory.createCompoundBorder(
                             BorderFactory.createLineBorder(Color.GRAY),
-                            BorderFactory.createEmptyBorder(5,5,5,5)
+                            BorderFactory.createEmptyBorder(5, 5, 5, 5)
                     )
             ));
 
@@ -437,7 +437,7 @@ public class AdvancedChangesetQueryPanel extends JPanel {
             GridBagConstraints gc = new GridBagConstraints();
             gc.anchor = GridBagConstraints.NORTHWEST;
             gc.gridx = 0;
-            gc.fill= GridBagConstraints.HORIZONTAL;
+            gc.fill = GridBagConstraints.HORIZONTAL;
             gc.weightx = 0.0;
             add(rbRestrictToMyself = new JRadioButton(), gc);
             rbRestrictToMyself.addItemListener(userRestrictionChangeHandler);
@@ -449,7 +449,7 @@ public class AdvancedChangesetQueryPanel extends JPanel {
 
             gc.gridx = 0;
             gc.gridy = 1;
-            gc.fill= GridBagConstraints.HORIZONTAL;
+            gc.fill = GridBagConstraints.HORIZONTAL;
             gc.weightx = 0.0;
             add(rbRestrictToUid = new JRadioButton(), gc);
             rbRestrictToUid.addItemListener(userRestrictionChangeHandler);
@@ -457,31 +457,31 @@ public class AdvancedChangesetQueryPanel extends JPanel {
             gc.gridx = 1;
             gc.fill =  GridBagConstraints.HORIZONTAL;
             gc.weightx = 1.0;
-            add(new JMultilineLabel(tr("Only changesets owned by the user with the following user ID")),gc);
+            add(new JMultilineLabel(tr("Only changesets owned by the user with the following user ID")), gc);
 
             gc.gridx = 1;
             gc.gridy = 2;
             gc.fill =  GridBagConstraints.HORIZONTAL;
             gc.weightx = 1.0;
-            add(buildUidInputPanel(),gc);
+            add(buildUidInputPanel(), gc);
 
             gc.gridx = 0;
             gc.gridy = 3;
-            gc.fill= GridBagConstraints.HORIZONTAL;
+            gc.fill = GridBagConstraints.HORIZONTAL;
             gc.weightx = 0.0;
             add(rbRestrictToUserName = new JRadioButton(), gc);
             rbRestrictToUserName.addItemListener(userRestrictionChangeHandler);
 
             gc.gridx = 1;
-            gc.fill =  GridBagConstraints.HORIZONTAL;
+            gc.fill = GridBagConstraints.HORIZONTAL;
             gc.weightx = 1.0;
-            add(new JMultilineLabel(tr("Only changesets owned by the user with the following user name")),gc);
+            add(new JMultilineLabel(tr("Only changesets owned by the user with the following user name")), gc);
 
             gc.gridx = 1;
             gc.gridy = 4;
-            gc.fill =  GridBagConstraints.HORIZONTAL;
+            gc.fill = GridBagConstraints.HORIZONTAL;
             gc.weightx = 1.0;
-            add(buildUserNameInputPanel(),gc);
+            add(buildUserNameInputPanel(), gc);
 
             bgUserRestrictions = new ButtonGroup();
             bgUserRestrictions.add(rbRestrictToMyself);
@@ -526,7 +526,8 @@ public class AdvancedChangesetQueryPanel extends JPanel {
                 } else if (im.isFullyIdentified()) {
                     query.forUser(im.getUserId());
                 } else
-                    throw new IllegalStateException(tr("Cannot restrict changeset query to the current user because the current user is anonymous"));
+                    throw new IllegalStateException(
+                            tr("Cannot restrict changeset query to the current user because the current user is anonymous"));
             } else if (rbRestrictToUid.isSelected()) {
                 int uid  = valUid.getUid();
                 if (uid > 0) {
@@ -534,13 +535,13 @@ public class AdvancedChangesetQueryPanel extends JPanel {
                 } else
                     throw new IllegalStateException(tr("Current value ''{0}'' for user ID is not valid", tfUid.getText()));
             } else if (rbRestrictToUserName.isSelected()) {
-                if (! valUserName.isValid())
-                    throw new IllegalStateException(tr("Cannot restrict the changeset query to the user name ''{0}''", tfUserName.getText()));
+                if (!valUserName.isValid())
+                    throw new IllegalStateException(
+                            tr("Cannot restrict the changeset query to the user name ''{0}''", tfUserName.getText()));
                 query.forUser(tfUserName.getText());
             }
         }
 
-
         public boolean isValidChangesetQuery() {
             if (rbRestrictToUid.isSelected())
                 return valUid.isValid();
@@ -655,23 +656,23 @@ public class AdvancedChangesetQueryPanel extends JPanel {
             GridBagConstraints gc = new GridBagConstraints();
             gc.fill = GridBagConstraints.HORIZONTAL;
             gc.weightx = 0.0;
-            gc.insets = new Insets(0,0,0,3);
+            gc.insets = new Insets(0, 0, 0, 3);
             pnl.add(new JLabel(tr("Date: ")), gc);
 
             gc.gridx = 1;
             gc.weightx = 0.7;
-            pnl.add(tfClosedAfterDate1 = new JosmTextField(),gc);
+            pnl.add(tfClosedAfterDate1 = new JosmTextField(), gc);
             SelectAllOnFocusGainedDecorator.decorate(tfClosedAfterDate1);
             valClosedAfterDate1 = DateValidator.decorate(tfClosedAfterDate1);
             tfClosedAfterDate1.setToolTipText(valClosedAfterDate1.getStandardTooltipTextAsHtml());
 
             gc.gridx = 2;
             gc.weightx = 0.0;
-            pnl.add(new JLabel(tr("Time:")),gc);
+            pnl.add(new JLabel(tr("Time:")), gc);
 
             gc.gridx = 3;
             gc.weightx = 0.3;
-            pnl.add(tfClosedAfterTime1 = new JosmTextField(),gc);
+            pnl.add(tfClosedAfterTime1 = new JosmTextField(), gc);
             SelectAllOnFocusGainedDecorator.decorate(tfClosedAfterTime1);
             valClosedAfterTime1 = TimeValidator.decorate(tfClosedAfterTime1);
             tfClosedAfterTime1.setToolTipText(valClosedAfterTime1.getStandardTooltipTextAsHtml());
@@ -683,28 +684,28 @@ public class AdvancedChangesetQueryPanel extends JPanel {
             GridBagConstraints gc = new GridBagConstraints();
             gc.fill = GridBagConstraints.HORIZONTAL;
             gc.weightx = 0.0;
-            gc.insets = new Insets(0,0,0,3);
+            gc.insets = new Insets(0, 0, 0, 3);
             pnl.add(new JLabel(tr("Closed after - ")), gc);
 
             gc.gridx = 1;
             gc.fill = GridBagConstraints.HORIZONTAL;
             gc.weightx = 0.0;
-            gc.insets = new Insets(0,0,0,3);
+            gc.insets = new Insets(0, 0, 0, 3);
             pnl.add(new JLabel(tr("Date:")), gc);
 
             gc.gridx = 2;
             gc.weightx = 0.7;
-            pnl.add(tfClosedAfterDate2 = new JosmTextField(),gc);
+            pnl.add(tfClosedAfterDate2 = new JosmTextField(), gc);
             SelectAllOnFocusGainedDecorator.decorate(tfClosedAfterDate2);
             valClosedAfterDate2 = DateValidator.decorate(tfClosedAfterDate2);
             tfClosedAfterDate2.setToolTipText(valClosedAfterDate2.getStandardTooltipTextAsHtml());
             gc.gridx = 3;
             gc.weightx = 0.0;
-            pnl.add(new JLabel(tr("Time:")),gc);
+            pnl.add(new JLabel(tr("Time:")), gc);
 
             gc.gridx = 4;
             gc.weightx = 0.3;
-            pnl.add(tfClosedAfterTime2 = new JosmTextField(),gc);
+            pnl.add(tfClosedAfterTime2 = new JosmTextField(), gc);
             SelectAllOnFocusGainedDecorator.decorate(tfClosedAfterTime2);
             valClosedAfterTime2 = TimeValidator.decorate(tfClosedAfterTime2);
             tfClosedAfterTime2.setToolTipText(valClosedAfterTime2.getStandardTooltipTextAsHtml());
@@ -713,29 +714,29 @@ public class AdvancedChangesetQueryPanel extends JPanel {
             gc.gridx = 0;
             gc.fill = GridBagConstraints.HORIZONTAL;
             gc.weightx = 0.0;
-            gc.insets = new Insets(0,0,0,3);
+            gc.insets = new Insets(0, 0, 0, 3);
             pnl.add(new JLabel(tr("Created before - ")), gc);
 
             gc.gridx = 1;
             gc.fill = GridBagConstraints.HORIZONTAL;
             gc.weightx = 0.0;
-            gc.insets = new Insets(0,0,0,3);
+            gc.insets = new Insets(0, 0, 0, 3);
             pnl.add(new JLabel(tr("Date:")), gc);
 
             gc.gridx = 2;
             gc.weightx = 0.7;
-            pnl.add(tfCreatedBeforeDate = new JosmTextField(),gc);
+            pnl.add(tfCreatedBeforeDate = new JosmTextField(), gc);
             SelectAllOnFocusGainedDecorator.decorate(tfCreatedBeforeDate);
             valCreatedBeforeDate = DateValidator.decorate(tfCreatedBeforeDate);
             tfCreatedBeforeDate.setToolTipText(valCreatedBeforeDate.getStandardTooltipTextAsHtml());
 
             gc.gridx = 3;
             gc.weightx = 0.0;
-            pnl.add(new JLabel(tr("Time:")),gc);
+            pnl.add(new JLabel(tr("Time:")), gc);
 
             gc.gridx = 4;
             gc.weightx = 0.3;
-            pnl.add(tfCreatedBeforeTime = new JosmTextField(),gc);
+            pnl.add(tfCreatedBeforeTime = new JosmTextField(), gc);
             SelectAllOnFocusGainedDecorator.decorate(tfCreatedBeforeTime);
             valCreatedBeforeTime = TimeValidator.decorate(tfCreatedBeforeTime);
             tfCreatedBeforeTime.setToolTipText(valCreatedBeforeDate.getStandardTooltipTextAsHtml());
@@ -746,10 +747,10 @@ public class AdvancedChangesetQueryPanel extends JPanel {
         protected void build() {
             setLayout(new GridBagLayout());
             setBorder(BorderFactory.createCompoundBorder(
-                    BorderFactory.createEmptyBorder(3,3,3,3),
+                    BorderFactory.createEmptyBorder(3, 3, 3, 3),
                     BorderFactory.createCompoundBorder(
                             BorderFactory.createLineBorder(Color.GRAY),
-                            BorderFactory.createEmptyBorder(5,5,5,5)
+                            BorderFactory.createEmptyBorder(5, 5, 5, 5)
                     )
             ));
 
@@ -758,20 +759,20 @@ public class AdvancedChangesetQueryPanel extends JPanel {
             GridBagConstraints gc = new GridBagConstraints();
             gc.anchor = GridBagConstraints.NORTHWEST;
             gc.gridx = 0;
-            gc.fill= GridBagConstraints.HORIZONTAL;
+            gc.fill = GridBagConstraints.HORIZONTAL;
             gc.weightx = 0.0;
             add(rbClosedAfter = new JRadioButton(), gc);
 
             gc.gridx = 1;
-            gc.fill =  GridBagConstraints.HORIZONTAL;
+            gc.fill = GridBagConstraints.HORIZONTAL;
             gc.weightx = 1.0;
             add(new JMultilineLabel(tr("Only changesets closed after the following date/time")), gc);
 
             gc.gridx = 1;
             gc.gridy = 1;
-            gc.fill =  GridBagConstraints.HORIZONTAL;
+            gc.fill = GridBagConstraints.HORIZONTAL;
             gc.weightx = 1.0;
-            add(buildClosedAfterInputPanel(),gc);
+            add(buildClosedAfterInputPanel(), gc);
 
             // -- changesets closed after a specific date/time and created before a specific date time
             //
@@ -779,20 +780,20 @@ public class AdvancedChangesetQueryPanel extends JPanel {
             gc.anchor = GridBagConstraints.NORTHWEST;
             gc.gridy = 2;
             gc.gridx = 0;
-            gc.fill= GridBagConstraints.HORIZONTAL;
+            gc.fill = GridBagConstraints.HORIZONTAL;
             gc.weightx = 0.0;
             add(rbClosedAfterAndCreatedBefore = new JRadioButton(), gc);
 
             gc.gridx = 1;
-            gc.fill =  GridBagConstraints.HORIZONTAL;
+            gc.fill = GridBagConstraints.HORIZONTAL;
             gc.weightx = 1.0;
             add(new JMultilineLabel(tr("Only changesets closed after and created before a specific date/time")), gc);
 
             gc.gridx = 1;
             gc.gridy = 3;
-            gc.fill =  GridBagConstraints.HORIZONTAL;
+            gc.fill = GridBagConstraints.HORIZONTAL;
             gc.weightx = 1.0;
-            add(buildClosedAfterAndCreatedBeforeInputPanel(),gc);
+            add(buildClosedAfterAndCreatedBeforeInputPanel(), gc);
 
             ButtonGroup bg = new ButtonGroup();
             bg.add(rbClosedAfter);
@@ -875,7 +876,6 @@ public class AdvancedChangesetQueryPanel extends JPanel {
             );
         }
 
-
         public void rememberSettings() {
             String prefRoot = "changeset-query.advanced.time-restrictions";
             if (rbClosedAfter.isSelected()) {
@@ -929,10 +929,10 @@ public class AdvancedChangesetQueryPanel extends JPanel {
     private static class BBoxRestrictionPanel extends BoundingBoxSelectionPanel {
         public BBoxRestrictionPanel() {
             setBorder(BorderFactory.createCompoundBorder(
-                    BorderFactory.createEmptyBorder(3,3,3,3),
+                    BorderFactory.createEmptyBorder(3, 3, 3, 3),
                     BorderFactory.createCompoundBorder(
                             BorderFactory.createLineBorder(Color.GRAY),
-                            BorderFactory.createEmptyBorder(5,5,5,5)
+                            BorderFactory.createEmptyBorder(5, 5, 5, 5)
                     )
             ));
         }
@@ -983,7 +983,7 @@ public class AdvancedChangesetQueryPanel extends JPanel {
         @Override
         public void validate() {
             String value  = getComponent().getText();
-            if (value == null || value.trim().length() == 0) {
+            if (value == null || value.trim().isEmpty()) {
                 feedbackInvalid("");
                 return;
             }
@@ -993,7 +993,7 @@ public class AdvancedChangesetQueryPanel extends JPanel {
                     feedbackInvalid(tr("The current value is not a valid user ID. Please enter an integer value > 0"));
                     return;
                 }
-            } catch(NumberFormatException e) {
+            } catch (NumberFormatException e) {
                 feedbackInvalid(tr("The current value is not a valid user ID. Please enter an integer value > 0"));
                 return;
             }
@@ -1002,12 +1002,12 @@ public class AdvancedChangesetQueryPanel extends JPanel {
 
         public int getUid() {
             String value  = getComponent().getText();
-            if (value == null || value.trim().length() == 0) return 0;
+            if (value == null || value.trim().isEmpty()) return 0;
             try {
                 int uid = Integer.parseInt(value.trim());
                 if (uid > 0) return uid;
                 return 0;
-            } catch(NumberFormatException e) {
+            } catch (NumberFormatException e) {
                 return 0;
             }
         }
@@ -1024,13 +1024,13 @@ public class AdvancedChangesetQueryPanel extends JPanel {
 
         @Override
         public boolean isValid() {
-            return getComponent().getText().trim().length() > 0;
+            return !getComponent().getText().trim().isEmpty();
         }
 
         @Override
         public void validate() {
             String value  = getComponent().getText();
-            if (value.trim().length() == 0) {
+            if (value.trim().isEmpty()) {
                 feedbackInvalid(tr("<html>The  current value is not a valid user name.<br>Please enter an non-empty user name.</html>"));
                 return;
             }
@@ -1096,6 +1096,9 @@ public class AdvancedChangesetQueryPanel extends JPanel {
                     return df.parse(getComponent().getText());
                 } catch (ParseException e) {
                     // Try next format
+                    if (Main.isTraceEnabled()) {
+                        Main.trace(e.getMessage());
+                    }
                 }
             }
             return null;
@@ -1119,7 +1122,7 @@ public class AdvancedChangesetQueryPanel extends JPanel {
 
         @Override
         public boolean isValid() {
-            if (getComponent().getText().trim().length() == 0) return true;
+            if (getComponent().getText().trim().isEmpty()) return true;
             return getDate() != null;
         }
 
@@ -1156,13 +1159,13 @@ public class AdvancedChangesetQueryPanel extends JPanel {
         }
 
         public Date getDate() {
-            if (getComponent().getText().trim().length() == 0)
+            if (getComponent().getText().trim().isEmpty())
                 return null;
 
             for (int style : new int[]{DateFormat.SHORT, DateFormat.MEDIUM, DateFormat.LONG, DateFormat.FULL}) {
                 try {
                     return DateFormat.getTimeInstance(style, Locale.getDefault()).parse(getComponent().getText());
-                } catch(ParseException e) {
+                } catch (ParseException e) {
                     continue;
                 }
             }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/query/BasicChangesetQueryPanel.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/query/BasicChangesetQueryPanel.java
index 1eb737f..1ffa6c5 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/query/BasicChangesetQueryPanel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/query/BasicChangesetQueryPanel.java
@@ -9,7 +9,7 @@ import java.awt.GridBagLayout;
 import java.awt.Insets;
 import java.awt.event.ItemEvent;
 import java.awt.event.ItemListener;
-import java.util.HashMap;
+import java.util.EnumMap;
 import java.util.Map;
 
 import javax.swing.BorderFactory;
@@ -48,8 +48,8 @@ public class BasicChangesetQueryPanel extends JPanel {
         JPanel pnl = new JPanel(new GridBagLayout());
 
         ButtonGroup bgQueries = new ButtonGroup();
-        rbQueries = new HashMap<>();
-        lblQueries = new HashMap<>();
+        rbQueries = new EnumMap<>(BasicQuery.class);
+        lblQueries = new EnumMap<>(BasicQuery.class);
         SelectQueryHandler selectedQueryHandler = new SelectQueryHandler();
         for (BasicQuery q: BasicQuery.values()) {
             JRadioButton rb = new JRadioButton();
@@ -63,7 +63,7 @@ public class BasicChangesetQueryPanel extends JPanel {
         // -- most recent changes
         gc.fill = GridBagConstraints.NONE;
         gc.anchor = GridBagConstraints.NORTHWEST;
-        gc.insets = new Insets(0,0,5,3);
+        gc.insets = new Insets(0, 0, 5, 3);
         pnl.add(rbQueries.get(BasicQuery.MOST_RECENT_CHANGESETS), gc);
 
         gc.gridx = 1;
@@ -99,17 +99,18 @@ public class BasicChangesetQueryPanel extends JPanel {
         gc.gridx = 0;
         gc.gridy = 3;
         gc.gridwidth = 2;
-        gc.insets = new Insets(5,0,3,3);
+        gc.insets = new Insets(5, 0, 3, 3);
         gc.fill = GridBagConstraints.HORIZONTAL;
         gc.weightx = 1.0;
         pnl.add(cbMyChangesetsOnly = new JCheckBox(tr("Download my changesets only")), gc);
-        cbMyChangesetsOnly.setToolTipText(tr("<html>Select to restrict the query to your changesets only.<br>Unselect to include all changesets in the query.</html>"));
+        cbMyChangesetsOnly.setToolTipText(
+                tr("<html>Select to restrict the query to your changesets only.<br>Unselect to include all changesets in the query.</html>"));
 
         // grab remaining space
         gc.gridx = 0;
         gc.gridy = 4;
         gc.gridwidth = 2;
-        gc.insets = new Insets(5,0,3,3);
+        gc.insets = new Insets(5, 0, 3, 3);
         gc.fill = GridBagConstraints.BOTH;
         gc.weightx = 1.0;
         gc.weighty = 1.0;
@@ -129,8 +130,8 @@ public class BasicChangesetQueryPanel extends JPanel {
     }
 
     protected final void build() {
-        setLayout(new BorderLayout(0,5));
-        setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        setLayout(new BorderLayout(0, 5));
+        setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
         add(buildInfoPanel(), BorderLayout.NORTH);
         add(buildQueriesPanel(), BorderLayout.CENTER);
     }
@@ -151,7 +152,8 @@ public class BasicChangesetQueryPanel extends JPanel {
         lbl = lblQueries.get(BasicQuery.MY_OPEN_CHANGESETS);
         if (JosmUserIdentityManager.getInstance().isAnonymous()) {
             rbQueries.get(BasicQuery.MY_OPEN_CHANGESETS).setEnabled(false);
-            lbl.setText(tr("<html>Download my open changesets<br><em>Disabled. Please enter your OSM user name in the preferences first.</em></html>"));
+            lbl.setText(tr("<html>Download my open changesets<br><em>Disabled. " +
+                    "Please enter your OSM user name in the preferences first.</em></html>"));
         } else {
             rbQueries.get(BasicQuery.MY_OPEN_CHANGESETS).setEnabled(true);
             lbl.setText(tr("<html>Download my open changesets</html>"));
@@ -162,7 +164,8 @@ public class BasicChangesetQueryPanel extends JPanel {
         lbl = lblQueries.get(BasicQuery.CHANGESETS_IN_MAP_VIEW);
         if (!Main.isDisplayingMapView()) {
             rbQueries.get(BasicQuery.CHANGESETS_IN_MAP_VIEW).setEnabled(false);
-            lbl.setText(tr("<html>Download changesets in the current map view.<br><em>Disabled. There is currently no map view active.</em></html>"));
+            lbl.setText(tr("<html>Download changesets in the current map view.<br><em>Disabled. " +
+                    "There is currently no map view active.</em></html>"));
         } else {
             rbQueries.get(BasicQuery.CHANGESETS_IN_MAP_VIEW).setEnabled(true);
             lbl.setText(tr("<html>Download changesets in the current map view</html>"));
@@ -189,8 +192,9 @@ public class BasicChangesetQueryPanel extends JPanel {
         } else {
             try {
                 q = BasicQuery.valueOf(BasicQuery.class, value);
-            } catch(IllegalArgumentException e) {
-                Main.warn(tr("Unexpected value for preference ''{0}'', got ''{1}''. Resetting to default query.","changeset-query.basic.query", value));
+            } catch (IllegalArgumentException e) {
+                Main.warn(tr("Unexpected value for preference ''{0}'', got ''{1}''. Resetting to default query.",
+                        "changeset-query.basic.query", value));
                 q = BasicQuery.MOST_RECENT_CHANGESETS;
             }
         }
@@ -252,7 +256,7 @@ public class BasicChangesetQueryPanel extends JPanel {
                 cbMyChangesetsOnly.setSelected(true);
                 cbMyChangesetsOnly.setEnabled(false);
             } else {
-                if (! cbMyChangesetsOnly.isEnabled()) {
+                if (!cbMyChangesetsOnly.isEnabled()) {
                     cbMyChangesetsOnly.setEnabled(true);
                 }
             }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/query/ChangesetQueryDialog.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/query/ChangesetQueryDialog.java
index f338bb8..04a66de 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/query/ChangesetQueryDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/query/ChangesetQueryDialog.java
@@ -144,7 +144,7 @@ public class ChangesetQueryDialog extends JDialog {
                     getClass().getName() + ".geometry",
                     WindowGeometry.centerInWindow(
                             getParent(),
-                            new Dimension(400,400)
+                            new Dimension(400, 400)
                     )
             ).applySafe(this);
             setCanceled(false);
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/query/ChangesetQueryTask.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/query/ChangesetQueryTask.java
index 5b955cd..4021805 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/query/ChangesetQueryTask.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/query/ChangesetQueryTask.java
@@ -32,7 +32,7 @@ import org.xml.sax.SAXException;
 
 /**
  * Asynchronous task to send a changeset query to the OSM API.
- *
+ * @since 2689
  */
 public class ChangesetQueryTask extends PleaseWaitRunnable implements ChangesetDownloadTask{
 
@@ -56,7 +56,7 @@ public class ChangesetQueryTask extends PleaseWaitRunnable implements ChangesetD
      * @throws IllegalArgumentException if query is null.
      */
     public ChangesetQueryTask(ChangesetQuery query) {
-        super(tr("Querying and downloading changesets",false /* don't ignore exceptions */));
+        super(tr("Querying and downloading changesets"), false /* don't ignore exceptions */);
         CheckParameterUtil.ensureParameterNotNull(query, "query");
         this.query = query;
     }
@@ -79,12 +79,12 @@ public class ChangesetQueryTask extends PleaseWaitRunnable implements ChangesetD
     @Override
     protected void cancel() {
         canceled = true;
-        synchronized(this) {
+        synchronized (this) {
             if (userInfoReader != null) {
                 userInfoReader.cancel();
             }
         }
-        synchronized(this) {
+        synchronized (this) {
             if (changesetReader != null) {
                 changesetReader.cancel();
             }
@@ -125,13 +125,13 @@ public class ChangesetQueryTask extends PleaseWaitRunnable implements ChangesetD
         } else {
             try {
                 SwingUtilities.invokeAndWait(r);
-            } catch(InterruptedException e) {
+            } catch (InterruptedException e) {
                 Main.warn("InterruptedException in "+getClass().getSimpleName()+" while updating changeset cache");
-            } catch(InvocationTargetException e) {
+            } catch (InvocationTargetException e) {
                 Throwable t = e.getTargetException();
                 if (t instanceof RuntimeException) {
                     BugReportExceptionHandler.handleException(t);
-                } else if (t instanceof Exception){
+                } else if (t instanceof Exception) {
                     ExceptionUtil.explainException(e);
                 } else {
                     BugReportExceptionHandler.handleException(t);
@@ -148,11 +148,11 @@ public class ChangesetQueryTask extends PleaseWaitRunnable implements ChangesetD
     protected void fullyIdentifyCurrentUser() throws OsmTransferException {
         getProgressMonitor().indeterminateSubTask(tr("Determine user id for current user..."));
 
-        synchronized(this) {
+        synchronized (this) {
             userInfoReader = new OsmServerUserInfoReader();
         }
-        UserInfo info = userInfoReader.fetchUserInfo(getProgressMonitor().createSubTaskMonitor(1,false));
-        synchronized(this) {
+        UserInfo info = userInfoReader.fetchUserInfo(getProgressMonitor().createSubTaskMonitor(1, false));
+        synchronized (this) {
             userInfoReader = null;
         }
         JosmUserIdentityManager im = JosmUserIdentityManager.getInstance();
@@ -165,28 +165,27 @@ public class ChangesetQueryTask extends PleaseWaitRunnable implements ChangesetD
             JosmUserIdentityManager im = JosmUserIdentityManager.getInstance();
             if (query.isRestrictedToPartiallyIdentifiedUser() && im.isCurrentUser(query.getUserName())) {
                 // if we query changesets for the current user, make sure we query against
-                // its user id, not its user name. If necessary, determine the user id
-                // first.
+                // its user id, not its user name. If necessary, determine the user id first.
                 //
-                if (im.isPartiallyIdentified() ) {
+                if (im.isPartiallyIdentified()) {
                     fullyIdentifyCurrentUser();
                 }
                 query = query.forUser(JosmUserIdentityManager.getInstance().getUserId());
             }
             if (canceled) return;
             getProgressMonitor().indeterminateSubTask(tr("Query and download changesets ..."));
-            synchronized(this) {
-                changesetReader= new OsmServerChangesetReader();
+            synchronized (this) {
+                changesetReader = new OsmServerChangesetReader();
             }
             downloadedChangesets = new HashSet<>();
             downloadedChangesets.addAll(changesetReader.queryChangesets(query, getProgressMonitor().createSubTaskMonitor(0, false)));
             synchronized (this) {
                 changesetReader = null;
             }
-        } catch(OsmTransferCanceledException e) {
+        } catch (OsmTransferCanceledException e) {
             // thrown if user cancel the authentication dialog
             canceled = true;
-        }  catch(OsmTransferException e) {
+        }  catch (OsmTransferException e) {
             if (canceled)
                 return;
             this.lastException = e;
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/query/UrlBasedQueryPanel.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/query/UrlBasedQueryPanel.java
index 52677a8..48d357c 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/query/UrlBasedQueryPanel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/query/UrlBasedQueryPanel.java
@@ -39,7 +39,7 @@ public class UrlBasedQueryPanel extends JPanel {
         GridBagConstraints gc = new GridBagConstraints();
         gc.weightx = 0.0;
         gc.fill = GridBagConstraints.HORIZONTAL;
-        gc.insets  = new Insets(0,0,0,5);
+        gc.insets  = new Insets(0, 0, 0, 5);
         pnl.add(new JLabel(tr("URL: ")), gc);
 
         gc.gridx = 1;
@@ -60,7 +60,7 @@ public class UrlBasedQueryPanel extends JPanel {
         gc.weightx = 0.0;
         gc.fill = GridBagConstraints.HORIZONTAL;
         pnl.add(lblValid = new JLabel(), gc);
-        lblValid.setPreferredSize(new Dimension(20,20));
+        lblValid.setPreferredSize(new Dimension(20, 20));
         return pnl;
     }
 
@@ -95,24 +95,24 @@ public class UrlBasedQueryPanel extends JPanel {
 
     protected final void build() {
         setLayout(new GridBagLayout());
-        setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
 
         GridBagConstraints gc = new GridBagConstraints();
         gc.weightx = 1.0;
         gc.fill = GridBagConstraints.HORIZONTAL;
-        gc.insets = new Insets(0,0,10,0);
-        add(buildHelpPanel(),gc);
+        gc.insets = new Insets(0, 0, 10, 0);
+        add(buildHelpPanel(), gc);
 
         gc.gridy = 1;
         gc.weightx = 1.0;
         gc.fill = GridBagConstraints.HORIZONTAL;
-        add(buildURLPanel(),gc);
+        add(buildURLPanel(), gc);
 
         gc.gridy = 2;
         gc.weightx = 1.0;
         gc.weighty = 1.0;
         gc.fill = GridBagConstraints.BOTH;
-        add(new JPanel(),gc);
+        add(new JPanel(), gc);
     }
 
     /**
@@ -130,12 +130,12 @@ public class UrlBasedQueryPanel extends JPanel {
         URL url = null;
         try {
             url = new URL(text);
-        } catch(MalformedURLException e) {
+        } catch (MalformedURLException e) {
             return null;
         }
         String path = url.getPath();
         String query = url.getQuery();
-        if (path == null || ! path.endsWith("/changesets")) return null;
+        if (path == null || !path.endsWith("/changesets")) return null;
 
         try {
             return ChangesetQuery.buildFromUrlQuery(query);
@@ -165,9 +165,10 @@ public class UrlBasedQueryPanel extends JPanel {
      */
     class ChangetQueryUrlValidator implements DocumentListener {
         protected String getCurrentFeedback() {
-            String fb = (String)lblValid.getClientProperty("valid");
+            String fb = (String) lblValid.getClientProperty("valid");
             return fb == null ? "none" : fb;
         }
+
         protected void feedbackValid() {
             if ("valid".equals(getCurrentFeedback())) return;
             lblValid.setIcon(ImageProvider.get("dialogs", "valid"));
@@ -200,6 +201,7 @@ public class UrlBasedQueryPanel extends JPanel {
                 feedbackInvalid();
             }
         }
+
         @Override
         public void changedUpdate(DocumentEvent e) {
             validate();
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/query/package-info.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/query/package-info.java
new file mode 100644
index 0000000..0b2bd04
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/query/package-info.java
@@ -0,0 +1,6 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Provides classes allowing to query changesets to the OSM API.
+ */
+package org.openstreetmap.josm.gui.dialogs.changeset.query;
diff --git a/src/org/openstreetmap/josm/gui/dialogs/package-info.java b/src/org/openstreetmap/josm/gui/dialogs/package-info.java
new file mode 100644
index 0000000..395e164
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/dialogs/package-info.java
@@ -0,0 +1,11 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Provides three kinds of dialogs:
+ * <ul>
+ * <li>Toggle dialogs on the right side of the GUI, that can be turned on, off, attached or detached from the GUI</li>
+ * <li>Changeset dialog based on a standalone implementation, dedicated to OSM changesets management</li>
+ * <li>Extended dialogs for everything else</li>
+ * </ul>
+ */
+package org.openstreetmap.josm.gui.dialogs;
diff --git a/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesCellRenderer.java b/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesCellRenderer.java
index a4ba456..23f5a32 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesCellRenderer.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesCellRenderer.java
@@ -9,6 +9,7 @@ import java.awt.Color;
 import java.awt.Component;
 import java.awt.Font;
 import java.util.Map;
+import java.util.Objects;
 
 import javax.swing.JLabel;
 import javax.swing.JTable;
@@ -29,7 +30,8 @@ public class PropertiesCellRenderer extends DefaultTableCellRenderer {
         if (OsmPrimitive.getDiscardableKeys().contains(key)) {
             if (isSelected) {
                 c.setForeground(Main.pref.getColor(marktr("Discardable key: selection Foreground"), Color.GRAY));
-                c.setBackground(Main.pref.getColor(marktr("Discardable key: selection Background"), defaults.getColor("Table.selectionBackground")));
+                c.setBackground(Main.pref.getColor(marktr("Discardable key: selection Background"),
+                        defaults.getColor("Table.selectionBackground")));
             } else {
                 c.setForeground(Main.pref.getColor(marktr("Discardable key: foreground"), Color.GRAY));
                 c.setBackground(Main.pref.getColor(marktr("Discardable key: background"), defaults.getColor("Table.background")));
@@ -39,8 +41,8 @@ public class PropertiesCellRenderer extends DefaultTableCellRenderer {
             c.setBackground(defaults.getColor("Table."+(isSelected ? "selectionB" : "b")+"ackground"));
         }
     }
-    
-    @Override 
+
+    @Override
     public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
         Component c = super.getTableCellRendererComponent(table, value, isSelected, false, row, column);
         if (value == null)
@@ -52,32 +54,33 @@ public class PropertiesCellRenderer extends DefaultTableCellRenderer {
             } else if (value instanceof Map<?, ?>) {
                 Map<?, ?> v = (Map<?, ?>) value;
                 if (v.size() != 1) {    // Multiple values: give user a short summary of the values
-                    Integer blank_count;
-                    Integer other_count;
+                    Integer blankCount;
+                    Integer otherCount;
                     if (v.get("") == null) {
-                        blank_count = 0;
-                        other_count = v.size();
+                        blankCount = 0;
+                        otherCount = v.size();
                     } else {
-                        blank_count = (Integer)v.get("");
-                        other_count = v.size()-1;
+                        blankCount = (Integer) v.get("");
+                        otherCount = v.size()-1;
                     }
-                    str = "<";
-                    if (other_count == 1) {
+                    StringBuilder sb = new StringBuilder("<");
+                    if (otherCount == 1) {
                         for (Map.Entry<?, ?> entry : v.entrySet()) { // Find the non-blank value in the map
-                            if ( entry.getKey() != "") {
+                            if (!Objects.equals(entry.getKey(), "")) {
                                 /* I18n: properties display partial string joined with comma, frst is count, second is value */
-                                str += tr("{0} ''{1}''", entry.getValue().toString(), entry.getKey());
+                                sb.append(tr("{0} ''{1}''", entry.getValue().toString(), entry.getKey()));
                             }
                         }
                     } else {
                         /* I18n: properties display partial string joined with comma */
-                        str += trn("{0} different", "{0} different", other_count, other_count);
+                        sb.append(trn("{0} different", "{0} different", otherCount, otherCount));
                     }
-                    if(blank_count > 0) {
+                    if (blankCount > 0) {
                         /* I18n: properties display partial string joined with comma */
-                        str += trn(", {0} unset", ", {0} unset", blank_count, blank_count);
+                        sb.append(trn(", {0} unset", ", {0} unset", blankCount, blankCount));
                     }
-                    str += ">";
+                    sb.append('>');
+                    str = sb.toString();
                     c.setFont(c.getFont().deriveFont(Font.ITALIC));
 
                 } else {                // One value: display the value
@@ -85,8 +88,8 @@ public class PropertiesCellRenderer extends DefaultTableCellRenderer {
                     str = (String) entry.getKey();
                 }
             }
-            ((JLabel)c).putClientProperty("html.disable", Boolean.TRUE); // Fix #8730
-            ((JLabel)c).setText(str);
+            ((JLabel) c).putClientProperty("html.disable", Boolean.TRUE); // Fix #8730
+            ((JLabel) c).setText(str);
             if (Main.pref.getBoolean("display.discardable-keys", false)) {
                 String key = null;
                 if (column == 0) {
diff --git a/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java b/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
index 64287df..62b7c99 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
@@ -74,6 +74,7 @@ import org.openstreetmap.josm.data.osm.event.DataSetListenerAdapter;
 import org.openstreetmap.josm.data.osm.event.DatasetEventManager;
 import org.openstreetmap.josm.data.osm.event.DatasetEventManager.FireMode;
 import org.openstreetmap.josm.data.osm.event.SelectionEventManager;
+import org.openstreetmap.josm.data.preferences.StringProperty;
 import org.openstreetmap.josm.gui.ConditionalOptionPaneUtil;
 import org.openstreetmap.josm.gui.DefaultNameFormatter;
 import org.openstreetmap.josm.gui.ExtendedDialog;
@@ -116,7 +117,8 @@ import org.openstreetmap.josm.tools.Utils;
  *
  * @author imi
  */
-public class PropertiesDialog extends ToggleDialog implements SelectionChangedListener, MapView.EditLayerChangeListener, DataSetListenerAdapter.Listener {
+public class PropertiesDialog extends ToggleDialog
+implements SelectionChangedListener, MapView.EditLayerChangeListener, DataSetListenerAdapter.Listener {
 
     /**
      * hook for roadsigns plugin to display a small button in the upper right corner of this dialog
@@ -164,6 +166,7 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
 
     private final transient DataSetListenerAdapter dataChangedAdapter = new DataSetListenerAdapter(this);
     private final HelpAction helpAction = new HelpAction();
+    private final TaginfoAction taginfoAction = new TaginfoAction();
     private final PasteValueAction pasteValueAction = new PasteValueAction();
     private final CopyValueAction copyValueAction = new CopyValueAction();
     private final CopyKeyValueAction copyKeyValueAction = new CopyKeyValueAction();
@@ -181,12 +184,13 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
     private final SelectRelationAction addRelationToSelectionAction = new SelectRelationAction(true);
 
     private final DownloadMembersAction downloadMembersAction = new DownloadMembersAction();
-    private final DownloadSelectedIncompleteMembersAction downloadSelectedIncompleteMembersAction = new DownloadSelectedIncompleteMembersAction();
+    private final DownloadSelectedIncompleteMembersAction downloadSelectedIncompleteMembersAction =
+            new DownloadSelectedIncompleteMembersAction();
 
     private final SelectMembersAction selectMembersAction = new SelectMembersAction(false);
     private final SelectMembersAction addMembersToSelectionAction = new SelectMembersAction(true);
 
-    private final transient HighlightHelper highlightHelper= new HighlightHelper();
+    private final transient HighlightHelper highlightHelper = new HighlightHelper();
 
     /**
      * The Add button (needed to be able to disable it)
@@ -223,8 +227,6 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
         }
     };
 
-    // <editor-fold defaultstate="collapsed" desc="Dialog construction and helper methods">
-
     /**
      * Create a new PropertiesDialog
      */
@@ -244,17 +246,17 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
         // combine both tables and wrap them in a scrollPane
         boolean top = Main.pref.getBoolean("properties.presets.top", true);
         bothTables.setLayout(new GridBagLayout());
-        if(top) {
+        if (top) {
             bothTables.add(presets, GBC.std().fill(GBC.HORIZONTAL).insets(5, 2, 5, 2).anchor(GBC.NORTHWEST));
             double epsilon = Double.MIN_VALUE; // need to set a weight or else anchor value is ignored
-            bothTables.add(pluginHook, GBC.eol().insets(0,1,1,1).anchor(GBC.NORTHEAST).weight(epsilon, epsilon));
+            bothTables.add(pluginHook, GBC.eol().insets(0, 1, 1, 1).anchor(GBC.NORTHEAST).weight(epsilon, epsilon));
         }
         bothTables.add(selectSth, GBC.eol().fill().insets(10, 10, 10, 10));
         bothTables.add(tagTable.getTableHeader(), GBC.eol().fill(GBC.HORIZONTAL));
         bothTables.add(tagTable, GBC.eol().fill(GBC.BOTH));
         bothTables.add(membershipTable.getTableHeader(), GBC.eol().fill(GBC.HORIZONTAL));
         bothTables.add(membershipTable, GBC.eol().fill(GBC.BOTH));
-        if(!top) {
+        if (!top) {
             bothTables.add(presets, GBC.eol().fill(GBC.HORIZONTAL).insets(5, 2, 5, 2));
         }
 
@@ -285,7 +287,7 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
 
     private void buildTagsTable() {
         // setting up the tags table
-        tagData.setColumnIdentifiers(new String[]{tr("Key"),tr("Value")});
+        tagData.setColumnIdentifiers(new String[]{tr("Key"), tr("Value")});
         tagTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
         tagTable.getTableHeader().setReorderingAllowed(false);
 
@@ -295,7 +297,7 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
     }
 
     private void buildMembershipTable() {
-        membershipData.setColumnIdentifiers(new String[]{tr("Member Of"),tr("Role"),tr("Position")});
+        membershipData.setColumnIdentifiers(new String[]{tr("Member Of"), tr("Role"), tr("Position")});
         membershipTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
 
         TableColumnModel mod = membershipTable.getColumnModel();
@@ -307,8 +309,8 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
                 if (value == null)
                     return this;
                 if (c instanceof JLabel) {
-                    JLabel label = (JLabel)c;
-                    Relation r = (Relation)value;
+                    JLabel label = (JLabel) c;
+                    Relation r = (Relation) value;
                     label.setText(r.getDisplayName(DefaultNameFormatter.getInstance()));
                     if (r.isDisabledAndHidden()) {
                         label.setFont(label.getFont().deriveFont(Font.ITALIC));
@@ -324,7 +326,7 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
                 if (value == null)
                     return this;
                 Component c = super.getTableCellRendererComponent(table, value, isSelected, false, row, column);
-                boolean isDisabledAndHidden = (((Relation)table.getValueAt(row, 0))).isDisabledAndHidden();
+                boolean isDisabledAndHidden = ((Relation) table.getValueAt(row, 0)).isDisabledAndHidden();
                 if (c instanceof JLabel) {
                     JLabel label = (JLabel) c;
                     label.setText(((MemberInfo) value).getRoleString());
@@ -340,9 +342,9 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
             @Override public Component getTableCellRendererComponent(JTable table, Object value,
                     boolean isSelected, boolean hasFocus, int row, int column) {
                 Component c = super.getTableCellRendererComponent(table, value, isSelected, false, row, column);
-                boolean isDisabledAndHidden = (((Relation)table.getValueAt(row, 0))).isDisabledAndHidden();
+                boolean isDisabledAndHidden = ((Relation) table.getValueAt(row, 0)).isDisabledAndHidden();
                 if (c instanceof JLabel) {
-                    JLabel label = (JLabel)c;
+                    JLabel label = (JLabel) c;
                     label.setText(((MemberInfo) table.getValueAt(row, 1)).getPositionString());
                     if (isDisabledAndHidden) {
                         label.setFont(label.getFont().deriveFont(Font.ITALIC));
@@ -396,6 +398,7 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
         membershipMenuHandler.addAction(downloadSelectedIncompleteMembersAction);
         membershipMenu.addSeparator();
         membershipMenu.add(helpAction);
+        membershipMenu.add(taginfoAction);
 
         membershipTable.addMouseListener(new PopupMenuLauncher(membershipMenu) {
             @Override
@@ -414,7 +417,7 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
                 //update highlights
                 if (Main.isDisplayingMapView()) {
                     int row = membershipTable.rowAtPoint(e.getPoint());
-                    if (row>=0) {
+                    if (row >= 0) {
                         if (highlightHelper.highlightOnly((Relation) membershipTable.getValueAt(row, 0))) {
                             Main.map.mapView.repaint();
                         }
@@ -449,6 +452,7 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
         tagMenu.add(searchActionSame);
         tagMenu.addSeparator();
         tagMenu.add(helpAction);
+        tagMenu.add(taginfoAction);
         tagTable.addMouseListener(new PopupMenuLauncher(tagMenu));
     }
 
@@ -460,15 +464,15 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
         // ENTER = editAction, open "edit" dialog
         tagTable.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
                 .put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "onTableEnter");
-        tagTable.getActionMap().put("onTableEnter",editAction);
+        tagTable.getActionMap().put("onTableEnter", editAction);
         membershipTable.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
-                .put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0),"onTableEnter");
-        membershipTable.getActionMap().put("onTableEnter",editAction);
+                .put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "onTableEnter");
+        membershipTable.getActionMap().put("onTableEnter", editAction);
 
         // INSERT button = addAction, open "add tag" dialog
         tagTable.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
-                .put(KeyStroke.getKeyStroke(KeyEvent.VK_INSERT, 0),"onTableInsert");
-        tagTable.getActionMap().put("onTableInsert",addAction);
+                .put(KeyStroke.getKeyStroke(KeyEvent.VK_INSERT, 0), "onTableInsert");
+        tagTable.getActionMap().put("onTableInsert", addAction);
 
         // unassign some standard shortcuts for JTable to allow upload / download / image browsing
         InputMapUtils.unassignCtrlShiftUpDown(tagTable, JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
@@ -478,15 +482,15 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
         tagTable.setTransferHandler(null);
 
         tagTable.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
-                .put(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK),"onCopy");
-        tagTable.getActionMap().put("onCopy",copyKeyValueAction);
+                .put(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK), "onCopy");
+        tagTable.getActionMap().put("onCopy", copyKeyValueAction);
 
         // allow using enter to add tags for all look&feel configurations
         InputMapUtils.enableEnter(this.btnAdd);
 
         // DEL button = deleteAction
         getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(
-                KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0),"delete"
+                KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0), "delete"
                 );
         getActionMap().put("delete", deleteAction);
 
@@ -500,10 +504,10 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
      * This simply fires up an {@link RelationEditor} for the relation shown; everything else
      * is the editor's business.
      *
-     * @param row
+     * @param row position
      */
     private void editMembership(int row) {
-        Relation relation = (Relation)membershipData.getValueAt(row, 0);
+        Relation relation = (Relation) membershipData.getValueAt(row, 0);
         Main.map.relationListDialog.selectRelation(relation);
         RelationEditor.getEditor(
                 Main.main.getEditLayer(),
@@ -513,7 +517,7 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
     }
 
     private int findRow(TableModel model, Object value) {
-        for (int i=0; i<model.getRowCount(); i++) {
+        for (int i = 0; i < model.getRowCount(); i++) {
             if (model.getValueAt(i, 0).equals(value))
                 return i;
         }
@@ -528,10 +532,6 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
         selectionChanged(null);
     }
 
-   // </editor-fold>
-
-    // <editor-fold defaultstate="collapsed" desc="Event listeners methods">
-
     @Override
     public void showNotify() {
         DatasetEventManager.getInstance().addDatasetListener(dataChangedAdapter, FireMode.IN_EDT_CONSOLIDATED);
@@ -594,10 +594,10 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
         Relation selectedRelation = null;
         selectedTag = editHelper.getChangedKey(); // select last added or last edited key by default
         if (selectedTag == null && tagTable.getSelectedRowCount() == 1) {
-            selectedTag = (String)tagData.getValueAt(tagTable.getSelectedRow(), 0);
+            selectedTag = (String) tagData.getValueAt(tagTable.getSelectedRow(), 0);
         }
         if (membershipTable.getSelectedRowCount() == 1) {
-            selectedRelation = (Relation)membershipData.getValueAt(membershipTable.getSelectedRow(), 0);
+            selectedRelation = (Relation) membershipData.getValueAt(membershipTable.getSelectedRow(), 0);
         }
 
         // re-load tag data
@@ -646,7 +646,7 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
                 if (ref instanceof Relation && !ref.isIncomplete() && !ref.isDeleted()) {
                     Relation r = (Relation) ref;
                     MemberInfo mi = roles.get(r);
-                    if(mi == null) {
+                    if (mi == null) {
                         mi = new MemberInfo(newSel);
                     }
                     roles.put(r, mi);
@@ -694,14 +694,14 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
             tagTable.changeSelection(selectedIndex, 0, false, false);
         } else if (selectedRelation != null && (selectedIndex = findRow(membershipData, selectedRelation)) != -1) {
             membershipTable.changeSelection(selectedIndex, 0, false, false);
-        } else if(hasTags) {
+        } else if (hasTags) {
             tagTable.changeSelection(0, 0, false, false);
-        } else if(hasMemberships) {
+        } else if (hasMemberships) {
             membershipTable.changeSelection(0, 0, false, false);
         }
 
-        if(tagData.getRowCount() != 0 || membershipData.getRowCount() != 0) {
-            if(newSel.size() > 1) {
+        if (tagData.getRowCount() != 0 || membershipData.getRowCount() != 0) {
+            if (newSel.size() > 1) {
                 setTitle(tr("Objects: {2} / Tags: {0} / Memberships: {1}",
                     tagData.getRowCount(), membershipData.getRowCount(), newSel.size()));
             } else {
@@ -732,10 +732,6 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
         updateSelection();
     }
 
-    // </editor-fold>
-
-    // <editor-fold defaultstate="collapsed" desc="Methods that are called by plugins to extend fuctionality ">
-
     /**
      * Replies the tag popup menu handler.
      * @return The tag popup menu handler
@@ -775,14 +771,13 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
         return row > -1 ? (IRelation) membershipData.getValueAt(row, 0) : null;
     }
 
-    // </editor-fold>
-
-     /**
+    /**
      * Class that watches for mouse clicks
      * @author imi
      */
     public class MouseClickWatch extends MouseAdapter {
-        @Override public void mouseClicked(MouseEvent e) {
+        @Override
+        public void mouseClicked(MouseEvent e) {
             if (e.getClickCount() < 2) {
                 // single click, clear selection in other table not clicked in
                 if (e.getSource() == tagTable) {
@@ -790,12 +785,11 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
                 } else if (e.getSource() == membershipTable) {
                     tagTable.clearSelection();
                 }
-            }
-            // double click, edit or add tag
-            else if (e.getSource() == tagTable) {
+            } else if (e.getSource() == tagTable) {
+                // double click, edit or add tag
                 int row = tagTable.rowAtPoint(e.getPoint());
                 if (row > -1) {
-                    boolean focusOnKey = (tagTable.columnAtPoint(e.getPoint()) == 0);
+                    boolean focusOnKey = tagTable.columnAtPoint(e.getPoint()) == 0;
                     editHelper.editTag(row, focusOnKey);
                 } else {
                     editHelper.addTag();
@@ -806,13 +800,14 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
                 if (row > -1) {
                     editMembership(row);
                 }
-            }
-            else {
+            } else {
                 editHelper.addTag();
                 btnAdd.requestFocusInWindow();
             }
         }
-        @Override public void mousePressed(MouseEvent e) {
+
+        @Override
+        public void mousePressed(MouseEvent e) {
             if (e.getSource() == tagTable) {
                 membershipTable.clearSelection();
             } else if (e.getSource() == membershipTable) {
@@ -880,10 +875,13 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
      * Class that allows fast creation of read-only table model with String columns
      */
     public static class ReadOnlyTableModel extends DefaultTableModel {
-        @Override public boolean isCellEditable(int row, int column) {
+        @Override
+        public boolean isCellEditable(int row, int column) {
             return false;
         }
-        @Override public Class<?> getColumnClass(int columnIndex) {
+
+        @Override
+        public Class<?> getColumnClass(int columnIndex) {
             return String.class;
         }
     }
@@ -902,7 +900,7 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
             updateEnabledState();
         }
 
-        protected void deleteTags(int[] rows){
+        protected void deleteTags(int[] rows) {
             // convert list of rows to HashMap (and find gap for nextKey)
             Map<String, String> tags = new HashMap<>(rows.length);
             int nextKeyIndex = rows[0];
@@ -925,7 +923,7 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
                     // gap found
                     nextKeyIndex++;
                 }
-                nextKey = (String)tagData.getValueAt(nextKeyIndex, 0);
+                nextKey = (String) tagData.getValueAt(nextKeyIndex, 0);
             }
 
             Collection<OsmPrimitive> sel = Main.main.getInProgressSelection();
@@ -938,12 +936,12 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
         }
 
         protected void deleteFromRelation(int row) {
-            Relation cur = (Relation)membershipData.getValueAt(row, 0);
+            Relation cur = (Relation) membershipData.getValueAt(row, 0);
 
             Relation nextRelation = null;
             int rowCount = membershipTable.getRowCount();
             if (rowCount > 1) {
-                nextRelation = (Relation)membershipData.getValueAt((row + 1 < rowCount ? row + 1 : row - 1), 0);
+                nextRelation = (Relation) membershipData.getValueAt(row + 1 < rowCount ? row + 1 : row - 1, 0);
             }
 
             ExtendedDialog ed = new ExtendedDialog(Main.parent,
@@ -954,7 +952,7 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
             ed.toggleEnable(DELETE_FROM_RELATION_PREF);
             ed.showDialog();
 
-            if(ed.getValue() != 1)
+            if (ed.getValue() != 1)
                 return;
 
             Relation rel = new Relation(cur);
@@ -978,7 +976,7 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
                 ConditionalOptionPaneUtil.startBulkOperation(DELETE_FROM_RELATION_PREF);
                 int[] rows = membershipTable.getSelectedRows();
                 // delete from last relation to conserve row numbers in the table
-                for (int i=rows.length-1; i>=0; i--) {
+                for (int i = rows.length-1; i >= 0; i--) {
                     deleteFromRelation(rows[i]);
                 }
                 ConditionalOptionPaneUtil.endBulkOperation(DELETE_FROM_RELATION_PREF);
@@ -1083,7 +1081,7 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
                     uris.add(new URI(String.format("%sMap_Features", base)));
                 } else if (membershipTable.getSelectedRowCount() == 1) {
                     row = membershipTable.getSelectedRow();
-                    String type = ((Relation)membershipData.getValueAt(row, 0)).get("type");
+                    String type = ((Relation) membershipData.getValueAt(row, 0)).get("type");
                     if (type != null) {
                         type = Utils.encodeUrl(type);
                     }
@@ -1101,14 +1099,14 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
                     uris.add(new URI(String.format("%sMap_Features", base)));
                 }
 
-                Main.worker.execute(new Runnable(){
+                Main.worker.execute(new Runnable() {
                     @Override public void run() {
                         try {
                             // find a page that actually exists in the wiki
                             HttpURLConnection conn;
                             for (URI u : uris) {
                                 conn = Utils.openHttpConnection(u.toURL());
-                                conn.setConnectTimeout(Main.pref.getInteger("socket.timeout.connect",15)*1000);
+                                conn.setConnectTimeout(Main.pref.getInteger("socket.timeout.connect", 15)*1000);
 
                                 if (conn.getResponseCode() != 200) {
                                     Main.info("{0} does not exist", u);
@@ -1122,7 +1120,7 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
                                                 .replace("=", "%3D") /* do not URLencode whole string! */
                                                 .replaceFirst("/wiki/", "/w/index.php?redirect=no&title=")
                                                 ).toURL());
-                                        conn.setConnectTimeout(Main.pref.getInteger("socket.timeout.connect",15)*1000);
+                                        conn.setConnectTimeout(Main.pref.getInteger("socket.timeout.connect", 15)*1000);
                                     }
 
                                     /* redirect pages have different content length, but retrieving a "nonredirect"
@@ -1152,6 +1150,38 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
         }
     }
 
+    class TaginfoAction extends JosmAction {
+
+        final StringProperty TAGINFO_URL_PROP = new StringProperty("taginfo.url", "https://taginfo.openstreetmap.org/");
+
+        public TaginfoAction() {
+            super(tr("Go to Taginfo"), "dialogs/taginfo", tr("Launch browser with Taginfo statistics for selected object"), null, false);
+        }
+
+        @Override
+        @SuppressWarnings("unchecked")
+        public void actionPerformed(ActionEvent e) {
+            final String url;
+            if (tagTable.getSelectedRowCount() == 1) {
+                final int row = tagTable.getSelectedRow();
+                final String key = Utils.encodeUrl(tagData.getValueAt(row, 0).toString());
+                Map<String, Integer> values = (Map<String, Integer>) tagData.getValueAt(row, 1);
+                if (values.size() == 1) {
+                    url = TAGINFO_URL_PROP.get() + "tags/" + key /* do not URL encode key, otherwise addr:street does not work */
+                            + "=" + Utils.encodeUrl(values.keySet().iterator().next());
+                } else {
+                    url = TAGINFO_URL_PROP.get() + "keys/" + key; /* do not URL encode key, otherwise addr:street does not work */
+                }
+            } else if (membershipTable.getSelectedRowCount() == 1) {
+                final String type = ((Relation) membershipData.getValueAt(membershipTable.getSelectedRow(), 0)).get("type");
+                url = TAGINFO_URL_PROP.get() + "relations/" + type;
+            } else {
+                return;
+            }
+            OpenBrowser.displayUrl(url);
+        }
+    }
+
     class PasteValueAction extends AbstractAction {
         public PasteValueAction() {
             putValue(NAME, tr("Paste Value"));
@@ -1187,7 +1217,7 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
                 if (sel.isEmpty())
                     return;
                 for (OsmPrimitive p : sel) {
-                    Collection<String> s = getString(p,key);
+                    Collection<String> s = getString(p, key);
                     if (s != null) {
                         values.addAll(s);
                     }
@@ -1201,6 +1231,9 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
 
     class CopyValueAction extends AbstractCopyAction {
 
+        /**
+         * Constructs a new {@code CopyValueAction}.
+         */
         public CopyValueAction() {
             putValue(NAME, tr("Copy Value"));
             putValue(SHORT_DESCRIPTION, tr("Copy the value of the selected tag to clipboard"));
@@ -1283,7 +1316,7 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
                 } else if (p instanceof Relation) {
                     t = "type:relation ";
                 }
-                s.append(sep).append("(").append(t).append("\"").append(
+                s.append(sep).append('(').append(t).append('"').append(
                         org.openstreetmap.josm.actions.search.SearchAction.escapeStringForSearch(key)).append("\"=\"").append(
                         org.openstreetmap.josm.actions.search.SearchAction.escapeStringForSearch(val)).append("\")");
                 sep = " OR ";
diff --git a/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java b/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java
index 6f050d2..d4f7dc3 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java
@@ -152,13 +152,13 @@ class TagEditHelper {
         if (sel == null || sel.isEmpty()) return;
 
         String key = tagData.getValueAt(row, 0).toString();
-        objKey=key;
+        objKey = key;
 
         @SuppressWarnings("unchecked")
         final EditTagDialog editDialog = new EditTagDialog(key,
                 (Map<String, Integer>) tagData.getValueAt(row, 1), focusOnKey);
         editDialog.showDialog();
-        if (editDialog.getValue() !=1 ) return;
+        if (editDialog.getValue() != 1) return;
         editDialog.performTagEdit();
     }
 
@@ -210,7 +210,7 @@ class TagEditHelper {
      */
     public void saveTagsIfNeeded() {
         if (PROPERTY_REMEMBER_TAGS.get() && !recentTags.isEmpty()) {
-            List<String> c = new ArrayList<>( recentTags.size()*2 );
+            List<String> c = new ArrayList<>(recentTags.size()*2);
             for (Tag t: recentTags.keySet()) {
                 c.add(t.getKey());
                 c.add(t.getValue());
@@ -257,11 +257,11 @@ class TagEditHelper {
                 }
             };
 
-        private transient ListCellRenderer<AutoCompletionListItem> cellRenderer = new ListCellRenderer<AutoCompletionListItem>() {
+        private final transient ListCellRenderer<AutoCompletionListItem> cellRenderer = new ListCellRenderer<AutoCompletionListItem>() {
             private final DefaultListCellRenderer def = new DefaultListCellRenderer();
             @Override
             public Component getListCellRendererComponent(JList<? extends AutoCompletionListItem> list,
-                    AutoCompletionListItem value, int index, boolean isSelected,  boolean cellHasFocus){
+                    AutoCompletionListItem value, int index, boolean isSelected,  boolean cellHasFocus) {
                 Component c = def.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
                 if (c instanceof JLabel) {
                     String str = value.getValue();
@@ -279,8 +279,8 @@ class TagEditHelper {
         };
 
         private EditTagDialog(String key, Map<String, Integer> map, final boolean initialFocusOnKey) {
-            super(Main.parent, trn("Change value?", "Change values?", map.size()), new String[] {tr("OK"),tr("Cancel")});
-            setButtonIcons(new String[] {"ok","cancel"});
+            super(Main.parent, trn("Change value?", "Change values?", map.size()), new String[] {tr("OK"), tr("Cancel")});
+            setButtonIcons(new String[] {"ok", "cancel"});
             setCancelButton(2);
             configureContextsensitiveHelp("/Dialog/EditValue", true /* show help button */);
             this.key = key;
@@ -306,7 +306,7 @@ class TagEditHelper {
             keys.setEditable(true);
             keys.setSelectedItem(key);
 
-            p.add(Box.createVerticalStrut(5),GBC.eol());
+            p.add(Box.createVerticalStrut(5), GBC.eol());
             p.add(new JLabel(tr("Key")), GBC.std());
             p.add(Box.createHorizontalStrut(10), GBC.std());
             p.add(keys, GBC.eol().fill(GBC.HORIZONTAL));
@@ -314,7 +314,7 @@ class TagEditHelper {
             List<AutoCompletionListItem> valueList = autocomplete.getValues(getAutocompletionKeys(key));
             Collections.sort(valueList, usedValuesAwareComparator);
 
-            final String selection= m.size()!=1?tr("<different>"):m.entrySet().iterator().next().getKey();
+            final String selection = m.size() != 1 ? tr("<different>") : m.entrySet().iterator().next().getKey();
 
             values = new AutoCompletingComboBox(selection);
             values.setRenderer(cellRenderer);
@@ -323,7 +323,7 @@ class TagEditHelper {
             values.setPossibleACItems(valueList);
             values.setSelectedItem(selection);
             values.getEditor().setItem(selection);
-            p.add(Box.createVerticalStrut(5),GBC.eol());
+            p.add(Box.createVerticalStrut(5), GBC.eol());
             p.add(new JLabel(tr("Value")), GBC.std());
             p.add(Box.createHorizontalStrut(10), GBC.std());
             p.add(values, GBC.eol().fill(GBC.HORIZONTAL));
@@ -415,7 +415,8 @@ class TagEditHelper {
 
     public static final BooleanProperty PROPERTY_FIX_TAG_LOCALE = new BooleanProperty("properties.fix-tag-combobox-locale", false);
     public static final BooleanProperty PROPERTY_REMEMBER_TAGS = new BooleanProperty("properties.remember-recently-added-tags", true);
-    public static final IntegerProperty PROPERTY_RECENT_TAGS_NUMBER = new IntegerProperty("properties.recently-added-tags", DEFAULT_LRU_TAGS_NUMBER);
+    public static final IntegerProperty PROPERTY_RECENT_TAGS_NUMBER = new IntegerProperty("properties.recently-added-tags",
+            DEFAULT_LRU_TAGS_NUMBER);
 
     abstract class AbstractTagsDialog extends ExtendedDialog {
         protected AutoCompletingComboBox keys;
@@ -467,8 +468,8 @@ class TagEditHelper {
         private void selectACComboBoxSavingUnixBuffer(AutoCompletingComboBox cb) {
             // select combobox with saving unix system selection (middle mouse paste)
             Clipboard sysSel = Toolkit.getDefaultToolkit().getSystemSelection();
-            if(sysSel != null) {
-                Transferable old = sysSel.getContents(null);
+            if (sysSel != null) {
+                Transferable old = Utils.getTransferableContent(sysSel);
                 cb.requestFocusInWindow();
                 cb.getEditor().selectAll();
                 sysSel.setContents(old, null);
@@ -495,7 +496,7 @@ class TagEditHelper {
         */
         protected FocusAdapter addFocusAdapter(final AutoCompletionManager autocomplete, final Comparator<AutoCompletionListItem> comparator) {
            // get the combo box' editor component
-           JTextComponent editor = (JTextComponent)values.getEditor().getEditorComponent();
+           JTextComponent editor = (JTextComponent) values.getEditor().getEditorComponent();
            // Refresh the values model when focus is gained
            FocusAdapter focus = new FocusAdapter() {
                @Override
@@ -504,10 +505,12 @@ class TagEditHelper {
 
                    List<AutoCompletionListItem> valueList = autocomplete.getValues(getAutocompletionKeys(key));
                    Collections.sort(valueList, comparator);
-
+                   if (Main.isDebugEnabled()) {
+                       Main.debug("Focus gained by {0}, e={1}", values, e);
+                   }
                    values.setPossibleACItems(valueList);
                    values.getEditor().selectAll();
-                   objKey=key;
+                   objKey = key;
                }
            };
            editor.addFocusListener(focus);
@@ -515,12 +518,13 @@ class TagEditHelper {
         }
 
         protected JPopupMenu popupMenu = new JPopupMenu() {
-            private JCheckBoxMenuItem fixTagLanguageCb = new JCheckBoxMenuItem(
-                new AbstractAction(tr("Use English language for tag by default")){
+            private final JCheckBoxMenuItem fixTagLanguageCb = new JCheckBoxMenuItem(
+                new AbstractAction(tr("Use English language for tag by default")) {
                 @Override
                 public void actionPerformed(ActionEvent e) {
-                    boolean sel=((JCheckBoxMenuItem) e.getSource()).getState();
-                    PROPERTY_FIX_TAG_LOCALE.put(sel);
+                    boolean use = ((JCheckBoxMenuItem) e.getSource()).getState();
+                    PROPERTY_FIX_TAG_LOCALE.put(use);
+                    keys.setFixedLocale(use);
                 }
             });
             {
@@ -531,14 +535,14 @@ class TagEditHelper {
     }
 
     class AddTagsDialog extends AbstractTagsDialog {
-        private transient List<JosmAction> recentTagsActions = new ArrayList<>();
+        private List<JosmAction> recentTagsActions = new ArrayList<>();
 
         // Counter of added commands for possible undo
         private int commandCount;
 
         public AddTagsDialog() {
-            super(Main.parent, tr("Add value?"), new String[] {tr("OK"),tr("Cancel")});
-            setButtonIcons(new String[] {"ok","cancel"});
+            super(Main.parent, tr("Add value?"), new String[] {tr("OK"), tr("Cancel")});
+            setButtonIcons(new String[] {"ok", "cancel"});
             setCancelButton(2);
             configureContextsensitiveHelp("/Dialog/AddValue", true /* show help button */);
 
@@ -547,7 +551,7 @@ class TagEditHelper {
             values = new AutoCompletingComboBox();
 
             mainPanel.add(new JLabel("<html>"+trn("This will change up to {0} object.",
-                "This will change up to {0} objects.", sel.size(),sel.size())
+                "This will change up to {0} objects.", sel.size(), sel.size())
                 +"<br><br>"+tr("Please select a key")), GBC.eol().fill(GBC.HORIZONTAL));
 
             AutoCompletionManager autocomplete = Main.main.getEditLayer().data.getAutoCompletionManager();
@@ -576,11 +580,11 @@ class TagEditHelper {
             keys.setPossibleACItems(keyList);
             keys.setEditable(true);
 
-            mainPanel.add(keys, GBC.eop().fill());
+            mainPanel.add(keys, GBC.eop().fill(GBC.HORIZONTAL));
 
             mainPanel.add(new JLabel(tr("Please select a value")), GBC.eol());
             values.setEditable(true);
-            mainPanel.add(values, GBC.eop().fill());
+            mainPanel.add(values, GBC.eop().fill(GBC.HORIZONTAL));
             if (itemToSelect != null) {
                 keys.setSelectedItem(itemToSelect);
                 if (lastAddValue != null) {
@@ -610,6 +614,7 @@ class TagEditHelper {
 
             suggestRecentlyAddedTags(mainPanel, recentTagsToShow, focus);
 
+            mainPanel.add(Box.createVerticalGlue(), GBC.eop().fill());
             setContent(mainPanel, false);
 
             selectKeysComboBox();
@@ -621,10 +626,10 @@ class TagEditHelper {
                 }
             });
             JCheckBoxMenuItem rememberLastTags = new JCheckBoxMenuItem(
-                new AbstractAction(tr("Remember last used tags after a restart")){
+                new AbstractAction(tr("Remember last used tags after a restart")) {
                 @Override
                 public void actionPerformed(ActionEvent e) {
-                    boolean sel=((JCheckBoxMenuItem) e.getSource()).getState();
+                    boolean sel = ((JCheckBoxMenuItem) e.getSource()).getState();
                     PROPERTY_REMEMBER_TAGS.put(sel);
                     if (sel) saveTagsIfNeeded();
                 }
@@ -633,14 +638,25 @@ class TagEditHelper {
             popupMenu.add(rememberLastTags);
         }
 
+        private String code(String text) {
+            return "<code>" + text + "</code> ";
+        }
+
         @Override
         public void setContentPane(Container contentPane) {
-            final String text = "<html>" + Utils.join("<br>", Arrays.asList(
-                    tr("<code>Ctrl-1</code> to apply first suggestion"),
-                    tr("<code>Shift-Enter</code> to add without closing the dialog"),
-                    tr("<code>Shift-Ctrl-1</code> to add first suggestion without closing the dialog")
-            ));
-            final JLabel helpLabel = new JLabel(text);
+            final int commandDownMask = GuiHelper.getMenuShortcutKeyMaskEx();
+            List<String> lines = new ArrayList<>();
+            Shortcut sc = Shortcut.findShortcut(KeyEvent.VK_1, commandDownMask);
+            if (sc != null) {
+                lines.add(code(sc.getKeyText()) + tr("to apply first suggestion"));
+            }
+            lines.add(code(KeyEvent.getKeyModifiersText(KeyEvent.SHIFT_MASK)+"+"+KeyEvent.getKeyText(KeyEvent.VK_ENTER))
+                    +tr("to add without closing the dialog"));
+            sc = Shortcut.findShortcut(KeyEvent.VK_1, commandDownMask | KeyEvent.SHIFT_DOWN_MASK);
+            if (sc != null) {
+                lines.add(code(sc.getKeyText()) + tr("to add first suggestion without closing the dialog"));
+            }
+            final JLabel helpLabel = new JLabel("<html>" + Utils.join("<br>", lines) + "</html>");
             helpLabel.setFont(helpLabel.getFont().deriveFont(Font.PLAIN));
             contentPane.add(helpLabel, GBC.eol().fill(GridBagConstraints.HORIZONTAL).insets(1, 2, 1, 2));
             super.setContentPane(contentPane);
@@ -653,7 +669,7 @@ class TagEditHelper {
             }
             try {
                 int v = Integer.parseInt(s);
-                if (v>=0 && v<=MAX_LRU_TAGS_NUMBER) {
+                if (v >= 0 && v <= MAX_LRU_TAGS_NUMBER) {
                     PROPERTY_RECENT_TAGS_NUMBER.put(v);
                     return;
                 }
@@ -671,15 +687,19 @@ class TagEditHelper {
 
             int count = 1;
             // We store the maximum number (9) of recent tags to allow dynamic change of number of tags shown in the preferences.
-            // This implies to iterate in descending order, as the oldest elements will only be removed after we reach the maximum numbern and not the number of tags to show.
-            // However, as Set does not allow to iterate in descending order, we need to copy its elements into a List we can access in reverse order.
+            // This implies to iterate in descending order, as the oldest elements will only be removed after we reach the maximum
+            // number and not the number of tags to show.
+            // However, as Set does not allow to iterate in descending order, we need to copy its elements into a List we can access
+            // in reverse order.
             List<Tag> tags = new LinkedList<>(recentTags.keySet());
             for (int i = tags.size()-1; i >= 0 && count <= tagsToShow; i--, count++) {
                 final Tag t = tags.get(i);
                 // Create action for reusing the tag, with keyboard shortcut Ctrl+(1-5)
                 String actionShortcutKey = "properties:recent:"+count;
                 String actionShortcutShiftKey = "properties:recent:shift:"+count;
+                // CHECKSTYLE.OFF: LineLength
                 Shortcut sc = Shortcut.registerShortcut(actionShortcutKey, tr("Choose recent tag {0}", count), KeyEvent.VK_0+count, Shortcut.CTRL);
+                // CHECKSTYLE.ON: LineLength
                 final JosmAction action = new JosmAction(actionShortcutKey, null, tr("Use this tag again"), sc, false) {
                     @Override
                     public void actionPerformed(ActionEvent e) {
@@ -690,7 +710,8 @@ class TagEditHelper {
                         selectValuesCombobox();
                     }
                 };
-                Shortcut scShift = Shortcut.registerShortcut(actionShortcutShiftKey, tr("Apply recent tag {0}", count), KeyEvent.VK_0+count, Shortcut.CTRL_SHIFT);
+                Shortcut scShift = Shortcut.registerShortcut(actionShortcutShiftKey, tr("Apply recent tag {0}", count),
+                        KeyEvent.VK_0+count, Shortcut.CTRL_SHIFT);
                 final JosmAction actionShift = new JosmAction(actionShortcutShiftKey, null, tr("Use this tag again"), scShift, false) {
                     @Override
                     public void actionPerformed(ActionEvent e) {
@@ -745,7 +766,7 @@ class TagEditHelper {
                         public void mouseClicked(MouseEvent e) {
                             action.actionPerformed(null);
                             // add tags and close window on double-click
-                            if (e.getClickCount()>1) {
+                            if (e.getClickCount() > 1) {
                                 buttonAction(0, null); // emulate OK click and close the dialog
                             }
                             // add tags on Shift-Click
diff --git a/src/org/openstreetmap/josm/gui/dialogs/properties/package-info.java b/src/org/openstreetmap/josm/gui/dialogs/properties/package-info.java
new file mode 100644
index 0000000..325e67d
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/dialogs/properties/package-info.java
@@ -0,0 +1,6 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Toggle dialog allowing to display/edit tags and relation memberships of currently selected OSM objects.
+ */
+package org.openstreetmap.josm.gui.dialogs.properties;
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/ChildRelationBrowser.java b/src/org/openstreetmap/josm/gui/dialogs/relation/ChildRelationBrowser.java
index ec05ac6..862fe49 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/ChildRelationBrowser.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/ChildRelationBrowser.java
@@ -93,11 +93,11 @@ public class ChildRelationBrowser extends JPanel {
         pnl.setLayout(new FlowLayout(FlowLayout.LEFT));
 
         // ---
-        DownloadAllChildRelationsAction downloadAction= new DownloadAllChildRelationsAction();
+        DownloadAllChildRelationsAction downloadAction = new DownloadAllChildRelationsAction();
         pnl.add(new JButton(downloadAction));
 
         // ---
-        DownloadSelectedAction downloadSelectedAction= new DownloadSelectedAction();
+        DownloadSelectedAction downloadSelectedAction = new DownloadSelectedAction();
         childTree.addTreeSelectionListener(downloadSelectedAction);
         pnl.add(new JButton(downloadSelectedAction));
 
@@ -160,10 +160,10 @@ public class ChildRelationBrowser extends JPanel {
      */
     protected Dialog getParentDialog() {
         Component c  = this;
-        while(c != null && ! (c instanceof Dialog)) {
+        while (c != null && !(c instanceof Dialog)) {
             c = c.getParent();
         }
-        return (Dialog)c;
+        return (Dialog) c;
     }
 
     /**
@@ -185,12 +185,12 @@ public class ChildRelationBrowser extends JPanel {
         }
 
         public void run() {
-            TreePath [] selection = childTree.getSelectionPaths();
+            TreePath[] selection = childTree.getSelectionPaths();
             if (selection == null || selection.length == 0) return;
             // do not launch more than 10 relation editors in parallel
             //
-            for (int i=0; i < Math.min(selection.length,10);i++) {
-                Relation r = (Relation)selection[i].getLastPathComponent();
+            for (int i = 0; i < Math.min(selection.length, 10); i++) {
+                Relation r = (Relation) selection[i].getLastPathComponent();
                 if (r.isIncomplete()) {
                     continue;
                 }
@@ -224,7 +224,7 @@ public class ChildRelationBrowser extends JPanel {
         }
 
         public void run() {
-            Main.worker.submit(new DownloadAllChildrenTask(getParentDialog(), (Relation)model.getRoot()));
+            Main.worker.submit(new DownloadAllChildrenTask(getParentDialog(), (Relation) model.getRoot()));
         }
 
         @Override
@@ -249,19 +249,19 @@ public class ChildRelationBrowser extends JPanel {
         }
 
         protected void updateEnabledState() {
-            TreePath [] selection = childTree.getSelectionPaths();
+            TreePath[] selection = childTree.getSelectionPaths();
             setEnabled(selection != null && selection.length > 0);
         }
 
         public void run() {
-            TreePath [] selection = childTree.getSelectionPaths();
+            TreePath[] selection = childTree.getSelectionPaths();
             if (selection == null || selection.length == 0)
                 return;
             Set<Relation> relations = new HashSet<>();
             for (TreePath aSelection : selection) {
                 relations.add((Relation) aSelection.getLastPathComponent());
             }
-            Main.worker.submit(new DownloadRelationSetTask(getParentDialog(),relations));
+            Main.worker.submit(new DownloadRelationSetTask(getParentDialog(), relations));
         }
 
         @Override
@@ -292,9 +292,9 @@ public class ChildRelationBrowser extends JPanel {
             OsmApi.getOsmApi().cancel();
         }
 
-        protected void refreshView(Relation relation){
-            for (int i=0; i < childTree.getRowCount(); i++) {
-                Relation reference = (Relation)childTree.getPathForRow(i).getLastPathComponent();
+        protected void refreshView(Relation relation) {
+            for (int i = 0; i < childTree.getRowCount(); i++) {
+                Relation reference = (Relation) childTree.getPathForRow(i).getLastPathComponent();
                 if (reference == relation) {
                     model.refreshNode(childTree.getPathForRow(i));
                 }
@@ -397,7 +397,7 @@ public class ChildRelationBrowser extends JPanel {
         @Override
         protected void realRun() throws SAXException, IOException, OsmTransferException {
             try {
-                while(! relationsToDownload.isEmpty() && !canceled) {
+                while (!relationsToDownload.isEmpty() && !canceled) {
                     Relation r = relationsToDownload.pop();
                     if (r.isNew()) {
                         continue;
@@ -410,7 +410,7 @@ public class ChildRelationBrowser extends JPanel {
                     try {
                         dataSet = reader.parseOsm(progressMonitor
                                 .createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false));
-                    } catch(OsmApiException e) {
+                    } catch (OsmApiException e) {
                         if (e.getResponseCode() == HttpURLConnection.HTTP_GONE) {
                             warnBecauseOfDeletedRelation(r);
                             continue;
@@ -462,7 +462,7 @@ public class ChildRelationBrowser extends JPanel {
         protected void realRun() throws SAXException, IOException, OsmTransferException {
             try {
                 Iterator<Relation> it = relations.iterator();
-                while(it.hasNext() && !canceled) {
+                while (it.hasNext() && !canceled) {
                     Relation r = it.next();
                     if (r.isNew()) {
                         continue;
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/DownloadRelationMemberTask.java b/src/org/openstreetmap/josm/gui/dialogs/relation/DownloadRelationMemberTask.java
index f792be2..59b6236 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/DownloadRelationMemberTask.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/DownloadRelationMemberTask.java
@@ -40,7 +40,7 @@ public class DownloadRelationMemberTask extends PleaseWaitRunnable {
 
     public DownloadRelationMemberTask(Relation parent, Collection<OsmPrimitive> children, OsmDataLayer curLayer, Dialog dialog) {
         super(tr("Download relation members"), new PleaseWaitProgressMonitor(dialog), false /* don't ignore exception */);
-        if(parent != null)
+        if (parent != null)
             this.parents.add(parent);
         this.children = children;
         this.curLayer = curLayer;
@@ -48,7 +48,7 @@ public class DownloadRelationMemberTask extends PleaseWaitRunnable {
 
     public DownloadRelationMemberTask(Relation parent, Collection<OsmPrimitive> children, OsmDataLayer curLayer) {
         super(tr("Download relation members"), false /* don't ignore exception */);
-        if(parent != null)
+        if (parent != null)
             this.parents.add(parent);
         this.children = children;
         this.curLayer = curLayer;
@@ -72,7 +72,7 @@ public class DownloadRelationMemberTask extends PleaseWaitRunnable {
     @Override
     protected void cancel() {
         canceled = true;
-        synchronized(this) {
+        synchronized (this) {
             if (objectReader != null) {
                 objectReader.cancel();
             }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/DownloadRelationTask.java b/src/org/openstreetmap/josm/gui/dialogs/relation/DownloadRelationTask.java
index dc3332d..f99ab8e 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/DownloadRelationTask.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/DownloadRelationTask.java
@@ -52,7 +52,7 @@ public class DownloadRelationTask extends PleaseWaitRunnable {
     @Override
     protected void cancel() {
         canceled = true;
-        synchronized(this) {
+        synchronized (this) {
             if (objectReader != null) {
                 objectReader.cancel();
             }
@@ -72,11 +72,12 @@ public class DownloadRelationTask extends PleaseWaitRunnable {
     protected void realRun() throws SAXException, IOException, OsmTransferException {
         try {
             final DataSet allDownloads = new DataSet();
-            int i=0;
+            int i = 0;
             getProgressMonitor().setTicksCount(relations.size());
             for (Relation relation: relations) {
                 i++;
-                getProgressMonitor().setCustomText(tr("({0}/{1}): Downloading relation ''{2}''...", i,relations.size(),relation.getDisplayName(DefaultNameFormatter.getInstance())));
+                getProgressMonitor().setCustomText(tr("({0}/{1}): Downloading relation ''{2}''...", i, relations.size(),
+                        relation.getDisplayName(DefaultNameFormatter.getInstance())));
                 synchronized (this) {
                     if (canceled) return;
                     objectReader = new OsmServerObjectReader(relation.getPrimitiveId(), true /* full download */);
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java b/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java
index 93f2eda..1fe85a3 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java
@@ -32,6 +32,7 @@ import java.util.Set;
 import javax.swing.AbstractAction;
 import javax.swing.BorderFactory;
 import javax.swing.InputMap;
+import javax.swing.JButton;
 import javax.swing.JComponent;
 import javax.swing.JLabel;
 import javax.swing.JMenu;
@@ -55,6 +56,7 @@ import javax.swing.event.TableModelListener;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.CopyAction;
+import org.openstreetmap.josm.actions.ExpertToggleAction;
 import org.openstreetmap.josm.actions.JosmAction;
 import org.openstreetmap.josm.command.AddCommand;
 import org.openstreetmap.josm.command.ChangeCommand;
@@ -113,6 +115,10 @@ public class GenericRelationEditor extends RelationEditor  {
      * hide on dialog close.
      */
     private JMenuItem windowMenuItem;
+    /**
+     * Button for performing the {@link org.openstreetmap.josm.gui.dialogs.relation.GenericRelationEditor.SortBelowAction}.
+     */
+    private JButton sortBelowButton;
 
     /**
      * Creates a new relation editor for the given relation. The relation will be saved if the user
@@ -215,14 +221,16 @@ public class GenericRelationEditor extends RelationEditor  {
         );
         registerCopyPasteAction(tagEditorPanel.getPasteAction(),
                 "PASTE_TAGS",
+                // CHECKSTYLE.OFF: LineLength
                 Shortcut.registerShortcut("system:pastestyle", tr("Edit: {0}", tr("Paste Tags")), KeyEvent.VK_V, Shortcut.CTRL_SHIFT).getKeyStroke());
+                // CHECKSTYLE.ON: LineLength
         registerCopyPasteAction(new PasteMembersAction(), "PASTE_MEMBERS", Shortcut.getPasteKeyStroke());
         registerCopyPasteAction(new CopyMembersAction(), "COPY_MEMBERS", Shortcut.getCopyKeyStroke());
 
         tagEditorPanel.setNextFocusComponent(memberTable);
         selectionTable.setFocusable(false);
         memberTableModel.setSelectedMembers(selectedMembers);
-        HelpUtil.setHelpContext(getRootPane(),ht("/Dialog/RelationEditor"));
+        HelpUtil.setHelpContext(getRootPane(), ht("/Dialog/RelationEditor"));
     }
 
     /**
@@ -369,7 +377,7 @@ public class GenericRelationEditor extends RelationEditor  {
         );
         tfRole.setEnabled(memberTable.getSelectedRowCount() > 0);
         SideButton btnApply = new SideButton(setRoleAction);
-        btnApply.setPreferredSize(new Dimension(20,20));
+        btnApply.setPreferredSize(new Dimension(20, 20));
         btnApply.setText("");
         p3.add(btnApply);
 
@@ -438,7 +446,7 @@ public class GenericRelationEditor extends RelationEditor  {
      */
     protected JPanel buildSelectionTablePanel() {
         JPanel pnl = new JPanel(new BorderLayout());
-        MemberRoleCellEditor ce = (MemberRoleCellEditor)memberTable.getColumnModel().getColumn(0).getCellEditor();
+        MemberRoleCellEditor ce = (MemberRoleCellEditor) memberTable.getColumnModel().getColumn(0).getCellEditor();
         selectionTable = new SelectionTable(selectionTableModel, new SelectionTableColumnModel(memberTableModel));
         selectionTable.setMemberTableModel(memberTableModel);
         selectionTable.setRowHeight(ce.getEditor().getPreferredSize().height);
@@ -507,6 +515,10 @@ public class GenericRelationEditor extends RelationEditor  {
         SortAction sortAction = new SortAction();
         memberTableModel.addTableModelListener(sortAction);
         tb.add(sortAction);
+        final SortBelowAction sortBelowAction = new SortBelowAction();
+        memberTableModel.addTableModelListener(sortBelowAction);
+        memberTableModel.getSelectionModel().addListSelectionListener(sortBelowAction);
+        sortBelowButton = tb.add(sortBelowAction);
 
         // -- reverse action
         ReverseAction reverseAction = new ReverseAction();
@@ -528,10 +540,10 @@ public class GenericRelationEditor extends RelationEditor  {
         tb.add(downloadSelectedIncompleteMembersAction);
 
         InputMap inputMap = memberTable.getInputMap(MemberTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
-        inputMap.put((KeyStroke) removeSelectedAction.getValue(AbstractAction.ACCELERATOR_KEY),"removeSelected");
-        inputMap.put((KeyStroke) moveUpAction.getValue(AbstractAction.ACCELERATOR_KEY),"moveUp");
-        inputMap.put((KeyStroke) moveDownAction.getValue(AbstractAction.ACCELERATOR_KEY),"moveDown");
-        inputMap.put((KeyStroke) downloadIncompleteMembersAction.getValue(AbstractAction.ACCELERATOR_KEY),"downloadIncomplete");
+        inputMap.put((KeyStroke) removeSelectedAction.getValue(AbstractAction.ACCELERATOR_KEY), "removeSelected");
+        inputMap.put((KeyStroke) moveUpAction.getValue(AbstractAction.ACCELERATOR_KEY), "moveUp");
+        inputMap.put((KeyStroke) moveDownAction.getValue(AbstractAction.ACCELERATOR_KEY), "moveDown");
+        inputMap.put((KeyStroke) downloadIncompleteMembersAction.getValue(AbstractAction.ACCELERATOR_KEY), "downloadIncomplete");
 
         return tb;
     }
@@ -602,8 +614,9 @@ public class GenericRelationEditor extends RelationEditor  {
         }
         super.setVisible(visible);
         if (visible) {
+            sortBelowButton.setVisible(ExpertToggleAction.isExpert());
             RelationDialogManager.getRelationDialogManager().positionOnScreen(this);
-            if(windowMenuItem == null) {
+            if (windowMenuItem == null) {
                 addToWindowMenu();
             }
             tagEditorPanel.requestFocusInWindow();
@@ -614,7 +627,7 @@ public class GenericRelationEditor extends RelationEditor  {
             selectionTableModel.unregister();
             memberTableModel.unregister();
             memberTable.unlinkAsListener();
-            if(windowMenuItem != null) {
+            if (windowMenuItem != null) {
                 Main.main.menu.windowMenu.remove(windowMenuItem);
                 windowMenuItem = null;
             }
@@ -674,17 +687,17 @@ public class GenericRelationEditor extends RelationEditor  {
         }
     }
 
-
     private void registerCopyPasteAction(AbstractAction action, Object actionName, KeyStroke shortcut) {
         int mods = shortcut.getModifiers();
         int code = shortcut.getKeyCode();
-        if (code!=KeyEvent.VK_INSERT && (mods == 0 || mods == InputEvent.SHIFT_DOWN_MASK)) {
+        if (code != KeyEvent.VK_INSERT && (mods == 0 || mods == InputEvent.SHIFT_DOWN_MASK)) {
             Main.info(tr("Sorry, shortcut \"{0}\" can not be enabled in Relation editor dialog"), shortcut);
             return;
         }
         getRootPane().getActionMap().put(actionName, action);
         getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(shortcut, actionName);
-        // Assign also to JTables because they have their own Copy&Paste implementation (which is disabled in this case but eats key shortcuts anyway)
+        // Assign also to JTables because they have their own Copy&Paste implementation
+        // (which is disabled in this case but eats key shortcuts anyway)
         memberTable.getInputMap(JComponent.WHEN_FOCUSED).put(shortcut, actionName);
         memberTable.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(shortcut, actionName);
         memberTable.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(shortcut, actionName);
@@ -829,8 +842,11 @@ public class GenericRelationEditor extends RelationEditor  {
             try {
                 List<OsmPrimitive> toAdd = filterConfirmedPrimitives(selectionTableModel.getSelection());
                 memberTableModel.addMembersAtBeginning(toAdd);
-            } catch(AddAbortException ex) {
+            } catch (AddAbortException ex) {
                 // do nothing
+                if (Main.isTraceEnabled()) {
+                    Main.trace(ex.getMessage());
+                }
             }
         }
 
@@ -856,8 +872,11 @@ public class GenericRelationEditor extends RelationEditor  {
             try {
                 List<OsmPrimitive> toAdd = filterConfirmedPrimitives(selectionTableModel.getSelection());
                 memberTableModel.addMembersAtEnd(toAdd);
-            } catch(AddAbortException ex) {
+            } catch (AddAbortException ex) {
                 // do nothing
+                if (Main.isTraceEnabled()) {
+                    Main.trace(ex.getMessage());
+                }
             }
         }
 
@@ -868,6 +887,9 @@ public class GenericRelationEditor extends RelationEditor  {
     }
 
     class AddSelectedBeforeSelection extends AddFromSelectionAction implements TableModelListener, ListSelectionListener {
+        /**
+         * Constructs a new {@code AddSelectedBeforeSelection}.
+         */
         public AddSelectedBeforeSelection() {
             putValue(SHORT_DESCRIPTION,
                     tr("Add all objects selected in the current dataset before the first selected member"));
@@ -886,10 +908,12 @@ public class GenericRelationEditor extends RelationEditor  {
                 List<OsmPrimitive> toAdd = filterConfirmedPrimitives(selectionTableModel.getSelection());
                 memberTableModel.addMembersBeforeIdx(toAdd, memberTableModel
                         .getSelectionModel().getMinSelectionIndex());
-            } catch(AddAbortException ex) {
+            } catch (AddAbortException ex) {
                 // do nothing
+                if (Main.isTraceEnabled()) {
+                    Main.trace(ex.getMessage());
+                }
             }
-
         }
 
         @Override
@@ -922,8 +946,11 @@ public class GenericRelationEditor extends RelationEditor  {
                 List<OsmPrimitive> toAdd = filterConfirmedPrimitives(selectionTableModel.getSelection());
                 memberTableModel.addMembersAfterIdx(toAdd, memberTableModel
                         .getSelectionModel().getMaxSelectionIndex());
-            } catch(AddAbortException ex) {
+            } catch (AddAbortException ex) {
                 // do nothing
+                if (Main.isTraceEnabled()) {
+                    Main.trace(ex.getMessage());
+                }
             }
         }
 
@@ -939,6 +966,9 @@ public class GenericRelationEditor extends RelationEditor  {
     }
 
     class RemoveSelectedAction extends AbstractAction implements TableModelListener {
+        /**
+         * Constructs a new {@code RemoveSelectedAction}.
+         */
         public RemoveSelectedAction() {
             putValue(SHORT_DESCRIPTION, tr("Remove all members referring to one of the selected objects"));
             putValue(SMALL_ICON, ImageProvider.get("dialogs/relation", "deletemembers"));
@@ -985,7 +1015,8 @@ public class GenericRelationEditor extends RelationEditor  {
             &&  !memberTableModel.getChildPrimitives(getLayer().data.getSelected()).isEmpty();
 
             if (enabled) {
-                putValue(SHORT_DESCRIPTION, tr("Select relation members which refer to {0} objects in the current selection",memberTableModel.getChildPrimitives(getLayer().data.getSelected()).size()));
+                putValue(SHORT_DESCRIPTION, tr("Select relation members which refer to {0} objects in the current selection",
+                        memberTableModel.getChildPrimitives(getLayer().data.getSelected()).size()));
             } else {
                 putValue(SHORT_DESCRIPTION, tr("Select relation members which refer to objects in the current selection"));
             }
@@ -1000,7 +1031,6 @@ public class GenericRelationEditor extends RelationEditor  {
         @Override
         public void tableChanged(TableModelEvent e) {
             updateEnabledState();
-
         }
     }
 
@@ -1058,6 +1088,34 @@ public class GenericRelationEditor extends RelationEditor  {
         }
     }
 
+    class SortBelowAction extends AbstractAction implements TableModelListener, ListSelectionListener {
+        public SortBelowAction() {
+            putValue(SMALL_ICON, ImageProvider.get("dialogs", "sort_below"));
+            putValue(NAME, tr("Sort below"));
+            putValue(SHORT_DESCRIPTION, tr("Sort the selected relation members and all members below"));
+            updateEnabledState();
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            memberTableModel.sortBelow();
+        }
+
+        protected void updateEnabledState() {
+            setEnabled(memberTableModel.getRowCount() > 0 && !memberTableModel.getSelectionModel().isSelectionEmpty());
+        }
+
+        @Override
+        public void tableChanged(TableModelEvent e) {
+            updateEnabledState();
+        }
+
+        @Override
+        public void valueChanged(ListSelectionEvent e) {
+            updateEnabledState();
+        }
+    }
+
     class ReverseAction extends AbstractAction implements TableModelListener {
         public ReverseAction() {
             putValue(SHORT_DESCRIPTION, tr("Reverse the order of the relation members"));
@@ -1209,7 +1267,7 @@ public class GenericRelationEditor extends RelationEditor  {
             // tags, don't add an empty relation
             if (newRelation.getMembersCount() == 0 && !newRelation.hasKeys())
                 return;
-            Main.main.undoRedo.add(new AddCommand(getLayer(),newRelation));
+            Main.main.undoRedo.add(new AddCommand(getLayer(), newRelation));
 
             // make sure everybody is notified about the changes
             //
@@ -1239,7 +1297,7 @@ public class GenericRelationEditor extends RelationEditor  {
             tagEditorPanel.getModel().applyToPrimitive(editedRelation);
             memberTableModel.applyToRelation(editedRelation);
             Conflict<Relation> conflict = new Conflict<>(getRelation(), editedRelation);
-            Main.main.undoRedo.add(new ConflictAddCommand(getLayer(),conflict));
+            Main.main.undoRedo.add(new ConflictAddCommand(getLayer(), conflict));
         }
 
         /**
@@ -1259,7 +1317,7 @@ public class GenericRelationEditor extends RelationEditor  {
         }
 
         protected boolean confirmClosingBecauseOfDirtyState() {
-            ButtonSpec [] options = new ButtonSpec[] {
+            ButtonSpec[] options = new ButtonSpec[] {
                     new ButtonSpec(
                             tr("Yes, create a conflict and close"),
                             ImageProvider.get("ok"),
@@ -1393,7 +1451,7 @@ public class GenericRelationEditor extends RelationEditor  {
             memberTable.stopHighlighting();
             TagEditorModel tagModel = tagEditorPanel.getModel();
             Relation snapshot = getRelationSnapshot();
-            if ( (!memberTableModel.hasSameMembersAs(snapshot) || tagModel.isDirty())
+            if ((!memberTableModel.hasSameMembersAs(snapshot) || tagModel.isDirty())
              && !(snapshot == null && tagModel.getTags().isEmpty())) {
                 //give the user a chance to save the changes
                 int ret = confirmClosingByCancel();
@@ -1424,7 +1482,7 @@ public class GenericRelationEditor extends RelationEditor  {
         }
 
         protected int confirmClosingByCancel() {
-            ButtonSpec [] options = new ButtonSpec[] {
+            ButtonSpec[] options = new ButtonSpec[] {
                     new ButtonSpec(
                             tr("Yes, save the changes and close"),
                             ImageProvider.get("ok"),
@@ -1568,7 +1626,7 @@ public class GenericRelationEditor extends RelationEditor  {
                         + tr("This is equal to deleting the roles of these objects.") +
                         "<br>"
                         + tr("Do you really want to apply the new role?") + "</html>";
-            String [] options = new String[] {
+            String[] options = new String[] {
                     tr("Yes, apply it"),
                     tr("No, do not apply")
             };
@@ -1594,7 +1652,7 @@ public class GenericRelationEditor extends RelationEditor  {
         @Override
         public void actionPerformed(ActionEvent e) {
             if (isEmptyRole()) {
-                if (! confirmSettingEmptyRole(memberTable.getSelectedRowCount()))
+                if (!confirmSettingEmptyRole(memberTable.getSelectedRowCount()))
                     return;
             }
             memberTableModel.updateRole(memberTable.getSelectedRows(), tfRole.getText());
@@ -1722,7 +1780,8 @@ public class GenericRelationEditor extends RelationEditor  {
                 }
 
                 if (hasNewInOtherLayer) {
-                    JOptionPane.showMessageDialog(Main.parent, tr("Members from paste buffer cannot be added because they are not included in current layer"));
+                    JOptionPane.showMessageDialog(Main.parent,
+                            tr("Members from paste buffer cannot be added because they are not included in current layer"));
                     return;
                 }
 
@@ -1737,6 +1796,9 @@ public class GenericRelationEditor extends RelationEditor  {
 
             } catch (AddAbortException ex) {
                 // Do nothing
+                if (Main.isTraceEnabled()) {
+                    Main.trace(ex.getMessage());
+                }
             }
         }
     }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/MemberRoleCellEditor.java b/src/org/openstreetmap/josm/gui/dialogs/relation/MemberRoleCellEditor.java
index e333ea7..842c7f4 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/MemberRoleCellEditor.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/MemberRoleCellEditor.java
@@ -30,7 +30,7 @@ public class MemberRoleCellEditor extends AbstractCellEditor implements TableCel
         this.ds = ds;
         this.relation = relation;
         editor = new AutoCompletingTextField(0, false);
-        editor.setBorder(BorderFactory.createEmptyBorder(1,1,1,1));
+        editor.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
         autoCompletionList = new AutoCompletionList();
         editor.setAutoCompletionList(autoCompletionList);
     }
@@ -39,7 +39,7 @@ public class MemberRoleCellEditor extends AbstractCellEditor implements TableCel
     public Component getTableCellEditorComponent(JTable table,
             Object value, boolean isSelected, int row, int column) {
 
-        String role = (String)value;
+        String role = (String) value;
         editor.setText(role);
         autoCompletionList.clear();
         ds.getAutoCompletionManager().populateWithMemberRoles(autoCompletionList, relation);
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTable.java b/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTable.java
index 45d44c4..b9e066c 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTable.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTable.java
@@ -65,7 +65,7 @@ public class MemberTable extends OsmPrimitivesTable implements IMemberModelListe
      * initialize the table
      */
     protected void init() {
-        MemberRoleCellEditor ce = (MemberRoleCellEditor)getColumnModel().getColumn(0).getCellEditor();
+        MemberRoleCellEditor ce = (MemberRoleCellEditor) getColumnModel().getColumn(0).getCellEditor();
         setRowHeight(ce.getEditor().getPreferredSize().height);
         setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
         setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
@@ -103,9 +103,9 @@ public class MemberTable extends OsmPrimitivesTable implements IMemberModelListe
     }
 
     @Override
-    public Dimension getPreferredSize(){
+    public Dimension getPreferredSize() {
         Container c = getParent();
-        while(c != null && ! (c instanceof JViewport)) {
+        while (c != null && !(c instanceof JViewport)) {
             c = c.getParent();
         }
         if (c != null) {
@@ -135,7 +135,7 @@ public class MemberTable extends OsmPrimitivesTable implements IMemberModelListe
                     SwingUtilities.invokeLater(new Runnable() {
                         @Override
                         public void run() {
-                            if (highlightHelper.highlightOnly(toHighlight)) {
+                            if (Main.isDisplayingMapView() && highlightHelper.highlightOnly(toHighlight)) {
                                 Main.map.mapView.repaint();
                             }
                         }
@@ -281,7 +281,7 @@ public class MemberTable extends OsmPrimitivesTable implements IMemberModelListe
             return getMemberTableModel().getWayConnection(getSelectedRows()[0]);
         }
 
-        private final transient Collection<Direction> connectionTypesOfInterest = Arrays.asList(
+        private final Collection<Direction> connectionTypesOfInterest = Arrays.asList(
                 WayConnectionType.Direction.FORWARD, WayConnectionType.Direction.BACKWARD);
 
         private boolean hasGap() {
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableCellRenderer.java b/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableCellRenderer.java
index 53e1c51..55b61f1 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableCellRenderer.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableCellRenderer.java
@@ -18,10 +18,10 @@ import org.openstreetmap.josm.data.osm.OsmPrimitive;
  */
 public abstract class MemberTableCellRenderer extends JLabel implements TableCellRenderer {
     public static final Color BGCOLOR_EMPTY_ROW = new Color(234, 234, 234);
-    public static final Color BGCOLOR_IN_JOSM_SELECTION = new Color(235,255,177);
+    public static final Color BGCOLOR_IN_JOSM_SELECTION = new Color(235, 255, 177);
 
     public static final Color BGCOLOR_NOT_IN_OPPOSITE = new Color(255, 197, 197);
-    public static final Color BGCOLOR_DOUBLE_ENTRY = new Color(254,226,214);
+    public static final Color BGCOLOR_DOUBLE_ENTRY = new Color(254, 226, 214);
 
     /**
      * constructor
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableLinkedCellRenderer.java b/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableLinkedCellRenderer.java
index 1214276..9c6b1dd 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableLinkedCellRenderer.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableLinkedCellRenderer.java
@@ -33,7 +33,7 @@ public class MemberTableLinkedCellRenderer extends MemberTableCellRenderer {
 
         this.value = (WayConnectionType) value;
         renderForeground(isSelected);
-        setToolTipText(((WayConnectionType)value).getToolTip());
+        setToolTipText(((WayConnectionType) value).getToolTip());
         renderBackground(getModel(table), null, isSelected);
         return this;
     }
@@ -44,13 +44,13 @@ public class MemberTableLinkedCellRenderer extends MemberTableCellRenderer {
         if (value == null || !value.isValid())
             return;
 
-        int ymax=this.getSize().height - 1;
+        int ymax = this.getSize().height - 1;
         int xloop = 10;
         int xowloop = 0;
-        if(value.isOnewayLoopForwardPart) {
+        if (value.isOnewayLoopForwardPart) {
             xowloop = -3;
         }
-        if(value.isOnewayLoopBackwardPart) {
+        if (value.isOnewayLoopBackwardPart) {
             xowloop = 3;
         }
 
@@ -65,7 +65,7 @@ public class MemberTableLinkedCellRenderer extends MemberTableCellRenderer {
 
         if (value.linkPrev) {
             g.setColor(Color.black);
-            if(value.isOnewayHead) {
+            if (value.isOnewayHead) {
                 g.fillRect(xoff - 1, 0, 3, 1);
             } else {
                 g.fillRect(xoff - 1 + xowloop, 0, 3, 1);
@@ -75,13 +75,12 @@ public class MemberTableLinkedCellRenderer extends MemberTableCellRenderer {
             if (value.isLoop) {
                 g.setColor(Color.black);
                 y1 = 5;
-                g.drawImage(corners,xoff,y1-3,xoff+3,y1, 0,0,3,3, new Color(0,0,0,0), null);
-                g.drawImage(corners,xoff+xloop-2,y1-3,xoff+xloop+1,y1, 2,0,5,3, new Color(0,0,0,0), null);
-                g.drawLine(xoff+3,y1-3,xoff+xloop-3,y1-3);
-            }
-            else {
+                g.drawImage(corners, xoff, y1-3, xoff+3, y1, 0, 0, 3, 3, new Color(0, 0, 0, 0), null);
+                g.drawImage(corners, xoff+xloop-2, y1-3, xoff+xloop+1, y1, 2, 0, 5, 3, new Color(0, 0, 0, 0), null);
+                g.drawLine(xoff+3, y1-3, xoff+xloop-3, y1-3);
+            } else {
                 g.setColor(Color.red);
-                if(value.isOnewayHead) {
+                if (value.isOnewayHead) {
                     g.drawRect(xoff-1, p - 3 - w, w, w);
                 } else {
                     g.drawRect(xoff-1 + xowloop, p - 1 - w, w, w);
@@ -92,7 +91,7 @@ public class MemberTableLinkedCellRenderer extends MemberTableCellRenderer {
 
         if (value.linkNext) {
             g.setColor(Color.black);
-            if(value.isOnewayTail) {
+            if (value.isOnewayTail) {
                 g.fillRect(xoff - 1, ymax, 3, 1);
             } else {
                 g.fillRect(xoff - 1 + xowloop, ymax, 3, 1);
@@ -104,12 +103,11 @@ public class MemberTableLinkedCellRenderer extends MemberTableCellRenderer {
                 y2 = ymax - 5;
                 g.fillRect(xoff-1, y2+2, 3, 3);
                 g.drawLine(xoff, y2, xoff, y2+2);
-                g.drawImage(corners,xoff+xloop-2,y2+1,xoff+xloop+1,y2+4, 2,2,5,5, new Color(0,0,0,0), null);
-                g.drawLine(xoff+3-1,y2+3,xoff+xloop-3,y2+3);
-            }
-            else {
+                g.drawImage(corners, xoff+xloop-2, y2+1, xoff+xloop+1, y2+4, 2, 2, 5, 5, new Color(0, 0, 0, 0), null);
+                g.drawLine(xoff+3-1, y2+3, xoff+xloop-3, y2+3);
+            } else {
                 g.setColor(Color.red);
-                if(value.isOnewayTail) {
+                if (value.isOnewayTail) {
                     g.drawRect(xoff-1, ymax - p + 3, w, w);
                 } else {
                     g.drawRect(xoff-1 + xowloop, ymax - p + 1, w, w);
@@ -135,7 +133,7 @@ public class MemberTableLinkedCellRenderer extends MemberTableCellRenderer {
             g.drawLine(xoff + xowloop, y1+1, xoff, 1);
         }
 
-        if(value.isOnewayTail){
+        if (value.isOnewayTail) {
             setDotted(g);
             y2 = ymax - 7;
 
@@ -152,7 +150,7 @@ public class MemberTableLinkedCellRenderer extends MemberTableCellRenderer {
             unsetDotted(g);
         }
 
-        if (!value.isOnewayLoopForwardPart && !value.isOnewayLoopBackwardPart){
+        if (!value.isOnewayLoopForwardPart && !value.isOnewayLoopBackwardPart) {
             g.drawLine(xoff, y1, xoff, y2);
         }
 
@@ -180,20 +178,20 @@ public class MemberTableLinkedCellRenderer extends MemberTableCellRenderer {
         }
 
         if (value.isOnewayLoopBackwardPart && value.isOnewayLoopForwardPart) {
-            if(arrow == arrowDown) {
+            if (arrow == arrowDown) {
                 arrow = arrowUp;
             } else if (arrow == arrowUp) {
                 arrow = arrowDown;
             }
         }
 
-        if ((arrow != null)) {
+        if (arrow != null) {
             g.drawImage(arrow, xoff+xowloop-3, (y1 + y2) / 2 - 2, null);
         }
     }
 
     private void setDotted(Graphics g) {
-        ((Graphics2D)g).setStroke(new BasicStroke(
+        ((Graphics2D) g).setStroke(new BasicStroke(
                 1f,
                 BasicStroke.CAP_BUTT,
                 BasicStroke.CAP_BUTT,
@@ -203,6 +201,6 @@ public class MemberTableLinkedCellRenderer extends MemberTableCellRenderer {
     }
 
     private void unsetDotted(Graphics g) {
-        ((Graphics2D)g).setStroke(new BasicStroke());
+        ((Graphics2D) g).setStroke(new BasicStroke());
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java b/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java
index 605c57b..c228ffb 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java
@@ -43,7 +43,8 @@ import org.openstreetmap.josm.gui.tagging.TaggingPreset;
 import org.openstreetmap.josm.gui.tagging.TaggingPresetType;
 import org.openstreetmap.josm.gui.widgets.OsmPrimitivesTableModel;
 
-public class MemberTableModel extends AbstractTableModel implements TableModelListener, SelectionChangedListener, DataSetListener, OsmPrimitivesTableModel {
+public class MemberTableModel extends AbstractTableModel
+implements TableModelListener, SelectionChangedListener, DataSetListener, OsmPrimitivesTableModel {
 
     /**
      * data of the table model: The list of members and the cached WayConnectionType of each member.
@@ -101,17 +102,21 @@ public class MemberTableModel extends AbstractTableModel implements TableModelLi
     /* --------------------------------------------------------------------------- */
     @Override
     public void dataChanged(DataChangedEvent event) {
-        // just trigger a repaint - the display name of the relation members may
-        // have changed
+        // just trigger a repaint - the display name of the relation members may have changed
         Collection<RelationMember> sel = getSelectedMembers();
         fireTableDataChanged();
         setSelectedMembers(sel);
     }
 
     @Override
-    public void nodeMoved(NodeMovedEvent event) {/* ignore */}
+    public void nodeMoved(NodeMovedEvent event) {
+        // ignore
+    }
+
     @Override
-    public void primitivesAdded(PrimitivesAddedEvent event) {/* ignore */}
+    public void primitivesAdded(PrimitivesAddedEvent event) {
+        // ignore
+    }
 
     @Override
     public void primitivesRemoved(PrimitivesRemovedEvent event) {
@@ -132,7 +137,7 @@ public class MemberTableModel extends AbstractTableModel implements TableModelLi
         // just refresh the respective table cells
         //
         Collection<RelationMember> sel = getSelectedMembers();
-        for (int i=0; i < members.size();i++) {
+        for (int i = 0; i < members.size(); i++) {
             if (members.get(i).getMember() == event.getPrimitive()) {
                 fireTableCellUpdated(i, 1 /* the column with the primitive name */);
             }
@@ -141,10 +146,15 @@ public class MemberTableModel extends AbstractTableModel implements TableModelLi
     }
 
     @Override
-    public void wayNodesChanged(WayNodesChangedEvent event) {/* ignore */}
+    public void wayNodesChanged(WayNodesChangedEvent event) {
+        // ignore
+    }
 
     @Override
-    public void otherDatasetChange(AbstractDatasetChangedEvent event) {/* ignore */}
+    public void otherDatasetChange(AbstractDatasetChangedEvent event) {
+        // ignore
+    }
+
     /* --------------------------------------------------------------------------- */
 
     public void addMemberModelListener(IMemberModelListener listener) {
@@ -166,8 +176,7 @@ public class MemberTableModel extends AbstractTableModel implements TableModelLi
     public void populate(Relation relation) {
         members.clear();
         if (relation != null) {
-            // make sure we work with clones of the relation members
-            // in the model.
+            // make sure we work with clones of the relation members in the model.
             members.addAll(new Relation(relation).getMembers());
         }
         fireTableDataChanged();
@@ -401,7 +410,8 @@ public class MemberTableModel extends AbstractTableModel implements TableModelLi
     }
 
     private void addMembersAtIndex(List<? extends OsmPrimitive> primitives, int index) {
-        final Collection<TaggingPreset> presets = TaggingPreset.getMatchingPresets(EnumSet.of(TaggingPresetType.RELATION), presetHandler.getSelection().iterator().next().getKeys(), false);
+        final Collection<TaggingPreset> presets = TaggingPreset.getMatchingPresets(EnumSet.of(TaggingPresetType.RELATION),
+                presetHandler.getSelection().iterator().next().getKeys(), false);
         if (primitives == null)
             return;
         int idx = index;
@@ -639,10 +649,10 @@ public class MemberTableModel extends AbstractTableModel implements TableModelLi
         if (primitives == null) return;
         getSelectionModel().setValueIsAdjusting(true);
         getSelectionModel().clearSelection();
-        for (int i=0; i< members.size();i++) {
+        for (int i = 0; i < members.size(); i++) {
             RelationMember m = members.get(i);
             if (primitives.contains(m.getMember())) {
-                this.getSelectionModel().addSelectionInterval(i,i);
+                this.getSelectionModel().addSelectionInterval(i, i);
             }
         }
         getSelectionModel().setValueIsAdjusting(false);
@@ -690,7 +700,7 @@ public class MemberTableModel extends AbstractTableModel implements TableModelLi
             List<Integer> selectedIndices = getSelectedIndices();
             newMembers = new ArrayList<>();
             boolean inserted = false;
-            for (int i=0; i < members.size(); i++) {
+            for (int i = 0; i < members.size(); i++) {
                 if (selectedIndices.contains(i)) {
                     if (!inserted) {
                         newMembers.addAll(sortedMembers);
@@ -710,6 +720,17 @@ public class MemberTableModel extends AbstractTableModel implements TableModelLi
         setSelectedMembers(sortedMembers);
     }
 
+    /**
+     * Sort the selected relation members and all members below by the way they are linked.
+     */
+    void sortBelow() {
+        final List<RelationMember> subList = members.subList(getSelectionModel().getMinSelectionIndex(), members.size());
+        final List<RelationMember> sorted = relationSorter.sortMembers(subList);
+        subList.clear();
+        subList.addAll(sorted);
+        fireTableDataChanged();
+        setSelectedMembers(sorted);
+    }
 
     WayConnectionType getWayConnection(int i) {
         if (connectionType == null) {
@@ -739,7 +760,7 @@ public class MemberTableModel extends AbstractTableModel implements TableModelLi
 
             List<RelationMember> newMembers = new ArrayList<>(members);
 
-            for (int i=0; i < selectedIndices.size(); i++) {
+            for (int i = 0; i < selectedIndices.size(); i++) {
                 newMembers.set(selectedIndices.get(i), members.get(selectedIndicesReversed.get(i)));
             }
 
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/ParentRelationLoadingTask.java b/src/org/openstreetmap/josm/gui/dialogs/relation/ParentRelationLoadingTask.java
index 5ba98ea..39b8a0e 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/ParentRelationLoadingTask.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/ParentRelationLoadingTask.java
@@ -72,7 +72,7 @@ public class ParentRelationLoadingTask extends PleaseWaitRunnable{
      * @throws IllegalArgumentException if layer is null
      * @throws IllegalArgumentException if child.getId() == 0
      */
-    public ParentRelationLoadingTask(Relation child, OsmDataLayer layer, boolean full, PleaseWaitProgressMonitor monitor ) {
+    public ParentRelationLoadingTask(Relation child, OsmDataLayer layer, boolean full, PleaseWaitProgressMonitor monitor) {
         super(tr("Download referring relations"), monitor, false /* don't ignore exception */);
         CheckParameterUtil.ensureValidPrimitiveId(child, "child");
         CheckParameterUtil.ensureParameterNotNull(layer, "layer");
@@ -191,7 +191,7 @@ public class ParentRelationLoadingTask extends PleaseWaitRunnable{
                                 JOptionPane.WARNING_MESSAGE
                 );
             }
-        } catch(Exception e) {
+        } catch (Exception e) {
             if (canceled) {
                 Main.warn(tr("Ignoring exception because task was canceled. Exception: {0}", e.toString()));
                 return;
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/ReferringRelationsBrowser.java b/src/org/openstreetmap/josm/gui/dialogs/relation/ReferringRelationsBrowser.java
index baa06c4..ae34d5b 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/ReferringRelationsBrowser.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/ReferringRelationsBrowser.java
@@ -147,7 +147,7 @@ public class ReferringRelationsBrowser extends JPanel {
         }
 
         protected void refreshEnabled() {
-            setEnabled(referrers.getSelectionModel().getMinSelectionIndex() >=0);
+            setEnabled(referrers.getSelectionModel().getMinSelectionIndex() >= 0);
         }
 
         @Override
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/RelationDialogManager.java b/src/org/openstreetmap/josm/gui/dialogs/relation/RelationDialogManager.java
index 1f21cfa..cd5bbeb 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/RelationDialogManager.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/RelationDialogManager.java
@@ -59,6 +59,7 @@ public class RelationDialogManager extends WindowAdapter implements MapView.Laye
             result = prime * result + ((relation == null) ? 0 : relation.hashCode());
             return result;
         }
+
         @Override
         public boolean equals(Object obj) {
             if (this == obj)
@@ -98,7 +99,7 @@ public class RelationDialogManager extends WindowAdapter implements MapView.Laye
     /**
      * constructor
      */
-    public RelationDialogManager(){
+    public RelationDialogManager() {
         openDialogs = new HashMap<>();
     }
     /**
@@ -189,11 +190,11 @@ public class RelationDialogManager extends WindowAdapter implements MapView.Laye
     public void layerRemoved(Layer oldLayer) {
         if (!(oldLayer instanceof OsmDataLayer))
             return;
-        OsmDataLayer dataLayer = (OsmDataLayer)oldLayer;
+        OsmDataLayer dataLayer = (OsmDataLayer) oldLayer;
 
-        Iterator<Entry<DialogContext,RelationEditor>> it = openDialogs.entrySet().iterator();
-        while(it.hasNext()) {
-            Entry<DialogContext,RelationEditor> entry = it.next();
+        Iterator<Entry<DialogContext, RelationEditor>> it = openDialogs.entrySet().iterator();
+        while (it.hasNext()) {
+            Entry<DialogContext, RelationEditor> entry = it.next();
             if (entry.getKey().matchesLayer(dataLayer)) {
                 RelationEditor editor = entry.getValue();
                 it.remove();
@@ -215,8 +216,8 @@ public class RelationDialogManager extends WindowAdapter implements MapView.Laye
 
     @Override
     public void windowClosed(WindowEvent e) {
-        RelationEditor editor = (RelationEditor)e.getWindow();
-        for (Iterator<Entry<DialogContext, RelationEditor>> it = openDialogs.entrySet().iterator(); it.hasNext(); ) {
+        RelationEditor editor = (RelationEditor) e.getWindow();
+        for (Iterator<Entry<DialogContext, RelationEditor>> it = openDialogs.entrySet().iterator(); it.hasNext();) {
             if (editor.equals(it.next().getValue())) {
                 it.remove();
                 break;
@@ -257,7 +258,7 @@ public class RelationDialogManager extends WindowAdapter implements MapView.Laye
         if (editor == null) return;
         if (!openDialogs.isEmpty()) {
             Point corner = editor.getLocation();
-            while(hasEditorWithCloseUpperLeftCorner(corner, editor)) {
+            while (hasEditorWithCloseUpperLeftCorner(corner, editor)) {
                 // shift a little, so that the dialogs are not exactly on top of each other
                 corner.x += 20;
                 corner.y += 20;
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/RelationEditor.java b/src/org/openstreetmap/josm/gui/dialogs/relation/RelationEditor.java
index 513a87f..de17f9f 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/RelationEditor.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/RelationEditor.java
@@ -116,7 +116,7 @@ public abstract class RelationEditor extends ExtendedDialog {
     protected RelationEditor(OsmDataLayer layer, Relation relation, Collection<RelationMember> selectedMembers) {
         super(Main.parent,
                 "",
-                new String[] { tr("Apply Changes"), tr("Cancel")},
+                new String[] {tr("Apply Changes"), tr("Cancel")},
                 false,
                 false
         );
@@ -199,7 +199,7 @@ public abstract class RelationEditor extends ExtendedDialog {
      * @return true if the currently edited relation has been changed elsewhere.
      */
     protected boolean isDirtyRelation() {
-        return ! relation.hasEqualSemanticAttributes(relationSnapshot);
+        return !relation.hasEqualSemanticAttributes(relationSnapshot);
     }
 
     /* ----------------------------------------------------------------------- */
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/RelationTree.java b/src/org/openstreetmap/josm/gui/dialogs/relation/RelationTree.java
index 20bdab8..23b3e04 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/RelationTree.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/RelationTree.java
@@ -45,7 +45,7 @@ public class RelationTree extends JTree {
     /**
      * constructor
      */
-    public RelationTree(){
+    public RelationTree() {
         super();
         build();
     }
@@ -66,10 +66,10 @@ public class RelationTree extends JTree {
      */
     protected Dialog getParentDialog() {
         Component c = RelationTree.this;
-        while(c != null && ! (c instanceof Dialog)) {
+        while (c != null && !(c instanceof Dialog)) {
             c = c.getParent();
         }
-        return (Dialog)c;
+        return (Dialog) c;
     }
 
     /**
@@ -88,13 +88,12 @@ public class RelationTree extends JTree {
         @Override
         public void treeWillExpand(TreeExpansionEvent event) throws ExpandVetoException {
             TreePath path  = event.getPath();
-            Relation parent = (Relation)event.getPath().getLastPathComponent();
-            if (! parent.isIncomplete() || parent.isNew())
+            Relation parent = (Relation) event.getPath().getLastPathComponent();
+            if (!parent.isIncomplete() || parent.isNew())
                 // we don't load complete  or new relations
                 return;
             // launch the download task
-            //
-            Main.worker.submit(new RelationLoader(getParentDialog(),parent, path));
+            Main.worker.submit(new RelationLoader(getParentDialog(), parent, path));
         }
     }
 
@@ -120,6 +119,7 @@ public class RelationTree extends JTree {
             this.relation = relation;
             this.path = path;
         }
+
         @Override
         protected void cancel() {
             OsmApi.getOsmApi().cancel();
@@ -136,10 +136,10 @@ public class RelationTree extends JTree {
             }
             DataSetMerger visitor = new DataSetMerger(Main.main.getEditLayer().data, ds);
             visitor.merge();
-            if (! visitor.getConflicts().isEmpty()) {
+            if (!visitor.getConflicts().isEmpty()) {
                 Main.main.getEditLayer().getConflicts().add(visitor.getConflicts());
             }
-            final RelationTreeModel model = (RelationTreeModel)getModel();
+            final RelationTreeModel model = (RelationTreeModel) getModel();
             SwingUtilities.invokeLater(
                     new Runnable() {
                         @Override
@@ -153,10 +153,10 @@ public class RelationTree extends JTree {
         @Override
         protected void realRun() throws SAXException, IOException, OsmTransferException {
             try {
-                OsmServerObjectReader reader = new OsmServerObjectReader(relation.getId(), OsmPrimitiveType.from(relation), true /* full load */);
+                OsmServerObjectReader reader = new OsmServerObjectReader(relation.getId(), OsmPrimitiveType.from(relation), true);
                 ds = reader.parseOsm(progressMonitor
                         .createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false));
-            } catch(Exception e) {
+            } catch (Exception e) {
                 if (canceled) {
                     Main.warn(tr("Ignoring exception because task was canceled. Exception: {0}", e.toString()));
                     return;
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/RelationTreeCellRenderer.java b/src/org/openstreetmap/josm/gui/dialogs/relation/RelationTreeCellRenderer.java
index 6b630e4..2a8fe9e 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/RelationTreeCellRenderer.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/RelationTreeCellRenderer.java
@@ -19,7 +19,7 @@ import org.openstreetmap.josm.tools.ImageProvider;
  *
  */
 public class RelationTreeCellRenderer extends JLabel implements TreeCellRenderer {
-    public static final Color BGCOLOR_SELECTED = new Color(143,170,255);
+    public static final Color BGCOLOR_SELECTED = new Color(143, 170, 255);
 
     /** the relation icon */
     private ImageIcon icon;
@@ -65,14 +65,14 @@ public class RelationTreeCellRenderer extends JLabel implements TreeCellRenderer
     public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded,
             boolean leaf, int row, boolean hasFocus) {
 
-        // Hackish fix for #7056 - if name template for duplicated relation contains tags from parent, template will fail because getReffers doesn't work on primitives not yet in dataset
+        // Hackish fix for #7056 - if name template for duplicated relation contains tags from parent,
+        // template will fail because getReffers doesn't work on primitives not yet in dataset
         if (!tree.isRootVisible() && tree.getModel().getRoot() == value)
             return this;
 
         renderIcon();
-        renderValue((Relation)value);
+        renderValue((Relation) value);
         renderBackground(selected);
         return this;
     }
-
 }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/RelationTreeModel.java b/src/org/openstreetmap/josm/gui/dialogs/relation/RelationTreeModel.java
index fe34496..da6b9f8 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/RelationTreeModel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/RelationTreeModel.java
@@ -68,7 +68,7 @@ public class RelationTreeModel implements TreeModel {
     protected int getNumRelationChildren(Relation parent) {
         if (parent == null) return 0;
         int count = 0;
-        for(RelationMember member : parent.getMembers()) {
+        for (RelationMember member : parent.getMembers()) {
             if (member.isRelation()) {
                 count++;
             }
@@ -87,7 +87,7 @@ public class RelationTreeModel implements TreeModel {
      */
     protected Relation getRelationChildByIdx(Relation parent, int idx) {
         if (parent == null) return null;
-        int count=0;
+        int count = 0;
         for (RelationMember member : parent.getMembers()) {
             if (!(member.isRelation())) {
                 continue;
@@ -190,17 +190,17 @@ public class RelationTreeModel implements TreeModel {
     /* ----------------------------------------------------------------------- */
     @Override
     public Object getChild(Object parent, int index) {
-        return getRelationChildByIdx((Relation)parent, index);
+        return getRelationChildByIdx((Relation) parent, index);
     }
 
     @Override
     public int getChildCount(Object parent) {
-        return getNumRelationChildren((Relation)parent);
+        return getNumRelationChildren((Relation) parent);
     }
 
     @Override
     public int getIndexOfChild(Object parent, Object child) {
-        return getIndexForRelationChild((Relation)parent, (Relation)child);
+        return getIndexForRelationChild((Relation) parent, (Relation) child);
     }
 
     @Override
@@ -210,7 +210,7 @@ public class RelationTreeModel implements TreeModel {
 
     @Override
     public boolean isLeaf(Object node) {
-        Relation r = (Relation)node;
+        Relation r = (Relation) node;
         if (r.isIncomplete()) return false;
         return getNumRelationChildren(r) == 0;
     }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/RunnableAction.java b/src/org/openstreetmap/josm/gui/dialogs/relation/RunnableAction.java
index 11b1354..eb3467a 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/RunnableAction.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/RunnableAction.java
@@ -7,9 +7,6 @@ import javax.swing.AbstractAction;
 
 public abstract class RunnableAction extends AbstractAction implements Runnable {
 
-    public RunnableAction() {
-    }
-
     @Override
     public abstract void run();
 
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/SelectionTable.java b/src/org/openstreetmap/josm/gui/dialogs/relation/SelectionTable.java
index ee12855..6befb8f 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/SelectionTable.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/SelectionTable.java
@@ -34,7 +34,7 @@ public class SelectionTable extends JTable {
     class DoubleClickAdapter extends MouseAdapter {
         @Override
         public void mouseClicked(MouseEvent evt) {
-            if (! (SwingUtilities.isLeftMouseButton(evt) && evt.getClickCount() > 1))
+            if (!(SwingUtilities.isLeftMouseButton(evt) && evt.getClickCount() > 1))
                 return;
             int row = rowAtPoint(evt.getPoint());
             OsmPrimitive primitive = model.getPrimitive(row);
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/SelectionTableCellRenderer.java b/src/org/openstreetmap/josm/gui/dialogs/relation/SelectionTableCellRenderer.java
index 838977c..ba6922b 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/SelectionTableCellRenderer.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/SelectionTableCellRenderer.java
@@ -18,8 +18,8 @@ import org.openstreetmap.josm.tools.ImageProvider;
  *
  */
 public class SelectionTableCellRenderer extends JLabel implements TableCellRenderer {
-    public static final Color BGCOLOR_DOUBLE_ENTRY = new Color(254,226,214);
-    public static final Color BGCOLOR_SINGLE_ENTRY = new Color(235,255,177);
+    public static final Color BGCOLOR_DOUBLE_ENTRY = new Color(254, 226, 214);
+    public static final Color BGCOLOR_SINGLE_ENTRY = new Color(235, 255, 177);
 
     /**
      * reference to the member table model; required, in order to check whether a
@@ -71,8 +71,8 @@ public class SelectionTableCellRenderer extends JLabel implements TableCellRende
         if (value == null)
             return this;
 
-        renderBackground((OsmPrimitive)value, isSelected);
-        renderPrimitive((OsmPrimitive)value);
+        renderBackground((OsmPrimitive) value, isSelected);
+        renderPrimitive((OsmPrimitive) value);
         return this;
     }
 
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/SelectionTableModel.java b/src/org/openstreetmap/josm/gui/dialogs/relation/SelectionTableModel.java
index ae78f24..c9f32b5 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/SelectionTableModel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/SelectionTableModel.java
@@ -67,7 +67,7 @@ public class SelectionTableModel extends AbstractTableModel implements Selection
             cache.clear();
         }
         if (newLayer == layer) {
-            cache.addAll(((OsmDataLayer)newLayer).data.getAllSelected());
+            cache.addAll(((OsmDataLayer) newLayer).data.getAllSelected());
         }
         fireTableDataChanged();
     }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/package-info.java b/src/org/openstreetmap/josm/gui/dialogs/relation/package-info.java
new file mode 100644
index 0000000..4f6c503
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/package-info.java
@@ -0,0 +1,6 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Toggle dialog allowing to display currently loaded relations and perform operations on them.
+ */
+package org.openstreetmap.josm.gui.dialogs.relation;
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationNodeMap.java b/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationNodeMap.java
index 3f0ceb5..aa14fc9 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationNodeMap.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationNodeMap.java
@@ -34,7 +34,8 @@ public class RelationNodeMap {
         public final Map<Node, Set<Integer>> nodes = new TreeMap<>();
         public final Map<Integer, Set<Node>> ways = new TreeMap<>();
         public final boolean oneWay;
-        public NodesWays(boolean oneWay){
+
+        public NodesWays(boolean oneWay) {
             this.oneWay = oneWay;
         }
     }
@@ -60,17 +61,17 @@ public class RelationNodeMap {
      */
     private final List<Integer> notSortable = new ArrayList<>();
 
-    public static Node firstOnewayNode(RelationMember m){
-        if(!m.isWay()) return null;
-        if("backward".equals(m.getRole())) {
+    public static Node firstOnewayNode(RelationMember m) {
+        if (!m.isWay()) return null;
+        if ("backward".equals(m.getRole())) {
             return m.getWay().lastNode();
         }
         return m.getWay().firstNode();
     }
 
-    public static Node lastOnewayNode(RelationMember m){
-        if(!m.isWay()) return null;
-        if("backward".equals(m.getRole())) {
+    public static Node lastOnewayNode(RelationMember m) {
+        if (!m.isWay()) return null;
+        if ("backward".equals(m.getRole())) {
             return m.getWay().firstNode();
         }
         return m.getWay().lastNode();
@@ -85,11 +86,11 @@ public class RelationNodeMap {
             }
 
             Way w = m.getWay();
-            if ((RelationSortUtils.roundaboutType(w) != NONE)) {
+            if (RelationSortUtils.roundaboutType(w) != NONE) {
                 for (Node nd : w.getNodes()) {
                     addPair(nd, i);
                 }
-            } else if(RelationSortUtils.isOneway(m)) {
+            } else if (RelationSortUtils.isOneway(m)) {
                 addNodeWayMap(firstOnewayNode(m), i);
                 addWayNodeMap(lastOnewayNode(m), i);
                 addNodeWayMapReverse(lastOnewayNode(m), i);
@@ -179,13 +180,13 @@ public class RelationNodeMap {
         if (lastOnewayNode != null) return popBackwardOnewayPart(way);
         if (firstOneway != null) return popForwardOnewayPart(way);
 
-        if (map.ways.containsKey(way)){
+        if (map.ways.containsKey(way)) {
             for (Node n : map.ways.get(way)) {
                 Integer i = deleteAndGetAdjacentNode(map, n);
-                if(i != null) return i;
+                if (i != null) return i;
 
                 Integer j = deleteAndGetAdjacentNode(onewayMap, n);
-                if(j != null) {
+                if (j != null) {
                     firstOneway = j;
                     return j;
                 }
@@ -197,15 +198,15 @@ public class RelationNodeMap {
     }
 
     private Integer popForwardOnewayPart(Integer way) {
-        if(onewayMap.ways.containsKey(way)) {
+        if (onewayMap.ways.containsKey(way)) {
             for (Node n : onewayMap.ways.get(way)) {
                 Integer i = findAdjacentWay(onewayMap, n);
-                if(i == null) {
+                if (i == null) {
                     continue;
                 }
 
                 lastOnewayNode = processBackwardIfEndOfLoopReached(i);
-                if(lastOnewayNode != null)
+                if (lastOnewayNode != null)
                     return popBackwardOnewayPart(firstOneway);
 
                 deleteWayNode(onewayMap, i, n);
@@ -220,17 +221,17 @@ public class RelationNodeMap {
     private Node processBackwardIfEndOfLoopReached(Integer way) { //find if we didn't reach end of the loop (and process backward part)
         if (onewayReverseMap.ways.containsKey(way)) {
             for (Node n : onewayReverseMap.ways.get(way)) {
-                if((map.nodes.containsKey(n))
+                if ((map.nodes.containsKey(n))
                         || (onewayMap.nodes.containsKey(n) && onewayMap.nodes.get(n).size() > 1))
                     return n;
-                if(firstCircular != null && firstCircular == n)
+                if (firstCircular != null && firstCircular == n)
                     return firstCircular;
             }
         }
         return null;
     }
 
-    private Integer popBackwardOnewayPart(int way){
+    private Integer popBackwardOnewayPart(int way) {
         if (lastOnewayNode != null) {
             Set<Node> nodes = new TreeSet<>();
             if (onewayReverseMap.ways.containsKey(way)) {
@@ -240,21 +241,21 @@ public class RelationNodeMap {
                 nodes.addAll(map.ways.get(way));
             }
             for (Node n : nodes) {
-                if(n == lastOnewayNode) { //if oneway part ends
+                if (n == lastOnewayNode) { //if oneway part ends
                     firstOneway = null;
                     lastOnewayNode = null;
                     Integer j = deleteAndGetAdjacentNode(map, n);
-                    if(j != null) return j;
+                    if (j != null) return j;
 
                     Integer k = deleteAndGetAdjacentNode(onewayMap, n);
-                    if(k != null) {
+                    if (k != null) {
                         firstOneway = k;
                         return k;
                     }
                 }
 
                 Integer j = deleteAndGetAdjacentNode(onewayReverseMap, n);
-                if(j != null) return j;
+                if (j != null) return j;
             }
         }
 
@@ -266,13 +267,13 @@ public class RelationNodeMap {
 
     /**
      * find next node in nw NodeWays structure, if the node is found delete and return it
-     * @param nw
-     * @param n
+     * @param nw nodes and ways
+     * @param n node
      * @return node next to n
      */
-    private Integer deleteAndGetAdjacentNode(NodesWays nw, Node n){
+    private Integer deleteAndGetAdjacentNode(NodesWays nw, Node n) {
         Integer j = findAdjacentWay(nw, n);
-        if(j == null) return null;
+        if (j == null) return null;
         deleteWayNode(nw, j, n);
         return j;
     }
@@ -283,8 +284,8 @@ public class RelationNodeMap {
         return adj.iterator().next();
     }
 
-    private void deleteWayNode(NodesWays nw, Integer way, Node n){
-        if(nw.oneWay) {
+    private void deleteWayNode(NodesWays nw, Integer way, Node n) {
+        if (nw.oneWay) {
             doneOneway(way);
         } else {
             done(way);
@@ -297,16 +298,16 @@ public class RelationNodeMap {
      * every sortable member has been processed.
      */
     public Integer pop() {
-        if (!remaining.isEmpty()){
+        if (!remaining.isEmpty()) {
             Integer i = remaining.iterator().next();
             done(i);
             return i;
         }
 
         if (remainingOneway.isEmpty()) return null;
-        for(Integer i :remainingOneway.keySet()){ //find oneway, which is connected to more than one way (is between two oneway loops)
-            for(Node n : onewayReverseMap.ways.get(i)){
-                if(onewayReverseMap.nodes.containsKey(n) && onewayReverseMap.nodes.get(n).size() > 1) {
+        for (Integer i :remainingOneway.keySet()) { //find oneway, which is connected to more than one way (is between two oneway loops)
+            for (Node n : onewayReverseMap.ways.get(i)) {
+                if (onewayReverseMap.nodes.containsKey(n) && onewayReverseMap.nodes.get(n).size() > 1) {
                     doneOneway(i);
                     firstCircular = n;
                     return i;
@@ -326,10 +327,10 @@ public class RelationNodeMap {
     private void doneOneway(Integer i) {
         Set<Node> nodesForward = remainingOneway.get(i);
         for (Node n : nodesForward) {
-            if(onewayMap.nodes.containsKey(n)) {
+            if (onewayMap.nodes.containsKey(n)) {
                 onewayMap.nodes.get(n).remove(i);
             }
-            if(onewayReverseMap.nodes.containsKey(n)) {
+            if (onewayReverseMap.nodes.containsKey(n)) {
                 onewayReverseMap.nodes.get(n).remove(i);
             }
         }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationSortUtils.java b/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationSortUtils.java
index ef8afb0..1504bf7 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationSortUtils.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationSortUtils.java
@@ -33,30 +33,30 @@ final class RelationSortUtils {
                 w.getNode(0) != null &&
                 w.getNode(1) != null &&
                 w.getNode(2) != null &&
-                w.firstNode() == w.lastNode()) {
+                w.isClosed()) {
             /** do some simple determinant / cross pruduct test on the first 3 nodes
                 to see, if the roundabout goes clock wise or ccw */
             EastNorth en1 = w.getNode(0).getEastNorth();
             EastNorth en2 = w.getNode(1).getEastNorth();
             EastNorth en3 = w.getNode(2).getEastNorth();
             if (en1 != null && en2 != null && en3 != null) {
-                en1 = en1.sub(en2);
-                en2 = en2.sub(en3);
+                en1 = en2.subtract(en1);
+                en2 = en3.subtract(en2);
                 return en1.north() * en2.east() - en2.north() * en1.east() > 0 ? ROUNDABOUT_LEFT : ROUNDABOUT_RIGHT;
             }
         }
         return NONE;
     }
 
-    static boolean isBackward(final RelationMember member){
+    static boolean isBackward(final RelationMember member) {
         return "backward".equals(member.getRole());
     }
 
-    static boolean isForward(final RelationMember member){
+    static boolean isForward(final RelationMember member) {
         return "forward".equals(member.getRole());
     }
 
-    static boolean isOneway(final RelationMember member){
+    static boolean isOneway(final RelationMember member) {
         return isForward(member) || isBackward(member);
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationSorter.java b/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationSorter.java
index 9144cfe..da7f3ea 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationSorter.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationSorter.java
@@ -5,25 +5,29 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
+import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.gui.DefaultNameFormatter;
 import org.openstreetmap.josm.tools.AlphanumComparator;
+import org.openstreetmap.josm.tools.Utils;
 
 public class RelationSorter {
 
-    private static interface AdditionalSorter {
-        public boolean acceptsMember(RelationMember m);
-        public List<RelationMember> sortMembers(List<RelationMember> list);
+    private interface AdditionalSorter {
+        boolean acceptsMember(RelationMember m);
+
+        List<RelationMember> sortMembers(List<RelationMember> list);
     }
 
     private static final Collection<AdditionalSorter> additionalSorters = new ArrayList<>();
-
     static {
         // first adequate sorter is used, so order matters
         additionalSorters.add(new AssociatedStreetRoleStreetSorter());
@@ -90,10 +94,40 @@ public class RelationSorter {
             return m.getRole() != null && (m.getRole().startsWith("platform") || m.getRole().startsWith("stop"));
         }
 
+        private static String getStopName(OsmPrimitive p) {
+            for (Relation ref : Utils.filteredCollection(p.getReferrers(), Relation.class)) {
+                if (ref.hasTag("type", "public_transport") && ref.hasTag("public_transport", "stop_area") && ref.getName() != null) {
+                    return ref.getName();
+                }
+            }
+            return p.getName();
+        }
+
         @Override
         public List<RelationMember> sortMembers(List<RelationMember> list) {
-            // Retain order from original relation
-            return list;
+            final Map<String, RelationMember> platformByName = new HashMap<>();
+            for (RelationMember i : list) {
+                if ("platform".equals(i.getRole())) {
+                    final RelationMember old = platformByName.put(getStopName(i.getMember()), i);
+                    if (old != null) {
+                        // Platform with same name present. Stop to avoid damaging complicated relations.
+                        // This case can happily be handled differently.
+                        return list;
+                    }
+                }
+            }
+            final List<RelationMember> sorted = new ArrayList<>(list.size());
+            for (RelationMember i : list) {
+                if ("stop".equals(i.getRole())) {
+                    sorted.add(i);
+                    final RelationMember platform = platformByName.remove(getStopName(i.getMember()));
+                    if (platform != null) {
+                        sorted.add(platform);
+                    }
+                }
+            }
+            sorted.addAll(platformByName.values());
+            return sorted;
         }
     }
 
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/sort/WayConnectionType.java b/src/org/openstreetmap/josm/gui/dialogs/relation/sort/WayConnectionType.java
index e7e4619..59219ae 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/sort/WayConnectionType.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/sort/WayConnectionType.java
@@ -48,7 +48,7 @@ public class WayConnectionType {
         invalid = false;
     }
 
-    public WayConnectionType(boolean invalid){
+    public WayConnectionType(boolean invalid) {
         this.invalid = invalid;
     }
 
diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/sort/WayConnectionTypeCalculator.java b/src/org/openstreetmap/josm/gui/dialogs/relation/sort/WayConnectionTypeCalculator.java
index d31c8ba..7193972 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/relation/sort/WayConnectionTypeCalculator.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/relation/sort/WayConnectionTypeCalculator.java
@@ -26,18 +26,18 @@ public class WayConnectionTypeCalculator {
         this.members = members;
         final List<WayConnectionType> con = new ArrayList<>();
 
-        for (int i=0; i<members.size(); ++i) {
+        for (int i = 0; i < members.size(); ++i) {
             con.add(null);
         }
 
-        firstGroupIdx=0;
+        firstGroupIdx = 0;
 
         lastForwardWay = UNCONNECTED;
         lastBackwardWay = UNCONNECTED;
         onewayBeginning = false;
         WayConnectionType lastWct = null;
 
-        for (int i=0; i<members.size(); ++i) {
+        for (int i = 0; i < members.size(); ++i) {
             final RelationMember m = members.get(i);
             if (!m.isWay() || m.getWay() == null || m.getWay().isIncomplete()) {
                 if (i > 0) {
@@ -49,14 +49,14 @@ public class WayConnectionTypeCalculator {
             }
 
             WayConnectionType wct = new WayConnectionType(false);
-            wct.linkPrev = i>0 && con.get(i-1) != null && con.get(i-1).isValid();
+            wct.linkPrev = i > 0 && con.get(i-1) != null && con.get(i-1).isValid();
             wct.direction = NONE;
 
-            if (RelationSortUtils.isOneway(m)){
+            if (RelationSortUtils.isOneway(m)) {
                 if (lastWct != null && lastWct.isOnewayTail) {
                     wct.isOnewayHead = true;
                 }
-                if (lastBackwardWay == UNCONNECTED && lastForwardWay == UNCONNECTED){ //Beginning of new oneway
+                if (lastBackwardWay == UNCONNECTED && lastForwardWay == UNCONNECTED) { //Beginning of new oneway
                     wct.isOnewayHead = true;
                     lastForwardWay = i-1;
                     lastBackwardWay = i-1;
@@ -66,7 +66,7 @@ public class WayConnectionTypeCalculator {
 
             if (wct.linkPrev) {
                 if (lastBackwardWay != UNCONNECTED && lastForwardWay != UNCONNECTED) {
-                    wct = determineOnewayConnectionType(con, m, i, wct);
+                    determineOnewayConnectionType(con, m, i, wct);
                     if (!wct.linkPrev) {
                         firstGroupIdx = i;
                     }
@@ -80,7 +80,7 @@ public class WayConnectionTypeCalculator {
 
             if (!wct.linkPrev) {
                 wct.direction = determineDirectionOfFirst(i, m);
-                if (RelationSortUtils.isOneway(m)){
+                if (RelationSortUtils.isOneway(m)) {
                     wct.isOnewayLoopForwardPart = true;
                     lastForwardWay = i;
                 }
@@ -114,7 +114,7 @@ public class WayConnectionTypeCalculator {
             loop = determineDirection(i, con.get(i).direction, firstGroupIdx) == con.get(firstGroupIdx).direction;
         }
         if (loop) {
-            for (int j=firstGroupIdx; j <= i; ++j) {
+            for (int j = firstGroupIdx; j <= i; ++j) {
                 con.get(j).isLoop = true;
             }
         }
@@ -125,7 +125,7 @@ public class WayConnectionTypeCalculator {
         if (result != NONE)
             return result;
 
-        if (RelationSortUtils.isOneway(m)){
+        if (RelationSortUtils.isOneway(m)) {
             if (RelationSortUtils.isBackward(m)) return BACKWARD;
             else return FORWARD;
         } else { /** guess the direction and see if it fits with the next member */
@@ -138,7 +138,8 @@ public class WayConnectionTypeCalculator {
     private int lastForwardWay;
     private int lastBackwardWay;
     private boolean onewayBeginning;
-    private WayConnectionType determineOnewayConnectionType(final List<WayConnectionType> con,
+
+    private void determineOnewayConnectionType(final List<WayConnectionType> con,
             RelationMember m, int i, final WayConnectionType wct) {
         Direction dirFW = determineDirection(lastForwardWay, con.get(lastForwardWay).direction, i);
         Direction dirBW = NONE;
@@ -157,12 +158,12 @@ public class WayConnectionTypeCalculator {
         }
 
         if (RelationSortUtils.isOneway(m)) {
-            if (dirBW != NONE){
+            if (dirBW != NONE) {
                 wct.direction = dirBW;
                 lastBackwardWay = i;
                 wct.isOnewayLoopBackwardPart = true;
             }
-            if (dirFW != NONE){
+            if (dirFW != NONE) {
                 wct.direction = dirFW;
                 lastForwardWay = i;
                 wct.isOnewayLoopForwardPart = true;
@@ -182,7 +183,7 @@ public class WayConnectionTypeCalculator {
             }
 
             if (dirFW != NONE && dirBW != NONE) { //End of oneway loop
-                if (i+1<members.size() && determineDirection(i, dirFW, i+1) != NONE) {
+                if (i+1 < members.size() && determineDirection(i, dirFW, i+1) != NONE) {
                     wct.isOnewayLoopBackwardPart = false;
                     wct.direction = dirFW;
                 } else {
@@ -200,10 +201,9 @@ public class WayConnectionTypeCalculator {
                 wct.linkPrev = false;
             }
         }
-        return wct;
     }
 
-    private static Direction reverse(final Direction dir){
+    private static Direction reverse(final Direction dir) {
         if (dir == FORWARD) return BACKWARD;
         if (dir == BACKWARD) return FORWARD;
         return dir;
@@ -246,7 +246,7 @@ public class WayConnectionTypeCalculator {
             return NONE;
 
         /** the list of nodes the way k can dock to */
-        List<Node> refNodes= new ArrayList<>();
+        List<Node> refNodes = new ArrayList<>();
 
         switch (ref_direction) {
         case FORWARD:
diff --git a/src/org/openstreetmap/josm/gui/dialogs/validator/ValidatorTreePanel.java b/src/org/openstreetmap/josm/gui/dialogs/validator/ValidatorTreePanel.java
index 320b264..e3fed76 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/validator/ValidatorTreePanel.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/validator/ValidatorTreePanel.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.dialogs.validator;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -6,7 +6,9 @@ import static org.openstreetmap.josm.tools.I18n.tr;
 import java.awt.event.KeyListener;
 import java.awt.event.MouseEvent;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
+import java.util.EnumMap;
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -19,6 +21,7 @@ import javax.swing.JTree;
 import javax.swing.ToolTipManager;
 import javax.swing.tree.DefaultMutableTreeNode;
 import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.TreeNode;
 import javax.swing.tree.TreePath;
 import javax.swing.tree.TreeSelectionModel;
 
@@ -32,6 +35,9 @@ import org.openstreetmap.josm.gui.preferences.validator.ValidatorPreference;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.tools.Destroyable;
 import org.openstreetmap.josm.tools.MultiMap;
+import org.openstreetmap.josm.tools.Predicate;
+import org.openstreetmap.josm.tools.Predicates;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
  * A panel that displays the error tree. The selection manager
@@ -66,7 +72,7 @@ public class ValidatorTreePanel extends JTree implements Destroyable {
      * If {@link #filter} is not <code>null</code> only errors are displayed
      * that refer to one of the primitives in the filter.
      */
-    private transient Set<OsmPrimitive> filter = null;
+    private transient Set<? extends OsmPrimitive> filter = null;
 
     /** a counter to check if tree has been rebuild */
     private int updateCount;
@@ -172,8 +178,8 @@ public class ValidatorTreePanel extends JTree implements Destroyable {
             }
         }
 
-        Map<Severity, MultiMap<String, TestError>> errorTree = new HashMap<>();
-        Map<Severity, HashMap<String, MultiMap<String, TestError>>> errorTreeDeep = new HashMap<>();
+        Map<Severity, MultiMap<String, TestError>> errorTree = new EnumMap<>(Severity.class);
+        Map<Severity, HashMap<String, MultiMap<String, TestError>>> errorTreeDeep = new EnumMap<>(Severity.class);
         for (Severity s : Severity.values()) {
             errorTree.put(s, new MultiMap<String, TestError>(20));
             errorTreeDeep.put(s, new HashMap<String, MultiMap<String, TestError>>());
@@ -181,11 +187,11 @@ public class ValidatorTreePanel extends JTree implements Destroyable {
 
         final Boolean other = ValidatorPreference.PREF_OTHER.get();
         for (TestError e : errors) {
-            if (e.getIgnored()) {
+            if (e.isIgnored()) {
                 continue;
             }
             Severity s = e.getSeverity();
-            if(!other && s == Severity.OTHER) {
+            if (!other && s == Severity.OTHER) {
                 continue;
             }
             String d = e.getDescription();
@@ -227,7 +233,7 @@ public class ValidatorTreePanel extends JTree implements Destroyable {
             rootNode.add(severityNode);
 
             if (oldSelectedRows.contains(s)) {
-                expandedPaths.add(new TreePath(new Object[] { rootNode, severityNode }));
+                expandedPaths.add(new TreePath(new Object[] {rootNode, severityNode}));
             }
 
             for (Entry<String, Set<TestError>> msgErrors : severityErrors.entrySet()) {
@@ -238,7 +244,7 @@ public class ValidatorTreePanel extends JTree implements Destroyable {
                 severityNode.add(messageNode);
 
                 if (oldSelectedRows.contains(msgErrors.getKey())) {
-                    expandedPaths.add(new TreePath(new Object[] { rootNode, severityNode, messageNode }));
+                    expandedPaths.add(new TreePath(new Object[] {rootNode, severityNode, messageNode}));
                 }
 
                 for (TestError error : errs) {
@@ -255,7 +261,7 @@ public class ValidatorTreePanel extends JTree implements Destroyable {
                     groupNode = new GroupTreeNode(bag.getKey());
                     severityNode.add(groupNode);
                     if (oldSelectedRows.contains(bag.getKey())) {
-                        expandedPaths.add(new TreePath(new Object[] { rootNode, severityNode, groupNode }));
+                        expandedPaths.add(new TreePath(new Object[] {rootNode, severityNode, groupNode}));
                     }
                 }
 
@@ -277,10 +283,9 @@ public class ValidatorTreePanel extends JTree implements Destroyable {
 
                     if (oldSelectedRows.contains(msgErrors.getKey())) {
                         if (groupNode != null) {
-                            expandedPaths.add(new TreePath(new Object[] { rootNode, severityNode, groupNode,
-                                    messageNode }));
+                            expandedPaths.add(new TreePath(new Object[] {rootNode, severityNode, groupNode, messageNode}));
                         } else {
-                            expandedPaths.add(new TreePath(new Object[] { rootNode, severityNode, messageNode }));
+                            expandedPaths.add(new TreePath(new Object[] {rootNode, severityNode, messageNode}));
                         }
                     }
 
@@ -320,7 +325,7 @@ public class ValidatorTreePanel extends JTree implements Destroyable {
         clearErrors();
         DataSet ds = Main.main.getCurrentDataSet();
         for (TestError error : newerrors) {
-            if (!error.getIgnored()) {
+            if (!error.isIgnored()) {
                 errors.add(error);
                 if (ds != null) {
                     ds.addDataSetListener(error);
@@ -337,14 +342,46 @@ public class ValidatorTreePanel extends JTree implements Destroyable {
      * @return the errors of the tree
      */
     public List<TestError> getErrors() {
-        return errors != null ? errors : Collections.<TestError> emptyList();
+        return errors != null ? errors : Collections.<TestError>emptyList();
+    }
+
+    /**
+     * Selects all errors related to the specified {@code primitives}, i.e. where {@link TestError#getPrimitives()}
+     * returns a primitive present in {@code primitives}.
+     */
+    public void selectRelatedErrors(final Collection<OsmPrimitive> primitives) {
+        final Collection<TreePath> paths = new ArrayList<>();
+        walkAndSelectRelatedErrors(new TreePath(getRoot()), Predicates.inCollection(new HashSet<>(primitives)), paths);
+        getSelectionModel().clearSelection();
+        for (TreePath path : paths) {
+            expandPath(path);
+            getSelectionModel().addSelectionPath(path);
+        }
+    }
+
+    private void walkAndSelectRelatedErrors(final TreePath p, final Predicate<OsmPrimitive> isRelevant, final Collection<TreePath> paths) {
+        final int count = getModel().getChildCount(p.getLastPathComponent());
+        for (int i = 0; i < count; i++) {
+            final Object child = getModel().getChild(p.getLastPathComponent(), i);
+            if (getModel().isLeaf(child) && child instanceof DefaultMutableTreeNode
+                    && ((DefaultMutableTreeNode) child).getUserObject() instanceof TestError) {
+                final TestError error = (TestError) ((DefaultMutableTreeNode) child).getUserObject();
+                if (error.getPrimitives() != null) {
+                    if (Utils.exists(error.getPrimitives(), isRelevant)) {
+                        paths.add(p.pathByAddingChild(child));
+                    }
+                }
+            } else {
+                walkAndSelectRelatedErrors(p.pathByAddingChild(child), isRelevant, paths);
+            }
+        }
     }
 
     /**
      * Returns the filter list
      * @return the list of primitives used for filtering
      */
-    public Set<OsmPrimitive> getFilter() {
+    public Set<? extends OsmPrimitive> getFilter() {
         return filter;
     }
 
@@ -352,7 +389,7 @@ public class ValidatorTreePanel extends JTree implements Destroyable {
      * Set the filter list to a set of primitives
      * @param filter the list of primitives used for filtering
      */
-    public void setFilter(Set<OsmPrimitive> filter) {
+    public void setFilter(Set<? extends OsmPrimitive> filter) {
         if (filter != null && filter.isEmpty()) {
             this.filter = null;
         } else {
@@ -379,7 +416,7 @@ public class ValidatorTreePanel extends JTree implements Destroyable {
         DefaultMutableTreeNode root = getRoot();
 
         int row = 0;
-        Enumeration<DefaultMutableTreeNode> children = root.breadthFirstEnumeration();
+        Enumeration<TreeNode> children = root.breadthFirstEnumeration();
         while (children.hasMoreElements()) {
             children.nextElement();
             expandRow(row++);
diff --git a/src/org/openstreetmap/josm/gui/dialogs/validator/ValidatorTreeRenderer.java b/src/org/openstreetmap/josm/gui/dialogs/validator/ValidatorTreeRenderer.java
index 17be48e..a9c2c1d 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/validator/ValidatorTreeRenderer.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/validator/ValidatorTreeRenderer.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.dialogs.validator;
 
 import java.awt.Component;
diff --git a/src/org/openstreetmap/josm/gui/dialogs/validator/package-info.java b/src/org/openstreetmap/josm/gui/dialogs/validator/package-info.java
new file mode 100644
index 0000000..4abe68c
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/dialogs/validator/package-info.java
@@ -0,0 +1,6 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Toggle dialog allowing to launch data validation and display validation results (errors and warnings).
+ */
+package org.openstreetmap.josm.gui.dialogs.validator;
diff --git a/src/org/openstreetmap/josm/gui/download/BookmarkList.java b/src/org/openstreetmap/josm/gui/download/BookmarkList.java
index 21b0d6c..c73d1a8 100644
--- a/src/org/openstreetmap/josm/gui/download/BookmarkList.java
+++ b/src/org/openstreetmap/josm/gui/download/BookmarkList.java
@@ -10,9 +10,9 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Locale;
 
 import javax.swing.DefaultListModel;
-import javax.swing.ImageIcon;
 import javax.swing.JLabel;
 import javax.swing.JList;
 import javax.swing.ListCellRenderer;
@@ -37,13 +37,14 @@ public class BookmarkList extends JList<BookmarkList.Bookmark> {
 
         /**
          * Constructs a new {@code Bookmark} with the given contents.
-         * @param list Bookmark contents as a list of 5 elements. First item is the name, then come bounds arguments (minlat, minlon, maxlat, maxlon)
+         * @param list Bookmark contents as a list of 5 elements.
+         * First item is the name, then come bounds arguments (minlat, minlon, maxlat, maxlon)
          * @throws NumberFormatException if the bounds arguments are not numbers
          * @throws IllegalArgumentException if list contain less than 5 elements
          */
-        public Bookmark(Collection<String> list) throws NumberFormatException, IllegalArgumentException {
+        public Bookmark(Collection<String> list) {
             List<String> array = new ArrayList<>(list);
-            if(array.size() < 5)
+            if (array.size() < 5)
                 throw new IllegalArgumentException(tr("Wrong number of arguments for bookmark"));
             name = array.get(0);
             area = new Bounds(Double.parseDouble(array.get(1)), Double.parseDouble(array.get(2)),
@@ -72,7 +73,7 @@ public class BookmarkList extends JList<BookmarkList.Bookmark> {
 
         @Override
         public int compareTo(Bookmark b) {
-            return name.toLowerCase().compareTo(b.name.toLowerCase());
+            return name.toLowerCase(Locale.ENGLISH).compareTo(b.name.toLowerCase(Locale.ENGLISH));
         }
 
         @Override
@@ -153,16 +154,15 @@ public class BookmarkList extends JList<BookmarkList.Bookmark> {
      * Loads the bookmarks from file.
      */
     public final void load() {
-        DefaultListModel<Bookmark> model = (DefaultListModel<Bookmark>)getModel();
+        DefaultListModel<Bookmark> model = (DefaultListModel<Bookmark>) getModel();
         model.removeAllElements();
         Collection<Collection<String>> args = Main.pref.getArray("bookmarks", null);
-        if(args != null) {
+        if (args != null) {
             List<Bookmark> bookmarks = new LinkedList<>();
-            for(Collection<String> entry : args) {
+            for (Collection<String> entry : args) {
                 try {
                     bookmarks.add(new Bookmark(entry));
-                }
-                catch (Exception e) {
+                } catch (Exception e) {
                     Main.error(tr("Error reading bookmark entry: %s", e.getMessage()));
                 }
             }
@@ -178,7 +178,7 @@ public class BookmarkList extends JList<BookmarkList.Bookmark> {
      */
     public final void save() {
         List<Collection<String>> coll = new LinkedList<>();
-        for (Object o : ((DefaultListModel<Bookmark>)getModel()).toArray()) {
+        for (Object o : ((DefaultListModel<Bookmark>) getModel()).toArray()) {
             String[] array = new String[5];
             Bookmark b = (Bookmark) o;
             array[0] = b.getName();
@@ -194,12 +194,12 @@ public class BookmarkList extends JList<BookmarkList.Bookmark> {
 
     static class BookmarkCellRenderer extends JLabel implements ListCellRenderer<BookmarkList.Bookmark> {
 
-        private ImageIcon icon;
-
+        /**
+         * Constructs a new {@code BookmarkCellRenderer}.
+         */
         public BookmarkCellRenderer() {
             setOpaque(true);
-            icon = ImageProvider.get("dialogs", "bookmark");
-            setIcon(icon);
+            setIcon(ImageProvider.get("dialogs", "bookmark"));
         }
 
         protected void renderColor(boolean selected) {
@@ -214,19 +214,18 @@ public class BookmarkList extends JList<BookmarkList.Bookmark> {
 
         protected String buildToolTipText(Bookmark b) {
             Bounds area = b.getArea();
-            StringBuilder sb = new StringBuilder();
+            StringBuilder sb = new StringBuilder(128);
             sb.append("<html>min[latitude,longitude]=<strong>[")
-            .append(area.getMinLat()).append(",").append(area.getMinLon()).append("]</strong>")
-            .append("<br>")
-            .append("max[latitude,longitude]=<strong>[")
-            .append(area.getMaxLat()).append(",").append(area.getMaxLon()).append("]</strong>")
-            .append("</html>");
+              .append(area.getMinLat()).append(',').append(area.getMinLon()).append("]</strong>"+
+                      "<br>max[latitude,longitude]=<strong>[")
+              .append(area.getMaxLat()).append(',').append(area.getMaxLon()).append("]</strong>"+
+                      "</html>");
             return sb.toString();
-
         }
 
         @Override
-        public Component getListCellRendererComponent(JList<? extends Bookmark> list, Bookmark value, int index, boolean isSelected, boolean cellHasFocus) {
+        public Component getListCellRendererComponent(JList<? extends Bookmark> list, Bookmark value, int index, boolean isSelected,
+                boolean cellHasFocus) {
             renderColor(isSelected);
             setText(value.getName());
             setToolTipText(buildToolTipText(value));
diff --git a/src/org/openstreetmap/josm/gui/download/BookmarkSelection.java b/src/org/openstreetmap/josm/gui/download/BookmarkSelection.java
index c5b3981..db0de74 100644
--- a/src/org/openstreetmap/josm/gui/download/BookmarkSelection.java
+++ b/src/org/openstreetmap/josm/gui/download/BookmarkSelection.java
@@ -84,7 +84,7 @@ public class BookmarkSelection implements DownloadSelection {
 
         GridBagConstraints  gc = new GridBagConstraints();
         gc.anchor = GridBagConstraints.NORTHWEST;
-        gc.insets = new Insets(5,5,5,5);
+        gc.insets = new Insets(5, 5, 5, 5);
         pnl.add(lblCurrentDownloadArea = new JMultilineLabel(""), gc);
 
         gc.weightx = 1.0;
@@ -98,7 +98,7 @@ public class BookmarkSelection implements DownloadSelection {
         gc.fill = GridBagConstraints.HORIZONTAL;
         gc.weightx = 0.0;
         gc.weighty = 0.0;
-        gc.insets = new Insets(5,5,5,5);
+        gc.insets = new Insets(5, 5, 5, 5);
         pnl.add(new JButton(actAdd = new AddAction()), gc);
         return pnl;
     }
@@ -115,7 +115,7 @@ public class BookmarkSelection implements DownloadSelection {
             public void valueChanged(ListSelectionEvent e) {
                 Bookmark b = bookmarks.getSelectedValue();
                 if (b != null) {
-                    gui.boundingBoxChanged(b.getArea(),BookmarkSelection.this);
+                    gui.boundingBoxChanged(b.getArea(), BookmarkSelection.this);
                 }
             }
         });
@@ -125,7 +125,7 @@ public class BookmarkSelection implements DownloadSelection {
         gc.weightx = 1.0;
         gc.weighty = 0.0;
         gc.gridwidth = 2;
-        dlg.add(buildDownloadAreaAddPanel(),gc);
+        dlg.add(buildDownloadAreaAddPanel(), gc);
 
         gc.gridwidth = 1;
         gc.gridx = 0;
@@ -133,7 +133,7 @@ public class BookmarkSelection implements DownloadSelection {
         gc.fill = GridBagConstraints.VERTICAL;
         gc.weightx = 0.0;
         gc.weighty = 1.0;
-        dlg.add(buildButtonPanel(),gc);
+        dlg.add(buildButtonPanel(), gc);
 
         gc.gridwidth = 1;
         gc.gridx = 1;
@@ -195,19 +195,22 @@ public class BookmarkSelection implements DownloadSelection {
             Bookmark b = new Bookmark();
             b.setName(
                     JOptionPane.showInputDialog(
-                            Main.parent,tr("Please enter a name for the bookmarked download area."),
+                            Main.parent, tr("Please enter a name for the bookmarked download area."),
                             tr("Name of location"),
                             JOptionPane.QUESTION_MESSAGE)
             );
             b.setArea(currentArea);
             if (b.getName() != null && !b.getName().isEmpty()) {
-                ((DefaultListModel<BookmarkList.Bookmark>)bookmarks.getModel()).addElement(b);
+                ((DefaultListModel<BookmarkList.Bookmark>) bookmarks.getModel()).addElement(b);
                 bookmarks.save();
             }
         }
     }
 
     class RemoveAction extends AbstractAction implements ListSelectionListener{
+        /**
+         * Constructs a new {@code RemoveAction}.
+         */
         public RemoveAction() {
             putValue(SMALL_ICON, ImageProvider.get("dialogs", "delete"));
             putValue(SHORT_DESCRIPTION, tr("Remove the currently selected bookmarks"));
@@ -220,7 +223,7 @@ public class BookmarkSelection implements DownloadSelection {
             if (sels == null || sels.isEmpty())
                 return;
             for (Object sel: sels) {
-                ((DefaultListModel<Bookmark>)bookmarks.getModel()).removeElement(sel);
+                ((DefaultListModel<Bookmark>) bookmarks.getModel()).removeElement(sel);
             }
             bookmarks.save();
         }
@@ -228,13 +231,17 @@ public class BookmarkSelection implements DownloadSelection {
         protected final void updateEnabledState() {
             setEnabled(bookmarks.getSelectedIndices().length > 0);
         }
+
         @Override
         public void valueChanged(ListSelectionEvent e) {
             updateEnabledState();
         }
     }
 
-    class RenameAction extends AbstractAction implements ListSelectionListener{
+    class RenameAction extends AbstractAction implements ListSelectionListener {
+        /**
+         * Constructs a new {@code RenameAction}.
+         */
         public RenameAction() {
             putValue(SMALL_ICON, ImageProvider.get("dialogs", "edit"));
             putValue(SHORT_DESCRIPTION, tr("Rename the currently selected bookmark"));
@@ -249,7 +256,7 @@ public class BookmarkSelection implements DownloadSelection {
             Bookmark b = sels.get(0);
             Object value =
                 JOptionPane.showInputDialog(
-                        Main.parent,tr("Please enter a name for the bookmarked download area."),
+                        Main.parent, tr("Please enter a name for the bookmarked download area."),
                         tr("Name of location"),
                         JOptionPane.QUESTION_MESSAGE,
                         null,
diff --git a/src/org/openstreetmap/josm/gui/download/BoundingBoxSelection.java b/src/org/openstreetmap/josm/gui/download/BoundingBoxSelection.java
index 3580c48..664cb87 100644
--- a/src/org/openstreetmap/josm/gui/download/BoundingBoxSelection.java
+++ b/src/org/openstreetmap/josm/gui/download/BoundingBoxSelection.java
@@ -56,9 +56,9 @@ public class BoundingBoxSelection implements DownloadSelection {
 
     protected void buildDownloadAreaInputFields() {
         latlon = new JosmTextField[4];
-        for(int i=0; i< 4; i++) {
+        for (int i = 0; i < 4; i++) {
             latlon[i] = new JosmTextField(11);
-            latlon[i].setMinimumSize(new Dimension(100,new JosmTextField().getMinimumSize().height));
+            latlon[i].setMinimumSize(new Dimension(100, new JosmTextField().getMinimumSize().height));
             latlon[i].addFocusListener(new SelectAllOnFocusHandler(latlon[i]));
         }
         LatValueChecker latChecker = new LatValueChecker(latlon[0]);
@@ -94,13 +94,13 @@ public class BoundingBoxSelection implements DownloadSelection {
         tfOsmUrl.setLineWrap(true);
         tfOsmUrl.setBorder(latlon[0].getBorder());
 
-        dlg.add(new JLabel(tr("min lat")), GBC.std().insets(10,20,5,0));
-        dlg.add(latlon[0], GBC.std().insets(0,20,0,0));
-        dlg.add(new JLabel(tr("min lon")), GBC.std().insets(10,20,5,0));
-        dlg.add(latlon[1], GBC.eol().insets(0,20,0,0));
-        dlg.add(new JLabel(tr("max lat")), GBC.std().insets(10,0,5,0));
+        dlg.add(new JLabel(tr("min lat")), GBC.std().insets(10, 20, 5, 0));
+        dlg.add(latlon[0], GBC.std().insets(0, 20, 0, 0));
+        dlg.add(new JLabel(tr("min lon")), GBC.std().insets(10, 20, 5, 0));
+        dlg.add(latlon[1], GBC.eol().insets(0, 20, 0, 0));
+        dlg.add(new JLabel(tr("max lat")), GBC.std().insets(10, 0, 5, 0));
         dlg.add(latlon[2], GBC.std());
-        dlg.add(new JLabel(tr("max lon")), GBC.std().insets(10,0,5,0));
+        dlg.add(new JLabel(tr("max lon")), GBC.std().insets(10, 0, 5, 0));
         dlg.add(latlon[3], GBC.eol());
 
         final JButton btnClear = new JButton(tr("Clear textarea"));
@@ -110,11 +110,12 @@ public class BoundingBoxSelection implements DownloadSelection {
                 tfOsmUrl.setText("");
             }
         });
-        dlg.add(btnClear, GBC.eol().insets(10,20,0,0));
+        dlg.add(btnClear, GBC.eol().insets(10, 20, 0, 0));
 
-        dlg.add(new JLabel(tr("URL from www.openstreetmap.org (you can paste an URL here to download the area)")), GBC.eol().insets(10,5,5,0));
-        dlg.add(tfOsmUrl, GBC.eop().insets(10,0,5,0).fill());
-        dlg.add(showUrl, GBC.eop().insets(10,0,5,5));
+        dlg.add(new JLabel(tr("URL from www.openstreetmap.org (you can paste an URL here to download the area)")),
+                GBC.eol().insets(10, 5, 5, 0));
+        dlg.add(tfOsmUrl, GBC.eop().insets(10, 0, 5, 0).fill());
+        dlg.add(showUrl, GBC.eop().insets(10, 0, 5, 5));
         showUrl.setEditable(false);
         showUrl.setBackground(dlg.getBackground());
         showUrl.addFocusListener(new SelectAllOnFocusHandler(showUrl));
@@ -135,10 +136,10 @@ public class BoundingBoxSelection implements DownloadSelection {
      */
     public Bounds getDownloadArea() {
         double[] values = new double[4];
-        for (int i=0; i < 4; i++) {
+        for (int i = 0; i < 4; i++) {
             try {
                 values[i] = Double.parseDouble(latlon[i].getText());
-            } catch(NumberFormatException x) {
+            } catch (NumberFormatException x) {
                 return null;
             }
         }
@@ -151,8 +152,8 @@ public class BoundingBoxSelection implements DownloadSelection {
 
     private boolean parseURL(DownloadDialog gui) {
         Bounds b = OsmUrlToBounds.parse(tfOsmUrl.getText());
-        if(b == null) return false;
-        gui.boundingBoxChanged(b,BoundingBoxSelection.this);
+        if (b == null) return false;
+        gui.boundingBoxChanged(b, BoundingBoxSelection.this);
         updateBboxFields(b);
         updateUrl(b);
         return true;
@@ -197,12 +198,12 @@ public class BoundingBoxSelection implements DownloadSelection {
             double value = 0;
             try {
                 value = Double.parseDouble(tfLatValue.getText());
-            } catch(NumberFormatException ex) {
-                setErrorMessage(tfLatValue,tr("The string ''{0}'' is not a valid double value.", tfLatValue.getText()));
+            } catch (NumberFormatException ex) {
+                setErrorMessage(tfLatValue, tr("The string ''{0}'' is not a valid double value.", tfLatValue.getText()));
                 return;
             }
             if (!LatLon.isValidLat(value)) {
-                setErrorMessage(tfLatValue,tr("Value for latitude in range [-90,90] required.", tfLatValue.getText()));
+                setErrorMessage(tfLatValue, tr("Value for latitude in range [-90,90] required.", tfLatValue.getText()));
                 return;
             }
             resetErrorMessage(tfLatValue);
@@ -230,12 +231,12 @@ public class BoundingBoxSelection implements DownloadSelection {
             double value = 0;
             try {
                 value = Double.parseDouble(tfLonValue.getText());
-            } catch(NumberFormatException ex) {
-                setErrorMessage(tfLonValue,tr("The string ''{0}'' is not a valid double value.", tfLonValue.getText()));
+            } catch (NumberFormatException ex) {
+                setErrorMessage(tfLonValue, tr("The string ''{0}'' is not a valid double value.", tfLonValue.getText()));
                 return;
             }
             if (!LatLon.isValidLon(value)) {
-                setErrorMessage(tfLonValue,tr("Value for longitude in range [-180,180] required.", tfLonValue.getText()));
+                setErrorMessage(tfLonValue, tr("Value for longitude in range [-180,180] required.", tfLonValue.getText()));
                 return;
             }
             resetErrorMessage(tfLonValue);
@@ -254,6 +255,7 @@ public class BoundingBoxSelection implements DownloadSelection {
 
     static class SelectAllOnFocusHandler extends FocusAdapter {
         private JTextComponent tfTarget;
+
         public SelectAllOnFocusHandler(JTextComponent tfTarget) {
             this.tfTarget = tfTarget;
         }
@@ -266,32 +268,40 @@ public class BoundingBoxSelection implements DownloadSelection {
 
     class OsmUrlRefresher implements DocumentListener {
         @Override
-        public void changedUpdate(DocumentEvent e) { parseURL(parent); }
+        public void changedUpdate(DocumentEvent e) {
+            parseURL(parent);
+        }
+
         @Override
-        public void insertUpdate(DocumentEvent e) { parseURL(parent); }
+        public void insertUpdate(DocumentEvent e) {
+            parseURL(parent);
+        }
+
         @Override
-        public void removeUpdate(DocumentEvent e) { parseURL(parent); }
+        public void removeUpdate(DocumentEvent e) {
+            parseURL(parent);
+        }
     }
 
     class BoundingBoxBuilder extends FocusAdapter implements ActionListener {
         protected Bounds build() {
-            double minlon, minlat, maxlon,maxlat;
+            double minlon, minlat, maxlon, maxlat;
             try {
                 minlat = Double.parseDouble(latlon[0].getText().trim());
                 minlon = Double.parseDouble(latlon[1].getText().trim());
                 maxlat = Double.parseDouble(latlon[2].getText().trim());
                 maxlon = Double.parseDouble(latlon[3].getText().trim());
-            } catch(NumberFormatException e) {
+            } catch (NumberFormatException e) {
                 return null;
             }
             if (!LatLon.isValidLon(minlon) || !LatLon.isValidLon(maxlon)
-                    || !LatLon.isValidLat(minlat) || ! LatLon.isValidLat(maxlat))
+                    || !LatLon.isValidLat(minlat) || !LatLon.isValidLat(maxlat))
                 return null;
             if (minlon > maxlon)
                 return null;
             if (minlat > maxlat)
                 return null;
-            return new Bounds(minlat,minlon,maxlat,maxlon);
+            return new Bounds(minlat, minlon, maxlat, maxlon);
         }
 
         protected void refreshBounds() {
diff --git a/src/org/openstreetmap/josm/gui/download/DownloadDialog.java b/src/org/openstreetmap/josm/gui/download/DownloadDialog.java
index efda306..0a33155 100644
--- a/src/org/openstreetmap/josm/gui/download/DownloadDialog.java
+++ b/src/org/openstreetmap/josm/gui/download/DownloadDialog.java
@@ -85,7 +85,7 @@ public class DownloadDialog extends JDialog  {
     protected SideButton btnDownload;
 
     private void makeCheckBoxRespondToEnter(JCheckBox cb) {
-        cb.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0), "doDownload");
+        cb.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "doDownload");
         cb.getActionMap().put("doDownload", actDownload);
     }
 
@@ -102,7 +102,7 @@ public class DownloadDialog extends JDialog  {
         };
 
         // adding the download tasks
-        pnl.add(new JLabel(tr("Data Sources and Types:")), GBC.std().insets(5,5,1,5));
+        pnl.add(new JLabel(tr("Data Sources and Types:")), GBC.std().insets(5, 5, 1, 5));
         cbDownloadOsmData = new JCheckBox(tr("OpenStreetMap data"), true);
         cbDownloadOsmData.setToolTipText(tr("Select to download OSM data in the selected download area."));
         cbDownloadOsmData.getModel().addChangeListener(checkboxChangeListener);
@@ -154,21 +154,24 @@ public class DownloadDialog extends JDialog  {
                 +"Unselect to download into the currently active data layer.</html>"));
 
         cbStartup = new JCheckBox(tr("Open this dialog on startup"));
-        cbStartup.setToolTipText(tr("<html>Autostart ''Download from OSM'' dialog every time JOSM is started.<br>You can open it manually from File menu or toolbar.</html>"));
+        cbStartup.setToolTipText(
+                tr("<html>Autostart ''Download from OSM'' dialog every time JOSM is started.<br>" +
+                        "You can open it manually from File menu or toolbar.</html>"));
         cbStartup.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
                  Main.pref.put("download.autorun", cbStartup.isSelected());
             }});
 
-        pnl.add(cbNewLayer, GBC.std().anchor(GBC.WEST).insets(5,5,5,5));
-        pnl.add(cbStartup, GBC.std().anchor(GBC.WEST).insets(15,5,5,5));
+        pnl.add(cbNewLayer, GBC.std().anchor(GBC.WEST).insets(5, 5, 5, 5));
+        pnl.add(cbStartup, GBC.std().anchor(GBC.WEST).insets(15, 5, 5, 5));
 
-        pnl.add(sizeCheck,  GBC.eol().anchor(GBC.EAST).insets(5,5,5,2));
+        pnl.add(sizeCheck,  GBC.eol().anchor(GBC.EAST).insets(5, 5, 5, 2));
 
         if (!ExpertToggleAction.isExpert()) {
-            JLabel infoLabel  = new JLabel(tr("Use left click&drag to select area, arrows or right mouse button to scroll map, wheel or +/- to zoom."));
-            pnl.add(infoLabel,GBC.eol().anchor(GBC.SOUTH).insets(0,0,0,0));
+            JLabel infoLabel  = new JLabel(
+                    tr("Use left click&drag to select area, arrows or right mouse button to scroll map, wheel or +/- to zoom."));
+            pnl.add(infoLabel, GBC.eol().anchor(GBC.SOUTH).insets(0, 0, 0, 0));
         }
         return pnl;
     }
@@ -200,12 +203,12 @@ public class DownloadDialog extends JDialog  {
         InputMapUtils.enableEnter(btnCancel);
 
         // -- cancel on ESC
-        getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE,0), "cancel");
+        getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "cancel");
         getRootPane().getActionMap().put("cancel", actCancel);
 
         // -- help button
         SideButton btnHelp;
-        pnl.add(btnHelp = new SideButton(new ContextSensitiveHelpAction(ht("/Action/Download"))));
+        pnl.add(btnHelp = new SideButton(new ContextSensitiveHelpAction(getRootPane().getClientProperty("help").toString())));
         InputMapUtils.enableEnter(btnHelp);
 
         return pnl;
@@ -216,7 +219,17 @@ public class DownloadDialog extends JDialog  {
      * @param parent the parent component
      */
     public DownloadDialog(Component parent) {
-        super(JOptionPane.getFrameForComponent(parent),tr("Download"), ModalityType.DOCUMENT_MODAL);
+        this(parent, ht("/Action/Download"));
+    }
+
+    /**
+     * Constructs a new {@code DownloadDialog}.
+     * @param parent the parent component
+     * @param helpTopic the help topic to assign
+     */
+    public DownloadDialog(Component parent, String helpTopic) {
+        super(JOptionPane.getFrameForComponent(parent), tr("Download"), ModalityType.DOCUMENT_MODAL);
+        HelpUtil.setHelpContext(getRootPane(), helpTopic);
         getContentPane().setLayout(new BorderLayout());
         getContentPane().add(buildMainPanel(), BorderLayout.CENTER);
         getContentPane().add(buildButtonPanel(), BorderLayout.SOUTH);
@@ -237,7 +250,6 @@ public class DownloadDialog extends JDialog  {
                 }
             }
         });
-        HelpUtil.setHelpContext(getRootPane(), ht("/Action/Download"));
         addWindowListener(new WindowEventHandler());
         restoreSettings();
     }
@@ -280,8 +292,8 @@ public class DownloadDialog extends JDialog  {
     }
 
     /**
-     * Invoked by
-     * @param b
+     * Starts download for the given bounding box
+     * @param b bounding box to download
      */
     public void startDownload(Bounds b) {
         this.currentBounds = b;
@@ -366,7 +378,7 @@ public class DownloadDialog extends JDialog  {
         cbDownloadGpxData.setSelected(Main.pref.getBoolean("download.gps", false));
         cbDownloadNotes.setSelected(Main.pref.getBoolean("download.notes", false));
         cbNewLayer.setSelected(Main.pref.getBoolean("download.newlayer", false));
-        cbStartup.setSelected( isAutorunEnabled() );
+        cbStartup.setSelected(isAutorunEnabled());
         int idx = Main.pref.getInteger("download.tab", 0);
         if (idx < 0 || idx > tpDownloadAreaSelectors.getTabCount()) {
             idx = 0;
@@ -379,9 +391,8 @@ public class DownloadDialog extends JDialog  {
                     mv.getLatLon(0, mv.getHeight()),
                     mv.getLatLon(mv.getWidth(), 0)
             );
-            boundingBoxChanged(currentBounds,null);
-        }
-        else {
+            boundingBoxChanged(currentBounds, null);
+        } else {
             Bounds bounds = getSavedDownloadBounds();
             if (bounds != null) {
                 currentBounds = bounds;
@@ -412,7 +423,7 @@ public class DownloadDialog extends JDialog  {
      * @return {@code true} if the download dialog must be open at startup, {@code false} otherwise
      */
     public static boolean isAutorunEnabled() {
-        return Main.pref.getBoolean("download.autorun",false);
+        return Main.pref.getBoolean("download.autorun", false);
     }
 
     public static void autostartIfNeeded() {
@@ -436,7 +447,7 @@ public class DownloadDialog extends JDialog  {
                     getClass().getName() + ".geometry",
                     WindowGeometry.centerInWindow(
                             getParent(),
-                            new Dimension(1000,600)
+                            new Dimension(1000, 600)
                     )
             ).applySafe(this);
         } else if (isShowing()) { // Avoid IllegalComponentStateException like in #8775
diff --git a/src/org/openstreetmap/josm/gui/download/DownloadSelection.java b/src/org/openstreetmap/josm/gui/download/DownloadSelection.java
index d083b6a..6d04511 100644
--- a/src/org/openstreetmap/josm/gui/download/DownloadSelection.java
+++ b/src/org/openstreetmap/josm/gui/download/DownloadSelection.java
@@ -16,5 +16,5 @@ public interface DownloadSelection  {
      *
      * @param area the current download area
      */
-    public void setDownloadArea(Bounds area);
+    void setDownloadArea(Bounds area);
 }
diff --git a/src/org/openstreetmap/josm/gui/download/PlaceSelection.java b/src/org/openstreetmap/josm/gui/download/PlaceSelection.java
index c9ce718..ba75a18 100644
--- a/src/org/openstreetmap/josm/gui/download/PlaceSelection.java
+++ b/src/org/openstreetmap/josm/gui/download/PlaceSelection.java
@@ -69,36 +69,37 @@ public class PlaceSelection implements DownloadSelection {
     private static final String HISTORY_KEY = "download.places.history";
 
     private HistoryComboBox cbSearchExpression;
-    private JButton btnSearch;
     private NamedResultTableModel model;
     private NamedResultTableColumnModel columnmodel;
     private JTable tblSearchResults;
     private DownloadDialog parent;
     private static final Server[] SERVERS = new Server[] {
-        new Server("Nominatim","https://nominatim.openstreetmap.org/search?format=xml&q=",tr("Class Type"),tr("Bounds"))
+        new Server("Nominatim", "https://nominatim.openstreetmap.org/search?format=xml&q=", tr("Class Type"), tr("Bounds"))
     };
     private final JosmComboBox<Server> server = new JosmComboBox<>(SERVERS);
 
     private static class Server {
-        public String name;
-        public String url;
-        public String thirdcol;
-        public String fourthcol;
-        @Override
-        public String toString() {
-            return name;
-        }
+        public final String name;
+        public final String url;
+        public final String thirdcol;
+        public final String fourthcol;
+
         public Server(String n, String u, String t, String f) {
             name = n;
             url = u;
             thirdcol = t;
             fourthcol = f;
         }
+
+        @Override
+        public String toString() {
+            return name;
+        }
     }
 
     protected JPanel buildSearchPanel() {
         JPanel lpanel = new JPanel();
-        lpanel.setLayout(new GridLayout(2,2));
+        lpanel.setLayout(new GridLayout(2, 2));
         JPanel panel = new JPanel();
         panel.setLayout(new GridBagLayout());
 
@@ -121,9 +122,9 @@ public class PlaceSelection implements DownloadSelection {
 
         panel.add(lpanel, GBC.std().fill(GBC.HORIZONTAL).insets(5, 5, 0, 5));
         SearchAction searchAction = new SearchAction();
-        btnSearch = new JButton(searchAction);
-        ((JTextField)cbSearchExpression.getEditor().getEditorComponent()).getDocument().addDocumentListener(searchAction);
-        ((JTextField)cbSearchExpression.getEditor().getEditorComponent()).addActionListener(searchAction);
+        JButton btnSearch = new JButton(searchAction);
+        ((JTextField) cbSearchExpression.getEditor().getEditorComponent()).getDocument().addDocumentListener(searchAction);
+        ((JTextField) cbSearchExpression.getEditor().getEditorComponent()).addActionListener(searchAction);
 
         panel.add(btnSearch, GBC.eol().insets(5, 5, 0, 5));
 
@@ -147,7 +148,7 @@ public class PlaceSelection implements DownloadSelection {
         tblSearchResults = new JTable(model, columnmodel);
         tblSearchResults.setSelectionModel(selectionModel);
         JScrollPane scrollPane = new JScrollPane(tblSearchResults);
-        scrollPane.setPreferredSize(new Dimension(200,200));
+        scrollPane.setPreferredSize(new Dimension(200, 200));
         panel.add(scrollPane, BorderLayout.CENTER);
 
         gui.addDownloadAreaSelector(panel, tr("Areas around places"));
@@ -216,7 +217,7 @@ public class PlaceSelection implements DownloadSelection {
                     currentResult = new PlaceSelection.SearchResult();
                     currentResult.name = atts.getValue("name");
                     currentResult.info = atts.getValue("info");
-                    if(currentResult.info != null) {
+                    if (currentResult.info != null) {
                         currentResult.info = tr(currentResult.info);
                     }
                     currentResult.lat = Double.parseDouble(atts.getValue("lat"));
@@ -288,14 +289,14 @@ public class PlaceSelection implements DownloadSelection {
 
         public SearchAction() {
             putValue(NAME, tr("Search ..."));
-            putValue(SMALL_ICON, ImageProvider.get("dialogs","search"));
+            putValue(SMALL_ICON, ImageProvider.get("dialogs", "search"));
             putValue(SHORT_DESCRIPTION, tr("Click to start searching for places"));
             updateEnabledState();
         }
 
         @Override
         public void actionPerformed(ActionEvent e) {
-            if (!isEnabled() || cbSearchExpression.getText().trim().length() == 0)
+            if (!isEnabled() || cbSearchExpression.getText().trim().isEmpty())
                 return;
             cbSearchExpression.addCurrentItemToHistory();
             Main.pref.putCollection(HISTORY_KEY, cbSearchExpression.getHistory());
@@ -304,7 +305,7 @@ public class PlaceSelection implements DownloadSelection {
         }
 
         protected final void updateEnabledState() {
-            setEnabled(cbSearchExpression.getText().trim().length() > 0);
+            setEnabled(!cbSearchExpression.getText().trim().isEmpty());
         }
 
         @Override
@@ -333,9 +334,9 @@ public class PlaceSelection implements DownloadSelection {
         private Exception lastException;
 
         public NameQueryTask(String searchExpression) {
-            super(tr("Querying name server"),false /* don't ignore exceptions */);
+            super(tr("Querying name server"), false /* don't ignore exceptions */);
             this.searchExpression = searchExpression;
-            useserver = (Server)server.getSelectedItem();
+            useserver = (Server) server.getSelectedItem();
             Main.pref.put("namefinder.server", useserver.name);
         }
 
@@ -368,17 +369,17 @@ public class PlaceSelection implements DownloadSelection {
             try {
                 getProgressMonitor().indeterminateSubTask(tr("Querying name server ..."));
                 URL url = new URL(urlString);
-                synchronized(this) {
+                synchronized (this) {
                     connection = Utils.openHttpConnection(url);
                 }
-                connection.setConnectTimeout(Main.pref.getInteger("socket.timeout.connect",15)*1000);
+                connection.setConnectTimeout(Main.pref.getInteger("socket.timeout.connect", 15)*1000);
                 try (
                     InputStream inputStream = connection.getInputStream();
                     Reader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
                 ) {
                     InputSource inputSource = new InputSource(reader);
                     NameFinderResultParser parser = new NameFinderResultParser();
-                    Utils.newSafeSAXParser().parse(inputSource, parser);
+                    Utils.parseSafeSAX(inputSource, parser);
                     this.data = parser.getResult();
                 }
             } catch (SAXParseException e) {
@@ -415,6 +416,7 @@ public class PlaceSelection implements DownloadSelection {
             data = new ArrayList<>();
             this.selectionModel = selectionModel;
         }
+
         @Override
         public int getRowCount() {
             if (data == null) return 0;
@@ -435,6 +437,7 @@ public class PlaceSelection implements DownloadSelection {
             }
             fireTableDataChanged();
         }
+
         @Override
         public boolean isCellEditable(int row, int column) {
             return false;
@@ -486,6 +489,7 @@ public class PlaceSelection implements DownloadSelection {
             col4.setCellRenderer(renderer);
             addColumn(col4);
         }
+
         public void setHeadlines(String third, String fourth) {
             col3.setHeaderValue(third);
             col4.setHeaderValue(fourth);
@@ -509,9 +513,12 @@ public class PlaceSelection implements DownloadSelection {
 
     static class NamedResultCellRenderer extends JLabel implements TableCellRenderer {
 
+        /**
+         * Constructs a new {@code NamedResultCellRenderer}.
+         */
         public NamedResultCellRenderer() {
             setOpaque(true);
-            setBorder(BorderFactory.createEmptyBorder(2,2,2,2));
+            setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
         }
 
         protected void reset() {
@@ -533,14 +540,14 @@ public class PlaceSelection implements DownloadSelection {
             StringBuilder ret = new StringBuilder();
             StringBuilder line = new StringBuilder();
             StringTokenizer tok = new StringTokenizer(description, " ");
-            while(tok.hasMoreElements()) {
+            while (tok.hasMoreElements()) {
                 String t = tok.nextToken();
                 if (line.length() == 0) {
                     line.append(t);
                 } else if (line.length() < 80) {
-                    line.append(" ").append(t);
+                    line.append(' ').append(t);
                 } else {
-                    line.append(" ").append(t).append("<br>");
+                    line.append(' ').append(t).append("<br>");
                     ret.append(line);
                     line = new StringBuilder();
                 }
@@ -570,7 +577,7 @@ public class PlaceSelection implements DownloadSelection {
                 setText(sr.nearestPlace);
                 break;
             case 3:
-                if(sr.bounds != null) {
+                if (sr.bounds != null) {
                     setText(sr.bounds.toShortString(new DecimalFormat("0.000")));
                 } else {
                     setText(sr.zoom != 0 ? Integer.toString(sr.zoom) : tr("unknown"));
diff --git a/src/org/openstreetmap/josm/gui/download/SlippyMapChooser.java b/src/org/openstreetmap/josm/gui/download/SlippyMapChooser.java
index 08a780d..80a2c91 100644
--- a/src/org/openstreetmap/josm/gui/download/SlippyMapChooser.java
+++ b/src/org/openstreetmap/josm/gui/download/SlippyMapChooser.java
@@ -51,24 +51,21 @@ public class SlippyMapChooser extends JPanel implements DownloadSelection, Prope
     public void propertyChange(PropertyChangeEvent evt) {
         if (evt.getPropertyName().equals(BBoxChooser.BBOX_PROP)) {
             if (iGui != null) {
-                iGui.boundingBoxChanged((Bounds)evt.getNewValue(), this);
+                iGui.boundingBoxChanged((Bounds) evt.getNewValue(), this);
             }
-        } else if(evt.getPropertyName().equals(SlippyMapBBoxChooser.RESIZE_PROP)) {
+        } else if (evt.getPropertyName().equals(SlippyMapBBoxChooser.RESIZE_PROP)) {
             int w, h;
 
             // retrieve the size of the display
             Dimension iScreenSize = Toolkit.getDefaultToolkit().getScreenSize();
 
-            // enlarge
-            if(iDownloadDialogDimension == null) {
-                // make the each dimension 90% of the absolute display size
+            if (iDownloadDialogDimension == null) {
+                // enlarge: make the each dimension 90% of the absolute display size
                 w = iScreenSize.width * 90 / 100;
                 h = iScreenSize.height * 90 / 100;
                 iDownloadDialogDimension = iGui.getSize();
-            }
-            // shrink
-            else {
-                // set the size back to the initial dimensions
+            } else {
+                // shrink: set the size back to the initial dimensions
                 w = iDownloadDialogDimension.width;
                 h = iDownloadDialogDimension.height;
                 iDownloadDialogDimension = null;
diff --git a/src/org/openstreetmap/josm/gui/download/TileSelection.java b/src/org/openstreetmap/josm/gui/download/TileSelection.java
index 6dcb6da..1a997ba 100644
--- a/src/org/openstreetmap/josm/gui/download/TileSelection.java
+++ b/src/org/openstreetmap/josm/gui/download/TileSelection.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.download;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -9,6 +9,7 @@ import java.beans.PropertyChangeListener;
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.gui.bbox.BBoxChooser;
 import org.openstreetmap.josm.gui.bbox.TileSelectionBBoxChooser;
+
 /**
  * Tile selector.
  *
@@ -47,7 +48,7 @@ public class TileSelection implements DownloadSelection, PropertyChangeListener
     @Override
     public void propertyChange(PropertyChangeEvent evt) {
         if (evt.getPropertyName().equals(BBoxChooser.BBOX_PROP)) {
-            Bounds bbox = (Bounds)evt.getNewValue();
+            Bounds bbox = (Bounds) evt.getNewValue();
             parent.boundingBoxChanged(bbox, this);
         }
     }
diff --git a/src/org/openstreetmap/josm/gui/download/package-info.java b/src/org/openstreetmap/josm/gui/download/package-info.java
new file mode 100644
index 0000000..692d0bf
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/download/package-info.java
@@ -0,0 +1,6 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Provides GUI classes for the download dialog.
+ */
+package org.openstreetmap.josm.gui.download;
diff --git a/src/org/openstreetmap/josm/gui/help/HelpBrowser.java b/src/org/openstreetmap/josm/gui/help/HelpBrowser.java
index 9872884..1fae63f 100644
--- a/src/org/openstreetmap/josm/gui/help/HelpBrowser.java
+++ b/src/org/openstreetmap/josm/gui/help/HelpBrowser.java
@@ -143,7 +143,7 @@ public class HelpBrowser extends JDialog {
             String line = null;
             while ((line = reader.readLine()) != null) {
                 css.append(line);
-                css.append("\n");
+                css.append('\n');
             }
         } catch (Exception e) {
             Main.error(tr("Failed to read CSS file ''help-browser.css''. Exception is: {0}", e.toString()));
@@ -181,7 +181,7 @@ public class HelpBrowser extends JDialog {
 
         p.add(new JScrollPane(help), BorderLayout.CENTER);
 
-        addWindowListener(new WindowAdapter(){
+        addWindowListener(new WindowAdapter() {
             @Override public void windowClosing(WindowEvent e) {
                 setVisible(false);
             }
@@ -189,7 +189,7 @@ public class HelpBrowser extends JDialog {
 
         p.add(buildToolBar(), BorderLayout.NORTH);
         help.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "Close");
-        help.getActionMap().put("Close", new AbstractAction(){
+        help.getActionMap().put("Close", new AbstractAction() {
             @Override
             public void actionPerformed(ActionEvent e) {
                 setVisible(false);
@@ -207,18 +207,18 @@ public class HelpBrowser extends JDialog {
                     getClass().getName() + ".geometry",
                     WindowGeometry.centerInWindow(
                             getParent(),
-                            new Dimension(600,400)
+                            new Dimension(600, 400)
                     )
             ).applySafe(this);
         } else if (isShowing()) { // Avoid IllegalComponentStateException like in #8775
             new WindowGeometry(this).remember(getClass().getName() + ".geometry");
         }
         if (Main.main != null && Main.main.menu != null && Main.main.menu.windowMenu != null) {
-            if(windowMenuItem != null && !visible) {
+            if (windowMenuItem != null && !visible) {
                 Main.main.menu.windowMenu.remove(windowMenuItem);
                 windowMenuItem = null;
             }
-            if(windowMenuItem == null && visible) {
+            if (windowMenuItem == null && visible) {
                 windowMenuItem = MainMenu.add(Main.main.menu.windowMenu, focusAction, MainMenu.WINDOW_MENU_GROUP.VOLATILE);
             }
         }
@@ -305,29 +305,29 @@ public class HelpBrowser extends JDialog {
         String content = null;
         try {
             content = reader.fetchHelpTopicContent(url, true);
-        } catch(MissingHelpContentException e) {
+        } catch (MissingHelpContentException e) {
             url = HelpUtil.getHelpTopicUrl(HelpUtil.buildAbsoluteHelpTopic(relativeHelpTopic, LocaleType.BASELANGUAGE));
             try {
                 content = reader.fetchHelpTopicContent(url, true);
-            } catch(MissingHelpContentException e1) {
+            } catch (MissingHelpContentException e1) {
                 url = HelpUtil.getHelpTopicUrl(HelpUtil.buildAbsoluteHelpTopic(relativeHelpTopic, LocaleType.ENGLISH));
                 try {
                     content = reader.fetchHelpTopicContent(url, true);
-                } catch(MissingHelpContentException e2) {
+                } catch (MissingHelpContentException e2) {
                     this.url = url;
                     handleMissingHelpContent(relativeHelpTopic);
                     return;
-                } catch(HelpContentReaderException e2) {
+                } catch (HelpContentReaderException e2) {
                     Main.error(e2);
                     handleHelpContentReaderException(relativeHelpTopic, e2);
                     return;
                 }
-            } catch(HelpContentReaderException e1) {
+            } catch (HelpContentReaderException e1) {
                 Main.error(e1);
                 handleHelpContentReaderException(relativeHelpTopic, e1);
                 return;
             }
-        } catch(HelpContentReaderException e) {
+        } catch (HelpContentReaderException e) {
             Main.error(e);
             handleHelpContentReaderException(relativeHelpTopic, e);
             return;
@@ -348,11 +348,11 @@ public class HelpBrowser extends JDialog {
         String content = null;
         try {
             content = reader.fetchHelpTopicContent(url, true);
-        } catch(MissingHelpContentException e) {
+        } catch (MissingHelpContentException e) {
             this.url = url;
             handleMissingHelpContent(absoluteHelpTopic);
             return;
-        } catch(HelpContentReaderException e) {
+        } catch (HelpContentReaderException e) {
             Main.error(e);
             handleHelpContentReaderException(absoluteHelpTopic, e);
             return;
@@ -385,7 +385,7 @@ public class HelpBrowser extends JDialog {
                 loadTopic(content);
                 history.setCurrentUrl(url);
                 this.url = url;
-            } catch(Exception e) {
+            } catch (Exception e) {
                 Main.warn(e);
                 HelpAwareOptionPane.showOptionDialog(
                         Main.parent,
@@ -438,15 +438,18 @@ public class HelpBrowser extends JDialog {
     }
 
     class EditAction extends AbstractAction {
+        /**
+         * Constructs a new {@code EditAction}.
+         */
         public EditAction() {
             putValue(SHORT_DESCRIPTION, tr("Edit the current help page"));
-            putValue(SMALL_ICON,ImageProvider.get("dialogs", "edit"));
+            putValue(SMALL_ICON, ImageProvider.get("dialogs", "edit"));
         }
 
         @Override
         public void actionPerformed(ActionEvent e) {
             String url = getUrl();
-            if(url == null)
+            if (url == null)
                 return;
             if (!url.startsWith(HelpUtil.getWikiBaseHelpUrl())) {
                 String message = tr(
@@ -483,6 +486,7 @@ public class HelpBrowser extends JDialog {
 
     static class BackAction extends AbstractAction implements Observer {
         private transient HelpBrowserHistory history;
+
         public BackAction(HelpBrowserHistory history) {
             this.history = history;
             history.addObserver(this);
@@ -495,6 +499,7 @@ public class HelpBrowser extends JDialog {
         public void actionPerformed(ActionEvent e) {
             history.back();
         }
+
         @Override
         public void update(Observable o, Object arg) {
             setEnabled(history.canGoBack());
@@ -503,6 +508,7 @@ public class HelpBrowser extends JDialog {
 
     static class ForwardAction extends AbstractAction implements Observer {
         private transient HelpBrowserHistory history;
+
         public ForwardAction(HelpBrowserHistory history) {
             this.history = history;
             history.addObserver(this);
@@ -515,6 +521,7 @@ public class HelpBrowser extends JDialog {
         public void actionPerformed(ActionEvent e) {
             history.forward();
         }
+
         @Override
         public void update(Observable o, Object arg) {
             setEnabled(history.canGoForward());
@@ -522,6 +529,9 @@ public class HelpBrowser extends JDialog {
     }
 
     class HomeAction extends AbstractAction  {
+        /**
+         * Constructs a new {@code HomeAction}.
+         */
         public HomeAction() {
             putValue(SHORT_DESCRIPTION, tr("Go to the JOSM help home page"));
             putValue(SMALL_ICON, ImageProvider.get("help", "home"));
@@ -577,10 +587,10 @@ public class HelpBrowser extends JDialog {
             AttributeSet set = e.getSourceElement().getAttributes();
             Object value = set.getAttribute(Tag.A);
             if (!(value instanceof SimpleAttributeSet)) return null;
-            SimpleAttributeSet atts = (SimpleAttributeSet)value;
+            SimpleAttributeSet atts = (SimpleAttributeSet) value;
             value = atts.getAttribute(javax.swing.text.html.HTML.Attribute.HREF);
             if (value == null) return null;
-            String s = (String)value;
+            String s = (String) value;
             if (s.matches("#.*"))
                 return s.substring(1);
             return null;
@@ -591,9 +601,7 @@ public class HelpBrowser extends JDialog {
             if (e.getEventType() != HyperlinkEvent.EventType.ACTIVATED)
                 return;
             if (e.getURL() == null || e.getURL().toString().startsWith(url+"#")) {
-                // Probably hyperlink event on a an A-element with a href consisting of
-                // a fragment only, i.e. "#ALocalFragment".
-                //
+                // Probably hyperlink event on a an A-element with a href consisting of a fragment only, i.e. "#ALocalFragment".
                 String fragment = getUrlFragment(e);
                 if (fragment != null) {
                     // first try to scroll to an element with id==fragment. This is the way
diff --git a/src/org/openstreetmap/josm/gui/help/HelpBrowserHistory.java b/src/org/openstreetmap/josm/gui/help/HelpBrowserHistory.java
index 53d82c6..2a5e250 100644
--- a/src/org/openstreetmap/josm/gui/help/HelpBrowserHistory.java
+++ b/src/org/openstreetmap/josm/gui/help/HelpBrowserHistory.java
@@ -50,21 +50,20 @@ public class HelpBrowserHistory extends Observable {
     }
 
     public void setCurrentUrl(String url) {
-        boolean add=true;
+        boolean add = true;
 
         if (historyPos >= 0 && historyPos < history.size() && history.get(historyPos).equals(url)) {
             add = false;
         } else if (historyPos == history.size() -1) {
             // do nothing just append
-        } else if (historyPos ==0 && !history.isEmpty()) {
+        } else if (historyPos == 0 && !history.isEmpty()) {
             history = new ArrayList<>(Collections.singletonList(history.get(0)));
         } else if (historyPos < history.size() -1 && historyPos > 0) {
             history = new ArrayList<>(history.subList(0, historyPos));
         } else {
             history = new ArrayList<>();
         }
-        if(add)
-        {
+        if (add) {
             history.add(url);
             historyPos = history.size()-1;
         }
diff --git a/src/org/openstreetmap/josm/gui/help/HelpContentReader.java b/src/org/openstreetmap/josm/gui/help/HelpContentReader.java
index 9459c2c..14c569c 100644
--- a/src/org/openstreetmap/josm/gui/help/HelpContentReader.java
+++ b/src/org/openstreetmap/josm/gui/help/HelpContentReader.java
@@ -9,6 +9,7 @@ import java.net.MalformedURLException;
 import java.net.URL;
 import java.nio.charset.StandardCharsets;
 
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.WikiReader;
 
@@ -42,7 +43,7 @@ public class HelpContentReader extends WikiReader {
      * @throws MissingHelpContentException if this helpTopicUrl doesn't point to an existing Wiki help page
      */
     public String fetchHelpTopicContent(String helpTopicUrl, boolean dotest) throws HelpContentReaderException {
-        if(helpTopicUrl == null)
+        if (helpTopicUrl == null)
             throw new MissingHelpContentException("helpTopicUrl is null");
         HttpURLConnection con = null;
         try {
@@ -52,15 +53,18 @@ public class HelpContentReader extends WikiReader {
             try (BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream(), StandardCharsets.UTF_8))) {
                 return prepareHelpContent(in, dotest, u);
             }
-        } catch(MalformedURLException e) {
+        } catch (MalformedURLException e) {
             throw new HelpContentReaderException(e);
-        } catch(IOException e) {
+        } catch (IOException e) {
             HelpContentReaderException ex = new HelpContentReaderException(e);
             if (con != null) {
                 try {
                     ex.setResponseCode(con.getResponseCode());
-                } catch(IOException e1) {
+                } catch (IOException e1) {
                     // ignore
+                    if (Main.isTraceEnabled()) {
+                        Main.trace(e1.getMessage());
+                    }
                 }
             }
             throw ex;
@@ -84,10 +88,10 @@ public class HelpContentReader extends WikiReader {
         String s = "";
         try {
             s = readFromTrac(in, url);
-        } catch(IOException e) {
+        } catch (IOException e) {
             throw new HelpContentReaderException(e);
         }
-        if(dotest && s.isEmpty())
+        if (dotest && s.isEmpty())
             throw new MissingHelpContentException(s);
         return s;
     }
diff --git a/src/org/openstreetmap/josm/gui/help/HelpUtil.java b/src/org/openstreetmap/josm/gui/help/HelpUtil.java
index 27de517..d6d0320 100644
--- a/src/org/openstreetmap/josm/gui/help/HelpUtil.java
+++ b/src/org/openstreetmap/josm/gui/help/HelpUtil.java
@@ -51,7 +51,7 @@ public final class HelpUtil {
      * @see #buildAbsoluteHelpTopic
      */
     public static String getHelpTopicUrl(String absoluteHelpTopic) {
-        if(absoluteHelpTopic == null)
+        if (absoluteHelpTopic == null)
             return null;
         String ret = getWikiBaseHelpUrl();
         ret = ret.replaceAll("\\/+$", "");
@@ -98,7 +98,7 @@ public final class HelpUtil {
      * @return the absolute help topic in the URL, i.e. "/De:Help/Action/New"
      */
     public static String extractAbsoluteHelpTopic(String url) {
-        if (!url.startsWith(getWikiBaseHelpUrl())) return null;
+        if (url == null || !url.startsWith(getWikiBaseHelpUrl())) return null;
         url = url.substring(getWikiBaseHelpUrl().length());
         String prefix = getHelpTopicPrefix(LocaleType.ENGLISH);
         if (url.startsWith(prefix))
@@ -124,7 +124,7 @@ public final class HelpUtil {
      */
     private static String getHelpTopicPrefix(LocaleType type) {
         String ret = LanguageInfo.getWikiLanguagePrefix(type);
-        if(ret == null)
+        if (ret == null)
             return ret;
         ret = "/" + ret + Main.pref.get("help.pathhelp", "/Help").replaceAll("^\\/+", ""); // remove leading /
         return ret.replaceAll("\\/+", "\\/"); // collapse sequences of //
@@ -143,7 +143,7 @@ public final class HelpUtil {
      */
     public static String buildAbsoluteHelpTopic(String topic, LocaleType type) {
         String prefix = getHelpTopicPrefix(type);
-        if (prefix == null || topic == null || topic.trim().length() == 0 || "/".equals(topic.trim()))
+        if (prefix == null || topic == null || topic.trim().isEmpty() || "/".equals(topic.trim()))
             return prefix;
         prefix += "/" + topic;
         return prefix.replaceAll("\\/+", "\\/"); // collapse sequences of //
@@ -159,25 +159,25 @@ public final class HelpUtil {
         if (context == null)
             return null;
         if (context instanceof Helpful)
-            return ((Helpful)context).helpTopic();
+            return ((Helpful) context).helpTopic();
         if (context instanceof JMenu) {
-            JMenu b = (JMenu)context;
+            JMenu b = (JMenu) context;
             if (b.getClientProperty("help") != null)
-                return (String)b.getClientProperty("help");
+                return (String) b.getClientProperty("help");
             return null;
         }
         if (context instanceof AbstractButton) {
-            AbstractButton b = (AbstractButton)context;
+            AbstractButton b = (AbstractButton) context;
             if (b.getClientProperty("help") != null)
-                return (String)b.getClientProperty("help");
+                return (String) b.getClientProperty("help");
             return getContextSpecificHelpTopic(b.getAction());
         }
         if (context instanceof Action)
-            return (String)((Action)context).getValue("help");
-        if (context instanceof JComponent && ((JComponent)context).getClientProperty("help") != null)
-            return (String)((JComponent)context).getClientProperty("help");
+            return (String) ((Action) context).getValue("help");
+        if (context instanceof JComponent && ((JComponent) context).getClientProperty("help") != null)
+            return (String) ((JComponent) context).getClientProperty("help");
         if (context instanceof Component)
-            return getContextSpecificHelpTopic(((Component)context).getParent());
+            return getContextSpecificHelpTopic(((Component) context).getParent());
         return null;
     }
 
diff --git a/src/org/openstreetmap/josm/gui/help/package-info.java b/src/org/openstreetmap/josm/gui/help/package-info.java
new file mode 100644
index 0000000..780dc64
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/help/package-info.java
@@ -0,0 +1,6 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Help system based on an embedded web browser fetching contents from JOSM wiki.
+ */
+package org.openstreetmap.josm.gui.help;
diff --git a/src/org/openstreetmap/josm/gui/history/CoordinateInfoViewer.java b/src/org/openstreetmap/josm/gui/history/CoordinateInfoViewer.java
index c726efd..670a60c 100644
--- a/src/org/openstreetmap/josm/gui/history/CoordinateInfoViewer.java
+++ b/src/org/openstreetmap/josm/gui/history/CoordinateInfoViewer.java
@@ -28,7 +28,7 @@ import org.openstreetmap.josm.tools.CheckParameterUtil;
 public class CoordinateInfoViewer extends JPanel {
 
     /** background color used when the coordinates are different */
-    public static final Color BGCOLOR_DIFFERENCE = new Color(255,197,197);
+    public static final Color BGCOLOR_DIFFERENCE = new Color(255, 197, 197);
 
     /** the model */
     private transient HistoryBrowserModel model;
@@ -54,11 +54,11 @@ public class CoordinateInfoViewer extends JPanel {
         gc.gridheight = 1;
         gc.weightx = 0.5;
         gc.weighty = 0.0;
-        gc.insets = new Insets(5,5,5,0);
+        gc.insets = new Insets(5, 5, 5, 0);
         gc.fill = GridBagConstraints.HORIZONTAL;
         gc.anchor = GridBagConstraints.FIRST_LINE_START;
         referenceInfoPanel = new VersionInfoPanel(model, PointInTimeType.REFERENCE_POINT_IN_TIME);
-        add(referenceInfoPanel,gc);
+        add(referenceInfoPanel, gc);
 
         gc.gridx = 1;
         gc.gridy = 0;
@@ -67,7 +67,7 @@ public class CoordinateInfoViewer extends JPanel {
         gc.weighty = 0.0;
         gc.anchor = GridBagConstraints.FIRST_LINE_START;
         currentInfoPanel = new VersionInfoPanel(model, PointInTimeType.CURRENT_POINT_IN_TIME);
-        add(currentInfoPanel,gc);
+        add(currentInfoPanel, gc);
 
         // ---------------------------
         // the two coordinate panels
@@ -99,7 +99,7 @@ public class CoordinateInfoViewer extends JPanel {
     }
 
     /**
-     *
+     * Constructs a new {@code CoordinateInfoViewer}.
      * @param model the model. Must not be null.
      * @throws IllegalArgumentException if model is null
      */
@@ -173,6 +173,9 @@ public class CoordinateInfoViewer extends JPanel {
         private transient HistoryBrowserModel model;
         private PointInTimeType role;
 
+        protected LatLon coord;
+        protected LatLon oppositeCoord;
+
         protected HistoryOsmPrimitive getPrimitive() {
             if (model == null || role == null)
                 return null;
@@ -195,7 +198,7 @@ public class CoordinateInfoViewer extends JPanel {
             gc.gridy = 0;
             gc.fill = GridBagConstraints.NONE;
             gc.weightx = 0.0;
-            gc.insets = new Insets(5,5,5,5);
+            gc.insets = new Insets(5, 5, 5, 5);
             gc.anchor = GridBagConstraints.NORTHWEST;
             add(new JLabel(tr("Latitude: ")), gc);
 
@@ -207,7 +210,7 @@ public class CoordinateInfoViewer extends JPanel {
             add(lblLat = new JLabel(), gc);
             lblLat.setBackground(Color.WHITE);
             lblLat.setOpaque(true);
-            lblLat.setBorder(BorderFactory.createEmptyBorder(2,2,2,2));
+            lblLat.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
 
             // --------
             gc.gridx = 0;
@@ -225,7 +228,7 @@ public class CoordinateInfoViewer extends JPanel {
             add(lblLon = new JLabel(), gc);
             lblLon.setBackground(Color.WHITE);
             lblLon.setOpaque(true);
-            lblLon.setBorder(BorderFactory.createEmptyBorder(2,2,2,2));
+            lblLon.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
 
             // fill the remaining space
             gc.gridx = 0;
@@ -248,24 +251,27 @@ public class CoordinateInfoViewer extends JPanel {
             this.role = role;
         }
 
-        protected void refresh() {
+        protected final boolean prepareRefresh() {
             HistoryOsmPrimitive p = getPrimitive();
             HistoryOsmPrimitive  opposite = getOppositePrimitive();
-            if (!(p instanceof HistoryNode)) return;
-            if (!(opposite instanceof HistoryNode)) return;
-            HistoryNode node = (HistoryNode)p;
+            if (!(p instanceof HistoryNode)) return false;
+            if (!(opposite instanceof HistoryNode)) return false;
+            HistoryNode node = (HistoryNode) p;
             HistoryNode oppositeNode = (HistoryNode) opposite;
 
-            LatLon coord = node.getCoords();
-            LatLon oppositeCoord = oppositeNode.getCoords();
+            coord = node.getCoords();
+            oppositeCoord = oppositeNode.getCoords();
+            return true;
+        }
+
+        protected void refresh() {
+            if (!prepareRefresh()) return;
 
             // display the coordinates
-            //
             lblLat.setText(coord != null ? coord.latToString(CoordinateFormat.DECIMAL_DEGREES) : tr("(none)"));
             lblLon.setText(coord != null ? coord.lonToString(CoordinateFormat.DECIMAL_DEGREES) : tr("(none)"));
 
             // update background color to reflect differences in the coordinates
-            //
             if (coord == oppositeCoord ||
                     (coord != null && oppositeCoord != null && coord.lat() == oppositeCoord.lat())) {
                 lblLat.setBackground(Color.WHITE);
@@ -305,7 +311,7 @@ public class CoordinateInfoViewer extends JPanel {
             gc.gridy = 0;
             gc.fill = GridBagConstraints.NONE;
             gc.weightx = 0.0;
-            gc.insets = new Insets(5,5,5,5);
+            gc.insets = new Insets(5, 5, 5, 5);
             gc.anchor = GridBagConstraints.NORTHWEST;
             add(new JLabel(tr("Distance: ")), gc);
 
@@ -317,20 +323,12 @@ public class CoordinateInfoViewer extends JPanel {
             add(lblDistance = new JLabel(), gc);
             lblDistance.setBackground(Color.WHITE);
             lblDistance.setOpaque(true);
-            lblDistance.setBorder(BorderFactory.createEmptyBorder(2,2,2,2));
+            lblDistance.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
         }
 
         @Override
         protected void refresh() {
-            HistoryOsmPrimitive p = getPrimitive();
-            HistoryOsmPrimitive opposite = getOppositePrimitive();
-            if (!(p instanceof HistoryNode)) return;
-            if (!(opposite instanceof HistoryNode)) return;
-            HistoryNode node = (HistoryNode) p;
-            HistoryNode oppositeNode = (HistoryNode) opposite;
-
-            LatLon coord = node.getCoords();
-            LatLon oppositeCoord = oppositeNode.getCoords();
+            if (!prepareRefresh()) return;
 
             // update distance
             //
diff --git a/src/org/openstreetmap/josm/gui/history/DiffTableModel.java b/src/org/openstreetmap/josm/gui/history/DiffTableModel.java
index 73bb1f1..21bfb63 100644
--- a/src/org/openstreetmap/josm/gui/history/DiffTableModel.java
+++ b/src/org/openstreetmap/josm/gui/history/DiffTableModel.java
@@ -21,6 +21,7 @@ class DiffTableModel extends AbstractTableModel {
         this.reversed = reversed;
         fireTableDataChanged();
     }
+
     @Override
     public int getRowCount() {
         return rows.size();
@@ -41,7 +42,7 @@ class DiffTableModel extends AbstractTableModel {
     }
 
     public int getFirstChange() {
-        for (int i=0; i<rows.size(); i++) {
+        for (int i = 0; i < rows.size(); i++) {
             if (rows.get(i).state != DiffItemType.SAME)
                 return i;
         }
diff --git a/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialog.java b/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialog.java
index 01a6faf..17bb5e2 100644
--- a/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialog.java
+++ b/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialog.java
@@ -96,12 +96,12 @@ public class HistoryBrowserDialog extends JDialog implements HistoryDataSetListe
         btn.setName("btn.close");
         pnl.add(btn);
 
-        btn = new SideButton(new ContextSensitiveHelpAction(ht("/Dialog/HistoryBrowser")));
+        btn = new SideButton(new ContextSensitiveHelpAction(ht("/Action/ObjectHistory")));
         btn.setName("btn.help");
         pnl.add(btn);
         add(pnl, BorderLayout.SOUTH);
 
-        HelpUtil.setHelpContext(getRootPane(), ht("/Dialog/HistoryBrowser"));
+        HelpUtil.setHelpContext(getRootPane(), ht("/Action/ObjectHistory"));
     }
 
     /**
@@ -124,7 +124,7 @@ public class HistoryBrowserDialog extends JDialog implements HistoryDataSetListe
 
     /**
      * Sets the current history.
-     * @param history
+     * @param history current history
      */
     protected void setHistory(History history) {
         browser.populate(history);
@@ -152,7 +152,6 @@ public class HistoryBrowserDialog extends JDialog implements HistoryDataSetListe
         closeAction.run();
     }
 
-
     class CloseAction extends AbstractAction {
         public CloseAction() {
             putValue(NAME, tr("Close"));
diff --git a/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialogManager.java b/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialogManager.java
index 0b56982..718a0a6 100644
--- a/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialogManager.java
+++ b/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialogManager.java
@@ -32,7 +32,9 @@ import org.openstreetmap.josm.tools.WindowGeometry;
  * Manager allowing to show/hide history dialogs.
  * @since 2019
  */
-public class HistoryBrowserDialogManager implements MapView.LayerChangeListener {
+public final class HistoryBrowserDialogManager implements MapView.LayerChangeListener {
+
+    private static final String WINDOW_GEOMETRY_PREF = HistoryBrowserDialogManager.class.getName() + ".geometry";
 
     private static HistoryBrowserDialogManager instance;
 
@@ -89,8 +91,6 @@ public class HistoryBrowserDialogManager implements MapView.LayerChangeListener
         return false;
     }
 
-    private final String WINDOW_GEOMETRY_PREF = getClass().getName() + ".geometry";
-
     protected void placeOnScreen(HistoryBrowserDialog dialog) {
         WindowGeometry geometry = new WindowGeometry(WINDOW_GEOMETRY_PREF, WindowGeometry.centerOnScreen(new Dimension(850, 500)));
         geometry.applySafe(dialog);
@@ -107,7 +107,7 @@ public class HistoryBrowserDialogManager implements MapView.LayerChangeListener
      * @param dialog History dialog to hide
      */
     public void hide(HistoryBrowserDialog dialog) {
-        for (Iterator<Entry<Long, HistoryBrowserDialog>> it = dialogs.entrySet().iterator(); it.hasNext(); ) {
+        for (Iterator<Entry<Long, HistoryBrowserDialog>> it = dialogs.entrySet().iterator(); it.hasNext();) {
             if (Objects.equals(it.next().getValue(), dialog)) {
                 it.remove();
                 if (dialogs.isEmpty()) {
@@ -153,6 +153,7 @@ public class HistoryBrowserDialogManager implements MapView.LayerChangeListener
     /* ----------------------------------------------------------------------------- */
     @Override
     public void activeLayerChange(Layer oldLayer, Layer newLayer) {}
+
     @Override
     public void layerAdded(Layer newLayer) {}
 
@@ -179,7 +180,7 @@ public class HistoryBrowserDialogManager implements MapView.LayerChangeListener
             return;
         }
 
-        Collection<PrimitiveId> toLoad = Utils.filter(primitives, unloadedHistoryPredicate);
+        Collection<? extends PrimitiveId> toLoad = Utils.filter(primitives, unloadedHistoryPredicate);
         if (!toLoad.isEmpty()) {
             HistoryLoadTask task = new HistoryLoadTask();
             for (PrimitiveId p : notNewPrimitives) {
@@ -225,7 +226,7 @@ public class HistoryBrowserDialogManager implements MapView.LayerChangeListener
                 return true;
             else
                 // reload if the history object of the selected object is not in the cache yet
-                return (!p.isNew() && h.getByVersion(p.getUniqueId()) == null);
+                return !p.isNew() && h.getByVersion(p.getUniqueId()) == null;
         }
     };
 
diff --git a/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java b/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java
index 67ad191..0525456 100644
--- a/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java
+++ b/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java
@@ -137,6 +137,7 @@ public class HistoryBrowserModel extends Observable implements LayerChangeListen
         }
         return false;
     }
+
     protected boolean canShowAsLatest(OsmPrimitive primitive) {
         if (primitive == null) return false;
         if (primitive.isNew() || !primitive.isUsable()) return false;
@@ -223,21 +224,21 @@ public class HistoryBrowserModel extends Observable implements LayerChangeListen
      * TODO: Maybe rename to reflect this? eg. updateNodeListTableModels
      */
     protected void initNodeListTableModels() {
-        if(current.getType() != OsmPrimitiveType.WAY || reference.getType() != OsmPrimitiveType.WAY)
+        if (current.getType() != OsmPrimitiveType.WAY || reference.getType() != OsmPrimitiveType.WAY)
             return;
         TwoColumnDiff diff = new TwoColumnDiff(
-                ((HistoryWay)reference).getNodes().toArray(),
-                ((HistoryWay)current).getNodes().toArray());
+                ((HistoryWay) reference).getNodes().toArray(),
+                ((HistoryWay) current).getNodes().toArray());
         referenceNodeListTableModel.setRows(diff.referenceDiff, diff.referenceReversed);
         currentNodeListTableModel.setRows(diff.currentDiff, false);
     }
 
     protected void initMemberListTableModels() {
-        if(current.getType() != OsmPrimitiveType.RELATION || reference.getType() != OsmPrimitiveType.RELATION)
+        if (current.getType() != OsmPrimitiveType.RELATION || reference.getType() != OsmPrimitiveType.RELATION)
             return;
         TwoColumnDiff diff = new TwoColumnDiff(
-                ((HistoryRelation)reference).getMembers().toArray(),
-                ((HistoryRelation)current).getMembers().toArray());
+                ((HistoryRelation) reference).getMembers().toArray(),
+                ((HistoryRelation) current).getMembers().toArray());
         referenceRelationMemberTableModel.setRows(diff.referenceDiff, diff.referenceReversed);
         currentRelationMemberTableModel.setRows(diff.currentDiff, false);
     }
@@ -299,10 +300,12 @@ public class HistoryBrowserModel extends Observable implements LayerChangeListen
         if (history == null)
             throw new IllegalStateException(tr("History not initialized yet. Failed to set reference primitive."));
         if (reference.getId() != history.getId())
-            throw new IllegalArgumentException(tr("Failed to set reference. Reference ID {0} does not match history ID {1}.", reference.getId(),  history.getId()));
+            throw new IllegalArgumentException(
+                    tr("Failed to set reference. Reference ID {0} does not match history ID {1}.", reference.getId(),  history.getId()));
         HistoryOsmPrimitive primitive = history.getByVersion(reference.getVersion());
         if (primitive == null)
-            throw new IllegalArgumentException(tr("Failed to set reference. Reference version {0} not available in history.", reference.getVersion()));
+            throw new IllegalArgumentException(
+                    tr("Failed to set reference. Reference version {0} not available in history.", reference.getVersion()));
 
         this.reference = reference;
         initTagTableModels();
@@ -329,10 +332,12 @@ public class HistoryBrowserModel extends Observable implements LayerChangeListen
         if (history == null)
             throw new IllegalStateException(tr("History not initialized yet. Failed to set current primitive."));
         if (current.getId() != history.getId())
-            throw new IllegalArgumentException(tr("Failed to set reference. Reference ID {0} does not match history ID {1}.", current.getId(),  history.getId()));
+            throw new IllegalArgumentException(
+                    tr("Failed to set reference. Reference ID {0} does not match history ID {1}.", current.getId(),  history.getId()));
         HistoryOsmPrimitive primitive = history.getByVersion(current.getVersion());
         if (primitive == null)
-            throw new IllegalArgumentException(tr("Failed to set current primitive. Current version {0} not available in history.", current.getVersion()));
+            throw new IllegalArgumentException(
+                    tr("Failed to set current primitive. Current version {0} not available in history.", current.getVersion()));
         this.current = current;
         initTagTableModels();
         initNodeListTableModels();
@@ -531,7 +536,7 @@ public class HistoryBrowserModel extends Observable implements LayerChangeListen
      */
     public class TagTableModel extends AbstractTableModel {
 
-        private transient List<String> keys;
+        private List<String> keys;
         private PointInTimeType pointInTimeType;
 
         protected void initKeyList() {
@@ -563,11 +568,6 @@ public class HistoryBrowserModel extends Observable implements LayerChangeListen
             return keys.get(row);
         }
 
-        @Override
-        public boolean isCellEditable(int row, int column) {
-            return false;
-        }
-
         public boolean hasTag(String key) {
             HistoryOsmPrimitive primitive = getPointInTime(pointInTimeType);
             if (primitive == null)
@@ -735,7 +735,7 @@ public class HistoryBrowserModel extends Observable implements LayerChangeListen
     @Override
     public void activeLayerChange(Layer oldLayer, Layer newLayer) {
         if (oldLayer instanceof OsmDataLayer) {
-            OsmDataLayer l = (OsmDataLayer)oldLayer;
+            OsmDataLayer l = (OsmDataLayer) oldLayer;
             l.data.removeDataSetListener(this);
         }
         if (!(newLayer instanceof OsmDataLayer)) {
@@ -743,7 +743,7 @@ public class HistoryBrowserModel extends Observable implements LayerChangeListen
             fireModelChange();
             return;
         }
-        OsmDataLayer l = (OsmDataLayer)newLayer;
+        OsmDataLayer l = (OsmDataLayer) newLayer;
         l.data.addDataSetListener(this);
         OsmPrimitive primitive = l.data.getPrimitiveById(history.getId(), history.getType());
         HistoryOsmPrimitive latest;
@@ -758,6 +758,7 @@ public class HistoryBrowserModel extends Observable implements LayerChangeListen
 
     @Override
     public void layerAdded(Layer newLayer) {}
+
     @Override
     public void layerRemoved(Layer oldLayer) {}
 
@@ -778,7 +779,7 @@ public class HistoryBrowserModel extends Observable implements LayerChangeListen
         public void visit(Relation r) {
             clone = new HistoryRelation(r.getId(), r.getVersion(), r.isVisible(), getCurrentUser(), 0, null, false);
             clone.setTags(r.getKeys());
-            HistoryRelation hr = (HistoryRelation)clone;
+            HistoryRelation hr = (HistoryRelation) clone;
             for (RelationMember rm : r.getMembers()) {
                 hr.addMember(new RelationMemberData(rm.getRole(), rm.getType(), rm.getUniqueId()));
             }
@@ -789,7 +790,7 @@ public class HistoryBrowserModel extends Observable implements LayerChangeListen
             clone = new HistoryWay(w.getId(), w.getVersion(), w.isVisible(), getCurrentUser(), 0, null, false);
             clone.setTags(w.getKeys());
             for (Node n: w.getNodes()) {
-                ((HistoryWay)clone).addNode(n.getUniqueId());
+                ((HistoryWay) clone).addNode(n.getUniqueId());
             }
         }
 
diff --git a/src/org/openstreetmap/josm/gui/history/HistoryLoadTask.java b/src/org/openstreetmap/josm/gui/history/HistoryLoadTask.java
index 2b27df5..7291b6a 100644
--- a/src/org/openstreetmap/josm/gui/history/HistoryLoadTask.java
+++ b/src/org/openstreetmap/josm/gui/history/HistoryLoadTask.java
@@ -189,7 +189,7 @@ public class HistoryLoadTask extends PleaseWaitRunnable {
         loadedData = new HistoryDataSet();
         try {
             progressMonitor.setTicksCount(toLoad.size());
-            for(PrimitiveId pid: toLoad) {
+            for (PrimitiveId pid: toLoad) {
                 if (canceled) {
                     break;
                 }
@@ -211,14 +211,14 @@ public class HistoryLoadTask extends PleaseWaitRunnable {
                             new ChangesetQuery().forChangesetIds(ds.getChangesetIds()), progressMonitor.createSubTaskMonitor(1, false))) {
                         ds.putChangeset(i);
                     }
-                } catch(OsmTransferException e) {
+                } catch (OsmTransferException e) {
                     if (canceled)
                         return;
                     throw e;
                 }
                 loadedData.mergeInto(ds);
             }
-        } catch(OsmTransferException e) {
+        } catch (OsmTransferException e) {
             lastException = e;
             return;
         }
diff --git a/src/org/openstreetmap/josm/gui/history/HistoryViewerPanel.java b/src/org/openstreetmap/josm/gui/history/HistoryViewerPanel.java
index 1c864c8..788e6a5 100644
--- a/src/org/openstreetmap/josm/gui/history/HistoryViewerPanel.java
+++ b/src/org/openstreetmap/josm/gui/history/HistoryViewerPanel.java
@@ -81,11 +81,11 @@ public abstract class HistoryViewerPanel extends JPanel {
         gc.gridheight = 1;
         gc.weightx = 0.5;
         gc.weighty = 0.0;
-        gc.insets = new Insets(5,5,5,0);
+        gc.insets = new Insets(5, 5, 5, 0);
         gc.fill = GridBagConstraints.HORIZONTAL;
         gc.anchor = GridBagConstraints.FIRST_LINE_START;
         referenceInfoPanel = new VersionInfoPanel(model, PointInTimeType.REFERENCE_POINT_IN_TIME);
-        add(referenceInfoPanel,gc);
+        add(referenceInfoPanel, gc);
 
         gc.gridx = 1;
         gc.gridy = 0;
@@ -96,7 +96,7 @@ public abstract class HistoryViewerPanel extends JPanel {
         gc.weighty = 0.0;
         gc.anchor = GridBagConstraints.FIRST_LINE_START;
         currentInfoPanel = new VersionInfoPanel(model, PointInTimeType.CURRENT_POINT_IN_TIME);
-        add(currentInfoPanel,gc);
+        add(currentInfoPanel, gc);
 
         adjustmentSynchronizer = new AdjustmentSynchronizer();
         selectionSynchronizer = new SelectionSynchronizer();
@@ -110,7 +110,7 @@ public abstract class HistoryViewerPanel extends JPanel {
         gc.weighty = 1.0;
         gc.fill = GridBagConstraints.BOTH;
         gc.anchor = GridBagConstraints.NORTHWEST;
-        add(embedInScrollPane(buildReferenceTable()),gc);
+        add(embedInScrollPane(buildReferenceTable()), gc);
 
         gc.gridx = 1;
         gc.gridy = 1;
@@ -120,6 +120,6 @@ public abstract class HistoryViewerPanel extends JPanel {
         gc.weighty = 1.0;
         gc.fill = GridBagConstraints.BOTH;
         gc.anchor = GridBagConstraints.NORTHWEST;
-        add(embedInScrollPane(buildCurrentTable()),gc);
+        add(embedInScrollPane(buildCurrentTable()), gc);
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/history/NodeListTableCellRenderer.java b/src/org/openstreetmap/josm/gui/history/NodeListTableCellRenderer.java
index 80a6073..23acc1f 100644
--- a/src/org/openstreetmap/josm/gui/history/NodeListTableCellRenderer.java
+++ b/src/org/openstreetmap/josm/gui/history/NodeListTableCellRenderer.java
@@ -16,14 +16,14 @@ import org.openstreetmap.josm.tools.ImageProvider;
 
 public class NodeListTableCellRenderer extends JLabel implements TableCellRenderer {
 
-    public static final Color BGCOLOR_SELECTED = new Color(143,170,255);
+    public static final Color BGCOLOR_SELECTED = new Color(143, 170, 255);
 
     private ImageIcon nodeIcon;
 
     /**
      * Constructs a new {@code NodeListTableCellRenderer}.
      */
-    public NodeListTableCellRenderer(){
+    public NodeListTableCellRenderer() {
         setOpaque(true);
         nodeIcon = ImageProvider.get("data", "node");
         setIcon(nodeIcon);
@@ -53,7 +53,7 @@ public class NodeListTableCellRenderer extends JLabel implements TableCellRender
     public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
             int row, int column) {
 
-        renderNode((TwoColumnDiff.Item)value, isSelected);
+        renderNode((TwoColumnDiff.Item) value, isSelected);
         return this;
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/history/NodeListViewer.java b/src/org/openstreetmap/josm/gui/history/NodeListViewer.java
index 9491d03..1ba3a6d 100644
--- a/src/org/openstreetmap/josm/gui/history/NodeListViewer.java
+++ b/src/org/openstreetmap/josm/gui/history/NodeListViewer.java
@@ -99,6 +99,8 @@ public class NodeListViewer extends JPanel {
                     if (reversed == null || reversed != model.isReversed()) {
                         reversed = model.isReversed();
                         columnModel.getColumn(0).setHeaderValue(reversed ? reversedText : nonReversedText);
+                        table.getTableHeader().setToolTipText(
+                                reversed ? tr("The nodes of this way are in reverse order") : null);
                         table.getTableHeader().repaint();
                     }
                 }
@@ -117,11 +119,11 @@ public class NodeListViewer extends JPanel {
         gc.gridheight = 1;
         gc.weightx = 0.5;
         gc.weighty = 0.0;
-        gc.insets = new Insets(5,5,5,0);
+        gc.insets = new Insets(5, 5, 5, 0);
         gc.fill = GridBagConstraints.HORIZONTAL;
         gc.anchor = GridBagConstraints.FIRST_LINE_START;
         referenceInfoPanel = new VersionInfoPanel(model, PointInTimeType.REFERENCE_POINT_IN_TIME);
-        add(referenceInfoPanel,gc);
+        add(referenceInfoPanel, gc);
 
         gc.gridx = 1;
         gc.gridy = 0;
@@ -132,7 +134,7 @@ public class NodeListViewer extends JPanel {
         gc.weighty = 0.0;
         gc.anchor = GridBagConstraints.FIRST_LINE_START;
         currentInfoPanel = new VersionInfoPanel(model, PointInTimeType.CURRENT_POINT_IN_TIME);
-        add(currentInfoPanel,gc);
+        add(currentInfoPanel, gc);
 
         adjustmentSynchronizer = new AdjustmentSynchronizer();
         selectionSynchronizer = new SelectionSynchronizer();
@@ -148,7 +150,7 @@ public class NodeListViewer extends JPanel {
         gc.weighty = 1.0;
         gc.fill = GridBagConstraints.BOTH;
         gc.anchor = GridBagConstraints.NORTHWEST;
-        add(embeddInScrollPane(buildReferenceNodeListTable()),gc);
+        add(embeddInScrollPane(buildReferenceNodeListTable()), gc);
 
         gc.gridx = 1;
         gc.gridy = 1;
@@ -158,7 +160,7 @@ public class NodeListViewer extends JPanel {
         gc.weighty = 1.0;
         gc.fill = GridBagConstraints.BOTH;
         gc.anchor = GridBagConstraints.NORTHWEST;
-        add(embeddInScrollPane(buildCurrentNodeListTable()),gc);
+        add(embeddInScrollPane(buildCurrentNodeListTable()), gc);
     }
 
     public NodeListViewer(HistoryBrowserModel model) {
@@ -174,6 +176,7 @@ public class NodeListViewer extends JPanel {
             model.deleteObserver(referenceInfoPanel);
         }
     }
+
     protected void registerAsObserver(HistoryBrowserModel model) {
         if (currentInfoPanel != null) {
             model.addObserver(currentInfoPanel);
@@ -204,7 +207,7 @@ public class NodeListViewer extends JPanel {
             add(showHistoryAction);
         }
 
-        public void prepare(PrimitiveId pid){
+        public void prepare(PrimitiveId pid) {
             zoomToNodeAction.setPrimitiveId(pid);
             zoomToNodeAction.updateEnabledState();
 
@@ -309,8 +312,8 @@ public class NodeListViewer extends JPanel {
 
     private static PrimitiveId primitiveIdAtRow(TableModel model, int row) {
         DiffTableModel castedModel = (DiffTableModel) model;
-        Long id = (Long)castedModel.getValueAt(row, 0).value;
-        if(id == null) return null;
+        Long id = (Long) castedModel.getValueAt(row, 0).value;
+        if (id == null) return null;
         return new SimplePrimitiveId(id, OsmPrimitiveType.NODE);
     }
 
@@ -339,7 +342,7 @@ public class NodeListViewer extends JPanel {
         public void mouseClicked(MouseEvent e) {
             if (e.getClickCount() < 2) return;
             int row = table.rowAtPoint(e.getPoint());
-            if(row <= 0) return;
+            if (row <= 0) return;
             PrimitiveId pid = primitiveIdAtRow(table.getModel(), row);
             if (pid == null || pid.isNew())
                 return;
diff --git a/src/org/openstreetmap/josm/gui/history/RelationMemberListTableCellRenderer.java b/src/org/openstreetmap/josm/gui/history/RelationMemberListTableCellRenderer.java
index 8e15971..5fc18e3 100644
--- a/src/org/openstreetmap/josm/gui/history/RelationMemberListTableCellRenderer.java
+++ b/src/org/openstreetmap/josm/gui/history/RelationMemberListTableCellRenderer.java
@@ -5,7 +5,7 @@ import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.awt.Color;
 import java.awt.Component;
-import java.util.HashMap;
+import java.util.EnumMap;
 import java.util.Map;
 
 import javax.swing.ImageIcon;
@@ -19,16 +19,15 @@ import org.openstreetmap.josm.gui.history.TwoColumnDiff.Item;
 import org.openstreetmap.josm.tools.ImageProvider;
 
 /**
- * The {@link TableCellRenderer} for a list of relation members in {@link HistoryBrowser}
- *
- *
+ * The {@link TableCellRenderer} for a list of relation members in {@link HistoryBrowser}.
+ * @since 1709
  */
 public class RelationMemberListTableCellRenderer extends JLabel implements TableCellRenderer {
 
-    public static final Color BGCOLOR_EMPTY_ROW = new Color(234,234,234);
-    public static final Color BGCOLOR_NOT_IN_OPPOSITE = new Color(255,197,197);
-    public static final Color BGCOLOR_IN_OPPOSITE = new Color(255,234,213);
-    public static final Color BGCOLOR_SELECTED = new Color(143,170,255);
+    public static final Color BGCOLOR_EMPTY_ROW = new Color(234, 234, 234);
+    public static final Color BGCOLOR_NOT_IN_OPPOSITE = new Color(255, 197, 197);
+    public static final Color BGCOLOR_IN_OPPOSITE = new Color(255, 234, 213);
+    public static final Color BGCOLOR_SELECTED = new Color(143, 170, 255);
 
     private transient Map<OsmPrimitiveType, ImageIcon> icons;
 
@@ -37,7 +36,7 @@ public class RelationMemberListTableCellRenderer extends JLabel implements Table
      */
     public RelationMemberListTableCellRenderer() {
         setOpaque(true);
-        icons = new HashMap<>();
+        icons = new EnumMap<>(OsmPrimitiveType.class);
         icons.put(OsmPrimitiveType.NODE, ImageProvider.get("data", "node"));
         icons.put(OsmPrimitiveType.WAY, ImageProvider.get("data", "way"));
         icons.put(OsmPrimitiveType.RELATION, ImageProvider.get("data", "relation"));
@@ -55,7 +54,7 @@ public class RelationMemberListTableCellRenderer extends JLabel implements Table
         String text = "";
         Color bgColor = diffItem.state.getColor();
         RelationMemberData member = (RelationMemberData) diffItem.value;
-        text = member == null?"":member.getRole();
+        text = member == null ? "" : member.getRole();
         setText(text);
         setToolTipText(text);
         setBackground(bgColor);
@@ -83,7 +82,7 @@ public class RelationMemberListTableCellRenderer extends JLabel implements Table
     public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
             int row, int column) {
 
-        Item member = (TwoColumnDiff.Item)value;
+        Item member = (TwoColumnDiff.Item) value;
         renderIcon((RelationMemberData) member.value);
         switch(column) {
         case 0:
diff --git a/src/org/openstreetmap/josm/gui/history/RelationMemberListViewer.java b/src/org/openstreetmap/josm/gui/history/RelationMemberListViewer.java
index d711c11..6ae5c62 100644
--- a/src/org/openstreetmap/josm/gui/history/RelationMemberListViewer.java
+++ b/src/org/openstreetmap/josm/gui/history/RelationMemberListViewer.java
@@ -29,7 +29,7 @@ public class RelationMemberListViewer extends HistoryViewerPanel {
 
         @Override
         public void tableChanged(TableModelEvent e) {
-            Rectangle rect = table.getCellRect(((DiffTableModel)e.getSource()).getFirstChange(), 0, true);
+            Rectangle rect = table.getCellRect(((DiffTableModel) e.getSource()).getFirstChange(), 0, true);
             table.scrollRectToVisible(rect);
         }
     }
diff --git a/src/org/openstreetmap/josm/gui/history/SelectionSynchronizer.java b/src/org/openstreetmap/josm/gui/history/SelectionSynchronizer.java
index 0d7d1d7..00fa272 100644
--- a/src/org/openstreetmap/josm/gui/history/SelectionSynchronizer.java
+++ b/src/org/openstreetmap/josm/gui/history/SelectionSynchronizer.java
@@ -1,8 +1,8 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.history;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.util.HashSet;
+import java.util.Set;
 
 import javax.swing.DefaultListSelectionModel;
 import javax.swing.ListSelectionModel;
@@ -11,13 +11,13 @@ import javax.swing.event.ListSelectionListener;
 
 public class SelectionSynchronizer implements ListSelectionListener {
 
-    private List<ListSelectionModel> participants;
+    private final Set<ListSelectionModel> participants;
 
     /**
      * Constructs a new {@code SelectionSynchronizer}.
      */
     public SelectionSynchronizer() {
-        participants = new ArrayList<>();
+        participants = new HashSet<>();
     }
 
     public void participateInSynchronizedSelection(ListSelectionModel model) {
@@ -31,13 +31,13 @@ public class SelectionSynchronizer implements ListSelectionListener {
 
     @Override
     public void valueChanged(ListSelectionEvent e) {
-        DefaultListSelectionModel referenceModel = (DefaultListSelectionModel)e.getSource();
+        DefaultListSelectionModel referenceModel = (DefaultListSelectionModel) e.getSource();
         int i = referenceModel.getMinSelectionIndex();
         for (ListSelectionModel model : participants) {
             if (model == e.getSource()) {
                 continue;
             }
-            model.setSelectionInterval(i,i);
+            model.setSelectionInterval(i, i);
         }
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/history/TagTableCellRenderer.java b/src/org/openstreetmap/josm/gui/history/TagTableCellRenderer.java
index 6e59a55..a4fa8c7 100644
--- a/src/org/openstreetmap/josm/gui/history/TagTableCellRenderer.java
+++ b/src/org/openstreetmap/josm/gui/history/TagTableCellRenderer.java
@@ -17,7 +17,7 @@ import javax.swing.table.TableCellRenderer;
  *
  */
 public class TagTableCellRenderer extends JLabel implements TableCellRenderer {
-    public static final Color BGCOLOR_DIFFERENCE = new Color(255,197,197);
+    public static final Color BGCOLOR_DIFFERENCE = new Color(255, 197, 197);
 
     /**
      * Constructs a new {@code TagTableCellRenderer}.
@@ -31,7 +31,7 @@ public class TagTableCellRenderer extends JLabel implements TableCellRenderer {
         Color bgColor = UIManager.getColor("Table.background");
         Color fgColor = UIManager.getColor("Table.foreground");
         Font font = UIManager.getFont("Table.font");
-        if (! model.hasTag(key)) {
+        if (!model.hasTag(key)) {
             text = tr("not present");
             bgColor = BGCOLOR_DIFFERENCE;
             font = font.deriveFont(Font.ITALIC);
@@ -55,7 +55,7 @@ public class TagTableCellRenderer extends JLabel implements TableCellRenderer {
         Color bgColor = UIManager.getColor("Table.background");
         Color fgColor = UIManager.getColor("Table.foreground");
         Font font = UIManager.getFont("Table.font");
-        if (! model.hasTag(key)) {
+        if (!model.hasTag(key)) {
             text = tr("not present");
             bgColor = BGCOLOR_DIFFERENCE;
             font = font.deriveFont(Font.ITALIC);
@@ -84,7 +84,7 @@ public class TagTableCellRenderer extends JLabel implements TableCellRenderer {
         if (value == null)
             return this;
 
-        String key = (String)value;
+        String key = (String) value;
         HistoryBrowserModel.TagTableModel model = getTagTableModel(table);
 
         switch(column) {
diff --git a/src/org/openstreetmap/josm/gui/history/TwoColumnDiff.java b/src/org/openstreetmap/josm/gui/history/TwoColumnDiff.java
index 9e15787..cb67ae3 100644
--- a/src/org/openstreetmap/josm/gui/history/TwoColumnDiff.java
+++ b/src/org/openstreetmap/josm/gui/history/TwoColumnDiff.java
@@ -31,13 +31,18 @@ class TwoColumnDiff {
     public static class Item {
 
         public enum DiffItemType {
-            INSERTED(new Color(0xDD, 0xFF, 0xDD)), DELETED(new Color(255,197,197)), CHANGED(new Color(255,234,213)),
-            SAME(new Color(234,234,234)), EMPTY(new Color(234,234,234));
+            INSERTED(new Color(0xDD, 0xFF, 0xDD)),
+            DELETED(new Color(255, 197, 197)),
+            CHANGED(new Color(255, 234, 213)),
+            REVERSED(new Color(255, 255, 204)),
+            SAME(new Color(234, 234, 234)),
+            EMPTY(new Color(234, 234, 234));
 
             private final Color color;
-            private DiffItemType(Color color) {
+            DiffItemType(Color color) {
                 this.color = color;
             }
+
             public Color getColor() {
                 return color;
             }
@@ -75,10 +80,10 @@ class TwoColumnDiff {
         if (scriptReversed == null /* reference and current are identical */
                 || script != null && scriptReversed.deleted + scriptReversed.inserted < script.deleted + script.inserted) {
             this.referenceReversed = true;
-            twoColumnDiffFromScript(scriptReversed, referenceReversed, current);
+            twoColumnDiffFromScript(scriptReversed, referenceReversed, current, true);
         } else {
             this.referenceReversed = false;
-            twoColumnDiffFromScript(script, reference, current);
+            twoColumnDiffFromScript(script, reference, current, false);
         }
     }
 
@@ -86,26 +91,23 @@ class TwoColumnDiff {
      * The result from the diff algorithm is a "script" (a compressed description of the changes)
      * This method expands this script into a full two column description.
      */
-    private void twoColumnDiffFromScript(Diff.Change script, Object[] a, Object[] b) {
+    private void twoColumnDiffFromScript(Diff.Change script, Object[] a, Object[] b, final boolean reversed) {
         int ia = 0;
         int ib = 0;
 
-        while(script != null) {
+        while (script != null) {
             int deleted = script.deleted;
             int inserted = script.inserted;
-            while(ia < script.line0 && ib < script.line1){
-                Item cell = new Item(DiffItemType.SAME, a[ia]);
-                referenceDiff.add(cell);
-                currentDiff.add(cell);
-                ia++;
-                ib++;
+            while (ia < script.line0 && ib < script.line1) {
+                referenceDiff.add(new Item(reversed ? DiffItemType.REVERSED : DiffItemType.SAME, a[ia++]));
+                currentDiff.add(new Item(DiffItemType.SAME, b[ib++]));
             }
 
-            while(inserted > 0 || deleted > 0) {
-                if(inserted > 0 && deleted > 0) {
+            while (inserted > 0 || deleted > 0) {
+                if (inserted > 0 && deleted > 0) {
                     referenceDiff.add(new Item(DiffItemType.CHANGED, a[ia++]));
                     currentDiff.add(new Item(DiffItemType.CHANGED, b[ib++]));
-                } else if(inserted > 0) {
+                } else if (inserted > 0) {
                     referenceDiff.add(new Item(DiffItemType.EMPTY, null));
                     currentDiff.add(new Item(DiffItemType.INSERTED, b[ib++]));
                 } else {
@@ -117,8 +119,8 @@ class TwoColumnDiff {
             }
             script = script.link;
         }
-        while(ia < a.length && ib < b.length) {
-            referenceDiff.add(new Item(DiffItemType.SAME, a[ia++]));
+        while (ia < a.length && ib < b.length) {
+            referenceDiff.add(new Item(reversed ? DiffItemType.REVERSED : DiffItemType.SAME, a[ia++]));
             currentDiff.add(new Item(DiffItemType.SAME, b[ib++]));
         }
     }
diff --git a/src/org/openstreetmap/josm/gui/history/VersionInfoPanel.java b/src/org/openstreetmap/josm/gui/history/VersionInfoPanel.java
index 0c64136..3b8d50e 100644
--- a/src/org/openstreetmap/josm/gui/history/VersionInfoPanel.java
+++ b/src/org/openstreetmap/josm/gui/history/VersionInfoPanel.java
@@ -55,9 +55,9 @@ public class VersionInfoPanel extends JPanel implements Observer{
     private JPanel pnlChangesetImageryUsed;
     private JLabel lblSource;
     private JLabel lblImageryUsed;
-    private JTextArea lblChangesetComment;
-    private JTextArea lblChangesetSource;
-    private JTextArea lblChangesetImageryUsed;
+    private JTextArea texChangesetComment;
+    private JTextArea texChangesetSource;
+    private JTextArea texChangesetImageryUsed;
 
     protected static JTextArea buildTextArea(String tooltip) {
         JTextArea lbl = new JTextArea();
@@ -75,6 +75,7 @@ public class VersionInfoPanel extends JPanel implements Observer{
         JLabel lbl = new JLabel("<html><p style='margin-top:"+textArea.getMargin().top+"'>"+text+"</html>");
         lbl.setFont(textArea.getFont());
         lbl.setToolTipText(tooltip);
+        lbl.setLabelFor(textArea);
         return lbl;
     }
 
@@ -90,7 +91,7 @@ public class VersionInfoPanel extends JPanel implements Observer{
         lblInfo = new JMultilineLabel("");
         pnl1.add(lblInfo, BorderLayout.CENTER);
 
-        JPanel pnlUserAndChangeset = new JPanel(new GridLayout(2,2));
+        JPanel pnlUserAndChangeset = new JPanel(new GridLayout(2, 2));
         lblUser = new UrlLabel("", 2);
         pnlUserAndChangeset.add(new JLabel(tr("User:")));
         pnlUserAndChangeset.add(lblUser);
@@ -99,14 +100,14 @@ public class VersionInfoPanel extends JPanel implements Observer{
         lblChangeset = new UrlLabel("", 2);
         pnlUserAndChangeset.add(lblChangeset);
 
-        lblChangesetComment = buildTextArea(tr("Changeset comment"));
-        lblChangesetSource = buildTextArea(tr("Changeset source"));
-        lblChangesetImageryUsed = buildTextArea(tr("Imagery used"));
+        texChangesetComment = buildTextArea(tr("Changeset comment"));
+        texChangesetSource = buildTextArea(tr("Changeset source"));
+        texChangesetImageryUsed = buildTextArea(tr("Imagery used"));
 
-        lblSource = buildLabel(tr("<b>Source</b>:"), tr("Changeset source"), lblChangesetSource);
-        lblImageryUsed = buildLabel(tr("<b>Imagery</b>:"), tr("Imagery used"), lblChangesetImageryUsed);
-        pnlChangesetSource = buildTextPanel(lblSource, lblChangesetSource);
-        pnlChangesetImageryUsed = buildTextPanel(lblImageryUsed, lblChangesetImageryUsed);
+        lblSource = buildLabel(tr("<b>Source</b>:"), tr("Changeset source"), texChangesetSource);
+        lblImageryUsed = buildLabel(tr("<b>Imagery</b>:"), tr("Imagery used"), texChangesetImageryUsed);
+        pnlChangesetSource = buildTextPanel(lblSource, texChangesetSource);
+        pnlChangesetImageryUsed = buildTextPanel(lblImageryUsed, texChangesetImageryUsed);
 
         setLayout(new GridBagLayout());
         GridBagConstraints gc = new GridBagConstraints();
@@ -119,7 +120,7 @@ public class VersionInfoPanel extends JPanel implements Observer{
         gc.weighty = 0.0;
         add(pnlUserAndChangeset, gc);
         gc.gridy = 2;
-        add(lblChangesetComment, gc);
+        add(texChangesetComment, gc);
         gc.gridy = 3;
         add(pnlChangesetSource, gc);
         gc.gridy = 4;
@@ -227,9 +228,9 @@ public class VersionInfoPanel extends JPanel implements Observer{
         }
 
         final Changeset oppCs = model.getPointInTime(pointInTimeType.opposite()).getChangeset();
-        updateText(cs, "comment", lblChangesetComment, null, oppCs, lblChangesetComment);
-        updateText(cs, "source", lblChangesetSource, lblSource, oppCs, pnlChangesetSource);
-        updateText(cs, "imagery_used", lblChangesetImageryUsed, lblImageryUsed, oppCs, pnlChangesetImageryUsed);
+        updateText(cs, "comment", texChangesetComment, null, oppCs, texChangesetComment);
+        updateText(cs, "source", texChangesetSource, lblSource, oppCs, pnlChangesetSource);
+        updateText(cs, "imagery_used", texChangesetImageryUsed, lblImageryUsed, oppCs, pnlChangesetImageryUsed);
     }
 
     protected static void updateText(Changeset cs, String attr, JTextArea textArea, JLabel label, Changeset oppCs, JComponent container) {
diff --git a/src/org/openstreetmap/josm/gui/history/VersionTable.java b/src/org/openstreetmap/josm/gui/history/VersionTable.java
index 20fee88..1984ea1 100644
--- a/src/org/openstreetmap/josm/gui/history/VersionTable.java
+++ b/src/org/openstreetmap/josm/gui/history/VersionTable.java
@@ -54,7 +54,7 @@ public class VersionTable extends JTable implements Observer{
         setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
         setBackground(UIManager.getColor("Button.background"));
         setIntercellSpacing(new Dimension(6, 0));
-        putClientProperty("terminateEditOnFocusLost", true);
+        putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
         popupMenu = new VersionTablePopupMenu();
         addMouseListener(new MouseListener());
         addKeyListener(new KeyAdapter() {
@@ -119,10 +119,11 @@ public class VersionTable extends JTable implements Observer{
         repaint();
     }
 
-    class MouseListener extends PopupMenuLauncher {
+    final class MouseListener extends PopupMenuLauncher {
         private MouseListener() {
             super(popupMenu);
         }
+
         @Override
         public void mousePressed(MouseEvent e) {
             super.mousePressed(e);
@@ -135,6 +136,7 @@ public class VersionTable extends JTable implements Observer{
                 }
             }
         }
+
         @Override
         protected int checkTableSelection(JTable table, Point p) {
             HistoryBrowserModel.VersionTableModel model = getVersionTableModel();
@@ -161,8 +163,12 @@ public class VersionTable extends JTable implements Observer{
 
         @Override
         protected String createInfoUrl(Object infoObject) {
-            HistoryOsmPrimitive primitive = (HistoryOsmPrimitive) infoObject;
-            return Main.getBaseBrowseUrl() + "/changeset/" + primitive.getChangesetId();
+            if (infoObject instanceof HistoryOsmPrimitive) {
+                HistoryOsmPrimitive prim = (HistoryOsmPrimitive) infoObject;
+                return Main.getBaseBrowseUrl() + "/changeset/" + prim.getChangesetId();
+            } else {
+                return null;
+            }
         }
 
         @Override
@@ -194,8 +200,12 @@ public class VersionTable extends JTable implements Observer{
 
         @Override
         protected String createInfoUrl(Object infoObject) {
-            HistoryOsmPrimitive hp = (HistoryOsmPrimitive) infoObject;
-            return hp.getUser() == null ? null : Main.getBaseUserUrl() + "/" + hp.getUser().getName();
+            if (infoObject instanceof HistoryOsmPrimitive) {
+                HistoryOsmPrimitive hp = (HistoryOsmPrimitive) infoObject;
+                return hp.getUser() == null ? null : Main.getBaseUserUrl() + "/" + hp.getUser().getName();
+            } else {
+                return null;
+            }
         }
 
         @Override
@@ -219,16 +229,20 @@ public class VersionTable extends JTable implements Observer{
         private ChangesetInfoAction changesetInfoAction;
         private UserInfoAction userInfoAction;
 
+        /**
+         * Constructs a new {@code VersionTablePopupMenu}.
+         */
+        public VersionTablePopupMenu() {
+            super();
+            build();
+        }
+
         protected void build() {
             changesetInfoAction = new ChangesetInfoAction();
             add(changesetInfoAction);
             userInfoAction = new UserInfoAction();
             add(userInfoAction);
         }
-        public VersionTablePopupMenu() {
-            super();
-            build();
-        }
 
         public void prepare(HistoryOsmPrimitive primitive) {
             changesetInfoAction.prepare(primitive);
@@ -242,7 +256,7 @@ public class VersionTable extends JTable implements Observer{
         @Override
         public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
                 int row, int column) {
-            setSelected(value != null && (Boolean)value);
+            setSelected(value != null && (Boolean) value);
             setHorizontalAlignment(SwingConstants.CENTER);
             return this;
         }
@@ -305,7 +319,7 @@ public class VersionTable extends JTable implements Observer{
     private static void adjustColumnWidth(JTable tbl, int col, int cellInset) {
         int maxwidth = 0;
 
-        for (int row=0; row<tbl.getRowCount(); row++) {
+        for (int row = 0; row < tbl.getRowCount(); row++) {
             TableCellRenderer tcr = tbl.getCellRenderer(row, col);
             Object val = tbl.getValueAt(row, col);
             Component comp = tcr.getTableCellRendererComponent(tbl, val, false, false, row, col);
diff --git a/src/org/openstreetmap/josm/gui/history/package-info.java b/src/org/openstreetmap/josm/gui/history/package-info.java
new file mode 100644
index 0000000..12a6459
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/history/package-info.java
@@ -0,0 +1,6 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Provides GUI classes for handling history of OSM objects.
+ */
+package org.openstreetmap.josm.gui.history;
diff --git a/src/org/openstreetmap/josm/gui/io/AbstractUploadTask.java b/src/org/openstreetmap/josm/gui/io/AbstractUploadTask.java
index 7470035..0c0cf35 100644
--- a/src/org/openstreetmap/josm/gui/io/AbstractUploadTask.java
+++ b/src/org/openstreetmap/josm/gui/io/AbstractUploadTask.java
@@ -63,7 +63,8 @@ public abstract class AbstractUploadTask extends PleaseWaitRunnable {
             throw new IllegalStateException(tr("Failed to update primitive with id {0} because current edit layer is null", id));
         OsmPrimitive p = layer.data.getPrimitiveById(id, type);
         if (p == null)
-            throw new IllegalStateException(tr("Failed to update primitive with id {0} because current edit layer does not include such a primitive", id));
+            throw new IllegalStateException(
+                    tr("Failed to update primitive with id {0} because current edit layer does not include such a primitive", id));
         Main.worker.execute(new UpdatePrimitivesTask(layer, Collections.singleton(p)));
     }
 
@@ -76,7 +77,7 @@ public abstract class AbstractUploadTask extends PleaseWaitRunnable {
      */
     protected void synchronizeDataSet() {
         UpdateDataAction act = new UpdateDataAction();
-        act.actionPerformed(new ActionEvent(this,0,""));
+        act.actionPerformed(new ActionEvent(this, 0, ""));
     }
 
     /**
@@ -89,7 +90,8 @@ public abstract class AbstractUploadTask extends PleaseWaitRunnable {
      * @param serverVersion  the version of the primitive on the server
      * @param myVersion  the version of the primitive in the local dataset
      */
-    protected void handleUploadConflictForKnownConflict(final OsmPrimitiveType primitiveType, final long id, String serverVersion, String myVersion) {
+    protected void handleUploadConflictForKnownConflict(final OsmPrimitiveType primitiveType, final long id, String serverVersion,
+            String myVersion) {
         String lbl = "";
         switch(primitiveType) {
         case NODE: lbl =  tr("Synchronize node {0} only", id); break;
@@ -254,7 +256,7 @@ public abstract class AbstractUploadTask extends PleaseWaitRunnable {
             Pattern p = Pattern.compile("Version mismatch: Provided (\\d+), server had: (\\d+) of (\\S+) (\\d+)");
             Matcher m = p.matcher(errorHeader);
             if (m.matches()) {
-                handleUploadConflictForKnownConflict(OsmPrimitiveType.from(m.group(3)), Long.parseLong(m.group(4)), m.group(2),m.group(1));
+                handleUploadConflictForKnownConflict(OsmPrimitiveType.from(m.group(3)), Long.parseLong(m.group(4)), m.group(2), m.group(1));
                 return;
             }
             p = Pattern.compile("The changeset (\\d+) was closed at (.*)");
@@ -294,7 +296,7 @@ public abstract class AbstractUploadTask extends PleaseWaitRunnable {
      */
     protected void handleGone(OsmApiPrimitiveGoneException e) {
         if (e.isKnownPrimitive()) {
-            UpdateSelectionAction.handlePrimitiveGoneException(e.getPrimitiveId(),e.getPrimitiveType());
+            UpdateSelectionAction.handlePrimitiveGoneException(e.getPrimitiveId(), e.getPrimitiveType());
         } else {
             ExceptionDialogUtil.explainGoneForUnknownPrimitive(e);
         }
@@ -309,33 +311,26 @@ public abstract class AbstractUploadTask extends PleaseWaitRunnable {
         // API initialization failed. Notify the user and return.
         //
         if (e instanceof OsmApiInitializationException) {
-            ExceptionDialogUtil.explainOsmApiInitializationException((OsmApiInitializationException)e);
+            ExceptionDialogUtil.explainOsmApiInitializationException((OsmApiInitializationException) e);
             return;
         }
 
         if (e instanceof OsmApiPrimitiveGoneException) {
-            handleGone((OsmApiPrimitiveGoneException)e);
+            handleGone((OsmApiPrimitiveGoneException) e);
             return;
         }
         if (e instanceof OsmApiException) {
-            OsmApiException ex = (OsmApiException)e;
-            // There was an upload conflict. Let the user decide whether
-            // and how to resolve it
-            //
-            if(ex.getResponseCode() == HttpURLConnection.HTTP_CONFLICT) {
+            OsmApiException ex = (OsmApiException) e;
+            if (ex.getResponseCode() == HttpURLConnection.HTTP_CONFLICT) {
+                // There was an upload conflict. Let the user decide whether and how to resolve it
                 handleUploadConflict(ex);
                 return;
-            }
-            // There was a precondition failed. Notify the user.
-            //
-            else if (ex.getResponseCode() == HttpURLConnection.HTTP_PRECON_FAILED) {
+            } else if (ex.getResponseCode() == HttpURLConnection.HTTP_PRECON_FAILED) {
+                // There was a precondition failed. Notify the user.
                 handlePreconditionFailed(ex);
                 return;
-            }
-            // Tried to update or delete a primitive which never existed on
-            // the server?
-            //
-            else if (ex.getResponseCode() == HttpURLConnection.HTTP_NOT_FOUND) {
+            } else if (ex.getResponseCode() == HttpURLConnection.HTTP_NOT_FOUND) {
+                // Tried to update or delete a primitive which never existed on the server?
                 ExceptionDialogUtil.explainNotFound(ex);
                 return;
             }
diff --git a/src/org/openstreetmap/josm/gui/io/ActionFlagsTableCell.java b/src/org/openstreetmap/josm/gui/io/ActionFlagsTableCell.java
index 4472c4e..9c17b38 100644
--- a/src/org/openstreetmap/josm/gui/io/ActionFlagsTableCell.java
+++ b/src/org/openstreetmap/josm/gui/io/ActionFlagsTableCell.java
@@ -46,6 +46,9 @@ class ActionFlagsTableCell extends JPanel implements TableCellRenderer, TableCel
         }
     };
 
+    /**
+     * Constructs a new {@code ActionFlagsTableCell}.
+     */
     public ActionFlagsTableCell() {
         checkBoxes[0] = new JCheckBox(tr("Upload"));
         checkBoxes[1] = new JCheckBox(tr("Save"));
@@ -65,13 +68,17 @@ class ActionFlagsTableCell extends JPanel implements TableCellRenderer, TableCel
             });
         }
 
-        setToolTipText(tr("<html>Select which actions to perform for this layer, if you click the leftmost button.<br/>Check \"upload\" to upload the changes to the OSM server.<br/>Check \"Save\" to save the layer to the file specified on the left.</html>"));
+        setToolTipText(tr("<html>"+
+            "Select which actions to perform for this layer, if you click the leftmost button.<br/>"+
+            "Check \"upload\" to upload the changes to the OSM server.<br/>"+
+            "Check \"Save\" to save the layer to the file specified on the left."+
+            "</html>"));
     }
 
     protected void updateCheckboxes(Object v) {
         if (v != null && checkBoxes[0] != null && checkBoxes[1] != null) {
             boolean[] values;
-            if(v instanceof SaveLayerInfo) {
+            if (v instanceof SaveLayerInfo) {
                 values = new boolean[2];
                 values[0] = ((SaveLayerInfo) v).isDoUploadToServer();
                 values[1] = ((SaveLayerInfo) v).isDoSaveToFile();
diff --git a/src/org/openstreetmap/josm/gui/io/BasicUploadSettingsPanel.java b/src/org/openstreetmap/josm/gui/io/BasicUploadSettingsPanel.java
index b4852ed..97ab8a9 100644
--- a/src/org/openstreetmap/josm/gui/io/BasicUploadSettingsPanel.java
+++ b/src/org/openstreetmap/josm/gui/io/BasicUploadSettingsPanel.java
@@ -98,7 +98,7 @@ public class BasicUploadSettingsPanel extends JPanel {
 
     protected void build() {
         setLayout(new BorderLayout());
-        setBorder(BorderFactory.createEmptyBorder(3,3,3,3));
+        setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
         add(buildUploadCommentPanel(), BorderLayout.NORTH);
         add(pnlUploadParameterSummary, BorderLayout.CENTER);
     }
@@ -135,6 +135,7 @@ public class BasicUploadSettingsPanel extends JPanel {
                             handler.actionPerformed(new ActionEvent(hcb, 0, "focusDown"));
                         }
                     }
+
                     @Override
                     public void keyReleased(KeyEvent e) {}
 
@@ -191,6 +192,7 @@ public class BasicUploadSettingsPanel extends JPanel {
         public void actionPerformed(ActionEvent e) {
             destination.setComment(source.getText());
         }
+
         @Override
         public void focusLost(FocusEvent e) {
             destination.setComment(source.getText());
@@ -212,7 +214,7 @@ public class BasicUploadSettingsPanel extends JPanel {
         @Override
         public void update(Observable o, Object arg) {
             if (!(o instanceof ChangesetCommentModel)) return;
-            String newComment = (String)arg;
+            String newComment = (String) arg;
             if (!destination.getText().equals(newComment)) {
                 destination.setText(newComment);
             }
diff --git a/src/org/openstreetmap/josm/gui/io/ChangesetCellRenderer.java b/src/org/openstreetmap/josm/gui/io/ChangesetCellRenderer.java
index 29f63e6..54d906e 100644
--- a/src/org/openstreetmap/josm/gui/io/ChangesetCellRenderer.java
+++ b/src/org/openstreetmap/josm/gui/io/ChangesetCellRenderer.java
@@ -34,8 +34,7 @@ public class ChangesetCellRenderer extends JLabel implements ListCellRenderer<Ch
 
     protected String buildToolTipText(Changeset cs) {
         StringBuilder sb = new StringBuilder();
-        sb.append("<html>");
-        sb.append("<strong>").append(tr("Changeset id:")).append("</strong>").append(cs.getId()).append("<br>");
+        sb.append("<html><strong>").append(tr("Changeset id:")).append("</strong>").append(cs.getId()).append("<br>");
         if (cs.getCreatedAt() != null) {
             sb.append("<strong>").append(tr("Created at:")).append("</strong>").append(
                     DateUtils.formatDateTime(cs.getCreatedAt(), DateFormat.SHORT, DateFormat.SHORT)).append("<br>");
@@ -47,7 +46,8 @@ public class ChangesetCellRenderer extends JLabel implements ListCellRenderer<Ch
     }
 
     @Override
-    public Component getListCellRendererComponent(JList<? extends Changeset> list, Changeset cs, int index, boolean isSelected, boolean cellHasFocus) {
+    public Component getListCellRendererComponent(JList<? extends Changeset> list, Changeset cs, int index, boolean isSelected,
+            boolean cellHasFocus) {
         if (isSelected) {
             setForeground(UIManager.getColor("List.selectionForeground"));
             setBackground(UIManager.getColor("List.selectionBackground"));
diff --git a/src/org/openstreetmap/josm/gui/io/ChangesetCommentModel.java b/src/org/openstreetmap/josm/gui/io/ChangesetCommentModel.java
index 9d323c5..087974d 100644
--- a/src/org/openstreetmap/josm/gui/io/ChangesetCommentModel.java
+++ b/src/org/openstreetmap/josm/gui/io/ChangesetCommentModel.java
@@ -32,6 +32,6 @@ public class ChangesetCommentModel extends Observable {
      * @return the current changeset comment in this model.
      */
     public String getComment() {
-        return comment == null ? "": comment;
+        return comment == null ? "" : comment;
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/io/ChangesetManagementPanel.java b/src/org/openstreetmap/josm/gui/io/ChangesetManagementPanel.java
index b4fab6a..42b1c78 100644
--- a/src/org/openstreetmap/josm/gui/io/ChangesetManagementPanel.java
+++ b/src/org/openstreetmap/josm/gui/io/ChangesetManagementPanel.java
@@ -63,7 +63,7 @@ public class ChangesetManagementPanel extends JPanel implements ListDataListener
     protected void build() {
         setLayout(new GridBagLayout());
         GridBagConstraints gc = new GridBagConstraints();
-        setBorder(BorderFactory.createEmptyBorder(3,3,3,3));
+        setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
 
         ButtonGroup bgUseNewOrExisting = new ButtonGroup();
 
@@ -74,14 +74,15 @@ public class ChangesetManagementPanel extends JPanel implements ListDataListener
         gc.weightx = 1.0;
         gc.weighty = 0.0;
         gc.insets = new Insets(0, 0, 5, 0);
-        add(new JMultilineLabel(tr("Please decide what changeset the data is uploaded to and whether to close the changeset after the next upload.")), gc);
+        add(new JMultilineLabel(
+                tr("Please decide what changeset the data is uploaded to and whether to close the changeset after the next upload.")), gc);
 
         gc.gridwidth = 4;
         gc.gridy = 1;
         gc.fill = GridBagConstraints.HORIZONTAL;
         gc.weightx = 1.0;
         gc.weighty = 0.0;
-        gc.insets = new Insets(0,0,0,0);
+        gc.insets = new Insets(0, 0, 0, 0);
         gc.anchor = GridBagConstraints.FIRST_LINE_START;
         rbUseNew = new JRadioButton(tr("Upload to a new changeset"));
         rbUseNew.setToolTipText(tr("Open a new changeset and use it in the next upload"));
@@ -122,7 +123,7 @@ public class ChangesetManagementPanel extends JPanel implements ListDataListener
         gc.gridwidth = 1;
         gc.weightx = 0.0;
         JButton btnRefresh = new JButton(new RefreshAction());
-        btnRefresh.setMargin(new Insets(0,0,0,0));
+        btnRefresh.setMargin(new Insets(0, 0, 0, 0));
         add(btnRefresh, gc);
 
         gc.gridx = 3;
@@ -130,7 +131,7 @@ public class ChangesetManagementPanel extends JPanel implements ListDataListener
         gc.gridwidth = 1;
         CloseChangesetAction closeChangesetAction = new CloseChangesetAction();
         JButton btnClose = new JButton(closeChangesetAction);
-        btnClose.setMargin(new Insets(0,0,0,0));
+        btnClose.setMargin(new Insets(0, 0, 0, 0));
         cbOpenChangesets.addItemListener(closeChangesetAction);
         rbExisting.addItemListener(closeChangesetAction);
         add(btnClose, gc);
@@ -187,7 +188,7 @@ public class ChangesetManagementPanel extends JPanel implements ListDataListener
      */
     public void setSelectedChangesetForNextUpload(Changeset cs) {
         int idx  = model.getIndexOf(cs);
-        if (idx >=0) {
+        if (idx >= 0) {
             rbExisting.setSelected(true);
             model.setSelectedItem(cs);
         }
@@ -203,7 +204,7 @@ public class ChangesetManagementPanel extends JPanel implements ListDataListener
     public Changeset getSelectedChangeset() {
         if (rbUseNew.isSelected())
             return null;
-        return (Changeset)cbOpenChangesets.getSelectedItem();
+        return (Changeset) cbOpenChangesets.getSelectedItem();
     }
 
     /**
@@ -240,7 +241,7 @@ public class ChangesetManagementPanel extends JPanel implements ListDataListener
     class ChangesetListItemStateListener implements ItemListener {
         @Override
         public void itemStateChanged(ItemEvent e) {
-            Changeset cs = (Changeset)cbOpenChangesets.getSelectedItem();
+            Changeset cs = (Changeset) cbOpenChangesets.getSelectedItem();
             if (cs == null) return;
             if (rbExisting.isSelected()) {
                 firePropertyChange(SELECTED_CHANGESET_PROP, null, cs);
@@ -286,7 +287,7 @@ public class ChangesetManagementPanel extends JPanel implements ListDataListener
                 if (cbOpenChangesets.getSelectedItem() == null) {
                     model.selectFirstChangeset();
                 }
-                Changeset cs = (Changeset)cbOpenChangesets.getSelectedItem();
+                Changeset cs = (Changeset) cbOpenChangesets.getSelectedItem();
                 if (cs == null) return;
                 changesetCommentModel.setComment(cs.get("comment"));
                 firePropertyChange(SELECTED_CHANGESET_PROP, null, cs);
@@ -324,7 +325,7 @@ public class ChangesetManagementPanel extends JPanel implements ListDataListener
 
         @Override
         public void actionPerformed(ActionEvent e) {
-            Changeset cs = (Changeset)cbOpenChangesets.getSelectedItem();
+            Changeset cs = (Changeset) cbOpenChangesets.getSelectedItem();
             if (cs == null) return;
             CloseChangesetTask task = new CloseChangesetTask(Collections.singletonList(cs));
             Main.worker.submit(task);
diff --git a/src/org/openstreetmap/josm/gui/io/CloseChangesetDialog.java b/src/org/openstreetmap/josm/gui/io/CloseChangesetDialog.java
index c2c5d36..86eaa74 100644
--- a/src/org/openstreetmap/josm/gui/io/CloseChangesetDialog.java
+++ b/src/org/openstreetmap/josm/gui/io/CloseChangesetDialog.java
@@ -52,7 +52,7 @@ public class CloseChangesetDialog extends JDialog {
 
     protected JPanel buildTopPanel() {
         JPanel pnl = new JPanel();
-        pnl.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        pnl.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
         pnl.setLayout(new BorderLayout());
         pnl.add(new JLabel(tr("<html>Please select the changesets you want to close</html>")), BorderLayout.CENTER);
         return pnl;
@@ -91,7 +91,7 @@ public class CloseChangesetDialog extends JDialog {
         getContentPane().add(buildCenterPanel(), BorderLayout.CENTER);
         getContentPane().add(buildSouthPanel(), BorderLayout.SOUTH);
 
-        getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE,0), "escape");
+        getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "escape");
         getRootPane().getActionMap().put("escape", new CancelAction());
         addWindowListener(new WindowEventHandler());
     }
@@ -101,7 +101,7 @@ public class CloseChangesetDialog extends JDialog {
         if (visible) {
             new WindowGeometry(
                     getClass().getName() + ".geometry",
-                    WindowGeometry.centerInWindow(Main.parent, new Dimension(300,300))
+                    WindowGeometry.centerInWindow(Main.parent, new Dimension(300, 300))
             ).applySafe(this);
         } else if (isShowing()) { // Avoid IllegalComponentStateException like in #8775
             new WindowGeometry(this).remember(getClass().getName() + ".geometry");
diff --git a/src/org/openstreetmap/josm/gui/io/CloseChangesetTask.java b/src/org/openstreetmap/josm/gui/io/CloseChangesetTask.java
index 8bd5208..fd33785 100644
--- a/src/org/openstreetmap/josm/gui/io/CloseChangesetTask.java
+++ b/src/org/openstreetmap/josm/gui/io/CloseChangesetTask.java
@@ -72,14 +72,14 @@ public class CloseChangesetTask extends PleaseWaitRunnable {
         try {
             for (Changeset cs: changesets) {
                 if (canceled) return;
-                if (cs == null || cs.getId() <= 0 || ! cs.isOpen()) {
+                if (cs == null || cs.getId() <= 0 || !cs.isOpen()) {
                     continue;
                 }
                 getProgressMonitor().subTask(tr("Closing changeset {0}", cs.getId()));
                 OsmApi.getOsmApi().closeChangeset(cs, getProgressMonitor().createSubTaskMonitor(1, false));
                 closedChangesets.add(cs);
             }
-        } catch(Exception e) {
+        } catch (Exception e) {
             if (canceled)
                 return;
             lastException = e;
diff --git a/src/org/openstreetmap/josm/gui/io/ConfigurationParameterRequestHandler.java b/src/org/openstreetmap/josm/gui/io/ConfigurationParameterRequestHandler.java
index f9b963c..f390f31 100644
--- a/src/org/openstreetmap/josm/gui/io/ConfigurationParameterRequestHandler.java
+++ b/src/org/openstreetmap/josm/gui/io/ConfigurationParameterRequestHandler.java
@@ -3,5 +3,6 @@ package org.openstreetmap.josm.gui.io;
 
 public interface ConfigurationParameterRequestHandler {
     void handleChangesetConfigurationRequest();
+
     void handleUploadStrategyConfigurationRequest();
 }
diff --git a/src/org/openstreetmap/josm/gui/io/CredentialDialog.java b/src/org/openstreetmap/josm/gui/io/CredentialDialog.java
index a0ff851..874c004 100644
--- a/src/org/openstreetmap/josm/gui/io/CredentialDialog.java
+++ b/src/org/openstreetmap/josm/gui/io/CredentialDialog.java
@@ -43,7 +43,8 @@ import org.openstreetmap.josm.tools.WindowGeometry;
 
 public class CredentialDialog extends JDialog {
 
-    public static CredentialDialog getOsmApiCredentialDialog(String username, String password, String host, String saveUsernameAndPasswordCheckboxText) {
+    public static CredentialDialog getOsmApiCredentialDialog(String username, String password, String host,
+            String saveUsernameAndPasswordCheckboxText) {
         CredentialDialog dialog = new CredentialDialog(saveUsernameAndPasswordCheckboxText);
         if (Objects.equals(OsmApi.getOsmApi().getHost(), host)) {
             dialog.prepareForOsmApiCredentials(username, password);
@@ -54,7 +55,8 @@ public class CredentialDialog extends JDialog {
         return dialog;
     }
 
-    public static CredentialDialog getHttpProxyCredentialDialog(String username, String password, String host, String saveUsernameAndPasswordCheckboxText) {
+    public static CredentialDialog getHttpProxyCredentialDialog(String username, String password, String host,
+            String saveUsernameAndPasswordCheckboxText) {
         CredentialDialog dialog = new CredentialDialog(saveUsernameAndPasswordCheckboxText);
         dialog.prepareForProxyCredentials(username, password);
         dialog.pack();
@@ -76,7 +78,7 @@ public class CredentialDialog extends JDialog {
     @Override
     public void setVisible(boolean visible) {
         if (visible) {
-            WindowGeometry.centerInWindow(Main.parent, new Dimension(350,300)).applySafe(this);
+            WindowGeometry.centerInWindow(Main.parent, new Dimension(350, 300)).applySafe(this);
         }
         super.setVisible(visible);
     }
@@ -94,10 +96,11 @@ public class CredentialDialog extends JDialog {
         getContentPane().add(createButtonPanel(), BorderLayout.SOUTH);
 
         addWindowListener(new WindowEventHander());
-        getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "escape");
+        getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(
+                KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "escape");
         getRootPane().getActionMap().put("escape", new CancelAction());
 
-        getRootPane().setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        getRootPane().setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
     }
 
     public CredentialDialog(String saveUsernameAndPasswordCheckboxText) {
@@ -105,7 +108,7 @@ public class CredentialDialog extends JDialog {
         setModalityType(ModalityType.DOCUMENT_MODAL);
         try {
             setAlwaysOnTop(true);
-        } catch(SecurityException e) {
+        } catch (SecurityException e) {
             Main.warn(tr("Failed to put Credential Dialog always on top. Caught security exception."));
         }
         build();
@@ -133,17 +136,17 @@ public class CredentialDialog extends JDialog {
     }
 
     public String getUsername() {
-        if (pnlCredentials== null) return null;
+        if (pnlCredentials == null) return null;
         return pnlCredentials.getUserName();
     }
 
     public char[] getPassword() {
-        if (pnlCredentials== null) return null;
+        if (pnlCredentials == null) return null;
         return pnlCredentials.getPassword();
     }
 
     public boolean isSaveCredentials() {
-        if (pnlCredentials== null) return false;
+        if (pnlCredentials == null) return false;
         return pnlCredentials.isSaveCredentials();
     }
 
@@ -171,7 +174,7 @@ public class CredentialDialog extends JDialog {
             gc.fill = GridBagConstraints.HORIZONTAL;
             gc.weightx = 1.0;
             gc.weighty = 0.0;
-            gc.insets = new Insets(0,0,10,0);
+            gc.insets = new Insets(0, 0, 10, 0);
             add(lblHeading = new JMultilineLabel(""), gc);
 
             gc.gridx = 0;
@@ -181,7 +184,7 @@ public class CredentialDialog extends JDialog {
             gc.fill = GridBagConstraints.HORIZONTAL;
             gc.weightx = 0.0;
             gc.weighty = 0.0;
-            gc.insets = new Insets(0,0,10,10);
+            gc.insets = new Insets(0, 0, 10, 10);
             add(new JLabel(tr("Username")), gc);
             gc.gridx = 1;
             gc.gridy = 1;
@@ -217,7 +220,7 @@ public class CredentialDialog extends JDialog {
             gc.gridx = 0;
             gc.gridy = 5;
             gc.weighty = 1.0;
-            add(new JPanel(),gc);
+            add(new JPanel(), gc);
 
         }
 
@@ -310,8 +313,11 @@ public class CredentialDialog extends JDialog {
             tfPassword.setToolTipText(tr("Please enter the password for authenticating at your proxy server"));
             lblHeading.setText(
                     "<html>" + tr("Authenticating at the HTTP proxy ''{0}'' failed. Please enter a valid username and a valid password.",
-                            Main.pref.get(ProxyPreferencesPanel.PROXY_HTTP_HOST) + ":" + Main.pref.get(ProxyPreferencesPanel.PROXY_HTTP_PORT)) + "</html>");
-            lblWarning.setText("<html>" + tr("Warning: depending on the authentication method the proxy server uses the password may be transferred unencrypted.") + "</html>");
+                            Main.pref.get(ProxyPreferencesPanel.PROXY_HTTP_HOST) + ":" +
+                            Main.pref.get(ProxyPreferencesPanel.PROXY_HTTP_PORT)) + "</html>");
+            lblWarning.setText("<html>" +
+                    tr("Warning: depending on the authentication method the proxy server uses the password may be transferred unencrypted.")
+                    + "</html>");
         }
 
         public HttpProxyCredentialsPanel(CredentialDialog owner) {
@@ -324,7 +330,7 @@ public class CredentialDialog extends JDialog {
         @Override
         public void focusGained(FocusEvent e) {
             if (e.getSource() instanceof JTextField) {
-                JTextField tf = (JTextField)e.getSource();
+                JTextField tf = (JTextField) e.getSource();
                 tf.selectAll();
             }
         }
@@ -342,8 +348,7 @@ public class CredentialDialog extends JDialog {
         protected JTextField currentTF;
         protected JTextField nextTF;
 
-        public TFKeyListener (CredentialDialog owner, JTextField currentTF, JTextField nextTF)
-        {
+        public TFKeyListener(CredentialDialog owner, JTextField currentTF, JTextField nextTF) {
             this.owner = owner;
             this.currentTF = currentTF;
             this.nextTF = nextTF;
@@ -351,7 +356,7 @@ public class CredentialDialog extends JDialog {
 
         @Override
         public void keyPressed(KeyEvent e) {
-            if(e.getKeyChar() == KeyEvent.VK_ENTER) {
+            if (e.getKeyChar() == KeyEvent.VK_ENTER) {
                 if (currentTF.getText().trim().isEmpty()) {
                     currentTF.selectAll();
                     return;
@@ -367,11 +372,11 @@ public class CredentialDialog extends JDialog {
         }
 
         @Override
-        public void keyReleased ( KeyEvent e ){
+        public void keyReleased(KeyEvent e) {
         }
 
         @Override
-        public void keyTyped ( KeyEvent e ){
+        public void keyTyped(KeyEvent e) {
         }
     }
 
diff --git a/src/org/openstreetmap/josm/gui/io/DownloadFileTask.java b/src/org/openstreetmap/josm/gui/io/DownloadFileTask.java
index e49600e..e53e0a1 100644
--- a/src/org/openstreetmap/josm/gui/io/DownloadFileTask.java
+++ b/src/org/openstreetmap/josm/gui/io/DownloadFileTask.java
@@ -53,8 +53,16 @@ public class DownloadFileTask extends PleaseWaitRunnable{
     }
 
     private static class DownloadException extends Exception {
-        public DownloadException(String msg) {
-            super(msg);
+        /**
+         * Constructs a new {@code DownloadException}.
+         * @param message the detail message. The detail message is saved for
+         *          later retrieval by the {@link #getMessage()} method.
+         * @param  cause the cause (which is saved for later retrieval by the
+         *         {@link #getCause()} method).  (A <tt>null</tt> value is
+         *         permitted, and indicates that the cause is nonexistent or unknown.)
+         */
+        public DownloadException(String message, Throwable cause) {
+            super(message, cause);
         }
     }
 
@@ -68,7 +76,6 @@ public class DownloadFileTask extends PleaseWaitRunnable{
         downloadConnection = null;
     }
 
-
     @Override
     protected void cancel() {
         this.canceled = true;
@@ -93,7 +100,7 @@ public class DownloadFileTask extends PleaseWaitRunnable{
 
             URL url = new URL(address);
             int size;
-            synchronized(this) {
+            synchronized (this) {
                 downloadConnection = Utils.openHttpConnection(url);
                 downloadConnection.setRequestProperty("Cache-Control", "no-cache");
                 downloadConnection.connect();
@@ -101,23 +108,23 @@ public class DownloadFileTask extends PleaseWaitRunnable{
             }
 
             progressMonitor.setTicksCount(100);
-            progressMonitor.subTask(tr("Downloading File {0}: {1} bytes...", file.getName(),size));
+            progressMonitor.subTask(tr("Downloading File {0}: {1} bytes...", file.getName(), size));
 
             try (
                 InputStream in = downloadConnection.getInputStream();
                 OutputStream out = new FileOutputStream(file)
             ) {
                 byte[] buffer = new byte[32768];
-                int count=0;
-                int p1=0, p2=0;
+                int count = 0;
+                int p1 = 0, p2 = 0;
                 for (int read = in.read(buffer); read != -1; read = in.read(buffer)) {
                     out.write(buffer, 0, read);
-                    count+=read;
+                    count += read;
                     if (canceled) break;
                     p2 = 100 * count / size;
-                    if (p2!=p1) {
+                    if (p2 != p1) {
                         progressMonitor.setTicks(p2);
-                        p1=p2;
+                        p1 = p2;
                     }
                 }
             }
@@ -129,14 +136,15 @@ public class DownloadFileTask extends PleaseWaitRunnable{
                     file.delete();
                 }
             }
-        } catch(MalformedURLException e) {
-            String msg = tr("Cannot download file ''{0}''. Its download link ''{1}'' is not a valid URL. Skipping download.", file.getName(), address);
+        } catch (MalformedURLException e) {
+            String msg = tr("Cannot download file ''{0}''. Its download link ''{1}'' is not a valid URL. Skipping download.",
+                    file.getName(), address);
             Main.warn(msg);
-            throw new DownloadException(msg);
+            throw new DownloadException(msg, e);
         } catch (IOException e) {
             if (canceled)
                 return;
-            throw new DownloadException(e.getMessage());
+            throw new DownloadException(e.getMessage(), e);
         } finally {
             closeConnectionIfNeeded();
         }
@@ -147,7 +155,7 @@ public class DownloadFileTask extends PleaseWaitRunnable{
         if (canceled) return;
         try {
             download();
-        } catch(DownloadException e) {
+        } catch (DownloadException e) {
             Main.error(e);
         }
     }
@@ -164,9 +172,9 @@ public class DownloadFileTask extends PleaseWaitRunnable{
     /**
      * Recursive unzipping function
      * TODO: May be placed somewhere else - Tools.Utils?
-     * @param file
-     * @param dir
-     * @throws IOException
+     * @param file zip file
+     * @param dir output directory
+     * @throws IOException if any I/O error occurs
      */
     public static void unzipFileRecursively(File file, String dir) throws IOException {
         try (ZipFile zf = new ZipFile(file, StandardCharsets.UTF_8)) {
diff --git a/src/org/openstreetmap/josm/gui/io/DownloadOpenChangesetsTask.java b/src/org/openstreetmap/josm/gui/io/DownloadOpenChangesetsTask.java
index e5699a3..f682af7 100644
--- a/src/org/openstreetmap/josm/gui/io/DownloadOpenChangesetsTask.java
+++ b/src/org/openstreetmap/josm/gui/io/DownloadOpenChangesetsTask.java
@@ -47,7 +47,7 @@ public class DownloadOpenChangesetsTask extends PleaseWaitRunnable {
     @Override
     protected void cancel() {
         this.canceled = true;
-        synchronized(this) {
+        synchronized (this) {
             if (reader != null) {
                 reader.cancel();
             }
@@ -69,7 +69,7 @@ public class DownloadOpenChangesetsTask extends PleaseWaitRunnable {
             );
             return;
         }
-        if (canceled)return;
+        if (canceled) return;
         if (lastException != null) {
             ExceptionDialogUtil.explainException(lastException);
             return;
@@ -97,13 +97,13 @@ public class DownloadOpenChangesetsTask extends PleaseWaitRunnable {
      * the users id yet.
      *
      */
-    protected void refreshUserIdentity(){
+    protected void refreshUserIdentity() {
         JosmUserIdentityManager im = JosmUserIdentityManager.getInstance();
         try {
             OsmServerUserInfoReader infoReader = new OsmServerUserInfoReader();
             UserInfo info = infoReader.fetchUserInfo(getProgressMonitor().createSubTaskMonitor(1, false));
             im.setFullyIdentified(info.getDisplayName(), info);
-        } catch(OsmTransferException e) {
+        } catch (OsmTransferException e) {
             // retrieving the user info can fail if the current user is not authorised to
             // retrieve it, i.e. if he is working with an OAuth Access Token which doesn't
             // have the respective privileges or if he didn't or he can't authenticate with
@@ -126,13 +126,13 @@ public class DownloadOpenChangesetsTask extends PleaseWaitRunnable {
             JosmUserIdentityManager im = JosmUserIdentityManager.getInstance();
             if (im.isAnonymous()) {
                 refreshUserIdentity();
-            } else if (im.isFullyIdentified()){
+            } else if (im.isFullyIdentified()) {
                 // do nothing
             } else if (im.isPartiallyIdentified()) {
                 refreshUserIdentity();
             }
-            if (canceled)return;
-            synchronized(this) {
+            if (canceled) return;
+            synchronized (this) {
                 reader = new OsmServerChangesetReader();
             }
             ChangesetQuery query = new ChangesetQuery().beingOpen(true);
@@ -152,7 +152,7 @@ public class DownloadOpenChangesetsTask extends PleaseWaitRunnable {
                     query,
                     getProgressMonitor().createSubTaskMonitor(1, false /* not internal */)
             );
-        } catch(Exception e) {
+        } catch (Exception e) {
             if (canceled)
                 return;
             lastException = e;
diff --git a/src/org/openstreetmap/josm/gui/io/DownloadPrimitivesTask.java b/src/org/openstreetmap/josm/gui/io/DownloadPrimitivesTask.java
index f955e3b..30a96d6 100644
--- a/src/org/openstreetmap/josm/gui/io/DownloadPrimitivesTask.java
+++ b/src/org/openstreetmap/josm/gui/io/DownloadPrimitivesTask.java
@@ -82,7 +82,7 @@ public class DownloadPrimitivesTask extends PleaseWaitRunnable {
     @Override
     protected void cancel() {
         canceled = true;
-        synchronized(this) {
+        synchronized (this) {
             if (multiObjectReader != null) {
                 multiObjectReader.cancel();
             }
@@ -104,7 +104,7 @@ public class DownloadPrimitivesTask extends PleaseWaitRunnable {
             @Override
             public void run() {
                 layer.mergeFrom(ds);
-                if(Main.map != null)
+                if (Main.map != null)
                     AutoScaleAction.zoomTo(ds.allPrimitives());
                 layer.onPostDownloadFromServer();
             }
@@ -138,14 +138,14 @@ public class DownloadPrimitivesTask extends PleaseWaitRunnable {
         this.ds = new DataSet();
         DataSet theirDataSet;
         try {
-            synchronized(this) {
+            synchronized (this) {
                 if (canceled) return;
                 multiObjectReader = new MultiFetchServerObjectReader();
             }
             initMultiFetchReader(multiObjectReader);
             theirDataSet = multiObjectReader.parseOsm(progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false));
             missingPrimitives = multiObjectReader.getMissingPrimitives();
-            synchronized(this) {
+            synchronized (this) {
                 multiObjectReader = null;
             }
             DataSetMerger merger = new DataSetMerger(ds, theirDataSet);
@@ -157,7 +157,7 @@ public class DownloadPrimitivesTask extends PleaseWaitRunnable {
                 // Relations may be incomplete in case of nested relations if child relations are accessed before their parent
                 // (it may happen because "relations" has no deterministic sort order, see #10388)
                 if (r.isIncomplete() || r.hasIncompleteMembers()) {
-                    synchronized(this) {
+                    synchronized (this) {
                         if (canceled) return;
                         objectReader = new OsmServerObjectReader(r.getId(), OsmPrimitiveType.RELATION, fullRelation);
                     }
@@ -177,7 +177,7 @@ public class DownloadPrimitivesTask extends PleaseWaitRunnable {
             for (Way w : ds.getWays()) {
                 if (canceled) return;
                 if (w.hasIncompleteNodes()) {
-                    synchronized(this) {
+                    synchronized (this) {
                         if (canceled) return;
                         objectReader = new OsmServerObjectReader(w.getId(), OsmPrimitiveType.WAY, true /* full */);
                     }
@@ -190,7 +190,7 @@ public class DownloadPrimitivesTask extends PleaseWaitRunnable {
                 }
             }
 
-        } catch(Exception e) {
+        } catch (Exception e) {
             if (canceled) return;
             lastException = e;
         }
diff --git a/src/org/openstreetmap/josm/gui/io/DownloadPrimitivesWithReferrersTask.java b/src/org/openstreetmap/josm/gui/io/DownloadPrimitivesWithReferrersTask.java
index 3083196..ff7e370 100644
--- a/src/org/openstreetmap/josm/gui/io/DownloadPrimitivesWithReferrersTask.java
+++ b/src/org/openstreetmap/josm/gui/io/DownloadPrimitivesWithReferrersTask.java
@@ -1,3 +1,4 @@
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.io;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -47,7 +48,7 @@ public class DownloadPrimitivesWithReferrersTask extends PleaseWaitRunnable {
     private final boolean downloadReferrers;
 
     /** Temporary layer where downloaded primitives are put */
-    private OsmDataLayer tmpLayer;
+    private final OsmDataLayer tmpLayer;
     /** Reference to the task that download requested primitives */
     private DownloadPrimitivesTask mainTask;
     /** Flag indicated that user ask for cancel this task */
@@ -83,9 +84,9 @@ public class DownloadPrimitivesWithReferrersTask extends PleaseWaitRunnable {
      */
     @Override
     protected void cancel() {
-        synchronized(this) {
+        synchronized (this) {
             canceled = true;
-            if(currentTask != null)
+            if (currentTask != null)
                 currentTask.operationCanceled();
         }
     }
@@ -95,19 +96,19 @@ public class DownloadPrimitivesWithReferrersTask extends PleaseWaitRunnable {
         getProgressMonitor().setTicksCount(ids.size()+1);
         // First, download primitives
         mainTask = new DownloadPrimitivesTask(tmpLayer, ids, full, getProgressMonitor().createSubTaskMonitor(1, false));
-        synchronized(this) {
+        synchronized (this) {
             currentTask = mainTask;
-            if(canceled) {
+            if (canceled) {
                 currentTask = null;
                 return;
             }
         }
         currentTask.run();
         // Then, download referrers for each primitive
-        if(downloadReferrers)
-            for(PrimitiveId id : ids) {
-                synchronized(this) {
-                    if(canceled) {
+        if (downloadReferrers)
+            for (PrimitiveId id : ids) {
+                synchronized (this) {
+                    if (canceled) {
                         currentTask = null;
                         return;
                     }
@@ -121,14 +122,14 @@ public class DownloadPrimitivesWithReferrersTask extends PleaseWaitRunnable {
 
     @Override
     protected void finish() {
-        synchronized(this) {
-            if(canceled)
+        synchronized (this) {
+            if (canceled)
                 return;
         }
 
         // Append downloaded data to JOSM
         OsmDataLayer layer = Main.main.getEditLayer();
-        if(layer == null || this.newLayer)
+        if (layer == null || this.newLayer)
             Main.main.addLayer(tmpLayer);
         else
             layer.mergeFrom(tmpLayer);
@@ -185,8 +186,8 @@ public class DownloadPrimitivesWithReferrersTask extends PleaseWaitRunnable {
      * @return List of primitives id or null if no primitives was downloaded
      */
     public List<PrimitiveId> getDownloadedId() {
-        synchronized(this) {
-            if(canceled)
+        synchronized (this) {
+            if (canceled)
                 return null;
         }
         List<PrimitiveId> downloaded = new ArrayList<>(ids);
@@ -207,12 +208,13 @@ public class DownloadPrimitivesWithReferrersTask extends PleaseWaitRunnable {
             String title, String text, String listLabel, int msgType) {
         JPanel p = new JPanel(new GridBagLayout());
         p.add(new HtmlPanel(text), GBC.eop());
+        JosmTextArea txt = new JosmTextArea();
         if (listLabel != null) {
             JLabel missing = new JLabel(listLabel);
             missing.setFont(missing.getFont().deriveFont(Font.PLAIN));
+            missing.setLabelFor(txt);
             p.add(missing, GBC.eol());
         }
-        JosmTextArea txt = new JosmTextArea();
         txt.setFont(GuiHelper.getMonospacedFont(txt));
         txt.setEditable(false);
         txt.setBackground(p.getBackground());
@@ -225,8 +227,8 @@ public class DownloadPrimitivesWithReferrersTask extends PleaseWaitRunnable {
         return new ExtendedDialog(
                 Main.parent,
                 title,
-                new String[] { tr("Ok") })
-        .setButtonIcons(new String[] { "ok" })
+                new String[] {tr("Ok")})
+        .setButtonIcons(new String[] {"ok"})
         .setIcon(msgType)
         .setContent(p, false);
     }
diff --git a/src/org/openstreetmap/josm/gui/io/LayerNameAndFilePathTableCell.java b/src/org/openstreetmap/josm/gui/io/LayerNameAndFilePathTableCell.java
index 8d6e721..169ad2a 100644
--- a/src/org/openstreetmap/josm/gui/io/LayerNameAndFilePathTableCell.java
+++ b/src/org/openstreetmap/josm/gui/io/LayerNameAndFilePathTableCell.java
@@ -30,7 +30,7 @@ import org.openstreetmap.josm.gui.widgets.JosmTextField;
 import org.openstreetmap.josm.tools.GBC;
 
 class LayerNameAndFilePathTableCell extends JPanel implements TableCellRenderer, TableCellEditor {
-    private static final Color colorError = new Color(255,197,197);
+    private static final Color colorError = new Color(255, 197, 197);
     private static final String separator = System.getProperty("file.separator");
     private static final String ellipsis = "…" + separator;
 
@@ -53,6 +53,7 @@ class LayerNameAndFilePathTableCell extends JPanel implements TableCellRenderer,
 
         lblFilename.setPreferredSize(new Dimension(lblFilename.getPreferredSize().width, 19));
         lblFilename.setOpaque(true);
+        lblFilename.setLabelFor(btnFileChooser);
 
         tfFilename.setToolTipText(tr("Either edit the path manually in the text field or click the \"...\" button to open a file chooser."));
         tfFilename.setPreferredSize(new Dimension(tfFilename.getPreferredSize().width, 19));
@@ -76,15 +77,14 @@ class LayerNameAndFilePathTableCell extends JPanel implements TableCellRenderer,
     public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
             boolean hasFocus, int row, int column) {
         removeAll();
-        SaveLayerInfo info = (SaveLayerInfo)value;
+        SaveLayerInfo info = (SaveLayerInfo) value;
         StringBuilder sb = new StringBuilder();
-        sb.append("<html>");
-        sb.append(addLblLayerName(info));
-        sb.append("<br>");
+        sb.append("<html>")
+          .append(addLblLayerName(info))
+          .append("<br>");
         add(btnFileChooser, GBC.std());
-        sb.append(addLblFilename(info));
-
-        sb.append("</html>");
+        sb.append(addLblFilename(info))
+          .append("</html>");
         setToolTipText(sb.toString());
         return this;
     }
@@ -92,21 +92,21 @@ class LayerNameAndFilePathTableCell extends JPanel implements TableCellRenderer,
     @Override
     public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
         removeAll();
-        SaveLayerInfo info = (SaveLayerInfo)value;
+        SaveLayerInfo info = (SaveLayerInfo) value;
         value = info.getFile();
         tfFilename.setText(value == null ? "" : value.toString());
 
         StringBuilder sb = new StringBuilder();
-        sb.append("<html>");
-        sb.append(addLblLayerName(info));
-        sb.append("<br/>");
+        sb.append("<html>")
+          .append(addLblLayerName(info))
+          .append("<br/>");
 
         add(btnFileChooser, GBC.std());
         add(tfFilename, GBC.eol().fill(GBC.HORIZONTAL).insets(1, 0, 0, 0));
         tfFilename.selectAll();
 
-        sb.append(tfFilename.getToolTipText());
-        sb.append("</html>");
+        sb.append(tfFilename.getToolTipText())
+          .append("</html>");
         setToolTipText(sb.toString());
         return this;
     }
@@ -160,9 +160,9 @@ class LayerNameAndFilePathTableCell extends JPanel implements TableCellRenderer,
      * Idea: /home/user/josm → …/user/josm → …/josm; and take the first one that fits */
     private String makePathFit(String t) {
         boolean hasEllipsis = false;
-        while(t != null && !t.isEmpty()) {
+        while (t != null && !t.isEmpty()) {
             int txtwidth = lblFilename.getFontMetrics(lblFilename.getFont()).stringWidth(t);
-            if(txtwidth < lblFilename.getWidth() || t.lastIndexOf(separator) < ellipsis.length()) {
+            if (txtwidth < lblFilename.getWidth() || t.lastIndexOf(separator) < ellipsis.length()) {
                 break;
             }
             // remove ellipsis, if present
diff --git a/src/org/openstreetmap/josm/gui/io/OpenChangesetComboBoxModel.java b/src/org/openstreetmap/josm/gui/io/OpenChangesetComboBoxModel.java
index 7ae6bf4..78ed398 100644
--- a/src/org/openstreetmap/josm/gui/io/OpenChangesetComboBoxModel.java
+++ b/src/org/openstreetmap/josm/gui/io/OpenChangesetComboBoxModel.java
@@ -99,9 +99,9 @@ public class OpenChangesetComboBoxModel extends DefaultComboBoxModel<Changeset>
             super.setSelectedItem(null);
             return;
         }
-        if (! (anObject instanceof Changeset)) return;
-        Changeset cs = (Changeset)anObject;
-        if (cs.getId() == 0 || ! cs.isOpen()) return;
+        if (!(anObject instanceof Changeset)) return;
+        Changeset cs = (Changeset) anObject;
+        if (cs.getId() == 0 || !cs.isOpen()) return;
         Changeset candidate = getChangesetById(cs.getId());
         if (candidate == null) return;
         this.selectedChangeset = candidate;
diff --git a/src/org/openstreetmap/josm/gui/io/RecentlyOpenedFilesMenu.java b/src/org/openstreetmap/josm/gui/io/RecentlyOpenedFilesMenu.java
index 8736bba..9c96cbf 100644
--- a/src/org/openstreetmap/josm/gui/io/RecentlyOpenedFilesMenu.java
+++ b/src/org/openstreetmap/josm/gui/io/RecentlyOpenedFilesMenu.java
@@ -58,7 +58,7 @@ public class RecentlyOpenedFilesMenu extends JMenu {
                 {
                     putValue(NAME, file);
                     putValue("help", ht("/Action/OpenRecent"));
-                    putValue("toolbar", false);
+                    putValue("toolbar", Boolean.FALSE);
                 }
                 @Override
                 public void actionPerformed(ActionEvent e) {
diff --git a/src/org/openstreetmap/josm/gui/io/SaveLayerTask.java b/src/org/openstreetmap/josm/gui/io/SaveLayerTask.java
index 2b824d8..9948547 100644
--- a/src/org/openstreetmap/josm/gui/io/SaveLayerTask.java
+++ b/src/org/openstreetmap/josm/gui/io/SaveLayerTask.java
@@ -16,12 +16,12 @@ import org.openstreetmap.josm.tools.CheckParameterUtil;
  * <pre>
  *     ExecutorService executorService = ...
  *     SaveLayerTask task = new SaveLayerTask(layer, monitor);
- *     Future<?> taskFuture = executorServce.submit(task)
+ *     Future<?> taskFuture = executorService.submit(task)
  *     try {
  *        // wait for the task to complete
  *        taskFuture.get();
- *     } catch(Exception e) {
- *        e.printStackTracek();
+ *     } catch (Exception e) {
+ *        e.printStackTrace();
  *     }
  * </pre>
  */
@@ -55,7 +55,7 @@ public class SaveLayerTask extends AbstractIOTask {
             if (!isCanceled()) {
                 layerInfo.getLayer().onPostSaveToFile();
             }
-        } catch(Exception e) {
+        } catch (Exception e) {
             Main.error(e);
             setLastException(e);
         }
diff --git a/src/org/openstreetmap/josm/gui/io/SaveLayersDialog.java b/src/org/openstreetmap/josm/gui/io/SaveLayersDialog.java
index cbc86b5..2e33a91 100644
--- a/src/org/openstreetmap/josm/gui/io/SaveLayersDialog.java
+++ b/src/org/openstreetmap/josm/gui/io/SaveLayersDialog.java
@@ -50,6 +50,7 @@ import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.gui.progress.SwingRenderingProgressMonitor;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.WindowGeometry;
 
 public class SaveLayersDialog extends JDialog implements TableModelListener {
@@ -73,7 +74,7 @@ public class SaveLayersDialog extends JDialog implements TableModelListener {
      * builds the GUI
      */
     protected void build() {
-        WindowGeometry geometry = WindowGeometry.centerOnScreen(new Dimension(650,300));
+        WindowGeometry geometry = WindowGeometry.centerOnScreen(new Dimension(650, 300));
         geometry.applySafe(this);
         getContentPane().setLayout(new BorderLayout());
 
@@ -149,7 +150,7 @@ public class SaveLayersDialog extends JDialog implements TableModelListener {
         ProgressMonitor monitor = new SwingRenderingProgressMonitor(pnlUploadLayers);
         monitor.beginTask(tr("Uploading and saving modified layers ..."));
         this.saveAndUploadTask = new SaveAndUploadTask(model, monitor);
-        new Thread(saveAndUploadTask).start();
+        new Thread(saveAndUploadTask, saveAndUploadTask.getClass().getName()).start();
     }
 
     protected void cancelSafeAndUploadTask() {
@@ -191,7 +192,7 @@ public class SaveLayersDialog extends JDialog implements TableModelListener {
             gc.fill = GridBagConstraints.HORIZONTAL;
             gc.weightx = 1.0;
             gc.weighty = 1.0;
-            add(lstLayers,gc);
+            add(lstLayers, gc);
         }
 
         public LayerListWarningMessagePanel(String msg, List<SaveLayerInfo> infos) {
@@ -352,10 +353,11 @@ public class SaveLayersDialog extends JDialog implements TableModelListener {
             setUserAction(UserAction.PROCEED);
             closeDialog();
         }
+
         @Override
         public void propertyChange(PropertyChangeEvent evt) {
             if (evt.getPropertyName().equals(SaveLayersModel.MODE_PROP)) {
-                Mode mode = (Mode)evt.getNewValue();
+                Mode mode = (Mode) evt.getNewValue();
                 switch(mode) {
                 case EDITING_DATA: setEnabled(true); break;
                 case UPLOADING_AND_SAVING: setEnabled(false); break;
@@ -402,14 +404,14 @@ public class SaveLayersDialog extends JDialog implements TableModelListener {
                 g.drawImage(model.getLayersToSave().isEmpty()   ? saveDis : save, is*1, 0, is, is, null);
                 g.drawImage(base,                                                 is*2, 0, is, is, null);
                 putValue(SMALL_ICON, new ImageIcon(newIco));
-            } catch(Exception e) {
+            } catch (Exception e) {
                 putValue(SMALL_ICON, getValue(BASE_ICON));
             }
         }
 
         @Override
         public void actionPerformed(ActionEvent e) {
-            if (! confirmSaveLayerInfosOK())
+            if (!confirmSaveLayerInfosOK())
                 return;
             launchSafeAndUploadTask();
         }
@@ -417,7 +419,7 @@ public class SaveLayersDialog extends JDialog implements TableModelListener {
         @Override
         public void propertyChange(PropertyChangeEvent evt) {
             if (evt.getPropertyName().equals(SaveLayersModel.MODE_PROP)) {
-                SaveLayersModel.Mode mode = (SaveLayersModel.Mode)evt.getNewValue();
+                SaveLayersModel.Mode mode = (SaveLayersModel.Mode) evt.getNewValue();
                 switch(mode) {
                 case EDITING_DATA: setEnabled(true); break;
                 case UPLOADING_AND_SAVING: setEnabled(false); break;
@@ -433,9 +435,9 @@ public class SaveLayersDialog extends JDialog implements TableModelListener {
      */
     protected class SaveAndUploadTask implements Runnable {
 
-        private SaveLayersModel model;
-        private ProgressMonitor monitor;
-        private ExecutorService worker;
+        private final SaveLayersModel model;
+        private final ProgressMonitor monitor;
+        private final ExecutorService worker;
         private boolean canceled;
         private Future<?> currentFuture;
         private AbstractIOTask currentTask;
@@ -443,7 +445,7 @@ public class SaveLayersDialog extends JDialog implements TableModelListener {
         public SaveAndUploadTask(SaveLayersModel model, ProgressMonitor monitor) {
             this.model = model;
             this.monitor = monitor;
-            this.worker = Executors.newSingleThreadExecutor();
+            this.worker = Executors.newSingleThreadExecutor(Utils.newThreadFactory(getClass() + "-%d", Thread.NORM_PRIORITY));
         }
 
         protected void uploadLayers(List<SaveLayerInfo> toUpload) {
@@ -480,9 +482,9 @@ public class SaveLayersDialog extends JDialog implements TableModelListener {
                     // wait for the asynchronous task to complete
                     //
                     currentFuture.get();
-                } catch(CancellationException e) {
+                } catch (CancellationException e) {
                     model.setUploadState(layer, UploadOrSaveState.CANCELED);
-                } catch(Exception e) {
+                } catch (Exception e) {
                     Main.error(e);
                     model.setUploadState(layer, UploadOrSaveState.FAILED);
                     ExceptionDialogUtil.explainException(e);
@@ -521,9 +523,9 @@ public class SaveLayersDialog extends JDialog implements TableModelListener {
                     // wait for the asynchronous task to complete
                     //
                     currentFuture.get();
-                } catch(CancellationException e) {
+                } catch (CancellationException e) {
                     model.setSaveState(layerInfo.getLayer(), UploadOrSaveState.CANCELED);
-                } catch(Exception e) {
+                } catch (Exception e) {
                     Main.error(e);
                     model.setSaveState(layerInfo.getLayer(), UploadOrSaveState.FAILED);
                     ExceptionDialogUtil.explainException(e);
@@ -547,6 +549,7 @@ public class SaveLayersDialog extends JDialog implements TableModelListener {
         protected void warnBecauseOfUnsavedData() {
             int numProblems = model.getNumCancel() + model.getNumFailed();
             if (numProblems == 0) return;
+            Main.warn(numProblems + " problems occured during upload/save");
             String msg = trn(
                     "<html>An upload and/or save operation of one layer with modifications<br>"
                     + "was canceled or has failed.</html>",
@@ -591,12 +594,14 @@ public class SaveLayersDialog extends JDialog implements TableModelListener {
                     }
                 }
             });
+            worker.shutdownNow();
         }
 
         public void cancel() {
             if (currentTask != null) {
                 currentTask.cancel();
             }
+            worker.shutdown();
             canceled = true;
         }
     }
@@ -604,7 +609,7 @@ public class SaveLayersDialog extends JDialog implements TableModelListener {
     @Override
     public void tableChanged(TableModelEvent arg0) {
         boolean dis = model.getLayersToSave().isEmpty() && model.getLayersToUpload().isEmpty();
-        if(saveAndProceedActionButton != null) {
+        if (saveAndProceedActionButton != null) {
             saveAndProceedActionButton.setEnabled(!dis);
         }
         saveAndProceedAction.redrawIcon();
diff --git a/src/org/openstreetmap/josm/gui/io/SaveLayersModel.java b/src/org/openstreetmap/josm/gui/io/SaveLayersModel.java
index 1f2dc0d..b220652 100644
--- a/src/org/openstreetmap/josm/gui/io/SaveLayersModel.java
+++ b/src/org/openstreetmap/josm/gui/io/SaveLayersModel.java
@@ -16,6 +16,7 @@ import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 
 public class SaveLayersModel extends DefaultTableModel {
     public static final String MODE_PROP = SaveLayerInfo.class.getName() + ".mode";
+
     public enum Mode {
         EDITING_DATA,
         UPLOADING_AND_SAVING
@@ -103,7 +104,7 @@ public class SaveLayersModel extends DefaultTableModel {
     public void setValueAt(Object value, int row, int column) {
         switch(column) {
         case columnFilename:
-            this.layerInfo.get(row).setFile((File)value);
+            this.layerInfo.get(row).setFile((File) value);
             this.layerInfo.get(row).setDoSaveToFile(true);
             break;
         case columnActions:
@@ -130,7 +131,7 @@ public class SaveLayersModel extends DefaultTableModel {
     }
 
     public List<SaveLayerInfo> getLayersWithIllegalFilesAndSaveRequest() {
-        List<SaveLayerInfo> ret =new ArrayList<>();
+        List<SaveLayerInfo> ret = new ArrayList<>();
         for (SaveLayerInfo info: layerInfo) {
             if (info.isDoSaveToFile() && info.getFile() != null && info.getFile().exists() && !info.getFile().canWrite()) {
                 ret.add(info);
@@ -143,7 +144,7 @@ public class SaveLayersModel extends DefaultTableModel {
         List<SaveLayerInfo> ret = new ArrayList<>();
         for (SaveLayerInfo info: layerInfo) {
             AbstractModifiableLayer l = info.getLayer();
-            if (info.isDoUploadToServer() && l instanceof OsmDataLayer && !((OsmDataLayer)l).getConflicts().isEmpty()) {
+            if (info.isDoUploadToServer() && l instanceof OsmDataLayer && !((OsmDataLayer) l).getConflicts().isEmpty()) {
                 ret.add(info);
             }
         }
@@ -203,9 +204,9 @@ public class SaveLayersModel extends DefaultTableModel {
 
     public boolean hasUnsavedData() {
         for (SaveLayerInfo info: layerInfo) {
-            if (info.isDoUploadToServer() && ! UploadOrSaveState.OK.equals(info.getUploadState()))
+            if (info.isDoUploadToServer() && !UploadOrSaveState.OK.equals(info.getUploadState()))
                 return true;
-            if (info.isDoSaveToFile() && ! UploadOrSaveState.OK.equals(info.getSaveState()))
+            if (info.isDoSaveToFile() && !UploadOrSaveState.OK.equals(info.getSaveState()))
                 return true;
         }
         return false;
diff --git a/src/org/openstreetmap/josm/gui/io/SaveLayersTable.java b/src/org/openstreetmap/josm/gui/io/SaveLayersTable.java
index 04a2da9..f50d33a 100644
--- a/src/org/openstreetmap/josm/gui/io/SaveLayersTable.java
+++ b/src/org/openstreetmap/josm/gui/io/SaveLayersTable.java
@@ -21,7 +21,7 @@ class SaveLayersTable extends JTable implements PropertyChangeListener {
     @Override
     public void propertyChange(PropertyChangeEvent evt) {
         if (evt.getPropertyName().equals(SaveLayersModel.MODE_PROP)) {
-            Mode mode = (Mode)evt.getNewValue();
+            Mode mode = (Mode) evt.getNewValue();
             switch(mode) {
             case EDITING_DATA: setEnabled(true);
             break;
diff --git a/src/org/openstreetmap/josm/gui/io/SaveLayersTableColumnModel.java b/src/org/openstreetmap/josm/gui/io/SaveLayersTableColumnModel.java
index bcabc86..426e957 100644
--- a/src/org/openstreetmap/josm/gui/io/SaveLayersTableColumnModel.java
+++ b/src/org/openstreetmap/josm/gui/io/SaveLayersTableColumnModel.java
@@ -24,6 +24,9 @@ class SaveLayersTableColumnModel extends DefaultTableColumnModel {
         private final JLabel needsSave = new JLabel(tr("should be saved"));
         private static final GBC defaultCellStyle = GBC.eol().fill(GBC.HORIZONTAL).insets(2, 0, 2, 0);
 
+        /**
+         * Constructs a new {@code RecommendedActionsTableCell}.
+         */
         public RecommendedActionsTableCell() {
             pnlEmpty.setPreferredSize(new Dimension(1, 19));
             needsUpload.setPreferredSize(new Dimension(needsUpload.getPreferredSize().width, 19));
@@ -34,8 +37,8 @@ class SaveLayersTableColumnModel extends DefaultTableColumnModel {
         public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
                 boolean hasFocus, int row, int column) {
             JPanel panel = new JPanel(new GridBagLayout());
-            SaveLayerInfo info = (SaveLayerInfo)value;
-            StringBuilder sb = new StringBuilder();
+            SaveLayerInfo info = (SaveLayerInfo) value;
+            StringBuilder sb = new StringBuilder(24);
             sb.append("<html>");
             if (info.getLayer().requiresUploadToServer() && !info.getLayer().isUploadDiscouraged()) {
                 panel.add(needsUpload, defaultCellStyle);
@@ -53,7 +56,8 @@ class SaveLayersTableColumnModel extends DefaultTableColumnModel {
 
             if (info.getLayer().requiresSaveToFile()) {
                 panel.add(needsSave, defaultCellStyle);
-                sb.append(tr("Layer ''{0}'' has modifications which should be saved to its associated file ''{1}''.", info.getName(), info.getFile().toString()));
+                sb.append(tr("Layer ''{0}'' has modifications which should be saved to its associated file ''{1}''.",
+                        info.getName(), info.getFile().toString()));
             } else {
                 panel.add(pnlEmpty, defaultCellStyle);
                 sb.append(tr("Layer ''{0}'' has no modifications to be saved.", info.getName()));
@@ -64,6 +68,13 @@ class SaveLayersTableColumnModel extends DefaultTableColumnModel {
         }
     }
 
+    /**
+     * Constructs a new {@code SaveLayersTableColumnModel}.
+     */
+    public SaveLayersTableColumnModel() {
+        build();
+    }
+
     protected void build() {
         TableColumn col = null;
 
@@ -96,8 +107,4 @@ class SaveLayersTableColumnModel extends DefaultTableColumnModel {
 
         addColumn(col);
     }
-
-    public SaveLayersTableColumnModel() {
-        build();
-    }
 }
diff --git a/src/org/openstreetmap/josm/gui/io/TagSettingsPanel.java b/src/org/openstreetmap/josm/gui/io/TagSettingsPanel.java
index 16047fa..4537314 100644
--- a/src/org/openstreetmap/josm/gui/io/TagSettingsPanel.java
+++ b/src/org/openstreetmap/josm/gui/io/TagSettingsPanel.java
@@ -21,7 +21,7 @@ import org.openstreetmap.josm.tools.CheckParameterUtil;
 public class TagSettingsPanel extends JPanel implements TableModelListener {
 
     /** checkbox for selecting whether an atomic upload is to be used  */
-    private final TagEditorPanel pnlTagEditor = new TagEditorPanel(null);
+    private final TagEditorPanel pnlTagEditor = new TagEditorPanel(null, null, Changeset.MAX_CHANGESET_TAG_LENGTH);
     /** the model for the changeset comment */
     private final transient ChangesetCommentModel changesetCommentModel;
     private final transient ChangesetCommentModel changesetSourceModel;
@@ -80,7 +80,7 @@ public class TagSettingsPanel extends JPanel implements TableModelListener {
     }
 
     public void initFromChangeset(Changeset cs) {
-        Map<String,String> tags = getDefaultTags();
+        Map<String, String> tags = getDefaultTags();
         if (cs != null) {
             tags.putAll(cs.getKeys());
         }
@@ -105,12 +105,12 @@ public class TagSettingsPanel extends JPanel implements TableModelListener {
      *
      * @return the map with the current tags in the tag editor model.
      */
-    public Map<String,String> getTags(boolean keepEmpty) {
+    public Map<String, String> getTags(boolean keepEmpty) {
         return pnlTagEditor.getModel().getTags(keepEmpty);
     }
 
-    public Map<String,String> getDefaultTags() {
-        Map<String,String> tags = new HashMap<>();
+    public Map<String, String> getDefaultTags() {
+        Map<String, String> tags = new HashMap<>();
         tags.putAll(defaultTags);
         return tags;
     }
@@ -150,7 +150,7 @@ public class TagSettingsPanel extends JPanel implements TableModelListener {
         @Override
         public void update(Observable o, Object arg) {
             if (!(o instanceof ChangesetCommentModel)) return;
-            String newValue = (String)arg;
+            String newValue = (String) arg;
             String oldValue = getTagEditorValue(key);
             if (oldValue == null) {
                 oldValue = "";
diff --git a/src/org/openstreetmap/josm/gui/io/UpdatePrimitivesTask.java b/src/org/openstreetmap/josm/gui/io/UpdatePrimitivesTask.java
index 7b16c76..2cefaab 100644
--- a/src/org/openstreetmap/josm/gui/io/UpdatePrimitivesTask.java
+++ b/src/org/openstreetmap/josm/gui/io/UpdatePrimitivesTask.java
@@ -59,7 +59,7 @@ public class UpdatePrimitivesTask extends PleaseWaitRunnable {
     @Override
     protected void cancel() {
         canceled = true;
-        synchronized(this) {
+        synchronized (this) {
             if (multiObjectReader != null) {
                 multiObjectReader.cancel();
             }
@@ -92,7 +92,7 @@ public class UpdatePrimitivesTask extends PleaseWaitRunnable {
             if (primitive instanceof Node && !primitive.isNew()) {
                 reader.append(primitive);
             } else if (primitive instanceof Way) {
-                Way way = (Way)primitive;
+                Way way = (Way) primitive;
                 for (Node node: way.getNodes()) {
                     if (!node.isNew()) {
                         reader.append(node);
@@ -125,7 +125,7 @@ public class UpdatePrimitivesTask extends PleaseWaitRunnable {
         this.ds = new DataSet();
         DataSet theirDataSet;
         try {
-            synchronized(this) {
+            synchronized (this) {
                 if (canceled) return;
                 multiObjectReader = new MultiFetchServerObjectReader();
             }
@@ -133,7 +133,7 @@ public class UpdatePrimitivesTask extends PleaseWaitRunnable {
             initMultiFetchReaderWithWays(multiObjectReader);
             initMultiFetchReaderWithRelations(multiObjectReader);
             theirDataSet = multiObjectReader.parseOsm(progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false));
-            synchronized(this) {
+            synchronized (this) {
                 multiObjectReader = null;
             }
             DataSetMerger merger = new DataSetMerger(ds, theirDataSet);
@@ -145,7 +145,7 @@ public class UpdatePrimitivesTask extends PleaseWaitRunnable {
             for (Way w : ds.getWays()) {
                 if (canceled) return;
                 if (w.hasIncompleteNodes()) {
-                    synchronized(this) {
+                    synchronized (this) {
                         if (canceled) return;
                         objectReader = new OsmServerObjectReader(w.getId(), OsmPrimitiveType.WAY, true /* full */);
                     }
@@ -157,7 +157,7 @@ public class UpdatePrimitivesTask extends PleaseWaitRunnable {
                     merger.merge();
                 }
             }
-        } catch(Exception e) {
+        } catch (Exception e) {
             if (canceled)
                 return;
             lastException = e;
diff --git a/src/org/openstreetmap/josm/gui/io/UploadAndSaveProgressRenderer.java b/src/org/openstreetmap/josm/gui/io/UploadAndSaveProgressRenderer.java
index 96ab187..1d3b578 100644
--- a/src/org/openstreetmap/josm/gui/io/UploadAndSaveProgressRenderer.java
+++ b/src/org/openstreetmap/josm/gui/io/UploadAndSaveProgressRenderer.java
@@ -20,6 +20,15 @@ class UploadAndSaveProgressRenderer extends JPanel implements ProgressRenderer,
     private JLabel lblCustomText;
     private JProgressBar progressBar;
 
+    /**
+     * Constructs a new {@code UploadAndSaveProgressRenderer}.
+     */
+    public UploadAndSaveProgressRenderer() {
+        build();
+        // initially not visible
+        setVisible(false);
+    }
+
     protected void build() {
         setLayout(new GridBagLayout());
         GridBagConstraints gc = new GridBagConstraints();
@@ -28,7 +37,7 @@ class UploadAndSaveProgressRenderer extends JPanel implements ProgressRenderer,
         gc.fill = GridBagConstraints.HORIZONTAL;
         gc.weightx = 1.0;
         gc.weighty = 0.0;
-        gc.insets = new Insets(5,0,0,5);
+        gc.insets = new Insets(5, 0, 0, 5);
         add(lblTaskTitle = new JLabel(""), gc);
 
         gc.gridx = 0;
@@ -36,7 +45,7 @@ class UploadAndSaveProgressRenderer extends JPanel implements ProgressRenderer,
         gc.fill = GridBagConstraints.HORIZONTAL;
         gc.weightx = 1.0;
         gc.weighty = 0.0;
-        gc.insets = new Insets(5,0,0,5);
+        gc.insets = new Insets(5, 0, 0, 5);
         add(lblCustomText = new JLabel(""), gc);
 
         gc.gridx = 0;
@@ -44,16 +53,10 @@ class UploadAndSaveProgressRenderer extends JPanel implements ProgressRenderer,
         gc.fill = GridBagConstraints.HORIZONTAL;
         gc.weightx = 1.0;
         gc.weighty = 0.0;
-        gc.insets = new Insets(5,0,0,5);
+        gc.insets = new Insets(5, 0, 0, 5);
         add(progressBar = new JProgressBar(JProgressBar.HORIZONTAL), gc);
     }
 
-    public UploadAndSaveProgressRenderer() {
-        build();
-        // initially not visible
-        setVisible(false);
-    }
-
     @Override
     public void setCustomText(String message) {
         lblCustomText.setText(message);
@@ -87,7 +90,7 @@ class UploadAndSaveProgressRenderer extends JPanel implements ProgressRenderer,
     @Override
     public void propertyChange(PropertyChangeEvent evt) {
         if (evt.getPropertyName().equals(SaveLayersModel.MODE_PROP)) {
-            Mode mode = (Mode)evt.getNewValue();
+            Mode mode = (Mode) evt.getNewValue();
             switch(mode) {
                 case EDITING_DATA: setVisible(false); break;
                 case UPLOADING_AND_SAVING: setVisible(true); break;
diff --git a/src/org/openstreetmap/josm/gui/io/UploadDialog.java b/src/org/openstreetmap/josm/gui/io/UploadDialog.java
index 82062c5..f0ccdc6 100644
--- a/src/org/openstreetmap/josm/gui/io/UploadDialog.java
+++ b/src/org/openstreetmap/josm/gui/io/UploadDialog.java
@@ -107,7 +107,7 @@ public class UploadDialog extends AbstractUploadDialog implements PropertyChange
      */
     protected JPanel buildContentPanel() {
         JPanel pnl = new JPanel(new GridBagLayout());
-        pnl.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        pnl.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
 
         // the panel with the list of uploaded objects
         //
@@ -157,7 +157,7 @@ public class UploadDialog extends AbstractUploadDialog implements PropertyChange
     protected JPanel buildActionPanel() {
         JPanel pnl = new JPanel();
         pnl.setLayout(new FlowLayout(FlowLayout.CENTER));
-        pnl.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        pnl.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
 
         // -- upload button
         UploadAction uploadAction = new UploadAction();
@@ -170,11 +170,11 @@ public class UploadDialog extends AbstractUploadDialog implements PropertyChange
         pnl.add(new SideButton(cancelAction));
         getRootPane().registerKeyboardAction(
                 cancelAction,
-                KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE,0),
+                KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0),
                 JComponent.WHEN_IN_FOCUSED_WINDOW
         );
         pnl.add(new SideButton(new ContextSensitiveHelpAction(ht("/Dialog/Upload"))));
-        HelpUtil.setHelpContext(getRootPane(),ht("/Dialog/Upload"));
+        HelpUtil.setHelpContext(getRootPane(), ht("/Dialog/Upload"));
         return pnl;
     }
 
@@ -208,8 +208,7 @@ public class UploadDialog extends AbstractUploadDialog implements PropertyChange
 
         // users can click on either of two links in the upload parameter
         // summary handler. This installs the handler for these two events.
-        // We simply select the appropriate tab in the tabbed pane with the
-        // configuration dialogs.
+        // We simply select the appropriate tab in the tabbed pane with the configuration dialogs.
         //
         pnlBasicUploadSettings.getUploadParameterSummaryPanel().setConfigurationParameterRequestListener(
                 new ConfigurationParameterRequestHandler() {
@@ -217,6 +216,7 @@ public class UploadDialog extends AbstractUploadDialog implements PropertyChange
                     public void handleUploadStrategyConfigurationRequest() {
                         tpConfigPanels.setSelectedIndex(3);
                     }
+
                     @Override
                     public void handleChangesetConfigurationRequest() {
                         tpConfigPanels.setSelectedIndex(2);
@@ -351,7 +351,7 @@ public class UploadDialog extends AbstractUploadDialog implements PropertyChange
                     getClass().getName() + ".geometry",
                     WindowGeometry.centerInWindow(
                             Main.parent,
-                            new Dimension(400,600)
+                            new Dimension(400, 600)
                     )
             ).applySafe(this);
             startUserInput();
@@ -428,7 +428,7 @@ public class UploadDialog extends AbstractUploadDialog implements PropertyChange
                     new ImageProvider("ok").setMaxSize(ImageSizes.LARGEICON).get(),
                     new ImageProvider("cancel").setMaxSize(ImageSizes.LARGEICON).get(),
                     new ImageProvider("upload").setMaxSize(ImageSizes.LARGEICON).addOverlay(
-                            new ImageOverlay(new ImageProvider("warning-small"), 0.5,0.5,1.0,1.0)).get()});
+                            new ImageOverlay(new ImageProvider("warning-small"), 0.5, 0.5, 1.0, 1.0)).get()});
             dlg.setToolTipTexts(new String[] {
                     tr("Return to the previous dialog to enter a more descriptive comment"),
                     tr("Cancel and return to the previous dialog"),
@@ -541,7 +541,7 @@ public class UploadDialog extends AbstractUploadDialog implements PropertyChange
     @Override
     public void propertyChange(PropertyChangeEvent evt) {
         if (evt.getPropertyName().equals(ChangesetManagementPanel.SELECTED_CHANGESET_PROP)) {
-            Changeset cs = (Changeset)evt.getNewValue();
+            Changeset cs = (Changeset) evt.getNewValue();
             if (cs == null) {
                 tpConfigPanels.setTitleAt(1, tr("Tags of new changeset"));
             } else {
diff --git a/src/org/openstreetmap/josm/gui/io/UploadLayerTask.java b/src/org/openstreetmap/josm/gui/io/UploadLayerTask.java
index a7ec4ac..4911007 100644
--- a/src/org/openstreetmap/josm/gui/io/UploadLayerTask.java
+++ b/src/org/openstreetmap/josm/gui/io/UploadLayerTask.java
@@ -30,12 +30,12 @@ import org.openstreetmap.josm.tools.CheckParameterUtil;
  * <pre>
  *     ExecutorService executorService = ...
  *     UploadLayerTask task = new UploadLayerTask(layer, monitor);
- *     Future<?> taskFuture = executorServce.submit(task)
+ *     Future<?> taskFuture = executorService.submit(task)
  *     try {
  *        // wait for the task to complete
  *        taskFuture.get();
- *     } catch(Exception e) {
- *        e.printStackTracek();
+ *     } catch (Exception e) {
+ *        e.printStackTrace();
  *     }
  * </pre>
  */
@@ -87,22 +87,21 @@ public class UploadLayerTask extends AbstractIOTask implements Runnable {
      * @param monitor a progress monitor
      * @throws OsmTransferException if we can't recover from the exception
      */
-    protected void recoverFromGoneOnServer(OsmApiPrimitiveGoneException e, ProgressMonitor monitor) throws OsmTransferException{
+    protected void recoverFromGoneOnServer(OsmApiPrimitiveGoneException e, ProgressMonitor monitor) throws OsmTransferException {
         if (!e.isKnownPrimitive()) throw e;
         OsmPrimitive p = getPrimitive(e.getPrimitiveType(), e.getPrimitiveId());
         if (p == null) throw e;
         if (p.isDeleted()) {
             // we tried to delete an already deleted primitive.
-            //
-            Main.warn(tr("Object ''{0}'' is already deleted on the server. Skipping this object and retrying to upload.", p.getDisplayName(DefaultNameFormatter.getInstance())));
+            Main.warn(tr("Object ''{0}'' is already deleted on the server. Skipping this object and retrying to upload.",
+                    p.getDisplayName(DefaultNameFormatter.getInstance())));
             processedPrimitives.addAll(writer.getProcessedPrimitives());
             processedPrimitives.add(p);
             toUpload.removeAll(processedPrimitives);
             return;
         }
-        // exception was thrown because we tried to *update* an already deleted
-        // primitive. We can't resolve this automatically. Re-throw exception,
-        // a conflict is going to be created later.
+        // exception was thrown because we tried to *update* an already deleted primitive. We can't resolve this automatically.
+        // Re-throw exception, a conflict is going to be created later.
         throw e;
     }
 
@@ -112,7 +111,7 @@ public class UploadLayerTask extends AbstractIOTask implements Runnable {
         APIDataSet ds = new APIDataSet(layer.data);
         try {
             ds.adjustRelationUploadOrder();
-        } catch(CyclicUploadDependencyException e) {
+        } catch (CyclicUploadDependencyException e) {
             setLastException(e);
             return;
         }
@@ -121,14 +120,14 @@ public class UploadLayerTask extends AbstractIOTask implements Runnable {
             return;
         writer = new OsmServerWriter();
         try {
-            while(true) {
+            while (true) {
                 try {
                     ProgressMonitor m = monitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false);
                     if (isCanceled()) return;
                     writer.uploadOsm(strategy, toUpload, changeset, m);
                     processedPrimitives.addAll(writer.getProcessedPrimitives()); // OsmPrimitive in => OsmPrimitive out
                     break;
-                } catch(OsmApiPrimitiveGoneException e) {
+                } catch (OsmApiPrimitiveGoneException e) {
                     recoverFromGoneOnServer(e, monitor);
                 }
             }
@@ -139,7 +138,7 @@ public class UploadLayerTask extends AbstractIOTask implements Runnable {
             }
         } catch (Exception sxe) {
             if (isCanceled()) {
-                Main.info("Ignoring exception caught because upload is canceled. Exception is: " + sxe.toString());
+                Main.info("Ignoring exception caught because upload is canceled. Exception is: " + sxe);
                 return;
             }
             setLastException(sxe);
diff --git a/src/org/openstreetmap/josm/gui/io/UploadNoteLayerTask.java b/src/org/openstreetmap/josm/gui/io/UploadNoteLayerTask.java
new file mode 100644
index 0000000..1684099
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/io/UploadNoteLayerTask.java
@@ -0,0 +1,51 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.io;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import org.openstreetmap.josm.actions.upload.UploadNotesTask;
+import org.openstreetmap.josm.gui.layer.NoteLayer;
+import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
+import org.openstreetmap.josm.gui.progress.ProgressMonitor;
+import org.openstreetmap.josm.tools.CheckParameterUtil;
+
+/**
+ * UploadNoteLayerTask uploads the data managed by an {@link NoteLayer} asynchronously.
+ * @since 8474
+ */
+public class UploadNoteLayerTask extends AbstractIOTask {
+
+    private final NoteLayer layer;
+    private final ProgressMonitor monitor;
+
+    /**
+     * Creates the upload task.
+     *
+     * @param layer the layer. Must not be null.
+     * @param monitor  a progress monitor. If monitor is null, uses {@link NullProgressMonitor#INSTANCE}
+     * @throws IllegalArgumentException if layer is null
+     * @throws IllegalArgumentException if strategy is null
+     */
+    public UploadNoteLayerTask(NoteLayer layer, ProgressMonitor monitor) {
+        CheckParameterUtil.ensureParameterNotNull(layer, "layer");
+        if (monitor == null) {
+            monitor = NullProgressMonitor.INSTANCE;
+        }
+        this.layer = layer;
+        this.monitor = monitor;
+    }
+
+    @Override
+    public void run() {
+        monitor.indeterminateSubTask(tr("Uploading notes to server"));
+        new UploadNotesTask().uploadNotes(layer.getNoteData(), monitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false));
+        if (isCanceled())
+            return;
+        layer.onPostUploadToServer();
+    }
+
+    @Override
+    public void cancel() {
+        setCanceled(true);
+    }
+}
diff --git a/src/org/openstreetmap/josm/gui/io/UploadParameterSummaryPanel.java b/src/org/openstreetmap/josm/gui/io/UploadParameterSummaryPanel.java
index 55bf98a..37f4479 100644
--- a/src/org/openstreetmap/josm/gui/io/UploadParameterSummaryPanel.java
+++ b/src/org/openstreetmap/josm/gui/io/UploadParameterSummaryPanel.java
@@ -30,8 +30,16 @@ public class UploadParameterSummaryPanel extends JPanel implements HyperlinkList
     private boolean closeChangesetAfterNextUpload;
     private transient ConfigurationParameterRequestHandler configHandler;
 
+    /**
+     * Constructs a new {@code UploadParameterSummaryPanel}.
+     */
+    public UploadParameterSummaryPanel() {
+        build();
+        updateSummary();
+    }
+
     protected String buildChangesetSummary() {
-        StringBuilder msg = new StringBuilder();
+        StringBuilder msg = new StringBuilder(96);
         if (selectedChangeset == null || selectedChangeset.isNew()) {
             msg.append(tr("Objects are uploaded to a <strong>new changeset</strong>."));
         } else {
@@ -42,21 +50,20 @@ public class UploadParameterSummaryPanel extends JPanel implements HyperlinkList
                     uploadComment
             ));
         }
-        msg.append(" ");
+        msg.append(' ');
         if (closeChangesetAfterNextUpload) {
             msg.append(tr("The changeset is going to be <strong>closed</strong> after this upload"));
         } else {
             msg.append(tr("The changeset is <strong>left open</strong> after this upload"));
         }
-        msg.append(" (<a href=\"urn:changeset-configuration\">" + tr("configure changeset") + "</a>)");
+        msg.append(" (<a href=\"urn:changeset-configuration\">").append(tr("configure changeset")).append("</a>)");
         return msg.toString();
     }
 
     protected String buildStrategySummary() {
         if (spec == null)
             return "";
-        // check whether we can use one changeset only or whether we have to use
-        // multiple changesets
+        // check whether we can use one changeset only or whether we have to use multiple changesets
         //
         boolean useOneChangeset = true;
         int maxChunkSize = OsmApi.getOsmApi().getCapabilities().getMaxChangesetSize();
@@ -80,17 +87,20 @@ public class UploadParameterSummaryPanel extends JPanel implements HyperlinkList
                         "Uploading <strong>{0} objects</strong> to <strong>1 changeset</strong> using <strong>1 request</strong>",
                         numObjects, numObjects
                 );
-            } else if (numRequests > 1){
-                msg = tr("Uploading <strong>{0} objects</strong> to <strong>1 changeset</strong> using <strong>{1} requests</strong>", numObjects, numRequests);
+            } else if (numRequests > 1) {
+                msg = tr("Uploading <strong>{0} objects</strong> to <strong>1 changeset</strong> using <strong>{1} requests</strong>",
+                        numObjects, numRequests);
             }
             msg = msg + " (<a href=\"urn:advanced-configuration\">" + tr("advanced configuration") + "</a>)";
         } else {
             lblWarning.setVisible(true);
             if (numRequests == 0) {
-                msg = tr("{0} objects exceed the max. allowed {1} objects in a changeset on the server ''{2}''. Please <a href=\"urn:advanced-configuration\">configure</a> how to proceed with <strong>multiple changesets</strong>",
+                msg = tr("{0} objects exceed the max. allowed {1} objects in a changeset on the server ''{2}''. " +
+                        "Please <a href=\"urn:advanced-configuration\">configure</a> how to proceed with <strong>multiple changesets</strong>",
                         numObjects, maxChunkSize, OsmApi.getOsmApi().getBaseUrl());
-            } else if (numRequests > 1){
-                msg = tr("Uploading <strong>{0} objects</strong> to <strong>multiple changesets</strong> using <strong>{1} requests</strong>", numObjects, numRequests);
+            } else if (numRequests > 1) {
+                msg = tr("Uploading <strong>{0} objects</strong> to <strong>multiple changesets</strong> using <strong>{1} requests</strong>",
+                        numObjects, numRequests);
                 msg = msg + " (<a href=\"urn:advanced-configuration\">" + tr("advanced configuration") + "</a>)";
             }
         }
@@ -106,20 +116,12 @@ public class UploadParameterSummaryPanel extends JPanel implements HyperlinkList
         lblWarning = new JLabel("");
         lblWarning.setVisible(false);
         lblWarning.setIcon(ImageProvider.get("warning-small"));
-        lblWarning.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        lblWarning.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
         JPanel pnl = new JPanel(new BorderLayout());
         pnl.add(lblWarning, BorderLayout.NORTH);
         add(pnl, BorderLayout.WEST);
     }
 
-    /**
-     * Constructs a new {@code UploadParameterSummaryPanel}.
-     */
-    public UploadParameterSummaryPanel() {
-        build();
-        updateSummary();
-    }
-
     public void setConfigurationParameterRequestListener(ConfigurationParameterRequestHandler handler) {
         this.configHandler = handler;
     }
@@ -140,12 +142,12 @@ public class UploadParameterSummaryPanel extends JPanel implements HyperlinkList
     }
 
     protected void updateSummary() {
-        StringBuilder sb = new StringBuilder();
-        sb.append("<html>");
-        sb.append(buildStrategySummary());
-        sb.append("<br><br>");
-        sb.append(buildChangesetSummary());
-        sb.append("</html>");
+        StringBuilder sb = new StringBuilder(32);
+        sb.append("<html>")
+          .append(buildStrategySummary())
+          .append("<br><br>")
+          .append(buildChangesetSummary())
+          .append("</html>");
         jepMessage.setText(sb.toString());
     }
 
@@ -172,16 +174,16 @@ public class UploadParameterSummaryPanel extends JPanel implements HyperlinkList
     @Override
     public void propertyChange(PropertyChangeEvent evt) {
         if (evt.getPropertyName().equals(ChangesetManagementPanel.SELECTED_CHANGESET_PROP)) {
-            selectedChangeset = (Changeset)evt.getNewValue();
+            selectedChangeset = (Changeset) evt.getNewValue();
             updateSummary();
         } else if (evt.getPropertyName().equals(ChangesetManagementPanel.CLOSE_CHANGESET_AFTER_UPLOAD)) {
-            closeChangesetAfterNextUpload = (Boolean)evt.getNewValue();
+            closeChangesetAfterNextUpload = (Boolean) evt.getNewValue();
             updateSummary();
         } else if (evt.getPropertyName().equals(UploadedObjectsSummaryPanel.NUM_OBJECTS_TO_UPLOAD_PROP)) {
-            numObjects = (Integer)evt.getNewValue();
+            numObjects = (Integer) evt.getNewValue();
             updateSummary();
         } else if (evt.getPropertyName().equals(UploadStrategySelectionPanel.UPLOAD_STRATEGY_SPECIFICATION_PROP)) {
-            this.spec = (UploadStrategySpecification)evt.getNewValue();
+            this.spec = (UploadStrategySpecification) evt.getNewValue();
             updateSummary();
         }
     }
diff --git a/src/org/openstreetmap/josm/gui/io/UploadPrimitivesTask.java b/src/org/openstreetmap/josm/gui/io/UploadPrimitivesTask.java
index 1e89b0e..3c7b5a9 100644
--- a/src/org/openstreetmap/josm/gui/io/UploadPrimitivesTask.java
+++ b/src/org/openstreetmap/josm/gui/io/UploadPrimitivesTask.java
@@ -65,8 +65,8 @@ public class UploadPrimitivesTask extends AbstractUploadTask {
      * @throws IllegalArgumentException if changeset is null
      */
     public UploadPrimitivesTask(UploadStrategySpecification strategy, OsmDataLayer layer, APIDataSet toUpload, Changeset changeset) {
-        super(tr("Uploading data for layer ''{0}''", layer.getName()),false /* don't ignore exceptions */);
-        ensureParameterNotNull(layer,"layer");
+        super(tr("Uploading data for layer ''{0}''", layer.getName()), false /* don't ignore exceptions */);
+        ensureParameterNotNull(layer, "layer");
         ensureParameterNotNull(strategy, "strategy");
         ensureParameterNotNull(changeset, "changeset");
         this.toUpload = toUpload;
@@ -185,7 +185,7 @@ public class UploadPrimitivesTask extends AbstractUploadTask {
      * @param monitor a progress monitor
      * @throws OsmTransferException if we can't recover from the exception
      */
-    protected void recoverFromGoneOnServer(OsmApiPrimitiveGoneException e, ProgressMonitor monitor) throws OsmTransferException{
+    protected void recoverFromGoneOnServer(OsmApiPrimitiveGoneException e, ProgressMonitor monitor) throws OsmTransferException {
         if (!e.isKnownPrimitive()) throw e;
         OsmPrimitive p = layer.data.getPrimitiveById(e.getPrimitiveId(), e.getPrimitiveType());
         if (p == null) throw e;
@@ -230,19 +230,21 @@ public class UploadPrimitivesTask extends AbstractUploadTask {
 
         try {
             SwingUtilities.invokeAndWait(r);
-        } catch(InterruptedException e) {
+        } catch (InterruptedException e) {
             lastException = e;
-        } catch(InvocationTargetException e) {
+        } catch (InvocationTargetException e) {
             lastException = new OsmTransferException(e.getCause());
         }
     }
 
-    @Override protected void realRun() {
+    @Override
+    protected void realRun() {
         try {
-            uploadloop:while(true) {
+            uploadloop: while (true) {
                 try {
-                    getProgressMonitor().subTask(trn("Uploading {0} object...", "Uploading {0} objects...", toUpload.getSize(), toUpload.getSize()));
-                    synchronized(this) {
+                    getProgressMonitor().subTask(
+                            trn("Uploading {0} object...", "Uploading {0} objects...", toUpload.getSize(), toUpload.getSize()));
+                    synchronized (this) {
                         writer = new OsmServerWriter();
                     }
                     writer.uploadOsm(strategy, toUpload.getPrimitives(), changeset, getProgressMonitor().createSubTaskMonitor(1, false));
@@ -250,15 +252,15 @@ public class UploadPrimitivesTask extends AbstractUploadTask {
                     // if we get here we've successfully uploaded the data. Exit the loop.
                     //
                     break;
-                } catch(OsmTransferCanceledException e) {
+                } catch (OsmTransferCanceledException e) {
                     Main.error(e);
                     uploadCanceled = true;
                     break uploadloop;
-                } catch(OsmApiPrimitiveGoneException e) {
+                } catch (OsmApiPrimitiveGoneException e) {
                     // try to recover from  410 Gone
                     //
                     recoverFromGoneOnServer(e, getProgressMonitor());
-                } catch(ChangesetClosedException e) {
+                } catch (ChangesetClosedException e) {
                     processedPrimitives.addAll(writer.getProcessedPrimitives()); // OsmPrimitive in => OsmPrimitive out
                     changeset.setOpen(false);
                     switch(e.getSource()) {
@@ -286,7 +288,7 @@ public class UploadPrimitivesTask extends AbstractUploadTask {
                     if (writer != null) {
                         processedPrimitives.addAll(writer.getProcessedPrimitives());
                     }
-                    synchronized(this) {
+                    synchronized (this) {
                         writer = null;
                     }
                 }
@@ -335,7 +337,7 @@ public class UploadPrimitivesTask extends AbstractUploadTask {
                     return;
                 }
                 if (lastException instanceof ChangesetClosedException) {
-                    ChangesetClosedException e = (ChangesetClosedException)lastException;
+                    ChangesetClosedException e = (ChangesetClosedException) lastException;
                     if (e.getSource().equals(ChangesetClosedException.Source.UPDATE_CHANGESET)) {
                         handleFailedUpload(lastException);
                         return;
@@ -369,7 +371,7 @@ public class UploadPrimitivesTask extends AbstractUploadTask {
 
     @Override protected void cancel() {
         uploadCanceled = true;
-        synchronized(this) {
+        synchronized (this) {
             if (writer != null) {
                 writer.cancel();
             }
diff --git a/src/org/openstreetmap/josm/gui/io/UploadSelectionDialog.java b/src/org/openstreetmap/josm/gui/io/UploadSelectionDialog.java
index 76c15e9..dede9a2 100644
--- a/src/org/openstreetmap/josm/gui/io/UploadSelectionDialog.java
+++ b/src/org/openstreetmap/josm/gui/io/UploadSelectionDialog.java
@@ -46,7 +46,7 @@ import org.openstreetmap.josm.tools.WindowGeometry;
 /**
  * This dialog can be used to select individual object for uploading.
  *
- *
+ * @since 2250
  */
 public class UploadSelectionDialog extends JDialog {
 
@@ -56,13 +56,23 @@ public class UploadSelectionDialog extends JDialog {
     private boolean canceled;
     private SideButton btnContinue;
 
+    /**
+     * Constructs a new {@code UploadSelectionDialog}.
+     */
+    public UploadSelectionDialog() {
+        super(JOptionPane.getFrameForComponent(Main.parent), ModalityType.DOCUMENT_MODAL);
+        build();
+    }
+
     protected JPanel buildSelectedPrimitivesPanel() {
         JPanel pnl = new JPanel();
         pnl.setLayout(new BorderLayout());
-        JLabel lbl = new JLabel(tr("<html>Mark modified objects <strong>from the current selection</strong> to be uploaded to the server.</html>"));
-        lbl.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        JLabel lbl = new JLabel(
+                tr("<html>Mark modified objects <strong>from the current selection</strong> to be uploaded to the server.</html>"));
+        lbl.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
         pnl.add(lbl, BorderLayout.NORTH);
         pnl.add(new JScrollPane(lstSelectedPrimitives = new OsmPrimitiveList()), BorderLayout.CENTER);
+        lbl.setLabelFor(lstSelectedPrimitives);
         return pnl;
     }
 
@@ -70,9 +80,10 @@ public class UploadSelectionDialog extends JDialog {
         JPanel pnl = new JPanel();
         pnl.setLayout(new BorderLayout());
         JLabel lbl = new JLabel(tr("<html>Mark <strong>locally deleted objects</strong> to be deleted on the server.</html>"));
-        lbl.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        lbl.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
         pnl.add(lbl, BorderLayout.NORTH);
         pnl.add(new JScrollPane(lstDeletedPrimitives = new OsmPrimitiveList()), BorderLayout.CENTER);
+        lbl.setLabelFor(lstDeletedPrimitives);
         return pnl;
     }
 
@@ -115,11 +126,6 @@ public class UploadSelectionDialog extends JDialog {
         HelpUtil.setHelpContext(getRootPane(), HelpUtil.ht("/Dialog/UploadSelection"));
     }
 
-    public UploadSelectionDialog() {
-        super(JOptionPane.getFrameForComponent(Main.parent), ModalityType.DOCUMENT_MODAL);
-        build();
-    }
-
     public void populate(Collection<OsmPrimitive> selected, Collection<OsmPrimitive> deleted) {
         if (selected != null) {
             lstSelectedPrimitives.getOsmPrimitiveListModel().setPrimitives(new ArrayList<>(selected));
@@ -162,7 +168,7 @@ public class UploadSelectionDialog extends JDialog {
                     getClass().getName() + ".geometry",
                     WindowGeometry.centerInWindow(
                             Main.parent,
-                            new Dimension(200,400)
+                            new Dimension(200, 400)
                     )
             ).applySafe(this);
         } else if (isShowing()) { // Avoid IllegalComponentStateException like in #8775
@@ -178,8 +184,7 @@ public class UploadSelectionDialog extends JDialog {
         }
 
         public OsmPrimitiveList() {
-            super(new OsmPrimitiveListModel());
-            init();
+            this(new OsmPrimitiveListModel());
         }
 
         public OsmPrimitiveList(OsmPrimitiveListModel model) {
@@ -188,16 +193,13 @@ public class UploadSelectionDialog extends JDialog {
         }
 
         public OsmPrimitiveListModel getOsmPrimitiveListModel() {
-            return (OsmPrimitiveListModel)getModel();
+            return (OsmPrimitiveListModel) getModel();
         }
     }
 
     static class OsmPrimitiveListModel extends AbstractListModel<OsmPrimitive> {
         private transient List<OsmPrimitive> data;
 
-        public OsmPrimitiveListModel() {
-        }
-
         protected void sort() {
             if (data == null)
                 return;
@@ -215,17 +217,13 @@ public class UploadSelectionDialog extends JDialog {
             );
         }
 
-        public OsmPrimitiveListModel(List<OsmPrimitive> data) {
-            setPrimitives(data);
-        }
-
         public void setPrimitives(List<OsmPrimitive> data) {
             this.data = data;
             sort();
             if (data != null) {
-                fireContentsChanged(this,0, data.size());
+                fireContentsChanged(this, 0, data.size());
             } else {
-                fireContentsChanged(this, 0,0);
+                fireContentsChanged(this, 0, 0);
             }
         }
 
@@ -243,7 +241,7 @@ public class UploadSelectionDialog extends JDialog {
             return data.size();
         }
 
-        public List<OsmPrimitive> getPrimitives(int [] indices) {
+        public List<OsmPrimitive> getPrimitives(int[] indices) {
             if (indices == null || indices.length == 0)
                 return Collections.emptyList();
             List<OsmPrimitive> ret = new ArrayList<>(indices.length);
@@ -290,7 +288,7 @@ public class UploadSelectionDialog extends JDialog {
         }
 
         protected void updateEnabledState() {
-            setEnabled(lstSelectedPrimitives.getSelectedIndex() >=0
+            setEnabled(lstSelectedPrimitives.getSelectedIndex() >= 0
                     || lstDeletedPrimitives.getSelectedIndex() >= 0);
         }
 
diff --git a/src/org/openstreetmap/josm/gui/io/UploadStrategy.java b/src/org/openstreetmap/josm/gui/io/UploadStrategy.java
index 0ff580e..27cf19f 100644
--- a/src/org/openstreetmap/josm/gui/io/UploadStrategy.java
+++ b/src/org/openstreetmap/josm/gui/io/UploadStrategy.java
@@ -3,6 +3,8 @@ package org.openstreetmap.josm.gui.io;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
 
+import java.util.Locale;
+
 import org.openstreetmap.josm.Main;
 
 public enum UploadStrategy {
@@ -27,7 +29,7 @@ public enum UploadStrategy {
 
     public static UploadStrategy fromPreference(String preferenceValue) {
         if (preferenceValue == null) return null;
-        preferenceValue = preferenceValue.trim().toLowerCase();
+        preferenceValue = preferenceValue.trim().toLowerCase(Locale.ENGLISH);
         for (UploadStrategy strategy: values()) {
             if (strategy.getPreferenceValue().equals(preferenceValue))
                 return strategy;
@@ -75,7 +77,7 @@ public enum UploadStrategy {
             } else {
                 v = "";
             }
-            v = v.trim().toLowerCase();
+            v = v.trim().toLowerCase(Locale.ENGLISH);
             if ("true".equals(v))
                 return SINGLE_REQUEST_STRATEGY;
             else if ("false".equals(v))
@@ -85,7 +87,7 @@ public enum UploadStrategy {
         }
         UploadStrategy strategy = fromPreference(v);
         if (strategy == null) {
-            Main.warn(tr("Unexpected value for key ''{0}'' in preferences, got ''{1}''", "osm-server.upload-strategy", v ));
+            Main.warn(tr("Unexpected value for key ''{0}'' in preferences, got ''{1}''", "osm-server.upload-strategy", v));
             return DEFAULT_UPLOAD_STRATEGY;
         }
         return strategy;
diff --git a/src/org/openstreetmap/josm/gui/io/UploadStrategySelectionPanel.java b/src/org/openstreetmap/josm/gui/io/UploadStrategySelectionPanel.java
index b35dad7..c126b5c 100644
--- a/src/org/openstreetmap/josm/gui/io/UploadStrategySelectionPanel.java
+++ b/src/org/openstreetmap/josm/gui/io/UploadStrategySelectionPanel.java
@@ -17,7 +17,7 @@ import java.awt.event.ItemEvent;
 import java.awt.event.ItemListener;
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
-import java.util.HashMap;
+import java.util.EnumMap;
 import java.util.Map;
 import java.util.Map.Entry;
 
@@ -49,7 +49,7 @@ public class UploadStrategySelectionPanel extends JPanel implements PropertyChan
     public static final String UPLOAD_STRATEGY_SPECIFICATION_PROP =
         UploadStrategySelectionPanel.class.getName() + ".uploadStrategySpecification";
 
-    private static final Color BG_COLOR_ERROR = new Color(255,224,224);
+    private static final Color BG_COLOR_ERROR = new Color(255, 224, 224);
 
     private transient Map<UploadStrategy, JRadioButton> rbStrategy;
     private transient Map<UploadStrategy, JLabel> lblNumRequests;
@@ -73,9 +73,9 @@ public class UploadStrategySelectionPanel extends JPanel implements PropertyChan
         JPanel pnl = new JPanel();
         pnl.setLayout(new GridBagLayout());
         ButtonGroup bgStrategies = new ButtonGroup();
-        rbStrategy = new HashMap<>();
-        lblStrategies = new HashMap<>();
-        lblNumRequests = new HashMap<>();
+        rbStrategy = new EnumMap<>(UploadStrategy.class);
+        lblStrategies = new EnumMap<>(UploadStrategy.class);
+        lblNumRequests = new EnumMap<>(UploadStrategy.class);
         for (UploadStrategy strategy: UploadStrategy.values()) {
             rbStrategy.put(strategy, new JRadioButton());
             lblNumRequests.put(strategy, new JLabel());
@@ -91,7 +91,7 @@ public class UploadStrategySelectionPanel extends JPanel implements PropertyChan
         gc.weighty = 0.0;
         gc.gridwidth = 4;
         gc.fill = GridBagConstraints.HORIZONTAL;
-        gc.insets = new Insets(0,0,3,0);
+        gc.insets = new Insets(0, 0, 3, 0);
         gc.anchor = GridBagConstraints.FIRST_LINE_START;
         pnl.add(new JMultilineLabel(tr("Please select the upload strategy:")), gc);
 
@@ -172,7 +172,7 @@ public class UploadStrategySelectionPanel extends JPanel implements PropertyChan
         StrategyChangeListener strategyChangeListener = new StrategyChangeListener();
         tfChunkSize.addFocusListener(strategyChangeListener);
         tfChunkSize.addActionListener(strategyChangeListener);
-        for(UploadStrategy strategy: UploadStrategy.values()) {
+        for (UploadStrategy strategy: UploadStrategy.values()) {
             rbStrategy.get(strategy).addItemListener(strategyChangeListener);
         }
 
@@ -188,11 +188,16 @@ public class UploadStrategySelectionPanel extends JPanel implements PropertyChan
         gc.fill = GridBagConstraints.HORIZONTAL;
         gc.anchor = GridBagConstraints.FIRST_LINE_START;
         gc.weightx = 1.0;
-        pnlMultiChangesetPolicyPanel.add(lblMultiChangesetPoliciesHeader = new JMultilineLabel(tr("<html>There are <strong>multiple changesets</strong> necessary in order to upload {0} objects. Which strategy do you want to use?</html>", numUploadedObjects)), gc);
+        pnlMultiChangesetPolicyPanel.add(lblMultiChangesetPoliciesHeader = new JMultilineLabel(
+                tr("<html>There are <strong>multiple changesets</strong> necessary in order to upload {0} objects. " +
+                   "Which strategy do you want to use?</html>",
+                        numUploadedObjects)), gc);
         gc.gridy = 1;
-        pnlMultiChangesetPolicyPanel.add(rbFillOneChangeset = new JRadioButton(tr("Fill up one changeset and return to the Upload Dialog")),gc);
+        pnlMultiChangesetPolicyPanel.add(rbFillOneChangeset = new JRadioButton(
+                tr("Fill up one changeset and return to the Upload Dialog")), gc);
         gc.gridy = 2;
-        pnlMultiChangesetPolicyPanel.add(rbUseMultipleChangesets = new JRadioButton(tr("Open and use as many new changesets as necessary")),gc);
+        pnlMultiChangesetPolicyPanel.add(rbUseMultipleChangesets = new JRadioButton(
+                tr("Open and use as many new changesets as necessary")), gc);
 
         ButtonGroup bgMultiChangesetPolicies = new ButtonGroup();
         bgMultiChangesetPolicies.add(rbFillOneChangeset);
@@ -209,7 +214,7 @@ public class UploadStrategySelectionPanel extends JPanel implements PropertyChan
         gc.weightx = 1.0;
         gc.weighty = 0.0;
         gc.anchor = GridBagConstraints.NORTHWEST;
-        gc.insets = new Insets(3,3,3,3);
+        gc.insets = new Insets(3, 3, 3, 3);
 
         add(buildUploadStrategyPanel(), gc);
         gc.gridy = 1;
@@ -229,7 +234,7 @@ public class UploadStrategySelectionPanel extends JPanel implements PropertyChan
     }
 
     public void setNumUploadedObjects(int numUploadedObjects) {
-        this.numUploadedObjects = Math.max(numUploadedObjects,0);
+        this.numUploadedObjects = Math.max(numUploadedObjects, 0);
         updateNumRequestsLabels();
     }
 
@@ -259,7 +264,7 @@ public class UploadStrategySelectionPanel extends JPanel implements PropertyChan
             spec.setStrategy(strategy).setChunkSize(chunkSize);
             break;
         }
-        if(pnlMultiChangesetPolicyPanel.isVisible()) {
+        if (pnlMultiChangesetPolicyPanel.isVisible()) {
             if (rbFillOneChangeset.isSelected()) {
                 spec.setPolicy(MaxChangesetSizeExceededPolicy.FILL_ONE_CHANGESET_AND_RETURN_TO_UPLOAD_DIALOG);
             } else if (rbUseMultipleChangesets.isSelected()) {
@@ -285,11 +290,9 @@ public class UploadStrategySelectionPanel extends JPanel implements PropertyChan
     }
 
     protected int getChunkSize() {
-        int chunkSize;
         try {
-            chunkSize = Integer.parseInt(tfChunkSize.getText().trim());
-            return chunkSize;
-        } catch(NumberFormatException e) {
+            return Integer.parseInt(tfChunkSize.getText().trim());
+        } catch (NumberFormatException e) {
             return UploadStrategySpecification.UNSPECIFIED_CHUNK_SIZE;
         }
     }
@@ -309,8 +312,11 @@ public class UploadStrategySelectionPanel extends JPanel implements PropertyChan
         try {
             chunkSize = Integer.parseInt(tfChunkSize.getText().trim());
             Main.pref.putInteger("osm-server.upload-strategy.chunk-size", chunkSize);
-        } catch(NumberFormatException e) {
+        } catch (NumberFormatException e) {
             // don't save invalid value to preferences
+            if (Main.isTraceEnabled()) {
+                Main.trace(e.getMessage());
+            }
         }
     }
 
@@ -322,16 +328,17 @@ public class UploadStrategySelectionPanel extends JPanel implements PropertyChan
             lbl.setText(tr("Upload in one request not possible (too many objects to upload)"));
             lbl.setToolTipText(tr("<html>Cannot upload {0} objects in one request because the<br>"
                     + "max. changeset size {1} on server ''{2}'' is exceeded.</html>",
-                    numUploadedObjects,
-                    maxChunkSize,
-                    OsmApi.getOsmApi().getBaseUrl()
+                    numUploadedObjects, maxChunkSize, OsmApi.getOsmApi().getBaseUrl()
             )
             );
             rbStrategy.get(UploadStrategy.CHUNKED_DATASET_STRATEGY).setSelected(true);
             lblNumRequests.get(UploadStrategy.SINGLE_REQUEST_STRATEGY).setVisible(false);
 
-            lblMultiChangesetPoliciesHeader.setText(tr("<html>There are <strong>multiple changesets</strong> necessary in order to upload {0} objects. Which strategy do you want to use?</html>", numUploadedObjects));
-            if (!rbFillOneChangeset.isSelected() && ! rbUseMultipleChangesets.isSelected()) {
+            lblMultiChangesetPoliciesHeader.setText(
+                    tr("<html>There are <strong>multiple changesets</strong> necessary in order to upload {0} objects. " +
+                       "Which strategy do you want to use?</html>",
+                            numUploadedObjects));
+            if (!rbFillOneChangeset.isSelected() && !rbUseMultipleChangesets.isSelected()) {
                 rbUseMultipleChangesets.setSelected(true);
             }
             pnlMultiChangesetPolicyPanel.setVisible(true);
@@ -359,7 +366,7 @@ public class UploadStrategySelectionPanel extends JPanel implements PropertyChan
             if (chunkSize == UploadStrategySpecification.UNSPECIFIED_CHUNK_SIZE) {
                 lblNumRequests.get(UploadStrategy.CHUNKED_DATASET_STRATEGY).setText(tr("(# requests unknown)"));
             } else {
-                int chunks = (int)Math.ceil((double)numUploadedObjects / (double)chunkSize);
+                int chunks = (int) Math.ceil((double) numUploadedObjects / (double) chunkSize);
                 lblNumRequests.get(UploadStrategy.CHUNKED_DATASET_STRATEGY).setText(
                         trn("({0} request)", "({0} requests)", chunks, chunks)
                 );
@@ -374,7 +381,7 @@ public class UploadStrategySelectionPanel extends JPanel implements PropertyChan
     @Override
     public void propertyChange(PropertyChangeEvent evt) {
         if (evt.getPropertyName().equals(UploadedObjectsSummaryPanel.NUM_OBJECTS_TO_UPLOAD_PROP)) {
-            setNumUploadedObjects((Integer)evt.getNewValue());
+            setNumUploadedObjects((Integer) evt.getNewValue());
         }
     }
 
@@ -383,10 +390,11 @@ public class UploadStrategySelectionPanel extends JPanel implements PropertyChan
         public void focusGained(FocusEvent e) {
             Component c = e.getComponent();
             if (c instanceof JosmTextField) {
-                JosmTextField tf = (JosmTextField)c;
+                JosmTextField tf = (JosmTextField) c;
                 tf.selectAll();
             }
         }
+
         @Override
         public void focusLost(FocusEvent e) {}
     }
@@ -411,16 +419,19 @@ public class UploadStrategySelectionPanel extends JPanel implements PropertyChan
                 if (chunkSize <= 0) {
                     setErrorFeedback(tfChunkSize, tr("Illegal chunk size <= 0. Please enter an integer > 1"));
                 } else if (maxChunkSize > 0 && chunkSize > maxChunkSize) {
-                    setErrorFeedback(tfChunkSize, tr("Chunk size {0} exceeds max. changeset size {1} for server ''{2}''", chunkSize, maxChunkSize, OsmApi.getOsmApi().getBaseUrl()));
+                    setErrorFeedback(tfChunkSize, tr("Chunk size {0} exceeds max. changeset size {1} for server ''{2}''",
+                            chunkSize, maxChunkSize, OsmApi.getOsmApi().getBaseUrl()));
                 } else {
                     clearErrorFeedback(tfChunkSize, tr("Please enter an integer > 1"));
                 }
 
                 if (maxChunkSize > 0 && chunkSize > maxChunkSize) {
-                    setErrorFeedback(tfChunkSize, tr("Chunk size {0} exceeds max. changeset size {1} for server ''{2}''", chunkSize, maxChunkSize, OsmApi.getOsmApi().getBaseUrl()));
+                    setErrorFeedback(tfChunkSize, tr("Chunk size {0} exceeds max. changeset size {1} for server ''{2}''",
+                            chunkSize, maxChunkSize, OsmApi.getOsmApi().getBaseUrl()));
                 }
-            } catch(NumberFormatException e) {
-                setErrorFeedback(tfChunkSize, tr("Value ''{0}'' is not a number. Please enter an integer > 1", tfChunkSize.getText().trim()));
+            } catch (NumberFormatException e) {
+                setErrorFeedback(tfChunkSize, tr("Value ''{0}'' is not a number. Please enter an integer > 1",
+                        tfChunkSize.getText().trim()));
             } finally {
                 updateNumRequestsLabels();
             }
@@ -445,7 +456,7 @@ public class UploadStrategySelectionPanel extends JPanel implements PropertyChan
         public void propertyChange(PropertyChangeEvent evt) {
             if (evt.getSource() == tfChunkSize
                     && "enabled".equals(evt.getPropertyName())
-                    && (Boolean)evt.getNewValue()
+                    && (Boolean) evt.getNewValue()
             ) {
                 validateChunkSize();
             }
diff --git a/src/org/openstreetmap/josm/gui/io/UploadStrategySpecification.java b/src/org/openstreetmap/josm/gui/io/UploadStrategySpecification.java
index 50878e5..448fc15 100644
--- a/src/org/openstreetmap/josm/gui/io/UploadStrategySpecification.java
+++ b/src/org/openstreetmap/josm/gui/io/UploadStrategySpecification.java
@@ -90,7 +90,7 @@ public class UploadStrategySpecification  {
     }
 
     public int getNumRequests(int numObjects) {
-        if (numObjects <=0) return 0;
+        if (numObjects <= 0) return 0;
         switch(strategy) {
         case INDIVIDUAL_OBJECTS_STRATEGY: return numObjects;
         case SINGLE_REQUEST_STRATEGY: return 1;
@@ -98,7 +98,7 @@ public class UploadStrategySpecification  {
             if (chunkSize == UNSPECIFIED_CHUNK_SIZE)
                 return 0;
             else
-                return (int)Math.ceil((double)numObjects / (double)chunkSize);
+                return (int) Math.ceil((double) numObjects / (double) chunkSize);
         }
         // should not happen
         return 0;
diff --git a/src/org/openstreetmap/josm/gui/io/UploadedObjectsSummaryPanel.java b/src/org/openstreetmap/josm/gui/io/UploadedObjectsSummaryPanel.java
index a3d73aa..bc64e7c 100644
--- a/src/org/openstreetmap/josm/gui/io/UploadedObjectsSummaryPanel.java
+++ b/src/org/openstreetmap/josm/gui/io/UploadedObjectsSummaryPanel.java
@@ -19,9 +19,8 @@ import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.gui.OsmPrimitivRenderer;
 
 /**
- * This panel displays a summary of the objects to upload. It is displayed in
- * the upper part of the {@link UploadDialog}.
- *
+ * This panel displays a summary of the objects to upload. It is displayed in the upper part of the {@link UploadDialog}.
+ * @since 2599
  */
 public class UploadedObjectsSummaryPanel extends JPanel {
     public static final String NUM_OBJECTS_TO_UPLOAD_PROP = UploadedObjectsSummaryPanel.class.getName() + ".numObjectsToUpload";
@@ -39,29 +38,38 @@ public class UploadedObjectsSummaryPanel extends JPanel {
     private JLabel lblDelete;
     private JScrollPane spDelete;
 
+    /**
+     * Constructs a new {@code UploadedObjectsSummaryPanel}.
+     */
+    public UploadedObjectsSummaryPanel() {
+        build();
+    }
+
     protected void build() {
         setLayout(new GridBagLayout());
         OsmPrimitivRenderer renderer = new OsmPrimitivRenderer();
-        // initialize the three lists for uploaded primitives, but don't add
-        // them to the dialog yet,  see setUploadedPrimitives()
+        // initialize the three lists for uploaded primitives, but don't add them to the dialog yet, see setUploadedPrimitives()
         //
         lstAdd = new PrimitiveList();
         lstAdd.setCellRenderer(renderer);
         lstAdd.setVisibleRowCount(Math.min(lstAdd.getModel().getSize(), 10));
         spAdd = new JScrollPane(lstAdd);
         lblAdd = new JLabel(tr("Objects to add:"));
+        lblAdd.setLabelFor(lstAdd);
 
         lstUpdate = new PrimitiveList();
         lstUpdate.setCellRenderer(renderer);
         lstUpdate.setVisibleRowCount(Math.min(lstUpdate.getModel().getSize(), 10));
         spUpdate = new JScrollPane(lstUpdate);
         lblUpdate = new JLabel(tr("Objects to modify:"));
+        lblUpdate.setLabelFor(lstUpdate);
 
         lstDelete = new PrimitiveList();
         lstDelete.setCellRenderer(renderer);
         lstDelete.setVisibleRowCount(Math.min(lstDelete.getModel().getSize(), 10));
         spDelete = new JScrollPane(lstDelete);
         lblDelete = new JLabel(tr("Objects to delete:"));
+        lblDelete.setLabelFor(lstDelete);
     }
 
     /**
@@ -92,7 +100,7 @@ public class UploadedObjectsSummaryPanel extends JPanel {
         if (!add.isEmpty()) {
             y++;
             gcLabel.gridy = y;
-            lblAdd.setText(trn("{0} object to add:", "{0} objects to add:", add.size(),add.size()));
+            lblAdd.setText(trn("{0} object to add:", "{0} objects to add:", add.size(), add.size()));
             add(lblAdd, gcLabel);
             y++;
             gcList.gridy = y;
@@ -101,7 +109,7 @@ public class UploadedObjectsSummaryPanel extends JPanel {
         if (!update.isEmpty()) {
             y++;
             gcLabel.gridy = y;
-            lblUpdate.setText(trn("{0} object to modify:", "{0} objects to modify:", update.size(),update.size()));
+            lblUpdate.setText(trn("{0} object to modify:", "{0} objects to modify:", update.size(), update.size()));
             add(lblUpdate, gcLabel);
             y++;
             gcList.gridy = y;
@@ -110,18 +118,14 @@ public class UploadedObjectsSummaryPanel extends JPanel {
         if (!delete.isEmpty()) {
             y++;
             gcLabel.gridy = y;
-            lblDelete.setText(trn("{0} object to delete:", "{0} objects to delete:", delete.size(),delete.size()));
+            lblDelete.setText(trn("{0} object to delete:", "{0} objects to delete:", delete.size(), delete.size()));
             add(lblDelete, gcLabel);
             y++;
             gcList.gridy = y;
             add(spDelete, gcList);
         }
 
-        firePropertyChange(NUM_OBJECTS_TO_UPLOAD_PROP,0, getNumObjectsToUpload());
-    }
-
-    public UploadedObjectsSummaryPanel() {
-        build();
+        firePropertyChange(NUM_OBJECTS_TO_UPLOAD_PROP, 0, getNumObjectsToUpload());
     }
 
     /**
@@ -137,25 +141,29 @@ public class UploadedObjectsSummaryPanel extends JPanel {
 
     /**
      * A simple list of OSM primitives.
-     *
      */
     static class PrimitiveList extends JList<OsmPrimitive> {
+        /**
+         * Constructs a new {@code PrimitiveList}.
+         */
         public PrimitiveList() {
             super(new PrimitiveListModel());
         }
 
         public PrimitiveListModel getPrimitiveListModel() {
-            return (PrimitiveListModel)getModel();
+            return (PrimitiveListModel) getModel();
         }
     }
 
     /**
      * A list model for a list of OSM primitives.
-     *
      */
     static class PrimitiveListModel extends AbstractListModel<OsmPrimitive> {
         private transient List<OsmPrimitive> primitives;
 
+        /**
+         * Constructs a new {@code PrimitiveListModel}.
+         */
         public PrimitiveListModel() {
             primitives = new ArrayList<>();
         }
@@ -170,7 +178,7 @@ public class UploadedObjectsSummaryPanel extends JPanel {
             } else {
                 this.primitives = primitives;
             }
-            fireContentsChanged(this,0,getSize());
+            fireContentsChanged(this, 0, getSize());
         }
 
         @Override
diff --git a/src/org/openstreetmap/josm/gui/io/package-info.java b/src/org/openstreetmap/josm/gui/io/package-info.java
new file mode 100644
index 0000000..c3416ba
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/io/package-info.java
@@ -0,0 +1,6 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Provides GUI classes for handling input/output operations (download, upload, save).
+ */
+package org.openstreetmap.josm.gui.io;
diff --git a/src/org/openstreetmap/josm/gui/layer/AbstractCachedTileSourceLayer.java b/src/org/openstreetmap/josm/gui/layer/AbstractCachedTileSourceLayer.java
new file mode 100644
index 0000000..7610b51
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/layer/AbstractCachedTileSourceLayer.java
@@ -0,0 +1,139 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.layer;
+
+import java.io.IOException;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.commons.jcs.access.CacheAccess;
+import org.apache.commons.jcs.access.behavior.ICacheAccess;
+import org.openstreetmap.gui.jmapviewer.interfaces.TileLoader;
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.cache.BufferedImageCacheEntry;
+import org.openstreetmap.josm.data.cache.JCSCacheManager;
+import org.openstreetmap.josm.data.imagery.CachedTileLoaderFactory;
+import org.openstreetmap.josm.data.imagery.ImageryInfo;
+import org.openstreetmap.josm.data.imagery.TileLoaderFactory;
+import org.openstreetmap.josm.data.preferences.IntegerProperty;
+
+/**
+ *
+ * Class providing cache to other layers
+ *
+ * @author Wiktor Niesiobędzki
+ *
+ */
+public abstract class AbstractCachedTileSourceLayer extends AbstractTileSourceLayer {
+    /** loader factory responsible for loading tiles for all layers */
+    private static Map<String, TileLoaderFactory> loaderFactories = new ConcurrentHashMap<>();
+
+    private static final String PREFERENCE_PREFIX = "imagery.cache.";
+
+    private static volatile TileLoaderFactory loaderFactoryOverride = null;
+
+    /**
+     * how many object on disk should be stored for TMS region in MB. 500 MB is default value
+     */
+    public static final IntegerProperty MAX_DISK_CACHE_SIZE = new IntegerProperty(PREFERENCE_PREFIX + "max_disk_size", 512);
+
+    private ICacheAccess<String, BufferedImageCacheEntry> cache;
+    private volatile TileLoaderFactory loaderFactory;
+
+
+    /**
+     * Creates an instance of class based on InageryInfo
+     *
+     * @param info ImageryInfo describing the layer
+     */
+    public AbstractCachedTileSourceLayer(ImageryInfo info) {
+        super(info);
+
+        if (loaderFactoryOverride != null) {
+            loaderFactory = loaderFactoryOverride;
+        } else {
+            String key = this.getClass().getCanonicalName();
+            loaderFactory = loaderFactories.get(key);
+            if (loaderFactory == null) {
+                synchronized (AbstractCachedTileSourceLayer.class) {
+                    // check again, maybe another thread initialized factory
+                    loaderFactory = loaderFactories.get(key);
+                    if (loaderFactory == null) {
+                        loaderFactory = new CachedTileLoaderFactory(getCache(), getTileLoaderClass());
+                        loaderFactories.put(key, loaderFactory);
+                    }
+                }
+            }
+        }
+    }
+
+    @Override
+    protected synchronized TileLoaderFactory getTileLoaderFactory() {
+        if (loaderFactory == null) {
+            loaderFactory = new CachedTileLoaderFactory(getCache(), getTileLoaderClass());
+        }
+        return loaderFactory;
+    }
+
+    /**
+     * @return cache used by this layer
+     */
+    private synchronized ICacheAccess<String, BufferedImageCacheEntry> getCache() {
+        if (cache != null) {
+            return cache;
+        }
+        try {
+            cache = JCSCacheManager.getCache(getCacheName(),
+                    0,
+                    getDiskCacheSize(),
+                    CachedTileLoaderFactory.PROP_TILECACHE_DIR.get());
+            return cache;
+        } catch (IOException e) {
+            Main.warn(e);
+            return null;
+        }
+    }
+
+
+    /**
+     * Plugins that wish to set custom tile loader should call this method
+     * @param newLoaderFactory that will be used to load tiles
+     */
+
+    public static synchronized void setTileLoaderFactory(TileLoaderFactory newLoaderFactory) {
+        loaderFactoryOverride = newLoaderFactory;
+    }
+
+    /**
+     * Returns tile loader factory for cache region and specified TileLoader class
+     * @param name of the cache region
+     * @param klazz type of the TileLoader
+     * @return factory returning cached tile loaders using specified cache and TileLoaders
+     */
+    public static TileLoaderFactory getTileLoaderFactory(String name, Class<? extends TileLoader> klazz) {
+        return new CachedTileLoaderFactory(getCache(name), klazz);
+    }
+
+    /**
+     * @param name of cache region
+     * @return cache configured object for specified cache region
+     */
+    public static CacheAccess<String, BufferedImageCacheEntry> getCache(String name) {
+            try {
+                return JCSCacheManager.getCache(name,
+                        0,
+                        MAX_DISK_CACHE_SIZE.get() * 1024, // MAX_DISK_CACHE_SIZE is in MB, needs to by in sync with getDiskCacheSize
+                        CachedTileLoaderFactory.PROP_TILECACHE_DIR.get());
+            } catch (IOException e) {
+                Main.warn(e);
+                return null;
+            }
+    }
+
+    protected abstract Class<? extends TileLoader> getTileLoaderClass();
+
+    protected int getDiskCacheSize() {
+        return MAX_DISK_CACHE_SIZE.get() * 1024;
+    }
+
+    protected abstract String getCacheName();
+}
diff --git a/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java b/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java
new file mode 100644
index 0000000..b924c20
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java
@@ -0,0 +1,1719 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.layer;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Font;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.GridBagLayout;
+import java.awt.Image;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.Toolkit;
+import java.awt.event.ActionEvent;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.image.BufferedImage;
+import java.awt.image.ImageObserver;
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.Field;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.concurrent.ConcurrentSkipListSet;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.BorderFactory;
+import javax.swing.DefaultButtonModel;
+import javax.swing.JCheckBoxMenuItem;
+import javax.swing.JLabel;
+import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
+import javax.swing.JTextField;
+
+import org.openstreetmap.gui.jmapviewer.AttributionSupport;
+import org.openstreetmap.gui.jmapviewer.MemoryTileCache;
+import org.openstreetmap.gui.jmapviewer.OsmTileLoader;
+import org.openstreetmap.gui.jmapviewer.Tile;
+import org.openstreetmap.gui.jmapviewer.TileXY;
+import org.openstreetmap.gui.jmapviewer.interfaces.CachedTileLoader;
+import org.openstreetmap.gui.jmapviewer.interfaces.ICoordinate;
+import org.openstreetmap.gui.jmapviewer.interfaces.TemplatedTileSource;
+import org.openstreetmap.gui.jmapviewer.interfaces.TileCache;
+import org.openstreetmap.gui.jmapviewer.interfaces.TileLoader;
+import org.openstreetmap.gui.jmapviewer.interfaces.TileLoaderListener;
+import org.openstreetmap.gui.jmapviewer.interfaces.TileSource;
+import org.openstreetmap.gui.jmapviewer.tilesources.AbstractTMSTileSource;
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.actions.RenameLayerAction;
+import org.openstreetmap.josm.actions.SaveActionBase;
+import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.coor.EastNorth;
+import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.imagery.ImageryInfo;
+import org.openstreetmap.josm.data.imagery.TMSCachedTileLoader;
+import org.openstreetmap.josm.data.imagery.TileLoaderFactory;
+import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
+import org.openstreetmap.josm.data.preferences.BooleanProperty;
+import org.openstreetmap.josm.data.preferences.IntegerProperty;
+import org.openstreetmap.josm.gui.ExtendedDialog;
+import org.openstreetmap.josm.gui.MapFrame;
+import org.openstreetmap.josm.gui.MapView;
+import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
+import org.openstreetmap.josm.gui.NavigatableComponent.ZoomChangeListener;
+import org.openstreetmap.josm.gui.PleaseWaitRunnable;
+import org.openstreetmap.josm.gui.dialogs.LayerListDialog;
+import org.openstreetmap.josm.gui.dialogs.LayerListPopup;
+import org.openstreetmap.josm.gui.progress.ProgressMonitor;
+import org.openstreetmap.josm.io.WMSLayerImporter;
+import org.openstreetmap.josm.tools.GBC;
+
+/**
+ * Base abstract class that supports displaying images provided by TileSource. It might be TMS source, WMS or WMTS
+ *
+ * It implements all standard functions of tilesource based layers: autozoom,  tile reloads, layer saving, loading,etc.
+ *
+ * @author Upliner
+ * @author Wiktor Niesiobędzki
+ * @since 3715
+ * @since 8526 (copied from TMSLayer)
+ */
+public abstract class AbstractTileSourceLayer extends ImageryLayer implements ImageObserver, TileLoaderListener, ZoomChangeListener {
+    private static final String PREFERENCE_PREFIX   = "imagery.generic";
+
+    /** maximum zoom level supported */
+    public static final int MAX_ZOOM = 30;
+    /** minium zoom level supported */
+    public static final int MIN_ZOOM = 2;
+    private static final Font InfoFont = new Font("sansserif", Font.BOLD, 13);
+
+    /** do set autozoom when creating a new layer */
+    public static final BooleanProperty PROP_DEFAULT_AUTOZOOM = new BooleanProperty(PREFERENCE_PREFIX + ".default_autozoom", true);
+    /** do set autoload when creating a new layer */
+    public static final BooleanProperty PROP_DEFAULT_AUTOLOAD = new BooleanProperty(PREFERENCE_PREFIX + ".default_autoload", true);
+    /** do show errors per default */
+    public static final BooleanProperty PROP_DEFAULT_SHOWERRORS = new BooleanProperty(PREFERENCE_PREFIX + ".default_showerrors", true);
+    /** minimum zoom level to show to user */
+    public static final IntegerProperty PROP_MIN_ZOOM_LVL = new IntegerProperty(PREFERENCE_PREFIX + ".min_zoom_lvl", 2);
+    /** maximum zoom level to show to user */
+    public static final IntegerProperty PROP_MAX_ZOOM_LVL = new IntegerProperty(PREFERENCE_PREFIX + ".max_zoom_lvl", 20);
+
+    //public static final BooleanProperty PROP_DRAW_DEBUG = new BooleanProperty(PREFERENCE_PREFIX + ".draw_debug", false);
+    /**
+     * Zoomlevel at which tiles is currently downloaded.
+     * Initial zoom lvl is set to bestZoom
+     */
+    public int currentZoomLevel;
+    private boolean needRedraw;
+
+    private AttributionSupport attribution = new AttributionSupport();
+
+    // needed public access for session exporter
+    /** if layers changes automatically, when user zooms in */
+    public boolean autoZoom;
+    /** if layer automatically loads new tiles */
+    public boolean autoLoad;
+    /** if layer should show errors on tiles */
+    public boolean showErrors;
+
+    /**
+     * Offset between calculated zoom level and zoom level used to download and show tiles. Negative values will result in
+     * lower resolution of imagery useful in "retina" displays, positive values will result in higher resolution
+     */
+    public static final IntegerProperty ZOOM_OFFSET = new IntegerProperty(PREFERENCE_PREFIX + ".zoom_offset", 0);
+
+    /**
+     * use fairly small memory cache, as cached objects are quite big, as they contain BufferedImages
+     */
+    public static final IntegerProperty MEMORY_CACHE_SIZE = new IntegerProperty(PREFERENCE_PREFIX + ".cache.max_objects_ram",
+            (int) Math.max(200,  200 * Math.pow(4, ZOOM_OFFSET.get())));
+
+    /*
+     *  use MemoryTileCache instead of tileLoader JCS cache, as tileLoader caches only content (byte[] of image)
+     *  and MemoryTileCache caches whole Tile. This gives huge performance improvement when a lot of tiles are visible
+     *  in MapView (for example - when limiting min zoom in imagery)
+     *
+     *  Use static instance so memory is shared between layers to prevent out of memory exceptions, when user is working with many layers
+     */
+    protected static TileCache tileCache = new MemoryTileCache(MEMORY_CACHE_SIZE.get());
+    protected AbstractTMSTileSource tileSource;
+    protected TileLoader tileLoader;
+
+    /**
+     * Creates Tile Source based Imagery Layer based on Imagery Info
+     * @param info imagery info
+     */
+    public AbstractTileSourceLayer(ImageryInfo info) {
+        super(info);
+        setBackgroundLayer(true);
+        this.setVisible(true);
+        MapView.addZoomChangeListener(this);
+    }
+
+    protected abstract TileLoaderFactory getTileLoaderFactory();
+
+    /**
+     *
+     * @param info imagery info
+     * @return TileSource for specified ImageryInfo
+     * @throws IllegalArgumentException when Imagery is not supported by layer
+     */
+    protected abstract AbstractTMSTileSource getTileSource(ImageryInfo info) throws IllegalArgumentException;
+
+    protected Map<String, String> getHeaders(TileSource tileSource) {
+        if (tileSource instanceof TemplatedTileSource) {
+            return ((TemplatedTileSource) tileSource).getHeaders();
+        }
+        return null;
+    }
+
+    protected void initTileSource(AbstractTMSTileSource tileSource) {
+        attribution.initialize(tileSource);
+
+        currentZoomLevel = getBestZoom();
+
+        Map<String, String> headers = getHeaders(tileSource);
+
+        tileLoader = getTileLoaderFactory().makeTileLoader(this, headers);
+
+        try {
+            if ("file".equalsIgnoreCase(new URL(tileSource.getBaseUrl()).getProtocol())) {
+                tileLoader = new OsmTileLoader(this);
+            }
+        } catch (MalformedURLException e) {
+            // ignore, assume that this is not a file
+            if (Main.isDebugEnabled()) {
+                Main.debug(e.getMessage());
+            }
+        }
+
+        if (tileLoader == null)
+            tileLoader = new OsmTileLoader(this, headers);
+    }
+
+    @Override
+    public synchronized void tileLoadingFinished(Tile tile, boolean success) {
+        if (tile.hasError()) {
+            success = false;
+            tile.setImage(null);
+        }
+        tile.setLoaded(success);
+        needRedraw = true;
+        if (Main.map != null) {
+            Main.map.repaint(100);
+        }
+        if (Main.isDebugEnabled()) {
+            Main.debug("tileLoadingFinished() tile: " + tile + " success: " + success);
+        }
+    }
+
+    /**
+     * Clears the tile cache.
+     *
+     * If the current tileLoader is an instance of OsmTileLoader, a new
+     * TmsTileClearController is created and passed to the according clearCache
+     * method.
+     *
+     * @param monitor not used in this implementation - as cache clear is instaneus
+     */
+    public void clearTileCache(ProgressMonitor monitor) {
+        if (tileLoader instanceof CachedTileLoader) {
+            ((CachedTileLoader) tileLoader).clearCache(tileSource);
+        }
+        tileCache.clear();
+    }
+
+    /**
+     * Initiates a repaint of Main.map
+     *
+     * @see Main#map
+     * @see MapFrame#repaint()
+     */
+    protected void redraw() {
+        needRedraw = true;
+        Main.map.repaint();
+    }
+
+    @Override
+    public void setGamma(double gamma) {
+        super.setGamma(gamma);
+        redraw();
+    }
+
+    /**
+     * Marks layer as needing redraw on offset change
+     */
+    @Override
+    public void setOffset(double dx, double dy) {
+        super.setOffset(dx, dy);
+        needRedraw = true;
+    }
+
+
+    /**
+     * Returns average number of screen pixels per tile pixel for current mapview
+     */
+    private double getScaleFactor(int zoom) {
+        if (!Main.isDisplayingMapView()) return 1;
+        MapView mv = Main.map.mapView;
+        LatLon topLeft = mv.getLatLon(0, 0);
+        LatLon botRight = mv.getLatLon(mv.getWidth(), mv.getHeight());
+        TileXY t1 = tileSource.latLonToTileXY(topLeft.toCoordinate(), zoom);
+        TileXY t2 = tileSource.latLonToTileXY(botRight.toCoordinate(), zoom);
+
+        int screenPixels = mv.getWidth()*mv.getHeight();
+        double tilePixels = Math.abs((t2.getY()-t1.getY())*(t2.getX()-t1.getX())*tileSource.getTileSize()*tileSource.getTileSize());
+        if (screenPixels == 0 || tilePixels == 0) return 1;
+        return screenPixels/tilePixels;
+    }
+
+    protected int getBestZoom() {
+        double factor = getScaleFactor(1); // check the ratio between area of tilesize at zoom 1 to current view
+        double result = Math.log(factor)/Math.log(2)/2;
+        /*
+         * Math.log(factor)/Math.log(2) - gives log base 2 of factor
+         * We divide result by 2, as factor contains ratio between areas. We could do Math.sqrt before log, or just divide log by 2
+         *
+         * ZOOM_OFFSET controls, whether we work with overzoomed or underzoomed tiles. Positive ZOOM_OFFSET
+         * is for working with underzoomed tiles (higher quality when working with aerial imagery), negative ZOOM_OFFSET
+         * is for working with overzoomed tiles (big, pixelated), which is good when working with high-dpi screens and/or
+         * maps as a imagery layer
+         */
+
+        int intResult = (int) Math.round(result + 1 + ZOOM_OFFSET.get() / 1.9);
+
+        intResult = Math.min(intResult, getMaxZoomLvl());
+        intResult = Math.max(intResult, getMinZoomLvl());
+        return intResult;
+    }
+
+    private static boolean actionSupportLayers(List<Layer> layers) {
+        return layers.size() == 1 && layers.get(0) instanceof TMSLayer;
+    }
+
+    private final class ShowTileInfoAction extends AbstractAction {
+        private final transient TileHolder clickedTileHolder;
+
+        private ShowTileInfoAction(TileHolder clickedTileHolder) {
+            super(tr("Show Tile Info"));
+            this.clickedTileHolder = clickedTileHolder;
+        }
+
+        private String getSizeString(int size) {
+            StringBuilder ret = new StringBuilder();
+            return ret.append(size).append("x").append(size).toString();
+        }
+
+        private JTextField createTextField(String text) {
+            JTextField ret = new JTextField(text);
+            ret.setEditable(false);
+            ret.setBorder(BorderFactory.createEmptyBorder());
+            return ret;
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent ae) {
+            Tile clickedTile = clickedTileHolder.getTile();
+            if (clickedTile != null) {
+                ExtendedDialog ed = new ExtendedDialog(Main.parent, tr("Tile Info"), new String[]{tr("OK")});
+                JPanel panel = new JPanel(new GridBagLayout());
+                Rectangle displaySize = tileToRect(clickedTile);
+                String url = "";
+                try {
+                    url = clickedTile.getUrl();
+                } catch (IOException e) {
+                    // silence exceptions
+                    if (Main.isTraceEnabled()) {
+                        Main.trace(e.getMessage());
+                    }
+                }
+
+                String[][] content = {
+                        {"Tile name", clickedTile.getKey()},
+                        {"Tile url", url},
+                        {"Tile size", getSizeString(clickedTile.getTileSource().getTileSize()) },
+                        {"Tile display size", new StringBuilder().append(displaySize.width).append("x").append(displaySize.height).toString()},
+                };
+
+                for (String[] entry: content) {
+                    panel.add(new JLabel(tr(entry[0]) + ":"), GBC.std());
+                    panel.add(GBC.glue(5, 0), GBC.std());
+                    panel.add(createTextField(entry[1]), GBC.eol().fill(GBC.HORIZONTAL));
+                }
+
+                for (Entry<String, String> e: clickedTile.getMetadata().entrySet()) {
+                    panel.add(new JLabel(tr("Metadata ") + tr(e.getKey()) + ":"), GBC.std());
+                    panel.add(GBC.glue(5, 0), GBC.std());
+                    String value = e.getValue();
+                    if ("lastModification".equals(e.getKey()) || "expirationTime".equals(e.getKey())) {
+                        value = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(Long.parseLong(value)));
+                    }
+                    panel.add(createTextField(value), GBC.eol().fill(GBC.HORIZONTAL));
+
+                }
+                ed.setIcon(JOptionPane.INFORMATION_MESSAGE);
+                ed.setContent(panel);
+                ed.showDialog();
+            }
+        }
+    }
+
+    private class AutoZoomAction extends AbstractAction implements LayerAction {
+        public AutoZoomAction() {
+            super(tr("Auto Zoom"));
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent ae) {
+            autoZoom = !autoZoom;
+        }
+
+        @Override
+        public Component createMenuComponent() {
+            JCheckBoxMenuItem item = new JCheckBoxMenuItem(this);
+            item.setSelected(autoZoom);
+            return item;
+        }
+
+        @Override
+        public boolean supportLayers(List<Layer> layers) {
+            return actionSupportLayers(layers);
+        }
+    }
+
+    private class AutoLoadTilesAction extends AbstractAction implements LayerAction {
+        public AutoLoadTilesAction() {
+            super(tr("Auto load tiles"));
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent ae) {
+            autoLoad = !autoLoad;
+        }
+
+        public Component createMenuComponent() {
+            JCheckBoxMenuItem item = new JCheckBoxMenuItem(this);
+            item.setSelected(autoLoad);
+            return item;
+        }
+
+        @Override
+        public boolean supportLayers(List<Layer> layers) {
+            return actionSupportLayers(layers);
+        }
+    }
+
+    private class LoadAllTilesAction extends AbstractAction {
+        public LoadAllTilesAction() {
+            super(tr("Load All Tiles"));
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent ae) {
+            loadAllTiles(true);
+            redraw();
+        }
+    }
+
+    private class LoadErroneusTilesAction extends AbstractAction {
+        public LoadErroneusTilesAction() {
+            super(tr("Load All Error Tiles"));
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent ae) {
+            loadAllErrorTiles(true);
+            redraw();
+        }
+    }
+
+    private class ZoomToNativeLevelAction extends AbstractAction {
+        public ZoomToNativeLevelAction() {
+            super(tr("Zoom to native resolution"));
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent ae) {
+            double newFactor = Math.sqrt(getScaleFactor(currentZoomLevel));
+            Main.map.mapView.zoomToFactor(newFactor);
+            redraw();
+        }
+    }
+
+    private class ZoomToBestAction extends AbstractAction {
+        public ZoomToBestAction() {
+            super(tr("Change resolution"));
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent ae) {
+            setZoomLevel(getBestZoom());
+        }
+    }
+
+    /**
+     * Simple class to keep clickedTile within hookUpMapView
+     */
+    private static final class TileHolder {
+        private Tile t = null;
+
+        public Tile getTile() {
+            return t;
+        }
+
+        public void setTile(Tile t) {
+            this.t = t;
+        }
+    }
+
+    private class BooleanButtonModel extends DefaultButtonModel {
+        private Field field;
+
+        public BooleanButtonModel(Field field) {
+            this.field = field;
+        }
+
+        @Override
+        public boolean isSelected() {
+            try {
+                return field.getBoolean(AbstractTileSourceLayer.this);
+            } catch (IllegalArgumentException | IllegalAccessException e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+    }
+    /**
+     * Creates popup menu items and binds to mouse actions
+     */
+    @Override
+    public void hookUpMapView() {
+        this.tileSource = getTileSource(info);
+        if (this.tileSource == null) {
+            throw new IllegalArgumentException(tr("Failed to create tile source"));
+        }
+
+        projectionChanged(null, Main.getProjection()); // check if projection is supported
+        initTileSource(this.tileSource);
+
+        ;
+        // keep them final here, so we avoid namespace clutter in the class
+        final JPopupMenu tileOptionMenu = new JPopupMenu();
+        final TileHolder clickedTileHolder = new TileHolder();
+        Field autoZoomField;
+        Field autoLoadField;
+        Field showErrorsField;
+        try {
+            autoZoomField = AbstractTileSourceLayer.class.getField("autoZoom");
+            autoLoadField = AbstractTileSourceLayer.class.getDeclaredField("autoLoad");
+            showErrorsField = AbstractTileSourceLayer.class.getDeclaredField("showErrors");
+        } catch (NoSuchFieldException | SecurityException e) {
+            // shoud not happen
+            throw new RuntimeException(e);
+        }
+
+        autoZoom = PROP_DEFAULT_AUTOZOOM.get();
+        JCheckBoxMenuItem autoZoomPopup = new JCheckBoxMenuItem();
+        autoZoomPopup.setModel(new BooleanButtonModel(autoZoomField));
+        autoZoomPopup.setAction(new AutoZoomAction());
+        tileOptionMenu.add(autoZoomPopup);
+
+        autoLoad = PROP_DEFAULT_AUTOLOAD.get();
+        JCheckBoxMenuItem autoLoadPopup = new JCheckBoxMenuItem();
+        autoLoadPopup.setAction(new AutoLoadTilesAction());
+        autoLoadPopup.setModel(new BooleanButtonModel(autoLoadField));
+        tileOptionMenu.add(autoLoadPopup);
+
+        showErrors = PROP_DEFAULT_SHOWERRORS.get();
+        JCheckBoxMenuItem showErrorsPopup = new JCheckBoxMenuItem();
+        showErrorsPopup.setAction(new AbstractAction(tr("Show Errors")) {
+            @Override
+            public void actionPerformed(ActionEvent ae) {
+                showErrors = !showErrors;
+            }
+        });
+        showErrorsPopup.setModel(new BooleanButtonModel(showErrorsField));
+        tileOptionMenu.add(showErrorsPopup);
+
+        tileOptionMenu.add(new JMenuItem(new AbstractAction(tr("Load Tile")) {
+            @Override
+            public void actionPerformed(ActionEvent ae) {
+                Tile clickedTile = clickedTileHolder.getTile();
+                if (clickedTile != null) {
+                    loadTile(clickedTile, true);
+                    redraw();
+                }
+            }
+        }));
+
+        tileOptionMenu.add(new JMenuItem(new ShowTileInfoAction(clickedTileHolder)));
+
+        tileOptionMenu.add(new JMenuItem(new LoadAllTilesAction()));
+        tileOptionMenu.add(new JMenuItem(new LoadErroneusTilesAction()));
+
+        // increase and decrease commands
+        tileOptionMenu.add(new JMenuItem(new AbstractAction(
+                tr("Increase zoom")) {
+            @Override
+            public void actionPerformed(ActionEvent ae) {
+                increaseZoomLevel();
+                redraw();
+            }
+        }));
+
+        tileOptionMenu.add(new JMenuItem(new AbstractAction(
+                tr("Decrease zoom")) {
+            @Override
+            public void actionPerformed(ActionEvent ae) {
+                decreaseZoomLevel();
+                redraw();
+            }
+        }));
+
+        tileOptionMenu.add(new JMenuItem(new AbstractAction(
+                tr("Snap to tile size")) {
+            @Override
+            public void actionPerformed(ActionEvent ae) {
+                double newFactor = Math.sqrt(getScaleFactor(currentZoomLevel));
+                Main.map.mapView.zoomToFactor(newFactor);
+                redraw();
+            }
+        }));
+
+        tileOptionMenu.add(new JMenuItem(new AbstractAction(
+                tr("Flush Tile Cache")) {
+            @Override
+            public void actionPerformed(ActionEvent ae) {
+                new PleaseWaitRunnable(tr("Flush Tile Cache")) {
+                    @Override
+                    protected void realRun() {
+                        clearTileCache(getProgressMonitor());
+                    }
+
+                    @Override
+                    protected void finish() {
+                        // empty - flush is instaneus
+                    }
+
+                    @Override
+                    protected void cancel() {
+                        // empty - flush is instaneus
+                    }
+                }.run();
+            }
+        }));
+
+        final MouseAdapter adapter = new MouseAdapter() {
+            @Override
+            public void mouseClicked(MouseEvent e) {
+                if (!isVisible()) return;
+                if (e.getButton() == MouseEvent.BUTTON3) {
+                    clickedTileHolder.setTile(getTileForPixelpos(e.getX(), e.getY()));
+                    tileOptionMenu.show(e.getComponent(), e.getX(), e.getY());
+                } else if (e.getButton() == MouseEvent.BUTTON1) {
+                    attribution.handleAttribution(e.getPoint(), true);
+                }
+            }
+        };
+        Main.map.mapView.addMouseListener(adapter);
+
+        MapView.addLayerChangeListener(new LayerChangeListener() {
+            @Override
+            public void activeLayerChange(Layer oldLayer, Layer newLayer) {
+                //
+            }
+
+            @Override
+            public void layerAdded(Layer newLayer) {
+                //
+            }
+
+            @Override
+            public void layerRemoved(Layer oldLayer) {
+                if (oldLayer == AbstractTileSourceLayer.this) {
+                    Main.map.mapView.removeMouseListener(adapter);
+                    MapView.removeLayerChangeListener(this);
+                    MapView.removeZoomChangeListener(AbstractTileSourceLayer.this);
+                }
+            }
+        });
+
+        // FIXME: why do we need this? Without this, if you add a WMS layer and do not move the mouse, sometimes, tiles do not
+        // start loading.
+        Main.map.repaint(500);
+    }
+
+    /**
+     * Checks zoom level against settings
+     * @param maxZoomLvl zoom level to check
+     * @param ts tile source to crosscheck with
+     * @return maximum zoom level, not higher than supported by tilesource nor set by the user
+     */
+    public static int checkMaxZoomLvl(int maxZoomLvl, TileSource ts) {
+        if (maxZoomLvl > MAX_ZOOM) {
+            maxZoomLvl = MAX_ZOOM;
+        }
+        if (maxZoomLvl < PROP_MIN_ZOOM_LVL.get()) {
+            maxZoomLvl = PROP_MIN_ZOOM_LVL.get();
+        }
+        if (ts != null && ts.getMaxZoom() != 0 && ts.getMaxZoom() < maxZoomLvl) {
+            maxZoomLvl = ts.getMaxZoom();
+        }
+        return maxZoomLvl;
+    }
+
+    /**
+     * Checks zoom level against settings
+     * @param minZoomLvl zoom level to check
+     * @param ts tile source to crosscheck with
+     * @return minimum zoom level, not higher than supported by tilesource nor set by the user
+     */
+    public static int checkMinZoomLvl(int minZoomLvl, TileSource ts) {
+        if (minZoomLvl < MIN_ZOOM) {
+            minZoomLvl = MIN_ZOOM;
+        }
+        if (minZoomLvl > PROP_MAX_ZOOM_LVL.get()) {
+            minZoomLvl = getMaxZoomLvl(ts);
+        }
+        if (ts != null && ts.getMinZoom() > minZoomLvl) {
+            minZoomLvl = ts.getMinZoom();
+        }
+        return minZoomLvl;
+    }
+
+    /**
+     * @param ts TileSource for which we want to know maximum zoom level
+     * @return maximum max zoom level, that will be shown on layer
+     */
+    public static int getMaxZoomLvl(TileSource ts) {
+        return checkMaxZoomLvl(PROP_MAX_ZOOM_LVL.get(), ts);
+    }
+
+    /**
+     * @param ts TileSource for which we want to know minimum zoom level
+     * @return minimum zoom level, that will be shown on layer
+     */
+    public static int getMinZoomLvl(TileSource ts) {
+        return checkMinZoomLvl(PROP_MIN_ZOOM_LVL.get(), ts);
+    }
+
+    /**
+     * Sets maximum zoom level, that layer will attempt show
+     * @param maxZoomLvl maximum zoom level
+     */
+    public static void setMaxZoomLvl(int maxZoomLvl) {
+        PROP_MAX_ZOOM_LVL.put(checkMaxZoomLvl(maxZoomLvl, null));
+    }
+
+    /**
+     * Sets minimum zoom level, that layer will attempt show
+     * @param minZoomLvl minimum zoom level
+     */
+    public static void setMinZoomLvl(int minZoomLvl) {
+        PROP_MIN_ZOOM_LVL.put(checkMinZoomLvl(minZoomLvl, null));
+    }
+
+    /**
+     * This fires every time the user changes the zoom, but also (due to ZoomChangeListener) - on all
+     * changes to visible map (panning/zooming)
+     */
+    @Override
+    public void zoomChanged() {
+        if (Main.isDebugEnabled()) {
+            Main.debug("zoomChanged(): " + currentZoomLevel);
+        }
+        if (tileLoader instanceof TMSCachedTileLoader) {
+            ((TMSCachedTileLoader) tileLoader).cancelOutstandingTasks();
+        }
+        needRedraw = true;
+    }
+
+    protected int getMaxZoomLvl() {
+        if (info.getMaxZoom() != 0)
+            return checkMaxZoomLvl(info.getMaxZoom(), tileSource);
+        else
+            return getMaxZoomLvl(tileSource);
+    }
+
+    protected int getMinZoomLvl() {
+        return getMinZoomLvl(tileSource);
+    }
+
+    /**
+     *
+     * @return if its allowed to zoom in
+     */
+    public boolean zoomIncreaseAllowed() {
+        boolean zia = currentZoomLevel < this.getMaxZoomLvl();
+        if (Main.isDebugEnabled()) {
+            Main.debug("zoomIncreaseAllowed(): " + zia + " " + currentZoomLevel + " vs. " + this.getMaxZoomLvl());
+        }
+        return zia;
+    }
+
+    /**
+     * Zoom in, go closer to map.
+     *
+     * @return    true, if zoom increasing was successful, false otherwise
+     */
+    public boolean increaseZoomLevel() {
+        if (zoomIncreaseAllowed()) {
+            currentZoomLevel++;
+            if (Main.isDebugEnabled()) {
+                Main.debug("increasing zoom level to: " + currentZoomLevel);
+            }
+            zoomChanged();
+        } else {
+            Main.warn("Current zoom level ("+currentZoomLevel+") could not be increased. "+
+                    "Max.zZoom Level "+this.getMaxZoomLvl()+" reached.");
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * Sets the zoom level of the layer
+     * @param zoom zoom level
+     * @return true, when zoom has changed to desired value, false if it was outside supported zoom levels
+     */
+    public boolean setZoomLevel(int zoom) {
+        if (zoom == currentZoomLevel) return true;
+        if (zoom > this.getMaxZoomLvl()) return false;
+        if (zoom < this.getMinZoomLvl()) return false;
+        currentZoomLevel = zoom;
+        zoomChanged();
+        return true;
+    }
+
+    /**
+     * Check if zooming out is allowed
+     *
+     * @return    true, if zooming out is allowed (currentZoomLevel > minZoomLevel)
+     */
+    public boolean zoomDecreaseAllowed() {
+        return currentZoomLevel > this.getMinZoomLvl();
+    }
+
+    /**
+     * Zoom out from map.
+     *
+     * @return    true, if zoom increasing was successfull, false othervise
+     */
+    public boolean decreaseZoomLevel() {
+        if (zoomDecreaseAllowed()) {
+            if (Main.isDebugEnabled()) {
+                Main.debug("decreasing zoom level to: " + currentZoomLevel);
+            }
+            currentZoomLevel--;
+            zoomChanged();
+        } else {
+            return false;
+        }
+        return true;
+    }
+
+    /*
+     * We use these for quick, hackish calculations.  They
+     * are temporary only and intentionally not inserted
+     * into the tileCache.
+     */
+    private Tile tempCornerTile(Tile t) {
+        int x = t.getXtile() + 1;
+        int y = t.getYtile() + 1;
+        int zoom = t.getZoom();
+        Tile tile = getTile(x, y, zoom);
+        if (tile != null)
+            return tile;
+        return new Tile(tileSource, x, y, zoom);
+    }
+
+    private Tile getOrCreateTile(int x, int y, int zoom) {
+        Tile tile = getTile(x, y, zoom);
+        if (tile == null) {
+            tile = new Tile(tileSource, x, y, zoom);
+            tileCache.addTile(tile);
+            tile.loadPlaceholderFromCache(tileCache);
+        }
+        return tile;
+    }
+
+    /*
+     * This can and will return null for tiles that are not
+     * already in the cache.
+     */
+    private Tile getTile(int x, int y, int zoom) {
+        if (x < 0 || x >= tileSource.getTileXMax(zoom) || y < 0 || y >= tileSource.getTileYMax(zoom))
+            return null;
+        return tileCache.getTile(tileSource, x, y, zoom);
+    }
+
+    private boolean loadTile(Tile tile, boolean force) {
+        if (tile == null)
+            return false;
+        if (!force && (tile.isLoaded() || tile.hasError()))
+            return false;
+        if (tile.isLoading())
+            return false;
+        tileLoader.createTileLoaderJob(tile).submit(force);
+        return true;
+    }
+
+    private TileSet getVisibleTileSet() {
+        MapView mv = Main.map.mapView;
+        EastNorth topLeft = mv.getEastNorth(0, 0);
+        EastNorth botRight = mv.getEastNorth(mv.getWidth(), mv.getHeight());
+        return new TileSet(topLeft, botRight, currentZoomLevel);
+    }
+
+    protected void loadAllTiles(boolean force) {
+        TileSet ts = getVisibleTileSet();
+
+        // if there is more than 18 tiles on screen in any direction, do not load all tiles!
+        if (ts.tooLarge()) {
+            Main.warn("Not downloading all tiles because there is more than 18 tiles on an axis!");
+            return;
+        }
+        ts.loadAllTiles(force);
+    }
+
+    protected void loadAllErrorTiles(boolean force) {
+        TileSet ts = getVisibleTileSet();
+        ts.loadAllErrorTiles(force);
+    }
+
+    @Override
+    public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) {
+        boolean done = (infoflags & (ERROR | FRAMEBITS | ALLBITS)) != 0;
+        needRedraw = true;
+        if (Main.isDebugEnabled()) {
+            Main.debug("imageUpdate() done: " + done + " calling repaint");
+        }
+        Main.map.repaint(done ? 0 : 100);
+        return !done;
+    }
+
+    private boolean imageLoaded(Image i) {
+        if (i == null)
+            return false;
+        int status = Toolkit.getDefaultToolkit().checkImage(i, -1, -1, this);
+        if ((status & ALLBITS) != 0)
+            return true;
+        return false;
+    }
+
+    /**
+     * Returns the image for the given tile if both tile and image are loaded.
+     * Otherwise returns  null.
+     *
+     * @param tile the Tile for which the image should be returned
+     * @return  the image of the tile or null.
+     */
+    private Image getLoadedTileImage(Tile tile) {
+        if (!tile.isLoaded())
+            return null;
+        Image img = tile.getImage();
+        if (!imageLoaded(img))
+            return null;
+        return img;
+    }
+
+    private Rectangle tileToRect(Tile t1) {
+        /*
+         * We need to get a box in which to draw, so advance by one tile in
+         * each direction to find the other corner of the box.
+         * Note: this somewhat pollutes the tile cache
+         */
+        Tile t2 = tempCornerTile(t1);
+        Rectangle rect = new Rectangle(pixelPos(t1));
+        rect.add(pixelPos(t2));
+        return rect;
+    }
+
+    // 'source' is the pixel coordinates for the area that
+    // the img is capable of filling in.  However, we probably
+    // only want a portion of it.
+    //
+    // 'border' is the screen cordinates that need to be drawn.
+    //  We must not draw outside of it.
+    private void drawImageInside(Graphics g, Image sourceImg, Rectangle source, Rectangle border) {
+        Rectangle target = source;
+
+        // If a border is specified, only draw the intersection
+        // if what we have combined with what we are supposed to draw.
+        if (border != null) {
+            target = source.intersection(border);
+            if (Main.isDebugEnabled()) {
+                Main.debug("source: " + source + "\nborder: " + border + "\nintersection: " + target);
+            }
+        }
+
+        // All of the rectangles are in screen coordinates.  We need
+        // to how these correlate to the sourceImg pixels.  We could
+        // avoid doing this by scaling the image up to the 'source' size,
+        // but this should be cheaper.
+        //
+        // In some projections, x any y are scaled differently enough to
+        // cause a pixel or two of fudge.  Calculate them separately.
+        double imageYScaling = sourceImg.getHeight(this) / source.getHeight();
+        double imageXScaling = sourceImg.getWidth(this) / source.getWidth();
+
+        // How many pixels into the 'source' rectangle are we drawing?
+        int screen_x_offset = target.x - source.x;
+        int screen_y_offset = target.y - source.y;
+        // And how many pixels into the image itself does that correlate to?
+        int img_x_offset = (int) (screen_x_offset * imageXScaling + 0.5);
+        int img_y_offset = (int) (screen_y_offset * imageYScaling + 0.5);
+        // Now calculate the other corner of the image that we need
+        // by scaling the 'target' rectangle's dimensions.
+        int img_x_end = img_x_offset + (int) (target.getWidth() * imageXScaling + 0.5);
+        int img_y_end = img_y_offset + (int) (target.getHeight() * imageYScaling + 0.5);
+
+        if (Main.isDebugEnabled()) {
+            Main.debug("drawing image into target rect: " + target);
+        }
+        g.drawImage(sourceImg,
+                target.x, target.y,
+                target.x + target.width, target.y + target.height,
+                img_x_offset, img_y_offset,
+                img_x_end, img_y_end,
+                this);
+        if (PROP_FADE_AMOUNT.get() != 0) {
+            // dimm by painting opaque rect...
+            g.setColor(getFadeColorWithAlpha());
+            g.fillRect(target.x, target.y,
+                    target.width, target.height);
+        }
+    }
+
+    // This function is called for several zoom levels, not just
+    // the current one.  It should not trigger any tiles to be
+    // downloaded.  It should also avoid polluting the tile cache
+    // with any tiles since these tiles are not mandatory.
+    //
+    // The "border" tile tells us the boundaries of where we may
+    // draw.  It will not be from the zoom level that is being
+    // drawn currently.  If drawing the displayZoomLevel,
+    // border is null and we draw the entire tile set.
+    private List<Tile> paintTileImages(Graphics g, TileSet ts, int zoom, Tile border) {
+        if (zoom <= 0) return Collections.emptyList();
+        Rectangle borderRect = null;
+        if (border != null) {
+            borderRect = tileToRect(border);
+        }
+        List<Tile> missedTiles = new LinkedList<>();
+        // The callers of this code *require* that we return any tiles
+        // that we do not draw in missedTiles.  ts.allExistingTiles() by
+        // default will only return already-existing tiles.  However, we
+        // need to return *all* tiles to the callers, so force creation here.
+        for (Tile tile : ts.allTilesCreate()) {
+            Image img = getLoadedTileImage(tile);
+            if (img == null || tile.hasError()) {
+                if (Main.isDebugEnabled()) {
+                    Main.debug("missed tile: " + tile);
+                }
+                missedTiles.add(tile);
+                continue;
+            }
+
+            // applying all filters to this layer
+            img = applyImageProcessors((BufferedImage) img);
+
+            Rectangle sourceRect = tileToRect(tile);
+            if (borderRect != null && !sourceRect.intersects(borderRect)) {
+                continue;
+            }
+            drawImageInside(g, img, sourceRect, borderRect);
+        }
+        return missedTiles;
+    }
+
+    private void myDrawString(Graphics g, String text, int x, int y) {
+        Color oldColor = g.getColor();
+        String textToDraw = text;
+        if (g.getFontMetrics().stringWidth(text) > tileSource.getTileSize()) {
+            // text longer than tile size, split it
+            StringBuilder line = new StringBuilder();
+            StringBuilder ret = new StringBuilder();
+            for (String s: text.split(" ")) {
+                if (g.getFontMetrics().stringWidth(line.toString() + s) > tileSource.getTileSize()) {
+                    ret.append(line).append("\n");
+                    line.setLength(0);
+                }
+                line.append(s).append(" ");
+            }
+            ret.append(line);
+            textToDraw = ret.toString();
+        }
+        int offset = 0;
+        for (String s: textToDraw.split("\n")) {
+            g.setColor(Color.black);
+            g.drawString(s, x + 1, y + offset + 1);
+            g.setColor(oldColor);
+            g.drawString(s, x, y + offset);
+            offset += g.getFontMetrics().getHeight() + 3;
+        }
+    }
+
+    private void paintTileText(TileSet ts, Tile tile, Graphics g, MapView mv, int zoom, Tile t) {
+        int fontHeight = g.getFontMetrics().getHeight();
+        if (tile == null)
+            return;
+        Point p = pixelPos(t);
+        int texty = p.y + 2 + fontHeight;
+
+        /*if (PROP_DRAW_DEBUG.get()) {
+            myDrawString(g, "x=" + t.getXtile() + " y=" + t.getYtile() + " z=" + zoom + "", p.x + 2, texty);
+            texty += 1 + fontHeight;
+            if ((t.getXtile() % 32 == 0) && (t.getYtile() % 32 == 0)) {
+                myDrawString(g, "x=" + t.getXtile() / 32 + " y=" + t.getYtile() / 32 + " z=7", p.x + 2, texty);
+                texty += 1 + fontHeight;
+            }
+        }*/
+
+        /*String tileStatus = tile.getStatus();
+        if (!tile.isLoaded() && PROP_DRAW_DEBUG.get()) {
+            myDrawString(g, tr("image " + tileStatus), p.x + 2, texty);
+            texty += 1 + fontHeight;
+        }*/
+
+        if (tile.hasError() && showErrors) {
+            myDrawString(g, tr("Error") + ": " + tr(tile.getErrorMessage()), p.x + 2, texty);
+            //texty += 1 + fontHeight;
+        }
+
+        int xCursor = -1;
+        int yCursor = -1;
+        if (Main.isDebugEnabled()) {
+            if (yCursor < t.getYtile()) {
+                if (t.getYtile() % 32 == 31) {
+                    g.fillRect(0, p.y - 1, mv.getWidth(), 3);
+                } else {
+                    g.drawLine(0, p.y, mv.getWidth(), p.y);
+                }
+                //yCursor = t.getYtile();
+            }
+            // This draws the vertical lines for the entire column. Only draw them for the top tile in the column.
+            if (xCursor < t.getXtile()) {
+                if (t.getXtile() % 32 == 0) {
+                    // level 7 tile boundary
+                    g.fillRect(p.x - 1, 0, 3, mv.getHeight());
+                } else {
+                    g.drawLine(p.x, 0, p.x, mv.getHeight());
+                }
+                //xCursor = t.getXtile();
+            }
+        }
+    }
+
+    private Point pixelPos(LatLon ll) {
+        return Main.map.mapView.getPoint(Main.getProjection().latlon2eastNorth(ll).add(getDx(), getDy()));
+    }
+
+    private Point pixelPos(Tile t) {
+        ICoordinate coord = tileSource.tileXYToLatLon(t);
+        return pixelPos(new LatLon(coord));
+    }
+
+    private LatLon getShiftedLatLon(EastNorth en) {
+        return Main.getProjection().eastNorth2latlon(en.add(-getDx(), -getDy()));
+    }
+
+    private ICoordinate getShiftedCoord(EastNorth en) {
+        return getShiftedLatLon(en).toCoordinate();
+    }
+
+    private final TileSet nullTileSet = new TileSet((LatLon) null, (LatLon) null, 0);
+    private final class TileSet {
+        int x0, x1, y0, y1;
+        int zoom;
+
+        /**
+         * Create a TileSet by EastNorth bbox taking a layer shift in account
+         */
+        private TileSet(EastNorth topLeft, EastNorth botRight, int zoom) {
+            this(getShiftedLatLon(topLeft), getShiftedLatLon(botRight), zoom);
+        }
+
+        /**
+         * Create a TileSet by known LatLon bbox without layer shift correction
+         */
+        private TileSet(LatLon topLeft, LatLon botRight, int zoom) {
+            this.zoom = zoom;
+            if (zoom == 0)
+                return;
+
+            TileXY t1 = tileSource.latLonToTileXY(topLeft.toCoordinate(), zoom);
+            TileXY t2 = tileSource.latLonToTileXY(botRight.toCoordinate(), zoom);
+
+            x0 = t1.getXIndex();
+            y0 = t1.getYIndex();
+            x1 = t2.getXIndex();
+            y1 = t2.getYIndex();
+
+            if (x0 > x1) {
+                int tmp = x0;
+                x0 = x1;
+                x1 = tmp;
+            }
+            if (y0 > y1) {
+                int tmp = y0;
+                y0 = y1;
+                y1 = tmp;
+            }
+
+            if (x0 < tileSource.getTileXMin(zoom)) {
+                x0 = tileSource.getTileXMin(zoom);
+            }
+            if (y0 < tileSource.getTileYMin(zoom)) {
+                y0 = tileSource.getTileYMin(zoom);
+            }
+            if (x1 > tileSource.getTileXMax(zoom)) {
+                x1 = tileSource.getTileXMax(zoom);
+            }
+            if (y1 > tileSource.getTileYMax(zoom)) {
+                y1 = tileSource.getTileYMax(zoom);
+            }
+        }
+
+        private boolean tooSmall() {
+            return this.tilesSpanned() < 2.1;
+        }
+
+        private boolean tooLarge() {
+            return this.tilesSpanned() > 20;
+        }
+
+        private boolean insane() {
+            return this.tilesSpanned() > 100;
+        }
+
+        private double tilesSpanned() {
+            return Math.sqrt(1.0 * this.size());
+        }
+
+        private int size() {
+            int xSpan = x1 - x0 + 1;
+            int ySpan = y1 - y0 + 1;
+            return xSpan * ySpan;
+        }
+
+        /*
+         * Get all tiles represented by this TileSet that are
+         * already in the tileCache.
+         */
+        private List<Tile> allExistingTiles() {
+            return this.__allTiles(false);
+        }
+
+        private List<Tile> allTilesCreate() {
+            return this.__allTiles(true);
+        }
+
+        private List<Tile> __allTiles(boolean create) {
+            // Tileset is either empty or too large
+            if (zoom == 0 || this.insane())
+                return Collections.emptyList();
+            List<Tile> ret = new ArrayList<>();
+            for (int x = x0; x <= x1; x++) {
+                for (int y = y0; y <= y1; y++) {
+                    Tile t;
+                    if (create) {
+                        t = getOrCreateTile(x, y , zoom);
+                    } else {
+                        t = getTile(x, y, zoom);
+                    }
+                    if (t != null) {
+                        ret.add(t);
+                    }
+                }
+            }
+            return ret;
+        }
+
+        private List<Tile> allLoadedTiles() {
+            List<Tile> ret = new ArrayList<>();
+            for (Tile t : this.allExistingTiles()) {
+                if (t.isLoaded())
+                    ret.add(t);
+            }
+            return ret;
+        }
+
+        /**
+         * @return comparator, that sorts the tiles from the center to the edge of the current screen
+         */
+        private Comparator<Tile> getTileDistanceComparator() {
+            final int centerX = (int) Math.ceil((x0 + x1) / 2d);
+            final int centerY = (int) Math.ceil((y0 + y1) / 2d);
+            return new Comparator<Tile>() {
+                private int getDistance(Tile t) {
+                    return Math.abs(t.getXtile() - centerX) + Math.abs(t.getYtile() - centerY);
+                }
+
+                @Override
+                public int compare(Tile o1, Tile o2) {
+                    int distance1 = getDistance(o1);
+                    int distance2 = getDistance(o2);
+                    return Integer.compare(distance1, distance2);
+                }
+            };
+        }
+
+        private void loadAllTiles(boolean force) {
+            if (!autoLoad && !force)
+                return;
+            List<Tile> allTiles = allTilesCreate();
+            Collections.sort(allTiles, getTileDistanceComparator());
+            for (Tile t : allTiles) {
+                loadTile(t, force);
+            }
+        }
+
+        private void loadAllErrorTiles(boolean force) {
+            if (!autoLoad && !force)
+                return;
+            for (Tile t : this.allTilesCreate()) {
+                if (t.hasError()) {
+                    loadTile(t, true);
+                }
+            }
+        }
+    }
+
+    private static class TileSetInfo {
+        public boolean hasVisibleTiles = false;
+        public boolean hasOverzoomedTiles = false;
+        public boolean hasLoadingTiles = false;
+    }
+
+    private static TileSetInfo getTileSetInfo(TileSet ts) {
+        List<Tile> allTiles = ts.allExistingTiles();
+        TileSetInfo result = new TileSetInfo();
+        result.hasLoadingTiles = allTiles.size() < ts.size();
+        for (Tile t : allTiles) {
+            if ("no-tile".equals(t.getValue("tile-info"))) {
+                result.hasOverzoomedTiles = true;
+            }
+
+            if (t.isLoaded()) {
+                if (!t.hasError()) {
+                    result.hasVisibleTiles = true;
+                }
+            } else if (t.isLoading()) {
+                result.hasLoadingTiles = true;
+            }
+        }
+        return result;
+    }
+
+    private class DeepTileSet {
+        private final EastNorth topLeft, botRight;
+        private final int minZoom, maxZoom;
+        private final TileSet[] tileSets;
+        private final TileSetInfo[] tileSetInfos;
+        public DeepTileSet(EastNorth topLeft, EastNorth botRight, int minZoom, int maxZoom) {
+            this.topLeft = topLeft;
+            this.botRight = botRight;
+            this.minZoom = minZoom;
+            this.maxZoom = maxZoom;
+            this.tileSets = new TileSet[maxZoom - minZoom + 1];
+            this.tileSetInfos = new TileSetInfo[maxZoom - minZoom + 1];
+        }
+
+        public TileSet getTileSet(int zoom) {
+            if (zoom < minZoom)
+                return nullTileSet;
+            synchronized (tileSets) {
+                TileSet ts = tileSets[zoom-minZoom];
+                if (ts == null) {
+                    ts = new TileSet(topLeft, botRight, zoom);
+                    tileSets[zoom-minZoom] = ts;
+                }
+                return ts;
+            }
+        }
+
+        public TileSetInfo getTileSetInfo(int zoom) {
+            if (zoom < minZoom)
+                return new TileSetInfo();
+            synchronized (tileSetInfos) {
+                TileSetInfo tsi = tileSetInfos[zoom-minZoom];
+                if (tsi == null) {
+                    tsi = AbstractTileSourceLayer.getTileSetInfo(getTileSet(zoom));
+                    tileSetInfos[zoom-minZoom] = tsi;
+                }
+                return tsi;
+            }
+        }
+    }
+
+    @Override
+    public void paint(Graphics2D g, MapView mv, Bounds bounds) {
+        EastNorth topLeft = mv.getEastNorth(0, 0);
+        EastNorth botRight = mv.getEastNorth(mv.getWidth(), mv.getHeight());
+
+        if (botRight.east() == 0 || botRight.north() == 0) {
+            /*Main.debug("still initializing??");*/
+            // probably still initializing
+            return;
+        }
+
+        needRedraw = false;
+
+        int zoom = currentZoomLevel;
+        if (autoZoom) {
+            zoom = getBestZoom();
+        }
+
+        DeepTileSet dts = new DeepTileSet(topLeft, botRight, getMinZoomLvl(), zoom);
+        TileSet ts = dts.getTileSet(zoom);
+
+        int displayZoomLevel = zoom;
+
+        boolean noTilesAtZoom = false;
+        if (autoZoom && autoLoad) {
+            // Auto-detection of tilesource maxzoom (currently fully works only for Bing)
+            TileSetInfo tsi = dts.getTileSetInfo(zoom);
+            if (!tsi.hasVisibleTiles && (!tsi.hasLoadingTiles || tsi.hasOverzoomedTiles)) {
+                noTilesAtZoom = true;
+            }
+            // Find highest zoom level with at least one visible tile
+            for (int tmpZoom = zoom; tmpZoom > dts.minZoom; tmpZoom--) {
+                if (dts.getTileSetInfo(tmpZoom).hasVisibleTiles) {
+                    displayZoomLevel = tmpZoom;
+                    break;
+                }
+            }
+            // Do binary search between currentZoomLevel and displayZoomLevel
+            while (zoom > displayZoomLevel && !tsi.hasVisibleTiles && tsi.hasOverzoomedTiles) {
+                zoom = (zoom + displayZoomLevel)/2;
+                tsi = dts.getTileSetInfo(zoom);
+            }
+
+            setZoomLevel(zoom);
+
+            // If all tiles at displayZoomLevel is loaded, load all tiles at next zoom level
+            // to make sure there're really no more zoom levels
+            // loading is done in the next if section
+            if (zoom == displayZoomLevel && !tsi.hasLoadingTiles && zoom < dts.maxZoom) {
+                zoom++;
+                tsi = dts.getTileSetInfo(zoom);
+            }
+            // When we have overzoomed tiles and all tiles at current zoomlevel is loaded,
+            // load tiles at previovus zoomlevels until we have all tiles on screen is loaded.
+            // loading is done in the next if section
+            while (zoom > dts.minZoom && tsi.hasOverzoomedTiles && !tsi.hasLoadingTiles) {
+                zoom--;
+                tsi = dts.getTileSetInfo(zoom);
+            }
+            ts = dts.getTileSet(zoom);
+        } else if (autoZoom) {
+            setZoomLevel(zoom);
+        }
+
+        // Too many tiles... refuse to download
+        if (!ts.tooLarge()) {
+            //Main.debug("size: " + ts.size() + " spanned: " + ts.tilesSpanned());
+            ts.loadAllTiles(false);
+        }
+
+        if (displayZoomLevel != zoom) {
+            ts = dts.getTileSet(displayZoomLevel);
+        }
+
+        g.setColor(Color.DARK_GRAY);
+
+        List<Tile> missedTiles = this.paintTileImages(g, ts, displayZoomLevel, null);
+        int[] otherZooms = {-1, 1, -2, 2, -3, -4, -5};
+        for (int zoomOffset : otherZooms) {
+            if (!autoZoom) {
+                break;
+            }
+            int newzoom = displayZoomLevel + zoomOffset;
+            if (newzoom < getMinZoomLvl() || newzoom > getMaxZoomLvl()) {
+                continue;
+            }
+            if (missedTiles.isEmpty()) {
+                break;
+            }
+            List<Tile> newlyMissedTiles = new LinkedList<>();
+            for (Tile missed : missedTiles) {
+                if ("no-tile".equals(missed.getValue("tile-info")) && zoomOffset > 0) {
+                    // Don't try to paint from higher zoom levels when tile is overzoomed
+                    newlyMissedTiles.add(missed);
+                    continue;
+                }
+                Tile t2 = tempCornerTile(missed);
+                LatLon topLeft2  = new LatLon(tileSource.tileXYToLatLon(missed));
+                LatLon botRight2 = new LatLon(tileSource.tileXYToLatLon(t2));
+                TileSet ts2 = new TileSet(topLeft2, botRight2, newzoom);
+                // Instantiating large TileSets is expensive.  If there
+                // are no loaded tiles, don't bother even trying.
+                if (ts2.allLoadedTiles().isEmpty()) {
+                    newlyMissedTiles.add(missed);
+                    continue;
+                }
+                if (ts2.tooLarge()) {
+                    continue;
+                }
+                newlyMissedTiles.addAll(this.paintTileImages(g, ts2, newzoom, missed));
+            }
+            missedTiles = newlyMissedTiles;
+        }
+        if (Main.isDebugEnabled() && !missedTiles.isEmpty()) {
+            Main.debug("still missed "+missedTiles.size()+" in the end");
+        }
+        g.setColor(Color.red);
+        g.setFont(InfoFont);
+
+        // The current zoom tileset should have all of its tiles due to the loadAllTiles(), unless it to tooLarge()
+        for (Tile t : ts.allExistingTiles()) {
+            this.paintTileText(ts, t, g, mv, displayZoomLevel, t);
+        }
+
+        attribution.paintAttribution(g, mv.getWidth(), mv.getHeight(), getShiftedCoord(topLeft), getShiftedCoord(botRight),
+                displayZoomLevel, this);
+
+        //g.drawString("currentZoomLevel=" + currentZoomLevel, 120, 120);
+        g.setColor(Color.lightGray);
+
+        if (ts.insane()) {
+            myDrawString(g, tr("zoom in to load any tiles"), 120, 120);
+        } else if (ts.tooLarge()) {
+            myDrawString(g, tr("zoom in to load more tiles"), 120, 120);
+        } else if (!autoZoom && ts.tooSmall()) {
+            myDrawString(g, tr("increase zoom level to see more detail"), 120, 120);
+        }
+
+        if (noTilesAtZoom) {
+            myDrawString(g, tr("No tiles at this zoom level"), 120, 120);
+        }
+        if (Main.isDebugEnabled()) {
+            myDrawString(g, tr("Current zoom: {0}", currentZoomLevel), 50, 140);
+            myDrawString(g, tr("Display zoom: {0}", displayZoomLevel), 50, 155);
+            myDrawString(g, tr("Pixel scale: {0}", getScaleFactor(currentZoomLevel)), 50, 170);
+            myDrawString(g, tr("Best zoom: {0}", getBestZoom()), 50, 185);
+            if (tileLoader instanceof TMSCachedTileLoader) {
+                TMSCachedTileLoader cachedTileLoader = (TMSCachedTileLoader) tileLoader;
+                int offset = 185;
+                for (String part: cachedTileLoader.getStats().split("\n")) {
+                    myDrawString(g, tr("Cache stats: {0}", part), 50, offset += 15);
+                }
+
+            }
+        }
+    }
+
+    /**
+     * This isn't very efficient, but it is only used when the
+     * user right-clicks on the map.
+     */
+    private Tile getTileForPixelpos(int px, int py) {
+        if (Main.isDebugEnabled()) {
+            Main.debug("getTileForPixelpos("+px+", "+py+")");
+        }
+        MapView mv = Main.map.mapView;
+        Point clicked = new Point(px, py);
+        EastNorth topLeft = mv.getEastNorth(0, 0);
+        EastNorth botRight = mv.getEastNorth(mv.getWidth(), mv.getHeight());
+        int z = currentZoomLevel;
+        TileSet ts = new TileSet(topLeft, botRight, z);
+
+        if (!ts.tooLarge()) {
+            ts.loadAllTiles(false); // make sure there are tile objects for all tiles
+        }
+        Tile clickedTile = null;
+        for (Tile t1 : ts.allExistingTiles()) {
+            Tile t2 = tempCornerTile(t1);
+            Rectangle r = new Rectangle(pixelPos(t1));
+            r.add(pixelPos(t2));
+            if (Main.isDebugEnabled()) {
+                Main.debug("r: " + r + " clicked: " + clicked);
+            }
+            if (!r.contains(clicked)) {
+                continue;
+            }
+            clickedTile  = t1;
+            break;
+        }
+        if (clickedTile == null)
+            return null;
+        /*Main.debug("Clicked on tile: " + clickedTile.getXtile() + " " + clickedTile.getYtile() +
+                " currentZoomLevel: " + currentZoomLevel);*/
+        return clickedTile;
+    }
+
+    @Override
+    public Action[] getMenuEntries() {
+        return new Action[] {
+                LayerListDialog.getInstance().createActivateLayerAction(this),
+                LayerListDialog.getInstance().createShowHideLayerAction(),
+                LayerListDialog.getInstance().createDeleteLayerAction(),
+                SeparatorLayerAction.INSTANCE,
+                // color,
+                new OffsetAction(),
+                new RenameLayerAction(this.getAssociatedFile(), this),
+                SeparatorLayerAction.INSTANCE,
+                new AutoLoadTilesAction(),
+                new AutoZoomAction(),
+                new ZoomToBestAction(),
+                new ZoomToNativeLevelAction(),
+                new LoadErroneusTilesAction(),
+                new LoadAllTilesAction(),
+                new LayerListPopup.InfoAction(this)
+        };
+    }
+
+    @Override
+    public String getToolTipText() {
+        if (autoLoad) {
+            return tr("{0} ({1}), automatically downloading in zoom {2}", this.getClass().getSimpleName(), getName(), currentZoomLevel);
+        } else {
+            return tr("{0} ({1}), downloading in zoom {2}", this.getClass().getSimpleName(), getName(), currentZoomLevel);
+        }
+    }
+
+    @Override
+    public void visitBoundingBox(BoundingXYVisitor v) {
+    }
+
+    @Override
+    public boolean isChanged() {
+        return needRedraw;
+    }
+
+    /**
+     * Task responsible for precaching imagery along the gpx track
+     *
+     */
+    public class PrecacheTask implements TileLoaderListener {
+        private final ProgressMonitor progressMonitor;
+        private int totalCount;
+        private AtomicInteger processedCount = new AtomicInteger(0);
+        private final TileLoader tileLoader;
+
+        /**
+         * @param progressMonitor that will be notified about progess of the task
+         */
+        public PrecacheTask(ProgressMonitor progressMonitor) {
+            this.progressMonitor = progressMonitor;
+            this.tileLoader = getTileLoaderFactory().makeTileLoader(this, getHeaders(tileSource));
+            if (this.tileLoader instanceof TMSCachedTileLoader) {
+                ((TMSCachedTileLoader) this.tileLoader).setDownloadExecutor(
+                        TMSCachedTileLoader.getNewThreadPoolExecutor("Precache downloader"));
+            }
+
+        }
+
+        /**
+         * @return true, if all is done
+         */
+        public boolean isFinished() {
+            return processedCount.get() >= totalCount;
+        }
+
+        /**
+         * @return total number of tiles to download
+         */
+        public int getTotalCount() {
+            return totalCount;
+        }
+
+        /**
+         * cancel the task
+         */
+        public void cancel() {
+            if (tileLoader instanceof TMSCachedTileLoader) {
+                ((TMSCachedTileLoader) tileLoader).cancelOutstandingTasks();
+            }
+        }
+
+        @Override
+        public void tileLoadingFinished(Tile tile, boolean success) {
+            if (success) {
+                int processed = this.processedCount.incrementAndGet();
+                this.progressMonitor.worked(1);
+                this.progressMonitor.setCustomText(tr("Downloaded {0}/{1} tiles", processed, totalCount));
+            }
+        }
+
+        /**
+         * @return tile loader that is used to load the tiles
+         */
+        public TileLoader getTileLoader() {
+            return tileLoader;
+        }
+    }
+
+    /**
+     * Calculates tiles, that needs to be downloaded to cache, gets a current tile loader and creates a task to download
+     * all of the tiles. Buffer contains at least one tile.
+     *
+     * To prevent accidental clear of the queue, new download executor is created with separate queue
+     *
+     * @param precacheTask Task responsible for precaching imagery
+     * @param points lat/lon coordinates to download
+     * @param bufferX how many units in current Coordinate Reference System to cover in X axis in both sides
+     * @param bufferY how many units in current Coordinate Reference System to cover in Y axis in both sides
+     */
+    public void downloadAreaToCache(final PrecacheTask precacheTask, List<LatLon> points, double bufferX, double bufferY) {
+        final Set<Tile> requestedTiles = new ConcurrentSkipListSet<>(new Comparator<Tile>() {
+            public int compare(Tile o1, Tile o2) {
+                return String.CASE_INSENSITIVE_ORDER.compare(o1.getKey(), o2.getKey());
+            }
+        });
+        for (LatLon point: points) {
+
+            TileXY minTile = tileSource.latLonToTileXY(point.lat() - bufferY, point.lon() - bufferX, currentZoomLevel);
+            TileXY curTile = tileSource.latLonToTileXY(point.toCoordinate(), currentZoomLevel);
+            TileXY maxTile = tileSource.latLonToTileXY(point.lat() + bufferY, point.lon() + bufferX, currentZoomLevel);
+
+            // take at least one tile of buffer
+            int minY = Math.min(curTile.getYIndex() - 1, minTile.getYIndex());
+            int maxY = Math.max(curTile.getYIndex() + 1, maxTile.getYIndex());
+            int minX = Math.min(curTile.getXIndex() - 1, minTile.getXIndex());
+            int maxX = Math.min(curTile.getXIndex() + 1, minTile.getXIndex());
+
+            for (int x = minX; x <= maxX; x++) {
+                for (int y = minY; y <= maxY; y++) {
+                    requestedTiles.add(new Tile(tileSource, x, y, currentZoomLevel));
+                }
+            }
+        }
+
+        precacheTask.totalCount = requestedTiles.size();
+        precacheTask.progressMonitor.setTicksCount(requestedTiles.size());
+
+        TileLoader loader = precacheTask.getTileLoader();
+        for (Tile t: requestedTiles) {
+            loader.createTileLoaderJob(t).submit();
+        }
+    }
+
+    @Override
+    public boolean isSavable() {
+        return true; // With WMSLayerExporter
+    }
+
+    @Override
+    public File createAndOpenSaveFileChooser() {
+        return SaveActionBase.createAndOpenSaveFileChooser(tr("Save WMS file"), WMSLayerImporter.FILE_FILTER);
+    }
+}
diff --git a/src/org/openstreetmap/josm/gui/layer/AlignImageryPanel.java b/src/org/openstreetmap/josm/gui/layer/AlignImageryPanel.java
new file mode 100644
index 0000000..2fb1c44
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/layer/AlignImageryPanel.java
@@ -0,0 +1,79 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.layer;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.GridBagLayout;
+import java.awt.Toolkit;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.border.CompoundBorder;
+import javax.swing.border.EmptyBorder;
+import javax.swing.border.EtchedBorder;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.gui.widgets.UrlLabel;
+import org.openstreetmap.josm.tools.GBC;
+import org.openstreetmap.josm.tools.ImageProvider;
+
+/**
+ * The panel to nag a user ONCE that he/she has to align imagery.
+ *
+ * @author zverik
+ */
+public class AlignImageryPanel extends JPanel {
+    private static final String PREF = "imagery.offsetnagging";
+
+    public AlignImageryPanel(boolean oneLine) {
+        Font font = getFont().deriveFont(Font.PLAIN, 14.0f);
+        JLabel nagLabel = new JLabel(tr("Aerial imagery might be misaligned. Please check its offset using GPS tracks!"));
+        UrlLabel detailsList = new UrlLabel(tr("http://wiki.openstreetmap.org/wiki/Using_Imagery"), tr("Details..."));
+        nagLabel.setLabelFor(detailsList);
+        nagLabel.setFont(font);
+        detailsList.setFont(font);
+
+        JButton closeButton = new JButton(ImageProvider.get("misc", "black_x"));
+        closeButton.setContentAreaFilled(false);
+        closeButton.setRolloverEnabled(true);
+        closeButton.setBorderPainted(false);
+        closeButton.setToolTipText(tr("Hide this message and never show it again"));
+        closeButton.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                if (Main.isDisplayingMapView()) {
+                    Main.map.removeTopPanel(AlignImageryPanel.class);
+                    Main.pref.put(PREF, false);
+                }
+            }
+        });
+
+        setLayout(new GridBagLayout());
+        if (!oneLine) { // tune for small screens
+            add(nagLabel, GBC.std(1, 1).fill());
+            add(detailsList, GBC.std(1, 2).fill());
+            add(closeButton, GBC.std(2, 1).span(1, 2).anchor(GBC.EAST));
+        } else {
+            add(nagLabel, GBC.std(1, 1).fill());
+            add(detailsList, GBC.std(2, 1).fill());
+            add(closeButton, GBC.std(3, 1).anchor(GBC.EAST));
+        }
+        setBorder(new CompoundBorder(new EtchedBorder(EtchedBorder.LOWERED), new EmptyBorder(12, 12, 12, 12)));
+        setBackground(new Color(224, 236, 249));
+    }
+
+    public static void addNagPanelIfNeeded() {
+        if (Main.isDisplayingMapView() && !Main.pref.getBoolean("expert") && Main.pref.getBoolean(PREF, true)) {
+            if (Main.map.getTopPanel(AlignImageryPanel.class) == null) {
+                double w = Toolkit.getDefaultToolkit().getScreenSize().getWidth();
+                AlignImageryPanel p = new AlignImageryPanel(w > 1300);
+                Main.map.addTopPanel(p);
+            }
+        }
+    }
+}
diff --git a/src/org/openstreetmap/josm/gui/layer/CustomizeColor.java b/src/org/openstreetmap/josm/gui/layer/CustomizeColor.java
index b2e0e43..2fa5bc3 100644
--- a/src/org/openstreetmap/josm/gui/layer/CustomizeColor.java
+++ b/src/org/openstreetmap/josm/gui/layer/CustomizeColor.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.layer;
 
 import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
@@ -42,8 +42,8 @@ public class CustomizeColor extends AbstractAction implements LayerAction, Multi
 
     @Override
     public boolean supportLayers(List<Layer> layers) {
-        for(Layer layer: layers) {
-            if(layer.getColor(false) == null)
+        for (Layer layer: layers) {
+            if (layer.getColor(false) == null)
                 return false;
         }
         return true;
@@ -61,7 +61,8 @@ public class CustomizeColor extends AbstractAction implements LayerAction, Multi
 
     @Override
     public void actionPerformed(ActionEvent e) {
-        Color cl=layers.get(0).getColor(false); if (cl==null) cl=Color.gray;
+        Color cl = layers.get(0).getColor(false);
+        if (cl == null) cl = Color.gray;
         JColorChooser c = new JColorChooser(cl);
         Object[] options = new Object[]{tr("OK"), tr("Cancel"), tr("Default")};
         int answer = JOptionPane.showOptionDialog(
@@ -76,14 +77,16 @@ public class CustomizeColor extends AbstractAction implements LayerAction, Multi
         );
         switch (answer) {
         case 0:
-            for(Layer layer : layers)
+            for (Layer layer : layers) {
                 Main.pref.putColor("layer "+layer.getName(), c.getColor());
+            }
             break;
         case 1:
             return;
         case 2:
-            for(Layer layer : layers)
+            for (Layer layer : layers) {
                 Main.pref.putColor("layer "+layer.getName(), null);
+            }
             break;
         }
         Main.map.repaint();
diff --git a/src/org/openstreetmap/josm/gui/layer/GpxLayer.java b/src/org/openstreetmap/josm/gui/layer/GpxLayer.java
index b42f7a7..25ca961 100644
--- a/src/org/openstreetmap/josm/gui/layer/GpxLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/GpxLayer.java
@@ -1,5 +1,4 @@
-// License: GPL. See LICENSE file for details.
-
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.layer;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -26,6 +25,7 @@ import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.RenameLayerAction;
 import org.openstreetmap.josm.actions.SaveActionBase;
 import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.SystemOfMeasurement;
 import org.openstreetmap.josm.data.gpx.GpxConstants;
 import org.openstreetmap.josm.data.gpx.GpxData;
 import org.openstreetmap.josm.data.gpx.GpxTrack;
@@ -33,7 +33,6 @@ import org.openstreetmap.josm.data.gpx.WayPoint;
 import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
 import org.openstreetmap.josm.data.projection.Projection;
 import org.openstreetmap.josm.gui.MapView;
-import org.openstreetmap.josm.gui.NavigatableComponent;
 import org.openstreetmap.josm.gui.dialogs.LayerListDialog;
 import org.openstreetmap.josm.gui.dialogs.LayerListPopup;
 import org.openstreetmap.josm.gui.layer.gpx.ChooseTrackVisibilityAction;
@@ -120,7 +119,7 @@ public class GpxLayer extends Layer {
 
     @Override
     public Object getInfoComponent() {
-        StringBuilder info = new StringBuilder();
+        StringBuilder info = new StringBuilder(48);
 
         if (data.attr.containsKey("name")) {
             info.append(tr("Name: {0}", data.get(GpxConstants.META_NAME))).append("<br>");
@@ -131,12 +130,12 @@ public class GpxLayer extends Layer {
         }
 
         if (!data.tracks.isEmpty()) {
-            info.append("<table><thead align='center'><tr><td colspan='5'>"
-                    + trn("{0} track", "{0} tracks", data.tracks.size(), data.tracks.size())
-                    + "</td></tr><tr align='center'><td>" + tr("Name") + "</td><td>"
-                    + tr("Description") + "</td><td>" + tr("Timespan")
-                    + "</td><td>" + tr("Length") + "</td><td>" + tr("URL")
-                    + "</td></tr></thead>");
+            info.append("<table><thead align='center'><tr><td colspan='5'>")
+                .append(trn("{0} track", "{0} tracks", data.tracks.size(), data.tracks.size()))
+                .append("</td></tr><tr align='center'><td>").append(tr("Name")).append("</td><td>")
+                .append(tr("Description")).append("</td><td>").append(tr("Timespan"))
+                .append("</td><td>").append(tr("Length")).append("</td><td>").append(tr("URL"))
+                .append("</td></tr></thead>");
 
             for (GpxTrack trk : data.tracks) {
                 info.append("<tr><td>");
@@ -145,26 +144,23 @@ public class GpxLayer extends Layer {
                 }
                 info.append("</td><td>");
                 if (trk.getAttributes().containsKey(GpxConstants.GPX_DESC)) {
-                    info.append(" ").append(trk.get(GpxConstants.GPX_DESC));
+                    info.append(' ').append(trk.get(GpxConstants.GPX_DESC));
                 }
                 info.append("</td><td>");
                 info.append(getTimespanForTrack(trk));
                 info.append("</td><td>");
-                info.append(NavigatableComponent.getSystemOfMeasurement().getDistText(trk.length()));
+                info.append(SystemOfMeasurement.getSystemOfMeasurement().getDistText(trk.length()));
                 info.append("</td><td>");
                 if (trk.getAttributes().containsKey("url")) {
                     info.append(trk.get("url"));
                 }
                 info.append("</td></tr>");
             }
-
             info.append("</table><br><br>");
-
         }
 
-        info.append(tr("Length: {0}", NavigatableComponent.getSystemOfMeasurement().getDistText(data.length()))).append("<br>");
-
-        info.append(trn("{0} route, ", "{0} routes, ", data.routes.size(), data.routes.size())).append(
+        info.append(tr("Length: {0}", SystemOfMeasurement.getSystemOfMeasurement().getDistText(data.length()))).append("<br>")
+            .append(trn("{0} route, ", "{0} routes, ", data.routes.size(), data.routes.size())).append(
                 trn("{0} waypoint", "{0} waypoints", data.waypoints.size(), data.waypoints.size())).append("<br>");
 
         final JScrollPane sp = new JScrollPane(new HtmlPanel(info.toString()));
@@ -212,7 +208,7 @@ public class GpxLayer extends Layer {
 
     @Override
     public String getToolTipText() {
-        StringBuilder info = new StringBuilder().append("<html>");
+        StringBuilder info = new StringBuilder(48).append("<html>");
 
         if (data.attr.containsKey(GpxConstants.META_NAME)) {
             info.append(tr("Name: {0}", data.get(GpxConstants.META_NAME))).append("<br>");
@@ -222,14 +218,12 @@ public class GpxLayer extends Layer {
             info.append(tr("Description: {0}", data.get(GpxConstants.META_DESC))).append("<br>");
         }
 
-        info.append(trn("{0} track, ", "{0} tracks, ", data.tracks.size(), data.tracks.size()));
-        info.append(trn("{0} route, ", "{0} routes, ", data.routes.size(), data.routes.size()));
-        info.append(trn("{0} waypoint", "{0} waypoints", data.waypoints.size(), data.waypoints.size())).append("<br>");
-
-        info.append(tr("Length: {0}", NavigatableComponent.getSystemOfMeasurement().getDistText(data.length())));
-        info.append("<br>");
-
-        return info.append("</html>").toString();
+        info.append(trn("{0} track, ", "{0} tracks, ", data.tracks.size(), data.tracks.size()))
+            .append(trn("{0} route, ", "{0} routes, ", data.routes.size(), data.routes.size()))
+            .append(trn("{0} waypoint", "{0} waypoints", data.waypoints.size(), data.waypoints.size())).append("<br>")
+            .append(tr("Length: {0}", SystemOfMeasurement.getSystemOfMeasurement().getDistText(data.length())))
+            .append("<br></html>");
+        return info.toString();
     }
 
     @Override
@@ -260,9 +254,9 @@ public class GpxLayer extends Layer {
         for (GpxTrack trk : data.tracks) {
             Date[] t = GpxData.getMinMaxTimeForTrack(trk);
 
-            if (t==null) continue;
+            if (t == null) continue;
             long tm = t[1].getTime();
-            trackVisibility[i]= (tm==0 && showWithoutDate) || (from <= tm && tm <= to);
+            trackVisibility[i] = (tm == 0 && showWithoutDate) || (from <= tm && tm <= to);
             i++;
         }
     }
diff --git a/src/org/openstreetmap/josm/gui/layer/ImageProcessor.java b/src/org/openstreetmap/josm/gui/layer/ImageProcessor.java
new file mode 100644
index 0000000..3025ae4
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/layer/ImageProcessor.java
@@ -0,0 +1,24 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.layer;
+
+import java.awt.image.BufferedImage;
+
+/**
+ * Processor that modifies images (sharpen, brightness, etc.).
+ * This interface is used by {@link ImageryLayer}s to filter the
+ * displayed images (implemented in plugins).
+ *
+ * @author Nipel-Crumple
+ */
+public interface ImageProcessor {
+
+    /**
+     * This method should process given image according to image processors
+     * which is contained in the {@link Layer}
+     *
+     * @param image that should be processed
+     *
+     * @return processed image
+     */
+    BufferedImage process(BufferedImage image);
+}
diff --git a/src/org/openstreetmap/josm/gui/layer/ImageryLayer.java b/src/org/openstreetmap/josm/gui/layer/ImageryLayer.java
index a543a39..bd15a39 100644
--- a/src/org/openstreetmap/josm/gui/layer/ImageryLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/ImageryLayer.java
@@ -19,8 +19,11 @@ import java.awt.image.BufferedImage;
 import java.awt.image.BufferedImageOp;
 import java.awt.image.ConvolveOp;
 import java.awt.image.Kernel;
+import java.awt.image.LookupOp;
+import java.awt.image.ShortLookupTable;
 import java.text.AttributedCharacterIterator;
 import java.text.AttributedString;
+import java.util.ArrayList;
 import java.util.Hashtable;
 import java.util.List;
 import java.util.Map;
@@ -40,7 +43,6 @@ import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.ImageryAdjustAction;
 import org.openstreetmap.josm.data.ProjectionBounds;
 import org.openstreetmap.josm.data.imagery.ImageryInfo;
-import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryType;
 import org.openstreetmap.josm.data.imagery.OffsetBookmark;
 import org.openstreetmap.josm.data.preferences.ColorProperty;
 import org.openstreetmap.josm.data.preferences.IntegerProperty;
@@ -48,6 +50,7 @@ import org.openstreetmap.josm.gui.MenuScroller;
 import org.openstreetmap.josm.gui.widgets.UrlLabel;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.Utils;
 
 public abstract class ImageryLayer extends Layer {
 
@@ -55,13 +58,15 @@ public abstract class ImageryLayer extends Layer {
     public static final IntegerProperty PROP_FADE_AMOUNT = new IntegerProperty("imagery.fade_amount", 0);
     public static final IntegerProperty PROP_SHARPEN_LEVEL = new IntegerProperty("imagery.sharpen_level", 0);
 
+    private final List<ImageProcessor> imageProcessors = new ArrayList<>();
+
     public static Color getFadeColor() {
         return PROP_FADE_COLOR.get();
     }
 
     public static Color getFadeColorWithAlpha() {
         Color c = PROP_FADE_COLOR.get();
-        return new Color(c.getRed(),c.getGreen(),c.getBlue(),PROP_FADE_AMOUNT.get()*255/100);
+        return new Color(c.getRed(), c.getGreen(), c.getBlue(), PROP_FADE_AMOUNT.get()*255/100);
     }
 
     protected final ImageryInfo info;
@@ -71,12 +76,13 @@ public abstract class ImageryLayer extends Layer {
     protected double dx = 0.0;
     protected double dy = 0.0;
 
-    protected int sharpenLevel;
+    protected GammaImageProcessor gammaImageProcessor = new GammaImageProcessor();
 
     private final ImageryAdjustAction adjustAction = new ImageryAdjustAction(this);
 
     /**
      * Constructs a new {@code ImageryLayer}.
+     * @param info imagery info
      */
     public ImageryLayer(ImageryInfo info) {
         super(info.getName());
@@ -88,7 +94,8 @@ public abstract class ImageryLayer extends Layer {
         if (icon == null) {
             icon = ImageProvider.get("imagery_small");
         }
-        this.sharpenLevel = PROP_SHARPEN_LEVEL.get();
+        addImageProcessor(createSharpener(PROP_SHARPEN_LEVEL.get()));
+        addImageProcessor(gammaImageProcessor);
     }
 
     public double getPPD() {
@@ -142,7 +149,7 @@ public abstract class ImageryLayer extends Layer {
                 panel.add(new JLabel(tr("URL: ")), GBC.std().insets(0, 5, 2, 0));
                 panel.add(new UrlLabel(url), GBC.eol().insets(2, 5, 10, 0));
             }
-            if (dx != 0.0 || dy != 0.0) {
+            if (dx != 0 || dy != 0) {
                 panel.add(new JLabel(tr("Offset: ") + dx + ";" + dy), GBC.eol().insets(0, 5, 10, 0));
             }
         }
@@ -150,15 +157,24 @@ public abstract class ImageryLayer extends Layer {
     }
 
     public static ImageryLayer create(ImageryInfo info) {
-        if (info.getImageryType() == ImageryType.WMS || info.getImageryType() == ImageryType.HTML)
+        switch(info.getImageryType()) {
+        case WMS:
+        case HTML:
             return new WMSLayer(info);
-        else if (info.getImageryType() == ImageryType.TMS || info.getImageryType() == ImageryType.BING || info.getImageryType() == ImageryType.SCANEX)
+        case WMTS:
+            return new WMTSLayer(info);
+        case TMS:
+        case BING:
+        case SCANEX:
             return new TMSLayer(info);
-        else throw new AssertionError();
+        default:
+            throw new AssertionError(tr("Unsupported imagery type: {0}", info.getImageryType()));
+        }
     }
 
     class ApplyOffsetAction extends AbstractAction {
         private transient OffsetBookmark b;
+
         ApplyOffsetAction(OffsetBookmark b) {
             super(b.name);
             this.b = b;
@@ -191,7 +207,7 @@ public abstract class ImageryLayer extends Layer {
     public JMenuItem getOffsetMenuItem() {
         JMenu subMenu = new JMenu(trc("layer", "Offset"));
         subMenu.setIcon(ImageProvider.get("mapmode", "adjustimg"));
-        return (JMenuItem)getOffsetMenuItem(subMenu);
+        return (JMenuItem) getOffsetMenuItem(subMenu);
     }
 
     public JComponent getOffsetMenuItem(JComponent subMenu) {
@@ -207,7 +223,7 @@ public abstract class ImageryLayer extends Layer {
                 continue;
             }
             JCheckBoxMenuItem item = new JCheckBoxMenuItem(new ApplyOffsetAction(b));
-            if (b.dx == dx && b.dy == dy) {
+            if (Utils.equalsEpsilon(b.dx, dx) && Utils.equalsEpsilon(b.dy, dy)) {
                 item.setSelected(true);
             }
             subMenu.add(item);
@@ -218,26 +234,144 @@ public abstract class ImageryLayer extends Layer {
             if (subMenu instanceof JMenu) {
                 MenuScroller.setScrollerFor((JMenu) subMenu);
             } else if (subMenu instanceof JPopupMenu) {
-                MenuScroller.setScrollerFor((JPopupMenu)subMenu);
+                MenuScroller.setScrollerFor((JPopupMenu) subMenu);
             }
         }
         return hasBookmarks ? subMenu : adjustMenuItem;
     }
 
-    public BufferedImage sharpenImage(BufferedImage img) {
-        if (sharpenLevel <= 0) return img;
-        int width = img.getWidth(null);
-        int height = img.getHeight(null);
-        BufferedImage tmp = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
-        tmp.getGraphics().drawImage(img, 0, 0, null);
-        Kernel kernel;
+    public ImageProcessor createSharpener(int sharpenLevel) {
+        final Kernel kernel;
         if (sharpenLevel == 1) {
-            kernel = new Kernel(3, 3, new float[] { -0.25f, -0.5f, -0.25f, -0.5f, 4, -0.5f, -0.25f, -0.5f, -0.25f});
+            kernel = new Kernel(3, 3, new float[]{-0.25f, -0.5f, -0.25f, -0.5f, 4, -0.5f, -0.25f, -0.5f, -0.25f});
+        } else if (sharpenLevel == 2) {
+            kernel = new Kernel(3, 3, new float[]{-0.5f, -1, -0.5f, -1, 7, -1, -0.5f, -1, -0.5f});
         } else {
-            kernel = new Kernel(3, 3, new float[] { -0.5f, -1, -0.5f, -1, 7, -1, -0.5f, -1, -0.5f});
+            return null;
         }
         BufferedImageOp op = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null);
-        return op.filter(tmp, null);
+        return createImageProcessor(op, false);
+    }
+
+    /**
+     * An image processor which adjusts the gamma value of an image.
+     */
+    public static class GammaImageProcessor implements ImageProcessor {
+        private double gamma = 1;
+        final short[] gammaChange = new short[256];
+        private LookupOp op3 = new LookupOp(new ShortLookupTable(0, new short[][]{gammaChange, gammaChange, gammaChange}), null);
+        private LookupOp op4 = new LookupOp(new ShortLookupTable(0, new short[][]{gammaChange, gammaChange, gammaChange, gammaChange}), null);
+
+        /**
+         * Returns the currently set gamma value.
+         */
+        public double getGamma() {
+            return gamma;
+        }
+
+        /**
+         * Sets a new gamma value, {@code 1} stands for no correction.
+         */
+        public void setGamma(double gamma) {
+            this.gamma = gamma;
+            for (int i = 0; i < 256; i++) {
+                gammaChange[i] = (short) (255 * Math.pow(i / 255., gamma));
+            }
+        }
+
+        private LookupOp getOp(int bands) {
+            if (gamma == 1) {
+                return null;
+            } else if (bands == 3) {
+                return op3;
+            } else if (bands == 4) {
+                return op4;
+            } else {
+                return null;
+            }
+        }
+
+        @Override
+        public BufferedImage process(BufferedImage image) {
+            final LookupOp op = getOp(image.getRaster().getNumBands());
+            final BufferedImage to = new BufferedImage(image.getWidth(), image.getHeight(), image.getType());
+            return op == null ? image : op.filter(image, to);
+        }
+    }
+
+    /**
+     * Returns the currently set gamma value.
+     */
+    public double getGamma() {
+        return gammaImageProcessor.getGamma();
+    }
+
+    /**
+     * Sets a new gamma value, {@code 1} stands for no correction.
+     */
+    public void setGamma(double gamma) {
+        gammaImageProcessor.setGamma(gamma);
+    }
+
+    /**
+     * This method adds the {@link ImageProcessor} to this Layer if it is not {@code null}.
+     *
+     * @param processor that processes the image
+     *
+     * @return true if processor was added, false otherwise
+     */
+    public boolean addImageProcessor(ImageProcessor processor) {
+        return processor != null && imageProcessors.add(processor);
+    }
+
+    /**
+     * This method removes given {@link ImageProcessor} from this layer
+     *
+     * @param processor which is needed to be removed
+     *
+     * @return true if processor was removed
+     */
+    public boolean removeImageProcessor(ImageProcessor processor) {
+        return imageProcessors.remove(processor);
+    }
+
+    /**
+     * Wraps a {@link BufferedImageOp} to be used as {@link ImageProcessor}.
+     * @param op the {@link BufferedImageOp}
+     * @param inPlace true to apply filter in place, i.e., not create a new {@link BufferedImage} for the result
+     *                (the {@code op} needs to support this!)
+     * @return the {@link ImageProcessor} wrapper
+     */
+    public static ImageProcessor createImageProcessor(final BufferedImageOp op, final boolean inPlace) {
+        return new ImageProcessor() {
+            @Override
+            public BufferedImage process(BufferedImage image) {
+                return op.filter(image, inPlace ? image : null);
+            }
+        };
+    }
+
+    /**
+     * This method gets all {@link ImageProcessor}s of the layer
+     *
+     * @return list of image processors without removed one
+     */
+    public List<ImageProcessor> getImageProcessors() {
+        return imageProcessors;
+    }
+
+    /**
+     * Applies all the chosen {@link ImageProcessor}s to the image
+     *
+     * @param img - image which should be changed
+     *
+     * @return the new changed image
+     */
+    public BufferedImage applyImageProcessors(BufferedImage img) {
+        for (ImageProcessor processor : imageProcessors) {
+            img = processor.process(img);
+        }
+        return img;
     }
 
     /**
@@ -258,7 +392,7 @@ public abstract class ImageryLayer extends Layer {
             float drawPosY = 2.5f*g.getFontMetrics().getHeight()+10;
             if (!message.contains(" ")) {
                 g.setFont(g.getFont().deriveFont(Font.PLAIN).deriveFont(18.0f));
-                g.drawString(message, 5, (int)drawPosY);
+                g.drawString(message, 5, (int) drawPosY);
             } else {
                 // Draw message on several lines
                 Map<TextAttribute, Object> map = new Hashtable<TextAttribute, Object>();
diff --git a/src/org/openstreetmap/josm/gui/layer/JumpToMarkerActions.java b/src/org/openstreetmap/josm/gui/layer/JumpToMarkerActions.java
index 678a6d7..59a3290 100644
--- a/src/org/openstreetmap/josm/gui/layer/JumpToMarkerActions.java
+++ b/src/org/openstreetmap/josm/gui/layer/JumpToMarkerActions.java
@@ -19,6 +19,7 @@ public final class JumpToMarkerActions {
 
     public interface JumpToMarkerLayer {
         void jumpToNextMarker();
+
         void jumpToPreviousMarker();
     }
 
@@ -109,7 +110,7 @@ public final class JumpToMarkerActions {
 
         @Override
         protected void execute(Layer l) {
-            ((JumpToMarkerLayer)l).jumpToNextMarker();
+            ((JumpToMarkerLayer) l).jumpToNextMarker();
             setLastLayer(l);
         }
     }
diff --git a/src/org/openstreetmap/josm/gui/layer/Layer.java b/src/org/openstreetmap/josm/gui/layer/Layer.java
index e0b813f..e16587b 100644
--- a/src/org/openstreetmap/josm/gui/layer/Layer.java
+++ b/src/org/openstreetmap/josm/gui/layer/Layer.java
@@ -1,5 +1,4 @@
-// License: GPL. See LICENSE file for details.
-
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.layer;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -31,6 +30,7 @@ import org.openstreetmap.josm.data.projection.ProjectionChangeListener;
 import org.openstreetmap.josm.gui.MapView;
 import org.openstreetmap.josm.tools.Destroyable;
 import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
  * A layer encapsulates the gui component of one dataset and its representation.
@@ -51,6 +51,7 @@ public abstract class Layer implements Destroyable, MapViewPaintable, Projection
 
     public interface LayerAction {
         boolean supportLayers(List<Layer> layers);
+
         Component createMenuComponent();
     }
 
@@ -64,14 +65,17 @@ public abstract class Layer implements Destroyable, MapViewPaintable, Projection
      */
     public static class SeparatorLayerAction extends AbstractAction implements LayerAction {
         public static final SeparatorLayerAction INSTANCE = new SeparatorLayerAction();
+
         @Override
         public void actionPerformed(ActionEvent e) {
             throw new UnsupportedOperationException();
         }
+
         @Override
         public Component createMenuComponent() {
             return new JSeparator();
         }
+
         @Override
         public boolean supportLayers(List<Layer> layers) {
             return false;
@@ -81,6 +85,7 @@ public abstract class Layer implements Destroyable, MapViewPaintable, Projection
     public static final String VISIBLE_PROP = Layer.class.getName() + ".visible";
     public static final String OPACITY_PROP = Layer.class.getName() + ".opacity";
     public static final String NAME_PROP = Layer.class.getName() + ".name";
+    public static final String FILTER_STATE_PROP = Layer.class.getName() + ".filterstate";
 
     public static final int ICON_SIZE = 16;
 
@@ -203,18 +208,24 @@ public abstract class Layer implements Destroyable, MapViewPaintable, Projection
     public abstract Action[] getMenuEntries();
 
     /**
-     * Called, when the layer is removed from the mapview and is going to be
-     * destroyed.
+     * Called, when the layer is removed from the mapview and is going to be destroyed.
      *
      * This is because the Layer constructor can not add itself safely as listener
      * to the layerlist dialog, because there may be no such dialog yet (loaded
      * via command line parameter).
      */
     @Override
-    public void destroy() {}
+    public void destroy() {
+        // Override in subclasses if needed
+    }
 
-    public File getAssociatedFile() { return associatedFile; }
-    public void setAssociatedFile(File file) { associatedFile = file; }
+    public File getAssociatedFile() {
+        return associatedFile;
+    }
+
+    public void setAssociatedFile(File file) {
+        associatedFile = file;
+    }
 
     /**
      * Replies the name of the layer
@@ -294,7 +305,7 @@ public abstract class Layer implements Destroyable, MapViewPaintable, Projection
         double oldOpacity = getOpacity();
         boolean oldVisible = isVisible();
         this.opacity = opacity;
-        if (oldOpacity != getOpacity()) {
+        if (!Utils.equalsEpsilon(oldOpacity, getOpacity())) {
             fireOpacityChanged(oldOpacity, getOpacity());
         }
         if (oldVisible != isVisible()) {
@@ -303,6 +314,13 @@ public abstract class Layer implements Destroyable, MapViewPaintable, Projection
     }
 
     /**
+     * Sets new state to the layer after applying {@link ImageProcessor}.
+     */
+    public void setFilterStateChanged() {
+        fireFilterStateChanged();
+    }
+
+    /**
      * Toggles the visibility state of this layer.
      */
     public void toggleVisible() {
@@ -348,6 +366,13 @@ public abstract class Layer implements Destroyable, MapViewPaintable, Projection
     }
 
     /**
+     * fires a property change for the property {@link #FILTER_STATE_PROP}.
+     */
+    protected void fireFilterStateChanged() {
+        propertyChangeSupport.firePropertyChange(FILTER_STATE_PROP, null, null);
+    }
+
+    /**
      * Check changed status of layer
      *
      * @return True if layer was changed since last paint
@@ -380,6 +405,7 @@ public abstract class Layer implements Destroyable, MapViewPaintable, Projection
      */
     public static class LayerSaveAction extends AbstractAction {
         private final transient Layer layer;
+
         public LayerSaveAction(Layer layer) {
             putValue(SMALL_ICON, ImageProvider.get("save"));
             putValue(SHORT_DESCRIPTION, tr("Save the current data."));
@@ -396,6 +422,7 @@ public abstract class Layer implements Destroyable, MapViewPaintable, Projection
 
     public static class LayerSaveAsAction extends AbstractAction {
         private final transient Layer layer;
+
         public LayerSaveAsAction(Layer layer) {
             putValue(SMALL_ICON, ImageProvider.get("save_as"));
             putValue(SHORT_DESCRIPTION, tr("Save the current data to a new file."));
@@ -412,6 +439,7 @@ public abstract class Layer implements Destroyable, MapViewPaintable, Projection
 
     public static class LayerGpxExportAction extends AbstractAction {
         private final transient Layer layer;
+
         public LayerGpxExportAction(Layer layer) {
             putValue(SMALL_ICON, ImageProvider.get("exportgpx"));
             putValue(SHORT_DESCRIPTION, tr("Export the data to GPX file."));
@@ -431,9 +459,10 @@ public abstract class Layer implements Destroyable, MapViewPaintable, Projection
     /* --------------------------------------------------------------------------------- */
     @Override
     public void projectionChanged(Projection oldValue, Projection newValue) {
-        if(!isProjectionSupported(newValue)) {
+        if (!isProjectionSupported(newValue)) {
             JOptionPane.showMessageDialog(Main.parent,
-                    tr("The layer {0} does not support the new projection {1}.\n{2}\n"
+                    tr("The layer {0} does not support the new projection {1}.\n"
+                            + "Supported projections are: {2}\n"
                             + "Change the projection again or remove the layer.",
                             getName(), newValue.toCode(), nameSupportedProjections()),
                             tr("Warning"),
@@ -471,8 +500,8 @@ public abstract class Layer implements Destroyable, MapViewPaintable, Projection
      * Creates a new "Save" dialog for this layer and makes it visible.<br>
      * When the user has chosen a file, checks the file extension, and confirms overwrite if needed.
      * @return The output {@code File}
-     * @since 5459
      * @see SaveActionBase#createAndOpenSaveFileChooser
+     * @since 5459
      */
     public File createAndOpenSaveFileChooser() {
         return SaveActionBase.createAndOpenSaveFileChooser(tr("Save Layer"), "lay");
diff --git a/src/org/openstreetmap/josm/gui/layer/NoteLayer.java b/src/org/openstreetmap/josm/gui/layer/NoteLayer.java
index dba332d..240b6c5 100644
--- a/src/org/openstreetmap/josm/gui/layer/NoteLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/NoteLayer.java
@@ -19,6 +19,7 @@ import javax.swing.Action;
 import javax.swing.Icon;
 import javax.swing.ImageIcon;
 import javax.swing.JToolTip;
+import javax.swing.SwingUtilities;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.SaveActionBase;
@@ -32,13 +33,19 @@ import org.openstreetmap.josm.gui.MapView;
 import org.openstreetmap.josm.gui.dialogs.LayerListDialog;
 import org.openstreetmap.josm.gui.dialogs.LayerListPopup;
 import org.openstreetmap.josm.gui.dialogs.NotesDialog;
+import org.openstreetmap.josm.gui.io.AbstractIOTask;
+import org.openstreetmap.josm.gui.io.UploadNoteLayerTask;
+import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.io.NoteExporter;
+import org.openstreetmap.josm.io.OsmApi;
 import org.openstreetmap.josm.io.XmlWriter;
 import org.openstreetmap.josm.tools.ColorHelper;
+import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.date.DateUtils;
 
 /**
- * A layer to hold Note objects
+ * A layer to hold Note objects.
+ * @since 7522
  */
 public class NoteLayer extends AbstractModifiableLayer implements MouseListener {
 
@@ -111,15 +118,15 @@ public class NoteLayer extends AbstractModifiableLayer implements MouseListener
         }
         if (noteData.getSelectedNote() != null) {
             StringBuilder sb = new StringBuilder("<html>");
-            sb.append(tr("Note"));
-            sb.append(" ").append(noteData.getSelectedNote().getId());
+            sb.append(tr("Note"))
+              .append(' ').append(noteData.getSelectedNote().getId());
             for (NoteComment comment : noteData.getSelectedNote().getComments()) {
                 String commentText = comment.getText();
                 //closing a note creates an empty comment that we don't want to show
-                if (commentText != null && commentText.trim().length() > 0) {
+                if (commentText != null && !commentText.trim().isEmpty()) {
                     sb.append("<hr/>");
                     String userName = XmlWriter.encode(comment.getUser().getName());
-                    if (userName == null || userName.trim().length() == 0) {
+                    if (userName == null || userName.trim().isEmpty()) {
                         userName = "<Anonymous>";
                     }
                     sb.append(userName);
@@ -138,7 +145,8 @@ public class NoteLayer extends AbstractModifiableLayer implements MouseListener
             Point p = mv.getPoint(noteData.getSelectedNote().getLatLon());
 
             g.setColor(ColorHelper.html2color(Main.pref.get("color.selected")));
-            g.drawRect(p.x - (NotesDialog.ICON_SMALL_SIZE / 2), p.y - NotesDialog.ICON_SMALL_SIZE, NotesDialog.ICON_SMALL_SIZE - 1, NotesDialog.ICON_SMALL_SIZE - 1);
+            g.drawRect(p.x - (NotesDialog.ICON_SMALL_SIZE / 2), p.y - NotesDialog.ICON_SMALL_SIZE,
+                    NotesDialog.ICON_SMALL_SIZE - 1, NotesDialog.ICON_SMALL_SIZE - 1);
 
             int tx = p.x + (NotesDialog.ICON_SMALL_SIZE / 2) + 5;
             int ty = p.y - NotesDialog.ICON_SMALL_SIZE - 1;
@@ -148,7 +156,7 @@ public class NoteLayer extends AbstractModifiableLayer implements MouseListener
             //but without it, the tooltip doesn't get sized correctly
             for (int x = 0; x < 2; x++) {
                 Dimension d = toolTip.getUI().getPreferredSize(toolTip);
-                d.width = Math.min(d.width, (mv.getWidth() / 2));
+                d.width = Math.min(d.width, mv.getWidth() / 2);
                 if (d.width > 0 && d.height > 0) {
                     toolTip.setSize(d);
                     try {
@@ -194,15 +202,15 @@ public class NoteLayer extends AbstractModifiableLayer implements MouseListener
     @Override
     public Object getInfoComponent() {
         StringBuilder sb = new StringBuilder();
-        sb.append(tr("Notes layer"));
-        sb.append("\n");
-        sb.append(tr("Total notes:"));
-        sb.append(" ");
-        sb.append(noteData.getNotes().size());
-        sb.append("\n");
-        sb.append(tr("Changes need uploading?"));
-        sb.append(" ");
-        sb.append(isModified());
+        sb.append(tr("Notes layer"))
+          .append('\n')
+          .append(tr("Total notes:"))
+          .append(' ')
+          .append(noteData.getNotes().size())
+          .append('\n')
+          .append(tr("Changes need uploading?"))
+          .append(' ')
+          .append(isModified());
         return sb.toString();
     }
 
@@ -219,7 +227,11 @@ public class NoteLayer extends AbstractModifiableLayer implements MouseListener
 
     @Override
     public void mouseClicked(MouseEvent e) {
-        if (e.getButton() != MouseEvent.BUTTON1) {
+        if (SwingUtilities.isRightMouseButton(e) && noteData.getSelectedNote() != null) {
+            final String url = OsmApi.getOsmApi().getBaseUrl() + "notes/" + noteData.getSelectedNote().getId();
+            Utils.copyToClipboard(url);
+            return;
+        } else if (!SwingUtilities.isLeftMouseButton(e)) {
             return;
         }
         Point clickPoint = e.getPoint();
@@ -231,7 +243,7 @@ public class NoteLayer extends AbstractModifiableLayer implements MouseListener
             //move the note point to the center of the icon where users are most likely to click when selecting
             notePoint.setLocation(notePoint.getX(), notePoint.getY() - NotesDialog.ICON_SMALL_SIZE / 2);
             double dist = clickPoint.distanceSq(notePoint);
-            if (minDistance > dist && clickPoint.distance(notePoint) < snapDistance ) {
+            if (minDistance > dist && clickPoint.distance(notePoint) < snapDistance) {
                 minDistance = dist;
                 closestNote = note;
             }
@@ -245,14 +257,27 @@ public class NoteLayer extends AbstractModifiableLayer implements MouseListener
     }
 
     @Override
-    public void mousePressed(MouseEvent e) { }
+    public AbstractIOTask createUploadTask(ProgressMonitor monitor) {
+        return new UploadNoteLayerTask(this, monitor);
+    }
+
+    @Override
+    public void mousePressed(MouseEvent e) {
+        // Do nothing
+    }
 
     @Override
-    public void mouseReleased(MouseEvent e) { }
+    public void mouseReleased(MouseEvent e) {
+        // Do nothing
+    }
 
     @Override
-    public void mouseEntered(MouseEvent e) { }
+    public void mouseEntered(MouseEvent e) {
+        // Do nothing
+    }
 
     @Override
-    public void mouseExited(MouseEvent e) { }
+    public void mouseExited(MouseEvent e) {
+        // Do nothing
+    }
 }
diff --git a/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java b/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
index 870144b..37ca127 100644
--- a/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.layer;
 
 import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
@@ -263,10 +263,10 @@ public class OsmDataLayer extends AbstractModifiableLayer implements Listener, S
         big.setColor(getBackgroundColor());
         Composite comp = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.3f);
         big.setComposite(comp);
-        big.fillRect(0,0,15,15);
+        big.fillRect(0, 0, 15, 15);
         big.setColor(getOutsideColor());
-        big.drawLine(0,15,15,0);
-        Rectangle r = new Rectangle(0, 0, 15,15);
+        big.drawLine(0, 15, 15, 0);
+        Rectangle r = new Rectangle(0, 0, 15, 15);
         hatched = new TexturePaint(bi, r);
     }
 
@@ -334,7 +334,7 @@ public class OsmDataLayer extends AbstractModifiableLayer implements Listener, S
                 }
                 Point p1 = mv.getPoint(bounds.getMin());
                 Point p2 = mv.getPoint(bounds.getMax());
-                Rectangle r = new Rectangle(Math.min(p1.x, p2.x),Math.min(p1.y, p2.y),Math.abs(p2.x-p1.x),Math.abs(p2.y-p1.y));
+                Rectangle r = new Rectangle(Math.min(p1.x, p2.x), Math.min(p1.y, p2.y), Math.abs(p2.x-p1.x), Math.abs(p2.y-p1.y));
                 a.subtract(new Area(r));
             }
 
@@ -367,10 +367,10 @@ public class OsmDataLayer extends AbstractModifiableLayer implements Listener, S
     @Override public void mergeFrom(final Layer from) {
         final PleaseWaitProgressMonitor monitor = new PleaseWaitProgressMonitor(tr("Merging layers"));
         monitor.setCancelable(false);
-        if (from instanceof OsmDataLayer && ((OsmDataLayer)from).isUploadDiscouraged()) {
+        if (from instanceof OsmDataLayer && ((OsmDataLayer) from).isUploadDiscouraged()) {
             setUploadDiscouraged(true);
         }
-        mergeFrom(((OsmDataLayer)from).data, monitor);
+        mergeFrom(((OsmDataLayer) from).data, monitor);
         monitor.close();
     }
 
@@ -392,7 +392,7 @@ public class OsmDataLayer extends AbstractModifiableLayer implements Listener, S
      * @param progressMonitor the progress monitor, can be {@code null}
      */
     public void mergeFrom(final DataSet from, ProgressMonitor progressMonitor) {
-        final DataSetMerger visitor = new DataSetMerger(data,from);
+        final DataSetMerger visitor = new DataSetMerger(data, from);
         try {
             visitor.merge(progressMonitor);
         } catch (DataIntegrityProblemException e) {
@@ -403,7 +403,6 @@ public class OsmDataLayer extends AbstractModifiableLayer implements Listener, S
                     JOptionPane.ERROR_MESSAGE
             );
             return;
-
         }
 
         Area a = data.getDataSourceArea();
@@ -438,12 +437,14 @@ public class OsmDataLayer extends AbstractModifiableLayer implements Listener, S
         }
     }
 
-    @Override public boolean isMergable(final Layer other) {
+    @Override
+    public boolean isMergable(final Layer other) {
         // isUploadDiscouraged commented to allow merging between normal layers and discouraged layers with a warning (see #7684)
-        return other instanceof OsmDataLayer;// && (isUploadDiscouraged() == ((OsmDataLayer)other).isUploadDiscouraged());
+        return other instanceof OsmDataLayer; // && (isUploadDiscouraged() == ((OsmDataLayer)other).isUploadDiscouraged());
     }
 
-    @Override public void visitBoundingBox(final BoundingXYVisitor v) {
+    @Override
+    public void visitBoundingBox(final BoundingXYVisitor v) {
         for (final Node n: data.getNodes()) {
             if (n.isUsable()) {
                 v.visit(n);
@@ -475,8 +476,8 @@ public class OsmDataLayer extends AbstractModifiableLayer implements Listener, S
         }
     }
 
-
-    @Override public Object getInfoComponent() {
+    @Override
+    public Object getInfoComponent() {
         final DataCountVisitor counter = new DataCountVisitor();
         for (final OsmPrimitive osm : data.allPrimitives()) {
             osm.accept(counter);
@@ -499,12 +500,13 @@ public class OsmDataLayer extends AbstractModifiableLayer implements Listener, S
         }
 
         p.add(new JLabel(tr("{0} consists of:", getName())), GBC.eol());
-        p.add(new JLabel(nodeText, ImageProvider.get("data", "node"), JLabel.HORIZONTAL), GBC.eop().insets(15,0,0,0));
-        p.add(new JLabel(wayText, ImageProvider.get("data", "way"), JLabel.HORIZONTAL), GBC.eop().insets(15,0,0,0));
-        p.add(new JLabel(relationText, ImageProvider.get("data", "relation"), JLabel.HORIZONTAL), GBC.eop().insets(15,0,0,0));
-        p.add(new JLabel(tr("API version: {0}", (data.getVersion() != null) ? data.getVersion() : tr("unset"))), GBC.eop().insets(15,0,0,0));
+        p.add(new JLabel(nodeText, ImageProvider.get("data", "node"), JLabel.HORIZONTAL), GBC.eop().insets(15, 0, 0, 0));
+        p.add(new JLabel(wayText, ImageProvider.get("data", "way"), JLabel.HORIZONTAL), GBC.eop().insets(15, 0, 0, 0));
+        p.add(new JLabel(relationText, ImageProvider.get("data", "relation"), JLabel.HORIZONTAL), GBC.eop().insets(15, 0, 0, 0));
+        p.add(new JLabel(tr("API version: {0}", (data.getVersion() != null) ? data.getVersion() : tr("unset"))),
+                GBC.eop().insets(15, 0, 0, 0));
         if (isUploadDiscouraged()) {
-            p.add(new JLabel(tr("Upload is discouraged")), GBC.eop().insets(15,0,0,0));
+            p.add(new JLabel(tr("Upload is discouraged")), GBC.eop().insets(15, 0, 0, 0));
         }
 
         return p;
@@ -518,6 +520,7 @@ public class OsmDataLayer extends AbstractModifiableLayer implements Listener, S
                 LayerListDialog.getInstance().createDeleteLayerAction(),
                 SeparatorLayerAction.INSTANCE,
                 LayerListDialog.getInstance().createMergeLayerAction(this),
+                LayerListDialog.getInstance().createDuplicateLayerAction(this),
                 new LayerSaveAction(this),
                 new LayerSaveAsAction(this),
         }));
@@ -594,7 +597,7 @@ public class OsmDataLayer extends AbstractModifiableLayer implements Listener, S
         addDoubleIfPresent(wpt, n, GpxConstants.PT_ELE);
 
         if (!n.isTimestampEmpty()) {
-            wpt.put("time", DateUtils.fromDate(n.getTimestamp()));
+            wpt.put("time", DateUtils.fromTimestamp(n.getRawTimestamp()));
             wpt.setTime();
         }
 
@@ -723,6 +726,7 @@ public class OsmDataLayer extends AbstractModifiableLayer implements Listener, S
             super(tr("Convert to GPX layer"), ImageProvider.get("converttogpx"));
             putValue("help", ht("/Action/ConvertToGpxLayer"));
         }
+
         @Override
         public void actionPerformed(ActionEvent e) {
             Main.main.addLayer(new GpxLayer(toGpxData(), tr("Converted from: {0}", getName())));
@@ -810,7 +814,7 @@ public class OsmDataLayer extends AbstractModifiableLayer implements Listener, S
         @Override
         public void actionPerformed(ActionEvent e) {
             String result = DatasetConsistencyTest.runTests(data);
-            if (result.length() == 0) {
+            if (result.isEmpty()) {
                 JOptionPane.showMessageDialog(Main.parent, tr("No problems found"));
             } else {
                 JPanel p = new JPanel(new GridBagLayout());
@@ -855,7 +859,8 @@ public class OsmDataLayer extends AbstractModifiableLayer implements Listener, S
 
     /**
      * Sets the "discouraged upload" flag.
-     * @param uploadDiscouraged {@code true} if upload of data managed by this layer is discouraged. This feature allows to use "private" data layers.
+     * @param uploadDiscouraged {@code true} if upload of data managed by this layer is discouraged.
+     * This feature allows to use "private" data layers.
      */
     public final void setUploadDiscouraged(boolean uploadDiscouraged) {
         if (uploadDiscouraged ^ isUploadDiscouraged()) {
@@ -907,7 +912,8 @@ public class OsmDataLayer extends AbstractModifiableLayer implements Listener, S
                             tr("Conflicts"),
                             new String[] {tr("Reject Conflicts and Save"), tr("Cancel")}
                     );
-                    dialog.setContent(tr("There are unresolved conflicts. Conflicts will not be saved and handled as if you rejected all. Continue?"));
+                    dialog.setContent(
+                            tr("There are unresolved conflicts. Conflicts will not be saved and handled as if you rejected all. Continue?"));
                     dialog.setButtonIcons(new String[] {"save", "cancel"});
                     return dialog.showDialog().getValue();
                 }
@@ -927,9 +933,10 @@ public class OsmDataLayer extends AbstractModifiableLayer implements Listener, S
      */
     private boolean isDataSetEmpty() {
         if (data != null) {
-            for (OsmPrimitive osm : data.allNonDeletedPrimitives())
+            for (OsmPrimitive osm : data.allNonDeletedPrimitives()) {
                 if (!osm.isDeleted() || !osm.isNewOrUndeleted())
                     return false;
+            }
         }
         return true;
     }
diff --git a/src/org/openstreetmap/josm/gui/layer/TMSLayer.java b/src/org/openstreetmap/josm/gui/layer/TMSLayer.java
index c749488..d819a3c 100644
--- a/src/org/openstreetmap/josm/gui/layer/TMSLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/TMSLayer.java
@@ -3,82 +3,21 @@ package org.openstreetmap.josm.gui.layer;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
 
-import java.awt.Color;
-import java.awt.Font;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.Image;
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.awt.Toolkit;
-import java.awt.event.ActionEvent;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.awt.image.ImageObserver;
-import java.io.File;
-import java.io.IOException;
-import java.io.StringReader;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Scanner;
-import java.util.concurrent.Callable;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import javax.swing.AbstractAction;
-import javax.swing.Action;
-import javax.swing.JCheckBoxMenuItem;
-import javax.swing.JMenuItem;
-import javax.swing.JOptionPane;
-import javax.swing.JPopupMenu;
-
-import org.openstreetmap.gui.jmapviewer.AttributionSupport;
-import org.openstreetmap.gui.jmapviewer.Coordinate;
-import org.openstreetmap.gui.jmapviewer.MemoryTileCache;
-import org.openstreetmap.gui.jmapviewer.OsmTileLoader;
-import org.openstreetmap.gui.jmapviewer.Tile;
-import org.openstreetmap.gui.jmapviewer.interfaces.CachedTileLoader;
-import org.openstreetmap.gui.jmapviewer.interfaces.TileCache;
+import org.apache.commons.jcs.access.CacheAccess;
 import org.openstreetmap.gui.jmapviewer.interfaces.TileLoader;
-import org.openstreetmap.gui.jmapviewer.interfaces.TileLoaderListener;
-import org.openstreetmap.gui.jmapviewer.interfaces.TileSource;
-import org.openstreetmap.gui.jmapviewer.tilesources.BingAerialTileSource;
+import org.openstreetmap.gui.jmapviewer.tilesources.AbstractTMSTileSource;
 import org.openstreetmap.gui.jmapviewer.tilesources.ScanexTileSource;
 import org.openstreetmap.gui.jmapviewer.tilesources.TMSTileSource;
 import org.openstreetmap.gui.jmapviewer.tilesources.TemplatedTMSTileSource;
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.actions.RenameLayerAction;
-import org.openstreetmap.josm.data.Bounds;
-import org.openstreetmap.josm.data.Version;
-import org.openstreetmap.josm.data.coor.EastNorth;
-import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.cache.BufferedImageCacheEntry;
+import org.openstreetmap.josm.data.imagery.CachedAttributionBingAerialTileSource;
 import org.openstreetmap.josm.data.imagery.ImageryInfo;
 import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryType;
 import org.openstreetmap.josm.data.imagery.TMSCachedTileLoader;
-import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
 import org.openstreetmap.josm.data.preferences.BooleanProperty;
 import org.openstreetmap.josm.data.preferences.IntegerProperty;
-import org.openstreetmap.josm.data.preferences.StringProperty;
 import org.openstreetmap.josm.data.projection.Projection;
-import org.openstreetmap.josm.gui.MapFrame;
-import org.openstreetmap.josm.gui.MapView;
-import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
-import org.openstreetmap.josm.gui.PleaseWaitRunnable;
-import org.openstreetmap.josm.gui.dialogs.LayerListDialog;
-import org.openstreetmap.josm.gui.dialogs.LayerListPopup;
-import org.openstreetmap.josm.gui.progress.ProgressMonitor;
-import org.openstreetmap.josm.io.CacheCustomContent;
-import org.openstreetmap.josm.io.OsmTransferException;
-import org.openstreetmap.josm.io.UTFInputStreamReader;
-import org.openstreetmap.josm.tools.CheckParameterUtil;
-import org.openstreetmap.josm.tools.Utils;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
 
 /**
  * Class that displays a slippy map layer.
@@ -89,236 +28,82 @@ import org.xml.sax.SAXException;
  * @author Upliner <upliner at gmail.com>
  *
  */
-public class TMSLayer extends ImageryLayer implements ImageObserver, TileLoaderListener {
-    public static final String PREFERENCE_PREFIX   = "imagery.tms";
+public class TMSLayer extends AbstractCachedTileSourceLayer {
+    private static final String CACHE_REGION_NAME = "TMS";
 
-    public static final int MAX_ZOOM = 30;
-    public static final int MIN_ZOOM = 2;
-    public static final int DEFAULT_MAX_ZOOM = 20;
-    public static final int DEFAULT_MIN_ZOOM = 2;
+    private static final String PREFERENCE_PREFIX = "imagery.tms";
 
-    public static final BooleanProperty PROP_DEFAULT_AUTOZOOM = new BooleanProperty(PREFERENCE_PREFIX + ".default_autozoom", true);
-    public static final BooleanProperty PROP_DEFAULT_AUTOLOAD = new BooleanProperty(PREFERENCE_PREFIX + ".default_autoload", true);
-    public static final BooleanProperty PROP_DEFAULT_SHOWERRORS = new BooleanProperty(PREFERENCE_PREFIX + ".default_showerrors", true);
-    public static final IntegerProperty PROP_MIN_ZOOM_LVL = new IntegerProperty(PREFERENCE_PREFIX + ".min_zoom_lvl", DEFAULT_MIN_ZOOM);
-    public static final IntegerProperty PROP_MAX_ZOOM_LVL = new IntegerProperty(PREFERENCE_PREFIX + ".max_zoom_lvl", DEFAULT_MAX_ZOOM);
-    //public static final BooleanProperty PROP_DRAW_DEBUG = new BooleanProperty(PREFERENCE_PREFIX + ".draw_debug", false);
-    public static final BooleanProperty PROP_ADD_TO_SLIPPYMAP_CHOOSER = new BooleanProperty(PREFERENCE_PREFIX + ".add_to_slippymap_chooser", true);
-    public static final StringProperty PROP_TILECACHE_DIR;
-
-    static {
-        String defPath = null;
-        try {
-            defPath = new File(Main.pref.getCacheDirectory(), "tms").getAbsolutePath();
-        } catch (SecurityException e) {
-            Main.warn(e);
-        }
-        PROP_TILECACHE_DIR = new StringProperty(PREFERENCE_PREFIX + ".tilecache", defPath);
-    }
-
-    public interface TileLoaderFactory {
-        TileLoader makeTileLoader(TileLoaderListener listener);
-        TileLoader makeTileLoader(TileLoaderListener listener, Map<String, String> headers);
-    }
-
-    protected TileCache tileCache;
-    protected TileSource tileSource;
-    protected TileLoader tileLoader;
-
-
-    public static TileLoaderFactory loaderFactory = new TileLoaderFactory() {
-        @Override
-        public TileLoader makeTileLoader(TileLoaderListener listener, Map<String, String> inputHeaders) {
-            Map<String, String> headers = new HashMap<>();
-            headers.put("User-Agent", Version.getInstance().getFullAgentString());
-            headers.put("Accept", "text/html, image/png, image/jpeg, image/gif, */*");
-            if (inputHeaders != null)
-                headers.putAll(inputHeaders);
-
-            try {
-                return new TMSCachedTileLoader(listener, "TMS",
-                        Main.pref.getInteger("socket.timeout.connect",15) * 1000,
-                        Main.pref.getInteger("socket.timeout.read", 30) * 1000,
-                        headers,
-                        PROP_TILECACHE_DIR.get());
-            } catch (IOException e) {
-                Main.warn(e);
-            }
-            return null;
-        }
-
-        @Override
-        public TileLoader makeTileLoader(TileLoaderListener listener) {
-            return makeTileLoader(listener, null);
-        }
-    };
+    /** minimum zoom level for TMS layer */
+    public static final IntegerProperty PROP_MIN_ZOOM_LVL = new IntegerProperty(PREFERENCE_PREFIX + ".min_zoom_lvl",
+            AbstractTileSourceLayer.PROP_MIN_ZOOM_LVL.get());
+    /** maximum zoom level for TMS layer */
+    public static final IntegerProperty PROP_MAX_ZOOM_LVL = new IntegerProperty(PREFERENCE_PREFIX + ".max_zoom_lvl",
+            AbstractTileSourceLayer.PROP_MAX_ZOOM_LVL.get());
+    /** shall TMS layers be added to download dialog */
+    public static final BooleanProperty PROP_ADD_TO_SLIPPYMAP_CHOOSER = new BooleanProperty(PREFERENCE_PREFIX + ".add_to_slippymap_chooser",
+            true);
 
     /**
-     * Plugins that wish to set custom tile loader should call this method
+     * Create a layer based on ImageryInfo
+     * @param info description of the layer
      */
-
-    public static void setCustomTileLoaderFactory(TileLoaderFactory loaderFactory) {
-        TMSLayer.loaderFactory = loaderFactory;
+    public TMSLayer(ImageryInfo info) {
+        super(info);
     }
 
-    @Override
-    public synchronized void tileLoadingFinished(Tile tile, boolean success) {
-        if (tile.hasError()) {
-            success = false;
-            tile.setImage(null);
-        }
-        if (sharpenLevel != 0 && success) {
-            tile.setImage(sharpenImage(tile.getImage()));
-        }
-        tile.setLoaded(success);
-        needRedraw = true;
-        if (Main.map != null) {
-            Main.map.repaint(100);
-        }
-        if (Main.isDebugEnabled()) {
-            Main.debug("tileLoadingFinished() tile: " + tile + " success: " + success);
-        }
-    }
 
     /**
-     * Clears the tile cache.
+     * Creates and returns a new TileSource instance depending on the {@link ImageryType}
+     * of the passed ImageryInfo object.
      *
-     * If the current tileLoader is an instance of OsmTileLoader, a new
-     * TmsTileClearController is created and passed to the according clearCache
-     * method.
+     * If no appropriate TileSource is found, null is returned.
+     * Currently supported ImageryType are {@link ImageryType#TMS},
+     * {@link ImageryType#BING}, {@link ImageryType#SCANEX}.
      *
-     * @param monitor
-     * @see OsmFileCacheTileLoader#clearCache(org.openstreetmap.gui.jmapviewer.interfaces.TileSource, org.openstreetmap.gui.jmapviewer.interfaces.TileClearController)
+     *
+     * @param info imagery info
+     * @return a new TileSource instance or null if no TileSource for the ImageryInfo/ImageryType could be found.
+     * @throws IllegalArgumentException if url from imagery info is null or invalid
      */
-    void clearTileCache(ProgressMonitor monitor) {
-        tileCache.clear();
-        if (tileLoader instanceof CachedTileLoader) {
-            ((CachedTileLoader)tileLoader).clearCache(tileSource);
-        }
+    @Override
+    protected AbstractTMSTileSource getTileSource(ImageryInfo info) throws IllegalArgumentException {
+        return getTileSourceStatic(info, new Runnable() {
+            @Override
+            public void run() {
+                Main.debug("Attribution loaded, running loadAllErrorTiles");
+                TMSLayer.this.loadAllErrorTiles(true);
+            }
+        });
     }
 
     /**
-     * Zoomlevel at which tiles is currently downloaded.
-     * Initial zoom lvl is set to bestZoom
+     * Adds a context menu to the mapView.
      */
-    public int currentZoomLevel;
 
-    private Tile clickedTile;
-    private boolean needRedraw;
-    private JPopupMenu tileOptionMenu;
-    private JCheckBoxMenuItem autoZoomPopup;
-    private JCheckBoxMenuItem autoLoadPopup;
-    private JCheckBoxMenuItem showErrorsPopup;
-    private Tile showMetadataTile;
-    private AttributionSupport attribution = new AttributionSupport();
-    private static final Font InfoFont = new Font("sansserif", Font.BOLD, 13);
+    @Override
+    public final boolean isProjectionSupported(Projection proj) {
+        return "EPSG:3857".equals(proj.toCode()) || "EPSG:4326".equals(proj.toCode());
+    }
 
-    protected boolean autoZoom;
-    protected boolean autoLoad;
-    protected boolean showErrors;
+    @Override
+    public final String nameSupportedProjections() {
+        return tr("EPSG:4326 and Mercator projection are supported");
+    }
 
     /**
-     * Initiates a repaint of Main.map
+     * Creates and returns a new TileSource instance depending on the {@link ImageryType}
+     * of the passed ImageryInfo object.
+     *
+     * If no appropriate TileSource is found, null is returned.
+     * Currently supported ImageryType are {@link ImageryType#TMS},
+     * {@link ImageryType#BING}, {@link ImageryType#SCANEX}.
      *
-     * @see Main#map
-     * @see MapFrame#repaint()
+     * @param info imagery info
+     * @return a new TileSource instance or null if no TileSource for the ImageryInfo/ImageryType could be found.
+     * @throws IllegalArgumentException if url from imagery info is null or invalid
      */
-    void redraw() {
-        needRedraw = true;
-        Main.map.repaint();
-    }
-
-    static int checkMaxZoomLvl(int maxZoomLvl, TileSource ts) {
-        if(maxZoomLvl > MAX_ZOOM) {
-            maxZoomLvl = MAX_ZOOM;
-        }
-        if(maxZoomLvl < PROP_MIN_ZOOM_LVL.get()) {
-            maxZoomLvl = PROP_MIN_ZOOM_LVL.get();
-        }
-        if (ts != null && ts.getMaxZoom() != 0 && ts.getMaxZoom() < maxZoomLvl) {
-            maxZoomLvl = ts.getMaxZoom();
-        }
-        return maxZoomLvl;
-    }
-
-    public static int getMaxZoomLvl(TileSource ts) {
-        return checkMaxZoomLvl(PROP_MAX_ZOOM_LVL.get(), ts);
-    }
-
-    public static void setMaxZoomLvl(int maxZoomLvl) {
-        maxZoomLvl = checkMaxZoomLvl(maxZoomLvl, null);
-        PROP_MAX_ZOOM_LVL.put(maxZoomLvl);
-    }
-
-    static int checkMinZoomLvl(int minZoomLvl, TileSource ts) {
-        if(minZoomLvl < MIN_ZOOM) {
-            /*Main.debug("Min. zoom level should not be less than "+MIN_ZOOM+"! Setting to that.");*/
-            minZoomLvl = MIN_ZOOM;
-        }
-        if(minZoomLvl > PROP_MAX_ZOOM_LVL.get()) {
-            /*Main.debug("Min. zoom level should not be more than Max. zoom level! Setting to Max.");*/
-            minZoomLvl = getMaxZoomLvl(ts);
-        }
-        if (ts != null && ts.getMinZoom() > minZoomLvl) {
-            /*Main.debug("Increasing min. zoom level to match tile source");*/
-            minZoomLvl = ts.getMinZoom();
-        }
-        return minZoomLvl;
-    }
-
-    public static int getMinZoomLvl(TileSource ts) {
-        return checkMinZoomLvl(PROP_MIN_ZOOM_LVL.get(), ts);
-    }
-
-    public static void setMinZoomLvl(int minZoomLvl) {
-        minZoomLvl = checkMinZoomLvl(minZoomLvl, null);
-        PROP_MIN_ZOOM_LVL.put(minZoomLvl);
-    }
-
-    private static class CachedAttributionBingAerialTileSource extends BingAerialTileSource {
-
-        public CachedAttributionBingAerialTileSource(String id) {
-            super(id);
-        }
-
-        class BingAttributionData extends CacheCustomContent<IOException> {
-
-            public BingAttributionData() {
-                super("bing.attribution.xml", CacheCustomContent.INTERVAL_HOURLY);
-            }
-
-            @Override
-            protected byte[] updateData() throws IOException {
-                URL u = getAttributionUrl();
-                try (Scanner scanner = new Scanner(UTFInputStreamReader.create(Utils.openURL(u)))) {
-                    String r = scanner.useDelimiter("\\A").next();
-                    Main.info("Successfully loaded Bing attribution data.");
-                    return r.getBytes("UTF-8");
-                }
-            }
-        }
-
-        @Override
-        protected Callable<List<Attribution>> getAttributionLoaderCallable() {
-            return new Callable<List<Attribution>>() {
-
-                @Override
-                public List<Attribution> call() throws Exception {
-                    BingAttributionData attributionLoader = new BingAttributionData();
-                    int waitTimeSec = 1;
-                    while (true) {
-                        try {
-                            String xml = attributionLoader.updateIfRequiredString();
-                            return parseAttributionText(new InputSource(new StringReader((xml))));
-                        } catch (IOException ex) {
-                            Main.warn("Could not connect to Bing API. Will retry in " + waitTimeSec + " seconds.");
-                            Thread.sleep(waitTimeSec * 1000L);
-                            waitTimeSec *= 2;
-                        }
-                    }
-                }
-            };
-        }
+    public static AbstractTMSTileSource getTileSourceStatic(ImageryInfo info) throws IllegalArgumentException {
+        return getTileSourceStatic(info, null);
     }
 
     /**
@@ -329,1144 +114,40 @@ public class TMSLayer extends ImageryLayer implements ImageObserver, TileLoaderL
      * Currently supported ImageryType are {@link ImageryType#TMS},
      * {@link ImageryType#BING}, {@link ImageryType#SCANEX}.
      *
-     * @param info
+     * @param info imagery info
+     * @param attributionLoadedTask task to be run once attribution is loaded, might be null, if nothing special shall happen
      * @return a new TileSource instance or null if no TileSource for the ImageryInfo/ImageryType could be found.
-     * @throws IllegalArgumentException
+     * @throws IllegalArgumentException if url from imagery info is null or invalid
      */
-    public static TileSource getTileSource(ImageryInfo info) {
+    public static AbstractTMSTileSource getTileSourceStatic(ImageryInfo info, Runnable attributionLoadedTask) throws IllegalArgumentException {
         if (info.getImageryType() == ImageryType.TMS) {
-            checkUrl(info.getUrl());
-            TMSTileSource t = new TemplatedTMSTileSource(info.getName(), info.getUrl(), info.getId(), info.getMinZoom(), info.getMaxZoom(),
-                    info.getCookies());
+            TemplatedTMSTileSource.checkUrl(info.getUrl());
+            TMSTileSource t = new TemplatedTMSTileSource(info);
             info.setAttribution(t);
             return t;
         } else if (info.getImageryType() == ImageryType.BING)
-            return new CachedAttributionBingAerialTileSource(info.getId());
+            return new CachedAttributionBingAerialTileSource(info, attributionLoadedTask);
         else if (info.getImageryType() == ImageryType.SCANEX) {
-            return new ScanexTileSource(info.getName(), info.getUrl(), info.getId(), info.getMaxZoom());
+            return new ScanexTileSource(info);
         }
         return null;
     }
 
-    /**
-     * Checks validity of given URL.
-     * @param url URL to check
-     * @throws IllegalArgumentException if url is null or invalid
-     */
-    public static void checkUrl(String url) {
-        CheckParameterUtil.ensureParameterNotNull(url, "url");
-        Matcher m = Pattern.compile("\\{[^}]*\\}").matcher(url);
-        while (m.find()) {
-            boolean isSupportedPattern = false;
-            for (String pattern : TemplatedTMSTileSource.ALL_PATTERNS) {
-                if (m.group().matches(pattern)) {
-                    isSupportedPattern = true;
-                    break;
-                }
-            }
-            if (!isSupportedPattern) {
-                throw new IllegalArgumentException(
-                        tr("{0} is not a valid TMS argument. Please check this server URL:\n{1}", m.group(), url));
-            }
-        }
-    }
-
-    private void initTileSource(TileSource tileSource) {
-        this.tileSource = tileSource;
-        attribution.initialize(tileSource);
-
-        currentZoomLevel = getBestZoom();
-
-        Map<String, String> headers = null;
-        if (tileSource instanceof TemplatedTMSTileSource) {
-            headers = (((TemplatedTMSTileSource)tileSource).getHeaders());
-        }
-
-        // FIXME: tileCache = new MemoryTileCache();
-        tileLoader = loaderFactory.makeTileLoader(this, headers);
-        if (tileLoader instanceof TMSCachedTileLoader) {
-            tileCache = (TileCache) tileLoader;
-        } else {
-            tileCache = new MemoryTileCache();
-        }
-        if (tileLoader == null)
-            tileLoader = new OsmTileLoader(this);
-    }
-
-    /**
-     * Marks layer as needing redraw on offset change
-     */
     @Override
-    public void setOffset(double dx, double dy) {
-        super.setOffset(dx, dy);
-        needRedraw = true;
-    }
-    /**
-     * Returns average number of screen pixels per tile pixel for current mapview
-     */
-    private double getScaleFactor(int zoom) {
-        if (!Main.isDisplayingMapView()) return 1;
-        MapView mv = Main.map.mapView;
-        LatLon topLeft = mv.getLatLon(0, 0);
-        LatLon botRight = mv.getLatLon(mv.getWidth(), mv.getHeight());
-        double x1 = tileSource.lonToTileX(topLeft.lon(), zoom);
-        double y1 = tileSource.latToTileY(topLeft.lat(), zoom);
-        double x2 = tileSource.lonToTileX(botRight.lon(), zoom);
-        double y2 = tileSource.latToTileY(botRight.lat(), zoom);
-
-        int screenPixels = mv.getWidth()*mv.getHeight();
-        double tilePixels = Math.abs((y2-y1)*(x2-x1)*tileSource.getTileSize()*tileSource.getTileSize());
-        if (screenPixels == 0 || tilePixels == 0) return 1;
-        return screenPixels/tilePixels;
+    protected Class<? extends TileLoader> getTileLoaderClass() {
+        return TMSCachedTileLoader.class;
     }
 
-    private final int getBestZoom() {
-        double factor = getScaleFactor(1);
-        double result = Math.log(factor)/Math.log(2)/2+1;
-        // In general, smaller zoom levels are more readable.  We prefer big,
-        // block, pixelated (but readable) map text to small, smeared,
-        // unreadable underzoomed text.  So, use .floor() instead of rounding
-        // to skew things a bit toward the lower zooms.
-        int intResult = (int)Math.floor(result);
-        if (intResult > getMaxZoomLvl())
-            return getMaxZoomLvl();
-        if (intResult < getMinZoomLvl())
-            return getMinZoomLvl();
-        return intResult;
-    }
-
-    @SuppressWarnings("serial")
-    public TMSLayer(ImageryInfo info) {
-        super(info);
-
-        if(!isProjectionSupported(Main.getProjection())) {
-            JOptionPane.showMessageDialog(Main.parent,
-                    tr("TMS layers do not support the projection {0}.\n{1}\n"
-                            + "Change the projection or remove the layer.",
-                            Main.getProjection().toCode(), nameSupportedProjections()),
-                            tr("Warning"),
-                            JOptionPane.WARNING_MESSAGE);
-        }
-
-        setBackgroundLayer(true);
-        this.setVisible(true);
-
-        TileSource source = getTileSource(info);
-        if (source == null)
-            throw new IllegalStateException("Cannot create TMSLayer with non-TMS ImageryInfo");
-        initTileSource(source);
-    }
-
-    /**
-     * Adds a context menu to the mapView.
-     */
     @Override
-    public void hookUpMapView() {
-        tileOptionMenu = new JPopupMenu();
-
-        autoZoom = PROP_DEFAULT_AUTOZOOM.get();
-        autoZoomPopup = new JCheckBoxMenuItem();
-        autoZoomPopup.setAction(new AbstractAction(tr("Auto Zoom")) {
-            @Override
-            public void actionPerformed(ActionEvent ae) {
-                autoZoom = !autoZoom;
-            }
-        });
-        autoZoomPopup.setSelected(autoZoom);
-        tileOptionMenu.add(autoZoomPopup);
-
-        autoLoad = PROP_DEFAULT_AUTOLOAD.get();
-        autoLoadPopup = new JCheckBoxMenuItem();
-        autoLoadPopup.setAction(new AbstractAction(tr("Auto load tiles")) {
-            @Override
-            public void actionPerformed(ActionEvent ae) {
-                autoLoad= !autoLoad;
-            }
-        });
-        autoLoadPopup.setSelected(autoLoad);
-        tileOptionMenu.add(autoLoadPopup);
-
-        showErrors = PROP_DEFAULT_SHOWERRORS.get();
-        showErrorsPopup = new JCheckBoxMenuItem();
-        showErrorsPopup.setAction(new AbstractAction(tr("Show Errors")) {
-            @Override
-            public void actionPerformed(ActionEvent ae) {
-                showErrors = !showErrors;
-            }
-        });
-        showErrorsPopup.setSelected(showErrors);
-        tileOptionMenu.add(showErrorsPopup);
-
-        tileOptionMenu.add(new JMenuItem(new AbstractAction(tr("Load Tile")) {
-            @Override
-            public void actionPerformed(ActionEvent ae) {
-                if (clickedTile != null) {
-                    loadTile(clickedTile, true);
-                    redraw();
-                }
-            }
-        }));
-
-        tileOptionMenu.add(new JMenuItem(new AbstractAction(
-                tr("Show Tile Info")) {
-            @Override
-            public void actionPerformed(ActionEvent ae) {
-                if (clickedTile != null) {
-                    showMetadataTile = clickedTile;
-                    redraw();
-                }
-            }
-        }));
-
-        /* FIXME
-        tileOptionMenu.add(new JMenuItem(new AbstractAction(
-                tr("Request Update")) {
-            public void actionPerformed(ActionEvent ae) {
-                if (clickedTile != null) {
-                    clickedTile.requestUpdate();
-                    redraw();
-                }
-            }
-        }));*/
-
-        tileOptionMenu.add(new JMenuItem(new AbstractAction(
-                tr("Load All Tiles")) {
-            @Override
-            public void actionPerformed(ActionEvent ae) {
-                loadAllTiles(true);
-                redraw();
-            }
-        }));
-
-        tileOptionMenu.add(new JMenuItem(new AbstractAction(
-                tr("Load All Error Tiles")) {
-            @Override
-            public void actionPerformed(ActionEvent ae) {
-                loadAllErrorTiles(true);
-                redraw();
-            }
-        }));
-
-        // increase and decrease commands
-        tileOptionMenu.add(new JMenuItem(new AbstractAction(
-                tr("Increase zoom")) {
-            @Override
-            public void actionPerformed(ActionEvent ae) {
-                increaseZoomLevel();
-                redraw();
-            }
-        }));
-
-        tileOptionMenu.add(new JMenuItem(new AbstractAction(
-                tr("Decrease zoom")) {
-            @Override
-            public void actionPerformed(ActionEvent ae) {
-                decreaseZoomLevel();
-                redraw();
-            }
-        }));
-
-        tileOptionMenu.add(new JMenuItem(new AbstractAction(
-                tr("Snap to tile size")) {
-            @Override
-            public void actionPerformed(ActionEvent ae) {
-                double new_factor = Math.sqrt(getScaleFactor(currentZoomLevel));
-                Main.map.mapView.zoomToFactor(new_factor);
-                redraw();
-            }
-        }));
-
-        tileOptionMenu.add(new JMenuItem(new AbstractAction(
-                tr("Flush Tile Cache")) {
-            @Override
-            public void actionPerformed(ActionEvent ae) {
-                new PleaseWaitRunnable(tr("Flush Tile Cache")) {
-                    @Override
-                    protected void realRun() throws SAXException, IOException,
-                            OsmTransferException {
-                        clearTileCache(getProgressMonitor());
-                    }
-
-                    @Override
-                    protected void finish() {
-                    }
-
-                    @Override
-                    protected void cancel() {
-                    }
-                }.run();
-            }
-        }));
-
-        final MouseAdapter adapter = new MouseAdapter() {
-            @Override
-            public void mouseClicked(MouseEvent e) {
-                if (!isVisible()) return;
-                if (e.getButton() == MouseEvent.BUTTON3) {
-                    clickedTile = getTileForPixelpos(e.getX(), e.getY());
-                    tileOptionMenu.show(e.getComponent(), e.getX(), e.getY());
-                } else if (e.getButton() == MouseEvent.BUTTON1) {
-                    attribution.handleAttribution(e.getPoint(), true);
-                }
-            }
-        };
-        Main.map.mapView.addMouseListener(adapter);
-
-        MapView.addLayerChangeListener(new LayerChangeListener() {
-            @Override
-            public void activeLayerChange(Layer oldLayer, Layer newLayer) {
-                //
-            }
-
-            @Override
-            public void layerAdded(Layer newLayer) {
-                //
-            }
-
-            @Override
-            public void layerRemoved(Layer oldLayer) {
-                if (oldLayer == TMSLayer.this) {
-                    Main.map.mapView.removeMouseListener(adapter);
-                    MapView.removeLayerChangeListener(this);
-                }
-            }
-        });
-    }
-
-    void zoomChanged() {
-        if (Main.isDebugEnabled()) {
-            Main.debug("zoomChanged(): " + currentZoomLevel);
-        }
-        needRedraw = true;
-    }
-
-    int getMaxZoomLvl() {
-        if (info.getMaxZoom() != 0)
-            return checkMaxZoomLvl(info.getMaxZoom(), tileSource);
-        else
-            return getMaxZoomLvl(tileSource);
-    }
-
-    int getMinZoomLvl() {
-        return getMinZoomLvl(tileSource);
+    protected String getCacheName() {
+        return CACHE_REGION_NAME;
     }
 
     /**
-     * Zoom in, go closer to map.
-     *
-     * @return    true, if zoom increasing was successfull, false othervise
-     */
-    public boolean zoomIncreaseAllowed() {
-        boolean zia = currentZoomLevel < this.getMaxZoomLvl();
-        if (Main.isDebugEnabled()) {
-            Main.debug("zoomIncreaseAllowed(): " + zia + " " + currentZoomLevel + " vs. " + this.getMaxZoomLvl() );
-        }
-        return zia;
-    }
-
-    public boolean increaseZoomLevel() {
-        if (zoomIncreaseAllowed()) {
-            currentZoomLevel++;
-            if (Main.isDebugEnabled()) {
-                Main.debug("increasing zoom level to: " + currentZoomLevel);
-            }
-            zoomChanged();
-        } else {
-            Main.warn("Current zoom level ("+currentZoomLevel+") could not be increased. "+
-                    "Max.zZoom Level "+this.getMaxZoomLvl()+" reached.");
-            return false;
-        }
-        return true;
-    }
-
-    public boolean setZoomLevel(int zoom) {
-        if (zoom == currentZoomLevel) return true;
-        if (zoom > this.getMaxZoomLvl()) return false;
-        if (zoom < this.getMinZoomLvl()) return false;
-        currentZoomLevel = zoom;
-        zoomChanged();
-        return true;
-    }
-
-    /**
-     * Check if zooming out is allowed
-     *
-     * @return    true, if zooming out is allowed (currentZoomLevel > minZoomLevel)
-     */
-    public boolean zoomDecreaseAllowed() {
-        return currentZoomLevel > this.getMinZoomLvl();
-    }
-
-    /**
-     * Zoom out from map.
-     *
-     * @return    true, if zoom increasing was successfull, false othervise
-     */
-    public boolean decreaseZoomLevel() {
-        //int minZoom = this.getMinZoomLvl();
-        if (zoomDecreaseAllowed()) {
-            if (Main.isDebugEnabled()) {
-                Main.debug("decreasing zoom level to: " + currentZoomLevel);
-            }
-            currentZoomLevel--;
-            zoomChanged();
-        } else {
-            /*Main.debug("Current zoom level could not be decreased. Min. zoom level "+minZoom+" reached.");*/
-            return false;
-        }
-        return true;
-    }
-
-    /*
-     * We use these for quick, hackish calculations.  They
-     * are temporary only and intentionally not inserted
-     * into the tileCache.
+     * @return cache for TMS region
      */
-    Tile tempCornerTile(Tile t) {
-        int x = t.getXtile() + 1;
-        int y = t.getYtile() + 1;
-        int zoom = t.getZoom();
-        Tile tile = getTile(x, y, zoom);
-        if (tile != null)
-            return tile;
-        return new Tile(tileSource, x, y, zoom);
+    public static CacheAccess<String, BufferedImageCacheEntry> getCache() {
+        return AbstractCachedTileSourceLayer.getCache(CACHE_REGION_NAME);
     }
 
-    Tile getOrCreateTile(int x, int y, int zoom) {
-        Tile tile = getTile(x, y, zoom);
-        if (tile == null) {
-            tile = new Tile(tileSource, x, y, zoom);
-            tileCache.addTile(tile);
-            tile.loadPlaceholderFromCache(tileCache);
-        }
-        return tile;
-    }
-
-    /*
-     * This can and will return null for tiles that are not
-     * already in the cache.
-     */
-    Tile getTile(int x, int y, int zoom) {
-        int max = (1 << zoom);
-        if (x < 0 || x >= max || y < 0 || y >= max)
-            return null;
-        return tileCache.getTile(tileSource, x, y, zoom);
-    }
-
-    boolean loadTile(Tile tile, boolean force) {
-        if (tile == null)
-            return false;
-        if (!force && (tile.isLoaded() || tile.hasError()))
-            return false;
-        if (tile.isLoading())
-            return false;
-        tileLoader.createTileLoaderJob(tile).submit();
-        return true;
-    }
-
-    void loadAllTiles(boolean force) {
-        MapView mv = Main.map.mapView;
-        EastNorth topLeft = mv.getEastNorth(0, 0);
-        EastNorth botRight = mv.getEastNorth(mv.getWidth(), mv.getHeight());
-
-        TileSet ts = new TileSet(topLeft, botRight, currentZoomLevel);
-
-        // if there is more than 18 tiles on screen in any direction, do not
-        // load all tiles!
-        if (ts.tooLarge()) {
-            Main.warn("Not downloading all tiles because there is more than 18 tiles on an axis!");
-            return;
-        }
-        ts.loadAllTiles(force);
-    }
-
-    void loadAllErrorTiles(boolean force) {
-        MapView mv = Main.map.mapView;
-        EastNorth topLeft = mv.getEastNorth(0, 0);
-        EastNorth botRight = mv.getEastNorth(mv.getWidth(), mv.getHeight());
-
-        TileSet ts = new TileSet(topLeft, botRight, currentZoomLevel);
-
-        ts.loadAllErrorTiles(force);
-    }
-
-    @Override
-    public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) {
-        boolean done = ((infoflags & (ERROR | FRAMEBITS | ALLBITS)) != 0);
-        needRedraw = true;
-        if (Main.isDebugEnabled()) {
-            Main.debug("imageUpdate() done: " + done + " calling repaint");
-        }
-        Main.map.repaint(done ? 0 : 100);
-        return !done;
-    }
-
-    boolean imageLoaded(Image i) {
-        if (i == null)
-            return false;
-        int status = Toolkit.getDefaultToolkit().checkImage(i, -1, -1, this);
-        if ((status & ALLBITS) != 0)
-            return true;
-        return false;
-    }
-
-    /**
-     * Returns the image for the given tile if both tile and image are loaded.
-     * Otherwise returns  null.
-     *
-     * @param tile the Tile for which the image should be returned
-     * @return  the image of the tile or null.
-     */
-    Image getLoadedTileImage(Tile tile) {
-        if (!tile.isLoaded())
-            return null;
-        Image img = tile.getImage();
-        if (!imageLoaded(img))
-            return null;
-        return img;
-    }
-
-    LatLon tileLatLon(Tile t) {
-        int zoom = t.getZoom();
-        return new LatLon(tileSource.tileYToLat(t.getYtile(), zoom),
-                tileSource.tileXToLon(t.getXtile(), zoom));
-    }
-
-    Rectangle tileToRect(Tile t1) {
-        /*
-         * We need to get a box in which to draw, so advance by one tile in
-         * each direction to find the other corner of the box.
-         * Note: this somewhat pollutes the tile cache
-         */
-        Tile t2 = tempCornerTile(t1);
-        Rectangle rect = new Rectangle(pixelPos(t1));
-        rect.add(pixelPos(t2));
-        return rect;
-    }
-
-    // 'source' is the pixel coordinates for the area that
-    // the img is capable of filling in.  However, we probably
-    // only want a portion of it.
-    //
-    // 'border' is the screen cordinates that need to be drawn.
-    //  We must not draw outside of it.
-    void drawImageInside(Graphics g, Image sourceImg, Rectangle source, Rectangle border) {
-        Rectangle target = source;
-
-        // If a border is specified, only draw the intersection
-        // if what we have combined with what we are supposed
-        // to draw.
-        if (border != null) {
-            target = source.intersection(border);
-            if (Main.isDebugEnabled()) {
-                Main.debug("source: " + source + "\nborder: " + border + "\nintersection: " + target);
-            }
-        }
-
-        // All of the rectangles are in screen coordinates.  We need
-        // to how these correlate to the sourceImg pixels.  We could
-        // avoid doing this by scaling the image up to the 'source' size,
-        // but this should be cheaper.
-        //
-        // In some projections, x any y are scaled differently enough to
-        // cause a pixel or two of fudge.  Calculate them separately.
-        double imageYScaling = sourceImg.getHeight(this) / source.getHeight();
-        double imageXScaling = sourceImg.getWidth(this) / source.getWidth();
-
-        // How many pixels into the 'source' rectangle are we drawing?
-        int screen_x_offset = target.x - source.x;
-        int screen_y_offset = target.y - source.y;
-        // And how many pixels into the image itself does that
-        // correlate to?
-        int img_x_offset = (int)(screen_x_offset * imageXScaling + 0.5);
-        int img_y_offset = (int)(screen_y_offset * imageYScaling + 0.5);
-        // Now calculate the other corner of the image that we need
-        // by scaling the 'target' rectangle's dimensions.
-        int img_x_end = img_x_offset + (int)(target.getWidth() * imageXScaling + 0.5);
-        int img_y_end = img_y_offset + (int)(target.getHeight() * imageYScaling + 0.5);
-
-        if (Main.isDebugEnabled()) {
-            Main.debug("drawing image into target rect: " + target);
-        }
-        g.drawImage(sourceImg,
-                target.x, target.y,
-                target.x + target.width, target.y + target.height,
-                img_x_offset, img_y_offset,
-                img_x_end, img_y_end,
-                this);
-        if (PROP_FADE_AMOUNT.get() != 0) {
-            // dimm by painting opaque rect...
-            g.setColor(getFadeColorWithAlpha());
-            g.fillRect(target.x, target.y,
-                    target.width, target.height);
-        }
-    }
-
-    // This function is called for several zoom levels, not just
-    // the current one.  It should not trigger any tiles to be
-    // downloaded.  It should also avoid polluting the tile cache
-    // with any tiles since these tiles are not mandatory.
-    //
-    // The "border" tile tells us the boundaries of where we may
-    // draw.  It will not be from the zoom level that is being
-    // drawn currently.  If drawing the displayZoomLevel,
-    // border is null and we draw the entire tile set.
-    List<Tile> paintTileImages(Graphics g, TileSet ts, int zoom, Tile border) {
-        if (zoom <= 0) return Collections.emptyList();
-        Rectangle borderRect = null;
-        if (border != null) {
-            borderRect = tileToRect(border);
-        }
-        List<Tile> missedTiles = new LinkedList<>();
-        // The callers of this code *require* that we return any tiles
-        // that we do not draw in missedTiles.  ts.allExistingTiles() by
-        // default will only return already-existing tiles.  However, we
-        // need to return *all* tiles to the callers, so force creation
-        // here.
-        //boolean forceTileCreation = true;
-        for (Tile tile : ts.allTilesCreate()) {
-            Image img = getLoadedTileImage(tile);
-            if (img == null || tile.hasError()) {
-                if (Main.isDebugEnabled()) {
-                    Main.debug("missed tile: " + tile);
-                }
-                missedTiles.add(tile);
-                continue;
-            }
-            Rectangle sourceRect = tileToRect(tile);
-            if (borderRect != null && !sourceRect.intersects(borderRect)) {
-                continue;
-            }
-            drawImageInside(g, img, sourceRect, borderRect);
-        }
-        return missedTiles;
-    }
-
-    void myDrawString(Graphics g, String text, int x, int y) {
-        Color oldColor = g.getColor();
-        g.setColor(Color.black);
-        g.drawString(text,x+1,y+1);
-        g.setColor(oldColor);
-        g.drawString(text,x,y);
-    }
-
-    void paintTileText(TileSet ts, Tile tile, Graphics g, MapView mv, int zoom, Tile t) {
-        int fontHeight = g.getFontMetrics().getHeight();
-        if (tile == null)
-            return;
-        Point p = pixelPos(t);
-        int texty = p.y + 2 + fontHeight;
-
-        /*if (PROP_DRAW_DEBUG.get()) {
-            myDrawString(g, "x=" + t.getXtile() + " y=" + t.getYtile() + " z=" + zoom + "", p.x + 2, texty);
-            texty += 1 + fontHeight;
-            if ((t.getXtile() % 32 == 0) && (t.getYtile() % 32 == 0)) {
-                myDrawString(g, "x=" + t.getXtile() / 32 + " y=" + t.getYtile() / 32 + " z=7", p.x + 2, texty);
-                texty += 1 + fontHeight;
-            }
-        }*/
-
-        if (tile == showMetadataTile) {
-            String md = tile.toString();
-            if (md != null) {
-                myDrawString(g, md, p.x + 2, texty);
-                texty += 1 + fontHeight;
-            }
-            Map<String, String> meta = tile.getMetadata();
-            if (meta != null) {
-                for (Map.Entry<String, String> entry : meta.entrySet()) {
-                    myDrawString(g, entry.getKey() + ": " + entry.getValue(), p.x + 2, texty);
-                    texty += 1 + fontHeight;
-                }
-            }
-        }
-
-        /*String tileStatus = tile.getStatus();
-        if (!tile.isLoaded() && PROP_DRAW_DEBUG.get()) {
-            myDrawString(g, tr("image " + tileStatus), p.x + 2, texty);
-            texty += 1 + fontHeight;
-        }*/
-
-        if (tile.hasError() && showErrors) {
-            myDrawString(g, tr("Error") + ": " + tr(tile.getErrorMessage()), p.x + 2, texty);
-            texty += 1 + fontHeight;
-        }
-
-        /*int xCursor = -1;
-        int yCursor = -1;
-        if (PROP_DRAW_DEBUG.get()) {
-            if (yCursor < t.getYtile()) {
-                if (t.getYtile() % 32 == 31) {
-                    g.fillRect(0, p.y - 1, mv.getWidth(), 3);
-                } else {
-                    g.drawLine(0, p.y, mv.getWidth(), p.y);
-                }
-                yCursor = t.getYtile();
-            }
-            // This draws the vertical lines for the entire
-            // column. Only draw them for the top tile in
-            // the column.
-            if (xCursor < t.getXtile()) {
-                if (t.getXtile() % 32 == 0) {
-                    // level 7 tile boundary
-                    g.fillRect(p.x - 1, 0, 3, mv.getHeight());
-                } else {
-                    g.drawLine(p.x, 0, p.x, mv.getHeight());
-                }
-                xCursor = t.getXtile();
-            }
-        }*/
-    }
-
-    private Point pixelPos(LatLon ll) {
-        return Main.map.mapView.getPoint(Main.getProjection().latlon2eastNorth(ll).add(getDx(), getDy()));
-    }
-
-    private Point pixelPos(Tile t) {
-        double lon = tileSource.tileXToLon(t.getXtile(), t.getZoom());
-        LatLon tmpLL = new LatLon(tileSource.tileYToLat(t.getYtile(), t.getZoom()), lon);
-        return pixelPos(tmpLL);
-    }
-
-    private LatLon getShiftedLatLon(EastNorth en) {
-        return Main.getProjection().eastNorth2latlon(en.add(-getDx(), -getDy()));
-    }
-
-    private Coordinate getShiftedCoord(EastNorth en) {
-        LatLon ll = getShiftedLatLon(en);
-        return new Coordinate(ll.lat(),ll.lon());
-    }
-
-    private final TileSet nullTileSet = new TileSet((LatLon)null, (LatLon)null, 0);
-    private class TileSet {
-        private int x0, x1, y0, y1;
-        private int zoom;
-        private int tileMax = -1;
-
-        /**
-         * Create a TileSet by EastNorth bbox taking a layer shift in account
-         */
-        TileSet(EastNorth topLeft, EastNorth botRight, int zoom) {
-            this(getShiftedLatLon(topLeft), getShiftedLatLon(botRight),zoom);
-        }
-
-        /**
-         * Create a TileSet by known LatLon bbox without layer shift correction
-         */
-        TileSet(LatLon topLeft, LatLon botRight, int zoom) {
-            this.zoom = zoom;
-            if (zoom == 0)
-                return;
-
-            x0 = (int)tileSource.lonToTileX(topLeft.lon(),  zoom);
-            y0 = (int)tileSource.latToTileY(topLeft.lat(),  zoom);
-            x1 = (int)tileSource.lonToTileX(botRight.lon(), zoom);
-            y1 = (int)tileSource.latToTileY(botRight.lat(), zoom);
-            if (x0 > x1) {
-                int tmp = x0;
-                x0 = x1;
-                x1 = tmp;
-            }
-            if (y0 > y1) {
-                int tmp = y0;
-                y0 = y1;
-                y1 = tmp;
-            }
-            tileMax = (int)Math.pow(2.0, zoom);
-            if (x0 < 0) {
-                x0 = 0;
-            }
-            if (y0 < 0) {
-                y0 = 0;
-            }
-            if (x1 > tileMax) {
-                x1 = tileMax;
-            }
-            if (y1 > tileMax) {
-                y1 = tileMax;
-            }
-        }
-
-        boolean tooSmall() {
-            return this.tilesSpanned() < 2.1;
-        }
-
-        boolean tooLarge() {
-            return this.tilesSpanned() > 10;
-        }
-
-        boolean insane() {
-            return this.tilesSpanned() > 100;
-        }
-
-        double tilesSpanned() {
-            return Math.sqrt(1.0 * this.size());
-        }
-
-        int size() {
-            int x_span = x1 - x0 + 1;
-            int y_span = y1 - y0 + 1;
-            return x_span * y_span;
-        }
-
-        /*
-         * Get all tiles represented by this TileSet that are
-         * already in the tileCache.
-         */
-        List<Tile> allExistingTiles() {
-            return this.__allTiles(false);
-        }
-
-        List<Tile> allTilesCreate() {
-            return this.__allTiles(true);
-        }
-
-        private List<Tile> __allTiles(boolean create) {
-            // Tileset is either empty or too large
-            if (zoom == 0 || this.insane())
-                return Collections.emptyList();
-            List<Tile> ret = new ArrayList<>();
-            for (int x = x0; x <= x1; x++) {
-                for (int y = y0; y <= y1; y++) {
-                    Tile t;
-                    if (create) {
-                        t = getOrCreateTile(x % tileMax, y % tileMax, zoom);
-                    } else {
-                        t = getTile(x % tileMax, y % tileMax, zoom);
-                    }
-                    if (t != null) {
-                        ret.add(t);
-                    }
-                }
-            }
-            return ret;
-        }
-
-        private List<Tile> allLoadedTiles() {
-            List<Tile> ret = new ArrayList<>();
-            for (Tile t : this.allExistingTiles()) {
-                if (t.isLoaded())
-                    ret.add(t);
-            }
-            return ret;
-        }
-
-        void loadAllTiles(boolean force) {
-            if (!autoLoad && !force)
-                return;
-            for (Tile t : this.allTilesCreate()) {
-                loadTile(t, false);
-            }
-        }
-
-        void loadAllErrorTiles(boolean force) {
-            if (!autoLoad && !force)
-                return;
-            for (Tile t : this.allTilesCreate()) {
-                if (t.hasError()) {
-                    loadTile(t, true);
-                }
-            }
-        }
-    }
-
-
-    private static class TileSetInfo {
-        public boolean hasVisibleTiles = false;
-        public boolean hasOverzoomedTiles = false;
-        public boolean hasLoadingTiles = false;
-    }
-
-    private static TileSetInfo getTileSetInfo(TileSet ts) {
-        List<Tile> allTiles = ts.allExistingTiles();
-        TileSetInfo result = new TileSetInfo();
-        result.hasLoadingTiles = allTiles.size() < ts.size();
-        for (Tile t : allTiles) {
-            if (t.isLoaded()) {
-                if (!t.hasError()) {
-                    result.hasVisibleTiles = true;
-                }
-                if ("no-tile".equals(t.getValue("tile-info"))) {
-                    result.hasOverzoomedTiles = true;
-                }
-            } else {
-                result.hasLoadingTiles = true;
-            }
-        }
-        return result;
-    }
-
-    private class DeepTileSet {
-        private final EastNorth topLeft, botRight;
-        private final int minZoom, maxZoom;
-        private final TileSet[] tileSets;
-        private final TileSetInfo[] tileSetInfos;
-        public DeepTileSet(EastNorth topLeft, EastNorth botRight, int minZoom, int maxZoom) {
-            this.topLeft = topLeft;
-            this.botRight = botRight;
-            this.minZoom = minZoom;
-            this.maxZoom = maxZoom;
-            this.tileSets = new TileSet[maxZoom - minZoom + 1];
-            this.tileSetInfos = new TileSetInfo[maxZoom - minZoom + 1];
-        }
-        public TileSet getTileSet(int zoom) {
-            if (zoom < minZoom)
-                return nullTileSet;
-            synchronized (tileSets) {
-                TileSet ts = tileSets[zoom-minZoom];
-                if (ts == null) {
-                    ts = new TileSet(topLeft, botRight, zoom);
-                    tileSets[zoom-minZoom] = ts;
-                }
-                return ts;
-            }
-        }
-
-        public TileSetInfo getTileSetInfo(int zoom) {
-            if (zoom < minZoom)
-                return new TileSetInfo();
-            synchronized (tileSetInfos) {
-                TileSetInfo tsi = tileSetInfos[zoom-minZoom];
-                if (tsi == null) {
-                    tsi = TMSLayer.getTileSetInfo(getTileSet(zoom));
-                    tileSetInfos[zoom-minZoom] = tsi;
-                }
-                return tsi;
-            }
-        }
-    }
-
-    @Override
-    public void paint(Graphics2D g, MapView mv, Bounds bounds) {
-        EastNorth topLeft = mv.getEastNorth(0, 0);
-        EastNorth botRight = mv.getEastNorth(mv.getWidth(), mv.getHeight());
-
-        if (botRight.east() == 0.0 || botRight.north() == 0) {
-            /*Main.debug("still initializing??");*/
-            // probably still initializing
-            return;
-        }
-
-        needRedraw = false;
-
-        int zoom = currentZoomLevel;
-        if (autoZoom) {
-            double pixelScaling = getScaleFactor(zoom);
-            if (pixelScaling > 3 || pixelScaling < 0.7) {
-                zoom = getBestZoom();
-            }
-        }
-
-        DeepTileSet dts = new DeepTileSet(topLeft, botRight, getMinZoomLvl(), zoom);
-        TileSet ts = dts.getTileSet(zoom);
-
-        int displayZoomLevel = zoom;
-
-        boolean noTilesAtZoom = false;
-        if (autoZoom && autoLoad) {
-            // Auto-detection of tilesource maxzoom (currently fully works only for Bing)
-            TileSetInfo tsi = dts.getTileSetInfo(zoom);
-            if (!tsi.hasVisibleTiles && (!tsi.hasLoadingTiles || tsi.hasOverzoomedTiles)) {
-                noTilesAtZoom = true;
-            }
-            // Find highest zoom level with at least one visible tile
-            for (int tmpZoom = zoom; tmpZoom > dts.minZoom; tmpZoom--) {
-                if (dts.getTileSetInfo(tmpZoom).hasVisibleTiles) {
-                    displayZoomLevel = tmpZoom;
-                    break;
-                }
-            }
-            // Do binary search between currentZoomLevel and displayZoomLevel
-            while (zoom > displayZoomLevel && !tsi.hasVisibleTiles && tsi.hasOverzoomedTiles){
-                zoom = (zoom + displayZoomLevel)/2;
-                tsi = dts.getTileSetInfo(zoom);
-            }
-
-            setZoomLevel(zoom);
-
-            // If all tiles at displayZoomLevel is loaded, load all tiles at next zoom level
-            // to make sure there're really no more zoom levels
-            if (zoom == displayZoomLevel && !tsi.hasLoadingTiles && zoom < dts.maxZoom) {
-                zoom++;
-                tsi = dts.getTileSetInfo(zoom);
-            }
-            // When we have overzoomed tiles and all tiles at current zoomlevel is loaded,
-            // load tiles at previovus zoomlevels until we have all tiles on screen is loaded.
-            while (zoom > dts.minZoom && tsi.hasOverzoomedTiles && !tsi.hasLoadingTiles) {
-                zoom--;
-                tsi = dts.getTileSetInfo(zoom);
-            }
-            ts = dts.getTileSet(zoom);
-        } else if (autoZoom) {
-            setZoomLevel(zoom);
-        }
-
-        // Too many tiles... refuse to download
-        if (!ts.tooLarge()) {
-            //Main.debug("size: " + ts.size() + " spanned: " + ts.tilesSpanned());
-            ts.loadAllTiles(false);
-        }
-
-        if (displayZoomLevel != zoom) {
-            ts = dts.getTileSet(displayZoomLevel);
-        }
-
-        g.setColor(Color.DARK_GRAY);
-
-        List<Tile> missedTiles = this.paintTileImages(g, ts, displayZoomLevel, null);
-        int[] otherZooms = { -1, 1, -2, 2, -3, -4, -5};
-        for (int zoomOffset : otherZooms) {
-            if (!autoZoom) {
-                break;
-            }
-            int newzoom = displayZoomLevel + zoomOffset;
-            if (newzoom < MIN_ZOOM) {
-                continue;
-            }
-            if (missedTiles.isEmpty()) {
-                break;
-            }
-            List<Tile> newlyMissedTiles = new LinkedList<>();
-            for (Tile missed : missedTiles) {
-                if ("no-tile".equals(missed.getValue("tile-info")) && zoomOffset > 0) {
-                    // Don't try to paint from higher zoom levels when tile is overzoomed
-                    newlyMissedTiles.add(missed);
-                    continue;
-                }
-                Tile t2 = tempCornerTile(missed);
-                LatLon topLeft2  = tileLatLon(missed);
-                LatLon botRight2 = tileLatLon(t2);
-                TileSet ts2 = new TileSet(topLeft2, botRight2, newzoom);
-                // Instantiating large TileSets is expensive.  If there
-                // are no loaded tiles, don't bother even trying.
-                if (ts2.allLoadedTiles().isEmpty()) {
-                    newlyMissedTiles.add(missed);
-                    continue;
-                }
-                if (ts2.tooLarge()) {
-                    continue;
-                }
-                newlyMissedTiles.addAll(this.paintTileImages(g, ts2, newzoom, missed));
-            }
-            missedTiles = newlyMissedTiles;
-        }
-        if (Main.isDebugEnabled() && !missedTiles.isEmpty()) {
-            Main.debug("still missed "+missedTiles.size()+" in the end");
-        }
-        g.setColor(Color.red);
-        g.setFont(InfoFont);
-
-        // The current zoom tileset should have all of its tiles
-        // due to the loadAllTiles(), unless it to tooLarge()
-        for (Tile t : ts.allExistingTiles()) {
-            this.paintTileText(ts, t, g, mv, displayZoomLevel, t);
-        }
-
-        attribution.paintAttribution(g, mv.getWidth(), mv.getHeight(), getShiftedCoord(topLeft), getShiftedCoord(botRight), displayZoomLevel, this);
-
-        //g.drawString("currentZoomLevel=" + currentZoomLevel, 120, 120);
-        g.setColor(Color.lightGray);
-        if (!autoZoom) {
-            if (ts.insane()) {
-                myDrawString(g, tr("zoom in to load any tiles"), 120, 120);
-            } else if (ts.tooLarge()) {
-                myDrawString(g, tr("zoom in to load more tiles"), 120, 120);
-            } else if (ts.tooSmall()) {
-                myDrawString(g, tr("increase zoom level to see more detail"), 120, 120);
-            }
-        }
-        if (noTilesAtZoom) {
-            myDrawString(g, tr("No tiles at this zoom level"), 120, 120);
-        }
-        if (Main.isDebugEnabled()) {
-            myDrawString(g, tr("Current zoom: {0}", currentZoomLevel), 50, 140);
-            myDrawString(g, tr("Display zoom: {0}", displayZoomLevel), 50, 155);
-            myDrawString(g, tr("Pixel scale: {0}", getScaleFactor(currentZoomLevel)), 50, 170);
-            myDrawString(g, tr("Best zoom: {0}", Math.log(getScaleFactor(1))/Math.log(2)/2+1), 50, 185);
-            if(tileLoader instanceof TMSCachedTileLoader) {
-                TMSCachedTileLoader cachedTileLoader = (TMSCachedTileLoader)tileLoader;
-                int offset = 185;
-                for(String part: cachedTileLoader.getStats().split("\n")) {
-                    myDrawString(g, tr("Cache stats: {0}", part), 50, offset+=15);
-                }
-
-            }
-        }
-    }
-
-    /**
-     * This isn't very efficient, but it is only used when the
-     * user right-clicks on the map.
-     */
-    Tile getTileForPixelpos(int px, int py) {
-        if (Main.isDebugEnabled()) {
-            Main.debug("getTileForPixelpos("+px+", "+py+")");
-        }
-        MapView mv = Main.map.mapView;
-        Point clicked = new Point(px, py);
-        EastNorth topLeft = mv.getEastNorth(0, 0);
-        EastNorth botRight = mv.getEastNorth(mv.getWidth(), mv.getHeight());
-        int z = currentZoomLevel;
-        TileSet ts = new TileSet(topLeft, botRight, z);
-
-        if (!ts.tooLarge()) {
-            ts.loadAllTiles(false); // make sure there are tile objects for all tiles
-        }
-        Tile clickedTile = null;
-        for (Tile t1 : ts.allExistingTiles()) {
-            Tile t2 = tempCornerTile(t1);
-            Rectangle r = new Rectangle(pixelPos(t1));
-            r.add(pixelPos(t2));
-            if (Main.isDebugEnabled()) {
-                Main.debug("r: " + r + " clicked: " + clicked);
-            }
-            if (!r.contains(clicked)) {
-                continue;
-            }
-            clickedTile  = t1;
-            break;
-        }
-        if (clickedTile == null)
-            return null;
-        /*Main.debug("Clicked on tile: " + clickedTile.getXtile() + " " + clickedTile.getYtile() +
-                " currentZoomLevel: " + currentZoomLevel);*/
-        return clickedTile;
-    }
-
-    @Override
-    public Action[] getMenuEntries() {
-        return new Action[] {
-                LayerListDialog.getInstance().createShowHideLayerAction(),
-                LayerListDialog.getInstance().createDeleteLayerAction(),
-                SeparatorLayerAction.INSTANCE,
-                // color,
-                new OffsetAction(),
-                new RenameLayerAction(this.getAssociatedFile(), this),
-                SeparatorLayerAction.INSTANCE,
-                new LayerListPopup.InfoAction(this) };
-    }
-
-    @Override
-    public String getToolTipText() {
-        return tr("TMS layer ({0}), downloading in zoom {1}", getName(), currentZoomLevel);
-    }
-
-    @Override
-    public void visitBoundingBox(BoundingXYVisitor v) {
-    }
-
-    @Override
-    public boolean isChanged() {
-        return needRedraw;
-    }
-
-    @Override
-    public final boolean isProjectionSupported(Projection proj) {
-        return "EPSG:3857".equals(proj.toCode()) || "EPSG:4326".equals(proj.toCode());
-    }
-
-    @Override
-    public final String nameSupportedProjections() {
-        return tr("EPSG:4326 and Mercator projection are supported");
-    }
 }
diff --git a/src/org/openstreetmap/josm/gui/layer/ValidatorLayer.java b/src/org/openstreetmap/josm/gui/layer/ValidatorLayer.java
index 284f531..1f0c0be 100644
--- a/src/org/openstreetmap/josm/gui/layer/ValidatorLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/ValidatorLayer.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.layer;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -10,6 +10,7 @@ import java.util.List;
 import javax.swing.Action;
 import javax.swing.Icon;
 import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.TreeNode;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.RenameLayerAction;
@@ -68,11 +69,11 @@ public class ValidatorLayer extends Layer implements LayerChangeListener {
 
         DefaultMutableTreeNode severity = (DefaultMutableTreeNode) root.getLastChild();
         while (severity != null) {
-            Enumeration<DefaultMutableTreeNode> errorMessages = severity.breadthFirstEnumeration();
+            Enumeration<TreeNode> errorMessages = severity.breadthFirstEnumeration();
             while (errorMessages.hasMoreElements()) {
-                Object tn = errorMessages.nextElement().getUserObject();
+                Object tn = ((DefaultMutableTreeNode) errorMessages.nextElement()).getUserObject();
                 if (tn instanceof TestError) {
-                    paintVisitor.visit(((TestError) tn));
+                    paintVisitor.visit((TestError) tn);
                 }
             }
 
@@ -139,10 +140,6 @@ public class ValidatorLayer extends Layer implements LayerChangeListener {
     }
 
     @Override
-    public void destroy() {
-    }
-
-    @Override
     public void activeLayerChange(Layer oldLayer, Layer newLayer) {
     }
 
diff --git a/src/org/openstreetmap/josm/gui/layer/WMSLayer.java b/src/org/openstreetmap/josm/gui/layer/WMSLayer.java
index 19ee7b2..6b1d1e9 100644
--- a/src/org/openstreetmap/josm/gui/layer/WMSLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/WMSLayer.java
@@ -3,885 +3,84 @@ package org.openstreetmap.josm.gui.layer;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
 
-import java.awt.Component;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.Image;
-import java.awt.Point;
 import java.awt.event.ActionEvent;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.awt.image.BufferedImage;
-import java.awt.image.ImageObserver;
-import java.io.Externalizable;
-import java.io.File;
-import java.io.IOException;
-import java.io.InvalidClassException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
 import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
+import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
-import java.util.concurrent.locks.Condition;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
+import java.util.TreeSet;
 
 import javax.swing.AbstractAction;
 import javax.swing.Action;
-import javax.swing.JCheckBoxMenuItem;
-import javax.swing.JMenuItem;
-import javax.swing.JOptionPane;
 
-import org.openstreetmap.gui.jmapviewer.AttributionSupport;
+import org.apache.commons.jcs.access.CacheAccess;
+import org.openstreetmap.gui.jmapviewer.interfaces.TileLoader;
+import org.openstreetmap.gui.jmapviewer.interfaces.TileSource;
+import org.openstreetmap.gui.jmapviewer.tilesources.AbstractTMSTileSource;
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.actions.SaveActionBase;
-import org.openstreetmap.josm.data.Bounds;
-import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
-import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
-import org.openstreetmap.josm.data.ProjectionBounds;
-import org.openstreetmap.josm.data.coor.EastNorth;
-import org.openstreetmap.josm.data.coor.LatLon;
-import org.openstreetmap.josm.data.imagery.GeorefImage;
-import org.openstreetmap.josm.data.imagery.GeorefImage.State;
+import org.openstreetmap.josm.data.cache.BufferedImageCacheEntry;
 import org.openstreetmap.josm.data.imagery.ImageryInfo;
 import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryType;
 import org.openstreetmap.josm.data.imagery.ImageryLayerInfo;
-import org.openstreetmap.josm.data.imagery.WmsCache;
-import org.openstreetmap.josm.data.imagery.types.ObjectFactory;
-import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
+import org.openstreetmap.josm.data.imagery.TemplatedWMSTileSource;
+import org.openstreetmap.josm.data.imagery.WMSCachedTileLoader;
 import org.openstreetmap.josm.data.preferences.BooleanProperty;
 import org.openstreetmap.josm.data.preferences.IntegerProperty;
 import org.openstreetmap.josm.data.projection.Projection;
-import org.openstreetmap.josm.gui.MapView;
-import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
-import org.openstreetmap.josm.gui.dialogs.LayerListDialog;
-import org.openstreetmap.josm.gui.dialogs.LayerListPopup;
-import org.openstreetmap.josm.gui.progress.ProgressMonitor;
-import org.openstreetmap.josm.io.WMSLayerImporter;
-import org.openstreetmap.josm.io.imagery.HTMLGrabber;
-import org.openstreetmap.josm.io.imagery.WMSException;
-import org.openstreetmap.josm.io.imagery.WMSGrabber;
-import org.openstreetmap.josm.io.imagery.WMSRequest;
-import org.openstreetmap.josm.tools.ImageProvider;
 
 /**
  * This is a layer that grabs the current screen from an WMS server. The data
  * fetched this way is tiled and managed to the disc to reduce server load.
+ *
  */
-public class WMSLayer extends ImageryLayer implements ImageObserver, PreferenceChangedListener, Externalizable {
+public class WMSLayer extends AbstractCachedTileSourceLayer {
+    private static final String PREFERENCE_PREFIX   = "imagery.wms.";
 
-    public static class PrecacheTask {
-        private final ProgressMonitor progressMonitor;
-        private volatile int totalCount;
-        private volatile int processedCount;
-        private volatile boolean isCancelled;
+    /** default tile size for WMS Layer */
+    public static final IntegerProperty PROP_IMAGE_SIZE = new IntegerProperty(PREFERENCE_PREFIX + "imageSize", 512);
 
-        public PrecacheTask(ProgressMonitor progressMonitor) {
-            this.progressMonitor = progressMonitor;
-        }
-
-        public boolean isFinished() {
-            return totalCount == processedCount;
-        }
-
-        public int getTotalCount() {
-            return totalCount;
-        }
-
-        public void cancel() {
-            isCancelled = true;
-        }
-    }
-
-    // Fake reference to keep build scripts from removing ObjectFactory class. This class is not used directly but it's necessary for jaxb to work
-    @SuppressWarnings("unused")
-    private static final ObjectFactory OBJECT_FACTORY = null;
-
-    // these values correspond to the zoom levels used throughout OSM and are in meters/pixel from zoom level 0 to 18.
-    // taken from http://wiki.openstreetmap.org/wiki/Zoom_levels
-    private static final Double[] snapLevels = { 156412.0, 78206.0, 39103.0, 19551.0, 9776.0, 4888.0,
-        2444.0, 1222.0, 610.984, 305.492, 152.746, 76.373, 38.187, 19.093, 9.547, 4.773, 2.387, 1.193, 0.596 };
+    /** should WMS layer autozoom in default mode */
+    public static final BooleanProperty PROP_DEFAULT_AUTOZOOM = new BooleanProperty(PREFERENCE_PREFIX + "default_autozoom", true);
 
-    public static final BooleanProperty PROP_ALPHA_CHANNEL = new BooleanProperty("imagery.wms.alpha_channel", true);
-    public static final IntegerProperty PROP_SIMULTANEOUS_CONNECTIONS = new IntegerProperty("imagery.wms.simultaneousConnections", 3);
-    public static final BooleanProperty PROP_OVERLAP = new BooleanProperty("imagery.wms.overlap", false);
-    public static final IntegerProperty PROP_OVERLAP_EAST = new IntegerProperty("imagery.wms.overlapEast", 14);
-    public static final IntegerProperty PROP_OVERLAP_NORTH = new IntegerProperty("imagery.wms.overlapNorth", 4);
-    public static final IntegerProperty PROP_IMAGE_SIZE = new IntegerProperty("imagery.wms.imageSize", 500);
-    public static final BooleanProperty PROP_DEFAULT_AUTOZOOM = new BooleanProperty("imagery.wms.default_autozoom", true);
+    /** limit of concurrent connections to WMS tile source (per source) */
+    public static final IntegerProperty THREAD_LIMIT = new IntegerProperty(PREFERENCE_PREFIX + "simultaneousConnections", 3);
 
-    public int messageNum = 5; //limit for messages per layer
-    protected double resolution;
-    protected String resolutionText;
-    protected int imageSize;
-    protected int dax = 10;
-    protected int day = 10;
-    protected int daStep = 5;
-    protected int minZoom = 3;
+    private static final String CACHE_REGION_NAME = "WMS";
 
-    protected GeorefImage[][] images;
-    protected static final int serializeFormatVersion = 5;
-    protected boolean autoDownloadEnabled = true;
-    protected boolean autoResolutionEnabled = PROP_DEFAULT_AUTOZOOM.get();
-    protected boolean settingsChanged;
-    public transient WmsCache cache;
-    private transient AttributionSupport attribution = new AttributionSupport();
-
-    // Image index boundary for current view
-    private volatile int bminx;
-    private volatile int bminy;
-    private volatile int bmaxx;
-    private volatile int bmaxy;
-    private volatile int leftEdge;
-    private volatile int bottomEdge;
-
-    // Request queue
-    private final transient List<WMSRequest> requestQueue = new ArrayList<>();
-    private final transient List<WMSRequest> finishedRequests = new ArrayList<>();
-    /**
-     * List of request currently being processed by download threads
-     */
-    private final transient List<WMSRequest> processingRequests = new ArrayList<>();
-    private final transient Lock requestQueueLock = new ReentrantLock();
-    private final transient Condition queueEmpty = requestQueueLock.newCondition();
-    private final transient List<WMSGrabber> grabbers = new ArrayList<>();
-    private final transient List<Thread> grabberThreads = new ArrayList<>();
-    private boolean canceled;
-
-    /** set to true if this layer uses an invalid base url */
-    private boolean usesInvalidUrl = false;
-    /** set to true if the user confirmed to use an potentially invalid WMS base url */
-    private boolean isInvalidUrlConfirmed = false;
-
-    /**
-     * Constructs a new {@code WMSLayer}.
-     */
-    public WMSLayer() {
-        this(new ImageryInfo(tr("Blank Layer")));
-    }
+    private Set<String> supportedProjections;
 
     /**
      * Constructs a new {@code WMSLayer}.
+     * @param info ImageryInfo description of the layer
      */
     public WMSLayer(ImageryInfo info) {
         super(info);
-        imageSize = PROP_IMAGE_SIZE.get();
-        setBackgroundLayer(true); /* set global background variable */
-        initializeImages();
-
-        attribution.initialize(this.info);
+        this.supportedProjections = new TreeSet<>(info.getServerProjections());
+        this.autoZoom = PROP_DEFAULT_AUTOZOOM.get();
 
-        Main.pref.addPreferenceChangeListener(this);
     }
 
     @Override
-    public void hookUpMapView() {
-        if (info.getUrl() != null) {
-            startGrabberThreads();
-
-            for (WMSLayer layer: Main.map.mapView.getLayersOfType(WMSLayer.class)) {
-                if (layer.getInfo().getUrl().equals(info.getUrl())) {
-                    cache = layer.cache;
-                    break;
-                }
-            }
-            if (cache == null) {
-                cache = new WmsCache(info.getUrl(), imageSize);
-                cache.loadIndex();
-            }
-        }
-
-        // if automatic resolution is enabled, ensure that the first zoom level
-        // is already snapped. Otherwise it may load tiles that will never get
-        // used again when zooming.
-        updateResolutionSetting(this, autoResolutionEnabled);
-
-        final MouseAdapter adapter = new MouseAdapter() {
-            @Override
-            public void mouseClicked(MouseEvent e) {
-                if (!isVisible()) return;
-                if (e.getButton() == MouseEvent.BUTTON1) {
-                    attribution.handleAttribution(e.getPoint(), true);
-                }
-            }
-        };
-        Main.map.mapView.addMouseListener(adapter);
-
-        MapView.addLayerChangeListener(new LayerChangeListener() {
-            @Override
-            public void activeLayerChange(Layer oldLayer, Layer newLayer) {
-                //
-            }
-
-            @Override
-            public void layerAdded(Layer newLayer) {
-                //
-            }
-
-            @Override
-            public void layerRemoved(Layer oldLayer) {
-                if (oldLayer == WMSLayer.this) {
-                    Main.map.mapView.removeMouseListener(adapter);
-                    MapView.removeLayerChangeListener(this);
-                }
-            }
-        });
-    }
-
-    public void doSetName(String name) {
-        setName(name);
-        info.setName(name);
-    }
-
-    public boolean hasAutoDownload(){
-        return autoDownloadEnabled;
-    }
-
-    public void setAutoDownload(boolean val) {
-        autoDownloadEnabled = val;
-    }
-
-    public boolean isAutoResolution() {
-        return autoResolutionEnabled;
-    }
-
-    public void setAutoResolution(boolean val) {
-        autoResolutionEnabled = val;
-    }
-
-    public void downloadAreaToCache(PrecacheTask precacheTask, List<LatLon> points, double bufferX, double bufferY) {
-        Set<Point> requestedTiles = new HashSet<>();
-        for (LatLon point: points) {
-            EastNorth minEn = Main.getProjection().latlon2eastNorth(new LatLon(point.lat() - bufferY, point.lon() - bufferX));
-            EastNorth maxEn = Main.getProjection().latlon2eastNorth(new LatLon(point.lat() + bufferY, point.lon() + bufferX));
-            int minX = getImageXIndex(minEn.east());
-            int maxX = getImageXIndex(maxEn.east());
-            int minY = getImageYIndex(minEn.north());
-            int maxY = getImageYIndex(maxEn.north());
-
-            for (int x=minX; x<=maxX; x++) {
-                for (int y=minY; y<=maxY; y++) {
-                    requestedTiles.add(new Point(x, y));
-                }
-            }
-        }
-
-        for (Point p: requestedTiles) {
-            addRequest(new WMSRequest(p.x, p.y, info.getPixelPerDegree(), true, false, precacheTask));
-        }
-
-        precacheTask.progressMonitor.setTicksCount(precacheTask.getTotalCount());
-        precacheTask.progressMonitor.setCustomText(tr("Downloaded {0}/{1} tiles", 0, precacheTask.totalCount));
+    public Action[] getMenuEntries() {
+        List<Action> ret = new ArrayList<>();
+        ret.addAll(Arrays.asList(super.getMenuEntries()));
+        ret.add(SeparatorLayerAction.INSTANCE);
+        ret.add(new LayerSaveAction(this));
+        ret.add(new LayerSaveAsAction(this));
+        ret.add(new BookmarkWmsAction());
+        return ret.toArray(new Action[]{});
     }
 
     @Override
-    public void destroy() {
-        super.destroy();
-        cancelGrabberThreads(false);
-        Main.pref.removePreferenceChangeListener(this);
-        if (cache != null) {
-            cache.saveIndex();
-        }
-    }
-
-    public final void initializeImages() {
-        GeorefImage[][] old = images;
-        images = new GeorefImage[dax][day];
-        if (old != null) {
-            for (GeorefImage[] row : old) {
-                for (GeorefImage image : row) {
-                    images[modulo(image.getXIndex(), dax)][modulo(image.getYIndex(), day)] = image;
-                }
-            }
-        }
-        for(int x = 0; x<dax; ++x) {
-            for(int y = 0; y<day; ++y) {
-                if (images[x][y] == null) {
-                    images[x][y]= new GeorefImage(this);
-                }
-            }
-        }
-    }
-
-    @Override public ImageryInfo getInfo() {
-        return info;
-    }
-
-    @Override public String getToolTipText() {
-        if(autoDownloadEnabled)
-            return tr("WMS layer ({0}), automatically downloading in zoom {1}", getName(), resolutionText);
-        else
-            return tr("WMS layer ({0}), downloading in zoom {1}", getName(), resolutionText);
-    }
-
-    private int modulo (int a, int b) {
-        return a % b >= 0 ? a%b : a%b+b;
-    }
-
-    private boolean zoomIsTooBig() {
-        //don't download when it's too outzoomed
-        return info.getPixelPerDegree() / getPPD() > minZoom;
-    }
-
-    @Override public void paint(Graphics2D g, final MapView mv, Bounds b) {
-        if(info.getUrl() == null || (usesInvalidUrl && !isInvalidUrlConfirmed)) return;
-
-        if (autoResolutionEnabled && getBestZoom() != mv.getDist100Pixel()) {
-            changeResolution(this, true);
-        }
-
-        settingsChanged = false;
-
-        ProjectionBounds bounds = mv.getProjectionBounds();
-        bminx= getImageXIndex(bounds.minEast);
-        bminy= getImageYIndex(bounds.minNorth);
-        bmaxx= getImageXIndex(bounds.maxEast);
-        bmaxy= getImageYIndex(bounds.maxNorth);
-
-        leftEdge = (int)(bounds.minEast * getPPD());
-        bottomEdge = (int)(bounds.minNorth * getPPD());
-
-        if (zoomIsTooBig()) {
-            for(int x = 0; x<images.length; ++x) {
-                for(int y = 0; y<images[0].length; ++y) {
-                    GeorefImage image = images[x][y];
-                    image.paint(g, mv, image.getXIndex(), image.getYIndex(), leftEdge, bottomEdge);
-                }
-            }
-        } else {
-            downloadAndPaintVisible(g, mv, false);
-        }
-
-        attribution.paintAttribution(g, mv.getWidth(), mv.getHeight(), null, null, 0, this);
-    }
-
-    @Override
-    public void setOffset(double dx, double dy) {
-        super.setOffset(dx, dy);
-        settingsChanged = true;
-    }
-
-    public int getImageXIndex(double coord) {
-        return (int)Math.floor( ((coord - dx) * info.getPixelPerDegree()) / imageSize);
-    }
-
-    public int getImageYIndex(double coord) {
-        return (int)Math.floor( ((coord - dy) * info.getPixelPerDegree()) / imageSize);
-    }
-
-    public int getImageX(int imageIndex) {
-        return (int)(imageIndex * imageSize * (getPPD() / info.getPixelPerDegree()) + dx * getPPD());
-    }
-
-    public int getImageY(int imageIndex) {
-        return (int)(imageIndex * imageSize * (getPPD() / info.getPixelPerDegree()) + dy * getPPD());
-    }
-
-    public int getImageWidth(int xIndex) {
-        return getImageX(xIndex + 1) - getImageX(xIndex);
-    }
-
-    public int getImageHeight(int yIndex) {
-        return getImageY(yIndex + 1) - getImageY(yIndex);
-    }
-
-    /**
-     *
-     * @return Size of image in original zoom
-     */
-    public int getBaseImageWidth() {
-        int overlap = PROP_OVERLAP.get() ? (PROP_OVERLAP_EAST.get() * imageSize / 100) : 0;
-        return imageSize + overlap;
-    }
-
-    /**
-     *
-     * @return Size of image in original zoom
-     */
-    public int getBaseImageHeight() {
-        int overlap = PROP_OVERLAP.get() ? (PROP_OVERLAP_NORTH.get() * imageSize / 100) : 0;
-        return imageSize + overlap;
-    }
-
-    public int getImageSize() {
-        return imageSize;
-    }
-
-    public boolean isOverlapEnabled() {
-        return WMSLayer.PROP_OVERLAP.get() && (WMSLayer.PROP_OVERLAP_EAST.get() > 0 || WMSLayer.PROP_OVERLAP_NORTH.get() > 0);
-    }
-
-    /**
-     *
-     * @return When overlapping is enabled, return visible part of tile. Otherwise return original image
-     */
-    public BufferedImage normalizeImage(BufferedImage img) {
-        if (isOverlapEnabled()) {
-            BufferedImage copy = img;
-            img = new BufferedImage(imageSize, imageSize, copy.getType());
-            img.createGraphics().drawImage(copy, 0, 0, imageSize, imageSize,
-                    0, copy.getHeight() - imageSize, imageSize, copy.getHeight(), null);
-        }
-        return img;
-    }
-
-    /**
-     *
-     * @param xIndex
-     * @param yIndex
-     * @return Real EastNorth of given tile. dx/dy is not counted in
-     */
-    public EastNorth getEastNorth(int xIndex, int yIndex) {
-        return new EastNorth((xIndex * imageSize) / info.getPixelPerDegree(), (yIndex * imageSize) / info.getPixelPerDegree());
-    }
-
-    protected void downloadAndPaintVisible(Graphics g, final MapView mv, boolean real){
-
-        int newDax = dax;
-        int newDay = day;
-
-        if (bmaxx - bminx >= dax || bmaxx - bminx < dax - 2 * daStep) {
-            newDax = ((bmaxx - bminx) / daStep + 1) * daStep;
-        }
-
-        if (bmaxy - bminy >= day || bmaxy - bminx < day - 2 * daStep) {
-            newDay = ((bmaxy - bminy) / daStep + 1) * daStep;
-        }
-
-        if (newDax != dax || newDay != day) {
-            dax = newDax;
-            day = newDay;
-            initializeImages();
-        }
-
-        for(int x = bminx; x<=bmaxx; ++x) {
-            for(int y = bminy; y<=bmaxy; ++y){
-                images[modulo(x,dax)][modulo(y,day)].changePosition(x, y);
-            }
-        }
-
-        gatherFinishedRequests();
-        Set<ProjectionBounds> areaToCache = new HashSet<>();
-
-        for(int x = bminx; x<=bmaxx; ++x) {
-            for(int y = bminy; y<=bmaxy; ++y){
-                GeorefImage img = images[modulo(x,dax)][modulo(y,day)];
-                if (!img.paint(g, mv, x, y, leftEdge, bottomEdge)) {
-                    addRequest(new WMSRequest(x, y, info.getPixelPerDegree(), real, true));
-                    areaToCache.add(new ProjectionBounds(getEastNorth(x, y), getEastNorth(x + 1, y + 1)));
-                } else if (img.getState() == State.PARTLY_IN_CACHE && autoDownloadEnabled) {
-                    addRequest(new WMSRequest(x, y, info.getPixelPerDegree(), real, false));
-                    areaToCache.add(new ProjectionBounds(getEastNorth(x, y), getEastNorth(x + 1, y + 1)));
-                }
-            }
-        }
-        if (cache != null) {
-            cache.setAreaToCache(areaToCache);
-        }
-    }
-
-    @Override public void visitBoundingBox(BoundingXYVisitor v) {
-        for(int x = 0; x<dax; ++x) {
-            for(int y = 0; y<day; ++y)
-                if(images[x][y].getImage() != null){
-                    v.visit(images[x][y].getMin());
-                    v.visit(images[x][y].getMax());
-                }
-        }
-    }
-
-    @Override public Action[] getMenuEntries() {
-        return new Action[]{
-                LayerListDialog.getInstance().createActivateLayerAction(this),
-                LayerListDialog.getInstance().createShowHideLayerAction(),
-                LayerListDialog.getInstance().createDeleteLayerAction(),
-                SeparatorLayerAction.INSTANCE,
-                new OffsetAction(),
-                new LayerSaveAction(this),
-                new LayerSaveAsAction(this),
-                new BookmarkWmsAction(),
-                SeparatorLayerAction.INSTANCE,
-                new StartStopAction(),
-                new ToggleAlphaAction(),
-                new ToggleAutoResolutionAction(),
-                new ChangeResolutionAction(),
-                new ZoomToNativeResolution(),
-                new ReloadErrorTilesAction(),
-                new DownloadAction(),
-                SeparatorLayerAction.INSTANCE,
-                new LayerListPopup.InfoAction(this)
-        };
-    }
-
-    public GeorefImage findImage(EastNorth eastNorth) {
-        int xIndex = getImageXIndex(eastNorth.east());
-        int yIndex = getImageYIndex(eastNorth.north());
-        GeorefImage result = images[modulo(xIndex, dax)][modulo(yIndex, day)];
-        if (result.getXIndex() == xIndex && result.getYIndex() == yIndex)
-            return result;
-        else
-            return null;
-    }
-
-    /**
-     *
-     * @param request
-     * @return -1 if request is no longer needed, otherwise priority of request (lower number <=> more important request)
-     */
-    private int getRequestPriority(WMSRequest request) {
-        if (request.getPixelPerDegree() != info.getPixelPerDegree())
-            return -1;
-        if (bminx > request.getXIndex()
-                || bmaxx < request.getXIndex()
-                || bminy > request.getYIndex()
-                || bmaxy < request.getYIndex())
-            return -1;
-
-        MouseEvent lastMEvent = Main.map.mapView.lastMEvent;
-        EastNorth cursorEastNorth = Main.map.mapView.getEastNorth(lastMEvent.getX(), lastMEvent.getY());
-        int mouseX = getImageXIndex(cursorEastNorth.east());
-        int mouseY = getImageYIndex(cursorEastNorth.north());
-        int dx = request.getXIndex() - mouseX;
-        int dy = request.getYIndex() - mouseY;
-
-        return 1 + dx * dx + dy * dy;
-    }
-
-    private void sortRequests(boolean localOnly) {
-        Iterator<WMSRequest> it = requestQueue.iterator();
-        while (it.hasNext()) {
-            WMSRequest item = it.next();
-
-            if (item.getPrecacheTask() != null && item.getPrecacheTask().isCancelled) {
-                it.remove();
-                continue;
-            }
-
-            int priority = getRequestPriority(item);
-            if (priority == -1 && item.isPrecacheOnly()) {
-                priority = Integer.MAX_VALUE; // Still download, but prefer requests in current view
-            }
-
-            if (localOnly && !item.hasExactMatch()) {
-                priority = Integer.MAX_VALUE; // Only interested in tiles that can be loaded from file immediately
-            }
-
-            if (       priority == -1
-                    || finishedRequests.contains(item)
-                    || processingRequests.contains(item)) {
-                it.remove();
-            } else {
-                item.setPriority(priority);
-            }
-        }
-        Collections.sort(requestQueue);
-    }
-
-    public WMSRequest getRequest(boolean localOnly) {
-        requestQueueLock.lock();
-        try {
-            sortRequests(localOnly);
-            while (!canceled && (requestQueue.isEmpty() || (localOnly && !requestQueue.get(0).hasExactMatch()))) {
-                try {
-                    queueEmpty.await();
-                    sortRequests(localOnly);
-                } catch (InterruptedException e) {
-                    Main.warn("InterruptedException in "+getClass().getSimpleName()+" during WMS request");
-                }
-            }
-
-            if (canceled)
-                return null;
-            else {
-                WMSRequest request = requestQueue.remove(0);
-                processingRequests.add(request);
-                return request;
-            }
-
-        } finally {
-            requestQueueLock.unlock();
-        }
-    }
-
-    public void finishRequest(WMSRequest request) {
-        requestQueueLock.lock();
-        try {
-            PrecacheTask task = request.getPrecacheTask();
-            if (task != null) {
-                task.processedCount++;
-                if (!task.progressMonitor.isCanceled()) {
-                    task.progressMonitor.worked(1);
-                    task.progressMonitor.setCustomText(tr("Downloaded {0}/{1} tiles", task.processedCount, task.totalCount));
-                }
-            }
-            processingRequests.remove(request);
-            if (request.getState() != null && !request.isPrecacheOnly()) {
-                finishedRequests.add(request);
-                if (Main.isDisplayingMapView()) {
-                    Main.map.mapView.repaint();
-                }
-            }
-        } finally {
-            requestQueueLock.unlock();
-        }
-    }
-
-    public void addRequest(WMSRequest request) {
-        requestQueueLock.lock();
-        try {
-
-            if (cache != null) {
-                ProjectionBounds b = getBounds(request);
-                // Checking for exact match is fast enough, no need to do it in separated thread
-                request.setHasExactMatch(cache.hasExactMatch(Main.getProjection(), request.getPixelPerDegree(), b.minEast, b.minNorth));
-                if (request.isPrecacheOnly() && request.hasExactMatch())
-                    return; // We already have this tile cached
-            }
-
-            if (!requestQueue.contains(request) && !finishedRequests.contains(request) && !processingRequests.contains(request)) {
-                requestQueue.add(request);
-                if (request.getPrecacheTask() != null) {
-                    request.getPrecacheTask().totalCount++;
-                }
-                queueEmpty.signalAll();
-            }
-        } finally {
-            requestQueueLock.unlock();
-        }
-    }
-
-    public boolean requestIsVisible(WMSRequest request) {
-        return bminx <= request.getXIndex() && bmaxx >= request.getXIndex() && bminy <= request.getYIndex() && bmaxy >= request.getYIndex();
-    }
-
-    private void gatherFinishedRequests() {
-        requestQueueLock.lock();
-        try {
-            for (WMSRequest request: finishedRequests) {
-                GeorefImage img = images[modulo(request.getXIndex(),dax)][modulo(request.getYIndex(),day)];
-                if (img.equalPosition(request.getXIndex(), request.getYIndex())) {
-                    WMSException we = request.getException();
-                    img.changeImage(request.getState(), request.getImage(), we != null ? we.getMessage() : null);
-                }
-            }
-        } finally {
-            requestQueueLock.unlock();
-            finishedRequests.clear();
-        }
-    }
-
-    public class DownloadAction extends AbstractAction {
-        /**
-         * Constructs a new {@code DownloadAction}.
-         */
-        public DownloadAction() {
-            super(tr("Download visible tiles"));
-        }
-        @Override
-        public void actionPerformed(ActionEvent ev) {
-            if (zoomIsTooBig()) {
-                JOptionPane.showMessageDialog(
-                        Main.parent,
-                        tr("The requested area is too big. Please zoom in a little, or change resolution"),
-                        tr("Error"),
-                        JOptionPane.ERROR_MESSAGE
-                        );
-            } else {
-                downloadAndPaintVisible(Main.map.mapView.getGraphics(), Main.map.mapView, true);
-            }
-        }
-    }
-
-    /**
-     * Finds the most suitable resolution for the current zoom level, but prefers
-     * higher resolutions. Snaps to values defined in snapLevels.
-     * @return best zoom level
-     */
-    private static double getBestZoom() {
-        // not sure why getDist100Pixel returns values corresponding to
-        // the snapLevels, which are in meters per pixel. It works, though.
-        double dist = Main.map.mapView.getDist100Pixel();
-        for(int i = snapLevels.length-2; i >= 0; i--) {
-            if(snapLevels[i+1]/3 + snapLevels[i]*2/3 > dist)
-                return snapLevels[i+1];
-        }
-        return snapLevels[0];
-    }
-
-    /**
-     * Updates the given layer’s resolution settings to the current zoom level. Does
-     * not update existing tiles, only new ones will be subject to the new settings.
-     *
-     * @param layer
-     * @param snap  Set to true if the resolution should snap to certain values instead of
-     *              matching the current zoom level perfectly
-     */
-    private static void updateResolutionSetting(WMSLayer layer, boolean snap) {
-        if(snap) {
-            layer.resolution = getBestZoom();
-            layer.resolutionText = MapView.getDistText(layer.resolution);
-        } else {
-            layer.resolution = Main.map.mapView.getDist100Pixel();
-            layer.resolutionText = Main.map.mapView.getDist100PixelText();
-        }
-        layer.info.setPixelPerDegree(layer.getPPD());
-    }
-
-    /**
-     * Updates the given layer’s resolution settings to the current zoom level and
-     * updates existing tiles. If round is true, tiles will be updated gradually, if
-     * false they will be removed instantly (and redrawn only after the new resolution
-     * image has been loaded).
-     * @param layer
-     * @param snap  Set to true if the resolution should snap to certain values instead of
-     *              matching the current zoom level perfectly
-     */
-    private static void changeResolution(WMSLayer layer, boolean snap) {
-        updateResolutionSetting(layer, snap);
-
-        layer.settingsChanged = true;
-
-        // Don’t move tiles off screen when the resolution is rounded. This
-        // prevents some flickering when zooming with auto-resolution enabled
-        // and instead gradually updates each tile.
-        if(!snap) {
-            for(int x = 0; x<layer.dax; ++x) {
-                for(int y = 0; y<layer.day; ++y) {
-                    layer.images[x][y].changePosition(-1, -1);
-                }
-            }
-        }
-    }
-
-    public static class ChangeResolutionAction extends AbstractAction implements LayerAction {
-
-        /**
-         * Constructs a new {@code ChangeResolutionAction}
-         */
-        public ChangeResolutionAction() {
-            super(tr("Change resolution"));
-        }
-
-        @Override
-        public void actionPerformed(ActionEvent ev) {
-            List<Layer> layers = LayerListDialog.getInstance().getModel().getSelectedLayers();
-            for (Layer l: layers) {
-                changeResolution((WMSLayer) l, false);
-            }
-            Main.map.mapView.repaint();
-        }
-
-        @Override
-        public boolean supportLayers(List<Layer> layers) {
-            for (Layer l: layers) {
-                if (!(l instanceof WMSLayer))
-                    return false;
-            }
-            return true;
-        }
-
-        @Override
-        public Component createMenuComponent() {
-            return new JMenuItem(this);
-        }
-    }
-
-    public class ReloadErrorTilesAction extends AbstractAction {
-        /**
-         * Constructs a new {@code ReloadErrorTilesAction}.
-         */
-        public ReloadErrorTilesAction() {
-            super(tr("Reload erroneous tiles"));
-        }
-        @Override
-        public void actionPerformed(ActionEvent ev) {
-            // Delete small files, because they're probably blank tiles.
-            // See #2307
-            cache.cleanSmallFiles(4096);
-
-            for (int x = 0; x < dax; ++x) {
-                for (int y = 0; y < day; ++y) {
-                    GeorefImage img = images[modulo(x,dax)][modulo(y,day)];
-                    if(img.getState() == State.FAILED){
-                        addRequest(new WMSRequest(img.getXIndex(), img.getYIndex(), info.getPixelPerDegree(), true, false));
-                    }
-                }
-            }
-        }
-    }
-
-    public class ToggleAlphaAction extends AbstractAction implements LayerAction {
-        /**
-         * Constructs a new {@code ToggleAlphaAction}.
-         */
-        public ToggleAlphaAction() {
-            super(tr("Alpha channel"));
-        }
-        @Override
-        public void actionPerformed(ActionEvent ev) {
-            JCheckBoxMenuItem checkbox = (JCheckBoxMenuItem) ev.getSource();
-            boolean alphaChannel = checkbox.isSelected();
-            PROP_ALPHA_CHANNEL.put(alphaChannel);
-            Main.info("WMS Alpha channel changed to "+alphaChannel);
-
-            // clear all resized cached instances and repaint the layer
-            for (int x = 0; x < dax; ++x) {
-                for (int y = 0; y < day; ++y) {
-                    GeorefImage img = images[modulo(x, dax)][modulo(y, day)];
-                    img.flushResizedCachedInstance();
-                    BufferedImage bi = img.getImage();
-                    // Completely erases images for which transparency has been forced,
-                    // or images that should be forced now, as they need to be recreated
-                    if (ImageProvider.isTransparencyForced(bi) || ImageProvider.hasTransparentColor(bi)) {
-                        img.resetImage();
-                    }
-                }
-            }
-            Main.map.mapView.repaint();
-        }
-
-        @Override
-        public Component createMenuComponent() {
-            JCheckBoxMenuItem item = new JCheckBoxMenuItem(this);
-            item.setSelected(PROP_ALPHA_CHANNEL.get());
-            return item;
-        }
-
-        @Override
-        public boolean supportLayers(List<Layer> layers) {
-            return layers.size() == 1 && layers.get(0) instanceof WMSLayer;
-        }
-    }
-
-    public class ToggleAutoResolutionAction extends AbstractAction implements LayerAction {
-
-        /**
-         * Constructs a new {@code ToggleAutoResolutionAction}.
-         */
-        public ToggleAutoResolutionAction() {
-            super(tr("Automatically change resolution"));
-        }
-
-        @Override
-        public void actionPerformed(ActionEvent ev) {
-            JCheckBoxMenuItem checkbox = (JCheckBoxMenuItem) ev.getSource();
-            autoResolutionEnabled = checkbox.isSelected();
-        }
-
-        @Override
-        public Component createMenuComponent() {
-            JCheckBoxMenuItem item = new JCheckBoxMenuItem(this);
-            item.setSelected(autoResolutionEnabled);
-            return item;
-        }
-
-        @Override
-        public boolean supportLayers(List<Layer> layers) {
-            return layers.size() == 1 && layers.get(0) instanceof WMSLayer;
+    protected AbstractTMSTileSource getTileSource(ImageryInfo info) {
+        if (info.getImageryType() == ImageryType.WMS && info.getUrl() != null) {
+            TemplatedWMSTileSource.checkUrl(info.getUrl());
+            TemplatedWMSTileSource tileSource = new TemplatedWMSTileSource(info);
+            info.setAttribution(tileSource);
+            return tileSource;
         }
+        return null;
     }
 
     /**
@@ -896,127 +95,47 @@ public class WMSLayer extends ImageryLayer implements ImageObserver, PreferenceC
         public BookmarkWmsAction() {
             super(tr("Set WMS Bookmark"));
         }
+
         @Override
         public void actionPerformed(ActionEvent ev) {
             ImageryLayerInfo.addLayer(new ImageryInfo(info));
         }
     }
 
-    private class StartStopAction extends AbstractAction implements LayerAction {
-
-        public StartStopAction() {
-            super(tr("Automatic downloading"));
-        }
-
-        @Override
-        public Component createMenuComponent() {
-            JCheckBoxMenuItem item = new JCheckBoxMenuItem(this);
-            item.setSelected(autoDownloadEnabled);
-            return item;
-        }
-
-        @Override
-        public boolean supportLayers(List<Layer> layers) {
-            return layers.size() == 1 && layers.get(0) instanceof WMSLayer;
-        }
-
-        @Override
-        public void actionPerformed(ActionEvent e) {
-            autoDownloadEnabled = !autoDownloadEnabled;
-            if (autoDownloadEnabled) {
-                for (int x = 0; x < dax; ++x) {
-                    for (int y = 0; y < day; ++y) {
-                        GeorefImage img = images[modulo(x,dax)][modulo(y,day)];
-                        if(img.getState() == State.NOT_IN_CACHE){
-                            addRequest(new WMSRequest(img.getXIndex(), img.getYIndex(), info.getPixelPerDegree(), false, true));
-                        }
-                    }
-                }
-                Main.map.mapView.repaint();
-            }
-        }
-    }
-
-    private class ZoomToNativeResolution extends AbstractAction {
-
-        public ZoomToNativeResolution() {
-            super(tr("Zoom to native resolution"));
-        }
-
-        @Override
-        public void actionPerformed(ActionEvent e) {
-            Main.map.mapView.zoomTo(Main.map.mapView.getCenter(), 1 / info.getPixelPerDegree());
+    @Override
+    protected Map<String, String> getHeaders(TileSource tileSource) {
+        if (tileSource instanceof TemplatedWMSTileSource) {
+            return ((TemplatedWMSTileSource) tileSource).getHeaders();
         }
+        return null;
     }
 
-    private void cancelGrabberThreads(boolean wait) {
-        requestQueueLock.lock();
-        try {
-            canceled = true;
-            for (WMSGrabber grabber: grabbers) {
-                grabber.cancel();
-            }
-            queueEmpty.signalAll();
-        } finally {
-            requestQueueLock.unlock();
-        }
-        if (wait) {
-            for (Thread t: grabberThreads) {
-                try {
-                    t.join();
-                } catch (InterruptedException e) {
-                    Main.warn("InterruptedException in "+getClass().getSimpleName()+" while cancelling grabber threads");
-                }
-            }
-        }
+    @Override
+    public boolean isProjectionSupported(Projection proj) {
+        return supportedProjections == null || supportedProjections.isEmpty() || supportedProjections.contains(proj.toCode());
     }
 
-    private void startGrabberThreads() {
-        int threadCount = PROP_SIMULTANEOUS_CONNECTIONS.get();
-        requestQueueLock.lock();
-        try {
-            canceled = false;
-            grabbers.clear();
-            grabberThreads.clear();
-            for (int i=0; i<threadCount; i++) {
-                WMSGrabber grabber = getGrabber(i == 0 && threadCount > 1);
-                grabbers.add(grabber);
-                Thread t = new Thread(grabber, "WMS " + getName() + " " + i);
-                t.setDaemon(true);
-                t.start();
-                grabberThreads.add(t);
-            }
-        } finally {
-            requestQueueLock.unlock();
+    @Override
+    public String nameSupportedProjections() {
+        StringBuffer ret = new StringBuffer();
+        for (String e: supportedProjections) {
+            ret.append(e).append(", ");
         }
-    }
+        String appendix = "";
 
-    @Override
-    public boolean isChanged() {
-        requestQueueLock.lock();
-        try {
-            return !finishedRequests.isEmpty() || settingsChanged;
-        } finally {
-            requestQueueLock.unlock();
+        if (supportedProjections.contains("EPSG:4326") &&  "EPSG:3857".equals(Main.getProjection().toCode())) {
+            appendix = ". " + tr("JOSM will use EPSG:4326 to query the server, but results may vary "
+                    + "depending on the WMS server");
         }
+        return ret.substring(0, ret.length()-2) + appendix;
     }
 
     @Override
-    public void preferenceChanged(PreferenceChangeEvent event) {
-        if (event.getKey().equals(PROP_SIMULTANEOUS_CONNECTIONS.getKey()) && info.getUrl() != null) {
-            cancelGrabberThreads(true);
-            startGrabberThreads();
-        } else if (
-                event.getKey().equals(PROP_OVERLAP.getKey())
-                || event.getKey().equals(PROP_OVERLAP_EAST.getKey())
-                || event.getKey().equals(PROP_OVERLAP_NORTH.getKey())) {
-            for (int i=0; i<images.length; i++) {
-                for (int k=0; k<images[i].length; k++) {
-                    images[i][k] = new GeorefImage(this);
-                }
-            }
+    public void projectionChanged(Projection oldValue, Projection newValue) {
+        super.projectionChanged(oldValue, newValue);
 
-            settingsChanged = true;
+        if (!newValue.equals(oldValue) && tileSource instanceof TemplatedWMSTileSource) {
+            ((TemplatedWMSTileSource) tileSource).initProjection(newValue);
         }
     }
 
@@ -1024,126 +143,27 @@ public class WMSLayer extends ImageryLayer implements ImageObserver, PreferenceC
      * Checks that WMS layer is a grabber-compatible one (HTML or WMS).
      * @throws IllegalStateException if imagery time is neither HTML nor WMS
      * @since 8068
+     * @deprecated not implemented anymore
      */
+    @Deprecated
     public void checkGrabberType() {
-        ImageryType it = getInfo().getImageryType();
-        if (!ImageryType.HTML.equals(it) && !ImageryType.WMS.equals(it))
-            throw new IllegalStateException("getGrabber() called for non-WMS layer type");
-    }
-
-    protected WMSGrabber getGrabber(boolean localOnly) {
-        checkGrabberType();
-        if (getInfo().getImageryType() == ImageryType.HTML)
-            return new HTMLGrabber(Main.map.mapView, this, localOnly);
-        else
-            return new WMSGrabber(Main.map.mapView, this, localOnly);
-    }
-
-    public ProjectionBounds getBounds(WMSRequest request) {
-        ProjectionBounds result = new ProjectionBounds(
-                getEastNorth(request.getXIndex(), request.getYIndex()),
-                getEastNorth(request.getXIndex() + 1, request.getYIndex() + 1));
-
-        if (WMSLayer.PROP_OVERLAP.get()) {
-            double eastSize =  result.maxEast - result.minEast;
-            double northSize =  result.maxNorth - result.minNorth;
-
-            double eastCoef = WMSLayer.PROP_OVERLAP_EAST.get() / 100.0;
-            double northCoef = WMSLayer.PROP_OVERLAP_NORTH.get() / 100.0;
-
-            result = new ProjectionBounds(result.getMin(),
-                    new EastNorth(result.maxEast + eastCoef * eastSize,
-                            result.maxNorth + northCoef * northSize));
-        }
-        return result;
-    }
-
-    @Override
-    public boolean isProjectionSupported(Projection proj) {
-        List<String> serverProjections = info.getServerProjections();
-        return serverProjections.contains(proj.toCode().toUpperCase())
-                || ("EPSG:3857".equals(proj.toCode()) && (serverProjections.contains("EPSG:4326") || serverProjections.contains("CRS:84")))
-                || ("EPSG:4326".equals(proj.toCode()) && serverProjections.contains("CRS:84"));
-    }
-
-    @Override
-    public String nameSupportedProjections() {
-        StringBuilder res = new StringBuilder();
-        for (String p : info.getServerProjections()) {
-            if (res.length() > 0) {
-                res.append(", ");
-            }
-            res.append(p);
-        }
-        return tr("Supported projections are: {0}", res);
+        // not implemented
     }
 
     @Override
-    public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) {
-        boolean done = ((infoflags & (ERROR | FRAMEBITS | ALLBITS)) != 0);
-        Main.map.repaint(done ? 0 : 100);
-        return !done;
+    protected Class<? extends TileLoader> getTileLoaderClass() {
+        return WMSCachedTileLoader.class;
     }
 
     @Override
-    public void writeExternal(ObjectOutput out) throws IOException {
-        out.writeInt(serializeFormatVersion);
-        out.writeInt(dax);
-        out.writeInt(day);
-        out.writeInt(imageSize);
-        out.writeDouble(info.getPixelPerDegree());
-        out.writeObject(info.getName());
-        out.writeObject(info.getExtendedUrl());
-        out.writeObject(images);
+    protected String getCacheName() {
+        return CACHE_REGION_NAME;
     }
 
-    @Override
-    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
-        int sfv = in.readInt();
-        if (sfv != serializeFormatVersion)
-            throw new InvalidClassException(tr("Unsupported WMS file version; found {0}, expected {1}", sfv, serializeFormatVersion));
-        autoDownloadEnabled = false;
-        dax = in.readInt();
-        day = in.readInt();
-        imageSize = in.readInt();
-        info.setPixelPerDegree(in.readDouble());
-        doSetName((String)in.readObject());
-        info.setExtendedUrl((String)in.readObject());
-        images = (GeorefImage[][])in.readObject();
-
-        for (GeorefImage[] imgs : images) {
-            for (GeorefImage img : imgs) {
-                if (img != null) {
-                    img.setLayer(WMSLayer.this);
-                }
-            }
-        }
-
-        settingsChanged = true;
-        if (Main.isDisplayingMapView()) {
-            Main.map.mapView.repaint();
-        }
-        if (cache != null) {
-            cache.saveIndex();
-            cache = null;
-        }
-    }
-
-    @Override
-    public void onPostLoadFromFile() {
-        if (info.getUrl() != null) {
-            cache = new WmsCache(info.getUrl(), imageSize);
-            startGrabberThreads();
-        }
-    }
-
-    @Override
-    public boolean isSavable() {
-        return true; // With WMSLayerExporter
-    }
-
-    @Override
-    public File createAndOpenSaveFileChooser() {
-        return SaveActionBase.createAndOpenSaveFileChooser(tr("Save WMS file"), WMSLayerImporter.FILE_FILTER);
+    /**
+     * @return cache region for WMS layer
+     */
+    public static CacheAccess<String, BufferedImageCacheEntry> getCache() {
+        return AbstractCachedTileSourceLayer.getCache(CACHE_REGION_NAME);
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/layer/WMTSLayer.java b/src/org/openstreetmap/josm/gui/layer/WMTSLayer.java
new file mode 100644
index 0000000..910fc24
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/layer/WMTSLayer.java
@@ -0,0 +1,133 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.layer;
+
+import java.io.IOException;
+import java.util.Set;
+
+import org.apache.commons.jcs.access.CacheAccess;
+import org.openstreetmap.gui.jmapviewer.TileXY;
+import org.openstreetmap.gui.jmapviewer.interfaces.ICoordinate;
+import org.openstreetmap.gui.jmapviewer.interfaces.TileLoader;
+import org.openstreetmap.gui.jmapviewer.tilesources.AbstractTMSTileSource;
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.cache.BufferedImageCacheEntry;
+import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.imagery.ImageryInfo;
+import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryType;
+import org.openstreetmap.josm.data.imagery.WMSCachedTileLoader;
+import org.openstreetmap.josm.data.imagery.WMTSTileSource;
+import org.openstreetmap.josm.data.preferences.BooleanProperty;
+import org.openstreetmap.josm.data.projection.Projection;
+import org.openstreetmap.josm.gui.MapView;
+
+/**
+ * WMTS layer based on AbstractTileSourceLayer. Overrides few methods to align WMTS to Tile based computations
+ * but most magic is done within WMTSTileSource class.
+ *
+ * Full specification of the protocol available at:
+ * http://www.opengeospatial.org/standards/wmts
+ *
+ * @author Wiktor Niesiobędzki
+ *
+ */
+public class WMTSLayer extends AbstractCachedTileSourceLayer {
+    /**
+     * default setting of autozoom per layer
+     */
+    public static final BooleanProperty PROP_DEFAULT_AUTOZOOM = new BooleanProperty("imagery.wmts.default_autozoom", true);
+    private static final String CACHE_REGION_NAME = "WMTS";
+
+
+    /**
+     * Creates WMTS layer from ImageryInfo
+     * @param info Imagery Info describing the layer
+     */
+    public WMTSLayer(ImageryInfo info) {
+        super(info);
+        autoZoom = PROP_DEFAULT_AUTOZOOM.get();
+    }
+
+    @Override
+    protected AbstractTMSTileSource getTileSource(ImageryInfo info) {
+        try {
+            if (info.getImageryType() == ImageryType.WMTS && info.getUrl() != null) {
+                WMTSTileSource.checkUrl(info.getUrl());
+                WMTSTileSource tileSource = new WMTSTileSource(info);
+                info.setAttribution(tileSource);
+                return tileSource;
+            }
+            return null;
+        } catch (IOException e) {
+            Main.warn(e);
+            throw new IllegalArgumentException(e);
+        }
+    }
+
+    /**
+     * @param zoom level of the tile
+     * @return how many pixels of the screen occupies one pixel of the tile
+     */
+    private double getTileToScreenRatio(int zoom) {
+         MapView mv = Main.map.mapView;
+         LatLon topLeft = mv.getLatLon(0, 0);
+         LatLon botLeft = mv.getLatLon(0, tileSource.getTileSize());
+
+         TileXY topLeftTile = tileSource.latLonToTileXY(topLeft.toCoordinate(), zoom);
+
+         ICoordinate north = tileSource.tileXYToLatLon(topLeftTile.getXIndex(), topLeftTile.getYIndex(), zoom);
+         ICoordinate south = tileSource.tileXYToLatLon(topLeftTile.getXIndex(), topLeftTile.getYIndex() + 1, zoom);
+
+         return Math.abs((north.getLat() - south.getLat()) / (topLeft.lat() - botLeft.lat()));
+    }
+
+    @Override
+    protected int getBestZoom() {
+        if (!Main.isDisplayingMapView()) return 1;
+
+        for (int i = getMinZoomLvl() + 1; i <= getMaxZoomLvl(); i++) {
+            double ret = getTileToScreenRatio(i);
+            if (ret < 1) {
+                return i - 1;
+            }
+        }
+        return getMaxZoomLvl();
+    }
+
+    @Override
+    public boolean isProjectionSupported(Projection proj) {
+        Set<String> supportedProjections = ((WMTSTileSource) tileSource).getSupportedProjections();
+        return supportedProjections.contains(proj.toCode());
+    }
+
+    @Override
+    public String nameSupportedProjections() {
+        StringBuilder ret = new StringBuilder();
+        for (String e: ((WMTSTileSource) tileSource).getSupportedProjections()) {
+            ret.append(e).append(", ");
+        }
+        return ret.length() > 2 ? ret.substring(0, ret.length()-2) : ret.toString();
+    }
+
+    @Override
+    public void projectionChanged(Projection oldValue, Projection newValue) {
+        super.projectionChanged(oldValue, newValue);
+        ((WMTSTileSource) tileSource).initProjection(newValue);
+    }
+
+    @Override
+    protected Class<? extends TileLoader> getTileLoaderClass() {
+        return WMSCachedTileLoader.class;
+    }
+
+    @Override
+    protected String getCacheName() {
+        return CACHE_REGION_NAME;
+    }
+
+    /**
+     * @return cache region for WMTS layer
+     */
+    public static CacheAccess<String, BufferedImageCacheEntry> getCache() {
+        return AbstractCachedTileSourceLayer.getCache(CACHE_REGION_NAME);
+    }
+}
diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java b/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java
index f5e3c8c..c340ded 100644
--- a/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java
+++ b/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.layer.geoimage;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -20,7 +20,6 @@ import java.awt.event.WindowAdapter;
 import java.awt.event.WindowEvent;
 import java.io.File;
 import java.io.FileInputStream;
-import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.text.DateFormat;
@@ -75,9 +74,11 @@ import org.openstreetmap.josm.gui.widgets.AbstractFileChooser;
 import org.openstreetmap.josm.gui.widgets.JosmComboBox;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
 import org.openstreetmap.josm.io.GpxReader;
+import org.openstreetmap.josm.io.JpgImporter;
 import org.openstreetmap.josm.tools.ExifReader;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.date.DateUtils;
 import org.openstreetmap.josm.tools.date.PrimaryDateParser;
 import org.xml.sax.SAXException;
@@ -103,6 +104,109 @@ public class CorrelateGpxWithImages extends AbstractAction {
         this.yLayer = layer;
     }
 
+    private final class SyncDialogWindowListener extends WindowAdapter {
+        private static final int CANCEL = -1;
+        private static final int DONE = 0;
+        private static final int AGAIN = 1;
+        private static final int NOTHING = 2;
+
+        private int checkAndSave() {
+            if (syncDialog.isVisible())
+                // nothing happened: JOSM was minimized or similar
+                return NOTHING;
+            int answer = syncDialog.getValue();
+            if (answer != 1)
+                return CANCEL;
+
+            // Parse values again, to display an error if the format is not recognized
+            try {
+                timezone = parseTimezone(tfTimezone.getText().trim());
+            } catch (ParseException e) {
+                JOptionPane.showMessageDialog(Main.parent, e.getMessage(),
+                        tr("Invalid timezone"), JOptionPane.ERROR_MESSAGE);
+                return AGAIN;
+            }
+
+            try {
+                delta = parseOffset(tfOffset.getText().trim());
+            } catch (ParseException e) {
+                JOptionPane.showMessageDialog(Main.parent, e.getMessage(),
+                        tr("Invalid offset"), JOptionPane.ERROR_MESSAGE);
+                return AGAIN;
+            }
+
+            if (lastNumMatched == 0 && new ExtendedDialog(
+                        Main.parent,
+                        tr("Correlate images with GPX track"),
+                        new String[] {tr("OK"), tr("Try Again")}).
+                        setContent(tr("No images could be matched!")).
+                        setButtonIcons(new String[] {"ok", "dialogs/refresh"}).
+                        showDialog().getValue() == 2)
+                return AGAIN;
+            return DONE;
+        }
+
+        @Override
+        public void windowDeactivated(WindowEvent e) {
+            int result = checkAndSave();
+            switch (result) {
+            case NOTHING:
+                break;
+            case CANCEL:
+                if (yLayer != null) {
+                    if (yLayer.data != null) {
+                        for (ImageEntry ie : yLayer.data) {
+                            ie.tmp = null;
+                        }
+                    }
+                    yLayer.updateBufferAndRepaint();
+                }
+                break;
+            case AGAIN:
+                actionPerformed(null);
+                break;
+            case DONE:
+                Main.pref.put("geoimage.timezone", formatTimezone(timezone));
+                Main.pref.put("geoimage.delta", Long.toString(delta * 1000));
+                Main.pref.put("geoimage.showThumbs", yLayer.useThumbs);
+
+                yLayer.useThumbs = cbShowThumbs.isSelected();
+                yLayer.startLoadThumbs();
+
+                // Search whether an other layer has yet defined some bounding box.
+                // If none, we'll zoom to the bounding box of the layer with the photos.
+                boolean boundingBoxedLayerFound = false;
+                for (Layer l: Main.map.mapView.getAllLayers()) {
+                    if (l != yLayer) {
+                        BoundingXYVisitor bbox = new BoundingXYVisitor();
+                        l.visitBoundingBox(bbox);
+                        if (bbox.getBounds() != null) {
+                            boundingBoxedLayerFound = true;
+                            break;
+                        }
+                    }
+                }
+                if (!boundingBoxedLayerFound) {
+                    BoundingXYVisitor bbox = new BoundingXYVisitor();
+                    yLayer.visitBoundingBox(bbox);
+                    Main.map.mapView.zoomTo(bbox);
+                }
+
+                if (yLayer.data != null) {
+                    for (ImageEntry ie : yLayer.data) {
+                        ie.applyTmp();
+                    }
+                }
+
+                yLayer.updateBufferAndRepaint();
+
+                break;
+            default:
+                throw new IllegalStateException();
+            }
+        }
+    }
+
     private static class GpxDataWrapper {
         private String name;
         private GpxData data;
@@ -141,13 +245,14 @@ public class CorrelateGpxWithImages extends AbstractAction {
 
         @Override
         public void actionPerformed(ActionEvent arg0) {
-            FileFilter filter = new FileFilter(){
-                @Override public boolean accept(File f) {
-                    return (f.isDirectory()
-                            || f .getName().toLowerCase().endsWith(".gpx")
-                            || f.getName().toLowerCase().endsWith(".gpx.gz"));
+            FileFilter filter = new FileFilter() {
+                @Override
+                public boolean accept(File f) {
+                    return f.isDirectory() || Utils.hasExtension(f, "gpx", "gpx.gz");
                 }
-                @Override public String getDescription() {
+
+                @Override
+                public String getDescription() {
                     return tr("GPX Files (*.gpx *.gpx.gz)");
                 }
             };
@@ -159,7 +264,7 @@ public class CorrelateGpxWithImages extends AbstractAction {
             try {
                 outerPanel.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
 
-                for (int i = gpxLst.size() - 1 ; i >= 0 ; i--) {
+                for (int i = gpxLst.size() - 1; i >= 0; i--) {
                     GpxDataWrapper wrapper = gpxLst.get(i);
                     if (wrapper.file != null && sel.equals(wrapper.file)) {
                         cbGpx.setSelectedIndex(i);
@@ -185,7 +290,7 @@ public class CorrelateGpxWithImages extends AbstractAction {
                     Main.error(x);
                     JOptionPane.showMessageDialog(
                             Main.parent,
-                            tr("Error while parsing {0}",sel.getName())+": "+x.getMessage(),
+                            tr("Error while parsing {0}", sel.getName())+": "+x.getMessage(),
                             tr("Error"),
                             JOptionPane.ERROR_MESSAGE
                     );
@@ -194,7 +299,7 @@ public class CorrelateGpxWithImages extends AbstractAction {
                     Main.error(x);
                     JOptionPane.showMessageDialog(
                             Main.parent,
-                            tr("Could not read \"{0}\"",sel.getName())+"\n"+x.getMessage(),
+                            tr("Could not read \"{0}\"", sel.getName())+"\n"+x.getMessage(),
                             tr("Error"),
                             JOptionPane.ERROR_MESSAGE
                     );
@@ -212,8 +317,8 @@ public class CorrelateGpxWithImages extends AbstractAction {
             }
         }
 
-        private InputStream createInputStream(File sel) throws IOException, FileNotFoundException {
-            if (sel.getName().toLowerCase().endsWith(".gpx.gz")) {
+        private InputStream createInputStream(File sel) throws IOException {
+            if (Utils.hasExtension(sel, "gpx.gz")) {
                 return new GZIPInputStream(new FileInputStream(sel));
             } else {
                 return new FileInputStream(sel);
@@ -316,7 +421,7 @@ public class CorrelateGpxWithImages extends AbstractAction {
 
             String tzId = Main.pref.get("geoimage.timezoneid", "");
             TimeZone defaultTz;
-            if (tzId.length() == 0) {
+            if (tzId.isEmpty()) {
                 defaultTz = TimeZone.getDefault();
             } else {
                 defaultTz = TimeZone.getTimeZone(tzId);
@@ -345,7 +450,7 @@ public class CorrelateGpxWithImages extends AbstractAction {
 
                 @Override
                 public int getSize() {
-                    return yLayer.data.size();
+                    return yLayer.data != null ? yLayer.data.size() : 0;
                 }
             });
             imgList.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
@@ -383,8 +488,8 @@ public class CorrelateGpxWithImages extends AbstractAction {
 
                 @Override
                 public void actionPerformed(ActionEvent ae) {
-                    AbstractFileChooser fc = DiskAccessAction.createAndOpenFileChooser(true, false, null, JpegFileFilter.getInstance(),
-                            JFileChooser.FILES_ONLY, "geoimage.lastdirectory");
+                    AbstractFileChooser fc = DiskAccessAction.createAndOpenFileChooser(true, false, null,
+                            JpgImporter.FILE_FILTER_WITH_FOLDERS, JFileChooser.FILES_ONLY, "geoimage.lastdirectory");
                     if (fc == null)
                         return;
                     File sel = fc.getSelectedFile();
@@ -419,7 +524,7 @@ public class CorrelateGpxWithImages extends AbstractAction {
             panel.add(panelLst, BorderLayout.LINE_START);
 
             boolean isOk = false;
-            while (! isOk) {
+            while (!isOk) {
                 int answer = JOptionPane.showConfirmDialog(
                         Main.parent, panel,
                         tr("Synchronize time from a photo of the GPS receiver"),
@@ -434,10 +539,10 @@ public class CorrelateGpxWithImages extends AbstractAction {
                 try {
                     delta = dateFormat.parse(lbExifTime.getText()).getTime()
                     - dateFormat.parse(tfGpsTime.getText()).getTime();
-                } catch(ParseException e) {
+                } catch (ParseException e) {
                     JOptionPane.showMessageDialog(Main.parent, tr("Error while parsing the date.\n"
                             + "Please use the requested format"),
-                            tr("Invalid date"), JOptionPane.ERROR_MESSAGE );
+                            tr("Invalid date"), JOptionPane.ERROR_MESSAGE);
                     continue;
                 }
 
@@ -554,13 +659,13 @@ public class CorrelateGpxWithImages extends AbstractAction {
         cbShowThumbs = new JCheckBox(tr("Show Thumbnail images on the map"), ticked);
         cbShowThumbs.setEnabled(!yLayer.thumbsLoaded);
 
-        int y=0;
+        int y = 0;
         GBC gbc = GBC.eol();
         gbc.gridx = 0;
         gbc.gridy = y++;
         panelTf.add(panelCb, gbc);
 
-        gbc = GBC.eol().fill(GBC.HORIZONTAL).insets(0,0,0,12);
+        gbc = GBC.eol().fill(GBC.HORIZONTAL).insets(0, 0, 0, 12);
         gbc.gridx = 0;
         gbc.gridy = y++;
         panelTf.add(new JSeparator(SwingConstants.HORIZONTAL), gbc);
@@ -587,7 +692,7 @@ public class CorrelateGpxWithImages extends AbstractAction {
         gbc.weightx = 1.;
         panelTf.add(tfOffset, gbc);
 
-        gbc = GBC.std().insets(5,5,5,5);
+        gbc = GBC.std().insets(5, 5, 5, 5);
         gbc.gridx = 2;
         gbc.gridy = y-2;
         gbc.gridheight = 2;
@@ -596,7 +701,7 @@ public class CorrelateGpxWithImages extends AbstractAction {
         gbc.weightx = 0.5;
         panelTf.add(buttonViewGpsPhoto, gbc);
 
-        gbc = GBC.std().fill(GBC.BOTH).insets(5,5,5,5);
+        gbc = GBC.std().fill(GBC.BOTH).insets(5, 5, 5, 5);
         gbc.gridx = 2;
         gbc.gridy = y++;
         gbc.weightx = 0.5;
@@ -605,7 +710,7 @@ public class CorrelateGpxWithImages extends AbstractAction {
         gbc.gridx = 3;
         panelTf.add(buttonAdjust, gbc);
 
-        gbc = GBC.eol().fill(GBC.HORIZONTAL).insets(0,12,0,0);
+        gbc = GBC.eol().fill(GBC.HORIZONTAL).insets(0, 12, 0, 0);
         gbc.gridx = 0;
         gbc.gridy = y++;
         panelTf.add(new JSeparator(SwingConstants.HORIZONTAL), gbc);
@@ -654,112 +759,16 @@ public class CorrelateGpxWithImages extends AbstractAction {
         syncDialog = new ExtendedDialog(
                 Main.parent,
                 tr("Correlate images with GPX track"),
-                new String[] { tr("Correlate"), tr("Cancel") },
+                new String[] {tr("Correlate"), tr("Cancel")},
                 false
         );
         syncDialog.setContent(panelTf, false);
-        syncDialog.setButtonIcons(new String[] { "ok", "cancel" });
+        syncDialog.setButtonIcons(new String[] {"ok", "cancel"});
         syncDialog.setupDialog();
         outerPanel.add(syncDialog.getContentPane(), BorderLayout.PAGE_START);
         syncDialog.setContentPane(outerPanel);
         syncDialog.pack();
-        syncDialog.addWindowListener(new WindowAdapter() {
-            private static final int CANCEL = -1;
-            private static final int DONE = 0;
-            private static final int AGAIN = 1;
-            private static final int NOTHING = 2;
-            private int checkAndSave() {
-                if (syncDialog.isVisible())
-                    // nothing happened: JOSM was minimized or similar
-                    return NOTHING;
-                int answer = syncDialog.getValue();
-                if(answer != 1)
-                    return CANCEL;
-
-                // Parse values again, to display an error if the format is not recognized
-                try {
-                    timezone = parseTimezone(tfTimezone.getText().trim());
-                } catch (ParseException e) {
-                    JOptionPane.showMessageDialog(Main.parent, e.getMessage(),
-                            tr("Invalid timezone"), JOptionPane.ERROR_MESSAGE);
-                    return AGAIN;
-                }
-
-                try {
-                    delta = parseOffset(tfOffset.getText().trim());
-                } catch (ParseException e) {
-                    JOptionPane.showMessageDialog(Main.parent, e.getMessage(),
-                            tr("Invalid offset"), JOptionPane.ERROR_MESSAGE);
-                    return AGAIN;
-                }
-
-                if (lastNumMatched == 0 && new ExtendedDialog(
-                            Main.parent,
-                            tr("Correlate images with GPX track"),
-                            new String[] { tr("OK"), tr("Try Again") }).
-                            setContent(tr("No images could be matched!")).
-                            setButtonIcons(new String[] { "ok", "dialogs/refresh"}).
-                            showDialog().getValue() == 2)
-                    return AGAIN;
-                return DONE;
-            }
-
-            @Override
-            public void windowDeactivated(WindowEvent e) {
-                int result = checkAndSave();
-                switch (result) {
-                case NOTHING:
-                    break;
-                case CANCEL:
-                    if (yLayer != null) {
-                        for (ImageEntry ie : yLayer.data) {
-                            ie.tmp = null;
-                        }
-                        yLayer.updateBufferAndRepaint();
-                    }
-                    break;
-                case AGAIN:
-                    actionPerformed(null);
-                    break;
-                case DONE:
-                    Main.pref.put("geoimage.timezone", formatTimezone(timezone));
-                    Main.pref.put("geoimage.delta", Long.toString(delta * 1000));
-                    Main.pref.put("geoimage.showThumbs", yLayer.useThumbs);
-
-                    yLayer.useThumbs = cbShowThumbs.isSelected();
-                    yLayer.startLoadThumbs();
-
-                    // Search whether an other layer has yet defined some bounding box.
-                    // If none, we'll zoom to the bounding box of the layer with the photos.
-                    boolean boundingBoxedLayerFound = false;
-                    for (Layer l: Main.map.mapView.getAllLayers()) {
-                        if (l != yLayer) {
-                            BoundingXYVisitor bbox = new BoundingXYVisitor();
-                            l.visitBoundingBox(bbox);
-                            if (bbox.getBounds() != null) {
-                                boundingBoxedLayerFound = true;
-                                break;
-                            }
-                        }
-                    }
-                    if (! boundingBoxedLayerFound) {
-                        BoundingXYVisitor bbox = new BoundingXYVisitor();
-                        yLayer.visitBoundingBox(bbox);
-                        Main.map.mapView.zoomTo(bbox);
-                    }
-
-                    for (ImageEntry ie : yLayer.data) {
-                        ie.applyTmp();
-                    }
-
-                    yLayer.updateBufferAndRepaint();
-
-                    break;
-                default:
-                    throw new IllegalStateException();
-                }
-            }
-        });
+        syncDialog.addWindowListener(new SyncDialogWindowListener());
         syncDialog.showDialog();
     }
 
@@ -777,17 +786,21 @@ public class CorrelateGpxWithImages extends AbstractAction {
         public void insertUpdate(DocumentEvent ev) {
             updateStatusBar();
         }
+
         @Override
         public void removeUpdate(DocumentEvent ev) {
             updateStatusBar();
         }
+
         @Override
         public void changedUpdate(DocumentEvent ev) {
         }
+
         @Override
         public void itemStateChanged(ItemEvent e) {
             updateStatusBar();
         }
+
         @Override
         public void actionPerformed(ActionEvent e) {
             updateStatusBar();
@@ -810,8 +823,10 @@ public class CorrelateGpxWithImages extends AbstractAction {
 
             // The selection of images we are about to correlate may have changed.
             // So reset all images.
-            for (ImageEntry ie: yLayer.data) {
-                ie.tmp = null;
+            if (yLayer.data != null) {
+                for (ImageEntry ie: yLayer.data) {
+                    ie.tmp = null;
+                }
             }
 
             // Construct a list of images that have a date, and sort them on the date.
@@ -835,6 +850,7 @@ public class CorrelateGpxWithImages extends AbstractAction {
     }
 
     private transient RepaintTheMapListener repaintTheMap = new RepaintTheMapListener();
+
     private class RepaintTheMapListener implements FocusListener {
         @Override
         public void focusGained(FocusEvent e) { // do nothing
@@ -856,35 +872,36 @@ public class CorrelateGpxWithImages extends AbstractAction {
 
             long diff = delta + Math.round(timezone*60*60);
 
-            double diffInH = (double)diff/(60*60);    // hours
+            double diffInH = (double) diff/(60*60);    // hours
 
             // Find day difference
-            final int dayOffset = (int)Math.round(diffInH / 24); // days
+            final int dayOffset = (int) Math.round(diffInH / 24); // days
             double tmz = diff - dayOffset*24*60*60L;  // seconds
 
             // In hours, rounded to two decimal places
-            tmz = (double)Math.round(tmz*100/(60*60)) / 100;
+            tmz = (double) Math.round(tmz*100/(60*60)) / 100;
 
             // Due to imprecise clocks we might get a "+3:28" timezone, which should obviously be 3:30 with
             // -2 minutes offset. This determines the real timezone and finds offset.
-            double fixTimezone = (double)Math.round(tmz * 2)/2; // hours, rounded to one decimal place
-            int offset = (int)Math.round(diff - fixTimezone*60*60) - dayOffset*24*60*60; // seconds
+            double fixTimezone = (double) Math.round(tmz * 2)/2; // hours, rounded to one decimal place
+            int offset = (int) Math.round(diff - fixTimezone*60*60) - dayOffset*24*60*60; // seconds
 
             // Info Labels
             final JLabel lblMatches = new JLabel();
 
             // Timezone Slider
-            // The slider allows to switch timezon from -12:00 to 12:00 in 30 minutes
-            // steps. Therefore the range is -24 to 24.
+            // The slider allows to switch timezon from -12:00 to 12:00 in 30 minutes steps. Therefore the range is -24 to 24.
             final JLabel lblTimezone = new JLabel();
             final JSlider sldTimezone = new JSlider(-24, 24, 0);
             sldTimezone.setPaintLabels(true);
-            Dictionary<Integer,JLabel> labelTable = new Hashtable<>();
+            Dictionary<Integer, JLabel> labelTable = new Hashtable<>();
+            // CHECKSTYLE.OFF: ParenPad
             labelTable.put(-24, new JLabel("-12:00"));
             labelTable.put(-12, new JLabel( "-6:00"));
             labelTable.put(  0, new JLabel(  "0:00"));
             labelTable.put( 12, new JLabel(  "6:00"));
             labelTable.put( 24, new JLabel( "12:00"));
+            // CHECKSTYLE.ON: ParenPad
             sldTimezone.setLabelTable(labelTable);
 
             // Minutes Slider
@@ -907,9 +924,9 @@ public class CorrelateGpxWithImages extends AbstractAction {
                     // parse slider position into real timezone
                     double tz = Math.abs(sldTimezone.getValue());
                     String zone = tz % 2 == 0
-                    ? (int)Math.floor(tz/2) + ":00"
-                            : (int)Math.floor(tz/2) + ":30";
-                    if(sldTimezone.getValue() < 0) {
+                    ? (int) Math.floor(tz/2) + ":00"
+                            : (int) Math.floor(tz/2) + ":30";
+                    if (sldTimezone.getValue() < 0) {
                         zone = "-" + zone;
                     }
 
@@ -956,10 +973,10 @@ public class CorrelateGpxWithImages extends AbstractAction {
             // will be off range for the sliders. Catch this error
             // and inform the user about it.
             try {
-                sldTimezone.setValue((int)(fixTimezone*2));
-                sldMinutes.setValue(offset/60);
-                sldSeconds.setValue(offset%60);
-            } catch(Exception e) {
+                sldTimezone.setValue((int) (fixTimezone*2));
+                sldMinutes.setValue(offset / 60);
+                sldSeconds.setValue(offset % 60);
+            } catch (Exception e) {
                 JOptionPane.showMessageDialog(Main.parent,
                         tr("An error occurred while trying to match the photos to the GPX track."
                                 +" You can adjust the sliders to manually match the photos."),
@@ -980,7 +997,7 @@ public class CorrelateGpxWithImages extends AbstractAction {
             // Settings are only saved temporarily to the layer.
             new ExtendedDialog(Main.parent,
                     tr("Adjust timezone and offset"),
-                    new String[] { tr("Close")}).
+                    new String[] {tr("Close")}).
                     setContent(p).setButtonIcons(new String[] {"ok"}).showDialog();
         }
     }
@@ -998,7 +1015,7 @@ public class CorrelateGpxWithImages extends AbstractAction {
             PrimaryDateParser dateParser = new PrimaryDateParser();
 
             // no images found, exit
-            if(imgs.isEmpty()) {
+            if (imgs.isEmpty()) {
                 JOptionPane.showMessageDialog(Main.parent,
                         tr("The selected photos do not contain time information."),
                         tr("Photos do not contain time information"), JOptionPane.WARNING_MESSAGE);
@@ -1021,7 +1038,7 @@ public class CorrelateGpxWithImages extends AbstractAction {
                         try {
                             firstGPXDate = dateParser.parse(curDateWpStr).getTime()/1000;
                             break outer;
-                        } catch(Exception e) {
+                        } catch (Exception e) {
                             Main.warn(e);
                         }
                     }
@@ -1029,7 +1046,7 @@ public class CorrelateGpxWithImages extends AbstractAction {
             }
 
             // No GPX timestamps found, exit
-            if(firstGPXDate < 0) {
+            if (firstGPXDate < 0) {
                 JOptionPane.showMessageDialog(Main.parent,
                         tr("The selected GPX track does not contain timestamps. Please select another one."),
                         tr("GPX Track has no time information"), JOptionPane.WARNING_MESSAGE);
@@ -1039,18 +1056,18 @@ public class CorrelateGpxWithImages extends AbstractAction {
             // seconds
             long diff = firstExifDate - firstGPXDate;
 
-            double diffInH = (double)diff/(60*60);    // hours
+            double diffInH = (double) diff/(60*60);    // hours
 
             // Find day difference
-            int dayOffset = (int)Math.round(diffInH / 24); // days
+            int dayOffset = (int) Math.round(diffInH / 24); // days
             double tz = diff - dayOffset*24*60*60L;  // seconds
 
             // In hours, rounded to two decimal places
-            tz = (double)Math.round(tz*100/(60*60)) / 100;
+            tz = (double) Math.round(tz*100/(60*60)) / 100;
 
             // Due to imprecise clocks we might get a "+3:28" timezone, which should obviously be 3:30 with
             // -2 minutes offset. This determines the real timezone and finds offset.
-            timezone = (double)Math.round(tz * 2)/2; // hours, rounded to one decimal place
+            timezone = (double) Math.round(tz * 2)/2; // hours, rounded to one decimal place
             delta = Math.round(diff - timezone*60*60); // seconds
 
             tfTimezone.getDocument().removeDocumentListener(statusBarUpdater);
@@ -1080,6 +1097,9 @@ public class CorrelateGpxWithImages extends AbstractAction {
      * @return matching images
      */
     private List<ImageEntry> getSortedImgList(boolean exif, boolean tagged) {
+        if (yLayer.data == null) {
+            return Collections.emptyList();
+        }
         List<ImageEntry> dateImgLst = new ArrayList<>(yLayer.data.size());
         for (ImageEntry e : yLayer.data) {
             if (!e.hasExifTime()) {
@@ -1113,7 +1133,7 @@ public class CorrelateGpxWithImages extends AbstractAction {
         if (item == null || ((GpxDataWrapper) item).file == null) {
             if (complain) {
                 JOptionPane.showMessageDialog(Main.parent, tr("You should select a GPX track"),
-                        tr("No selected GPX track"), JOptionPane.ERROR_MESSAGE );
+                        tr("No selected GPX track"), JOptionPane.ERROR_MESSAGE);
             }
             return null;
         }
@@ -1147,7 +1167,7 @@ public class CorrelateGpxWithImages extends AbstractAction {
                             prevWp = curWp;
                             prevWpTime = curWpTime;
 
-                        } catch(ParseException e) {
+                        } catch (ParseException e) {
                             Main.error("Error while parsing date \"" + curWpTimeStr + '"');
                             Main.error(e);
                             prevWp = null;
@@ -1179,7 +1199,7 @@ public class CorrelateGpxWithImages extends AbstractAction {
             WayPoint curWp, long curWpTime, long offset) {
         // Time between the track point and the previous one, 5 sec if first point, i.e. photos take
         // 5 sec before the first track point can be assumed to be take at the starting position
-        long interval = prevWpTime > 0 ? (Math.abs(curWpTime - prevWpTime)) : 5*1000;
+        long interval = prevWpTime > 0 ? Math.abs(curWpTime - prevWpTime) : 5*1000;
         int ret = 0;
 
         // i is the index of the timewise last photo that has the same or earlier EXIF time
@@ -1236,7 +1256,7 @@ public class CorrelateGpxWithImages extends AbstractAction {
 
             if (curImg.tmp.getPos() == null && prevWp != null) {
                 // The values of timeDiff are between 0 and 1, it is not seconds but a dimensionless variable
-                double timeDiff = (double)(imgTime - prevWpTime) / interval;
+                double timeDiff = (double) (imgTime - prevWpTime) / interval;
                 curImg.tmp.setPos(prevWp.getCoor().interpolate(curWp.getCoor(), timeDiff));
                 curImg.tmp.setSpeed(speed);
                 if (curElevation != null && prevElevation != null) {
@@ -1253,10 +1273,10 @@ public class CorrelateGpxWithImages extends AbstractAction {
     }
 
     private int getLastIndexOfListBefore(List<ImageEntry> images, long searchedTime) {
-        int lstSize= images.size();
+        int lstSize = images.size();
 
         // No photos or the first photo taken is later than the search period
-        if(lstSize == 0 || searchedTime < images.get(0).getExifTime().getTime())
+        if (lstSize == 0 || searchedTime < images.get(0).getExifTime().getTime())
             return -1;
 
         // The search period is later than the last photo
@@ -1264,15 +1284,15 @@ public class CorrelateGpxWithImages extends AbstractAction {
             return lstSize-1;
 
         // The searched index is somewhere in the middle, do a binary search from the beginning
-        int curIndex= 0;
-        int startIndex= 0;
-        int endIndex= lstSize-1;
+        int curIndex = 0;
+        int startIndex = 0;
+        int endIndex = lstSize-1;
         while (endIndex - startIndex > 1) {
-            curIndex= (endIndex + startIndex) / 2;
+            curIndex = (endIndex + startIndex) / 2;
             if (searchedTime > images.get(curIndex).getExifTime().getTime()) {
-                startIndex= curIndex;
+                startIndex = curIndex;
             } else {
-                endIndex= curIndex;
+                endIndex = curIndex;
             }
         }
         if (searchedTime < images.get(endIndex).getExifTime().getTime())
@@ -1307,11 +1327,11 @@ public class CorrelateGpxWithImages extends AbstractAction {
 
     private double parseTimezone(String timezone) throws ParseException {
 
-        String error = tr("Error while parsing timezone.\nExpected format: {0}", "+H:MM");
-
-        if (timezone.length() == 0)
+        if (timezone.isEmpty())
             return 0;
 
+        String error = tr("Error while parsing timezone.\nExpected format: {0}", "+H:MM");
+
         char sgnTimezone = '+';
         StringBuilder hTimezone = new StringBuilder();
         StringBuilder mTimezone = new StringBuilder();
@@ -1321,7 +1341,7 @@ public class CorrelateGpxWithImages extends AbstractAction {
             switch (c) {
             case ' ' :
                 if (state != 2 || hTimezone.length() != 0)
-                    throw new ParseException(error,0);
+                    throw new ParseException(error, i);
                 break;
             case '+' :
             case '-' :
@@ -1329,14 +1349,14 @@ public class CorrelateGpxWithImages extends AbstractAction {
                     sgnTimezone = c;
                     state = 2;
                 } else
-                    throw new ParseException(error,0);
+                    throw new ParseException(error, i);
                 break;
             case ':' :
             case '.' :
                 if (state == 2) {
                     state = 3;
                 } else
-                    throw new ParseException(error,0);
+                    throw new ParseException(error, i);
                 break;
             case '0' : case '1' : case '2' : case '3' : case '4' :
             case '5' : case '6' : case '7' : case '8' : case '9' :
@@ -1350,11 +1370,11 @@ public class CorrelateGpxWithImages extends AbstractAction {
                     mTimezone.append(c);
                     break;
                 default :
-                    throw new ParseException(error,0);
+                    throw new ParseException(error, i);
                 }
                 break;
             default :
-                throw new ParseException(error,0);
+                throw new ParseException(error, i);
             }
         }
 
@@ -1367,11 +1387,11 @@ public class CorrelateGpxWithImages extends AbstractAction {
             }
         } catch (NumberFormatException nfe) {
             // Invalid timezone
-            throw new ParseException(error,0);
+            throw new ParseException(error, 0);
         }
 
-        if (h > 12 || m > 59 )
-            throw new ParseException(error,0);
+        if (h > 12 || m > 59)
+            throw new ParseException(error, 0);
         else
             return (h + m / 60.0) * (sgnTimezone == '-' ? -1 : 1);
     }
@@ -1379,16 +1399,17 @@ public class CorrelateGpxWithImages extends AbstractAction {
     private long parseOffset(String offset) throws ParseException {
         String error = tr("Error while parsing offset.\nExpected format: {0}", "number");
 
-        if (offset.length() > 0) {
+        if (!offset.isEmpty()) {
             try {
-                if(offset.startsWith("+")) {
+                if (offset.startsWith("+")) {
                     offset = offset.substring(1);
                 }
                 return Long.parseLong(offset);
-            } catch(NumberFormatException nfe) {
-                throw new ParseException(error,0);
+            } catch (NumberFormatException nfe) {
+                throw new ParseException(error, 0);
             }
-        } else
+        } else {
             return 0;
+        }
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java b/src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java
index 90ccae6..7ed43bc 100644
--- a/src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.layer.geoimage;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -36,7 +36,6 @@ import java.util.Set;
 import java.util.TimeZone;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
-import java.util.concurrent.ThreadFactory;
 
 import javax.swing.Action;
 import javax.swing.Icon;
@@ -67,6 +66,7 @@ import org.openstreetmap.josm.gui.layer.JumpToMarkerActions.JumpToNextMarker;
 import org.openstreetmap.josm.gui.layer.JumpToMarkerActions.JumpToPreviousMarker;
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.util.GuiHelper;
+import org.openstreetmap.josm.io.JpgImporter;
 import org.openstreetmap.josm.tools.ExifReader;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Utils;
@@ -93,14 +93,8 @@ public class GeoImageLayer extends Layer implements PropertyChangeListener, Jump
     private int currentPhoto = -1;
 
     boolean useThumbs = false;
-    private ExecutorService thumbsLoaderExecutor = Executors.newSingleThreadExecutor(new ThreadFactory() {
-        @Override
-        public Thread newThread(Runnable r) {
-            Thread t = new Thread(r);
-            t.setPriority(Thread.MIN_PRIORITY);
-            return t;
-        }
-    });
+    private ExecutorService thumbsLoaderExecutor =
+            Executors.newSingleThreadExecutor(Utils.newThreadFactory("thumbnail-loader-%d", Thread.MIN_PRIORITY));
     private ThumbsLoader thumbsloader;
     private boolean thumbsLoaderRunning = false;
     volatile boolean thumbsLoaded = false;
@@ -185,7 +179,7 @@ public class GeoImageLayer extends Layer implements PropertyChangeListener, Jump
 
             for (File f : sel) {
 
-                if(canceled) {
+                if (canceled) {
                     break;
                 }
 
@@ -208,7 +202,7 @@ public class GeoImageLayer extends Layer implements PropertyChangeListener, Jump
                         loadedDirectories.add(canonical);
                     }
 
-                    File[] children = f.listFiles(JpegFileFilter.getInstance());
+                    File[] children = f.listFiles(JpgImporter.FILE_FILTER_WITH_FOLDERS);
                     if (children != null) {
                         progressMonitor.subTask(tr("Scanning directory {0}", f.getPath()));
                         addRecursiveFiles(files, Arrays.asList(children));
@@ -250,7 +244,7 @@ public class GeoImageLayer extends Layer implements PropertyChangeListener, Jump
             if (layer != null) {
                 Main.main.addLayer(layer);
 
-                if (!canceled && !layer.data.isEmpty()) {
+                if (!canceled && layer.data != null && !layer.data.isEmpty()) {
                     boolean noGeotagFound = true;
                     for (ImageEntry e : layer.data) {
                         if (e.getPos() != null) {
@@ -315,7 +309,9 @@ public class GeoImageLayer extends Layer implements PropertyChangeListener, Jump
      */
     public GeoImageLayer(final List<ImageEntry> data, GpxLayer gpxLayer, final String name, boolean useThumbs) {
         super(name != null ? name : tr("Geotagged Images"));
-        Collections.sort(data);
+        if (data != null) {
+            Collections.sort(data);
+        }
         this.data = data;
         this.gpxLayer = gpxLayer;
         this.useThumbs = useThumbs;
@@ -327,6 +323,7 @@ public class GeoImageLayer extends Layer implements PropertyChangeListener, Jump
     }
 
     private static List<Action> menuAdditions = new LinkedList<>();
+
     public static void registerMenuAddition(Action addition) {
         menuAdditions.add(addition);
     }
@@ -362,16 +359,20 @@ public class GeoImageLayer extends Layer implements PropertyChangeListener, Jump
     private String infoText() {
         int tagged = 0;
         int newdata = 0;
-        for (ImageEntry e : data) {
-            if (e.getPos() != null) {
-                tagged++;
-            }
-            if (e.hasNewGpsData()) {
-                newdata++;
+        int n = 0;
+        if (data != null) {
+            n = data.size();
+            for (ImageEntry e : data) {
+                if (e.getPos() != null) {
+                    tagged++;
+                }
+                if (e.hasNewGpsData()) {
+                    newdata++;
+                }
             }
         }
         return "<html>"
-                + trn("{0} image loaded.", "{0} images loaded.", data.size(), data.size())
+                + trn("{0} image loaded.", "{0} images loaded.", n, n)
                 + " " + trn("{0} was found to be GPS tagged.", "{0} were found to be GPS tagged.", tagged, tagged)
                 + (newdata > 0 ? "<br>" + trn("{0} has updated GPS data.", "{0} have updated GPS data.", newdata, newdata) : "")
                 + "</html>";
@@ -400,9 +401,11 @@ public class GeoImageLayer extends Layer implements PropertyChangeListener, Jump
         stopLoadThumbs();
         l.stopLoadThumbs();
 
-        final ImageEntry selected = l.currentPhoto >= 0 ? l.data.get(l.currentPhoto) : null;
+        final ImageEntry selected = l.data != null && l.currentPhoto >= 0 ? l.data.get(l.currentPhoto) : null;
 
-        data.addAll(l.data);
+        if (l.data != null) {
+            data.addAll(l.data);
+        }
         Collections.sort(data);
 
         // Supress the double photos.
@@ -423,7 +426,7 @@ public class GeoImageLayer extends Layer implements PropertyChangeListener, Jump
             GuiHelper.runInEDTAndWait(new Runnable() {
                 @Override
                 public void run() {
-                    for (int i = 0; i < data.size() ; i++) {
+                    for (int i = 0; i < data.size(); i++) {
                         if (selected.equals(data.get(i))) {
                             currentPhoto = i;
                             ImageViewerDialog.showImage(GeoImageLayer.this, data.get(i));
@@ -481,35 +484,35 @@ public class GeoImageLayer extends Layer implements PropertyChangeListener, Jump
 
             if (updateOffscreenBuffer) {
                 Graphics2D tempG = offscreenBuffer.createGraphics();
-                tempG.setColor(new Color(0,0,0,0));
+                tempG.setColor(new Color(0, 0, 0, 0));
                 Composite saveComp = tempG.getComposite();
                 tempG.setComposite(AlphaComposite.Clear);   // remove the old images
                 tempG.fillRect(0, 0, width, height);
                 tempG.setComposite(saveComp);
 
-                for (ImageEntry e : data) {
-                    if (e.getPos() == null) {
-                        continue;
-                    }
-                    Point p = mv.getPoint(e.getPos());
-                    if (e.thumbnail != null) {
-                        Dimension d = scaledDimension(e.thumbnail);
-                        Rectangle target = new Rectangle(p.x - d.width / 2, p.y - d.height / 2, d.width, d.height);
-                        if (clip.intersects(target)) {
-                            tempG.drawImage(e.thumbnail, target.x, target.y, target.width, target.height, null);
+                if (data != null) {
+                    for (ImageEntry e : data) {
+                        if (e.getPos() == null) {
+                            continue;
+                        }
+                        Point p = mv.getPoint(e.getPos());
+                        if (e.thumbnail != null) {
+                            Dimension d = scaledDimension(e.thumbnail);
+                            Rectangle target = new Rectangle(p.x - d.width / 2, p.y - d.height / 2, d.width, d.height);
+                            if (clip.intersects(target)) {
+                                tempG.drawImage(e.thumbnail, target.x, target.y, target.width, target.height, null);
+                            }
+                        } else { // thumbnail not loaded yet
+                            icon.paintIcon(mv, tempG,
+                                    p.x - icon.getIconWidth() / 2,
+                                    p.y - icon.getIconHeight() / 2);
                         }
-                    }
-                    else { // thumbnail not loaded yet
-                        icon.paintIcon(mv, tempG,
-                                p.x - icon.getIconWidth() / 2,
-                                p.y - icon.getIconHeight() / 2);
                     }
                 }
                 updateOffscreenBuffer = false;
             }
             g.drawImage(offscreenBuffer, 0, 0, null);
-        }
-        else {
+        } else if (data != null) {
             for (ImageEntry e : data) {
                 if (e.getPos() == null) {
                     continue;
@@ -533,8 +536,7 @@ public class GeoImageLayer extends Layer implements PropertyChangeListener, Jump
                     Dimension d = scaledDimension(e.thumbnail);
                     imgWidth = d.width;
                     imgHeight = d.height;
-                }
-                else {
+                } else {
                     imgWidth = selectedIcon.getIconWidth();
                     imgHeight = selectedIcon.getIconHeight();
                 }
@@ -546,9 +548,9 @@ public class GeoImageLayer extends Layer implements PropertyChangeListener, Jump
 
                     double dir = e.getExifImgDir();
                     // Rotate 90 degrees CCW
-                    double headdir = ( dir < 90 ) ? dir + 270 : dir - 90;
-                    double leftdir = ( headdir < 90 ) ? headdir + 270 : headdir - 90;
-                    double rightdir = ( headdir > 270 ) ? headdir - 270 : headdir + 90;
+                    double headdir = (dir < 90) ? dir + 270 : dir - 90;
+                    double leftdir = (headdir < 90) ? headdir + 270 : headdir - 90;
+                    double rightdir = (headdir > 270) ? headdir - 270 : headdir + 90;
 
                     double ptx = p.x + Math.cos(Math.toRadians(headdir)) * arrowlength;
                     double pty = p.y + Math.sin(Math.toRadians(headdir)) * arrowlength;
@@ -628,16 +630,14 @@ public class GeoImageLayer extends Layer implements PropertyChangeListener, Jump
         try {
             double speed = dirGps.getDouble(GpsDirectory.TAG_SPEED);
             String speedRef = dirGps.getString(GpsDirectory.TAG_SPEED_REF);
-            if (speedRef != null) {
-                if (speedRef.equalsIgnoreCase("M")) {
-                    // miles per hour
-                    speed *= 1.609344;
-                } else if (speedRef.equalsIgnoreCase("N")) {
-                    // knots == nautical miles per hour
-                    speed *= 1.852;
-                }
-                // default is K (km/h)
+            if ("M".equalsIgnoreCase(speedRef)) {
+                // miles per hour
+                speed *= 1.609344;
+            } else if ("N".equalsIgnoreCase(speedRef)) {
+                // knots == nautical miles per hour
+                speed *= 1.852;
             }
+            // default is K (km/h)
             e.setSpeed(speed);
         } catch (Exception ex) {
             Main.debug(ex.getMessage());
@@ -693,8 +693,7 @@ public class GeoImageLayer extends Layer implements PropertyChangeListener, Jump
                 cal.set(Calendar.YEAR, Integer.parseInt(dateStampComps[0]));
                 cal.set(Calendar.MONTH, Integer.parseInt(dateStampComps[1]) - 1);
                 cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(dateStampComps[2]));
-            }
-            else {
+            } else {
                 // No GPS date stamp in EXIF data. Copy it from EXIF time.
                 // Date is not set if EXIF time is not available.
                 if (e.hasExifTime()) {
@@ -758,7 +757,7 @@ public class GeoImageLayer extends Layer implements PropertyChangeListener, Jump
     }
 
     public void checkPreviousNextButtons() {
-        ImageViewerDialog.setNextEnabled(currentPhoto < data.size() - 1);
+        ImageViewerDialog.setNextEnabled(data != null && currentPhoto < data.size() - 1);
         ImageViewerDialog.setPreviousEnabled(currentPhoto > 0);
     }
 
@@ -788,16 +787,15 @@ public class GeoImageLayer extends Layer implements PropertyChangeListener, Jump
                     tr("Delete image file from disk"),
                     new String[] {tr("Cancel"), tr("Delete")})
             .setButtonIcons(new String[] {"cancel", "dialogs/delete"})
-            .setContent(new JLabel(tr("<html><h3>Delete the file {0} from disk?<p>The image file will be permanently lost!</h3></html>"
-                    ,toDelete.getFile().getName()), ImageProvider.get("dialogs/geoimage/deletefromdisk"),SwingConstants.LEFT))
+            .setContent(new JLabel(tr("<html><h3>Delete the file {0} from disk?<p>The image file will be permanently lost!</h3></html>",
+                    toDelete.getFile().getName()), ImageProvider.get("dialogs/geoimage/deletefromdisk"), SwingConstants.LEFT))
                     .toggleEnable("geoimage.deleteimagefromdisk")
                     .setCancelButton(1)
                     .setDefaultButton(2)
                     .showDialog()
                     .getValue();
 
-            if(result == 2)
-            {
+            if (result == 2) {
                 data.remove(currentPhoto);
                 if (currentPhoto >= data.size()) {
                     currentPhoto = data.size() - 1;
@@ -809,7 +807,7 @@ public class GeoImageLayer extends Layer implements PropertyChangeListener, Jump
                 }
 
                 if (toDelete.getFile().delete()) {
-                    Main.info("File "+toDelete.getFile().toString()+" deleted. ");
+                    Main.info("File "+toDelete.getFile()+" deleted. ");
                 } else {
                     JOptionPane.showMessageDialog(
                             Main.parent,
@@ -923,7 +921,7 @@ public class GeoImageLayer extends Layer implements PropertyChangeListener, Jump
      * @return {@code true} if the map mode is supported,
      *         {@code false} otherwise
      */
-    private static final boolean isSupportedMapMode(MapMode mapMode) {
+    private static boolean isSupportedMapMode(MapMode mapMode) {
         if (mapMode instanceof SelectAction || mapMode instanceof LassoModeAction) {
             return true;
         }
@@ -943,11 +941,12 @@ public class GeoImageLayer extends Layer implements PropertyChangeListener, Jump
     @Override
     public void hookUpMapView() {
         mouseAdapter = new MouseAdapter() {
-            private final boolean isMapModeOk() {
+            private boolean isMapModeOk() {
                 return Main.map.mapMode == null || isSupportedMapMode(Main.map.mapMode);
             }
-            @Override public void mousePressed(MouseEvent e) {
 
+            @Override
+            public void mousePressed(MouseEvent e) {
                 if (e.getButton() != MouseEvent.BUTTON1)
                     return;
                 if (isVisible() && isMapModeOk()) {
@@ -955,7 +954,8 @@ public class GeoImageLayer extends Layer implements PropertyChangeListener, Jump
                 }
             }
 
-            @Override public void mouseReleased(MouseEvent ev) {
+            @Override
+            public void mouseReleased(MouseEvent ev) {
                 if (ev.getButton() != MouseEvent.BUTTON1)
                     return;
                 if (data == null || !isVisible() || !isMapModeOk())
@@ -1022,7 +1022,9 @@ public class GeoImageLayer extends Layer implements PropertyChangeListener, Jump
                     Main.map.mapView.removeMouseListener(mouseAdapter);
                     MapFrame.removeMapModeChangeListener(mapModeListener);
                     currentPhoto = -1;
-                    data.clear();
+                    if (data != null) {
+                        data.clear();
+                    }
                     data = null;
                     // stop listening to layer change events
                     MapView.removeLayerChangeListener(this);
@@ -1039,7 +1041,8 @@ public class GeoImageLayer extends Layer implements PropertyChangeListener, Jump
 
     @Override
     public void propertyChange(PropertyChangeEvent evt) {
-        if (NavigatableComponent.PROPNAME_CENTER.equals(evt.getPropertyName()) || NavigatableComponent.PROPNAME_SCALE.equals(evt.getPropertyName())) {
+        if (NavigatableComponent.PROPNAME_CENTER.equals(evt.getPropertyName()) ||
+                NavigatableComponent.PROPNAME_SCALE.equals(evt.getPropertyName())) {
             updateOffscreenBuffer = true;
         }
     }
@@ -1088,6 +1091,9 @@ public class GeoImageLayer extends Layer implements PropertyChangeListener, Jump
      * @return List of images in layer
      */
     public List<ImageEntry> getImages() {
+        if (data == null) {
+            return Collections.emptyList();
+        }
         List<ImageEntry> copy = new ArrayList<>(data.size());
         for (ImageEntry ie : data) {
             copy.add(ie);
diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplay.java b/src/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplay.java
index 5f0d8e2..6c8a36b 100644
--- a/src/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplay.java
+++ b/src/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplay.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.layer.geoimage;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -28,6 +28,7 @@ import javax.swing.JComponent;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.tools.ExifReader;
 
+
 public class ImageDisplay extends JComponent {
 
     /** The file that is currently displayed */
@@ -71,7 +72,7 @@ public class ImageDisplay extends JComponent {
             tracker.addImage(img, 1);
 
             // Wait for the end of loading
-            while (! tracker.checkID(1, true)) {
+            while (!tracker.checkID(1, true)) {
                 if (this.file != ImageDisplay.this.file) {
                     // The file has changed
                     tracker.removeImage(img);
@@ -89,7 +90,7 @@ public class ImageDisplay extends JComponent {
                 error = true;
             }
 
-            synchronized(ImageDisplay.this) {
+            synchronized (ImageDisplay.this) {
                 if (this.file != ImageDisplay.this.file) {
                     // The file has changed
                     tracker.removeImage(img);
@@ -204,7 +205,7 @@ public class ImageDisplay extends JComponent {
             // The position is also limited by the image size
             checkVisibleRectPos(image, visibleRect);
 
-            synchronized(ImageDisplay.this) {
+            synchronized (ImageDisplay.this) {
                 if (ImageDisplay.this.file == file) {
                     ImageDisplay.this.visibleRect = visibleRect;
                 }
@@ -241,7 +242,7 @@ public class ImageDisplay extends JComponent {
 
             checkVisibleRectPos(image, visibleRect);
 
-            synchronized(ImageDisplay.this) {
+            synchronized (ImageDisplay.this) {
                 if (ImageDisplay.this.file == file) {
                     ImageDisplay.this.visibleRect = visibleRect;
                 }
@@ -288,7 +289,7 @@ public class ImageDisplay extends JComponent {
 
         @Override
         public void mouseDragged(MouseEvent e) {
-            if (! mouseIsDragging && selectedRect == null)
+            if (!mouseIsDragging && selectedRect == null)
                 return;
 
             File file;
@@ -312,7 +313,7 @@ public class ImageDisplay extends JComponent {
                 visibleRect.x += mousePointInImg.x - p.x;
                 visibleRect.y += mousePointInImg.y - p.y;
                 checkVisibleRectPos(image, visibleRect);
-                synchronized(ImageDisplay.this) {
+                synchronized (ImageDisplay.this) {
                     if (ImageDisplay.this.file == file) {
                         ImageDisplay.this.visibleRect = visibleRect;
                     }
@@ -323,10 +324,10 @@ public class ImageDisplay extends JComponent {
                 Point p = comp2imgCoord(visibleRect, e.getX(), e.getY());
                 checkPointInVisibleRect(p, visibleRect);
                 Rectangle rect = new Rectangle(
-                        (p.x < mousePointInImg.x ? p.x : mousePointInImg.x),
-                        (p.y < mousePointInImg.y ? p.y : mousePointInImg.y),
-                        (p.x < mousePointInImg.x ? mousePointInImg.x - p.x : p.x - mousePointInImg.x),
-                        (p.y < mousePointInImg.y ? mousePointInImg.y - p.y : p.y - mousePointInImg.y));
+                        p.x < mousePointInImg.x ? p.x : mousePointInImg.x,
+                        p.y < mousePointInImg.y ? p.y : mousePointInImg.y,
+                        p.x < mousePointInImg.x ? mousePointInImg.x - p.x : p.x - mousePointInImg.x,
+                        p.y < mousePointInImg.y ? mousePointInImg.y - p.y : p.y - mousePointInImg.y);
                 checkVisibleRectSize(image, rect);
                 checkVisibleRectPos(image, rect);
                 ImageDisplay.this.selectedRect = rect;
@@ -337,7 +338,7 @@ public class ImageDisplay extends JComponent {
 
         @Override
         public void mouseReleased(MouseEvent e) {
-            if (! mouseIsDragging && selectedRect == null)
+            if (!mouseIsDragging && selectedRect == null)
                 return;
 
             File file;
@@ -435,7 +436,7 @@ public class ImageDisplay extends JComponent {
     }
 
     public void setImage(File file, Integer orientation) {
-        synchronized(this) {
+        synchronized (this) {
             this.file = file;
             image = null;
             selectedRect = null;
@@ -443,7 +444,7 @@ public class ImageDisplay extends JComponent {
         }
         repaint();
         if (file != null) {
-            new Thread(new LoadImageRunnable(file, orientation)).start();
+            new Thread(new LoadImageRunnable(file, orientation), LoadImageRunnable.class.getName()).start();
         }
     }
 
@@ -459,7 +460,7 @@ public class ImageDisplay extends JComponent {
         Rectangle visibleRect;
         boolean errorLoading;
 
-        synchronized(this) {
+        synchronized (this) {
             image = this.image;
             file = this.file;
             visibleRect = this.visibleRect;
@@ -477,7 +478,7 @@ public class ImageDisplay extends JComponent {
         } else if (image == null) {
             g.setColor(Color.black);
             String loadingStr;
-            if (! errorLoading) {
+            if (!errorLoading) {
                 loadingStr = tr("Loading {0}", file.getName());
             } else {
                 loadingStr = tr("Error on file {0}", file.getName());
@@ -545,19 +546,19 @@ public class ImageDisplay extends JComponent {
         }
     }
 
-    private final Point img2compCoord(Rectangle visibleRect, int xImg, int yImg) {
+    private Point img2compCoord(Rectangle visibleRect, int xImg, int yImg) {
         Rectangle drawRect = calculateDrawImageRectangle(visibleRect);
         return new Point(drawRect.x + ((xImg - visibleRect.x) * drawRect.width) / visibleRect.width,
                 drawRect.y + ((yImg - visibleRect.y) * drawRect.height) / visibleRect.height);
     }
 
-    private final Point comp2imgCoord(Rectangle visibleRect, int xComp, int yComp) {
+    private Point comp2imgCoord(Rectangle visibleRect, int xComp, int yComp) {
         Rectangle drawRect = calculateDrawImageRectangle(visibleRect);
         return new Point(visibleRect.x + ((xComp - drawRect.x) * visibleRect.width) / drawRect.width,
                 visibleRect.y + ((yComp - drawRect.y) * visibleRect.height) / drawRect.height);
     }
 
-    private final Point getCenterImgCoord(Rectangle visibleRect) {
+    private Point getCenterImgCoord(Rectangle visibleRect) {
         return new Point(visibleRect.x + visibleRect.width / 2,
                 visibleRect.y + visibleRect.height / 2);
     }
@@ -620,7 +621,7 @@ public class ImageDisplay extends JComponent {
             checkVisibleRectPos(image, visibleRect);
         }
 
-        synchronized(this) {
+        synchronized (this) {
             if (file == this.file) {
                 this.visibleRect = visibleRect;
             }
@@ -628,7 +629,7 @@ public class ImageDisplay extends JComponent {
         repaint();
     }
 
-    private final void checkVisibleRectPos(Image image, Rectangle visibleRect) {
+    private void checkVisibleRectPos(Image image, Rectangle visibleRect) {
         if (visibleRect.x < 0) {
             visibleRect.x = 0;
         }
diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java b/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java
index 6341c7d..7c7cd11 100644
--- a/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java
+++ b/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.layer.geoimage;
 
 import java.awt.Image;
@@ -57,11 +57,13 @@ public final class ImageEntry implements Comparable<ImageEntry>, Cloneable {
             return tmp.pos;
         return pos;
     }
+
     public Double getSpeed() {
         if (tmp != null)
             return tmp.speed;
         return speed;
     }
+
     public Double getElevation() {
         if (tmp != null)
             return tmp.elevation;
@@ -79,7 +81,7 @@ public final class ImageEntry implements Comparable<ImageEntry>, Cloneable {
      * @return {@code true} if this entry has a GPS time
      * @since 6450
      */
-    public final boolean hasGpsTime() {
+    public boolean hasGpsTime() {
         return (tmp != null && tmp.gpsTime != null) || gpsTime != null;
     }
 
@@ -89,9 +91,11 @@ public final class ImageEntry implements Comparable<ImageEntry>, Cloneable {
     public File getFile() {
         return file;
     }
+
     public Integer getExifOrientation() {
         return exifOrientation;
     }
+
     public Date getExifTime() {
         return getDefensiveDate(exifTime);
     }
@@ -101,7 +105,7 @@ public final class ImageEntry implements Comparable<ImageEntry>, Cloneable {
      * @return {@code true} if this entry has a EXIF time
      * @since 6450
      */
-    public final boolean hasExifTime() {
+    public boolean hasExifTime() {
         return exifTime != null;
     }
 
@@ -110,7 +114,7 @@ public final class ImageEntry implements Comparable<ImageEntry>, Cloneable {
      * @return the EXIF GPS time
      * @since 6392
      */
-    public final Date getExifGpsTime() {
+    public Date getExifGpsTime() {
         return getDefensiveDate(exifGpsTime);
     }
 
@@ -119,7 +123,7 @@ public final class ImageEntry implements Comparable<ImageEntry>, Cloneable {
      * @return {@code true} if this entry has a EXIF GPS time
      * @since 6450
      */
-    public final boolean hasExifGpsTime() {
+    public boolean hasExifGpsTime() {
         return exifGpsTime != null;
     }
 
@@ -132,6 +136,7 @@ public final class ImageEntry implements Comparable<ImageEntry>, Cloneable {
     public LatLon getExifCoor() {
         return exifCoor;
     }
+
     public Double getExifImgDir() {
         return exifImgDir;
     }
@@ -146,21 +151,27 @@ public final class ImageEntry implements Comparable<ImageEntry>, Cloneable {
     public void setPos(CachedLatLon pos) {
         this.pos = pos;
     }
+
     public void setPos(LatLon pos) {
         this.pos = new CachedLatLon(pos);
     }
+
     public void setSpeed(Double speed) {
         this.speed = speed;
     }
+
     public void setElevation(Double elevation) {
         this.elevation = elevation;
     }
+
     public void setFile(File file) {
         this.file = file;
     }
+
     public void setExifOrientation(Integer exifOrientation) {
         this.exifOrientation = exifOrientation;
     }
+
     public void setExifTime(Date exifTime) {
         this.exifTime = getDefensiveDate(exifTime);
     }
@@ -170,16 +181,18 @@ public final class ImageEntry implements Comparable<ImageEntry>, Cloneable {
      * @param exifGpsTime the EXIF GPS time
      * @since 6392
      */
-    public final void setExifGpsTime(Date exifGpsTime) {
+    public void setExifGpsTime(Date exifGpsTime) {
         this.exifGpsTime = getDefensiveDate(exifGpsTime);
     }
 
     public void setGpsTime(Date gpsTime) {
         this.gpsTime = getDefensiveDate(gpsTime);
     }
+
     public void setExifCoor(LatLon exifCoor) {
         this.exifCoor = exifCoor;
     }
+
     public void setExifImgDir(double exifDir) {
         this.exifImgDir = exifDir;
     }
diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java b/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java
index 26a2588..a4572c8 100644
--- a/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java
+++ b/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.layer.geoimage;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -83,7 +83,7 @@ public final class ImageViewerDialog extends ToggleDialog implements LayerChange
 
         content.add(imgDisplay, BorderLayout.CENTER);
 
-        Dimension buttonDim = new Dimension(26,26);
+        Dimension buttonDim = new Dimension(26, 26);
 
         ImageAction prevAction = new ImageAction(COMMAND_PREVIOUS, ImageProvider.get("dialogs", "previous"), tr("Previous"));
         btnPrevious = new JButton(prevAction);
@@ -106,7 +106,8 @@ public final class ImageViewerDialog extends ToggleDialog implements LayerChange
         btnDelete.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(scDelete.getKeyStroke(), DELETE_TEXT);
         btnDelete.getActionMap().put(DELETE_TEXT, delAction);
 
-        ImageAction delFromDiskAction = new ImageAction(COMMAND_REMOVE_FROM_DISK, ImageProvider.get("dialogs", "geoimage/deletefromdisk"), tr("Delete image file from disk"));
+        ImageAction delFromDiskAction = new ImageAction(COMMAND_REMOVE_FROM_DISK,
+                ImageProvider.get("dialogs", "geoimage/deletefromdisk"), tr("Delete image file from disk"));
         JButton btnDeleteFromDisk = new JButton(delFromDiskAction);
         btnDeleteFromDisk.setPreferredSize(buttonDim);
         Shortcut scDeleteFromDisk = Shortcut.registerShortcut(
@@ -148,14 +149,17 @@ public final class ImageViewerDialog extends ToggleDialog implements LayerChange
                         "geoimage:last", tr("Geoimage: {0}", tr("Show last Image")), KeyEvent.VK_END, Shortcut.DIRECT)
         );
 
-        JToggleButton tbCentre = new JToggleButton(new ImageAction(COMMAND_CENTERVIEW, ImageProvider.get("dialogs", "centreview"), tr("Center view")));
+        JToggleButton tbCentre = new JToggleButton(new ImageAction(COMMAND_CENTERVIEW,
+                ImageProvider.get("dialogs", "centreview"), tr("Center view")));
         tbCentre.setPreferredSize(buttonDim);
 
-        JButton btnZoomBestFit = new JButton(new ImageAction(COMMAND_ZOOM, ImageProvider.get("dialogs", "zoom-best-fit"), tr("Zoom best fit and 1:1")));
+        JButton btnZoomBestFit = new JButton(new ImageAction(COMMAND_ZOOM,
+                ImageProvider.get("dialogs", "zoom-best-fit"), tr("Zoom best fit and 1:1")));
         btnZoomBestFit.setPreferredSize(buttonDim);
 
-        btnCollapse = new JButton(new ImageAction(COMMAND_COLLAPSE, ImageProvider.get("dialogs", "collapse"), tr("Move dialog to the side pane")));
-        btnCollapse.setPreferredSize(new Dimension(20,20));
+        btnCollapse = new JButton(new ImageAction(COMMAND_COLLAPSE,
+                ImageProvider.get("dialogs", "collapse"), tr("Move dialog to the side pane")));
+        btnCollapse.setPreferredSize(new Dimension(20, 20));
         btnCollapse.setAlignmentY(Component.TOP_ALIGNMENT);
 
         JPanel buttons = new JPanel();
@@ -198,6 +202,7 @@ public final class ImageViewerDialog extends ToggleDialog implements LayerChange
 
     class ImageAction extends AbstractAction {
         private final String action;
+
         public ImageAction(String action, ImageIcon icon, String toolTipText) {
             this.action = action;
             putValue(SHORT_DESCRIPTION, toolTipText);
@@ -218,16 +223,13 @@ public final class ImageViewerDialog extends ToggleDialog implements LayerChange
                 currentLayer.showFirstPhoto();
             } else if (COMMAND_LAST.equals(action) && currentLayer != null) {
                 currentLayer.showLastPhoto();
-
             } else if (COMMAND_CENTERVIEW.equals(action)) {
                 centerView = ((JToggleButton) e.getSource()).isSelected();
                 if (centerView && currentEntry != null && currentEntry.getPos() != null) {
                     Main.map.mapView.zoomTo(currentEntry.getPos());
                 }
-
             } else if (COMMAND_ZOOM.equals(action)) {
                 imgDisplay.zoomBestFitOrOne();
-
             } else if (COMMAND_REMOVE.equals(action)) {
                 if (currentLayer != null) {
                     currentLayer.removeCurrentPhoto();
@@ -279,7 +281,7 @@ public final class ImageViewerDialog extends ToggleDialog implements LayerChange
     public void displayImage(GeoImageLayer layer, ImageEntry entry) {
         boolean imageChanged;
 
-        synchronized(this) {
+        synchronized (this) {
             // TODO: pop up image dialog but don't load image again
 
             imageChanged = currentEntry != entry;
@@ -326,7 +328,7 @@ public final class ImageViewerDialog extends ToggleDialog implements LayerChange
             imgDisplay.setOsdText("");
             return;
         }
-        if (! isDialogShowing()) {
+        if (!isDialogShowing()) {
             setIsDocked(false);     // always open a detached window when an image is clicked and dialog is closed
             showDialog();
         } else {
@@ -387,14 +389,14 @@ public final class ImageViewerDialog extends ToggleDialog implements LayerChange
     @Override
     public void activeLayerChange(Layer oldLayer, Layer newLayer) {
         if (currentLayer == null && newLayer instanceof GeoImageLayer) {
-            ((GeoImageLayer)newLayer).showFirstPhoto();
+            ((GeoImageLayer) newLayer).showFirstPhoto();
         }
     }
 
     @Override
     public void layerAdded(Layer newLayer) {
         if (currentLayer == null && newLayer instanceof GeoImageLayer) {
-            ((GeoImageLayer)newLayer).showFirstPhoto();
+            ((GeoImageLayer) newLayer).showFirstPhoto();
         }
     }
 
diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/JpegFileFilter.java b/src/org/openstreetmap/josm/gui/layer/geoimage/JpegFileFilter.java
deleted file mode 100644
index 500235e..0000000
--- a/src/org/openstreetmap/josm/gui/layer/geoimage/JpegFileFilter.java
+++ /dev/null
@@ -1,29 +0,0 @@
-// License: GPL. See LICENSE file for details.
-package org.openstreetmap.josm.gui.layer.geoimage;
-
-import static org.openstreetmap.josm.tools.I18n.tr;
-
-import java.io.File;
-
-class JpegFileFilter extends javax.swing.filechooser.FileFilter implements java.io.FileFilter {
-
-    private static final JpegFileFilter instance = new JpegFileFilter();
-    public static JpegFileFilter getInstance() {
-        return instance;
-    }
-
-    @Override
-    public boolean accept(File f) {
-        if (f.isDirectory()) {
-            return true;
-        } else {
-            String name = f.getName().toLowerCase();
-            return name.endsWith(".jpg") || name.endsWith(".jpeg");
-        }
-    }
-
-    @Override
-    public String getDescription() {
-        return tr("JPEG images (*.jpg)");
-    }
-}
diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/ShowThumbnailAction.java b/src/org/openstreetmap/josm/gui/layer/geoimage/ShowThumbnailAction.java
index 10446ac..874c7f9 100644
--- a/src/org/openstreetmap/josm/gui/layer/geoimage/ShowThumbnailAction.java
+++ b/src/org/openstreetmap/josm/gui/layer/geoimage/ShowThumbnailAction.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.layer.geoimage;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -50,7 +50,7 @@ public class ShowThumbnailAction extends AbstractAction implements LayerAction {
      *         {@code false} otherwise
      */
     private static boolean enabled(GeoImageLayer layer) {
-        return !layer.data.isEmpty();
+        return layer.data != null && !layer.data.isEmpty();
     }
 
     /** Create actual menu entry and define if it is enabled or not. */
diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/ThumbsLoader.java b/src/org/openstreetmap/josm/gui/layer/geoimage/ThumbsLoader.java
index ed02467..80b3527 100644
--- a/src/org/openstreetmap/josm/gui/layer/geoimage/ThumbsLoader.java
+++ b/src/org/openstreetmap/josm/gui/layer/geoimage/ThumbsLoader.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.layer.geoimage;
 
 import java.awt.Graphics2D;
@@ -8,11 +8,18 @@ import java.awt.Rectangle;
 import java.awt.Toolkit;
 import java.awt.geom.AffineTransform;
 import java.awt.image.BufferedImage;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
+import javax.imageio.ImageIO;
+
+import org.apache.commons.jcs.access.behavior.ICacheAccess;
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.io.CacheFiles;
+import org.openstreetmap.josm.data.cache.BufferedImageCacheEntry;
+import org.openstreetmap.josm.data.cache.JCSCacheManager;
 import org.openstreetmap.josm.tools.ExifReader;
 
 public class ThumbsLoader implements Runnable {
@@ -22,16 +29,20 @@ public class ThumbsLoader implements Runnable {
     private List<ImageEntry> data;
     private GeoImageLayer layer;
     private MediaTracker tracker;
-    private CacheFiles cache;
+    private ICacheAccess<String , BufferedImageCacheEntry> cache;
     private boolean cacheOff = Main.pref.getBoolean("geoimage.noThumbnailCache", false);
 
     public ThumbsLoader(GeoImageLayer layer) {
         this.layer = layer;
         this.data = new ArrayList<>(layer.data);
         if (!cacheOff) {
-            cache = new CacheFiles("geoimage-thumbnails", false);
-            cache.setExpire(CacheFiles.EXPIRE_NEVER, false);
-            cache.setMaxSize(120, false);
+            try {
+                cache = JCSCacheManager.getCache("geoimage-thumbnails", 0, 120,
+                        Main.pref.getCacheDirectory().getPath() + File.separator + "geoimage-thumbnails");
+            } catch (IOException e) {
+                Main.warn("Failed to initialize cache for geoimage-thumbnails");
+                Main.warn(e);
+            }
         }
     }
 
@@ -58,13 +69,17 @@ public class ThumbsLoader implements Runnable {
     }
 
     private BufferedImage loadThumb(ImageEntry entry) {
-        final String cacheIdent = entry.getFile().toString()+":"+maxSize;
+        final String cacheIdent = entry.getFile()+":"+maxSize;
 
-        if (!cacheOff) {
-            BufferedImage cached = cache.getImg(cacheIdent);
-            if (cached != null) {
-                Main.debug(" from cache");
-                return cached;
+        if (!cacheOff && cache != null) {
+            try {
+                BufferedImageCacheEntry cacheEntry = cache.get(cacheIdent);
+                if (cacheEntry != null && cacheEntry.getImage() != null) {
+                    Main.debug(" from cache");
+                    return cacheEntry.getImage();
+                }
+            } catch (IOException e) {
+                Main.warn(e);
             }
         }
 
@@ -84,7 +99,8 @@ public class ThumbsLoader implements Runnable {
         final int w = img.getWidth(null);
         final int h = img.getHeight(null);
         final int hh, ww;
-        if (ExifReader.orientationSwitchesDimensions(entry.getExifOrientation())) {
+        final Integer exifOrientation = entry.getExifOrientation();
+        if (exifOrientation != null && ExifReader.orientationSwitchesDimensions(exifOrientation)) {
             ww = h;
             hh = w;
         } else {
@@ -98,14 +114,16 @@ public class ThumbsLoader implements Runnable {
         BufferedImage scaledBI = new BufferedImage(targetSize.width, targetSize.height, BufferedImage.TYPE_INT_RGB);
         Graphics2D g = scaledBI.createGraphics();
 
-        final AffineTransform restoreOrientation = ExifReader.getRestoreOrientationTransform(entry.getExifOrientation(), w, h);
         final AffineTransform scale = AffineTransform.getScaleInstance((double) targetSize.width / ww, (double) targetSize.height / hh);
-        scale.concatenate(restoreOrientation);
+        if (exifOrientation != null) {
+            final AffineTransform restoreOrientation = ExifReader.getRestoreOrientationTransform(exifOrientation, w, h);
+            scale.concatenate(restoreOrientation);
+        }
 
         while (!g.drawImage(img, scale, null)) {
             try {
                 Thread.sleep(10);
-            } catch(InterruptedException ie) {
+            } catch (InterruptedException ie) {
                 Main.warn("InterruptedException while drawing thumb");
             }
         }
@@ -117,11 +135,16 @@ public class ThumbsLoader implements Runnable {
             return null;
         }
 
-        if (!cacheOff) {
-            cache.saveImg(cacheIdent, scaledBI);
+        if (!cacheOff && cache != null) {
+            try (ByteArrayOutputStream output = new ByteArrayOutputStream()) {
+                ImageIO.write(scaledBI, "png", output);
+                cache.put(cacheIdent, new BufferedImageCacheEntry(output.toByteArray()));
+            } catch (IOException e) {
+                Main.warn("Failed to save geoimage thumb to cache");
+                Main.warn(e);
+            }
         }
 
         return scaledBI;
     }
-
 }
diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/package-info.java b/src/org/openstreetmap/josm/gui/layer/geoimage/package-info.java
new file mode 100644
index 0000000..e5bba5e
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/layer/geoimage/package-info.java
@@ -0,0 +1,6 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Provides classes for handling layers displaying geottaged pictures.
+ */
+package org.openstreetmap.josm.gui.layer.geoimage;
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/ChooseTrackVisibilityAction.java b/src/org/openstreetmap/josm/gui/layer/gpx/ChooseTrackVisibilityAction.java
index ae43558..848da50 100644
--- a/src/org/openstreetmap/josm/gui/layer/gpx/ChooseTrackVisibilityAction.java
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/ChooseTrackVisibilityAction.java
@@ -32,10 +32,10 @@ import javax.swing.table.TableCellRenderer;
 import javax.swing.table.TableRowSorter;
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.SystemOfMeasurement;
 import org.openstreetmap.josm.data.gpx.GpxConstants;
 import org.openstreetmap.josm.data.gpx.GpxTrack;
 import org.openstreetmap.josm.gui.ExtendedDialog;
-import org.openstreetmap.josm.gui.NavigatableComponent;
 import org.openstreetmap.josm.gui.layer.GpxLayer;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
@@ -82,7 +82,7 @@ public class ChooseTrackVisibilityAction extends AbstractAction {
          */
         @Override
         public String toString() {
-            return NavigatableComponent.getSystemOfMeasurement().getDistText(value);
+            return SystemOfMeasurement.getSystemOfMeasurement().getDistText(value);
         }
     }
 
@@ -98,9 +98,9 @@ public class ChooseTrackVisibilityAction extends AbstractAction {
          */
         @Override
         public int compare(TrackLength l0, TrackLength l1) {
-            if(l0.value < l1.value)
+            if (l0.value < l1.value)
                 return -1;
-            else if(l0.value > l1.value)
+            else if (l0.value > l1.value)
                 return 1;
             return 0;
         }
@@ -183,7 +183,7 @@ public class ChooseTrackVisibilityAction extends AbstractAction {
         return t;
     }
 
-    private boolean noUpdates=false;
+    private boolean noUpdates = false;
 
     /** selects all rows (=tracks) in the table that are currently visible on the layer*/
     private void selectVisibleTracksInTable() {
@@ -227,7 +227,7 @@ public class ChooseTrackVisibilityAction extends AbstractAction {
         final JPanel msg = new JPanel(new GridBagLayout());
 
         dateFilter = new DateFilterPanel(layer, "gpx.traces", false);
-        dateFilter.setFilterAppliedListener(new ActionListener(){
+        dateFilter.setFilterAppliedListener(new ActionListener() {
             @Override public void actionPerformed(ActionEvent e) {
                 noUpdates = true;
                 selectVisibleTracksInTable();
@@ -249,10 +249,13 @@ public class ChooseTrackVisibilityAction extends AbstractAction {
             }
         });
         dateFilter.setEnabled(false);
-        msg.add(b, GBC.std().insets(0,0,5,0));
-        msg.add(dateFilter, GBC.eol().insets(0,0,10,0).fill(GBC.HORIZONTAL));
+        msg.add(b, GBC.std().insets(0, 0, 5, 0));
+        msg.add(dateFilter, GBC.eol().insets(0, 0, 10, 0).fill(GBC.HORIZONTAL));
 
-        msg.add(new JLabel(tr("<html>Select all tracks that you want to be displayed. You can drag select a " + "range of tracks or use CTRL+Click to select specific ones. The map is updated live in the " + "background. Open the URLs by double clicking them.</html>")), GBC.eop().fill(GBC.HORIZONTAL));
+        msg.add(new JLabel(tr("<html>Select all tracks that you want to be displayed. " +
+                "You can drag select a range of tracks or use CTRL+Click to select specific ones. " +
+                "The map is updated live in the background. Open the URLs by double clicking them.</html>")),
+                GBC.eop().fill(GBC.HORIZONTAL));
         // build table
         final boolean[] trackVisibilityBackup = layer.trackVisibility.clone();
         table = buildTable(buildTableContents());
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/ConvertToDataLayerAction.java b/src/org/openstreetmap/josm/gui/layer/gpx/ConvertToDataLayerAction.java
index f4a05d6..81d38cf 100644
--- a/src/org/openstreetmap/josm/gui/layer/gpx/ConvertToDataLayerAction.java
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/ConvertToDataLayerAction.java
@@ -42,9 +42,14 @@ public class ConvertToDataLayerAction extends AbstractAction {
     @Override
     public void actionPerformed(ActionEvent e) {
         JPanel msg = new JPanel(new GridBagLayout());
-        msg.add(new JLabel(tr("<html>Upload of unprocessed GPS data as map data is considered harmful.<br>If you want to upload traces, look here:</html>")), GBC.eol());
+        msg.add(new JLabel(
+                // CHECKSTYLE.OFF: LineLength
+                tr("<html>Upload of unprocessed GPS data as map data is considered harmful.<br>If you want to upload traces, look here:</html>")),
+                // CHECKSTYLE.ON: LineLength
+                GBC.eol());
         msg.add(new UrlLabel(Main.getOSMWebsite() + "/traces", 2), GBC.eop());
-        if (!ConditionalOptionPaneUtil.showConfirmationDialog("convert_to_data", Main.parent, msg, tr("Warning"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE, JOptionPane.OK_OPTION)) {
+        if (!ConditionalOptionPaneUtil.showConfirmationDialog("convert_to_data", Main.parent, msg, tr("Warning"),
+                JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE, JOptionPane.OK_OPTION)) {
             return;
         }
         DataSet ds = new DataSet();
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/CustomizeDrawingAction.java b/src/org/openstreetmap/josm/gui/layer/gpx/CustomizeDrawingAction.java
index 65751c0..8c42f9c 100644
--- a/src/org/openstreetmap/josm/gui/layer/gpx/CustomizeDrawingAction.java
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/CustomizeDrawingAction.java
@@ -87,7 +87,8 @@ public class CustomizeDrawingAction extends AbstractAction implements LayerActio
             // to fit on screen 800x600
             scrollpane.setPreferredSize(new Dimension(panel.getPreferredSize().width, Math.min(panel.getPreferredSize().height, 450)));
         }
-        int answer = JOptionPane.showConfirmDialog(Main.parent, scrollpane, tr("Customize track drawing"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
+        int answer = JOptionPane.showConfirmDialog(Main.parent, scrollpane, tr("Customize track drawing"),
+                JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
         if (answer == JOptionPane.CANCEL_OPTION || answer == JOptionPane.CLOSED_OPTION) {
             return;
         }
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/DateFilterPanel.java b/src/org/openstreetmap/josm/gui/layer/gpx/DateFilterPanel.java
index 1947b66..c2ac7eb 100644
--- a/src/org/openstreetmap/josm/gui/layer/gpx/DateFilterPanel.java
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/DateFilterPanel.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.layer.gpx;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -29,9 +29,9 @@ public class DateFilterPanel extends JPanel {
 
     private transient ActionListener filterAppliedListener;
 
-    private final String PREF_DATE_0;
-    private final String PREF_DATE_MIN;
-    private final String PREF_DATE_MAX;
+    private final String prefDate0;
+    private final String prefDateMin;
+    private final String prefDateMax;
 
     /**
      * Create the panel to filter tracks on GPX layer @param layer by date
@@ -40,24 +40,24 @@ public class DateFilterPanel extends JPanel {
      */
     public DateFilterPanel(GpxLayer layer, String preferencePrefix, boolean enabled) {
         super(new GridBagLayout());
-        PREF_DATE_0 = preferencePrefix+".showzerotimestamp";
-        PREF_DATE_MIN = preferencePrefix+".mintime";
-        PREF_DATE_MAX = preferencePrefix+".maxtime";
+        prefDate0 = preferencePrefix+".showzerotimestamp";
+        prefDateMin = preferencePrefix+".mintime";
+        prefDateMax = preferencePrefix+".maxtime";
         this.layer = layer;
 
         final Date startTime, endTime;
         Date[] bounds = layer.data.getMinMaxTimeForAllTracks();
-        startTime = (bounds==null) ? new GregorianCalendar(2000, 1, 1).getTime():bounds[0];
-        endTime = (bounds==null) ? new Date() : bounds[1];
+        startTime = (bounds.length == 0) ? new GregorianCalendar(2000, 1, 1).getTime() : bounds[0];
+        endTime = (bounds.length == 0) ? new Date() : bounds[1];
 
         dateFrom.setDate(startTime);
         dateTo.setDate(endTime);
         dateFrom.setRange(startTime, endTime);
         dateTo.setRange(startTime, endTime);
 
-        add(noTimestampCb, GBC.std().grid(1,1).insets(0, 0, 5, 0));
-        add(dateFrom, GBC.std().grid(2,1).fill(GBC.HORIZONTAL));
-        add(dateTo, GBC.eol().grid(3,1).fill(GBC.HORIZONTAL));
+        add(noTimestampCb, GBC.std().grid(1, 1).insets(0, 0, 5, 0));
+        add(dateFrom, GBC.std().grid(2, 1).fill(GBC.HORIZONTAL));
+        add(dateTo, GBC.eol().grid(3, 1).fill(GBC.HORIZONTAL));
 
         setEnabled(enabled);
 
@@ -92,7 +92,7 @@ public class DateFilterPanel extends JPanel {
     public void applyFilter() {
         t.stop();
         filterTracksByDate();
-        if (filterAppliedListener!=null)
+        if (filterAppliedListener != null)
            filterAppliedListener.actionPerformed(null);
     }
 
@@ -100,9 +100,9 @@ public class DateFilterPanel extends JPanel {
      * Called by other components when it is correct time to save date filtering parameters
      */
     public void saveInPrefs() {
-        Main.pref.putLong(PREF_DATE_MIN, dateFrom.getDate().getTime());
-        Main.pref.putLong(PREF_DATE_MAX, dateTo.getDate().getTime());
-        Main.pref.put(PREF_DATE_0, noTimestampCb.isSelected());
+        Main.pref.putLong(prefDateMin, dateFrom.getDate().getTime());
+        Main.pref.putLong(prefDateMax, dateTo.getDate().getTime());
+        Main.pref.put(prefDate0, noTimestampCb.isSelected());
     }
 
     /**
@@ -110,11 +110,11 @@ public class DateFilterPanel extends JPanel {
      * Called by other components when it is needed.
      */
     public void loadFromPrefs() {
-        long t1 =Main.pref.getLong(PREF_DATE_MIN, 0);
-        if (t1!=0) dateFrom.setDate(new Date(t1));
-        long t2 =Main.pref.getLong(PREF_DATE_MAX, 0);
-        if (t2!=0) dateTo.setDate(new Date(t2));
-        noTimestampCb.setSelected(Main.pref.getBoolean(PREF_DATE_0, false));
+        long t1 = Main.pref.getLong(prefDateMin, 0);
+        if (t1 != 0) dateFrom.setDate(new Date(t1));
+        long t2 = Main.pref.getLong(prefDateMax, 0);
+        if (t2 != 0) dateTo.setDate(new Date(t2));
+        noTimestampCb.setSelected(Main.pref.getBoolean(prefDate0, false));
     }
 
     public void setFilterAppliedListener(ActionListener filterAppliedListener) {
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/DownloadAlongPanel.java b/src/org/openstreetmap/josm/gui/layer/gpx/DownloadAlongPanel.java
index 305f005..dcac672 100644
--- a/src/org/openstreetmap/josm/gui/layer/gpx/DownloadAlongPanel.java
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/DownloadAlongPanel.java
@@ -62,25 +62,25 @@ public class DownloadAlongPanel extends JPanel {
 
         cbDownloadOsmData = new JCheckBox(tr("OpenStreetMap data"), Main.pref.getBoolean(prefOsm, true));
         cbDownloadOsmData.setToolTipText(tr("Select to download OSM data."));
-        add(cbDownloadOsmData, GBC.std().insets(1,5,1,5));
+        add(cbDownloadOsmData, GBC.std().insets(1, 5, 1, 5));
         cbDownloadGpxData = new JCheckBox(tr("Raw GPS data"), Main.pref.getBoolean(prefGps, false));
         cbDownloadGpxData.setToolTipText(tr("Select to download GPS traces."));
-        add(cbDownloadGpxData, GBC.eol().insets(5,5,1,5));
+        add(cbDownloadGpxData, GBC.eol().insets(5, 5, 1, 5));
 
         add(new JLabel(tr("Download everything within:")), GBC.std());
         buffer = new JSpinner(new SpinnerNumberModel(50.0, 10.0, 5000.0, 1.0));
-        add(buffer, GBC.std().insets(5,5,5,5));
+        add(buffer, GBC.std().insets(5, 5, 5, 5));
         add(new JLabel(tr("meters")), GBC.eol());
 
         add(new JLabel(tr("Maximum area per request:")), GBC.std());
-        maxRect = new JSpinner(new SpinnerNumberModel(20.0, 1.0, 25.0, 1.0)) {
+        maxRect = new JSpinner(new SpinnerNumberModel(20.0, 0.01, 25.0, 1.0)) {
             @Override
             public Dimension getPreferredSize() {
                 return buffer.getPreferredSize();
             }
         };
-        add(maxRect, GBC.std().insets(5,5,5,5));
-        add(new JLabel(tr("sq km")), GBC.eol());
+        add(maxRect, GBC.std().insets(5, 5, 5, 5));
+        add(new JLabel("km\u00b2"), GBC.eol());
 
         if (prefNear != null) {
             add(new JLabel(tr("Download near:")), GBC.eol());
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/DownloadAlongTrackAction.java b/src/org/openstreetmap/josm/gui/layer/gpx/DownloadAlongTrackAction.java
index 4d50a74..c7cc64c 100644
--- a/src/org/openstreetmap/josm/gui/layer/gpx/DownloadAlongTrackAction.java
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/DownloadAlongTrackAction.java
@@ -184,6 +184,7 @@ public class DownloadAlongTrackAction extends DownloadAlongAction {
                 }
             }
         }
+
         Main.worker.submit(new CalculateDownloadArea());
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/DownloadWmsAlongTrackAction.java b/src/org/openstreetmap/josm/gui/layer/gpx/DownloadWmsAlongTrackAction.java
index ad63bbb..995cd17 100644
--- a/src/org/openstreetmap/josm/gui/layer/gpx/DownloadWmsAlongTrackAction.java
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/DownloadWmsAlongTrackAction.java
@@ -24,8 +24,8 @@ import org.openstreetmap.josm.data.gpx.GpxTrackSegment;
 import org.openstreetmap.josm.data.gpx.WayPoint;
 import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
-import org.openstreetmap.josm.gui.layer.WMSLayer;
-import org.openstreetmap.josm.gui.layer.WMSLayer.PrecacheTask;
+import org.openstreetmap.josm.gui.layer.AbstractTileSourceLayer;
+import org.openstreetmap.josm.gui.layer.AbstractTileSourceLayer.PrecacheTask;
 import org.openstreetmap.josm.gui.progress.ProgressTaskId;
 import org.openstreetmap.josm.gui.progress.ProgressTaskIds;
 import org.openstreetmap.josm.gui.widgets.JosmComboBox;
@@ -34,10 +34,17 @@ import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.xml.sax.SAXException;
 
+/**
+ * Class downloading WMS and TMS along the GPX track
+ *
+ */
 public class DownloadWmsAlongTrackAction extends AbstractAction {
 
     private final transient GpxData data;
 
+    /**
+     * @param data that represents GPX track, along which data should be downloaded
+     */
     public DownloadWmsAlongTrackAction(final GpxData data) {
         super(tr("Precache imagery tiles along this track"), ImageProvider.get("downloadalongtrack"));
         this.data = data;
@@ -56,14 +63,14 @@ public class DownloadWmsAlongTrackAction extends AbstractAction {
         for (WayPoint p : data.waypoints) {
             points.add(p.getCoor());
         }
-        final WMSLayer layer = askWMSLayer();
+        final AbstractTileSourceLayer layer = askedLayer();
         if (layer != null) {
             PleaseWaitRunnable task = new PleaseWaitRunnable(tr("Precaching WMS")) {
                 private PrecacheTask precacheTask;
 
                 @Override
                 protected void realRun() throws SAXException, IOException, OsmTransferException {
-                    precacheTask = new PrecacheTask(progressMonitor);
+                    precacheTask = layer.new PrecacheTask(progressMonitor);
                     layer.downloadAreaToCache(precacheTask, points, 0, 0);
                     while (!precacheTask.isFinished() && !progressMonitor.isCanceled()) {
                         synchronized (this) {
@@ -94,13 +101,13 @@ public class DownloadWmsAlongTrackAction extends AbstractAction {
         }
     }
 
-    protected WMSLayer askWMSLayer() {
-        Collection<WMSLayer> targetLayers = Main.map.mapView.getLayersOfType(WMSLayer.class);
+    protected AbstractTileSourceLayer askedLayer() {
+        Collection<AbstractTileSourceLayer> targetLayers = Main.map.mapView.getLayersOfType(AbstractTileSourceLayer.class);
         if (targetLayers.isEmpty()) {
             warnNoImageryLayers();
             return null;
         }
-        JosmComboBox<WMSLayer> layerList = new JosmComboBox<>(targetLayers.toArray(new WMSLayer[0]));
+        JosmComboBox<AbstractTileSourceLayer> layerList = new JosmComboBox<>(targetLayers.toArray(new AbstractTileSourceLayer[0]));
         layerList.setRenderer(new LayerListCellRenderer());
         layerList.setSelectedIndex(0);
         JPanel pnl = new JPanel(new GridBagLayout());
@@ -113,7 +120,7 @@ public class DownloadWmsAlongTrackAction extends AbstractAction {
         if (ed.getValue() != 1) {
             return null;
         }
-        return (WMSLayer) layerList.getSelectedItem();
+        return (AbstractTileSourceLayer) layerList.getSelectedItem();
     }
 
     protected void warnNoImageryLayers() {
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelper.java b/src/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelper.java
index a0bd39f..f00c865 100644
--- a/src/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelper.java
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelper.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.layer.gpx;
 
 import static org.openstreetmap.josm.tools.I18n.marktr;
@@ -83,10 +83,11 @@ public class GpxDrawHelper {
     private static final int ll0 = 9;
     private static final int sl4 = 5;
     private static final int sl9 = 3;
-    private static final int[][] dir = { { +sl4, +ll0, +ll0, +sl4 }, { -sl9, +ll0, +sl9, +ll0 }, { -ll0, +sl4, -sl4, +ll0 },
-        { -ll0, -sl9, -ll0, +sl9 }, { -sl4, -ll0, -ll0, -sl4 }, { +sl9, -ll0, -sl9, -ll0 },
-        { +ll0, -sl4, +sl4, -ll0 }, { +ll0, +sl9, +ll0, -sl9 }, { +sl4, +ll0, +ll0, +sl4 },
-        { -sl9, +ll0, +sl9, +ll0 }, { -ll0, +sl4, -sl4, +ll0 }, { -ll0, -sl9, -ll0, +sl9 } };
+    private static final int[][] dir = {
+        {+sl4, +ll0, +ll0, +sl4}, {-sl9, +ll0, +sl9, +ll0}, {-ll0, +sl4, -sl4, +ll0},
+        {-ll0, -sl9, -ll0, +sl9}, {-sl4, -ll0, -ll0, -sl4}, {+sl9, -ll0, -sl9, -ll0},
+        {+ll0, -sl4, +sl4, -ll0}, {+ll0, +sl9, +ll0, -sl9}, {+sl4, +ll0, +ll0, +sl4},
+        {-sl9, +ll0, +sl9, +ll0}, {-ll0, +sl4, -sl4, +ll0}, {-ll0, -sl9, -ll0, +sl9}};
 
     private void setupColors() {
         hdopAlpha = Main.pref.getInteger("hdop.color.alpha", -1);
@@ -188,7 +189,6 @@ public class GpxDrawHelper {
         largesize += lineWidth;
     }
 
-
     public void drawAll(Graphics2D g, MapView mv, List<WayPoint> visibleSegments) {
 
         checkCache();
@@ -205,7 +205,7 @@ public class GpxDrawHelper {
                     RenderingHints.VALUE_ANTIALIAS_ON : RenderingHints.VALUE_ANTIALIAS_OFF);
 
         if (lineWidth != 0) {
-            g.setStroke(new BasicStroke(lineWidth,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND));
+            g.setStroke(new BasicStroke(lineWidth, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
         }
         fixColors(visibleSegments);
         drawLines(g, mv, visibleSegments);
@@ -224,7 +224,7 @@ public class GpxDrawHelper {
         if (colorModeDynamic) {
             if (colored == ColorMode.VELOCITY) {
                 for (Collection<WayPoint> segment : data.getLinesIterable(null)) {
-                    if(!forceLines) {
+                    if (!forceLines) {
                         oldWp = null;
                     }
                     for (WayPoint trkPnt : segment) {
@@ -235,10 +235,10 @@ public class GpxDrawHelper {
                         if (oldWp != null && trkPnt.time > oldWp.time) {
                             double vel = c.greatCircleDistance(oldWp.getCoor())
                                     / (trkPnt.time - oldWp.time);
-                            if(vel > maxval) {
+                            if (vel > maxval) {
                                 maxval = vel;
                             }
-                            if(vel < minval) {
+                            if (vel < minval) {
                                 minval = vel;
                             }
                         }
@@ -256,10 +256,10 @@ public class GpxDrawHelper {
                         Object val = trkPnt.get(GpxConstants.PT_HDOP);
                         if (val != null) {
                             double hdop = ((Float) val).doubleValue();
-                            if(hdop > maxval) {
+                            if (hdop > maxval) {
                                 maxval = hdop;
                             }
-                            if(hdop < minval) {
+                            if (hdop < minval) {
                                 minval = hdop;
                             }
                         }
@@ -279,11 +279,12 @@ public class GpxDrawHelper {
         double now = System.currentTimeMillis()/1000.0;
         if (colored == ColorMode.TIME) {
             Date[] bounds = data.getMinMaxTimeForAllTracks();
-            if (bounds!=null) {
+            if (bounds.length >= 2) {
                 minval = bounds[0].getTime()/1000.0;
                 maxval = bounds[1].getTime()/1000.0;
             } else {
-                minval = 0; maxval=now;
+                minval = 0;
+                maxval = now;
             }
             dateScale.setRange(minval, maxval);
         }
@@ -309,11 +310,11 @@ public class GpxDrawHelper {
                 }
                 if (oldWp != null) { // other coloring modes need segment for calcuation
                     double dist = c.greatCircleDistance(oldWp.getCoor());
-                    boolean noDraw=false;
+                    boolean noDraw = false;
                     switch (colored) {
                     case VELOCITY:
                         double dtime = trkPnt.time - oldWp.time;
-                        if(dtime > 0) {
+                        if (dtime > 0) {
                             color = velocityScale.getColor(dist / dtime);
                         } else {
                             color = velocityScale.getNoDataColor();
@@ -324,8 +325,9 @@ public class GpxDrawHelper {
                         color = directionScale.getColor(dirColor);
                         break;
                     case TIME:
-                        double t=trkPnt.time;
-                        if (t > 0 && t <= now && maxval - minval > minTrackDurationForTimeColoring) { // skip bad timestamps and very short tracks
+                        double t = trkPnt.time;
+                        // skip bad timestamps and very short tracks
+                        if (t > 0 && t <= now && maxval - minval > minTrackDurationForTimeColoring) {
                             color = dateScale.getColor(t);
                         } else {
                             color = dateScale.getNoDataColor();
@@ -342,7 +344,7 @@ public class GpxDrawHelper {
                     trkPnt.drawLine = false;
                     color = neutralColor;
                 }
-                if (color!=null) {
+                if (color != null) {
                     trkPnt.customColoring = color;
                 }
                 oldWp = trkPnt;
@@ -448,22 +450,24 @@ public class GpxDrawHelper {
 
                 if (hdopCircle && trkPnt.get(GpxConstants.PT_HDOP) != null) {
                     // hdop value
-                    float hdop = (Float)trkPnt.get(GpxConstants.PT_HDOP);
+                    float hdop = (Float) trkPnt.get(GpxConstants.PT_HDOP);
                     if (hdop < 0) {
                         hdop = 0;
                     }
-                    Color customColoringTransparent = hdopAlpha<0 ? trkPnt.customColoring:
-                        new Color(trkPnt.customColoring.getRGB() & 0x00ffffff | hdopAlpha<<24, true);
+                    Color customColoringTransparent = hdopAlpha < 0 ? trkPnt.customColoring :
+                        new Color(trkPnt.customColoring.getRGB() & 0x00ffffff | hdopAlpha << 24, true);
                     g.setColor(customColoringTransparent);
                     // hdop cirles
-                    int hdopp = mv.getPoint(new LatLon(trkPnt.getCoor().lat(), trkPnt.getCoor().lon() + 2*6*hdop*360/40000000)).x - screen.x;
+                    int hdopp = mv.getPoint(new LatLon(
+                            trkPnt.getCoor().lat(),
+                            trkPnt.getCoor().lon() + 2*6*hdop*360/40000000d)).x - screen.x;
                     g.drawArc(screen.x-hdopp/2, screen.y-hdopp/2, hdopp, hdopp, 0, 360);
                 }
                 if (large) {
                     // color the large GPS points like the gps lines
                     if (trkPnt.customColoring != null) {
-                        Color customColoringTransparent = largePointAlpha<0 ? trkPnt.customColoring:
-                            new Color(trkPnt.customColoring.getRGB() & 0x00ffffff | largePointAlpha<<24, true);
+                        Color customColoringTransparent = largePointAlpha < 0 ? trkPnt.customColoring :
+                            new Color(trkPnt.customColoring.getRGB() & 0x00ffffff | largePointAlpha << 24, true);
 
                         g.setColor(customColoringTransparent);
                     }
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/ImportAudioAction.java b/src/org/openstreetmap/josm/gui/layer/gpx/ImportAudioAction.java
index 3cefe12..3b725fa 100644
--- a/src/org/openstreetmap/josm/gui/layer/gpx/ImportAudioAction.java
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/ImportAudioAction.java
@@ -57,8 +57,11 @@ public class ImportAudioAction extends AbstractAction {
     }
 
     private void warnCantImportIntoServerLayer(GpxLayer layer) {
-        String msg = tr("<html>The data in the GPX layer ''{0}'' has been downloaded from the server.<br>" + "Because its way points do not include a timestamp we cannot correlate them with audio data.</html>", layer.getName());
-        HelpAwareOptionPane.showOptionDialog(Main.parent, msg, tr("Import not possible"), JOptionPane.WARNING_MESSAGE, ht("/Action/ImportAudio#CantImportIntoGpxLayerFromServer"));
+        String msg = tr("<html>The data in the GPX layer ''{0}'' has been downloaded from the server.<br>" +
+                "Because its way points do not include a timestamp we cannot correlate them with audio data.</html>",
+                layer.getName());
+        HelpAwareOptionPane.showOptionDialog(Main.parent, msg, tr("Import not possible"),
+                JOptionPane.WARNING_MESSAGE, ht("/Action/ImportAudio#CantImportIntoGpxLayerFromServer"));
     }
 
     @Override
@@ -70,7 +73,7 @@ public class ImportAudioAction extends AbstractAction {
         FileFilter filter = new FileFilter() {
             @Override
             public boolean accept(File f) {
-                return f.isDirectory() || f.getName().toLowerCase().endsWith(".wav");
+                return f.isDirectory() || Utils.hasExtension(f, "wav");
             }
 
             @Override
@@ -78,7 +81,8 @@ public class ImportAudioAction extends AbstractAction {
                 return tr("Wave Audio files (*.wav)");
             }
         };
-        AbstractFileChooser fc = DiskAccessAction.createAndOpenFileChooser(true, true, null, filter, JFileChooser.FILES_ONLY, "markers.lastaudiodirectory");
+        AbstractFileChooser fc = DiskAccessAction.createAndOpenFileChooser(true, true, null, filter,
+                JFileChooser.FILES_ONLY, "markers.lastaudiodirectory");
         if (fc != null) {
             File[] sel = fc.getSelectedFiles();
             // sort files in increasing order of timestamp (this is the end time, but so
@@ -105,7 +109,8 @@ public class ImportAudioAction extends AbstractAction {
             } else {
                 names = "";
             }
-            MarkerLayer ml = new MarkerLayer(new GpxData(), tr("Audio markers from {0}", layer.getName()) + names, layer.getAssociatedFile(), layer);
+            MarkerLayer ml = new MarkerLayer(new GpxData(),
+                    tr("Audio markers from {0}", layer.getName()) + names, layer.getAssociatedFile(), layer);
             double firstStartTime = sel[0].lastModified() / 1000.0 - AudioUtil.getCalibratedDuration(sel[0]);
             Markers m = new Markers();
             for (File file : sel) {
@@ -306,7 +311,9 @@ public class ImportAudioAction extends AbstractAction {
             JOptionPane
             .showMessageDialog(
                     Main.parent,
+                    // CHECKSTYLE.OFF: LineLength
                     tr("Some waypoints with timestamps from before the start of the track or after the end were omitted or moved to the start."));
+                    // CHECKSTYLE.ON: LineLength
             markers.timedMarkersOmitted = timedMarkersOmitted;
         }
         if (untimedMarkersOmitted && !markers.untimedMarkersOmitted) {
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/ImportImagesAction.java b/src/org/openstreetmap/josm/gui/layer/gpx/ImportImagesAction.java
index 2a7949d..765ec1c 100644
--- a/src/org/openstreetmap/josm/gui/layer/gpx/ImportImagesAction.java
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/ImportImagesAction.java
@@ -21,6 +21,7 @@ import org.openstreetmap.josm.gui.widgets.AbstractFileChooser;
 import org.openstreetmap.josm.gui.widgets.FileChooserManager;
 import org.openstreetmap.josm.io.JpgImporter;
 import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.Utils;
 
 public class ImportImagesAction extends AbstractAction {
     private final transient GpxLayer layer;
@@ -32,15 +33,18 @@ public class ImportImagesAction extends AbstractAction {
     }
 
     private void warnCantImportIntoServerLayer(GpxLayer layer) {
-        String msg = tr("<html>The data in the GPX layer ''{0}'' has been downloaded from the server.<br>" + "Because its way points do not include a timestamp we cannot correlate them with images.</html>", layer.getName());
-        HelpAwareOptionPane.showOptionDialog(Main.parent, msg, tr("Import not possible"), JOptionPane.WARNING_MESSAGE, ht("/Action/ImportImages#CantImportIntoGpxLayerFromServer"));
+        String msg = tr("<html>The data in the GPX layer ''{0}'' has been downloaded from the server.<br>"+
+                "Because its way points do not include a timestamp we cannot correlate them with images.</html>",
+                layer.getName());
+        HelpAwareOptionPane.showOptionDialog(Main.parent, msg, tr("Import not possible"),
+                JOptionPane.WARNING_MESSAGE, ht("/Action/ImportImages#CantImportIntoGpxLayerFromServer"));
     }
 
     private void addRecursiveFiles(List<File> files, File[] sel) {
         for (File f : sel) {
             if (f.isDirectory()) {
                 addRecursiveFiles(files, f.listFiles());
-            } else if (f.getName().toLowerCase().endsWith(".jpg")) {
+            } else if (Utils.hasExtension(f, "jpg")) {
                 files.add(f);
             }
         }
diff --git a/src/org/openstreetmap/josm/gui/layer/gpx/package-info.java b/src/org/openstreetmap/josm/gui/layer/gpx/package-info.java
new file mode 100644
index 0000000..5cc454c
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/layer/gpx/package-info.java
@@ -0,0 +1,6 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Provides classes for handling <a href="http://wiki.openstreetmap.org/wiki/GPX">GPX</a> layers.
+ */
+package org.openstreetmap.josm.gui.layer.gpx;
diff --git a/src/org/openstreetmap/josm/gui/layer/markerlayer/AudioMarker.java b/src/org/openstreetmap/josm/gui/layer/markerlayer/AudioMarker.java
index 85bddb0..5211701 100644
--- a/src/org/openstreetmap/josm/gui/layer/markerlayer/AudioMarker.java
+++ b/src/org/openstreetmap/josm/gui/layer/markerlayer/AudioMarker.java
@@ -66,7 +66,9 @@ public class AudioMarker extends ButtonMarker {
      * the marker as well as indirectly
      *
      */
-    public void play() { play(0.0); }
+    public void play() {
+        play(0.0);
+    }
 
     public void adjustOffset(double adjustment) {
         syncOffset = adjustment; // added to offset may turn out negative, but that's ok
diff --git a/src/org/openstreetmap/josm/gui/layer/markerlayer/ButtonMarker.java b/src/org/openstreetmap/josm/gui/layer/markerlayer/ButtonMarker.java
index de3bf74..8162ef5 100644
--- a/src/org/openstreetmap/josm/gui/layer/markerlayer/ButtonMarker.java
+++ b/src/org/openstreetmap/josm/gui/layer/markerlayer/ButtonMarker.java
@@ -30,7 +30,8 @@ public class ButtonMarker extends Marker {
         buttonRectangle = new Rectangle(0, 0, symbol.getIconWidth(), symbol.getIconHeight());
     }
 
-    public ButtonMarker(LatLon ll, TemplateEngineDataProvider dataProvider, String buttonImage, MarkerLayer parentLayer, double time, double offset) {
+    public ButtonMarker(LatLon ll, TemplateEngineDataProvider dataProvider, String buttonImage, MarkerLayer parentLayer, double time,
+            double offset) {
         super(ll, dataProvider, buttonImage, parentLayer, time, offset);
         buttonRectangle = new Rectangle(0, 0, symbol.getIconWidth(), symbol.getIconHeight());
     }
diff --git a/src/org/openstreetmap/josm/gui/layer/markerlayer/ImageMarker.java b/src/org/openstreetmap/josm/gui/layer/markerlayer/ImageMarker.java
index 92f88ea..1386c97 100644
--- a/src/org/openstreetmap/josm/gui/layer/markerlayer/ImageMarker.java
+++ b/src/org/openstreetmap/josm/gui/layer/markerlayer/ImageMarker.java
@@ -53,14 +53,14 @@ public class ImageMarker extends ButtonMarker {
         JPanel p2 = new JPanel();
         p2.add(scale);
         p.add(p2, BorderLayout.SOUTH);
-        scale.addActionListener(new ActionListener(){
+        scale.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent ev) {
                 p.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
                 if (scale.getModel().isSelected()) {
-                    ((JLabel)vp.getView()).setIcon(loadScaledImage(imageUrl, Math.max(vp.getWidth(), vp.getHeight())));
+                    ((JLabel) vp.getView()).setIcon(loadScaledImage(imageUrl, Math.max(vp.getWidth(), vp.getHeight())));
                 } else {
-                    ((JLabel)vp.getView()).setIcon(new ImageIcon(imageUrl));
+                    ((JLabel) vp.getView()).setIcon(new ImageIcon(imageUrl));
                 }
                 p.setCursor(Cursor.getDefaultCursor());
             }
@@ -77,11 +77,11 @@ public class ImageMarker extends ButtonMarker {
         Image img = new ImageIcon(u).getImage();
         int w = img.getWidth(null);
         int h = img.getHeight(null);
-        if (w>h) {
-            h = Math.round(maxSize*((float)h/w));
+        if (w > h) {
+            h = (int) Math.round(maxSize*((double) h/w));
             w = maxSize;
         } else {
-            w = Math.round(maxSize*((float)w/h));
+            w = (int) Math.round(maxSize*((double) w/h));
             h = maxSize;
         }
         return new ImageIcon(img.getScaledInstance(w, h, Image.SCALE_SMOOTH));
diff --git a/src/org/openstreetmap/josm/gui/layer/markerlayer/Marker.java b/src/org/openstreetmap/josm/gui/layer/markerlayer/Marker.java
index 38ab447..506b800 100644
--- a/src/org/openstreetmap/josm/gui/layer/markerlayer/Marker.java
+++ b/src/org/openstreetmap/josm/gui/layer/markerlayer/Marker.java
@@ -90,7 +90,8 @@ public class Marker implements TemplateEngineDataProvider {
         private static final Map<String, TemplateEntryProperty> CACHE = new HashMap<>();
 
         // Legacy code - convert label from int to template engine expression
-        private static final IntegerProperty PROP_LABEL = new IntegerProperty("draw.rawgps.layer.wpt", 0 );
+        private static final IntegerProperty PROP_LABEL = new IntegerProperty("draw.rawgps.layer.wpt", 0);
+
         private static String getDefaultLabelPattern() {
             switch (PROP_LABEL.get()) {
             case 1:
@@ -112,7 +113,7 @@ public class Marker implements TemplateEngineDataProvider {
             }
             TemplateEntryProperty result = CACHE.get(key);
             if (result == null) {
-                String defaultValue = layerName == null ? getDefaultLabelPattern():"";
+                String defaultValue = layerName == null ? getDefaultLabelPattern() : "";
                 TemplateEntryProperty parent = layerName == null ? null : forMarker(null);
                 result = new TemplateEntryProperty(key, defaultValue, parent);
                 CACHE.put(key, result);
@@ -127,7 +128,7 @@ public class Marker implements TemplateEngineDataProvider {
             }
             TemplateEntryProperty result = CACHE.get(key);
             if (result == null) {
-                String defaultValue = layerName == null?"?{ '{name}' | '{desc}' | '{" + Marker.MARKER_FORMATTED_OFFSET + "}' }":"";
+                String defaultValue = layerName == null ? "?{ '{name}' | '{desc}' | '{" + Marker.MARKER_FORMATTED_OFFSET + "}' }" : "";
                 TemplateEntryProperty parent = layerName == null ? null : forAudioMarker(null);
                 result = new TemplateEntryProperty(key, defaultValue, parent);
                 CACHE.put(key, result);
@@ -183,11 +184,10 @@ public class Marker implements TemplateEngineDataProvider {
             @Override
             public Marker createMarker(WayPoint wpt, File relativePath, MarkerLayer parentLayer, double time, double offset) {
                 String uri = null;
-                // cheapest way to check whether "link" object exists and is a non-empty
-                // collection of GpxLink objects...
+                // cheapest way to check whether "link" object exists and is a non-empty collection of GpxLink objects...
                 Collection<GpxLink> links = wpt.<GpxLink>getCollection(GpxConstants.META_LINKS);
                 if (links != null) {
-                    for (GpxLink oneLink : links ) {
+                    for (GpxLink oneLink : links) {
                         uri = oneLink.uri;
                         break;
                     }
@@ -205,26 +205,25 @@ public class Marker implements TemplateEngineDataProvider {
                     }
                 }
 
+                String urlStr = url == null ? "" : url.toString();
                 if (url == null) {
                     String symbolName = wpt.getString("symbol");
                     if (symbolName == null) {
                         symbolName = wpt.getString(GpxConstants.PT_SYM);
                     }
                     return new Marker(wpt.getCoor(), wpt, symbolName, parentLayer, time, offset);
-                }
-                else if (url.toString().endsWith(".wav")) {
+                } else if (urlStr.endsWith(".wav")) {
                     AudioMarker audioMarker = new AudioMarker(wpt.getCoor(), wpt, url, parentLayer, time, offset);
                     Extensions exts = (Extensions) wpt.get(GpxConstants.META_EXTENSIONS);
                     if (exts != null && exts.containsKey("offset")) {
                         try {
-                            double syncOffset = Double.parseDouble(exts.get("sync-offset"));
-                            audioMarker.syncOffset = syncOffset;
+                            audioMarker.syncOffset = Double.parseDouble(exts.get("sync-offset"));
                         } catch (NumberFormatException nfe) {
                             Main.warn(nfe);
                         }
                     }
                     return audioMarker;
-                } else if (url.toString().endsWith(".png") || url.toString().endsWith(".jpg") || url.toString().endsWith(".jpeg") || url.toString().endsWith(".gif")) {
+                } else if (urlStr.endsWith(".png") || urlStr.endsWith(".jpg") || urlStr.endsWith(".jpeg") || urlStr.endsWith(".gif")) {
                     return new ImageMarker(wpt.getCoor(), url, parentLayer, time, offset);
                 } else {
                     return new WebMarker(wpt.getCoor(), url, parentLayer, time, offset);
@@ -280,7 +279,8 @@ public class Marker implements TemplateEngineDataProvider {
 
     private boolean erroneous = false;
 
-    public Marker(LatLon ll, TemplateEngineDataProvider dataProvider, String iconName, MarkerLayer parentLayer, double time, double offset) {
+    public Marker(LatLon ll, TemplateEngineDataProvider dataProvider, String iconName, MarkerLayer parentLayer,
+            double time, double offset) {
         this(ll, dataProvider, null, iconName, parentLayer, time, offset);
     }
 
@@ -288,7 +288,8 @@ public class Marker implements TemplateEngineDataProvider {
         this(ll, null, text, iconName, parentLayer, time, offset);
     }
 
-    private Marker(LatLon ll, TemplateEngineDataProvider dataProvider, String text, String iconName, MarkerLayer parentLayer, double time, double offset) {
+    private Marker(LatLon ll, TemplateEngineDataProvider dataProvider, String text, String iconName, MarkerLayer parentLayer,
+            double time, double offset) {
         timeFormatter.setTimeZone(TimeZone.getTimeZone("UTC"));
         setCoor(ll);
 
@@ -297,7 +298,7 @@ public class Marker implements TemplateEngineDataProvider {
         /* tell icon checking that we expect these names to exist */
         // /* ICON(markers/) */"Bridge"
         // /* ICON(markers/) */"Crossing"
-        this.symbol = iconName != null ? ImageProvider.getIfAvailable("markers",iconName) : null;
+        this.symbol = iconName != null ? ImageProvider.getIfAvailable("markers", iconName) : null;
         this.parentLayer = parentLayer;
 
         this.dataProvider = dataProvider;
@@ -460,7 +461,7 @@ public class Marker implements TemplateEngineDataProvider {
     }
 
     private String formatOffset() {
-        int wholeSeconds = (int)(offset + 0.5);
+        int wholeSeconds = (int) (offset + 0.5);
         if (wholeSeconds < 60)
             return Integer.toString(wholeSeconds);
         else if (wholeSeconds < 3600)
diff --git a/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java b/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java
index 22a671c..434b40c 100644
--- a/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java
@@ -101,11 +101,13 @@ public class MarkerLayer extends Layer implements JumpToMarkerLayer {
             if (wpt_has_link) {
                 for (GpxLink oneLink : wpt.<GpxLink>getCollection(GpxConstants.META_LINKS)) {
                     String uri = oneLink.uri;
-                    if (!uri.equals(lastLinkedFile)) {
-                        firstTime = time;
+                    if (uri != null) {
+                        if (!uri.equals(lastLinkedFile)) {
+                            firstTime = time;
+                        }
+                        lastLinkedFile = uri;
+                        break;
                     }
-                    lastLinkedFile = uri;
-                    break;
                 }
             }
             Double offset = null;
@@ -117,7 +119,7 @@ public class MarkerLayer extends Layer implements JumpToMarkerLayer {
             Extensions exts = (Extensions) wpt.get(GpxConstants.META_EXTENSIONS);
             if (exts != null && exts.containsKey("offset")) {
                 try {
-                    offset = Double.parseDouble(exts.get("offset"));
+                    offset = Double.valueOf(exts.get("offset"));
                 } catch (NumberFormatException nfe) {
                     Main.warn(nfe);
                 }
@@ -135,7 +137,8 @@ public class MarkerLayer extends Layer implements JumpToMarkerLayer {
     @Override
     public void hookUpMapView() {
         Main.map.mapView.addMouseListener(new MouseAdapter() {
-            @Override public void mousePressed(MouseEvent e) {
+            @Override
+            public void mousePressed(MouseEvent e) {
                 if (e.getButton() != MouseEvent.BUTTON1)
                     return;
                 boolean mousePressedInButton = false;
@@ -147,15 +150,17 @@ public class MarkerLayer extends Layer implements JumpToMarkerLayer {
                         }
                     }
                 }
-                if (! mousePressedInButton)
+                if (!mousePressedInButton)
                     return;
                 mousePressed  = true;
                 if (isVisible()) {
                     Main.map.mapView.repaint();
                 }
             }
-            @Override public void mouseReleased(MouseEvent ev) {
-                if (ev.getButton() != MouseEvent.BUTTON1 || ! mousePressed)
+
+            @Override
+            public void mouseReleased(MouseEvent ev) {
+                if (ev.getButton() != MouseEvent.BUTTON1 || !mousePressed)
                     return;
                 mousePressed = false;
                 if (!isVisible())
@@ -217,7 +222,7 @@ public class MarkerLayer extends Layer implements JumpToMarkerLayer {
     }
 
     @Override public void mergeFrom(Layer from) {
-        MarkerLayer layer = (MarkerLayer)from;
+        MarkerLayer layer = (MarkerLayer) from;
         data.addAll(layer.data);
         Collections.sort(data, new Comparator<Marker>() {
             @Override
@@ -251,7 +256,7 @@ public class MarkerLayer extends Layer implements JumpToMarkerLayer {
         components.add(SeparatorLayerAction.INSTANCE);
         components.add(new SynchronizeAudio());
         if (Main.pref.getBoolean("marker.traceaudio", true)) {
-            components.add (new MoveAudio());
+            components.add(new MoveAudio());
         }
         components.add(new JumpToNextMarker(this));
         components.add(new JumpToPreviousMarker(this));
@@ -263,7 +268,7 @@ public class MarkerLayer extends Layer implements JumpToMarkerLayer {
 
     public boolean synchronizeAudioMarkers(final AudioMarker startMarker) {
         syncAudioMarker = startMarker;
-        if (syncAudioMarker != null && ! data.contains(syncAudioMarker)) {
+        if (syncAudioMarker != null && !data.contains(syncAudioMarker)) {
             syncAudioMarker = null;
         }
         if (syncAudioMarker == null) {
@@ -308,7 +313,7 @@ public class MarkerLayer extends Layer implements JumpToMarkerLayer {
         AudioMarker am = null;
         for (Marker m : data) {
             if (m.getClass() == AudioMarker.class) {
-                am = (AudioMarker)m;
+                am = (AudioMarker) m;
                 offset = time - am.time;
                 break;
             }
@@ -380,7 +385,7 @@ public class MarkerLayer extends Layer implements JumpToMarkerLayer {
             currentMarker = data.get(data.size() - 1);
         } else {
             boolean foundCurrent = false;
-            for (int i=data.size() - 1; i>=0; i--) {
+            for (int i = data.size() - 1; i >= 0; i--) {
                 Marker m = data.get(i);
                 if (foundCurrent) {
                     currentMarker = m;
@@ -420,10 +425,8 @@ public class MarkerLayer extends Layer implements JumpToMarkerLayer {
                         }
                         return previousMarker;
                     }
-                }
-                else if (marker.getClass() == AudioMarker.class)
-                {
-                    if(nextTime || startMarker == null)
+                } else if (marker.getClass() == AudioMarker.class) {
+                    if (nextTime || startMarker == null)
                         return marker;
                     previousMarker = marker;
                 }
@@ -435,25 +438,23 @@ public class MarkerLayer extends Layer implements JumpToMarkerLayer {
     }
 
     private static void playAdjacentMarker(Marker startMarker, boolean next) {
-        Marker m = null;
         if (!Main.isDisplayingMapView())
             return;
+        Marker m = null;
         Layer l = Main.map.mapView.getActiveLayer();
-        if(l != null) {
+        if (l != null) {
             m = getAdjacentMarker(startMarker, next, l);
         }
-        if(m == null)
-        {
-            for (Layer layer : Main.map.mapView.getAllLayers())
-            {
+        if (m == null) {
+            for (Layer layer : Main.map.mapView.getAllLayers()) {
                 m = getAdjacentMarker(startMarker, next, layer);
-                if(m != null) {
+                if (m != null) {
                     break;
                 }
             }
         }
-        if(m != null) {
-            ((AudioMarker)m).play();
+        if (m != null) {
+            ((AudioMarker) m).play();
         }
     }
 
@@ -462,7 +463,7 @@ public class MarkerLayer extends Layer implements JumpToMarkerLayer {
      * @return <code>true</code> if text should be shown, <code>false</code> otherwise.
      */
     private boolean isTextOrIconShown() {
-        String current = Main.pref.get("marker.show "+getName(),"show");
+        String current = Main.pref.get("marker.show "+getName(), "show");
         return "show".equalsIgnoreCase(current);
     }
 
@@ -476,14 +477,12 @@ public class MarkerLayer extends Layer implements JumpToMarkerLayer {
             this.layer = layer;
         }
 
-
         @Override
         public void actionPerformed(ActionEvent e) {
             Main.pref.put("marker.show "+layer.getName(), layer.isTextOrIconShown() ? "hide" : "show");
             Main.map.mapView.repaint();
         }
 
-
         @Override
         public Component createMenuComponent() {
             JCheckBoxMenuItem showMarkerTextItem = new JCheckBoxMenuItem(this);
@@ -497,9 +496,11 @@ public class MarkerLayer extends Layer implements JumpToMarkerLayer {
         }
     }
 
-
     private class SynchronizeAudio extends AbstractAction {
 
+        /**
+         * Constructs a new {@code SynchronizeAudio} action.
+         */
         public SynchronizeAudio() {
             super(tr("Synchronize Audio"), ImageProvider.get("audio-sync"));
             putValue("help", ht("/Action/SynchronizeAudio"));
@@ -507,7 +508,7 @@ public class MarkerLayer extends Layer implements JumpToMarkerLayer {
 
         @Override
         public void actionPerformed(ActionEvent e) {
-            if (! AudioPlayer.paused()) {
+            if (!AudioPlayer.paused()) {
                 JOptionPane.showMessageDialog(
                         Main.parent,
                         tr("You need to pause audio at the moment when you hear your synchronization cue."),
@@ -544,7 +545,7 @@ public class MarkerLayer extends Layer implements JumpToMarkerLayer {
 
         @Override
         public void actionPerformed(ActionEvent e) {
-            if (! AudioPlayer.paused()) {
+            if (!AudioPlayer.paused()) {
                 JOptionPane.showMessageDialog(
                         Main.parent,
                         tr("You need to have paused audio at the point on the track where you want the marker."),
diff --git a/src/org/openstreetmap/josm/gui/layer/markerlayer/PlayHeadMarker.java b/src/org/openstreetmap/josm/gui/layer/markerlayer/PlayHeadMarker.java
index d0ee2c6..6cf8788 100644
--- a/src/org/openstreetmap/josm/gui/layer/markerlayer/PlayHeadMarker.java
+++ b/src/org/openstreetmap/josm/gui/layer/markerlayer/PlayHeadMarker.java
@@ -1,5 +1,4 @@
-// License: GPL. See LICENSE file for details.
-
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.layer.markerlayer;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -61,11 +60,11 @@ public final class PlayHeadMarker extends Marker {
     }
 
     private PlayHeadMarker() {
-        super(new LatLon(0.0,0.0), "",
+        super(new LatLon(0.0, 0.0), "",
                 Main.pref.get("marker.audiotracericon", "audio-tracer"),
                 null, -1.0, 0.0);
         enabled = Main.pref.getBoolean("marker.traceaudio", true);
-        if (! enabled) return;
+        if (!enabled) return;
         dropTolerance = Main.pref.getInteger("marker.playHeadDropTolerance", 50);
         Main.map.mapView.addMouseListener(new MouseAdapter() {
             @Override public void mousePressed(MouseEvent ev) {
@@ -85,7 +84,8 @@ public final class PlayHeadMarker extends Marker {
         });
     }
 
-    @Override public boolean containsPoint(Point p) {
+    @Override
+    public boolean containsPoint(Point p) {
         Point screen = Main.map.mapView.getPoint(getEastNorth());
         Rectangle r = new Rectangle(screen.x, screen.y, symbol.getIconWidth(),
                 symbol.getIconHeight());
@@ -102,8 +102,11 @@ public final class PlayHeadMarker extends Marker {
         }
         wasPlaying = AudioPlayer.playing();
         if (wasPlaying) {
-            try { AudioPlayer.pause(); }
-            catch (Exception ex) { AudioPlayer.audioMalfunction(ex);}
+            try {
+                AudioPlayer.pause();
+            } catch (Exception ex) {
+                AudioPlayer.audioMalfunction(ex);
+            }
         }
     }
 
@@ -111,9 +114,12 @@ public final class PlayHeadMarker extends Marker {
      * reinstate the old map mode after switching temporarily to do a play head drag
      */
     private void endDrag(boolean reset) {
-        if (! wasPlaying || reset) {
-            try { AudioPlayer.pause(); }
-            catch (Exception ex) { AudioPlayer.audioMalfunction(ex);}
+        if (!wasPlaying || reset) {
+            try {
+                AudioPlayer.pause();
+            } catch (Exception ex) {
+                AudioPlayer.audioMalfunction(ex);
+            }
         }
         if (reset) {
             setCoor(oldCoor);
@@ -168,7 +174,8 @@ public final class PlayHeadMarker extends Marker {
             /* Not close enough to track, or no audio marker found for some other reason */
             JOptionPane.showMessageDialog(
                     Main.parent,
-                    tr("You need to drag the play head near to the GPX track whose associated sound track you were playing (after the first marker)."),
+                    tr("You need to drag the play head near to the GPX track " +
+                       "whose associated sound track you were playing (after the first marker)."),
                     tr("Warning"),
                     JOptionPane.WARNING_MESSAGE
                     );
@@ -191,7 +198,7 @@ public final class PlayHeadMarker extends Marker {
      */
     public void synchronize(EastNorth en) {
         AudioMarker recent = AudioMarker.recentlyPlayedMarker();
-        if(recent == null)
+        if (recent == null)
             return;
         /* First, see if we dropped onto an existing audio marker in the layer being played */
         Point startPoint = Main.map.mapView.getPoint(en);
@@ -210,7 +217,7 @@ public final class PlayHeadMarker extends Marker {
         }
 
         /* We found the closest marker: did we actually hit it? */
-        if (ca != null && ! ca.containsPoint(startPoint)) {
+        if (ca != null && !ca.containsPoint(startPoint)) {
             ca = null;
         }
 
@@ -234,7 +241,7 @@ public final class PlayHeadMarker extends Marker {
         }
 
         /* Actually do the synchronization */
-        if(ca == null) {
+        if (ca == null) {
             JOptionPane.showMessageDialog(
                     Main.parent,
                     tr("Unable to create new audio marker."),
@@ -242,8 +249,7 @@ public final class PlayHeadMarker extends Marker {
                     JOptionPane.ERROR_MESSAGE
                     );
             endDrag(true);
-        }
-        else if (recent.parentLayer.synchronizeAudioMarkers(ca)) {
+        } else if (recent.parentLayer.synchronizeAudioMarkers(ca)) {
             JOptionPane.showMessageDialog(
                     Main.parent,
                     tr("Audio synchronized at point {0}.", recent.parentLayer.syncAudioMarker.getText()),
@@ -278,11 +284,11 @@ public final class PlayHeadMarker extends Marker {
      * Animates the marker along the track.
      */
     public void animate() {
-        if (! enabled) return;
+        if (!enabled) return;
         jumpToMarker = true;
         if (timer == null) {
             animationInterval = Main.pref.getDouble("marker.audioanimationinterval", 1.0); //milliseconds
-            timer = new Timer((int)(animationInterval * 1000.0), new ActionListener() {
+            timer = new Timer((int) (animationInterval * 1000.0), new ActionListener() {
                 @Override
                 public void actionPerformed(ActionEvent e) {
                     timerAction();
diff --git a/src/org/openstreetmap/josm/gui/layer/markerlayer/WebMarker.java b/src/org/openstreetmap/josm/gui/layer/markerlayer/WebMarker.java
index acc5af8..d539fd5 100644
--- a/src/org/openstreetmap/josm/gui/layer/markerlayer/WebMarker.java
+++ b/src/org/openstreetmap/josm/gui/layer/markerlayer/WebMarker.java
@@ -23,7 +23,7 @@ import org.openstreetmap.josm.tools.OpenBrowser;
  * Marker class with Web URL activation.
  *
  * @author Frederik Ramm
- *
+ * @since 200
  */
 public class WebMarker extends ButtonMarker {
 
@@ -35,13 +35,14 @@ public class WebMarker extends ButtonMarker {
         this.webUrl = webUrl;
     }
 
-    @Override public void actionPerformed(ActionEvent ev) {
+    @Override
+    public void actionPerformed(ActionEvent ev) {
         String error = OpenBrowser.displayUrl(webUrl.toString());
         if (error != null) {
             setErroneous(true);
             new Notification(
                     "<b>" + tr("There was an error while trying to display the URL for this marker") + "</b><br>" +
-                                  tr("(URL was: ") + webUrl.toString() + ")" + "<br>" + error)
+                                  tr("(URL was: ") + webUrl + ")" + "<br>" + error)
                     .setIcon(JOptionPane.ERROR_MESSAGE)
                     .setDuration(Notification.TIME_LONG)
                     .show();
@@ -59,7 +60,7 @@ public class WebMarker extends ButtonMarker {
         return wpt;
     }
 
-    private final void updateErroneous() {
+    private void updateErroneous() {
         if ("file".equals(webUrl.getProtocol())) {
             String path = webUrl.getPath();
             try {
diff --git a/src/org/openstreetmap/josm/gui/layer/markerlayer/package-info.java b/src/org/openstreetmap/josm/gui/layer/markerlayer/package-info.java
new file mode 100644
index 0000000..9479486
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/layer/markerlayer/package-info.java
@@ -0,0 +1,6 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Provides classes for handling marker layers. Markers are GPS points with a name and, optionally, a symbol code attached.
+ */
+package org.openstreetmap.josm.gui.layer.markerlayer;
diff --git a/src/org/openstreetmap/josm/gui/layer/package-info.java b/src/org/openstreetmap/josm/gui/layer/package-info.java
new file mode 100644
index 0000000..3a1c379
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/layer/package-info.java
@@ -0,0 +1,6 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Provides classes for handling the different kinds of map layers.
+ */
+package org.openstreetmap.josm.gui.layer;
diff --git a/src/org/openstreetmap/josm/gui/mappaint/BoxTextElemStyle.java b/src/org/openstreetmap/josm/gui/mappaint/BoxTextElemStyle.java
index 17d177d..c6e21c6 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/BoxTextElemStyle.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/BoxTextElemStyle.java
@@ -17,9 +17,10 @@ import org.openstreetmap.josm.tools.CheckParameterUtil;
 public class BoxTextElemStyle extends ElemStyle {
 
     public enum HorizontalTextAlignment { LEFT, CENTER, RIGHT }
+
     public enum VerticalTextAlignment { ABOVE, TOP, CENTER, BOTTOM, BELOW }
 
-    public static interface BoxProvider {
+    public interface BoxProvider {
         BoxProviderResult get();
     }
 
@@ -86,7 +87,8 @@ public class BoxTextElemStyle extends ElemStyle {
     public HorizontalTextAlignment hAlign;
     public VerticalTextAlignment vAlign;
 
-    public BoxTextElemStyle(Cascade c, TextElement text, BoxProvider boxProvider, Rectangle box, HorizontalTextAlignment hAlign, VerticalTextAlignment vAlign) {
+    public BoxTextElemStyle(Cascade c, TextElement text, BoxProvider boxProvider, Rectangle box,
+            HorizontalTextAlignment hAlign, VerticalTextAlignment vAlign) {
         super(c, 5f);
         CheckParameterUtil.ensureParameterNotNull(text);
         CheckParameterUtil.ensureParameterNotNull(hAlign);
@@ -170,6 +172,7 @@ public class BoxTextElemStyle extends ElemStyle {
         SIMPLE_NODE_TEXT_ELEMSTYLE = create(new Environment(n, mc, "default", null), NodeElemStyle.SIMPLE_NODE_ELEMSTYLE.getBoxProvider());
         if (SIMPLE_NODE_TEXT_ELEMSTYLE == null) throw new AssertionError();
     }
+
     /*
      * Caches the default text color from the preferences.
      *
@@ -177,6 +180,7 @@ public class BoxTextElemStyle extends ElemStyle {
      * session. There should be preference listener updating this cache.
      */
     private static volatile Color DEFAULT_TEXT_COLOR = null;
+
     private static void initDefaultParameters() {
         if (DEFAULT_TEXT_COLOR != null) return;
         DEFAULT_TEXT_COLOR = PaintColors.TEXT.get();
@@ -226,7 +230,8 @@ public class BoxTextElemStyle extends ElemStyle {
 
     @Override
     public String toString() {
-        return "BoxTextElemStyle{" + super.toString() + " " + text.toStringImpl() + " box=" + box + " hAlign=" + hAlign + " vAlign=" + vAlign + '}';
+        return "BoxTextElemStyle{" + super.toString() + " " + text.toStringImpl()
+                + " box=" + box + " hAlign=" + hAlign + " vAlign=" + vAlign + '}';
     }
 
 }
diff --git a/src/org/openstreetmap/josm/gui/mappaint/Cascade.java b/src/org/openstreetmap/josm/gui/mappaint/Cascade.java
index 2f5a645..473a4fb 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/Cascade.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/Cascade.java
@@ -21,7 +21,7 @@ public final class Cascade implements Cloneable {
 
     public static final Cascade EMPTY_CASCADE = new Cascade();
 
-    protected Map<String, Object> prop = new HashMap<>();
+    private Map<String, Object> prop = new HashMap<>();
 
     private static final Pattern HEX_COLOR_PATTERN = Pattern.compile("#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})");
 
@@ -126,9 +126,11 @@ public final class Cascade implements Cloneable {
             return ((Number) o).floatValue();
         if (o instanceof String && !((String) o).isEmpty()) {
             try {
-                return Float.parseFloat((String) o);
+                return Float.valueOf((String) o);
             } catch (NumberFormatException e) {
-                Main.debug("'"+o+"' cannot be converted to float");
+                if (Main.isDebugEnabled()) {
+                    Main.debug("'"+o+"' cannot be converted to float");
+                }
             }
         }
         return null;
@@ -146,7 +148,7 @@ public final class Cascade implements Cloneable {
         if (s != null)
             return !(s.isEmpty() || "false".equals(s) || "no".equals(s) || "0".equals(s) || "0.0".equals(s));
         if (o instanceof Number)
-            return ((Number) o).floatValue() != 0.0f;
+            return ((Number) o).floatValue() != 0;
         if (o instanceof List)
             return !((List) o).isEmpty();
         if (o instanceof float[])
@@ -161,7 +163,7 @@ public final class Cascade implements Cloneable {
         if (o instanceof List) {
             List<?> l = (List<?>) o;
             float[] a = new float[l.size()];
-            for (int i=0; i<l.size(); ++i) {
+            for (int i = 0; i < l.size(); ++i) {
                 Float f = toFloat(l.get(i));
                 if (f == null)
                     return null;
@@ -172,7 +174,7 @@ public final class Cascade implements Cloneable {
         }
         Float f = toFloat(o);
         if (f != null)
-            return new float[] { f };
+            return new float[] {f};
         return null;
     }
 
@@ -210,13 +212,13 @@ public final class Cascade implements Cloneable {
             if (val instanceof float[]) {
                 res.append(Arrays.toString((float[]) val));
             } else if (val instanceof Color) {
-                res.append(Utils.toString((Color)val));
+                res.append(Utils.toString((Color) val));
             } else if (val != null) {
-                res.append(val.toString());
+                res.append(val);
             }
             res.append("; ");
         }
-        return res.append("}").toString();
+        return res.append('}').toString();
     }
 
     public boolean containsKey(String key) {
diff --git a/src/org/openstreetmap/josm/gui/mappaint/ElemStyle.java b/src/org/openstreetmap/josm/gui/mappaint/ElemStyle.java
index cab7be4..4db8ffe 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/ElemStyle.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/ElemStyle.java
@@ -22,31 +22,31 @@ public abstract class ElemStyle implements StyleKeys {
     public static final String[] ICON_KEYS = {ICON_IMAGE, ICON_WIDTH, ICON_HEIGHT, ICON_OPACITY, ICON_OFFSET_X, ICON_OFFSET_Y};
     public static final String[] REPEAT_IMAGE_KEYS = {REPEAT_IMAGE, REPEAT_IMAGE_WIDTH, REPEAT_IMAGE_HEIGHT, REPEAT_IMAGE_OPACITY, null, null};
 
-    public float major_z_index;
-    public float z_index;
-    public float object_z_index;
+    public float majorZIndex;
+    public float zIndex;
+    public float objectZIndex;
     public boolean isModifier;  // false, if style can serve as main style for the
     // primitive; true, if it is a highlight or modifier
 
     public ElemStyle(float major_z_index, float z_index, float object_z_index, boolean isModifier) {
-        this.major_z_index = major_z_index;
-        this.z_index = z_index;
-        this.object_z_index = object_z_index;
+        this.majorZIndex = major_z_index;
+        this.zIndex = z_index;
+        this.objectZIndex = object_z_index;
         this.isModifier = isModifier;
     }
 
     protected ElemStyle(Cascade c, float default_major_z_index) {
-        major_z_index = c.get(MAJOR_Z_INDEX, default_major_z_index, Float.class);
-        z_index = c.get(Z_INDEX, 0f, Float.class);
-        object_z_index = c.get(OBJECT_Z_INDEX, 0f, Float.class);
-        isModifier = c.get(MODIFIER, false, Boolean.class);
+        majorZIndex = c.get(MAJOR_Z_INDEX, default_major_z_index, Float.class);
+        zIndex = c.get(Z_INDEX, 0f, Float.class);
+        objectZIndex = c.get(OBJECT_Z_INDEX, 0f, Float.class);
+        isModifier = c.get(MODIFIER, Boolean.FALSE, Boolean.class);
     }
 
     /**
      * draws a primitive
-     * @param primitive
-     * @param paintSettings
-     * @param painter
+     * @param primitive primitive to draw
+     * @param paintSettings paint settings
+     * @param painter painter
      * @param selected true, if primitive is selected
      * @param outermember true, if primitive is not selected and outer member of a selected multipolygon relation
      * @param member true, if primitive is not selected and member of a selected relation
@@ -131,7 +131,7 @@ public abstract class ElemStyle implements StyleKeys {
         public int style;
         public int size;
 
-        public FontDescriptor(String name, int style, int size){
+        public FontDescriptor(String name, int style, int size) {
             this.name = name;
             this.style = style;
             this.size = size;
@@ -146,6 +146,7 @@ public abstract class ElemStyle implements StyleKeys {
             result = prime * result + style;
             return result;
         }
+
         @Override
         public boolean equals(Object obj) {
             if (this == obj)
@@ -169,6 +170,7 @@ public abstract class ElemStyle implements StyleKeys {
     }
 
     private static final Map<FontDescriptor, Font> FONT_MAP = new HashMap<>();
+
     private static Font getCachedFont(FontDescriptor fd) {
         Font f = FONT_MAP.get(fd);
         if (f != null) return f;
@@ -177,7 +179,7 @@ public abstract class ElemStyle implements StyleKeys {
         return f;
     }
 
-    private static Font getCachedFont(String name, int style, int size){
+    private static Font getCachedFont(String name, int style, int size) {
         return getCachedFont(new FontDescriptor(name, style, size));
     }
 
@@ -207,24 +209,24 @@ public abstract class ElemStyle implements StyleKeys {
         if (!(o instanceof ElemStyle))
             return false;
         ElemStyle s = (ElemStyle) o;
-        return major_z_index == s.major_z_index &&
-                z_index == s.z_index &&
-                object_z_index == s.object_z_index &&
-                isModifier == s.isModifier;
+        return isModifier == s.isModifier &&
+                majorZIndex == s.majorZIndex &&
+                zIndex == s.zIndex &&
+                objectZIndex == s.objectZIndex;
     }
 
     @Override
     public int hashCode() {
         int hash = 5;
-        hash = 41 * hash + Float.floatToIntBits(this.major_z_index);
-        hash = 41 * hash + Float.floatToIntBits(this.z_index);
-        hash = 41 * hash + Float.floatToIntBits(this.object_z_index);
+        hash = 41 * hash + Float.floatToIntBits(this.majorZIndex);
+        hash = 41 * hash + Float.floatToIntBits(this.zIndex);
+        hash = 41 * hash + Float.floatToIntBits(this.objectZIndex);
         hash = 41 * hash + (isModifier ? 1 : 0);
         return hash;
     }
 
     @Override
     public String toString() {
-        return String.format("z_idx=[%s/%s/%s] ", major_z_index, z_index, object_z_index) + (isModifier ? "modifier " : "");
+        return String.format("z_idx=[%s/%s/%s] ", majorZIndex, zIndex, objectZIndex) + (isModifier ? "modifier " : "");
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java b/src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java
index af28bf4..462ad41 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java
@@ -129,8 +129,9 @@ public class ElemStyles {
         try {
             osm.mappaintStyle = style.put(p.a, p.b);
         } catch (StyleCache.RangeViolatedError e) {
-            throw new AssertionError("Range violated. object: " + osm.getPrimitiveId() + ", current style: "+osm.mappaintStyle
-                    + ", scale: " + scale + ", new stylelist: " + p.a + ", new range: " + p.b, e);
+            throw new AssertionError("Range violated: " + e.getMessage()
+                    + " (object: " + osm.getPrimitiveId() + ", current style: "+osm.mappaintStyle
+                    + ", scale: " + scale + ", new stylelist: " + p.a + ", new range: " + p.b + ")", e);
         }
         osm.mappaintCacheIdx = cacheIdx;
         return p;
@@ -164,8 +165,7 @@ public class ElemStyles {
     private Pair<StyleList, Range> getImpl(OsmPrimitive osm, double scale, NavigatableComponent nc) {
         if (osm instanceof Node)
             return generateStyles(osm, scale, false);
-        else if (osm instanceof Way)
-        {
+        else if (osm instanceof Way) {
             Pair<StyleList, Range> p = generateStyles(osm, scale, false);
 
             boolean isOuterWayOfSomeMP = false;
@@ -198,7 +198,7 @@ public class ElemStyles {
 
                     if (!hasIndependentLineStyle) {
                         Pair<StyleList, Range> mpElemStyles;
-                        synchronized(r) {
+                        synchronized (r) {
                             mpElemStyles = getStyleCacheWithRange(r, scale, nc);
                         }
                         ElemStyle mpLine = null;
@@ -273,11 +273,9 @@ public class ElemStyles {
                 }
             }
             return p;
-        }
-        else if (osm instanceof Relation)
-        {
+        } else if (osm instanceof Relation) {
             Pair<StyleList, Range> p = generateStyles(osm, scale, true);
-            if (drawMultipolygon && ((Relation)osm).isMultipolygon()) {
+            if (drawMultipolygon && ((Relation) osm).isMultipolygon()) {
                 if (!Utils.exists(p.a, AreaElemStyle.class) && Main.pref.getBoolean("multipolygon.deprecated.outerstyle", true)) {
                     // look at outer ways to find area style
                     Multipolygon multipolygon = MultipolygonCache.getInstance().get(nc, (Relation) osm);
@@ -344,7 +342,7 @@ public class ElemStyles {
                     addIfNotNull(sl, BoxTextElemStyle.create(env, NodeElemStyle.SIMPLE_NODE_ELEMSTYLE_BOXPROVIDER));
                 }
             } else if (osm instanceof Relation) {
-                if (((Relation)osm).isMultipolygon()) {
+                if (((Relation) osm).isMultipolygon()) {
                     addIfNotNull(sl, AreaElemStyle.create(env));
                     addIfNotNull(sl, RepeatImageElemStyle.create(env));
                     addIfNotNull(sl, LineElemStyle.createLine(env));
@@ -370,7 +368,7 @@ public class ElemStyles {
     private boolean isDefaultNodes() {
         if (defaultNodesIdx == cacheIdx)
             return defaultNodes;
-        defaultNodes = fromCanvas("default-points", true, Boolean.class);
+        defaultNodes = fromCanvas("default-points", Boolean.TRUE, Boolean.class);
         defaultNodesIdx = cacheIdx;
         return defaultNodes;
     }
@@ -381,7 +379,7 @@ public class ElemStyles {
     private boolean isDefaultLines() {
         if (defaultLinesIdx == cacheIdx)
             return defaultLines;
-        defaultLines = fromCanvas("default-lines", true, Boolean.class);
+        defaultLines = fromCanvas("default-lines", Boolean.TRUE, Boolean.class);
         defaultLinesIdx = cacheIdx;
         return defaultLines;
     }
diff --git a/src/org/openstreetmap/josm/gui/mappaint/Environment.java b/src/org/openstreetmap/josm/gui/mappaint/Environment.java
index 139131e..61822b5 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/Environment.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/Environment.java
@@ -46,7 +46,17 @@ public class Environment {
     /**
      * Creates a new uninitialized environment.
      */
-    public Environment() {}
+    public Environment() {
+        // environment can be initialized later through with* methods
+    }
+
+    /**
+     * Creates a new environment.
+     * @since 8415
+     */
+    public Environment(OsmPrimitive osm) {
+        this.osm = osm;
+    }
 
     /**
      * Creates a new environment.
@@ -106,9 +116,9 @@ public class Environment {
      * @param index index of node in parent way or member in parent relation
      * @param count count of nodes in parent way or members in parent relation
      * @return A clone of this environment, with the specified parent, index, and context set to {@link Context#LINK}
-     * @since 6175
      * @see #parent
      * @see #index
+     * @since 6175
      */
     public Environment withParentAndIndexAndLinkContext(OsmPrimitive parent, int index, int count) {
         Environment e = new Environment(this);
@@ -137,9 +147,9 @@ public class Environment {
      * @param index index of node in parent way or member in parent relation
      * @param count count of nodes in parent way or members in parent relation
      * @return A clone of this environment, with the specified child, index, and context set to {@code Context#LINK}
-     * @since 6175
      * @see #child
      * @see #index
+     * @since 6175
      */
     public Environment withChildAndIndexAndLinkContext(OsmPrimitive child, int index, int count) {
         Environment e = new Environment(this);
diff --git a/src/org/openstreetmap/josm/gui/mappaint/Keyword.java b/src/org/openstreetmap/josm/gui/mappaint/Keyword.java
index e9c40fe..2d6224e 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/Keyword.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/Keyword.java
@@ -1,13 +1,14 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.mappaint;
 
+import java.util.Locale;
 import java.util.Objects;
 
 public class Keyword {
     public final String val;
 
     public Keyword(String val) {
-        this.val = val.toLowerCase();
+        this.val = val.toLowerCase(Locale.ENGLISH);
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/gui/mappaint/LabelCompositionStrategy.java b/src/org/openstreetmap/josm/gui/mappaint/LabelCompositionStrategy.java
index b11ed32..bb911e8 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/LabelCompositionStrategy.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/LabelCompositionStrategy.java
@@ -47,7 +47,7 @@ public abstract class LabelCompositionStrategy {
     public static class StaticLabelCompositionStrategy extends LabelCompositionStrategy {
         private String defaultLabel;
 
-        public StaticLabelCompositionStrategy(String defaultLabel){
+        public StaticLabelCompositionStrategy(String defaultLabel) {
             this.defaultLabel = defaultLabel;
         }
 
@@ -94,7 +94,8 @@ public abstract class LabelCompositionStrategy {
     public static class TagLookupCompositionStrategy extends LabelCompositionStrategy {
 
         private String defaultLabelTag;
-        public TagLookupCompositionStrategy(String defaultLabelTag){
+
+        public TagLookupCompositionStrategy(String defaultLabelTag) {
             if (defaultLabelTag != null) {
                 defaultLabelTag = defaultLabelTag.trim();
                 if (defaultLabelTag.isEmpty()) {
@@ -155,6 +156,7 @@ public abstract class LabelCompositionStrategy {
             "name:" + LanguageInfo.getJOSMLocaleCode(),
             "name",
             "int_name",
+            "distance",
             "ref",
             "operator",
             "brand",
@@ -188,7 +190,7 @@ public abstract class LabelCompositionStrategy {
                 nameTags = Collections.emptyList();
             }
             List<String> result = new ArrayList<>();
-            for(String tag: nameTags) {
+            for (String tag: nameTags) {
                 if (tag == null) {
                     continue;
                 }
@@ -206,7 +208,7 @@ public abstract class LabelCompositionStrategy {
          *
          * @param nameTags the name tags. null values are ignored.
          */
-        public void setNameTags(List<String> nameTags){
+        public void setNameTags(List<String> nameTags) {
             this.nameTags = buildNameTags(nameTags);
         }
 
@@ -216,7 +218,7 @@ public abstract class LabelCompositionStrategy {
          * @param nameComplementTags the name complement tags. null values are ignored.
          * @since 6541
          */
-        public void setNameComplementTags(List<String> nameComplementTags){
+        public void setNameComplementTags(List<String> nameComplementTags) {
             this.nameComplementTags = buildNameTags(nameComplementTags);
         }
 
@@ -246,7 +248,7 @@ public abstract class LabelCompositionStrategy {
          * <tt>mappaint.nameOrder</tt> and <tt>mappaint.nameComplementOrder</tt>.
          */
         public final void initNameTagsFromPreferences() {
-            if (Main.pref == null){
+            if (Main.pref == null) {
                 this.nameTags = new ArrayList<>(Arrays.asList(DEFAULT_NAME_TAGS));
                 this.nameComplementTags = new ArrayList<>(Arrays.asList(DEFAULT_NAME_COMPLEMENT_TAGS));
             } else {
diff --git a/src/org/openstreetmap/josm/gui/mappaint/LineElemStyle.java b/src/org/openstreetmap/josm/gui/mappaint/LineElemStyle.java
index b926eeb..1a200b1 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/LineElemStyle.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/LineElemStyle.java
@@ -29,6 +29,7 @@ public class LineElemStyle extends ElemStyle {
         }
         return createLine(new Environment(null, mc, "default", null));
     }
+
     public static final LineElemStyle UNTAGGED_WAY = createSimpleLineStyle(null, false);
 
     private BasicStroke line;
@@ -46,15 +47,16 @@ public class LineElemStyle extends ElemStyle {
         RIGHT_CASING("right-casing-", 2.1f);
 
         public final String prefix;
-        public final float default_major_z_index;
+        public final float defaultMajorZIndex;
 
         LineType(String prefix, float default_major_z_index) {
             this.prefix = prefix;
-            this.default_major_z_index = default_major_z_index;
+            this.defaultMajorZIndex = default_major_z_index;
         }
     }
 
-    protected LineElemStyle(Cascade c, float default_major_z_index, BasicStroke line, Color color, BasicStroke dashesLine, Color dashesBackground, float offset, float realWidth) {
+    protected LineElemStyle(Cascade c, float default_major_z_index, BasicStroke line, Color color, BasicStroke dashesLine,
+            Color dashesBackground, float offset, float realWidth) {
         super(c, default_major_z_index);
         this.line = line;
         this.color = color;
@@ -137,7 +139,7 @@ public class LineElemStyle extends ElemStyle {
             if (widthTag != null) {
                 try {
                     realWidth = Float.valueOf(widthTag);
-                } catch(NumberFormatException nfe) {
+                } catch (NumberFormatException nfe) {
                     Main.warn(nfe);
                 }
             }
@@ -257,13 +259,13 @@ public class LineElemStyle extends ElemStyle {
             dashesLine = new BasicStroke(width, cap, join, miterlimit, dashes2, dashes2[0] + dashesOffset);
         }
 
-        return new LineElemStyle(c, type.default_major_z_index, line, color, dashesLine, dashesBackground, offset, realWidth);
+        return new LineElemStyle(c, type.defaultMajorZIndex, line, color, dashesLine, dashesBackground, offset, realWidth);
     }
 
     @Override
     public void paintPrimitive(OsmPrimitive primitive, MapPaintSettings paintSettings, StyledMapRenderer painter,
             boolean selected, boolean outermember, boolean member) {
-        Way w = (Way)primitive;
+        Way w = (Way) primitive;
         /* show direction arrows, if draw.segment.relevant_directions_only is not set,
         the way is tagged with a direction key
         (even if the tag is negated as in oneway=false) or the way is selected */
@@ -297,7 +299,7 @@ public class LineElemStyle extends ElemStyle {
             myColor = paintSettings.getSelectedColor(color.getAlpha());
         } else if (member || outermember) {
             myColor = paintSettings.getRelationSelectedColor(color.getAlpha());
-        } else if(w.isDisabled()) {
+        } else if (w.isDisabled()) {
             myColor = paintSettings.getInactiveColor();
             myDashedColor = paintSettings.getInactiveColor();
         }
@@ -305,11 +307,11 @@ public class LineElemStyle extends ElemStyle {
         painter.drawWay(w, myColor, myLine, myDashLine, myDashedColor, offset, showOrientation,
                 showOnlyHeadArrowOnly, showOneway, onewayReversed);
 
-        if(paintSettings.isShowOrderNumber() && !painter.isInactiveMode()) {
+        if (paintSettings.isShowOrderNumber() && !painter.isInactiveMode()) {
             int orderNumber = 0;
             lastN = null;
-            for(Node n : w.getNodes()) {
-                if(lastN != null) {
+            for (Node n : w.getNodes()) {
+                if (lastN != null) {
                     orderNumber++;
                     painter.drawOrderNumber(lastN, n, orderNumber, myColor);
                 }
@@ -355,7 +357,7 @@ public class LineElemStyle extends ElemStyle {
         return "LineElemStyle{" + super.toString() + "width=" + line.getLineWidth() +
             " realWidth=" + realWidth + " color=" + Utils.toString(color) +
             " dashed=" + Arrays.toString(line.getDashArray()) +
-            (line.getDashPhase() == 0f ? "" : " dashesOffses=" + line.getDashPhase()) +
+            (line.getDashPhase() == 0 ? "" : " dashesOffses=" + line.getDashPhase()) +
             " dashedColor=" + Utils.toString(dashesBackground) +
             " linejoin=" + linejoinToString(line.getLineJoin()) +
             " linecap=" + linecapToString(line.getEndCap()) +
diff --git a/src/org/openstreetmap/josm/gui/mappaint/LineTextElemStyle.java b/src/org/openstreetmap/josm/gui/mappaint/LineTextElemStyle.java
index 5db2edf..74673e6 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/LineTextElemStyle.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/LineTextElemStyle.java
@@ -17,6 +17,7 @@ public class LineTextElemStyle extends ElemStyle {
         super(c, 4.9f);
         this.text = text;
     }
+
     public static LineTextElemStyle create(final Environment env) {
         final Cascade c = env.mc.getCascade(env.layer);
 
@@ -33,7 +34,7 @@ public class LineTextElemStyle extends ElemStyle {
     @Override
     public void paintPrimitive(OsmPrimitive primitive, MapPaintSettings paintSettings, StyledMapRenderer painter,
             boolean selected, boolean outermember, boolean member) {
-        Way w = (Way)primitive;
+        Way w = (Way) primitive;
         painter.drawTextOnPath(w, text);
     }
 
diff --git a/src/org/openstreetmap/josm/gui/mappaint/MapPaintMenu.java b/src/org/openstreetmap/josm/gui/mappaint/MapPaintMenu.java
index b677e96..8472dc5 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/MapPaintMenu.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/MapPaintMenu.java
@@ -77,6 +77,7 @@ public class MapPaintMenu extends JMenu implements MapPaintSylesUpdateListener {
             return false;
         }
     }
+
     private final transient Map<String, MapPaintAction> actions = new HashMap<>();
 
     /**
diff --git a/src/org/openstreetmap/josm/gui/mappaint/MapPaintStyles.java b/src/org/openstreetmap/josm/gui/mappaint/MapPaintStyles.java
index 55d3c13..058ccbe 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/MapPaintStyles.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/MapPaintStyles.java
@@ -68,6 +68,7 @@ public final class MapPaintStyles {
      */
     public static class TagKeyReference {
         public final String key;
+
         public TagKeyReference(String key) {
             this.key = key;
         }
@@ -108,8 +109,8 @@ public final class MapPaintStyles {
      * @param ref reference to the requested icon
      * @param test if <code>true</code> than the icon is request is tested
      * @return image provider for icon (can be <code>null</code> when <code>test</code> is <code>true</code>).
-     * @since 8097
      * @see #getIcon(IconReference, int,int)
+     * @since 8097
      */
     public static ImageProvider getIconProvider(IconReference ref, boolean test) {
         final String namespace = ref.source.getPrefName();
@@ -216,14 +217,14 @@ public final class MapPaintStyles {
         Collection<String> prefIconDirs = Main.pref.getCollection("mappaint.icon.sources");
         for (String fileset : prefIconDirs) {
             String[] a;
-            if(fileset.indexOf('=') >= 0) {
+            if (fileset.indexOf('=') >= 0) {
                 a = fileset.split("=", 2);
             } else {
                 a = new String[] {"", fileset};
             }
 
             /* non-prefixed path is generic path, always take it */
-            if(a[0].length() == 0 || source.getPrefName().equals(a[0])) {
+            if (a[0].isEmpty() || source.getPrefName().equals(a[0])) {
                 dirs.add(a[1]);
             }
         }
@@ -286,9 +287,9 @@ public final class MapPaintStyles {
             zipEntryPath = cf.findZipEntryPath("xml", "style");
             if (zipEntryPath != null)
                 return new XmlStyleSource(entry);
-            if (entry.url.toLowerCase().endsWith(".mapcss"))
+            if (Utils.hasExtension(entry.url, "mapcss"))
                 return new MapCSSStyleSource(entry);
-            if (entry.url.toLowerCase().endsWith(".xml"))
+            if (Utils.hasExtension(entry.url, "xml"))
                 return new XmlStyleSource(entry);
             else {
                 try (InputStreamReader reader = new InputStreamReader(cf.getInputStream(), StandardCharsets.UTF_8)) {
@@ -449,11 +450,12 @@ public final class MapPaintStyles {
      */
 
     public interface MapPaintSylesUpdateListener {
-        public void mapPaintStylesUpdated();
-        public void mapPaintStyleEntryUpdated(int idx);
+        void mapPaintStylesUpdated();
+
+        void mapPaintStyleEntryUpdated(int idx);
     }
 
-    protected static final CopyOnWriteArrayList<MapPaintSylesUpdateListener> listeners
+    private static final CopyOnWriteArrayList<MapPaintSylesUpdateListener> listeners
             = new CopyOnWriteArrayList<>();
 
     public static void addMapPaintSylesUpdateListener(MapPaintSylesUpdateListener listener) {
diff --git a/src/org/openstreetmap/josm/gui/mappaint/MultiCascade.java b/src/org/openstreetmap/josm/gui/mappaint/MultiCascade.java
index fb863f7..e992169 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/MultiCascade.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/MultiCascade.java
@@ -63,7 +63,7 @@ public class MultiCascade implements StyleKeys {
         if (c == null) {
             c = new Cascade();
             if (!"default".equals(layer) && !"*".equals(layer)) {
-                c.put(MODIFIER, true);
+                c.put(MODIFIER, Boolean.TRUE);
             }
         }
         return c;
diff --git a/src/org/openstreetmap/josm/gui/mappaint/NodeElemStyle.java b/src/org/openstreetmap/josm/gui/mappaint/NodeElemStyle.java
index cadc73d..4bc5f2b 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/NodeElemStyle.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/NodeElemStyle.java
@@ -3,7 +3,6 @@ package org.openstreetmap.josm.gui.mappaint;
 
 import java.awt.BasicStroke;
 import java.awt.Color;
-import java.awt.Image;
 import java.awt.Rectangle;
 import java.awt.Stroke;
 import java.util.Objects;
@@ -29,12 +28,6 @@ public class NodeElemStyle extends ElemStyle implements StyleKeys {
     public final RotationAngle mapImageAngle;
     public final Symbol symbol;
 
-    private Image enabledNodeIcon;
-    private Image disabledNodeIcon;
-
-    private boolean enabledNodeIconIsTemporary;
-    private boolean disabledNodeIconIsTemporary;
-
     public enum SymbolShape { SQUARE, CIRCLE, TRIANGLE, PENTAGON, HEXAGON, HEPTAGON, OCTAGON, NONAGON, DECAGON }
 
     public static class Symbol {
@@ -82,8 +75,8 @@ public class NodeElemStyle extends ElemStyle implements StyleKeys {
         @Override
         public String toString() {
             return "symbol=" + symbol + " size=" + size +
-                    (stroke != null ? (" stroke=" + stroke + " strokeColor=" + strokeColor) : "") +
-                    (fillColor != null ? (" fillColor=" + fillColor) : "");
+                    (stroke != null ? " stroke=" + stroke + " strokeColor=" + strokeColor : "") +
+                    (fillColor != null ? " fillColor=" + fillColor : "");
         }
     }
 
@@ -98,7 +91,8 @@ public class NodeElemStyle extends ElemStyle implements StyleKeys {
     }
 
     public static final StyleList DEFAULT_NODE_STYLELIST = new StyleList(NodeElemStyle.SIMPLE_NODE_ELEMSTYLE);
-    public static final StyleList DEFAULT_NODE_STYLELIST_TEXT = new StyleList(NodeElemStyle.SIMPLE_NODE_ELEMSTYLE, BoxTextElemStyle.SIMPLE_NODE_TEXT_ELEMSTYLE);
+    public static final StyleList DEFAULT_NODE_STYLELIST_TEXT = new StyleList(NodeElemStyle.SIMPLE_NODE_ELEMSTYLE,
+            BoxTextElemStyle.SIMPLE_NODE_TEXT_ELEMSTYLE);
 
     protected NodeElemStyle(Cascade c, MapImage mapImage, Symbol symbol, float default_major_z_index, RotationAngle rotationAngle) {
         super(c, default_major_z_index);
@@ -132,6 +126,9 @@ public class NodeElemStyle extends ElemStyle implements StyleKeys {
                     try {
                         rotationAngle = RotationAngle.buildStaticRotation(rotationKW.val);
                     } catch (IllegalArgumentException ignore) {
+                        if (Main.isTraceEnabled()) {
+                            Main.trace(ignore.getMessage());
+                        }
                     }
                 }
             }
@@ -324,9 +321,9 @@ public class NodeElemStyle extends ElemStyle implements StyleKeys {
                     }
                 }
 
-                final int size = Utils.max((selected ? settings.getSelectedNodeSize() : 0),
-                        (n.isTagged() ? settings.getTaggedNodeSize() : 0),
-                        (isConnection ? settings.getConnectionNodeSize() : 0),
+                final int size = Utils.max(selected ? settings.getSelectedNodeSize() : 0,
+                        n.isTagged() ? settings.getTaggedNodeSize() : 0,
+                        isConnection ? settings.getConnectionNodeSize() : 0,
                         settings.getUnselectedNodeSize());
 
                 final boolean fill = (selected && settings.isFillSelectedNode()) ||
diff --git a/src/org/openstreetmap/josm/gui/mappaint/RepeatImageElemStyle.java b/src/org/openstreetmap/josm/gui/mappaint/RepeatImageElemStyle.java
index 04d39ee..2f3c125 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/RepeatImageElemStyle.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/RepeatImageElemStyle.java
@@ -35,7 +35,7 @@ public class RepeatImageElemStyle extends ElemStyle implements StyleKeys {
         Cascade c = env.mc.getCascade(env.layer);
         float offset = c.get(REPEAT_IMAGE_OFFSET, 0f, Float.class);
         float spacing = c.get(REPEAT_IMAGE_SPACING, 0f, Float.class);
-        float phase = - c.get(REPEAT_IMAGE_PHASE, 0f, Float.class);
+        float phase = -c.get(REPEAT_IMAGE_PHASE, 0f, Float.class);
 
         LineImageAlignment align = LineImageAlignment.CENTER;
         Keyword alignKW = c.get(REPEAT_IMAGE_ALIGN, Keyword.CENTER, Keyword.class);
diff --git a/src/org/openstreetmap/josm/gui/mappaint/StyleCache.java b/src/org/openstreetmap/josm/gui/mappaint/StyleCache.java
index a0d0c7f..0f6a84d 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/StyleCache.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/StyleCache.java
@@ -24,7 +24,8 @@ public final class StyleCache {
     /* styles for each scale range */
     private final List<StyleList> data;
 
-    private static final Storage<StyleCache> internPool = new Storage<>(); // TODO: clean up the intern pool from time to time (after purge or layer removal)
+    // TODO: clean up the intern pool from time to time (after purge or layer removal)
+    private static final Storage<StyleCache> internPool = new Storage<>();
 
     public static final StyleCache EMPTY_STYLECACHE = (new StyleCache()).intern();
 
@@ -105,7 +106,7 @@ public final class StyleCache {
     public StyleList get(double scale) {
         if (scale <= 0)
             throw new IllegalArgumentException("scale must be <= 0 but is "+scale);
-        for (int i=0; i<data.size(); ++i) {
+        for (int i = 0; i < data.size(); ++i) {
             if (bd.get(i) < scale && scale <= bd.get(i+1)) {
                 return data.get(i);
             }
@@ -120,7 +121,7 @@ public final class StyleCache {
     public Pair<StyleList, Range> getWithRange(double scale) {
         if (scale <= 0)
             throw new IllegalArgumentException("scale must be <= 0 but is "+scale);
-        for (int i=0; i<data.size(); ++i) {
+        for (int i = 0; i < data.size(); ++i) {
             if (bd.get(i) < scale && scale <= bd.get(i+1)) {
                 return new Pair<>(data.get(i), new Range(bd.get(i), bd.get(i+1)));
             }
@@ -146,6 +147,12 @@ public final class StyleCache {
     // this exception type is for debugging #8997 and can later be replaced
     // by AssertionError
     public static class RangeViolatedError extends Error {
+        public RangeViolatedError() {
+        }
+
+        public RangeViolatedError(String message) {
+            super(message);
+        }
     }
 
     /**
@@ -159,33 +166,32 @@ public final class StyleCache {
      *       lower     upper
      */
     private void putImpl(StyleList sl, double lower, double upper) {
-        int i=0;
+        int i = 0;
         while (bd.get(i) < lower) {
             ++i;
         }
         if (bd.get(i) == lower) {
             if (upper > bd.get(i+1))
-                throw new RangeViolatedError();
+                throw new RangeViolatedError("the new range must be within a single subrange (1)");
             if (data.get(i) != null)
-                throw new AssertionError("the new range must be within a subrange that has no data");
+                throw new RangeViolatedError("the new range must be within a subrange that has no data");
 
-            //  --|-------|--------|--
-            //   i-1      i       i+1
-            //            (--------]
             if (bd.get(i+1) == upper) {
+                //  --|-------|--------|--
+                //   i-1      i       i+1
+                //            (--------]
                 data.set(i, sl);
-            }
-            //  --|-------|--------|--
-            //   i-1      i       i+1
-            //            (-----]
-            else {
+            } else {
+                //  --|-------|--------|--
+                //   i-1      i       i+1
+                //            (-----]
                 bd.add(i+1, upper);
                 data.add(i, sl);
             }
             return;
         } else {
             if (bd.get(i) < upper)
-                throw new AssertionError("the new range must be within a single subrange");
+                throw new RangeViolatedError("the new range must be within a single subrange (2)");
             if (data.get(i-1) != null)
                 throw new AssertionError();
 
@@ -213,7 +219,7 @@ public final class StyleCache {
         if (bd.size() != data.size() + 1) throw new AssertionError();
         if (bd.get(0) != 0) throw new AssertionError();
         if (bd.get(bd.size() - 1) != Double.POSITIVE_INFINITY) throw new AssertionError();
-        for (int i=0; i<data.size() - 1; ++i) {
+        for (int i = 0; i < data.size() - 1; ++i) {
             if (bd.get(i) >= bd.get(i + 1)) throw new AssertionError();
         }
     }
diff --git a/src/org/openstreetmap/josm/gui/mappaint/StyleSetting.java b/src/org/openstreetmap/josm/gui/mappaint/StyleSetting.java
index 83e0fbd..f7220df 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/StyleSetting.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/StyleSetting.java
@@ -3,10 +3,12 @@ package org.openstreetmap.josm.gui.mappaint;
 
 import java.awt.event.ActionEvent;
 import java.util.Arrays;
+
 import javax.swing.AbstractAction;
 import javax.swing.Action;
 import javax.swing.JCheckBoxMenuItem;
 import javax.swing.JMenu;
+
 import org.openstreetmap.josm.Main;
 
 /**
@@ -38,7 +40,7 @@ public interface StyleSetting {
     /**
      * A style setting for boolean value (yes / no).
      */
-    public static class BooleanStyleSetting implements StyleSetting {
+    class BooleanStyleSetting implements StyleSetting {
         public final StyleSource parentStyle;
         public final String prefKey;
         public final String label;
@@ -90,8 +92,7 @@ public interface StyleSetting {
         public Object getValue() {
             String val = Main.pref.get(prefKey, null);
             if (val == null) return def;
-            return Boolean.parseBoolean(val);
+            return Boolean.valueOf(val);
         }
-
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/mappaint/StyleSource.java b/src/org/openstreetmap/josm/gui/mappaint/StyleSource.java
index 4466024..92a964e 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/StyleSource.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/StyleSource.java
@@ -113,8 +113,8 @@ public abstract class StyleSource extends SourceEntry {
     /**
      * Closes the source input stream previously returned by {@link #getSourceInputStream()} and other linked resources, if applicable.
      * @param is The source input stream that must be closed
-     * @since 6289
      * @see #getSourceInputStream()
+     * @since 6289
      */
     public void closeSourceInputStream(InputStream is) {
         Utils.close(is);
@@ -141,8 +141,8 @@ public abstract class StyleSource extends SourceEntry {
      * Image provider for default icon.
      *
      * @return image provider for default styles icon
-     * @since 8097
      * @see #getIconProvider()
+     * @since 8097
      */
     private static synchronized ImageProvider getDefaultIconProvider() {
         if (defaultIconProvider == null) {
@@ -155,8 +155,8 @@ public abstract class StyleSource extends SourceEntry {
      * Image provider for source icon. Uses default icon, when not else available.
      *
      * @return image provider for styles icon
-     * @since 8097
      * @see #getIconProvider()
+     * @since 8097
      */
     protected ImageProvider getSourceIconProvider() {
         if (imageIconProvider == null) {
diff --git a/src/org/openstreetmap/josm/gui/mappaint/TextElement.java b/src/org/openstreetmap/josm/gui/mappaint/TextElement.java
index 04cd88d..00dd1ea 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/TextElement.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/TextElement.java
@@ -38,11 +38,11 @@ public class TextElement implements StyleKeys {
      * @param strategy the strategy indicating how the text is composed for a specific {@link OsmPrimitive} to be rendered.
      * If null, no label is rendered.
      * @param font the font to be used. Must not be null.
-     * @param xOffset
-     * @param yOffset
+     * @param xOffset x offset
+     * @param yOffset y offset
      * @param color the color to be used. Must not be null
-     * @param haloRadius
-     * @param haloColor
+     * @param haloRadius halo radius
+     * @param haloColor halo color
      */
     public TextElement(LabelCompositionStrategy strategy, Font font, int xOffset, int yOffset, Color color, Float haloRadius, Color haloColor) {
         CheckParameterUtil.ensureParameterNotNull(font);
@@ -77,7 +77,7 @@ public class TextElement implements StyleKeys {
      * @param c the style properties
      * @return the label composition strategy
      */
-    protected static LabelCompositionStrategy buildLabelCompositionStrategy(Cascade c, boolean defaultAnnotate){
+    protected static LabelCompositionStrategy buildLabelCompositionStrategy(Cascade c, boolean defaultAnnotate) {
         /*
          * If the cascade includes a TagKeyReference we will lookup the rendered label
          * from a tag value.
@@ -155,7 +155,7 @@ public class TextElement implements StyleKeys {
                     haloColor.getBlue(), Utils.color_float2int(haloAlpha));
         }
 
-        return new TextElement(strategy, font, (int) xOffset, - (int) yOffset, color, haloRadius, haloColor);
+        return new TextElement(strategy, font, (int) xOffset, -(int) yOffset, color, haloRadius, haloColor);
     }
 
     /**
@@ -176,19 +176,19 @@ public class TextElement implements StyleKeys {
     }
 
     protected String toStringImpl() {
-        StringBuilder sb = new StringBuilder();
-        sb.append("labelCompositionStrategy=" + labelCompositionStrategy);
-        sb.append(" font=" + font);
+        StringBuilder sb = new StringBuilder(96);
+        sb.append("labelCompositionStrategy=").append(labelCompositionStrategy)
+          .append(" font=").append(font);
         if (xOffset != 0) {
-            sb.append(" xOffset=" + xOffset);
+            sb.append(" xOffset=").append(xOffset);
         }
         if (yOffset != 0) {
-            sb.append(" yOffset=" + yOffset);
+            sb.append(" yOffset=").append(yOffset);
         }
-        sb.append(" color=" + Utils.toString(color));
+        sb.append(" color=").append(Utils.toString(color));
         if (haloRadius != null) {
-            sb.append(" haloRadius=" + haloRadius);
-            sb.append(" haloColor=" + haloColor);
+            sb.append(" haloRadius=").append(haloRadius)
+              .append(" haloColor=").append(haloColor);
         }
         return sb.toString();
     }
diff --git a/src/org/openstreetmap/josm/gui/mappaint/mapcss/Condition.java b/src/org/openstreetmap/josm/gui/mappaint/mapcss/Condition.java
index e0d4eb6..56b5bba 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/mapcss/Condition.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/mapcss/Condition.java
@@ -1,6 +1,8 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.mappaint.mapcss;
 
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
 import java.text.MessageFormat;
 import java.util.Arrays;
 import java.util.Collection;
@@ -10,8 +12,10 @@ import java.util.Set;
 import java.util.regex.Pattern;
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.actions.search.SearchCompiler.InDataSourceArea;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.OsmUtils;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.Tag;
 import org.openstreetmap.josm.data.osm.Way;
@@ -68,7 +72,7 @@ public abstract class Condition {
     }
 
     public static PseudoClassCondition createPseudoClassCondition(String id, boolean not, Context context) {
-        return new PseudoClassCondition(id, not, context);
+        return PseudoClassCondition.createPseudoClassCondition(id, not, context);
     }
 
     public static ClassCondition createClassCondition(String id, boolean not, Context context) {
@@ -79,12 +83,44 @@ public abstract class Condition {
         return new ExpressionCondition(e);
     }
 
+    /**
+     * This is the operation that {@link KeyValueCondition} uses to match.
+     */
     public static enum Op {
-        EQ, NEQ, GREATER_OR_EQUAL, GREATER, LESS_OR_EQUAL, LESS,
-        REGEX, NREGEX, ONE_OF, BEGINS_WITH, ENDS_WITH, CONTAINS;
+        /** The value equals the given reference. */
+        EQ,
+        /** The value does not equal the reference. */
+        NEQ,
+        /** The value is greater than or equal to the given reference value (as float). */
+        GREATER_OR_EQUAL,
+        /** The value is greater than the given reference value (as float). */
+        GREATER,
+        /** The value is less than or equal to the given reference value (as float). */
+        LESS_OR_EQUAL,
+        /** The value is less than the given reference value (as float). */
+        LESS,
+        /** The reference is treated as regular expression and the value needs to match it. */
+        REGEX,
+        /** The reference is treated as regular expression and the value needs to not match it. */
+        NREGEX,
+        /** The reference is treated as a list separated by ';'. Spaces around the ; are ignored.
+         *  The value needs to be equal one of the list elements. */
+        ONE_OF,
+        /** The value needs to begin with the reference string. */
+        BEGINS_WITH,
+        /** The value needs to end with the reference string. */
+        ENDS_WITH,
+         /** The value needs to contain the reference string. */
+        CONTAINS;
 
         public static final Set<Op> NEGATED_OPS = EnumSet.of(NEQ, NREGEX);
 
+        /**
+         * Evaluates a value against a reference string.
+         * @param testString The value. May be <code>null</code>
+         * @param prototypeString The reference string-
+         * @return <code>true</code> if and only if this operation matches for the given value/reference pair.
+         */
         public boolean eval(String testString, String prototypeString) {
             if (testString == null && !NEGATED_OPS.contains(this))
                 return false;
@@ -146,14 +182,25 @@ public abstract class Condition {
     }
 
     /**
-     * Most common case of a KeyValueCondition.
+     * Most common case of a KeyValueCondition, this is the basic key=value case.
      *
      * Extra class for performance reasons.
      */
     public static class SimpleKeyValueCondition extends Condition {
+        /**
+         * The key to search for.
+         */
         public final String k;
+        /**
+         * The value to search for.
+         */
         public final String v;
 
+        /**
+         * Create a new SimpleKeyValueCondition.
+         * @param k The key
+         * @param v The value.
+         */
         public SimpleKeyValueCondition(String k, String v) {
             this.k = k;
             this.v = v;
@@ -180,10 +227,21 @@ public abstract class Condition {
      *
      */
     public static class KeyValueCondition extends Condition {
-
+        /**
+         * The key to search for.
+         */
         public final String k;
+        /**
+         * The value to search for.
+         */
         public final String v;
+        /**
+         * The key/value match operation.
+         */
         public final Op op;
+        /**
+         * If this flag is set, {@link #v} is treated as a key and the value is the value set for that key.
+         */
         public boolean considerValAsKey;
 
         /**
@@ -278,8 +336,28 @@ public abstract class Condition {
         }
     }
 
+    /**
+     * This defines how {@link KeyCondition} matches a given key.
+     */
     public static enum KeyMatchType {
-        EQ, TRUE, FALSE, REGEX
+        /**
+         * The key needs to be equal to the given label.
+         */
+        EQ,
+        /**
+         * The key needs to have a true value (yes, ...)
+         * @see OsmUtils#isTrue(String)
+         */
+        TRUE,
+        /**
+         * The key needs to have a false value (no, ...)
+         * @see OsmUtils#isFalse(String)
+         */
+        FALSE,
+        /**
+         * The key needs to match the given regular expression.
+         */
+        REGEX
     }
 
     /**
@@ -303,15 +381,34 @@ public abstract class Condition {
      */
     public static class KeyCondition extends Condition {
 
+        /**
+         * The key name.
+         */
         public final String label;
+        /**
+         * If we should negate the result of the match.
+         */
         public final boolean negateResult;
+        /**
+         * Describes how to match the label against the key.
+         * @see KeyMatchType
+         */
         public final KeyMatchType matchType;
-        public Predicate<String> containsPattern;
+        /**
+         * A predicate used to match a the regexp against the key. Only used if the match type is regexp.
+         */
+        public final Predicate<String> containsPattern;
 
-        public KeyCondition(String label, boolean negateResult, KeyMatchType matchType){
+        /**
+         * Creates a new KeyCondition
+         * @param label The key name (or regexp) to use.
+         * @param negateResult If we should negate the result.,
+         * @param matchType The match type.
+         */
+        public KeyCondition(String label, boolean negateResult, KeyMatchType matchType) {
             this.label = label;
             this.negateResult = negateResult;
-            this.matchType = matchType;
+            this.matchType = matchType == null ? KeyMatchType.EQ : matchType;
             this.containsPattern = KeyMatchType.REGEX.equals(matchType)
                     ? Predicates.stringContainsPattern(Pattern.compile(label))
                     : null;
@@ -321,13 +418,14 @@ public abstract class Condition {
         public boolean applies(Environment e) {
             switch(e.getContext()) {
             case PRIMITIVE:
-                if (KeyMatchType.TRUE.equals(matchType))
+                switch (matchType) {
+                case TRUE:
                     return e.osm.isKeyTrue(label) ^ negateResult;
-                else if (KeyMatchType.FALSE.equals(matchType))
+                case FALSE:
                     return e.osm.isKeyFalse(label) ^ negateResult;
-                else if (KeyMatchType.REGEX.equals(matchType)) {
+                case REGEX:
                     return Utils.exists(e.osm.keySet(), containsPattern) ^ negateResult;
-                } else {
+                default:
                     return e.osm.hasKey(label) ^ negateResult;
                 }
             case LINK:
@@ -337,6 +435,15 @@ public abstract class Condition {
             }
         }
 
+        /**
+         * Get the matched key and the corresponding value.
+         * <p>
+         * WARNING: This ignores {@link #negateResult}.
+         * <p>
+         * WARNING: For regexp, the regular expression is returned instead of a key if the match failed.
+         * @param p The primitive to get the value from.
+         * @return The tag.
+         */
         public Tag asTag(OsmPrimitive p) {
             String key = label;
             if (KeyMatchType.REGEX.equals(matchType)) {
@@ -375,61 +482,164 @@ public abstract class Condition {
         }
     }
 
+    /**
+     * Like <a href="http://www.w3.org/TR/css3-selectors/#pseudo-classes">CSS pseudo classes</a>, MapCSS pseudo classes
+     * are written in lower case with dashes between words.
+     */
+    static class PseudoClasses {
+
+        /**
+         * {@code closed} tests whether the way is closed or the relation is a closed multipolygon
+         */
+        static boolean closed(Environment e) {
+            if (e.osm instanceof Way && ((Way) e.osm).isClosed())
+                return true;
+            if (e.osm instanceof Relation && ((Relation) e.osm).isMultipolygon())
+                return true;
+            return false;
+        }
+
+        /**
+         * {@code :modified} tests whether the object has been modified.
+         * @see OsmPrimitive#isModified() ()
+         */
+        static boolean modified(Environment e) {
+            return e.osm.isModified() || e.osm.isNewOrUndeleted();
+        }
+
+        /**
+         * {@code ;new} tests whether the object is new.
+         * @see OsmPrimitive#isNew()
+         */
+        static boolean _new(Environment e) {
+            return e.osm.isNew();
+        }
+
+        /**
+         * {@code :connection} tests whether the object is a connection node.
+         * @see Node#isConnectionNode()
+         */
+        static boolean connection(Environment e) {
+            return e.osm instanceof Node && ((Node) e.osm).isConnectionNode();
+        }
+
+        /**
+         * {@code :tagged} tests whether the object is tagged.
+         * @see OsmPrimitive#isTagged()
+         */
+        static boolean tagged(Environment e) {
+            return e.osm.isTagged();
+        }
+
+        /**
+         * {@code :same-tags} tests whether the object has the same tags as its child/parent.
+         * @see OsmPrimitive#hasSameInterestingTags(OsmPrimitive)
+         */
+        static boolean sameTags(Environment e) {
+            return e.osm.hasSameInterestingTags(Utils.firstNonNull(e.child, e.parent));
+        }
+
+        /**
+         * {@code :area-style} tests whether the object has an area style. This is useful for validators.
+         * @see ElemStyles#hasAreaElemStyle(OsmPrimitive, boolean)
+         */
+        static boolean areaStyle(Environment e) {
+            // only for validator
+            return ElemStyles.hasAreaElemStyle(e.osm, false);
+        }
+
+        /**
+         * {@code unconnected}: tests whether the object is a unconnected node.
+         */
+        static boolean unconnected(Environment e) {
+            return e.osm instanceof Node && OsmPrimitive.getFilteredList(e.osm.getReferrers(), Way.class).isEmpty();
+        }
+
+        /**
+         * {@code righthandtraffic} checks if there is right-hand traffic at the current location.
+         * @see ExpressionFactory.Functions#is_right_hand_traffic(Environment)
+         */
+        static boolean righthandtraffic(Environment e) {
+            return ExpressionFactory.Functions.is_right_hand_traffic(e);
+        }
+
+        /**
+         * {@code unclosed-multipolygon} tests whether the object is an unclosed multipolygon.
+         */
+        static boolean unclosed_multipolygon(Environment e) {
+            return e.osm instanceof Relation && ((Relation) e.osm).isMultipolygon() &&
+                    !e.osm.isIncomplete() && !((Relation) e.osm).hasIncompleteMembers() &&
+                    !MultipolygonCache.getInstance().get(Main.map.mapView, (Relation) e.osm).getOpenEnds().isEmpty();
+        }
+
+        private static final Predicate<OsmPrimitive> IN_DOWNLOADED_AREA = new InDataSourceArea(false);
+
+        /**
+         * {@code in-downloaded-area} tests whether the object is within source area ("downloaded area").
+         * @see InDataSourceArea
+         */
+        static boolean inDownloadedArea(Environment e) {
+            return IN_DOWNLOADED_AREA.evaluate(e.osm);
+        }
+    }
+
     public static class PseudoClassCondition extends Condition {
 
-        public final String id;
+        public final Method method;
         public final boolean not;
 
-        public PseudoClassCondition(String id, boolean not, Context context) {
-            this.id = id;
+        protected PseudoClassCondition(Method method, boolean not) {
+            this.method = method;
             this.not = not;
+        }
+
+        public static PseudoClassCondition createPseudoClassCondition(String id, boolean not, Context context) {
             CheckParameterUtil.ensureThat(!"sameTags".equals(id) || Context.LINK.equals(context), "sameTags only supported in LINK context");
+            if ("open_end".equals(id)) {
+                return new OpenEndPseudoClassCondition(not);
+            }
+            final Method method = getMethod(id);
+            if (method != null) {
+                return new PseudoClassCondition(method, not);
+            }
+            throw new MapCSSException("Invalid pseudo class specified: " + id);
+        }
+
+        protected static Method getMethod(String id) {
+            id = id.replaceAll("-|_", "");
+            for (Method method : PseudoClasses.class.getDeclaredMethods()) {
+                // for backwards compatibility, consider :sameTags == :same-tags == :same_tags (#11150)
+                final String methodName = method.getName().replaceAll("-|_", "");
+                if (methodName.equalsIgnoreCase(id)) {
+                    return method;
+                }
+            }
+            return null;
         }
 
         @Override
         public boolean applies(Environment e) {
-            return not ^ appliesImpl(e);
-        }
-
-        public boolean appliesImpl(Environment e) {
-            switch(id) {
-            case "closed":
-                if (e.osm instanceof Way && ((Way) e.osm).isClosed())
-                    return true;
-                if (e.osm instanceof Relation && ((Relation) e.osm).isMultipolygon())
-                    return true;
-                break;
-            case "modified":
-                return e.osm.isModified() || e.osm.isNewOrUndeleted();
-            case "new":
-                return e.osm.isNew();
-            case "connection":
-                return e.osm instanceof Node && ((Node) e.osm).isConnectionNode();
-            case "tagged":
-                return e.osm.isTagged();
-            case "sameTags":
-                return e.osm.hasSameInterestingTags(Utils.firstNonNull(e.child, e.parent));
-            case "areaStyle":
-                // only for validator
-                return ElemStyles.hasAreaElemStyle(e.osm, false);
-            case "unconnected":
-                return e.osm instanceof Node && OsmPrimitive.getFilteredList(e.osm.getReferrers(), Way.class).isEmpty();
-            case "righthandtraffic":
-                return ExpressionFactory.Functions.is_right_hand_traffic(e);
-            case "unclosed_multipolygon":
-                return e.osm instanceof Relation && ((Relation) e.osm).isMultipolygon() &&
-                        !e.osm.isIncomplete() && !((Relation) e.osm).hasIncompleteMembers() &&
-                        !MultipolygonCache.getInstance().get(Main.map.mapView, (Relation) e.osm).getOpenEnds().isEmpty();
-            case "open_end":
-                // handling at org.openstreetmap.josm.gui.mappaint.mapcss.Selector.ChildOrParentSelector.MultipolygonOpenEndFinder
-                return true;
+            try {
+                return not ^ (Boolean) method.invoke(null, e);
+            } catch (IllegalAccessException | InvocationTargetException ex) {
+                throw new RuntimeException(ex);
             }
-            return false;
         }
 
         @Override
         public String toString() {
-            return ":" + (not ? "!" : "") + id;
+            return (not ? "!" : "") + ":" + method.getName();
+        }
+    }
+
+    public static class OpenEndPseudoClassCondition extends PseudoClassCondition {
+        public OpenEndPseudoClassCondition(boolean not) {
+            super(null, not);
+        }
+
+        @Override
+        public boolean applies(Environment e) {
+            return true;
         }
     }
 
diff --git a/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java b/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java
index b4f09f0..8e72238 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java
@@ -15,6 +15,7 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
+import java.util.TreeSet;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.zip.CRC32;
@@ -30,6 +31,7 @@ import org.openstreetmap.josm.gui.mappaint.Cascade;
 import org.openstreetmap.josm.gui.mappaint.Environment;
 import org.openstreetmap.josm.gui.util.RotationAngle;
 import org.openstreetmap.josm.io.XmlWriter;
+import org.openstreetmap.josm.tools.AlphanumComparator;
 import org.openstreetmap.josm.tools.ColorHelper;
 import org.openstreetmap.josm.tools.Geometry;
 import org.openstreetmap.josm.tools.Predicates;
@@ -100,16 +102,18 @@ public final class ExpressionFactory {
      * List of functions that can be used in MapCSS expressions.
      *
      * First parameter can be of type {@link Environment} (if needed). This is
-     * automatically filled in by JOSM and the user only sees the remaining
-     * arguments.
+     * automatically filled in by JOSM and the user only sees the remaining arguments.
      * When one of the user supplied arguments cannot be converted the
      * expected type or is null, the function is not called and it returns null
-     * immediately. Add the annotation {@link NullableArguments} to allow
-     * null arguments.
+     * immediately. Add the annotation {@link NullableArguments} to allow null arguments.
      * Every method must be static.
      */
     @SuppressWarnings("UnusedDeclaration")
-    public static class Functions {
+    public static final class Functions {
+
+        private Functions() {
+            // Hide implicit public constructor for utility classes
+        }
 
         /**
          * Identity function for compatibility with MapCSS specification.
@@ -176,7 +180,7 @@ public final class ExpressionFactory {
             }
             float res = args[0];
             for (int i = 1; i < args.length; ++i) {
-                if (args[i] == 0.0F) {
+                if (args[i] == 0) {
                     return null;
                 }
                 res /= args[i];
@@ -208,7 +212,6 @@ public final class ExpressionFactory {
          * The name originates from <a href="http://wiki.openstreetmap.org/wiki/MapCSS/0.2/eval">MapCSS standard</a>.
          * @param args arguments
          * @return the first non-null object
-         * @see #coalesce(Object...)
          * @see Utils#firstNonNull(Object[])
          */
         @NullableArguments
@@ -260,7 +263,8 @@ public final class ExpressionFactory {
         }
 
         /**
-         * Creates a color value with the specified amounts of {@code r}ed, {@code g}reen, {@code b}lue, {@code alpha} (arguments from 0.0 to 1.0)
+         * Creates a color value with the specified amounts of {@code r}ed, {@code g}reen, {@code b}lue, {@code alpha}
+         * (arguments from 0.0 to 1.0)
          * @param r the red component
          * @param g the green component
          * @param b the blue component
@@ -372,6 +376,17 @@ public final class ExpressionFactory {
         }
 
         /**
+         * Joins a list of {@code values} into a single string with fields separated by {@code separator}.
+         * @param separator the separator
+         * @param values collection of objects
+         * @return assembled string
+         * @see Utils#join
+         */
+        public static String join_list(final String separator, final List<String> values) {
+            return Utils.join(separator, values);
+        }
+
+        /**
          * Returns the value of the property {@code key}, e.g., {@code prop("width")}.
          * @param env the environment
          * @param key the property key
@@ -444,6 +459,32 @@ public final class ExpressionFactory {
         }
 
         /**
+         * Gets a list of all non-null values of the key {@code key} from the object's parent(s).
+         *
+         * The values are sorted according to {@link AlphanumComparator}.
+         * @param env the environment
+         * @param key the OSM key
+         * @return a list of non-null values of the key {@code key} from the object's parent(s)
+         */
+        public static List<String> parent_tags(final Environment env, String key) {
+            if (env.parent == null) {
+                if (env.osm != null) {
+                    final Collection<String> tags = new TreeSet<>(AlphanumComparator.getInstance());
+                    // we don't have a matched parent, so just search all referrers
+                    for (OsmPrimitive parent : env.osm.getReferrers()) {
+                        String value = parent.get(key);
+                        if (value != null) {
+                            tags.add(value);
+                        }
+                    }
+                    return new ArrayList<>(tags);
+                }
+                return Collections.emptyList();
+            }
+            return Collections.singletonList(env.parent.get(key));
+        }
+
+        /**
          * Gets the value of the key {@code key} from the object's child.
          * @param env the environment
          * @param key the OSM key
@@ -523,40 +564,40 @@ public final class ExpressionFactory {
         }
 
         /**
-         * Function associated to the logical ">=" operator.
+         * Function associated to the logical ">=" operator.
          * @param a first value
          * @param b second value
-         * @return {@code true} if {@code a >= b}
+         * @return {@code true} if {@code a >= b}
          */
         public static boolean greater_equal(float a, float b) {
             return a >= b;
         }
 
         /**
-         * Function associated to the logical "<=" operator.
+         * Function associated to the logical "<=" operator.
          * @param a first value
          * @param b second value
-         * @return {@code true} if {@code a <= b}
+         * @return {@code true} if {@code a <= b}
          */
         public static boolean less_equal(float a, float b) {
             return a <= b;
         }
 
         /**
-         * Function associated to the logical ">" operator.
+         * Function associated to the logical ">" operator.
          * @param a first value
          * @param b second value
-         * @return {@code true} if {@code a > b}
+         * @return {@code true} if {@code a > b}
          */
         public static boolean greater(float a, float b) {
             return a > b;
         }
 
         /**
-         * Function associated to the logical "<" operator.
+         * Function associated to the logical "<" operator.
          * @param a first value
          * @param b second value
-         * @return {@code true} if {@code a < b}
+         * @return {@code true} if {@code a < b}
          */
         public static boolean less(float a, float b) {
             return a < b;
@@ -578,8 +619,8 @@ public final class ExpressionFactory {
          * {@code e}, {@code east}, {@code se}, {@code southeast}, {@code s}, {@code south},
          * {@code sw}, {@code southwest}, {@code w}, {@code west}, {@code nw}, {@code northwest}.
          * @param cardinal the angle in cardinal directions.
-         * @see RotationAngle#parseCardinalRotation(String)
          * @return the angle in radians
+         * @see RotationAngle#parseCardinalRotation(String)
          */
         public static Double cardinal_to_radians(String cardinal) {
             try {
@@ -610,7 +651,7 @@ public final class ExpressionFactory {
          * @see Object#equals(Object)
          */
         public static boolean not_equal(Object a, Object b) {
-            return !equal(a,b);
+            return !equal(a, b);
         }
         /**
          * Determines whether the JOSM search with {@code searchStr} applies to the object.
@@ -739,7 +780,7 @@ public final class ExpressionFactory {
         public static String tr(String... args) {
             final String text = args[0];
             System.arraycopy(args, 1, args, 0, args.length - 1);
-            return org.openstreetmap.josm.tools.I18n.tr(text, (Object[])args);
+            return org.openstreetmap.josm.tools.I18n.tr(text, (Object[]) args);
         }
 
         /**
@@ -968,10 +1009,10 @@ public final class ExpressionFactory {
             for (Expression arg : args) {
                 Boolean b = Cascade.convertTo(arg.evaluate(env), boolean.class);
                 if (b == null || !b) {
-                    return false;
+                    return Boolean.FALSE;
                 }
             }
-            return true;
+            return Boolean.TRUE;
         }
     }
 
@@ -995,10 +1036,10 @@ public final class ExpressionFactory {
             for (Expression arg : args) {
                 Boolean b = Cascade.convertTo(arg.evaluate(env), boolean.class);
                 if (b != null && b) {
-                    return true;
+                    return Boolean.TRUE;
                 }
             }
-            return false;
+            return Boolean.FALSE;
         }
     }
 
@@ -1139,11 +1180,10 @@ public final class ExpressionFactory {
         @Override
         public String toString() {
             StringBuilder b = new StringBuilder("ParameterFunction~");
-            b.append(m.getName()).append("(");
+            b.append(m.getName()).append('(');
             for (int i = 0; i < args.size(); ++i) {
-                if (i > 0) b.append(",");
-                b.append(expectedParameterTypes[i]);
-                b.append(" ").append(args.get(i));
+                if (i > 0) b.append(',');
+                b.append(expectedParameterTypes[i]).append(' ').append(args.get(i));
             }
             b.append(')');
             return b.toString();
@@ -1204,11 +1244,10 @@ public final class ExpressionFactory {
         @Override
         public String toString() {
             StringBuilder b = new StringBuilder("ArrayFunction~");
-            b.append(m.getName()).append("(");
+            b.append(m.getName()).append('(');
             for (int i = 0; i < args.size(); ++i) {
-                if (i > 0) b.append(",");
-                b.append(arrayComponentType);
-                b.append(" ").append(args.get(i));
+                if (i > 0) b.append(',');
+                b.append(arrayComponentType).append(' ').append(args.get(i));
             }
             b.append(')');
             return b.toString();
diff --git a/src/org/openstreetmap/josm/gui/mappaint/mapcss/Instruction.java b/src/org/openstreetmap/josm/gui/mappaint/mapcss/Instruction.java
index 6c75813..26cf049 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/mapcss/Instruction.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/mapcss/Instruction.java
@@ -14,7 +14,7 @@ public interface Instruction extends StyleKeys {
 
     void execute(Environment env);
 
-    public static class RelativeFloat {
+    class RelativeFloat {
         public final float val;
 
         public RelativeFloat(float val) {
@@ -27,7 +27,7 @@ public interface Instruction extends StyleKeys {
         }
     }
 
-    public static class AssignmentInstruction implements Instruction {
+    class AssignmentInstruction implements Instruction {
         public final String key;
         public final Object val;
         public final boolean isSetInstruction;
@@ -39,7 +39,7 @@ public interface Instruction extends StyleKeys {
                 Object litValue = ((LiteralExpression) val).evaluate(null);
                 if (litValue instanceof Keyword && "none".equals(((Keyword) litValue).val)) {
                     this.val = null;
-                } else if (key.equals(TEXT)) {
+                } else if (TEXT.equals(key)) {
                     /* Special case for declaration 'text: ...'
                      *
                      * - Treat the value 'auto' as keyword.
@@ -76,7 +76,7 @@ public interface Instruction extends StyleKeys {
             } else {
                 value = val;
             }
-            if (key.equals(ICON_IMAGE) || key.equals(FILL_IMAGE) || key.equals(REPEAT_IMAGE)) {
+            if (ICON_IMAGE.equals(key) || FILL_IMAGE.equals(key) || REPEAT_IMAGE.equals(key)) {
                 if (value instanceof String) {
                     value = new IconReference((String) value, env.source);
                 }
diff --git a/src/org/openstreetmap/josm/gui/mappaint/mapcss/LiteralExpression.java b/src/org/openstreetmap/josm/gui/mappaint/mapcss/LiteralExpression.java
index a074c5f..27326f3 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/mapcss/LiteralExpression.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/mapcss/LiteralExpression.java
@@ -27,6 +27,6 @@ public class LiteralExpression implements Expression {
         if (literal instanceof float[]) {
             return Arrays.toString((float[]) literal);
         }
-        return "<" + literal.toString() + ">";
+        return "<" + literal + ">";
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSParser.jj b/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSParser.jj
index 033ea84..6c76e45 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSParser.jj
+++ b/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSParser.jj
@@ -13,6 +13,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
+import java.util.Locale;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.mappaint.Keyword;
@@ -34,6 +35,7 @@ import org.openstreetmap.josm.gui.mappaint.mapcss.Selector.LinkSelector;
 import org.openstreetmap.josm.gui.mappaint.mapcss.Subpart;
 import org.openstreetmap.josm.tools.ColorHelper;
 import org.openstreetmap.josm.tools.Pair;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
  * MapCSS parser.
@@ -84,7 +86,7 @@ public class MapCSSParser {
         SimpleCharStream scs;
         try {
             scs = new SimpleCharStream(in, encoding, 1, 1);
-        } catch(java.io.UnsupportedEncodingException e) {
+        } catch (java.io.UnsupportedEncodingException e) {
             throw new RuntimeException(e);
         }
         return new MapCSSParserTokenManager(scs, initState.idx);
@@ -153,7 +155,7 @@ TOKEN:
 |   < UINT: ["1"-"9"] ( ["0"-"9"] )* >
 |   < STRING: "\"" ( [" ","!","#"-"[","]"-"~","\u0080"-"\uFFFF"] | "\\\"" | "\\\\" )*  "\"" >
 |   < #PREDEFINED: "\\" ["d","D","s","S","w","W","b","B","A","G","Z","z"] >
-|   < #REGEX_CHAR_WITHOUT_STAR: [" "-")","+"-".","0"-"[","]"-"~","\u0080"-"\uFFFF"] | "\\/" | "\\\\" | "\\[" | "\\]" | "\\+" | "\\." | "\\'" | "\\\"" |  "\\(" | "\\)" |<PREDEFINED> >
+|   < #REGEX_CHAR_WITHOUT_STAR: [" "-")","+"-".","0"-"[","]"-"~","\u0080"-"\uFFFF"] | "\\/" | "\\\\" | "\\[" | "\\]" | "\\+" | "\\." | "\\'" | "\\\"" |  "\\(" | "\\)" | "\\{" | "\\}" | "\\?" | "\\*" | "\\^" | "\\$" | "\\|" |<PREDEFINED> >
 |   < REGEX: "/" <REGEX_CHAR_WITHOUT_STAR> ( <REGEX_CHAR_WITHOUT_STAR> | "*" )*  "/" >
 |   < LBRACE: "{" >
 |   < RBRACE: "}" >
@@ -387,7 +389,7 @@ boolean pp_media_query():
 {
     ( <PP_NOT> { invert = true; } pp_w() )?
     (
-            t=<IDENT> { mediatype = t.image.toLowerCase(); } pp_w()
+            t=<IDENT> { mediatype = t.image.toLowerCase(Locale.ENGLISH); } pp_w()
             ( <PP_AND> pp_w() e=pp_media_expression() { pass = pass && e; } pp_w() )*
         |
             e=pp_media_expression() { pass = pass && e; } pp_w()
@@ -588,6 +590,7 @@ void sheet(MapCSSStyleSource sheet):
         try {
             rule() w()
         } catch (MapCSSException mex) {
+            Main.error(mex);
             error_skipto(RBRACE, mex);
             w();
         } catch (ParseException ex) {
@@ -1143,8 +1146,9 @@ void error_skipto(int kind, MapCSSException me) {
     ParseException pe = generateParseException();
 
     if (me != null) {
-        me.setLine(pe.currentToken.next.beginLine);
-        me.setColumn(pe.currentToken.next.beginColumn);
+        final Token token = Utils.firstNonNull(pe.currentToken.next, pe.currentToken);
+        me.setLine(token.beginLine);
+        me.setColumn(token.beginColumn);
         e = me;
     } else {
         e = new ParseException(pe.getMessage()); // prevent memory leak
diff --git a/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java b/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java
index f66ea6b..c6af7fe 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java
@@ -18,6 +18,7 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
@@ -28,6 +29,8 @@ import java.util.zip.ZipFile;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Version;
+import org.openstreetmap.josm.data.osm.AbstractPrimitive;
+import org.openstreetmap.josm.data.osm.AbstractPrimitive.KeyValueVisitor;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Relation;
@@ -67,7 +70,8 @@ public class MapCSSStyleSource extends StyleSource {
      * The accepted MIME types sent in the HTTP Accept header.
      * @since 6867
      */
-    public static final String MAPCSS_STYLE_MIME_TYPES = "text/x-mapcss, text/mapcss, text/css; q=0.9, text/plain; q=0.8, application/zip, application/octet-stream; q=0.5";
+    public static final String MAPCSS_STYLE_MIME_TYPES =
+            "text/x-mapcss, text/mapcss, text/css; q=0.9, text/plain; q=0.8, application/zip, application/octet-stream; q=0.5";
 
     // all rules
     public final List<MapCSSRule> rules = new ArrayList<>();
@@ -101,7 +105,7 @@ public class MapCSSStyleSource extends StyleSource {
         for (Field f : declaredFields) {
             try {
                 SUPPORTED_KEYS.add((String) f.get(null));
-                if (!f.getName().toLowerCase().replace("_", "-").equals(f.get(null))) {
+                if (!f.getName().toLowerCase(Locale.ENGLISH).replace("_", "-").equals(f.get(null))) {
                     throw new RuntimeException(f.getName());
                 }
             } catch (IllegalArgumentException | IllegalAccessException ex) {
@@ -142,13 +146,12 @@ public class MapCSSStyleSource extends StyleSource {
          *
          * @author Michael Zangl
          */
-        private final class RuleCandidatesIterator implements Iterator<MapCSSRule> {
+        private final class RuleCandidatesIterator implements Iterator<MapCSSRule>, KeyValueVisitor {
             private final BitSet ruleCandidates;
             private int next;
 
             private RuleCandidatesIterator(BitSet ruleCandidates) {
                 this.ruleCandidates = ruleCandidates;
-                next = ruleCandidates.nextSetBit(0);
             }
 
             @Override
@@ -167,6 +170,22 @@ public class MapCSSStyleSource extends StyleSource {
             public void remove() {
                 throw new UnsupportedOperationException();
             }
+
+            @Override
+            public void visitKeyValue(AbstractPrimitive p, String key, String value) {
+                MapCSSKeyRules v = index.get(key);
+                if (v != null) {
+                    BitSet rs = v.get(value);
+                    ruleCandidates.or(rs);
+                }
+            }
+
+            /**
+             * Call this before using the iterator.
+             */
+            public void prepare() {
+                next = ruleCandidates.nextSetBit(0);
+            }
         }
 
         /**
@@ -281,7 +300,7 @@ public class MapCSSStyleSource extends StyleSource {
                     }
                 } else if (c instanceof KeyValueCondition) {
                     KeyValueCondition keyValueCondition = (KeyValueCondition) c;
-                    if (!Op.NEGATED_OPS.contains(keyValueCondition)) {
+                    if (!Op.NEGATED_OPS.contains(keyValueCondition.op)) {
                         key = keyValueCondition.k;
                     }
                 }
@@ -315,14 +334,10 @@ public class MapCSSStyleSource extends StyleSource {
             final BitSet ruleCandidates = new BitSet(rules.size());
             ruleCandidates.or(remaining);
 
-            for (Map.Entry<String, String> e : osm.getKeys().entrySet()) {
-                MapCSSKeyRules v = index.get(e.getKey());
-                if (v != null) {
-                    BitSet rs = v.get(e.getValue());
-                    ruleCandidates.or(rs);
-                }
-            }
-            return new RuleCandidatesIterator(ruleCandidates);
+            final RuleCandidatesIterator candidatesIterator = new RuleCandidatesIterator(ruleCandidates);
+            osm.visitKeys(candidatesIterator);
+            candidatesIterator.prepare();
+            return candidatesIterator;
         }
 
         /**
@@ -519,7 +534,8 @@ public class MapCSSStyleSource extends StyleSource {
         if (backgroundColorOverride == null) {
             backgroundColorOverride = c.get("background-color", null, Color.class);
             if (backgroundColorOverride != null) {
-                Main.warn(tr("Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use ''{2}'' instead.", "canvas{background-color}", url, "fill-color"));
+                Main.warn(tr("Detected deprecated ''{0}'' in ''{1}'' which will be removed shortly. Use ''{2}'' instead.",
+                        "canvas{background-color}", url, "fill-color"));
             }
         }
     }
@@ -535,9 +551,9 @@ public class MapCSSStyleSource extends StyleSource {
         Environment env = new Environment(n, mc, "default", this);
 
         for (MapCSSRule r : rules) {
-            if ((r.selector instanceof GeneralSelector)) {
+            if (r.selector instanceof GeneralSelector) {
                 GeneralSelector gs = (GeneralSelector) r.selector;
-                if (gs.getBase().equals("setting")) {
+                if ("setting".equals(gs.getBase())) {
                     if (!gs.matchesConditions(env)) {
                         continue;
                     }
@@ -577,7 +593,7 @@ public class MapCSSStyleSource extends StyleSource {
         Environment env = new Environment(n, mc, "default", this);
 
         for (MapCSSRule r : rules) {
-            if ((r.selector instanceof GeneralSelector)) {
+            if (r.selector instanceof GeneralSelector) {
                 GeneralSelector gs = (GeneralSelector) r.selector;
                 if (gs.getBase().equals(type)) {
                     if (!gs.matchesConditions(env)) {
diff --git a/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java b/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java
index 75bd995..2f7f656 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java
@@ -68,7 +68,7 @@ public interface Selector {
      */
     Selector optimizedBaseCheck();
 
-    public static enum ChildOrParentSelectorType {
+    enum ChildOrParentSelectorType {
         CHILD, PARENT, ELEMENT_OF, CROSSING, SIBLING
     }
 
@@ -86,7 +86,7 @@ public interface Selector {
      * </pre>
      *
      */
-    public static class ChildOrParentSelector implements Selector {
+    class ChildOrParentSelector implements Selector {
         public final Selector left;
         public final LinkSelector link;
         public final Selector right;
@@ -127,7 +127,7 @@ public interface Selector {
              * Constructor
              * @param e the environment against which we match
              */
-            public MatchingReferrerFinder(Environment e){
+            public MatchingReferrerFinder(Environment e) {
                 this.e = e;
             }
 
@@ -147,7 +147,7 @@ public interface Selector {
 
                 if (!left.matches(e.withPrimitive(w)))
                     return;
-                for (int i=0; i<w.getNodesCount(); i++) {
+                for (int i = 0; i < w.getNodesCount(); i++) {
                     Node n = w.getNode(i);
                     if (n.equals(e.osm)) {
                         if (link.matches(e.withParentAndIndexAndLinkContext(w, i, w.getNodesCount()))) {
@@ -170,7 +170,7 @@ public interface Selector {
 
                 if (!left.matches(e.withPrimitive(r)))
                     return;
-                for (int i=0; i < r.getMembersCount(); i++) {
+                for (int i = 0; i < r.getMembersCount(); i++) {
                     RelationMember m = r.getMember(i);
                     if (m.getMember().equals(e.osm)) {
                         if (link.matches(e.withParentAndIndexAndLinkContext(r, i, r.getMembersCount()))) {
@@ -255,8 +255,9 @@ public interface Selector {
 
             @Override
             public void visit(Way w) {
-                if (e.child == null && left.matches(new Environment().withPrimitive(w))) {
-                    if (e.osm instanceof Way && Geometry.PolygonIntersection.CROSSING.equals(Geometry.polygonIntersection(w.getNodes(), ((Way) e.osm).getNodes()))) {
+                if (e.child == null && left.matches(new Environment(w))) {
+                    if (e.osm instanceof Way && Geometry.PolygonIntersection.CROSSING.equals(
+                            Geometry.polygonIntersection(w.getNodes(), ((Way) e.osm).getNodes()))) {
                         e.child = w;
                     }
                 }
@@ -264,16 +265,17 @@ public interface Selector {
         }
 
         private class ContainsFinder extends AbstractFinder {
-            private ContainsFinder(Environment e) {
+            protected ContainsFinder(Environment e) {
                 super(e);
                 CheckParameterUtil.ensureThat(!(e.osm instanceof Node), "Nodes not supported");
             }
 
             @Override
             public void visit(Node n) {
-                if (e.child == null && left.matches(new Environment().withPrimitive(n))) {
+                if (e.child == null && left.matches(new Environment(n))) {
                     if (e.osm instanceof Way && Geometry.nodeInsidePolygon(n, ((Way) e.osm).getNodes())
-                            || e.osm instanceof Relation && ((Relation) e.osm).isMultipolygon() && Geometry.isNodeInsideMultiPolygon(n, (Relation) e.osm, null)) {
+                            || e.osm instanceof Relation && (
+                                    (Relation) e.osm).isMultipolygon() && Geometry.isNodeInsideMultiPolygon(n, (Relation) e.osm, null)) {
                         e.child = n;
                     }
                 }
@@ -281,9 +283,12 @@ public interface Selector {
 
             @Override
             public void visit(Way w) {
-                if (e.child == null && left.matches(new Environment().withPrimitive(w))) {
-                    if (e.osm instanceof Way && Geometry.PolygonIntersection.FIRST_INSIDE_SECOND.equals(Geometry.polygonIntersection(w.getNodes(), ((Way) e.osm).getNodes()))
-                            || e.osm instanceof Relation && ((Relation) e.osm).isMultipolygon() && Geometry.isPolygonInsideMultiPolygon(w.getNodes(), (Relation) e.osm, null)) {
+                if (e.child == null && left.matches(new Environment(w))) {
+                    if (e.osm instanceof Way && Geometry.PolygonIntersection.FIRST_INSIDE_SECOND.equals(
+                            Geometry.polygonIntersection(w.getNodes(), ((Way) e.osm).getNodes()))
+                            || e.osm instanceof Relation && (
+                                    (Relation) e.osm).isMultipolygon()
+                                    && Geometry.isPolygonInsideMultiPolygon(w.getNodes(), (Relation) e.osm, null)) {
                         e.child = w;
                     }
                 }
@@ -316,7 +321,7 @@ public interface Selector {
                             e.osm.getReferrers(), Predicates.hasTag("type", "multipolygon")), Relation.class);
                     final Relation multipolygon = multipolygons.iterator().next();
                     if (multipolygon == null) throw new NoSuchElementException();
-                    containsFinder = new ContainsFinder(new Environment().withPrimitive(multipolygon)) {
+                    containsFinder = new ContainsFinder(new Environment(multipolygon)) {
                         @Override
                         public boolean isPrimitiveUsable(OsmPrimitive p) {
                             return super.isPrimitiveUsable(p) && !multipolygon.getMemberPrimitives().contains(p);
@@ -368,8 +373,7 @@ public interface Selector {
                 }
             } else if (ChildOrParentSelectorType.CHILD.equals(type)
                     && link.conds != null && !link.conds.isEmpty()
-                    && link.conds.get(0) instanceof Condition.PseudoClassCondition
-                    && "open_end".equals(((Condition.PseudoClassCondition) link.conds.get(0)).id)) {
+                    && link.conds.get(0) instanceof Condition.OpenEndPseudoClassCondition) {
                 if (e.osm instanceof Node) {
                     e.osm.visitReferrers(new MultipolygonOpenEndFinder(e));
                     return e.parent != null;
@@ -382,7 +386,7 @@ public interface Selector {
             } else if (ChildOrParentSelectorType.PARENT.equals(type)) {
                 if (e.osm instanceof Way) {
                     List<Node> wayNodes = ((Way) e.osm).getNodes();
-                    for (int i=0; i<wayNodes.size(); i++) {
+                    for (int i = 0; i < wayNodes.size(); i++) {
                         Node n = wayNodes.get(i);
                         if (left.matches(e.withPrimitive(n))) {
                             if (link.matches(e.withChildAndIndexAndLinkContext(n, i, wayNodes.size()))) {
@@ -393,10 +397,9 @@ public interface Selector {
                             }
                         }
                     }
-                }
-                else if (e.osm instanceof Relation) {
+                } else if (e.osm instanceof Relation) {
                     List<RelationMember> members = ((Relation) e.osm).getMembers();
-                    for (int i=0; i<members.size(); i++) {
+                    for (int i = 0; i < members.size(); i++) {
                         OsmPrimitive member = members.get(i).getMember();
                         if (left.matches(e.withPrimitive(member))) {
                             if (link.matches(e.withChildAndIndexAndLinkContext(member, i, members.size()))) {
@@ -438,7 +441,7 @@ public interface Selector {
      * {@link org.openstreetmap.josm.gui.mappaint.mapcss.Selector.LinkSelector}.
      * @since 5841
      */
-    public abstract static class AbstractSelector implements Selector {
+    abstract class AbstractSelector implements Selector {
 
         protected final List<Condition> conds;
 
@@ -481,7 +484,7 @@ public interface Selector {
         }
     }
 
-    public static class LinkSelector extends AbstractSelector {
+    class LinkSelector extends AbstractSelector {
 
         public LinkSelector(List<Condition> conditions) {
             super(conditions);
@@ -514,7 +517,7 @@ public interface Selector {
         }
     }
 
-    public static class GeneralSelector extends OptimizedGeneralSelector {
+    class GeneralSelector extends OptimizedGeneralSelector {
 
         public GeneralSelector(String base, Pair<Integer, Integer> zoom, List<Condition> conds, Subpart subpart) {
             super(base, zoom, conds, subpart);
@@ -535,7 +538,7 @@ public interface Selector {
         }
     }
 
-    public static class OptimizedGeneralSelector extends AbstractSelector {
+    class OptimizedGeneralSelector extends AbstractSelector {
         public final String base;
         public final Range range;
         public final Subpart subpart;
@@ -651,7 +654,8 @@ public interface Selector {
 
         @Override
         public String toString() {
-            return base + (Range.ZERO_TO_INFINITY.equals(range) ? "" : range) + Utils.join("", conds) + (subpart != null ? ("::" + subpart) : "");
+            return base + (Range.ZERO_TO_INFINITY.equals(range) ? "" : range) + Utils.join("", conds)
+                    + (subpart != null && subpart != Subpart.DEFAULT_SUBPART ? "::" + subpart : "");
         }
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/mappaint/mapcss/Subpart.java b/src/org/openstreetmap/josm/gui/mappaint/mapcss/Subpart.java
index 9e2ac00..f40af9b 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/mapcss/Subpart.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/mapcss/Subpart.java
@@ -10,23 +10,29 @@ import org.openstreetmap.josm.gui.mappaint.Environment;
 public interface Subpart {
     String getId(Environment env);
 
-    public static Subpart DEFAULT_SUBPART = new StringSubpart("default");
+    Subpart DEFAULT_SUBPART = new StringSubpart("default");
 
     /**
      * Simple static subpart identifier.
      *
      * E.g. ::layer_1
      */
-    public static class StringSubpart implements Subpart {
+    class StringSubpart implements Subpart {
         private final String id;
 
         public StringSubpart(String id) {
             this.id = id;
         }
+
         @Override
         public String getId(Environment env) {
             return id;
         }
+
+        @Override
+        public String toString() {
+            return id;
+        }
     }
 
     /**
@@ -34,15 +40,21 @@ public interface Subpart {
      *
      * E.g. ::(concat("layer_", prop("i", "default")))
      */
-    public static class ExpressionSubpart implements Subpart {
+    class ExpressionSubpart implements Subpart {
         private final Expression id;
 
         public ExpressionSubpart(Expression id) {
             this.id = id;
         }
+
         @Override
         public String getId(Environment env) {
             return Cascade.convertTo(id.evaluate(env), String.class);
         }
+
+        @Override
+        public String toString() {
+            return String.valueOf(id);
+        }
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/mappaint/mapcss/package-info.java b/src/org/openstreetmap/josm/gui/mappaint/mapcss/package-info.java
new file mode 100644
index 0000000..19d9db8
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/mappaint/mapcss/package-info.java
@@ -0,0 +1,8 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Drawing system based on <a href="https://wiki.openstreetmap.org/wiki/MapCSS/0.2">MapCSS</a> map styles.
+ * This is the default system, and the only one maintained.
+ * For reference, see <a href="https://josm.openstreetmap.de/wiki/Help/Styles/MapCSSImplementation">JOSM wiki</a>
+ */
+package org.openstreetmap.josm.gui.mappaint.mapcss;
diff --git a/src/org/openstreetmap/josm/gui/mappaint/package-info.java b/src/org/openstreetmap/josm/gui/mappaint/package-info.java
new file mode 100644
index 0000000..4301eab
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/mappaint/package-info.java
@@ -0,0 +1,11 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Drawing system allowing to display and render OSM map data in a user-friendly and customizable way, through map styles.<br>
+ * Two implementations are provided:
+ * <ul>
+ * <li>XML: this was the system used by default JOSM map style for a long time. Kept for compatibility but not maintained anymore</li>
+ * <li>MapCSS: new default system, more powerful than XML, and easier to use to write map styles. Only system maintained</li>
+ * </ul>
+ */
+package org.openstreetmap.josm.gui.mappaint;
diff --git a/src/org/openstreetmap/josm/gui/mappaint/xml/AreaPrototype.java b/src/org/openstreetmap/josm/gui/mappaint/xml/AreaPrototype.java
index 2044b48..7728a21 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/xml/AreaPrototype.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/xml/AreaPrototype.java
@@ -9,7 +9,7 @@ public class AreaPrototype extends Prototype {
     public Color color;
     public boolean closed; // if true, it does not apply to unclosed ways
 
-    public AreaPrototype (AreaPrototype a, Range range) {
+    public AreaPrototype(AreaPrototype a, Range range) {
         super(range);
         this.color = a.color;
         this.closed = a.closed;
@@ -17,7 +17,9 @@ public class AreaPrototype extends Prototype {
         this.conditions = a.conditions;
     }
 
-    public AreaPrototype() { init(); }
+    public AreaPrototype() {
+        init();
+    }
 
     public final void init() {
         priority = 0;
diff --git a/src/org/openstreetmap/josm/gui/mappaint/xml/IconPrototype.java b/src/org/openstreetmap/josm/gui/mappaint/xml/IconPrototype.java
index 0da78b7..34ff2b8 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/xml/IconPrototype.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/xml/IconPrototype.java
@@ -9,7 +9,7 @@ public class IconPrototype extends Prototype {
     public IconReference icon;
     public Boolean annotate;
 
-    public IconPrototype (IconPrototype i, Range range) {
+    public IconPrototype(IconPrototype i, Range range) {
         super(range);
         this.icon = i.icon;
         this.annotate = i.annotate;
@@ -17,7 +17,12 @@ public class IconPrototype extends Prototype {
         this.conditions = i.conditions;
     }
 
-    public IconPrototype() { init(); }
+    /**
+     * Constructs a new {@code IconPrototype}.
+     */
+    public IconPrototype() {
+        init();
+    }
 
     public final void init() {
         priority = 0;
diff --git a/src/org/openstreetmap/josm/gui/mappaint/xml/LinePrototype.java b/src/org/openstreetmap/josm/gui/mappaint/xml/LinePrototype.java
index 938ff36..3d752d5 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/xml/LinePrototype.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/xml/LinePrototype.java
@@ -29,10 +29,14 @@ public class LinePrototype extends Prototype {
         this.conditions = s.conditions;
     }
 
-    public LinePrototype() { init(); }
+    /**
+     * Constructs a new {@code LinePrototype}.
+     */
+    public LinePrototype() {
+        init();
+    }
 
-    public void init()
-    {
+    public void init() {
         priority = 0;
         range = Range.ZERO_TO_INFINITY;
         width = -1;
diff --git a/src/org/openstreetmap/josm/gui/mappaint/xml/LinemodPrototype.java b/src/org/openstreetmap/josm/gui/mappaint/xml/LinemodPrototype.java
index aa01048..f836216 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/xml/LinemodPrototype.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/xml/LinemodPrototype.java
@@ -5,10 +5,10 @@ import org.openstreetmap.josm.gui.mappaint.Range;
 
 public class LinemodPrototype extends LinePrototype implements Comparable<LinemodPrototype> {
 
-    public boolean over;
-
     public enum WidthMode { ABSOLUTE, PERCENT, OFFSET }
+
     public WidthMode widthMode;
+    public boolean over;
 
     public LinemodPrototype(LinemodPrototype s, Range range) {
         super(s, range);
@@ -16,7 +16,12 @@ public class LinemodPrototype extends LinePrototype implements Comparable<Linemo
         this.widthMode = s.widthMode;
     }
 
-    public LinemodPrototype() { init(); }
+    /**
+     * Constructs a new {@code LinemodPrototype}.
+     */
+    public LinemodPrototype() {
+        init();
+    }
 
     @Override
     public final void init() {
@@ -28,13 +33,12 @@ public class LinemodPrototype extends LinePrototype implements Comparable<Linemo
     /** get width for overlays */
     public float getWidth(float ref) {
         float res;
-        if(widthMode == WidthMode.ABSOLUTE) {
+        if (widthMode == WidthMode.ABSOLUTE) {
             res = width;
-        } else if(widthMode == WidthMode.OFFSET) {
+        } else if (widthMode == WidthMode.OFFSET) {
             res = ref + width;
-        } else
-        {
-            if(width < 0) {
+        } else {
+            if (width < 0) {
                 res = 0;
             } else {
                 res = ref*width/100;
@@ -50,9 +54,9 @@ public class LinemodPrototype extends LinePrototype implements Comparable<Linemo
 
     @Override
     public int compareTo(LinemodPrototype s) {
-        if(s.priority != priority)
+        if (s.priority != priority)
             return s.priority > priority ? 1 : -1;
-            if(!over && s.over)
+            if (!over && s.over)
                 return -1;
             // we have no idea how to order other objects :-)
             return 0;
diff --git a/src/org/openstreetmap/josm/gui/mappaint/xml/Prototype.java b/src/org/openstreetmap/josm/gui/mappaint/xml/Prototype.java
index cb67e93..7495562 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/xml/Prototype.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/xml/Prototype.java
@@ -19,16 +19,20 @@ public abstract class Prototype {
         this.range = range;
     }
 
+    /**
+     * Constructs a new {@code Prototype}.
+     */
     public Prototype() {
+        // Allows subclassing
     }
 
     public String getCode() {
-        if(code == null) {
+        if (code == null) {
             if (conditions == null || conditions.isEmpty()) {
                 code = "";
             } else {
                 final StringBuilder sb = new StringBuilder();
-                for(XmlCondition r: conditions) {
+                for (XmlCondition r: conditions) {
                     r.appendCode(sb);
                 }
                 code = sb.toString();
@@ -38,9 +42,9 @@ public abstract class Prototype {
     }
 
     public boolean check(OsmPrimitive primitive) {
-        if(conditions == null)
+        if (conditions == null)
             return true;
-        for(XmlCondition r : conditions) {
+        for (XmlCondition r : conditions) {
             String k = primitive.get(r.key);
 
             if (k == null || (r.value != null && !k.equals(r.value)))
diff --git a/src/org/openstreetmap/josm/gui/mappaint/xml/XmlCondition.java b/src/org/openstreetmap/josm/gui/mappaint/xml/XmlCondition.java
index b683fce..38d5a1e 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/xml/XmlCondition.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/xml/XmlCondition.java
@@ -20,9 +20,9 @@ public class XmlCondition {
     }
 
     public String getKey() {
-        if(value != null)
+        if (value != null)
             return "n" + key + "=" + value;
-        else if(boolValue != null)
+        else if (boolValue != null)
             return "b" + key  + "=" + OsmUtils.getNamedOsmBoolean(boolValue);
         else
             return "x" + key;
@@ -34,7 +34,7 @@ public class XmlCondition {
 
     @Override
     public String toString() {
-      return "Rule["+key+","+(boolValue != null ? "b="+boolValue:"v="+value)+"]";
+      return "Rule["+key+","+(boolValue != null ? "b="+boolValue : "v="+value)+"]";
     }
 
     public void appendCode(StringBuilder sb) {
@@ -45,6 +45,6 @@ public class XmlCondition {
         else
             sb.append(",v=").append(value);
 
-        sb.append("]");
+        sb.append(']');
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/mappaint/xml/XmlStyleSource.java b/src/org/openstreetmap/josm/gui/mappaint/xml/XmlStyleSource.java
index 7136b12..aaa7086 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/xml/XmlStyleSource.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/xml/XmlStyleSource.java
@@ -39,7 +39,8 @@ public class XmlStyleSource extends StyleSource implements StyleKeys {
      * The accepted MIME types sent in the HTTP Accept header.
      * @since 6867
      */
-    public static final String XML_STYLE_MIME_TYPES = "application/xml, text/xml, text/plain; q=0.8, application/zip, application/octet-stream; q=0.5";
+    public static final String XML_STYLE_MIME_TYPES =
+            "application/xml, text/xml, text/plain; q=0.8, application/zip, application/octet-stream; q=0.5";
 
     protected final Map<String, IconPrototype> icons = new HashMap<>();
     protected final Map<String, LinePrototype> lines = new HashMap<>();
@@ -90,7 +91,8 @@ public class XmlStyleSource extends StyleSource implements StyleKeys {
             Main.error(e);
             logError(e);
         } catch (SAXParseException e) {
-            Main.warn(tr("Failed to parse Mappaint styles from ''{0}''. Error was: [{1}:{2}] {3}", url, e.getLineNumber(), e.getColumnNumber(), e.getMessage()));
+            Main.warn(tr("Failed to parse Mappaint styles from ''{0}''. Error was: [{1}:{2}] {3}",
+                    url, e.getLineNumber(), e.getColumnNumber(), e.getMessage()));
             Main.error(e);
             logError(e);
         } catch (SAXException e) {
@@ -170,8 +172,7 @@ public class XmlStyleSource extends StyleSource implements StyleKeys {
             }
         }
         for (IconPrototype s : iconsList) {
-            if (s.check(primitive))
-            {
+            if (s.check(primitive)) {
                 icon = update(icon, s, scale, mc);
             }
         }
@@ -268,8 +269,7 @@ public class XmlStyleSource extends StyleSource implements StyleKeys {
     }
 
     public void add(XmlCondition c, Collection<XmlCondition> conditions, Prototype prot) {
-         if(conditions != null)
-         {
+         if (conditions != null) {
             prot.conditions = conditions;
             if (prot instanceof IconPrototype) {
                 iconsList.add((IconPrototype) prot);
@@ -281,8 +281,7 @@ public class XmlStyleSource extends StyleSource implements StyleKeys {
                 areasList.add((AreaPrototype) prot);
             } else
                 throw new RuntimeException();
-         }
-         else {
+         } else {
              String key = c.getKey();
             prot.code = key;
             if (prot instanceof IconPrototype) {
@@ -304,7 +303,7 @@ public class XmlStyleSource extends StyleSource implements StyleKeys {
         boolean useMinMaxScale = Main.pref.getBoolean("mappaint.zoomLevelDisplay", false);
 
         if (osm instanceof Node || (osm instanceof Relation && "restriction".equals(osm.get("type")))) {
-            IconPrototype icon = getNode(osm, (useMinMaxScale ? scale : null), mc);
+            IconPrototype icon = getNode(osm, useMinMaxScale ? scale : null, mc);
             if (icon != null) {
                 def.put(ICON_IMAGE, icon.icon);
                 if (osm instanceof Node) {
@@ -317,9 +316,9 @@ public class XmlStyleSource extends StyleSource implements StyleKeys {
                     }
                 }
             }
-        } else if (osm instanceof Way || (osm instanceof Relation && ((Relation)osm).isMultipolygon())) {
+        } else if (osm instanceof Way || (osm instanceof Relation && ((Relation) osm).isMultipolygon())) {
             WayPrototypesRecord p = new WayPrototypesRecord();
-            get(osm, pretendWayIsClosed || !(osm instanceof Way) || ((Way) osm).isClosed(), p, (useMinMaxScale ? scale : null), mc);
+            get(osm, pretendWayIsClosed || !(osm instanceof Way) || ((Way) osm).isClosed(), p, useMinMaxScale ? scale : null, mc);
             if (p.line != null) {
                 def.put(WIDTH, new Float(p.line.getWidth()));
                 def.putOrClear(REAL_WIDTH, p.line.realWidth != null ? new Float(p.line.realWidth) : null);
diff --git a/src/org/openstreetmap/josm/gui/mappaint/xml/XmlStyleSourceHandler.java b/src/org/openstreetmap/josm/gui/mappaint/xml/XmlStyleSourceHandler.java
index f977cf2..6a51be9 100644
--- a/src/org/openstreetmap/josm/gui/mappaint/xml/XmlStyleSourceHandler.java
+++ b/src/org/openstreetmap/josm/gui/mappaint/xml/XmlStyleSourceHandler.java
@@ -43,29 +43,31 @@ public class XmlStyleSourceHandler extends DefaultHandler {
 
     public XmlStyleSourceHandler(XmlStyleSource style) {
         this.style = style;
-        inDoc=inRule=inCondition=inLine=inIcon=inArea=false;
+        inDoc = inRule = inCondition = inLine = inIcon = inArea = false;
         rule.init();
     }
 
-    Color convertColor(String colString) {
+    private Color convertColor(String colString) {
         int i = colString.indexOf('#');
         Color ret;
         if (i < 0) {
             ret = Main.pref.getColor("mappaint."+style.getPrefName()+"."+colString, Color.red);
-        } else if(i == 0) {
+        } else if (i == 0) {
             ret = ColorHelper.html2color(colString);
         } else {
-            ret = Main.pref.getColor("mappaint."+style.getPrefName()+"."+colString.substring(0,i),
+            ret = Main.pref.getColor("mappaint."+style.getPrefName()+"."+colString.substring(0, i),
                     ColorHelper.html2color(colString.substring(i)));
         }
         return ret;
     }
 
-    @Override public void startDocument() {
+    @Override
+    public void startDocument() {
         inDoc = true;
     }
 
-    @Override public void endDocument() {
+    @Override
+    public void endDocument() {
         inDoc = false;
     }
 
@@ -76,11 +78,11 @@ public class XmlStyleSourceHandler extends DefaultHandler {
     }
 
     private void startElementLine(String qName, Attributes atts, LinePrototype line) {
-        for (int count=0; count<atts.getLength(); count++) {
+        for (int count = 0; count < atts.getLength(); count++) {
             switch (atts.getQName(count)) {
             case "width":
                 String val = atts.getValue(count);
-                if (! (val.startsWith("+") || val.startsWith("-") || val.endsWith("%"))) {
+                if (!(val.startsWith("+") || val.startsWith("-") || val.endsWith("%"))) {
                     line.setWidth(Integer.parseInt(val));
                 }
                 break;
@@ -88,7 +90,7 @@ public class XmlStyleSourceHandler extends DefaultHandler {
                 line.color = convertColor(atts.getValue(count));
                 break;
             case "realwidth":
-                line.realWidth = Integer.parseInt(atts.getValue(count));
+                line.realWidth = Integer.valueOf(atts.getValue(count));
                 break;
             case "dashed":
                 Float[] dashed;
@@ -100,7 +102,7 @@ public class XmlStyleSourceHandler extends DefaultHandler {
                     }
                 } catch (NumberFormatException nfe) {
                     boolean isDashed = Boolean.parseBoolean(atts.getValue(count));
-                    if(isDashed) {
+                    if (isDashed) {
                         dashed = new Float[]{9f};
                     } else {
                         dashed = null;
@@ -125,17 +127,17 @@ public class XmlStyleSourceHandler extends DefaultHandler {
 
     private void startElementLinemod(String qName, Attributes atts, LinemodPrototype line) {
         startElementLine(qName, atts, line);
-        for (int count=0; count<atts.getLength(); count++) {
+        for (int count = 0; count < atts.getLength(); count++) {
             switch (atts.getQName(count)) {
             case "width":
                 String val = atts.getValue(count);
                 if (val.startsWith("+")) {
                     line.setWidth(Integer.parseInt(val.substring(1)));
                     line.widthMode = LinemodPrototype.WidthMode.OFFSET;
-                } else if(val.startsWith("-")) {
+                } else if (val.startsWith("-")) {
                     line.setWidth(Integer.parseInt(val));
                     line.widthMode = LinemodPrototype.WidthMode.OFFSET;
-                } else if(val.endsWith("%")) {
+                } else if (val.endsWith("%")) {
                     line.setWidth(Integer.parseInt(val.substring(0, val.length()-1)));
                     line.widthMode = LinemodPrototype.WidthMode.PERCENT;
                 } else {
@@ -150,7 +152,7 @@ public class XmlStyleSourceHandler extends DefaultHandler {
     }
 
     @Override
-    public void startElement(String uri,String name, String qName, Attributes atts) {
+    public void startElement(String uri, String name, String qName, Attributes atts) {
         if (inDoc) {
             switch(qName) {
             case "rule":
@@ -178,14 +180,14 @@ public class XmlStyleSourceHandler extends DefaultHandler {
                     inCondition = true;
                     XmlCondition c = rule.cond;
                     if (c.key != null) {
-                        if(rule.conditions == null) {
+                        if (rule.conditions == null) {
                             rule.conditions = new LinkedList<>();
                         }
                         rule.conditions.add(new XmlCondition(rule.cond));
                         c = new XmlCondition();
                         rule.conditions.add(c);
                     }
-                    for (int count=0; count<atts.getLength(); count++) {
+                    for (int count = 0; count < atts.getLength(); count++) {
                         switch (atts.getQName(count)) {
                         case "k":
                             c.key = atts.getValue(count);
@@ -200,7 +202,7 @@ public class XmlStyleSourceHandler extends DefaultHandler {
                             error("The element \"" + qName + "\" has unknown attribute \"" + atts.getQName(count) + "\"!");
                         }
                     }
-                    if(c.key == null) {
+                    if (c.key == null) {
                         error("The condition has no key!");
                     }
                 }
@@ -215,7 +217,7 @@ public class XmlStyleSourceHandler extends DefaultHandler {
                 break;
             case "icon":
                 inIcon = true;
-                for (int count=0; count<atts.getLength(); count++) {
+                for (int count = 0; count < atts.getLength(); count++) {
                     switch (atts.getQName(count)) {
                     case "src":
                         IconReference icon = new IconReference(atts.getValue(count), style);
@@ -223,7 +225,7 @@ public class XmlStyleSourceHandler extends DefaultHandler {
                         rule.icon.icon = icon;
                         break;
                     case "annotate":
-                        rule.icon.annotate = Boolean.parseBoolean (atts.getValue(count));
+                        rule.icon.annotate = Boolean.valueOf(atts.getValue(count));
                         break;
                     case "priority":
                         rule.icon.priority = Integer.parseInt(atts.getValue(count));
@@ -235,13 +237,13 @@ public class XmlStyleSourceHandler extends DefaultHandler {
                 break;
             case "area":
                 hadArea = inArea = true;
-                for (int count=0; count<atts.getLength(); count++) {
+                for (int count = 0; count < atts.getLength(); count++) {
                     switch (atts.getQName(count)) {
                     case "colour":
-                        rule.area.color=convertColor(atts.getValue(count));
+                        rule.area.color = convertColor(atts.getValue(count));
                         break;
                     case "closed":
-                        rule.area.closed=Boolean.parseBoolean(atts.getValue(count));
+                        rule.area.closed = Boolean.parseBoolean(atts.getValue(count));
                         break;
                     case "priority":
                         rule.area.priority = Integer.parseInt(atts.getValue(count));
@@ -258,7 +260,7 @@ public class XmlStyleSourceHandler extends DefaultHandler {
     }
 
     @Override
-    public void endElement(String uri,String name, String qName) {
+    public void endElement(String uri, String name, String qName) {
         if (inRule && "rule".equals(qName)) {
             if (hadLine) {
                 style.add(rule.cond, rule.conditions,
diff --git a/src/org/openstreetmap/josm/gui/mappaint/xml/package-info.java b/src/org/openstreetmap/josm/gui/mappaint/xml/package-info.java
new file mode 100644
index 0000000..b00a9f3
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/mappaint/xml/package-info.java
@@ -0,0 +1,7 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Drawing system based on XML map styles. This is a legacy system, not maintained anymore.
+ * For reference, see <a href="https://josm.openstreetmap.de/wiki/Styles/LegacyStandard">JOSM wiki</a>
+ */
+package org.openstreetmap.josm.gui.mappaint.xml;
diff --git a/src/org/openstreetmap/josm/gui/oauth/AccessTokenInfoPanel.java b/src/org/openstreetmap/josm/gui/oauth/AccessTokenInfoPanel.java
index 86fd16b..f9c8fb5 100644
--- a/src/org/openstreetmap/josm/gui/oauth/AccessTokenInfoPanel.java
+++ b/src/org/openstreetmap/josm/gui/oauth/AccessTokenInfoPanel.java
@@ -33,7 +33,7 @@ public class AccessTokenInfoPanel extends JPanel {
         gc.anchor = GridBagConstraints.NORTHWEST;
         gc.fill = GridBagConstraints.HORIZONTAL;
         gc.weightx = 0.0;
-        gc.insets = new Insets(0,0,3,3);
+        gc.insets = new Insets(0, 0, 3, 3);
         add(new JLabel(tr("Access Token Key:")), gc);
 
         gc.gridx = 1;
@@ -45,7 +45,7 @@ public class AccessTokenInfoPanel extends JPanel {
         gc.gridx = 0;
         gc.gridy = 1;
         gc.weightx = 0.0;
-        gc.insets = new Insets(0,0,3,3);
+        gc.insets = new Insets(0, 0, 3, 3);
         add(new JLabel(tr("Access Token Secret:")), gc);
 
         gc.gridx = 1;
diff --git a/src/org/openstreetmap/josm/gui/oauth/AdvancedOAuthPropertiesPanel.java b/src/org/openstreetmap/josm/gui/oauth/AdvancedOAuthPropertiesPanel.java
index 7fee8a3..fe1b6ea 100644
--- a/src/org/openstreetmap/josm/gui/oauth/AdvancedOAuthPropertiesPanel.java
+++ b/src/org/openstreetmap/josm/gui/oauth/AdvancedOAuthPropertiesPanel.java
@@ -52,13 +52,13 @@ public class AdvancedOAuthPropertiesPanel extends VerticallyScrollablePanel {
 
     protected final void build() {
         setLayout(new GridBagLayout());
-        setBorder(BorderFactory.createEmptyBorder(3,3,3,3));
+        setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
         GridBagConstraints gc = new GridBagConstraints();
 
         gc.anchor = GridBagConstraints.NORTHWEST;
         gc.fill = GridBagConstraints.HORIZONTAL;
         gc.weightx = 1.0;
-        gc.insets = new Insets(0,0, 3, 3);
+        gc.insets = new Insets(0, 0, 3, 3);
         gc.gridwidth = 2;
         cbUseDefaults = new JCheckBox(tr("Use default settings"));
         add(cbUseDefaults, gc);
@@ -125,11 +125,11 @@ public class AdvancedOAuthPropertiesPanel extends VerticallyScrollablePanel {
     protected boolean hasCustomSettings() {
         OAuthParameters params = OAuthParameters.createDefault(apiUrl);
         return
-           ! tfConsumerKey.getText().equals(params.getConsumerKey())
-        || ! tfConsumerSecret.getText().equals(params.getConsumerSecret())
-        || ! tfRequestTokenURL.getText().equals(params.getRequestTokenUrl())
-        || ! tfAccessTokenURL.getText().equals(params.getAccessTokenUrl())
-        || ! tfAuthoriseURL.getText().equals(params.getAuthoriseUrl());
+           !tfConsumerKey.getText().equals(params.getConsumerKey())
+        || !tfConsumerSecret.getText().equals(params.getConsumerSecret())
+        || !tfRequestTokenURL.getText().equals(params.getRequestTokenUrl())
+        || !tfAccessTokenURL.getText().equals(params.getAccessTokenUrl())
+        || !tfAuthoriseURL.getText().equals(params.getAuthoriseUrl());
     }
 
     protected boolean confirmOverwriteCustomSettings() {
@@ -176,7 +176,7 @@ public class AdvancedOAuthPropertiesPanel extends VerticallyScrollablePanel {
         setChildComponentsEnabled(false);
     }
 
-    protected void setChildComponentsEnabled(boolean enabled){
+    protected void setChildComponentsEnabled(boolean enabled) {
         for (Component c: getComponents()) {
             if (c instanceof JosmTextField || c instanceof JLabel) {
                 c.setEnabled(enabled);
@@ -215,8 +215,8 @@ public class AdvancedOAuthPropertiesPanel extends VerticallyScrollablePanel {
         } else {
             cbUseDefaults.setSelected(false);
             setChildComponentsEnabled(true);
-            tfConsumerKey.setText( parameters.getConsumerKey() == null ? "" : parameters.getConsumerKey());
-            tfConsumerSecret.setText( parameters.getConsumerSecret() == null ? "" : parameters.getConsumerSecret());
+            tfConsumerKey.setText(parameters.getConsumerKey() == null ? "" : parameters.getConsumerKey());
+            tfConsumerSecret.setText(parameters.getConsumerSecret() == null ? "" : parameters.getConsumerSecret());
             tfRequestTokenURL.setText(parameters.getRequestTokenUrl() == null ? "" : parameters.getRequestTokenUrl());
             tfAccessTokenURL.setText(parameters.getAccessTokenUrl() == null ? "" : parameters.getAccessTokenUrl());
             tfAuthoriseURL.setText(parameters.getAuthoriseUrl() == null ? "" : parameters.getAuthoriseUrl());
diff --git a/src/org/openstreetmap/josm/gui/oauth/FullyAutomaticAuthorizationUI.java b/src/org/openstreetmap/josm/gui/oauth/FullyAutomaticAuthorizationUI.java
index dc59459..3f1ba72 100644
--- a/src/org/openstreetmap/josm/gui/oauth/FullyAutomaticAuthorizationUI.java
+++ b/src/org/openstreetmap/josm/gui/oauth/FullyAutomaticAuthorizationUI.java
@@ -85,15 +85,17 @@ public class FullyAutomaticAuthorizationUI extends AbstractAuthorizationUI {
     protected VerticallyScrollablePanel buildUserNamePasswordPanel() {
         VerticallyScrollablePanel pnl = new VerticallyScrollablePanel(new GridBagLayout());
         GridBagConstraints gc = new GridBagConstraints();
-        pnl.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        pnl.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
 
         gc.anchor = GridBagConstraints.NORTHWEST;
         gc.fill = GridBagConstraints.HORIZONTAL;
         gc.weightx = 1.0;
         gc.gridwidth = 2;
         HtmlPanel pnlMessage = new HtmlPanel();
-        HTMLEditorKit kit = (HTMLEditorKit)pnlMessage.getEditorPane().getEditorKit();
-        kit.getStyleSheet().addRule(".warning-body {background-color:rgb(253,255,221);padding: 10pt; border-color:rgb(128,128,128);border-style: solid;border-width: 1px;}");
+        HTMLEditorKit kit = (HTMLEditorKit) pnlMessage.getEditorPane().getEditorKit();
+        kit.getStyleSheet().addRule(
+                ".warning-body {background-color:rgb(253,255,221);padding: 10pt; " +
+                "border-color:rgb(128,128,128);border-style: solid;border-width: 1px;}");
         kit.getStyleSheet().addRule("ol {margin-left: 1cm}");
         pnlMessage.setText("<html><body><p class=\"warning-body\">"
                 + tr("Please enter your OSM user name and password. The password will <strong>not</strong> be saved "
@@ -109,7 +111,7 @@ public class FullyAutomaticAuthorizationUI extends AbstractAuthorizationUI {
         gc.anchor = GridBagConstraints.NORTHWEST;
         gc.fill = GridBagConstraints.HORIZONTAL;
         gc.weightx = 0.0;
-        gc.insets = new Insets(0,0,3,3);
+        gc.insets = new Insets(0, 0, 3, 3);
         pnl.add(new JLabel(tr("Username: ")), gc);
 
         gc.gridx = 1;
@@ -141,8 +143,10 @@ public class FullyAutomaticAuthorizationUI extends AbstractAuthorizationUI {
         gc.weightx = 1.0;
         gc.gridwidth = 2;
         pnlMessage = new HtmlPanel();
-        kit = (HTMLEditorKit)pnlMessage.getEditorPane().getEditorKit();
-        kit.getStyleSheet().addRule(".warning-body {background-color:rgb(253,255,221);padding: 10pt; border-color:rgb(128,128,128);border-style: solid;border-width: 1px;}");
+        kit = (HTMLEditorKit) pnlMessage.getEditorPane().getEditorKit();
+        kit.getStyleSheet().addRule(
+                ".warning-body {background-color:rgb(253,255,221);padding: 10pt; " +
+                "border-color:rgb(128,128,128);border-style: solid;border-width: 1px;}");
         kit.getStyleSheet().addRule("ol {margin-left: 1cm}");
         pnlMessage.setText("<html><body>"
                 + "<p class=\"warning-body\">"
@@ -194,7 +198,7 @@ public class FullyAutomaticAuthorizationUI extends AbstractAuthorizationUI {
                 tfUserName.setText(pa.getUserName() == null ? "" : pa.getUserName());
                 tfPassword.setText(pa.getPassword() == null ? "" : String.valueOf(pa.getPassword()));
             }
-        } catch(CredentialsAgentException e) {
+        } catch (CredentialsAgentException e) {
             Main.error(e);
             tfUserName.setText("");
             tfPassword.setText("");
@@ -209,7 +213,7 @@ public class FullyAutomaticAuthorizationUI extends AbstractAuthorizationUI {
     protected JPanel buildActionButtonPanel() {
         JPanel pnl = new JPanel(new FlowLayout(FlowLayout.LEFT));
 
-        RunAuthorisationAction runAuthorisationAction= new RunAuthorisationAction();
+        RunAuthorisationAction runAuthorisationAction = new RunAuthorisationAction();
         tfPassword.getDocument().addDocumentListener(runAuthorisationAction);
         tfUserName.getDocument().addDocumentListener(runAuthorisationAction);
         pnl.add(new SideButton(runAuthorisationAction));
@@ -224,7 +228,7 @@ public class FullyAutomaticAuthorizationUI extends AbstractAuthorizationUI {
     protected JPanel buildResultsPanel() {
         JPanel pnl = new JPanel(new GridBagLayout());
         GridBagConstraints gc = new GridBagConstraints();
-        pnl.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        pnl.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
 
         // the message panel
         gc.anchor = GridBagConstraints.NORTHWEST;
@@ -237,12 +241,12 @@ public class FullyAutomaticAuthorizationUI extends AbstractAuthorizationUI {
                 + "You have successfully retrieved an OAuth Access Token from the OSM website. "
                 + "Click on <strong>{0}</strong> to accept the token. JOSM will use it in "
                 + "subsequent requests to gain access to the OSM API."
-                + "</html>",lbl));
+                + "</html>", lbl));
         pnl.add(msg, gc);
 
         // infos about the access token
         gc.gridy = 1;
-        gc.insets = new Insets(5,0,0,0);
+        gc.insets = new Insets(5, 0, 0, 0);
         pnl.add(pnlAccessTokenInfo = new AccessTokenInfoPanel(), gc);
 
         // the actions
@@ -334,7 +338,7 @@ public class FullyAutomaticAuthorizationUI extends AbstractAuthorizationUI {
     class RunAuthorisationAction extends AbstractAction implements DocumentListener{
         public RunAuthorisationAction() {
             putValue(NAME, tr("Authorize now"));
-            putValue(SMALL_ICON, ImageProvider.get("oauth", "oauth"));
+            putValue(SMALL_ICON, ImageProvider.get("oauth", "oauth-small"));
             putValue(SHORT_DESCRIPTION, tr("Click to redirect you to the authorization form on the JOSM web site"));
             updateEnabledState();
         }
@@ -407,7 +411,7 @@ public class FullyAutomaticAuthorizationUI extends AbstractAuthorizationUI {
 
         @Override
         public boolean isValid() {
-            return getComponent().getText().trim().length() > 0;
+            return !getComponent().getText().trim().isEmpty();
         }
 
         @Override
@@ -428,7 +432,7 @@ public class FullyAutomaticAuthorizationUI extends AbstractAuthorizationUI {
 
         @Override
         public boolean isValid() {
-            return getComponent().getText().trim().length() > 0;
+            return !getComponent().getText().trim().isEmpty();
         }
 
         @Override
@@ -492,7 +496,7 @@ public class FullyAutomaticAuthorizationUI extends AbstractAuthorizationUI {
             String loginUrl = null;
             try {
                 loginUrl = authClient.buildOsmLoginUrl();
-            } catch(OsmOAuthAuthorizationException e1) {
+            } catch (OsmOAuthAuthorizationException e1) {
                 alertInvalidLoginUrl();
                 return;
             }
@@ -517,7 +521,7 @@ public class FullyAutomaticAuthorizationUI extends AbstractAuthorizationUI {
                 @Override
                 public void run() {
                     if (e instanceof OsmLoginFailedException) {
-                        alertLoginFailed((OsmLoginFailedException)e);
+                        alertLoginFailed((OsmLoginFailedException) e);
                     } else {
                         alertAuthorisationFailed(e);
                     }
@@ -538,7 +542,7 @@ public class FullyAutomaticAuthorizationUI extends AbstractAuthorizationUI {
                         getProgressMonitor().createSubTaskMonitor(1, false)
                 );
                 getProgressMonitor().worked(1);
-                if (canceled)return;
+                if (canceled) return;
                 authClient.authorise(
                         requestToken,
                         getOsmUserName(),
@@ -547,12 +551,12 @@ public class FullyAutomaticAuthorizationUI extends AbstractAuthorizationUI {
                         getProgressMonitor().createSubTaskMonitor(1, false)
                 );
                 getProgressMonitor().worked(1);
-                if (canceled)return;
+                if (canceled) return;
                 final OAuthToken accessToken = authClient.getAccessToken(
-                        getProgressMonitor().createSubTaskMonitor(1,false)
+                        getProgressMonitor().createSubTaskMonitor(1, false)
                 );
                 getProgressMonitor().worked(1);
-                if (canceled)return;
+                if (canceled) return;
                 GuiHelper.runInEDT(new Runnable() {
                     @Override
                     public void run() {
@@ -560,7 +564,7 @@ public class FullyAutomaticAuthorizationUI extends AbstractAuthorizationUI {
                         setAccessToken(accessToken);
                     }
                 });
-            } catch(final OsmOAuthAuthorizationException e) {
+            } catch (final OsmOAuthAuthorizationException e) {
                 handleException(e);
             }
         }
diff --git a/src/org/openstreetmap/josm/gui/oauth/FullyAutomaticPropertiesPanel.java b/src/org/openstreetmap/josm/gui/oauth/FullyAutomaticPropertiesPanel.java
index 80fba22..de87c88 100644
--- a/src/org/openstreetmap/josm/gui/oauth/FullyAutomaticPropertiesPanel.java
+++ b/src/org/openstreetmap/josm/gui/oauth/FullyAutomaticPropertiesPanel.java
@@ -29,7 +29,7 @@ public class FullyAutomaticPropertiesPanel extends JPanel {
         gc.anchor = GridBagConstraints.NORTHWEST;
         gc.fill = GridBagConstraints.HORIZONTAL;
         gc.weightx = 0.0;
-        gc.insets = new Insets(0,0,3,3);
+        gc.insets = new Insets(0, 0, 3, 3);
         pnl.add(new JLabel(tr("Username: ")), gc);
 
         gc.gridx = 1;
@@ -60,7 +60,7 @@ public class FullyAutomaticPropertiesPanel extends JPanel {
     public FullyAutomaticPropertiesPanel() {
         setLayout(new GridBagLayout());
         GridBagConstraints gc = new GridBagConstraints();
-        setBorder(BorderFactory.createEmptyBorder(3,3,3,3));
+        setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
 
         gc.anchor = GridBagConstraints.NORTHWEST;
         gc.fill = GridBagConstraints.HORIZONTAL;
@@ -81,7 +81,7 @@ public class FullyAutomaticPropertiesPanel extends JPanel {
 
         @Override
         public boolean isValid() {
-            return getComponent().getText().trim().length() > 0;
+            return !getComponent().getText().trim().isEmpty();
         }
 
         @Override
diff --git a/src/org/openstreetmap/josm/gui/oauth/ManualAuthorizationUI.java b/src/org/openstreetmap/josm/gui/oauth/ManualAuthorizationUI.java
index be8cc4a..f98f220 100644
--- a/src/org/openstreetmap/josm/gui/oauth/ManualAuthorizationUI.java
+++ b/src/org/openstreetmap/josm/gui/oauth/ManualAuthorizationUI.java
@@ -49,7 +49,7 @@ public class ManualAuthorizationUI extends AbstractAuthorizationUI{
 
     protected JPanel buildAccessTokenPanel() {
         JPanel pnl = new JPanel(new GridBagLayout());
-        pnl.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        pnl.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
         GridBagConstraints gc = new GridBagConstraints();
         AccessTokenBuilder accessTokenBuilder = new AccessTokenBuilder();
 
@@ -58,7 +58,7 @@ public class ManualAuthorizationUI extends AbstractAuthorizationUI{
         gc.fill = GridBagConstraints.HORIZONTAL;
         gc.weightx = 0.0;
         gc.gridwidth = 2;
-        gc.insets = new Insets(0,0,5,0);
+        gc.insets = new Insets(0, 0, 5, 0);
         pnlMessage = new HtmlPanel();
         pnlMessage.setText("<html><body>"
                 + tr("Please enter an OAuth Access Token which is authorized to access the OSM server "
@@ -70,7 +70,7 @@ public class ManualAuthorizationUI extends AbstractAuthorizationUI{
         gc.gridy = 1;
         gc.weightx = 0.0;
         gc.gridwidth = 1;
-        gc.insets = new Insets(0,0,0,3);
+        gc.insets = new Insets(0, 0, 0, 3);
         pnl.add(new JLabel(tr("Access Token Key:")), gc);
 
         gc.gridx = 1;
@@ -98,7 +98,7 @@ public class ManualAuthorizationUI extends AbstractAuthorizationUI{
         // the checkbox for saving to preferences
         gc.gridy = 3;
         gc.gridx = 0;
-        gc.gridwidth =2;
+        gc.gridwidth = 2;
         gc.weightx = 1.0;
         pnl.add(cbSaveToPreferences = new JCheckBox(tr("Save Access Token in preferences")), gc);
         cbSaveToPreferences.setSelected(OAuthAccessTokenHolder.getInstance().isSaveToPreferences());
@@ -106,7 +106,7 @@ public class ManualAuthorizationUI extends AbstractAuthorizationUI{
         // filler - grab remaining space
         gc.gridy = 3;
         gc.gridx = 0;
-        gc.gridwidth =2;
+        gc.gridwidth = 2;
         gc.weightx = 1.0;
         gc.weighty = 1.0;
         gc.fill = GridBagConstraints.BOTH;
@@ -154,7 +154,7 @@ public class ManualAuthorizationUI extends AbstractAuthorizationUI{
 
     protected final void build() {
         setLayout(new BorderLayout());
-        setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
         add(buildTabbedPreferencesPanel(), BorderLayout.CENTER);
         add(buildActionsPanel(), BorderLayout.SOUTH);
     }
@@ -218,12 +218,13 @@ public class ManualAuthorizationUI extends AbstractAuthorizationUI{
     class AccessTokenBuilder implements DocumentListener {
 
         public void build() {
-            if (! valAccessTokenKey.isValid() || !valAccessTokenSecret.isValid()) {
+            if (!valAccessTokenKey.isValid() || !valAccessTokenSecret.isValid()) {
                 setAccessToken(null);
             } else {
                 setAccessToken(new OAuthToken(tfAccessTokenKey.getText().trim(), tfAccessTokenSecret.getText().trim()));
             }
         }
+
         @Override
         public void changedUpdate(DocumentEvent e) {
             build();
@@ -246,7 +247,7 @@ public class ManualAuthorizationUI extends AbstractAuthorizationUI{
     class TestAccessTokenAction extends AbstractAction implements PropertyChangeListener {
         public TestAccessTokenAction() {
             putValue(NAME, tr("Test Access Token"));
-            putValue(SMALL_ICON, ImageProvider.get("oauth", "oauth"));
+            putValue(SMALL_ICON, ImageProvider.get("oauth", "oauth-small"));
             putValue(SHORT_DESCRIPTION, tr("Click to test the Access Token"));
             updateEnabledState();
         }
@@ -268,7 +269,7 @@ public class ManualAuthorizationUI extends AbstractAuthorizationUI{
 
         @Override
         public void propertyChange(PropertyChangeEvent evt) {
-            if (! evt.getPropertyName().equals(AbstractAuthorizationUI.ACCESS_TOKEN_PROP))
+            if (!evt.getPropertyName().equals(AbstractAuthorizationUI.ACCESS_TOKEN_PROP))
                 return;
             updateEnabledState();
         }
diff --git a/src/org/openstreetmap/josm/gui/oauth/OAuthAuthorizationWizard.java b/src/org/openstreetmap/josm/gui/oauth/OAuthAuthorizationWizard.java
index 881de82..523a56f 100644
--- a/src/org/openstreetmap/josm/gui/oauth/OAuthAuthorizationWizard.java
+++ b/src/org/openstreetmap/josm/gui/oauth/OAuthAuthorizationWizard.java
@@ -70,7 +70,7 @@ public class OAuthAuthorizationWizard extends JDialog {
      *
      * @return panel with buttons
      */
-    protected JPanel buildButtonRow(){
+    protected JPanel buildButtonRow() {
         JPanel pnl = new JPanel(new FlowLayout(FlowLayout.CENTER));
 
         AcceptAccessTokenAction actAcceptAccessToken = new AcceptAccessTokenAction();
@@ -88,11 +88,11 @@ public class OAuthAuthorizationWizard extends JDialog {
     /**
      * Builds the panel with general information in the header
      *
-     * @return panel woth information display
+     * @return panel with information display
      */
     protected JPanel buildHeaderInfoPanel() {
         JPanel pnl = new JPanel(new GridBagLayout());
-        pnl.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        pnl.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
         GridBagConstraints gc = new GridBagConstraints();
 
         // the oauth logo in the header
@@ -100,14 +100,15 @@ public class OAuthAuthorizationWizard extends JDialog {
         gc.fill = GridBagConstraints.HORIZONTAL;
         gc.weightx = 1.0;
         gc.gridwidth = 2;
-        JLabel lbl = new JLabel();
-        lbl.setIcon(ImageProvider.get("oauth", "oauth-logo"));
+        ImageProvider logoProv = new ImageProvider("oauth", "oauth-logo");
+        JLabel lbl = new JLabel(logoProv.get());
+        lbl.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
         lbl.setOpaque(true);
         pnl.add(lbl, gc);
 
         // OAuth in a nutshell ...
         gc.gridy  = 1;
-        gc.insets = new Insets(5,0,0,5);
+        gc.insets = new Insets(5, 0, 0, 5);
         HtmlPanel pnlMessage = new HtmlPanel();
         pnlMessage.setText("<html><body>"
                 + tr("With OAuth you grant JOSM the right to upload map data and GPS tracks "
@@ -123,13 +124,14 @@ public class OAuthAuthorizationWizard extends JDialog {
         gc.weightx = 0.0;
         lbl = new JLabel(tr("Please select an authorization procedure: "));
         lbl.setFont(lbl.getFont().deriveFont(Font.PLAIN));
-        pnl.add(lbl,gc);
+        pnl.add(lbl, gc);
 
         gc.gridx = 1;
         gc.gridwidth = 1;
         gc.weightx = 1.0;
-        pnl.add(cbAuthorisationProcedure = new AuthorizationProcedureComboBox(),gc);
+        pnl.add(cbAuthorisationProcedure = new AuthorizationProcedureComboBox(), gc);
         cbAuthorisationProcedure.addItemListener(new AuthorisationProcedureChangeListener());
+        lbl.setLabelFor(cbAuthorisationProcedure);
         return pnl;
     }
 
@@ -138,7 +140,7 @@ public class OAuthAuthorizationWizard extends JDialog {
      * currently selected
      */
     protected void refreshAuthorisationProcedurePanel() {
-        AuthorizationProcedure procedure = (AuthorizationProcedure)cbAuthorisationProcedure.getSelectedItem();
+        AuthorizationProcedure procedure = (AuthorizationProcedure) cbAuthorisationProcedure.getSelectedItem();
         switch(procedure) {
         case FULLY_AUTOMATIC:
             spAuthorisationProcedureUI.getViewport().setView(pnlFullyAutomaticAuthorisationUI);
@@ -165,6 +167,7 @@ public class OAuthAuthorizationWizard extends JDialog {
         getContentPane().add(buildHeaderInfoPanel(), BorderLayout.NORTH);
 
         setTitle(tr("Get an Access Token for ''{0}''", apiUrl));
+        this.setMinimumSize(new Dimension(420, 400));
 
         pnlFullyAutomaticAuthorisationUI = new FullyAutomaticAuthorizationUI(apiUrl);
         pnlSemiAutomaticAuthorisationUI = new SemiAutomaticAuthorizationUI(apiUrl);
@@ -185,6 +188,7 @@ public class OAuthAuthorizationWizard extends JDialog {
 
                     @Override
                     public void componentResized(ComponentEvent e) {}
+
                     @Override
                     public void componentMoved(ComponentEvent e) {}
                 }
@@ -235,7 +239,7 @@ public class OAuthAuthorizationWizard extends JDialog {
     }
 
     protected AbstractAuthorizationUI getCurrentAuthorisationUI() {
-        switch((AuthorizationProcedure)cbAuthorisationProcedure.getSelectedItem()) {
+        switch((AuthorizationProcedure) cbAuthorisationProcedure.getSelectedItem()) {
         case FULLY_AUTOMATIC: return pnlFullyAutomaticAuthorisationUI;
         case MANUALLY: return pnlManualAuthorisationUI;
         case SEMI_AUTOMATIC: return pnlSemiAutomaticAuthorisationUI;
@@ -292,7 +296,7 @@ public class OAuthAuthorizationWizard extends JDialog {
                     getClass().getName() + ".geometry",
                     WindowGeometry.centerInWindow(
                             Main.parent,
-                            new Dimension(450,540)
+                            new Dimension(450, 540)
                     )
             ).applySafe(this);
             initFromPreferences();
@@ -314,6 +318,10 @@ public class OAuthAuthorizationWizard extends JDialog {
     }
 
     class CancelAction extends AbstractAction {
+
+        /**
+         * Constructs a new {@code CancelAction}.
+         */
         public CancelAction() {
             putValue(NAME, tr("Cancel"));
             putValue(SMALL_ICON, ImageProvider.get("cancel"));
@@ -332,8 +340,10 @@ public class OAuthAuthorizationWizard extends JDialog {
     }
 
     class AcceptAccessTokenAction extends AbstractAction implements PropertyChangeListener {
-        private transient OAuthToken token;
 
+        /**
+         * Constructs a new {@code AcceptAccessTokenAction}.
+         */
         public AcceptAccessTokenAction() {
             putValue(NAME, tr("Accept Access Token"));
             putValue(SMALL_ICON, ImageProvider.get("ok"));
@@ -355,14 +365,13 @@ public class OAuthAuthorizationWizard extends JDialog {
         public void propertyChange(PropertyChangeEvent evt) {
             if (!evt.getPropertyName().equals(AbstractAuthorizationUI.ACCESS_TOKEN_PROP))
                 return;
-            token = (OAuthToken)evt.getNewValue();
-            updateEnabledState(token);
+            updateEnabledState((OAuthToken) evt.getNewValue());
         }
     }
 
     class WindowEventHandler extends WindowAdapter {
         @Override
-        public void windowClosing(WindowEvent arg0) {
+        public void windowClosing(WindowEvent e) {
             new CancelAction().cancel();
         }
     }
diff --git a/src/org/openstreetmap/josm/gui/oauth/OsmLoginFailedException.java b/src/org/openstreetmap/josm/gui/oauth/OsmLoginFailedException.java
index cb8b3af..966a3ac 100644
--- a/src/org/openstreetmap/josm/gui/oauth/OsmLoginFailedException.java
+++ b/src/org/openstreetmap/josm/gui/oauth/OsmLoginFailedException.java
@@ -1,7 +1,7 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.oauth;
 
-public class OsmLoginFailedException extends OsmOAuthAuthorizationException{
+public class OsmLoginFailedException extends OsmOAuthAuthorizationException {
 
     public OsmLoginFailedException() {
         super();
diff --git a/src/org/openstreetmap/josm/gui/oauth/OsmOAuthAuthorizationClient.java b/src/org/openstreetmap/josm/gui/oauth/OsmOAuthAuthorizationClient.java
index 56bf2f3..26a10f9 100644
--- a/src/org/openstreetmap/josm/gui/oauth/OsmOAuthAuthorizationClient.java
+++ b/src/org/openstreetmap/josm/gui/oauth/OsmOAuthAuthorizationClient.java
@@ -98,13 +98,13 @@ public class OsmOAuthAuthorizationClient {
      * Cancels the current OAuth operation.
      */
     public void cancel() {
-        DefaultOAuthProvider p  = (DefaultOAuthProvider)provider;
+        DefaultOAuthProvider p  = (DefaultOAuthProvider) provider;
         canceled = true;
         if (p != null) {
             try {
                 Field f =  p.getClass().getDeclaredField("connection");
                 f.setAccessible(true);
-                HttpURLConnection con = (HttpURLConnection)f.get(p);
+                HttpURLConnection con = (HttpURLConnection) f.get(p);
                 if (con != null) {
                     con.disconnect();
                 }
@@ -113,7 +113,7 @@ public class OsmOAuthAuthorizationClient {
                 Main.warn(tr("Failed to cancel running OAuth operation"));
             }
         }
-        synchronized(this) {
+        synchronized (this) {
             if (connection != null) {
                 connection.disconnect();
             }
@@ -138,7 +138,7 @@ public class OsmOAuthAuthorizationClient {
             monitor.indeterminateSubTask(tr("Retrieving OAuth Request Token from ''{0}''", oauthProviderParameters.getRequestTokenUrl()));
             provider.retrieveRequestToken(consumer, "");
             return OAuthToken.createToken(consumer);
-        } catch(OAuthException e){
+        } catch (OAuthException e) {
             if (canceled)
                 throw new OsmTransferCanceledException(e);
             throw new OsmOAuthAuthorizationException(e);
@@ -168,7 +168,7 @@ public class OsmOAuthAuthorizationClient {
             monitor.indeterminateSubTask(tr("Retrieving OAuth Access Token from ''{0}''", oauthProviderParameters.getAccessTokenUrl()));
             provider.retrieveAccessToken(consumer, null);
             return OAuthToken.createToken(consumer);
-        } catch(OAuthException e){
+        } catch (OAuthException e) {
             if (canceled)
                 throw new OsmTransferCanceledException(e);
             throw new OsmOAuthAuthorizationException(e);
@@ -185,13 +185,12 @@ public class OsmOAuthAuthorizationClient {
      * @return  the authorise URL for this request
      */
     public String getAuthoriseUrl(OAuthToken requestToken) {
-        StringBuilder sb = new StringBuilder();
+        StringBuilder sb = new StringBuilder(32);
 
         // OSM is an OAuth 1.0 provider and JOSM isn't a web app. We just add the oauth request token to
         // the authorisation request, no callback parameter.
         //
-        sb.append(oauthProviderParameters.getAuthoriseUrl()).append("?")
-        .append(OAuth.OAUTH_TOKEN).append("=").append(requestToken.getKey());
+        sb.append(oauthProviderParameters.getAuthoriseUrl()).append('?'+OAuth.OAUTH_TOKEN+'=').append(requestToken.getKey());
         return sb.toString();
     }
 
@@ -228,14 +227,14 @@ public class OsmOAuthAuthorizationClient {
             }
             for (String kvPair : kvPairs) {
                 kvPair = kvPair.trim();
-                String [] kv = kvPair.split("=");
+                String[] kv = kvPair.split("=");
                 if (kv == null || kv.length != 2) {
                     continue;
                 }
                 if ("_osm_session".equals(kv[0])) {
                     // osm session cookie found
                     String token = extractToken(connection);
-                    if(token == null)
+                    if (token == null)
                         return null;
                     SessionId si = new SessionId();
                     si.id = kv[1];
@@ -247,16 +246,16 @@ public class OsmOAuthAuthorizationClient {
         return null;
     }
 
-    protected String buildPostRequest(Map<String,String> parameters) throws OsmOAuthAuthorizationException {
-        StringBuilder sb = new StringBuilder();
+    protected String buildPostRequest(Map<String, String> parameters) throws OsmOAuthAuthorizationException {
+        StringBuilder sb = new StringBuilder(32);
 
-        for(Iterator<Entry<String,String>> it = parameters.entrySet().iterator(); it.hasNext();) {
-            Entry<String,String> entry = it.next();
+        for (Iterator<Entry<String, String>> it = parameters.entrySet().iterator(); it.hasNext();) {
+            Entry<String, String> entry = it.next();
             String value = entry.getValue();
             value = (value == null) ? "" : value;
-            sb.append(entry.getKey()).append("=").append(Utils.encodeUrl(value));
+            sb.append(entry.getKey()).append('=').append(Utils.encodeUrl(value));
             if (it.hasNext()) {
-                sb.append("&");
+                sb.append('&');
             }
         }
         return sb.toString();
@@ -269,12 +268,12 @@ public class OsmOAuthAuthorizationClient {
      * @throws OsmOAuthAuthorizationException if something went wrong, in particular if the
      * URLs are malformed
      */
-    public String buildOsmLoginUrl() throws OsmOAuthAuthorizationException{
+    public String buildOsmLoginUrl() throws OsmOAuthAuthorizationException {
         try {
             URL autUrl = new URL(oauthProviderParameters.getAuthoriseUrl());
             URL url = new URL(Main.pref.get("oauth.protocol", "https"), autUrl.getHost(), autUrl.getPort(), "/login");
             return url.toString();
-        } catch(MalformedURLException e) {
+        } catch (MalformedURLException e) {
             throw new OsmOAuthAuthorizationException(e);
         }
     }
@@ -286,12 +285,12 @@ public class OsmOAuthAuthorizationClient {
      * @throws OsmOAuthAuthorizationException if something went wrong, in particular if the
      * URLs are malformed
      */
-    protected String buildOsmLogoutUrl() throws OsmOAuthAuthorizationException{
+    protected String buildOsmLogoutUrl() throws OsmOAuthAuthorizationException {
         try {
             URL autUrl = new URL(oauthProviderParameters.getAuthoriseUrl());
             URL url = new URL("http", autUrl.getHost(), autUrl.getPort(), "/logout");
             return url.toString();
-        } catch(MalformedURLException e) {
+        } catch (MalformedURLException e) {
             throw new OsmOAuthAuthorizationException(e);
         }
     }
@@ -308,7 +307,7 @@ public class OsmOAuthAuthorizationClient {
             StringBuilder sb = new StringBuilder();
             sb.append(buildOsmLoginUrl()).append("?cookie_test=true");
             URL url = new URL(sb.toString());
-            synchronized(this) {
+            synchronized (this) {
                 connection = Utils.openHttpConnection(url);
             }
             connection.setRequestMethod("GET");
@@ -317,12 +316,13 @@ public class OsmOAuthAuthorizationClient {
             connection.connect();
             SessionId sessionId = extractOsmSession(connection);
             if (sessionId == null)
-                throw new OsmOAuthAuthorizationException(tr("OSM website did not return a session cookie in response to ''{0}'',", url.toString()));
+                throw new OsmOAuthAuthorizationException(
+                        tr("OSM website did not return a session cookie in response to ''{0}'',", url.toString()));
             return sessionId;
-        } catch(IOException e) {
+        } catch (IOException e) {
             throw new OsmOAuthAuthorizationException(e);
         } finally {
-            synchronized(this) {
+            synchronized (this) {
                 connection = null;
             }
         }
@@ -337,7 +337,7 @@ public class OsmOAuthAuthorizationClient {
     protected void fetchOAuthToken(SessionId sessionId, OAuthToken requestToken) throws OsmOAuthAuthorizationException {
         try {
             URL url = new URL(getAuthoriseUrl(requestToken));
-            synchronized(this) {
+            synchronized (this) {
                 connection = Utils.openHttpConnection(url);
             }
             connection.setRequestMethod("GET");
@@ -347,11 +347,12 @@ public class OsmOAuthAuthorizationClient {
             connection.connect();
             sessionId.token = extractToken(connection);
             if (sessionId.token == null)
-                throw new OsmOAuthAuthorizationException(tr("OSM website did not return a session cookie in response to ''{0}'',", url.toString()));
-        } catch(IOException e) {
+                throw new OsmOAuthAuthorizationException(tr("OSM website did not return a session cookie in response to ''{0}'',",
+                        url.toString()));
+        } catch (IOException e) {
             throw new OsmOAuthAuthorizationException(e);
         } finally {
-            synchronized(this) {
+            synchronized (this) {
                 connection = null;
             }
         }
@@ -360,7 +361,7 @@ public class OsmOAuthAuthorizationClient {
     protected void authenticateOsmSession(SessionId sessionId, String userName, String password) throws OsmLoginFailedException {
         try {
             URL url = new URL(buildOsmLoginUrl());
-            synchronized(this) {
+            synchronized (this) {
                 connection = Utils.openHttpConnection(url);
             }
             connection.setRequestMethod("POST");
@@ -368,7 +369,7 @@ public class OsmOAuthAuthorizationClient {
             connection.setDoOutput(true);
             connection.setUseCaches(false);
 
-            Map<String,String> parameters = new HashMap<>();
+            Map<String, String> parameters = new HashMap<>();
             parameters.put("username", userName);
             parameters.put("password", password);
             parameters.put("referer", "/");
@@ -396,13 +397,14 @@ public class OsmOAuthAuthorizationClient {
             //
             int retCode = connection.getResponseCode();
             if (retCode != HttpURLConnection.HTTP_MOVED_TEMP)
-                throw new OsmOAuthAuthorizationException(tr("Failed to authenticate user ''{0}'' with password ''***'' as OAuth user", userName));
-        } catch(OsmOAuthAuthorizationException e) {
+                throw new OsmOAuthAuthorizationException(tr("Failed to authenticate user ''{0}'' with password ''***'' as OAuth user",
+                        userName));
+        } catch (OsmOAuthAuthorizationException e) {
             throw new OsmLoginFailedException(e.getCause());
-        } catch(IOException e) {
+        } catch (IOException e) {
             throw new OsmLoginFailedException(e);
         } finally {
-            synchronized(this) {
+            synchronized (this) {
                 connection = null;
             }
         }
@@ -411,23 +413,24 @@ public class OsmOAuthAuthorizationClient {
     protected void logoutOsmSession(SessionId sessionId) throws OsmOAuthAuthorizationException {
         try {
             URL url = new URL(buildOsmLogoutUrl());
-            synchronized(this) {
+            synchronized (this) {
                 connection = Utils.openHttpConnection(url);
             }
             connection.setRequestMethod("GET");
             connection.setDoInput(true);
             connection.setDoOutput(false);
             connection.connect();
-        } catch(IOException e) {
+        } catch (IOException e) {
             throw new OsmOAuthAuthorizationException(e);
         }  finally {
-            synchronized(this) {
+            synchronized (this) {
                 connection = null;
             }
         }
     }
 
-    protected void sendAuthorisationRequest(SessionId sessionId, OAuthToken requestToken, OsmPrivileges privileges) throws OsmOAuthAuthorizationException {
+    protected void sendAuthorisationRequest(SessionId sessionId, OAuthToken requestToken, OsmPrivileges privileges)
+            throws OsmOAuthAuthorizationException {
         Map<String, String> parameters = new HashMap<>();
         fetchOAuthToken(sessionId, requestToken);
         parameters.put("oauth_token", requestToken.getKey());
@@ -457,7 +460,7 @@ public class OsmOAuthAuthorizationClient {
         String request = buildPostRequest(parameters);
         try {
             URL url = new URL(oauthProviderParameters.getAuthoriseUrl());
-            synchronized(this) {
+            synchronized (this) {
                 connection = Utils.openHttpConnection(url);
             }
             connection.setRequestMethod("POST");
@@ -482,7 +485,7 @@ public class OsmOAuthAuthorizationClient {
         } catch (IOException e) {
             throw new OsmOAuthAuthorizationException(e);
         } finally {
-            synchronized(this) {
+            synchronized (this) {
                 connection = null;
             }
         }
@@ -492,8 +495,8 @@ public class OsmOAuthAuthorizationClient {
      * Automatically authorises a request token for a set of privileges.
      *
      * @param requestToken the request token. Must not be null.
-     * @param osmUserName the OSM user name. Must not be null.
-     * @param osmPassword the OSM password. Must not be null.
+     * @param userName the OSM user name. Must not be null.
+     * @param password the OSM password. Must not be null.
      * @param privileges the set of privileges. Must not be null.
      * @param monitor a progress monitor. Defaults to {@link NullProgressMonitor#INSTANCE} if null
      * @throws IllegalArgumentException if requestToken is null
@@ -503,10 +506,11 @@ public class OsmOAuthAuthorizationClient {
      * @throws OsmOAuthAuthorizationException if the authorisation fails
      * @throws OsmTransferCanceledException if the task is canceled by the user
      */
-    public void authorise(OAuthToken requestToken, String osmUserName, String osmPassword, OsmPrivileges privileges, ProgressMonitor monitor) throws OsmOAuthAuthorizationException, OsmTransferCanceledException{
+    public void authorise(OAuthToken requestToken, String userName, String password, OsmPrivileges privileges, ProgressMonitor monitor)
+            throws OsmOAuthAuthorizationException, OsmTransferCanceledException {
         CheckParameterUtil.ensureParameterNotNull(requestToken, "requestToken");
-        CheckParameterUtil.ensureParameterNotNull(osmUserName, "osmUserName");
-        CheckParameterUtil.ensureParameterNotNull(osmPassword, "osmPassword");
+        CheckParameterUtil.ensureParameterNotNull(userName, "userName");
+        CheckParameterUtil.ensureParameterNotNull(password, "password");
         CheckParameterUtil.ensureParameterNotNull(privileges, "privileges");
 
         if (monitor == null) {
@@ -517,29 +521,29 @@ public class OsmOAuthAuthorizationClient {
             monitor.setTicksCount(4);
             monitor.indeterminateSubTask(tr("Initializing a session at the OSM website..."));
             SessionId sessionId = fetchOsmWebsiteSessionId();
-            sessionId.userName = osmUserName;
+            sessionId.userName = userName;
             if (canceled)
-                throw new OsmTransferCanceledException();
+                throw new OsmTransferCanceledException("Authorization canceled");
             monitor.worked(1);
 
-            monitor.indeterminateSubTask(tr("Authenticating the session for user ''{0}''...", osmUserName));
-            authenticateOsmSession(sessionId, osmUserName, osmPassword);
+            monitor.indeterminateSubTask(tr("Authenticating the session for user ''{0}''...", userName));
+            authenticateOsmSession(sessionId, userName, password);
             if (canceled)
-                throw new OsmTransferCanceledException();
+                throw new OsmTransferCanceledException("Authorization canceled");
             monitor.worked(1);
 
             monitor.indeterminateSubTask(tr("Authorizing request token ''{0}''...", requestToken.getKey()));
             sendAuthorisationRequest(sessionId, requestToken, privileges);
             if (canceled)
-                throw new OsmTransferCanceledException();
+                throw new OsmTransferCanceledException("Authorization canceled");
             monitor.worked(1);
 
             monitor.indeterminateSubTask(tr("Logging out session ''{0}''...", sessionId));
             logoutOsmSession(sessionId);
             if (canceled)
-                throw new OsmTransferCanceledException();
+                throw new OsmTransferCanceledException("Authorization canceled");
             monitor.worked(1);
-        } catch(OsmOAuthAuthorizationException e) {
+        } catch (OsmOAuthAuthorizationException e) {
             if (canceled)
                 throw new OsmTransferCanceledException(e);
             throw e;
diff --git a/src/org/openstreetmap/josm/gui/oauth/OsmPrivilegesPanel.java b/src/org/openstreetmap/josm/gui/oauth/OsmPrivilegesPanel.java
index 7ba9e94..2452589 100644
--- a/src/org/openstreetmap/josm/gui/oauth/OsmPrivilegesPanel.java
+++ b/src/org/openstreetmap/josm/gui/oauth/OsmPrivilegesPanel.java
@@ -26,14 +26,14 @@ public class OsmPrivilegesPanel extends VerticallyScrollablePanel{
     protected final void build() {
         setLayout(new GridBagLayout());
         GridBagConstraints gc = new GridBagConstraints();
-        setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
 
         // checkbox for "allow to upload map data"
         //
         gc.anchor = GridBagConstraints.NORTHWEST;
         gc.fill = GridBagConstraints.HORIZONTAL;
         gc.weightx = 1.0;
-        gc.insets = new Insets(0,0,3,3);
+        gc.insets = new Insets(0, 0, 3, 3);
         add(cbWriteApi = new JCheckBox(), gc);
         cbWriteApi.setText(tr("Allow to upload map data"));
         cbWriteApi.setToolTipText(tr("Select to grant JOSM the right to upload map data on your behalf"));
diff --git a/src/org/openstreetmap/josm/gui/oauth/RetrieveAccessTokenTask.java b/src/org/openstreetmap/josm/gui/oauth/RetrieveAccessTokenTask.java
index c2360c3..f6581d1 100644
--- a/src/org/openstreetmap/josm/gui/oauth/RetrieveAccessTokenTask.java
+++ b/src/org/openstreetmap/josm/gui/oauth/RetrieveAccessTokenTask.java
@@ -54,7 +54,7 @@ public class RetrieveAccessTokenTask extends PleaseWaitRunnable {
     @Override
     protected void cancel() {
         canceled = true;
-        synchronized(this) {
+        synchronized (this) {
             if (client != null) {
                 client.cancel();
             }
@@ -80,18 +80,18 @@ public class RetrieveAccessTokenTask extends PleaseWaitRunnable {
     @Override
     protected void realRun() throws SAXException, IOException, OsmTransferException {
         try {
-            synchronized(this) {
+            synchronized (this) {
                 client = new OsmOAuthAuthorizationClient(parameters, requestToken);
             }
             accessToken = client.getAccessToken(getProgressMonitor().createSubTaskMonitor(0, false));
-        } catch(OsmTransferCanceledException e) {
+        } catch (OsmTransferCanceledException e) {
             return;
         } catch (OsmOAuthAuthorizationException e) {
             Main.error(e);
             alertRetrievingAccessTokenFailed(e);
             accessToken = null;
         } finally {
-            synchronized(this) {
+            synchronized (this) {
                 client = null;
             }
         }
diff --git a/src/org/openstreetmap/josm/gui/oauth/RetrieveRequestTokenTask.java b/src/org/openstreetmap/josm/gui/oauth/RetrieveRequestTokenTask.java
index 24afda9..d65aba8 100644
--- a/src/org/openstreetmap/josm/gui/oauth/RetrieveRequestTokenTask.java
+++ b/src/org/openstreetmap/josm/gui/oauth/RetrieveRequestTokenTask.java
@@ -38,7 +38,7 @@ public class RetrieveRequestTokenTask extends PleaseWaitRunnable {
      * @param parameters the OAuth parameters. Must not be null.
      * @throws IllegalArgumentException if parameters is null.
      */
-    public RetrieveRequestTokenTask(Component parent, OAuthParameters parameters ) {
+    public RetrieveRequestTokenTask(Component parent, OAuthParameters parameters) {
         super(parent, tr("Retrieving OAuth Request Token..."), false /* don't ignore exceptions */);
         CheckParameterUtil.ensureParameterNotNull(parameters, "parameters");
         this.parameters = parameters;
@@ -48,7 +48,7 @@ public class RetrieveRequestTokenTask extends PleaseWaitRunnable {
     @Override
     protected void cancel() {
         canceled = true;
-        synchronized(this) {
+        synchronized (this) {
             if (client != null) {
                 client.cancel();
             }
@@ -74,18 +74,18 @@ public class RetrieveRequestTokenTask extends PleaseWaitRunnable {
     @Override
     protected void realRun() throws SAXException, IOException, OsmTransferException {
         try {
-            synchronized(this) {
+            synchronized (this) {
                 client = new OsmOAuthAuthorizationClient(parameters);
             }
             requestToken = client.getRequestToken(getProgressMonitor().createSubTaskMonitor(0, false));
-        } catch(OsmTransferCanceledException e) {
+        } catch (OsmTransferCanceledException e) {
             return;
         } catch (OsmOAuthAuthorizationException e) {
             Main.error(e);
             alertRetrievingRequestTokenFailed(e);
             requestToken = null;
         } finally {
-            synchronized(this) {
+            synchronized (this) {
                 client = null;
             }
         }
diff --git a/src/org/openstreetmap/josm/gui/oauth/SemiAutomaticAuthorizationUI.java b/src/org/openstreetmap/josm/gui/oauth/SemiAutomaticAuthorizationUI.java
index 9225f80..07a5a74 100644
--- a/src/org/openstreetmap/josm/gui/oauth/SemiAutomaticAuthorizationUI.java
+++ b/src/org/openstreetmap/josm/gui/oauth/SemiAutomaticAuthorizationUI.java
@@ -52,7 +52,7 @@ public class SemiAutomaticAuthorizationUI extends AbstractAuthorizationUI {
      */
     protected final void build() {
         setLayout(new BorderLayout());
-        setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
         pnlRetrieveRequestToken = new RetrieveRequestTokenPanel();
         pnlRetrieveAccessToken = new RetrieveAccessTokenPanel();
         pnlShowAccessToken = new ShowAccessTokenPanel();
@@ -109,21 +109,27 @@ public class SemiAutomaticAuthorizationUI extends AbstractAuthorizationUI {
     }
 
     /**
-     * This is the panel displayed in the first step of the semi-automatic authorisation
-     * process.
+     * This is the panel displayed in the first step of the semi-automatic authorisation process.
      */
     private class RetrieveRequestTokenPanel extends JPanel {
-        private JCheckBox cbShowAdvancedParameters;
+
+        /**
+         * Constructs a new {@code RetrieveRequestTokenPanel}.
+         */
+        public RetrieveRequestTokenPanel() {
+            build();
+        }
 
         protected JPanel buildAdvancedParametersPanel() {
             JPanel pnl = new JPanel(new GridBagLayout());
-            GridBagConstraints gc= new GridBagConstraints();
+            GridBagConstraints gc = new GridBagConstraints();
 
             gc.anchor = GridBagConstraints.NORTHWEST;
             gc.fill = GridBagConstraints.HORIZONTAL;
             gc.weightx = 0.0;
-            gc.insets = new Insets(0,0,0,3);
-            pnl.add(cbShowAdvancedParameters = new JCheckBox(), gc);
+            gc.insets = new Insets(0, 0, 0, 3);
+            JCheckBox cbShowAdvancedParameters = new JCheckBox();
+            pnl.add(cbShowAdvancedParameters, gc);
             cbShowAdvancedParameters.setSelected(false);
             cbShowAdvancedParameters.addItemListener(
                     new ItemListener() {
@@ -142,7 +148,7 @@ public class SemiAutomaticAuthorizationUI extends AbstractAuthorizationUI {
 
             gc.gridy = 1;
             gc.gridx = 1;
-            gc.insets = new Insets(3,0,3,0);
+            gc.insets = new Insets(3, 0, 3, 0);
             gc.fill = GridBagConstraints.BOTH;
             gc.weightx = 1.0;
             gc.weighty = 1.0;
@@ -150,7 +156,7 @@ public class SemiAutomaticAuthorizationUI extends AbstractAuthorizationUI {
             getAdvancedPropertiesPanel().setBorder(
                     BorderFactory.createCompoundBorder(
                             BorderFactory.createLineBorder(Color.GRAY, 1),
-                            BorderFactory.createEmptyBorder(3,3,3,3)
+                            BorderFactory.createEmptyBorder(3, 3, 3, 3)
                     )
             );
             getAdvancedPropertiesPanel().setVisible(false);
@@ -159,13 +165,13 @@ public class SemiAutomaticAuthorizationUI extends AbstractAuthorizationUI {
 
         protected JPanel buildCommandPanel() {
             JPanel pnl = new JPanel(new GridBagLayout());
-            GridBagConstraints gc= new GridBagConstraints();
+            GridBagConstraints gc = new GridBagConstraints();
 
             gc.anchor = GridBagConstraints.NORTHWEST;
             gc.fill = GridBagConstraints.BOTH;
             gc.weightx = 1.0;
             gc.weighty = 1.0;
-            gc.insets = new Insets(0,0,0,3);
+            gc.insets = new Insets(0, 0, 0, 3);
 
 
             HtmlPanel h = new HtmlPanel();
@@ -186,29 +192,31 @@ public class SemiAutomaticAuthorizationUI extends AbstractAuthorizationUI {
             return pnl;
 
         }
+
         protected final void build() {
-            setLayout(new BorderLayout(0,5));
+            setLayout(new BorderLayout(0, 5));
             JLabel lbl = new JLabel(tr("<html>Step 1/3: Retrieve an OAuth Request Token</html>"));
             lbl.setFont(lbl.getFont().deriveFont(16f));
             add(lbl, BorderLayout.NORTH);
             add(buildAdvancedParametersPanel(), BorderLayout.CENTER);
             add(buildCommandPanel(), BorderLayout.SOUTH);
         }
-
-        public RetrieveRequestTokenPanel() {
-            build();
-        }
     }
 
-
     /**
-     * This is the panel displayed in the second step of the semi-automatic authorization
-     * process.
+     * This is the panel displayed in the second step of the semi-automatic authorization process.
      */
     private class RetrieveAccessTokenPanel extends JPanel {
 
         private JosmTextField tfAuthoriseUrl;
 
+        /**
+         * Constructs a new {@code RetrieveAccessTokenPanel}.
+         */
+        public RetrieveAccessTokenPanel() {
+            build();
+        }
+
         protected JPanel buildTitlePanel() {
             JPanel pnl = new JPanel(new BorderLayout());
             JLabel lbl = new JLabel(tr("<html>Step 2/3: Authorize and retrieve an Access Token</html>"));
@@ -221,7 +229,7 @@ public class SemiAutomaticAuthorizationUI extends AbstractAuthorizationUI {
             JPanel pnl = new JPanel(new GridBagLayout());
             GridBagConstraints gc = new GridBagConstraints();
 
-            gc.anchor= GridBagConstraints.NORTHWEST;
+            gc.anchor = GridBagConstraints.NORTHWEST;
             gc.fill = GridBagConstraints.HORIZONTAL;
             gc.weightx = 1.0;
             gc.gridwidth = 2;
@@ -267,10 +275,6 @@ public class SemiAutomaticAuthorizationUI extends AbstractAuthorizationUI {
             add(buildActionPanel(), BorderLayout.SOUTH);
         }
 
-        public RetrieveAccessTokenPanel() {
-            build();
-        }
-
         public void setAuthoriseUrl(String url) {
             tfAuthoriseUrl.setText(url);
         }
@@ -297,6 +301,13 @@ public class SemiAutomaticAuthorizationUI extends AbstractAuthorizationUI {
      */
     class ShowAccessTokenPanel extends JPanel {
 
+        /**
+         * Constructs a new {@code ShowAccessTokenPanel}.
+         */
+        public ShowAccessTokenPanel() {
+            build();
+        }
+
         protected JPanel buildTitlePanel() {
             JPanel pnl = new JPanel(new BorderLayout());
             JLabel lbl = new JLabel(tr("<html>Step 3/3: Successfully retrieved an Access Token</html>"));
@@ -309,7 +320,7 @@ public class SemiAutomaticAuthorizationUI extends AbstractAuthorizationUI {
             JPanel pnl = new JPanel(new GridBagLayout());
             GridBagConstraints gc = new GridBagConstraints();
 
-            gc.anchor= GridBagConstraints.NORTHWEST;
+            gc.anchor = GridBagConstraints.NORTHWEST;
             gc.fill = GridBagConstraints.HORIZONTAL;
             gc.weightx = 1.0;
             HtmlPanel html = new HtmlPanel();
@@ -346,10 +357,6 @@ public class SemiAutomaticAuthorizationUI extends AbstractAuthorizationUI {
             add(buildActionPanel(), BorderLayout.SOUTH);
         }
 
-        public ShowAccessTokenPanel() {
-            build();
-        }
-
         /**
          * Action to go back to step 1 in the process
          */
@@ -378,7 +385,7 @@ public class SemiAutomaticAuthorizationUI extends AbstractAuthorizationUI {
 
         public RetrieveRequestTokenAction() {
             putValue(NAME, tr("Retrieve Request Token"));
-            putValue(SMALL_ICON, ImageProvider.get("oauth", "oauth"));
+            putValue(SMALL_ICON, ImageProvider.get("oauth", "oauth-small"));
             putValue(SHORT_DESCRIPTION, tr("Click to retrieve a Request Token"));
         }
 
@@ -414,7 +421,7 @@ public class SemiAutomaticAuthorizationUI extends AbstractAuthorizationUI {
 
         public RetrieveAccessTokenAction() {
             putValue(NAME, tr("Retrieve Access Token"));
-            putValue(SMALL_ICON, ImageProvider.get("oauth", "oauth"));
+            putValue(SMALL_ICON, ImageProvider.get("oauth", "oauth-small"));
             putValue(SHORT_DESCRIPTION, tr("Click to retrieve an Access Token"));
         }
 
@@ -451,7 +458,7 @@ public class SemiAutomaticAuthorizationUI extends AbstractAuthorizationUI {
 
         public TestAccessTokenAction() {
             putValue(NAME, tr("Test Access Token"));
-            putValue(SMALL_ICON, ImageProvider.get("oauth", "oauth"));
+            putValue(SMALL_ICON, ImageProvider.get("oauth", "oauth-small"));
             putValue(SHORT_DESCRIPTION, tr("Click to test the Access Token"));
         }
 
diff --git a/src/org/openstreetmap/josm/gui/oauth/TestAccessTokenTask.java b/src/org/openstreetmap/josm/gui/oauth/TestAccessTokenTask.java
index 10d6097..759b011 100644
--- a/src/org/openstreetmap/josm/gui/oauth/TestAccessTokenTask.java
+++ b/src/org/openstreetmap/josm/gui/oauth/TestAccessTokenTask.java
@@ -69,7 +69,7 @@ public class TestAccessTokenTask extends PleaseWaitRunnable {
     @Override
     protected void cancel() {
         canceled = true;
-        synchronized(this) {
+        synchronized (this) {
             if (connection != null) {
                 connection.disconnect();
             }
@@ -79,7 +79,7 @@ public class TestAccessTokenTask extends PleaseWaitRunnable {
     @Override
     protected void finish() {}
 
-    protected void sign(HttpURLConnection con) throws OAuthException{
+    protected void sign(HttpURLConnection con) throws OAuthException {
         OAuthConsumer consumer = oauthParameters.buildConsumer();
         consumer.setTokenWithSecret(token.getKey(), token.getSecret());
         consumer.sign(con);
@@ -90,7 +90,7 @@ public class TestAccessTokenTask extends PleaseWaitRunnable {
         url = url.trim();
 
         // remove trailing slashes
-        while(url.endsWith("/")) {
+        while (url.endsWith("/")) {
             url = url.substring(0, url.lastIndexOf('/'));
         }
         return url;
@@ -102,7 +102,7 @@ public class TestAccessTokenTask extends PleaseWaitRunnable {
             URL url = new URL(normalizeApiUrl(apiUrl) + "/0.6/user/details");
             authenticatorEnabled = DefaultAuthenticator.getInstance().isEnabled();
             DefaultAuthenticator.getInstance().setEnabled(false);
-            synchronized(this) {
+            synchronized (this) {
                 connection = Utils.openHttpConnection(url);
             }
 
@@ -112,20 +112,22 @@ public class TestAccessTokenTask extends PleaseWaitRunnable {
             connection.connect();
 
             if (connection.getResponseCode() == HttpURLConnection.HTTP_UNAUTHORIZED)
-                throw new OsmApiException(HttpURLConnection.HTTP_UNAUTHORIZED, tr("Retrieving user details with Access Token Key ''{0}'' was rejected.", token.getKey()), null);
+                throw new OsmApiException(HttpURLConnection.HTTP_UNAUTHORIZED,
+                        tr("Retrieving user details with Access Token Key ''{0}'' was rejected.", token.getKey()), null);
 
             if (connection.getResponseCode() == HttpURLConnection.HTTP_FORBIDDEN)
-                throw new OsmApiException(HttpURLConnection.HTTP_FORBIDDEN, tr("Retrieving user details with Access Token Key ''{0}'' was forbidden.", token.getKey()), null);
+                throw new OsmApiException(HttpURLConnection.HTTP_FORBIDDEN,
+                        tr("Retrieving user details with Access Token Key ''{0}'' was forbidden.", token.getKey()), null);
 
             if (connection.getResponseCode() != HttpURLConnection.HTTP_OK)
-                throw new OsmApiException(connection.getResponseCode(),connection.getHeaderField("Error"), null);
+                throw new OsmApiException(connection.getResponseCode(), connection.getHeaderField("Error"), null);
             Document d = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(connection.getInputStream());
             return OsmServerUserInfoReader.buildFromXML(d);
-        } catch(SAXException | ParserConfigurationException e) {
+        } catch (SAXException | ParserConfigurationException e) {
             throw new XmlParsingException(e);
-        } catch(IOException e) {
+        } catch (IOException e) {
             throw new OsmTransferException(e);
-        } catch(OAuthException e) {
+        } catch (OAuthException e) {
             throw new OsmOAuthAuthorizationException(e);
         } finally {
             DefaultAuthenticator.getInstance().setEnabled(authenticatorEnabled);
@@ -246,11 +248,11 @@ public class TestAccessTokenTask extends PleaseWaitRunnable {
             UserInfo userInfo = getUserDetails();
             if (canceled) return;
             notifySuccess(userInfo);
-        }catch(OsmOAuthAuthorizationException e) {
+        } catch (OsmOAuthAuthorizationException e) {
             if (canceled) return;
             Main.error(e);
             alertFailedSigning();
-        } catch(OsmApiException e) {
+        } catch (OsmApiException e) {
             if (canceled) return;
             Main.error(e);
             if (e.getResponseCode() == HttpURLConnection.HTTP_INTERNAL_ERROR) {
@@ -264,7 +266,7 @@ public class TestAccessTokenTask extends PleaseWaitRunnable {
                 return;
             }
             alertFailedConnection();
-        } catch(OsmTransferException e) {
+        } catch (OsmTransferException e) {
             if (canceled) return;
             Main.error(e);
             alertFailedConnection();
diff --git a/src/org/openstreetmap/josm/gui/oauth/package-info.java b/src/org/openstreetmap/josm/gui/oauth/package-info.java
new file mode 100644
index 0000000..6581792
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/oauth/package-info.java
@@ -0,0 +1,7 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Provides GUI classes for handling OAuth authentication to OSM API.
+ * Backend is <a href="https://github.com/mttkay/signpost">OAuth Signpost</a>.
+ */
+package org.openstreetmap.josm.gui.oauth;
diff --git a/src/org/openstreetmap/josm/gui/preferences/DefaultTabPreferenceSetting.java b/src/org/openstreetmap/josm/gui/preferences/DefaultTabPreferenceSetting.java
index 1896b04..c33dccf 100644
--- a/src/org/openstreetmap/josm/gui/preferences/DefaultTabPreferenceSetting.java
+++ b/src/org/openstreetmap/josm/gui/preferences/DefaultTabPreferenceSetting.java
@@ -19,7 +19,7 @@ public abstract class DefaultTabPreferenceSetting extends DefaultPreferenceSetti
     private final String title;
     private final JTabbedPane tabpane;
     private final Map<SubPreferenceSetting, Component> subSettingMap;
-    
+
     /**
      * Constructs a new {@code DefaultTabPreferenceSetting}.
      */
@@ -76,17 +76,17 @@ public abstract class DefaultTabPreferenceSetting extends DefaultPreferenceSetti
     public final JTabbedPane getTabPane() {
         return tabpane;
     }
-    
+
     protected final void createPreferenceTabWithScrollPane(PreferenceTabbedPane gui, JPanel panel) {
-        GBC a = GBC.eol().insets(-5,0,0,0);
+        GBC a = GBC.eol().insets(-5, 0, 0, 0);
         a.anchor = GBC.EAST;
-        
+
         JScrollPane scrollPane = new JScrollPane(panel);
         scrollPane.setBorder(null);
 
         JPanel tab = gui.createPreferenceTab(this);
         tab.add(scrollPane, GBC.eol().fill(GBC.BOTH));
-        tab.add(GBC.glue(0,10), a);
+        tab.add(GBC.glue(0, 10), a);
     }
 
     @Override
@@ -105,12 +105,12 @@ public abstract class DefaultTabPreferenceSetting extends DefaultPreferenceSetti
         }
         return false;
     }
-    
+
     @Override
     public final void addSubTab(SubPreferenceSetting sub, String title, Component component) {
         addSubTab(sub, title, component, null);
     }
-    
+
     @Override
     public final void addSubTab(SubPreferenceSetting sub, String title, Component component, String tip) {
         if (tabpane != null && component != null) {
@@ -118,14 +118,14 @@ public abstract class DefaultTabPreferenceSetting extends DefaultPreferenceSetti
             registerSubTab(sub, component);
         }
     }
-    
+
     @Override
     public final void registerSubTab(SubPreferenceSetting sub, Component component) {
         if (subSettingMap != null && sub != null && component != null) {
             subSettingMap.put(sub, component);
         }
     }
-    
+
     @Override
     public final Component getSubTab(SubPreferenceSetting sub) {
         return subSettingMap != null ? subSettingMap.get(sub) : null;
diff --git a/src/org/openstreetmap/josm/gui/preferences/PreferenceDialog.java b/src/org/openstreetmap/josm/gui/preferences/PreferenceDialog.java
index 2cadba7..f6f2207 100644
--- a/src/org/openstreetmap/josm/gui/preferences/PreferenceDialog.java
+++ b/src/org/openstreetmap/josm/gui/preferences/PreferenceDialog.java
@@ -53,11 +53,11 @@ public class PreferenceDialog extends JDialog {
         });
 
         JPanel btns = new JPanel(new FlowLayout(FlowLayout.CENTER));
-        btns.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        btns.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
         btns.add(new SideButton(new OKAction()));
         btns.add(new SideButton(new CancelAction()));
         btns.add(new SideButton(new ContextSensitiveHelpAction(HelpUtil.ht("/Action/Preferences"))));
-        pnl.add(expert, GBC.std().insets(5,0,0,0));
+        pnl.add(expert, GBC.std().insets(5, 0, 0, 0));
         pnl.add(btns, GBC.std().fill(GBC.HORIZONTAL));
         return pnl;
     }
@@ -67,7 +67,7 @@ public class PreferenceDialog extends JDialog {
         c.setLayout(new BorderLayout());
         c.add(tpPreferences = new PreferenceTabbedPane(), BorderLayout.CENTER);
         tpPreferences.buildGui();
-        tpPreferences.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        tpPreferences.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
         c.add(buildActionPanel(), BorderLayout.SOUTH);
 
         addWindowListener(new WindowEventHandler());
@@ -83,7 +83,7 @@ public class PreferenceDialog extends JDialog {
         this.setMinimumSize(new Dimension(600, 350));
         // set the maximum width to the current screen. If the dialog is opened on a
         // smaller screen than before, this will reset the stored preference.
-        this.setMaximumSize( Toolkit.getDefaultToolkit().getScreenSize());
+        this.setMaximumSize(Toolkit.getDefaultToolkit().getScreenSize());
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/gui/preferences/PreferenceSetting.java b/src/org/openstreetmap/josm/gui/preferences/PreferenceSetting.java
index 89ffe75..7af90b2 100644
--- a/src/org/openstreetmap/josm/gui/preferences/PreferenceSetting.java
+++ b/src/org/openstreetmap/josm/gui/preferences/PreferenceSetting.java
@@ -22,5 +22,5 @@ public interface PreferenceSetting {
      * Called to know if the preferences tab has only to be displayed in expert mode.
      * @return true if the tab has only to be displayed in expert mode, false otherwise.
      */
-    public boolean isExpert();
+    boolean isExpert();
 }
diff --git a/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java b/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java
index d26049b..9cb926f 100644
--- a/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java
+++ b/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java
@@ -72,6 +72,111 @@ import org.openstreetmap.josm.tools.ImageProvider;
  */
 public final class PreferenceTabbedPane extends JTabbedPane implements MouseWheelListener, ExpertModeChangeListener, ChangeListener {
 
+    private final class PluginDownloadAfterTask implements Runnable {
+        private final PluginPreference preference;
+        private final PluginDownloadTask task;
+        private final List<PluginInformation> toDownload;
+
+        private PluginDownloadAfterTask(PluginPreference preference, PluginDownloadTask task,
+                List<PluginInformation> toDownload) {
+            this.preference = preference;
+            this.task = task;
+            this.toDownload = toDownload;
+        }
+
+        @Override
+        public void run() {
+            boolean requiresRestart = false;
+
+            for (PreferenceSetting setting : settingsInitialized) {
+                if (setting.ok()) {
+                    requiresRestart = true;
+                }
+            }
+
+            // build the messages. We only display one message, including the status information from the plugin download task
+            // and - if necessary - a hint to restart JOSM
+            //
+            StringBuilder sb = new StringBuilder();
+            sb.append("<html>");
+            if (task != null && !task.isCanceled()) {
+                PluginHandler.refreshLocalUpdatedPluginInfo(task.getDownloadedPlugins());
+                sb.append(PluginPreference.buildDownloadSummary(task));
+            }
+            if (requiresRestart) {
+                sb.append(tr("You have to restart JOSM for some settings to take effect."));
+                sb.append("<br/><br/>");
+                sb.append(tr("Would you like to restart now?"));
+            }
+            sb.append("</html>");
+
+            // display the message, if necessary
+            //
+            if (requiresRestart) {
+                final ButtonSpec[] options = RestartAction.getButtonSpecs();
+                if (0 == HelpAwareOptionPane.showOptionDialog(
+                        Main.parent,
+                        sb.toString(),
+                        tr("Restart"),
+                        JOptionPane.INFORMATION_MESSAGE,
+                        null, /* no special icon */
+                        options,
+                        options[0],
+                        null /* no special help */
+                        )) {
+                    Main.main.menu.restart.actionPerformed(null);
+                }
+            } else if (task != null && !task.isCanceled()) {
+                JOptionPane.showMessageDialog(
+                        Main.parent,
+                        sb.toString(),
+                        tr("Warning"),
+                        JOptionPane.WARNING_MESSAGE
+                        );
+            }
+
+            // load the plugins that can be loaded at runtime
+            List<PluginInformation> newPlugins = preference.getNewlyActivatedPlugins();
+            if (newPlugins != null) {
+                Collection<PluginInformation> downloadedPlugins = null;
+                if (task != null && !task.isCanceled()) {
+                    downloadedPlugins = task.getDownloadedPlugins();
+                }
+                List<PluginInformation> toLoad = new ArrayList<>();
+                for (PluginInformation pi : newPlugins) {
+                    if (toDownload.contains(pi) && downloadedPlugins != null && !downloadedPlugins.contains(pi)) {
+                        continue; // failed download
+                    }
+                    if (pi.canloadatruntime) {
+                        toLoad.add(pi);
+                    }
+                }
+                // check if plugin dependences can also be loaded
+                Collection<PluginInformation> allPlugins = new HashSet<>(toLoad);
+                for (PluginProxy proxy : PluginHandler.pluginList) {
+                    allPlugins.add(proxy.getPluginInformation());
+                }
+                boolean removed;
+                do {
+                    removed = false;
+                    Iterator<PluginInformation> it = toLoad.iterator();
+                    while (it.hasNext()) {
+                        if (!PluginHandler.checkRequiredPluginsPreconditions(null, allPlugins, it.next(), requiresRestart)) {
+                            it.remove();
+                            removed = true;
+                        }
+                    }
+                } while (removed);
+
+                if (!toLoad.isEmpty()) {
+                    PluginHandler.loadPlugins(PreferenceTabbedPane.this, toLoad, null);
+                }
+            }
+
+            Main.parent.repaint();
+        }
+    }
+
     /**
      * Allows PreferenceSettings to do validation of entered values when ok was pressed.
      * If data is invalid then event can return false to cancel closing of preferences dialog.
@@ -85,9 +190,10 @@ public final class PreferenceTabbedPane extends JTabbedPane implements MouseWhee
         boolean validatePreferences();
     }
 
-    private static interface PreferenceTab {
-        public TabPreferenceSetting getTabPreferenceSetting();
-        public Component getComponent();
+    private interface PreferenceTab {
+        TabPreferenceSetting getTabPreferenceSetting();
+
+        Component getComponent();
     }
 
     public static final class PreferencePanel extends JPanel implements PreferenceTab {
@@ -101,16 +207,16 @@ public final class PreferenceTabbedPane extends JTabbedPane implements MouseWhee
         }
 
         protected void buildPanel() {
-            setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-            add(new JLabel(preferenceSetting.getTitle()), GBC.eol().insets(0,5,0,10).anchor(GBC.NORTHWEST));
+            setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+            add(new JLabel(preferenceSetting.getTitle()), GBC.eol().insets(0, 5, 0, 10).anchor(GBC.NORTHWEST));
 
             JLabel descLabel = new JLabel("<html>"+preferenceSetting.getDescription()+"</html>");
             descLabel.setFont(descLabel.getFont().deriveFont(Font.ITALIC));
-            add(descLabel, GBC.eol().insets(5,0,5,20).fill(GBC.HORIZONTAL));
+            add(descLabel, GBC.eol().insets(5, 0, 5, 20).fill(GBC.HORIZONTAL));
         }
 
         @Override
-        public final TabPreferenceSetting getTabPreferenceSetting() {
+        public TabPreferenceSetting getTabPreferenceSetting() {
             return preferenceSetting;
         }
 
@@ -133,7 +239,7 @@ public final class PreferenceTabbedPane extends JTabbedPane implements MouseWhee
         }
 
         @Override
-        public final TabPreferenceSetting getTabPreferenceSetting() {
+        public TabPreferenceSetting getTabPreferenceSetting() {
             return preferenceSetting;
         }
 
@@ -157,7 +263,7 @@ public final class PreferenceTabbedPane extends JTabbedPane implements MouseWhee
     /**
      * Add validation listener to currently open preferences dialog. Calling to removeValidationListener is not necessary, all listeners will
      * be automatically removed when dialog is closed
-     * @param validationListener
+     * @param validationListener validation listener to add
      */
     public void addValidationListener(ValidationListener validationListener) {
         validationListeners.add(validationListener);
@@ -192,12 +298,12 @@ public final class PreferenceTabbedPane extends JTabbedPane implements MouseWhee
         return p;
     }
 
-    private static interface TabIdentifier {
-        public boolean identify(TabPreferenceSetting tps, Object param);
+    private interface TabIdentifier {
+        boolean identify(TabPreferenceSetting tps, Object param);
     }
 
     private void selectTabBy(TabIdentifier method, Object param) {
-        for (int i=0; i<getTabCount(); i++) {
+        for (int i = 0; i < getTabCount(); i++) {
             Component c = getComponentAt(i);
             if (c instanceof PreferenceTab) {
                 PreferenceTab tab = (PreferenceTab) c;
@@ -210,7 +316,7 @@ public final class PreferenceTabbedPane extends JTabbedPane implements MouseWhee
     }
 
     public void selectTabByName(String name) {
-        selectTabBy(new TabIdentifier(){
+        selectTabBy(new TabIdentifier() {
             @Override
             public boolean identify(TabPreferenceSetting tps, Object name) {
                 return name != null && tps != null && tps.getIconName() != null && name.equals(tps.getIconName());
@@ -218,7 +324,7 @@ public final class PreferenceTabbedPane extends JTabbedPane implements MouseWhee
     }
 
     public void selectTabByPref(Class<? extends TabPreferenceSetting> clazz) {
-        selectTabBy(new TabIdentifier(){
+        selectTabBy(new TabIdentifier() {
             @Override
             public boolean identify(TabPreferenceSetting tps, Object clazz) {
                 return tps.getClass().isAssignableFrom((Class<?>) clazz);
@@ -230,7 +336,7 @@ public final class PreferenceTabbedPane extends JTabbedPane implements MouseWhee
             if (clazz.isInstance(setting)) {
                 final SubPreferenceSetting sub = (SubPreferenceSetting) setting;
                 final TabPreferenceSetting tab = sub.getTabPreferenceSetting(PreferenceTabbedPane.this);
-                selectTabBy(new TabIdentifier(){
+                selectTabBy(new TabIdentifier() {
                     @Override
                     public boolean identify(TabPreferenceSetting tps, Object unused) {
                         return tps.equals(tab);
@@ -245,7 +351,7 @@ public final class PreferenceTabbedPane extends JTabbedPane implements MouseWhee
      * Returns the {@code DisplayPreference} object.
      * @return the {@code DisplayPreference} object.
      */
-    public final DisplayPreference getDisplayPreference() {
+    public DisplayPreference getDisplayPreference() {
         return getSetting(DisplayPreference.class);
     }
 
@@ -253,7 +359,7 @@ public final class PreferenceTabbedPane extends JTabbedPane implements MouseWhee
      * Returns the {@code MapPreference} object.
      * @return the {@code MapPreference} object.
      */
-    public final MapPreference getMapPreference() {
+    public MapPreference getMapPreference() {
         return getSetting(MapPreference.class);
     }
 
@@ -261,7 +367,7 @@ public final class PreferenceTabbedPane extends JTabbedPane implements MouseWhee
      * Returns the {@code PluginPreference} object.
      * @return the {@code PluginPreference} object.
      */
-    public final PluginPreference getPluginPreference() {
+    public PluginPreference getPluginPreference() {
         return getSetting(PluginPreference.class);
     }
 
@@ -269,7 +375,7 @@ public final class PreferenceTabbedPane extends JTabbedPane implements MouseWhee
      * Returns the {@code ImageryPreference} object.
      * @return the {@code ImageryPreference} object.
      */
-    public final ImageryPreference getImageryPreference() {
+    public ImageryPreference getImageryPreference() {
         return getSetting(ImageryPreference.class);
     }
 
@@ -277,7 +383,7 @@ public final class PreferenceTabbedPane extends JTabbedPane implements MouseWhee
      * Returns the {@code ShortcutPreference} object.
      * @return the {@code ShortcutPreference} object.
      */
-    public final ShortcutPreference getShortcutPreference() {
+    public ShortcutPreference getShortcutPreference() {
         return getSetting(ShortcutPreference.class);
     }
 
@@ -286,7 +392,7 @@ public final class PreferenceTabbedPane extends JTabbedPane implements MouseWhee
      * @return the {@code ServerAccessPreference} object.
      * @since 6523
      */
-    public final ServerAccessPreference getServerPreference() {
+    public ServerAccessPreference getServerPreference() {
         return getSetting(ServerAccessPreference.class);
     }
 
@@ -295,7 +401,7 @@ public final class PreferenceTabbedPane extends JTabbedPane implements MouseWhee
      * @return the {@code ValidatorPreference} object.
      * @since 6665
      */
-    public final ValidatorPreference getValidatorPreference() {
+    public ValidatorPreference getValidatorPreference() {
         return getSetting(ValidatorPreference.class);
     }
 
@@ -303,13 +409,12 @@ public final class PreferenceTabbedPane extends JTabbedPane implements MouseWhee
      * Saves preferences.
      */
     public void savePreferences() {
-        // create a task for downloading plugins if the user has activated, yet not downloaded,
-        // new plugins
+        // create a task for downloading plugins if the user has activated, yet not downloaded, new plugins
         //
         final PluginPreference preference = getPluginPreference();
         final List<PluginInformation> toDownload = preference.getPluginsScheduledForUpdateOrDownload();
         final PluginDownloadTask task;
-        if (toDownload != null && ! toDownload.isEmpty()) {
+        if (toDownload != null && !toDownload.isEmpty()) {
             task = new PluginDownloadTask(this, toDownload, tr("Download plugins"));
         } else {
             task = null;
@@ -317,100 +422,7 @@ public final class PreferenceTabbedPane extends JTabbedPane implements MouseWhee
 
         // this is the task which will run *after* the plugins are downloaded
         //
-        final Runnable continuation = new Runnable() {
-            @Override
-            public void run() {
-                boolean requiresRestart = false;
-
-                for (PreferenceSetting setting : settingsInitialized) {
-                    if (setting.ok()) {
-                        requiresRestart = true;
-                    }
-                }
-
-                // build the messages. We only display one message, including the status
-                // information from the plugin download task and - if necessary - a hint
-                // to restart JOSM
-                //
-                StringBuilder sb = new StringBuilder();
-                sb.append("<html>");
-                if (task != null && !task.isCanceled()) {
-                    PluginHandler.refreshLocalUpdatedPluginInfo(task.getDownloadedPlugins());
-                    sb.append(PluginPreference.buildDownloadSummary(task));
-                }
-                if (requiresRestart) {
-                    sb.append(tr("You have to restart JOSM for some settings to take effect."));
-                    sb.append("<br/><br/>");
-                    sb.append(tr("Would you like to restart now?"));
-                }
-                sb.append("</html>");
-
-                // display the message, if necessary
-                //
-                if (requiresRestart) {
-                    final ButtonSpec [] options = RestartAction.getButtonSpecs();
-                    if (0 == HelpAwareOptionPane.showOptionDialog(
-                            Main.parent,
-                            sb.toString(),
-                            tr("Restart"),
-                            JOptionPane.INFORMATION_MESSAGE,
-                            null, /* no special icon */
-                            options,
-                            options[0],
-                            null /* no special help */
-                            )) {
-                        Main.main.menu.restart.actionPerformed(null);
-                    }
-                } else if (task != null && !task.isCanceled()) {
-                    JOptionPane.showMessageDialog(
-                            Main.parent,
-                            sb.toString(),
-                            tr("Warning"),
-                            JOptionPane.WARNING_MESSAGE
-                            );
-                }
-
-                // load the plugins that can be loaded at runtime
-                List<PluginInformation> newPlugins = preference.getNewlyActivatedPlugins();
-                if (newPlugins != null) {
-                    Collection<PluginInformation> downloadedPlugins = null;
-                    if (task != null && !task.isCanceled()) {
-                        downloadedPlugins = task.getDownloadedPlugins();
-                    }
-                    List<PluginInformation> toLoad = new ArrayList<>();
-                    for (PluginInformation pi : newPlugins) {
-                        if (toDownload.contains(pi) && downloadedPlugins != null && !downloadedPlugins.contains(pi)) {
-                            continue; // failed download
-                        }
-                        if (pi.canloadatruntime) {
-                            toLoad.add(pi);
-                        }
-                    }
-                    // check if plugin dependences can also be loaded
-                    Collection<PluginInformation> allPlugins = new HashSet<>(toLoad);
-                    for (PluginProxy proxy : PluginHandler.pluginList) {
-                        allPlugins.add(proxy.getPluginInformation());
-                    }
-                    boolean removed;
-                    do {
-                        removed = false;
-                        Iterator<PluginInformation> it = toLoad.iterator();
-                        while (it.hasNext()) {
-                            if (!PluginHandler.checkRequiredPluginsPreconditions(null, allPlugins, it.next(), requiresRestart)) {
-                                it.remove();
-                                removed = true;
-                            }
-                        }
-                    } while (removed);
-
-                    if (!toLoad.isEmpty()) {
-                        PluginHandler.loadPlugins(PreferenceTabbedPane.this, toLoad, null);
-                    }
-                }
-
-                Main.parent.repaint();
-            }
-        };
+        final Runnable continuation = new PluginDownloadAfterTask(preference, task, toDownload);
 
         if (task != null) {
             // if we have to launch a plugin download task we do it asynchronously, followed
@@ -488,7 +500,7 @@ public final class PreferenceTabbedPane extends JTabbedPane implements MouseWhee
                 if (expert || !tps.isExpert()) {
                     // Get icon
                     String iconName = tps.getIconName();
-                    ImageIcon icon = iconName != null && iconName.length() > 0 ? ImageProvider.get("preferences", iconName) : null;
+                    ImageIcon icon = iconName != null && !iconName.isEmpty() ? ImageProvider.get("preferences", iconName) : null;
                     // See #6985 - Force icons to be 48x48 pixels
                     if (icon != null && (icon.getIconHeight() != 48 || icon.getIconWidth() != 48)) {
                         icon = new ImageIcon(icon.getImage().getScaledInstance(48, 48, Image.SCALE_DEFAULT));
@@ -527,7 +539,7 @@ public final class PreferenceTabbedPane extends JTabbedPane implements MouseWhee
     public <T>  T getSetting(Class<? extends T> clazz) {
         for (PreferenceSetting setting:settings) {
             if (clazz.isAssignableFrom(setting.getClass()))
-                return (T)setting;
+                return (T) setting;
         }
         return null;
     }
@@ -565,7 +577,7 @@ public final class PreferenceTabbedPane extends JTabbedPane implements MouseWhee
     @Override
     public void mouseWheelMoved(MouseWheelEvent wev) {
         // Ensure the cursor is over the tab strip
-        if(super.indexAtLocation(wev.getPoint().x, wev.getPoint().y) < 0)
+        if (super.indexAtLocation(wev.getPoint().x, wev.getPoint().y) < 0)
             return;
 
         // Get currently selected tab
diff --git a/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java b/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java
index 794bdac..76b5c60 100644
--- a/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java
+++ b/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java
@@ -17,6 +17,8 @@ import java.awt.event.FocusEvent;
 import java.awt.event.KeyEvent;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.IOException;
@@ -32,8 +34,8 @@ import java.util.Collections;
 import java.util.Comparator;
 import java.util.EventObject;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.Iterator;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -48,6 +50,7 @@ import javax.swing.Box;
 import javax.swing.DefaultListModel;
 import javax.swing.DefaultListSelectionModel;
 import javax.swing.Icon;
+import javax.swing.ImageIcon;
 import javax.swing.JButton;
 import javax.swing.JCheckBox;
 import javax.swing.JComponent;
@@ -133,15 +136,15 @@ public abstract class SourceEditor extends JPanel {
         this.availableSourcesModel = new AvailableSourcesListModel(selectionModel);
         this.lstAvailableSources = new JList<>(availableSourcesModel);
         this.lstAvailableSources.setSelectionModel(selectionModel);
-        this.lstAvailableSources.setCellRenderer(new SourceEntryListCellRenderer());
+        final SourceEntryListCellRenderer listCellRenderer = new SourceEntryListCellRenderer();
+        this.lstAvailableSources.setCellRenderer(listCellRenderer);
         this.availableSourcesUrl = availableSourcesUrl;
         this.sourceProviders = sourceProviders;
 
         selectionModel = new DefaultListSelectionModel();
         activeSourcesModel = new ActiveSourcesModel(selectionModel);
         tblActiveSources = new JTable(activeSourcesModel) {
-            // some kind of hack to prevent the table from scrolling slightly to the
-            // right when clicking on the text
+            // some kind of hack to prevent the table from scrolling slightly to the right when clicking on the text
             @Override
             public void scrollRectToVisible(Rectangle aRect) {
                 super.scrollRectToVisible(new Rectangle(0, aRect.y, aRect.width, aRect.height));
@@ -164,6 +167,20 @@ public abstract class SourceEditor extends JPanel {
         }
 
         activeSourcesModel.addTableModelListener(new TableModelListener() {
+            @Override
+            public void tableChanged(TableModelEvent e) {
+                listCellRenderer.updateSources(activeSourcesModel.getSources());
+                lstAvailableSources.repaint();
+            }
+        });
+        tblActiveSources.addPropertyChangeListener(new PropertyChangeListener() {
+            @Override
+            public void propertyChange(PropertyChangeEvent evt) {
+                listCellRenderer.updateSources(activeSourcesModel.getSources());
+                lstAvailableSources.repaint();
+            }
+        });
+        activeSourcesModel.addTableModelListener(new TableModelListener() {
             // Force swing to show horizontal scrollbars for the JTable
             // Yes, this is a little ugly, but should work
             @Override
@@ -192,7 +209,7 @@ public abstract class SourceEditor extends JPanel {
 
         RemoveActiveSourcesAction removeActiveSourcesAction = new RemoveActiveSourcesAction();
         tblActiveSources.getSelectionModel().addListSelectionListener(removeActiveSourcesAction);
-        tblActiveSources.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE,0), "delete");
+        tblActiveSources.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0), "delete");
         tblActiveSources.getActionMap().put("delete", removeActiveSourcesAction);
 
         MoveUpDownAction moveUp = null;
@@ -308,10 +325,7 @@ public abstract class SourceEditor extends JPanel {
         bottomRightTB.add(new JButton(new ResetAction()));
         add(bottomRightTB, gbc);
 
-        /***
-         * Icon configuration
-         **/
-
+        // Icon configuration
         if (handleIcons) {
             buildIcons(gbc);
         }
@@ -326,7 +340,7 @@ public abstract class SourceEditor extends JPanel {
         tblIconPaths.setTableHeader(null);
         tblIconPaths.getColumnModel().getColumn(0).setCellEditor(new FileOrUrlCellEditor(false));
         tblIconPaths.setRowHeight(20);
-        tblIconPaths.putClientProperty("terminateEditOnFocusLost", true);
+        tblIconPaths.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
         iconPathsModel.setIconPaths(getInitialIconPathsList());
 
         EditIconPathAction editIconPathAction = new EditIconPathAction();
@@ -334,7 +348,7 @@ public abstract class SourceEditor extends JPanel {
 
         RemoveIconPathAction removeIconPathAction = new RemoveIconPathAction();
         tblIconPaths.getSelectionModel().addListSelectionListener(removeIconPathAction);
-        tblIconPaths.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE,0), "delete");
+        tblIconPaths.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0), "delete");
         tblIconPaths.getActionMap().put("delete", removeIconPathAction);
 
         gbc.gridx = 0;
@@ -430,6 +444,19 @@ public abstract class SourceEditor extends JPanel {
         return activeSourcesModel.getSources();
     }
 
+    /**
+     * Synchronously loads available sources and returns the parsed list.
+     */
+    Collection<ExtendedSourceEntry> loadAndGetAvailableSources() {
+        try {
+            final SourceLoader loader = new SourceLoader(availableSourcesUrl, sourceProviders);
+            loader.realRun();
+            return loader.sources;
+        } catch (Exception ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
     public void removeSources(Collection<Integer> idxs) {
         activeSourcesModel.removeIdxs(idxs);
     }
@@ -475,8 +502,8 @@ public abstract class SourceEditor extends JPanel {
 
         public void deleteSelected() {
             Iterator<ExtendedSourceEntry> it = data.iterator();
-            int i=0;
-            while(it.hasNext()) {
+            int i = 0;
+            while (it.hasNext()) {
                 it.next();
                 if (selectionModel.isSelectedIndex(i)) {
                     it.remove();
@@ -488,7 +515,7 @@ public abstract class SourceEditor extends JPanel {
 
         public List<ExtendedSourceEntry> getSelected() {
             List<ExtendedSourceEntry> ret = new ArrayList<>();
-            for(int i=0; i<data.size();i++) {
+            for (int i = 0; i < data.size(); i++) {
                 if (selectionModel.isSelectedIndex(i)) {
                     ret.add(data.get(i));
                 }
@@ -541,7 +568,7 @@ public abstract class SourceEditor extends JPanel {
             if (row < 0 || row >= getRowCount() || aValue == null)
                 return;
             if (canEnable && column == 0) {
-                data.get(row).active = ! data.get(row).active;
+                data.get(row).active = !data.get(row).active;
             }
         }
 
@@ -567,8 +594,8 @@ public abstract class SourceEditor extends JPanel {
 
         public void removeSelected() {
             Iterator<SourceEntry> it = data.iterator();
-            int i=0;
-            while(it.hasNext()) {
+            int i = 0;
+            while (it.hasNext()) {
                 it.next();
                 if (selectionModel.isSelectedIndex(i)) {
                     it.remove();
@@ -580,7 +607,7 @@ public abstract class SourceEditor extends JPanel {
 
         public void removeIdxs(Collection<Integer> idxs) {
             List<SourceEntry> newData = new ArrayList<>();
-            for (int i=0; i<data.size(); ++i) {
+            for (int i = 0; i < data.size(); ++i) {
                 if (!idxs.contains(i)) {
                     newData.add(data.get(i));
                 }
@@ -598,7 +625,7 @@ public abstract class SourceEditor extends JPanel {
             selectionModel.clearSelection();
             for (ExtendedSourceEntry info: sources) {
                 int pos = data.indexOf(info);
-                if (pos >=0) {
+                if (pos >= 0) {
                     selectionModel.addSelectionInterval(pos, pos);
                 }
             }
@@ -702,11 +729,11 @@ public abstract class SourceEditor extends JPanel {
     }
 
     private static void prepareFileChooser(String url, AbstractFileChooser fc) {
-        if (url == null || url.trim().length() == 0) return;
+        if (url == null || url.trim().isEmpty()) return;
         URL sourceUrl = null;
         try {
             sourceUrl = new URL(url);
-        } catch(MalformedURLException e) {
+        } catch (MalformedURLException e) {
             File f = new File(url);
             if (f.isFile()) {
                 f = f.getParentFile();
@@ -769,10 +796,12 @@ public abstract class SourceEditor extends JPanel {
                 public void insertUpdate(DocumentEvent e) {
                     updateOkButtonState();
                 }
+
                 @Override
                 public void removeUpdate(DocumentEvent e) {
                     updateOkButtonState();
                 }
+
                 @Override
                 public void changedUpdate(DocumentEvent e) {
                     updateOkButtonState();
@@ -939,6 +968,7 @@ public abstract class SourceEditor extends JPanel {
      */
     class MoveUpDownAction extends AbstractAction implements ListSelectionListener, TableModelListener {
         private final int increment;
+
         public MoveUpDownAction(boolean isDown) {
             increment = isDown ? 1 : -1;
             putValue(SMALL_ICON, isDown ? ImageProvider.get("dialogs", "down") : ImageProvider.get("dialogs", "up"));
@@ -998,7 +1028,7 @@ public abstract class SourceEditor extends JPanel {
                     }
                 }
                 if (!messages.isEmpty()) {
-                    ExtendedDialog dlg = new ExtendedDialog(Main.parent, tr("Warning"), new String [] { tr("Cancel"), tr("Continue anyway") });
+                    ExtendedDialog dlg = new ExtendedDialog(Main.parent, tr("Warning"), new String[] {tr("Cancel"), tr("Continue anyway")});
                     dlg.setButtonIcons(new Icon[] {
                         ImageProvider.get("cancel"),
                         new ImageProvider("ok").setMaxSize(ImageSizes.LARGEICON).addOverlay(
@@ -1035,6 +1065,7 @@ public abstract class SourceEditor extends JPanel {
     class ReloadSourcesAction extends AbstractAction {
         private final String url;
         private final transient List<SourceProvider> sourceProviders;
+
         public ReloadSourcesAction(String url, List<SourceProvider> sourceProviders) {
             putValue(NAME, tr("Reload"));
             putValue(SHORT_DESCRIPTION, tr(getStr(I18nString.RELOAD_ALL_AVAILABLE), url));
@@ -1052,7 +1083,7 @@ public abstract class SourceEditor extends JPanel {
     }
 
     protected static class IconPathTableModel extends AbstractTableModel {
-        private transient List<String> data;
+        private List<String> data;
         private DefaultListSelectionModel selectionModel;
 
         public IconPathTableModel(DefaultListSelectionModel selectionModel) {
@@ -1082,12 +1113,12 @@ public abstract class SourceEditor extends JPanel {
 
         @Override
         public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
-            updatePath(rowIndex, (String)aValue);
+            updatePath(rowIndex, (String) aValue);
         }
 
         public void setIconPaths(Collection<String> paths) {
             data.clear();
-            if (paths !=null) {
+            if (paths != null) {
                 data.addAll(paths);
             }
             sort();
@@ -1119,8 +1150,8 @@ public abstract class SourceEditor extends JPanel {
 
         public void removeSelected() {
             Iterator<String> it = data.iterator();
-            int i=0;
-            while(it.hasNext()) {
+            int i = 0;
+            while (it.hasNext()) {
                 it.next();
                 if (selectionModel.isSelectedIndex(i)) {
                     it.remove();
@@ -1162,7 +1193,7 @@ public abstract class SourceEditor extends JPanel {
         @Override
         public void actionPerformed(ActionEvent e) {
             iconPathsModel.addPath("");
-            tblIconPaths.editCellAt(iconPathsModel.getRowCount() -1,0);
+            tblIconPaths.editCellAt(iconPathsModel.getRowCount() -1, 0);
         }
     }
 
@@ -1214,6 +1245,11 @@ public abstract class SourceEditor extends JPanel {
     }
 
     static class SourceEntryListCellRenderer extends JLabel implements ListCellRenderer<ExtendedSourceEntry> {
+
+        private final ImageIcon GREEN_CHECK = ImageProvider.getIfAvailable("misc", "green_check");
+        private final ImageIcon GRAY_CHECK = ImageProvider.getIfAvailable("misc", "gray_check");
+        private final Map<String, SourceEntry> entryByUrl = new HashMap<>();
+
         @Override
         public Component getListCellRendererComponent(JList<? extends ExtendedSourceEntry> list, ExtendedSourceEntry value,
                 int index, boolean isSelected, boolean cellHasFocus) {
@@ -1231,8 +1267,19 @@ public abstract class SourceEditor extends JPanel {
             setFont(getFont().deriveFont(Font.PLAIN));
             setOpaque(true);
             setToolTipText(value.getTooltip());
+            final SourceEntry sourceEntry = entryByUrl.get(value.url);
+            setIcon(sourceEntry == null ? null : sourceEntry.active ? GREEN_CHECK : GRAY_CHECK);
             return this;
         }
+
+        public void updateSources(List<SourceEntry> sources) {
+            synchronized (entryByUrl) {
+                entryByUrl.clear();
+                for (SourceEntry i : sources) {
+                    entryByUrl.put(i.url, i);
+                }
+            }
+        }
     }
 
     class SourceLoader extends PleaseWaitRunnable {
@@ -1299,7 +1346,7 @@ public abstract class SourceEditor extends JPanel {
                     }
                     if (line.startsWith("\t")) {
                         Matcher m = Pattern.compile("^\t([^:]+): *(.+)$").matcher(line);
-                        if (! m.matches()) {
+                        if (!m.matches()) {
                             Main.error(tr(getStr(I18nString.ILLEGAL_FORMAT_OF_ENTRY), url, line));
                             continue;
                         }
@@ -1332,9 +1379,12 @@ public abstract class SourceEditor extends JPanel {
                                 last.description = value;
                             } else if ("min-josm-version".equals(key)) {
                                 try {
-                                    last.minJosmVersion = Integer.parseInt(value);
+                                    last.minJosmVersion = Integer.valueOf(value);
                                 } catch (NumberFormatException e) {
                                     // ignore
+                                    if (Main.isTraceEnabled()) {
+                                        Main.trace(e.getMessage());
+                                    }
                                 }
                             }
                         }
@@ -1465,7 +1515,7 @@ public abstract class SourceEditor extends JPanel {
         @Override
         public boolean isCellEditable(EventObject anEvent) {
             if (anEvent instanceof MouseEvent)
-                return ((MouseEvent)anEvent).getClickCount() >= 2;
+                return ((MouseEvent) anEvent).getClickCount() >= 2;
                 return true;
         }
 
@@ -1497,7 +1547,7 @@ public abstract class SourceEditor extends JPanel {
 
         @Override
         public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
-            setInitialValue((String)value);
+            setInitialValue((String) value);
             tfFileName.selectAll();
             return this;
         }
@@ -1578,7 +1628,7 @@ public abstract class SourceEditor extends JPanel {
          * @return The set of active source URLs.
          */
         public final Set<String> getActiveUrls() {
-            Set<String> urls = new HashSet<>();
+            Set<String> urls = new LinkedHashSet<>(); // retain order
             for (SourceEntry e : get()) {
                 if (e.active) {
                     urls.add(e.url);
diff --git a/src/org/openstreetmap/josm/gui/preferences/SourceEntry.java b/src/org/openstreetmap/josm/gui/preferences/SourceEntry.java
index f7db36a..8432aa5 100644
--- a/src/org/openstreetmap/josm/gui/preferences/SourceEntry.java
+++ b/src/org/openstreetmap/josm/gui/preferences/SourceEntry.java
@@ -89,7 +89,7 @@ public class SourceEntry {
      * @see #title
      * @see #active
      */
-    public SourceEntry(String url, String name, String title, Boolean active) {
+    public SourceEntry(String url, String name, String title, boolean active) {
         this(url, false, null, name, title, active);
     }
 
diff --git a/src/org/openstreetmap/josm/gui/preferences/SourceProvider.java b/src/org/openstreetmap/josm/gui/preferences/SourceProvider.java
index 97bf852..0304daa 100644
--- a/src/org/openstreetmap/josm/gui/preferences/SourceProvider.java
+++ b/src/org/openstreetmap/josm/gui/preferences/SourceProvider.java
@@ -5,5 +5,5 @@ import java.util.Collection;
 
 public interface SourceProvider {
 
-    public Collection<SourceEntry> getSources();
+    Collection<SourceEntry> getSources();
 }
diff --git a/src/org/openstreetmap/josm/gui/preferences/SubPreferenceSetting.java b/src/org/openstreetmap/josm/gui/preferences/SubPreferenceSetting.java
index 67857c2..d73c54a 100644
--- a/src/org/openstreetmap/josm/gui/preferences/SubPreferenceSetting.java
+++ b/src/org/openstreetmap/josm/gui/preferences/SubPreferenceSetting.java
@@ -12,5 +12,5 @@ public interface SubPreferenceSetting extends PreferenceSetting {
     /**
      * Returns the preference setting (displayed in the specified preferences tab pane) that contains this preference setting.
      */
-    public TabPreferenceSetting getTabPreferenceSetting(final PreferenceTabbedPane gui);
+    TabPreferenceSetting getTabPreferenceSetting(final PreferenceTabbedPane gui);
 }
diff --git a/src/org/openstreetmap/josm/gui/preferences/TabPreferenceSetting.java b/src/org/openstreetmap/josm/gui/preferences/TabPreferenceSetting.java
index d0d784e..2fea91a 100644
--- a/src/org/openstreetmap/josm/gui/preferences/TabPreferenceSetting.java
+++ b/src/org/openstreetmap/josm/gui/preferences/TabPreferenceSetting.java
@@ -9,31 +9,31 @@ import java.awt.Component;
  * This preference setting's addGui method is called after the user clicked the tab.
  */
 public interface TabPreferenceSetting extends PreferenceSetting {
-    
+
     /**
      * Called during preferences dialog initialization to display the preferences tab with the returned icon.
      * @return The icon name in the preferences folder.
      */
-    public String getIconName();
+    String getIconName();
 
     /**
      * Called during preferences tab initialization to display its title.
      * @return The title of this preferences tab.
      */
     String getTitle();
-    
+
     /**
      * Called during preferences dialog initialization to display the preferences tab with the returned tooltip.
      * @return The tooltip of this preferences tab.
      */
-    public String getTooltip();
+    String getTooltip();
 
     /**
-     * Called during preferences tab initialization to display a description in one sentence for this tab. 
+     * Called during preferences tab initialization to display a description in one sentence for this tab.
      * Will be displayed in italic under the title.
      * @return The description of this preferences tab.
      */
-    public String getDescription();
+    String getDescription();
 
     /**
      * Adds a new sub preference settings tab with the given title and component.
@@ -42,8 +42,8 @@ public interface TabPreferenceSetting extends PreferenceSetting {
      * @param component The tab component.
      * @since 5631
      */
-    public void addSubTab(SubPreferenceSetting sub, String title, Component component);
-    
+    void addSubTab(SubPreferenceSetting sub, String title, Component component);
+
     /**
      * Adds a new sub preference settings tab with the given title, component and tooltip.
      * @param sub The new sub preference settings.
@@ -52,7 +52,7 @@ public interface TabPreferenceSetting extends PreferenceSetting {
      * @param tip The tab tooltip.
      * @since 5631
      */
-    public void addSubTab(SubPreferenceSetting sub, String title, Component component, String tip);
+    void addSubTab(SubPreferenceSetting sub, String title, Component component, String tip);
 
     /**
      * Registers a sub preference settings to an existing tab component.
@@ -60,15 +60,15 @@ public interface TabPreferenceSetting extends PreferenceSetting {
      * @param component The component for which a tab already exists.
      * @since 5631
      */
-    public void registerSubTab(SubPreferenceSetting sub, Component component);
-    
+    void registerSubTab(SubPreferenceSetting sub, Component component);
+
     /**
      * Returns the tab component related to the specified sub preference settings
      * @param sub The requested sub preference settings.
      * @return The component related to the specified sub preference settings, or null.
      * @since 5631
      */
-    public Component getSubTab(SubPreferenceSetting sub);
+    Component getSubTab(SubPreferenceSetting sub);
 
     /**
      * Selects the specified sub preference settings, if applicable. Not all Tab preference settings need to implement this.
@@ -76,5 +76,5 @@ public interface TabPreferenceSetting extends PreferenceSetting {
      * @return true if the specified preference settings have been selected, false otherwise.
      * @since 5631
      */
-    public boolean selectSubTab(SubPreferenceSetting subPref);
+    boolean selectSubTab(SubPreferenceSetting subPref);
 }
diff --git a/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java b/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java
index d8d6da7..83d0175 100644
--- a/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java
+++ b/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java
@@ -24,10 +24,10 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 import javax.swing.AbstractAction;
 import javax.swing.Action;
@@ -82,7 +82,7 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
         private String name = "";
         private String icon = "";
         private ImageIcon ico = null;
-        private final Map<String, Object> parameters = new HashMap<>();
+        private final Map<String, Object> parameters = new ConcurrentHashMap<>();
 
         public ActionDefinition(Action action) {
             this.action = action;
@@ -112,7 +112,7 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
         }
 
         public String getDisplayTooltip() {
-            if(!name.isEmpty())
+            if (!name.isEmpty())
                 return name;
 
             Object tt = action.getValue(TaggingPreset.OPTIONAL_TOOLTIP_TEXT);
@@ -123,10 +123,10 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
         }
 
         public Icon getDisplayIcon() {
-            if(ico != null)
+            if (ico != null)
                 return ico;
             Object o = action.getValue(Action.LARGE_ICON_KEY);
-            if(o == null)
+            if (o == null)
                 o = action.getValue(Action.SMALL_ICON);
             return (Icon) o;
         }
@@ -155,7 +155,7 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
         public boolean hasParameters() {
             if (!(getAction() instanceof ParameterizedAction)) return false;
             for (Object o: parameters.values()) {
-                if (o!=null) return true;
+                if (o != null) return true;
             }
             return false;
         }
@@ -207,8 +207,8 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
             if (action instanceof ParameterizedAction) {
                 skip('(');
 
-                ParameterizedAction parametrizedAction = (ParameterizedAction)action;
-                Map<String, ActionParameter<?>> actionParams = new HashMap<>();
+                ParameterizedAction parametrizedAction = (ParameterizedAction) action;
+                Map<String, ActionParameter<?>> actionParams = new ConcurrentHashMap<>();
                 for (ActionParameter<?> param: parametrizedAction.getActionParameters()) {
                     actionParams.put(param.getName(), param);
                 }
@@ -216,8 +216,8 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
                 while (index < s.length && s[index] != ')') {
                     String paramName = readTillChar('=', '=');
                     skip('=');
-                    String paramValue = readTillChar(',',')');
-                    if (paramName.length() > 0) {
+                    String paramValue = readTillChar(',', ')');
+                    if (!paramName.isEmpty() && !paramValue.isEmpty()) {
                         ActionParameter<?> actionParam = actionParams.get(paramName);
                         if (actionParam != null) {
                             result.getParameters().put(paramName, actionParam.readFromString(paramValue));
@@ -233,10 +233,10 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
                 while (index < s.length && s[index] != '}') {
                     String paramName = readTillChar('=', '=');
                     skip('=');
-                    String paramValue = readTillChar(',','}');
-                    if ("icon".equals(paramName) && paramValue.length() > 0) {
+                    String paramValue = readTillChar(',', '}');
+                    if ("icon".equals(paramName) && !paramValue.isEmpty()) {
                         result.setIcon(paramValue);
-                    } else if("name".equals(paramName) && paramValue.length() > 0) {
+                    } else if ("name".equals(paramName) && !paramValue.isEmpty()) {
                         result.setName(paramValue);
                     }
                     skip(',');
@@ -248,7 +248,7 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
         }
 
         private void escape(String s) {
-            for (int i=0; i<s.length(); i++) {
+            for (int i = 0; i < s.length(); i++) {
                 char ch = s.charAt(i);
                 if (ch == '\\' || ch == '(' || ch == '{' || ch == ',' || ch == ')' || ch == '}' || ch == '=') {
                     result.append('\\');
@@ -264,14 +264,14 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
             result.setLength(0);
 
             String val = (String) action.getAction().getValue("toolbar");
-            if(val == null)
+            if (val == null)
                 return null;
             escape(val);
             if (action.getAction() instanceof ParameterizedAction) {
                 result.append('(');
-                List<ActionParameter<?>> params = ((ParameterizedAction)action.getAction()).getActionParameters();
-                for (int i=0; i<params.size(); i++) {
-                    ActionParameter<Object> param = (ActionParameter<Object>)params.get(i);
+                List<ActionParameter<?>> params = ((ParameterizedAction) action.getAction()).getActionParameters();
+                for (int i = 0; i < params.size(); i++) {
+                    ActionParameter<Object> param = (ActionParameter<Object>) params.get(i);
                     escape(param.getName());
                     result.append('=');
                     Object value = action.getParameters().get(param.getName());
@@ -288,20 +288,20 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
             if (action.getAction() instanceof AdaptableAction) {
                 boolean first = true;
                 String tmp = action.getName();
-                if(tmp.length() != 0) {
+                if (!tmp.isEmpty()) {
                     result.append(first ? "{" : ",");
                     result.append("name=");
                     escape(tmp);
                     first = false;
                 }
                 tmp = action.getIcon();
-                if(tmp.length() != 0) {
+                if (!tmp.isEmpty()) {
                     result.append(first ? "{" : ",");
                     result.append("icon=");
                     escape(tmp);
                     first = false;
                 }
-                if(!first) {
+                if (!first) {
                     result.append('}');
             }
             }
@@ -321,23 +321,22 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
 
         @Override
         public int getRowCount() {
-            int adaptable = ((currentAction.getAction() instanceof AdaptableAction) ? 2 : 0);
+            int adaptable = (currentAction.getAction() instanceof AdaptableAction) ? 2 : 0;
             if (currentAction.isSeparator() || !(currentAction.getAction() instanceof ParameterizedAction))
                 return adaptable;
-            ParameterizedAction pa = (ParameterizedAction)currentAction.getAction();
+            ParameterizedAction pa = (ParameterizedAction) currentAction.getAction();
             return pa.getActionParameters().size() + adaptable;
         }
 
         @SuppressWarnings("unchecked")
         private ActionParameter<Object> getParam(int index) {
-            ParameterizedAction pa = (ParameterizedAction)currentAction.getAction();
+            ParameterizedAction pa = (ParameterizedAction) currentAction.getAction();
             return (ActionParameter<Object>) pa.getActionParameters().get(index);
         }
 
         @Override
         public Object getValueAt(int rowIndex, int columnIndex) {
-            if(currentAction.getAction() instanceof AdaptableAction)
-            {
+            if (currentAction.getAction() instanceof AdaptableAction) {
                 if (rowIndex < 2) {
                     switch (columnIndex) {
                     case 0:
@@ -349,7 +348,7 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
                     }
                 } else {
                     rowIndex -= 2;
-            }
+                }
             }
             ActionParameter<Object> param = getParam(rowIndex);
             switch (columnIndex) {
@@ -369,20 +368,25 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
 
         @Override
         public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
-            if(currentAction.getAction() instanceof AdaptableAction)
-            {
+            String val = (String) aValue;
+            int paramIndex = rowIndex;
+
+            if (currentAction.getAction() instanceof AdaptableAction) {
                 if (rowIndex == 0) {
-                     currentAction.setName((String)aValue);
+                     currentAction.setName(val);
                      return;
                 } else if (rowIndex == 1) {
-                     currentAction.setIcon((String)aValue);
+                     currentAction.setIcon(val);
                      return;
                 } else {
-                    rowIndex -= 2;
+                    paramIndex -= 2;
+                }
             }
+            ActionParameter<Object> param = getParam(paramIndex);
+
+            if (param != null && !val.isEmpty()) {
+                currentAction.getParameters().put(param.getName(), param.readFromString((String) aValue));
             }
-            ActionParameter<Object> param = getParam(rowIndex);
-            currentAction.getParameters().put(param.getName(), param.readFromString((String)aValue));
         }
 
         public void setCurrentAction(ActionDefinition currentAction) {
@@ -397,8 +401,8 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
         private void setActionAndAdapt(ActionDefinition action) {
             this.act = action;
             doNotHide.setSelected(Main.pref.getBoolean("toolbar.always-visible", true));
-            remove.setVisible(act!=null);
-            shortcutEdit.setVisible(act!=null);
+            remove.setVisible(act != null);
+            shortcutEdit.setVisible(act != null);
         }
 
         private JMenuItem remove = new JMenuItem(new AbstractAction(tr("Remove from toolbar")) {
@@ -409,7 +413,7 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
                                 // get text definition of current action
                 String res = parser.saveAction(act);
                                 // remove the button from toolbar preferences
-                                t.remove( res );
+                                t.remove(res);
                                 Main.pref.putCollection("toolbar", t);
                                 Main.toolbar.refreshToolbarControl();
                             }
@@ -418,23 +422,23 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
         private JMenuItem configure = new JMenuItem(new AbstractAction(tr("Configure toolbar")) {
             @Override
             public void actionPerformed(ActionEvent e) {
-                    final PreferenceDialog p =new PreferenceDialog(Main.parent);
-                    p.selectPreferencesTabByName("toolbar");
-                    p.setVisible(true);
-                }
-            });
+                final PreferenceDialog p = new PreferenceDialog(Main.parent);
+                p.selectPreferencesTabByName("toolbar");
+                p.setVisible(true);
+            }
+        });
 
         private JMenuItem shortcutEdit = new JMenuItem(new AbstractAction(tr("Edit shortcut")) {
             @Override
             public void actionPerformed(ActionEvent e) {
-                    final PreferenceDialog p =new PreferenceDialog(Main.parent);
+                final PreferenceDialog p = new PreferenceDialog(Main.parent);
                 p.getTabbedPane().getShortcutPreference().setDefaultFilter(act.getDisplayName());
-                    p.selectPreferencesTabByName("shortcuts");
-                    p.setVisible(true);
+                p.selectPreferencesTabByName("shortcuts");
+                p.setVisible(true);
                 // refresh toolbar to try using changed shortcuts without restart
-                    Main.toolbar.refreshToolbarControl();
-                }
-            });
+                Main.toolbar.refreshToolbarControl();
+            }
+        });
 
         private JCheckBoxMenuItem doNotHide = new JCheckBoxMenuItem(new AbstractAction(tr("Do not hide toolbar and menu")) {
             @Override
@@ -442,16 +446,18 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
                 boolean sel = ((JCheckBoxMenuItem) e.getSource()).getState();
                 Main.pref.put("toolbar.always-visible", sel);
                 Main.pref.put("menu.always-visible", sel);
-        }
+            }
         });
+
         {
             addPopupMenuListener(new PopupMenuListener() {
                 @Override
                 public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
                     setActionAndAdapt(buttonActions.get(
-                            ((JPopupMenu)e.getSource()).getInvoker()
+                            ((JPopupMenu) e.getSource()).getInvoker()
                     ));
                 }
+
                 @Override
                 public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {}
 
@@ -471,13 +477,13 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
      * Key: Registered name (property "toolbar" of action).
      * Value: The action to execute.
      */
-    private final Map<String, Action> actions = new HashMap<>();
-    private final Map<String, Action> regactions = new HashMap<>();
+    private final Map<String, Action> actions = new ConcurrentHashMap<>();
+    private final Map<String, Action> regactions = new ConcurrentHashMap<>();
 
     private final DefaultMutableTreeNode rootActionsNode = new DefaultMutableTreeNode(tr("Actions"));
 
     public JToolBar control = new JToolBar();
-    private final Map<Object, ActionDefinition> buttonActions = new HashMap<>(30);
+    private final Map<Object, ActionDefinition> buttonActions = new ConcurrentHashMap<>(30);
 
     @Override
     public PreferenceSetting createPreferenceSetting() {
@@ -486,6 +492,109 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
 
     public class Settings extends DefaultTabPreferenceSetting {
 
+        private final class SelectedListTransferHandler extends TransferHandler {
+            @Override
+            @SuppressWarnings("unchecked")
+            protected Transferable createTransferable(JComponent c) {
+                List<ActionDefinition> actions = new ArrayList<>();
+                for (ActionDefinition o: ((JList<ActionDefinition>) c).getSelectedValuesList()) {
+                    actions.add(o);
+                }
+                return new ActionTransferable(actions);
+            }
+
+            @Override
+            public int getSourceActions(JComponent c) {
+                return TransferHandler.MOVE;
+            }
+
+            @Override
+            public boolean canImport(JComponent comp, DataFlavor[] transferFlavors) {
+                for (DataFlavor f : transferFlavors) {
+                    if (ACTION_FLAVOR.equals(f))
+                        return true;
+                }
+                return false;
+            }
+
+            @Override
+            public void exportAsDrag(JComponent comp, InputEvent e, int action) {
+                super.exportAsDrag(comp, e, action);
+                movingComponent = "list";
+            }
+
+            @Override
+            public boolean importData(JComponent comp, Transferable t) {
+                try {
+                    int dropIndex = selectedList.locationToIndex(selectedList.getMousePosition(true));
+                    @SuppressWarnings("unchecked")
+                    List<ActionDefinition> draggedData = (List<ActionDefinition>) t.getTransferData(ACTION_FLAVOR);
+
+                    Object leadItem = dropIndex >= 0 ? selected.elementAt(dropIndex) : null;
+                    int dataLength = draggedData.size();
+
+                    if (leadItem != null) {
+                        for (Object o: draggedData) {
+                            if (leadItem.equals(o))
+                                return false;
+                        }
+                    }
+
+                    int dragLeadIndex = -1;
+                    boolean localDrop = "list".equals(movingComponent);
+
+                    if (localDrop) {
+                        dragLeadIndex = selected.indexOf(draggedData.get(0));
+                        for (Object o: draggedData) {
+                            selected.removeElement(o);
+                        }
+                    }
+                    int[] indices = new int[dataLength];
+
+                    if (localDrop) {
+                        int adjustedLeadIndex = selected.indexOf(leadItem);
+                        int insertionAdjustment = dragLeadIndex <= adjustedLeadIndex ? 1 : 0;
+                        for (int i = 0; i < dataLength; i++) {
+                            selected.insertElementAt(draggedData.get(i), adjustedLeadIndex + insertionAdjustment + i);
+                            indices[i] = adjustedLeadIndex + insertionAdjustment + i;
+                        }
+                    } else {
+                        for (int i = 0; i < dataLength; i++) {
+                            selected.add(dropIndex, draggedData.get(i));
+                            indices[i] = dropIndex + i;
+                        }
+                    }
+                    selectedList.clearSelection();
+                    selectedList.setSelectedIndices(indices);
+                    movingComponent = "";
+                    return true;
+                } catch (Exception e) {
+                    Main.error(e);
+                }
+                return false;
+            }
+
+            @Override
+            protected void exportDone(JComponent source, Transferable data, int action) {
+                if ("list".equals(movingComponent)) {
+                    try {
+                        List<?> draggedData = (List<?>) data.getTransferData(ACTION_FLAVOR);
+                        boolean localDrop = selected.contains(draggedData.get(0));
+                        if (localDrop) {
+                            int[] indices = selectedList.getSelectedIndices();
+                            Arrays.sort(indices);
+                            for (int i = indices.length - 1; i >= 0; i--) {
+                                selected.remove(indices[i]);
+                            }
+                        }
+                    } catch (Exception e) {
+                        Main.error(e);
+                    }
+                    movingComponent = "";
+                }
+            }
+        }
+
         private final class Move implements ActionListener {
             @Override
             public void actionPerformed(ActionEvent e) {
@@ -501,7 +610,7 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
                         if (node.getUserObject() == null) {
                             selected.add(leadItem++, ActionDefinition.getSeparator());
                         } else if (node.getUserObject() instanceof Action) {
-                            selected.add(leadItem++, new ActionDefinition((Action)node.getUserObject()));
+                            selected.add(leadItem++, new ActionDefinition((Action) node.getUserObject()));
                         }
                     }
                 } else if (">".equals(e.getActionCommand()) && selectedList.getSelectedIndex() != -1) {
@@ -530,7 +639,7 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
 
         private class ActionTransferable implements Transferable {
 
-            private final DataFlavor[] flavors = new DataFlavor[] { ACTION_FLAVOR };
+            private final DataFlavor[] flavors = new DataFlavor[] {ACTION_FLAVOR};
 
             private final List<ActionDefinition> actions;
 
@@ -613,8 +722,7 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
                     if (node.getUserObject() == null) {
                         comp.setText(tr("Separator"));
                         comp.setIcon(ImageProvider.get("preferences/separator"));
-                    }
-                    else if (node.getUserObject() instanceof Action) {
+                    } else if (node.getUserObject() instanceof Action) {
                         Action action = (Action) node.getUserObject();
                         comp.setText((String) action.getValue(Action.NAME));
                         comp.setIcon((Icon) action.getValue(Action.SMALL_ICON));
@@ -637,13 +745,13 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
                         i = ImageProvider.get("preferences/separator");
                         s = tr("Separator");
                     }
-                    JLabel l = (JLabel)def.getListCellRendererComponent(list, s, index, isSelected, cellHasFocus);
+                    JLabel l = (JLabel) def.getListCellRendererComponent(list, s, index, isSelected, cellHasFocus);
                     l.setIcon(i);
                     return l;
                 }
             };
             selectedList.setCellRenderer(renderer);
-            selectedList.addListSelectionListener(new ListSelectionListener(){
+            selectedList.addListSelectionListener(new ListSelectionListener() {
                 @Override
                 public void valueChanged(ListSelectionEvent e) {
                     boolean sel = selectedList.getSelectedIndex() != -1;
@@ -658,122 +766,17 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
             });
 
             selectedList.setDragEnabled(true);
-            selectedList.setTransferHandler(new TransferHandler() {
-                @Override
-                @SuppressWarnings("unchecked")
-                protected Transferable createTransferable(JComponent c) {
-                    List<ActionDefinition> actions = new ArrayList<>();
-                    for (ActionDefinition o: ((JList<ActionDefinition>)c).getSelectedValuesList()) {
-                        actions.add(o);
-                    }
-                    return new ActionTransferable(actions);
-                }
-
-                @Override
-                public int getSourceActions(JComponent c) {
-                    return TransferHandler.MOVE;
-                }
-
-                @Override
-                public boolean canImport(JComponent comp, DataFlavor[] transferFlavors) {
-                    for (DataFlavor f : transferFlavors) {
-                        if (ACTION_FLAVOR.equals(f))
-                            return true;
-                    }
-                    return false;
-                }
-
-                @Override
-                public void exportAsDrag(JComponent comp, InputEvent e, int action) {
-                    super.exportAsDrag(comp, e, action);
-                    movingComponent = "list";
-                }
-
-                @Override
-                public boolean importData(JComponent comp, Transferable t) {
-                    try {
-                        int dropIndex = selectedList.locationToIndex(selectedList.getMousePosition(true));
-                        @SuppressWarnings("unchecked")
-                        List<ActionDefinition> draggedData = (List<ActionDefinition>) t.getTransferData(ACTION_FLAVOR);
-
-                        Object leadItem = dropIndex >= 0 ? selected.elementAt(dropIndex) : null;
-                        int dataLength = draggedData.size();
-
-                        if (leadItem != null) {
-                            for (Object o: draggedData) {
-                                if (leadItem.equals(o))
-                                    return false;
-                            }
-                        }
-
-                        int dragLeadIndex = -1;
-                        boolean localDrop = "list".equals(movingComponent);
-
-                        if (localDrop) {
-                            dragLeadIndex = selected.indexOf(draggedData.get(0));
-                            for (Object o: draggedData) {
-                                selected.removeElement(o);
-                            }
-                        }
-                        int[] indices = new int[dataLength];
-
-                        if (localDrop) {
-                            int adjustedLeadIndex = selected.indexOf(leadItem);
-                            int insertionAdjustment = dragLeadIndex <= adjustedLeadIndex ? 1 : 0;
-                            for (int i = 0; i < dataLength; i++) {
-                                selected.insertElementAt(draggedData.get(i), adjustedLeadIndex + insertionAdjustment + i);
-                                indices[i] = adjustedLeadIndex + insertionAdjustment + i;
-                            }
-                        } else {
-                            for (int i = 0; i < dataLength; i++) {
-                                selected.add(dropIndex, draggedData.get(i));
-                                indices[i] = dropIndex + i;
-                            }
-                        }
-                        selectedList.clearSelection();
-                        selectedList.setSelectedIndices(indices);
-                        movingComponent = "";
-                        return true;
-                    } catch (Exception e) {
-                        Main.error(e);
-                    }
-                    return false;
-                }
-
-                @Override
-                protected void exportDone(JComponent source, Transferable data, int action) {
-                    if ("list".equals(movingComponent)) {
-                        try {
-                            List<?> draggedData = (List<?>) data.getTransferData(ACTION_FLAVOR);
-                            boolean localDrop = selected.contains(draggedData.get(0));
-                            if (localDrop) {
-                                int[] indices = selectedList.getSelectedIndices();
-                                Arrays.sort(indices);
-                                for (int i = indices.length - 1; i >= 0; i--) {
-                                    selected.remove(indices[i]);
-                                }
-                            }
-                        } catch (Exception e) {
-                            Main.error(e);
-                        }
-                        movingComponent = "";
-                    }
-                }
-            });
+            selectedList.setTransferHandler(new SelectedListTransferHandler());
 
             actionsTree.setTransferHandler(new TransferHandler() {
                 private static final long serialVersionUID = 1L;
 
                 @Override
-                public int getSourceActions( JComponent c ){
+                public int getSourceActions(JComponent c) {
                     return TransferHandler.MOVE;
                 }
 
                 @Override
-                protected void exportDone(JComponent source, Transferable data, int action) {
-                }
-
-                @Override
                 protected Transferable createTransferable(JComponent c) {
                     TreePath[] paths = actionsTree.getSelectionPaths();
                     List<ActionDefinition> dragActions = new ArrayList<>();
@@ -782,8 +785,7 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
                         Object obj = node.getUserObject();
                         if (obj == null) {
                             dragActions.add(ActionDefinition.getSeparator());
-                        }
-                        else if (obj instanceof Action) {
+                        } else if (obj instanceof Action) {
                             dragActions.add(new ActionDefinition((Action) obj));
                         }
                     }
@@ -805,7 +807,7 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
             right.add(new JLabel(tr("Available")), GBC.eol());
             right.add(new JScrollPane(actionsTree), GBC.eol().fill(GBC.BOTH));
 
-            final JPanel buttons = new JPanel(new GridLayout(6,1));
+            final JPanel buttons = new JPanel(new GridLayout(6, 1));
             buttons.add(upButton = createButton("up"));
             buttons.add(addButton = createButton("<"));
             buttons.add(removeButton = createButton(">"));
@@ -813,31 +815,35 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
             updateEnabledState();
 
             final JPanel p = new JPanel();
-            p.setLayout(new LayoutManager(){
+            p.setLayout(new LayoutManager() {
                 @Override
                 public void addLayoutComponent(String name, Component comp) {}
+
                 @Override
                 public void removeLayoutComponent(Component comp) {}
+
                 @Override
                 public Dimension minimumLayoutSize(Container parent) {
                     Dimension l = left.getMinimumSize();
                     Dimension r = right.getMinimumSize();
                     Dimension b = buttons.getMinimumSize();
-                    return new Dimension(l.width+b.width+10+r.width,l.height+b.height+10+r.height);
+                    return new Dimension(l.width+b.width+10+r.width, l.height+b.height+10+r.height);
                 }
+
                 @Override
                 public Dimension preferredLayoutSize(Container parent) {
                     Dimension l = new Dimension(200, 200);
                     Dimension r = new Dimension(200, 200);
-                    return new Dimension(l.width+r.width+10+buttons.getPreferredSize().width,Math.max(l.height, r.height));
+                    return new Dimension(l.width+r.width+10+buttons.getPreferredSize().width, Math.max(l.height, r.height));
                 }
+
                 @Override
                 public void layoutContainer(Container parent) {
                     Dimension d = p.getSize();
                     Dimension b = buttons.getPreferredSize();
                     int width = (d.width-10-b.width)/2;
-                    left.setBounds(new Rectangle(0,0,width,d.height));
-                    right.setBounds(new Rectangle(width+10+b.width,0,width,d.height));
+                    left.setBounds(new Rectangle(0, 0, width, d.height));
+                    right.setBounds(new Rectangle(width+10+b.width, 0, width, d.height));
                     buttons.setBounds(new Rectangle(width+5, d.height/2-b.height/2, b.width, b.height));
                 }
             });
@@ -872,7 +878,7 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
                     t.add("|");
                 } else {
                     String res = parser.saveAction(action);
-                    if(res != null) {
+                    if (res != null) {
                         t.add(res);
                 }
             }
@@ -904,17 +910,17 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
         }
         for (MenuElement item : menuElement.getSubElements()) {
             if (item instanceof JMenuItem) {
-                JMenuItem menuItem = ((JMenuItem)item);
+                JMenuItem menuItem = (JMenuItem) item;
                 if (menuItem.getAction() != null) {
                     Action action = menuItem.getAction();
                     userObject = action;
                     Object tb = action.getValue("toolbar");
-                    if(tb == null) {
+                    if (tb == null) {
                         Main.info(tr("Toolbar action without name: {0}",
                         action.getClass().getName()));
                         continue;
                     } else if (!(tb instanceof String)) {
-                        if(!(tb instanceof Boolean) || (Boolean)tb) {
+                        if (!(tb instanceof Boolean) || (Boolean) tb) {
                             Main.info(tr("Strange toolbar value: {0}",
                             action.getClass().getName()));
                         }
@@ -922,7 +928,7 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
                     } else {
                         String toolbar = (String) tb;
                         Action r = actions.get(toolbar);
-                        if(r != null && r != action && !toolbar.startsWith("imagery_")) {
+                        if (r != null && r != action && !toolbar.startsWith("imagery_")) {
                             Main.info(tr("Toolbar action {0} overwritten: {1} gets {2}",
                             toolbar, r.getClass().getName(), action.getClass().getName()));
                         }
@@ -940,7 +946,7 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
 
     public Action getAction(String s) {
         Action e = actions.get(s);
-        if(e == null) {
+        if (e == null) {
             e = regactions.get(s);
         }
         return e;
@@ -949,9 +955,8 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
     private void loadActions() {
         rootActionsNode.removeAllChildren();
         loadAction(rootActionsNode, Main.main.menu);
-        for(Map.Entry<String, Action> a : regactions.entrySet())
-        {
-            if(actions.get(a.getKey()) == null) {
+        for (Map.Entry<String, Action> a : regactions.entrySet()) {
+            if (actions.get(a.getKey()) == null) {
                 rootActionsNode.add(new DefaultMutableTreeNode(a.getValue()));
             }
         }
@@ -979,7 +984,7 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
     private Collection<ActionDefinition> getDefinedActions() {
         loadActions();
 
-        Map<String, Action> allActions = new HashMap<>(regactions);
+        Map<String, Action> allActions = new ConcurrentHashMap<>(regactions);
         allActions.putAll(actions);
         ActionParser actionParser = new ActionParser(allActions);
 
@@ -990,7 +995,7 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
                 result.add(ActionDefinition.getSeparator());
             } else {
                 ActionDefinition a = actionParser.loadAction(s);
-                if(a != null) {
+                if (a != null) {
                     result.add(a);
                 } else {
                     Main.info("Could not load tool definition "+s);
@@ -1016,7 +1021,9 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
                 toolbar, r.getClass().getName(), action.getClass().getName()));
             }
         }
-        regactions.put(toolbar, action);
+        if (toolbar != null) {
+            regactions.put(toolbar, action);
+        }
         return action;
     }
 
@@ -1029,7 +1036,7 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
     public void refreshToolbarControl() {
         control.removeAll();
         buttonActions.clear();
-        boolean unregisterTab = Shortcut.findShortcut(KeyEvent.VK_TAB, 0)!=null;
+        boolean unregisterTab = Shortcut.findShortcut(KeyEvent.VK_TAB, 0) != null;
 
         for (ActionDefinition action : getDefinedActions()) {
             if (action.isSeparator()) {
@@ -1075,7 +1082,7 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
             if (!removeIfExists) return; // do nothing
             t.remove(definitionText);
         } else {
-            if (preferredIndex>=0 && preferredIndex < t.size()) {
+            if (preferredIndex >= 0 && preferredIndex < t.size()) {
                 t.add(preferredIndex, definitionText); // add to specified place
             } else {
                 t.add(definitionText); // add to the end
@@ -1103,28 +1110,28 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
         }
 
         String tt = action.getDisplayTooltip();
-        if (tt==null) {
-            tt="";
+        if (tt == null) {
+            tt = "";
         }
 
         if (sc == null || paramCode != 0) {
             String name = (String) action.getAction().getValue("toolbar");
-            if (name==null) {
-                name=action.getDisplayName();
+            if (name == null) {
+                name = action.getDisplayName();
             }
-            if (paramCode!=0) {
+            if (paramCode != 0) {
                 name = name+paramCode;
             }
-            String desc = action.getDisplayName() + ((paramCode==0)?"":action.parameters.toString());
+            String desc = action.getDisplayName() + ((paramCode == 0) ? "" : action.parameters.toString());
             sc = Shortcut.registerShortcut("toolbar:"+name, tr("Toolbar: {0}", desc),
                 KeyEvent.CHAR_UNDEFINED, Shortcut.NONE);
             Main.unregisterShortcut(sc);
             Main.registerActionShortcut(act, sc);
 
             // add shortcut info to the tooltip if needed
-            if (sc.getAssignedUser()) {
+            if (sc.isAssignedUser()) {
                 if (tt.startsWith("<html>") && tt.endsWith("</html>")) {
-                    tt = tt.substring(6,tt.length()-6);
+                    tt = tt.substring(6, tt.length()-6);
                 }
                 tt = Main.platform.makeTooltip(tt, sc);
             }
diff --git a/src/org/openstreetmap/josm/gui/preferences/advanced/AdvancedPreference.java b/src/org/openstreetmap/josm/gui/preferences/advanced/AdvancedPreference.java
index 55522ca..444a3a9 100644
--- a/src/org/openstreetmap/josm/gui/preferences/advanced/AdvancedPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/advanced/AdvancedPreference.java
@@ -14,6 +14,7 @@ import java.util.Collections;
 import java.util.Comparator;
 import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Objects;
@@ -39,7 +40,7 @@ import org.openstreetmap.josm.actions.DiskAccessAction;
 import org.openstreetmap.josm.data.CustomConfigurator;
 import org.openstreetmap.josm.data.Preferences;
 import org.openstreetmap.josm.data.Preferences.Setting;
-import org.openstreetmap.josm.gui.actionsupport.LogShowDialog;
+import org.openstreetmap.josm.gui.dialogs.LogShowDialog;
 import org.openstreetmap.josm.gui.preferences.DefaultTabPreferenceSetting;
 import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
 import org.openstreetmap.josm.gui.preferences.PreferenceSettingFactory;
@@ -48,6 +49,7 @@ import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.widgets.AbstractFileChooser;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
 import org.openstreetmap.josm.tools.GBC;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
  * Advanced preferences, allowing to set preference entries directly.
@@ -64,6 +66,11 @@ public final class AdvancedPreference extends DefaultTabPreferenceSetting {
         }
     }
 
+    private List<PrefEntry> allData;
+    private List<PrefEntry> displayData = new ArrayList<>();
+    private JosmTextField txtFilter;
+    private PreferencesTable table;
+
     private AdvancedPreference() {
         super(/* ICON(preferences/) */ "advanced", tr("Advanced Preferences"), tr("Setting Preference entries directly. Use with caution!"));
     }
@@ -73,11 +80,6 @@ public final class AdvancedPreference extends DefaultTabPreferenceSetting {
         return true;
     }
 
-    protected List<PrefEntry> allData;
-    protected List<PrefEntry> displayData = new ArrayList<>();
-    protected JosmTextField txtFilter;
-    protected PreferencesTable table;
-
     @Override
     public void addGui(final PreferenceTabbedPane gui) {
         JPanel p = gui.createPreferenceTab(this);
@@ -87,16 +89,22 @@ public final class AdvancedPreference extends DefaultTabPreferenceSetting {
         lbFilter.setLabelFor(txtFilter);
         p.add(lbFilter);
         p.add(txtFilter, GBC.eol().fill(GBC.HORIZONTAL));
-        txtFilter.getDocument().addDocumentListener(new DocumentListener(){
-            @Override public void changedUpdate(DocumentEvent e) {
+        txtFilter.getDocument().addDocumentListener(new DocumentListener() {
+            @Override
+            public void changedUpdate(DocumentEvent e) {
                 action();
             }
-            @Override public void insertUpdate(DocumentEvent e) {
+
+            @Override
+            public void insertUpdate(DocumentEvent e) {
                 action();
             }
-            @Override public void removeUpdate(DocumentEvent e) {
+
+            @Override
+            public void removeUpdate(DocumentEvent e) {
                 action();
             }
+
             private void action() {
                 applyFilter();
             }
@@ -107,15 +115,15 @@ public final class AdvancedPreference extends DefaultTabPreferenceSetting {
         table = new PreferencesTable(displayData);
         JScrollPane scroll = new JScrollPane(table);
         p.add(scroll, GBC.eol().fill(GBC.BOTH));
-        scroll.setPreferredSize(new Dimension(400,200));
+        scroll.setPreferredSize(new Dimension(400, 200));
 
         JButton add = new JButton(tr("Add"));
         p.add(Box.createHorizontalGlue(), GBC.std().fill(GBC.HORIZONTAL));
-        p.add(add, GBC.std().insets(0,5,0,0));
-        add.addActionListener(new ActionListener(){
+        p.add(add, GBC.std().insets(0, 5, 0, 0));
+        add.addActionListener(new ActionListener() {
             @Override public void actionPerformed(ActionEvent e) {
                 PrefEntry pe = table.addPreference(gui);
-                if (pe!=null) {
+                if (pe != null) {
                     allData.add(pe);
                     Collections.sort(allData);
                     applyFilter();
@@ -124,8 +132,8 @@ public final class AdvancedPreference extends DefaultTabPreferenceSetting {
         });
 
         JButton edit = new JButton(tr("Edit"));
-        p.add(edit, GBC.std().insets(5,5,5,0));
-        edit.addActionListener(new ActionListener(){
+        p.add(edit, GBC.std().insets(5, 5, 5, 0));
+        edit.addActionListener(new ActionListener() {
             @Override public void actionPerformed(ActionEvent e) {
                 boolean ok = table.editPreference(gui);
                 if (ok) applyFilter();
@@ -133,31 +141,31 @@ public final class AdvancedPreference extends DefaultTabPreferenceSetting {
         });
 
         JButton reset = new JButton(tr("Reset"));
-        p.add(reset, GBC.std().insets(0,5,0,0));
-        reset.addActionListener(new ActionListener(){
+        p.add(reset, GBC.std().insets(0, 5, 0, 0));
+        reset.addActionListener(new ActionListener() {
             @Override public void actionPerformed(ActionEvent e) {
                 table.resetPreferences(gui);
             }
         });
 
         JButton read = new JButton(tr("Read from file"));
-        p.add(read, GBC.std().insets(5,5,0,0));
-        read.addActionListener(new ActionListener(){
+        p.add(read, GBC.std().insets(5, 5, 0, 0));
+        read.addActionListener(new ActionListener() {
             @Override public void actionPerformed(ActionEvent e) {
                 readPreferencesFromXML();
             }
         });
 
         JButton export = new JButton(tr("Export selected items"));
-        p.add(export, GBC.std().insets(5,5,0,0));
-        export.addActionListener(new ActionListener(){
+        p.add(export, GBC.std().insets(5, 5, 0, 0));
+        export.addActionListener(new ActionListener() {
             @Override public void actionPerformed(ActionEvent e) {
                 exportSelectedToXML();
             }
         });
 
         final JButton more = new JButton(tr("More..."));
-        p.add(more, GBC.std().insets(5,5,0,0));
+        p.add(more, GBC.std().insets(5, 5, 0, 0));
         more.addActionListener(new ActionListener() {
             private JPopupMenu menu = buildPopupMenu();
             @Override public void actionPerformed(ActionEvent ev) {
@@ -177,7 +185,7 @@ public final class AdvancedPreference extends DefaultTabPreferenceSetting {
             // plugins preference keys may be changed directly later, after plugins are downloaded
             // so we do not want to show it in the table as "changed" now
             Setting<?> pluginSetting = orig.get("plugins");
-            if (pluginSetting!=null) {
+            if (pluginSetting != null) {
                 loaded.put("plugins", pluginSetting);
             }
         } else {
@@ -190,8 +198,9 @@ public final class AdvancedPreference extends DefaultTabPreferenceSetting {
         FileFilter filter = new FileFilter() {
             @Override
             public boolean accept(File f) {
-                return f.isDirectory() || f.getName().toLowerCase().endsWith(".xml");
+                return f.isDirectory() || Utils.hasExtension(f, "xml");
             }
+
             @Override
             public String getDescription() {
                 return tr("JOSM custom settings files (*.xml)");
@@ -201,7 +210,7 @@ public final class AdvancedPreference extends DefaultTabPreferenceSetting {
                 JFileChooser.FILES_ONLY, "customsettings.lastDirectory");
         if (fc != null) {
             File[] sel = fc.isMultiSelectionEnabled() ? fc.getSelectedFiles() : (new File[]{fc.getSelectedFile()});
-            if (sel.length==1 && !sel[0].getName().contains(".")) sel[0]=new File(sel[0].getAbsolutePath()+".xml");
+            if (sel.length == 1 && !sel[0].getName().contains(".")) sel[0] = new File(sel[0].getAbsolutePath()+".xml");
             return sel;
         }
         return new File[0];
@@ -311,7 +320,7 @@ public final class AdvancedPreference extends DefaultTabPreferenceSetting {
         return data;
     }
 
-    private Map<String,String> profileTypes = new LinkedHashMap<>();
+    private Map<String, String> profileTypes = new LinkedHashMap<>();
 
     private JPopupMenu buildPopupMenu() {
         JPopupMenu menu = new JPopupMenu();
@@ -320,7 +329,7 @@ public final class AdvancedPreference extends DefaultTabPreferenceSetting {
         profileTypes.put(marktr("toolbar"), "toolbar.*");
         profileTypes.put(marktr("imagery"), "imagery.*");
 
-        for (Entry<String,String> e: profileTypes.entrySet()) {
+        for (Entry<String, String> e: profileTypes.entrySet()) {
             menu.add(new ExportProfileAction(Main.pref, e.getKey(), e.getValue()));
         }
 
@@ -351,7 +360,7 @@ public final class AdvancedPreference extends DefaultTabPreferenceSetting {
     }
 
     private JMenu getProfileMenu() {
-        final JMenu p =new JMenu(tr("Load profile"));
+        final JMenu p = new JMenu(tr("Load profile"));
         p.addMenuListener(new MenuListener() {
             @Override
             public void menuSelected(MenuEvent me) {
@@ -361,8 +370,8 @@ public final class AdvancedPreference extends DefaultTabPreferenceSetting {
                     for (File f: files) {
                        String s = f.getName();
                        int idx = s.indexOf('_');
-                       if (idx>=0) {
-                            String t=s.substring(0,idx);
+                       if (idx >= 0) {
+                            String t = s.substring(0, idx);
                             if (profileTypes.containsKey(t)) {
                                 p.add(new ImportProfileAction(s, f, t));
                             }
@@ -374,8 +383,8 @@ public final class AdvancedPreference extends DefaultTabPreferenceSetting {
                     for (File f: files) {
                        String s = f.getName();
                        int idx = s.indexOf('_');
-                       if (idx>=0) {
-                            String t=s.substring(0,idx);
+                       if (idx >= 0) {
+                            String t = s.substring(0, idx);
                             if (profileTypes.containsKey(t)) {
                                 p.add(new ImportProfileAction(s, f, t));
                             }
@@ -383,10 +392,12 @@ public final class AdvancedPreference extends DefaultTabPreferenceSetting {
                     }
                 }
             }
+
             @Override
             public void menuDeselected(MenuEvent me) {
                 // Not implemented
             }
+
             @Override
             public void menuCanceled(MenuEvent me) {
                 // Not implemented
@@ -434,10 +445,10 @@ public final class AdvancedPreference extends DefaultTabPreferenceSetting {
             boolean canHas = true;
 
             // Make 'wmsplugin cache' search for e.g. 'cache.wmsplugin'
-            final String prefKeyLower = prefKey.toLowerCase();
-            final String prefValueLower = prefValue.toLowerCase();
+            final String prefKeyLower = prefKey.toLowerCase(Locale.ENGLISH);
+            final String prefValueLower = prefValue.toLowerCase(Locale.ENGLISH);
             for (String bit : input) {
-                bit = bit.toLowerCase();
+                bit = bit.toLowerCase(Locale.ENGLISH);
                 if (!prefKeyLower.contains(bit) && !prefValueLower.contains(bit)) {
                     canHas = false;
                     break;
@@ -447,7 +458,7 @@ public final class AdvancedPreference extends DefaultTabPreferenceSetting {
                 displayData.add(e);
             }
         }
-        if (table!=null) table.fireDataChanged();
+        if (table != null) table.fireDataChanged();
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/gui/preferences/advanced/ExportProfileAction.java b/src/org/openstreetmap/josm/gui/preferences/advanced/ExportProfileAction.java
index b858cd4..1ddca91 100644
--- a/src/org/openstreetmap/josm/gui/preferences/advanced/ExportProfileAction.java
+++ b/src/org/openstreetmap/josm/gui/preferences/advanced/ExportProfileAction.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.preferences.advanced;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -7,6 +7,7 @@ import java.awt.event.ActionEvent;
 import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 
 import javax.swing.AbstractAction;
@@ -20,6 +21,7 @@ import org.openstreetmap.josm.data.CustomConfigurator;
 import org.openstreetmap.josm.data.Preferences;
 import org.openstreetmap.josm.data.Preferences.Setting;
 import org.openstreetmap.josm.gui.widgets.AbstractFileChooser;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
  * Action that exports some fragment of settings to custom configuration file
@@ -54,7 +56,7 @@ public class ExportProfileAction extends AbstractAction {
             return;
         }
         File f = askUserForCustomSettingsFile();
-        if (f!=null)
+        if (f != null)
            CustomConfigurator.exportPreferencesKeysToFile(f.getAbsolutePath(), false, keys);
     }
 
@@ -64,17 +66,19 @@ public class ExportProfileAction extends AbstractAction {
         FileFilter filter = new FileFilter() {
             @Override
             public boolean accept(File f) {
-                return f.isDirectory() || f.getName().toLowerCase().endsWith(".xml") && f.getName().toLowerCase().startsWith(schemaKey);
+                return f.isDirectory() || Utils.hasExtension(f, "xml") && f.getName().toLowerCase(Locale.ENGLISH).startsWith(schemaKey);
             }
+
             @Override
             public String getDescription() {
                 return tr("JOSM custom settings files (*.xml)");
             }
         };
-        AbstractFileChooser fc = DiskAccessAction.createAndOpenFileChooser(false, false, title, filter, JFileChooser.FILES_ONLY, "customsettings.lastDirectory");
+        AbstractFileChooser fc = DiskAccessAction.createAndOpenFileChooser(false, false, title, filter,
+                JFileChooser.FILES_ONLY, "customsettings.lastDirectory");
         if (fc != null) {
             File sel = fc.getSelectedFile();
-            if (!sel.getName().endsWith(".xml")) sel=new File(sel.getAbsolutePath()+".xml");
+            if (!sel.getName().endsWith(".xml")) sel = new File(sel.getAbsolutePath()+".xml");
             if (!sel.getName().startsWith(schemaKey)) {
                 sel = new File(sel.getParentFile().getAbsolutePath()+"/"+schemaKey+"_"+sel.getName());
             }
diff --git a/src/org/openstreetmap/josm/gui/preferences/advanced/ListEditor.java b/src/org/openstreetmap/josm/gui/preferences/advanced/ListEditor.java
index ee26918..e1c53de 100644
--- a/src/org/openstreetmap/josm/gui/preferences/advanced/ListEditor.java
+++ b/src/org/openstreetmap/josm/gui/preferences/advanced/ListEditor.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.preferences.advanced;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -29,7 +29,7 @@ import org.openstreetmap.josm.tools.WindowGeometry;
  */
 public class ListEditor extends ExtendedDialog {
 
-    private transient List<String> data;
+    private List<String> data;
     private transient PrefEntry entry;
 
     /**
@@ -65,10 +65,10 @@ public class ListEditor extends ExtendedDialog {
 
     protected final JPanel build() {
         JPanel p = new JPanel(new GridBagLayout());
-        p.add(new JLabel(tr("Key: {0}", entry.getKey())), GBC.eol().insets(0,0,5,0));
+        p.add(new JLabel(tr("Key: {0}", entry.getKey())), GBC.eol().insets(0, 0, 5, 0));
         ListSettingTableModel listModel = new ListSettingTableModel();
         JTable table = new JTable(listModel);
-        table.putClientProperty("terminateEditOnFocusLost", true);
+        table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
         table.setTableHeader(null);
 
         DefaultCellEditor editor = new DefaultCellEditor(new JosmTextField());
@@ -76,7 +76,7 @@ public class ListEditor extends ExtendedDialog {
         table.setDefaultEditor(table.getColumnClass(0), editor);
 
         JScrollPane pane = new JScrollPane(table);
-        p.add(pane, GBC.eol().insets(5,10,0,0).fill());
+        p.add(pane, GBC.eol().insets(5, 10, 0, 0).fill());
         return p;
     }
 
@@ -103,8 +103,8 @@ public class ListEditor extends ExtendedDialog {
 
         @Override
         public void setValueAt(Object o, int row, int column) {
-            String s = (String)o;
-            if(row == data.size()) {
+            String s = (String) o;
+            if (row == data.size()) {
                 data.add(s);
                 fireTableRowsInserted(row+1, row+1);
             } else {
diff --git a/src/org/openstreetmap/josm/gui/preferences/advanced/ListListEditor.java b/src/org/openstreetmap/josm/gui/preferences/advanced/ListListEditor.java
index 5728133..edb8c59 100644
--- a/src/org/openstreetmap/josm/gui/preferences/advanced/ListListEditor.java
+++ b/src/org/openstreetmap/josm/gui/preferences/advanced/ListListEditor.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.preferences.advanced;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -38,7 +38,7 @@ import org.openstreetmap.josm.tools.WindowGeometry;
 public class ListListEditor extends ExtendedDialog {
 
     private EntryListModel entryModel;
-    private transient List<List<String>> data;
+    private List<List<String>> data;
     private transient PrefEntry entry;
 
     private JList<String> entryList;
@@ -76,7 +76,7 @@ public class ListListEditor extends ExtendedDialog {
 
     protected final JPanel build() {
         JPanel p = new JPanel(new GridBagLayout());
-        p.add(new JLabel(tr("Key: {0}", entry.getKey())), GBC.std(0,0).span(2).weight(1, 0).insets(0,0,5,10));
+        p.add(new JLabel(tr("Key: {0}", entry.getKey())), GBC.std(0, 0).span(2).weight(1, 0).insets(0, 0, 5, 10));
 
         JPanel left = new JPanel(new GridBagLayout());
 
@@ -97,11 +97,11 @@ public class ListListEditor extends ExtendedDialog {
 
         left.setPreferredSize(new Dimension(80, 0));
 
-        p.add(left, GBC.std(0,1).fill().weight(0.3, 1.0));
+        p.add(left, GBC.std(0, 1).fill().weight(0.3, 1.0));
 
         tableModel = new ListTableModel();
         table = new JTable(tableModel);
-        table.putClientProperty("terminateEditOnFocusLost", true);
+        table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
         table.setTableHeader(null);
 
         DefaultCellEditor editor = new DefaultCellEditor(new JosmTextField());
@@ -110,14 +110,14 @@ public class ListListEditor extends ExtendedDialog {
 
         JScrollPane pane = new JScrollPane(table);
         pane.setPreferredSize(new Dimension(140, 0));
-        p.add(pane, GBC.std(1,1).insets(5,0,0,0).fill().weight(0.7, 1.0));
+        p.add(pane, GBC.std(1, 1).insets(5, 0, 0, 0).fill().weight(0.7, 1.0));
         return p;
     }
 
     class EntryListModel extends AbstractListModel<String> {
         @Override
         public String getElementAt(int index) {
-            return (index+1) + ": " + data.get(index).toString();
+            return (index+1) + ": " + data.get(index);
         }
 
         @Override
@@ -215,7 +215,7 @@ public class ListListEditor extends ExtendedDialog {
 
         @Override
         public void setValueAt(Object o, int row, int column) {
-            String s = (String)o;
+            String s = (String) o;
             if (row == data().size()) {
                 data().add(s);
                 fireTableRowsInserted(row+1, row+1);
diff --git a/src/org/openstreetmap/josm/gui/preferences/advanced/MapListEditor.java b/src/org/openstreetmap/josm/gui/preferences/advanced/MapListEditor.java
index 110239f..f824c9d 100644
--- a/src/org/openstreetmap/josm/gui/preferences/advanced/MapListEditor.java
+++ b/src/org/openstreetmap/josm/gui/preferences/advanced/MapListEditor.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.preferences.advanced;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -48,8 +48,8 @@ public class MapListEditor extends ExtendedDialog {
     private JTable table;
     private MapTableModel tableModel;
 
-    private transient List<List<String>> dataKeys;
-    private transient List<List<String>> dataValues;
+    private List<List<String>> dataKeys;
+    private List<List<String>> dataValues;
     private Integer entryIdx;
 
     public MapListEditor(JComponent gui, PrefEntry entry, MapListSetting setting) {
@@ -80,11 +80,11 @@ public class MapListEditor extends ExtendedDialog {
      * Returns the data.
      * @return the preference data
      */
-    public List<Map<String,String>> getData() {
-        List<Map<String,String>> data = new ArrayList<>();
-        for (int i=0; i < dataKeys.size(); ++i) {
-            Map<String,String> m = new LinkedHashMap<>();
-            for (int j=0; j < dataKeys.get(i).size(); ++j) {
+    public List<Map<String, String>> getData() {
+        List<Map<String, String>> data = new ArrayList<>();
+        for (int i = 0; i < dataKeys.size(); ++i) {
+            Map<String, String> m = new LinkedHashMap<>();
+            for (int j = 0; j < dataKeys.get(i).size(); ++j) {
                 m.put(dataKeys.get(i).get(j), dataValues.get(i).get(j));
             }
             data.add(m);
@@ -94,7 +94,7 @@ public class MapListEditor extends ExtendedDialog {
 
     protected final JPanel build() {
         JPanel p = new JPanel(new GridBagLayout());
-        p.add(new JLabel(tr("Key: {0}", entry.getKey())), GBC.std(0,0).span(2).weight(1, 0).insets(0,0,5,10));
+        p.add(new JLabel(tr("Key: {0}", entry.getKey())), GBC.std(0, 0).span(2).weight(1, 0).insets(0, 0, 5, 10));
 
         JPanel left = new JPanel(new GridBagLayout());
 
@@ -115,11 +115,11 @@ public class MapListEditor extends ExtendedDialog {
 
         left.setPreferredSize(new Dimension(80, 0));
 
-        p.add(left, GBC.std(0,1).fill().weight(0.3, 1.0));
+        p.add(left, GBC.std(0, 1).fill().weight(0.3, 1.0));
 
         tableModel = new MapTableModel();
         table = new JTable(tableModel);
-        table.putClientProperty("terminateEditOnFocusLost", true);
+        table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
         table.getTableHeader().getColumnModel().getColumn(0).setHeaderValue(tr("Key"));
         table.getTableHeader().getColumnModel().getColumn(1).setHeaderValue(tr("Value"));
         DefaultCellEditor editor = new DefaultCellEditor(new JosmTextField());
@@ -128,7 +128,7 @@ public class MapListEditor extends ExtendedDialog {
 
         JScrollPane pane = new JScrollPane(table);
         pane.setPreferredSize(new Dimension(140, 0));
-        p.add(pane, GBC.std(1,1).insets(5,0,0,0).fill().weight(0.7, 1.0));
+        p.add(pane, GBC.std(1, 1).insets(5, 0, 0, 0).fill().weight(0.7, 1.0));
         return p;
     }
 
diff --git a/src/org/openstreetmap/josm/gui/preferences/advanced/PrefEntry.java b/src/org/openstreetmap/josm/gui/preferences/advanced/PrefEntry.java
index 85c2c54..3ec55de 100644
--- a/src/org/openstreetmap/josm/gui/preferences/advanced/PrefEntry.java
+++ b/src/org/openstreetmap/josm/gui/preferences/advanced/PrefEntry.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.preferences.advanced;
 
 import org.openstreetmap.josm.data.Preferences.Setting;
diff --git a/src/org/openstreetmap/josm/gui/preferences/advanced/PreferencesTable.java b/src/org/openstreetmap/josm/gui/preferences/advanced/PreferencesTable.java
index 4d33636..c781b29 100644
--- a/src/org/openstreetmap/josm/gui/preferences/advanced/PreferencesTable.java
+++ b/src/org/openstreetmap/josm/gui/preferences/advanced/PreferencesTable.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.preferences.advanced;
 
 import static org.openstreetmap.josm.tools.I18n.marktr;
@@ -52,7 +52,7 @@ public class PreferencesTable extends JTable {
         this.displayData = displayData;
         model = new AllSettingsTableModel();
         setModel(model);
-        putClientProperty("terminateEditOnFocusLost", true);
+        putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
         getColumnModel().getColumn(1).setCellRenderer(new SettingCellRenderer());
         getColumnModel().getColumn(1).setCellEditor(new SettingCellEditor());
 
@@ -152,11 +152,11 @@ public class PreferencesTable extends JTable {
      */
     public PrefEntry addPreference(final JComponent gui) {
         JPanel p = new JPanel(new GridBagLayout());
-        p.add(new JLabel(tr("Key")), GBC.std().insets(0,0,5,0));
+        p.add(new JLabel(tr("Key")), GBC.std().insets(0, 0, 5, 0));
         JosmTextField tkey = new JosmTextField("", 50);
-        p.add(tkey, GBC.eop().insets(5,0,0,0).fill(GBC.HORIZONTAL));
+        p.add(tkey, GBC.eop().insets(5, 0, 0, 0).fill(GBC.HORIZONTAL));
 
-        p.add(new JLabel(tr("Select Setting Type:")), GBC.eol().insets(5,15,5,0));
+        p.add(new JLabel(tr("Select Setting Type:")), GBC.eol().insets(5, 15, 5, 0));
 
         JRadioButton rbString = new JRadioButton(tr("Simple"));
         JRadioButton rbList = new JRadioButton(tr("List"));
@@ -300,11 +300,11 @@ public class PreferencesTable extends JTable {
         private Color backgroundColor = Main.pref.getUIColor("Table.background");
         private Color changedColor = Main.pref.getColor(
                          marktr("Advanced Background: Changed"),
-                         new Color(200,255,200));
+                         new Color(200, 255, 200));
         private Color foregroundColor = Main.pref.getUIColor("Table.foreground");
         private Color nonDefaultColor = Main.pref.getColor(
                             marktr("Advanced Background: NonDefault"),
-                            new Color(255,255,200));
+                            new Color(255, 255, 200));
 
         @Override
         public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
@@ -315,16 +315,16 @@ public class PreferencesTable extends JTable {
             Object val = setting.getValue();
             String display = val != null ? val.toString() : "<html><i><"+tr("unset")+"></i></html>";
 
-            JLabel label = (JLabel)super.getTableCellRendererComponent(table,
+            JLabel label = (JLabel) super.getTableCellRendererComponent(table,
                     display, isSelected, hasFocus, row, column);
 
             label.setBackground(backgroundColor);
             if (isSelected) {
                 label.setForeground(foregroundColor);
             }
-            if(pe.isChanged()) {
+            if (pe.isChanged()) {
                 label.setBackground(changedColor);
-            } else if(!pe.isDefault()) {
+            } else if (!pe.isDefault()) {
                 label.setBackground(nonDefaultColor);
             }
 
@@ -332,9 +332,8 @@ public class PreferencesTable extends JTable {
                 label.setFont(label.getFont().deriveFont(Font.BOLD));
             }
             val = pe.getDefaultValue().getValue();
-            if(val != null)
-            {
-                if(pe.isDefault()) {
+            if (val != null) {
+                if (pe.isDefault()) {
                     label.setToolTipText(tr("Current value is default."));
                 } else {
                     label.setToolTipText(tr("Default value is ''{0}''.", val));
diff --git a/src/org/openstreetmap/josm/gui/preferences/advanced/StringEditor.java b/src/org/openstreetmap/josm/gui/preferences/advanced/StringEditor.java
index 3190c22..35a5474 100644
--- a/src/org/openstreetmap/josm/gui/preferences/advanced/StringEditor.java
+++ b/src/org/openstreetmap/josm/gui/preferences/advanced/StringEditor.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.preferences.advanced;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -43,11 +43,11 @@ public class StringEditor extends ExtendedDialog {
 
     protected final JPanel build(String orig) {
         JPanel p = new JPanel(new GridBagLayout());
-        p.add(new JLabel(tr("Key: {0}", entry.getKey())), GBC.eol().insets(0,0,5,0));
+        p.add(new JLabel(tr("Key: {0}", entry.getKey())), GBC.eol().insets(0, 0, 5, 0));
 
         p.add(new JLabel(tr("Value: ")), GBC.std());
         tvalue = new JosmTextField(orig, 50);
-        p.add(tvalue, GBC.eop().insets(5,0,0,0).fill(GBC.HORIZONTAL));
+        p.add(tvalue, GBC.eop().insets(5, 0, 0, 0).fill(GBC.HORIZONTAL));
 
         return p;
     }
diff --git a/src/org/openstreetmap/josm/gui/preferences/audio/AudioPreference.java b/src/org/openstreetmap/josm/gui/preferences/audio/AudioPreference.java
index 254f115..6a3c246 100644
--- a/src/org/openstreetmap/josm/gui/preferences/audio/AudioPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/audio/AudioPreference.java
@@ -58,66 +58,71 @@ public final class AudioPreference extends DefaultTabPreferenceSetting {
         JPanel audio = new JPanel(new GridBagLayout());
 
         // audioMenuVisible
-        audioMenuVisible.setSelected(! Main.pref.getBoolean("audio.menuinvisible"));
+        audioMenuVisible.setSelected(!Main.pref.getBoolean("audio.menuinvisible"));
         audioMenuVisible.setToolTipText(tr("Show or hide the audio menu entry on the main menu bar."));
-        audio.add(audioMenuVisible, GBC.eol().insets(0,0,0,0));
+        audio.add(audioMenuVisible, GBC.eol().insets(0, 0, 0, 0));
 
         // audioTraceVisible
         markerAudioTraceVisible.setSelected(Main.pref.getBoolean("marker.traceaudio", true));
-        markerAudioTraceVisible.setToolTipText(tr("Display a moving icon representing the point on the synchronized track where the audio currently playing was recorded."));
-        audio.add(markerAudioTraceVisible, GBC.eol().insets(0,0,0,0));
+        markerAudioTraceVisible.setToolTipText(
+                tr("Display a moving icon representing the point on the synchronized track where the audio currently playing was recorded."));
+        audio.add(markerAudioTraceVisible, GBC.eol().insets(0, 0, 0, 0));
 
         // buttonLabels
         markerButtonLabels.setSelected(Main.pref.getBoolean("marker.buttonlabels", true));
         markerButtonLabels.setToolTipText(tr("Put text labels against audio (and image and web) markers as well as their button icons."));
-        audio.add(markerButtonLabels, GBC.eol().insets(0,0,0,0));
+        audio.add(markerButtonLabels, GBC.eol().insets(0, 0, 0, 0));
 
         audio.add(new JLabel(tr("When importing audio, make markers from...")), GBC.eol());
 
         // audioMarkersFromExplicitWaypoints
         audioMarkersFromExplicitWaypoints.setSelected(Main.pref.getBoolean("marker.audiofromexplicitwaypoints", true));
         audioMarkersFromExplicitWaypoints.setToolTipText(tr("When importing audio, apply it to any waypoints in the GPX layer."));
-        audio.add(audioMarkersFromExplicitWaypoints, GBC.eol().insets(10,0,0,0));
+        audio.add(audioMarkersFromExplicitWaypoints, GBC.eol().insets(10, 0, 0, 0));
 
         // audioMarkersFromUntimedWaypoints
         audioMarkersFromUntimedWaypoints.setSelected(Main.pref.getBoolean("marker.audiofromuntimedwaypoints", true));
         audioMarkersFromUntimedWaypoints.setToolTipText(tr("When importing audio, apply it to any waypoints in the GPX layer."));
-        audio.add(audioMarkersFromUntimedWaypoints, GBC.eol().insets(10,0,0,0));
+        audio.add(audioMarkersFromUntimedWaypoints, GBC.eol().insets(10, 0, 0, 0));
 
         // audioMarkersFromNamedTrackpoints
         audioMarkersFromNamedTrackpoints.setSelected(Main.pref.getBoolean("marker.audiofromnamedtrackpoints", false));
-        audioMarkersFromNamedTrackpoints.setToolTipText(tr("Automatically create audio markers from trackpoints (rather than explicit waypoints) with names or descriptions."));
-        audio.add(audioMarkersFromNamedTrackpoints, GBC.eol().insets(10,0,0,0));
+        audioMarkersFromNamedTrackpoints.setToolTipText(
+                tr("Automatically create audio markers from trackpoints (rather than explicit waypoints) with names or descriptions."));
+        audio.add(audioMarkersFromNamedTrackpoints, GBC.eol().insets(10, 0, 0, 0));
 
         // audioMarkersFromWavTimestamps
         audioMarkersFromWavTimestamps.setSelected(Main.pref.getBoolean("marker.audiofromwavtimestamps", false));
-        audioMarkersFromWavTimestamps.setToolTipText(tr("Create audio markers at the position on the track corresponding to the modified time of each audio WAV file imported."));
-        audio.add(audioMarkersFromWavTimestamps, GBC.eol().insets(10,0,0,0));
+        audioMarkersFromWavTimestamps.setToolTipText(
+                tr("Create audio markers at the position on the track corresponding to the modified time of each audio WAV file imported."));
+        audio.add(audioMarkersFromWavTimestamps, GBC.eol().insets(10, 0, 0, 0));
 
         // audioMarkersFromStart
         audioMarkersFromStart.setSelected(Main.pref.getBoolean("marker.audiofromstart"));
-        audioMarkersFromStart.setToolTipText(tr("Automatically create audio markers from trackpoints (rather than explicit waypoints) with names or descriptions."));
-        audio.add(audioMarkersFromStart, GBC.eol().insets(10,0,0,0));
+        audioMarkersFromStart.setToolTipText(
+                tr("Automatically create audio markers from trackpoints (rather than explicit waypoints) with names or descriptions."));
+        audio.add(audioMarkersFromStart, GBC.eol().insets(10, 0, 0, 0));
 
         audioForwardBackAmount.setText(Main.pref.get("audio.forwardbackamount", "10.0"));
         audioForwardBackAmount.setToolTipText(tr("The number of seconds to jump forward or back when the relevant button is pressed"));
         audio.add(new JLabel(tr("Forward/back time (seconds)")), GBC.std());
-        audio.add(audioForwardBackAmount, GBC.eol().fill(GBC.HORIZONTAL).insets(5,0,0,5));
+        audio.add(audioForwardBackAmount, GBC.eol().fill(GBC.HORIZONTAL).insets(5, 0, 0, 5));
 
         audioFastForwardMultiplier.setText(Main.pref.get("audio.fastfwdmultiplier", "1.3"));
         audioFastForwardMultiplier.setToolTipText(tr("The amount by which the speed is multiplied for fast forwarding"));
         audio.add(new JLabel(tr("Fast forward multiplier")), GBC.std());
-        audio.add(audioFastForwardMultiplier, GBC.eol().fill(GBC.HORIZONTAL).insets(5,0,0,5));
+        audio.add(audioFastForwardMultiplier, GBC.eol().fill(GBC.HORIZONTAL).insets(5, 0, 0, 5));
 
         audioLeadIn.setText(Main.pref.get("audio.leadin", "1.0"));
-        audioLeadIn.setToolTipText(tr("Playback starts this number of seconds before (or after, if negative) the audio track position requested"));
+        audioLeadIn.setToolTipText(
+                tr("Playback starts this number of seconds before (or after, if negative) the audio track position requested"));
         audio.add(new JLabel(tr("Lead-in time (seconds)")), GBC.std());
-        audio.add(audioLeadIn, GBC.eol().fill(GBC.HORIZONTAL).insets(5,0,0,5));
+        audio.add(audioLeadIn, GBC.eol().fill(GBC.HORIZONTAL).insets(5, 0, 0, 5));
 
         audioCalibration.setText(Main.pref.get("audio.calibration", "1.0"));
         audioCalibration.setToolTipText(tr("The ratio of voice recorder elapsed time to true elapsed time"));
         audio.add(new JLabel(tr("Voice recorder calibration")), GBC.std());
-        audio.add(audioCalibration, GBC.eol().fill(GBC.HORIZONTAL).insets(5,0,0,5));
+        audio.add(audioCalibration, GBC.eol().fill(GBC.HORIZONTAL).insets(5, 0, 0, 5));
 
         audio.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.VERTICAL));
 
@@ -126,7 +131,7 @@ public final class AudioPreference extends DefaultTabPreferenceSetting {
 
     @Override
     public boolean ok() {
-        Main.pref.put("audio.menuinvisible", ! audioMenuVisible.isSelected());
+        Main.pref.put("audio.menuinvisible", !audioMenuVisible.isSelected());
         Main.pref.put("marker.traceaudio", markerAudioTraceVisible.isSelected());
         Main.pref.put("marker.buttonlabels", markerButtonLabels.isSelected());
         Main.pref.put("marker.audiofromexplicitwaypoints", audioMarkersFromExplicitWaypoints.isSelected());
diff --git a/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java b/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java
index 13dcd74..7be8ed9 100644
--- a/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java
@@ -134,9 +134,9 @@ public class ColorPreference implements SubPreferenceSetting {
         String key;
         String value;
         Map<String, String> colorMap = new HashMap<>();
-        for(int row = 0; row < tableModel.getRowCount(); ++row) {
-            key = (String)tableModel.getValueAt(row, 0);
-            value = ColorHelper.color2html((Color)tableModel.getValueAt(row, 1));
+        for (int row = 0; row < tableModel.getRowCount(); ++row) {
+            key = (String) tableModel.getValueAt(row, 0);
+            value = ColorHelper.color2html((Color) tableModel.getValueAt(row, 1));
             colorMap.put(key, value);
         }
         return colorMap;
@@ -152,14 +152,14 @@ public class ColorPreference implements SubPreferenceSetting {
         setColorModel(Main.pref.getAllColors());
 
         colorEdit = new JButton(tr("Choose"));
-        colorEdit.addActionListener(new ActionListener(){
+        colorEdit.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
                 int sel = colors.getSelectedRow();
-                JColorChooser chooser = new JColorChooser((Color)colors.getValueAt(sel, 1));
+                JColorChooser chooser = new JColorChooser((Color) colors.getValueAt(sel, 1));
                 int answer = JOptionPane.showConfirmDialog(
                         gui, chooser,
-                        tr("Choose a color for {0}", getName((String)colors.getValueAt(sel, 0))),
+                        tr("Choose a color for {0}", getName((String) colors.getValueAt(sel, 0))),
                         JOptionPane.OK_CANCEL_OPTION,
                         JOptionPane.PLAIN_MESSAGE);
                 if (answer == JOptionPane.OK_OPTION) {
@@ -168,11 +168,11 @@ public class ColorPreference implements SubPreferenceSetting {
             }
         });
         defaultSet = new JButton(tr("Set to default"));
-        defaultSet.addActionListener(new ActionListener(){
+        defaultSet.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
                 int sel = colors.getSelectedRow();
-                String name = (String)colors.getValueAt(sel, 0);
+                String name = (String) colors.getValueAt(sel, 0);
                 Color c = Main.pref.getDefaultColor(name);
                 if (c != null) {
                     colors.setValueAt(c, sel, 1);
@@ -180,12 +180,11 @@ public class ColorPreference implements SubPreferenceSetting {
             }
         });
         JButton defaultAll = new JButton(tr("Set all to default"));
-        defaultAll.addActionListener(new ActionListener(){
+        defaultAll.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
-                for(int i = 0; i < colors.getRowCount(); ++i)
-                {
-                    String name = (String)colors.getValueAt(i, 0);
+                for (int i = 0; i < colors.getRowCount(); ++i) {
+                    String name = (String) colors.getValueAt(i, 0);
                     Color c = Main.pref.getDefaultColor(name);
                     if (c != null) {
                         colors.setValueAt(c, i, 1);
@@ -194,11 +193,11 @@ public class ColorPreference implements SubPreferenceSetting {
             }
         });
         remove = new JButton(tr("Remove"));
-        remove.addActionListener(new ActionListener(){
+        remove.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
                 int sel = colors.getSelectedRow();
-                del.add((String)colors.getValueAt(sel, 0));
+                del.add((String) colors.getValueAt(sel, 0));
                 tableModel.removeRow(sel);
             }
         });
@@ -207,9 +206,11 @@ public class ColorPreference implements SubPreferenceSetting {
         defaultSet.setEnabled(false);
 
         colors = new JTable(tableModel) {
-            @Override public boolean isCellEditable(int row, int column) {
+            @Override
+            public boolean isCellEditable(int row, int column) {
                 return false;
             }
+
             @Override public void valueChanged(ListSelectionEvent e) {
                 super.valueChanged(e);
                 int sel = getSelectedRow();
@@ -220,41 +221,41 @@ public class ColorPreference implements SubPreferenceSetting {
         };
         colors.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
         final TableCellRenderer oldColorsRenderer = colors.getDefaultRenderer(Object.class);
-        colors.setDefaultRenderer(Object.class, new TableCellRenderer(){
+        colors.setDefaultRenderer(Object.class, new TableCellRenderer() {
             @Override
             public Component getTableCellRendererComponent(JTable t, Object o, boolean selected, boolean focus, int row, int column) {
                 if (o == null)
                     return new JLabel();
                 if (column == 1) {
-                    JLabel l = new JLabel(ColorHelper.color2html((Color)o));
-                    l.setBackground((Color)o);
+                    JLabel l = new JLabel(ColorHelper.color2html((Color) o));
+                    l.setBackground((Color) o);
                     l.setOpaque(true);
                     return l;
                 }
-                return oldColorsRenderer.getTableCellRendererComponent(t,getName(o.toString()),selected,focus,row,column);
+                return oldColorsRenderer.getTableCellRendererComponent(t, getName(o.toString()), selected, focus, row, column);
             }
         });
         colors.getColumnModel().getColumn(1).setWidth(100);
         colors.setToolTipText(tr("Colors used by different objects in JOSM."));
-        colors.setPreferredScrollableViewportSize(new Dimension(100,112));
+        colors.setPreferredScrollableViewportSize(new Dimension(100, 112));
 
         JPanel panel = new JPanel(new GridBagLayout());
-        panel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
         JScrollPane scrollpane = new JScrollPane(colors);
-        scrollpane.setBorder(BorderFactory.createEmptyBorder( 0, 0, 0, 0 ));
+        scrollpane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
         panel.add(scrollpane, GBC.eol().fill(GBC.BOTH));
         JPanel buttonPanel = new JPanel(new GridBagLayout());
-        panel.add(buttonPanel, GBC.eol().insets(5,0,5,5).fill(GBC.HORIZONTAL));
+        panel.add(buttonPanel, GBC.eol().insets(5, 0, 5, 5).fill(GBC.HORIZONTAL));
         buttonPanel.add(Box.createHorizontalGlue(), GBC.std().fill(GBC.HORIZONTAL));
-        buttonPanel.add(colorEdit, GBC.std().insets(0,5,0,0));
-        buttonPanel.add(defaultSet, GBC.std().insets(5,5,5,0));
-        buttonPanel.add(defaultAll, GBC.std().insets(0,5,0,0));
-        buttonPanel.add(remove, GBC.std().insets(0,5,0,0));
+        buttonPanel.add(colorEdit, GBC.std().insets(0, 5, 0, 0));
+        buttonPanel.add(defaultSet, GBC.std().insets(5, 5, 5, 0));
+        buttonPanel.add(defaultAll, GBC.std().insets(0, 5, 0, 0));
+        buttonPanel.add(remove, GBC.std().insets(0, 5, 0, 0));
         gui.getDisplayPreference().addSubTab(this, tr("Colors"), panel);
     }
 
     Boolean isRemoveColor(int row) {
-        return ((String)colors.getValueAt(row, 0)).startsWith("layer ");
+        return ((String) colors.getValueAt(row, 0)).startsWith("layer ");
     }
 
     /**
@@ -275,15 +276,14 @@ public class ColorPreference implements SubPreferenceSetting {
 
     @Override
     public boolean ok() {
-        Boolean ret = false;
-        for(String d : del) {
+        boolean ret = false;
+        for (String d : del) {
             Main.pref.put("color."+d, null);
         }
         for (int i = 0; i < colors.getRowCount(); ++i) {
-            String key = (String)colors.getValueAt(i, 0);
-            if(Main.pref.putColor(key, (Color)colors.getValueAt(i, 1)))
-            {
-                if(key.startsWith("mappaint.")) {
+            String key = (String) colors.getValueAt(i, 0);
+            if (Main.pref.putColor(key, (Color) colors.getValueAt(i, 1))) {
+                if (key.startsWith("mappaint.")) {
                     ret = true;
                 }
             }
diff --git a/src/org/openstreetmap/josm/gui/preferences/display/DisplayPreference.java b/src/org/openstreetmap/josm/gui/preferences/display/DisplayPreference.java
index 003f17a..1c6c177 100644
--- a/src/org/openstreetmap/josm/gui/preferences/display/DisplayPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/display/DisplayPreference.java
@@ -1,4 +1,4 @@
-//License: GPL. For details, see LICENSE file.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.preferences.display;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -28,7 +28,8 @@ public final class DisplayPreference extends DefaultTabPreferenceSetting {
     }
 
     private DisplayPreference() {
-        super(/* ICON(preferences/) */ "display", tr("Display Settings"), tr("Various settings that influence the visual representation of the whole program."), false, new JTabbedPane());
+        super(/* ICON(preferences/) */ "display", tr("Display Settings"),
+                tr("Various settings that influence the visual representation of the whole program."), false, new JTabbedPane());
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/gui/preferences/display/DrawingPreference.java b/src/org/openstreetmap/josm/gui/preferences/display/DrawingPreference.java
index ea83113..583a3f2 100644
--- a/src/org/openstreetmap/josm/gui/preferences/display/DrawingPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/display/DrawingPreference.java
@@ -62,18 +62,18 @@ public class DrawingPreference implements SubPreferenceSetting {
         JPanel panel = gpxPanel;
 
         JScrollPane scrollpane = new JScrollPane(panel);
-        scrollpane.setBorder(BorderFactory.createEmptyBorder( 0, 0, 0, 0 ));
+        scrollpane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
         gui.getDisplayPreference().addSubTab(this, tr("GPS Points"), scrollpane);
         panel = new JPanel(new GridBagLayout());
-        panel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
 
         // directionHint
-        directionHint.addActionListener(new ActionListener(){
+        directionHint.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
-                if (directionHint.isSelected()){
+                if (directionHint.isSelected()) {
                     headArrow.setSelected(Main.pref.getBoolean("draw.segment.head_only", false));
-                }else{
+                } else {
                     headArrow.setSelected(false);
                 }
                 headArrow.setEnabled(directionHint.isSelected());
@@ -133,28 +133,28 @@ public class DrawingPreference implements SubPreferenceSetting {
         JLabel performanceLabel = new JLabel(tr("Options that affect drawing performance"));
 
         panel.add(new JLabel(tr("Segment drawing options")),
-                GBC.eop().insets(5,10,0,0));
-        panel.add(directionHint, GBC.eop().insets(20,0,0,0));
+                GBC.eop().insets(5, 10, 0, 0));
+        panel.add(directionHint, GBC.eop().insets(20, 0, 0, 0));
         panel.add(headArrow, GBC.eop().insets(40, 0, 0, 0));
-        panel.add(onewayArrow, GBC.eop().insets(20,0,0,0));
-        panel.add(segmentOrderNumber, GBC.eop().insets(20,0,0,0));
+        panel.add(onewayArrow, GBC.eop().insets(20, 0, 0, 0));
+        panel.add(segmentOrderNumber, GBC.eop().insets(20, 0, 0, 0));
 
         panel.add(new JLabel(tr("Select and draw mode options")),
-                GBC.eop().insets(5,10,0,0));
-        panel.add(virtualNodes, GBC.eop().insets(20,0,0,0));
+                GBC.eop().insets(5, 10, 0, 0));
+        panel.add(virtualNodes, GBC.eop().insets(20, 0, 0, 0));
         panel.add(drawHelperLine, GBC.eop().insets(20, 0, 0, 0));
 
-        panel.add(performanceLabel, GBC.eop().insets(5,10,0,0));
-        panel.add(useAntialiasing, GBC.eop().insets(20,0,0,0));
+        panel.add(performanceLabel, GBC.eop().insets(5, 10, 0, 0));
+        panel.add(useAntialiasing, GBC.eop().insets(20, 0, 0, 0));
         panel.add(useWireframeAntialiasing, GBC.eop().insets(20, 0, 0, 0));
-        panel.add(useHighlighting, GBC.eop().insets(20,0,0,0));
-        panel.add(outlineOnly, GBC.eol().insets(20,0,0,0));
+        panel.add(useHighlighting, GBC.eop().insets(20, 0, 0, 0));
+        panel.add(outlineOnly, GBC.eol().insets(20, 0, 0, 0));
 
         panel.add(new JLabel(tr("Other options")),
-                GBC.eop().insets(5,10,0,0));
-        panel.add(sourceBounds, GBC.eop().insets(20,0,0,0));
-        panel.add(inactive, GBC.eop().insets(20,0,0,0));
-        panel.add(discardableKeys, GBC.eop().insets(20,0,0,0));
+                GBC.eop().insets(5, 10, 0, 0));
+        panel.add(sourceBounds, GBC.eop().insets(20, 0, 0, 0));
+        panel.add(inactive, GBC.eop().insets(20, 0, 0, 0));
+        panel.add(discardableKeys, GBC.eop().insets(20, 0, 0, 0));
 
         ExpertToggleAction.addVisibilitySwitcher(performanceLabel);
         ExpertToggleAction.addVisibilitySwitcher(useAntialiasing);
@@ -165,7 +165,7 @@ public class DrawingPreference implements SubPreferenceSetting {
 
         panel.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.BOTH));
         scrollpane = new JScrollPane(panel);
-        scrollpane.setBorder(BorderFactory.createEmptyBorder( 0, 0, 0, 0 ));
+        scrollpane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
         gui.getDisplayPreference().addSubTab(this, tr("OSM Data"), scrollpane);
     }
 
@@ -189,8 +189,7 @@ public class DrawingPreference implements SubPreferenceSetting {
             if (vn < 1) {
                 vn = 8;
             }
-        }
-        else {
+        } else {
             vn = 0;
         }
         Main.pref.putInteger("mappaint.node.virtual-size", vn);
diff --git a/src/org/openstreetmap/josm/gui/preferences/display/GPXSettingsPanel.java b/src/org/openstreetmap/josm/gui/preferences/display/GPXSettingsPanel.java
index 54b08c6..0b8ac12 100644
--- a/src/org/openstreetmap/josm/gui/preferences/display/GPXSettingsPanel.java
+++ b/src/org/openstreetmap/josm/gui/preferences/display/GPXSettingsPanel.java
@@ -84,8 +84,8 @@ public class GPXSettingsPanel extends JPanel implements ValidationListener {
      */
     public GPXSettingsPanel(String layerName, boolean local, boolean nonlocal) {
         super(new GridBagLayout());
-        this.local=local;
-        this.nonlocal=nonlocal;
+        this.local = local;
+        this.nonlocal = nonlocal;
         this.layerName = "layer "+layerName;
         initComponents();
         loadPreferences();
@@ -97,22 +97,22 @@ public class GPXSettingsPanel extends JPanel implements ValidationListener {
     public GPXSettingsPanel() {
         super(new GridBagLayout());
         initComponents();
-        local=false;
-        nonlocal=false;
+        local = false;
+        nonlocal = false;
         loadPreferences(); // preferences -> controls
     }
 
     private void initComponents() {
-        setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
 
         // makeAutoMarkers
         makeAutoMarkers.setToolTipText(tr("Automatically make a marker layer from any waypoints when opening a GPX layer."));
         ExpertToggleAction.addVisibilitySwitcher(makeAutoMarkers);
-        add(makeAutoMarkers, GBC.eol().insets(20,0,0,5));
+        add(makeAutoMarkers, GBC.eol().insets(20, 0, 0, 5));
 
         // drawRawGpsLines
         ButtonGroup gpsLinesGroup = new ButtonGroup();
-        if (layerName!=null) {
+        if (layerName != null) {
             gpsLinesGroup.add(drawRawGpsLinesGlobal);
         }
         gpsLinesGroup.add(drawRawGpsLinesNone);
@@ -122,16 +122,16 @@ public class GPXSettingsPanel extends JPanel implements ValidationListener {
         /* ensure that default is in data base */
 
         JLabel label = new JLabel(tr("Draw lines between raw GPS points"));
-        add(label, GBC.eol().insets(20,0,0,0));
-        if (layerName!=null) {
-            add(drawRawGpsLinesGlobal, GBC.eol().insets(40,0,0,0));
+        add(label, GBC.eol().insets(20, 0, 0, 0));
+        if (layerName != null) {
+            add(drawRawGpsLinesGlobal, GBC.eol().insets(40, 0, 0, 0));
         }
-        add(drawRawGpsLinesNone, GBC.eol().insets(40,0,0,0));
-        if (layerName==null || local) {
-            add(drawRawGpsLinesLocal, GBC.eol().insets(40,0,0,0));
+        add(drawRawGpsLinesNone, GBC.eol().insets(40, 0, 0, 0));
+        if (layerName == null || local) {
+            add(drawRawGpsLinesLocal, GBC.eol().insets(40, 0, 0, 0));
         }
-        if (layerName==null || nonlocal) {
-            add(drawRawGpsLinesAll, GBC.eol().insets(40,0,0,0));
+        if (layerName == null || nonlocal) {
+            add(drawRawGpsLinesAll, GBC.eol().insets(40, 0, 0, 0));
         }
         ExpertToggleAction.addVisibilitySwitcher(label);
         ExpertToggleAction.addVisibilitySwitcher(drawRawGpsLinesGlobal);
@@ -139,10 +139,10 @@ public class GPXSettingsPanel extends JPanel implements ValidationListener {
         ExpertToggleAction.addVisibilitySwitcher(drawRawGpsLinesLocal);
         ExpertToggleAction.addVisibilitySwitcher(drawRawGpsLinesAll);
 
-        drawRawGpsLinesActionListener = new ActionListener(){
+        drawRawGpsLinesActionListener = new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
-                boolean f=drawRawGpsLinesNone.isSelected()||drawRawGpsLinesGlobal.isSelected();
+                boolean f = drawRawGpsLinesNone.isSelected() || drawRawGpsLinesGlobal.isSelected();
                 forceRawGpsLines.setEnabled(!f);
                 drawRawGpsMaxLineLength.setEnabled(!(f || drawRawGpsLinesLocal.isSelected()));
                 drawRawGpsMaxLineLengthLocal.setEnabled(!f);
@@ -158,28 +158,29 @@ public class GPXSettingsPanel extends JPanel implements ValidationListener {
         drawRawGpsLinesAll.addActionListener(drawRawGpsLinesActionListener);
 
         // drawRawGpsMaxLineLengthLocal
-        drawRawGpsMaxLineLengthLocal.setToolTipText(tr("Maximum length (in meters) to draw lines for local files. Set to ''-1'' to draw all lines."));
+        drawRawGpsMaxLineLengthLocal.setToolTipText(
+                tr("Maximum length (in meters) to draw lines for local files. Set to ''-1'' to draw all lines."));
         label = new JLabel(tr("Maximum length for local files (meters)"));
-        add(label, GBC.std().insets(40,0,0,0));
-        add(drawRawGpsMaxLineLengthLocal, GBC.eol().fill(GBC.HORIZONTAL).insets(5,0,0,5));
+        add(label, GBC.std().insets(40, 0, 0, 0));
+        add(drawRawGpsMaxLineLengthLocal, GBC.eol().fill(GBC.HORIZONTAL).insets(5, 0, 0, 5));
         ExpertToggleAction.addVisibilitySwitcher(label);
         ExpertToggleAction.addVisibilitySwitcher(drawRawGpsMaxLineLengthLocal);
 
         // drawRawGpsMaxLineLength
         drawRawGpsMaxLineLength.setToolTipText(tr("Maximum length (in meters) to draw lines. Set to ''-1'' to draw all lines."));
         label = new JLabel(tr("Maximum length (meters)"));
-        add(label, GBC.std().insets(40,0,0,0));
-        add(drawRawGpsMaxLineLength, GBC.eol().fill(GBC.HORIZONTAL).insets(5,0,0,5));
+        add(label, GBC.std().insets(40, 0, 0, 0));
+        add(drawRawGpsMaxLineLength, GBC.eol().fill(GBC.HORIZONTAL).insets(5, 0, 0, 5));
         ExpertToggleAction.addVisibilitySwitcher(label);
         ExpertToggleAction.addVisibilitySwitcher(drawRawGpsMaxLineLength);
 
         // forceRawGpsLines
         forceRawGpsLines.setToolTipText(tr("Force drawing of lines if the imported data contain no line information."));
-        add(forceRawGpsLines, GBC.eop().insets(40,0,0,0));
+        add(forceRawGpsLines, GBC.eop().insets(40, 0, 0, 0));
         ExpertToggleAction.addVisibilitySwitcher(forceRawGpsLines);
 
         // drawGpsArrows
-        drawGpsArrows.addActionListener(new ActionListener(){
+        drawGpsArrows.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
                 drawGpsArrowsFast.setEnabled(drawGpsArrows.isSelected() && drawGpsArrows.isEnabled());
@@ -187,31 +188,31 @@ public class GPXSettingsPanel extends JPanel implements ValidationListener {
             }
         });
         drawGpsArrows.setToolTipText(tr("Draw direction arrows for lines, connecting GPS points."));
-        add(drawGpsArrows, GBC.eop().insets(40,0,0,0));
+        add(drawGpsArrows, GBC.eop().insets(40, 0, 0, 0));
 
         // drawGpsArrowsFast
         drawGpsArrowsFast.setToolTipText(tr("Draw the direction arrows using table lookups instead of complex math."));
-        add(drawGpsArrowsFast, GBC.eop().insets(60,0,0,0));
+        add(drawGpsArrowsFast, GBC.eop().insets(60, 0, 0, 0));
         ExpertToggleAction.addVisibilitySwitcher(drawGpsArrowsFast);
 
         // drawGpsArrowsMinDist
         drawGpsArrowsMinDist.setToolTipText(tr("Do not draw arrows if they are not at least this distance away from the last one."));
-        add(new JLabel(tr("Minimum distance (pixels)")), GBC.std().insets(60,0,0,0));
-        add(drawGpsArrowsMinDist, GBC.eol().fill(GBC.HORIZONTAL).insets(5,0,0,5));
+        add(new JLabel(tr("Minimum distance (pixels)")), GBC.std().insets(60, 0, 0, 0));
+        add(drawGpsArrowsMinDist, GBC.eol().fill(GBC.HORIZONTAL).insets(5, 0, 0, 5));
 
         // hdopCircleGpsPoints
         hdopCircleGpsPoints.setToolTipText(tr("Draw a circle from HDOP value."));
-        add(hdopCircleGpsPoints, GBC.eop().insets(20,0,0,0));
+        add(hdopCircleGpsPoints, GBC.eop().insets(20, 0, 0, 0));
         ExpertToggleAction.addVisibilitySwitcher(hdopCircleGpsPoints);
 
         // largeGpsPoints
         largeGpsPoints.setToolTipText(tr("Draw larger dots for the GPS points."));
-        add(largeGpsPoints, GBC.eop().insets(20,0,0,0));
+        add(largeGpsPoints, GBC.eop().insets(20, 0, 0, 0));
 
         // drawLineWidth
         drawLineWidth.setToolTipText(tr("Width of drawn GPX line (0 for default)"));
-        add(new JLabel(tr("Drawing width of GPX lines")), GBC.std().insets(20,0,0,0));
-        add(drawLineWidth, GBC.eol().fill(GBC.HORIZONTAL).insets(5,0,0,5));
+        add(new JLabel(tr("Drawing width of GPX lines")), GBC.std().insets(20, 0, 0, 0));
+        add(drawLineWidth, GBC.eol().fill(GBC.HORIZONTAL).insets(5, 0, 0, 5));
 
         // antialiasing
         useGpsAntialiasing.setToolTipText(tr("Apply antialiasing to the GPX lines resulting in a smoother appearance."));
@@ -220,7 +221,7 @@ public class GPXSettingsPanel extends JPanel implements ValidationListener {
 
         // colorTracks
         ButtonGroup colorGroup = new ButtonGroup();
-        if (layerName!=null) {
+        if (layerName != null) {
             colorGroup.add(colorTypeGlobal);
         }
         colorGroup.add(colorTypeNone);
@@ -229,14 +230,14 @@ public class GPXSettingsPanel extends JPanel implements ValidationListener {
         colorGroup.add(colorTypeDilution);
         colorGroup.add(colorTypeTime);
 
-        colorTypeVelocity.addChangeListener(new ChangeListener(){
+        colorTypeVelocity.addChangeListener(new ChangeListener() {
             @Override
             public void stateChanged(ChangeEvent e) {
                 colorTypeVelocityTune.setEnabled(colorTypeVelocity.isSelected());
                 colorDynamic.setEnabled(colorTypeVelocity.isSelected() || colorTypeDilution.isSelected());
             }
         });
-        colorTypeDilution.addChangeListener(new ChangeListener(){
+        colorTypeDilution.addChangeListener(new ChangeListener() {
             @Override
             public void stateChanged(ChangeEvent e) {
                 colorDynamic.setEnabled(colorTypeVelocity.isSelected() || colorTypeDilution.isSelected());
@@ -246,7 +247,8 @@ public class GPXSettingsPanel extends JPanel implements ValidationListener {
         colorTypeNone.setToolTipText(tr("All points and track segments will have the same color. Can be customized in Layer Manager."));
         colorTypeVelocity.setToolTipText(tr("Colors points and track segments by velocity."));
         colorTypeDirection.setToolTipText(tr("Colors points and track segments by direction."));
-        colorTypeDilution.setToolTipText(tr("Colors points and track segments by dilution of position (HDOP). Your capture device needs to log that information."));
+        colorTypeDilution.setToolTipText(
+                tr("Colors points and track segments by dilution of position (HDOP). Your capture device needs to log that information."));
         colorTypeTime.setToolTipText(tr("Colors points and track segments by its timestamp."));
 
         // color Tracks by Velocity Tune
@@ -254,21 +256,21 @@ public class GPXSettingsPanel extends JPanel implements ValidationListener {
 
         add(Box.createVerticalGlue(), GBC.eol().insets(0, 20, 0, 0));
 
-        add(new JLabel(tr("Track and Point Coloring")), GBC.eol().insets(20,0,0,0));
-        if (layerName!=null) {
-            add(colorTypeGlobal, GBC.eol().insets(40,0,0,0));
+        add(new JLabel(tr("Track and Point Coloring")), GBC.eol().insets(20, 0, 0, 0));
+        if (layerName != null) {
+            add(colorTypeGlobal, GBC.eol().insets(40, 0, 0, 0));
         }
-        add(colorTypeNone, GBC.eol().insets(40,0,0,0));
-        add(colorTypeVelocity, GBC.std().insets(40,0,0,0));
-        add(colorTypeVelocityTune, GBC.eop().insets(5,0,0,5));
-        add(colorTypeDirection, GBC.eol().insets(40,0,0,0));
-        add(colorTypeDilution, GBC.eol().insets(40,0,0,0));
-        add(colorTypeTime, GBC.eol().insets(40,0,0,0));
+        add(colorTypeNone, GBC.eol().insets(40, 0, 0, 0));
+        add(colorTypeVelocity, GBC.std().insets(40, 0, 0, 0));
+        add(colorTypeVelocityTune, GBC.eop().insets(5, 0, 0, 5));
+        add(colorTypeDirection, GBC.eol().insets(40, 0, 0, 0));
+        add(colorTypeDilution, GBC.eol().insets(40, 0, 0, 0));
+        add(colorTypeTime, GBC.eol().insets(40, 0, 0, 0));
         ExpertToggleAction.addVisibilitySwitcher(colorTypeDirection);
         ExpertToggleAction.addVisibilitySwitcher(colorTypeDilution);
 
         colorDynamic.setToolTipText(tr("Colors points and track segments by data limits."));
-        add(colorDynamic, GBC.eop().insets(40,0,0,0));
+        add(colorDynamic, GBC.eop().insets(40, 0, 0, 0));
         ExpertToggleAction.addVisibilitySwitcher(colorDynamic);
 
         if (layerName == null) {
@@ -277,8 +279,9 @@ public class GPXSettingsPanel extends JPanel implements ValidationListener {
 
             // waypointLabel
             label = new JLabel(tr("Waypoint labelling"));
-            add(label, GBC.std().insets(20,0,0,0));
-            add(waypointLabel, GBC.eol().fill(GBC.HORIZONTAL).insets(5,0,0,5));
+            add(label, GBC.std().insets(20, 0, 0, 0));
+            label.setLabelFor(waypointLabel);
+            add(waypointLabel, GBC.eol().fill(GBC.HORIZONTAL).insets(5, 0, 0, 5));
             waypointLabel.addActionListener(new ActionListener() {
                 @Override
                 public void actionPerformed(ActionEvent e) {
@@ -286,7 +289,7 @@ public class GPXSettingsPanel extends JPanel implements ValidationListener {
                 }
             });
             updateWaypointLabelCombobox(waypointLabel, waypointLabelPattern, TemplateEntryProperty.forMarker(layerName));
-            add(waypointLabelPattern, GBC.eol().fill(GBC.HORIZONTAL).insets(20,0,0,5));
+            add(waypointLabelPattern, GBC.eol().fill(GBC.HORIZONTAL).insets(20, 0, 0, 5));
             ExpertToggleAction.addVisibilitySwitcher(label);
             ExpertToggleAction.addVisibilitySwitcher(waypointLabel);
             ExpertToggleAction.addVisibilitySwitcher(waypointLabelPattern);
@@ -297,8 +300,9 @@ public class GPXSettingsPanel extends JPanel implements ValidationListener {
             ExpertToggleAction.addVisibilitySwitcher(glue);
 
             label = new JLabel(tr("Audio waypoint labelling"));
-            add(label, GBC.std().insets(20,0,0,0));
-            add(audioWaypointLabel, GBC.eol().fill(GBC.HORIZONTAL).insets(5,0,0,5));
+            add(label, GBC.std().insets(20, 0, 0, 0));
+            label.setLabelFor(audioWaypointLabel);
+            add(audioWaypointLabel, GBC.eol().fill(GBC.HORIZONTAL).insets(5, 0, 0, 5));
             audioWaypointLabel.addActionListener(new ActionListener() {
                 @Override
                 public void actionPerformed(ActionEvent e) {
@@ -306,7 +310,7 @@ public class GPXSettingsPanel extends JPanel implements ValidationListener {
                 }
             });
             updateWaypointLabelCombobox(audioWaypointLabel, audioWaypointLabelPattern, TemplateEntryProperty.forAudioMarker(layerName));
-            add(audioWaypointLabelPattern, GBC.eol().fill(GBC.HORIZONTAL).insets(20,0,0,5));
+            add(audioWaypointLabelPattern, GBC.eol().fill(GBC.HORIZONTAL).insets(20, 0, 0, 5));
             ExpertToggleAction.addVisibilitySwitcher(label);
             ExpertToggleAction.addVisibilitySwitcher(audioWaypointLabel);
             ExpertToggleAction.addVisibilitySwitcher(audioWaypointLabelPattern);
@@ -318,15 +322,15 @@ public class GPXSettingsPanel extends JPanel implements ValidationListener {
     /**
      * Loads preferences to UI controls
      */
-    public final void loadPreferences () {
+    public final void loadPreferences() {
         makeAutoMarkers.setSelected(Main.pref.getBoolean("marker.makeautomarkers", true));
-        if(layerName!=null && Main.pref.get("draw.rawgps.lines."+layerName).isEmpty()
-                && Main.pref.get("draw.rawgps.lines.local."+layerName).isEmpty()){
+        if (layerName != null && Main.pref.get("draw.rawgps.lines."+layerName).isEmpty()
+                && Main.pref.get("draw.rawgps.lines.local."+layerName).isEmpty()) {
             // no line preferences for layer is found
             drawRawGpsLinesGlobal.setSelected(true);
         } else {
-            Boolean lf = Main.pref.getBoolean("draw.rawgps.lines.local",layerName, true);
-            if(Main.pref.getBoolean("draw.rawgps.lines",layerName, true)) {
+            Boolean lf = Main.pref.getBoolean("draw.rawgps.lines.local", layerName, true);
+            if (Main.pref.getBoolean("draw.rawgps.lines", layerName, true)) {
                 drawRawGpsLinesAll.setSelected(true);
             } else if (lf) {
                 drawRawGpsLinesLocal.setSelected(true);
@@ -335,34 +339,34 @@ public class GPXSettingsPanel extends JPanel implements ValidationListener {
             }
         }
 
-        drawRawGpsMaxLineLengthLocal.setText(Integer.toString(Main.pref.getInteger("draw.rawgps.max-line-length.local",layerName, -1)));
-        drawRawGpsMaxLineLength.setText(Integer.toString(Main.pref.getInteger("draw.rawgps.max-line-length",layerName, 200)));
-        drawLineWidth.setText(Integer.toString(Main.pref.getInteger("draw.rawgps.linewidth",layerName, 0)));
-        forceRawGpsLines.setSelected(Main.pref.getBoolean("draw.rawgps.lines.force",layerName, false));
-        drawGpsArrows.setSelected(Main.pref.getBoolean("draw.rawgps.direction",layerName, false));
-        drawGpsArrowsFast.setSelected(Main.pref.getBoolean("draw.rawgps.alternatedirection",layerName, false));
-        drawGpsArrowsMinDist.setText(Integer.toString(Main.pref.getInteger("draw.rawgps.min-arrow-distance",layerName, 40)));
-        hdopCircleGpsPoints.setSelected(Main.pref.getBoolean("draw.rawgps.hdopcircle",layerName, false));
-        largeGpsPoints.setSelected(Main.pref.getBoolean("draw.rawgps.large",layerName, false));
+        drawRawGpsMaxLineLengthLocal.setText(Integer.toString(Main.pref.getInteger("draw.rawgps.max-line-length.local", layerName, -1)));
+        drawRawGpsMaxLineLength.setText(Integer.toString(Main.pref.getInteger("draw.rawgps.max-line-length", layerName, 200)));
+        drawLineWidth.setText(Integer.toString(Main.pref.getInteger("draw.rawgps.linewidth", layerName, 0)));
+        forceRawGpsLines.setSelected(Main.pref.getBoolean("draw.rawgps.lines.force", layerName, false));
+        drawGpsArrows.setSelected(Main.pref.getBoolean("draw.rawgps.direction", layerName, false));
+        drawGpsArrowsFast.setSelected(Main.pref.getBoolean("draw.rawgps.alternatedirection", layerName, false));
+        drawGpsArrowsMinDist.setText(Integer.toString(Main.pref.getInteger("draw.rawgps.min-arrow-distance", layerName, 40)));
+        hdopCircleGpsPoints.setSelected(Main.pref.getBoolean("draw.rawgps.hdopcircle", layerName, false));
+        largeGpsPoints.setSelected(Main.pref.getBoolean("draw.rawgps.large", layerName, false));
         useGpsAntialiasing.setSelected(Main.pref.getBoolean("mappaint.gpx.use-antialiasing", false));
         drawRawGpsLinesActionListener.actionPerformed(null);
 
-        if(layerName!=null && Main.pref.get("draw.rawgps.colors."+layerName).isEmpty()) {
+        if (layerName != null && Main.pref.get("draw.rawgps.colors."+layerName).isEmpty()) {
             colorTypeGlobal.setSelected(true);
             colorDynamic.setSelected(false);
             colorDynamic.setEnabled(false);
         } else {
-            switch(Main.pref.getInteger("draw.rawgps.colors",layerName, 0)) {
+            switch(Main.pref.getInteger("draw.rawgps.colors", layerName, 0)) {
             case 0: colorTypeNone.setSelected(true);   break;
             case 1: colorTypeVelocity.setSelected(true);  break;
             case 2: colorTypeDilution.setSelected(true);  break;
             case 3: colorTypeDirection.setSelected(true); break;
             case 4: colorTypeTime.setSelected(true);  break;
             }
-            int ccts = Main.pref.getInteger("draw.rawgps.colorTracksTune",layerName, 45);
-            colorTypeVelocityTune.setSelectedIndex(ccts==10 ? 2 : (ccts==20 ? 1 : 0));
+            int ccts = Main.pref.getInteger("draw.rawgps.colorTracksTune", layerName, 45);
+            colorTypeVelocityTune.setSelectedIndex(ccts == 10 ? 2 : (ccts == 20 ? 1 : 0));
             colorTypeVelocityTune.setEnabled(colorTypeVelocity.isSelected() && colorTypeVelocity.isEnabled());
-            colorDynamic.setSelected(Main.pref.getBoolean("draw.rawgps.colors.dynamic",layerName, false));
+            colorDynamic.setSelected(Main.pref.getBoolean("draw.rawgps.colors.dynamic", layerName, false));
             colorDynamic.setEnabled(colorTypeVelocity.isSelected() || colorTypeDilution.isSelected());
         }
     }
@@ -375,8 +379,8 @@ public class GPXSettingsPanel extends JPanel implements ValidationListener {
      */
     public boolean savePreferences(String layerName, boolean locLayer) {
         String layerNameDot = ".layer "+layerName;
-        if (layerName==null) {
-            layerNameDot="";
+        if (layerName == null) {
+            layerNameDot = "";
         }
         Main.pref.put("marker.makeautomarkers"+layerNameDot, makeAutoMarkers.isSelected());
         if (drawRawGpsLinesGlobal.isSelected()) {
@@ -389,11 +393,11 @@ public class GPXSettingsPanel extends JPanel implements ValidationListener {
             Main.pref.put("draw.rawgps.alternatedirection"+layerNameDot, null);
             Main.pref.put("draw.rawgps.min-arrow-distance"+layerNameDot, null);
         } else {
-            if (layerName==null || !locLayer) {
+            if (layerName == null || !locLayer) {
                 Main.pref.put("draw.rawgps.lines" +  layerNameDot, drawRawGpsLinesAll.isSelected());
                 Main.pref.put("draw.rawgps.max-line-length" + layerNameDot, drawRawGpsMaxLineLength.getText());
             }
-            if (layerName==null || locLayer) {
+            if (layerName == null || locLayer) {
                 Main.pref.put("draw.rawgps.lines.local" + layerNameDot, drawRawGpsLinesAll.isSelected() || drawRawGpsLinesLocal.isSelected());
                 Main.pref.put("draw.rawgps.max-line-length.local" + layerNameDot, drawRawGpsMaxLineLengthLocal.getText());
             }
@@ -411,25 +415,25 @@ public class GPXSettingsPanel extends JPanel implements ValidationListener {
         TemplateEntryProperty.forMarker(layerName).put(waypointLabelPattern.getText());
         TemplateEntryProperty.forAudioMarker(layerName).put(audioWaypointLabelPattern.getText());
 
-        if(colorTypeGlobal.isSelected()) {
+        if (colorTypeGlobal.isSelected()) {
             Main.pref.put("draw.rawgps.colors"+layerNameDot, null);
             Main.pref.put("draw.rawgps.colors.dynamic"+layerNameDot, null);
             Main.pref.put("draw.rawgps.colorTracksTunec"+layerNameDot, null);
             return false;
-        } else if(colorTypeVelocity.isSelected()) {
+        } else if (colorTypeVelocity.isSelected()) {
             Main.pref.putInteger("draw.rawgps.colors"+layerNameDot, 1);
-        } else if(colorTypeDilution.isSelected()) {
+        } else if (colorTypeDilution.isSelected()) {
             Main.pref.putInteger("draw.rawgps.colors"+layerNameDot, 2);
-        } else if(colorTypeDirection.isSelected()) {
+        } else if (colorTypeDirection.isSelected()) {
             Main.pref.putInteger("draw.rawgps.colors"+layerNameDot, 3);
-        } else if(colorTypeTime.isSelected()) {
+        } else if (colorTypeTime.isSelected()) {
             Main.pref.putInteger("draw.rawgps.colors"+layerNameDot, 4);
         } else {
             Main.pref.putInteger("draw.rawgps.colors"+layerNameDot, 0);
         }
         Main.pref.put("draw.rawgps.colors.dynamic"+layerNameDot, colorDynamic.isSelected());
-        int ccti=colorTypeVelocityTune.getSelectedIndex();
-        Main.pref.putInteger("draw.rawgps.colorTracksTune"+layerNameDot, ccti==2 ? 10 : (ccti==1 ? 20 : 45));
+        int ccti = colorTypeVelocityTune.getSelectedIndex();
+        Main.pref.putInteger("draw.rawgps.colorTracksTune"+layerNameDot, ccti == 2 ? 10 : (ccti == 1 ? 20 : 45));
         return false;
     }
 
@@ -444,7 +448,7 @@ public class GPXSettingsPanel extends JPanel implements ValidationListener {
     private void updateWaypointLabelCombobox(JosmComboBox<String> cb, JosmTextField tf, TemplateEntryProperty property) {
         String labelPattern = property.getAsString();
         boolean found = false;
-        for (int i=0; i<LABEL_PATTERN_TEMPLATE.length; i++) {
+        for (int i = 0; i < LABEL_PATTERN_TEMPLATE.length; i++) {
             if (LABEL_PATTERN_TEMPLATE[i].equals(labelPattern)) {
                 cb.setSelectedIndex(i);
                 found = true;
@@ -473,7 +477,8 @@ public class GPXSettingsPanel extends JPanel implements ValidationListener {
         try {
             parser.parse();
         } catch (ParseError e) {
-            JOptionPane.showMessageDialog(Main.parent, tr("Incorrect waypoint label pattern: {0}", e.getMessage()), tr("Incorrect pattern"), JOptionPane.ERROR_MESSAGE);
+            JOptionPane.showMessageDialog(Main.parent,
+                    tr("Incorrect waypoint label pattern: {0}", e.getMessage()), tr("Incorrect pattern"), JOptionPane.ERROR_MESSAGE);
             waypointLabelPattern.requestFocus();
             return false;
         }
@@ -481,7 +486,8 @@ public class GPXSettingsPanel extends JPanel implements ValidationListener {
         try {
             parser.parse();
         } catch (ParseError e) {
-            JOptionPane.showMessageDialog(Main.parent, tr("Incorrect audio waypoint label pattern: {0}", e.getMessage()), tr("Incorrect pattern"), JOptionPane.ERROR_MESSAGE);
+            JOptionPane.showMessageDialog(Main.parent,
+                    tr("Incorrect audio waypoint label pattern: {0}", e.getMessage()), tr("Incorrect pattern"), JOptionPane.ERROR_MESSAGE);
             audioWaypointLabelPattern.requestFocus();
             return false;
         }
diff --git a/src/org/openstreetmap/josm/gui/preferences/display/LafPreference.java b/src/org/openstreetmap/josm/gui/preferences/display/LafPreference.java
index bd36558..3b4dbc2 100644
--- a/src/org/openstreetmap/josm/gui/preferences/display/LafPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/display/LafPreference.java
@@ -70,10 +70,10 @@ public class LafPreference implements SubPreferenceSetting {
         if (Main.isPlatformOsx()) {
             try {
                 Class<?> Cquaqua = Class.forName("ch.randelshofer.quaqua.QuaquaLookAndFeel");
-                Object Oquaqua = Cquaqua.getConstructor((Class[])null).newInstance((Object[])null);
+                Object Oquaqua = Cquaqua.getConstructor((Class[]) null).newInstance((Object[]) null);
                 // no exception? Then Go!
                 lafCombo.addItem(
-                        new UIManager.LookAndFeelInfo(((LookAndFeel)Oquaqua).getName(), "ch.randelshofer.quaqua.QuaquaLookAndFeel")
+                        new UIManager.LookAndFeelInfo(((LookAndFeel) Oquaqua).getName(), "ch.randelshofer.quaqua.QuaquaLookAndFeel")
                 );
             } catch (Exception ex) {
                 // just debug, Quaqua may not even be installed...
@@ -89,7 +89,7 @@ public class LafPreference implements SubPreferenceSetting {
             }
         }
 
-        lafCombo.setRenderer(new ListCellRenderer<LookAndFeelInfo>(){
+        lafCombo.setRenderer(new ListCellRenderer<LookAndFeelInfo>() {
             private final DefaultListCellRenderer def = new DefaultListCellRenderer();
             @Override
             public Component getListCellRendererComponent(JList<? extends LookAndFeelInfo> list, LookAndFeelInfo value,
@@ -99,7 +99,7 @@ public class LafPreference implements SubPreferenceSetting {
         });
 
         panel = new JPanel(new GridBagLayout());
-        panel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
 
         // Show splash screen on startup
         showSplashScreen.setToolTipText(tr("Show splash screen at startup"));
@@ -143,11 +143,11 @@ public class LafPreference implements SubPreferenceSetting {
         panel.add(Box.createVerticalGlue(), GBC.eol().insets(0, 20, 0, 0));
 
         panel.add(new JLabel(tr("Look and Feel")), GBC.std().insets(20, 0, 0, 0));
-        panel.add(GBC.glue(5,0), GBC.std().fill(GBC.HORIZONTAL));
+        panel.add(GBC.glue(5, 0), GBC.std().fill(GBC.HORIZONTAL));
         panel.add(lafCombo, GBC.eol().fill(GBC.HORIZONTAL));
 
         JScrollPane scrollpane = new JScrollPane(panel);
-        scrollpane.setBorder(BorderFactory.createEmptyBorder( 0, 0, 0, 0 ));
+        scrollpane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
         gui.getDisplayPreference().addSubTab(this, tr("Look and Feel"), scrollpane);
     }
 
@@ -161,7 +161,7 @@ public class LafPreference implements SubPreferenceSetting {
         Main.pref.put(ToggleDialog.PROP_DYNAMIC_BUTTONS.getKey(), dynamicButtons.isSelected());
         Main.pref.put(DateUtils.PROP_ISO_DATES.getKey(), isoDates.isSelected());
         Main.pref.put(FileChooserManager.PROP_USE_NATIVE_FILE_DIALOG.getKey(), nativeFileChoosers.isSelected());
-        mod |= Main.pref.put("laf", ((LookAndFeelInfo)lafCombo.getSelectedItem()).getClassName());
+        mod |= Main.pref.put("laf", ((LookAndFeelInfo) lafCombo.getSelectedItem()).getClassName());
         return mod;
     }
 
diff --git a/src/org/openstreetmap/josm/gui/preferences/display/LanguagePreference.java b/src/org/openstreetmap/josm/gui/preferences/display/LanguagePreference.java
index 293a844..958a01c 100644
--- a/src/org/openstreetmap/josm/gui/preferences/display/LanguagePreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/display/LanguagePreference.java
@@ -58,7 +58,7 @@ public class LanguagePreference implements SubPreferenceSetting {
         LafPreference lafPreference = gui.getSetting(LafPreference.class);
         final JPanel panel = lafPreference.panel;
         panel.add(new JLabel(tr("Language")), GBC.std().insets(20, 0, 0, 0));
-        panel.add(GBC.glue(5,0), GBC.std().fill(GBC.HORIZONTAL));
+        panel.add(GBC.glue(5, 0), GBC.std().fill(GBC.HORIZONTAL));
         panel.add(langCombo, GBC.eol().fill(GBC.HORIZONTAL));
         panel.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.BOTH));
 
@@ -68,18 +68,18 @@ public class LanguagePreference implements SubPreferenceSetting {
 
     @Override
     public boolean ok() {
-        if(langCombo.getSelectedItem() == null)
+        if (langCombo.getSelectedItem() == null)
             return Main.pref.put("language", null);
         else
             return Main.pref.put("language",
-                    LanguageInfo.getJOSMLocaleCode((Locale)langCombo.getSelectedItem()));
+                    LanguageInfo.getJOSMLocaleCode((Locale) langCombo.getSelectedItem()));
     }
 
     private static class LanguageComboBoxModel extends DefaultComboBoxModel<Locale> {
-        private final transient List<Locale> data = new ArrayList<>();
+        private final List<Locale> data = new ArrayList<>();
 
-        public LanguageComboBoxModel(){
-            data.add(0,null);
+        public LanguageComboBoxModel() {
+            data.add(0, null);
             data.addAll(Arrays.asList(I18n.getAvailableTranslations()));
         }
 
@@ -112,9 +112,14 @@ public class LanguagePreference implements SubPreferenceSetting {
 
     private static class LanguageCellRenderer implements ListCellRenderer<Locale> {
         private final DefaultListCellRenderer dispatch;
+
+        /**
+         * Constructs a new {@code LanguageCellRenderer}.
+         */
         public LanguageCellRenderer() {
             this.dispatch = new DefaultListCellRenderer();
         }
+
         @Override
         public Component getListCellRendererComponent(JList<? extends Locale> list, Locale l,
                 int index, boolean isSelected, boolean cellHasFocus) {
diff --git a/src/org/openstreetmap/josm/gui/preferences/imagery/AddImageryPanel.java b/src/org/openstreetmap/josm/gui/preferences/imagery/AddImageryPanel.java
index 6c64a00..99eba10 100644
--- a/src/org/openstreetmap/josm/gui/preferences/imagery/AddImageryPanel.java
+++ b/src/org/openstreetmap/josm/gui/preferences/imagery/AddImageryPanel.java
@@ -15,6 +15,7 @@ import javax.swing.event.DocumentListener;
 import javax.swing.text.JTextComponent;
 
 import org.openstreetmap.josm.data.imagery.ImageryInfo;
+import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryType;
 import org.openstreetmap.josm.gui.widgets.JosmTextArea;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
 
@@ -39,7 +40,7 @@ public abstract class AddImageryPanel extends JPanel {
          * Called when the validation status of this panel changed
          * @param isValid true if the conditions required to close this panel are met
          */
-        public void contentChanged(boolean isValid);
+        void contentChanged(boolean isValid);
     }
 
     protected AddImageryPanel() {
@@ -53,15 +54,29 @@ public abstract class AddImageryPanel extends JPanel {
 
     protected final void registerValidableComponent(AbstractButton component) {
         component.addChangeListener(new ChangeListener() {
-            @Override public void stateChanged(ChangeEvent e) { notifyListeners(); }
+            @Override
+            public void stateChanged(ChangeEvent e) {
+                notifyListeners();
+            }
         });
     }
 
     protected final void registerValidableComponent(JTextComponent component) {
         component.getDocument().addDocumentListener(new DocumentListener() {
-            @Override public void removeUpdate(DocumentEvent e) { notifyListeners(); }
-            @Override public void insertUpdate(DocumentEvent e) { notifyListeners(); }
-            @Override public void changedUpdate(DocumentEvent e) { notifyListeners(); }
+            @Override
+            public void removeUpdate(DocumentEvent e) {
+                notifyListeners();
+            }
+
+            @Override
+            public void insertUpdate(DocumentEvent e) {
+                notifyListeners();
+            }
+
+            @Override
+            public void changedUpdate(DocumentEvent e) {
+                notifyListeners();
+            }
         });
     }
 
@@ -71,6 +86,16 @@ public abstract class AddImageryPanel extends JPanel {
         return s.replaceAll("[\r\n]+", "").trim();
     }
 
+    protected static String sanitize(String s, ImageryType type) {
+        String ret = s;
+        String imageryType = type.getTypeString() + ":";
+        if (ret.startsWith(imageryType)) {
+            // remove ImageryType from URL
+            ret = ret.substring(imageryType.length());
+        }
+        return sanitize(ret);
+    }
+
     protected final String getImageryName() {
         return sanitize(name.getText());
     }
@@ -91,7 +116,7 @@ public abstract class AddImageryPanel extends JPanel {
         }
     }
 
-    private final void notifyListeners() {
+    private void notifyListeners() {
         for (ContentValidationListener l : listeners) {
             l.contentChanged(isImageryValid());
         }
diff --git a/src/org/openstreetmap/josm/gui/preferences/imagery/AddTMSLayerPanel.java b/src/org/openstreetmap/josm/gui/preferences/imagery/AddTMSLayerPanel.java
index 2bcddcd..1a4436d 100644
--- a/src/org/openstreetmap/josm/gui/preferences/imagery/AddTMSLayerPanel.java
+++ b/src/org/openstreetmap/josm/gui/preferences/imagery/AddTMSLayerPanel.java
@@ -10,6 +10,7 @@ import java.util.Arrays;
 import javax.swing.JLabel;
 
 import org.openstreetmap.josm.data.imagery.ImageryInfo;
+import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryType;
 import org.openstreetmap.josm.gui.widgets.JosmTextArea;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
 import org.openstreetmap.josm.tools.GBC;
@@ -68,10 +69,9 @@ public class AddTMSLayerPanel extends AddImageryPanel {
         StringBuilder a = new StringBuilder("tms");
         String z = sanitize(tmsZoom.getText());
         if (!z.isEmpty()) {
-            a.append("[").append(z).append("]");
+            a.append('[').append(z).append(']');
         }
-        a.append(":");
-        a.append(getImageryRawUrl());
+        a.append(':').append(sanitize(getImageryRawUrl(), ImageryType.TMS));
         return a.toString();
     }
 
diff --git a/src/org/openstreetmap/josm/gui/preferences/imagery/AddWMSLayerPanel.java b/src/org/openstreetmap/josm/gui/preferences/imagery/AddWMSLayerPanel.java
index eaf19d0..da6c102 100644
--- a/src/org/openstreetmap/josm/gui/preferences/imagery/AddWMSLayerPanel.java
+++ b/src/org/openstreetmap/josm/gui/preferences/imagery/AddWMSLayerPanel.java
@@ -31,7 +31,8 @@ import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.Utils;
 
 /**
- * An imagery panel used to add WMS imagery sources
+ * An imagery panel used to add WMS imagery sources.
+ * @since 2599
  */
 public class AddWMSLayerPanel extends AddImageryPanel {
 
@@ -65,6 +66,7 @@ public class AddWMSLayerPanel extends AddImageryPanel {
         add(formats, GBC.eol().fill());
 
         add(wmsInstruction = new JLabel(tr("4. Verify generated WMS URL")), GBC.eol());
+        wmsInstruction.setLabelFor(wmsUrl);
         add(wmsUrl, GBC.eop().fill());
         wmsUrl.setLineWrap(true);
 
@@ -175,7 +177,7 @@ public class AddWMSLayerPanel extends AddImageryPanel {
     }
 
     protected final String getWmsUrl() {
-        return sanitize(wmsUrl.getText());
+        return sanitize(wmsUrl.getText(), ImageryInfo.ImageryType.WMS);
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/gui/preferences/imagery/AddWMTSLayerPanel.java b/src/org/openstreetmap/josm/gui/preferences/imagery/AddWMTSLayerPanel.java
new file mode 100644
index 0000000..bdb4e36
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/preferences/imagery/AddWMTSLayerPanel.java
@@ -0,0 +1,42 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.preferences.imagery;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import javax.swing.JLabel;
+
+import org.openstreetmap.josm.data.imagery.ImageryInfo;
+import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryType;
+import org.openstreetmap.josm.tools.GBC;
+
+/**
+ * Panel for adding WMTS imagery sources
+ * @author Wiktor Niesiobędzki
+ *
+ */
+public class AddWMTSLayerPanel extends AddImageryPanel {
+
+    /**
+     * default constructor
+     */
+    public AddWMTSLayerPanel() {
+        add(new JLabel(tr("1. Enter getCapabilities URL")), GBC.eol());
+        add(rawUrl, GBC.eop().fill());
+        rawUrl.setLineWrap(true);
+        rawUrl.setAlignmentY(TOP_ALIGNMENT);
+        add(new JLabel(tr("2. Enter name for this layer")), GBC.eol());
+        add(name, GBC.eol().fill(GBC.HORIZONTAL));
+        registerValidableComponent(rawUrl);
+    }
+
+    @Override
+    protected ImageryInfo getImageryInfo() {
+        return new ImageryInfo(getImageryName(), "wmts:" + sanitize(getImageryRawUrl(), ImageryType.WMTS));
+    }
+
+    @Override
+    protected boolean isImageryValid() {
+        return !getImageryName().isEmpty() && !getImageryRawUrl().isEmpty();
+    }
+
+}
diff --git a/src/org/openstreetmap/josm/gui/preferences/imagery/CacheContentsPanel.java b/src/org/openstreetmap/josm/gui/preferences/imagery/CacheContentsPanel.java
new file mode 100644
index 0000000..7631454
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/preferences/imagery/CacheContentsPanel.java
@@ -0,0 +1,255 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.preferences.imagery;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.GridBagLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+import javax.swing.AbstractAction;
+import javax.swing.AbstractCellEditor;
+import javax.swing.Action;
+import javax.swing.Icon;
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.UIManager;
+import javax.swing.border.LineBorder;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableCellEditor;
+import javax.swing.table.TableCellRenderer;
+import javax.swing.table.TableColumn;
+import javax.swing.table.TableModel;
+
+import org.apache.commons.jcs.access.CacheAccess;
+import org.apache.commons.jcs.engine.stats.behavior.ICacheStats;
+import org.apache.commons.jcs.engine.stats.behavior.IStatElement;
+import org.apache.commons.jcs.engine.stats.behavior.IStats;
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.cache.BufferedImageCacheEntry;
+import org.openstreetmap.josm.gui.layer.TMSLayer;
+import org.openstreetmap.josm.gui.layer.WMSLayer;
+import org.openstreetmap.josm.gui.layer.WMTSLayer;
+import org.openstreetmap.josm.gui.util.GuiHelper;
+import org.openstreetmap.josm.tools.GBC;
+import org.openstreetmap.josm.tools.Pair;
+import org.openstreetmap.josm.tools.Utils;
+
+/**
+ * Panel for cache content management.
+ *
+ * @author Wiktor Niesiobędzki
+ *
+ */
+public class CacheContentsPanel extends JPanel {
+
+    /**
+     *
+     * Class based on:  http://www.camick.com/java/source/ButtonColumn.java
+     * https://tips4java.wordpress.com/2009/07/12/table-button-column/
+     *
+     */
+    private static final class ButtonColumn extends AbstractCellEditor implements TableCellRenderer, TableCellEditor, ActionListener {
+        private final Action action;
+        private final JButton renderButton;
+        private JButton editButton;
+        private Object editorValue;
+
+        private ButtonColumn(Action action) {
+            this.action = action;
+            renderButton = new JButton();
+            editButton = new JButton();
+            editButton.setFocusPainted(false);
+            editButton.addActionListener(this);
+            editButton.setBorder(new LineBorder(Color.BLUE));
+        }
+
+        @Override
+        public Object getCellEditorValue() {
+            return editorValue;
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            this.action.actionPerformed(e);
+        }
+
+        @Override
+        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
+            this.editorValue = value;
+            if (value == null) {
+                editButton.setText("");
+                editButton.setIcon(null);
+            } else if (value instanceof Icon) {
+                editButton.setText("");
+                editButton.setIcon((Icon) value);
+            } else {
+                editButton.setText(value.toString());
+                editButton.setIcon(null);
+            }
+            this.editorValue = value;
+            return editButton;
+        }
+
+        @Override
+        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
+                boolean hasFocus, int row, int column) {
+            if (isSelected) {
+                renderButton.setForeground(table.getSelectionForeground());
+                renderButton.setBackground(table.getSelectionBackground());
+            } else {
+                renderButton.setForeground(table.getForeground());
+                renderButton.setBackground(UIManager.getColor("Button.background"));
+            }
+
+            renderButton.setFocusPainted(hasFocus);
+
+            if (value == null) {
+                renderButton.setText("");
+                renderButton.setIcon(null);
+            } else if (value instanceof Icon) {
+                renderButton.setText("");
+                renderButton.setIcon((Icon) value);
+            } else {
+                renderButton.setText(value.toString());
+                renderButton.setIcon(null);
+            }
+            return renderButton;
+        }
+
+    }
+
+    private final transient ExecutorService executor =
+            Executors.newSingleThreadExecutor(Utils.newThreadFactory(getClass() + "-%d", Thread.NORM_PRIORITY));
+
+    /**
+     * Creates cache content panel
+     */
+    public CacheContentsPanel() {
+        super(new GridBagLayout());
+        executor.submit(new Runnable() {
+            @Override
+            public void run() {
+                addToPanel(TMSLayer.getCache(), "TMS");
+                addToPanel(WMSLayer.getCache(), "WMS");
+                addToPanel(WMTSLayer.getCache(), "WMTS");
+            }
+        });
+        executor.shutdown();
+    }
+
+    private void addToPanel(final CacheAccess<String, BufferedImageCacheEntry> cache, final String name) {
+        final Long cacheSize = getCacheSize(cache);
+        final TableModel tableModel = getTableModel(cache);
+
+        GuiHelper.runInEDT(new Runnable() {
+            @Override
+            public void run() {
+                add(
+                        new JLabel(tr("{0} cache, total cache size: {1} bytes", name, cacheSize)),
+                        GBC.eol().insets(5, 5, 0, 0));
+
+                add(
+                        new JScrollPane(getTableForCache(cache, tableModel)),
+                        GBC.eol().fill(GBC.BOTH));
+            }
+        });
+    }
+
+    private Long getCacheSize(CacheAccess<String, BufferedImageCacheEntry> cache) {
+        ICacheStats stats = cache.getStatistics();
+        for (IStats cacheStats: stats.getAuxiliaryCacheStats()) {
+            for (IStatElement<?> statElement: cacheStats.getStatElements()) {
+                if ("Data File Length".equals(statElement.getName())) {
+                    Object val = statElement.getData();
+                    if (val instanceof Long) {
+                        return (Long) val;
+                    }
+
+                }
+            }
+        }
+        return Long.valueOf(-1);
+    }
+
+    private static String[][] getCacheStats(CacheAccess<String, BufferedImageCacheEntry> cache) {
+        Set<String> keySet = cache.getCacheControl().getKeySet();
+        Map<String, int[]> temp = new ConcurrentHashMap<>(); // use int[] as a Object reference to int, gives better performance
+        for (String key: keySet) {
+            String[] keyParts = key.split(":", 2);
+            if (keyParts.length == 2) {
+                int[] counter = temp.get(keyParts[0]);
+                if (counter == null) {
+                    temp.put(keyParts[0], new int[]{1});
+                } else {
+                    counter[0]++;
+                }
+            } else {
+                Main.warn("Could not parse the key: {0}. No colon found", key);
+            }
+        }
+
+        List<Pair<String, Integer>> sortedStats = new ArrayList<>();
+        for (Entry<String, int[]> e: temp.entrySet()) {
+            sortedStats.add(new Pair<>(e.getKey(), e.getValue()[0]));
+        }
+        Collections.sort(sortedStats, new Comparator<Pair<String, Integer>>() {
+            @Override
+            public int compare(Pair<String, Integer> o1, Pair<String, Integer> o2) {
+                return -1 * o1.b.compareTo(o2.b);
+            }
+        });
+        String[][] ret = new String[sortedStats.size()][3];
+        int index = 0;
+        for (Pair<String, Integer> e: sortedStats) {
+            ret[index] = new String[]{e.a, e.b.toString(), tr("Clear")};
+            index++;
+        }
+        return ret;
+    }
+
+    private JTable getTableForCache(final CacheAccess<String, BufferedImageCacheEntry> cache, final TableModel tableModel) {
+        final JTable ret = new JTable(tableModel);
+
+        ButtonColumn buttonColumn = new ButtonColumn(
+                new AbstractAction() {
+                    @Override
+                    public void actionPerformed(ActionEvent e) {
+                        int row = ret.convertRowIndexToModel(ret.getEditingRow());
+                        tableModel.setValueAt("0", row, 1);
+                        cache.remove(ret.getValueAt(row, 0) + ":");
+                    }
+                });
+        TableColumn tableColumn = ret.getColumnModel().getColumn(2);
+        tableColumn.setCellRenderer(buttonColumn);
+        tableColumn.setCellEditor(buttonColumn);
+        return ret;
+    }
+
+    private DefaultTableModel getTableModel(final CacheAccess<String, BufferedImageCacheEntry> cache) {
+        final DefaultTableModel tableModel = new DefaultTableModel(
+                getCacheStats(cache),
+                new String[]{tr("Cache name"), tr("Object Count"), tr("Clear")}) {
+            @Override
+            public boolean isCellEditable(int row, int column) {
+                return column == 2;
+            }
+        };
+        return tableModel;
+    }
+}
diff --git a/src/org/openstreetmap/josm/gui/preferences/imagery/CommonSettingsPanel.java b/src/org/openstreetmap/josm/gui/preferences/imagery/CommonSettingsPanel.java
index 72679f7..ad92bdc 100644
--- a/src/org/openstreetmap/josm/gui/preferences/imagery/CommonSettingsPanel.java
+++ b/src/org/openstreetmap/josm/gui/preferences/imagery/CommonSettingsPanel.java
@@ -14,9 +14,15 @@ import javax.swing.JLabel;
 import javax.swing.JOptionPane;
 import javax.swing.JPanel;
 import javax.swing.JSlider;
+import javax.swing.JSpinner;
+import javax.swing.SpinnerNumberModel;
 
+import org.openstreetmap.josm.data.imagery.CachedTileLoaderFactory;
+import org.openstreetmap.josm.gui.layer.AbstractCachedTileSourceLayer;
+import org.openstreetmap.josm.gui.layer.AbstractTileSourceLayer;
 import org.openstreetmap.josm.gui.layer.ImageryLayer;
 import org.openstreetmap.josm.gui.widgets.JosmComboBox;
+import org.openstreetmap.josm.gui.widgets.JosmTextField;
 import org.openstreetmap.josm.tools.ColorHelper;
 import org.openstreetmap.josm.tools.GBC;
 
@@ -30,13 +36,24 @@ public class CommonSettingsPanel extends JPanel {
     private final JButton btnFadeColor;
     private final JSlider fadeAmount = new JSlider(0, 100);
     private final JosmComboBox<String> sharpen;
+    private final JosmTextField tilecacheDir = new JosmTextField();
+    private final JSpinner maxElementsOnDisk;
+    private final JSpinner maxElementsInRam;
+    private final JSlider tilesZoom = new JSlider(-2, 2, 0);
+
 
     /**
      * Constructs a new {@code CommonSettingsPanel}.
      */
     public CommonSettingsPanel() {
         super(new GridBagLayout());
-        
+
+        this.maxElementsInRam = new JSpinner(new SpinnerNumberModel(
+                AbstractCachedTileSourceLayer.MEMORY_CACHE_SIZE.get().intValue(), 0, Integer.MAX_VALUE, 1));
+        this.maxElementsOnDisk = new JSpinner(new SpinnerNumberModel(
+                AbstractCachedTileSourceLayer.MAX_DISK_CACHE_SIZE.get().intValue(), 0, Integer.MAX_VALUE, 1));
+
+
         this.btnFadeColor = new JButton();
 
         this.btnFadeColor.addActionListener(new ActionListener() {
@@ -71,8 +88,28 @@ public class CommonSettingsPanel extends JPanel {
         add(new JLabel(tr("Sharpen (requires layer re-add): ")));
         add(GBC.glue(5, 0), GBC.std().fill(GBC.HORIZONTAL));
         add(this.sharpen, GBC.eol().fill(GBC.HORIZONTAL));
+
+        add(new JLabel(tr("Tile cache directory: ")), GBC.std());
+        add(GBC.glue(5, 0), GBC.std());
+        add(tilecacheDir, GBC.eol().fill(GBC.HORIZONTAL));
+
+        add(new JLabel(tr("Maximum size of disk cache (per imagery) in MB: ")), GBC.std());
+        add(GBC.glue(5, 0), GBC.std());
+        add(this.maxElementsOnDisk, GBC.eol());
+
+        add(new JLabel(tr("Maximum number of objects in memory cache: ")), GBC.std());
+        add(GBC.glue(5, 0), GBC.std());
+        add(this.maxElementsInRam, GBC.eol());
+
+        this.tilesZoom.setPaintLabels(true);
+        this.tilesZoom.setMajorTickSpacing(2);
+        this.tilesZoom.setMinorTickSpacing(1);
+        this.tilesZoom.setPaintTicks(true);
+        add(new JLabel(tr("Tiles zoom offset:")));
+        add(GBC.glue(5, 0), GBC.std());
+        add(this.tilesZoom, GBC.eol());
     }
-    
+
     /**
      * Loads the common settings.
      */
@@ -82,8 +119,12 @@ public class CommonSettingsPanel extends JPanel {
         this.btnFadeColor.setText(ColorHelper.color2html(colFadeColor));
         this.fadeAmount.setValue(ImageryLayer.PROP_FADE_AMOUNT.get());
         this.sharpen.setSelectedIndex(Math.max(0, Math.min(2, ImageryLayer.PROP_SHARPEN_LEVEL.get())));
+        this.tilecacheDir.setText(CachedTileLoaderFactory.PROP_TILECACHE_DIR.get());
+        this.maxElementsOnDisk.setValue(AbstractCachedTileSourceLayer.MAX_DISK_CACHE_SIZE.get());
+        this.maxElementsInRam.setValue(AbstractCachedTileSourceLayer.MEMORY_CACHE_SIZE.get());
+        this.tilesZoom.setValue(AbstractTileSourceLayer.ZOOM_OFFSET.get());
     }
-    
+
     /**
      * Saves the common settings.
      * @return true when restart is required
@@ -92,6 +133,29 @@ public class CommonSettingsPanel extends JPanel {
         ImageryLayer.PROP_FADE_AMOUNT.put(this.fadeAmount.getValue());
         ImageryLayer.PROP_FADE_COLOR.put(this.btnFadeColor.getBackground());
         ImageryLayer.PROP_SHARPEN_LEVEL.put(sharpen.getSelectedIndex());
-        return false;
+
+        boolean restartRequired = false;
+        if (!AbstractCachedTileSourceLayer.MAX_DISK_CACHE_SIZE.get().equals(this.maxElementsOnDisk.getValue())) {
+            AbstractCachedTileSourceLayer.MAX_DISK_CACHE_SIZE.put((Integer) this.maxElementsOnDisk.getValue());
+            restartRequired = true;
+        }
+
+
+        if (!CachedTileLoaderFactory.PROP_TILECACHE_DIR.get().equals(this.tilecacheDir.getText())) {
+            restartRequired = true;
+            CachedTileLoaderFactory.PROP_TILECACHE_DIR.put(this.tilecacheDir.getText());
+        }
+
+        if (!AbstractCachedTileSourceLayer.MEMORY_CACHE_SIZE.get().equals(this.maxElementsInRam.getValue())) {
+            AbstractCachedTileSourceLayer.MEMORY_CACHE_SIZE.put((Integer) this.maxElementsInRam.getValue());
+            restartRequired = true;
+        }
+
+        if (!AbstractTileSourceLayer.ZOOM_OFFSET.get().equals(this.tilesZoom.getValue())) {
+            // TODO: make warning about too small MEMORY_CACHE_SIZE?
+            AbstractTileSourceLayer.ZOOM_OFFSET.put(this.tilesZoom.getValue());
+            restartRequired = true;
+        }
+        return restartRequired;
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/preferences/imagery/ImageryPreference.java b/src/org/openstreetmap/josm/gui/preferences/imagery/ImageryPreference.java
index 3db9b15..2edacd3 100644
--- a/src/org/openstreetmap/josm/gui/preferences/imagery/ImageryPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/imagery/ImageryPreference.java
@@ -68,9 +68,17 @@ import org.openstreetmap.josm.tools.LanguageInfo;
 
 /**
  * Imagery preferences, including imagery providers, settings and offsets.
+ * @since 3715
  */
 public final class ImageryPreference extends DefaultTabPreferenceSetting {
 
+    private ImageryProvidersPanel imageryProviders;
+    private ImageryLayerInfo layerInfo;
+
+    private CommonSettingsPanel commonSettings;
+    private WMSSettingsPanel wmsSettings;
+    private TMSSettingsPanel tmsSettings;
+
     /**
      * Factory used to create a new {@code ImageryPreference}.
      */
@@ -82,16 +90,10 @@ public final class ImageryPreference extends DefaultTabPreferenceSetting {
     }
 
     private ImageryPreference() {
-        super(/* ICON(preferences/) */ "imagery", tr("Imagery Preferences"), tr("Modify list of imagery layers displayed in the Imagery menu"), false, new JTabbedPane());
+        super(/* ICON(preferences/) */ "imagery", tr("Imagery Preferences"), tr("Modify list of imagery layers displayed in the Imagery menu"),
+                false, new JTabbedPane());
     }
 
-    private ImageryProvidersPanel imageryProviders;
-    private ImageryLayerInfo layerInfo;
-
-    private CommonSettingsPanel commonSettings;
-    private WMSSettingsPanel wmsSettings;
-    private TMSSettingsPanel tmsSettings;
-
     private void addSettingsSection(final JPanel p, String name, JPanel section) {
         addSettingsSection(p, name, section, GBC.eol());
     }
@@ -99,14 +101,15 @@ public final class ImageryPreference extends DefaultTabPreferenceSetting {
     private void addSettingsSection(final JPanel p, String name, JPanel section, GBC gbc) {
         final JLabel lbl = new JLabel(name);
         lbl.setFont(lbl.getFont().deriveFont(Font.BOLD));
-        p.add(lbl,GBC.std());
+        lbl.setLabelFor(section);
+        p.add(lbl, GBC.std());
         p.add(new JSeparator(), GBC.eol().fill(GBC.HORIZONTAL).insets(5, 0, 0, 0));
-        p.add(section, gbc.insets(20,5,0,10));
+        p.add(section, gbc.insets(20, 5, 0, 10));
     }
 
     private Component buildSettingsPanel() {
         final JPanel p = new JPanel(new GridBagLayout());
-        p.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        p.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
 
         addSettingsSection(p, tr("Common Settings"), commonSettings = new CommonSettingsPanel());
         addSettingsSection(p, tr("WMS Settings"), wmsSettings = new WMSSettingsPanel(),
@@ -114,7 +117,7 @@ public final class ImageryPreference extends DefaultTabPreferenceSetting {
         addSettingsSection(p, tr("TMS Settings"), tmsSettings = new TMSSettingsPanel(),
                 GBC.eol().fill(GBC.HORIZONTAL));
 
-        p.add(new JPanel(),GBC.eol().fill(GBC.BOTH));
+        p.add(new JPanel(), GBC.eol().fill(GBC.BOTH));
         return new JScrollPane(p);
     }
 
@@ -127,8 +130,9 @@ public final class ImageryPreference extends DefaultTabPreferenceSetting {
         pane.addTab(tr("Imagery providers"), imageryProviders);
         pane.addTab(tr("Settings"), buildSettingsPanel());
         pane.addTab(tr("Offset bookmarks"), new OffsetBookmarksPanel(gui));
+        pane.addTab(tr("Cache contents") , new CacheContentsPanel());
         loadSettings();
-        p.add(pane,GBC.std().fill(GBC.BOTH));
+        p.add(pane, GBC.std().fill(GBC.BOTH));
     }
 
     /**
@@ -177,7 +181,7 @@ public final class ImageryPreference extends DefaultTabPreferenceSetting {
                 return;
             }
         }
-        imageryProviders.activeModel.addRow(new String[] { server, url });
+        imageryProviders.activeModel.addRow(new String[] {server, url});
     }
 
     /**
@@ -253,11 +257,11 @@ public final class ImageryPreference extends DefaultTabPreferenceSetting {
                         if (l.getExtendedUrl().equals(t)) {
                             label.setBackground(Main.pref.getColor(
                                     marktr("Imagery Background: Default"),
-                                    new Color(200,255,200)));
+                                    new Color(200, 255, 200)));
                             break;
                         }
                     }
-                    label.setToolTipText((String)value);
+                    label.setToolTipText((String) value);
                 }
                 return label;
             }
@@ -301,7 +305,7 @@ public final class ImageryPreference extends DefaultTabPreferenceSetting {
                     return activeModel.getValueAt(rowAtPoint(p), columnAtPoint(p)).toString();
                 }
             };
-            activeTable.putClientProperty("terminateEditOnFocusLost", true);
+            activeTable.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
 
             defaultModel = new ImageryDefaultLayerTableModel();
             defaultTable = new JTable(defaultModel);
@@ -385,6 +389,7 @@ public final class ImageryPreference extends DefaultTabPreferenceSetting {
             activeToolbar.setOpaque(false);
             activeToolbar.add(new NewEntryAction(ImageryInfo.ImageryType.WMS));
             activeToolbar.add(new NewEntryAction(ImageryInfo.ImageryType.TMS));
+            activeToolbar.add(new NewEntryAction(ImageryInfo.ImageryType.WMTS));
             //activeToolbar.add(edit); TODO
             activeToolbar.add(remove);
             add(activeToolbar, GBC.eol().anchor(GBC.NORTH).insets(0, 0, 5, 5));
@@ -415,7 +420,7 @@ public final class ImageryPreference extends DefaultTabPreferenceSetting {
                     clearMap();
                 } else if (!e.getValueIsAdjusting()) {
                     // Only process complete (final) selection events
-                    for (int i = e.getFirstIndex(); i<=e.getLastIndex(); i++) {
+                    for (int i = e.getFirstIndex(); i <= e.getLastIndex(); i++) {
                         updateBoundsAndShapes(i);
                     }
                     // If needed, adjust map to show all map rectangles and polygons
@@ -478,10 +483,19 @@ public final class ImageryPreference extends DefaultTabPreferenceSetting {
                 putValue(NAME, type.toString());
                 putValue(SHORT_DESCRIPTION, tr("Add a new {0} entry by entering the URL", type.toString()));
                 String icon = /* ICON(dialogs/) */ "add";
-                if(ImageryInfo.ImageryType.WMS.equals(type))
+                switch (type) {
+                case WMS:
                     icon = /* ICON(dialogs/) */ "add_wms";
-                else if(ImageryInfo.ImageryType.TMS.equals(type))
+                    break;
+                case TMS:
                     icon = /* ICON(dialogs/) */ "add_tms";
+                    break;
+                case WMTS:
+                    icon = /* ICON(dialogs/) */ "add_wmts";
+                    break;
+                default:
+                    break;
+                }
                 putValue(SMALL_ICON, ImageProvider.get("dialogs", icon));
                 this.type = type;
             }
@@ -489,11 +503,17 @@ public final class ImageryPreference extends DefaultTabPreferenceSetting {
             @Override
             public void actionPerformed(ActionEvent evt) {
                 final AddImageryPanel p;
-                if (ImageryInfo.ImageryType.WMS.equals(type)) {
+                switch (type) {
+                case WMS:
                     p = new AddWMSLayerPanel();
-                } else if (ImageryInfo.ImageryType.TMS.equals(type)) {
+                    break;
+                case TMS:
                     p = new AddTMSLayerPanel();
-                } else {
+                    break;
+                case WMTS:
+                    p = new AddWMTSLayerPanel();
+                    break;
+                default:
                     throw new IllegalStateException("Type " + type + " not supported");
                 }
 
@@ -642,7 +662,7 @@ public final class ImageryPreference extends DefaultTabPreferenceSetting {
              * Constructs a new {@code ImageryLayerTableModel}.
              */
             public ImageryLayerTableModel() {
-                setColumnIdentifiers(new String[] { tr("Menu Name"), tr("Imagery URL")});
+                setColumnIdentifiers(new String[] {tr("Menu Name"), tr("Imagery URL")});
             }
 
             /**
@@ -698,18 +718,13 @@ public final class ImageryPreference extends DefaultTabPreferenceSetting {
                     info.clearId();
                     break;
                 case 1:
-                    info.setExtendedUrl((String)o);
+                    info.setExtendedUrl((String) o);
                     info.clearId();
                     break;
                 default:
                     throw new ArrayIndexOutOfBoundsException();
                 }
             }
-
-            @Override
-            public boolean isCellEditable(int row, int column) {
-                return true;
-            }
         }
 
         /**
@@ -770,7 +785,7 @@ public final class ImageryPreference extends DefaultTabPreferenceSetting {
                         url = new URL(eulaUrl.replaceAll("\\{lang\\}", ""));
                         htmlPane = new JosmEditorPane(url);
                     } catch (IOException e2) {
-                        JOptionPane.showMessageDialog(gui ,tr("EULA license URL not available: {0}", eulaUrl));
+                        JOptionPane.showMessageDialog(gui, tr("EULA license URL not available: {0}", eulaUrl));
                         return false;
                     }
                 }
@@ -784,7 +799,7 @@ public final class ImageryPreference extends DefaultTabPreferenceSetting {
                 if (option == JOptionPane.YES_OPTION)
                     return true;
             } catch (MalformedURLException e2) {
-                JOptionPane.showMessageDialog(gui ,tr("Malformed URL for the EULA licence: {0}", eulaUrl));
+                JOptionPane.showMessageDialog(gui, tr("Malformed URL for the EULA licence: {0}", eulaUrl));
             }
             return false;
         }
@@ -824,7 +839,7 @@ public final class ImageryPreference extends DefaultTabPreferenceSetting {
             add.addActionListener(new ActionListener() {
                 @Override
                 public void actionPerformed(ActionEvent e) {
-                    OffsetBookmark b = new OffsetBookmark(Main.getProjection().toCode(),"","",0,0);
+                    OffsetBookmark b = new OffsetBookmark(Main.getProjection().toCode(), "", "", 0, 0);
                     model.addRow(b);
                 }
             });
@@ -845,7 +860,7 @@ public final class ImageryPreference extends DefaultTabPreferenceSetting {
                 }
             });
 
-            add(buttonPanel,GBC.eol());
+            add(buttonPanel, GBC.eol());
         }
 
         /**
@@ -857,7 +872,7 @@ public final class ImageryPreference extends DefaultTabPreferenceSetting {
              * Constructs a new {@code OffsetsBookmarksModel}.
              */
             public OffsetsBookmarksModel() {
-                setColumnIdentifiers(new String[] { tr("Projection"),  tr("Layer"), tr("Name"), tr("Easting"), tr("Northing"),});
+                setColumnIdentifiers(new String[] {tr("Projection"), tr("Layer"), tr("Name"), tr("Easting"), tr("Northing")});
             }
 
             public OffsetBookmark getRow(int row) {
@@ -887,7 +902,7 @@ public final class ImageryPreference extends DefaultTabPreferenceSetting {
                 switch (column) {
                 case 0:
                     if (info.projectionCode == null) return "";
-                    return info.projectionCode.toString();
+                    return info.projectionCode;
                 case 1:
                     return info.layerName;
                 case 2:
diff --git a/src/org/openstreetmap/josm/gui/preferences/imagery/TMSSettingsPanel.java b/src/org/openstreetmap/josm/gui/preferences/imagery/TMSSettingsPanel.java
index 0a7b89d..0e5eceb 100644
--- a/src/org/openstreetmap/josm/gui/preferences/imagery/TMSSettingsPanel.java
+++ b/src/org/openstreetmap/josm/gui/preferences/imagery/TMSSettingsPanel.java
@@ -12,9 +12,7 @@ import javax.swing.JSpinner;
 import javax.swing.SpinnerNumberModel;
 
 import org.openstreetmap.josm.data.imagery.TMSCachedTileLoader;
-import org.openstreetmap.josm.data.imagery.TMSCachedTileLoaderJob;
 import org.openstreetmap.josm.gui.layer.TMSLayer;
-import org.openstreetmap.josm.gui.widgets.JosmTextField;
 import org.openstreetmap.josm.tools.GBC;
 
 /**
@@ -29,8 +27,7 @@ public class TMSSettingsPanel extends JPanel {
     private final JSpinner minZoomLvl;
     private final JSpinner maxZoomLvl;
     private final JCheckBox addToSlippyMapChosser = new JCheckBox();
-    private final JosmTextField tilecacheDir = new JosmTextField();
-    private final JSpinner maxElementsOnDisk;
+
     private final JSpinner maxConcurrentDownloads;
     private final JSpinner maxDownloadsPerHost;
 
@@ -40,11 +37,15 @@ public class TMSSettingsPanel extends JPanel {
      */
     public TMSSettingsPanel() {
         super(new GridBagLayout());
-        minZoomLvl = new JSpinner(new SpinnerNumberModel(TMSLayer.DEFAULT_MIN_ZOOM, TMSLayer.MIN_ZOOM, TMSLayer.MAX_ZOOM, 1));
-        maxZoomLvl = new JSpinner(new SpinnerNumberModel(TMSLayer.DEFAULT_MAX_ZOOM, TMSLayer.MIN_ZOOM, TMSLayer.MAX_ZOOM, 1));
-        maxElementsOnDisk = new JSpinner(new SpinnerNumberModel(TMSCachedTileLoader.MAX_OBJECTS_ON_DISK.get().intValue(), 0, Integer.MAX_VALUE, 1));
-        maxConcurrentDownloads = new JSpinner(new SpinnerNumberModel(TMSCachedTileLoaderJob.THREAD_LIMIT.get().intValue(), 0, Integer.MAX_VALUE, 1));
-        maxDownloadsPerHost = new JSpinner(new SpinnerNumberModel(TMSCachedTileLoaderJob.HOST_LIMIT.get().intValue(), 0, Integer.MAX_VALUE, 1));
+        minZoomLvl = new JSpinner(new SpinnerNumberModel(
+                TMSLayer.PROP_MIN_ZOOM_LVL.get().intValue(), TMSLayer.MIN_ZOOM, TMSLayer.MAX_ZOOM, 1));
+        maxZoomLvl = new JSpinner(new SpinnerNumberModel(
+                TMSLayer.PROP_MAX_ZOOM_LVL.get().intValue(), TMSLayer.MIN_ZOOM, TMSLayer.MAX_ZOOM, 1));
+        maxConcurrentDownloads = new JSpinner(new SpinnerNumberModel(
+                TMSCachedTileLoader.THREAD_LIMIT.get().intValue(), 0, Integer.MAX_VALUE, 1));
+        maxDownloadsPerHost = new JSpinner(new SpinnerNumberModel(
+                TMSCachedTileLoader.HOST_LIMIT.get().intValue(), 0, Integer.MAX_VALUE, 1));
+
 
         add(new JLabel(tr("Auto zoom by default: ")), GBC.std());
         add(GBC.glue(5, 0), GBC.std());
@@ -66,10 +67,6 @@ public class TMSSettingsPanel extends JPanel {
         add(GBC.glue(5, 0), GBC.std());
         add(addToSlippyMapChosser, GBC.eol().fill(GBC.HORIZONTAL));
 
-        add(new JLabel(tr("Tile cache directory: ")), GBC.std());
-        add(GBC.glue(5, 0), GBC.std());
-        add(tilecacheDir, GBC.eol().fill(GBC.HORIZONTAL));
-
         add(new JLabel(tr("Maximum concurrent downloads: ")), GBC.std());
         add(GBC.glue(5, 0), GBC.std());
         add(maxConcurrentDownloads, GBC.eol());
@@ -78,11 +75,6 @@ public class TMSSettingsPanel extends JPanel {
         add(GBC.glue(5, 0), GBC.std());
         add(maxDownloadsPerHost, GBC.eol());
 
-
-        add(new JLabel(tr("Maximum elements in disk cache: ")), GBC.std());
-        add(GBC.glue(5, 0), GBC.std());
-        add(this.maxElementsOnDisk, GBC.eol());
-
     }
 
     /**
@@ -94,10 +86,8 @@ public class TMSSettingsPanel extends JPanel {
         this.addToSlippyMapChosser.setSelected(TMSLayer.PROP_ADD_TO_SLIPPYMAP_CHOOSER.get());
         this.maxZoomLvl.setValue(TMSLayer.getMaxZoomLvl(null));
         this.minZoomLvl.setValue(TMSLayer.getMinZoomLvl(null));
-        this.tilecacheDir.setText(TMSLayer.PROP_TILECACHE_DIR.get());
-        this.maxElementsOnDisk.setValue(TMSCachedTileLoader.MAX_OBJECTS_ON_DISK.get());
-        this.maxConcurrentDownloads.setValue(TMSCachedTileLoaderJob.THREAD_LIMIT.get());
-        this.maxDownloadsPerHost.setValue(TMSCachedTileLoaderJob.HOST_LIMIT.get());
+        this.maxConcurrentDownloads.setValue(TMSCachedTileLoader.THREAD_LIMIT.get());
+        this.maxDownloadsPerHost.setValue(TMSCachedTileLoader.HOST_LIMIT.get());
     }
 
     /**
@@ -107,24 +97,23 @@ public class TMSSettingsPanel extends JPanel {
     public boolean saveSettings() {
         boolean restartRequired = false;
 
-        if (TMSLayer.PROP_ADD_TO_SLIPPYMAP_CHOOSER.get() != this.addToSlippyMapChosser.isSelected()) {
+        if (!TMSLayer.PROP_ADD_TO_SLIPPYMAP_CHOOSER.get().equals(this.addToSlippyMapChosser.isSelected())) {
             restartRequired = true;
         }
         TMSLayer.PROP_ADD_TO_SLIPPYMAP_CHOOSER.put(this.addToSlippyMapChosser.isSelected());
         TMSLayer.PROP_DEFAULT_AUTOZOOM.put(this.autozoomActive.isSelected());
         TMSLayer.PROP_DEFAULT_AUTOLOAD.put(this.autoloadTiles.isSelected());
-        TMSLayer.setMaxZoomLvl((Integer)this.maxZoomLvl.getValue());
-        TMSLayer.setMinZoomLvl((Integer)this.minZoomLvl.getValue());
-
-        TMSCachedTileLoader.MAX_OBJECTS_ON_DISK.put((Integer) this.maxElementsOnDisk.getValue());
+        TMSLayer.setMaxZoomLvl((Integer) this.maxZoomLvl.getValue());
+        TMSLayer.setMinZoomLvl((Integer) this.minZoomLvl.getValue());
 
-        TMSCachedTileLoaderJob.THREAD_LIMIT.put((Integer) this.maxConcurrentDownloads.getValue());
-        TMSCachedTileLoaderJob.HOST_LIMIT.put((Integer) this.maxDownloadsPerHost.getValue());
-        TMSCachedTileLoaderJob.reconfigureDownloadDispatcher();
+        if (!TMSCachedTileLoader.THREAD_LIMIT.get().equals(this.maxConcurrentDownloads.getValue())) {
+            TMSCachedTileLoader.THREAD_LIMIT.put((Integer) this.maxConcurrentDownloads.getValue());
+            restartRequired = true;
+        }
 
-        if (!TMSLayer.PROP_TILECACHE_DIR.get().equals(this.tilecacheDir.getText())) {
+        if (!TMSCachedTileLoader.HOST_LIMIT.get().equals(this.maxDownloadsPerHost.getValue())) {
+            TMSCachedTileLoader.HOST_LIMIT.put((Integer) this.maxDownloadsPerHost.getValue());
             restartRequired = true;
-            TMSLayer.PROP_TILECACHE_DIR.put(this.tilecacheDir.getText());
         }
 
         return restartRequired;
diff --git a/src/org/openstreetmap/josm/gui/preferences/imagery/WMSSettingsPanel.java b/src/org/openstreetmap/josm/gui/preferences/imagery/WMSSettingsPanel.java
index 044c91b..dfe1e44 100644
--- a/src/org/openstreetmap/josm/gui/preferences/imagery/WMSSettingsPanel.java
+++ b/src/org/openstreetmap/josm/gui/preferences/imagery/WMSSettingsPanel.java
@@ -3,7 +3,6 @@ package org.openstreetmap.josm.gui.preferences.imagery;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
 
-import java.awt.FlowLayout;
 import java.awt.GridBagLayout;
 
 import javax.swing.Box;
@@ -13,9 +12,8 @@ import javax.swing.JPanel;
 import javax.swing.JSpinner;
 import javax.swing.SpinnerNumberModel;
 
+import org.openstreetmap.josm.data.imagery.WMSCachedTileLoaderJob;
 import org.openstreetmap.josm.gui.layer.WMSLayer;
-import org.openstreetmap.josm.gui.widgets.JosmComboBox;
-import org.openstreetmap.josm.io.imagery.HTMLGrabber;
 import org.openstreetmap.josm.tools.GBC;
 
 /**
@@ -26,11 +24,8 @@ public class WMSSettingsPanel extends JPanel {
 
     // WMS Settings
     private final JCheckBox autozoomActive;
-    private final JosmComboBox<String> browser;
-    private final JCheckBox overlapCheckBox;
-    private final JSpinner spinEast;
-    private final JSpinner spinNorth;
     private final JSpinner spinSimConn;
+    private final JSpinner tileSize;
 
     /**
      * Constructs a new {@code WMSSettingsPanel}.
@@ -44,69 +39,42 @@ public class WMSSettingsPanel extends JPanel {
         add(GBC.glue(5, 0), GBC.std());
         add(autozoomActive, GBC.eol().fill(GBC.HORIZONTAL));
 
-        // Downloader
-        browser = new JosmComboBox<>(new String[] {
-                "webkit-image {0}",
-                "gnome-web-photo --mode=photo --format=png {0} /dev/stdout",
-                "gnome-web-photo-fixed {0}",
-        "webkit-image-gtk {0}"});
-        browser.setEditable(true);
-        add(new JLabel(tr("Downloader:")), GBC.std());
-        add(GBC.glue(5, 0), GBC.std());
-        add(browser, GBC.eol().fill(GBC.HORIZONTAL));
-
         // Simultaneous connections
         add(Box.createHorizontalGlue(), GBC.eol().fill(GBC.HORIZONTAL));
         JLabel labelSimConn = new JLabel(tr("Simultaneous connections:"));
-        spinSimConn = new JSpinner(new SpinnerNumberModel(WMSLayer.PROP_SIMULTANEOUS_CONNECTIONS.get().intValue(), 1, 30, 1));
+        spinSimConn = new JSpinner(new SpinnerNumberModel(WMSCachedTileLoaderJob.THREAD_LIMIT.get().intValue(), 1, 30, 1));
+        labelSimConn.setLabelFor(spinSimConn);
         add(labelSimConn, GBC.std());
         add(GBC.glue(5, 0), GBC.std());
         add(spinSimConn, GBC.eol());
 
-        // Overlap
-        add(Box.createHorizontalGlue(), GBC.eol().fill(GBC.HORIZONTAL));
-
-        overlapCheckBox = new JCheckBox(tr("Overlap tiles"));
-        JLabel labelEast = new JLabel(tr("% of east:"));
-        JLabel labelNorth = new JLabel(tr("% of north:"));
-        spinEast = new JSpinner(new SpinnerNumberModel(WMSLayer.PROP_OVERLAP_EAST.get().intValue(), 1, 50, 1));
-        spinNorth = new JSpinner(new SpinnerNumberModel(WMSLayer.PROP_OVERLAP_NORTH.get().intValue(), 1, 50, 1));
-
-        JPanel overlapPanel = new JPanel(new FlowLayout());
-        overlapPanel.add(overlapCheckBox);
-        overlapPanel.add(labelEast);
-        overlapPanel.add(spinEast);
-        overlapPanel.add(labelNorth);
-        overlapPanel.add(spinNorth);
-
-        add(overlapPanel, GBC.eop());
+        // Tile size
+        JLabel labelTileSize = new JLabel(tr("Tile size:"));
+        tileSize = new JSpinner(new SpinnerNumberModel(WMSLayer.PROP_IMAGE_SIZE.get().intValue(), 1, 4096, 128));
+        labelTileSize.setLabelFor(tileSize);
+        add(labelTileSize, GBC.std());
+        add(GBC.glue(5, 0), GBC.std());
+        add(tileSize, GBC.eol());
     }
-    
+
     /**
      * Loads the WMS settings.
      */
     public void loadSettings() {
         this.autozoomActive.setSelected(WMSLayer.PROP_DEFAULT_AUTOZOOM.get());
-        this.browser.setSelectedItem(HTMLGrabber.PROP_BROWSER.get());
-        this.overlapCheckBox.setSelected(WMSLayer.PROP_OVERLAP.get());
-        this.spinEast.setValue(WMSLayer.PROP_OVERLAP_EAST.get());
-        this.spinNorth.setValue(WMSLayer.PROP_OVERLAP_NORTH.get());
-        this.spinSimConn.setValue(WMSLayer.PROP_SIMULTANEOUS_CONNECTIONS.get());
+        this.spinSimConn.setValue(WMSCachedTileLoaderJob.THREAD_LIMIT.get());
+        this.tileSize.setValue(WMSLayer.PROP_IMAGE_SIZE.get());
     }
-    
+
     /**
      * Saves the WMS settings.
      * @return true when restart is required
      */
     public boolean saveSettings() {
         WMSLayer.PROP_DEFAULT_AUTOZOOM.put(this.autozoomActive.isSelected());
-        WMSLayer.PROP_OVERLAP.put(overlapCheckBox.getModel().isSelected());
-        WMSLayer.PROP_OVERLAP_EAST.put((Integer) spinEast.getModel().getValue());
-        WMSLayer.PROP_OVERLAP_NORTH.put((Integer) spinNorth.getModel().getValue());
-        WMSLayer.PROP_SIMULTANEOUS_CONNECTIONS.put((Integer) spinSimConn.getModel().getValue());
+        WMSCachedTileLoaderJob.THREAD_LIMIT.put((Integer) spinSimConn.getModel().getValue());
+        WMSLayer.PROP_IMAGE_SIZE.put((Integer) this.tileSize.getModel().getValue());
 
-        HTMLGrabber.PROP_BROWSER.put(browser.getEditor().getItem().toString());
-        
         return false;
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/preferences/map/BackupPreference.java b/src/org/openstreetmap/josm/gui/preferences/map/BackupPreference.java
index 3058ba4..3073aee 100644
--- a/src/org/openstreetmap/josm/gui/preferences/map/BackupPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/map/BackupPreference.java
@@ -41,6 +41,7 @@ public class BackupPreference implements SubPreferenceSetting {
             return new BackupPreference();
         }
     }
+
     private static final BooleanProperty PROP_KEEP_BACKUP = new BooleanProperty("save.keepbackup", false);
     private JCheckBox notification;
     private JCheckBox keepBackup;
@@ -52,32 +53,34 @@ public class BackupPreference implements SubPreferenceSetting {
     public void addGui(PreferenceTabbedPane gui) {
         JPanel panel = new VerticallyScrollablePanel();
         panel.setLayout(new GridBagLayout());
-        panel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
 
         autosave = new JCheckBox(tr("Auto save enabled"));
         autosave.setSelected(AutosaveTask.PROP_AUTOSAVE_ENABLED.get());
         panel.add(autosave, GBC.eol());
 
         final JLabel autosaveIntervalLabel = new JLabel(tr("Auto save interval (seconds)"));
-        panel.add(autosaveIntervalLabel, GBC.std().insets(60,0,0,0));
+        autosaveIntervalLabel.setLabelFor(autosaveInterval);
+        panel.add(autosaveIntervalLabel, GBC.std().insets(60, 0, 0, 0));
         autosaveInterval.setText(Integer.toString(AutosaveTask.PROP_INTERVAL.get()));
         autosaveInterval.setToolTipText(tr("Default value: {0}", AutosaveTask.PROP_INTERVAL.getDefaultValue()));
         autosaveInterval.setMinimumSize(autosaveInterval.getPreferredSize());
-        panel.add(autosaveInterval, GBC.eol().insets(5,0,0,5));
+        panel.add(autosaveInterval, GBC.eol().insets(5, 0, 0, 5));
 
         final JLabel backupPerLayerLabel = new JLabel(tr("Auto saved files per layer"));
-        panel.add(backupPerLayerLabel, GBC.std().insets(60,0,0,0));
+        backupPerLayerLabel.setLabelFor(backupPerLayer);
+        panel.add(backupPerLayerLabel, GBC.std().insets(60, 0, 0, 0));
         backupPerLayer.setText(Integer.toString(AutosaveTask.PROP_FILES_PER_LAYER.get()));
         backupPerLayer.setToolTipText(tr("Default value: {0}", AutosaveTask.PROP_FILES_PER_LAYER.getDefaultValue()));
         backupPerLayer.setMinimumSize(backupPerLayer.getPreferredSize());
-        panel.add(backupPerLayer, GBC.eol().insets(5,0,0,10));
+        panel.add(backupPerLayer, GBC.eol().insets(5, 0, 0, 10));
 
         panel.add(new HtmlPanel(
             tr("<i>(Autosave stores the changed data layers in periodic intervals. " +
                 "The backups are saved in JOSM''s preference folder. " +
                 "In case of a crash, JOSM tries to recover the unsaved changes " +
                 "on next start.)</i>")),
-            GBC.eop().fill(GBC.HORIZONTAL).insets(5,0,0,10));
+            GBC.eop().fill(GBC.HORIZONTAL).insets(5, 0, 0, 10));
 
         panel.add(new JSeparator(), GBC.eop().fill(GBC.HORIZONTAL));
 
@@ -89,7 +92,7 @@ public class BackupPreference implements SubPreferenceSetting {
         panel.add(new HtmlPanel(
             tr("<i>(JOSM can keep a backup file when saving data layers. "+
                 "It appends ''~'' to the file name and saves it in the same folder.)</i>")),
-            GBC.eop().fill(GBC.HORIZONTAL).insets(5,0,0,0));
+            GBC.eop().fill(GBC.HORIZONTAL).insets(5, 0, 0, 0));
 
         panel.add(new JSeparator(), GBC.eop().fill(GBC.HORIZONTAL));
 
@@ -98,7 +101,7 @@ public class BackupPreference implements SubPreferenceSetting {
         notification.setToolTipText(tr("When saving, display a small notification"));
         panel.add(notification, GBC.eop());
 
-        ActionListener autosaveEnabled = new ActionListener(){
+        ActionListener autosaveEnabled = new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
                 boolean enabled = autosave.isSelected();
diff --git a/src/org/openstreetmap/josm/gui/preferences/map/MapPaintPreference.java b/src/org/openstreetmap/josm/gui/preferences/map/MapPaintPreference.java
index cca419c..34ef236 100644
--- a/src/org/openstreetmap/josm/gui/preferences/map/MapPaintPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/map/MapPaintPreference.java
@@ -72,10 +72,10 @@ public class MapPaintPreference implements SubPreferenceSetting {
         sources = new MapPaintSourceEditor();
 
         final JPanel panel = new JPanel(new GridBagLayout());
-        panel.setBorder(BorderFactory.createEmptyBorder( 0, 0, 0, 0 ));
+        panel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
 
         panel.add(sources, GBC.eol().fill(GBC.BOTH));
-        panel.add(enableIconDefault, GBC.eol().insets(11,2,5,0));
+        panel.add(enableIconDefault, GBC.eol().insets(11, 2, 5, 0));
 
         final MapPreference mapPref = gui.getMapPreference();
         mapPref.addSubTab(this, tr("Map Paint Styles"), panel);
@@ -267,7 +267,7 @@ public class MapPaintPreference implements SubPreferenceSetting {
             defPL2.title = tr("Potlatch 2");
             defPL2.description = tr("the main Potlatch 2 style");
 
-            return Arrays.asList(new ExtendedSourceEntry[] { defJosmMapcss, defPL2 });
+            return Arrays.asList(new ExtendedSourceEntry[] {defJosmMapcss, defPL2});
         }
 
         @Override
diff --git a/src/org/openstreetmap/josm/gui/preferences/map/MapPreference.java b/src/org/openstreetmap/josm/gui/preferences/map/MapPreference.java
index 59341bf..f377dc8 100644
--- a/src/org/openstreetmap/josm/gui/preferences/map/MapPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/map/MapPreference.java
@@ -1,4 +1,4 @@
-//License: GPL. For details, see LICENSE file.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.preferences.map;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -25,11 +25,12 @@ public final class MapPreference extends DefaultTabPreferenceSetting {
             return new MapPreference();
         }
     }
-    
+
     private MapPreference() {
-        super(/* ICON(preferences/) */ "map", tr("Map Settings"), tr("Settings for the map projection and data interpretation."), false, new JTabbedPane());
+        super(/* ICON(preferences/) */ "map", tr("Map Settings"),
+                tr("Settings for the map projection and data interpretation."), false, new JTabbedPane());
     }
-    
+
     @Override
     public boolean ok() {
         return false;
diff --git a/src/org/openstreetmap/josm/gui/preferences/map/TaggingPresetPreference.java b/src/org/openstreetmap/josm/gui/preferences/map/TaggingPresetPreference.java
index 034bd25..2ff92e4 100644
--- a/src/org/openstreetmap/josm/gui/preferences/map/TaggingPresetPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/map/TaggingPresetPreference.java
@@ -42,37 +42,7 @@ import org.xml.sax.SAXParseException;
  */
 public final class TaggingPresetPreference implements SubPreferenceSetting {
 
-    /**
-     * Factory used to create a new {@code TaggingPresetPreference}.
-     */
-    public static class Factory implements PreferenceSettingFactory {
-        @Override
-        public PreferenceSetting createPreferenceSetting() {
-            return new TaggingPresetPreference();
-        }
-    }
-
-    private TaggingPresetPreference() {
-        super();
-    }
-
-    private static final List<SourceProvider> presetSourceProviders = new ArrayList<>();
-
-    private SourceEditor sources;
-    private JCheckBox sortMenu;
-
-    /**
-     * Registers a new additional preset source provider.
-     * @param provider The preset source provider
-     * @return {@code true}, if the provider has been added, {@code false} otherwise
-     */
-    public static final boolean registerSourceProvider(SourceProvider provider) {
-        if (provider != null)
-            return presetSourceProviders.add(provider);
-        return false;
-    }
-
-    private ValidationListener validationListener = new ValidationListener() {
+    private final class TaggingPresetValidationListener implements ValidationListener {
         @Override
         public boolean validatePreferences() {
             if (sources.hasActiveSourcesChanged()) {
@@ -101,6 +71,9 @@ public final class TaggingPresetPreference implements SubPreferenceSetting {
                             }
                         } catch (SAXException e) {
                             // We will handle this in step with validation
+                            if (Main.isTraceEnabled()) {
+                                Main.trace(e.getMessage());
+                            }
                         }
 
                         String errorMessage = null;
@@ -133,7 +106,6 @@ public final class TaggingPresetPreference implements SubPreferenceSetting {
                                         "Do you really want to use it?<br><br><table width=600>Error is: {1}</table></html>",
                                         source, e.getMessage());
                             }
-
                         }
 
                         if (errorMessage != null) {
@@ -154,10 +126,43 @@ public final class TaggingPresetPreference implements SubPreferenceSetting {
                     }
                 sources.removeSources(sourcesToRemove);
                 return true;
-            }  else
+            }  else {
                 return true;
+            }
         }
-    };
+    }
+
+    /**
+     * Factory used to create a new {@code TaggingPresetPreference}.
+     */
+    public static class Factory implements PreferenceSettingFactory {
+        @Override
+        public PreferenceSetting createPreferenceSetting() {
+            return new TaggingPresetPreference();
+        }
+    }
+
+    private TaggingPresetPreference() {
+        super();
+    }
+
+    private static final List<SourceProvider> presetSourceProviders = new ArrayList<>();
+
+    private SourceEditor sources;
+    private JCheckBox sortMenu;
+
+    /**
+     * Registers a new additional preset source provider.
+     * @param provider The preset source provider
+     * @return {@code true}, if the provider has been added, {@code false} otherwise
+     */
+    public static boolean registerSourceProvider(SourceProvider provider) {
+        if (provider != null)
+            return presetSourceProviders.add(provider);
+        return false;
+    }
+
+    private final ValidationListener validationListener = new TaggingPresetValidationListener();
 
     @Override
     public void addGui(PreferenceTabbedPane gui) {
@@ -165,8 +170,8 @@ public final class TaggingPresetPreference implements SubPreferenceSetting {
                 Main.pref.getBoolean("taggingpreset.sortmenu", false));
 
         final JPanel panel = new JPanel(new GridBagLayout());
-        panel.setBorder(BorderFactory.createEmptyBorder( 0, 0, 0, 0 ));
-        panel.add(sortMenu, GBC.eol().insets(5,5,5,0));
+        panel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
+        panel.add(sortMenu, GBC.eol().insets(5, 5, 5, 0));
         sources = new TaggingPresetSourceEditor();
         panel.add(sources, GBC.eol().fill(GBC.BOTH));
         final MapPreference mapPref = gui.getMapPreference();
diff --git a/src/org/openstreetmap/josm/gui/preferences/plugin/PluginListPanel.java b/src/org/openstreetmap/josm/gui/preferences/plugin/PluginListPanel.java
index 52d2f68..0708d58 100644
--- a/src/org/openstreetmap/josm/gui/preferences/plugin/PluginListPanel.java
+++ b/src/org/openstreetmap/josm/gui/preferences/plugin/PluginListPanel.java
@@ -62,7 +62,7 @@ public class PluginListPanel extends VerticallyScrollablePanel {
         } else {
             sb.append(pi.version);
             if (pi.oldmode) {
-                sb.append("*");
+                sb.append('*');
             }
         }
         return sb.toString();
@@ -91,7 +91,7 @@ public class PluginListPanel extends VerticallyScrollablePanel {
         gbc.gridx = 0;
         gbc.anchor = GridBagConstraints.CENTER;
         gbc.fill = GridBagConstraints.BOTH;
-        gbc.insets = new Insets(40,0,40,0);
+        gbc.insets = new Insets(40, 0, 40, 0);
         gbc.weightx = 1.0;
         gbc.weighty = 1.0;
 
@@ -110,6 +110,7 @@ public class PluginListPanel extends VerticallyScrollablePanel {
      */
     private class JPluginCheckBox extends JCheckBox {
         public final transient PluginInformation pi;
+
         public JPluginCheckBox(final PluginInformation pi, boolean selected) {
             this.pi = pi;
             setSelected(selected);
@@ -124,9 +125,11 @@ public class PluginListPanel extends VerticallyScrollablePanel {
      */
     private class PluginCbActionListener implements ActionListener {
         private final JPluginCheckBox cb;
+
         public PluginCbActionListener(JPluginCheckBox cb) {
             this.cb = cb;
         }
+
         protected void selectRequiredPlugins(PluginInformation info) {
             if (info != null && info.requires != null) {
                 for (String s : info.getRequiredPlugins()) {
@@ -137,6 +140,7 @@ public class PluginListPanel extends VerticallyScrollablePanel {
                 }
             }
         }
+
         @Override
         public void actionPerformed(ActionEvent e) {
             // Select/unselect corresponding plugin in the model
@@ -147,9 +151,8 @@ public class PluginListPanel extends VerticallyScrollablePanel {
                 selectRequiredPlugins(cb.pi);
                 // Alert user if plugin requirements are not met
                 PluginHandler.checkRequiredPluginsPreconditions(PluginListPanel.this, model.getAvailablePlugins(), cb.pi, false);
-            }
-            // If the plugin has been unselected, was it required by other plugins still selected ?
-            else if (!cb.isSelected()) {
+            } else if (!cb.isSelected()) {
+                // If the plugin has been unselected, was it required by other plugins still selected ?
                 Set<String> otherPlugins = new HashSet<>();
                 for (PluginInformation pi : model.getAvailablePlugins()) {
                     if (!pi.equals(cb.pi) && pi.requires != null && model.isSelectedPlugin(pi.getName())) {
@@ -178,15 +181,14 @@ public class PluginListPanel extends VerticallyScrollablePanel {
      */
     private static void alertPluginStillRequired(Component parent, String plugin, Set<String> otherPlugins) {
         StringBuilder sb = new StringBuilder();
-        sb.append("<html>");
-        sb.append(trn("Plugin {0} is still required by this plugin:",
+        sb.append("<html>")
+          .append(trn("Plugin {0} is still required by this plugin:",
                 "Plugin {0} is still required by these {1} plugins:",
                 otherPlugins.size(),
                 plugin,
-                otherPlugins.size()
-        ));
-        sb.append(Utils.joinAsHtmlUnorderedList(otherPlugins));
-        sb.append("</html>");
+                otherPlugins.size()))
+          .append(Utils.joinAsHtmlUnorderedList(otherPlugins))
+          .append("</html>");
         JOptionPane.showMessageDialog(
                 parent,
                 sb.toString(),
@@ -238,7 +240,7 @@ public class PluginListPanel extends VerticallyScrollablePanel {
 
             gbc.gridx = 0;
             gbc.gridy = ++row;
-            gbc.insets = new Insets(5,5,0,5);
+            gbc.insets = new Insets(5, 5, 0, 5);
             gbc.weighty = 0.0;
             gbc.weightx = 0.0;
             add(cbPlugin, gbc);
@@ -252,15 +254,16 @@ public class PluginListPanel extends VerticallyScrollablePanel {
             description.getEditorPane().addHyperlinkListener(new HyperlinkListener() {
                 @Override
                 public void hyperlinkUpdate(HyperlinkEvent e) {
-                    if(e.getEventType() == EventType.ACTIVATED) {
+                    if (e.getEventType() == EventType.ACTIVATED) {
                         OpenBrowser.displayUrl(e.getURL().toString());
                     }
                 }
             });
+            lblPlugin.setLabelFor(description);
 
             gbc.gridx = 1;
             gbc.gridy = ++row;
-            gbc.insets = new Insets(3,25,5,5);
+            gbc.insets = new Insets(3, 25, 5, 5);
             gbc.weighty = 1.0;
             add(description, gbc);
         }
diff --git a/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreference.java b/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreference.java
index ed38b9e..3a312ba 100644
--- a/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreference.java
@@ -1,4 +1,4 @@
-//License: GPL. For details, see LICENSE file.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.preferences.plugin;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -49,8 +49,6 @@ import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane.PreferencePan
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
 import org.openstreetmap.josm.gui.widgets.SelectAllOnFocusGainedDecorator;
-import org.openstreetmap.josm.io.OfflineAccessException;
-import org.openstreetmap.josm.io.OnlineResource;
 import org.openstreetmap.josm.plugins.PluginDownloadTask;
 import org.openstreetmap.josm.plugins.PluginInformation;
 import org.openstreetmap.josm.plugins.ReadLocalPluginInformationTask;
@@ -87,7 +85,7 @@ public final class PluginPreference extends DefaultTabPreferenceSetting {
         Collection<PluginInformation> downloaded = task.getDownloadedPlugins();
         Collection<PluginInformation> failed = task.getFailedPlugins();
         StringBuilder sb = new StringBuilder();
-        if (! downloaded.isEmpty()) {
+        if (!downloaded.isEmpty()) {
             sb.append(trn(
                     "The following plugin has been downloaded <strong>successfully</strong>:",
                     "The following {0} plugins have been downloaded <strong>successfully</strong>:",
@@ -95,12 +93,12 @@ public final class PluginPreference extends DefaultTabPreferenceSetting {
                     downloaded.size()
                     ));
             sb.append("<ul>");
-            for(PluginInformation pi: downloaded) {
-                sb.append("<li>").append(pi.name).append(" (").append(pi.version).append(")").append("</li>");
+            for (PluginInformation pi: downloaded) {
+                sb.append("<li>").append(pi.name).append(" (").append(pi.version).append(")</li>");
             }
             sb.append("</ul>");
         }
-        if (! failed.isEmpty()) {
+        if (!failed.isEmpty()) {
             sb.append(trn(
                     "Downloading the following plugin has <strong>failed</strong>:",
                     "Downloading the following {0} plugins has <strong>failed</strong>:",
@@ -108,7 +106,7 @@ public final class PluginPreference extends DefaultTabPreferenceSetting {
                     failed.size()
                     ));
             sb.append("<ul>");
-            for(PluginInformation pi: failed) {
+            for (PluginInformation pi: failed) {
                 sb.append("<li>").append(pi.name).append("</li>");
             }
             sb.append("</ul>");
@@ -120,14 +118,14 @@ public final class PluginPreference extends DefaultTabPreferenceSetting {
      * Notifies user about result of a finished plugin download task.
      * @param parent The parent component
      * @param task The finished plugin download task
+     * @param restartRequired true if a restart is required
      * @since 6797
      */
     public static void notifyDownloadResults(final Component parent, PluginDownloadTask task, boolean restartRequired) {
-        final Collection<PluginInformation> downloaded = task.getDownloadedPlugins();
         final Collection<PluginInformation> failed = task.getFailedPlugins();
         final StringBuilder sb = new StringBuilder();
-        sb.append("<html>");
-        sb.append(buildDownloadSummary(task));
+        sb.append("<html>")
+          .append(buildDownloadSummary(task));
         if (restartRequired) {
             sb.append(tr("Please restart JOSM to activate the downloaded plugins."));
         }
@@ -160,13 +158,13 @@ public final class PluginPreference extends DefaultTabPreferenceSetting {
 
     protected JPanel buildSearchFieldPanel() {
         JPanel pnl  = new JPanel(new GridBagLayout());
-        pnl.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        pnl.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
         GridBagConstraints gc = new GridBagConstraints();
 
         gc.anchor = GridBagConstraints.NORTHWEST;
         gc.fill = GridBagConstraints.HORIZONTAL;
         gc.weightx = 0.0;
-        gc.insets = new Insets(0,0,0,3);
+        gc.insets = new Insets(0, 0, 0, 3);
         pnl.add(new JLabel(tr("Search:")), gc);
 
         gc.gridx = 1;
@@ -180,7 +178,7 @@ public final class PluginPreference extends DefaultTabPreferenceSetting {
     }
 
     protected JPanel buildActionPanel() {
-        JPanel pnl = new JPanel(new GridLayout(1,3));
+        JPanel pnl = new JPanel(new GridLayout(1, 3));
 
         pnl.add(new JButton(new DownloadAvailablePluginsAction()));
         pnl.add(new JButton(new UpdateSelectedPluginsAction()));
@@ -195,11 +193,12 @@ public final class PluginPreference extends DefaultTabPreferenceSetting {
         pnlPluginPreferences = new PluginListPanel(model);
         spPluginPreferences = GuiHelper.embedInVerticalScrollPane(pnlPluginPreferences);
         spPluginPreferences.getVerticalScrollBar().addComponentListener(
-                new ComponentAdapter(){
+                new ComponentAdapter() {
                     @Override
                     public void componentShown(ComponentEvent e) {
                         spPluginPreferences.setBorder(UIManager.getBorder("ScrollPane.border"));
                     }
+
                     @Override
                     public void componentHidden(ComponentEvent e) {
                         spPluginPreferences.setBorder(null);
@@ -281,7 +280,7 @@ public final class PluginPreference extends DefaultTabPreferenceSetting {
 
     @Override
     public boolean ok() {
-        if (! pluginPreferencesActivated)
+        if (!pluginPreferencesActivated)
             return false;
         pnlPluginUpdatePolicy.rememberInPreferences();
         if (model.isActivePluginsChanged()) {
@@ -321,33 +320,23 @@ public final class PluginPreference extends DefaultTabPreferenceSetting {
         Main.worker.submit(r);
     }
 
-    private static Collection<String> getOnlinePluginSites() {
-        Collection<String> pluginSites = new ArrayList<>(Main.pref.getPluginSites());
-        for (Iterator<String> it = pluginSites.iterator(); it.hasNext();) {
-            try {
-                OnlineResource.JOSM_WEBSITE.checkOfflineAccess(it.next(), Main.getJOSMWebsite());
-            } catch (OfflineAccessException ex) {
-                Main.warn(ex.getMessage());
-                it.remove();
-            }
-        }
-        return pluginSites;
-    }
-
     /**
      * The action for downloading the list of available plugins
      */
     class DownloadAvailablePluginsAction extends AbstractAction {
 
+        /**
+         * Constructs a new {@code DownloadAvailablePluginsAction}.
+         */
         public DownloadAvailablePluginsAction() {
-            putValue(NAME,tr("Download list"));
+            putValue(NAME, tr("Download list"));
             putValue(SHORT_DESCRIPTION, tr("Download the list of available plugins"));
             putValue(SMALL_ICON, ImageProvider.get("download"));
         }
 
         @Override
         public void actionPerformed(ActionEvent e) {
-            Collection<String> pluginSites = getOnlinePluginSites();
+            Collection<String> pluginSites = Main.pref.getOnlinePluginSites();
             if (pluginSites.isEmpty()) {
                 return;
             }
@@ -369,7 +358,6 @@ public final class PluginPreference extends DefaultTabPreferenceSetting {
             Main.worker.submit(task);
             Main.worker.submit(continuation);
         }
-
     }
 
     /**
@@ -377,7 +365,7 @@ public final class PluginPreference extends DefaultTabPreferenceSetting {
      */
     class UpdateSelectedPluginsAction extends AbstractAction {
         public UpdateSelectedPluginsAction() {
-            putValue(NAME,tr("Update plugins"));
+            putValue(NAME, tr("Update plugins"));
             putValue(SHORT_DESCRIPTION, tr("Update the selected plugins"));
             putValue(SMALL_ICON, ImageProvider.get("dialogs", "refresh"));
         }
@@ -411,7 +399,8 @@ public final class PluginPreference extends DefaultTabPreferenceSetting {
                     tr("Update plugins")
                     );
             // the async task for downloading plugin information
-            final ReadRemotePluginInformationTask pluginInfoDownloadTask = new ReadRemotePluginInformationTask(getOnlinePluginSites());
+            final ReadRemotePluginInformationTask pluginInfoDownloadTask = new ReadRemotePluginInformationTask(
+                    Main.pref.getOnlinePluginSites());
 
             // to be run asynchronously after the plugin download
             //
@@ -433,7 +422,8 @@ public final class PluginPreference extends DefaultTabPreferenceSetting {
                     GuiHelper.runInEDT(new Runnable() {
                         @Override
                         public void run() {
-                            pnlPluginPreferences.refreshView();                        }
+                            pnlPluginPreferences.refreshView();
+                        }
                     });
                 }
             };
@@ -477,7 +467,7 @@ public final class PluginPreference extends DefaultTabPreferenceSetting {
      */
     class ConfigureSitesAction extends AbstractAction {
         public ConfigureSitesAction() {
-            putValue(NAME,tr("Configure sites..."));
+            putValue(NAME, tr("Configure sites..."));
             putValue(SHORT_DESCRIPTION, tr("Configure the list of sites where plugins are downloaded from"));
             putValue(SMALL_ICON, ImageProvider.get("dialogs", "settings"));
         }
@@ -532,7 +522,7 @@ public final class PluginPreference extends DefaultTabPreferenceSetting {
             final JList<String> list = new JList<>(model);
             add(new JScrollPane(list), GBC.std().fill());
             JPanel buttons = new JPanel(new GridBagLayout());
-            buttons.add(new JButton(new AbstractAction(tr("Add")){
+            buttons.add(new JButton(new AbstractAction(tr("Add")) {
                 @Override
                 public void actionPerformed(ActionEvent e) {
                     String s = JOptionPane.showInputDialog(
@@ -546,7 +536,7 @@ public final class PluginPreference extends DefaultTabPreferenceSetting {
                     }
                 }
             }), GBC.eol().fill(GBC.HORIZONTAL));
-            buttons.add(new JButton(new AbstractAction(tr("Edit")){
+            buttons.add(new JButton(new AbstractAction(tr("Edit")) {
                 @Override
                 public void actionPerformed(ActionEvent e) {
                     if (list.getSelectedValue() == null) {
@@ -558,7 +548,7 @@ public final class PluginPreference extends DefaultTabPreferenceSetting {
                                 );
                         return;
                     }
-                    String s = (String)JOptionPane.showInputDialog(
+                    String s = (String) JOptionPane.showInputDialog(
                             Main.parent,
                             tr("Edit JOSM Plugin description URL."),
                             tr("JOSM Plugin description URL"),
@@ -572,7 +562,7 @@ public final class PluginPreference extends DefaultTabPreferenceSetting {
                     }
                 }
             }), GBC.eol().fill(GBC.HORIZONTAL));
-            buttons.add(new JButton(new AbstractAction(tr("Delete")){
+            buttons.add(new JButton(new AbstractAction(tr("Delete")) {
                 @Override
                 public void actionPerformed(ActionEvent event) {
                     if (list.getSelectedValue() == null) {
@@ -597,12 +587,10 @@ public final class PluginPreference extends DefaultTabPreferenceSetting {
         public List<String> getUpdateSites() {
             if (model.getSize() == 0) return Collections.emptyList();
             List<String> ret = new ArrayList<>(model.getSize());
-            for (int i=0; i< model.getSize();i++){
+            for (int i = 0; i < model.getSize(); i++) {
                 ret.add(model.get(i));
             }
             return ret;
         }
     }
-
-
 }
diff --git a/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreferencesModel.java b/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreferencesModel.java
index 9f9445a..65e2ba4 100644
--- a/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreferencesModel.java
+++ b/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreferencesModel.java
@@ -10,6 +10,7 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Observable;
@@ -83,7 +84,7 @@ public class PluginPreferencesModel extends Observable {
         for (PluginInformation pi: availablePlugins) {
             if (selectedPluginsMap.get(pi) == null) {
                 if (activePlugins.contains(pi.name)) {
-                    selectedPluginsMap.put(pi, true);
+                    selectedPluginsMap.put(pi, Boolean.TRUE);
                 }
             }
         }
@@ -154,8 +155,8 @@ public class PluginPreferencesModel extends Observable {
                 new Comparator<PluginInformation>() {
                     @Override
                     public int compare(PluginInformation o1, PluginInformation o2) {
-                        String n1 = o1.getName() == null ? "" : o1.getName().toLowerCase();
-                        String n2 = o2.getName() == null ? "" : o2.getName().toLowerCase();
+                        String n1 = o1.getName() == null ? "" : o1.getName().toLowerCase(Locale.ENGLISH);
+                        String n2 = o2.getName() == null ? "" : o2.getName().toLowerCase(Locale.ENGLISH);
                         return n1.compareTo(n2);
                     }
                 }
@@ -279,7 +280,7 @@ public class PluginPreferencesModel extends Observable {
         for (Entry<PluginInformation, Boolean> entry: selectedPluginsMap.entrySet()) {
             PluginInformation pi = entry.getKey();
             boolean selected = entry.getValue();
-            if (selected && ! currentActivePlugins.contains(pi.name)) {
+            if (selected && !currentActivePlugins.contains(pi.name)) {
                 ret.add(pi);
             }
         }
@@ -298,7 +299,7 @@ public class PluginPreferencesModel extends Observable {
             if (!currentActivePlugins.contains(pi.name)) {
                 continue;
             }
-            if (selectedPluginsMap.get(pi) == null || ! selectedPluginsMap.get(pi)) {
+            if (selectedPluginsMap.get(pi) == null || !selectedPluginsMap.get(pi)) {
                 ret.add(pi);
             }
         }
@@ -338,7 +339,7 @@ public class PluginPreferencesModel extends Observable {
      */
     public boolean isActivePluginsChanged() {
         Set<String> newActivePlugins = getSelectedPluginNames();
-        return ! newActivePlugins.equals(currentActivePlugins);
+        return !newActivePlugins.equals(currentActivePlugins);
     }
 
     /**
@@ -362,7 +363,7 @@ public class PluginPreferencesModel extends Observable {
                     continue;
                 }
                 oldinfo.updateLocalInfo(newinfo);
-            } catch(PluginException e) {
+            } catch (PluginException e) {
                 Main.error(e);
             }
         }
diff --git a/src/org/openstreetmap/josm/gui/preferences/plugin/PluginUpdatePolicyPanel.java b/src/org/openstreetmap/josm/gui/preferences/plugin/PluginUpdatePolicyPanel.java
index a52dff9..bab89a3 100644
--- a/src/org/openstreetmap/josm/gui/preferences/plugin/PluginUpdatePolicyPanel.java
+++ b/src/org/openstreetmap/josm/gui/preferences/plugin/PluginUpdatePolicyPanel.java
@@ -7,7 +7,8 @@ import java.awt.FlowLayout;
 import java.awt.GridBagConstraints;
 import java.awt.GridBagLayout;
 import java.awt.Insets;
-import java.util.HashMap;
+import java.util.EnumMap;
+import java.util.Locale;
 import java.util.Map;
 
 import javax.swing.ButtonGroup;
@@ -45,7 +46,7 @@ public class PluginUpdatePolicyPanel extends JPanel {
 
         static Policy fromPreferenceValue(String preferenceValue) {
             if (preferenceValue == null) return null;
-            preferenceValue = preferenceValue.trim().toLowerCase();
+            preferenceValue = preferenceValue.trim().toLowerCase(Locale.ENGLISH);
             for (Policy p: Policy.values()) {
                 if (p.getPreferencesValue().equals(preferenceValue))
                     return p;
@@ -64,10 +65,10 @@ public class PluginUpdatePolicyPanel extends JPanel {
         GridBagConstraints gc = new GridBagConstraints();
         gc.anchor = GridBagConstraints.NORTHWEST;
         gc.fill = GridBagConstraints.HORIZONTAL;
-        gc.weightx  =1.0;
+        gc.weightx = 1.0;
 
         ButtonGroup bgVersionBasedUpdatePolicy = new ButtonGroup();
-        rbVersionBasedUpatePolicy = new HashMap<>();
+        rbVersionBasedUpatePolicy = new EnumMap<>(Policy.class);
         JRadioButton btn = new JRadioButton(tr("Ask before updating"));
         rbVersionBasedUpatePolicy.put(Policy.ASK, btn);
         bgVersionBasedUpdatePolicy.add(btn);
@@ -80,8 +81,9 @@ public class PluginUpdatePolicyPanel extends JPanel {
         rbVersionBasedUpatePolicy.put(Policy.NEVER, btn);
         bgVersionBasedUpdatePolicy.add(btn);
 
-        JMultilineLabel lbl = new JMultilineLabel(tr("Please decide whether JOSM shall automatically update active plugins at startup after an update of JOSM itself."));
-        gc.gridy=0;
+        JMultilineLabel lbl = new JMultilineLabel(
+                tr("Please decide whether JOSM shall automatically update active plugins at startup after an update of JOSM itself."));
+        gc.gridy = 0;
         pnl.add(lbl, gc);
         for (Policy p: Policy.values()) {
             gc.gridy++;
@@ -94,6 +96,7 @@ public class PluginUpdatePolicyPanel extends JPanel {
         JPanel pnl = new JPanel(new FlowLayout(FlowLayout.LEFT));
         pnl.add(lblUpdateInterval = new JLabel(tr("Update interval (in days):")));
         pnl.add(tfUpdateInterval = new JosmTextField(5));
+        lblUpdateInterval.setLabelFor(tfUpdateInterval);
         SelectAllOnFocusGainedDecorator.decorate(tfUpdateInterval);
         return pnl;
     }
@@ -103,12 +106,12 @@ public class PluginUpdatePolicyPanel extends JPanel {
         GridBagConstraints gc = new GridBagConstraints();
         gc.anchor = GridBagConstraints.NORTHWEST;
         gc.fill = GridBagConstraints.HORIZONTAL;
-        gc.weightx  =1.0;
+        gc.weightx = 1.0;
 
         TimeBasedPolicyChangeListener changeListener = new TimeBasedPolicyChangeListener();
 
         ButtonGroup bgTimeBasedUpdatePolicy = new ButtonGroup();
-        rbTimeBasedUpatePolicy = new HashMap<>();
+        rbTimeBasedUpatePolicy = new EnumMap<>(Policy.class);
         JRadioButton btn = new JRadioButton(tr("Ask before updating"));
         btn.addChangeListener(changeListener);
         rbTimeBasedUpatePolicy.put(Policy.ASK, btn);
@@ -124,8 +127,9 @@ public class PluginUpdatePolicyPanel extends JPanel {
         rbTimeBasedUpatePolicy.put(Policy.NEVER, btn);
         bgTimeBasedUpdatePolicy.add(btn);
 
-        JMultilineLabel lbl = new JMultilineLabel(tr("Please decide whether JOSM shall automatically update active plugins after a certain period of time."));
-        gc.gridy=0;
+        JMultilineLabel lbl = new JMultilineLabel(
+                tr("Please decide whether JOSM shall automatically update active plugins after a certain period of time."));
+        gc.gridy = 0;
         pnl.add(lbl, gc);
         for (Policy p: Policy.values()) {
             gc.gridy++;
@@ -141,8 +145,8 @@ public class PluginUpdatePolicyPanel extends JPanel {
         GridBagConstraints gc = new GridBagConstraints();
         gc.anchor = GridBagConstraints.NORTHWEST;
         gc.fill = GridBagConstraints.HORIZONTAL;
-        gc.weightx  =1.0;
-        gc.insets = new Insets(5,5,10,5);
+        gc.weightx = 1.0;
+        gc.insets = new Insets(5, 5, 10, 5);
 
         add(buildVersionBasedUpdatePolicyPanel(), gc);
         gc.gridy = 1;
@@ -189,8 +193,11 @@ public class PluginUpdatePolicyPanel extends JPanel {
             pref = pref.trim();
             try {
                 days = Integer.parseInt(pref);
-            } catch(NumberFormatException e) {
+            } catch (NumberFormatException e) {
                 // ignore - load from preference pluginmanager.time-based-update.interval
+                if (Main.isTraceEnabled()) {
+                    Main.trace(e.getMessage());
+                }
             }
             if (days <= 0) {
                 days = PluginHandler.DEFAULT_TIME_BASED_UPDATE_INTERVAL;
@@ -233,7 +240,7 @@ public class PluginUpdatePolicyPanel extends JPanel {
             if (days <= 0) {
                 days = PluginHandler.DEFAULT_TIME_BASED_UPDATE_INTERVAL;
             }
-        } catch(NumberFormatException e) {
+        } catch (NumberFormatException e) {
             days = PluginHandler.DEFAULT_TIME_BASED_UPDATE_INTERVAL;
         }
         Main.pref.putInteger("pluginmanager.time-based-update.interval", days);
diff --git a/src/org/openstreetmap/josm/gui/preferences/projection/CodeProjectionChoice.java b/src/org/openstreetmap/josm/gui/preferences/projection/CodeProjectionChoice.java
index 047b42d..c3342bf 100644
--- a/src/org/openstreetmap/josm/gui/preferences/projection/CodeProjectionChoice.java
+++ b/src/org/openstreetmap/josm/gui/preferences/projection/CodeProjectionChoice.java
@@ -12,6 +12,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
+import java.util.Locale;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -48,8 +49,8 @@ public class CodeProjectionChoice extends AbstractProjectionChoice implements Su
         public JosmTextField filter;
         private ProjectionCodeListModel model;
         public JList<String> selectionList;
-        private transient List<String> data;
-        private transient List<String> filteredData;
+        private List<String> data;
+        private List<String> filteredData;
         private static final String DEFAULT_CODE = "EPSG:3857";
         private String lastCode = DEFAULT_CODE;
         private transient ActionListener listener;
@@ -70,6 +71,7 @@ public class CodeProjectionChoice extends AbstractProjectionChoice implements Su
         private static class CodeComparator implements Comparator<String>, Serializable {
             private static final long serialVersionUID = 1L;
             private final Pattern codePattern = Pattern.compile("([a-zA-Z]+):(\\d+)");
+
             @Override
             public int compare(String c1, String c2) {
                 Matcher matcher1 = codePattern.matcher(c1);
@@ -80,7 +82,7 @@ public class CodeProjectionChoice extends AbstractProjectionChoice implements Su
                         if (cmp1 != 0) return cmp1;
                         int num1 = Integer.parseInt(matcher1.group(2));
                         int num2 = Integer.parseInt(matcher2.group(2));
-                        return Integer.valueOf(num1).compareTo(num2);
+                        return Integer.compare(num1, num2);
                     } else
                         return -1;
                 } else if (matcher2.matches())
@@ -163,9 +165,9 @@ public class CodeProjectionChoice extends AbstractProjectionChoice implements Su
 
         private void updateFilter() {
             filteredData.clear();
-            String filterTxt = filter.getText().trim().toLowerCase();
+            String filterTxt = filter.getText().trim().toLowerCase(Locale.ENGLISH);
             for (String code : data) {
-                if (code.toLowerCase().contains(filterTxt)) {
+                if (code.toLowerCase(Locale.ENGLISH).contains(filterTxt)) {
                     filteredData.add(code);
                 }
             }
@@ -188,7 +190,6 @@ public class CodeProjectionChoice extends AbstractProjectionChoice implements Su
         return Projections.getProjectionByCode(code);
     }
 
-
     @Override
     public String getCurrentCode() {
         // not needed - getProjection() is overridden
diff --git a/src/org/openstreetmap/josm/gui/preferences/projection/CustomProjectionChoice.java b/src/org/openstreetmap/josm/gui/preferences/projection/CustomProjectionChoice.java
index ae8d968..e9b4963 100644
--- a/src/org/openstreetmap/josm/gui/preferences/projection/CustomProjectionChoice.java
+++ b/src/org/openstreetmap/josm/gui/preferences/projection/CustomProjectionChoice.java
@@ -8,13 +8,11 @@ import java.awt.GridBagLayout;
 import java.awt.Insets;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Map;
 
 import javax.swing.JButton;
 import javax.swing.JComponent;
@@ -35,7 +33,6 @@ import org.openstreetmap.josm.gui.widgets.HtmlPanel;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
-import org.openstreetmap.josm.tools.Utils;
 
 public class CustomProjectionChoice extends AbstractProjectionChoice implements SubPrefsOptions {
 
@@ -57,7 +54,7 @@ public class CustomProjectionChoice extends AbstractProjectionChoice implements
             build(initialText, listener);
         }
 
-        private final void build(String initialText, final ActionListener listener) {
+        private void build(String initialText, final ActionListener listener) {
             input = new JosmTextField(30);
             cbInput = new HistoryComboBox();
             cbInput.setPrototypeDisplayValue(new AutoCompletionListItem("xxxx"));
@@ -87,7 +84,7 @@ public class CustomProjectionChoice extends AbstractProjectionChoice implements
                 @Override
                 public void validate() {
                     if (!isValid()) {
-                        feedbackInvalid(tr("Invalid projection configuration: {0}",error));
+                        feedbackInvalid(tr("Invalid projection configuration: {0}", error));
                     } else {
                         feedbackValid(tr("Projection configuration is valid."));
                     }
@@ -123,7 +120,7 @@ public class CustomProjectionChoice extends AbstractProjectionChoice implements
                 }
             });
             btnCheck.setLayout(new BorderLayout());
-            btnCheck.setMargin(new Insets(-1,0,-1,0));
+            btnCheck.setMargin(new Insets(-1, 0, -1, 0));
 
             JButton btnInfo = new JButton(tr("Parameter information..."));
             btnInfo.addActionListener(new ActionListener() {
@@ -162,41 +159,36 @@ public class CustomProjectionChoice extends AbstractProjectionChoice implements
          * Constructs a new {@code ParameterInfoDialog}.
          */
         public ParameterInfoDialog() {
-            super(null, tr("Parameter information"), new String[] { tr("Close") }, false);
+            super(null, tr("Parameter information"), new String[] {tr("Close")}, false);
             setContent(build());
         }
 
         private JComponent build() {
             StringBuilder s = new StringBuilder();
-            s.append("<b>+proj=...</b> - <i>"+tr("Projection name")+"</i><br>");
-            s.append("    "+tr("Supported values:")+" ");
-            s.append(listKeys(Projections.projs)+"<br>");
-            s.append("<b>+lat_0=..., +lat_1=..., +lat_2=...</b> - <i>"+tr("Projection parameters")+"</i><br>");
-            s.append("<b>+x_0=..., +y_0=...</b> - <i>"+tr("False easting and false northing")+"</i><br>");
-            s.append("<b>+lon_0=...</b> - <i>"+tr("Central meridian")+"</i><br>");
-            s.append("<b>+k_0=...</b> - <i>"+tr("Scaling factor")+"</i><br>");
-            s.append("<b>+ellps=...</b> - <i>"+tr("Ellipsoid name")+"</i><br>");
-            s.append("    "+tr("Supported values:")+" ");
-            s.append(listKeys(Projections.ellipsoids)+"<br>");
-            s.append("<b>+a=..., +b=..., +rf=..., +f=..., +es=...</b> - <i>"+tr("Ellipsoid parameters")+"</i><br>");
-            s.append("<b>+datum=...</b> - <i>"+tr("Datum name")+"</i><br>");
-            s.append("    "+tr("Supported values:")+" ");
-            s.append(listKeys(Projections.datums)+"<br>");
-            s.append("<b>+towgs84=...</b> - <i>"+tr("3 or 7 term datum transform parameters")+"</i><br>");
-            s.append("<b>+nadgrids=...</b> - <i>"+tr("NTv2 grid file")+"</i><br>");
-            s.append("    "+tr("Built-in:")+" ");
-            s.append(listKeys(Projections.nadgrids)+"<br>");
-            s.append("<b>+bounds=</b>minlon,minlat,maxlon,maxlat - <i>"+tr("Projection bounds (in degrees)")+"</i><br>");
-            s.append("<b>+wmssrs=</b>EPSG:123456 - <i>"+tr("Sets the SRS=... parameter in the WMS request")+"</i><br>");
+            s.append("<b>+proj=...</b> - <i>").append(tr("Projection name"))
+             .append("</i><br>    ").append(tr("Supported values:")).append(' ')
+             .append(Projections.listProjs())
+             .append("<br><b>+lat_0=..., +lat_1=..., +lat_2=...</b> - <i>").append(tr("Projection parameters"))
+             .append("</i><br><b>+x_0=..., +y_0=...</b> - <i>").append(tr("False easting and false northing"))
+             .append("</i><br><b>+lon_0=...</b> - <i>").append(tr("Central meridian"))
+             .append("</i><br><b>+k_0=...</b> - <i>").append(tr("Scaling factor"))
+             .append("</i><br><b>+ellps=...</b> - <i>").append(tr("Ellipsoid name"))
+             .append("</i><br>    ").append(tr("Supported values:")).append(' ')
+             .append(Projections.listEllipsoids())
+             .append("<br><b>+a=..., +b=..., +rf=..., +f=..., +es=...</b> - <i>").append(tr("Ellipsoid parameters"))
+             .append("</i><br><b>+datum=...</b> - <i>").append(tr("Datum name"))
+             .append("</i><br>    ").append(tr("Supported values:")).append(' ')
+             .append(Projections.listDatums())
+             .append("<br><b>+towgs84=...</b> - <i>").append(tr("3 or 7 term datum transform parameters"))
+             .append("</i><br><b>+nadgrids=...</b> - <i>").append(tr("NTv2 grid file"))
+             .append("</i><br>    ").append(tr("Built-in:")).append(' ')
+             .append(Projections.listNadgrids())
+             .append("<br><b>+bounds=</b>minlon,minlat,maxlon,maxlat - <i>").append(tr("Projection bounds (in degrees)"))
+             .append("</i><br><b>+wmssrs=</b>EPSG:123456 - <i>").append(tr("Sets the SRS=... parameter in the WMS request"))
+             .append("</i><br>");
 
             return new HtmlPanel(s.toString());
         }
-
-        private String listKeys(Map<String, ?> map) {
-            List<String> keys = new ArrayList<>(map.keySet());
-            Collections.sort(keys);
-            return Utils.join(", ", keys);
-        }
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/gui/preferences/projection/GaussKruegerProjectionChoice.java b/src/org/openstreetmap/josm/gui/preferences/projection/GaussKruegerProjectionChoice.java
index bf8af3e..1377cb6 100644
--- a/src/org/openstreetmap/josm/gui/preferences/projection/GaussKruegerProjectionChoice.java
+++ b/src/org/openstreetmap/josm/gui/preferences/projection/GaussKruegerProjectionChoice.java
@@ -10,7 +10,7 @@ import org.openstreetmap.josm.Main;
 
 public class GaussKruegerProjectionChoice extends ListProjectionChoice {
 
-    private static String[] zones = { "2", "3", "4", "5" };
+    private static String[] zones = {"2", "3", "4", "5"};
 
     /**
      * Constructs a new {@code GaussKruegerProjectionChoice}.
@@ -33,7 +33,7 @@ public class GaussKruegerProjectionChoice extends ListProjectionChoice {
     protected int zoneToIndex(String zone) {
         try {
             return Integer.parseInt(zone) - 2;
-        } catch(NumberFormatException e) {
+        } catch (NumberFormatException e) {
             Main.warn(e);
         }
         return defaultIndex;
diff --git a/src/org/openstreetmap/josm/gui/preferences/projection/LambertCC9ZonesProjectionChoice.java b/src/org/openstreetmap/josm/gui/preferences/projection/LambertCC9ZonesProjectionChoice.java
index a62143c..5a05d85 100644
--- a/src/org/openstreetmap/josm/gui/preferences/projection/LambertCC9ZonesProjectionChoice.java
+++ b/src/org/openstreetmap/josm/gui/preferences/projection/LambertCC9ZonesProjectionChoice.java
@@ -17,15 +17,15 @@ import org.openstreetmap.josm.tools.ImageProvider;
 public class LambertCC9ZonesProjectionChoice extends ListProjectionChoice {
 
     private static String[] lambert9zones = {
-        tr("{0} ({1} to {2} degrees)", 1,41,43),
-        tr("{0} ({1} to {2} degrees)", 2,42,44),
-        tr("{0} ({1} to {2} degrees)", 3,43,45),
-        tr("{0} ({1} to {2} degrees)", 4,44,46),
-        tr("{0} ({1} to {2} degrees)", 5,45,47),
-        tr("{0} ({1} to {2} degrees)", 6,46,48),
-        tr("{0} ({1} to {2} degrees)", 7,47,49),
-        tr("{0} ({1} to {2} degrees)", 8,48,50),
-        tr("{0} ({1} to {2} degrees)", 9,49,51)
+        tr("{0} ({1} to {2} degrees)", 1, 41, 43),
+        tr("{0} ({1} to {2} degrees)", 2, 42, 44),
+        tr("{0} ({1} to {2} degrees)", 3, 43, 45),
+        tr("{0} ({1} to {2} degrees)", 4, 44, 46),
+        tr("{0} ({1} to {2} degrees)", 5, 45, 47),
+        tr("{0} ({1} to {2} degrees)", 6, 46, 48),
+        tr("{0} ({1} to {2} degrees)", 7, 47, 49),
+        tr("{0} ({1} to {2} degrees)", 8, 48, 50),
+        tr("{0} ({1} to {2} degrees)", 9, 49, 51)
     };
 
     /**
@@ -72,11 +72,11 @@ public class LambertCC9ZonesProjectionChoice extends ListProjectionChoice {
         //zone 1=CC42=EPSG:3942 up to zone 9=CC50=EPSG:3950
         if (code.startsWith("EPSG:39") && code.length() == 9) {
             try {
-                String zonestring = code.substring(5,9);
+                String zonestring = code.substring(5, 9);
                 int zoneval = Integer.parseInt(zonestring)-3942;
-                if(zoneval >= 0 && zoneval <= 8)
+                if (zoneval >= 0 && zoneval <= 8)
                     return Collections.singleton(String.valueOf(zoneval+1));
-            } catch(NumberFormatException ex) {
+            } catch (NumberFormatException ex) {
                 Main.warn(ex);
             }
         }
@@ -92,7 +92,7 @@ public class LambertCC9ZonesProjectionChoice extends ListProjectionChoice {
     protected int zoneToIndex(String zone) {
         try {
             return Integer.parseInt(zone) - 1;
-        } catch(NumberFormatException e) {
+        } catch (NumberFormatException e) {
             Main.warn(e);
         }
         return defaultIndex;
diff --git a/src/org/openstreetmap/josm/gui/preferences/projection/LambertProjectionChoice.java b/src/org/openstreetmap/josm/gui/preferences/projection/LambertProjectionChoice.java
index de07a3d..591ab65 100644
--- a/src/org/openstreetmap/josm/gui/preferences/projection/LambertProjectionChoice.java
+++ b/src/org/openstreetmap/josm/gui/preferences/projection/LambertProjectionChoice.java
@@ -17,9 +17,9 @@ import org.openstreetmap.josm.tools.ImageProvider;
 public class LambertProjectionChoice extends ListProjectionChoice {
 
     private static final String[] lambert4zones = {
-        tr("{0} ({1} to {2} degrees)", 1,"51.30","48.15"),
-        tr("{0} ({1} to {2} degrees)", 2,"48.15","45.45"),
-        tr("{0} ({1} to {2} degrees)", 3,"45.45","42.76"),
+        tr("{0} ({1} to {2} degrees)", 1, "51.30", "48.15"),
+        tr("{0} ({1} to {2} degrees)", 2, "48.15", "45.45"),
+        tr("{0} ({1} to {2} degrees)", 3, "45.45", "42.76"),
         tr("{0} (Corsica)", 4)
     };
 
@@ -68,9 +68,9 @@ public class LambertProjectionChoice extends ListProjectionChoice {
             try {
                 String zonestring = code.substring(9);
                 int zoneval = Integer.parseInt(zonestring);
-                if(zoneval >= 1 && zoneval <= 4)
+                if (zoneval >= 1 && zoneval <= 4)
                     return Collections.singleton(zonestring);
-            } catch(NumberFormatException e) {
+            } catch (NumberFormatException e) {
                 Main.warn(e);
             }
         }
@@ -86,7 +86,7 @@ public class LambertProjectionChoice extends ListProjectionChoice {
     protected int zoneToIndex(String zone) {
         try {
             return Integer.parseInt(zone) - 1;
-        } catch(NumberFormatException e) {
+        } catch (NumberFormatException e) {
             Main.warn(e);
         }
         return defaultIndex;
diff --git a/src/org/openstreetmap/josm/gui/preferences/projection/ListProjectionChoice.java b/src/org/openstreetmap/josm/gui/preferences/projection/ListProjectionChoice.java
index e62c17c..412a295 100644
--- a/src/org/openstreetmap/josm/gui/preferences/projection/ListProjectionChoice.java
+++ b/src/org/openstreetmap/josm/gui/preferences/projection/ListProjectionChoice.java
@@ -86,7 +86,7 @@ public abstract class ListProjectionChoice extends AbstractProjectionChoice {
 
             prefcb.setSelectedIndex(initialIndex);
             this.setLayout(new GridBagLayout());
-            this.add(new JLabel(label), GBC.std().insets(5,5,0,5));
+            this.add(new JLabel(label), GBC.std().insets(5, 5, 0, 5));
             this.add(GBC.glue(1, 0), GBC.std().fill(GBC.HORIZONTAL));
             this.add(prefcb, GBC.eop().fill(GBC.HORIZONTAL));
             this.add(GBC.glue(1, 1), GBC.eol().fill(GBC.BOTH));
diff --git a/src/org/openstreetmap/josm/gui/preferences/projection/ProjectionPreference.java b/src/org/openstreetmap/josm/gui/preferences/projection/ProjectionPreference.java
index 5307b3f..3a1ec63 100644
--- a/src/org/openstreetmap/josm/gui/preferences/projection/ProjectionPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/projection/ProjectionPreference.java
@@ -29,7 +29,6 @@ import org.openstreetmap.josm.data.preferences.CollectionProperty;
 import org.openstreetmap.josm.data.preferences.StringProperty;
 import org.openstreetmap.josm.data.projection.CustomProjection;
 import org.openstreetmap.josm.data.projection.Projection;
-import org.openstreetmap.josm.gui.NavigatableComponent;
 import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
 import org.openstreetmap.josm.gui.preferences.PreferenceSettingFactory;
 import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
@@ -249,7 +248,7 @@ public class ProjectionPreference implements SubPreferenceSetting {
     private static final String[] unitsValues = (new ArrayList<>(SystemOfMeasurement.ALL_SYSTEMS.keySet())).toArray(new String[0]);
     private static final String[] unitsValuesTr = new String[unitsValues.length];
     static {
-        for (int i=0; i<unitsValues.length; ++i) {
+        for (int i = 0; i < unitsValues.length; ++i) {
             unitsValuesTr[i] = tr(unitsValues[i]);
         }
     }
@@ -312,30 +311,33 @@ public class ProjectionPreference implements SubPreferenceSetting {
             }
         }
 
-        projPanel.setBorder(BorderFactory.createEmptyBorder( 0, 0, 0, 0 ));
+        projPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
         projPanel.setLayout(new GridBagLayout());
-        projPanel.add(new JLabel(tr("Projection method")), GBC.std().insets(5,5,0,5));
-        projPanel.add(GBC.glue(5,0), GBC.std().fill(GBC.HORIZONTAL));
-        projPanel.add(projectionCombo, GBC.eop().fill(GBC.HORIZONTAL).insets(0,5,5,5));
-        projPanel.add(projectionCodeLabel = new JLabel(tr("Projection code")), GBC.std().insets(25,5,0,5));
-        projPanel.add(projectionCodeGlue = GBC.glue(5,0), GBC.std().fill(GBC.HORIZONTAL));
-        projPanel.add(projectionCode, GBC.eop().fill(GBC.HORIZONTAL).insets(0,5,5,5));
-        projPanel.add(projectionNameLabel = new JLabel(tr("Projection name")), GBC.std().insets(25,5,0,5));
-        projPanel.add(projectionNameGlue = GBC.glue(5,0), GBC.std().fill(GBC.HORIZONTAL));
-        projPanel.add(projectionName, GBC.eop().fill(GBC.HORIZONTAL).insets(0,5,5,5));
-        projPanel.add(new JLabel(tr("Bounds")), GBC.std().insets(25,5,0,5));
-        projPanel.add(GBC.glue(5,0), GBC.std().fill(GBC.HORIZONTAL));
-        projPanel.add(bounds, GBC.eop().fill(GBC.HORIZONTAL).insets(0,5,5,5));
-        projPanel.add(projSubPrefPanelWrapper, GBC.eol().fill(GBC.HORIZONTAL).insets(20,5,5,5));
-
-        projPanel.add(new JSeparator(), GBC.eol().fill(GBC.HORIZONTAL).insets(0,5,0,10));
-        projPanel.add(new JLabel(tr("Display coordinates as")), GBC.std().insets(5,5,0,5));
-        projPanel.add(GBC.glue(5,0), GBC.std().fill(GBC.HORIZONTAL));
-        projPanel.add(coordinatesCombo, GBC.eop().fill(GBC.HORIZONTAL).insets(0,5,5,5));
-        projPanel.add(new JLabel(tr("System of measurement")), GBC.std().insets(5,5,0,5));
-        projPanel.add(GBC.glue(5,0), GBC.std().fill(GBC.HORIZONTAL));
-        projPanel.add(unitsCombo, GBC.eop().fill(GBC.HORIZONTAL).insets(0,5,5,5));
-        projPanel.add(GBC.glue(1,1), GBC.std().fill(GBC.HORIZONTAL).weight(1.0, 1.0));
+        projPanel.add(new JLabel(tr("Projection method")), GBC.std().insets(5, 5, 0, 5));
+        projPanel.add(GBC.glue(5, 0), GBC.std().fill(GBC.HORIZONTAL));
+        projPanel.add(projectionCombo, GBC.eop().fill(GBC.HORIZONTAL).insets(0, 5, 5, 5));
+        projPanel.add(projectionCodeLabel = new JLabel(tr("Projection code")), GBC.std().insets(25, 5, 0, 5));
+        projPanel.add(projectionCodeGlue = GBC.glue(5, 0), GBC.std().fill(GBC.HORIZONTAL));
+        projPanel.add(projectionCode, GBC.eop().fill(GBC.HORIZONTAL).insets(0, 5, 5, 5));
+        projPanel.add(projectionNameLabel = new JLabel(tr("Projection name")), GBC.std().insets(25, 5, 0, 5));
+        projPanel.add(projectionNameGlue = GBC.glue(5, 0), GBC.std().fill(GBC.HORIZONTAL));
+        projPanel.add(projectionName, GBC.eop().fill(GBC.HORIZONTAL).insets(0, 5, 5, 5));
+        projPanel.add(new JLabel(tr("Bounds")), GBC.std().insets(25, 5, 0, 5));
+        projPanel.add(GBC.glue(5, 0), GBC.std().fill(GBC.HORIZONTAL));
+        projPanel.add(bounds, GBC.eop().fill(GBC.HORIZONTAL).insets(0, 5, 5, 5));
+        projPanel.add(projSubPrefPanelWrapper, GBC.eol().fill(GBC.HORIZONTAL).insets(20, 5, 5, 5));
+
+        projectionCodeLabel.setLabelFor(projectionCode);
+        projectionNameLabel.setLabelFor(projectionName);
+
+        projPanel.add(new JSeparator(), GBC.eol().fill(GBC.HORIZONTAL).insets(0, 5, 0, 10));
+        projPanel.add(new JLabel(tr("Display coordinates as")), GBC.std().insets(5, 5, 0, 5));
+        projPanel.add(GBC.glue(5, 0), GBC.std().fill(GBC.HORIZONTAL));
+        projPanel.add(coordinatesCombo, GBC.eop().fill(GBC.HORIZONTAL).insets(0, 5, 5, 5));
+        projPanel.add(new JLabel(tr("System of measurement")), GBC.std().insets(5, 5, 0, 5));
+        projPanel.add(GBC.glue(5, 0), GBC.std().fill(GBC.HORIZONTAL));
+        projPanel.add(unitsCombo, GBC.eop().fill(GBC.HORIZONTAL).insets(0, 5, 5, 5));
+        projPanel.add(GBC.glue(1, 1), GBC.std().fill(GBC.HORIZONTAL).weight(1.0, 1.0));
 
         JScrollPane scrollpane = new JScrollPane(projPanel);
         gui.getMapPreference().addSubTab(this, tr("Map Projection"), scrollpane);
@@ -350,7 +352,8 @@ public class ProjectionPreference implements SubPreferenceSetting {
         projectionName.setText(proj.toString());
         Bounds b = proj.getWorldBoundsLatLon();
         CoordinateFormat cf = CoordinateFormat.getDefaultFormat();
-        bounds.setText(b.getMin().lonToString(cf)+", "+b.getMin().latToString(cf)+" : "+b.getMax().lonToString(cf)+", "+b.getMax().latToString(cf));
+        bounds.setText(b.getMin().lonToString(cf) + ", " + b.getMin().latToString(cf) + " : " +
+                b.getMax().lonToString(cf) + ", " + b.getMax().latToString(cf));
         boolean showCode = true;
         boolean showName = false;
         if (pc instanceof SubPrefsOptions) {
@@ -374,12 +377,12 @@ public class ProjectionPreference implements SubPreferenceSetting {
 
         setProjection(id, prefs);
 
-        if(PROP_COORDINATES.put(((CoordinateFormat)coordinatesCombo.getSelectedItem()).name())) {
-            CoordinateFormat.setCoordinateFormat((CoordinateFormat)coordinatesCombo.getSelectedItem());
+        if (PROP_COORDINATES.put(((CoordinateFormat) coordinatesCombo.getSelectedItem()).name())) {
+            CoordinateFormat.setCoordinateFormat((CoordinateFormat) coordinatesCombo.getSelectedItem());
         }
 
         int i = unitsCombo.getSelectedIndex();
-        NavigatableComponent.setSystemOfMeasurement(unitsValues[i]);
+        SystemOfMeasurement.setSystemOfMeasurement(unitsValues[i]);
 
         return false;
     }
@@ -418,7 +421,7 @@ public class ProjectionPreference implements SubPreferenceSetting {
     private void selectedProjectionChanged(final ProjectionChoice pc) {
         // Don't try to update if we're still starting up
         int size = projPanel.getComponentCount();
-        if(size < 1)
+        if (size < 1)
             return;
 
         final ActionListener listener = new ActionListener() {
diff --git a/src/org/openstreetmap/josm/gui/preferences/projection/PuwgProjectionChoice.java b/src/org/openstreetmap/josm/gui/preferences/projection/PuwgProjectionChoice.java
index 584334a..a3be72d 100644
--- a/src/org/openstreetmap/josm/gui/preferences/projection/PuwgProjectionChoice.java
+++ b/src/org/openstreetmap/josm/gui/preferences/projection/PuwgProjectionChoice.java
@@ -43,7 +43,6 @@ public class PuwgProjectionChoice extends ListProjectionChoice {
         return NAMES[index];
     }
 
-
     @Override
     public String[] allCodes() {
         return Utils.copyArray(CODES);
@@ -65,12 +64,11 @@ public class PuwgProjectionChoice extends ListProjectionChoice {
 
     @Override
     protected int zoneToIndex(String zone) {
-        for (int i=0; i<CODES.length; i++) {
+        for (int i = 0; i < CODES.length; i++) {
             if (zone.equals(CODES[i])) {
                 return i;
             }
         }
         return defaultIndex;
     }
-
 }
diff --git a/src/org/openstreetmap/josm/gui/preferences/projection/SingleProjectionChoice.java b/src/org/openstreetmap/josm/gui/preferences/projection/SingleProjectionChoice.java
index f60c425..b4e90fa 100644
--- a/src/org/openstreetmap/josm/gui/preferences/projection/SingleProjectionChoice.java
+++ b/src/org/openstreetmap/josm/gui/preferences/projection/SingleProjectionChoice.java
@@ -48,7 +48,7 @@ public class SingleProjectionChoice extends AbstractProjectionChoice {
 
     @Override
     public String[] allCodes() {
-        return new String[] { code };
+        return new String[] {code};
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/gui/preferences/projection/UTMFranceDOMProjectionChoice.java b/src/org/openstreetmap/josm/gui/preferences/projection/UTMFranceDOMProjectionChoice.java
index 9463602..e3a07ee 100644
--- a/src/org/openstreetmap/josm/gui/preferences/projection/UTMFranceDOMProjectionChoice.java
+++ b/src/org/openstreetmap/josm/gui/preferences/projection/UTMFranceDOMProjectionChoice.java
@@ -15,14 +15,14 @@ public class UTMFranceDOMProjectionChoice extends ListProjectionChoice {
     private static final String MartiniqueName = tr("Martinique Fort Desaix 1952");
     private static final String Reunion92Name = tr("Reunion RGR92");
     private static final String Guyane92Name = tr("Guyane RGFG95");
-    private static final String[] utmGeodesicsNames = { FortMarigotName, SainteAnneName, MartiniqueName, Reunion92Name, Guyane92Name};
+    private static final String[] utmGeodesicsNames = {FortMarigotName, SainteAnneName, MartiniqueName, Reunion92Name, Guyane92Name};
 
     private static final Integer FortMarigotEPSG = 2969;
     private static final Integer SainteAnneEPSG = 2970;
     private static final Integer MartiniqueEPSG = 2973;
     private static final Integer ReunionEPSG = 2975;
     private static final Integer GuyaneEPSG = 2972;
-    private static final Integer[] utmEPSGs = { FortMarigotEPSG, SainteAnneEPSG, MartiniqueEPSG, ReunionEPSG, GuyaneEPSG };
+    private static final Integer[] utmEPSGs = {FortMarigotEPSG, SainteAnneEPSG, MartiniqueEPSG, ReunionEPSG, GuyaneEPSG };
 
     /**
      * Constructs a new {@code UTMFranceDOMProjectionChoice}.
@@ -40,7 +40,7 @@ public class UTMFranceDOMProjectionChoice extends ListProjectionChoice {
     protected int zoneToIndex(String zone) {
         try {
             return Integer.parseInt(zone) - 1;
-        } catch(NumberFormatException e) {
+        } catch (NumberFormatException e) {
             Main.warn(e);
         }
         return defaultIndex;
@@ -59,7 +59,7 @@ public class UTMFranceDOMProjectionChoice extends ListProjectionChoice {
     @Override
     public String[] allCodes() {
         String[] res = new String[utmEPSGs.length];
-        for (int i=0; i<utmEPSGs.length; ++i) {
+        for (int i = 0; i < utmEPSGs.length; ++i) {
             res[i] = "EPSG:" + utmEPSGs[i];
         }
         return res;
@@ -67,10 +67,10 @@ public class UTMFranceDOMProjectionChoice extends ListProjectionChoice {
 
     @Override
     public Collection<String> getPreferencesFromCode(String code) {
-        for (int i=0; i < utmEPSGs.length; i++ )
+        for (int i = 0; i < utmEPSGs.length; i++) {
             if (("EPSG:" + utmEPSGs[i]).equals(code))
                 return Collections.singleton(Integer.toString(i+1));
+        }
         return null;
     }
-
 }
diff --git a/src/org/openstreetmap/josm/gui/preferences/projection/UTMProjectionChoice.java b/src/org/openstreetmap/josm/gui/preferences/projection/UTMProjectionChoice.java
index d04ded1..1fa1381 100644
--- a/src/org/openstreetmap/josm/gui/preferences/projection/UTMProjectionChoice.java
+++ b/src/org/openstreetmap/josm/gui/preferences/projection/UTMProjectionChoice.java
@@ -72,7 +72,7 @@ public class UTMProjectionChoice extends ListProjectionChoice {
             bPanel.add(south, GBC.std().fill(GBC.HORIZONTAL));
             bPanel.add(GBC.glue(1, 1), GBC.eol().fill(GBC.BOTH));
 
-            this.add(new JLabel(tr("Hemisphere")), GBC.std().insets(5,5,0,5));
+            this.add(new JLabel(tr("Hemisphere")), GBC.std().insets(5, 5, 0, 5));
             this.add(GBC.glue(1, 0), GBC.std().fill(GBC.HORIZONTAL));
             this.add(bPanel, GBC.eop().fill(GBC.HORIZONTAL));
             this.add(GBC.glue(1, 1), GBC.eol().fill(GBC.BOTH));
@@ -101,7 +101,6 @@ public class UTMProjectionChoice extends ListProjectionChoice {
         return tr("UTM");
     }
 
-
     @Override
     public Collection<String> getPreferences(JPanel panel) {
         if (!(panel instanceof UTMPanel)) {
@@ -109,16 +108,16 @@ public class UTMProjectionChoice extends ListProjectionChoice {
         }
         UTMPanel p = (UTMPanel) panel;
         int idx = p.prefcb.getSelectedIndex();
-        Hemisphere hem = p.south.isSelected()?Hemisphere.South:Hemisphere.North;
+        Hemisphere hem = p.south.isSelected() ? Hemisphere.South : Hemisphere.North;
         return Arrays.asList(indexToZone(idx), hem.toString());
     }
 
     @Override
     public String[] allCodes() {
         List<String> projections = new ArrayList<>(60*4);
-        for (int zone = 1;zone <= 60; zone++) {
+        for (int zone = 1; zone <= 60; zone++) {
             for (Hemisphere hem : Hemisphere.values()) {
-                projections.add("EPSG:" + (32600 + zone + (hem == Hemisphere.South?100:0)));
+                projections.add("EPSG:" + (32600 + zone + (hem == Hemisphere.South ? 100 : 0)));
             }
         }
         return projections.toArray(new String[projections.size()]);
@@ -129,12 +128,12 @@ public class UTMProjectionChoice extends ListProjectionChoice {
 
         if (code.startsWith("EPSG:326") || code.startsWith("EPSG:327")) {
             try {
-                Hemisphere hem = code.charAt(7)=='6'?Hemisphere.North:Hemisphere.South;
+                Hemisphere hem = code.charAt(7) == '6' ? Hemisphere.North : Hemisphere.South;
                 String zonestring = code.substring(8);
                 int zoneval = Integer.parseInt(zonestring);
-                if(zoneval > 0 && zoneval <= 60)
+                if (zoneval > 0 && zoneval <= 60)
                     return Arrays.asList(zonestring, hem.toString());
-            } catch(NumberFormatException e) {
+            } catch (NumberFormatException e) {
                 Main.warn(e);
             }
         }
@@ -165,7 +164,7 @@ public class UTMProjectionChoice extends ListProjectionChoice {
     protected int zoneToIndex(String zone) {
         try {
             return Integer.parseInt(zone) - 1;
-        } catch(NumberFormatException e) {
+        } catch (NumberFormatException e) {
             Main.warn(e);
         }
         return defaultIndex;
diff --git a/src/org/openstreetmap/josm/gui/preferences/remotecontrol/RemoteControlPreference.java b/src/org/openstreetmap/josm/gui/preferences/remotecontrol/RemoteControlPreference.java
index 2001dd4..0d38f5c 100644
--- a/src/org/openstreetmap/josm/gui/preferences/remotecontrol/RemoteControlPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/remotecontrol/RemoteControlPreference.java
@@ -66,6 +66,7 @@ public final class RemoteControlPreference extends DefaultTabPreferenceSetting {
             prefs.put(p, cb);
         }
     }
+
     private final Map<PermissionPrefWithDefault, JCheckBox> prefs = new LinkedHashMap<>();
     private JCheckBox enableRemoteControl;
     private JCheckBox enableHttpsSupport;
@@ -87,7 +88,8 @@ public final class RemoteControlPreference extends DefaultTabPreferenceSetting {
         descLabel.setFont(descLabel.getFont().deriveFont(Font.PLAIN));
         remote.add(descLabel, GBC.eol().insets(5, 5, 0, 10).fill(GBC.HORIZONTAL));
 
-        final JLabel portLabel = new JLabel("<html>" + tr("JOSM will always listen at <b>port {0}</b> (http) and <b>port {1}</b> (https) on localhost."
+        final JLabel portLabel = new JLabel("<html>"
+                + tr("JOSM will always listen at <b>port {0}</b> (http) and <b>port {1}</b> (https) on localhost."
                 + "<br>These ports are not configurable because they are referenced by external applications talking to JOSM.",
                 Main.pref.get("remote.control.port", "8111"),
                 Main.pref.get("remote.control.https.port", "8112")) + "</html>");
diff --git a/src/org/openstreetmap/josm/gui/preferences/server/ApiUrlTestTask.java b/src/org/openstreetmap/josm/gui/preferences/server/ApiUrlTestTask.java
index 63ab5e6..7ee5ee2 100644
--- a/src/org/openstreetmap/josm/gui/preferences/server/ApiUrlTestTask.java
+++ b/src/org/openstreetmap/josm/gui/preferences/server/ApiUrlTestTask.java
@@ -46,7 +46,7 @@ public class ApiUrlTestTask extends PleaseWaitRunnable {
      */
     public ApiUrlTestTask(Component parent, String url) {
         super(parent, tr("Testing OSM API URL ''{0}''", url), false /* don't ignore exceptions */);
-        CheckParameterUtil.ensureParameterNotNull(url,"url");
+        CheckParameterUtil.ensureParameterNotNull(url, "url");
         this.parent = parent;
         this.url = url;
     }
@@ -134,7 +134,7 @@ public class ApiUrlTestTask extends PleaseWaitRunnable {
     @Override
     protected void cancel() {
         canceled = true;
-        synchronized(this) {
+        synchronized (this) {
             if (connection != null) {
                 connection.disconnect();
             }
@@ -151,7 +151,7 @@ public class ApiUrlTestTask extends PleaseWaitRunnable {
      */
     protected String getNormalizedApiUrl() {
         String apiUrl = url.trim();
-        while(apiUrl.endsWith("/")) {
+        while (apiUrl.endsWith("/")) {
             apiUrl = apiUrl.substring(0, apiUrl.lastIndexOf('/'));
         }
         return apiUrl;
@@ -162,7 +162,7 @@ public class ApiUrlTestTask extends PleaseWaitRunnable {
         try {
             try {
                 new URL(getNormalizedApiUrl());
-            } catch(MalformedURLException e) {
+            } catch (MalformedURLException e) {
                 alertInvalidUrl(getNormalizedApiUrl());
                 return;
             }
@@ -170,12 +170,12 @@ public class ApiUrlTestTask extends PleaseWaitRunnable {
             String getCapabilitiesUrl = getNormalizedApiUrl() + "/0.6/capabilities";
             try {
                 capabilitiesUrl = new URL(getCapabilitiesUrl);
-            } catch(MalformedURLException e) {
+            } catch (MalformedURLException e) {
                 alertInvalidCapabilitiesUrl(getCapabilitiesUrl);
                 return;
             }
 
-            synchronized(this) {
+            synchronized (this) {
                 connection = Utils.openHttpConnection(capabilitiesUrl);
             }
             connection.setDoInput(true);
@@ -196,7 +196,7 @@ public class ApiUrlTestTask extends PleaseWaitRunnable {
                 return;
             }
             success = true;
-        } catch(IOException e) {
+        } catch (IOException e) {
             if (canceled)
                 // ignore exceptions
                 return;
diff --git a/src/org/openstreetmap/josm/gui/preferences/server/AuthenticationPreferencesPanel.java b/src/org/openstreetmap/josm/gui/preferences/server/AuthenticationPreferencesPanel.java
index 42d3a6d..752d59f 100644
--- a/src/org/openstreetmap/josm/gui/preferences/server/AuthenticationPreferencesPanel.java
+++ b/src/org/openstreetmap/josm/gui/preferences/server/AuthenticationPreferencesPanel.java
@@ -57,7 +57,7 @@ public class AuthenticationPreferencesPanel extends VerticallyScrollablePanel im
         gc.anchor = GridBagConstraints.NORTHWEST;
         gc.fill = GridBagConstraints.HORIZONTAL;
         gc.weightx = 0.0;
-        gc.insets = new Insets(0,0,0, 3);
+        gc.insets = new Insets(0, 0, 0, 3);
         add(rbBasicAuthentication = new JRadioButton(), gc);
         rbBasicAuthentication.setText(tr("Use Basic Authentication"));
         rbBasicAuthentication.setToolTipText(tr("Select to use HTTP basic authentication with your OSM username and password"));
@@ -123,7 +123,8 @@ public class AuthenticationPreferencesPanel extends VerticallyScrollablePanel im
         } else if ("oauth".equals(authMethod)) {
             rbOAuth.setSelected(true);
         } else {
-            Main.warn(tr("Unsupported value in preference ''{0}'', got ''{1}''. Using authentication method ''Basic Authentication''.", "osm-server.auth-method", authMethod));
+            Main.warn(tr("Unsupported value in preference ''{0}'', got ''{1}''. Using authentication method ''Basic Authentication''.",
+                    "osm-server.auth-method", authMethod));
             rbBasicAuthentication.setSelected(true);
         }
         pnlBasicAuthPreferences.initFromPreferences();
diff --git a/src/org/openstreetmap/josm/gui/preferences/server/BasicAuthenticationPreferencesPanel.java b/src/org/openstreetmap/josm/gui/preferences/server/BasicAuthenticationPreferencesPanel.java
index 019c982..203f700 100644
--- a/src/org/openstreetmap/josm/gui/preferences/server/BasicAuthenticationPreferencesPanel.java
+++ b/src/org/openstreetmap/josm/gui/preferences/server/BasicAuthenticationPreferencesPanel.java
@@ -42,14 +42,14 @@ public class BasicAuthenticationPreferencesPanel extends JPanel {
      */
     protected final void build() {
         setLayout(new GridBagLayout());
-        setBorder(BorderFactory.createEmptyBorder(3,3,3,3));
+        setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
         GridBagConstraints gc = new GridBagConstraints();
 
         // -- OSM user name
         gc.fill = GridBagConstraints.HORIZONTAL;
         gc.anchor = GridBagConstraints.NORTHWEST;
         gc.weightx = 0.0;
-        gc.insets = new Insets(0,0,3,3);
+        gc.insets = new Insets(0, 0, 3, 3);
         add(new JLabel(tr("OSM username:")), gc);
 
         gc.gridx = 1;
@@ -77,7 +77,7 @@ public class BasicAuthenticationPreferencesPanel extends JPanel {
         gc.gridwidth = 2;
         gc.weightx = 1.0;
         gc.weighty = 1.0;
-        gc.insets = new Insets(5,0,0,0);
+        gc.insets = new Insets(5, 0, 0, 0);
         gc.fill = GridBagConstraints.BOTH;
         decorationPanel = new JPanel(new BorderLayout());
         add(decorationPanel, gc);
@@ -103,10 +103,10 @@ public class BasicAuthenticationPreferencesPanel extends JPanel {
                 tfOsmUserName.setText("");
                 tfOsmPassword.setText("");
             } else {
-                tfOsmUserName.setText(pa.getUserName() == null? "" : pa.getUserName());
+                tfOsmUserName.setText(pa.getUserName() == null ? "" : pa.getUserName());
                 tfOsmPassword.setText(pa.getPassword() == null ? "" : String.valueOf(pa.getPassword()));
             }
-        } catch(CredentialsAgentException e) {
+        } catch (CredentialsAgentException e) {
             Main.error(e);
             Main.warn(tr("Failed to retrieve OSM credentials from credential manager."));
             Main.warn(tr("Current credential manager is of type ''{0}''", cm.getClass().getName()));
diff --git a/src/org/openstreetmap/josm/gui/preferences/server/FeaturesPanel.java b/src/org/openstreetmap/josm/gui/preferences/server/FeaturesPanel.java
index 7233e6b..d7f1bc7 100644
--- a/src/org/openstreetmap/josm/gui/preferences/server/FeaturesPanel.java
+++ b/src/org/openstreetmap/josm/gui/preferences/server/FeaturesPanel.java
@@ -39,7 +39,7 @@ public class FeaturesPanel extends JPanel {
 
     private void build() {
         setLayout(new GridBagLayout());
-        setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
 
         notifier = new JCheckBox(tr("Periodically check for new messages"));
         add(notifier, GBC.eol());
@@ -49,23 +49,24 @@ public class FeaturesPanel extends JPanel {
                 updateEnabledState();
             }
         });
-        
+
         intervalLabel = new JLabel(tr("Check interval (minutes):"));
+        intervalLabel.setLabelFor(notifierInterval);
         add(intervalLabel, GBC.std().insets(25, 0, 0, 0));
 
         notifierInterval.setToolTipText(tr("Default value: {0}", MessageNotifier.PROP_INTERVAL.getDefaultValue()));
         notifierInterval.setMinimumSize(notifierInterval.getPreferredSize());
-        add(notifierInterval, GBC.eol().insets(5,0,0,0));
+        add(notifierInterval, GBC.eol().insets(5, 0, 0, 0));
 
         final JLabel notesDaysClosedLabel = new JLabel(tr("Max age for closed notes (days):"));
+        notesDaysClosedLabel.setLabelFor(notesDaysClosed);
         notesDaysClosedLabel.setToolTipText(tr("Specifies the number of days a note needs to be closed to no longer be downloaded"));
         add(notesDaysClosedLabel, GBC.std().insets(0, 20, 0, 0));
         notesDaysClosed.setToolTipText(tr("Default value: {0}", DownloadNotesTask.DAYS_CLOSED.getDefaultValue()));
         notesDaysClosed.setMinimumSize(notesDaysClosed.getPreferredSize());
         add(notesDaysClosed, GBC.eol().insets(5, 20, 0, 0));
-
     }
-    
+
     private void updateEnabledState() {
         boolean enabled = notifier.isSelected();
         intervalLabel.setEnabled(enabled);
@@ -99,7 +100,7 @@ public class FeaturesPanel extends JPanel {
             }
         // Even if they have not changed,
         } else {
-            // notifier should be stopped if user is no more identified enough 
+            // notifier should be stopped if user is no more identified enough
             if (!MessageNotifier.isUserEnoughIdentified()) {
                 MessageNotifier.stop();
             // or restarted if user is again identified and notifier was enabled in preferences
diff --git a/src/org/openstreetmap/josm/gui/preferences/server/OAuthAccessTokenHolder.java b/src/org/openstreetmap/josm/gui/preferences/server/OAuthAccessTokenHolder.java
index 4b905d7..d17755c 100644
--- a/src/org/openstreetmap/josm/gui/preferences/server/OAuthAccessTokenHolder.java
+++ b/src/org/openstreetmap/josm/gui/preferences/server/OAuthAccessTokenHolder.java
@@ -50,7 +50,7 @@ public class OAuthAccessTokenHolder {
      * the access token is lost and new token has to be generated by the OSM server the
      * next time JOSM is used.
      *
-     * @param saveToPreferences
+     * @param saveToPreferences {@code true} to save to preferences file
      */
     public void setSaveToPreferences(boolean saveToPreferences) {
         this.saveToPreferences = saveToPreferences;
@@ -86,7 +86,7 @@ public class OAuthAccessTokenHolder {
     /**
      * Sets the access token secret. Pass in null to remove the current access token secret.
      *
-     * @param accessTokenSecret
+     * @param accessTokenSecret access token secret, or null
      */
     public void setAccessTokenSecret(String accessTokenSecret) {
         this.accessTokenSecret = accessTokenSecret;
@@ -152,7 +152,7 @@ public class OAuthAccessTokenHolder {
         OAuthToken token = null;
         try {
             token = cm.lookupOAuthAccessToken();
-        } catch(CredentialsAgentException e) {
+        } catch (CredentialsAgentException e) {
             Main.error(e);
             Main.warn(tr("Failed to retrieve OAuth Access Token from credential manager"));
             Main.warn(tr("Current credential manager is of type ''{0}''", cm.getClass().getName()));
@@ -183,7 +183,7 @@ public class OAuthAccessTokenHolder {
             } else {
                 cm.storeOAuthAccessToken(new OAuthToken(accessTokenKey, accessTokenSecret));
             }
-        } catch(CredentialsAgentException e){
+        } catch (CredentialsAgentException e) {
             Main.error(e);
             Main.warn(tr("Failed to store OAuth Access Token to credentials manager"));
             Main.warn(tr("Current credential manager is of type ''{0}''", cm.getClass().getName()));
diff --git a/src/org/openstreetmap/josm/gui/preferences/server/OAuthAuthenticationPreferencesPanel.java b/src/org/openstreetmap/josm/gui/preferences/server/OAuthAuthenticationPreferencesPanel.java
index 2e76f00..24730f6 100644
--- a/src/org/openstreetmap/josm/gui/preferences/server/OAuthAuthenticationPreferencesPanel.java
+++ b/src/org/openstreetmap/josm/gui/preferences/server/OAuthAuthenticationPreferencesPanel.java
@@ -29,11 +29,11 @@ import org.openstreetmap.josm.gui.SideButton;
 import org.openstreetmap.josm.gui.oauth.AdvancedOAuthPropertiesPanel;
 import org.openstreetmap.josm.gui.oauth.OAuthAuthorizationWizard;
 import org.openstreetmap.josm.gui.oauth.TestAccessTokenTask;
+import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
+import org.openstreetmap.josm.gui.widgets.JosmTextField;
 import org.openstreetmap.josm.io.OsmApi;
 import org.openstreetmap.josm.io.auth.CredentialsManager;
 import org.openstreetmap.josm.tools.ImageProvider;
-import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
-import org.openstreetmap.josm.gui.widgets.JosmTextField;
 
 /**
  * The preferences panel for the OAuth preferences. This just a summary panel
@@ -59,12 +59,12 @@ public class OAuthAuthenticationPreferencesPanel extends JPanel implements Prope
      */
     protected JPanel buildAdvancedPropertiesPanel() {
         JPanel pnl = new JPanel(new GridBagLayout());
-        GridBagConstraints gc= new GridBagConstraints();
+        GridBagConstraints gc = new GridBagConstraints();
 
         gc.anchor = GridBagConstraints.NORTHWEST;
         gc.fill = GridBagConstraints.HORIZONTAL;
         gc.weightx = 0.0;
-        gc.insets = new Insets(0,0,0,3);
+        gc.insets = new Insets(0, 0, 0, 3);
         pnl.add(cbShowAdvancedParameters = new JCheckBox(), gc);
         cbShowAdvancedParameters.setSelected(false);
         cbShowAdvancedParameters.addItemListener(
@@ -84,7 +84,7 @@ public class OAuthAuthenticationPreferencesPanel extends JPanel implements Prope
 
         gc.gridy = 1;
         gc.gridx = 1;
-        gc.insets = new Insets(3,0,3,0);
+        gc.insets = new Insets(3, 0, 3, 0);
         gc.fill = GridBagConstraints.BOTH;
         gc.weightx = 1.0;
         gc.weighty = 1.0;
@@ -93,7 +93,7 @@ public class OAuthAuthenticationPreferencesPanel extends JPanel implements Prope
         pnlAdvancedProperties.setBorder(
                 BorderFactory.createCompoundBorder(
                         BorderFactory.createLineBorder(Color.GRAY, 1),
-                        BorderFactory.createEmptyBorder(3,3,3,3)
+                        BorderFactory.createEmptyBorder(3, 3, 3, 3)
                 )
         );
         pnlAdvancedProperties.setVisible(false);
@@ -105,7 +105,7 @@ public class OAuthAuthenticationPreferencesPanel extends JPanel implements Prope
      */
     protected final void build() {
         setLayout(new GridBagLayout());
-        setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
         GridBagConstraints gc = new GridBagConstraints();
 
         // the panel for the OAuth parameters. pnlAuthorisationMessage is an
@@ -115,7 +115,7 @@ public class OAuthAuthenticationPreferencesPanel extends JPanel implements Prope
         gc.anchor = GridBagConstraints.NORTHWEST;
         gc.weighty = 1.0;
         gc.weightx = 1.0;
-        gc.insets = new Insets(10,0,0,0);
+        gc.insets = new Insets(10, 0, 0, 0);
         add(pnlAuthorisationMessage = new JPanel(), gc);
         pnlAuthorisationMessage.setLayout(new BorderLayout());
 
@@ -179,17 +179,25 @@ public class OAuthAuthenticationPreferencesPanel extends JPanel implements Prope
      *
      */
     private class NotYetAuthorisedPanel extends JPanel {
+        /**
+         * Constructs a new {@code NotYetAuthorisedPanel}.
+         */
+        public NotYetAuthorisedPanel() {
+            build();
+        }
+
         protected void build() {
             setLayout(new GridBagLayout());
             GridBagConstraints gc = new GridBagConstraints();
 
             // A message explaining that the user isn't authorised yet
             gc.anchor = GridBagConstraints.NORTHWEST;
-            gc.insets = new Insets(0,0,3,0);
+            gc.insets = new Insets(0, 0, 3, 0);
             gc.fill = GridBagConstraints.HORIZONTAL;
             gc.weightx = 1.0;
             JMultilineLabel lbl;
-            add(lbl = new JMultilineLabel(tr("You do not have an Access Token yet to access the OSM server using OAuth. Please authorize first.")), gc);
+            add(lbl = new JMultilineLabel(
+                    tr("You do not have an Access Token yet to access the OSM server using OAuth. Please authorize first.")), gc);
             lbl.setFont(lbl.getFont().deriveFont(Font.PLAIN));
 
             // Action for authorising now
@@ -205,10 +213,6 @@ public class OAuthAuthenticationPreferencesPanel extends JPanel implements Prope
             gc.weighty = 1.0;
             add(new JPanel(), gc);
         }
-
-        public NotYetAuthorisedPanel() {
-            build();
-        }
     }
 
     /**
@@ -223,7 +227,7 @@ public class OAuthAuthenticationPreferencesPanel extends JPanel implements Prope
             setLayout(new GridBagLayout());
             GridBagConstraints gc = new GridBagConstraints();
             gc.anchor = GridBagConstraints.NORTHWEST;
-            gc.insets = new Insets(0,0,3,3);
+            gc.insets = new Insets(0, 0, 3, 3);
             gc.fill = GridBagConstraints.HORIZONTAL;
             gc.weightx = 1.0;
             gc.gridwidth = 2;
@@ -291,12 +295,15 @@ public class OAuthAuthenticationPreferencesPanel extends JPanel implements Prope
 
         public final void refreshView() {
             String v = OAuthAccessTokenHolder.getInstance().getAccessTokenKey();
-            tfAccessTokenKey.setText(v == null? "" : v);
+            tfAccessTokenKey.setText(v == null ? "" : v);
             v = OAuthAccessTokenHolder.getInstance().getAccessTokenSecret();
-            tfAccessTokenSecret.setText(v == null? "" : v);
+            tfAccessTokenSecret.setText(v == null ? "" : v);
             cbSaveToPreferences.setSelected(OAuthAccessTokenHolder.getInstance().isSaveToPreferences());
         }
 
+        /**
+         * Constructs a new {@code AlreadyAuthorisedPanel}.
+         */
         public AlreadyAuthorisedPanel() {
             build();
             refreshView();
@@ -310,9 +317,9 @@ public class OAuthAuthenticationPreferencesPanel extends JPanel implements Prope
         public AuthoriseNowAction() {
             putValue(NAME, tr("Authorize now"));
             putValue(SHORT_DESCRIPTION, tr("Click to step through the OAuth authorization process"));
-            putValue(SMALL_ICON, ImageProvider.get("oauth", "oauth"));
-
+            putValue(SMALL_ICON, ImageProvider.get("oauth", "oauth-small"));
         }
+
         @Override
         public void actionPerformed(ActionEvent arg0) {
             OAuthAuthorizationWizard wizard = new OAuthAuthorizationWizard(
@@ -333,12 +340,16 @@ public class OAuthAuthenticationPreferencesPanel extends JPanel implements Prope
      * Launches the OAuthAuthorisationWizard to generate a new Access Token
      */
     private class RenewAuthorisationAction extends AbstractAction {
+        /**
+         * Constructs a new {@code RenewAuthorisationAction}.
+         */
         public RenewAuthorisationAction() {
             putValue(NAME, tr("New Access Token"));
             putValue(SHORT_DESCRIPTION, tr("Click to step through the OAuth authorization process and generate a new Access Token"));
-            putValue(SMALL_ICON, ImageProvider.get("oauth", "oauth"));
+            putValue(SMALL_ICON, ImageProvider.get("oauth", "oauth-small"));
 
         }
+
         @Override
         public void actionPerformed(ActionEvent arg0) {
             OAuthAuthorizationWizard wizard = new OAuthAuthorizationWizard(
@@ -359,10 +370,13 @@ public class OAuthAuthenticationPreferencesPanel extends JPanel implements Prope
      * Runs a test whether we can access the OSM server with the current Access Token
      */
     private class TestAuthorisationAction extends AbstractAction {
+        /**
+         * Constructs a new {@code TestAuthorisationAction}.
+         */
         public TestAuthorisationAction() {
             putValue(NAME, tr("Test Access Token"));
             putValue(SHORT_DESCRIPTION, tr("Click test access to the OSM server with the current access token"));
-            putValue(SMALL_ICON, ImageProvider.get("oauth", "oauth"));
+            putValue(SMALL_ICON, ImageProvider.get("oauth", "oauth-small"));
 
         }
 
@@ -382,8 +396,8 @@ public class OAuthAuthenticationPreferencesPanel extends JPanel implements Prope
 
     @Override
     public void propertyChange(PropertyChangeEvent evt) {
-        if (! evt.getPropertyName().equals(OsmApiUrlInputPanel.API_URL_PROP))
+        if (!evt.getPropertyName().equals(OsmApiUrlInputPanel.API_URL_PROP))
             return;
-        setApiUrl((String)evt.getNewValue());
+        setApiUrl((String) evt.getNewValue());
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/preferences/server/OsmApiUrlInputPanel.java b/src/org/openstreetmap/josm/gui/preferences/server/OsmApiUrlInputPanel.java
index dceca6a..19392b9 100644
--- a/src/org/openstreetmap/josm/gui/preferences/server/OsmApiUrlInputPanel.java
+++ b/src/org/openstreetmap/josm/gui/preferences/server/OsmApiUrlInputPanel.java
@@ -71,7 +71,7 @@ public class OsmApiUrlInputPanel extends JPanel {
         gc.fill = GridBagConstraints.HORIZONTAL;
         gc.anchor = GridBagConstraints.NORTHWEST;
         gc.weightx = 1.0;
-        gc.insets = new Insets(0,0,0,0);
+        gc.insets = new Insets(0, 0, 0, 0);
         gc.gridwidth  = 4;
         add(buildDefaultServerUrlPanel(), gc);
 
@@ -81,12 +81,13 @@ public class OsmApiUrlInputPanel extends JPanel {
         gc.gridy = 1;
         gc.gridwidth = 1;
         gc.weightx = 0.0;
-        gc.insets = new Insets(0,0,0,3);
+        gc.insets = new Insets(0, 0, 0, 3);
         add(lblApiUrl = new JLabel(tr("OSM Server URL:")), gc);
 
         gc.gridx = 1;
         gc.weightx = 1.0;
         add(tfOsmServerUrl = new JosmTextField(), gc);
+        lblApiUrl.setLabelFor(tfOsmServerUrl);
         SelectAllOnFocusGainedDecorator.decorate(tfOsmServerUrl);
         valOsmServerUrl = new ApiUrlValidator(tfOsmServerUrl);
         valOsmServerUrl.validate();
@@ -118,7 +119,7 @@ public class OsmApiUrlInputPanel extends JPanel {
      */
     public void initFromPreferences() {
         String url =  Main.pref.get("osm-server.url", OsmApi.DEFAULT_API_URL);
-        if (url.trim().equals(OsmApi.DEFAULT_API_URL)) {
+        if (OsmApi.DEFAULT_API_URL.equals(url.trim())) {
             cbUseDefaultServerUrl.setSelected(true);
             propagator.propagate(OsmApi.DEFAULT_API_URL);
         } else {
@@ -136,7 +137,7 @@ public class OsmApiUrlInputPanel extends JPanel {
         String hmiUrl = getStrippedApiUrl();
         if (cbUseDefaultServerUrl.isSelected()) {
             Main.pref.put("osm-server.url", null);
-        } else if (hmiUrl.equals(OsmApi.DEFAULT_API_URL)) {
+        } else if (OsmApi.DEFAULT_API_URL.equals(hmiUrl)) {
             Main.pref.put("osm-server.url", null);
         } else {
             Main.pref.put("osm-server.url", hmiUrl);
@@ -253,7 +254,7 @@ public class OsmApiUrlInputPanel extends JPanel {
             try {
                 new URL(getComponent().getText().trim());
                 return true;
-            } catch(MalformedURLException e) {
+            } catch (MalformedURLException e) {
                 return false;
             }
         }
diff --git a/src/org/openstreetmap/josm/gui/preferences/server/ProxyPreferenceListener.java b/src/org/openstreetmap/josm/gui/preferences/server/ProxyPreferenceListener.java
index bf00e9e..cea0426 100644
--- a/src/org/openstreetmap/josm/gui/preferences/server/ProxyPreferenceListener.java
+++ b/src/org/openstreetmap/josm/gui/preferences/server/ProxyPreferenceListener.java
@@ -10,5 +10,5 @@ public interface ProxyPreferenceListener {
     /**
      * Method called when proxy settings are updated.
      */
-    public void proxyPreferenceChanged();
+    void proxyPreferenceChanged();
 }
diff --git a/src/org/openstreetmap/josm/gui/preferences/server/ProxyPreferencesPanel.java b/src/org/openstreetmap/josm/gui/preferences/server/ProxyPreferencesPanel.java
index 681e36f..c0e6178 100644
--- a/src/org/openstreetmap/josm/gui/preferences/server/ProxyPreferencesPanel.java
+++ b/src/org/openstreetmap/josm/gui/preferences/server/ProxyPreferencesPanel.java
@@ -14,7 +14,8 @@ import java.awt.event.ItemListener;
 import java.net.Authenticator.RequestorType;
 import java.net.PasswordAuthentication;
 import java.net.ProxySelector;
-import java.util.HashMap;
+import java.util.EnumMap;
+import java.util.Locale;
 import java.util.Map;
 
 import javax.swing.BorderFactory;
@@ -73,8 +74,8 @@ public class ProxyPreferencesPanel extends VerticallyScrollablePanel {
          */
         public static ProxyPolicy fromName(String policyName) {
             if (policyName == null) return null;
-            policyName = policyName.trim().toLowerCase();
-            for(ProxyPolicy pp: values()) {
+            policyName = policyName.trim().toLowerCase(Locale.ENGLISH);
+            for (ProxyPolicy pp: values()) {
                 if (pp.getName().equals(policyName))
                     return pp;
             }
@@ -125,14 +126,14 @@ public class ProxyPreferencesPanel extends VerticallyScrollablePanel {
         GridBagConstraints gc = new GridBagConstraints();
 
         gc.anchor = GridBagConstraints.WEST;
-        gc.insets = new Insets(5,5,0,0);
+        gc.insets = new Insets(5, 5, 0, 0);
         gc.fill = GridBagConstraints.HORIZONTAL;
         gc.weightx = 0.0;
         pnl.add(new JLabel(tr("Host:")), gc);
 
         gc.gridx = 1;
         gc.weightx = 1.0;
-        pnl.add(tfProxyHttpHost = new JosmTextField(),gc);
+        pnl.add(tfProxyHttpHost = new JosmTextField(), gc);
 
         gc.gridy = 1;
         gc.gridx = 0;
@@ -142,7 +143,7 @@ public class ProxyPreferencesPanel extends VerticallyScrollablePanel {
 
         gc.gridx = 1;
         gc.weightx = 1.0;
-        pnl.add(tfProxyHttpPort = new JosmTextField(5),gc);
+        pnl.add(tfProxyHttpPort = new JosmTextField(5), gc);
         tfProxyHttpPort.setMinimumSize(tfProxyHttpPort.getPreferredSize());
 
         gc.gridy = 2;
@@ -162,7 +163,7 @@ public class ProxyPreferencesPanel extends VerticallyScrollablePanel {
         gc.gridy = 3;
         gc.gridx = 1;
         gc.weightx = 1.0;
-        pnl.add(tfProxyHttpUser = new JosmTextField(20),gc);
+        pnl.add(tfProxyHttpUser = new JosmTextField(20), gc);
         tfProxyHttpUser.setMinimumSize(tfProxyHttpUser.getPreferredSize());
 
         gc.gridy = 4;
@@ -172,7 +173,7 @@ public class ProxyPreferencesPanel extends VerticallyScrollablePanel {
 
         gc.gridx = 1;
         gc.weightx = 1.0;
-        pnl.add(tfProxyHttpPassword = new JosmPasswordField(20),gc);
+        pnl.add(tfProxyHttpPassword = new JosmPasswordField(20), gc);
         tfProxyHttpPassword.setMinimumSize(tfProxyHttpPassword.getPreferredSize());
 
         // add an extra spacer, otherwise the layout is broken
@@ -200,14 +201,14 @@ public class ProxyPreferencesPanel extends VerticallyScrollablePanel {
         };
         GridBagConstraints gc = new GridBagConstraints();
         gc.anchor = GridBagConstraints.WEST;
-        gc.insets = new Insets(5,5,0,0);
+        gc.insets = new Insets(5, 5, 0, 0);
         gc.fill = GridBagConstraints.HORIZONTAL;
         gc.weightx = 0.0;
         pnl.add(new JLabel(tr("Host:")), gc);
 
         gc.gridx = 1;
         gc.weightx = 1.0;
-        pnl.add(tfProxySocksHost = new JosmTextField(20),gc);
+        pnl.add(tfProxySocksHost = new JosmTextField(20), gc);
 
         gc.gridy = 1;
         gc.gridx = 0;
@@ -236,7 +237,7 @@ public class ProxyPreferencesPanel extends VerticallyScrollablePanel {
         GridBagConstraints gc = new GridBagConstraints();
 
         ButtonGroup bgProxyPolicy = new ButtonGroup();
-        rbProxyPolicy = new HashMap<>();
+        rbProxyPolicy = new EnumMap<>(ProxyPolicy.class);
         ProxyPolicyChangeListener policyChangeListener = new ProxyPolicyChangeListener();
         for (ProxyPolicy pp: ProxyPolicy.values()) {
             rbProxyPolicy.put(pp, new JRadioButton());
@@ -250,7 +251,7 @@ public class ProxyPreferencesPanel extends VerticallyScrollablePanel {
         gc.fill = GridBagConstraints.HORIZONTAL;
         gc.anchor = GridBagConstraints.NORTHWEST;
         gc.weightx = 0.0;
-        pnl.add(rbProxyPolicy.get(ProxyPolicy.NO_PROXY),gc);
+        pnl.add(rbProxyPolicy.get(ProxyPolicy.NO_PROXY), gc);
 
         gc.gridx = 1;
         gc.weightx = 1.0;
@@ -260,7 +261,7 @@ public class ProxyPreferencesPanel extends VerticallyScrollablePanel {
         gc.gridx = 0;
         gc.gridy = 1;
         gc.weightx = 0.0;
-        pnl.add(rbProxyPolicy.get(ProxyPolicy.USE_SYSTEM_SETTINGS),gc);
+        pnl.add(rbProxyPolicy.get(ProxyPolicy.USE_SYSTEM_SETTINGS), gc);
 
         gc.gridx = 1;
         gc.weightx = 1.0;
@@ -276,11 +277,11 @@ public class ProxyPreferencesPanel extends VerticallyScrollablePanel {
         gc.gridx = 0;
         gc.gridy = 2;
         gc.weightx = 0.0;
-        pnl.add(rbProxyPolicy.get(ProxyPolicy.USE_HTTP_PROXY),gc);
+        pnl.add(rbProxyPolicy.get(ProxyPolicy.USE_HTTP_PROXY), gc);
 
         gc.gridx = 1;
         gc.weightx = 1.0;
-        pnl.add(new JLabel(tr("Manually configure a HTTP proxy")),gc);
+        pnl.add(new JLabel(tr("Manually configure a HTTP proxy")), gc);
 
         // the panel with the http proxy configuration parameters
         gc.gridx = 1;
@@ -288,17 +289,17 @@ public class ProxyPreferencesPanel extends VerticallyScrollablePanel {
         gc.fill = GridBagConstraints.HORIZONTAL;
         gc.weightx = 1.0;
         gc.weighty = 0.0;
-        pnl.add(pnlHttpProxyConfigurationPanel = buildHttpProxyConfigurationPanel(),gc);
+        pnl.add(pnlHttpProxyConfigurationPanel = buildHttpProxyConfigurationPanel(), gc);
 
         // radio button SOCKS proxy
         gc.gridx = 0;
         gc.gridy = 4;
         gc.weightx = 0.0;
-        pnl.add(rbProxyPolicy.get(ProxyPolicy.USE_SOCKS_PROXY),gc);
+        pnl.add(rbProxyPolicy.get(ProxyPolicy.USE_SOCKS_PROXY), gc);
 
         gc.gridx = 1;
         gc.weightx = 1.0;
-        pnl.add(new JLabel(tr("Use a SOCKS proxy")),gc);
+        pnl.add(new JLabel(tr("Use a SOCKS proxy")), gc);
 
         // the panel with the SOCKS configuration parameters
         gc.gridx = 1;
@@ -307,7 +308,7 @@ public class ProxyPreferencesPanel extends VerticallyScrollablePanel {
         gc.anchor = GridBagConstraints.WEST;
         gc.weightx = 1.0;
         gc.weighty = 0.0;
-        pnl.add(pnlSocksProxyConfigurationPanel = buildSocksProxyConfigurationPanel(),gc);
+        pnl.add(pnlSocksProxyConfigurationPanel = buildSocksProxyConfigurationPanel(), gc);
 
         return pnl;
     }
@@ -341,8 +342,9 @@ public class ProxyPreferencesPanel extends VerticallyScrollablePanel {
         tfProxySocksHost.setText(Main.pref.get(PROXY_SOCKS_HOST, ""));
         tfProxySocksPort.setText(Main.pref.get(PROXY_SOCKS_PORT, ""));
 
-        if (pp.equals(ProxyPolicy.USE_SYSTEM_SETTINGS) && ! DefaultProxySelector.willJvmRetrieveSystemProxies()) {
-            Main.warn(tr("JOSM is configured to use proxies from the system setting, but the JVM is not configured to retrieve them. Resetting preferences to ''No proxy''"));
+        if (pp.equals(ProxyPolicy.USE_SYSTEM_SETTINGS) && !DefaultProxySelector.willJvmRetrieveSystemProxies()) {
+            Main.warn(tr("JOSM is configured to use proxies from the system setting, but the JVM is not configured to retrieve them. " +
+                         "Resetting preferences to ''No proxy''"));
             pp = ProxyPolicy.NO_PROXY;
             rbProxyPolicy.get(pp).setSelected(true);
         }
@@ -359,7 +361,7 @@ public class ProxyPreferencesPanel extends VerticallyScrollablePanel {
                 tfProxyHttpUser.setText(pa.getUserName() == null ? "" : pa.getUserName());
                 tfProxyHttpPassword.setText(pa.getPassword() == null ? "" : String.valueOf(pa.getPassword()));
             }
-        } catch(CredentialsAgentException e) {
+        } catch (CredentialsAgentException e) {
             Main.error(e);
             tfProxyHttpUser.setText("");
             tfProxyHttpPassword.setText("");
@@ -392,7 +394,7 @@ public class ProxyPreferencesPanel extends VerticallyScrollablePanel {
      */
     public ProxyPreferencesPanel() {
         setLayout(new GridBagLayout());
-        setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
         add(buildProxySettingsPanel(), GBC.eop().anchor(GridBagConstraints.NORTHWEST).fill(GridBagConstraints.BOTH));
 
         initFromPreferences();
@@ -424,7 +426,7 @@ public class ProxyPreferencesPanel extends VerticallyScrollablePanel {
         // update the proxy selector
         ProxySelector selector = ProxySelector.getDefault();
         if (selector instanceof DefaultProxySelector) {
-            ((DefaultProxySelector)selector).initFromPreferences();
+            ((DefaultProxySelector) selector).initFromPreferences();
         }
 
         CredentialsAgent cm = CredentialsManager.getInstance();
@@ -434,7 +436,7 @@ public class ProxyPreferencesPanel extends VerticallyScrollablePanel {
                     tfProxyHttpPassword.getPassword()
             );
             cm.store(RequestorType.PROXY, tfProxyHttpHost.getText(), pa);
-        } catch(CredentialsAgentException e) {
+        } catch (CredentialsAgentException e) {
             Main.error(e);
         }
     }
diff --git a/src/org/openstreetmap/josm/gui/preferences/server/ServerAccessPreference.java b/src/org/openstreetmap/josm/gui/preferences/server/ServerAccessPreference.java
index 61c464c..967f218 100644
--- a/src/org/openstreetmap/josm/gui/preferences/server/ServerAccessPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/server/ServerAccessPreference.java
@@ -34,7 +34,8 @@ public final class ServerAccessPreference extends DefaultTabPreferenceSetting {
     }
 
     private ServerAccessPreference() {
-        super(/* ICON(preferences/) */ "connection", tr("Connection Settings"), tr("Connection Settings for the OSM server."), false, new JTabbedPane());
+        super(/* ICON(preferences/) */ "connection", tr("Connection Settings"),
+                tr("Connection Settings for the OSM server."), false, new JTabbedPane());
     }
 
     /** indicates whether to use the default OSM URL or not */
@@ -64,7 +65,7 @@ public final class ServerAccessPreference extends DefaultTabPreferenceSetting {
         gc.fill = GridBagConstraints.HORIZONTAL;
         gc.anchor = GridBagConstraints.NORTHWEST;
         gc.weightx = 1.0;
-        gc.insets = new Insets(0,0,0,0);
+        gc.insets = new Insets(0, 0, 0, 0);
         pnlApiUrlPreferences = new OsmApiUrlInputPanel();
         pnl.add(pnlApiUrlPreferences, gc);
 
@@ -73,7 +74,7 @@ public final class ServerAccessPreference extends DefaultTabPreferenceSetting {
         gc.fill = GridBagConstraints.BOTH;
         gc.weightx = 1.0;
         gc.weighty = 1.0;
-        gc.insets = new Insets(10,0,3,3);
+        gc.insets = new Insets(10, 0, 3, 3);
         pnl.add(buildTabbedServerPreferences(), gc);
 
         HelpUtil.setHelpContext(pnl, HelpUtil.ht("/Preferences/Connection"));
@@ -85,7 +86,7 @@ public final class ServerAccessPreference extends DefaultTabPreferenceSetting {
      * @param listener the listener
      * @since 6523
      */
-    public final void addApiUrlChangeListener(PropertyChangeListener listener) {
+    public void addApiUrlChangeListener(PropertyChangeListener listener) {
         pnlApiUrlPreferences.addPropertyChangeListener(listener);
     }
 
diff --git a/src/org/openstreetmap/josm/gui/preferences/server/UserNameValidator.java b/src/org/openstreetmap/josm/gui/preferences/server/UserNameValidator.java
index 93b542b..ce1ac07 100644
--- a/src/org/openstreetmap/josm/gui/preferences/server/UserNameValidator.java
+++ b/src/org/openstreetmap/josm/gui/preferences/server/UserNameValidator.java
@@ -22,7 +22,7 @@ public class UserNameValidator extends AbstractTextComponentValidator {
 
     @Override
     public boolean isValid() {
-        return getComponent().getText().trim().length() > 0;
+        return !getComponent().getText().trim().isEmpty();
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/gui/preferences/shortcut/PrefJPanel.java b/src/org/openstreetmap/josm/gui/preferences/shortcut/PrefJPanel.java
index a171968..973c854 100644
--- a/src/org/openstreetmap/josm/gui/preferences/shortcut/PrefJPanel.java
+++ b/src/org/openstreetmap/josm/gui/preferences/shortcut/PrefJPanel.java
@@ -60,10 +60,14 @@ public class PrefJPanel extends JPanel {
     // on the physical keyboard. What language pack is installed in JOSM is completely
     // independent from the keyboard's labelling. But the operation system's locale
     // usually matches the keyboard. This even works with my English Windows and my German keyboard.
-    private static final String SHIFT = KeyEvent.getKeyModifiersText(KeyStroke.getKeyStroke(KeyEvent.VK_A, KeyEvent.SHIFT_DOWN_MASK).getModifiers());
-    private static final String CTRL  = KeyEvent.getKeyModifiersText(KeyStroke.getKeyStroke(KeyEvent.VK_A, KeyEvent.CTRL_DOWN_MASK).getModifiers());
-    private static final String ALT   = KeyEvent.getKeyModifiersText(KeyStroke.getKeyStroke(KeyEvent.VK_A, KeyEvent.ALT_DOWN_MASK).getModifiers());
-    private static final String META  = KeyEvent.getKeyModifiersText(KeyStroke.getKeyStroke(KeyEvent.VK_A, KeyEvent.META_DOWN_MASK).getModifiers());
+    private static final String SHIFT = KeyEvent.getKeyModifiersText(KeyStroke.getKeyStroke(KeyEvent.VK_A,
+            KeyEvent.SHIFT_DOWN_MASK).getModifiers());
+    private static final String CTRL  = KeyEvent.getKeyModifiersText(KeyStroke.getKeyStroke(KeyEvent.VK_A,
+            KeyEvent.CTRL_DOWN_MASK).getModifiers());
+    private static final String ALT   = KeyEvent.getKeyModifiersText(KeyStroke.getKeyStroke(KeyEvent.VK_A,
+            KeyEvent.ALT_DOWN_MASK).getModifiers());
+    private static final String META  = KeyEvent.getKeyModifiersText(KeyStroke.getKeyStroke(KeyEvent.VK_A,
+            KeyEvent.META_DOWN_MASK).getModifiers());
 
     // A list of keys to present the user. Sadly this really is a list of keys Java knows about,
     // not a list of real physical keys. If someone knows how to get that list?
@@ -117,31 +121,34 @@ public class PrefJPanel extends JPanel {
     }
 
     private static class ScListModel extends AbstractTableModel {
-        private String[] columnNames = new String[]{tr("Action"), tr("Shortcut")};
+        private final String[] columnNames = new String[]{tr("Action"), tr("Shortcut")};
         private transient List<Shortcut> data;
 
+        /**
+         * Constructs a new {@code ScListModel}.
+         */
         public ScListModel() {
             data = Shortcut.listAll();
         }
+
         @Override
         public int getColumnCount() {
             return columnNames.length;
         }
+
         @Override
         public int getRowCount() {
             return data.size();
         }
+
         @Override
         public String getColumnName(int col) {
             return columnNames[col];
         }
+
         @Override
         public Object getValueAt(int row, int col) {
-            return (col==0)?  data.get(row).getLongText() : data.get(row);
-        }
-        @Override
-        public boolean isCellEditable(int row, int col) {
-            return false;
+            return (col == 0) ? data.get(row).getLongText() : data.get(row);
         }
     }
 
@@ -157,22 +164,22 @@ public class PrefJPanel extends JPanel {
         public Component getTableCellRendererComponent(JTable table, Object value, boolean
                 isSelected, boolean hasFocus, int row, int column) {
             int row1 = shortcutTable.convertRowIndexToModel(row);
-            Shortcut sc = (Shortcut)model.getValueAt(row1, -1);
-            if (sc==null) return null;
+            Shortcut sc = (Shortcut) model.getValueAt(row1, -1);
+            if (sc == null) return null;
             JLabel label = (JLabel) super.getTableCellRendererComponent(
                 table, name ? sc.getLongText() : sc.getKeyText(), isSelected, hasFocus, row, column);
             label.setBackground(Main.pref.getUIColor("Table.background"));
             if (isSelected) {
                 label.setForeground(Main.pref.getUIColor("Table.foreground"));
             }
-            if(sc.getAssignedUser()) {
+            if (sc.isAssignedUser()) {
                 label.setBackground(Main.pref.getColor(
                         marktr("Shortcut Background: User"),
-                        new Color(200,255,200)));
-            } else if(!sc.getAssignedDefault()) {
+                        new Color(200, 255, 200)));
+            } else if (!sc.isAssignedDefault()) {
                 label.setBackground(Main.pref.getColor(
                         marktr("Shortcut Background: Modified"),
-                        new Color(255,255,200)));
+                        new Color(255, 255, 200)));
             }
             return label;
         }
@@ -241,13 +248,13 @@ public class PrefJPanel extends JPanel {
     private JPanel buildFilterPanel() {
         // copied from PluginPreference
         JPanel pnl  = new JPanel(new GridBagLayout());
-        pnl.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        pnl.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
         GridBagConstraints gc = new GridBagConstraints();
 
         gc.anchor = GridBagConstraints.NORTHWEST;
         gc.fill = GridBagConstraints.HORIZONTAL;
         gc.weightx = 0.0;
-        gc.insets = new Insets(0,0,0,5);
+        gc.insets = new Insets(0, 0, 0, 5);
         pnl.add(new JLabel(tr("Search:")), gc);
 
         gc.gridx = 1;
@@ -256,7 +263,7 @@ public class PrefJPanel extends JPanel {
         filterField.setToolTipText(tr("Enter a search expression"));
         SelectAllOnFocusGainedDecorator.decorate(filterField);
         filterField.getDocument().addDocumentListener(new FilterFieldAdapter());
-        pnl.setMaximumSize(new Dimension(300,10));
+        pnl.setMaximumSize(new Dimension(300, 10));
         return pnl;
     }
 
@@ -279,16 +286,18 @@ public class PrefJPanel extends JPanel {
     // more expirience with GUI coding than I have.
     private class CbAction extends AbstractAction implements ListSelectionListener {
         private PrefJPanel panel;
-        public CbAction (PrefJPanel panel) {
+
+        public CbAction(PrefJPanel panel) {
             this.panel = panel;
         }
+
         @Override
         public void valueChanged(ListSelectionEvent e) {
             ListSelectionModel lsm = panel.shortcutTable.getSelectionModel(); // can't use e here
             if (!lsm.isSelectionEmpty()) {
                 int row = panel.shortcutTable.convertRowIndexToModel(lsm.getMinSelectionIndex());
-                Shortcut sc = (Shortcut)panel.model.getValueAt(row, -1);
-                panel.cbDefault.setSelected(!sc.getAssignedUser());
+                Shortcut sc = (Shortcut) panel.model.getValueAt(row, -1);
+                panel.cbDefault.setSelected(!sc.isAssignedUser());
                 panel.cbDisable.setSelected(sc.getKeyStroke() == null);
                 panel.cbShift.setSelected(sc.getAssignedModifier() != -1 && (sc.getAssignedModifier() & KeyEvent.SHIFT_DOWN_MASK) != 0);
                 panel.cbCtrl.setSelected(sc.getAssignedModifier() != -1 && (sc.getAssignedModifier() & KeyEvent.CTRL_DOWN_MASK) != 0);
@@ -312,13 +321,14 @@ public class PrefJPanel extends JPanel {
                 panel.tfKey.setEnabled(false);
             }
         }
+
         @Override
         public void actionPerformed(java.awt.event.ActionEvent e) {
             ListSelectionModel lsm = panel.shortcutTable.getSelectionModel();
             if (lsm != null && !lsm.isSelectionEmpty()) {
                 if (e != null) { // only if we've been called by a user action
                     int row = panel.shortcutTable.convertRowIndexToModel(lsm.getMinSelectionIndex());
-                    Shortcut sc = (Shortcut)panel.model.getValueAt(row, -1);
+                    Shortcut sc = (Shortcut) panel.model.getValueAt(row, -1);
                     if (panel.cbDisable.isSelected()) {
                         sc.setAssignedModifier(-1);
                     } else if (panel.tfKey.getSelectedItem() == null || "".equals(panel.tfKey.getSelectedItem())) {
@@ -357,10 +367,12 @@ public class PrefJPanel extends JPanel {
     class FilterFieldAdapter implements DocumentListener {
         public void filter() {
             String expr = filterField.getText().trim();
-            if (expr.isEmpty()) { expr=null; }
+            if (expr.isEmpty()) {
+                expr = null;
+            }
             try {
                 final TableRowSorter<? extends TableModel> sorter =
-                    ((TableRowSorter<? extends TableModel> )shortcutTable.getRowSorter());
+                    (TableRowSorter<? extends TableModel>) shortcutTable.getRowSorter();
                 if (expr == null) {
                     sorter.setRowFilter(null);
                 } else {
@@ -379,10 +391,18 @@ public class PrefJPanel extends JPanel {
         }
 
         @Override
-        public void changedUpdate(DocumentEvent arg0) { filter(); }
+        public void changedUpdate(DocumentEvent e) {
+            filter();
+        }
+
         @Override
-        public void insertUpdate(DocumentEvent arg0) {  filter(); }
+        public void insertUpdate(DocumentEvent e) {
+            filter();
+        }
+
         @Override
-        public void removeUpdate(DocumentEvent arg0) { filter(); }
+        public void removeUpdate(DocumentEvent e) {
+            filter();
+        }
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/preferences/validator/ValidatorPreference.java b/src/org/openstreetmap/josm/gui/preferences/validator/ValidatorPreference.java
index c8dbd5c..f647d56 100644
--- a/src/org/openstreetmap/josm/gui/preferences/validator/ValidatorPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/validator/ValidatorPreference.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.preferences.validator;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
diff --git a/src/org/openstreetmap/josm/gui/preferences/validator/ValidatorTestsPreference.java b/src/org/openstreetmap/josm/gui/preferences/validator/ValidatorTestsPreference.java
index b5c3889..c379807 100644
--- a/src/org/openstreetmap/josm/gui/preferences/validator/ValidatorTestsPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/validator/ValidatorTestsPreference.java
@@ -55,7 +55,7 @@ public class ValidatorTestsPreference implements SubPreferenceSetting {
     @Override
     public void addGui(PreferenceTabbedPane gui) {
         JPanel testPanel = new JPanel(new GridBagLayout());
-        testPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        testPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
 
         prefUseIgnore = new JCheckBox(tr("Use ignore list."), Main.pref.getBoolean(ValidatorPreference.PREF_USE_IGNORE, true));
         prefUseIgnore.setToolTipText(tr("Use the ignore list to suppress warnings."));
@@ -69,7 +69,8 @@ public class ValidatorTestsPreference implements SubPreferenceSetting {
         prefOther.setToolTipText(tr("Show the informational tests."));
         testPanel.add(prefOther, GBC.eol());
 
-        prefOtherUpload = new JCheckBox(tr("Show informational level on upload."), Main.pref.getBoolean(ValidatorPreference.PREF_OTHER_UPLOAD, false));
+        prefOtherUpload = new JCheckBox(tr("Show informational level on upload."),
+                Main.pref.getBoolean(ValidatorPreference.PREF_OTHER_UPLOAD, false));
         prefOtherUpload.setToolTipText(tr("Show the informational tests in the upload check windows."));
         testPanel.add(prefOtherUpload, GBC.eol());
 
@@ -82,10 +83,10 @@ public class ValidatorTestsPreference implements SubPreferenceSetting {
         prefOther.addActionListener(otherUploadEnabled);
         otherUploadEnabled.actionPerformed(null);
 
-        GBC a = GBC.eol().insets(-5,0,0,0);
+        GBC a = GBC.eol().insets(-5, 0, 0, 0);
         a.anchor = GBC.EAST;
-        testPanel.add( new JLabel(tr("On demand")), GBC.std() );
-        testPanel.add( new JLabel(tr("On upload")), a );
+        testPanel.add(new JLabel(tr("On demand")), GBC.std());
+        testPanel.add(new JLabel(tr("On upload")), a);
 
         allTests = OsmValidator.getTests();
         for (Test test: allTests) {
@@ -105,9 +106,9 @@ public class ValidatorTestsPreference implements SubPreferenceSetting {
         for (Test test : allTests) {
             test.ok();
             String name = test.getClass().getName();
-            if(!test.enabled)
+            if (!test.enabled)
                 tests.add(name);
-            if(!test.testBeforeUpload)
+            if (!test.testBeforeUpload)
                 testsBeforeUpload.add(name);
         }
 
diff --git a/src/org/openstreetmap/josm/gui/progress/AbstractProgressMonitor.java b/src/org/openstreetmap/josm/gui/progress/AbstractProgressMonitor.java
index 997559b..9136496 100644
--- a/src/org/openstreetmap/josm/gui/progress/AbstractProgressMonitor.java
+++ b/src/org/openstreetmap/josm/gui/progress/AbstractProgressMonitor.java
@@ -43,9 +43,13 @@ public abstract class AbstractProgressMonitor implements ProgressMonitor {
     private Request requestedState = new Request();
 
     protected abstract void doBeginTask();
+
     protected abstract void doFinishTask();
+
     protected abstract void doSetIntermediate(boolean value);
+
     protected abstract void doSetTitle(String title);
+
     protected abstract void doSetCustomText(String title);
 
     protected AbstractProgressMonitor(CancelHandler cancelHandler) {
@@ -107,7 +111,7 @@ public abstract class AbstractProgressMonitor implements ProgressMonitor {
             if (title != null) {
                 requestedState.title = title;
             }
-            requestedState.intermediate = false;
+            requestedState.intermediate = Boolean.FALSE;
         } else {
             checkState(State.IN_TASK);
             if (title != null) {
@@ -125,7 +129,7 @@ public abstract class AbstractProgressMonitor implements ProgressMonitor {
             if (title != null) {
                 requestedState.title = title;
             }
-            requestedState.intermediate = true;
+            requestedState.intermediate = Boolean.TRUE;
         } else {
             checkState(State.IN_TASK);
             if (title != null) {
@@ -173,12 +177,12 @@ public abstract class AbstractProgressMonitor implements ProgressMonitor {
             newTitle = taskTitle;
         }
 
-        if (newTitle == null?shownTitle != null:!newTitle.equals(shownTitle)) {
+        if (newTitle == null ? shownTitle != null : !newTitle.equals(shownTitle)) {
             shownTitle = newTitle;
             doSetTitle(shownTitle);
         }
 
-        if (customText == null?shownCustomText != null:!customText.equals(shownCustomText)) {
+        if (customText == null ? shownCustomText != null : !customText.equals(shownCustomText)) {
             shownCustomText = customText;
             doSetCustomText(shownCustomText);
         }
@@ -240,7 +244,7 @@ public abstract class AbstractProgressMonitor implements ProgressMonitor {
             childProgress = 1;
         }
         checkState(State.IN_TASK, State.IN_SUBTASK);
-        updateProgress(ticksCount == 0?0:(ticks + childProgress * childTicks) / ticksCount);
+        updateProgress(ticksCount == 0 ? 0 : (ticks + childProgress * childTicks) / ticksCount);
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/gui/progress/PleaseWaitProgressMonitor.java b/src/org/openstreetmap/josm/gui/progress/PleaseWaitProgressMonitor.java
index 8ca4620..7930465 100644
--- a/src/org/openstreetmap/josm/gui/progress/PleaseWaitProgressMonitor.java
+++ b/src/org/openstreetmap/josm/gui/progress/PleaseWaitProgressMonitor.java
@@ -2,9 +2,7 @@
 package org.openstreetmap.josm.gui.progress;
 
 import java.awt.Component;
-import java.awt.Dialog;
-import java.awt.Frame;
-import java.awt.Window;
+import java.awt.GraphicsEnvironment;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.WindowAdapter;
@@ -26,15 +24,21 @@ public class PleaseWaitProgressMonitor extends AbstractProgressMonitor {
      */
     public interface ProgressMonitorDialog {
         void setVisible(boolean visible);
+
         void updateProgress(int progress);
+
         void setCustomText(String text);
+
         void setCurrentAction(String text);
+
         void setIndeterminate(boolean newValue);
-        void appendLogMessage(String message); //TODO Not implemented properly in background monitor, log message will get lost if progress runs in background
+
+        // TODO Not implemented properly in background monitor, log message will get lost if progress runs in background
+        void appendLogMessage(String message);
     }
 
     public static final int PROGRESS_BAR_MAX = 10000;
-    private final Window dialogParent;
+    private final Component dialogParent;
 
     private int currentProgressValue = 0;
     private String customText;
@@ -49,11 +53,11 @@ public class PleaseWaitProgressMonitor extends AbstractProgressMonitor {
     private boolean cancelable;
 
     private void doInEDT(Runnable runnable) {
-        // This must be invoke later even if current thread is EDT because inside there is dialog.setVisible which freeze current code flow until modal dialog is closed
+        // This must be invoke later even if current thread is EDT because inside there is dialog.setVisible
+        // which freeze current code flow until modal dialog is closed
         SwingUtilities.invokeLater(runnable);
     }
 
-
     private void setDialogVisible(boolean visible) {
         if (dialog.isVisible() != visible) {
             dialog.setVisible(visible);
@@ -94,27 +98,43 @@ public class PleaseWaitProgressMonitor extends AbstractProgressMonitor {
             return null;
     }
 
+    /**
+     * Constructs a new {@code PleaseWaitProgressMonitor}.
+     */
     public PleaseWaitProgressMonitor() {
         this("");
     }
 
+    /**
+     * Constructs a new {@code PleaseWaitProgressMonitor}.
+     */
     public PleaseWaitProgressMonitor(String windowTitle) {
         this(Main.parent);
         this.windowTitle = windowTitle;
     }
 
+    /**
+     * Constructs a new {@code PleaseWaitProgressMonitor}.
+     */
     public PleaseWaitProgressMonitor(Component dialogParent) {
         super(new CancelHandler());
-        this.dialogParent = JOptionPane.getFrameForComponent(dialogParent);
+        if (GraphicsEnvironment.isHeadless()) {
+            this.dialogParent = dialogParent;
+        } else {
+            this.dialogParent = JOptionPane.getFrameForComponent(dialogParent);
+        }
         this.cancelable = true;
     }
 
+    /**
+     * Constructs a new {@code PleaseWaitProgressMonitor}.
+     */
     public PleaseWaitProgressMonitor(Component dialogParent, String windowTitle) {
         this(JOptionPane.getFrameForComponent(dialogParent));
         this.windowTitle = windowTitle;
     }
 
-    private ActionListener cancelListener = new ActionListener(){
+    private ActionListener cancelListener = new ActionListener() {
         @Override
         public void actionPerformed(ActionEvent e) {
             cancel();
@@ -133,7 +153,7 @@ public class PleaseWaitProgressMonitor extends AbstractProgressMonitor {
         }
     };
 
-    private WindowListener windowListener = new WindowAdapter(){
+    private WindowListener windowListener = new WindowAdapter() {
         @Override public void windowClosing(WindowEvent e) {
             cancel();
         }
@@ -153,12 +173,10 @@ public class PleaseWaitProgressMonitor extends AbstractProgressMonitor {
             @Override
             public void run() {
                 Main.currentProgressMonitor = PleaseWaitProgressMonitor.this;
-                if (dialogParent instanceof Frame && dialog == null) {
-                    dialog = new PleaseWaitDialog(dialogParent);
-                } else if (dialogParent instanceof Dialog && dialog == null) {
+                if (dialogParent != null && dialog == null) {
                     dialog = new PleaseWaitDialog(dialogParent);
                 } else
-                    throw new ProgressException("PleaseWaitDialog parent must be either Frame or Dialog");
+                    throw new ProgressException("PleaseWaitDialog parent must be set");
 
                 if (windowTitle != null) {
                     dialog.setTitle(windowTitle);
@@ -181,7 +199,7 @@ public class PleaseWaitProgressMonitor extends AbstractProgressMonitor {
 
     @Override
     protected void updateProgress(double progressValue) {
-        final int newValue = (int)(progressValue * PROGRESS_BAR_MAX);
+        final int newValue = (int) (progressValue * PROGRESS_BAR_MAX);
         if (newValue != currentProgressValue) {
             currentProgressValue = newValue;
             doInEDT(new Runnable() {
@@ -330,7 +348,6 @@ public class PleaseWaitProgressMonitor extends AbstractProgressMonitor {
         return taskId;
     }
 
-
     @Override
     public Component getWindowParent() {
         Component parent = dialog;
diff --git a/src/org/openstreetmap/josm/gui/progress/ProgressMonitor.java b/src/org/openstreetmap/josm/gui/progress/ProgressMonitor.java
index 09080c1..f2fbab6 100644
--- a/src/org/openstreetmap/josm/gui/progress/ProgressMonitor.java
+++ b/src/org/openstreetmap/josm/gui/progress/ProgressMonitor.java
@@ -36,13 +36,13 @@ public interface ProgressMonitor {
     }
 
     /** Ticks count used, when no other value is supplied */
-    public final int DEFAULT_TICKS = 10000;
+    int DEFAULT_TICKS = 10000;
 
     /**
      * Can be used with {@link #worked(int)} and {@link #createSubTaskMonitor(int, boolean)} to
      * express that the task should use all remaining ticks
      */
-    public final int ALL_TICKS = -1;
+    int ALL_TICKS = -1;
 
     /**
      * Starts this progress monitor. Must be called exactly once
@@ -115,17 +115,17 @@ public interface ProgressMonitor {
      * Normal subtask
      * @param title Can be {@code null}, in that case task title is not changed
      */
-
     void subTask(String title);
+
     /**
      * Shows additional text
+     * @param text custom text
      */
-
     void setCustomText(String text);
+
     /**
-     * Show extra text after normal task title. Hack for ProgressInputStream to show number of kB
-     * already downloaded
-     * @param text
+     * Show extra text after normal task title. Hack for ProgressInputStream to show number of kB already downloaded
+     * @param text extra text
      */
     void setExtraText(String text);
 
diff --git a/src/org/openstreetmap/josm/gui/progress/ProgressMonitorExecutor.java b/src/org/openstreetmap/josm/gui/progress/ProgressMonitorExecutor.java
index f159a12..e157ad9 100644
--- a/src/org/openstreetmap/josm/gui/progress/ProgressMonitorExecutor.java
+++ b/src/org/openstreetmap/josm/gui/progress/ProgressMonitorExecutor.java
@@ -6,6 +6,7 @@ import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
  * Executor that displays the progress monitor to the user.
@@ -15,9 +16,15 @@ import org.openstreetmap.josm.Main;
  */
 public class ProgressMonitorExecutor extends ThreadPoolExecutor {
 
-    public ProgressMonitorExecutor() {
+    /**
+     * Creates a new {@code ProgressMonitorExecutor}
+     * @param nameFormat see {@link Utils#newThreadFactory(String, int)}
+     * @param threadPriority see {@link Utils#newThreadFactory(String, int)}
+     */
+    public ProgressMonitorExecutor(final String nameFormat, final int threadPriority) {
         super(1, 1, 0L, TimeUnit.MILLISECONDS,
-                new LinkedBlockingQueue<Runnable>());
+                new LinkedBlockingQueue<Runnable>(),
+                Utils.newThreadFactory(nameFormat, threadPriority));
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/gui/progress/ProgressRenderer.java b/src/org/openstreetmap/josm/gui/progress/ProgressRenderer.java
index 1711389..b71133b 100644
--- a/src/org/openstreetmap/josm/gui/progress/ProgressRenderer.java
+++ b/src/org/openstreetmap/josm/gui/progress/ProgressRenderer.java
@@ -8,8 +8,12 @@ package org.openstreetmap.josm.gui.progress;
  */
 public interface ProgressRenderer {
     void setTaskTitle(String taskTitle);
+
     void setCustomText(String message);
+
     void setIndeterminate(boolean indeterminate);
+
     void setMaximum(int maximum);
+
     void setValue(int value);
 }
diff --git a/src/org/openstreetmap/josm/gui/progress/SwingRenderingProgressMonitor.java b/src/org/openstreetmap/josm/gui/progress/SwingRenderingProgressMonitor.java
index 98c434a..9ab4411 100644
--- a/src/org/openstreetmap/josm/gui/progress/SwingRenderingProgressMonitor.java
+++ b/src/org/openstreetmap/josm/gui/progress/SwingRenderingProgressMonitor.java
@@ -47,7 +47,7 @@ public class SwingRenderingProgressMonitor extends AbstractProgressMonitor {
 
     @Override
     protected void updateProgress(double progressValue) {
-        final int newValue = (int)(progressValue * PROGRESS_BAR_MAX);
+        final int newValue = (int) (progressValue * PROGRESS_BAR_MAX);
         if (newValue != currentProgressValue) {
             currentProgressValue = newValue;
             GuiHelper.runInEDT(new Runnable() {
diff --git a/src/org/openstreetmap/josm/gui/progress/package-info.java b/src/org/openstreetmap/josm/gui/progress/package-info.java
new file mode 100644
index 0000000..17ad9fa
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/progress/package-info.java
@@ -0,0 +1,6 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Provides GUI classes for displaying long tasks background advancement in a progress bar, and a way to cancel them.
+ */
+package org.openstreetmap.josm.gui.progress;
diff --git a/src/org/openstreetmap/josm/gui/tagging/PresetHandler.java b/src/org/openstreetmap/josm/gui/tagging/PresetHandler.java
index c5720f8..9483b5b 100644
--- a/src/org/openstreetmap/josm/gui/tagging/PresetHandler.java
+++ b/src/org/openstreetmap/josm/gui/tagging/PresetHandler.java
@@ -1,13 +1,14 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.tagging;
 
-import org.openstreetmap.josm.data.osm.OsmPrimitive;
-import org.openstreetmap.josm.data.osm.Tag;
-
 import java.util.Collection;
 import java.util.List;
 
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.Tag;
+
 public interface PresetHandler {
     Collection<OsmPrimitive> getSelection();
+
     void updateTags(List<Tag> tags);
 }
diff --git a/src/org/openstreetmap/josm/gui/tagging/TagCellEditor.java b/src/org/openstreetmap/josm/gui/tagging/TagCellEditor.java
index 4a1a38a..99eaa3e 100644
--- a/src/org/openstreetmap/josm/gui/tagging/TagCellEditor.java
+++ b/src/org/openstreetmap/josm/gui/tagging/TagCellEditor.java
@@ -29,9 +29,13 @@ public class TagCellEditor extends AbstractCellEditor implements TableCellEditor
 
     /**
      * constructor
+     * @param maxCharacters maximum number of characters allowed, 0 for unlimited
      */
-    public TagCellEditor() {
+    public TagCellEditor(final int maxCharacters) {
         editor = new AutoCompletingTextField(0, false);
+        if (maxCharacters > 0) {
+            editor.setMaxChars(maxCharacters);
+        }
         editor.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
     }
 
@@ -58,7 +62,7 @@ public class TagCellEditor extends AbstractCellEditor implements TableCellEditor
         // remove the keys already present in the current tag model
         //
         for (String key : model.getKeys()) {
-            if (! key.equals(currentTag.getName())) {
+            if (!key.equals(currentTag.getName())) {
                 autoCompletionList.remove(key);
             }
         }
@@ -90,12 +94,12 @@ public class TagCellEditor extends AbstractCellEditor implements TableCellEditor
         currentTag = (TagModel) value;
 
         // no autocompletion for initial editor#setText()
-        if(autoCompletionList != null) {
+        if (autoCompletionList != null) {
             autoCompletionList.clear();
         }
         if (column == 0) {
             editor.setText(currentTag.getName());
-            TagEditorModel model = (TagEditorModel)table.getModel();
+            TagEditorModel model = (TagEditorModel) table.getModel();
             initAutoCompletionListForKeys(model, currentTag);
             return editor;
         } else if (column == 1) {
diff --git a/src/org/openstreetmap/josm/gui/tagging/TagCellRenderer.java b/src/org/openstreetmap/josm/gui/tagging/TagCellRenderer.java
index e9bafa7..14e0d93 100644
--- a/src/org/openstreetmap/josm/gui/tagging/TagCellRenderer.java
+++ b/src/org/openstreetmap/josm/gui/tagging/TagCellRenderer.java
@@ -22,11 +22,14 @@ public class TagCellRenderer extends JLabel implements TableCellRenderer  {
     private Font fontStandard = null;
     private Font fontItalic = null;
 
+    /**
+     * Constructs a new {@code TagCellRenderer}.
+     */
     public TagCellRenderer() {
         fontStandard = UIManager.getFont("Table.font");
         fontItalic = fontStandard.deriveFont(Font.ITALIC);
         setOpaque(true);
-        setBorder(new EmptyBorder(5,5,5,5));
+        setBorder(new EmptyBorder(5, 5, 5, 5));
     }
 
     /**
@@ -66,7 +69,7 @@ public class TagCellRenderer extends JLabel implements TableCellRenderer  {
     }
 
     protected TagEditorModel getModel(JTable table) {
-        return (TagEditorModel)table.getModel();
+        return (TagEditorModel) table.getModel();
     }
 
     /**
@@ -90,7 +93,7 @@ public class TagCellRenderer extends JLabel implements TableCellRenderer  {
 
         // set background color
         //
-        if (isSelected){
+        if (isSelected) {
             setBackground(UIManager.getColor("Table.selectionBackground"));
             setForeground(UIManager.getColor("Table.selectionForeground"));
         } else {
@@ -99,8 +102,8 @@ public class TagCellRenderer extends JLabel implements TableCellRenderer  {
         }
 
         switch(vColIndex) {
-        case 0: renderTagName((TagModel)value); break;
-        case 1: renderTagValue((TagModel)value); break;
+        case 0: renderTagName((TagModel) value); break;
+        case 1: renderTagValue((TagModel) value); break;
 
         default: throw new RuntimeException("unexpected index in switch statement");
         }
diff --git a/src/org/openstreetmap/josm/gui/tagging/TagEditorModel.java b/src/org/openstreetmap/josm/gui/tagging/TagEditorModel.java
index 95da045..1e003e7 100644
--- a/src/org/openstreetmap/josm/gui/tagging/TagEditorModel.java
+++ b/src/org/openstreetmap/josm/gui/tagging/TagEditorModel.java
@@ -30,12 +30,11 @@ import org.openstreetmap.josm.tools.CheckParameterUtil;
  * TagEditorModel is a table model.
  *
  */
- at SuppressWarnings("serial")
 public class TagEditorModel extends AbstractTableModel {
     public static final String PROP_DIRTY = TagEditorModel.class.getName() + ".dirty";
 
     /** the list holding the tags */
-    protected final transient List<TagModel> tags =new ArrayList<>();
+    protected final transient List<TagModel> tags = new ArrayList<>();
 
     /** indicates whether the model is dirty */
     private boolean dirty =  false;
@@ -146,10 +145,10 @@ public class TagEditorModel extends AbstractTableModel {
         if (tag == null) return;
         switch(col) {
         case 0:
-            updateTagName(tag, (String)value);
+            updateTagName(tag, (String) value);
             break;
         case 1:
-            String v = (String)value;
+            String v = (String) value;
             if (tag.getValueCount() > 1 && !v.isEmpty()) {
                 updateTagValue(tag, v);
             } else if (tag.getValueCount() <= 1) {
@@ -249,7 +248,7 @@ public class TagEditorModel extends AbstractTableModel {
      *
      * @param tagIndices a list of tag indices
      */
-    public void deleteTagNames(int [] tagIndices) {
+    public void deleteTagNames(int[] tagIndices) {
         if (tags == null)
             return;
         for (int tagIdx : tagIndices) {
@@ -267,7 +266,7 @@ public class TagEditorModel extends AbstractTableModel {
      *
      * @param tagIndices the lit of tag indices
      */
-    public void deleteTagValues(int [] tagIndices) {
+    public void deleteTagValues(int[] tagIndices) {
         if (tags == null)
             return;
         for (int tagIdx : tagIndices) {
@@ -289,7 +288,7 @@ public class TagEditorModel extends AbstractTableModel {
         if (name == null) return;
         Iterator<TagModel> it = tags.iterator();
         boolean changed = false;
-        while(it.hasNext()) {
+        while (it.hasNext()) {
             TagModel tm = it.next();
             if (tm.getName().equals(name)) {
                 changed = true;
@@ -306,7 +305,7 @@ public class TagEditorModel extends AbstractTableModel {
      *
      * @param tagIndices the list of tag indices
      */
-    public void deleteTags(int [] tagIndices) {
+    public void deleteTags(int[] tagIndices) {
         if (tags == null)
             return;
         List<TagModel> toDelete = new ArrayList<>();
@@ -351,7 +350,7 @@ public class TagEditorModel extends AbstractTableModel {
         this.tags.clear();
         for (String key : primitive.keySet()) {
             String value = primitive.get(key);
-            this.tags.add(new TagModel(key,value));
+            this.tags.add(new TagModel(key, value));
         }
         TagModel tag = new TagModel();
         sort();
@@ -365,7 +364,7 @@ public class TagEditorModel extends AbstractTableModel {
      *
      * @param tags the tags of an OSM primitive
      */
-    public void initFromTags(Map<String,String> tags) {
+    public void initFromTags(Map<String, String> tags) {
         this.tags.clear();
         for (Entry<String, String> entry : tags.entrySet()) {
             this.tags.add(new TagModel(entry.getKey(), entry.getValue()));
@@ -384,13 +383,13 @@ public class TagEditorModel extends AbstractTableModel {
      */
     public void initFromTags(TagCollection tags) {
         this.tags.clear();
-        if (tags == null){
+        if (tags == null) {
             setDirty(false);
             return;
         }
         for (String key : tags.getKeys()) {
             String value = tags.getJoinedValues(key);
-            this.tags.add(new TagModel(key,value));
+            this.tags.add(new TagModel(key, value));
         }
         sort();
         // add an empty row
@@ -406,19 +405,16 @@ public class TagEditorModel extends AbstractTableModel {
      *
      */
     public void applyToPrimitive(Tagged primitive) {
-        Map<String,String> tags = primitive.getKeys();
-        applyToTags(tags, false);
-        primitive.setKeys(tags);
+        primitive.setKeys(applyToTags(false));
     }
 
     /**
      * applies the current state of the tag editor model to a map of tags
      *
-     * @param tags the map of key/value pairs
-     *
+     * @return the map of key/value pairs
      */
-    public void applyToTags(Map<String, String> tags, boolean keepEmpty) {
-        tags.clear();
+    private Map<String, String> applyToTags(boolean keepEmpty) {
+        Map<String, String> result = new HashMap<>();
         for (TagModel tag: this.tags) {
             // tag still holds an unchanged list of different values for the same key.
             // no property change command required
@@ -431,18 +427,17 @@ public class TagEditorModel extends AbstractTableModel {
             if (!keepEmpty && (tag.getName().trim().isEmpty() || tag.getValue().trim().isEmpty())) {
                 continue;
             }
-            tags.put(tag.getName().trim(), tag.getValue().trim());
+            result.put(tag.getName().trim(), tag.getValue().trim());
         }
+        return result;
     }
 
-    public Map<String,String> getTags() {
+    public Map<String, String> getTags() {
         return getTags(false);
     }
 
-    public Map<String,String> getTags(boolean keepEmpty) {
-        Map<String,String> tags = new HashMap<>();
-        applyToTags(tags, keepEmpty);
-        return tags;
+    public Map<String, String> getTags(boolean keepEmpty) {
+        return applyToTags(keepEmpty);
     }
 
     /**
@@ -493,7 +488,7 @@ public class TagEditorModel extends AbstractTableModel {
             for (String oldkey : primitive.keySet()) {
                 if (!currentkeys.contains(oldkey)) {
                     ChangePropertyCommand deleteCommand =
-                        new ChangePropertyCommand(primitive,oldkey,null);
+                        new ChangePropertyCommand(primitive, oldkey, null);
                     commands.add(deleteCommand);
                 }
             }
@@ -545,7 +540,7 @@ public class TagEditorModel extends AbstractTableModel {
     public void updateTagName(TagModel tag, String newName) {
         String oldName = tag.getName();
         tag.setName(newName);
-        if (! newName.equals(oldName)) {
+        if (!newName.equals(oldName)) {
             setDirty(true);
         }
         SelectionStateMemento memento = new SelectionStateMemento();
@@ -563,7 +558,7 @@ public class TagEditorModel extends AbstractTableModel {
     public void updateTagValue(TagModel tag, String newValue) {
         String oldValue = tag.getValue();
         tag.setValue(newValue);
-        if (! newValue.equals(oldValue)) {
+        if (!newValue.equals(oldValue)) {
             setDirty(true);
         }
         SelectionStateMemento memento = new SelectionStateMemento();
@@ -580,7 +575,7 @@ public class TagEditorModel extends AbstractTableModel {
             return;
 
         Map<String, TagModel> modelTags = new HashMap<>();
-        for (int i=0; i<getRowCount(); i++) {
+        for (int i = 0; i < getRowCount(); i++) {
             TagModel tagModel = get(i);
             modelTags.put(tagModel.getName(), tagModel);
         }
@@ -626,10 +621,10 @@ public class TagEditorModel extends AbstractTableModel {
         public void apply() {
             rowSelectionModel.setValueIsAdjusting(true);
             colSelectionModel.setValueIsAdjusting(true);
-            if (rowMin >= 0 && rowMax >=0) {
+            if (rowMin >= 0 && rowMax >= 0) {
                 rowSelectionModel.setSelectionInterval(rowMin, rowMax);
             }
-            if (colMin >=0 && colMax >= 0) {
+            if (colMin >= 0 && colMax >= 0) {
                 colSelectionModel.setSelectionInterval(colMin, colMax);
             }
             rowSelectionModel.setValueIsAdjusting(false);
diff --git a/src/org/openstreetmap/josm/gui/tagging/TagEditorPanel.java b/src/org/openstreetmap/josm/gui/tagging/TagEditorPanel.java
index 5baa5b2..e34c0ff 100644
--- a/src/org/openstreetmap/josm/gui/tagging/TagEditorPanel.java
+++ b/src/org/openstreetmap/josm/gui/tagging/TagEditorPanel.java
@@ -35,7 +35,7 @@ public class TagEditorPanel extends JPanel {
     /** the tag editor model */
     private TagEditorModel model;
     /** the tag table */
-    private TagTable tagTable;
+    private final TagTable tagTable;
 
     private PresetListPanel presetListPanel;
     private final transient PresetHandler presetHandler;
@@ -47,7 +47,6 @@ public class TagEditorPanel extends JPanel {
      */
     protected JPanel buildTagTableEditorPanel() {
         JPanel pnl = new JPanel();
-        tagTable = new TagTable(model);
         pnl.setLayout(new BorderLayout());
         pnl.add(new JScrollPane(tagTable), BorderLayout.CENTER);
         if (presetHandler != null) {
@@ -74,17 +73,17 @@ public class TagEditorPanel extends JPanel {
         //
         JButton btn;
         pnl.add(btn = new JButton(tagTable.getAddAction()));
-        btn.setMargin(new Insets(0,0,0,0));
+        btn.setMargin(new Insets(0, 0, 0, 0));
         tagTable.addComponentNotStoppingCellEditing(btn);
 
         // delete action
         pnl.add(btn = new JButton(tagTable.getDeleteAction()));
-        btn.setMargin(new Insets(0,0,0,0));
+        btn.setMargin(new Insets(0, 0, 0, 0));
         tagTable.addComponentNotStoppingCellEditing(btn);
 
         // paste action
         pnl.add(btn = new JButton(tagTable.getPasteAction()));
-        btn.setMargin(new Insets(0,0,0,0));
+        btn.setMargin(new Insets(0, 0, 0, 0));
         tagTable.addComponentNotStoppingCellEditing(btn);
         return pnl;
     }
@@ -109,7 +108,7 @@ public class TagEditorPanel extends JPanel {
         gc.weightx = 0.0;
         gc.weighty = 1.0;
         gc.anchor = GridBagConstraints.NORTHWEST;
-        add(buttonPanel,gc);
+        add(buttonPanel, gc);
 
         // -- the panel with the editor table
         //
@@ -118,7 +117,7 @@ public class TagEditorPanel extends JPanel {
         gc.weightx = 1.0;
         gc.weighty = 1.0;
         gc.anchor = GridBagConstraints.CENTER;
-        add(tablePanel,gc);
+        add(tablePanel, gc);
 
         if (presetHandler != null) {
             model.addTableModelListener(new TableModelListener() {
@@ -141,7 +140,7 @@ public class TagEditorPanel extends JPanel {
      * internally and can be retrieved with {@link #getModel()}.
      */
     public TagEditorPanel(PresetHandler presetHandler) {
-        this(null, presetHandler);
+        this(null, presetHandler, 0);
     }
 
     /**
@@ -149,13 +148,15 @@ public class TagEditorPanel extends JPanel {
      * {@code model} is null, a new model is created.
      *
      * @param model the tag editor model
+     * @param maxCharacters maximum number of characters allowed, 0 for unlimited
      */
-    public TagEditorPanel(TagEditorModel model, PresetHandler presetHandler) {
+    public TagEditorPanel(TagEditorModel model, PresetHandler presetHandler, final int maxCharacters) {
         this.model = model;
         this.presetHandler = presetHandler;
         if (this.model == null) {
             this.model = new TagEditorModel();
         }
+        this.tagTable = new TagTable(this.model, maxCharacters);
         build();
     }
 
@@ -182,7 +183,7 @@ public class TagEditorPanel extends JPanel {
         AutoCompletionManager autocomplete = layer.data.getAutoCompletionManager();
         AutoCompletionList acList = new AutoCompletionList();
 
-        TagCellEditor editor = ((TagCellEditor) tagTable.getColumnModel().getColumn(0).getCellEditor());
+        TagCellEditor editor = (TagCellEditor) tagTable.getColumnModel().getColumn(0).getCellEditor();
         editor.setAutoCompletionManager(autocomplete);
         editor.setAutoCompletionList(acList);
         editor = ((TagCellEditor) tagTable.getColumnModel().getColumn(1).getCellEditor());
diff --git a/src/org/openstreetmap/josm/gui/tagging/TagModel.java b/src/org/openstreetmap/josm/gui/tagging/TagModel.java
index ac15c1c..eb342a4 100644
--- a/src/org/openstreetmap/josm/gui/tagging/TagModel.java
+++ b/src/org/openstreetmap/josm/gui/tagging/TagModel.java
@@ -54,7 +54,7 @@ public class TagModel {
     /**
      * @return the tag name
      */
-    public String getName(){
+    public String getName() {
         return name;
     }
 
@@ -97,7 +97,7 @@ public class TagModel {
      * removes a value from the list of values. Converts value to "" if null
      * @param value the value
      */
-    public void removeValue(String value){
+    public void removeValue(String value) {
         value = (value == null) ? "" : value;
         values.remove(value);
     }
@@ -113,10 +113,10 @@ public class TagModel {
             return values.get(0);
         } else {
             StringBuilder sb = new StringBuilder();
-            for (int i =0; i < values.size(); i++) {
+            for (int i = 0; i < values.size(); i++) {
                 sb.append(values.get(i));
                 if (i + 1 < values.size()) {
-                    sb.append(";");
+                    sb.append(';');
                 }
             }
             return sb.toString();
diff --git a/src/org/openstreetmap/josm/gui/tagging/TagTable.java b/src/org/openstreetmap/josm/gui/tagging/TagTable.java
index b9eefdf..dd30106 100644
--- a/src/org/openstreetmap/josm/gui/tagging/TagTable.java
+++ b/src/org/openstreetmap/josm/gui/tagging/TagTable.java
@@ -117,7 +117,7 @@ public class TagTable extends JTable  {
                 getCellEditor().stopCellEditing();
             }
 
-            if (row==-1 && col==-1) {
+            if (row == -1 && col == -1) {
                 requestFocusInCell(0, 0);
                 return;
             }
@@ -125,24 +125,23 @@ public class TagTable extends JTable  {
             if (col == 0) {
                 col++;
             } else if (col == 1 && row < getRowCount()-1) {
-                col=0;
+                col = 0;
                 row++;
-            } else if (col == 1 && row == getRowCount()-1){
-                // we are at the end. Append an empty row and move the focus
-                // to its second column
-                String key = ((TagModel)model.getValueAt(row, 0)).getName();
+            } else if (col == 1 && row == getRowCount()-1) {
+                // we are at the end. Append an empty row and move the focus to its second column
+                String key = ((TagModel) model.getValueAt(row, 0)).getName();
                 if (!key.trim().isEmpty()) {
                     model.appendNewTag();
-                    col=0;
+                    col = 0;
                     row++;
                 } else {
                     clearSelection();
-                    if (nextFocusComponent!=null)
+                    if (nextFocusComponent != null)
                         nextFocusComponent.requestFocusInWindow();
                     return;
                 }
             }
-            requestFocusInCell(row,col);
+            requestFocusInCell(row, col);
         }
     }
 
@@ -169,7 +168,7 @@ public class TagTable extends JTable  {
                 col = 1;
                 row--;
             }
-            requestFocusInCell(row,col);
+            requestFocusInCell(row, col);
         }
     }
 
@@ -299,7 +298,7 @@ public class TagTable extends JTable  {
                 getCellEditor().stopCellEditing();
             }
             final int rowIdx = model.getRowCount()-1;
-            String key = ((TagModel)model.getValueAt(rowIdx, 0)).getName();
+            String key = ((TagModel) model.getValueAt(rowIdx, 0)).getName();
             if (!key.trim().isEmpty()) {
                 model.appendNewTag();
             }
@@ -321,7 +320,7 @@ public class TagTable extends JTable  {
      */
     class PasteAction extends RunnableAction implements PropertyChangeListener{
         public PasteAction() {
-            putValue(SMALL_ICON, ImageProvider.get("","pastetags"));
+            putValue(SMALL_ICON, ImageProvider.get("", "pastetags"));
             putValue(SHORT_DESCRIPTION, tr("Paste tags from buffer"));
             TagTable.this.addPropertyChangeListener(this);
             updateEnabledState();
@@ -335,20 +334,21 @@ public class TagTable extends JTable  {
             String buf = Utils.getClipboardContent();
             if (buf == null || buf.isEmpty() || buf.matches(CopyAction.CLIPBOARD_REGEXP)) {
                 List<PrimitiveData> directlyAdded = Main.pasteBuffer.getDirectlyAdded();
-                if (directlyAdded==null || directlyAdded.isEmpty()) return;
-                PasteTagsAction.TagPaster tagPaster = new PasteTagsAction.TagPaster(directlyAdded, Collections.<OsmPrimitive>singletonList(relation));
+                if (directlyAdded == null || directlyAdded.isEmpty()) return;
+                PasteTagsAction.TagPaster tagPaster = new PasteTagsAction.TagPaster(directlyAdded,
+                        Collections.<OsmPrimitive>singletonList(relation));
                 model.updateTags(tagPaster.execute());
             } else {
                 // Paste tags from arbitrary text
                  Map<String, String> tags = TextTagParser.readTagsFromText(buf);
-                 if (tags==null || tags.isEmpty()) {
+                 if (tags == null || tags.isEmpty()) {
                     TextTagParser.showBadBufferMessage(ht("/Action/PasteTags"));
                  } else if (TextTagParser.validateTags(tags)) {
                      List<Tag> newTags = new ArrayList<>();
                      for (Map.Entry<String, String> entry: tags.entrySet()) {
                         String k = entry.getKey();
                         String v = entry.getValue();
-                        newTags.add(new Tag(k,v));
+                        newTags.add(new Tag(k, v));
                      }
                      model.updateTags(newTags);
                  }
@@ -392,8 +392,9 @@ public class TagTable extends JTable  {
 
     /**
      * initialize the table
+     * @param maxCharacters maximum number of characters allowed for keys and values, 0 for unlimited
      */
-    protected final void init() {
+    protected final void init(final int maxCharacters) {
         setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
         setRowSelectionAllowed(true);
         setColumnSelectionAllowed(true);
@@ -425,7 +426,7 @@ public class TagTable extends JTable  {
 
         // create the table cell editor and set it to key and value columns
         //
-        TagCellEditor tmpEditor = new TagCellEditor();
+        TagCellEditor tmpEditor = new TagCellEditor(maxCharacters);
         setRowHeight(tmpEditor.getEditor().getPreferredSize().height);
         setTagCellEditor(tmpEditor);
     }
@@ -434,17 +435,18 @@ public class TagTable extends JTable  {
      * Creates a new tag table
      *
      * @param model the tag editor model
+     * @param maxCharacters maximum number of characters allowed for keys and values, 0 for unlimited
      */
-    public TagTable(TagEditorModel model) {
+    public TagTable(TagEditorModel model, final int maxCharacters) {
         super(model, new TagTableColumnModel(model.getColumnSelectionModel()), model.getRowSelectionModel());
         this.model = model;
-        init();
+        init(maxCharacters);
     }
 
     @Override
-    public Dimension getPreferredSize(){
+    public Dimension getPreferredSize() {
         Container c = getParent();
-        while(c != null && ! (c instanceof JViewport)) {
+        while (c != null && !(c instanceof JViewport)) {
             c = c.getParent();
         }
         if (c != null) {
@@ -473,7 +475,8 @@ public class TagTable extends JTable  {
     }
 
     /**
-     * @param autoCompletionList
+     * Sets the editor autocompletion list
+     * @param autoCompletionList autocompletion list
      */
     public void setAutoCompletionList(AutoCompletionList autoCompletionList) {
         if (autoCompletionList == null)
@@ -519,7 +522,7 @@ public class TagTable extends JTable  {
     /**
      * Inject a tag cell editor in the tag table
      *
-     * @param editor
+     * @param editor tag cell editor
      */
     public void setTagCellEditor(TagCellEditor editor) {
         if (isEditing()) {
@@ -534,15 +537,15 @@ public class TagTable extends JTable  {
         changeSelection(row, col, false, false);
         editCellAt(row, col);
         Component c = getEditorComponent();
-        if (c!=null) {
+        if (c != null) {
             c.requestFocusInWindow();
-            if ( c instanceof JTextComponent ) {
-                 ( (JTextComponent)c ).selectAll();
+            if (c instanceof JTextComponent) {
+                 ((JTextComponent) c).selectAll();
             }
         }
         // there was a bug here - on older 1.6 Java versions Tab was not working
         // after such activation. In 1.7 it works OK,
-        // previous solution of usint awt.Robot was resetting mouse speed on Windows
+        // previous solution of using awt.Robot was resetting mouse speed on Windows
     }
 
     public void addComponentNotStoppingCellEditing(Component component) {
@@ -556,7 +559,7 @@ public class TagTable extends JTable  {
     }
 
     @Override
-    public boolean editCellAt(int row, int column, EventObject e){
+    public boolean editCellAt(int row, int column, EventObject e) {
 
         // a snipped copied from the Java 1.5 implementation of JTable
         //
@@ -579,10 +582,9 @@ public class TagTable extends JTable  {
         }
 
         // delegate to the default implementation
-        return super.editCellAt(row, column,e);
+        return super.editCellAt(row, column, e);
     }
 
-
     @Override
     public void removeEditor() {
         // make sure we unregister our custom implementation of CellEditorRemover
diff --git a/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java b/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java
index 1139730..7ef09d6 100644
--- a/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java
+++ b/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java
@@ -107,14 +107,14 @@ public class TaggingPreset extends AbstractAction implements MapView.LayerChange
     public void setDisplayName() {
         putValue(Action.NAME, getName());
         putValue("toolbar", "tagging_" + getRawName());
-        putValue(OPTIONAL_TOOLTIP_TEXT, (group != null ?
+        putValue(OPTIONAL_TOOLTIP_TEXT, group != null ?
                 tr("Use preset ''{0}'' of group ''{1}''", getLocaleName(), group.getName()) :
-                    tr("Use preset ''{0}''", getLocaleName())));
+                    tr("Use preset ''{0}''", getLocaleName()));
     }
 
     public String getLocaleName() {
-        if(locale_name == null) {
-            if(name_context != null) {
+        if (locale_name == null) {
+            if (name_context != null) {
                 locale_name = trc(name_context, TaggingPresetItems.fixPresetString(name));
             } else {
                 locale_name = tr(TaggingPresetItems.fixPresetString(name));
@@ -123,9 +123,16 @@ public class TaggingPreset extends AbstractAction implements MapView.LayerChange
         return locale_name;
     }
 
+    /**
+     * Returns the translated name of this preset, prefixed with the group names it belongs to.
+     */
     public String getName() {
         return group != null ? group.getName() + "/" + getLocaleName() : getLocaleName();
     }
+
+    /**
+     * Returns the non translated name of this preset, prefixed with the (non translated) group names it belongs to.
+     */
     public String getRawName() {
         return group != null ? group.getRawName() + "/" + name : name;
     }
@@ -145,10 +152,13 @@ public class TaggingPreset extends AbstractAction implements MapView.LayerChange
 
     /**
      * Called from the XML parser to set the icon.
-     * This task is performed in the background in order to speedup startup.
+     * The loading task is performed in the background in order to speedup startup.
      */
     public void setIcon(final String iconName) {
         this.iconName = iconName;
+        if (!TaggingPresetReader.isLoadIcons()) {
+            return;
+        }
         File arch = TaggingPresetReader.getZipIcons();
         final Collection<String> s = Main.pref.getCollection("taggingpreset.icon.sources", null);
         ImageProvider imgProv = new ImageProvider(iconName);
@@ -200,6 +210,7 @@ public class TaggingPreset extends AbstractAction implements MapView.LayerChange
 
     private static class PresetPanel extends JPanel {
         private boolean hasElements = false;
+
         PresetPanel() {
             super(new GridBagLayout());
         }
@@ -211,7 +222,7 @@ public class TaggingPreset extends AbstractAction implements MapView.LayerChange
         PresetPanel p = new PresetPanel();
         List<Link> l = new LinkedList<>();
         List<PresetLink> presetLink = new LinkedList<>();
-        if (types != null){
+        if (types != null) {
             JPanel pp = new JPanel();
             for (TaggingPresetType t : types) {
                 JLabel la = new JLabel(ImageProvider.get(t.getIconName()));
@@ -259,7 +270,7 @@ public class TaggingPreset extends AbstractAction implements MapView.LayerChange
         // "Add toolbar button"
         JToggleButton tb = new JToggleButton(new ToolbarButtonAction());
         tb.setFocusable(false);
-        p.add(tb, GBC.std(0,0).anchor(GBC.LINE_END));
+        p.add(tb, GBC.std(0, 0).anchor(GBC.LINE_END));
         return p;
     }
 
@@ -275,7 +286,7 @@ public class TaggingPreset extends AbstractAction implements MapView.LayerChange
         if (roles != null && osm != null) {
             for (Role i : roles.roles) {
                 if (i.memberExpression != null && i.memberExpression.match(osm)
-                        && (i.types == null || i.types.isEmpty() || i.types.contains(TaggingPresetType.forPrimitive(osm)) )) {
+                        && (i.types == null || i.types.isEmpty() || i.types.contains(TaggingPresetType.forPrimitive(osm)))) {
                     return i.key;
                 }
             }
@@ -310,7 +321,7 @@ public class TaggingPreset extends AbstractAction implements MapView.LayerChange
         } else if (answer == DIALOG_ANSWER_NEW_RELATION) {
             final Relation r = new Relation();
             final Collection<RelationMember> members = new HashSet<>();
-            for(Tag t : getChangedTags()) {
+            for (Tag t : getChangedTags()) {
                 r.put(t.getKey(), t.getValue());
             }
             for (OsmPrimitive osm : ds.getSelected()) {
@@ -332,13 +343,13 @@ public class TaggingPreset extends AbstractAction implements MapView.LayerChange
     private static class PresetDialog extends ExtendedDialog {
         public PresetDialog(Component content, String title, ImageIcon icon, boolean disableApply, boolean showNewRelation) {
             super(Main.parent, title,
-                    showNewRelation?
-                            new String[] { tr("Apply Preset"), tr("New relation"), tr("Cancel") }:
-                                new String[] { tr("Apply Preset"), tr("Cancel") },
+                    showNewRelation ?
+                            new String[] {tr("Apply Preset"), tr("New relation"), tr("Cancel")} :
+                                new String[] {tr("Apply Preset"), tr("Cancel")},
                                 true);
             if (icon != null)
                 setIconImage(icon.getImage());
-            contentInsets = new Insets(10,5,0,5);
+            contentInsets = new Insets(10, 5, 0, 5);
             if (showNewRelation) {
                 setButtonIcons(new String[] {"ok", "dialogs/addrelation", "cancel" });
             } else {
@@ -367,8 +378,8 @@ public class TaggingPreset extends AbstractAction implements MapView.LayerChange
         int answer = 1;
         if (p.getComponentCount() != 0 && (sel.isEmpty() || p.hasElements)) {
             String title = trn("Change {0} object", "Change {0} objects", sel.size(), sel.size());
-            if(sel.isEmpty()) {
-                if(originalSelectionEmpty) {
+            if (sel.isEmpty()) {
+                if (originalSelectionEmpty) {
                     title = tr("Nothing selected!");
                 } else {
                     title = tr("Selection unsuitable!");
@@ -452,7 +463,7 @@ public class TaggingPreset extends AbstractAction implements MapView.LayerChange
 
     @Override
     public String toString() {
-        return (types == null?"":types) + " " + name;
+        return (types == null ? "" : types) + " " + name;
     }
 
     public boolean typeMatches(Collection<TaggingPresetType> t) {
@@ -481,7 +492,8 @@ public class TaggingPreset extends AbstractAction implements MapView.LayerChange
         return atLeastOnePositiveMatch;
     }
 
-    public static Collection<TaggingPreset> getMatchingPresets(final Collection<TaggingPresetType> t, final Map<String, String> tags, final boolean onlyShowable) {
+    public static Collection<TaggingPreset> getMatchingPresets(final Collection<TaggingPresetType> t,
+            final Map<String, String> tags, final boolean onlyShowable) {
         return Utils.filter(TaggingPresets.getTaggingPresets(), new Predicate<TaggingPreset>() {
             @Override
             public boolean evaluate(TaggingPreset object) {
diff --git a/src/org/openstreetmap/josm/gui/tagging/TaggingPresetItems.java b/src/org/openstreetmap/josm/gui/tagging/TaggingPresetItems.java
index 25fc90a..96a4149 100644
--- a/src/org/openstreetmap/josm/gui/tagging/TaggingPresetItems.java
+++ b/src/org/openstreetmap/josm/gui/tagging/TaggingPresetItems.java
@@ -9,6 +9,7 @@ import java.awt.Dimension;
 import java.awt.Font;
 import java.awt.GridBagLayout;
 import java.awt.GridLayout;
+import java.awt.Insets;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.MouseAdapter;
@@ -33,6 +34,8 @@ import java.util.Set;
 import java.util.SortedSet;
 import java.util.TreeSet;
 
+import javax.swing.AbstractButton;
+import javax.swing.BorderFactory;
 import javax.swing.ButtonGroup;
 import javax.swing.Icon;
 import javax.swing.ImageIcon;
@@ -61,6 +64,7 @@ import org.openstreetmap.josm.gui.widgets.JosmComboBox;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
 import org.openstreetmap.josm.gui.widgets.QuadStateCheckBox;
 import org.openstreetmap.josm.gui.widgets.UrlLabel;
+import org.openstreetmap.josm.tools.AlphanumComparator;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Predicate;
@@ -82,14 +86,14 @@ public final class TaggingPresetItems {
     private static final BooleanProperty PROP_FILL_DEFAULT = new BooleanProperty("taggingpreset.fill-default-for-tagged-primitives", false);
 
     // cache the parsing of types using a LRU cache (http://java-planet.blogspot.com/2005/08/how-to-set-up-simple-lru-cache-using.html)
-    private static final Map<String,Set<TaggingPresetType>> TYPE_CACHE = new LinkedHashMap<>(16, 1.1f, true);
+    private static final Map<String, Set<TaggingPresetType>> TYPE_CACHE = new LinkedHashMap<>(16, 1.1f, true);
 
     /**
      * Last value of each key used in presets, used for prefilling corresponding fields
      */
-    private static final Map<String,String> LAST_VALUES = new HashMap<>();
+    private static final Map<String, String> LAST_VALUES = new HashMap<>();
 
-    public static class PresetListEntry {
+    public static class PresetListEntry implements Comparable<PresetListEntry> {
         public String value;
         /** The context used for translating {@link #value} */
         public String value_context;
@@ -117,13 +121,13 @@ public final class TaggingPresetItems {
                 return " ";
 
             final StringBuilder res = new StringBuilder("<b>");
-            res.append(getDisplayValue(true).replaceAll("<", "<").replaceAll(">", ">"));
-            res.append("</b>");
+            res.append(getDisplayValue(true).replaceAll("<", "<").replaceAll(">", ">"))
+               .append("</b>");
             if (getShortDescription(true) != null) {
                 // wrap in table to restrict the text width
-                res.append("<div style=\"width:300px; padding:0 0 5px 5px\">");
-                res.append(getShortDescription(true));
-                res.append("</div>");
+                res.append("<div style=\"width:300px; padding:0 0 5px 5px\">")
+                   .append(getShortDescription(true))
+                   .append("</div>");
             }
             return res.toString();
         }
@@ -137,7 +141,7 @@ public final class TaggingPresetItems {
         }
 
         /**
-         * Construxts a new {@code PresetListEntry}, uninitialized.
+         * Constructs a new {@code PresetListEntry}, uninitialized.
          */
         public PresetListEntry() {
         }
@@ -165,6 +169,11 @@ public final class TaggingPresetItems {
                 return DIFFERENT;
             return getDisplayValue(true).replaceAll("<.*>", ""); // remove additional markup, e.g. <br>
         }
+
+        @Override
+        public int compareTo(PresetListEntry o) {
+            return AlphanumComparator.getInstance().compare(this.getDisplayValue(true), o.getDisplayValue(true));
+        }
     }
 
     public static class Role {
@@ -186,9 +195,9 @@ public final class TaggingPresetItems {
         }
 
         public void setRequisite(String str) throws SAXException {
-            if("required".equals(str)) {
+            if ("required".equals(str)) {
                 required = true;
-            } else if(!"optional".equals(str))
+            } else if (!"optional".equals(str))
                 throw new SAXException(tr("Unknown requisite: {0}", str));
         }
 
@@ -222,9 +231,9 @@ public final class TaggingPresetItems {
             String cstring;
             if (count > 0 && !required) {
                 cstring = "0,"+count;
-            } else if(count > 0) {
+            } else if (count > 0) {
                 cstring = String.valueOf(count);
-            } else if(!required) {
+            } else if (!required) {
                 cstring = "0-...";
             } else {
                 cstring = "1-...";
@@ -232,12 +241,12 @@ public final class TaggingPresetItems {
             if (locale_text == null) {
                 locale_text = getLocaleText(text, text_context, null);
             }
-            p.add(new JLabel(locale_text+":"), GBC.std().insets(0,0,10,0));
-            p.add(new JLabel(key), GBC.std().insets(0,0,10,0));
-            p.add(new JLabel(cstring), types == null ? GBC.eol() : GBC.std().insets(0,0,10,0));
+            p.add(new JLabel(locale_text+":"), GBC.std().insets(0, 0, 10, 0));
+            p.add(new JLabel(key), GBC.std().insets(0, 0, 10, 0));
+            p.add(new JLabel(cstring), types == null ? GBC.eol() : GBC.std().insets(0, 0, 10, 0));
             if (types != null) {
                 JPanel pp = new JPanel();
-                for(TaggingPresetType t : types) {
+                for (TaggingPresetType t : types) {
                     pp.add(new JLabel(ImageProvider.get(t.getIconName())));
                 }
                 p.add(pp, GBC.eol());
@@ -264,7 +273,7 @@ public final class TaggingPresetItems {
 
         private final String value;
 
-        private MatchType(String value) {
+        MatchType(String value) {
             this.value = value;
         }
 
@@ -543,6 +552,7 @@ public final class TaggingPresetItems {
         public String match = getDefaultMatch().getValue();
 
         public abstract MatchType getDefaultMatch();
+
         public abstract Collection<String> getValues();
 
         @Override
@@ -551,11 +561,11 @@ public final class TaggingPresetItems {
             case NONE:
                 return null;
             case KEY:
-                return tags.containsKey(key) ? true : null;
+                return tags.containsKey(key) ? Boolean.TRUE : null;
             case KEY_REQUIRED:
                 return tags.containsKey(key);
             case KEY_VALUE:
-                return tags.containsKey(key) && getValues().contains(tags.get(key)) ? true : null;
+                return tags.containsKey(key) && getValues().contains(tags.get(key)) ? Boolean.TRUE : null;
             case KEY_VALUE_REQUIRED:
                 return tags.containsKey(key) && getValues().contains(tags.get(key));
             default:
@@ -640,15 +650,17 @@ public final class TaggingPresetItems {
             if (length != null && !length.isEmpty()) {
                 textField.setMaxChars(Integer.valueOf(length));
             }
-            if (usage.unused()){
+            if (usage.unused()) {
                 if (auto_increment_selected != 0  && auto_increment != null) {
                     try {
                         textField.setText(Integer.toString(Integer.parseInt(LAST_VALUES.get(key)) + auto_increment_selected));
                     } catch (NumberFormatException ex) {
                         // Ignore - cannot auto-increment if last was non-numeric
+                        if (Main.isTraceEnabled()) {
+                            Main.trace(ex.getMessage());
+                        }
                     }
-                }
-                else if (!usage.hadKeys() || PROP_FILL_DEFAULT.get() || "force".equals(use_last_as_default)) {
+                } else if (!usage.hadKeys() || PROP_FILL_DEFAULT.get() || "force".equals(use_last_as_default)) {
                     // selected osm primitives are untagged or filling default values feature is enabled
                     if (!"false".equals(use_last_as_default) && LAST_VALUES.containsKey(key) && !presetInitiallyMatches) {
                         textField.setText(LAST_VALUES.get(key));
@@ -672,7 +684,7 @@ public final class TaggingPresetItems {
                 comboBox.setEditable(true);
                 comboBox.setEditor(textField);
                 comboBox.getEditor().setItem(DIFFERENT);
-                value=comboBox;
+                value = comboBox;
                 originalValue = DIFFERENT;
             }
             if (locale_text == null) {
@@ -693,8 +705,9 @@ public final class TaggingPresetItems {
                 for (final String ai : auto_increment.split(",")) {
                     JToggleButton aibutton = new JToggleButton(ai);
                     aibutton.setToolTipText(tr("Select auto-increment of {0} for this field", ai));
-                    aibutton.setMargin(new java.awt.Insets(0,0,0,0));
+                    aibutton.setMargin(new java.awt.Insets(0, 0, 0, 0));
                     aibutton.setFocusable(false);
+                    saveHorizontalSpace(aibutton);
                     bg.add(aibutton);
                     try {
                         // TODO there must be a better way to parse a number like "+3" than this.
@@ -722,7 +735,7 @@ public final class TaggingPresetItems {
                 // of the X remaining selected
                 JButton releasebutton = new JButton("X");
                 releasebutton.setToolTipText(tr("Cancel auto-increment for this field"));
-                releasebutton.setMargin(new java.awt.Insets(0,0,0,0));
+                releasebutton.setMargin(new java.awt.Insets(0, 0, 0, 0));
                 releasebutton.setFocusable(false);
                 releasebutton.addActionListener(new ActionListener() {
                     @Override
@@ -731,21 +744,31 @@ public final class TaggingPresetItems {
                         clearbutton.setSelected(true);
                     }
                 });
+                saveHorizontalSpace(releasebutton);
                 pnl.add(releasebutton, GBC.eol());
                 value = pnl;
             }
-            p.add(new JLabel(locale_text+":"), GBC.std().insets(0,0,10,0));
+            p.add(new JLabel(locale_text+":"), GBC.std().insets(0, 0, 10, 0));
             p.add(value, GBC.eol().fill(GBC.HORIZONTAL));
             return true;
         }
 
+        private static void saveHorizontalSpace(AbstractButton button) {
+            Insets insets = button.getBorder().getBorderInsets(button);
+            // Ensure the current look&feel does not waste horizontal space (as seen in Nimbus & Aqua)
+            if (insets != null && insets.left+insets.right > insets.top+insets.bottom) {
+                int min = Math.min(insets.top, insets.bottom);
+                button.setBorder(BorderFactory.createEmptyBorder(insets.top, min, insets.bottom, min));
+            }
+        }
+
         private static String getValue(Component comp) {
             if (comp instanceof JosmComboBox) {
                 return ((JosmComboBox<?>) comp).getEditor().getItem().toString();
             } else if (comp instanceof JosmTextField) {
                 return ((JosmTextField) comp).getText();
             } else if (comp instanceof JPanel) {
-                return getValue(((JPanel)comp).getComponent(0));
+                return getValue(((JPanel) comp).getComponent(0));
             } else {
                 return null;
             }
@@ -766,7 +789,7 @@ public final class TaggingPresetItems {
             if (!"false".equals(use_last_as_default) || auto_increment != null) {
                 LAST_VALUES.put(key, v);
             }
-            if (v.equals(originalValue) || (originalValue == null && v.length() == 0))
+            if (v.equals(originalValue) || (originalValue == null && v.isEmpty()))
                 return;
 
             changedTags.add(new Tag(key, v));
@@ -829,6 +852,16 @@ public final class TaggingPresetItems {
         }
 
         @Override
+        Boolean matches(Map<String, String> tags) {
+            for (Check check : checks) {
+                if (Boolean.TRUE.equals(check.matches(tags))) {
+                    return true;
+                }
+            }
+            return null;
+        }
+
+        @Override
         public String toString() {
             return "CheckGroup [columns=" + columns + "]";
         }
@@ -869,10 +902,11 @@ public final class TaggingPresetItems {
             if (usage.values.size() < 2 && (oneValue == null || value_on.equals(oneValue) || value_off.equals(oneValue))) {
                 if (def && !PROP_FILL_DEFAULT.get()) {
                     // default is set and filling default values feature is disabled - check if all primitives are untagged
-                    for (OsmPrimitive s : sel)
+                    for (OsmPrimitive s : sel) {
                         if (s.hasKeys()) {
                             def = false;
                         }
+                    }
                 }
 
                 // all selected objects share the same value which is either true or false or unset,
@@ -919,7 +953,9 @@ public final class TaggingPresetItems {
         }
 
         @Override
-        boolean requestFocusInWindow() {return check.requestFocusInWindow();}
+        boolean requestFocusInWindow() {
+            return check.requestFocusInWindow();
+        }
 
         @Override
         public MatchType getDefaultMatch() {
@@ -974,6 +1010,7 @@ public final class TaggingPresetItems {
         protected Object originalValue;
 
         protected abstract Object getSelectedItem();
+
         protected abstract void addToPanelAnchor(JPanel p, String def, boolean presetInitiallyMatches);
 
         protected char getDelChar() {
@@ -1048,7 +1085,7 @@ public final class TaggingPresetItems {
             initialized = true;
         }
 
-        private String[] initListEntriesFromAttributes() {
+        private void initListEntriesFromAttributes() {
             char delChar = getDelChar();
 
             String[] value_array = null;
@@ -1085,30 +1122,40 @@ public final class TaggingPresetItems {
             String[] short_descriptions_array = descr == null ? null : splitEscaped(delChar, descr);
 
             if (display_array.length != value_array.length) {
-                Main.error(tr("Broken tagging preset \"{0}-{1}\" - number of items in ''display_values'' must be the same as in ''values''", key, text));
+                Main.error(tr("Broken tagging preset \"{0}-{1}\" - number of items in ''display_values'' must be the same as in ''values''",
+                                key, text));
                 display_array = value_array;
             }
 
             if (short_descriptions_array != null && short_descriptions_array.length != value_array.length) {
-                Main.error(tr("Broken tagging preset \"{0}-{1}\" - number of items in ''short_descriptions'' must be the same as in ''values''", key, text));
+                Main.error(tr("Broken tagging preset \"{0}-{1}\" - number of items in ''short_descriptions'' must be the same as in ''values''",
+                                key, text));
                 short_descriptions_array = null;
             }
 
+            final List<PresetListEntry> entries = new ArrayList<>(value_array.length);
             for (int i = 0; i < value_array.length; i++) {
                 final PresetListEntry e = new PresetListEntry(value_array[i]);
                 e.locale_display_value = locale_display_values != null
                         ? display_array[i]
-                                : trc(values_context, fixPresetString(display_array[i]));
-                        if (short_descriptions_array != null) {
-                            e.locale_short_description = locale_short_descriptions != null
-                                    ? short_descriptions_array[i]
-                                            : tr(fixPresetString(short_descriptions_array[i]));
-                        }
-                        lhm.put(value_array[i], e);
-                        display_array[i] = e.getDisplayValue(true);
+                        : trc(values_context, fixPresetString(display_array[i]));
+                if (short_descriptions_array != null) {
+                    e.locale_short_description = locale_short_descriptions != null
+                            ? short_descriptions_array[i]
+                            : tr(fixPresetString(short_descriptions_array[i]));
+                }
+
+                entries.add(e);
+            }
+
+            if (Main.pref.getBoolean("taggingpreset.sortvalues", true)) {
+                Collections.sort(entries);
+            }
+
+            for (PresetListEntry i : entries) {
+                lhm.put(i.value, i);
             }
 
-            return display_array;
         }
 
         protected String getDisplayIfNull() {
@@ -1142,7 +1189,7 @@ public final class TaggingPresetItems {
 
             // no change if same as before
             if (originalValue == null) {
-                if (value.length() == 0)
+                if (value.isEmpty())
                     return;
             } else if (value.equals(originalValue.toString()))
                 return;
@@ -1170,15 +1217,11 @@ public final class TaggingPresetItems {
 
         private static final ListCellRenderer<PresetListEntry> RENDERER = new ListCellRenderer<PresetListEntry>() {
 
-            private JLabel lbl = new JLabel();
+            private final JLabel lbl = new JLabel();
 
             @Override
-            public Component getListCellRendererComponent(
-                    JList<? extends PresetListEntry> list,
-                    PresetListEntry item,
-                    int index,
-                    boolean isSelected,
-                    boolean cellHasFocus) {
+            public Component getListCellRendererComponent(JList<? extends PresetListEntry> list, PresetListEntry item, int index,
+                    boolean isSelected, boolean cellHasFocus) {
 
                 // Only return cached size, item is not shown
                 if (!list.isShowing() && item.prefferedWidth != -1 && item.prefferedHeight != -1) {
@@ -1192,7 +1235,6 @@ public final class TaggingPresetItems {
 
                 lbl.setPreferredSize(null);
 
-
                 if (isSelected) {
                     lbl.setBackground(list.getSelectionBackground());
                     lbl.setForeground(list.getSelectionForeground());
@@ -1361,7 +1403,7 @@ public final class TaggingPresetItems {
             // modify preferred height of scroll pane to match that row count.
             if (rows != null) {
                 double height = renderer.getListCellRendererComponent(list,
-                        new PresetListEntry("x"), 0, false, false).getPreferredSize().getHeight() * Integer.valueOf(rows);
+                        new PresetListEntry("x"), 0, false, false).getPreferredSize().getHeight() * Integer.parseInt(rows);
                 sp.setPreferredSize(new Dimension((int) sp.getPreferredSize().getWidth(), (int) height));
             }
             p.add(sp, GBC.eol().fill(GBC.HORIZONTAL));
@@ -1387,6 +1429,7 @@ public final class TaggingPresetItems {
     */
     private static class ConcatenatingJList extends JList<PresetListEntry> {
         private String delimiter;
+
         public ConcatenatingJList(String del, PresetListEntry[] o) {
             super(o);
             delimiter = del;
@@ -1404,7 +1447,7 @@ public final class TaggingPresetItems {
                 for (int i = 0; i < lm.getSize(); i++) {
                     final String value = lm.getElementAt(i).value;
                     if (parts.contains(value)) {
-                        intParts[j++]=i;
+                        intParts[j++] = i;
                         parts.remove(value);
                     }
                 }
@@ -1420,8 +1463,8 @@ public final class TaggingPresetItems {
             ListModel<PresetListEntry> lm = getModel();
             int[] si = getSelectedIndices();
             StringBuilder builder = new StringBuilder();
-            for (int i=0; i<si.length; i++) {
-                if (i>0) {
+            for (int i = 0; i < si.length; i++) {
+                if (i > 0) {
                     builder.append(delimiter);
                 }
                 builder.append(lm.getElementAt(si[i]).value);
@@ -1431,6 +1474,9 @@ public final class TaggingPresetItems {
     }
 
     public static Set<TaggingPresetType> getType(String types) throws SAXException {
+        if (types == null || types.isEmpty()) {
+            throw new SAXException(tr("Unknown type: {0}", types));
+        }
         if (TYPE_CACHE.containsKey(types))
             return TYPE_CACHE.get(types);
         Set<TaggingPresetType> result = EnumSet.noneOf(TaggingPresetType.class);
@@ -1447,7 +1493,7 @@ public final class TaggingPresetItems {
     }
 
     static String fixPresetString(String s) {
-        return s == null ? s : s.replaceAll("'","''");
+        return s == null ? s : s.replaceAll("'", "''");
     }
 
     private static String getLocaleText(String text, String text_context, String defaultText) {
@@ -1473,7 +1519,7 @@ public final class TaggingPresetItems {
         List<String> result = new ArrayList<>();
         boolean backslash = false;
         StringBuilder item = new StringBuilder();
-        for (int i=0; i<s.length(); i++) {
+        for (int i = 0; i < s.length(); i++) {
             char ch = s.charAt(i);
             if (backslash) {
                 item.append(ch);
@@ -1503,7 +1549,7 @@ public final class TaggingPresetItems {
             } else {
                 returnValue.hadEmpty = true;
             }
-            if(s.hasKeys()) {
+            if (s.hasKeys()) {
                 returnValue.hadKeys = true;
             }
         }
@@ -1536,7 +1582,7 @@ public final class TaggingPresetItems {
         if (str == null || str.isEmpty())
             return null;
         try {
-            return Integer.parseInt(str);
+            return Integer.valueOf(str);
         } catch (Exception e) {
             if (Main.isTraceEnabled()) {
                 Main.trace(e.getMessage());
diff --git a/src/org/openstreetmap/josm/gui/tagging/TaggingPresetListener.java b/src/org/openstreetmap/josm/gui/tagging/TaggingPresetListener.java
index 711713e..ae7bbc0 100644
--- a/src/org/openstreetmap/josm/gui/tagging/TaggingPresetListener.java
+++ b/src/org/openstreetmap/josm/gui/tagging/TaggingPresetListener.java
@@ -10,5 +10,5 @@ public interface TaggingPresetListener {
     /**
      * Called after list of tagging presets has been modified.
      */
-    public void taggingPresetsModified();
+    void taggingPresetsModified();
 }
diff --git a/src/org/openstreetmap/josm/gui/tagging/TaggingPresetMenu.java b/src/org/openstreetmap/josm/gui/tagging/TaggingPresetMenu.java
index 3913ab4..3e6b204 100644
--- a/src/org/openstreetmap/josm/gui/tagging/TaggingPresetMenu.java
+++ b/src/org/openstreetmap/josm/gui/tagging/TaggingPresetMenu.java
@@ -12,6 +12,7 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
+import java.util.Objects;
 
 import javax.swing.Action;
 import javax.swing.JMenu;
@@ -37,19 +38,35 @@ public class TaggingPresetMenu extends TaggingPreset {
         }
     }
 
+    /**
+     * {@code TaggingPresetMenu} are considered equivalent if (and only if) their {@link #getRawName()} match.
+     */
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        TaggingPresetMenu that = (TaggingPresetMenu) o;
+        return Objects.equals(getRawName(), that.getRawName());
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(getRawName());
+    }
+
     @Override
     public void setDisplayName() {
         putValue(Action.NAME, getName());
         /** Tooltips should be shown for the toolbar buttons, but not in the menu. */
-        putValue(OPTIONAL_TOOLTIP_TEXT, (group != null ?
+        putValue(OPTIONAL_TOOLTIP_TEXT, group != null ?
                 tr("Preset group {1} / {0}", getLocaleName(), group.getName()) :
-                    tr("Preset group {0}", getLocaleName())));
+                    tr("Preset group {0}", getLocaleName()));
         putValue("toolbar", "tagginggroup_" + getRawName());
     }
 
     private Component copyMenuComponent(Component menuComponent) {
         if (menuComponent instanceof JMenu) {
-            JMenu menu = (JMenu)menuComponent;
+            JMenu menu = (JMenu) menuComponent;
             JMenu result = new JMenu(menu.getAction());
             for (Component item:menu.getMenuComponents()) {
                 result.add(copyMenuComponent(item));
@@ -57,11 +74,11 @@ public class TaggingPresetMenu extends TaggingPreset {
             result.setText(menu.getText());
             return result;
         } else if (menuComponent instanceof JMenuItem) {
-            JMenuItem menuItem = (JMenuItem)menuComponent;
+            JMenuItem menuItem = (JMenuItem) menuComponent;
             JMenuItem result = new JMenuItem(menuItem.getAction());
             result.setText(menuItem.getText());
             return result;
-        } else if(menuComponent instanceof JSeparator) {
+        } else if (menuComponent instanceof JSeparator) {
             return new JSeparator();
         } else {
             return menuComponent;
@@ -84,32 +101,32 @@ public class TaggingPresetMenu extends TaggingPreset {
     /**
      * Sorts the menu items using the translated item text
      */
-    public void sortMenu(){
+    public void sortMenu() {
         TaggingPresetMenu.sortMenu(this.menu);
     }
 
     /**
      * Sorts the menu items using the translated item text
      */
-    public static void sortMenu(JMenu menu){
+    public static void sortMenu(JMenu menu) {
         Component[] items = menu.getMenuComponents();
         PresetTextComparator comp = new PresetTextComparator();
         List<JMenuItem> sortarray = new ArrayList<>();
         int lastSeparator = 0;
         for (int i = 0; i < items.length; i++) {
             Object item = items[i];
-            if (item instanceof JMenu){
-                sortMenu((JMenu)item);
+            if (item instanceof JMenu) {
+                sortMenu((JMenu) item);
             }
-            if (item instanceof JMenuItem){
-                sortarray.add((JMenuItem)item);
-                if (i == items.length-1){
+            if (item instanceof JMenuItem) {
+                sortarray.add((JMenuItem) item);
+                if (i == items.length-1) {
                     Collections.sort(sortarray, comp);
                     int pos = 0;
                     for (JMenuItem menuItem : sortarray) {
                         int oldPos;
-                        if (lastSeparator == 0){
-                            oldPos=pos;
+                        if (lastSeparator == 0) {
+                            oldPos = pos;
                         } else {
                             oldPos = pos+lastSeparator+1;
                         }
@@ -119,14 +136,14 @@ public class TaggingPresetMenu extends TaggingPreset {
                     sortarray = new ArrayList<>();
                     lastSeparator = 0;
                 }
-            } else if (item instanceof JSeparator){
+            } else if (item instanceof JSeparator) {
                 Collections.sort(sortarray, comp);
                 int pos = 0;
                 for (JMenuItem menuItem : sortarray) {
                     int oldPos;
-                    if(lastSeparator == 0){
-                        oldPos=pos;
-                    }else {
+                    if (lastSeparator == 0) {
+                        oldPos = pos;
+                    } else {
                         oldPos = pos+lastSeparator+1;
                     }
                     menu.add(menuItem, oldPos);
diff --git a/src/org/openstreetmap/josm/gui/tagging/TaggingPresetNameTemplateList.java b/src/org/openstreetmap/josm/gui/tagging/TaggingPresetNameTemplateList.java
index d6ecc02..bb24baa 100644
--- a/src/org/openstreetmap/josm/gui/tagging/TaggingPresetNameTemplateList.java
+++ b/src/org/openstreetmap/josm/gui/tagging/TaggingPresetNameTemplateList.java
@@ -35,7 +35,7 @@ public final class TaggingPresetNameTemplateList implements TaggingPresetListene
     }
 
     private void buildPresetsWithPattern() {
-        synchronized(this) {
+        synchronized (this) {
             Main.debug("Building list of presets with name template");
             presetsWithPattern.clear();
             for (TaggingPreset tp : TaggingPresets.getTaggingPresets()) {
@@ -52,7 +52,7 @@ public final class TaggingPresetNameTemplateList implements TaggingPresetListene
      * @return the first occurence of preset with template name matching the primitive
      */
     public TaggingPreset findPresetTemplate(OsmPrimitive primitive) {
-        synchronized(this) {
+        synchronized (this) {
             for (TaggingPreset t : presetsWithPattern) {
                 Collection<TaggingPresetType> type = Collections.singleton(TaggingPresetType.forPrimitive(primitive));
                 if (t.typeMatches(type)) {
diff --git a/src/org/openstreetmap/josm/gui/tagging/TaggingPresetReader.java b/src/org/openstreetmap/josm/gui/tagging/TaggingPresetReader.java
index 238b286..5ab38fd 100644
--- a/src/org/openstreetmap/josm/gui/tagging/TaggingPresetReader.java
+++ b/src/org/openstreetmap/josm/gui/tagging/TaggingPresetReader.java
@@ -15,6 +15,7 @@ import java.util.Collection;
 import java.util.Deque;
 import java.util.HashMap;
 import java.util.Iterator;
+import java.util.LinkedHashSet;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
@@ -26,6 +27,8 @@ import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.preferences.map.TaggingPresetPreference;
 import org.openstreetmap.josm.io.CachedFile;
 import org.openstreetmap.josm.io.UTFInputStreamReader;
+import org.openstreetmap.josm.tools.Predicates;
+import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.XmlObjectParser;
 import org.xml.sax.SAXException;
 
@@ -39,13 +42,15 @@ public final class TaggingPresetReader {
      * The accepted MIME types sent in the HTTP Accept header.
      * @since 6867
      */
-    public static final String PRESET_MIME_TYPES = "application/xml, text/xml, text/plain; q=0.8, application/zip, application/octet-stream; q=0.5";
+    public static final String PRESET_MIME_TYPES =
+            "application/xml, text/xml, text/plain; q=0.8, application/zip, application/octet-stream; q=0.5";
 
     private TaggingPresetReader() {
         // Hide default constructor for utils classes
     }
 
     private static volatile File zipIcons = null;
+    private static volatile boolean loadIcons = true;
 
     /**
      * Returns the set of preset source URLs.
@@ -96,6 +101,23 @@ public final class TaggingPresetReader {
         return parser;
     }
 
+    static class HashSetWithLast<E> extends LinkedHashSet<E> {
+        protected E last = null;
+
+        @Override
+        public boolean add(E e) {
+            last = e;
+            return super.add(e);
+        }
+
+        /**
+         * Returns the last inserted element.
+         */
+        public E getLast() {
+            return last;
+        }
+    }
+
     /**
      * Reads all tagging presets from the input reader.
      * @param in The input reader
@@ -104,10 +126,24 @@ public final class TaggingPresetReader {
      * @throws SAXException if any XML error occurs
      */
     public static Collection<TaggingPreset> readAll(Reader in, boolean validate) throws SAXException {
+        return readAll(in, validate, new HashSetWithLast<TaggingPreset>());
+    }
+
+    /**
+     * Reads all tagging presets from the input reader.
+     * @param in The input reader
+     * @param validate if {@code true}, XML validation will be performed
+     * @param all the accumulator for parsed tagging presets
+     * @return the accumulator
+     * @throws SAXException if any XML error occurs
+     */
+    static Collection<TaggingPreset> readAll(Reader in, boolean validate, HashSetWithLast<TaggingPreset> all) throws SAXException {
         XmlObjectParser parser = buildParser();
 
-        Deque<TaggingPreset> all = new LinkedList<>();
+        /** to detect end of {@code <group>} */
         TaggingPresetMenu lastmenu = null;
+        /** to detect end of reused {@code <group>} */
+        TaggingPresetMenu lastmenuOriginal = null;
         TaggingPresetItems.Roles lastrole = null;
         final List<TaggingPresetItems.Check> checks = new LinkedList<>();
         List<TaggingPresetItems.PresetListEntry> listEntries = new LinkedList<>();
@@ -172,13 +208,20 @@ public final class TaggingPresetReader {
             }
             if (o instanceof TaggingPresetMenu) {
                 TaggingPresetMenu tp = (TaggingPresetMenu) o;
-                if (tp == lastmenu) {
+                if (tp == lastmenu || tp == lastmenuOriginal) {
                     lastmenu = tp.group;
                 } else {
                     tp.group = lastmenu;
-                    tp.setDisplayName();
+                    if (all.contains(tp)) {
+                        lastmenuOriginal = tp;
+                        tp = (TaggingPresetMenu) Utils.filter(all, Predicates.<TaggingPreset>equalTo(tp)).iterator().next();
+                        lastmenuOriginal.group = null;
+                    } else {
+                        tp.setDisplayName();
+                        all.add(tp);
+                        lastmenuOriginal = null;
+                    }
                     lastmenu = tp;
-                    all.add(tp);
                 }
                 lastrole = null;
             } else if (o instanceof TaggingPresetSeparator) {
@@ -252,6 +295,20 @@ public final class TaggingPresetReader {
      * @throws IOException if any I/O error occurs
      */
     public static Collection<TaggingPreset> readAll(String source, boolean validate) throws SAXException, IOException {
+        return readAll(source, validate, new HashSetWithLast<TaggingPreset>());
+    }
+
+    /**
+     * Reads all tagging presets from the given source.
+     * @param source a given filename, URL or internal resource
+     * @param validate if {@code true}, XML validation will be performed
+     * @param all the accumulator for parsed tagging presets
+     * @return the accumulator
+     * @throws SAXException if any XML error occurs
+     * @throws IOException if any I/O error occurs
+     */
+    static Collection<TaggingPreset> readAll(String source, boolean validate, HashSetWithLast<TaggingPreset> all)
+            throws SAXException, IOException {
         Collection<TaggingPreset> tp;
         CachedFile cf = new CachedFile(source).setHttpAccept(PRESET_MIME_TYPES);
         try (
@@ -262,7 +319,7 @@ public final class TaggingPresetReader {
                 zipIcons = cf.getFile();
             }
             try (InputStreamReader r = UTFInputStreamReader.create(zip == null ? cf.getInputStream() : zip)) {
-                tp = readAll(new BufferedReader(r), validate);
+                tp = readAll(new BufferedReader(r), validate, all);
             }
         }
         return tp;
@@ -286,10 +343,10 @@ public final class TaggingPresetReader {
      * @return Collection of all presets successfully read
      */
     public static Collection<TaggingPreset> readAll(Collection<String> sources, boolean validate, boolean displayErrMsg) {
-        List<TaggingPreset> allPresets = new LinkedList<>();
-        for(String source : sources)  {
+        HashSetWithLast<TaggingPreset> allPresets = new HashSetWithLast<>();
+        for (String source : sources)  {
             try {
-                allPresets.addAll(readAll(source, validate));
+                readAll(source, validate, allPresets);
             } catch (IOException e) {
                 Main.error(e, false);
                 Main.error(source);
@@ -299,7 +356,7 @@ public final class TaggingPresetReader {
                 if (displayErrMsg) {
                     JOptionPane.showMessageDialog(
                             Main.parent,
-                            tr("Could not read tagging preset source: {0}",source),
+                            tr("Could not read tagging preset source: {0}", source),
                             tr("Error"),
                             JOptionPane.ERROR_MESSAGE
                             );
@@ -331,4 +388,18 @@ public final class TaggingPresetReader {
     public static File getZipIcons() {
         return zipIcons;
     }
+
+    /**
+     * Returns true if icon images should be loaded.
+     */
+    public static boolean isLoadIcons() {
+        return loadIcons;
+    }
+
+    /**
+     * Sets whether icon images should be loaded.
+     */
+    public static void setLoadIcons(boolean loadIcons) {
+        TaggingPresetReader.loadIcons = loadIcons;
+    }
 }
diff --git a/src/org/openstreetmap/josm/gui/tagging/TaggingPresetSearchPrimitiveDialog.java b/src/org/openstreetmap/josm/gui/tagging/TaggingPresetSearchPrimitiveDialog.java
index 08b0383..992e0d9 100644
--- a/src/org/openstreetmap/josm/gui/tagging/TaggingPresetSearchPrimitiveDialog.java
+++ b/src/org/openstreetmap/josm/gui/tagging/TaggingPresetSearchPrimitiveDialog.java
@@ -1,3 +1,4 @@
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.tagging;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -78,7 +79,8 @@ public final class TaggingPresetSearchPrimitiveDialog extends ExtendedDialog {
          */
         public Action() {
             super(tr("Search for objects by preset"), "dialogs/search", tr("Show preset search dialog"),
-                    Shortcut.registerShortcut("preset:search-objects", tr("Search for objects by preset"), KeyEvent.VK_F3, Shortcut.SHIFT), false);
+                    Shortcut.registerShortcut("preset:search-objects", tr("Search for objects by preset"), KeyEvent.VK_F3, Shortcut.SHIFT),
+                    false);
             putValue("toolbar", "presets/search-objects");
             Main.toolbar.register(this);
         }
diff --git a/src/org/openstreetmap/josm/gui/tagging/TaggingPresetSelector.java b/src/org/openstreetmap/josm/gui/tagging/TaggingPresetSelector.java
index ba0095c..b08f683 100644
--- a/src/org/openstreetmap/josm/gui/tagging/TaggingPresetSelector.java
+++ b/src/org/openstreetmap/josm/gui/tagging/TaggingPresetSelector.java
@@ -21,6 +21,7 @@ import java.util.EnumSet;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Locale;
 import java.util.Objects;
 import java.util.Set;
 
@@ -87,7 +88,8 @@ public class TaggingPresetSelector extends JPanel implements SelectionChangedLis
     private static class ResultListCellRenderer implements ListCellRenderer<TaggingPreset> {
         private final DefaultListCellRenderer def = new DefaultListCellRenderer();
         @Override
-        public Component getListCellRendererComponent(JList<? extends TaggingPreset> list, TaggingPreset tp, int index, boolean isSelected, boolean cellHasFocus) {
+        public Component getListCellRendererComponent(JList<? extends TaggingPreset> list, TaggingPreset tp, int index,
+                boolean isSelected, boolean cellHasFocus) {
             JLabel result = (JLabel) def.getListCellRendererComponent(list, tp, index, isSelected, cellHasFocus);
             result.setText(tp.getName());
             result.setIcon((Icon) tp.getValue(Action.SMALL_ICON));
@@ -134,10 +136,10 @@ public class TaggingPresetSelector extends JPanel implements SelectionChangedLis
             this.preset = preset;
             TaggingPreset group = preset.group;
             while (group != null) {
-                Collections.addAll(groups, group.getLocaleName().toLowerCase().split("\\s"));
+                Collections.addAll(groups, group.getLocaleName().toLowerCase(Locale.ENGLISH).split("\\s"));
                 group = group.group;
             }
-            Collections.addAll(names, preset.getLocaleName().toLowerCase().split("\\s"));
+            Collections.addAll(names, preset.getLocaleName().toLowerCase(Locale.ENGLISH).split("\\s"));
             for (TaggingPresetItem item: preset.data) {
                 if (item instanceof KeyedItem) {
                     tags.add(((KeyedItem) item).key);
@@ -164,7 +166,7 @@ public class TaggingPresetSelector extends JPanel implements SelectionChangedLis
                 boolean found = false;
                 boolean foundFirst = false;
                 for (String value: values) {
-                    int index = value.toLowerCase().indexOf(word);
+                    int index = value.toLowerCase(Locale.ENGLISH).indexOf(word);
                     if (index == 0) {
                         foundFirst = true;
                         break;
@@ -205,7 +207,7 @@ public class TaggingPresetSelector extends JPanel implements SelectionChangedLis
 
         @Override
         public String toString() {
-            return classification + " " + preset.toString();
+            return classification + " " + preset;
         }
     }
 
@@ -218,9 +220,20 @@ public class TaggingPresetSelector extends JPanel implements SelectionChangedLis
 
         edSearchText = new JosmTextField();
         edSearchText.getDocument().addDocumentListener(new DocumentListener() {
-            @Override public void removeUpdate(DocumentEvent e) { filterPresets(); }
-            @Override public void insertUpdate(DocumentEvent e) { filterPresets(); }
-            @Override public void changedUpdate(DocumentEvent e) { filterPresets(); }
+            @Override
+            public void removeUpdate(DocumentEvent e) {
+                filterPresets();
+            }
+
+            @Override
+            public void insertUpdate(DocumentEvent e) {
+                filterPresets();
+            }
+
+            @Override
+            public void changedUpdate(DocumentEvent e) {
+                filterPresets();
+            }
         });
         edSearchText.addKeyListener(new KeyAdapter() {
             @Override
@@ -254,11 +267,11 @@ public class TaggingPresetSelector extends JPanel implements SelectionChangedLis
         lsResult.addMouseListener(new MouseAdapter() {
             @Override
             public void mouseClicked(MouseEvent e) {
-                if (e.getClickCount()>1) {
-                    if (dblClickListener!=null)
+                if (e.getClickCount() > 1) {
+                    if (dblClickListener != null)
                         dblClickListener.actionPerformed(null);
                 } else {
-                    if (clickListener!=null)
+                    if (clickListener != null)
                         clickListener.actionPerformed(null);
                 }
             }
@@ -328,12 +341,12 @@ public class TaggingPresetSelector extends JPanel implements SelectionChangedLis
      */
     private synchronized void filterPresets() {
         //TODO Save favorites to file
-        String text = edSearchText.getText().toLowerCase();
+        String text = edSearchText.getText().toLowerCase(Locale.ENGLISH);
         boolean onlyApplicable = ckOnlyApplicable != null && ckOnlyApplicable.isSelected();
         boolean inTags = ckSearchInTags != null && ckSearchInTags.isSelected();
 
         DataSet ds = Main.main.getCurrentDataSet();
-        Collection<OsmPrimitive> selected = (ds==null)? Collections.<OsmPrimitive>emptyList() : ds.getSelected();
+        Collection<OsmPrimitive> selected = (ds == null) ? Collections.<OsmPrimitive>emptyList() : ds.getSelected();
         final List<PresetClassification> result = classifications.getMatchingPresets(
                 text, onlyApplicable, inTags, getTypesInSelection(), selected);
 
@@ -383,9 +396,9 @@ public class TaggingPresetSelector extends JPanel implements SelectionChangedLis
                 if (onlyApplicable) {
                     boolean suitable = preset.typeMatches(presetTypes);
 
-                    if (!suitable && preset.types.contains(TaggingPresetType.RELATION) && preset.roles != null && !preset.roles.roles.isEmpty()) {
+                    if (!suitable && preset.types.contains(TaggingPresetType.RELATION)
+                            && preset.roles != null && !preset.roles.roles.isEmpty()) {
                         final Predicate<Role> memberExpressionMatchesOnePrimitive = new Predicate<Role>() {
-
                             @Override
                             public boolean evaluate(Role object) {
                                 return object.memberExpression != null
@@ -458,7 +471,7 @@ public class TaggingPresetSelector extends JPanel implements SelectionChangedLis
             synchronized (typesInSelection) {
                 typesInSelectionDirty = false;
                 typesInSelection.clear();
-                if (Main.main==null || Main.main.getCurrentDataSet() == null) return typesInSelection;
+                if (Main.main == null || Main.main.getCurrentDataSet() == null) return typesInSelection;
                 for (OsmPrimitive primitive : Main.main.getCurrentDataSet().getSelected()) {
                     typesInSelection.add(TaggingPresetType.forPrimitive(primitive));
                 }
diff --git a/src/org/openstreetmap/josm/gui/tagging/TaggingPresetType.java b/src/org/openstreetmap/josm/gui/tagging/TaggingPresetType.java
index 8c41c40..e4bace6 100644
--- a/src/org/openstreetmap/josm/gui/tagging/TaggingPresetType.java
+++ b/src/org/openstreetmap/josm/gui/tagging/TaggingPresetType.java
@@ -9,30 +9,52 @@ import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
  * @since 6068
  */
 public enum TaggingPresetType {
+    /** Node */
     NODE(/* ICON */ "Mf_node", "node"),
+    /** Way */
     WAY(/* ICON */ "Mf_way", "way"),
+    /** Relation */
     RELATION(/* ICON */ "Mf_relation", "relation"),
+    /** Closed way */
     CLOSEDWAY(/* ICON */ "Mf_closedway", "closedway");
     private final String iconName;
     private final String name;
 
     TaggingPresetType(String iconName, String name) {
-        this.iconName = iconName;
+        this.iconName = iconName + ".svg";
         this.name = name;
     }
 
+    /**
+     * Replies the SVG icon name.
+     * @return the SVG icon name
+     */
     public String getIconName() {
         return iconName;
     }
 
+    /**
+     * Replies the name, as used in XML presets.
+     * @return the name: "node", "way", "relation" or "closedway"
+     */
     public String getName() {
         return name;
     }
 
+    /**
+     * Determines the {@code TaggingPresetType} of a given primitive.
+     * @param p The OSM primitive
+     * @return the {@code TaggingPresetType} of {@code p}
+     */
     public static TaggingPresetType forPrimitive(OsmPrimitive p) {
         return forPrimitiveType(p.getDisplayType());
     }
 
+    /**
+     * Determines the {@code TaggingPresetType} of a given primitive type.
+     * @param type The OSM primitive type
+     * @return the {@code TaggingPresetType} of {@code type}
+     */
     public static TaggingPresetType forPrimitiveType(OsmPrimitiveType type) {
         if (type == OsmPrimitiveType.NODE) return NODE;
         if (type == OsmPrimitiveType.WAY) return WAY;
@@ -42,6 +64,11 @@ public enum TaggingPresetType {
         throw new IllegalArgumentException("Unexpected primitive type: " + type);
     }
 
+    /**
+     * Determines the {@code TaggingPresetType} from a given string.
+     * @param type The OSM primitive type as string ("node", "way", "relation" or "closedway")
+     * @return the {@code TaggingPresetType} from {@code type}
+     */
     public static TaggingPresetType fromString(String type) {
         for (TaggingPresetType t : TaggingPresetType.values()) {
             if (t.getName().equals(type)) {
@@ -50,5 +77,4 @@ public enum TaggingPresetType {
         }
         return null;
     }
-
 }
diff --git a/src/org/openstreetmap/josm/gui/tagging/TaggingPresets.java b/src/org/openstreetmap/josm/gui/tagging/TaggingPresets.java
index 72e9896..bb1562f 100644
--- a/src/org/openstreetmap/josm/gui/tagging/TaggingPresets.java
+++ b/src/org/openstreetmap/josm/gui/tagging/TaggingPresets.java
@@ -51,16 +51,20 @@ public final class TaggingPresets {
             Main.main.menu.presetsMenu.setVisible(false);
         } else {
             AutoCompletionManager.cachePresets(taggingPresets);
-            Map<TaggingPresetMenu,JMenu> submenus = new HashMap<>();
+            Map<TaggingPresetMenu, JMenu> submenus = new HashMap<>();
             for (final TaggingPreset p : taggingPresets) {
                 JMenu m = p.group != null ? submenus.get(p.group) : Main.main.menu.presetsMenu;
-                if (p instanceof TaggingPresetSeparator) {
+                if (m == null && p.group != null) {
+                    Main.error("No tagging preset submenu for " + p.group);
+                } else if (m == null) {
+                    Main.error("No tagging preset menu. Tagging preset " + p + " won't be available there");
+                } else if (p instanceof TaggingPresetSeparator) {
                     m.add(new JSeparator());
                 } else if (p instanceof TaggingPresetMenu) {
                     JMenu submenu = new JMenu(p);
                     submenu.setText(p.getLocaleName());
-                    ((TaggingPresetMenu)p).menu = submenu;
-                    submenus.put((TaggingPresetMenu)p, submenu);
+                    ((TaggingPresetMenu) p).menu = submenu;
+                    submenus.put((TaggingPresetMenu) p, submenu);
                     m.add(submenu);
                 } else {
                     JMenuItem mi = new JMenuItem(p);
diff --git a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingComboBox.java b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingComboBox.java
index 69d1e9f..2bf8078 100644
--- a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingComboBox.java
+++ b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingComboBox.java
@@ -25,6 +25,7 @@ import javax.swing.text.StyleConstants;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.widgets.JosmComboBox;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
  * Auto-completing ComboBox.
@@ -44,7 +45,7 @@ public class AutoCompletingComboBox extends JosmComboBox<AutoCompletionListItem>
      * Inspired by <a href="http://www.orbital-computer.de/JComboBox">Thomas Bierhance example</a>.
      */
     class AutoCompletingComboBoxDocument extends PlainDocument {
-        private JosmComboBox<AutoCompletionListItem> comboBox;
+        private final JosmComboBox<AutoCompletionListItem> comboBox;
         private boolean selecting = false;
 
         /**
@@ -86,8 +87,7 @@ public class AutoCompletingComboBox extends JosmComboBox<AutoCompletionListItem>
 
             // if the current offset isn't at the end of the document we don't autocomplete.
             // If a highlighted autocompleted suffix was present and we get here Swing has
-            // already removed it from the document. getLength() therefore doesn't include the
-            // autocompleted suffix.
+            // already removed it from the document. getLength() therefore doesn't include the autocompleted suffix.
             if (offs + str.length() < getLength()) {
                 return;
             }
@@ -103,12 +103,11 @@ public class AutoCompletingComboBox extends JosmComboBox<AutoCompletionListItem>
             if (Main.pref.getBoolean("autocomplete.dont_complete_numbers", true)) {
                 try {
                     Long.parseLong(str);
-                    if (curText.length() != 0)
+                    if (!curText.isEmpty())
                         Long.parseLong(curText);
                     item = lookupItem(curText, true);
                 } catch (NumberFormatException e) {
-                    // either the new text or the current text isn't a number. We continue with
-                    // autocompletion
+                    // either the new text or the current text isn't a number. We continue with autocompletion
                     item = lookupItem(curText, false);
                 }
             } else {
@@ -130,11 +129,11 @@ public class AutoCompletingComboBox extends JosmComboBox<AutoCompletionListItem>
                     end = getLength();
                 }
             }
-            JTextComponent editorComponent = (JTextComponent)comboBox.getEditor().getEditorComponent();
+            JTextComponent editorComponent = (JTextComponent) comboBox.getEditor().getEditorComponent();
             // save unix system selection (middle mouse paste)
             Clipboard sysSel = Toolkit.getDefaultToolkit().getSystemSelection();
-            if(sysSel != null) {
-                Transferable old = sysSel.getContents(null);
+            if (sysSel != null) {
+                Transferable old = Utils.getTransferableContent(sysSel);
                 editorComponent.select(start, end);
                 sysSel.setContents(old, null);
             } else {
@@ -190,6 +189,7 @@ public class AutoCompletingComboBox extends JosmComboBox<AutoCompletionListItem>
                             Main.map.keyDetector.setEnabled(true);
                         }
                     }
+
                     @Override
                     public void focusGained(FocusEvent e) {
                         if (Main.map != null) {
@@ -197,8 +197,8 @@ public class AutoCompletingComboBox extends JosmComboBox<AutoCompletionListItem>
                         }
                         // save unix system selection (middle mouse paste)
                         Clipboard sysSel = Toolkit.getDefaultToolkit().getSystemSelection();
-                        if(sysSel != null) {
-                            Transferable old = sysSel.getContents(null);
+                        if (sysSel != null) {
+                            Transferable old = Utils.getTransferableContent(sysSel);
                             editorComponent.selectAll();
                             sysSel.setContents(old, null);
                         } else {
@@ -230,7 +230,7 @@ public class AutoCompletingComboBox extends JosmComboBox<AutoCompletionListItem>
         } else if (item instanceof String) {
             cbEditor.setItem(item);
         } else if (item instanceof AutoCompletionListItem) {
-            cbEditor.setItem(((AutoCompletionListItem)item).getValue());
+            cbEditor.setItem(((AutoCompletionListItem) item).getValue());
         } else
             throw new IllegalArgumentException("Unsupported item: "+item);
     }
@@ -248,7 +248,7 @@ public class AutoCompletingComboBox extends JosmComboBox<AutoCompletionListItem>
         } else if (item instanceof String) {
             String s = (String) item;
             // find the string in the model or create a new item
-            for (int i=0; i< getModel().getSize(); i++) {
+            for (int i = 0; i < getModel().getSize(); i++) {
                 AutoCompletionListItem acItem = getModel().getElementAt(i);
                 if (s.equals(acItem.getValue())) {
                     super.setSelectedItem(acItem);
@@ -266,7 +266,7 @@ public class AutoCompletingComboBox extends JosmComboBox<AutoCompletionListItem>
      * @param elems String items
      */
     public void setPossibleItems(Collection<String> elems) {
-        DefaultComboBoxModel<AutoCompletionListItem> model = (DefaultComboBoxModel<AutoCompletionListItem>)this.getModel();
+        DefaultComboBoxModel<AutoCompletionListItem> model = (DefaultComboBoxModel<AutoCompletionListItem>) this.getModel();
         Object oldValue = this.getEditor().getItem(); // Do not use getSelectedItem(); (fix #8013)
         model.removeAllElements();
         for (String elem : elems) {
@@ -283,7 +283,7 @@ public class AutoCompletingComboBox extends JosmComboBox<AutoCompletionListItem>
      * @param elems AutoCompletionListItem items
      */
     public void setPossibleACItems(Collection<AutoCompletionListItem> elems) {
-        DefaultComboBoxModel<AutoCompletionListItem> model = (DefaultComboBoxModel<AutoCompletionListItem>)this.getModel();
+        DefaultComboBoxModel<AutoCompletionListItem> model = (DefaultComboBoxModel<AutoCompletionListItem>) this.getModel();
         Object oldValue = getSelectedItem();
         Object editorOldValue = this.getEditor().getItem();
         model.removeAllElements();
@@ -314,11 +314,23 @@ public class AutoCompletingComboBox extends JosmComboBox<AutoCompletionListItem>
     public void setFixedLocale(boolean f) {
         useFixedLocale = f;
         if (useFixedLocale) {
-            privateInputContext.selectInputMethod(new Locale("en", "US"));
+            Locale oldLocale = privateInputContext.getLocale();
+            Main.info("Using English input method");
+            if (!privateInputContext.selectInputMethod(new Locale("en", "US"))) {
+                // Unable to use English keyboard layout, disable the feature
+                Main.warn("Unable to use English input method");
+                useFixedLocale = false;
+                if (oldLocale != null) {
+                    Main.info("Restoring input method to " + oldLocale);
+                    if (!privateInputContext.selectInputMethod(oldLocale)) {
+                        Main.warn("Unable to restore input method to " + oldLocale);
+                    }
+                }
+            }
         }
     }
 
-    private static InputContext privateInputContext = InputContext.getInstance();
+    private final InputContext privateInputContext = InputContext.getInstance();
 
     @Override
     public InputContext getInputContext() {
diff --git a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingTextField.java b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingTextField.java
index 9be0cf4..4ea3f59 100644
--- a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingTextField.java
+++ b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingTextField.java
@@ -80,7 +80,7 @@ public class AutoCompletingTextField extends JosmTextField implements ComboBoxEd
             if (Main.pref.getBoolean("autocomplete.dont_complete_numbers", true)) {
                 try {
                     Long.parseLong(str);
-                    if (currentText.length() == 0) {
+                    if (currentText.isEmpty()) {
                         // we don't autocomplete on numbers
                         super.insertString(offs, str, a);
                         return;
@@ -88,20 +88,20 @@ public class AutoCompletingTextField extends JosmTextField implements ComboBoxEd
                     Long.parseLong(currentText);
                     super.insertString(offs, str, a);
                     return;
-                } catch(NumberFormatException e) {
-                    // either the new text or the current text isn't a number. We continue with
-                    // autocompletion
+                } catch (NumberFormatException e) {
+                    // either the new text or the current text isn't a number. We continue with autocompletion
+                    if (Main.isTraceEnabled()) {
+                        Main.trace(e.getMessage());
+                    }
                 }
             }
             String prefix = currentText.substring(0, offs);
             autoCompletionList.applyFilter(prefix+str);
             if (autoCompletionList.getFilteredSize() > 0 && !Objects.equals(str, noAutoCompletionString)) {
-                // there are matches. Insert the new text and highlight the
-                // auto completed suffix
-                //
+                // there are matches. Insert the new text and highlight the auto completed suffix
                 String matchingString = autoCompletionList.getFilteredItem(0).getValue();
-                remove(0,getLength());
-                super.insertString(0,matchingString,a);
+                remove(0, getLength());
+                super.insertString(0, matchingString, a);
 
                 // highlight from insert position to end position to put the caret at the end
                 setCaretPosition(offs + str.length());
@@ -110,10 +110,9 @@ public class AutoCompletingTextField extends JosmTextField implements ComboBoxEd
                 // there are no matches. Insert the new text, do not highlight
                 //
                 String newText = prefix + str;
-                remove(0,getLength());
-                super.insertString(0,newText,a);
+                remove(0, getLength());
+                super.insertString(0, newText, a);
                 setCaretPosition(getLength());
-
             }
         }
     }
@@ -291,7 +290,7 @@ public class AutoCompletingTextField extends JosmTextField implements ComboBoxEd
 
     @Override
     public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
-        setText( value == null ? "" : value.toString());
+        setText(value == null ? "" : value.toString());
         rememberOriginalValue(getText());
         return this;
     }
diff --git a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionItemPriority.java b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionItemPriority.java
index 1a47c16..08e0471 100644
--- a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionItemPriority.java
+++ b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionItemPriority.java
@@ -87,7 +87,7 @@ public class AutoCompletionItemPriority implements Comparable<AutoCompletionItem
      */
     @Override
     public int compareTo(AutoCompletionItemPriority other) {
-        int ui = -Integer.compare(userInput, other.userInput);
+        int ui = Integer.compare(other.userInput, userInput);
         if (ui != 0) return ui;
 
         int sel = Boolean.valueOf(selected).compareTo(other.selected);
diff --git a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionList.java b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionList.java
index 6c9c735..6b729a1 100644
--- a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionList.java
+++ b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionList.java
@@ -38,7 +38,7 @@ public class AutoCompletionList extends AbstractTableModel {
     /** the filter expression */
     private String filter = null;
     /** map from value to priority */
-    private transient Map<String,AutoCompletionListItem> valutToItemMap;
+    private transient Map<String, AutoCompletionListItem> valutToItemMap;
 
     /**
      * constructor
@@ -139,7 +139,7 @@ public class AutoCompletionList extends AbstractTableModel {
             if (value == null) {
                 continue;
             }
-            AutoCompletionListItem item = new AutoCompletionListItem(value,priority);
+            AutoCompletionListItem item = new AutoCompletionListItem(value, priority);
             appendOrUpdatePriority(item);
 
         }
@@ -210,7 +210,7 @@ public class AutoCompletionList extends AbstractTableModel {
     public void remove(String key) {
         if (key == null)
             return;
-        for (int i=0;i< list.size();i++) {
+        for (int i = 0; i < list.size(); i++) {
             AutoCompletionListItem item = list.get(i);
             if (item.getValue().equals(key)) {
                 list.remove(i);
diff --git a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionListItem.java b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionListItem.java
index c445c6f..b0be5d9 100644
--- a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionListItem.java
+++ b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionListItem.java
@@ -16,7 +16,7 @@ import org.openstreetmap.josm.tools.CheckParameterUtil;
  * The value is a string which will be displayed in the auto completion list.
  *
  */
-public class AutoCompletionListItem implements Comparable<AutoCompletionListItem>{
+public class AutoCompletionListItem implements Comparable<AutoCompletionListItem> {
 
     /** the pritority of this item */
     private  AutoCompletionItemPriority priority;
@@ -84,17 +84,19 @@ public class AutoCompletionListItem implements Comparable<AutoCompletionListItem
         this.value = value;
     }
 
-    @Override public String toString() {
+    @Override
+    public String toString() {
         StringBuilder sb = new StringBuilder();
-        sb.append("<val='");
-        sb.append(value);
-        sb.append("',");
-        sb.append(priority.toString());
-        sb.append(">");
+        sb.append("<val='")
+          .append(value)
+          .append("',")
+          .append(priority)
+          .append('>');
         return sb.toString();
     }
 
-    @Override public int hashCode() {
+    @Override
+    public int hashCode() {
         final int prime = 31;
         int result = 1;
         result = prime * result
@@ -103,7 +105,8 @@ public class AutoCompletionListItem implements Comparable<AutoCompletionListItem
         return result;
     }
 
-    @Override public boolean equals(Object obj) {
+    @Override
+    public boolean equals(Object obj) {
         if (this == obj)
             return true;
         if (obj == null)
@@ -112,7 +115,7 @@ public class AutoCompletionListItem implements Comparable<AutoCompletionListItem
             return obj.equals(value);
         if (getClass() != obj.getClass())
             return false;
-        final AutoCompletionListItem other = (AutoCompletionListItem)obj;
+        final AutoCompletionListItem other = (AutoCompletionListItem) obj;
         if (priority == null) {
             if (other.priority != null)
                 return false;
diff --git a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionManager.java b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionManager.java
index c899961..00a61bc 100644
--- a/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionManager.java
+++ b/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionManager.java
@@ -194,7 +194,7 @@ public class AutoCompletionManager implements DataSetListener {
      *
      * @param relation the relation
      */
-    protected void cacheRelationMemberRoles(Relation relation){
+    protected void cacheRelationMemberRoles(Relation relation) {
         for (RelationMember m: relation.getMembers()) {
             if (m.hasRole()) {
                 roleCache.add(m.getRole());
@@ -209,24 +209,32 @@ public class AutoCompletionManager implements DataSetListener {
     public static void cachePresets(Collection<TaggingPreset> presets) {
         for (final TaggingPreset p : presets) {
             for (TaggingPresetItem item : p.data) {
-                if (item instanceof TaggingPresetItems.KeyedItem) {
-                    TaggingPresetItems.KeyedItem ki = (TaggingPresetItems.KeyedItem) item;
-                    if (ki.key != null && ki.getValues() != null) {
-                        try {
-                            PRESET_TAG_CACHE.putAll(ki.key, ki.getValues());
-                        } catch (NullPointerException e) {
-                            Main.error(p+": Unable to cache "+ki);
-                        }
-                    }
-                } else if (item instanceof TaggingPresetItems.Roles) {
-                    TaggingPresetItems.Roles r = (TaggingPresetItems.Roles) item;
-                    for (TaggingPresetItems.Role i : r.roles) {
-                        if (i.key != null) {
-                            PRESET_ROLE_CACHE.add(i.key);
-                        }
-                    }
+                cachePresetItem(p, item);
+            }
+        }
+    }
+
+    protected static void cachePresetItem(TaggingPreset p, TaggingPresetItem item) {
+        if (item instanceof TaggingPresetItems.KeyedItem) {
+            TaggingPresetItems.KeyedItem ki = (TaggingPresetItems.KeyedItem) item;
+            if (ki.key != null && ki.getValues() != null) {
+                try {
+                    PRESET_TAG_CACHE.putAll(ki.key, ki.getValues());
+                } catch (NullPointerException e) {
+                    Main.error(p + ": Unable to cache " + ki);
+                }
+            }
+        } else if (item instanceof TaggingPresetItems.Roles) {
+            TaggingPresetItems.Roles r = (TaggingPresetItems.Roles) item;
+            for (TaggingPresetItems.Role i : r.roles) {
+                if (i.key != null) {
+                    PRESET_ROLE_CACHE.add(i.key);
                 }
             }
+        } else if (item instanceof TaggingPresetItems.CheckGroup) {
+            for (TaggingPresetItems.KeyedItem check : ((TaggingPresetItems.CheckGroup) item).checks) {
+                cachePresetItem(p, check);
+            }
         }
     }
 
@@ -270,7 +278,7 @@ public class AutoCompletionManager implements DataSetListener {
      * replies the auto completion values allowed for a specific key. Replies
      * an empty list if key is null or if key is not in {@link #getKeys()}.
      *
-     * @param key
+     * @param key OSM key
      * @return the list of auto completion values
      */
     protected List<String> getDataValues(String key) {
diff --git a/src/org/openstreetmap/josm/gui/tagging/ac/package-info.java b/src/org/openstreetmap/josm/gui/tagging/ac/package-info.java
new file mode 100644
index 0000000..610e44e
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/tagging/ac/package-info.java
@@ -0,0 +1,6 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Provides classes for handling autocompletion of tags.
+ */
+package org.openstreetmap.josm.gui.tagging.ac;
diff --git a/src/org/openstreetmap/josm/gui/tagging/package-info.java b/src/org/openstreetmap/josm/gui/tagging/package-info.java
new file mode 100644
index 0000000..a594a15
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/tagging/package-info.java
@@ -0,0 +1,7 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Provides classes for handling edition of OSM tags: tagging presets, tag tables, tag editors.
+ * Autocompletion of tags is dealt with a subpackage.
+ */
+package org.openstreetmap.josm.gui.tagging;
diff --git a/src/org/openstreetmap/josm/gui/util/AdjustmentSynchronizer.java b/src/org/openstreetmap/josm/gui/util/AdjustmentSynchronizer.java
index 1acf48f..bd0c73f 100644
--- a/src/org/openstreetmap/josm/gui/util/AdjustmentSynchronizer.java
+++ b/src/org/openstreetmap/josm/gui/util/AdjustmentSynchronizer.java
@@ -8,12 +8,12 @@ import java.awt.event.AdjustmentEvent;
 import java.awt.event.AdjustmentListener;
 import java.awt.event.ItemEvent;
 import java.awt.event.ItemListener;
-import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.List;
+import java.util.HashSet;
 import java.util.Map;
 import java.util.Observable;
 import java.util.Observer;
+import java.util.Set;
 
 import javax.swing.JCheckBox;
 
@@ -27,7 +27,7 @@ import org.openstreetmap.josm.tools.CheckParameterUtil;
  */
 public class AdjustmentSynchronizer implements AdjustmentListener {
 
-    private final List<Adjustable> synchronizedAdjustables;
+    private final Set<Adjustable> synchronizedAdjustables;
     private final Map<Adjustable, Boolean> enabledMap;
 
     private final Observable observable;
@@ -36,7 +36,7 @@ public class AdjustmentSynchronizer implements AdjustmentListener {
      * Constructs a new {@code AdjustmentSynchronizer}
      */
     public AdjustmentSynchronizer() {
-        synchronizedAdjustables = new ArrayList<>();
+        synchronizedAdjustables = new HashSet<>();
         enabledMap = new HashMap<>();
         observable = new Observable();
     }
@@ -61,7 +61,7 @@ public class AdjustmentSynchronizer implements AdjustmentListener {
      */
     @Override
     public void adjustmentValueChanged(AdjustmentEvent e) {
-        if (! enabledMap.get(e.getAdjustable()))
+        if (!enabledMap.get(e.getAdjustable()))
             return;
         for (Adjustable a : synchronizedAdjustables) {
             if (a != e.getAdjustable() && isParticipatingInSynchronizedScrolling(a)) {
@@ -77,8 +77,9 @@ public class AdjustmentSynchronizer implements AdjustmentListener {
      */
     protected void setParticipatingInSynchronizedScrolling(Adjustable adjustable, boolean isParticipating) {
         CheckParameterUtil.ensureParameterNotNull(adjustable, "adjustable");
-        if (! synchronizedAdjustables.contains(adjustable))
-            throw new IllegalStateException(tr("Adjustable {0} not registered yet. Cannot set participation in synchronized adjustment.", adjustable));
+        if (!synchronizedAdjustables.contains(adjustable))
+            throw new IllegalStateException(
+                    tr("Adjustable {0} not registered yet. Cannot set participation in synchronized adjustment.", adjustable));
 
         enabledMap.put(adjustable, isParticipating);
         observable.notifyObservers();
@@ -92,7 +93,7 @@ public class AdjustmentSynchronizer implements AdjustmentListener {
      * @throws IllegalStateException if adjustable is not registered for synchronized scrolling
      */
     protected boolean isParticipatingInSynchronizedScrolling(Adjustable adjustable) {
-        if (! synchronizedAdjustables.contains(adjustable))
+        if (!synchronizedAdjustables.contains(adjustable))
             throw new IllegalStateException(tr("Adjustable {0} not registered yet.", adjustable));
 
         return enabledMap.get(adjustable);
@@ -116,7 +117,7 @@ public class AdjustmentSynchronizer implements AdjustmentListener {
         CheckParameterUtil.ensureParameterNotNull(adjustable, "adjustable");
         CheckParameterUtil.ensureParameterNotNull(view, "view");
 
-        if (! synchronizedAdjustables.contains(adjustable)) {
+        if (!synchronizedAdjustables.contains(adjustable)) {
             participateInSynchronizedScrolling(adjustable);
         }
 
diff --git a/src/org/openstreetmap/josm/gui/util/AdvancedKeyPressDetector.java b/src/org/openstreetmap/josm/gui/util/AdvancedKeyPressDetector.java
index be3c2fa..d70b6d0 100644
--- a/src/org/openstreetmap/josm/gui/util/AdvancedKeyPressDetector.java
+++ b/src/org/openstreetmap/josm/gui/util/AdvancedKeyPressDetector.java
@@ -11,10 +11,10 @@ import java.awt.event.AWTEventListener;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.KeyEvent;
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
 import java.util.TreeSet;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 import javax.swing.JFrame;
 import javax.swing.SwingUtilities;
@@ -35,8 +35,8 @@ public class AdvancedKeyPressDetector implements AWTEventListener {
     private KeyEvent releaseEvent;
     private Timer timer;
 
-    private final List<KeyPressReleaseListener> keyListeners = new ArrayList<>();
-    private final List<ModifierListener> modifierListeners = new ArrayList<>();
+    private final List<KeyPressReleaseListener> keyListeners = new CopyOnWriteArrayList<>();
+    private final List<ModifierListener> modifierListeners = new CopyOnWriteArrayList<>();
     private int previousModifiers;
 
     private boolean enabled = true;
@@ -45,7 +45,7 @@ public class AdvancedKeyPressDetector implements AWTEventListener {
      * Adds an object that wants to receive key press and release events.
      * @param l listener to add
      */
-    public synchronized void addKeyListener(KeyPressReleaseListener l) {
+    public void addKeyListener(KeyPressReleaseListener l) {
         keyListeners.add(l);
     }
 
@@ -53,7 +53,7 @@ public class AdvancedKeyPressDetector implements AWTEventListener {
      * Adds an object that wants to receive key modifier changed events.
      * @param l listener to add
      */
-    public synchronized void addModifierListener(ModifierListener l) {
+    public void addModifierListener(ModifierListener l) {
         modifierListeners.add(l);
     }
 
@@ -61,7 +61,7 @@ public class AdvancedKeyPressDetector implements AWTEventListener {
      * Removes the listener.
      * @param l listener to remove
      */
-    public synchronized void removeKeyListener(KeyPressReleaseListener l) {
+    public void removeKeyListener(KeyPressReleaseListener l) {
         keyListeners.remove(l);
     }
 
@@ -69,7 +69,7 @@ public class AdvancedKeyPressDetector implements AWTEventListener {
      * Removes the key modifier listener.
      * @param l listener to remove
      */
-    public synchronized void removeModifierListener(ModifierListener l) {
+    public void removeModifierListener(ModifierListener l) {
         modifierListeners.remove(l);
     }
 
@@ -87,11 +87,9 @@ public class AdvancedKeyPressDetector implements AWTEventListener {
             public void actionPerformed(ActionEvent e) {
                 timer.stop();
                 if (set.remove(releaseEvent.getKeyCode()) && enabled) {
-                    synchronized (AdvancedKeyPressDetector.this) {
-                        if (isFocusInMainWindow()) {
-                            for (KeyPressReleaseListener q: keyListeners) {
-                                q.doKeyReleased(releaseEvent);
-                            }
+                    if (isFocusInMainWindow()) {
+                        for (KeyPressReleaseListener q: keyListeners) {
+                            q.doKeyReleased(releaseEvent);
                         }
                     }
                 }
@@ -104,15 +102,15 @@ public class AdvancedKeyPressDetector implements AWTEventListener {
      * lists of listeners are not cleared!
      */
     public void unregister() {
-        timer.stop();
+        if (timer != null) {
+            timer.stop();
+        }
         set.clear();
-        synchronized (this) {
-            if (!keyListeners.isEmpty()) {
-                Main.warn(tr("Some of the key listeners forgot to remove themselves: {0}"), keyListeners.toString());
-            }
-            if (!modifierListeners.isEmpty()) {
-                Main.warn(tr("Some of the key modifier listeners forgot to remove themselves: {0}"), modifierListeners.toString());
-            }
+        if (!keyListeners.isEmpty()) {
+            Main.warn(tr("Some of the key listeners forgot to remove themselves: {0}"), keyListeners.toString());
+        }
+        if (!modifierListeners.isEmpty()) {
+            Main.warn(tr("Some of the key modifier listeners forgot to remove themselves: {0}"), modifierListeners.toString());
         }
         try {
             Toolkit.getDefaultToolkit().removeAWTEventListener(this);
@@ -122,15 +120,19 @@ public class AdvancedKeyPressDetector implements AWTEventListener {
     }
 
     private void processKeyEvent(KeyEvent e) {
+        if (Main.isDebugEnabled()) {
+            Main.debug("AdvancedKeyPressDetector enabled="+enabled+" => processKeyEvent("+e+") from "+new Exception().getStackTrace()[2]);
+        }
         if (e.getID() == KeyEvent.KEY_PRESSED) {
             if (timer.isRunning()) {
                 timer.stop();
-            } else if (set.add((e.getKeyCode())) && enabled) {
-                synchronized (this) {
-                    if (isFocusInMainWindow()) {
-                        for (KeyPressReleaseListener q: keyListeners) {
-                            q.doKeyPressed(e);
+            } else if (set.add(e.getKeyCode()) && enabled) {
+                if (isFocusInMainWindow()) {
+                    for (KeyPressReleaseListener q: keyListeners) {
+                        if (Main.isDebugEnabled()) {
+                            Main.debug(q+" => doKeyPressed("+e+")");
                         }
+                        q.doKeyPressed(e);
                     }
                 }
             }
@@ -138,11 +140,12 @@ public class AdvancedKeyPressDetector implements AWTEventListener {
             if (timer.isRunning()) {
                 timer.stop();
                 if (set.remove(e.getKeyCode()) && enabled) {
-                    synchronized (this) {
-                        if (isFocusInMainWindow()) {
-                            for (KeyPressReleaseListener q: keyListeners) {
-                                q.doKeyReleased(e);
+                    if (isFocusInMainWindow()) {
+                        for (KeyPressReleaseListener q: keyListeners) {
+                            if (Main.isDebugEnabled()) {
+                                Main.debug(q+" => doKeyReleased("+e+")");
                             }
+                            q.doKeyReleased(e);
                         }
                     }
                 }
@@ -164,10 +167,8 @@ public class AdvancedKeyPressDetector implements AWTEventListener {
         int modif = ke.getModifiers();
         if (previousModifiers != modif) {
             previousModifiers = modif;
-            synchronized (this) {
-                for (ModifierListener m: modifierListeners) {
-                    m.modifiersChanged(modif);
-                }
+            for (ModifierListener m: modifierListeners) {
+                m.modifiersChanged(modif);
             }
         }
 
@@ -191,6 +192,9 @@ public class AdvancedKeyPressDetector implements AWTEventListener {
      */
     public final void setEnabled(boolean enabled) {
         this.enabled = enabled;
+        if (Main.isDebugEnabled()) {
+            Main.debug("AdvancedKeyPressDetector enabled="+enabled+" from "+new Exception().getStackTrace()[1]);
+        }
     }
 
     private boolean isFocusInMainWindow() {
diff --git a/src/org/openstreetmap/josm/gui/util/CellEditorSupport.java b/src/org/openstreetmap/josm/gui/util/CellEditorSupport.java
index 2d10f70..65db22d 100644
--- a/src/org/openstreetmap/josm/gui/util/CellEditorSupport.java
+++ b/src/org/openstreetmap/josm/gui/util/CellEditorSupport.java
@@ -2,8 +2,9 @@
 package org.openstreetmap.josm.gui.util;
 
 import java.util.ArrayList;
-import java.util.LinkedList;
+import java.util.LinkedHashSet;
 import java.util.List;
+import java.util.Set;
 
 import javax.swing.CellEditor;
 import javax.swing.event.CellEditorListener;
@@ -16,7 +17,7 @@ import javax.swing.event.ChangeEvent;
  */
 public class CellEditorSupport {
     private final CellEditor editor;
-    private final List<CellEditorListener> listeners;
+    private final Set<CellEditorListener> listeners;
 
     /**
      * Constructs a new {@code CellEditorSupport}.
@@ -24,7 +25,7 @@ public class CellEditorSupport {
      */
     public CellEditorSupport(CellEditor editor) {
         this.editor = editor;
-        this.listeners = new LinkedList<>();
+        this.listeners = new LinkedHashSet<>();
     }
 
     protected List<CellEditorListener> getListeners() {
@@ -39,7 +40,7 @@ public class CellEditorSupport {
      */
     public final void addCellEditorListener(CellEditorListener l) {
         synchronized (this) {
-            if (l != null && ! listeners.contains(l)) {
+            if (l != null && !listeners.contains(l)) {
                 listeners.add(l);
             }
         }
@@ -51,7 +52,7 @@ public class CellEditorSupport {
      */
     public final void removeCellEditorListener(CellEditorListener l) {
         synchronized (this) {
-            if (l != null &&listeners.contains(l)) {
+            if (l != null && listeners.contains(l)) {
                 listeners.remove(l);
             }
         }
diff --git a/src/org/openstreetmap/josm/gui/util/CursorManager.java b/src/org/openstreetmap/josm/gui/util/CursorManager.java
new file mode 100644
index 0000000..38a3135
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/util/CursorManager.java
@@ -0,0 +1,89 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.util;
+
+import java.awt.Component;
+import java.awt.Cursor;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+/**
+ * This class manages multiple cursors for multiple components.
+ * All components share the same cursor that was last set using {@link #setNewCursor(Cursor, Object)}
+ * 
+ * @author Michael Zangl
+ */
+public class CursorManager {
+
+    private final LinkedHashMap<Object, Cursor> cursors = new LinkedHashMap<>();
+    private final CopyOnWriteArrayList<Component> components = new CopyOnWriteArrayList<>();
+
+    /**
+     * Creates a new NavigationCursorManager
+     * @param forComponent The initial component the cursor should be managed for.
+     */
+    public CursorManager(Component forComponent) {
+        addComponent(forComponent);
+    }
+
+    /**
+     * Adds a component that this manager should send cursor changes to.
+     * @param forComponent The component.
+     */
+    public synchronized void addComponent(Component forComponent) {
+        components.addIfAbsent(forComponent);
+        forComponent.setCursor(getCurrentCursor());
+    }
+
+    /**
+     * Removes a component that this manager should send cursor changes to. The current cursor is not reset.
+     * @param forComponent The component.
+     */
+    public synchronized void removeComponent(Component forComponent) {
+        components.remove(forComponent);
+    }
+
+    /**
+     * Set new cursor.
+     * @param cursor The new cursor to use.
+     * @param reference A reference object that can be passed to the next set/reset calls to identify the caller.
+     */
+    public synchronized void setNewCursor(Cursor cursor, Object reference) {
+        if (reference == null) {
+            throw new NullPointerException("Cannot register a cursor that can never be removed.");
+        }
+        // re-insert to allow overriding.
+        cursors.remove(reference);
+        cursors.put(reference, cursor);
+        updateCursor();
+    }
+
+    /**
+     * Remove the new cursor that was set with the given reference object. and reset to previous
+     * @param reference A reference object that can be passed to the next set/reset calls to identify the caller.
+     */
+    public synchronized void resetCursor(Object reference) {
+        if (reference == null) {
+            return;
+        }
+        cursors.remove(reference);
+        updateCursor();
+    }
+
+    private void updateCursor() {
+        Cursor cursor = getCurrentCursor();
+        for (Component c : components) {
+            c.setCursor(cursor);
+        }
+    }
+
+    private Cursor getCurrentCursor() {
+        Iterator<Cursor> it = cursors.values().iterator();
+        Cursor cursor = null;
+        while (it.hasNext()) {
+            cursor = it.next();
+        }
+        return cursor;
+    }
+
+}
diff --git a/src/org/openstreetmap/josm/gui/util/GuiHelper.java b/src/org/openstreetmap/josm/gui/util/GuiHelper.java
index 7cd2391..614e612 100644
--- a/src/org/openstreetmap/josm/gui/util/GuiHelper.java
+++ b/src/org/openstreetmap/josm/gui/util/GuiHelper.java
@@ -9,7 +9,6 @@ import java.awt.Container;
 import java.awt.Dialog;
 import java.awt.Dimension;
 import java.awt.Font;
-import java.awt.GraphicsEnvironment;
 import java.awt.GridBagLayout;
 import java.awt.Image;
 import java.awt.Stroke;
@@ -21,9 +20,7 @@ import java.awt.event.HierarchyListener;
 import java.awt.event.KeyEvent;
 import java.awt.image.FilteredImageSource;
 import java.lang.reflect.InvocationTargetException;
-import java.util.Arrays;
 import java.util.Enumeration;
-import java.util.List;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.FutureTask;
@@ -67,7 +64,7 @@ public final class GuiHelper {
         root.setEnabled(enabled);
         Component[] children = root.getComponents();
         for (Component child : children) {
-            if(child instanceof Container) {
+            if (child instanceof Container) {
                 setEnabledRec((Container) child, enabled);
             } else {
                 child.setEnabled(enabled);
@@ -152,14 +149,14 @@ public final class GuiHelper {
      * @param continueToolTip Tooltip to display for "continue" button
      * @return true if the user wants to cancel, false if they want to continue
      */
-    public static final boolean warnUser(String title, String content, ImageIcon baseActionIcon, String continueToolTip) {
+    public static boolean warnUser(String title, String content, ImageIcon baseActionIcon, String continueToolTip) {
         ExtendedDialog dlg = new ExtendedDialog(Main.parent,
                 title, new String[] {tr("Cancel"), tr("Continue")});
         dlg.setContent(content);
         dlg.setButtonIcons(new Icon[] {
                     new ImageProvider("cancel").setMaxSize(ImageSizes.LARGEICON).get(),
                     new ImageProvider("upload").setMaxSize(ImageSizes.LARGEICON).addOverlay(
-                            new ImageOverlay(new ImageProvider("warning-small"), 0.5,0.5,1.0,1.0)).get()});
+                            new ImageOverlay(new ImageProvider("warning-small"), 0.5, 0.5, 1.0, 1.0)).get()});
         dlg.setToolTipTexts(new String[] {
                 tr("Cancel"),
                 continueToolTip});
@@ -176,7 +173,7 @@ public final class GuiHelper {
      * @param html HTML content to display (real error message)
      * @since 7312
      */
-    public static final void notifyUserHtmlError(Component parent, String title, String message, String html) {
+    public static void notifyUserHtmlError(Component parent, String title, String message, String html) {
         JPanel p = new JPanel(new GridBagLayout());
         p.add(new JLabel(message), GBC.eol());
         p.add(new JLabel(tr("Received error page:")), GBC.eol());
@@ -196,7 +193,7 @@ public final class GuiHelper {
      * @return The disabled (grayed) version of the specified image, brightened by 20%.
      * @since 5484
      */
-    public static final Image getDisabledImage(Image image) {
+    public static Image getDisabledImage(Image image) {
         return Toolkit.getDefaultToolkit().createImage(
                 new FilteredImageSource(image.getSource(), new GrayFilter(true, 20)));
     }
@@ -207,7 +204,7 @@ public final class GuiHelper {
      * @return The disabled (grayed) version of the specified icon, brightened by 20%.
      * @since 5484
      */
-    public static final ImageIcon getDisabledIcon(ImageIcon icon) {
+    public static ImageIcon getDisabledIcon(ImageIcon icon) {
         return new ImageIcon(getDisabledImage(icon.getImage()));
     }
 
@@ -220,14 +217,14 @@ public final class GuiHelper {
      * @return {@code pane}
      * @since 5493
      */
-    public static final Component prepareResizeableOptionPane(final Component pane, final Dimension minDimension) {
+    public static Component prepareResizeableOptionPane(final Component pane, final Dimension minDimension) {
         if (pane != null) {
             pane.addHierarchyListener(new HierarchyListener() {
                 @Override
                 public void hierarchyChanged(HierarchyEvent e) {
                     Window window = SwingUtilities.getWindowAncestor(pane);
                     if (window instanceof Dialog) {
-                        Dialog dialog = (Dialog)window;
+                        Dialog dialog = (Dialog) window;
                         if (!dialog.isResizable()) {
                             dialog.setResizable(true);
                             if (minDimension != null) {
@@ -249,7 +246,7 @@ public final class GuiHelper {
      * @return The (started) timer.
      * @since 5735
      */
-    public static final Timer scheduleTimer(int initialDelay, ActionListener actionListener, boolean repeats) {
+    public static Timer scheduleTimer(int initialDelay, ActionListener actionListener, boolean repeats) {
         Timer timer = new Timer(initialDelay, actionListener);
         timer.setRepeats(repeats);
         timer.start();
@@ -264,18 +261,18 @@ public final class GuiHelper {
     public static Stroke getCustomizedStroke(String code) {
         String[] s = code.trim().split("[^\\.0-9]+");
 
-        if (s.length==0) return new BasicStroke();
+        if (s.length == 0) return new BasicStroke();
         float w;
         try {
             w = Float.parseFloat(s[0]);
         } catch (NumberFormatException ex) {
             w = 1.0f;
         }
-        if (s.length>1) {
-            float[] dash= new float[s.length-1];
+        if (s.length > 1) {
+            float[] dash = new float[s.length-1];
             float sumAbs = 0;
             try {
-                for (int i=0; i<s.length-1; i++) {
+                for (int i = 0; i < s.length-1; i++) {
                    dash[i] = Float.parseFloat(s[i+1]);
                    sumAbs += Math.abs(dash[i]);
                 }
@@ -291,7 +288,7 @@ public final class GuiHelper {
             return new BasicStroke(w, BasicStroke.CAP_BUTT,
                     BasicStroke.JOIN_MITER, 10.0f, dash, 0.0f);
         } else {
-            if (w>1) {
+            if (w > 1) {
                 // thick stroke
                 return new BasicStroke(w, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);
             } else {
@@ -318,33 +315,10 @@ public final class GuiHelper {
 
     /**
      * Gets the font used to display JOSM title in about dialog and splash screen.
-     * @return By order or priority, the first font available in local fonts:
-     *         1. Helvetica Bold 20
-     *         2. Calibri Bold 23
-     *         3. Arial Bold 20
-     *         4. SansSerif Bold 20
-     *         Except if current language is Khmer, where it will be current font at size 20
      * @since 5797
      */
     public static Font getTitleFont() {
-        List<String> fonts = Arrays.asList(GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames());
-        // Special font for Khmer script
-        if ("km".equals(LanguageInfo.getJOSMLocaleCode())) {
-            return UIManager.getFont("Label.font").deriveFont(20.0f);
-        }
-        // Helvetica is the preferred choice but is not available by default on Windows
-        // (https://www.microsoft.com/typography/fonts/product.aspx?pid=161)
-        if (fonts.contains("Helvetica")) {
-            return new Font("Helvetica", Font.BOLD, 20);
-        // Calibri is the default Windows font since Windows Vista but is not available on older versions of Windows, where Arial is preferred
-        } else if (fonts.contains("Calibri")) {
-            return new Font("Calibri", Font.BOLD, 23);
-        } else if (fonts.contains("Arial")) {
-            return new Font("Arial", Font.BOLD, 20);
-        // No luck, nothing found, fallback to one of the 5 fonts provided with Java (Serif, SansSerif, Monospaced, Dialog, and DialogInput)
-        } else {
-            return new Font("SansSerif", Font.BOLD, 20);
-        }
+        return new Font("SansSerif", Font.BOLD, 23);
     }
 
     /**
@@ -375,8 +349,8 @@ public final class GuiHelper {
     /**
      * Sets a global font for all UI, replacing default font of current look and feel.
      * @param name Font name. It is up to the caller to make sure the font exists
-     * @since 7896
      * @throws IllegalArgumentException if name is null
+     * @since 7896
      */
     public static void setUIFont(String name) {
         CheckParameterUtil.ensureParameterNotNull(name, "name");
@@ -386,7 +360,7 @@ public final class GuiHelper {
             Object key = keys.nextElement();
             Object value = UIManager.get(key);
             if (value != null && value instanceof FontUIResource) {
-                FontUIResource fui = (FontUIResource)value;
+                FontUIResource fui = (FontUIResource) value;
                 UIManager.put(key, new FontUIResource(name, fui.getStyle(), fui.getSize()));
             }
         }
diff --git a/src/org/openstreetmap/josm/gui/util/HighlightHelper.java b/src/org/openstreetmap/josm/gui/util/HighlightHelper.java
index 366b6f4..73a6f67 100644
--- a/src/org/openstreetmap/josm/gui/util/HighlightHelper.java
+++ b/src/org/openstreetmap/josm/gui/util/HighlightHelper.java
@@ -23,7 +23,7 @@ public class HighlightHelper {
      * Highlight and remember given primitives
      * @param prims - primitives to highlight/unhighlight
      */
-    public boolean highlight(Collection <? extends OsmPrimitive> prims) {
+    public boolean highlight(Collection<? extends OsmPrimitive> prims) {
         return highlight(prims, false);
     }
 
@@ -32,7 +32,7 @@ public class HighlightHelper {
      * @param prims - primitives to highlight/unhighlight
      * @param only - remove previous highlighting
      */
-    public boolean highlight(Collection <? extends OsmPrimitive> prims, boolean only) {
+    public boolean highlight(Collection<? extends OsmPrimitive> prims, boolean only) {
         boolean needsRepaint = false;
         if (only) {
             Iterator<OsmPrimitive> it = highlightedPrimitives.iterator();
@@ -56,7 +56,7 @@ public class HighlightHelper {
      * Highlight and remember given primitives, forgetting previously highlighted by this instance
      * @param prims - primitives to highlight/unhighlight
      */
-    public boolean highlightOnly(Collection <? extends OsmPrimitive> prims) {
+    public boolean highlightOnly(Collection<? extends OsmPrimitive> prims) {
         return highlight(prims, true);
     }
 
@@ -117,8 +117,8 @@ public class HighlightHelper {
      */
     public void findAllHighlighted() {
         DataSet ds = Main.main.getCurrentDataSet();
-        if (ds!=null) {
-            highlightedPrimitives.addAll( ds.allNonDeletedPrimitives() );
+        if (ds != null) {
+            highlightedPrimitives.addAll(ds.allNonDeletedPrimitives());
         }
     }
 
@@ -127,7 +127,7 @@ public class HighlightHelper {
      */
     public static void clearAllHighlighted() {
         DataSet ds = Main.main.getCurrentDataSet();
-        if (ds!=null) {
+        if (ds != null) {
             for (OsmPrimitive p: ds.allNonDeletedPrimitives()) {
                 p.setHighlighted(false);
             }
diff --git a/src/org/openstreetmap/josm/gui/util/KeyPressReleaseListener.java b/src/org/openstreetmap/josm/gui/util/KeyPressReleaseListener.java
index 8412571..833a1d0 100644
--- a/src/org/openstreetmap/josm/gui/util/KeyPressReleaseListener.java
+++ b/src/org/openstreetmap/josm/gui/util/KeyPressReleaseListener.java
@@ -11,10 +11,11 @@ public interface KeyPressReleaseListener {
      * This is called when key press event is actually pressed
      * (no fake events while holding key)
      */
-    public void doKeyPressed(KeyEvent e);
+    void doKeyPressed(KeyEvent e);
+
     /**
      * This is called when key press event is actually released
      * (no fake events while holding key)
      */
-    public void doKeyReleased(KeyEvent e);
+    void doKeyReleased(KeyEvent e);
 }
diff --git a/src/org/openstreetmap/josm/gui/util/ModifierListener.java b/src/org/openstreetmap/josm/gui/util/ModifierListener.java
index 2f24081..ace9692 100644
--- a/src/org/openstreetmap/josm/gui/util/ModifierListener.java
+++ b/src/org/openstreetmap/josm/gui/util/ModifierListener.java
@@ -6,5 +6,5 @@ package org.openstreetmap.josm.gui.util;
  * @since 7217
  */
 public interface ModifierListener {
-    public void modifiersChanged(int modifiers);
+    void modifiersChanged(int modifiers);
 }
diff --git a/src/org/openstreetmap/josm/gui/util/RedirectInputMap.java b/src/org/openstreetmap/josm/gui/util/RedirectInputMap.java
index 4fc5447..ab7e2ed 100644
--- a/src/org/openstreetmap/josm/gui/util/RedirectInputMap.java
+++ b/src/org/openstreetmap/josm/gui/util/RedirectInputMap.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.util;
 
 import javax.swing.ComponentInputMap;
diff --git a/src/org/openstreetmap/josm/gui/util/RotationAngle.java b/src/org/openstreetmap/josm/gui/util/RotationAngle.java
index 867ea86..ce55803 100644
--- a/src/org/openstreetmap/josm/gui/util/RotationAngle.java
+++ b/src/org/openstreetmap/josm/gui/util/RotationAngle.java
@@ -1,6 +1,8 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.util;
 
+import java.util.Locale;
+
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Way;
@@ -38,13 +40,11 @@ public abstract class RotationAngle {
      * Parses the rotation angle from the specified {@code string}.
      */
     public static RotationAngle buildStaticRotation(final String string) {
-        final double value;
         try {
-            value = parseCardinalRotation(string);
-        } catch (IllegalArgumentException ignore) {
-            throw new IllegalArgumentException("Invalid string: " + string);
+            return buildStaticRotation(parseCardinalRotation(string));
+        } catch (IllegalArgumentException e) {
+            throw new IllegalArgumentException("Invalid string: " + string, e);
         }
-        return buildStaticRotation(value);
     }
 
     /**
@@ -56,7 +56,7 @@ public abstract class RotationAngle {
      * @return the angle in radians
      */
     public static double parseCardinalRotation(final String cardinal) {
-        switch (cardinal.toLowerCase()) {
+        switch (cardinal.toLowerCase(Locale.ENGLISH)) {
             case "n":
             case "north":
                 return Math.toRadians(0);
diff --git a/src/org/openstreetmap/josm/gui/util/TableHelper.java b/src/org/openstreetmap/josm/gui/util/TableHelper.java
index 84d44b0..5c04929 100644
--- a/src/org/openstreetmap/josm/gui/util/TableHelper.java
+++ b/src/org/openstreetmap/josm/gui/util/TableHelper.java
@@ -10,11 +10,11 @@ import javax.swing.table.TableCellRenderer;
  * The class that provide common JTable customization methods
  */
 public final class TableHelper {
-    
+
     private TableHelper() {
         // Hide default constructor for utils classes
     }
-    
+
     /**
      * (originally from @class org.openstreetmap.josm.gui.preferences.SourceEditor)
      * adjust the preferred width of column col to the maximum preferred width of the cells
@@ -22,7 +22,7 @@ public final class TableHelper {
      */
     public static void adjustColumnWidth(JTable tbl, int col, int maxColumnWidth) {
         int maxwidth = 0;
-        for (int row=0; row<tbl.getRowCount(); row++) {
+        for (int row = 0; row < tbl.getRowCount(); row++) {
             TableCellRenderer tcr = tbl.getCellRenderer(row, col);
             Object val = tbl.getValueAt(row, col);
             Component comp = tcr.getTableCellRendererComponent(tbl, val, false, false, row, col);
diff --git a/src/org/openstreetmap/josm/gui/util/package-info.java b/src/org/openstreetmap/josm/gui/util/package-info.java
new file mode 100644
index 0000000..145dc90
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/util/package-info.java
@@ -0,0 +1,6 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Provides GUI utility classes.
+ */
+package org.openstreetmap.josm.gui.util;
diff --git a/src/org/openstreetmap/josm/gui/widgets/AbstractFileChooser.java b/src/org/openstreetmap/josm/gui/widgets/AbstractFileChooser.java
index b82f81d..4e3542b 100644
--- a/src/org/openstreetmap/josm/gui/widgets/AbstractFileChooser.java
+++ b/src/org/openstreetmap/josm/gui/widgets/AbstractFileChooser.java
@@ -71,8 +71,8 @@ public abstract class AbstractFileChooser {
      * either typing the filename into the UI or selecting the
      * file from a list in the UI.
      *
-     * @see #setSelectedFile
      * @return the selected file
+     * @see #setSelectedFile
      */
     public abstract File getSelectedFile();
 
@@ -161,10 +161,6 @@ public abstract class AbstractFileChooser {
      * Sets the file chooser to allow multiple file selections.
      *
      * @param multiple true if multiple files may be selected
-     * @beaninfo
-     *       bound: true
-     * description: Sets multiple file selection mode.
-     *
      * @see #isMultiSelectionEnabled
      */
     public abstract void setMultiSelectionEnabled(boolean multiple);
@@ -174,16 +170,15 @@ public abstract class AbstractFileChooser {
      * not the current directory, changes the current directory
      * to be the file's parent directory.
      *
-     * @see #getSelectedFile
-     *
      * @param file the selected file
+     * @see #getSelectedFile
      */
     public abstract void setSelectedFile(File file);
 
     /**
      * Pops up an "Open File" file chooser dialog. Note that the
      * text that appears in the approve button is determined by
-     * the L&F.
+     * the L&F.
      *
      * @param    parent  the parent component of the dialog,
      *                  can be <code>null</code>;
@@ -203,7 +198,7 @@ public abstract class AbstractFileChooser {
     /**
      * Pops up a "Save File" file chooser dialog. Note that the
      * text that appears in the approve button is determined by
-     * the L&F.
+     * the L&F.
      *
      * @param    parent  the parent component of the dialog,
      *                  can be <code>null</code>;
diff --git a/src/org/openstreetmap/josm/gui/widgets/AbstractTextComponentValidator.java b/src/org/openstreetmap/josm/gui/widgets/AbstractTextComponentValidator.java
index fb294b6..60cab6f 100644
--- a/src/org/openstreetmap/josm/gui/widgets/AbstractTextComponentValidator.java
+++ b/src/org/openstreetmap/josm/gui/widgets/AbstractTextComponentValidator.java
@@ -33,7 +33,7 @@ import org.openstreetmap.josm.tools.CheckParameterUtil;
  */
 public abstract class AbstractTextComponentValidator implements ActionListener, FocusListener, DocumentListener, PropertyChangeListener{
     private static final Border ERROR_BORDER = BorderFactory.createLineBorder(Color.RED, 1);
-    private static final Color ERROR_BACKGROUND =  new Color(255,224,224);
+    private static final Color ERROR_BACKGROUND =  new Color(255, 224, 224);
 
     private JTextComponent tc;
     /** remembers whether the content of the text component is currently valid or not; null means,
@@ -45,12 +45,11 @@ public abstract class AbstractTextComponentValidator implements ActionListener,
 
     protected void feedbackInvalid(String msg) {
         if (valid == null || valid || !Objects.equals(msg, this.msg)) {
-            // only provide feedback if the validity has changed. This avoids
-            // unnecessary UI updates.
+            // only provide feedback if the validity has changed. This avoids unnecessary UI updates.
             tc.setBorder(ERROR_BORDER);
             tc.setBackground(ERROR_BACKGROUND);
             tc.setToolTipText(msg);
-            valid = false;
+            valid = Boolean.FALSE;
             this.msg = msg;
         }
     }
@@ -61,12 +60,11 @@ public abstract class AbstractTextComponentValidator implements ActionListener,
 
     protected void feedbackValid(String msg) {
         if (valid == null || !valid || !Objects.equals(msg, this.msg)) {
-            // only provide feedback if the validity has changed. This avoids
-            // unnecessary UI updates.
+            // only provide feedback if the validity has changed. This avoids unnecessary UI updates.
             tc.setBorder(UIManager.getBorder("TextField.border"));
             tc.setBackground(UIManager.getColor("TextField.background"));
             tc.setToolTipText(msg == null ? "" : msg);
-            valid = true;
+            valid = Boolean.TRUE;
             this.msg = msg;
         }
     }
@@ -109,7 +107,7 @@ public abstract class AbstractTextComponentValidator implements ActionListener,
         }
         if (addActionListener) {
             if (tc instanceof JosmTextField) {
-                JosmTextField tf = (JosmTextField)tc;
+                JosmTextField tf = (JosmTextField) tc;
                 tf.addActionListener(this);
             }
         }
@@ -173,7 +171,7 @@ public abstract class AbstractTextComponentValidator implements ActionListener,
     @Override
     public void propertyChange(PropertyChangeEvent evt) {
         if ("enabled".equals(evt.getPropertyName())) {
-            boolean enabled = (Boolean)evt.getNewValue();
+            boolean enabled = (Boolean) evt.getNewValue();
             if (enabled) {
                 validate();
             } else {
diff --git a/src/org/openstreetmap/josm/gui/widgets/BoundingBoxSelectionPanel.java b/src/org/openstreetmap/josm/gui/widgets/BoundingBoxSelectionPanel.java
index 759370c..cc2de9f 100644
--- a/src/org/openstreetmap/josm/gui/widgets/BoundingBoxSelectionPanel.java
+++ b/src/org/openstreetmap/josm/gui/widgets/BoundingBoxSelectionPanel.java
@@ -32,9 +32,9 @@ public class BoundingBoxSelectionPanel extends JPanel {
 
     protected void buildInputFields() {
         tfLatLon = new JosmTextField[4];
-        for(int i=0; i< 4; i++) {
+        for (int i = 0; i < 4; i++) {
             tfLatLon[i] = new JosmTextField(11);
-            tfLatLon[i].setMinimumSize(new Dimension(100,new JosmTextField().getMinimumSize().height));
+            tfLatLon[i].setMinimumSize(new Dimension(100, new JosmTextField().getMinimumSize().height));
             SelectAllOnFocusGainedDecorator.decorate(tfLatLon[i]);
         }
         LatitudeValidator.decorate(tfLatLon[0]);
@@ -45,7 +45,7 @@ public class BoundingBoxSelectionPanel extends JPanel {
 
     protected final void build() {
         buildInputFields();
-        setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
         setLayout(new GridBagLayout());
         tfOsmUrl.getDocument().addDocumentListener(new OsmUrlRefresher());
 
@@ -54,13 +54,13 @@ public class BoundingBoxSelectionPanel extends JPanel {
         // side effects that will cancel out the newly made selection otherwise.
         tfOsmUrl.addFocusListener(new SelectAllOnFocusGainedDecorator());
 
-        add(new JLabel(tr("Min. latitude")), GBC.std().insets(0,0,3,5));
-        add(tfLatLon[0], GBC.std().insets(0,0,3,5));
-        add(new JLabel(tr("Min. longitude")), GBC.std().insets(0,0,3,5));
+        add(new JLabel(tr("Min. latitude")), GBC.std().insets(0, 0, 3, 5));
+        add(tfLatLon[0], GBC.std().insets(0, 0, 3, 5));
+        add(new JLabel(tr("Min. longitude")), GBC.std().insets(0, 0, 3, 5));
         add(tfLatLon[1], GBC.eol());
-        add(new JLabel(tr("Max. latitude")), GBC.std().insets(0,0,3,5));
-        add(tfLatLon[2], GBC.std().insets(0,0,3,5));
-        add(new JLabel(tr("Max. longitude")), GBC.std().insets(0,0,3,5));
+        add(new JLabel(tr("Max. latitude")), GBC.std().insets(0, 0, 3, 5));
+        add(tfLatLon[2], GBC.std().insets(0, 0, 3, 5));
+        add(new JLabel(tr("Max. longitude")), GBC.std().insets(0, 0, 3, 5));
         add(tfLatLon[3], GBC.eol());
 
         GridBagConstraints gc = new GridBagConstraints();
@@ -69,14 +69,17 @@ public class BoundingBoxSelectionPanel extends JPanel {
         gc.gridwidth = 4;
         gc.fill = GridBagConstraints.HORIZONTAL;
         gc.weightx = 1.0;
-        gc.insets = new Insets(10,0,0,3);
+        gc.insets = new Insets(10, 0, 0, 3);
         add(new JMultilineLabel(tr("URL from www.openstreetmap.org (you can paste a download URL here to specify a bounding box)")), gc);
 
         gc.gridy = 3;
-        gc.insets = new Insets(3,0,0,3);
+        gc.insets = new Insets(3, 0, 0, 3);
         add(tfOsmUrl, gc);
     }
 
+    /**
+     * Constructs a new {@code BoundingBoxSelectionPanel}.
+     */
     public BoundingBoxSelectionPanel() {
         build();
     }
@@ -86,28 +89,28 @@ public class BoundingBoxSelectionPanel extends JPanel {
     }
 
     public Bounds getBoundingBox() {
-        double minlon, minlat, maxlon,maxlat;
+        double minlon, minlat, maxlon, maxlat;
         try {
             minlat = Double.parseDouble(tfLatLon[0].getText().trim());
             minlon = Double.parseDouble(tfLatLon[1].getText().trim());
             maxlat = Double.parseDouble(tfLatLon[2].getText().trim());
             maxlon = Double.parseDouble(tfLatLon[3].getText().trim());
-        } catch(NumberFormatException e) {
+        } catch (NumberFormatException e) {
             return null;
         }
         if (!LatLon.isValidLon(minlon) || !LatLon.isValidLon(maxlon)
-                || !LatLon.isValidLat(minlat) || ! LatLon.isValidLat(maxlat))
+                || !LatLon.isValidLat(minlat) || !LatLon.isValidLat(maxlat))
             return null;
         if (minlon > maxlon)
             return null;
         if (minlat > maxlat)
             return null;
-        return new Bounds(minlon,minlat,maxlon,maxlat);
+        return new Bounds(minlon, minlat, maxlon, maxlat);
     }
 
     private boolean parseURL() {
         Bounds b = OsmUrlToBounds.parse(tfOsmUrl.getText());
-        if(b == null) return false;
+        if (b == null) return false;
         updateBboxFields(b);
         return true;
     }
@@ -135,7 +138,7 @@ public class BoundingBoxSelectionPanel extends JPanel {
             double value = 0;
             try {
                 value = Double.parseDouble(getComponent().getText());
-            } catch(NumberFormatException ex) {
+            } catch (NumberFormatException ex) {
                 feedbackInvalid(tr("The string ''{0}'' is not a valid double value.", getComponent().getText()));
                 return;
             }
@@ -151,7 +154,7 @@ public class BoundingBoxSelectionPanel extends JPanel {
             double value = 0;
             try {
                 value = Double.parseDouble(getComponent().getText());
-            } catch(NumberFormatException ex) {
+            } catch (NumberFormatException ex) {
                 return false;
             }
             if (!LatLon.isValidLat(value))
@@ -175,7 +178,7 @@ public class BoundingBoxSelectionPanel extends JPanel {
             double value = 0;
             try {
                 value = Double.parseDouble(getComponent().getText());
-            } catch(NumberFormatException ex) {
+            } catch (NumberFormatException ex) {
                 feedbackInvalid(tr("The string ''{0}'' is not a valid double value.", getComponent().getText()));
                 return;
             }
@@ -191,7 +194,7 @@ public class BoundingBoxSelectionPanel extends JPanel {
             double value = 0;
             try {
                 value = Double.parseDouble(getComponent().getText());
-            } catch(NumberFormatException ex) {
+            } catch (NumberFormatException ex) {
                 return false;
             }
             if (!LatLon.isValidLon(value))
@@ -202,10 +205,18 @@ public class BoundingBoxSelectionPanel extends JPanel {
 
     class OsmUrlRefresher implements DocumentListener {
         @Override
-        public void changedUpdate(DocumentEvent e) { parseURL(); }
+        public void changedUpdate(DocumentEvent e) {
+            parseURL();
+        }
+
         @Override
-        public void insertUpdate(DocumentEvent e) { parseURL(); }
+        public void insertUpdate(DocumentEvent e) {
+            parseURL();
+        }
+
         @Override
-        public void removeUpdate(DocumentEvent e) { parseURL(); }
+        public void removeUpdate(DocumentEvent e) {
+            parseURL();
+        }
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/widgets/ChangesetIdTextField.java b/src/org/openstreetmap/josm/gui/widgets/ChangesetIdTextField.java
index c27a114..996240f 100644
--- a/src/org/openstreetmap/josm/gui/widgets/ChangesetIdTextField.java
+++ b/src/org/openstreetmap/josm/gui/widgets/ChangesetIdTextField.java
@@ -5,6 +5,8 @@ import static org.openstreetmap.josm.tools.I18n.tr;
 
 import javax.swing.text.JTextComponent;
 
+import org.openstreetmap.josm.Main;
+
 /**
  * A text field designed to enter a single OSM changeset ID.
  * @since 5765
@@ -25,7 +27,7 @@ public class ChangesetIdTextField extends AbstractIdTextField<ChangesetIdTextFie
     public final int getChangesetId() {
         return validator.id;
     }
-    
+
     /**
      * Reads the changeset id.
      * @return true if a valid changeset id has been successfully read, false otherwise
@@ -35,12 +37,12 @@ public class ChangesetIdTextField extends AbstractIdTextField<ChangesetIdTextFie
     public boolean readIds() {
         return validator.readChangesetId();
     }
-    
+
     /**
      * Validator for a changeset ID entered in a {@link JTextComponent}.
      */
     public static class ChangesetIdValidator extends AbstractTextComponentValidator {
-        
+
         private int id = 0;
 
         /**
@@ -64,7 +66,7 @@ public class ChangesetIdTextField extends AbstractIdTextField<ChangesetIdTextFie
                 feedbackValid(tr("Please enter an integer value > 0"));
             }
         }
-        
+
         /**
          * Reads the changeset id.
          * @return true if a valid changeset id has been successfully read, false otherwise
@@ -79,8 +81,11 @@ public class ChangesetIdTextField extends AbstractIdTextField<ChangesetIdTextFie
                         id = changesetId;
                         return true;
                     }
-                } catch(NumberFormatException e) {
+                } catch (NumberFormatException e) {
                     // Ignored
+                    if (Main.isTraceEnabled()) {
+                        Main.trace(e.getMessage());
+                    }
                 }
             }
             return false;
diff --git a/src/org/openstreetmap/josm/gui/widgets/ComboBoxHistory.java b/src/org/openstreetmap/josm/gui/widgets/ComboBoxHistory.java
index 040fba2..784e47e 100644
--- a/src/org/openstreetmap/josm/gui/widgets/ComboBoxHistory.java
+++ b/src/org/openstreetmap/josm/gui/widgets/ComboBoxHistory.java
@@ -34,7 +34,7 @@ public class ComboBoxHistory extends DefaultComboBoxModel<AutoCompletionListItem
         // so that it looks like a move to the top
         for (int i = 0; i < getSize(); i++) {
             String oldEntry = getElementAt(i).getValue();
-            if(oldEntry.equals(newEntry)) {
+            if (oldEntry.equals(newEntry)) {
                 removeElementAt(i);
             }
         }
@@ -43,7 +43,7 @@ public class ComboBoxHistory extends DefaultComboBoxModel<AutoCompletionListItem
         insertElementAt(o, 0);
 
         // remove an element, if the history gets too large
-        if(getSize()> maxSize) {
+        if (getSize() > maxSize) {
             removeElementAt(getSize()-1);
         }
 
@@ -66,7 +66,7 @@ public class ComboBoxHistory extends DefaultComboBoxModel<AutoCompletionListItem
 
             @Override
             public boolean hasNext() {
-                if(position < getSize()-1 && getSize()>0)
+                if (position < getSize()-1 && getSize() > 0)
                     return true;
                 return false;
             }
@@ -81,7 +81,7 @@ public class ComboBoxHistory extends DefaultComboBoxModel<AutoCompletionListItem
 
     public void setItemsAsString(List<String> items) {
         removeAllElements();
-        for (int i = items.size()-1; i>=0; i--) {
+        for (int i = items.size()-1; i >= 0; i--) {
             addElement(new AutoCompletionListItem(items.get(i)));
         }
     }
diff --git a/src/org/openstreetmap/josm/gui/widgets/DateEditorWithSlider.java b/src/org/openstreetmap/josm/gui/widgets/DateEditorWithSlider.java
index dfdfd39..2253efb 100644
--- a/src/org/openstreetmap/josm/gui/widgets/DateEditorWithSlider.java
+++ b/src/org/openstreetmap/josm/gui/widgets/DateEditorWithSlider.java
@@ -31,7 +31,7 @@ public class DateEditorWithSlider extends JPanel {
     private JSlider slider;
     private Date dateMin;
     private Date dateMax;
-    private static final int MAX_SLIDER=300;
+    private static final int MAX_SLIDER = 300;
     private boolean watchSlider = true;
 
     private transient List<ChangeListener> listeners = new ArrayList<>();
@@ -42,25 +42,25 @@ public class DateEditorWithSlider extends JPanel {
      */
     public DateEditorWithSlider(String labelText) {
         super(new GridBagLayout());
-        spinner = new JSpinner( new SpinnerDateModel() );
-        String pattern = ((SimpleDateFormat)DateUtils.getDateFormat(DateFormat.DEFAULT)).toPattern();
-        JSpinner.DateEditor timeEditor = new JSpinner.DateEditor(spinner,pattern);
+        spinner = new JSpinner(new SpinnerDateModel());
+        String pattern = ((SimpleDateFormat) DateUtils.getDateFormat(DateFormat.DEFAULT)).toPattern();
+        JSpinner.DateEditor timeEditor = new JSpinner.DateEditor(spinner, pattern);
         spinner.setEditor(timeEditor);
 
         spinner.setPreferredSize(new Dimension(spinner.getPreferredSize().width+5,
         spinner.getPreferredSize().height));
 
-        slider = new JSlider(0,MAX_SLIDER);
+        slider = new JSlider(0, MAX_SLIDER);
         spinner.addChangeListener(new ChangeListener() {
             @Override
             public void stateChanged(ChangeEvent e) {
                 int i = slider.getValue();
                 Date d = (Date) spinner.getValue();
                 int j = intFromDate(d);
-                if (i!=j) {
-                    watchSlider=false;
+                if (i != j) {
+                    watchSlider = false;
                     slider.setValue(j);
-                    watchSlider=true;
+                    watchSlider = true;
                 }
                 for (ChangeListener l : listeners) {
                     l.stateChanged(e);
@@ -78,9 +78,9 @@ public class DateEditorWithSlider extends JPanel {
                 }
             }
         });
-        add(new JLabel(labelText),GBC.std());
-        add(spinner,GBC.std().insets(10,0,0,0));
-        add(slider,GBC.eol().insets(10,0,0,0).fill(GBC.HORIZONTAL));
+        add(new JLabel(labelText), GBC.std());
+        add(spinner, GBC.std().insets(10, 0, 0, 0));
+        add(slider, GBC.eol().insets(10, 0, 0, 0).fill(GBC.HORIZONTAL));
 
         dateMin = new Date(0);
         dateMax = new Date();
@@ -88,11 +88,11 @@ public class DateEditorWithSlider extends JPanel {
 
     protected Date dateFromInt(int value) {
         double k = 1.0*value/MAX_SLIDER;
-        return new Date((long)(dateMax.getTime()*k+ dateMin.getTime()*(1-k)));
+        return new Date((long) (dateMax.getTime()*k+ dateMin.getTime()*(1-k)));
     }
 
     protected int intFromDate(Date date) {
-        return (int)(300.0*(date.getTime()-dateMin.getTime()) /
+        return (int) (300.0*(date.getTime()-dateMin.getTime()) /
                 (dateMax.getTime()-dateMin.getTime()));
     }
 
diff --git a/src/org/openstreetmap/josm/gui/widgets/DisableShortcutsOnFocusGainedTextField.java b/src/org/openstreetmap/josm/gui/widgets/DisableShortcutsOnFocusGainedTextField.java
index 1e2c41c..c606631 100644
--- a/src/org/openstreetmap/josm/gui/widgets/DisableShortcutsOnFocusGainedTextField.java
+++ b/src/org/openstreetmap/josm/gui/widgets/DisableShortcutsOnFocusGainedTextField.java
@@ -28,17 +28,16 @@ import org.openstreetmap.josm.tools.Shortcut;
 public class DisableShortcutsOnFocusGainedTextField extends JosmTextField {
 
     /**
-     * Constructs a new <code>TextField</code>.  A default model is created,
-     * the initial string is <code>null</code>,
-     * and the number of columns is set to 0.
+     * Constructs a new <code>TextField</code>. A default model is created,
+     * the initial string is <code>null</code>, and the number of columns is set to 0.
      */
     public DisableShortcutsOnFocusGainedTextField() {
+        // Contents can be set with parent methods
     }
 
     /**
      * Constructs a new <code>TextField</code> initialized with the
-     * specified text. A default model is created and the number of
-     * columns is 0.
+     * specified text. A default model is created and the number of columns is 0.
      *
      * @param text the text to be displayed, or <code>null</code>
      */
@@ -47,15 +46,12 @@ public class DisableShortcutsOnFocusGainedTextField extends JosmTextField {
     }
 
     /**
-     * Constructs a new empty <code>TextField</code> with the specified
-     * number of columns.
-     * A default model is created and the initial string is set to
-     * <code>null</code>.
+     * Constructs a new empty <code>TextField</code> with the specified number of columns.
+     * A default model is created and the initial string is set to <code>null</code>.
      *
      * @param columns  the number of columns to use to calculate
      *   the preferred width; if columns is set to zero, the
-     *   preferred width will be whatever naturally results from
-     *   the component implementation
+     *   preferred width will be whatever naturally results from the component implementation
      */
     public DisableShortcutsOnFocusGainedTextField(int columns) {
         super(columns);
@@ -68,8 +64,7 @@ public class DisableShortcutsOnFocusGainedTextField extends JosmTextField {
      * @param text the text to be displayed, or <code>null</code>
      * @param columns  the number of columns to use to calculate
      *   the preferred width; if columns is set to zero, the
-     *   preferred width will be whatever naturally results from
-     *   the component implementation
+     *   preferred width will be whatever naturally results from the component implementation
      */
     public DisableShortcutsOnFocusGainedTextField(String text, int columns) {
         super(text, columns);
@@ -95,8 +90,8 @@ public class DisableShortcutsOnFocusGainedTextField extends JosmTextField {
         super(doc, text, columns);
     }
 
-    private final transient List<Pair<Action,Shortcut>> unregisteredActionShortcuts = new ArrayList<>();
-    private final transient Set<JosmAction> disabledMenuActions = new HashSet<>();
+    private final transient List<Pair<Action, Shortcut>> unregisteredActionShortcuts = new ArrayList<>();
+    private final Set<JosmAction> disabledMenuActions = new HashSet<>();
 
     @Override
     public void focusGained(FocusEvent e) {
@@ -154,7 +149,7 @@ public class DisableShortcutsOnFocusGainedTextField extends JosmTextField {
                 Action action = Main.getRegisteredActionShortcut(shortcut);
                 if (action != null) {
                     Main.unregisterActionShortcut(action, shortcut);
-                    unregisteredActionShortcuts.add(new Pair<>(action,shortcut));
+                    unregisteredActionShortcuts.add(new Pair<>(action, shortcut));
                 }
             }
         }
@@ -183,7 +178,7 @@ public class DisableShortcutsOnFocusGainedTextField extends JosmTextField {
      * Restore all action shortcuts previously unregistered
      */
     protected void restoreActionShortcuts() {
-        for (Pair<Action,Shortcut> p : unregisteredActionShortcuts) {
+        for (Pair<Action, Shortcut> p : unregisteredActionShortcuts) {
             Main.registerActionShortcut(p.a, p.b);
         }
         unregisteredActionShortcuts.clear();
diff --git a/src/org/openstreetmap/josm/gui/widgets/EditableList.java b/src/org/openstreetmap/josm/gui/widgets/EditableList.java
index c3751ac..e0ed7a3 100644
--- a/src/org/openstreetmap/josm/gui/widgets/EditableList.java
+++ b/src/org/openstreetmap/josm/gui/widgets/EditableList.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.widgets;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -100,7 +100,8 @@ public class EditableList extends JPanel {
             @Override
             public void actionPerformed(ActionEvent e) {
                 if (sourcesList.getSelectedIndex() == -1) {
-                    JOptionPane.showMessageDialog(Main.parent, tr("Please select the row to delete."), tr("Information"), JOptionPane.QUESTION_MESSAGE);
+                    JOptionPane.showMessageDialog(Main.parent, tr("Please select the row to delete."), tr("Information"),
+                            JOptionPane.QUESTION_MESSAGE);
                 } else {
                     ((DefaultListModel<String>) sourcesList.getModel()).remove(sourcesList.getSelectedIndex());
                 }
diff --git a/src/org/openstreetmap/josm/gui/widgets/FileChooserManager.java b/src/org/openstreetmap/josm/gui/widgets/FileChooserManager.java
index 3e4ceb3..8e237f5 100644
--- a/src/org/openstreetmap/josm/gui/widgets/FileChooserManager.java
+++ b/src/org/openstreetmap/josm/gui/widgets/FileChooserManager.java
@@ -48,6 +48,8 @@ public class FileChooserManager {
         this(open, null);
     }
 
+    // CHECKSTYLE.OFF: LineLength
+
     /**
      * Creates a new {@code FileChooserManager}.
      * @param open If true, "Open File" dialogs will be created. If false, "Save File" dialogs will be created.
@@ -71,10 +73,12 @@ public class FileChooserManager {
         this.open = open;
         this.lastDirProperty = lastDirProperty == null || lastDirProperty.isEmpty() ? "lastDirectory" : lastDirProperty;
         this.curDir = Main.pref.get(this.lastDirProperty).isEmpty() ?
-                (defaultDir == null || defaultDir.isEmpty() ? "." : defaultDir)
+                defaultDir == null || defaultDir.isEmpty() ? "." : defaultDir
                 : Main.pref.get(this.lastDirProperty);
     }
 
+    // CHECKSTYLE.ON: LineLength
+
     /**
      * Replies the {@code AbstractFileChooser} that has been previously created.
      * @return The {@code AbstractFileChooser} that has been previously created, or {@code null} if it has not been created yet.
@@ -157,7 +161,7 @@ public class FileChooserManager {
         return doCreateFileChooser(multiple, title, null, null, extension, selectionMode, allTypes);
     }
 
-    private final FileChooserManager doCreateFileChooser(boolean multiple, String title, Collection<? extends FileFilter> filters,
+    private FileChooserManager doCreateFileChooser(boolean multiple, String title, Collection<? extends FileFilter> filters,
             FileFilter defaultFilter, String extension, int selectionMode, boolean allTypes) {
         File file = new File(curDir);
         // Use native dialog is preference is set, unless an unsupported selection mode is specifically wanted
diff --git a/src/org/openstreetmap/josm/gui/widgets/HistoryChangedListener.java b/src/org/openstreetmap/josm/gui/widgets/HistoryChangedListener.java
index f7481fb..af329b6 100644
--- a/src/org/openstreetmap/josm/gui/widgets/HistoryChangedListener.java
+++ b/src/org/openstreetmap/josm/gui/widgets/HistoryChangedListener.java
@@ -4,5 +4,5 @@ package org.openstreetmap.josm.gui.widgets;
 import java.util.List;
 
 public interface HistoryChangedListener {
-    public void historyChanged(List<String> history);
+    void historyChanged(List<String> history);
 }
diff --git a/src/org/openstreetmap/josm/gui/widgets/HistoryComboBox.java b/src/org/openstreetmap/josm/gui/widgets/HistoryComboBox.java
index 652859e..1524f67 100644
--- a/src/org/openstreetmap/josm/gui/widgets/HistoryComboBox.java
+++ b/src/org/openstreetmap/josm/gui/widgets/HistoryComboBox.java
@@ -5,8 +5,8 @@ import java.util.List;
 
 import javax.swing.text.JTextComponent;
 
-import org.openstreetmap.josm.gui.tagging.ac.AutoCompletingComboBox;
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.gui.tagging.ac.AutoCompletingComboBox;
 
 public class HistoryComboBox extends AutoCompletingComboBox {
     private ComboBoxHistory model;
@@ -23,17 +23,17 @@ public class HistoryComboBox extends AutoCompletingComboBox {
     }
 
     public String getText() {
-        return ((JTextComponent)getEditor().getEditorComponent()).getText();
+        return ((JTextComponent) getEditor().getEditorComponent()).getText();
     }
 
     public void setText(String value) {
         setAutocompleteEnabled(false);
-        ((JTextComponent)getEditor().getEditorComponent()).setText(value);
+        ((JTextComponent) getEditor().getEditorComponent()).setText(value);
         setAutocompleteEnabled(true);
     }
 
     public void addCurrentItemToHistory() {
-        model.addElement((String)getEditor().getItem());
+        model.addElement((String) getEditor().getItem());
     }
 
     public void setHistory(List<String> history) {
diff --git a/src/org/openstreetmap/josm/gui/widgets/ImageLabel.java b/src/org/openstreetmap/josm/gui/widgets/ImageLabel.java
index fcd7faa..b2f75ec 100644
--- a/src/org/openstreetmap/josm/gui/widgets/ImageLabel.java
+++ b/src/org/openstreetmap/josm/gui/widgets/ImageLabel.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.widgets;
 
 import java.awt.Color;
@@ -30,8 +30,8 @@ public class ImageLabel extends JPanel {
     public ImageLabel(String img, String tooltip, int charCount, Color background) {
         setLayout(new GridBagLayout());
         setBackground(background);
-        add(new JLabel(ImageProvider.get("statusline/"+img+".png")), GBC.std().anchor(GBC.WEST).insets(0,1,1,0));
-        add(tf = new JLabel(), GBC.std().fill(GBC.BOTH).anchor(GBC.WEST).insets(2,1,1,0));
+        add(new JLabel(ImageProvider.get("statusline/"+img+".png")), GBC.std().anchor(GBC.WEST).insets(0, 1, 1, 0));
+        add(tf = new JLabel(), GBC.std().fill(GBC.BOTH).anchor(GBC.WEST).insets(2, 1, 1, 0));
         setToolTipText(tooltip);
         this.charCount = charCount;
     }
diff --git a/src/org/openstreetmap/josm/gui/widgets/JosmComboBox.java b/src/org/openstreetmap/josm/gui/widgets/JosmComboBox.java
index 78313ec..c5caf0b 100644
--- a/src/org/openstreetmap/josm/gui/widgets/JosmComboBox.java
+++ b/src/org/openstreetmap/josm/gui/widgets/JosmComboBox.java
@@ -75,7 +75,7 @@ public class JosmComboBox<E> extends JComboBox<E> {
     public JosmComboBox(ComboBoxModel<E> aModel) {
         super(aModel);
         List<E> list = new ArrayList<>(aModel.getSize());
-        for (int i = 0; i<aModel.getSize(); i++) {
+        for (int i = 0; i < aModel.getSize(); i++) {
             list.add(aModel.getElementAt(i));
         }
         init(findPrototypeDisplayValue(list));
@@ -107,7 +107,8 @@ public class JosmComboBox<E> extends JComboBox<E> {
             // Remind old prototype to restore it later
             E oldPrototype = getPrototypeDisplayValue();
             // Get internal JList to directly call the renderer
-            JList<E> list = getList();
+            @SuppressWarnings("rawtypes")
+            JList list = getList();
             try {
                 // Index to give to renderer
                 int i = 0;
@@ -116,6 +117,7 @@ public class JosmComboBox<E> extends JComboBox<E> {
                         // With a "classic" renderer, we could call setPrototypeDisplayValue(value) + getPreferredSize()
                         // but not with TaggingPreset custom renderer that return a dummy height if index is equal to -1
                         // So we explicitely call the renderer by simulating a correct index for the current value
+                        @SuppressWarnings("unchecked")
                         Component c = getRenderer().getListCellRendererComponent(list, value, i, true, true);
                         if (c != null) {
                             // Get the real preferred size for the current value
@@ -138,11 +140,11 @@ public class JosmComboBox<E> extends JComboBox<E> {
     }
 
     @SuppressWarnings("unchecked")
-    protected final JList<E> getList() {
+    protected final JList<Object> getList() {
         for (int i = 0; i < getUI().getAccessibleChildrenCount(this); i++) {
             Accessible child = getUI().getAccessibleChild(this, i);
             if (child instanceof ComboPopup) {
-                return ((ComboPopup)child).getList();
+                return ((ComboPopup) child).getList();
             }
         }
         return null;
@@ -157,7 +159,7 @@ public class JosmComboBox<E> extends JComboBox<E> {
             int maxsize = (screenHeight/getPreferredSize().height) / 2;
             // If possible, adjust the maximum number of items with the real height of items
             // It is not granted this works on every platform (tested OK on Windows)
-            JList<E> list = getList();
+            JList<Object> list = getList();
             if (list != null) {
                 if (!prototype.equals(list.getPrototypeCellValue())) {
                     list.setPrototypeCellValue(prototype);
@@ -183,7 +185,7 @@ public class JosmComboBox<E> extends JComboBox<E> {
         @Override
         public void propertyChange(PropertyChangeEvent evt) {
             if ("editable".equals(evt.getPropertyName())) {
-                if (evt.getNewValue().equals(true)) {
+                if (evt.getNewValue().equals(Boolean.TRUE)) {
                     enableMenu();
                 } else {
                     disableMenu();
diff --git a/src/org/openstreetmap/josm/gui/widgets/JosmEditorPane.java b/src/org/openstreetmap/josm/gui/widgets/JosmEditorPane.java
index 82355a5..5910410 100644
--- a/src/org/openstreetmap/josm/gui/widgets/JosmEditorPane.java
+++ b/src/org/openstreetmap/josm/gui/widgets/JosmEditorPane.java
@@ -124,7 +124,7 @@ public class JosmEditorPane extends JEditorPane {
             UIDefaults defaults = new UIDefaults();
             defaults.put("EditorPane[Enabled].backgroundPainter", bgColor);
             pane.putClientProperty("Nimbus.Overrides", defaults);
-            pane.putClientProperty("Nimbus.Overrides.InheritDefaults", true);
+            pane.putClientProperty("Nimbus.Overrides.InheritDefaults", Boolean.TRUE);
             pane.setBackground(bgColor);
         }
     }
diff --git a/src/org/openstreetmap/josm/gui/widgets/JosmHTMLEditorKit.java b/src/org/openstreetmap/josm/gui/widgets/JosmHTMLEditorKit.java
index bb82e01..2edff15 100644
--- a/src/org/openstreetmap/josm/gui/widgets/JosmHTMLEditorKit.java
+++ b/src/org/openstreetmap/josm/gui/widgets/JosmHTMLEditorKit.java
@@ -11,21 +11,15 @@ import javax.swing.text.html.StyleSheet;
  */
 public class JosmHTMLEditorKit extends HTMLEditorKit {
 
-    /**
-     * Constructs a new {@code JosmHTMLEditorKit}
-     */
-    public JosmHTMLEditorKit() {
-    }
-    
     protected StyleSheet ss = super.getStyleSheet();
 
     /**
      * Set the set of styles to be used to render the various HTML elements.
-     * These styles are specified in terms of CSS specifications. 
+     * These styles are specified in terms of CSS specifications.
      * Each document produced by the kit will have a copy of the sheet which
-     * it can add the document specific styles to. 
-     * 
-     * Unlike the base implementation, the StyleSheet specified is NOT shared 
+     * it can add the document specific styles to.
+     *
+     * Unlike the base implementation, the StyleSheet specified is NOT shared
      * by all HTMLEditorKit instances, to provide a finer granularity.
 
      * @see #getStyleSheet
@@ -37,10 +31,10 @@ public class JosmHTMLEditorKit extends HTMLEditorKit {
 
     /**
      * Get the set of styles currently being used to render the HTML elements.
-     *  
-     * Unlike the base implementation, the StyleSheet specified is NOT shared 
+     *
+     * Unlike the base implementation, the StyleSheet specified is NOT shared
      * by all HTMLEditorKit instances, to provide a finer granularity.
-     * 
+     *
      * @see #setStyleSheet
      */
     @Override
diff --git a/src/org/openstreetmap/josm/gui/widgets/JosmPasswordField.java b/src/org/openstreetmap/josm/gui/widgets/JosmPasswordField.java
index 536cdca..c883bc6 100644
--- a/src/org/openstreetmap/josm/gui/widgets/JosmPasswordField.java
+++ b/src/org/openstreetmap/josm/gui/widgets/JosmPasswordField.java
@@ -18,9 +18,9 @@ import org.openstreetmap.josm.Main;
  * A subclass of {@link JPasswordField} to implement a workaround to
  * <a href="https://bugs.openjdk.java.net/browse/JDK-6322854">JDK bug 6322854</a>.
  *
- * @since 5752
  * @see <a href="https://josm.openstreetmap.de/ticket/8404">https://josm.openstreetmap.de/ticket/8404</a>
  * @see <a href="https://hg.netbeans.org/main/rev/33cb2e81b640">https://hg.netbeans.org/main/rev/33cb2e81b640</a>
+ * @since 5752
  */
 public class JosmPasswordField extends JPasswordField implements FocusListener {
 
diff --git a/src/org/openstreetmap/josm/gui/widgets/JosmTextField.java b/src/org/openstreetmap/josm/gui/widgets/JosmTextField.java
index 8f08192..592dd44 100644
--- a/src/org/openstreetmap/josm/gui/widgets/JosmTextField.java
+++ b/src/org/openstreetmap/josm/gui/widgets/JosmTextField.java
@@ -21,7 +21,7 @@ import org.openstreetmap.josm.Main;
  * <li>adds an optional "hint" displayed when no text has been entered</li>
  * <li>disables the global advanced key press detector when focused</li>
  * <li>implements a workaround to <a href="https://bugs.openjdk.java.net/browse/JDK-6322854">JDK bug 6322854</a></li>
- * <br>This class must be used everywhere in core and plugins instead of {@code JTextField}.
+ * </ul><br>This class must be used everywhere in core and plugins instead of {@code JTextField}.
  * @since 5886
  */
 public class JosmTextField extends JTextField implements FocusListener {
@@ -150,7 +150,7 @@ public class JosmTextField extends JTextField implements FocusListener {
         if (hint != null && !hint.isEmpty() && getText().isEmpty() && !isFocusOwner()) {
             // Taken from http://stackoverflow.com/a/24571681/2257172
             int h = getHeight();
-            ((Graphics2D)g).setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
+            ((Graphics2D) g).setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
             Insets ins = getInsets();
             FontMetrics fm = g.getFontMetrics();
             int c0 = getBackground().getRGB();
diff --git a/src/org/openstreetmap/josm/gui/widgets/MultiSplitLayout.java b/src/org/openstreetmap/josm/gui/widgets/MultiSplitLayout.java
index 9f36a30..463b561 100644
--- a/src/org/openstreetmap/josm/gui/widgets/MultiSplitLayout.java
+++ b/src/org/openstreetmap/josm/gui/widgets/MultiSplitLayout.java
@@ -37,6 +37,7 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.ListIterator;
+import java.util.Locale;
 import java.util.Map;
 
 import javax.swing.UIManager;
@@ -106,11 +107,13 @@ public class MultiSplitLayout implements LayoutManager {
             pcs.addPropertyChangeListener(listener);
         }
     }
+
     public void removePropertyChangeListener(PropertyChangeListener listener) {
         if (listener != null) {
             pcs.removePropertyChangeListener(listener);
         }
     }
+
     public PropertyChangeListener[] getPropertyChangeListeners() {
         return pcs.getPropertyChangeListeners();
     }
@@ -128,7 +131,9 @@ public class MultiSplitLayout implements LayoutManager {
      * @return the value of the model property
      * @see #setModel
      */
-    public Node getModel() { return model; }
+    public Node getModel() {
+        return model;
+    }
 
     /**
      * Set the root of the tree of Split, Leaf, and Divider nodes
@@ -155,7 +160,9 @@ public class MultiSplitLayout implements LayoutManager {
      * @return the value of the dividerSize property
      * @see #setDividerSize
      */
-    public int getDividerSize() { return dividerSize; }
+    public int getDividerSize() {
+        return dividerSize;
+    }
 
     /**
      * Sets the width of Dividers in Split rows, and the height of
@@ -178,7 +185,9 @@ public class MultiSplitLayout implements LayoutManager {
      * @return the value of the floatingDividers property
      * @see #setFloatingDividers
      */
-    public boolean getFloatingDividers() { return floatingDividers; }
+    public boolean getFloatingDividers() {
+        return floatingDividers;
+    }
 
     /**
      * If true, Leaf node bounds match the corresponding component's
@@ -232,7 +241,7 @@ public class MultiSplitLayout implements LayoutManager {
 
     private Component childForNode(Node node) {
         if (node instanceof Leaf) {
-            Leaf leaf = (Leaf)node;
+            Leaf leaf = (Leaf) node;
             String name = leaf.getName();
             return (name != null) ? childMap.get(name) : null;
         }
@@ -251,21 +260,19 @@ public class MultiSplitLayout implements LayoutManager {
         else if (root instanceof Divider) {
             int dividerSize = getDividerSize();
             return new Dimension(dividerSize, dividerSize);
-        }
-        else {
-            Split split = (Split)root;
+        } else {
+            Split split = (Split) root;
             List<Node> splitChildren = split.getChildren();
             int width = 0;
             int height = 0;
             if (split.isRowLayout()) {
-                for(Node splitChild : splitChildren) {
+                for (Node splitChild : splitChildren) {
                     Dimension size = preferredNodeSize(splitChild);
                     width += size.width;
                     height = Math.max(height, size.height);
                 }
-            }
-            else {
-                for(Node splitChild : splitChildren) {
+            } else {
+                for (Node splitChild : splitChildren) {
                     Dimension size = preferredNodeSize(splitChild);
                     width = Math.max(width, size.width);
                     height += size.height;
@@ -279,25 +286,22 @@ public class MultiSplitLayout implements LayoutManager {
         if (root instanceof Leaf) {
             Component child = childForNode(root);
             return (child != null) ? child.getMinimumSize() : new Dimension(0, 0);
-        }
-        else if (root instanceof Divider) {
+        } else if (root instanceof Divider) {
             int dividerSize = getDividerSize();
             return new Dimension(dividerSize, dividerSize);
-        }
-        else {
-            Split split = (Split)root;
+        } else {
+            Split split = (Split) root;
             List<Node> splitChildren = split.getChildren();
             int width = 0;
             int height = 0;
             if (split.isRowLayout()) {
-                for(Node splitChild : splitChildren) {
+                for (Node splitChild : splitChildren) {
                     Dimension size = minimumNodeSize(splitChild);
                     width += size.width;
                     height = Math.max(height, size.height);
                 }
-            }
-            else {
-                for(Node splitChild : splitChildren) {
+            } else {
+                for (Node splitChild : splitChildren) {
                     Dimension size = minimumNodeSize(splitChild);
                     width = Math.max(width, size.width);
                     height += size.height;
@@ -328,13 +332,13 @@ public class MultiSplitLayout implements LayoutManager {
 
     private Rectangle boundsWithYandHeight(Rectangle bounds, double y, double height) {
         Rectangle r = new Rectangle();
-        r.setBounds((int)(bounds.getX()), (int)y, (int)(bounds.getWidth()), (int)height);
+        r.setBounds((int) (bounds.getX()), (int) y, (int) (bounds.getWidth()), (int) height);
         return r;
     }
 
     private Rectangle boundsWithXandWidth(Rectangle bounds, double x, double width) {
         Rectangle r = new Rectangle();
-        r.setBounds((int)x, (int)(bounds.getY()), (int)width, (int)(bounds.getHeight()));
+        r.setBounds((int) x, (int) (bounds.getY()), (int) width, (int) (bounds.getHeight()));
         return r;
     }
 
@@ -346,8 +350,7 @@ public class MultiSplitLayout implements LayoutManager {
         if (split.isRowLayout()) {
             int lastChildMaxX = lastChildBounds.x + lastChildBounds.width;
             splitBounds.add(lastChildMaxX, bounds.y + bounds.height);
-        }
-        else {
+        } else {
             int lastChildMaxY = lastChildBounds.y + lastChildBounds.height;
             splitBounds.add(bounds.x + bounds.width, lastChildMaxY);
         }
@@ -362,7 +365,7 @@ public class MultiSplitLayout implements LayoutManager {
             int totalWidth = 0;          // sum of the children's widths
             int minWeightedWidth = 0;    // sum of the weighted childrens' min widths
             int totalWeightedWidth = 0;  // sum of the weighted childrens' widths
-            for(Node splitChild : split.getChildren()) {
+            for (Node splitChild : split.getChildren()) {
                 int nodeWidth = splitChild.getBounds().width;
                 int nodeMinWidth = Math.min(nodeWidth, minimumNodeSize(splitChild).width);
                 totalWidth += nodeWidth;
@@ -378,41 +381,37 @@ public class MultiSplitLayout implements LayoutManager {
             boolean onlyShrinkWeightedComponents =
                 (totalWeightedWidth - minWeightedWidth) > extraWidth;
 
-                while(splitChildren.hasNext()) {
-                    Node splitChild = splitChildren.next();
-                    Rectangle splitChildBounds = splitChild.getBounds();
-                    double minSplitChildWidth = minimumNodeSize(splitChild).getWidth();
-                    double splitChildWeight = (onlyShrinkWeightedComponents)
-                    ? splitChild.getWeight()
-                            : (splitChildBounds.getWidth() / totalWidth);
-
-                    if (!splitChildren.hasNext()) {
-                        double newWidth =  Math.max(minSplitChildWidth, bounds.getMaxX() - x);
-                        Rectangle newSplitChildBounds = boundsWithXandWidth(bounds, x, newWidth);
-                        layout2(splitChild, newSplitChildBounds);
-                    }
-                    else if ((availableWidth > 0.0) && (splitChildWeight > 0.0)) {
-                        double allocatedWidth = Math.rint(splitChildWeight * extraWidth);
-                        double oldWidth = splitChildBounds.getWidth();
-                        double newWidth = Math.max(minSplitChildWidth, oldWidth - allocatedWidth);
-                        Rectangle newSplitChildBounds = boundsWithXandWidth(bounds, x, newWidth);
-                        layout2(splitChild, newSplitChildBounds);
-                        availableWidth -= (oldWidth - splitChild.getBounds().getWidth());
-                    }
-                    else {
-                        double existingWidth = splitChildBounds.getWidth();
-                        Rectangle newSplitChildBounds = boundsWithXandWidth(bounds, x, existingWidth);
-                        layout2(splitChild, newSplitChildBounds);
-                    }
-                    x = splitChild.getBounds().getMaxX();
-                }
-        }
+            while (splitChildren.hasNext()) {
+                Node splitChild = splitChildren.next();
+                Rectangle splitChildBounds = splitChild.getBounds();
+                double minSplitChildWidth = minimumNodeSize(splitChild).getWidth();
+                double splitChildWeight = (onlyShrinkWeightedComponents)
+                ? splitChild.getWeight()
+                        : (splitChildBounds.getWidth() / totalWidth);
 
-        else {
+                if (!splitChildren.hasNext()) {
+                    double newWidth =  Math.max(minSplitChildWidth, bounds.getMaxX() - x);
+                    Rectangle newSplitChildBounds = boundsWithXandWidth(bounds, x, newWidth);
+                    layout2(splitChild, newSplitChildBounds);
+                } else if ((availableWidth > 0.0) && (splitChildWeight > 0.0)) {
+                    double allocatedWidth = Math.rint(splitChildWeight * extraWidth);
+                    double oldWidth = splitChildBounds.getWidth();
+                    double newWidth = Math.max(minSplitChildWidth, oldWidth - allocatedWidth);
+                    Rectangle newSplitChildBounds = boundsWithXandWidth(bounds, x, newWidth);
+                    layout2(splitChild, newSplitChildBounds);
+                    availableWidth -= (oldWidth - splitChild.getBounds().getWidth());
+                } else {
+                    double existingWidth = splitChildBounds.getWidth();
+                    Rectangle newSplitChildBounds = boundsWithXandWidth(bounds, x, existingWidth);
+                    layout2(splitChild, newSplitChildBounds);
+                }
+                x = splitChild.getBounds().getMaxX();
+            }
+        } else {
             int totalHeight = 0;          // sum of the children's heights
             int minWeightedHeight = 0;    // sum of the weighted childrens' min heights
             int totalWeightedHeight = 0;  // sum of the weighted childrens' heights
-            for(Node splitChild : split.getChildren()) {
+            for (Node splitChild : split.getChildren()) {
                 int nodeHeight = splitChild.getBounds().height;
                 int nodeMinHeight = Math.min(nodeHeight, minimumNodeSize(splitChild).height);
                 totalHeight += nodeHeight;
@@ -428,36 +427,34 @@ public class MultiSplitLayout implements LayoutManager {
             boolean onlyShrinkWeightedComponents =
                 (totalWeightedHeight - minWeightedHeight) > extraHeight;
 
-                while(splitChildren.hasNext()) {
-                    Node splitChild = splitChildren.next();
-                    Rectangle splitChildBounds = splitChild.getBounds();
-                    double minSplitChildHeight = minimumNodeSize(splitChild).getHeight();
-                    double splitChildWeight = (onlyShrinkWeightedComponents)
-                    ? splitChild.getWeight()
-                            : (splitChildBounds.getHeight() / totalHeight);
-
-                    if (!splitChildren.hasNext()) {
-                        double oldHeight = splitChildBounds.getHeight();
-                        double newHeight =  Math.max(minSplitChildHeight, bounds.getMaxY() - y);
-                        Rectangle newSplitChildBounds = boundsWithYandHeight(bounds, y, newHeight);
-                        layout2(splitChild, newSplitChildBounds);
-                        availableHeight -= (oldHeight - splitChild.getBounds().getHeight());
-                    }
-                    else if ((availableHeight > 0.0) && (splitChildWeight > 0.0)) {
-                        double allocatedHeight = Math.rint(splitChildWeight * extraHeight);
-                        double oldHeight = splitChildBounds.getHeight();
-                        double newHeight = Math.max(minSplitChildHeight, oldHeight - allocatedHeight);
-                        Rectangle newSplitChildBounds = boundsWithYandHeight(bounds, y, newHeight);
-                        layout2(splitChild, newSplitChildBounds);
-                        availableHeight -= (oldHeight - splitChild.getBounds().getHeight());
-                    }
-                    else {
-                        double existingHeight = splitChildBounds.getHeight();
-                        Rectangle newSplitChildBounds = boundsWithYandHeight(bounds, y, existingHeight);
-                        layout2(splitChild, newSplitChildBounds);
-                    }
-                    y = splitChild.getBounds().getMaxY();
+            while (splitChildren.hasNext()) {
+                Node splitChild = splitChildren.next();
+                Rectangle splitChildBounds = splitChild.getBounds();
+                double minSplitChildHeight = minimumNodeSize(splitChild).getHeight();
+                double splitChildWeight = (onlyShrinkWeightedComponents)
+                ? splitChild.getWeight()
+                        : (splitChildBounds.getHeight() / totalHeight);
+
+                if (!splitChildren.hasNext()) {
+                    double oldHeight = splitChildBounds.getHeight();
+                    double newHeight =  Math.max(minSplitChildHeight, bounds.getMaxY() - y);
+                    Rectangle newSplitChildBounds = boundsWithYandHeight(bounds, y, newHeight);
+                    layout2(splitChild, newSplitChildBounds);
+                    availableHeight -= (oldHeight - splitChild.getBounds().getHeight());
+                } else if ((availableHeight > 0.0) && (splitChildWeight > 0.0)) {
+                    double allocatedHeight = Math.rint(splitChildWeight * extraHeight);
+                    double oldHeight = splitChildBounds.getHeight();
+                    double newHeight = Math.max(minSplitChildHeight, oldHeight - allocatedHeight);
+                    Rectangle newSplitChildBounds = boundsWithYandHeight(bounds, y, newHeight);
+                    layout2(splitChild, newSplitChildBounds);
+                    availableHeight -= (oldHeight - splitChild.getBounds().getHeight());
+                } else {
+                    double existingHeight = splitChildBounds.getHeight();
+                    Rectangle newSplitChildBounds = boundsWithYandHeight(bounds, y, existingHeight);
+                    layout2(splitChild, newSplitChildBounds);
                 }
+                y = splitChild.getBounds().getMaxY();
+            }
         }
 
         /* The bounds of the Split node root are set to be
@@ -475,21 +472,21 @@ public class MultiSplitLayout implements LayoutManager {
         ListIterator<Node> splitChildren = split.getChildren().listIterator();
         Node lastWeightedChild = split.lastWeightedChild();
 
-        /* Layout the Split's child Nodes' along the X axis.  The bounds
-         * of each child will have the same y coordinate and height as the
-         * layoutGrow() bounds argument.  Extra width is allocated to the
-         * to each child with a non-zero weight:
-         *     newWidth = currentWidth + (extraWidth * splitChild.getWeight())
-         * Any extraWidth "left over" (that's availableWidth in the loop
-         * below) is given to the last child.  Note that Dividers always
-         * have a weight of zero, and they're never the last child.
-         */
         if (split.isRowLayout()) {
+            /* Layout the Split's child Nodes' along the X axis.  The bounds
+             * of each child will have the same y coordinate and height as the
+             * layoutGrow() bounds argument.  Extra width is allocated to the
+             * to each child with a non-zero weight:
+             *     newWidth = currentWidth + (extraWidth * splitChild.getWeight())
+             * Any extraWidth "left over" (that's availableWidth in the loop
+             * below) is given to the last child.  Note that Dividers always
+             * have a weight of zero, and they're never the last child.
+             */
             double x = bounds.getX();
             double extraWidth = bounds.getWidth() - splitBounds.getWidth();
             double availableWidth = extraWidth;
 
-            while(splitChildren.hasNext()) {
+            while (splitChildren.hasNext()) {
                 Node splitChild = splitChildren.next();
                 Rectangle splitChildBounds = splitChild.getBounds();
                 double splitChildWeight = splitChild.getWeight();
@@ -498,8 +495,7 @@ public class MultiSplitLayout implements LayoutManager {
                     double newWidth = bounds.getMaxX() - x;
                     Rectangle newSplitChildBounds = boundsWithXandWidth(bounds, x, newWidth);
                     layout2(splitChild, newSplitChildBounds);
-                }
-                else if ((availableWidth > 0.0) && (splitChildWeight > 0.0)) {
+                } else if ((availableWidth > 0.0) && (splitChildWeight > 0.0)) {
                     double allocatedWidth = (splitChild.equals(lastWeightedChild))
                     ? availableWidth
                             : Math.rint(splitChildWeight * extraWidth);
@@ -507,31 +503,28 @@ public class MultiSplitLayout implements LayoutManager {
                     Rectangle newSplitChildBounds = boundsWithXandWidth(bounds, x, newWidth);
                     layout2(splitChild, newSplitChildBounds);
                     availableWidth -= allocatedWidth;
-                }
-                else {
+                } else {
                     double existingWidth = splitChildBounds.getWidth();
                     Rectangle newSplitChildBounds = boundsWithXandWidth(bounds, x, existingWidth);
                     layout2(splitChild, newSplitChildBounds);
                 }
                 x = splitChild.getBounds().getMaxX();
             }
-        }
-
-        /* Layout the Split's child Nodes' along the Y axis.  The bounds
-         * of each child will have the same x coordinate and width as the
-         * layoutGrow() bounds argument.  Extra height is allocated to the
-         * to each child with a non-zero weight:
-         *     newHeight = currentHeight + (extraHeight * splitChild.getWeight())
-         * Any extraHeight "left over" (that's availableHeight in the loop
-         * below) is given to the last child.  Note that Dividers always
-         * have a weight of zero, and they're never the last child.
-         */
-        else {
+        } else {
+            /* Layout the Split's child Nodes' along the Y axis.  The bounds
+             * of each child will have the same x coordinate and width as the
+             * layoutGrow() bounds argument.  Extra height is allocated to the
+             * to each child with a non-zero weight:
+             *     newHeight = currentHeight + (extraHeight * splitChild.getWeight())
+             * Any extraHeight "left over" (that's availableHeight in the loop
+             * below) is given to the last child.  Note that Dividers always
+             * have a weight of zero, and they're never the last child.
+             */
             double y = bounds.getY();
             double extraHeight = bounds.getMaxY() - splitBounds.getHeight();
             double availableHeight = extraHeight;
 
-            while(splitChildren.hasNext()) {
+            while (splitChildren.hasNext()) {
                 Node splitChild = splitChildren.next();
                 Rectangle splitChildBounds = splitChild.getBounds();
                 double splitChildWeight = splitChild.getWeight();
@@ -540,8 +533,7 @@ public class MultiSplitLayout implements LayoutManager {
                     double newHeight = bounds.getMaxY() - y;
                     Rectangle newSplitChildBounds = boundsWithYandHeight(bounds, y, newHeight);
                     layout2(splitChild, newSplitChildBounds);
-                }
-                else if ((availableHeight > 0.0) && (splitChildWeight > 0.0)) {
+                } else if ((availableHeight > 0.0) && (splitChildWeight > 0.0)) {
                     double allocatedHeight = (splitChild.equals(lastWeightedChild))
                     ? availableHeight
                             : Math.rint(splitChildWeight * extraHeight);
@@ -549,8 +541,7 @@ public class MultiSplitLayout implements LayoutManager {
                     Rectangle newSplitChildBounds = boundsWithYandHeight(bounds, y, newHeight);
                     layout2(splitChild, newSplitChildBounds);
                     availableHeight -= allocatedHeight;
-                }
-                else {
+                } else {
                     double existingHeight = splitChildBounds.getHeight();
                     Rectangle newSplitChildBounds = boundsWithYandHeight(bounds, y, existingHeight);
                     layout2(splitChild, newSplitChildBounds);
@@ -570,20 +561,17 @@ public class MultiSplitLayout implements LayoutManager {
                 child.setBounds(bounds);
             }
             root.setBounds(bounds);
-        }
-        else if (root instanceof Divider) {
+        } else if (root instanceof Divider) {
             root.setBounds(bounds);
-        }
-        else if (root instanceof Split) {
-            Split split = (Split)root;
+        } else if (root instanceof Split) {
+            Split split = (Split) root;
             boolean grow = split.isRowLayout()
-            ? (split.getBounds().width <= bounds.width)
+            ? split.getBounds().width <= bounds.width
                     : (split.getBounds().height <= bounds.height);
             if (grow) {
                 layoutGrow(split, bounds);
                 root.setBounds(bounds);
-            }
-            else {
+            } else {
                 layoutShrink(split, bounds);
                 // split.setBounds() called in layoutShrink()
             }
@@ -607,9 +595,8 @@ public class MultiSplitLayout implements LayoutManager {
     private void layout1(Node root, Rectangle bounds) {
         if (root instanceof Leaf) {
             root.setBounds(bounds);
-        }
-        else if (root instanceof Split) {
-            Split split = (Split)root;
+        } else if (root instanceof Split) {
+            Split split = (Split) root;
             Iterator<Node> splitChildren = split.getChildren().iterator();
             Rectangle childBounds = null;
             int dividerSize = getDividerSize();
@@ -623,58 +610,52 @@ public class MultiSplitLayout implements LayoutManager {
              */
             if (split.isRowLayout()) {
                 double x = bounds.getX();
-                while(splitChildren.hasNext()) {
+                while (splitChildren.hasNext()) {
                     Node splitChild = splitChildren.next();
                     Divider dividerChild =
-                        (splitChildren.hasNext()) ? (Divider)(splitChildren.next()) : null;
+                        (splitChildren.hasNext()) ? (Divider) (splitChildren.next()) : null;
 
-                        double childWidth = 0.0;
-                        if (getFloatingDividers()) {
-                            childWidth = preferredNodeSize(splitChild).getWidth();
-                        }
-                        else {
-                            if (dividerChild != null) {
-                                childWidth = dividerChild.getBounds().getX() - x;
-                            }
-                            else {
-                                childWidth = split.getBounds().getMaxX() - x;
-                            }
-                        }
-                        childBounds = boundsWithXandWidth(bounds, x, childWidth);
-                        layout1(splitChild, childBounds);
-
-                        if (getFloatingDividers() && (dividerChild != null)) {
-                            double dividerX = childBounds.getMaxX();
-                            Rectangle dividerBounds = boundsWithXandWidth(bounds, dividerX, dividerSize);
-                            dividerChild.setBounds(dividerBounds);
-                        }
+                    double childWidth = 0.0;
+                    if (getFloatingDividers()) {
+                        childWidth = preferredNodeSize(splitChild).getWidth();
+                    } else {
                         if (dividerChild != null) {
-                            x = dividerChild.getBounds().getMaxX();
+                            childWidth = dividerChild.getBounds().getX() - x;
+                        } else {
+                            childWidth = split.getBounds().getMaxX() - x;
                         }
-                }
-            }
+                    }
+                    childBounds = boundsWithXandWidth(bounds, x, childWidth);
+                    layout1(splitChild, childBounds);
 
-            /* Layout the Split's child Nodes' along the Y axis.  The bounds
-             * of each child will have the same x coordinate and width as the
-             * layout1() bounds argument.  The algorithm is identical to what's
-             * explained above, for the X axis case.
-             */
-            else {
+                    if (getFloatingDividers() && (dividerChild != null)) {
+                        double dividerX = childBounds.getMaxX();
+                        Rectangle dividerBounds = boundsWithXandWidth(bounds, dividerX, dividerSize);
+                        dividerChild.setBounds(dividerBounds);
+                    }
+                    if (dividerChild != null) {
+                        x = dividerChild.getBounds().getMaxX();
+                    }
+                }
+            } else {
+                /* Layout the Split's child Nodes' along the Y axis.  The bounds
+                 * of each child will have the same x coordinate and width as the
+                 * layout1() bounds argument.  The algorithm is identical to what's
+                 * explained above, for the X axis case.
+                 */
                 double y = bounds.getY();
-                while(splitChildren.hasNext()) {
+                while (splitChildren.hasNext()) {
                     Node splitChild = splitChildren.next();
                     Divider dividerChild =
-                        (splitChildren.hasNext()) ? (Divider)(splitChildren.next()) : null;
+                        (splitChildren.hasNext()) ? (Divider) (splitChildren.next()) : null;
 
                         double childHeight = 0.0;
                         if (getFloatingDividers()) {
                             childHeight = preferredNodeSize(splitChild).getHeight();
-                        }
-                        else {
+                        } else {
                             if (dividerChild != null) {
                                 childHeight = dividerChild.getBounds().getY() - y;
-                            }
-                            else {
+                            } else {
                                 childHeight = split.getBounds().getMaxY() - y;
                             }
                         }
@@ -703,19 +684,22 @@ public class MultiSplitLayout implements LayoutManager {
     }
 
     /**
-     * The specified Node is either the wrong type or was configured
-     * incorrectly.
+     * The specified Node is either the wrong type or was configured incorrectly.
      */
     public static class InvalidLayoutException extends RuntimeException {
         private final transient Node node;
-        public InvalidLayoutException (String msg, Node node) {
+
+        public InvalidLayoutException(String msg, Node node) {
             super(msg);
             this.node = node;
         }
+
         /**
          * @return the invalid Node.
          */
-        public Node getNode() { return node; }
+        public Node getNode() {
+            return node;
+        }
     }
 
     private void throwInvalidLayout(String msg, Node node) {
@@ -724,13 +708,13 @@ public class MultiSplitLayout implements LayoutManager {
 
     private void checkLayout(Node root) {
         if (root instanceof Split) {
-            Split split = (Split)root;
+            Split split = (Split) root;
             if (split.getChildren().size() <= 2) {
                 throwInvalidLayout("Split must have > 2 children", root);
             }
             Iterator<Node> splitChildren = split.getChildren().iterator();
             double weight = 0.0;
-            while(splitChildren.hasNext()) {
+            while (splitChildren.hasNext()) {
                 Node splitChild = splitChildren.next();
                 if (splitChild instanceof Divider) {
                     throwInvalidLayout("expected a Split or Leaf Node", splitChild);
@@ -769,12 +753,11 @@ public class MultiSplitLayout implements LayoutManager {
 
     private Divider dividerAt(Node root, int x, int y) {
         if (root instanceof Divider) {
-            Divider divider = (Divider)root;
+            Divider divider = (Divider) root;
             return (divider.getBounds().contains(x, y)) ? divider : null;
-        }
-        else if (root instanceof Split) {
-            Split split = (Split)root;
-            for(Node child : split.getChildren()) {
+        } else if (root instanceof Split) {
+            Split split = (Split) root;
+            for (Node child : split.getChildren()) {
                 if (child.getBounds().contains(x, y))
                     return dividerAt(child, x, y);
             }
@@ -804,13 +787,12 @@ public class MultiSplitLayout implements LayoutManager {
     private List<Divider> dividersThatOverlap(Node root, Rectangle r) {
         if (nodeOverlapsRectangle(root, r) && (root instanceof Split)) {
             List<Divider> dividers = new ArrayList<>();
-            for(Node child : ((Split)root).getChildren()) {
+            for (Node child : ((Split) root).getChildren()) {
                 if (child instanceof Divider) {
                     if (nodeOverlapsRectangle(child, r)) {
-                        dividers.add((Divider)child);
+                        dividers.add((Divider) child);
                     }
-                }
-                else if (child instanceof Split) {
+                } else if (child instanceof Split) {
                     dividers.addAll(dividersThatOverlap(child, r));
                 }
             }
@@ -849,7 +831,9 @@ public class MultiSplitLayout implements LayoutManager {
          * @return the value of the parent property.
          * @see #parent_set
          */
-        public Split parent_get() { return parent; }
+        public Split parent_get() {
+            return parent;
+        }
 
         /**
          * Set the value of this Node's parent property.  The default
@@ -897,7 +881,9 @@ public class MultiSplitLayout implements LayoutManager {
          * @return the value of the weight property
          * @see #setWeight
          */
-        public double getWeight() { return weight; }
+        public double getWeight() {
+            return weight;
+        }
 
         /**
          * The weight property is a between 0.0 and 1.0 used to
@@ -909,12 +895,12 @@ public class MultiSplitLayout implements LayoutManager {
          * of weight is 0.0.
          *
          * @param weight a double between 0.0 and 1.0
+         * @throws IllegalArgumentException if weight is not between 0.0 and 1.0
          * @see #getWeight
          * @see MultiSplitLayout#layoutContainer
-         * @throws IllegalArgumentException if weight is not between 0.0 and 1.0
          */
         public void setWeight(double weight) {
-            if ((weight < 0.0)|| (weight > 1.0))
+            if ((weight < 0.0) || (weight > 1.0))
                 throw new IllegalArgumentException("invalid weight");
             this.weight = weight;
         }
@@ -975,14 +961,15 @@ public class MultiSplitLayout implements LayoutManager {
          * @return the value of the rowLayout property.
          * @see #setRowLayout
          */
-        public boolean isRowLayout() { return rowLayout; }
+        public boolean isRowLayout() {
+            return rowLayout;
+        }
 
         /**
          * Set the rowLayout property.  If true, all of this Split's
          * children are to be laid out in a row: all the same height,
          * each node's left edge equal to the previous Node's right
-         * edge.  If false, children are laid on in a column.  Default
-         * value is true.
+         * edge. If false, children are laid on in a column. Default value is true.
          *
          * @param rowLayout true for horizontal row layout, false for column
          * @see #isRowLayout
@@ -1006,21 +993,20 @@ public class MultiSplitLayout implements LayoutManager {
          * Set's the children property of this Split node.  The parent
          * of each new child is set to this Split node, and the parent
          * of each old child (if any) is set to null.  This method
-         * defensively copies the incoming List.  Default value is
-         * an empty List.
+         * defensively copies the incoming List. Default value is an empty List.
          *
          * @param children List of children
-         * @see #getChildren
          * @throws IllegalArgumentException if children is null
+         * @see #getChildren
          */
         public void setChildren(List<Node> children) {
             if (children == null)
                 throw new IllegalArgumentException("children must be a non-null List");
-            for(Node child : this.children) {
+            for (Node child : this.children) {
                 child.parent_set(null);
             }
             this.children = new ArrayList<>(children);
-            for(Node child : this.children) {
+            for (Node child : this.children) {
                 child.parent_set(this);
             }
         }
@@ -1036,7 +1022,7 @@ public class MultiSplitLayout implements LayoutManager {
         public final Node lastWeightedChild() {
             List<Node> children = getChildren();
             Node weightedChild = null;
-            for(Node child : children) {
+            for (Node child : children) {
                 if (child.getWeight() > 0.0) {
                     weightedChild = child;
                 }
@@ -1047,11 +1033,11 @@ public class MultiSplitLayout implements LayoutManager {
         @Override
         public String toString() {
             int nChildren = getChildren().size();
-            StringBuffer sb = new StringBuffer("MultiSplitLayout.Split");
-            sb.append(isRowLayout() ? " ROW [" : " COLUMN [");
-            sb.append(nChildren + ((nChildren == 1) ? " child" : " children"));
-            sb.append("] ");
-            sb.append(getBounds());
+            StringBuilder sb = new StringBuilder("MultiSplitLayout.Split");
+            sb.append(isRowLayout() ? " ROW [" : " COLUMN [")
+              .append(nChildren + ((nChildren == 1) ? " child" : " children"))
+              .append("] ")
+              .append(getBounds());
             return sb.toString();
         }
     }
@@ -1063,13 +1049,14 @@ public class MultiSplitLayout implements LayoutManager {
         private String name = "";
 
         /**
-         * Create a Leaf node.  The default value of name is "".
+         * Create a Leaf node. The default value of name is "".
          */
-        public Leaf() { }
+        public Leaf() {
+            // Name can be set later with setName()
+        }
 
         /**
-         * Create a Leaf node with the specified name.  Name can not
-         * be null.
+         * Create a Leaf node with the specified name. Name can not be null.
          *
          * @param name value of the Leaf's name property
          * @throws IllegalArgumentException if name is null
@@ -1085,7 +1072,9 @@ public class MultiSplitLayout implements LayoutManager {
          * @return the value of the name property.
          * @see #setName
          */
-        public String getName() { return name; }
+        public String getName() {
+            return name;
+        }
 
         /**
          * Set the value of the name property.  Name may not be null.
@@ -1100,14 +1089,13 @@ public class MultiSplitLayout implements LayoutManager {
 
         @Override
         public String toString() {
-            StringBuffer sb = new StringBuffer("MultiSplitLayout.Leaf");
-            sb.append(" \"");
-            sb.append(getName());
-            sb.append('\"');
-            sb.append(" weight=");
-            sb.append(getWeight());
-            sb.append(' ');
-            sb.append(getBounds());
+            StringBuilder sb = new StringBuilder("MultiSplitLayout.Leaf");
+            sb.append(" \"")
+              .append(getName())
+              .append("\" weight=")
+              .append(getWeight())
+              .append(' ')
+              .append(getBounds());
             return sb.toString();
         }
     }
@@ -1131,7 +1119,7 @@ public class MultiSplitLayout implements LayoutManager {
 
         /**
          * Dividers can't have a weight, they don't grow or shrink.
-         * @throws UnsupportedOperationException
+         * @throws UnsupportedOperationException always
          */
         @Override
         public void setWeight(double weight) {
@@ -1140,7 +1128,7 @@ public class MultiSplitLayout implements LayoutManager {
 
         @Override
         public String toString() {
-            return "MultiSplitLayout.Divider " + getBounds().toString();
+            return "MultiSplitLayout.Divider " + getBounds();
         }
     }
 
@@ -1149,31 +1137,26 @@ public class MultiSplitLayout implements LayoutManager {
     }
 
     private static void parseAttribute(String name, StreamTokenizer st, Node node) throws Exception {
-        if ((st.nextToken() != '=')) {
+        if (st.nextToken() != '=') {
             throwParseException(st, "expected '=' after " + name);
         }
         if ("WEIGHT".equalsIgnoreCase(name)) {
             if (st.nextToken() == StreamTokenizer.TT_NUMBER) {
                 node.setWeight(st.nval);
-            }
-            else {
+            } else {
                 throwParseException(st, "invalid weight");
             }
-        }
-        else if ("NAME".equalsIgnoreCase(name)) {
+        } else if ("NAME".equalsIgnoreCase(name)) {
             if (st.nextToken() == StreamTokenizer.TT_WORD) {
                 if (node instanceof Leaf) {
-                    ((Leaf)node).setName(st.sval);
-                }
-                else {
+                    ((Leaf) node).setName(st.sval);
+                } else {
                     throwParseException(st, "can't specify name for " + node);
                 }
-            }
-            else {
+            } else {
                 throwParseException(st, "invalid name");
             }
-        }
-        else {
+        } else {
             throwParseException(st, "unrecognized attribute \"" + name + "\"");
         }
     }
@@ -1182,8 +1165,7 @@ public class MultiSplitLayout implements LayoutManager {
         List<Node> children = new ArrayList<>(parent.getChildren());
         if (children.isEmpty()) {
             children.add(child);
-        }
-        else {
+        } else {
             children.add(new Divider());
             children.add(child);
         }
@@ -1199,8 +1181,7 @@ public class MultiSplitLayout implements LayoutManager {
             }
             if (token == StreamTokenizer.TT_WORD) {
                 parseAttribute(st.sval, st, leaf);
-            }
-            else {
+            } else {
                 throwParseException(st, "Bad Leaf: " + leaf);
             }
         }
@@ -1212,47 +1193,40 @@ public class MultiSplitLayout implements LayoutManager {
         while ((token = st.nextToken()) != StreamTokenizer.TT_EOF) {
             if (token == ')') {
                 break;
-            }
-            else if (token == StreamTokenizer.TT_WORD) {
+            } else if (token == StreamTokenizer.TT_WORD) {
                 if ("WEIGHT".equalsIgnoreCase(st.sval)) {
                     parseAttribute(st.sval, st, parent);
-                }
-                else {
+                } else {
                     addSplitChild(parent, new Leaf(st.sval));
                 }
-            }
-            else if (token == '(') {
+            } else if (token == '(') {
                 if ((token = st.nextToken()) != StreamTokenizer.TT_WORD) {
                     throwParseException(st, "invalid node type");
                 }
-                String nodeType = st.sval.toUpperCase();
+                String nodeType = st.sval.toUpperCase(Locale.ENGLISH);
                 if ("LEAF".equals(nodeType)) {
                     parseLeaf(st, parent);
-                }
-                else if ("ROW".equals(nodeType) || "COLUMN".equals(nodeType)) {
+                } else if ("ROW".equals(nodeType) || "COLUMN".equals(nodeType)) {
                     Split split = new Split();
                     split.setRowLayout("ROW".equals(nodeType));
                     addSplitChild(parent, split);
                     parseSplit(st, split);
-                }
-                else {
+                } else {
                     throwParseException(st, "unrecognized node type '" + nodeType + "'");
                 }
             }
         }
     }
 
-    private static Node parseModel (Reader r) {
+    private static Node parseModel(Reader r) {
         StreamTokenizer st = new StreamTokenizer(r);
         try {
             Split root = new Split();
             parseSplit(st, root);
             return root.getChildren().get(0);
-        }
-        catch (Exception e) {
+        } catch (Exception e) {
             Main.error(e);
-        }
-        finally {
+        } finally {
             Utils.close(r);
         }
         return null;
diff --git a/src/org/openstreetmap/josm/gui/widgets/MultiSplitPane.java b/src/org/openstreetmap/josm/gui/widgets/MultiSplitPane.java
index e15b40c..797d481 100644
--- a/src/org/openstreetmap/josm/gui/widgets/MultiSplitPane.java
+++ b/src/org/openstreetmap/josm/gui/widgets/MultiSplitPane.java
@@ -64,15 +64,14 @@ public class MultiSplitPane extends JPanel {
     }
 
     /**
-     * A convenience method that returns the layout manager cast
-     * to MutliSplitLayout.
+     * A convenience method that returns the layout manager cast to MultiSplitLayout.
      *
      * @return this MultiSplitPane's layout manager
      * @see java.awt.Container#getLayout
      * @see #setModel
      */
     public final MultiSplitLayout getMultiSplitLayout() {
-        return (MultiSplitLayout)getLayout();
+        return (MultiSplitLayout) getLayout();
     }
 
     /**
@@ -151,14 +150,14 @@ public class MultiSplitPane extends JPanel {
          * @param g the Graphics object to paint with
          * @param divider the Divider to paint
          */
-        public abstract void paint(Graphics g, Divider divider);
+        void paint(Graphics g, Divider divider);
     }
 
     private class DefaultDividerPainter implements DividerPainter {
         @Override
         public void paint(Graphics g, Divider divider) {
             if ((divider == activeDivider()) && !isContinuousLayout()) {
-                Graphics2D g2d = (Graphics2D)g;
+                Graphics2D g2d = (Graphics2D) g;
                 g2d.setColor(Color.black);
                 g2d.fill(divider.getBounds());
             }
@@ -210,11 +209,10 @@ public class MultiSplitPane extends JPanel {
             Graphics dpg = g.create();
             try {
                 MultiSplitLayout msl = getMultiSplitLayout();
-                for(Divider divider : msl.dividersThatOverlap(clipR)) {
+                for (Divider divider : msl.dividersThatOverlap(clipR)) {
                     dp.paint(dpg, divider);
                 }
-            }
-            finally {
+            } finally {
                 dpg.dispose();
             }
         }
@@ -238,8 +236,7 @@ public class MultiSplitPane extends JPanel {
             MultiSplitLayout.Node nextNode = divider.nextSibling();
             if ((prevNode == null) || (nextNode == null)) {
                 dragUnderway = false;
-            }
-            else {
+            } else {
                 initialDividerBounds = divider.getBounds();
                 dragOffsetX = mx - initialDividerBounds.x;
                 dragOffsetY = my - initialDividerBounds.y;
@@ -250,8 +247,7 @@ public class MultiSplitPane extends JPanel {
                     dragMin = prevNodeBounds.x;
                     dragMax = nextNodeBounds.x + nextNodeBounds.width;
                     dragMax -= dragDivider.getBounds().width;
-                }
-                else {
+                } else {
                     dragMin = prevNodeBounds.y;
                     dragMax = nextNodeBounds.y + nextNodeBounds.height;
                     dragMax -= dragDivider.getBounds().height;
@@ -260,8 +256,7 @@ public class MultiSplitPane extends JPanel {
                 getMultiSplitLayout().setFloatingDividers(false);
                 dragUnderway = true;
             }
-        }
-        else {
+        } else {
             dragUnderway = false;
         }
     }
@@ -271,8 +266,7 @@ public class MultiSplitPane extends JPanel {
         if (dragDivider.isVertical()) {
             damageR.x = dragMin;
             damageR.width = dragMax - dragMin;
-        }
-        else {
+        } else {
             damageR.y = dragMin;
             damageR.height = dragMax - dragMin;
         }
@@ -289,8 +283,7 @@ public class MultiSplitPane extends JPanel {
             bounds.x = mx - dragOffsetX;
             bounds.x = Math.max(bounds.x, dragMin);
             bounds.x = Math.min(bounds.x, dragMax);
-        }
-        else {
+        } else {
             bounds.y = my - dragOffsetY;
             bounds.y = Math.max(bounds.y, dragMin);
             bounds.y = Math.min(bounds.y, dragMax);
@@ -299,8 +292,7 @@ public class MultiSplitPane extends JPanel {
         if (isContinuousLayout()) {
             revalidate();
             repaintDragLimits();
-        }
-        else {
+        } else {
             repaint(oldBounds.union(bounds));
         }
     }
@@ -314,7 +306,7 @@ public class MultiSplitPane extends JPanel {
         dragUnderway = false;
     }
 
-    private void finishDrag(int x, int y) {
+    private void finishDrag() {
         if (dragUnderway) {
             clearDragState();
             if (!isContinuousLayout()) {
@@ -372,29 +364,34 @@ public class MultiSplitPane extends JPanel {
         public void mousePressed(MouseEvent e) {
             startDrag(e.getX(), e.getY());
         }
+
         @Override
         public void mouseReleased(MouseEvent e) {
-            finishDrag(e.getX(), e.getY());
+            finishDrag();
         }
+
         @Override
         public void mouseDragged(MouseEvent e) {
             updateDrag(e.getX(), e.getY());
         }
+
         @Override
         public void keyPressed(KeyEvent e) {
             if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
                 cancelDrag();
             }
         }
+
         @Override
         public void keyReleased(KeyEvent e) { }
+
         @Override
         public void keyTyped(KeyEvent e) { }
     }
 
     @Override
     public AccessibleContext getAccessibleContext() {
-        if( accessibleContext == null ) {
+        if (accessibleContext == null) {
             accessibleContext = new AccessibleMultiSplitPane();
         }
         return accessibleContext;
diff --git a/src/org/openstreetmap/josm/gui/widgets/NativeFileChooser.java b/src/org/openstreetmap/josm/gui/widgets/NativeFileChooser.java
index 4ae074b..4c02043 100644
--- a/src/org/openstreetmap/josm/gui/widgets/NativeFileChooser.java
+++ b/src/org/openstreetmap/josm/gui/widgets/NativeFileChooser.java
@@ -106,6 +106,7 @@ public class NativeFileChooser extends AbstractFileChooser {
 
     @Override
     public void setFileSelectionMode(int selectionMode) {
+        // CHECKSTYLE.OFF: LineLength
         // TODO implement this after Oracle fixes JDK-6192906 / JDK-6699863 / JDK-6927978 / JDK-7125172:
         // https://bugs.openjdk.java.net/browse/JDK-6192906 : Add more features to java.awt.FileDialog
         // https://bugs.openjdk.java.net/browse/JDK-6699863 : awt filedialog cannot select directories
@@ -115,6 +116,7 @@ public class NativeFileChooser extends AbstractFileChooser {
         // There is however a basic support for directory selection on OS X, with Java >= 7u40:
         // http://stackoverflow.com/questions/1224714/how-can-i-make-a-java-filedialog-accept-directories-as-its-filetype-in-os-x/1224744#1224744
         // https://bugs.openjdk.java.net/browse/JDK-7161437 : [macosx] awt.FileDialog doesn't respond appropriately for mac when selecting folders
+        // CHECKSTYLE.ON: LineLength
         this.selectionMode = selectionMode;
     }
 
@@ -163,10 +165,12 @@ public class NativeFileChooser extends AbstractFileChooser {
     public static boolean supportsSelectionMode(int selectionMode) {
         switch (selectionMode) {
         case JFileChooser.FILES_AND_DIRECTORIES:
+            // CHECKSTYLE.OFF: LineLength
             // https://bugs.openjdk.java.net/browse/JDK-7125172 : FileDialog objects don't allow directory AND files selection simultaneously
             return false;
         case JFileChooser.DIRECTORIES_ONLY:
             // http://stackoverflow.com/questions/1224714/how-can-i-make-a-java-filedialog-accept-directories-as-its-filetype-in-os-x/1224744#1224744
+            // CHECKSTYLE.ON: LineLength
             return Main.isPlatformOsx();
         case JFileChooser.FILES_ONLY:
         default:
diff --git a/src/org/openstreetmap/josm/gui/widgets/OsmIdTextField.java b/src/org/openstreetmap/josm/gui/widgets/OsmIdTextField.java
index 1d11acb..30cc898 100644
--- a/src/org/openstreetmap/josm/gui/widgets/OsmIdTextField.java
+++ b/src/org/openstreetmap/josm/gui/widgets/OsmIdTextField.java
@@ -106,7 +106,7 @@ public class OsmIdTextField extends AbstractIdTextField<OsmIdTextField.OsmIdVali
                     continue;
                 } else {
                     try {
-                        ids.add(SimplePrimitiveId.fromString(s));
+                        ids.addAll(SimplePrimitiveId.multipleFromString(s));
                     } catch (IllegalArgumentException ex) {
                         try {
                             long id = Long.parseLong(s);
diff --git a/src/org/openstreetmap/josm/gui/widgets/OsmPrimitivesTableModel.java b/src/org/openstreetmap/josm/gui/widgets/OsmPrimitivesTableModel.java
index 61cf637..b4ba92c 100644
--- a/src/org/openstreetmap/josm/gui/widgets/OsmPrimitivesTableModel.java
+++ b/src/org/openstreetmap/josm/gui/widgets/OsmPrimitivesTableModel.java
@@ -6,6 +6,6 @@ import javax.swing.table.TableModel;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 
 public interface OsmPrimitivesTableModel extends TableModel {
-    
-    public abstract OsmPrimitive getReferredPrimitive(int idx);
+
+    OsmPrimitive getReferredPrimitive(int idx);
 }
diff --git a/src/org/openstreetmap/josm/gui/widgets/PopupMenuLauncher.java b/src/org/openstreetmap/josm/gui/widgets/PopupMenuLauncher.java
index bfbbf0a..f4f5416 100644
--- a/src/org/openstreetmap/josm/gui/widgets/PopupMenuLauncher.java
+++ b/src/org/openstreetmap/josm/gui/widgets/PopupMenuLauncher.java
@@ -51,9 +51,15 @@ public class PopupMenuLauncher extends MouseAdapter {
         this.checkEnabled = checkEnabled;
     }
 
-    @Override public void mousePressed(MouseEvent e) { processEvent(e); }
-    @Override public void mouseClicked(MouseEvent e) {}
-    @Override public void mouseReleased(MouseEvent e) { processEvent(e); }
+    @Override
+    public void mousePressed(MouseEvent e) {
+        processEvent(e);
+    }
+
+    @Override
+    public void mouseReleased(MouseEvent e) {
+        processEvent(e);
+    }
 
     private void processEvent(MouseEvent e) {
         if (e.isPopupTrigger() && (!checkEnabled || e.getComponent().isEnabled())) {
@@ -89,8 +95,11 @@ public class PopupMenuLauncher extends MouseAdapter {
     protected void checkFocusAndShowMenu(final Component component, final MouseEvent evt) {
         if (component != null && component.isFocusable() && !component.hasFocus() && component.requestFocusInWindow()) {
             component.addFocusListener(new FocusListener() {
-                @Override public void focusLost(FocusEvent e) {}
-                @Override public void focusGained(FocusEvent e) {
+                @Override
+                public void focusLost(FocusEvent e) {}
+
+                @Override
+                public void focusGained(FocusEvent e) {
                     showMenu(evt);
                     component.removeFocusListener(this);
                 }
diff --git a/src/org/openstreetmap/josm/gui/widgets/QuadStateCheckBox.java b/src/org/openstreetmap/josm/gui/widgets/QuadStateCheckBox.java
index f1f8090..707f11f 100644
--- a/src/org/openstreetmap/josm/gui/widgets/QuadStateCheckBox.java
+++ b/src/org/openstreetmap/josm/gui/widgets/QuadStateCheckBox.java
@@ -181,52 +181,108 @@ public class QuadStateCheckBox extends JCheckBox {
                 }
             }
         }
-        /** Filter: No one may change the armed/selected/pressed status except us. */
-        @Override public void setArmed(boolean b) { }
-        @Override public void setSelected(boolean b) { }
-        @Override public void setPressed(boolean b) { }
+
+        // ----------------------------------------------------------------------
+        // Filter: No one may change the armed/selected/pressed status except us.
+        // ----------------------------------------------------------------------
+
+        @Override
+        public void setArmed(boolean b) { }
+
+        @Override
+        public void setSelected(boolean b) { }
+
+        @Override
+        public void setPressed(boolean b) { }
+
         /** We disable focusing on the component when it is not enabled. */
-        @Override public void setEnabled(boolean b) {
+        @Override
+        public void setEnabled(boolean b) {
             setFocusable(b);
             other.setEnabled(b);
         }
-        /** All these methods simply delegate to the "other" model
-         * that is being decorated. */
-        @Override public boolean isArmed() { return other.isArmed(); }
-        @Override public boolean isSelected() { return other.isSelected(); }
-        @Override public boolean isEnabled() { return other.isEnabled(); }
-        @Override public boolean isPressed() { return other.isPressed(); }
-        @Override public boolean isRollover() { return other.isRollover(); }
-        @Override public void setRollover(boolean b) { other.setRollover(b); }
-        @Override public void setMnemonic(int key) { other.setMnemonic(key); }
-        @Override public int getMnemonic() { return other.getMnemonic(); }
-        @Override public void setActionCommand(String s) {
+
+        // -------------------------------------------------------------------------------
+        // All these methods simply delegate to the "other" model that is being decorated.
+        // -------------------------------------------------------------------------------
+
+        @Override
+        public boolean isArmed() {
+            return other.isArmed();
+        }
+
+        @Override
+        public boolean isSelected() {
+            return other.isSelected();
+        }
+
+        @Override
+        public boolean isEnabled() {
+            return other.isEnabled();
+        }
+
+        @Override
+        public boolean isPressed() {
+            return other.isPressed();
+        }
+
+        @Override
+        public boolean isRollover() {
+            return other.isRollover();
+        }
+
+        @Override
+        public void setRollover(boolean b) {
+            other.setRollover(b);
+        }
+
+        @Override
+        public void setMnemonic(int key) {
+            other.setMnemonic(key);
+        }
+
+        @Override
+        public int getMnemonic() {
+            return other.getMnemonic();
+        }
+
+        @Override
+        public void setActionCommand(String s) {
             other.setActionCommand(s);
         }
+
         @Override public String getActionCommand() {
             return other.getActionCommand();
         }
+
         @Override public void setGroup(ButtonGroup group) {
             other.setGroup(group);
         }
+
         @Override public void addActionListener(ActionListener l) {
             other.addActionListener(l);
         }
+
         @Override public void removeActionListener(ActionListener l) {
             other.removeActionListener(l);
         }
+
         @Override public void addItemListener(ItemListener l) {
             other.addItemListener(l);
         }
+
         @Override public void removeItemListener(ItemListener l) {
             other.removeItemListener(l);
         }
+
         @Override public void addChangeListener(ChangeListener l) {
             other.addChangeListener(l);
         }
+
         @Override public void removeChangeListener(ChangeListener l) {
             other.removeChangeListener(l);
         }
+
         @Override public Object[] getSelectedObjects() {
             return other.getSelectedObjects();
         }
diff --git a/src/org/openstreetmap/josm/gui/widgets/SelectAllOnFocusGainedDecorator.java b/src/org/openstreetmap/josm/gui/widgets/SelectAllOnFocusGainedDecorator.java
index d7b260d..4e65cf1 100644
--- a/src/org/openstreetmap/josm/gui/widgets/SelectAllOnFocusGainedDecorator.java
+++ b/src/org/openstreetmap/josm/gui/widgets/SelectAllOnFocusGainedDecorator.java
@@ -18,7 +18,7 @@ public class SelectAllOnFocusGainedDecorator extends FocusAdapter{
     public void focusGained(FocusEvent e) {
         Component c = e.getComponent();
         if (c instanceof JTextComponent) {
-            JTextComponent tc = (JTextComponent)c;
+            JTextComponent tc = (JTextComponent) c;
             tc.selectAll();
         }
     }
diff --git a/src/org/openstreetmap/josm/gui/widgets/TextContextualPopupMenu.java b/src/org/openstreetmap/josm/gui/widgets/TextContextualPopupMenu.java
index 9606e66..2f078c8 100644
--- a/src/org/openstreetmap/josm/gui/widgets/TextContextualPopupMenu.java
+++ b/src/org/openstreetmap/josm/gui/widgets/TextContextualPopupMenu.java
@@ -73,6 +73,7 @@ public class TextContextualPopupMenu extends JPopupMenu {
      * Creates a new {@link TextContextualPopupMenu}.
      */
     protected TextContextualPopupMenu() {
+        // Restricts visibility
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/gui/widgets/UrlLabel.java b/src/org/openstreetmap/josm/gui/widgets/UrlLabel.java
index 5725f54..c9983f3 100644
--- a/src/org/openstreetmap/josm/gui/widgets/UrlLabel.java
+++ b/src/org/openstreetmap/josm/gui/widgets/UrlLabel.java
@@ -1,6 +1,8 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.widgets;
 
+import static org.openstreetmap.josm.tools.I18n.tr;
+
 import java.awt.Cursor;
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseListener;
@@ -11,8 +13,6 @@ import javax.swing.SwingUtilities;
 import org.openstreetmap.josm.tools.OpenBrowser;
 import org.openstreetmap.josm.tools.Utils;
 
-import static org.openstreetmap.josm.tools.I18n.tr;
-
 /**
  * Label that contains a clickable link.
  * @since 6340
@@ -66,7 +66,7 @@ public class UrlLabel extends JLabel implements MouseListener {
         this();
         setUrl(url);
         setDescription(description);
-        if (fontPlus!=0) {
+        if (fontPlus != 0) {
             setFont(getFont().deriveFont(0, getFont().getSize()+fontPlus));
         }
         refresh();
@@ -101,7 +101,7 @@ public class UrlLabel extends JLabel implements MouseListener {
      * @param description the description
      */
     public final void setDescription(String description) {
-        this.description = description == null? "" : description;
+        this.description = description == null ? "" : description;
         this.description = this.description.replace("&", "&").replace(">", ">").replace("<", "<");
         refresh();
     }
diff --git a/src/org/openstreetmap/josm/gui/widgets/package-info.java b/src/org/openstreetmap/josm/gui/widgets/package-info.java
new file mode 100644
index 0000000..5f12c64
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/widgets/package-info.java
@@ -0,0 +1,6 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Provides GUI widgets customized for JOSM needs.
+ */
+package org.openstreetmap.josm.gui.widgets;
diff --git a/src/org/openstreetmap/josm/io/AbstractParser.java b/src/org/openstreetmap/josm/io/AbstractParser.java
index f9f452b..e947d40 100644
--- a/src/org/openstreetmap/josm/io/AbstractParser.java
+++ b/src/org/openstreetmap/josm/io/AbstractParser.java
@@ -46,7 +46,7 @@ public abstract class AbstractParser extends DefaultHandler {
         long l = 0L;
         try {
             l = Long.parseLong(v);
-        } catch(NumberFormatException e) {
+        } catch (NumberFormatException e) {
             throwException(tr("Illegal value for mandatory attribute ''{0}'' of type long. Got ''{1}''.", name, v), e);
         }
         if (l < 0) {
@@ -61,8 +61,8 @@ public abstract class AbstractParser extends DefaultHandler {
             return null;
         Long l = 0L;
         try {
-            l = Long.parseLong(v);
-        } catch(NumberFormatException e) {
+            l = Long.valueOf(v);
+        } catch (NumberFormatException e) {
             throwException(tr("Illegal value for mandatory attribute ''{0}'' of type long. Got ''{1}''.", name, v), e);
         }
         if (l < 0) {
@@ -79,7 +79,7 @@ public abstract class AbstractParser extends DefaultHandler {
         double d = 0.0;
         try {
             d = Double.parseDouble(v);
-        } catch(NumberFormatException e) {
+        } catch (NumberFormatException e) {
             throwException(tr("Illegal value for attribute ''{0}'' of type double. Got ''{1}''.", name, v), e);
         }
         return d;
@@ -105,10 +105,10 @@ public abstract class AbstractParser extends DefaultHandler {
     }
 
     protected final HistoryOsmPrimitive createPrimitive(Attributes atts, OsmPrimitiveType type) throws SAXException {
-        long id = getMandatoryAttributeLong(atts,"id");
-        long version = getMandatoryAttributeLong(atts,"version");
-        long changesetId = getMandatoryAttributeLong(atts,"changeset");
-        boolean visible= getMandatoryAttributeBoolean(atts, "visible");
+        long id = getMandatoryAttributeLong(atts, "id");
+        long version = getMandatoryAttributeLong(atts, "version");
+        long changesetId = getMandatoryAttributeLong(atts, "changeset");
+        boolean visible = getMandatoryAttributeBoolean(atts, "visible");
 
         Long uid = getAttributeLong(atts, "uid");
         String userStr = atts.getValue("user");
@@ -129,19 +129,13 @@ public abstract class AbstractParser extends DefaultHandler {
         if (type.equals(OsmPrimitiveType.NODE)) {
             Double lat = getAttributeDouble(atts, "lat");
             Double lon = getAttributeDouble(atts, "lon");
-            LatLon coor = (lat != null && lon != null) ? new LatLon(lat,lon) : null;
-            primitive = new HistoryNode(
-                    id,version,visible,user,changesetId,timestamp,coor
-            );
+            LatLon coor = (lat != null && lon != null) ? new LatLon(lat, lon) : null;
+            primitive = new HistoryNode(id, version, visible, user, changesetId, timestamp, coor);
 
         } else if (type.equals(OsmPrimitiveType.WAY)) {
-            primitive = new HistoryWay(
-                    id,version,visible,user,changesetId,timestamp
-            );
+            primitive = new HistoryWay(id, version, visible, user, changesetId, timestamp);
         } else if (type.equals(OsmPrimitiveType.RELATION)) {
-            primitive = new HistoryRelation(
-                    id,version,visible,user,changesetId,timestamp
-            );
+            primitive = new HistoryRelation(id, version, visible, user, changesetId, timestamp);
         }
         return primitive;
     }
@@ -161,12 +155,12 @@ public abstract class AbstractParser extends DefaultHandler {
     protected final void handleTag(Attributes atts) throws SAXException {
         String key = getMandatoryAttributeString(atts, "k");
         String value = getMandatoryAttributeString(atts, "v");
-        currentPrimitive.put(key,value);
+        currentPrimitive.put(key, value);
     }
 
     protected final void handleNodeReference(Attributes atts) throws SAXException {
         long ref = getMandatoryAttributeLong(atts, "ref");
-        ((HistoryWay)currentPrimitive).addNode(ref);
+        ((HistoryWay) currentPrimitive).addNode(ref);
     }
 
     protected void handleMember(Attributes atts) throws SAXException {
@@ -175,12 +169,12 @@ public abstract class AbstractParser extends DefaultHandler {
         OsmPrimitiveType type = null;
         try {
             type = OsmPrimitiveType.fromApiTypeName(v);
-        } catch(IllegalArgumentException e) {
+        } catch (IllegalArgumentException e) {
             throwException(tr("Illegal value for mandatory attribute ''{0}'' of type OsmPrimitiveType. Got ''{1}''.", "type", v), e);
         }
         String role = getMandatoryAttributeString(atts, "role");
-        RelationMemberData member = new RelationMemberData(role, type,ref);
-        ((HistoryRelation)currentPrimitive).addMember(member);
+        RelationMemberData member = new RelationMemberData(role, type, ref);
+        ((HistoryRelation) currentPrimitive).addMember(member);
     }
 
     protected final boolean doStartElement(String qName, Attributes atts) throws SAXException {
diff --git a/src/org/openstreetmap/josm/io/AbstractReader.java b/src/org/openstreetmap/josm/io/AbstractReader.java
index 1dcc1b6..e91bc0a 100644
--- a/src/org/openstreetmap/josm/io/AbstractReader.java
+++ b/src/org/openstreetmap/josm/io/AbstractReader.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.io;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -81,22 +81,21 @@ public abstract class AbstractReader {
      *
      * @throws IllegalDataException if a data integrity problem is detected
      */
-    protected void processWaysAfterParsing() throws IllegalDataException{
+    protected void processWaysAfterParsing() throws IllegalDataException {
         for (Entry<Long, Collection<Long>> entry : ways.entrySet()) {
             Long externalWayId = entry.getKey();
-            Way w = (Way)externalIdMap.get(new SimplePrimitiveId(externalWayId, OsmPrimitiveType.WAY));
+            Way w = (Way) externalIdMap.get(new SimplePrimitiveId(externalWayId, OsmPrimitiveType.WAY));
             List<Node> wayNodes = new ArrayList<>();
             for (long id : entry.getValue()) {
-                Node n = (Node)externalIdMap.get(new SimplePrimitiveId(id, OsmPrimitiveType.NODE));
+                Node n = (Node) externalIdMap.get(new SimplePrimitiveId(id, OsmPrimitiveType.NODE));
                 if (n == null) {
                     if (id <= 0)
-                        throw new IllegalDataException (
+                        throw new IllegalDataException(
                                 tr("Way with external ID ''{0}'' includes missing node with external ID ''{1}''.",
                                         externalWayId,
                                         id));
                     // create an incomplete node if necessary
-                    //
-                    n = (Node)ds.getPrimitiveById(id,OsmPrimitiveType.NODE);
+                    n = (Node) ds.getPrimitiveById(id, OsmPrimitiveType.NODE);
                     if (n == null) {
                         n = new Node(id);
                         ds.addPrimitive(n);
diff --git a/src/org/openstreetmap/josm/io/AllFormatsImporter.java b/src/org/openstreetmap/josm/io/AllFormatsImporter.java
index b748619..ac2c155 100644
--- a/src/org/openstreetmap/josm/io/AllFormatsImporter.java
+++ b/src/org/openstreetmap/josm/io/AllFormatsImporter.java
@@ -12,12 +12,16 @@ import org.openstreetmap.josm.actions.ExtensionFileFilter;
  * Dummy importer that adds the "All Formats"-Filter when opening files
  */
 public class AllFormatsImporter extends FileImporter {
+    /**
+     * Constructs a new {@code AllFormatsImporter}.
+     */
     public AllFormatsImporter() {
         super(new ExtensionFileFilter(getAllExtensions(), "", tr("All Formats")
                 + " (*.gpx *.osm *.nmea *.jpg ...)"));
     }
 
-    @Override public boolean acceptFile(File pathname) {
+    @Override
+    public boolean acceptFile(File pathname) {
         return false;
     }
 
@@ -28,13 +32,12 @@ public class AllFormatsImporter extends FileImporter {
     private static String getAllExtensions() {
         Iterator<FileImporter> imp = ExtensionFileFilter.importers.iterator();
         StringBuilder ext = new StringBuilder();
-        while(imp.hasNext()) {
+        while (imp.hasNext()) {
             FileImporter fi = imp.next();
-            if(fi instanceof AllFormatsImporter) {
+            if (fi instanceof AllFormatsImporter) {
                 continue;
             }
-            ext.append(fi.filter.getExtensions());
-            ext.append(",");
+            ext.append(fi.filter.getExtensions()).append(',');
         }
         // remove last comma
         return ext.substring(0, ext.length()-1).toString();
diff --git a/src/org/openstreetmap/josm/io/BoundingBoxDownloader.java b/src/org/openstreetmap/josm/io/BoundingBoxDownloader.java
index 1bde9e0..788503b 100644
--- a/src/org/openstreetmap/josm/io/BoundingBoxDownloader.java
+++ b/src/org/openstreetmap/josm/io/BoundingBoxDownloader.java
@@ -48,8 +48,8 @@ public class BoundingBoxDownloader extends OsmServerReader {
         boolean done = false;
         GpxData result = null;
         String url = "trackpoints?bbox="+b.getMinLon()+","+b.getMinLat()+","+b.getMaxLon()+","+b.getMaxLat()+"&page=";
-        for (int i = 0;!done;++i) {
-            progressMonitor.subTask(tr("Downloading points {0} to {1}...", i * 5000, ((i + 1) * 5000)));
+        for (int i = 0; !done; ++i) {
+            progressMonitor.subTask(tr("Downloading points {0} to {1}...", i * 5000, (i + 1) * 5000));
             try (InputStream in = getInputStream(url+i, progressMonitor.createSubTaskMonitor(1, true))) {
                 if (in == null) {
                     break;
@@ -62,7 +62,7 @@ public class BoundingBoxDownloader extends OsmServerReader {
                     result = currentGpx;
                 } else if (currentGpx.hasTrackPoints()) {
                     result.mergeFrom(currentGpx);
-                } else{
+                } else {
                     done = true;
                 }
             }
@@ -79,7 +79,7 @@ public class BoundingBoxDownloader extends OsmServerReader {
     public GpxData parseRawGps(ProgressMonitor progressMonitor) throws OsmTransferException {
         progressMonitor.beginTask("", 1);
         try {
-            progressMonitor.indeterminateSubTask(tr("Contacting OSM Server..."));
+            progressMonitor.indeterminateSubTask(getTaskName());
             if (crosses180th) {
                 // API 0.6 does not support requests crossing the 180th meridian, so make two requests
                 GpxData result = downloadRawGps(new Bounds(lat1, lon1, lat2, 180.0), progressMonitor);
@@ -111,13 +111,32 @@ public class BoundingBoxDownloader extends OsmServerReader {
         }
     }
 
+    /**
+     * Returns the name of the download task to be displayed in the {@link ProgressMonitor}.
+     */
+    protected String getTaskName() {
+        return tr("Contacting OSM Server...");
+    }
+
+    /**
+     * Builds the request part for the bounding box.
+     */
     protected String getRequestForBbox(double lon1, double lat1, double lon2, double lat2) {
         return "map?bbox=" + lon1 + "," + lat1 + "," + lon2 + "," + lat2;
     }
 
+    /**
+     * Parse the given input source and return the dataset.
+     *
+     * @see OsmReader#parseDataSet(InputStream, ProgressMonitor)
+     */
+    protected DataSet parseDataSet(InputStream source, ProgressMonitor progressMonitor) throws IllegalDataException {
+        return OsmReader.parseDataSet(source, progressMonitor);
+    }
+
     @Override
     public DataSet parseOsm(ProgressMonitor progressMonitor) throws OsmTransferException {
-        progressMonitor.beginTask(tr("Contacting OSM Server..."), 10);
+        progressMonitor.beginTask(getTaskName(), 10);
         try {
             DataSet ds = null;
             progressMonitor.indeterminateSubTask(null);
@@ -125,16 +144,18 @@ public class BoundingBoxDownloader extends OsmServerReader {
                 // API 0.6 does not support requests crossing the 180th meridian, so make two requests
                 DataSet ds2 = null;
 
-                try (InputStream in = getInputStream(getRequestForBbox(lon1, lat1, 180.0, lat2), progressMonitor.createSubTaskMonitor(9, false))) {
+                try (InputStream in = getInputStream(getRequestForBbox(lon1, lat1, 180.0, lat2),
+                        progressMonitor.createSubTaskMonitor(9, false))) {
                     if (in == null)
                         return null;
-                    ds = OsmReader.parseDataSet(in, progressMonitor.createSubTaskMonitor(1, false));
+                    ds = parseDataSet(in, progressMonitor.createSubTaskMonitor(1, false));
                 }
 
-                try (InputStream in = getInputStream(getRequestForBbox(-180.0, lat1, lon2, lat2), progressMonitor.createSubTaskMonitor(9, false))) {
+                try (InputStream in = getInputStream(getRequestForBbox(-180.0, lat1, lon2, lat2),
+                        progressMonitor.createSubTaskMonitor(9, false))) {
                     if (in == null)
                         return null;
-                    ds2 = OsmReader.parseDataSet(in, progressMonitor.createSubTaskMonitor(1, false));
+                    ds2 = parseDataSet(in, progressMonitor.createSubTaskMonitor(1, false));
                 }
                 if (ds2 == null)
                     return null;
@@ -142,14 +163,15 @@ public class BoundingBoxDownloader extends OsmServerReader {
 
             } else {
                 // Simple request
-                try (InputStream in = getInputStream(getRequestForBbox(lon1, lat1, lon2, lat2), progressMonitor.createSubTaskMonitor(9, false))) {
+                try (InputStream in = getInputStream(getRequestForBbox(lon1, lat1, lon2, lat2),
+                        progressMonitor.createSubTaskMonitor(9, false))) {
                     if (in == null)
                         return null;
-                    ds = OsmReader.parseDataSet(in, progressMonitor.createSubTaskMonitor(1, false));
+                    ds = parseDataSet(in, progressMonitor.createSubTaskMonitor(1, false));
                 }
             }
             return ds;
-        } catch(OsmTransferException e) {
+        } catch (OsmTransferException e) {
             throw e;
         } catch (Exception e) {
             throw new OsmTransferException(e);
@@ -160,7 +182,8 @@ public class BoundingBoxDownloader extends OsmServerReader {
     }
 
     @Override
-    public List<Note> parseNotes(int noteLimit, int daysClosed, ProgressMonitor progressMonitor) throws OsmTransferException, MoreNotesException {
+    public List<Note> parseNotes(int noteLimit, int daysClosed, ProgressMonitor progressMonitor)
+            throws OsmTransferException, MoreNotesException {
         progressMonitor.beginTask("Downloading notes");
         CheckParameterUtil.ensureThat(noteLimit > 0, "Requested note limit is less than 1.");
         // see result_limit in https://github.com/openstreetmap/openstreetmap-website/blob/master/app/controllers/notes_controller.rb
@@ -187,7 +210,7 @@ public class BoundingBoxDownloader extends OsmServerReader {
     /**
      * Indicates that the number of fetched notes equals the specified limit. Thus there might be more notes to download.
      */
-    public static class MoreNotesException extends RuntimeException{
+    public static class MoreNotesException extends RuntimeException {
         /**
          * The downloaded notes
          */
diff --git a/src/org/openstreetmap/josm/io/CacheCustomContent.java b/src/org/openstreetmap/josm/io/CacheCustomContent.java
index bd68ebb..c35cf89 100644
--- a/src/org/openstreetmap/josm/io/CacheCustomContent.java
+++ b/src/org/openstreetmap/josm/io/CacheCustomContent.java
@@ -13,11 +13,10 @@ import org.openstreetmap.josm.Main;
 
 /**
  * Use this class if you want to cache and store a single file that gets updated regularly.
- * Unless you flush() it will be kept in memory. If you want to cache a lot of data and/or files,
- * use CacheFiles
+ * Unless you flush() it will be kept in memory. If you want to cache a lot of data and/or files, use CacheFiles.
+ * @author xeen
  * @param <T> a {@link Throwable} that may be thrown during {@link #updateData()},
  * use {@link RuntimeException} if no exception must be handled.
- * @author xeen
  * @since 1450
  */
 public abstract class CacheCustomContent<T extends Throwable> {
@@ -134,7 +133,7 @@ public abstract class CacheCustomContent<T extends Throwable> {
     public byte[] updateForce() throws T {
         this.data = updateData();
         saveToDisk();
-        Main.pref.putInteger("cache." + ident, (int)(System.currentTimeMillis()/1000));
+        Main.pref.putInteger("cache." + ident, (int) (System.currentTimeMillis()/1000));
         return data;
     }
 
diff --git a/src/org/openstreetmap/josm/io/CacheFiles.java b/src/org/openstreetmap/josm/io/CacheFiles.java
deleted file mode 100644
index 193f5b3..0000000
--- a/src/org/openstreetmap/josm/io/CacheFiles.java
+++ /dev/null
@@ -1,379 +0,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.io;
-
-import java.awt.image.BufferedImage;
-import java.io.File;
-import java.io.RandomAccessFile;
-import java.math.BigInteger;
-import java.nio.charset.StandardCharsets;
-import java.security.MessageDigest;
-import java.util.Iterator;
-import java.util.Set;
-import java.util.SortedMap;
-import java.util.TreeMap;
-
-import javax.imageio.ImageIO;
-
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.tools.ImageProvider;
-
-/**
- * Use this class if you want to cache a lot of files that shouldn't be kept in memory. You can
- * specify how much data should be stored and after which date the files should be expired.
- * This works on a last-access basis, so files get deleted after they haven't been used for x days.
- * You can turn this off by calling setUpdateModTime(false). Files get deleted on a first-in-first-out
- * basis.
- * @author xeen
- *
- */
-public class CacheFiles {
-    /**
-     * Common expirey dates
-     */
-    public static final int EXPIRE_NEVER = -1;
-    public static final int EXPIRE_DAILY = 60 * 60 * 24;
-    public static final int EXPIRE_WEEKLY = EXPIRE_DAILY * 7;
-    public static final int EXPIRE_MONTHLY = EXPIRE_WEEKLY * 4;
-
-    private final File dir;
-    private final String ident;
-    private final boolean enabled;
-
-    private long expire;  // in seconds
-    private long maxsize; // in megabytes
-    private boolean updateModTime = true;
-
-    // If the cache is full, we don't want to delete just one file
-    private static final int CLEANUP_TRESHOLD = 20;
-    // We don't want to clean after every file-write
-    private static final int CLEANUP_INTERVAL = 5;
-    // Stores how many files have been written
-    private int writes = 0;
-
-    /**
-     * Creates a new cache class. The ident will be used to store the files on disk and to save
-     * expire/space settings. Set plugin state to <code>true</code>.
-     * @param ident cache identifier
-     */
-    public CacheFiles(String ident) {
-        this(ident, true);
-    }
-
-    /**
-     * Creates a new cache class. The ident will be used to store the files on disk and to save
-     * expire/space settings.
-     * @param ident cache identifier
-     * @param isPlugin Whether this is a plugin or not (changes cache path)
-     */
-    public CacheFiles(String ident, boolean isPlugin) {
-        String pref = isPlugin ?
-                Main.pref.getPluginsDirectory().getPath() + File.separator + "cache" :
-                Main.pref.getCacheDirectory().getPath();
-
-        boolean dir_writeable;
-        this.ident = ident;
-        String cacheDir = Main.pref.get("cache." + ident + "." + "path", pref + File.separator + ident + File.separator);
-        this.dir = new File(cacheDir);
-        try {
-            this.dir.mkdirs();
-            dir_writeable = true;
-        } catch(Exception e) {
-            // We have no access to this directory, so don't do anything
-            dir_writeable = false;
-        }
-        this.enabled = dir_writeable;
-        this.expire = Main.pref.getLong("cache." + ident + "." + "expire", EXPIRE_DAILY);
-        if(this.expire < 0) {
-            this.expire = CacheFiles.EXPIRE_NEVER;
-        }
-        this.maxsize = Main.pref.getLong("cache." + ident + "." + "maxsize", 50);
-        if(this.maxsize < 0) {
-            this.maxsize = -1;
-        }
-    }
-
-    /**
-     * Loads the data for the given ident as an byte array. Returns null if data not available.
-     * @param ident cache identifier
-     * @return stored data
-     */
-    public byte[] getData(String ident) {
-        if(!enabled) return null;
-        try {
-            File data = getPath(ident);
-            if(!data.exists())
-                return null;
-
-            if(isExpired(data)) {
-                data.delete();
-                return null;
-            }
-
-            // Update last mod time so we don't expire recently used data
-            if(updateModTime) {
-                data.setLastModified(System.currentTimeMillis());
-            }
-
-            byte[] bytes = new byte[(int) data.length()];
-            try (RandomAccessFile raf = new RandomAccessFile(data, "r")) {
-                raf.readFully(bytes);
-            }
-            return bytes;
-        } catch (Exception e) {
-            Main.warn(e);
-        }
-        return null;
-    }
-
-    /**
-     * Writes an byte-array to disk
-     * @param ident cache identifier
-     * @param data data to store
-     */
-    public void saveData(String ident, byte[] data) {
-        if(!enabled) return;
-        try {
-            File f = getPath(ident);
-            if (f.exists()) {
-                f.delete();
-            }
-            // rws also updates the file meta-data, i.e. last mod time
-            try (RandomAccessFile raf = new RandomAccessFile(f, "rws")) {
-                raf.write(data);
-            }
-        } catch (Exception e) {
-            Main.warn(e);
-        }
-
-        writes++;
-        checkCleanUp();
-    }
-
-    /**
-     * Loads the data for the given ident as an image. If no image is found, null is returned
-     * @param ident cache identifier
-     * @return BufferedImage or null
-     */
-    public BufferedImage getImg(String ident) {
-        if(!enabled) return null;
-        try {
-            File img = getPath(ident, "png");
-            if(!img.exists())
-                return null;
-
-            if(isExpired(img)) {
-                img.delete();
-                return null;
-            }
-            // Update last mod time so we don't expire recently used images
-            if(updateModTime) {
-                img.setLastModified(System.currentTimeMillis());
-            }
-            return ImageProvider.read(img, false, false);
-        } catch (Exception e) {
-            Main.warn(e);
-        }
-        return null;
-    }
-
-    /**
-     * Saves a given image and ident to the cache
-     * @param ident cache identifier
-     * @param image imaga data for storage
-     */
-    public void saveImg(String ident, BufferedImage image) {
-        if (!enabled) return;
-        try {
-            ImageIO.write(image, "png", getPath(ident, "png"));
-        } catch (Exception e) {
-            Main.warn(e);
-        }
-
-        writes++;
-        checkCleanUp();
-    }
-
-    /**
-     * Sets the amount of time data is stored before it gets expired
-     * @param amount of time in seconds
-     * @param force will also write it to the preferences
-     */
-    public void setExpire(int amount, boolean force) {
-        String key = "cache." + ident + "." + "expire";
-        if(!Main.pref.get(key).isEmpty() && !force)
-            return;
-
-        this.expire = amount > 0 ? amount : EXPIRE_NEVER;
-        Main.pref.putLong(key, this.expire);
-    }
-
-    /**
-     * Sets the amount of data stored in the cache
-     * @param amount in Megabytes
-     * @param force will also write it to the preferences
-     */
-    public void setMaxSize(int amount, boolean force) {
-        String key = "cache." + ident + "." + "maxsize";
-        if(!Main.pref.get(key).isEmpty() && !force)
-            return;
-
-        this.maxsize = amount > 0 ? amount : -1;
-        Main.pref.putLong(key, this.maxsize);
-    }
-
-    /**
-     * Call this with <code>true</code> to update the last modification time when a file it is read.
-     * Call this with <code>false</code> to not update the last modification time when a file is read.
-     * @param to update state
-     */
-    public void setUpdateModTime(boolean to) {
-        updateModTime = to;
-    }
-
-    /**
-     * Checks if a clean up is needed and will do so if necessary
-     */
-    public void checkCleanUp() {
-        if(this.writes > CLEANUP_INTERVAL) {
-            cleanUp();
-        }
-    }
-
-    /**
-     * Performs a default clean up with the set values (deletes oldest files first)
-     */
-    public void cleanUp() {
-        if(!this.enabled || maxsize == -1) return;
-
-        SortedMap<Long, File> modtime = new TreeMap<>();
-        long dirsize = 0;
-
-        File[] files = dir.listFiles();
-        if (files != null) {
-            for(File f : files) {
-                if(isExpired(f)) {
-                    f.delete();
-                } else {
-                    dirsize += f.length();
-                    modtime.put(f.lastModified(), f);
-                }
-            }
-        }
-
-        if(dirsize < maxsize*1000*1000) return;
-
-        Set<Long> keySet = modtime.keySet();
-        Iterator<Long> it = keySet.iterator();
-        int i=0;
-        while (it.hasNext()) {
-            i++;
-            modtime.get(it.next()).delete();
-
-            // Delete a couple of files, then check again
-            if(i % CLEANUP_TRESHOLD == 0 && getDirSize() < maxsize)
-                return;
-        }
-        writes = 0;
-    }
-
-    public static final int CLEAN_ALL = 0;
-    public static final int CLEAN_SMALL_FILES = 1;
-    public static final int CLEAN_BY_DATE = 2;
-
-    /**
-     * Performs a non-default, specified clean up
-     * @param type any of the CLEAN_XX constants.
-     * @param size for CLEAN_SMALL_FILES: deletes all files smaller than (size) bytes
-     */
-    public void customCleanUp(int type, int size) {
-        File[] files;
-        switch(type) {
-        case CLEAN_ALL:
-            files = dir.listFiles();
-            if (files != null) {
-                for (File f : files) {
-                    f.delete();
-                }
-            }
-            break;
-        case CLEAN_SMALL_FILES:
-            files = dir.listFiles();
-            if (files != null) {
-                for (File f: files) {
-                    if (f.length() < size) {
-                        f.delete();
-                    }
-                }
-            }
-            break;
-        case CLEAN_BY_DATE:
-            cleanUp();
-            break;
-        }
-    }
-
-    /**
-     * Calculates the size of the directory
-     * @return long Size of directory in bytes
-     */
-    private long getDirSize() {
-        if(!enabled) return -1;
-        long dirsize = 0;
-
-        File[] files = dir.listFiles();
-        if (files != null) {
-            for(File f : files) {
-                dirsize += f.length();
-            }
-        }
-        return dirsize;
-    }
-
-    /**
-     * Returns a short and unique file name for a given long identifier
-     * @return String short filename
-     */
-    private static String getUniqueFilename(String ident) {
-        try {
-            MessageDigest md = MessageDigest.getInstance("MD5");
-            BigInteger number = new BigInteger(1, md.digest(ident.getBytes(StandardCharsets.UTF_8)));
-            return number.toString(16);
-        } catch(Exception e) {
-            // Fall back. Remove unsuitable characters and some random ones to shrink down path length.
-            // Limit it to 70 characters, that leaves about 190 for the path on Windows/NTFS
-            ident = ident.replaceAll("[^a-zA-Z0-9]", "");
-            ident = ident.replaceAll("[acegikmoqsuwy]", "");
-            return ident.substring(ident.length() - 70);
-        }
-    }
-
-    /**
-     * Gets file path for ident with customizable file-ending
-     * @param ident cache identifier
-     * @param ending file extension
-     * @return file structure
-     */
-    private File getPath(String ident, String ending) {
-        return new File(dir, getUniqueFilename(ident) + "." + ending);
-    }
-
-    /**
-     * Gets file path for ident
-     * @param ident cache identifier
-     * @return file structure
-     */
-    private File getPath(String ident) {
-        return new File(dir, getUniqueFilename(ident));
-    }
-
-    /**
-     * Checks whether a given file is expired
-     * @param file file description structure
-     * @return expired state
-     */
-    private boolean isExpired(File file) {
-        if(CacheFiles.EXPIRE_NEVER == this.expire)
-            return false;
-        return (file.lastModified() < (System.currentTimeMillis() - expire*1000));
-    }
-}
diff --git a/src/org/openstreetmap/josm/io/CachedFile.java b/src/org/openstreetmap/josm/io/CachedFile.java
index 9254a2e..4b624c5 100644
--- a/src/org/openstreetmap/josm/io/CachedFile.java
+++ b/src/org/openstreetmap/josm/io/CachedFile.java
@@ -19,6 +19,9 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Enumeration;
 import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
 
@@ -58,6 +61,7 @@ public class CachedFile {
          */
         IfModifiedSince
     }
+
     protected String name;
     protected long maxAge;
     protected String destDir;
@@ -70,15 +74,17 @@ public class CachedFile {
     public static final long DEFAULT_MAXTIME = -1L;
     public static final long DAYS = 24*60*60; // factor to get caching time in days
 
+    private Map<String, String> httpHeaders = new ConcurrentHashMap<>();
+
     /**
      * Constructs a CachedFile object from a given filename, URL or internal resource.
      *
      * @param name can be:<ul>
      *  <li>relative or absolute file name</li>
      *  <li>{@code file:///SOME/FILE} the same as above</li>
-     *  <li>{@code http://...} a URL. It will be cached on disk.</li></ul>
+     *  <li>{@code http://...} a URL. It will be cached on disk.</li>
      *  <li>{@code resource://SOME/FILE} file from the classpath (usually in the current *.jar)</li>
-     *  <li>{@code josmdir://SOME/FILE} file inside josm user data directory (since r7058)</li></ul>
+     *  <li>{@code josmdir://SOME/FILE} file inside josm user data directory (since r7058)</li>
      *  <li>{@code josmplugindir://SOME/FILE} file inside josm plugin directory (since r7834)</li></ul>
      */
     public CachedFile(String name) {
@@ -90,9 +96,9 @@ public class CachedFile {
      * @param name can be:<ul>
      *  <li>relative or absolute file name</li>
      *  <li>{@code file:///SOME/FILE} the same as above</li>
-     *  <li>{@code http://...} a URL. It will be cached on disk.</li></ul>
+     *  <li>{@code http://...} a URL. It will be cached on disk.</li>
      *  <li>{@code resource://SOME/FILE} file from the classpath (usually in the current *.jar)</li>
-     *  <li>{@code josmdir://SOME/FILE} file inside josm user data directory (since r7058)</li></ul>
+     *  <li>{@code josmdir://SOME/FILE} file inside josm user data directory (since r7058)</li>
      *  <li>{@code josmplugindir://SOME/FILE} file inside josm plugin directory (since r7834)</li></ul>
      * @return this object
      */
@@ -135,7 +141,7 @@ public class CachedFile {
 
     /**
      * Set the caching strategy. Only applies to URLs.
-     * @param cachingStrategy
+     * @param cachingStrategy caching strategy
      * @return this object
      */
     public CachedFile setCachingStrategy(CachingStrategy cachingStrategy) {
@@ -143,6 +149,16 @@ public class CachedFile {
         return this;
     }
 
+    /**
+     * Sets the http headers. Only applies to URL pointing to http or https resources
+     * @param headers that should be sent together with request
+     * @return this object
+     */
+    public CachedFile setHttpHeaders(Map<String, String> headers) {
+        this.httpHeaders.putAll(headers);
+        return this;
+    }
+
     public String getName() {
         return name;
     }
@@ -198,9 +214,9 @@ public class CachedFile {
         try {
             url = new URL(name);
             if ("file".equals(url.getProtocol())) {
-                cacheFile = new File(name.substring("file:/".length()));
+                cacheFile = new File(name.substring("file:/".length() - 1));
                 if (!cacheFile.exists()) {
-                    cacheFile = new File(name.substring("file://".length()));
+                    cacheFile = new File(name.substring("file://".length() - 1));
                 }
             } else {
                 cacheFile = checkLocal(url);
@@ -319,7 +335,7 @@ public class CachedFile {
                 List<String> localPath = new ArrayList<>(Main.pref.getCollection(prefKey));
                 if (localPath.size() == 2) {
                     File lfile = new File(localPath.get(1));
-                    if(lfile.exists()) {
+                    if (lfile.exists()) {
                         lfile.delete();
                     }
                 }
@@ -338,11 +354,10 @@ public class CachedFile {
     private static String getPrefKey(URL url, String destDir) {
         StringBuilder prefKey = new StringBuilder("mirror.");
         if (destDir != null) {
-            prefKey.append(destDir);
-            prefKey.append(".");
+            prefKey.append(destDir).append('.');
         }
         prefKey.append(url.toString());
-        return prefKey.toString().replaceAll("=","_");
+        return prefKey.toString().replaceAll("=", "_");
     }
 
     private File checkLocal(URL url) throws IOException {
@@ -364,7 +379,7 @@ public class CachedFile {
             if (!localFile.exists()) {
                 localFile = null;
             } else {
-                if ( maxAge == DEFAULT_MAXTIME
+                if (maxAge == DEFAULT_MAXTIME
                         || maxAge <= 0 // arbitrary value <= 0 is deprecated
                 ) {
                     lMaxAge = Main.pref.getInteger("mirror.maxtime", 7*24*60*60); // one week
@@ -374,7 +389,7 @@ public class CachedFile {
                     return localFile;
                 }
                 if (cachingStrategy == CachingStrategy.IfModifiedSince) {
-                    ifModifiedSince = Long.parseLong(localPathEntry.get(0));
+                    ifModifiedSince = Long.valueOf(localPathEntry.get(0));
                 }
             }
         }
@@ -396,7 +411,7 @@ public class CachedFile {
         String localPath = "mirror_" + a;
         destDirFile = new File(destDir, localPath + ".tmp");
         try {
-            HttpURLConnection con = connectFollowingRedirect(url, httpAccept, ifModifiedSince);
+            HttpURLConnection con = connectFollowingRedirect(url, httpAccept, ifModifiedSince, httpHeaders);
             if (ifModifiedSince != null && con.getResponseCode() == HttpURLConnection.HTTP_NOT_MODIFIED) {
                 if (Main.isDebugEnabled()) {
                     Main.debug("304 Not Modified ("+urlStr+")");
@@ -461,25 +476,50 @@ public class CachedFile {
      * @throws OfflineAccessException if resource is accessed in offline mode, in any protocol
      * @since 6867
      */
-    public static HttpURLConnection connectFollowingRedirect(URL downloadUrl, String httpAccept, Long ifModifiedSince) throws MalformedURLException, IOException {
+    public static HttpURLConnection connectFollowingRedirect(URL downloadUrl, String httpAccept, Long ifModifiedSince)
+            throws MalformedURLException, IOException {
+        return connectFollowingRedirect(downloadUrl, httpAccept, ifModifiedSince, null);
+    }
+    /**
+     * Opens a connection for downloading a resource.
+     * <p>
+     * Manually follows redirects because
+     * {@link HttpURLConnection#setFollowRedirects(boolean)} fails if the redirect
+     * is going from a http to a https URL, see <a href="https://bugs.openjdk.java.net/browse/JDK-4620571">bug report</a>.
+     * <p>
+     * This can cause problems when downloading from certain GitHub URLs.
+     *
+     * @param downloadUrl The resource URL to download
+     * @param httpAccept The accepted MIME types sent in the HTTP Accept header. Can be {@code null}
+     * @param ifModifiedSince The download time of the cache file, optional
+     * @param headers http headers to be sent together with http request
+     * @return The HTTP connection effectively linked to the resource, after all potential redirections
+     * @throws MalformedURLException If a redirected URL is wrong
+     * @throws IOException If any I/O operation goes wrong
+     * @throws OfflineAccessException if resource is accessed in offline mode, in any protocol
+     * @since TODO
+     */
+    public static HttpURLConnection connectFollowingRedirect(URL downloadUrl, String httpAccept, Long ifModifiedSince,
+            Map<String, String> headers) throws MalformedURLException, IOException {
         CheckParameterUtil.ensureParameterNotNull(downloadUrl, "downloadUrl");
         String downloadString = downloadUrl.toExternalForm();
 
         checkOfflineAccess(downloadString);
 
-        HttpURLConnection con = null;
         int numRedirects = 0;
-        while(true) {
-            con = Utils.openHttpConnection(downloadUrl);
-            if (con == null) {
-                throw new IOException("Cannot open http connection to "+downloadString);
-            }
+        while (true) {
+            HttpURLConnection con = Utils.openHttpConnection(downloadUrl);
             if (ifModifiedSince != null) {
                 con.setIfModifiedSince(ifModifiedSince);
             }
+            if (headers != null) {
+                for (Entry<String, String> header: headers.entrySet()) {
+                    con.setRequestProperty(header.getKey(), header.getValue());
+                }
+            }
             con.setInstanceFollowRedirects(false);
-            con.setConnectTimeout(Main.pref.getInteger("socket.timeout.connect",15)*1000);
-            con.setReadTimeout(Main.pref.getInteger("socket.timeout.read",30)*1000);
+            con.setConnectTimeout(Main.pref.getInteger("socket.timeout.connect", 15)*1000);
+            con.setReadTimeout(Main.pref.getInteger("socket.timeout.read", 30)*1000);
             if (Main.isDebugEnabled()) {
                 Main.debug("GET "+downloadString);
             }
diff --git a/src/org/openstreetmap/josm/io/Capabilities.java b/src/org/openstreetmap/josm/io/Capabilities.java
index eae6abc..3dfa931 100644
--- a/src/org/openstreetmap/josm/io/Capabilities.java
+++ b/src/org/openstreetmap/josm/io/Capabilities.java
@@ -50,7 +50,7 @@ import org.xml.sax.helpers.DefaultHandler;
  */
 public class Capabilities {
 
-    private final Map<String, Map<String,String>> capabilities;
+    private final Map<String, Map<String, String>> capabilities;
     private final List<String> imageryBlacklist;
 
     /**
@@ -69,10 +69,10 @@ public class Capabilities {
      * @return {@code true} if defined, {@code false} otherwise
      */
     public boolean isDefined(String element, String attribute) {
-        if (! capabilities.containsKey(element)) return false;
+        if (!capabilities.containsKey(element)) return false;
         Map<String, String> e = capabilities.get(element);
         if (e == null) return false;
-        return (e.get(attribute) != null);
+        return e.get(attribute) != null;
     }
 
     /**
@@ -83,7 +83,7 @@ public class Capabilities {
      * @return the value; {@code null}, if the respective configuration item does not exist
      */
     public String get(String element, String attribute) {
-        if (! capabilities.containsKey(element)) return null;
+        if (!capabilities.containsKey(element)) return null;
         Map<String, String> e = capabilities.get(element);
         if (e == null) return null;
         return e.get(attribute);
@@ -100,7 +100,7 @@ public class Capabilities {
     public Double getDouble(String element, String attribute) throws NumberFormatException {
         String s = get(element, attribute);
         if (s == null) return null;
-        return Double.parseDouble(s);
+        return Double.valueOf(s);
     }
 
     /**
@@ -114,7 +114,7 @@ public class Capabilities {
     public Long getLong(String element, String attribute) {
         String s = get(element, attribute);
         if (s == null) return null;
-        return Long.parseLong(s);
+        return Long.valueOf(s);
     }
 
     /**
@@ -130,8 +130,8 @@ public class Capabilities {
                 imageryBlacklist.add(value);
             }
         } else {
-            if (! capabilities.containsKey(element))  {
-                Map<String,String> h = new HashMap<>();
+            if (!capabilities.containsKey(element))  {
+                Map<String, String> h = new HashMap<>();
                 capabilities.put(element, h);
             }
             Map<String, String> e = capabilities.get(element);
@@ -196,7 +196,7 @@ public class Capabilities {
         String v = get("waynodes", "maximum");
         if (v != null) {
             try {
-                Long n = Long.parseLong(v);
+                long n = Long.parseLong(v);
                 if (n <= 0) {
                     warnIllegalValue("waynodes", "maximum", n);
                 } else {
@@ -247,7 +247,7 @@ public class Capabilities {
 
         @Override
         public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {
-            for (int i=0; i< atts.getLength(); i++) {
+            for (int i = 0; i < atts.getLength(); i++) {
                 capabilities.put(qName, atts.getQName(i), atts.getValue(i));
             }
         }
@@ -271,7 +271,7 @@ public class Capabilities {
          */
         public static Capabilities parse(InputSource inputSource) throws SAXException, IOException, ParserConfigurationException {
             CapabilitiesParser parser = new CapabilitiesParser();
-            Utils.newSafeSAXParser().parse(inputSource, parser);
+            Utils.parseSafeSAX(inputSource, parser);
             return parser.getCapabilities();
         }
     }
diff --git a/src/org/openstreetmap/josm/io/ChangesetClosedException.java b/src/org/openstreetmap/josm/io/ChangesetClosedException.java
index e952308..55d73bb 100644
--- a/src/org/openstreetmap/josm/io/ChangesetClosedException.java
+++ b/src/org/openstreetmap/josm/io/ChangesetClosedException.java
@@ -76,7 +76,7 @@ public class ChangesetClosedException extends OsmTransferException {
             changesetId = Long.parseLong(m.group(1));
             try {
                 closedOn = DateUtils.newOsmApiDateTimeFormat().parse(m.group(2));
-            } catch(ParseException ex) {
+            } catch (ParseException ex) {
                 Main.error(tr("Failed to parse date ''{0}'' replied by server.", m.group(2)));
                 Main.error(ex);
             }
diff --git a/src/org/openstreetmap/josm/io/ChangesetQuery.java b/src/org/openstreetmap/josm/io/ChangesetQuery.java
index 74bff7d..b469e93 100644
--- a/src/org/openstreetmap/josm/io/ChangesetQuery.java
+++ b/src/org/openstreetmap/josm/io/ChangesetQuery.java
@@ -30,7 +30,7 @@ public class ChangesetQuery {
      * @return the query object
      * @throws ChangesetQueryUrlException if query doesn't consist of valid query parameters
      */
-    public static ChangesetQuery buildFromUrlQuery(String query) throws ChangesetQueryUrlException{
+    public static ChangesetQuery buildFromUrlQuery(String query) throws ChangesetQueryUrlException {
         return new ChangesetQueryUrlParser().parse(query);
     }
 
@@ -51,13 +51,6 @@ public class ChangesetQuery {
     private Collection<Long> changesetIds = null;
 
     /**
-     * Constructs a new {@code ChangesetQuery}.
-     */
-    public ChangesetQuery() {
-
-    }
-
-    /**
      * Restricts the query to changesets owned by the user with id <code>uid</code>.
      *
      * @param uid the uid of the user. > 0 expected.
@@ -157,7 +150,7 @@ public class ChangesetQuery {
     public ChangesetQuery inBbox(LatLon min, LatLon max) {
         CheckParameterUtil.ensureParameterNotNull(min, "min");
         CheckParameterUtil.ensureParameterNotNull(max, "max");
-        this.bounds  = new Bounds(min,max);
+        this.bounds  = new Bounds(min, max);
         return this;
     }
 
@@ -199,7 +192,7 @@ public class ChangesetQuery {
      * @throws IllegalArgumentException if closedAfter is null
      * @throws IllegalArgumentException if createdBefore is null
      */
-    public ChangesetQuery closedAfterAndCreatedBefore(Date closedAfter, Date createdBefore ) {
+    public ChangesetQuery closedAfterAndCreatedBefore(Date closedAfter, Date createdBefore) {
         CheckParameterUtil.ensureParameterNotNull(closedAfter, "closedAfter");
         CheckParameterUtil.ensureParameterNotNull(createdBefore, "createdBefore");
         this.closedAfter = closedAfter;
@@ -252,45 +245,45 @@ public class ChangesetQuery {
     public String getQueryString() {
         StringBuilder sb = new StringBuilder();
         if (uid != null) {
-            sb.append("user").append("=").append(uid);
+            sb.append("user=").append(uid);
         } else if (userName != null) {
-            sb.append("display_name").append("=").append(Utils.encodeUrl(userName));
+            sb.append("display_name=").append(Utils.encodeUrl(userName));
         }
         if (bounds != null) {
             if (sb.length() > 0) {
-                sb.append("&");
+                sb.append('&');
             }
             sb.append("bbox=").append(bounds.encodeAsString(","));
         }
         if (closedAfter != null && createdBefore != null) {
             if (sb.length() > 0) {
-                sb.append("&");
+                sb.append('&');
             }
             DateFormat df = DateUtils.newIsoDateTimeFormat();
-            sb.append("time").append("=").append(df.format(closedAfter));
-            sb.append(",").append(df.format(createdBefore));
+            sb.append("time=").append(df.format(closedAfter));
+            sb.append(',').append(df.format(createdBefore));
         } else if (closedAfter != null) {
             if (sb.length() > 0) {
-                sb.append("&");
+                sb.append('&');
             }
             DateFormat df = DateUtils.newIsoDateTimeFormat();
-            sb.append("time").append("=").append(df.format(closedAfter));
+            sb.append("time=").append(df.format(closedAfter));
         }
 
         if (open != null) {
             if (sb.length() > 0) {
-                sb.append("&");
+                sb.append('&');
             }
             sb.append("open=").append(Boolean.toString(open));
         } else if (closed != null) {
             if (sb.length() > 0) {
-                sb.append("&");
+                sb.append('&');
             }
             sb.append("closed=").append(Boolean.toString(closed));
         } else if (changesetIds != null) {
             // since 2013-12-05, see https://github.com/openstreetmap/openstreetmap-website/commit/1d1f194d598e54a5d6fb4f38fb569d4138af0dc8
             if (sb.length() > 0) {
-                sb.append("&");
+                sb.append('&');
             }
             sb.append("changesets=").append(Utils.join(",", changesetIds));
         }
@@ -314,6 +307,17 @@ public class ChangesetQuery {
         }
 
         /**
+         * Constructs a new {@code ChangesetQueryUrlException} with the specified cause and detail message.
+         *
+         * @param message the detail message. The detail message is saved for later retrieval by the {@link #getMessage()} method.
+         * @param  cause the cause (which is saved for later retrieval by the {@link #getCause()} method).
+         *         (A <tt>null</tt> value is permitted, and indicates that the cause is nonexistent or unknown.)
+         */
+        public ChangesetQueryUrlException(String message, Throwable cause) {
+            super(message, cause);
+        }
+
+        /**
          * Constructs a new {@code ChangesetQueryUrlException} with the specified cause and a detail message of
          * <tt>(cause==null ? null : cause.toString())</tt> (which typically contains the class and detail message of <tt>cause</tt>).
          *
@@ -328,46 +332,54 @@ public class ChangesetQuery {
     public static class ChangesetQueryUrlParser {
         protected int parseUid(String value) throws ChangesetQueryUrlException {
             if (value == null || value.trim().isEmpty())
-                throw new ChangesetQueryUrlException(tr("Unexpected value for ''{0}'' in changeset query url, got {1}", "uid", value));
+                throw new ChangesetQueryUrlException(
+                        tr("Unexpected value for ''{0}'' in changeset query url, got {1}", "uid", value));
             int id;
             try {
                 id = Integer.parseInt(value);
                 if (id <= 0)
-                    throw new ChangesetQueryUrlException(tr("Unexpected value for ''{0}'' in changeset query url, got {1}", "uid", value));
-            } catch(NumberFormatException e) {
-                throw new ChangesetQueryUrlException(tr("Unexpected value for ''{0}'' in changeset query url, got {1}", "uid", value));
+                    throw new ChangesetQueryUrlException(
+                            tr("Unexpected value for ''{0}'' in changeset query url, got {1}", "uid", value));
+            } catch (NumberFormatException e) {
+                throw new ChangesetQueryUrlException(
+                        tr("Unexpected value for ''{0}'' in changeset query url, got {1}", "uid", value), e);
             }
             return id;
         }
 
         protected boolean parseBoolean(String value, String parameter) throws ChangesetQueryUrlException {
             if (value == null || value.trim().isEmpty())
-                throw new ChangesetQueryUrlException(tr("Unexpected value for ''{0}'' in changeset query url, got {1}", parameter, value));
+                throw new ChangesetQueryUrlException(
+                        tr("Unexpected value for ''{0}'' in changeset query url, got {1}", parameter, value));
             switch (value) {
             case "true":
                 return true;
             case "false":
                 return false;
             default:
-                throw new ChangesetQueryUrlException(tr("Unexpected value for ''{0}'' in changeset query url, got {1}", parameter, value));
+                throw new ChangesetQueryUrlException(
+                        tr("Unexpected value for ''{0}'' in changeset query url, got {1}", parameter, value));
             }
         }
 
         protected Date parseDate(String value, String parameter) throws ChangesetQueryUrlException {
             if (value == null || value.trim().isEmpty())
-                throw new ChangesetQueryUrlException(tr("Unexpected value for ''{0}'' in changeset query url, got {1}", parameter, value));
+                throw new ChangesetQueryUrlException(
+                        tr("Unexpected value for ''{0}'' in changeset query url, got {1}", parameter, value));
             DateFormat formatter = DateUtils.newIsoDateTimeFormat();
             try {
                 return formatter.parse(value);
-            } catch(ParseException e) {
-                throw new ChangesetQueryUrlException(tr("Unexpected value for ''{0}'' in changeset query url, got {1}", parameter, value));
+            } catch (ParseException e) {
+                throw new ChangesetQueryUrlException(
+                        tr("Unexpected value for ''{0}'' in changeset query url, got {1}", parameter, value), e);
             }
         }
 
         protected Date[] parseTime(String value) throws ChangesetQueryUrlException {
             String[] dates = value.split(",");
             if (dates == null || dates.length == 0 || dates.length > 2)
-                throw new ChangesetQueryUrlException(tr("Unexpected value for ''{0}'' in changeset query url, got {1}", "time", value));
+                throw new ChangesetQueryUrlException(
+                        tr("Unexpected value for ''{0}'' in changeset query url, got {1}", "time", value));
             if (dates.length == 1)
                 return new Date[]{parseDate(dates[0], "time")};
             else if (dates.length == 2)
@@ -394,12 +406,14 @@ public class ChangesetQuery {
                 switch(k) {
                 case "uid":
                     if (queryParams.containsKey("display_name"))
-                        throw new ChangesetQueryUrlException(tr("Cannot create a changeset query including both the query parameters ''uid'' and ''display_name''"));
+                        throw new ChangesetQueryUrlException(
+                                tr("Cannot create a changeset query including both the query parameters ''uid'' and ''display_name''"));
                     csQuery.forUser(parseUid(queryParams.get("uid")));
                     break;
                 case "display_name":
                     if (queryParams.containsKey("uid"))
-                        throw new ChangesetQueryUrlException(tr("Cannot create a changeset query including both the query parameters ''uid'' and ''display_name''"));
+                        throw new ChangesetQueryUrlException(
+                                tr("Cannot create a changeset query including both the query parameters ''uid'' and ''display_name''"));
                     csQuery.forUser(queryParams.get("display_name"));
                     break;
                 case "open":
@@ -434,14 +448,15 @@ public class ChangesetQuery {
                     }
                     break;
                 default:
-                    throw new ChangesetQueryUrlException(tr("Unsupported parameter ''{0}'' in changeset query string", k));
+                    throw new ChangesetQueryUrlException(
+                            tr("Unsupported parameter ''{0}'' in changeset query string", k));
                 }
             }
             return csQuery;
         }
 
-        protected Map<String,String> createMapFromQueryString(String query) {
-            Map<String,String> queryParams  = new HashMap<>();
+        protected Map<String, String> createMapFromQueryString(String query) {
+            Map<String, String> queryParams  = new HashMap<>();
             String[] keyValuePairs = query.split("&");
             for (String keyValuePair: keyValuePairs) {
                 String[] kv = keyValuePair.split("=");
@@ -472,7 +487,7 @@ public class ChangesetQuery {
             query = query.trim();
             if (query.isEmpty())
                 return new ChangesetQuery();
-            Map<String,String> queryParams = createMapFromQueryString(query);
+            Map<String, String> queryParams = createMapFromQueryString(query);
             return createFromMap(queryParams);
         }
     }
diff --git a/src/org/openstreetmap/josm/io/Compression.java b/src/org/openstreetmap/josm/io/Compression.java
index b5c0503..cd19626 100644
--- a/src/org/openstreetmap/josm/io/Compression.java
+++ b/src/org/openstreetmap/josm/io/Compression.java
@@ -54,7 +54,7 @@ public enum Compression {
     /**
      * Returns an un-compressing {@link InputStream} for {@code in}.
      *
-     * @throws IOException
+     * @throws IOException if any I/O error occurs
      */
     public InputStream getUncompressedInputStream(InputStream in) throws IOException {
         switch (this) {
@@ -73,7 +73,7 @@ public enum Compression {
     /**
      * Returns an un-compressing {@link InputStream} for the {@link File} {@code file}.
      *
-     * @throws IOException
+     * @throws IOException if any I/O error occurs
      */
     @SuppressWarnings("resource")
     public static InputStream getUncompressedFileInputStream(File file) throws IOException {
@@ -83,7 +83,7 @@ public enum Compression {
     /**
      * Returns an un-compressing {@link InputStream} for the {@link URL} {@code url}.
      *
-     * @throws IOException
+     * @throws IOException if any I/O error occurs
      */
     public static InputStream getUncompressedURLInputStream(URL url) throws IOException {
         return Utils.openURLAndDecompress(url, true);
@@ -92,7 +92,7 @@ public enum Compression {
     /**
      * Returns a compressing {@link OutputStream} for {@code out}.
      *
-     * @throws IOException
+     * @throws IOException if any I/O error occurs
      */
     public OutputStream getCompressedOutputStream(OutputStream out) throws IOException {
         switch (this) {
@@ -111,7 +111,7 @@ public enum Compression {
     /**
      * Returns a compressing {@link OutputStream} for the {@link File} {@code file}.
      *
-     * @throws IOException
+     * @throws IOException if any I/O error occurs
      */
     @SuppressWarnings("resource")
     public static OutputStream getCompressedFileOutputStream(File file) throws IOException {
diff --git a/src/org/openstreetmap/josm/io/DefaultProxySelector.java b/src/org/openstreetmap/josm/io/DefaultProxySelector.java
index de4a6fd..889129c 100644
--- a/src/org/openstreetmap/josm/io/DefaultProxySelector.java
+++ b/src/org/openstreetmap/josm/io/DefaultProxySelector.java
@@ -110,12 +110,13 @@ public class DefaultProxySelector extends ProxySelector {
      */
     public final void initFromPreferences() {
         String value = Main.pref.get(ProxyPreferencesPanel.PROXY_POLICY);
-        if (value.length() == 0) {
+        if (value.isEmpty()) {
             proxyPolicy = ProxyPolicy.NO_PROXY;
         } else {
             proxyPolicy = ProxyPolicy.fromName(value);
             if (proxyPolicy == null) {
-                Main.warn(tr("Unexpected value for preference ''{0}'' found. Got ''{1}''. Will use no proxy.", ProxyPreferencesPanel.PROXY_POLICY, value));
+                Main.warn(tr("Unexpected value for preference ''{0}'' found. Got ''{1}''. Will use no proxy.",
+                        ProxyPreferencesPanel.PROXY_POLICY, value));
                 proxyPolicy = ProxyPolicy.NO_PROXY;
             }
         }
@@ -136,7 +137,7 @@ public class DefaultProxySelector extends ProxySelector {
         socksProxySocketAddress = null;
         if (proxyPolicy.equals(ProxyPolicy.USE_SOCKS_PROXY)) {
             if (host != null && !host.trim().isEmpty() && port > 0) {
-                socksProxySocketAddress = new InetSocketAddress(host,port);
+                socksProxySocketAddress = new InetSocketAddress(host, port);
             } else {
                 Main.warn(tr("Unexpected parameters for SOCKS proxy. Got host ''{0}'' and port ''{1}''.", host, port));
                 Main.warn(tr("The proxy will not be used."));
@@ -201,7 +202,8 @@ public class DefaultProxySelector extends ProxySelector {
         switch(proxyPolicy) {
         case USE_SYSTEM_SETTINGS:
             if (!JVM_WILL_USE_SYSTEM_PROXIES) {
-                Main.warn(tr("The JVM is not configured to lookup proxies from the system settings. The property ''java.net.useSystemProxies'' was missing at startup time.  Will not use a proxy."));
+                Main.warn(tr("The JVM is not configured to lookup proxies from the system settings. "+
+                        "The property ''java.net.useSystemProxies'' was missing at startup time.  Will not use a proxy."));
                 return NO_PROXY_LIST;
             }
             // delegate to the former proxy selector
diff --git a/src/org/openstreetmap/josm/io/DiffResultProcessor.java b/src/org/openstreetmap/josm/io/DiffResultProcessor.java
index 13e41e1..99e7f47 100644
--- a/src/org/openstreetmap/josm/io/DiffResultProcessor.java
+++ b/src/org/openstreetmap/josm/io/DiffResultProcessor.java
@@ -1,4 +1,4 @@
-//License: GPL. For details, see LICENSE file.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.io;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -34,8 +34,8 @@ import org.xml.sax.helpers.DefaultHandler;
 public class DiffResultProcessor  {
 
     private static class DiffResultEntry {
-        public long new_id;
-        public int new_version;
+        private long newId;
+        private int newVersion;
     }
 
     /**
@@ -83,10 +83,10 @@ public class DiffResultProcessor  {
         try {
             progressMonitor.beginTask(tr("Parsing response from server..."));
             InputSource inputSource = new InputSource(new StringReader(diffUploadResponse));
-            Utils.newSafeSAXParser().parse(inputSource, new Parser());
-        } catch(XmlParsingException e) {
+            Utils.parseSafeSAX(inputSource, new Parser());
+        } catch (XmlParsingException e) {
             throw e;
-        } catch(IOException | ParserConfigurationException | SAXException e) {
+        } catch (IOException | ParserConfigurationException | SAXException e) {
             throw new XmlParsingException(e);
         } finally {
             progressMonitor.finishTask();
@@ -127,7 +127,7 @@ public class DiffResultProcessor  {
                 }
                 processed.add(p);
                 if (!p.isDeleted()) {
-                    p.setOsmId(entry.new_id, entry.new_version);
+                    p.setOsmId(entry.newId, entry.newVersion);
                     p.setVisible(true);
                 } else {
                     p.setVisible(false);
@@ -173,10 +173,10 @@ public class DiffResultProcessor  {
                     );
                     DiffResultEntry entry = new DiffResultEntry();
                     if (atts.getValue("new_id") != null) {
-                        entry.new_id = Long.parseLong(atts.getValue("new_id"));
+                        entry.newId = Long.parseLong(atts.getValue("new_id"));
                     }
                     if (atts.getValue("new_version") != null) {
-                        entry.new_version = Integer.parseInt(atts.getValue("new_version"));
+                        entry.newVersion = Integer.parseInt(atts.getValue("new_version"));
                     }
                     diffResults.put(id, entry);
                     break;
diff --git a/src/org/openstreetmap/josm/io/FileWatcher.java b/src/org/openstreetmap/josm/io/FileWatcher.java
index 2d49053..76a4eff 100644
--- a/src/org/openstreetmap/josm/io/FileWatcher.java
+++ b/src/org/openstreetmap/josm/io/FileWatcher.java
@@ -86,7 +86,7 @@ public class FileWatcher {
         if (dir == null) {
             throw new IllegalArgumentException("Resource "+obj+" does not have a parent directory");
         }
-        synchronized(this) {
+        synchronized (this) {
             // Register directory. Can be called several times for a same directory without problem
             // (it returns the same key so it should not send events several times)
             dir.toPath().register(watcher, StandardWatchEventKinds.ENTRY_MODIFY, StandardWatchEventKinds.ENTRY_CREATE);
@@ -120,16 +120,16 @@ public class FileWatcher {
 
                 // The filename is the context of the event.
                 @SuppressWarnings("unchecked")
-                WatchEvent<Path> ev = (WatchEvent<Path>)event;
+                WatchEvent<Path> ev = (WatchEvent<Path>) event;
                 Path filename = ev.context();
                 if (filename == null) {
                     continue;
                 }
 
                 // Only way to get full path (http://stackoverflow.com/a/7802029/2257172)
-                Path fullPath = ((Path)key.watchable()).resolve(filename);
+                Path fullPath = ((Path) key.watchable()).resolve(filename);
 
-                synchronized(this) {
+                synchronized (this) {
                     StyleSource style = styleMap.get(fullPath);
                     SourceEntry rule = ruleMap.get(fullPath);
                     if (style != null) {
diff --git a/src/org/openstreetmap/josm/io/GeoJSONWriter.java b/src/org/openstreetmap/josm/io/GeoJSONWriter.java
index 2073f52..a248abd 100644
--- a/src/org/openstreetmap/josm/io/GeoJSONWriter.java
+++ b/src/org/openstreetmap/josm/io/GeoJSONWriter.java
@@ -92,7 +92,7 @@ public class GeoJSONWriter {
             geomObj.add("type", "LineString");
             if (w instanceof Way) {
                 JsonArrayBuilder array = Json.createArrayBuilder();
-                for (Node n : ((Way)w).getNodes()) {
+                for (Node n : ((Way) w).getNodes()) {
                     LatLon ll = n.getCoor();
                     if (ll != null) {
                         array.add(getCoorArray(ll));
diff --git a/src/org/openstreetmap/josm/io/GpxExporter.java b/src/org/openstreetmap/josm/io/GpxExporter.java
index 93f7a4e..8c79ee2 100644
--- a/src/org/openstreetmap/josm/io/GpxExporter.java
+++ b/src/org/openstreetmap/josm/io/GpxExporter.java
@@ -94,24 +94,34 @@ public class GpxExporter extends FileExporter implements GpxConstants {
 
         JCheckBox author = new JCheckBox(tr("Add author information"), Main.pref.getBoolean("lastAddAuthor", true));
         p.add(author, GBC.eol());
+
         JLabel nameLabel = new JLabel(tr("Real name"));
         p.add(nameLabel, GBC.std().insets(10, 0, 5, 0));
         JosmTextField authorName = new JosmTextField();
         p.add(authorName, GBC.eol().fill(GBC.HORIZONTAL));
+        nameLabel.setLabelFor(authorName);
+
         JLabel emailLabel = new JLabel(tr("E-Mail"));
         p.add(emailLabel, GBC.std().insets(10, 0, 5, 0));
         JosmTextField email = new JosmTextField();
         p.add(email, GBC.eol().fill(GBC.HORIZONTAL));
+        emailLabel.setLabelFor(email);
+
         JLabel copyrightLabel = new JLabel(tr("Copyright (URL)"));
         p.add(copyrightLabel, GBC.std().insets(10, 0, 5, 0));
         JosmTextField copyright = new JosmTextField();
         p.add(copyright, GBC.std().fill(GBC.HORIZONTAL));
+        copyrightLabel.setLabelFor(copyright);
+
         JButton predefined = new JButton(tr("Predefined"));
         p.add(predefined, GBC.eol().insets(5, 0, 0, 0));
+
         JLabel copyrightYearLabel = new JLabel(tr("Copyright year"));
         p.add(copyrightYearLabel, GBC.std().insets(10, 0, 5, 5));
         JosmTextField copyrightYear = new JosmTextField("");
         p.add(copyrightYear, GBC.eol().fill(GBC.HORIZONTAL));
+        copyrightYearLabel.setLabelFor(copyrightYear);
+
         JLabel warning = new JLabel("<html><font size='-2'> </html");
         p.add(warning, GBC.eol().fill(GBC.HORIZONTAL).insets(15, 0, 0, 0));
         addDependencies(gpxData, author, authorName, email, copyright, predefined, copyrightYear, nameLabel, emailLabel,
@@ -124,8 +134,8 @@ public class GpxExporter extends FileExporter implements GpxConstants {
 
         ExtendedDialog ed = new ExtendedDialog(Main.parent,
                 tr("Export options"),
-                new String[] { tr("Export and Save"), tr("Cancel") });
-        ed.setButtonIcons(new String[] { "exportgpx", "cancel" });
+                new String[] {tr("Export and Save"), tr("Cancel")});
+        ed.setButtonIcons(new String[] {"exportgpx", "cancel"});
         ed.setContent(p);
         ed.showDialog();
 
@@ -136,10 +146,10 @@ public class GpxExporter extends FileExporter implements GpxConstants {
         setCanceled(false);
 
         Main.pref.put("lastAddAuthor", author.isSelected());
-        if (authorName.getText().length() != 0) {
+        if (!authorName.getText().isEmpty()) {
             Main.pref.put("lastAuthorName", authorName.getText());
         }
-        if (copyright.getText().length() != 0) {
+        if (!copyright.getText().isEmpty()) {
             Main.pref.put("lastCopyright", copyright.getText());
         }
 
@@ -153,28 +163,28 @@ public class GpxExporter extends FileExporter implements GpxConstants {
 
         // add author and copyright details to the gpx data
         if (author.isSelected()) {
-            if (authorName.getText().length() > 0) {
+            if (!authorName.getText().isEmpty()) {
                 gpxData.put(META_AUTHOR_NAME, authorName.getText());
                 gpxData.put(META_COPYRIGHT_AUTHOR, authorName.getText());
             }
-            if (email.getText().length() > 0) {
+            if (!email.getText().isEmpty()) {
                 gpxData.put(META_AUTHOR_EMAIL, email.getText());
             }
-            if (copyright.getText().length() > 0) {
+            if (!copyright.getText().isEmpty()) {
                 gpxData.put(META_COPYRIGHT_LICENSE, copyright.getText());
             }
-            if (copyrightYear.getText().length() > 0) {
+            if (!copyrightYear.getText().isEmpty()) {
                 gpxData.put(META_COPYRIGHT_YEAR, copyrightYear.getText());
             }
         }
 
         // add the description to the gpx data
-        if (desc.getText().length() > 0) {
+        if (!desc.getText().isEmpty()) {
             gpxData.put(META_DESC, desc.getText());
         }
 
         // add keywords to the gpx data
-        if (keywords.getText().length() > 0) {
+        if (!keywords.getText().isEmpty()) {
             gpxData.put(META_KEYWORDS, keywords.getText());
         }
 
@@ -220,6 +230,8 @@ public class GpxExporter extends FileExporter implements GpxConstants {
         }
     }
 
+    // CHECKSTYLE.OFF: ParameterNumber
+
     /**
      * Add all those listeners to handle the enable state of the fields.
      */
@@ -237,7 +249,8 @@ public class GpxExporter extends FileExporter implements GpxConstants {
             final JLabel copyrightYearLabel,
             final JLabel warning) {
 
-        ActionListener authorActionListener = new ActionListener(){
+        // CHECKSTYLE.ON: ParameterNumber
+        ActionListener authorActionListener = new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
                 boolean b = author.isSelected();
@@ -260,21 +273,22 @@ public class GpxExporter extends FileExporter implements GpxConstants {
                     authorName.setText("");
                     email.setText("");
                 }
-                boolean isAuthorSet = authorName.getText().length() != 0;
-                GpxExporter.enableCopyright(data, copyright, predefined, copyrightYear, copyrightLabel, copyrightYearLabel, warning, b && isAuthorSet);
+                boolean isAuthorSet = !authorName.getText().isEmpty();
+                GpxExporter.enableCopyright(data, copyright, predefined, copyrightYear, copyrightLabel, copyrightYearLabel, warning,
+                        b && isAuthorSet);
             }
         };
         author.addActionListener(authorActionListener);
 
-        KeyAdapter authorNameListener = new KeyAdapter(){
+        KeyAdapter authorNameListener = new KeyAdapter() {
             @Override public void keyReleased(KeyEvent e) {
-                boolean b = authorName.getText().length()!=0 && author.isSelected();
+                boolean b = !authorName.getText().isEmpty() && author.isSelected();
                 GpxExporter.enableCopyright(data, copyright, predefined, copyrightYear, copyrightLabel, copyrightYearLabel, warning, b);
             }
         };
         authorName.addKeyListener(authorNameListener);
 
-        predefined.addActionListener(new ActionListener(){
+        predefined.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
                 final String[] licenses = {
diff --git a/src/org/openstreetmap/josm/io/GpxReader.java b/src/org/openstreetmap/josm/io/GpxReader.java
index faa5871..45ab7c0 100644
--- a/src/org/openstreetmap/josm/io/GpxReader.java
+++ b/src/org/openstreetmap/josm/io/GpxReader.java
@@ -1,6 +1,4 @@
-//License: GPL. For details, see LICENSE file.
-
-//TODO: this is far from complete, but can emulate old RawGps behaviour
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.io;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -45,12 +43,11 @@ import org.xml.sax.helpers.DefaultHandler;
  */
 public class GpxReader implements GpxConstants {
 
+    private enum State { init, gpx, metadata, wpt, rte, trk, ext, author, link, trkseg, copyright}
+
     private String version;
-    /**
-     * The resulting gpx data
-     */
+    /** The resulting gpx data */
     private GpxData gpxData;
-    private enum State { init, gpx, metadata, wpt, rte, trk, ext, author, link, trkseg, copyright}
     private InputSource inputSource;
 
     private class Parser extends DefaultHandler {
@@ -253,7 +250,7 @@ public class GpxReader implements GpxConstants {
              * certain unicode characters.
              */
             if (nokiaSportsTrackerBug) {
-                for (int i=0; i<ch.length; ++i) {
+                for (int i = 0; i < ch.length; ++i) {
                     if (ch[i] == 1) {
                         ch[i] = 32;
                     }
@@ -365,7 +362,7 @@ public class GpxReader implements GpxConstants {
                     currentLink.type = accumulator.toString();
                     break;
                 case "link":
-                    if (currentLink.uri == null && accumulator != null && accumulator.toString().length() != 0) {
+                    if (currentLink.uri == null && accumulator != null && !accumulator.toString().isEmpty()) {
                         currentLink = new GpxLink(accumulator.toString());
                     }
                     currentState = states.pop();
@@ -398,8 +395,8 @@ public class GpxReader implements GpxConstants {
                 case "vdop":
                 case "pdop":
                     try {
-                        currentWayPoint.put(localName, Float.parseFloat(accumulator.toString()));
-                    } catch(Exception e) {
+                        currentWayPoint.put(localName, Float.valueOf(accumulator.toString()));
+                    } catch (Exception e) {
                         currentWayPoint.put(localName, new Float(0));
                     }
                     break;
@@ -507,7 +504,7 @@ public class GpxReader implements GpxConstants {
 
         public void tryToFinish() throws SAXException {
             List<String> remainingElements = new ArrayList<>(elements);
-            for (int i=remainingElements.size() - 1; i >= 0; i--) {
+            for (int i = remainingElements.size() - 1; i >= 0; i--) {
                 endElement(null, remainingElements.get(i), remainingElements.get(i));
             }
             endDocument();
@@ -535,13 +532,13 @@ public class GpxReader implements GpxConstants {
      * data in case of an error.
      * @return true if file was properly parsed, false if there was error during
      * parsing but some data were parsed anyway
-     * @throws SAXException
-     * @throws IOException
+     * @throws SAXException if any SAX parsing error occurs
+     * @throws IOException if any I/O error occurs
      */
     public boolean parse(boolean tryToFinish) throws SAXException, IOException {
         Parser parser = new Parser();
         try {
-            Utils.newSafeSAXParser().parse(inputSource, parser);
+            Utils.parseSafeSAX(inputSource, parser);
             return true;
         } catch (SAXException e) {
             if (tryToFinish) {
@@ -550,7 +547,7 @@ public class GpxReader implements GpxConstants {
                     throw e;
                 String message = e.getMessage();
                 if (e instanceof SAXParseException) {
-                    SAXParseException spe = ((SAXParseException)e);
+                    SAXParseException spe = (SAXParseException) e;
                     message += " " + tr("(at line {0}, column {1})", spe.getLineNumber(), spe.getColumnNumber());
                 }
                 Main.warn(message);
diff --git a/src/org/openstreetmap/josm/io/GpxWriter.java b/src/org/openstreetmap/josm/io/GpxWriter.java
index 1827f1c..58750fc 100644
--- a/src/org/openstreetmap/josm/io/GpxWriter.java
+++ b/src/org/openstreetmap/josm/io/GpxWriter.java
@@ -94,14 +94,14 @@ public class GpxWriter extends XmlWriter implements GpxConstants {
 
     private void writeAttr(IWithAttributes obj, List<String> keys) {
         for (String key : keys) {
-            if (key.equals(META_LINKS)) {
+            if (META_LINKS.equals(key)) {
                 Collection<GpxLink> lValue = obj.<GpxLink>getCollection(key);
                 if (lValue != null) {
                     for (GpxLink link : lValue) {
                         gpxLink(link);
                     }
                 }
-            } else if (key.equals(META_EXTENSIONS)) {
+            } else if (META_EXTENSIONS.equals(key)) {
                 Extensions extensions = (Extensions) obj.get(key);
                 if (extensions != null) {
                     gpxExtensions(extensions);
@@ -170,7 +170,7 @@ public class GpxWriter extends XmlWriter implements GpxConstants {
         Bounds bounds = data.recalculateBounds();
         if (bounds != null) {
             String b = "minlat=\"" + bounds.getMinLat() + "\" minlon=\"" + bounds.getMinLon() +
-            "\" maxlat=\"" + bounds.getMaxLat() + "\" maxlon=\"" + bounds.getMaxLon() + "\"" ;
+            "\" maxlat=\"" + bounds.getMaxLat() + "\" maxlon=\"" + bounds.getMaxLon() + "\"";
             inline("bounds", b);
         }
 
@@ -249,7 +249,7 @@ public class GpxWriter extends XmlWriter implements GpxConstants {
      * else do nothing.
      */
     private void simpleTag(String tag, String content) {
-        if (content != null && content.length() > 0) {
+        if (content != null && !content.isEmpty()) {
             open(tag);
             out.print(encode(content));
             out.println("</" + tag + ">");
diff --git a/src/org/openstreetmap/josm/io/InvalidXmlCharacterFilter.java b/src/org/openstreetmap/josm/io/InvalidXmlCharacterFilter.java
index fefb208..8aa4e46 100644
--- a/src/org/openstreetmap/josm/io/InvalidXmlCharacterFilter.java
+++ b/src/org/openstreetmap/josm/io/InvalidXmlCharacterFilter.java
@@ -61,7 +61,7 @@ public class InvalidXmlCharacterFilter extends Reader {
     }
 
     private char filter(char in) {
-        if (in < 0x20 && in >= 0 && INVALID_CHARS[in]) {
+        if (in < 0x20 && INVALID_CHARS[in]) {
             if (firstWarning) {
                 Main.warn("Invalid xml character encountered: '"+in+"'.");
                 firstWarning = false;
diff --git a/src/org/openstreetmap/josm/io/JpgImporter.java b/src/org/openstreetmap/josm/io/JpgImporter.java
index f079f55..b8fd8cf 100644
--- a/src/org/openstreetmap/josm/io/JpgImporter.java
+++ b/src/org/openstreetmap/josm/io/JpgImporter.java
@@ -15,6 +15,7 @@ import org.openstreetmap.josm.actions.ExtensionFileFilter;
 import org.openstreetmap.josm.gui.layer.GpxLayer;
 import org.openstreetmap.josm.gui.layer.geoimage.GeoImageLayer;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
  * File importer allowing to import geottaged images (*.jpg files).
@@ -86,7 +87,8 @@ public class JpgImporter extends FileImporter {
         }
     }
 
-    private void addRecursiveFiles(List<File> files, Set<String> visitedDirs, List<File> sel, ProgressMonitor progressMonitor) throws IOException {
+    private void addRecursiveFiles(List<File> files, Set<String> visitedDirs, List<File> sel, ProgressMonitor progressMonitor)
+            throws IOException {
 
         if (progressMonitor.isCanceled())
             return;
@@ -104,7 +106,7 @@ public class JpgImporter extends FileImporter {
                         progressMonitor.worked(1);
                     }
                 } else {
-                    if (f.getName().toLowerCase().endsWith(".jpg")) {
+                    if (Utils.hasExtension(f, "jpg")) {
                         files.add(f);
                     }
                     progressMonitor.worked(1);
diff --git a/src/org/openstreetmap/josm/io/MessageNotifier.java b/src/org/openstreetmap/josm/io/MessageNotifier.java
index 860797c..0b2cfaa 100644
--- a/src/org/openstreetmap/josm/io/MessageNotifier.java
+++ b/src/org/openstreetmap/josm/io/MessageNotifier.java
@@ -29,6 +29,7 @@ import org.openstreetmap.josm.io.auth.CredentialsAgentResponse;
 import org.openstreetmap.josm.io.auth.CredentialsManager;
 import org.openstreetmap.josm.io.auth.JosmPreferencesCredentialAgent;
 import org.openstreetmap.josm.tools.GBC;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
  * Notifies user periodically of new received (unread) messages
@@ -45,7 +46,8 @@ public final class MessageNotifier {
     /** Property defining the update interval in minutes */
     public static final IntegerProperty PROP_INTERVAL = new IntegerProperty("message.notifier.interval", 5);
 
-    private static final ScheduledExecutorService EXECUTOR = Executors.newSingleThreadScheduledExecutor();
+    private static final ScheduledExecutorService EXECUTOR =
+            Executors.newSingleThreadScheduledExecutor(Utils.newThreadFactory("message-notifier-%d", Thread.NORM_PRIORITY));
 
     private static final Runnable WORKER = new Worker();
 
@@ -58,15 +60,18 @@ public final class MessageNotifier {
         @Override
         public void run() {
             try {
-                final UserInfo userInfo = new OsmServerUserInfoReader().fetchUserInfo(NullProgressMonitor.INSTANCE, tr("get number of unread messages"));
+                final UserInfo userInfo = new OsmServerUserInfoReader().fetchUserInfo(NullProgressMonitor.INSTANCE,
+                        tr("get number of unread messages"));
                 final int unread = userInfo.getUnreadMessages();
                 if (unread > 0 && unread != lastUnreadCount) {
                     GuiHelper.runInEDT(new Runnable() {
                         @Override
                         public void run() {
                             JPanel panel = new JPanel(new GridBagLayout());
-                            panel.add(new JLabel(trn("You have {0} unread message.", "You have {0} unread messages.", unread, unread)), GBC.eol());
-                            panel.add(new UrlLabel(Main.getBaseUserUrl() + "/"+userInfo.getDisplayName()+"/inbox", tr("Click here to see your inbox.")), GBC.eol());
+                            panel.add(new JLabel(trn("You have {0} unread message.", "You have {0} unread messages.", unread, unread)),
+                                    GBC.eol());
+                            panel.add(new UrlLabel(Main.getBaseUserUrl() + "/" + userInfo.getDisplayName() + "/inbox",
+                                    tr("Click here to see your inbox.")), GBC.eol());
                             panel.setOpaque(false);
                             new Notification().setContent(panel)
                                 .setIcon(JOptionPane.INFORMATION_MESSAGE)
@@ -91,7 +96,7 @@ public final class MessageNotifier {
             Main.info(tr("{0} not available (offline mode)", tr("Message notifier")));
         } else if (!isRunning() && interval > 0 && isUserEnoughIdentified()) {
             task = EXECUTOR.scheduleAtFixedRate(WORKER, 0, interval * 60, TimeUnit.SECONDS);
-            Main.info("Message notifier active (checks every "+interval+" minute"+(interval>1?"s":"")+")");
+            Main.info("Message notifier active (checks every "+interval+" minute"+(interval > 1 ? "s" : "")+")");
         }
     }
 
diff --git a/src/org/openstreetmap/josm/io/MissingOAuthAccessTokenException.java b/src/org/openstreetmap/josm/io/MissingOAuthAccessTokenException.java
index adbfedb..c3350a0 100644
--- a/src/org/openstreetmap/josm/io/MissingOAuthAccessTokenException.java
+++ b/src/org/openstreetmap/josm/io/MissingOAuthAccessTokenException.java
@@ -2,7 +2,7 @@
 package org.openstreetmap.josm.io;
 
 
-public class MissingOAuthAccessTokenException extends OsmTransferException{
+public class MissingOAuthAccessTokenException extends OsmTransferException {
     public MissingOAuthAccessTokenException() {
         super();
     }
diff --git a/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java b/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java
index d3d840f..3e68202 100644
--- a/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java
+++ b/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java
@@ -37,6 +37,7 @@ import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
  * Retrieves a set of {@link OsmPrimitive}s from an OSM server using the so called
@@ -108,11 +109,12 @@ public class MultiFetchServerObjectReader extends OsmServerReader{
      *
      * @param ds  the dataset (must not be null)
      * @param id  the primitive id
-     * @param type The primitive type. Must be one of {@link OsmPrimitiveType#NODE NODE}, {@link OsmPrimitiveType#WAY WAY}, {@link OsmPrimitiveType#RELATION RELATION}
+     * @param type The primitive type. Must be one of {@link OsmPrimitiveType#NODE NODE}, {@link OsmPrimitiveType#WAY WAY},
+     * {@link OsmPrimitiveType#RELATION RELATION}
      * @throws IllegalArgumentException if ds is null
      * @throws NoSuchElementException if ds does not include an {@link OsmPrimitive} with id=<code>id</code>
      */
-    protected void remember(DataSet ds, long id, OsmPrimitiveType type) throws NoSuchElementException{
+    protected void remember(DataSet ds, long id, OsmPrimitiveType type) throws NoSuchElementException {
         CheckParameterUtil.ensureParameterNotNull(ds, "ds");
         if (id <= 0) return;
         OsmPrimitive primitive = ds.getPrimitiveById(id, type);
@@ -127,18 +129,19 @@ public class MultiFetchServerObjectReader extends OsmServerReader{
      *
      * @param ds the {@link DataSet} to which the primitive belongs
      * @param id the primitive id
-     * @param type The primitive type. Must be one of {@link OsmPrimitiveType#NODE NODE}, {@link OsmPrimitiveType#WAY WAY}, {@link OsmPrimitiveType#RELATION RELATION}
+     * @param type The primitive type. Must be one of {@link OsmPrimitiveType#NODE NODE}, {@link OsmPrimitiveType#WAY WAY},
+     * {@link OsmPrimitiveType#RELATION RELATION}
      * @return this
      */
     public MultiFetchServerObjectReader append(DataSet ds, long id, OsmPrimitiveType type) {
-        OsmPrimitive p = ds.getPrimitiveById(id,type);
+        OsmPrimitive p = ds.getPrimitiveById(id, type);
         switch(type) {
         case NODE:
-            return appendNode((Node)p);
+            return appendNode((Node) p);
         case WAY:
-            return appendWay((Way)p);
+            return appendWay((Way) p);
         case RELATION:
-            return appendRelation((Relation)p);
+            return appendRelation((Relation) p);
         }
         return this;
     }
@@ -206,9 +209,9 @@ public class MultiFetchServerObjectReader extends OsmServerReader{
     public MultiFetchServerObjectReader append(OsmPrimitive primitive) {
         if (primitive != null) {
             switch (OsmPrimitiveType.from(primitive)) {
-                case NODE: return appendNode((Node)primitive);
-                case WAY: return appendWay((Way)primitive);
-                case RELATION: return appendRelation((Relation)primitive);
+                case NODE: return appendNode((Node) primitive);
+                case WAY: return appendWay((Way) primitive);
+                case RELATION: return appendRelation((Relation) primitive);
             }
         }
         return this;
@@ -243,7 +246,7 @@ public class MultiFetchServerObjectReader extends OsmServerReader{
             return pkg;
         if (ids.size() > MAX_IDS_PER_REQUEST) {
             Iterator<Long> it = ids.iterator();
-            for (int i=0; i<MAX_IDS_PER_REQUEST; i++) {
+            for (int i = 0; i < MAX_IDS_PER_REQUEST; i++) {
                 pkg.add(it.next());
             }
             ids.removeAll(pkg);
@@ -255,10 +258,10 @@ public class MultiFetchServerObjectReader extends OsmServerReader{
     }
 
     /**
-     * builds the Multi Get request string for a set of ids and a given
-     * {@link OsmPrimitiveType}.
+     * builds the Multi Get request string for a set of ids and a given {@link OsmPrimitiveType}.
      *
-     * @param type The primitive type. Must be one of {@link OsmPrimitiveType#NODE NODE}, {@link OsmPrimitiveType#WAY WAY}, {@link OsmPrimitiveType#RELATION RELATION}
+     * @param type The primitive type. Must be one of {@link OsmPrimitiveType#NODE NODE}, {@link OsmPrimitiveType#WAY WAY},
+     * {@link OsmPrimitiveType#RELATION RELATION}
      * @param idPackage  the package of ids
      * @return the request string
      */
@@ -268,20 +271,20 @@ public class MultiFetchServerObjectReader extends OsmServerReader{
         .append(type.getAPIName()).append("s=");
 
         Iterator<Long> it = idPackage.iterator();
-        for (int i=0; i<idPackage.size(); i++) {
+        for (int i = 0; i < idPackage.size(); i++) {
             sb.append(it.next());
             if (i < idPackage.size()-1) {
-                sb.append(",");
+                sb.append(',');
             }
         }
         return sb.toString();
     }
 
     /**
-     * builds the Multi Get request string for a single id and a given
-     * {@link OsmPrimitiveType}.
+     * builds the Multi Get request string for a single id and a given {@link OsmPrimitiveType}.
      *
-     * @param type The primitive type. Must be one of {@link OsmPrimitiveType#NODE NODE}, {@link OsmPrimitiveType#WAY WAY}, {@link OsmPrimitiveType#RELATION RELATION}
+     * @param type The primitive type. Must be one of {@link OsmPrimitiveType#NODE NODE}, {@link OsmPrimitiveType#WAY WAY},
+     * {@link OsmPrimitiveType#RELATION RELATION}
      * @param id the id
      * @return the request string
      */
@@ -311,7 +314,7 @@ public class MultiFetchServerObjectReader extends OsmServerReader{
      * @param from the other dataset
      */
     protected void merge(DataSet from) {
-        final DataSetMerger visitor = new DataSetMerger(outputDataSet,from);
+        final DataSetMerger visitor = new DataSetMerger(outputDataSet, from);
         visitor.merge();
     }
 
@@ -319,7 +322,8 @@ public class MultiFetchServerObjectReader extends OsmServerReader{
      * fetches a set of ids of a given {@link OsmPrimitiveType} from the server
      *
      * @param ids the set of ids
-     * @param type The primitive type. Must be one of {@link OsmPrimitiveType#NODE NODE}, {@link OsmPrimitiveType#WAY WAY}, {@link OsmPrimitiveType#RELATION RELATION}
+     * @param type The primitive type. Must be one of {@link OsmPrimitiveType#NODE NODE}, {@link OsmPrimitiveType#WAY WAY},
+     * {@link OsmPrimitiveType#RELATION RELATION}
      * @throws OsmTransferException if an error occurs while communicating with the API server
      */
     protected void fetchPrimitives(Set<Long> ids, OsmPrimitiveType type, ProgressMonitor progressMonitor) throws OsmTransferException {
@@ -332,13 +336,13 @@ public class MultiFetchServerObjectReader extends OsmServerReader{
         }
         progressMonitor.setTicksCount(ids.size());
         progressMonitor.setTicks(0);
-        // The complete set containg all primitives to fetch
+        // The complete set containing all primitives to fetch
         Set<Long> toFetch = new HashSet<>(ids);
         // Build a list of fetchers that will  download smaller sets containing only MAX_IDS_PER_REQUEST (200) primitives each.
         // we will run up to MAX_DOWNLOAD_THREADS concurrent fetchers.
         int threadsNumber = Main.pref.getInteger("osm.download.threads", OsmApi.MAX_DOWNLOAD_THREADS);
         threadsNumber = Math.min(Math.max(threadsNumber, 1), OsmApi.MAX_DOWNLOAD_THREADS);
-        Executor exec = Executors.newFixedThreadPool(threadsNumber);
+        Executor exec = Executors.newFixedThreadPool(threadsNumber, Utils.newThreadFactory(getClass() + "-%d", Thread.NORM_PRIORITY));
         CompletionService<FetchResult> ecs = new ExecutorCompletionService<>(exec);
         List<Future<FetchResult>> jobs = new ArrayList<>();
         while (!toFetch.isEmpty()) {
@@ -391,11 +395,11 @@ public class MultiFetchServerObjectReader extends OsmServerReader{
         try {
             missingPrimitives = new HashSet<>();
             if (isCanceled()) return null;
-            fetchPrimitives(ways,OsmPrimitiveType.WAY, progressMonitor);
+            fetchPrimitives(ways, OsmPrimitiveType.WAY, progressMonitor);
             if (isCanceled()) return null;
-            fetchPrimitives(nodes,OsmPrimitiveType.NODE, progressMonitor);
+            fetchPrimitives(nodes, OsmPrimitiveType.NODE, progressMonitor);
             if (isCanceled()) return null;
-            fetchPrimitives(relations,OsmPrimitiveType.RELATION, progressMonitor);
+            fetchPrimitives(relations, OsmPrimitiveType.RELATION, progressMonitor);
             if (outputDataSet != null) {
                 outputDataSet.deleteInvisible();
             }
@@ -444,7 +448,8 @@ public class MultiFetchServerObjectReader extends OsmServerReader{
     }
 
     /**
-     * The class that actually download data from OSM API. Several instances of this class are used by {@link MultiFetchServerObjectReader} (one per set of primitives to fetch).
+     * The class that actually download data from OSM API.
+     * Several instances of this class are used by {@link MultiFetchServerObjectReader} (one per set of primitives to fetch).
      * The inheritance of {@link OsmServerReader} is only explained by the need to have a distinct OSM connection by {@code Fetcher} instance.
      * @see FetchResult
      */
@@ -456,7 +461,8 @@ public class MultiFetchServerObjectReader extends OsmServerReader{
 
         /**
          * Constructs a {@code Fetcher}
-         * @param type The primitive type. Must be one of {@link OsmPrimitiveType#NODE NODE}, {@link OsmPrimitiveType#WAY WAY}, {@link OsmPrimitiveType#RELATION RELATION}
+         * @param type The primitive type. Must be one of {@link OsmPrimitiveType#NODE NODE}, {@link OsmPrimitiveType#WAY WAY},
+         * {@link OsmPrimitiveType#RELATION RELATION}
          * @param idsPackage The set of primitives ids to fetch
          * @param progressMonitor The progress monitor
          */
@@ -468,7 +474,8 @@ public class MultiFetchServerObjectReader extends OsmServerReader{
 
         @Override
         public DataSet parseOsm(ProgressMonitor progressMonitor) throws OsmTransferException {
-            // This method is implemented because of the OsmServerReader inheritance, but not used, as the main target of this class is the call() method.
+            // This method is implemented because of the OsmServerReader inheritance, but not used,
+            // as the main target of this class is the call() method.
             return fetch(progressMonitor).dataSet;
         }
 
@@ -500,12 +507,14 @@ public class MultiFetchServerObjectReader extends OsmServerReader{
          * invokes a Multi Get for a set of ids and a given {@link OsmPrimitiveType}.
          * The retrieved primitives are merged to {@link #outputDataSet}.
          *
-         * @param type The primitive type. Must be one of {@link OsmPrimitiveType#NODE NODE}, {@link OsmPrimitiveType#WAY WAY}, {@link OsmPrimitiveType#RELATION RELATION}
+         * @param type The primitive type. Must be one of {@link OsmPrimitiveType#NODE NODE}, {@link OsmPrimitiveType#WAY WAY},
+         * {@link OsmPrimitiveType#RELATION RELATION}
          * @param pkg the package of ids
          * @return the {@link FetchResult} of this operation
          * @throws OsmTransferException if an error occurs while communicating with the API server
          */
-        protected FetchResult multiGetIdPackage(OsmPrimitiveType type, Set<Long> pkg, ProgressMonitor progressMonitor) throws OsmTransferException {
+        protected FetchResult multiGetIdPackage(OsmPrimitiveType type, Set<Long> pkg, ProgressMonitor progressMonitor)
+                throws OsmTransferException {
             String request = buildRequestString(type, pkg);
             FetchResult result = null;
             try (InputStream in = getInputStream(request, NullProgressMonitor.INSTANCE)) {
@@ -526,7 +535,8 @@ public class MultiFetchServerObjectReader extends OsmServerReader{
          * invokes a Multi Get for a single id and a given {@link OsmPrimitiveType}.
          * The retrieved primitive is merged to {@link #outputDataSet}.
          *
-         * @param type The primitive type. Must be one of {@link OsmPrimitiveType#NODE NODE}, {@link OsmPrimitiveType#WAY WAY}, {@link OsmPrimitiveType#RELATION RELATION}
+         * @param type The primitive type. Must be one of {@link OsmPrimitiveType#NODE NODE}, {@link OsmPrimitiveType#WAY WAY},
+         * {@link OsmPrimitiveType#RELATION RELATION}
          * @param id the id
          * @return the {@link DataSet} resulting of this operation
          * @throws OsmTransferException if an error occurs while communicating with the API server
@@ -556,12 +566,14 @@ public class MultiFetchServerObjectReader extends OsmServerReader{
          * If the set is fetched with this method it is possible to find out which of the ids doesn't exist.
          * Unfortunately, the server does not provide an error header or an error body for a 404 reply.
          *
-         * @param type The primitive type. Must be one of {@link OsmPrimitiveType#NODE NODE}, {@link OsmPrimitiveType#WAY WAY}, {@link OsmPrimitiveType#RELATION RELATION}
+         * @param type The primitive type. Must be one of {@link OsmPrimitiveType#NODE NODE}, {@link OsmPrimitiveType#WAY WAY},
+         * {@link OsmPrimitiveType#RELATION RELATION}
          * @param pkg the set of ids
          * @return the {@link FetchResult} of this operation
          * @throws OsmTransferException if an error occurs while communicating with the API server
          */
-        protected FetchResult singleGetIdPackage(OsmPrimitiveType type, Set<Long> pkg, ProgressMonitor progressMonitor) throws OsmTransferException {
+        protected FetchResult singleGetIdPackage(OsmPrimitiveType type, Set<Long> pkg, ProgressMonitor progressMonitor)
+                throws OsmTransferException {
             FetchResult result = new FetchResult(new DataSet(), new HashSet<PrimitiveId>());
             String baseUrl = OsmApi.getOsmApi().getBaseUrl();
             for (long id : pkg) {
diff --git a/src/org/openstreetmap/josm/io/NMEAImporter.java b/src/org/openstreetmap/josm/io/NMEAImporter.java
index 8be0c1d..f3b762f 100644
--- a/src/org/openstreetmap/josm/io/NMEAImporter.java
+++ b/src/org/openstreetmap/josm/io/NMEAImporter.java
@@ -68,15 +68,15 @@ public class NMEAImporter extends FileImporter {
     }
 
     private void showNmeaInfobox(boolean success, NmeaReader r) {
-        final StringBuilder msg = new StringBuilder().append("<html>");
-        msg.append(tr("Coordinates imported: {0}", r.getNumberOfCoordinates()) + "<br>");
-        msg.append(tr("Malformed sentences: {0}", r.getParserMalformed()) + "<br>");
-        msg.append(tr("Checksum errors: {0}", r.getParserChecksumErrors()) + "<br>");
+        final StringBuilder msg = new StringBuilder(160).append("<html>");
+        msg.append(tr("Coordinates imported: {0}", r.getNumberOfCoordinates())).append("<br>")
+           .append(tr("Malformed sentences: {0}", r.getParserMalformed())).append("<br>")
+           .append(tr("Checksum errors: {0}", r.getParserChecksumErrors())).append("<br>");
         if (!success) {
-            msg.append(tr("Unknown sentences: {0}", r.getParserUnknown()) + "<br>");
+            msg.append(tr("Unknown sentences: {0}", r.getParserUnknown())).append("<br>");
         }
-        msg.append(tr("Zero coordinates: {0}", r.getParserZeroCoordinates()));
-        msg.append("</html>");
+        msg.append(tr("Zero coordinates: {0}", r.getParserZeroCoordinates()))
+           .append("</html>");
         if (success) {
             SwingUtilities.invokeLater(new Runnable() {
                 @Override
diff --git a/src/org/openstreetmap/josm/io/NmeaReader.java b/src/org/openstreetmap/josm/io/NmeaReader.java
index 9605175..afa9895 100644
--- a/src/org/openstreetmap/josm/io/NmeaReader.java
+++ b/src/org/openstreetmap/josm/io/NmeaReader.java
@@ -1,4 +1,4 @@
-//License: GPL. See README for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.io;
 
 import java.io.BufferedReader;
@@ -58,7 +58,7 @@ public class NmeaReader {
 
     // GPVTG
     public static enum GPVTG {
-        COURSE(1),COURSE_REF(2), // true course
+        COURSE(1), COURSE_REF(2), // true course
         COURSE_M(3), COURSE_M_REF(4), // magnetic course
         SPEED_KN(5), SPEED_KN_UNIT(6), // speed in knots
         SPEED_KMH(7), SPEED_KMH_UNIT(8), // speed in km/h
@@ -106,7 +106,7 @@ public class NmeaReader {
         HDOP(8), // HDOP (horizontal dilution of precision)
         HEIGHT(9), HEIGHT_UNTIS(10), // height above NN (above geoid)
         HEIGHT_2(11), HEIGHT_2_UNTIS(12), // height geoid - height ellipsoid (WGS84)
-        GPS_AGE(13),// Age of differential GPS data
+        GPS_AGE(13), // Age of differential GPS data
         REF(14); // REF station
 
         public final int position;
@@ -123,7 +123,7 @@ public class NmeaReader {
         PRN_7(9), PRN_8(10), PRN_9(11), PRN_10(12), PRN_11(13), PRN_12(14),
         PDOP(15),   // PDOP (precision)
         HDOP(16),   // HDOP (horizontal precision)
-        VDOP(17), ; // VDOP (vertical precision)
+        VDOP(17);   // VDOP (vertical precision)
 
         public final int position;
         GPGSA(int position) {
@@ -152,15 +152,19 @@ public class NmeaReader {
     public int getParserUnknown() {
         return ps.unknown;
     }
+
     public int getParserZeroCoordinates() {
-        return ps.zero_coord;
+        return ps.zeroCoord;
     }
+
     public int getParserChecksumErrors() {
-        return ps.checksum_errors+ps.no_checksum;
+        return ps.checksumErrors+ps.noChecksum;
     }
+
     public int getParserMalformed() {
         return ps.malformed;
     }
+
     public int getNumberOfCoordinates() {
         return ps.success;
     }
@@ -175,27 +179,27 @@ public class NmeaReader {
             StringBuilder sb = new StringBuilder(1024);
             int loopstart_char = rd.read();
             ps = new NMEAParserState();
-            if(loopstart_char == -1)
+            if (loopstart_char == -1)
                 //TODO tell user about the problem?
                 return;
-            sb.append((char)loopstart_char);
-            ps.p_Date="010100"; // TODO date problem
-            while(true) {
+            sb.append((char) loopstart_char);
+            ps.pDate = "010100"; // TODO date problem
+            while (true) {
                 // don't load unparsable files completely to memory
-                if(sb.length()>=1020) {
+                if (sb.length() >= 1020) {
                     sb.delete(0, sb.length()-1);
                 }
                 int c = rd.read();
-                if(c=='$') {
+                if (c == '$') {
                     parseNMEASentence(sb.toString(), ps);
                     sb.delete(0, sb.length());
                     sb.append('$');
-                } else if(c == -1) {
+                } else if (c == -1) {
                     // EOF: add last WayPoint if it works out
-                    parseNMEASentence(sb.toString(),ps);
+                    parseNMEASentence(sb.toString(), ps);
                     break;
                 } else {
-                    sb.append((char)c);
+                    sb.append((char) c);
                 }
             }
             currentTrack.add(ps.waypoints);
@@ -208,16 +212,16 @@ public class NmeaReader {
 
     private static class NMEAParserState {
         protected Collection<WayPoint> waypoints = new ArrayList<>();
-        protected String p_Time;
-        protected String p_Date;
-        protected WayPoint p_Wp;
+        protected String pTime;
+        protected String pDate;
+        protected WayPoint pWp;
 
-        protected int success = 0; // number of successfully parsend sentences
+        protected int success = 0; // number of successfully parsed sentences
         protected int malformed = 0;
-        protected int checksum_errors = 0;
-        protected int no_checksum = 0;
+        protected int checksumErrors = 0;
+        protected int noChecksum = 0;
         protected int unknown = 0;
-        protected int zero_coord = 0;
+        protected int zeroCoord = 0;
     }
 
     // Parses split up sentences into WayPoints which are stored
@@ -234,30 +238,29 @@ public class NmeaReader {
             // if there is no * or other meanities it will throw
             // and result in a malformed packet.
             String[] chkstrings = s.split("\\*");
-            if(chkstrings.length > 1)
-            {
+            if (chkstrings.length > 1) {
                 byte[] chb = chkstrings[0].getBytes(StandardCharsets.UTF_8);
-                int chk=0;
+                int chk = 0;
                 for (int i = 1; i < chb.length; i++) {
                     chk ^= chb[i];
                 }
-                if (Integer.parseInt(chkstrings[1].substring(0,2),16) != chk) {
-                    ps.checksum_errors++;
-                    ps.p_Wp=null;
+                if (Integer.parseInt(chkstrings[1].substring(0, 2), 16) != chk) {
+                    ps.checksumErrors++;
+                    ps.pWp = null;
                     return false;
                 }
             } else {
-                ps.no_checksum++;
+                ps.noChecksum++;
             }
             // now for the content
             String[] e = chkstrings[0].split(",");
             String accu;
 
-            WayPoint currentwp = ps.p_Wp;
-            String currentDate = ps.p_Date;
+            WayPoint currentwp = ps.pWp;
+            String currentDate = ps.pDate;
 
             // handle the packet content
-            if("$GPGGA".equals(e[0]) || "$GNGGA".equals(e[0])) {
+            if ("$GPGGA".equals(e[0]) || "$GNGGA".equals(e[0])) {
                 // Position
                 LatLon latLon = parseLatLon(
                         e[GPGGA.LATITUDE_NAME.position],
@@ -265,12 +268,12 @@ public class NmeaReader {
                         e[GPGGA.LATITUDE.position],
                         e[GPGGA.LONGITUDE.position]
                 );
-                if (latLon==null) {
+                if (latLon == null) {
                     throw new IllegalDataException("Malformed lat/lon");
                 }
 
-                if ((latLon.lat()==0.0) && (latLon.lon()==0.0)) {
-                    ps.zero_coord++;
+                if (LatLon.ZERO.equals(latLon)) {
+                    ps.zeroCoord++;
                     return false;
                 }
 
@@ -278,54 +281,53 @@ public class NmeaReader {
                 accu = e[GPGGA.TIME.position];
                 Date d = readTime(currentDate+accu);
 
-                if((ps.p_Time==null) || (currentwp==null) || !ps.p_Time.equals(accu)) {
+                if ((ps.pTime == null) || (currentwp == null) || !ps.pTime.equals(accu)) {
                     // this node is newer than the previous, create a new waypoint.
-                    // no matter if previous WayPoint was null, we got something
-                    // better now.
-                    ps.p_Time=accu;
+                    // no matter if previous WayPoint was null, we got something better now.
+                    ps.pTime = accu;
                     currentwp = new WayPoint(latLon);
                 }
-                if(!currentwp.attr.containsKey("time")) {
+                if (!currentwp.attr.containsKey("time")) {
                     // As this sentence has no complete time only use it
                     // if there is no time so far
                     currentwp.put(GpxConstants.PT_TIME, DateUtils.fromDate(d));
                 }
                 // elevation
-                accu=e[GPGGA.HEIGHT_UNTIS.position];
-                if("M".equals(accu)) {
+                accu = e[GPGGA.HEIGHT_UNTIS.position];
+                if ("M".equals(accu)) {
                     // Ignore heights that are not in meters for now
-                    accu=e[GPGGA.HEIGHT.position];
-                    if(!accu.isEmpty()) {
+                    accu = e[GPGGA.HEIGHT.position];
+                    if (!accu.isEmpty()) {
                         Double.parseDouble(accu);
                         // if it throws it's malformed; this should only happen if the
                         // device sends nonstandard data.
-                        if(!accu.isEmpty()) { // FIX ? same check
+                        if (!accu.isEmpty()) { // FIX ? same check
                             currentwp.put(GpxConstants.PT_ELE, accu);
                         }
                     }
                 }
                 // number of sattelites
-                accu=e[GPGGA.SATELLITE_COUNT.position];
+                accu = e[GPGGA.SATELLITE_COUNT.position];
                 int sat = 0;
-                if(!accu.isEmpty()) {
+                if (!accu.isEmpty()) {
                     sat = Integer.parseInt(accu);
                     currentwp.put(GpxConstants.PT_SAT, accu);
                 }
                 // h-dilution
-                accu=e[GPGGA.HDOP.position];
-                if(!accu.isEmpty()) {
-                    currentwp.put(GpxConstants.PT_HDOP, Float.parseFloat(accu));
+                accu = e[GPGGA.HDOP.position];
+                if (!accu.isEmpty()) {
+                    currentwp.put(GpxConstants.PT_HDOP, Float.valueOf(accu));
                 }
                 // fix
-                accu=e[GPGGA.QUALITY.position];
-                if(!accu.isEmpty()) {
+                accu = e[GPGGA.QUALITY.position];
+                if (!accu.isEmpty()) {
                     int fixtype = Integer.parseInt(accu);
                     switch(fixtype) {
                     case 0:
                         currentwp.put(GpxConstants.PT_FIX, "none");
                         break;
                     case 1:
-                        if(sat < 4) {
+                        if (sat < 4) {
                             currentwp.put(GpxConstants.PT_FIX, "2d");
                         } else {
                             currentwp.put(GpxConstants.PT_FIX, "3d");
@@ -338,45 +340,44 @@ public class NmeaReader {
                         break;
                     }
                 }
-            } else if("$GPVTG".equals(e[0]) || "$GNVTG".equals(e[0])) {
+            } else if ("$GPVTG".equals(e[0]) || "$GNVTG".equals(e[0])) {
                 // COURSE
                 accu = e[GPVTG.COURSE_REF.position];
-                if("T".equals(accu)) {
+                if ("T".equals(accu)) {
                     // other values than (T)rue are ignored
                     accu = e[GPVTG.COURSE.position];
-                    if(!accu.isEmpty()) {
+                    if (!accu.isEmpty()) {
                         Double.parseDouble(accu);
                         currentwp.put("course", accu);
                     }
                 }
                 // SPEED
                 accu = e[GPVTG.SPEED_KMH_UNIT.position];
-                if(accu.startsWith("K")) {
+                if (accu.startsWith("K")) {
                     accu = e[GPVTG.SPEED_KMH.position];
-                    if(!accu.isEmpty()) {
+                    if (!accu.isEmpty()) {
                         double speed = Double.parseDouble(accu);
                         speed /= 3.6; // speed in m/s
                         currentwp.put("speed", Double.toString(speed));
                     }
                 }
-            } else if("$GPGSA".equals(e[0]) || "$GNGSA".equals(e[0])) {
+            } else if ("$GPGSA".equals(e[0]) || "$GNGSA".equals(e[0])) {
                 // vdop
-                accu=e[GPGSA.VDOP.position];
-                if(!accu.isEmpty()) {
-                    currentwp.put(GpxConstants.PT_VDOP, Float.parseFloat(accu));
+                accu = e[GPGSA.VDOP.position];
+                if (!accu.isEmpty()) {
+                    currentwp.put(GpxConstants.PT_VDOP, Float.valueOf(accu));
                 }
                 // hdop
-                accu=e[GPGSA.HDOP.position];
-                if(!accu.isEmpty()) {
-                    currentwp.put(GpxConstants.PT_HDOP, Float.parseFloat(accu));
+                accu = e[GPGSA.HDOP.position];
+                if (!accu.isEmpty()) {
+                    currentwp.put(GpxConstants.PT_HDOP, Float.valueOf(accu));
                 }
                 // pdop
-                accu=e[GPGSA.PDOP.position];
-                if(!accu.isEmpty()) {
-                    currentwp.put(GpxConstants.PT_PDOP, Float.parseFloat(accu));
+                accu = e[GPGSA.PDOP.position];
+                if (!accu.isEmpty()) {
+                    currentwp.put(GpxConstants.PT_PDOP, Float.valueOf(accu));
                 }
-            }
-            else if("$GPRMC".equals(e[0]) || "$GNRMC".equals(e[0])) {
+            } else if ("$GPRMC".equals(e[0]) || "$GNRMC".equals(e[0])) {
                 // coordinates
                 LatLon latLon = parseLatLon(
                         e[GPRMC.WIDTH_NORTH_NAME.position],
@@ -384,8 +385,8 @@ public class NmeaReader {
                         e[GPRMC.WIDTH_NORTH.position],
                         e[GPRMC.LENGTH_EAST.position]
                 );
-                if((latLon.lat()==0.0) && (latLon.lon()==0.0)) {
-                    ps.zero_coord++;
+                if (LatLon.ZERO.equals(latLon)) {
+                    ps.zeroCoord++;
                     return false;
                 }
                 // time
@@ -394,23 +395,23 @@ public class NmeaReader {
 
                 Date d = readTime(currentDate+time);
 
-                if((ps.p_Time==null) || (currentwp==null) || !ps.p_Time.equals(time)) {
+                if (ps.pTime == null || currentwp == null || !ps.pTime.equals(time)) {
                     // this node is newer than the previous, create a new waypoint.
-                    ps.p_Time=time;
+                    ps.pTime = time;
                     currentwp = new WayPoint(latLon);
                 }
                 // time: this sentence has complete time so always use it.
                 currentwp.put(GpxConstants.PT_TIME, DateUtils.fromDate(d));
                 // speed
                 accu = e[GPRMC.SPEED.position];
-                if(!accu.isEmpty() && !currentwp.attr.containsKey("speed")) {
+                if (!accu.isEmpty() && !currentwp.attr.containsKey("speed")) {
                     double speed = Double.parseDouble(accu);
                     speed *= 0.514444444; // to m/s
                     currentwp.put("speed", Double.toString(speed));
                 }
                 // course
                 accu = e[GPRMC.COURSE.position];
-                if(!accu.isEmpty() && !currentwp.attr.containsKey("course")) {
+                if (!accu.isEmpty() && !currentwp.attr.containsKey("course")) {
                     Double.parseDouble(accu);
                     currentwp.put("course", accu);
                 }
@@ -426,12 +427,12 @@ public class NmeaReader {
                 ps.unknown++;
                 return false;
             }
-            ps.p_Date = currentDate;
-            if(ps.p_Wp != currentwp) {
-                if(ps.p_Wp!=null) {
-                    ps.p_Wp.setTime();
+            ps.pDate = currentDate;
+            if (ps.pWp != currentwp) {
+                if (ps.pWp != null) {
+                    ps.pWp.setTime();
                 }
-                ps.p_Wp = currentwp;
+                ps.pWp = currentwp;
                 ps.waypoints.add(currentwp);
                 ps.success++;
                 return true;
@@ -441,7 +442,7 @@ public class NmeaReader {
         } catch (RuntimeException x) {
             // out of bounds and such
             ps.malformed++;
-            ps.p_Wp=null;
+            ps.pWp = null;
             return false;
         }
     }
@@ -453,7 +454,7 @@ public class NmeaReader {
 
         // return a zero latlon instead of null so it is logged as zero coordinate
         // instead of malformed sentence
-        if(widthNorth.isEmpty() && lengthEast.isEmpty()) return new LatLon(0.0,0.0);
+        if (widthNorth.isEmpty() && lengthEast.isEmpty()) return new LatLon(0.0, 0.0);
 
         // The format is xxDDLL.LLLL
         // xx optional whitespace
@@ -464,7 +465,7 @@ public class NmeaReader {
 
         int latdeg = Integer.parseInt(widthNorth.substring(0, latdegsep));
         double latmin = Double.parseDouble(widthNorth.substring(latdegsep));
-        if(latdeg < 0) {
+        if (latdeg < 0) {
             latmin *= -1.0;
         }
         double lat = latdeg + latmin / 60;
@@ -477,7 +478,7 @@ public class NmeaReader {
 
         int londeg = Integer.parseInt(lengthEast.substring(0, londegsep));
         double lonmin = Double.parseDouble(lengthEast.substring(londegsep));
-        if(londeg < 0) {
+        if (londeg < 0) {
             lonmin *= -1.0;
         }
         double lon = londeg + lonmin / 60;
diff --git a/src/org/openstreetmap/josm/io/NoteReader.java b/src/org/openstreetmap/josm/io/NoteReader.java
index de9f01f..e54baa5 100644
--- a/src/org/openstreetmap/josm/io/NoteReader.java
+++ b/src/org/openstreetmap/josm/io/NoteReader.java
@@ -54,7 +54,7 @@ public class NoteReader {
         private String commentUsername;
         private Action noteAction;
         private Date commentCreateDate;
-        private Boolean commentIsNew;
+        private boolean commentIsNew;
         private List<Note> notes;
         private String commentText;
 
@@ -78,7 +78,7 @@ public class NoteReader {
             }
 
             if (parseMode == NoteParseMode.API) {
-                if("note".equals(qName)) {
+                if ("note".equals(qName)) {
                     double lat = Double.parseDouble(attrs.getValue("lat"));
                     double lon = Double.parseDouble(attrs.getValue("lon"));
                     LatLon noteLatLon = new LatLon(lat, lon);
@@ -96,7 +96,7 @@ public class NoteReader {
                 thisNote = new Note(noteLatLon);
                 thisNote.setId(Long.parseLong(attrs.getValue("id")));
                 String closedTimeStr = attrs.getValue("closed_at");
-                if(closedTimeStr == null) { //no closed_at means the note is still open
+                if (closedTimeStr == null) { //no closed_at means the note is still open
                     thisNote.setState(Note.State.open);
                 } else {
                     thisNote.setState(Note.State.closed);
@@ -106,7 +106,7 @@ public class NoteReader {
                 break;
             case "comment":
                 String uidStr = attrs.getValue("uid");
-                if(uidStr == null) {
+                if (uidStr == null) {
                     commentUid = 0;
                 } else {
                     commentUid = Long.parseLong(uidStr);
@@ -115,10 +115,10 @@ public class NoteReader {
                 noteAction = Action.valueOf(attrs.getValue("action"));
                 commentCreateDate = DateUtils.fromString(attrs.getValue("timestamp"));
                 String isNew = attrs.getValue("is_new");
-                if(isNew == null) {
+                if (isNew == null) {
                     commentIsNew = false;
                 } else {
-                    commentIsNew = Boolean.valueOf(isNew);
+                    commentIsNew = Boolean.parseBoolean(isNew);
                 }
                 break;
             }
@@ -126,28 +126,28 @@ public class NoteReader {
 
         @Override
         public void endElement(String namespaceURI, String localName, String qName) {
-            if("note".equals(qName)) {
+            if ("note".equals(qName)) {
                 notes.add(thisNote);
             }
-            if("comment".equals(qName)) {
+            if ("comment".equals(qName)) {
                 User commentUser = User.createOsmUser(commentUid, commentUsername);
                 if (commentUid == 0) {
                     commentUser = User.getAnonymous();
                 }
-                if(parseMode == NoteParseMode.API) {
+                if (parseMode == NoteParseMode.API) {
                     commentIsNew = false;
                 }
-                if(parseMode == NoteParseMode.DUMP) {
+                if (parseMode == NoteParseMode.DUMP) {
                     commentText = buffer.toString();
                 }
                 thisNote.addComment(new NoteComment(commentCreateDate, commentUser, commentText, noteAction, commentIsNew));
                 commentUid = 0;
                 commentUsername = null;
                 commentCreateDate = null;
-                commentIsNew = null;
+                commentIsNew = false;
                 commentText = null;
             }
-            if(parseMode == NoteParseMode.DUMP) {
+            if (parseMode == NoteParseMode.DUMP) {
                 return;
             }
 
@@ -196,7 +196,7 @@ public class NoteReader {
     /**
      * Initializes the reader with a given InputStream
      * @param source - InputStream containing Notes XML
-     * @throws IOException
+     * @throws IOException if any I/O error occurs
      */
     public NoteReader(InputStream source) throws IOException {
         this.inputSource = new InputSource(source);
@@ -205,7 +205,7 @@ public class NoteReader {
     /**
      * Initializes the reader with a string as a source
      * @param source UTF-8 string containing Notes XML to parse
-     * @throws IOException
+     * @throws IOException if any I/O error occurs
      */
     public NoteReader(String source) throws IOException {
         this.inputSource = new InputSource(new ByteArrayInputStream(source.getBytes(StandardCharsets.UTF_8)));
@@ -215,13 +215,13 @@ public class NoteReader {
      * Parses the InputStream given to the constructor and returns
      * the resulting Note objects
      * @return List of Notes parsed from the input data
-     * @throws SAXException
-     * @throws IOException
+     * @throws SAXException if any SAX parsing error occurs
+     * @throws IOException if any I/O error occurs
      */
     public List<Note> parse() throws SAXException, IOException {
         DefaultHandler parser = new Parser();
         try {
-            Utils.newSafeSAXParser().parse(inputSource, parser);
+            Utils.parseSafeSAX(inputSource, parser);
         } catch (ParserConfigurationException e) {
             Main.error(e); // broken SAXException chaining
             throw new SAXException(e);
diff --git a/src/org/openstreetmap/josm/io/NoteWriter.java b/src/org/openstreetmap/josm/io/NoteWriter.java
index 250b869..884fa9e 100644
--- a/src/org/openstreetmap/josm/io/NoteWriter.java
+++ b/src/org/openstreetmap/josm/io/NoteWriter.java
@@ -22,7 +22,7 @@ import org.openstreetmap.josm.tools.date.DateUtils;
  */
 public class NoteWriter extends XmlWriter {
 
-    private final DateFormat ISO8601_FORMAT = DateUtils.newIsoDateTimeFormat();
+    private final DateFormat iso8601Format = DateUtils.newIsoDateTimeFormat();
 
     /**
      * Create a NoteWriter that will write to the given PrintWriter
@@ -52,9 +52,9 @@ public class NoteWriter extends XmlWriter {
             out.print("id=\"" + note.getId() + "\" ");
             out.print("lat=\"" + note.getLatLon().lat() + "\" ");
             out.print("lon=\"" + note.getLatLon().lon() + "\" ");
-            out.print("created_at=\"" + ISO8601_FORMAT.format(note.getCreatedAt()) + "\" ");
+            out.print("created_at=\"" + iso8601Format.format(note.getCreatedAt()) + "\" ");
             if (note.getClosedAt() != null) {
-                out.print("closed_at=\"" + ISO8601_FORMAT.format(note.getClosedAt()) + "\" ");
+                out.print("closed_at=\"" + iso8601Format.format(note.getClosedAt()) + "\" ");
             }
 
             out.println(">");
@@ -71,12 +71,12 @@ public class NoteWriter extends XmlWriter {
     private void writeComment(NoteComment comment) {
         out.print("    <comment");
         out.print(" action=\"" + comment.getNoteAction() + "\" ");
-        out.print("timestamp=\"" + ISO8601_FORMAT.format(comment.getCommentTimestamp()) + "\" ");
+        out.print("timestamp=\"" + iso8601Format.format(comment.getCommentTimestamp()) + "\" ");
         if (comment.getUser() != null && !comment.getUser().equals(User.getAnonymous())) {
             out.print("uid=\"" + comment.getUser().getId() + "\" ");
             out.print("user=\"" + encode(comment.getUser().getName()) + "\" ");
         }
-        out.print("is_new=\"" + comment.getIsNew() + "\" ");
+        out.print("is_new=\"" + comment.isNew() + "\" ");
         out.print(">");
         out.print(encode(comment.getText(), false));
         out.println("</comment>");
diff --git a/src/org/openstreetmap/josm/io/OnlineResource.java b/src/org/openstreetmap/josm/io/OnlineResource.java
index ee5218c..4d5dbc3 100644
--- a/src/org/openstreetmap/josm/io/OnlineResource.java
+++ b/src/org/openstreetmap/josm/io/OnlineResource.java
@@ -23,7 +23,7 @@ public enum OnlineResource {
 
     private final String locName;
 
-    private OnlineResource(String locName) {
+    OnlineResource(String locName) {
         this.locName = locName;
     }
 
diff --git a/src/org/openstreetmap/josm/io/OsmApi.java b/src/org/openstreetmap/josm/io/OsmApi.java
index 00aaafc..b46ac87 100644
--- a/src/org/openstreetmap/josm/io/OsmApi.java
+++ b/src/org/openstreetmap/josm/io/OsmApi.java
@@ -1,4 +1,4 @@
-//License: GPL. See README for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.io;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -94,7 +94,7 @@ public class OsmApi extends OsmConnection {
         OsmApi api = instances.get(serverUrl);
         if (api == null) {
             api = new OsmApi(serverUrl);
-            instances.put(serverUrl,api);
+            instances.put(serverUrl, api);
         }
         return api;
     }
@@ -323,10 +323,9 @@ public class OsmApi extends OsmConnection {
     private static String getBaseUrl(String serverUrl, String version) {
         StringBuilder rv = new StringBuilder(serverUrl);
         if (version != null) {
-            rv.append("/");
-            rv.append(version);
+            rv.append('/').append(version);
         }
-        rv.append("/");
+        rv.append('/');
         // this works around a ruby (or lighttpd) bug where two consecutive slashes in
         // an URL will cause a "404 not found" response.
         int p;
@@ -357,11 +356,11 @@ public class OsmApi extends OsmConnection {
         try {
             ensureValidChangeset();
             initialize(monitor);
-            ret = sendRequest("PUT", OsmPrimitiveType.from(osm).getAPIName()+"/create", toXml(osm, true),monitor);
+            ret = sendRequest("PUT", OsmPrimitiveType.from(osm).getAPIName()+"/create", toXml(osm, true), monitor);
             osm.setOsmId(Long.parseLong(ret.trim()), 1);
             osm.setChangesetId(getChangeset().getId());
-        } catch(NumberFormatException e){
-            throw new OsmTransferException(tr("Unexpected format of ID replied by the server. Got ''{0}''.", ret));
+        } catch (NumberFormatException e) {
+            throw new OsmTransferException(tr("Unexpected format of ID replied by the server. Got ''{0}''.", ret), e);
         }
     }
 
@@ -382,9 +381,9 @@ public class OsmApi extends OsmConnection {
             osm.setOsmId(osm.getId(), Integer.parseInt(ret.trim()));
             osm.setChangesetId(getChangeset().getId());
             osm.setVisible(true);
-        } catch(NumberFormatException e) {
+        } catch (NumberFormatException e) {
             throw new OsmTransferException(tr("Unexpected format of new version of modified primitive ''{0}''. Got ''{1}''.",
-                    osm.getId(), ret));
+                    osm.getId(), ret), e);
         }
     }
 
@@ -419,17 +418,17 @@ public class OsmApi extends OsmConnection {
     public void openChangeset(Changeset changeset, ProgressMonitor progressMonitor) throws OsmTransferException {
         CheckParameterUtil.ensureParameterNotNull(changeset, "changeset");
         try {
-            progressMonitor.beginTask((tr("Creating changeset...")));
+            progressMonitor.beginTask(tr("Creating changeset..."));
             initialize(progressMonitor);
             String ret = "";
             try {
-                ret = sendRequest("PUT", "changeset/create", toXml(changeset),progressMonitor);
+                ret = sendRequest("PUT", "changeset/create", toXml(changeset), progressMonitor);
                 changeset.setId(Integer.parseInt(ret.trim()));
                 changeset.setOpen(true);
-            } catch(NumberFormatException e){
-                throw new OsmTransferException(tr("Unexpected format of ID replied by the server. Got ''{0}''.", ret));
+            } catch (NumberFormatException e) {
+                throw new OsmTransferException(tr("Unexpected format of ID replied by the server. Got ''{0}''.", ret), e);
             }
-            progressMonitor.setCustomText((tr("Successfully opened changeset {0}",changeset.getId())));
+            progressMonitor.setCustomText(tr("Successfully opened changeset {0}", changeset.getId()));
         } finally {
             progressMonitor.finishTask();
         }
@@ -464,10 +463,10 @@ public class OsmApi extends OsmConnection {
                     toXml(changeset),
                     monitor
             );
-        } catch(ChangesetClosedException e) {
+        } catch (ChangesetClosedException e) {
             e.setSource(ChangesetClosedException.Source.UPDATE_CHANGESET);
             throw e;
-        } catch(OsmApiException e) {
+        } catch (OsmApiException e) {
             String errorHeader = e.getErrorHeader();
             if (e.getResponseCode() == HttpURLConnection.HTTP_CONFLICT && ChangesetClosedException.errorHeaderMatchesPattern(errorHeader))
                 throw new ChangesetClosedException(errorHeader, ChangesetClosedException.Source.UPDATE_CHANGESET);
@@ -536,7 +535,7 @@ public class OsmApi extends OsmConnection {
             //
             monitor.indeterminateSubTask(
                     trn("Uploading {0} object...", "Uploading {0} objects...", list.size(), list.size()));
-            String diffUploadResponse = sendRequest("POST", "changeset/" + changeset.getId() + "/upload", diffUploadRequest,monitor);
+            String diffUploadResponse = sendRequest("POST", "changeset/" + changeset.getId() + "/upload", diffUploadRequest, monitor);
 
             // Process the response from the server
             //
@@ -546,9 +545,9 @@ public class OsmApi extends OsmConnection {
                     getChangeset(),
                     monitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false)
             );
-        } catch(OsmTransferException e) {
+        } catch (OsmTransferException e) {
             throw e;
-        } catch(XmlParsingException e) {
+        } catch (XmlParsingException e) {
             throw new OsmTransferException(e);
         } finally {
             monitor.finishTask();
@@ -557,12 +556,12 @@ public class OsmApi extends OsmConnection {
 
     private void sleepAndListen(int retry, ProgressMonitor monitor) throws OsmTransferCanceledException {
         Main.info(tr("Waiting 10 seconds ... "));
-        for (int i=0; i < 10; i++) {
+        for (int i = 0; i < 10; i++) {
             if (monitor != null) {
-                monitor.setCustomText(tr("Starting retry {0} of {1} in {2} seconds ...", getMaxRetries() - retry,getMaxRetries(), 10-i));
+                monitor.setCustomText(tr("Starting retry {0} of {1} in {2} seconds ...", getMaxRetries() - retry, getMaxRetries(), 10-i));
             }
             if (cancel)
-                throw new OsmTransferCanceledException();
+                throw new OsmTransferCanceledException("Operation canceled" + (i > 0 ? " in retry #"+i : ""));
             try {
                 Thread.sleep(1000);
             } catch (InterruptedException ex) {
@@ -579,7 +578,7 @@ public class OsmApi extends OsmConnection {
      */
     protected int getMaxRetries() {
         int ret = Main.pref.getInteger("osm-server.max-num-retries", DEFAULT_MAX_NUM_RETRIES);
-        return Math.max(ret,0);
+        return Math.max(ret, 0);
     }
 
     /**
@@ -591,7 +590,7 @@ public class OsmApi extends OsmConnection {
         return "oauth".equals(Main.pref.get("osm-server.auth-method", "basic"));
     }
 
-    protected final String sendRequest(String requestMethod, String urlSuffix,String requestBody, ProgressMonitor monitor)
+    protected final String sendRequest(String requestMethod, String urlSuffix, String requestBody, ProgressMonitor monitor)
             throws OsmTransferException {
         return sendRequest(requestMethod, urlSuffix, requestBody, monitor, true, false);
     }
@@ -615,19 +614,19 @@ public class OsmApi extends OsmConnection {
      * @throws OsmTransferException if the HTTP return code was not 200 (and retries have
      *    been exhausted), or rewrapping a Java exception.
      */
-    protected final String sendRequest(String requestMethod, String urlSuffix,String requestBody, ProgressMonitor monitor,
+    protected final String sendRequest(String requestMethod, String urlSuffix, String requestBody, ProgressMonitor monitor,
             boolean doAuthenticate, boolean fastFail) throws OsmTransferException {
         StringBuilder responseBody = new StringBuilder();
         int retries = fastFail ? 0 : getMaxRetries();
 
-        while(true) { // the retry loop
+        while (true) { // the retry loop
             try {
                 url = new URL(new URL(getBaseUrl()), urlSuffix);
                 Main.info(requestMethod + " " + url + "... ");
                 Main.debug(requestBody);
                 // fix #5369, see http://www.tikalk.com/java/forums/httpurlconnection-disable-keep-alive
                 activeConnection = Utils.openHttpConnection(url, false);
-                activeConnection.setConnectTimeout(fastFail ? 1000 : Main.pref.getInteger("socket.timeout.connect",15)*1000);
+                activeConnection.setConnectTimeout(fastFail ? 1000 : Main.pref.getInteger("socket.timeout.connect", 15)*1000);
                 if (fastFail) {
                     activeConnection.setReadTimeout(1000);
                 }
@@ -662,7 +661,7 @@ public class OsmApi extends OsmConnection {
                 if (retCode >= 500) {
                     if (retries-- > 0) {
                         sleepAndListen(retries, monitor);
-                        Main.info(tr("Starting retry {0} of {1}.", getMaxRetries() - retries,getMaxRetries()));
+                        Main.info(tr("Starting retry {0} of {1}.", getMaxRetries() - retries, getMaxRetries()));
                         continue;
                     }
                 }
@@ -670,19 +669,16 @@ public class OsmApi extends OsmConnection {
                 // populate return fields.
                 responseBody.setLength(0);
 
-                // If the API returned an error code like 403 forbidden, getInputStream
-                // will fail with an IOException.
+                // If the API returned an error code like 403 forbidden, getInputStream will fail with an IOException.
                 InputStream i = getConnectionStream();
                 if (i != null) {
                     // the input stream can be null if both the input and the error stream
-                    // are null. Seems to be the case if the OSM server replies a 401
-                    // Unauthorized, see #3887.
-                    //
+                    // are null. Seems to be the case if the OSM server replies a 401 Unauthorized, see #3887.
                     String s;
                     try (BufferedReader in = new BufferedReader(new InputStreamReader(i, StandardCharsets.UTF_8))) {
-                        while((s = in.readLine()) != null) {
+                        while ((s = in.readLine()) != null) {
                             responseBody.append(s);
-                            responseBody.append("\n");
+                            responseBody.append('\n');
                         }
                     }
                 }
@@ -691,7 +687,7 @@ public class OsmApi extends OsmConnection {
                 if (activeConnection.getHeaderField("Error") != null) {
                     errorHeader = activeConnection.getHeaderField("Error");
                     Main.error("Error header: " + errorHeader);
-                } else if (retCode != HttpURLConnection.HTTP_OK && responseBody.length()>0) {
+                } else if (retCode != HttpURLConnection.HTTP_OK && responseBody.length() > 0) {
                     Main.error("Error body: " + responseBody);
                 }
                 activeConnection.disconnect();
@@ -700,8 +696,8 @@ public class OsmApi extends OsmConnection {
                     Main.debug("RESPONSE: "+ activeConnection.getHeaderFields());
                 }
 
-                errorHeader = errorHeader == null? null : errorHeader.trim();
-                String errorBody = responseBody.length() == 0? null : responseBody.toString().trim();
+                errorHeader = errorHeader == null ? null : errorHeader.trim();
+                String errorBody = responseBody.length() == 0 ? null : responseBody.toString().trim();
                 switch(retCode) {
                 case HttpURLConnection.HTTP_OK:
                     return responseBody.toString();
@@ -724,9 +720,9 @@ public class OsmApi extends OsmConnection {
                     continue;
                 }
                 throw new OsmTransferException(e);
-            } catch(IOException e) {
+            } catch (IOException e) {
                 throw new OsmTransferException(e);
-            } catch(OsmTransferException e) {
+            } catch (OsmTransferException e) {
                 throw e;
             }
         }
@@ -802,7 +798,7 @@ public class OsmApi extends OsmConnection {
      * @param text Comment entered by user to open the note
      * @param monitor Progress monitor
      * @return Note as it exists on the server after creation (ID assigned)
-     * @throws OsmTransferException
+     * @throws OsmTransferException if any error occurs during dialog with OSM API
      */
     public Note createNote(LatLon latlon, String text, ProgressMonitor monitor) throws OsmTransferException {
         initialize(monitor);
@@ -824,7 +820,7 @@ public class OsmApi extends OsmConnection {
      * @param comment Text of the comment
      * @param monitor Progress monitor
      * @return Note returned by the API after the comment was added
-     * @throws OsmTransferException
+     * @throws OsmTransferException if any error occurs during dialog with OSM API
      */
     public Note addCommentToNote(Note note, String comment, ProgressMonitor monitor) throws OsmTransferException {
         initialize(monitor);
@@ -842,7 +838,7 @@ public class OsmApi extends OsmConnection {
      * @param closeMessage Optional message supplied by the user when closing the note
      * @param monitor Progress monitor
      * @return Note returned by the API after the close operation
-     * @throws OsmTransferException
+     * @throws OsmTransferException if any error occurs during dialog with OSM API
      */
     public Note closeNote(Note note, String closeMessage, ProgressMonitor monitor) throws OsmTransferException {
         initialize(monitor);
@@ -864,7 +860,7 @@ public class OsmApi extends OsmConnection {
      * @param reactivateMessage Optional message supplied by the user when reopening the note
      * @param monitor Progress monitor
      * @return Note returned by the API after the reopen operation
-     * @throws OsmTransferException
+     * @throws OsmTransferException if any error occurs during dialog with OSM API
      */
     public Note reopenNote(Note note, String reactivateMessage, ProgressMonitor monitor) throws OsmTransferException {
         initialize(monitor);
@@ -884,12 +880,12 @@ public class OsmApi extends OsmConnection {
     private Note parseSingleNote(String xml) throws OsmTransferException {
         try {
             List<Note> newNotes = new NoteReader(xml).parse();
-            if(newNotes.size() == 1) {
+            if (newNotes.size() == 1) {
                 return newNotes.get(0);
             }
             //Shouldn't ever execute. Server will either respond with an error (caught elsewhere) or one note
             throw new OsmTransferException(tr("Note upload failed"));
-        } catch (SAXException|IOException e) {
+        } catch (SAXException | IOException e) {
             Main.error(e, true);
             throw new OsmTransferException(tr("Error parsing note response from server"), e);
         }
diff --git a/src/org/openstreetmap/josm/io/OsmApiException.java b/src/org/openstreetmap/josm/io/OsmApiException.java
index 396f978..efae93c 100644
--- a/src/org/openstreetmap/josm/io/OsmApiException.java
+++ b/src/org/openstreetmap/josm/io/OsmApiException.java
@@ -2,6 +2,8 @@
 package org.openstreetmap.josm.io;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
+import org.openstreetmap.josm.Main;
+
 /**
  * Exception thrown when a communication error occurs when accessing the <a href="http://wiki.openstreetmap.org/wiki/API_v0.6">OSM API</a>.
  * @see OsmApi
@@ -15,7 +17,8 @@ public class OsmApiException extends OsmTransferException {
 
     /**
      * Constructs an {@code OsmApiException} with the specified response code, error header and error body
-     * @param responseCode The HTTP response code replied by the OSM server. See {@link java.net.HttpURLConnection HttpURLConnection} for predefined HTTP response code values
+     * @param responseCode The HTTP response code replied by the OSM server.
+     * See {@link java.net.HttpURLConnection HttpURLConnection} for predefined HTTP response code values
      * @param errorHeader The error header, as transmitted in the {@code Error} field of the HTTP response header
      * @param errorBody The error body, as transmitted in the HTTP response body
      * @param accessedUrl The complete URL accessed when this error occured
@@ -30,7 +33,8 @@ public class OsmApiException extends OsmTransferException {
 
     /**
      * Constructs an {@code OsmApiException} with the specified response code, error header and error body
-     * @param responseCode The HTTP response code replied by the OSM server. See {@link java.net.HttpURLConnection HttpURLConnection} for predefined HTTP response code values
+     * @param responseCode The HTTP response code replied by the OSM server.
+     * See {@link java.net.HttpURLConnection HttpURLConnection} for predefined HTTP response code values
      * @param errorHeader The error header, as transmitted in the {@code Error} field of the HTTP response header
      * @param errorBody The error body, as transmitted in the HTTP response body
      */
@@ -77,7 +81,8 @@ public class OsmApiException extends OsmTransferException {
 
     /**
      * Replies the HTTP response code.
-     * @return The HTTP response code replied by the OSM server. Refer to <a href="http://wiki.openstreetmap.org/wiki/API_v0.6">OSM API</a> to see the list of response codes returned by the API for each call.
+     * @return The HTTP response code replied by the OSM server. Refer to
+     * <a href="http://wiki.openstreetmap.org/wiki/API_v0.6">OSM API</a> to see the list of response codes returned by the API for each call.
      */
     public int getResponseCode() {
         return responseCode;
@@ -85,7 +90,8 @@ public class OsmApiException extends OsmTransferException {
 
     /**
      * Sets the HTTP response code.
-     * @param responseCode The HTTP response code replied by the OSM server. See {@link java.net.HttpURLConnection HttpURLConnection} for predefined HTTP response code values
+     * @param responseCode The HTTP response code replied by the OSM server.
+     * See {@link java.net.HttpURLConnection HttpURLConnection} for predefined HTTP response code values
      */
     public void setResponseCode(int responseCode) {
         this.responseCode = responseCode;
@@ -129,30 +135,32 @@ public class OsmApiException extends OsmTransferException {
         sb.append("ResponseCode=")
         .append(responseCode);
         String eh = "";
-        try
-        {
-            if(errorHeader != null)
+        try {
+            if (errorHeader != null)
                 eh = tr(errorHeader.trim());
             if (!eh.isEmpty()) {
                 sb.append(", Error Header=<")
                 .append(eh)
-                .append(">");
+                .append('>');
             }
-        }
-        catch (Exception e) {
+        } catch (Exception e) {
             // Ignored
+            if (Main.isTraceEnabled()) {
+                Main.trace(e.getMessage());
+            }
         }
-        try
-        {
+        try {
             String eb = errorBody != null ? tr(errorBody.trim()) : "";
             if (!eb.isEmpty() && !eb.equals(eh)) {
                 sb.append(", Error Body=<")
                 .append(eb)
-                .append(">");
+                .append('>');
             }
-        }
-        catch (Exception e) {
+        } catch (Exception e) {
             // Ignored
+            if (Main.isTraceEnabled()) {
+                Main.trace(e.getMessage());
+            }
         }
         return sb.toString();
     }
@@ -178,7 +186,8 @@ public class OsmApiException extends OsmTransferException {
     }
 
     /**
-     * Sets the complete URL accessed when this error occured. This is distinct from the one set with {@link #setUrl}, which is generally only the base URL of the server.
+     * Sets the complete URL accessed when this error occured.
+     * This is distinct from the one set with {@link #setUrl}, which is generally only the base URL of the server.
      * @param url the complete URL accessed when this error occured.
      */
     public void setAccessedUrl(String url) {
@@ -186,7 +195,8 @@ public class OsmApiException extends OsmTransferException {
     }
 
     /**
-     * Replies the complete URL accessed when this error occured. This is distinct from the one returned by {@link #getUrl}, which is generally only the base URL of the server.
+     * Replies the complete URL accessed when this error occured.
+     * This is distinct from the one returned by {@link #getUrl}, which is generally only the base URL of the server.
      * @return the complete URL accessed when this error occured.
      */
     public String getAccessedUrl() {
diff --git a/src/org/openstreetmap/josm/io/OsmApiPrimitiveGoneException.java b/src/org/openstreetmap/josm/io/OsmApiPrimitiveGoneException.java
index ddecb8c..bec6e21 100644
--- a/src/org/openstreetmap/josm/io/OsmApiPrimitiveGoneException.java
+++ b/src/org/openstreetmap/josm/io/OsmApiPrimitiveGoneException.java
@@ -12,7 +12,7 @@ import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
  * which is already deleted on the server.
  *
  */
-public class OsmApiPrimitiveGoneException extends OsmApiException{
+public class OsmApiPrimitiveGoneException extends OsmApiException {
     /**
      * The regexp pattern for the error header replied by the OSM API
      */
diff --git a/src/org/openstreetmap/josm/io/OsmChangeBuilder.java b/src/org/openstreetmap/josm/io/OsmChangeBuilder.java
index 9dfd896..34b1590 100644
--- a/src/org/openstreetmap/josm/io/OsmChangeBuilder.java
+++ b/src/org/openstreetmap/josm/io/OsmChangeBuilder.java
@@ -51,7 +51,7 @@ public class OsmChangeBuilder {
     }
 
     private void switchMode(String newMode) {
-        if ((newMode != null && !newMode.equals(currentMode))||(newMode == null && currentMode != null)) {
+        if ((newMode != null && !newMode.equals(currentMode)) || (newMode == null && currentMode != null)) {
             if (currentMode != null) {
                 writer.print("</");
                 writer.print(currentMode);
@@ -77,7 +77,7 @@ public class OsmChangeBuilder {
         writer.print("<osmChange version=\"");
         writer.print(apiVersion);
         writer.println("\" generator=\"JOSM\">");
-        prologWritten=true;
+        prologWritten = true;
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/io/OsmChangeImporter.java b/src/org/openstreetmap/josm/io/OsmChangeImporter.java
index 6a10ca4..e7d04c7 100644
--- a/src/org/openstreetmap/josm/io/OsmChangeImporter.java
+++ b/src/org/openstreetmap/josm/io/OsmChangeImporter.java
@@ -34,12 +34,13 @@ public class OsmChangeImporter extends FileImporter {
         super(filter);
     }
 
-    @Override public void importData(File file, ProgressMonitor progressMonitor) throws IOException, IllegalDataException {
+    @Override
+    public void importData(File file, ProgressMonitor progressMonitor) throws IOException, IllegalDataException {
         try {
             importData(Compression.getUncompressedFileInputStream(file), file, progressMonitor);
         } catch (FileNotFoundException e) {
             Main.error(e);
-            throw new IOException(tr("File ''{0}'' does not exist.", file.getName()));
+            throw new IOException(tr("File ''{0}'' does not exist.", file.getName()), e);
         }
     }
 
diff --git a/src/org/openstreetmap/josm/io/OsmChangeReader.java b/src/org/openstreetmap/josm/io/OsmChangeReader.java
index 08f39e2..cbe99ff 100644
--- a/src/org/openstreetmap/josm/io/OsmChangeReader.java
+++ b/src/org/openstreetmap/josm/io/OsmChangeReader.java
@@ -29,6 +29,7 @@ public class OsmChangeReader extends OsmReader {
      * @see #parseDataSet(InputStream, ProgressMonitor)
      */
     protected OsmChangeReader() {
+        // Restricts visibility
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/io/OsmChangesetContentParser.java b/src/org/openstreetmap/josm/io/OsmChangesetContentParser.java
index 6701db6..423cd12 100644
--- a/src/org/openstreetmap/josm/io/OsmChangesetContentParser.java
+++ b/src/org/openstreetmap/josm/io/OsmChangesetContentParser.java
@@ -80,7 +80,9 @@ public class OsmChangesetContentParser {
             case "way":
             case "relation":
                 if (currentModificationType == null) {
+                    // CHECKSTYLE.OFF: LineLength
                     throwException(tr("Illegal document structure. Found node, way, or relation outside of ''create'', ''modify'', or ''delete''."));
+                    // CHECKSTYLE.ON: LineLength
                 }
                 data.put(currentPrimitive, currentModificationType);
                 break;
@@ -150,8 +152,8 @@ public class OsmChangesetContentParser {
         try {
             progressMonitor.beginTask("");
             progressMonitor.indeterminateSubTask(tr("Parsing changeset content ..."));
-            Utils.newSafeSAXParser().parse(source, new Parser());
-        } catch(XmlParsingException e) {
+            Utils.parseSafeSAX(source, new Parser());
+        } catch (XmlParsingException e) {
             throw e;
         } catch (ParserConfigurationException | SAXException | IOException e) {
             throw new XmlParsingException(e);
diff --git a/src/org/openstreetmap/josm/io/OsmChangesetParser.java b/src/org/openstreetmap/josm/io/OsmChangesetParser.java
index 39dfcdb..a343f91 100644
--- a/src/org/openstreetmap/josm/io/OsmChangesetParser.java
+++ b/src/org/openstreetmap/josm/io/OsmChangesetParser.java
@@ -32,7 +32,8 @@ import org.xml.sax.helpers.DefaultHandler;
  * Example:
  * <pre>
  * <osm version="0.6" generator="OpenStreetMap server">
- *     <changeset id="143" user="guggis" uid="1" created_at="2009-09-08T20:35:39Z" closed_at="2009-09-08T21:36:12Z" open="false" min_lon="7.380925" min_lat="46.9215164" max_lon="7.3984718" max_lat="46.9226502">
+ *     <changeset id="143" user="guggis" uid="1" created_at="2009-09-08T20:35:39Z" closed_at="2009-09-08T21:36:12Z" open="false"
+ *                min_lon="7.380925" min_lat="46.9215164" max_lon="7.3984718" max_lat="46.9226502">
  *         <tag k="asdfasdf" v="asdfasdf"/>
  *         <tag k="created_by" v="JOSM/1.5 (UNKNOWN de)"/>
  *         <tag k="comment" v="1234"/>
@@ -125,13 +126,13 @@ public final class OsmChangesetParser {
                 double minLon = 0;
                 try {
                     minLon = Double.parseDouble(min_lon);
-                } catch(NumberFormatException e) {
+                } catch (NumberFormatException e) {
                     throwException(tr("Illegal value for attribute ''{0}''. Got ''{1}''.", "min_lon", min_lon));
                 }
                 double minLat = 0;
                 try {
                     minLat = Double.parseDouble(min_lat);
-                } catch(NumberFormatException e) {
+                } catch (NumberFormatException e) {
                     throwException(tr("Illegal value for attribute ''{0}''. Got ''{1}''.", "min_lat", min_lat));
                 }
                 current.setMin(new LatLon(minLat, minLon));
@@ -141,13 +142,13 @@ public final class OsmChangesetParser {
                 double maxLon = 0;
                 try {
                     maxLon = Double.parseDouble(max_lon);
-                } catch(NumberFormatException e) {
+                } catch (NumberFormatException e) {
                     throwException(tr("Illegal value for attribute ''{0}''. Got ''{1}''.", "max_lon", max_lon));
                 }
                 double maxLat = 0;
                 try {
                     maxLat = Double.parseDouble(max_lat);
-                } catch(NumberFormatException e) {
+                } catch (NumberFormatException e) {
                     throwException(tr("Illegal value for attribute ''{0}''. Got ''{1}''.", "max_lat", max_lat));
                 }
                 current.setMax(new LatLon(maxLon, maxLat));
@@ -175,7 +176,7 @@ public final class OsmChangesetParser {
             int att = 0;
             try {
                 att = Integer.parseInt(value);
-            } catch(NumberFormatException e) {
+            } catch (NumberFormatException e) {
                 throwException(tr("Illegal value for attribute ''{0}''. Got ''{1}''.", "id", value));
             }
             if (att < minAllowed) {
@@ -254,7 +255,7 @@ public final class OsmChangesetParser {
             try {
                 long id = Long.parseLong(uid);
                 return User.createOsmUser(id, name);
-            } catch(NumberFormatException e) {
+            } catch (NumberFormatException e) {
                 throwException(MessageFormat.format("Illegal value for attribute ''uid''. Got ''{0}''.", uid));
             }
             return null;
@@ -277,11 +278,11 @@ public final class OsmChangesetParser {
             progressMonitor.beginTask("");
             progressMonitor.indeterminateSubTask(tr("Parsing list of changesets..."));
             InputSource inputSource = new InputSource(new InvalidXmlCharacterFilter(new InputStreamReader(source, StandardCharsets.UTF_8)));
-            Utils.newSafeSAXParser().parse(inputSource, parser.new Parser());
+            Utils.parseSafeSAX(inputSource, parser.new Parser());
             return parser.getChangesets();
-        } catch(ParserConfigurationException | SAXException e) {
+        } catch (ParserConfigurationException | SAXException e) {
             throw new IllegalDataException(e.getMessage(), e);
-        } catch(Exception e) {
+        } catch (Exception e) {
             throw new IllegalDataException(e);
         } finally {
             progressMonitor.finishTask();
diff --git a/src/org/openstreetmap/josm/io/OsmConnection.java b/src/org/openstreetmap/josm/io/OsmConnection.java
index 429dbdb..75ecc52 100644
--- a/src/org/openstreetmap/josm/io/OsmConnection.java
+++ b/src/org/openstreetmap/josm/io/OsmConnection.java
@@ -92,13 +92,13 @@ public class OsmConnection {
             cancel = true;
             return;
         } else {
-            String username= response.getUsername() == null ? "" : response.getUsername();
+            String username = response.getUsername() == null ? "" : response.getUsername();
             String password = response.getPassword() == null ? "" : String.valueOf(response.getPassword());
             token = username + ":" + password;
             try {
                 ByteBuffer bytes = encoder.encode(CharBuffer.wrap(token));
                 con.addRequestProperty("Authorization", "Basic "+Base64.encode(bytes));
-            } catch(CharacterCodingException e) {
+            } catch (CharacterCodingException e) {
                 throw new OsmTransferException(e);
             }
         }
@@ -118,12 +118,12 @@ public class OsmConnection {
         }
         OAuthConsumer consumer = oauthParameters.buildConsumer();
         OAuthAccessTokenHolder holder = OAuthAccessTokenHolder.getInstance();
-        if (! holder.containsAccessToken())
+        if (!holder.containsAccessToken())
             throw new MissingOAuthAccessTokenException();
         consumer.setTokenWithSecret(holder.getAccessTokenKey(), holder.getAccessTokenSecret());
         try {
             consumer.sign(connection);
-        } catch(OAuthException e) {
+        } catch (OAuthException e) {
             throw new OsmTransferException(tr("Failed to sign a HTTP connection with an OAuth Authentication header"), e);
         }
     }
diff --git a/src/org/openstreetmap/josm/io/OsmHistoryReader.java b/src/org/openstreetmap/josm/io/OsmHistoryReader.java
index 1fd2f31..b51238e 100644
--- a/src/org/openstreetmap/josm/io/OsmHistoryReader.java
+++ b/src/org/openstreetmap/josm/io/OsmHistoryReader.java
@@ -90,7 +90,7 @@ public class OsmHistoryReader {
         InputSource inputSource = new InputSource(new InputStreamReader(in, StandardCharsets.UTF_8));
         progressMonitor.beginTask(tr("Parsing OSM history data ..."));
         try {
-            Utils.newSafeSAXParser().parse(inputSource, new Parser());
+            Utils.parseSafeSAX(inputSource, new Parser());
         } catch (ParserConfigurationException e) {
             Main.error(e); // broken SAXException chaining
             throw new SAXException(e);
diff --git a/src/org/openstreetmap/josm/io/OsmImporter.java b/src/org/openstreetmap/josm/io/OsmImporter.java
index 59bd7b8..9909447 100644
--- a/src/org/openstreetmap/josm/io/OsmImporter.java
+++ b/src/org/openstreetmap/josm/io/OsmImporter.java
@@ -122,7 +122,8 @@ public class OsmImporter extends FileImporter {
      * @param layerName name of generated layer
      * @param progressMonitor handler for progress monitoring and canceling
      */
-    public OsmImporterData loadLayer(InputStream in, final File associatedFile, final String layerName, ProgressMonitor progressMonitor) throws IllegalDataException {
+    public OsmImporterData loadLayer(InputStream in, final File associatedFile, final String layerName, ProgressMonitor progressMonitor)
+            throws IllegalDataException {
         final DataSet dataSet = parseDataSet(in, progressMonitor);
         if (dataSet == null) {
             throw new IllegalDataException(tr("Invalid dataset"));
diff --git a/src/org/openstreetmap/josm/io/OsmReader.java b/src/org/openstreetmap/josm/io/OsmReader.java
index c880129..e37449a 100644
--- a/src/org/openstreetmap/josm/io/OsmReader.java
+++ b/src/org/openstreetmap/josm/io/OsmReader.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.io;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -77,6 +77,7 @@ public class OsmReader extends AbstractReader {
      * @see #parseDataSet(InputStream, ProgressMonitor)
      */
     protected OsmReader() {
+        // Restricts visibility
     }
 
     protected void setParser(XMLStreamReader parser) {
@@ -187,8 +188,8 @@ public class OsmReader extends AbstractReader {
             DataSource src = new DataSource(bounds, origin);
             ds.dataSources.add(src);
         } else {
-            throwException(tr(
-                    "Missing mandatory attributes on element ''bounds''. Got minlon=''{0}'',minlat=''{1}'',maxlon=''{3}'',maxlat=''{4}'', origin=''{5}''.",
+            throwException(tr("Missing mandatory attributes on element ''bounds''. " +
+                    "Got minlon=''{0}'',minlat=''{1}'',maxlon=''{3}'',maxlat=''{4}'', origin=''{5}''.",
                     minlon, minlat, maxlon, maxlat, origin
             ));
         }
@@ -310,12 +311,13 @@ public class OsmReader extends AbstractReader {
         long id = 0;
         String value = parser.getAttributeValue(null, "ref");
         if (value == null) {
-            throwException(tr("Missing attribute ''ref'' on member in relation {0}.",r.getUniqueId()));
+            throwException(tr("Missing attribute ''ref'' on member in relation {0}.", r.getUniqueId()));
         }
         try {
             id = Long.parseLong(value);
-        } catch(NumberFormatException e) {
-            throwException(tr("Illegal value for attribute ''ref'' on member in relation {0}. Got {1}", Long.toString(r.getUniqueId()),value), e);
+        } catch (NumberFormatException e) {
+            throwException(tr("Illegal value for attribute ''ref'' on member in relation {0}. Got {1}", Long.toString(r.getUniqueId()),
+                    value), e);
         }
         value = parser.getAttributeValue(null, "type");
         if (value == null) {
@@ -323,8 +325,9 @@ public class OsmReader extends AbstractReader {
         }
         try {
             type = OsmPrimitiveType.fromApiTypeName(value);
-        } catch(IllegalArgumentException e) {
-            throwException(tr("Illegal value for attribute ''type'' on member {0} in relation {1}. Got {2}.", Long.toString(id), Long.toString(r.getUniqueId()), value), e);
+        } catch (IllegalArgumentException e) {
+            throwException(tr("Illegal value for attribute ''type'' on member {0} in relation {1}. Got {2}.",
+                    Long.toString(id), Long.toString(r.getUniqueId()), value), e);
         }
         value = parser.getAttributeValue(null, "role");
         role = value;
@@ -418,7 +421,7 @@ public class OsmReader extends AbstractReader {
         try {
             long id = Long.parseLong(uid);
             return User.createOsmUser(id, name);
-        } catch(NumberFormatException e) {
+        } catch (NumberFormatException e) {
             throwException(MessageFormat.format("Illegal value for attribute ''uid''. Got ''{0}''.", uid), e);
         }
         return null;
@@ -434,8 +437,8 @@ public class OsmReader extends AbstractReader {
         }
 
         String time = parser.getAttributeValue(null, "timestamp");
-        if (time != null && time.length() != 0) {
-            current.setTimestamp(DateUtils.fromString(time));
+        if (time != null && !time.isEmpty()) {
+            current.setRawTimestamp((int) (DateUtils.tsFromString(time)/1000));
         }
 
         String user = parser.getAttributeValue(null, "user");
@@ -452,7 +455,7 @@ public class OsmReader extends AbstractReader {
         if (versionString != null) {
             try {
                 version = Integer.parseInt(versionString);
-            } catch(NumberFormatException e) {
+            } catch (NumberFormatException e) {
                 throwException(tr("Illegal value for attribute ''version'' on OSM primitive with ID {0}. Got {1}.",
                         Long.toString(current.getUniqueId()), versionString), e);
             }
@@ -499,7 +502,8 @@ public class OsmReader extends AbstractReader {
                 Main.debug(e.getMessage());
                 if (current.isNew()) {
                     // for a new primitive we just log a warning
-                    Main.info(tr("Illegal value for attribute ''changeset'' on new object {1}. Got {0}. Resetting to 0.", v, current.getUniqueId()));
+                    Main.info(tr("Illegal value for attribute ''changeset'' on new object {1}. Got {0}. Resetting to 0.",
+                            v, current.getUniqueId()));
                     current.setChangesetId(0);
                 } else {
                     // for an existing primitive this is a problem
@@ -513,7 +517,8 @@ public class OsmReader extends AbstractReader {
             if (current.getChangesetId() <= 0) {
                 if (current.isNew()) {
                     // for a new primitive we just log a warning
-                    Main.info(tr("Illegal value for attribute ''changeset'' on new object {1}. Got {0}. Resetting to 0.", v, current.getUniqueId()));
+                    Main.info(tr("Illegal value for attribute ''changeset'' on new object {1}. Got {0}. Resetting to 0.",
+                            v, current.getUniqueId()));
                     current.setChangesetId(0);
                 } else {
                     // for an existing primitive this is a problem
@@ -526,12 +531,12 @@ public class OsmReader extends AbstractReader {
     private long getLong(String name) throws XMLStreamException {
         String value = parser.getAttributeValue(null, name);
         if (value == null) {
-            throwException(tr("Missing required attribute ''{0}''.",name));
+            throwException(tr("Missing required attribute ''{0}''.", name));
         }
         try {
             return Long.parseLong(value);
-        } catch(NumberFormatException e) {
-            throwException(tr("Illegal long value for attribute ''{0}''. Got ''{1}''.",name, value), e);
+        } catch (NumberFormatException e) {
+            throwException(tr("Illegal long value for attribute ''{0}''. Got ''{1}''.", name, value), e);
         }
         return 0; // should not happen
     }
@@ -613,11 +618,11 @@ public class OsmReader extends AbstractReader {
                 }
             }
             return getDataSet();
-        } catch(IllegalDataException e) {
+        } catch (IllegalDataException e) {
             throw e;
-        } catch(OsmParsingException e) {
+        } catch (OsmParsingException e) {
             throw new IllegalDataException(e.getMessage(), e);
-        } catch(XMLStreamException e) {
+        } catch (XMLStreamException e) {
             String msg = e.getMessage();
             Pattern p = Pattern.compile("Message: (.+)");
             Matcher m = p.matcher(msg);
@@ -625,10 +630,11 @@ public class OsmReader extends AbstractReader {
                 msg = m.group(1);
             }
             if (e.getLocation() != null)
-                throw new IllegalDataException(tr("Line {0} column {1}: ", e.getLocation().getLineNumber(), e.getLocation().getColumnNumber()) + msg, e);
+                throw new IllegalDataException(tr("Line {0} column {1}: ",
+                        e.getLocation().getLineNumber(), e.getLocation().getColumnNumber()) + msg, e);
             else
                 throw new IllegalDataException(msg, e);
-        } catch(Exception e) {
+        } catch (Exception e) {
             throw new IllegalDataException(e);
         } finally {
             progressMonitor.finishTask();
@@ -643,7 +649,7 @@ public class OsmReader extends AbstractReader {
      * @param progressMonitor  the progress monitor. If null, {@link NullProgressMonitor#INSTANCE} is assumed
      *
      * @return the dataset with the parsed data
-     * @throws IllegalDataException if the an error was found while parsing the data from the source
+     * @throws IllegalDataException if an error was found while parsing the data from the source
      * @throws IllegalArgumentException if source is null
      */
     public static DataSet parseDataSet(InputStream source, ProgressMonitor progressMonitor) throws IllegalDataException {
diff --git a/src/org/openstreetmap/josm/io/OsmServerBackreferenceReader.java b/src/org/openstreetmap/josm/io/OsmServerBackreferenceReader.java
index c1b8548..077d87a 100644
--- a/src/org/openstreetmap/josm/io/OsmServerBackreferenceReader.java
+++ b/src/org/openstreetmap/josm/io/OsmServerBackreferenceReader.java
@@ -124,7 +124,7 @@ public class OsmServerBackreferenceReader extends OsmServerReader {
         try {
             progressMonitor.subTask(tr("Contacting OSM Server..."));
             StringBuilder sb = new StringBuilder();
-            sb.append(primitiveType.getAPIName()).append("/").append(id).append(type);
+            sb.append(primitiveType.getAPIName()).append('/').append(id).append(type);
 
             try (InputStream in = getInputStream(sb.toString(), progressMonitor.createSubTaskMonitor(1, true))) {
                 if (in == null)
@@ -132,7 +132,7 @@ public class OsmServerBackreferenceReader extends OsmServerReader {
                 progressMonitor.subTask(message);
                 return OsmReader.parseDataSet(in, progressMonitor.createSubTaskMonitor(1, true));
             }
-        } catch(OsmTransferException e) {
+        } catch (OsmTransferException e) {
             throw e;
         } catch (Exception e) {
             if (cancel)
@@ -148,7 +148,7 @@ public class OsmServerBackreferenceReader extends OsmServerReader {
      * Reads referring ways from the API server and replies them in a {@link DataSet}
      *
      * @return the data set
-     * @throws OsmTransferException
+     * @throws OsmTransferException if any error occurs during dialog with OSM API
      */
     protected DataSet getReferringWays(ProgressMonitor progressMonitor) throws OsmTransferException {
         return getReferringPrimitives(progressMonitor, "/ways", tr("Downloading referring ways ..."));
@@ -159,7 +159,7 @@ public class OsmServerBackreferenceReader extends OsmServerReader {
      *
      * @param progressMonitor the progress monitor
      * @return the data set
-     * @throws OsmTransferException
+     * @throws OsmTransferException if any error occurs during dialog with OSM API
      */
     protected DataSet getReferringRelations(ProgressMonitor progressMonitor) throws OsmTransferException {
         return getReferringPrimitives(progressMonitor, "/relations", tr("Downloading referring relations ..."));
@@ -188,7 +188,7 @@ public class OsmServerBackreferenceReader extends OsmServerReader {
         progressMonitor.beginTask(null, 2);
         try {
             Collection<Way> waysToCheck = new ArrayList<>(ds.getWays());
-            if (isReadFull() ||primitiveType.equals(OsmPrimitiveType.NODE)) {
+            if (isReadFull() || primitiveType.equals(OsmPrimitiveType.NODE)) {
                 for (Way way: waysToCheck) {
                     if (!way.isNew() && way.hasIncompleteNodes()) {
                         OsmServerObjectReader reader = new OsmServerObjectReader(way.getId(), OsmPrimitiveType.from(way), true /* read full */);
@@ -202,7 +202,7 @@ public class OsmServerBackreferenceReader extends OsmServerReader {
                 Collection<Relation> relationsToCheck  = new ArrayList<>(ds.getRelations());
                 for (Relation relation: relationsToCheck) {
                     if (!relation.isNew() && relation.hasIncompleteMembers()) {
-                        OsmServerObjectReader reader = new OsmServerObjectReader(relation.getId(), OsmPrimitiveType.from(relation), true /* read full */);
+                        OsmServerObjectReader reader = new OsmServerObjectReader(relation.getId(), OsmPrimitiveType.from(relation), true);
                         DataSet wayDs = reader.parseOsm(progressMonitor.createSubTaskMonitor(1, false));
                         DataSetMerger visitor = new DataSetMerger(ds, wayDs);
                         visitor.merge();
@@ -233,12 +233,12 @@ public class OsmServerBackreferenceReader extends OsmServerReader {
             DataSet ret = new DataSet();
             if (primitiveType.equals(OsmPrimitiveType.NODE)) {
                 DataSet ds = getReferringWays(progressMonitor.createSubTaskMonitor(1, false));
-                DataSetMerger visitor = new DataSetMerger(ret,ds);
+                DataSetMerger visitor = new DataSetMerger(ret, ds);
                 visitor.merge();
                 ret = visitor.getTargetDataSet();
             }
             DataSet ds = getReferringRelations(progressMonitor.createSubTaskMonitor(1, false));
-            DataSetMerger visitor = new DataSetMerger(ret,ds);
+            DataSetMerger visitor = new DataSetMerger(ret, ds);
             visitor.merge();
             ret = visitor.getTargetDataSet();
             if (ret != null) {
diff --git a/src/org/openstreetmap/josm/io/OsmServerChangesetReader.java b/src/org/openstreetmap/josm/io/OsmServerChangesetReader.java
index c83ba68..7c9186b 100644
--- a/src/org/openstreetmap/josm/io/OsmServerChangesetReader.java
+++ b/src/org/openstreetmap/josm/io/OsmServerChangesetReader.java
@@ -78,9 +78,9 @@ public class OsmServerChangesetReader extends OsmServerReader {
             } catch (IOException e) {
                 Main.warn(e);
             }
-        } catch(OsmTransferException e) {
+        } catch (OsmTransferException e) {
             throw e;
-        } catch(IllegalDataException e) {
+        } catch (IllegalDataException e) {
             throw new OsmTransferException(e);
         } finally {
             monitor.finishTask();
@@ -107,7 +107,7 @@ public class OsmServerChangesetReader extends OsmServerReader {
         }
         Changeset result = null;
         try {
-            monitor.beginTask(tr("Reading changeset {0} ...",id));
+            monitor.beginTask(tr("Reading changeset {0} ...", id));
             try (InputStream in = getChangesetInputStream(id, includeDiscussion, monitor)) {
                 if (in == null)
                     return null;
@@ -119,9 +119,9 @@ public class OsmServerChangesetReader extends OsmServerReader {
             } catch (IOException e) {
                 Main.warn(e);
             }
-        } catch(OsmTransferException e) {
+        } catch (OsmTransferException e) {
             throw e;
-        } catch(IllegalDataException e) {
+        } catch (IllegalDataException e) {
             throw new OsmTransferException(e);
         } finally {
             monitor.finishTask();
@@ -140,17 +140,18 @@ public class OsmServerChangesetReader extends OsmServerReader {
      * @throws IllegalArgumentException if id <= 0
      * @since 7704
      */
-    public List<Changeset> readChangesets(Collection<Integer> ids, boolean includeDiscussion, ProgressMonitor monitor) throws OsmTransferException {
+    public List<Changeset> readChangesets(Collection<Integer> ids, boolean includeDiscussion, ProgressMonitor monitor)
+            throws OsmTransferException {
         if (ids == null)
             return Collections.emptyList();
         if (monitor == null) {
             monitor = NullProgressMonitor.INSTANCE;
         }
         try {
-            monitor.beginTask(trn("Downloading {0} changeset ...", "Downloading {0} changesets ...",ids.size(),ids.size()));
+            monitor.beginTask(trn("Downloading {0} changeset ...", "Downloading {0} changesets ...", ids.size(), ids.size()));
             monitor.setTicksCount(ids.size());
             List<Changeset> ret = new ArrayList<>();
-            int i=0;
+            int i = 0;
             for (int id : ids) {
                 if (id <= 0) {
                     continue;
@@ -171,9 +172,9 @@ public class OsmServerChangesetReader extends OsmServerReader {
                 monitor.worked(1);
             }
             return ret;
-        } catch(OsmTransferException e) {
+        } catch (OsmTransferException e) {
             throw e;
-        } catch(IllegalDataException e) {
+        } catch (IllegalDataException e) {
             throw new OsmTransferException(e);
         } finally {
             monitor.finishTask();
@@ -191,7 +192,8 @@ public class OsmServerChangesetReader extends OsmServerReader {
      */
     public ChangesetDataSet downloadChangeset(int id, ProgressMonitor monitor) throws OsmTransferException {
         if (id <= 0)
-            throw new IllegalArgumentException(MessageFormat.format("Expected value of type integer > 0 for parameter ''{0}'', got {1}", "id", id));
+            throw new IllegalArgumentException(
+                    MessageFormat.format("Expected value of type integer > 0 for parameter ''{0}'', got {1}", "id", id));
         if (monitor == null) {
             monitor = NullProgressMonitor.INSTANCE;
         }
@@ -209,7 +211,7 @@ public class OsmServerChangesetReader extends OsmServerReader {
             } catch (IOException e) {
                 Main.warn(e);
             }
-        } catch(XmlParsingException e) {
+        } catch (XmlParsingException e) {
             throw new OsmTransferException(e);
         } finally {
             monitor.finishTask();
diff --git a/src/org/openstreetmap/josm/io/OsmServerHistoryReader.java b/src/org/openstreetmap/josm/io/OsmServerHistoryReader.java
index 0fec14f..deb9e6e 100644
--- a/src/org/openstreetmap/josm/io/OsmServerHistoryReader.java
+++ b/src/org/openstreetmap/josm/io/OsmServerHistoryReader.java
@@ -59,7 +59,7 @@ public class OsmServerHistoryReader extends OsmServerReader {
             progressMonitor.indeterminateSubTask(tr("Contacting OSM Server..."));
             StringBuilder sb = new StringBuilder();
             sb.append(primitiveType.getAPIName())
-            .append("/").append(id).append("/history");
+            .append('/').append(id).append("/history");
 
             try (InputStream in = getInputStream(sb.toString(), progressMonitor.createSubTaskMonitor(1, true))) {
                 if (in == null)
@@ -68,7 +68,7 @@ public class OsmServerHistoryReader extends OsmServerReader {
                 OsmHistoryReader reader = new OsmHistoryReader(in);
                 return reader.parse(progressMonitor.createSubTaskMonitor(1, true));
             }
-        } catch(OsmTransferException e) {
+        } catch (OsmTransferException e) {
             throw e;
         } catch (Exception e) {
             if (cancel)
diff --git a/src/org/openstreetmap/josm/io/OsmServerLocationReader.java b/src/org/openstreetmap/josm/io/OsmServerLocationReader.java
index 01f9c36..98be7bf 100644
--- a/src/org/openstreetmap/josm/io/OsmServerLocationReader.java
+++ b/src/org/openstreetmap/josm/io/OsmServerLocationReader.java
@@ -1,4 +1,4 @@
-//License: GPL. For details, see LICENSE file.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.io;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -49,7 +49,7 @@ public class OsmServerLocationReader extends OsmServerReader {
         progressMonitor.beginTask(tr("Contacting Server...", 10));
         try {
             return parser.parse();
-        } catch(OsmTransferException e) {
+        } catch (OsmTransferException e) {
             throw e;
         } catch (Exception e) {
             if (cancel)
diff --git a/src/org/openstreetmap/josm/io/OsmServerObjectReader.java b/src/org/openstreetmap/josm/io/OsmServerObjectReader.java
index 3f337ec..c0fbb44 100644
--- a/src/org/openstreetmap/josm/io/OsmServerObjectReader.java
+++ b/src/org/openstreetmap/josm/io/OsmServerObjectReader.java
@@ -1,4 +1,4 @@
-//License: GPL. For details, see LICENSE file.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.io;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -105,7 +105,7 @@ public class OsmServerObjectReader extends OsmServerReader {
      *
      * @param progressMonitor the progress monitor. Set to {@link NullProgressMonitor#INSTANCE} if null
      * @return the downloaded data
-     * @throws OsmTransferException
+     * @throws OsmTransferException if any error occurs during dialog with OSM API
      */
     @Override
     public DataSet parseOsm(ProgressMonitor progressMonitor) throws OsmTransferException {
@@ -116,13 +116,13 @@ public class OsmServerObjectReader extends OsmServerReader {
         try {
             progressMonitor.indeterminateSubTask(tr("Downloading OSM data..."));
             StringBuilder sb = new StringBuilder();
-            sb.append(id.getType().getAPIName());
-            sb.append("/");
-            sb.append(id.getUniqueId());
-            if (full && ! id.getType().equals(OsmPrimitiveType.NODE)) {
+            sb.append(id.getType().getAPIName())
+              .append('/')
+              .append(id.getUniqueId());
+            if (full && !id.getType().equals(OsmPrimitiveType.NODE)) {
                 sb.append("/full");
             } else if (version > 0) {
-                sb.append("/").append(version);
+                sb.append('/').append(version);
             }
 
             try (InputStream in = getInputStream(sb.toString(), progressMonitor.createSubTaskMonitor(1, true))) {
@@ -130,7 +130,7 @@ public class OsmServerObjectReader extends OsmServerReader {
                     return null;
                 return OsmReader.parseDataSet(in, progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false));
             }
-        } catch(OsmTransferException e) {
+        } catch (OsmTransferException e) {
             if (cancel) return null;
             throw e;
         } catch (Exception e) {
diff --git a/src/org/openstreetmap/josm/io/OsmServerReadPostprocessor.java b/src/org/openstreetmap/josm/io/OsmServerReadPostprocessor.java
index 2e8fa1f..a3aa7ac 100644
--- a/src/org/openstreetmap/josm/io/OsmServerReadPostprocessor.java
+++ b/src/org/openstreetmap/josm/io/OsmServerReadPostprocessor.java
@@ -6,6 +6,5 @@ import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 
 public interface OsmServerReadPostprocessor {
 
-    public void postprocessDataSet(DataSet ds, ProgressMonitor progress);
-
+    void postprocessDataSet(DataSet ds, ProgressMonitor progress);
 }
diff --git a/src/org/openstreetmap/josm/io/OsmServerReader.java b/src/org/openstreetmap/josm/io/OsmServerReader.java
index 2c7dfbb..6f74c4c 100644
--- a/src/org/openstreetmap/josm/io/OsmServerReader.java
+++ b/src/org/openstreetmap/josm/io/OsmServerReader.java
@@ -116,7 +116,8 @@ public abstract class OsmServerReader extends OsmConnection {
      * @throws OsmTransferException if data transfer errors occur
      */
     @SuppressWarnings("resource")
-    protected InputStream getInputStreamRaw(String urlStr, ProgressMonitor progressMonitor, String reason, boolean uncompressAccordingToContentDisposition) throws OsmTransferException {
+    protected InputStream getInputStreamRaw(String urlStr, ProgressMonitor progressMonitor, String reason,
+            boolean uncompressAccordingToContentDisposition) throws OsmTransferException {
         try {
             OnlineResource.JOSM_WEBSITE.checkOfflineAccess(urlStr, Main.getJOSMWebsite());
             OnlineResource.OSM_API.checkOfflineAccess(urlStr, Main.pref.get("osm-server.url", OsmApi.DEFAULT_API_URL));
@@ -124,15 +125,16 @@ public abstract class OsmServerReader extends OsmConnection {
             URL url = null;
             try {
                 url = new URL(urlStr.replace(" ", "%20"));
-            } catch(MalformedURLException e) {
+            } catch (MalformedURLException e) {
                 throw new OsmTransferException(e);
             }
             try {
                 // fix #7640, see http://www.tikalk.com/java/forums/httpurlconnection-disable-keep-alive
                 activeConnection = Utils.openHttpConnection(url, false);
-            } catch(Exception e) {
+            } catch (Exception e) {
                 throw new OsmTransferException(tr("Failed to open connection to API {0}.", url.toExternalForm()), e);
             }
+            Utils.setupURLConnection(activeConnection);
             if (cancel) {
                 activeConnection.disconnect();
                 return null;
@@ -142,13 +144,11 @@ public abstract class OsmServerReader extends OsmConnection {
                 addAuth(activeConnection);
             }
             if (cancel)
-                throw new OsmTransferCanceledException();
+                throw new OsmTransferCanceledException("Operation canceled");
             if (Main.pref.getBoolean("osm-server.use-compression", true)) {
                 activeConnection.setRequestProperty("Accept-Encoding", "gzip, deflate");
             }
 
-            activeConnection.setConnectTimeout(Main.pref.getInteger("socket.timeout.connect",15)*1000);
-
             try {
                 if (reason != null && !reason.isEmpty()) {
                     Main.info("GET " + url + " (" + reason + ")");
@@ -158,7 +158,8 @@ public abstract class OsmServerReader extends OsmConnection {
                 activeConnection.connect();
             } catch (Exception e) {
                 Main.error(e);
-                OsmTransferException ote = new OsmTransferException(tr("Could not connect to the OSM server. Please check your internet connection."), e);
+                OsmTransferException ote = new OsmTransferException(
+                        tr("Could not connect to the OSM server. Please check your internet connection."), e);
                 ote.setUrl(url.toString());
                 throw ote;
             }
@@ -167,10 +168,10 @@ public abstract class OsmServerReader extends OsmConnection {
                     Main.debug("RESPONSE: "+activeConnection.getHeaderFields());
                 }
                 if (activeConnection.getResponseCode() == HttpURLConnection.HTTP_UNAUTHORIZED)
-                    throw new OsmApiException(HttpURLConnection.HTTP_UNAUTHORIZED,null,null);
+                    throw new OsmApiException(HttpURLConnection.HTTP_UNAUTHORIZED, null, null);
 
                 if (activeConnection.getResponseCode() == HttpURLConnection.HTTP_PROXY_AUTH)
-                    throw new OsmTransferCanceledException();
+                    throw new OsmTransferCanceledException("Proxy Authentication Required");
 
                 String encoding = activeConnection.getContentEncoding();
                 if (activeConnection.getResponseCode() != HttpURLConnection.HTTP_OK) {
@@ -181,13 +182,12 @@ public abstract class OsmServerReader extends OsmConnection {
                         if (i != null) {
                             BufferedReader in = new BufferedReader(new InputStreamReader(i, StandardCharsets.UTF_8));
                             String s;
-                            while((s = in.readLine()) != null) {
+                            while ((s = in.readLine()) != null) {
                                 errorBody.append(s);
-                                errorBody.append("\n");
+                                errorBody.append('\n');
                             }
                         }
-                    }
-                    catch(Exception e) {
+                    } catch (Exception e) {
                         errorBody.append(tr("Reading error text failed."));
                     }
 
@@ -366,9 +366,9 @@ public abstract class OsmServerReader extends OsmConnection {
     /**
      * Downloads notes from a given raw URL. The URL is assumed to be complete and no API limits are added
      *
-     * @param progressMonitor
+     * @param progressMonitor progress monitor
      * @return A list of notes parsed from the URL
-     * @throws OsmTransferException
+     * @throws OsmTransferException if any error occurs during dialog with OSM API
      */
     public List<Note> parseRawNotes(final ProgressMonitor progressMonitor) throws OsmTransferException {
         return null;
@@ -376,9 +376,9 @@ public abstract class OsmServerReader extends OsmConnection {
 
     /**
      * Download notes from a URL that contains a bzip2 compressed notes dump file
-     * @param progressMonitor
+     * @param progressMonitor progress monitor
      * @return A list of notes parsed from the URL
-     * @throws OsmTransferException
+     * @throws OsmTransferException if any error occurs during dialog with OSM API
      */
     public List<Note> parseRawNotesBzip2(final ProgressMonitor progressMonitor) throws OsmTransferException {
         return null;
diff --git a/src/org/openstreetmap/josm/io/OsmServerUserInfoReader.java b/src/org/openstreetmap/josm/io/OsmServerUserInfoReader.java
index 09959bf..a38e898 100644
--- a/src/org/openstreetmap/josm/io/OsmServerUserInfoReader.java
+++ b/src/org/openstreetmap/josm/io/OsmServerUserInfoReader.java
@@ -40,8 +40,8 @@ public class OsmServerUserInfoReader extends OsmServerReader {
             XPathFactory factory = XPathFactory.newInstance();
             XPath xpath = factory.newXPath();
             UserInfo userInfo = new UserInfo();
-            Node xmlNode = (Node)xpath.compile("/osm/user[1]").evaluate(document, XPathConstants.NODE);
-            if ( xmlNode== null)
+            Node xmlNode = (Node) xpath.compile("/osm/user[1]").evaluate(document, XPathConstants.NODE);
+            if (xmlNode == null)
                 throw new XmlParsingException(tr("XML tag <user> is missing."));
 
             // -- id
@@ -50,24 +50,24 @@ public class OsmServerUserInfoReader extends OsmServerReader {
                 throw new XmlParsingException(tr("Missing attribute ''{0}'' on XML tag ''{1}''.", "id", "user"));
             try {
                 userInfo.setId(Integer.parseInt(v));
-            } catch(NumberFormatException e) {
-                throw new XmlParsingException(tr("Illegal value for attribute ''{0}'' on XML tag ''{1}''. Got {2}.", "id", "user", v));
+            } catch (NumberFormatException e) {
+                throw new XmlParsingException(tr("Illegal value for attribute ''{0}'' on XML tag ''{1}''. Got {2}.", "id", "user", v), e);
             }
             // -- display name
             v = getAttribute(xmlNode, "display_name");
             userInfo.setDisplayName(v);
             // -- account_created
             v = getAttribute(xmlNode, "account_created");
-            if (v!=null) {
+            if (v != null) {
                 userInfo.setAccountCreated(DateUtils.fromString(v));
             }
             // -- description
-            xmlNode = (Node)xpath.compile("/osm/user[1]/description[1]/text()").evaluate(document, XPathConstants.NODE);
+            xmlNode = (Node) xpath.compile("/osm/user[1]/description[1]/text()").evaluate(document, XPathConstants.NODE);
             if (xmlNode != null) {
                 userInfo.setDescription(xmlNode.getNodeValue());
             }
             // -- home
-            xmlNode = (Node)xpath.compile("/osm/user[1]/home").evaluate(document, XPathConstants.NODE);
+            xmlNode = (Node) xpath.compile("/osm/user[1]/home").evaluate(document, XPathConstants.NODE);
             if (xmlNode != null) {
                 v = getAttribute(xmlNode, "lat");
                 if (v == null)
@@ -75,8 +75,9 @@ public class OsmServerUserInfoReader extends OsmServerReader {
                 double lat;
                 try {
                     lat = Double.parseDouble(v);
-                } catch(NumberFormatException e) {
-                    throw new XmlParsingException(tr("Illegal value for attribute ''{0}'' on XML tag ''{1}''. Got {2}.", "lat", "home", v));
+                } catch (NumberFormatException e) {
+                    throw new XmlParsingException(tr("Illegal value for attribute ''{0}'' on XML tag ''{1}''. Got {2}.",
+                            "lat", "home", v), e);
                 }
 
                 v = getAttribute(xmlNode, "lon");
@@ -85,8 +86,9 @@ public class OsmServerUserInfoReader extends OsmServerReader {
                 double lon;
                 try {
                     lon = Double.parseDouble(v);
-                } catch(NumberFormatException e) {
-                    throw new XmlParsingException(tr("Illegal value for attribute ''{0}'' on XML tag ''{1}''. Got {2}.", "lon", "home", v));
+                } catch (NumberFormatException e) {
+                    throw new XmlParsingException(tr("Illegal value for attribute ''{0}'' on XML tag ''{1}''. Got {2}.",
+                            "lon", "home", v), e);
                 }
 
                 v = getAttribute(xmlNode, "zoom");
@@ -95,38 +97,40 @@ public class OsmServerUserInfoReader extends OsmServerReader {
                 int zoom;
                 try {
                     zoom = Integer.parseInt(v);
-                } catch(NumberFormatException e) {
-                    throw new XmlParsingException(tr("Illegal value for attribute ''{0}'' on XML tag ''{1}''. Got {2}.", "zoom", "home", v));
+                } catch (NumberFormatException e) {
+                    throw new XmlParsingException(tr("Illegal value for attribute ''{0}'' on XML tag ''{1}''. Got {2}.",
+                            "zoom", "home", v), e);
                 }
-                userInfo.setHome(new LatLon(lat,lon));
+                userInfo.setHome(new LatLon(lat, lon));
                 userInfo.setHomeZoom(zoom);
             }
 
             // -- language list
-            NodeList xmlNodeList = (NodeList)xpath.compile("/osm/user[1]/languages[1]/lang/text()").evaluate(document, XPathConstants.NODESET);
+            NodeList xmlNodeList = (NodeList) xpath.compile("/osm/user[1]/languages[1]/lang/text()").evaluate(document, XPathConstants.NODESET);
             if (xmlNodeList != null) {
                 List<String> languages = new LinkedList<>();
-                for (int i=0; i < xmlNodeList.getLength(); i++) {
+                for (int i = 0; i < xmlNodeList.getLength(); i++) {
                     languages.add(xmlNodeList.item(i).getNodeValue());
                 }
                 userInfo.setLanguages(languages);
             }
 
             // -- messages
-            xmlNode = (Node)xpath.compile("/osm/user[1]/messages/received").evaluate(document, XPathConstants.NODE);
+            xmlNode = (Node) xpath.compile("/osm/user[1]/messages/received").evaluate(document, XPathConstants.NODE);
             if (xmlNode != null) {
                 v = getAttribute(xmlNode, "unread");
                 if (v == null)
                     throw new XmlParsingException(tr("Missing attribute ''{0}'' on XML tag ''{1}''.", "unread", "received"));
                 try {
                     userInfo.setUnreadMessages(Integer.parseInt(v));
-                } catch(NumberFormatException e) {
-                    throw new XmlParsingException(tr("Illegal value for attribute ''{0}'' on XML tag ''{1}''. Got {2}.", "unread", "received", v), e);
+                } catch (NumberFormatException e) {
+                    throw new XmlParsingException(
+                            tr("Illegal value for attribute ''{0}'' on XML tag ''{1}''. Got {2}.", "unread", "received", v), e);
                 }
             }
 
             return userInfo;
-        } catch(XPathException e) {
+        } catch (XPathException e) {
             throw new XmlParsingException(e);
         }
     }
@@ -171,9 +175,9 @@ public class OsmServerUserInfoReader extends OsmServerReader {
                         DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(in)
                 );
             }
-        } catch(OsmTransferException e) {
+        } catch (OsmTransferException e) {
             throw e;
-        } catch(Exception e) {
+        } catch (Exception e) {
             throw new OsmTransferException(e);
         } finally {
             monitor.finishTask();
diff --git a/src/org/openstreetmap/josm/io/OsmServerWritePostprocessor.java b/src/org/openstreetmap/josm/io/OsmServerWritePostprocessor.java
index d125299..1585a4b 100644
--- a/src/org/openstreetmap/josm/io/OsmServerWritePostprocessor.java
+++ b/src/org/openstreetmap/josm/io/OsmServerWritePostprocessor.java
@@ -8,6 +8,5 @@ import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 
 public interface OsmServerWritePostprocessor {
 
-    public void postprocessUploadedPrimitives(Collection<OsmPrimitive> p, ProgressMonitor progress);
-
+    void postprocessUploadedPrimitives(Collection<OsmPrimitive> p, ProgressMonitor progress);
 }
diff --git a/src/org/openstreetmap/josm/io/OsmServerWriter.java b/src/org/openstreetmap/josm/io/OsmServerWriter.java
index cb91da2..7c5f2db 100644
--- a/src/org/openstreetmap/josm/io/OsmServerWriter.java
+++ b/src/org/openstreetmap/josm/io/OsmServerWriter.java
@@ -43,6 +43,7 @@ public class OsmServerWriter {
         }
         postprocessors.add(pp);
     }
+
     public static void unregisterPostprocessor(OsmServerWritePostprocessor pp) {
         if (postprocessors != null) {
             postprocessors.remove(pp);
@@ -64,17 +65,16 @@ public class OsmServerWriter {
         if (elapsed == 0) {
             elapsed = 1;
         }
-        float uploads_per_ms = (float)progress / elapsed;
-        float uploads_left = list_size - progress;
-        int ms_left = (int)(uploads_left / uploads_per_ms);
-        int minutes_left = ms_left / MSECS_PER_MINUTE;
-        int seconds_left = (ms_left / MSECS_PER_SECOND) % SECONDS_PER_MINUTE ;
-        String time_left_str = Integer.toString(minutes_left) + ":";
+        double uploads_per_ms = (double) progress / elapsed;
+        double uploads_left = list_size - progress;
+        long ms_left = (long) (uploads_left / uploads_per_ms);
+        long minutes_left = ms_left / MSECS_PER_MINUTE;
+        long seconds_left = (ms_left / MSECS_PER_SECOND) % SECONDS_PER_MINUTE;
+        String time_left_str = Long.toString(minutes_left) + ":";
         if (seconds_left < 10) {
             time_left_str += "0";
         }
-        time_left_str += Integer.toString(seconds_left);
-        return time_left_str;
+        return time_left_str + Long.toString(seconds_left);
     }
 
     /**
@@ -84,7 +84,8 @@ public class OsmServerWriter {
      * @param progressMonitor the progress monitor
      * @throws OsmTransferException if an exception occurs
      */
-    protected void uploadChangesIndividually(Collection<? extends OsmPrimitive> primitives, ProgressMonitor progressMonitor) throws OsmTransferException {
+    protected void uploadChangesIndividually(Collection<? extends OsmPrimitive> primitives, ProgressMonitor progressMonitor)
+            throws OsmTransferException {
         try {
             progressMonitor.beginTask(tr("Starting to upload with one request per primitive ..."));
             progressMonitor.setTicksCount(primitives.size());
@@ -106,13 +107,13 @@ public class OsmServerWriter {
                                 time_left_str,
                                 osm.getName() == null ? osm.getId() : osm.getName(),
                                         osm.getId()));
-                makeApiRequest(osm,progressMonitor);
+                makeApiRequest(osm, progressMonitor);
                 processed.add(osm);
                 progressMonitor.worked(1);
             }
-        } catch(OsmTransferException e) {
+        } catch (OsmTransferException e) {
             throw e;
-        } catch(Exception e) {
+        } catch (Exception e) {
             throw new OsmTransferException(e);
         } finally {
             progressMonitor.finishTask();
@@ -126,11 +127,12 @@ public class OsmServerWriter {
      * @param progressMonitor  the progress monitor
      * @throws OsmTransferException if an exception occurs
      */
-    protected void uploadChangesAsDiffUpload(Collection<? extends OsmPrimitive> primitives, ProgressMonitor progressMonitor) throws OsmTransferException {
+    protected void uploadChangesAsDiffUpload(Collection<? extends OsmPrimitive> primitives, ProgressMonitor progressMonitor)
+            throws OsmTransferException {
         try {
             progressMonitor.beginTask(tr("Starting to upload in one request ..."));
             processed.addAll(api.uploadDiff(primitives, progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false)));
-        } catch(OsmTransferException e) {
+        } catch (OsmTransferException e) {
             throw e;
         } finally {
             progressMonitor.finishTask();
@@ -146,21 +148,22 @@ public class OsmServerWriter {
      * @throws IllegalArgumentException if chunkSize <= 0
      * @throws OsmTransferException if an exception occurs
      */
-    protected void uploadChangesInChunks(Collection<? extends OsmPrimitive> primitives, ProgressMonitor progressMonitor, int chunkSize) throws OsmTransferException, IllegalArgumentException {
-        if (chunkSize <=0)
+    protected void uploadChangesInChunks(Collection<? extends OsmPrimitive> primitives, ProgressMonitor progressMonitor, int chunkSize)
+            throws OsmTransferException, IllegalArgumentException {
+        if (chunkSize <= 0)
             throw new IllegalArgumentException(tr("Value >0 expected for parameter ''{0}'', got {1}", "chunkSize", chunkSize));
         try {
             progressMonitor.beginTask(tr("Starting to upload in chunks..."));
             List<OsmPrimitive> chunk = new ArrayList<>(chunkSize);
             Iterator<? extends OsmPrimitive> it = primitives.iterator();
-            int numChunks = (int)Math.ceil((double)primitives.size() / (double)chunkSize);
-            int i= 0;
-            while(it.hasNext()) {
+            int numChunks = (int) Math.ceil((double) primitives.size() / (double) chunkSize);
+            int i = 0;
+            while (it.hasNext()) {
                 i++;
                 if (canceled) return;
                 int j = 0;
                 chunk.clear();
-                while(it.hasNext() && j < chunkSize) {
+                while (it.hasNext() && j < chunkSize) {
                     if (canceled) return;
                     j++;
                     chunk.add(it.next());
@@ -171,7 +174,7 @@ public class OsmServerWriter {
                                 chunk.size(), i, numChunks, chunk.size()));
                 processed.addAll(api.uploadDiff(chunk, progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false)));
             }
-        } catch(OsmTransferException e) {
+        } catch (OsmTransferException e) {
             throw e;
         } finally {
             progressMonitor.finishTask();
@@ -189,7 +192,8 @@ public class OsmServerWriter {
      * @throws IllegalArgumentException if strategy is null
      * @throws OsmTransferException if something goes wrong
      */
-    public void uploadOsm(UploadStrategySpecification strategy, Collection<? extends OsmPrimitive> primitives, Changeset changeset, ProgressMonitor monitor) throws OsmTransferException {
+    public void uploadOsm(UploadStrategySpecification strategy, Collection<? extends OsmPrimitive> primitives,
+            Changeset changeset, ProgressMonitor monitor) throws OsmTransferException {
         CheckParameterUtil.ensureParameterNotNull(changeset, "changeset");
         processed = new LinkedList<>();
         monitor = monitor == null ? NullProgressMonitor.INSTANCE : monitor;
@@ -198,23 +202,23 @@ public class OsmServerWriter {
             api.initialize(monitor);
             // check whether we can use diff upload
             if (changeset.getId() == 0) {
-                api.openChangeset(changeset,monitor.createSubTaskMonitor(0, false));
+                api.openChangeset(changeset, monitor.createSubTaskMonitor(0, false));
             } else {
-                api.updateChangeset(changeset,monitor.createSubTaskMonitor(0, false));
+                api.updateChangeset(changeset, monitor.createSubTaskMonitor(0, false));
             }
             api.setChangeset(changeset);
             switch(strategy.getStrategy()) {
             case SINGLE_REQUEST_STRATEGY:
-                uploadChangesAsDiffUpload(primitives,monitor.createSubTaskMonitor(0,false));
+                uploadChangesAsDiffUpload(primitives, monitor.createSubTaskMonitor(0, false));
                 break;
             case INDIVIDUAL_OBJECTS_STRATEGY:
-                uploadChangesIndividually(primitives,monitor.createSubTaskMonitor(0,false));
+                uploadChangesIndividually(primitives, monitor.createSubTaskMonitor(0, false));
                 break;
             case CHUNKED_DATASET_STRATEGY:
-                uploadChangesInChunks(primitives,monitor.createSubTaskMonitor(0,false), strategy.getChunkSize());
+                uploadChangesInChunks(primitives, monitor.createSubTaskMonitor(0, false), strategy.getChunkSize());
                 break;
             }
-        } catch(OsmTransferException e) {
+        } catch (OsmTransferException e) {
             throw e;
         } finally {
             executePostprocessors(monitor);
diff --git a/src/org/openstreetmap/josm/io/OsmTransferCanceledException.java b/src/org/openstreetmap/josm/io/OsmTransferCanceledException.java
index 58f89c2..a843e62 100644
--- a/src/org/openstreetmap/josm/io/OsmTransferCanceledException.java
+++ b/src/org/openstreetmap/josm/io/OsmTransferCanceledException.java
@@ -7,10 +7,12 @@ package org.openstreetmap.josm.io;
 public class OsmTransferCanceledException extends OsmTransferException {
 
     /**
-     * Constructs a new {@code OsmTransferCanceledException}, without root cause.
+     * Constructs a new {@code OsmTransferCanceledException}, without message.
+     * @param message The detail message (which is saved for later retrieval by the {@link #getMessage} method)
+     * @since 8415
      */
-    public OsmTransferCanceledException() {
-
+    public OsmTransferCanceledException(String message) {
+        super(message);
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/io/OsmWriter.java b/src/org/openstreetmap/josm/io/OsmWriter.java
index 308d716..f5e598c 100644
--- a/src/org/openstreetmap/josm/io/OsmWriter.java
+++ b/src/org/openstreetmap/josm/io/OsmWriter.java
@@ -64,6 +64,7 @@ public class OsmWriter extends XmlWriter implements PrimitiveVisitor {
     public void setChangeset(Changeset cs) {
         this.changeset = cs;
     }
+
     public void setVersion(String v) {
         this.version = v;
     }
@@ -89,7 +90,7 @@ public class OsmWriter extends XmlWriter implements PrimitiveVisitor {
 
     protected static final Comparator<OsmPrimitive> byIdComparator = new Comparator<OsmPrimitive>() {
         @Override public int compare(OsmPrimitive o1, OsmPrimitive o2) {
-            return (o1.getUniqueId()<o2.getUniqueId() ? -1 : (o1.getUniqueId()==o2.getUniqueId() ? 0 : 1));
+            return o1.getUniqueId() < o2.getUniqueId() ? -1 : (o1.getUniqueId() == o2.getUniqueId() ? 0 : 1);
         }
     };
 
@@ -197,7 +198,7 @@ public class OsmWriter extends XmlWriter implements PrimitiveVisitor {
             out.println("/>");
         } else {
             out.println(">");
-            for (int i=0; i<w.getNodesCount(); ++i) {
+            for (int i = 0; i < w.getNodesCount(); ++i) {
                 out.println("    <nd ref='"+w.getNodeId(i) +"' />");
             }
             addTags(w, "way", false);
@@ -212,7 +213,7 @@ public class OsmWriter extends XmlWriter implements PrimitiveVisitor {
             out.println("/>");
         } else {
             out.println(">");
-            for (int i=0; i<e.getMembersCount(); ++i) {
+            for (int i = 0; i < e.getMembersCount(); ++i) {
                 out.print("    <member type='");
                 out.print(e.getMemberType(i).getAPIName());
                 out.println("' ref='"+e.getMemberId(i)+"' role='" +
@@ -248,8 +249,9 @@ public class OsmWriter extends XmlWriter implements PrimitiveVisitor {
         addTags(cs, "changeset", false); // also writes closing </changeset>
     }
 
-    protected static final Comparator<Entry<String, String>> byKeyComparator = new Comparator<Entry<String,String>>() {
-        @Override public int compare(Entry<String, String> o1, Entry<String, String> o2) {
+    protected static final Comparator<Entry<String, String>> byKeyComparator = new Comparator<Entry<String, String>>() {
+        @Override
+        public int compare(Entry<String, String> o1, Entry<String, String> o2) {
             return o1.getKey().compareTo(o2.getKey());
         }
     };
@@ -296,11 +298,11 @@ public class OsmWriter extends XmlWriter implements PrimitiveVisitor {
                 }
             }
             if (!osm.isTimestampEmpty()) {
-                out.print(" timestamp='"+DateUtils.fromDate(osm.getTimestamp())+"'");
+                out.print(" timestamp='"+DateUtils.fromTimestamp(osm.getRawTimestamp())+"'");
             }
             // user and visible added with 0.4 API
             if (osm.getUser() != null) {
-                if(osm.getUser().isLocalUser()) {
+                if (osm.getUser().isLocalUser()) {
                     out.print(" user='"+XmlWriter.encode(osm.getUser().getName())+"'");
                 } else if (osm.getUser().isOsmUser()) {
                     // uid added with 0.6
@@ -314,9 +316,9 @@ public class OsmWriter extends XmlWriter implements PrimitiveVisitor {
             out.print(" version='"+osm.getVersion()+"'");
         }
         if (this.changeset != null && this.changeset.getId() != 0) {
-            out.print(" changeset='"+this.changeset.getId()+"'" );
+            out.print(" changeset='"+this.changeset.getId()+"'");
         } else if (osm.getChangesetId() > 0 && !osm.isNew()) {
-            out.print(" changeset='"+osm.getChangesetId()+"'" );
+            out.print(" changeset='"+osm.getChangesetId()+"'");
         }
     }
 }
diff --git a/src/org/openstreetmap/josm/io/OsmWriterFactory.java b/src/org/openstreetmap/josm/io/OsmWriterFactory.java
index 164b1cc..3dad553 100644
--- a/src/org/openstreetmap/josm/io/OsmWriterFactory.java
+++ b/src/org/openstreetmap/josm/io/OsmWriterFactory.java
@@ -26,6 +26,7 @@ public class OsmWriterFactory {
         }
         return theFactory.createOsmWriterImpl(out, osmConform, version);
     }
+
     protected OsmWriter createOsmWriterImpl(PrintWriter out, boolean osmConform, String version) {
         return new OsmWriter(out, osmConform, version);
     }
diff --git a/src/org/openstreetmap/josm/io/OverpassDownloadReader.java b/src/org/openstreetmap/josm/io/OverpassDownloadReader.java
new file mode 100644
index 0000000..3812e08
--- /dev/null
+++ b/src/org/openstreetmap/josm/io/OverpassDownloadReader.java
@@ -0,0 +1,153 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.io;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.io.InputStream;
+
+import javax.xml.stream.XMLStreamConstants;
+import javax.xml.stream.XMLStreamException;
+
+import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.DataSource;
+import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.gui.progress.ProgressMonitor;
+import org.openstreetmap.josm.tools.Utils;
+
+/**
+ * Read content from an Overpass server.
+ *
+ * @since 8744
+ */
+public class OverpassDownloadReader extends BoundingBoxDownloader {
+
+    final String overpassServer;
+    final String overpassQuery;
+
+    /**
+     * Constructs a new {@code OverpassDownloadReader}.
+     *
+     * @param downloadArea   The area to download
+     * @param overpassServer The Overpass server to use
+     * @param overpassQuery  The Overpass query
+     */
+    public OverpassDownloadReader(Bounds downloadArea, String overpassServer, String overpassQuery) {
+        super(downloadArea);
+        this.overpassServer = overpassServer;
+        this.overpassQuery = overpassQuery.trim();
+    }
+
+    @Override
+    protected String getBaseUrl() {
+        return overpassServer;
+    }
+
+    @Override
+    protected String getRequestForBbox(double lon1, double lat1, double lon2, double lat2) {
+        if (overpassQuery.isEmpty())
+            return super.getRequestForBbox(lon1, lat1, lon2, lat2);
+        else {
+            String realQuery = completeOverpassQuery(overpassQuery);
+            return "interpreter?data=" + Utils.encodeUrl(realQuery)
+                    + "&bbox=" + lon1 + "," + lat1 + "," + lon2 + "," + lat2;
+        }
+    }
+
+    private String completeOverpassQuery(String query) {
+        int firstColon = query.indexOf(";");
+        if (firstColon == -1) {
+            return "[bbox];" + query;
+        }
+        int bboxPos = query.indexOf("[bbox");
+        if (bboxPos > -1 && bboxPos < firstColon) {
+            return query;
+        }
+
+        int bracketCount = 0;
+        int pos = 0;
+        for (; pos < firstColon; ++pos) {
+            if (query.charAt(pos) == '[')
+                ++bracketCount;
+            else if (query.charAt(pos) == '[')
+                --bracketCount;
+            else if (bracketCount == 0) {
+                if (!Character.isWhitespace(query.charAt(pos)))
+                    break;
+            }
+        }
+
+        if (pos < firstColon) {
+            // We start with a statement, not with declarations
+            return "[bbox];" + query;
+        }
+
+        // We start with declarations. Add just one more declaration in this case.
+        return "[bbox]" + query;
+    }
+
+    @Override
+    protected InputStream getInputStreamRaw(String urlStr, ProgressMonitor progressMonitor, String reason,
+                                            boolean uncompressAccordingToContentDisposition) throws OsmTransferException {
+        try {
+            return super.getInputStreamRaw(urlStr, progressMonitor, reason, uncompressAccordingToContentDisposition);
+        } catch (OsmApiException ex) {
+            final String errorIndicator = "Error</strong>: ";
+            if (ex.getMessage() != null && ex.getMessage().contains(errorIndicator)) {
+                final String errorPlusRest = ex.getMessage().split(errorIndicator)[1];
+                if (errorPlusRest != null) {
+                    final String error = errorPlusRest.split("</")[0];
+                    ex.setErrorHeader(error);
+                }
+            }
+            throw ex;
+        }
+    }
+
+    @Override
+    protected String getTaskName() {
+        return tr("Contacting Server...");
+    }
+
+    @Override
+    protected DataSet parseDataSet(InputStream source, ProgressMonitor progressMonitor) throws IllegalDataException {
+        return new OsmReader() {
+            @Override
+            protected void parseUnknown(boolean printWarning) throws XMLStreamException {
+                if ("remark".equals(parser.getLocalName())) {
+                    if (parser.getEventType() == XMLStreamConstants.START_ELEMENT) {
+                        final String text = parser.getElementText();
+                        if (text.contains("runtime error")) {
+                            throw new XMLStreamException(text);
+                        }
+                    }
+                }
+                super.parseUnknown(printWarning);
+            }
+        }.doParseDataSet(source, progressMonitor);
+    }
+
+    @Override
+    public DataSet parseOsm(ProgressMonitor progressMonitor) throws OsmTransferException {
+
+        DataSet ds = super.parseOsm(progressMonitor);
+
+        // add bounds if necessary (note that Overpass API does not return bounds in the response XML)
+        if (ds != null && ds.dataSources.isEmpty()) {
+            if (crosses180th) {
+                Bounds bounds = new Bounds(lat1, lon1, lat2, 180.0);
+                DataSource src = new DataSource(bounds, getBaseUrl());
+                ds.dataSources.add(src);
+
+                bounds = new Bounds(lat1, -180.0, lat2, lon2);
+                src = new DataSource(bounds, getBaseUrl());
+                ds.dataSources.add(src);
+            } else {
+                Bounds bounds = new Bounds(lat1, lon1, lat2, lon2);
+                DataSource src = new DataSource(bounds, getBaseUrl());
+                ds.dataSources.add(src);
+            }
+        }
+
+        return ds;
+    }
+}
diff --git a/src/org/openstreetmap/josm/io/ProgressInputStream.java b/src/org/openstreetmap/josm/io/ProgressInputStream.java
index 580146b..9cae718 100644
--- a/src/org/openstreetmap/josm/io/ProgressInputStream.java
+++ b/src/org/openstreetmap/josm/io/ProgressInputStream.java
@@ -37,7 +37,7 @@ public class ProgressInputStream extends InputStream {
         } catch (IOException e) {
             progressMonitor.finishTask();
             if (con.getHeaderField("Error") != null)
-                throw new OsmTransferException(tr(con.getHeaderField("Error")));
+                throw new OsmTransferException(tr(con.getHeaderField("Error")), e);
             throw new OsmTransferException(e);
         }
 
@@ -77,7 +77,7 @@ public class ProgressInputStream extends InputStream {
 
     /**
      * Increase ticker (progress counter and displayed text) by the given amount.
-     * @param amount
+     * @param amount number of ticks
      */
     private void advanceTicker(int amount) {
         readSoFar += amount;
diff --git a/src/org/openstreetmap/josm/io/UTFInputStreamReader.java b/src/org/openstreetmap/josm/io/UTFInputStreamReader.java
index 24727c1..6473176 100644
--- a/src/org/openstreetmap/josm/io/UTFInputStreamReader.java
+++ b/src/org/openstreetmap/josm/io/UTFInputStreamReader.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.io;
 
 import java.io.IOException;
@@ -53,7 +53,7 @@ public final class UTFInputStreamReader extends InputStreamReader {
         }
 
         if (unread > 0) {
-            pushbackStream.unread(bom, (n - unread), unread);
+            pushbackStream.unread(bom, n - unread, unread);
         } else if (unread < -1) {
             pushbackStream.unread(bom, 0, 0);
         }
@@ -68,6 +68,7 @@ public final class UTFInputStreamReader extends InputStreamReader {
     private UTFInputStreamReader(InputStream in) {
         super(in);
     }
+
     private UTFInputStreamReader(InputStream in, String cs) throws UnsupportedEncodingException {
         super(in, cs);
     }
diff --git a/src/org/openstreetmap/josm/io/WMSLayerExporter.java b/src/org/openstreetmap/josm/io/WMSLayerExporter.java
index 4c8b1ed..15e765a 100644
--- a/src/org/openstreetmap/josm/io/WMSLayerExporter.java
+++ b/src/org/openstreetmap/josm/io/WMSLayerExporter.java
@@ -6,8 +6,11 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.ObjectOutputStream;
 
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.Preferences;
+import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryPreferenceEntry;
+import org.openstreetmap.josm.gui.layer.AbstractTileSourceLayer;
 import org.openstreetmap.josm.gui.layer.Layer;
-import org.openstreetmap.josm.gui.layer.WMSLayer;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 
 /**
@@ -17,6 +20,9 @@ import org.openstreetmap.josm.tools.CheckParameterUtil;
  */
 public class WMSLayerExporter extends FileExporter {
 
+    /** Which version of the file we export */
+    public static final int CURRENT_FILE_VERSION = 6;
+
     /**
      * Constructs a new {@code WMSLayerExporter}
      */
@@ -28,15 +34,20 @@ public class WMSLayerExporter extends FileExporter {
     public void exportData(File file, Layer layer) throws IOException {
         CheckParameterUtil.ensureParameterNotNull(file, "file");
         CheckParameterUtil.ensureParameterNotNull(layer, "layer");
-        if (layer instanceof WMSLayer) {
+
+        if (layer instanceof AbstractTileSourceLayer) {
             try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file))) {
-                ((WMSLayer)layer).writeExternal(oos);
+                oos.writeInt(CURRENT_FILE_VERSION); // file version
+                oos.writeObject(Main.map.mapView.getCenter());
+                ImageryPreferenceEntry entry = new ImageryPreferenceEntry(((AbstractTileSourceLayer) layer).getInfo());
+                oos.writeObject(Preferences.serializeStruct(entry, ImageryPreferenceEntry.class));
             }
         }
+
     }
 
     @Override
     public void activeLayerChange(Layer oldLayer, Layer newLayer) {
-        setEnabled(newLayer instanceof WMSLayer);
+        setEnabled(newLayer instanceof AbstractTileSourceLayer);
     }
 }
diff --git a/src/org/openstreetmap/josm/io/WMSLayerImporter.java b/src/org/openstreetmap/josm/io/WMSLayerImporter.java
index ea1daa3..097406a 100644
--- a/src/org/openstreetmap/josm/io/WMSLayerImporter.java
+++ b/src/org/openstreetmap/josm/io/WMSLayerImporter.java
@@ -6,11 +6,17 @@ import static org.openstreetmap.josm.tools.I18n.tr;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
+import java.io.InvalidClassException;
 import java.io.ObjectInputStream;
+import java.util.Map;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.ExtensionFileFilter;
-import org.openstreetmap.josm.gui.layer.WMSLayer;
+import org.openstreetmap.josm.data.Preferences;
+import org.openstreetmap.josm.data.coor.EastNorth;
+import org.openstreetmap.josm.data.imagery.ImageryInfo;
+import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryPreferenceEntry;
+import org.openstreetmap.josm.gui.layer.ImageryLayer;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
@@ -27,49 +33,65 @@ public class WMSLayerImporter extends FileImporter {
     public static final ExtensionFileFilter FILE_FILTER = new ExtensionFileFilter(
             "wms", "wms", tr("WMS Files (*.wms)"));
 
-    private final WMSLayer wmsLayer;
-
     /**
      * Constructs a new {@code WMSLayerImporter}.
      */
     public WMSLayerImporter() {
-        this(new WMSLayer());
-    }
-
-    /**
-     * Constructs a new {@code WMSLayerImporter} that will import data to the specified WMS layer.
-     * @param wmsLayer The WMS layer.
-     */
-    public WMSLayerImporter(WMSLayer wmsLayer) {
         super(FILE_FILTER);
-        this.wmsLayer = wmsLayer;
     }
 
     @Override
     public void importData(File file, ProgressMonitor progressMonitor) throws IOException, IllegalDataException {
         CheckParameterUtil.ensureParameterNotNull(file, "file");
+        final EastNorth zoomTo;
+        ImageryInfo info = null;
+        final ImageryLayer layer;
+
         try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file))) {
-            wmsLayer.readExternal(ois);
+            int sfv = ois.readInt();
+            if (sfv < 5) {
+                throw new InvalidClassException(tr("Unsupported WMS file version; found {0}, expected {1}", sfv, 5));
+            } else if (sfv == 5) {
+                ois.readInt(); // dax - not needed
+                ois.readInt(); // day - not needed
+                zoomTo = null;
+
+                int imageSize = ois.readInt();
+                double pixelPerDegree = ois.readDouble();
+
+                String name = (String) ois.readObject();
+                String extendedUrl = (String) ois.readObject();
+
+                info = new ImageryInfo(name);
+                info.setExtendedUrl(extendedUrl);
+                info.setPixelPerDegree(pixelPerDegree);
+                info.setTileSize(imageSize);
+            } else if (sfv == WMSLayerExporter.CURRENT_FILE_VERSION) {
+                zoomTo = (EastNorth) ois.readObject();
+
+                @SuppressWarnings("unchecked")
+                ImageryPreferenceEntry entry = Preferences.deserializeStruct(
+                        (Map<String, String>) ois.readObject(),
+                        ImageryPreferenceEntry.class);
+                info = new ImageryInfo(entry);
+            } else {
+                throw new InvalidClassException(tr("Unsupported WMS file version; found {0}, expected {1}", sfv, 6));
+            }
         } catch (ClassNotFoundException e) {
             throw new IllegalDataException(e);
         }
+        layer = ImageryLayer.create(info);
+
 
         // FIXME: remove UI stuff from IO subsystem
         GuiHelper.runInEDT(new Runnable() {
             @Override
             public void run() {
-                Main.main.addLayer(wmsLayer);
-                wmsLayer.onPostLoadFromFile();
+                Main.main.addLayer(layer);
+                if (zoomTo != null) {
+                    Main.map.mapView.zoomTo(zoomTo);
+                }
             }
         });
     }
-
-    /**
-     * Replies the imported WMS layer.
-     * @return The imported WMS layer.
-     * @see #importData(File, ProgressMonitor)
-     */
-    public final WMSLayer getWmsLayer() {
-        return wmsLayer;
-    }
 }
diff --git a/src/org/openstreetmap/josm/io/XmlWriter.java b/src/org/openstreetmap/josm/io/XmlWriter.java
index dd91a60..033cf9e 100644
--- a/src/org/openstreetmap/josm/io/XmlWriter.java
+++ b/src/org/openstreetmap/josm/io/XmlWriter.java
@@ -52,7 +52,7 @@ public class XmlWriter implements Closeable {
             }
             if (encS != null) {
                 if (buffer == null) {
-                    buffer = new StringBuilder(unencoded.substring(0,i));
+                    buffer = new StringBuilder(unencoded.substring(0, i));
                 }
                 buffer.append(encS);
             } else if (buffer != null) {
diff --git a/src/org/openstreetmap/josm/io/auth/AbstractCredentialsAgent.java b/src/org/openstreetmap/josm/io/auth/AbstractCredentialsAgent.java
index ad8ce05..1dc676f 100644
--- a/src/org/openstreetmap/josm/io/auth/AbstractCredentialsAgent.java
+++ b/src/org/openstreetmap/josm/io/auth/AbstractCredentialsAgent.java
@@ -4,7 +4,7 @@ package org.openstreetmap.josm.io.auth;
 import java.awt.GraphicsEnvironment;
 import java.net.Authenticator.RequestorType;
 import java.net.PasswordAuthentication;
-import java.util.HashMap;
+import java.util.EnumMap;
 import java.util.Map;
 
 import org.openstreetmap.josm.gui.io.CredentialDialog;
@@ -12,7 +12,7 @@ import org.openstreetmap.josm.gui.util.GuiHelper;
 
 public abstract class AbstractCredentialsAgent implements CredentialsAgent {
 
-    protected Map<RequestorType, PasswordAuthentication> memoryCredentialsCache = new HashMap<>();
+    protected Map<RequestorType, PasswordAuthentication> memoryCredentialsCache = new EnumMap<>(RequestorType.class);
 
     @Override
     public CredentialsAgentResponse getCredentials(final RequestorType requestorType, final String host, boolean noSuccessWithLastResponse)
diff --git a/src/org/openstreetmap/josm/io/auth/CredentialsAgent.java b/src/org/openstreetmap/josm/io/auth/CredentialsAgent.java
index e576b1a..57c5eb5 100644
--- a/src/org/openstreetmap/josm/io/auth/CredentialsAgent.java
+++ b/src/org/openstreetmap/josm/io/auth/CredentialsAgent.java
@@ -52,7 +52,8 @@ public interface CredentialsAgent {
      * @throws CredentialsAgentException if a problem occurs in a implementation of this interface
 
      */
-    CredentialsAgentResponse getCredentials(RequestorType requestorType, String host, boolean noSuccessWithLastResponse) throws CredentialsAgentException;
+    CredentialsAgentResponse getCredentials(RequestorType requestorType, String host, boolean noSuccessWithLastResponse)
+            throws CredentialsAgentException;
 
     /**
      * Lookup the current OAuth Access Token to access the OSM server. Replies null, if no
diff --git a/src/org/openstreetmap/josm/io/auth/CredentialsAgentException.java b/src/org/openstreetmap/josm/io/auth/CredentialsAgentException.java
index 715762c..0816f1d 100644
--- a/src/org/openstreetmap/josm/io/auth/CredentialsAgentException.java
+++ b/src/org/openstreetmap/josm/io/auth/CredentialsAgentException.java
@@ -2,9 +2,29 @@
 package org.openstreetmap.josm.io.auth;
 
 public class CredentialsAgentException extends Exception {
-    public CredentialsAgentException() {super();}
-    public CredentialsAgentException(String message, Throwable cause) {super(message, cause);}
-    public CredentialsAgentException(String message) {super(message);}
-    public CredentialsAgentException(Throwable cause) {super(cause);}
 
+    /**
+     * Constructs a new {@code CredentialsAgentException}.
+     * @param message the detail message (which is saved for later retrieval by the {@link #getMessage()} method).
+     * @param cause the cause (which is saved for later retrieval by the {@link #getCause()} method).
+     */
+    public CredentialsAgentException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    /**
+     * Constructs a new {@code CredentialsAgentException}.
+     * @param message the detail message (which is saved for later retrieval by the {@link #getMessage()} method).
+     */
+    public CredentialsAgentException(String message) {
+        super(message);
+    }
+
+    /**
+     * Constructs a new {@code CredentialsAgentException}.
+     * @param cause the cause (which is saved for later retrieval by the {@link #getCause()} method).
+     */
+    public CredentialsAgentException(Throwable cause) {
+        super(cause);
+    }
 }
diff --git a/src/org/openstreetmap/josm/io/auth/CredentialsAgentResponse.java b/src/org/openstreetmap/josm/io/auth/CredentialsAgentResponse.java
index 9bb18ff..ba693d2 100644
--- a/src/org/openstreetmap/josm/io/auth/CredentialsAgentResponse.java
+++ b/src/org/openstreetmap/josm/io/auth/CredentialsAgentResponse.java
@@ -4,7 +4,8 @@ package org.openstreetmap.josm.io.auth;
 import org.openstreetmap.josm.tools.Utils;
 
 /**
- * CredentialsAgentResponse represents the response from {@link CredentialsAgent#getCredentials(java.net.Authenticator.RequestorType, String, boolean)}.
+ * CredentialsAgentResponse represents the response from
+ * {@link CredentialsAgent#getCredentials(java.net.Authenticator.RequestorType, String, boolean)}.
  *
  * The response consists of the username and the password the requested credentials consists of.
  * In addition, it provides information whether authentication was canceled by the user, i.e.
diff --git a/src/org/openstreetmap/josm/io/auth/CredentialsManager.java b/src/org/openstreetmap/josm/io/auth/CredentialsManager.java
index 927c670..a855489 100644
--- a/src/org/openstreetmap/josm/io/auth/CredentialsManager.java
+++ b/src/org/openstreetmap/josm/io/auth/CredentialsManager.java
@@ -76,7 +76,7 @@ public class CredentialsManager implements CredentialsAgent {
      * Returns type of credentials agent backing this credentials manager.
      * @return The type of credentials agent
      */
-    public final Class<? extends CredentialsAgent> getCredentialsAgentClass () {
+    public final Class<? extends CredentialsAgent> getCredentialsAgentClass() {
         return delegate.getClass();
     }
 
@@ -117,7 +117,7 @@ public class CredentialsManager implements CredentialsAgent {
     public void store(RequestorType requestorType, String host, PasswordAuthentication credentials) throws CredentialsAgentException {
         if (requestorType == RequestorType.SERVER && Objects.equals(OsmApi.getOsmApi().getHost(), host)) {
             String username = credentials.getUserName();
-            if(username != null && !username.trim().isEmpty()) {
+            if (username != null && !username.trim().isEmpty()) {
                 JosmUserIdentityManager.getInstance().setPartiallyIdentified(username);
             }
         }
@@ -125,7 +125,8 @@ public class CredentialsManager implements CredentialsAgent {
     }
 
     @Override
-    public CredentialsAgentResponse getCredentials(RequestorType requestorType, String host, boolean noSuccessWithLastResponse) throws CredentialsAgentException {
+    public CredentialsAgentResponse getCredentials(RequestorType requestorType, String host, boolean noSuccessWithLastResponse)
+            throws CredentialsAgentException {
         return delegate.getCredentials(requestorType, host, noSuccessWithLastResponse);
     }
 
diff --git a/src/org/openstreetmap/josm/io/auth/DefaultAuthenticator.java b/src/org/openstreetmap/josm/io/auth/DefaultAuthenticator.java
index 9e87b7c..7a22926 100644
--- a/src/org/openstreetmap/josm/io/auth/DefaultAuthenticator.java
+++ b/src/org/openstreetmap/josm/io/auth/DefaultAuthenticator.java
@@ -3,7 +3,7 @@ package org.openstreetmap.josm.io.auth;
 
 import java.net.Authenticator;
 import java.net.PasswordAuthentication;
-import java.util.HashMap;
+import java.util.EnumMap;
 import java.util.Map;
 
 import org.openstreetmap.josm.Main;
@@ -32,7 +32,7 @@ public final class DefaultAuthenticator extends Authenticator {
         instance = new DefaultAuthenticator();
     }
 
-    private final Map<RequestorType, Boolean> credentialsTried = new HashMap<>();
+    private final Map<RequestorType, Boolean> credentialsTried = new EnumMap<>(RequestorType.class);
     private boolean enabled = true;
 
     private DefaultAuthenticator() {
@@ -56,7 +56,7 @@ public final class DefaultAuthenticator extends Authenticator {
                 return null;
             credentialsTried.put(getRequestorType(), true);
             return new PasswordAuthentication(response.getUsername(), response.getPassword());
-        } catch(CredentialsAgentException e) {
+        } catch (CredentialsAgentException e) {
             Main.error(e);
             return null;
         }
diff --git a/src/org/openstreetmap/josm/io/auth/JosmPreferencesCredentialAgent.java b/src/org/openstreetmap/josm/io/auth/JosmPreferencesCredentialAgent.java
index ec8627d..f53aa16 100644
--- a/src/org/openstreetmap/josm/io/auth/JosmPreferencesCredentialAgent.java
+++ b/src/org/openstreetmap/josm/io/auth/JosmPreferencesCredentialAgent.java
@@ -27,7 +27,7 @@ public class JosmPreferencesCredentialAgent extends AbstractCredentialsAgent {
      * @see CredentialsAgent#lookup
      */
     @Override
-    public PasswordAuthentication lookup(RequestorType requestorType, String host) throws CredentialsAgentException{
+    public PasswordAuthentication lookup(RequestorType requestorType, String host) throws CredentialsAgentException {
         if (requestorType == null)
             return null;
         String user;
@@ -37,7 +37,7 @@ public class JosmPreferencesCredentialAgent extends AbstractCredentialsAgent {
             if (Objects.equals(OsmApi.getOsmApi().getHost(), host)) {
                 user = Main.pref.get("osm-server.username", null);
                 password = Main.pref.get("osm-server.password", null);
-            } else if(host != null) {
+            } else if (host != null) {
                 user = Main.pref.get("server.username."+host, null);
                 password = Main.pref.get("server.password."+host, null);
             } else {
@@ -73,7 +73,7 @@ public class JosmPreferencesCredentialAgent extends AbstractCredentialsAgent {
                 } else {
                     Main.pref.put("osm-server.password", String.valueOf(credentials.getPassword()));
                 }
-            } else if(host != null) {
+            } else if (host != null) {
                 Main.pref.put("server.username."+host, credentials.getUserName());
                 if (credentials.getPassword() == null) {
                     Main.pref.put("server.password."+host, null);
@@ -129,10 +129,11 @@ public class JosmPreferencesCredentialAgent extends AbstractCredentialsAgent {
     @Override
     public Component getPreferencesDecorationPanel() {
         HtmlPanel pnlMessage = new HtmlPanel();
-        HTMLEditorKit kit = (HTMLEditorKit)pnlMessage.getEditorPane().getEditorKit();
-        kit.getStyleSheet().addRule(".warning-body {background-color:rgb(253,255,221);padding: 10pt; border-color:rgb(128,128,128);border-style: solid;border-width: 1px;}");
-        pnlMessage.setText(
-                tr(
+        HTMLEditorKit kit = (HTMLEditorKit) pnlMessage.getEditorPane().getEditorKit();
+        kit.getStyleSheet().addRule(
+                ".warning-body {background-color:rgb(253,255,221);padding: 10pt; " +
+                "border-color:rgb(128,128,128);border-style: solid;border-width: 1px;}");
+        pnlMessage.setText(tr(
                         "<html><body>"
                         + "<p class=\"warning-body\">"
                         + "<strong>Warning:</strong> The password is stored in plain text in the JOSM preferences file. "
@@ -149,5 +150,4 @@ public class JosmPreferencesCredentialAgent extends AbstractCredentialsAgent {
     public String getSaveUsernameAndPasswordCheckboxText() {
         return tr("Save user and password (unencrypted)");
     }
-
 }
diff --git a/src/org/openstreetmap/josm/io/imagery/HTMLGrabber.java b/src/org/openstreetmap/josm/io/imagery/HTMLGrabber.java
deleted file mode 100644
index 591e8ef..0000000
--- a/src/org/openstreetmap/josm/io/imagery/HTMLGrabber.java
+++ /dev/null
@@ -1,58 +0,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.io.imagery;
-
-import java.awt.image.BufferedImage;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.net.URL;
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.StringTokenizer;
-
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.preferences.StringProperty;
-import org.openstreetmap.josm.gui.MapView;
-import org.openstreetmap.josm.gui.layer.WMSLayer;
-import org.openstreetmap.josm.tools.ImageProvider;
-import org.openstreetmap.josm.tools.Utils;
-
-public class HTMLGrabber extends WMSGrabber {
-    public static final StringProperty PROP_BROWSER = new StringProperty("imagery.wms.browser", "webkit-image {0}");
-
-    public HTMLGrabber(MapView mv, WMSLayer layer, boolean localOnly) {
-        super(mv, layer, localOnly);
-    }
-
-    @Override
-    protected BufferedImage grab(WMSRequest request, URL url, int attempt) throws IOException {
-        String urlstring = url.toExternalForm();
-
-        Main.info("Grabbing HTML " + (attempt > 1? "(attempt " + attempt + ") ":"") + url);
-
-        List<String> cmdParams = new ArrayList<>();
-        StringTokenizer st = new StringTokenizer(MessageFormat.format(PROP_BROWSER.get(), urlstring));
-        while (st.hasMoreTokens()) {
-            cmdParams.add(st.nextToken());
-        }
-
-        ProcessBuilder builder = new ProcessBuilder( cmdParams);
-
-        Process browser;
-        try {
-            browser = builder.start();
-        } catch (IOException ioe) {
-            throw new IOException("Could not start browser. Please check that the executable path is correct.\n" + ioe.getMessage(), ioe);
-        }
-
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        Utils.copyStream(browser.getInputStream(), baos);
-        ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
-        BufferedImage img = layer.normalizeImage(ImageProvider.read(bais, true, WMSLayer.PROP_ALPHA_CHANNEL.get()));
-        bais.reset();
-        layer.cache.saveToCache(layer.isOverlapEnabled()?img:null, bais, Main.getProjection(), request.getPixelPerDegree(), b.minEast, b.minNorth);
-
-        return img;
-    }
-}
diff --git a/src/org/openstreetmap/josm/io/imagery/ImageryReader.java b/src/org/openstreetmap/josm/io/imagery/ImageryReader.java
index 6978c5f..0bad592 100644
--- a/src/org/openstreetmap/josm/io/imagery/ImageryReader.java
+++ b/src/org/openstreetmap/josm/io/imagery/ImageryReader.java
@@ -5,7 +5,9 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 import java.util.Stack;
 
@@ -38,6 +40,8 @@ public class ImageryReader {
         CODE,
         BOUNDS,
         SHAPE,
+        NO_TILE,
+        METADATA,
         UNKNOWN,            // element is not recognized in the current context
     }
 
@@ -53,7 +57,7 @@ public class ImageryReader {
                     .setCachingStrategy(CachedFile.CachingStrategy.IfModifiedSince)
                     .getInputStream()) {
                 InputSource is = new InputSource(UTFInputStreamReader.create(in));
-                Utils.newSafeSAXParser().parse(is, parser);
+                Utils.parseSafeSAX(is, parser);
                 return parser.entries;
             }
         } catch (SAXException e) {
@@ -83,6 +87,8 @@ public class ImageryReader {
         // language of last element, does only work for simple ENTRY_ATTRIBUTE's
         private String lang;
         private List<String> projections;
+        private Map<String, String> noTileHeaders;
+        private Map<String, String> metadataHeaders;
 
         @Override
         public void startDocument() {
@@ -94,6 +100,7 @@ public class ImageryReader {
             entry = null;
             bounds = null;
             projections = null;
+            noTileHeaders = null;
         }
 
         @Override
@@ -111,6 +118,8 @@ public class ImageryReader {
                     entry = new ImageryInfo();
                     skipEntry = false;
                     newState = State.ENTRY;
+                    noTileHeaders = new HashMap<>();
+                    metadataHeaders = new HashMap<>();
                 }
                 break;
             case ENTRY:
@@ -132,6 +141,7 @@ public class ImageryReader {
                         "terms-of-use-url",
                         "country-code",
                         "icon",
+                        "tile-size",
                 }).contains(qName)) {
                     newState = State.ENTRY_ATTRIBUTE;
                     lang = atts.getValue("lang");
@@ -149,6 +159,12 @@ public class ImageryReader {
                 } else if ("projections".equals(qName)) {
                     projections = new ArrayList<>();
                     newState = State.PROJECTIONS;
+                } else if ("no-tile-header".equals(qName)) {
+                    noTileHeaders.put(atts.getValue("name"), atts.getValue("value"));
+                    newState = State.NO_TILE;
+                } else if ("metadata-header".equals(qName)) {
+                    metadataHeaders.put(atts.getValue("header-name"), atts.getValue("metadata-key"));
+                    newState = State.METADATA;
                 }
                 break;
             case BOUNDS:
@@ -185,7 +201,6 @@ public class ImageryReader {
             if (newState == State.UNKNOWN && "true".equals(atts.getValue("mandatory"))) {
                 skipEntry = true;
             }
-            return;
         }
 
         @Override
@@ -200,6 +215,11 @@ public class ImageryReader {
                 throw new RuntimeException("parsing error: more closing than opening elements");
             case ENTRY:
                 if ("entry".equals(qName)) {
+                    entry.setNoTileHeaders(noTileHeaders);
+                    noTileHeaders = null;
+                    entry.setMetadataHeaders(metadataHeaders);
+                    metadataHeaders = null;
+
                     if (!skipEntry) {
                         entries.add(entry);
                     }
@@ -252,8 +272,8 @@ public class ImageryReader {
                 case "max-zoom":
                     Integer val = null;
                     try {
-                        val = Integer.parseInt(accumulator.toString());
-                    } catch(NumberFormatException e) {
+                        val = Integer.valueOf(accumulator.toString());
+                    } catch (NumberFormatException e) {
                         val = null;
                     }
                     if (val == null) {
@@ -290,6 +310,19 @@ public class ImageryReader {
                 case "icon":
                     entry.setIcon(accumulator.toString());
                     break;
+                case "tile-size":
+                    Integer tileSize = null;
+                    try {
+                        tileSize = Integer.valueOf(accumulator.toString());
+                    } catch (NumberFormatException e) {
+                        tileSize = null;
+                    }
+                    if (tileSize == null) {
+                        skipEntry = true;
+                    } else {
+                        entry.setTileSize(tileSize.intValue());
+                    }
+                    break;
                 }
                 break;
             case BOUNDS:
@@ -307,6 +340,9 @@ public class ImageryReader {
                 entry.setServerProjections(projections);
                 projections = null;
                 break;
+            case NO_TILE:
+                break;
+
             }
         }
     }
diff --git a/src/org/openstreetmap/josm/io/imagery/WMSException.java b/src/org/openstreetmap/josm/io/imagery/WMSException.java
deleted file mode 100644
index 9018b12..0000000
--- a/src/org/openstreetmap/josm/io/imagery/WMSException.java
+++ /dev/null
@@ -1,59 +0,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.io.imagery;
-
-import java.net.URL;
-import java.util.Arrays;
-import java.util.Collection;
-
-import org.openstreetmap.josm.tools.Utils;
-
-/**
- * WMS Service Exception, as defined by {@code application/vnd.ogc.se_xml} format:<ul>
- * <li><a href="http://schemas.opengis.net/wms/1.1.0/exception_1_1_0.dtd">WMS 1.1.0 DTD</a></li>
- * <li><a href="http://schemas.opengis.net/wms/1.3.0/exception_1_3_0.dtd">WMS 1.3.0 XSD</a></li>
- * </ul>
- * @since 7425
- */
-public class WMSException extends Exception {
-
-    private final transient WMSRequest request;
-    private final URL url;
-    private final String[] exceptions;
-
-    /**
-     * Constructs a new {@code WMSException}.
-     * @param request the WMS request that lead to this exception
-     * @param url the URL that lead to this exception
-     * @param exceptions the exceptions replied by WMS server
-     */
-    public WMSException(WMSRequest request, URL url, Collection<String> exceptions) {
-        super(Utils.join("\n", exceptions));
-        this.request = request;
-        this.url = url;
-        this.exceptions = exceptions.toArray(new String[0]);
-    }
-
-    /**
-     * Replies the WMS request that lead to this exception.
-     * @return the WMS request
-     */
-    public final WMSRequest getRequest() {
-        return request;
-    }
-
-    /**
-     * Replies the URL that lead to this exception.
-     * @return the URL
-     */
-    public final URL getUrl() {
-        return url;
-    }
-
-    /**
-     * Replies the WMS Service exceptions.
-     * @return the exceptions
-     */
-    public final Collection<String> getExceptions() {
-        return Arrays.asList(exceptions);
-    }
-}
diff --git a/src/org/openstreetmap/josm/io/imagery/WMSGrabber.java b/src/org/openstreetmap/josm/io/imagery/WMSGrabber.java
deleted file mode 100644
index 2323bc2..0000000
--- a/src/org/openstreetmap/josm/io/imagery/WMSGrabber.java
+++ /dev/null
@@ -1,312 +0,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.io.imagery;
-
-import java.awt.image.BufferedImage;
-import java.io.BufferedReader;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.StringReader;
-import java.net.HttpURLConnection;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.nio.charset.StandardCharsets;
-import java.text.DecimalFormat;
-import java.text.DecimalFormatSymbols;
-import java.text.NumberFormat;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.ProjectionBounds;
-import org.openstreetmap.josm.data.coor.EastNorth;
-import org.openstreetmap.josm.data.coor.LatLon;
-import org.openstreetmap.josm.data.imagery.GeorefImage.State;
-import org.openstreetmap.josm.data.imagery.ImageryInfo;
-import org.openstreetmap.josm.gui.MapView;
-import org.openstreetmap.josm.gui.layer.WMSLayer;
-import org.openstreetmap.josm.io.OsmTransferException;
-import org.openstreetmap.josm.io.ProgressInputStream;
-import org.openstreetmap.josm.tools.ImageProvider;
-import org.openstreetmap.josm.tools.Utils;
-import org.w3c.dom.Document;
-import org.w3c.dom.NodeList;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-
-/**
- * WMS grabber, fetching tiles from WMS server.
- * @since 3715
- */
-public class WMSGrabber implements Runnable {
-
-    protected final MapView mv;
-    protected final WMSLayer layer;
-    private final boolean localOnly;
-
-    protected ProjectionBounds b;
-    protected volatile boolean canceled;
-
-    protected String baseURL;
-    private ImageryInfo info;
-    private Map<String, String> props = new HashMap<>();
-
-    /**
-     * Constructs a new {@code WMSGrabber}.
-     * @param mv Map view
-     * @param layer WMS layer
-     */
-    public WMSGrabber(MapView mv, WMSLayer layer, boolean localOnly) {
-        this.mv = mv;
-        this.layer = layer;
-        this.localOnly = localOnly;
-        this.info = layer.getInfo();
-        this.baseURL = info.getUrl();
-        if (layer.getInfo().getCookies() != null && !layer.getInfo().getCookies().isEmpty()) {
-            props.put("Cookie", layer.getInfo().getCookies());
-        }
-        Pattern pattern = Pattern.compile("\\{header\\(([^,]+),([^}]+)\\)\\}");
-        StringBuffer output = new StringBuffer();
-        Matcher matcher = pattern.matcher(this.baseURL);
-        while (matcher.find()) {
-            props.put(matcher.group(1),matcher.group(2));
-            matcher.appendReplacement(output, "");
-        }
-        matcher.appendTail(output);
-        this.baseURL = output.toString();
-    }
-
-    int width() {
-        return layer.getBaseImageWidth();
-    }
-
-    int height() {
-        return layer.getBaseImageHeight();
-    }
-
-    @Override
-    public void run() {
-        while (true) {
-            if (canceled)
-                return;
-            WMSRequest request = layer.getRequest(localOnly);
-            if (request == null)
-                return;
-            this.b = layer.getBounds(request);
-            if (request.isPrecacheOnly()) {
-                if (!layer.cache.hasExactMatch(Main.getProjection(), request.getPixelPerDegree(), b.minEast, b.minNorth)) {
-                    attempt(request);
-                } else if (Main.isDebugEnabled()) {
-                    Main.debug("Ignoring "+request+" (precache only + exact match)");
-                }
-            } else if (!loadFromCache(request)){
-                attempt(request);
-            } else if (Main.isDebugEnabled()) {
-                Main.debug("Ignoring "+request+" (loaded from cache)");
-            }
-            layer.finishRequest(request);
-        }
-    }
-
-    protected void attempt(WMSRequest request){ // try to fetch the image
-        int maxTries = 5; // n tries for every image
-        for (int i = 1; i <= maxTries; i++) {
-            if (canceled)
-                return;
-            try {
-                if (!request.isPrecacheOnly() && !layer.requestIsVisible(request))
-                    return;
-                fetch(request, i);
-                break; // break out of the retry loop
-            } catch (IOException e) {
-                try { // sleep some time and then ask the server again
-                    Thread.sleep(random(1000, 2000));
-                } catch (InterruptedException e1) {
-                    Main.debug("InterruptedException in "+getClass().getSimpleName()+" during WMS request");
-                }
-                if (i == maxTries) {
-                    Main.error(e);
-                    request.finish(State.FAILED, null, null);
-                }
-            } catch (WMSException e) {
-                // Fail fast in case of WMS Service exception: useless to retry:
-                // either the URL is wrong or the server suffers huge problems
-                Main.error("WMS service exception while requesting "+e.getUrl()+":\n"+e.getMessage().trim());
-                request.finish(State.FAILED, null, e);
-                break; // break out of the retry loop
-            }
-        }
-    }
-
-    public static int random(int min, int max) {
-        return (int)(Math.random() * ((max+1)-min) ) + min;
-    }
-
-    public final void cancel() {
-        canceled = true;
-    }
-
-    private void fetch(WMSRequest request, int attempt) throws IOException, WMSException {
-        URL url = null;
-        try {
-            url = getURL(
-                    b.minEast, b.minNorth,
-                    b.maxEast, b.maxNorth,
-                    width(), height());
-            request.finish(State.IMAGE, grab(request, url, attempt), null);
-
-        } catch (IOException | OsmTransferException e) {
-            Main.error(e);
-            throw new IOException(e.getMessage() + "\nImage couldn't be fetched: " + (url != null ? url.toString() : ""), e);
-        }
-    }
-
-    public static final NumberFormat latLonFormat = new DecimalFormat("###0.0000000", new DecimalFormatSymbols(Locale.US));
-
-    protected URL getURL(double w, double s,double e,double n,
-            int wi, int ht) throws MalformedURLException {
-        String myProj = Main.getProjection().toCode();
-        if (!info.getServerProjections().contains(myProj) && "EPSG:3857".equals(Main.getProjection().toCode())) {
-            LatLon sw = Main.getProjection().eastNorth2latlon(new EastNorth(w, s));
-            LatLon ne = Main.getProjection().eastNorth2latlon(new EastNorth(e, n));
-            myProj = "EPSG:4326";
-            s = sw.lat();
-            w = sw.lon();
-            n = ne.lat();
-            e = ne.lon();
-        }
-        if ("EPSG:4326".equals(myProj) && !info.getServerProjections().contains(myProj) && info.getServerProjections().contains("CRS:84")) {
-            myProj = "CRS:84";
-        }
-
-        // Bounding box coordinates have to be switched for WMS 1.3.0 EPSG:4326.
-        //
-        // Background:
-        //
-        // bbox=x_min,y_min,x_max,y_max
-        //
-        //      SRS=... is WMS 1.1.1
-        //      CRS=... is WMS 1.3.0
-        //
-        // The difference:
-        //      For SRS x is east-west and y is north-south
-        //      For CRS x and y are as specified by the EPSG
-        //          E.g. [1] lists lat as first coordinate axis and lot as second, so it is switched for EPSG:4326.
-        //          For most other EPSG code there seems to be no difference.
-        // [1] https://www.epsg-registry.org/report.htm?type=selection&entity=urn:ogc:def:crs:EPSG::4326&reportDetail=short&style=urn:uuid:report-style:default-with-code&style_name=OGP%20Default%20With%20Code&title=EPSG:4326
-        boolean switchLatLon = false;
-        if (baseURL.toLowerCase().contains("crs=epsg:4326")) {
-            switchLatLon = true;
-        } else if (baseURL.toLowerCase().contains("crs=") && "EPSG:4326".equals(myProj)) {
-            switchLatLon = true;
-        }
-        String bbox;
-        if (switchLatLon) {
-            bbox = String.format("%s,%s,%s,%s", latLonFormat.format(s), latLonFormat.format(w), latLonFormat.format(n), latLonFormat.format(e));
-        } else {
-            bbox = String.format("%s,%s,%s,%s", latLonFormat.format(w), latLonFormat.format(s), latLonFormat.format(e), latLonFormat.format(n));
-        }
-        return new URL(baseURL.replaceAll("\\{proj(\\([^})]+\\))?\\}", myProj)
-                .replaceAll("\\{bbox\\}", bbox)
-                .replaceAll("\\{w\\}", latLonFormat.format(w))
-                .replaceAll("\\{s\\}", latLonFormat.format(s))
-                .replaceAll("\\{e\\}", latLonFormat.format(e))
-                .replaceAll("\\{n\\}", latLonFormat.format(n))
-                .replaceAll("\\{width\\}", String.valueOf(wi))
-                .replaceAll("\\{height\\}", String.valueOf(ht))
-                .replace(" ", "%20"));
-    }
-
-    public boolean loadFromCache(WMSRequest request) {
-        BufferedImage cached = layer.cache.getExactMatch(
-                Main.getProjection(), request.getPixelPerDegree(), b.minEast, b.minNorth);
-
-        if (cached != null) {
-            request.finish(State.IMAGE, cached, null);
-            return true;
-        } else if (request.isAllowPartialCacheMatch()) {
-            BufferedImage partialMatch = layer.cache.getPartialMatch(
-                    Main.getProjection(), request.getPixelPerDegree(), b.minEast, b.minNorth);
-            if (partialMatch != null) {
-                request.finish(State.PARTLY_IN_CACHE, partialMatch, null);
-                return true;
-            }
-        }
-
-        if ((!request.isReal() && !layer.hasAutoDownload())){
-            request.finish(State.NOT_IN_CACHE, null, null);
-            return true;
-        }
-
-        return false;
-    }
-
-    protected BufferedImage grab(WMSRequest request, URL url, int attempt) throws WMSException, IOException, OsmTransferException {
-        Main.info("Grabbing WMS " + (attempt > 1? "(attempt " + attempt + ") ":"") + url);
-
-        HttpURLConnection conn = Utils.openHttpConnection(url);
-        conn.setUseCaches(true);
-        for (Entry<String, String> e : props.entrySet()) {
-            conn.setRequestProperty(e.getKey(), e.getValue());
-        }
-        conn.setConnectTimeout(Main.pref.getInteger("socket.timeout.connect",15) * 1000);
-        conn.setReadTimeout(Main.pref.getInteger("socket.timeout.read", 30) * 1000);
-
-        String contentType = conn.getHeaderField("Content-Type");
-        if (conn.getResponseCode() != 200
-                || contentType != null && !contentType.startsWith("image") ) {
-            String xml = readException(conn);
-            try {
-                DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
-                InputSource is = new InputSource(new StringReader(xml));
-                Document doc = db.parse(is);
-                NodeList nodes = doc.getElementsByTagName("ServiceException");
-                List<String> exceptions = new ArrayList<>(nodes.getLength());
-                for (int i = 0; i < nodes.getLength(); i++) {
-                    exceptions.add(nodes.item(i).getTextContent());
-                }
-                throw new WMSException(request, url, exceptions);
-            } catch (SAXException | ParserConfigurationException ex) {
-                throw new IOException(xml, ex);
-            }
-        }
-
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        try (InputStream is = new ProgressInputStream(conn, null)) {
-            Utils.copyStream(is, baos);
-        }
-
-        ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
-        BufferedImage img = layer.normalizeImage(ImageProvider.read(bais, true, WMSLayer.PROP_ALPHA_CHANNEL.get()));
-        bais.reset();
-        layer.cache.saveToCache(layer.isOverlapEnabled()?img:null, bais, Main.getProjection(), request.getPixelPerDegree(), b.minEast, b.minNorth);
-        return img;
-    }
-
-    protected String readException(URLConnection conn) throws IOException {
-        StringBuilder exception = new StringBuilder();
-        InputStream in = conn.getInputStream();
-        try (BufferedReader br = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8))) {
-            String line = null;
-            while( (line = br.readLine()) != null) {
-                // filter non-ASCII characters and control characters
-                exception.append(line.replaceAll("[^\\p{Print}]", ""));
-                exception.append('\n');
-            }
-            return exception.toString();
-        }
-    }
-}
diff --git a/src/org/openstreetmap/josm/io/imagery/WMSImagery.java b/src/org/openstreetmap/josm/io/imagery/WMSImagery.java
index 134c603..4108765 100644
--- a/src/org/openstreetmap/josm/io/imagery/WMSImagery.java
+++ b/src/org/openstreetmap/josm/io/imagery/WMSImagery.java
@@ -14,6 +14,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Locale;
 import java.util.Set;
 import java.util.regex.Pattern;
 
@@ -80,18 +81,15 @@ public class WMSImagery {
             return null;
         }
         StringBuilder a = new StringBuilder(serviceUrl.getProtocol());
-        a.append("://");
-        a.append(serviceUrl.getHost());
+        a.append("://").append(serviceUrl.getHost());
         if (serviceUrl.getPort() != -1) {
-            a.append(":");
-            a.append(serviceUrl.getPort());
+            a.append(':').append(serviceUrl.getPort());
         }
-        a.append(serviceUrl.getPath());
-        a.append("?");
+        a.append(serviceUrl.getPath()).append('?');
         if (serviceUrl.getQuery() != null) {
             a.append(serviceUrl.getQuery());
             if (!serviceUrl.getQuery().isEmpty() && !serviceUrl.getQuery().endsWith("&")) {
-                a.append("&");
+                a.append('&');
             }
         }
         return a.toString();
@@ -138,8 +136,8 @@ public class WMSImagery {
             return;
         }
 
-        Main.info("GET " + getCapabilitiesUrl.toString());
-        URLConnection openConnection = Utils.openHttpConnection(getCapabilitiesUrl);
+        Main.info("GET " + getCapabilitiesUrl);
+        URLConnection openConnection = Utils.openHttpConnection(getCapabilitiesUrl, false, true);
         StringBuilder ba = new StringBuilder();
 
         try (
@@ -149,7 +147,7 @@ public class WMSImagery {
             String line;
             while ((line = br.readLine()) != null) {
                 ba.append(line);
-                ba.append("\n");
+                ba.append('\n');
             }
         }
         String incomingData = ba.toString();
@@ -218,7 +216,8 @@ public class WMSImagery {
 
     static boolean isImageFormatSupported(final String format) {
         return ImageIO.getImageReadersByMIMEType(format).hasNext()
-                || (format.startsWith("image/tiff") || format.startsWith("image/geotiff")) && ImageIO.getImageReadersBySuffix("tiff").hasNext() // handles image/tiff image/tiff8 image/geotiff image/geotiff8
+                // handles image/tiff image/tiff8 image/geotiff image/geotiff8
+                || (format.startsWith("image/tiff") || format.startsWith("image/geotiff")) && ImageIO.getImageReadersBySuffix("tiff").hasNext()
                 || format.startsWith("image/png") && ImageIO.getImageReadersBySuffix("png").hasNext()
                 || format.startsWith("image/svg") && ImageIO.getImageReadersBySuffix("svg").hasNext()
                 || format.startsWith("image/bmp") && ImageIO.getImageReadersBySuffix("bmp").hasNext();
@@ -265,7 +264,7 @@ public class WMSImagery {
         for (Element child : crsChildren) {
             String crs = (String) getContent(child);
             if (!crs.isEmpty()) {
-                String upperCase = crs.trim().toUpperCase();
+                String upperCase = crs.trim().toUpperCase(Locale.ENGLISH);
                 crsList.add(upperCase);
             }
         }
diff --git a/src/org/openstreetmap/josm/io/imagery/WMSRequest.java b/src/org/openstreetmap/josm/io/imagery/WMSRequest.java
deleted file mode 100644
index db25eb1..0000000
--- a/src/org/openstreetmap/josm/io/imagery/WMSRequest.java
+++ /dev/null
@@ -1,154 +0,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.io.imagery;
-
-import java.awt.image.BufferedImage;
-
-import org.openstreetmap.josm.data.imagery.GeorefImage.State;
-import org.openstreetmap.josm.gui.layer.WMSLayer.PrecacheTask;
-
-public class WMSRequest implements Comparable<WMSRequest> {
-    private final int xIndex;
-    private final int yIndex;
-    private final double pixelPerDegree;
-    private final boolean real; // Download even if autodownloading is disabled
-    private final PrecacheTask precacheTask; // Download even when wms tile is not currently visible (precache)
-    private final boolean allowPartialCacheMatch;
-    private int priority;
-    private boolean hasExactMatch;
-    // Result
-    private State state;
-    private BufferedImage image;
-    private WMSException exception;
-
-    public WMSRequest(int xIndex, int yIndex, double pixelPerDegree, boolean real, boolean allowPartialCacheMatch) {
-        this(xIndex, yIndex, pixelPerDegree, real, allowPartialCacheMatch, null);
-    }
-
-    public WMSRequest(int xIndex, int yIndex, double pixelPerDegree, boolean real, boolean allowPartialCacheMatch, PrecacheTask precacheTask) {
-        this.xIndex = xIndex;
-        this.yIndex = yIndex;
-        this.pixelPerDegree = pixelPerDegree;
-        this.real = real;
-        this.precacheTask = precacheTask;
-        this.allowPartialCacheMatch = allowPartialCacheMatch;
-    }
-
-    public void finish(State state, BufferedImage image, WMSException exception) {
-        this.state = state;
-        this.image = image;
-        this.exception = exception;
-    }
-
-    public int getXIndex() {
-        return xIndex;
-    }
-
-    public int getYIndex() {
-        return yIndex;
-    }
-
-    public double getPixelPerDegree() {
-        return pixelPerDegree;
-    }
-
-    @Override
-    public int hashCode() {
-        final int prime = 31;
-        int result = 1;
-        long temp;
-        temp = Double.doubleToLongBits(pixelPerDegree);
-        result = prime * result + (int) (temp ^ (temp >>> 32));
-        result = prime * result + xIndex;
-        result = prime * result + yIndex;
-        return result;
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj)
-            return true;
-        if (obj == null)
-            return false;
-        if (getClass() != obj.getClass())
-            return false;
-        WMSRequest other = (WMSRequest) obj;
-        if (Double.doubleToLongBits(pixelPerDegree) != Double
-                .doubleToLongBits(other.pixelPerDegree))
-            return false;
-        if (xIndex != other.xIndex)
-            return false;
-        if (yIndex != other.yIndex)
-            return false;
-        if (allowPartialCacheMatch != other.allowPartialCacheMatch)
-            return false;
-        return true;
-    }
-
-    public void setPriority(int priority) {
-        this.priority = priority;
-    }
-
-    public int getPriority() {
-        return priority;
-    }
-
-    @Override
-    public int compareTo(WMSRequest o) {
-        return priority - o.priority;
-    }
-
-    /**
-     * Replies the resulting state.
-     * @return the resulting state
-     */
-    public State getState() {
-        return state;
-    }
-
-    /**
-     * Replies the resulting image, if any.
-     * @return the resulting image, or {@code null}
-     */
-    public BufferedImage getImage() {
-        return image;
-    }
-
-    /**
-     * Replies the resulting exception, if any.
-     * @return the resulting exception, or {@code null}
-     * @since 7425
-     */
-    public WMSException getException() {
-        return exception;
-    }
-
-    @Override
-    public String toString() {
-        return "WMSRequest [xIndex=" + xIndex + ", yIndex=" + yIndex
-                + ", pixelPerDegree=" + pixelPerDegree + "]";
-    }
-
-    public boolean isReal() {
-        return real;
-    }
-
-    public boolean isPrecacheOnly() {
-        return precacheTask != null;
-    }
-
-    public PrecacheTask getPrecacheTask() {
-        return precacheTask;
-    }
-
-    public boolean isAllowPartialCacheMatch() {
-        return allowPartialCacheMatch;
-    }
-
-    public boolean hasExactMatch() {
-        return hasExactMatch;
-    }
-
-    public void setHasExactMatch(boolean hasExactMatch) {
-        this.hasExactMatch = hasExactMatch;
-    }
-}
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/AddTagsDialog.java b/src/org/openstreetmap/josm/io/remotecontrol/AddTagsDialog.java
index 2734955..e962399 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/AddTagsDialog.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/AddTagsDialog.java
@@ -57,9 +57,11 @@ public class AddTagsDialog extends ExtendedDialog {
      */
     static class DeleteTagMarker {
         private int num;
+
         public DeleteTagMarker(int num) {
             this.num = num;
         }
+
         @Override
         public String toString() {
             return tr("<delete from {0} objects>", num);
@@ -70,24 +72,26 @@ public class AddTagsDialog extends ExtendedDialog {
      * Class for displaying list of existing tag values in the table
      */
     static class ExistingValues {
-        private String tag;
-        private Map<String, Integer> valueCount;
+        private final String tag;
+        private final Map<String, Integer> valueCount;
+
         public ExistingValues(String tag) {
-            this.tag=tag; valueCount=new HashMap<>();
+            this.tag = tag;
+            this.valueCount = new HashMap<>();
         }
 
         int addValue(String val) {
             Integer c = valueCount.get(val);
-            int r = c==null? 1 : (c.intValue()+1);
+            int r = c == null ? 1 : (c.intValue()+1);
             valueCount.put(val, r);
             return r;
         }
 
         @Override
         public String toString() {
-            StringBuilder sb=new StringBuilder();
+            StringBuilder sb = new StringBuilder();
             for (String k: valueCount.keySet()) {
-                if (sb.length()>0) sb.append(", ");
+                if (sb.length() > 0) sb.append(", ");
                 sb.append(k);
             }
             return sb.toString();
@@ -95,17 +99,17 @@ public class AddTagsDialog extends ExtendedDialog {
 
         private String getToolTip() {
             StringBuilder sb = new StringBuilder();
-            sb.append("<html>");
-            sb.append(tr("Old values of"));
-            sb.append(" <b>");
-            sb.append(tag);
-            sb.append("</b><br/>");
+            sb.append("<html>")
+              .append(tr("Old values of"))
+              .append(" <b>")
+              .append(tag)
+              .append("</b><br/>");
             for (Entry<String, Integer> e : valueCount.entrySet()) {
-                sb.append("<b>");
-                sb.append(e.getValue());
-                sb.append(" x </b>");
-                sb.append(e.getKey());
-                sb.append("<br/>");
+                sb.append("<b>")
+                  .append(e.getValue())
+                  .append(" x </b>")
+                  .append(e.getKey())
+                  .append("<br/>");
             }
             sb.append("</html>");
             return sb.toString();
@@ -116,14 +120,15 @@ public class AddTagsDialog extends ExtendedDialog {
      * Constructs a new {@code AddTagsDialog}.
      */
     public AddTagsDialog(String[][] tags, String senderName, Collection<? extends OsmPrimitive> primitives) {
-        super(Main.parent, tr("Add tags to selected objects"), new String[] { tr("Add selected tags"), tr("Add all tags"),  tr("Cancel")},
+        super(Main.parent, tr("Add tags to selected objects"), new String[] {tr("Add selected tags"), tr("Add all tags"), tr("Cancel")},
                 false,
                 true);
         setToolTipTexts(new String[]{tr("Add checked tags to selected objects"), tr("Shift+Enter: Add all tags to selected objects"), ""});
 
         this.sender = senderName;
 
-        final DefaultTableModel tm = new DefaultTableModel(new String[] {tr("Assume"), tr("Key"), tr("Value"), tr("Existing values")}, tags.length) {
+        final DefaultTableModel tm = new DefaultTableModel(new String[] {tr("Assume"), tr("Key"), tr("Value"), tr("Existing values")},
+                tags.length) {
             private final Class<?>[] types = {Boolean.class, String.class, Object.class, ExistingValues.class};
             @Override
             public Class<?> getColumnClass(int c) {
@@ -134,7 +139,7 @@ public class AddTagsDialog extends ExtendedDialog {
         sel = primitives;
         count = new int[tags.length];
 
-        for (int i = 0; i<tags.length; i++) {
+        for (int i = 0; i < tags.length; i++) {
             count[i] = 0;
             String key = tags[i][0];
             String value = tags[i][1], oldValue;
@@ -142,7 +147,7 @@ public class AddTagsDialog extends ExtendedDialog {
             ExistingValues old = new ExistingValues(key);
             for (OsmPrimitive osm : sel) {
                 oldValue  = osm.get(key);
-                if (oldValue!=null) {
+                if (oldValue != null) {
                     old.addValue(oldValue);
                     if (!oldValue.equals(value)) {
                         b = Boolean.FALSE;
@@ -161,7 +166,7 @@ public class AddTagsDialog extends ExtendedDialog {
             @Override
             public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
                 Component c = super.prepareRenderer(renderer, row, column);
-                if (count[row]>0) {
+                if (count[row] > 0) {
                     c.setFont(c.getFont().deriveFont(Font.ITALIC));
                     c.setForeground(new Color(100, 100, 100));
                 } else {
@@ -173,7 +178,7 @@ public class AddTagsDialog extends ExtendedDialog {
 
             @Override
             public TableCellEditor getCellEditor(int row, int column) {
-                Object value = getValueAt(row,column);
+                Object value = getValueAt(row, column);
                 if (value instanceof DeleteTagMarker) return null;
                 if (value instanceof ExistingValues) return null;
                 return getDefaultEditor(value.getClass());
@@ -184,8 +189,8 @@ public class AddTagsDialog extends ExtendedDialog {
                 int r = rowAtPoint(event.getPoint());
                 int c = columnAtPoint(event.getPoint());
                 Object o = getValueAt(r, c);
-                if (c==1 || c==2) return o.toString();
-                if (c==3) return ((ExistingValues)o).getToolTip();
+                if (c == 1 || c == 2) return o.toString();
+                if (c == 3) return ((ExistingValues) o).getToolTip();
                 return tr("Enable the checkbox to accept the value");
             }
         };
@@ -212,22 +217,23 @@ public class AddTagsDialog extends ExtendedDialog {
         tablePanel.add(propertyTable, GBC.eol().fill(GBC.BOTH));
         if (!sender.isEmpty() && !trustedSenders.contains(sender)) {
             final JCheckBox c = new JCheckBox();
-            c.setAction(new AbstractAction(tr("Accept all tags from {0} for this session", sender) ) {
+            c.setAction(new AbstractAction(tr("Accept all tags from {0} for this session", sender)) {
                 @Override public void actionPerformed(ActionEvent e) {
                     if (c.isSelected())
                         trustedSenders.add(sender);
                     else
                         trustedSenders.remove(sender);
                 }
-            } );
-            tablePanel.add(c , GBC.eol().insets(20,10,0,0));
+            });
+            tablePanel.add(c , GBC.eol().insets(20, 10, 0, 0));
         }
         setContent(tablePanel);
         setDefaultButton(2);
     }
 
     /**
-     * If you click the "Add tags" button build a ChangePropertyCommand for every key that has a checked checkbox to apply the key value pair to all selected osm objects.
+     * If you click the "Add tags" button build a ChangePropertyCommand for every key that has a checked checkbox
+     * to apply the key value pair to all selected osm objects.
      * You get a entry for every key in the command queue.
      */
     @Override
@@ -235,9 +241,9 @@ public class AddTagsDialog extends ExtendedDialog {
         // if layer all layers were closed, ignore all actions
         if (Main.main.getCurrentDataSet() != null  && buttonIndex != 2) {
             TableModel tm = propertyTable.getModel();
-            for (int i=0; i<tm.getRowCount(); i++) {
-                if (buttonIndex==1 || (Boolean)tm.getValueAt(i, 0)) {
-                    String key =(String)tm.getValueAt(i, 1);
+            for (int i = 0; i < tm.getRowCount(); i++) {
+                if (buttonIndex == 1 || (Boolean) tm.getValueAt(i, 0)) {
+                    String key = (String) tm.getValueAt(i, 1);
                     Object value = tm.getValueAt(i, 2);
                     Main.main.undoRedo.add(new ChangePropertyCommand(sel,
                             key, value instanceof String ? (String) value : ""));
@@ -273,9 +279,9 @@ public class AddTagsDialog extends ExtendedDialog {
                         int i = 0;
                         for (String tag : tagSet) {
                             // support a  =   b===c as "a"="b===c"
-                            String [] pair = tag.split("\\s*=\\s*",2);
+                            String[] pair = tag.split("\\s*=\\s*", 2);
                             keyValue[i][0] = pair[0];
-                            keyValue[i][1] = pair.length<2 ? "": pair[1];
+                            keyValue[i][1] = pair.length < 2 ? "" : pair[1];
                             i++;
                         }
                         addTags(keyValue, sender, primitives);
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/DNSName.java b/src/org/openstreetmap/josm/io/remotecontrol/DNSName.java
index ff81066..4e10fe8 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/DNSName.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/DNSName.java
@@ -70,7 +70,7 @@ public class DNSName implements GeneralNameInterface {
      * @throws IOException if the name is not a valid DNSName subjectAltName
      */
     public DNSName(String name) throws IOException {
-        if (name == null || name.length() == 0)
+        if (name == null || name.isEmpty())
             throw new IOException("DNS name must not be null");
         if (name.indexOf(' ') != -1)
             throw new IOException("DNS names or NameConstraints with blank components are not permitted");
@@ -79,7 +79,7 @@ public class DNSName implements GeneralNameInterface {
         //Name will consist of label components separated by "."
         //startIndex is the index of the first character of a component
         //endIndex is the index of the last character of a component plus 1
-        for (int endIndex,startIndex=0; startIndex < name.length(); startIndex = endIndex+1) {
+        for (int endIndex, startIndex = 0; startIndex < name.length(); startIndex = endIndex+1) {
             endIndex = name.indexOf('.', startIndex);
             if (endIndex < 0) {
                 endIndex = name.length();
@@ -88,7 +88,7 @@ public class DNSName implements GeneralNameInterface {
                 throw new IOException("DNSName SubjectAltNames with empty components are not permitted");
 
             //nonStartIndex: index for characters in the component beyond the first one
-            for (int nonStartIndex=startIndex+1; nonStartIndex < endIndex; nonStartIndex++) {
+            for (int nonStartIndex = startIndex+1; nonStartIndex < endIndex; nonStartIndex++) {
                 char x = name.charAt(nonStartIndex);
                 if ((alphaDigitsAndHyphen).indexOf(x) < 0)
                     throw new IOException("DNSName components must consist of letters, digits, and hyphens");
@@ -146,7 +146,7 @@ public class DNSName implements GeneralNameInterface {
         if (!(obj instanceof DNSName))
             return false;
 
-        DNSName other = (DNSName)obj;
+        DNSName other = (DNSName) obj;
 
         // RFC2459 mandates that these names are
         // not case-sensitive
@@ -160,7 +160,7 @@ public class DNSName implements GeneralNameInterface {
      */
     @Override
     public int hashCode() {
-        return name.toUpperCase().hashCode();
+        return name.toUpperCase(Locale.ENGLISH).hashCode();
     }
 
     /**
@@ -202,19 +202,19 @@ public class DNSName implements GeneralNameInterface {
             constraintType = NAME_DIFF_TYPE;
         else {
             String inName =
-                (((DNSName)inputName).getName()).toLowerCase(Locale.ENGLISH);
+                (((DNSName) inputName).getName()).toLowerCase(Locale.ENGLISH);
             String thisName = name.toLowerCase(Locale.ENGLISH);
             if (inName.equals(thisName))
                 constraintType = NAME_MATCH;
             else if (thisName.endsWith(inName)) {
                 int inNdx = thisName.lastIndexOf(inName);
-                if (thisName.charAt(inNdx-1) == '.' )
+                if (thisName.charAt(inNdx-1) == '.')
                     constraintType = NAME_WIDENS;
                 else
                     constraintType = NAME_SAME_TYPE;
             } else if (inName.endsWith(thisName)) {
                 int ndx = inName.lastIndexOf(thisName);
-                if (inName.charAt(ndx-1) == '.' )
+                if (inName.charAt(ndx-1) == '.')
                     constraintType = NAME_NARROWS;
                 else
                     constraintType = NAME_SAME_TYPE;
@@ -235,12 +235,12 @@ public class DNSName implements GeneralNameInterface {
      */
     @Override
     public int subtreeDepth() {
-        String subtree=name;
-        int i=1;
+        String subtree = name;
+        int i = 1;
 
         /* count dots */
         for (; subtree.lastIndexOf('.') >= 0; i++) {
-            subtree=subtree.substring(0,subtree.lastIndexOf('.'));
+            subtree = subtree.substring(0, subtree.lastIndexOf('.'));
         }
 
         return i;
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/PermissionPrefWithDefault.java b/src/org/openstreetmap/josm/io/remotecontrol/PermissionPrefWithDefault.java
index 6a37dd3..ee549f3 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/PermissionPrefWithDefault.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/PermissionPrefWithDefault.java
@@ -1,10 +1,12 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.io.remotecontrol;
 
+import static org.openstreetmap.josm.tools.I18n.tr;
+
 import java.util.Arrays;
 import java.util.List;
+
 import org.openstreetmap.josm.Main;
-import static org.openstreetmap.josm.tools.I18n.tr;
 
 /**
  * Contains a preference name to control permission for the operation
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/RemoteControl.java b/src/org/openstreetmap/josm/io/remotecontrol/RemoteControl.java
index 03bc19a..321a335 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/RemoteControl.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/RemoteControl.java
@@ -2,9 +2,9 @@
 package org.openstreetmap.josm.io.remotecontrol;
 
 import java.io.File;
-import java.net.InetAddress;
 import java.net.Inet4Address;
 import java.net.Inet6Address;
+import java.net.InetAddress;
 import java.net.UnknownHostException;
 
 import org.openstreetmap.josm.Main;
@@ -85,11 +85,11 @@ public class RemoteControl {
      * @since 8337
      */
     public static InetAddress getInet6Address() throws UnknownHostException {
-        for(InetAddress a : InetAddress.getAllByName(Main.pref.get("remote.control.host.ipv6", "::1"))) {
-            if(a instanceof Inet6Address) {
+        for (InetAddress a : InetAddress.getAllByName(Main.pref.get("remote.control.host.ipv6", "::1"))) {
+            if (a instanceof Inet6Address) {
                 return a;
             }
-        };
+        }
         throw new UnknownHostException();
     }
 
@@ -101,11 +101,11 @@ public class RemoteControl {
      */
     public static InetAddress getInet4Address() throws UnknownHostException {
         // Return an address to the loopback interface by default
-        for(InetAddress a : InetAddress.getAllByName(Main.pref.get("remote.control.host.ipv4", "127.0.0.1"))) {
-            if(a instanceof Inet4Address) {
+        for (InetAddress a : InetAddress.getAllByName(Main.pref.get("remote.control.host.ipv4", "127.0.0.1"))) {
+            if (a instanceof Inet4Address) {
                 return a;
             }
-        };
+        }
         throw new UnknownHostException();
     }
 }
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/RemoteControlHttpServer.java b/src/org/openstreetmap/josm/io/remotecontrol/RemoteControlHttpServer.java
index b2fb5b9..3cb2dca 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/RemoteControlHttpServer.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/RemoteControlHttpServer.java
@@ -4,7 +4,6 @@ package org.openstreetmap.josm.io.remotecontrol;
 import static org.openstreetmap.josm.tools.I18n.marktr;
 
 import java.io.IOException;
-import java.net.BindException;
 import java.net.ServerSocket;
 import java.net.Socket;
 import java.net.SocketException;
@@ -45,7 +44,7 @@ public class RemoteControlHttpServer extends Thread {
             instance6.start();
         } catch (Exception ex) {
             /* only show error when we also have no IPv4 */
-            if(instance4 == null) {
+            if (instance4 == null) {
                 Main.warn(marktr("Cannot start IPv6 remotecontrol server on port {0}: {1}"),
                     Integer.toString(port), ex.getLocalizedMessage());
             }
@@ -60,18 +59,18 @@ public class RemoteControlHttpServer extends Thread {
         if (instance4 != null) {
             try {
                 instance4.stopServer();
-                instance4 = null;
             } catch (IOException ioe) {
                 Main.error(ioe);
             }
+            instance4 = null;
         }
         if (instance6 != null) {
             try {
                 instance6.stopServer();
-                instance6 = null;
             } catch (IOException ioe) {
                 Main.error(ioe);
             }
+            instance6 = null;
         }
     }
 
@@ -113,7 +112,7 @@ public class RemoteControlHttpServer extends Thread {
     /**
      * Stops the HTTP server
      *
-     * @throws IOException
+     * @throws IOException if any I/O error occurs
      */
     public void stopServer() throws IOException {
         Main.info(marktr("RemoteControl::Server {0}:{1} stopped."),
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/RemoteControlHttpsServer.java b/src/org/openstreetmap/josm/io/remotecontrol/RemoteControlHttpsServer.java
index 67ba9ee..0025614 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/RemoteControlHttpsServer.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/RemoteControlHttpsServer.java
@@ -6,7 +6,6 @@ import static org.openstreetmap.josm.tools.I18n.marktr;
 import java.io.IOException;
 import java.io.InputStream;
 import java.math.BigInteger;
-import java.net.BindException;
 import java.net.ServerSocket;
 import java.net.Socket;
 import java.net.SocketException;
@@ -28,6 +27,7 @@ import java.security.cert.X509Certificate;
 import java.util.Arrays;
 import java.util.Date;
 import java.util.Enumeration;
+import java.util.Locale;
 import java.util.Vector;
 
 import javax.net.ssl.KeyManagerFactory;
@@ -113,11 +113,11 @@ public class RemoteControlHttpsServer extends Thread {
      * @param t one of 4 known types
      * @param v value
      * @return which one
-     * @throws IOException
+     * @throws IOException if any I/O error occurs
      */
     private static GeneralName createGeneralName(String t, String v) throws IOException {
         GeneralNameInterface gn;
-        switch (t.toLowerCase()) {
+        switch (t.toLowerCase(Locale.ENGLISH)) {
             case "uri": gn = new URIName(v); break;
             case "dns": gn = new DNSName(v); break;
             case "ip": gn = new IPAddressName(v); break;
@@ -134,7 +134,8 @@ public class RemoteControlHttpsServer extends Thread {
      * @param algorithm the signing algorithm, eg "SHA256withRSA"
      * @param san SubjectAlternativeName extension (optional)
      */
-    private static X509Certificate generateCertificate(String dn, KeyPair pair, int days, String algorithm, String san) throws GeneralSecurityException, IOException {
+    private static X509Certificate generateCertificate(String dn, KeyPair pair, int days, String algorithm, String san)
+            throws GeneralSecurityException, IOException {
         PrivateKey privkey = pair.getPrivate();
         X509CertInfo info = new X509CertInfo();
         Date from = new Date();
@@ -166,16 +167,16 @@ public class RemoteControlHttpsServer extends Thread {
 
         CertificateExtensions ext = new CertificateExtensions();
         // Critical: Not CA, max path len 0
-        ext.set(BasicConstraintsExtension.NAME, new BasicConstraintsExtension(true, false, 0));
+        ext.set(BasicConstraintsExtension.NAME, new BasicConstraintsExtension(Boolean.TRUE, false, 0));
         // Critical: only allow TLS ("serverAuth" = 1.3.6.1.5.5.7.3.1)
-        ext.set(ExtendedKeyUsageExtension.NAME, new ExtendedKeyUsageExtension(true,
+        ext.set(ExtendedKeyUsageExtension.NAME, new ExtendedKeyUsageExtension(Boolean.TRUE,
                 new Vector<ObjectIdentifier>(Arrays.asList(new ObjectIdentifier("1.3.6.1.5.5.7.3.1")))));
 
         if (san != null) {
             int colonpos;
             String[] ps = san.split(",");
             GeneralNames gnames = new GeneralNames();
-            for(String item: ps) {
+            for (String item: ps) {
                 colonpos = item.indexOf(':');
                 if (colonpos < 0) {
                     throw new IllegalArgumentException("Illegal item " + item + " in " + san);
@@ -185,7 +186,7 @@ public class RemoteControlHttpsServer extends Thread {
                 gnames.add(createGeneralName(t, v));
             }
             // Non critical
-            ext.set(SubjectAlternativeNameExtension.NAME, new SubjectAlternativeNameExtension(false, gnames));
+            ext.set(SubjectAlternativeNameExtension.NAME, new SubjectAlternativeNameExtension(Boolean.FALSE, gnames));
         }
 
         info.set(X509CertInfo.EXTENSIONS, ext);
@@ -195,7 +196,7 @@ public class RemoteControlHttpsServer extends Thread {
         cert.sign(privkey, algorithm);
 
         // Update the algorithm, and resign.
-        algo = (AlgorithmId)cert.get(X509CertImpl.SIG_ALG);
+        algo = (AlgorithmId) cert.get(X509CertImpl.SIG_ALG);
         info.set(CertificateAlgorithmId.NAME + "." + CertificateAlgorithmId.ALGORITHM, algo);
         cert = new X509CertImpl(info);
         cert.sign(privkey, algorithm);
@@ -231,7 +232,9 @@ public class RemoteControlHttpsServer extends Thread {
 
             X509Certificate cert = generateCertificate("CN=localhost, OU=JOSM, O=OpenStreetMap", pair, 1825, "SHA256withRSA",
                     // see #10033#comment:20: All browsers respect "ip" in SAN, except IE which only understands DNS entries:
+                    // CHECKSTYLE.OFF: LineLength
                     // https://connect.microsoft.com/IE/feedback/details/814744/the-ie-doesnt-trust-a-san-certificate-when-connecting-to-ip-address
+                    // CHECKSTYLE.ON: LineLength
                     "dns:localhost,ip:127.0.0.1,dns:127.0.0.1,ip:::1,uri:https://127.0.0.1:"+HTTPS_PORT+",uri:https://::1:"+HTTPS_PORT);
 
             KeyStore ks = KeyStore.getInstance("JKS");
@@ -335,7 +338,7 @@ public class RemoteControlHttpsServer extends Thread {
                 instance6.start();
             } catch (Exception ex) {
                 /* only show error when we also have no IPv4 */
-                if(instance4 == null) {
+                if (instance4 == null) {
                     Main.warn(marktr("Cannot start IPv6 remotecontrol https server on port {0}: {1}"),
                         Integer.toString(port), ex.getLocalizedMessage());
                 }
@@ -350,18 +353,18 @@ public class RemoteControlHttpsServer extends Thread {
         if (instance4 != null) {
             try {
                 instance4.stopServer();
-                instance4 = null;
             } catch (IOException ioe) {
                 Main.error(ioe);
             }
+            instance4 = null;
         }
         if (instance6 != null) {
             try {
                 instance6.stopServer();
-                instance6 = null;
             } catch (IOException ioe) {
                 Main.error(ioe);
             }
+            instance6 = null;
         }
     }
 
@@ -390,7 +393,7 @@ public class RemoteControlHttpsServer extends Thread {
             RemoteControl.getInet6Address() : RemoteControl.getInet4Address());
 
         if (Main.isTraceEnabled()) {
-            if(server instanceof SSLServerSocket) {
+            if (server instanceof SSLServerSocket) {
                 SSLServerSocket sslServer = (SSLServerSocket) server;
                 Main.trace("SSL server - Enabled Cipher suites: "+Arrays.toString(sslServer.getEnabledCipherSuites()));
                 Main.trace("SSL server - Enabled Protocols: "+Arrays.toString(sslServer.getEnabledProtocols()));
@@ -440,7 +443,7 @@ public class RemoteControlHttpsServer extends Thread {
      * @throws IOException if any I/O error occurs
      */
     public void stopServer() throws IOException {
-        Main.info(marktr("RemoteControl::Server {0}:{1} stopped.\n"),
+        Main.info(marktr("RemoteControl::Server {0}:{1} stopped."),
         server.getInetAddress(), Integer.toString(server.getLocalPort()));
         server.close();
     }
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/RequestProcessor.java b/src/org/openstreetmap/josm/io/remotecontrol/RequestProcessor.java
index bd001f6..f4a2220 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/RequestProcessor.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/RequestProcessor.java
@@ -105,7 +105,7 @@ public class RequestProcessor extends Thread {
      */
     private static void addRequestHandlerClass(String command,
                 Class<? extends RequestHandler> handler, boolean silent) {
-        if(command.charAt(0) == '/') {
+        if (command.charAt(0) == '/') {
             command = command.substring(1);
         }
         String commandWithSlash = "/" + command;
@@ -175,14 +175,14 @@ public class RequestProcessor extends Thread {
 
             String command = questionPos < 0 ? url : url.substring(0, questionPos);
 
-            Map <String,String> headers = new HashMap<>();
-            int k=0, MAX_HEADERS=20;
-            while (k<MAX_HEADERS) {
-                get=in.readLine();
-                if (get==null) break;
+            Map<String, String> headers = new HashMap<>();
+            int k = 0, MAX_HEADERS = 20;
+            while (k < MAX_HEADERS) {
+                get = in.readLine();
+                if (get == null) break;
                 k++;
                 String[] h = get.split(": ", 2);
-                if (h.length==2) {
+                if (h.length == 2) {
                     headers.put(h[0], h[1]);
                 } else break;
             }
@@ -197,7 +197,7 @@ public class RequestProcessor extends Thread {
             } else {
                 String ref = headers.get("Referer");
                 Pattern r = Pattern.compile("(https?://)?([^/]*)");
-                if (ref!=null) {
+                if (ref != null) {
                     Matcher m = r.matcher(ref);
                     if (m.find()) {
                         sender = m.group(2);
@@ -368,7 +368,7 @@ public class RequestProcessor extends Thread {
     public static String getHandlersInfoAsJSON() {
         StringBuilder r = new StringBuilder();
         boolean first = true;
-        r.append("[");
+        r.append('[');
 
         for (Entry<String, Class<? extends RequestHandler>> p : handlers.entrySet()) {
             if (first) {
@@ -378,7 +378,7 @@ public class RequestProcessor extends Thread {
             }
             r.append(getHandlerInfoAsJSON(p.getKey()));
         }
-        r.append("]");
+        r.append(']');
 
         return r.toString();
     }
@@ -389,7 +389,7 @@ public class RequestProcessor extends Thread {
             RequestHandler handler = null;
             try {
                 Class<?> c = handlers.get(cmd);
-                if (c==null) return null;
+                if (c == null) return null;
                 handler = handlers.get(cmd).newInstance();
             } catch (InstantiationException | IllegalAccessException ex) {
                 Main.error(ex);
@@ -453,8 +453,9 @@ public class RequestProcessor extends Thread {
     /**
      * Reports HTML message with the description of all available commands
      * @return HTML message with the description of all available commands
-     * @throws IllegalAccessException
-     * @throws InstantiationException
+     * @throws IllegalAccessException if one handler class or its nullary constructor is not accessible.
+     * @throws InstantiationException if one handler class represents an abstract class, an interface, an array class,
+     * a primitive type, or void; or if the class has no nullary constructor; or if the instantiation fails for some other reason.
      */
     public static String getUsageAsHtml() throws IllegalAccessException, InstantiationException {
         StringBuilder usage = new StringBuilder(1024);
@@ -463,8 +464,8 @@ public class RequestProcessor extends Thread {
             String[] mandatory = sample.getMandatoryParams();
             String[] optional = sample.getOptionalParams();
             String[] examples = sample.getUsageExamples(handler.getKey().substring(1));
-            usage.append("<li>");
-            usage.append(handler.getKey());
+            usage.append("<li>")
+                 .append(handler.getKey());
             if (sample.getUsage() != null && !sample.getUsage().isEmpty()) {
                 usage.append(" — <i>").append(sample.getUsage()).append("</i>");
             }
@@ -477,7 +478,7 @@ public class RequestProcessor extends Thread {
             if (examples != null) {
                 usage.append("<br/>examples: ");
                 for (String ex: examples) {
-                    usage.append("<br/> <a href=\"http://localhost:8111"+ex+"\">"+ex+"</a>");
+                    usage.append("<br/> <a href=\"http://localhost:8111").append(ex).append("\">").append(ex).append("</a>");
                 }
             }
             usage.append("</li>");
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/handler/AddNodeHandler.java b/src/org/openstreetmap/josm/io/remotecontrol/handler/AddNodeHandler.java
index 4d3782d..7ad2f1e 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/handler/AddNodeHandler.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/handler/AddNodeHandler.java
@@ -29,8 +29,6 @@ public class AddNodeHandler extends RequestHandler {
 
     private double lat;
     private double lon;
-    
-    private Node node;
 
     @Override
     protected void handleRequest() {
@@ -42,15 +40,13 @@ public class AddNodeHandler extends RequestHandler {
     }
 
     @Override
-    public String[] getMandatoryParams()
-    {
-        return new String[] { "lat", "lon" };
+    public String[] getMandatoryParams() {
+        return new String[] {"lat", "lon"};
     }
-    
+
     @Override
-    public String[] getOptionalParams()
-    {
-        return new String[] { "addtags" };
+    public String[] getOptionalParams() {
+        return new String[] {"addtags"};
     }
 
     @Override
@@ -62,10 +58,10 @@ public class AddNodeHandler extends RequestHandler {
     public String[] getUsageExamples() {
         return new String[] {
             "/add_node?lat=11&lon=22",
-            "/add_node?lon=13.3&lat=53.2&addtags=natural=tree|name=%20%20%20==Great%20Oak==" 
+            "/add_node?lon=13.3&lat=53.2&addtags=natural=tree|name=%20%20%20==Great%20Oak=="
         };
     }
-    
+
     @Override
     public String getPermissionMessage() {
         return tr("Remote Control has been asked to create a new node.") +
@@ -79,9 +75,9 @@ public class AddNodeHandler extends RequestHandler {
 
     /**
      * Adds a node, implements the GET /add_node?lon=...&lat=... request.
-     * @param args
+     * @param args request arguments
      */
-    private void addNode(Map<String, String> args){
+    private void addNode(Map<String, String> args) {
 
         // Parse the arguments
         Main.info("Adding node at (" + lat + ", " + lon + ")");
@@ -89,17 +85,17 @@ public class AddNodeHandler extends RequestHandler {
         // Create a new node
         LatLon ll = new LatLon(lat, lon);
 
-        node = null;
+        Node node = null;
 
         if (Main.isDisplayingMapView()) {
             Point p = Main.map.mapView.getPoint(ll);
             node = Main.map.mapView.getNearestNode(p, OsmPrimitive.isUsablePredicate);
-            if (node!=null && node.getCoor().greatCircleDistance(ll) > Main.pref.getDouble("remotecontrol.tolerance", 0.1)) {
+            if (node != null && node.getCoor().greatCircleDistance(ll) > Main.pref.getDouble("remotecontrol.tolerance", 0.1)) {
                 node = null; // node is too far
             }
         }
 
-        if (node==null) {
+        if (node == null) {
             node = new Node(ll);
             // Now execute the commands to add this node.
             Main.main.undoRedo.add(new AddCommand(node));
@@ -121,7 +117,7 @@ public class AddNodeHandler extends RequestHandler {
             lat = Double.parseDouble(args.get("lat"));
             lon = Double.parseDouble(args.get("lon"));
         } catch (NumberFormatException e) {
-            throw new RequestHandlerBadRequestException("NumberFormatException ("+e.getMessage()+")");
+            throw new RequestHandlerBadRequestException("NumberFormatException ("+e.getMessage()+")", e);
         }
         if (!Main.main.hasEditLayer()) {
              throw new RequestHandlerBadRequestException(tr("There is no layer opened to add node"));
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java b/src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java
index 23d6686..6b47821 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java
@@ -52,7 +52,7 @@ public class AddWayHandler extends RequestHandler {
 
     @Override
     public String[] getOptionalParams() {
-        return new String[] { "addtags" };
+        return new String[] {"addtags"};
     }
 
     @Override
@@ -63,8 +63,10 @@ public class AddWayHandler extends RequestHandler {
     @Override
     public String[] getUsageExamples() {
         return new String[] {
+            // CHECKSTYLE.OFF: LineLength
             "/add_way?way=53.2,13.3;53.3,13.3;53.3,13.2",
             "/add_way?&addtags=building=yes&way=45.437213,-2.810792;45.437988,-2.455983;45.224080,-2.455036;45.223302,-2.809845;45.437213,-2.810792"
+            // CHECKSTYLE.ON: LineLength
         };
     }
 
@@ -103,7 +105,7 @@ public class AddWayHandler extends RequestHandler {
                 double lon = Double.parseDouble(coordinates[1]);
                 allCoordinates.add(new LatLon(lat, lon));
             } catch (NumberFormatException e) {
-                throw new RequestHandlerBadRequestException("NumberFormatException ("+e.getMessage()+")");
+                throw new RequestHandlerBadRequestException("NumberFormatException ("+e.getMessage()+")", e);
             }
         }
         if (allCoordinates.isEmpty()) {
@@ -126,7 +128,7 @@ public class AddWayHandler extends RequestHandler {
         if (Main.isDisplayingMapView()) {
             Point p = Main.map.mapView.getPoint(ll);
             nd = Main.map.mapView.getNearestNode(p, OsmPrimitive.isUsablePredicate);
-            if (nd!=null && nd.getCoor().greatCircleDistance(ll) > Main.pref.getDouble("remote.tolerance", 0.1)) {
+            if (nd != null && nd.getCoor().greatCircleDistance(ll) > Main.pref.getDouble("remote.tolerance", 0.1)) {
                 nd = null; // node is too far
             }
         }
@@ -140,9 +142,9 @@ public class AddWayHandler extends RequestHandler {
             }
         }
 
-        if (prev!=null) {
+        if (prev != null) {
             nd = prev;
-        } else if (nd==null) {
+        } else if (nd == null) {
             nd = new Node(ll);
             // Now execute the commands to add this node.
             commands.add(new AddCommand(nd));
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/handler/FeaturesHandler.java b/src/org/openstreetmap/josm/io/remotecontrol/handler/FeaturesHandler.java
index f04aa8f..28a45d0 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/handler/FeaturesHandler.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/handler/FeaturesHandler.java
@@ -1,9 +1,9 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.io.remotecontrol.handler;
 
-import org.openstreetmap.josm.Main;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault;
 import org.openstreetmap.josm.io.remotecontrol.RequestProcessor;
 
@@ -22,9 +22,9 @@ public class FeaturesHandler extends RequestHandler {
     protected void handleRequest() throws RequestHandlerErrorException,
             RequestHandlerBadRequestException {
         StringBuilder buf = new StringBuilder();
-        String q=args.get("q");
-        if (q!=null) {
-            buf.append("[");
+        String q = args.get("q");
+        if (q != null) {
+            buf.append('[');
             boolean first = true;
             for (String s: q.split("[,\\s]+")) {
                if (first) {
@@ -33,17 +33,17 @@ public class FeaturesHandler extends RequestHandler {
                    buf.append(", ");
                }
                String info = RequestProcessor.getHandlerInfoAsJSON("/"+s);
-               if (info!=null) {
+               if (info != null) {
                    buf.append(info);
                } else {
                    Main.warn("Unknown handler {0} passed to /features request", s);
                }
             }
-            buf.append("]");
+            buf.append(']');
         } else {
             buf.append(RequestProcessor.getHandlersInfoAsJSON());
         }
-            
+
         content = buf.toString();
         contentType = "application/json";
         if (args.containsKey("jsonp")) {
@@ -65,7 +65,7 @@ public class FeaturesHandler extends RequestHandler {
     public String[] getMandatoryParams() {
         return null;
     }
-    
+
     @Override
     public String[] getOptionalParams() {
         return new String[]{"jsonp", "q"};
@@ -83,6 +83,6 @@ public class FeaturesHandler extends RequestHandler {
 
     @Override
     public String[] getUsageExamples() {
-        return new String[] {"/features", "/features?q=import,add_node"}; 
+        return new String[] {"/features", "/features?q=import,add_node"};
     }
 }
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/handler/ImageryHandler.java b/src/org/openstreetmap/josm/io/remotecontrol/handler/ImageryHandler.java
index 03d6292..d1161ef 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/handler/ImageryHandler.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/handler/ImageryHandler.java
@@ -38,7 +38,7 @@ public class ImageryHandler extends RequestHandler.RawURLParseRequestHandler {
 
     @Override
     public String[] getOptionalParams() {
-        return new String[] { "title", "type", "cookies", "min_zoom", "max_zoom"};
+        return new String[] {"title", "type", "cookies", "min_zoom", "max_zoom"};
     }
 
     @Override
@@ -132,14 +132,18 @@ public class ImageryHandler extends RequestHandler.RawURLParseRequestHandler {
 
     @Override
     public String[] getUsageExamples() {
-        final String types = Utils.join("|", Utils.transform(Arrays.asList(ImageryInfo.ImageryType.values()), new Utils.Function<ImageryInfo.ImageryType, String>() {
+        final String types = Utils.join("|", Utils.transform(Arrays.asList(ImageryInfo.ImageryType.values()),
+                new Utils.Function<ImageryInfo.ImageryType, String>() {
             @Override
             public String apply(ImageryInfo.ImageryType x) {
                 return x.getTypeString();
             }
         }));
-        return new String[] { "/imagery?title=osm&type=tms&url=https://a.tile.openstreetmap.org/%7Bzoom%7D/%7Bx%7D/%7By%7D.png",
-            "/imagery?title=landsat&type=wms&url=http://irs.gis-lab.info/?layers=landsat&SRS=%7Bproj%7D&WIDTH=%7Bwidth%7D&HEIGHT=%7Bheight%7D&BBOX=%7Bbbox%7D",
-            "/imagery?title=...&type={"+types+"}&url=....[&cookies=...][&min_zoom=...][&max_zoom=...]"};
+        return new String[] {
+            "/imagery?title=osm&type=tms&url=https://a.tile.openstreetmap.org/%7Bzoom%7D/%7Bx%7D/%7By%7D.png",
+            "/imagery?title=landsat&type=wms&url=http://irs.gis-lab.info/?" +
+                    "layers=landsat&SRS=%7Bproj%7D&WIDTH=%7Bwidth%7D&HEIGHT=%7Bheight%7D&BBOX=%7Bbbox%7D",
+            "/imagery?title=...&type={"+types+"}&url=....[&cookies=...][&min_zoom=...][&max_zoom=...]"
+            };
     }
 }
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/handler/ImportHandler.java b/src/org/openstreetmap/josm/io/remotecontrol/handler/ImportHandler.java
index f9c1849..e438500 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/handler/ImportHandler.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/handler/ImportHandler.java
@@ -10,7 +10,6 @@ import java.util.LinkedHashSet;
 import java.util.Set;
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.actions.OpenLocationAction;
 import org.openstreetmap.josm.actions.downloadtasks.DownloadOsmTask;
 import org.openstreetmap.josm.actions.downloadtasks.DownloadTask;
 import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault;
@@ -40,7 +39,7 @@ public class ImportHandler extends RequestHandler.RawURLParseRequestHandler {
                 new DownloadOsmTask().loadUrl(isLoadInNewLayer(), url.toExternalForm(), null);
             } else if (Main.pref.getBoolean("remotecontrol.import.interactive", true)) {
                 // OpenLocationAction queries the user if more than one task is suitable
-                new OpenLocationAction().openUrl(isLoadInNewLayer(), url.toExternalForm());
+                Main.main.menu.openLocation.openUrl(isLoadInNewLayer(), url.toExternalForm());
             } else {
                 // Otherwise perform all tasks
                 for (DownloadTask task : suitableDownloadTasks) {
@@ -58,7 +57,7 @@ public class ImportHandler extends RequestHandler.RawURLParseRequestHandler {
     public String[] getMandatoryParams() {
         return new String[]{"url"};
     }
-    
+
     @Override
     public String[] getOptionalParams() {
         return new String[] {"new_layer"};
@@ -71,9 +70,9 @@ public class ImportHandler extends RequestHandler.RawURLParseRequestHandler {
 
     @Override
     public String[] getUsageExamples() {
-        return new String[] { "/import?url="+Main.getJOSMWebsite()+"/browser/josm/trunk/data_nodist/direction-arrows.osm" };
+        return new String[] {"/import?url="+Main.getJOSMWebsite()+"/browser/josm/trunk/data_nodist/direction-arrows.osm"};
     }
-    
+
     @Override
     public String getPermissionMessage() {
         // URL can be any suitable URL giving back OSM data, including OSM API calls, even if calls to the main API
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java b/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java
index e2ea434..0c45b8a 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java
@@ -67,7 +67,7 @@ public class LoadAndZoomHandler extends RequestHandler {
 
     @Override
     public String[] getMandatoryParams() {
-        return new String[] { "bottom", "top", "left", "right" };
+        return new String[] {"bottom", "top", "left", "right"};
     }
 
     @Override
@@ -89,7 +89,8 @@ public class LoadAndZoomHandler extends RequestHandler {
     public String[] getUsageExamples(String cmd) {
         if (command.equals(cmd)) {
             return new String[] {
-                    "/load_and_zoom?addtags=wikipedia:de=Wei%C3%9Fe_Gasse|maxspeed=5&select=way23071688,way23076176,way23076177,&left=13.740&right=13.741&top=51.05&bottom=51.049",
+                    "/load_and_zoom?addtags=wikipedia:de=Wei%C3%9Fe_Gasse|maxspeed=5&select=way23071688,way23076176,way23076177," +
+                            "&left=13.740&right=13.741&top=51.05&bottom=51.049",
                     "/load_and_zoom?left=8.19&right=8.20&top=48.605&bottom=48.590&select=node413602999&new_layer=true"};
         } else {
             return new String[] {
@@ -122,7 +123,7 @@ public class LoadAndZoomHandler extends RequestHandler {
                             present = ds.getDataSourceArea();
                         }
                         if (present != null && !present.isEmpty()) {
-                            toDownload = new Area(new Rectangle2D.Double(minlon,minlat,maxlon-minlon,maxlat-minlat));
+                            toDownload = new Area(new Rectangle2D.Double(minlon, minlat, maxlon-minlon, maxlat-minlat));
                             toDownload.subtract(present);
                             if (!toDownload.isEmpty()) {
                                 // the result might not be a rectangle (L shaped etc)
@@ -137,7 +138,8 @@ public class LoadAndZoomHandler extends RequestHandler {
                     if (toDownload != null && toDownload.isEmpty()) {
                         Main.info("RemoteControl: no download necessary");
                     } else {
-                        Future<?> future = osmTask.download(newLayer, new Bounds(minlat,minlon,maxlat,maxlon), null /* let the task manage the progress monitor */);
+                        Future<?> future = osmTask.download(newLayer, new Bounds(minlat, minlon, maxlat, maxlon),
+                                null /* let the task manage the progress monitor */);
                         Main.worker.submit(new PostDownloadHandler(osmTask, future));
                     }
                 }
@@ -156,7 +158,7 @@ public class LoadAndZoomHandler extends RequestHandler {
                 @Override
                 public void run() {
                     DataSet ds = Main.main.getCurrentDataSet();
-                    if(ds == null) // e.g. download failed
+                    if (ds == null) // e.g. download failed
                         return;
                     ds.clearSelection();
                 }
@@ -271,7 +273,7 @@ public class LoadAndZoomHandler extends RequestHandler {
             minlon = LatLon.roundToOsmPrecision(Double.parseDouble(args.get("left")));
             maxlon = LatLon.roundToOsmPrecision(Double.parseDouble(args.get("right")));
         } catch (NumberFormatException e) {
-            throw new RequestHandlerBadRequestException("NumberFormatException ("+e.getMessage()+")");
+            throw new RequestHandlerBadRequestException("NumberFormatException ("+e.getMessage()+")", e);
         }
 
         // Current API 0.6 check: "The latitudes must be between -90 and 90"
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadObjectHandler.java b/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadObjectHandler.java
index 93fab44..c4b5b84 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadObjectHandler.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadObjectHandler.java
@@ -72,7 +72,7 @@ public class LoadObjectHandler extends RequestHandler {
                 public void run() {
                     final List<PrimitiveId> downloaded = task.getDownloadedId();
                     final DataSet ds = Main.main.getCurrentDataSet();
-                    if(downloaded != null) {
+                    if (downloaded != null) {
                         GuiHelper.runInEDT(new Runnable() {
                             @Override
                             public void run() {
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/handler/OpenFileHandler.java b/src/org/openstreetmap/josm/io/remotecontrol/handler/OpenFileHandler.java
index ac3487f..599aebe 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/handler/OpenFileHandler.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/handler/OpenFileHandler.java
@@ -26,11 +26,6 @@ public class OpenFileHandler extends RequestHandler {
     }
 
     @Override
-    public String[] getOptionalParams() {
-        return null;
-    }
-
-    @Override
     public String getUsage() {
         return "opens a local file in JOSM";
     }
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/handler/RequestHandler.java b/src/org/openstreetmap/josm/io/remotecontrol/handler/RequestHandler.java
index 1676f47..05ce64e 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/handler/RequestHandler.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/handler/RequestHandler.java
@@ -34,7 +34,7 @@ public abstract class RequestHandler {
     public static final boolean loadInNewLayerDefault = false;
 
     /** The GET request arguments */
-    protected Map<String,String> args;
+    protected Map<String, String> args;
 
     /** The request URL without "GET". */
     protected String request;
@@ -56,9 +56,9 @@ public abstract class RequestHandler {
     /**
      * Check permission and parameters and handle request.
      *
-     * @throws RequestHandlerForbiddenException
-     * @throws RequestHandlerBadRequestException
-     * @throws RequestHandlerErrorException
+     * @throws RequestHandlerForbiddenException if request is forbidden by preferences
+     * @throws RequestHandlerBadRequestException if request is invalid
+     * @throws RequestHandlerErrorException if an error occurs while processing request
      */
     public final void handle() throws RequestHandlerForbiddenException, RequestHandlerBadRequestException, RequestHandlerErrorException {
         checkMandatoryParams();
@@ -69,7 +69,7 @@ public abstract class RequestHandler {
 
     /**
      * Validates the request before attempting to perform it.
-     * @throws RequestHandlerBadRequestException
+     * @throws RequestHandlerBadRequestException if request is invalid
      * @since 5678
      */
     protected abstract void validateRequest() throws RequestHandlerBadRequestException;
@@ -79,8 +79,8 @@ public abstract class RequestHandler {
      *
      * This method of the subclass will do the real work.
      *
-     * @throws RequestHandlerErrorException
-     * @throws RequestHandlerBadRequestException
+     * @throws RequestHandlerErrorException if an error occurs while processing request
+     * @throws RequestHandlerBadRequestException if request is invalid
      */
     protected abstract void handleRequest() throws RequestHandlerErrorException, RequestHandlerBadRequestException;
 
@@ -132,10 +132,9 @@ public abstract class RequestHandler {
     }
 
     /**
-     * Check permissions in preferences and display error message
-     * or ask for permission.
+     * Check permissions in preferences and display error message or ask for permission.
      *
-     * @throws RequestHandlerForbiddenException
+     * @throws RequestHandlerForbiddenException if request is forbidden by preferences
      */
     public final void checkPermission() throws RequestHandlerForbiddenException {
         /*
@@ -220,9 +219,9 @@ public abstract class RequestHandler {
         String[] optional = getOptionalParams();
         List<String> missingKeys = new LinkedList<>();
         boolean error = false;
-        if(mandatory != null) for (String key : mandatory) {
+        if (mandatory != null) for (String key : mandatory) {
             String value = args.get(key);
-            if ((value == null) || (value.length() == 0)) {
+            if (value == null || value.isEmpty()) {
                 error = true;
                 Main.warn("'" + myCommand + "' remote control request must have '" + key + "' parameter");
                 missingKeys.add(key);
@@ -248,8 +247,7 @@ public abstract class RequestHandler {
      *
      * @param command The command.
      */
-    public void setCommand(String command)
-    {
+    public void setCommand(String command) {
         if (command.charAt(0) == '/') {
             command = command.substring(1);
         }
@@ -276,17 +274,30 @@ public abstract class RequestHandler {
 
     public static class RequestHandlerException extends Exception {
 
+        /**
+         * Constructs a new {@code RequestHandlerException}.
+         * @param message the detail message. The detail message is saved for later retrieval by the {@link #getMessage()} method.
+         */
         public RequestHandlerException(String message) {
             super(message);
         }
+
+        /**
+         * Constructs a new {@code RequestHandlerException}.
+         * @param message the detail message. The detail message is saved for later retrieval by the {@link #getMessage()} method.
+         * @param cause the cause (which is saved for later retrieval by the {@link #getCause()} method).
+         */
         public RequestHandlerException(String message, Throwable cause) {
             super(message, cause);
         }
+
+        /**
+         * Constructs a new {@code RequestHandlerException}.
+         * @param cause the cause (which is saved for later retrieval by the {@link #getCause()} method).
+         */
         public RequestHandlerException(Throwable cause) {
             super(cause);
         }
-        public RequestHandlerException() {
-        }
     }
 
     public static class RequestHandlerErrorException extends RequestHandlerException {
@@ -300,6 +311,7 @@ public abstract class RequestHandler {
         public RequestHandlerBadRequestException(String message) {
             super(message);
         }
+
         public RequestHandlerBadRequestException(String message, Throwable cause) {
             super(message, cause);
         }
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/handler/VersionHandler.java b/src/org/openstreetmap/josm/io/remotecontrol/handler/VersionHandler.java
index 431dec2..cb98141 100644
--- a/src/org/openstreetmap/josm/io/remotecontrol/handler/VersionHandler.java
+++ b/src/org/openstreetmap/josm/io/remotecontrol/handler/VersionHandler.java
@@ -58,6 +58,6 @@ public class VersionHandler extends RequestHandler {
 
     @Override
     public String[] getUsageExamples() {
-        return new String[] { "/version", "/version?jsonp=test"};
+        return new String[] {"/version", "/version?jsonp=test"};
     }
 }
diff --git a/src/org/openstreetmap/josm/io/session/GeoImageSessionExporter.java b/src/org/openstreetmap/josm/io/session/GeoImageSessionExporter.java
index 68252d2..37d8402 100644
--- a/src/org/openstreetmap/josm/io/session/GeoImageSessionExporter.java
+++ b/src/org/openstreetmap/josm/io/session/GeoImageSessionExporter.java
@@ -44,9 +44,10 @@ public class GeoImageSessionExporter implements SessionLayerExporter {
         export.setSelected(true);
         final JLabel lbl = new JLabel(layer.getName(), layer.getIcon(), SwingConstants.LEFT);
         lbl.setToolTipText(layer.getToolTipText());
+        lbl.setLabelFor(export);
         p.add(export, GBC.std());
         p.add(lbl, GBC.std());
-        p.add(GBC.glue(1,0), GBC.std().fill(GBC.HORIZONTAL));
+        p.add(GBC.glue(1, 0), GBC.std().fill(GBC.HORIZONTAL));
         return p;
     }
 
diff --git a/src/org/openstreetmap/josm/io/session/GeoImageSessionImporter.java b/src/org/openstreetmap/josm/io/session/GeoImageSessionImporter.java
index 4de8a7f..113fbd8 100644
--- a/src/org/openstreetmap/josm/io/session/GeoImageSessionImporter.java
+++ b/src/org/openstreetmap/josm/io/session/GeoImageSessionImporter.java
@@ -9,6 +9,7 @@ import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.gui.layer.GpxLayer;
 import org.openstreetmap.josm.gui.layer.Layer;
@@ -23,7 +24,8 @@ import org.w3c.dom.NodeList;
 public class GeoImageSessionImporter implements SessionLayerImporter {
 
     @Override
-    public Layer load(Element elem, SessionReader.ImportSupport support, ProgressMonitor progressMonitor) throws IOException, IllegalDataException {
+    public Layer load(Element elem, SessionReader.ImportSupport support, ProgressMonitor progressMonitor)
+            throws IOException, IllegalDataException {
         String version = elem.getAttribute("version");
         if (!"0.1".equals(version)) {
             throw new IllegalDataException(tr("Version ''{0}'' of meta data for geoimage layer is not supported. Expected: 0.1", version));
@@ -32,14 +34,14 @@ public class GeoImageSessionImporter implements SessionLayerImporter {
         List<ImageEntry> entries = new ArrayList<>();
         NodeList imgNodes = elem.getChildNodes();
         boolean useThumbs = false;
-        for (int i=0; i<imgNodes.getLength(); ++i) {
+        for (int i = 0; i < imgNodes.getLength(); ++i) {
             Node imgNode = imgNodes.item(i);
             if (imgNode.getNodeType() == Node.ELEMENT_NODE) {
                 Element imgElem = (Element) imgNode;
                 if ("geoimage".equals(imgElem.getTagName())) {
                     ImageEntry entry = new ImageEntry();
                     NodeList attrNodes = imgElem.getChildNodes();
-                    for (int j=0; j<attrNodes.getLength(); ++j) {
+                    for (int j = 0; j < attrNodes.getLength(); ++j) {
                         Node attrNode = attrNodes.item(j);
                         if (attrNode.getNodeType() == Node.ELEMENT_NODE) {
                             Element attrElem = (Element) attrNode;
@@ -54,16 +56,16 @@ public class GeoImageSessionImporter implements SessionLayerImporter {
                                     entry.setPos(new LatLon(lat, lon));
                                     break;
                                 case "speed":
-                                    entry.setSpeed(Double.parseDouble(attrElem.getTextContent()));
+                                    entry.setSpeed(Double.valueOf(attrElem.getTextContent()));
                                     break;
                                 case "elevation":
-                                    entry.setElevation(Double.parseDouble(attrElem.getTextContent()));
+                                    entry.setElevation(Double.valueOf(attrElem.getTextContent()));
                                     break;
                                 case "gps-time":
                                     entry.setGpsTime(new Date(Long.parseLong(attrElem.getTextContent())));
                                     break;
                                 case "exif-orientation":
-                                    entry.setExifOrientation(Integer.parseInt(attrElem.getTextContent()));
+                                    entry.setExifOrientation(Integer.valueOf(attrElem.getTextContent()));
                                     break;
                                 case "exif-time":
                                     entry.setExifTime(new Date(Long.parseLong(attrElem.getTextContent())));
@@ -86,7 +88,10 @@ public class GeoImageSessionImporter implements SessionLayerImporter {
                                 }
                                 // TODO: handle thumbnail loading
                             } catch (NumberFormatException e) {
-                                // nothing
+                                // do nothing
+                                if (Main.isTraceEnabled()) {
+                                    Main.trace(e.getMessage());
+                                }
                             }
                         }
                     }
diff --git a/src/org/openstreetmap/josm/io/session/GpxTracksSessionExporter.java b/src/org/openstreetmap/josm/io/session/GpxTracksSessionExporter.java
index f8a4f20..46015b5 100644
--- a/src/org/openstreetmap/josm/io/session/GpxTracksSessionExporter.java
+++ b/src/org/openstreetmap/josm/io/session/GpxTracksSessionExporter.java
@@ -63,7 +63,7 @@ public class GpxTracksSessionExporter implements SessionLayerExporter {
         export.setSelected(true);
         final JLabel lbl = new JLabel(layer.getName(), layer.getIcon(), SwingConstants.LEFT);
         lbl.setToolTipText(layer.getToolTipText());
-
+        lbl.setLabelFor(export);
         JLabel lblData = new JLabel(tr("Data:"));
         /* I18n: Refer to a OSM data file in session file */ link = new JRadioButton(tr("local file"));
         link.putClientProperty("actionname", "link");
@@ -120,12 +120,12 @@ public class GpxTracksSessionExporter implements SessionLayerExporter {
 
         topRow.add(export, GBC.std());
         topRow.add(lbl, GBC.std());
-        topRow.add(GBC.glue(1,0), GBC.std().fill(GBC.HORIZONTAL));
+        topRow.add(GBC.glue(1, 0), GBC.std().fill(GBC.HORIZONTAL));
         p.add(topRow, GBC.eol().fill(GBC.HORIZONTAL));
-        p.add(lblData, GBC.std().insets(10,0,0,0));
+        p.add(lblData, GBC.std().insets(10, 0, 0, 0));
         p.add(link, GBC.std());
         p.add(include, GBC.eol());
-        p.add(cards, GBC.eol().insets(15,0,3,3));
+        p.add(cards, GBC.eol().insets(15, 0, 3, 3));
 
         export.addItemListener(new ItemListener() {
             @Override
diff --git a/src/org/openstreetmap/josm/io/session/GpxTracksSessionImporter.java b/src/org/openstreetmap/josm/io/session/GpxTracksSessionImporter.java
index 0e6d26b..7956996 100644
--- a/src/org/openstreetmap/josm/io/session/GpxTracksSessionImporter.java
+++ b/src/org/openstreetmap/josm/io/session/GpxTracksSessionImporter.java
@@ -22,7 +22,8 @@ import org.w3c.dom.Element;
 public class GpxTracksSessionImporter implements SessionLayerImporter {
 
     @Override
-    public Layer load(Element elem, SessionReader.ImportSupport support, ProgressMonitor progressMonitor) throws IOException, IllegalDataException {
+    public Layer load(Element elem, SessionReader.ImportSupport support, ProgressMonitor progressMonitor)
+            throws IOException, IllegalDataException {
         String version = elem.getAttribute("version");
         if (!"0.1".equals(version)) {
             throw new IllegalDataException(tr("Version ''{0}'' of meta data for gpx track layer is not supported. Expected: 0.1", version));
diff --git a/src/org/openstreetmap/josm/io/session/ImagerySessionExporter.java b/src/org/openstreetmap/josm/io/session/ImagerySessionExporter.java
index da5ce92..0b76694 100644
--- a/src/org/openstreetmap/josm/io/session/ImagerySessionExporter.java
+++ b/src/org/openstreetmap/josm/io/session/ImagerySessionExporter.java
@@ -16,6 +16,7 @@ import javax.swing.SwingConstants;
 
 import org.openstreetmap.josm.data.Preferences;
 import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryPreferenceEntry;
+import org.openstreetmap.josm.gui.layer.AbstractTileSourceLayer;
 import org.openstreetmap.josm.gui.layer.ImageryLayer;
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.TMSLayer;
@@ -56,9 +57,10 @@ public class ImagerySessionExporter implements SessionLayerExporter {
         export.setSelected(true);
         final JLabel lbl = new JLabel(layer.getName(), layer.getIcon(), SwingConstants.LEFT);
         lbl.setToolTipText(layer.getToolTipText());
+        lbl.setLabelFor(export);
         p.add(export, GBC.std());
         p.add(lbl, GBC.std());
-        p.add(GBC.glue(1,0), GBC.std().fill(GBC.HORIZONTAL));
+        p.add(GBC.glue(1, 0), GBC.std().fill(GBC.HORIZONTAL));
         return p;
     }
 
@@ -78,13 +80,14 @@ public class ImagerySessionExporter implements SessionLayerExporter {
         layerElem.setAttribute("type", "imagery");
         layerElem.setAttribute("version", "0.1");
         ImageryPreferenceEntry e = new ImageryPreferenceEntry(layer.getInfo());
-        Map<String,String> data = new LinkedHashMap<>(Preferences.serializeStruct(e, ImageryPreferenceEntry.class));
-        if (layer instanceof WMSLayer) {
-            WMSLayer wms = (WMSLayer) layer;
-            data.put("automatic-downloading", Boolean.toString(wms.hasAutoDownload()));
-            data.put("automatically-change-resolution", Boolean.toString(wms.isAutoResolution()));
+        Map<String, String> data = new LinkedHashMap<>(Preferences.serializeStruct(e, ImageryPreferenceEntry.class));
+        if (layer instanceof AbstractTileSourceLayer) {
+            AbstractTileSourceLayer tsLayer = (AbstractTileSourceLayer) layer;
+            data.put("automatic-downloading", Boolean.toString(tsLayer.autoLoad));
+            data.put("automatically-change-resolution", Boolean.toString(tsLayer.autoZoom));
+            data.put("show-errors", Boolean.toString(tsLayer.showErrors));
         }
-        for (Map.Entry<String,String> entry : data.entrySet()) {
+        for (Map.Entry<String, String> entry : data.entrySet()) {
             Element attrElem = support.createElement(entry.getKey());
             layerElem.appendChild(attrElem);
             attrElem.appendChild(support.createTextNode(entry.getValue()));
diff --git a/src/org/openstreetmap/josm/io/session/ImagerySessionImporter.java b/src/org/openstreetmap/josm/io/session/ImagerySessionImporter.java
index 95d48ec..0af3a83 100644
--- a/src/org/openstreetmap/josm/io/session/ImagerySessionImporter.java
+++ b/src/org/openstreetmap/josm/io/session/ImagerySessionImporter.java
@@ -10,9 +10,9 @@ import java.util.Map;
 import org.openstreetmap.josm.data.Preferences;
 import org.openstreetmap.josm.data.imagery.ImageryInfo;
 import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryPreferenceEntry;
+import org.openstreetmap.josm.gui.layer.AbstractTileSourceLayer;
 import org.openstreetmap.josm.gui.layer.ImageryLayer;
 import org.openstreetmap.josm.gui.layer.Layer;
-import org.openstreetmap.josm.gui.layer.WMSLayer;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.io.IllegalDataException;
 import org.openstreetmap.josm.io.session.SessionReader.ImportSupport;
@@ -35,7 +35,7 @@ public class ImagerySessionImporter implements SessionLayerImporter {
 
         NodeList nodes = elem.getChildNodes();
 
-        for (int i=0; i<nodes.getLength(); ++i) {
+        for (int i = 0; i < nodes.getLength(); ++i) {
             Node node = nodes.item(i);
             if (node.getNodeType() == Node.ELEMENT_NODE) {
                 Element e = (Element) node;
@@ -45,15 +45,18 @@ public class ImagerySessionImporter implements SessionLayerImporter {
         ImageryPreferenceEntry prefEntry = Preferences.deserializeStruct(attributes, ImageryPreferenceEntry.class);
         ImageryInfo i = new ImageryInfo(prefEntry);
         ImageryLayer layer = ImageryLayer.create(i);
-        if (layer instanceof WMSLayer) {
-            WMSLayer wms = (WMSLayer) layer;
-            String autoDownload = attributes.get("automatic-downloading");
-            if (autoDownload != null) {
-                wms.setAutoDownload(Boolean.parseBoolean(autoDownload));
+        if (layer instanceof AbstractTileSourceLayer) {
+            AbstractTileSourceLayer tsLayer = (AbstractTileSourceLayer) layer;
+            if (attributes.containsKey("automatic-downloading")) {
+                tsLayer.autoLoad = Boolean.valueOf(attributes.get("automatic-downloading"));
             }
-            String autoResolution = attributes.get("automatically-change-resolution");
-            if (autoResolution != null) {
-                wms.setAutoResolution(Boolean.parseBoolean(autoResolution));
+
+            if (attributes.containsKey("automatically-change-resolution")) {
+                tsLayer.autoZoom = Boolean.valueOf(attributes.get("automatically-change-resolution"));
+            }
+
+            if (attributes.containsKey("show-errors")) {
+                tsLayer.showErrors = Boolean.valueOf(attributes.get("show-errors"));
             }
         }
         return layer;
diff --git a/src/org/openstreetmap/josm/io/session/MarkerSessionExporter.java b/src/org/openstreetmap/josm/io/session/MarkerSessionExporter.java
index fb33a66..50af879 100644
--- a/src/org/openstreetmap/josm/io/session/MarkerSessionExporter.java
+++ b/src/org/openstreetmap/josm/io/session/MarkerSessionExporter.java
@@ -51,9 +51,10 @@ public class MarkerSessionExporter implements SessionLayerExporter {
         export.setSelected(true);
         final JLabel lbl = new JLabel(layer.getName(), layer.getIcon(), SwingConstants.LEFT);
         lbl.setToolTipText(layer.getToolTipText());
+        lbl.setLabelFor(export);
         p.add(export, GBC.std());
         p.add(lbl, GBC.std());
-        p.add(GBC.glue(1,0), GBC.std().fill(GBC.HORIZONTAL));
+        p.add(GBC.glue(1, 0), GBC.std().fill(GBC.HORIZONTAL));
         return p;
     }
 
diff --git a/src/org/openstreetmap/josm/io/session/MarkerSessionImporter.java b/src/org/openstreetmap/josm/io/session/MarkerSessionImporter.java
index 9010d3e..35fb167 100644
--- a/src/org/openstreetmap/josm/io/session/MarkerSessionImporter.java
+++ b/src/org/openstreetmap/josm/io/session/MarkerSessionImporter.java
@@ -40,7 +40,8 @@ public class MarkerSessionImporter implements SessionLayerImporter {
             }
 
             try (InputStream in = support.getInputStream(fileStr)) {
-                GpxImporter.GpxImporterData importData = GpxImporter.loadLayers(in, support.getFile(fileStr), support.getLayerName(), null, progressMonitor);
+                GpxImporter.GpxImporterData importData = GpxImporter.loadLayers(in, support.getFile(fileStr), support.getLayerName(),
+                        null, progressMonitor);
 
                 support.addPostLayersTask(importData.getPostLayerTask());
 
diff --git a/src/org/openstreetmap/josm/io/session/OsmDataSessionExporter.java b/src/org/openstreetmap/josm/io/session/OsmDataSessionExporter.java
index 278bc02..4d39a01 100644
--- a/src/org/openstreetmap/josm/io/session/OsmDataSessionExporter.java
+++ b/src/org/openstreetmap/josm/io/session/OsmDataSessionExporter.java
@@ -88,7 +88,7 @@ public class OsmDataSessionExporter implements SessionLayerExporter {
         export.setSelected(true);
         final JLabel lbl = new JLabel(layer.getName(), layer.getIcon(), SwingConstants.LEFT);
         lbl.setToolTipText(layer.getToolTipText());
-
+        lbl.setLabelFor(export);
         JLabel lblData = new JLabel(tr("Data:"));
         /* I18n: Refer to a OSM data file in session file */ link = new JRadioButton(tr("local file"));
         link.putClientProperty("actionname", "link");
@@ -109,8 +109,8 @@ public class OsmDataSessionExporter implements SessionLayerExporter {
             tf.setText(file.getPath());
             tf.setEditable(false);
             cardLink.add(tf, GBC.std());
-            save.setMargin(new Insets(0,0,0,0));
-            cardLink.add(save, GBC.eol().insets(2,0,0,0));
+            save.setMargin(new Insets(0, 0, 0, 0));
+            cardLink.add(save, GBC.eol().insets(2, 0, 0, 0));
         } else {
             cardLink.add(new JLabel(tr("No file association")), GBC.eol());
         }
@@ -149,12 +149,12 @@ public class OsmDataSessionExporter implements SessionLayerExporter {
 
         topRow.add(export, GBC.std());
         topRow.add(lbl, GBC.std());
-        topRow.add(GBC.glue(1,0), GBC.std().fill(GBC.HORIZONTAL));
+        topRow.add(GBC.glue(1, 0), GBC.std().fill(GBC.HORIZONTAL));
         p.add(topRow, GBC.eol().fill(GBC.HORIZONTAL));
-        p.add(lblData, GBC.std().insets(10,0,0,0));
+        p.add(lblData, GBC.std().insets(10, 0, 0, 0));
         p.add(link, GBC.std());
         p.add(include, GBC.eol());
-        p.add(cards, GBC.eol().insets(15,0,3,3));
+        p.add(cards, GBC.eol().insets(15, 0, 3, 3));
 
         export.addItemListener(new ItemListener() {
             @Override
diff --git a/src/org/openstreetmap/josm/io/session/OsmDataSessionImporter.java b/src/org/openstreetmap/josm/io/session/OsmDataSessionImporter.java
index 907216a..5e75442 100644
--- a/src/org/openstreetmap/josm/io/session/OsmDataSessionImporter.java
+++ b/src/org/openstreetmap/josm/io/session/OsmDataSessionImporter.java
@@ -38,7 +38,8 @@ public class OsmDataSessionImporter implements SessionLayerImporter {
 
             OsmImporter importer = new OsmImporter();
             try (InputStream in = support.getInputStream(fileStr)) {
-                OsmImporter.OsmImporterData importData = importer.loadLayer(in, support.getFile(fileStr), support.getLayerName(), progressMonitor);
+                OsmImporter.OsmImporterData importData = importer.loadLayer(in, support.getFile(fileStr), support.getLayerName(),
+                        progressMonitor);
 
                 support.addPostLayersTask(importData.getPostLayerTask());
                 return importData.getLayer();
diff --git a/src/org/openstreetmap/josm/io/session/SessionImporter.java b/src/org/openstreetmap/josm/io/session/SessionImporter.java
index 8dc2c87..4151506 100644
--- a/src/org/openstreetmap/josm/io/session/SessionImporter.java
+++ b/src/org/openstreetmap/josm/io/session/SessionImporter.java
@@ -12,6 +12,7 @@ import org.openstreetmap.josm.actions.SessionLoadAction.Loader;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.io.FileImporter;
 import org.openstreetmap.josm.io.IllegalDataException;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
  * File importer allowing to import session files (*.jos/joz files).
@@ -34,7 +35,7 @@ public class SessionImporter extends FileImporter {
 
     @Override
     public void importData(File file, ProgressMonitor progressMonitor) throws IOException, IllegalDataException {
-        boolean zip = file.getName().toLowerCase().endsWith(".joz");
+        boolean zip = Utils.hasExtension(file, "joz");
         Main.worker.submit(new Loader(file, zip));
     }
 }
diff --git a/src/org/openstreetmap/josm/io/session/SessionReader.java b/src/org/openstreetmap/josm/io/session/SessionReader.java
index 4b323e4..3b444fe 100644
--- a/src/org/openstreetmap/josm/io/session/SessionReader.java
+++ b/src/org/openstreetmap/josm/io/session/SessionReader.java
@@ -57,7 +57,8 @@ import org.xml.sax.SAXException;
  */
 public class SessionReader {
 
-    private static Map<String, Class<? extends SessionLayerImporter>> sessionLayerImporters = new HashMap<>();
+    private static final Map<String, Class<? extends SessionLayerImporter>> sessionLayerImporters = new HashMap<>();
+
     static {
         registerSessionLayerImporter("osm-data", OsmDataSessionImporter.class);
         registerSessionLayerImporter("imagery", ImagerySessionImporter.class);
@@ -178,7 +179,7 @@ public class SessionReader {
                 try {
                     return new BufferedInputStream(new FileInputStream(file));
                 } catch (FileNotFoundException e) {
-                    throw new IOException(tr("File ''{0}'' does not exist.", file.getPath()));
+                    throw new IOException(tr("File ''{0}'' does not exist.", file.getPath()), e);
                 }
             } else if (inZipPath != null) {
                 ZipEntry entry = zipFile.getEntry(inZipPath);
@@ -306,7 +307,8 @@ public class SessionReader {
             Element centerEl = getElementByTagName(viewportEl, "center");
             if (centerEl != null && centerEl.hasAttribute("lat") && centerEl.hasAttribute("lon")) {
                 try {
-                    LatLon centerLL = new LatLon(Double.parseDouble(centerEl.getAttribute("lat")), Double.parseDouble(centerEl.getAttribute("lon")));
+                    LatLon centerLL = new LatLon(Double.parseDouble(centerEl.getAttribute("lat")),
+                            Double.parseDouble(centerEl.getAttribute("lon")));
                     center = Projections.project(centerLL);
                 } catch (NumberFormatException ex) {
                     Main.warn(ex);
@@ -351,7 +353,7 @@ public class SessionReader {
 
         NodeList nodes = layersEl.getChildNodes();
 
-        for (int i=0; i<nodes.getLength(); ++i) {
+        for (int i = 0; i < nodes.getLength(); ++i) {
             Node node = nodes.item(i);
             if (node.getNodeType() == Node.ELEMENT_NODE) {
                 Element e = (Element) node;
@@ -361,7 +363,7 @@ public class SessionReader {
                     }
                     Integer idx = null;
                     try {
-                        idx = Integer.parseInt(e.getAttribute("index"));
+                        idx = Integer.valueOf(e.getAttribute("index"));
                     } catch (NumberFormatException ex) {
                         Main.warn(ex);
                     }
@@ -379,7 +381,7 @@ public class SessionReader {
                         for (String sd : depStr.split(",")) {
                             Integer d = null;
                             try {
-                                d = Integer.parseInt(sd);
+                                d = Integer.valueOf(sd);
                             } catch (NumberFormatException ex) {
                                 Main.warn(ex);
                             }
@@ -530,7 +532,7 @@ public class SessionReader {
                         ExtendedDialog dlg = new ExtendedDialog(
                                 Main.parent,
                                 title,
-                                new String[] { tr("Cancel"), tr("Skip layer and continue") }
+                                new String[] {tr("Cancel"), tr("Skip layer and continue")}
                                 );
                         dlg.setButtonIcons(new String[] {"cancel", "dialogs/next"});
                         dlg.setIcon(icon);
@@ -581,7 +583,7 @@ public class SessionReader {
         Enumeration<? extends ZipEntry> entries = zipFile.entries();
         while (entries.hasMoreElements()) {
             ZipEntry entry = entries.nextElement();
-            if (entry.getName().toLowerCase().endsWith(".jos")) {
+            if (Utils.hasExtension(entry.getName(), "jos")) {
                 josEntry = entry;
                 break;
             }
@@ -592,7 +594,8 @@ public class SessionReader {
         return zipFile.getInputStream(josEntry);
     }
 
-    private void loadSession(InputStream josIS, URI sessionFileURI, boolean zip, ProgressMonitor progressMonitor) throws IOException, IllegalDataException {
+    private void loadSession(InputStream josIS, URI sessionFileURI, boolean zip, ProgressMonitor progressMonitor)
+            throws IOException, IllegalDataException {
 
         this.sessionFileURI = sessionFileURI;
         this.zip = zip;
diff --git a/src/org/openstreetmap/josm/io/session/SessionWriter.java b/src/org/openstreetmap/josm/io/session/SessionWriter.java
index 1f9983b..0cdaa83 100644
--- a/src/org/openstreetmap/josm/io/session/SessionWriter.java
+++ b/src/org/openstreetmap/josm/io/session/SessionWriter.java
@@ -37,6 +37,7 @@ import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.layer.TMSLayer;
 import org.openstreetmap.josm.gui.layer.WMSLayer;
+import org.openstreetmap.josm.gui.layer.WMTSLayer;
 import org.openstreetmap.josm.gui.layer.geoimage.GeoImageLayer;
 import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
 import org.openstreetmap.josm.tools.MultiMap;
@@ -48,10 +49,12 @@ import org.w3c.dom.Text;
 public class SessionWriter {
 
     private static Map<Class<? extends Layer>, Class<? extends SessionLayerExporter>> sessionLayerExporters = new HashMap<>();
+
     static {
         registerSessionLayerExporter(OsmDataLayer.class , OsmDataSessionExporter.class);
         registerSessionLayerExporter(TMSLayer.class , ImagerySessionExporter.class);
         registerSessionLayerExporter(WMSLayer.class , ImagerySessionExporter.class);
+        registerSessionLayerExporter(WMTSLayer.class , ImagerySessionExporter.class);
         registerSessionLayerExporter(GpxLayer.class , GpxTracksSessionExporter.class);
         registerSessionLayerExporter(GeoImageLayer.class , GeoImageSessionExporter.class);
         registerSessionLayerExporter(MarkerLayer.class, MarkerSessionExporter.class);
@@ -60,7 +63,7 @@ public class SessionWriter {
     /**
      * Register a session layer exporter.
      *
-     * The exporter class must have an one-argument constructor with layerClass as formal parameter type.
+     * The exporter class must have a one-argument constructor with layerClass as formal parameter type.
      */
     public static void registerSessionLayerExporter(Class<? extends Layer> layerClass, Class<? extends SessionLayerExporter> exporter) {
         sessionLayerExporters.put(layerClass, exporter);
@@ -89,7 +92,7 @@ public class SessionWriter {
     /**
      * Constructs a new {@code SessionWriter}.
      * @param layers The ordered list of layers to save
-     * @param active The index of active layer in {@code layers} (starts to 0). Ignored if set to -1
+     * @param active The index of active layer in {@code layers} (starts at 0). Ignored if set to -1
      * @param exporters The exporters to use to save layers
      * @param zip {@code true} if a joz archive has to be created, {@code false otherwise}
      * @since 6271
@@ -195,7 +198,7 @@ public class SessionWriter {
         }
         root.appendChild(layersEl);
 
-        for (int index=0; index<layers.size(); ++index) {
+        for (int index = 0; index < layers.size(); ++index) {
             Layer layer = layers.get(index);
             SessionLayerExporter exporter = exporters.get(layer);
             ExportSupport support = new ExportSupport(doc, index+1);
@@ -203,7 +206,7 @@ public class SessionWriter {
             el.setAttribute("index", Integer.toString(index+1));
             el.setAttribute("name", layer.getName());
             el.setAttribute("visible", Boolean.toString(layer.isVisible()));
-            if (layer.getOpacity() != 1.0) {
+            if (!Utils.equalsEpsilon(layer.getOpacity(), 1.0)) {
                 el.setAttribute("opacity", Double.toString(layer.getOpacity()));
             }
             Set<Layer> deps = dependencies.get(layer);
diff --git a/src/org/openstreetmap/josm/plugins/Plugin.java b/src/org/openstreetmap/josm/plugins/Plugin.java
index d1820bf..86f806d 100644
--- a/src/org/openstreetmap/josm/plugins/Plugin.java
+++ b/src/org/openstreetmap/josm/plugins/Plugin.java
@@ -92,7 +92,9 @@ public abstract class Plugin implements MapFrameListener {
      * Called in the preferences dialog to create a preferences page for the plugin,
      * if any available.
      */
-    public PreferenceSetting getPreferenceSetting() { return null; }
+    public PreferenceSetting getPreferenceSetting() {
+        return null;
+    }
 
     /**
      * Called in the download dialog to give the plugin a chance to modify the list
@@ -102,8 +104,11 @@ public abstract class Plugin implements MapFrameListener {
 
     /**
      * Copies the resource 'from' to the file in the plugin directory named 'to'.
+     * @throws FileNotFoundException if the file exists but is a directory rather than a regular file,
+     * does not exist but cannot be created, or cannot be opened for any other reason
+     * @throws IOException if any other I/O error occurs
      */
-    public void copy(String from, String to) throws FileNotFoundException, IOException {
+    public void copy(String from, String to) throws IOException {
         String pluginDirName = getPluginDir();
         File pluginDir = new File(pluginDirName);
         if (!pluginDir.exists()) {
@@ -117,7 +122,7 @@ public abstract class Plugin implements MapFrameListener {
                 throw new IOException("Resource not found: "+from);
             }
             byte[] buffer = new byte[8192];
-            for(int len = in.read(buffer); len > 0; len = in.read(buffer)) {
+            for (int len = in.read(buffer); len > 0; len = in.read(buffer)) {
                 out.write(buffer, 0, len);
             }
         }
diff --git a/src/org/openstreetmap/josm/plugins/PluginDownloadTask.java b/src/org/openstreetmap/josm/plugins/PluginDownloadTask.java
index d841a63..5766acb 100644
--- a/src/org/openstreetmap/josm/plugins/PluginDownloadTask.java
+++ b/src/org/openstreetmap/josm/plugins/PluginDownloadTask.java
@@ -70,7 +70,7 @@ public class PluginDownloadTask extends PleaseWaitRunnable{
      * @throws IllegalArgumentException if toUpdate is null
      */
     public PluginDownloadTask(ProgressMonitor monitor, Collection<PluginInformation> toUpdate, String title) {
-        super(title, monitor == null? NullProgressMonitor.INSTANCE: monitor, false /* don't ignore exceptions */);
+        super(title, monitor == null ? NullProgressMonitor.INSTANCE : monitor, false /* don't ignore exceptions */);
         CheckParameterUtil.ensureParameterNotNull(toUpdate, "toUpdate");
         this.toUpdate.addAll(toUpdate);
     }
@@ -90,7 +90,7 @@ public class PluginDownloadTask extends PleaseWaitRunnable{
     @Override
     protected void cancel() {
         this.canceled = true;
-        synchronized(this) {
+        synchronized (this) {
             if (downloadConnection != null) {
                 downloadConnection.disconnect();
             }
@@ -100,7 +100,7 @@ public class PluginDownloadTask extends PleaseWaitRunnable{
     @Override
     protected void finish() {}
 
-    protected void download(PluginInformation pi, File file) throws PluginDownloadException{
+    protected void download(PluginInformation pi, File file) throws PluginDownloadException {
         if (pi.mainversion > Version.getInstance().getVersion()) {
             ExtendedDialog dialog = new ExtendedDialog(
                     progressMonitor.getWindowParent(),
@@ -110,7 +110,7 @@ public class PluginDownloadTask extends PleaseWaitRunnable{
                         tr("Skip Download") }
             );
             dialog.setContent(tr("JOSM version {0} required for plugin {1}.", pi.mainversion, pi.name));
-            dialog.setButtonIcons(new String[] { "download", "cancel" });
+            dialog.setButtonIcons(new String[] {"download", "cancel"});
             dialog.showDialog();
             int answer = dialog.getValue();
             if (answer != 1)
@@ -123,7 +123,7 @@ public class PluginDownloadTask extends PleaseWaitRunnable{
                 throw new PluginDownloadException(msg);
             }
             URL url = new URL(pi.downloadlink);
-            synchronized(this) {
+            synchronized (this) {
                 downloadConnection = CachedFile.connectFollowingRedirect(url, PLUGIN_MIME_TYPES, null);
             }
             try (
@@ -136,15 +136,16 @@ public class PluginDownloadTask extends PleaseWaitRunnable{
                 }
             }
         } catch (MalformedURLException e) {
-            String msg = tr("Cannot download plugin ''{0}''. Its download link ''{1}'' is not a valid URL. Skipping download.", pi.name, pi.downloadlink);
+            String msg = tr("Cannot download plugin ''{0}''. Its download link ''{1}'' is not a valid URL. Skipping download.",
+                    pi.name, pi.downloadlink);
             Main.warn(msg);
-            throw new PluginDownloadException(msg);
+            throw new PluginDownloadException(msg, e);
         } catch (IOException e) {
             if (canceled)
                 return;
             throw new PluginDownloadException(e);
         } finally {
-            synchronized(this) {
+            synchronized (this) {
                 downloadConnection = null;
             }
         }
@@ -166,7 +167,7 @@ public class PluginDownloadTask extends PleaseWaitRunnable{
             File pluginFile = new File(pluginDir, d.name + ".jar.new");
             try {
                 download(d, pluginFile);
-            } catch(PluginDownloadException e) {
+            } catch (PluginDownloadException e) {
                 Main.error(e);
                 failed.add(d);
                 continue;
diff --git a/src/org/openstreetmap/josm/plugins/PluginHandler.java b/src/org/openstreetmap/josm/plugins/PluginHandler.java
index 89a98b6..1daf3da 100644
--- a/src/org/openstreetmap/josm/plugins/PluginHandler.java
+++ b/src/org/openstreetmap/josm/plugins/PluginHandler.java
@@ -27,15 +27,13 @@ import java.util.HashSet;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
 import java.util.TreeSet;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutionException;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
 import java.util.concurrent.FutureTask;
 import java.util.jar.JarFile;
 
@@ -51,6 +49,7 @@ import javax.swing.JScrollPane;
 import javax.swing.UIManager;
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.actions.RestartAction;
 import org.openstreetmap.josm.data.Version;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane.ButtonSpec;
@@ -97,11 +96,11 @@ public final class PluginHandler {
             new DeprecatedPlugin("ywms", IN_CORE),
             new DeprecatedPlugin("tways-0.2", IN_CORE),
             new DeprecatedPlugin("geotagged", IN_CORE),
-            new DeprecatedPlugin("landsat", tr("replaced by new {0} plugin","lakewalker")),
+            new DeprecatedPlugin("landsat", tr("replaced by new {0} plugin", "lakewalker")),
             new DeprecatedPlugin("namefinder", IN_CORE),
             new DeprecatedPlugin("waypoints", IN_CORE),
             new DeprecatedPlugin("slippy_map_chooser", IN_CORE),
-            new DeprecatedPlugin("tcx-support", tr("replaced by new {0} plugin","dataimport")),
+            new DeprecatedPlugin("tcx-support", tr("replaced by new {0} plugin", "dataimport")),
             new DeprecatedPlugin("usertools", IN_CORE),
             new DeprecatedPlugin("AgPifoJ", IN_CORE),
             new DeprecatedPlugin("utilsplugin", IN_CORE),
@@ -114,9 +113,9 @@ public final class PluginHandler {
             new DeprecatedPlugin("slippymap", IN_CORE),
             new DeprecatedPlugin("wmsplugin", IN_CORE),
             new DeprecatedPlugin("ParallelWay", IN_CORE),
-            new DeprecatedPlugin("dumbutils", tr("replaced by new {0} plugin","utilsplugin2")),
+            new DeprecatedPlugin("dumbutils", tr("replaced by new {0} plugin", "utilsplugin2")),
             new DeprecatedPlugin("ImproveWayAccuracy", IN_CORE),
-            new DeprecatedPlugin("Curves", tr("replaced by new {0} plugin","utilsplugin2")),
+            new DeprecatedPlugin("Curves", tr("replaced by new {0} plugin", "utilsplugin2")),
             new DeprecatedPlugin("epsg31287", tr("replaced by new {0} plugin", "proj4j")),
             new DeprecatedPlugin("licensechange", tr("no longer required")),
             new DeprecatedPlugin("restart", IN_CORE),
@@ -124,6 +123,8 @@ public final class PluginHandler {
             new DeprecatedPlugin("openstreetbugs", tr("replaced by new {0} plugin", "notes")),
             new DeprecatedPlugin("nearclick", tr("no longer required")),
             new DeprecatedPlugin("notes", IN_CORE),
+            new DeprecatedPlugin("mirrored_download", IN_CORE),
+            new DeprecatedPlugin("ImageryCache", IN_CORE),
         });
     }
 
@@ -193,6 +194,11 @@ public final class PluginHandler {
      */
     public static class DynamicURLClassLoader extends URLClassLoader {
 
+        /**
+         * Constructs a new {@code DynamicURLClassLoader}.
+         * @param urls the URLs from which to load classes and resources
+         * @param parent the parent class loader for delegation
+         */
         public DynamicURLClassLoader(URL[] urls, ClassLoader parent) {
             super(urls, parent);
         }
@@ -206,7 +212,13 @@ public final class PluginHandler {
     /**
      * List of unmaintained plugins. Not really up-to-date as the vast majority of plugins are not maintained after a few months, sadly...
      */
-    private static final String [] UNMAINTAINED_PLUGINS = new String[] {"gpsbabelgui", "Intersect_way"};
+    private static final String[] UNMAINTAINED_PLUGINS = new String[] {
+        "gpsbabelgui",
+        "Intersect_way",
+        "CADTools",                // See #11438, #11518, https://github.com/ROTARIUANAMARIA/CADTools/issues/1
+        "ContourOverlappingMerge", // See #11202, #11518, https://github.com/bularcasergiu/ContourOverlappingMerge/issues/1
+        "LaneConnector"            // See #11468, #11518, https://github.com/TrifanAdrian/LanecConnectorPlugin/issues/1
+    };
 
     /**
      * Default time-based update interval, in days (pluginmanager.time-based-update.interval)
@@ -227,7 +239,6 @@ public final class PluginHandler {
      * Add here all ClassLoader whose resource should be searched.
      */
     private static final List<ClassLoader> sources = new LinkedList<>();
-
     static {
         try {
             sources.add(ClassLoader.getSystemClassLoader());
@@ -268,22 +279,20 @@ public final class PluginHandler {
         // notify user about removed deprecated plugins
         //
         StringBuilder sb = new StringBuilder();
-        sb.append("<html>");
-        sb.append(trn(
+        sb.append("<html>")
+          .append(trn(
                 "The following plugin is no longer necessary and has been deactivated:",
                 "The following plugins are no longer necessary and have been deactivated:",
-                removedPlugins.size()
-        ));
-        sb.append("<ul>");
+                removedPlugins.size()))
+          .append("<ul>");
         for (DeprecatedPlugin depr: removedPlugins) {
             sb.append("<li>").append(depr.name);
             if (depr.reason != null) {
-                sb.append(" (").append(depr.reason).append(")");
+                sb.append(" (").append(depr.reason).append(')');
             }
             sb.append("</li>");
         }
-        sb.append("</ul>");
-        sb.append("</html>");
+        sb.append("</ul></html>");
         JOptionPane.showMessageDialog(
                 parent,
                 sb.toString(),
@@ -309,7 +318,7 @@ public final class PluginHandler {
             String msg =  tr("<html>Loading of the plugin \"{0}\" was requested."
                     + "<br>This plugin is no longer developed and very likely will produce errors."
                     +"<br>It should be disabled.<br>Delete from preferences?</html>", unmaintained);
-            if (confirmDisablePlugin(parent, msg,unmaintained)) {
+            if (confirmDisablePlugin(parent, msg, unmaintained)) {
                 Main.pref.removeFromCollection("plugins", unmaintained);
                 plugins.remove(unmaintained);
             }
@@ -360,7 +369,7 @@ public final class PluginHandler {
         }
         if (message == null) return false;
 
-        ButtonSpec [] options = new ButtonSpec[] {
+        ButtonSpec[] options = new ButtonSpec[] {
                 new ButtonSpec(
                         tr("Update plugins"),
                         ImageProvider.get("dialogs", "refresh"),
@@ -381,7 +390,7 @@ public final class PluginHandler {
 
         // check whether automatic update at startup was disabled
         //
-        String policy = Main.pref.get(togglePreferenceKey, "ask").trim().toLowerCase();
+        String policy = Main.pref.get(togglePreferenceKey, "ask").trim().toLowerCase(Locale.ENGLISH);
         switch(policy) {
         case "never":
             if ("pluginmanager.version-based-update.policy".equals(togglePreferenceKey)) {
@@ -453,29 +462,99 @@ public final class PluginHandler {
     }
 
     /**
-     * Alerts the user if a plugin required by another plugin is missing
+     * Alerts the user if a plugin required by another plugin is missing, and offer to download them & restart JOSM
      *
      * @param parent The parent Component used to display error popup
      * @param plugin the plugin
      * @param missingRequiredPlugin the missing required plugin
      */
     private static void alertMissingRequiredPlugin(Component parent, String plugin, Set<String> missingRequiredPlugin) {
-        StringBuilder sb = new StringBuilder();
-        sb.append("<html>");
-        sb.append(trn("Plugin {0} requires a plugin which was not found. The missing plugin is:",
+        StringBuilder sb = new StringBuilder(48);
+        sb.append("<html>")
+          .append(trn("Plugin {0} requires a plugin which was not found. The missing plugin is:",
                 "Plugin {0} requires {1} plugins which were not found. The missing plugins are:",
                 missingRequiredPlugin.size(),
                 plugin,
-                missingRequiredPlugin.size()
-        ));
-        sb.append(Utils.joinAsHtmlUnorderedList(missingRequiredPlugin));
-        sb.append("</html>");
-        JOptionPane.showMessageDialog(
+                missingRequiredPlugin.size()))
+          .append(Utils.joinAsHtmlUnorderedList(missingRequiredPlugin))
+          .append("</html>");
+        ButtonSpec[] specs = new ButtonSpec[] {
+                new ButtonSpec(
+                        tr("Download and restart"),
+                        ImageProvider.get("restart"),
+                        trn("Click to download missing plugin and restart JOSM",
+                            "Click to download missing plugins and restart JOSM",
+                            missingRequiredPlugin.size()),
+                        null /* no specific help text */
+                ),
+                new ButtonSpec(
+                        tr("Continue"),
+                        ImageProvider.get("ok"),
+                        trn("Click to continue without this plugin",
+                            "Click to continue without these plugins",
+                            missingRequiredPlugin.size()),
+                        null /* no specific help text */
+                )
+        };
+        if (0 == HelpAwareOptionPane.showOptionDialog(
                 parent,
                 sb.toString(),
                 tr("Error"),
-                JOptionPane.ERROR_MESSAGE
-        );
+                JOptionPane.ERROR_MESSAGE,
+                null, /* no special icon */
+                specs,
+                specs[0],
+                HelpUtil.ht("/Plugin/Loading#MissingRequiredPlugin"))) {
+            downloadRequiredPluginsAndRestart(parent, missingRequiredPlugin);
+        }
+    }
+
+    private static void downloadRequiredPluginsAndRestart(final Component parent, final Set<String> missingRequiredPlugin) {
+        // Update plugin list
+        final ReadRemotePluginInformationTask pluginInfoDownloadTask = new ReadRemotePluginInformationTask(
+                Main.pref.getOnlinePluginSites());
+        Main.worker.submit(pluginInfoDownloadTask);
+
+        // Continuation
+        Main.worker.submit(new Runnable() {
+            @Override
+            public void run() {
+                // Build list of plugins to download
+                Set<PluginInformation> toDownload = new HashSet<>(pluginInfoDownloadTask.getAvailablePlugins());
+                for (Iterator<PluginInformation> it = toDownload.iterator(); it.hasNext();) {
+                    PluginInformation info = it.next();
+                    if (!missingRequiredPlugin.contains(info.getName())) {
+                        it.remove();
+                    }
+                }
+                // Check if something has still to be downloaded
+                if (!toDownload.isEmpty()) {
+                    // download plugins
+                    final PluginDownloadTask task = new PluginDownloadTask(parent, toDownload, tr("Download plugins"));
+                    Main.worker.submit(task);
+                    Main.worker.submit(new Runnable() {
+                        @Override
+                        public void run() {
+                            // restart if some plugins have been downloaded
+                            if (!task.getDownloadedPlugins().isEmpty()) {
+                                // update plugin list in preferences
+                                Set<String> plugins = new HashSet<>(Main.pref.getCollection("plugins"));
+                                for (PluginInformation plugin : task.getDownloadedPlugins()) {
+                                    plugins.add(plugin.name);
+                                }
+                                Main.pref.putCollection("plugins", plugins);
+                                // restart
+                                new RestartAction().actionPerformed(null);
+                            } else {
+                                Main.warn("No plugin downloaded, restart canceled");
+                            }
+                        }
+                    });
+                } else {
+                    Main.warn("No plugin to download, operation canceled");
+                }
+            }
+        });
     }
 
     private static void alertJOSMUpdateRequired(Component parent, String plugin, int requiredVersion) {
@@ -532,7 +611,8 @@ public final class PluginHandler {
      * @return true, if the preconditions are met; false otherwise
      * @since 5601
      */
-    public static boolean checkRequiredPluginsPreconditions(Component parent, Collection<PluginInformation> plugins, PluginInformation plugin, boolean local) {
+    public static boolean checkRequiredPluginsPreconditions(Component parent, Collection<PluginInformation> plugins,
+            PluginInformation plugin, boolean local) {
 
         String requires = local ? plugin.localrequires : plugin.requires;
 
@@ -635,8 +715,7 @@ public final class PluginHandler {
     }
 
     /**
-     * Loads the plugin in <code>plugins</code> from locally available jar files into
-     * memory.
+     * Loads the plugin in <code>plugins</code> from locally available jar files into memory.
      *
      * @param parent The parent component to be used for the displayed dialog
      * @param plugins the list of plugins
@@ -685,9 +764,9 @@ public final class PluginHandler {
     }
 
     /**
-     * Loads plugins from <code>plugins</code> which have the flag {@link PluginInformation#early}
-     * set to true.
+     * Loads plugins from <code>plugins</code> which have the flag {@link PluginInformation#early} set to true.
      *
+     * @param parent The parent component to be used for the displayed dialog
      * @param plugins the collection of plugins
      * @param monitor the progress monitor. Defaults to {@link NullProgressMonitor#INSTANCE} if null.
      */
@@ -702,8 +781,7 @@ public final class PluginHandler {
     }
 
     /**
-     * Loads plugins from <code>plugins</code> which have the flag {@link PluginInformation#early}
-     * set to false.
+     * Loads plugins from <code>plugins</code> which have the flag {@link PluginInformation#early} set to false.
      *
      * @param parent The parent component to be used for the displayed dialog
      * @param plugins the collection of plugins
@@ -733,16 +811,11 @@ public final class PluginHandler {
         }
         try {
             ReadLocalPluginInformationTask task = new ReadLocalPluginInformationTask(monitor);
-            ExecutorService service = Executors.newSingleThreadExecutor();
-            Future<?> future = service.submit(task);
             try {
-                future.get();
-            } catch(ExecutionException e) {
+                task.run();
+            } catch (RuntimeException e) {
                 Main.error(e);
                 return null;
-            } catch(InterruptedException e) {
-                Main.warn("InterruptedException in "+PluginHandler.class.getSimpleName()+" while loading locally available plugin information");
-                return null;
             }
             Map<String, PluginInformation> ret = new HashMap<>();
             for (PluginInformation pi: task.getAvailablePlugins()) {
@@ -756,15 +829,15 @@ public final class PluginHandler {
 
     private static void alertMissingPluginInformation(Component parent, Collection<String> plugins) {
         StringBuilder sb = new StringBuilder();
-        sb.append("<html>");
-        sb.append(trn("JOSM could not find information about the following plugin:",
+        sb.append("<html>")
+          .append(trn("JOSM could not find information about the following plugin:",
                 "JOSM could not find information about the following plugins:",
-                plugins.size()));
-        sb.append(Utils.joinAsHtmlUnorderedList(plugins));
-        sb.append(trn("The plugin is not going to be loaded.",
+                plugins.size()))
+          .append(Utils.joinAsHtmlUnorderedList(plugins))
+          .append(trn("The plugin is not going to be loaded.",
                 "The plugins are not going to be loaded.",
-                plugins.size()));
-        sb.append("</html>");
+                plugins.size()))
+          .append("</html>");
         HelpAwareOptionPane.showOptionDialog(
                 parent,
                 sb.toString(),
@@ -798,7 +871,7 @@ public final class PluginHandler {
             filterDeprecatedPlugins(parent, plugins);
             monitor.subTask(tr("Removing unmaintained plugins..."));
             filterUnmaintainedPlugins(parent, plugins);
-            Map<String, PluginInformation> infos = loadLocallyAvailablePluginInformation(monitor.createSubTaskMonitor(1,false));
+            Map<String, PluginInformation> infos = loadLocallyAvailablePluginInformation(monitor.createSubTaskMonitor(1, false));
             List<PluginInformation> ret = new LinkedList<>();
             for (Iterator<String> it = plugins.iterator(); it.hasNext();) {
                 String plugin = it.next();
@@ -818,24 +891,21 @@ public final class PluginHandler {
 
     private static void alertFailedPluginUpdate(Component parent, Collection<PluginInformation> plugins) {
         StringBuilder sb = new StringBuilder();
-        sb.append("<html>");
-        sb.append(trn(
+        sb.append("<html>")
+          .append(trn(
                 "Updating the following plugin has failed:",
                 "Updating the following plugins has failed:",
-                plugins.size()
-        )
-        );
-        sb.append("<ul>");
+                plugins.size()))
+          .append("<ul>");
         for (PluginInformation pi: plugins) {
             sb.append("<li>").append(pi.name).append("</li>");
         }
-        sb.append("</ul>");
-        sb.append(trn(
+        sb.append("</ul>")
+          .append(trn(
                 "Please open the Preference Dialog after JOSM has started and try to update it manually.",
                 "Please open the Preference Dialog after JOSM has started and try to update them manually.",
-                plugins.size()
-        ));
-        sb.append("</html>");
+                plugins.size()))
+          .append("</html>");
         HelpAwareOptionPane.showOptionDialog(
                 parent,
                 sb.toString(),
@@ -893,19 +963,17 @@ public final class PluginHandler {
         }
         try {
             monitor.beginTask("");
-            ExecutorService service = Executors.newSingleThreadExecutor();
 
             // try to download the plugin lists
             //
             ReadRemotePluginInformationTask task1 = new ReadRemotePluginInformationTask(
                     monitor.createSubTaskMonitor(1, false),
-                    Main.pref.getPluginSites(), displayErrMsg
+                    Main.pref.getOnlinePluginSites(), displayErrMsg
             );
-            Future<?> future = service.submit(task1);
+            task1.run();
             List<PluginInformation> allPlugins = null;
 
             try {
-                future.get();
                 allPlugins = task1.getAvailablePlugins();
                 plugins = buildListOfPluginsToLoad(parent, monitor.createSubTaskMonitor(1, false));
                 // If only some plugins have to be updated, filter the list
@@ -924,13 +992,10 @@ public final class PluginHandler {
                         }
                     }
                 }
-            } catch (ExecutionException e) {
-                Main.warn(tr("Failed to download plugin information list")+": ExecutionException");
+            } catch (RuntimeException e) {
+                Main.warn(tr("Failed to download plugin information list"));
                 Main.error(e);
                 // don't abort in case of error, continue with downloading plugins below
-            } catch (InterruptedException e) {
-                Main.warn(tr("Failed to download plugin information list")+": InterruptedException");
-                // don't abort in case of error, continue with downloading plugins below
             }
 
             // filter plugins which actually have to be updated
@@ -964,22 +1029,17 @@ public final class PluginHandler {
                 // try to update the locally installed plugins
                 //
                 pluginDownloadTask = new PluginDownloadTask(
-                        monitor.createSubTaskMonitor(1,false),
+                        monitor.createSubTaskMonitor(1, false),
                         pluginsToDownload,
                         tr("Update plugins")
                 );
 
-                future = service.submit(pluginDownloadTask);
                 try {
-                    future.get();
-                } catch(ExecutionException e) {
+                    pluginDownloadTask.run();
+                } catch (RuntimeException e) {
                     Main.error(e);
                     alertFailedPluginUpdate(parent, pluginsToUpdate);
                     return plugins;
-                } catch(InterruptedException e) {
-                    Main.warn("InterruptedException in "+PluginHandler.class.getSimpleName()+" while updating plugins");
-                    alertFailedPluginUpdate(parent, pluginsToUpdate);
-                    return plugins;
                 }
 
                 // Update Plugin info for downloaded plugins
@@ -988,7 +1048,7 @@ public final class PluginHandler {
 
                 // notify user if downloading a locally installed plugin failed
                 //
-                if (! pluginDownloadTask.getFailedPlugins().isEmpty()) {
+                if (!pluginDownloadTask.getFailedPlugins().isEmpty()) {
                     alertFailedPluginUpdate(parent, pluginDownloadTask.getFailedPlugins());
                     return plugins;
                 }
@@ -1014,7 +1074,7 @@ public final class PluginHandler {
      * @return true, if the plugin shall be disabled; false, otherwise
      */
     public static boolean confirmDisablePlugin(Component parent, String reason, String name) {
-        ButtonSpec [] options = new ButtonSpec[] {
+        ButtonSpec[] options = new ButtonSpec[] {
                 new ButtonSpec(
                         tr("Disable plugin"),
                         ImageProvider.get("dialogs", "delete"),
@@ -1047,9 +1107,10 @@ public final class PluginHandler {
      * @return The plugin of the specified name, if installed and loaded, or {@code null} otherwise.
      */
     public static Object getPlugin(String name) {
-        for (PluginProxy plugin : pluginList)
+        for (PluginProxy plugin : pluginList) {
             if (plugin.getPluginInformation().name.equals(name))
                 return plugin.plugin;
+        }
         return null;
     }
 
@@ -1079,7 +1140,7 @@ public final class PluginHandler {
      */
     public static void installDownloadedPlugins(boolean dowarn) {
         File pluginDir = Main.pref.getPluginsDirectory();
-        if (! pluginDir.exists() || ! pluginDir.isDirectory() || ! pluginDir.canWrite())
+        if (!pluginDir.exists() || !pluginDir.isDirectory() || !pluginDir.canWrite())
             return;
 
         final File[] files = pluginDir.listFiles(new FilenameFilter() {
@@ -1096,7 +1157,9 @@ public final class PluginHandler {
             String pluginName = updatedPlugin.getName().substring(0, updatedPlugin.getName().length() - 8);
             if (plugin.exists() && !plugin.delete() && dowarn) {
                 Main.warn(tr("Failed to delete outdated plugin ''{0}''.", plugin.toString()));
-                Main.warn(tr("Failed to install already downloaded plugin ''{0}''. Skipping installation. JOSM is still going to load the old plugin version.", pluginName));
+                Main.warn(tr("Failed to install already downloaded plugin ''{0}''. " +
+                        "Skipping installation. JOSM is still going to load the old plugin version.",
+                        pluginName));
                 continue;
             }
             try {
@@ -1104,14 +1167,18 @@ public final class PluginHandler {
                 new JarFile(updatedPlugin).close();
             } catch (Exception e) {
                 if (dowarn) {
-                    Main.warn(tr("Failed to install plugin ''{0}'' from temporary download file ''{1}''. {2}", plugin.toString(), updatedPlugin.toString(), e.getLocalizedMessage()));
+                    Main.warn(tr("Failed to install plugin ''{0}'' from temporary download file ''{1}''. {2}",
+                            plugin.toString(), updatedPlugin.toString(), e.getLocalizedMessage()));
                 }
                 continue;
             }
             // Install plugin
             if (!updatedPlugin.renameTo(plugin) && dowarn) {
-                Main.warn(tr("Failed to install plugin ''{0}'' from temporary download file ''{1}''. Renaming failed.", plugin.toString(), updatedPlugin.toString()));
-                Main.warn(tr("Failed to install already downloaded plugin ''{0}''. Skipping installation. JOSM is still going to load the old plugin version.", pluginName));
+                Main.warn(tr("Failed to install plugin ''{0}'' from temporary download file ''{1}''. Renaming failed.",
+                        plugin.toString(), updatedPlugin.toString()));
+                Main.warn(tr("Failed to install already downloaded plugin ''{0}''. " +
+                        "Skipping installation. JOSM is still going to load the old plugin version.",
+                        pluginName));
             }
         }
     }
@@ -1168,7 +1235,7 @@ public final class PluginHandler {
             }
             try {
                 pi.updateFromJar(new PluginInformation(downloadedPluginFile, pi.name));
-            } catch(PluginException e) {
+            } catch (PluginException e) {
                 Main.error(e);
             }
         }
@@ -1191,21 +1258,21 @@ public final class PluginHandler {
                 new ButtonSpec(
                         tr("Keep plugin"),
                         ImageProvider.get("cancel"),
-                        tr("Click to keep the plugin ''{0}''",plugin.getPluginInformation().name),
+                        tr("Click to keep the plugin ''{0}''", plugin.getPluginInformation().name),
                         null /* no specific help context */
                 )
         };
 
         final StringBuilder msg = new StringBuilder();
-        msg.append("<html>");
-        msg.append(tr("An unexpected exception occurred that may have come from the ''{0}'' plugin.", plugin.getPluginInformation().name));
-        msg.append("<br>");
+        msg.append("<html>")
+           .append(tr("An unexpected exception occurred that may have come from the ''{0}'' plugin.", plugin.getPluginInformation().name))
+           .append("<br>");
         if (plugin.getPluginInformation().author != null) {
-            msg.append(tr("According to the information within the plugin, the author is {0}.", plugin.getPluginInformation().author));
-            msg.append("<br>");
+            msg.append(tr("According to the information within the plugin, the author is {0}.", plugin.getPluginInformation().author))
+               .append("<br>");
         }
-        msg.append(tr("Try updating to the newest version of this plugin before reporting a bug."));
-        msg.append("</html>");
+        msg.append(tr("Try updating to the newest version of this plugin before reporting a bug."))
+           .append("</html>");
 
         try {
             FutureTask<Integer> task = new FutureTask<>(new Callable<Integer>() {
@@ -1240,8 +1307,7 @@ public final class PluginHandler {
     private static PluginProxy getPluginCausingException(Throwable ex) {
         PluginProxy err = null;
         StackTraceElement[] stack = ex.getStackTrace();
-        /* remember the error position, as multiple plugins may be involved,
-           we search the topmost one */
+        // remember the error position, as multiple plugins may be involved, we search the topmost one
         int pos = stack.length;
         for (PluginProxy p : pluginList) {
             String baseClass = p.getPluginInformation().className;
@@ -1277,10 +1343,10 @@ public final class PluginHandler {
             return null;
 
         Set<String> plugins = new HashSet<>(
-                Main.pref.getCollection("plugins",Collections.<String> emptySet())
+                Main.pref.getCollection("plugins", Collections.<String>emptySet())
         );
         final PluginInformation pluginInfo = plugin.getPluginInformation();
-        if (! plugins.contains(pluginInfo.name))
+        if (!plugins.contains(pluginInfo.name))
             // plugin not activated ? strange in this context but anyway, don't bother
             // the user with dialogs, skip conditional deactivation
             return null;
@@ -1318,7 +1384,7 @@ public final class PluginHandler {
      */
     public static String getBugReportText() {
         StringBuilder text = new StringBuilder();
-        List <String> pl = new LinkedList<>(Main.pref.getCollection("plugins", new LinkedList<String>()));
+        List<String> pl = new LinkedList<>(Main.pref.getCollection("plugins", new LinkedList<String>()));
         for (final PluginProxy pp : pluginList) {
             PluginInformation pi = pp.getPluginInformation();
             pl.remove(pi.name);
@@ -1330,7 +1396,7 @@ public final class PluginHandler {
             text.append("Plugins:\n");
         }
         for (String s : pl) {
-            text.append("- ").append(s).append("\n");
+            text.append("- ").append(s).append('\n');
         }
         return text.toString();
     }
@@ -1355,7 +1421,7 @@ public final class PluginHandler {
                         b.append(e.getKey());
                         b.append(": ");
                         b.append(e.getValue());
-                        b.append("\n");
+                        b.append('\n');
                     }
                     JosmTextArea a = new JosmTextArea(10, 40);
                     a.setEditable(false);
@@ -1366,8 +1432,8 @@ public final class PluginHandler {
                 }
             }), GBC.eol());
 
-            JosmTextArea description = new JosmTextArea((info.description == null ? tr("no description available")
-                    : info.description));
+            JosmTextArea description = new JosmTextArea(info.description == null ? tr("no description available")
+                    : info.description);
             description.setEditable(false);
             description.setFont(new JLabel().getFont().deriveFont(Font.ITALIC));
             description.setLineWrap(true);
@@ -1392,14 +1458,15 @@ public final class PluginHandler {
             gc.fill = GridBagConstraints.BOTH;
             gc.weightx = 1.0;
             gc.weighty = 1.0;
-            gc.insets = new Insets(5,5,5,5);
+            gc.insets = new Insets(5, 5, 5, 5);
             add(lblMessage = new JMultilineLabel(""), gc);
             lblMessage.setFont(lblMessage.getFont().deriveFont(Font.PLAIN));
 
             gc.gridy = 1;
             gc.fill = GridBagConstraints.HORIZONTAL;
             gc.weighty = 0.0;
-            add(cbDontShowAgain = new JCheckBox(tr("Do not ask again and remember my decision (go to Preferences->Plugins to change it later)")), gc);
+            add(cbDontShowAgain = new JCheckBox(
+                    tr("Do not ask again and remember my decision (go to Preferences->Plugins to change it later)")), gc);
             cbDontShowAgain.setFont(cbDontShowAgain.getFont().deriveFont(Font.PLAIN));
         }
 
@@ -1413,7 +1480,7 @@ public final class PluginHandler {
 
         public void initDontShowAgain(String preferencesKey) {
             String policy = Main.pref.get(preferencesKey, "ask");
-            policy = policy.trim().toLowerCase();
+            policy = policy.trim().toLowerCase(Locale.ENGLISH);
             cbDontShowAgain.setSelected(!"ask".equals(policy));
         }
 
diff --git a/src/org/openstreetmap/josm/plugins/PluginInformation.java b/src/org/openstreetmap/josm/plugins/PluginInformation.java
index 12cc2e2..5315ac2 100644
--- a/src/org/openstreetmap/josm/plugins/PluginInformation.java
+++ b/src/org/openstreetmap/josm/plugins/PluginInformation.java
@@ -18,6 +18,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.TreeMap;
 import java.util.jar.Attributes;
@@ -95,7 +96,7 @@ public class PluginInformation {
      * @param file the plugin jar file
      * @throws PluginException if reading the manifest fails
      */
-    public PluginInformation(File file) throws PluginException{
+    public PluginInformation(File file) throws PluginException {
         this(file, file.getName().substring(0, file.getName().length()-4));
     }
 
@@ -141,7 +142,7 @@ public class PluginInformation {
         try {
             Manifest manifest = new Manifest();
             manifest.read(manifestStream);
-            if(url != null) {
+            if (url != null) {
                 downloadlink = url;
             }
             scanManifest(manifest, url != null);
@@ -196,7 +197,7 @@ public class PluginInformation {
         this.stage = other.stage;
     }
 
-    private final void scanManifest(Manifest manifest, boolean oldcheck) {
+    private void scanManifest(Manifest manifest, boolean oldcheck) {
         String lang = LanguageInfo.getLanguageCodeManifest();
         Attributes attr = manifest.getMainAttributes();
         className = attr.getValue("Plugin-Class");
@@ -236,7 +237,7 @@ public class PluginInformation {
         if (s != null) {
             try {
                 mainversion = Integer.parseInt(s);
-            } catch(NumberFormatException e) {
+            } catch (NumberFormatException e) {
                 Main.warn(tr("Invalid plugin main version ''{0}'' in plugin {1}", s, name));
             }
         } else {
@@ -244,8 +245,7 @@ public class PluginInformation {
         }
         author = attr.getValue("Author");
         iconPath = attr.getValue("Plugin-Icon");
-        if (iconPath != null)
-        {
+        if (iconPath != null) {
             if (file != null) {
                 // extract icon from the plugin jar file
                 icon = new ImageProvider(iconPath).setArchive(file).setMaxWidth(24).setMaxHeight(24).setOptional(true).get();
@@ -258,22 +258,21 @@ public class PluginInformation {
             int myv = Version.getInstance().getVersion();
             for (Map.Entry<Object, Object> entry : attr.entrySet()) {
                 try {
-                    String key = ((Attributes.Name)entry.getKey()).toString();
+                    String key = ((Attributes.Name) entry.getKey()).toString();
                     if (key.endsWith("_Plugin-Url")) {
-                        int mv = Integer.parseInt(key.substring(0,key.length()-11));
+                        int mv = Integer.parseInt(key.substring(0, key.length()-11));
                         if (mv <= myv && (mv > mainversion || mainversion > myv)) {
-                            String v = (String)entry.getValue();
+                            String v = (String) entry.getValue();
                             int i = v.indexOf(';');
                             if (i > 0) {
                                 downloadlink = v.substring(i+1);
                                 mainversion = mv;
-                                version = v.substring(0,i);
+                                version = v.substring(0, i);
                                 oldmode = true;
                             }
                         }
                     }
-                }
-                catch(Exception e) {
+                } catch (Exception e) {
                     Main.error(e);
                 }
             }
@@ -304,9 +303,9 @@ public class PluginInformation {
      * @return the description as HTML document
      */
     public String getDescriptionAsHtml() {
-        StringBuilder sb = new StringBuilder();
-        sb.append("<html><body>");
-        sb.append(description == null ? tr("no description available") : description);
+        StringBuilder sb = new StringBuilder(128);
+        sb.append("<html><body>")
+          .append(description == null ? tr("no description available") : description);
         if (link != null) {
             sb.append(" <a href=\"").append(link).append("\">").append(tr("More info...")).append("</a>");
         }
@@ -315,7 +314,7 @@ public class PluginInformation {
                 && !downloadlink.startsWith("https://svn.openstreetmap.org/applications/editors/josm/dist/")
                 && !downloadlink.startsWith("http://trac.openstreetmap.org/browser/applications/editors/josm/dist/")
                 && !downloadlink.startsWith("https://github.com/JOSM/")) {
-            sb.append("<p> </p><p>"+tr("<b>Plugin provided by an external source:</b> {0}", downloadlink)+"</p>");
+            sb.append("<p> </p><p>").append(tr("<b>Plugin provided by an external source:</b> {0}", downloadlink)).append("</p>");
         }
         sb.append("</body></html>");
         return sb.toString();
@@ -333,7 +332,7 @@ public class PluginInformation {
             Constructor<?> c = klass.getConstructor(PluginInformation.class);
             Object plugin = c.newInstance(this);
             return new PluginProxy(plugin, this);
-        } catch(NoSuchMethodException | IllegalAccessException | InstantiationException | InvocationTargetException e) {
+        } catch (NoSuchMethodException | IllegalAccessException | InstantiationException | InvocationTargetException e) {
             throw new PluginException(name, e);
         }
     }
@@ -436,7 +435,7 @@ public class PluginInformation {
      */
     public boolean isUpdateRequired(String referenceVersion) {
         if (this.downloadlink == null) return false;
-        if (this.version == null && referenceVersion!= null)
+        if (this.version == null && referenceVersion != null)
             return true;
         if (this.version != null && !this.version.equals(referenceVersion))
             return true;
@@ -459,7 +458,7 @@ public class PluginInformation {
     protected boolean matches(String filter, String value) {
         if (filter == null) return true;
         if (value == null) return false;
-        return value.toLowerCase().contains(filter.toLowerCase());
+        return value.toLowerCase(Locale.ENGLISH).contains(filter.toLowerCase(Locale.ENGLISH));
     }
 
     /**
@@ -492,7 +491,7 @@ public class PluginInformation {
 
     /**
      * Sets the name
-     * @param name
+     * @param name Plugin name
      */
     public void setName(String name) {
         this.name = name;
diff --git a/src/org/openstreetmap/josm/plugins/PluginListParser.java b/src/org/openstreetmap/josm/plugins/PluginListParser.java
index 6bf2f08..c48b5f9 100644
--- a/src/org/openstreetmap/josm/plugins/PluginListParser.java
+++ b/src/org/openstreetmap/josm/plugins/PluginListParser.java
@@ -31,9 +31,9 @@ public class PluginListParser {
      * @param url the plugin download url
      * @param manifest the plugin manifest
      * @return a plugin information object
-     * @throws PluginListParseException
+     * @throws PluginListParseException if plugin manifest cannot be parsed
      */
-    protected static PluginInformation createInfo(String name, String url, String manifest) throws PluginListParseException{
+    protected static PluginInformation createInfo(String name, String url, String manifest) throws PluginListParseException {
         try {
             return new PluginInformation(
                     new ByteArrayInputStream(manifest.getBytes(StandardCharsets.UTF_8)),
@@ -56,7 +56,7 @@ public class PluginListParser {
      * @return the list of plugin information objects
      * @throws PluginListParseException if something goes wrong while parsing
      */
-    public List<PluginInformation> parse(InputStream in) throws PluginListParseException{
+    public List<PluginInformation> parse(InputStream in) throws PluginListParseException {
         List<PluginInformation> ret = new LinkedList<>();
         BufferedReader r = null;
         try {
@@ -68,15 +68,15 @@ public class PluginListParser {
                 if (line.startsWith("\t")) {
                     line = line.substring(1);
                     while (line.length() > 70) {
-                        manifest.append(line.substring(0, 70)).append("\n");
+                        manifest.append(line.substring(0, 70)).append('\n');
                         line = " " + line.substring(70);
                     }
-                    manifest.append(line).append("\n");
+                    manifest.append(line).append('\n');
                     continue;
                 }
                 addPluginInformation(ret, name, url, manifest.toString());
                 String[] x = line.split(";");
-                if(x.length != 2)
+                if (x.length != 2)
                     throw new IOException(tr("Illegal entry in plugin list."));
                 name = x[0];
                 url = x[1];
diff --git a/src/org/openstreetmap/josm/plugins/PluginProxy.java b/src/org/openstreetmap/josm/plugins/PluginProxy.java
index cdb0fe5..ba8db66 100644
--- a/src/org/openstreetmap/josm/plugins/PluginProxy.java
+++ b/src/org/openstreetmap/josm/plugins/PluginProxy.java
@@ -37,7 +37,7 @@ public class PluginProxy extends Plugin {
 
     @Override public PreferenceSetting getPreferenceSetting() {
         try {
-            return (PreferenceSetting)plugin.getClass().getMethod("getPreferenceSetting").invoke(plugin);
+            return (PreferenceSetting) plugin.getClass().getMethod("getPreferenceSetting").invoke(plugin);
         } catch (NoSuchMethodException e) {
             Main.debug("Plugin "+plugin+" does not define getPreferenceSetting");
             return null;
diff --git a/src/org/openstreetmap/josm/plugins/ReadLocalPluginInformationTask.java b/src/org/openstreetmap/josm/plugins/ReadLocalPluginInformationTask.java
index f3e1c50..7b9bad4 100644
--- a/src/org/openstreetmap/josm/plugins/ReadLocalPluginInformationTask.java
+++ b/src/org/openstreetmap/josm/plugins/ReadLocalPluginInformationTask.java
@@ -46,7 +46,7 @@ public class ReadLocalPluginInformationTask extends PleaseWaitRunnable {
     }
 
     public ReadLocalPluginInformationTask(ProgressMonitor monitor) {
-        super(tr("Reading local plugin information.."),monitor, false);
+        super(tr("Reading local plugin information.."), monitor, false);
         availablePlugins = new HashMap<>();
     }
 
@@ -58,7 +58,7 @@ public class ReadLocalPluginInformationTask extends PleaseWaitRunnable {
     @Override
     protected void finish() {}
 
-    protected void processJarFile(File f, String pluginName) throws PluginException{
+    protected void processJarFile(File f, String pluginName) throws PluginException {
         PluginInformation info = new PluginInformation(
                 f,
                 pluginName
@@ -94,7 +94,7 @@ public class ReadLocalPluginInformationTask extends PleaseWaitRunnable {
             monitor.setCustomText(tr("Processing file ''{0}''", fname));
             try {
                 processLocalPluginInformationFile(f);
-            } catch(PluginListParseException e) {
+            } catch (PluginListParseException e) {
                 Main.warn(tr("Failed to scan file ''{0}'' for plugin information. Skipping.", fname));
                 Main.error(e);
             }
@@ -126,7 +126,7 @@ public class ReadLocalPluginInformationTask extends PleaseWaitRunnable {
                     String pluginName = fname.substring(0, fname.length() - 8);
                     processJarFile(f, pluginName);
                 }
-            } catch (PluginException e){
+            } catch (PluginException e) {
                 Main.warn("PluginException: "+e.getMessage());
                 Main.warn(tr("Failed to scan file ''{0}'' for plugin information. Skipping.", fname));
             }
@@ -146,7 +146,7 @@ public class ReadLocalPluginInformationTask extends PleaseWaitRunnable {
         }
     }
 
-    protected void processLocalPluginInformationFile(File file) throws PluginListParseException{
+    protected void processLocalPluginInformationFile(File file) throws PluginListParseException {
         try (FileInputStream fin = new FileInputStream(file)) {
             List<PluginInformation> pis = new PluginListParser().parse(fin);
             for (PluginInformation pi : pis) {
@@ -156,7 +156,7 @@ public class ReadLocalPluginInformationTask extends PleaseWaitRunnable {
                 //
                 availablePlugins.put(pi.name, pi);
             }
-        } catch(IOException e) {
+        } catch (IOException e) {
             throw new PluginListParseException(e);
         }
     }
@@ -164,7 +164,7 @@ public class ReadLocalPluginInformationTask extends PleaseWaitRunnable {
     protected void analyseInProcessPlugins() {
         for (PluginProxy proxy : PluginHandler.pluginList) {
             PluginInformation info = proxy.getPluginInformation();
-            if (canceled)return;
+            if (canceled) return;
             if (!availablePlugins.containsKey(info.name)) {
                 availablePlugins.put(info.name, info);
             } else {
@@ -175,7 +175,7 @@ public class ReadLocalPluginInformationTask extends PleaseWaitRunnable {
 
     protected void filterOldPlugins() {
         for (PluginHandler.DeprecatedPlugin p : PluginHandler.DEPRECATED_PLUGINS) {
-            if (canceled)return;
+            if (canceled) return;
             if (availablePlugins.containsKey(p.name)) {
                 availablePlugins.remove(p.name);
             }
@@ -193,11 +193,11 @@ public class ReadLocalPluginInformationTask extends PleaseWaitRunnable {
                     new File(location)
             );
             getProgressMonitor().worked(1);
-            if (canceled)return;
+            if (canceled) return;
         }
         analyseInProcessPlugins();
         getProgressMonitor().worked(1);
-        if (canceled)return;
+        if (canceled) return;
         filterOldPlugins();
         getProgressMonitor().worked(1);
     }
diff --git a/src/org/openstreetmap/josm/plugins/ReadRemotePluginInformationTask.java b/src/org/openstreetmap/josm/plugins/ReadRemotePluginInformationTask.java
index c788a47..bd18988 100644
--- a/src/org/openstreetmap/josm/plugins/ReadRemotePluginInformationTask.java
+++ b/src/org/openstreetmap/josm/plugins/ReadRemotePluginInformationTask.java
@@ -83,14 +83,14 @@ public class ReadRemotePluginInformationTask extends PleaseWaitRunnable {
      * @param displayErrMsg if {@code true}, a blocking error message is displayed in case of I/O exception.
      */
     public ReadRemotePluginInformationTask(ProgressMonitor monitor, Collection<String> sites, boolean displayErrMsg) {
-        super(tr("Download plugin list..."), monitor == null ? NullProgressMonitor.INSTANCE: monitor, false /* don't ignore exceptions */);
+        super(tr("Download plugin list..."), monitor == null ? NullProgressMonitor.INSTANCE : monitor, false /* don't ignore exceptions */);
         init(sites, displayErrMsg);
     }
 
     @Override
     protected void cancel() {
         canceled = true;
-        synchronized(this) {
+        synchronized (this) {
             if (connection != null) {
                 connection.disconnect();
             }
@@ -113,23 +113,23 @@ public class ReadRemotePluginInformationTask extends PleaseWaitRunnable {
             site = site.replaceAll("%<(.*)>", "");
             URL url = new URL(site);
             StringBuilder sb = new StringBuilder();
-            sb.append("site-");
-            sb.append(url.getHost()).append("-");
+            sb.append("site-")
+              .append(url.getHost()).append('-');
             if (url.getPort() != -1) {
-                sb.append(url.getPort()).append("-");
+                sb.append(url.getPort()).append('-');
             }
             String path = url.getPath();
-            for (int i =0;i<path.length(); i++) {
+            for (int i = 0; i < path.length(); i++) {
                 char c = path.charAt(i);
                 if (Character.isLetterOrDigit(c)) {
                     sb.append(c);
                 } else {
-                    sb.append("_");
+                    sb.append('_');
                 }
             }
             sb.append(".txt");
             name = sb.toString();
-        } catch(MalformedURLException e) {
+        } catch (MalformedURLException e) {
             name = "site-unknown.txt";
         }
         return new File(pluginDir, name);
@@ -146,7 +146,7 @@ public class ReadRemotePluginInformationTask extends PleaseWaitRunnable {
         /* replace %<x> with empty string or x=plugins (separated with comma) */
         String pl = Utils.join(",", Main.pref.getCollection("plugins"));
         String printsite = site.replaceAll("%<(.*)>", "");
-        if (pl != null && pl.length() != 0) {
+        if (pl != null && !pl.isEmpty()) {
             site = site.replaceAll("%<(.*)>", "$1"+pl);
         } else {
             site = printsite;
@@ -157,7 +157,7 @@ public class ReadRemotePluginInformationTask extends PleaseWaitRunnable {
             monitor.indeterminateSubTask(tr("Downloading plugin list from ''{0}''", printsite));
 
             URL url = new URL(site);
-            synchronized(this) {
+            synchronized (this) {
                 connection = Utils.openHttpConnection(url);
                 connection.setRequestProperty("Cache-Control", "no-cache");
                 connection.setRequestProperty("Accept-Charset", "utf-8");
@@ -166,7 +166,7 @@ public class ReadRemotePluginInformationTask extends PleaseWaitRunnable {
                 StringBuilder sb = new StringBuilder();
                 String line;
                 while ((line = in.readLine()) != null) {
-                    sb.append(line).append("\n");
+                    sb.append(line).append('\n');
                 }
                 return sb.toString();
             }
@@ -180,7 +180,7 @@ public class ReadRemotePluginInformationTask extends PleaseWaitRunnable {
             handleIOException(monitor, e, tr("Plugin list download error"), tr("JOSM failed to download plugin list:"), displayErrMsg);
             return null;
         } finally {
-            synchronized(this) {
+            synchronized (this) {
                 if (connection != null) {
                     connection.disconnect();
                 }
@@ -190,14 +190,15 @@ public class ReadRemotePluginInformationTask extends PleaseWaitRunnable {
         }
     }
 
-    private void handleIOException(final ProgressMonitor monitor, IOException e, final String title, final String firstMessage, boolean displayMsg) {
+    private void handleIOException(final ProgressMonitor monitor, IOException e, final String title, final String firstMessage,
+            boolean displayMsg) {
         StringBuilder sb = new StringBuilder();
         try (InputStream errStream = connection.getErrorStream()) {
             if (errStream != null) {
                 try (BufferedReader err = new BufferedReader(new InputStreamReader(errStream, StandardCharsets.UTF_8))) {
                     String line;
                     while ((line = err.readLine()) != null) {
-                        sb.append(line).append("\n");
+                        sb.append(line).append('\n');
                     }
                 } catch (Exception ex) {
                     Main.error(e);
@@ -220,14 +221,15 @@ public class ReadRemotePluginInformationTask extends PleaseWaitRunnable {
         }
     }
 
-    private void displayErrorMessage(final ProgressMonitor monitor, final String msg, final String details, final String title, final String firstMessage) {
+    private void displayErrorMessage(final ProgressMonitor monitor, final String msg, final String details, final String title,
+            final String firstMessage) {
         GuiHelper.runInEDTAndWait(new Runnable() {
             @Override public void run() {
                 JPanel panel = new JPanel(new GridBagLayout());
                 panel.add(new JLabel(firstMessage), GBC.eol().insets(0, 0, 0, 10));
                 StringBuilder b = new StringBuilder();
                 for (String part : msg.split("(?<=\\G.{200})")) {
-                    b.append(part).append("\n");
+                    b.append(part).append('\n');
                 }
                 panel.add(new JLabel("<html><body width=\"500\"><b>"+b.toString().trim()+"</b></body></html>"), GBC.eol().insets(0, 0, 0, 10));
                 if (!details.isEmpty()) {
@@ -254,14 +256,15 @@ public class ReadRemotePluginInformationTask extends PleaseWaitRunnable {
     protected void cachePluginList(String site, String list) {
         File pluginDir = Main.pref.getPluginsDirectory();
         if (!pluginDir.exists() && !pluginDir.mkdirs()) {
-            Main.warn(tr("Failed to create plugin directory ''{0}''. Cannot cache plugin list from plugin site ''{1}''.", pluginDir.toString(), site));
+            Main.warn(tr("Failed to create plugin directory ''{0}''. Cannot cache plugin list from plugin site ''{1}''.",
+                    pluginDir.toString(), site));
         }
         File cacheFile = createSiteCacheFile(pluginDir, site);
         getProgressMonitor().subTask(tr("Writing plugin list to local cache ''{0}''", cacheFile.toString()));
         try (PrintWriter writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(cacheFile), StandardCharsets.UTF_8))) {
             writer.write(list);
             writer.flush();
-        } catch(IOException e) {
+        } catch (IOException e) {
             // just failed to write the cache file. No big deal, but log the exception anyway
             Main.error(e);
         }
@@ -316,7 +319,7 @@ public class ReadRemotePluginInformationTask extends PleaseWaitRunnable {
         // collect old cache files and remove if no longer in use
         List<File> siteCacheFiles = new LinkedList<>();
         for (String location : PluginInformation.getPluginLocations()) {
-            File [] f = new File(location).listFiles(
+            File[] f = new File(location).listFiles(
                     new FilenameFilter() {
                         @Override
                         public boolean accept(File dir, String name) {
@@ -325,7 +328,7 @@ public class ReadRemotePluginInformationTask extends PleaseWaitRunnable {
                         }
                     }
             );
-            if(f != null && f.length > 0) {
+            if (f != null && f.length > 0) {
                 siteCacheFiles.addAll(Arrays.asList(f));
             }
         }
diff --git a/src/org/openstreetmap/josm/tools/AlphanumComparator.java b/src/org/openstreetmap/josm/tools/AlphanumComparator.java
index 028065b..5c04db6 100644
--- a/src/org/openstreetmap/josm/tools/AlphanumComparator.java
+++ b/src/org/openstreetmap/josm/tools/AlphanumComparator.java
@@ -1,3 +1,4 @@
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.tools;
 
 /*
@@ -38,7 +39,7 @@ import java.util.Locale;
  * Bogus, and David Koelle and others.
  *
  */
-public class AlphanumComparator implements Comparator<String>, Serializable {
+public final class AlphanumComparator implements Comparator<String>, Serializable {
 
     private static final long serialVersionUID = 1L;
 
diff --git a/src/org/openstreetmap/josm/tools/AudioPlayer.java b/src/org/openstreetmap/josm/tools/AudioPlayer.java
index fd73618..8f5f440 100644
--- a/src/org/openstreetmap/josm/tools/AudioPlayer.java
+++ b/src/org/openstreetmap/josm/tools/AudioPlayer.java
@@ -28,9 +28,12 @@ public final class AudioPlayer extends Thread {
     private static volatile AudioPlayer audioPlayer = null;
 
     private enum State { INITIALIZING, NOTPLAYING, PLAYING, PAUSED, INTERRUPTED }
-    private State state;
+
     private enum Command { PLAY, PAUSE }
+
     private enum Result { WAITING, OK, FAILED }
+
+    private State state;
     private URL playingUrl;
     private double leadIn; // seconds
     private double calibration; // ratio of purported duration of samples to true duration
@@ -61,39 +64,50 @@ public final class AudioPlayer extends Thread {
             result = Result.WAITING;
             send();
         }
+
         protected void pause() throws Exception {
             command = Command.PAUSE;
             send();
         }
+
         private void send() throws Exception {
             result = Result.WAITING;
             interrupt();
-            while (result == Result.WAITING) { sleep(10); /* yield(); */ }
+            while (result == Result.WAITING) {
+                sleep(10); /* yield(); */
+            }
             if (result == Result.FAILED)
                 throw exception;
         }
+
         private void possiblyInterrupt() throws InterruptedException {
             if (interrupted() || result == Result.WAITING)
                 throw new InterruptedException();
         }
-        protected void failed (Exception e) {
+
+        protected void failed(Exception e) {
             exception = e;
             result = Result.FAILED;
             state = State.NOTPLAYING;
         }
-        protected void ok (State newState) {
+
+        protected void ok(State newState) {
             result = Result.OK;
             state = newState;
         }
+
         protected double offset() {
             return offset;
         }
+
         protected double speed() {
             return speed;
         }
+
         protected URL url() {
             return url;
         }
+
         protected Command command() {
             return command;
         }
@@ -199,10 +213,10 @@ public final class AudioPlayer extends Thread {
      * Resets the audio player.
      */
     public static void reset() {
-        if(audioPlayer != null) {
+        if (audioPlayer != null) {
             try {
                 pause();
-            } catch(Exception e) {
+            } catch (Exception e) {
                 Main.warn(e);
             }
             audioPlayer.playingUrl = null;
@@ -216,7 +230,9 @@ public final class AudioPlayer extends Thread {
         leadIn = Main.pref.getDouble("audio.leadin", 1.0 /* default, seconds */);
         calibration = Main.pref.getDouble("audio.calibration", 1.0 /* default, ratio */);
         start();
-        while (state == State.INITIALIZING) { yield(); }
+        while (state == State.INITIALIZING) {
+            yield();
+        }
     }
 
     /**
@@ -230,7 +246,7 @@ public final class AudioPlayer extends Thread {
         AudioInputStream audioInputStream = null;
         SourceDataLine audioOutputLine = null;
         AudioFormat audioFormat = null;
-        byte[] abData = new byte[(int)chunk];
+        byte[] abData = new byte[(int) chunk];
 
         for (;;) {
             try {
@@ -245,12 +261,14 @@ public final class AudioPlayer extends Thread {
                         break;
                     case PLAYING:
                         command.possiblyInterrupt();
-                        for(;;) {
+                        for (;;) {
                             int nBytesRead = 0;
                             nBytesRead = audioInputStream.read(abData, 0, abData.length);
                             position += nBytesRead / bytesPerSecond;
                             command.possiblyInterrupt();
-                            if (nBytesRead < 0) { break; }
+                            if (nBytesRead < 0) {
+                                break;
+                            }
                             audioOutputLine.write(abData, 0, nBytesRead); // => int nBytesWritten
                             command.possiblyInterrupt();
                         }
@@ -276,8 +294,7 @@ public final class AudioPlayer extends Thread {
                             speed = command.speed();
                             if (playingUrl != command.url() ||
                                     stateChange != State.PAUSED ||
-                                    offset != 0.0)
-                            {
+                                    offset != 0) {
                                 if (audioInputStream != null) {
                                     Utils.close(audioInputStream);
                                     audioInputStream = null;
@@ -295,11 +312,8 @@ public final class AudioPlayer extends Thread {
                                     speed = 256000 / bytesPerSecond;
                                 }
                                 if (calibratedOffset > 0.0) {
-                                    long bytesToSkip = (long)(
-                                            calibratedOffset /* seconds (double) */ * bytesPerSecond);
-                                    /* skip doesn't seem to want to skip big chunks, so
-                                     * reduce it to smaller ones
-                                     */
+                                    long bytesToSkip = (long) (calibratedOffset /* seconds (double) */ * bytesPerSecond);
+                                    // skip doesn't seem to want to skip big chunks, so reduce it to smaller ones
                                     // audioInputStream.skip(bytesToSkip);
                                     while (bytesToSkip > chunk) {
                                         nBytesRead = audioInputStream.skip(chunk);
@@ -355,7 +369,7 @@ public final class AudioPlayer extends Thread {
      */
     public static void audioMalfunction(Exception ex) {
         String msg = ex.getMessage();
-        if(msg == null)
+        if (msg == null)
             msg = tr("unspecified reason");
         else
             msg = tr(msg);
diff --git a/src/org/openstreetmap/josm/tools/Base64.java b/src/org/openstreetmap/josm/tools/Base64.java
index ea5406c..5ff21b7 100644
--- a/src/org/openstreetmap/josm/tools/Base64.java
+++ b/src/org/openstreetmap/josm/tools/Base64.java
@@ -44,14 +44,12 @@ public final class Base64 {
         for (int i = 0; i < (s.length()+2)/3; ++i) {
             int l = Math.min(3, s.length()-i*3);
             String buf = s.substring(i*3, i*3+l);
-            out.append(enc.charAt(buf.charAt(0)>>2));
+            out.append(enc.charAt(buf.charAt(0) >> 2));
             out.append(enc.charAt(
                                   (buf.charAt(0) & 0x03) << 4 |
-                                  (l==1?
-                                   0:
-                                   (buf.charAt(1) & 0xf0) >> 4)));
-            out.append(l>1?enc.charAt((buf.charAt(1) & 0x0f) << 2 | (l==2?0:(buf.charAt(2) & 0xc0) >> 6)):'=');
-            out.append(l>2?enc.charAt(buf.charAt(2) & 0x3f):'=');
+                                  (l == 1 ? 0 : (buf.charAt(1) & 0xf0) >> 4)));
+            out.append(l > 1 ? enc.charAt((buf.charAt(1) & 0x0f) << 2 | (l == 2 ? 0 : (buf.charAt(2) & 0xc0) >> 6)) : '=');
+            out.append(l > 2 ? enc.charAt(buf.charAt(2) & 0x3f) : '=');
         }
         return out.toString();
     }
@@ -81,17 +79,15 @@ public final class Base64 {
         for (int i = 0; i < (s.limit()+2)/3; ++i) {
             int l = Math.min(3, s.limit()-i*3);
             int byte0 = s.get() & 0xff;
-            int byte1 = l>1? s.get() & 0xff : 0;
-            int byte2 = l>2? s.get() & 0xff : 0;
+            int byte1 = l > 1 ? s.get() & 0xff : 0;
+            int byte2 = l > 2 ? s.get() & 0xff : 0;
 
-            out.append(enc.charAt(byte0>>2));
+            out.append(enc.charAt(byte0 >> 2));
             out.append(enc.charAt(
                                   (byte0 & 0x03) << 4 |
-                                  (l==1?
-                                   0:
-                                   (byte1 & 0xf0) >> 4)));
-            out.append(l>1?enc.charAt((byte1 & 0x0f) << 2 | (l==2?0:(byte2 & 0xc0) >> 6)):'=');
-            out.append(l>2?enc.charAt(byte2 & 0x3f):'=');
+                                  (l == 1 ? 0 : (byte1 & 0xf0) >> 4)));
+            out.append(l > 1 ? enc.charAt((byte1 & 0x0f) << 2 | (l == 2 ? 0 : (byte2 & 0xc0) >> 6)) : '=');
+            out.append(l > 2 ? enc.charAt(byte2 & 0x3f) : '=');
         }
         return out.toString();
     }
diff --git a/src/org/openstreetmap/josm/tools/BugReportExceptionHandler.java b/src/org/openstreetmap/josm/tools/BugReportExceptionHandler.java
index 8ee6880..94139a7 100644
--- a/src/org/openstreetmap/josm/tools/BugReportExceptionHandler.java
+++ b/src/org/openstreetmap/josm/tools/BugReportExceptionHandler.java
@@ -47,8 +47,91 @@ public final class BugReportExceptionHandler implements Thread.UncaughtException
 
     private static class BugReporterThread extends Thread {
 
+        private final class BugReporterWorker implements Runnable {
+            private final PluginDownloadTask pluginDownloadTask;
+
+            private BugReporterWorker(PluginDownloadTask pluginDownloadTask) {
+                this.pluginDownloadTask = pluginDownloadTask;
+            }
+
+            @Override
+            public void run() {
+                // Then ask for submitting a bug report, for exceptions thrown from a plugin too, unless updated to a new version
+                if (pluginDownloadTask == null) {
+                    String[] buttonTexts = new String[] {tr("Do nothing"), tr("Report Bug")};
+                    String[] buttonIcons = new String[] {"cancel", "bug"};
+                    int defaultButtonIdx = 1;
+                    String message = tr("An unexpected exception occurred.<br>" +
+                            "This is always a coding error. If you are running the latest<br>" +
+                            "version of JOSM, please consider being kind and file a bug report."
+                            );
+                    // Check user is running current tested version, the error may already be fixed
+                    int josmVersion = Version.getInstance().getVersion();
+                    if (josmVersion != Version.JOSM_UNKNOWN_VERSION) {
+                        try {
+                            int latestVersion = Integer.parseInt(new WikiReader().
+                                    read(Main.getJOSMWebsite()+"/wiki/TestedVersion?format=txt").trim());
+                            if (latestVersion > josmVersion) {
+                                buttonTexts = new String[] {tr("Do nothing"), tr("Update JOSM"), tr("Report Bug")};
+                                buttonIcons = new String[] {"cancel", "download", "bug"};
+                                defaultButtonIdx = 2;
+                                message = tr("An unexpected exception occurred. This is always a coding error.<br><br>" +
+                                        "However, you are running an old version of JOSM ({0}),<br>" +
+                                        "instead of using the current tested version (<b>{1}</b>).<br><br>"+
+                                        "<b>Please update JOSM</b> before considering to file a bug report.",
+                                        String.valueOf(josmVersion), String.valueOf(latestVersion));
+                            }
+                        } catch (IOException | NumberFormatException e) {
+                            Main.warn("Unable to detect latest version of JOSM: "+e.getMessage());
+                        }
+                    }
+                    // Show dialog
+                    ExtendedDialog ed = new ExtendedDialog(Main.parent, tr("Unexpected Exception"), buttonTexts);
+                    ed.setButtonIcons(buttonIcons);
+                    ed.setIcon(JOptionPane.ERROR_MESSAGE);
+                    ed.setCancelButton(1);
+                    ed.setDefaultButton(defaultButtonIdx);
+                    JPanel pnl = new JPanel(new GridBagLayout());
+                    pnl.add(new JLabel("<html>" + message + "</html>"), GBC.eol());
+                    JCheckBox cbSuppress = null;
+                    if (exceptionCounter > 1) {
+                        cbSuppress = new JCheckBox(tr("Suppress further error dialogs for this session."));
+                        pnl.add(cbSuppress, GBC.eol());
+                    }
+                    ed.setContent(pnl);
+                    ed.setFocusOnDefaultButton(true);
+                    ed.showDialog();
+                    if (cbSuppress != null && cbSuppress.isSelected()) {
+                        suppressExceptionDialogs = true;
+                    }
+                    if (ed.getValue() <= 1) {
+                        // "Do nothing"
+                        return;
+                    } else if (ed.getValue() < buttonTexts.length) {
+                        // "Update JOSM"
+                        try {
+                            Main.platform.openUrl(Main.getJOSMWebsite());
+                        } catch (IOException e) {
+                            Main.warn("Unable to access JOSM website: "+e.getMessage());
+                        }
+                    } else {
+                        // "Report bug"
+                        askForBugReport(e);
+                    }
+                } else {
+                    // Ask for restart to install new plugin
+                    PluginPreference.notifyDownloadResults(
+                            Main.parent, pluginDownloadTask, !pluginDownloadTask.getDownloadedPlugins().isEmpty());
+                }
+            }
+        }
+
         private final Throwable e;
 
+        /**
+         * Constructs a new {@code BugReporterThread}.
+         * @param t the exception
+         */
         public BugReporterThread(Throwable t) {
             super("Bug Reporter");
             this.e = t;
@@ -57,80 +140,7 @@ public final class BugReportExceptionHandler implements Thread.UncaughtException
         @Override
         public void run() {
             // Give the user a chance to deactivate the plugin which threw the exception (if it was thrown from a plugin)
-            final PluginDownloadTask pluginDownloadTask = PluginHandler.updateOrdisablePluginAfterException(e);
-
-            SwingUtilities.invokeLater(new Runnable() {
-                @Override
-                public void run() {
-                    // Then ask for submitting a bug report, for exceptions thrown from a plugin too, unless updated to a new version
-                    if (pluginDownloadTask == null) {
-                        String[] buttonTexts = new String[] {tr("Do nothing"), tr("Report Bug")};
-                        String[] buttonIcons = new String[] {"cancel", "bug"};
-                        int defaultButtonIdx = 1;
-                        String message = tr("An unexpected exception occurred.<br>" +
-                                "This is always a coding error. If you are running the latest<br>" +
-                                "version of JOSM, please consider being kind and file a bug report."
-                                );
-                        // Check user is running current tested version, the error may already be fixed
-                        int josmVersion = Version.getInstance().getVersion();
-                        if (josmVersion != Version.JOSM_UNKNOWN_VERSION) {
-                            try {
-                                int latestVersion = Integer.parseInt(new WikiReader().
-                                        read(Main.getJOSMWebsite()+"/wiki/TestedVersion?format=txt").trim());
-                                if (latestVersion > josmVersion) {
-                                    buttonTexts = new String[] {tr("Do nothing"), tr("Update JOSM"), tr("Report Bug")};
-                                    buttonIcons = new String[] {"cancel", "download", "bug"};
-                                    defaultButtonIdx = 2;
-                                    message = tr("An unexpected exception occurred. This is always a coding error.<br><br>" +
-                                            "However, you are running an old version of JOSM ({0}),<br>" +
-                                            "instead of using the current tested version (<b>{1}</b>).<br><br>"+
-                                            "<b>Please update JOSM</b> before considering to file a bug report.",
-                                            String.valueOf(josmVersion), String.valueOf(latestVersion));
-                                }
-                            } catch (IOException | NumberFormatException e) {
-                                Main.warn("Unable to detect latest version of JOSM: "+e.getMessage());
-                            }
-                        }
-                        // Show dialog
-                        ExtendedDialog ed = new ExtendedDialog(Main.parent, tr("Unexpected Exception"), buttonTexts);
-                        ed.setButtonIcons(buttonIcons);
-                        ed.setIcon(JOptionPane.ERROR_MESSAGE);
-                        ed.setCancelButton(1);
-                        ed.setDefaultButton(defaultButtonIdx);
-                        JPanel pnl = new JPanel(new GridBagLayout());
-                        pnl.add(new JLabel("<html>" + message + "</html>"), GBC.eol());
-                        JCheckBox cbSuppress = null;
-                        if (exceptionCounter > 1) {
-                            cbSuppress = new JCheckBox(tr("Suppress further error dialogs for this session."));
-                            pnl.add(cbSuppress, GBC.eol());
-                        }
-                        ed.setContent(pnl);
-                        ed.setFocusOnDefaultButton(true);
-                        ed.showDialog();
-                        if (cbSuppress != null && cbSuppress.isSelected()) {
-                            suppressExceptionDialogs = true;
-                        }
-                        if (ed.getValue() <= 1) {
-                            // "Do nothing"
-                            return;
-                        } else if (ed.getValue() < buttonTexts.length) {
-                            // "Update JOSM"
-                            try {
-                                Main.platform.openUrl(Main.getJOSMWebsite());
-                            } catch (IOException e) {
-                                Main.warn("Unable to access JOSM website: "+e.getMessage());
-                            }
-                        } else {
-                            // "Report bug"
-                            askForBugReport(e);
-                        }
-                    } else {
-                        // Ask for restart to install new plugin
-                        PluginPreference.notifyDownloadResults(
-                                Main.parent, pluginDownloadTask, !pluginDownloadTask.getDownloadedPlugins().isEmpty());
-                    }
-                }
-            });
+            SwingUtilities.invokeLater(new BugReporterWorker(PluginHandler.updateOrdisablePluginAfterException(e)));
         }
     }
 
@@ -188,13 +198,13 @@ public final class BugReportExceptionHandler implements Thread.UncaughtException
             e.printStackTrace(new PrintWriter(stack));
 
             String text = ShowStatusReportAction.getReportHeader() + stack.getBuffer().toString();
-            String urltext = text.replaceAll("\r","");
+            String urltext = text.replaceAll("\r", "");
             if (urltext.length() > maxlen) {
-                urltext = urltext.substring(0,maxlen);
+                urltext = urltext.substring(0, maxlen);
                 int idx = urltext.lastIndexOf('\n');
                 // cut whole line when not loosing too much
                 if (maxlen-idx < 200) {
-                    urltext = urltext.substring(0,idx+1);
+                    urltext = urltext.substring(0, idx+1);
                 }
                 urltext += "...<snip>...\n";
             }
@@ -204,12 +214,12 @@ public final class BugReportExceptionHandler implements Thread.UncaughtException
                     tr("You have encountered an error in JOSM. Before you file a bug report " +
                             "make sure you have updated to the latest version of JOSM here:")),
                             GBC.eol().fill(GridBagConstraints.HORIZONTAL));
-            p.add(new UrlLabel(Main.getJOSMWebsite(),2), GBC.eop().insets(8,0,0,0));
+            p.add(new UrlLabel(Main.getJOSMWebsite(), 2), GBC.eop().insets(8, 0, 0, 0));
             p.add(new JMultilineLabel(
                     tr("You should also update your plugins. If neither of those help please " +
                             "file a bug report in our bugtracker using this link:")),
                             GBC.eol().fill(GridBagConstraints.HORIZONTAL));
-            p.add(getBugReportUrlLabel(urltext), GBC.eop().insets(8,0,0,0));
+            p.add(getBugReportUrlLabel(urltext), GBC.eop().insets(8, 0, 0, 0));
             p.add(new JMultilineLabel(
                     tr("There the error information provided below should already be " +
                             "filled in for you. Please include information on how to reproduce " +
@@ -218,7 +228,7 @@ public final class BugReportExceptionHandler implements Thread.UncaughtException
             p.add(new JMultilineLabel(
                     tr("Alternatively, if that does not work you can manually fill in the information " +
                             "below at this URL:")), GBC.eol().fill(GridBagConstraints.HORIZONTAL));
-            p.add(new UrlLabel(Main.getJOSMWebsite()+"/newticket",2), GBC.eop().insets(8,0,0,0));
+            p.add(new UrlLabel(Main.getJOSMWebsite()+"/newticket", 2), GBC.eop().insets(8, 0, 0, 0));
 
             // Wiki formatting for manual copy-paste
             text = "{{{\n"+text+"}}}";
@@ -235,7 +245,7 @@ public final class BugReportExceptionHandler implements Thread.UncaughtException
 
             for (Component c: p.getComponents()) {
                 if (c instanceof JMultilineLabel) {
-                    ((JMultilineLabel)c).setMaxWidth(400);
+                    ((JMultilineLabel) c).setMaxWidth(400);
                 }
             }
 
@@ -281,7 +291,7 @@ public final class BugReportExceptionHandler implements Thread.UncaughtException
      * @return The URL label to create a JOSM bug report with the given debug text
      * @since 5849
      */
-    public static final UrlLabel getBugReportUrlLabel(String debugText) {
+    public static UrlLabel getBugReportUrlLabel(String debugText) {
         URL url = getBugReportUrl(debugText);
         if (url != null) {
             return new UrlLabel(url.toString(), Main.getJOSMWebsite()+"/josmticket?...", 2);
diff --git a/src/org/openstreetmap/josm/tools/CheckParameterUtil.java b/src/org/openstreetmap/josm/tools/CheckParameterUtil.java
index ba47caa..edd345c 100644
--- a/src/org/openstreetmap/josm/tools/CheckParameterUtil.java
+++ b/src/org/openstreetmap/josm/tools/CheckParameterUtil.java
@@ -25,10 +25,11 @@ public final class CheckParameterUtil {
      * @param parameterName The parameter name
      * @throws IllegalArgumentException if the primitive ID is not valid (negative or zero)
      */
-    public static void ensureValidPrimitiveId(PrimitiveId id, String parameterName) throws IllegalArgumentException {
+    public static void ensureValidPrimitiveId(PrimitiveId id, String parameterName) {
         ensureParameterNotNull(id, parameterName);
         if (id.getUniqueId() <= 0)
-            throw new IllegalArgumentException(MessageFormat.format("Expected unique id > 0 for primitive ''{1}'', got {0}", id.getUniqueId(), parameterName));
+            throw new IllegalArgumentException(
+                    MessageFormat.format("Expected unique id > 0 for primitive ''{1}'', got {0}", id.getUniqueId(), parameterName));
     }
 
     /**
@@ -38,10 +39,11 @@ public final class CheckParameterUtil {
      * @throws IllegalArgumentException if the lat/lon are {@code null} or not valid
      * @since 5980
      */
-    public static void ensureValidCoordinates(LatLon latlon, String parameterName) throws IllegalArgumentException {
+    public static void ensureValidCoordinates(LatLon latlon, String parameterName) {
         ensureParameterNotNull(latlon, parameterName);
         if (!latlon.isValid())
-            throw new IllegalArgumentException(MessageFormat.format("Expected valid lat/lon for parameter ''{0}'', got {1}", parameterName, latlon));
+            throw new IllegalArgumentException(
+                    MessageFormat.format("Expected valid lat/lon for parameter ''{0}'', got {1}", parameterName, latlon));
     }
 
     /**
@@ -51,10 +53,11 @@ public final class CheckParameterUtil {
      * @throws IllegalArgumentException if the east/north are {@code null} or not valid
      * @since 5980
      */
-    public static void ensureValidCoordinates(EastNorth eastnorth, String parameterName) throws IllegalArgumentException {
+    public static void ensureValidCoordinates(EastNorth eastnorth, String parameterName) {
         ensureParameterNotNull(eastnorth, parameterName);
         if (!eastnorth.isValid())
-            throw new IllegalArgumentException(MessageFormat.format("Expected valid east/north for parameter ''{0}'', got {1}", parameterName, eastnorth));
+            throw new IllegalArgumentException(
+                    MessageFormat.format("Expected valid east/north for parameter ''{0}'', got {1}", parameterName, eastnorth));
     }
 
     /**
@@ -63,9 +66,10 @@ public final class CheckParameterUtil {
      * @param parameterName The parameter name
      * @throws IllegalArgumentException if the version is not valid (negative)
      */
-    public static void ensureValidVersion(long version, String parameterName) throws IllegalArgumentException {
+    public static void ensureValidVersion(long version, String parameterName) {
         if (version < 0)
-            throw new IllegalArgumentException(MessageFormat.format("Expected value of type long > 0 for parameter ''{0}'', got {1}", parameterName, version));
+            throw new IllegalArgumentException(
+                    MessageFormat.format("Expected value of type long > 0 for parameter ''{0}'', got {1}", parameterName, version));
     }
 
     /**
@@ -74,7 +78,7 @@ public final class CheckParameterUtil {
      * @param parameterName The parameter name
      * @throws IllegalArgumentException if the parameter is {@code null}
      */
-    public static void ensureParameterNotNull(Object value, String parameterName) throws IllegalArgumentException {
+    public static void ensureParameterNotNull(Object value, String parameterName) {
         if (value == null)
             throw new IllegalArgumentException(MessageFormat.format("Parameter ''{0}'' must not be null", parameterName));
     }
@@ -85,7 +89,7 @@ public final class CheckParameterUtil {
      * @throws IllegalArgumentException if the parameter is {@code null}
      * @since 3871
      */
-    public static void ensureParameterNotNull(Object value) throws IllegalArgumentException {
+    public static void ensureParameterNotNull(Object value) {
         if (value == null)
             throw new IllegalArgumentException("Parameter must not be null");
     }
@@ -95,7 +99,7 @@ public final class CheckParameterUtil {
      * @param condition The condition to check
      * @throws IllegalArgumentException if the condition does not hold
      */
-    public static void ensureThat(boolean condition, String message) throws IllegalArgumentException {
+    public static void ensureThat(boolean condition, String message) {
         if (!condition)
             throw new IllegalArgumentException(message);
     }
@@ -103,14 +107,15 @@ public final class CheckParameterUtil {
     /**
      * Ensures that <code>id</code> is non-null primitive id of type {@link OsmPrimitiveType#NODE}
      *
-     * @param id  the primitive  id
+     * @param id the primitive  id
      * @param parameterName the name of the parameter to be checked
      * @throws IllegalArgumentException if id is null
      * @throws IllegalArgumentException if id.getType() != NODE
      */
-    public static void ensureValidNodeId(PrimitiveId id, String parameterName) throws IllegalArgumentException {
+    public static void ensureValidNodeId(PrimitiveId id, String parameterName) {
         ensureParameterNotNull(id, parameterName);
-        if (! id.getType().equals(OsmPrimitiveType.NODE))
-            throw new IllegalArgumentException(MessageFormat.format("Parameter ''{0}'' of type node expected, got ''{1}''", parameterName, id.getType().getAPIName()));
+        if (!id.getType().equals(OsmPrimitiveType.NODE))
+            throw new IllegalArgumentException(
+                    MessageFormat.format("Parameter ''{0}'' of type node expected, got ''{1}''", parameterName, id.getType().getAPIName()));
     }
 }
diff --git a/src/org/openstreetmap/josm/tools/ColorHelper.java b/src/org/openstreetmap/josm/tools/ColorHelper.java
index 1c94833..5b6cc2d 100644
--- a/src/org/openstreetmap/josm/tools/ColorHelper.java
+++ b/src/org/openstreetmap/josm/tools/ColorHelper.java
@@ -2,6 +2,7 @@
 package org.openstreetmap.josm.tools;
 
 import java.awt.Color;
+import java.util.Locale;
 
 /**
  * Helper to convert from color to HTML string and back.
@@ -18,7 +19,7 @@ public final class ColorHelper {
      * @return the color
      */
     public static Color html2color(String html) {
-        if (html.length() > 0 && html.charAt(0) == '#')
+        if (!html.isEmpty() && html.charAt(0) == '#')
             html = html.substring(1);
         if (html.length() == 3) {
             return html2color(new String(
@@ -28,10 +29,10 @@ public final class ColorHelper {
             return null;
         try {
             return new Color(
-                    Integer.parseInt(html.substring(0,2),16),
-                    Integer.parseInt(html.substring(2,4),16),
-                    Integer.parseInt(html.substring(4,6),16),
-                    (html.length() == 8 ? Integer.parseInt(html.substring(6,8),16) : 255));
+                    Integer.parseInt(html.substring(0, 2), 16),
+                    Integer.parseInt(html.substring(2, 4), 16),
+                    Integer.parseInt(html.substring(4, 6), 16),
+                    html.length() == 8 ? Integer.parseInt(html.substring(6, 8), 16) : 255);
         } catch (NumberFormatException e) {
             return null;
         }
@@ -39,7 +40,7 @@ public final class ColorHelper {
 
     private static String int2hex(int i) {
         String s = Integer.toHexString(i / 16) + Integer.toHexString(i % 16);
-        return s.toUpperCase();
+        return s.toUpperCase(Locale.ENGLISH);
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/tools/ColorScale.java b/src/org/openstreetmap/josm/tools/ColorScale.java
index 5bff226..ea3b5ac 100644
--- a/src/org/openstreetmap/josm/tools/ColorScale.java
+++ b/src/org/openstreetmap/josm/tools/ColorScale.java
@@ -9,7 +9,7 @@ import java.awt.Graphics2D;
  * Utility class that helps to work with color scale for coloring GPX tracks etc.
  * @since 7319
  */
-public class ColorScale {
+public final class ColorScale {
     private double min, max;
     private Color noDataColor;
     private Color belowMinColor;
@@ -37,9 +37,9 @@ public class ColorScale {
     public static ColorScale createCyclicScale(int count) {
         ColorScale sc = new ColorScale();
         //                    red   yellow  green   blue    red
-        int[] h = new int[] { 0,    59,     127,    244,    360};
-        int[] s = new int[] { 100,  84,     99,     100 };
-        int[] b = new int[] { 90,   93,     74,     83 };
+        int[] h = new int[] {0,    59,     127,    244,    360};
+        int[] s = new int[] {100,  84,     99,     100};
+        int[] b = new int[] {90,   93,     74,     83};
 
         sc.colors = new Color[count];
         for (int i = 0; i < sc.colors.length; i++) {
@@ -86,21 +86,21 @@ public class ColorScale {
         belowMinColor = colors[0];
     }
 
-    public final Color getColor(double value) {
-        if (value<min) return belowMinColor;
-        if (value>max) return aboveMaxColor;
+    public Color getColor(double value) {
+        if (value < min) return belowMinColor;
+        if (value > max) return aboveMaxColor;
         if (Double.isNaN(value)) return noDataColor;
         final int n = colors.length;
         int idx = (int) ((value-min)*colors.length / (max-min));
-        if (idx<colors.length) {
+        if (idx < colors.length) {
             return colors[idx];
         } else {
             return colors[n-1]; // this happens when value==max
         }
     }
 
-    public final Color getColor(Number value) {
-        return (value==null)? noDataColor : getColor(value.doubleValue());
+    public Color getColor(Number value) {
+        return (value == null) ? noDataColor : getColor(value.doubleValue());
     }
 
     public Color getNoDataColor() {
@@ -131,7 +131,7 @@ public class ColorScale {
     public ColorScale makeReversed() {
         int n = colors.length;
         Color tmp;
-        for (int i=0; i<n/2; i++) {
+        for (int i = 0; i < n/2; i++) {
             tmp = colors[i];
             colors[i] = colors[n-1-i];
             colors[n-1-i] = tmp;
@@ -143,11 +143,11 @@ public class ColorScale {
     }
 
     public void drawColorBar(Graphics2D g, int x, int y, int w, int h, double valueScale) {
-        int n=colors.length;
+        int n = colors.length;
 
-        for (int i=0; i<n; i++) {
+        for (int i = 0; i < n; i++) {
             g.setColor(colors[i]);
-            if (w<h) {
+            if (w < h) {
                 g.fillRect(x, y+i*h/n, w, h/n+1);
             } else {
                 g.fillRect(x+i*w/n, y, w/n+1, h);
@@ -157,16 +157,17 @@ public class ColorScale {
         int fw, fh;
         FontMetrics fm = g.getFontMetrics();
         fh = fm.getHeight()/2;
-        fw = fm.stringWidth(String.valueOf(Math.max((int)Math.abs(max*valueScale), (int)Math.abs(min*valueScale)))) + fm.stringWidth("0.123");
+        fw = fm.stringWidth(String.valueOf(Math.max((int) Math.abs(max*valueScale),
+                (int) Math.abs(min*valueScale)))) + fm.stringWidth("0.123");
         g.setColor(noDataColor);
         if (title != null) {
             g.drawString(title, x-fw-3, y-fh*3/2);
         }
-        for (int i=0; i<=intervalCount; i++) {
-            g.setColor(colors[(int)(1.0*i*n/intervalCount-1e-10)]);
+        for (int i = 0; i <= intervalCount; i++) {
+            g.setColor(colors[(int) (1.0*i*n/intervalCount-1e-10)]);
             final double val =  min+i*(max-min)/intervalCount;
             final String txt = String.format("%.3f", val*valueScale);
-            if (w<h) {
+            if (w < h) {
                 g.drawString(txt, x-fw-3, y+i*h/intervalCount+fh/2);
             } else {
                 g.drawString(txt, x+i*w/intervalCount-fw/2, y+fh-3);
diff --git a/src/org/openstreetmap/josm/tools/CompositeList.java b/src/org/openstreetmap/josm/tools/CompositeList.java
index 217107f..1b02726 100644
--- a/src/org/openstreetmap/josm/tools/CompositeList.java
+++ b/src/org/openstreetmap/josm/tools/CompositeList.java
@@ -8,11 +8,11 @@ import java.util.List;
  * Joined List build from two Lists (read-only).
  *
  * Extremely simple single-purpose implementation.
- * @param <T>
+ * @param <T> item type
  * @since 7109
  */
 public class CompositeList<T> extends AbstractList<T> {
-    private List<? extends T> a,b;
+    private List<? extends T> a, b;
 
     /**
      * Constructs a new {@code CompositeList} from two lists.
diff --git a/src/org/openstreetmap/josm/tools/CopyList.java b/src/org/openstreetmap/josm/tools/CopyList.java
index 122ad94..e206094 100644
--- a/src/org/openstreetmap/josm/tools/CopyList.java
+++ b/src/org/openstreetmap/josm/tools/CopyList.java
@@ -177,7 +177,7 @@ public final class CopyList<E> extends AbstractList<E> implements RandomAccess,
                 return next;
             } catch (IndexOutOfBoundsException e) {
                 checkForComodification();
-                throw new NoSuchElementException();
+                throw new NoSuchElementException(e.getMessage());
             }
         }
 
@@ -195,7 +195,7 @@ public final class CopyList<E> extends AbstractList<E> implements RandomAccess,
                 lastRet = -1;
                 expectedModCount = modCount;
             } catch (IndexOutOfBoundsException e) {
-                throw new ConcurrentModificationException();
+                throw new ConcurrentModificationException(e);
             }
         }
 
diff --git a/src/org/openstreetmap/josm/tools/Destroyable.java b/src/org/openstreetmap/josm/tools/Destroyable.java
index b763e11..ed2544d 100644
--- a/src/org/openstreetmap/josm/tools/Destroyable.java
+++ b/src/org/openstreetmap/josm/tools/Destroyable.java
@@ -13,5 +13,5 @@ public interface Destroyable {
     /**
      * Called when the object has been destroyed.
      */
-    public void destroy();
+    void destroy();
 }
diff --git a/src/org/openstreetmap/josm/tools/Diff.java b/src/org/openstreetmap/josm/tools/Diff.java
index 0a6b4e9..7f25043 100644
--- a/src/org/openstreetmap/josm/tools/Diff.java
+++ b/src/org/openstreetmap/josm/tools/Diff.java
@@ -1,4 +1,4 @@
-// License: GPL.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.tools;
 
 //// Taken from http://www.bmsi.com/java/#diff
@@ -15,7 +15,7 @@ package org.openstreetmap.josm.tools;
  * Test new direct equivalence API
  *
  * Revision 1.13  2009/12/07 17:43:17  stuart
- * Compute equiv_max for int[] ctor
+ * Compute equivMax for int[] ctor
  *
  * Revision 1.12  2009/12/07 17:34:46  stuart
  * Ctor with int[].
@@ -95,13 +95,13 @@ public class Diff {
       an edit script, if desired.
      */
     public Diff(Object[] a, Object[] b) {
-        Map<Object,Integer> h = new HashMap<>(a.length + b.length);
-        filevec = new FileData[] { new FileData(a,h),new FileData(b,h) };
+        Map<Object, Integer> h = new HashMap<>(a.length + b.length);
+        filevec = new FileData[] {new FileData(a, h), new FileData(b, h)};
     }
 
     /** 1 more than the maximum equivalence value used for this or its
      sibling file. */
-    private int equiv_max = 1;
+    private int equivMax = 1;
 
     /** When set to true, the comparison uses a heuristic to speed it up.
     With this heuristic, for files with a constant small density
@@ -110,7 +110,7 @@ public class Diff {
 
     /** When set to true, the algorithm returns a guarranteed minimal
       set of changes.  This makes things slower, sometimes much slower. */
-    public boolean no_discards = false;
+    public boolean noDiscards = false;
 
     private int[] xvec, yvec; /* Vectors being compared. */
     private int[] fdiag;      /* Vector, indexed by diagonal, containing
@@ -151,7 +151,7 @@ public class Diff {
      the worst this can do is cause suboptimal diff output.
      It cannot cause incorrect diff output.  */
 
-    private int diag (int xoff, int xlim, int yoff, int ylim) {
+    private int diag(int xoff, int xlim, int yoff, int ylim) {
         final int[] fd = fdiag; // Give the compiler a chance.
         final int[] bd = bdiag; // Additional help for the compiler.
         final int[] xv = xvec;      // Still more help for the compiler.
@@ -169,8 +169,7 @@ public class Diff {
         fd[fdiagoff + fmid] = xoff;
         bd[bdiagoff + bmid] = xlim;
 
-        for (int c = 1;; ++c)
-        {
+        for (int c = 1;; ++c) {
             int d;          /* Active diagonal. */
             boolean big_snake = false;
 
@@ -185,8 +184,7 @@ public class Diff {
             } else {
                 --fmax;
             }
-            for (d = fmax; d >= fmin; d -= 2)
-            {
+            for (d = fmax; d >= fmin; d -= 2) {
                 int x, y, oldx, tlo = fd[fdiagoff + d - 1], thi = fd[fdiagoff + d + 1];
 
                 if (tlo >= thi) {
@@ -203,8 +201,7 @@ public class Diff {
                     big_snake = true;
                 }
                 fd[fdiagoff + d] = x;
-                if (odd && bmin <= d && d <= bmax && bd[bdiagoff + d] <= fd[fdiagoff + d])
-                {
+                if (odd && bmin <= d && d <= bmax && bd[bdiagoff + d] <= fd[fdiagoff + d]) {
                     cost = 2 * c - 1;
                     return d;
                 }
@@ -221,8 +218,7 @@ public class Diff {
             } else {
                 --bmax;
             }
-            for (d = bmax; d >= bmin; d -= 2)
-            {
+            for (d = bmax; d >= bmin; d -= 2) {
                 int x, y, oldx, tlo = bd[bdiagoff + d - 1], thi = bd[bdiagoff + d + 1];
 
                 if (tlo < thi) {
@@ -239,8 +235,7 @@ public class Diff {
                     big_snake = true;
                 }
                 bd[bdiagoff + d] = x;
-                if (!odd && fmin <= d && d <= fmax && bd[bdiagoff + d] <= fd[fdiagoff + d])
-                {
+                if (!odd && fmin <= d && d <= fmax && bd[bdiagoff + d] <= fd[fdiagoff + d]) {
                     cost = 2 * c;
                     return d;
                 }
@@ -254,72 +249,63 @@ public class Diff {
        With this heuristic, for files with a constant small density
        of changes, the algorithm is linear in the file size.  */
 
-            if (c > 200 && big_snake && heuristic)
-            {
+            if (c > 200 && big_snake && heuristic) {
                 int best = 0;
                 int bestpos = -1;
 
-                for (d = fmax; d >= fmin; d -= 2)
-                {
+                for (d = fmax; d >= fmin; d -= 2) {
                     int dd = d - fmid;
                     int x = fd[fdiagoff + d];
                     int y = x - d;
                     int v = (x - xoff) * 2 - dd;
-                    if (v > 12 * (c + (dd < 0 ? -dd : dd)))
-                    {
+                    if (v > 12 * (c + (dd < 0 ? -dd : dd))) {
                         if (v > best
                                 && xoff + SNAKE_LIMIT <= x && x < xlim
-                                && yoff + SNAKE_LIMIT <= y && y < ylim)
-                        {
+                                && yoff + SNAKE_LIMIT <= y && y < ylim) {
                             /* We have a good enough best diagonal.
                                now insist that it end with a significant snake.  */
                             int k;
 
-                            for (k = 1; xvec[x - k] == yvec[y - k]; k++)
-                                if (k == SNAKE_LIMIT)
-                                {
+                            for (k = 1; xvec[x - k] == yvec[y - k]; k++) {
+                                if (k == SNAKE_LIMIT) {
                                     best = v;
                                     bestpos = d;
                                     break;
                                 }
+                            }
                         }
                     }
                 }
-                if (best > 0)
-                {
+                if (best > 0) {
                     cost = 2 * c - 1;
                     return bestpos;
                 }
 
                 best = 0;
-                for (d = bmax; d >= bmin; d -= 2)
-                {
+                for (d = bmax; d >= bmin; d -= 2) {
                     int dd = d - bmid;
                     int x = bd[bdiagoff + d];
                     int y = x - d;
                     int v = (xlim - x) * 2 + dd;
-                    if (v > 12 * (c + (dd < 0 ? -dd : dd)))
-                    {
+                    if (v > 12 * (c + (dd < 0 ? -dd : dd))) {
                         if (v > best
                                 && xoff < x && x <= xlim - SNAKE_LIMIT
-                                && yoff < y && y <= ylim - SNAKE_LIMIT)
-                        {
+                                && yoff < y && y <= ylim - SNAKE_LIMIT) {
                             /* We have a good enough best diagonal.
                                now insist that it end with a significant snake.  */
                             int k;
 
-                            for (k = 0; xvec[x + k] == yvec[y + k]; k++)
-                                if (k == SNAKE_LIMIT)
-                                {
+                            for (k = 0; xvec[x + k] == yvec[y + k]; k++) {
+                                if (k == SNAKE_LIMIT) {
                                     best = v;
                                     bestpos = d;
                                     break;
                                 }
+                            }
                         }
                     }
                 }
-                if (best > 0)
-                {
+                if (best > 0) {
                     cost = 2 * c - 1;
                     return bestpos;
                 }
@@ -338,7 +324,7 @@ public class Diff {
      Note that XLIM, YLIM are exclusive bounds.
      All line numbers are origin-0 and discarded lines are not counted.  */
 
-    private void compareseq (int xoff, int xlim, int yoff, int ylim) {
+    private void compareseq(int xoff, int xlim, int yoff, int ylim) {
         /* Slide down the bottom initial diagonal. */
         while (xoff < xlim && yoff < ylim && xvec[xoff] == yvec[yoff]) {
             ++xoff; ++yoff;
@@ -351,16 +337,16 @@ public class Diff {
         /* Handle simple cases. */
         if (xoff == xlim) {
             while (yoff < ylim) {
-                filevec[1].changed_flag[1+filevec[1].realindexes[yoff++]] = true;
+                filevec[1].changedFlag[1+filevec[1].realindexes[yoff++]] = true;
             }
         } else if (yoff == ylim) {
             while (xoff < xlim) {
-                filevec[0].changed_flag[1+filevec[0].realindexes[xoff++]] = true;
+                filevec[0].changedFlag[1+filevec[0].realindexes[xoff++]] = true;
             }
         } else {
             /* Find a point of correspondence in the middle of the files.  */
 
-            int d = diag (xoff, xlim, yoff, ylim);
+            int d = diag(xoff, xlim, yoff, ylim);
             int c = cost;
             int b = bdiag[bdiagoff + d];
 
@@ -370,15 +356,14 @@ public class Diff {
                    and that case was handled above without calling `diag'.
                    Let's verify that this is true.  */
                 throw new IllegalArgumentException("Empty subsequence");
-            else
-            {
+            else {
                 /* Use that point to split this problem into two subproblems.  */
-                compareseq (xoff, b, yoff, b - d);
+                compareseq(xoff, b, yoff, b - d);
                 /* This used to use f instead of b,
                    but that is incorrect!
                    It is not necessarily the case that diagonal d
                    has a snake from b to f.  */
-                compareseq (b, xlim, b - d, ylim);
+                compareseq(b, xlim, b - d, ylim);
             }
         }
     }
@@ -411,9 +396,9 @@ public class Diff {
             @param len1 number of lines in 2nd file
             @return a linked list of changes - or null
          */
-        public Change build_script(
-                boolean[] changed0,int len0,
-                boolean[] changed1,int len1
+        Change build_script(
+                boolean[] changed0, int len0,
+                boolean[] changed1, int len1
         );
     }
 
@@ -423,9 +408,8 @@ public class Diff {
     static class ReverseScript implements ScriptBuilder {
         @Override
         public  Change build_script(
-                final boolean[] changed0,int len0,
-                final boolean[] changed1,int len1)
-        {
+                final boolean[] changed0, int len0,
+                final boolean[] changed1, int len1) {
             Change script = null;
             int i0 = 0, i1 = 0;
             while (i0 < len0 || i1 < len1) {
@@ -457,16 +441,13 @@ public class Diff {
             producing an edit script in forward order.  */
         @Override
         public Change build_script(
-                final boolean[] changed0,int len0,
-                final boolean[] changed1,int len1)
-        {
+                final boolean[] changed0, int len0,
+                final boolean[] changed1, int len1) {
             Change script = null;
             int i0 = len0, i1 = len1;
 
-            while (i0 >= 0 || i1 >= 0)
-            {
-                if (changed0[i0] || changed1[i1])
-                {
+            while (i0 >= 0 || i1 >= 0) {
+                if (changed0[i0] || changed1[i1]) {
                     int line0 = i0, line1 = i1;
 
                     /* Find # lines changed here in each file.  */
@@ -514,7 +495,7 @@ public class Diff {
        because they don't match anything.  Detect them now,
        and avoid even thinking about them in the main comparison algorithm.  */
 
-        discard_confusing_lines ();
+        discard_confusing_lines();
 
         /* Now do the main comparison algorithm, considering just the
        undiscarded lines.  */
@@ -523,29 +504,29 @@ public class Diff {
         yvec = filevec[1].undiscarded;
 
         int diags =
-            filevec[0].nondiscarded_lines + filevec[1].nondiscarded_lines + 3;
+            filevec[0].nondiscardedLines + filevec[1].nondiscardedLines + 3;
         fdiag = new int[diags];
-        fdiagoff = filevec[1].nondiscarded_lines + 1;
+        fdiagoff = filevec[1].nondiscardedLines + 1;
         bdiag = new int[diags];
-        bdiagoff = filevec[1].nondiscarded_lines + 1;
+        bdiagoff = filevec[1].nondiscardedLines + 1;
 
-        compareseq (0, filevec[0].nondiscarded_lines,
-                0, filevec[1].nondiscarded_lines);
+        compareseq(0, filevec[0].nondiscardedLines,
+                0, filevec[1].nondiscardedLines);
         fdiag = null;
         bdiag = null;
 
         /* Modify the results slightly to make them prettier
        in cases where that can validly be done.  */
 
-        shift_boundaries ();
+        shift_boundaries();
 
         /* Get the results of comparison in the form of a chain
        of `struct change's -- an edit script.  */
         return bld.build_script(
-                filevec[0].changed_flag,
-                filevec[0].buffered_lines,
-                filevec[1].changed_flag,
-                filevec[1].buffered_lines
+                filevec[0].changedFlag,
+                filevec[0].bufferedLines,
+                filevec[1].changedFlag,
+                filevec[1].bufferedLines
         );
 
     }
@@ -587,17 +568,16 @@ public class Diff {
             this.deleted = deleted;
             this.link = old;
         }
-
+
         @Override
-        public String toString() {
-            String s = String.format("%d -%d +%d %d",line0,deleted,inserted,line1);
+        public String toString() {
+            String s = String.format("%d -%d +%d %d", line0, deleted, inserted, line1);
             return (link != null) ? s = s + '\n' + link : s;
-        }
+        }
     }
 
     /** Data on one input file being compared.
      */
-
     class FileData {
 
         /** Allocate changed array for the results of comparison.  */
@@ -606,7 +586,7 @@ public class Diff {
                is an insertion or deletion.
                Allocate an extra element, always zero, at each end of each vector.
              */
-            changed_flag = new boolean[buffered_lines + 2];
+            changedFlag = new boolean[bufferedLines + 2];
         }
 
         /** Return equiv_count[I] as the number of lines in this file
@@ -614,8 +594,8 @@ public class Diff {
          @return the array of equivalence class counts.
          */
         int[] equivCount() {
-            int[] equiv_count = new int[equiv_max];
-            for (int i = 0; i < buffered_lines; ++i) {
+            int[] equiv_count = new int[equivMax];
+            for (int i = 0; i < bufferedLines; ++i) {
                 ++equiv_count[equivs[i]];
             }
             return equiv_count;
@@ -651,13 +631,12 @@ public class Diff {
         /**
          * Mark to be discarded each line that matches no line of another file.
          * If a line matches many lines, mark it as provisionally discardable.
-         * @see #equivCount()
          * @param counts The count of each equivalence number for the other file.
-         * @return 0=nondiscardable, 1=discardable or 2=provisionally discardable
-         *  for each line
+         * @return 0=nondiscardable, 1=discardable or 2=provisionally discardable for each line
+         * @see #equivCount()
          */
         private byte[] discardable(final int[] counts) {
-            final int end = buffered_lines;
+            final int end = bufferedLines;
             final byte[] discards = new byte[end];
             final int[] equivs = this.equivs;
             int many = 5;
@@ -669,8 +648,7 @@ public class Diff {
                 many *= 2;
             }
 
-            for (int i = 0; i < end; i++)
-            {
+            for (int i = 0; i < end; i++) {
                 int nmatch;
                 if (equivs[i] == 0) {
                     continue;
@@ -691,15 +669,13 @@ public class Diff {
          * and end.
          */
         private void filterDiscards(final byte[] discards) {
-            final int end = buffered_lines;
+            final int end = bufferedLines;
 
-            for (int i = 0; i < end; i++)
-            {
+            for (int i = 0; i < end; i++) {
                 /* Cancel provisional discards not in middle of run of discards.  */
                 if (discards[i] == 2) {
                     discards[i] = 0;
-                } else if (discards[i] != 0)
-                {
+                } else if (discards[i] != 0) {
                     /* We have found a nonprovisional discard.  */
                     int j;
                     int length;
@@ -707,8 +683,7 @@ public class Diff {
 
                     /* Find end of this run of discardable lines.
                        Count how many are provisionally discardable.  */
-                    for (j = i; j < end; j++)
-                    {
+                    for (j = i; j < end; j++) {
                         if (discards[j] == 0) {
                             break;
                         }
@@ -749,7 +724,7 @@ public class Diff {
 
                         /* Cancel any subrun of MINIMUM or more provisionals
                            within the larger run.  */
-                        for (j = 0, consec = 0; j < length; j++)
+                        for (j = 0, consec = 0; j < length; j++) {
                             if (discards[i + j] != 2) {
                                 consec = 0;
                             } else if (minimum == ++consec) {
@@ -758,20 +733,19 @@ public class Diff {
                             } else if (minimum < consec) {
                                 discards[i + j] = 0;
                             }
+                        }
 
                         /* Scan from beginning of run
                            until we find 3 or more nonprovisionals in a row
                            or until the first nonprovisional at least 8 lines in.
                            Until that point, cancel any provisionals.  */
-                        for (j = 0, consec = 0; j < length; j++)
-                        {
+                        for (j = 0, consec = 0; j < length; j++) {
                             if (j >= 8 && discards[i + j] == 1) {
                                 break;
                             }
                             if (discards[i + j] == 2) {
                                 consec = 0; discards[i + j] = 0;
-                            }
-                            else if (discards[i + j] == 0) {
+                            } else if (discards[i + j] == 0) {
                                 consec = 0;
                             } else {
                                 consec++;
@@ -785,15 +759,13 @@ public class Diff {
                         i += length - 1;
 
                         /* Same thing, from end.  */
-                        for (j = 0, consec = 0; j < length; j++)
-                        {
+                        for (j = 0, consec = 0; j < length; j++) {
                             if (j >= 8 && discards[i - j] == 1) {
                                 break;
                             }
                             if (discards[i - j] == 2) {
                                 consec = 0; discards[i - j] = 0;
-                            }
-                            else if (discards[i - j] == 0) {
+                            } else if (discards[i - j] == 0) {
                                 consec = 0;
                             } else {
                                 consec++;
@@ -811,33 +783,33 @@ public class Diff {
             @param discards flags lines to be discarded
          */
         private void discard(final byte[] discards) {
-            final int end = buffered_lines;
+            final int end = bufferedLines;
             int j = 0;
-            for (int i = 0; i < end; ++i)
-                if (no_discards || discards[i] == 0)
-                {
+            for (int i = 0; i < end; ++i) {
+                if (noDiscards || discards[i] == 0) {
                     undiscarded[j] = equivs[i];
                     realindexes[j++] = i;
                 } else {
-                    changed_flag[1+i] = true;
+                    changedFlag[1+i] = true;
                 }
-            nondiscarded_lines = j;
+            }
+            nondiscardedLines = j;
         }
 
         FileData(int length) {
-            buffered_lines = length;
+            bufferedLines = length;
             equivs = new int[length];
-            undiscarded = new int[buffered_lines];
-            realindexes = new int[buffered_lines];
+            undiscarded = new int[bufferedLines];
+            realindexes = new int[bufferedLines];
         }
 
-        FileData(Object[] data, Map<Object,Integer> h) {
+        FileData(Object[] data, Map<Object, Integer> h) {
             this(data.length);
             // FIXME: diff 2.7 removes common prefix and common suffix
             for (int i = 0; i < data.length; ++i) {
                 Integer ir = h.get(data[i]);
                 if (ir == null) {
-                    h.put(data[i],equivs[i] = equiv_max++);
+                    h.put(data[i], equivs[i] = equivMax++);
                 } else {
                     equivs[i] = ir.intValue();
                 }
@@ -856,25 +828,22 @@ public class Diff {
        would join this change to other changes.
       @param f the file being compared against
          */
-
         void shift_boundaries(FileData f) {
-            final boolean[] changed = changed_flag;
-            final boolean[] other_changed = f.changed_flag;
+            final boolean[] changed = changedFlag;
+            final boolean[] other_changed = f.changedFlag;
             int i = 0;
             int j = 0;
-            int i_end = buffered_lines;
+            int i_end = bufferedLines;
             int preceding = -1;
             int other_preceding = -1;
 
-            for (;;)
-            {
+            for (;;) {
                 int start, end, other_start;
 
                 /* Scan forwards to find beginning of another run of changes.
                    Also keep track of the corresponding point in the other file.  */
 
-                while (i < i_end && !changed[1+i])
-                {
+                while (i < i_end && !changed[1+i]) {
                     while (other_changed[1+j++]) {
                         /* Non-corresponding lines in the other file
                            will count as the preceding batch of changes.  */
@@ -890,8 +859,7 @@ public class Diff {
                 start = i;
                 other_start = j;
 
-                for (;;)
-                {
+                for (;;) {
                     /* Now find the end of this run of changes.  */
 
                     while (i < i_end && changed[1+i]) {
@@ -908,13 +876,8 @@ public class Diff {
                     /* You might ask, how could this run follow right after another?
                        Only because the previous run was shifted here.  */
 
-                    if (end != i_end
-                            && equivs[start] == equivs[end]
-                                                       && !other_changed[1+j]
-                                                                         && !((preceding >= 0 && start == preceding)
-                                                                                 || (other_preceding >= 0
-                                                                                         && other_start == other_preceding)))
-                    {
+                    if (end != i_end && equivs[start] == equivs[end] && !other_changed[1+j]
+                         && !((preceding >= 0 && start == preceding) || (other_preceding >= 0 && other_start == other_preceding))) {
                         changed[1+end++] = true;
                         changed[1+start++] = false;
                         ++i;
@@ -933,7 +896,7 @@ public class Diff {
         }
 
         /** Number of elements (lines) in this file. */
-        private final int buffered_lines;
+        private final int bufferedLines;
 
         /** Vector, indexed by line number, containing an equivalence code for
            each line.  It is this vector that is actually compared with that
@@ -949,11 +912,11 @@ public class Diff {
         private final int[]    realindexes;
 
         /** Total number of nondiscarded lines. */
-        private int         nondiscarded_lines;
+        private int         nondiscardedLines;
 
         /** Array, indexed by real origin-1 line number,
            containing true for a line that is an insertion or a deletion.
            The results of comparison are stored here.  */
-        private boolean[]       changed_flag;
+        private boolean[]       changedFlag;
     }
 }
diff --git a/src/org/openstreetmap/josm/tools/ExceptionUtil.java b/src/org/openstreetmap/josm/tools/ExceptionUtil.java
index 2ee4853..59bc54e 100644
--- a/src/org/openstreetmap/josm/tools/ExceptionUtil.java
+++ b/src/org/openstreetmap/josm/tools/ExceptionUtil.java
@@ -55,7 +55,6 @@ public final class ExceptionUtil {
                 Main.pref.get("osm-server.url", OsmApi.DEFAULT_API_URL));
     }
 
-
     public static String explainMissingOAuthAccessTokenException(MissingOAuthAccessTokenException e) {
         Main.error(e);
         return tr(
@@ -104,7 +103,8 @@ public final class ExceptionUtil {
             }
             return Pair.create(n, refs);
         }
-        m = Pattern.compile(".*Way (\\d+) requires the nodes with id in " + ids + ".*").matcher(msg); // ... ", which either do not exist, or are not visible"
+        m = Pattern.compile(".*Way (\\d+) requires the nodes with id in " + ids + ".*").matcher(msg);
+        // ... ", which either do not exist, or are not visible"
         if (m.matches()) {
             OsmPrimitive n = new Way(Long.parseLong(m.group(1)));
             for (String s : m.group(2).split(",")) {
@@ -127,7 +127,7 @@ public final class ExceptionUtil {
         if (conflict != null) {
             OsmPrimitive firstRefs = conflict.b.iterator().next();
             String objId = Long.toString(conflict.a.getId());
-            Collection<Long> refIds= Utils.transform(conflict.b, new Utils.Function<OsmPrimitive, Long>() {
+            Collection<Long> refIds = Utils.transform(conflict.b, new Utils.Function<OsmPrimitive, Long>() {
 
                 @Override
                 public Long apply(OsmPrimitive x) {
@@ -235,7 +235,7 @@ public final class ExceptionUtil {
             return tr(
                     "<html>Uploading to the server <strong>failed</strong> because your current<br>"
                     + "dataset violates a precondition.<br>" + "The error message is:<br>" + "{0}" + "</html>",
-                    escapeReservedCharactersHTML(e.getMessage()));
+                    Utils.escapeReservedCharactersHTML(e.getMessage()));
         }
     }
 
@@ -423,7 +423,7 @@ public final class ExceptionUtil {
             msg = e.toString();
         }
         Main.error(e);
-        return escapeReservedCharactersHTML(msg);
+        return Utils.escapeReservedCharactersHTML(msg);
     }
 
     /**
@@ -441,6 +441,9 @@ public final class ExceptionUtil {
             host = new URL(apiUrl).getHost();
         } catch (MalformedURLException ex) {
             // shouldn't happen
+            if (Main.isTraceEnabled()) {
+                Main.trace(e.getMessage());
+            }
         }
 
         return tr("<html>Failed to open a connection to the remote server<br>" + "''{0}''<br>"
@@ -601,6 +604,9 @@ public final class ExceptionUtil {
             host = new URL(apiUrl).getHost();
         } catch (MalformedURLException ex) {
             // shouldn't happen
+            if (Main.isTraceEnabled()) {
+                Main.trace(e.getMessage());
+            }
         }
 
         Main.error(e);
@@ -613,13 +619,14 @@ public final class ExceptionUtil {
      * Replies the first nested exception of type <code>nestedClass</code> (including
      * the root exception <code>e</code>) or null, if no such exception is found.
      *
-     * @param <T>
+     * @param <T> nested exception type
      * @param e the root exception
      * @param nestedClass the type of the nested exception
      * @return the first nested exception of type <code>nestedClass</code> (including
      * the root exception <code>e</code>) or null, if no such exception is found.
+     * @since 8470
      */
-    protected static <T> T getNestedException(Exception e, Class<T> nestedClass) {
+    public static <T> T getNestedException(Exception e, Class<T> nestedClass) {
         Throwable t = e;
         while (t != null && !(nestedClass.isInstance(t))) {
             t = t.getCause();
@@ -650,7 +657,7 @@ public final class ExceptionUtil {
             return explainOsmApiInitializationException((OsmApiInitializationException) e);
 
         if (e instanceof ChangesetClosedException)
-            return explainChangesetClosedException((ChangesetClosedException)e);
+            return explainChangesetClosedException((ChangesetClosedException) e);
 
         if (e instanceof OsmApiException) {
             OsmApiException oae = (OsmApiException) e;
@@ -683,7 +690,7 @@ public final class ExceptionUtil {
                 + "<strong>Downloading failed</strong> if you tried to download this object.<br>"
                 + "<br>"
                 + "The error message is:<br>" + "{0}"
-                + "</html>", escapeReservedCharactersHTML(e.getMessage()));
+                + "</html>", Utils.escapeReservedCharactersHTML(e.getMessage()));
     }
 
     /**
@@ -701,12 +708,4 @@ public final class ExceptionUtil {
         }
     }
 
-    /**
-     * Replaces some HTML reserved characters (<, > and &) by their equivalent entity (&lt;, &gt; and &amp;);
-     * @param s The unescaped string
-     * @return The escaped string
-     */
-    public static String escapeReservedCharactersHTML(String s) {
-        return s == null ? "" : s.replace("&", "&").replace("<", "<").replace(">", ">");
-    }
 }
diff --git a/src/org/openstreetmap/josm/tools/ExifReader.java b/src/org/openstreetmap/josm/tools/ExifReader.java
index 462d3fe..3727ea8 100644
--- a/src/org/openstreetmap/josm/tools/ExifReader.java
+++ b/src/org/openstreetmap/josm/tools/ExifReader.java
@@ -82,7 +82,8 @@ public final class ExifReader {
      * <li>The 0th row is the visual right-hand side of the image, and the 0th column is the visual bottom.</li>
      * <li>The 0th row is the visual left-hand side of the image, and the 0th column is the visual bottom.</li></ol>
      * @see <a href="http://www.impulseadventure.com/photo/exif-orientation.html">http://www.impulseadventure.com/photo/exif-orientation.html</a>
-     * @see <a href="http://www.daveperrett.com/articles/2012/07/28/exif-orientation-handling-is-a-ghetto">http://www.daveperrett.com/articles/2012/07/28/exif-orientation-handling-is-a-ghetto</a>
+     * @see <a href="http://www.daveperrett.com/articles/2012/07/28/exif-orientation-handling-is-a-ghetto">
+     * http://www.daveperrett.com/articles/2012/07/28/exif-orientation-handling-is-a-ghetto</a>
      */
     public static Integer readOrientation(File filename) {
         try {
@@ -120,7 +121,7 @@ public final class ExifReader {
      * Returns the geolocation of the given EXIF GPS directory.
      * @param dirGps The EXIF GPS directory
      * @return The lat/lon read in the EXIF section, or {@code null} if {@code dirGps} is null
-     * @throws MetadataException
+     * @throws MetadataException if invalid metadata is given
      * @since 6209
      */
     public static LatLon readLatLon(GpsDirectory dirGps) throws MetadataException {
@@ -135,7 +136,8 @@ public final class ExifReader {
     /**
      * Returns the direction of the given JPEG file.
      * @param filename The JPEG file to read
-     * @return The direction of the image when it was captures (in degrees between 0.0 and 359.99), or {@code null} if missing or if {@code dirGps} is null
+     * @return The direction of the image when it was captures (in degrees between 0.0 and 359.99),
+     * or {@code null} if missing or if {@code dirGps} is null
      * @since 6209
      */
     public static Double readDirection(File filename) {
@@ -154,7 +156,8 @@ public final class ExifReader {
     /**
      * Returns the direction of the given EXIF GPS directory.
      * @param dirGps The EXIF GPS directory
-     * @return The direction of the image when it was captures (in degrees between 0.0 and 359.99), or {@code null} if missing or if {@code dirGps} is null
+     * @return The direction of the image when it was captures (in degrees between 0.0 and 359.99),
+     * or {@code null} if missing or if {@code dirGps} is null
      * @since 6209
      */
     public static Double readDirection(GpsDirectory dirGps) {
@@ -206,18 +209,18 @@ public final class ExifReader {
         switch (orientation) {
         case 8:
             q = -1;
-            ax = width / 2;
-            ay = width / 2;
+            ax = width / 2d;
+            ay = width / 2d;
             break;
         case 3:
             q = 2;
-            ax = width / 2;
-            ay = height / 2;
+            ax = width / 2d;
+            ay = height / 2d;
             break;
         case 6:
             q = 1;
-            ax = height / 2;
-            ay = height / 2;
+            ax = height / 2d;
+            ay = height / 2d;
             break;
         default:
             q = 0;
diff --git a/src/org/openstreetmap/josm/tools/FontsManager.java b/src/org/openstreetmap/josm/tools/FontsManager.java
index 8bb3ad7..84bc291 100644
--- a/src/org/openstreetmap/josm/tools/FontsManager.java
+++ b/src/org/openstreetmap/josm/tools/FontsManager.java
@@ -16,7 +16,7 @@ import org.openstreetmap.josm.io.CachedFile;
  * a common rendering on different platforms.
  * @since 7383
  */
-public class FontsManager {
+public final class FontsManager {
 
     /**
      * List of fonts embedded into JOSM jar.
diff --git a/src/org/openstreetmap/josm/tools/GBC.java b/src/org/openstreetmap/josm/tools/GBC.java
index 6c1190d..e2c9ba8 100644
--- a/src/org/openstreetmap/josm/tools/GBC.java
+++ b/src/org/openstreetmap/josm/tools/GBC.java
@@ -47,7 +47,7 @@ public final class GBC extends GridBagConstraints {
      * @return A constraint which indicates the last item on a line.
      */
     public static GBC eop() {
-        return eol().insets(0,0,0,10);
+        return eol().insets(0, 0, 0, 10);
     }
 
     /**
@@ -118,7 +118,7 @@ public final class GBC extends GridBagConstraints {
     public static Component glue(int x, int y) {
         short maxx = x > 0 ? Short.MAX_VALUE : 0;
         short maxy = y > 0 ? Short.MAX_VALUE : 0;
-        return new Box.Filler(new Dimension(x,y), new Dimension(x,y), new Dimension(maxx,maxy));
+        return new Box.Filler(new Dimension(x, y), new Dimension(x, y), new Dimension(maxx, maxy));
     }
 
     public GBC grid(int x, int y) {
diff --git a/src/org/openstreetmap/josm/tools/GeoPropertyIndex.java b/src/org/openstreetmap/josm/tools/GeoPropertyIndex.java
index df2ab14..0c31048 100644
--- a/src/org/openstreetmap/josm/tools/GeoPropertyIndex.java
+++ b/src/org/openstreetmap/josm/tools/GeoPropertyIndex.java
@@ -50,7 +50,7 @@ public class GeoPropertyIndex<T> {
     /**
      * Create new GeoPropertyIndex.
      * @param geoProp the input property that should be made faster by this index
-     * @param maxLevel
+     * @param maxLevel max level
      */
     public GeoPropertyIndex(GeoProperty<T> geoProp, int maxLevel) {
         this.geoProp = geoProp;
@@ -72,8 +72,8 @@ public class GeoPropertyIndex<T> {
 
     public static int index(LatLon ll, int level) {
         long noParts = 1 << level;
-        long x = ((long)((ll.lon() + 180.0) * noParts / 360.0)) & 1;
-        long y = ((long)((ll.lat() + 90.0) * noParts / 180.0)) & 1;
+        long x = ((long) ((ll.lon() + 180.0) * noParts / 360.0)) & 1;
+        long y = ((long) ((ll.lat() + 90.0) * noParts / 180.0)) & 1;
         return (int) (2 * x + y);
     }
 
@@ -148,7 +148,7 @@ public class GeoPropertyIndex<T> {
                 }
                 if (DEBUG) System.err.println(" - new with idx "+idx);
                 LatLon center = bbox.getCenter();
-                BBox b = new BBox(lon1,lat1, center.lon(), center.lat());
+                BBox b = new BBox(lon1, lat1, center.lon(), center.lat());
                 children[idx] = new GPLevel<>(level + 1, b, this, owner);
             }
             return children[idx].getBounded(ll);
diff --git a/src/org/openstreetmap/josm/tools/Geometry.java b/src/org/openstreetmap/josm/tools/Geometry.java
index 52918e3..3344337 100644
--- a/src/org/openstreetmap/josm/tools/Geometry.java
+++ b/src/org/openstreetmap/josm/tools/Geometry.java
@@ -69,7 +69,7 @@ public final class Geometry {
         Set<Node> intersectionNodes = new LinkedHashSet<>();
 
         //copy node arrays for local usage.
-        for (int pos = 0; pos < n; pos ++) {
+        for (int pos = 0; pos < n; pos++) {
             newNodes[pos] = new ArrayList<>(ways.get(pos).getNodes());
             wayBounds[pos] = getNodesBounds(newNodes[pos]);
             changedWays[pos] = false;
@@ -77,8 +77,8 @@ public final class Geometry {
 
         //iterate over all way pairs and introduce the intersections
         Comparator<Node> coordsComparator = new NodePositionComparator();
-        for (int seg1Way = 0; seg1Way < n; seg1Way ++) {
-            for (int seg2Way = seg1Way; seg2Way < n; seg2Way ++) {
+        for (int seg1Way = 0; seg1Way < n; seg1Way++) {
+            for (int seg2Way = seg1Way; seg2Way < n; seg2Way++) {
 
                 //do not waste time on bounds that do not intersect
                 if (!wayBounds[seg1Way].intersects(wayBounds[seg2Way])) {
@@ -89,12 +89,12 @@ public final class Geometry {
                 List<Node> way2Nodes = newNodes[seg2Way];
 
                 //iterate over primary segmemt
-                for (int seg1Pos = 0; seg1Pos + 1 < way1Nodes.size(); seg1Pos ++) {
+                for (int seg1Pos = 0; seg1Pos + 1 < way1Nodes.size(); seg1Pos++) {
 
                     //iterate over secondary segment
-                    int seg2Start = seg1Way != seg2Way ? 0: seg1Pos + 2;//skip the adjacent segment
+                    int seg2Start = seg1Way != seg2Way ? 0 : seg1Pos + 2; //skip the adjacent segment
 
-                    for (int seg2Pos = seg2Start; seg2Pos + 1< way2Nodes.size(); seg2Pos ++) {
+                    for (int seg2Pos = seg2Start; seg2Pos + 1 < way2Nodes.size(); seg2Pos++) {
 
                         //need to get them again every time, because other segments may be changed
                         Node seg1Node1 = way1Nodes.get(seg1Pos);
@@ -105,7 +105,7 @@ public final class Geometry {
                         int commonCount = 0;
                         //test if we have common nodes to add.
                         if (seg1Node1 == seg2Node1 || seg1Node1 == seg2Node2) {
-                            commonCount ++;
+                            commonCount++;
 
                             if (seg1Way == seg2Way &&
                                     seg1Pos == 0 &&
@@ -117,7 +117,7 @@ public final class Geometry {
                         }
 
                         if (seg1Node2 == seg2Node1 || seg1Node2 == seg2Node2) {
-                            commonCount ++;
+                            commonCount++;
 
                             intersectionNodes.add(seg1Node2);
                         }
@@ -164,7 +164,7 @@ public final class Geometry {
 
                                     //fix seg2 position, as indexes have changed, seg2Pos is always bigger than seg1Pos on the same segment.
                                     if (seg2Way == seg1Way) {
-                                        seg2Pos ++;
+                                        seg2Pos++;
                                     }
                                 }
 
@@ -173,7 +173,7 @@ public final class Geometry {
                                     changedWays[seg2Way] = true;
 
                                     //Do not need to compare again to already split segment
-                                    seg2Pos ++;
+                                    seg2Pos++;
                                 }
 
                                 intersectionNodes.add(intNode);
@@ -182,8 +182,7 @@ public final class Geometry {
                                     cmds.add(new AddCommand(intNode));
                                 }
                             }
-                        }
-                        else if (test && !intersectionNodes.isEmpty())
+                        } else if (test && !intersectionNodes.isEmpty())
                             return intersectionNodes;
                     }
                 }
@@ -191,7 +190,7 @@ public final class Geometry {
         }
 
 
-        for (int pos = 0; pos < ways.size(); pos ++) {
+        for (int pos = 0; pos < ways.size(); pos++) {
             if (!changedWays[pos]) {
                 continue;
             }
@@ -227,7 +226,7 @@ public final class Geometry {
      * @param lineP1 first point in path
      * @param lineP2 second point in path
      * @param lineP3 third point in path
-     * @param testPoint
+     * @param testPoint point to test
      * @return true if to the right side, false otherwise
      */
     public static boolean isToTheRightSideOfLine(Node lineP1, Node lineP2, Node lineP3, Node testPoint) {
@@ -292,15 +291,15 @@ public final class Geometry {
         // Solve the equations
         double det = a1*b2 - a2*b1;
 
-        double uu = b2*c1 - b1*c2 ;
+        double uu = b2*c1 - b1*c2;
         double vv = a1*c2 - a2*c1;
         double mag = Math.abs(uu)+Math.abs(vv);
 
         if (Math.abs(det) > 1e-12 * mag) {
             double u = uu/det, v = vv/det;
-            if (u>-1e-8 && u < 1+1e-8 && v>-1e-8 && v < 1+1e-8 ) {
-                if (u<0) u=0;
-                if (u>1) u=1.0;
+            if (u > -1e-8 && u < 1+1e-8 && v > -1e-8 && v < 1+1e-8) {
+                if (u < 0) u = 0;
+                if (u > 1) u = 1.0;
                 return new EastNorth(x1+a1*u, y1+a2*u);
             } else {
                 return null;
@@ -355,7 +354,7 @@ public final class Geometry {
         if (det == 0)
             return null; // Lines are parallel
 
-        return new EastNorth(b1 * c2 / det + p1.getX(),  - a1 * c2 / det + p1.getY());
+        return new EastNorth(b1 * c2 / det + p1.getX(), -a1 * c2 / det + p1.getY());
     }
 
     public static boolean segmentsParallel(EastNorth p1, EastNorth p2, EastNorth p3, EastNorth p4) {
@@ -387,7 +386,8 @@ public final class Geometry {
         double ldx = p2.getX() - p1.getX();
         double ldy = p2.getY() - p1.getY();
 
-        if (ldx == 0 && ldy == 0) //segment zero length
+        //segment zero length
+        if (ldx == 0 && ldy == 0)
             return p1;
 
         double pdx = point.getX() - p1.getX();
@@ -410,8 +410,8 @@ public final class Geometry {
      * @param point Point for which a closest point is searched on line segment [P1,P2]
      * @return segmentP1 if it is the closest point, segmentP2 if it is the closest point,
      * a new point if closest point is between segmentP1 and segmentP2.
-     * @since 3650
      * @see #closestPointToLine
+     * @since 3650
      */
     public static EastNorth closestPointToSegment(EastNorth segmentP1, EastNorth segmentP2, EastNorth point) {
         return closestPointTo(segmentP1, segmentP2, point, true);
@@ -423,8 +423,8 @@ public final class Geometry {
      * @param lineP2 Second point determining line
      * @param point Point for which a closest point is searched on line (P1,P2)
      * @return The closest point found on line. It may be outside the segment [P1,P2].
-     * @since 4134
      * @see #closestPointToSegment
+     * @since 4134
      */
     public static EastNorth closestPointToLine(EastNorth lineP1, EastNorth lineP2, EastNorth point) {
         return closestPointTo(lineP1, lineP2, point, false);
@@ -449,10 +449,10 @@ public final class Geometry {
         CheckParameterUtil.ensureValidCoordinates(firstNode, "firstNode");
         CheckParameterUtil.ensureValidCoordinates(secondNode, "secondNode");
 
-        double dy1 = (firstNode.getY() - commonNode.getY());
-        double dy2 = (secondNode.getY() - commonNode.getY());
-        double dx1 = (firstNode.getX() - commonNode.getX());
-        double dx2 = (secondNode.getX() - commonNode.getX());
+        double dy1 = firstNode.getY() - commonNode.getY();
+        double dy2 = secondNode.getY() - commonNode.getY();
+        double dx1 = firstNode.getX() - commonNode.getX();
+        double dx2 = secondNode.getX() - commonNode.getX();
 
         return dy1 * dx2 - dx1 * dy2 > 0;
     }
@@ -600,8 +600,7 @@ public final class Geometry {
             //test if the line is crossed and if so invert the inside flag.
             if ((newPoint.getEastNorth().getY() < point.getEastNorth().getY()) == (point.getEastNorth().getY() <= oldPoint.getEastNorth().getY())
                     && (point.getEastNorth().getX() - p1.getEastNorth().getX()) * (p2.getEastNorth().getY() - p1.getEastNorth().getY())
-                    < (p2.getEastNorth().getX() - p1.getEastNorth().getX()) * (point.getEastNorth().getY() - p1.getEastNorth().getY()))
-            {
+                    < (p2.getEastNorth().getX() - p1.getEastNorth().getX()) * (point.getEastNorth().getY() - p1.getEastNorth().getY())) {
                 inside = !inside;
             }
 
@@ -630,8 +629,6 @@ public final class Geometry {
         Node lastN = null;
         for (Node n : way.getNodes()) {
             if (lastN != null) {
-                n.getEastNorth().getX();
-
                 area += (calcX(n) * calcY(lastN)) - (calcY(n) * calcX(lastN));
             }
             lastN = n;
@@ -639,7 +636,7 @@ public final class Geometry {
         return Math.abs(area/2);
     }
 
-    protected static double calcX(Node p1){
+    protected static double calcX(Node p1) {
         double lat1, lon1, lat2, lon2;
         double dlon, dlat;
 
@@ -651,12 +648,12 @@ public final class Geometry {
         dlon = lon2 - lon1;
         dlat = lat2 - lat1;
 
-        double a = (Math.pow(Math.sin(dlat/2), 2) + Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(dlon/2), 2));
+        double a = Math.pow(Math.sin(dlat/2), 2) + Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(dlon/2), 2);
         double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
         return 6367000 * c;
     }
 
-    protected static double calcY(Node p1){
+    protected static double calcY(Node p1) {
         double lat1, lon1, lat2, lon2;
         double dlon, dlat;
 
@@ -668,7 +665,7 @@ public final class Geometry {
         dlon = lon2 - lon1;
         dlat = lat2 - lat1;
 
-        double a = (Math.pow(Math.sin(dlat/2), 2) + Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(dlon/2), 2));
+        double a = Math.pow(Math.sin(dlat/2), 2) + Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(dlon/2), 2);
         double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
         return 6367000 * c;
     }
@@ -692,10 +689,10 @@ public final class Geometry {
 
     /**
      * Determines whether path from nodes list is oriented clockwise.
-     * @see #isClockwise(Way)
      * @param nodes Nodes list to be checked.
      * @return true if and only if way is oriented clockwise.
      * @throws IllegalArgumentException if way is not closed (see {@link Way#isClosed}).
+     * @see #isClockwise(Way)
      */
     public static boolean isClockwise(List<Node> nodes) {
         double area2 = 0.;
@@ -716,8 +713,8 @@ public final class Geometry {
     /**
      * Returns angle of a segment defined with 2 point coordinates.
      *
-     * @param p1
-     * @param p2
+     * @param p1 first point
+     * @param p2 second point
      * @return Angle in radians (-pi, pi]
      */
     public static double getSegmentAngle(EastNorth p1, EastNorth p2) {
@@ -731,9 +728,9 @@ public final class Geometry {
     /**
      * Returns angle of a corner defined with 3 point coordinates.
      *
-     * @param p1
+     * @param p1 first point
      * @param p2 Common endpoint
-     * @param p3
+     * @param p3 third point
      * @return Angle in radians (-pi, pi]
      */
     public static double getCornerAngle(EastNorth p1, EastNorth p2, EastNorth p3) {
@@ -815,7 +812,7 @@ public final class Geometry {
      */
     public static EastNorth getCenter(List<Node> nodes) {
         int nc = nodes.size();
-        if(nc < 3) return null;
+        if (nc < 3) return null;
         /**
          * Equation of each bisector ax + by + c = 0
          */
@@ -823,13 +820,13 @@ public final class Geometry {
         double[] b = new double[nc];
         double[] c = new double[nc];
         // Compute equation of bisector
-        for(int i = 0; i < nc; i++) {
+        for (int i = 0; i < nc; i++) {
             EastNorth pt1 = nodes.get(i).getEastNorth();
             EastNorth pt2 = nodes.get((i+1) % nc).getEastNorth();
             a[i] = pt1.east() - pt2.east();
             b[i] = pt1.north() - pt2.north();
             double d = Math.sqrt(a[i]*a[i] + b[i]*b[i]);
-            if(d == 0) return null;
+            if (d == 0) return null;
             a[i] /= d;
             b[i] /= d;
             double xC = (pt1.east() + pt2.east()) / 2;
@@ -840,7 +837,7 @@ public final class Geometry {
         double a11 = 0, a12 = 0, a22 = 0;
         // At.Y = [bi]
         double b1 = 0, b2 = 0;
-        for(int i = 0; i < nc; i++) {
+        for (int i = 0; i < nc; i++) {
             a11 += a[i]*a[i];
             a12 += a[i]*b[i];
             a22 += b[i]*b[i];
@@ -849,7 +846,7 @@ public final class Geometry {
         }
         // (At.A)^-1 = [invij]
         double det = a11*a22 - a12*a12;
-        if(Math.abs(det) < 1e-5) return null;
+        if (Math.abs(det) < 1e-5) return null;
         double inv11 = a22/det;
         double inv12 = -a12/det;
         double inv22 = a11/det;
@@ -907,7 +904,8 @@ public final class Geometry {
         for (MultipolygonBuilder.JoinedPolygon out : outerRings) {
             if (nodes.size() == 1
                     ? nodeInsidePolygon(nodes.get(0), out.getNodes())
-                    : EnumSet.of(PolygonIntersection.FIRST_INSIDE_SECOND, PolygonIntersection.CROSSING).contains(polygonIntersection(nodes, out.getNodes()))) {
+                    : EnumSet.of(PolygonIntersection.FIRST_INSIDE_SECOND, PolygonIntersection.CROSSING).contains(
+                            polygonIntersection(nodes, out.getNodes()))) {
                 boolean insideInner = false;
                 // If inside an outer, check it is not inside an inner
                 for (MultipolygonBuilder.JoinedPolygon in : innerRings) {
@@ -922,7 +920,8 @@ public final class Geometry {
                 // Inside outer but not inside inner -> the polygon appears to be inside a the multipolygon
                 if (!insideInner) {
                     // Final check using predicate
-                    if (isOuterWayAMatch == null || isOuterWayAMatch.evaluate(out.ways.get(0) /* TODO give a better representation of the outer ring to the predicate */)) {
+                    if (isOuterWayAMatch == null || isOuterWayAMatch.evaluate(out.ways.get(0)
+                            /* TODO give a better representation of the outer ring to the predicate */)) {
                         return true;
                     }
                 }
diff --git a/src/org/openstreetmap/josm/tools/I18n.java b/src/org/openstreetmap/josm/tools/I18n.java
index 425db58..732eee0 100644
--- a/src/org/openstreetmap/josm/tools/I18n.java
+++ b/src/org/openstreetmap/josm/tools/I18n.java
@@ -196,7 +196,7 @@ public final class I18n {
      * @see #trc
      * @see #trnc
      */
-    public static final String tr(String text, Object... objects) {
+    public static String tr(String text, Object... objects) {
         if (text == null) return null;
         return MessageFormat.format(gettext(text, null), objects);
     }
@@ -213,20 +213,20 @@ public final class I18n {
      * @see #trn
      * @see #trnc
      */
-    public static final String trc(String context, String text) {
+    public static String trc(String context, String text) {
         if (context == null)
             return tr(text);
         if (text == null)
             return null;
-        return MessageFormat.format(gettext(text, context), (Object)null);
+        return MessageFormat.format(gettext(text, context), (Object) null);
     }
 
-    public static final String trc_lazy(String context, String text) {
+    public static String trc_lazy(String context, String text) {
         if (context == null)
             return tr(text);
         if (text == null)
             return null;
-        return MessageFormat.format(gettext_lazy(text, context), (Object)null);
+        return MessageFormat.format(gettext_lazy(text, context), (Object) null);
     }
 
     /**
@@ -239,11 +239,11 @@ public final class I18n {
      * @param text the string to be marked for translation.
      * @return {@code text} unmodified.
      */
-    public static final String marktr(String text) {
+    public static String marktr(String text) {
         return text;
     }
 
-    public static final String marktrc(String context, String text) {
+    public static String marktrc(String context, String text) {
         return text;
     }
 
@@ -270,7 +270,7 @@ public final class I18n {
      * @see #trc
      * @see #trnc
      */
-    public static final String trn(String singularText, String pluralText, long n, Object... objects) {
+    public static String trn(String singularText, String pluralText, long n, Object... objects) {
         return MessageFormat.format(gettextn(singularText, pluralText, null, n), objects);
     }
 
@@ -297,49 +297,49 @@ public final class I18n {
      * @see #trc
      * @see #trn
      */
-    public static final String trnc(String context, String singularText, String pluralText, long n, Object... objects) {
+    public static String trnc(String context, String singularText, String pluralText, long n, Object... objects) {
         return MessageFormat.format(gettextn(singularText, pluralText, context, n), objects);
     }
 
-    private static final String gettext(String text, String ctx, boolean lazy) {
+    private static String gettext(String text, String ctx, boolean lazy) {
         int i;
-        if(ctx == null && text.startsWith("_:") && (i = text.indexOf('\n')) >= 0) {
-            ctx = text.substring(2,i-1);
+        if (ctx == null && text.startsWith("_:") && (i = text.indexOf('\n')) >= 0) {
+            ctx = text.substring(2, i-1);
             text = text.substring(i+1);
         }
-        if(strings != null) {
+        if (strings != null) {
             String trans = strings.get(ctx == null ? text : "_:"+ctx+"\n"+text);
-            if(trans != null)
+            if (trans != null)
                 return trans;
         }
-        if(pstrings != null) {
+        if (pstrings != null) {
             i = pluralEval(1);
             String[] trans = pstrings.get(ctx == null ? text : "_:"+ctx+"\n"+text);
-            if(trans != null && trans.length > i)
+            if (trans != null && trans.length > i)
                 return trans[i];
         }
         return lazy ? gettext(text, null) : text;
     }
 
-    private static final String gettext(String text, String ctx) {
+    private static String gettext(String text, String ctx) {
         return gettext(text, ctx, false);
     }
 
     /* try without context, when context try fails */
-    private static final String gettext_lazy(String text, String ctx) {
+    private static String gettext_lazy(String text, String ctx) {
         return gettext(text, ctx, true);
     }
 
-    private static final String gettextn(String text, String plural, String ctx, long num) {
+    private static String gettextn(String text, String plural, String ctx, long num) {
         int i;
-        if(ctx == null && text.startsWith("_:") && (i = text.indexOf('\n')) >= 0) {
-            ctx = text.substring(2,i-1);
+        if (ctx == null && text.startsWith("_:") && (i = text.indexOf('\n')) >= 0) {
+            ctx = text.substring(2, i-1);
             text = text.substring(i+1);
         }
-        if(pstrings != null) {
+        if (pstrings != null) {
             i = pluralEval(num);
             String[] trans = pstrings.get(ctx == null ? text : "_:"+ctx+"\n"+text);
-            if(trans != null && trans.length > i)
+            if (trans != null && trans.length > i)
                 return trans[i];
         }
 
@@ -352,18 +352,18 @@ public final class I18n {
     }
 
     private static URL getTranslationFile(String lang) {
-        return Main.class.getResource("/data/"+lang.replace("@","-")+".lang");
+        return Main.class.getResource("/data/"+lang.replace("@", "-")+".lang");
     }
 
     /**
      * Get a list of all available JOSM Translations.
      * @return an array of locale objects.
      */
-    public static final Locale[] getAvailableTranslations() {
+    public static Locale[] getAvailableTranslations() {
         Collection<Locale> v = new ArrayList<>(languages.size());
-        if(getTranslationFile("en") != null) {
+        if (getTranslationFile("en") != null) {
             for (String loc : languages.keySet()) {
-                if(getTranslationFile(loc) != null) {
+                if (getTranslationFile(loc) != null) {
                     v.add(LanguageInfo.getLocale(loc));
                 }
             }
@@ -402,6 +402,7 @@ public final class I18n {
         //languages.put("ar", PluralMode.MODE_AR);
         languages.put("ast", PluralMode.MODE_NOTONE);
         languages.put("bg", PluralMode.MODE_NOTONE);
+        languages.put("be", PluralMode.MODE_RU);
         languages.put("ca", PluralMode.MODE_NOTONE);
         languages.put("ca at valencia", PluralMode.MODE_NOTONE);
         languages.put("cs", PluralMode.MODE_CS);
@@ -437,11 +438,12 @@ public final class I18n {
         languages.put("sv", PluralMode.MODE_NOTONE);
         //languages.put("tr", PluralMode.MODE_NONE);
         languages.put("uk", PluralMode.MODE_RU);
+        languages.put("vi", PluralMode.MODE_NONE);
         languages.put("zh_CN", PluralMode.MODE_NONE);
         languages.put("zh_TW", PluralMode.MODE_NONE);
 
         /* try initial language settings, may be changed later again */
-        if(!load(LanguageInfo.getJOSMLocaleCode())) {
+        if (!load(LanguageInfo.getJOSMLocaleCode())) {
             Locale.setDefault(Locale.ENGLISH);
         }
     }
@@ -449,8 +451,8 @@ public final class I18n {
     public static void addTexts(File source) {
         if ("en".equals(loadedCode))
             return;
-        String enfile = "data/en.lang";
-        String langfile = "data/"+loadedCode+".lang";
+        final String enfile = "data/en.lang";
+        final String langfile = "data/"+loadedCode+".lang";
         try (
             FileInputStream fis = new FileInputStream(source);
             JarInputStream jar = new JarInputStream(fis)
@@ -459,7 +461,7 @@ public final class I18n {
             boolean found = false;
             while (!found && (e = jar.getNextEntry()) != null) {
                 String name = e.getName();
-                if(name.equals(enfile))
+                if (enfile.equals(name))
                     found = true;
             }
             if (found) {
@@ -468,7 +470,7 @@ public final class I18n {
                     JarInputStream jarTrans = new JarInputStream(fisTrans)
                 ) {
                     found = false;
-                    while(!found && (e = jarTrans.getNextEntry()) != null) {
+                    while (!found && (e = jarTrans.getNextEntry()) != null) {
                         String name = e.getName();
                         if (name.equals(langfile))
                             found = true;
@@ -479,6 +481,9 @@ public final class I18n {
             }
         } catch (IOException e) {
             // Ignore
+            if (Main.isTraceEnabled()) {
+                Main.trace(e.getMessage());
+            }
         }
     }
 
@@ -508,6 +513,9 @@ public final class I18n {
             }
         } catch (IOException e) {
             // Ignore exception
+            if (Main.isTraceEnabled()) {
+                Main.trace(e.getMessage());
+            }
         }
         return false;
     }
@@ -550,65 +558,65 @@ public final class I18n {
             byte[] trlen = new byte[2];
             boolean multimode = false;
             byte[] str = new byte[4096];
-            for(;;) {
-                if(multimode) {
+            for (;;) {
+                if (multimode) {
                     int ennum = ens.read();
                     int trnum = trs.read();
-                    if(trnum == 0xFE) /* marks identical string, handle equally to non-translated */
+                    if (trnum == 0xFE) /* marks identical string, handle equally to non-translated */
                         trnum = 0;
-                    if((ennum == -1 && trnum != -1) || (ennum != -1 && trnum == -1)) /* files do not match */
+                    if ((ennum == -1 && trnum != -1) || (ennum != -1 && trnum == -1)) /* files do not match */
                         return false;
-                    if(ennum == -1) {
+                    if (ennum == -1) {
                         break;
                     }
                     String[] enstrings = new String[ennum];
                     String[] trstrings = new String[trnum];
-                    for(int i = 0; i < ennum; ++i) {
+                    for (int i = 0; i < ennum; ++i) {
                         int val = ens.read(enlen);
-                        if(val != 2) /* file corrupt */
+                        if (val != 2) /* file corrupt */
                             return false;
-                        val = (enlen[0] < 0 ? 256+enlen[0]:enlen[0])*256+(enlen[1] < 0 ? 256+enlen[1]:enlen[1]);
-                        if(val > str.length) {
+                        val = (enlen[0] < 0 ? 256+enlen[0] : enlen[0])*256+(enlen[1] < 0 ? 256+enlen[1] : enlen[1]);
+                        if (val > str.length) {
                             str = new byte[val];
                         }
                         int rval = ens.read(str, 0, val);
-                        if(rval != val) /* file corrupt */
+                        if (rval != val) /* file corrupt */
                             return false;
                         enstrings[i] = new String(str, 0, val, StandardCharsets.UTF_8);
                     }
-                    for(int i = 0; i < trnum; ++i) {
+                    for (int i = 0; i < trnum; ++i) {
                         int val = trs.read(trlen);
-                        if(val != 2) /* file corrupt */
+                        if (val != 2) /* file corrupt */
                             return false;
-                        val = (trlen[0] < 0 ? 256+trlen[0]:trlen[0])*256+(trlen[1] < 0 ? 256+trlen[1]:trlen[1]);
-                        if(val > str.length) {
+                        val = (trlen[0] < 0 ? 256+trlen[0] : trlen[0])*256+(trlen[1] < 0 ? 256+trlen[1] : trlen[1]);
+                        if (val > str.length) {
                             str = new byte[val];
                         }
                         int rval = trs.read(str, 0, val);
-                        if(rval != val) /* file corrupt */
+                        if (rval != val) /* file corrupt */
                             return false;
                         trstrings[i] = new String(str, 0, val, StandardCharsets.UTF_8);
                     }
-                    if(trnum > 0 && !p.containsKey(enstrings[0])) {
+                    if (trnum > 0 && !p.containsKey(enstrings[0])) {
                         p.put(enstrings[0], trstrings);
                     }
                 } else {
                     int enval = ens.read(enlen);
                     int trval = trs.read(trlen);
-                    if(enval != trval) /* files do not match */
+                    if (enval != trval) /* files do not match */
                         return false;
-                    if(enval == -1) {
+                    if (enval == -1) {
                         break;
                     }
-                    if(enval != 2) /* files corrupt */
+                    if (enval != 2) /* files corrupt */
                         return false;
-                    enval = (enlen[0] < 0 ? 256+enlen[0]:enlen[0])*256+(enlen[1] < 0 ? 256+enlen[1]:enlen[1]);
-                    trval = (trlen[0] < 0 ? 256+trlen[0]:trlen[0])*256+(trlen[1] < 0 ? 256+trlen[1]:trlen[1]);
-                    if(trval == 0xFFFE) /* marks identical string, handle equally to non-translated */
+                    enval = (enlen[0] < 0 ? 256+enlen[0] : enlen[0])*256+(enlen[1] < 0 ? 256+enlen[1] : enlen[1]);
+                    trval = (trlen[0] < 0 ? 256+trlen[0] : trlen[0])*256+(trlen[1] < 0 ? 256+trlen[1] : trlen[1]);
+                    if (trval == 0xFFFE) /* marks identical string, handle equally to non-translated */
                         trval = 0;
-                    if(enval == 0xFFFF) {
+                    if (enval == 0xFFFF) {
                         multimode = true;
-                        if(trval != 0xFFFF) /* files do not match */
+                        if (trval != 0xFFFF) /* files do not match */
                             return false;
                     } else {
                         if (enval > str.length) {
@@ -618,15 +626,15 @@ public final class I18n {
                             str = new byte[trval];
                         }
                         int val = ens.read(str, 0, enval);
-                        if(val != enval) /* file corrupt */
+                        if (val != enval) /* file corrupt */
                             return false;
                         String enstr = new String(str, 0, enval, StandardCharsets.UTF_8);
                         if (trval != 0) {
                             val = trs.read(str, 0, trval);
-                            if(val != trval) /* file corrupt */
+                            if (val != trval) /* file corrupt */
                                 return false;
                             String trstr = new String(str, 0, trval, StandardCharsets.UTF_8);
-                            if(!s.containsKey(enstr))
+                            if (!s.containsKey(enstr))
                                 s.put(enstr, trstr);
                         }
                     }
@@ -652,7 +660,7 @@ public final class I18n {
      *
      * @param localeName the locale name. Ignored if null.
      */
-    public static void set(String localeName){
+    public static void set(String localeName) {
         if (localeName != null) {
             Locale l = LanguageInfo.getLocale(localeName);
             if (load(LanguageInfo.getJOSMLocaleCode(l))) {
@@ -693,29 +701,29 @@ public final class I18n {
     private static int pluralEval(long n) {
         switch(pluralMode) {
         case MODE_NOTONE: /* bg, da, de, el, en, en_GB, es, et, eu, fi, gl, is, it, iw_IL, nb, nl, sv */
-            return ((n != 1) ? 1 : 0);
-        case MODE_NONE: /* id, ja, km, tr, zh_CN, zh_TW */
+            return (n != 1) ? 1 : 0;
+        case MODE_NONE: /* id, vi, ja, km, tr, zh_CN, zh_TW */
             return 0;
         case MODE_GREATERONE: /* fr, pt_BR */
-            return ((n > 1) ? 1 : 0);
+            return (n > 1) ? 1 : 0;
         case MODE_CS:
-            return ((n == 1) ? 0 : (((n >= 2) && (n <= 4)) ? 1 : 2));
+            return (n == 1) ? 0 : (((n >= 2) && (n <= 4)) ? 1 : 2);
         //case MODE_AR:
         //    return ((n == 0) ? 0 : ((n == 1) ? 1 : ((n == 2) ? 2 : ((((n % 100) >= 3)
         //            && ((n % 100) <= 10)) ? 3 : ((((n % 100) >= 11) && ((n % 100) <= 99)) ? 4 : 5)))));
         case MODE_PL:
-            return ((n == 1) ? 0 : (((((n % 10) >= 2) && ((n % 10) <= 4))
-                    && (((n % 100) < 10) || ((n % 100) >= 20))) ? 1 : 2));
+            return (n == 1) ? 0 : (((((n % 10) >= 2) && ((n % 10) <= 4))
+                    && (((n % 100) < 10) || ((n % 100) >= 20))) ? 1 : 2);
         //case MODE_RO:
         //    return ((n == 1) ? 0 : ((((n % 100) > 19) || (((n % 100) == 0) && (n != 0))) ? 2 : 1));
         case MODE_LT:
-            return (((n % 10) == 1) && ((n % 100) != 11) ? 0 : (((n % 10) >= 2)
-                    && (((n % 100) < 10) || ((n % 100) >= 20)) ? 1 : 2));
+            return ((n % 10) == 1) && ((n % 100) != 11) ? 0 : (((n % 10) >= 2)
+                    && (((n % 100) < 10) || ((n % 100) >= 20)) ? 1 : 2);
         case MODE_RU:
-            return ((((n % 10) == 1) && ((n % 100) != 11)) ? 0 : (((((n % 10) >= 2)
-                    && ((n % 10) <= 4)) && (((n % 100) < 10) || ((n % 100) >= 20))) ? 1 : 2));
+            return (((n % 10) == 1) && ((n % 100) != 11)) ? 0 : (((((n % 10) >= 2)
+                    && ((n % 10) <= 4)) && (((n % 100) < 10) || ((n % 100) >= 20))) ? 1 : 2);
         case MODE_SK:
-            return ((n == 1) ? 1 : (((n >= 2) && (n <= 4)) ? 2 : 0));
+            return (n == 1) ? 1 : (((n >= 2) && (n <= 4)) ? 2 : 0);
         //case MODE_SL:
         //    return (((n % 100) == 1) ? 1 : (((n % 100) == 2) ? 2 : ((((n % 100) == 3)
         //            || ((n % 100) == 4)) ? 3 : 0)));
diff --git a/src/org/openstreetmap/josm/tools/ImageOverlay.java b/src/org/openstreetmap/josm/tools/ImageOverlay.java
index f54eb72..77cbb93 100644
--- a/src/org/openstreetmap/josm/tools/ImageOverlay.java
+++ b/src/org/openstreetmap/josm/tools/ImageOverlay.java
@@ -1,6 +1,8 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.tools;
 
+import org.openstreetmap.josm.gui.layer.ImageProcessor;
+
 import java.awt.Dimension;
 import java.awt.image.BufferedImage;
 
@@ -9,8 +11,8 @@ import javax.swing.ImageIcon;
 /** class to describe how image overlay
  * @since 8095
  */
-public class ImageOverlay {
-    /** the image ressource to use as overlay */
+public class ImageOverlay implements ImageProcessor {
+    /** the image resource to use as overlay */
     public ImageProvider image;
     /** offset of the image from left border, values between 0 and 1 */
     private double offsetLeft;
@@ -25,7 +27,7 @@ public class ImageOverlay {
      * Create an overlay info. All values are relative sizes between 0 and 1. Size of the image
      * is the result of the difference between left/right and top/bottom.
      *
-     * @param image imager provider for the overlay icon
+     * @param image image provider for the overlay icon
      * @param offsetLeft offset of the image from left border, values between 0 and 1, -1 for auto-calculation
      * @param offsetTop offset of the image from top border, values between 0 and 1, -1 for auto-calculation
      * @param offsetRight offset of the image from right border, values between 0 and 1, -1 for auto-calculation
@@ -45,7 +47,7 @@ public class ImageOverlay {
      * Size of the image is the result of the difference between left/right and top/bottom.
      * Right and bottom values are set to 1.
      *
-     * @param image imager provider for the overlay icon
+     * @param image image provider for the overlay icon
      * @see #ImageOverlay(ImageProvider, double, double, double, double)
      * @since 8095
      */
@@ -64,33 +66,34 @@ public class ImageOverlay {
      * @return the modified image (same as argument)
      * @since 8095
      */
-    public BufferedImage apply(BufferedImage ground) {
+    @Override
+    public BufferedImage process(BufferedImage ground) {
         /* get base dimensions for calculation */
         int w = ground.getWidth();
         int h = ground.getHeight();
         int width = -1;
         int height = -1;
         if (offsetRight > 0 && offsetLeft > 0) {
-            width = new Double(w*(offsetRight-offsetLeft)).intValue();
+            width = (int) (w*(offsetRight-offsetLeft));
         }
         if (offsetTop > 0 && offsetBottom > 0) {
-            width = new Double(h*(offsetBottom-offsetTop)).intValue();
+            height = (int) (h*(offsetBottom-offsetTop));
         }
         ImageIcon overlay;
-        if(width != -1 || height != -1) {
+        if (width != -1 || height != -1) {
             image = new ImageProvider(image).resetMaxSize(new Dimension(width, height));
         }
         overlay = image.get();
         int x, y;
         if (width == -1 && offsetLeft < 0) {
-            x = new Double(w*offsetRight).intValue() - overlay.getIconWidth();
+            x = (int) (w*offsetRight) - overlay.getIconWidth();
         } else {
-            x = new Double(w*offsetLeft).intValue();
+            x = (int) (w*offsetLeft);
         }
         if (height == -1 && offsetTop < 0) {
-            y = new Double(h*offsetBottom).intValue() - overlay.getIconHeight();
+            y = (int) (h*offsetBottom) - overlay.getIconHeight();
         } else {
-            y = new Double(h*offsetTop).intValue();
+            y = (int) (h*offsetTop);
         }
         overlay.paintIcon(null, ground.getGraphics(), x, y);
         return ground;
diff --git a/src/org/openstreetmap/josm/tools/ImageProvider.java b/src/org/openstreetmap/josm/tools/ImageProvider.java
index a139516..db50872 100644
--- a/src/org/openstreetmap/josm/tools/ImageProvider.java
+++ b/src/org/openstreetmap/josm/tools/ImageProvider.java
@@ -197,7 +197,8 @@ public class ImageProvider {
      */
     private static final Map<Image, Map<Long, ImageResource>> ROTATE_CACHE = new HashMap<>();
 
-    private static final ExecutorService IMAGE_FETCHER = Executors.newSingleThreadExecutor();
+    private static final ExecutorService IMAGE_FETCHER =
+            Executors.newSingleThreadExecutor(Utils.newThreadFactory("image-fetcher-%d", Thread.NORM_PRIORITY));
 
     /**
      * Callback interface for asynchronous image loading.
@@ -380,8 +381,8 @@ public class ImageProvider {
     /**
      * Set image width
      * @param width final width of the image
-     * @see #setSize
      * @return the current object, for convenience
+     * @see #setSize
      */
     public ImageProvider setWidth(int width) {
         this.width = width;
@@ -391,8 +392,8 @@ public class ImageProvider {
     /**
      * Set image height
      * @param height final height of the image
-     * @see #setSize
      * @return the current object, for convenience
+     * @see #setSize
      */
     public ImageProvider setHeight(int height) {
         this.height = height;
@@ -465,8 +466,8 @@ public class ImageProvider {
     /**
      * Limit the maximum width of the image.
      * @param maxWidth maximum image width
-     * @see #setMaxSize
      * @return the current object, for convenience
+     * @see #setMaxSize
      */
     public ImageProvider setMaxWidth(int maxWidth) {
         this.maxWidth = maxWidth;
@@ -476,8 +477,8 @@ public class ImageProvider {
     /**
      * Limit the maximum height of the image.
      * @param maxHeight maximum image height
-     * @see #setMaxSize
      * @return the current object, for convenience
+     * @see #setMaxSize
      */
     public ImageProvider setMaxHeight(int maxHeight) {
         this.maxHeight = maxHeight;
@@ -545,7 +546,9 @@ public class ImageProvider {
         if (ir == null) {
             if (!optional) {
                 String ext = name.indexOf('.') != -1 ? "" : ".???";
-                throw new RuntimeException(tr("Fatal: failed to locate image ''{0}''. This is a serious configuration problem. JOSM will stop working.", name + ext));
+                throw new RuntimeException(
+                        tr("Fatal: failed to locate image ''{0}''. This is a serious configuration problem. JOSM will stop working.",
+                                name + ext));
             } else {
                 if (!suppressWarnings) {
                     Main.error(tr("Failed to locate image ''{0}''", name));
@@ -692,7 +695,7 @@ public class ImageProvider {
                 return ir;
             }
 
-            ImageType type = name.toLowerCase().endsWith(".svg") ? ImageType.SVG : ImageType.OTHER;
+            ImageType type = Utils.hasExtension(name, "svg") ? ImageType.SVG : ImageType.OTHER;
 
             if (name.startsWith(HTTP_PROTOCOL) || name.startsWith(HTTPS_PROTOCOL)) {
                 String url = name;
@@ -720,12 +723,12 @@ public class ImageProvider {
             }
             String[] extensions;
             if (name.indexOf('.') != -1) {
-                extensions = new String[] { "" };
+                extensions = new String[] {""};
             } else {
-                extensions = new String[] { ".png", ".svg"};
+                extensions = new String[] {".png", ".svg"};
             }
             final int ARCHIVE = 0, LOCAL = 1;
-            for (int place : new Integer[] { ARCHIVE, LOCAL }) {
+            for (int place : new Integer[] {ARCHIVE, LOCAL}) {
                 for (String ext : extensions) {
 
                     if (".svg".equals(ext)) {
@@ -739,7 +742,7 @@ public class ImageProvider {
                     /* cache separately */
                     if (dirs != null && !dirs.isEmpty()) {
                         cacheName = "id:" + id + ":" + fullName;
-                        if(archive != null) {
+                        if (archive != null) {
                             cacheName += ":" + archive.getName();
                         }
                     }
@@ -854,7 +857,9 @@ public class ImageProvider {
                 try {
                     // See #10479: for PNG files, always enforce transparency to be sure tNRS chunk is used even not in paletted mode
                     // This can be removed if someday Oracle fixes https://bugs.openjdk.java.net/browse/JDK-6788458
+                    // CHECKSTYLE.OFF: LineLength
                     // hg.openjdk.java.net/jdk7u/jdk7u/jdk/file/828c4fedd29f/src/share/classes/com/sun/imageio/plugins/png/PNGImageReader.java#l656
+                    // CHECKSTYLE.ON: LineLength
                     Image img = read(new ByteArrayInputStream(bytes), false, true);
                     return img == null ? null : new ImageResource(img);
                 } catch (IOException e) {
@@ -892,7 +897,7 @@ public class ImageProvider {
                 }
             } else {
                 final String fn_md5 = Utils.md5Hex(fn);
-                url = b + fn_md5.substring(0,1) + "/" + fn_md5.substring(0,2) + "/" + fn;
+                url = b + fn_md5.substring(0, 1) + "/" + fn_md5.substring(0, 2) + "/" + fn;
             }
             result = getIfAvailableHttp(url, type);
             if (result != null) {
@@ -921,7 +926,7 @@ public class ImageProvider {
             String entryName = inArchiveDir + fullName;
             ZipEntry entry = zipFile.getEntry(entryName);
             if (entry != null) {
-                int size = (int)entry.getSize();
+                int size = (int) entry.getSize();
                 int offs = 0;
                 byte[] buf = new byte[size];
                 try (InputStream is = zipFile.getInputStream(entry)) {
@@ -934,8 +939,7 @@ public class ImageProvider {
                         }
                         return svg == null ? null : new ImageResource(svg);
                     case OTHER:
-                        while(size > 0)
-                        {
+                        while (size > 0) {
                             int l = is.read(buf, offs, size);
                             offs += l;
                             size -= l;
@@ -1102,7 +1106,7 @@ public class ImageProvider {
 
             parser.setEntityResolver(new EntityResolver() {
                 @Override
-                public InputSource resolveEntity (String publicId, String systemId) {
+                public InputSource resolveEntity(String publicId, String systemId) {
                     return new InputSource(new ByteArrayInputStream(new byte[0]));
                 }
             });
@@ -1196,7 +1200,7 @@ public class ImageProvider {
             if (imageResource == null) {
                 // convert originalAngle to a value from 0 to 90
                 double angle = originalAngle % 90;
-                if (originalAngle != 0.0 && angle == 0.0) {
+                if (originalAngle != 0 && angle == 0) {
                     angle = 90.0;
                 }
 
@@ -1353,8 +1357,8 @@ public class ImageProvider {
      *
      * @throws IllegalArgumentException if <code>input</code> is <code>null</code>.
      * @throws IOException if an error occurs during reading.
-     * @since 7132
      * @see BufferedImage#getProperty
+     * @since 7132
      */
     public static BufferedImage read(File input, boolean readMetadata, boolean enforceTransparency) throws IOException {
         CheckParameterUtil.ensureParameterNotNull(input, "input");
@@ -1539,16 +1543,19 @@ public class ImageProvider {
         return bi;
     }
 
+    // CHECKSTYLE.OFF: LineLength
+
     /**
      * Returns the {@code TransparentColor} defined in image reader metadata.
      * @param model The image color model
      * @param reader The image reader
      * @return the {@code TransparentColor} defined in image reader metadata, or {@code null}
      * @throws IOException if an error occurs during reading
-     * @since 7499
      * @see <a href="http://docs.oracle.com/javase/7/docs/api/javax/imageio/metadata/doc-files/standard_metadata.html">javax_imageio_1.0 metadata</a>
+     * @since 7499
      */
     public static Color getTransparentColor(ColorModel model, ImageReader reader) throws IOException {
+        // CHECKSTYLE.ON: LineLength
         try {
             IIOMetadata metadata = reader.getImageMetadata(0);
             if (metadata != null) {
@@ -1558,12 +1565,12 @@ public class ImageProvider {
                         if ("javax_imageio_1.0".equals(f)) {
                             Node root = metadata.getAsTree(f);
                             if (root instanceof Element) {
-                                NodeList list = ((Element)root).getElementsByTagName("TransparentColor");
+                                NodeList list = ((Element) root).getElementsByTagName("TransparentColor");
                                 if (list.getLength() > 0) {
                                     Node item = list.item(0);
                                     if (item instanceof Element) {
                                         // Handle different color spaces (tested with RGB and grayscale)
-                                        String value = ((Element)item).getAttribute("value");
+                                        String value = ((Element) item).getAttribute("value");
                                         if (!value.isEmpty()) {
                                             String[] s = value.split(" ");
                                             if (s.length == 3) {
@@ -1573,7 +1580,7 @@ public class ImageProvider {
                                                 int r = model.getRed(pixel);
                                                 int g = model.getGreen(pixel);
                                                 int b = model.getBlue(pixel);
-                                                return new Color(r,g,b);
+                                                return new Color(r, g, b);
                                             } else {
                                                 Main.warn("Unable to translate TransparentColor '"+value+"' with color model "+model);
                                             }
@@ -1596,7 +1603,7 @@ public class ImageProvider {
     private static Color parseRGB(String[] s) {
         int[] rgb = new int[3];
         try {
-            for (int i = 0; i<3; i++) {
+            for (int i = 0; i < 3; i++) {
                 rgb[i] = Integer.parseInt(s[i]);
             }
             return new Color(rgb[0], rgb[1], rgb[2]);
@@ -1612,9 +1619,9 @@ public class ImageProvider {
      * @param color The transparent color
      * @return The same image as {@code bi} where all pixels of the given color are transparent.
      * This resulting image has also the special property {@link #PROP_TRANSPARENCY_FORCED} set to {@code color}
-     * @since 7132
      * @see BufferedImage#getProperty
      * @see #isTransparencyForced
+     * @since 7132
      */
     public static BufferedImage makeImageTransparent(BufferedImage bi, Color color) {
         // the color we are looking for. Alpha bits are set to opaque
@@ -1653,8 +1660,8 @@ public class ImageProvider {
      * Determines if the transparency of the given {@code BufferedImage} has been enforced by a previous call to {@link #makeImageTransparent}.
      * @param bi The {@code BufferedImage} to test
      * @return {@code true} if the transparency of {@code bi} has been enforced by a previous call to {@code makeImageTransparent}.
-     * @since 7132
      * @see #makeImageTransparent
+     * @since 7132
      */
     public static boolean isTransparencyForced(BufferedImage bi) {
         return bi != null && !bi.getProperty(PROP_TRANSPARENCY_FORCED).equals(Image.UndefinedProperty);
@@ -1664,10 +1671,24 @@ public class ImageProvider {
      * Determines if the given {@code BufferedImage} has a transparent color determiend by a previous call to {@link #read}.
      * @param bi The {@code BufferedImage} to test
      * @return {@code true} if {@code bi} has a transparent color determined by a previous call to {@code read}.
-     * @since 7132
      * @see #read
+     * @since 7132
      */
     public static boolean hasTransparentColor(BufferedImage bi) {
         return bi != null && !bi.getProperty(PROP_TRANSPARENCY_COLOR).equals(Image.UndefinedProperty);
     }
+
+    /**
+     * Shutdown background image fetcher.
+     * @param now if {@code true}, attempts to stop all actively executing tasks, halts the processing of waiting tasks.
+     * if {@code false}, initiates an orderly shutdown in which previously submitted tasks are executed, but no new tasks will be accepted
+     * @since 8412
+     */
+    public static void shutdown(boolean now) {
+        if (now) {
+            IMAGE_FETCHER.shutdownNow();
+        } else {
+            IMAGE_FETCHER.shutdown();
+        }
+    }
 }
diff --git a/src/org/openstreetmap/josm/tools/ImageResource.java b/src/org/openstreetmap/josm/tools/ImageResource.java
index 4ce9599..adec828 100644
--- a/src/org/openstreetmap/josm/tools/ImageResource.java
+++ b/src/org/openstreetmap/josm/tools/ImageResource.java
@@ -114,7 +114,7 @@ public class ImageResource {
             }
             if (overlayInfo != null) {
                 for (ImageOverlay o : overlayInfo) {
-                    o.apply(bimg);
+                    o.process(bimg);
                 }
             }
             imgCache.put(dim, bimg);
@@ -138,7 +138,7 @@ public class ImageResource {
             bimg.getGraphics().drawImage(i, 0, 0, null);
             if (overlayInfo != null) {
                 for (ImageOverlay o : overlayInfo) {
-                    o.apply(bimg);
+                    o.process(bimg);
                 }
             }
             imgCache.put(dim, bimg);
diff --git a/src/org/openstreetmap/josm/tools/InputMapUtils.java b/src/org/openstreetmap/josm/tools/InputMapUtils.java
index 33f5557..87c6873 100644
--- a/src/org/openstreetmap/josm/tools/InputMapUtils.java
+++ b/src/org/openstreetmap/josm/tools/InputMapUtils.java
@@ -33,12 +33,12 @@ public final class InputMapUtils {
      * </ul>
      */
     public static void unassignCtrlShiftUpDown(JComponent cmp, int condition) {
-        InputMap inputMap=SwingUtilities.getUIInputMap(cmp, condition);
-        inputMap.remove(KeyStroke.getKeyStroke(KeyEvent.VK_UP,InputEvent.CTRL_MASK|InputEvent.SHIFT_MASK));
-        inputMap.remove(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN,InputEvent.CTRL_MASK|InputEvent.SHIFT_MASK));
-        inputMap.remove(KeyStroke.getKeyStroke(KeyEvent.VK_UP,InputEvent.ALT_MASK|InputEvent.SHIFT_MASK));
-        inputMap.remove(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN,InputEvent.ALT_MASK|InputEvent.SHIFT_MASK));
-        SwingUtilities.replaceUIInputMap(cmp,JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT,inputMap);
+        InputMap inputMap = SwingUtilities.getUIInputMap(cmp, condition);
+        inputMap.remove(KeyStroke.getKeyStroke(KeyEvent.VK_UP, InputEvent.CTRL_MASK | InputEvent.SHIFT_MASK));
+        inputMap.remove(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, InputEvent.CTRL_MASK | InputEvent.SHIFT_MASK));
+        inputMap.remove(KeyStroke.getKeyStroke(KeyEvent.VK_UP, InputEvent.ALT_MASK | InputEvent.SHIFT_MASK));
+        inputMap.remove(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, InputEvent.ALT_MASK | InputEvent.SHIFT_MASK));
+        SwingUtilities.replaceUIInputMap(cmp, JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, inputMap);
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/tools/LanguageInfo.java b/src/org/openstreetmap/josm/tools/LanguageInfo.java
index 11778fb..83c88de 100644
--- a/src/org/openstreetmap/josm/tools/LanguageInfo.java
+++ b/src/org/openstreetmap/josm/tools/LanguageInfo.java
@@ -1,8 +1,6 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.tools;
 
-import static org.openstreetmap.josm.tools.I18n.trc;
-
 import java.util.Collection;
 import java.util.LinkedList;
 import java.util.Locale;
@@ -39,25 +37,25 @@ public final class LanguageInfo {
      * @since 5915
      */
     public static String getWikiLanguagePrefix(LocaleType type) {
-        if(type == LocaleType.ENGLISH)
+        if (type == LocaleType.ENGLISH)
           return "";
 
         String code = getJOSMLocaleCode();
-        if(type == LocaleType.BASELANGUAGE) {
-            if(code.matches("[^_]+_[^_]+")) {
-                code = code.substring(0,2);
+        if (type == LocaleType.BASELANGUAGE) {
+            if (code.matches("[^_]+_[^_]+")) {
+                code = code.substring(0, 2);
                 if ("en".equals(code))
                     return null;
             } else {
                 return null;
             }
-        } else if(type == LocaleType.DEFAULTNOTENGLISH && "en".equals(code)) {
+        } else if (type == LocaleType.DEFAULTNOTENGLISH && "en".equals(code)) {
             return null;
-        } else if(code.matches(".+ at .+")) {
-          return code.substring(0,1).toUpperCase() + code.substring(1,2)
-          + "-" + code.substring(3,4).toUpperCase() + code.substring(4) + ":";
+        } else if (code.matches(".+ at .+")) {
+          return code.substring(0, 1).toUpperCase(Locale.ENGLISH) + code.substring(1, 2)
+          + "-" + code.substring(3, 4).toUpperCase(Locale.ENGLISH) + code.substring(4) + ":";
         }
-        return code.substring(0,1).toUpperCase() + code.substring(1) + ":";
+        return code.substring(0, 1).toUpperCase(Locale.ENGLISH) + code.substring(1) + ":";
     }
 
     /**
@@ -87,7 +85,7 @@ public final class LanguageInfo {
      * In most cases JOSM uses the 2-character ISO 639 language code ({@link Locale#getLanguage()}
      * to identify the locale of a localized resource, but in some cases it may use the
      * programmatic name for locales, as replied by {@link Locale#toString()}.
-     * 
+     *
      * For unknown country codes and variants this function already does fallback to
      * internally known translations.
      *
@@ -96,7 +94,7 @@ public final class LanguageInfo {
      */
     public static String getJOSMLocaleCode(Locale locale) {
         if (locale == null) return "en";
-        for(String full : getLanguageCodes(locale)) {
+        for (String full : getLanguageCodes(locale)) {
             if ("iw_IL".equals(full))
                 return "he";
             else if ("in".equals(full))
@@ -114,7 +112,7 @@ public final class LanguageInfo {
      *
      * In most cases JOSM and Java uses the same codes, but for some exceptions this is needed.
      *
-     * @param locale the locale. Replies "en" if null.
+     * @param localeName the locale. Replies "en" if null.
      * @return the Java code for the given locale
      * @since 8232
      */
@@ -190,7 +188,7 @@ public final class LanguageInfo {
         String want = getJOSMLocaleCode();
         return want.equals(newLanguage) || (!want.equals(oldLanguage) && newLanguage.startsWith("en"));
     }
-    
+
     /**
      * Replies the language prefix for use in XML elements (with a dot appended).
      *
@@ -225,25 +223,25 @@ public final class LanguageInfo {
      *   <li>lang of the current locale</li>
      * </ul>
      *
-     * @param locale the locale to use, <code>null</code> for default locale
-     * @since 8283
+     * @param l the locale to use, <code>null</code> for default locale
      * @return list of codes
+     * @since 8283
      */
     public static Collection<String> getLanguageCodes(Locale l) {
         Collection<String> list = new LinkedList<String>();
-        if(l == null)
+        if (l == null)
             l = Locale.getDefault();
         String lang = l.getLanguage();
         String c = l.getCountry();
         String v = l.getVariant();
-        if(c.isEmpty())
+        if (c.isEmpty())
             c = null;
-        if(v != null && !v.isEmpty()) {
-            if(c != null)
+        if (v != null && !v.isEmpty()) {
+            if (c != null)
                 list.add(lang+"_"+c+"@"+v);
             list.add(lang+"@"+v);
         }
-        if(c != null)
+        if (c != null)
             list.add(lang+"_"+c);
         list.add(lang);
         return list;
diff --git a/src/org/openstreetmap/josm/tools/MultiMap.java b/src/org/openstreetmap/josm/tools/MultiMap.java
index bd4469b..a53879d 100644
--- a/src/org/openstreetmap/josm/tools/MultiMap.java
+++ b/src/org/openstreetmap/josm/tools/MultiMap.java
@@ -1,4 +1,4 @@
-// License: GPL. See LICENSE file for details.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.tools;
 
 import java.util.ArrayList;
@@ -224,7 +224,7 @@ public class MultiMap<A, B> {
             return false;
         if (!(obj instanceof MultiMap))
             return false;
-        return map.equals(((MultiMap<?,?>) obj).map);
+        return map.equals(((MultiMap<?, ?>) obj).map);
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/tools/MultikeyActionsHandler.java b/src/org/openstreetmap/josm/tools/MultikeyActionsHandler.java
index 5a84a1c..edbb2ad 100644
--- a/src/org/openstreetmap/josm/tools/MultikeyActionsHandler.java
+++ b/src/org/openstreetmap/josm/tools/MultikeyActionsHandler.java
@@ -33,6 +33,84 @@ public final class MultikeyActionsHandler {
 
     private Map<MultikeyShortcutAction, MyAction> myActions = new HashMap<>();
 
+    private final class ShowLayersPopupWorker implements Runnable {
+        private final MyAction action;
+
+        private ShowLayersPopupWorker(MyAction action) {
+            this.action = action;
+        }
+
+        @Override
+        public void run() {
+            JPopupMenu layers = new JPopupMenu();
+
+            JMenuItem lbTitle = new JMenuItem((String) action.action.getValue(Action.SHORT_DESCRIPTION));
+            lbTitle.setEnabled(false);
+            JPanel pnTitle = new JPanel();
+            pnTitle.add(lbTitle);
+            layers.add(pnTitle);
+
+            char repeatKey = (char) action.shortcut.getKeyStroke().getKeyCode();
+            boolean repeatKeyUsed = false;
+
+            for (final MultikeyInfo info: action.action.getMultikeyCombinations()) {
+
+                if (info.getShortcut() == repeatKey) {
+                    repeatKeyUsed = true;
+                }
+
+                JMenuItem item = new JMenuItem(formatMenuText(action.shortcut.getKeyStroke(),
+                        String.valueOf(info.getShortcut()), info.getDescription()));
+                item.setMnemonic(info.getShortcut());
+                item.addActionListener(new ActionListener() {
+                    @Override
+                    public void actionPerformed(ActionEvent e) {
+                        action.action.executeMultikeyAction(info.getIndex(), false);
+                    }
+                });
+                layers.add(item);
+            }
+
+            if (!repeatKeyUsed) {
+                MultikeyInfo lastLayer = action.action.getLastMultikeyAction();
+                if (lastLayer != null) {
+                    JMenuItem repeateItem = new JMenuItem(formatMenuText(action.shortcut.getKeyStroke(),
+                            KeyEvent.getKeyText(action.shortcut.getKeyStroke().getKeyCode()),
+                            "Repeat " + lastLayer.getDescription()));
+                    repeateItem.setMnemonic(action.shortcut.getKeyStroke().getKeyCode());
+                    repeateItem.addActionListener(new ActionListener() {
+                        @Override
+                        public void actionPerformed(ActionEvent e) {
+                            action.action.executeMultikeyAction(-1, true);
+                        }
+                    });
+                    layers.add(repeateItem);
+                }
+            }
+            layers.addPopupMenuListener(new PopupMenuListener() {
+
+                @Override
+                public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
+                    // Do nothing
+                }
+
+                @Override
+                public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
+                    Main.map.statusLine.resetHelpText(STATUS_BAR_ID);
+                }
+
+                @Override
+                public void popupMenuCanceled(PopupMenuEvent e) {
+                    // Do nothing
+                }
+            });
+
+            layers.show(Main.parent, Integer.MAX_VALUE, Integer.MAX_VALUE);
+            layers.setLocation(Main.parent.getX() + Main.parent.getWidth() - layers.getWidth(),
+                    Main.parent.getY() + Main.parent.getHeight() - layers.getHeight());
+        }
+    }
+
     private class MyKeyEventDispatcher implements KeyEventDispatcher {
         @Override
         public boolean dispatchKeyEvent(KeyEvent e) {
@@ -84,7 +162,7 @@ public final class MultikeyActionsHandler {
 
         @Override
         public String toString() {
-            return "MultikeyAction" + action.toString();
+            return "MultikeyAction" + action;
         }
     }
 
@@ -101,7 +179,7 @@ public final class MultikeyActionsHandler {
         public void run() {
             if (lastTimestamp == MultikeyActionsHandler.this.lastTimestamp &&
                     lastAction == MultikeyActionsHandler.this.lastAction) {
-                showLayersPopup(lastAction);
+                SwingUtilities.invokeLater(new ShowLayersPopupWorker(lastAction));
                 MultikeyActionsHandler.this.lastAction = null;
             }
         }
@@ -111,10 +189,9 @@ public final class MultikeyActionsHandler {
     private MyAction lastAction;
     private Timer timer;
 
-
     private MultikeyActionsHandler() {
         KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(new MyKeyEventDispatcher());
-        timer =new Timer();
+        timer = new Timer();
     }
 
     private static MultikeyActionsHandler instance;
@@ -131,79 +208,10 @@ public final class MultikeyActionsHandler {
     }
 
     private String formatMenuText(KeyStroke keyStroke, String index, String description) {
-        String shortcutText = KeyEvent.getKeyModifiersText(keyStroke.getModifiers()) + "+" + KeyEvent.getKeyText(keyStroke.getKeyCode()) + "," + index;
+        String shortcutText = KeyEvent.getKeyModifiersText(keyStroke.getModifiers()) + "+"
+                + KeyEvent.getKeyText(keyStroke.getKeyCode()) + "," + index;
 
         return "<html><i>" + shortcutText + "</i>    " + description;
-
-    }
-
-    private void showLayersPopup(final MyAction action) {
-        SwingUtilities.invokeLater(new Runnable() {
-            @Override
-            public void run() {
-                JPopupMenu layers = new JPopupMenu();
-
-                JMenuItem lbTitle = new JMenuItem((String) action.action.getValue(Action.SHORT_DESCRIPTION));
-                lbTitle.setEnabled(false);
-                JPanel pnTitle = new JPanel();
-                pnTitle.add(lbTitle);
-                layers.add(pnTitle);
-
-                char repeatKey = (char) action.shortcut.getKeyStroke().getKeyCode();
-                boolean repeatKeyUsed = false;
-
-
-                for (final MultikeyInfo info: action.action.getMultikeyCombinations()) {
-
-                    if (info.getShortcut() == repeatKey) {
-                        repeatKeyUsed = true;
-                    }
-
-                    JMenuItem item = new JMenuItem(formatMenuText(action.shortcut.getKeyStroke(), String.valueOf(info.getShortcut()), info.getDescription()));
-                    item.setMnemonic(info.getShortcut());
-                    item.addActionListener(new ActionListener() {
-                        @Override
-                        public void actionPerformed(ActionEvent e) {
-                            action.action.executeMultikeyAction(info.getIndex(), false);
-                        }
-                    });
-                    layers.add(item);
-                }
-
-                if (!repeatKeyUsed) {
-                    MultikeyInfo lastLayer = action.action.getLastMultikeyAction();
-                    if (lastLayer != null) {
-                        JMenuItem repeateItem = new JMenuItem(formatMenuText(action.shortcut.getKeyStroke(),
-                                KeyEvent.getKeyText(action.shortcut.getKeyStroke().getKeyCode()),
-                                "Repeat " + lastLayer.getDescription()));
-                        repeateItem.setMnemonic(action.shortcut.getKeyStroke().getKeyCode());
-                        repeateItem.addActionListener(new ActionListener() {
-                            @Override
-                            public void actionPerformed(ActionEvent e) {
-                                action.action.executeMultikeyAction(-1, true);
-                            }
-                        });
-                        layers.add(repeateItem);
-                    }
-                }
-                layers.addPopupMenuListener(new PopupMenuListener() {
-
-                    @Override
-                    public void popupMenuWillBecomeVisible(PopupMenuEvent e) {}
-
-                    @Override
-                    public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
-                        Main.map.statusLine.resetHelpText(STATUS_BAR_ID);
-                    }
-
-                    @Override
-                    public void popupMenuCanceled(PopupMenuEvent e) {}
-                });
-
-                layers.show(Main.parent, Integer.MAX_VALUE, Integer.MAX_VALUE);
-                layers.setLocation(Main.parent.getX() + Main.parent.getWidth() - layers.getWidth(), Main.parent.getY() + Main.parent.getHeight() - layers.getHeight());
-            }
-        });
     }
 
     /**
@@ -224,7 +232,7 @@ public final class MultikeyActionsHandler {
      */
     public void removeAction(MultikeyShortcutAction action) {
         MyAction a = myActions.get(action);
-        if (a!=null) {
+        if (a != null) {
             Main.unregisterActionShortcut(a, a.shortcut);
             myActions.remove(action);
         }
diff --git a/src/org/openstreetmap/josm/tools/MultikeyShortcutAction.java b/src/org/openstreetmap/josm/tools/MultikeyShortcutAction.java
index 94867d5..33d6422 100644
--- a/src/org/openstreetmap/josm/tools/MultikeyShortcutAction.java
+++ b/src/org/openstreetmap/josm/tools/MultikeyShortcutAction.java
@@ -7,7 +7,7 @@ import javax.swing.Action;
 
 public interface MultikeyShortcutAction extends Action {
 
-    public static class MultikeyInfo {
+    class MultikeyInfo {
         private final int index;
         private final String description;
 
@@ -22,11 +22,11 @@ public interface MultikeyShortcutAction extends Action {
 
         public char getShortcut() {
             if (index < 9)
-                return (char)('1' + index);
+                return (char) ('1' + index);
             else if (index == 9)
                 return '0';
             else
-                return (char)('A' +  index - 10);
+                return (char) ('A' +  index - 10);
         }
 
         public String getDescription() {
@@ -34,10 +34,12 @@ public interface MultikeyShortcutAction extends Action {
         }
     }
 
-    public Shortcut getMultikeyShortcut();
+    Shortcut getMultikeyShortcut();
 
     void executeMultikeyAction(int index, boolean repeatLastAction);
+
     List<MultikeyInfo> getMultikeyCombinations();
+
     MultikeyInfo getLastMultikeyAction();
 
 }
diff --git a/src/org/openstreetmap/josm/tools/OpenBrowser.java b/src/org/openstreetmap/josm/tools/OpenBrowser.java
index 00005ff..ca284b5 100644
--- a/src/org/openstreetmap/josm/tools/OpenBrowser.java
+++ b/src/org/openstreetmap/josm/tools/OpenBrowser.java
@@ -50,7 +50,8 @@ public final class OpenBrowser {
                     // see #5629 #5108 #9568
                     Main.platform.openUrl(uri.toString());
                 } else {
-                    // This is not the case with some Linux environments (see below), and not sure about Mac OS X, so we need to handle API failure
+                    // This is not the case with some Linux environments (see below),
+                    // and not sure about Mac OS X, so we need to handle API failure
                     try {
                         Desktop.getDesktop().browse(uri);
                     } catch (IOException e) {
diff --git a/src/org/openstreetmap/josm/tools/OsmUrlToBounds.java b/src/org/openstreetmap/josm/tools/OsmUrlToBounds.java
index 12a7ae0..81e6ac5 100644
--- a/src/org/openstreetmap/josm/tools/OsmUrlToBounds.java
+++ b/src/org/openstreetmap/josm/tools/OsmUrlToBounds.java
@@ -145,7 +145,7 @@ public final class OsmUrlToBounds {
 
         final Map<Character, Integer> array = new HashMap<>();
 
-        for (int i=0; i<SHORTLINK_CHARS.length; ++i) {
+        for (int i = 0; i < SHORTLINK_CHARS.length; ++i) {
             array.put(SHORTLINK_CHARS[i], i);
         }
 
@@ -158,7 +158,7 @@ public final class OsmUrlToBounds {
         for (final char ch : shortLink.toCharArray()) {
             if (array.containsKey(ch)) {
                 int val = array.get(ch);
-                for (int i=0; i<3; ++i) {
+                for (int i = 0; i < 3; ++i) {
                     x <<= 1;
                     if ((val & 32) != 0) {
                         x |= 1;
@@ -290,10 +290,10 @@ public final class OsmUrlToBounds {
      */
     public static String getURL(double dlat, double dlon, int zoom) {
         // Truncate lat and lon to something more sensible
-        int decimals = (int) Math.pow(10, (zoom / 3));
-        double lat = (Math.round(dlat * decimals));
+        int decimals = (int) Math.pow(10, zoom / 3d);
+        double lat = Math.round(dlat * decimals);
         lat /= decimals;
-        double lon = (Math.round(dlon * decimals));
+        double lon = Math.round(dlon * decimals);
         lon /= decimals;
         return Main.getOSMWebsite() + "/#map="+zoom+"/"+lat+"/"+lon;
     }
diff --git a/src/org/openstreetmap/josm/tools/OverpassTurboQueryWizard.java b/src/org/openstreetmap/josm/tools/OverpassTurboQueryWizard.java
new file mode 100644
index 0000000..e8ee1fb
--- /dev/null
+++ b/src/org/openstreetmap/josm/tools/OverpassTurboQueryWizard.java
@@ -0,0 +1,83 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.tools;
+
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.nio.charset.StandardCharsets;
+import java.util.regex.Pattern;
+
+import javax.script.Invocable;
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
+import javax.script.ScriptException;
+
+/**
+ * Uses <a href="https://github.com/tyrasd/overpass-turbo/">Overpass Turbo</a> query wizard code
+ * to build an Overpass QL from a {@link org.openstreetmap.josm.actions.search.SearchAction} like query.
+ *
+ * Requires a JavaScript {@link ScriptEngine}.
+ * @since 8744
+ */
+public final class OverpassTurboQueryWizard {
+
+    private static OverpassTurboQueryWizard instance;
+    private final ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
+
+    /**
+     * An exception to indicate a failed parse.
+     */
+    public static class ParseException extends RuntimeException {
+    }
+
+    /**
+     * Replies the unique instance of this class.
+     *
+     * @return the unique instance of this class
+     */
+    public static synchronized OverpassTurboQueryWizard getInstance() {
+        if (instance == null) {
+            instance = new OverpassTurboQueryWizard();
+        }
+        return instance;
+    }
+
+    private OverpassTurboQueryWizard() {
+        // overpass-turbo is MIT Licensed
+
+        try (final Reader reader = new InputStreamReader(
+                getClass().getResourceAsStream("/data/overpass-turbo-ffs.js"), StandardCharsets.UTF_8)) {
+            //engine.eval("var turbo = {ffs: {noPresets: true}};");
+            engine.eval("var console = {log: function(){}};");
+            engine.eval(reader);
+            engine.eval("var construct_query = turbo.ffs().construct_query;");
+        } catch (ScriptException | IOException ex) {
+            throw new RuntimeException("Failed to initialize OverpassTurboQueryWizard", ex);
+        }
+    }
+
+    /**
+     * Builds an Overpass QL from a {@link org.openstreetmap.josm.actions.search.SearchAction} like query.
+     * @param search the {@link org.openstreetmap.josm.actions.search.SearchAction} like query
+     * @return an Overpass QL query
+     * @throws ParseException when the parsing fails
+     */
+    public String constructQuery(String search) throws ParseException {
+        try {
+            final Object result = ((Invocable) engine).invokeFunction("construct_query", search);
+            if (result == Boolean.FALSE) {
+                throw new ParseException();
+            }
+            String query = (String) result;
+            query = Pattern.compile("^.*\\[out:json\\]", Pattern.DOTALL).matcher(query).replaceFirst("");
+            query = Pattern.compile("^out.*", Pattern.MULTILINE).matcher(query).replaceAll("out meta;");
+            query = query.replace("({{bbox}})", "");
+            return query;
+        } catch (NoSuchMethodException e) {
+            throw new IllegalStateException();
+        } catch (ScriptException e) {
+            throw new RuntimeException("Failed to execute OverpassTurboQueryWizard", e);
+        }
+    }
+
+}
diff --git a/src/org/openstreetmap/josm/tools/Pair.java b/src/org/openstreetmap/josm/tools/Pair.java
index b5e81d9..0d003dd 100644
--- a/src/org/openstreetmap/josm/tools/Pair.java
+++ b/src/org/openstreetmap/josm/tools/Pair.java
@@ -9,7 +9,7 @@ import java.util.List;
  * @param <B> Type of second item
  * @since 429
  */
-public final class Pair<A,B> {
+public final class Pair<A, B> {
 
     /**
      * The first item
@@ -39,7 +39,7 @@ public final class Pair<A,B> {
     @Override
     public boolean equals(Object other) {
         if (other instanceof Pair<?, ?>) {
-            Pair<?, ?> o = (Pair<?, ?>)other;
+            Pair<?, ?> o = (Pair<?, ?>) other;
             return a.equals(o.a) && b.equals(o.b);
         } else
             return false;
@@ -52,7 +52,7 @@ public final class Pair<A,B> {
         return l;
     }
 
-    public static <T> Pair<T,T> sort(Pair<T,T> p) {
+    public static <T> Pair<T, T> sort(Pair<T, T> p) {
         if (p.b.hashCode() < p.a.hashCode()) {
             T tmp = p.a;
             p.a = p.b;
@@ -72,7 +72,7 @@ public final class Pair<A,B> {
      * @param v The second item
      * @return The newly created Pair(u,v)
      */
-    public static <U,V> Pair<U,V> create(U u, V v) {
-        return new Pair<>(u,v);
+    public static <U, V> Pair<U, V> create(U u, V v) {
+        return new Pair<>(u, v);
     }
 }
diff --git a/src/org/openstreetmap/josm/tools/PlatformHook.java b/src/org/openstreetmap/josm/tools/PlatformHook.java
index 4a43ce5..fd3019d 100644
--- a/src/org/openstreetmap/josm/tools/PlatformHook.java
+++ b/src/org/openstreetmap/josm/tools/PlatformHook.java
@@ -22,15 +22,15 @@ public interface PlatformHook {
       * Reason: On OSX we need to inform the Swing libraries
       * that we want to be integrated with the OS before we setup our GUI.
       */
-    public void preStartupHook();
-    
+    void preStartupHook();
+
     /**
       * The afterPrefStartupHook will be called early, but after
       * the preferences have been loaded and basic processing of
-      * command line arguments is finished. 
+      * command line arguments is finished.
       * It is guaranteed to be called before the GUI setup has started.
       */
-    public void afterPrefStartupHook();
+    void afterPrefStartupHook();
 
     /**
       * The startupHook will be called early, but after the GUI
@@ -39,7 +39,7 @@ public interface PlatformHook {
       * Reason: On OSX we need to register some callbacks with the
       * OS, so we'll receive events from the system menu.
       */
-    public void startupHook();
+    void startupHook();
 
     /**
       * The openURL hook will be used to open an URL in the
@@ -47,7 +47,7 @@ public interface PlatformHook {
      * @param url The URL to open
      * @throws IOException if any I/O error occurs
       */
-    public void openUrl(String url) throws IOException;
+    void openUrl(String url) throws IOException;
 
     /**
       * The initSystemShortcuts hook will be called by the
@@ -69,7 +69,7 @@ public interface PlatformHook {
       * on them to prevent the keyboard preferences from allowing the
       * user to change them.
       */
-    public void initSystemShortcuts();
+    void initSystemShortcuts();
 
     /**
       * The makeTooltip hook will be called whenever a tooltip for
@@ -85,19 +85,19 @@ public interface PlatformHook {
      * @param sc Shortcut associated (to display accelerator between parenthesis)
      * @return Full tooltip text (name + accelerator)
       */
-    public String makeTooltip(String name, Shortcut sc);
+    String makeTooltip(String name, Shortcut sc);
 
     /**
      * Returns the default LAF to be used on this platform to look almost as a native application.
      * @return The default native LAF for this platform
      */
-    public String getDefaultStyle();
+    String getDefaultStyle();
 
     /**
      * Determines if the platform allows full-screen.
      * @return {@code true} if full screen is allowed, {@code false} otherwise
      */
-    public boolean canFullscreen();
+    boolean canFullscreen();
 
     /**
      * Renames a file.
@@ -105,14 +105,14 @@ public interface PlatformHook {
      * @param to Target file
      * @return {@code true} if the file has been renamed, {@code false} otherwise
      */
-    public boolean rename(File from, File to);
+    boolean rename(File from, File to);
 
     /**
      * Returns a detailed OS description (at least family + version).
      * @return A detailed OS description.
      * @since 5850
      */
-    public String getOSDescription();
+    String getOSDescription();
 
     /**
      * Setup system keystore to add JOSM HTTPS certificate (for remote control).
@@ -125,7 +125,7 @@ public interface PlatformHook {
      * @throws NoSuchAlgorithmException in case of error
      * @since 7343
      */
-    public boolean setupHttpsCertificate(String entryAlias, KeyStore.TrustedCertificateEntry trustedCert)
+    boolean setupHttpsCertificate(String entryAlias, KeyStore.TrustedCertificateEntry trustedCert)
             throws KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException;
 
     /**
@@ -133,19 +133,19 @@ public interface PlatformHook {
      * @return the platform-dependent default cache directory
      * @since 7829
      */
-    public File getDefaultCacheDirectory();
+    File getDefaultCacheDirectory();
 
     /**
      * Returns the platform-dependent default preferences directory.
      * @return the platform-dependent default preferences directory
      * @since 7831
      */
-    public File getDefaultPrefDirectory();
+    File getDefaultPrefDirectory();
 
     /**
      * Returns the platform-dependent default user data directory.
      * @return the platform-dependent default user data directory
      * @since 7834
      */
-    public File getDefaultUserDataDirectory();
+    File getDefaultUserDataDirectory();
 }
diff --git a/src/org/openstreetmap/josm/tools/PlatformHookOsx.java b/src/org/openstreetmap/josm/tools/PlatformHookOsx.java
index 74a062b..74e6075 100644
--- a/src/org/openstreetmap/josm/tools/PlatformHookOsx.java
+++ b/src/org/openstreetmap/josm/tools/PlatformHookOsx.java
@@ -48,7 +48,7 @@ public class PlatformHookOsx extends PlatformHookUnixoid implements PlatformHook
             Class<?> eawtAboutHandler = Class.forName("com.apple.eawt.AboutHandler");
             Class<?> eawtOpenFilesHandler = Class.forName("com.apple.eawt.OpenFilesHandler");
             Class<?> eawtPreferencesHandler = Class.forName("com.apple.eawt.PreferencesHandler");
-            Object appli = eawtApplication.getConstructor((Class[])null).newInstance((Object[])null);
+            Object appli = eawtApplication.getConstructor((Class[]) null).newInstance((Object[]) null);
             Object proxy = Proxy.newProxyInstance(PlatformHookOsx.class.getClassLoader(), new Class<?>[] {
                 eawtQuitHandler, eawtAboutHandler, eawtOpenFilesHandler, eawtPreferencesHandler}, ivhandler);
             eawtApplication.getDeclaredMethod("setQuitHandler", eawtQuitHandler).invoke(appli, proxy);
@@ -79,7 +79,7 @@ public class PlatformHookOsx extends PlatformHookUnixoid implements PlatformHook
             // http://stackoverflow.com/a/8693890/2257172
             Class<?> eawtFullScreenUtilities = Class.forName("com.apple.eawt.FullScreenUtilities");
             eawtFullScreenUtilities.getDeclaredMethod("setWindowCanFullScreen",
-                    new Class[]{Window.class, boolean.class}).invoke(eawtFullScreenUtilities, window, true);
+                    new Class[]{Window.class, boolean.class}).invoke(eawtFullScreenUtilities, window, Boolean.TRUE);
         } catch (ReflectiveOperationException | SecurityException | IllegalArgumentException e) {
             Main.warn("Failed to register with OSX: " + e);
         }
@@ -97,7 +97,7 @@ public class PlatformHookOsx extends PlatformHookUnixoid implements PlatformHook
                 try {
                     Object oFiles = args[0].getClass().getMethod("getFiles").invoke(args[0]);
                     if (oFiles instanceof List) {
-                        Main.worker.submit(new OpenFileTask((List<File>)oFiles, null) {
+                        Main.worker.submit(new OpenFileTask((List<File>) oFiles, null) {
                             @Override
                             protected void realRun() throws SAXException, IOException, OsmTransferException {
                                 // Wait for JOSM startup is advanced enough to load a file
@@ -142,6 +142,7 @@ public class PlatformHookOsx extends PlatformHookUnixoid implements PlatformHook
 
     @Override
     public void initSystemShortcuts() {
+        // CHECKSTYLE.OFF: LineLength
         Shortcut.registerSystemShortcut("apple-reserved-01", tr("reserved"), KeyEvent.VK_SPACE, KeyEvent.META_DOWN_MASK).setAutomatic(); // Show or hide the Spotlight search field (when multiple languages are installed, may rotate through enabled script systems).
         Shortcut.registerSystemShortcut("apple-reserved-02", tr("reserved"), KeyEvent.VK_SPACE, KeyEvent.META_DOWN_MASK | KeyEvent.SHIFT_DOWN_MASK).setAutomatic(); // Apple reserved.
         Shortcut.registerSystemShortcut("apple-reserved-03", tr("reserved"), KeyEvent.VK_SPACE, KeyEvent.META_DOWN_MASK | KeyEvent.ALT_DOWN_MASK).setAutomatic(); // Show the Spotlight search results window (when multiple languages are installed, may rotate through keyboard layouts and input methods within a script).
@@ -276,6 +277,7 @@ public class PlatformHookOsx extends PlatformHookUnixoid implements PlatformHook
 
         Shortcut.registerSystemShortcut("view:zoomin", tr("reserved"), KeyEvent.VK_ADD, KeyEvent.META_DOWN_MASK); // Zoom in
         Shortcut.registerSystemShortcut("view:zoomout", tr("reserved"), KeyEvent.VK_SUBTRACT, KeyEvent.META_DOWN_MASK); // Zoom out
+        // CHECKSTYLE.ON: LineLength
     }
 
     @Override
@@ -291,7 +293,7 @@ public class PlatformHookOsx extends PlatformHookUnixoid implements PlatformHook
             result += "<html>";
         }
         result += name;
-        if (sc != null && sc.getKeyText().length() != 0) {
+        if (sc != null && !sc.getKeyText().isEmpty()) {
             result += " ";
             if (canHtml) {
                 result += "<font size='-2'>";
diff --git a/src/org/openstreetmap/josm/tools/PlatformHookUnixoid.java b/src/org/openstreetmap/josm/tools/PlatformHookUnixoid.java
index f09d9f5..452a938 100644
--- a/src/org/openstreetmap/josm/tools/PlatformHookUnixoid.java
+++ b/src/org/openstreetmap/josm/tools/PlatformHookUnixoid.java
@@ -31,6 +31,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
+import java.util.Locale;
 import java.util.Properties;
 
 import javax.swing.JOptionPane;
@@ -128,31 +129,35 @@ public class PlatformHookUnixoid implements PlatformHook {
 
     @Override
     public void initSystemShortcuts() {
+        // CHECKSTYLE.OFF: LineLength
         // TODO: Insert system shortcuts here. See Windows and especially OSX to see how to.
-        for(int i = KeyEvent.VK_F1; i <= KeyEvent.VK_F12; ++i)
-            Shortcut.registerSystemShortcut("screen:toogle"+i, tr("reserved"), i, KeyEvent.CTRL_DOWN_MASK | KeyEvent.ALT_DOWN_MASK).setAutomatic();
-        Shortcut.registerSystemShortcut("system:reset", tr("reserved"), KeyEvent.VK_DELETE, KeyEvent.CTRL_DOWN_MASK | KeyEvent.ALT_DOWN_MASK).setAutomatic();
-        Shortcut.registerSystemShortcut("system:resetX", tr("reserved"), KeyEvent.VK_BACK_SPACE, KeyEvent.CTRL_DOWN_MASK | KeyEvent.ALT_DOWN_MASK).setAutomatic();
+        for (int i = KeyEvent.VK_F1; i <= KeyEvent.VK_F12; ++i) {
+            Shortcut.registerSystemShortcut("screen:toogle"+i, tr("reserved"), i, KeyEvent.CTRL_DOWN_MASK | KeyEvent.ALT_DOWN_MASK)
+                .setAutomatic();
+        }
+        Shortcut.registerSystemShortcut("system:reset", tr("reserved"), KeyEvent.VK_DELETE, KeyEvent.CTRL_DOWN_MASK | KeyEvent.ALT_DOWN_MASK)
+            .setAutomatic();
+        Shortcut.registerSystemShortcut("system:resetX", tr("reserved"), KeyEvent.VK_BACK_SPACE, KeyEvent.CTRL_DOWN_MASK | KeyEvent.ALT_DOWN_MASK)
+            .setAutomatic();
+        // CHECKSTYLE.ON: LineLength
     }
 
     /**
      * This should work for all platforms. Yeah, should.
-     * See PlatformHook.java for a list of reasons why
-     * this is implemented here...
+     * See PlatformHook.java for a list of reasons why this is implemented here...
      */
     @Override
     public String makeTooltip(String name, Shortcut sc) {
         String result = "";
         result += "<html>";
         result += name;
-        if (sc != null && sc.getKeyText().length() != 0) {
+        if (sc != null && !sc.getKeyText().isEmpty()) {
             result += " ";
             result += "<font size='-2'>";
             result += "("+sc.getKeyText()+")";
             result += "</font>";
         }
-        result += " </html>";
-        return result;
+        return result + " </html>";
     }
 
     @Override
@@ -163,8 +168,7 @@ public class PlatformHookUnixoid implements PlatformHook {
     @Override
     public boolean canFullscreen() {
         return !GraphicsEnvironment.isHeadless() &&
-                GraphicsEnvironment.getLocalGraphicsEnvironment()
-        .getDefaultScreenDevice().isFullScreenSupported();
+                GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().isFullScreenSupported();
     }
 
     @Override
@@ -256,16 +260,17 @@ public class PlatformHookUnixoid implements PlatformHook {
         String osName = System.getProperty("os.name");
         if ("Linux".equalsIgnoreCase(osName)) {
             try {
-                // Try lsb_release (only available on LSB-compliant Linux systems, see https://www.linuxbase.org/lsb-cert/productdir.php?by_prod )
+                // Try lsb_release (only available on LSB-compliant Linux systems,
+                // see https://www.linuxbase.org/lsb-cert/productdir.php?by_prod )
                 Process p = Runtime.getRuntime().exec("lsb_release -ds");
                 try (BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream(), StandardCharsets.UTF_8))) {
                     String line = Utils.strip(input.readLine());
                     if (line != null && !line.isEmpty()) {
-                        line = line.replaceAll("\"+","");
-                        line = line.replaceAll("NAME=",""); // strange code for some Gentoo's
-                        if(line.startsWith("Linux ")) // e.g. Linux Mint
+                        line = line.replaceAll("\"+", "");
+                        line = line.replaceAll("NAME=", ""); // strange code for some Gentoo's
+                        if (line.startsWith("Linux ")) // e.g. Linux Mint
                             return line;
-                        else if(!line.isEmpty())
+                        else if (!line.isEmpty())
                             return "Linux " + line;
                     }
                 }
@@ -370,6 +375,9 @@ public class PlatformHookUnixoid implements PlatformHook {
                         }
                     } catch (IOException e) {
                         // Ignore
+                        if (Main.isTraceEnabled()) {
+                            Main.trace(e.getMessage());
+                        }
                     }
                 }
             }
@@ -377,8 +385,8 @@ public class PlatformHookUnixoid implements PlatformHook {
             if (result != null && !result.isEmpty() && prefix != null && !prefix.isEmpty()) {
                 result = prefix + result;
             }
-            if(result != null)
-                result = result.replaceAll("\"+","");
+            if (result != null)
+                result = result.replaceAll("\"+", "");
             return result;
         }
     }
@@ -406,7 +414,9 @@ public class PlatformHookUnixoid implements PlatformHook {
                         content += "<b>"+tr("This version is no longer supported by {0} since {1} and is not recommended for use.",
                                 "Oracle", tr("April 2015"))+"</b><br><br>";
                     }
-                    content += "<b>"+tr("JOSM will soon stop working with this version; we highly recommend you to update to Java {0}.", "8")+"</b><br><br>"+
+                    content += "<b>" +
+                            tr("JOSM will soon stop working with this version; we highly recommend you to update to Java {0}.", "8")
+                            + "</b><br><br>" +
                             tr("Would you like to update now ?");
                     ed.setContent(content);
 
@@ -450,16 +460,14 @@ public class PlatformHookUnixoid implements PlatformHook {
      * support for more scripts.</p>
      *
      * <p>The font configuration in Java doesn't include some Indic scripts,
-     * even though MS Windows ships with fonts that cover these unicode
-     * ranges.</p>
+     * even though MS Windows ships with fonts that cover these unicode ranges.</p>
      *
      * <p>To fix this, the fontconfig.properties template is copied to the JOSM
      * cache folder. Then, the additional entries are added to the font
      * configuration. Finally the system property "sun.awt.fontconfig" is set
      * to the customized fontconfig.properties file.</p>
      *
-     * <p>This is a crude hack, but better than no font display at all for these
-     * languages.
+     * <p>This is a crude hack, but better than no font display at all for these languages.
      * There is no guarantee, that the template file
      * ($JAVA_HOME/lib/fontconfig.properties.src) matches the default
      * configuration (which is in a binary format).
@@ -501,7 +509,7 @@ public class PlatformHookUnixoid implements PlatformHook {
                 List<String> allCharSubsets = new ArrayList<>();
                 for (FontEntry entry: extrasPref) {
                     Collection<String> fontsAvail = getInstalledFonts();
-                    if (fontsAvail != null && fontsAvail.contains(entry.file.toUpperCase())) {
+                    if (fontsAvail != null && fontsAvail.contains(entry.file.toUpperCase(Locale.ENGLISH))) {
                         if (!allCharSubsets.contains(entry.charset)) {
                             allCharSubsets.add(entry.charset);
                             extras.add(entry);
@@ -526,7 +534,7 @@ public class PlatformHookUnixoid implements PlatformHook {
                     }
                     w.append(key + "=" + value + "\n");
                 }
-                w.append("\n");
+                w.append('\n');
                 for (FontEntry entry: extras) {
                     if ("".equals(entry.name) || "".equals(entry.file)) {
                         continue;
@@ -539,7 +547,7 @@ public class PlatformHookUnixoid implements PlatformHook {
                     }
                     w.append(key + "=" + value + "\n");
                 }
-                w.append("\n");
+                w.append('\n');
                 String fallback = props.getProperty("sequence.fallback");
                 if (fallback != null) {
                     w.append("sequence.fallback=" + fallback + "," + Utils.join(",", allCharSubsets) + "\n");
@@ -558,8 +566,7 @@ public class PlatformHookUnixoid implements PlatformHook {
      *
      * Must be done without triggering the Java Font initialization.
      * (See {@link #extendFontconfig(java.lang.String)}, have to set system
-     * property first, which is then read by sun.awt.FontConfiguration upon
-     * initialization.)
+     * property first, which is then read by sun.awt.FontConfiguration upon initialization.)
      *
      * @return list of file names
      */
@@ -570,8 +577,7 @@ public class PlatformHookUnixoid implements PlatformHook {
     /**
      * Get default list of additional fonts to add to the configuration.
      *
-     * Java will choose thee first font in the list that can render a certain
-     * character.
+     * Java will choose thee first font in the list that can render a certain character.
      *
      * @return list of FontEntry objects
      */
diff --git a/src/org/openstreetmap/josm/tools/PlatformHookWindows.java b/src/org/openstreetmap/josm/tools/PlatformHookWindows.java
index 43110ce..6e6e9f0 100644
--- a/src/org/openstreetmap/josm/tools/PlatformHookWindows.java
+++ b/src/org/openstreetmap/josm/tools/PlatformHookWindows.java
@@ -49,6 +49,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Enumeration;
 import java.util.List;
+import java.util.Locale;
 
 import javax.swing.JOptionPane;
 
@@ -101,6 +102,7 @@ public class PlatformHookWindows extends PlatformHookUnixoid implements Platform
 
     @Override
     public void initSystemShortcuts() {
+        // CHECKSTYLE.OFF: LineLength
         //Shortcut.registerSystemCut("system:menuexit", tr("reserved"), VK_Q, CTRL_DOWN_MASK);
         Shortcut.registerSystemShortcut("system:duplicate", tr("reserved"), VK_D, CTRL_DOWN_MASK); // not really system, but to avoid odd results
 
@@ -167,6 +169,7 @@ public class PlatformHookWindows extends PlatformHookUnixoid implements Platform
         Shortcut.registerSystemShortcut("microsoft-reserved-51", tr("reserved"), VK_SHIFT, ALT_DOWN_MASK).setAutomatic();   // Switch the input language when multiple input languages are enabled
         Shortcut.registerSystemShortcut("microsoft-reserved-52", tr("reserved"), VK_SHIFT, CTRL_DOWN_MASK).setAutomatic();  // Switch the keyboard layout when multiple keyboard layouts are enabled
         //Shortcut.registerSystemCut("microsoft-reserved-53", tr("reserved"), ); // Change the reading direction of text in right-to-left reading languages (TODO: unclear)
+        // CHECKSTYLE.ON: LineLength
     }
 
     @Override
@@ -240,18 +243,18 @@ public class PlatformHookWindows extends PlatformHookUnixoid implements Platform
         if (!insecureCertificates.isEmpty()) {
             StringBuilder message = new StringBuilder("<html>");
             message.append(tr("A previous version of JOSM has installed a custom certificate "+
-                    "in order to provide HTTPS support for Remote Control:"));
-            message.append("<br><ul>");
+                    "in order to provide HTTPS support for Remote Control:"))
+                   .append("<br><ul>");
             for (String alias : insecureCertificates) {
-                message.append("<li>");
-                message.append(alias);
-                message.append("</li>");
+                message.append("<li>")
+                       .append(alias)
+                       .append("</li>");
             }
-            message.append("</ul>");
-            message.append(tr("It appears it could be an important <b>security risk</b>.<br><br>"+
+            message.append("</ul>")
+                   .append(tr("It appears it could be an important <b>security risk</b>.<br><br>"+
                     "You are now going to be prompted by Windows to remove this insecure certificate.<br>"+
-                    "For your own safety, <b>please click Yes</b> in next dialog."));
-            message.append("</html>");
+                    "For your own safety, <b>please click Yes</b> in next dialog."))
+                   .append("</html>");
             JOptionPane.showMessageDialog(Main.parent, message.toString(), tr("Warning"), JOptionPane.WARNING_MESSAGE);
             for (String alias : insecureCertificates) {
                 Main.warn(tr("Removing insecure certificate from {0} keystore: {1}", WINDOWS_ROOT, alias));
@@ -282,8 +285,8 @@ public class PlatformHookWindows extends PlatformHookUnixoid implements Platform
                     "This requires to add a custom certificate generated by JOSM to the Windows Root CA store.<br><br>"+
                     "You are now going to be prompted by Windows to confirm this operation.<br>"+
                     "To enable proper HTTPS support, <b>please click Yes</b> in next dialog.<br><br>"+
-                    "If unsure, you can also click No then disable HTTPS support in Remote Control preferences."));
-            message.append("</html>");
+                    "If unsure, you can also click No then disable HTTPS support in Remote Control preferences."))
+                   .append("</html>");
             JOptionPane.showMessageDialog(Main.parent, message.toString(),
                     tr("HTTPS support in Remote Control"), JOptionPane.INFORMATION_MESSAGE);
         }
@@ -319,7 +322,7 @@ public class PlatformHookWindows extends PlatformHookUnixoid implements Platform
             for (Path p : ds) {
                 Path filename = p.getFileName();
                 if (filename != null) {
-                    fontsAvail.add(filename.toString().toUpperCase());
+                    fontsAvail.add(filename.toString().toUpperCase(Locale.ENGLISH));
                 }
             }
             fontsAvail.add(""); // for devanagari
diff --git a/src/org/openstreetmap/josm/tools/Predicate.java b/src/org/openstreetmap/josm/tools/Predicate.java
index 0e977da..969300c 100644
--- a/src/org/openstreetmap/josm/tools/Predicate.java
+++ b/src/org/openstreetmap/josm/tools/Predicate.java
@@ -14,5 +14,5 @@ public interface Predicate<T> {
      * @param object The object to evaluate
      * @return {@code true} if the object passes the test, {@code false} otherwise
      */
-    public boolean evaluate(T object);
+    boolean evaluate(T object);
 }
diff --git a/src/org/openstreetmap/josm/tools/Predicates.java b/src/org/openstreetmap/josm/tools/Predicates.java
index c807a68..97ec22c 100644
--- a/src/org/openstreetmap/josm/tools/Predicates.java
+++ b/src/org/openstreetmap/josm/tools/Predicates.java
@@ -1,3 +1,4 @@
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.tools;
 
 import java.util.Collection;
diff --git a/src/org/openstreetmap/josm/tools/Property.java b/src/org/openstreetmap/josm/tools/Property.java
index 6e38a81..8811e88 100644
--- a/src/org/openstreetmap/josm/tools/Property.java
+++ b/src/org/openstreetmap/josm/tools/Property.java
@@ -13,12 +13,12 @@ public interface Property<O, P> {
      * @param obj the object, from that the property is derived
      * @return the value of the property for the object obj
      */
-    public P get(O obj);
+    P get(O obj);
 
     /**
      * Set the value of the property for the object.
      * @param obj the object for that the property should be set
      * @param value the value the property is set to
      */
-    public void set(O obj, P value);
+    void set(O obj, P value);
 }
diff --git a/src/org/openstreetmap/josm/tools/RightAndLefthandTraffic.java b/src/org/openstreetmap/josm/tools/RightAndLefthandTraffic.java
index 09ab488..3793db9 100644
--- a/src/org/openstreetmap/josm/tools/RightAndLefthandTraffic.java
+++ b/src/org/openstreetmap/josm/tools/RightAndLefthandTraffic.java
@@ -20,7 +20,7 @@ import org.openstreetmap.josm.tools.Geometry.PolygonIntersection;
 /**
  * Look up, if there is right- or left-hand traffic at a certain place.
  */
-public class RightAndLefthandTraffic {
+public final class RightAndLefthandTraffic {
 
     private static class RLTrafficGeoProperty implements GeoProperty<Boolean> {
 
@@ -28,9 +28,9 @@ public class RightAndLefthandTraffic {
         public Boolean get(LatLon ll) {
             for (Area a : leftHandTrafficPolygons) {
                 if (a.contains(ll.lon(), ll.lat()))
-                    return true;
+                    return Boolean.TRUE;
             }
-            return false;
+            return Boolean.FALSE;
         }
 
         @Override
@@ -39,17 +39,21 @@ public class RightAndLefthandTraffic {
             for (Area a : leftHandTrafficPolygons) {
                 PolygonIntersection is = Geometry.polygonIntersection(abox, a, 1e-10 /* using deg and not meters */);
                 if (is == PolygonIntersection.FIRST_INSIDE_SECOND)
-                    return true;
+                    return Boolean.TRUE;
                 if (is != PolygonIntersection.OUTSIDE)
                     return null;
             }
-            return false;
+            return Boolean.FALSE;
         }
     }
 
     private static volatile Collection<Area> leftHandTrafficPolygons;
     private static volatile GeoPropertyIndex<Boolean> rlCache;
 
+    private RightAndLefthandTraffic() {
+        // Hide implicit public constructor for utility classes
+    }
+
     /**
      * Check if there is right-hand traffic at a certain location.
      *
@@ -77,5 +81,4 @@ public class RightAndLefthandTraffic {
         }
         rlCache = new GeoPropertyIndex<Boolean>(new RLTrafficGeoProperty(), 24);
     }
-
 }
diff --git a/src/org/openstreetmap/josm/tools/Shortcut.java b/src/org/openstreetmap/josm/tools/Shortcut.java
index 124c37d..121ef61 100644
--- a/src/org/openstreetmap/josm/tools/Shortcut.java
+++ b/src/org/openstreetmap/josm/tools/Shortcut.java
@@ -1,4 +1,4 @@
-//License: GPL. For details, see LICENSE file.
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.tools;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -16,6 +16,7 @@ import javax.swing.AbstractAction;
 import javax.swing.AbstractButton;
 import javax.swing.JMenu;
 import javax.swing.KeyStroke;
+import javax.swing.text.JTextComponent;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.util.GuiHelper;
@@ -34,19 +35,32 @@ import org.openstreetmap.josm.gui.util.GuiHelper;
  * @since 1084
  */
 public final class Shortcut {
-    private String shortText;        // the unique ID of the shortcut
-    private String longText;         // a human readable description that will be shown in the preferences
-    private final int requestedKey;  // the key, the caller requested
-    private final int requestedGroup;// the group, the caller requested
-    private int assignedKey;         // the key that actually is used
-    private int assignedModifier;    // the modifiers that are used
-    private boolean assignedDefault; // true if it got assigned what was requested. (Note: modifiers will be ignored in favour of group when loading it from the preferences then.)
-    private boolean assignedUser;    // true if the user changed this shortcut
-    private boolean automatic;       // true if the user cannot change this shortcut (Note: it also will not be saved into the preferences)
-    private boolean reset;           // true if the user requested this shortcut to be set to its default value (will happen on next restart, as this shortcut will not be saved to the preferences)
+    /** the unique ID of the shortcut */
+    private final String shortText;
+    /** a human readable description that will be shown in the preferences */
+    private String longText;
+    /** the key, the caller requested */
+    private final int requestedKey;
+    /** the group, the caller requested */
+    private final int requestedGroup;
+    /** the key that actually is used */
+    private int assignedKey;
+    /** the modifiers that are used */
+    private int assignedModifier;
+    /** true if it got assigned what was requested.
+     * (Note: modifiers will be ignored in favour of group when loading it from the preferences then.) */
+    private boolean assignedDefault;
+    /** true if the user changed this shortcut */
+    private boolean assignedUser;
+    /** true if the user cannot change this shortcut (Note: it also will not be saved into the preferences) */
+    private boolean automatic;
+    /** true if the user requested this shortcut to be set to its default value
+     * (will happen on next restart, as this shortcut will not be saved to the preferences) */
+    private boolean reset;
 
     // simple constructor
-    private Shortcut(String shortText, String longText, int requestedKey, int requestedGroup, int assignedKey, int assignedModifier, boolean assignedDefault, boolean assignedUser) {
+    private Shortcut(String shortText, String longText, int requestedKey, int requestedGroup, int assignedKey, int assignedModifier,
+            boolean assignedDefault, boolean assignedUser) {
         this.shortText = shortText;
         this.longText = longText;
         this.requestedKey = requestedKey;
@@ -67,8 +81,7 @@ public final class Shortcut {
         return longText;
     }
 
-    // a shortcut will be renamed when it is handed out again, because the original name
-    // may be a dummy
+    // a shortcut will be renamed when it is handed out again, because the original name may be a dummy
     private void setLongText(String longText) {
         this.longText = longText;
     }
@@ -81,15 +94,15 @@ public final class Shortcut {
         return assignedModifier;
     }
 
-    public boolean getAssignedDefault() {
+    public boolean isAssignedDefault() {
         return assignedDefault;
     }
 
-    public boolean getAssignedUser() {
+    public boolean isAssignedUser() {
         return assignedUser;
     }
 
-    public boolean getAutomatic() {
+    public boolean isAutomatic() {
         return automatic;
     }
 
@@ -97,7 +110,7 @@ public final class Shortcut {
         return !automatic && !"core:none".equals(shortText);
     }
 
-    private boolean getReset() {
+    private boolean isReset() {
         return reset;
     }
 
@@ -147,7 +160,7 @@ public final class Shortcut {
 
     // create a shortcut object from an string as saved in the preferences
     private Shortcut(String prefString) {
-        List<String> s = (new ArrayList<>(Main.pref.getCollection(prefString)));
+        List<String> s = new ArrayList<>(Main.pref.getCollection(prefString));
         this.shortText = prefString.substring(15);
         this.longText = s.get(0);
         this.requestedKey = Integer.parseInt(s.get(1));
@@ -166,7 +179,7 @@ public final class Shortcut {
 
     // get a string that can be put into the preferences
     private boolean save() {
-        if (getAutomatic() || getReset() || !getAssignedUser()) {
+        if (isAutomatic() || isReset() || !isAssignedUser()) {
             return Main.pref.putCollection("shortcut.entry."+shortText, null);
         } else {
             return Main.pref.putCollection("shortcut.entry."+shortText, Arrays.asList(new String[]{longText,
@@ -202,6 +215,14 @@ public final class Shortcut {
         }
     }
     /**
+     * Sets the mnemonic key on a text component.
+     */
+    public void setFocusAccelerator(JTextComponent component) {
+        if (assignedModifier == getGroupModifier(MNEMONIC)  && getKeyStroke() != null && KeyEvent.getKeyText(assignedKey).length() == 1) {
+            component.setFocusAccelerator(KeyEvent.getKeyText(assignedKey).charAt(0));
+        }
+    }
+    /**
      * use this to set a actions's accelerator
      */
     public void setAccelerator(AbstractAction action) {
@@ -217,8 +238,8 @@ public final class Shortcut {
         KeyStroke keyStroke = getKeyStroke();
         if (keyStroke == null) return "";
         String modifText = KeyEvent.getKeyModifiersText(keyStroke.getModifiers());
-        if ("".equals (modifText)) return KeyEvent.getKeyText (keyStroke.getKeyCode ());
-        return modifText + "+" + KeyEvent.getKeyText(keyStroke.getKeyCode ());
+        if ("".equals(modifText)) return KeyEvent.getKeyText(keyStroke.getKeyCode());
+        return modifText + "+" + KeyEvent.getKeyText(keyStroke.getKeyCode());
     }
 
     @Override
@@ -234,7 +255,7 @@ public final class Shortcut {
     private static Map<String, Shortcut> shortcuts = new LinkedHashMap<>();
 
     // and here our modifier groups
-    private static Map<Integer, Integer> groups= new HashMap<>();
+    private static Map<Integer, Integer> groups = new HashMap<>();
 
     // check if something collides with an existing shortcut
     public static Shortcut findShortcut(int requestedKey, int modifier) {
@@ -252,9 +273,8 @@ public final class Shortcut {
      */
     public static List<Shortcut> listAll() {
         List<Shortcut> l = new ArrayList<>();
-        for(Shortcut c : shortcuts.values())
-        {
-            if(!"core:none".equals(c.shortText)) {
+        for (Shortcut c : shortcuts.values()) {
+            if (!"core:none".equals(c.shortText)) {
                 l.add(c);
             }
         }
@@ -301,35 +321,35 @@ public final class Shortcut {
         groups.put(ALT, KeyEvent.ALT_DOWN_MASK);
         groups.put(SHIFT, KeyEvent.SHIFT_DOWN_MASK);
         groups.put(CTRL, commandDownMask);
-        groups.put(ALT_SHIFT, KeyEvent.ALT_DOWN_MASK|KeyEvent.SHIFT_DOWN_MASK);
-        groups.put(ALT_CTRL, KeyEvent.ALT_DOWN_MASK|commandDownMask);
-        groups.put(CTRL_SHIFT, commandDownMask|KeyEvent.SHIFT_DOWN_MASK);
-        groups.put(ALT_CTRL_SHIFT, KeyEvent.ALT_DOWN_MASK|commandDownMask|KeyEvent.SHIFT_DOWN_MASK);
+        groups.put(ALT_SHIFT, KeyEvent.ALT_DOWN_MASK | KeyEvent.SHIFT_DOWN_MASK);
+        groups.put(ALT_CTRL, KeyEvent.ALT_DOWN_MASK | commandDownMask);
+        groups.put(CTRL_SHIFT, commandDownMask | KeyEvent.SHIFT_DOWN_MASK);
+        groups.put(ALT_CTRL_SHIFT, KeyEvent.ALT_DOWN_MASK | commandDownMask | KeyEvent.SHIFT_DOWN_MASK);
 
         // (1) System reserved shortcuts
         Main.platform.initSystemShortcuts();
         // (2) User defined shortcuts
         List<Shortcut> newshortcuts = new LinkedList<>();
-        for(String s : Main.pref.getAllPrefixCollectionKeys("shortcut.entry.")) {
+        for (String s : Main.pref.getAllPrefixCollectionKeys("shortcut.entry.")) {
             newshortcuts.add(new Shortcut(s));
         }
 
-        for(Shortcut sc : newshortcuts) {
-            if (sc.getAssignedUser()
+        for (Shortcut sc : newshortcuts) {
+            if (sc.isAssignedUser()
             && findShortcut(sc.getAssignedKey(), sc.getAssignedModifier()) == null) {
                 shortcuts.put(sc.getShortText(), sc);
             }
         }
         // Shortcuts at their default values
-        for(Shortcut sc : newshortcuts) {
-            if (!sc.getAssignedUser() && sc.getAssignedDefault()
+        for (Shortcut sc : newshortcuts) {
+            if (!sc.isAssignedUser() && sc.isAssignedDefault()
             && findShortcut(sc.getAssignedKey(), sc.getAssignedModifier()) == null) {
                 shortcuts.put(sc.getShortText(), sc);
             }
         }
         // Shortcuts that were automatically moved
-        for(Shortcut sc : newshortcuts) {
-            if (!sc.getAssignedUser() && !sc.getAssignedDefault()
+        for (Shortcut sc : newshortcuts) {
+            if (!sc.isAssignedUser() && !sc.isAssignedDefault()
             && findShortcut(sc.getAssignedKey(), sc.getAssignedModifier()) == null) {
                 shortcuts.put(sc.getShortText(), sc);
             }
@@ -338,13 +358,13 @@ public final class Shortcut {
 
     private static int getGroupModifier(int group) {
         Integer m = groups.get(group);
-        if(m == null)
+        if (m == null)
             m = -1;
         return m;
     }
 
     private static int findModifier(int group, Integer modifier) {
-        if(modifier == null) {
+        if (modifier == null) {
             modifier = getGroupModifier(group);
             if (modifier == null) { // garbage in, no shortcut out
                 modifier = getGroupModifier(NONE);
@@ -415,14 +435,14 @@ public final class Shortcut {
             if (Main.isPlatformOsx()) {
                 // Try to reassign Meta to Ctrl
                 int newmodifier = findNewOsxModifier(requestedGroup);
-                if ( findShortcut(requestedKey, newmodifier) == null ) {
+                if (findShortcut(requestedKey, newmodifier) == null) {
                     return reassignShortcut(shortText, longText, requestedKey, conflict, requestedGroup, requestedKey, newmodifier);
                 }
             }
             for (int m : mods) {
                 for (int k : keys) {
                     int newmodifier = getGroupModifier(m);
-                    if ( findShortcut(k, newmodifier) == null ) {
+                    if (findShortcut(k, newmodifier) == null) {
                         return reassignShortcut(shortText, longText, requestedKey, conflict, m, k, newmodifier);
                     }
                 }
@@ -440,9 +460,9 @@ public final class Shortcut {
     private static int findNewOsxModifier(int requestedGroup) {
         switch (requestedGroup) {
             case CTRL: return KeyEvent.CTRL_DOWN_MASK;
-            case ALT_CTRL: return KeyEvent.ALT_DOWN_MASK|KeyEvent.CTRL_DOWN_MASK;
-            case CTRL_SHIFT: return KeyEvent.CTRL_DOWN_MASK|KeyEvent.SHIFT_DOWN_MASK;
-            case ALT_CTRL_SHIFT: return KeyEvent.ALT_DOWN_MASK|KeyEvent.CTRL_DOWN_MASK|KeyEvent.SHIFT_DOWN_MASK;
+            case ALT_CTRL: return KeyEvent.ALT_DOWN_MASK | KeyEvent.CTRL_DOWN_MASK;
+            case CTRL_SHIFT: return KeyEvent.CTRL_DOWN_MASK | KeyEvent.SHIFT_DOWN_MASK;
+            case ALT_CTRL_SHIFT: return KeyEvent.ALT_DOWN_MASK | KeyEvent.CTRL_DOWN_MASK | KeyEvent.SHIFT_DOWN_MASK;
             default: return 0;
         }
     }
diff --git a/src/org/openstreetmap/josm/tools/TextTagParser.java b/src/org/openstreetmap/josm/tools/TextTagParser.java
index 3e9cb02..0e97e55 100644
--- a/src/org/openstreetmap/josm/tools/TextTagParser.java
+++ b/src/org/openstreetmap/josm/tools/TextTagParser.java
@@ -29,10 +29,10 @@ import org.openstreetmap.josm.tools.LanguageInfo.LocaleType;
 public final class TextTagParser {
 
     // properties need JOSM restart to apply, modified rarely enough
-    protected static final int MAX_KEY_LENGTH = Main.pref.getInteger("tags.paste.max-key-length", 50);
-    protected static final int MAX_KEY_COUNT = Main.pref.getInteger("tags.paste.max-key-count", 30);
-    protected static final String KEY_PATTERN = Main.pref.get("tags.paste.tag-pattern", "[0-9a-zA-Z:_]*");
-    protected static final int MAX_VALUE_LENGTH = 255;
+    private static final int MAX_KEY_LENGTH = Main.pref.getInteger("tags.paste.max-key-length", 50);
+    private static final int MAX_KEY_COUNT = Main.pref.getInteger("tags.paste.max-key-count", 30);
+    private static final String KEY_PATTERN = Main.pref.get("tags.paste.tag-pattern", "[0-9a-zA-Z:_]*");
+    private static final int MAX_VALUE_LENGTH = 255;
 
     private TextTagParser() {
         // Hide default constructor for utils classes
@@ -61,11 +61,19 @@ public final class TextTagParser {
 
             while (true) {
                 skipEmpty();
-                if (pos == n) { break; }
+                if (pos == n) {
+                    break;
+                }
                 k = parseString("\n\r\t= ");
-                if (pos == n) { tags.clear();  break; }
+                if (pos == n) {
+                    tags.clear();
+                    break;
+                }
                 skipSign();
-                if (pos == n) { tags.clear();  break; }
+                if (pos == n) {
+                    tags.clear();
+                    break;
+                }
                 v = parseString("\n\r\t ");
                 tags.put(k, v);
             }
@@ -84,7 +92,7 @@ public final class TextTagParser {
                 } else if (c == '\\') {
                     esc = true;
                 } else if (c == '\"' && !quotesStarted) { // opening "
-                    if (s.toString().trim().length()>0) { // we had   ||some text"||
+                    if (!s.toString().trim().isEmpty()) { // we had   ||some text"||
                         s.append(c); // just add ", not open
                     } else {
                         s.delete(0, s.length()); // forget that empty characthers and start reading "....
@@ -94,13 +102,13 @@ public final class TextTagParser {
                     quotesStarted = false;
                     pos++;
                     break;
-                } else if (!quotesStarted && (Arrays.binarySearch(stop, c)>=0)) {
+                } else if (!quotesStarted && (Arrays.binarySearch(stop, c) >= 0)) {
                     // stop-symbol found
                     pos++;
                     break;
                 } else {
                     // skip non-printable characters
-                    if(c>=32) s.append(c);
+                    if (c >= 32) s.append(c);
                 }
                 pos++;
             }
@@ -117,7 +125,7 @@ public final class TextTagParser {
                 c = data.charAt(pos);
                 if (c == '\t' || c == '\n'  || c == ' ') {
                     pos++;
-                } else if (c== '=') {
+                } else if (c == '=') {
                     if (signFound) break; // a  =  =qwerty means "a"="=qwerty"
                     signFound = true;
                     pos++;
@@ -131,7 +139,7 @@ public final class TextTagParser {
             char c;
             while (pos < n) {
                 c = data.charAt(pos);
-                if (c == '\t' || c == '\n' || c == '\r' || c == ' ' ) {
+                if (c == '\t' || c == '\n' || c == '\r' || c == ' ') {
                     pos++;
                 } else {
                     break;
@@ -141,7 +149,7 @@ public final class TextTagParser {
     }
 
     protected static String unescape(String k) {
-        if(! (k.startsWith("\"") && k.endsWith("\"")) ) {
+        if (!(k.startsWith("\"") && k.endsWith("\""))) {
             if (k.contains("=")) {
                 // '=' not in quotes will be treated as an error!
                 return null;
@@ -149,7 +157,7 @@ public final class TextTagParser {
                 return k;
             }
         }
-        String text = k.substring(1,k.length()-1);
+        String text = k.substring(1, k.length()-1);
         return (new TextAnalyzer(text)).parseString("\r\t\n");
     }
 
@@ -164,18 +172,19 @@ public final class TextTagParser {
          String[] lines = text.split(splitRegex);
          Pattern p = Pattern.compile(tagRegex);
          Map<String, String> tags = new HashMap<>();
-         String k=null, v=null;
+         String k = null, v = null;
          for (String  line: lines) {
             if (line.trim().isEmpty()) continue; // skip empty lines
             Matcher m = p.matcher(line);
             if (m.matches()) {
-                 k=m.group(1).trim(); v=m.group(2).trim();
+                 k = m.group(1).trim();
+                 v = m.group(2).trim();
                  if (unescapeTextInQuotes) {
                      k = unescape(k);
                      v = unescape(v);
-                     if (k==null || v==null) return null;
+                     if (k == null || v == null) return null;
                  }
-                 tags.put(k,v);
+                 tags.put(k, v);
             } else {
                 return null;
             }
@@ -187,25 +196,24 @@ public final class TextTagParser {
          }
     }
 
-    public static Map<String,String> getValidatedTagsFromText(String buf) {
-        Map<String,String> tags = readTagsFromText(buf);
+    public static Map<String, String> getValidatedTagsFromText(String buf) {
+        Map<String, String> tags = readTagsFromText(buf);
         return validateTags(tags) ? tags : null;
     }
 
     /**
      * Apply different methods to extract tag-value pairs from arbitrary text
-     * @param buf
+     * @param buf buffer
      * @return null if no format is suitable
      */
-
-    public static Map<String,String> readTagsFromText(String buf) {
-        Map<String,String> tags;
+    public static Map<String, String> readTagsFromText(String buf) {
+        Map<String, String> tags;
 
         // Format
         // tag1\tval1\ntag2\tval2\n
-        tags = readTagsByRegexp(buf, "[\\r\\n]+", ".*([a-zA-Z0-9:_]+).*\\t(.*?)", false);
+        tags = readTagsByRegexp(buf, "[\\r\\n]+", ".*?([a-zA-Z0-9:_]+).*\\t(.*?)", false);
                 // try "tag\tvalue\n" format
-        if (tags!=null) return tags;
+        if (tags != null) return tags;
 
         // Format
         // a=b \n c=d \n "a b"=hello
@@ -214,21 +222,20 @@ public final class TextTagParser {
         // a = b=c  - this method of parsing fails intentionally
         tags = readTagsByRegexp(buf, "[\\n\\t\\r]+", "(.*?)=(.*?)", true);
                 // try format  t1=v1\n t2=v2\n ...
-        if (tags!=null) return tags;
+        if (tags != null) return tags;
 
         // JSON-format
         String bufJson = buf.trim();
         // trim { }, if there are any
-        if (bufJson.startsWith("{") && bufJson.endsWith("}") ) bufJson = bufJson.substring(1,bufJson.length()-1);
+        if (bufJson.startsWith("{") && bufJson.endsWith("}"))
+            bufJson = bufJson.substring(1, bufJson.length()-1);
         tags = readTagsByRegexp(bufJson, "[\\s]*,[\\s]*",
                 "[\\s]*(\\\".*?[^\\\\]\\\")"+"[\\s]*:[\\s]*"+"(\\\".*?[^\\\\]\\\")[\\s]*", true);
-        if (tags!=null) return tags;
+        if (tags != null) return tags;
 
         // Free format
         // a 1 "b" 2 c=3 d 4 e "5"
-        TextAnalyzer parser = new TextAnalyzer(buf);
-        tags = parser.getFreeParsedTags();
-        return tags;
+        return new TextAnalyzer(buf).getFreeParsedTags();
     }
 
     /**
@@ -241,25 +248,25 @@ public final class TextTagParser {
         int s = tags.size();
         if (s > MAX_KEY_COUNT) {
             // Use trn() even if for english it makes no sense, as s > 30
-            r=warning(trn("There was {0} tag found in the buffer, it is suspicious!",
+            r = warning(trn("There was {0} tag found in the buffer, it is suspicious!",
             "There were {0} tags found in the buffer, it is suspicious!", s,
             s), "", "tags.paste.toomanytags");
-            if (r==2 || r==3) return false; if (r==4) return true;
+            if (r == 2 || r == 3) return false; if (r == 4) return true;
         }
         for (Entry<String, String> entry : tags.entrySet()) {
             String key = entry.getKey();
             String value = entry.getValue();
             if (key.length() > MAX_KEY_LENGTH) {
                 r = warning(tr("Key is too long (max {0} characters):", MAX_KEY_LENGTH), key+"="+value, "tags.paste.keytoolong");
-                if (r==2 || r==3) return false; if (r==4) return true;
+                if (r == 2 || r == 3) return false; if (r == 4) return true;
             }
             if (!key.matches(KEY_PATTERN)) {
                 r = warning(tr("Suspicious characters in key:"), key, "tags.paste.keydoesnotmatch");
-                if (r==2 || r==3) return false; if (r==4) return true;
+                if (r == 2 || r == 3) return false; if (r == 4) return true;
             }
             if (value.length() > MAX_VALUE_LENGTH) {
                 r = warning(tr("Value is too long (max {0} characters):", MAX_VALUE_LENGTH), value, "tags.paste.valuetoolong");
-                if (r==2 || r==3) return false; if (r==4) return true;
+                if (r == 2 || r == 3) return false; if (r == 4) return true;
             }
         }
         return true;
@@ -271,16 +278,16 @@ public final class TextTagParser {
                     tr("Do you want to paste these tags?"),
                     new String[]{tr("Ok"), tr("Cancel"), tr("Clear buffer"), tr("Ignore warnings")});
         ed.setButtonIcons(new String[]{"ok", "cancel", "dialogs/delete", "pastetags"});
-        ed.setContent("<html><b>"+text + "</b><br/><br/><div width=\"300px\">"+XmlWriter.encode(data,true)+"</html>");
+        ed.setContent("<html><b>"+text + "</b><br/><br/><div width=\"300px\">"+XmlWriter.encode(data, true)+"</html>");
         ed.setDefaultButton(2);
         ed.setCancelButton(2);
         ed.setIcon(JOptionPane.WARNING_MESSAGE);
         ed.toggleEnable(code);
         ed.showDialog();
         int r = ed.getValue();
-        if (r==0) r = 2;
+        if (r == 0) r = 2;
         // clean clipboard if user asked
-        if (r==3) Utils.copyToClipboard("");
+        if (r == 3) Utils.copyToClipboard("");
         return r;
     }
 
@@ -293,7 +300,7 @@ public final class TextTagParser {
         String msg = tr("<html><p> Sorry, it is impossible to paste tags from buffer. It does not contain any JOSM object"
             + " or suitable text. </p></html>");
         JPanel p = new JPanel(new GridBagLayout());
-        p.add(new JLabel(msg),GBC.eop());
+        p.add(new JLabel(msg), GBC.eop());
         String helpUrl = HelpUtil.getHelpTopicUrl(HelpUtil.buildAbsoluteHelpTopic(helpTopic, LocaleType.DEFAULT));
         if (helpUrl != null) {
             p.add(new UrlLabel(helpUrl), GBC.eop());
@@ -315,6 +322,6 @@ public final class TextTagParser {
 
         int r = ed.getValue();
         // clean clipboard if user asked
-        if (r==2) Utils.copyToClipboard("");
+        if (r == 2) Utils.copyToClipboard("");
     }
 }
diff --git a/src/org/openstreetmap/josm/tools/Utils.java b/src/org/openstreetmap/josm/tools/Utils.java
index ec12c75..3c726d4 100644
--- a/src/org/openstreetmap/josm/tools/Utils.java
+++ b/src/org/openstreetmap/josm/tools/Utils.java
@@ -13,6 +13,7 @@ import java.awt.datatransfer.StringSelection;
 import java.awt.datatransfer.Transferable;
 import java.awt.datatransfer.UnsupportedFlavorException;
 import java.io.BufferedReader;
+import java.io.ByteArrayOutputStream;
 import java.io.Closeable;
 import java.io.File;
 import java.io.IOException;
@@ -41,8 +42,11 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Locale;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.atomic.AtomicLong;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.zip.GZIPInputStream;
@@ -58,7 +62,9 @@ import javax.xml.parsers.SAXParserFactory;
 import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Version;
+import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
 
 /**
  * Basic utils, that can be useful in different parts of the program.
@@ -78,6 +84,8 @@ public final class Utils {
 
     public static final String URL_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~:/?#[]@!$&'()*+,;=%";
 
+    private static char[] DEFAULT_STRIP = {'\u200B', '\uFEFF'};
+
     /**
      * Tests whether {@code predicate} applies to at least one elements from {@code collection}.
      */
@@ -122,7 +130,7 @@ public final class Utils {
     }
 
     public static <T> Collection<T> filter(Collection<? extends T> collection, Predicate<? super T> predicate) {
-        return new FilteredCollection<>(collection, predicate);
+        return new FilteredCollection<T>(collection, predicate);
     }
 
     /**
@@ -208,7 +216,7 @@ public final class Utils {
     public static void ensure(boolean condition, String message, Object...data) {
         if (!condition)
             throw new AssertionError(
-                    MessageFormat.format(message,data)
+                    MessageFormat.format(message, data)
             );
     }
 
@@ -243,7 +251,7 @@ public final class Utils {
                 a = "";
             }
             if (s != null) {
-                s.append(sep).append(a.toString());
+                s.append(sep).append(a);
             } else {
                 s = new StringBuilder(a.toString());
             }
@@ -415,7 +423,7 @@ public final class Utils {
      *          successfully deleted; <code>false</code> otherwise
      */
     public static boolean deleteDirectory(File path) {
-        if( path.exists() ) {
+        if (path.exists()) {
             File[] files = path.listFiles();
             if (files != null) {
                 for (File file : files) {
@@ -495,9 +503,9 @@ public final class Utils {
     public static boolean copyToClipboard(String s) {
         try {
             Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(s), new ClipboardOwner() {
-
                 @Override
                 public void lostOwnership(Clipboard clpbrd, Transferable t) {
+                    // Do nothing
                 }
             });
             return true;
@@ -508,24 +516,38 @@ public final class Utils {
     }
 
     /**
-     * Extracts clipboard content as string.
-     * @return string clipboard contents if available, {@code null} otherwise.
+     * Extracts clipboard content as {@code Transferable} object.
+     * @param clipboard clipboard from which contents are retrieved
+     * @return clipboard contents if available, {@code null} otherwise.
+     * @since 8429
      */
-    public static String getClipboardContent() {
-        Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
+    public static Transferable getTransferableContent(Clipboard clipboard) {
         Transferable t = null;
         for (int tries = 0; t == null && tries < 10; tries++) {
             try {
                 t = clipboard.getContents(null);
             } catch (IllegalStateException e) {
-                // Clipboard currently unavailable. On some platforms, the system clipboard is unavailable while it is accessed by another application.
+                // Clipboard currently unavailable.
+                // On some platforms, the system clipboard is unavailable while it is accessed by another application.
                 try {
                     Thread.sleep(1);
                 } catch (InterruptedException ex) {
                     Main.warn("InterruptedException in "+Utils.class.getSimpleName()+" while getting clipboard content");
                 }
+            } catch (NullPointerException e) {
+                // JDK-6322854: On Linux/X11, NPE can happen for unknown reasons, on all versions of Java
+                Main.error(e);
             }
         }
+        return t;
+    }
+
+    /**
+     * Extracts clipboard content as string.
+     * @return string clipboard contents if available, {@code null} otherwise.
+     */
+    public static String getClipboardContent() {
+        Transferable t = getTransferableContent(Toolkit.getDefaultToolkit().getSystemClipboard());
         try {
             if (t != null && t.isDataFlavorSupported(DataFlavor.stringFlavor)) {
                 return (String) t.getTransferData(DataFlavor.stringFlavor);
@@ -543,18 +565,18 @@ public final class Utils {
      * @return MD5 hash of data, string of length 32 with characters in range [0-9a-f]
      */
     public static String md5Hex(String data) {
-        byte[] byteData = data.getBytes(StandardCharsets.UTF_8);
         MessageDigest md = null;
         try {
             md = MessageDigest.getInstance("MD5");
         } catch (NoSuchAlgorithmException e) {
             throw new RuntimeException(e);
         }
+        byte[] byteData = data.getBytes(StandardCharsets.UTF_8);
         byte[] byteDigest = md.digest(byteData);
         return toHexString(byteDigest);
     }
 
-    private static final char[] HEX_ARRAY = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
+    private static final char[] HEX_ARRAY = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
 
     /**
      * Converts a byte array to a string of hexadecimal characters.
@@ -591,8 +613,8 @@ public final class Utils {
      * There must not be cyclic dependencies.
      * @return the list of sorted objects
      */
-    public static <T> List<T> topologicalSort(final MultiMap<T,T> dependencies) {
-        MultiMap<T,T> deps = new MultiMap<>();
+    public static <T> List<T> topologicalSort(final MultiMap<T, T> dependencies) {
+        MultiMap<T, T> deps = new MultiMap<>();
         for (T key : dependencies.keySet()) {
             deps.putVoid(key);
             for (T val : dependencies.get(key)) {
@@ -603,7 +625,7 @@ public final class Utils {
 
         int size = deps.size();
         List<T> sorted = new ArrayList<>();
-        for (int i=0; i<size; ++i) {
+        for (int i = 0; i < size; ++i) {
             T parentless = null;
             for (T key : deps.keySet()) {
                 if (deps.get(key).isEmpty()) {
@@ -623,12 +645,21 @@ public final class Utils {
     }
 
     /**
+     * Replaces some HTML reserved characters (<, > and &) by their equivalent entity (&lt;, &gt; and &amp;);
+     * @param s The unescaped string
+     * @return The escaped string
+     */
+    public static String escapeReservedCharactersHTML(String s) {
+        return s == null ? "" : s.replace("&", "&").replace("<", "<").replace(">", ">");
+    }
+
+    /**
      * Represents a function that can be applied to objects of {@code A} and
      * returns objects of {@code B}.
      * @param <A> class of input objects
      * @param <B> class of transformed objects
      */
-    public static interface Function<A, B> {
+    public interface Function<A, B> {
 
         /**
          * Applies the function on {@code x}.
@@ -819,8 +850,8 @@ public final class Utils {
     public static URLConnection setupURLConnection(URLConnection connection) {
         if (connection != null) {
             connection.setRequestProperty("User-Agent", Version.getInstance().getFullAgentString());
-            connection.setConnectTimeout(Main.pref.getInteger("socket.timeout.connect",15)*1000);
-            connection.setReadTimeout(Main.pref.getInteger("socket.timeout.read",30)*1000);
+            connection.setConnectTimeout(Main.pref.getInteger("socket.timeout.connect", 15)*1000);
+            connection.setReadTimeout(Main.pref.getInteger("socket.timeout.read", 30)*1000);
         }
         return connection;
     }
@@ -873,40 +904,106 @@ public final class Utils {
     }
 
     /**
+     * Opens a HTTP connection to given URL, sets the User-Agent property to JOSM's one, optionally disables Keep-Alive, and
+     * optionally - follows redirects. It means, that it's not possible to send custom headers with method
+     *
+     * @param httpURL The HTTP url to open (must use http:// or https://)
+     * @param keepAlive whether not to set header {@code Connection=close}
+     * @param followRedirects wheter or not to follow HTTP(S) redirects
+     * @return An open HTTP connection to the given URL
+     * @throws IOException if an I/O exception occurs
+     * @since 8650
+     */
+    public static HttpURLConnection openHttpConnection(URL httpURL, boolean keepAlive, boolean followRedirects) throws IOException {
+        HttpURLConnection connection = openHttpConnection(httpURL, keepAlive);
+        if (followRedirects) {
+            for (int i = 0; i < 5; i++) {
+                if (connection.getResponseCode() == 302) {
+                    connection = openHttpConnection(new URL(connection.getHeaderField("Location")), keepAlive);
+                } else {
+                    break;
+                }
+            }
+        }
+        return connection;
+    }
+
+    /**
      * An alternative to {@link String#trim()} to effectively remove all leading and trailing white characters, including Unicode ones.
-     * @see <a href="http://closingbraces.net/2008/11/11/javastringtrim/">Java’s String.trim has a strange idea of whitespace</a>
-     * @see <a href="https://bugs.openjdk.java.net/browse/JDK-4080617">JDK bug 4080617</a>
      * @param str The string to strip
      * @return <code>str</code>, without leading and trailing characters, according to
      *         {@link Character#isWhitespace(char)} and {@link Character#isSpaceChar(char)}.
+     * @see <a href="http://closingbraces.net/2008/11/11/javastringtrim/">Java’s String.trim has a strange idea of whitespace</a>
+     * @see <a href="https://bugs.openjdk.java.net/browse/JDK-4080617">JDK bug 4080617</a>
      * @since 5772
      */
-    public static String strip(String str) {
+    public static String strip(final String str) {
+        if (str == null || str.isEmpty()) {
+            return str;
+        }
+        return strip(str, DEFAULT_STRIP);
+    }
+
+    /**
+     * An alternative to {@link String#trim()} to effectively remove all leading and trailing white characters, including Unicode ones.
+     * @param str The string to strip
+     * @param skipChars additional characters to skip
+     * @return <code>str</code>, without leading and trailing characters, according to
+     *         {@link Character#isWhitespace(char)}, {@link Character#isSpaceChar(char)} and skipChars.
+     * @since 8435
+     */
+    public static String strip(final String str, final String skipChars) {
         if (str == null || str.isEmpty()) {
             return str;
         }
-        int start = 0, end = str.length();
-        boolean leadingWhite = true;
-        while (leadingWhite && start < end) {
+        return strip(str, stripChars(skipChars));
+    }
+
+    private static String strip(final String str, final char[] skipChars) {
+
+        int start = 0;
+        int end = str.length();
+        boolean leadingSkipChar = true;
+        while (leadingSkipChar && start < end) {
             char c = str.charAt(start);
-            // '\u200B' (ZERO WIDTH SPACE character) needs to be handled manually because of change in Unicode 6.0 (Java 7, see #8918)
-            // same for '\uFEFF' (ZERO WIDTH NO-BREAK SPACE)
-            leadingWhite = (Character.isWhitespace(c) || Character.isSpaceChar(c) || c == '\u200B' || c == '\uFEFF');
-            if (leadingWhite) {
+            leadingSkipChar = Character.isWhitespace(c) || Character.isSpaceChar(c) || stripChar(skipChars, c);
+            if (leadingSkipChar) {
                 start++;
             }
         }
-        boolean trailingWhite = true;
-        while (trailingWhite && end > start+1) {
-            char c = str.charAt(end-1);
-            trailingWhite = (Character.isWhitespace(c) || Character.isSpaceChar(c) || c == '\u200B' || c == '\uFEFF');
-            if (trailingWhite) {
+        boolean trailingSkipChar = true;
+        while (trailingSkipChar && end > start + 1) {
+            char c = str.charAt(end - 1);
+            trailingSkipChar = Character.isWhitespace(c) || Character.isSpaceChar(c) || stripChar(skipChars, c);
+            if (trailingSkipChar) {
                 end--;
             }
         }
+
         return str.substring(start, end);
     }
 
+    private static char[] stripChars(final String skipChars) {
+        if (skipChars == null || skipChars.isEmpty()) {
+            return DEFAULT_STRIP;
+        }
+
+        char[] chars = new char[DEFAULT_STRIP.length + skipChars.length()];
+        System.arraycopy(DEFAULT_STRIP, 0, chars, 0, DEFAULT_STRIP.length);
+        skipChars.getChars(0, skipChars.length(), chars, DEFAULT_STRIP.length);
+
+        return chars;
+    }
+
+    private static boolean stripChar(final char[] strip, char c) {
+        for (char s : strip) {
+            if (c == s) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     /**
      * Runs an external command and returns the standard output.
      *
@@ -928,7 +1025,7 @@ public final class Utils {
                 if (all == null) {
                     all = new StringBuilder(line);
                 } else {
-                    all.append("\n");
+                    all.append('\n');
                     all.append(line);
                 }
             }
@@ -948,7 +1045,7 @@ public final class Utils {
         }
         File josmTmpDir = new File(tmpDir, "JOSM");
         if (!josmTmpDir.exists() && !josmTmpDir.mkdirs()) {
-            Main.warn("Unable to create temp directory "+josmTmpDir);
+            Main.warn("Unable to create temp directory " + josmTmpDir);
         }
         return josmTmpDir;
     }
@@ -970,7 +1067,7 @@ public final class Utils {
         }
         // Is it less than 1 minute ?
         if (elapsedTime < MILLIS_OF_MINUTE) {
-            return String.format("%.1f %s", elapsedTime / (float) MILLIS_OF_SECOND, tr("s"));
+            return String.format("%.1f %s", elapsedTime / (double) MILLIS_OF_SECOND, tr("s"));
         }
         // Is it less than 1 hour ?
         if (elapsedTime < MILLIS_OF_HOUR) {
@@ -993,7 +1090,7 @@ public final class Utils {
      * @param positionList a list of positions
      * @return a human readable representation
      */
-    public static String getPositionListString(List<Integer> positionList)  {
+    public static String getPositionListString(List<Integer> positionList) {
         Collections.sort(positionList);
         final StringBuilder sb = new StringBuilder(32);
         sb.append(positionList.get(0));
@@ -1004,21 +1101,20 @@ public final class Utils {
             if (cur == last + 1) {
                 ++cnt;
             } else if (cnt == 0) {
-                sb.append(",").append(cur);
+                sb.append(',').append(cur);
             } else {
-                sb.append("-").append(last);
-                sb.append(",").append(cur);
+                sb.append('-').append(last);
+                sb.append(',').append(cur);
                 cnt = 0;
             }
             last = cur;
         }
         if (cnt >= 1) {
-            sb.append("-").append(last);
+            sb.append('-').append(last);
         }
         return sb.toString();
     }
 
-
     /**
      * Returns a list of capture groups if {@link Matcher#matches()}, or {@code null}.
      * The first element (index 0) is the complete match.
@@ -1100,6 +1196,25 @@ public final class Utils {
     }
 
     /**
+     * If the string {@code s} is longer than {@code maxLines} lines, the string is cut and a "..." line is appended.
+     * @param s String to shorten
+     * @param maxLines maximum number of lines to keep (including including the "..." line)
+     * @return the shortened string
+     */
+    public static String restrictStringLines(String s, int maxLines) {
+        if (s == null) {
+            return null;
+        } else {
+            final List<String> lines = Arrays.asList(s.split("\\n"));
+            if (lines.size() > maxLines) {
+                return join("\n", lines.subList(0, maxLines - 1)) + "\n" + "...";
+            } else {
+                return s;
+            }
+        }
+    }
+
+    /**
      * Fixes URL with illegal characters in the query (and fragment) part by
      * percent encoding those characters.
      *
@@ -1116,8 +1231,8 @@ public final class Utils {
 
         StringBuilder sb = new StringBuilder(url.substring(0, url.indexOf('?') + 1));
 
-        for (int i=0; i<query.length(); i++) {
-            String c = query.substring(i, i+1);
+        for (int i = 0; i < query.length(); i++) {
+            String c = query.substring(i, i + 1);
             if (URL_CHARS.contains(c)) {
                 sb.append(c);
             } else {
@@ -1181,15 +1296,36 @@ public final class Utils {
     }
 
     /**
-     * Returns a pair containing the number of threads (n), and a thread pool (if n > 1) to perform
+     * Creates a new {@link ThreadFactory} which creates threads with names according to {@code nameFormat}.
+     * @param nameFormat a {@link String#format(String, Object...)} compatible name format; its first argument is a unique thread index
+     * @param threadPriority the priority of the created threads, see {@link Thread#setPriority(int)}
+     * @return a new {@link ThreadFactory}
+     */
+    public static ThreadFactory newThreadFactory(final String nameFormat, final int threadPriority) {
+        final String ignore = String.format(Locale.ENGLISH, nameFormat, 0); // fail fast
+        return new ThreadFactory() {
+            final AtomicLong count = new AtomicLong(0);
+            @Override
+            public Thread newThread(final Runnable runnable) {
+                final Thread thread = new Thread(runnable, String.format(Locale.ENGLISH, nameFormat, count.getAndIncrement()));
+                thread.setPriority(threadPriority);
+                return thread;
+            }
+        };
+    }
+
+    /**
+     * Returns a pair containing the number of threads (n), and a thread pool (if n > 1) to perform
      * multi-thread computation in the context of the given preference key.
      * @param pref The preference key
-     * @return a pair containing the number of threads (n), and a thread pool (if n > 1, null otherwise)
+     * @param nameFormat see {@link #newThreadFactory(String, int)}
+     * @param threadPriority see {@link #newThreadFactory(String, int)}
+     * @return a pair containing the number of threads (n), and a thread pool (if n > 1, null otherwise)
      * @since 7423
      */
-    public static Pair<Integer, ExecutorService> newThreadPool(String pref) {
+    public static Pair<Integer, ExecutorService> newThreadPool(String pref, String nameFormat, int threadPriority) {
         int noThreads = Main.pref.getInteger(pref, Runtime.getRuntime().availableProcessors());
-        ExecutorService pool = noThreads <= 1 ? null : Executors.newFixedThreadPool(noThreads);
+        ExecutorService pool = noThreads <= 1 ? null : Executors.newFixedThreadPool(noThreads, newThreadFactory(nameFormat, threadPriority));
         return new Pair<>(noThreads, pool);
     }
 
@@ -1203,10 +1339,10 @@ public final class Utils {
     public static String updateSystemProperty(String key, String value) {
         if (value != null) {
             String old = System.setProperty(key, value);
-            if (!key.toLowerCase().contains("password")) {
-                Main.debug("System property '"+key+"' set to '"+value+"'. Old value was '"+old+"'");
+            if (!key.toLowerCase(Locale.ENGLISH).contains("password")) {
+                Main.debug("System property '" + key + "' set to '" + value + "'. Old value was '" + old + "'");
             } else {
-                Main.debug("System property '"+key+"' changed.");
+                Main.debug("System property '" + key + "' changed.");
             }
             return old;
         }
@@ -1226,4 +1362,118 @@ public final class Utils {
         parserFactory.setNamespaceAware(true);
         return parserFactory.newSAXParser();
     }
+
+    /**
+     * Parse the content given {@link org.xml.sax.InputSource} as XML using the specified {@link org.xml.sax.helpers.DefaultHandler}.
+     * This method uses a secure SAX parser, supporting XML namespaces.
+     *
+     * @param is The InputSource containing the content to be parsed.
+     * @param dh The SAX DefaultHandler to use.
+     * @throws ParserConfigurationException if a parser cannot be created which satisfies the requested configuration.
+     * @throws SAXException for SAX errors.
+     * @throws IOException if any IO errors occur.
+     * @since 8347
+     */
+    public static void parseSafeSAX(InputSource is, DefaultHandler dh) throws ParserConfigurationException, SAXException, IOException {
+        long start = System.currentTimeMillis();
+        if (Main.isDebugEnabled()) {
+            Main.debug("Starting SAX parsing of " + is + " using " + dh);
+        }
+        newSafeSAXParser().parse(is, dh);
+        if (Main.isDebugEnabled()) {
+            Main.debug("SAX parsing done in " + getDurationString(System.currentTimeMillis() - start));
+        }
+    }
+
+    /**
+     * Determines if the filename has one of the given extensions, in a robust manner.
+     * The comparison is case and locale insensitive.
+     * @param filename The file name
+     * @param extensions The list of extensions to look for (without dot)
+     * @return {@code true} if the filename has one of the given extensions
+     * @since 8404
+     */
+    public static boolean hasExtension(String filename, String... extensions) {
+        String name = filename.toLowerCase(Locale.ENGLISH);
+        for (String ext : extensions) {
+            if (name.endsWith("." + ext.toLowerCase(Locale.ENGLISH)))
+                return true;
+        }
+        return false;
+    }
+
+    /**
+     * Determines if the file's name has one of the given extensions, in a robust manner.
+     * The comparison is case and locale insensitive.
+     * @param file The file
+     * @param extensions The list of extensions to look for (without dot)
+     * @return {@code true} if the file's name has one of the given extensions
+     * @since 8404
+     */
+    public static boolean hasExtension(File file, String... extensions) {
+        return hasExtension(file.getName(), extensions);
+    }
+
+    /**
+     * Reads the input stream and closes the stream at the end of processing (regardless if an exception was thrown)
+     *
+     * @param stream input stream
+     * @return byte array of data in input stream
+     * @throws IOException if any I/O error occurs
+     */
+    public static byte[] readBytesFromStream(InputStream stream) throws IOException {
+        try {
+            ByteArrayOutputStream bout = new ByteArrayOutputStream(stream.available());
+            byte[] buffer = new byte[2048];
+            boolean finished = false;
+            do {
+                int read = stream.read(buffer);
+                if (read >= 0) {
+                    bout.write(buffer, 0, read);
+                } else {
+                    finished = true;
+                }
+            } while (!finished);
+            if (bout.size() == 0)
+                return null;
+            return bout.toByteArray();
+        } finally {
+            stream.close();
+        }
+    }
+
+    /**
+     * Returns the initial capacity to pass to the HashMap / HashSet constructor
+     * when it is initialized with a known number of entries.
+     *
+     * When a HashMap is filled with entries, the underlying array is copied over
+     * to a larger one multiple times. To avoid this process when the number of
+     * entries is known in advance, the initial capacity of the array can be
+     * given to the HashMap constructor. This method returns a suitable value
+     * that avoids rehashing but doesn't waste memory.
+     * @param nEntries the number of entries expected
+     * @param loadFactor the load factor
+     * @return the initial capacity for the HashMap constructor
+     */
+    public static int hashMapInitialCapacity(int nEntries, float loadFactor) {
+        return (int) Math.ceil(nEntries / loadFactor);
+    }
+
+    /**
+     * Returns the initial capacity to pass to the HashMap / HashSet constructor
+     * when it is initialized with a known number of entries.
+     *
+     * When a HashMap is filled with entries, the underlying array is copied over
+     * to a larger one multiple times. To avoid this process when the number of
+     * entries is known in advance, the initial capacity of the array can be
+     * given to the HashMap constructor. This method returns a suitable value
+     * that avoids rehashing but doesn't waste memory.
+     *
+     * Assumes default load factor (0.75).
+     * @param nEntries the number of entries expected
+     * @return the initial capacity for the HashMap constructor
+     */
+    public static int hashMapInitialCapacity(int nEntries) {
+        return hashMapInitialCapacity(nEntries, 0.75f);
+    }
 }
diff --git a/src/org/openstreetmap/josm/tools/WikiReader.java b/src/org/openstreetmap/josm/tools/WikiReader.java
index 8890ed8..6094c40 100644
--- a/src/org/openstreetmap/josm/tools/WikiReader.java
+++ b/src/org/openstreetmap/josm/tools/WikiReader.java
@@ -71,25 +71,25 @@ public class WikiReader {
         String res = "";
 
         languageCode = LanguageInfo.getWikiLanguagePrefix(LocaleType.DEFAULTNOTENGLISH);
-        if(languageCode != null) {
+        if (languageCode != null) {
             res = readLang(new URL(getBaseUrlWiki() + languageCode + text));
         }
 
-        if(res.isEmpty()) {
+        if (res.isEmpty()) {
             languageCode = LanguageInfo.getWikiLanguagePrefix(LocaleType.BASELANGUAGE);
-            if(languageCode != null) {
+            if (languageCode != null) {
                 res = readLang(new URL(getBaseUrlWiki() + languageCode + text));
             }
         }
 
-        if(res.isEmpty()) {
+        if (res.isEmpty()) {
             languageCode = LanguageInfo.getWikiLanguagePrefix(LocaleType.ENGLISH);
-            if(languageCode != null) {
+            if (languageCode != null) {
                 res = readLang(new URL(getBaseUrlWiki() + languageCode + text));
             }
         }
 
-        if(res.isEmpty()) {
+        if (res.isEmpty()) {
             throw new IOException(text + " does not exist");
         } else {
             return res;
@@ -109,7 +109,7 @@ public class WikiReader {
         StringBuilder b = new StringBuilder();
         for (String line = in.readLine(); line != null; line = in.readLine()) {
             if (!line.contains("[[TranslatedPages]]")) {
-                b.append(line.replaceAll(" />", ">")).append("\n");
+                b.append(line.replaceAll(" />", ">")).append('\n');
             }
         }
         return html ? "<html>" + b + "</html>" : b.toString();
@@ -156,7 +156,7 @@ public class WikiReader {
         if (b.indexOf("      Describe ") >= 0
         || b.indexOf(" does not exist. You can create it here.</p>") >= 0)
             return "";
-        if(b.isEmpty())
+        if (b.isEmpty())
             b = full;
         return "<html><base href=\""+url.toExternalForm() +"\"> " + b + "</html>";
     }
diff --git a/src/org/openstreetmap/josm/tools/WindowGeometry.java b/src/org/openstreetmap/josm/tools/WindowGeometry.java
index b0eb121..bd95778 100644
--- a/src/org/openstreetmap/josm/tools/WindowGeometry.java
+++ b/src/org/openstreetmap/josm/tools/WindowGeometry.java
@@ -67,12 +67,12 @@ public class WindowGeometry {
      */
     public static WindowGeometry centerInWindow(Component reference, Dimension extent) {
         Window parentWindow = null;
-        while(reference != null && ! (reference instanceof Window) ) {
+        while (reference != null && !(reference instanceof Window)) {
             reference = reference.getParent();
         }
         if (reference == null)
-            return new WindowGeometry(new Point(0,0), extent);
-        parentWindow = (Window)reference;
+            return new WindowGeometry(new Point(0, 0), extent);
+        parentWindow = (Window) reference;
         Point topLeft = new Point(
                 Math.max(0, (parentWindow.getSize().width - extent.width) /2),
                 Math.max(0, (parentWindow.getSize().height - extent.height) /2)
@@ -138,10 +138,10 @@ public class WindowGeometry {
     public void fixScreen(Window window)  {
         Rectangle oldScreen = getScreenInfo(getRectangle());
         Rectangle newScreen = getScreenInfo(new Rectangle(window.getLocationOnScreen(), window.getSize()));
-        if(oldScreen.x != newScreen.x) {
+        if (oldScreen.x != newScreen.x) {
             this.topLeft.x += newScreen.x - oldScreen.x;
         }
-        if(oldScreen.y != newScreen.y) {
+        if (oldScreen.y != newScreen.y) {
             this.topLeft.y += newScreen.y - oldScreen.y;
         }
     }
@@ -149,25 +149,34 @@ public class WindowGeometry {
     protected int parseField(String preferenceKey, String preferenceValue, String field) throws WindowGeometryException {
         String v = "";
         try {
-            Pattern p = Pattern.compile(field + "=(-?\\d+)",Pattern.CASE_INSENSITIVE);
+            Pattern p = Pattern.compile(field + "=(-?\\d+)", Pattern.CASE_INSENSITIVE);
             Matcher m = p.matcher(preferenceValue);
             if (!m.find())
-                throw new WindowGeometryException(tr("Preference with key ''{0}'' does not include ''{1}''. Cannot restore window geometry from preferences.", preferenceKey, field));
+                throw new WindowGeometryException(
+                        tr("Preference with key ''{0}'' does not include ''{1}''. Cannot restore window geometry from preferences.",
+                                preferenceKey, field));
             v = m.group(1);
             return Integer.parseInt(v);
-        } catch(WindowGeometryException e) {
+        } catch (WindowGeometryException e) {
             throw e;
-        } catch(NumberFormatException e) {
-            throw new WindowGeometryException(tr("Preference with key ''{0}'' does not provide an int value for ''{1}''. Got {2}. Cannot restore window geometry from preferences.", preferenceKey, field, v));
-        } catch(Exception e) {
-            throw new WindowGeometryException(tr("Failed to parse field ''{1}'' in preference with key ''{0}''. Exception was: {2}. Cannot restore window geometry from preferences.", preferenceKey, field, e.toString()), e);
+        } catch (NumberFormatException e) {
+            throw new WindowGeometryException(
+                    tr("Preference with key ''{0}'' does not provide an int value for ''{1}''. Got {2}. " +
+                       "Cannot restore window geometry from preferences.",
+                            preferenceKey, field, v), e);
+        } catch (Exception e) {
+            throw new WindowGeometryException(
+                    tr("Failed to parse field ''{1}'' in preference with key ''{0}''. Exception was: {2}. " +
+                       "Cannot restore window geometry from preferences.",
+                            preferenceKey, field, e.toString()), e);
         }
     }
 
     protected final void initFromPreferences(String preferenceKey) throws WindowGeometryException {
         String value = Main.pref.get(preferenceKey);
         if (value == null || value.isEmpty())
-            throw new WindowGeometryException(tr("Preference with key ''{0}'' does not exist. Cannot restore window geometry from preferences.", preferenceKey));
+            throw new WindowGeometryException(
+                    tr("Preference with key ''{0}'' does not exist. Cannot restore window geometry from preferences.", preferenceKey));
         topLeft = new Point();
         extent = new Dimension();
         topLeft.x = parseField(preferenceKey, value, "x");
@@ -186,12 +195,12 @@ public class WindowGeometry {
         if (arg != null) {
             final Matcher m = Pattern.compile("(\\d+)x(\\d+)(([+-])(\\d+)([+-])(\\d+))?").matcher(arg);
             if (m.matches()) {
-                int w = Integer.valueOf(m.group(1));
-                int h = Integer.valueOf(m.group(2));
+                int w = Integer.parseInt(m.group(1));
+                int h = Integer.parseInt(m.group(2));
                 int x = screenDimension.x, y = screenDimension.y;
                 if (m.group(3) != null) {
-                    x = Integer.valueOf(m.group(5));
-                    y = Integer.valueOf(m.group(7));
+                    x = Integer.parseInt(m.group(5));
+                    y = Integer.parseInt(m.group(7));
                     if ("-".equals(m.group(4))) {
                         x = screenDimension.x + screenDimension.width - x - w;
                     }
@@ -199,13 +208,13 @@ public class WindowGeometry {
                         y = screenDimension.y + screenDimension.height - y - h;
                     }
                 }
-                return new WindowGeometry(new Point(x,y), new Dimension(w,h));
+                return new WindowGeometry(new Point(x, y), new Dimension(w, h));
             } else {
                 Main.warn(tr("Ignoring malformed geometry: {0}", arg));
             }
         }
         WindowGeometry def;
-        if(maximize) {
+        if (maximize) {
             def = new WindowGeometry(screenDimension);
         } else {
             Point p = screenDimension.getLocation();
@@ -240,7 +249,7 @@ public class WindowGeometry {
     public WindowGeometry(String preferenceKey, WindowGeometry defaultGeometry) {
         try {
             initFromPreferences(preferenceKey);
-        } catch(WindowGeometryException e) {
+        } catch (WindowGeometryException e) {
             initFromWindowGeometry(defaultGeometry);
         }
     }
@@ -252,10 +261,8 @@ public class WindowGeometry {
      */
     public void remember(String preferenceKey) {
         StringBuilder value = new StringBuilder();
-        value.append("x=").append(topLeft.x).append(",")
-        .append("y=").append(topLeft.y).append(",")
-        .append("width=").append(extent.width).append(",")
-        .append("height=").append(extent.height);
+        value.append("x=").append(topLeft.x).append(",y=").append(topLeft.y)
+             .append(",width=").append(extent.width).append(",height=").append(extent.height);
         Main.pref.put(preferenceKey, value.toString());
     }
 
@@ -407,7 +414,7 @@ public class WindowGeometry {
     public static Rectangle getScreenInfo(String preferenceKey) {
         Rectangle g = new WindowGeometry(preferenceKey,
             /* default: something on screen 1 */
-            new WindowGeometry(new Point(0,0), new Dimension(10,10))).getRectangle();
+            new WindowGeometry(new Point(0, 0), new Dimension(10, 10))).getRectangle();
         return getScreenInfo(g);
     }
 
@@ -461,7 +468,7 @@ public class WindowGeometry {
      * @return size of the full virtual screen
      */
     public static Rectangle getFullScreenInfo() {
-        return new Rectangle(new Point(0,0), Toolkit.getDefaultToolkit().getScreenSize());
+        return new Rectangle(new Point(0, 0), Toolkit.getDefaultToolkit().getScreenSize());
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/tools/XmlObjectParser.java b/src/org/openstreetmap/josm/tools/XmlObjectParser.java
index 78712fc..d35c77c 100644
--- a/src/org/openstreetmap/josm/tools/XmlObjectParser.java
+++ b/src/org/openstreetmap/josm/tools/XmlObjectParser.java
@@ -53,7 +53,7 @@ public class XmlObjectParser implements Iterable<Object> {
         }
 
         @Override
-        public void startElement (String uri, String localName, String qName, Attributes atts) throws SAXException {
+        public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
             if ("".equals(uri)) {
                 super.startElement(namespace, localName, qName, atts);
             } else {
@@ -124,15 +124,16 @@ public class XmlObjectParser implements Iterable<Object> {
             if (klass == Boolean.TYPE)
                 return parseBoolean(value);
             else if (klass == Integer.TYPE || klass == Long.TYPE)
-                return Long.parseLong(value);
+                return Long.valueOf(value);
             else if (klass == Float.TYPE || klass == Double.TYPE)
-                return Double.parseDouble(value);
+                return Double.valueOf(value);
             return value;
         }
 
         private void setValue(Entry entry, String fieldName, String value) throws SAXException {
             CheckParameterUtil.ensureParameterNotNull(entry, "entry");
-            if ("class".equals(fieldName) || "default".equals(fieldName) || "throw".equals(fieldName) || "new".equals(fieldName) || "null".equals(fieldName)) {
+            if ("class".equals(fieldName) || "default".equals(fieldName) || "throw".equals(fieldName) ||
+                    "new".equals(fieldName) || "null".equals(fieldName)) {
                 fieldName += "_";
             }
             try {
@@ -298,21 +299,21 @@ public class XmlObjectParser implements Iterable<Object> {
             AddNamespaceFilter filter = new AddNamespaceFilter(namespace);
             filter.setContentHandler(validator);
             return start(in, filter);
-        } catch(IOException e) {
+        } catch (IOException e) {
             throw new SAXException(tr("Failed to load XML schema."), e);
         }
     }
 
     public void map(String tagName, Class<?> klass) {
-        mapping.put(tagName, new Entry(klass,false,false));
+        mapping.put(tagName, new Entry(klass, false, false));
     }
 
     public void mapOnStart(String tagName, Class<?> klass) {
-        mapping.put(tagName, new Entry(klass,true,false));
+        mapping.put(tagName, new Entry(klass, true, false));
     }
 
     public void mapBoth(String tagName, Class<?> klass) {
-        mapping.put(tagName, new Entry(klass,false,true));
+        mapping.put(tagName, new Entry(klass, false, true));
     }
 
     public Object next() {
diff --git a/src/org/openstreetmap/josm/tools/XmlParsingException.java b/src/org/openstreetmap/josm/tools/XmlParsingException.java
index b2d8ae1..8a33e64 100644
--- a/src/org/openstreetmap/josm/tools/XmlParsingException.java
+++ b/src/org/openstreetmap/josm/tools/XmlParsingException.java
@@ -60,8 +60,7 @@ public class XmlParsingException extends SAXException {
         if (msg == null) {
             msg = getClass().getName();
         }
-        msg = msg + " " + tr("(at line {0}, column {1})", lineNumber, columnNumber);
-        return msg;
+        return msg + " " + tr("(at line {0}, column {1})", lineNumber, columnNumber);
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/tools/date/DateUtils.java b/src/org/openstreetmap/josm/tools/date/DateUtils.java
index d3a4352..ba5a6fb 100644
--- a/src/org/openstreetmap/josm/tools/date/DateUtils.java
+++ b/src/org/openstreetmap/josm/tools/date/DateUtils.java
@@ -53,7 +53,7 @@ public final class DateUtils {
         DatatypeFactory fact = null;
         try {
             fact = DatatypeFactory.newInstance();
-        } catch(DatatypeConfigurationException ce) {
+        } catch (DatatypeConfigurationException ce) {
             Main.error(ce);
         }
         XML_DATE = fact;
@@ -65,6 +65,15 @@ public final class DateUtils {
      * @return The date
      */
     public static synchronized Date fromString(String str) {
+        return new Date(tsFromString(str));
+    }
+
+    /**
+     * Parses XML date quickly, regardless of current locale.
+     * @param str The XML date as string
+     * @return The date in milliseconds since epoch
+     */
+    public static synchronized long tsFromString(String str) {
         // "2007-07-25T09:26:24{Z|{+|-}01:00}"
         if (checkLayout(str, "xxxx-xx-xxTxx:xx:xxZ") ||
                 checkLayout(str, "xxxx-xx-xxTxx:xx:xx") ||
@@ -72,50 +81,68 @@ public final class DateUtils {
                 checkLayout(str, "xxxx-xx-xxTxx:xx:xx+xx:00") ||
                 checkLayout(str, "xxxx-xx-xxTxx:xx:xx-xx:00")) {
             calendar.set(
-                parsePart(str, 0, 4),
-                parsePart(str, 5, 2)-1,
-                parsePart(str, 8, 2),
-                parsePart(str, 11, 2),
-                parsePart(str, 14,2),
-                parsePart(str, 17, 2));
+                parsePart4(str, 0),
+                parsePart2(str, 5)-1,
+                parsePart2(str, 8),
+                parsePart2(str, 11),
+                parsePart2(str, 14),
+                parsePart2(str, 17));
 
             if (str.length() == 25) {
-                int plusHr = parsePart(str, 20, 2);
+                int plusHr = parsePart2(str, 20);
                 int mul = str.charAt(19) == '+' ? -3600000 : 3600000;
-                calendar.setTimeInMillis(calendar.getTimeInMillis()+plusHr*mul);
+                return calendar.getTimeInMillis()+plusHr*mul;
             }
 
-            return calendar.getTime();
-        } else if(checkLayout(str, "xxxx-xx-xxTxx:xx:xx.xxxZ") ||
+            return calendar.getTimeInMillis();
+        } else if (checkLayout(str, "xxxx-xx-xxTxx:xx:xx.xxxZ") ||
                 checkLayout(str, "xxxx-xx-xxTxx:xx:xx.xxx") ||
                 checkLayout(str, "xxxx-xx-xxTxx:xx:xx.xxx+xx:00") ||
                 checkLayout(str, "xxxx-xx-xxTxx:xx:xx.xxx-xx:00")) {
             calendar.set(
-                parsePart(str, 0, 4),
-                parsePart(str, 5, 2)-1,
-                parsePart(str, 8, 2),
-                parsePart(str, 11, 2),
-                parsePart(str, 14,2),
-                parsePart(str, 17, 2));
-            long millis = parsePart(str, 20, 3);
-            if (str.length() == 29)
-                millis += parsePart(str, 24, 2) * (str.charAt(23) == '+' ? -3600000 : 3600000);
-            calendar.setTimeInMillis(calendar.getTimeInMillis()+millis);
+                parsePart4(str, 0),
+                parsePart2(str, 5)-1,
+                parsePart2(str, 8),
+                parsePart2(str, 11),
+                parsePart2(str, 14),
+                parsePart2(str, 17));
+            long millis = parsePart3(str, 20);
+            if (str.length() == 29) {
+                millis += parsePart2(str, 24) * (str.charAt(23) == '+' ? -3600000 : 3600000);
+            }
 
-            return calendar.getTime();
+            return calendar.getTimeInMillis() + millis;
         } else {
             // example date format "18-AUG-08 13:33:03"
             SimpleDateFormat f = new SimpleDateFormat("dd-MMM-yy HH:mm:ss");
             Date d = f.parse(str, new ParsePosition(0));
-            if(d != null)
-                return d;
+            if (d != null)
+                return d.getTime();
         }
 
         try {
-            return XML_DATE.newXMLGregorianCalendar(str).toGregorianCalendar().getTime();
+            return XML_DATE.newXMLGregorianCalendar(str).toGregorianCalendar().getTimeInMillis();
         } catch (Exception ex) {
-            return new Date();
+            return System.currentTimeMillis();
+        }
+    }
+
+    private static String toXmlFormat(GregorianCalendar cal) {
+        XMLGregorianCalendar xgc = XML_DATE.newXMLGregorianCalendar(cal);
+        if (cal.get(Calendar.MILLISECOND) == 0) {
+            xgc.setFractionalSecond(null);
         }
+        return xgc.toXMLFormat();
+    }
+
+    /**
+     * Formats a date to the XML UTC format regardless of current locale.
+     * @param timestamp number of seconds since the epoch
+     * @return The formatted date
+     */
+    public static synchronized String fromTimestamp(int timestamp) {
+        calendar.setTimeInMillis(timestamp * 1000L);
+        return toXmlFormat(calendar);
     }
 
     /**
@@ -125,24 +152,34 @@ public final class DateUtils {
      */
     public static synchronized String fromDate(Date date) {
         calendar.setTime(date);
-        XMLGregorianCalendar xgc = XML_DATE.newXMLGregorianCalendar(calendar);
-        if (calendar.get(Calendar.MILLISECOND) == 0) xgc.setFractionalSecond(null);
-        return xgc.toXMLFormat();
+        return toXmlFormat(calendar);
     }
 
     private static boolean checkLayout(String text, String pattern) {
         if (text.length() != pattern.length()) return false;
-        for (int i=0; i<pattern.length(); i++) {
+        for (int i = 0; i < pattern.length(); i++) {
             char pc = pattern.charAt(i);
             char tc = text.charAt(i);
-            if(pc == 'x' && tc >= '0' && tc <= '9') continue;
-            else if(pc == 'x' || pc != tc) return false;
+            if (pc == 'x' && tc >= '0' && tc <= '9') continue;
+            else if (pc == 'x' || pc != tc) return false;
         }
         return true;
     }
 
-    private static int parsePart(String str, int off, int len) {
-        return Integer.parseInt(str.substring(off, off+len));
+    private static int num(char c) {
+        return c - '0';
+    }
+
+    private static int parsePart2(String str, int off) {
+        return 10 * num(str.charAt(off)) + num(str.charAt(off + 1));
+    }
+
+    private static int parsePart3(String str, int off) {
+        return 100 * num(str.charAt(off)) + 10 * num(str.charAt(off + 1)) + num(str.charAt(off + 2));
+    }
+
+    private static int parsePart4(String str, int off) {
+        return 1000 * num(str.charAt(off)) + 100 * num(str.charAt(off + 1)) + 10 * num(str.charAt(off + 2)) + num(str.charAt(off + 3));
     }
 
     /**
@@ -150,7 +187,7 @@ public final class DateUtils {
      * @return a new ISO 8601 date format, for date only.
      * @since 7299
      */
-    public static final SimpleDateFormat newIsoDateFormat() {
+    public static SimpleDateFormat newIsoDateFormat() {
         return new SimpleDateFormat("yyyy-MM-dd");
     }
 
@@ -159,7 +196,7 @@ public final class DateUtils {
      * @return a new ISO 8601 date format, for date and time.
      * @since 7299
      */
-    public static final SimpleDateFormat newIsoDateTimeFormat() {
+    public static SimpleDateFormat newIsoDateTimeFormat() {
         return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX");
     }
 
@@ -168,7 +205,7 @@ public final class DateUtils {
      * @return a new date format, for date and time, to use for OSM API error handling.
      * @since 7299
      */
-    public static final SimpleDateFormat newOsmApiDateTimeFormat() {
+    public static SimpleDateFormat newOsmApiDateTimeFormat() {
         // Example: "2010-09-07 14:39:41 UTC".
         // Always parsed with US locale regardless of the current locale in JOSM
         return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z", Locale.US);
@@ -180,7 +217,7 @@ public final class DateUtils {
      * @return The date format
      * @since 7299
      */
-    public static final DateFormat getDateFormat(int dateStyle) {
+    public static DateFormat getDateFormat(int dateStyle) {
         if (PROP_ISO_DATES.get()) {
             return newIsoDateFormat();
         } else {
@@ -195,7 +232,7 @@ public final class DateUtils {
      * @return The formatted date
      * @since 7299
      */
-    public static final String formatDate(Date date, int dateStyle) {
+    public static String formatDate(Date date, int dateStyle) {
         CheckParameterUtil.ensureParameterNotNull(date, "date");
         return getDateFormat(dateStyle).format(date);
     }
@@ -206,7 +243,7 @@ public final class DateUtils {
      * @return The time format
      * @since 7299
      */
-    public static final DateFormat getTimeFormat(int timeStyle) {
+    public static DateFormat getTimeFormat(int timeStyle) {
         if (PROP_ISO_DATES.get()) {
             // This is not strictly conform to ISO 8601. We just want to avoid US-style times such as 3.30pm
             return new SimpleDateFormat("HH:mm:ss");
@@ -221,7 +258,7 @@ public final class DateUtils {
      * @return The formatted time
      * @since 7299
      */
-    public static final String formatTime(Date time, int timeStyle) {
+    public static String formatTime(Date time, int timeStyle) {
         CheckParameterUtil.ensureParameterNotNull(time, "time");
         return getTimeFormat(timeStyle).format(time);
     }
@@ -233,7 +270,7 @@ public final class DateUtils {
      * @return The date/time format
      * @since 7299
      */
-    public static final DateFormat getDateTimeFormat(int dateStyle, int timeStyle) {
+    public static DateFormat getDateTimeFormat(int dateStyle, int timeStyle) {
         if (PROP_ISO_DATES.get()) {
             // This is not strictly conform to ISO 8601. We just want to avoid US-style times such as 3.30pm
             // and we don't want to use the 'T' separator as a space character is much more readable
@@ -251,7 +288,7 @@ public final class DateUtils {
      * @return The formatted date/time
      * @since 7299
      */
-    public static final String formatDateTime(Date datetime, int dateStyle, int timeStyle) {
+    public static String formatDateTime(Date datetime, int dateStyle, int timeStyle) {
         CheckParameterUtil.ensureParameterNotNull(datetime, "datetime");
         return getDateTimeFormat(dateStyle, timeStyle).format(datetime);
     }
diff --git a/src/org/openstreetmap/josm/tools/date/FallbackDateParser.java b/src/org/openstreetmap/josm/tools/date/FallbackDateParser.java
index 527d4f5..afc50f0 100644
--- a/src/org/openstreetmap/josm/tools/date/FallbackDateParser.java
+++ b/src/org/openstreetmap/josm/tools/date/FallbackDateParser.java
@@ -8,6 +8,8 @@ import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
+import org.openstreetmap.josm.Main;
+
 /**
  * Handles a number of different date formats encountered in OSM. This is built
  * based on similar code in JOSM. This class is not threadsafe, a separate
@@ -100,6 +102,9 @@ class FallbackDateParser {
 
             } catch (ParseException pe) {
                 // Ignore parsing errors and try the next pattern.
+                if (Main.isTraceEnabled()) {
+                    Main.trace(pe.getMessage());
+                }
             }
         }
 
diff --git a/src/org/openstreetmap/josm/tools/date/PrimaryDateParser.java b/src/org/openstreetmap/josm/tools/date/PrimaryDateParser.java
index d7b9ae7..1a005bc 100644
--- a/src/org/openstreetmap/josm/tools/date/PrimaryDateParser.java
+++ b/src/org/openstreetmap/josm/tools/date/PrimaryDateParser.java
@@ -182,19 +182,12 @@ public class PrimaryDateParser {
     }
 
     private Date parseShortStandardDate(String date) {
-        int year;
-        int month;
-        int day;
-        int hour;
-        int minute;
-        int second;
-
-        year = Integer.parseInt(date.substring(0, 4));
-        month = Integer.parseInt(date.substring(5, 7));
-        day = Integer.parseInt(date.substring(8, 10));
-        hour = Integer.parseInt(date.substring(11, 13));
-        minute = Integer.parseInt(date.substring(14, 16));
-        second = Integer.parseInt(date.substring(17, 19));
+        int year = Integer.parseInt(date.substring(0, 4));
+        int month = Integer.parseInt(date.substring(5, 7));
+        int day = Integer.parseInt(date.substring(8, 10));
+        int hour = Integer.parseInt(date.substring(11, 13));
+        int minute = Integer.parseInt(date.substring(14, 16));
+        int second = Integer.parseInt(date.substring(17, 19));
 
         calendar.clear();
         calendar.set(Calendar.YEAR, year);
@@ -208,21 +201,13 @@ public class PrimaryDateParser {
     }
 
     private Date parseLongStandardDate(String date) {
-        int year;
-        int month;
-        int day;
-        int hour;
-        int minute;
-        int second;
-        int millisecond;
-
-        year = Integer.parseInt(date.substring(0, 4));
-        month = Integer.parseInt(date.substring(5, 7));
-        day = Integer.parseInt(date.substring(8, 10));
-        hour = Integer.parseInt(date.substring(11, 13));
-        minute = Integer.parseInt(date.substring(14, 16));
-        second = Integer.parseInt(date.substring(17, 19));
-        millisecond = Integer.parseInt(date.substring(20, 23));
+        int year = Integer.parseInt(date.substring(0, 4));
+        int month = Integer.parseInt(date.substring(5, 7));
+        int day = Integer.parseInt(date.substring(8, 10));
+        int hour = Integer.parseInt(date.substring(11, 13));
+        int minute = Integer.parseInt(date.substring(14, 16));
+        int second = Integer.parseInt(date.substring(17, 19));
+        int millisecond = Integer.parseInt(date.substring(20, 23));
 
         calendar.clear();
         calendar.set(Calendar.YEAR, year);
diff --git a/src/org/openstreetmap/josm/tools/template_engine/CompoundTemplateEntry.java b/src/org/openstreetmap/josm/tools/template_engine/CompoundTemplateEntry.java
index 45d5d66..5ed22f9 100644
--- a/src/org/openstreetmap/josm/tools/template_engine/CompoundTemplateEntry.java
+++ b/src/org/openstreetmap/josm/tools/template_engine/CompoundTemplateEntry.java
@@ -35,15 +35,12 @@ public final class CompoundTemplateEntry implements TemplateEntry {
         return true;
     }
 
-
     @Override
     public String toString() {
         StringBuilder result = new StringBuilder();
         for (TemplateEntry te: entries) {
-            result.append(te.toString());
+            result.append(te);
         }
         return result.toString();
     }
-
-
 }
diff --git a/src/org/openstreetmap/josm/tools/template_engine/Condition.java b/src/org/openstreetmap/josm/tools/template_engine/Condition.java
index a9a36a0..ce985b7 100644
--- a/src/org/openstreetmap/josm/tools/template_engine/Condition.java
+++ b/src/org/openstreetmap/josm/tools/template_engine/Condition.java
@@ -44,13 +44,11 @@ public class Condition implements TemplateEntry {
         sb.append("?{");
         for (TemplateEntry entry: entries) {
             if (entry instanceof SearchExpressionCondition) {
-                sb.append(entry.toString());
+                sb.append(entry);
             } else {
-                sb.append("'");
-                sb.append(entry.toString());
-                sb.append("'");
+                sb.append('\'').append(entry).append('\'');
             }
-            sb.append("|");
+            sb.append('|');
         }
         return sb.toString();
     }
diff --git a/src/org/openstreetmap/josm/tools/template_engine/ContextSwitchTemplate.java b/src/org/openstreetmap/josm/tools/template_engine/ContextSwitchTemplate.java
index 297bfd8..4372b65 100644
--- a/src/org/openstreetmap/josm/tools/template_engine/ContextSwitchTemplate.java
+++ b/src/org/openstreetmap/josm/tools/template_engine/ContextSwitchTemplate.java
@@ -41,6 +41,7 @@ public class ContextSwitchTemplate implements TemplateEntry {
 
     private abstract class ContextProvider extends Match {
         protected Match condition;
+
         abstract List<OsmPrimitive> getPrimitives(OsmPrimitive root);
     }
 
@@ -50,10 +51,12 @@ public class ContextSwitchTemplate implements TemplateEntry {
         ParentSet(Match child) {
             this.childCondition = child;
         }
+
         @Override
         public boolean match(OsmPrimitive osm) {
             throw new UnsupportedOperationException();
         }
+
         @Override
         List<OsmPrimitive> getPrimitives(OsmPrimitive root) {
             List<OsmPrimitive> children;
@@ -193,7 +196,7 @@ public class ContextSwitchTemplate implements TemplateEntry {
             Match rhs = transform(((And) m).getRhs(), searchExpressionPosition);
 
             if (lhs instanceof ContextProvider && rhs instanceof ContextProvider)
-                return new AndSet((ContextProvider)lhs, (ContextProvider)rhs);
+                return new AndSet((ContextProvider) lhs, (ContextProvider) rhs);
             else if (lhs instanceof ContextProvider) {
                 ContextProvider cp = (ContextProvider) lhs;
                 if (cp.condition == null) {
@@ -217,17 +220,23 @@ public class ContextSwitchTemplate implements TemplateEntry {
             Match rhs = transform(((Or) m).getRhs(), searchExpressionPosition);
 
             if (lhs instanceof ContextProvider && rhs instanceof ContextProvider)
-                return new OrSet((ContextProvider)lhs, (ContextProvider)rhs);
+                return new OrSet((ContextProvider) lhs, (ContextProvider) rhs);
             else if (lhs instanceof ContextProvider)
-                throw new ParseError(tr("Error in search expression on position {0} - right side of or(|) expression must return set of primitives", searchExpressionPosition));
+                throw new ParseError(
+                        tr("Error in search expression on position {0} - right side of or(|) expression must return set of primitives",
+                                searchExpressionPosition));
             else if (rhs instanceof ContextProvider)
-                throw new ParseError(tr("Error in search expression on position {0} - left side of or(|) expression must return set of primitives", searchExpressionPosition));
+                throw new ParseError(
+                        tr("Error in search expression on position {0} - left side of or(|) expression must return set of primitives",
+                                searchExpressionPosition));
             else
                 return m;
         } else if (m instanceof Not) {
             Match match = transform(((Not) m).getMatch(), searchExpressionPosition);
             if (match instanceof ContextProvider)
-                throw new ParseError(tr("Error in search expression on position {0} - not(-) cannot be used in this context", searchExpressionPosition));
+                throw new ParseError(
+                        tr("Error in search expression on position {0} - not(-) cannot be used in this context",
+                                searchExpressionPosition));
             else
                 return m;
         } else
@@ -237,7 +246,9 @@ public class ContextSwitchTemplate implements TemplateEntry {
     public ContextSwitchTemplate(Match match, TemplateEntry template, int searchExpressionPosition) throws ParseError {
         Match m = transform(match, searchExpressionPosition);
         if (!(m instanceof ContextProvider))
-            throw new ParseError(tr("Error in search expression on position {0} - expression must return different then current primitive", searchExpressionPosition));
+            throw new ParseError(
+                    tr("Error in search expression on position {0} - expression must return different then current primitive",
+                            searchExpressionPosition));
         else {
             context = (ContextProvider) m;
         }
diff --git a/src/org/openstreetmap/josm/tools/template_engine/ParseError.java b/src/org/openstreetmap/josm/tools/template_engine/ParseError.java
index bb5036e..a01c48a 100644
--- a/src/org/openstreetmap/josm/tools/template_engine/ParseError.java
+++ b/src/org/openstreetmap/josm/tools/template_engine/ParseError.java
@@ -16,7 +16,8 @@ public class ParseError extends Exception {
     }
 
     public ParseError(Token unexpectedToken, TokenType expected) {
-        super(tr("Unexpected token on position {0}. Expected {1}, found {2}", unexpectedToken.getPosition(), expected, unexpectedToken.getType()));
+        super(tr("Unexpected token on position {0}. Expected {1}, found {2}",
+                unexpectedToken.getPosition(), expected, unexpectedToken.getType()));
         this.unexpectedToken = unexpectedToken;
     }
 
diff --git a/src/org/openstreetmap/josm/tools/template_engine/SearchExpressionCondition.java b/src/org/openstreetmap/josm/tools/template_engine/SearchExpressionCondition.java
index d40a812..091c5e4 100644
--- a/src/org/openstreetmap/josm/tools/template_engine/SearchExpressionCondition.java
+++ b/src/org/openstreetmap/josm/tools/template_engine/SearchExpressionCondition.java
@@ -25,7 +25,6 @@ public class SearchExpressionCondition implements TemplateEntry {
 
     @Override
     public String toString() {
-        return condition.toString() + " '" + text.toString() + "'";
+        return condition.toString() + " '" + text + "'";
     }
-
 }
diff --git a/src/org/openstreetmap/josm/tools/template_engine/TemplateEngineDataProvider.java b/src/org/openstreetmap/josm/tools/template_engine/TemplateEngineDataProvider.java
index ef8e233..1fdb2b1 100644
--- a/src/org/openstreetmap/josm/tools/template_engine/TemplateEngineDataProvider.java
+++ b/src/org/openstreetmap/josm/tools/template_engine/TemplateEngineDataProvider.java
@@ -7,6 +7,8 @@ import org.openstreetmap.josm.actions.search.SearchCompiler.Match;
 
 public interface TemplateEngineDataProvider {
     Collection<String> getTemplateKeys();
+
     Object getTemplateValue(String name, boolean special);
+
     boolean evaluateCondition(Match condition);
 }
diff --git a/src/org/openstreetmap/josm/tools/template_engine/TemplateEntry.java b/src/org/openstreetmap/josm/tools/template_engine/TemplateEntry.java
index 9659ac9..f2a4a6d 100644
--- a/src/org/openstreetmap/josm/tools/template_engine/TemplateEntry.java
+++ b/src/org/openstreetmap/josm/tools/template_engine/TemplateEntry.java
@@ -3,5 +3,6 @@ package org.openstreetmap.josm.tools.template_engine;
 
 public interface TemplateEntry {
     void appendText(StringBuilder result, TemplateEngineDataProvider dataProvider);
+
     boolean isValid(TemplateEngineDataProvider dataProvider);
 }
diff --git a/src/org/openstreetmap/josm/tools/template_engine/TemplateParser.java b/src/org/openstreetmap/josm/tools/template_engine/TemplateParser.java
index 7da5bd0..eada0b3 100644
--- a/src/org/openstreetmap/josm/tools/template_engine/TemplateParser.java
+++ b/src/org/openstreetmap/josm/tools/template_engine/TemplateParser.java
@@ -88,7 +88,8 @@ public class TemplateParser {
                 result.getEntries().add(condition);
             } else {
                 try {
-                    result.getEntries().add(new SearchExpressionCondition(SearchCompiler.compile(searchExpression.getText(), false, false), condition));
+                    result.getEntries().add(new SearchExpressionCondition(
+                            SearchCompiler.compile(searchExpression.getText(), false, false), condition));
                 } catch (org.openstreetmap.josm.actions.search.SearchCompiler.ParseError e) {
                     throw new ParseError(searchExpression.getPosition(), e);
                 }
diff --git a/src/org/openstreetmap/josm/tools/template_engine/Tokenizer.java b/src/org/openstreetmap/josm/tools/template_engine/Tokenizer.java
index ed941ce..e8bcca2 100644
--- a/src/org/openstreetmap/josm/tools/template_engine/Tokenizer.java
+++ b/src/org/openstreetmap/josm/tools/template_engine/Tokenizer.java
@@ -35,7 +35,7 @@ public class Tokenizer {
 
         @Override
         public String toString() {
-            return type + (text != null?" " + text:"");
+            return type + (text != null ? " " + text : "");
         }
     }
 
@@ -84,14 +84,14 @@ public class Tokenizer {
                 getChar();
                 return new Token(TokenType.CONDITION_START, position);
             } else
-                throw ParseError.unexpectedChar('{', (char)c, position);
+                throw ParseError.unexpectedChar('{', (char) c, position);
         case '!':
             getChar();
             if (c == '{') {
                 getChar();
                 return new Token(TokenType.CONTEXT_SWITCH_START, position);
             } else
-                throw ParseError.unexpectedChar('{', (char)c, position);
+                throw ParseError.unexpectedChar('{', (char) c, position);
         case '}':
             getChar();
             return new Token(TokenType.END, position);
@@ -102,14 +102,14 @@ public class Tokenizer {
             getChar();
             return new Token(TokenType.APOSTROPHE, position);
         default:
-            while (c != -1 && !specialCharaters.contains((char)c)) {
+            while (c != -1 && !specialCharaters.contains((char) c)) {
                 if (c == '\\') {
                     getChar();
                     if (c == 'n') {
                         c = '\n';
                     }
                 }
-                text.append((char)c);
+                text.append((char) c);
                 getChar();
             }
             return new Token(TokenType.TEXT, position, text.toString());
@@ -131,10 +131,9 @@ public class Tokenizer {
             if (c == '\\') {
                 getChar();
             }
-            result.append((char)c);
+            result.append((char) c);
             getChar();
         }
         return new Token(TokenType.TEXT, position, result.toString());
     }
-
 }
diff --git a/src/org/openstreetmap/josm/tools/template_engine/Variable.java b/src/org/openstreetmap/josm/tools/template_engine/Variable.java
index 91eb962..9dbf61b 100644
--- a/src/org/openstreetmap/josm/tools/template_engine/Variable.java
+++ b/src/org/openstreetmap/josm/tools/template_engine/Variable.java
@@ -2,6 +2,7 @@
 package org.openstreetmap.josm.tools.template_engine;
 
 import java.util.Collection;
+import java.util.Locale;
 
 public class Variable implements TemplateEntry {
 
@@ -13,10 +14,10 @@ public class Variable implements TemplateEntry {
     private final boolean special;
 
     public Variable(String variableName) {
-        if (variableName.toLowerCase().startsWith(SPECIAL_VARIABLE_PREFIX)) {
+        if (variableName.toLowerCase(Locale.ENGLISH).startsWith(SPECIAL_VARIABLE_PREFIX)) {
             this.variableName = variableName.substring(SPECIAL_VARIABLE_PREFIX.length());
             // special:special:key means that real key named special:key is needed, not special variable
-            this.special = !this.variableName.toLowerCase().startsWith(SPECIAL_VARIABLE_PREFIX);
+            this.special = !this.variableName.toLowerCase(Locale.ENGLISH).startsWith(SPECIAL_VARIABLE_PREFIX);
         } else {
             this.variableName = variableName;
             this.special = false;
@@ -34,7 +35,7 @@ public class Variable implements TemplateEntry {
                 } else {
                     first = false;
                 }
-                result.append(key).append("=").append(dataProvider.getTemplateValue(key, false));
+                result.append(key).append('=').append(dataProvider.getTemplateValue(key, false));
             }
         } else {
             Object value = dataProvider.getTemplateValue(variableName, special);
diff --git a/styles/standard/elemstyles.mapcss b/styles/standard/elemstyles.mapcss
index 44b46b5..90af371 100644
--- a/styles/standard/elemstyles.mapcss
+++ b/styles/standard/elemstyles.mapcss
@@ -351,7 +351,6 @@ way[barrier=bollard] {
 }
 node[barrier=bollard] {
     icon-image: "presets/bollard.png";
-    icon-width: 16;
     set icon_z17;
     text: auto;
 }
@@ -374,6 +373,11 @@ way[barrier=kerb] {
     width: 2;
     color: barrier#F0F050;
 }
+way[barrier=retaining_wall],
+way[barrier=kerb] {
+    repeat-image: "misc/cliff-pattern.png";
+    repeat-image-align: top;
+}
 node[barrier=hedge],
 node[barrier=wall],
 node[barrier=guard_rail],
@@ -656,6 +660,11 @@ node[highway=traffic_mirror] {
     set icon_z17;
     text: auto;
 }
+node[highway=milestone] {
+    icon-image: "vehicle/milestone.svg";
+    set icon_z17;
+    text: auto;
+}
 node[direction=clockwise] {
     icon-image: "vehicle/restriction/roundabout_left.png";
     set icon_z17;
@@ -777,7 +786,7 @@ node[highway=rest_area] {
     text: auto;
 }
 node[highway=ford], node[ford?] {
-    icon-image: "vehicle/ford.png";
+    icon-image: "misc/ford.svg";
     set icon_z17;
     text: auto;
 }
@@ -869,13 +878,17 @@ node[traffic_calming] {
     text: auto;
 }
 node[traffic_calming=chicane] {
-    icon-image: "vehicle/chicane.png";
+    icon-image: "vehicle/chicane.svg";
     set icon_z17;
     text: auto;
 }
-node[traffic_calming=choker],
-node[traffic_calming=cushion] {
-    icon-image: "vehicle/passing_place.png";
+node[traffic_calming=choker] {
+    icon-image: "vehicle/chocker.svg";
+    set icon_z17;
+    text: auto;
+}
+node[traffic_calming=island] {
+    icon-image: "vehicle/island.svg";
     set icon_z17;
     text: auto;
 }
@@ -1429,7 +1442,7 @@ node[man_made=watermill] {
     text: auto;
 }
 node[man_made=water_tower] {
-    icon-image: "misc/landmark/water_tower.png";
+    icon-image: "misc/landmark/water_tower.svg";
     set icon_z17;
     text: auto;
 }
@@ -1631,7 +1644,7 @@ node[leisure=dog_park] {
     text: auto;
 }
 node[leisure=ice_rink] {
-    icon-image: "sport/hockey.png";
+    icon-image: "sport/ice_hockey.png";
     set icon_z17;
     text: auto;
 }
@@ -1744,7 +1757,7 @@ area[shop=bag] {
     fill-color: shop#00005f;
 }
 node[shop=supermarket] {
-    icon-image: "shop/supermarket.png";
+    icon-image: "shop/supermarket.svg";
     set icon_z17;
     text: auto;
 }
@@ -1966,12 +1979,12 @@ node[shop=musical_instrument] {
     text: auto;
 }
 node[shop=newsagent] {
-    icon-image: "shop/kiosk.png";
+    icon-image: "shop/news.svg";
     set icon_z17;
     text: auto;
 }
 node[shop=optician] {
-    icon-image: "shop/optician.png";
+    icon-image: "shop/optician.svg";
     set icon_z17;
     text: auto;
 }
@@ -2151,6 +2164,7 @@ area[amenity=pub],
 area[amenity=biergarten],
 area[amenity=nightclub],
 area[amenity=stripclub],
+area[amenity=casino],
 area[amenity=brothel],
 area[amenity=cafe],
 area[amenity=restaurant],
@@ -2180,6 +2194,11 @@ node[amenity=stripclub] {
     set icon_z17;
     text: auto;
 }
+node[amenity=casino] {
+    icon-image: "leisure/casino.svg";
+    set icon_z17;
+    text: auto;
+}
 node[amenity=brothel] {
     icon-image: "leisure/stripclub.png";
     set icon_z17;
@@ -2190,7 +2209,11 @@ node[amenity=cafe] {
     set icon_z17;
     text: auto;
 }
-node[amenity=restaurant],
+node[amenity=restaurant] {
+    icon-image: "food/restaurant.svg";
+    set icon_z17;
+    text: auto;
+}
 node[amenity=food_court] {
     icon-image: "food/restaurant.png";
     set icon_z17;
@@ -2211,10 +2234,16 @@ node[amenity=ice_cream] {
     set icon_z17;
     text: auto;
 }
+area[amenity=bicycle_parking]:closed {
+    fill-color: amenity_traffic#f7efb7;
+}
+way[amenity=bicycle_parking] {
+    width: 2;
+    color: amenity_traffic#f7efb7;
+}
 area[amenity=parking_space],
 area[amenity=parking],
 area[amenity=motorcycle_parking],
-area[amenity=bicycle_parking],
 area[amenity=bicycle_rental],
 area[amenity=bicycle_repair_station],
 area[amenity=car_rental],
@@ -2322,7 +2351,7 @@ node[amenity=telephone] {
     text: auto;
 }
 node[amenity=clock] {
-    icon-image: "service/clock.png";
+    icon-image: "service/clock.svg";
     set icon_z17;
     text: auto;
 }
@@ -2353,10 +2382,16 @@ node[amenity=shower] {
     text: auto; 
 }
 node[amenity=recycling] {
-    icon-image: "service/recycling.png";
+    icon-image: "service/recycling/recycling.svg";
     set icon_z17;
     text: auto;
 }
+node[amenity=recycling][recycling_type=container] {
+    icon-image: "service/recycling/recycling_container.svg";
+}
+node[amenity=recycling][recycling_type=centre] {
+    icon-image: "service/recycling/recycling_centre.svg";
+}
 node[amenity=waste_basket] {
     icon-image: "service/recycling/trash-bin.png";
     set icon_z17;
@@ -2663,12 +2698,12 @@ node[amenity=arts_centre] {
     text: auto;
 }
 node[amenity=courthouse] {
-    icon-image: "service/administration/court_of_law.png";
+    icon-image: "service/administration/courthouse.svg";
     set icon_z17;
     text: auto;
 }
 node[amenity=prison] {
-    icon-image: "service/administration/prison.png";
+    icon-image: "service/administration/prison.svg";
     set icon_z17;
     text: auto;
 }
@@ -2819,12 +2854,12 @@ area[tourism=caravan_site] {
     fill-color: hotel#e1a0a2;
 }
 node[tourism=hotel] {
-    icon-image: "accommodation.png";
+    icon-image: "accommodation/hotel.svg";
     set icon_z17;
     text: auto;
 }
 node[tourism=motel] {
-    icon-image: "accommodation/motel.png";
+    icon-image: "accommodation/motel.svg";
     set icon_z17;
     text: auto;
 }
@@ -2834,7 +2869,7 @@ node[tourism=guest_house] {
     text: auto;
 }
 node[tourism=hostel] {
-    icon-image: "accommodation/hostel.png";
+    icon-image: "accommodation/hostel.svg";
     set icon_z17;
     text: auto;
 }
@@ -2868,7 +2903,6 @@ area[tourism=viewpoint],
 area[tourism=theme_park],
 area[tourism=attraction],
 area[tourism=zoo],
-area[tourism=artwork],
 area[tourism=museum] {
     fill-color: tourism#e180a2;
 }
@@ -2897,6 +2931,9 @@ node[tourism=zoo] {
     set icon_z17;
     text: auto;
 }
+area[tourism=artwork]:closed {
+    fill-color: tourism#e180a2;
+}
 way[tourism=artwork] {
     width: 2;
     color: tourism#e180a2;
@@ -2907,7 +2944,7 @@ node[tourism=artwork] {
     text: auto;
 }
 node[tourism=museum] {
-    icon-image: "sightseeing/museum.png";
+    icon-image: "sightseeing/museum.svg";
     set icon_z17;
     text: auto;
 }
@@ -3359,6 +3396,11 @@ node[railway=switch] {
     set icon_z17;
     text: auto;
 }
+node[railway=milestone] {
+    icon-image: "vehicle/milestone.svg";
+    set icon_z17;
+    text: auto;
+}
 node[railway=rail], node[railway=tram], node[railway=light_rail],
 node[railway=subway], node[railway=preserved],
 node[railway=disused], node[railway=abandoned],
@@ -3550,6 +3592,7 @@ node[aerialway=goods] {
 area[sport="9pin"],
 area[sport="10pin"],
 area[sport=athletics],
+area[sport=running],
 area[sport=soccer],
 area[sport=australian_football],
 area[sport=american_football],
@@ -3574,6 +3617,11 @@ node[sport=athletics] {
     set icon_z17;
     text: auto;
 }
+node[sport=running] {
+    icon-image: "sport/running.svg";
+    set icon_z17;
+    text: auto;
+}
 node[sport=soccer],
 node[sport=gaelic_games] {
     icon-image: "sport/soccer.png";
@@ -3597,7 +3645,6 @@ area[sport=canoe],
 area[sport=chess],
 area[sport=climbing]:closed,
 area[sport=cricket],
-area[sport=cricket_nets],
 area[sport=croquet] {
     fill-color: sport#bde3cb;
 }
@@ -3641,11 +3688,6 @@ node[sport=cricket] {
     set icon_z17;
     text: auto;
 }
-node[sport=cricket_nets] {
-    icon-image: "sport/cricket.png";
-    set icon_z17;
-    text: auto;
-}
 node[sport=croquet] {
     icon-image: "sport/croquet.png";
     set icon_z17;
@@ -3656,7 +3698,8 @@ area[sport=dog_racing],
 area[sport=equestrian],
 area[sport=golf],
 area[sport=gymnastics],
-area[sport=hockey],
+area[sport=field_hockey],
+area[sport=ice_hockey],
 area[sport=horse_racing],
 area[sport=karting][highway!=raceway],
 area[sport=karting][highway=raceway][area=yes],
@@ -3693,8 +3736,13 @@ node[sport=gymnastics] {
     set icon_z17;
     text: auto;
 }
-node[sport=hockey] {
-    icon-image: "sport/hockey.png";
+node[sport=field_hockey] {
+    icon-image: "sport/field_hockey.png";
+    set icon_z17;
+    text: auto;
+}
+node[sport=ice_hockey] {
+    icon-image: "sport/ice_hockey.png";
     set icon_z17;
     text: auto;
 }
@@ -3782,6 +3830,7 @@ area[sport=squash],
 area[sport=shooting],
 area[sport=volleyball],
 area[sport=beachvolleyball],
+area[sport=billiards],
 area[sport=bowling],
 area[sport=handball],
 area[sport=rowing],
@@ -3811,6 +3860,11 @@ node[sport=beachvolleyball] {
     set icon_z17;
     text: auto;
 }
+node[sport=billiards] {
+    icon-image: "sport/billiards.svg";
+    set icon_z17;
+    text: auto;
+}
 node[sport=bowling] {
     icon-image: "sport/10pin.png";
     set icon_z17;
@@ -3843,7 +3897,6 @@ node[sport=badminton] {
 }
 area[sport=archery],
 area[sport=fishing],
-area[sport=safety_training],
 area[sport=model_aerodrome],
 area[sport=rc_car] {
     fill-color: sport#bde3cb;
@@ -3858,11 +3911,6 @@ node[sport=fishing] {
     set icon_z17;
     text: auto;
 }
-node[sport=safety_training] {
-    icon-image: "sport/safety_training.png";
-    set icon_z17;
-    text: auto;
-}
 node[sport=model_aerodrome] {
     icon-image: "transport/airport.png";
     set icon_z17;
@@ -3970,8 +4018,11 @@ area[natural=water] {
     fill-color: water#0000ff;
 }
 way[natural=coastline] {
-    width: 1;
+    width: 2;
     color: water#0000ff;
+    right-casing-color: water#0000ff;
+    right-casing-width: 5;
+    right-casing-opacity: 0.30; 
 }
 area[natural=mud] {
     fill-color: mud#cba762;
@@ -4121,6 +4172,15 @@ node[mooring] {
     set icon_z17;
     text: auto;
 }
+area[waterway=fuel] {
+    fill-color: amenity_traffic#f7efb7;
+}
+node[waterway=fuel] {
+    icon-image: "nautical/marine_fuel.png";
+    icon-width: 16;
+    set icon_z17;
+    text: auto;
+}
 way[waterway=weir] {
     width: 2;
     color: manmade#d8d8d8;
diff --git a/test/data/regress/11548/tiles/1/1/1.png b/test/data/regress/11548/tiles/1/1/1.png
new file mode 100644
index 0000000..69be7c8
Binary files /dev/null and b/test/data/regress/11548/tiles/1/1/1.png differ
diff --git a/test/data/regress/11548/tiles/2/1/1.png b/test/data/regress/11548/tiles/2/1/1.png
new file mode 100644
index 0000000..65d07d5
Binary files /dev/null and b/test/data/regress/11548/tiles/2/1/1.png differ
diff --git a/test/data/regress/11548/tiles/2/1/2.png b/test/data/regress/11548/tiles/2/1/2.png
new file mode 100644
index 0000000..a49af99
Binary files /dev/null and b/test/data/regress/11548/tiles/2/1/2.png differ
diff --git a/test/data/regress/11548/tiles/2/1/3.png b/test/data/regress/11548/tiles/2/1/3.png
new file mode 100644
index 0000000..1eaec06
Binary files /dev/null and b/test/data/regress/11548/tiles/2/1/3.png differ
diff --git a/test/data/regress/11548/tiles/2/2/1.png b/test/data/regress/11548/tiles/2/2/1.png
new file mode 100644
index 0000000..bc8a717
Binary files /dev/null and b/test/data/regress/11548/tiles/2/2/1.png differ
diff --git a/test/data/regress/11548/tiles/2/2/2.png b/test/data/regress/11548/tiles/2/2/2.png
new file mode 100644
index 0000000..a2d4c89
Binary files /dev/null and b/test/data/regress/11548/tiles/2/2/2.png differ
diff --git a/test/data/regress/11548/tiles/2/2/3.png b/test/data/regress/11548/tiles/2/2/3.png
new file mode 100644
index 0000000..207eb3a
Binary files /dev/null and b/test/data/regress/11548/tiles/2/2/3.png differ
diff --git a/test/data/regress/11548/tiles/2/3/1.png b/test/data/regress/11548/tiles/2/3/1.png
new file mode 100644
index 0000000..633b279
Binary files /dev/null and b/test/data/regress/11548/tiles/2/3/1.png differ
diff --git a/test/data/regress/11548/tiles/2/3/2.png b/test/data/regress/11548/tiles/2/3/2.png
new file mode 100644
index 0000000..bf8501f
Binary files /dev/null and b/test/data/regress/11548/tiles/2/3/2.png differ
diff --git a/test/data/regress/11548/tiles/2/3/3.png b/test/data/regress/11548/tiles/2/3/3.png
new file mode 100644
index 0000000..951ab55
Binary files /dev/null and b/test/data/regress/11548/tiles/2/3/3.png differ
diff --git a/test/data/regress/11548/tiles/3/1/1.png b/test/data/regress/11548/tiles/3/1/1.png
new file mode 100644
index 0000000..a7b86d2
Binary files /dev/null and b/test/data/regress/11548/tiles/3/1/1.png differ
diff --git a/test/data/regress/11548/tiles/3/1/2.png b/test/data/regress/11548/tiles/3/1/2.png
new file mode 100644
index 0000000..16ae94f
Binary files /dev/null and b/test/data/regress/11548/tiles/3/1/2.png differ
diff --git a/test/data/regress/11548/tiles/3/1/3.png b/test/data/regress/11548/tiles/3/1/3.png
new file mode 100644
index 0000000..706a5c6
Binary files /dev/null and b/test/data/regress/11548/tiles/3/1/3.png differ
diff --git a/test/data/regress/11548/tiles/3/1/4.png b/test/data/regress/11548/tiles/3/1/4.png
new file mode 100644
index 0000000..5dbffc2
Binary files /dev/null and b/test/data/regress/11548/tiles/3/1/4.png differ
diff --git a/test/data/regress/11548/tiles/3/1/5.png b/test/data/regress/11548/tiles/3/1/5.png
new file mode 100644
index 0000000..7325b04
Binary files /dev/null and b/test/data/regress/11548/tiles/3/1/5.png differ
diff --git a/test/data/regress/11548/tiles/3/1/6.png b/test/data/regress/11548/tiles/3/1/6.png
new file mode 100644
index 0000000..f867316
Binary files /dev/null and b/test/data/regress/11548/tiles/3/1/6.png differ
diff --git a/test/data/regress/11548/tiles/3/1/7.png b/test/data/regress/11548/tiles/3/1/7.png
new file mode 100644
index 0000000..ba57365
Binary files /dev/null and b/test/data/regress/11548/tiles/3/1/7.png differ
diff --git a/test/data/regress/11548/tiles/3/2/1.png b/test/data/regress/11548/tiles/3/2/1.png
new file mode 100644
index 0000000..5586dd9
Binary files /dev/null and b/test/data/regress/11548/tiles/3/2/1.png differ
diff --git a/test/data/regress/11548/tiles/3/2/2.png b/test/data/regress/11548/tiles/3/2/2.png
new file mode 100644
index 0000000..e572360
Binary files /dev/null and b/test/data/regress/11548/tiles/3/2/2.png differ
diff --git a/test/data/regress/11548/tiles/3/2/3.png b/test/data/regress/11548/tiles/3/2/3.png
new file mode 100644
index 0000000..789ffb5
Binary files /dev/null and b/test/data/regress/11548/tiles/3/2/3.png differ
diff --git a/test/data/regress/11548/tiles/3/2/4.png b/test/data/regress/11548/tiles/3/2/4.png
new file mode 100644
index 0000000..6b8e0f2
Binary files /dev/null and b/test/data/regress/11548/tiles/3/2/4.png differ
diff --git a/test/data/regress/11548/tiles/3/2/5.png b/test/data/regress/11548/tiles/3/2/5.png
new file mode 100644
index 0000000..21821e0
Binary files /dev/null and b/test/data/regress/11548/tiles/3/2/5.png differ
diff --git a/test/data/regress/11548/tiles/3/2/6.png b/test/data/regress/11548/tiles/3/2/6.png
new file mode 100644
index 0000000..e27a659
Binary files /dev/null and b/test/data/regress/11548/tiles/3/2/6.png differ
diff --git a/test/data/regress/11548/tiles/3/2/7.png b/test/data/regress/11548/tiles/3/2/7.png
new file mode 100644
index 0000000..ba57365
Binary files /dev/null and b/test/data/regress/11548/tiles/3/2/7.png differ
diff --git a/test/data/regress/11548/tiles/3/3/1.png b/test/data/regress/11548/tiles/3/3/1.png
new file mode 100644
index 0000000..8ce35ee
Binary files /dev/null and b/test/data/regress/11548/tiles/3/3/1.png differ
diff --git a/test/data/regress/11548/tiles/3/3/2.png b/test/data/regress/11548/tiles/3/3/2.png
new file mode 100644
index 0000000..4acc5b6
Binary files /dev/null and b/test/data/regress/11548/tiles/3/3/2.png differ
diff --git a/test/data/regress/11548/tiles/3/3/3.png b/test/data/regress/11548/tiles/3/3/3.png
new file mode 100644
index 0000000..98fb34b
Binary files /dev/null and b/test/data/regress/11548/tiles/3/3/3.png differ
diff --git a/test/data/regress/11548/tiles/3/3/4.png b/test/data/regress/11548/tiles/3/3/4.png
new file mode 100644
index 0000000..aca1950
Binary files /dev/null and b/test/data/regress/11548/tiles/3/3/4.png differ
diff --git a/test/data/regress/11548/tiles/3/3/5.png b/test/data/regress/11548/tiles/3/3/5.png
new file mode 100644
index 0000000..f5ed2b5
Binary files /dev/null and b/test/data/regress/11548/tiles/3/3/5.png differ
diff --git a/test/data/regress/11548/tiles/3/3/6.png b/test/data/regress/11548/tiles/3/3/6.png
new file mode 100644
index 0000000..5e92aad
Binary files /dev/null and b/test/data/regress/11548/tiles/3/3/6.png differ
diff --git a/test/data/regress/11548/tiles/3/3/7.png b/test/data/regress/11548/tiles/3/3/7.png
new file mode 100644
index 0000000..ba57365
Binary files /dev/null and b/test/data/regress/11548/tiles/3/3/7.png differ
diff --git a/test/data/regress/11548/tiles/3/4/1.png b/test/data/regress/11548/tiles/3/4/1.png
new file mode 100644
index 0000000..5adc8ba
Binary files /dev/null and b/test/data/regress/11548/tiles/3/4/1.png differ
diff --git a/test/data/regress/11548/tiles/3/4/2.png b/test/data/regress/11548/tiles/3/4/2.png
new file mode 100644
index 0000000..26a2f66
Binary files /dev/null and b/test/data/regress/11548/tiles/3/4/2.png differ
diff --git a/test/data/regress/11548/tiles/3/4/3.png b/test/data/regress/11548/tiles/3/4/3.png
new file mode 100644
index 0000000..2573e8b
Binary files /dev/null and b/test/data/regress/11548/tiles/3/4/3.png differ
diff --git a/test/data/regress/11548/tiles/3/4/4.png b/test/data/regress/11548/tiles/3/4/4.png
new file mode 100644
index 0000000..6721e4e
Binary files /dev/null and b/test/data/regress/11548/tiles/3/4/4.png differ
diff --git a/test/data/regress/11548/tiles/3/4/5.png b/test/data/regress/11548/tiles/3/4/5.png
new file mode 100644
index 0000000..15a0546
Binary files /dev/null and b/test/data/regress/11548/tiles/3/4/5.png differ
diff --git a/test/data/regress/11548/tiles/3/4/6.png b/test/data/regress/11548/tiles/3/4/6.png
new file mode 100644
index 0000000..4176d5d
Binary files /dev/null and b/test/data/regress/11548/tiles/3/4/6.png differ
diff --git a/test/data/regress/11548/tiles/3/4/7.png b/test/data/regress/11548/tiles/3/4/7.png
new file mode 100644
index 0000000..ba57365
Binary files /dev/null and b/test/data/regress/11548/tiles/3/4/7.png differ
diff --git a/test/data/regress/11548/tiles/3/5/1.png b/test/data/regress/11548/tiles/3/5/1.png
new file mode 100644
index 0000000..c016223
Binary files /dev/null and b/test/data/regress/11548/tiles/3/5/1.png differ
diff --git a/test/data/regress/11548/tiles/3/5/2.png b/test/data/regress/11548/tiles/3/5/2.png
new file mode 100644
index 0000000..0a89cc9
Binary files /dev/null and b/test/data/regress/11548/tiles/3/5/2.png differ
diff --git a/test/data/regress/11548/tiles/3/5/3.png b/test/data/regress/11548/tiles/3/5/3.png
new file mode 100644
index 0000000..e70a2af
Binary files /dev/null and b/test/data/regress/11548/tiles/3/5/3.png differ
diff --git a/test/data/regress/11548/tiles/3/5/4.png b/test/data/regress/11548/tiles/3/5/4.png
new file mode 100644
index 0000000..5314094
Binary files /dev/null and b/test/data/regress/11548/tiles/3/5/4.png differ
diff --git a/test/data/regress/11548/tiles/3/5/5.png b/test/data/regress/11548/tiles/3/5/5.png
new file mode 100644
index 0000000..d6f6803
Binary files /dev/null and b/test/data/regress/11548/tiles/3/5/5.png differ
diff --git a/test/data/regress/11548/tiles/3/5/6.png b/test/data/regress/11548/tiles/3/5/6.png
new file mode 100644
index 0000000..1f108d3
Binary files /dev/null and b/test/data/regress/11548/tiles/3/5/6.png differ
diff --git a/test/data/regress/11548/tiles/3/5/7.png b/test/data/regress/11548/tiles/3/5/7.png
new file mode 100644
index 0000000..ba57365
Binary files /dev/null and b/test/data/regress/11548/tiles/3/5/7.png differ
diff --git a/test/data/regress/11548/tiles/3/6/1.png b/test/data/regress/11548/tiles/3/6/1.png
new file mode 100644
index 0000000..facfef6
Binary files /dev/null and b/test/data/regress/11548/tiles/3/6/1.png differ
diff --git a/test/data/regress/11548/tiles/3/6/2.png b/test/data/regress/11548/tiles/3/6/2.png
new file mode 100644
index 0000000..a29a667
Binary files /dev/null and b/test/data/regress/11548/tiles/3/6/2.png differ
diff --git a/test/data/regress/11548/tiles/3/6/3.png b/test/data/regress/11548/tiles/3/6/3.png
new file mode 100644
index 0000000..c2f08a2
Binary files /dev/null and b/test/data/regress/11548/tiles/3/6/3.png differ
diff --git a/test/data/regress/11548/tiles/3/6/4.png b/test/data/regress/11548/tiles/3/6/4.png
new file mode 100644
index 0000000..0872a55
Binary files /dev/null and b/test/data/regress/11548/tiles/3/6/4.png differ
diff --git a/test/data/regress/11548/tiles/3/6/5.png b/test/data/regress/11548/tiles/3/6/5.png
new file mode 100644
index 0000000..2168e53
Binary files /dev/null and b/test/data/regress/11548/tiles/3/6/5.png differ
diff --git a/test/data/regress/11548/tiles/3/6/6.png b/test/data/regress/11548/tiles/3/6/6.png
new file mode 100644
index 0000000..70a32c9
Binary files /dev/null and b/test/data/regress/11548/tiles/3/6/6.png differ
diff --git a/test/data/regress/11548/tiles/3/6/7.png b/test/data/regress/11548/tiles/3/6/7.png
new file mode 100644
index 0000000..ba57365
Binary files /dev/null and b/test/data/regress/11548/tiles/3/6/7.png differ
diff --git a/test/data/regress/11548/tiles/3/7/1.png b/test/data/regress/11548/tiles/3/7/1.png
new file mode 100644
index 0000000..a60f774
Binary files /dev/null and b/test/data/regress/11548/tiles/3/7/1.png differ
diff --git a/test/data/regress/11548/tiles/3/7/2.png b/test/data/regress/11548/tiles/3/7/2.png
new file mode 100644
index 0000000..9d4d430
Binary files /dev/null and b/test/data/regress/11548/tiles/3/7/2.png differ
diff --git a/test/data/regress/11548/tiles/3/7/3.png b/test/data/regress/11548/tiles/3/7/3.png
new file mode 100644
index 0000000..669ca1c
Binary files /dev/null and b/test/data/regress/11548/tiles/3/7/3.png differ
diff --git a/test/data/regress/11548/tiles/3/7/4.png b/test/data/regress/11548/tiles/3/7/4.png
new file mode 100644
index 0000000..b111af8
Binary files /dev/null and b/test/data/regress/11548/tiles/3/7/4.png differ
diff --git a/test/data/regress/11548/tiles/3/7/5.png b/test/data/regress/11548/tiles/3/7/5.png
new file mode 100644
index 0000000..a63b42b
Binary files /dev/null and b/test/data/regress/11548/tiles/3/7/5.png differ
diff --git a/test/data/regress/11548/tiles/3/7/6.png b/test/data/regress/11548/tiles/3/7/6.png
new file mode 100644
index 0000000..132825d
Binary files /dev/null and b/test/data/regress/11548/tiles/3/7/6.png differ
diff --git a/test/data/regress/11548/tiles/3/7/7.png b/test/data/regress/11548/tiles/3/7/7.png
new file mode 100644
index 0000000..ba57365
Binary files /dev/null and b/test/data/regress/11548/tiles/3/7/7.png differ
diff --git a/test/data/wmts/WMTSCapabilities-Ontario.xml b/test/data/wmts/WMTSCapabilities-Ontario.xml
new file mode 100644
index 0000000..2cc4bfa
--- /dev/null
+++ b/test/data/wmts/WMTSCapabilities-Ontario.xml
@@ -0,0 +1,457 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Capabilities xmlns="http://www.opengis.net/wmts/1.0" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:gml="http://www.opengis.net/gml" xsi:schemaLocation="http://www.opengis.net/wmts/1.0 http://schemas.opengis.net/wmts/1.0/wmtsGetCapabilities_response.xsd" version="1.0.0">
+  <!-- Service Identification --> 
+ <ows:ServiceIdentification>
+	<ows:Title>Basemap_Imagery_2014</ows:Title>
+	<ows:ServiceType>OGC WMTS</ows:ServiceType>
+	<ows:ServiceTypeVersion>1.0.0</ows:ServiceTypeVersion>
+</ows:ServiceIdentification> <!-- Operations Metadata --> <ows:OperationsMetadata>
+	<ows:Operation name="GetCapabilities">
+		<ows:DCP>
+			<ows:HTTP>
+				<ows:Get xlink:href="http://maps.ottawa.ca/arcgis/rest/services/Basemap_Imagery_2014/MapServer/WMTS/1.0.0/WMTSCapabilities.xml">
+					<ows:Constraint name="GetEncoding">
+						<ows:AllowedValues>
+							<ows:Value>RESTful</ows:Value>
+						</ows:AllowedValues>
+					</ows:Constraint>
+				</ows:Get>
+                <!-- add KVP binding in 10.1 -->
+                <ows:Get xlink:href="http://maps.ottawa.ca/arcgis/rest/services/Basemap_Imagery_2014/MapServer/WMTS?">
+                  <ows:Constraint name="GetEncoding">
+                    <ows:AllowedValues>
+                      <ows:Value>KVP</ows:Value>
+                    </ows:AllowedValues>
+                  </ows:Constraint>
+                </ows:Get>
+    		</ows:HTTP>
+    </ows:DCP>
+	</ows:Operation>
+	<ows:Operation name="GetTile">
+		<ows:DCP>
+			<ows:HTTP>
+				<ows:Get xlink:href="http://maps.ottawa.ca/arcgis/rest/services/Basemap_Imagery_2014/MapServer/WMTS/tile/1.0.0/">
+					<ows:Constraint name="GetEncoding">
+						<ows:AllowedValues>
+							<ows:Value>RESTful</ows:Value>
+						</ows:AllowedValues>
+					</ows:Constraint>
+				</ows:Get>
+                <ows:Get xlink:href="http://maps.ottawa.ca/arcgis/rest/services/Basemap_Imagery_2014/MapServer/WMTS?">
+                  <ows:Constraint name="GetEncoding">
+                    <ows:AllowedValues>
+                      <ows:Value>KVP</ows:Value>
+                    </ows:AllowedValues>
+                  </ows:Constraint>
+                </ows:Get>
+            </ows:HTTP>
+		</ows:DCP>
+	</ows:Operation>
+</ows:OperationsMetadata> 
+<Contents>
+  <!--Layer-->  
+  <Layer>
+    <ows:Title>Basemap_Imagery_2014</ows:Title> 
+    <ows:Identifier>Basemap_Imagery_2014</ows:Identifier>
+    
+      <ows:BoundingBox crs="urn:ogc:def:crs:EPSG::3857">
+	  
+			<ows:LowerCorner>-8507199.652697453 5606950.534040266</ows:LowerCorner>
+			<ows:UpperCorner>-8367322.830222864 5713437.426857653</ows:UpperCorner>
+		
+      </ows:BoundingBox>  
+      
+    <ows:WGS84BoundingBox crs="urn:ogc:def:crs:OGC:2:84">
+      <ows:LowerCorner>-76.42147473074407 44.907369851539244</ows:LowerCorner>
+      <ows:UpperCorner>-75.1649398555141 45.580879803959924</ows:UpperCorner>
+    </ows:WGS84BoundingBox>
+    <Style isDefault="true">
+      <ows:Title>Default Style</ows:Title>
+      <ows:Identifier>default</ows:Identifier>
+    </Style>
+    <Format>image/jpg</Format>
+    <TileMatrixSetLink>
+      <TileMatrixSet>default028mm</TileMatrixSet>
+    </TileMatrixSetLink>
+
+      
+        <TileMatrixSetLink>
+          <!--Only show this TileMatrixSet if the tiling scheme is compliant to Google Maps (and that happens with tile width = 256 px)-->
+          <TileMatrixSet>GoogleMapsCompatible</TileMatrixSet>
+        </TileMatrixSetLink>
+        
+    <ResourceURL format="image/jpg" resourceType="tile" template="http://maps.ottawa.ca/arcgis/rest/services/Basemap_Imagery_2014/MapServer/WMTS/tile/1.0.0/Basemap_Imagery_2014/{Style}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.jpg"/>
+  </Layer> 
+   <!--TileMatrixSet-->
+   <TileMatrixSet>
+     <ows:Title>TileMatrix using 0.28mm</ows:Title>
+     <ows:Abstract>The tile matrix set that has scale values calculated based on the dpi defined by OGC specification (dpi assumes 0.28mm as the physical distance of a pixel).</ows:Abstract> 
+     <ows:Identifier>default028mm</ows:Identifier>
+     <ows:SupportedCRS>urn:ogc:def:crs:EPSG::3857</ows:SupportedCRS>
+      
+          <TileMatrix>
+          <ows:Identifier>0</ows:Identifier>
+          
+          <ScaleDenominator>1091957.5469304253</ScaleDenominator>
+          
+          <TopLeftCorner>-2.0037508342787E7 2.0037508342787E7</TopLeftCorner>  
+          <TileWidth>256</TileWidth> 
+          <TileHeight>256</TileHeight>
+            
+            <MatrixWidth>150</MatrixWidth> 
+            <MatrixHeight>185</MatrixHeight>
+          
+          </TileMatrix>
+          
+          <TileMatrix>
+          <ows:Identifier>1</ows:Identifier>
+          
+          <ScaleDenominator>545978.7734656851</ScaleDenominator>
+          
+          <TopLeftCorner>-2.0037508342787E7 2.0037508342787E7</TopLeftCorner>  
+          <TileWidth>256</TileWidth> 
+          <TileHeight>256</TileHeight>
+            
+            <MatrixWidth>299</MatrixWidth> 
+            <MatrixHeight>369</MatrixHeight>
+          
+          </TileMatrix>
+          
+          <TileMatrix>
+          <ows:Identifier>2</ows:Identifier>
+          
+          <ScaleDenominator>272989.38673237007</ScaleDenominator>
+          
+          <TopLeftCorner>-2.0037508342787E7 2.0037508342787E7</TopLeftCorner>  
+          <TileWidth>256</TileWidth> 
+          <TileHeight>256</TileHeight>
+            
+            <MatrixWidth>597</MatrixWidth> 
+            <MatrixHeight>738</MatrixHeight>
+          
+          </TileMatrix>
+          
+          <TileMatrix>
+          <ows:Identifier>3</ows:Identifier>
+          
+          <ScaleDenominator>136494.69336618503</ScaleDenominator>
+          
+          <TopLeftCorner>-2.0037508342787E7 2.0037508342787E7</TopLeftCorner>  
+          <TileWidth>256</TileWidth> 
+          <TileHeight>256</TileHeight>
+            
+            <MatrixWidth>1193</MatrixWidth> 
+            <MatrixHeight>1475</MatrixHeight>
+          
+          </TileMatrix>
+          
+          <TileMatrix>
+          <ows:Identifier>4</ows:Identifier>
+          
+          <ScaleDenominator>68247.34668309252</ScaleDenominator>
+          
+          <TopLeftCorner>-2.0037508342787E7 2.0037508342787E7</TopLeftCorner>  
+          <TileWidth>256</TileWidth> 
+          <TileHeight>256</TileHeight>
+            
+            <MatrixWidth>2386</MatrixWidth> 
+            <MatrixHeight>2950</MatrixHeight>
+          
+          </TileMatrix>
+          
+          <TileMatrix>
+          <ows:Identifier>5</ows:Identifier>
+          
+          <ScaleDenominator>34123.67334154626</ScaleDenominator>
+          
+          <TopLeftCorner>-2.0037508342787E7 2.0037508342787E7</TopLeftCorner>  
+          <TileWidth>256</TileWidth> 
+          <TileHeight>256</TileHeight>
+            
+            <MatrixWidth>4772</MatrixWidth> 
+            <MatrixHeight>5900</MatrixHeight>
+          
+          </TileMatrix>
+          
+          <TileMatrix>
+          <ows:Identifier>6</ows:Identifier>
+          
+          <ScaleDenominator>17061.836671245605</ScaleDenominator>
+          
+          <TopLeftCorner>-2.0037508342787E7 2.0037508342787E7</TopLeftCorner>  
+          <TileWidth>256</TileWidth> 
+          <TileHeight>256</TileHeight>
+            
+            <MatrixWidth>9543</MatrixWidth> 
+            <MatrixHeight>11800</MatrixHeight>
+          
+          </TileMatrix>
+          
+          <TileMatrix>
+          <ows:Identifier>7</ows:Identifier>
+          
+          <ScaleDenominator>8530.918335622802</ScaleDenominator>
+          
+          <TopLeftCorner>-2.0037508342787E7 2.0037508342787E7</TopLeftCorner>  
+          <TileWidth>256</TileWidth> 
+          <TileHeight>256</TileHeight>
+            
+            <MatrixWidth>19085</MatrixWidth> 
+            <MatrixHeight>23599</MatrixHeight>
+          
+          </TileMatrix>
+          
+          <TileMatrix>
+          <ows:Identifier>8</ows:Identifier>
+          
+          <ScaleDenominator>4265.459167338929</ScaleDenominator>
+          
+          <TopLeftCorner>-2.0037508342787E7 2.0037508342787E7</TopLeftCorner>  
+          <TileWidth>256</TileWidth> 
+          <TileHeight>256</TileHeight>
+            
+            <MatrixWidth>38170</MatrixWidth> 
+            <MatrixHeight>47198</MatrixHeight>
+          
+          </TileMatrix>
+          
+          <TileMatrix>
+          <ows:Identifier>9</ows:Identifier>
+          
+          <ScaleDenominator>2132.729584141936</ScaleDenominator>
+          
+          <TopLeftCorner>-2.0037508342787E7 2.0037508342787E7</TopLeftCorner>  
+          <TileWidth>256</TileWidth> 
+          <TileHeight>256</TileHeight>
+            
+            <MatrixWidth>76339</MatrixWidth> 
+            <MatrixHeight>94396</MatrixHeight>
+          
+          </TileMatrix>
+          
+          <TileMatrix>
+          <ows:Identifier>10</ows:Identifier>
+          
+          <ScaleDenominator>1066.3647915984968</ScaleDenominator>
+          
+          <TopLeftCorner>-2.0037508342787E7 2.0037508342787E7</TopLeftCorner>  
+          <TileWidth>256</TileWidth> 
+          <TileHeight>256</TileHeight>
+            
+            <MatrixWidth>152678</MatrixWidth> 
+            <MatrixHeight>188791</MatrixHeight>
+          
+          </TileMatrix>
+          
+          <TileMatrix>
+          <ows:Identifier>11</ows:Identifier>
+          
+          <ScaleDenominator>533.1823957992484</ScaleDenominator>
+          
+          <TopLeftCorner>-2.0037508342787E7 2.0037508342787E7</TopLeftCorner>  
+          <TileWidth>256</TileWidth> 
+          <TileHeight>256</TileHeight>
+            
+            <MatrixWidth>305355</MatrixWidth> 
+            <MatrixHeight>377581</MatrixHeight>
+          
+          </TileMatrix>
+          
+          <TileMatrix>
+          <ows:Identifier>12</ows:Identifier>
+          
+          <ScaleDenominator>266.5911978996242</ScaleDenominator>
+          
+          <TopLeftCorner>-2.0037508342787E7 2.0037508342787E7</TopLeftCorner>  
+          <TileWidth>256</TileWidth> 
+          <TileHeight>256</TileHeight>
+            
+            <MatrixWidth>610709</MatrixWidth> 
+            <MatrixHeight>755161</MatrixHeight>
+          
+          </TileMatrix>
+          
+   </TileMatrixSet>
+   
+   <TileMatrixSet>
+      <ows:Title>GoogleMapsCompatible</ows:Title>
+      <ows:Abstract>the wellknown 'GoogleMapsCompatible' tile matrix set defined by OGC WMTS specification</ows:Abstract>
+      <ows:Identifier>GoogleMapsCompatible</ows:Identifier>
+      <ows:SupportedCRS>urn:ogc:def:crs:EPSG:6.18.3:3857</ows:SupportedCRS>
+      <WellKnownScaleSet>urn:ogc:def:wkss:OGC:1.0:GoogleMapsCompatible</WellKnownScaleSet>
+      <TileMatrix>
+        <ows:Identifier>0</ows:Identifier>
+        <ScaleDenominator>559082264.0287178</ScaleDenominator>
+        <TopLeftCorner>-20037508.34278925 20037508.34278925</TopLeftCorner>
+        <TileWidth>256</TileWidth>
+        <TileHeight>256</TileHeight>
+        <MatrixWidth>1</MatrixWidth>
+        <MatrixHeight>1</MatrixHeight>
+      </TileMatrix>
+      <TileMatrix>
+        <ows:Identifier>1</ows:Identifier>
+        <ScaleDenominator>279541132.0143589</ScaleDenominator>
+        <TopLeftCorner>-20037508.34278925 20037508.34278925</TopLeftCorner>
+        <TileWidth>256</TileWidth>
+        <TileHeight>256</TileHeight>
+        <MatrixWidth>2</MatrixWidth>
+        <MatrixHeight>2</MatrixHeight>
+      </TileMatrix>
+      <TileMatrix>
+        <ows:Identifier>2</ows:Identifier>
+        <ScaleDenominator>139770566.0071794</ScaleDenominator>
+        <TopLeftCorner>-20037508.34278925 20037508.34278925</TopLeftCorner>
+        <TileWidth>256</TileWidth>
+        <TileHeight>256</TileHeight>
+        <MatrixWidth>4</MatrixWidth>
+        <MatrixHeight>4</MatrixHeight>
+      </TileMatrix>
+      <TileMatrix>
+        <ows:Identifier>3</ows:Identifier>
+        <ScaleDenominator>69885283.00358972</ScaleDenominator>
+        <TopLeftCorner>-20037508.34278925 20037508.34278925</TopLeftCorner>
+        <TileWidth>256</TileWidth>
+        <TileHeight>256</TileHeight>
+        <MatrixWidth>8</MatrixWidth>
+        <MatrixHeight>8</MatrixHeight>
+      </TileMatrix>
+      <TileMatrix>
+        <ows:Identifier>4</ows:Identifier>
+        <ScaleDenominator>34942641.50179486</ScaleDenominator>
+        <TopLeftCorner>-20037508.34278925 20037508.34278925</TopLeftCorner>
+        <TileWidth>256</TileWidth>
+        <TileHeight>256</TileHeight>
+        <MatrixWidth>16</MatrixWidth>
+        <MatrixHeight>16</MatrixHeight>
+      </TileMatrix>
+      <TileMatrix>
+        <ows:Identifier>5</ows:Identifier>
+        <ScaleDenominator>17471320.75089743</ScaleDenominator>
+        <TopLeftCorner>-20037508.34278925 20037508.34278925</TopLeftCorner>
+        <TileWidth>256</TileWidth>
+        <TileHeight>256</TileHeight>
+        <MatrixWidth>32</MatrixWidth>
+        <MatrixHeight>32</MatrixHeight>
+      </TileMatrix>
+      <TileMatrix>
+        <ows:Identifier>6</ows:Identifier>
+        <ScaleDenominator>8735660.375448715</ScaleDenominator>
+        <TopLeftCorner>-20037508.34278925 20037508.34278925</TopLeftCorner>
+        <TileWidth>256</TileWidth>
+        <TileHeight>256</TileHeight>
+        <MatrixWidth>64</MatrixWidth>
+        <MatrixHeight>64</MatrixHeight>
+      </TileMatrix>
+      <TileMatrix>
+        <ows:Identifier>7</ows:Identifier>
+        <ScaleDenominator>4367830.187724357</ScaleDenominator>
+        <TopLeftCorner>-20037508.34278925 20037508.34278925</TopLeftCorner>
+        <TileWidth>256</TileWidth>
+        <TileHeight>256</TileHeight>
+        <MatrixWidth>128</MatrixWidth>
+        <MatrixHeight>128</MatrixHeight>
+      </TileMatrix>
+      <TileMatrix>
+        <ows:Identifier>8</ows:Identifier>
+        <ScaleDenominator>2183915.093862179</ScaleDenominator>
+        <TopLeftCorner>-20037508.34278925 20037508.34278925</TopLeftCorner>
+        <TileWidth>256</TileWidth>
+        <TileHeight>256</TileHeight>
+        <MatrixWidth>256</MatrixWidth>
+        <MatrixHeight>256</MatrixHeight>
+      </TileMatrix>
+      <TileMatrix>
+        <ows:Identifier>9</ows:Identifier>
+        <ScaleDenominator>1091957.546931089</ScaleDenominator>
+        <TopLeftCorner>-20037508.34278925 20037508.34278925</TopLeftCorner>
+        <TileWidth>256</TileWidth>
+        <TileHeight>256</TileHeight>
+        <MatrixWidth>512</MatrixWidth>
+        <MatrixHeight>512</MatrixHeight>
+      </TileMatrix>
+      <TileMatrix>
+        <ows:Identifier>10</ows:Identifier>
+        <ScaleDenominator>545978.7734655447</ScaleDenominator>
+        <TopLeftCorner>-20037508.34278925 20037508.34278925</TopLeftCorner>
+        <TileWidth>256</TileWidth>
+        <TileHeight>256</TileHeight>
+        <MatrixWidth>1024</MatrixWidth>
+        <MatrixHeight>1024</MatrixHeight>
+      </TileMatrix>
+      <TileMatrix>
+        <ows:Identifier>11</ows:Identifier>
+        <ScaleDenominator>272989.3867327723</ScaleDenominator>
+        <TopLeftCorner>-20037508.34278925 20037508.34278925</TopLeftCorner>
+        <TileWidth>256</TileWidth>
+        <TileHeight>256</TileHeight>
+        <MatrixWidth>2048</MatrixWidth>
+        <MatrixHeight>2048</MatrixHeight>
+      </TileMatrix>
+      <TileMatrix>
+        <ows:Identifier>12</ows:Identifier>
+        <ScaleDenominator>136494.6933663862</ScaleDenominator>
+        <TopLeftCorner>-20037508.34278925 20037508.34278925</TopLeftCorner>
+        <TileWidth>256</TileWidth>
+        <TileHeight>256</TileHeight>
+        <MatrixWidth>4096</MatrixWidth>
+        <MatrixHeight>4096</MatrixHeight>
+      </TileMatrix>
+      <TileMatrix>
+        <ows:Identifier>13</ows:Identifier>
+        <ScaleDenominator>68247.34668319309</ScaleDenominator>
+        <TopLeftCorner>-20037508.34278925 20037508.34278925</TopLeftCorner>
+        <TileWidth>256</TileWidth>
+        <TileHeight>256</TileHeight>
+        <MatrixWidth>8192</MatrixWidth>
+        <MatrixHeight>8192</MatrixHeight>
+      </TileMatrix>
+      <TileMatrix>
+        <ows:Identifier>14</ows:Identifier>
+        <ScaleDenominator>34123.67334159654</ScaleDenominator>
+        <TopLeftCorner>-20037508.34278925 20037508.34278925</TopLeftCorner>
+        <TileWidth>256</TileWidth>
+        <TileHeight>256</TileHeight>
+        <MatrixWidth>16384</MatrixWidth>
+        <MatrixHeight>16384</MatrixHeight>
+      </TileMatrix>
+      <TileMatrix>
+        <ows:Identifier>15</ows:Identifier>
+        <ScaleDenominator>17061.83667079827</ScaleDenominator>
+        <TopLeftCorner>-20037508.34278925 20037508.34278925</TopLeftCorner>
+        <TileWidth>256</TileWidth>
+        <TileHeight>256</TileHeight>
+        <MatrixWidth>32768</MatrixWidth>
+        <MatrixHeight>32768</MatrixHeight>
+      </TileMatrix>
+      <TileMatrix>
+        <ows:Identifier>16</ows:Identifier>
+        <ScaleDenominator>8530.918335399136</ScaleDenominator>
+        <TopLeftCorner>-20037508.34278925 20037508.34278925</TopLeftCorner>
+        <TileWidth>256</TileWidth>
+        <TileHeight>256</TileHeight>
+        <MatrixWidth>65536</MatrixWidth>
+        <MatrixHeight>65536</MatrixHeight>
+      </TileMatrix>
+      <TileMatrix>
+        <ows:Identifier>17</ows:Identifier>
+        <ScaleDenominator>4265.459167699568</ScaleDenominator>
+        <TopLeftCorner>-20037508.34278925 20037508.34278925</TopLeftCorner>
+        <TileWidth>256</TileWidth>
+        <TileHeight>256</TileHeight>
+        <MatrixWidth>131072</MatrixWidth>
+        <MatrixHeight>131072</MatrixHeight>
+      </TileMatrix>
+      <TileMatrix>
+        <ows:Identifier>18</ows:Identifier>
+        <ScaleDenominator>2132.729583849784</ScaleDenominator>
+        <TopLeftCorner>-20037508.34278925 20037508.34278925</TopLeftCorner>
+        <TileWidth>256</TileWidth>
+        <TileHeight>256</TileHeight>
+        <MatrixWidth>262144</MatrixWidth>
+        <MatrixHeight>262144</MatrixHeight>
+      </TileMatrix>
+      </TileMatrixSet>
+    
+</Contents>
+<ServiceMetadataURL xlink:href="http://maps.ottawa.ca/arcgis/rest/services/Basemap_Imagery_2014/MapServer/WMTS/1.0.0/WMTSCapabilities.xml"/> 
+</Capabilities>
\ No newline at end of file
diff --git a/test/data/wmts/WMTSCapabilities-Wallonie-nomatrixdimension.xml b/test/data/wmts/WMTSCapabilities-Wallonie-nomatrixdimension.xml
new file mode 100644
index 0000000..b167f65
--- /dev/null
+++ b/test/data/wmts/WMTSCapabilities-Wallonie-nomatrixdimension.xml
@@ -0,0 +1,212 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Capabilities xmlns="http://www.opengis.net/wmts/1.0"
+	xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:xlink="http://www.w3.org/1999/xlink"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:gml="http://www.opengis.net/gml"
+	xsi:schemaLocation="http://www.opengis.net/wmts/1.0 http://schemas.opengis.net/wmts/1.0/wmtsGetCapabilities_response.xsd"
+	version="1.0.0">
+	<!-- Service Identification -->
+	<ows:ServiceIdentification>
+		<ows:Title>DONNEES_BASE_FOND_PLAN_ANNOTATIONS_2012_RW_NB</ows:Title>
+		<ows:ServiceType>OGC WMTS</ows:ServiceType>
+		<ows:ServiceTypeVersion>1.0.0</ows:ServiceTypeVersion>
+	</ows:ServiceIdentification> <!-- Operations Metadata -->
+	<ows:OperationsMetadata>
+		<ows:Operation name="GetCapabilities">
+			<ows:DCP>
+				<ows:HTTP>
+					<ows:Get
+						xlink:href="http://geoservices.wallonie.be/arcgis/rest/services/DONNEES_BASE/FOND_PLAN_ANNOTATIONS_2012_RW_NB/MapServer/WMTS/1.0.0/WMTSCapabilities.xml">
+						<ows:Constraint name="GetEncoding">
+							<ows:AllowedValues>
+								<ows:Value>RESTful</ows:Value>
+							</ows:AllowedValues>
+						</ows:Constraint>
+					</ows:Get>
+					<!-- add KVP binding in 10.1 -->
+					<ows:Get
+						xlink:href="http://geoservices.wallonie.be/arcgis/rest/services/DONNEES_BASE/FOND_PLAN_ANNOTATIONS_2012_RW_NB/MapServer/WMTS?">
+						<ows:Constraint name="GetEncoding">
+							<ows:AllowedValues>
+								<ows:Value>KVP</ows:Value>
+							</ows:AllowedValues>
+						</ows:Constraint>
+					</ows:Get>
+				</ows:HTTP>
+			</ows:DCP>
+		</ows:Operation>
+		<ows:Operation name="GetTile">
+			<ows:DCP>
+				<ows:HTTP>
+					<ows:Get
+						xlink:href="http://geoservices.wallonie.be/arcgis/rest/services/DONNEES_BASE/FOND_PLAN_ANNOTATIONS_2012_RW_NB/MapServer/WMTS/tile/1.0.0/">
+						<ows:Constraint name="GetEncoding">
+							<ows:AllowedValues>
+								<ows:Value>RESTful</ows:Value>
+							</ows:AllowedValues>
+						</ows:Constraint>
+					</ows:Get>
+					<ows:Get
+						xlink:href="http://geoservices.wallonie.be/arcgis/rest/services/DONNEES_BASE/FOND_PLAN_ANNOTATIONS_2012_RW_NB/MapServer/WMTS?">
+						<ows:Constraint name="GetEncoding">
+							<ows:AllowedValues>
+								<ows:Value>KVP</ows:Value>
+							</ows:AllowedValues>
+						</ows:Constraint>
+					</ows:Get>
+				</ows:HTTP>
+			</ows:DCP>
+		</ows:Operation>
+	</ows:OperationsMetadata>
+	<Contents>
+		<!--Layer -->
+		<Layer>
+			<ows:Title>DONNEES_BASE_FOND_PLAN_ANNOTATIONS_2012_RW_NB</ows:Title>
+			<ows:Identifier>DONNEES_BASE_FOND_PLAN_ANNOTATIONS_2012_RW_NB</ows:Identifier>
+			<ows:BoundingBox crs="urn:ogc:def:crs:EPSG::31370">
+				<ows:LowerCorner>42300.92807390103 21237.786800000817</ows:LowerCorner>
+				<ows:UpperCorner>295130.32186220103 167836.14678540602</ows:UpperCorner>
+			</ows:BoundingBox>
+			<ows:WGS84BoundingBox crs="urn:ogc:def:crs:OGC:2:84">
+				<ows:LowerCorner>2.840548314430268 49.485372459967245</ows:LowerCorner>
+				<ows:UpperCorner>6.427849693016202 50.820959517561256</ows:UpperCorner>
+			</ows:WGS84BoundingBox>
+			<Style isDefault="true">
+				<ows:Title>Default Style</ows:Title>
+				<ows:Identifier>default</ows:Identifier>
+			</Style>
+			<Format>image/png</Format>
+			<TileMatrixSetLink>
+				<TileMatrixSet>default028mm</TileMatrixSet>
+			</TileMatrixSetLink>
+			<ResourceURL format="image/png" resourceType="tile"
+				template="http://geoservices.wallonie.be/arcgis/rest/services/DONNEES_BASE/FOND_PLAN_ANNOTATIONS_2012_RW_NB/MapServer/WMTS/tile/1.0.0/DONNEES_BASE_FOND_PLAN_ANNOTATIONS_2012_RW_NB/{Style}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png" />
+		</Layer> <!--TileMatrixSet -->
+		<TileMatrixSet>
+			<ows:Title>TileMatrix using 0.28mm</ows:Title>
+			<ows:Abstract>The tile matrix set that has scale values calculated based on the dpi defined by OGC specification (dpi assumes 0.28mm as the physical distance of a pixel).</ows:Abstract>
+			<ows:Identifier>default028mm</ows:Identifier>
+			<ows:SupportedCRS>urn:ogc:def:crs:EPSG::31370</ows:SupportedCRS>
+			<TileMatrix>
+				<ows:Identifier>0</ows:Identifier>
+				<ScaleDenominator>1417413.5491126343</ScaleDenominator>
+				<TopLeftCorner>-3.58727E7 4.14227E7</TopLeftCorner>
+				<TileWidth>512</TileWidth>
+				<TileHeight>512</TileHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>1</ows:Identifier>
+				<ScaleDenominator>1181177.957593862</ScaleDenominator>
+				<TopLeftCorner>-3.58727E7 4.14227E7</TopLeftCorner>
+				<TileWidth>512</TileWidth>
+				<TileHeight>512</TileHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>2</ows:Identifier>
+				<ScaleDenominator>944942.3660750897</ScaleDenominator>
+				<TopLeftCorner>-3.58727E7 4.14227E7</TopLeftCorner>
+				<TileWidth>512</TileWidth>
+				<TileHeight>512</TileHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>3</ows:Identifier>
+				<ScaleDenominator>708706.7745563171</ScaleDenominator>
+				<TopLeftCorner>-3.58727E7 4.14227E7</TopLeftCorner>
+				<TileWidth>512</TileWidth>
+				<TileHeight>512</TileHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>4</ows:Identifier>
+				<ScaleDenominator>472471.18303754483</ScaleDenominator>
+				<TopLeftCorner>-3.58727E7 4.14227E7</TopLeftCorner>
+				<TileWidth>512</TileWidth>
+				<TileHeight>512</TileHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>5</ows:Identifier>
+				<ScaleDenominator>236235.59151877242</ScaleDenominator>
+				<TopLeftCorner>-3.58727E7 4.14227E7</TopLeftCorner>
+				<TileWidth>512</TileWidth>
+				<TileHeight>512</TileHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>6</ows:Identifier>
+				<ScaleDenominator>94494.23660750895</ScaleDenominator>
+				<TopLeftCorner>-3.58727E7 4.14227E7</TopLeftCorner>
+				<TileWidth>512</TileWidth>
+				<TileHeight>512</TileHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>7</ows:Identifier>
+				<ScaleDenominator>70870.67745563173</ScaleDenominator>
+				<TopLeftCorner>-3.58727E7 4.14227E7</TopLeftCorner>
+				<TileWidth>512</TileWidth>
+				<TileHeight>512</TileHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>8</ows:Identifier>
+				<ScaleDenominator>47247.118303754476</ScaleDenominator>
+				<TopLeftCorner>-3.58727E7 4.14227E7</TopLeftCorner>
+				<TileWidth>512</TileWidth>
+				<TileHeight>512</TileHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>9</ows:Identifier>
+				<ScaleDenominator>23623.559151877238</ScaleDenominator>
+				<TopLeftCorner>-3.58727E7 4.14227E7</TopLeftCorner>
+				<TileWidth>512</TileWidth>
+				<TileHeight>512</TileHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>10</ows:Identifier>
+				<ScaleDenominator>14174.135491126344</ScaleDenominator>
+				<TopLeftCorner>-3.58727E7 4.14227E7</TopLeftCorner>
+				<TileWidth>512</TileWidth>
+				<TileHeight>512</TileHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>11</ows:Identifier>
+				<ScaleDenominator>9449.423660750896</ScaleDenominator>
+				<TopLeftCorner>-3.58727E7 4.14227E7</TopLeftCorner>
+				<TileWidth>512</TileWidth>
+				<TileHeight>512</TileHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>12</ows:Identifier>
+				<ScaleDenominator>4724.711830375448</ScaleDenominator>
+				<TopLeftCorner>-3.58727E7 4.14227E7</TopLeftCorner>
+				<TileWidth>512</TileWidth>
+				<TileHeight>512</TileHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>13</ows:Identifier>
+				<ScaleDenominator>2362.355915187724</ScaleDenominator>
+				<TopLeftCorner>-3.58727E7 4.14227E7</TopLeftCorner>
+				<TileWidth>512</TileWidth>
+				<TileHeight>512</TileHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>14</ows:Identifier>
+				<ScaleDenominator>944.9423660750896</ScaleDenominator>
+				<TopLeftCorner>-3.58727E7 4.14227E7</TopLeftCorner>
+				<TileWidth>512</TileWidth>
+				<TileHeight>512</TileHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>15</ows:Identifier>
+				<ScaleDenominator>472.4711830375448</ScaleDenominator>
+				<TopLeftCorner>-3.58727E7 4.14227E7</TopLeftCorner>
+				<TileWidth>512</TileWidth>
+				<TileHeight>512</TileHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>16</ows:Identifier>
+				<ScaleDenominator>236.2355915187724</ScaleDenominator>
+				<TopLeftCorner>-3.58727E7 4.14227E7</TopLeftCorner>
+				<TileWidth>512</TileWidth>
+				<TileHeight>512</TileHeight>
+			</TileMatrix>
+		</TileMatrixSet>
+	</Contents>
+	<ServiceMetadataURL
+		xlink:href="http://geoservices.wallonie.be/arcgis/rest/services/DONNEES_BASE/FOND_PLAN_ANNOTATIONS_2012_RW_NB/MapServer/WMTS/1.0.0/WMTSCapabilities.xml" />
+</Capabilities>
diff --git a/test/data/wmts/WMTSCapabilities-Wallonie.xml b/test/data/wmts/WMTSCapabilities-Wallonie.xml
new file mode 100644
index 0000000..f47fecf
--- /dev/null
+++ b/test/data/wmts/WMTSCapabilities-Wallonie.xml
@@ -0,0 +1,246 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Capabilities xmlns="http://www.opengis.net/wmts/1.0"
+	xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:xlink="http://www.w3.org/1999/xlink"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:gml="http://www.opengis.net/gml"
+	xsi:schemaLocation="http://www.opengis.net/wmts/1.0 http://schemas.opengis.net/wmts/1.0/wmtsGetCapabilities_response.xsd"
+	version="1.0.0">
+	<!-- Service Identification -->
+	<ows:ServiceIdentification>
+		<ows:Title>DONNEES_BASE_FOND_PLAN_ANNOTATIONS_2012_RW_NB</ows:Title>
+		<ows:ServiceType>OGC WMTS</ows:ServiceType>
+		<ows:ServiceTypeVersion>1.0.0</ows:ServiceTypeVersion>
+	</ows:ServiceIdentification> <!-- Operations Metadata -->
+	<ows:OperationsMetadata>
+		<ows:Operation name="GetCapabilities">
+			<ows:DCP>
+				<ows:HTTP>
+					<ows:Get
+						xlink:href="http://geoservices.wallonie.be/arcgis/rest/services/DONNEES_BASE/FOND_PLAN_ANNOTATIONS_2012_RW_NB/MapServer/WMTS/1.0.0/WMTSCapabilities.xml">
+						<ows:Constraint name="GetEncoding">
+							<ows:AllowedValues>
+								<ows:Value>RESTful</ows:Value>
+							</ows:AllowedValues>
+						</ows:Constraint>
+					</ows:Get>
+					<!-- add KVP binding in 10.1 -->
+					<ows:Get
+						xlink:href="http://geoservices.wallonie.be/arcgis/rest/services/DONNEES_BASE/FOND_PLAN_ANNOTATIONS_2012_RW_NB/MapServer/WMTS?">
+						<ows:Constraint name="GetEncoding">
+							<ows:AllowedValues>
+								<ows:Value>KVP</ows:Value>
+							</ows:AllowedValues>
+						</ows:Constraint>
+					</ows:Get>
+				</ows:HTTP>
+			</ows:DCP>
+		</ows:Operation>
+		<ows:Operation name="GetTile">
+			<ows:DCP>
+				<ows:HTTP>
+					<ows:Get
+						xlink:href="http://geoservices.wallonie.be/arcgis/rest/services/DONNEES_BASE/FOND_PLAN_ANNOTATIONS_2012_RW_NB/MapServer/WMTS/tile/1.0.0/">
+						<ows:Constraint name="GetEncoding">
+							<ows:AllowedValues>
+								<ows:Value>RESTful</ows:Value>
+							</ows:AllowedValues>
+						</ows:Constraint>
+					</ows:Get>
+					<ows:Get
+						xlink:href="http://geoservices.wallonie.be/arcgis/rest/services/DONNEES_BASE/FOND_PLAN_ANNOTATIONS_2012_RW_NB/MapServer/WMTS?">
+						<ows:Constraint name="GetEncoding">
+							<ows:AllowedValues>
+								<ows:Value>KVP</ows:Value>
+							</ows:AllowedValues>
+						</ows:Constraint>
+					</ows:Get>
+				</ows:HTTP>
+			</ows:DCP>
+		</ows:Operation>
+	</ows:OperationsMetadata>
+	<Contents>
+		<!--Layer -->
+		<Layer>
+			<ows:Title>DONNEES_BASE_FOND_PLAN_ANNOTATIONS_2012_RW_NB</ows:Title>
+			<ows:Identifier>DONNEES_BASE_FOND_PLAN_ANNOTATIONS_2012_RW_NB</ows:Identifier>
+			<ows:BoundingBox crs="urn:ogc:def:crs:EPSG::31370">
+				<ows:LowerCorner>42300.92807390103 21237.786800000817</ows:LowerCorner>
+				<ows:UpperCorner>295130.32186220103 167836.14678540602</ows:UpperCorner>
+			</ows:BoundingBox>
+			<ows:WGS84BoundingBox crs="urn:ogc:def:crs:OGC:2:84">
+				<ows:LowerCorner>2.840548314430268 49.485372459967245</ows:LowerCorner>
+				<ows:UpperCorner>6.427849693016202 50.820959517561256</ows:UpperCorner>
+			</ows:WGS84BoundingBox>
+			<Style isDefault="true">
+				<ows:Title>Default Style</ows:Title>
+				<ows:Identifier>default</ows:Identifier>
+			</Style>
+			<Format>image/png</Format>
+			<TileMatrixSetLink>
+				<TileMatrixSet>default028mm</TileMatrixSet>
+			</TileMatrixSetLink>
+			<ResourceURL format="image/png" resourceType="tile"
+				template="http://geoservices.wallonie.be/arcgis/rest/services/DONNEES_BASE/FOND_PLAN_ANNOTATIONS_2012_RW_NB/MapServer/WMTS/tile/1.0.0/DONNEES_BASE_FOND_PLAN_ANNOTATIONS_2012_RW_NB/{Style}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png" />
+		</Layer> <!--TileMatrixSet -->
+		<TileMatrixSet>
+			<ows:Title>TileMatrix using 0.28mm</ows:Title>
+			<ows:Abstract>The tile matrix set that has scale values calculated based on the dpi defined by OGC specification (dpi assumes 0.28mm as the physical distance of a pixel).</ows:Abstract>
+			<ows:Identifier>default028mm</ows:Identifier>
+			<ows:SupportedCRS>urn:ogc:def:crs:EPSG::31370</ows:SupportedCRS>
+			<TileMatrix>
+				<ows:Identifier>0</ows:Identifier>
+				<ScaleDenominator>1417413.5491126343</ScaleDenominator>
+				<TopLeftCorner>-3.58727E7 4.14227E7</TopLeftCorner>
+				<TileWidth>512</TileWidth>
+				<TileHeight>512</TileHeight>
+				<MatrixWidth>178</MatrixWidth>
+				<MatrixHeight>204</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>1</ows:Identifier>
+				<ScaleDenominator>1181177.957593862</ScaleDenominator>
+				<TopLeftCorner>-3.58727E7 4.14227E7</TopLeftCorner>
+				<TileWidth>512</TileWidth>
+				<TileHeight>512</TileHeight>
+				<MatrixWidth>214</MatrixWidth>
+				<MatrixHeight>245</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>2</ows:Identifier>
+				<ScaleDenominator>944942.3660750897</ScaleDenominator>
+				<TopLeftCorner>-3.58727E7 4.14227E7</TopLeftCorner>
+				<TileWidth>512</TileWidth>
+				<TileHeight>512</TileHeight>
+				<MatrixWidth>267</MatrixWidth>
+				<MatrixHeight>306</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>3</ows:Identifier>
+				<ScaleDenominator>708706.7745563171</ScaleDenominator>
+				<TopLeftCorner>-3.58727E7 4.14227E7</TopLeftCorner>
+				<TileWidth>512</TileWidth>
+				<TileHeight>512</TileHeight>
+				<MatrixWidth>356</MatrixWidth>
+				<MatrixHeight>408</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>4</ows:Identifier>
+				<ScaleDenominator>472471.18303754483</ScaleDenominator>
+				<TopLeftCorner>-3.58727E7 4.14227E7</TopLeftCorner>
+				<TileWidth>512</TileWidth>
+				<TileHeight>512</TileHeight>
+				<MatrixWidth>534</MatrixWidth>
+				<MatrixHeight>612</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>5</ows:Identifier>
+				<ScaleDenominator>236235.59151877242</ScaleDenominator>
+				<TopLeftCorner>-3.58727E7 4.14227E7</TopLeftCorner>
+				<TileWidth>512</TileWidth>
+				<TileHeight>512</TileHeight>
+				<MatrixWidth>1068</MatrixWidth>
+				<MatrixHeight>1223</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>6</ows:Identifier>
+				<ScaleDenominator>94494.23660750895</ScaleDenominator>
+				<TopLeftCorner>-3.58727E7 4.14227E7</TopLeftCorner>
+				<TileWidth>512</TileWidth>
+				<TileHeight>512</TileHeight>
+				<MatrixWidth>2670</MatrixWidth>
+				<MatrixHeight>3057</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>7</ows:Identifier>
+				<ScaleDenominator>70870.67745563173</ScaleDenominator>
+				<TopLeftCorner>-3.58727E7 4.14227E7</TopLeftCorner>
+				<TileWidth>512</TileWidth>
+				<TileHeight>512</TileHeight>
+				<MatrixWidth>3560</MatrixWidth>
+				<MatrixHeight>4075</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>8</ows:Identifier>
+				<ScaleDenominator>47247.118303754476</ScaleDenominator>
+				<TopLeftCorner>-3.58727E7 4.14227E7</TopLeftCorner>
+				<TileWidth>512</TileWidth>
+				<TileHeight>512</TileHeight>
+				<MatrixWidth>5340</MatrixWidth>
+				<MatrixHeight>6113</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>9</ows:Identifier>
+				<ScaleDenominator>23623.559151877238</ScaleDenominator>
+				<TopLeftCorner>-3.58727E7 4.14227E7</TopLeftCorner>
+				<TileWidth>512</TileWidth>
+				<TileHeight>512</TileHeight>
+				<MatrixWidth>10680</MatrixWidth>
+				<MatrixHeight>12225</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>10</ows:Identifier>
+				<ScaleDenominator>14174.135491126344</ScaleDenominator>
+				<TopLeftCorner>-3.58727E7 4.14227E7</TopLeftCorner>
+				<TileWidth>512</TileWidth>
+				<TileHeight>512</TileHeight>
+				<MatrixWidth>17800</MatrixWidth>
+				<MatrixHeight>20375</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>11</ows:Identifier>
+				<ScaleDenominator>9449.423660750896</ScaleDenominator>
+				<TopLeftCorner>-3.58727E7 4.14227E7</TopLeftCorner>
+				<TileWidth>512</TileWidth>
+				<TileHeight>512</TileHeight>
+				<MatrixWidth>26699</MatrixWidth>
+				<MatrixHeight>30563</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>12</ows:Identifier>
+				<ScaleDenominator>4724.711830375448</ScaleDenominator>
+				<TopLeftCorner>-3.58727E7 4.14227E7</TopLeftCorner>
+				<TileWidth>512</TileWidth>
+				<TileHeight>512</TileHeight>
+				<MatrixWidth>53398</MatrixWidth>
+				<MatrixHeight>61125</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>13</ows:Identifier>
+				<ScaleDenominator>2362.355915187724</ScaleDenominator>
+				<TopLeftCorner>-3.58727E7 4.14227E7</TopLeftCorner>
+				<TileWidth>512</TileWidth>
+				<TileHeight>512</TileHeight>
+				<MatrixWidth>106795</MatrixWidth>
+				<MatrixHeight>122249</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>14</ows:Identifier>
+				<ScaleDenominator>944.9423660750896</ScaleDenominator>
+				<TopLeftCorner>-3.58727E7 4.14227E7</TopLeftCorner>
+				<TileWidth>512</TileWidth>
+				<TileHeight>512</TileHeight>
+				<MatrixWidth>266987</MatrixWidth>
+				<MatrixHeight>305621</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>15</ows:Identifier>
+				<ScaleDenominator>472.4711830375448</ScaleDenominator>
+				<TopLeftCorner>-3.58727E7 4.14227E7</TopLeftCorner>
+				<TileWidth>512</TileWidth>
+				<TileHeight>512</TileHeight>
+				<MatrixWidth>533973</MatrixWidth>
+				<MatrixHeight>611241</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>16</ows:Identifier>
+				<ScaleDenominator>236.2355915187724</ScaleDenominator>
+				<TopLeftCorner>-3.58727E7 4.14227E7</TopLeftCorner>
+				<TileWidth>512</TileWidth>
+				<TileHeight>512</TileHeight>
+				<MatrixWidth>1067946</MatrixWidth>
+				<MatrixHeight>1222482</MatrixHeight>
+			</TileMatrix>
+		</TileMatrixSet>
+	</Contents>
+	<ServiceMetadataURL
+		xlink:href="http://geoservices.wallonie.be/arcgis/rest/services/DONNEES_BASE/FOND_PLAN_ANNOTATIONS_2012_RW_NB/MapServer/WMTS/1.0.0/WMTSCapabilities.xml" />
+</Capabilities>
diff --git a/test/data/wmts/getCapabilities-wien.xml b/test/data/wmts/getCapabilities-wien.xml
new file mode 100644
index 0000000..e7c10aa
--- /dev/null
+++ b/test/data/wmts/getCapabilities-wien.xml
@@ -0,0 +1,359 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Capabilities xsi:schemaLocation="http://www.opengis.net/wmts/1.0 http://schemas.opengis.net/wmts/1.0/wmtsGetCapabilities_response.xsd" version="1.0.0" xmlns="http://www.opengis.net/wmts/1.0" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:gml="http://www.opengis.net/gml">
+	<ows:ServiceIdentification>
+		<ows:Title>Web Map Tile Service</ows:Title>
+		<ows:ServiceType>OGC WMTS</ows:ServiceType>
+		<ows:ServiceTypeVersion>1.0.0</ows:ServiceTypeVersion>
+		<ows:Fees>none</ows:Fees>
+		<ows:AccessConstraints>http://data.linz.gv.at/nutzungsbedingungen/</ows:AccessConstraints>
+	</ows:ServiceIdentification>	
+	<ows:ServiceProvider>
+		<ows:ProviderName>IKT Linz GmbH</ows:ProviderName>
+		<ows:ProviderSite xlink:href="http://www.linz.at/politik_verwaltung/44530.asp"/>
+		<ows:ServiceContact>
+			<ows:IndividualName>Emmanuel Blassnig</ows:IndividualName>
+		</ows:ServiceContact>
+	</ows:ServiceProvider>	
+	<ows:OperationsMetadata>
+		<ows:Operation name="GetCapabilities">
+			<ows:DCP>
+				<ows:HTTP>
+					<ows:Get xlink:href="http://webgis.linz.at/WMTS/1.0.0">
+						<ows:Constraint name="GetEncoding">
+							<ows:AllowedValues>
+								<ows:Value>RESTful</ows:Value>
+							</ows:AllowedValues>
+						</ows:Constraint>
+					</ows:Get>
+				</ows:HTTP>
+			</ows:DCP>
+		</ows:Operation>
+		<ows:Operation name="GetTile">
+			<ows:DCP>
+				<ows:HTTP>
+					<ows:Get xlink:href="http://webgis.linz.at/WMTS/1.0.0">
+						<ows:Constraint name="GetEncoding">
+							<ows:AllowedValues>
+								<ows:Value>RESTful</ows:Value>
+							</ows:AllowedValues>
+						</ows:Constraint>
+					</ows:Get>					
+				</ows:HTTP>
+			</ows:DCP>
+		</ows:Operation>
+	</ows:OperationsMetadata>
+	<Contents>
+		<Layer>
+			<ows:Title>Orthofotos</ows:Title>
+			<ows:WGS84BoundingBox crs="urn:ogc:def:crs:OGC:2:84">
+				<ows:LowerCorner>14.42 48.21</ows:LowerCorner>
+				<ows:UpperCorner>14.24 48.38</ows:UpperCorner>
+			</ows:WGS84BoundingBox>
+			<ows:Identifier>Orthofotos</ows:Identifier>
+			<Style isDefault="true">
+				<ows:Identifier>normal</ows:Identifier>
+			</Style>
+			<Format>image/png</Format>
+			<TileMatrixSetLink>
+				<TileMatrixSet>Orthofotos_standard</TileMatrixSet>
+			</TileMatrixSetLink>
+			<ResourceURL format="image/png" template="http://webgis.linz.at/WMTS/1.0.0/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png" resourceType="tile"/> 
+		</Layer>
+		<TileMatrixSet>
+			<ows:Identifier>Orthofotos_standard</ows:Identifier>
+			<ows:BoundingBox crs="urn:ogc:def:crs:EPSG:6.18:3:3857">
+				<ows:LowerCorner>1585189.5489 6141862.73088</ows:LowerCorner>
+				<ows:UpperCorner>1603000.66742 6168631.88034</ows:UpperCorner>
+			</ows:BoundingBox>
+			<ows:SupportedCRS>urn:ogc:def:crs:EPSG:6.18:3:3857</ows:SupportedCRS>
+			<WellKnownScaleSet>urn:ogc:def:wkss:OGC:1.0:GoogleMapsCompatible</WellKnownScaleSet>
+			<TileMatrix>
+				<ows:Identifier>10</ows:Identifier>
+				<ScaleDenominator>545978.773466</ScaleDenominator>
+				<TopLeftCorner>-20037508.3428 20037508.3428</TopLeftCorner>
+				<TileWidth>256</TileWidth>
+				<TileHeight>256</TileHeight>
+				<MatrixWidth>1024</MatrixWidth>
+				<MatrixHeight>1024</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>11</ows:Identifier>
+				<ScaleDenominator>272989.386733</ScaleDenominator>
+				<TopLeftCorner>-20037508.3428 20037508.3428</TopLeftCorner>
+				<TileWidth>256</TileWidth>
+				<TileHeight>256</TileHeight>
+				<MatrixWidth>2048</MatrixWidth>
+				<MatrixHeight>2048</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>12</ows:Identifier>
+				<ScaleDenominator>136494.693366</ScaleDenominator>
+				<TopLeftCorner>-20037508.3428 20037508.3428</TopLeftCorner>
+				<TileWidth>256</TileWidth>
+				<TileHeight>256</TileHeight>
+				<MatrixWidth>4096</MatrixWidth>
+				<MatrixHeight>4096</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>13</ows:Identifier>
+				<ScaleDenominator>68247.3466832</ScaleDenominator>
+				<TopLeftCorner>-20037508.3428 20037508.3428</TopLeftCorner>
+				<TileWidth>256</TileWidth>
+				<TileHeight>256</TileHeight>
+				<MatrixWidth>8192</MatrixWidth>
+				<MatrixHeight>8192</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>14</ows:Identifier>
+				<ScaleDenominator>34123.6733416</ScaleDenominator>
+				<TopLeftCorner>-20037508.3428 20037508.3428</TopLeftCorner>
+				<TileWidth>256</TileWidth>
+				<TileHeight>256</TileHeight>
+				<MatrixWidth>16384</MatrixWidth>
+				<MatrixHeight>16384</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>15</ows:Identifier>
+				<ScaleDenominator>17061.8366708</ScaleDenominator>
+				<TopLeftCorner>-20037508.3428 20037508.3428</TopLeftCorner>
+				<TileWidth>256</TileWidth>
+				<TileHeight>256</TileHeight>
+				<MatrixWidth>32768</MatrixWidth>
+				<MatrixHeight>32768</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>16</ows:Identifier>
+				<ScaleDenominator>8530.91833540</ScaleDenominator>
+				<TopLeftCorner>-20037508.3428 20037508.3428</TopLeftCorner>
+				<TileWidth>256</TileWidth>
+				<TileHeight>256</TileHeight>
+				<MatrixWidth>65536</MatrixWidth>
+				<MatrixHeight>65536</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>17</ows:Identifier>
+				<ScaleDenominator>4265.45916770</ScaleDenominator>
+				<TopLeftCorner>-20037508.3428 20037508.3428</TopLeftCorner>
+				<TileWidth>256</TileWidth>
+				<TileHeight>256</TileHeight>
+				<MatrixWidth>131072</MatrixWidth>
+				<MatrixHeight>131072</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>18</ows:Identifier>
+				<ScaleDenominator>2132.72958385</ScaleDenominator>
+				<TopLeftCorner>-20037508.3428 20037508.3428</TopLeftCorner>
+				<TileWidth>256</TileWidth>
+				<TileHeight>256</TileHeight>
+				<MatrixWidth>262144</MatrixWidth>
+				<MatrixHeight>262144</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>19</ows:Identifier>
+				<ScaleDenominator>1066.36479193</ScaleDenominator>
+				<TopLeftCorner>-20037508.3428 20037508.3428</TopLeftCorner>
+				<TileWidth>256</TileWidth>
+				<TileHeight>256</TileHeight>
+				<MatrixWidth>524288</MatrixWidth>
+				<MatrixHeight>524288</MatrixHeight>
+			</TileMatrix>
+		</TileMatrixSet>
+			<TileMatrixSet xmlns:ows="http://www.opengis.net/ows/1.1">
+			<ows:Identifier>Stadtkarte_standard</ows:Identifier> 
+			<ows:BoundingBox crs="urn:ogc:def:crs:EPSG:6.18:3:3857">
+				<ows:LowerCorner>1585189.5489 6141862.73088</ows:LowerCorner>
+				<ows:UpperCorner>1603000.66742 6168631.88034</ows:UpperCorner>
+			</ows:BoundingBox>
+			<ows:SupportedCRS>urn:ogc:def:crs:EPSG:6.18:3:3857</ows:SupportedCRS>
+			<TileMatrix>
+				<ows:Identifier>10</ows:Identifier>
+				<ScaleDenominator>545978</ScaleDenominator>
+				<TopLeftCorner>1584000 6171000</TopLeftCorner>
+				<TileWidth>256</TileWidth>
+				<TileHeight>256</TileHeight>
+				<MatrixWidth>1</MatrixWidth>
+				<MatrixHeight>1</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>11</ows:Identifier>
+				<ScaleDenominator>272989</ScaleDenominator>
+				<TopLeftCorner>1584000 6171000</TopLeftCorner>
+				<TileWidth>256</TileWidth>
+				<TileHeight>256</TileHeight>
+				<MatrixWidth>2</MatrixWidth>
+				<MatrixHeight>2</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>12</ows:Identifier>
+				<ScaleDenominator>136495</ScaleDenominator>
+				<TopLeftCorner>1584000 6171000</TopLeftCorner>
+				<TileWidth>256</TileWidth>
+				<TileHeight>256</TileHeight>
+				<MatrixWidth>3</MatrixWidth>
+				<MatrixHeight>4</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>13</ows:Identifier>
+				<ScaleDenominator>68247</ScaleDenominator>
+				<TopLeftCorner>1584000 6171000</TopLeftCorner>
+				<TileWidth>256</TileWidth>
+				<TileHeight>256</TileHeight>
+				<MatrixWidth>5</MatrixWidth>
+				<MatrixHeight>7</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>14</ows:Identifier>
+				<ScaleDenominator>34123</ScaleDenominator>
+				<TopLeftCorner>1584000 6171000</TopLeftCorner>
+				<TileWidth>256</TileWidth>
+				<TileHeight>256</TileHeight>
+				<MatrixWidth>10</MatrixWidth>
+				<MatrixHeight>13</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>15</ows:Identifier>
+				<ScaleDenominator>17061</ScaleDenominator>
+				<TopLeftCorner>1584000 6171000</TopLeftCorner>
+				<TileWidth>256</TileWidth>
+				<TileHeight>256</TileHeight>
+				<MatrixWidth>19</MatrixWidth>
+				<MatrixHeight>25</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>16</ows:Identifier>
+				<ScaleDenominator>8530</ScaleDenominator>
+				<TopLeftCorner>1584000 6171000</TopLeftCorner>
+				<TileWidth>256</TileWidth>
+				<TileHeight>256</TileHeight>
+				<MatrixWidth>38</MatrixWidth>
+				<MatrixHeight>50</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>17</ows:Identifier>
+				<ScaleDenominator>4265</ScaleDenominator>
+				<TopLeftCorner>1584000 6171000</TopLeftCorner>
+				<TileWidth>256</TileWidth>
+				<TileHeight>256</TileHeight>
+				<MatrixWidth>76</MatrixWidth>
+				<MatrixHeight>99</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>18</ows:Identifier>
+				<ScaleDenominator>2133</ScaleDenominator>
+				<TopLeftCorner>1584000 6171000</TopLeftCorner>
+				<TileWidth>256</TileWidth>
+				<TileHeight>256</TileHeight>
+				<MatrixWidth>151</MatrixWidth>
+				<MatrixHeight>197</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>19</ows:Identifier>
+				<ScaleDenominator>1066</ScaleDenominator>
+				<TopLeftCorner>1584000 6171000</TopLeftCorner>
+				<TileWidth>256</TileWidth>
+				<TileHeight>256</TileHeight>
+				<MatrixWidth>302</MatrixWidth>
+				<MatrixHeight>393</MatrixHeight>
+			</TileMatrix>
+		</TileMatrixSet>
+		<TileMatrixSet xmlns:ows="http://www.opengis.net/ows/1.1">
+			<ows:Identifier>Beschriftungen_alles</ows:Identifier>
+			<ows:BoundingBox crs="urn:ogc:def:crs:EPSG:6.18:3:3857">
+				<ows:LowerCorner>1585189.5489 6141862.73088</ows:LowerCorner>
+				<ows:UpperCorner>1603000.66742 6168631.88034</ows:UpperCorner>
+			</ows:BoundingBox>
+			<ows:SupportedCRS>urn:ogc:def:crs:EPSG:6.18:3:3857</ows:SupportedCRS>
+			<TileMatrix>
+				<ows:Identifier>10</ows:Identifier>
+				<ScaleDenominator>545978</ScaleDenominator>
+				<TopLeftCorner>1584000 6171000</TopLeftCorner>
+				<TileWidth>256</TileWidth>
+				<TileHeight>256</TileHeight>
+				<MatrixWidth>1</MatrixWidth>
+				<MatrixHeight>1</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>11</ows:Identifier>
+				<ScaleDenominator>272989</ScaleDenominator>
+				<TopLeftCorner>1584000 6171000</TopLeftCorner>
+				<TileWidth>256</TileWidth>
+				<TileHeight>256</TileHeight>
+				<MatrixWidth>2</MatrixWidth>
+				<MatrixHeight>2</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>12</ows:Identifier>
+				<ScaleDenominator>136495</ScaleDenominator>
+				<TopLeftCorner>1584000 6171000</TopLeftCorner>
+				<TileWidth>256</TileWidth>
+				<TileHeight>256</TileHeight>
+				<MatrixWidth>3</MatrixWidth>
+				<MatrixHeight>4</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>13</ows:Identifier>
+				<ScaleDenominator>68247</ScaleDenominator>
+				<TopLeftCorner>1584000 6171000</TopLeftCorner>
+				<TileWidth>256</TileWidth>
+				<TileHeight>256</TileHeight>
+				<MatrixWidth>5</MatrixWidth>
+				<MatrixHeight>7</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>14</ows:Identifier>
+				<ScaleDenominator>34123</ScaleDenominator>
+				<TopLeftCorner>1584000 6171000</TopLeftCorner>
+				<TileWidth>256</TileWidth>
+				<TileHeight>256</TileHeight>
+				<MatrixWidth>10</MatrixWidth>
+				<MatrixHeight>13</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>15</ows:Identifier>
+				<ScaleDenominator>17061</ScaleDenominator>
+				<TopLeftCorner>1584000 6171000</TopLeftCorner>
+				<TileWidth>256</TileWidth>
+				<TileHeight>256</TileHeight>
+				<MatrixWidth>19</MatrixWidth>
+				<MatrixHeight>25</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>16</ows:Identifier>
+				<ScaleDenominator>8530</ScaleDenominator>
+				<TopLeftCorner>1584000 6171000</TopLeftCorner>
+				<TileWidth>256</TileWidth>
+				<TileHeight>256</TileHeight>
+				<MatrixWidth>38</MatrixWidth>
+				<MatrixHeight>50</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>17</ows:Identifier>
+				<ScaleDenominator>4265</ScaleDenominator>
+				<TopLeftCorner>1584000 6171000</TopLeftCorner>
+				<TileWidth>256</TileWidth>
+				<TileHeight>256</TileHeight>
+				<MatrixWidth>76</MatrixWidth>
+				<MatrixHeight>99</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>18</ows:Identifier>
+				<ScaleDenominator>2133</ScaleDenominator>
+				<TopLeftCorner>1584000 6171000</TopLeftCorner>
+				<TileWidth>256</TileWidth>
+				<TileHeight>256</TileHeight>
+				<MatrixWidth>151</MatrixWidth>
+				<MatrixHeight>197</MatrixHeight>
+			</TileMatrix>
+			<TileMatrix>
+				<ows:Identifier>19</ows:Identifier>
+				<ScaleDenominator>1066</ScaleDenominator>
+				<TopLeftCorner>1584000 6171000</TopLeftCorner>
+				<TileWidth>256</TileWidth>
+				<TileHeight>256</TileHeight>
+				<MatrixWidth>302</MatrixWidth>
+				<MatrixHeight>393</MatrixHeight>
+			</TileMatrix>
+		</TileMatrixSet>
+	</Contents>
+	<ServiceMetadataURL xlink:href="http://webgis.linz.at/WMTS/1.0.0/getCapabilities.xml"/>
+</Capabilities>
diff --git a/test/data/wmts/getcapabilities-ORTO.xml b/test/data/wmts/getcapabilities-ORTO.xml
new file mode 100644
index 0000000..a4bf7f2
--- /dev/null
+++ b/test/data/wmts/getcapabilities-ORTO.xml
@@ -0,0 +1,779 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Capabilities xmlns="http://www.opengis.net/wmts/1.0" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:inspire_common="http://inspire.ec.europa.eu/schemas/common/1.0" xmlns:inspire_vs="http://inspire.ec.europa.eu/schemas/inspire_vs_ows11/1.0" version="1.0.0" xsi:schemaLocation="http://www.opengis.net/wmts/1.0 http://schemas.opengis.net/wmts/1.0/wmtsGetCapabilities_response.xsd http://inspire. [...]
+	<ows:ServiceIdentification>
+		<ows:Title>Usługa przeglądania ortofotomap dla obszaru Polski. Profil kafelkowany (WMTS)</ows:Title>
+		<ows:Abstract>Usługa przeglądania ortofotomap dla obszaru Polski. Dane udostępniane za pomocą tej usługi stanowią ortofotomapę wykonaną ze zdjęć lotniczych. Usługa wykorzystuje interfejs WMTS OGC w wersji 1.0.0.</ows:Abstract>
+		<ows:Keywords>
+			<ows:Keyword>WMTS</ows:Keyword>
+			<ows:Keyword>Tiled</ows:Keyword>
+			<ows:Keyword>Web Map Tile Service</ows:Keyword>
+			<ows:Keyword>Usługa przeglądania</ows:Keyword>
+			<ows:Keyword>Aerial ortoimagery</ows:Keyword>
+			<ows:Keyword>Aerial photography</ows:Keyword>
+			<ows:Keyword>Dane referencyjne</ows:Keyword>
+			<ows:Keyword>Fotografia terenu</ows:Keyword>
+			<ows:Keyword>Land image</ows:Keyword>
+			<ows:Keyword>Land photography</ows:Keyword>
+			<ows:Keyword>Obraz terenu</ows:Keyword>
+			<ows:Keyword>Orthoimagery</ows:Keyword>
+			<ows:Keyword>Ortofotogram</ows:Keyword>
+			<ows:Keyword>Ortofotomapa lotnicza</ows:Keyword>
+			<ows:Keyword>Ortofotomapa</ows:Keyword>
+			<ows:Keyword>Raster</ows:Keyword>
+			<ows:Keyword>Rastry</ows:Keyword>
+			<ows:Keyword>Referential data</ows:Keyword>
+			<ows:Keyword>Zdjęcie lotnicze</ows:Keyword>
+			<ows:Keyword>Sporządzanie ortoobrazów</ows:Keyword>
+		</ows:Keywords>
+		
+		<ows:ServiceType>OGC WMTS</ows:ServiceType>
+		<ows:ServiceTypeVersion>1.0.0</ows:ServiceTypeVersion>
+		<ows:Fees>Korzystanie z usługi danych przestrzennych oznacza akceptację bez ograniczeń i zastrzeżeń Regulaminu dostępnego na stronie internetowej Geoportalu http://www.geoportal.gov.pl/</ows:Fees>
+		<ows:AccessConstraints>brak ograniczeń</ows:AccessConstraints> 
+	</ows:ServiceIdentification>
+	<ows:ServiceProvider>
+		<ows:ProviderName>Centralny Ośrodek Dokumentacji Geodezyjnej i Kartograficznej </ows:ProviderName>
+		<ows:ProviderSite xlink:type="simple" xlink:href="www.geoportal.gov.pl"/>
+		<ows:ServiceContact>
+			<ows:IndividualName>Dział Geoportal</ows:IndividualName>
+			<ows:ContactInfo>
+				<ows:Phone>
+					<ows:Voice>+48225322501</ows:Voice>
+				</ows:Phone>
+				<ows:Address>
+					<ows:DeliveryPoint>ul. Jana Olbrachta 94B</ows:DeliveryPoint>
+					<ows:City>Warszawa</ows:City>
+					<ows:AdministrativeArea>mazowieckie</ows:AdministrativeArea>
+					<ows:PostalCode>01-102</ows:PostalCode>
+					<ows:Country>Polska</ows:Country>
+					<ows:ElectronicMailAddress>geoportal at geoportal.gov.pl</ows:ElectronicMailAddress>
+				</ows:Address>
+			</ows:ContactInfo>
+		</ows:ServiceContact>
+	</ows:ServiceProvider>
+	<ows:OperationsMetadata>
+		<ows:Operation name="GetCapabilities">
+			<ows:DCP>
+				<ows:HTTP>
+					<ows:Get xlink:href="http://mapy.geoportal.gov.pl/wss/service/WMTS/guest/wmts/ORTO?">
+						<ows:Constraint name="GetEncoding">
+							<ows:AllowedValues>
+								<ows:Value>KVP</ows:Value>
+							</ows:AllowedValues>
+						</ows:Constraint>
+					</ows:Get>
+				</ows:HTTP>
+			</ows:DCP>
+		</ows:Operation>
+		<ows:Operation name="GetTile">
+			<ows:DCP>
+				<ows:HTTP>
+					<ows:Get xlink:href="http://mapy.geoportal.gov.pl/wss/service/WMTS/guest/wmts/ORTO?">
+						<ows:Constraint name="GetEncoding">
+							<ows:AllowedValues>
+								<ows:Value>KVP</ows:Value>
+							</ows:AllowedValues>
+						</ows:Constraint>
+					</ows:Get>
+				</ows:HTTP>
+			</ows:DCP>
+		</ows:Operation>
+		<ows:Operation name="GetFeatureInfo">
+			<ows:DCP>
+				<ows:HTTP>
+					<ows:Get xlink:href="http://mapy.geoportal.gov.pl/wss/service/WMTS/guest/wmts/ORTO?">
+						<ows:Constraint name="GetEncoding">
+							<ows:AllowedValues>
+								<ows:Value>KVP</ows:Value>
+							</ows:AllowedValues>
+						</ows:Constraint>
+					</ows:Get>
+				</ows:HTTP>
+			</ows:DCP>
+		</ows:Operation>
+		<inspire_vs:ExtendedCapabilities>
+			<inspire_common:ResourceLocator>
+				<inspire_common:URL>http://mapy.geoportal.gov.pl/wss/service/WMTS/guest/wmts/ORTO?REQUEST=GetCapabilities&SERVICE=WMTS</inspire_common:URL>
+				<inspire_common:MediaType>text/xml</inspire_common:MediaType>
+			</inspire_common:ResourceLocator>
+			<inspire_common:ResourceType>service</inspire_common:ResourceType>
+			<inspire_common:TemporalReference>
+				<inspire_common:DateOfPublication>2012-10-24</inspire_common:DateOfPublication>
+			</inspire_common:TemporalReference>
+			<inspire_common:Conformity>
+				<inspire_common:Specification xsi:type="inspire_common:citationInspireInteroperabilityRegulation_pol">
+					<inspire_common:Title>ROZPORZĄDZENIE KOMISJI (UE) NR 1089/2010 z dnia 23 listopada 2010 r. w sprawie wykonania dyrektywy 2007/2/WE Parlamentu Europejskiego i Rady w zakresie interoperacyjności zbiorów i usług danych przestrzennych</inspire_common:Title>
+					<inspire_common:DateOfPublication>2010-12-08</inspire_common:DateOfPublication>
+					<inspire_common:URI>OJ:L:2010:323:0011:0102:PL:PDF</inspire_common:URI>
+					<inspire_common:ResourceLocator>
+						<inspire_common:URL>http://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=OJ:L:2010:323:0011:0102:PL:PDF</inspire_common:URL>
+						<inspire_common:MediaType>application/pdf</inspire_common:MediaType>
+					</inspire_common:ResourceLocator>
+				</inspire_common:Specification>
+				<inspire_common:Degree>notConformant</inspire_common:Degree>
+			</inspire_common:Conformity>
+			<inspire_common:MetadataPointOfContact>
+				<inspire_common:OrganisationName>Centralny Ośrodek Dokumentacji Geodezyjnej i Kartograficznej</inspire_common:OrganisationName>
+				<inspire_common:EmailAddress>geoportal at geoportal.gov.pl</inspire_common:EmailAddress>
+			</inspire_common:MetadataPointOfContact>
+			<inspire_common:MetadataDate>2012-10-24</inspire_common:MetadataDate>
+			<inspire_common:SpatialDataServiceType>view</inspire_common:SpatialDataServiceType>
+			<inspire_common:MandatoryKeyword>
+				<inspire_common:KeywordValue>infoMapAccessService</inspire_common:KeywordValue>
+			</inspire_common:MandatoryKeyword>
+			<inspire_common:Keyword xsi:type="inspire_common:inspireTheme_pol">
+				<inspire_common:OriginatingControlledVocabulary>
+					<inspire_common:Title>GEMET - INSPIRE themes</inspire_common:Title>
+					<inspire_common:DateOfPublication>2008-06-01</inspire_common:DateOfPublication>
+				</inspire_common:OriginatingControlledVocabulary>
+				<inspire_common:KeywordValue>Użytkowanie terenu</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>WMTS</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Tiled</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>View service</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Web Map Tile Service</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Usługa przeglądania</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Aerial ortoimagery</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Aerial photography</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Dane referencyjne</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Fotografia terenu</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Land image</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Land photography</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Obraz terenu</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Orthoimagery</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Ortofotogram</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Ortofotomapa lotnicza</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Ortofotomapa</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Raster</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Rastry</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Referential data</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Zdjęcie lotnicze</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Sporządzanie ortoobrazów</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:SupportedLanguages xmlns="http://inspire.ec.europa.eu/schemas/common/1.0">
+				<inspire_common:DefaultLanguage>
+					<inspire_common:Language>pol</inspire_common:Language>
+				</inspire_common:DefaultLanguage>
+			</inspire_common:SupportedLanguages>
+			<inspire_common:ResponseLanguage xmlns="http://inspire.ec.europa.eu/schemas/common/1.0">
+				<inspire_common:Language>pol</inspire_common:Language>
+			</inspire_common:ResponseLanguage>
+			<inspire_common:MetadataUrl>
+				<inspire_common:URL>http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd&ID=8b61894c-5e89-4626-8353-9f00b302d2eb</inspire_common:URL>
+				<inspire_common:MediaType>text/xml</inspire_common:MediaType>
+			</inspire_common:MetadataUrl>
+		</inspire_vs:ExtendedCapabilities>
+	</ows:OperationsMetadata>
+	<Contents>
+		<Layer>
+			<ows:Title>ORTOFOTOMAPA</ows:Title>
+			<ows:Abstract>Warstwa prezentująca ortofotomapę utworzoną ze zdjęć lotniczych.</ows:Abstract>
+			<ows:Keywords>
+				<ows:Keyword>Ortofotomapa</ows:Keyword>
+			</ows:Keywords>
+			<ows:Identifier>ORTOFOTOMAPA</ows:Identifier>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd&ID=b0c395a9-b92c-408e-a37e-06fa772a4ac2"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd&ID=ac363dce-91cb-4518-a4a3-f7e088811b11"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd&ID=21162299-f3c9-4d96-9b64-542d5557c9f7"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd&ID=65757f80-0fe9-11df-8a39-0800200c9a66"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd&ID=36440873-342a-47ad-b167-f24cd60e2f7d"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd&ID=abf8dc2d-a36a-4e29-9a8c-54cd51bdb525"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd&ID=49062708-089e-4d8e-9376-a53220bda2f7"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd&ID=e8e65f25-2b6a-4dae-bd97-97b057cd484a"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd&ID=b3b4d1fa-e2da-4360-a5da-4e7c50240164"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd&ID=09bc4e9c-362f-486d-b283-13f0b1067eb4"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd&ID=5efe5701-6d56-42ec-a495-bcfde95ed762"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd&ID=0c799a9f-76e0-4c9a-863f-81a70733c9f5"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd&ID=e4c17d3b-dfdd-4686-a7c9-79d749a5ff0c"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd&ID=2fc68963-45dd-4061-8d8b-5ca1630bb672"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd&ID=8a338383-2bd7-44f5-b925-6ad4ce6eb858"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd&ID=b6d807be-8157-4c6e-90a2-587bea0a203c"/>
+			<Style isDefault="true">
+				<ows:Title>Styl domyślny dla ortofotomapy</ows:Title>
+				<ows:Identifier>default</ows:Identifier>		
+				<LegendURL format="image/png" xlink:href="http://mapy.geoportal.gov.pl/wss/service/WMTS/guest/ORTO/legenda.png"/> 
+			</Style>
+			<Format>image/jpeg</Format>
+			<InfoFormat>text/html</InfoFormat>
+		    <InfoFormat>text/xml; subtype=gml/3.2</InfoFormat>
+		    <InfoFormat>application/gml+xml; version=3.2</InfoFormat>
+		    
+		    
+    
+   
+    <TileMatrixSetLink>
+	<TileMatrixSet>EPSG:2180</TileMatrixSet>
+      <TileMatrixSetLimits>
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:2180:0</TileMatrix>
+          <MinTileRow>0</MinTileRow>
+          <MaxTileRow>0</MaxTileRow>
+          <MinTileCol>0</MinTileCol>
+          <MaxTileCol>0</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:2180:1</TileMatrix>
+          <MinTileRow>0</MinTileRow>
+          <MaxTileRow>1</MaxTileRow>
+          <MinTileCol>0</MinTileCol>
+          <MaxTileCol>1</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:2180:2</TileMatrix>
+          <MinTileRow>0</MinTileRow>
+          <MaxTileRow>2</MaxTileRow>
+          <MinTileCol>0</MinTileCol>
+          <MaxTileCol>2</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:2180:3</TileMatrix>
+          <MinTileRow>0</MinTileRow>
+          <MaxTileRow>5</MaxTileRow>
+          <MinTileCol>0</MinTileCol>
+          <MaxTileCol>5</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:2180:4</TileMatrix>
+          <MinTileRow>0</MinTileRow>
+          <MaxTileRow>10</MaxTileRow>
+          <MinTileCol>0</MinTileCol>
+          <MaxTileCol>11</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:2180:5</TileMatrix>
+          <MinTileRow>1</MinTileRow>
+          <MaxTileRow>21</MaxTileRow>
+          <MinTileCol>1</MinTileCol>
+          <MaxTileCol>22</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:2180:6</TileMatrix>
+          <MinTileRow>3</MinTileRow>
+          <MaxTileRow>53</MaxTileRow>
+          <MinTileCol>4</MinTileCol>
+          <MaxTileCol>56</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:2180:7</TileMatrix>
+          <MinTileRow>7</MinTileRow>
+          <MaxTileRow>107</MaxTileRow>
+          <MinTileCol>9</MinTileCol>
+          <MaxTileCol>113</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:2180:8</TileMatrix>
+          <MinTileRow>14</MinTileRow>
+          <MaxTileRow>214</MaxTileRow>
+          <MinTileCol>19</MinTileCol>
+          <MaxTileCol>227</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:2180:9</TileMatrix>
+          <MinTileRow>36</MinTileRow>
+          <MaxTileRow>535</MaxTileRow>
+          <MinTileCol>47</MinTileCol>
+          <MaxTileCol>568</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:2180:10</TileMatrix>
+          <MinTileRow>73</MinTileRow>
+          <MaxTileRow>1070</MaxTileRow>
+          <MinTileCol>95</MinTileCol>
+          <MaxTileCol>1136</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:2180:11</TileMatrix>
+          <MinTileRow>184</MinTileRow>
+          <MaxTileRow>2675</MaxTileRow>
+          <MinTileCol>239</MinTileCol>
+          <MaxTileCol>2842</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:2180:12</TileMatrix>
+          <MinTileRow>369</MinTileRow>
+          <MaxTileRow>5351</MaxTileRow>
+          <MinTileCol>479</MinTileCol>
+          <MaxTileCol>5684</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:2180:13</TileMatrix>
+          <MinTileRow>738</MinTileRow>
+          <MaxTileRow>10703</MaxTileRow>
+          <MinTileCol>959</MinTileCol>
+          <MaxTileCol>11368</MaxTileCol>
+        </TileMatrixLimits>
+    
+      </TileMatrixSetLimits>
+    </TileMatrixSetLink>
+  
+   
+    <TileMatrixSetLink>
+	<TileMatrixSet>EPSG:4326</TileMatrixSet>
+      <TileMatrixSetLimits>
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:4326:0</TileMatrix>
+          <MinTileRow>0</MinTileRow>
+          <MaxTileRow>0</MaxTileRow>
+          <MinTileCol>0</MinTileCol>
+          <MaxTileCol>1</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:4326:1</TileMatrix>
+          <MinTileRow>0</MinTileRow>
+          <MaxTileRow>1</MaxTileRow>
+          <MinTileCol>0</MinTileCol>
+          <MaxTileCol>2</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:4326:2</TileMatrix>
+          <MinTileRow>0</MinTileRow>
+          <MaxTileRow>2</MaxTileRow>
+          <MinTileCol>0</MinTileCol>
+          <MaxTileCol>5</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:4326:3</TileMatrix>
+          <MinTileRow>0</MinTileRow>
+          <MaxTileRow>5</MaxTileRow>
+          <MinTileCol>1</MinTileCol>
+          <MaxTileCol>10</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:4326:4</TileMatrix>
+          <MinTileRow>1</MinTileRow>
+          <MaxTileRow>11</MaxTileRow>
+          <MinTileCol>2</MinTileCol>
+          <MaxTileCol>20</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:4326:5</TileMatrix>
+          <MinTileRow>3</MinTileRow>
+          <MaxTileRow>23</MaxTileRow>
+          <MinTileCol>5</MinTileCol>
+          <MaxTileCol>41</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:4326:6</TileMatrix>
+          <MinTileRow>8</MinTileRow>
+          <MaxTileRow>58</MaxTileRow>
+          <MinTileCol>14</MinTileCol>
+          <MaxTileCol>104</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:4326:7</TileMatrix>
+          <MinTileRow>17</MinTileRow>
+          <MaxTileRow>116</MaxTileRow>
+          <MinTileCol>29</MinTileCol>
+          <MaxTileCol>209</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:4326:8</TileMatrix>
+          <MinTileRow>35</MinTileRow>
+          <MaxTileRow>233</MaxTileRow>
+          <MinTileCol>58</MinTileCol>
+          <MaxTileCol>418</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:4326:9</TileMatrix>
+          <MinTileRow>87</MinTileRow>
+          <MaxTileRow>584</MaxTileRow>
+          <MinTileCol>146</MinTileCol>
+          <MaxTileCol>1047</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:4326:10</TileMatrix>
+          <MinTileRow>175</MinTileRow>
+          <MaxTileRow>1168</MaxTileRow>
+          <MinTileCol>292</MinTileCol>
+          <MaxTileCol>2094</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:4326:11</TileMatrix>
+          <MinTileRow>439</MinTileRow>
+          <MaxTileRow>2921</MaxTileRow>
+          <MinTileCol>731</MinTileCol>
+          <MaxTileCol>5236</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:4326:12</TileMatrix>
+          <MinTileRow>879</MinTileRow>
+          <MaxTileRow>5842</MaxTileRow>
+          <MinTileCol>1463</MinTileCol>
+          <MaxTileCol>10473</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:4326:13</TileMatrix>
+          <MinTileRow>1759</MinTileRow>
+          <MaxTileRow>11685</MaxTileRow>
+          <MinTileCol>2926</MinTileCol>
+          <MaxTileCol>20946</MaxTileCol>
+        </TileMatrixLimits>
+    
+      </TileMatrixSetLimits>
+    </TileMatrixSetLink>
+  
+	</Layer>
+	
+  <TileMatrixSet>
+    <ows:Identifier>EPSG:2180</ows:Identifier>
+    <ows:SupportedCRS>urn:ogc:def:crs:EPSG::2180</ows:SupportedCRS>
+    <TileMatrix>
+      <ows:Identifier>EPSG:2180:0</ows:Identifier>
+      <ScaleDenominator>7559538.928571429</ScaleDenominator>
+      <TopLeftCorner>850000.0 100000.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>1</MatrixWidth>
+      <MatrixHeight>1</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:2180:1</ows:Identifier>
+      <ScaleDenominator>3779769.4642857146</ScaleDenominator>
+      <TopLeftCorner>850000.0 100000.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>2</MatrixWidth>
+      <MatrixHeight>2</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:2180:2</ows:Identifier>
+      <ScaleDenominator>1889884.7321428573</ScaleDenominator>
+      <TopLeftCorner>850000.0 100000.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>3</MatrixWidth>
+      <MatrixHeight>3</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:2180:3</ows:Identifier>
+      <ScaleDenominator>944942.3660714286</ScaleDenominator>
+      <TopLeftCorner>850000.0 100000.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>6</MatrixWidth>
+      <MatrixHeight>6</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:2180:4</ows:Identifier>
+      <ScaleDenominator>472471.1830357143</ScaleDenominator>
+      <TopLeftCorner>850000.0 100000.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>12</MatrixWidth>
+      <MatrixHeight>11</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:2180:5</ows:Identifier>
+      <ScaleDenominator>236235.59151785716</ScaleDenominator>
+      <TopLeftCorner>850000.0 100000.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>23</MatrixWidth>
+      <MatrixHeight>22</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:2180:6</ows:Identifier>
+      <ScaleDenominator>94494.23660714286</ScaleDenominator>
+      <TopLeftCorner>850000.0 100000.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>57</MatrixWidth>
+      <MatrixHeight>54</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:2180:7</ows:Identifier>
+      <ScaleDenominator>47247.11830357143</ScaleDenominator>
+      <TopLeftCorner>850000.0 100000.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>114</MatrixWidth>
+      <MatrixHeight>108</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:2180:8</ows:Identifier>
+      <ScaleDenominator>23623.559151785714</ScaleDenominator>
+      <TopLeftCorner>850000.0 100000.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>228</MatrixWidth>
+      <MatrixHeight>215</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:2180:9</ows:Identifier>
+      <ScaleDenominator>9449.423660714287</ScaleDenominator>
+      <TopLeftCorner>850000.0 100000.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>569</MatrixWidth>
+      <MatrixHeight>536</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:2180:10</ows:Identifier>
+      <ScaleDenominator>4724.711830357143</ScaleDenominator>
+      <TopLeftCorner>850000.0 100000.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>1137</MatrixWidth>
+      <MatrixHeight>1071</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:2180:11</ows:Identifier>
+      <ScaleDenominator>1889.8847321428573</ScaleDenominator>
+      <TopLeftCorner>850000.0 100000.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>2843</MatrixWidth>
+      <MatrixHeight>2676</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:2180:12</ows:Identifier>
+      <ScaleDenominator>944.9423660714286</ScaleDenominator>
+      <TopLeftCorner>850000.0 100000.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>5685</MatrixWidth>
+      <MatrixHeight>5352</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:2180:13</ows:Identifier>
+      <ScaleDenominator>472.4711830357143</ScaleDenominator>
+      <TopLeftCorner>850000.0 100000.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>11369</MatrixWidth>
+      <MatrixHeight>10704</MatrixHeight>
+    </TileMatrix>
+    
+    
+</TileMatrixSet>
+
+ 
+  <TileMatrixSet>
+    <ows:Identifier>EPSG:4326</ows:Identifier>
+    <ows:SupportedCRS>urn:ogc:def:crs:EPSG::4326</ows:SupportedCRS>
+    <TileMatrix>
+      <ows:Identifier>EPSG:4326:0</ows:Identifier>
+      <ScaleDenominator>7559538.928571429</ScaleDenominator>
+      <TopLeftCorner>56.0 12.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>2</MatrixWidth>
+      <MatrixHeight>1</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:4326:1</ows:Identifier>
+      <ScaleDenominator>3779769.4642857146</ScaleDenominator>
+      <TopLeftCorner>56.0 12.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>3</MatrixWidth>
+      <MatrixHeight>2</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:4326:2</ows:Identifier>
+      <ScaleDenominator>1889884.7321428573</ScaleDenominator>
+      <TopLeftCorner>56.0 12.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>6</MatrixWidth>
+      <MatrixHeight>3</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:4326:3</ows:Identifier>
+      <ScaleDenominator>944942.3660714286</ScaleDenominator>
+      <TopLeftCorner>56.0 12.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>11</MatrixWidth>
+      <MatrixHeight>6</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:4326:4</ows:Identifier>
+      <ScaleDenominator>472471.1830357143</ScaleDenominator>
+      <TopLeftCorner>56.0 12.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>21</MatrixWidth>
+      <MatrixHeight>12</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:4326:5</ows:Identifier>
+      <ScaleDenominator>236235.59151785716</ScaleDenominator>
+      <TopLeftCorner>56.0 12.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>42</MatrixWidth>
+      <MatrixHeight>24</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:4326:6</ows:Identifier>
+      <ScaleDenominator>94494.23660714286</ScaleDenominator>
+      <TopLeftCorner>56.0 12.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>105</MatrixWidth>
+      <MatrixHeight>59</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:4326:7</ows:Identifier>
+      <ScaleDenominator>47247.11830357143</ScaleDenominator>
+      <TopLeftCorner>56.0 12.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>210</MatrixWidth>
+      <MatrixHeight>117</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:4326:8</ows:Identifier>
+      <ScaleDenominator>23623.559151785714</ScaleDenominator>
+      <TopLeftCorner>56.0 12.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>419</MatrixWidth>
+      <MatrixHeight>234</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:4326:9</ows:Identifier>
+      <ScaleDenominator>9449.423660714287</ScaleDenominator>
+      <TopLeftCorner>56.0 12.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>1048</MatrixWidth>
+      <MatrixHeight>585</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:4326:10</ows:Identifier>
+      <ScaleDenominator>4724.711830357143</ScaleDenominator>
+      <TopLeftCorner>56.0 12.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>2095</MatrixWidth>
+      <MatrixHeight>1169</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:4326:11</ows:Identifier>
+      <ScaleDenominator>1889.8847321428573</ScaleDenominator>
+      <TopLeftCorner>56.0 12.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>5237</MatrixWidth>
+      <MatrixHeight>2922</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:4326:12</ows:Identifier>
+      <ScaleDenominator>944.9423660714286</ScaleDenominator>
+      <TopLeftCorner>56.0 12.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>10474</MatrixWidth>
+      <MatrixHeight>5843</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:4326:13</ows:Identifier>
+      <ScaleDenominator>472.4711830357143</ScaleDenominator>
+      <TopLeftCorner>56.0 12.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>20947</MatrixWidth>
+      <MatrixHeight>11686</MatrixHeight>
+    </TileMatrix>
+    
+    
+</TileMatrixSet>
+
+ 
+	</Contents>
+</Capabilities>
\ No newline at end of file
diff --git a/test/data/wmts/getcapabilities-TOPO.xml b/test/data/wmts/getcapabilities-TOPO.xml
new file mode 100644
index 0000000..5ae2df3
--- /dev/null
+++ b/test/data/wmts/getcapabilities-TOPO.xml
@@ -0,0 +1,890 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Capabilities xmlns="http://www.opengis.net/wmts/1.0" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:inspire_common="http://inspire.ec.europa.eu/schemas/common/1.0" xmlns:inspire_vs="http://inspire.ec.europa.eu/schemas/inspire_vs_ows11/1.0" version="1.0.0" xsi:schemaLocation="http://www.opengis.net/wmts/1.0 http://schemas.opengis.net/wmts/1.0/wmtsGetCapabilities_response.xsd http://inspire. [...]
+	<ows:ServiceIdentification>
+		<ows:Title>Usługa przeglądania rastrowych map topograficznych dla Polski. Profil kafelkowany (WMTS)</ows:Title>
+		<ows:Abstract>Usługa przeglądania rastrowych map topograficznych dla obszaru Polski. Mapa topograficzna Polski jest wielkoskalowym urzędowym opracowaniem kartograficznym, sporządzanym i aktualizowanym w sposób jednolity dla całego kraju. Jej treść stanowią elementy środowiska geograficznego powierzchni Ziemi i ich przestrzenne związki. Usługa wykorzystuje interfejs WMTS OGC w wersji 1.0.0. </ows:Abstract>
+		<ows:Keywords>
+			<ows:Keyword>WMTS</ows:Keyword>
+			<ows:Keyword>Tiled</ows:Keyword>
+			<ows:Keyword>Web Map Tile Service</ows:Keyword>
+			<ows:Keyword>Zagospodarowanie przestrzenne</ows:Keyword>
+			<ows:Keyword>Wody i obiekty z nimi związane</ows:Keyword>
+			<ows:Keyword>Transport networks</ows:Keyword>
+			<ows:Keyword>Sieci transportowe</ows:Keyword>
+			<ows:Keyword>Sea regions</ows:Keyword>
+			<ows:Keyword>Rzeźba terenu</ows:Keyword>
+			<ows:Keyword>Roślinność, uprawy i grunty</ows:Keyword>
+			<ows:Keyword>Regiony morskie</ows:Keyword>
+			<ows:Keyword>Railways</ows:Keyword>
+			<ows:Keyword>Railway stations</ows:Keyword>
+			<ows:Keyword>Obiekty gospodarcze</ows:Keyword>
+			<ows:Keyword>Nazwy geograficzne</ows:Keyword>
+			<ows:Keyword>Land use</ows:Keyword>
+			<ows:Keyword>Land relief</ows:Keyword>
+			<ows:Keyword>Koleje i obiekty z nimi związane</ows:Keyword>
+			<ows:Keyword>Granice</ows:Keyword>
+			<ows:Keyword>Geographical names</ows:Keyword>
+			<ows:Keyword>Geodetic control network points</ows:Keyword>
+			<ows:Keyword>Drogi i obiekty z nimi związane</ows:Keyword>
+			<ows:Keyword>Buildings</ows:Keyword>
+			<ows:Keyword>Budynki</ows:Keyword>
+			<ows:Keyword>Budynki i budowle</ows:Keyword>
+			<ows:Keyword>Boundary</ows:Keyword>
+			<ows:Keyword>Boundaries</ows:Keyword>
+		</ows:Keywords>
+		<ows:ServiceType>OGC WMTS</ows:ServiceType>
+		<ows:ServiceTypeVersion>1.0.0</ows:ServiceTypeVersion>
+		<ows:Fees>Korzystanie z usługi danych przestrzennych oznacza akceptację bez ograniczeń i zastrzeżeń Regulaminu dostępnego na stronie internetowej Geoportalu http://www.geoportal.gov.pl/</ows:Fees>
+		<ows:AccessConstraints>brak ograniczeń</ows:AccessConstraints> 
+	</ows:ServiceIdentification>
+	<ows:ServiceProvider>
+		<ows:ProviderName>Centralny Ośrodek Dokumentacji Geodezyjnej i Kartograficznej </ows:ProviderName>
+		<ows:ProviderSite xlink:type="simple" xlink:href="www.geoportal.gov.pl"/>
+		<ows:ServiceContact>
+			<ows:IndividualName>Dział Geoportal</ows:IndividualName>
+			<ows:ContactInfo>
+				<ows:Phone>
+					<ows:Voice>+48225322501</ows:Voice>
+				</ows:Phone>
+				<ows:Address>
+					<ows:DeliveryPoint>ul. Jana Olbrachta 94B</ows:DeliveryPoint>
+					<ows:City>Warszawa</ows:City>
+					<ows:AdministrativeArea>mazowieckie</ows:AdministrativeArea>
+					<ows:PostalCode>01-102</ows:PostalCode>
+					<ows:Country>Polska</ows:Country>
+					<ows:ElectronicMailAddress>geoportal at geoportal.gov.pl</ows:ElectronicMailAddress>
+				</ows:Address>
+			</ows:ContactInfo>
+		</ows:ServiceContact>
+	</ows:ServiceProvider>
+	<ows:OperationsMetadata>
+		<ows:Operation name="GetCapabilities">
+			<ows:DCP>
+				<ows:HTTP>
+					<ows:Get xlink:href="http://mapy.geoportal.gov.pl/wss/service/WMTS/guest/wmts/TOPO?">
+						<ows:Constraint name="GetEncoding">
+							<ows:AllowedValues>
+								<ows:Value>KVP</ows:Value>
+							</ows:AllowedValues>
+						</ows:Constraint>
+					</ows:Get>
+				</ows:HTTP>
+			</ows:DCP>
+		</ows:Operation>
+		<ows:Operation name="GetTile">
+			<ows:DCP>
+				<ows:HTTP>
+					<ows:Get xlink:href="http://mapy.geoportal.gov.pl/wss/service/WMTS/guest/wmts/TOPO?">
+						<ows:Constraint name="GetEncoding">
+							<ows:AllowedValues>
+								<ows:Value>KVP</ows:Value>
+							</ows:AllowedValues>
+						</ows:Constraint>
+					</ows:Get>
+				</ows:HTTP>
+			</ows:DCP>
+		</ows:Operation>
+		<ows:Operation name="GetFeatureInfo">
+			<ows:DCP>
+				<ows:HTTP>
+					<ows:Get xlink:href="http://mapy.geoportal.gov.pl/wss/service/WMTS/guest/wmts/TOPO?">
+						<ows:Constraint name="GetEncoding">
+							<ows:AllowedValues>
+								<ows:Value>KVP</ows:Value>
+							</ows:AllowedValues>
+						</ows:Constraint>
+					</ows:Get>
+				</ows:HTTP>
+			</ows:DCP>
+		</ows:Operation>
+		<inspire_vs:ExtendedCapabilities>
+			<inspire_common:ResourceLocator>
+				<inspire_common:URL>http://mapy.geoportal.gov.pl/wss/service/WMTS/guest/wmts/TOPO?REQUEST=GetCapabilities&SERVICE=WMTS</inspire_common:URL>
+				<inspire_common:MediaType>text/xml</inspire_common:MediaType>
+			</inspire_common:ResourceLocator>
+			<inspire_common:ResourceType>service</inspire_common:ResourceType>
+			<inspire_common:TemporalReference>
+				<inspire_common:DateOfPublication>2012-10-24</inspire_common:DateOfPublication>
+			</inspire_common:TemporalReference>
+			<inspire_common:Conformity>
+				<inspire_common:Specification xsi:type="inspire_common:citationInspireInteroperabilityRegulation_pol">
+					<inspire_common:Title>ROZPORZĄDZENIE KOMISJI (UE) NR 1089/2010 z dnia 23 listopada 2010 r. w sprawie wykonania dyrektywy 2007/2/WE Parlamentu Europejskiego i Rady w zakresie interoperacyjności zbiorów i usług danych przestrzennych</inspire_common:Title>
+					<inspire_common:DateOfPublication>2010-12-08</inspire_common:DateOfPublication>
+					<inspire_common:URI>OJ:L:2010:323:0011:0102:PL:PDF</inspire_common:URI>
+					<inspire_common:ResourceLocator>
+						<inspire_common:URL>http://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=OJ:L:2010:323:0011:0102:PL:PDF</inspire_common:URL>
+						<inspire_common:MediaType>application/pdf</inspire_common:MediaType>
+					</inspire_common:ResourceLocator>
+				</inspire_common:Specification>
+				<inspire_common:Degree>notConformant</inspire_common:Degree>
+			</inspire_common:Conformity>
+			<inspire_common:MetadataPointOfContact>
+				<inspire_common:OrganisationName>Centralny Ośrodek Dokumentacji Geodezyjnej i Kartograficznej</inspire_common:OrganisationName>
+				<inspire_common:EmailAddress>geoportal at geoportal.gov.pl</inspire_common:EmailAddress>
+			</inspire_common:MetadataPointOfContact>
+			<inspire_common:MetadataDate>2012-10-24</inspire_common:MetadataDate>
+			<inspire_common:SpatialDataServiceType>view</inspire_common:SpatialDataServiceType>
+			<inspire_common:MandatoryKeyword>
+				<inspire_common:KeywordValue>infoMapAccessService</inspire_common:KeywordValue>
+			</inspire_common:MandatoryKeyword>
+			<inspire_common:Keyword xsi:type="inspire_common:inspireTheme_pol">
+				<inspire_common:OriginatingControlledVocabulary>
+					<inspire_common:Title>GEMET - INSPIRE themes</inspire_common:Title>
+					<inspire_common:DateOfPublication>2008-06-01</inspire_common:DateOfPublication>
+				</inspire_common:OriginatingControlledVocabulary>
+				<inspire_common:KeywordValue>Użytkowanie terenu</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>WMTS</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Tiled</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Web Map Tile Service</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Boundaries</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Boundary</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Budynki i budowle</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Budynki</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Buildings</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Drogi i obiekty z nimi związane</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Geodetic control network points</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Geographical names</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Granice</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Koleje i obiekty z nimi związane</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Land relief</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Land use</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Nazwy geograficzne</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Obiekty gospodarcze</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Railway stations</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Railways</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Regiony morskie</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Roślinność, uprawy i grunty</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Rzeźba terenu</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Sea regions</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Sieci transportowe</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Transport networks</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Wody i obiekty z nimi związane</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:Keyword>
+				<inspire_common:KeywordValue>Zagospodarowanie przestrzenne</inspire_common:KeywordValue>
+			</inspire_common:Keyword>
+			<inspire_common:SupportedLanguages xmlns="http://inspire.ec.europa.eu/schemas/common/1.0">
+				<inspire_common:DefaultLanguage>
+					<inspire_common:Language>pol</inspire_common:Language>
+				</inspire_common:DefaultLanguage>
+			</inspire_common:SupportedLanguages>
+			<inspire_common:ResponseLanguage xmlns="http://inspire.ec.europa.eu/schemas/common/1.0">
+				<inspire_common:Language>pol</inspire_common:Language>
+			</inspire_common:ResponseLanguage>
+			<inspire_common:MetadataUrl>
+				<inspire_common:URL>http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd&ID=a658ac75-e2c6-4405-8bae-8d0f98f1babf</inspire_common:URL>
+				<inspire_common:MediaType>text/xml</inspire_common:MediaType>
+			</inspire_common:MetadataUrl>
+		</inspire_vs:ExtendedCapabilities>
+	</ows:OperationsMetadata>
+	<Contents>
+		<Layer>
+			<ows:Title>MAPA TOPOGRAFICZNA</ows:Title>
+			<ows:Abstract>Warstwa prezentująca rastrową mapę topograficzną</ows:Abstract>
+			<ows:Keywords>
+				<ows:Keyword>Mapa topograficzna</ows:Keyword>
+			</ows:Keywords>
+			<ows:Identifier>MAPA TOPOGRAFICZNA</ows:Identifier>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=2394082c-56b0-4d6c-b877-40fe5192f489&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=7c66424b-5cb7-46e2-a093-eb2536bd7ee3&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=e44c7e17-54fa-4857-8bf0-dea6f3995a25&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=28795640-bb42-48d5-bb0a-76837729cb0f&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=5a44a4c3-1bd6-4221-9a5d-9b1ef0a580c3&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=a81f32f3-1826-4356-93fd-c87f468bbf38&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=b5a4ea76-4348-473e-bf82-49bb1d959d4a&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=ea41623c-4e74-4d9f-ad4a-d977b86e323d&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=85c58c16-0d7c-464e-b06a-539cc00d443f&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=ef54f773-8e0c-4916-bf17-76aa03394735&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=8a1ad8bb-2319-460f-b8d9-2ff7f188557d&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=17b603d8-b5c7-4b61-ad92-55f396f93f5d&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=3da84f4a-3b0c-4ded-a727-a83f14f562c5&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=1254ad45-d875-497f-b238-8c8f025f7f28&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=26bddb02-cd91-4563-bd9c-2acc42caec77&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=9936d901-6289-4067-96af-b5671bcbb366&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=b4abe60a-4fb3-4e5e-ad84-c7b2bfe62173&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=d743643b-ee18-417c-ae39-2b8205c0a0ac&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=8d32b509-068a-4c0b-bc54-758a1c8d04d6&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=165177bb-a595-4532-9b12-4d5920f09b2e&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=cdb7538b-f8f8-41b9-bb60-41d431785d15&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=1e271af9-4ada-4c52-a464-cede4af6336e&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=ce2745a2-8186-4049-9c87-b672465e1dd3&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=0e4a48d7-edb1-487b-9389-8ea6a5d51f48&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=a60cdac8-c2a6-4f2d-855e-6fa95df0c490&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=e4e3c5f1-8c44-424b-9198-a6bd08534651&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=166a1466-ca16-4454-b09d-525c9dd4eafc&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=76d200f7-4f80-4ccf-9fff-625b97ed20f0&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=f7c1f40a-4402-4e68-a4bf-31f2ab23afe1&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=45d7c316-3df8-47cf-befc-834746f10fe0&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=9cdd82e4-7164-41f9-a987-66a7b5792420&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=3082b644-f710-48d9-8f37-c8516a2583af&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=78009945-ac8a-4eda-97ef-76ffc2155c34&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=ed1447c5-f47f-4b8e-b84b-8ada731cd34d&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=aa101eeb-0bde-492d-ab13-950571f45712&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=2149db7f-5d67-43d3-8d0d-851f7e7c5690&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=198cc302-5fa9-4808-aada-e1cb9086b0d4&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=99f7c5bc-de8e-4dc5-9630-851a5872425d&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=f31dc834-fc33-474b-a033-1e26b8f2c82b&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=9c1d1a77-41a9-4f2d-aa4a-60d2fef4aa6f&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=a80b842b-e9d1-4d56-beae-02541aad9b16&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=6f876f3a-70fc-4429-ab08-ec109990bd0e&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=a96fc82b-bb87-4b31-9b5a-486940c75c09&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=5aa2b24b-a048-409d-857b-3673f8b8d11a&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=b6ce2a0c-f1fc-4ec3-b8e4-158356eb6dc7&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=21becd36-2a71-49d4-8c84-1173f193b522&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=7814ee5a-a1f2-43ca-83b6-2ece8f15eb2a&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=74b8c281-938c-4055-b579-1861c2b9cf8d&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=ff669880-8e76-4470-9847-0ff79195894a&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=9e463571-8e6e-427e-a868-8db8471edb43&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=4ae04e43-0234-4022-a28d-887f5d494799&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=f1f0868a-0e0a-4181-bbdf-1a262e6cf40d&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=9c502ba0-2e04-4f0d-9653-4e2027a856b9&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=e1084309-84ef-4c9c-9cf5-e77e817ebf66&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=2ffd5d4f-9a48-44fe-991f-767df1ac8829&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=8c16c478-6fce-4a85-8fdd-07dcb86dbc6d&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=d781ea1e-3d3a-4f52-82c4-be2f84bd5b58&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=fa77d76c-ada7-47fe-8e59-9cbb22782b15&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=dbc0739e-e8f6-48cf-a054-c0e1fe93b3b9&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=15f4b0ba-c4dd-4807-a5eb-5a182aed5bfe&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=5cf620ea-874d-4cc3-9f47-18ddcae64555&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=8add5a9a-9a06-4562-b09b-0314ab60a681&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=ef0a91c7-b040-4f7b-b792-173bdbf02509&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=46786374-dfd4-4f8a-ae89-312ff1523290&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=e98e05b4-7d72-4f02-b6ad-ea205455c7af&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=7518e1d0-e91e-4485-90c0-51de2801faee&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=e885a9be-6145-4e46-a6f3-74fb3594b741&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=337c2f6f-0b04-4517-b2d0-e2c4bfa75cc0&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=2eca49be-2e99-43f5-b957-218cf1e672f9&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=05b5ac2e-cb0e-4218-a3a7-c466e7de9018&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=31cfd901-5463-4157-84dd-c771a79c5516&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=d940d836-1c80-46db-b0f9-b28361ce8b05&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=77ee9941-1c10-42aa-9276-5daaad01db52&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=8e024bec-33e9-4d4f-b3ea-f1f45aa87d68&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=29fdc2c1-f9ec-4e3b-8b99-bd51dcbf1ddc&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=df7cbf8a-feb4-4ce5-9da1-7e0e97379aa1&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=cf1f8637-54c1-464d-a451-a465871325ed&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=70cd76d2-08e2-4bef-b33f-60c571b2f461&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=609d7a26-e030-43a3-bfd1-8fd93897448d&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=d3f574dd-f2c4-4292-9f01-e38dbcbb552f&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=b3de61ab-3e0a-40fd-ac13-7226da40dcc9&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=51da7c13-30d4-4096-a19b-0533040a3c49&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=40e391fd-f433-49a6-8550-7d6db6ad1071&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=615d2830-7a98-49b0-a34c-0e7b964caf5a&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=839a3ae5-eb87-4258-b8a0-9126f52ed5ab&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=e4cf00e0-0dde-4df4-8678-7f8289efde9d&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=a35ed65c-79bd-446a-9328-2893d1593ba2&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=bf3695e0-8a34-437d-8e18-e8e40752484b&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=3b064e38-78b3-4514-8594-bd96beabc37f&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=035d324a-c5bd-4b08-8683-f10465b3371e&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=bf81fea4-aece-4590-a69a-0f81cb1211a4&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=b0a1d3db-4fae-4ddb-9274-8257697311db&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=50e2ec68-65cd-49fe-b50d-18660829b7ed&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=512b3aa6-4f23-48eb-b7b7-1d0b8df63f0d&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=46185c64-09b5-44e8-abfb-c9b324d11b45&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=9292c599-2387-4da6-8415-fa5e6cd9c68e&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=65955f07-d2ad-4e1a-9821-5b98245d14a4&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=b208bac3-2ae1-475f-a086-5b8e7edd5459&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=1f37e4cb-a0bb-4897-a4f5-cfb61f835f04&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=2b5b8ec0-c610-4f5f-9ad2-de223dba9e01&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=7b81454c-0b25-4c91-a118-4a515c648063&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=6a771193-4540-40f2-b346-008382b47748&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=c0fc7faf-2772-4791-b82a-4a77439913f1&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=dde745fd-e27d-47d7-a705-747f7590051e&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=a0c61f97-b03d-4b6e-b880-3b3adebf2fd7&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=5c3774a0-a4be-4ba1-ad26-7b83a7fa87ed&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=faf7b8fd-482d-4521-b6fe-ba11eabccde8&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=f6f3828f-9f52-4cb8-bfef-ccc4b8efd556&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=c5d71afa-c9af-47c0-ad13-7dd07df7b6dc&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=8aa23dbc-994b-47d5-9734-224a725208ab&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=d75e0fe6-b22d-480b-9d45-4f916771caf9&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=ceea656e-6f51-4c6a-861b-a94228105b4d&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=8a2ee61b-4b4c-401d-89e8-51a422c0fc6a&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=b4e4189b-e1ea-424d-8f99-ce8479320879&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=5b1520f4-2778-47de-ba4e-26d8b8e775b1&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=553f1dc2-2bc5-4d8f-b365-120c7f47ec67&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=1e3fa885-e296-406a-9d33-12ef1b490c94&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=e0cb643d-aca5-47f1-bee0-7524ed0cdd77&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=d224d937-3c37-4b86-b351-370f3e4414c7&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=627721d4-b72d-4051-90b8-3d117692217d&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=0eea456c-65ef-4e79-93af-d1d5844bf2a9&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=50a0f02d-8180-425e-a6e6-a896f22b55fb&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=57c9db00-4358-49f2-9f0a-24d3fd99c96b&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=52152f60-1c64-490f-94ab-674a8fca9184&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=cc78be09-98ab-4bf7-872c-e6d017997679&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=e68baffd-af42-46c3-8261-e603e2421d27&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=ba9270b9-89e3-44d6-8a1c-a4be04135eea&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=43df6dc9-8f19-4865-a4ba-5e595e262a1b&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=63689c14-00e0-4f2c-8559-ac0a8c7f66cc&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=08a4cbc7-4870-449c-9aa2-6183e994a680&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=be32b35e-f81d-4d7a-a093-0da17d26de52&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=49bb53b4-1d77-45b8-baaf-e253fd8b543d&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=8d7ace66-24fc-452b-8014-7b35c8aa9595&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=409b63bb-aee8-40ed-8b72-21444197a007&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=cf189ca8-bf44-4a08-ae0b-410642c65af2&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=2ccc02d1-3c6b-4497-9c05-4dbe64d8f501&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=50f3f539-36c3-4e44-96fd-1bc8478e2f99&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=aec21e4d-6e59-4c76-9ab9-458ad7ae557c&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+						<ows:Metadata xlink:href="http://mapy.geoportal.gov.pl/wss/service/CSW/guest/CSWStartup?SERVICE=CSW&REQUEST=GetRecordById&VERSION=2.0.2&ID=d26ae241-c701-408a-a8bf-72f7708616bf&OUTPUTSCHEMA=http://www.isotc211.org/2005/gmd"/>
+			<Style isDefault="true">
+				<ows:Title>Styl domyślny dla mapy topograficznej</ows:Title>
+				<ows:Identifier>default</ows:Identifier>		
+				<LegendURL format="image/png" xlink:href="http://mapy.geoportal.gov.pl/wss/service/WMTS/guest/TOPO/legenda.png"/> 
+			</Style>
+			<Format>image/jpeg</Format>
+			<InfoFormat>text/html</InfoFormat>
+		    <InfoFormat>text/xml; subtype=gml/3.2</InfoFormat>
+		    <InfoFormat>application/gml+xml; version=3.2</InfoFormat>
+		    
+		    
+    
+   
+    <TileMatrixSetLink>
+	<TileMatrixSet>EPSG:2180</TileMatrixSet>
+      <TileMatrixSetLimits>
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:2180:0</TileMatrix>
+          <MinTileRow>0</MinTileRow>
+          <MaxTileRow>0</MaxTileRow>
+          <MinTileCol>0</MinTileCol>
+          <MaxTileCol>0</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:2180:1</TileMatrix>
+          <MinTileRow>0</MinTileRow>
+          <MaxTileRow>1</MaxTileRow>
+          <MinTileCol>0</MinTileCol>
+          <MaxTileCol>1</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:2180:2</TileMatrix>
+          <MinTileRow>0</MinTileRow>
+          <MaxTileRow>2</MaxTileRow>
+          <MinTileCol>0</MinTileCol>
+          <MaxTileCol>2</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:2180:3</TileMatrix>
+          <MinTileRow>0</MinTileRow>
+          <MaxTileRow>5</MaxTileRow>
+          <MinTileCol>0</MinTileCol>
+          <MaxTileCol>5</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:2180:4</TileMatrix>
+          <MinTileRow>0</MinTileRow>
+          <MaxTileRow>11</MaxTileRow>
+          <MinTileCol>0</MinTileCol>
+          <MaxTileCol>11</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:2180:5</TileMatrix>
+          <MinTileRow>0</MinTileRow>
+          <MaxTileRow>22</MaxTileRow>
+          <MinTileCol>0</MinTileCol>
+          <MaxTileCol>23</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:2180:6</TileMatrix>
+          <MinTileRow>1</MinTileRow>
+          <MaxTileRow>56</MaxTileRow>
+          <MinTileCol>1</MinTileCol>
+          <MaxTileCol>59</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:2180:7</TileMatrix>
+          <MinTileRow>2</MinTileRow>
+          <MaxTileRow>112</MaxTileRow>
+          <MinTileCol>3</MinTileCol>
+          <MaxTileCol>119</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:2180:8</TileMatrix>
+          <MinTileRow>5</MinTileRow>
+          <MaxTileRow>224</MaxTileRow>
+          <MinTileCol>7</MinTileCol>
+          <MaxTileCol>239</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:2180:9</TileMatrix>
+          <MinTileRow>14</MinTileRow>
+          <MaxTileRow>561</MaxTileRow>
+          <MinTileCol>18</MinTileCol>
+          <MaxTileCol>597</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:2180:10</TileMatrix>
+          <MinTileRow>29</MinTileRow>
+          <MaxTileRow>1122</MaxTileRow>
+          <MinTileCol>36</MinTileCol>
+          <MaxTileCol>1195</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:2180:11</TileMatrix>
+          <MinTileRow>73</MinTileRow>
+          <MaxTileRow>2805</MaxTileRow>
+          <MinTileCol>92</MinTileCol>
+          <MaxTileCol>2989</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:2180:12</TileMatrix>
+          <MinTileRow>147</MinTileRow>
+          <MaxTileRow>5610</MaxTileRow>
+          <MinTileCol>184</MinTileCol>
+          <MaxTileCol>5979</MaxTileCol>
+        </TileMatrixLimits>
+    
+      </TileMatrixSetLimits>
+    </TileMatrixSetLink>
+  
+   
+    <TileMatrixSetLink>
+	<TileMatrixSet>EPSG:4326</TileMatrixSet>
+      <TileMatrixSetLimits>
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:4326:0</TileMatrix>
+          <MinTileRow>0</MinTileRow>
+          <MaxTileRow>0</MaxTileRow>
+          <MinTileCol>0</MinTileCol>
+          <MaxTileCol>1</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:4326:1</TileMatrix>
+          <MinTileRow>0</MinTileRow>
+          <MaxTileRow>1</MaxTileRow>
+          <MinTileCol>0</MinTileCol>
+          <MaxTileCol>2</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:4326:2</TileMatrix>
+          <MinTileRow>0</MinTileRow>
+          <MaxTileRow>3</MaxTileRow>
+          <MinTileCol>0</MinTileCol>
+          <MaxTileCol>5</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:4326:3</TileMatrix>
+          <MinTileRow>0</MinTileRow>
+          <MaxTileRow>6</MaxTileRow>
+          <MinTileCol>0</MinTileCol>
+          <MaxTileCol>11</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:4326:4</TileMatrix>
+          <MinTileRow>1</MinTileRow>
+          <MaxTileRow>12</MaxTileRow>
+          <MinTileCol>1</MinTileCol>
+          <MaxTileCol>22</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:4326:5</TileMatrix>
+          <MinTileRow>2</MinTileRow>
+          <MaxTileRow>24</MaxTileRow>
+          <MinTileCol>3</MinTileCol>
+          <MaxTileCol>44</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:4326:6</TileMatrix>
+          <MinTileRow>5</MinTileRow>
+          <MaxTileRow>61</MaxTileRow>
+          <MinTileCol>9</MinTileCol>
+          <MaxTileCol>110</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:4326:7</TileMatrix>
+          <MinTileRow>10</MinTileRow>
+          <MaxTileRow>122</MaxTileRow>
+          <MinTileCol>18</MinTileCol>
+          <MaxTileCol>220</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:4326:8</TileMatrix>
+          <MinTileRow>21</MinTileRow>
+          <MaxTileRow>244</MaxTileRow>
+          <MinTileCol>36</MinTileCol>
+          <MaxTileCol>441</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:4326:9</TileMatrix>
+          <MinTileRow>54</MinTileRow>
+          <MaxTileRow>612</MaxTileRow>
+          <MinTileCol>90</MinTileCol>
+          <MaxTileCol>1103</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:4326:10</TileMatrix>
+          <MinTileRow>109</MinTileRow>
+          <MaxTileRow>1224</MaxTileRow>
+          <MinTileCol>181</MinTileCol>
+          <MaxTileCol>2206</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:4326:11</TileMatrix>
+          <MinTileRow>273</MinTileRow>
+          <MaxTileRow>3060</MaxTileRow>
+          <MinTileCol>453</MinTileCol>
+          <MaxTileCol>5516</MaxTileCol>
+        </TileMatrixLimits>
+    
+    	<TileMatrixLimits>
+          <TileMatrix>EPSG:4326:12</TileMatrix>
+          <MinTileRow>547</MinTileRow>
+          <MaxTileRow>6120</MaxTileRow>
+          <MinTileCol>906</MinTileCol>
+          <MaxTileCol>11033</MaxTileCol>
+        </TileMatrixLimits>
+    
+      </TileMatrixSetLimits>
+    </TileMatrixSetLink>
+  
+	</Layer>
+	
+  <TileMatrixSet>
+    <ows:Identifier>EPSG:2180</ows:Identifier>
+    <ows:SupportedCRS>urn:ogc:def:crs:EPSG::2180</ows:SupportedCRS>
+    <TileMatrix>
+      <ows:Identifier>EPSG:2180:0</ows:Identifier>
+      <ScaleDenominator>7559538.928571429</ScaleDenominator>
+      <TopLeftCorner>850000.0 100000.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>1</MatrixWidth>
+      <MatrixHeight>1</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:2180:1</ows:Identifier>
+      <ScaleDenominator>3779769.4642857146</ScaleDenominator>
+      <TopLeftCorner>850000.0 100000.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>2</MatrixWidth>
+      <MatrixHeight>2</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:2180:2</ows:Identifier>
+      <ScaleDenominator>1889884.7321428573</ScaleDenominator>
+      <TopLeftCorner>850000.0 100000.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>3</MatrixWidth>
+      <MatrixHeight>3</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:2180:3</ows:Identifier>
+      <ScaleDenominator>944942.3660714286</ScaleDenominator>
+      <TopLeftCorner>850000.0 100000.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>6</MatrixWidth>
+      <MatrixHeight>6</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:2180:4</ows:Identifier>
+      <ScaleDenominator>472471.1830357143</ScaleDenominator>
+      <TopLeftCorner>850000.0 100000.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>12</MatrixWidth>
+      <MatrixHeight>12</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:2180:5</ows:Identifier>
+      <ScaleDenominator>236235.59151785716</ScaleDenominator>
+      <TopLeftCorner>850000.0 100000.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>24</MatrixWidth>
+      <MatrixHeight>23</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:2180:6</ows:Identifier>
+      <ScaleDenominator>94494.23660714286</ScaleDenominator>
+      <TopLeftCorner>850000.0 100000.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>60</MatrixWidth>
+      <MatrixHeight>57</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:2180:7</ows:Identifier>
+      <ScaleDenominator>47247.11830357143</ScaleDenominator>
+      <TopLeftCorner>850000.0 100000.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>120</MatrixWidth>
+      <MatrixHeight>113</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:2180:8</ows:Identifier>
+      <ScaleDenominator>23623.559151785714</ScaleDenominator>
+      <TopLeftCorner>850000.0 100000.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>240</MatrixWidth>
+      <MatrixHeight>225</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:2180:9</ows:Identifier>
+      <ScaleDenominator>9449.423660714287</ScaleDenominator>
+      <TopLeftCorner>850000.0 100000.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>598</MatrixWidth>
+      <MatrixHeight>562</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:2180:10</ows:Identifier>
+      <ScaleDenominator>4724.711830357143</ScaleDenominator>
+      <TopLeftCorner>850000.0 100000.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>1196</MatrixWidth>
+      <MatrixHeight>1123</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:2180:11</ows:Identifier>
+      <ScaleDenominator>1889.8847321428573</ScaleDenominator>
+      <TopLeftCorner>850000.0 100000.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>2990</MatrixWidth>
+      <MatrixHeight>2806</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:2180:12</ows:Identifier>
+      <ScaleDenominator>944.9423660714286</ScaleDenominator>
+      <TopLeftCorner>850000.0 100000.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>5980</MatrixWidth>
+      <MatrixHeight>5611</MatrixHeight>
+    </TileMatrix>
+    
+    
+</TileMatrixSet>
+
+ 
+  <TileMatrixSet>
+    <ows:Identifier>EPSG:4326</ows:Identifier>
+    <ows:SupportedCRS>urn:ogc:def:crs:EPSG::4326</ows:SupportedCRS>
+    <TileMatrix>
+      <ows:Identifier>EPSG:4326:0</ows:Identifier>
+      <ScaleDenominator>7559538.928571429</ScaleDenominator>
+      <TopLeftCorner>56.0 12.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>2</MatrixWidth>
+      <MatrixHeight>1</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:4326:1</ows:Identifier>
+      <ScaleDenominator>3779769.4642857146</ScaleDenominator>
+      <TopLeftCorner>56.0 12.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>3</MatrixWidth>
+      <MatrixHeight>2</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:4326:2</ows:Identifier>
+      <ScaleDenominator>1889884.7321428573</ScaleDenominator>
+      <TopLeftCorner>56.0 12.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>6</MatrixWidth>
+      <MatrixHeight>4</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:4326:3</ows:Identifier>
+      <ScaleDenominator>944942.3660714286</ScaleDenominator>
+      <TopLeftCorner>56.0 12.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>12</MatrixWidth>
+      <MatrixHeight>7</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:4326:4</ows:Identifier>
+      <ScaleDenominator>472471.1830357143</ScaleDenominator>
+      <TopLeftCorner>56.0 12.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>23</MatrixWidth>
+      <MatrixHeight>13</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:4326:5</ows:Identifier>
+      <ScaleDenominator>236235.59151785716</ScaleDenominator>
+      <TopLeftCorner>56.0 12.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>45</MatrixWidth>
+      <MatrixHeight>25</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:4326:6</ows:Identifier>
+      <ScaleDenominator>94494.23660714286</ScaleDenominator>
+      <TopLeftCorner>56.0 12.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>111</MatrixWidth>
+      <MatrixHeight>62</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:4326:7</ows:Identifier>
+      <ScaleDenominator>47247.11830357143</ScaleDenominator>
+      <TopLeftCorner>56.0 12.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>221</MatrixWidth>
+      <MatrixHeight>123</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:4326:8</ows:Identifier>
+      <ScaleDenominator>23623.559151785714</ScaleDenominator>
+      <TopLeftCorner>56.0 12.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>442</MatrixWidth>
+      <MatrixHeight>245</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:4326:9</ows:Identifier>
+      <ScaleDenominator>9449.423660714287</ScaleDenominator>
+      <TopLeftCorner>56.0 12.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>1104</MatrixWidth>
+      <MatrixHeight>613</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:4326:10</ows:Identifier>
+      <ScaleDenominator>4724.711830357143</ScaleDenominator>
+      <TopLeftCorner>56.0 12.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>2207</MatrixWidth>
+      <MatrixHeight>1225</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:4326:11</ows:Identifier>
+      <ScaleDenominator>1889.8847321428573</ScaleDenominator>
+      <TopLeftCorner>56.0 12.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>5517</MatrixWidth>
+      <MatrixHeight>3061</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:4326:12</ows:Identifier>
+      <ScaleDenominator>944.9423660714286</ScaleDenominator>
+      <TopLeftCorner>56.0 12.0</TopLeftCorner>
+      <TileWidth>512</TileWidth>
+      <TileHeight>512</TileHeight>
+      <MatrixWidth>11034</MatrixWidth>
+      <MatrixHeight>6121</MatrixHeight>
+    </TileMatrix>
+    
+    
+</TileMatrixSet>
+
+ 
+	</Contents>
+</Capabilities>
\ No newline at end of file
diff --git a/test/data/wmts/getcapabilities-pseudo-mercator.xml b/test/data/wmts/getcapabilities-pseudo-mercator.xml
new file mode 100644
index 0000000..a830d29
--- /dev/null
+++ b/test/data/wmts/getcapabilities-pseudo-mercator.xml
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Capabilities xmlns="http://www.opengis.net/wmts/1.0" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:inspire_common="http://inspire.ec.europa.eu/schemas/common/1.0" xmlns:inspire_vs="http://inspire.ec.europa.eu/schemas/inspire_vs_ows11/1.0" version="1.0.0" xsi:schemaLocation="http://www.opengis.net/wmts/1.0 http://schemas.opengis.net/wmts/1.0/wmtsGetCapabilities_response.xsd http://inspire. [...]
+	<ows:ServiceIdentification>
+		<ows:Title>Test (WMTS)</ows:Title>
+		<ows:Abstract>Abstract.</ows:Abstract>
+		<ows:Keywords>
+			<ows:Keyword>WMTS</ows:Keyword>
+		</ows:Keywords>
+		
+		<ows:ServiceType>OGC WMTS</ows:ServiceType>
+		<ows:ServiceTypeVersion>1.0.0</ows:ServiceTypeVersion>
+		<ows:Fees>Test Fees</ows:Fees>
+		<ows:AccessConstraints>Access</ows:AccessConstraints> 
+	</ows:ServiceIdentification>
+	<ows:ServiceProvider>
+		<ows:ProviderName>Provider</ows:ProviderName>
+	</ows:ServiceProvider>
+	<ows:OperationsMetadata>
+		<ows:Operation name="GetTile">
+			<ows:DCP>
+				<ows:HTTP>
+					<ows:Get xlink:href="http://mapy.geoportal.gov.pl/wss/service/WMTS/guest/wmts/ORTO?">
+						<ows:Constraint name="GetEncoding">
+							<ows:AllowedValues>
+								<ows:Value>KVP</ows:Value>
+							</ows:AllowedValues>
+						</ows:Constraint>
+					</ows:Get>
+				</ows:HTTP>
+			</ows:DCP>
+		</ows:Operation>
+	</ows:OperationsMetadata>
+	<Contents>
+		<Layer>
+			<ows:Title>Layer title</ows:Title>
+			<ows:Identifier>Layer identifier</ows:Identifier>
+			<Style isDefault="true">
+				<ows:Title>Default style</ows:Title>
+				<ows:Identifier>default</ows:Identifier>		
+			</Style>
+			<Format>image/jpeg</Format>
+			<InfoFormat>text/html</InfoFormat>
+    <TileMatrixSetLink>
+	<TileMatrixSet>EPSG:3857</TileMatrixSet>
+    </TileMatrixSetLink>
+  
+	</Layer>
+	
+  <TileMatrixSet>
+    <ows:Identifier>EPSG:3857</ows:Identifier>
+    <ows:SupportedCRS>urn:ogc:def:crs:EPSG::3857</ows:SupportedCRS>
+    <TileMatrix>
+      <ows:Identifier>EPSG:3857:0</ows:Identifier>
+      <ScaleDenominator>559082264.0287178</ScaleDenominator>
+      <TopLeftCorner>-20037508.3428 20037508.3428</TopLeftCorner>
+      <TileWidth>256</TileWidth>
+      <TileHeight>256</TileHeight>
+      <MatrixWidth>1</MatrixWidth>
+      <MatrixHeight>1</MatrixHeight>
+    </TileMatrix>
+
+    <TileMatrix>
+      <ows:Identifier>EPSG:3857:1</ows:Identifier>
+      <ScaleDenominator>279541132.0143589</ScaleDenominator>
+      <TopLeftCorner>-20037508.3428 20037508.3428</TopLeftCorner>
+      <TileWidth>256</TileWidth>
+      <TileHeight>256</TileHeight>
+      <MatrixWidth>2</MatrixWidth>
+      <MatrixHeight>2</MatrixHeight>
+    </TileMatrix>
+
+    <TileMatrix>
+      <ows:Identifier>EPSG:3857:2</ows:Identifier>
+      <ScaleDenominator>139770566.0071794</ScaleDenominator>
+      <TopLeftCorner>-20037508.3428 20037508.3428</TopLeftCorner>
+      <TileWidth>256</TileWidth>
+      <TileHeight>256</TileHeight>
+      <MatrixWidth>4</MatrixWidth>
+      <MatrixHeight>4</MatrixHeight>
+    </TileMatrix>
+    
+    <TileMatrix>
+      <ows:Identifier>EPSG:3857:3</ows:Identifier>
+      <ScaleDenominator>69885283.00358972</ScaleDenominator>
+      <TopLeftCorner>-20037508.3428 20037508.3428</TopLeftCorner>
+      <TileWidth>256</TileWidth>
+      <TileHeight>256</TileHeight>
+      <MatrixWidth>8</MatrixWidth>
+      <MatrixHeight>8</MatrixHeight>
+    </TileMatrix>
+
+    <TileMatrix>
+      <ows:Identifier>EPSG:3857:4</ows:Identifier>
+      <ScaleDenominator>34942641.50179486</ScaleDenominator>
+      <TopLeftCorner>-20037508.3428 20037508.3428</TopLeftCorner>
+      <TileWidth>256</TileWidth>
+      <TileHeight>256</TileHeight>
+      <MatrixWidth>16</MatrixWidth>
+      <MatrixHeight>16</MatrixHeight>
+    </TileMatrix>
+
+    <TileMatrix>
+      <ows:Identifier>EPSG:3857:5</ows:Identifier>
+      <ScaleDenominator>17471320.75089743</ScaleDenominator>
+      <TopLeftCorner>-20037508.3428 20037508.3428</TopLeftCorner>
+      <TileWidth>256</TileWidth>
+      <TileHeight>256</TileHeight>
+      <MatrixWidth>32</MatrixWidth>
+      <MatrixHeight>32</MatrixHeight>
+    </TileMatrix>
+	
+	<TileMatrix>
+      <ows:Identifier>EPSG:3857:6</ows:Identifier>
+      <ScaleDenominator>8735660.375448715</ScaleDenominator>
+      <TopLeftCorner>-20037508.3428 20037508.3428</TopLeftCorner>
+      <TileWidth>256</TileWidth>
+      <TileHeight>256</TileHeight>
+      <MatrixWidth>64</MatrixWidth>
+      <MatrixHeight>64</MatrixHeight>
+    </TileMatrix>    
+
+	<TileMatrix>
+      <ows:Identifier>EPSG:3857:7</ows:Identifier>
+      <ScaleDenominator>4367830.187724357</ScaleDenominator>
+      <TopLeftCorner>-20037508.3428 20037508.3428</TopLeftCorner>
+      <TileWidth>256</TileWidth>
+      <TileHeight>256</TileHeight>
+      <MatrixWidth>128</MatrixWidth>
+      <MatrixHeight>128</MatrixHeight>
+    </TileMatrix>  
+
+	<TileMatrix>
+      <ows:Identifier>EPSG:3857:8</ows:Identifier>
+      <ScaleDenominator>2183915.093862179</ScaleDenominator>
+      <TopLeftCorner>-20037508.3428 20037508.3428</TopLeftCorner>
+      <TileWidth>256</TileWidth>
+      <TileHeight>256</TileHeight>
+      <MatrixWidth>256</MatrixWidth>
+      <MatrixHeight>256</MatrixHeight>
+    </TileMatrix>  
+
+	<TileMatrix>
+      <ows:Identifier>EPSG:3857:9</ows:Identifier>
+      <ScaleDenominator>1091957.546931089</ScaleDenominator>
+      <TopLeftCorner>-20037508.3428 20037508.3428</TopLeftCorner>
+      <TileWidth>256</TileWidth>
+      <TileHeight>256</TileHeight>
+      <MatrixWidth>512</MatrixWidth>
+      <MatrixHeight>512</MatrixHeight>
+    </TileMatrix>  
+
+	<TileMatrix>
+      <ows:Identifier>EPSG:3857:10</ows:Identifier>
+      <ScaleDenominator>545978.7734655447</ScaleDenominator>
+      <TopLeftCorner>-20037508.3428 20037508.3428</TopLeftCorner>
+      <TileWidth>256</TileWidth>
+      <TileHeight>256</TileHeight>
+      <MatrixWidth>1024</MatrixWidth>
+      <MatrixHeight>1024</MatrixHeight>
+    </TileMatrix>  
+</TileMatrixSet>
+
+ 
+	</Contents>
+</Capabilities>
\ No newline at end of file
diff --git a/test/functional/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListMergerTest.java b/test/functional/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListMergerTest.java
index 93649a4..dc87b26 100644
--- a/test/functional/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListMergerTest.java
+++ b/test/functional/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListMergerTest.java
@@ -21,11 +21,11 @@ public class NodeListMergerTest extends JFrame {
         Way w1 = new Way();
         Node n1;
         w1.addNode(n1 = new Node(1));
-        for (int i=0; i < 20; i++) {
+        for (int i = 0; i < 20; i++) {
             n1.put("key" + i, "value" + i);
         }
         StringBuilder note = new StringBuilder();
-        for (int i=0; i < 50; i++) {
+        for (int i = 0; i < 50; i++) {
             note.append(" A very long text ");
         }
         n1.put("note", note.toString());
@@ -48,7 +48,7 @@ public class NodeListMergerTest extends JFrame {
         }
 
         Way w2 = new Way();
-        for (int i = 1; i < 200; i+=2) {
+        for (int i = 1; i < 200; i += 2) {
             w2.addNode(new Node(i));
         }
         nodeListMerger.populate(new Conflict<OsmPrimitive>(w1, w2));
@@ -69,9 +69,9 @@ public class NodeListMergerTest extends JFrame {
         populate();
     }
 
-    static public void main(String args[]) {
+    public static void main(String[] args) {
         NodeListMergerTest test = new NodeListMergerTest();
-        test.setSize(600,600);
+        test.setSize(600, 600);
         test.setVisible(true);
     }
 }
diff --git a/test/functional/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMergerTest.java b/test/functional/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMergerTest.java
index 1c7f2ab..e43e9bb 100644
--- a/test/functional/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMergerTest.java
+++ b/test/functional/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMergerTest.java
@@ -27,11 +27,11 @@ public class PropertiesMergerTest extends JFrame{
 
     protected void populate() {
         Node my = new Node(1);
-        my.setCoor(new LatLon(1,1));
+        my.setCoor(new LatLon(1, 1));
         my.setDeleted(true);
 
         Node their = new Node(2);
-        their.setCoor(new LatLon(10,10));
+        their.setCoor(new LatLon(10, 10));
 
         merger.getModel().populate(new Conflict<OsmPrimitive>(my, their));
     }
@@ -44,7 +44,7 @@ public class PropertiesMergerTest extends JFrame{
         populate();
     }
 
-    static public void main(String args[]) {
+    public static void main(String[] args) {
         PropertiesMergerTest app = new PropertiesMergerTest();
         app.setSize(600, 400);
         app.setVisible(true);
diff --git a/test/functional/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberMergerTest.java b/test/functional/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberMergerTest.java
index 6efb843..08e7557 100644
--- a/test/functional/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberMergerTest.java
+++ b/test/functional/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberMergerTest.java
@@ -48,9 +48,9 @@ public class RelationMemberMergerTest extends JFrame {
         populate();
     }
 
-    static public void main(String args[]) {
+    public static void main(String[] args) {
         RelationMemberMergerTest test = new RelationMemberMergerTest();
-        test.setSize(600,600);
+        test.setSize(600, 600);
         test.setVisible(true);
     }
 }
diff --git a/test/functional/org/openstreetmap/josm/gui/conflict/pair/tags/TagMergerTest.java b/test/functional/org/openstreetmap/josm/gui/conflict/pair/tags/TagMergerTest.java
index d85804f..4280723 100644
--- a/test/functional/org/openstreetmap/josm/gui/conflict/pair/tags/TagMergerTest.java
+++ b/test/functional/org/openstreetmap/josm/gui/conflict/pair/tags/TagMergerTest.java
@@ -1,12 +1,12 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.conflict.pair.tags;
 
-import org.junit.Ignore;
-
 import java.awt.BorderLayout;
 
 import javax.swing.JFrame;
 
+import org.junit.Ignore;
+
 @Ignore
 public class TagMergerTest extends JFrame {
 
@@ -26,15 +26,16 @@ public class TagMergerTest extends JFrame {
         tagMerger.getModel().addItem(new TagMergeItem("key", "myvalue", "theirvalue"));
         tagMerger.getModel().addItem(new TagMergeItem("key", "myvalue", null));
         tagMerger.getModel().addItem(new TagMergeItem("key", null, "theirvalue"));
-        tagMerger.getModel().addItem(new TagMergeItem("a very long key asdfasdf asdfasdf", "a very long value asdfasdf", "a very long value asdfasdf"));
-        for (int i=0; i< 50; i++) {
+        tagMerger.getModel().addItem(new TagMergeItem("a very long key asdfasdf asdfasdf", "a very long value asdfasdf",
+                "a very long value asdfasdf"));
+        for (int i = 0; i < 50; i++) {
           tagMerger.getModel().addItem(new TagMergeItem("key", "myvalue", "theirvalue"));
         }
     }
 
-    public static void main(String args[]) {
+    public static void main(String[] args) {
         TagMergerTest test  = new TagMergerTest();
-        test.setSize(600,600);
+        test.setSize(600, 600);
         test.setVisible(true);
     }
 }
diff --git a/test/functional/org/openstreetmap/josm/gui/dialogs/ConflictResolutionDialogTest.java b/test/functional/org/openstreetmap/josm/gui/dialogs/ConflictResolutionDialogTest.java
index 35a9705..c56e646 100644
--- a/test/functional/org/openstreetmap/josm/gui/dialogs/ConflictResolutionDialogTest.java
+++ b/test/functional/org/openstreetmap/josm/gui/dialogs/ConflictResolutionDialogTest.java
@@ -15,9 +15,9 @@ public class ConflictResolutionDialogTest extends JFrame {
     private ConflictResolutionDialog dialog;
 
     protected void build() {
-        setSize(100,100);
+        setSize(100, 100);
         dialog = new ConflictResolutionDialog(this);
-        dialog.setSize(600,600);
+        dialog.setSize(600, 600);
     }
 
     protected void populate() {
@@ -43,7 +43,7 @@ public class ConflictResolutionDialogTest extends JFrame {
         build();
     }
 
-    static public void main(String args[]) {
+    public static void main(String[] args) {
         ConflictResolutionDialogTest test = new ConflictResolutionDialogTest();
         test.setVisible(true);
         test.populate();
diff --git a/test/functional/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManagerTest.java b/test/functional/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManagerTest.java
index 1ab40cc..3444878 100644
--- a/test/functional/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManagerTest.java
+++ b/test/functional/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManagerTest.java
@@ -1,10 +1,10 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.dialogs.changeset;
 
-import org.junit.Ignore;
-
 import javax.swing.JFrame;
 
+import org.junit.Ignore;
+
 @Ignore
 public class ChangesetCacheManagerTest extends JFrame {
 
@@ -15,7 +15,7 @@ public class ChangesetCacheManagerTest extends JFrame {
         manager.setVisible(true);
     }
 
-    static public void main(String args[]) {
+    public static void main(String[] args) {
         new ChangesetCacheManagerTest().start();
     }
 }
diff --git a/test/functional/org/openstreetmap/josm/gui/dialogs/changeset/query/ChangesetQueryDialogTest.java b/test/functional/org/openstreetmap/josm/gui/dialogs/changeset/query/ChangesetQueryDialogTest.java
index f8d0dfd..b1ab6e3 100644
--- a/test/functional/org/openstreetmap/josm/gui/dialogs/changeset/query/ChangesetQueryDialogTest.java
+++ b/test/functional/org/openstreetmap/josm/gui/dialogs/changeset/query/ChangesetQueryDialogTest.java
@@ -1,10 +1,10 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.dialogs.changeset.query;
 
-import org.junit.Ignore;
-
 import javax.swing.JFrame;
 
+import org.junit.Ignore;
+
 @Ignore
 public class ChangesetQueryDialogTest extends JFrame {
 
@@ -16,7 +16,7 @@ public class ChangesetQueryDialogTest extends JFrame {
         dialog.setVisible(true);
     }
 
-    static public void main(String args[]) {
+    public static void main(String[] args) {
         new ChangesetQueryDialogTest().start();
     }
 }
diff --git a/test/functional/org/openstreetmap/josm/gui/history/HistoryBrowserTest.java b/test/functional/org/openstreetmap/josm/gui/history/HistoryBrowserTest.java
index 0709782..89df5ac 100644
--- a/test/functional/org/openstreetmap/josm/gui/history/HistoryBrowserTest.java
+++ b/test/functional/org/openstreetmap/josm/gui/history/HistoryBrowserTest.java
@@ -21,14 +21,14 @@ import org.openstreetmap.josm.io.OsmTransferException;
 public class HistoryBrowserTest extends JFrame {
 
     @BeforeClass
-    static public void init() {
+    public static void init() {
         JOSMFixture.createFunctionalTestFixture().init();
     }
 
     private HistoryBrowser browser;
 
     protected void build() {
-        setSize(500,500);
+        setSize(500, 500);
         getContentPane().setLayout(new BorderLayout());
         browser = new HistoryBrowser();
         getContentPane().add(browser, BorderLayout.CENTER);
@@ -39,7 +39,7 @@ public class HistoryBrowserTest extends JFrame {
         HistoryDataSet ds = null;
         try {
             ds = reader.parseHistory(NullProgressMonitor.INSTANCE);
-        } catch(OsmTransferException e) {
+        } catch (OsmTransferException e) {
             Main.error(e);
             return;
         }
@@ -50,15 +50,15 @@ public class HistoryBrowserTest extends JFrame {
     /**
      * Constructs a new {@code HistoryBrowserTest}.
      */
-    public HistoryBrowserTest(){
+    public HistoryBrowserTest() {
         build();
         //populate(OsmPrimitiveType.NODE,354117);
         //populate(OsmPrimitiveType.WAY,37951);
-        populate(OsmPrimitiveType.RELATION,5055);
+        populate(OsmPrimitiveType.RELATION, 5055);
 
     }
 
-    static public void main(String args[]) {
+    public static void main(String[] args) {
         HistoryBrowserTest.init();
         new HistoryBrowserTest().setVisible(true);
     }
diff --git a/test/functional/org/openstreetmap/josm/io/MultiFetchServerObjectReaderTest.java b/test/functional/org/openstreetmap/josm/io/MultiFetchServerObjectReaderTest.java
index eacf81e..c7e5182 100644
--- a/test/functional/org/openstreetmap/josm/io/MultiFetchServerObjectReaderTest.java
+++ b/test/functional/org/openstreetmap/josm/io/MultiFetchServerObjectReaderTest.java
@@ -56,22 +56,21 @@ public class MultiFetchServerObjectReaderTest {
 
         // create a set of nodes
         //
-        for (int i=0; i< numNodes; i++) {
+        for (int i = 0; i < numNodes; i++) {
             Node n = new Node();
-            n.setCoor(new LatLon(-36.6,47.6));
+            n.setCoor(new LatLon(-36.6, 47.6));
             n.put("name", "node-"+i);
             ds.addPrimitive(n);
             nodes.add(n);
         }
 
-        // create a set of ways, each with a random number of
-        // nodes
+        // create a set of ways, each with a random number of nodes
         //
-        for (int i=0; i< numWays; i++) {
+        for (int i = 0; i < numWays; i++) {
             Way w = new Way();
-            int numNodesInWay = 2 + (int)Math.round(Math.random() * 5);
-            int start = (int)Math.round(Math.random() * numNodes);
-            for (int j = 0; j < numNodesInWay;j++) {
+            int numNodesInWay = 2 + (int) Math.round(Math.random() * 5);
+            int start = (int) Math.round(Math.random() * numNodes);
+            for (int j = 0; j < numNodesInWay; j++) {
                 int idx = (start + j) % numNodes;
                 Node n = nodes.get(idx);
                 w.addNode(n);
@@ -81,22 +80,21 @@ public class MultiFetchServerObjectReaderTest {
             ways.add(w);
         }
 
-        // create a set of relations each with a random number of nodes,
-        // and ways
+        // create a set of relations each with a random number of nodes, and ways
         //
-        for (int i=0; i< numRelations; i++) {
+        for (int i = 0; i < numRelations; i++) {
             Relation r = new Relation();
             r.put("name", "relation-" +i);
-            int numNodesInRelation = (int)Math.round(Math.random() * 10);
-            int start = (int)Math.round(Math.random() * numNodes);
-            for (int j = 0; j < numNodesInRelation;j++) {
+            int numNodesInRelation = (int) Math.round(Math.random() * 10);
+            int start = (int) Math.round(Math.random() * numNodes);
+            for (int j = 0; j < numNodesInRelation; j++) {
                 int idx = (start + j) % 500;
                 Node n = nodes.get(idx);
                 r.addMember(new RelationMember("role-" + j, n));
             }
-            int numWaysInRelation = (int)Math.round(Math.random() * 10);
-            start = (int)Math.round(Math.random() * numWays);
-            for (int j = 0; j < numWaysInRelation;j++) {
+            int numWaysInRelation = (int) Math.round(Math.random() * 10);
+            start = (int) Math.round(Math.random() * numWays);
+            for (int j = 0; j < numWaysInRelation; j++) {
                 int idx = (start + j) % 500;
                 Way w = ways.get(idx);
                 r.addMember(new RelationMember("role-" + j, w));
@@ -113,7 +111,7 @@ public class MultiFetchServerObjectReaderTest {
      * creates the dataset on the server.
      *
      * @param ds the data set
-     * @throws OsmTransferException
+     * @throws OsmTransferException if something goes wrong
      */
     public static void createDataSetOnServer(DataSet ds) throws OsmTransferException {
         logger.info("creating data set on the server ...");
@@ -124,7 +122,8 @@ public class MultiFetchServerObjectReaderTest {
 
         OsmServerWriter writer = new OsmServerWriter();
         Changeset cs = new Changeset();
-        writer.uploadOsm(new UploadStrategySpecification().setStrategy(UploadStrategy.SINGLE_REQUEST_STRATEGY), primitives,cs,NullProgressMonitor.INSTANCE);
+        writer.uploadOsm(new UploadStrategySpecification().setStrategy(UploadStrategy.SINGLE_REQUEST_STRATEGY),
+                primitives, cs, NullProgressMonitor.INSTANCE);
         OsmApi.getOsmApi().closeChangeset(cs, NullProgressMonitor.INSTANCE);
     }
 
@@ -134,10 +133,10 @@ public class MultiFetchServerObjectReaderTest {
         JOSMFixture.createFunctionalTestFixture().init();
 
         // don't use atomic upload, the test API server can't cope with large diff uploads
-        //
         Main.pref.put("osm-server.atomic-upload", false);
 
-        File dataSetCacheOutputFile = new File(System.getProperty("java.io.tmpdir"), MultiFetchServerObjectReaderTest.class.getName() + ".dataset");
+        File dataSetCacheOutputFile = new File(System.getProperty("java.io.tmpdir"),
+                MultiFetchServerObjectReaderTest.class.getName() + ".dataset");
 
         String p = System.getProperties().getProperty("useCachedDataset");
         if (p != null && Boolean.parseBoolean(p.trim().toLowerCase())) {
@@ -145,10 +144,10 @@ public class MultiFetchServerObjectReaderTest {
             return;
         }
 
-        logger.info(MessageFormat.format("property ''{0}'' not set to true, creating test dataset on the server. property is ''{1}''", "useCachedDataset", p));
+        logger.info(MessageFormat.format(
+                "property ''{0}'' not set to true, creating test dataset on the server. property is ''{1}''", "useCachedDataset", p));
 
         // build and upload the test data set
-        //
         logger.info("creating test data set ....");
         testDataSet = buildTestDataSet();
         logger.info("uploading test data set ...");
@@ -165,7 +164,7 @@ public class MultiFetchServerObjectReaderTest {
                 w.writeContent(testDataSet);
                 w.footer();
             }
-        } catch(IOException e) {
+        } catch (IOException e) {
             fail(MessageFormat.format("failed to open file ''{0}'' for writing", dataSetCacheOutputFile.toString()));
         }
     }
@@ -189,15 +188,15 @@ public class MultiFetchServerObjectReaderTest {
     public void testMultiGet10Nodes() throws OsmTransferException {
         MultiFetchServerObjectReader reader = new MultiFetchServerObjectReader();
         ArrayList<Node> nodes = new ArrayList<>(ds.getNodes());
-        for (int i =0; i< 10; i++) {
+        for (int i = 0; i < 10; i++) {
             reader.append(nodes.get(i));
         }
         DataSet out = reader.parseOsm(NullProgressMonitor.INSTANCE);
         assertEquals(10, out.getNodes().size());
         for (Node n1:out.getNodes()) {
-            Node n2 = (Node)ds.getPrimitiveById(n1);
+            Node n2 = (Node) ds.getPrimitiveById(n1);
             assertNotNull(n2);
-            assertEquals(n2.get("name"),n2.get("name"));
+            assertEquals(n2.get("name"), n2.get("name"));
         }
         assertTrue(reader.getMissingPrimitives().isEmpty());
     }
@@ -205,17 +204,17 @@ public class MultiFetchServerObjectReaderTest {
     @Test
     public void testMultiGet10Ways() throws OsmTransferException {
         MultiFetchServerObjectReader reader = new MultiFetchServerObjectReader();
-        ArrayList<Way> ways= new ArrayList<>(ds.getWays());
-        for (int i =0; i< 10; i++) {
+        ArrayList<Way> ways = new ArrayList<>(ds.getWays());
+        for (int i = 0; i < 10; i++) {
             reader.append(ways.get(i));
         }
         DataSet out = reader.parseOsm(NullProgressMonitor.INSTANCE);
         assertEquals(10, out.getWays().size());
         for (Way w1: out.getWays()) {
-            Way w2 = (Way)ds.getPrimitiveById(w1);
+            Way w2 = (Way) ds.getPrimitiveById(w1);
             assertNotNull(w2);
             assertEquals(w2.getNodesCount(), w1.getNodesCount());
-            assertEquals(w2.get("name"),w1.get("name"));
+            assertEquals(w2.get("name"), w1.get("name"));
         }
         assertTrue(reader.getMissingPrimitives().isEmpty());
     }
@@ -223,17 +222,17 @@ public class MultiFetchServerObjectReaderTest {
     @Test
     public void testMultiGet10Relations() throws OsmTransferException {
         MultiFetchServerObjectReader reader = new MultiFetchServerObjectReader();
-        ArrayList<Relation> relations= new ArrayList<>(ds.getRelations());
-        for (int i =0; i< 10; i++) {
+        ArrayList<Relation> relations = new ArrayList<>(ds.getRelations());
+        for (int i = 0; i < 10; i++) {
             reader.append(relations.get(i));
         }
         DataSet out = reader.parseOsm(NullProgressMonitor.INSTANCE);
         assertEquals(10, out.getRelations().size());
         for (Relation r1: out.getRelations()) {
-            Relation r2 = (Relation)ds.getPrimitiveById(r1);
+            Relation r2 = (Relation) ds.getPrimitiveById(r1);
             assertNotNull(r2);
             assertEquals(r2.getMembersCount(), r1.getMembersCount());
-            assertEquals(r2.get("name"),r2.get("name"));
+            assertEquals(r2.get("name"), r2.get("name"));
         }
         assertTrue(reader.getMissingPrimitives().isEmpty());
     }
@@ -242,15 +241,15 @@ public class MultiFetchServerObjectReaderTest {
     public void testMultiGet800Nodes() throws OsmTransferException {
         MultiFetchServerObjectReader reader = new MultiFetchServerObjectReader();
         ArrayList<Node> nodes = new ArrayList<>(ds.getNodes());
-        for (int i =0; i< 812; i++) {
+        for (int i = 0; i < 812; i++) {
             reader.append(nodes.get(i));
         }
         DataSet out = reader.parseOsm(NullProgressMonitor.INSTANCE);
         assertEquals(812, out.getNodes().size());
         for (Node n1:out.getNodes()) {
-            Node n2 = (Node)ds.getPrimitiveById(n1);
+            Node n2 = (Node) ds.getPrimitiveById(n1);
             assertNotNull(n2);
-            assertEquals(n2.get("name"),n2.get("name"));
+            assertEquals(n2.get("name"), n2.get("name"));
         }
         assertTrue(reader.getMissingPrimitives().isEmpty());
     }
@@ -259,7 +258,7 @@ public class MultiFetchServerObjectReaderTest {
     public void multiGetWithNonExistingNode() throws OsmTransferException {
         MultiFetchServerObjectReader reader = new MultiFetchServerObjectReader();
         ArrayList<Node> nodes = new ArrayList<>(ds.getNodes());
-        for (int i =0; i< 10; i++) {
+        for (int i = 0; i < 10; i++) {
             reader.append(nodes.get(i));
         }
         Node n = new Node(9999999);
@@ -267,9 +266,9 @@ public class MultiFetchServerObjectReaderTest {
         DataSet out = reader.parseOsm(NullProgressMonitor.INSTANCE);
         assertEquals(10, out.getNodes().size());
         for (Node n1:out.getNodes()) {
-            Node n2 = (Node)ds.getPrimitiveById(n1);
+            Node n2 = (Node) ds.getPrimitiveById(n1);
             assertNotNull(n2);
-            assertEquals(n2.get("name"),n2.get("name"));
+            assertEquals(n2.get("name"), n2.get("name"));
         }
         assertFalse(reader.getMissingPrimitives().isEmpty());
         assertEquals(1, reader.getMissingPrimitives().size());
diff --git a/test/functional/org/openstreetmap/josm/io/OsmServerBackreferenceReaderTest.java b/test/functional/org/openstreetmap/josm/io/OsmServerBackreferenceReaderTest.java
index 3773bad..bf30164 100644
--- a/test/functional/org/openstreetmap/josm/io/OsmServerBackreferenceReaderTest.java
+++ b/test/functional/org/openstreetmap/josm/io/OsmServerBackreferenceReaderTest.java
@@ -45,7 +45,7 @@ import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
  * @since 1806
  */
 public class OsmServerBackreferenceReaderTest {
-    static private final Logger logger = Logger.getLogger(OsmServerBackreferenceReader.class.getName());
+    private static final Logger logger = Logger.getLogger(OsmServerBackreferenceReader.class.getName());
 
     protected static Node lookupNode(DataSet ds, int i) {
         for (Node n : ds.getNodes()) {
@@ -72,18 +72,18 @@ public class OsmServerBackreferenceReaderTest {
     }
 
     protected static void populateTestDataSetWithNodes(DataSet ds) {
-        for (int i=0;i<100;i++) {
+        for (int i = 0; i < 100; i++) {
             Node n = new Node();
-            n.setCoor(new LatLon(-36.6,47.6));
+            n.setCoor(new LatLon(-36.6, 47.6));
             n.put("name", "node-"+i);
             ds.addPrimitive(n);
         }
     }
 
     protected static void populateTestDataSetWithWays(DataSet ds) {
-        for (int i=0;i<20;i++) {
+        for (int i = 0; i < 20; i++) {
             Way w = new Way();
-            for (int j = 0; j < 10;j++) {
+            for (int j = 0; j < 10; j++) {
                 w.addNode(lookupNode(ds, i+j));
             }
             w.put("name", "way-"+i);
@@ -92,19 +92,19 @@ public class OsmServerBackreferenceReaderTest {
     }
 
     protected static void populateTestDataSetWithRelations(DataSet ds) {
-        for (int i=0;i<10;i++) {
+        for (int i = 0; i < 10; i++) {
             Relation r = new Relation();
             r.put("name", "relation-" +i);
-            for (int j =0; j < 10; j++) {
+            for (int j = 0; j < 10; j++) {
                 RelationMember member = new RelationMember("node-" + j, lookupNode(ds, i + j));
                 r.addMember(member);
             }
-            for (int j =0; j < 5; j++) {
+            for (int j = 0; j < 5; j++) {
                 RelationMember member = new RelationMember("way-" + j, lookupWay(ds, i + j));
                 r.addMember(member);
             }
             if (i > 5) {
-                for (int j =0; j < 3; j++) {
+                for (int j = 0; j < 3; j++) {
                     RelationMember member = new RelationMember("relation-" + j, lookupRelation(ds, j));
                     logger.info(MessageFormat.format("adding relation {0} to relation {1}", j, i));
                     r.addMember(member);
@@ -128,9 +128,9 @@ public class OsmServerBackreferenceReaderTest {
      * creates the dataset on the server.
      *
      * @param ds the data set
-     * @throws OsmTransferException
+     * @throws OsmTransferException if something goes wrong
      */
-    static public void createDataSetOnServer(APIDataSet ds) throws OsmTransferException, CyclicUploadDependencyException {
+    public static void createDataSetOnServer(APIDataSet ds) throws OsmTransferException, CyclicUploadDependencyException {
         logger.info("creating data set on the server ...");
         ds.adjustRelationUploadOrder();
         OsmServerWriter writer = new OsmServerWriter();
@@ -155,7 +155,8 @@ public class OsmServerBackreferenceReaderTest {
         Main.setProjection(Projections.getProjectionByCode("EPSG:3857")); // Mercator
         Main.logLevel = 4;
 
-        File dataSetCacheOutputFile = new File(System.getProperty("java.io.tmpdir"), MultiFetchServerObjectReaderTest.class.getName() + ".dataset");
+        File dataSetCacheOutputFile = new File(System.getProperty("java.io.tmpdir"),
+                MultiFetchServerObjectReaderTest.class.getName() + ".dataset");
 
         String p = System.getProperty("useCachedDataset");
         if (p != null && Boolean.parseBoolean(p.trim().toLowerCase())) {
@@ -163,7 +164,8 @@ public class OsmServerBackreferenceReaderTest {
             return;
         }
 
-        logger.info(MessageFormat.format("property ''{0}'' not set to true, creating test dataset on the server. property is ''{1}''", "useCachedDataset", p));
+        logger.info(MessageFormat.format(
+                "property ''{0}'' not set to true, creating test dataset on the server. property is ''{1}''", "useCachedDataset", p));
 
         // build and upload the test data set
         //
@@ -183,7 +185,7 @@ public class OsmServerBackreferenceReaderTest {
                 w.writeContent(testDataSet);
                 w.footer();
             }
-        } catch(IOException e) {
+        } catch (IOException e) {
             fail(MessageFormat.format("failed to open file ''{0}'' for writing", dataSetCacheOutputFile.toString()));
         }
     }
@@ -454,7 +456,7 @@ public class OsmServerBackreferenceReaderTest {
 
     protected static Set<Long> getNodeIdsInWay(Way way) {
         HashSet<Long> ret = new HashSet<>();
-        if (way == null)return ret;
+        if (way == null) return ret;
         for (Node n: way.getNodes()) {
             ret.add(n.getId());
         }
diff --git a/test/functional/org/openstreetmap/josm/io/OsmServerHistoryReaderTest.java b/test/functional/org/openstreetmap/josm/io/OsmServerHistoryReaderTest.java
index 8f8de42..323e17e 100644
--- a/test/functional/org/openstreetmap/josm/io/OsmServerHistoryReaderTest.java
+++ b/test/functional/org/openstreetmap/josm/io/OsmServerHistoryReaderTest.java
@@ -5,6 +5,7 @@ import static org.junit.Assert.assertTrue;
 
 import org.junit.BeforeClass;
 import org.junit.Test;
+import org.openstreetmap.josm.JOSMFixture;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
 import org.openstreetmap.josm.data.osm.history.History;
@@ -21,7 +22,7 @@ public class OsmServerHistoryReaderTest {
      */
     @BeforeClass
     public static void init() {
-        Main.initApplicationPreferences();
+        JOSMFixture.createUnitTestFixture().init();
         Main.pref.put("osm-server.url", OsmApi.DEFAULT_API_URL);
     }
 
diff --git a/test/functional/org/openstreetmap/josm/io/UploadStrategySelectionPanelTest.java b/test/functional/org/openstreetmap/josm/io/UploadStrategySelectionPanelTest.java
index 1a53bde..c007225 100644
--- a/test/functional/org/openstreetmap/josm/io/UploadStrategySelectionPanelTest.java
+++ b/test/functional/org/openstreetmap/josm/io/UploadStrategySelectionPanelTest.java
@@ -26,10 +26,9 @@ public class UploadStrategySelectionPanelTest extends JFrame {
         uploadStrategySelectionPanel = new UploadStrategySelectionPanel();
         getContentPane().add(uploadStrategySelectionPanel, BorderLayout.CENTER);
         getContentPane().add(buildControlPanel(), BorderLayout.SOUTH);
-        setSize(400,400);
+        setSize(400, 400);
     }
 
-
     protected JPanel buildControlPanel() {
         JPanel pnl = new JPanel(new FlowLayout(FlowLayout.LEFT));
         pnl.add(new JLabel("Num objects:"));
@@ -41,7 +40,7 @@ public class UploadStrategySelectionPanelTest extends JFrame {
                         int n = 0;
                         try {
                             n = Integer.parseInt(tf.getText());
-                        } catch(NumberFormatException e) {
+                        } catch (NumberFormatException e) {
                             Main.error(e);
                             return;
                         }
@@ -60,7 +59,7 @@ public class UploadStrategySelectionPanelTest extends JFrame {
         uploadStrategySelectionPanel.setNumUploadedObjects(51000);
     }
 
-    public static void main(String args[]) throws OsmApiInitializationException, OsmTransferCanceledException{
+    public static void main(String[] args) throws OsmApiInitializationException, OsmTransferCanceledException {
         OsmApi.getOsmApi().initialize(NullProgressMonitor.INSTANCE);
         new UploadStrategySelectionPanelTest().setVisible(true);
     }
diff --git a/test/performance/org/openstreetmap/josm/PerformanceTestUtils.java b/test/performance/org/openstreetmap/josm/PerformanceTestUtils.java
new file mode 100644
index 0000000..a9651af
--- /dev/null
+++ b/test/performance/org/openstreetmap/josm/PerformanceTestUtils.java
@@ -0,0 +1,44 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm;
+
+/**
+ * Timer utilities for performance tests.
+ * @author Michael Zangl
+ */
+public final class PerformanceTestUtils {
+    /**
+     * A timer that measures the time from it's creation to the {@link #done()} call.
+     * @author Michael Zangl
+     */
+    public static class PerformanceTestTimer {
+        private String name;
+        private long time;
+
+        protected PerformanceTestTimer(String name) {
+            this.name = name;
+            time = System.nanoTime();
+        }
+
+        /**
+         * Prints the time since this timer was created.
+         */
+        public void done() {
+            long dTime = System.nanoTime() - time;
+            System.out.println("TIMER " + name + ": " + dTime / 1000000 + "ms");
+        }
+    }
+
+    private PerformanceTestUtils() {
+    }
+
+    /**
+     * Starts a new performance timer.
+     * @param name The name/description of the timer.
+     * @return A {@link PerformanceTestTimer} object of which you can call {@link PerformanceTestTimer#done()} when done.
+     */
+    public static PerformanceTestTimer startTimer(String name) {
+        System.gc();
+        System.runFinalization();
+        return new PerformanceTestTimer(name);
+    }
+}
diff --git a/test/performance/org/openstreetmap/josm/data/osm/KeyValuePerformanceTest.java b/test/performance/org/openstreetmap/josm/data/osm/KeyValuePerformanceTest.java
new file mode 100644
index 0000000..c32384e
--- /dev/null
+++ b/test/performance/org/openstreetmap/josm/data/osm/KeyValuePerformanceTest.java
@@ -0,0 +1,204 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.osm;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.util.ArrayList;
+import java.util.Random;
+
+import org.apache.commons.lang.RandomStringUtils;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.openstreetmap.josm.JOSMFixture;
+import org.openstreetmap.josm.PerformanceTestUtils;
+import org.openstreetmap.josm.PerformanceTestUtils.PerformanceTestTimer;
+import org.openstreetmap.josm.data.osm.OsmDataGenerator.KeyValueDataGenerator;
+
+/**
+ * This test measures the performance of {@link OsmPrimitive#get(String)} and related.
+ * @author Michael Zangl
+ */
+public class KeyValuePerformanceTest {
+    private static final int PUT_RUNS = 10000;
+    private static final int GET_RUNS = 100000;
+    private static final int TEST_STRING_COUNT = 10000;
+    private static final int STRING_INTERN_TESTS = 5000000;
+    private static final double[] TAG_NODE_RATIOS = new double[] {.05, .3, 3, 20, 200};
+    private ArrayList<String> testStrings = new ArrayList<>();
+    private Random random;
+
+    /**
+     * Prepare the test.
+     */
+    @BeforeClass
+    public static void createJOSMFixture() {
+        JOSMFixture.createPerformanceTestFixture().init(true);
+    }
+
+    /**
+     * See if there is a big difference between Strings that are interned and those that are not.
+     */
+    @Test
+    public void meassureStringEqualsIntern() {
+        String str1Interned = "string1";
+        String str1InternedB = "string1";
+        String str1 = new String(str1Interned);
+        String str1B = new String(str1Interned);
+        String str2Interned = "string2";
+        String str2 = new String(str2Interned);
+
+        for (int i = 0; i < STRING_INTERN_TESTS; i++) {
+            // warm up
+            assertTrue(str1.equals(str1B));
+        }
+
+        PerformanceTestTimer timer = PerformanceTestUtils.startTimer("Assertion overhead.");
+        for (int i = 0; i < STRING_INTERN_TESTS; i++) {
+            assertTrue(true);
+        }
+        timer.done();
+
+        timer = PerformanceTestUtils.startTimer("str1.equals(str2) succeeds (without intern)");
+        for (int i = 0; i < STRING_INTERN_TESTS; i++) {
+            assertTrue(str1.equals(str1B));
+        }
+        timer.done();
+
+        timer = PerformanceTestUtils.startTimer("str1 == str2 succeeds");
+        for (int i = 0; i < STRING_INTERN_TESTS; i++) {
+            assertTrue(str1Interned == str1InternedB);
+        }
+        timer.done();
+
+        timer = PerformanceTestUtils.startTimer("str1 == str2.intern() succeeds");
+        for (int i = 0; i < STRING_INTERN_TESTS; i++) {
+            assertTrue(str1Interned == str1.intern());
+        }
+        timer.done();
+
+        timer = PerformanceTestUtils.startTimer("str1 == str2.intern() succeeds for interned string");
+        for (int i = 0; i < STRING_INTERN_TESTS; i++) {
+            assertTrue(str1Interned == str1InternedB.intern());
+        }
+        timer.done();
+
+        timer = PerformanceTestUtils.startTimer("str1.equals(str2) = fails (without intern)");
+        for (int i = 0; i < STRING_INTERN_TESTS; i++) {
+            assertFalse(str1.equals(str2));
+        }
+        timer.done();
+
+        timer = PerformanceTestUtils.startTimer("str1 == str2 fails");
+        for (int i = 0; i < STRING_INTERN_TESTS; i++) {
+            assertFalse(str1Interned == str2Interned);
+        }
+        timer.done();
+
+        timer = PerformanceTestUtils.startTimer("str1 == str2.intern() fails");
+        for (int i = 0; i < STRING_INTERN_TESTS; i++) {
+            assertFalse(str1Interned == str2.intern());
+        }
+        timer.done();
+    }
+
+    /**
+     * Generate an array of test strings.
+     */
+    @Before
+    public void generateTestStrings() {
+        testStrings.clear();
+        random = new Random(123);
+        for (int i = 0; i < TEST_STRING_COUNT; i++) {
+            testStrings.add(RandomStringUtils.random(10, 0, 0, true, true, null, random));
+        }
+    }
+
+    /**
+     * Measure the speed of {@link OsmPrimitive#put(String, String)}
+     */
+    @Test
+    public void testKeyValuePut() {
+        for (double tagNodeRatio : TAG_NODE_RATIOS) {
+            int nodeCount = (int) (PUT_RUNS / tagNodeRatio);
+            KeyValueDataGenerator generator = OsmDataGenerator.getKeyValue(nodeCount, 0);
+            generator.generateDataSet();
+
+            PerformanceTestTimer timer = PerformanceTestUtils
+                    .startTimer("OsmPrimitive#put(String, String) with put/node ratio " + tagNodeRatio);
+
+            for (int i = 0; i < PUT_RUNS; i++) {
+                String key = generator.randomKey();
+                String value = generator.randomValue();
+                generator.randomNode().put(key, value);
+            }
+
+            timer.done();
+        }
+    }
+
+    /**
+     * Measure the speed of {@link OsmPrimitive#get(String)}
+     */
+    @Test
+    public void testKeyValueGet() {
+        for (double tagNodeRatio : TAG_NODE_RATIOS) {
+            KeyValueDataGenerator generator = OsmDataGenerator.getKeyValue(tagNodeRatio);
+            generator.generateDataSet();
+
+            PerformanceTestTimer timer = PerformanceTestUtils
+                    .startTimer("OsmPrimitive#get(String) with tag/node ratio " + tagNodeRatio);
+            for (int i = 0; i < GET_RUNS; i++) {
+                String key = generator.randomKey();
+                // to make comparison easier.
+                generator.randomValue();
+                generator.randomNode().get(key);
+            }
+            timer.done();
+        }
+    }
+
+    /**
+     * Measure the speed of {@link OsmPrimitive#getKeys()}
+     */
+    @Test
+    public void testKeyValueGetKeys() {
+        for (double tagNodeRatio : TAG_NODE_RATIOS) {
+            KeyValueDataGenerator generator = OsmDataGenerator.getKeyValue(tagNodeRatio);
+            generator.generateDataSet();
+
+            PerformanceTestTimer timer = PerformanceTestUtils.startTimer("OsmPrimitive#getKeys() with tag/node ratio "
+                    + tagNodeRatio);
+
+            for (int i = 0; i < GET_RUNS; i++) {
+                // to make comparison easier.
+                generator.randomKey();
+                generator.randomValue();
+                generator.randomNode().getKeys();
+            }
+            timer.done();
+        }
+    }
+
+    /**
+     * Measure the speed of {@link OsmPrimitive#getKeys()}.get(key)
+     */
+    @Test
+    public void testKeyValueGetKeysGet() {
+        for (double tagNodeRatio : TAG_NODE_RATIOS) {
+            KeyValueDataGenerator generator = OsmDataGenerator.getKeyValue(tagNodeRatio);
+            generator.generateDataSet();
+
+            PerformanceTestTimer timer = PerformanceTestUtils
+                    .startTimer("OsmPrimitive#getKeys().get(key) with tag/node ratio " + tagNodeRatio);
+            for (int i = 0; i < GET_RUNS; i++) {
+                String key = generator.randomKey();
+                // to make comparison easier.
+                generator.randomValue();
+                generator.randomNode().getKeys().get(key);
+            }
+            timer.done();
+        }
+    }
+}
diff --git a/test/performance/org/openstreetmap/josm/data/osm/OsmDataGenerator.java b/test/performance/org/openstreetmap/josm/data/osm/OsmDataGenerator.java
new file mode 100644
index 0000000..ec13b7f
--- /dev/null
+++ b/test/performance/org/openstreetmap/josm/data/osm/OsmDataGenerator.java
@@ -0,0 +1,274 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.osm;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Random;
+
+import org.apache.commons.lang.RandomStringUtils;
+import org.openstreetmap.josm.data.coor.EastNorth;
+import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+
+/**
+ * This is an utility class that allows you to generate OSM test data.
+ * @author Michael Zangl
+ */
+public final class OsmDataGenerator {
+    private static final int DEFAULT_KEY_VALUE_RATIO = 3;
+    private static final int DEFAULT_NODE_COUNT = 1000;
+    private static final String DATA_DIR = "data_nodist" + File.separator + "osmfiles";
+
+    private OsmDataGenerator() {
+        // private constructor for utility classes
+    }
+
+    /**
+     * This is a list of randomly generated strings.
+     * <p>
+     * It provides methods to get them both interned and uninterned.
+     *
+     * @author Michael Zangl
+     */
+    public static final class RandomStringList {
+        private final Random random;
+        private final String[] strings;
+        private final String[] interned;
+
+        /**
+         * Creates a new, random List of Strings.
+         * @param seed The seed to use.
+         * @param size The size of the list.
+         */
+        public RandomStringList(int seed, int size) {
+            random = new Random(seed);
+            strings = new String[size];
+            interned = new String[size];
+            for (int i = 0; i < size; i++) {
+                strings[i] = randomString();
+                interned[i] = strings[i].intern();
+            }
+        }
+
+        protected String randomString() {
+            return RandomStringUtils.random(12, 0, 0, true, true, null, random);
+        }
+
+        /**
+         * Gets a String that was not interned.
+         * @return The String.
+         */
+        public String get() {
+            int n = random.nextInt(strings.length);
+            return strings[n];
+        }
+
+        /**
+         * Gets a String that was interned.
+         * @return The String.
+         */
+        public String getInterned() {
+            int n = random.nextInt(interned.length);
+            return interned[n];
+        }
+    }
+
+    /**
+     * A generator that generates test data by filling a data set.
+     * @author Michael Zangl
+     */
+    public abstract static class DataGenerator {
+        private String datasetName;
+        protected final Random random;
+        private DataSet ds;
+
+        /**
+         * Create a new generator.
+         * @param datasetName The name for the generator. Only used for human readability.
+         */
+        protected DataGenerator(String datasetName) {
+            this.datasetName = datasetName;
+            this.random = new Random(1234);
+        }
+
+        /**
+         * Generates the data set. If this method is called twice, the same dataset is returned.
+         * @return The generated data set.
+         */
+        public DataSet generateDataSet() {
+            ensureInitialized();
+            return ds;
+        }
+
+        protected void ensureInitialized() {
+            if (ds == null) {
+                ds = new DataSet();
+                fillData(ds);
+            }
+        }
+
+        protected abstract void fillData(DataSet ds);
+
+        /**
+         * Create a random node and add it to the dataset.
+         * @return a random node
+         */
+        protected Node createRandomNode(DataSet ds) {
+            Node node = new Node();
+            node.setEastNorth(new EastNorth(random.nextDouble(), random.nextDouble()));
+            ds.addPrimitive(node);
+            return node;
+        }
+
+        /**
+         * Gets a file path where this data could be stored.
+         * @return A file path.
+         */
+        public File getFile() {
+            return new File(DATA_DIR + File.separator + datasetName + ".osm");
+        }
+
+        /**
+         * Creates a new {@link OsmDataLayer} that uses the underlying dataset of this generator.
+         * @return A new data layer.
+         */
+        public OsmDataLayer createDataLayer() {
+            return new OsmDataLayer(generateDataSet(), datasetName, getFile());
+        }
+
+        @Override
+        public String toString() {
+            return "DataGenerator [datasetName=" + datasetName + "]";
+        }
+    }
+
+    /**
+     * A data generator that generates a bunch of random nodes.
+     * @author Michael Zangl
+     */
+    public static class NodeDataGenerator extends DataGenerator {
+        protected final ArrayList<Node> nodes = new ArrayList<>();
+        private final int nodeCount;
+
+        protected NodeDataGenerator(String datasetName, int nodeCount) {
+            super(datasetName);
+            this.nodeCount = nodeCount;
+        }
+
+        @Override
+        public void fillData(DataSet ds) {
+            for (int i = 0; i < nodeCount; i++) {
+                nodes.add(createRandomNode(ds));
+            }
+        }
+
+        /**
+         * Gets a random node of this dataset.
+         * @return A random node.
+         */
+        public Node randomNode() {
+            ensureInitialized();
+            return nodes.get(random.nextInt(nodes.size()));
+        }
+    }
+
+    /**
+     * A data generator that generates a bunch of random nodes and fills them with keys/values.
+     * @author Michael Zangl
+     */
+    public static final class KeyValueDataGenerator extends NodeDataGenerator {
+
+        private static final int VALUE_COUNT = 200;
+        private static final int KEY_COUNT = 150;
+        private final double tagNodeRation;
+        private RandomStringList keys;
+        private RandomStringList values;
+
+        private KeyValueDataGenerator(String datasetName, int nodeCount, double tagNodeRation) {
+            super(datasetName, nodeCount);
+            this.tagNodeRation = tagNodeRation;
+        }
+
+        @Override
+        public void fillData(DataSet ds) {
+            super.fillData(ds);
+            keys = new RandomStringList(random.nextInt(), KEY_COUNT);
+            values = new RandomStringList(random.nextInt(), VALUE_COUNT);
+
+            double tags = nodes.size() * tagNodeRation;
+            for (int i = 0; i < tags; i++) {
+                String key = keys.get();
+                String value = values.get();
+                nodes.get(random.nextInt(nodes.size())).put(key, value);
+            }
+        }
+
+        /**
+         * Gets the values that were used to fill the tags.
+         * @return The list of strings.
+         */
+        public RandomStringList randomValues() {
+            ensureInitialized();
+            return values;
+        }
+
+        /**
+         * Gets the list of keys that was used to fill the tags.
+         * @return The list of strings.
+         */
+        public RandomStringList randomKeys() {
+            ensureInitialized();
+            return keys;
+        }
+
+        /**
+         * Gets a random value that was used to fill the tags.
+         * @return A random String probably used in as value somewhere. Not interned.
+         */
+        public String randomValue() {
+            return randomValues().get();
+        }
+
+        /**
+         * Gets a random key that was used to fill the tags.
+         * @return A random String probably used in as key somewhere. Not interned.
+         */
+        public String randomKey() {
+            return randomKeys().get();
+        }
+    }
+
+    /**
+     * Generate a generator that creates some nodes and adds random keys and values to it.
+     * @return The generator
+     */
+    public static KeyValueDataGenerator getKeyValue() {
+        return getKeyValue(DEFAULT_KEY_VALUE_RATIO);
+    }
+
+    /**
+     * Generate a generator that creates some nodes and adds random keys and values to it.
+     * @param tagNodeRation How many tags to add per node (on average).
+     * @return The generator
+     */
+    public static KeyValueDataGenerator getKeyValue(double tagNodeRation) {
+        return getKeyValue(DEFAULT_NODE_COUNT, tagNodeRation);
+    }
+
+    /**
+     * Generate a generator that creates some nodes and adds random keys and values to it.
+     * @param nodeCount The number of nodes the dataset should contain.
+     * @param tagNodeRation How many tags to add per node (on average).
+     * @return The generator
+     */
+    public static KeyValueDataGenerator getKeyValue(int nodeCount, double tagNodeRation) {
+        return new KeyValueDataGenerator("key-value", nodeCount, tagNodeRation);
+    }
+
+    /**
+     * Create a generator that generates a bunch of nodes.
+     * @return The generator
+     */
+    public static DataGenerator getNodes() {
+        return new NodeDataGenerator("nodes", DEFAULT_NODE_COUNT);
+    }
+}
diff --git a/test/performance/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRendererPerformanceTest.java b/test/performance/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRendererPerformanceTest.java
index 678b553..12765a4 100644
--- a/test/performance/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRendererPerformanceTest.java
+++ b/test/performance/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRendererPerformanceTest.java
@@ -34,7 +34,7 @@ public class StyledMapRendererPerformanceTest {
     public static void load() throws Exception {
         JOSMFixture.createPerformanceTestFixture().init();
         img = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, BufferedImage.TYPE_3BYTE_BGR);
-        g = (Graphics2D)img.getGraphics();
+        g = (Graphics2D) img.getGraphics();
         nc = new NavigatableComponent();
         nc.setBounds(0, 0, IMG_WIDTH, IMG_HEIGHT);
 
@@ -53,9 +53,9 @@ public class StyledMapRendererPerformanceTest {
     }
 
     private static void test(int iterations, DataSet ds, Bounds bounds) throws Exception {
-        Rendering visitor = new StyledMapRenderer(g,nc,false);
+        Rendering visitor = new StyledMapRenderer(g, nc, false);
         nc.zoomTo(bounds);
-        for (int i=0; i<iterations; i++) {
+        for (int i = 0; i < iterations; i++) {
             visitor.render(ds, true, bounds);
         }
     }
diff --git a/test/performance/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSourceFilterTest.java b/test/performance/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSourceFilterTest.java
new file mode 100644
index 0000000..e828005
--- /dev/null
+++ b/test/performance/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSourceFilterTest.java
@@ -0,0 +1,145 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.mappaint.mapcss;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.openstreetmap.josm.JOSMFixture;
+import org.openstreetmap.josm.PerformanceTestUtils;
+import org.openstreetmap.josm.PerformanceTestUtils.PerformanceTestTimer;
+import org.openstreetmap.josm.data.osm.OsmDataGenerator;
+import org.openstreetmap.josm.data.osm.OsmDataGenerator.KeyValueDataGenerator;
+import org.openstreetmap.josm.gui.mappaint.MultiCascade;
+
+/**
+ * Tests how fast {@link MapCSSStyleSource} finds the right style candidates for one object.
+ * @author Michael Zangl
+ */
+public class MapCSSStyleSourceFilterTest {
+
+    private static final int TEST_RULE_COUNT = 10000;
+
+    private class CssGenerator {
+        StringBuilder sb = new StringBuilder();
+        private KeyValueDataGenerator generator;
+
+        /**
+         * Create a new CSS generator.
+         * @param generator A generator to get the keys from.
+         */
+        public CssGenerator(KeyValueDataGenerator generator) {
+            this.generator = generator;
+        }
+
+        private CssGenerator addKeyValueRules(int count) {
+            for (int i = 0; i < count; i++) {
+                String key = generator.randomKey();
+                String value = generator.randomValue();
+                addRule("node[\"" + key + "\"=\"" + value + "\"]");
+            }
+            return this;
+        }
+
+        private CssGenerator addKeyRegexpRules(int count) {
+            for (int i = 0; i < count; i++) {
+                String key = generator.randomKey();
+                String value = generator.randomValue();
+                value = value.substring(i % value.length());
+                addRule("node[\"" + key + "\"=~/.*" + value + ".*/]");
+            }
+            return this;
+        }
+
+        public CssGenerator addHasKeyRules(int count) {
+            for (int i = 0; i < count; i++) {
+                String key = generator.randomKey();
+                addRule("node[\"" + key + "\"]");
+            }
+            return this;
+        }
+
+        public CssGenerator addIsTrueRules(int count) {
+            for (int i = 0; i < count; i++) {
+                String key = generator.randomKey();
+                addRule("node[\"" + key + "\"?]");
+            }
+            return this;
+        }
+
+        private void addRule(String selector) {
+            sb.append(selector + " {}\n");
+        }
+
+        public String getCss() {
+            return sb.toString();
+        }
+    }
+
+    private static final int APPLY_CALLS = 100000;
+
+    /**
+     * Prepare the test.
+     */
+    @BeforeClass
+    public static void createJOSMFixture() {
+        JOSMFixture.createPerformanceTestFixture().init(true);
+    }
+
+    /**
+     * Time how long it takes to evaluate [key=value] rules
+     */
+    @Test
+    public void testKeyValueRules() {
+        KeyValueDataGenerator data = OsmDataGenerator.getKeyValue();
+        data.generateDataSet();
+        CssGenerator css = new CssGenerator(data).addKeyValueRules(TEST_RULE_COUNT);
+        runTest(data, css, "only key=value rules");
+    }
+
+    /**
+     * Time how long it takes to evaluate [key] rules
+     */
+    @Test
+    public void testKeyOnlyRules() {
+        KeyValueDataGenerator data = OsmDataGenerator.getKeyValue();
+        data.generateDataSet();
+        CssGenerator css = new CssGenerator(data).addHasKeyRules(TEST_RULE_COUNT);
+        runTest(data, css, "only has key rules");
+    }
+
+    /**
+     * Time how long it takes to evaluate [key=~...] rules
+     */
+    @Test
+    public void testRegularExpressionRules() {
+        KeyValueDataGenerator data = OsmDataGenerator.getKeyValue();
+        data.generateDataSet();
+        CssGenerator css = new CssGenerator(data).addKeyRegexpRules(TEST_RULE_COUNT);
+        runTest(data, css, "regular expressions");
+    }
+
+    /**
+     * Time how long it takes to evaluate [key?] rules
+     */
+    @Test
+    public void testIsTrueRules() {
+        KeyValueDataGenerator data = OsmDataGenerator.getKeyValue();
+        data.generateDataSet();
+        CssGenerator css = new CssGenerator(data).addIsTrueRules(TEST_RULE_COUNT);
+        runTest(data, css, "is true");
+    }
+
+    private void runTest(KeyValueDataGenerator data, CssGenerator css, String description) {
+        MapCSSStyleSource source = new MapCSSStyleSource(css.getCss());
+        PerformanceTestTimer timer = PerformanceTestUtils.startTimer("MapCSSStyleSource#loadStyleSource(...) for " + description);
+        source.loadStyleSource();
+        timer.done();
+
+        timer = PerformanceTestUtils.startTimer(APPLY_CALLS + "x MapCSSStyleSource#apply(...) for " + description);
+        for (int i = 0; i < APPLY_CALLS; i++) {
+            MultiCascade mc = new MultiCascade();
+            source.apply(mc, data.randomNode(), 1, false);
+        }
+        timer.done();
+    }
+
+}
diff --git a/test/unit/org/CustomMatchers.java b/test/unit/org/CustomMatchers.java
index 43586ee..2f87384 100644
--- a/test/unit/org/CustomMatchers.java
+++ b/test/unit/org/CustomMatchers.java
@@ -1,16 +1,24 @@
 // License: GPL. For details, see LICENSE file.
 package org;
 
+import java.awt.geom.Point2D;
+import java.util.Collection;
+
+import org.hamcrest.CustomTypeSafeMatcher;
 import org.hamcrest.Description;
 import org.hamcrest.Matcher;
 import org.hamcrest.TypeSafeMatcher;
 import org.junit.Ignore;
+import org.openstreetmap.josm.data.coor.EastNorth;
+import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.tools.Predicate;
 
-import java.util.Collection;
-
 @Ignore("no test")
-public class CustomMatchers {
+public final class CustomMatchers {
+
+    private CustomMatchers() {
+        // Hide constructor for utility classes
+    }
 
     public static <T> Matcher<? extends T> forPredicate(final Predicate<T> predicate) {
         return new TypeSafeMatcher<T>() {
@@ -55,4 +63,33 @@ public class CustomMatchers {
         };
     }
 
+    public static Matcher<? super Point2D> is(final Point2D expected) {
+        return new CustomTypeSafeMatcher<Point2D>("the same Point2D") {
+            @Override
+            protected boolean matchesSafely(Point2D actual) {
+                return expected.distance(actual) <= 0.0000001;
+            }
+        };
+    }
+
+    public static Matcher<? super LatLon> is(final LatLon expected) {
+        return new CustomTypeSafeMatcher<LatLon>("the same LatLon") {
+            @Override
+            protected boolean matchesSafely(LatLon actual) {
+                return Math.abs(expected.getX() - actual.getX()) <= LatLon.MAX_SERVER_PRECISION
+                        && Math.abs(expected.getY() - actual.getY()) <= LatLon.MAX_SERVER_PRECISION;
+            }
+        };
+    }
+
+    public static Matcher<? super EastNorth> is(final EastNorth expected) {
+        return new CustomTypeSafeMatcher<EastNorth>("the same EastNorth") {
+            @Override
+            protected boolean matchesSafely(EastNorth actual) {
+                return Math.abs(expected.getX() - actual.getX()) <= LatLon.MAX_SERVER_PRECISION
+                        && Math.abs(expected.getY() - actual.getY()) <= LatLon.MAX_SERVER_PRECISION;
+            }
+        };
+    }
+
 }
diff --git a/test/unit/org/openstreetmap/josm/JOSMFixture.java b/test/unit/org/openstreetmap/josm/JOSMFixture.java
index f427b1b..c208d53 100644
--- a/test/unit/org/openstreetmap/josm/JOSMFixture.java
+++ b/test/unit/org/openstreetmap/josm/JOSMFixture.java
@@ -22,7 +22,7 @@ public class JOSMFixture {
      * Returns a new test fixture initialized to "unit" home.
      * @return A new test fixture for unit tests
      */
-    static public JOSMFixture createUnitTestFixture() {
+    public static JOSMFixture createUnitTestFixture() {
         return new JOSMFixture("test/config/unit-josm.home");
     }
 
@@ -30,7 +30,7 @@ public class JOSMFixture {
      * Returns a new test fixture initialized to "functional" home.
      * @return A new test fixture for functional tests
      */
-    static public JOSMFixture createFunctionalTestFixture() {
+    public static JOSMFixture createFunctionalTestFixture() {
         return new JOSMFixture("test/config/functional-josm.home");
     }
 
@@ -38,7 +38,7 @@ public class JOSMFixture {
      * Returns a new test fixture initialized to "performance" home.
      * @return A new test fixture for performance tests
      */
-    static public JOSMFixture createPerformanceTestFixture() {
+    public static JOSMFixture createPerformanceTestFixture() {
         return new JOSMFixture("test/config/performance-josm.home");
     }
 
@@ -71,8 +71,11 @@ public class JOSMFixture {
             fail(MessageFormat.format("property ''{0}'' not set in test environment", "josm.home"));
         } else {
             File f = new File(josmHome);
-            if (! f.exists() || ! f.canRead()) {
-                fail(MessageFormat.format("property ''{0}'' points to ''{1}'' which is either not existing ({2}) or not readable ({3}). Current directory is ''{4}''.",
+            if (!f.exists() || !f.canRead()) {
+                fail(MessageFormat.format(
+                        // CHECKSTYLE.OFF: LineLength
+                        "property ''{0}'' points to ''{1}'' which is either not existing ({2}) or not readable ({3}). Current directory is ''{4}''.",
+                        // CHECKSTYLE.ON: LineLength
                         "josm.home", josmHome, f.exists(), f.canRead(), Paths.get("").toAbsolutePath()));
             }
         }
diff --git a/test/unit/org/openstreetmap/josm/MainTest.java b/test/unit/org/openstreetmap/josm/MainTest.java
new file mode 100644
index 0000000..6100e9e
--- /dev/null
+++ b/test/unit/org/openstreetmap/josm/MainTest.java
@@ -0,0 +1,15 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+import org.junit.Test;
+
+public class MainTest {
+    @Test
+    public void testParamType() throws Exception {
+        assertThat(Main.paramType("48.000,16.000,48.001,16.001"), is(Main.DownloadParamType.bounds));
+
+    }
+}
diff --git a/test/unit/org/openstreetmap/josm/TestUtils.java b/test/unit/org/openstreetmap/josm/TestUtils.java
index 8b75bd6..678d115 100644
--- a/test/unit/org/openstreetmap/josm/TestUtils.java
+++ b/test/unit/org/openstreetmap/josm/TestUtils.java
@@ -9,7 +9,11 @@ import java.util.Comparator;
 /**
  * Various utils, useful for unit tests.
  */
-public class TestUtils {
+public final class TestUtils {
+
+    private TestUtils() {
+        // Hide constructor for utility classes
+    }
 
     /**
      * Returns the path to test data root directory.
@@ -51,13 +55,13 @@ public class TestUtils {
     public static <T> void checkComparableContract(Comparator<T> comparator, T[] array) {
         System.out.println("Validating Comparable contract on array of "+array.length+" elements");
         // Check each compare possibility
-        for (int i=0; i<array.length; i++) {
+        for (int i = 0; i < array.length; i++) {
             T r1 = array[i];
-            for (int j=i; j<array.length; j++) {
+            for (int j = i; j < array.length; j++) {
                 T r2 = array[j];
                 int a = comparator.compare(r1, r2);
                 int b = comparator.compare(r2, r1);
-                if (i==j || a==b) {
+                if (i == j || a == b) {
                     if (a != 0 || b != 0) {
                         fail(getFailMessage(r1, r2, a, b));
                     }
@@ -66,7 +70,7 @@ public class TestUtils {
                         fail(getFailMessage(r1, r2, a, b));
                     }
                 }
-                for (int k=j; k<array.length; k++) {
+                for (int k = j; k < array.length; k++) {
                     T r3 = array[k];
                     int c = comparator.compare(r1, r3);
                     int d = comparator.compare(r2, r3);
@@ -102,4 +106,15 @@ public class TestUtils {
         .append("\nCompared\no2: ").append(o2).append("\no3: ").append(o3).append("\ngave: ").append(d)
         .toString();
     }
+
+    /**
+     * Returns the Java version as a double value.
+     * @return the Java version as a double value (1.7, 1.8, 1.9, etc.)
+     */
+    public static double getJavaVersion() {
+        String version = System.getProperty("java.version");
+        int pos = version.indexOf('.');
+        pos = version.indexOf('.', pos + 1);
+        return Double.parseDouble(version.substring(0, pos));
+    }
 }
diff --git a/test/unit/org/openstreetmap/josm/actions/CopyActionTest.java b/test/unit/org/openstreetmap/josm/actions/CopyActionTest.java
index 940c999..5c615b6 100644
--- a/test/unit/org/openstreetmap/josm/actions/CopyActionTest.java
+++ b/test/unit/org/openstreetmap/josm/actions/CopyActionTest.java
@@ -1,17 +1,18 @@
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.actions;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+import java.util.Arrays;
+import java.util.Collections;
+
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.openstreetmap.josm.JOSMFixture;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.Way;
 
-import java.util.Arrays;
-import java.util.Collections;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.*;
-
 public class CopyActionTest {
 
     @BeforeClass
diff --git a/test/unit/org/openstreetmap/josm/actions/CreateCircleActionTest.java b/test/unit/org/openstreetmap/josm/actions/CreateCircleActionTest.java
index 82aff1c..1992aa7 100644
--- a/test/unit/org/openstreetmap/josm/actions/CreateCircleActionTest.java
+++ b/test/unit/org/openstreetmap/josm/actions/CreateCircleActionTest.java
@@ -1,6 +1,7 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.actions;
 
+import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 
 import java.awt.geom.Area;
@@ -97,9 +98,8 @@ public final class CreateCircleActionTest {
 
         // Expected result: Dataset contain one closed way, clockwise
         Collection<Way> resultingWays = dataSet.getWays();
-        assertTrue(String.format("Expect one way after perform action. %d found",
-                                 resultingWays.size()),
-                   resultingWays.size() == 1);
+        assertSame(String.format("Expect one way after perform action. %d found", resultingWays.size()),
+                   resultingWays.size(), 1);
         Way resultingWay = resultingWays.iterator().next();
         assertTrue("Resulting way is not closed",
                    resultingWay.isClosed());
@@ -112,13 +112,16 @@ public final class CreateCircleActionTest {
      */
     private static class ConstantTrafficHand implements GeoProperty<Boolean> {
         boolean isLeft;
+
         ConstantTrafficHand(boolean isLeft) {
             this.isLeft = isLeft;
         }
+
         @Override
         public Boolean get(LatLon ll) {
             return isLeft;
         }
+
         @Override
         public Boolean get(BBox box) {
             return isLeft;
@@ -173,9 +176,8 @@ public final class CreateCircleActionTest {
 
         // Expected result: Dataset contain one closed way, clockwise
         Collection<Way> resultingWays = dataSet.getWays();
-        assertTrue(String.format("Expect one way after perform action. %d found",
-                                 resultingWays.size()),
-                   resultingWays.size() == 1);
+        assertSame(String.format("Expect one way after perform action. %d found", resultingWays.size()),
+                   resultingWays.size(), 1);
         Way resultingWay = resultingWays.iterator().next();
         assertTrue("Resulting way is not closed",
                    resultingWay.isClosed());
diff --git a/test/unit/org/openstreetmap/josm/actions/SplitWayActionTest.java b/test/unit/org/openstreetmap/josm/actions/SplitWayActionTest.java
index d6f9c71..71f0fbe 100644
--- a/test/unit/org/openstreetmap/josm/actions/SplitWayActionTest.java
+++ b/test/unit/org/openstreetmap/josm/actions/SplitWayActionTest.java
@@ -1,6 +1,7 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.actions;
 
+import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 
 import java.util.Arrays;
@@ -79,18 +80,17 @@ public final class SplitWayActionTest {
         }
 
         // Ensures 3 ways.
-        assertTrue(String.format("Found %d ways after split action instead of 3.",
-                                 dataSet.getWays().size()),
-                   dataSet.getWays().size() == 3);
+        assertSame(String.format("Found %d ways after split action instead of 3.", dataSet.getWays().size()),
+                   dataSet.getWays().size(), 3);
 
         // Ensures way w1 is unchanged.
         assertTrue("Unselected ways disappear during split action.",
                    dataSet.getWays().contains(w1));
-        assertTrue("Unselected way seems to have change during split action.",
-                   w1.getNodesCount() == 3);
-        for(int i = 0; i < 3; i++) {
-            assertTrue("Node change in unselected way during split action.",
-                       w1.getNode(i) == w1NodesArray[i]);
+        assertSame("Unselected way seems to have change during split action.",
+                   w1.getNodesCount(), 3);
+        for (int i = 0; i < 3; i++) {
+            assertSame("Node change in unselected way during split action.",
+                       w1.getNode(i), w1NodesArray[i]);
         }
     }
 }
diff --git a/test/unit/org/openstreetmap/josm/actions/UnJoinNodeWayActionTest.java b/test/unit/org/openstreetmap/josm/actions/UnJoinNodeWayActionTest.java
index 36edaec..3d790b2 100644
--- a/test/unit/org/openstreetmap/josm/actions/UnJoinNodeWayActionTest.java
+++ b/test/unit/org/openstreetmap/josm/actions/UnJoinNodeWayActionTest.java
@@ -1,7 +1,7 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.actions;
 
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertFalse;
 
 import java.util.Arrays;
 
@@ -31,7 +31,7 @@ public final class UnJoinNodeWayActionTest {
         @Override
         public void notify(String msg, int messageType) {
             return;
-        };
+        }
     }
 
     /**
@@ -81,7 +81,6 @@ public final class UnJoinNodeWayActionTest {
         }
 
         // Ensures node n2 remove from w
-        assertTrue("Node n2 wasn't removed from way w.",
-                   !w.containsNode(n2));
+        assertFalse("Node n2 wasn't removed from way w.", w.containsNode(n2));
     }
 }
diff --git a/test/unit/org/openstreetmap/josm/actions/mapmode/SelectActionTest.java b/test/unit/org/openstreetmap/josm/actions/mapmode/SelectActionTest.java
new file mode 100644
index 0000000..82eb98b
--- /dev/null
+++ b/test/unit/org/openstreetmap/josm/actions/mapmode/SelectActionTest.java
@@ -0,0 +1,234 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.actions.mapmode;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.awt.Cursor;
+import java.awt.event.InputEvent;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.geom.Point2D;
+import java.lang.reflect.Field;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.openstreetmap.josm.JOSMFixture;
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.Preferences;
+import org.openstreetmap.josm.data.coor.EastNorth;
+import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.gui.MapFrame;
+import org.openstreetmap.josm.gui.MapView;
+import org.openstreetmap.josm.gui.layer.Layer;
+import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+import org.openstreetmap.josm.tools.Predicate;
+
+/**
+ * Unit tests for class {@link SelectAction}.
+ */
+public class SelectActionTest {
+
+    public class MapViewMock extends MapView {
+        public OsmDataLayer layer;
+        public DataSet currentDataSet;
+
+        public Predicate<OsmPrimitive> isSelectablePredicate =
+                new Predicate<OsmPrimitive>() {
+                    @Override
+                    public boolean evaluate(OsmPrimitive prim) {
+                        return true;
+                    }
+                };
+
+        MapViewMock(DataSet dataSet, OsmDataLayer layer) {
+            super(null, null);
+            this.layer = layer;
+            this.currentDataSet = dataSet;
+        }
+
+        @Override
+        public EastNorth getEastNorth(int x, int y) {
+            return new EastNorth(x, y);
+        }
+
+        @Override
+        public void addMouseListener(MouseListener ml) {}
+
+        @Override
+        public void removeMouseListener(MouseListener ml) {}
+
+        public void addMouseMotionListener(MouseListener ml) {}
+
+        public void removeMouseMotionListener(MouseListener ml) {}
+
+        public void mvRepaint() {}
+
+        @Override
+        public void setVirtualNodesEnabled(boolean enabled) {}
+
+        @Override
+        public void setNewCursor(Cursor cursor, Object reference) {}
+
+        @Override
+        public void setNewCursor(int cursor, Object reference) {}
+
+        @Override
+        public boolean isActiveLayerVisible() {
+            return true;
+        }
+
+        @Override
+        public void requestClearRect() {}
+
+        @Override
+        public Point2D getPoint2D(EastNorth p) {
+            return new Point2D.Double(p.getX(), p.getY());
+        }
+
+        @Override
+        public void setActiveLayer(Layer layer) {}
+
+        @Override
+        public Layer getActiveLayer() {
+            return layer;
+        }
+
+        @Override
+        protected DataSet getCurrentDataSet() {
+            return currentDataSet;
+        }
+    }
+
+    /**
+     * Override some configuration variables without change in preferences.xml
+     */
+    class PreferencesMock extends Preferences {
+        @Override
+        public synchronized int getInteger(String key, int def) {
+            if (key == "edit.initial-move-delay") {
+                return 0;
+            } else {
+                return super.getInteger(key, def);
+            }
+        }
+    }
+
+    boolean nodesMerged;
+
+    class SelectActionMock extends SelectAction {
+        public SelectActionMock(MapFrame mapFrame, DataSet dataSet, OsmDataLayer layer) {
+            super(mapFrame);
+            try {
+                Field mv = SelectAction.class.getDeclaredField("mv");
+                mv.setAccessible(true);
+                mv.set(this, new MapViewMock(dataSet, layer));
+            } catch (Exception e) {
+                e.printStackTrace();
+                fail("Can't setup testing environnement");
+            }
+        }
+
+        @Override
+        public void mergeNodes(OsmDataLayer layer, Collection<Node> nodes,
+                               Node targetLocationNode) {
+            assertSame(String.format("Should merge two nodes, %d found", nodes.size()),
+                       nodes.size(), 2);
+            nodesMerged = true;
+        }
+    }
+
+    /**
+     * Setup test.
+     */
+    @BeforeClass
+    public static void setUp() {
+        JOSMFixture.createUnitTestFixture().init(true);
+    }
+
+    /**
+     * Test case: Move a two nodes way near a third node.
+     * Resulting way should be attach to the third node.
+     * see #10748
+     */
+    @Test
+    public void test10748() {
+        DataSet dataSet = new DataSet();
+        OsmDataLayer layer = new OsmDataLayer(dataSet, OsmDataLayer.createNewName(), null);
+
+        Node n1 = new Node(new EastNorth(0, 0));
+        Node n2 = new Node(new EastNorth(100, 0));
+        Node n3 = new Node(new EastNorth(200, 0));
+        dataSet.addPrimitive(n1);
+        dataSet.addPrimitive(n2);
+        dataSet.addPrimitive(n3);
+
+        Way w = new Way();
+        w.setNodes(Arrays.asList(new Node[] {n2, n3}));
+        dataSet.addPrimitive(w);
+
+        dataSet.addSelected(n2);
+        dataSet.addSelected(w);
+
+        Main.pref = new PreferencesMock();
+        Main.main.addLayer(layer);
+        SelectAction action = new SelectActionMock(Main.map, dataSet, layer);
+        nodesMerged = false;
+
+        action.setEnabled(true);
+        action.putValue("active", true);
+
+        MouseEvent event;
+        event = new MouseEvent(Main.map,
+                               MouseEvent.MOUSE_PRESSED,
+                               0,
+                               InputEvent.BUTTON1_MASK | InputEvent.CTRL_MASK,
+                               100, 0,
+                               1,
+                               false);
+        action.mousePressed(event);
+        event = new MouseEvent(Main.map,
+                               MouseEvent.MOUSE_DRAGGED,
+                               1000,
+                               InputEvent.BUTTON1_MASK | InputEvent.CTRL_MASK,
+                               50, 0,
+                               1,
+                               false);
+        action.mouseDragged(event);
+        event = new MouseEvent(Main.map,
+                               MouseEvent.MOUSE_RELEASED,
+                               2000,
+                               InputEvent.BUTTON1_MASK | InputEvent.CTRL_MASK,
+                               5, 0,
+                               1,
+                               false);
+        action.mouseReleased(event);
+
+        // As result of test, we must find a 2 nodes way, from EN(0, 0) to EN(100, 0)
+        assertTrue("Nodes are not merged", nodesMerged);
+        assertSame(String.format("Expect exactly one way, found %d\n", dataSet.getWays().size()),
+                   dataSet.getWays().size(), 1);
+        Way rw = dataSet.getWays().iterator().next();
+        assertFalse("Way shouldn't be deleted\n", rw.isDeleted());
+        assertSame(String.format("Way shouldn't have 2 nodes, %d found\n", w.getNodesCount()),
+                   rw.getNodesCount(), 2);
+        Node r1 = rw.firstNode();
+        Node r2 = rw.lastNode();
+        if (r1.getEastNorth().east() > r2.getEastNorth().east()) {
+            Node tmp = r1;
+            r1 = r2;
+            r2 = tmp;
+        }
+        assertSame(String.format("East should be 0, found %f\n", r1.getEastNorth().east()),
+                   Double.compare(r1.getEastNorth().east(), 0), 0);
+        assertSame(String.format("East should be 100, found %f\n", r2.getEastNorth().east()),
+                   Double.compare(r2.getEastNorth().east(), 100), 0);
+    }
+}
diff --git a/test/unit/org/openstreetmap/josm/actions/search/SearchCompilerTest.java b/test/unit/org/openstreetmap/josm/actions/search/SearchCompilerTest.java
index 9f9be6b..8de3341 100644
--- a/test/unit/org/openstreetmap/josm/actions/search/SearchCompilerTest.java
+++ b/test/unit/org/openstreetmap/josm/actions/search/SearchCompilerTest.java
@@ -1,3 +1,4 @@
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.actions.search;
 
 import org.hamcrest.CoreMatchers;
diff --git a/test/unit/org/openstreetmap/josm/data/BoundsTest.java b/test/unit/org/openstreetmap/josm/data/BoundsTest.java
index f29b540..e1a7d6c 100644
--- a/test/unit/org/openstreetmap/josm/data/BoundsTest.java
+++ b/test/unit/org/openstreetmap/josm/data/BoundsTest.java
@@ -1,43 +1,46 @@
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
 import org.junit.Test;
 import org.openstreetmap.josm.data.coor.LatLon;
 
-import static org.junit.Assert.assertTrue;
-
 public class BoundsTest {
 
     @Test
     public void crossingTests() {
         Bounds b1 = new Bounds(0, 170, 50, -170);
         assertTrue(b1.crosses180thMeridian());
-        assertTrue(!b1.contains(new LatLon(-10, -180)));
+        assertFalse(b1.contains(new LatLon(-10, -180)));
         assertTrue(b1.contains(new LatLon(0, -180)));
         assertTrue(b1.contains(new LatLon(50, -180)));
-        assertTrue(!b1.contains(new LatLon(60, -180)));
-        assertTrue(!b1.contains(new LatLon(-10, 180)));
+        assertFalse(b1.contains(new LatLon(60, -180)));
+        assertFalse(b1.contains(new LatLon(-10, 180)));
         assertTrue(b1.contains(new LatLon(0, 180)));
         assertTrue(b1.contains(new LatLon(50, 180)));
-        assertTrue(!b1.contains(new LatLon(60, 180)));
+        assertFalse(b1.contains(new LatLon(60, 180)));
 
         Bounds b2 = new Bounds(60, 170, 90, -170);
-        assertTrue(!b1.intersects(b2));
-        assertTrue(!b2.intersects(b1));
+        assertFalse(b1.intersects(b2));
+        assertFalse(b2.intersects(b1));
 
         Bounds b3 = new Bounds(25, 170, 90, -170);
         assertTrue(b1.intersects(b3));
         assertTrue(b3.intersects(b1));
         assertTrue(b2.intersects(b3));
         assertTrue(b3.intersects(b2));
-        
+
         b3.extend(b1);
-        assertTrue(b3.equals(new Bounds(0, 170, 90, -170)));
+        assertEquals(b3, new Bounds(0, 170, 90, -170));
         assertTrue(b1.intersects(b3));
         assertTrue(b3.intersects(b1));
         assertTrue(b2.intersects(b3));
         assertTrue(b3.intersects(b2));
-        
+
         b3.extend(new LatLon(0, 0));
-        assertTrue(b3.equals(new Bounds(0, 0, 90, -170)));
+        assertEquals(b3, new Bounds(0, 0, 90, -170));
     }
 }
diff --git a/test/unit/org/openstreetmap/josm/data/cache/JCSCachedTileLoaderJobTest.java b/test/unit/org/openstreetmap/josm/data/cache/JCSCachedTileLoaderJobTest.java
new file mode 100644
index 0000000..5a82304
--- /dev/null
+++ b/test/unit/org/openstreetmap/josm/data/cache/JCSCachedTileLoaderJobTest.java
@@ -0,0 +1,118 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.cache;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.apache.commons.jcs.access.behavior.ICacheAccess;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.openstreetmap.josm.JOSMFixture;
+
+public class JCSCachedTileLoaderJobTest {
+    private static class TestCachedTileLoaderJob extends JCSCachedTileLoaderJob<String, CacheEntry> {
+        private String url;
+
+        public TestCachedTileLoaderJob(String url) throws IOException {
+            super(getCache(), 30000, 30000, null);
+            this.url = url;
+        }
+
+        private static ICacheAccess<String, CacheEntry> getCache() throws IOException {
+         return JCSCacheManager.getCache("test");
+        }
+
+        @Override
+        public String getCacheKey() {
+            return "cachekey";
+        }
+
+        @Override
+        public URL getUrl() {
+            try {
+                return new URL(url);
+            } catch (MalformedURLException e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+        @Override
+        protected CacheEntry createCacheEntry(byte[] content) {
+            return new CacheEntry("dummy".getBytes());
+        }
+
+    }
+
+    private static class Listener implements ICachedLoaderListener {
+        private CacheEntry data;
+        private CacheEntryAttributes attributes;
+        private LoadResult result;
+        private boolean ready;
+
+        @Override
+        public synchronized void loadingFinished(CacheEntry data, CacheEntryAttributes attributes, LoadResult result) {
+            this.data = data;
+            this.attributes = attributes;
+            this.result = result;
+            this.ready = true;
+            this.notify();
+        }
+
+    }
+    /**
+     * Setup test.
+     */
+    @BeforeClass
+    public static void setUp() {
+        JOSMFixture.createUnitTestFixture().init();
+    }
+
+    @Test
+    public void testStatusCodes() throws Exception {
+        testStatusCode(200);
+        // can't test for 3xx, as httpstat.us redirects finally to 200 page
+        testStatusCode(401);
+        testStatusCode(402);
+        testStatusCode(403);
+        testStatusCode(404);
+        testStatusCode(405);
+        testStatusCode(500);
+        testStatusCode(501);
+        testStatusCode(502);
+    }
+
+    @Test
+    public void testUnkownHost() throws Exception {
+        TestCachedTileLoaderJob job = new TestCachedTileLoaderJob("http://unkownhost.unkownhost/unkown");
+        Listener listener = new Listener();
+        job.submit(listener, true);
+        synchronized (listener) {
+            if (!listener.ready) {
+                listener.wait();
+            }
+        }
+        assertEquals("java.net.UnknownHostException: unkownhost.unkownhost", listener.attributes.getErrorMessage());
+    }
+
+    public void testStatusCode(int responseCode) throws Exception {
+        TestCachedTileLoaderJob job = getStatusLoaderJob(responseCode);
+        Listener listener = new Listener();
+        job.submit(listener, true);
+        synchronized (listener) {
+            if (!listener.ready) {
+                listener.wait();
+            }
+        }
+        assertEquals(responseCode, listener.attributes.getResponseCode());
+
+    }
+
+    private static TestCachedTileLoaderJob getStatusLoaderJob(int responseCode) throws IOException {
+        return new TestCachedTileLoaderJob("http://httpstat.us/" + responseCode);
+    }
+
+}
+
diff --git a/test/unit/org/openstreetmap/josm/data/imagery/TemplatedWMSTileSourceTest.java b/test/unit/org/openstreetmap/josm/data/imagery/TemplatedWMSTileSourceTest.java
new file mode 100644
index 0000000..635a3ae
--- /dev/null
+++ b/test/unit/org/openstreetmap/josm/data/imagery/TemplatedWMSTileSourceTest.java
@@ -0,0 +1,213 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.imagery;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.openstreetmap.gui.jmapviewer.TileXY;
+import org.openstreetmap.gui.jmapviewer.interfaces.ICoordinate;
+import org.openstreetmap.gui.jmapviewer.tilesources.TemplatedTMSTileSource;
+import org.openstreetmap.josm.JOSMFixture;
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.coor.EastNorth;
+import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.osm.BBox;
+import org.openstreetmap.josm.data.projection.CustomProjection;
+import org.openstreetmap.josm.data.projection.Projection;
+import org.openstreetmap.josm.data.projection.Projections;
+
+public class TemplatedWMSTileSourceTest {
+
+    private ImageryInfo testImageryWMS =  new ImageryInfo("test imagery", "http://localhost", "wms", null, null);
+    private ImageryInfo testImageryTMS =  new ImageryInfo("test imagery", "http://localhost", "tms", null, null);
+    //private TileSource testSource = new TemplatedWMSTileSource(testImageryWMS);
+    /**
+     * Setup test.
+     */
+    @BeforeClass
+    public static void setUp() {
+        JOSMFixture.createUnitTestFixture().init();
+    }
+
+    @Test
+    public void testEPSG3857() {
+        Main.setProjection(Projections.getProjectionByCode("EPSG:3857"));
+        TemplatedWMSTileSource source = new TemplatedWMSTileSource(testImageryWMS);
+        verifyMercatorTile(source, 0, 0, 1);
+        verifyMercatorTile(source, 0, 0, 2);
+        verifyMercatorTile(source, 0, 1, 2);
+        verifyMercatorTile(source, 1, 0, 2);
+        verifyMercatorTile(source, 1, 1, 2);
+        for (int x = 0; x < 4; x++) {
+            for (int y = 0; y < 4; y++) {
+                verifyMercatorTile(source, x, y, 3);
+                verifyTileSquarness(source, x, y, 3);
+            }
+        }
+        verifyTileSquarness(source, 150, 20, 18);
+        verifyTileSquarness(source, 2270, 1323, 12);
+        verifyLocation(source, new LatLon(53.5937132, 19.5652017));
+        verifyLocation(source, new LatLon(53.501565692302854, 18.54455233898721));
+
+    }
+
+    @Test
+    public void testEPSG4326() {
+        Main.setProjection(Projections.getProjectionByCode("EPSG:4326"));
+        TemplatedWMSTileSource source = getSource();
+
+        verifyLocation(source, new LatLon(53.5937132, 19.5652017));
+        verifyLocation(source, new LatLon(53.501565692302854, 18.54455233898721));
+        verifyTileSquarness(source, 2, 2, 2);
+        verifyTileSquarness(source, 150, 20, 18);
+        verifyTileSquarness(source, 2270, 1323, 12);
+    }
+
+    @Test
+    public void testEPSG4326_widebounds() {
+        Main.setProjection(new CustomProjection("+proj=lonlat +datum=WGS84 +axis=neu +bounds=-180,53,180,54"));
+        TemplatedWMSTileSource source = getSource();
+
+        verifyLocation(source, new LatLon(53.5937132, 19.5652017));
+        verifyLocation(source, new LatLon(53.501565692302854, 18.54455233898721));
+    }
+
+    @Test
+    public void testEPSG4326_narrowbounds() {
+        Main.setProjection(new CustomProjection("+proj=lonlat +datum=WGS84 +axis=neu +bounds=18,-90,20,90"));
+        TemplatedWMSTileSource source = getSource();
+
+        verifyLocation(source, new LatLon(53.5937132, 19.5652017));
+        verifyLocation(source, new LatLon(53.501565692302854, 18.54455233898721));
+    }
+
+    @Test
+    public void testEPSG2180() {
+        Main.setProjection(Projections.getProjectionByCode("EPSG:2180"));
+        TemplatedWMSTileSource source = getSource();
+
+        verifyLocation(source, new LatLon(53.5937132, 19.5652017));
+        verifyLocation(source, new LatLon(53.501565692302854, 18.54455233898721));
+
+        verifyTileSquarness(source, 2, 2, 2);
+        verifyTileSquarness(source, 150, 20, 18);
+        verifyTileSquarness(source, 2270, 1323, 12);
+    }
+
+    @Test
+    public void testEPSG3006_withbounds() {
+        Main.setProjection(
+                new CustomProjection("+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 "
+                        + "+units=m +no_defs +axis=neu +wmssrs=EPSG:3006 +bounds=10.5700,55.2000,24.1800,69.1000 "));
+        TemplatedWMSTileSource source = getSource();
+
+        verifyLocation(source, new LatLon(60, 18), 3);
+        verifyLocation(source, new LatLon(60, 18));
+
+    }
+
+    @Test
+    public void testEPSG3006_withoutbounds() {
+        Main.setProjection(
+                new CustomProjection("+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 "
+                        + "+units=m +no_defs +axis=neu +wmssrs=EPSG:3006"));
+        TemplatedWMSTileSource source = getSource();
+
+        verifyTileSquarness(source, 0, 1, 4);
+        verifyLocation(source, new LatLon(60, 18.1), 3);
+        verifyLocation(source, new LatLon(60, 18.1));
+
+    }
+
+    private void verifyMercatorTile(TemplatedWMSTileSource source, int x, int y, int z) {
+        TemplatedTMSTileSource verifier = new TemplatedTMSTileSource(testImageryTMS);
+        LatLon result = getTileLatLon(source, x, y, z);
+        ICoordinate expected = verifier.tileXYToLatLon(x, y, z - 1);
+        assertEquals(expected.getLat(), result.lat(), 1e-4);
+        assertEquals(expected.getLon(), result.lon(), 1e-4);
+        //assertTrue("result: " + result.toDisplayString() + " osmMercator: " +  expected.toDisplayString(), result.equalsEpsilon(expected));
+        LatLon tileCenter = new Bounds(result, getTileLatLon(source, x+1, y+1, z)).getCenter();
+        TileXY backwardsResult = source.latLonToTileXY(tileCenter.toCoordinate(), z);
+        assertEquals(x, backwardsResult.getXIndex());
+        assertEquals(y, backwardsResult.getYIndex());
+    }
+
+    private void verifyLocation(TemplatedWMSTileSource source, LatLon location) {
+        for (int z = source.getMaxZoom(); z > source.getMinZoom() + 1; z--) {
+            if (source.getTileXMax(z) != source.getTileXMin(z) && source.getTileYMax(z) != source.getTileYMin(z)) {
+                // do the tests only where there is more than one tile
+                verifyLocation(source, location, z);
+            }
+        }
+    }
+
+    private void verifyLocation(TemplatedWMSTileSource source, LatLon location, int z) {
+        assertTrue(
+                "Point outside world bounds",
+                Main.getProjection().getWorldBoundsLatLon().contains(location)
+                );
+
+        TileXY tileIndex = source.latLonToTileXY(location.toCoordinate(), z);
+
+        assertTrue("X index: " + tileIndex.getXIndex() + " greater than tileXmax: " + source.getTileXMax(z) + " at zoom: " + z,
+                tileIndex.getXIndex() <= source.getTileXMax(z));
+
+        assertTrue("Y index: " + tileIndex.getYIndex() + " greater than tileYmax: " + source.getTileYMax(z) + " at zoom: " + z,
+                tileIndex.getYIndex() <= source.getTileYMax(z));
+
+        // test that location is within tile bounds
+        BBox bbox = new BBox(
+                getTileLatLon(source, tileIndex, z),
+                getTileLatLon(source, tileIndex.getXIndex() + 1, tileIndex.getYIndex() + 1, z)
+                );
+        assertTrue(location.toDisplayString() + " not within " + bbox.toString() +
+                " for tile " + z + "/" + tileIndex.getXIndex() + "/" + tileIndex.getYIndex(),
+                bbox.bounds(location));
+        verifyTileSquarness(source, tileIndex.getXIndex(), tileIndex.getYIndex(), z);
+    }
+
+    private LatLon getTileLatLon(TemplatedWMSTileSource source, TileXY tileIndex, int z) {
+        return getTileLatLon(source, tileIndex.getXIndex(), tileIndex.getYIndex(), z);
+    }
+
+    private LatLon getTileLatLon(TemplatedWMSTileSource source, int x, int y, int z) {
+        return new LatLon(source.tileXYToLatLon(x, y, z));
+    }
+
+    private void verifyTileSquarness(TemplatedWMSTileSource source, int x, int y, int z) {
+        Projection proj = Main.getProjection();
+        /**
+         * t1 | t2
+         * -------
+         * t3 | t4
+         */
+        EastNorth t1 = source.getTileEastNorth(x, y, z);
+        EastNorth t2 = source.getTileEastNorth(x + 1, y, z);
+        EastNorth t3 = source.getTileEastNorth(x, y + 1, z);
+        EastNorth t4 = source.getTileEastNorth(x + 1, y + 1, z);
+        double y_size = Math.abs(t1.getY() - t4.getY());
+        double x_size = Math.abs(t1.getX() - t4.getX());
+
+        assertEquals(x_size, y_size, Math.max(x_size, y_size) * 1e-06);
+        assertEquals(y_size, Math.abs(t1.getY() - t3.getY()), y_size * 1e-06);
+        assertEquals(x_size, Math.abs(t1.getX() - t2.getX()), x_size * 1e-06);
+
+        t1 = source.getTileEastNorth(x, y, z);
+        t2 = source.getTileEastNorth(x + 1, y, z);
+        t3 = source.getTileEastNorth(x, y + 1, z);
+        t4 = source.getTileEastNorth(x + 1, y + 1, z);
+        y_size = Math.abs(t1.getY() - t4.getY());
+        x_size = Math.abs(t1.getX() - t4.getX());
+        assertEquals(x_size, y_size, Math.max(x_size, y_size) * 1e-05);
+        assertEquals(y_size, Math.abs(t1.getY() - t3.getY()), y_size * 1e-05);
+        assertEquals(x_size, Math.abs(t1.getX() - t2.getX()), x_size * 1e-05);
+    }
+
+    private TemplatedWMSTileSource getSource() {
+        TemplatedWMSTileSource source = new TemplatedWMSTileSource(testImageryWMS);
+        return source;
+    }
+}
diff --git a/test/unit/org/openstreetmap/josm/data/imagery/WMTSTileSourceTest.java b/test/unit/org/openstreetmap/josm/data/imagery/WMTSTileSourceTest.java
new file mode 100644
index 0000000..c2048a6
--- /dev/null
+++ b/test/unit/org/openstreetmap/josm/data/imagery/WMTSTileSourceTest.java
@@ -0,0 +1,234 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.imagery;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.openstreetmap.gui.jmapviewer.tilesources.TemplatedTMSTileSource;
+import org.openstreetmap.josm.JOSMFixture;
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.projection.Projections;
+
+public class WMTSTileSourceTest {
+
+    private ImageryInfo testImageryTMS =  new ImageryInfo("test imagery", "http://localhost", "tms", null, null);
+    private ImageryInfo testImageryPSEUDO_MERCATOR = getImagery("test/data/wmts/getcapabilities-pseudo-mercator.xml");
+    private ImageryInfo testImageryTOPO_PL = getImagery("test/data/wmts/getcapabilities-TOPO.xml");
+    private ImageryInfo testImageryORTO_PL = getImagery("test/data/wmts/getcapabilities-ORTO.xml");
+    private ImageryInfo testImageryWIEN = getImagery("test/data/wmts/getCapabilities-wien.xml");
+    private ImageryInfo testImageryWALLONIE = getImagery("test/data/wmts/WMTSCapabilities-Wallonie.xml");
+    private ImageryInfo testImageryOntario = getImagery("test/data/wmts/WMTSCapabilities-Ontario.xml");
+
+    @BeforeClass
+    public static void setUp() {
+        JOSMFixture.createUnitTestFixture().init();
+    }
+
+    private static ImageryInfo getImagery(String path) {
+        try {
+            return new ImageryInfo(
+                    "test",
+                    new File(path).toURI().toURL().toString()
+                    );
+        } catch (MalformedURLException e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    @Test
+    public void testPseudoMercator() throws MalformedURLException, IOException {
+        Main.setProjection(Projections.getProjectionByCode("EPSG:3857"));
+        WMTSTileSource testSource = new WMTSTileSource(testImageryPSEUDO_MERCATOR);
+        testSource.initProjection();
+
+        verifyMercatorTile(testSource, 0, 0, 1);
+        verifyMercatorTile(testSource, 0, 0, 2);
+        verifyMercatorTile(testSource, 1, 1, 2);
+        for (int x = 0; x < 4; x++) {
+            for (int y = 0; y < 4; y++) {
+                verifyMercatorTile(testSource, x, y, 3);
+            }
+        }
+        for (int x = 0; x < 8; x++) {
+            for (int y = 0; y < 4; y++) {
+                verifyMercatorTile(testSource, x, y, 4);
+            }
+        }
+
+        verifyMercatorTile(testSource, 2 << 9 - 1, 2 << 8 - 1, 10);
+
+        assertEquals("TileXMax", 1, testSource.getTileXMax(1));
+        assertEquals("TileYMax", 1, testSource.getTileYMax(1));
+        assertEquals("TileXMax", 2, testSource.getTileXMax(2));
+        assertEquals("TileYMax", 2, testSource.getTileYMax(2));
+        assertEquals("TileXMax", 4, testSource.getTileXMax(3));
+        assertEquals("TileYMax", 4, testSource.getTileYMax(3));
+
+    }
+
+    @Test
+    public void testWALLONIE() throws MalformedURLException, IOException {
+        Main.setProjection(Projections.getProjectionByCode("EPSG:31370"));
+        WMTSTileSource testSource = new WMTSTileSource(testImageryWALLONIE);
+        testSource.initProjection();
+
+        assertEquals("http://geoservices.wallonie.be/arcgis/rest/services/DONNEES_BASE/FOND_PLAN_ANNOTATIONS_2012_RW_NB/"
+                + "MapServer/WMTS/tile/1.0.0/DONNEES_BASE_FOND_PLAN_ANNOTATIONS_2012_RW_NB/default/default028mm/5/1219/1063.png",
+                testSource.getTileUrl(6, 1063, 1219));
+
+        // +bounds=2.54,49.51,6.4,51.5
+        Bounds wallonieBounds = new Bounds(
+                new LatLon(49.485372459967245, 2.840548314430268),
+                new LatLon(50.820959517561256, 6.427849693016202)
+                );
+        verifyBounds(wallonieBounds, testSource, 6, 1063, 1219);
+        verifyBounds(wallonieBounds, testSource, 11, 17724, 20324);
+    }
+
+    //TODO: @Test - disable this test, needs further working
+    public void testWALLONIENoMatrixDimension() throws MalformedURLException, IOException {
+        Main.setProjection(Projections.getProjectionByCode("EPSG:31370"));
+        WMTSTileSource testSource = new WMTSTileSource(getImagery("test/data/wmts/WMTSCapabilities-Wallonie-nomatrixdimension.xml"));
+        testSource.initProjection();
+
+        Bounds wallonieBounds = new Bounds(
+                new LatLon(49.485372459967245, 2.840548314430268),
+                new LatLon(50.820959517561256, 6.427849693016202)
+                );
+
+        verifyBounds(wallonieBounds, testSource, 6, 1063, 1219);
+        verifyBounds(wallonieBounds, testSource, 11, 17724, 20324);
+    }
+
+    private void verifyBounds(Bounds bounds, WMTSTileSource testSource, int z, int x, int y) {
+        LatLon ret = new LatLon(testSource.tileXYToLatLon(x, y, z));
+        assertTrue(ret.toDisplayString() + " doesn't lie within: " + bounds.toString(), bounds.contains(ret));
+        int tileXmax = testSource.getTileXMax(z);
+        int tileYmax = testSource.getTileYMax(z);
+        assertTrue("tile x: " + x + " is greater than allowed max: " + tileXmax, tileXmax >= x);
+        assertTrue("tile y: " + y + " is greater than allowed max: " + tileYmax, tileYmax >= y);
+    }
+
+    @Test
+    public void testWIEN() throws MalformedURLException, IOException {
+        Main.setProjection(Projections.getProjectionByCode("EPSG:3857"));
+        WMTSTileSource testSource = new WMTSTileSource(testImageryWIEN);
+        testSource.initProjection();
+        int zoomOffset = 9;
+
+        verifyMercatorTile(testSource, 0, 0, 1, zoomOffset);
+        verifyMercatorTile(testSource, 1105, 709, 2, zoomOffset);
+        verifyMercatorTile(testSource, 1, 1, 1, zoomOffset);
+        verifyMercatorTile(testSource, 2, 2, 1, zoomOffset);
+        verifyMercatorTile(testSource, 0, 0, 2, zoomOffset);
+        verifyMercatorTile(testSource, 1, 1, 2, zoomOffset);
+
+        for (int x = 0; x < 4; x++) {
+            for (int y = 0; y < 4; y++) {
+                verifyMercatorTile(testSource, x, y, 3, zoomOffset);
+            }
+        }
+        for (int x = 0; x < 8; x++) {
+            for (int y = 0; y < 4; y++) {
+                verifyMercatorTile(testSource, x, y, 4, zoomOffset);
+            }
+        }
+
+        verifyMercatorTile(testSource, 2 << 9 - 1, 2 << 8 - 1, 2, zoomOffset);
+
+        verifyMercatorMax(testSource, 1, zoomOffset);
+        verifyMercatorMax(testSource, 2, zoomOffset);
+        verifyMercatorMax(testSource, 3, zoomOffset);
+    }
+
+    private void verifyMercatorMax(WMTSTileSource testSource, int zoom, int zoomOffset) {
+        TemplatedTMSTileSource verifier = new TemplatedTMSTileSource(testImageryTMS);
+        int result = testSource.getTileXMax(zoom);
+        int expected = verifier.getTileXMax(zoom + zoomOffset);
+        assertTrue("TileXMax expected: " + expected + " got: " + result, Math.abs(result - expected) < 5);
+        result = testSource.getTileYMax(zoom);
+        expected = verifier.getTileYMax(zoom + zoomOffset);
+        assertTrue("TileYMax expected: " + expected + " got: " + result, Math.abs(result - expected) < 5);
+    }
+
+    @Test
+    public void testGeoportalTOPOPL() throws IOException {
+        Main.setProjection(Projections.getProjectionByCode("EPSG:4326"));
+        WMTSTileSource testSource = new WMTSTileSource(testImageryTOPO_PL);
+        testSource.initProjection();
+        verifyTile(new LatLon(56, 12), testSource, 0, 0, 1);
+        verifyTile(new LatLon(56, 12), testSource, 0, 0, 2);
+        verifyTile(new LatLon(51.1268639, 16.8731360), testSource, 1, 1, 2);
+
+        assertEquals("TileXMax", 2, testSource.getTileXMax(1));
+        assertEquals("TileYMax", 1, testSource.getTileYMax(1));
+        assertEquals("TileXMax", 3, testSource.getTileXMax(2));
+        assertEquals("TileYMax", 2, testSource.getTileYMax(2));
+        assertEquals("TileXMax", 6, testSource.getTileXMax(3));
+        assertEquals("TileYMax", 4, testSource.getTileYMax(3));
+        assertEquals(
+                "http://mapy.geoportal.gov.pl/wss/service/WMTS/guest/wmts/TOPO?SERVICE=WMTS&REQUEST=GetTile&"
+                + "VERSION=1.0.0&LAYER=MAPA TOPOGRAFICZNA&STYLE=default&FORMAT=image/jpeg&tileMatrixSet=EPSG:4326&"
+                + "tileMatrix=EPSG:4326:0&tileRow=1&tileCol=1",
+                testSource.getTileUrl(1,  1,  1));
+    }
+
+    @Test
+    public void testGeoportalORTOPL4326() throws IOException {
+        Main.setProjection(Projections.getProjectionByCode("EPSG:4326"));
+        WMTSTileSource testSource = new WMTSTileSource(testImageryORTO_PL);
+        testSource.initProjection();
+        verifyTile(new LatLon(53.5993712684958, 19.560669777688176), testSource, 12412, 3941, 14);
+        verifyTile(new LatLon(49.783096954497786, 22.79034127751704), testSource, 17714, 10206, 14);
+    }
+
+    @Test
+    public void testGeoportalORTOPL2180() throws IOException {
+        Main.setProjection(Projections.getProjectionByCode("EPSG:2180"));
+        WMTSTileSource testSource = new WMTSTileSource(testImageryORTO_PL);
+        testSource.initProjection();
+
+        verifyTile(new LatLon(53.59940948387726, 19.560544913270064), testSource, 6453, 3140, 14);
+        verifyTile(new LatLon(49.782984840526055, 22.790064966993445), testSource, 9932, 9305, 14);
+    }
+
+    // disabled as this needs user action
+    // @Test
+    public void testTwoTileSetsForOneProjection() throws Exception {
+        Main.setProjection(Projections.getProjectionByCode("EPSG:3857"));
+        WMTSTileSource testSource = new WMTSTileSource(testImageryOntario);
+        testSource.initProjection();
+        verifyTile(new LatLon(45.4105023, -75.7153702), testSource, 303751, 375502, 12);
+        verifyTile(new LatLon(45.4601306, -75.7617187), testSource, 1186, 1466, 4);
+
+    }
+
+    private void verifyTile(LatLon expected, WMTSTileSource source, int x, int y, int z) {
+        LatLon ll = new LatLon(source.tileXYToLatLon(x, y, z));
+        assertEquals("Latitude", expected.lat(), ll.lat(), 1e-05);
+        assertEquals("Longitude", expected.lon(), ll.lon(), 1e-05);
+
+    }
+
+    private void verifyMercatorTile(WMTSTileSource testSource, int x, int y, int z) {
+        verifyMercatorTile(testSource, x, y, z, -1);
+    }
+
+    private void verifyMercatorTile(WMTSTileSource testSource, int x, int y, int z, int zoomOffset) {
+        TemplatedTMSTileSource verifier = new TemplatedTMSTileSource(testImageryTMS);
+        LatLon result = new LatLon(testSource.tileXYToLatLon(x, y, z));
+        LatLon expected = new LatLon(verifier.tileXYToLatLon(x, y, z + zoomOffset));
+        //System.out.println(z + "/" + x + "/" + y + " - result: " + result.toDisplayString() + " osmMercator: " +  expected.toDisplayString());
+        assertEquals("Longitude" , expected.lon(), result.lon(), 1e-04);
+        assertEquals("Latitude", expected.lat(), result.lat(), 1e-04);
+    }
+}
diff --git a/test/unit/org/openstreetmap/josm/data/osm/APIDataSetTest.java b/test/unit/org/openstreetmap/josm/data/osm/APIDataSetTest.java
index b37a354..4fd3d9d 100644
--- a/test/unit/org/openstreetmap/josm/data/osm/APIDataSetTest.java
+++ b/test/unit/org/openstreetmap/josm/data/osm/APIDataSetTest.java
@@ -2,6 +2,7 @@
 package org.openstreetmap.josm.data.osm;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
 import java.util.List;
@@ -30,7 +31,7 @@ public class APIDataSetTest {
         apiDataSet.init(ds);
         try {
             apiDataSet.adjustRelationUploadOrder();
-        } catch(CyclicUploadDependencyException e) {
+        } catch (CyclicUploadDependencyException e) {
             fail("unexpected exception:" + e);
         }
         List<OsmPrimitive> toAdd = apiDataSet.getPrimitivesToAdd();
@@ -56,7 +57,7 @@ public class APIDataSetTest {
         apiDataSet.init(ds);
         try {
             apiDataSet.adjustRelationUploadOrder();
-        } catch(CyclicUploadDependencyException e) {
+        } catch (CyclicUploadDependencyException e) {
             fail("unexpected exception:" + e);
         }
         List<OsmPrimitive> toAdd = apiDataSet.getPrimitivesToAdd();
@@ -94,7 +95,7 @@ public class APIDataSetTest {
         apiDataSet.init(ds);
         try {
             apiDataSet.adjustRelationUploadOrder();
-        } catch(CyclicUploadDependencyException e) {
+        } catch (CyclicUploadDependencyException e) {
             fail("unexpected exception:" + e);
         }
         List<OsmPrimitive> toAdd = apiDataSet.getPrimitivesToAdd();
@@ -132,14 +133,14 @@ public class APIDataSetTest {
         apiDataSet.init(ds);
         try {
             apiDataSet.adjustRelationUploadOrder();
-        } catch(CyclicUploadDependencyException e) {
+        } catch (CyclicUploadDependencyException e) {
             fail("unexpected exception:" + e);
         }
         List<OsmPrimitive> toAdd = apiDataSet.getPrimitivesToAdd();
 
         assertEquals(3, toAdd.size());
-        assertEquals(true, toAdd.indexOf(r2) < toAdd.indexOf(r1));
-        assertEquals(true, toAdd.indexOf(r3) < toAdd.indexOf(r1));
+        assertTrue(toAdd.indexOf(r2) < toAdd.indexOf(r1));
+        assertTrue(toAdd.indexOf(r3) < toAdd.indexOf(r1));
     }
 
     @Test // for ticket #9624
@@ -179,14 +180,14 @@ public class APIDataSetTest {
         apiDataSet.getPrimitivesToDelete().add(r4);
         try {
             apiDataSet.adjustRelationUploadOrder();
-        } catch(CyclicUploadDependencyException e) {
+        } catch (CyclicUploadDependencyException e) {
             fail("unexpected exception:" + e);
         }
         List<OsmPrimitive> toDelete = apiDataSet.getPrimitivesToDelete();
 
         assertEquals(4, toDelete.size());
-        assertEquals(true, toDelete.indexOf(r2) < toDelete.indexOf(r1));
-        assertEquals(true, toDelete.indexOf(r3) < toDelete.indexOf(r1));
+        assertTrue(toDelete.indexOf(r2) < toDelete.indexOf(r1));
+        assertTrue(toDelete.indexOf(r3) < toDelete.indexOf(r1));
     }
 
     @Test // for ticket #9656
@@ -225,9 +226,9 @@ public class APIDataSetTest {
         List<OsmPrimitive> toDelete = apiDataSet.getPrimitivesToDelete();
 
         assertEquals(4, toDelete.size());
-        assertEquals(true, toDelete.indexOf(way) < toDelete.indexOf(n1));
-        assertEquals(true, toDelete.indexOf(way) < toDelete.indexOf(n2));
-        assertEquals(true, toDelete.indexOf(r1) < toDelete.indexOf(way));
+        assertTrue(toDelete.indexOf(way) < toDelete.indexOf(n1));
+        assertTrue(toDelete.indexOf(way) < toDelete.indexOf(n2));
+        assertTrue(toDelete.indexOf(r1) < toDelete.indexOf(way));
     }
 
     @Test
@@ -254,7 +255,7 @@ public class APIDataSetTest {
         try {
             apiDataSet.adjustRelationUploadOrder();
             fail("expected cyclic upload dependency exception not thrown");
-        } catch(CyclicUploadDependencyException e) {
+        } catch (CyclicUploadDependencyException e) {
             System.out.println(e);
         }
     }
diff --git a/test/unit/org/openstreetmap/josm/data/osm/ChangesetCacheTest.groovy b/test/unit/org/openstreetmap/josm/data/osm/ChangesetCacheTest.groovy
index 156bc88..4c64f64 100644
--- a/test/unit/org/openstreetmap/josm/data/osm/ChangesetCacheTest.groovy
+++ b/test/unit/org/openstreetmap/josm/data/osm/ChangesetCacheTest.groovy
@@ -1,167 +1,164 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.osm;
 
-import java.net.InetAddress.Cache;
-import org.junit.Test 
+import static org.junit.Assert.*
 
-
-import static org.junit.Assert.*;
+import org.junit.Test
 
 class ChangesetCacheTest {
-	
-	@Test
-	public void test_Constructor() {
-	    ChangesetCache cache = ChangesetCache.getInstance()
-		assert cache != null
-	}
-	
-	@Test
-	public void test_addAndRemoveListeners() {
-		ChangesetCache cache = ChangesetCache.getInstance()
-		cache.clear()
-		
-		// should work
-		cache.addChangesetCacheListener null
-		
-		// should work 
-		def listener = new ChangesetCacheListener() {
-			public void changesetCacheUpdated(ChangesetCacheEvent event) {} 
-		}		
-		cache.addChangesetCacheListener listener
-		// adding a second time - should work too
-		cache.addChangesetCacheListener listener
-		assert cache. at listeners.size() == 1 // ... but only added once 
-		
-		cache.removeChangesetCacheListener null
-		
-		cache.removeChangesetCacheListener listener 
-		assert cache. at listeners.size() == 0
-	}
-	
-	@Test
-	public void update_get_remove_cycle() {
-		ChangesetCache cache = ChangesetCache.getInstance()
-		cache.clear()
-		
-		cache.update new Changeset(1)
-		assert cache.size() == 1
-		assert cache.get(1) != null
-		assert cache.get(1).id == 1
-		cache.remove(1)
-		assert cache.size() == 0
-	}
-	
-	@Test
-	public void updateTwice() {
-		ChangesetCache cache = ChangesetCache.getInstance()
-		cache.clear()
-
-		Changeset cs = new Changeset(1)
-		cs.incomplete = false
-		cs.put "key1", "value1"
-		cs.open = true
-		cache.update cs
-		
-		Changeset cs2 = new Changeset(cs)
-		assert cs2 != null
-		cs2.put "key2", "value2"
-		cs2.open = false
-		cache.update(cs2)
-		
-		assert cache.size() == 1
-		assert cache.get(1) != null
-		
-		cs = cache.get(1)
-		assert cs.get("key1") == "value1"
-		assert cs.get("key2") == "value2"
-		assert !cs.open		
-	}
-	
-	
-	@Test
-	public void contains() {
-		ChangesetCache cache = ChangesetCache.getInstance()
-		cache. at listeners.clear()
-		cache.clear()
-		
-		
-		Changeset cs = new Changeset(1)
-		cache.update cs
-		
-		assert cache.contains(1)
-		assert cache.contains(cs)
-		assert cache.contains(new Changeset(cs))
-		
-		assert ! cache.contains(2)
-		assert ! cache.contains(new Changeset(2))
-		assert ! cache.contains(null)
-	}
-	
-	@Test
-	public void fireingEvents_AddAChangeset() {
-		ChangesetCache cache = ChangesetCache.getInstance()
-		cache.clear()
-		cache. at listeners.clear()
-		
-		// should work 
-		def listener = new ChangesetCacheListener() {
-					public void changesetCacheUpdated(ChangesetCacheEvent event) {
-					    assert event != null
-						assert event.getAddedChangesets().size() == 1
-						assert event.getRemovedChangesets().empty
-						assert event.getUpdatedChangesets().empty
-						assert event.getSource() == cache 
-					} 
-		}   
-		cache.addChangesetCacheListener listener
-		cache.update(new Changeset(1))
-		cache.removeChangesetCacheListener listener
-	}
-	
-	@Test
-	public void fireingEvents_UpdateChangeset() {
-		ChangesetCache cache = ChangesetCache.getInstance()
-		cache.clear()
-		cache. at listeners.clear()
-		
-		// should work 
-		def listener = new ChangesetCacheListener() {
-					public void changesetCacheUpdated(ChangesetCacheEvent event) {
-						assert event != null
-						assert event.getAddedChangesets().empty
-						assert event.getRemovedChangesets().empty
-						assert event.getUpdatedChangesets().size() == 1
-						assert event.getSource() == cache 
-					} 
-				}   
-		cache.update(new Changeset(1))
-		
-		cache.addChangesetCacheListener listener
-		cache.update(new Changeset(1))
-		cache.removeChangesetCacheListener listener
-	}
-	
-	@Test
-	public void fireingEvents_RemoveChangeset() {
-		ChangesetCache cache = ChangesetCache.getInstance()
-		cache.clear()
-		cache. at listeners.clear()
-		
-		// should work 
-		def listener = new ChangesetCacheListener() {
-					public void changesetCacheUpdated(ChangesetCacheEvent event) {
-						assert event != null
-						assert event.getAddedChangesets().empty
-						assert event.getRemovedChangesets().size() == 1
-						assert event.getUpdatedChangesets().empty
-						assert event.getSource() == cache 
-					} 
-				}   
-		cache.update(new Changeset(1))
-		
-		cache.addChangesetCacheListener listener
-		cache.remove 1
-		cache.removeChangesetCacheListener listener
-	}
-	
+
+    @Test
+    public void test_Constructor() {
+        ChangesetCache cache = ChangesetCache.getInstance()
+        assert cache != null
+    }
+
+    @Test
+    public void test_addAndRemoveListeners() {
+        ChangesetCache cache = ChangesetCache.getInstance()
+        cache.clear()
+
+        // should work
+        cache.addChangesetCacheListener null
+
+        // should work
+        def listener = new ChangesetCacheListener() {
+            public void changesetCacheUpdated(ChangesetCacheEvent event) {}
+        }
+        cache.addChangesetCacheListener listener
+        // adding a second time - should work too
+        cache.addChangesetCacheListener listener
+        assert cache. at listeners.size() == 1 // ... but only added once
+
+        cache.removeChangesetCacheListener null
+
+        cache.removeChangesetCacheListener listener
+        assert cache. at listeners.size() == 0
+    }
+
+    @Test
+    public void update_get_remove_cycle() {
+        ChangesetCache cache = ChangesetCache.getInstance()
+        cache.clear()
+
+        cache.update new Changeset(1)
+        assert cache.size() == 1
+        assert cache.get(1) != null
+        assert cache.get(1).id == 1
+        cache.remove(1)
+        assert cache.size() == 0
+    }
+
+    @Test
+    public void updateTwice() {
+        ChangesetCache cache = ChangesetCache.getInstance()
+        cache.clear()
+
+        Changeset cs = new Changeset(1)
+        cs.incomplete = false
+        cs.put "key1", "value1"
+        cs.open = true
+        cache.update cs
+
+        Changeset cs2 = new Changeset(cs)
+        assert cs2 != null
+        cs2.put "key2", "value2"
+        cs2.open = false
+        cache.update(cs2)
+
+        assert cache.size() == 1
+        assert cache.get(1) != null
+
+        cs = cache.get(1)
+        assert cs.get("key1") == "value1"
+        assert cs.get("key2") == "value2"
+        assert !cs.open
+    }
+
+
+    @Test
+    public void contains() {
+        ChangesetCache cache = ChangesetCache.getInstance()
+        cache. at listeners.clear()
+        cache.clear()
+
+
+        Changeset cs = new Changeset(1)
+        cache.update cs
+
+        assert cache.contains(1)
+        assert cache.contains(cs)
+        assert cache.contains(new Changeset(cs))
+
+        assert ! cache.contains(2)
+        assert ! cache.contains(new Changeset(2))
+        assert ! cache.contains(null)
+    }
+
+    @Test
+    public void fireingEvents_AddAChangeset() {
+        ChangesetCache cache = ChangesetCache.getInstance()
+        cache.clear()
+        cache. at listeners.clear()
+
+        // should work
+        def listener = new ChangesetCacheListener() {
+                    public void changesetCacheUpdated(ChangesetCacheEvent event) {
+                        assert event != null
+                        assert event.getAddedChangesets().size() == 1
+                        assert event.getRemovedChangesets().empty
+                        assert event.getUpdatedChangesets().empty
+                        assert event.getSource() == cache
+                    }
+        }
+        cache.addChangesetCacheListener listener
+        cache.update(new Changeset(1))
+        cache.removeChangesetCacheListener listener
+    }
+
+    @Test
+    public void fireingEvents_UpdateChangeset() {
+        ChangesetCache cache = ChangesetCache.getInstance()
+        cache.clear()
+        cache. at listeners.clear()
+
+        // should work
+        def listener = new ChangesetCacheListener() {
+                    public void changesetCacheUpdated(ChangesetCacheEvent event) {
+                        assert event != null
+                        assert event.getAddedChangesets().empty
+                        assert event.getRemovedChangesets().empty
+                        assert event.getUpdatedChangesets().size() == 1
+                        assert event.getSource() == cache
+                    }
+                }
+        cache.update(new Changeset(1))
+
+        cache.addChangesetCacheListener listener
+        cache.update(new Changeset(1))
+        cache.removeChangesetCacheListener listener
+    }
+
+    @Test
+    public void fireingEvents_RemoveChangeset() {
+        ChangesetCache cache = ChangesetCache.getInstance()
+        cache.clear()
+        cache. at listeners.clear()
+
+        // should work
+        def listener = new ChangesetCacheListener() {
+                    public void changesetCacheUpdated(ChangesetCacheEvent event) {
+                        assert event != null
+                        assert event.getAddedChangesets().empty
+                        assert event.getRemovedChangesets().size() == 1
+                        assert event.getUpdatedChangesets().empty
+                        assert event.getSource() == cache
+                    }
+                }
+        cache.update(new Changeset(1))
+
+        cache.addChangesetCacheListener listener
+        cache.remove 1
+        cache.removeChangesetCacheListener listener
+    }
 }
diff --git a/test/unit/org/openstreetmap/josm/data/osm/DataSetMergerTest.java b/test/unit/org/openstreetmap/josm/data/osm/DataSetMergerTest.java
index 6680e6b..c64fd8a 100644
--- a/test/unit/org/openstreetmap/josm/data/osm/DataSetMergerTest.java
+++ b/test/unit/org/openstreetmap/josm/data/osm/DataSetMergerTest.java
@@ -4,6 +4,8 @@ package org.openstreetmap.josm.data.osm;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNotSame;
+import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 
 import java.io.StringWriter;
@@ -72,32 +74,32 @@ public class DataSetMergerTest {
      */
     @Test
     public void nodeSimple_IdenticalNoConflict() {
-        Node n = new Node(new LatLon(0,0));
-        n.setOsmId(1,1);
+        Node n = new Node(new LatLon(0, 0));
+        n.setOsmId(1, 1);
         n.setModified(false);
         n.put("key1", "value1");
         my.addPrimitive(n);
 
-        Node n1 = new Node(new LatLon(0,0));
-        n1.setOsmId(1,1);
+        Node n1 = new Node(new LatLon(0, 0));
+        n1.setOsmId(1, 1);
         n1.setModified(false);
         n1.put("key1", "value1");
         their.addPrimitive(n1);
 
 
-        DataSetMerger visitor = new DataSetMerger(my,their);
+        DataSetMerger visitor = new DataSetMerger(my, their);
         visitor.merge();
 
-        Node n2 = (Node)my.getPrimitiveById(1, OsmPrimitiveType.NODE);
+        Node n2 = (Node) my.getPrimitiveById(1, OsmPrimitiveType.NODE);
         assertTrue(visitor.getConflicts().isEmpty());
-        assertTrue(n1 != n2); // make sure we have a clone
+        assertNotSame(n1, n2); // make sure we have a clone
         assertEquals(1, n2.getId());
         assertEquals(1, n2.getVersion());
-        assertEquals(false, n2.isModified());
+        assertFalse(n2.isModified());
         assertEquals("value1", n2.get("key1"));
 
         // merge target not modified after merging
-        assertTrue(!n2.isModified());
+        assertFalse(n2.isModified());
     }
 
     /**
@@ -107,35 +109,35 @@ public class DataSetMergerTest {
      */
     @Test
     public void nodeSimple_locallyUnmodifiedNoConflict() {
-        Node n = new Node(new LatLon(0,0));
-        n.setOsmId(1,1);
+        Node n = new Node(new LatLon(0, 0));
+        n.setOsmId(1, 1);
         n.setModified(false);
         n.put("key1", "value1");
         my.addPrimitive(n);
 
-        Node n1 = new Node(new LatLon(0,0));
-        n1.setOsmId(1,2);
+        Node n1 = new Node(new LatLon(0, 0));
+        n1.setOsmId(1, 2);
         n1.setModified(false);
         n1.put("key1", "value1-new");
         n1.put("key2", "value2");
         their.addPrimitive(n1);
 
 
-        DataSetMerger visitor = new DataSetMerger(my,their);
+        DataSetMerger visitor = new DataSetMerger(my, their);
         visitor.merge();
 
-        Node n2 = (Node)my.getPrimitiveById(1, OsmPrimitiveType.NODE);
+        Node n2 = (Node) my.getPrimitiveById(1, OsmPrimitiveType.NODE);
         assertTrue(visitor.getConflicts().isEmpty());
-        assertTrue(n == n2); // make sure the merged node is still the original node
-        assertTrue(n2.getDataSet() == my);
+        assertSame(n, n2); // make sure the merged node is still the original node
+        assertSame(n2.getDataSet(), my);
         assertEquals(1, n2.getId());
         assertEquals(2, n2.getVersion());
-        assertEquals(false, n2.isModified());
+        assertFalse(n2.isModified());
         assertEquals("value1-new", n2.get("key1"));
         assertEquals("value2", n2.get("key2"));
 
         // the merge target should not be modified
-        assertTrue(!n2.isModified());
+        assertFalse(n2.isModified());
     }
 
     /**
@@ -147,29 +149,29 @@ public class DataSetMergerTest {
      */
     @Test
     public void nodeSimple_TagConflict() {
-        Node n = new Node(new LatLon(0,0));
-        n.setOsmId(1,1);
+        Node n = new Node(new LatLon(0, 0));
+        n.setOsmId(1, 1);
         n.setModified(true);
         n.put("key1", "value1");
         n.put("key2", "value2");
         my.addPrimitive(n);
 
-        Node n1 = new Node(new LatLon(0,0));
-        n1.setOsmId(1,2);
+        Node n1 = new Node(new LatLon(0, 0));
+        n1.setOsmId(1, 2);
         n1.setModified(false);
         n1.put("key1", "value1-new");
 
         their.addPrimitive(n1);
 
 
-        DataSetMerger visitor = new DataSetMerger(my,their);
+        DataSetMerger visitor = new DataSetMerger(my, their);
         visitor.merge();
 
-        Node n2 = (Node)my.getPrimitiveById(1, OsmPrimitiveType.NODE);
-        assertEquals(1,visitor.getConflicts().size());
-        assertTrue(n == n2);
-        assertTrue(n1 != n2);
-        assertTrue(n1.getDataSet() == their);
+        Node n2 = (Node) my.getPrimitiveById(1, OsmPrimitiveType.NODE);
+        assertEquals(1, visitor.getConflicts().size());
+        assertSame(n, n2);
+        assertNotSame(n1, n2);
+        assertSame(n1.getDataSet(), their);
     }
 
     /**
@@ -182,27 +184,27 @@ public class DataSetMergerTest {
     @Test
     public void nodeSimple_DeleteConflict() {
         Node n = new Node(1, 1);
-        n.setCoor(new LatLon(0,0));
+        n.setCoor(new LatLon(0, 0));
         n.setDeleted(true);
         n.put("key1", "value1");
         my.addPrimitive(n);
 
-        Node n1 = new Node(new LatLon(0,0));
-        n1.setOsmId(1,2);
+        Node n1 = new Node(new LatLon(0, 0));
+        n1.setOsmId(1, 2);
         n1.setModified(false);
         n1.put("key1", "value1-new");
         n1.put("key2", "value2");
         their.addPrimitive(n1);
 
 
-        DataSetMerger visitor = new DataSetMerger(my,their);
+        DataSetMerger visitor = new DataSetMerger(my, their);
         visitor.merge();
 
-        Node n2 = (Node)my.getPrimitiveById(1, OsmPrimitiveType.NODE);
-        assertEquals(1,visitor.getConflicts().size());
-        assertTrue(n == n2);
-        assertTrue(n1 != n2);
-        assertTrue(n1.getDataSet() == their);
+        Node n2 = (Node) my.getPrimitiveById(1, OsmPrimitiveType.NODE);
+        assertEquals(1, visitor.getConflicts().size());
+        assertSame(n, n2);
+        assertNotSame(n1, n2);
+        assertSame(n1.getDataSet(), their);
     }
 
     /**
@@ -212,25 +214,25 @@ public class DataSetMergerTest {
      */
     @Test
     public void nodeSimple_DeleteConflict_2() {
-        Node n = new Node(new LatLon(0,0));
-        n.setOsmId(1,1);
+        Node n = new Node(new LatLon(0, 0));
+        n.setOsmId(1, 1);
         n.setDeleted(true);
         my.addPrimitive(n);
 
-        Node n1 = new Node(new LatLon(0,0));
-        n1.setOsmId(1,1);
+        Node n1 = new Node(new LatLon(0, 0));
+        n1.setOsmId(1, 1);
         their.addPrimitive(n1);
 
 
-        DataSetMerger visitor = new DataSetMerger(my,their);
+        DataSetMerger visitor = new DataSetMerger(my, their);
         visitor.merge();
 
-        Node n2 = (Node)my.getPrimitiveById(1, OsmPrimitiveType.NODE);
-        assertEquals(0,visitor.getConflicts().size());
-        assertEquals(true, n2.isVisible());
-        assertTrue(n == n2);
-        assertTrue(n.getDataSet() == my);
-        assertTrue(n1.getDataSet() == their);
+        Node n2 = (Node) my.getPrimitiveById(1, OsmPrimitiveType.NODE);
+        assertEquals(0, visitor.getConflicts().size());
+        assertTrue(n2.isVisible());
+        assertSame(n, n2);
+        assertSame(n.getDataSet(), my);
+        assertSame(n1.getDataSet(), their);
     }
 
     /**
@@ -240,20 +242,20 @@ public class DataSetMergerTest {
      */
     @Test
     public void nodeSimple_DeleteConflict_3() {
-        Node n = new Node(new LatLon(1,1));
+        Node n = new Node(new LatLon(1, 1));
         n.setDeleted(true);
         my.addPrimitive(n);
 
-        Node n1 = new Node(new LatLon(1,1));
+        Node n1 = new Node(new LatLon(1, 1));
         their.addPrimitive(n1);
 
 
-        DataSetMerger visitor = new DataSetMerger(my,their);
+        DataSetMerger visitor = new DataSetMerger(my, their);
         visitor.merge();
 
         assertEquals(0, visitor.getConflicts().size());
-        assertTrue(n.getDataSet() == my);
-        assertTrue(n1.getDataSet() == their);
+        assertSame(n.getDataSet(), my);
+        assertSame(n1.getDataSet(), their);
     }
 
     /**
@@ -264,21 +266,21 @@ public class DataSetMergerTest {
      */
     @Test
     public void nodeSimple_DeleteConflict_4() {
-        Node n = new Node(new LatLon(1,1));
+        Node n = new Node(new LatLon(1, 1));
         n.setDeleted(true);
         my.addPrimitive(n);
 
-        Node n1 = new Node(new LatLon(1,1));
+        Node n1 = new Node(new LatLon(1, 1));
         n1.setDeleted(true);
         their.addPrimitive(n1);
 
 
-        DataSetMerger visitor = new DataSetMerger(my,their);
+        DataSetMerger visitor = new DataSetMerger(my, their);
         visitor.merge();
 
-        assertEquals(0,visitor.getConflicts().size());
-        Node n2 = (Node)my.getNodes().toArray()[0];
-        assertTrue(n2 == n);
+        assertEquals(0, visitor.getConflicts().size());
+        Node n2 = (Node) my.getNodes().toArray()[0];
+        assertSame(n2, n);
         assertTrue(n2.isDeleted());
     }
 
@@ -298,7 +300,7 @@ public class DataSetMergerTest {
         User theirUser = User.createOsmUser(222, "their");
 
         Node n = new Node();
-        n.setCoor(new LatLon(0,0));
+        n.setCoor(new LatLon(0, 0));
         n.put("key1", "value1");
         n.setUser(myUser);
         n.setTimestamp(cal.getTime());
@@ -306,7 +308,7 @@ public class DataSetMergerTest {
         my.addPrimitive(n);
 
         Node n1 = new Node();
-        n1.setCoor(new LatLon(0,0));
+        n1.setCoor(new LatLon(0, 0));
         n1.put("key1", "value1");
         cal.add(Calendar.HOUR, 1);
         Date timestamp = cal.getTime();
@@ -314,18 +316,17 @@ public class DataSetMergerTest {
         n1.setUser(theirUser);
         their.addPrimitive(n1);
 
-
-        DataSetMerger visitor = new DataSetMerger(my,their);
+        DataSetMerger visitor = new DataSetMerger(my, their);
         visitor.merge();
 
         Node n2 = my.getNodes().iterator().next();
-        assertEquals(0,visitor.getConflicts().size());
-        assertEquals("value1",n2.get("key1"));
-        assertEquals(true, n1.getTimestamp().equals(n2.getTimestamp()));
-        assertEquals(theirUser,n2.getUser());
-        assertTrue(n2 == n);
-        assertTrue(n2 != n1);
-        assertTrue(n2.getDataSet() == my);
+        assertEquals(0, visitor.getConflicts().size());
+        assertEquals("value1", n2.get("key1"));
+        assertEquals(n1.getRawTimestamp(), n2.getRawTimestamp());
+        assertEquals(theirUser, n2.getUser());
+        assertSame(n2, n);
+        assertNotSame(n2, n1);
+        assertSame(n2.getDataSet(), my);
     }
 
     /**
@@ -341,23 +342,22 @@ public class DataSetMergerTest {
         my.addPrimitive(n);
 
         Node n1 = new Node();
-        n1.setCoor(new LatLon(0,0));
-        n1.setOsmId(1,1);
+        n1.setCoor(new LatLon(0, 0));
+        n1.setOsmId(1, 1);
         n1.put("key1", "value1");
         Date timestamp = new Date();
         n1.setTimestamp(timestamp);
         their.addPrimitive(n1);
 
-
-        DataSetMerger visitor = new DataSetMerger(my,their);
+        DataSetMerger visitor = new DataSetMerger(my, their);
         visitor.merge();
 
         Node n2 = my.getNodes().iterator().next();
-        assertEquals(0,visitor.getConflicts().size());
-        assertEquals("value1",n2.get("key1"));
-        assertEquals(true, n1.getTimestamp().equals(n2.getTimestamp()));
-        assertEquals(false, n2.isIncomplete());
-        assertTrue(n2 == n);
+        assertEquals(0, visitor.getConflicts().size());
+        assertEquals("value1", n2.get("key1"));
+        assertEquals(n1.getRawTimestamp(), n2.getRawTimestamp());
+        assertFalse(n2.isIncomplete());
+        assertSame(n2, n);
     }
 
     /**
@@ -373,18 +373,18 @@ public class DataSetMergerTest {
         // -- the target dataset
 
         Node n1 = new Node();
-        n1.setCoor(new LatLon(0,0));
-        n1.setOsmId(1,1);
+        n1.setCoor(new LatLon(0, 0));
+        n1.setOsmId(1, 1);
         my.addPrimitive(n1);
 
         Node n2 = new Node();
-        n2.setCoor(new LatLon(0,0));
-        n2.setOsmId(2,1);
+        n2.setCoor(new LatLon(0, 0));
+        n2.setOsmId(2, 1);
 
         my.addPrimitive(n2);
 
         Way myWay = new Way();
-        myWay.setOsmId(3,1);
+        myWay.setOsmId(3, 1);
         myWay.put("key1", "value1");
         myWay.addNode(n1);
         myWay.addNode(n2);
@@ -392,16 +392,16 @@ public class DataSetMergerTest {
 
         // -- the source data set
 
-        Node n3 = new Node(new LatLon(0,0));
-        n3.setOsmId(1,1);
+        Node n3 = new Node(new LatLon(0, 0));
+        n3.setOsmId(1, 1);
         their.addPrimitive(n3);
 
-        Node n4 = new Node(new LatLon(1,1));
-        n4.setOsmId(2,1);
+        Node n4 = new Node(new LatLon(1, 1));
+        n4.setOsmId(2, 1);
         their.addPrimitive(n4);
 
         Way theirWay = new Way();
-        theirWay.setOsmId(3,2);
+        theirWay.setOsmId(3, 2);
         theirWay.put("key1", "value1");
         theirWay.put("key2", "value2");
         theirWay.addNode(n3);
@@ -409,28 +409,28 @@ public class DataSetMergerTest {
         their.addPrimitive(theirWay);
 
 
-        DataSetMerger visitor = new DataSetMerger(my,their);
+        DataSetMerger visitor = new DataSetMerger(my, their);
         visitor.merge();
 
         // -- tests
-        Way merged = (Way)my.getPrimitiveById(3, OsmPrimitiveType.WAY);
-        assertEquals(0,visitor.getConflicts().size());
-        assertEquals("value1",merged.get("key1"));
-        assertEquals("value2",merged.get("key2"));
-        assertEquals(3,merged.getId());
-        assertEquals(2,merged.getVersion());
-        assertEquals(2,merged.getNodesCount());
-        assertEquals(1,merged.getNode(0).getId());
-        assertEquals(2,merged.getNode(1).getId());
-        assertTrue(merged == myWay);
-        assertTrue(merged.getDataSet() == my);
-
-        Node mergedNode = (Node)my.getPrimitiveById(1, OsmPrimitiveType.NODE);
-        assertTrue(mergedNode == n1);
-        mergedNode = (Node)my.getPrimitiveById(2, OsmPrimitiveType.NODE);
-        assertTrue(mergedNode == n2);
-
-        assertTrue(!merged.isModified());
+        Way merged = (Way) my.getPrimitiveById(3, OsmPrimitiveType.WAY);
+        assertEquals(0, visitor.getConflicts().size());
+        assertEquals("value1", merged.get("key1"));
+        assertEquals("value2", merged.get("key2"));
+        assertEquals(3, merged.getId());
+        assertEquals(2, merged.getVersion());
+        assertEquals(2, merged.getNodesCount());
+        assertEquals(1, merged.getNode(0).getId());
+        assertEquals(2, merged.getNode(1).getId());
+        assertSame(merged, myWay);
+        assertSame(merged.getDataSet(), my);
+
+        Node mergedNode = (Node) my.getPrimitiveById(1, OsmPrimitiveType.NODE);
+        assertSame(mergedNode, n1);
+        mergedNode = (Node) my.getPrimitiveById(2, OsmPrimitiveType.NODE);
+        assertSame(mergedNode, n2);
+
+        assertFalse(merged.isModified());
     }
 
     /**
@@ -445,64 +445,63 @@ public class DataSetMergerTest {
 
         // -- my data set
 
-        Node n1 = new Node(new LatLon(0,0));
-        n1.setOsmId(1,1);
+        Node n1 = new Node(new LatLon(0, 0));
+        n1.setOsmId(1, 1);
         my.addPrimitive(n1);
 
-        Node n2 = new Node(new LatLon(1,1));
-        n2.setOsmId(2,1);
+        Node n2 = new Node(new LatLon(1, 1));
+        n2.setOsmId(2, 1);
         my.addPrimitive(n2);
 
         Way myWay = new Way();
-        myWay.setOsmId(3,1);
+        myWay.setOsmId(3, 1);
         myWay.addNode(n1);
         myWay.addNode(n2);
         my.addPrimitive(myWay);
 
         // --- their data set
 
-        Node n3 = new Node(new LatLon(0,0));
-        n3.setOsmId(1,1);
+        Node n3 = new Node(new LatLon(0, 0));
+        n3.setOsmId(1, 1);
         their.addPrimitive(n3);
 
-        Node n5 = new Node(new LatLon(1,1));
-        n5.setOsmId(4,1);
+        Node n5 = new Node(new LatLon(1, 1));
+        n5.setOsmId(4, 1);
 
         their.addPrimitive(n5);
 
-        Node n4 = new Node(new LatLon(2,2));
-        n4.setOsmId(2,2);
+        Node n4 = new Node(new LatLon(2, 2));
+        n4.setOsmId(2, 2);
         n4.put("key1", "value1");
         their.addPrimitive(n4);
 
 
         Way theirWay = new Way();
-        theirWay.setOsmId(3,2);
+        theirWay.setOsmId(3, 2);
         theirWay.addNode(n3);
         theirWay.addNode(n5); // insert a node
         theirWay.addNode(n4); // this one is updated
         their.addPrimitive(theirWay);
 
-        DataSetMerger visitor = new DataSetMerger(my,their);
+        DataSetMerger visitor = new DataSetMerger(my, their);
         visitor.merge();
 
         // -- tests
-        Way merged = (Way)my.getPrimitiveById(3, OsmPrimitiveType.WAY);
-        assertEquals(0,visitor.getConflicts().size());
-        assertEquals(3,merged.getId());
-        assertEquals(2,merged.getVersion());
-        assertEquals(3,merged.getNodesCount());
-        assertEquals(1,merged.getNode(0).getId());
-        assertEquals(4,merged.getNode(1).getId());
-        assertEquals(2,merged.getNode(2).getId());
-        assertEquals("value1",merged.getNode(2).get("key1"));
-
-        assertTrue(merged.getNode(0) == n1);
-        assertTrue(merged.getNode(1) != n5); // must be clone of the original node in their
-        assertTrue(merged.getNode(2) == n2);
-
-        assertTrue(!merged.isModified());  // the target wasn't modified before merging, it
-        // mustn't be after merging
+        Way merged = (Way) my.getPrimitiveById(3, OsmPrimitiveType.WAY);
+        assertEquals(0, visitor.getConflicts().size());
+        assertEquals(3, merged.getId());
+        assertEquals(2, merged.getVersion());
+        assertEquals(3, merged.getNodesCount());
+        assertEquals(1, merged.getNode(0).getId());
+        assertEquals(4, merged.getNode(1).getId());
+        assertEquals(2, merged.getNode(2).getId());
+        assertEquals("value1", merged.getNode(2).get("key1"));
+
+        assertSame(merged.getNode(0), n1);
+        assertNotSame(merged.getNode(1), n5); // must be clone of the original node in their
+        assertSame(merged.getNode(2), n2);
+
+        assertFalse(merged.isModified());  // the target wasn't modified before merging, it mustn't be after merging
     }
 
     /**
@@ -516,16 +515,16 @@ public class DataSetMergerTest {
 
         // -- the target dataset
 
-        Node n1 = new Node(new LatLon(0,0));
-        n1.setOsmId(1,1);
+        Node n1 = new Node(new LatLon(0, 0));
+        n1.setOsmId(1, 1);
         my.addPrimitive(n1);
 
-        Node n2 = new Node(new LatLon(1,1));
-        n2.setOsmId(2,1);
+        Node n2 = new Node(new LatLon(1, 1));
+        n2.setOsmId(2, 1);
         my.addPrimitive(n2);
 
         Way myWay = new Way();
-        myWay.setOsmId(3,1);
+        myWay.setOsmId(3, 1);
 
         myWay.addNode(n1);
         myWay.addNode(n2);
@@ -535,22 +534,21 @@ public class DataSetMergerTest {
 
         // -- the source dataset
 
-        Node n3 = new Node(new LatLon(0,0));
-        n3.setOsmId(1,1);
+        Node n3 = new Node(new LatLon(0, 0));
+        n3.setOsmId(1, 1);
         their.addPrimitive(n3);
 
-        Node n5 = new Node(new LatLon(1,1));
-        n5.setOsmId(4,1);
+        Node n5 = new Node(new LatLon(1, 1));
+        n5.setOsmId(4, 1);
         their.addPrimitive(n5);
 
-        Node n4 = new Node(new LatLon(2,2));
-        n4.setOsmId(2,1);
+        Node n4 = new Node(new LatLon(2, 2));
+        n4.setOsmId(2, 1);
         n4.put("key1", "value1");
         their.addPrimitive(n4);
 
-
         Way theirWay = new Way();
-        theirWay.setOsmId(3,2);
+        theirWay.setOsmId(3, 2);
 
         theirWay.addNode(n3);
         theirWay.addNode(n5); // insert a node
@@ -561,17 +559,16 @@ public class DataSetMergerTest {
         DataSetMerger visitor = new DataSetMerger(my, their);
         visitor.merge();
 
-        Way merged = (Way)my.getPrimitiveById(3, OsmPrimitiveType.WAY);
-        assertEquals(1,visitor.getConflicts().size());
-        assertEquals(3,merged.getId());
-        assertEquals(1,merged.getVersion());
-        assertEquals(2,merged.getNodesCount());
-        assertEquals(1,merged.getNode(0).getId());
-        assertEquals(2,merged.getNode(1).getId());
-        assertEquals("value1",merged.get("key1"));
+        Way merged = (Way) my.getPrimitiveById(3, OsmPrimitiveType.WAY);
+        assertEquals(1, visitor.getConflicts().size());
+        assertEquals(3, merged.getId());
+        assertEquals(1, merged.getVersion());
+        assertEquals(2, merged.getNodesCount());
+        assertEquals(1, merged.getNode(0).getId());
+        assertEquals(2, merged.getNode(1).getId());
+        assertEquals("value1", merged.get("key1"));
     }
 
-
     /**
      * their way is not visible anymore.
      *
@@ -581,25 +578,23 @@ public class DataSetMergerTest {
     @Test
     public void waySimple_TheirVersionNotVisibleMyIsModified() {
 
-
-        Node mn1 = new Node(new LatLon(0,0));
-        mn1.setOsmId(1,1);
+        Node mn1 = new Node(new LatLon(0, 0));
+        mn1.setOsmId(1, 1);
         my.addPrimitive(mn1);
 
-        Node mn2 = new Node(new LatLon(1,1));
-        mn2.setOsmId(2,1);
+        Node mn2 = new Node(new LatLon(1, 1));
+        mn2.setOsmId(2, 1);
         my.addPrimitive(mn2);
 
         Way myWay = new Way();
-        myWay.setOsmId(3,1);
+        myWay.setOsmId(3, 1);
         myWay.addNode(mn1);
         myWay.addNode(mn2);
         myWay.setModified(true);
         my.addPrimitive(myWay);
 
-
         Way theirWay = new Way();
-        theirWay.setOsmId(3,2);
+        theirWay.setOsmId(3, 2);
         theirWay.setVisible(false);
         /* Invisible objects fetched from the server should be marked as "deleted".
          * Otherwise it's an error.
@@ -607,14 +602,14 @@ public class DataSetMergerTest {
         theirWay.setDeleted(true);
         their.addPrimitive(theirWay);
 
-        DataSetMerger visitor = new DataSetMerger(my,their);
+        DataSetMerger visitor = new DataSetMerger(my, their);
         visitor.merge();
 
-        Way merged = (Way)my.getPrimitiveById(3, OsmPrimitiveType.WAY);
-        assertEquals(1,visitor.getConflicts().size());
-        assertEquals(true, visitor.getConflicts().hasConflictForMy(myWay));
-        assertEquals(true, visitor.getConflicts().hasConflictForTheir(theirWay));
-        assertEquals(myWay,merged);
+        Way merged = (Way) my.getPrimitiveById(3, OsmPrimitiveType.WAY);
+        assertEquals(1, visitor.getConflicts().size());
+        assertTrue(visitor.getConflicts().hasConflictForMy(myWay));
+        assertTrue(visitor.getConflicts().hasConflictForTheir(theirWay));
+        assertEquals(myWay, merged);
     }
 
     /**
@@ -628,12 +623,12 @@ public class DataSetMergerTest {
 
         // -- my data set
 
-        Node n1 = new Node(new LatLon(0,0));
-        n1.setOsmId(1,1);
+        Node n1 = new Node(new LatLon(0, 0));
+        n1.setOsmId(1, 1);
         my.addPrimitive(n1);
 
-        Node n2 = new Node(new LatLon(1,1));
-        n2.setOsmId(2,1);
+        Node n2 = new Node(new LatLon(1, 1));
+        n2.setOsmId(2, 1);
         my.addPrimitive(n2);
 
         Way myWay = new Way();
@@ -643,12 +638,12 @@ public class DataSetMergerTest {
 
         // -- their data set
 
-        Node n3 = new Node(new LatLon(0,0));
-        n3.setOsmId(1,1);
+        Node n3 = new Node(new LatLon(0, 0));
+        n3.setOsmId(1, 1);
         their.addPrimitive(n3);
 
-        Node n4 = new Node(new LatLon(1,1));
-        n4.setOsmId(2,1);
+        Node n4 = new Node(new LatLon(1, 1));
+        n4.setOsmId(2, 1);
         their.addPrimitive(n4);
 
         Way theirWay = new Way();
@@ -659,20 +654,20 @@ public class DataSetMergerTest {
         theirWay.setTimestamp(new Date());
         their.addPrimitive(theirWay);
 
-        DataSetMerger visitor = new DataSetMerger(my,their);
+        DataSetMerger visitor = new DataSetMerger(my, their);
         visitor.merge();
 
         // -- tests
-        Way merged = (Way)my.getWays().toArray()[0];
-        assertEquals(0,visitor.getConflicts().size());
+        Way merged = (Way) my.getWays().toArray()[0];
+        assertEquals(0, visitor.getConflicts().size());
         assertEquals("their", merged.getUser().getName());
         assertEquals(1111, merged.getUser().getId());
-        assertEquals(theirWay.getTimestamp(), merged.getTimestamp());
-        assertTrue(merged == myWay);
-        assertTrue(merged.getNode(0) == n1);
-        assertTrue(merged.getNode(1) == n2);
+        assertEquals(theirWay.getRawTimestamp(), merged.getRawTimestamp());
+        assertSame(merged, myWay);
+        assertSame(merged.getNode(0), n1);
+        assertSame(merged.getNode(1), n2);
 
-        assertTrue(!merged.isModified());
+        assertFalse(merged.isModified());
     }
 
     /**
@@ -686,10 +681,10 @@ public class DataSetMergerTest {
 
         // -- my data set
 
-        Node n1 = new Node(new LatLon(0,0));
+        Node n1 = new Node(new LatLon(0, 0));
         my.addPrimitive(n1);
 
-        Node n2 = new Node(new LatLon(1,1));
+        Node n2 = new Node(new LatLon(1, 1));
         my.addPrimitive(n2);
 
         Way myWay = new Way();
@@ -699,10 +694,10 @@ public class DataSetMergerTest {
 
         // -- their data set
 
-        Node n3 = new Node(new LatLon(0,0));
+        Node n3 = new Node(new LatLon(0, 0));
         their.addPrimitive(n3);
 
-        Node n4 = new Node(new LatLon(1,1));
+        Node n4 = new Node(new LatLon(1, 1));
         their.addPrimitive(n4);
 
         Way theirWay = new Way();
@@ -713,23 +708,22 @@ public class DataSetMergerTest {
         theirWay.setTimestamp(new Date());
         their.addPrimitive(theirWay);
 
-        DataSetMerger visitor = new DataSetMerger(my,their);
+        DataSetMerger visitor = new DataSetMerger(my, their);
         visitor.merge();
 
         // -- tests
-        Way merged = (Way)my.getWays().toArray()[0];
-        assertEquals(0,visitor.getConflicts().size());
+        Way merged = (Way) my.getWays().toArray()[0];
+        assertEquals(0, visitor.getConflicts().size());
         assertEquals("their", merged.getUser().getName());
         assertEquals(1111, merged.getUser().getId());
-        assertEquals(theirWay.getTimestamp(), merged.getTimestamp());
-        assertTrue(merged == myWay);
-        assertTrue(merged.getNode(0) == n1);
-        assertTrue(merged.getNode(1) == n2);
+        assertEquals(theirWay.getRawTimestamp(), merged.getRawTimestamp());
+        assertSame(merged, myWay);
+        assertSame(merged.getNode(0), n1);
+        assertSame(merged.getNode(1), n2);
 
-        assertTrue(!merged.isModified());
+        assertFalse(merged.isModified());
     }
 
-
     /**
      * My dataset includes a deleted node.
      * Their dataset includes a way with three nodes, the first one being my node.
@@ -743,27 +737,26 @@ public class DataSetMergerTest {
 
         // -- my dataset
 
-        Node mn1 = new Node(new LatLon(0,0));
-        mn1.setOsmId(1,1);
+        Node mn1 = new Node(new LatLon(0, 0));
+        mn1.setOsmId(1, 1);
         mn1.setDeleted(true);
         my.addPrimitive(mn1);
 
-
-        Node tn1 = new Node(new LatLon(0,0));
-        tn1.setOsmId(1,1);
+        Node tn1 = new Node(new LatLon(0, 0));
+        tn1.setOsmId(1, 1);
         their.addPrimitive(tn1);
 
-        Node tn2 = new Node(new LatLon(1,1));
-        tn2.setOsmId(2,1);
+        Node tn2 = new Node(new LatLon(1, 1));
+        tn2.setOsmId(2, 1);
         their.addPrimitive(tn2);
 
-        Node tn3 = new Node(new LatLon(2,2));
-        tn3.setOsmId(3,1);
+        Node tn3 = new Node(new LatLon(2, 2));
+        tn3.setOsmId(3, 1);
         their.addPrimitive(tn3);
 
         // -- their data set
         Way theirWay = new Way();
-        theirWay.setOsmId(4,1);
+        theirWay.setOsmId(4, 1);
         theirWay.addNode(tn1);
         theirWay.addNode(tn2);
         theirWay.addNode(tn3);
@@ -771,16 +764,16 @@ public class DataSetMergerTest {
         theirWay.setTimestamp(new Date());
         their.addPrimitive(theirWay);
 
-        DataSetMerger visitor = new DataSetMerger(my,their);
+        DataSetMerger visitor = new DataSetMerger(my, their);
         visitor.merge();
 
         assertEquals(1, visitor.getConflicts().size());
         assertTrue(visitor.getConflicts().get(0).isMyDeleted());
 
-        Way myWay = (Way)my.getPrimitiveById(4, OsmPrimitiveType.WAY);
+        Way myWay = (Way) my.getPrimitiveById(4, OsmPrimitiveType.WAY);
         assertEquals(3, myWay.getNodesCount());
 
-        Node n = (Node)my.getPrimitiveById(1,OsmPrimitiveType.NODE);
+        Node n = (Node) my.getPrimitiveById(1, OsmPrimitiveType.NODE);
         assertTrue(myWay.getNodes().contains(n));
 
         assertFalse(myWay.isModified());
@@ -797,45 +790,44 @@ public class DataSetMergerTest {
     @Test
     public void relationComplex_mergingADeletedNode() {
 
-
-        Node mn1 = new Node(new LatLon(0,0));
-        mn1.setOsmId(1,1);
+        Node mn1 = new Node(new LatLon(0, 0));
+        mn1.setOsmId(1, 1);
         mn1.setDeleted(true);
         my.addPrimitive(mn1);
 
 
-        Node tn1 = new Node(new LatLon(0,0));
-        tn1.setOsmId(1,1);
+        Node tn1 = new Node(new LatLon(0, 0));
+        tn1.setOsmId(1, 1);
         their.addPrimitive(tn1);
 
-        Node tn2 = new Node(new LatLon(1,1));
-        tn2.setOsmId(2,1);
+        Node tn2 = new Node(new LatLon(1, 1));
+        tn2.setOsmId(2, 1);
         their.addPrimitive(tn2);
 
-        Node tn3 = new Node(new LatLon(2,2));
-        tn3.setOsmId(3,1);
+        Node tn3 = new Node(new LatLon(2, 2));
+        tn3.setOsmId(3, 1);
         their.addPrimitive(tn3);
 
 
         Relation theirRelation = new Relation();
-        theirRelation.setOsmId(4,1);
+        theirRelation.setOsmId(4, 1);
 
         theirRelation.addMember(new RelationMember("", tn1));
         theirRelation.addMember(new RelationMember("", tn2));
         theirRelation.addMember(new RelationMember("", tn3));
         their.addPrimitive(theirRelation);
 
-        DataSetMerger visitor = new DataSetMerger(my,their);
+        DataSetMerger visitor = new DataSetMerger(my, their);
         visitor.merge();
 
-        Node n = (Node)my.getPrimitiveById(1,OsmPrimitiveType.NODE);
-        assertTrue(n != null);
+        Node n = (Node) my.getPrimitiveById(1, OsmPrimitiveType.NODE);
+        assertNotNull(n);
 
         assertEquals(1, visitor.getConflicts().size());
         assertTrue(visitor.getConflicts().hasConflictForMy(n));
         assertTrue(visitor.getConflicts().get(0).isMyDeleted());
 
-        Relation r = (Relation)my.getPrimitiveById(4,OsmPrimitiveType.RELATION);
+        Relation r = (Relation) my.getPrimitiveById(4, OsmPrimitiveType.RELATION);
         assertEquals(3, r.getMembersCount());
 
         assertFalse(r.isModified());
@@ -856,27 +848,26 @@ public class DataSetMergerTest {
         their.addPrimitive(n2);
 
         Way w3 = new Way(3);
-        w3.setNodes(Arrays.asList(n1,n2));
+        w3.setNodes(Arrays.asList(n1, n2));
         their.addPrimitive(w3);
         assertTrue(w3.isIncomplete());
 
-
         DataSetMerger visitor = new DataSetMerger(my, their);
         visitor.merge();
 
-        assertEquals(0,visitor.getConflicts().size());
+        assertEquals(0, visitor.getConflicts().size());
 
-        OsmPrimitive p= my.getPrimitiveById(1, OsmPrimitiveType.NODE);
+        OsmPrimitive p = my.getPrimitiveById(1, OsmPrimitiveType.NODE);
         assertNotNull(p);
         assertTrue(p.isIncomplete());
-        p= my.getPrimitiveById(2, OsmPrimitiveType.NODE);
+        p = my.getPrimitiveById(2, OsmPrimitiveType.NODE);
         assertNotNull(p);
         assertTrue(p.isIncomplete());
-        p= my.getPrimitiveById(3, OsmPrimitiveType.WAY);
+        p = my.getPrimitiveById(3, OsmPrimitiveType.WAY);
         assertNotNull(p);
         assertTrue(p.isIncomplete());
 
-        Way w = (Way)my.getPrimitiveById(3, OsmPrimitiveType.WAY);
+        Way w = (Way) my.getPrimitiveById(3, OsmPrimitiveType.WAY);
         assertNotNull(w);
         assertTrue(p.isIncomplete());
         assertEquals(2, w.getNodesCount());
@@ -902,43 +893,42 @@ public class DataSetMergerTest {
 
         // an incomplete way with two incomplete nodes
         Way w3 = new Way(3);
-        w3.setNodes(Arrays.asList(n1,n2));
+        w3.setNodes(Arrays.asList(n1, n2));
         their.addPrimitive(w3);
 
-
-        Node n4 = new Node(new LatLon(0,0));
-        n4.setOsmId(1,1);
+        Node n4 = new Node(new LatLon(0, 0));
+        n4.setOsmId(1, 1);
         my.addPrimitive(n4);
 
-        Node n5 = new Node(new LatLon(1,1));
-        n5.setOsmId(2,1);
+        Node n5 = new Node(new LatLon(1, 1));
+        n5.setOsmId(2, 1);
         my.addPrimitive(n5);
 
         Way w6 = new Way(3, 1);
-        w6.setNodes(Arrays.asList(n4,n5));
+        w6.setNodes(Arrays.asList(n4, n5));
         my.addPrimitive(w6);
 
-        DataSetMerger visitor = new DataSetMerger(my,their);
+        DataSetMerger visitor = new DataSetMerger(my, their);
         visitor.merge();
 
-        assertEquals(0,visitor.getConflicts().size());
+        assertEquals(0, visitor.getConflicts().size());
 
-        OsmPrimitive p= my.getPrimitiveById(1, OsmPrimitiveType.NODE);
+        OsmPrimitive p = my.getPrimitiveById(1, OsmPrimitiveType.NODE);
         assertNotNull(p);
-        assertTrue(!p.isIncomplete());
-        p= my.getPrimitiveById(2, OsmPrimitiveType.NODE);
+        assertFalse(p.isIncomplete());
+        p = my.getPrimitiveById(2, OsmPrimitiveType.NODE);
         assertNotNull(p);
-        assertTrue(!p.isIncomplete());
-        p= my.getPrimitiveById(3,OsmPrimitiveType.WAY);
+        assertFalse(p.isIncomplete());
+        p = my.getPrimitiveById(3, OsmPrimitiveType.WAY);
         assertNotNull(p);
-        assertTrue(!p.isIncomplete());
+        assertFalse(p.isIncomplete());
 
-        Way w = (Way)my.getPrimitiveById(3,OsmPrimitiveType.WAY);
+        Way w = (Way) my.getPrimitiveById(3, OsmPrimitiveType.WAY);
         assertNotNull(w);
-        assertTrue(!p.isIncomplete());
+        assertFalse(p.isIncomplete());
         assertEquals(2, w.getNodesCount());
-        assertTrue(!w.getNode(0).isIncomplete());
-        assertTrue(!w.getNode(1).isIncomplete());
+        assertFalse(w.getNode(0).isIncomplete());
+        assertFalse(w.getNode(1).isIncomplete());
     }
 
     /**
@@ -952,12 +942,12 @@ public class DataSetMergerTest {
 
         // an complete node
         Node n1 = new Node(1, 1);
-        n1.setCoor(new LatLon(1,1));
+        n1.setCoor(new LatLon(1, 1));
         their.addPrimitive(n1);
 
         // another complete node
         Node n2 = new Node(2, 1);
-        n2.setCoor(new LatLon(2,2));
+        n2.setCoor(new LatLon(2, 2));
         their.addPrimitive(n2);
 
         // --- target dataset
@@ -978,17 +968,17 @@ public class DataSetMergerTest {
         visitor.merge();
 
         // -- test it
-        assertEquals(0,visitor.getConflicts().size());
+        assertEquals(0, visitor.getConflicts().size());
 
-        Node n = (Node)my.getPrimitiveById(1, OsmPrimitiveType.NODE);
+        Node n = (Node) my.getPrimitiveById(1, OsmPrimitiveType.NODE);
         assertNotNull(n);
         assertFalse(n.isIncomplete());
 
-        n = (Node)my.getPrimitiveById(2, OsmPrimitiveType.NODE);
+        n = (Node) my.getPrimitiveById(2, OsmPrimitiveType.NODE);
         assertNotNull(n);
         assertFalse(n.isIncomplete());
 
-        Way w = (Way)my.getPrimitiveById(3, OsmPrimitiveType.WAY);
+        Way w = (Way) my.getPrimitiveById(3, OsmPrimitiveType.WAY);
         assertNotNull(w);
         assertFalse(w.hasIncompleteNodes());
         assertTrue(w.isUsable());
diff --git a/test/unit/org/openstreetmap/josm/data/osm/FilterTest.java b/test/unit/org/openstreetmap/josm/data/osm/FilterTest.java
index 5c26c50..9ce4379 100644
--- a/test/unit/org/openstreetmap/josm/data/osm/FilterTest.java
+++ b/test/unit/org/openstreetmap/josm/data/osm/FilterTest.java
@@ -1,6 +1,7 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.osm;
 
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
 import java.io.FileInputStream;
@@ -57,12 +58,12 @@ public class FilterTest {
         FilterWorker.executeFilters(all, filterMatcher);
 
         assertTrue(n2.isDisabledAndHidden());
-        assertTrue(!n1.isDisabled());
+        assertFalse(n1.isDisabled());
     }
 
     @Test
     public void filter_test() throws ParseError, IllegalDataException, IOException {
-        for (int i : new int [] {1,2,3, 11,12,13,14, 15}) {
+        for (int i : new int[] {1, 2, 3, 11, 12, 13, 14, 15}) {
             DataSet ds;
             try (InputStream is = new FileInputStream("data_nodist/filterTests.osm")) {
                 ds = OsmReader.parseDataSet(is, NullProgressMonitor.INSTANCE);
@@ -171,7 +172,8 @@ public class FilterTest {
                 if (osm.hasKey(key)) {
                     foundAtLeastOne = true;
                     if (!osm.get(key).equals(filterCode(osm))) {
-                        failedPrimitives.append(String.format("Object %s. Expected [%s] but was [%s]%n", osm.toString(), osm.get(key), filterCode(osm)));
+                        failedPrimitives.append(String.format(
+                                "Object %s. Expected [%s] but was [%s]%n", osm.toString(), osm.get(key), filterCode(osm)));
                     }
                 }
             }
diff --git a/test/unit/org/openstreetmap/josm/data/osm/OsmPrimitiveKeyHandlingTest.java b/test/unit/org/openstreetmap/josm/data/osm/OsmPrimitiveKeyHandlingTest.java
index 38ccd18..7a53c12 100644
--- a/test/unit/org/openstreetmap/josm/data/osm/OsmPrimitiveKeyHandlingTest.java
+++ b/test/unit/org/openstreetmap/josm/data/osm/OsmPrimitiveKeyHandlingTest.java
@@ -1,6 +1,9 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.osm;
 
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 
 import org.junit.BeforeClass;
@@ -26,9 +29,9 @@ public class OsmPrimitiveKeyHandlingTest {
     @Test
     public void emptyNode() {
         Node n = new Node();
-        assertTrue(n.getKeys().size() == 0);
-        assertTrue(!n.hasKeys());
-        assertTrue(!n.hasKey("nosuchkey"));
+        assertSame(n.getKeys().size(), 0);
+        assertFalse(n.hasKeys());
+        assertFalse(n.hasKey("nosuchkey"));
         assertTrue(n.keySet().isEmpty());
 
         n.remove("nosuchkey"); // should work
@@ -42,9 +45,9 @@ public class OsmPrimitiveKeyHandlingTest {
         Node n = new Node();
         n.put("akey", "avalue");
         assertTrue(n.get("akey").equals("avalue"));
-        assertTrue(n.getKeys().size() == 1);
+        assertSame(n.getKeys().size(), 1);
 
-        assertTrue(n.keySet().size() == 1);
+        assertSame(n.keySet().size(), 1);
         assertTrue(n.keySet().contains("akey"));
     }
 
@@ -58,11 +61,11 @@ public class OsmPrimitiveKeyHandlingTest {
         n.put("key.2", "value.2");
         assertTrue(n.get("key.1").equals("value.1"));
         assertTrue(n.get("key.2").equals("value.2"));
-        assertTrue(n.getKeys().size() == 2);
+        assertSame(n.getKeys().size(), 2);
         assertTrue(n.hasKeys());
         assertTrue(n.hasKey("key.1"));
         assertTrue(n.hasKey("key.2"));
-        assertTrue(!n.hasKey("nosuchkey"));
+        assertFalse(n.hasKey("nosuchkey"));
     }
 
     /**
@@ -74,22 +77,22 @@ public class OsmPrimitiveKeyHandlingTest {
         n.put("key.1", "value.1");
         n.put("key.2", "value.2");
 
-        n.remove("nosuchkey");               // should work
-        assertTrue(n.getKeys().size() == 2); // still 2 tags ?
+        n.remove("nosuchkey");             // should work
+        assertSame(n.getKeys().size(), 2); // still 2 tags ?
 
         n.remove("key.1");
-        assertTrue(n.getKeys().size() == 1);
-        assertTrue(!n.hasKey("key.1"));
-        assertTrue(n.get("key.1") == null);
+        assertSame(n.getKeys().size(), 1);
+        assertFalse(n.hasKey("key.1"));
+        assertNull(n.get("key.1"));
         assertTrue(n.hasKey("key.2"));
         assertTrue(n.get("key.2").equals("value.2"));
 
         n.remove("key.2");
-        assertTrue(n.getKeys().size() == 0);
-        assertTrue(!n.hasKey("key.1"));
-        assertTrue(n.get("key.1") == null);
-        assertTrue(!n.hasKey("key.2"));
-        assertTrue(n.get("key.2") == null);
+        assertSame(n.getKeys().size(), 0);
+        assertFalse(n.hasKey("key.1"));
+        assertNull(n.get("key.1"));
+        assertFalse(n.hasKey("key.2"));
+        assertNull(n.get("key.2"));
     }
 
     /**
@@ -103,7 +106,7 @@ public class OsmPrimitiveKeyHandlingTest {
         n.put("key.2", "value.2");
 
         n.removeAll();
-        assertTrue(n.getKeys().size() == 0);
+        assertSame(n.getKeys().size(), 0);
     }
 
     /**
@@ -113,12 +116,12 @@ public class OsmPrimitiveKeyHandlingTest {
     @Test
     public void hasEqualSemanticAttributes() {
         Node n1 = new Node(1);
-        n1.setCoor(new LatLon(0,0));
+        n1.setCoor(new LatLon(0, 0));
         n1.put("key.1", "value.1");
         n1.put("key.2", "value.2");
 
         Node n2 = new Node(1);
-        n2.setCoor(new LatLon(0,0));
+        n2.setCoor(new LatLon(0, 0));
         n2.put("key.2", "value.2");
         n2.put("key.1", "value.1");
 
@@ -131,15 +134,15 @@ public class OsmPrimitiveKeyHandlingTest {
     @Test
     public void hasEqualSemanticAttributes_2() {
         Node n1 = new Node(1);
-        n1.setCoor(new LatLon(0,0));
+        n1.setCoor(new LatLon(0, 0));
         n1.put("key.1", "value.1");
         n1.put("key.2", "value.3");
 
         Node n2 = new Node(1);
-        n2.setCoor(new LatLon(0,0));
+        n2.setCoor(new LatLon(0, 0));
         n2.put("key.1", "value.1");
         n2.put("key.2", "value.4");
 
-        assertTrue(!n1.hasEqualSemanticAttributes(n2));
+        assertFalse(n1.hasEqualSemanticAttributes(n2));
     }
 }
diff --git a/test/unit/org/openstreetmap/josm/data/osm/OsmPrimitiveTest.java b/test/unit/org/openstreetmap/josm/data/osm/OsmPrimitiveTest.java
index e20f3d2..bfa697c 100644
--- a/test/unit/org/openstreetmap/josm/data/osm/OsmPrimitiveTest.java
+++ b/test/unit/org/openstreetmap/josm/data/osm/OsmPrimitiveTest.java
@@ -142,10 +142,9 @@ public class OsmPrimitiveTest {
         Assert.assertEquals(n.getReferrers().get(0), w1);
     }
 
-    @Test(expected=DataIntegrityProblemException.class)
+    @Test(expected = DataIntegrityProblemException.class)
     public void checkMustBeInDatasate() {
         Node n = new Node();
         n.getReferrers();
     }
-
 }
diff --git a/test/unit/org/openstreetmap/josm/data/osm/OsmUtilsTest.java b/test/unit/org/openstreetmap/josm/data/osm/OsmUtilsTest.java
index a8e0a9b..9ff446b 100644
--- a/test/unit/org/openstreetmap/josm/data/osm/OsmUtilsTest.java
+++ b/test/unit/org/openstreetmap/josm/data/osm/OsmUtilsTest.java
@@ -2,7 +2,8 @@
 package org.openstreetmap.josm.data.osm;
 
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
 
 import org.junit.BeforeClass;
 import org.junit.Test;
diff --git a/test/unit/org/openstreetmap/josm/data/osm/RelationTest.java b/test/unit/org/openstreetmap/josm/data/osm/RelationTest.java
index 95ec064..d7228a4 100644
--- a/test/unit/org/openstreetmap/josm/data/osm/RelationTest.java
+++ b/test/unit/org/openstreetmap/josm/data/osm/RelationTest.java
@@ -19,7 +19,7 @@ public class RelationTest {
         JOSMFixture.createUnitTestFixture().init();
     }
 
-    @Test(expected=NullPointerException.class)
+    @Test(expected = NullPointerException.class)
     public void createNewRelation() {
         new Relation(null);
     }
diff --git a/test/unit/org/openstreetmap/josm/data/osm/SimplePrimitiveIdTest.groovy b/test/unit/org/openstreetmap/josm/data/osm/SimplePrimitiveIdTest.groovy
index 75205e4..a20f3ff 100644
--- a/test/unit/org/openstreetmap/josm/data/osm/SimplePrimitiveIdTest.groovy
+++ b/test/unit/org/openstreetmap/josm/data/osm/SimplePrimitiveIdTest.groovy
@@ -23,9 +23,14 @@ class SimplePrimitiveIdTest extends GroovyTestCase {
         assert SimplePrimitiveId.fromString("relation123") == new SimplePrimitiveId(123, OsmPrimitiveType.RELATION)
     }
 
+    void testBad() {
+        shouldFail { SimplePrimitiveId.fromString("foobar") }
+    }
+
     void testFuzzy() {
         assert SimplePrimitiveId.fuzzyParse("foo relation/123 bar").toString() == "[relation 123]"
         assert SimplePrimitiveId.fuzzyParse("foo relation/123 and way/345 but also node/789").toString() == "[relation 123, way 345, node 789]"
+        assert SimplePrimitiveId.fuzzyParse("foo relation/123-24 and way/345-346 but also node/789").toString() == "[relation 123, relation 124, way 345, way 346, node 789]"
     }
 
     void testFromCopyAction() {
@@ -33,4 +38,24 @@ class SimplePrimitiveIdTest extends GroovyTestCase {
         assert SimplePrimitiveId.fromString("way 123") == new SimplePrimitiveId(123, OsmPrimitiveType.WAY)
         assert SimplePrimitiveId.fromString("relation 123") == new SimplePrimitiveId(123, OsmPrimitiveType.RELATION)
     }
+
+    void testMultipleIDs() {
+        assert SimplePrimitiveId.multipleFromString("node/234").toString() == "[node 234]"
+        assert SimplePrimitiveId.multipleFromString("node/234-234").toString() == "[node 234]"
+        assert SimplePrimitiveId.multipleFromString("node/2-1").toString() == "[]"
+        assert SimplePrimitiveId.multipleFromString("node/123-124").toString() == "[node 123, node 124]"
+        assert SimplePrimitiveId.multipleFromString("n/123-124").toString() == "[node 123, node 124]"
+        assert SimplePrimitiveId.multipleFromString("node123-126").toString() == "[node 123, node 124, node 125, node 126]"
+        assert SimplePrimitiveId.multipleFromString("way/123-123").toString() == "[way 123]"
+        assert SimplePrimitiveId.multipleFromString("w/123-127").toString() == "[way 123, way 124, way 125, way 126, way 127]"
+        assert SimplePrimitiveId.multipleFromString("way123-125").toString() == "[way 123, way 124, way 125]"
+        assert SimplePrimitiveId.multipleFromString("relation/123-125").toString() == "[relation 123, relation 124, relation 125]"
+        assert SimplePrimitiveId.multipleFromString("r/123-125").toString() == "[relation 123, relation 124, relation 125]"
+        assert SimplePrimitiveId.multipleFromString("relation123-125").toString() == "[relation 123, relation 124, relation 125]"
+        assert SimplePrimitiveId.multipleFromString("node/234-5").toString() == "[node 234, node 235]"
+        assert SimplePrimitiveId.multipleFromString("node/234-35").toString() == "[node 234, node 235]"
+        assert SimplePrimitiveId.multipleFromString("node/234-235").toString() == "[node 234, node 235]"
+        assert SimplePrimitiveId.multipleFromString("node/998-1001").toString() == "[node 998, node 999, node 1000, node 1001]"
+        shouldFail { SimplePrimitiveId.multipleFromString("foo node123 bar") }
+    }
 }
diff --git a/test/unit/org/openstreetmap/josm/data/osm/history/HistoryNodeTest.java b/test/unit/org/openstreetmap/josm/data/osm/history/HistoryNodeTest.java
index a6e4771..f43579b 100644
--- a/test/unit/org/openstreetmap/josm/data/osm/history/HistoryNodeTest.java
+++ b/test/unit/org/openstreetmap/josm/data/osm/history/HistoryNodeTest.java
@@ -2,6 +2,7 @@
 package org.openstreetmap.josm.data.osm.history;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 
 import java.util.Date;
 
@@ -16,18 +17,18 @@ public class HistoryNodeTest {
     public void historyNode() {
         Date d = new Date();
         HistoryNode node = new HistoryNode(
-                1l,
-                2l,
+                1L,
+                2L,
                 true,
                 User.createOsmUser(3, "testuser"),
-                4l,
+                4L,
                 d,
-                new LatLon(0,0)
+                new LatLon(0, 0)
                 );
 
         assertEquals(1, node.getId());
         assertEquals(2, node.getVersion());
-        assertEquals(true, node.isVisible());
+        assertTrue(node.isVisible());
         assertEquals("testuser", node.getUser().getName());
         assertEquals(3, node.getUser().getId());
         assertEquals(4, node.getChangesetId());
@@ -44,7 +45,7 @@ public class HistoryNodeTest {
                 User.createOsmUser(3, "testuser"),
                 4,
                 d,
-                new LatLon(0,0)
+                new LatLon(0, 0)
                 );
 
         assertEquals(OsmPrimitiveType.NODE, node.getType());
diff --git a/test/unit/org/openstreetmap/josm/data/osm/history/HistoryWayTest.java b/test/unit/org/openstreetmap/josm/data/osm/history/HistoryWayTest.java
index 29d473e..c29a75c 100644
--- a/test/unit/org/openstreetmap/josm/data/osm/history/HistoryWayTest.java
+++ b/test/unit/org/openstreetmap/josm/data/osm/history/HistoryWayTest.java
@@ -2,12 +2,14 @@
 package org.openstreetmap.josm.data.osm.history;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
 import java.util.ArrayList;
 import java.util.Date;
 
 import org.junit.Test;
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
 import org.openstreetmap.josm.data.osm.User;
 
@@ -27,7 +29,7 @@ public class HistoryWayTest {
 
         assertEquals(1, way.getId());
         assertEquals(2, way.getVersion());
-        assertEquals(true, way.isVisible());
+        assertTrue(way.isVisible());
         assertEquals("testuser", way.getUser().getName());
         assertEquals(3, way.getUser().getId());
         assertEquals(4, way.getChangesetId());
@@ -69,8 +71,11 @@ public class HistoryWayTest {
         try {
             way.getNodeId(1);
             fail("expected expection of type " + IndexOutOfBoundsException.class.toString());
-        } catch(IndexOutOfBoundsException e) {
+        } catch (IndexOutOfBoundsException e) {
             // OK
+            if (Main.isTraceEnabled()) {
+                Main.trace(e.getMessage());
+            }
         }
 
         way.addNode(5);
diff --git a/test/unit/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitorTest.java b/test/unit/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitorTest.java
index 2e3f365..987af13 100644
--- a/test/unit/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitorTest.java
+++ b/test/unit/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitorTest.java
@@ -44,27 +44,27 @@ public class MergeSourceBuildingVisitorTest {
     public void testNodes() {
         DataSet source = new DataSet();
         Node n1 = new Node(1);
-        Node n2 = new Node(new LatLon(10.0,10.0));
-        n2.put("name","n2");
+        Node n2 = new Node(new LatLon(10.0, 10.0));
+        n2.put("name", "n2");
         Node n3 = new Node(3);
-        Node n4 = new Node(new LatLon(20.0,20.0));
-        n4.put("name","n4");
+        Node n4 = new Node(new LatLon(20.0, 20.0));
+        n4.put("name", "n4");
         source.addPrimitive(n1);
         source.addPrimitive(n2);
         source.addPrimitive(n3);
         source.addPrimitive(n4);
-        source.setSelected(n1,n2);
+        source.setSelected(n1, n2);
 
         MergeSourceBuildingVisitor builder = new MergeSourceBuildingVisitor(source);
         DataSet hull = builder.build();
         assertNotNull(hull);
         assertEquals(2, hull.getNodes().size());
 
-        OsmPrimitive p = hull.getPrimitiveById(1,OsmPrimitiveType.NODE);
+        OsmPrimitive p = hull.getPrimitiveById(1, OsmPrimitiveType.NODE);
         assertNotNull(p);
         assertEquals(p.getClass(), Node.class);
 
-        p = hull.getPrimitiveById(3,OsmPrimitiveType.NODE);
+        p = hull.getPrimitiveById(3, OsmPrimitiveType.NODE);
         assertNull(p);
 
         p = lookupByName(hull.getNodes(), "n2");
@@ -74,7 +74,6 @@ public class MergeSourceBuildingVisitorTest {
         assertNull(p);
     }
 
-
     @Test
     public void testOneWay() {
         DataSet source = new DataSet();
@@ -94,11 +93,11 @@ public class MergeSourceBuildingVisitorTest {
         assertEquals(1, hull.getWays().size());
         assertEquals(2, hull.getNodes().size());
 
-        OsmPrimitive p = hull.getPrimitiveById(1,OsmPrimitiveType.NODE);
+        OsmPrimitive p = hull.getPrimitiveById(1, OsmPrimitiveType.NODE);
         assertNotNull(p);
         assertEquals(p.getClass(), Node.class);
 
-        p = hull.getPrimitiveById(2,OsmPrimitiveType.NODE);
+        p = hull.getPrimitiveById(2, OsmPrimitiveType.NODE);
         assertNotNull(p);
         assertEquals(p.getClass(), Node.class);
 
@@ -118,7 +117,7 @@ public class MergeSourceBuildingVisitorTest {
         source.addPrimitive(n1);
         source.addPrimitive(n2);
         source.addPrimitive(w1);
-        source.setSelected(w1,n1,n2);
+        source.setSelected(w1, n1, n2);
 
         MergeSourceBuildingVisitor builder = new MergeSourceBuildingVisitor(source);
         DataSet hull = builder.build();
@@ -126,7 +125,7 @@ public class MergeSourceBuildingVisitorTest {
         assertEquals(1, hull.getWays().size());
         assertEquals(2, hull.getNodes().size());
 
-        OsmPrimitive p = hull.getPrimitiveById(1,OsmPrimitiveType.NODE);
+        OsmPrimitive p = hull.getPrimitiveById(1, OsmPrimitiveType.NODE);
         assertNotNull(p);
         assertEquals(p.getClass(), Node.class);
 
@@ -134,7 +133,7 @@ public class MergeSourceBuildingVisitorTest {
         assertNotNull(p);
         assertEquals(p.getClass(), Node.class);
 
-        p = hull.getPrimitiveById(3,OsmPrimitiveType.WAY);
+        p = hull.getPrimitiveById(3, OsmPrimitiveType.WAY);
         assertNotNull(p);
         assertEquals(p.getClass(), Way.class);
     }
@@ -163,13 +162,13 @@ public class MergeSourceBuildingVisitorTest {
         Relation r1 = new Relation(1, 1);
         Node n20 = new Node(20, 1);
         n20.setCoor(new LatLon(0, 0));
-        r1.addMember(new RelationMember("node-20",n20));
+        r1.addMember(new RelationMember("node-20", n20));
         Way w30 = new Way(30, 1);
         Node n21  = new Node(21);
         w30.addNode(n21);
         Node n22 = new Node(22);
         w30.addNode(n22);
-        r1.addMember(new RelationMember("way-30",w30));
+        r1.addMember(new RelationMember("way-30", w30));
         Relation r40 = new Relation(40);
         r1.addMember(new RelationMember("relation-40", r40));
         source.addPrimitive(n20);
@@ -178,7 +177,7 @@ public class MergeSourceBuildingVisitorTest {
         source.addPrimitive(w30);
         source.addPrimitive(r40);
         source.addPrimitive(r1);
-        source.setSelected(r1,n20,w30,r40);
+        source.setSelected(r1, n20, w30, r40);
 
         MergeSourceBuildingVisitor builder = new MergeSourceBuildingVisitor(source);
         DataSet hull = builder.build();
@@ -191,24 +190,24 @@ public class MergeSourceBuildingVisitorTest {
         assertNotNull(p);
         assertEquals(p.getClass(), Relation.class);
 
-        Way w = (Way)hull.getPrimitiveById(30,OsmPrimitiveType.WAY);
+        Way w = (Way) hull.getPrimitiveById(30, OsmPrimitiveType.WAY);
         assertNotNull(w);
         assertEquals(2, w.getNodesCount());
-        Node n = (Node)hull.getPrimitiveById(21, OsmPrimitiveType.NODE);
+        Node n = (Node) hull.getPrimitiveById(21, OsmPrimitiveType.NODE);
         assertNotNull(n);
         assertTrue(w.containsNode(n));
 
-        n = (Node)hull.getPrimitiveById(22,OsmPrimitiveType.NODE);
+        n = (Node) hull.getPrimitiveById(22, OsmPrimitiveType.NODE);
         assertNotNull(n);
         assertTrue(w.containsNode(n));
 
-        Relation r = (Relation)hull.getPrimitiveById(40,OsmPrimitiveType.RELATION);
+        Relation r = (Relation) hull.getPrimitiveById(40, OsmPrimitiveType.RELATION);
         assertNotNull(r);
 
-        r = (Relation)hull.getPrimitiveById(1, OsmPrimitiveType.RELATION);
+        r = (Relation) hull.getPrimitiveById(1, OsmPrimitiveType.RELATION);
         assertNotNull(r);
         assertEquals(3, r.getMembersCount());
-        RelationMember m = new RelationMember("node-20", hull.getPrimitiveById(20,OsmPrimitiveType.NODE));
+        RelationMember m = new RelationMember("node-20", hull.getPrimitiveById(20, OsmPrimitiveType.NODE));
         assertTrue(r.getMembers().contains(m));
         m = new RelationMember("way-30", hull.getPrimitiveById(30, OsmPrimitiveType.WAY));
         assertTrue(r.getMembers().contains(m));
@@ -221,13 +220,13 @@ public class MergeSourceBuildingVisitorTest {
         DataSet source = new DataSet();
         Relation r1 = new Relation(1, 1);
         Node n20 = new Node(20);
-        r1.addMember(new RelationMember("node-20",n20));
+        r1.addMember(new RelationMember("node-20", n20));
         Way w30 = new Way(30, 1);
         Node n21;
         w30.addNode(n21 = new Node(21));
         Node n22;
         w30.addNode(n22 = new Node(22));
-        r1.addMember(new RelationMember("way-30",w30));
+        r1.addMember(new RelationMember("way-30", w30));
         Relation r40 = new Relation(40);
         r1.addMember(new RelationMember("relation-40", r40));
         source.addPrimitive(n20);
@@ -249,22 +248,22 @@ public class MergeSourceBuildingVisitorTest {
         assertNotNull(p);
         assertEquals(p.getClass(), Relation.class);
 
-        Way w = (Way)hull.getPrimitiveById(30, OsmPrimitiveType.WAY);
+        Way w = (Way) hull.getPrimitiveById(30, OsmPrimitiveType.WAY);
         assertNotNull(w);
         assertTrue(w.isIncomplete());
 
 
-        Node n = (Node)hull.getPrimitiveById(21,OsmPrimitiveType.NODE);
+        Node n = (Node) hull.getPrimitiveById(21, OsmPrimitiveType.NODE);
         assertNull(n);
 
-        n = (Node)hull.getPrimitiveById(22, OsmPrimitiveType.NODE);
+        n = (Node) hull.getPrimitiveById(22, OsmPrimitiveType.NODE);
         assertNull(n);
 
-        Relation r = (Relation)hull.getPrimitiveById(40, OsmPrimitiveType.RELATION);
+        Relation r = (Relation) hull.getPrimitiveById(40, OsmPrimitiveType.RELATION);
         assertNotNull(r);
         assertTrue(r.isIncomplete());
 
-        r = (Relation)hull.getPrimitiveById(1, OsmPrimitiveType.RELATION);
+        r = (Relation) hull.getPrimitiveById(1, OsmPrimitiveType.RELATION);
         assertNotNull(r);
         assertEquals(3, r.getMembersCount());
         RelationMember m = new RelationMember("node-20", hull.getPrimitiveById(20, OsmPrimitiveType.NODE));
@@ -280,19 +279,19 @@ public class MergeSourceBuildingVisitorTest {
         DataSet source = new DataSet();
         Relation r1 = new Relation();
         r1.put("name", "r1");
-        Node n20 = new Node(new LatLon(20.0,20.0));
+        Node n20 = new Node(new LatLon(20.0, 20.0));
         n20.put("name", "n20");
-        r1.addMember(new RelationMember("node-20",n20));
+        r1.addMember(new RelationMember("node-20", n20));
 
         Way w30 = new Way();
         w30.put("name", "w30");
         Node n21;
-        w30.addNode(n21 = new Node(new LatLon(21.0,21.0)));
-        n21.put("name","n21");
+        w30.addNode(n21 = new Node(new LatLon(21.0, 21.0)));
+        n21.put("name", "n21");
         Node n22;
-        w30.addNode(n22 = new Node(new LatLon(22.0,22.0)));
-        n22.put("name","n22");
-        r1.addMember(new RelationMember("way-30",w30));
+        w30.addNode(n22 = new Node(new LatLon(22.0, 22.0)));
+        n22.put("name", "n22");
+        r1.addMember(new RelationMember("way-30", w30));
         Relation r40 = new Relation();
         r40.put("name", "r40");
         r1.addMember(new RelationMember("relation-40", r40));
@@ -316,22 +315,22 @@ public class MergeSourceBuildingVisitorTest {
         assertNotNull(p);
         assertEquals(p.getClass(), Relation.class);
 
-        Way w = (Way)lookupByName(hull.getWays(), "w30");
+        Way w = (Way) lookupByName(hull.getWays(), "w30");
         assertNotNull(w);
         assertEquals(2, w.getNodesCount());
 
-        Node n = (Node)lookupByName(hull.getNodes(), "n21");
+        Node n = (Node) lookupByName(hull.getNodes(), "n21");
         assertNotNull(n);
         assertTrue(w.containsNode(n));
 
-        n = (Node)lookupByName(hull.getNodes(), "n22");
+        n = (Node) lookupByName(hull.getNodes(), "n22");
         assertNotNull(n);
         assertTrue(w.containsNode(n));
 
-        Relation r = (Relation)lookupByName(hull.getRelations(), "r40");
+        Relation r = (Relation) lookupByName(hull.getRelations(), "r40");
         assertNotNull(r);
 
-        r = (Relation)lookupByName(hull.getRelations(), "r1");
+        r = (Relation) lookupByName(hull.getRelations(), "r1");
         assertNotNull(r);
         assertEquals(3, r.getMembersCount());
         RelationMember m = new RelationMember("node-20", lookupByName(hull.getNodes(), "n20"));
@@ -346,7 +345,7 @@ public class MergeSourceBuildingVisitorTest {
     public void testOneRelationExistingRecursive() {
         DataSet source = new DataSet();
         Relation r1 = new Relation(1, 1);
-        r1.addMember(new RelationMember("relation-1",r1));
+        r1.addMember(new RelationMember("relation-1", r1));
         source.addPrimitive(r1);
         source.setSelected(r1);
 
@@ -355,10 +354,10 @@ public class MergeSourceBuildingVisitorTest {
         assertNotNull(hull);
         assertEquals(1, hull.getRelations().size());
 
-        Relation r = (Relation)hull.getPrimitiveById(1, OsmPrimitiveType.RELATION);
+        Relation r = (Relation) hull.getPrimitiveById(1, OsmPrimitiveType.RELATION);
         assertNotNull(r);
         assertEquals(1, r.getMembersCount());
-        assertTrue(r.getMembers().contains(new RelationMember("relation-1",r)));
+        assertTrue(r.getMembers().contains(new RelationMember("relation-1", r)));
     }
 
     @Test
@@ -366,7 +365,7 @@ public class MergeSourceBuildingVisitorTest {
         DataSet source = new DataSet();
         Relation r1 = new Relation();
         r1.put("name", "r1");
-        r1.addMember(new RelationMember("relation-1",r1));
+        r1.addMember(new RelationMember("relation-1", r1));
         source.addPrimitive(r1);
         source.setSelected(r1);
 
@@ -375,10 +374,10 @@ public class MergeSourceBuildingVisitorTest {
         assertNotNull(hull);
         assertEquals(1, hull.getRelations().size());
 
-        Relation r = (Relation)lookupByName(hull.getRelations(), "r1");
+        Relation r = (Relation) lookupByName(hull.getRelations(), "r1");
         assertNotNull(r);
         assertEquals(1, r.getMembersCount());
-        assertTrue(r.getMembers().contains(new RelationMember("relation-1",r)));
+        assertTrue(r.getMembers().contains(new RelationMember("relation-1", r)));
     }
 
     @Test
@@ -388,22 +387,22 @@ public class MergeSourceBuildingVisitorTest {
         source.addPrimitive(r1);
         Relation r2 = new Relation(2, 3);
         source.addPrimitive(r2);
-        r1.addMember(new RelationMember("relation-2",r2));
-        r2.addMember(new RelationMember("relation-1",r1));
-        source.setSelected(r1,r2);
+        r1.addMember(new RelationMember("relation-2", r2));
+        r2.addMember(new RelationMember("relation-1", r1));
+        source.setSelected(r1, r2);
 
         MergeSourceBuildingVisitor builder = new MergeSourceBuildingVisitor(source);
         DataSet hull = builder.build();
         assertNotNull(hull);
         assertEquals(2, hull.getRelations().size());
 
-        r1 = (Relation)hull.getPrimitiveById(1, OsmPrimitiveType.RELATION);
+        r1 = (Relation) hull.getPrimitiveById(1, OsmPrimitiveType.RELATION);
         assertNotNull(r1);
-        r2 = (Relation)hull.getPrimitiveById(2, OsmPrimitiveType.RELATION);
+        r2 = (Relation) hull.getPrimitiveById(2, OsmPrimitiveType.RELATION);
         assertNotNull(r2);
         assertEquals(1, r1.getMembersCount());
-        assertTrue(r1.getMembers().contains(new RelationMember("relation-2",r2)));
+        assertTrue(r1.getMembers().contains(new RelationMember("relation-2", r2)));
         assertEquals(1, r2.getMembersCount());
-        assertTrue(r2.getMembers().contains(new RelationMember("relation-1",r1)));
+        assertTrue(r2.getMembers().contains(new RelationMember("relation-1", r1)));
     }
 }
diff --git a/test/unit/org/openstreetmap/josm/data/projection/EllipsoidTest.java b/test/unit/org/openstreetmap/josm/data/projection/EllipsoidTest.java
index 78b0bb6..8250d00 100644
--- a/test/unit/org/openstreetmap/josm/data/projection/EllipsoidTest.java
+++ b/test/unit/org/openstreetmap/josm/data/projection/EllipsoidTest.java
@@ -19,17 +19,17 @@ public class EllipsoidTest {
         Random r = new Random(System.currentTimeMillis());
         double maxErrLat = 0, maxErrLon = 0;
         Ellipsoid ellips = Ellipsoid.WGS84;
-        for (int num=0; num<1000; ++num) {
+        for (int num = 0; num < 1000; ++num) {
 
             double lat = r.nextDouble() * 180.0 - 90.0;
             double lon = r.nextDouble() * 360.0 - 180.0;
-            LatLon ll = new LatLon(lat,lon);
+            LatLon ll = new LatLon(lat, lon);
 
-            for (int i=0; i<1000; ++i) {
+            for (int i = 0; i < 1000; ++i) {
                 double[] cart = ellips.latLon2Cart(ll);
                 ll = ellips.cart2LatLon(cart);
 
-                if (!(Math.abs(lat - ll.lat())<EPSILON && Math.abs(lon - ll.lon())<EPSILON)) {
+                if (!(Math.abs(lat - ll.lat()) < EPSILON && Math.abs(lon - ll.lon()) < EPSILON)) {
                     String error = String.format("point: %s iterations: %s current: %s errorLat: %s errorLon %s",
                             new LatLon(lat, lon), i, ll, Math.abs(lat - ll.lat()), Math.abs(lon - ll.lon()));
                     System.err.println(error);
diff --git a/test/unit/org/openstreetmap/josm/data/projection/ProjectionRefTest.java b/test/unit/org/openstreetmap/josm/data/projection/ProjectionRefTest.java
index 358bc27..15fd62a 100644
--- a/test/unit/org/openstreetmap/josm/data/projection/ProjectionRefTest.java
+++ b/test/unit/org/openstreetmap/josm/data/projection/ProjectionRefTest.java
@@ -29,7 +29,7 @@ public class ProjectionRefTest {
 
     /**
      * create a list of epsg codes and bounds to be used by the perl script
-     * @param args
+     * @param args program main arguments
      */
     public static void main(String[] args) {
         Map<String, Projection> allCodes = new HashMap<>();
diff --git a/test/unit/org/openstreetmap/josm/data/projection/ProjectionRegressionTest.java b/test/unit/org/openstreetmap/josm/data/projection/ProjectionRegressionTest.java
index cbcfe8c..cf23294 100644
--- a/test/unit/org/openstreetmap/josm/data/projection/ProjectionRegressionTest.java
+++ b/test/unit/org/openstreetmap/josm/data/projection/ProjectionRegressionTest.java
@@ -12,18 +12,18 @@ import java.io.InputStreamReader;
 import java.io.OutputStreamWriter;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Random;
 import java.util.Set;
+import java.util.TreeSet;
 
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.openstreetmap.josm.JOSMFixture;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.coor.LatLon;
@@ -44,7 +44,8 @@ import org.openstreetmap.josm.tools.Pair;
  */
 public class ProjectionRegressionTest {
 
-    public static final String PROJECTION_DATA_FILE = "data_nodist/projection-regression-test-data.csv";
+    private static final String PROJECTION_DATA_FILE = "data_nodist/projection-regression-test-data.csv";
+    private static final String PROJECTION_DATA_FILE_JAVA_9 = "data_nodist/projection-regression-test-data-java9.csv";
 
     private static class TestData {
         public String code;
@@ -53,7 +54,11 @@ public class ProjectionRegressionTest {
         public LatLon ll2;
     }
 
-    public static void main(String[] args) throws IOException, FileNotFoundException {
+    private static String getProjectionDataFile() {
+        return TestUtils.getJavaVersion() >= 1.9 ? PROJECTION_DATA_FILE_JAVA_9 : PROJECTION_DATA_FILE;
+    }
+
+    public static void main(String[] args) throws IOException {
         setUp();
 
         Map<String, Projection> supportedCodesMap = new HashMap<>();
@@ -62,15 +67,15 @@ public class ProjectionRegressionTest {
         }
 
         List<TestData> prevData = new ArrayList<>();
-        if (new File(PROJECTION_DATA_FILE).exists()) {
+        if (new File(getProjectionDataFile()).exists()) {
             prevData = readData();
         }
-        Map<String,TestData> prevCodesMap = new HashMap<>();
+        Map<String, TestData> prevCodesMap = new HashMap<>();
         for (TestData data : prevData) {
             prevCodesMap.put(data.code, data);
         }
 
-        Set<String> codesToWrite = new LinkedHashSet<>();
+        Set<String> codesToWrite = new TreeSet<>();
         for (TestData data : prevData) {
             if (supportedCodesMap.containsKey(data.code)) {
                 codesToWrite.add(data.code);
@@ -83,7 +88,8 @@ public class ProjectionRegressionTest {
         }
 
         Random rand = new Random();
-        try (BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(PROJECTION_DATA_FILE), StandardCharsets.UTF_8))) {
+        try (BufferedWriter out = new BufferedWriter(new OutputStreamWriter(
+                new FileOutputStream(getProjectionDataFile()), StandardCharsets.UTF_8))) {
             out.write("# Data for test/unit/org/openstreetmap/josm/data/projection/ProjectionRegressionTest.java\n");
             out.write("# Format: 1. Projection code; 2. lat/lon; 3. lat/lon projected -> east/north; 4. east/north (3.) inverse projected\n");
             for (String code : codesToWrite) {
@@ -100,13 +106,15 @@ public class ProjectionRegressionTest {
                 }
                 EastNorth en = proj.latlon2eastNorth(new LatLon(lat, lon));
                 LatLon ll2 = proj.eastNorth2latlon(en);
-                out.write(String.format("%s%n  ll  %s %s%n  en  %s %s%n  ll2 %s %s%n", proj.toCode(), lat, lon, en.east(), en.north(), ll2.lat(), ll2.lon()));
+                out.write(String.format(
+                        "%s%n  ll  %s %s%n  en  %s %s%n  ll2 %s %s%n", proj.toCode(), lat, lon, en.east(), en.north(), ll2.lat(), ll2.lon()));
             }
         }
     }
 
     private static List<TestData> readData() throws IOException, FileNotFoundException {
-        try (BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(PROJECTION_DATA_FILE), StandardCharsets.UTF_8))) {
+        try (BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(getProjectionDataFile()),
+                StandardCharsets.UTF_8))) {
             List<TestData> result = new ArrayList<>();
             String line;
             while ((line = in.readLine()) != null) {
@@ -115,9 +123,9 @@ public class ProjectionRegressionTest {
                 }
                 TestData next = new TestData();
 
-                Pair<Double,Double> ll = readLine("ll", in.readLine());
-                Pair<Double,Double> en = readLine("en", in.readLine());
-                Pair<Double,Double> ll2 = readLine("ll2", in.readLine());
+                Pair<Double, Double> ll = readLine("ll", in.readLine());
+                Pair<Double, Double> en = readLine("en", in.readLine());
+                Pair<Double, Double> ll2 = readLine("ll2", in.readLine());
 
                 next.code = line;
                 next.ll = new LatLon(ll.a, ll.b);
@@ -130,7 +138,7 @@ public class ProjectionRegressionTest {
         }
     }
 
-    private static Pair<Double,Double> readLine(String expectedName, String input) {
+    private static Pair<Double, Double> readLine(String expectedName, String input) {
         String[] fields = input.trim().split("[ ]+");
         if (fields.length != 3) throw new AssertionError();
         if (!fields[0].equals(expectedName)) throw new AssertionError();
diff --git a/test/unit/org/openstreetmap/josm/data/projection/ProjectionTest.java b/test/unit/org/openstreetmap/josm/data/projection/ProjectionTest.java
index b03849f..0ec6e9b 100644
--- a/test/unit/org/openstreetmap/josm/data/projection/ProjectionTest.java
+++ b/test/unit/org/openstreetmap/josm/data/projection/ProjectionTest.java
@@ -27,28 +27,28 @@ public class ProjectionTest {
             testProj(Projections.getProjectionByCode("EPSG:3301")); // Lambert EST
         }
 
-        for (int i=0; i<=3; ++i) {
+        for (int i = 0; i <= 3; ++i) {
             testProj(Projections.getProjectionByCode("EPSG:"+Integer.toString(27561+i))); // Lambert 4 Zones France
         }
 
-        for (int i=0; i<=4; ++i) {
+        for (int i = 0; i <= 4; ++i) {
             testProj(Projections.getProjectionByCode("EPSG:"+Integer.toString(2176+i))); // PUWG Poland
         }
 
         testProj(Projections.getProjectionByCode("EPSG:21781")); // Swiss grid
 
-        for (int i=0; i<=60; ++i) {
+        for (int i = 0; i <= 60; ++i) {
             testProj(Projections.getProjectionByCode("EPSG:"+Integer.toString(32601+i))); // UTM North
             testProj(Projections.getProjectionByCode("EPSG:"+Integer.toString(32701+i))); // UTM South
         }
 
         if (!"yes".equals(System.getProperty("suppressPermanentFailure"))) {
-            for (int i=0; i<=4; ++i) {
+            for (int i = 0; i <= 4; ++i) {
                 testProj(Projections.getProjectionByCode("EPSG:"+Integer.toString(2969+i))); // UTM France DOM
             }
         }
 
-        for (int i=0; i<=8; ++i) {
+        for (int i = 0; i <= 8; ++i) {
             testProj(Projections.getProjectionByCode("EPSG:"+Integer.toString(3942+i))); // Lambert CC9 Zones France
         }
 
@@ -64,14 +64,14 @@ public class ProjectionTest {
             Bounds b = p.getWorldBoundsLatLon();
 
             text += String.format("*** %s %s%n", p.toString(), p.toCode());
-            for (int num=0; num < 1000; ++num) {
+            for (int num = 0; num < 1000; ++num) {
 
                 double lat = rand.nextDouble() * (b.getMax().lat() - b.getMin().lat()) + b.getMin().lat();
                 double lon = rand.nextDouble() * (b.getMax().lon() - b.getMin().lon()) + b.getMin().lon();
 
                 LatLon ll = new LatLon(lat, lon);
 
-                for (int i=0; i<10; ++i) {
+                for (int i = 0; i < 10; ++i) {
                     EastNorth en = p.latlon2eastNorth(ll);
                     ll = p.eastNorth2latlon(en);
                 }
diff --git a/test/unit/org/openstreetmap/josm/data/projection/SwissGridTest.java b/test/unit/org/openstreetmap/josm/data/projection/SwissGridTest.java
index d547335..e7b5895 100644
--- a/test/unit/org/openstreetmap/josm/data/projection/SwissGridTest.java
+++ b/test/unit/org/openstreetmap/josm/data/projection/SwissGridTest.java
@@ -1,6 +1,7 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.projection;
 
+import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 
 import org.junit.BeforeClass;
@@ -22,15 +23,19 @@ public class SwissGridTest {
         Main.setProjection(Projections.getProjectionByCode(SWISS_EPSG_CODE)); // Swiss grid
     }
 
+    // CHECKSTYLE.OFF: LineLength
+
     /**
      * source: http://www.swisstopo.admin.ch/internet/swisstopo/en/home/topics/survey/sys/refsys/switzerland.parsysrelated1.37696.downloadList.97912.DownloadFile.tmp/swissprojectionen.pdf
      */
     ProjData[] data = {
-            new ProjData("Zimmerwald",      d(7,27,54.983506), d(46,52,37.540562), 947.149, 602030.680, 191775.030, 897.915),
-            new ProjData("Chrischona",      d(7,40,6.983077), d(47,34, 1.385301), 504.935,  617306.300, 268507.300, 456.064),
-            new ProjData("Pfaender",        d(9,47,3.697723), d(47,30,55.172797), 1089.372, 776668.105, 265372.681, 1042.624),
-            new ProjData("La Givrine",      d(6,6,7.326361), d(46,27,14.690021), 1258.274,  497313.292, 145625.438, 1207.434),
-            new ProjData("Monte Generoso",  d(9,1,16.389053), d(45,55,45.438020), 1685.027, 722758.810, 87649.670, 1636.600) };
+            new ProjData("Zimmerwald",      d(7, 27, 54.983506), d(46, 52, 37.540562), 947.149, 602030.680, 191775.030, 897.915),
+            new ProjData("Chrischona",      d(7, 40, 6.983077), d(47, 34, 1.385301), 504.935,  617306.300, 268507.300, 456.064),
+            new ProjData("Pfaender",        d(9, 47, 3.697723), d(47, 30, 55.172797), 1089.372, 776668.105, 265372.681, 1042.624),
+            new ProjData("La Givrine",      d(6, 6, 7.326361), d(46, 27, 14.690021), 1258.274,  497313.292, 145625.438, 1207.434),
+            new ProjData("Monte Generoso",  d(9, 1, 16.389053), d(45, 55, 45.438020), 1685.027, 722758.810, 87649.670, 1636.600) };
+
+    // CHECKSTYLE.ON: LineLength
 
     private double d(double deg, double min, double sec) {
         return deg + min / 60. + sec / 3600.;
@@ -40,6 +45,7 @@ public class SwissGridTest {
         public String name;
         public LatLon ll;
         public EastNorth en;
+
         public ProjData(String name, double lon, double lat, double h1, double x, double y, double h2) {
             this.name = name;
             ll = new LatLon(lat, lon);
@@ -59,7 +65,7 @@ public class SwissGridTest {
                 errs.append(String.format("%s should be: %s but is: %s%n", pd.name, pd.en, en2));
             }
         }
-        assertTrue(errs.toString(), errs.length() == 0);
+        assertSame(errs.toString(), errs.length(), 0);
     }
 
     @Test
@@ -76,184 +82,153 @@ public class SwissGridTest {
 
     @Test
     public void a_latlon2eastNorth_test() {
-        {
-            LatLon ll = new LatLon(46.518, 6.567);
-            EastNorth en = Main.getProjection().latlon2eastNorth(ll);
-            if (debug) {
-                System.out.println(en);
-            }
-            assertTrue("Lausanne", Math.abs(en.east() - 533111.69) < 0.1);
-            assertTrue("Lausanne", Math.abs(en.north() - 152227.85) < 0.1);
+        LatLon ll = new LatLon(46.518, 6.567);
+        EastNorth en = Main.getProjection().latlon2eastNorth(ll);
+        if (debug) {
+            System.out.println(en);
         }
+        assertTrue("Lausanne", Math.abs(en.east() - 533111.69) < 0.1);
+        assertTrue("Lausanne", Math.abs(en.north() - 152227.85) < 0.1);
 
-        {
-            LatLon ll = new LatLon(47.78, 8.58);
-            EastNorth en = Main.getProjection().latlon2eastNorth(ll);
-            if (debug) {
-                System.out.println(en);
-            }
-            assertTrue("Schafouse", Math.abs(en.east() - 685544.16) < 0.1);
-            assertTrue("Schafouse", Math.abs(en.north() - 292782.91) < 0.1);
+        ll = new LatLon(47.78, 8.58);
+        en = Main.getProjection().latlon2eastNorth(ll);
+        if (debug) {
+            System.out.println(en);
         }
+        assertTrue("Schafouse", Math.abs(en.east() - 685544.16) < 0.1);
+        assertTrue("Schafouse", Math.abs(en.north() - 292782.91) < 0.1);
 
-        {
-            LatLon ll = new LatLon(46.58, 10.48);
-            EastNorth en = Main.getProjection().latlon2eastNorth(ll);
-            if (debug) {
-                System.out.println(en);
-            }
-            assertTrue("Grinson", Math.abs(en.east() - 833068.04) < 0.1);
-            assertTrue("Grinson", Math.abs(en.north() - 163265.39) < 0.1);
+        ll = new LatLon(46.58, 10.48);
+        en = Main.getProjection().latlon2eastNorth(ll);
+        if (debug) {
+            System.out.println(en);
         }
+        assertTrue("Grinson", Math.abs(en.east() - 833068.04) < 0.1);
+        assertTrue("Grinson", Math.abs(en.north() - 163265.39) < 0.1);
 
-        {
-            LatLon ll = new LatLon(46.0 + 57.0 / 60 + 3.89813884505 / 3600, 7.0 + 26.0 / 60 + 19.076595154147 / 3600);
-            EastNorth en = Main.getProjection().latlon2eastNorth(ll);
-            if (debug) {
-                System.out.println(en);
-            }
-            assertTrue("Berne", Math.abs(en.east() - 600000.0) < 0.1);
-            assertTrue("Berne", Math.abs(en.north() - 200000.0) < 0.1);
+        ll = new LatLon(46.0 + 57.0 / 60 + 3.89813884505 / 3600, 7.0 + 26.0 / 60 + 19.076595154147 / 3600);
+        en = Main.getProjection().latlon2eastNorth(ll);
+        if (debug) {
+            System.out.println(en);
         }
-        {
-            LatLon ll = new LatLon(46.0 + 2.0 / 60 + 38.87 / 3600, 8.0 + 43.0 / 60 + 49.79 / 3600);
-            EastNorth en = Main.getProjection().latlon2eastNorth(ll);
-            if (debug) {
-                System.out.println(en);
-            }
-            assertTrue("Ref", Math.abs(en.east() - 700000.0) < 0.1);
-            assertTrue("Ref", Math.abs(en.north() - 100000.0) < 0.1);
+        assertTrue("Berne", Math.abs(en.east() - 600000.0) < 0.1);
+        assertTrue("Berne", Math.abs(en.north() - 200000.0) < 0.1);
+
+        ll = new LatLon(46.0 + 2.0 / 60 + 38.87 / 3600, 8.0 + 43.0 / 60 + 49.79 / 3600);
+        en = Main.getProjection().latlon2eastNorth(ll);
+        if (debug) {
+            System.out.println(en);
         }
+        assertTrue("Ref", Math.abs(en.east() - 700000.0) < 0.1);
+        assertTrue("Ref", Math.abs(en.north() - 100000.0) < 0.1);
     }
 
-
     @Test
     public void b_eastNorth2latlon_test() {
-        {
-            EastNorth en = new EastNorth(533111.69, 152227.85);
-            LatLon ll = Main.getProjection().eastNorth2latlon(en);
-            if (debug) {
-                System.out.println(ll);
-            }
-            assertTrue("Lausanne", Math.abs(ll.lat() - 46.518) < 0.00001);
-            assertTrue("Lausanne", Math.abs(ll.lon() - 6.567) < 0.00001);
+        EastNorth en = new EastNorth(533111.69, 152227.85);
+        LatLon ll = Main.getProjection().eastNorth2latlon(en);
+        if (debug) {
+            System.out.println(ll);
         }
+        assertTrue("Lausanne", Math.abs(ll.lat() - 46.518) < 0.00001);
+        assertTrue("Lausanne", Math.abs(ll.lon() - 6.567) < 0.00001);
 
-        {
-            EastNorth en = new EastNorth(685544.16, 292782.91);
-            LatLon ll = Main.getProjection().eastNorth2latlon(en);
-            if (debug) {
-                System.out.println(ll);
-            }
-            assertTrue("Schafouse", Math.abs(ll.lat() - 47.78) < 0.00001);
-            assertTrue("Schafouse", Math.abs(ll.lon() - 8.58) < 0.00001);
+        en = new EastNorth(685544.16, 292782.91);
+        ll = Main.getProjection().eastNorth2latlon(en);
+        if (debug) {
+            System.out.println(ll);
         }
+        assertTrue("Schafouse", Math.abs(ll.lat() - 47.78) < 0.00001);
+        assertTrue("Schafouse", Math.abs(ll.lon() - 8.58) < 0.00001);
 
-        {
-            EastNorth en = new EastNorth(833068.04, 163265.39);
-            LatLon ll = Main.getProjection().eastNorth2latlon(en);
-            if (debug) {
-                System.out.println(ll);
-            }
-            assertTrue("Grinson", Math.abs(ll.lat() - 46.58) < 0.00001);
-            assertTrue("Grinson", Math.abs(ll.lon() - 10.48) < 0.00001);
+        en = new EastNorth(833068.04, 163265.39);
+        ll = Main.getProjection().eastNorth2latlon(en);
+        if (debug) {
+            System.out.println(ll);
         }
+        assertTrue("Grinson", Math.abs(ll.lat() - 46.58) < 0.00001);
+        assertTrue("Grinson", Math.abs(ll.lon() - 10.48) < 0.00001);
 
-        {
-            EastNorth en = new EastNorth(600000.0, 200000.0);
-            LatLon ll = Main.getProjection().eastNorth2latlon(en);
-            if (debug) {
-                System.out.println(ll);
-            }
-            assertTrue("Berne", Math.abs(ll.lat() - (46.0 + 57.0 / 60 + 3.89813884505 / 3600)) < 0.00001);
-            assertTrue("Berne", Math.abs(ll.lon() - (7.0 + 26.0 / 60 + 19.076595154147 / 3600)) < 0.00001);
+        en = new EastNorth(600000.0, 200000.0);
+        ll = Main.getProjection().eastNorth2latlon(en);
+        if (debug) {
+            System.out.println(ll);
         }
+        assertTrue("Berne", Math.abs(ll.lat() - (46.0 + 57.0 / 60 + 3.89813884505 / 3600)) < 0.00001);
+        assertTrue("Berne", Math.abs(ll.lon() - (7.0 + 26.0 / 60 + 19.076595154147 / 3600)) < 0.00001);
 
-        {
-            EastNorth en = new EastNorth(700000.0, 100000.0);
-            LatLon ll = Main.getProjection().eastNorth2latlon(en);
-            if (debug) {
-                System.out.println(ll);
-            }
-            assertTrue("Ref", Math.abs(ll.lat() - (46.0 + 2.0 / 60 + 38.87 / 3600)) < 0.00001);
-            assertTrue("Ref", Math.abs(ll.lon() - (8.0 + 43.0 / 60 + 49.79 / 3600)) < 0.00001);
+        en = new EastNorth(700000.0, 100000.0);
+        ll = Main.getProjection().eastNorth2latlon(en);
+        if (debug) {
+            System.out.println(ll);
         }
+        assertTrue("Ref", Math.abs(ll.lat() - (46.0 + 2.0 / 60 + 38.87 / 3600)) < 0.00001);
+        assertTrue("Ref", Math.abs(ll.lon() - (8.0 + 43.0 / 60 + 49.79 / 3600)) < 0.00001);
     }
 
-
     /**
      * Send and return should have less than 2mm of difference.
      */
     @Test
     public void c_sendandreturn_test() {
-        {
-            EastNorth en = new EastNorth(533111.69, 152227.85);
-            LatLon ll = Main.getProjection().eastNorth2latlon(en);
-            EastNorth en2 = Main.getProjection().latlon2eastNorth(ll);
-            if (debug) {
-                System.out.println(en.east() - en2.east());
-            }
-            if (debug) {
-                System.out.println(en.north() - en2.north());
-            }
-            assertTrue("Lausanne", Math.abs(en.east() - en2.east()) < 0.002);
-            assertTrue("Lausanne", Math.abs(en.north() - en2.north()) < 0.002);
+        EastNorth en = new EastNorth(533111.69, 152227.85);
+        LatLon ll = Main.getProjection().eastNorth2latlon(en);
+        EastNorth en2 = Main.getProjection().latlon2eastNorth(ll);
+        if (debug) {
+            System.out.println(en.east() - en2.east());
         }
+        if (debug) {
+            System.out.println(en.north() - en2.north());
+        }
+        assertTrue("Lausanne", Math.abs(en.east() - en2.east()) < 0.002);
+        assertTrue("Lausanne", Math.abs(en.north() - en2.north()) < 0.002);
 
-        {
-            EastNorth en = new EastNorth(685544.16, 292782.91);
-            LatLon ll = Main.getProjection().eastNorth2latlon(en);
-            EastNorth en2 = Main.getProjection().latlon2eastNorth(ll);
-            if (debug) {
-                System.out.println(en.east() - en2.east());
-            }
-            if (debug) {
-                System.out.println(en.north() - en2.north());
-            }
-            assertTrue("Schafouse", Math.abs(en.east() - en2.east()) < 0.002);
-            assertTrue("Schafouse", Math.abs(en.north() - en2.north()) < 0.002);
+        en = new EastNorth(685544.16, 292782.91);
+        ll = Main.getProjection().eastNorth2latlon(en);
+        en2 = Main.getProjection().latlon2eastNorth(ll);
+        if (debug) {
+            System.out.println(en.east() - en2.east());
+        }
+        if (debug) {
+            System.out.println(en.north() - en2.north());
         }
+        assertTrue("Schafouse", Math.abs(en.east() - en2.east()) < 0.002);
+        assertTrue("Schafouse", Math.abs(en.north() - en2.north()) < 0.002);
 
-        {
-            EastNorth en = new EastNorth(833068.04, 163265.39);
-            LatLon ll = Main.getProjection().eastNorth2latlon(en);
-            EastNorth en2 = Main.getProjection().latlon2eastNorth(ll);
-            if (debug) {
-                System.out.println(en.east() - en2.east());
-            }
-            if (debug) {
-                System.out.println(en.north() - en2.north());
-            }
-            assertTrue("Grinson", Math.abs(en.east() - en2.east()) < 0.002);
-            assertTrue("Grinson", Math.abs(en.north() - en2.north()) < 0.002);
+        en = new EastNorth(833068.04, 163265.39);
+        ll = Main.getProjection().eastNorth2latlon(en);
+        en2 = Main.getProjection().latlon2eastNorth(ll);
+        if (debug) {
+            System.out.println(en.east() - en2.east());
         }
+        if (debug) {
+            System.out.println(en.north() - en2.north());
+        }
+        assertTrue("Grinson", Math.abs(en.east() - en2.east()) < 0.002);
+        assertTrue("Grinson", Math.abs(en.north() - en2.north()) < 0.002);
 
-        {
-            EastNorth en = new EastNorth(600000.0, 200000.0);
-            LatLon ll = Main.getProjection().eastNorth2latlon(en);
-            EastNorth en2 = Main.getProjection().latlon2eastNorth(ll);
-            if (debug) {
-                System.out.println(en.east() - en2.east());
-            }
-            if (debug) {
-                System.out.println(en.north() - en2.north());
-            }
-            assertTrue("Berne", Math.abs(en.east() - en2.east()) < 0.002);
-            assertTrue("Berne", Math.abs(en.north() - en2.north()) < 0.002);
+        en = new EastNorth(600000.0, 200000.0);
+        ll = Main.getProjection().eastNorth2latlon(en);
+        en2 = Main.getProjection().latlon2eastNorth(ll);
+        if (debug) {
+            System.out.println(en.east() - en2.east());
+        }
+        if (debug) {
+            System.out.println(en.north() - en2.north());
         }
+        assertTrue("Berne", Math.abs(en.east() - en2.east()) < 0.002);
+        assertTrue("Berne", Math.abs(en.north() - en2.north()) < 0.002);
 
-        {
-            EastNorth en = new EastNorth(700000.0, 100000.0);
-            LatLon ll = Main.getProjection().eastNorth2latlon(en);
-            EastNorth en2 = Main.getProjection().latlon2eastNorth(ll);
-            if (debug) {
-                System.out.println(en.east() - en2.east());
-            }
-            if (debug) {
-                System.out.println(en.north() - en2.north());
-            }
-            assertTrue("Ref", Math.abs(en.east() - en2.east()) < 0.002);
-            assertTrue("Ref", Math.abs(en.north() - en2.north()) < 0.002);
+        en = new EastNorth(700000.0, 100000.0);
+        ll = Main.getProjection().eastNorth2latlon(en);
+        en2 = Main.getProjection().latlon2eastNorth(ll);
+        if (debug) {
+            System.out.println(en.east() - en2.east());
+        }
+        if (debug) {
+            System.out.println(en.north() - en2.north());
         }
+        assertTrue("Ref", Math.abs(en.east() - en2.east()) < 0.002);
+        assertTrue("Ref", Math.abs(en.north() - en2.north()) < 0.002);
     }
 }
diff --git a/test/unit/org/openstreetmap/josm/data/validation/tests/MapCSSTagCheckerTest.java b/test/unit/org/openstreetmap/josm/data/validation/tests/MapCSSTagCheckerTest.java
index b1cb54a..eb30703 100644
--- a/test/unit/org/openstreetmap/josm/data/validation/tests/MapCSSTagCheckerTest.java
+++ b/test/unit/org/openstreetmap/josm/data/validation/tests/MapCSSTagCheckerTest.java
@@ -1,3 +1,4 @@
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.validation.tests;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -104,6 +105,7 @@ public class MapCSSTagCheckerTest {
         final Collection<TestError> errors = test.getErrorsForPrimitive(p, false);
         assertThat(errors.size(), is(1));
         assertThat(errors.iterator().next().getMessage(), is("has alt_name but not name"));
+        assertThat(errors.iterator().next().getIgnoreSubGroup(), is("3000_*[.+_name][!name]"));
     }
 
     @Test
@@ -114,6 +116,7 @@ public class MapCSSTagCheckerTest {
         final Collection<TestError> errors = test.getErrorsForPrimitive(p, false);
         assertThat(errors.size(), is(1));
         assertThat(errors.iterator().next().getMessage(), is("footway used with foot=no"));
+        assertThat(errors.iterator().next().getIgnoreSubGroup(), is("3000_way[highway=footway][foot]"));
     }
 
     @Test
diff --git a/test/unit/org/openstreetmap/josm/data/validation/tests/MultipolygonTestTest.java b/test/unit/org/openstreetmap/josm/data/validation/tests/MultipolygonTestTest.java
index 8ff308d..b80011f 100644
--- a/test/unit/org/openstreetmap/josm/data/validation/tests/MultipolygonTestTest.java
+++ b/test/unit/org/openstreetmap/josm/data/validation/tests/MultipolygonTestTest.java
@@ -41,7 +41,7 @@ public class MultipolygonTestTest {
         nodes.add(new Node(new LatLon(0, 1)));
         nodes.add(new Node(new LatLon(0, 2)));
 
-        Way w = (Way)OsmUtils.createPrimitive("way "+tags);
+        Way w = (Way) OsmUtils.createPrimitive("way "+tags);
         w.setNodes(nodes);
         return w;
     }
diff --git a/test/unit/org/openstreetmap/josm/data/validation/tests/NameMismatchTest.java b/test/unit/org/openstreetmap/josm/data/validation/tests/NameMismatchTest.java
index 27dd13d..ee120f5 100644
--- a/test/unit/org/openstreetmap/josm/data/validation/tests/NameMismatchTest.java
+++ b/test/unit/org/openstreetmap/josm/data/validation/tests/NameMismatchTest.java
@@ -1,8 +1,8 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.validation.tests;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertSame;
 
 import java.util.List;
 
@@ -12,10 +12,16 @@ import org.openstreetmap.josm.JOSMFixture;
 import org.openstreetmap.josm.data.osm.OsmUtils;
 import org.openstreetmap.josm.data.validation.TestError;
 
+/**
+ * JUnit Test of "Name mismatch" validation test.
+ */
 public class NameMismatchTest {
 
+    /**
+     * Setup test.
+     */
     @Before
-    public void setUp() throws Exception {
+    public void setUp() {
         JOSMFixture.createUnitTestFixture().init();
     }
 
@@ -25,37 +31,49 @@ public class NameMismatchTest {
         return test.getErrors();
     }
 
+    /**
+     * Test "A name is missing, even though name:* exists."
+     */
     @Test
-    public void test0() throws Exception {
+    public void test0() {
         final List<TestError> errors = test("node name:de=Europa");
-        assertThat(errors.size(), is(1));
-        assertThat(errors.get(0).getMessage(), is("A name is missing, even though name:* exists."));
+        assertSame(1, errors.size());
+        assertEquals("A name is missing, even though name:* exists.", errors.get(0).getMessage());
     }
 
+    /**
+     * Test "Missing name:*={0}. Add tag with correct language key."
+     */
     @Test
-    public void test1() throws Exception {
+    public void test1() {
         final List<TestError> errors = test("node name=Europe name:de=Europa");
-        assertThat(errors.size(), is(1));
-        assertThat(errors.get(0).getMessage(), is("Missing name:*=Europe. Add tag with correct language key."));
+        assertSame(1, errors.size());
+        assertEquals("Missing name:*=Europe. Add tag with correct language key.", errors.get(0).getDescription());
     }
 
+    /**
+     * Test no error
+     */
     @Test
-    public void test2() throws Exception {
+    public void test2() {
         final List<TestError> errors = test("node name=Europe name:de=Europa name:en=Europe");
-        assertThat(errors.size(), is(0));
+        assertSame(0, errors.size());
     }
 
+    /**
+     * Various other tests
+     */
     @Test
-    public void test3() throws Exception {
+    public void test3() {
         List<TestError> errors;
         errors = test("node \"name\"=\"Italia - Italien - Italy\"");
-        assertThat(errors.size(), is(0));
+        assertSame(0, errors.size());
         errors = test("node name=\"Italia - Italien - Italy\" name:it=Italia");
-        assertThat(errors.size(), is(2));
+        assertSame(2, errors.size());
         errors = test("node name=\"Italia - Italien - Italy\" name:it=Italia name:de=Italien");
-        assertThat(errors.size(), is(1));
-        assertThat(errors.get(0).getMessage(), is("Missing name:*=Italy. Add tag with correct language key."));
+        assertSame(1, errors.size());
+        assertEquals("Missing name:*=Italy. Add tag with correct language key.", errors.get(0).getDescription());
         errors = test("node name=\"Italia - Italien - Italy\" name:it=Italia name:de=Italien name:en=Italy");
-        assertThat(errors.size(), is(0));
+        assertSame(0, errors.size());
     }
 }
diff --git a/test/unit/org/openstreetmap/josm/data/validation/tests/OpeningHourTestTest.java b/test/unit/org/openstreetmap/josm/data/validation/tests/OpeningHourTestTest.java
index cb4ddab..e1f64f7 100644
--- a/test/unit/org/openstreetmap/josm/data/validation/tests/OpeningHourTestTest.java
+++ b/test/unit/org/openstreetmap/josm/data/validation/tests/OpeningHourTestTest.java
@@ -5,7 +5,9 @@ import static org.CustomMatchers.hasSize;
 import static org.CustomMatchers.isEmpty;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.not;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
 
 import java.util.Arrays;
 import java.util.Collection;
@@ -49,11 +51,22 @@ public class OpeningHourTestTest {
         // frequently used tags according to https://taginfo.openstreetmap.org/keys/opening_hours#values
         assertThat(OPENING_HOUR_TEST.checkOpeningHourSyntax(key, "24/7"), isEmpty());
         assertThat(OPENING_HOUR_TEST.checkOpeningHourSyntax(key, "Mo-Fr 08:30-20:00"), isEmpty());
+        assertThat(OPENING_HOUR_TEST.checkOpeningHourSyntax(key, "Mo-Fr sunrise-sunset"), isEmpty());
         assertThat(OPENING_HOUR_TEST.checkOpeningHourSyntax(key, "09:00-21:00"), isEmpty());
         assertThat(OPENING_HOUR_TEST.checkOpeningHourSyntax(key, "Su-Th sunset-24:00,04:00-sunrise; Fr-Sa sunset-sunrise"), isEmpty());
         assertThat(OPENING_HOUR_TEST.checkOpeningHourSyntax(key, "Su-Th sunset-24:00, 04:00-sunrise; Fr-Sa sunset-sunrise"), hasSize(1));
-        assertThat(OPENING_HOUR_TEST.checkOpeningHourSyntax(key, "Su-Th sunset-24:00, 04:00-sunrise; Fr-Sa sunset-sunrise").get(0).getSeverity(), is(Severity.OTHER));
-        assertThat(OPENING_HOUR_TEST.checkOpeningHourSyntax(key, "Su-Th sunset-24:00, 04:00-sunrise; Fr-Sa sunset-sunrise").get(0).getPrettifiedValue(), is("Su-Th sunset-24:00,04:00-sunrise; Fr-Sa sunset-sunrise"));
+        assertThat(OPENING_HOUR_TEST.checkOpeningHourSyntax(key, "Su-Th sunset-24:00, 04:00-sunrise; Fr-Sa sunset-sunrise")
+                .get(0).getSeverity(), is(Severity.OTHER));
+        assertThat(OPENING_HOUR_TEST.checkOpeningHourSyntax(key, "Su-Th sunset-24:00, 04:00-sunrise; Fr-Sa sunset-sunrise")
+                .get(0).getPrettifiedValue(), is("Su-Th sunset-24:00,04:00-sunrise; Fr-Sa sunset-sunrise"));
+    }
+
+    @Test
+    public void testI18n() throws Exception {
+        assertTrue(OPENING_HOUR_TEST.checkOpeningHourSyntax("opening_hours", ".", OpeningHourTest.CheckMode.POINTS_IN_TIME, false, "de")
+                .get(0).toString().contains("Unerwartetes Zeichen"));
+        assertFalse(OPENING_HOUR_TEST.checkOpeningHourSyntax("opening_hours", ".", OpeningHourTest.CheckMode.POINTS_IN_TIME, false, "en")
+                .get(0).toString().contains("Unerwartetes Zeichen"));
     }
 
     /**
@@ -66,7 +79,8 @@ public class OpeningHourTestTest {
         assertThat(errors, hasSize(2));
         assertThat(errors.get(0).getMessage(), is(key + " - Mo-Tue <--- (Please use the abbreviation \"Tu\" for \"tue\".)"));
         assertThat(errors.get(0).getSeverity(), is(Severity.WARNING));
-        assertThat(errors.get(1).getMessage(), is(key + " - Mo-Tue <--- (This rule is not very explicit because there is no time selector being used."+
+        assertThat(errors.get(1).getMessage(), is(key +
+                " - Mo-Tue <--- (This rule is not very explicit because there is no time selector being used."+
                 " Please add a time selector to this rule or use a comment to make it more explicit.)"));
         assertThat(errors.get(1).getSeverity(), is(Severity.WARNING));
     }
@@ -107,7 +121,8 @@ public class OpeningHourTestTest {
                 is(key + " - ba <--- (Unexpected token: \"b\" Invalid/unsupported syntax.)"));
         assertThat(OPENING_HOUR_TEST.checkOpeningHourSyntax(key, "5.00 p.m-11.00 p.m"), hasSize(1));
         assertThat(OPENING_HOUR_TEST.checkOpeningHourSyntax(key, "5.00 p.m-11.00 p.m").get(0).getMessage(),
-                is(key + " - 5.00 p <--- (hyphen (-) or open end (+) in time range expected. For working with points in time, the mode for opening_hours.js has to be altered. Maybe wrong tag?)"));
+                is(key + " - 5.00 p <--- (hyphen (-) or open end (+) in time range expected. "
+                       + "For working with points in time, the mode for opening_hours.js has to be altered. Maybe wrong tag?)"));
     }
 
     /**
@@ -138,7 +153,8 @@ public class OpeningHourTestTest {
         final String key = "opening_hours";
         assertThat(OPENING_HOUR_TEST.checkOpeningHourSyntax(key, "Mo,Tu 04-17").get(0).getSeverity(), is(Severity.WARNING));
         assertThat(OPENING_HOUR_TEST.checkOpeningHourSyntax(key, "Mo,Tu 04-17").get(0).getMessage(),
-                is(key + " - Mo,Tu 04-17 <--- (Time range without minutes specified. Not very explicit! Please use this syntax instead \"04:00-17:00\".)"));
+                is(key + " - Mo,Tu 04-17 <--- (Time range without minutes specified. "
+                       + "Not very explicit! Please use this syntax instead \"04:00-17:00\".)"));
         assertThat(OPENING_HOUR_TEST.checkOpeningHourSyntax(key, "Mo,Tu 04-17").get(0).getPrettifiedValue(), is("Mo,Tu 04:00-17:00"));
     }
 
@@ -153,10 +169,14 @@ public class OpeningHourTestTest {
         assertThat(OPENING_HOUR_TEST.checkOpeningHourSyntax(key, "automatic", OpeningHourTest.CheckMode.BOTH), not(isEmpty()));
         assertThat(OPENING_HOUR_TEST.checkOpeningHourSyntax(key, "Mo-Sa 09:00-18:00", OpeningHourTest.CheckMode.BOTH), isEmpty());
         assertThat(OPENING_HOUR_TEST.checkOpeningHourSyntax(key, "Su 09:30; We 19:30", OpeningHourTest.CheckMode.BOTH), isEmpty());
-        assertThat(OPENING_HOUR_TEST.checkOpeningHourSyntax(key, "Mo-Fr 00:00-00:30,04:00-00:30; Sa,Su,PH 00:00-24:00", OpeningHourTest.CheckMode.BOTH), isEmpty());
-        assertThat(OPENING_HOUR_TEST.checkOpeningHourSyntax(key, "Mo-Fr 0:00-0:30,4:00-00:30; Sa,Su,PH 0:00-24:00", OpeningHourTest.CheckMode.BOTH), hasSize(1));
-        assertThat(OPENING_HOUR_TEST.checkOpeningHourSyntax(key, "Mo-Fr 0:00-0:30,4:00-00:30; Sa,Su,PH 0:00-24:00", OpeningHourTest.CheckMode.BOTH).get(0).getPrettifiedValue(), is("Mo-Fr 00:00-00:30,04:00-00:30; Sa,Su,PH 00:00-24:00"));
-        assertThat(OPENING_HOUR_TEST.checkOpeningHourSyntax(key, "Mo-Fr 0:00-0:30,4:00-00:30; Sa,Su,PH 0:00-24:00", OpeningHourTest.CheckMode.BOTH).get(0).getPrettifiedValue(), is("Mo-Fr 00:00-00:30,04:00-00:30; Sa,Su,PH 00:00-24:00"));
+        assertThat(OPENING_HOUR_TEST.checkOpeningHourSyntax(key, "Mo-Fr 00:00-00:30,04:00-00:30; Sa,Su,PH 00:00-24:00",
+                OpeningHourTest.CheckMode.BOTH), isEmpty());
+        assertThat(OPENING_HOUR_TEST.checkOpeningHourSyntax(key, "Mo-Fr 0:00-0:30,4:00-00:30; Sa,Su,PH 0:00-24:00",
+                OpeningHourTest.CheckMode.BOTH), hasSize(1));
+        assertThat(OPENING_HOUR_TEST.checkOpeningHourSyntax(key, "Mo-Fr 0:00-0:30,4:00-00:30; Sa,Su,PH 0:00-24:00",
+                OpeningHourTest.CheckMode.BOTH).get(0).getPrettifiedValue(), is("Mo-Fr 00:00-00:30,04:00-00:30; Sa,Su,PH 00:00-24:00"));
+        assertThat(OPENING_HOUR_TEST.checkOpeningHourSyntax(key, "Mo-Fr 0:00-0:30,4:00-00:30; Sa,Su,PH 0:00-24:00",
+                OpeningHourTest.CheckMode.BOTH).get(0).getPrettifiedValue(), is("Mo-Fr 00:00-00:30,04:00-00:30; Sa,Su,PH 00:00-24:00"));
     }
 
     /**
@@ -169,10 +189,14 @@ public class OpeningHourTestTest {
         assertThat(OPENING_HOUR_TEST.checkOpeningHourSyntax(key, "Mo-Sa 09:00", OpeningHourTest.CheckMode.BOTH), isEmpty());
         assertThat(OPENING_HOUR_TEST.checkOpeningHourSyntax(key, "fixme", OpeningHourTest.CheckMode.BOTH), not(isEmpty()));
         assertThat(OPENING_HOUR_TEST.checkOpeningHourSyntax(key, "daily", OpeningHourTest.CheckMode.BOTH), not(isEmpty()));
-        assertThat(OPENING_HOUR_TEST.checkOpeningHourSyntax(key, "Mo-Fr 13:30,17:45,19:00; Sa 15:00; Su 11:00", OpeningHourTest.CheckMode.BOTH), isEmpty());
-        assertThat(OPENING_HOUR_TEST.checkOpeningHourSyntax(key, "Mo-Fr 13:30, 17:45, 19:00; Sa 15:00; Su 11:00", OpeningHourTest.CheckMode.BOTH), hasSize(1));
-        assertThat(OPENING_HOUR_TEST.checkOpeningHourSyntax(key, "Mo-Fr 13:30, 17:45, 19:00; Sa 15:00; Su 11:00", OpeningHourTest.CheckMode.BOTH).get(0).getSeverity(), is(Severity.OTHER));
-        assertThat(OPENING_HOUR_TEST.checkOpeningHourSyntax(key, "Mo-Fr 13:30, 17:45, 19:00; Sa 15:00; Su 11:00", OpeningHourTest.CheckMode.BOTH).get(0).getPrettifiedValue(), is("Mo-Fr 13:30,17:45,19:00; Sa 15:00; Su 11:00"));
+        assertThat(OPENING_HOUR_TEST.checkOpeningHourSyntax(key, "Mo-Fr 13:30,17:45,19:00; Sa 15:00; Su 11:00",
+                OpeningHourTest.CheckMode.BOTH), isEmpty());
+        assertThat(OPENING_HOUR_TEST.checkOpeningHourSyntax(key, "Mo-Fr 13:30, 17:45, 19:00; Sa 15:00; Su 11:00",
+                OpeningHourTest.CheckMode.BOTH), hasSize(1));
+        assertThat(OPENING_HOUR_TEST.checkOpeningHourSyntax(key, "Mo-Fr 13:30, 17:45, 19:00; Sa 15:00; Su 11:00",
+                OpeningHourTest.CheckMode.BOTH).get(0).getSeverity(), is(Severity.OTHER));
+        assertThat(OPENING_HOUR_TEST.checkOpeningHourSyntax(key, "Mo-Fr 13:30, 17:45, 19:00; Sa 15:00; Su 11:00",
+                OpeningHourTest.CheckMode.BOTH).get(0).getPrettifiedValue(), is("Mo-Fr 13:30,17:45,19:00; Sa 15:00; Su 11:00"));
     }
 
     /**
diff --git a/test/unit/org/openstreetmap/josm/data/validation/tests/TagCheckerTest.java b/test/unit/org/openstreetmap/josm/data/validation/tests/TagCheckerTest.java
new file mode 100644
index 0000000..3e073e9
--- /dev/null
+++ b/test/unit/org/openstreetmap/josm/data/validation/tests/TagCheckerTest.java
@@ -0,0 +1,68 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.validation.tests;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+import java.io.IOException;
+import java.util.List;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.openstreetmap.josm.JOSMFixture;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.OsmUtils;
+import org.openstreetmap.josm.data.validation.TestError;
+import org.openstreetmap.josm.gui.tagging.TaggingPresets;
+
+public class TagCheckerTest {
+    /**
+     * Setup test.
+     */
+    @BeforeClass
+    public static void setUp() {
+        JOSMFixture.createUnitTestFixture().init();
+        TaggingPresets.readFromPreferences();
+    }
+
+    List<TestError> test(OsmPrimitive primitive) throws IOException {
+        final TagChecker checker = new TagChecker();
+        checker.initialize();
+        checker.startTest(null);
+        checker.check(primitive);
+        return checker.getErrors();
+    }
+
+    @Test
+    public void testInvalidKey() throws Exception {
+        final List<TestError> errors = test(OsmUtils.createPrimitive("node Name=Main"));
+        assertThat(errors.size(), is(1));
+        assertThat(errors.get(0).getMessage(), is("Misspelled property key"));
+        assertThat(errors.get(0).getDescription(), is("Key 'Name' looks like 'name'."));
+    }
+
+    @Test
+    public void testMisspelledKey() throws Exception {
+        final List<TestError> errors = test(OsmUtils.createPrimitive("node landuse;=forest"));
+        assertThat(errors.size(), is(1));
+        assertThat(errors.get(0).getMessage(), is("Misspelled property key"));
+        assertThat(errors.get(0).getDescription(), is("Key 'landuse;' looks like 'landuse'."));
+    }
+
+    @Test
+    public void testTranslatedNameKey() throws Exception {
+        final List<TestError> errors = test(OsmUtils.createPrimitive("node namez=Baz"));
+        assertThat(errors.size(), is(1));
+        assertThat(errors.get(0).getMessage(), is("Presets do not contain property key"));
+        assertThat(errors.get(0).getDescription(), is("Key 'namez' not in presets."));
+    }
+
+    @Test
+    public void testMisspelledTag() throws Exception {
+        final List<TestError> errors = test(OsmUtils.createPrimitive("node landuse=forrest"));
+        assertThat(errors.size(), is(1));
+        assertThat(errors.get(0).getMessage(), is("Presets do not contain property value"));
+        assertThat(errors.get(0).getDescription(), is("Value 'forrest' for key 'landuse' not in presets."));
+    }
+
+}
diff --git a/test/unit/org/openstreetmap/josm/gui/DefaultNameFormatterTest.java b/test/unit/org/openstreetmap/josm/gui/DefaultNameFormatterTest.java
index 8e21874..7b514d4 100644
--- a/test/unit/org/openstreetmap/josm/gui/DefaultNameFormatterTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/DefaultNameFormatterTest.java
@@ -2,8 +2,8 @@
 package org.openstreetmap.josm.gui;
 
 import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
 
 import java.io.FileInputStream;
 import java.io.IOException;
@@ -43,9 +43,9 @@ public class DefaultNameFormatterTest {
 
     /**
      * Non-regression test for ticket <a href="https://josm.openstreetmap.de/ticket/9632">#9632</a>.
-     * @throws IllegalDataException
-     * @throws IOException
-     * @throws SAXException
+     * @throws IllegalDataException if an error was found while parsing the data from the source
+     * @throws IOException if any I/O error occurs
+     * @throws SAXException if any XML error occurs
      */
     @Test
     public void testTicket9632() throws IllegalDataException, IOException, SAXException {
@@ -62,17 +62,20 @@ public class DefaultNameFormatterTest {
             Relation p2 = (Relation) ds.getPrimitiveById(550315, OsmPrimitiveType.RELATION);
             Relation p3 = (Relation) ds.getPrimitiveById(167042, OsmPrimitiveType.RELATION);
 
-            System.out.println("p1: "+DefaultNameFormatter.getInstance().format(p1)+" - "+p1); // route_master ("Bus 453", 6 members)
-            System.out.println("p2: "+DefaultNameFormatter.getInstance().format(p2)+" - "+p2); // TMC ("A 6 Kaiserslautern - Mannheim [negative]", 123 members)
-            System.out.println("p3: "+DefaultNameFormatter.getInstance().format(p3)+" - "+p3); // route(lcn Sal  Salier-Radweg(412 members)
+            // route_master ("Bus 453", 6 members)
+            System.out.println("p1: "+DefaultNameFormatter.getInstance().format(p1)+" - "+p1);
+            // TMC ("A 6 Kaiserslautern - Mannheim [negative]", 123 members)
+            System.out.println("p2: "+DefaultNameFormatter.getInstance().format(p2)+" - "+p2);
+            // route(lcn Sal  Salier-Radweg(412 members)
+            System.out.println("p3: "+DefaultNameFormatter.getInstance().format(p3)+" - "+p3);
 
-            assertTrue(comparator.compare(p1, p2) == -1); // p1 < p2
-            assertTrue(comparator.compare(p2, p1) ==  1); // p2 > p1
+            assertSame(comparator.compare(p1, p2), -1); // p1 < p2
+            assertSame(comparator.compare(p2, p1),  1); // p2 > p1
 
-            assertTrue(comparator.compare(p1, p3) == -1); // p1 < p3
-            assertTrue(comparator.compare(p3, p1) ==  1); // p3 > p1
-            assertTrue(comparator.compare(p2, p3) ==  1); // p2 > p3
-            assertTrue(comparator.compare(p3, p2) == -1); // p3 < p2
+            assertSame(comparator.compare(p1, p3), -1); // p1 < p3
+            assertSame(comparator.compare(p3, p1),  1); // p3 > p1
+            assertSame(comparator.compare(p2, p3),  1); // p2 > p3
+            assertSame(comparator.compare(p3, p2), -1); // p3 < p2
 
             Relation[] relations = new ArrayList<>(ds.getRelations()).toArray(new Relation[0]);
 
@@ -90,8 +93,10 @@ public class DefaultNameFormatterTest {
         assertThat(getFormattedRelationName("type=route route=tram ref=123"), is("route (\"123\", 0 members)"));
         assertThat(getFormattedRelationName("type=multipolygon building=yes"), is("multipolygon (\"building\", 0 members)"));
         assertThat(getFormattedRelationName("type=multipolygon building=yes ref=123"), is("multipolygon (\"123\", 0 members)"));
-        assertThat(getFormattedRelationName("type=multipolygon building=yes addr:housenumber=123"), is("multipolygon (\"building\", 0 members)"));
-        assertThat(getFormattedRelationName("type=multipolygon building=residential addr:housenumber=123"), is("multipolygon (\"residential\", 0 members)"));
+        assertThat(getFormattedRelationName("type=multipolygon building=yes addr:housenumber=123"),
+                is("multipolygon (\"building\", 0 members)"));
+        assertThat(getFormattedRelationName("type=multipolygon building=residential addr:housenumber=123"),
+                is("multipolygon (\"residential\", 0 members)"));
     }
 
     /**
@@ -101,7 +106,8 @@ public class DefaultNameFormatterTest {
     public void testWayName() {
         assertThat(getFormattedWayName("building=yes"), is("building (0 nodes)"));
         assertThat(getFormattedWayName("building=yes addr:housenumber=123"), is("House number 123 (0 nodes)"));
-        assertThat(getFormattedWayName("building=yes addr:housenumber=123 addr:street=FooStreet"), is("House number 123 at FooStreet (0 nodes)"));
+        assertThat(getFormattedWayName("building=yes addr:housenumber=123 addr:street=FooStreet"),
+                is("House number 123 at FooStreet (0 nodes)"));
         assertThat(getFormattedWayName("building=yes addr:housenumber=123 addr:housename=FooName"), is("House FooName (0 nodes)"));
     }
 
diff --git a/test/unit/org/openstreetmap/josm/gui/JosmUserIdentityManagerTest.groovy b/test/unit/org/openstreetmap/josm/gui/JosmUserIdentityManagerTest.groovy
index 0ec6fbc..57de474 100644
--- a/test/unit/org/openstreetmap/josm/gui/JosmUserIdentityManagerTest.groovy
+++ b/test/unit/org/openstreetmap/josm/gui/JosmUserIdentityManagerTest.groovy
@@ -11,305 +11,305 @@ import org.openstreetmap.josm.data.osm.UserInfo
 
 class JosmUserIdentityManagerTest {
 
-	final shouldFail = new GroovyTestCase().&shouldFail
+    final shouldFail = new GroovyTestCase().&shouldFail
 
-	@BeforeClass
-	public static void initTestCase() {
-	    JOSMFixture.createUnitTestFixture().init()
-	}
+    @BeforeClass
+    public static void initTestCase() {
+        JOSMFixture.createUnitTestFixture().init()
+    }
 
-	@Test
-	public void test_SingletonAccess() {
+    @Test
+    public void test_SingletonAccess() {
 
-		JosmUserIdentityManager im = JosmUserIdentityManager.getInstance()
+        JosmUserIdentityManager im = JosmUserIdentityManager.getInstance()
 
-		// created ?
-		assert im != null
+        // created ?
+        assert im != null
 
-		// registered as listener ?
-		assert Main.pref. at listeners.contains(im)
+        // registered as listener ?
+        assert Main.pref. at listeners.contains(im)
 
-		JosmUserIdentityManager im2 = JosmUserIdentityManager.getInstance()
+        JosmUserIdentityManager im2 = JosmUserIdentityManager.getInstance()
 
-		// only one instance
-		assert im == im2
-	}
+        // only one instance
+        assert im == im2
+    }
 
-	@Test
-	public void test_setAnonymouse() {
-		JosmUserIdentityManager im = JosmUserIdentityManager.getInstance()
+    @Test
+    public void test_setAnonymouse() {
+        JosmUserIdentityManager im = JosmUserIdentityManager.getInstance()
 
-		im.setPartiallyIdentified "test"
-		im.setAnonymous()
+        im.setPartiallyIdentified "test"
+        im.setAnonymous()
 
-		assert im.isAnonymous()
-		assert ! im.isPartiallyIdentified()
-		assert ! im.isFullyIdentified()
+        assert im.isAnonymous()
+        assert ! im.isPartiallyIdentified()
+        assert ! im.isFullyIdentified()
 
-		assert im.getUserId() == 0
-		assert im.getUserName() == null
-		assert im.getUserInfo() == null
-	}
+        assert im.getUserId() == 0
+        assert im.getUserName() == null
+        assert im.getUserInfo() == null
+    }
 
-	@Test
-	public void test_setPartiallyIdentified() {
-		JosmUserIdentityManager im = JosmUserIdentityManager.getInstance()
+    @Test
+    public void test_setPartiallyIdentified() {
+        JosmUserIdentityManager im = JosmUserIdentityManager.getInstance()
 
-		im.setPartiallyIdentified "test"
+        im.setPartiallyIdentified "test"
 
-		shouldFail(IllegalArgumentException) {
-		    im.setPartiallyIdentified null
-		}
+        shouldFail(IllegalArgumentException) {
+            im.setPartiallyIdentified null
+        }
 
-		shouldFail(IllegalArgumentException) {
-			im.setPartiallyIdentified ""
-		}
+        shouldFail(IllegalArgumentException) {
+            im.setPartiallyIdentified ""
+        }
 
-		shouldFail(IllegalArgumentException) {
-			im.setPartiallyIdentified "  \t  "
-		}
+        shouldFail(IllegalArgumentException) {
+            im.setPartiallyIdentified "  \t  "
+        }
 
-		im.setPartiallyIdentified "test"
+        im.setPartiallyIdentified "test"
 
-		assert ! im.isAnonymous()
-		assert im.isPartiallyIdentified()
-		assert ! im.isFullyIdentified()
+        assert ! im.isAnonymous()
+        assert im.isPartiallyIdentified()
+        assert ! im.isFullyIdentified()
 
-		assert im.getUserId() == 0
-		assert im.getUserName() == "test"
-		assert im.getUserInfo() == null
-	}
+        assert im.getUserId() == 0
+        assert im.getUserName() == "test"
+        assert im.getUserInfo() == null
+    }
 
 
-	@Test
-	public void test_setFullyIdentified() {
-		JosmUserIdentityManager im = JosmUserIdentityManager.getInstance()
+    @Test
+    public void test_setFullyIdentified() {
+        JosmUserIdentityManager im = JosmUserIdentityManager.getInstance()
 
-		UserInfo userInfo = new UserInfo(id: 1, description: "a description")
+        UserInfo userInfo = new UserInfo(id: 1, description: "a description")
 
-		im.setFullyIdentified "test", userInfo
+        im.setFullyIdentified "test", userInfo
 
-		shouldFail(IllegalArgumentException) {
-			im.setFullyIdentified null, userInfo
-		}
-		shouldFail(IllegalArgumentException) {
-			im.setFullyIdentified "", userInfo
-		}
-		shouldFail(IllegalArgumentException) {
-			im.setFullyIdentified " \t ", userInfo
-		}
-		shouldFail(IllegalArgumentException) {
-			im.setFullyIdentified "test", null
-		}
+        shouldFail(IllegalArgumentException) {
+            im.setFullyIdentified null, userInfo
+        }
+        shouldFail(IllegalArgumentException) {
+            im.setFullyIdentified "", userInfo
+        }
+        shouldFail(IllegalArgumentException) {
+            im.setFullyIdentified " \t ", userInfo
+        }
+        shouldFail(IllegalArgumentException) {
+            im.setFullyIdentified "test", null
+        }
 
-		im.setFullyIdentified "test", userInfo
+        im.setFullyIdentified "test", userInfo
 
-		assert ! im.isAnonymous()
-		assert ! im.isPartiallyIdentified()
-		assert im.isFullyIdentified()
+        assert ! im.isAnonymous()
+        assert ! im.isPartiallyIdentified()
+        assert im.isFullyIdentified()
 
-		assert im.getUserId() == 1
-		assert im.getUserName() == "test"
-		assert im.getUserInfo() == userInfo
-	}
+        assert im.getUserId() == 1
+        assert im.getUserName() == "test"
+        assert im.getUserInfo() == userInfo
+    }
 
-	/**
-	 * Preferences include neither an url nor a user name => we have
-	 * an anonymous user
-	 */
-	@Test
-	public void initFromPreferences_1() {
-		JosmUserIdentityManager im = JosmUserIdentityManager.getInstance()
+    /**
+     * Preferences include neither an url nor a user name => we have
+     * an anonymous user
+     */
+    @Test
+    public void initFromPreferences_1() {
+        JosmUserIdentityManager im = JosmUserIdentityManager.getInstance()
 
-		// reset it
-		im. at userName = null
-		im. at userInfo = null
+        // reset it
+        im. at userName = null
+        im. at userInfo = null
 
-		Main.pref.put "osm-server.url", null
-		Main.pref.put "osm-server.username", null
+        Main.pref.put "osm-server.url", null
+        Main.pref.put "osm-server.username", null
 
-		im.initFromPreferences()
+        im.initFromPreferences()
 
-		assert im.isAnonymous()
-	}
+        assert im.isAnonymous()
+    }
 
-	/**
-	 * Preferences include neither an url nor a user name => we have
-	 * an annoymous user
-	 */
-	@Test
-	public void initFromPreferences_2() {
-		JosmUserIdentityManager im = JosmUserIdentityManager.getInstance()
+    /**
+     * Preferences include neither an url nor a user name => we have
+     * an annoymous user
+     */
+    @Test
+    public void initFromPreferences_2() {
+        JosmUserIdentityManager im = JosmUserIdentityManager.getInstance()
 
-		// reset it
-		im. at userName = null
-		im. at userInfo = null
+        // reset it
+        im. at userName = null
+        im. at userInfo = null
 
-		// for this test we disable the listener
-		Main.pref.removePreferenceChangeListener im
+        // for this test we disable the listener
+        Main.pref.removePreferenceChangeListener im
 
-		Main.pref.put "osm-server.url", "http://api.openstreetmap.org"
-		Main.pref.put "osm-server.username", null
+        Main.pref.put "osm-server.url", "http://api.openstreetmap.org"
+        Main.pref.put "osm-server.username", null
 
-		im.initFromPreferences()
+        im.initFromPreferences()
 
-		assert im.isAnonymous()
-	}
+        assert im.isAnonymous()
+    }
 
-	/**
-	 * Preferences include an user name => we have a partially identified user
-	 */
-	@Test
-	public void initFromPreferences_3() {
-		JosmUserIdentityManager im = JosmUserIdentityManager.getInstance()
+    /**
+     * Preferences include an user name => we have a partially identified user
+     */
+    @Test
+    public void initFromPreferences_3() {
+        JosmUserIdentityManager im = JosmUserIdentityManager.getInstance()
 
         // for this test we disable the listener
-		Main.pref.removePreferenceChangeListener im
+        Main.pref.removePreferenceChangeListener im
 
-		// reset it
-		im. at userName = null
-		im. at userInfo = null
+        // reset it
+        im. at userName = null
+        im. at userInfo = null
 
-		Main.pref.put "osm-server.url", "http://api.openstreetmap.org"
-		Main.pref.put "osm-server.username", "test"
+        Main.pref.put "osm-server.url", "http://api.openstreetmap.org"
+        Main.pref.put "osm-server.username", "test"
 
-		im.initFromPreferences()
+        im.initFromPreferences()
 
-		assert im.isPartiallyIdentified()
-	}
+        assert im.isPartiallyIdentified()
+    }
 
-	/**
-	 * Preferences include an user name which is different from the current
-	 * user name and we are currently fully identifed => josm user becomes
-	 * partially identified
-	 */
-	@Test
-	public void initFromPreferences_4() {
-		JosmUserIdentityManager im = JosmUserIdentityManager.getInstance()
+    /**
+     * Preferences include an user name which is different from the current
+     * user name and we are currently fully identifed => josm user becomes
+     * partially identified
+     */
+    @Test
+    public void initFromPreferences_4() {
+        JosmUserIdentityManager im = JosmUserIdentityManager.getInstance()
 
         // for this test we disable the listener
-		Main.pref.removePreferenceChangeListener im
+        Main.pref.removePreferenceChangeListener im
 
-		im.setFullyIdentified "test1", new UserInfo(id: 1)
+        im.setFullyIdentified "test1", new UserInfo(id: 1)
 
-		Main.pref.put "osm-server.url", "http://api.openstreetmap.org"
-		Main.pref.put "osm-server.username", "test2"
+        Main.pref.put "osm-server.url", "http://api.openstreetmap.org"
+        Main.pref.put "osm-server.username", "test2"
 
-		im.initFromPreferences()
+        im.initFromPreferences()
 
-		assert im.isPartiallyIdentified()
-	}
+        assert im.isPartiallyIdentified()
+    }
 
-	/**
-	 * Preferences include an user name which is the same as the current
-	 * user name and we are currently fully identifed => josm user remains
-	 * fully identified
-	 */
-	@Test
-	public void initFromPreferences_5() {
-		JosmUserIdentityManager im = JosmUserIdentityManager.getInstance()
+    /**
+     * Preferences include an user name which is the same as the current
+     * user name and we are currently fully identifed => josm user remains
+     * fully identified
+     */
+    @Test
+    public void initFromPreferences_5() {
+        JosmUserIdentityManager im = JosmUserIdentityManager.getInstance()
 
         // for this test we disable the listener
-		Main.pref.removePreferenceChangeListener im
+        Main.pref.removePreferenceChangeListener im
 
-		im.setFullyIdentified "test1", new UserInfo(id: 1)
+        im.setFullyIdentified "test1", new UserInfo(id: 1)
 
-		Main.pref.put "osm-server.url", "http://api.openstreetmap.org"
-		Main.pref.put "osm-server.username", "test1"
+        Main.pref.put "osm-server.url", "http://api.openstreetmap.org"
+        Main.pref.put "osm-server.username", "test1"
 
-		im.initFromPreferences()
+        im.initFromPreferences()
 
-		assert im.isFullyIdentified()
-	}
+        assert im.isFullyIdentified()
+    }
 
-	@Test
-	public void apiUrlChanged() {
-		JosmUserIdentityManager im = JosmUserIdentityManager.getInstance()
+    @Test
+    public void apiUrlChanged() {
+        JosmUserIdentityManager im = JosmUserIdentityManager.getInstance()
 
-		// make sure im is a preference change listener
-		Main.pref.addPreferenceChangeListener im
+        // make sure im is a preference change listener
+        Main.pref.addPreferenceChangeListener im
 
-		// reset it
-		im. at userName = null
-		im. at userInfo = null
+        // reset it
+        im. at userName = null
+        im. at userInfo = null
 
-		Main.pref.put "osm-server.url", "http://api.openstreetmap.org"
-		assert im.isAnonymous()
+        Main.pref.put "osm-server.url", "http://api.openstreetmap.org"
+        assert im.isAnonymous()
 
          Main.pref.put "osm-server.url", null
          assert im.isAnonymous()
 
-		// reset it
-		im. at userName = "test"
-		im. at userInfo = null
+        // reset it
+        im. at userName = "test"
+        im. at userInfo = null
 
-		Main.pref.put "osm-server.url", "http://api.openstreetmap.org"
-		assert im.isPartiallyIdentified()
-		assert im.getUserName() == "test"
+        Main.pref.put "osm-server.url", "http://api.openstreetmap.org"
+        assert im.isPartiallyIdentified()
+        assert im.getUserName() == "test"
 
-		Main.pref.put "osm-server.url", null
-		assert im.isAnonymous()
+        Main.pref.put "osm-server.url", null
+        assert im.isAnonymous()
 
-		// reset it
-		im. at userName = "test"
-		im. at userInfo = new UserInfo(id:1)
+        // reset it
+        im. at userName = "test"
+        im. at userInfo = new UserInfo(id:1)
 
-		Main.pref.put "osm-server.url", "http://api.openstreetmap.org"
-		assert im.isPartiallyIdentified()
-		assert im.getUserName() == "test"
+        Main.pref.put "osm-server.url", "http://api.openstreetmap.org"
+        assert im.isPartiallyIdentified()
+        assert im.getUserName() == "test"
 
-		// reset it
-		im. at userName = "test"
-		im. at userInfo = new UserInfo(id:1)
+        // reset it
+        im. at userName = "test"
+        im. at userInfo = new UserInfo(id:1)
 
 
-		Main.pref.put "osm-server.url", null
-		assert im.isAnonymous()
-	}
+        Main.pref.put "osm-server.url", null
+        assert im.isAnonymous()
+    }
 
-	@Test
-	public void userNameChanged() {
-		JosmUserIdentityManager im = JosmUserIdentityManager.getInstance()
+    @Test
+    public void userNameChanged() {
+        JosmUserIdentityManager im = JosmUserIdentityManager.getInstance()
 
-		// make sure im is a preference change listener
-		Main.pref.addPreferenceChangeListener im
+        // make sure im is a preference change listener
+        Main.pref.addPreferenceChangeListener im
 
-		// reset it
-		im. at userName = null
-		im. at userInfo = null
+        // reset it
+        im. at userName = null
+        im. at userInfo = null
 
-		Main.pref.put "osm-server.username", "test"
-		assert im.isPartiallyIdentified()
-		assert im.getUserName() == "test"
+        Main.pref.put "osm-server.username", "test"
+        assert im.isPartiallyIdentified()
+        assert im.getUserName() == "test"
 
-		Main.pref.put "osm-server.username", null
-		assert im.isAnonymous()
+        Main.pref.put "osm-server.username", null
+        assert im.isAnonymous()
 
-		// reset it
-		im. at userName = "test1"
-		im. at userInfo = null
+        // reset it
+        im. at userName = "test1"
+        im. at userInfo = null
 
-		Main.pref.put "osm-server.username", "test2"
-		assert im.isPartiallyIdentified()
-		assert im.getUserName() == "test2"
+        Main.pref.put "osm-server.username", "test2"
+        assert im.isPartiallyIdentified()
+        assert im.getUserName() == "test2"
 
-		Main.pref.put "osm-server.username", null
-		assert im.isAnonymous()
+        Main.pref.put "osm-server.username", null
+        assert im.isAnonymous()
 
-		// reset it
-		im. at userName = "test1"
-		im. at userInfo = new UserInfo(id:1)
+        // reset it
+        im. at userName = "test1"
+        im. at userInfo = new UserInfo(id:1)
 
-		Main.pref.put "osm-server.username", "test2"
-		assert im.isPartiallyIdentified()
-		assert im.getUserName() == "test2"
+        Main.pref.put "osm-server.username", "test2"
+        assert im.isPartiallyIdentified()
+        assert im.getUserName() == "test2"
 
-		// reset it
-		im. at userName = "test1"
-		im. at userInfo = new UserInfo(id:1)
+        // reset it
+        im. at userName = "test1"
+        im. at userInfo = new UserInfo(id:1)
 
 
-		Main.pref.put "osm-server.username", null
-		assert im.isAnonymous()
-	}
+        Main.pref.put "osm-server.username", null
+        assert im.isAnonymous()
+    }
 }
diff --git a/test/unit/org/openstreetmap/josm/gui/NavigatableComponentTest.java b/test/unit/org/openstreetmap/josm/gui/NavigatableComponentTest.java
new file mode 100644
index 0000000..c4f66ae
--- /dev/null
+++ b/test/unit/org/openstreetmap/josm/gui/NavigatableComponentTest.java
@@ -0,0 +1,187 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertThat;
+
+import java.awt.Rectangle;
+import java.awt.geom.Point2D;
+
+import org.CustomMatchers;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.openstreetmap.josm.JOSMFixture;
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.ProjectionBounds;
+import org.openstreetmap.josm.data.coor.EastNorth;
+import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.gui.util.GuiHelper;
+
+/**
+ * Some tests for the {@link NavigatableComponent} class.
+ * @author Michael Zangl
+ *
+ */
+public class NavigatableComponentTest {
+
+    private static final int HEIGHT = 200;
+    private static final int WIDTH = 300;
+    private NavigatableComponent component;
+
+    /**
+     * Setup test.
+     */
+    @BeforeClass
+    public static void setUp() {
+        JOSMFixture.createUnitTestFixture().init();
+    }
+
+    /**
+     * Create a new, fresh {@link NavigatableComponent}
+     */
+    @Before
+    public void setup() {
+        component = new NavigatableComponent();
+        component.setBounds(new Rectangle(WIDTH, HEIGHT));
+        // wait for the event to be propagated.
+        GuiHelper.runInEDTAndWait(new Runnable() {
+            @Override
+            public void run() {
+            }
+        });
+    }
+
+    /**
+     * Test if the default scale was set correctly.
+     */
+    @Test
+    public void testDefaultScale() {
+        assertEquals(Main.getProjection().getDefaultZoomInPPD(), component.getScale(), 0.00001);
+    }
+
+    /**
+     * Tests {@link NavigatableComponent#getPoint2D(EastNorth)}
+     */
+    @Test
+    public void testPoint2DEastNorth() {
+        assertThat(component.getPoint2D((EastNorth) null), CustomMatchers.is(new Point2D.Double()));
+        Point2D shouldBeCenter = component.getPoint2D(component.getCenter());
+        assertThat(shouldBeCenter, CustomMatchers.is(new Point2D.Double(WIDTH / 2, HEIGHT / 2)));
+
+        EastNorth testPoint = component.getCenter().add(300 * component.getScale(), 200 * component.getScale());
+        Point2D testPointConverted = component.getPoint2D(testPoint);
+        assertThat(testPointConverted, CustomMatchers.is(new Point2D.Double(WIDTH / 2 + 300, HEIGHT / 2 - 200)));
+    }
+
+    /**
+     * TODO: Implement this test.
+     */
+    @Test
+    public void testPoint2DLatLon() {
+        assertThat(component.getPoint2D((LatLon) null), CustomMatchers.is(new Point2D.Double()));
+        // TODO: Really test this.
+    }
+
+    /**
+     * Tests {@link NavigatableComponent#zoomTo(LatLon)}
+     */
+    @Test
+    public void testZoomToLatLon() {
+        component.zoomTo(new LatLon(10, 10));
+        Point2D shouldBeCenter = component.getPoint2D(new LatLon(10, 10));
+        assertThat(shouldBeCenter, CustomMatchers.is(new Point2D.Double(WIDTH / 2, HEIGHT / 2)));
+    }
+
+    /**
+     * Tests {@link NavigatableComponent#zoomToFactor(double)} and {@link NavigatableComponent#zoomToFactor(EastNorth, double)}
+     */
+    @Test
+    public void testZoomToFactor() {
+        EastNorth center = component.getCenter();
+        double initialScale = component.getScale();
+
+        // zoomToFactor(double)
+        component.zoomToFactor(0.5);
+        assertEquals(initialScale / 2, component.getScale(), 0.00000001);
+        assertThat(component.getCenter(), is(center));
+        component.zoomToFactor(2);
+        assertEquals(initialScale, component.getScale(), 0.00000001);
+        assertThat(component.getCenter(), is(center));
+
+        // zoomToFactor(EastNorth, double)
+        EastNorth newCenter = new EastNorth(10, 20);
+        component.zoomToFactor(newCenter, 0.5);
+        assertEquals(initialScale / 2, component.getScale(), 0.00000001);
+        assertThat(component.getCenter(), is(newCenter));
+        component.zoomToFactor(newCenter, 2);
+        assertEquals(initialScale, component.getScale(), 0.00000001);
+        assertThat(component.getCenter(), is(newCenter));
+    }
+
+    /**
+     * Tests {@link NavigatableComponent#getEastNorth(int, int)}
+     */
+    @Test
+    public void testGetEastNorth() {
+        EastNorth center = component.getCenter();
+        assertThat(component.getEastNorth(WIDTH / 2, HEIGHT / 2), CustomMatchers.is(center));
+
+        EastNorth testPoint = component.getCenter().add(WIDTH * component.getScale(), HEIGHT * component.getScale());
+        assertThat(component.getEastNorth(3 * WIDTH / 2, -HEIGHT / 2), CustomMatchers.is(testPoint));
+    }
+
+    /**
+     * Tests {@link NavigatableComponent#zoomToFactor(double, double, double)}
+     */
+    @Test
+    public void testZoomToFactorCenter() {
+        // zoomToFactor(double, double, double)
+        // assumes getEastNorth works as expected
+        EastNorth testPoint1 = component.getEastNorth(0, 0);
+        EastNorth testPoint2 = component.getEastNorth(200, 150);
+        double initialScale = component.getScale();
+
+        component.zoomToFactor(0, 0, 0.5);
+        assertEquals(initialScale / 2, component.getScale(), 0.00000001);
+        assertThat(component.getEastNorth(0, 0), CustomMatchers.is(testPoint1));
+        component.zoomToFactor(0, 0, 2);
+        assertEquals(initialScale, component.getScale(), 0.00000001);
+        assertThat(component.getEastNorth(0, 0), CustomMatchers.is(testPoint1));
+
+        component.zoomToFactor(200, 150, 0.5);
+        assertEquals(initialScale / 2, component.getScale(), 0.00000001);
+        assertThat(component.getEastNorth(200, 150), CustomMatchers.is(testPoint2));
+        component.zoomToFactor(200, 150, 2);
+        assertEquals(initialScale, component.getScale(), 0.00000001);
+        assertThat(component.getEastNorth(200, 150), CustomMatchers.is(testPoint2));
+
+    }
+
+    /**
+     * Tests {@link NavigatableComponent#getProjectionBounds()}
+     */
+    @Test
+    public void testGetProjectionBounds() {
+        ProjectionBounds bounds = component.getProjectionBounds();
+        assertThat(bounds.getCenter(), CustomMatchers.is(component.getCenter()));
+
+        assertThat(bounds.getMin(), CustomMatchers.is(component.getEastNorth(0, HEIGHT)));
+        assertThat(bounds.getMax(), CustomMatchers.is(component.getEastNorth(WIDTH, 0)));
+    }
+
+    /**
+     * Tests {@link NavigatableComponent#getRealBounds()}
+     */
+    @Test
+    public void testGetRealBounds() {
+        Bounds bounds = component.getRealBounds();
+        assertThat(bounds.getCenter(), CustomMatchers.is(component.getLatLon(WIDTH / 2, HEIGHT / 2)));
+
+        assertThat(bounds.getMin(), CustomMatchers.is(component.getLatLon(0, HEIGHT)));
+        assertThat(bounds.getMax(), CustomMatchers.is(component.getLatLon(WIDTH, 0)));
+    }
+
+}
diff --git a/test/unit/org/openstreetmap/josm/gui/SystemOfMeasurementTest.java b/test/unit/org/openstreetmap/josm/gui/SystemOfMeasurementTest.java
index 15c0701..c436371 100644
--- a/test/unit/org/openstreetmap/josm/gui/SystemOfMeasurementTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/SystemOfMeasurementTest.java
@@ -1,3 +1,4 @@
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui;
 
 import static org.junit.Assert.assertEquals;
diff --git a/test/unit/org/openstreetmap/josm/gui/conflict/nodes/NodeListMergeModelTest.java b/test/unit/org/openstreetmap/josm/gui/conflict/nodes/NodeListMergeModelTest.java
index 26dafe8..8d9b3f8 100644
--- a/test/unit/org/openstreetmap/josm/gui/conflict/nodes/NodeListMergeModelTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/conflict/nodes/NodeListMergeModelTest.java
@@ -4,6 +4,7 @@ package org.openstreetmap.josm.gui.conflict.nodes;
 import static org.fest.reflect.core.Reflection.field;
 import static org.fest.reflect.core.Reflection.method;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
@@ -12,12 +13,14 @@ import java.beans.PropertyChangeListener;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Set;
 
 import javax.swing.DefaultListSelectionModel;
 
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.openstreetmap.josm.JOSMFixture;
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.DatasetFactory;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.Way;
@@ -49,14 +52,14 @@ public class NodeListMergeModelTest {
 
     protected void ensureSelected(DefaultListSelectionModel model, Object... idx) {
         if (idx == null) return;
-        for (int i=0; i < idx.length; i++) {
+        for (int i = 0; i < idx.length; i++) {
             if (idx[i] instanceof Integer) {
-                int j = (Integer)idx[i];
+                int j = (Integer) idx[i];
                 assertTrue("expected row " + j + " to be selected", model.isSelectedIndex(j));
                 break;
             }
             try {
-                int rows[] = (int[])idx[i];
+                int[] rows = (int[]) idx[i];
                 if (rows.length != 2) {
                     fail("illegal selection range. Either null or not length 2: " + Arrays.toString(rows));
                 }
@@ -66,7 +69,7 @@ public class NodeListMergeModelTest {
                 for (int j = rows[0]; j <= rows[1]; j++) {
                     assertTrue("expected row " + j + " to be selected", model.isSelectedIndex(j));
                 }
-            } catch(ClassCastException e) {
+            } catch (ClassCastException e) {
                 fail("illegal selection range:" + idx[i]);
             }
         }
@@ -92,10 +95,8 @@ public class NodeListMergeModelTest {
 
         DefaultListSelectionModel mergedSelection = inspectListSelectionModel(model, "mergedEntriesSelectionModel");
         ensureSelected(mergedSelection, 0);
-
     }
 
-
     @Test
     public void test_copyMyNodesToTop_2() {
         NodeListMergeModel model = new NodeListMergeModel();
@@ -120,7 +121,6 @@ public class NodeListMergeModelTest {
 
         DefaultListSelectionModel mergedSelection = inspectListSelectionModel(model, "mergedEntriesSelectionModel");
         ensureSelected(mergedSelection, 0);
-
     }
 
     @Test
@@ -164,7 +164,7 @@ public class NodeListMergeModelTest {
         List<Node> mergedNodes = inspectNodeList(model, "Merged");
         mergedNodes.add(new Node(1));
 
-        model.copyMyToTop(new int[]{1,2}); // copy node 3 and 4
+        model.copyMyToTop(new int[]{1, 2}); // copy node 3 and 4
 
         mergedNodes = inspectNodeList(model, "Merged");
         assertEquals(3, mergedNodes.size());
@@ -173,10 +173,9 @@ public class NodeListMergeModelTest {
         assertEquals(1, mergedNodes.get(2).getId()); // already merged node 1 at position 2
 
         DefaultListSelectionModel mergedSelection = inspectListSelectionModel(model, "mergedEntriesSelectionModel");
-        ensureSelected(mergedSelection, 0,1); // first two rows selected
+        ensureSelected(mergedSelection, 0, 1); // first two rows selected
     }
 
-
     @Test
     public void test_copyMyNodesToEnd_1() {
         NodeListMergeModel model = new NodeListMergeModel();
@@ -266,7 +265,7 @@ public class NodeListMergeModelTest {
         List<Node> mergedNodes = inspectNodeList(model, "Merged");
         mergedNodes.add(new Node(1));
 
-        model.copyMyToEnd(new int[]{1,2}); // copy node 3 and 4
+        model.copyMyToEnd(new int[]{1, 2}); // copy node 3 and 4
 
         mergedNodes = inspectNodeList(model, "Merged");
         assertEquals(3, mergedNodes.size());
@@ -276,7 +275,7 @@ public class NodeListMergeModelTest {
 
 
         DefaultListSelectionModel mergedSelection = inspectListSelectionModel(model, "mergedEntriesSelectionModel");
-        ensureSelected(mergedSelection, 1,2); // last two rows selected
+        ensureSelected(mergedSelection, 1, 2); // last two rows selected
     }
 
     /* ----------------------------------------------------------------------------- */
@@ -310,7 +309,6 @@ public class NodeListMergeModelTest {
         ensureSelected(mergedSelection, 1); // position 1 selected
     }
 
-
     @Test
     public void test_copyMyNodesBeforeCurrent_2() {
         NodeListMergeModel model = new NodeListMergeModel();
@@ -326,7 +324,7 @@ public class NodeListMergeModelTest {
         mergedNodes.add(new Node(11));
         mergedNodes.add(new Node(12));
 
-        model.copyMyBeforeCurrent(new int[]{0,1}, 0);
+        model.copyMyBeforeCurrent(new int[]{0, 1}, 0);
 
         assertEquals(5, mergedNodes.size());
         assertEquals(1, mergedNodes.get(0).getId());  // copied node 1 at position 0
@@ -336,7 +334,7 @@ public class NodeListMergeModelTest {
         assertEquals(12, mergedNodes.get(4).getId()); // already merged node
 
         DefaultListSelectionModel mergedSelection = inspectListSelectionModel(model, "mergedEntriesSelectionModel");
-        ensureSelected(mergedSelection, 0,1); // position 0 and 1 selected
+        ensureSelected(mergedSelection, 0, 1); // position 0 and 1 selected
     }
 
     @Test
@@ -355,17 +353,23 @@ public class NodeListMergeModelTest {
         mergedNodes.add(new Node(12));
 
         try {
-            model.copyMyBeforeCurrent(new int[]{0,1}, -1);
+            model.copyMyBeforeCurrent(new int[]{0, 1}, -1);
             fail("expected IllegalArgumentException");
-        } catch(IllegalArgumentException e) {
+        } catch (IllegalArgumentException e) {
             // OK
+            if (Main.isTraceEnabled()) {
+                Main.trace(e.getMessage());
+            }
         }
 
         try {
-            model.copyMyBeforeCurrent(new int[]{0,1}, 4);
+            model.copyMyBeforeCurrent(new int[]{0, 1}, 4);
             fail("expected IllegalArgumentException");
-        } catch(IllegalArgumentException e) {
+        } catch (IllegalArgumentException e) {
             // OK
+            if (Main.isTraceEnabled()) {
+                Main.trace(e.getMessage());
+            }
         }
     }
 
@@ -399,7 +403,6 @@ public class NodeListMergeModelTest {
         ensureSelected(mergedSelection, 2); // position 1 selected
     }
 
-
     @Test
     public void test_copyMyNodesAfterCurrent_2() {
         NodeListMergeModel model = new NodeListMergeModel();
@@ -416,7 +419,7 @@ public class NodeListMergeModelTest {
         mergedNodes.add(new Node(11));
         mergedNodes.add(new Node(12));
 
-        model.copyMyAfterCurrent(new int[]{0,1}, 2);
+        model.copyMyAfterCurrent(new int[]{0, 1}, 2);
 
         assertEquals(5, mergedNodes.size());
         assertEquals(10, mergedNodes.get(0).getId()); // already merged node
@@ -425,9 +428,8 @@ public class NodeListMergeModelTest {
         assertEquals(1, mergedNodes.get(3).getId());  // copied node 1 at position 3
         assertEquals(2, mergedNodes.get(4).getId());  // copied node 2 at position 4
 
-
         DefaultListSelectionModel mergedSelection = inspectListSelectionModel(model, "mergedEntriesSelectionModel");
-        ensureSelected(mergedSelection, 3,4); // position 3,4 selected
+        ensureSelected(mergedSelection, 3, 4); // position 3,4 selected
     }
 
     @Test
@@ -446,7 +448,7 @@ public class NodeListMergeModelTest {
         mergedNodes.add(new Node(11));
         mergedNodes.add(new Node(12));
 
-        model.copyMyAfterCurrent(new int[]{0,2}, 0);
+        model.copyMyAfterCurrent(new int[]{0, 2}, 0);
 
         assertEquals(5, mergedNodes.size());
         assertEquals(10, mergedNodes.get(0).getId()); // already merged node
@@ -456,7 +458,7 @@ public class NodeListMergeModelTest {
         assertEquals(12, mergedNodes.get(4).getId()); // already merged node
 
         DefaultListSelectionModel mergedSelection = inspectListSelectionModel(model, "mergedEntriesSelectionModel");
-        ensureSelected(mergedSelection, 1,2); // position 1,2 selected
+        ensureSelected(mergedSelection, 1, 2); // position 1,2 selected
     }
 
 
@@ -506,7 +508,7 @@ public class NodeListMergeModelTest {
         mergedNodes.add(new Node(13));
         mergedNodes.add(new Node(14));
 
-        model.moveUpMerged(new int[]{1,4});
+        model.moveUpMerged(new int[]{1, 4});
 
         assertEquals(5, mergedNodes.size());
         assertEquals(11, mergedNodes.get(0).getId());
@@ -516,7 +518,7 @@ public class NodeListMergeModelTest {
         assertEquals(13, mergedNodes.get(4).getId());
 
         DefaultListSelectionModel mergedSelection = inspectListSelectionModel(model, "mergedEntriesSelectionModel");
-        ensureSelected(mergedSelection, 0,3); // position 0 and 3 selecte0
+        ensureSelected(mergedSelection, 0, 3); // position 0 and 3 selecte0
     }
 
     @Test
@@ -536,7 +538,7 @@ public class NodeListMergeModelTest {
         mergedNodes.add(new Node(13));
         mergedNodes.add(new Node(14));
 
-        model.moveUpMerged(new int[]{1,2,3,4});
+        model.moveUpMerged(new int[]{1, 2, 3, 4});
 
         assertEquals(5, mergedNodes.size());
         assertEquals(11, mergedNodes.get(0).getId());
@@ -546,7 +548,7 @@ public class NodeListMergeModelTest {
         assertEquals(10, mergedNodes.get(4).getId());
 
         DefaultListSelectionModel mergedSelection = inspectListSelectionModel(model, "mergedEntriesSelectionModel");
-        ensureSelected(mergedSelection, 0,1,2,3);
+        ensureSelected(mergedSelection, 0, 1, 2, 3);
     }
 
     /* ----------------------------------------------------------------------------- */
@@ -595,7 +597,7 @@ public class NodeListMergeModelTest {
         mergedNodes.add(new Node(13));
         mergedNodes.add(new Node(14));
 
-        model.moveDownMerged(new int[]{1,3});
+        model.moveDownMerged(new int[]{1, 3});
 
         assertEquals(5, mergedNodes.size());
         assertEquals(10, mergedNodes.get(0).getId());
@@ -605,7 +607,7 @@ public class NodeListMergeModelTest {
         assertEquals(13, mergedNodes.get(4).getId());
 
         DefaultListSelectionModel mergedSelection = inspectListSelectionModel(model, "mergedEntriesSelectionModel");
-        ensureSelected(mergedSelection, 2,4);
+        ensureSelected(mergedSelection, 2, 4);
     }
 
     @Test
@@ -625,7 +627,7 @@ public class NodeListMergeModelTest {
         mergedNodes.add(new Node(13));
         mergedNodes.add(new Node(14));
 
-        model.moveDownMerged(new int[]{1,2,3});
+        model.moveDownMerged(new int[]{1, 2, 3});
 
         assertEquals(5, mergedNodes.size());
         assertEquals(10, mergedNodes.get(0).getId());
@@ -635,7 +637,7 @@ public class NodeListMergeModelTest {
         assertEquals(13, mergedNodes.get(4).getId());
 
         DefaultListSelectionModel mergedSelection = inspectListSelectionModel(model, "mergedEntriesSelectionModel");
-        ensureSelected(mergedSelection, 2,3,4);
+        ensureSelected(mergedSelection, 2, 3, 4);
     }
 
     /* ----------------------------------------------------------------------------- */
@@ -654,13 +656,13 @@ public class NodeListMergeModelTest {
 
         model.addPropertyChangeListener(listener);
 
-        List<PropertyChangeListener> listeners = field("listeners")
-        .ofType(List.class)
+        Set<PropertyChangeListener> listeners = field("listeners")
+        .ofType(Set.class)
         .in(model)
         .get();
 
         assertEquals(1, listeners.size());
-        assertEquals(listener, listeners.get(0));
+        assertEquals(listener, listeners.iterator().next());
     }
 
     @SuppressWarnings("unchecked")
@@ -677,8 +679,8 @@ public class NodeListMergeModelTest {
         model.addPropertyChangeListener(listener);
         model.removePropertyChangeListener(listener);
 
-        List<PropertyChangeListener> listeners = field("listeners")
-        .ofType(List.class)
+        Set<PropertyChangeListener> listeners = field("listeners")
+        .ofType(Set.class)
         .in(model)
         .get();
 
@@ -695,7 +697,7 @@ public class NodeListMergeModelTest {
         assertTrue(model.isFrozen());
 
         model.setFrozen(false);
-        assertTrue(!model.isFrozen());
+        assertFalse(model.isFrozen());
     }
 
     @Test
@@ -709,6 +711,7 @@ public class NodeListMergeModelTest {
                 events.add(evt);
             }
         }
+
         MyListener listener = new MyListener();
         model.addPropertyChangeListener(listener);
         boolean oldValue = model.isFrozen();
@@ -719,5 +722,4 @@ public class NodeListMergeModelTest {
         assertEquals(oldValue, listener.events.get(0).getOldValue());
         assertEquals(!oldValue, listener.events.get(0).getNewValue());
     }
-
 }
diff --git a/test/unit/org/openstreetmap/josm/gui/conflict/properties/PropertiesMergeModelTest.java b/test/unit/org/openstreetmap/josm/gui/conflict/properties/PropertiesMergeModelTest.java
index 41b29fb..c3a17a4 100644
--- a/test/unit/org/openstreetmap/josm/gui/conflict/properties/PropertiesMergeModelTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/conflict/properties/PropertiesMergeModelTest.java
@@ -24,7 +24,7 @@ import org.openstreetmap.josm.gui.conflict.pair.properties.PropertiesMergeModel;
 
 public class PropertiesMergeModelTest {
 
-    public static abstract class TestObserver implements Observer {
+    public abstract static class TestObserver implements Observer {
         public int numInvocations;
 
         public void update(Observable o, Object arg) {
@@ -93,18 +93,18 @@ public class PropertiesMergeModelTest {
         populate(n1, n2);
         assertFalse(model.hasCoordConflict());
 
-        n1.setCoor(new LatLon(1,1));
+        n1.setCoor(new LatLon(1, 1));
         populate(n1, n2);
         assertTrue(model.hasCoordConflict());
 
 
         n1.cloneFrom(new Node(1));
-        n2.setCoor(new LatLon(2,2));
+        n2.setCoor(new LatLon(2, 2));
         populate(n1, n2);
         assertTrue(model.hasCoordConflict());
 
-        n1.setCoor(new LatLon(1,1));
-        n2.setCoor(new LatLon(2,2));
+        n1.setCoor(new LatLon(1, 1));
+        n2.setCoor(new LatLon(2, 2));
         populate(n1, n2);
         assertTrue(model.hasCoordConflict());
 
diff --git a/test/unit/org/openstreetmap/josm/gui/conflict/tags/TagMergeItemTest.java b/test/unit/org/openstreetmap/josm/gui/conflict/tags/TagMergeItemTest.java
index def199c..1fa8aa4 100644
--- a/test/unit/org/openstreetmap/josm/gui/conflict/tags/TagMergeItemTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/conflict/tags/TagMergeItemTest.java
@@ -8,6 +8,7 @@ import static org.junit.Assert.fail;
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.openstreetmap.josm.JOSMFixture;
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.gui.conflict.pair.MergeDecisionType;
 import org.openstreetmap.josm.gui.conflict.pair.tags.TagMergeItem;
@@ -67,11 +68,10 @@ public class TagMergeItemTest {
         TagMergeItem item = new TagMergeItem("key", n1, n2);
         assertEquals("key", item.getKey());
         assertNull(item.getMyTagValue());
-        assertEquals("theirvalue",item.getTheirTagValue());
+        assertEquals("theirvalue", item.getTheirTagValue());
         assertEquals(MergeDecisionType.UNDECIDED, item.getMergeDecision());
     }
 
-
     @Test
     public void test_decide() {
         TagMergeItem item = new TagMergeItem("key", "myvalue", "theirvalue");
@@ -79,18 +79,21 @@ public class TagMergeItemTest {
         assertEquals(MergeDecisionType.KEEP_MINE, item.getMergeDecision());
     }
 
-    @Test()
+    @Test
     public void test_decide_1() {
         TagMergeItem item = new TagMergeItem("key", "myvalue", "theirvalue");
         try {
             item.decide(null);
             fail("expected IllegalArgumentException not thrown");
-        } catch(IllegalArgumentException e) {
+        } catch (IllegalArgumentException e) {
             // OK
+            if (Main.isTraceEnabled()) {
+                Main.trace(e.getMessage());
+            }
         }
     }
 
-    @Test()
+    @Test
     public void test_applyToMyPrimitive() {
         TagMergeItem item = new TagMergeItem("key", "myvalue", "theirvalue");
         item.decide(MergeDecisionType.KEEP_MINE);
@@ -103,10 +106,9 @@ public class TagMergeItemTest {
         n1 = new Node(1);
         item.applyToMyPrimitive(n1);
         assertEquals("myvalue", n1.get("key"));
-
     }
 
-    @Test()
+    @Test
     public void test_applyToMyPrimitive_2() {
         TagMergeItem item = new TagMergeItem("key", "myvalue", "theirvalue");
         item.decide(MergeDecisionType.KEEP_THEIR);
@@ -121,7 +123,7 @@ public class TagMergeItemTest {
         assertEquals("theirvalue", n1.get("key"));
     }
 
-    @Test()
+    @Test
     public void test_applyToMyPrimitive_3() {
         TagMergeItem item = new TagMergeItem("key", "myvalue", "theirvalue");
         // item is undecided
@@ -132,20 +134,26 @@ public class TagMergeItemTest {
         try {
             item.applyToMyPrimitive(n1);
             fail("expected IllegalStateException");
-        } catch(IllegalStateException e) {
+        } catch (IllegalStateException e) {
             // OK
+            if (Main.isTraceEnabled()) {
+                Main.trace(e.getMessage());
+            }
         }
     }
 
-    @Test()
+    @Test
     public void test_applyToMyPrimitive_4() {
         TagMergeItem item = new TagMergeItem("key", "myvalue", "theirvalue");
 
         try {
             item.applyToMyPrimitive(null);
             fail("expected IllegalArgumentException");
-        } catch(IllegalArgumentException e) {
+        } catch (IllegalArgumentException e) {
             // OK
+            if (Main.isTraceEnabled()) {
+                Main.trace(e.getMessage());
+            }
         }
     }
 }
diff --git a/test/unit/org/openstreetmap/josm/gui/conflict/tags/TagMergeModelTest.java b/test/unit/org/openstreetmap/josm/gui/conflict/tags/TagMergeModelTest.java
index 6a50a7a..476836d 100644
--- a/test/unit/org/openstreetmap/josm/gui/conflict/tags/TagMergeModelTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/conflict/tags/TagMergeModelTest.java
@@ -8,6 +8,7 @@ import static org.junit.Assert.assertNull;
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.util.List;
+import java.util.Set;
 
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -35,12 +36,12 @@ public class TagMergeModelTest {
         };
         model.addPropertyChangeListener(listener);
 
-        List<?> list = field("listeners").ofType(List.class)
+        Set<?> list = field("listeners").ofType(Set.class)
         .in(model)
         .get();
 
         assertEquals(1, list.size());
-        assertEquals(listener, list.get(0));
+        assertEquals(listener, list.iterator().next());
     }
 
     @Test
@@ -54,8 +55,8 @@ public class TagMergeModelTest {
         model.addPropertyChangeListener(listener);
         model.removePropertyChangeListener(listener);
 
-        List<?> list = field("listeners")
-        .ofType(List.class)
+        Set<?> list = field("listeners")
+        .ofType(Set.class)
         .in(model)
         .get();
 
@@ -208,7 +209,7 @@ public class TagMergeModelTest {
     public void decideMultiple() {
 
         TagMergeModel model = new TagMergeModel();
-        for (int i=0; i < 10; i++) {
+        for (int i = 0; i < 10; i++) {
             model.addItem(new TagMergeItem("key-" + i, "myvalue-" + i, "theirvalue-" +i));
         }
 
@@ -220,7 +221,7 @@ public class TagMergeModelTest {
         assertEquals(10, list.size());
 
         model.decide(new int[] {0, 3, 5}, MergeDecisionType.KEEP_MINE);
-        for (int i = 0; i< 10; i++) {
+        for (int i = 0; i < 10; i++) {
             TagMergeItem item = list.get(i);
             if (i == 0 || i == 3 || i == 5) {
                 assertEquals(MergeDecisionType.KEEP_MINE, item.getMergeDecision());
diff --git a/test/unit/org/openstreetmap/josm/gui/dialogs/LatLonDialogTest.java b/test/unit/org/openstreetmap/josm/gui/dialogs/LatLonDialogTest.java
index b0a9936..3bb198f 100644
--- a/test/unit/org/openstreetmap/josm/gui/dialogs/LatLonDialogTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/dialogs/LatLonDialogTest.java
@@ -1,11 +1,12 @@
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.dialogs;
 
-import org.junit.Test;
-import org.openstreetmap.josm.data.coor.LatLon;
-
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
 
+import org.junit.Test;
+import org.openstreetmap.josm.data.coor.LatLon;
+
 public class LatLonDialogTest {
     @Test
     public void test1() throws Exception {
@@ -34,7 +35,8 @@ public class LatLonDialogTest {
 
     @Test
     public void test6() throws Exception {
-        assertThat(LatLonDialog.parseLatLon("N 49°29'04\" E 19°24'43\""), is(new LatLon(49 + 29. / 60 + 04. / 3600, 19 + 24. / 60 + 43. / 3600)));
+        assertThat(LatLonDialog.parseLatLon("N 49°29'04\" E 19°24'43\""),
+                is(new LatLon(49 + 29. / 60 + 04. / 3600, 19 + 24. / 60 + 43. / 3600)));
     }
 
     @Test
@@ -44,7 +46,8 @@ public class LatLonDialogTest {
 
     @Test
     public void test8() throws Exception {
-        assertThat(LatLonDialog.parseLatLon("49°29'21\" N 19°24'38\" E"), is(new LatLon(49 + 29. / 60 + 21. / 3600, 19 + 24. / 60 + 38. / 3600)));
+        assertThat(LatLonDialog.parseLatLon("49°29'21\" N 19°24'38\" E"),
+                is(new LatLon(49 + 29. / 60 + 21. / 3600, 19 + 24. / 60 + 38. / 3600)));
     }
 
     @Test
diff --git a/test/unit/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationSorterTest.java b/test/unit/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationSorterTest.java
index 860c3a1..0e22248 100644
--- a/test/unit/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationSorterTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationSorterTest.java
@@ -42,7 +42,7 @@ public class RelationSorterTest {
 
     private String[] getNames(List<RelationMember> members) {
         String[] result = new String[members.size()];
-        for (int i=0; i<result.length; i++) {
+        for (int i = 0; i < result.length; i++) {
             result[i] = members.get(i).getMember().get("name");
         }
         return result;
diff --git a/test/unit/org/openstreetmap/josm/gui/dialogs/relation/sort/WayConnectionTypeCalculatorTest.java b/test/unit/org/openstreetmap/josm/gui/dialogs/relation/sort/WayConnectionTypeCalculatorTest.java
index a44674a..f6199f8 100644
--- a/test/unit/org/openstreetmap/josm/gui/dialogs/relation/sort/WayConnectionTypeCalculatorTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/dialogs/relation/sort/WayConnectionTypeCalculatorTest.java
@@ -43,7 +43,7 @@ public class WayConnectionTypeCalculatorTest {
 
     private String getConnections(List<WayConnectionType> connections) {
         String[] result = new String[connections.size()];
-        for (int i=0; i<result.length; i++) {
+        for (int i = 0; i < result.length; i++) {
             WayConnectionType wc = connections.get(i);
 
             if (wc.isValid()) {
diff --git a/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/ChildOrParentSelectorTest.groovy b/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/ChildOrParentSelectorTest.groovy
index 32ec8a3..52eb187 100644
--- a/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/ChildOrParentSelectorTest.groovy
+++ b/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/ChildOrParentSelectorTest.groovy
@@ -1,5 +1,7 @@
 // License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui.mappaint.mapcss;
+package org.openstreetmap.josm.gui.mappaint.mapcss
+
+import org.openstreetmap.josm.gui.mappaint.MultiCascade;
 
 import static org.junit.Assert.*
 
@@ -120,7 +122,7 @@ class ChildOrParentSelectorTest {
     @Test
     public void matches_5() {
         def css = """
-           way <[role != "my_role"] relation {}
+           way <[role != "my_role"] relation {text: index();}
         """
         ChildOrParentSelector selector = parse(css)
         assert selector.type == Selector.ChildOrParentSelectorType.PARENT
@@ -138,9 +140,15 @@ class ChildOrParentSelectorTest {
         r.addMember(new RelationMember("my_role", w1))
         r.addMember(new RelationMember("my_role", w2))
         r.addMember(new RelationMember("another role", w3))
+        r.addMember(new RelationMember("yet another role", w3))
 
-        Environment e = new Environment().withPrimitive(r)
+        Environment e = new Environment(r, new MultiCascade(), Environment.DEFAULT_LAYER, null)
         assert selector.matches(e)
+
+        MapCSSStyleSource source = new MapCSSStyleSource(css)
+        source.loadStyleSource()
+        source.rules[0].declaration.execute(e)
+        assert Float.valueOf(3f).equals(e.getCascade(Environment.DEFAULT_LAYER).get("text", null, Float.class))
     }
 
     @Test
@@ -164,13 +172,13 @@ class ChildOrParentSelectorTest {
         r.addMember(new RelationMember("my_role", w2))
         r.addMember(new RelationMember("another role", w3))
 
-        Environment e = new Environment().withPrimitive(w1)
+        Environment e = new Environment(w1)
         assert !selector.matches(e)
 
-        e = new Environment().withPrimitive(w2)
+        e = new Environment(w2)
         assert !selector.matches(e)
 
-        e = new Environment().withPrimitive(w3)
+        e = new Environment(w3)
         assert selector.matches(e)
     }
 }
diff --git a/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/KeyConditionTest.groovy b/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/KeyConditionTest.groovy
index a6a0179..207d456 100644
--- a/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/KeyConditionTest.groovy
+++ b/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/KeyConditionTest.groovy
@@ -76,7 +76,7 @@ class KeyConditionTest {
         Node n = node(1)
         r.addMember(new RelationMember("my_role", n))
 
-        Environment e = new Environment().withPrimitive(n).withParent(r).withIndex(0, r.membersCount).withLinkContext()
+        Environment e = new Environment(n).withParent(r).withIndex(0, r.membersCount).withLinkContext()
 
         Condition cond = Condition.createKeyCondition("my_role", false, null, Context.LINK)
         assert cond.applies(e)
@@ -91,7 +91,7 @@ class KeyConditionTest {
         Node n = node(1)
         r.addMember(new RelationMember("my_role", n))
 
-        Environment e = new Environment().withPrimitive(n).withParent(r).withIndex(0, r.membersCount).withLinkContext()
+        Environment e = new Environment(n).withParent(r).withIndex(0, r.membersCount).withLinkContext()
 
         Condition cond = Condition.createKeyCondition("another_role", false, null, Context.LINK)
         assert !cond.applies(e)
diff --git a/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/KeyValueConditionTest.groovy b/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/KeyValueConditionTest.groovy
index a6acbab..d025e94 100644
--- a/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/KeyValueConditionTest.groovy
+++ b/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/KeyValueConditionTest.groovy
@@ -62,7 +62,7 @@ class KeyValueConditionTest {
         Node n = node(1)
         r.addMember(new RelationMember("my_role", n))
 
-        Environment e = new Environment().withPrimitive(n).withParent(r).withLinkContext().withIndex(0, r.membersCount)
+        Environment e = new Environment(n).withParent(r).withLinkContext().withIndex(0, r.membersCount)
 
         Condition cond = new Condition.RoleCondition("my_role", Op.EQ)
         assert cond.applies(e)
@@ -77,7 +77,7 @@ class KeyValueConditionTest {
         Node n = node(1)
         r.addMember(new RelationMember("my_role", n))
 
-        Environment e = new Environment().withPrimitive(n).withParent(r).withIndex(0, r.membersCount).withLinkContext()
+        Environment e = new Environment(n).withParent(r).withIndex(0, r.membersCount).withLinkContext()
 
         Condition cond = Condition.createKeyValueCondition("role", "my_role", Op.NEQ, Context.LINK, false)
         assert !cond.applies(e)
diff --git a/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSParserTest.groovy b/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSParserTest.groovy
index 646df48..cb099fb 100644
--- a/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSParserTest.groovy
+++ b/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSParserTest.groovy
@@ -9,6 +9,7 @@ import org.openstreetmap.josm.Main
 import org.openstreetmap.josm.data.coor.LatLon
 import org.openstreetmap.josm.data.osm.DataSet
 import org.openstreetmap.josm.data.osm.OsmUtils
+import org.openstreetmap.josm.data.osm.Node
 import org.openstreetmap.josm.data.osm.Way
 import org.openstreetmap.josm.gui.mappaint.Environment
 import org.openstreetmap.josm.gui.mappaint.MultiCascade
@@ -18,7 +19,7 @@ import org.openstreetmap.josm.tools.ColorHelper
 class MapCSSParserTest {
 
     protected static Environment getEnvironment(String key, String value) {
-        return new Environment().withPrimitive(OsmUtils.createPrimitive("way " + key + "=" + value))
+        return new Environment(OsmUtils.createPrimitive("way " + key + "=" + value))
     }
 
     protected static MapCSSParser getParser(String stringToParse) {
@@ -52,6 +53,17 @@ class MapCSSParserTest {
         assert conditions.get(0).applies(getEnvironment("name", "X"))
         assert conditions.get(1) instanceof Condition.ClassCondition
         assert conditions.get(2) instanceof Condition.PseudoClassCondition
+        assert !conditions.get(2).applies(getEnvironment("name", "X"))
+    }
+
+    @Test
+    public void testPseudoClassCondition() throws Exception {
+        def c1 = ((Selector.GeneralSelector) getParser("way!:area-style").selector()).conds.get(0)
+        def c2 = ((Selector.GeneralSelector) getParser("way!:areaStyle").selector()).conds.get(0)
+        def c3 = ((Selector.GeneralSelector) getParser("way!:area_style").selector()).conds.get(0)
+        assert c1.toString() == "!:areaStyle"
+        assert c2.toString() == "!:areaStyle"
+        assert c3.toString() == "!:areaStyle"
     }
 
     @Test
@@ -146,11 +158,11 @@ class MapCSSParserTest {
     @Test
     public void testStandardKeyCondition() throws Exception {
         def c1 = (Condition.KeyCondition) getParser("[ highway ]").condition(Condition.Context.PRIMITIVE)
-        assert c1.matchType == null
+        assert Condition.KeyMatchType.EQ.equals(c1.matchType)
         assert c1.applies(getEnvironment("highway", "unclassified"))
         assert !c1.applies(getEnvironment("railway", "rail"))
         def c2 = (Condition.KeyCondition) getParser("[\"/slash/\"]").condition(Condition.Context.PRIMITIVE)
-        assert c2.matchType == null
+        assert Condition.KeyMatchType.EQ.equals(c2.matchType)
         assert c2.applies(getEnvironment("/slash/", "yes"))
         assert !c2.applies(getEnvironment("\"slash\"", "no"))
     }
@@ -191,12 +203,12 @@ class MapCSSParserTest {
     @Test
     public void testNRegexKeyConditionSelector() throws Exception {
         def s1 = getParser("*[sport][tourism != hotel]").selector()
-        assert s1.matches(new Environment().withPrimitive(OsmUtils.createPrimitive("node sport=foobar")))
-        assert !s1.matches(new Environment().withPrimitive(OsmUtils.createPrimitive("node sport=foobar tourism=hotel")))
+        assert s1.matches(new Environment(OsmUtils.createPrimitive("node sport=foobar")))
+        assert !s1.matches(new Environment(OsmUtils.createPrimitive("node sport=foobar tourism=hotel")))
         def s2 = getParser("*[sport][tourism != hotel][leisure !~ /^(sports_centre|stadium|)\$/]").selector()
-        assert s2.matches(new Environment().withPrimitive(OsmUtils.createPrimitive("node sport=foobar")))
-        assert !s2.matches(new Environment().withPrimitive(OsmUtils.createPrimitive("node sport=foobar tourism=hotel")))
-        assert !s2.matches(new Environment().withPrimitive(OsmUtils.createPrimitive("node sport=foobar leisure=stadium")))
+        assert s2.matches(new Environment(OsmUtils.createPrimitive("node sport=foobar")))
+        assert !s2.matches(new Environment(OsmUtils.createPrimitive("node sport=foobar tourism=hotel")))
+        assert !s2.matches(new Environment(OsmUtils.createPrimitive("node sport=foobar leisure=stadium")))
     }
 
     @Test
@@ -205,17 +217,44 @@ class MapCSSParserTest {
         def w1 = new Way()
         w1.put("foo", "123")
         w1.put("bar", "456")
-        assert !c1.applies(new Environment().withPrimitive(w1))
+        assert !c1.applies(new Environment(w1))
         w1.put("bar", "123")
-        assert c1.applies(new Environment().withPrimitive(w1))
+        assert c1.applies(new Environment(w1))
         def c2 = (Condition.KeyValueCondition) getParser("[foo =~ */bar/]").condition(Condition.Context.PRIMITIVE)
         def w2 = new Way(w1)
         w2.put("bar", "[0-9]{3}")
-        assert c2.applies(new Environment().withPrimitive(w2))
+        assert c2.applies(new Environment(w2))
         w2.put("bar", "[0-9]")
-        assert c2.applies(new Environment().withPrimitive(w2))
+        assert c2.applies(new Environment(w2))
         w2.put("bar", "^[0-9]\$")
-        assert !c2.applies(new Environment().withPrimitive(w2))
+        assert !c2.applies(new Environment(w2))
+    }
+
+    @Test
+    public void testParentTag() throws Exception {
+        def c1 = getParser("way[foo] > node[tag(\"foo\")=parent_tag(\"foo\")] {}").child_selector()
+        def ds = new DataSet()
+        def w1 = new Way()
+        def w2 = new Way()
+        def n1 = new Node(new LatLon(1, 1))
+        def n2 = new Node(new LatLon(2, 2))
+        w1.put("foo", "123")
+        w2.put("foo", "123")
+        n1.put("foo", "123")
+        n2.put("foo", "0")
+        ds.addPrimitive(w1)
+        ds.addPrimitive(n1)
+        ds.addPrimitive(n2)
+        w1.addNode(n1)
+        w2.addNode(n2)
+        assert c1.matches(new Environment(n1))
+        assert !c1.matches(new Environment(n2))
+        assert !c1.matches(new Environment(w1))
+        assert !c1.matches(new Environment(w2))
+        n1.put("foo", "0")
+        assert !c1.matches(new Environment(n1))
+        n1.put("foo", "123")
+        assert c1.matches(new Environment(n1))
     }
 
     @Test
@@ -300,13 +339,40 @@ class MapCSSParserTest {
         w.addNode(n1)
         w.addNode(n2)
 
-        def e = new Environment().withPrimitive(n2)
+        def e = new Environment(n2)
         assert s1.matches(e)
         assert e.osm == n2
         assert e.child == n1
         assert e.parent == w
-        assert !s1.matches(new Environment().withPrimitive(n1))
-        assert !s1.matches(new Environment().withPrimitive(w))
+        assert !s1.matches(new Environment(n1))
+        assert !s1.matches(new Environment(w))
+    }
+
+    @Test
+    public void testParentTags() throws Exception {
+        def ds = new DataSet()
+        def n = new org.openstreetmap.josm.data.osm.Node(new LatLon(1, 2))
+        n.put("foo", "bar")
+        def w1 = new Way()
+        w1.put("ref", "x10")
+        def w2 = new Way()
+        w2.put("ref", "x2")
+        def w3 = new Way()
+        ds.addPrimitive(n)
+        ds.addPrimitive(w1)
+        ds.addPrimitive(w2)
+        ds.addPrimitive(w3)
+        w1.addNode(n)
+        w2.addNode(n)
+        w3.addNode(n)
+
+        MapCSSStyleSource source = new MapCSSStyleSource("node[foo=bar] {refs: join_list(\";\", parent_tags(\"ref\"));}")
+        source.loadStyleSource()
+        assert source.rules.size() == 1
+        def e = new Environment(n, new MultiCascade(), Environment.DEFAULT_LAYER, null)
+        assert source.rules.get(0).selector.matches(e)
+        source.rules.get(0).declaration.execute(e)
+        assert e.getCascade(Environment.DEFAULT_LAYER).get("refs", null, String.class) == "x2;x10"
     }
 
     @Test
@@ -331,12 +397,12 @@ class MapCSSParserTest {
         w.addNode(n2)
         w.addNode(n3)
 
-        assert s1.right.matches(new Environment().withPrimitive(n3))
-        assert s1.left.matches(new Environment().withPrimitive(n2).withChild(n3).withParent(w))
-        assert s1.matches(new Environment().withPrimitive(n3))
-        assert !s1.matches(new Environment().withPrimitive(n1))
-        assert !s1.matches(new Environment().withPrimitive(n2))
-        assert !s1.matches(new Environment().withPrimitive(w))
+        assert s1.right.matches(new Environment(n3))
+        assert s1.left.matches(new Environment(n2).withChild(n3).withParent(w))
+        assert s1.matches(new Environment(n3))
+        assert !s1.matches(new Environment(n1))
+        assert !s1.matches(new Environment(n2))
+        assert !s1.matches(new Environment(w))
     }
 
     @Test
diff --git a/test/unit/org/openstreetmap/josm/gui/preferences/ToolbarPreferencesTest.java b/test/unit/org/openstreetmap/josm/gui/preferences/ToolbarPreferencesTest.java
index 1a35538..301109f 100644
--- a/test/unit/org/openstreetmap/josm/gui/preferences/ToolbarPreferencesTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/preferences/ToolbarPreferencesTest.java
@@ -13,8 +13,8 @@ import javax.swing.Action;
 import org.junit.Assert;
 import org.junit.Test;
 import org.openstreetmap.josm.actions.ActionParameter;
-import org.openstreetmap.josm.actions.ParameterizedAction;
 import org.openstreetmap.josm.actions.ActionParameter.StringActionParameter;
+import org.openstreetmap.josm.actions.ParameterizedAction;
 import org.openstreetmap.josm.gui.preferences.ToolbarPreferences.ActionDefinition;
 import org.openstreetmap.josm.gui.preferences.ToolbarPreferences.ActionParser;
 
@@ -39,13 +39,12 @@ public class ToolbarPreferencesTest {
         public void actionPerformed(ActionEvent e) {
 
         }
-
     }
 
     private void checkAction(ActionDefinition a, Object... params) {
         Map<String, Object> expected = new HashMap<>();
-        for (int i=0; i<params.length; i+=2) {
-            expected.put((String)params[i], params[i+1]);
+        for (int i = 0; i < params.length; i += 2) {
+            expected.put((String) params[i], params[i+1]);
         }
         Assert.assertEquals(expected, a.getParameters());
     }
@@ -60,15 +59,17 @@ public class ToolbarPreferencesTest {
         checkAction(parser.loadAction("action(param1=value1,param2=2\\(\\=\\,\\\\)"), "param1", "value1", "param2", "2(=,\\");
         checkAction(parser.loadAction("action(param1=value1,"), "param1", "value1");
         checkAction(parser.loadAction("action(param1=value1"), "param1", "value1");
-        checkAction(parser.loadAction("action(param1="), "param1", "");
-        checkAction(parser.loadAction("action(param1"), "param1", "");
+        checkAction(parser.loadAction("action(param1="));
+        checkAction(parser.loadAction("action(param1"));
         checkAction(parser.loadAction("action("));
         checkAction(parser.loadAction("action"));
         checkAction(parser.loadAction("action(uknownParam=aa)"));
 
-        Assert.assertEquals("action(param1=value1,param2=value2)", parser.saveAction(parser.loadAction("action(param1=value1,param2=value2)")));
-        Assert.assertEquals("action(param1=value1,param2=)", parser.saveAction(parser.loadAction("action(param1=value1)")));
-        Assert.assertEquals("action(param1=value1,param2=2\\(\\=\\,\\\\)", parser.saveAction(parser.loadAction("action(param1=value1,param2=2\\(\\=\\,\\\\)")));
+        Assert.assertEquals("action(param1=value1,param2=value2)",
+                parser.saveAction(parser.loadAction("action(param1=value1,param2=value2)")));
+        Assert.assertEquals("action(param1=value1,param2=)",
+                parser.saveAction(parser.loadAction("action(param1=value1)")));
+        Assert.assertEquals("action(param1=value1,param2=2\\(\\=\\,\\\\)",
+                parser.saveAction(parser.loadAction("action(param1=value1,param2=2\\(\\=\\,\\\\)")));
     }
-
 }
diff --git a/test/unit/org/openstreetmap/josm/gui/tagging/PresetClassificationsTest.java b/test/unit/org/openstreetmap/josm/gui/tagging/PresetClassificationsTest.java
index e2b700f..1e9e0af 100644
--- a/test/unit/org/openstreetmap/josm/gui/tagging/PresetClassificationsTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/tagging/PresetClassificationsTest.java
@@ -1,6 +1,7 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.tagging;
 
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
 import java.io.IOException;
@@ -21,7 +22,7 @@ import org.xml.sax.SAXException;
 
 public class PresetClassificationsTest {
 
-    final static TaggingPresetSelector.PresetClassifications classifications = new TaggingPresetSelector.PresetClassifications();
+    static final TaggingPresetSelector.PresetClassifications classifications = new TaggingPresetSelector.PresetClassifications();
 
     /**
      * Setup test.
@@ -34,7 +35,8 @@ public class PresetClassificationsTest {
     }
 
     private List<TaggingPresetSelector.PresetClassification> getMatchingPresets(String searchText, OsmPrimitive w) {
-        return classifications.getMatchingPresets(searchText, true, true, EnumSet.of(TaggingPresetType.forPrimitive(w)), Collections.singleton(w));
+        return classifications.getMatchingPresets(searchText, true, true, EnumSet.of(TaggingPresetType.forPrimitive(w)),
+                Collections.singleton(w));
     }
 
     private List<String> getMatchingPresetNames(String searchText, OsmPrimitive w) {
@@ -53,7 +55,7 @@ public class PresetClassificationsTest {
         w.addNode(n1);
         w.addNode(new Node());
         w.addNode(new Node());
-        assertTrue("unclosed way should not match building preset", !getMatchingPresetNames("building", w).contains("Building"));
+        assertFalse("unclosed way should not match building preset", getMatchingPresetNames("building", w).contains("Building"));
         w.addNode(n1);
         assertTrue("closed way should match building preset", getMatchingPresetNames("building", w).contains("Building"));
     }
@@ -61,8 +63,10 @@ public class PresetClassificationsTest {
     @Test
     public void testRelationsForTram() {
         final OsmPrimitive tram = OsmUtils.createPrimitive("way railway=tram");
-        assertTrue("railway=tram should match 'Railway Route' for relation creation", getMatchingPresetNames("route", tram).contains("Railway Route"));
-        assertTrue("railway=tram should match 'Public Transport Route' for relation creation", getMatchingPresetNames("route", tram).contains("Public Transport Route"));
-        assertTrue("railway=tram should not match 'Bus route'", !getMatchingPresetNames("route", tram).contains("Bus route"));
+        assertTrue("railway=tram should match 'Railway Route' for relation creation", getMatchingPresetNames("route", tram)
+                .contains("Railway Route"));
+        assertTrue("railway=tram should match 'Public Transport Route' for relation creation", getMatchingPresetNames("route", tram)
+                .contains("Public Transport Route"));
+        assertFalse("railway=tram should not match 'Bus route'", getMatchingPresetNames("route", tram).contains("Bus route"));
     }
 }
diff --git a/test/unit/org/openstreetmap/josm/gui/tagging/TaggingPresetReaderTest.java b/test/unit/org/openstreetmap/josm/gui/tagging/TaggingPresetReaderTest.java
index cd44b09..2c22766 100644
--- a/test/unit/org/openstreetmap/josm/gui/tagging/TaggingPresetReaderTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/tagging/TaggingPresetReaderTest.java
@@ -66,6 +66,6 @@ public class TaggingPresetReaderTest {
     public void readDefaulPresets() throws SAXException, IOException {
         String presetfile = "resource://data/defaultpresets.xml";
         final Collection<TaggingPreset> presets = TaggingPresetReader.readAll(presetfile, true);
-        Assert.assertTrue("Default presets are empty", presets.size()>0);
+        Assert.assertTrue("Default presets are empty", presets.size() > 0);
     }
 }
diff --git a/test/unit/org/openstreetmap/josm/gui/util/RotationAngleTest.java b/test/unit/org/openstreetmap/josm/gui/util/RotationAngleTest.java
index a3dc509..30a7771 100644
--- a/test/unit/org/openstreetmap/josm/gui/util/RotationAngleTest.java
+++ b/test/unit/org/openstreetmap/josm/gui/util/RotationAngleTest.java
@@ -1,3 +1,4 @@
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.util;
 
 import static org.hamcrest.CoreMatchers.is;
diff --git a/test/unit/org/openstreetmap/josm/io/ChangesetQueryUrlParserTest.groovy b/test/unit/org/openstreetmap/josm/io/ChangesetQueryUrlParserTest.groovy
index 1e0dd6d..336afea 100644
--- a/test/unit/org/openstreetmap/josm/io/ChangesetQueryUrlParserTest.groovy
+++ b/test/unit/org/openstreetmap/josm/io/ChangesetQueryUrlParserTest.groovy
@@ -1,193 +1,187 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.io;
 
+import static org.junit.Assert.*
 
-import java.util.Calendar;
-import java.util.GregorianCalendar;
-import java.util.TimeZone;
+import org.junit.Test
+import org.openstreetmap.josm.io.ChangesetQuery.ChangesetQueryUrlException
+import org.openstreetmap.josm.io.ChangesetQuery.ChangesetQueryUrlParser
 
-import org.junit.Test 
-import org.openstreetmap.josm.io.ChangesetQuery.ChangesetQueryUrlException;
-import org.openstreetmap.josm.io.ChangesetQuery.ChangesetQueryUrlParser;
+class ChangesetQueryUrlParserTest {
+    final shouldFail = new GroovyTestCase().&shouldFail
 
+    @Test
+    public void test_constructor() {
+        ChangesetQueryUrlParser parser = new ChangesetQueryUrlParser();
+    }
 
-import static org.junit.Assert.*;
+    @Test
+    public void test_parse_basic() {
+        ChangesetQueryUrlParser parser = new ChangesetQueryUrlParser();
 
-class ChangesetQueryUrlParserTest {
-	final shouldFail = new GroovyTestCase().&shouldFail
-	
-	@Test
-	public void test_constructor() {
-	    ChangesetQueryUrlParser parser = new ChangesetQueryUrlParser();
-	}
-	
-	@Test
-	public void test_parse_basic() {
-		ChangesetQueryUrlParser parser = new ChangesetQueryUrlParser();
-		
-		// OK
-		parser.parse ""
-		
-		// should be OK
-		ChangesetQuery q = parser.parse(null)
-		assert q != null
-		
-		// should be OK
-		q = parser.parse("")
-		assert q != null
-	}
-	
-	@Test 
-	public void test_uid() {
-		ChangesetQueryUrlParser parser = new ChangesetQueryUrlParser();
-		def ChangesetQuery q
-		
-		// OK
-		q = parser.parse("uid=1234")
-		assert q != null
-		
-		shouldFail(ChangesetQueryUrlException) {
-			q = parser.parse("uid=0")				
-		}
-		
-		shouldFail(ChangesetQueryUrlException) {
-			q = parser.parse("uid=-1")               
-		}
-		
-		shouldFail(ChangesetQueryUrlException) {
-			q = parser.parse("uid=abc")               
-		}
-	}
-	
-	@Test 
-	public void test_display_name() {
-		ChangesetQueryUrlParser parser = new ChangesetQueryUrlParser();
-		def ChangesetQuery q
-		
-		// OK
-		q = parser.parse("display_name=abcd")
-		assert q != null
-		assert q. at userName == "abcd"
-	}
-	
-	
-	@Test 
-	public void test_open() {
-		ChangesetQueryUrlParser parser = new ChangesetQueryUrlParser();
-		def ChangesetQuery q
-		
-		// OK
-		q = parser.parse("open=true")
-		assert q != null
-		assert q. at open == true
-		
-		// OK
-		q = parser.parse("open=false")
-		assert q != null
-		assert q. at open == false
-		
-		// illegal value for open 
-		shouldFail(ChangesetQueryUrlException) {
-			q = parser.parse("open=abcd")               
-		}   		
-	}
-	
-	@Test 
-	public void test_closed() {
-		ChangesetQueryUrlParser parser = new ChangesetQueryUrlParser();
-		def ChangesetQuery q
-		
-		// OK
-		q = parser.parse("closed=true")
-		assert q != null
-		assert q. at closed == true
-		
-		// OK
-		q = parser.parse("closed=false")
-		assert q != null
-		assert q. at closed == false
-		
-		// illegal value for open 
-		shouldFail(ChangesetQueryUrlException) {
-			q = parser.parse("closed=abcd")               
-		}           
-	}
-	
-	
-	@Test 
-	public void test_uid_and_display_name() {
-		ChangesetQueryUrlParser parser = new ChangesetQueryUrlParser();
-		def ChangesetQuery q
-		
-		// we can't have both an uid and a display name 
-		shouldFail(ChangesetQueryUrlException) {
-			q = parser.parse("uid=1&display_name=abcd")               
-		}		
-	}
-	
-	@Test 
-	public void test_time() {
-		ChangesetQueryUrlParser parser = new ChangesetQueryUrlParser();
-		def ChangesetQuery q
-		
-		// OK
-		q = parser.parse("time=2009-12-25T10:00:00Z")
-		assert q != null
-		assert q. at closedAfter != null   
-		Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("GMT+0"));
-		cal.setTime(q. at closedAfter);
-		assert cal.get(Calendar.YEAR) == 2009
-		assert cal.get(Calendar.MONTH) == 11 // calendar is 0-based
-		assert cal.get(Calendar.DAY_OF_MONTH) == 25
-		assert cal.get(Calendar.HOUR_OF_DAY) == 10
-		assert cal.get(Calendar.MINUTE) == 0
-		assert cal.get(Calendar.SECOND) == 0
-		
-		// OK
-		q = parser.parse("time=2009-12-25T10:00:00Z,2009-11-25T10:00:00Z")
-		assert q!= null
-		assert q. at closedAfter != null
-		assert q. at createdBefore != null
-		
-		// should fail
-		shouldFail(ChangesetQueryUrlException) {
-			q = parser.parse("time=asdf")               
-		}   		
-	}
-	
-	@Test 
-	public void test_bbox() {
-		ChangesetQueryUrlParser parser = new ChangesetQueryUrlParser();
-		def ChangesetQuery q
-		
-		// OK
-		q = parser.parse("bbox=-1,-1,1,1")
-		assert q != null
-		assert q. at bounds != null
-		
-		// should fail
-		shouldFail(ChangesetQueryUrlException) {
-			q = parser.parse("bbox=-91,-1,1,1")               
-		}           
-				
-		// should fail
-		shouldFail(ChangesetQueryUrlException) {
-			q = parser.parse("bbox=-1,-181,1,1")               
-		}           
-		
-		// should fail
-		shouldFail(ChangesetQueryUrlException) {
-			q = parser.parse("bbox=-1,-1,91,1")               
-		}           
-		// should fail
-		shouldFail(ChangesetQueryUrlException) {
-			q = parser.parse("bbox=-1,-1,1,181")               
-		}  
-		// should fail
-		shouldFail(ChangesetQueryUrlException) {
-			q = parser.parse("bbox=-1,-1,1")               
-		}  
-	}
+        // OK
+        parser.parse ""
+
+        // should be OK
+        ChangesetQuery q = parser.parse(null)
+        assert q != null
+
+        // should be OK
+        q = parser.parse("")
+        assert q != null
+    }
+
+    @Test
+    public void test_uid() {
+        ChangesetQueryUrlParser parser = new ChangesetQueryUrlParser();
+        def ChangesetQuery q
+
+        // OK
+        q = parser.parse("uid=1234")
+        assert q != null
+
+        shouldFail(ChangesetQueryUrlException) {
+            q = parser.parse("uid=0")
+        }
+
+        shouldFail(ChangesetQueryUrlException) {
+            q = parser.parse("uid=-1")
+        }
+
+        shouldFail(ChangesetQueryUrlException) {
+            q = parser.parse("uid=abc")
+        }
+    }
+
+    @Test
+    public void test_display_name() {
+        ChangesetQueryUrlParser parser = new ChangesetQueryUrlParser();
+        def ChangesetQuery q
+
+        // OK
+        q = parser.parse("display_name=abcd")
+        assert q != null
+        assert q. at userName == "abcd"
+    }
+
+
+    @Test
+    public void test_open() {
+        ChangesetQueryUrlParser parser = new ChangesetQueryUrlParser();
+        def ChangesetQuery q
+
+        // OK
+        q = parser.parse("open=true")
+        assert q != null
+        assert q. at open == true
+
+        // OK
+        q = parser.parse("open=false")
+        assert q != null
+        assert q. at open == false
+
+        // illegal value for open
+        shouldFail(ChangesetQueryUrlException) {
+            q = parser.parse("open=abcd")
+        }
+    }
+
+    @Test
+    public void test_closed() {
+        ChangesetQueryUrlParser parser = new ChangesetQueryUrlParser();
+        def ChangesetQuery q
+
+        // OK
+        q = parser.parse("closed=true")
+        assert q != null
+        assert q. at closed == true
+
+        // OK
+        q = parser.parse("closed=false")
+        assert q != null
+        assert q. at closed == false
+
+        // illegal value for open
+        shouldFail(ChangesetQueryUrlException) {
+            q = parser.parse("closed=abcd")
+        }
+    }
+
+
+    @Test
+    public void test_uid_and_display_name() {
+        ChangesetQueryUrlParser parser = new ChangesetQueryUrlParser();
+        def ChangesetQuery q
+
+        // we can't have both an uid and a display name
+        shouldFail(ChangesetQueryUrlException) {
+            q = parser.parse("uid=1&display_name=abcd")
+        }
+    }
+
+    @Test
+    public void test_time() {
+        ChangesetQueryUrlParser parser = new ChangesetQueryUrlParser();
+        def ChangesetQuery q
+
+        // OK
+        q = parser.parse("time=2009-12-25T10:00:00Z")
+        assert q != null
+        assert q. at closedAfter != null
+        Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("GMT+0"));
+        cal.setTime(q. at closedAfter);
+        assert cal.get(Calendar.YEAR) == 2009
+        assert cal.get(Calendar.MONTH) == 11 // calendar is 0-based
+        assert cal.get(Calendar.DAY_OF_MONTH) == 25
+        assert cal.get(Calendar.HOUR_OF_DAY) == 10
+        assert cal.get(Calendar.MINUTE) == 0
+        assert cal.get(Calendar.SECOND) == 0
+
+        // OK
+        q = parser.parse("time=2009-12-25T10:00:00Z,2009-11-25T10:00:00Z")
+        assert q!= null
+        assert q. at closedAfter != null
+        assert q. at createdBefore != null
+
+        // should fail
+        shouldFail(ChangesetQueryUrlException) {
+            q = parser.parse("time=asdf")
+        }
+    }
+
+    @Test
+    public void test_bbox() {
+        ChangesetQueryUrlParser parser = new ChangesetQueryUrlParser();
+        def ChangesetQuery q
+
+        // OK
+        q = parser.parse("bbox=-1,-1,1,1")
+        assert q != null
+        assert q. at bounds != null
+
+        // should fail
+        shouldFail(ChangesetQueryUrlException) {
+            q = parser.parse("bbox=-91,-1,1,1")
+        }
+
+        // should fail
+        shouldFail(ChangesetQueryUrlException) {
+            q = parser.parse("bbox=-1,-181,1,1")
+        }
+
+        // should fail
+        shouldFail(ChangesetQueryUrlException) {
+            q = parser.parse("bbox=-1,-1,91,1")
+        }
+        // should fail
+        shouldFail(ChangesetQueryUrlException) {
+            q = parser.parse("bbox=-1,-1,1,181")
+        }
+        // should fail
+        shouldFail(ChangesetQueryUrlException) {
+            q = parser.parse("bbox=-1,-1,1")
+        }
+    }
 
     @Test
     public void test_changeset_ids() {
diff --git a/test/unit/org/openstreetmap/josm/io/DiffResultProcessorTest.groovy b/test/unit/org/openstreetmap/josm/io/DiffResultProcessorTest.groovy
index b293a65..b2d7bf9 100644
--- a/test/unit/org/openstreetmap/josm/io/DiffResultProcessorTest.groovy
+++ b/test/unit/org/openstreetmap/josm/io/DiffResultProcessorTest.groovy
@@ -16,72 +16,71 @@ import org.openstreetmap.josm.tools.XmlParsingException
 
 class DiffResultProcessorTest {
 
+    @Test
+    public void testConstructor() {
+        Node n = new Node(1)
+        // these calls should not fail
+        //
+        def DiffResultProcessor processor  = new DiffResultProcessor(null)
+        processor  = new DiffResultProcessor([])
+        processor  = new DiffResultProcessor([n])
+    }
+
+    @Test
+    public void testParse_NOK_Cases() {
+        def DiffResultProcessor processor  = new DiffResultProcessor([])
+
+        final shouldFail = new GroovyTestCase().&shouldFail
+
+        shouldFail(IllegalArgumentException) {
+            processor.parse null, NullProgressMonitor.INSTANCE
+        }
+
+        shouldFail(XmlParsingException) {
+            processor.parse "", NullProgressMonitor.INSTANCE
+        }
+
+        shouldFail(XmlParsingException) {
+            processor.parse "<x></x>", NullProgressMonitor.INSTANCE
+        }
+    }
+
+    @Test
+    public void testParse_OK_Cases() {
+        def DiffResultProcessor processor  = new DiffResultProcessor([])
+        String doc = """\
+        <diffResult version="0.6" generator="Test Data">
+            <node old_id="-1" new_id="1" new_version="1"/>
+            <way old_id="-2" new_id="2" new_version="1"/>
+            <relation old_id="-3" new_id="3" new_version="1"/>
+        </diffResult>
+        """
 
-	@Test
-	public void testConstructor() {
-		Node n = new Node(1)
-		// these calls should not fail
-		//
-		def DiffResultProcessor processor  = new DiffResultProcessor(null)
-		processor  = new DiffResultProcessor([])
-		processor  = new DiffResultProcessor([n])
-	}
-
-	@Test
-	public void testParse_NOK_Cases() {
-		def DiffResultProcessor processor  = new DiffResultProcessor([])
-
-		final shouldFail = new GroovyTestCase().&shouldFail
-
-		shouldFail(IllegalArgumentException) {
-		    processor.parse null, NullProgressMonitor.INSTANCE
-		}
-
-		shouldFail(XmlParsingException) {
-			processor.parse "", NullProgressMonitor.INSTANCE
-		}
-
-		shouldFail(XmlParsingException) {
-			processor.parse "<x></x>", NullProgressMonitor.INSTANCE
-		}
-	}
-
-	@Test
-	public void testParse_OK_Cases() {
-		def DiffResultProcessor processor  = new DiffResultProcessor([])
-		String doc = """\
-		<diffResult version="0.6" generator="Test Data">
-		    <node old_id="-1" new_id="1" new_version="1"/>
-		    <way old_id="-2" new_id="2" new_version="1"/>
-		    <relation old_id="-3" new_id="3" new_version="1"/>
-		</diffResult>
-		"""
-
-		processor.parse doc, null
-		assert processor. at diffResults.size() == 3
-		SimplePrimitiveId id = new SimplePrimitiveId(-1, OsmPrimitiveType.NODE)
-		def entry = processor. at diffResults[id]
-		assert entry != null
-		assert entry.new_id == 1
-		assert entry.new_version == 1
-
-		id = new SimplePrimitiveId(-2, OsmPrimitiveType.WAY)
-		entry = processor. at diffResults[id]
-		assert entry != null
-		assert entry.new_id == 2
-		assert entry.new_version == 1
-
-		id = new SimplePrimitiveId(-3, OsmPrimitiveType.RELATION)
-		entry = processor. at diffResults[id]
-		assert entry != null
-		assert entry.new_id == 3
-		assert entry.new_version == 1
-	}
-
-	@Test
-	public void testPostProcess_Invocation_Variants() {
-		def DiffResultProcessor processor  = new DiffResultProcessor([])
-		String doc = """\
+        processor.parse doc, null
+        assert processor. at diffResults.size() == 3
+        SimplePrimitiveId id = new SimplePrimitiveId(-1, OsmPrimitiveType.NODE)
+        def entry = processor. at diffResults[id]
+        assert entry != null
+        assert entry.newId == 1
+        assert entry.newVersion == 1
+
+        id = new SimplePrimitiveId(-2, OsmPrimitiveType.WAY)
+        entry = processor. at diffResults[id]
+        assert entry != null
+        assert entry.newId == 2
+        assert entry.newVersion == 1
+
+        id = new SimplePrimitiveId(-3, OsmPrimitiveType.RELATION)
+        entry = processor. at diffResults[id]
+        assert entry != null
+        assert entry.newId == 3
+        assert entry.newVersion == 1
+    }
+
+    @Test
+    public void testPostProcess_Invocation_Variants() {
+        def DiffResultProcessor processor  = new DiffResultProcessor([])
+        String doc = """\
         <diffResult version="0.6" generator="Test Data">
             <node old_id="-1" new_id="1" new_version="1"/>
             <way old_id="-2" new_id="2" new_version="1"/>
@@ -89,108 +88,108 @@ class DiffResultProcessorTest {
         </diffResult>
         """
 
-		processor.parse doc, null
-
-		// should all be ok
-		//
-		processor.postProcess null, null
-		processor.postProcess null, NullProgressMonitor.INSTANCE
-		processor.postProcess new Changeset(1), null
-		processor.postProcess new Changeset(1), NullProgressMonitor.INSTANCE
-	}
-
-	@Test
-	public void testPostProcess_OK() {
-
-		Node n = new Node()
-		Way w = new Way()
-		Relation r = new Relation()
-
-		String doc = """\
-	        <diffResult version="0.6" generator="Test Data">
-	            <node old_id="${n.uniqueId}" new_id="1" new_version="10"/>
-	            <way old_id="${w.uniqueId}" new_id="2" new_version="11"/>
-	            <relation old_id="${r.uniqueId}" new_id="3" new_version="12"/>
-	        </diffResult>
-	        """
-
-		def DiffResultProcessor processor  = new DiffResultProcessor([n,w,r])
-		processor.parse doc, null
-		def processed = processor.postProcess(new Changeset(5), null)
-		assert processed.size() == 3
-		n = processed.find {it.uniqueId == 1}
-		assert n.changesetId == 5
-		assert n.version == 10
-
-		w = processed.find {it.uniqueId == 2}
-		assert w.changesetId == 5
-		assert w.version == 11
-
-		r = processed.find {it.uniqueId == 3}
-		assert r.changesetId == 5
-		assert r.version == 12
-	}
-
-	@Test
-	public void testPostProcess_ForCreatedElement() {
-
-		Node n = new Node()
-		String doc = """\
+        processor.parse doc, null
+
+        // should all be ok
+        //
+        processor.postProcess null, null
+        processor.postProcess null, NullProgressMonitor.INSTANCE
+        processor.postProcess new Changeset(1), null
+        processor.postProcess new Changeset(1), NullProgressMonitor.INSTANCE
+    }
+
+    @Test
+    public void testPostProcess_OK() {
+
+        Node n = new Node()
+        Way w = new Way()
+        Relation r = new Relation()
+
+        String doc = """\
+            <diffResult version="0.6" generator="Test Data">
+                <node old_id="${n.uniqueId}" new_id="1" new_version="10"/>
+                <way old_id="${w.uniqueId}" new_id="2" new_version="11"/>
+                <relation old_id="${r.uniqueId}" new_id="3" new_version="12"/>
+            </diffResult>
+            """
+
+        def DiffResultProcessor processor  = new DiffResultProcessor([n,w,r])
+        processor.parse doc, null
+        def processed = processor.postProcess(new Changeset(5), null)
+        assert processed.size() == 3
+        n = processed.find {it.uniqueId == 1}
+        assert n.changesetId == 5
+        assert n.version == 10
+
+        w = processed.find {it.uniqueId == 2}
+        assert w.changesetId == 5
+        assert w.version == 11
+
+        r = processed.find {it.uniqueId == 3}
+        assert r.changesetId == 5
+        assert r.version == 12
+    }
+
+    @Test
+    public void testPostProcess_ForCreatedElement() {
+
+        Node n = new Node()
+        String doc = """\
             <diffResult version="0.6" generator="Test Data">
                 <node old_id="${n.uniqueId}" new_id="1" new_version="1"/>
             </diffResult>
             """
 
-		def DiffResultProcessor processor  = new DiffResultProcessor([n])
-		processor.parse doc, null
-		def processed = processor.postProcess(new Changeset(5), null)
-		assert processed.size() == 1
-		n = processed.find {it.uniqueId == 1}
-		assert n.changesetId == 5
-		assert n.version == 1
-	}
-
-	@Test
-	public void testPostProcess_ForModifiedElement() {
-
-		Node n = new Node(1)
-		n.coor = new LatLon(1,1)
-		n.setOsmId 1, 2
-		n.modified = true
-		String doc = """\
+        def DiffResultProcessor processor  = new DiffResultProcessor([n])
+        processor.parse doc, null
+        def processed = processor.postProcess(new Changeset(5), null)
+        assert processed.size() == 1
+        n = processed.find {it.uniqueId == 1}
+        assert n.changesetId == 5
+        assert n.version == 1
+    }
+
+    @Test
+    public void testPostProcess_ForModifiedElement() {
+
+        Node n = new Node(1)
+        n.coor = new LatLon(1,1)
+        n.setOsmId 1, 2
+        n.modified = true
+        String doc = """\
             <diffResult version="0.6" generator="Test Data">
                 <node old_id="${n.uniqueId}" new_id="${n.uniqueId}" new_version="3"/>
             </diffResult>
             """
 
-		def DiffResultProcessor processor  = new DiffResultProcessor([n])
-		processor.parse doc, null
-		def processed = processor.postProcess(new Changeset(5), null)
-		assert processed.size() == 1
-		n = processed.find {it.uniqueId == 1}
-		assert n.changesetId == 5
-		assert n.version == 3
-	}
-
-	@Test
-	public void testPostProcess_ForDeletedElement() {
-
-		Node n = new Node(1)
-		n.coor = new LatLon(1,1)
-		n.setOsmId 1, 2
-		n.deleted = true
-		String doc = """\
+        def DiffResultProcessor processor  = new DiffResultProcessor([n])
+        processor.parse doc, null
+        def processed = processor.postProcess(new Changeset(5), null)
+        assert processed.size() == 1
+        n = processed.find {it.uniqueId == 1}
+        assert n.changesetId == 5
+        assert n.version == 3
+    }
+
+    @Test
+    public void testPostProcess_ForDeletedElement() {
+
+        Node n = new Node(1)
+        n.coor = new LatLon(1,1)
+        n.setOsmId 1, 2
+        n.deleted = true
+        String doc = """\
             <diffResult version="0.6" generator="Test Data">
                 <node old_id="${n.uniqueId}"/>
             </diffResult>
             """
 
-		def DiffResultProcessor processor  = new DiffResultProcessor([n])
-		processor.parse doc, null
-		def processed = processor.postProcess(new Changeset(5), null)
-		assert processed.size() == 1
-		n = processed.find {it.uniqueId == 1}
-		assert n.changesetId == 5
-		assert n.version == 2
-	}
+        def DiffResultProcessor processor  = new DiffResultProcessor([n])
+        processor.parse doc, null
+        def processed = processor.postProcess(new Changeset(5), null)
+        assert processed.size() == 1
+        n = processed.find {it.uniqueId == 1}
+        assert n.changesetId == 5
+        assert n.version == 2
+    }
 }
diff --git a/test/unit/org/openstreetmap/josm/io/OsmChangeBuilderTest.groovy b/test/unit/org/openstreetmap/josm/io/OsmChangeBuilderTest.groovy
index 55651b0..1ca0bef 100644
--- a/test/unit/org/openstreetmap/josm/io/OsmChangeBuilderTest.groovy
+++ b/test/unit/org/openstreetmap/josm/io/OsmChangeBuilderTest.groovy
@@ -9,199 +9,199 @@ import org.openstreetmap.josm.data.osm.Node
 
 class OsmChangeBuilderTest {
 
-	/**
-	 * Test various constructor invocations
-	 */
-	@Test
-	public void testConstructor() {
-		def Changeset cs = new Changeset(1)
-		// should not fail
-		OsmChangeBuilder builder = new OsmChangeBuilder(cs)
-
-		// should not fail either - null allowed
-		builder = new OsmChangeBuilder(null)
-
-		// should not fail
-		builder = new OsmChangeBuilder(cs, "0.5")
-
-		builder = new OsmChangeBuilder(cs, null)
-
-		builder = new OsmChangeBuilder(null, null)
-	}
-
-	/**
-	 * Test the sequence of method calls. Should throw IllegalStateException if
-	 * the protocol start(),append()*, finish() is violated.
-	 */
-	@Test
-	public void testSequenceOfMethodCalls() {
-		def Changeset cs = new Changeset(1)
-		OsmChangeBuilder builder = new OsmChangeBuilder(cs)
-
-		final shouldFail = new GroovyTestCase().&shouldFail
-
-		// should be OK
-		builder.start()
-		Node n = new Node(new LatLon(0,0))
-		builder.append n
-		builder.finish()
-
-		shouldFail(IllegalStateException) {
-			builder = new OsmChangeBuilder(cs)
-			builder.append n
-		}
-
-		shouldFail(IllegalStateException) {
-			builder = new OsmChangeBuilder(cs)
-			builder.append([n])
-		}
-
-		shouldFail(IllegalStateException) {
-			builder = new OsmChangeBuilder(cs)
-			builder.finish()
-		}
-
-		shouldFail(IllegalStateException) {
-			builder = new OsmChangeBuilder(cs)
-			builder.start()
-			builder.start()
-		}
-	}
-
-	@Test
-	public void testDocumentWithNewNode() {
-		def Changeset cs = new Changeset(1)
-		OsmChangeBuilder builder = new OsmChangeBuilder(cs)
-		Node n = new Node(new LatLon(0,0))
-
-		builder.start()
-		builder.append n
-		builder.finish()
-
-		def doc = new XmlParser().parseText(builder.document)
-		assert doc. at version == "0.6"
-		assert doc. at generator == "JOSM"
-		assert doc.name() == "osmChange"
-		assert doc.children().size() == 1
-		def create = doc.create
-		assert create != null
-
-		assert create.size() == 1
-		def nodes = create[0].node
-		assert nodes.size() == 1
-		def node = nodes[0]
-		assert node. at id == n.uniqueId.toString()
-		assert node. at lat != null
-		assert node. at lon != null
-		assert node. at changeset == cs.id.toString()
-	}
-
-	/**
-	 * Test building a document with a modified node
-	 */
-	@Test
-	public void testDocumentWithModifiedNode() {
-		def Changeset cs = new Changeset(1)
-		OsmChangeBuilder builder = new OsmChangeBuilder(cs)
-		Node n = new Node(1)
-		n.coor = new LatLon(0,0)
-		n.incomplete = false
-		n.modified = true
-
-		builder.start()
-		builder.append n
-		builder.finish()
-
-		def doc = new XmlParser().parseText(builder.document)
-		assert doc. at version == "0.6"
-		assert doc. at generator == "JOSM"
-		assert doc.name() == "osmChange"
-		assert doc.children().size() == 1
-		def modify = doc.modify
-		assert modify != null
-
-		assert modify.size() == 1
-		def nodes = modify[0].node
-		assert nodes.size() == 1
-		def node = nodes[0]
-		assert node. at id == n.uniqueId.toString()
-		assert node. at lat != null
-		assert node. at lon != null
-		assert node. at changeset == cs.id.toString()
-	}
-
-	/**
-	 * Test building a document with a deleted node
-	 */
-	@Test
-	public void testDocumentWithDeletedNode() {
-		def Changeset cs = new Changeset(1)
-		OsmChangeBuilder builder = new OsmChangeBuilder(cs)
-		Node n = new Node(1)
-		n.coor = new LatLon(0,0)
-		n.incomplete = false
-		n.deleted = true
-
-		builder.start()
-		builder.append n
-		builder.finish()
-
-		def doc = new XmlParser().parseText(builder.document)
-		assert doc. at version == "0.6"
-		assert doc. at generator == "JOSM"
-		assert doc.name() == "osmChange"
-		assert doc.children().size() == 1
-		def delete = doc.delete
-		assert delete != null
-
-		assert delete.size() == 1
-		def nodes = delete[0].node
-		assert nodes.size() == 1
-		def node = nodes[0]
-		assert node. at id == n.uniqueId.toString()
-		assert node. at lat == null
-		assert node. at lon == null
-		assert node. at changeset == cs.id.toString()
-	}
-
-	/**
-	 * Test building a mixed document.
-	 *
-	 */
-	@Test
-	public void testMixed() {
-		def Changeset cs = new Changeset(1)
-		OsmChangeBuilder builder = new OsmChangeBuilder(cs)
-		Node n1 = new Node(1)
-		n1.coor = new LatLon(0,0)
-		n1.incomplete = false
-		n1.deleted = true
-
-		Node n2 = new Node(new LatLon(0,0))
-
-		Node n3 = new Node(2)
-		n3.coor = new LatLon(0,0)
-		n3.incomplete = false
-		n3.modified = true
-
-		builder.start()
-		builder.append([n1,n2,n3])
-		builder.finish()
-
-		def doc = new XmlParser().parseText(builder.document)
-
-		assert doc.children().size() == 3
-		assert doc.children()[0].name() == "delete"
-		assert doc.children()[1].name() == "create"
-		assert doc.children()[2].name() == "modify"
-
-		def node = doc.children()[0].node[0]
-		assert node. at id == n1.uniqueId.toString()
-
-		node = doc.children()[1].node[0]
-		assert node. at id == n2.uniqueId.toString()
-
-		node = doc.children()[2].node[0]
-		assert node. at id == n3.uniqueId.toString()
-	}
+    /**
+     * Test various constructor invocations
+     */
+    @Test
+    public void testConstructor() {
+        def Changeset cs = new Changeset(1)
+        // should not fail
+        OsmChangeBuilder builder = new OsmChangeBuilder(cs)
+
+        // should not fail either - null allowed
+        builder = new OsmChangeBuilder(null)
+
+        // should not fail
+        builder = new OsmChangeBuilder(cs, "0.5")
+
+        builder = new OsmChangeBuilder(cs, null)
+
+        builder = new OsmChangeBuilder(null, null)
+    }
+
+    /**
+     * Test the sequence of method calls. Should throw IllegalStateException if
+     * the protocol start(),append()*, finish() is violated.
+     */
+    @Test
+    public void testSequenceOfMethodCalls() {
+        def Changeset cs = new Changeset(1)
+        OsmChangeBuilder builder = new OsmChangeBuilder(cs)
+
+        final shouldFail = new GroovyTestCase().&shouldFail
+
+        // should be OK
+        builder.start()
+        Node n = new Node(new LatLon(0,0))
+        builder.append n
+        builder.finish()
+
+        shouldFail(IllegalStateException) {
+            builder = new OsmChangeBuilder(cs)
+            builder.append n
+        }
+
+        shouldFail(IllegalStateException) {
+            builder = new OsmChangeBuilder(cs)
+            builder.append([n])
+        }
+
+        shouldFail(IllegalStateException) {
+            builder = new OsmChangeBuilder(cs)
+            builder.finish()
+        }
+
+        shouldFail(IllegalStateException) {
+            builder = new OsmChangeBuilder(cs)
+            builder.start()
+            builder.start()
+        }
+    }
+
+    @Test
+    public void testDocumentWithNewNode() {
+        def Changeset cs = new Changeset(1)
+        OsmChangeBuilder builder = new OsmChangeBuilder(cs)
+        Node n = new Node(new LatLon(0,0))
+
+        builder.start()
+        builder.append n
+        builder.finish()
+
+        def doc = new XmlParser().parseText(builder.document)
+        assert doc. at version == "0.6"
+        assert doc. at generator == "JOSM"
+        assert doc.name() == "osmChange"
+        assert doc.children().size() == 1
+        def create = doc.create
+        assert create != null
+
+        assert create.size() == 1
+        def nodes = create[0].node
+        assert nodes.size() == 1
+        def node = nodes[0]
+        assert node. at id == n.uniqueId.toString()
+        assert node. at lat != null
+        assert node. at lon != null
+        assert node. at changeset == cs.id.toString()
+    }
+
+    /**
+     * Test building a document with a modified node
+     */
+    @Test
+    public void testDocumentWithModifiedNode() {
+        def Changeset cs = new Changeset(1)
+        OsmChangeBuilder builder = new OsmChangeBuilder(cs)
+        Node n = new Node(1)
+        n.coor = new LatLon(0,0)
+        n.incomplete = false
+        n.modified = true
+
+        builder.start()
+        builder.append n
+        builder.finish()
+
+        def doc = new XmlParser().parseText(builder.document)
+        assert doc. at version == "0.6"
+        assert doc. at generator == "JOSM"
+        assert doc.name() == "osmChange"
+        assert doc.children().size() == 1
+        def modify = doc.modify
+        assert modify != null
+
+        assert modify.size() == 1
+        def nodes = modify[0].node
+        assert nodes.size() == 1
+        def node = nodes[0]
+        assert node. at id == n.uniqueId.toString()
+        assert node. at lat != null
+        assert node. at lon != null
+        assert node. at changeset == cs.id.toString()
+    }
+
+    /**
+     * Test building a document with a deleted node
+     */
+    @Test
+    public void testDocumentWithDeletedNode() {
+        def Changeset cs = new Changeset(1)
+        OsmChangeBuilder builder = new OsmChangeBuilder(cs)
+        Node n = new Node(1)
+        n.coor = new LatLon(0,0)
+        n.incomplete = false
+        n.deleted = true
+
+        builder.start()
+        builder.append n
+        builder.finish()
+
+        def doc = new XmlParser().parseText(builder.document)
+        assert doc. at version == "0.6"
+        assert doc. at generator == "JOSM"
+        assert doc.name() == "osmChange"
+        assert doc.children().size() == 1
+        def delete = doc.delete
+        assert delete != null
+
+        assert delete.size() == 1
+        def nodes = delete[0].node
+        assert nodes.size() == 1
+        def node = nodes[0]
+        assert node. at id == n.uniqueId.toString()
+        assert node. at lat == null
+        assert node. at lon == null
+        assert node. at changeset == cs.id.toString()
+    }
+
+    /**
+     * Test building a mixed document.
+     *
+     */
+    @Test
+    public void testMixed() {
+        def Changeset cs = new Changeset(1)
+        OsmChangeBuilder builder = new OsmChangeBuilder(cs)
+        Node n1 = new Node(1)
+        n1.coor = new LatLon(0,0)
+        n1.incomplete = false
+        n1.deleted = true
+
+        Node n2 = new Node(new LatLon(0,0))
+
+        Node n3 = new Node(2)
+        n3.coor = new LatLon(0,0)
+        n3.incomplete = false
+        n3.modified = true
+
+        builder.start()
+        builder.append([n1,n2,n3])
+        builder.finish()
+
+        def doc = new XmlParser().parseText(builder.document)
+
+        assert doc.children().size() == 3
+        assert doc.children()[0].name() == "delete"
+        assert doc.children()[1].name() == "create"
+        assert doc.children()[2].name() == "modify"
+
+        def node = doc.children()[0].node[0]
+        assert node. at id == n1.uniqueId.toString()
+
+        node = doc.children()[1].node[0]
+        assert node. at id == n2.uniqueId.toString()
+
+        node = doc.children()[2].node[0]
+        assert node. at id == n3.uniqueId.toString()
+    }
 }
diff --git a/test/unit/org/openstreetmap/josm/io/OsmChangesetContentParserTest.groovy b/test/unit/org/openstreetmap/josm/io/OsmChangesetContentParserTest.groovy
index d53f330..e3d81b2 100644
--- a/test/unit/org/openstreetmap/josm/io/OsmChangesetContentParserTest.groovy
+++ b/test/unit/org/openstreetmap/josm/io/OsmChangesetContentParserTest.groovy
@@ -1,29 +1,27 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.io;
 
-import org.junit.Test
-
 import java.nio.charset.StandardCharsets
 
-import org.openstreetmap.josm.data.osm.ChangesetDataSet;
-import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
-import org.openstreetmap.josm.data.osm.SimplePrimitiveId;
-import org.openstreetmap.josm.data.osm.ChangesetDataSet.ChangesetModificationType;
-import org.openstreetmap.josm.data.osm.history.HistoryOsmPrimitive;
-import org.openstreetmap.josm.data.osm.history.HistoryRelation;
-import org.openstreetmap.josm.data.osm.history.HistoryWay;
-import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
-
+import org.junit.Test
+import org.openstreetmap.josm.data.osm.ChangesetDataSet
+import org.openstreetmap.josm.data.osm.OsmPrimitiveType
+import org.openstreetmap.josm.data.osm.SimplePrimitiveId
+import org.openstreetmap.josm.data.osm.ChangesetDataSet.ChangesetModificationType
+import org.openstreetmap.josm.data.osm.history.HistoryOsmPrimitive
+import org.openstreetmap.josm.data.osm.history.HistoryRelation
+import org.openstreetmap.josm.data.osm.history.HistoryWay
+import org.openstreetmap.josm.gui.progress.NullProgressMonitor
 
 class OsmChangesetContentParserTest {
-	final shouldFail = new GroovyTestCase().&shouldFail
+    final shouldFail = new GroovyTestCase().&shouldFail
+
+    @Test
+    public void test_Constructor() {
+        OsmChangesetContentParser parser
 
-	@Test
-	public void test_Constructor() {
-	    OsmChangesetContentParser parser 
-		
-		// should be OK 
-		parser = new OsmChangesetContentParser(new ByteArrayInputStream("".bytes))
+        // should be OK
+        parser = new OsmChangesetContentParser(new ByteArrayInputStream("".bytes))
 
         shouldFail(IllegalArgumentException) {
             parser = new OsmChangesetContentParser((String) null)
@@ -32,185 +30,185 @@ class OsmChangesetContentParserTest {
         shouldFail(IllegalArgumentException) {
             parser = new OsmChangesetContentParser((InputStream) null)
         }
-	}
-	
-	
-	@Test
-	public void test_parse_arguments() {
-		OsmChangesetContentParser parser 
-		
-		def String doc = """
-		    <osmChange version="0.6" generator="OpenStreetMap server">
-		    </osmChange>
-		"""
-		
-		// should be OK 
-		parser = new OsmChangesetContentParser(new ByteArrayInputStream(doc.getBytes(StandardCharsets.UTF_8)))
-		parser.parse null
-		
-		// should be OK 
-		parser = new OsmChangesetContentParser(new ByteArrayInputStream(doc.getBytes(StandardCharsets.UTF_8)))
-		parser.parse NullProgressMonitor.INSTANCE
-		
-		// should be OK 
-		parser = new OsmChangesetContentParser(doc)	
-		parser.parse null		
-	}	
-	
-	/**
-	 * A simple changeset content document with one created node 
-	 * 
-	 */
-	@Test
-	public void test_OK_OneCreatedNode() {
-		OsmChangesetContentParser parser 
-		
-		def String doc = """
+    }
+
+
+    @Test
+    public void test_parse_arguments() {
+        OsmChangesetContentParser parser
+
+        def String doc = """
+            <osmChange version="0.6" generator="OpenStreetMap server">
+            </osmChange>
+        """
+
+        // should be OK
+        parser = new OsmChangesetContentParser(new ByteArrayInputStream(doc.getBytes(StandardCharsets.UTF_8)))
+        parser.parse null
+
+        // should be OK
+        parser = new OsmChangesetContentParser(new ByteArrayInputStream(doc.getBytes(StandardCharsets.UTF_8)))
+        parser.parse NullProgressMonitor.INSTANCE
+
+        // should be OK
+        parser = new OsmChangesetContentParser(doc)
+        parser.parse null
+    }
+
+    /**
+     * A simple changeset content document with one created node
+     *
+     */
+    @Test
+    public void test_OK_OneCreatedNode() {
+        OsmChangesetContentParser parser
+
+        def String doc = """
             <osmChange version="0.6" generator="OpenStreetMap server">
-		      <create>
-		        <node id="1" version="1" visible="true" changeset="1" lat="1.0" lon="1.0" timestamp="2009-12-22" />
-		      </create>
+              <create>
+                <node id="1" version="1" visible="true" changeset="1" lat="1.0" lon="1.0" timestamp="2009-12-22" />
+              </create>
             </osmChange>
         """
-		
-		// should be OK 
-		parser = new OsmChangesetContentParser(doc) 
-		ChangesetDataSet ds = parser.parse()
-
-        assert ds.size() == 1		
-		HistoryOsmPrimitive p = ds.getPrimitive(new SimplePrimitiveId(1, OsmPrimitiveType.NODE));
-		assert p != null
-		assert p.getId() == 1
-		assert p.getVersion() == 1
-		assert p.getChangesetId() == 1
-		assert p.getTimestamp() != null
-		assert ds.getModificationType(p.getPrimitiveId()) == ChangesetModificationType.CREATED
-		assert ds.isCreated(p.getPrimitiveId())
-	}
-	
-	/**
-	 * A simple changeset content document with one updated node 
-	 * 
-	 */
-	@Test
-	public void test_OK_OneUpdatedNode() {
-		OsmChangesetContentParser parser 
-		
-		def String doc = """
+
+        // should be OK
+        parser = new OsmChangesetContentParser(doc)
+        ChangesetDataSet ds = parser.parse()
+
+        assert ds.size() == 1
+        HistoryOsmPrimitive p = ds.getPrimitive(new SimplePrimitiveId(1, OsmPrimitiveType.NODE));
+        assert p != null
+        assert p.getId() == 1
+        assert p.getVersion() == 1
+        assert p.getChangesetId() == 1
+        assert p.getTimestamp() != null
+        assert ds.getModificationType(p.getPrimitiveId()) == ChangesetModificationType.CREATED
+        assert ds.isCreated(p.getPrimitiveId())
+    }
+
+    /**
+     * A simple changeset content document with one updated node
+     *
+     */
+    @Test
+    public void test_OK_OneUpdatedNode() {
+        OsmChangesetContentParser parser
+
+        def String doc = """
             <osmChange version="0.6" generator="OpenStreetMap server">
               <modify>
                 <node id="1" version="1" visible="true" changeset="1" lat="1.0" lon="1.0" timestamp="2009-12-22" />
               </modify>
             </osmChange>
         """
-		
-		// should be OK 
-		parser = new OsmChangesetContentParser(doc) 
-		ChangesetDataSet ds = parser.parse()
-		
-		assert ds.size() == 1       
-		HistoryOsmPrimitive p = ds.getPrimitive(new SimplePrimitiveId(1, OsmPrimitiveType.NODE));
-		assert p != null
-		assert p.getId() == 1
-		assert p.getVersion() == 1
-		assert p.getChangesetId() == 1
-		assert p.getTimestamp() != null
-		assert ds.getModificationType(p.getPrimitiveId()) == ChangesetModificationType.UPDATED
-		assert ds.isUpdated(p.getPrimitiveId())
-	}
-	
-	/**
-	 * A simple changeset content document with one deleted node 
-	 * 
-	 */
-	@Test
-	public void test_OK_OneDeletedNode() {
-		OsmChangesetContentParser parser 
-		
-		def String doc = """
+
+        // should be OK
+        parser = new OsmChangesetContentParser(doc)
+        ChangesetDataSet ds = parser.parse()
+
+        assert ds.size() == 1
+        HistoryOsmPrimitive p = ds.getPrimitive(new SimplePrimitiveId(1, OsmPrimitiveType.NODE));
+        assert p != null
+        assert p.getId() == 1
+        assert p.getVersion() == 1
+        assert p.getChangesetId() == 1
+        assert p.getTimestamp() != null
+        assert ds.getModificationType(p.getPrimitiveId()) == ChangesetModificationType.UPDATED
+        assert ds.isUpdated(p.getPrimitiveId())
+    }
+
+    /**
+     * A simple changeset content document with one deleted node
+     *
+     */
+    @Test
+    public void test_OK_OneDeletedNode() {
+        OsmChangesetContentParser parser
+
+        def String doc = """
             <osmChange version="0.6" generator="OpenStreetMap server">
               <delete>
                 <node id="1" version="1" visible="true" changeset="1" lat="1.0" lon="1.0" timestamp="2009-12-22" />
               </delete>
             </osmChange>
         """
-		
-		// should be OK 
-		parser = new OsmChangesetContentParser(doc) 
-		ChangesetDataSet ds = parser.parse()
-		
-		assert ds.size() == 1       
-		HistoryOsmPrimitive p = ds.getPrimitive(new SimplePrimitiveId(1, OsmPrimitiveType.NODE));
-		assert p != null
-		assert p.getId() == 1
-		assert p.getVersion() == 1
-		assert p.getChangesetId() == 1
-		assert p.getTimestamp() != null
-		assert ds.getModificationType(p.getPrimitiveId()) == ChangesetModificationType.DELETED
-		assert ds.isDeleted(p.getPrimitiveId())
-	}
-	
-	/**
-	 * A more complex test with a document including nodes, ways, and relations. 
-	 * 
-	 */
-	@Test
-	public void test_OK_ComplexTestCase() {
-		OsmChangesetContentParser parser 
-		
-		def String doc = """
+
+        // should be OK
+        parser = new OsmChangesetContentParser(doc)
+        ChangesetDataSet ds = parser.parse()
+
+        assert ds.size() == 1
+        HistoryOsmPrimitive p = ds.getPrimitive(new SimplePrimitiveId(1, OsmPrimitiveType.NODE));
+        assert p != null
+        assert p.getId() == 1
+        assert p.getVersion() == 1
+        assert p.getChangesetId() == 1
+        assert p.getTimestamp() != null
+        assert ds.getModificationType(p.getPrimitiveId()) == ChangesetModificationType.DELETED
+        assert ds.isDeleted(p.getPrimitiveId())
+    }
+
+    /**
+     * A more complex test with a document including nodes, ways, and relations.
+     *
+     */
+    @Test
+    public void test_OK_ComplexTestCase() {
+        OsmChangesetContentParser parser
+
+        def String doc = """
             <osmChange version="0.6" generator="OpenStreetMap server">
               <create>
                 <node id="1" version="1" visible="true" changeset="1" lat="1.0" lon="1.0" timestamp="2009-12-22">
-		          <tag k="a.key" v="a.value" />
-		        </node>
+                  <tag k="a.key" v="a.value" />
+                </node>
               </create>
               <modify>
                <way id="2" version="2" visible="true" changeset="1" timestamp="2009-12-22">
-		          <nd ref="21"/>
-		          <nd ref="22"/>
-		       </way>
+                  <nd ref="21"/>
+                  <nd ref="22"/>
+               </way>
              </modify>
-		     <delete>
+             <delete>
                 <relation id="3" version="3" visible="true" changeset="1" timestamp="2009-12-22" />
               </delete>
             </osmChange>
         """
-		
-		// should be OK 
-		parser = new OsmChangesetContentParser(doc) 
-		ChangesetDataSet ds = parser.parse()
-		
-		assert ds.size() == 3       
-		
-		HistoryOsmPrimitive p = ds.getPrimitive(new SimplePrimitiveId(1, OsmPrimitiveType.NODE));
-		assert p != null
-		assert p.getId() == 1
-		assert p.getVersion() == 1
-		assert p.getChangesetId() == 1
-		assert p.getTimestamp() != null
-		assert ds.getModificationType(p.getPrimitiveId()) == ChangesetModificationType.CREATED
-		assert ds.isCreated(p.getPrimitiveId())
-		assert p.get("a.key") == "a.value"
-		
-		HistoryWay w = (HistoryWay)ds.getPrimitive(new SimplePrimitiveId(2, OsmPrimitiveType.WAY));
-		assert w != null
-		assert w.getId() == 2
-		assert w.getVersion() == 2
-		assert w.getChangesetId() == 1
-		assert w.getTimestamp() != null
-		assert ds.getModificationType(w.getPrimitiveId()) == ChangesetModificationType.UPDATED
-		assert ds.isUpdated(w.getPrimitiveId())
-		assert w.getNumNodes() == 2
-		assert w.getNodes() == [21,22]
-		
-		HistoryRelation r = (HistoryRelation)ds.getPrimitive(new SimplePrimitiveId(3, OsmPrimitiveType.RELATION));
-		assert r != null
-		assert r.getId() == 3
-		assert r.getVersion() == 3
-		assert r.getChangesetId() == 1
-		assert r.getTimestamp() != null
-		assert ds.getModificationType(r.getPrimitiveId()) == ChangesetModificationType.DELETED
-		assert ds.isDeleted(r.getPrimitiveId())
-	}
+
+        // should be OK
+        parser = new OsmChangesetContentParser(doc)
+        ChangesetDataSet ds = parser.parse()
+
+        assert ds.size() == 3
+
+        HistoryOsmPrimitive p = ds.getPrimitive(new SimplePrimitiveId(1, OsmPrimitiveType.NODE));
+        assert p != null
+        assert p.getId() == 1
+        assert p.getVersion() == 1
+        assert p.getChangesetId() == 1
+        assert p.getTimestamp() != null
+        assert ds.getModificationType(p.getPrimitiveId()) == ChangesetModificationType.CREATED
+        assert ds.isCreated(p.getPrimitiveId())
+        assert p.get("a.key") == "a.value"
+
+        HistoryWay w = (HistoryWay)ds.getPrimitive(new SimplePrimitiveId(2, OsmPrimitiveType.WAY));
+        assert w != null
+        assert w.getId() == 2
+        assert w.getVersion() == 2
+        assert w.getChangesetId() == 1
+        assert w.getTimestamp() != null
+        assert ds.getModificationType(w.getPrimitiveId()) == ChangesetModificationType.UPDATED
+        assert ds.isUpdated(w.getPrimitiveId())
+        assert w.getNumNodes() == 2
+        assert w.getNodes() == [21,22]
+
+        HistoryRelation r = (HistoryRelation)ds.getPrimitive(new SimplePrimitiveId(3, OsmPrimitiveType.RELATION));
+        assert r != null
+        assert r.getId() == 3
+        assert r.getVersion() == 3
+        assert r.getChangesetId() == 1
+        assert r.getTimestamp() != null
+        assert ds.getModificationType(r.getPrimitiveId()) == ChangesetModificationType.DELETED
+        assert ds.isDeleted(r.getPrimitiveId())
+    }
 }
diff --git a/test/unit/org/openstreetmap/josm/io/ParseWithChangesetReaderTest.groovy b/test/unit/org/openstreetmap/josm/io/ParseWithChangesetReaderTest.groovy
index 37ea52a..5fc3139 100644
--- a/test/unit/org/openstreetmap/josm/io/ParseWithChangesetReaderTest.groovy
+++ b/test/unit/org/openstreetmap/josm/io/ParseWithChangesetReaderTest.groovy
@@ -19,12 +19,12 @@ class ParseWithChangesetReaderTest {
         return ds
     }
 
-	/**
-	 * A new node with a changeset id. Ignore it.
-	 */
-	@Test
-	public void test_1() {
-		String doc = """\
+    /**
+     * A new node with a changeset id. Ignore it.
+     */
+    @Test
+    public void test_1() {
+        String doc = """\
          <osm version="0.6">
         <node id="-1" lat="0.0" lon="0.0" changeset="1">
             <tag k="external-id" v="-1"/>
@@ -32,180 +32,180 @@ class ParseWithChangesetReaderTest {
         </osm>
         """
 
-		DataSet ds = getDataSet(doc)
+        DataSet ds = getDataSet(doc)
         Node n = ds.nodes.find {it.get("external-id") == "-1"}
-		assert n != null
-		assert n.changesetId == 0
-	}
-
-	/**
-	 * A new node with an invalid changeset id. Ignore it.
-	 */
-	@Test
-	public void test_11() {
-		String doc = """\
+        assert n != null
+        assert n.changesetId == 0
+    }
+
+    /**
+     * A new node with an invalid changeset id. Ignore it.
+     */
+    @Test
+    public void test_11() {
+        String doc = """\
          <osm version="0.6">
         <node id="-1" lat="0.0" lon="0.0" changeset="0">
-		    <tag k="external-id" v="-1"/>
-		</node>
+            <tag k="external-id" v="-1"/>
+        </node>
         </osm>
         """
 
         DataSet ds = getDataSet(doc)
-		Node n = ds.nodes.find {it.get("external-id") == "-1"}
-		assert n != null
-		assert n.changesetId == 0
-	}
-
-	/**
-	 * A new node with an invalid changeset id. Ignore it.
-	 */
-	@Test
-	public void test_12() {
-		String doc = """\
+        Node n = ds.nodes.find {it.get("external-id") == "-1"}
+        assert n != null
+        assert n.changesetId == 0
+    }
+
+    /**
+     * A new node with an invalid changeset id. Ignore it.
+     */
+    @Test
+    public void test_12() {
+        String doc = """\
          <osm version="0.6">
         <node id="-1" lat="0.0" lon="0.0" changeset="-1">
-		    <tag k="external-id" v="-1"/>
+            <tag k="external-id" v="-1"/>
         </node>
         </osm>
         """
 
         DataSet ds = getDataSet(doc)
-		Node n = ds.nodes.find {it.get("external-id") == "-1"}
-		assert n != null
-		assert n.changesetId == 0
-	}
-
-	/**
-	 * A new node with an invalid changeset id. Ignore it.
-	 */
-	@Test
-	public void test_13() {
-		String doc = """\
+        Node n = ds.nodes.find {it.get("external-id") == "-1"}
+        assert n != null
+        assert n.changesetId == 0
+    }
+
+    /**
+     * A new node with an invalid changeset id. Ignore it.
+     */
+    @Test
+    public void test_13() {
+        String doc = """\
          <osm version="0.6">
         <node id="-1" lat="0.0" lon="0.0" changeset="aaa">
-		    <tag k="external-id" v="-1"/>
+            <tag k="external-id" v="-1"/>
         </node>
         </osm>
         """
 
         DataSet ds = getDataSet(doc)
-		Node n = ds.nodes.find {it.get("external-id") == "-1"}
-		assert n != null
-		assert n.changesetId == 0
-	}
-
-	/**
-	 * A new node with a missing changeset id. That's fine. The changeset id
-	 * is reset to 0.
-	 */
-	@Test
-	public void test_14() {
-		String doc = """\
+        Node n = ds.nodes.find {it.get("external-id") == "-1"}
+        assert n != null
+        assert n.changesetId == 0
+    }
+
+    /**
+     * A new node with a missing changeset id. That's fine. The changeset id
+     * is reset to 0.
+     */
+    @Test
+    public void test_14() {
+        String doc = """\
          <osm version="0.6">
         <node id="-1" lat="0.0" lon="0.0" >
-		    <tag k="external-id" v="-1"/>
+            <tag k="external-id" v="-1"/>
         </node>
         </osm>
         """
 
         DataSet ds = getDataSet(doc)
-		Node n = ds.nodes.find {it.get("external-id") == "-1"}
-		assert n != null
-		assert n.changesetId == 0
-	}
-
-
-	/**
-	 * An existing node with a missing changeset id. That's fine. The changeset id
-	 * is reset to 0.
-	 */
-	@Test
-	public void test_2() {
-		String doc = """\
+        Node n = ds.nodes.find {it.get("external-id") == "-1"}
+        assert n != null
+        assert n.changesetId == 0
+    }
+
+
+    /**
+     * An existing node with a missing changeset id. That's fine. The changeset id
+     * is reset to 0.
+     */
+    @Test
+    public void test_2() {
+        String doc = """\
          <osm version="0.6">
         <node id="1" lat="0.0" lon="0.0" version="1"/>
         </osm>
         """
 
         DataSet ds = getDataSet(doc)
-		Node n = ds.getPrimitiveById(1, OsmPrimitiveType.NODE)
-		assert n != null
-		assert n.uniqueId == 1
-		assert n.changesetId == 0
-	}
+        Node n = ds.getPrimitiveById(1, OsmPrimitiveType.NODE)
+        assert n != null
+        assert n.uniqueId == 1
+        assert n.changesetId == 0
+    }
 
-	/**
+    /**
      * An existing node with a valid changeset id id. That's fine. The changeset id
      * is applied.
      */
-	@Test
-	public void test_3() {
-		String doc = """\
+    @Test
+    public void test_3() {
+        String doc = """\
          <osm version="0.6">
         <node id="1" lat="0.0" lon="0.0" version="1" changeset="4"/>
         </osm>
         """
 
         DataSet ds = getDataSet(doc)
-		Node n = ds.getPrimitiveById(1, OsmPrimitiveType.NODE)
-		assert n != null
-		assert n.uniqueId == 1
-		assert n.changesetId == 4
-	}
-
-	/**
-	 * An existing node with an invalid changeset id. That's a problem. An exception
-	 * is thrown.
-	 */
-	@Test
-	public void test_4() {
-		String doc = """\
+        Node n = ds.getPrimitiveById(1, OsmPrimitiveType.NODE)
+        assert n != null
+        assert n.uniqueId == 1
+        assert n.changesetId == 4
+    }
+
+    /**
+     * An existing node with an invalid changeset id. That's a problem. An exception
+     * is thrown.
+     */
+    @Test
+    public void test_4() {
+        String doc = """\
          <osm version="0.6">
         <node id="1" lat="0.0" lon="0.0" version="1" changeset="-1"/>
         </osm>
         """
 
-		final shouldFail = new GroovyTestCase().&shouldFail
+        final shouldFail = new GroovyTestCase().&shouldFail
 
-		shouldFail(IllegalDataException) {
+        shouldFail(IllegalDataException) {
             DataSet ds = getDataSet(doc)
-		}
-	}
-	/**
-	 * An existing node with an invalid changeset id. That's a problem. An exception
-	 * is thrown.
-	 */
-	@Test
-	public void test_5() {
-		String doc = """\
+        }
+    }
+    /**
+     * An existing node with an invalid changeset id. That's a problem. An exception
+     * is thrown.
+     */
+    @Test
+    public void test_5() {
+        String doc = """\
          <osm version="0.6">
         <node id="1" lat="0.0" lon="0.0" version="1" changeset="0"/>
         </osm>
         """
 
-		final shouldFail = new GroovyTestCase().&shouldFail
+        final shouldFail = new GroovyTestCase().&shouldFail
 
-		shouldFail(IllegalDataException) {
+        shouldFail(IllegalDataException) {
             DataSet ds = getDataSet(doc)
-		}
-	}
-	/**
-	 * An existing node with an invalid changeset id. That's a problem. An exception
-	 * is thrown.
-	 */
-	@Test
-	public void test_6() {
-		String doc = """\
-	         <osm version="0.6">
-	        <node id="1" lat="0.0" lon="0.0" version="1" changeset="abc"/>
-	        </osm>
-	        """
-
-		final shouldFail = new GroovyTestCase().&shouldFail
-
-		shouldFail(IllegalDataException) {
+        }
+    }
+    /**
+     * An existing node with an invalid changeset id. That's a problem. An exception
+     * is thrown.
+     */
+    @Test
+    public void test_6() {
+        String doc = """\
+             <osm version="0.6">
+            <node id="1" lat="0.0" lon="0.0" version="1" changeset="abc"/>
+            </osm>
+            """
+
+        final shouldFail = new GroovyTestCase().&shouldFail
+
+        shouldFail(IllegalDataException) {
             DataSet ds = getDataSet(doc)
-		}
-	}
+        }
+    }
 }
diff --git a/test/unit/org/openstreetmap/josm/io/remotecontrol/RemoteControlTest.java b/test/unit/org/openstreetmap/josm/io/remotecontrol/RemoteControlTest.java
index ee0310c..6553301 100644
--- a/test/unit/org/openstreetmap/josm/io/remotecontrol/RemoteControlTest.java
+++ b/test/unit/org/openstreetmap/josm/io/remotecontrol/RemoteControlTest.java
@@ -71,8 +71,10 @@ public class RemoteControlTest {
                 public X509Certificate[] getAcceptedIssuers() {
                     return null;
                 }
+
                 public void checkClientTrusted(X509Certificate[] certs, String authType) {
                 }
+
                 public void checkServerTrusted(X509Certificate[] certs, String authType) {
                 }
             }
@@ -136,7 +138,7 @@ public class RemoteControlTest {
             StringBuilder responseBody = new StringBuilder();
             try (BufferedReader in = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8))) {
                 String s;
-                while((s = in.readLine()) != null) {
+                while ((s = in.readLine()) != null) {
                     responseBody.append(s);
                     responseBody.append("\n");
                 }
diff --git a/test/unit/org/openstreetmap/josm/io/remotecontrol/handler/ImportHandlerTest.java b/test/unit/org/openstreetmap/josm/io/remotecontrol/handler/ImportHandlerTest.java
index aaede90..b51fa62 100644
--- a/test/unit/org/openstreetmap/josm/io/remotecontrol/handler/ImportHandlerTest.java
+++ b/test/unit/org/openstreetmap/josm/io/remotecontrol/handler/ImportHandlerTest.java
@@ -1,10 +1,11 @@
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.io.remotecontrol.handler;
 
+import static org.junit.Assert.assertThat;
+
 import org.hamcrest.CoreMatchers;
 import org.junit.Test;
 
-import static org.junit.Assert.*;
-
 public class ImportHandlerTest {
 
     @Test
@@ -13,7 +14,5 @@ public class ImportHandlerTest {
         final ImportHandler req = new ImportHandler();
         req.setUrl("http://localhost:8111/import?url=http://localhost:8888/relations?relations=19711&mode=recursive");
         assertThat(req.args.get("url"), CoreMatchers.is("http://localhost:8888/relations?relations=19711&mode=recursive"));
-
     }
-
 }
diff --git a/test/unit/org/openstreetmap/josm/io/remotecontrol/handler/RequestHandlerTest.java b/test/unit/org/openstreetmap/josm/io/remotecontrol/handler/RequestHandlerTest.java
index e74dded..611f776 100644
--- a/test/unit/org/openstreetmap/josm/io/remotecontrol/handler/RequestHandlerTest.java
+++ b/test/unit/org/openstreetmap/josm/io/remotecontrol/handler/RequestHandlerTest.java
@@ -1,14 +1,15 @@
+// License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.io.remotecontrol.handler;
 
-import org.junit.Test;
-import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
 
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.*;
+import org.junit.Test;
+import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault;
 
 public class RequestHandlerTest {
 
@@ -41,7 +42,6 @@ public class RequestHandlerTest {
         return req.args;
     }
 
-
     @Test
     public void testRequestParameter1() {
         final Map<String, String> expected = new HashMap<>();
@@ -69,7 +69,10 @@ public class RequestHandlerTest {
      */
     @Test
     public void testRequestParameter4() {
-        assertThat(getRequestParameter("http://example.com/:@-._~!$&'()*+,=;:@-._~!$&'()*+,=:@-._~!$&'()*+,==?/?:@-._~!$'()*+,;=/?:@-._~!$'()*+,;==#/?:@-._~!$&'()*+,;="),
+        assertThat(getRequestParameter(
+                // CHECKSTYLE.OFF: LineLength
+                "http://example.com/:@-._~!$&'()*+,=;:@-._~!$&'()*+,=:@-._~!$&'()*+,==?/?:@-._~!$'()*+,;=/?:@-._~!$'()*+,;==#/?:@-._~!$&'()*+,;="),
+                // CHECKSTYLE.ON: LineLength
                 is(Collections.singletonMap("/?:@-._~!$'()* ,;", "/?:@-._~!$'()* ,;==")));
     }
 
@@ -81,5 +84,4 @@ public class RequestHandlerTest {
         assertThat(getRequestParameter("http://example.com/?space=%20&tab=%09"),
                 is(expected));
     }
-
 }
diff --git a/test/unit/org/openstreetmap/josm/io/session/SessionReaderTest.java b/test/unit/org/openstreetmap/josm/io/session/SessionReaderTest.java
index 5440c0a..4fcdef3 100644
--- a/test/unit/org/openstreetmap/josm/io/session/SessionReaderTest.java
+++ b/test/unit/org/openstreetmap/josm/io/session/SessionReaderTest.java
@@ -2,6 +2,8 @@
 package org.openstreetmap.josm.io.session;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 
 import java.io.File;
@@ -63,7 +65,7 @@ public class SessionReaderTest {
     public void testReadOsm() throws IOException, IllegalDataException {
         for (String file : new String[]{"osm.jos", "osm.joz"}) {
             List<Layer> layers = testRead(file);
-            assertTrue(layers.size() == 1);
+            assertSame(layers.size(), 1);
             assertTrue(layers.get(0) instanceof OsmDataLayer);
             OsmDataLayer osm = (OsmDataLayer) layers.get(0);
             assertEquals(osm.getName(), "OSM layer name");
@@ -79,7 +81,7 @@ public class SessionReaderTest {
     public void testReadGpx() throws IOException, IllegalDataException {
         for (String file : new String[]{"gpx.jos", "gpx.joz", "nmea.jos"}) {
             List<Layer> layers = testRead(file);
-            assertTrue(layers.size() == 1);
+            assertSame(layers.size(), 1);
             assertTrue(layers.get(0) instanceof GpxLayer);
             GpxLayer gpx = (GpxLayer) layers.get(0);
             assertEquals(gpx.getName(), "GPX layer name");
@@ -94,7 +96,7 @@ public class SessionReaderTest {
     @Test
     public void testReadGpxAndMarker() throws IOException, IllegalDataException {
         List<Layer> layers = testRead("gpx_markers.joz");
-        assertTrue(layers.size() == 2);
+        assertSame(layers.size(), 2);
         GpxLayer gpx = null;
         MarkerLayer marker = null;
         for (Layer layer : layers) {
@@ -104,8 +106,8 @@ public class SessionReaderTest {
                 marker = (MarkerLayer) layer;
             }
         }
-        assertTrue(gpx != null);
-        assertTrue(marker != null);
+        assertNotNull(gpx);
+        assertNotNull(marker);
         assertEquals(gpx.getName(), "GPX layer name");
         assertEquals(marker.getName(), "Marker layer name");
     }
diff --git a/test/unit/org/openstreetmap/josm/io/session/SessionWriterTest.java b/test/unit/org/openstreetmap/josm/io/session/SessionWriterTest.java
index efb8180..ed8ce04 100644
--- a/test/unit/org/openstreetmap/josm/io/session/SessionWriterTest.java
+++ b/test/unit/org/openstreetmap/josm/io/session/SessionWriterTest.java
@@ -32,6 +32,7 @@ public class SessionWriterTest {
         public OsmHeadlessJosExporter(OsmDataLayer layer) {
             super(layer);
         }
+
         @Override
         public boolean requiresZip() {
             return false;
@@ -42,6 +43,7 @@ public class SessionWriterTest {
         public OsmHeadlessJozExporter(OsmDataLayer layer) {
             super(layer);
         }
+
         @Override
         public boolean requiresZip() {
             return true;
@@ -92,7 +94,7 @@ public class SessionWriterTest {
             exporters.put(l, SessionWriter.getSessionLayerExporter(l));
         }
         SessionWriter sw = new SessionWriter(layers, -1, exporters, new MultiMap<Layer, Layer>(), zip);
-        File file = new File(System.getProperty("java.io.tmpdir"), getClass().getName()+(zip?".joz":".jos"));
+        File file = new File(System.getProperty("java.io.tmpdir"), getClass().getName()+(zip ? ".joz" : ".jos"));
         try {
             sw.write(file);
         } finally {
diff --git a/test/unit/org/openstreetmap/josm/tools/AlphanumComparatorTest.groovy b/test/unit/org/openstreetmap/josm/tools/AlphanumComparatorTest.groovy
index 5c4c4c4..a88a86b 100644
--- a/test/unit/org/openstreetmap/josm/tools/AlphanumComparatorTest.groovy
+++ b/test/unit/org/openstreetmap/josm/tools/AlphanumComparatorTest.groovy
@@ -15,4 +15,4 @@ class AlphanumComparatorTest extends GroovyTestCase {
         assert lst == Arrays.asList("a5", "a100", "a00999", "b1", "b20")
     }
 
-}
\ No newline at end of file
+}
diff --git a/test/unit/org/openstreetmap/josm/tools/BugReportExceptionHandlerTest.java b/test/unit/org/openstreetmap/josm/tools/BugReportExceptionHandlerTest.java
index a4ccb78..f159fdd 100644
--- a/test/unit/org/openstreetmap/josm/tools/BugReportExceptionHandlerTest.java
+++ b/test/unit/org/openstreetmap/josm/tools/BugReportExceptionHandlerTest.java
@@ -27,13 +27,12 @@ public class BugReportExceptionHandlerTest {
      */
     @Before
     public void setUp() {
-        Main.commandLineArgs = new String[0];
         JOSMFixture.createUnitTestFixture().init();
     }
 
     /**
      * Test method for {@link org.openstreetmap.josm.tools.BugReportExceptionHandler#getBugReportUrl(java.lang.String)}.
-     * @throws IOException
+     * @throws IOException if any I/O error occurs
      */
     @Test
     public void testGetBugReportUrl() throws IOException {
diff --git a/test/unit/org/openstreetmap/josm/tools/ExifReaderTest.java b/test/unit/org/openstreetmap/josm/tools/ExifReaderTest.java
index 50c652c..19658b5 100644
--- a/test/unit/org/openstreetmap/josm/tools/ExifReaderTest.java
+++ b/test/unit/org/openstreetmap/josm/tools/ExifReaderTest.java
@@ -22,20 +22,19 @@ import org.openstreetmap.josm.data.coor.LatLon;
 public class ExifReaderTest {
 
     private File orientationSampleFile, directionSampleFile;
-    
+
     /**
      * Setup test
-     * @throws Exception
      */
     @Before
-    public void setUp() throws Exception {
+    public void setUp() {
         directionSampleFile = new File("data_nodist/exif-example_direction.jpg");
         orientationSampleFile = new File("data_nodist/exif-example_orientation=6.jpg");
     }
 
-    /** 
+    /**
      * Test time extraction
-     * @throws ParseException 
+     * @throws ParseException if {@link ExifReader#readTime} fails to parse date/time of sample file
      */
     @Test
     public void testReadTime() throws ParseException {
@@ -51,7 +50,7 @@ public class ExifReaderTest {
         Integer orientation = ExifReader.readOrientation(orientationSampleFile);
         assertEquals(Integer.valueOf(6), orientation);
     }
-    
+
     /**
      * Test coordinates extraction
      */
diff --git a/test/unit/org/openstreetmap/josm/tools/GeometryTest.java b/test/unit/org/openstreetmap/josm/tools/GeometryTest.java
index b1c39bf..7731f8c 100644
--- a/test/unit/org/openstreetmap/josm/tools/GeometryTest.java
+++ b/test/unit/org/openstreetmap/josm/tools/GeometryTest.java
@@ -2,9 +2,8 @@
 package org.openstreetmap.josm.tools;
 
 import org.junit.Assert;
-import org.junit.Test;
 import org.junit.BeforeClass;
-
+import org.junit.Test;
 import org.openstreetmap.josm.JOSMFixture;
 import org.openstreetmap.josm.data.coor.EastNorth;
 
@@ -29,14 +28,14 @@ public class GeometryTest {
         EastNorth p4 = new EastNorth(-9477814.628697459, 1.5392962142181376E7);
 
         EastNorth intersectionPoint = Geometry.getLineLineIntersection(p1, p2, p3, p4);
-        
-        EastNorth d1 = intersectionPoint.sub(p3);
-        EastNorth d2 = p2.sub(p1);
+
+        EastNorth d1 = p3.subtract(intersectionPoint);
+        EastNorth d2 = p1.subtract(p2);
         Double crossProduct = d1.east()*d2.north() - d1.north()*d2.east();
         Double scalarProduct = d1.east()*d2.east() + d1.north()*d2.north();
         Double len1 = d1.length();
         Double len2 = d2.length();
-        
+
         Double angle1 = Geometry.getCornerAngle(p1, p2, intersectionPoint);
         Double angle2 = Geometry.getCornerAngle(p3, p4, intersectionPoint);
         Assert.assertTrue("intersection point not on line, angle: " + angle1,
diff --git a/test/unit/org/openstreetmap/josm/tools/OsmUrlToBoundsTest.java b/test/unit/org/openstreetmap/josm/tools/OsmUrlToBoundsTest.java
index 1b42e02..88e9540 100644
--- a/test/unit/org/openstreetmap/josm/tools/OsmUrlToBoundsTest.java
+++ b/test/unit/org/openstreetmap/josm/tools/OsmUrlToBoundsTest.java
@@ -3,6 +3,7 @@ package org.openstreetmap.josm.tools;
 
 import org.junit.Assert;
 import org.junit.Test;
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Bounds;
 
 /**
@@ -14,21 +15,36 @@ public class OsmUrlToBoundsTest {
      */
     private static final ParseTestItem[] parseTestData = {
         new ParseTestItem("https://www.openstreetmap.org", null),
-        new ParseTestItem("https://www.openstreetmap.org/?bbox=-0.489,51.28,0.236,51.686", new Bounds(51.28, -0.489, 51.686, 0.236)),
-        new ParseTestItem("https://www.openstreetmap.org/?minlon=-0.489&minlat=51.28&maxlon=0.236&maxlat=51.686", new Bounds(51.28, -0.489, 51.686, 0.236)),
-        new ParseTestItem("https://www.openstreetmap.org/?maxlat=51.686&maxlon=0.236&minlat=51.28&minlon=-0.489", new Bounds(51.28, -0.489, 51.686, 0.236)),
-        new ParseTestItem("https://www.openstreetmap.org/?zoom=17&lat=51.71873&lon=8.76164", OsmUrlToBounds.positionToBounds(51.71873, 8.76164, 17)),
-        new ParseTestItem("https://www.openstreetmap.org/?lon=8.76164&lat=51.71873&zoom=17&foo", OsmUrlToBounds.positionToBounds(51.71873, 8.76164, 17)),
-        new ParseTestItem("https://www.openstreetmap.org/?mlon=8.76164&mlat=51.71873", OsmUrlToBounds.positionToBounds(51.71873, 8.76164, 18)),
-        new ParseTestItem("http://osm.org/go/euulwp", OsmUrlToBounds.positionToBounds(51.48262023925781, -0.29937744140625, 8)),
-        new ParseTestItem("https://www.openstreetmap.org/#map=17/51.71873/8.76164", OsmUrlToBounds.positionToBounds(51.71873, 8.76164, 17)),
-        new ParseTestItem("https://www.openstreetmap.org/#map=17/51.71873/8.76164&layers=CN", OsmUrlToBounds.positionToBounds(51.71873, 8.76164, 17)),
-        new ParseTestItem("https%3A%2F%2Fwww.openstreetmap.org%2F%23map%3D16%2F51.71873%2F8.76164", OsmUrlToBounds.positionToBounds(51.71873, 8.76164, 16)),
-        new ParseTestItem("https%3A%2F%2Fwww.openstreetmap.org%2F%23map%3D16%2F51.71873%2F8.76164%26layers%3DCN", OsmUrlToBounds.positionToBounds(51.71873, 8.76164, 16)),
-        new ParseTestItem("https://www.openstreetmap.org/?note=26325#map=18/40.86215/-75.75020", OsmUrlToBounds.positionToBounds(40.86215, -75.75020, 18)),
-        new ParseTestItem("https://www.openstreetmap.org/?note=26325#map=18/40.86215/-75.75020&layers=N", OsmUrlToBounds.positionToBounds(40.86215, -75.75020, 18)),
-        new ParseTestItem("https://www.openstreetmap.org/?mlat=51.5&mlon=-0.01#map=10/51.4831/-0.1270", OsmUrlToBounds.positionToBounds(51.4831, -0.1270, 10)),
-        new ParseTestItem("https://www.openstreetmap.org/?mlat=51.5&mlon=-0.01#map=10/51.4831/-0.3509&layers=T", OsmUrlToBounds.positionToBounds(51.4831, -0.3509, 10)),
+        new ParseTestItem("https://www.openstreetmap.org/?bbox=-0.489,51.28,0.236,51.686",
+                new Bounds(51.28, -0.489, 51.686, 0.236)),
+        new ParseTestItem("https://www.openstreetmap.org/?minlon=-0.489&minlat=51.28&maxlon=0.236&maxlat=51.686",
+                new Bounds(51.28, -0.489, 51.686, 0.236)),
+        new ParseTestItem("https://www.openstreetmap.org/?maxlat=51.686&maxlon=0.236&minlat=51.28&minlon=-0.489",
+                new Bounds(51.28, -0.489, 51.686, 0.236)),
+        new ParseTestItem("https://www.openstreetmap.org/?zoom=17&lat=51.71873&lon=8.76164",
+                OsmUrlToBounds.positionToBounds(51.71873, 8.76164, 17)),
+        new ParseTestItem("https://www.openstreetmap.org/?lon=8.76164&lat=51.71873&zoom=17&foo",
+                OsmUrlToBounds.positionToBounds(51.71873, 8.76164, 17)),
+        new ParseTestItem("https://www.openstreetmap.org/?mlon=8.76164&mlat=51.71873",
+                OsmUrlToBounds.positionToBounds(51.71873, 8.76164, 18)),
+        new ParseTestItem("http://osm.org/go/euulwp",
+                OsmUrlToBounds.positionToBounds(51.48262023925781, -0.29937744140625, 8)),
+        new ParseTestItem("https://www.openstreetmap.org/#map=17/51.71873/8.76164",
+                OsmUrlToBounds.positionToBounds(51.71873, 8.76164, 17)),
+        new ParseTestItem("https://www.openstreetmap.org/#map=17/51.71873/8.76164&layers=CN",
+                OsmUrlToBounds.positionToBounds(51.71873, 8.76164, 17)),
+        new ParseTestItem("https%3A%2F%2Fwww.openstreetmap.org%2F%23map%3D16%2F51.71873%2F8.76164",
+                OsmUrlToBounds.positionToBounds(51.71873, 8.76164, 16)),
+        new ParseTestItem("https%3A%2F%2Fwww.openstreetmap.org%2F%23map%3D16%2F51.71873%2F8.76164%26layers%3DCN",
+                OsmUrlToBounds.positionToBounds(51.71873, 8.76164, 16)),
+        new ParseTestItem("https://www.openstreetmap.org/?note=26325#map=18/40.86215/-75.75020",
+                OsmUrlToBounds.positionToBounds(40.86215, -75.75020, 18)),
+        new ParseTestItem("https://www.openstreetmap.org/?note=26325#map=18/40.86215/-75.75020&layers=N",
+                OsmUrlToBounds.positionToBounds(40.86215, -75.75020, 18)),
+        new ParseTestItem("https://www.openstreetmap.org/?mlat=51.5&mlon=-0.01#map=10/51.4831/-0.1270",
+                OsmUrlToBounds.positionToBounds(51.4831, -0.1270, 10)),
+        new ParseTestItem("https://www.openstreetmap.org/?mlat=51.5&mlon=-0.01#map=10/51.4831/-0.3509&layers=T",
+                OsmUrlToBounds.positionToBounds(51.4831, -0.3509, 10)),
         new ParseTestItem("https://www.openstreetmap.org/#map", null),
         new ParseTestItem("https://www.openstreetmap.org/#map=foo", null),
         new ParseTestItem("https://www.openstreetmap.org/#map=fooz/foolat/foolon", null)
@@ -55,6 +71,9 @@ public class OsmUrlToBoundsTest {
                 bounds = OsmUrlToBounds.parse(item.url);
             } catch (IllegalArgumentException e) {
                 // Ignore. check if bounds is null after
+                if (Main.isTraceEnabled()) {
+                    Main.trace(e.getMessage());
+                }
             }
             Assert.assertEquals(item.url, item.bounds, bounds);
         }
diff --git a/test/unit/org/openstreetmap/josm/tools/OverpassTurboQueryWizardTest.java b/test/unit/org/openstreetmap/josm/tools/OverpassTurboQueryWizardTest.java
new file mode 100644
index 0000000..7b6af54
--- /dev/null
+++ b/test/unit/org/openstreetmap/josm/tools/OverpassTurboQueryWizardTest.java
@@ -0,0 +1,44 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.tools;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.openstreetmap.josm.JOSMFixture;
+
+public class OverpassTurboQueryWizardTest {
+
+    /**
+     * Setup test.
+     */
+    @BeforeClass
+    public static void setUp() {
+        JOSMFixture.createUnitTestFixture().init(true);
+        OverpassTurboQueryWizard.getInstance();
+    }
+
+    @Test
+    public void testKeyValue() throws Exception {
+        final String query = OverpassTurboQueryWizard.getInstance().constructQuery("amenity=drinking_water");
+        assertThat(query, is("" +
+                "[timeout:25];\n" +
+                "// gather results\n" +
+                "(\n" +
+                "  // query part for: “amenity=drinking_water”\n" +
+                "  node[\"amenity\"=\"drinking_water\"];\n" +
+                "  way[\"amenity\"=\"drinking_water\"];\n" +
+                "  relation[\"amenity\"=\"drinking_water\"];\n" +
+                ");\n" +
+                "// print results\n" +
+                "out meta;\n" +
+                ">;\n" +
+                "out meta;"));
+    }
+
+    @Test(expected = OverpassTurboQueryWizard.ParseException.class)
+    public void testErroneous() throws Exception {
+        OverpassTurboQueryWizard.getInstance().constructQuery("foo");
+    }
+}
diff --git a/test/unit/org/openstreetmap/josm/tools/TextTagParserTest.java b/test/unit/org/openstreetmap/josm/tools/TextTagParserTest.java
index 8eda804..47a1f2c 100644
--- a/test/unit/org/openstreetmap/josm/tools/TextTagParserTest.java
+++ b/test/unit/org/openstreetmap/josm/tools/TextTagParserTest.java
@@ -41,7 +41,7 @@ public class TextTagParserTest {
         String txt = "   a  \t  1   \n\n\n  b\t2 \n c \t the value with \"quotes\"";
         Map<String, String> correctTags = new HashMap<String, String>() { {
             put("a", "1"); put("b", "2"); put("c", "the value with \"quotes\"");
-        }};
+        } };
         Map<String, String> tags = TextTagParser.readTagsFromText(txt);
         Assert.assertEquals(correctTags, tags);
     }
@@ -52,7 +52,7 @@ public class TextTagParserTest {
         Map<String, String> correctTags = new HashMap<String, String>() { {
             put("key1", "value"); put("key2", "long value");
             put("tag3", "hotel \"Quote\"");
-        }};
+        } };
         Map<String, String> tags = TextTagParser.readTagsFromText(txt);
         Assert.assertEquals(correctTags, tags);
     }
@@ -62,17 +62,17 @@ public class TextTagParserTest {
         String txt;
         Map<String, String> tags, correctTags;
         txt = "{ \"a\":\"1\", \"b\":\"2 3 4\" }";
-        correctTags= new HashMap<String, String>() { {  put("a", "1"); put("b", "2 3 4"); }};
+        correctTags = new HashMap<String, String>() { { put("a", "1"); put("b", "2 3 4"); } };
         tags = TextTagParser.readTagsFromText(txt);
         Assert.assertEquals(correctTags, tags);
 
         txt = "\"a\"  :     \"1 1 1\", \"b2\"  :\"2 \\\"3 qwe\\\" 4\"";
-        correctTags= new HashMap<String, String>() { { put("a", "1 1 1"); put("b2", "2 \"3 qwe\" 4");}};
+        correctTags = new HashMap<String, String>() { { put("a", "1 1 1"); put("b2", "2 \"3 qwe\" 4"); } };
         tags = TextTagParser.readTagsFromText(txt);
         Assert.assertEquals(correctTags, tags);
 
         txt = " \"aыыы\"   :    \"val\\\"\\\"\\\"ue1\"";
-        correctTags= new HashMap<String, String>() { { put("aыыы", "val\"\"\"ue1");} };
+        correctTags = new HashMap<String, String>() { { put("aыыы", "val\"\"\"ue1"); } };
         tags = TextTagParser.readTagsFromText(txt);
         Assert.assertEquals(correctTags, tags);
     }
@@ -82,7 +82,7 @@ public class TextTagParserTest {
         String txt = "a 1 b=2 c=\"hello === \\\"\\\"world\"";
         Map<String, String> correctTags = new HashMap<String, String>() { {
             put("a", "1"); put("b", "2"); put("c", "hello === \"\"world");
-        }};
+        } };
         Map<String, String> tags = TextTagParser.readTagsFromText(txt);
         Assert.assertEquals(correctTags, tags);
     }
@@ -94,4 +94,12 @@ public class TextTagParserTest {
         Assert.assertEquals(Collections.EMPTY_MAP, tags);
 
     }
+
+    @Test
+    public void testTab() throws Exception {
+        Assert.assertEquals(TextTagParser.readTagsFromText("shop\tjewelry"), Collections.singletonMap("shop", "jewelry"));
+        Assert.assertEquals(TextTagParser.readTagsFromText("!shop\tjewelry"), Collections.singletonMap("shop", "jewelry"));
+        Assert.assertEquals(TextTagParser.readTagsFromText("!!!shop\tjewelry"), Collections.singletonMap("shop", "jewelry"));
+        Assert.assertEquals(TextTagParser.readTagsFromText("shop\t\t\tjewelry"), Collections.singletonMap("shop", "jewelry"));
+    }
 }
diff --git a/test/unit/org/openstreetmap/josm/tools/UtilsTest.java b/test/unit/org/openstreetmap/josm/tools/UtilsTest.java
index ce4c2f5..eba4de6 100644
--- a/test/unit/org/openstreetmap/josm/tools/UtilsTest.java
+++ b/test/unit/org/openstreetmap/josm/tools/UtilsTest.java
@@ -59,17 +59,21 @@ public class UtilsTest {
         Assert.assertEquals("a", Utils.strip(someWhite+"a"+someWhite));
         Assert.assertEquals("ab", Utils.strip(someWhite+"ab"+someWhite));
         Assert.assertEquals("abc", Utils.strip(someWhite+"abc"+someWhite));
+
+        // extended skip
+        Assert.assertEquals("a", Utils.strip("a", "b"));
+        Assert.assertEquals("b", Utils.strip("acbcac", "ac"));
     }
 
     /**
      * Test of {@link Utils#toHexString} method.
      */
     @Test
-    public void testToHexString(){
+    public void testToHexString() {
         Assert.assertEquals("", Utils.toHexString(null));
         Assert.assertEquals("", Utils.toHexString(new byte[0]));
         Assert.assertEquals("01", Utils.toHexString(new byte[]{0x1}));
-        Assert.assertEquals("0102", Utils.toHexString(new byte[]{0x1,0x2}));
+        Assert.assertEquals("0102", Utils.toHexString(new byte[]{0x1, 0x2}));
         Assert.assertEquals("12", Utils.toHexString(new byte[]{0x12}));
         Assert.assertEquals("127f", Utils.toHexString(new byte[]{0x12, 0x7f}));
         Assert.assertEquals("fedc", Utils.toHexString(new byte[]{(byte) 0xfe, (byte) 0xdc}));
@@ -125,4 +129,16 @@ public class UtilsTest {
         assertThat(Utils.getDurationString((long) (1.5 * 24 * 60 * 60 * 1000)), is("1 day 12 h"));
         assertThat(Utils.getDurationString((long) (8.5 * 24 * 60 * 60 * 1000)), is("8 days 12 h"));
     }
+
+    @Test
+    public void testEscapeReservedCharactersHTML() throws Exception {
+        assertThat(Utils.escapeReservedCharactersHTML("foo -> bar -> '&'"), is("foo -> bar -> '&'"));
+    }
+
+    @Test
+    public void testRestrictStringLines() throws Exception {
+        assertThat(Utils.restrictStringLines("1\n2\n3", 2), is("1\n..."));
+        assertThat(Utils.restrictStringLines("1\n2\n3", 3), is("1\n2\n3"));
+        assertThat(Utils.restrictStringLines("1\n2\n3", 4), is("1\n2\n3"));
+    }
 }
diff --git a/test/unit/org/openstreetmap/josm/tools/date/DateUtilsTest.java b/test/unit/org/openstreetmap/josm/tools/date/DateUtilsTest.java
index 1daccec..91a703b 100644
--- a/test/unit/org/openstreetmap/josm/tools/date/DateUtilsTest.java
+++ b/test/unit/org/openstreetmap/josm/tools/date/DateUtilsTest.java
@@ -2,7 +2,7 @@
 package org.openstreetmap.josm.tools.date;
 
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertThat;
 
 import org.junit.Test;
 
@@ -17,4 +17,4 @@ public class DateUtilsTest {
     public void testNoteDate() throws Exception {
         assertThat(DateUtils.fromString("2014-11-29 22:08:50 UTC").getTime(), is(1417298930000L));
     }
-}
\ No newline at end of file
+}
diff --git a/test/unit/org/openstreetmap/josm/tools/template_engine/TemplateEngineTest.java b/test/unit/org/openstreetmap/josm/tools/template_engine/TemplateEngineTest.java
index 2b48077..ac83552 100644
--- a/test/unit/org/openstreetmap/josm/tools/template_engine/TemplateEngineTest.java
+++ b/test/unit/org/openstreetmap/josm/tools/template_engine/TemplateEngineTest.java
@@ -35,7 +35,8 @@ public class TemplateEngineTest {
     @Test
     public void testVariable() throws ParseError {
         TemplateParser parser = new TemplateParser("abc{var}\\{ef\\$\\{g");
-        ReflectionAssert.assertReflectionEquals(CompoundTemplateEntry.fromArray(new StaticText("abc"), new Variable("var"), new StaticText("{ef${g")), parser.parse());
+        ReflectionAssert.assertReflectionEquals(CompoundTemplateEntry.fromArray(new StaticText("abc"),
+                new Variable("var"), new StaticText("{ef${g")), parser.parse());
     }
 
     @Test
@@ -91,10 +92,12 @@ public class TemplateEngineTest {
                     return null;
             }
         }
+
         @Override
         public boolean evaluateCondition(Match condition) {
             return true;
         }
+
         @Override
         public List<String> getTemplateKeys() {
             return Arrays.asList("name", "number");
@@ -213,7 +216,8 @@ public class TemplateEngineTest {
 
     @Test
     public void testMultilevel() throws ParseError {
-        TemplateParser parser = new TemplateParser("!{(parent(parent(type=type1)) type=grandparent) | (parent type=type2 type=parent2) '{name}'}");
+        TemplateParser parser = new TemplateParser(
+                "!{(parent(parent(type=type1)) type=grandparent) | (parent type=type2 type=parent2) '{name}'}");
         DatasetFactory ds = new DatasetFactory();
         Relation parent1 = ds.addRelation(1);
         parent1.put("type", "parent1");
@@ -243,13 +247,13 @@ public class TemplateEngineTest {
         Assert.assertEquals("grandparent_namename_parent2", sb.toString());
     }
 
-    @Test(expected=ParseError.class)
+    @Test(expected = ParseError.class)
     public void testErrorsNot() throws ParseError {
         TemplateParser parser = new TemplateParser("!{-parent() '{name}'}");
         parser.parse();
     }
 
-    @Test(expected=ParseError.class)
+    @Test(expected = ParseError.class)
     public void testErrorOr() throws ParseError {
         TemplateParser parser = new TemplateParser("!{parent() | type=type1 '{name}'}");
         parser.parse();
diff --git a/tools/checkstyle/josm_checks.xml b/tools/checkstyle/josm_checks.xml
new file mode 100644
index 0000000..c2ae031
--- /dev/null
+++ b/tools/checkstyle/josm_checks.xml
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.3//EN" "http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
+
+<!--
+    This configuration file was written by the eclipse-cs plugin configuration editor
+-->
+<!--
+    Checkstyle-Configuration: JOSM
+    Description: 
+JOSM Checkstyle rules
+-->
+<module name="Checker">
+  <property name="severity" value="warning"/>
+  <module name="TreeWalker">
+    <module name="FileContentsHolder"/>
+    <module name="MissingDeprecated"/>
+    <module name="MissingOverride"/>
+    <module name="PackageAnnotation"/>
+    <module name="AnnotationLocation">
+      <property name="allowSamelineMultipleAnnotations" value="true"/>
+    </module>
+    <module name="AnnotationUseStyle"/>
+    <module name="JavadocStyle">
+      <property name="checkFirstSentence" value="false"/>
+      <property name="checkHtml" value="false"/>
+    </module>
+    <module name="NonEmptyAtclauseDescription"/>
+    <module name="AtclauseOrder"/>
+    <module name="AvoidStarImport"/>
+    <module name="RedundantImport"/>
+    <module name="UnusedImports">
+      <property name="processJavadoc" value="true"/>
+    </module>
+    <module name="AnonInnerLength">
+      <property name="max" value="50"/>
+    </module>
+    <module name="ExecutableStatementCount">
+      <property name="max" value="150"/>
+      <property name="tokens" value="INSTANCE_INIT,STATIC_INIT,METHOD_DEF,CTOR_DEF"/>
+    </module>
+    <module name="LineLength">
+      <property name="max" value="145"/>
+      <property name="tabWidth" value="4"/>
+    </module>
+    <module name="MethodLength">
+      <property name="max" value="300"/>
+    </module>
+    <module name="ParameterNumber">
+      <property name="max" value="10"/>
+    </module>
+    <module name="OuterTypeNumber"/>
+    <module name="MethodCount"/>
+    <module name="GenericWhitespace"/>
+    <module name="EmptyForInitializerPad"/>
+    <module name="EmptyForIteratorPad"/>
+    <module name="NoWhitespaceAfter"/>
+    <module name="NoWhitespaceBefore"/>
+    <module name="MethodParamPad"/>
+    <module name="ParenPad"/>
+    <module name="TypecastParenPad">
+      <property name="tokens" value="RPAREN,TYPECAST"/>
+    </module>
+    <module name="WhitespaceAfter"/>
+    <module name="WhitespaceAround">
+      <property name="tokens" value="ASSIGN,BAND,BAND_ASSIGN,BOR,BOR_ASSIGN,BSR,BSR_ASSIGN,BXOR,BXOR_ASSIGN,COLON,DIV_ASSIGN,DO_WHILE,EQUAL,GE,GT,LAND,LCURLY,LE,LITERAL_ASSERT,LITERAL_CATCH,LITERAL_DO,LITERAL_ELSE,LITERAL_FINALLY,LITERAL_FOR,LITERAL_IF,LITERAL_RETURN,LITERAL_SYNCHRONIZED,LITERAL_TRY,LITERAL_WHILE,LOR,LT,MINUS_ASSIGN,MOD,MOD_ASSIGN,NOT_EQUAL,PLUS_ASSIGN,QUESTION,RCURLY,SL,SLIST,SL_ASSIGN,SR,SR_ASSIGN,STAR_ASSIGN,TYPE_EXTENSION_AND"/>
+      <property name="allowEmptyConstructors" value="true"/>
+      <property name="allowEmptyMethods" value="true"/>
+      <property name="allowEmptyTypes" value="true"/>
+    </module>
+    <module name="EmptyLineSeparator">
+      <property name="tokens" value="CLASS_DEF,ENUM_DEF,INTERFACE_DEF,CTOR_DEF,METHOD_DEF,STATIC_INIT"/>
+      <property name="allowNoEmptyLineBetweenFields" value="true"/>
+      <property name="allowMultipleEmptyLines" value="false"/>
+    </module>
+    <module name="ModifierOrder"/>
+    <module name="RedundantModifier"/>
+    <module name="AvoidNestedBlocks">
+      <property name="allowInSwitchCase" value="true"/>
+    </module>
+    <module name="EmptyBlock">
+      <property name="tokens" value="LITERAL_TRY,LITERAL_CATCH,LITERAL_FINALLY,LITERAL_DO,LITERAL_ELSE,LITERAL_FOR,INSTANCE_INIT,STATIC_INIT,LITERAL_SWITCH"/>
+    </module>
+    <module name="EmptyCatchBlock"/>
+    <module name="LeftCurly">
+      <property name="maxLineLength" value="140"/>
+    </module>
+    <module name="RightCurly"/>
+    <module name="NeedBraces">
+      <property name="tokens" value="LITERAL_DO,LITERAL_FOR,LITERAL_WHILE"/>
+      <property name="allowSingleLineStatement" value="true"/>
+    </module>
+    <module name="ArrayTypeStyle"/>
+    <module name="UpperEll"/>
+    <module name="OuterTypeFilename"/>
+    <module name="FinalClass"/>
+    <module name="HideUtilityClassConstructor"/>
+  </module>
+  <module name="Header">
+    <property name="header" value="// License: GPL. For details, see LICENSE file."/>
+    <property name="fileExtensions" value=".java"/>
+  </module>
+  <module name="FileLength">
+    <property name="fileExtensions" value=".java"/>
+  </module>
+  <module name="SuppressionCommentFilter">
+    <property name="offCommentFormat" value="CHECKSTYLE\.OFF\: ([\w\|]+)"/>
+    <property name="onCommentFormat" value="CHECKSTYLE\.ON\: ([\w\|]+)"/>
+    <property name="checkFormat" value="$1"/>
+  </module>
+  <module name="FileTabCharacter"/>
+  <module name="NewlineAtEndOfFile">
+    <property name="lineSeparator" value="lf"/>
+  </module>
+  <module name="SuppressionFilter">
+    <property name="file" value="${basedir}/tools/checkstyle/josm_filters.xml"/>
+  </module>
+</module>
diff --git a/tools/checkstyle/josm_filters.xml b/tools/checkstyle/josm_filters.xml
new file mode 100644
index 0000000..ded4750
--- /dev/null
+++ b/tools/checkstyle/josm_filters.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE suppressions PUBLIC
+     "-//Puppy Crawl//DTD Suppressions 1.0//EN"
+     "http://www.puppycrawl.com/dtds/suppressions_1_0.dtd">
+<suppressions>
+  <suppress checks="HeaderCheck" files="Ellipsoid.java" />
+  <suppress checks="HeaderCheck" files="NTV2GridShift.java" />
+  <suppress checks="HeaderCheck" files="NTV2GridShiftFile.java" />
+  <suppress checks="HeaderCheck" files="NTV2SubGrid.java" />
+  <suppress checks="HeaderCheck" files="NTV2Util.java" />
+  <suppress checks="HeaderCheck" files="DomainValidator.java" />
+  <suppress checks="HeaderCheck" files="EmailValidator.java" />
+  <suppress checks="HeaderCheck" files="InetAddressValidator.java" />
+  <suppress checks="HeaderCheck" files="RegexValidator.java" />
+  <suppress checks="HeaderCheck" files="UrlValidator.java" />
+  <suppress checks="HeaderCheck" files="Entities.java" />
+  <suppress checks="HeaderCheck" files="FileDrop.java" />
+  <suppress checks="HeaderCheck" files="MenuScroller.java" />
+  <suppress checks="HeaderCheck" files="MultiSplitLayout.java" />
+  <suppress checks="HeaderCheck" files="MultiSplitPane.java" />
+  <suppress checks="HeaderCheck" files="DNSName.java" />
+</suppressions>
\ No newline at end of file
diff --git a/tools/findbugs/josm-filter.xml b/tools/findbugs/josm-filter.xml
index d045880..fcf3612 100644
--- a/tools/findbugs/josm-filter.xml
+++ b/tools/findbugs/josm-filter.xml
@@ -25,6 +25,12 @@
 		<Class name="~org.openstreetmap.gui.jmapviewer.*" />
 	</Match>
     <Match>
+        <Class name="~org.openstreetmap.josm.gui.mappaint.mapcss.parsergen.*" />
+    </Match>
+    <Match>
+        <Class name="~org.openstreetmap.josm.data.imagery.types.*" />
+    </Match>
+    <Match>
         <Class name="~org.w3._2001.xmlschema.*" />
     </Match>
 

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



More information about the Pkg-grass-devel mailing list